<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>35163</bug_id>
          
          <creation_ts>2010-02-19 10:18:59 -0800</creation_ts>
          <short_desc>autoinstall: should unzip downloaded zip and gzip files prior to importing</short_desc>
          <delta_ts>2010-03-31 23:20:29 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>35584</dependson>
          <blocked>33639</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Jerdonek">cjerdonek</reporter>
          <assigned_to name="Chris Jerdonek">cjerdonek</assigned_to>
          <cc>abarth</cc>
    
    <cc>cjerdonek</cc>
    
    <cc>eikeon</cc>
    
    <cc>eric</cc>
    
    <cc>hamaji</cc>
    
    <cc>levin</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>191959</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-02-19 10:18:59 -0800</bug_when>
    <thetext>Autoinstall should probably unzip downloaded zip files prior to importing.

See, for example, the following information from the zipimport documentation:

&quot;Any files may be present in the ZIP archive, but only files .py and .py[co] are available for import.... Note that if an archive only contains .py files, Python will not attempt to modify the archive by adding the corresponding .pyc or .pyo file, meaning that if a ZIP archive doesn’t contain .pyc files, importing may be rather slow.&quot;

(from the beginning of http://docs.python.org/library/zipimport.html )

The two packages we currently autoinstall don&apos;t seem to have .pyc files.

Also, it seems like autoinstall&apos;s code should modify sys.path rather than using zipimport directly, as described in the following example:

http://docs.python.org/library/zipimport.html#examples</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192004</commentid>
    <comment_count>1</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-19 11:44:27 -0800</bug_when>
    <thetext>CCing the author of autoinstall.py</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192060</commentid>
    <comment_count>2</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-02-19 14:36:41 -0800</bug_when>
    <thetext>(In reply to comment #0)
&gt; Also, it seems like autoinstall&apos;s code should modify sys.path rather than using
&gt; zipimport directly, as described in the following example:
&gt; 
&gt; http://docs.python.org/library/zipimport.html#examples

Just to expand on this a little bit.  Based on the notes and sample code from the link above, I think the following might be a somewhat more natural flow for autoinstall:

If autoinstall(location) is called from __file__ on a particular URL location, then autoinstall would download the location&apos;s contents to an &quot;autoinstalled_packages&quot; directory in the same directory as __file__ (if it hasn&apos;t already been downloaded).  It would also unzip the contents if necessary (and unzip and extract the contents in the case of a gzipped tar archive).  The final step would be to add the unzipped and extracted folder to Python&apos;s sys.path.

Once this is done, any calls to &quot;import&quot; will now also search all autoinstalled_packages directories.

Some advantages of this approach are that--

(1) it uses Python&apos;s usual import process, without having to call zipimport explicitly or using custom import hooks of the type described here:

http://www.python.org/dev/peps/pep-0302/

(2) it allows .pyc files to be generated.

(2) it generalizes to tar files, etc. with no change.

(3) it allows the downloaded packages to be located inside the packages in which they are actually used if we want -- instead of requiring them all to be in a global autoinstall folder.  For example, if the style sub-package of webkitpy needs to autoinstall pep8, then we could put the autoinstall(&lt;url_to_pep8&gt;) line in webkitpy.style&apos;s __init__.py.  Then pep8 would get downloaded into the style folder.  Or if we wanted pep8 to be installed in the top-level autoinstall folder, we would simply call autoinstall() from webkitpy&apos;s __init__.py.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192064</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-19 14:41:50 -0800</bug_when>
    <thetext>I like your proposal Chris.

I chose Daniel&apos;s Autoinstall because it was the only thing that looked remotely able to do this sort of auto-download out of the box (and I had no interest in writing my own).

I&apos;m not sure that an autoinstall() call could easily detect the calling __file__, but I agree that that would be preferable.

I also think that autoinstall usage makes a lot of sense from an __init__.py file, since it&apos;s nice to set it up once and have it automatically used throughout the module.

It would be very nice if the modified autoinstall could handle gzip and other files yes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192072</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-02-19 14:54:19 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; I like your proposal Chris.
&gt; 
&gt; I chose Daniel&apos;s Autoinstall because it was the only thing that looked remotely
&gt; able to do this sort of auto-download out of the box (and I had no interest in
&gt; writing my own).

I think it&apos;s great -- thanks.  It&apos;s super compact, too, which helps a lot.

&gt; I&apos;m not sure that an autoinstall() call could easily detect the calling
&gt; __file__, but I agree that that would be preferable.

I think you&apos;re right.  I realized this earlier, too -- so that __file__ (or its directory) would probably need to be passed in as a parameter.  Perhaps the autoinstall() method could accept a destination directory as a parameter and default to autoinstall.py&apos;s directory if the parameter is not present.

&gt; I also think that autoinstall usage makes a lot of sense from an __init__.py
&gt; file, since it&apos;s nice to set it up once and have it automatically used
&gt; throughout the module.

Yes, I agree.  The package was a great find!  And thanks, Daniel!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192223</commentid>
    <comment_count>5</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-02-20 17:54:39 -0800</bug_when>
    <thetext>I see that ClientForm is getting auto-installed, but I don&apos;t see where it&apos;s being imported.  All I see is this comment in bugzilla.py:

        bug_status = self.browser.find_control(&quot;bug_status&quot;, type=&quot;select&quot;)
        # This is a hack around the fact that ClientForm.ListControl seems to
        # have no simpler way to ask if a control has an item named &quot;REOPENED&quot;
        # without using exceptions for control flow.
        possible_bug_statuses = map(lambda item: item.name, bug_status.items)

Is ClientForm used anywhere?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192266</commentid>
    <comment_count>6</comment_count>
      <attachid>49151</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-02-21 10:58:18 -0800</bug_when>
    <thetext>Created attachment 49151
Proposed patch

This patch also addresses this report (re: *.tar.gz files for pep8):

https://bugs.webkit.org/show_bug.cgi?id=35164</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192267</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-21 10:59:05 -0800</bug_when>
    <thetext>Attachment 49151 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebKitTools/Scripts/webkitpy/__init__.py:18:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitpy/__init__.py:20:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitpy/__init__.py:22:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 3 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192269</commentid>
    <comment_count>8</comment_count>
      <attachid>49153</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-02-21 11:04:34 -0800</bug_when>
    <thetext>Created attachment 49153
Proposed patch 2

Removed tabs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192297</commentid>
    <comment_count>9</comment_count>
      <attachid>49166</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-02-21 13:23:57 -0800</bug_when>
    <thetext>Created attachment 49166
Proposed patch 3

Minor additions to code comments; modified autoinstall logging to be module-based instead of class-based.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192620</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-22 14:12:07 -0800</bug_when>
    <thetext>I think this patch broke the Mac EWS. :(  we should fix the EWS to be more robust about python patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192622</commentid>
    <comment_count>11</comment_count>
      <attachid>49166</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-22 14:15:56 -0800</bug_when>
    <thetext>Comment on attachment 49166
Proposed patch 3

We do lose the ability to have a local copy already in the search path:
 48 from webkitpy.thirdparty.autoinstalled.mechanize import Browser

I&apos;m not sure if that&apos;s good or bad.

Yeah... why wouldn&apos;t this new autoinstall just modify the search path to include these newly downloaded modules?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192677</commentid>
    <comment_count>12</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-02-22 15:49:50 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 49166 [details])
&gt; We do lose the ability to have a local copy already in the search path:
&gt;  48 from webkitpy.thirdparty.autoinstalled.mechanize import Browser
&gt; 
&gt; I&apos;m not sure if that&apos;s good or bad.
&gt; 
&gt; Yeah... why wouldn&apos;t this new autoinstall just modify the search path to
&gt; include these newly downloaded modules?

This would be easy to add.  But if we want to do this, we may want to consider doing it outside of autoinstall.py, or at least not force it upon the caller.

It seems preferable to me because you can always add something to sys.path, but it&apos;s harder to remove.  For example, we could add--

thirdparty/autoinstalled

to sys.path inside webkitpy&apos;s __init__.py (though it would seem slightly odd for thirdparty/autoinstalled to be in the path and not thirdparty).

In general, it seems better to me to be explicit about where imports are coming from when possible because then there&apos;s less ambiguity, etc.  Modifying the search path seems a bit more hackish.  See for example--

https://bugs.webkit.org/show_bug.cgi?id=32971#c6

It seems like it should be relied upon more when there isn&apos;t really a good alternative -- e.g. when the code is in an external directory, in a place you don&apos;t have control over, or in some other awkward location (e.g. autoinstall.cache.d).  But now that we have control over the location, the technique isn&apos;t necessary.

In the extreme, we could add all of our directories to sys.path in __init__.py, and then we wouldn&apos;t have to know the location of any of our modules when importing. :) But that&apos;s obviously not good practice.

In terms of updating the import statements:

In the patch below, I experimented with an approach to addressing intra-package references in check-webkit-style:

https://bugs.webkit.org/show_bug.cgi?id=33791

I took that approach precisely to avoid having to do import search and replaces of the type found in the patch I&apos;m submitting here (though I later found that PEP8 discourages relative imports in all cases in favor of absolute package path imports).

I&apos;ll think further about adding support for modifying sys.path in this patch, though I have mixed feelings about using that feature here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192905</commentid>
    <comment_count>13</comment_count>
      <attachid>49283</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-02-23 06:09:41 -0800</bug_when>
    <thetext>Created attachment 49283
Proposed patch 4

Added support for adding the autoinstaller target directory to the sys.path search path.  Created temp directory lazily in try-except block of _create_scratch_directory() instead of in AutoInstaller constructor.  Other minor changes and clean-ups.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192909</commentid>
    <comment_count>14</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-02-23 06:18:37 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; Created an attachment (id=49283) [details]
&gt; Proposed patch 4
&gt; 
&gt; Added support for adding the autoinstaller target directory to the sys.path
&gt; search path.  Created temp directory lazily in try-except block of
&gt; _create_scratch_directory() instead of in AutoInstaller constructor.  Other
&gt; minor changes and clean-ups.

I kept the fully-qualified import statements for the reasons I mentioned in comment 12.  For now, I think if we can do it, we should.  If it becomes a maintenance problem, we can revisit the issue and consider alternatives.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193525</commentid>
    <comment_count>15</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-02-24 14:46:44 -0800</bug_when>
    <thetext>*** Bug 35164 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194335</commentid>
    <comment_count>16</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-02-26 15:21:01 -0800</bug_when>
    <thetext>Anything I can do to make reviewing this easier -- any volunteers?  It&apos;s the only thing stopping us from enabling Python style-checking.  Thanks a lot in advance!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194340</commentid>
    <comment_count>17</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-02-26 15:37:09 -0800</bug_when>
    <thetext>I&apos;ll try.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194358</commentid>
    <comment_count>18</comment_count>
      <attachid>49283</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-02-26 16:34:18 -0800</bug_when>
    <thetext>Comment on attachment 49283
Proposed patch 4

Just some minor nits to consider addressing before landing.
 


&gt; diff --git a/WebKitTools/Scripts/webkitpy/thirdparty/autoinstall.py b/WebKitTools/Scripts/webkitpy/thirdparty/autoinstall.py

You really re-wrote this. I don&apos;t think it should be in thirdparty anymore, even though it originated that way. At this point,
we can&apos;t take upstream changes and it should match WK coding guidelines but that can happen in another patch.



&gt; +    def _extract_targz(self, path, scratch_dir):
&gt; +        # tarfile.extractall() extracts to a path without the
&gt; +        # trailing &quot;.tar.gz&quot;.
&gt; +        #
&gt; +        # The substring &quot;.tar.gz&quot; has seven characters.
&gt; +        target_basename = os.path.basename(path[:-7])

How about
  target_basename = os.path.basename(path[:-len(&quot;.tar.gz&quot;)])
with no comment?


&gt; +        target_path = os.path.join(scratch_dir, target_basename)
&gt; +
&gt; +        self._log_transfer(&quot;Starting gunzip/extract...&quot;, path, target_path)
&gt; +
&gt; +        tfile = tarfile.open(path)

tfile is an odd abbreviation. How about tar_file or compressed_file, etc.?


&gt; +    def _unzip(self, path, scratch_dir):
&gt; +        # zipfile.extractall() extracts to a path without the
&gt; +        # trailing &quot;.zip&quot;.
&gt; +        #
&gt; +        # The substring &quot;.zip&quot; has four characters.
&gt; +        target_basename = os.path.basename(path[:-4])

Or
        target_basename = os.path.basename(path[:-len(&quot;.zip&quot;)])

with no comment (about the length of &quot;.zip&quot;).


&gt; +    def _download(self, url, scratch_dir):
&gt; +        &quot;&quot;&quot;Download URL contents, and return the download path.&quot;&quot;&quot;
&gt; +        self._log_transfer(&quot;Starting download...&quot;, url, scratch_dir)
&gt; +        url_path = urlparse.urlsplit(url)[2]
&gt; +        url_path = os.path.normpath(url_path)  # Removes trailing slash.

Unless there is some pep8 rule, stick with the one space between code and comments.


&gt; +
&gt; +    def install(self, url, should_refresh=False, target_name=None,
&gt; +                url_subpath=None):
&gt; +
&gt; +        target_path = os.path.join(self._target_dir, target_name)
&gt; +        if (not should_refresh) and self._is_downloaded(target_name, url):

no need for parens around &quot;not should_refresh&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194462</commentid>
    <comment_count>19</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-02-26 22:58:31 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 49283 [details])

Thanks a lot for the comments and for your review, David.  I&apos;ll incorporate all of your suggestions.

&gt; &gt; +    def _download(self, url, scratch_dir):
&gt; &gt; +        &quot;&quot;&quot;Download URL contents, and return the download path.&quot;&quot;&quot;
&gt; &gt; +        self._log_transfer(&quot;Starting download...&quot;, url, scratch_dir)
&gt; &gt; +        url_path = urlparse.urlsplit(url)[2]
&gt; &gt; +        url_path = os.path.normpath(url_path)  # Removes trailing slash.
&gt; 
&gt; Unless there is some pep8 rule, stick with the one space between code and
&gt; comments.

Yes, PEP8 has the following guideline:

An inline comment is a comment on the same line as a statement.  Inline
comments should be separated by at least two spaces from the statement.
They should start with a # and a single space.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194471</commentid>
    <comment_count>20</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-02-27 00:07:17 -0800</bug_when>
    <thetext>Manually committed (via &quot;git svn dcommit&quot;):

http://trac.webkit.org/changeset/55348</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194631</commentid>
    <comment_count>21</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-02-28 23:21:28 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; Manually committed (via &quot;git svn dcommit&quot;):
&gt; 
&gt; http://trac.webkit.org/changeset/55348

This uses python2.6 features so breaks those of us on Leopard (which uses python2.5).  Specifically, I get an error with zipfile.extractall:
  http://docs.python.org/library/zipfile.html

This is breaking the commit queue bots too:
  http://webkit-commit-queue.appspot.com/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194633</commentid>
    <comment_count>22</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-02-28 23:29:33 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; (In reply to comment #20)
&gt; &gt; Manually committed (via &quot;git svn dcommit&quot;):
&gt; &gt; 
&gt; &gt; http://trac.webkit.org/changeset/55348
&gt; 
&gt; This uses python2.6 features so breaks those of us on Leopard (which uses
&gt; python2.5).  Specifically, I get an error with zipfile.extractall:
&gt;   http://docs.python.org/library/zipfile.html
&gt; 
&gt; This is breaking the commit queue bots too:
&gt;   http://webkit-commit-queue.appspot.com/

I&apos;m looking into it right now.  As you said, we basically need to replace the call to extractall() with Python 2.4 code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194634</commentid>
    <comment_count>23</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-02-28 23:42:07 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; (In reply to comment #21)
&gt; &gt; (In reply to comment #20)
&gt; &gt; &gt; Manually committed (via &quot;git svn dcommit&quot;):
&gt; &gt; &gt; 
&gt; &gt; &gt; http://trac.webkit.org/changeset/55348
&gt; &gt; 
&gt; &gt; This uses python2.6 features so breaks those of us on Leopard (which uses
&gt; &gt; python2.5).  Specifically, I get an error with zipfile.extractall:
&gt; &gt;   http://docs.python.org/library/zipfile.html
&gt; &gt; 
&gt; &gt; This is breaking the commit queue bots too:
&gt; &gt;   http://webkit-commit-queue.appspot.com/
&gt; 
&gt; I&apos;m looking into it right now.  As you said, we basically need to replace the
&gt; call to extractall() with Python 2.4 code.

I think I should be able to fix this within an hour or so.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194644</commentid>
    <comment_count>24</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-01 00:38:29 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; &gt; I&apos;m looking into it right now.  As you said, we basically need to replace the
&gt; &gt; call to extractall() with Python 2.4 code.
&gt; 
&gt; I think I should be able to fix this within an hour or so.

Well, it doesn&apos;t look like I&apos;ll be able to fix this soon after all.  Not even the ZipFile.open() method (which seems to do the actual unzipping) is available in 2.4.

The Python 2.6 code that implements open() isn&apos;t trivial, so I can&apos;t re-implement it right away.  For example, it contains this code:

        zef_file.seek(zinfo.header_offset, 0)

        # Skip the file header:
        fheader = zef_file.read(sizeFileHeader)
        if fheader[0:4] != stringFileHeader:
            raise BadZipfile, &quot;Bad magic number for file header&quot;

        fheader = struct.unpack(structFileHeader, fheader)
        fname = zef_file.read(fheader[_FH_FILENAME_LENGTH])
        if fheader[_FH_EXTRA_FIELD_LENGTH]:
            zef_file.read(fheader[_FH_EXTRA_FIELD_LENGTH])

        if fname != zinfo.orig_filename:
            raise BadZipfile, \
                      &apos;File name in directory &quot;%s&quot; and header &quot;%s&quot; differ.&apos; % (
                          zinfo.orig_filename, fname)

Maybe we will have to go back to using zipimport for the *.zip files (but we can stick with the approach of using gzip for pep8.py).

I believe rolling this out will require rolling out at least two patches (this in addition to the pep8 patch).  I&apos;ll communicate about this on IRC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194655</commentid>
    <comment_count>25</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-01 02:10:02 -0800</bug_when>
    <thetext>Manually rolled out (via &quot;git svn dcommit&quot;):

http://trac.webkit.org/changeset/55363</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>195258</commentid>
    <comment_count>26</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-02 14:57:28 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; I see that ClientForm is getting auto-installed, but I don&apos;t see where it&apos;s
&gt; being imported.  All I see is this comment in bugzilla.py:
&gt; 
&gt;         bug_status = self.browser.find_control(&quot;bug_status&quot;, type=&quot;select&quot;)
&gt;         # This is a hack around the fact that ClientForm.ListControl seems to
&gt;         # have no simpler way to ask if a control has an item named &quot;REOPENED&quot;
&gt;         # without using exceptions for control flow.
&gt;         possible_bug_statuses = map(lambda item: item.name, bug_status.items)
&gt; 
&gt; Is ClientForm used anywhere?

I discovered the answer to this question.  It is used in the mechanize package, in _html.py:

&gt; import re, copy, htmlentitydefs
&gt; import sgmllib, ClientForm

Thus, mechanize requires that ClientForm be in the search path.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205266</commentid>
    <comment_count>27</comment_count>
      <attachid>49283</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-28 17:21:47 -0700</bug_when>
    <thetext>Comment on attachment 49283
Proposed patch 4

Changing patch 4 from r+ to r-.

I will be attaching an update within a couple days.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205284</commentid>
    <comment_count>28</comment_count>
      <attachid>51875</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-28 19:40:54 -0700</bug_when>
    <thetext>Created attachment 51875
Proposed patch 5

It&apos;s been a while since patch 4 was rolled out due to an incompatibility with Python 2.5.  I was waiting for us to settle the versioning stuff and most of the re-organization before submitting an update.

The only substantive change here is writing a replacement for Python 2.6&apos;s extract_all method.  I also improved the log messages and  the information that renders when an error is raised.

After this lands, we&apos;ll be able to re-land the pep8 patch with essentially no change (just rebasing):

https://bugs.webkit.org/show_bug.cgi?id=33639

Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205815</commentid>
    <comment_count>29</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-03-29 19:54:38 -0700</bug_when>
    <thetext>Why are we still doing any bit of 2.4 dance?  Can&apos;t we just error out in 2.4?  I see no reason to have 2.4 soft-error code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206042</commentid>
    <comment_count>30</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-30 09:34:04 -0700</bug_when>
    <thetext>(In reply to comment #29)
&gt; Why are we still doing any bit of 2.4 dance?  Can&apos;t we just error out in 2.4? 
&gt; I see no reason to have 2.4 soft-error code.

It&apos;s so we can provide a nice error message for people that haven&apos;t upgraded, like so--

python -V
Python 2.4.6
chris_g4@stonewall:trunk-git (python-test-webkitpy-clean)&gt; test-webkitpy
[INFO] test-webkitpy: Suppressing most webkitpy logging while running unit tests.
[WARNING] test-webkitpy: WebKit Python scripts do not support your current Python version (2.4.6).  The minimum supported version is 2.5.
[INFO] webkitpy.test.main: Excluding: webkitpy.common.checkout.scm_unittest (use --all to include)
Traceback (most recent call last):
  File &quot;/Users/chris_g4/dev/WebKit/trunk-git/WebKitTools/Scripts/test-webkitpy&quot;, line 189, in ?
    Tester().run_tests(sys.argv)

That reminds me.  I meant to add to that message a link to the wiki page with instructions on how to upgrade.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206045</commentid>
    <comment_count>31</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-30 09:40:01 -0700</bug_when>
    <thetext>(In reply to comment #29)
&gt; Why are we still doing any bit of 2.4 dance?  Can&apos;t we just error out in 2.4? 
&gt; I see no reason to have 2.4 soft-error code.

FYI, we also have that nice message for webkit-patch, too (which will also see the update with the upgrade link):

&gt; python -V
Python 2.4.6
chris_g4@stonewall:trunk-git (python-test-webkitpy-clean)&gt; webkit-patch --help
WARNING: WebKit Python scripts do not support your current Python version (2.4.6).  The minimum supported version is 2.5.
Traceback (most recent call last):
  File &quot;/Users/chris_g4/dev/WebKit/trunk-git/WebKitTools/Scripts/webkit-patch&quot;, line 70, in ?
    main()
  File &quot;/Users/chris_g4/dev/WebKit/trunk-git/WebKitTools/Scripts/webkit-patch&quot;, line 63, in main
    from webkitpy.tool.main import WebKitPatch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206900</commentid>
    <comment_count>32</comment_count>
      <attachid>52240</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-31 19:16:03 -0700</bug_when>
    <thetext>Created attachment 52240
Proposed patch 6

Rebased to TOT.  Also removed an extraneous &quot;raise&quot; statement and an extraneous &quot;pass&quot; statement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206957</commentid>
    <comment_count>33</comment_count>
      <attachid>52240</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-03-31 22:36:35 -0700</bug_when>
    <thetext>Comment on attachment 52240
Proposed patch 6


&gt; diff --git a/WebKitTools/Scripts/test-webkitpy b/WebKitTools/Scripts/test-webkitpy.
&gt; +        if record.name.startswith(&quot;webkitpy.common.system.autoinstall&quot;) or \
&gt; +            record.name.startswith(&quot;webkitpy.test&quot;):

I prefer using parenthesis for a case like this as opposed to the line continuation \ (but this is very much a personal preference).

(Probably because I learned python while using this style guide: http://google-styleguide.googlecode.com/svn/trunk/pyguide.html?showone=Line_length#Line_length)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206962</commentid>
    <comment_count>34</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-31 22:50:01 -0700</bug_when>
    <thetext>(In reply to comment #33)
&gt; (From update of attachment 52240 [details])
&gt; 
&gt; &gt; diff --git a/WebKitTools/Scripts/test-webkitpy b/WebKitTools/Scripts/test-webkitpy.
&gt; &gt; +        if record.name.startswith(&quot;webkitpy.common.system.autoinstall&quot;) or \
&gt; &gt; +            record.name.startswith(&quot;webkitpy.test&quot;):
&gt; 
&gt; I prefer using parenthesis for a case like this as opposed to the line
&gt; continuation \ (but this is very much a personal preference).
&gt; 
&gt; (Probably because I learned python while using this style guide:
&gt; http://google-styleguide.googlecode.com/svn/trunk/pyguide.html?showone=Line_length#Line_length)

Thanks, David!  I guess I don&apos;t have a uniform preference on this yet.  Once WebKit adopts PEP8 officially (e.g. on the style guidelines web page), perhaps we can take a position on this issue, too, like Google did.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206971</commentid>
    <comment_count>35</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-31 23:10:31 -0700</bug_when>
    <thetext>Committed:

http://trac.webkit.org/changeset/56897</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206972</commentid>
    <comment_count>36</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-03-31 23:11:39 -0700</bug_when>
    <thetext>webkit-patch land still no-workie for you?  Or webkit-patch mark-as-fixed even. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206974</commentid>
    <comment_count>37</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-31 23:19:38 -0700</bug_when>
    <thetext>(In reply to comment #36)
&gt; webkit-patch land still no-workie for you?  Or webkit-patch mark-as-fixed even.
&gt; :)

The last 3 times I tried it, it left my command in a half-completed state which has been more hurt than help for me.  :(

I think in all cases it was caused by outdated credentials in my keychain.  I&apos;ve tried updating the credentials in my keychain using the KeyChain Access app, but it hasn&apos;t seemed to stick/work (there are like 5 or 6 keychains associated to bugs.webkit.org which seems like a separate issue in its own right).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206976</commentid>
    <comment_count>38</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-31 23:20:29 -0700</bug_when>
    <thetext>(In reply to comment #37)
&gt; app, but it hasn&apos;t seemed to stick/work (there are like 5 or 6 keychains

keys not keychains</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49151</attachid>
            <date>2010-02-21 10:58:18 -0800</date>
            <delta_ts>2010-02-21 11:04:34 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>_patch-35163-1.diff</filename>
            <type>text/plain</type>
            <size>25039</size>
            <attacher name="Chris Jerdonek">cjerdonek</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBlOTNmZmRhLi4zNDQ2MWUzIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTAtMDIt
MjEgIENocmlzIEplcmRvbmVrICA8Y2plcmRvbmVrQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmV3cm90ZSBhdXRvaW5zdGFsbC5w
eSB0byBzdXBwb3J0IHVuemlwcGluZyBhbmQgZXh0cmFjdGluZworICAgICAgICAqLnppcCBhbmQg
Ki50YXIuZ3ogZmlsZXMgYWZ0ZXIgZG93bmxvYWQgYW5kIGNvcHlpbmcgdG8gYQorICAgICAgICBn
aXZlbiBsb2NhdGlvbi4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MzUxNjMKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvX19pbml0X18ucHk6
CisgICAgICAgICAgLSBVcGRhdGVkIHRoZSBhdXRvaW5zdGFsbCBsaW5lcyB0byB1c2UgdGhlIG5l
dyBhdXRvaW5zdGFsbCBtZXRob2RzLgorICAgICAgICAgIC0gQWRkZWQgcGVwOC5weSB0byBsaXN0
IG9mIGF1dG8taW5zdGFsbGVkIHBhY2thZ2VzLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9idWd6aWxsYS5weToKKyAgICAgICAgICAtIFVwZGF0ZWQgbWVjaGFuaXplIGltcG9ydCBwYXRo
LgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9uZXR3b3JrdHJhbnNhY3Rpb24ucHk6Cisg
ICAgICAgICAgLSBVcGRhdGVkIG1lY2hhbml6ZSBpbXBvcnQgcGF0aC4KKworICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvbmV0d29ya3RyYW5zYWN0aW9uX3VuaXR0ZXN0LnB5OgorICAgICAgICAg
IC0gVXBkYXRlZCBtZWNoYW5pemUgaW1wb3J0IHBhdGguCisKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L3N0YXR1c3NlcnZlci5weToKKyAgICAgICAgICAtIFVwZGF0ZWQgbWVjaGFuaXplIGlt
cG9ydCBwYXRoLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L2F1dG9p
bnN0YWxsLnB5OgorICAgICAgICAgIC0gQWRkZWQgQXV0b0luc3RhbGxlciBjbGFzcy4KKyAgICAg
ICAgICAtIFJlbW92ZWQgb2xkICJiaW5kIi1hcHByb2FjaCBjb2RlLgorICAgICAgICAgIC0gVXBk
YXRlZCBfX21haW5fXyB3aXRoIHNhbXBsZSB1c2FnZS4KKwogMjAxMC0wMi0yMCAgQ2hyaXMgSmVy
ZG9uZWsgIDxjamVyZG9uZWtAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFt
IEJhcnRoLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9fX2luaXRf
Xy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvX19pbml0X18ucHkKaW5kZXggZWZh
OGM3YS4uOGJjYjcxYyAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9f
X2luaXRfXy5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L19faW5pdF9fLnB5
CkBAIC0xLDggKzEsMjMgQEAKICMgUmVxdWlyZWQgZm9yIFB5dGhvbiB0byBzZWFyY2ggdGhpcyBk
aXJlY3RvcnkgZm9yIG1vZHVsZSBmaWxlcwogCi1pbXBvcnQgdGhpcmRwYXJ0eS5hdXRvaW5zdGFs
bCBhcyBhdXRvaW5zdGFsbAoraW1wb3J0IGxvZ2dpbmcKKworZnJvbSB0aGlyZHBhcnR5LmF1dG9p
bnN0YWxsIGltcG9ydCBBdXRvSW5zdGFsbGVyCisKKyMgV2UgcHV0IGF1dG8taW5zdGFsbGVkIHRo
aXJkLXBhcnR5IG1vZHVsZXMgaGVyZToKKyMKKyMgICAgIHdlYmtpdHB5L3RoaXJkcGFydHkvYXV0
b2luc3RhbGxlZAorIworIyBXZSBjYW4gdXNlIHRoZSBkZWZhdWx0ICJ0YXJnZXRfZGlyIiBwYXJh
bWV0ZXIgc2luY2UgYXV0b2luc3RhbGwucHkgaXMKKyMgYWxyZWFkeSBsb2NhdGVkIGluc2lkZSB3
ZWJraXRweS90aGlyZHBhcnR5LgoraW5zdGFsbGVyID0gQXV0b0luc3RhbGxlcihsb2dnaW5nX2xl
dmVsPWxvZ2dpbmcuV0FSTikKIAogIyBMaXN0IG91ciB0aGlyZC1wYXJ0eSBsaWJyYXJ5IGRlcGVu
ZGVuY2llcyBoZXJlIGFuZCB3aGVyZSB0aGV5IGNhbiBiZQogIyBkb3dubG9hZGVkLgotYXV0b2lu
c3RhbGwuYmluZCgiQ2xpZW50Rm9ybSIsICJodHRwOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2Vz
L3NvdXJjZS9DL0NsaWVudEZvcm0vQ2xpZW50Rm9ybS0wLjIuMTAuemlwIiwgIkNsaWVudEZvcm0t
MC4yLjEwIikKLWF1dG9pbnN0YWxsLmJpbmQoIm1lY2hhbml6ZSIsICJodHRwOi8vcHlwaS5weXRo
b24ub3JnL3BhY2thZ2VzL3NvdXJjZS9tL21lY2hhbml6ZS9tZWNoYW5pemUtMC4xLjExLnppcCIs
ICJtZWNoYW5pemUtMC4xLjExIikKK2luc3RhbGxlci5pbnN0YWxsKHVybD0iaHR0cDovL3B5cGku
cHl0aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2UvbS9tZWNoYW5pemUvbWVjaGFuaXplLTAuMS4xMS56
aXAiLAorCQkJCSAgdXJsX3N1YnBhdGg9Im1lY2hhbml6ZSIpCitpbnN0YWxsZXIuaW5zdGFsbCh1
cmw9Imh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvc291cmNlL0MvQ2xpZW50Rm9ybS9D
bGllbnRGb3JtLTAuMi4xMC56aXAiLAorCQkJCSAgdXJsX3N1YnBhdGg9IkNsaWVudEZvcm0ucHki
KQoraW5zdGFsbGVyLmluc3RhbGwodXJsPSJodHRwOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2Vz
L3NvdXJjZS9wL3BlcDgvcGVwOC0wLjUuMC50YXIuZ3ojbWQ1PTUxMmE4MThhZjk5NzkyOTBjZDYx
OWNjZThlOWMyZTJiIiwKKwkJCQkgIHVybF9zdWJwYXRoPSJwZXA4LTAuNS4wL3BlcDgucHkiKQor
CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2J1Z3ppbGxhLnB5IGIv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9idWd6aWxsYS5weQppbmRleCAwMGU2OTQwLi41
YTIxNzI4IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2J1Z3ppbGxh
LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvYnVnemlsbGEucHkKQEAgLTQ1
LDcgKzQ1LDcgQEAgZnJvbSB3ZWJraXRweS51c2VyIGltcG9ydCBVc2VyCiAjIHNvIHRoaXMgaW1w
b3J0IHNob3VsZCBhbHdheXMgc3VjY2VlZC4KIGZyb20gd2Via2l0cHkudGhpcmRwYXJ0eS5CZWF1
dGlmdWxTb3VwIGltcG9ydCBCZWF1dGlmdWxTb3VwLCBTb3VwU3RyYWluZXIKIAotZnJvbSBtZWNo
YW5pemUgaW1wb3J0IEJyb3dzZXIKK2Zyb20gd2Via2l0cHkudGhpcmRwYXJ0eS5hdXRvaW5zdGFs
bGVkLm1lY2hhbml6ZSBpbXBvcnQgQnJvd3NlcgogCiAKIGRlZiBwYXJzZV9idWdfaWQobWVzc2Fn
ZSk6CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L25ldHdvcmt0cmFu
c2FjdGlvbi5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbmV0d29ya3RyYW5zYWN0
aW9uLnB5CmluZGV4IDY1ZWEyN2QuLmE0YzkzMDAgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbmV0d29ya3RyYW5zYWN0aW9uLnB5CisrKyBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbmV0d29ya3RyYW5zYWN0aW9uLnB5CkBAIC0yOCw3ICsyOCw3IEBACiAK
IGltcG9ydCB0aW1lCiAKLWZyb20gbWVjaGFuaXplIGltcG9ydCBIVFRQRXJyb3IKK2Zyb20gd2Vi
a2l0cHkudGhpcmRwYXJ0eS5hdXRvaW5zdGFsbGVkLm1lY2hhbml6ZSBpbXBvcnQgSFRUUEVycm9y
CiBmcm9tIHdlYmtpdHB5LndlYmtpdF9sb2dnaW5nIGltcG9ydCBsb2cKIAogCmRpZmYgLS1naXQg
YS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L25ldHdvcmt0cmFuc2FjdGlvbl91bml0dGVz
dC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbmV0d29ya3RyYW5zYWN0aW9uX3Vu
aXR0ZXN0LnB5CmluZGV4IDNjZmZlMDIuLmY3Y2ViZDggMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbmV0d29ya3RyYW5zYWN0aW9uX3VuaXR0ZXN0LnB5CisrKyBiL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbmV0d29ya3RyYW5zYWN0aW9uX3VuaXR0ZXN0LnB5
CkBAIC0yOCw3ICsyOCw3IEBACiAKIGltcG9ydCB1bml0dGVzdAogCi1mcm9tIG1lY2hhbml6ZSBp
bXBvcnQgSFRUUEVycm9yCitmcm9tIHdlYmtpdHB5LnRoaXJkcGFydHkuYXV0b2luc3RhbGxlZC5t
ZWNoYW5pemUgaW1wb3J0IEhUVFBFcnJvcgogZnJvbSB3ZWJraXRweS5uZXR3b3JrdHJhbnNhY3Rp
b24gaW1wb3J0IE5ldHdvcmtUcmFuc2FjdGlvbiwgTmV0d29ya1RpbWVvdXQKIAogY2xhc3MgTmV0
d29ya1RyYW5zYWN0aW9uVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CmRpZmYgLS1naXQgYS9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0YXR1c3NlcnZlci5weSBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvc3RhdHVzc2VydmVyLnB5CmluZGV4IDlhNTY3MDIuLjM5ODgyZWEgMTAw
NjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3RhdHVzc2VydmVyLnB5Cisr
KyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3RhdHVzc2VydmVyLnB5CkBAIC0yOCw3
ICsyOCw3IEBACiAKIGZyb20gd2Via2l0cHkubmV0d29ya3RyYW5zYWN0aW9uIGltcG9ydCBOZXR3
b3JrVHJhbnNhY3Rpb24KIGZyb20gd2Via2l0cHkud2Via2l0X2xvZ2dpbmcgaW1wb3J0IGxvZwot
ZnJvbSBtZWNoYW5pemUgaW1wb3J0IEJyb3dzZXIKK2Zyb20gd2Via2l0cHkudGhpcmRwYXJ0eS5h
dXRvaW5zdGFsbGVkLm1lY2hhbml6ZSBpbXBvcnQgQnJvd3NlcgogCiAjIFdlYktpdCBpbmNsdWRl
cyBhIGJ1aWx0IGNvcHkgb2YgQmVhdXRpZnVsU291cCBpbiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJk
cGFydHkKICMgc28gdGhpcyBpbXBvcnQgc2hvdWxkIGFsd2F5cyBzdWNjZWVkLgpkaWZmIC0tZ2l0
IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L2F1dG9pbnN0YWxsLnB5
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L2F1dG9pbnN0YWxsLnB5
CmluZGV4IDQ2N2U2YjQuLjM5MDMzZDMgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvdGhpcmRwYXJ0eS9hdXRvaW5zdGFsbC5weQorKysgYi9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvYXV0b2luc3RhbGwucHkKQEAgLTEsNSArMSw2IEBACiAj
IENvcHlyaWdodCAoYykgMjAwOSwgRGFuaWVsIEtyZWNoIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0j
IAorIyBDb3B5cmlnaHQgKEMpIDIwMTAgQ2hyaXMgSmVyZG9uZWsgKGNqZXJkb25la0B3ZWJraXQu
b3JnKQorIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQogIyBtZXQ6CkBAIC0xNDcsODYg
KzE0OCwyMjIgQEAgZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudAogX192ZXJz
aW9uX18gPSAiMC4yIgogX19kb2Nmb3JtYXRfXyA9ICJyZXN0cnVjdHVyZWR0ZXh0IGVuIgogCi1p
bXBvcnQgb3MKK2ltcG9ydCBsb2dnaW5nCiBpbXBvcnQgbmV3CitpbXBvcnQgb3MKK2ltcG9ydCBz
aHV0aWwKIGltcG9ydCBzeXMKLWltcG9ydCB1cmxsaWIKLWltcG9ydCBsb2dnaW5nCitpbXBvcnQg
dGFyZmlsZQogaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdXJsbGliCitpbXBvcnQgdXJscGFyc2UK
K2ltcG9ydCB6aXBmaWxlCiBpbXBvcnQgemlwaW1wb3J0CiAKLV9sb2dnZXIgPSBsb2dnaW5nLmdl
dExvZ2dlcihfX25hbWVfXykKIAorY2xhc3MgQXV0b0luc3RhbGxlcihvYmplY3QpOgogCi1faW1w
b3J0ZXIgPSBOb25lCisgICAgIiIiU3VwcG9ydHMgYXV0b21hdGljYWxseSBpbnN0YWxsaW5nIFB5
dGhvbiBwYWNrYWdlcyBmcm9tIGFuIFVSTC4KIAotZGVmIF9nZXRJbXBvcnRlcigpOgotICAgIGds
b2JhbCBfaW1wb3J0ZXIKLSAgICBpZiBfaW1wb3J0ZXIgaXMgTm9uZToKLSAgICAgICAgX2ltcG9y
dGVyID0gSW1wb3J0ZXIoKQotICAgICAgICBzeXMubWV0YV9wYXRoLmFwcGVuZChfaW1wb3J0ZXIp
Ci0gICAgcmV0dXJuIF9pbXBvcnRlcgorICAgIFN1cHBvcnRzIHVuY29tcHJlc3NlZCBmaWxlcywg
LnRhci5neiwgYW5kIC56aXAgZm9ybWF0cy4KIAotZGVmIGJpbmQocGFja2FnZV9uYW1lLCB1cmws
IHppcF9zdWJwYXRoPU5vbmUpOgotICAgICIiImJpbmQgYSB0b3AgbGV2ZWwgcGFja2FnZSBuYW1l
IHRvIGEgVVJMLgorICAgIEJhc2ljIHVzYWdlOgogCi0gICAgVGhlIHBhY2thZ2UgbmFtZSBzaG91
bGQgYmUgYSBwYWNrYWdlIG5hbWUgYW5kIHRoZSB1cmwgc2hvdWxkIGJlIGEKLSAgICB1cmwgdG8g
c29tZXRoaW5nIHRoYXQgY2FuIGJlIGltcG9ydGVkIHVzaW5nIHRoZSB6aXBpbXBvcnRlci4KKyAg
ICBpbnN0YWxsZXIgPSBBdXRvSW5zdGFsbGVyKCkKKworICAgIGluc3RhbGxlci5pbnN0YWxsKHVy
bD0iaHR0cDovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2UvcC9wZXA4L3BlcDgtMC41
LjAudGFyLmd6I21kNT01MTJhODE4YWY5OTc5MjkwY2Q2MTljY2U4ZTljMmUyYiIsCisgICAgICAg
ICAgICAgICAgICAgICAgdXJsX3N1YnBhdGg9InBlcDgtMC41LjAvcGVwOC5weSIpCisgICAgaW5z
dGFsbGVyLmluc3RhbGwodXJsPSJodHRwOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2VzL3NvdXJj
ZS9tL21lY2hhbml6ZS9tZWNoYW5pemUtMC4xLjExLnppcCIsCisgICAgICAgICAgICAgICAgICAg
ICAgdXJsX3N1YnBhdGg9Im1lY2hhbml6ZSIpCiAKLSAgICBPcHRpb25hbCB6aXBfc3VicGF0aCBw
YXJhbWV0ZXIgYWxsb3dzIHNlYXJjaGluZyBmb3IgbW9kdWxlcwotICAgIGJlbG93IHRoZSByb290
IGxldmVsIG9mIHRoZSB6aXAgZmlsZS4KICAgICAiIiIKLSAgICBfZ2V0SW1wb3J0ZXIoKS5iaW5k
KHBhY2thZ2VfbmFtZSwgdXJsLCB6aXBfc3VicGF0aCkKIAorICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBsb2dnaW5nX2xldmVsPU5vbmUsIHRhcmdldF9kaXI9Tm9uZSwgdGVtcF9kaXI9Tm9uZSk6Cisg
ICAgICAgICIiIkNyZWF0ZSBhbiBBdXRvSW5zdGFsbGVyIGluc3RhbmNlLgogCi1jbGFzcyBDYWNo
ZShvYmplY3QpOgorICAgICAgICBBcmdzOgorICAgICAgICAgIGxvZ2dpbmdfbGV2ZWw6IFRoZSBs
b2dnaW5nIGxldmVsIGZvciB0aGUgY2xhc3MuICBEZWZhdWx0cworICAgICAgICAgICAgICAgICAg
ICAgICAgIHRvIGxvZ2dpbmcuSU5GTy4KKyAgICAgICAgICB0YXJnZXRfZGlyOiBUaGUgZGlyZWN0
b3J5IHBhdGggdG8gd2hpY2ggcGFja2FnZXMgc2hvdWxkIGJlIGluc3RhbGxlZC4KKyAgICAgICAg
ICB0ZW1wX2RpcjogVGhlIGRpcmVjdG9yeSBwYXRoIHRvIHVzZSBmb3IgYW55IHRlbXBvcmFyeSBm
aWxlcworICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZWQgd2hpbGUgZG93bmxvYWRpbmcsIHVu
emlwcGluZywgYW5kIGV4dHJhY3RpbmcKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgdG8g
aW5zdGFsbC4gIERlZmF1bHRzIHRvIGEgc3RhbmRhcmQgdGVtcG9yYXJ5CisgICAgICAgICAgICAg
ICAgICAgIGxvY2F0aW9uIGdlbmVyYXRlZCBieSB0aGUgdGVtcGZpbGUgbW9kdWxlLiAgVGhpcwor
ICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIgc2hvdWxkIG5vcm1hbGx5IGJlIHVzZWQgb25s
eSBmb3IgZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICAgICAgdGVzdGluZy4KIAotICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBkaXJlY3Rvcnk9Tm9uZSk6Ci0gICAgICAgIGlmIGRpcmVjdG9yeSBp
cyBOb25lOgotICAgICAgICAgICAgIyBEZWZhdWx0IHRvIHB1dHRpbmcgdGhlIGNhY2hlIGRpcmVj
dG9yeSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkKLSAgICAgICAgICAgICMgYXMgdGhpcyBmaWxlLgot
ICAgICAgICAgICAgY29udGFpbmluZ19kaXJlY3RvcnkgPSBvcy5wYXRoLmRpcm5hbWUoX19maWxl
X18pCi0gICAgICAgICAgICBkaXJlY3RvcnkgPSBvcy5wYXRoLmpvaW4oY29udGFpbmluZ19kaXJl
Y3RvcnksICJhdXRvaW5zdGFsbC5jYWNoZS5kIik7CisgICAgICAgICIiIgorICAgICAgICAjIENv
bmZpZ3VyZSB0aGUgbG9nZ2VyIGJlZm9yZSBhbnl0aGluZyBlbHNlIHNpbmNlIGxhdGVyIHBhcnRz
CisgICAgICAgICMgb2YgdGhpcyBjb25zdHJ1Y3RvciB1c2UgdGhlIGxvZ2dlci4KKyAgICAgICAg
aWYgbG9nZ2luZ19sZXZlbCBpcyBOb25lOgorICAgICAgICAgICAgbG9nZ2luZ19sZXZlbCA9IGxv
Z2dpbmcuSU5GTworICAgICAgICBsb2cgPSBsb2dnaW5nLmdldExvZ2dlcigiYXV0b2luc3RhbGwu
QXV0b0luc3RhbGxlciIpCisKKyAgICAgICAgY29uc29sZSA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxl
cigpCisgICAgICAgIGNvbnNvbGUuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKKyAgICAgICAgZm9y
bWF0dGVyID0gbG9nZ2luZy5Gb3JtYXR0ZXIoJyUobmFtZSlzOiBbJShsZXZlbG5hbWUpc10gJSht
ZXNzYWdlKXMnKQorICAgICAgICBjb25zb2xlLnNldEZvcm1hdHRlcihmb3JtYXR0ZXIpCisgICAg
ICAgIGxvZy5hZGRIYW5kbGVyKGNvbnNvbGUpCisgICAgICAgIGxvZy5zZXRMZXZlbChsb2dnaW5n
X2xldmVsKQorCisgICAgICAgIHNlbGYuX2xvZyA9IGxvZworCisgICAgICAgIGlmIHRhcmdldF9k
aXIgaXMgTm9uZToKKyAgICAgICAgICAgIHRoaXNfZGlyID0gb3MucGF0aC5kaXJuYW1lKF9fZmls
ZV9fKQorICAgICAgICAgICAgdGFyZ2V0X2RpciA9IG9zLnBhdGguam9pbih0aGlzX2RpciwgImF1
dG9pbnN0YWxsZWQiKQorICAgICAgICBpZiAoKHRlbXBfZGlyIGlzIG5vdCBOb25lKSBhbmQKKyAg
ICAgICAgICAgIG5vdCBvcy5wYXRoLmV4aXN0cyh0ZW1wX2RpcikpOgorICAgICAgICAgICAgIyBU
aGUgdGVtcGZpbGUubWtkdGVtcCgpIGluIHNlbGYuX3RlbXBfZGlyZWN0b3J5KCkgcmVxdWlyZXMK
KyAgICAgICAgICAgICMgdGhhdCB0aGUgZGlyZWN0b3J5IGNvcnJlc3BvbmRpbmcgdG8gaXRzICJk
aXIiIHBhcmFtZXRlcgorICAgICAgICAgICAgIyBhbHJlYWR5IGV4aXN0IGlmIGl0IGlzIG5vdCBO
b25lLgorICAgICAgICAgICAgb3MubWFrZWRpcnModGVtcF9kaXIpCisgICAgICAgICAgICBzZWxm
Ll9sb2cuaW5mbygnQ3JlYXRlZCBhdXRvaW5zdGFsbCB0ZW1wIGRpcmVjdG9yeSBhdDogIiVzIi4n
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAlIHRlbXBfZGlyKQorCisgICAgICAgICMgRW5z
dXJlIHRoYXQgdGhlIHRhcmdldCBkaXJlY3RvcnkgZXhpc3RzLgorICAgICAgICBzZWxmLl9jcmVh
dGVfdGFyZ2V0X2Rpcih0YXJnZXRfZGlyKQorCisgICAgICAgIHNlbGYuX3RhcmdldF9kaXIgPSB0
YXJnZXRfZGlyCisgICAgICAgIHNlbGYuX3RlbXBfZGlyID0gdGVtcF9kaXIKKworICAgIGRlZiBf
bG9nX3RyYW5zZm9ybShzZWxmLCBtZXNzYWdlLCBzb3VyY2UsIHRhcmdldCk6CisgICAgICAgICIi
IkxvZyBhIGRlYnVnIG1lc3NhZ2UgdGhhdCBpbnZvbHZlcyBhIHNvdXJjZSBhbmQgdGFyZ2V0LiIi
IgorICAgICAgICBzZWxmLl9sb2cuZGVidWcoIiVzXG4iCisgICAgICAgICAgICAgICAgICAgICAg
JyBGcm9tOiAiJXMiXG4nCisgICAgICAgICAgICAgICAgICAgICAgJyAgIFRvOiAiJXMiJyAlICht
ZXNzYWdlLCBzb3VyY2UsIHRhcmdldCkpCisKKyAgICBkZWYgX3dyaXRlX2ZpbGUoc2VsZiwgcGF0
aCwgdGV4dCk6CisgICAgICAgICIiIkNyZWF0ZSBhIGZpbGUgYXQgdGhlIGdpdmVuIHBhdGggd2l0
aCBnaXZlbiB0ZXh0LgorCisgICAgICAgIFRoaXMgbWV0aG9kIG92ZXJ3cml0ZXMgYW55IGV4aXN0
aW5nIGZpbGUuCiAKLSAgICAgICAgc2VsZi5kaXJlY3RvcnkgPSBkaXJlY3RvcnkKKyAgICAgICAg
IiIiCisgICAgICAgIHNlbGYuX2xvZy5kZWJ1ZygnV3JpdGluZyBmaWxlOiAiJXMiJyAlIHBhdGgp
CisgICAgICAgIGZpbGUgPSBvcGVuKHBhdGgsICJ3IikKICAgICAgICAgdHJ5OgotICAgICAgICAg
ICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNlbGYuZGlyZWN0b3J5KToKLSAgICAgICAgICAgICAg
ICBzZWxmLl9jcmVhdGVfY2FjaGVfZGlyZWN0b3J5KCkKLSAgICAgICAgZXhjZXB0IEV4Y2VwdGlv
biwgZXJyOgotICAgICAgICAgICAgX2xvZ2dlci5leGNlcHRpb24oZXJyKQotICAgICAgICAgICAg
c2VsZi5jYWNoZV9kaXJlY3RyeSA9IHRlbXBmaWxlLm1rZHRlbXAoKQotICAgICAgICBfbG9nZ2Vy
LmluZm8oIlVzaW5nIGNhY2hlIGRpcmVjdG9yeSAnJXMnLiIgJSBzZWxmLmRpcmVjdG9yeSkKLSAg
ICAKLSAgICBkZWYgX2NyZWF0ZV9jYWNoZV9kaXJlY3Rvcnkoc2VsZik6Ci0gICAgICAgIF9sb2dn
ZXIuZGVidWcoIkNyZWF0aW5nIGNhY2hlIGRpcmVjdG9yeSAnJXMnLiIgJSBzZWxmLmRpcmVjdG9y
eSkKLSAgICAgICAgb3MubWtkaXIoc2VsZi5kaXJlY3RvcnkpCi0gICAgICAgIHJlYWRtZV9wYXRo
ID0gb3MucGF0aC5qb2luKHNlbGYuZGlyZWN0b3J5LCAiUkVBRE1FIikKLSAgICAgICAgd2l0aCBv
cGVuKHJlYWRtZV9wYXRoLCAidyIpIGFzIGY6Ci0gICAgICAgICAgICBmLndyaXRlKCJUaGlzIGRp
cmVjdG9yeSB3YXMgYXV0by1nZW5lcmF0ZWQgYnkgJyVzJy5cbiIKLSAgICAgICAgICAgICAgICAg
ICAgIkl0IGlzIHNhZmUgdG8gZGVsZXRlLlxuIiAlIF9fZmlsZV9fKQotCi0gICAgZGVmIGdldChz
ZWxmLCB1cmwpOgotICAgICAgICBfbG9nZ2VyLmluZm8oIkdldHRpbmcgJyVzJyBmcm9tIGNhY2hl
LiIgJSB1cmwpCi0gICAgICAgIGZpbGVuYW1lID0gdXJsLnJzcGxpdCgiLyIpWy0xXQotCi0gICAg
ICAgICMgc28gdGhhdCBzb3VyY2UgdXJsIGlzIHNpZ25pZmljYW50IGluIGRldGVybWluaW5nIGNh
Y2hlIGhpdHMKLSAgICAgICAgZCA9IG9zLnBhdGguam9pbihzZWxmLmRpcmVjdG9yeSwgIiVzIiAl
IGhhc2godXJsKSkKLSAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGQpOgotICAgICAgICAg
ICAgb3MubWtkaXIoZCkKLQotICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihkLCBmaWxl
bmFtZSkgCi0KLSAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZmlsZW5hbWUpOgotICAgICAgICAg
ICAgX2xvZ2dlci5kZWJ1ZygiLi4uIGFscmVhZHkgY2FjaGVkIGluIGZpbGUgJyVzJy4iICUgZmls
ZW5hbWUpCisgICAgICAgICAgICBmaWxlLndyaXRlKHRleHQpCisgICAgICAgIGZpbmFsbHk6Cisg
ICAgICAgICAgICBmaWxlLmNsb3NlKCkKKworICAgIGRlZiBfY3JlYXRlX3RhcmdldF9kaXIoc2Vs
ZiwgdGFyZ2V0X2Rpcik6CisgICAgICAgICIiIkNyZWF0ZSBhIHRhcmdldCBkaXJlY3RvcnkgYW5k
IGFzc29jaWF0ZWQgX19pbml0X18ucHkgZmlsZS4iIiIKKyAgICAgICAgaWYgbm90IG9zLnBhdGgu
ZXhpc3RzKHRhcmdldF9kaXIpOgorICAgICAgICAgICAgb3MubWFrZWRpcnModGFyZ2V0X2RpcikK
KyAgICAgICAgICAgIHNlbGYuX2xvZy5pbmZvKCdDcmVhdGVkIGF1dG9pbnN0YWxsIHBhY2thZ2Ug
ZGlyZWN0b3J5IGF0OiAiJXMiLicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICUgdGFyZ2V0
X2RpcikKKyAgICAgICAgaW5pdF9wYXRoID0gb3MucGF0aC5qb2luKHRhcmdldF9kaXIsICJfX2lu
aXRfXy5weSIpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhpbml0X3BhdGgpOgorICAg
ICAgICAgICAgdGV4dCA9ICgiIyBUaGlzIGZpbGUgaXMgcmVxdWlyZWQgZm9yIFB5dGhvbiB0byBz
ZWFyY2ggdGhpcyAiCisgICAgICAgICAgICAgICAgICAgICJkaXJlY3RvcnkgZm9yIG1vZHVsZXMu
XG5cbiIpCisgICAgICAgICAgICBzZWxmLl93cml0ZV9maWxlKGluaXRfcGF0aCwgdGV4dCkKKwor
ICAgIGRlZiBfY3JlYXRlX3NjcmF0Y2hfZGlyZWN0b3J5KHNlbGYsIHRhcmdldF9uYW1lKToKKyAg
ICAgICAgIiIiQ3JlYXRlIGEgdGVtcG9yYXJ5IHNjcmF0Y2ggZGlyZWN0b3J5LCBhbmQgcmV0dXJu
IGl0cyBwYXRoLgorCisgICAgICAgIFRoZSBzY3JhdGNoIGRpcmVjdG9yeSBpcyBnZW5lcmF0ZWQg
aW5zaWRlIHRoZSB0ZW1wb3JhcnkgZGlyZWN0b3J5CisgICAgICAgIG9mIHRoaXMgQXV0b0luc3Rh
bGxlciBpbnN0YW5jZS4KKworICAgICAgICAiIiIKKyAgICAgICAgcHJlZml4ID0gdGFyZ2V0X25h
bWUgKyAiXyIKKyAgICAgICAgdGVtcF9kaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD1wcmVm
aXgsIGRpcj1zZWxmLl90ZW1wX2RpcikKKyAgICAgICAgcmV0dXJuIHRlbXBfZGlyCisKKyAgICBk
ZWYgX3ZlcnNpb25fcGF0aChzZWxmLCB0YXJnZXRfbmFtZSk6CisgICAgICAgIGZpbGVuYW1lID0g
Ii4lcy52ZXJzaW9uIiAlIHRhcmdldF9uYW1lCisgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4o
c2VsZi5fdGFyZ2V0X2RpciwgZmlsZW5hbWUpCisgICAgICAgIHJldHVybiBwYXRoCisKKyAgICBk
ZWYgX2lzX2Rvd25sb2FkZWQoc2VsZiwgdGFyZ2V0X25hbWUsIHVybCk6CisgICAgICAgICIiIlJl
dHVybiB3aGV0aGVyIGEgcGFja2FnZSB2ZXJzaW9uIGhhcyBiZWVuIGRvd25sb2FkZWQuIiIiCisg
ICAgICAgIHZlcnNpb25fcGF0aCA9IHNlbGYuX3ZlcnNpb25fcGF0aCh0YXJnZXRfbmFtZSkKKwor
ICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHModmVyc2lvbl9wYXRoKToKKyAgICAgICAgICAg
ICMgVGhlbiBubyBwYWNrYWdlIHZlcnNpb24gaGFzIGJlZW4gZG93bmxvYWRlZC4KKyAgICAgICAg
ICAgIHNlbGYuX2xvZy5kZWJ1ZygnVmVyc2lvbiBmaWxlIG5vdCBmb3VuZDogIiVzIicgJSB2ZXJz
aW9uX3BhdGgpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBmaWxlID0gb3Bl
bih2ZXJzaW9uX3BhdGgsICJyIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdmVyc2lvbiA9
IGZpbGUucmVhZCgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmaWxlLmNsb3NlKCkK
KyAgICAgICAgc2VsZi5fbG9nLmRlYnVnKCdSZWFkIHZlcnNpb24gIiVzIiBmcm9tICIlcyIuJyAl
ICh2ZXJzaW9uLCB2ZXJzaW9uX3BhdGgpKQorCisgICAgICAgIHJldHVybiB2ZXJzaW9uLnN0cmlw
KCkgPT0gdXJsLnN0cmlwKCkKKworICAgIGRlZiBfd3JpdGVfdmVyc2lvbl9kb3dubG9hZGVkKHNl
bGYsIHRhcmdldF9uYW1lLCB1cmwpOgorICAgICAgICAiIiJSZWNvcmQgdGhlIHZlcnNpb24gZG93
bmxvYWRlZCB0byBhIGZpbGUuIiIiCisgICAgICAgICMgUmVjb3JkIHZlcnNpb24gZG93bmxvYWRl
ZCB0byBmaWxlLgorICAgICAgICB2ZXJzaW9uX3BhdGggPSBzZWxmLl92ZXJzaW9uX3BhdGgodGFy
Z2V0X25hbWUpCisgICAgICAgIHNlbGYuX2xvZy5kZWJ1ZygnV3JpdGluZyB2ZXJzaW9uICIlcyIg
dG8gZmlsZTogIiVzIi4nCisgICAgICAgICAgICAgICAgICAgICAgJSAodXJsLCB2ZXJzaW9uX3Bh
dGgpKQorCisgICAgICAgIHNlbGYuX3dyaXRlX2ZpbGUodmVyc2lvbl9wYXRoLCB1cmwpCisKKyAg
ICBkZWYgX2V4dHJhY3RfdGFyZ3ooc2VsZiwgcGF0aCwgc2NyYXRjaF9kaXIpOgorICAgICAgICAj
IHRhcmZpbGUuZXh0cmFjdGFsbCgpIGV4dHJhY3RzIHRvIGEgcGF0aCB3aXRob3V0IHRoZQorICAg
ICAgICAjIHRyYWlsaW5nICIudGFyLmd6Ii4KKyAgICAgICAgIworICAgICAgICAjIFRoZSBzdWJz
dHJpbmcgIi50YXIuZ3oiIGhhcyBzZXZlbiBjaGFyYWN0ZXJzLgorICAgICAgICB0YXJnZXRfYmFz
ZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHBhdGhbOi03XSkKKyAgICAgICAgdGFyZ2V0X3BhdGgg
PSBvcy5wYXRoLmpvaW4oc2NyYXRjaF9kaXIsIHRhcmdldF9iYXNlbmFtZSkKKworICAgICAgICBz
ZWxmLl9sb2dfdHJhbnNmb3JtKCJTdGFydGluZyBndW56aXAvZXh0cmFjdC4uLiIsIHBhdGgsIHRh
cmdldF9wYXRoKQorCisgICAgICAgIHRmaWxlID0gdGFyZmlsZS5vcGVuKHBhdGgpCisgICAgICAg
IHRyeToKKyAgICAgICAgICAgIG1lbWJlcnMgPSB0ZmlsZS5nZXRtZW1iZXJzKCkKKyAgICAgICAg
ICAgIHNlbGYuX2xvZy5kZWJ1ZygiTWVtYmVycyBvZiAlcyBhcmU6ICVzIiAlIChwYXRoLCBtZW1i
ZXJzKSkKKyAgICAgICAgICAgIHRmaWxlLmV4dHJhY3RhbGwodGFyZ2V0X3BhdGgpCisgICAgICAg
IGZpbmFsbHk6CisgICAgICAgICAgICB0ZmlsZS5jbG9zZSgpCisKKyAgICAgICAgcmV0dXJuIHRh
cmdldF9wYXRoCisKKyAgICBkZWYgX3VuemlwKHNlbGYsIHBhdGgsIHNjcmF0Y2hfZGlyKToKKyAg
ICAgICAgIyB6aXBmaWxlLmV4dHJhY3RhbGwoKSBleHRyYWN0cyB0byBhIHBhdGggd2l0aG91dCB0
aGUKKyAgICAgICAgIyB0cmFpbGluZyAiLnppcCIuCisgICAgICAgICMKKyAgICAgICAgIyBUaGUg
c3Vic3RyaW5nICIuemlwIiBoYXMgZm91ciBjaGFyYWN0ZXJzLgorICAgICAgICB0YXJnZXRfYmFz
ZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHBhdGhbOi00XSkKKyAgICAgICAgdGFyZ2V0X3BhdGgg
PSBvcy5wYXRoLmpvaW4oc2NyYXRjaF9kaXIsIHRhcmdldF9iYXNlbmFtZSkKKworICAgICAgICBz
ZWxmLl9sb2dfdHJhbnNmb3JtKCJTdGFydGluZyB1bnppcC4uLiIsIHBhdGgsIHRhcmdldF9wYXRo
KQorCisgICAgICAgIHpmaWxlID0gemlwZmlsZS5aaXBGaWxlKHBhdGgsICJyIikKKyAgICAgICAg
dHJ5OgorICAgICAgICAgICAgemZpbGUuZXh0cmFjdGFsbChzY3JhdGNoX2RpcikKKyAgICAgICAg
ZmluYWxseToKKyAgICAgICAgICAgIHpmaWxlLmNsb3NlKCkKKworICAgICAgICByZXR1cm4gdGFy
Z2V0X3BhdGgKKworICAgIGRlZiBfcHJlcGFyZV9wYWNrYWdlKHNlbGYsIHBhdGgsIHNjcmF0Y2hf
ZGlyKToKKyAgICAgICAgIiIiUHJlcGFyZSBhIHBhY2thZ2UgZm9yIHVzZSwgaWYgbmVjZXNzYXJ5
LCBhbmQgcmV0dXJuIHRoZSBuZXcgcGF0aC4KKworICAgICAgICBGb3IgZXhhbXBsZSwgdGhpcyBt
ZXRob2QgdW56aXBzIHppcHBlZCBmaWxlcyBhbmQgZXh0cmFjdHMKKyAgICAgICAgdGFyIGZpbGVz
LgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgcGF0aDogVGhlIHBhdGggdG8gdGhlIGRvd25s
b2FkZWQgVVJMIGNvbnRlbnRzLgorICAgICAgICAgIHNjcmF0Y2hfZGlyOiBUaGUgc2NyYXRjaCBk
aXJlY3RvcnkuICBOb3RlIHRoYXQgdGhlIHNjcmF0Y2gKKyAgICAgICAgICAgICAgICAgICAgICAg
ZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBmaWxlIGRlc2lnbmF0ZWQgYnkgdGhlCisgICAgICAgICAg
ICAgICAgICAgICAgIHBhdGggcGFyYW1ldGVyLgorCisgICAgICAgICIiIgorICAgICAgICAjIEZJ
WE1FOiBBZGQgb3RoZXIgbmF0dXJhbCBleHRlbnNpb25zLgorICAgICAgICBpZiBwYXRoLmVuZHN3
aXRoKCIuemlwIik6CisgICAgICAgICAgICBuZXdfcGF0aCA9IHNlbGYuX3VuemlwKHBhdGgsIHNj
cmF0Y2hfZGlyKQorICAgICAgICBlbGlmIHBhdGguZW5kc3dpdGgoIi50YXIuZ3oiKToKKyAgICAg
ICAgICAgIG5ld19wYXRoID0gc2VsZi5fZXh0cmFjdF90YXJneihwYXRoLCBzY3JhdGNoX2RpcikK
ICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIF9sb2dnZXIuZGVidWcoIi4uLiBub3QgaW4gY2Fj
aGUuIENhY2hpbmcgaW4gJyVzJy4iICUgZmlsZW5hbWUpCi0gICAgICAgICAgICBzdHJlYW0gPSBm
aWxlKGZpbGVuYW1lLCAid2IiKQotICAgICAgICAgICAgc2VsZi5kb3dubG9hZCh1cmwsIHN0cmVh
bSkKLSAgICAgICAgICAgIHN0cmVhbS5jbG9zZSgpCi0gICAgICAgIHJldHVybiBmaWxlbmFtZQot
Ci0gICAgZGVmIGRvd25sb2FkKHNlbGYsIHVybCwgc3RyZWFtKToKLSAgICAgICAgX2xvZ2dlci5p
bmZvKCJEb3dubG9hZGluZzogJXMiICUgdXJsKQorICAgICAgICAgICAgIyBObyBwcmVwYXJhdGlv
biBpcyBuZWVkZWQuCisgICAgICAgICAgICBuZXdfcGF0aCA9IHBhdGgKKworICAgICAgICByZXR1
cm4gbmV3X3BhdGgKKworICAgIGRlZiBfZG93bmxvYWRfdG9fc3RyZWFtKHNlbGYsIHVybCwgc3Ry
ZWFtKToKKyAgICAgICAgIiIiRG93bmxvYWQgYW4gVVJMIHRvIGEgc3RyZWFtLCBhbmQgcmV0dXJu
IHRoZSBudW1iZXIgb2YgYnl0ZXMuIiIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG5ldHN0
cmVhbSA9IHVybGxpYi51cmxvcGVuKHVybCkKICAgICAgICAgICAgIGNvZGUgPSAyMDAKQEAgLTIz
NSwxMDEgKzM3MiwxNDMgQEAgY2xhc3MgQ2FjaGUob2JqZWN0KToKICAgICAgICAgICAgIGlmIG5v
dCAyMDAgPD0gY29kZSA8IDMwMDoKICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJI
VFRQIEVycm9yIGNvZGUgJXMiICUgY29kZSkKICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZXJy
OgotICAgICAgICAgICAgX2xvZ2dlci5leGNlcHRpb24oZXJyKQorICAgICAgICAgICAgc2VsZi5f
bG9nLmV4Y2VwdGlvbihlcnIpCiAKICAgICAgICAgQlVGU0laRSA9IDIqKjEzICAjIDhLQgotICAg
ICAgICBzaXplID0gMAorICAgICAgICBieXRlcyA9IDAKICAgICAgICAgd2hpbGUgVHJ1ZToKICAg
ICAgICAgICAgIGRhdGEgPSBuZXRzdHJlYW0ucmVhZChCVUZTSVpFKQogICAgICAgICAgICAgaWYg
bm90IGRhdGE6CiAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgIHN0cmVhbS53cml0
ZShkYXRhKQotICAgICAgICAgICAgc2l6ZSArPSBsZW4oZGF0YSkKKyAgICAgICAgICAgIGJ5dGVz
ICs9IGxlbihkYXRhKQogICAgICAgICBuZXRzdHJlYW0uY2xvc2UoKQotICAgICAgICBfbG9nZ2Vy
LmluZm8oIkRvd25sb2FkZWQgJWQgYnl0ZXMuIiAlIHNpemUpCi0KKyAgICAgICAgcmV0dXJuIGJ5
dGVzCiAKLWNsYXNzIEltcG9ydGVyKG9iamVjdCk6CisgICAgZGVmIF9kb3dubG9hZChzZWxmLCB1
cmwsIHNjcmF0Y2hfZGlyKToKKyAgICAgICAgIiIiRG93bmxvYWQgVVJMIGNvbnRlbnRzLCBhbmQg
cmV0dXJuIHRoZSBkb3dubG9hZCBwYXRoLiIiIgorICAgICAgICBzZWxmLl9sb2dfdHJhbnNmb3Jt
KCJTdGFydGluZyBkb3dubG9hZC4uLiIsIHVybCwgc2NyYXRjaF9kaXIpCiAKLSAgICBkZWYgX19p
bml0X18oc2VsZik6Ci0gICAgICAgIHNlbGYucGFja2FnZXMgPSB7fQotICAgICAgICBzZWxmLl9f
Y2FjaGUgPSBOb25lCisgICAgICAgIHVybF9wYXRoID0gdXJscGFyc2UudXJsc3BsaXQodXJsKVsy
XQorICAgICAgICB1cmxfcGF0aCA9IG9zLnBhdGgubm9ybXBhdGgodXJsX3BhdGgpICAjIFJlbW92
ZXMgdHJhaWxpbmcgc2xhc2guCisgICAgICAgIHRhcmdldF9maWxlbmFtZSA9IG9zLnBhdGguYmFz
ZW5hbWUodXJsX3BhdGgpCisgICAgICAgIHRhcmdldF9wYXRoID0gb3MucGF0aC5qb2luKHNjcmF0
Y2hfZGlyLCB0YXJnZXRfZmlsZW5hbWUpCiAKLSAgICBkZWYgX19nZXRfc3RvcmUoc2VsZik6Ci0g
ICAgICAgIHJldHVybiBzZWxmLl9fc3RvcmUKLSAgICBzdG9yZSA9IHByb3BlcnR5KF9fZ2V0X3N0
b3JlKQorICAgICAgICBzdHJlYW0gPSBmaWxlKHRhcmdldF9wYXRoLCAid2IiKQorICAgICAgICBi
eXRlcyA9IHNlbGYuX2Rvd25sb2FkX3RvX3N0cmVhbSh1cmwsIHN0cmVhbSkKKyAgICAgICAgc3Ry
ZWFtLmNsb3NlKCkKIAotICAgIGRlZiBfZ2V0X2NhY2hlKHNlbGYpOgotICAgICAgICBpZiBzZWxm
Ll9fY2FjaGUgaXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYuX19jYWNoZSA9IENhY2hlKCkKLSAg
ICAgICAgcmV0dXJuIHNlbGYuX19jYWNoZQotICAgIGRlZiBfc2V0X2NhY2hlKHNlbGYsIGNhY2hl
KToKLSAgICAgICAgc2VsZi5fX2NhY2hlID0gY2FjaGUKLSAgICBjYWNoZSA9IHByb3BlcnR5KF9n
ZXRfY2FjaGUsIF9zZXRfY2FjaGUpCisgICAgICAgIG1lc3NhZ2UgPSAiRG93bmxvYWRlZCAlcyBi
eXRlcy4uLiIgJSBieXRlcworICAgICAgICBzZWxmLl9sb2dfdHJhbnNmb3JtKG1lc3NhZ2UsIHVy
bCwgdGFyZ2V0X3BhdGgpCiAKLSAgICBkZWYgZmluZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUsIHBh
dGg9Tm9uZSk6Ci0gICAgICAgICIiIi0+IHNlbGYgb3IgTm9uZS4KKyAgICAgICAgcmV0dXJuIHRh
cmdldF9wYXRoCiAKLSAgICAgICAgU2VhcmNoIGZvciBhIG1vZHVsZSBzcGVjaWZpZWQgYnkgJ2Z1
bGxuYW1lJy4gJ2Z1bGxuYW1lJyBtdXN0IGJlCi0gICAgICAgIHRoZSBmdWxseSBxdWFsaWZpZWQg
KGRvdHRlZCkgbW9kdWxlIG5hbWUuIEl0IHJldHVybnMgdGhlCi0gICAgICAgIHppcGltcG9ydGVy
IGluc3RhbmNlIGl0c2VsZiBpZiB0aGUgbW9kdWxlIHdhcyBmb3VuZCwgb3IgTm9uZSBpZgotICAg
ICAgICBpdCB3YXNuJ3QuIFRoZSBvcHRpb25hbCAncGF0aCcgYXJndW1lbnQgaXMgaWdub3JlZCAt
LSBpdCdzCi0gICAgICAgIHRoZXJlIGZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlIGltcG9ydGVy
IHByb3RvY29sLiIpOwotICAgICAgICAiIiIKLSAgICAgICAgX2xvZ2dlci5kZWJ1ZygiZmluZF9t
b2R1bGUoJXMsIHBhdGg9JXMpIiAlIChmdWxsbmFtZSwgcGF0aCkpCi0KLSAgICAgICAgaWYgZnVs
bG5hbWUgaW4gc2VsZi5wYWNrYWdlczoKLSAgICAgICAgICAgICh1cmwsIHppcF9zdWJwYXRoKSA9
IHNlbGYucGFja2FnZXNbZnVsbG5hbWVdCi0gICAgICAgICAgICBmaWxlbmFtZSA9IHNlbGYuY2Fj
aGUuZ2V0KHVybCkKLSAgICAgICAgICAgIHppcF9wYXRoID0gIiVzLyVzIiAlIChmaWxlbmFtZSwg
emlwX3N1YnBhdGgpIGlmIHppcF9zdWJwYXRoIGVsc2UgZmlsZW5hbWUKLSAgICAgICAgICAgIF9s
b2dnZXIuZGVidWcoImZ1bGxuYW1lOiAlcyB1cmw6ICVzIHBhdGg6ICVzIHppcF9wYXRoOiAlcyIg
JSAoZnVsbG5hbWUsIHVybCwgcGF0aCwgemlwX3BhdGgpKQotICAgICAgICAgICAgdHJ5OgotICAg
ICAgICAgICAgICAgIGxvYWRlciA9IHppcGltcG9ydC56aXBpbXBvcnRlcih6aXBfcGF0aCkKLSAg
ICAgICAgICAgICAgICBfbG9nZ2VyLmRlYnVnKCJyZXR1cm5pbmc6ICVzIiAlIGxvYWRlcikKLSAg
ICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6Ci0gICAgICAgICAgICAgICAgX2xvZ2dlci5l
eGNlcHRpb24oZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICAgICAgcmV0
dXJuIGxvYWRlcgotICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgZGVmIGJpbmQoc2VsZiwgcGFj
a2FnZV9uYW1lLCB1cmwsIHppcF9zdWJwYXRoKToKLSAgICAgICAgX2xvZ2dlci5pbmZvKCJiaW5k
aW5nOiAlcyAtPiAlcyBzdWJwYXRoOiAlcyIgJSAocGFja2FnZV9uYW1lLCB1cmwsIHppcF9zdWJw
YXRoKSkKLSAgICAgICAgc2VsZi5wYWNrYWdlc1twYWNrYWdlX25hbWVdID0gKHVybCwgemlwX3N1
YnBhdGgpCisgICAgZGVmIF9pbnN0YWxsKHNlbGYsIHNjcmF0Y2hfZGlyLCB0YXJnZXRfbmFtZSwg
dGFyZ2V0X3BhdGgsIHVybCwKKyAgICAgICAgICAgICAgICAgdXJsX3N1YnBhdGgpOgorICAgICAg
ICAiIiJJbnN0YWxsIGEgcHl0aG9uIHBhY2thZ2UgZnJvbSBhbiBVUkwuCiAKKyAgICAgICAgVGhp
cyBpbnRlcm5hbCBtZXRob2Qgb3ZlcndyaXRlcyB0aGUgdGFyZ2V0IHBhdGggaWYgdGhlIHRhcmdl
dAorICAgICAgICBwYXRoIGFscmVhZHkgZXhpc3RzLgogCi1pZiBfX25hbWVfXz09Il9fbWFpbl9f
IjoKLSAgICBpbXBvcnQgbG9nZ2luZwotICAgICNsb2dnaW5nLmJhc2ljQ29uZmlnKCkKLSAgICBs
b2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigpCi0KLSAgICBjb25zb2xlID0gbG9nZ2luZy5TdHJl
YW1IYW5kbGVyKCkKLSAgICBjb25zb2xlLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCi0gICAgIyBz
ZXQgYSBmb3JtYXQgd2hpY2ggaXMgc2ltcGxlciBmb3IgY29uc29sZSB1c2UKLSAgICBmb3JtYXR0
ZXIgPSBsb2dnaW5nLkZvcm1hdHRlcignJShuYW1lKS0xMnM6ICUobGV2ZWxuYW1lKS04cyAlKG1l
c3NhZ2UpcycpCi0gICAgIyB0ZWxsIHRoZSBoYW5kbGVyIHRvIHVzZSB0aGlzIGZvcm1hdAotICAg
IGNvbnNvbGUuc2V0Rm9ybWF0dGVyKGZvcm1hdHRlcikKLSAgICAjIGFkZCB0aGUgaGFuZGxlciB0
byB0aGUgcm9vdCBsb2dnZXIKLSAgICBsb2dnZXIuYWRkSGFuZGxlcihjb25zb2xlKQotICAgIGxv
Z2dlci5zZXRMZXZlbChsb2dnaW5nLklORk8pCi0KLSAgICBiaW5kKCJweW1hcmMiLCAiaHR0cDov
L3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy8yLjUvcC9weW1hcmMvcHltYXJjLTIuMS1weTIuNS5l
Z2ciKQorICAgICAgICAiIiIKKyAgICAgICAgcGF0aCA9IHNlbGYuX2Rvd25sb2FkKHVybCwgc2Ny
YXRjaF9kaXIpCisgICAgICAgIHBhdGggPSBzZWxmLl9wcmVwYXJlX3BhY2thZ2UocGF0aCwgc2Ny
YXRjaF9kaXIpCiAKLSAgICBpbXBvcnQgcHltYXJjCisgICAgICAgIGlmIHVybF9zdWJwYXRoIGlz
IE5vbmU6CisgICAgICAgICAgICBzb3VyY2VfcGF0aCA9IHBhdGgKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIHNvdXJjZV9wYXRoID0gb3MucGF0aC5qb2luKHBhdGgsIHVybF9zdWJwYXRoKQor
CisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHRhcmdldF9wYXRoKToKKyAgICAgICAgICAgIHNl
bGYuX2xvZy5kZWJ1ZygnUmVmcmVzaGluZyBpbnN0YWxsOiBkZWxldGluZyAiJXMiLicgJSB0YXJn
ZXRfcGF0aCkKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIodGFyZ2V0X3BhdGgpOgorICAg
ICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUodGFyZ2V0X3BhdGgpCisgICAgICAgICAgICBlbHNl
OgorICAgICAgICAgICAgICAgIG9zLnJlbW92ZSh0YXJnZXRfcGF0aCkKKworICAgICAgICBzZWxm
Ll9sb2dfdHJhbnNmb3JtKCJNb3ZpbmcgaW50byBwbGFjZS4uLiIsIHNvdXJjZV9wYXRoLCB0YXJn
ZXRfcGF0aCkKKworICAgICAgICAjIFRoZSBzaHV0aWwubW92ZSgpIGNvbW1hbmQgY3JlYXRlcyBp
bnRlcm1lZGlhdGUgZGlyZWN0b3JpZXMgaWYgdGhleQorICAgICAgICAjIGRvIG5vdCBleGlzdCwg
YnV0IHdlIGRvIG5vdCByZWx5IG9uIHRoaXMgYmVoYXZpb3Igc2luY2Ugd2UKKyAgICAgICAgIyBu
ZWVkIHRvIGNyZWF0ZSB0aGUgX19pbml0X18ucHkgZmlsZSBhbnl3YXkuCisgICAgICAgIHNodXRp
bC5tb3ZlKHNvdXJjZV9wYXRoLCB0YXJnZXRfcGF0aCkKKworICAgICAgICBzZWxmLl93cml0ZV92
ZXJzaW9uX2Rvd25sb2FkZWQodGFyZ2V0X25hbWUsIHVybCkKKworICAgIGRlZiBpbnN0YWxsKHNl
bGYsIHVybCwgc2hvdWxkX3JlZnJlc2g9RmFsc2UsIHRhcmdldF9uYW1lPU5vbmUsCisgICAgICAg
ICAgICAgICAgdXJsX3N1YnBhdGg9Tm9uZSk6CisgICAgICAgICIiIkluc3RhbGwgYSBweXRob24g
cGFja2FnZSBmcm9tIGFuIFVSTC4KKworICAgICAgICBBcmdzOgorICAgICAgICAgIHVybDogVGhl
IFVSTCBmcm9tIHdoaWNoIHRvIGRvd25sb2FkIHRoZSBwYWNrYWdlLgorCisgICAgICAgIE9wdGlv
bmFsIEFyZ3M6CisgICAgICAgICAgc2hvdWxkX3JlZnJlc2g6IEEgYm9vbGVhbiB2YWx1ZSBvZiB3
aGV0aGVyIHRoZSBwYWNrYWdlIHNob3VsZCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICBk
b3dubG9hZGVkIGFnYWluIGlmIHRoZSBwYWNrYWdlIGlzIGFscmVhZHkgcHJlc2VudC4KKyAgICAg
ICAgICB0YXJnZXRfbmFtZTogVGhlIG5hbWUgb2YgdGhlIGZvbGRlciBvciBmaWxlIGluIHRoZSBh
dXRvaW5zdGFsbGVyCisgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCBkaXJlY3RvcnkgYXQg
d2hpY2ggdGhlIHBhY2thZ2Ugc2hvdWxkIGJlCisgICAgICAgICAgICAgICAgICAgICAgIGluc3Rh
bGxlZC4gIERlZmF1bHRzIHRvIHRoZSBiYXNlIG5hbWUgb2YgdGhlCisgICAgICAgICAgICAgICAg
ICAgICAgIFVSTCBzdWItcGF0aC4gIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgcHJvdmlkZWQgaWYK
KyAgICAgICAgICAgICAgICAgICAgICAgdGhlIFVSTCBzdWItcGF0aCBpcyBub3Qgc3BlY2lmaWVk
LgorICAgICAgICAgIHVybF9zdWJwYXRoOiBUaGUgcmVsYXRpdmUgcGF0aCBvZiB0aGUgVVJMIGRp
cmVjdG9yeSB0aGF0IHNob3VsZAorICAgICAgICAgICAgICAgICAgICAgICBiZSBpbnN0YWxsZWQu
ICBEZWZhdWx0cyB0byB0aGUgZnVsbCBkaXJlY3RvcnksIG9yCisgICAgICAgICAgICAgICAgICAg
ICAgIHRoZSBlbnRpcmUgVVJMIGNvbnRlbnRzLgogCi0gICAgcHJpbnQgcHltYXJjLl9fdmVyc2lv
bl9fLCBweW1hcmMuX19maWxlX18KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHRhcmdldF9uYW1l
IGlzIE5vbmU6CisgICAgICAgICAgICBpZiBub3QgdXJsX3N1YnBhdGg6CisgICAgICAgICAgICAg
ICAgcmFpc2UgVmFsdWVFcnJvcignVGhlICJ0YXJnZXRfbmFtZSIgcGFyYW1ldGVyIG11c3QgYmUg
JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Byb3ZpZGVkIGlmIHRoZSAidXJs
X3N1YnBhdGgiIHBhcmFtZXRlciAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
aXMgbm90IHByb3ZpZGVkLiIpCisgICAgICAgICAgICAjIFJlbW92ZSBhbnkgdHJhaWxpbmcgc2xh
c2hlcy4KKyAgICAgICAgICAgIHVybF9zdWJwYXRoID0gb3MucGF0aC5ub3JtcGF0aCh1cmxfc3Vi
cGF0aCkKKyAgICAgICAgICAgIHRhcmdldF9uYW1lID0gb3MucGF0aC5iYXNlbmFtZSh1cmxfc3Vi
cGF0aCkKKworICAgICAgICB0YXJnZXRfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLl90YXJnZXRf
ZGlyLCB0YXJnZXRfbmFtZSkKKyAgICAgICAgaWYgKG5vdCBzaG91bGRfcmVmcmVzaCkgYW5kIHNl
bGYuX2lzX2Rvd25sb2FkZWQodGFyZ2V0X25hbWUsIHVybCk6CisgICAgICAgICAgICBzZWxmLl9s
b2cuZGVidWcoJ1VSTCBhbHJlYWR5IGRvd25sb2FkZWQ6IHNraXBwaW5nICIlcyIuJworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJSB0YXJnZXRfcGF0aCkKKyAgICAgICAgICAgIHJldHVybgor
CisgICAgICAgIHNlbGYuX2xvZ190cmFuc2Zvcm0oIlN0YXJ0aW5nICVzIGluc3RhbGwuLi4iICUg
dGFyZ2V0X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsLCB0YXJnZXRfcGF0
aCkKKworICAgICAgICAjIFRoZSBzY3JhdGNoIGRpcmVjdG9yeSBpcyB3aGVyZSB3ZSB3aWxsIGRv
d25sb2FkIGFuZCBwcmVwYXJlCisgICAgICAgICMgZmlsZXMgc3BlY2lmaWMgdG8gdGhpcyBpbnN0
YWxsIHVudGlsIHRoZXkgYXJlIHJlYWR5IHRvIG1vdmUKKyAgICAgICAgIyBpbnRvIHBsYWNlLgor
ICAgICAgICBzY3JhdGNoX2RpciA9IHNlbGYuX2NyZWF0ZV9zY3JhdGNoX2RpcmVjdG9yeSh0YXJn
ZXRfbmFtZSkKIAotICAgIGFzc2VydCBweW1hcmMuX192ZXJzaW9uX189PSIyLjEiCisgICAgICAg
IHRyeToKKyAgICAgICAgICAgIHNlbGYuX2luc3RhbGwodGFyZ2V0X25hbWU9dGFyZ2V0X25hbWUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9wYXRoPXRhcmdldF9wYXRoLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNoX2Rpcj1zY3JhdGNoX2RpciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgdXJsPXVybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdXJs
X3N1YnBhdGg9dXJsX3N1YnBhdGgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxm
Ll9sb2cuZGVidWcoJ0NsZWFuaW5nIHVwOiBkZWxldGluZyAiJXMiLicgJSBzY3JhdGNoX2RpcikK
KyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoc2NyYXRjaF9kaXIpCisgICAgICAgIHNlbGYuX2xv
Zy5pbmZvKCdBdXRvLWluc3RhbGxlZCBwYWNrYWdlICIlcyIgYXQ6ICIlcyIuJworICAgICAgICAg
ICAgICAgICAgICAgICAlICh0YXJnZXRfbmFtZSwgdGFyZ2V0X3BhdGgpKQogCi0gICAgZCA9IF9n
ZXRJbXBvcnRlcigpLmNhY2hlLmRpcmVjdG9yeQotICAgIGFzc2VydCBkIGluIHB5bWFyYy5fX2Zp
bGVfXywgIiclcycgbm90IGZvdW5kIGluIHB5bWFyYy5fX2ZpbGVfXyAoJXMpIiAlIChkLCBweW1h
cmMuX19maWxlX18pCiAKLSAgICAjIENhbiBub3cgYWxzbyBiaW5kIHRvIG5vbiB0b3AgbGV2ZWwg
cGFja2FnZXMuIFRoZSBwYWNrYWdlcwotICAgICMgbGVhZGluZyB1cCB0byB0aGUgcGFja2FnZSBi
ZWluZyBib3VuZCB3aWxsIG5lZWQgdG8gYmUgZGVmaW5lZAotICAgICMgaG93ZXZlci4KLSAgICAj
Ci0gICAgIyBiaW5kKCJyZGYucGx1Z2lucy5zdG9yZXMubWVtb3J5IiwgCi0gICAgIyAgICAgICJo
dHRwOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2VzLzIuNS9yL3JkZi5wbHVnaW5zLnN0b3Jlcy5t
ZW1lb3J5L3JkZi5wbHVnaW5zLnN0b3Jlcy5tZW1vcnktMC45YS1weTIuNS5lZ2ciKQotICAgICMK
LSAgICAjIGZyb20gcmRmLnBsdWdpbnMuc3RvcmVzLm1lbW9yeSBpbXBvcnQgTWVtb3J5CitpZiBf
X25hbWVfXz09Il9fbWFpbl9fIjoKIAorICAgICMgVXNlIGEgbW9yZSB2aXNpYmxlIHRlbXAgZGly
ZWN0b3J5IGZvciBkZWJ1ZyBwdXJwb3Nlcy4KKyAgICB0aGlzX2RpciA9IG9zLnBhdGguZGlybmFt
ZShfX2ZpbGVfXykKKyAgICB0YXJnZXRfZGlyID0gb3MucGF0aC5qb2luKHRoaXNfZGlyLCAiYXV0
b2luc3RhbGxlZCIpCisgICAgdGVtcF9kaXIgPSBvcy5wYXRoLmpvaW4odGFyZ2V0X2RpciwgIlRl
bXAiKQorCisgICAgIyBMb2cgREVCVUcgbWVzc2FnZXMgZm9yIGRldmVsb3BtZW50IHRlc3Rpbmcg
cHVycG9zZXMuCisgICAgaW5zdGFsbGVyID0gQXV0b0luc3RhbGxlcihsb2dnaW5nX2xldmVsPWxv
Z2dpbmcuREVCVUcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfZGlyPXRh
cmdldF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wX2Rpcj10ZW1wX2Rp
cikKKworICAgIGluc3RhbGxlci5pbnN0YWxsKHNob3VsZF9yZWZyZXNoPUZhbHNlLAorICAgICAg
ICAgICAgICAgICAgICAgIHRhcmdldF9uYW1lPSJwZXA4LnB5IiwKKyAgICAgICAgICAgICAgICAg
ICAgICB1cmw9Imh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvc291cmNlL3AvcGVwOC9w
ZXA4LTAuNS4wLnRhci5neiNtZDU9NTEyYTgxOGFmOTk3OTI5MGNkNjE5Y2NlOGU5YzJlMmIiLAor
ICAgICAgICAgICAgICAgICAgICAgIHVybF9zdWJwYXRoPSJwZXA4LTAuNS4wL3BlcDgucHkiKQor
ICAgIGluc3RhbGxlci5pbnN0YWxsKHNob3VsZF9yZWZyZXNoPUZhbHNlLAorICAgICAgICAgICAg
ICAgICAgICAgIHRhcmdldF9uYW1lPSJtZWNoYW5pemUiLAorICAgICAgICAgICAgICAgICAgICAg
IHVybD0iaHR0cDovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2UvbS9tZWNoYW5pemUv
bWVjaGFuaXplLTAuMS4xMS56aXAiLAorICAgICAgICAgICAgICAgICAgICAgIHVybF9zdWJwYXRo
PSJtZWNoYW5pemUiKQogCg==
</data>
<flag name="commit-queue"
          id="31935"
          type_id="3"
          status="-"
          setter="cjerdonek"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49153</attachid>
            <date>2010-02-21 11:04:34 -0800</date>
            <delta_ts>2010-02-21 13:23:57 -0800</delta_ts>
            <desc>Proposed patch 2</desc>
            <filename>_patch-35163-2.diff</filename>
            <type>text/plain</type>
            <size>25075</size>
            <attacher name="Chris Jerdonek">cjerdonek</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBlOTNmZmRhLi4zNDQ2MWUzIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTAtMDIt
MjEgIENocmlzIEplcmRvbmVrICA8Y2plcmRvbmVrQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmV3cm90ZSBhdXRvaW5zdGFsbC5w
eSB0byBzdXBwb3J0IHVuemlwcGluZyBhbmQgZXh0cmFjdGluZworICAgICAgICAqLnppcCBhbmQg
Ki50YXIuZ3ogZmlsZXMgYWZ0ZXIgZG93bmxvYWQgYW5kIGNvcHlpbmcgdG8gYQorICAgICAgICBn
aXZlbiBsb2NhdGlvbi4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MzUxNjMKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvX19pbml0X18ucHk6
CisgICAgICAgICAgLSBVcGRhdGVkIHRoZSBhdXRvaW5zdGFsbCBsaW5lcyB0byB1c2UgdGhlIG5l
dyBhdXRvaW5zdGFsbCBtZXRob2RzLgorICAgICAgICAgIC0gQWRkZWQgcGVwOC5weSB0byBsaXN0
IG9mIGF1dG8taW5zdGFsbGVkIHBhY2thZ2VzLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9idWd6aWxsYS5weToKKyAgICAgICAgICAtIFVwZGF0ZWQgbWVjaGFuaXplIGltcG9ydCBwYXRo
LgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9uZXR3b3JrdHJhbnNhY3Rpb24ucHk6Cisg
ICAgICAgICAgLSBVcGRhdGVkIG1lY2hhbml6ZSBpbXBvcnQgcGF0aC4KKworICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvbmV0d29ya3RyYW5zYWN0aW9uX3VuaXR0ZXN0LnB5OgorICAgICAgICAg
IC0gVXBkYXRlZCBtZWNoYW5pemUgaW1wb3J0IHBhdGguCisKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L3N0YXR1c3NlcnZlci5weToKKyAgICAgICAgICAtIFVwZGF0ZWQgbWVjaGFuaXplIGlt
cG9ydCBwYXRoLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L2F1dG9p
bnN0YWxsLnB5OgorICAgICAgICAgIC0gQWRkZWQgQXV0b0luc3RhbGxlciBjbGFzcy4KKyAgICAg
ICAgICAtIFJlbW92ZWQgb2xkICJiaW5kIi1hcHByb2FjaCBjb2RlLgorICAgICAgICAgIC0gVXBk
YXRlZCBfX21haW5fXyB3aXRoIHNhbXBsZSB1c2FnZS4KKwogMjAxMC0wMi0yMCAgQ2hyaXMgSmVy
ZG9uZWsgIDxjamVyZG9uZWtAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFt
IEJhcnRoLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9fX2luaXRf
Xy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvX19pbml0X18ucHkKaW5kZXggZWZh
OGM3YS4uMjA5MGNiMCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9f
X2luaXRfXy5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L19faW5pdF9fLnB5
CkBAIC0xLDggKzEsMjMgQEAKICMgUmVxdWlyZWQgZm9yIFB5dGhvbiB0byBzZWFyY2ggdGhpcyBk
aXJlY3RvcnkgZm9yIG1vZHVsZSBmaWxlcwogCi1pbXBvcnQgdGhpcmRwYXJ0eS5hdXRvaW5zdGFs
bCBhcyBhdXRvaW5zdGFsbAoraW1wb3J0IGxvZ2dpbmcKKworZnJvbSB0aGlyZHBhcnR5LmF1dG9p
bnN0YWxsIGltcG9ydCBBdXRvSW5zdGFsbGVyCisKKyMgV2UgcHV0IGF1dG8taW5zdGFsbGVkIHRo
aXJkLXBhcnR5IG1vZHVsZXMgaGVyZToKKyMKKyMgICAgIHdlYmtpdHB5L3RoaXJkcGFydHkvYXV0
b2luc3RhbGxlZAorIworIyBXZSBjYW4gdXNlIHRoZSBkZWZhdWx0ICJ0YXJnZXRfZGlyIiBwYXJh
bWV0ZXIgc2luY2UgYXV0b2luc3RhbGwucHkgaXMKKyMgYWxyZWFkeSBsb2NhdGVkIGluc2lkZSB3
ZWJraXRweS90aGlyZHBhcnR5LgoraW5zdGFsbGVyID0gQXV0b0luc3RhbGxlcihsb2dnaW5nX2xl
dmVsPWxvZ2dpbmcuV0FSTikKIAogIyBMaXN0IG91ciB0aGlyZC1wYXJ0eSBsaWJyYXJ5IGRlcGVu
ZGVuY2llcyBoZXJlIGFuZCB3aGVyZSB0aGV5IGNhbiBiZQogIyBkb3dubG9hZGVkLgotYXV0b2lu
c3RhbGwuYmluZCgiQ2xpZW50Rm9ybSIsICJodHRwOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2Vz
L3NvdXJjZS9DL0NsaWVudEZvcm0vQ2xpZW50Rm9ybS0wLjIuMTAuemlwIiwgIkNsaWVudEZvcm0t
MC4yLjEwIikKLWF1dG9pbnN0YWxsLmJpbmQoIm1lY2hhbml6ZSIsICJodHRwOi8vcHlwaS5weXRo
b24ub3JnL3BhY2thZ2VzL3NvdXJjZS9tL21lY2hhbml6ZS9tZWNoYW5pemUtMC4xLjExLnppcCIs
ICJtZWNoYW5pemUtMC4xLjExIikKK2luc3RhbGxlci5pbnN0YWxsKHVybD0iaHR0cDovL3B5cGku
cHl0aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2UvbS9tZWNoYW5pemUvbWVjaGFuaXplLTAuMS4xMS56
aXAiLAorICAgICAgICAgICAgICAgICAgdXJsX3N1YnBhdGg9Im1lY2hhbml6ZSIpCitpbnN0YWxs
ZXIuaW5zdGFsbCh1cmw9Imh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvc291cmNlL0Mv
Q2xpZW50Rm9ybS9DbGllbnRGb3JtLTAuMi4xMC56aXAiLAorICAgICAgICAgICAgICAgICAgdXJs
X3N1YnBhdGg9IkNsaWVudEZvcm0ucHkiKQoraW5zdGFsbGVyLmluc3RhbGwodXJsPSJodHRwOi8v
cHlwaS5weXRob24ub3JnL3BhY2thZ2VzL3NvdXJjZS9wL3BlcDgvcGVwOC0wLjUuMC50YXIuZ3oj
bWQ1PTUxMmE4MThhZjk5NzkyOTBjZDYxOWNjZThlOWMyZTJiIiwKKyAgICAgICAgICAgICAgICAg
IHVybF9zdWJwYXRoPSJwZXA4LTAuNS4wL3BlcDgucHkiKQorCmRpZmYgLS1naXQgYS9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2J1Z3ppbGxhLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9idWd6aWxsYS5weQppbmRleCAwMGU2OTQwLi41YTIxNzI4IDEwMDY0NAotLS0gYS9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2J1Z3ppbGxhLnB5CisrKyBiL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvYnVnemlsbGEucHkKQEAgLTQ1LDcgKzQ1LDcgQEAgZnJvbSB3ZWJr
aXRweS51c2VyIGltcG9ydCBVc2VyCiAjIHNvIHRoaXMgaW1wb3J0IHNob3VsZCBhbHdheXMgc3Vj
Y2VlZC4KIGZyb20gd2Via2l0cHkudGhpcmRwYXJ0eS5CZWF1dGlmdWxTb3VwIGltcG9ydCBCZWF1
dGlmdWxTb3VwLCBTb3VwU3RyYWluZXIKIAotZnJvbSBtZWNoYW5pemUgaW1wb3J0IEJyb3dzZXIK
K2Zyb20gd2Via2l0cHkudGhpcmRwYXJ0eS5hdXRvaW5zdGFsbGVkLm1lY2hhbml6ZSBpbXBvcnQg
QnJvd3NlcgogCiAKIGRlZiBwYXJzZV9idWdfaWQobWVzc2FnZSk6CmRpZmYgLS1naXQgYS9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L25ldHdvcmt0cmFuc2FjdGlvbi5weSBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbmV0d29ya3RyYW5zYWN0aW9uLnB5CmluZGV4IDY1ZWEyN2Qu
LmE0YzkzMDAgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbmV0d29y
a3RyYW5zYWN0aW9uLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbmV0d29y
a3RyYW5zYWN0aW9uLnB5CkBAIC0yOCw3ICsyOCw3IEBACiAKIGltcG9ydCB0aW1lCiAKLWZyb20g
bWVjaGFuaXplIGltcG9ydCBIVFRQRXJyb3IKK2Zyb20gd2Via2l0cHkudGhpcmRwYXJ0eS5hdXRv
aW5zdGFsbGVkLm1lY2hhbml6ZSBpbXBvcnQgSFRUUEVycm9yCiBmcm9tIHdlYmtpdHB5LndlYmtp
dF9sb2dnaW5nIGltcG9ydCBsb2cKIAogCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L25ldHdvcmt0cmFuc2FjdGlvbl91bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbmV0d29ya3RyYW5zYWN0aW9uX3VuaXR0ZXN0LnB5CmluZGV4IDNjZmZl
MDIuLmY3Y2ViZDggMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbmV0
d29ya3RyYW5zYWN0aW9uX3VuaXR0ZXN0LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbmV0d29ya3RyYW5zYWN0aW9uX3VuaXR0ZXN0LnB5CkBAIC0yOCw3ICsyOCw3IEBACiAK
IGltcG9ydCB1bml0dGVzdAogCi1mcm9tIG1lY2hhbml6ZSBpbXBvcnQgSFRUUEVycm9yCitmcm9t
IHdlYmtpdHB5LnRoaXJkcGFydHkuYXV0b2luc3RhbGxlZC5tZWNoYW5pemUgaW1wb3J0IEhUVFBF
cnJvcgogZnJvbSB3ZWJraXRweS5uZXR3b3JrdHJhbnNhY3Rpb24gaW1wb3J0IE5ldHdvcmtUcmFu
c2FjdGlvbiwgTmV0d29ya1RpbWVvdXQKIAogY2xhc3MgTmV0d29ya1RyYW5zYWN0aW9uVGVzdCh1
bml0dGVzdC5UZXN0Q2FzZSk6CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3N0YXR1c3NlcnZlci5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3RhdHVz
c2VydmVyLnB5CmluZGV4IDlhNTY3MDIuLjM5ODgyZWEgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvc3RhdHVzc2VydmVyLnB5CisrKyBiL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvc3RhdHVzc2VydmVyLnB5CkBAIC0yOCw3ICsyOCw3IEBACiAKIGZyb20gd2Vi
a2l0cHkubmV0d29ya3RyYW5zYWN0aW9uIGltcG9ydCBOZXR3b3JrVHJhbnNhY3Rpb24KIGZyb20g
d2Via2l0cHkud2Via2l0X2xvZ2dpbmcgaW1wb3J0IGxvZwotZnJvbSBtZWNoYW5pemUgaW1wb3J0
IEJyb3dzZXIKK2Zyb20gd2Via2l0cHkudGhpcmRwYXJ0eS5hdXRvaW5zdGFsbGVkLm1lY2hhbml6
ZSBpbXBvcnQgQnJvd3NlcgogCiAjIFdlYktpdCBpbmNsdWRlcyBhIGJ1aWx0IGNvcHkgb2YgQmVh
dXRpZnVsU291cCBpbiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkKICMgc28gdGhpcyBpbXBv
cnQgc2hvdWxkIGFsd2F5cyBzdWNjZWVkLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS90aGlyZHBhcnR5L2F1dG9pbnN0YWxsLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS90aGlyZHBhcnR5L2F1dG9pbnN0YWxsLnB5CmluZGV4IDQ2N2U2YjQuLjM5MDMz
ZDMgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9h
dXRvaW5zdGFsbC5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFy
dHkvYXV0b2luc3RhbGwucHkKQEAgLTEsNSArMSw2IEBACiAjIENvcHlyaWdodCAoYykgMjAwOSwg
RGFuaWVsIEtyZWNoIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIAorIyBDb3B5cmlnaHQgKEMpIDIw
MTAgQ2hyaXMgSmVyZG9uZWsgKGNqZXJkb25la0B3ZWJraXQub3JnKQorIwogIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQogIyBtZXQ6CkBAIC0xNDcsODYgKzE0OCwyMjIgQEAgZnJvbSBfX2Z1
dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudAogX192ZXJzaW9uX18gPSAiMC4yIgogX19kb2Nm
b3JtYXRfXyA9ICJyZXN0cnVjdHVyZWR0ZXh0IGVuIgogCi1pbXBvcnQgb3MKK2ltcG9ydCBsb2dn
aW5nCiBpbXBvcnQgbmV3CitpbXBvcnQgb3MKK2ltcG9ydCBzaHV0aWwKIGltcG9ydCBzeXMKLWlt
cG9ydCB1cmxsaWIKLWltcG9ydCBsb2dnaW5nCitpbXBvcnQgdGFyZmlsZQogaW1wb3J0IHRlbXBm
aWxlCitpbXBvcnQgdXJsbGliCitpbXBvcnQgdXJscGFyc2UKK2ltcG9ydCB6aXBmaWxlCiBpbXBv
cnQgemlwaW1wb3J0CiAKLV9sb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKIAor
Y2xhc3MgQXV0b0luc3RhbGxlcihvYmplY3QpOgogCi1faW1wb3J0ZXIgPSBOb25lCisgICAgIiIi
U3VwcG9ydHMgYXV0b21hdGljYWxseSBpbnN0YWxsaW5nIFB5dGhvbiBwYWNrYWdlcyBmcm9tIGFu
IFVSTC4KIAotZGVmIF9nZXRJbXBvcnRlcigpOgotICAgIGdsb2JhbCBfaW1wb3J0ZXIKLSAgICBp
ZiBfaW1wb3J0ZXIgaXMgTm9uZToKLSAgICAgICAgX2ltcG9ydGVyID0gSW1wb3J0ZXIoKQotICAg
ICAgICBzeXMubWV0YV9wYXRoLmFwcGVuZChfaW1wb3J0ZXIpCi0gICAgcmV0dXJuIF9pbXBvcnRl
cgorICAgIFN1cHBvcnRzIHVuY29tcHJlc3NlZCBmaWxlcywgLnRhci5neiwgYW5kIC56aXAgZm9y
bWF0cy4KIAotZGVmIGJpbmQocGFja2FnZV9uYW1lLCB1cmwsIHppcF9zdWJwYXRoPU5vbmUpOgot
ICAgICIiImJpbmQgYSB0b3AgbGV2ZWwgcGFja2FnZSBuYW1lIHRvIGEgVVJMLgorICAgIEJhc2lj
IHVzYWdlOgogCi0gICAgVGhlIHBhY2thZ2UgbmFtZSBzaG91bGQgYmUgYSBwYWNrYWdlIG5hbWUg
YW5kIHRoZSB1cmwgc2hvdWxkIGJlIGEKLSAgICB1cmwgdG8gc29tZXRoaW5nIHRoYXQgY2FuIGJl
IGltcG9ydGVkIHVzaW5nIHRoZSB6aXBpbXBvcnRlci4KKyAgICBpbnN0YWxsZXIgPSBBdXRvSW5z
dGFsbGVyKCkKKworICAgIGluc3RhbGxlci5pbnN0YWxsKHVybD0iaHR0cDovL3B5cGkucHl0aG9u
Lm9yZy9wYWNrYWdlcy9zb3VyY2UvcC9wZXA4L3BlcDgtMC41LjAudGFyLmd6I21kNT01MTJhODE4
YWY5OTc5MjkwY2Q2MTljY2U4ZTljMmUyYiIsCisgICAgICAgICAgICAgICAgICAgICAgdXJsX3N1
YnBhdGg9InBlcDgtMC41LjAvcGVwOC5weSIpCisgICAgaW5zdGFsbGVyLmluc3RhbGwodXJsPSJo
dHRwOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2VzL3NvdXJjZS9tL21lY2hhbml6ZS9tZWNoYW5p
emUtMC4xLjExLnppcCIsCisgICAgICAgICAgICAgICAgICAgICAgdXJsX3N1YnBhdGg9Im1lY2hh
bml6ZSIpCiAKLSAgICBPcHRpb25hbCB6aXBfc3VicGF0aCBwYXJhbWV0ZXIgYWxsb3dzIHNlYXJj
aGluZyBmb3IgbW9kdWxlcwotICAgIGJlbG93IHRoZSByb290IGxldmVsIG9mIHRoZSB6aXAgZmls
ZS4KICAgICAiIiIKLSAgICBfZ2V0SW1wb3J0ZXIoKS5iaW5kKHBhY2thZ2VfbmFtZSwgdXJsLCB6
aXBfc3VicGF0aCkKIAorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2dnaW5nX2xldmVsPU5vbmUs
IHRhcmdldF9kaXI9Tm9uZSwgdGVtcF9kaXI9Tm9uZSk6CisgICAgICAgICIiIkNyZWF0ZSBhbiBB
dXRvSW5zdGFsbGVyIGluc3RhbmNlLgogCi1jbGFzcyBDYWNoZShvYmplY3QpOgorICAgICAgICBB
cmdzOgorICAgICAgICAgIGxvZ2dpbmdfbGV2ZWw6IFRoZSBsb2dnaW5nIGxldmVsIGZvciB0aGUg
Y2xhc3MuICBEZWZhdWx0cworICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGxvZ2dpbmcuSU5G
Ty4KKyAgICAgICAgICB0YXJnZXRfZGlyOiBUaGUgZGlyZWN0b3J5IHBhdGggdG8gd2hpY2ggcGFj
a2FnZXMgc2hvdWxkIGJlIGluc3RhbGxlZC4KKyAgICAgICAgICB0ZW1wX2RpcjogVGhlIGRpcmVj
dG9yeSBwYXRoIHRvIHVzZSBmb3IgYW55IHRlbXBvcmFyeSBmaWxlcworICAgICAgICAgICAgICAg
ICAgICBnZW5lcmF0ZWQgd2hpbGUgZG93bmxvYWRpbmcsIHVuemlwcGluZywgYW5kIGV4dHJhY3Rp
bmcKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgdG8gaW5zdGFsbC4gIERlZmF1bHRzIHRv
IGEgc3RhbmRhcmQgdGVtcG9yYXJ5CisgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uIGdlbmVy
YXRlZCBieSB0aGUgdGVtcGZpbGUgbW9kdWxlLiAgVGhpcworICAgICAgICAgICAgICAgICAgICBw
YXJhbWV0ZXIgc2hvdWxkIG5vcm1hbGx5IGJlIHVzZWQgb25seSBmb3IgZGV2ZWxvcG1lbnQKKyAg
ICAgICAgICAgICAgICAgICAgdGVzdGluZy4KIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkaXJl
Y3Rvcnk9Tm9uZSk6Ci0gICAgICAgIGlmIGRpcmVjdG9yeSBpcyBOb25lOgotICAgICAgICAgICAg
IyBEZWZhdWx0IHRvIHB1dHRpbmcgdGhlIGNhY2hlIGRpcmVjdG9yeSBpbiB0aGUgc2FtZSBkaXJl
Y3RvcnkKLSAgICAgICAgICAgICMgYXMgdGhpcyBmaWxlLgotICAgICAgICAgICAgY29udGFpbmlu
Z19kaXJlY3RvcnkgPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pCi0gICAgICAgICAgICBkaXJl
Y3RvcnkgPSBvcy5wYXRoLmpvaW4oY29udGFpbmluZ19kaXJlY3RvcnksICJhdXRvaW5zdGFsbC5j
YWNoZS5kIik7CisgICAgICAgICIiIgorICAgICAgICAjIENvbmZpZ3VyZSB0aGUgbG9nZ2VyIGJl
Zm9yZSBhbnl0aGluZyBlbHNlIHNpbmNlIGxhdGVyIHBhcnRzCisgICAgICAgICMgb2YgdGhpcyBj
b25zdHJ1Y3RvciB1c2UgdGhlIGxvZ2dlci4KKyAgICAgICAgaWYgbG9nZ2luZ19sZXZlbCBpcyBO
b25lOgorICAgICAgICAgICAgbG9nZ2luZ19sZXZlbCA9IGxvZ2dpbmcuSU5GTworICAgICAgICBs
b2cgPSBsb2dnaW5nLmdldExvZ2dlcigiYXV0b2luc3RhbGwuQXV0b0luc3RhbGxlciIpCisKKyAg
ICAgICAgY29uc29sZSA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcigpCisgICAgICAgIGNvbnNvbGUu
c2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKKyAgICAgICAgZm9ybWF0dGVyID0gbG9nZ2luZy5Gb3Jt
YXR0ZXIoJyUobmFtZSlzOiBbJShsZXZlbG5hbWUpc10gJShtZXNzYWdlKXMnKQorICAgICAgICBj
b25zb2xlLnNldEZvcm1hdHRlcihmb3JtYXR0ZXIpCisgICAgICAgIGxvZy5hZGRIYW5kbGVyKGNv
bnNvbGUpCisgICAgICAgIGxvZy5zZXRMZXZlbChsb2dnaW5nX2xldmVsKQorCisgICAgICAgIHNl
bGYuX2xvZyA9IGxvZworCisgICAgICAgIGlmIHRhcmdldF9kaXIgaXMgTm9uZToKKyAgICAgICAg
ICAgIHRoaXNfZGlyID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQorICAgICAgICAgICAgdGFy
Z2V0X2RpciA9IG9zLnBhdGguam9pbih0aGlzX2RpciwgImF1dG9pbnN0YWxsZWQiKQorICAgICAg
ICBpZiAoKHRlbXBfZGlyIGlzIG5vdCBOb25lKSBhbmQKKyAgICAgICAgICAgIG5vdCBvcy5wYXRo
LmV4aXN0cyh0ZW1wX2RpcikpOgorICAgICAgICAgICAgIyBUaGUgdGVtcGZpbGUubWtkdGVtcCgp
IGluIHNlbGYuX3RlbXBfZGlyZWN0b3J5KCkgcmVxdWlyZXMKKyAgICAgICAgICAgICMgdGhhdCB0
aGUgZGlyZWN0b3J5IGNvcnJlc3BvbmRpbmcgdG8gaXRzICJkaXIiIHBhcmFtZXRlcgorICAgICAg
ICAgICAgIyBhbHJlYWR5IGV4aXN0IGlmIGl0IGlzIG5vdCBOb25lLgorICAgICAgICAgICAgb3Mu
bWFrZWRpcnModGVtcF9kaXIpCisgICAgICAgICAgICBzZWxmLl9sb2cuaW5mbygnQ3JlYXRlZCBh
dXRvaW5zdGFsbCB0ZW1wIGRpcmVjdG9yeSBhdDogIiVzIi4nCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAlIHRlbXBfZGlyKQorCisgICAgICAgICMgRW5zdXJlIHRoYXQgdGhlIHRhcmdldCBk
aXJlY3RvcnkgZXhpc3RzLgorICAgICAgICBzZWxmLl9jcmVhdGVfdGFyZ2V0X2Rpcih0YXJnZXRf
ZGlyKQorCisgICAgICAgIHNlbGYuX3RhcmdldF9kaXIgPSB0YXJnZXRfZGlyCisgICAgICAgIHNl
bGYuX3RlbXBfZGlyID0gdGVtcF9kaXIKKworICAgIGRlZiBfbG9nX3RyYW5zZm9ybShzZWxmLCBt
ZXNzYWdlLCBzb3VyY2UsIHRhcmdldCk6CisgICAgICAgICIiIkxvZyBhIGRlYnVnIG1lc3NhZ2Ug
dGhhdCBpbnZvbHZlcyBhIHNvdXJjZSBhbmQgdGFyZ2V0LiIiIgorICAgICAgICBzZWxmLl9sb2cu
ZGVidWcoIiVzXG4iCisgICAgICAgICAgICAgICAgICAgICAgJyBGcm9tOiAiJXMiXG4nCisgICAg
ICAgICAgICAgICAgICAgICAgJyAgIFRvOiAiJXMiJyAlIChtZXNzYWdlLCBzb3VyY2UsIHRhcmdl
dCkpCisKKyAgICBkZWYgX3dyaXRlX2ZpbGUoc2VsZiwgcGF0aCwgdGV4dCk6CisgICAgICAgICIi
IkNyZWF0ZSBhIGZpbGUgYXQgdGhlIGdpdmVuIHBhdGggd2l0aCBnaXZlbiB0ZXh0LgorCisgICAg
ICAgIFRoaXMgbWV0aG9kIG92ZXJ3cml0ZXMgYW55IGV4aXN0aW5nIGZpbGUuCiAKLSAgICAgICAg
c2VsZi5kaXJlY3RvcnkgPSBkaXJlY3RvcnkKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2xv
Zy5kZWJ1ZygnV3JpdGluZyBmaWxlOiAiJXMiJyAlIHBhdGgpCisgICAgICAgIGZpbGUgPSBvcGVu
KHBhdGgsICJ3IikKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhp
c3RzKHNlbGYuZGlyZWN0b3J5KToKLSAgICAgICAgICAgICAgICBzZWxmLl9jcmVhdGVfY2FjaGVf
ZGlyZWN0b3J5KCkKLSAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZXJyOgotICAgICAgICAgICAg
X2xvZ2dlci5leGNlcHRpb24oZXJyKQotICAgICAgICAgICAgc2VsZi5jYWNoZV9kaXJlY3RyeSA9
IHRlbXBmaWxlLm1rZHRlbXAoKQotICAgICAgICBfbG9nZ2VyLmluZm8oIlVzaW5nIGNhY2hlIGRp
cmVjdG9yeSAnJXMnLiIgJSBzZWxmLmRpcmVjdG9yeSkKLSAgICAKLSAgICBkZWYgX2NyZWF0ZV9j
YWNoZV9kaXJlY3Rvcnkoc2VsZik6Ci0gICAgICAgIF9sb2dnZXIuZGVidWcoIkNyZWF0aW5nIGNh
Y2hlIGRpcmVjdG9yeSAnJXMnLiIgJSBzZWxmLmRpcmVjdG9yeSkKLSAgICAgICAgb3MubWtkaXIo
c2VsZi5kaXJlY3RvcnkpCi0gICAgICAgIHJlYWRtZV9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYu
ZGlyZWN0b3J5LCAiUkVBRE1FIikKLSAgICAgICAgd2l0aCBvcGVuKHJlYWRtZV9wYXRoLCAidyIp
IGFzIGY6Ci0gICAgICAgICAgICBmLndyaXRlKCJUaGlzIGRpcmVjdG9yeSB3YXMgYXV0by1nZW5l
cmF0ZWQgYnkgJyVzJy5cbiIKLSAgICAgICAgICAgICAgICAgICAgIkl0IGlzIHNhZmUgdG8gZGVs
ZXRlLlxuIiAlIF9fZmlsZV9fKQotCi0gICAgZGVmIGdldChzZWxmLCB1cmwpOgotICAgICAgICBf
bG9nZ2VyLmluZm8oIkdldHRpbmcgJyVzJyBmcm9tIGNhY2hlLiIgJSB1cmwpCi0gICAgICAgIGZp
bGVuYW1lID0gdXJsLnJzcGxpdCgiLyIpWy0xXQotCi0gICAgICAgICMgc28gdGhhdCBzb3VyY2Ug
dXJsIGlzIHNpZ25pZmljYW50IGluIGRldGVybWluaW5nIGNhY2hlIGhpdHMKLSAgICAgICAgZCA9
IG9zLnBhdGguam9pbihzZWxmLmRpcmVjdG9yeSwgIiVzIiAlIGhhc2godXJsKSkKLSAgICAgICAg
aWYgbm90IG9zLnBhdGguZXhpc3RzKGQpOgotICAgICAgICAgICAgb3MubWtkaXIoZCkKLQotICAg
ICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihkLCBmaWxlbmFtZSkgCi0KLSAgICAgICAgaWYg
b3MucGF0aC5leGlzdHMoZmlsZW5hbWUpOgotICAgICAgICAgICAgX2xvZ2dlci5kZWJ1ZygiLi4u
IGFscmVhZHkgY2FjaGVkIGluIGZpbGUgJyVzJy4iICUgZmlsZW5hbWUpCisgICAgICAgICAgICBm
aWxlLndyaXRlKHRleHQpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmaWxlLmNsb3Nl
KCkKKworICAgIGRlZiBfY3JlYXRlX3RhcmdldF9kaXIoc2VsZiwgdGFyZ2V0X2Rpcik6CisgICAg
ICAgICIiIkNyZWF0ZSBhIHRhcmdldCBkaXJlY3RvcnkgYW5kIGFzc29jaWF0ZWQgX19pbml0X18u
cHkgZmlsZS4iIiIKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHRhcmdldF9kaXIpOgor
ICAgICAgICAgICAgb3MubWFrZWRpcnModGFyZ2V0X2RpcikKKyAgICAgICAgICAgIHNlbGYuX2xv
Zy5pbmZvKCdDcmVhdGVkIGF1dG9pbnN0YWxsIHBhY2thZ2UgZGlyZWN0b3J5IGF0OiAiJXMiLicK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICUgdGFyZ2V0X2RpcikKKyAgICAgICAgaW5pdF9w
YXRoID0gb3MucGF0aC5qb2luKHRhcmdldF9kaXIsICJfX2luaXRfXy5weSIpCisgICAgICAgIGlm
IG5vdCBvcy5wYXRoLmV4aXN0cyhpbml0X3BhdGgpOgorICAgICAgICAgICAgdGV4dCA9ICgiIyBU
aGlzIGZpbGUgaXMgcmVxdWlyZWQgZm9yIFB5dGhvbiB0byBzZWFyY2ggdGhpcyAiCisgICAgICAg
ICAgICAgICAgICAgICJkaXJlY3RvcnkgZm9yIG1vZHVsZXMuXG5cbiIpCisgICAgICAgICAgICBz
ZWxmLl93cml0ZV9maWxlKGluaXRfcGF0aCwgdGV4dCkKKworICAgIGRlZiBfY3JlYXRlX3NjcmF0
Y2hfZGlyZWN0b3J5KHNlbGYsIHRhcmdldF9uYW1lKToKKyAgICAgICAgIiIiQ3JlYXRlIGEgdGVt
cG9yYXJ5IHNjcmF0Y2ggZGlyZWN0b3J5LCBhbmQgcmV0dXJuIGl0cyBwYXRoLgorCisgICAgICAg
IFRoZSBzY3JhdGNoIGRpcmVjdG9yeSBpcyBnZW5lcmF0ZWQgaW5zaWRlIHRoZSB0ZW1wb3Jhcnkg
ZGlyZWN0b3J5CisgICAgICAgIG9mIHRoaXMgQXV0b0luc3RhbGxlciBpbnN0YW5jZS4KKworICAg
ICAgICAiIiIKKyAgICAgICAgcHJlZml4ID0gdGFyZ2V0X25hbWUgKyAiXyIKKyAgICAgICAgdGVt
cF9kaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD1wcmVmaXgsIGRpcj1zZWxmLl90ZW1wX2Rp
cikKKyAgICAgICAgcmV0dXJuIHRlbXBfZGlyCisKKyAgICBkZWYgX3ZlcnNpb25fcGF0aChzZWxm
LCB0YXJnZXRfbmFtZSk6CisgICAgICAgIGZpbGVuYW1lID0gIi4lcy52ZXJzaW9uIiAlIHRhcmdl
dF9uYW1lCisgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5fdGFyZ2V0X2RpciwgZmls
ZW5hbWUpCisgICAgICAgIHJldHVybiBwYXRoCisKKyAgICBkZWYgX2lzX2Rvd25sb2FkZWQoc2Vs
ZiwgdGFyZ2V0X25hbWUsIHVybCk6CisgICAgICAgICIiIlJldHVybiB3aGV0aGVyIGEgcGFja2Fn
ZSB2ZXJzaW9uIGhhcyBiZWVuIGRvd25sb2FkZWQuIiIiCisgICAgICAgIHZlcnNpb25fcGF0aCA9
IHNlbGYuX3ZlcnNpb25fcGF0aCh0YXJnZXRfbmFtZSkKKworICAgICAgICBpZiBub3Qgb3MucGF0
aC5leGlzdHModmVyc2lvbl9wYXRoKToKKyAgICAgICAgICAgICMgVGhlbiBubyBwYWNrYWdlIHZl
cnNpb24gaGFzIGJlZW4gZG93bmxvYWRlZC4KKyAgICAgICAgICAgIHNlbGYuX2xvZy5kZWJ1Zygn
VmVyc2lvbiBmaWxlIG5vdCBmb3VuZDogIiVzIicgJSB2ZXJzaW9uX3BhdGgpCisgICAgICAgICAg
ICByZXR1cm4gRmFsc2UKKworICAgICAgICBmaWxlID0gb3Blbih2ZXJzaW9uX3BhdGgsICJyIikK
KyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdmVyc2lvbiA9IGZpbGUucmVhZCgpCisgICAgICAg
IGZpbmFsbHk6CisgICAgICAgICAgICBmaWxlLmNsb3NlKCkKKyAgICAgICAgc2VsZi5fbG9nLmRl
YnVnKCdSZWFkIHZlcnNpb24gIiVzIiBmcm9tICIlcyIuJyAlICh2ZXJzaW9uLCB2ZXJzaW9uX3Bh
dGgpKQorCisgICAgICAgIHJldHVybiB2ZXJzaW9uLnN0cmlwKCkgPT0gdXJsLnN0cmlwKCkKKwor
ICAgIGRlZiBfd3JpdGVfdmVyc2lvbl9kb3dubG9hZGVkKHNlbGYsIHRhcmdldF9uYW1lLCB1cmwp
OgorICAgICAgICAiIiJSZWNvcmQgdGhlIHZlcnNpb24gZG93bmxvYWRlZCB0byBhIGZpbGUuIiIi
CisgICAgICAgICMgUmVjb3JkIHZlcnNpb24gZG93bmxvYWRlZCB0byBmaWxlLgorICAgICAgICB2
ZXJzaW9uX3BhdGggPSBzZWxmLl92ZXJzaW9uX3BhdGgodGFyZ2V0X25hbWUpCisgICAgICAgIHNl
bGYuX2xvZy5kZWJ1ZygnV3JpdGluZyB2ZXJzaW9uICIlcyIgdG8gZmlsZTogIiVzIi4nCisgICAg
ICAgICAgICAgICAgICAgICAgJSAodXJsLCB2ZXJzaW9uX3BhdGgpKQorCisgICAgICAgIHNlbGYu
X3dyaXRlX2ZpbGUodmVyc2lvbl9wYXRoLCB1cmwpCisKKyAgICBkZWYgX2V4dHJhY3RfdGFyZ3oo
c2VsZiwgcGF0aCwgc2NyYXRjaF9kaXIpOgorICAgICAgICAjIHRhcmZpbGUuZXh0cmFjdGFsbCgp
IGV4dHJhY3RzIHRvIGEgcGF0aCB3aXRob3V0IHRoZQorICAgICAgICAjIHRyYWlsaW5nICIudGFy
Lmd6Ii4KKyAgICAgICAgIworICAgICAgICAjIFRoZSBzdWJzdHJpbmcgIi50YXIuZ3oiIGhhcyBz
ZXZlbiBjaGFyYWN0ZXJzLgorICAgICAgICB0YXJnZXRfYmFzZW5hbWUgPSBvcy5wYXRoLmJhc2Vu
YW1lKHBhdGhbOi03XSkKKyAgICAgICAgdGFyZ2V0X3BhdGggPSBvcy5wYXRoLmpvaW4oc2NyYXRj
aF9kaXIsIHRhcmdldF9iYXNlbmFtZSkKKworICAgICAgICBzZWxmLl9sb2dfdHJhbnNmb3JtKCJT
dGFydGluZyBndW56aXAvZXh0cmFjdC4uLiIsIHBhdGgsIHRhcmdldF9wYXRoKQorCisgICAgICAg
IHRmaWxlID0gdGFyZmlsZS5vcGVuKHBhdGgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG1l
bWJlcnMgPSB0ZmlsZS5nZXRtZW1iZXJzKCkKKyAgICAgICAgICAgIHNlbGYuX2xvZy5kZWJ1Zygi
TWVtYmVycyBvZiAlcyBhcmU6ICVzIiAlIChwYXRoLCBtZW1iZXJzKSkKKyAgICAgICAgICAgIHRm
aWxlLmV4dHJhY3RhbGwodGFyZ2V0X3BhdGgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAg
ICB0ZmlsZS5jbG9zZSgpCisKKyAgICAgICAgcmV0dXJuIHRhcmdldF9wYXRoCisKKyAgICBkZWYg
X3VuemlwKHNlbGYsIHBhdGgsIHNjcmF0Y2hfZGlyKToKKyAgICAgICAgIyB6aXBmaWxlLmV4dHJh
Y3RhbGwoKSBleHRyYWN0cyB0byBhIHBhdGggd2l0aG91dCB0aGUKKyAgICAgICAgIyB0cmFpbGlu
ZyAiLnppcCIuCisgICAgICAgICMKKyAgICAgICAgIyBUaGUgc3Vic3RyaW5nICIuemlwIiBoYXMg
Zm91ciBjaGFyYWN0ZXJzLgorICAgICAgICB0YXJnZXRfYmFzZW5hbWUgPSBvcy5wYXRoLmJhc2Vu
YW1lKHBhdGhbOi00XSkKKyAgICAgICAgdGFyZ2V0X3BhdGggPSBvcy5wYXRoLmpvaW4oc2NyYXRj
aF9kaXIsIHRhcmdldF9iYXNlbmFtZSkKKworICAgICAgICBzZWxmLl9sb2dfdHJhbnNmb3JtKCJT
dGFydGluZyB1bnppcC4uLiIsIHBhdGgsIHRhcmdldF9wYXRoKQorCisgICAgICAgIHpmaWxlID0g
emlwZmlsZS5aaXBGaWxlKHBhdGgsICJyIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgemZp
bGUuZXh0cmFjdGFsbChzY3JhdGNoX2RpcikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAg
IHpmaWxlLmNsb3NlKCkKKworICAgICAgICByZXR1cm4gdGFyZ2V0X3BhdGgKKworICAgIGRlZiBf
cHJlcGFyZV9wYWNrYWdlKHNlbGYsIHBhdGgsIHNjcmF0Y2hfZGlyKToKKyAgICAgICAgIiIiUHJl
cGFyZSBhIHBhY2thZ2UgZm9yIHVzZSwgaWYgbmVjZXNzYXJ5LCBhbmQgcmV0dXJuIHRoZSBuZXcg
cGF0aC4KKworICAgICAgICBGb3IgZXhhbXBsZSwgdGhpcyBtZXRob2QgdW56aXBzIHppcHBlZCBm
aWxlcyBhbmQgZXh0cmFjdHMKKyAgICAgICAgdGFyIGZpbGVzLgorCisgICAgICAgIEFyZ3M6Cisg
ICAgICAgICAgcGF0aDogVGhlIHBhdGggdG8gdGhlIGRvd25sb2FkZWQgVVJMIGNvbnRlbnRzLgor
ICAgICAgICAgIHNjcmF0Y2hfZGlyOiBUaGUgc2NyYXRjaCBkaXJlY3RvcnkuICBOb3RlIHRoYXQg
dGhlIHNjcmF0Y2gKKyAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGNvbnRhaW5zIHRo
ZSBmaWxlIGRlc2lnbmF0ZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgICAgIHBhdGggcGFy
YW1ldGVyLgorCisgICAgICAgICIiIgorICAgICAgICAjIEZJWE1FOiBBZGQgb3RoZXIgbmF0dXJh
bCBleHRlbnNpb25zLgorICAgICAgICBpZiBwYXRoLmVuZHN3aXRoKCIuemlwIik6CisgICAgICAg
ICAgICBuZXdfcGF0aCA9IHNlbGYuX3VuemlwKHBhdGgsIHNjcmF0Y2hfZGlyKQorICAgICAgICBl
bGlmIHBhdGguZW5kc3dpdGgoIi50YXIuZ3oiKToKKyAgICAgICAgICAgIG5ld19wYXRoID0gc2Vs
Zi5fZXh0cmFjdF90YXJneihwYXRoLCBzY3JhdGNoX2RpcikKICAgICAgICAgZWxzZToKLSAgICAg
ICAgICAgIF9sb2dnZXIuZGVidWcoIi4uLiBub3QgaW4gY2FjaGUuIENhY2hpbmcgaW4gJyVzJy4i
ICUgZmlsZW5hbWUpCi0gICAgICAgICAgICBzdHJlYW0gPSBmaWxlKGZpbGVuYW1lLCAid2IiKQot
ICAgICAgICAgICAgc2VsZi5kb3dubG9hZCh1cmwsIHN0cmVhbSkKLSAgICAgICAgICAgIHN0cmVh
bS5jbG9zZSgpCi0gICAgICAgIHJldHVybiBmaWxlbmFtZQotCi0gICAgZGVmIGRvd25sb2FkKHNl
bGYsIHVybCwgc3RyZWFtKToKLSAgICAgICAgX2xvZ2dlci5pbmZvKCJEb3dubG9hZGluZzogJXMi
ICUgdXJsKQorICAgICAgICAgICAgIyBObyBwcmVwYXJhdGlvbiBpcyBuZWVkZWQuCisgICAgICAg
ICAgICBuZXdfcGF0aCA9IHBhdGgKKworICAgICAgICByZXR1cm4gbmV3X3BhdGgKKworICAgIGRl
ZiBfZG93bmxvYWRfdG9fc3RyZWFtKHNlbGYsIHVybCwgc3RyZWFtKToKKyAgICAgICAgIiIiRG93
bmxvYWQgYW4gVVJMIHRvIGEgc3RyZWFtLCBhbmQgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMu
IiIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG5ldHN0cmVhbSA9IHVybGxpYi51cmxvcGVu
KHVybCkKICAgICAgICAgICAgIGNvZGUgPSAyMDAKQEAgLTIzNSwxMDEgKzM3MiwxNDMgQEAgY2xh
c3MgQ2FjaGUob2JqZWN0KToKICAgICAgICAgICAgIGlmIG5vdCAyMDAgPD0gY29kZSA8IDMwMDoK
ICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJIVFRQIEVycm9yIGNvZGUgJXMiICUg
Y29kZSkKICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZXJyOgotICAgICAgICAgICAgX2xvZ2dl
ci5leGNlcHRpb24oZXJyKQorICAgICAgICAgICAgc2VsZi5fbG9nLmV4Y2VwdGlvbihlcnIpCiAK
ICAgICAgICAgQlVGU0laRSA9IDIqKjEzICAjIDhLQgotICAgICAgICBzaXplID0gMAorICAgICAg
ICBieXRlcyA9IDAKICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgIGRhdGEgPSBuZXRz
dHJlYW0ucmVhZChCVUZTSVpFKQogICAgICAgICAgICAgaWYgbm90IGRhdGE6CiAgICAgICAgICAg
ICAgICAgYnJlYWsKICAgICAgICAgICAgIHN0cmVhbS53cml0ZShkYXRhKQotICAgICAgICAgICAg
c2l6ZSArPSBsZW4oZGF0YSkKKyAgICAgICAgICAgIGJ5dGVzICs9IGxlbihkYXRhKQogICAgICAg
ICBuZXRzdHJlYW0uY2xvc2UoKQotICAgICAgICBfbG9nZ2VyLmluZm8oIkRvd25sb2FkZWQgJWQg
Ynl0ZXMuIiAlIHNpemUpCi0KKyAgICAgICAgcmV0dXJuIGJ5dGVzCiAKLWNsYXNzIEltcG9ydGVy
KG9iamVjdCk6CisgICAgZGVmIF9kb3dubG9hZChzZWxmLCB1cmwsIHNjcmF0Y2hfZGlyKToKKyAg
ICAgICAgIiIiRG93bmxvYWQgVVJMIGNvbnRlbnRzLCBhbmQgcmV0dXJuIHRoZSBkb3dubG9hZCBw
YXRoLiIiIgorICAgICAgICBzZWxmLl9sb2dfdHJhbnNmb3JtKCJTdGFydGluZyBkb3dubG9hZC4u
LiIsIHVybCwgc2NyYXRjaF9kaXIpCiAKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAg
IHNlbGYucGFja2FnZXMgPSB7fQotICAgICAgICBzZWxmLl9fY2FjaGUgPSBOb25lCisgICAgICAg
IHVybF9wYXRoID0gdXJscGFyc2UudXJsc3BsaXQodXJsKVsyXQorICAgICAgICB1cmxfcGF0aCA9
IG9zLnBhdGgubm9ybXBhdGgodXJsX3BhdGgpICAjIFJlbW92ZXMgdHJhaWxpbmcgc2xhc2guCisg
ICAgICAgIHRhcmdldF9maWxlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUodXJsX3BhdGgpCisgICAg
ICAgIHRhcmdldF9wYXRoID0gb3MucGF0aC5qb2luKHNjcmF0Y2hfZGlyLCB0YXJnZXRfZmlsZW5h
bWUpCiAKLSAgICBkZWYgX19nZXRfc3RvcmUoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9f
c3RvcmUKLSAgICBzdG9yZSA9IHByb3BlcnR5KF9fZ2V0X3N0b3JlKQorICAgICAgICBzdHJlYW0g
PSBmaWxlKHRhcmdldF9wYXRoLCAid2IiKQorICAgICAgICBieXRlcyA9IHNlbGYuX2Rvd25sb2Fk
X3RvX3N0cmVhbSh1cmwsIHN0cmVhbSkKKyAgICAgICAgc3RyZWFtLmNsb3NlKCkKIAotICAgIGRl
ZiBfZ2V0X2NhY2hlKHNlbGYpOgotICAgICAgICBpZiBzZWxmLl9fY2FjaGUgaXMgTm9uZToKLSAg
ICAgICAgICAgIHNlbGYuX19jYWNoZSA9IENhY2hlKCkKLSAgICAgICAgcmV0dXJuIHNlbGYuX19j
YWNoZQotICAgIGRlZiBfc2V0X2NhY2hlKHNlbGYsIGNhY2hlKToKLSAgICAgICAgc2VsZi5fX2Nh
Y2hlID0gY2FjaGUKLSAgICBjYWNoZSA9IHByb3BlcnR5KF9nZXRfY2FjaGUsIF9zZXRfY2FjaGUp
CisgICAgICAgIG1lc3NhZ2UgPSAiRG93bmxvYWRlZCAlcyBieXRlcy4uLiIgJSBieXRlcworICAg
ICAgICBzZWxmLl9sb2dfdHJhbnNmb3JtKG1lc3NhZ2UsIHVybCwgdGFyZ2V0X3BhdGgpCiAKLSAg
ICBkZWYgZmluZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUsIHBhdGg9Tm9uZSk6Ci0gICAgICAgICIi
Ii0+IHNlbGYgb3IgTm9uZS4KKyAgICAgICAgcmV0dXJuIHRhcmdldF9wYXRoCiAKLSAgICAgICAg
U2VhcmNoIGZvciBhIG1vZHVsZSBzcGVjaWZpZWQgYnkgJ2Z1bGxuYW1lJy4gJ2Z1bGxuYW1lJyBt
dXN0IGJlCi0gICAgICAgIHRoZSBmdWxseSBxdWFsaWZpZWQgKGRvdHRlZCkgbW9kdWxlIG5hbWUu
IEl0IHJldHVybnMgdGhlCi0gICAgICAgIHppcGltcG9ydGVyIGluc3RhbmNlIGl0c2VsZiBpZiB0
aGUgbW9kdWxlIHdhcyBmb3VuZCwgb3IgTm9uZSBpZgotICAgICAgICBpdCB3YXNuJ3QuIFRoZSBv
cHRpb25hbCAncGF0aCcgYXJndW1lbnQgaXMgaWdub3JlZCAtLSBpdCdzCi0gICAgICAgIHRoZXJl
IGZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlIGltcG9ydGVyIHByb3RvY29sLiIpOwotICAgICAg
ICAiIiIKLSAgICAgICAgX2xvZ2dlci5kZWJ1ZygiZmluZF9tb2R1bGUoJXMsIHBhdGg9JXMpIiAl
IChmdWxsbmFtZSwgcGF0aCkpCi0KLSAgICAgICAgaWYgZnVsbG5hbWUgaW4gc2VsZi5wYWNrYWdl
czoKLSAgICAgICAgICAgICh1cmwsIHppcF9zdWJwYXRoKSA9IHNlbGYucGFja2FnZXNbZnVsbG5h
bWVdCi0gICAgICAgICAgICBmaWxlbmFtZSA9IHNlbGYuY2FjaGUuZ2V0KHVybCkKLSAgICAgICAg
ICAgIHppcF9wYXRoID0gIiVzLyVzIiAlIChmaWxlbmFtZSwgemlwX3N1YnBhdGgpIGlmIHppcF9z
dWJwYXRoIGVsc2UgZmlsZW5hbWUKLSAgICAgICAgICAgIF9sb2dnZXIuZGVidWcoImZ1bGxuYW1l
OiAlcyB1cmw6ICVzIHBhdGg6ICVzIHppcF9wYXRoOiAlcyIgJSAoZnVsbG5hbWUsIHVybCwgcGF0
aCwgemlwX3BhdGgpKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGxvYWRlciA9
IHppcGltcG9ydC56aXBpbXBvcnRlcih6aXBfcGF0aCkKLSAgICAgICAgICAgICAgICBfbG9nZ2Vy
LmRlYnVnKCJyZXR1cm5pbmc6ICVzIiAlIGxvYWRlcikKLSAgICAgICAgICAgIGV4Y2VwdCBFeGNl
cHRpb24sIGU6Ci0gICAgICAgICAgICAgICAgX2xvZ2dlci5leGNlcHRpb24oZSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICAgICAgcmV0dXJuIGxvYWRlcgotICAgICAgICBy
ZXR1cm4gTm9uZQotCi0gICAgZGVmIGJpbmQoc2VsZiwgcGFja2FnZV9uYW1lLCB1cmwsIHppcF9z
dWJwYXRoKToKLSAgICAgICAgX2xvZ2dlci5pbmZvKCJiaW5kaW5nOiAlcyAtPiAlcyBzdWJwYXRo
OiAlcyIgJSAocGFja2FnZV9uYW1lLCB1cmwsIHppcF9zdWJwYXRoKSkKLSAgICAgICAgc2VsZi5w
YWNrYWdlc1twYWNrYWdlX25hbWVdID0gKHVybCwgemlwX3N1YnBhdGgpCisgICAgZGVmIF9pbnN0
YWxsKHNlbGYsIHNjcmF0Y2hfZGlyLCB0YXJnZXRfbmFtZSwgdGFyZ2V0X3BhdGgsIHVybCwKKyAg
ICAgICAgICAgICAgICAgdXJsX3N1YnBhdGgpOgorICAgICAgICAiIiJJbnN0YWxsIGEgcHl0aG9u
IHBhY2thZ2UgZnJvbSBhbiBVUkwuCiAKKyAgICAgICAgVGhpcyBpbnRlcm5hbCBtZXRob2Qgb3Zl
cndyaXRlcyB0aGUgdGFyZ2V0IHBhdGggaWYgdGhlIHRhcmdldAorICAgICAgICBwYXRoIGFscmVh
ZHkgZXhpc3RzLgogCi1pZiBfX25hbWVfXz09Il9fbWFpbl9fIjoKLSAgICBpbXBvcnQgbG9nZ2lu
ZwotICAgICNsb2dnaW5nLmJhc2ljQ29uZmlnKCkKLSAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExv
Z2dlcigpCi0KLSAgICBjb25zb2xlID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKCkKLSAgICBjb25z
b2xlLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCi0gICAgIyBzZXQgYSBmb3JtYXQgd2hpY2ggaXMg
c2ltcGxlciBmb3IgY29uc29sZSB1c2UKLSAgICBmb3JtYXR0ZXIgPSBsb2dnaW5nLkZvcm1hdHRl
cignJShuYW1lKS0xMnM6ICUobGV2ZWxuYW1lKS04cyAlKG1lc3NhZ2UpcycpCi0gICAgIyB0ZWxs
IHRoZSBoYW5kbGVyIHRvIHVzZSB0aGlzIGZvcm1hdAotICAgIGNvbnNvbGUuc2V0Rm9ybWF0dGVy
KGZvcm1hdHRlcikKLSAgICAjIGFkZCB0aGUgaGFuZGxlciB0byB0aGUgcm9vdCBsb2dnZXIKLSAg
ICBsb2dnZXIuYWRkSGFuZGxlcihjb25zb2xlKQotICAgIGxvZ2dlci5zZXRMZXZlbChsb2dnaW5n
LklORk8pCi0KLSAgICBiaW5kKCJweW1hcmMiLCAiaHR0cDovL3B5cGkucHl0aG9uLm9yZy9wYWNr
YWdlcy8yLjUvcC9weW1hcmMvcHltYXJjLTIuMS1weTIuNS5lZ2ciKQorICAgICAgICAiIiIKKyAg
ICAgICAgcGF0aCA9IHNlbGYuX2Rvd25sb2FkKHVybCwgc2NyYXRjaF9kaXIpCisgICAgICAgIHBh
dGggPSBzZWxmLl9wcmVwYXJlX3BhY2thZ2UocGF0aCwgc2NyYXRjaF9kaXIpCiAKLSAgICBpbXBv
cnQgcHltYXJjCisgICAgICAgIGlmIHVybF9zdWJwYXRoIGlzIE5vbmU6CisgICAgICAgICAgICBz
b3VyY2VfcGF0aCA9IHBhdGgKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNvdXJjZV9wYXRo
ID0gb3MucGF0aC5qb2luKHBhdGgsIHVybF9zdWJwYXRoKQorCisgICAgICAgIGlmIG9zLnBhdGgu
ZXhpc3RzKHRhcmdldF9wYXRoKToKKyAgICAgICAgICAgIHNlbGYuX2xvZy5kZWJ1ZygnUmVmcmVz
aGluZyBpbnN0YWxsOiBkZWxldGluZyAiJXMiLicgJSB0YXJnZXRfcGF0aCkKKyAgICAgICAgICAg
IGlmIG9zLnBhdGguaXNkaXIodGFyZ2V0X3BhdGgpOgorICAgICAgICAgICAgICAgIHNodXRpbC5y
bXRyZWUodGFyZ2V0X3BhdGgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG9z
LnJlbW92ZSh0YXJnZXRfcGF0aCkKKworICAgICAgICBzZWxmLl9sb2dfdHJhbnNmb3JtKCJNb3Zp
bmcgaW50byBwbGFjZS4uLiIsIHNvdXJjZV9wYXRoLCB0YXJnZXRfcGF0aCkKKworICAgICAgICAj
IFRoZSBzaHV0aWwubW92ZSgpIGNvbW1hbmQgY3JlYXRlcyBpbnRlcm1lZGlhdGUgZGlyZWN0b3Jp
ZXMgaWYgdGhleQorICAgICAgICAjIGRvIG5vdCBleGlzdCwgYnV0IHdlIGRvIG5vdCByZWx5IG9u
IHRoaXMgYmVoYXZpb3Igc2luY2Ugd2UKKyAgICAgICAgIyBuZWVkIHRvIGNyZWF0ZSB0aGUgX19p
bml0X18ucHkgZmlsZSBhbnl3YXkuCisgICAgICAgIHNodXRpbC5tb3ZlKHNvdXJjZV9wYXRoLCB0
YXJnZXRfcGF0aCkKKworICAgICAgICBzZWxmLl93cml0ZV92ZXJzaW9uX2Rvd25sb2FkZWQodGFy
Z2V0X25hbWUsIHVybCkKKworICAgIGRlZiBpbnN0YWxsKHNlbGYsIHVybCwgc2hvdWxkX3JlZnJl
c2g9RmFsc2UsIHRhcmdldF9uYW1lPU5vbmUsCisgICAgICAgICAgICAgICAgdXJsX3N1YnBhdGg9
Tm9uZSk6CisgICAgICAgICIiIkluc3RhbGwgYSBweXRob24gcGFja2FnZSBmcm9tIGFuIFVSTC4K
KworICAgICAgICBBcmdzOgorICAgICAgICAgIHVybDogVGhlIFVSTCBmcm9tIHdoaWNoIHRvIGRv
d25sb2FkIHRoZSBwYWNrYWdlLgorCisgICAgICAgIE9wdGlvbmFsIEFyZ3M6CisgICAgICAgICAg
c2hvdWxkX3JlZnJlc2g6IEEgYm9vbGVhbiB2YWx1ZSBvZiB3aGV0aGVyIHRoZSBwYWNrYWdlIHNo
b3VsZCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICBkb3dubG9hZGVkIGFnYWluIGlmIHRo
ZSBwYWNrYWdlIGlzIGFscmVhZHkgcHJlc2VudC4KKyAgICAgICAgICB0YXJnZXRfbmFtZTogVGhl
IG5hbWUgb2YgdGhlIGZvbGRlciBvciBmaWxlIGluIHRoZSBhdXRvaW5zdGFsbGVyCisgICAgICAg
ICAgICAgICAgICAgICAgIHRhcmdldCBkaXJlY3RvcnkgYXQgd2hpY2ggdGhlIHBhY2thZ2Ugc2hv
dWxkIGJlCisgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlZC4gIERlZmF1bHRzIHRvIHRo
ZSBiYXNlIG5hbWUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgIFVSTCBzdWItcGF0aC4g
IFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgcHJvdmlkZWQgaWYKKyAgICAgICAgICAgICAgICAgICAg
ICAgdGhlIFVSTCBzdWItcGF0aCBpcyBub3Qgc3BlY2lmaWVkLgorICAgICAgICAgIHVybF9zdWJw
YXRoOiBUaGUgcmVsYXRpdmUgcGF0aCBvZiB0aGUgVVJMIGRpcmVjdG9yeSB0aGF0IHNob3VsZAor
ICAgICAgICAgICAgICAgICAgICAgICBiZSBpbnN0YWxsZWQuICBEZWZhdWx0cyB0byB0aGUgZnVs
bCBkaXJlY3RvcnksIG9yCisgICAgICAgICAgICAgICAgICAgICAgIHRoZSBlbnRpcmUgVVJMIGNv
bnRlbnRzLgogCi0gICAgcHJpbnQgcHltYXJjLl9fdmVyc2lvbl9fLCBweW1hcmMuX19maWxlX18K
KyAgICAgICAgIiIiCisgICAgICAgIGlmIHRhcmdldF9uYW1lIGlzIE5vbmU6CisgICAgICAgICAg
ICBpZiBub3QgdXJsX3N1YnBhdGg6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcign
VGhlICJ0YXJnZXRfbmFtZSIgcGFyYW1ldGVyIG11c3QgYmUgJworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJ3Byb3ZpZGVkIGlmIHRoZSAidXJsX3N1YnBhdGgiIHBhcmFtZXRlciAn
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaXMgbm90IHByb3ZpZGVkLiIpCisg
ICAgICAgICAgICAjIFJlbW92ZSBhbnkgdHJhaWxpbmcgc2xhc2hlcy4KKyAgICAgICAgICAgIHVy
bF9zdWJwYXRoID0gb3MucGF0aC5ub3JtcGF0aCh1cmxfc3VicGF0aCkKKyAgICAgICAgICAgIHRh
cmdldF9uYW1lID0gb3MucGF0aC5iYXNlbmFtZSh1cmxfc3VicGF0aCkKKworICAgICAgICB0YXJn
ZXRfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLl90YXJnZXRfZGlyLCB0YXJnZXRfbmFtZSkKKyAg
ICAgICAgaWYgKG5vdCBzaG91bGRfcmVmcmVzaCkgYW5kIHNlbGYuX2lzX2Rvd25sb2FkZWQodGFy
Z2V0X25hbWUsIHVybCk6CisgICAgICAgICAgICBzZWxmLl9sb2cuZGVidWcoJ1VSTCBhbHJlYWR5
IGRvd25sb2FkZWQ6IHNraXBwaW5nICIlcyIuJworICAgICAgICAgICAgICAgICAgICAgICAgICAg
JSB0YXJnZXRfcGF0aCkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYuX2xvZ190
cmFuc2Zvcm0oIlN0YXJ0aW5nICVzIGluc3RhbGwuLi4iICUgdGFyZ2V0X25hbWUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdXJsLCB0YXJnZXRfcGF0aCkKKworICAgICAgICAjIFRoZSBz
Y3JhdGNoIGRpcmVjdG9yeSBpcyB3aGVyZSB3ZSB3aWxsIGRvd25sb2FkIGFuZCBwcmVwYXJlCisg
ICAgICAgICMgZmlsZXMgc3BlY2lmaWMgdG8gdGhpcyBpbnN0YWxsIHVudGlsIHRoZXkgYXJlIHJl
YWR5IHRvIG1vdmUKKyAgICAgICAgIyBpbnRvIHBsYWNlLgorICAgICAgICBzY3JhdGNoX2RpciA9
IHNlbGYuX2NyZWF0ZV9zY3JhdGNoX2RpcmVjdG9yeSh0YXJnZXRfbmFtZSkKIAotICAgIGFzc2Vy
dCBweW1hcmMuX192ZXJzaW9uX189PSIyLjEiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNl
bGYuX2luc3RhbGwodGFyZ2V0X25hbWU9dGFyZ2V0X25hbWUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRhcmdldF9wYXRoPXRhcmdldF9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICBzY3JhdGNoX2Rpcj1zY3JhdGNoX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdXJs
PXVybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsX3N1YnBhdGg9dXJsX3N1YnBhdGgp
CisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLl9sb2cuZGVidWcoJ0NsZWFuaW5n
IHVwOiBkZWxldGluZyAiJXMiLicgJSBzY3JhdGNoX2RpcikKKyAgICAgICAgICAgIHNodXRpbC5y
bXRyZWUoc2NyYXRjaF9kaXIpCisgICAgICAgIHNlbGYuX2xvZy5pbmZvKCdBdXRvLWluc3RhbGxl
ZCBwYWNrYWdlICIlcyIgYXQ6ICIlcyIuJworICAgICAgICAgICAgICAgICAgICAgICAlICh0YXJn
ZXRfbmFtZSwgdGFyZ2V0X3BhdGgpKQogCi0gICAgZCA9IF9nZXRJbXBvcnRlcigpLmNhY2hlLmRp
cmVjdG9yeQotICAgIGFzc2VydCBkIGluIHB5bWFyYy5fX2ZpbGVfXywgIiclcycgbm90IGZvdW5k
IGluIHB5bWFyYy5fX2ZpbGVfXyAoJXMpIiAlIChkLCBweW1hcmMuX19maWxlX18pCiAKLSAgICAj
IENhbiBub3cgYWxzbyBiaW5kIHRvIG5vbiB0b3AgbGV2ZWwgcGFja2FnZXMuIFRoZSBwYWNrYWdl
cwotICAgICMgbGVhZGluZyB1cCB0byB0aGUgcGFja2FnZSBiZWluZyBib3VuZCB3aWxsIG5lZWQg
dG8gYmUgZGVmaW5lZAotICAgICMgaG93ZXZlci4KLSAgICAjCi0gICAgIyBiaW5kKCJyZGYucGx1
Z2lucy5zdG9yZXMubWVtb3J5IiwgCi0gICAgIyAgICAgICJodHRwOi8vcHlwaS5weXRob24ub3Jn
L3BhY2thZ2VzLzIuNS9yL3JkZi5wbHVnaW5zLnN0b3Jlcy5tZW1lb3J5L3JkZi5wbHVnaW5zLnN0
b3Jlcy5tZW1vcnktMC45YS1weTIuNS5lZ2ciKQotICAgICMKLSAgICAjIGZyb20gcmRmLnBsdWdp
bnMuc3RvcmVzLm1lbW9yeSBpbXBvcnQgTWVtb3J5CitpZiBfX25hbWVfXz09Il9fbWFpbl9fIjoK
IAorICAgICMgVXNlIGEgbW9yZSB2aXNpYmxlIHRlbXAgZGlyZWN0b3J5IGZvciBkZWJ1ZyBwdXJw
b3Nlcy4KKyAgICB0aGlzX2RpciA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykKKyAgICB0YXJn
ZXRfZGlyID0gb3MucGF0aC5qb2luKHRoaXNfZGlyLCAiYXV0b2luc3RhbGxlZCIpCisgICAgdGVt
cF9kaXIgPSBvcy5wYXRoLmpvaW4odGFyZ2V0X2RpciwgIlRlbXAiKQorCisgICAgIyBMb2cgREVC
VUcgbWVzc2FnZXMgZm9yIGRldmVsb3BtZW50IHRlc3RpbmcgcHVycG9zZXMuCisgICAgaW5zdGFs
bGVyID0gQXV0b0luc3RhbGxlcihsb2dnaW5nX2xldmVsPWxvZ2dpbmcuREVCVUcsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfZGlyPXRhcmdldF9kaXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0ZW1wX2Rpcj10ZW1wX2RpcikKKworICAgIGluc3RhbGxlci5p
bnN0YWxsKHNob3VsZF9yZWZyZXNoPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgIHRhcmdl
dF9uYW1lPSJwZXA4LnB5IiwKKyAgICAgICAgICAgICAgICAgICAgICB1cmw9Imh0dHA6Ly9weXBp
LnB5dGhvbi5vcmcvcGFja2FnZXMvc291cmNlL3AvcGVwOC9wZXA4LTAuNS4wLnRhci5neiNtZDU9
NTEyYTgxOGFmOTk3OTI5MGNkNjE5Y2NlOGU5YzJlMmIiLAorICAgICAgICAgICAgICAgICAgICAg
IHVybF9zdWJwYXRoPSJwZXA4LTAuNS4wL3BlcDgucHkiKQorICAgIGluc3RhbGxlci5pbnN0YWxs
KHNob3VsZF9yZWZyZXNoPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9uYW1l
PSJtZWNoYW5pemUiLAorICAgICAgICAgICAgICAgICAgICAgIHVybD0iaHR0cDovL3B5cGkucHl0
aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2UvbS9tZWNoYW5pemUvbWVjaGFuaXplLTAuMS4xMS56aXAi
LAorICAgICAgICAgICAgICAgICAgICAgIHVybF9zdWJwYXRoPSJtZWNoYW5pemUiKQogCg==
</data>
<flag name="commit-queue"
          id="31937"
          type_id="3"
          status="-"
          setter="cjerdonek"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49166</attachid>
            <date>2010-02-21 13:23:57 -0800</date>
            <delta_ts>2010-02-23 06:09:41 -0800</delta_ts>
            <desc>Proposed patch 3</desc>
            <filename>_patch-35163-3.diff</filename>
            <type>text/plain</type>
            <size>24827</size>
            <attacher name="Chris Jerdonek">cjerdonek</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBlOTNmZmRhLi4zNDQ2MWUzIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTAtMDIt
MjEgIENocmlzIEplcmRvbmVrICA8Y2plcmRvbmVrQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmV3cm90ZSBhdXRvaW5zdGFsbC5w
eSB0byBzdXBwb3J0IHVuemlwcGluZyBhbmQgZXh0cmFjdGluZworICAgICAgICAqLnppcCBhbmQg
Ki50YXIuZ3ogZmlsZXMgYWZ0ZXIgZG93bmxvYWQgYW5kIGNvcHlpbmcgdG8gYQorICAgICAgICBn
aXZlbiBsb2NhdGlvbi4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MzUxNjMKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvX19pbml0X18ucHk6
CisgICAgICAgICAgLSBVcGRhdGVkIHRoZSBhdXRvaW5zdGFsbCBsaW5lcyB0byB1c2UgdGhlIG5l
dyBhdXRvaW5zdGFsbCBtZXRob2RzLgorICAgICAgICAgIC0gQWRkZWQgcGVwOC5weSB0byBsaXN0
IG9mIGF1dG8taW5zdGFsbGVkIHBhY2thZ2VzLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9idWd6aWxsYS5weToKKyAgICAgICAgICAtIFVwZGF0ZWQgbWVjaGFuaXplIGltcG9ydCBwYXRo
LgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9uZXR3b3JrdHJhbnNhY3Rpb24ucHk6Cisg
ICAgICAgICAgLSBVcGRhdGVkIG1lY2hhbml6ZSBpbXBvcnQgcGF0aC4KKworICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvbmV0d29ya3RyYW5zYWN0aW9uX3VuaXR0ZXN0LnB5OgorICAgICAgICAg
IC0gVXBkYXRlZCBtZWNoYW5pemUgaW1wb3J0IHBhdGguCisKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L3N0YXR1c3NlcnZlci5weToKKyAgICAgICAgICAtIFVwZGF0ZWQgbWVjaGFuaXplIGlt
cG9ydCBwYXRoLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L2F1dG9p
bnN0YWxsLnB5OgorICAgICAgICAgIC0gQWRkZWQgQXV0b0luc3RhbGxlciBjbGFzcy4KKyAgICAg
ICAgICAtIFJlbW92ZWQgb2xkICJiaW5kIi1hcHByb2FjaCBjb2RlLgorICAgICAgICAgIC0gVXBk
YXRlZCBfX21haW5fXyB3aXRoIHNhbXBsZSB1c2FnZS4KKwogMjAxMC0wMi0yMCAgQ2hyaXMgSmVy
ZG9uZWsgIDxjamVyZG9uZWtAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFt
IEJhcnRoLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9fX2luaXRf
Xy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvX19pbml0X18ucHkKaW5kZXggZWZh
OGM3YS4uN2Y2MDM5YSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9f
X2luaXRfXy5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L19faW5pdF9fLnB5
CkBAIC0xLDggKzEsMjMgQEAKICMgUmVxdWlyZWQgZm9yIFB5dGhvbiB0byBzZWFyY2ggdGhpcyBk
aXJlY3RvcnkgZm9yIG1vZHVsZSBmaWxlcwogCi1pbXBvcnQgdGhpcmRwYXJ0eS5hdXRvaW5zdGFs
bCBhcyBhdXRvaW5zdGFsbAoraW1wb3J0IGxvZ2dpbmcKKworZnJvbSB0aGlyZHBhcnR5LmF1dG9p
bnN0YWxsIGltcG9ydCBBdXRvSW5zdGFsbGVyCisKKyMgV2UgcHV0IGF1dG8taW5zdGFsbGVkIHRo
aXJkLXBhcnR5IG1vZHVsZXMgaGVyZToKKyMKKyMgICAgIHdlYmtpdHB5L3RoaXJkcGFydHkvYXV0
b2luc3RhbGxlZAorIworIyBXZSBjYW4gdXNlIHRoZSBkZWZhdWx0ICJ0YXJnZXRfZGlyIiBwYXJh
bWV0ZXIgc2luY2UgYXV0b2luc3RhbGwucHkgaXMKKyMgYWxyZWFkeSBsb2NhdGVkIGluc2lkZSB3
ZWJraXRweS90aGlyZHBhcnR5LgoraW5zdGFsbGVyID0gQXV0b0luc3RhbGxlcigpCiAKICMgTGlz
dCBvdXIgdGhpcmQtcGFydHkgbGlicmFyeSBkZXBlbmRlbmNpZXMgaGVyZSBhbmQgd2hlcmUgdGhl
eSBjYW4gYmUKICMgZG93bmxvYWRlZC4KLWF1dG9pbnN0YWxsLmJpbmQoIkNsaWVudEZvcm0iLCAi
aHR0cDovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2UvQy9DbGllbnRGb3JtL0NsaWVu
dEZvcm0tMC4yLjEwLnppcCIsICJDbGllbnRGb3JtLTAuMi4xMCIpCi1hdXRvaW5zdGFsbC5iaW5k
KCJtZWNoYW5pemUiLCAiaHR0cDovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2UvbS9t
ZWNoYW5pemUvbWVjaGFuaXplLTAuMS4xMS56aXAiLCAibWVjaGFuaXplLTAuMS4xMSIpCitpbnN0
YWxsZXIuaW5zdGFsbCh1cmw9Imh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvc291cmNl
L20vbWVjaGFuaXplL21lY2hhbml6ZS0wLjEuMTEuemlwIiwKKyAgICAgICAgICAgICAgICAgIHVy
bF9zdWJwYXRoPSJtZWNoYW5pemUiKQoraW5zdGFsbGVyLmluc3RhbGwodXJsPSJodHRwOi8vcHlw
aS5weXRob24ub3JnL3BhY2thZ2VzL3NvdXJjZS9DL0NsaWVudEZvcm0vQ2xpZW50Rm9ybS0wLjIu
MTAuemlwIiwKKyAgICAgICAgICAgICAgICAgIHVybF9zdWJwYXRoPSJDbGllbnRGb3JtLnB5IikK
K2luc3RhbGxlci5pbnN0YWxsKHVybD0iaHR0cDovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9z
b3VyY2UvcC9wZXA4L3BlcDgtMC41LjAudGFyLmd6I21kNT01MTJhODE4YWY5OTc5MjkwY2Q2MTlj
Y2U4ZTljMmUyYiIsCisgICAgICAgICAgICAgICAgICB1cmxfc3VicGF0aD0icGVwOC0wLjUuMC9w
ZXA4LnB5IikKKwpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9idWd6
aWxsYS5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvYnVnemlsbGEucHkKaW5kZXgg
MDBlNjk0MC4uNWEyMTcyOCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9idWd6aWxsYS5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2J1Z3ppbGxh
LnB5CkBAIC00NSw3ICs0NSw3IEBAIGZyb20gd2Via2l0cHkudXNlciBpbXBvcnQgVXNlcgogIyBz
byB0aGlzIGltcG9ydCBzaG91bGQgYWx3YXlzIHN1Y2NlZWQuCiBmcm9tIHdlYmtpdHB5LnRoaXJk
cGFydHkuQmVhdXRpZnVsU291cCBpbXBvcnQgQmVhdXRpZnVsU291cCwgU291cFN0cmFpbmVyCiAK
LWZyb20gbWVjaGFuaXplIGltcG9ydCBCcm93c2VyCitmcm9tIHdlYmtpdHB5LnRoaXJkcGFydHku
YXV0b2luc3RhbGxlZC5tZWNoYW5pemUgaW1wb3J0IEJyb3dzZXIKIAogCiBkZWYgcGFyc2VfYnVn
X2lkKG1lc3NhZ2UpOgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9u
ZXR3b3JrdHJhbnNhY3Rpb24ucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L25ldHdv
cmt0cmFuc2FjdGlvbi5weQppbmRleCA2NWVhMjdkLi5hNGM5MzAwIDEwMDY0NAotLS0gYS9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L25ldHdvcmt0cmFuc2FjdGlvbi5weQorKysgYi9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L25ldHdvcmt0cmFuc2FjdGlvbi5weQpAQCAtMjgsNyAr
MjgsNyBAQAogCiBpbXBvcnQgdGltZQogCi1mcm9tIG1lY2hhbml6ZSBpbXBvcnQgSFRUUEVycm9y
Citmcm9tIHdlYmtpdHB5LnRoaXJkcGFydHkuYXV0b2luc3RhbGxlZC5tZWNoYW5pemUgaW1wb3J0
IEhUVFBFcnJvcgogZnJvbSB3ZWJraXRweS53ZWJraXRfbG9nZ2luZyBpbXBvcnQgbG9nCiAKIApk
aWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9uZXR3b3JrdHJhbnNhY3Rp
b25fdW5pdHRlc3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L25ldHdvcmt0cmFu
c2FjdGlvbl91bml0dGVzdC5weQppbmRleCAzY2ZmZTAyLi5mN2NlYmQ4IDEwMDY0NAotLS0gYS9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L25ldHdvcmt0cmFuc2FjdGlvbl91bml0dGVzdC5w
eQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L25ldHdvcmt0cmFuc2FjdGlvbl91
bml0dGVzdC5weQpAQCAtMjgsNyArMjgsNyBAQAogCiBpbXBvcnQgdW5pdHRlc3QKIAotZnJvbSBt
ZWNoYW5pemUgaW1wb3J0IEhUVFBFcnJvcgorZnJvbSB3ZWJraXRweS50aGlyZHBhcnR5LmF1dG9p
bnN0YWxsZWQubWVjaGFuaXplIGltcG9ydCBIVFRQRXJyb3IKIGZyb20gd2Via2l0cHkubmV0d29y
a3RyYW5zYWN0aW9uIGltcG9ydCBOZXR3b3JrVHJhbnNhY3Rpb24sIE5ldHdvcmtUaW1lb3V0CiAK
IGNsYXNzIE5ldHdvcmtUcmFuc2FjdGlvblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgpkaWZmIC0t
Z2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdGF0dXNzZXJ2ZXIucHkgYi9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0YXR1c3NlcnZlci5weQppbmRleCA5YTU2NzAyLi4z
OTg4MmVhIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0YXR1c3Nl
cnZlci5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0YXR1c3NlcnZlci5w
eQpAQCAtMjgsNyArMjgsNyBAQAogCiBmcm9tIHdlYmtpdHB5Lm5ldHdvcmt0cmFuc2FjdGlvbiBp
bXBvcnQgTmV0d29ya1RyYW5zYWN0aW9uCiBmcm9tIHdlYmtpdHB5LndlYmtpdF9sb2dnaW5nIGlt
cG9ydCBsb2cKLWZyb20gbWVjaGFuaXplIGltcG9ydCBCcm93c2VyCitmcm9tIHdlYmtpdHB5LnRo
aXJkcGFydHkuYXV0b2luc3RhbGxlZC5tZWNoYW5pemUgaW1wb3J0IEJyb3dzZXIKIAogIyBXZWJL
aXQgaW5jbHVkZXMgYSBidWlsdCBjb3B5IG9mIEJlYXV0aWZ1bFNvdXAgaW4gU2NyaXB0cy93ZWJr
aXRweS90aGlyZHBhcnR5CiAjIHNvIHRoaXMgaW1wb3J0IHNob3VsZCBhbHdheXMgc3VjY2VlZC4K
ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9hdXRv
aW5zdGFsbC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9hdXRv
aW5zdGFsbC5weQppbmRleCA0NjdlNmI0Li4xYjhlMWU1IDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvYXV0b2luc3RhbGwucHkKKysrIGIvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L2F1dG9pbnN0YWxsLnB5CkBAIC0xLDUg
KzEsNiBAQAogIyBDb3B5cmlnaHQgKGMpIDIwMDksIERhbmllbCBLcmVjaCBBbGwgcmlnaHRzIHJl
c2VydmVkLgotIyAKKyMgQ29weXJpZ2h0IChDKSAyMDEwIENocmlzIEplcmRvbmVrIChjamVyZG9u
ZWtAd2Via2l0Lm9yZykKKyMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKICMgbWV0OgpA
QCAtMTQ3LDg2ICsxNDgsMjExIEBAIGZyb20gX19mdXR1cmVfXyBpbXBvcnQgd2l0aF9zdGF0ZW1l
bnQKIF9fdmVyc2lvbl9fID0gIjAuMiIKIF9fZG9jZm9ybWF0X18gPSAicmVzdHJ1Y3R1cmVkdGV4
dCBlbiIKIAotaW1wb3J0IG9zCitpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG5ldworaW1wb3J0IG9z
CitpbXBvcnQgc2h1dGlsCiBpbXBvcnQgc3lzCi1pbXBvcnQgdXJsbGliCi1pbXBvcnQgbG9nZ2lu
ZworaW1wb3J0IHRhcmZpbGUKIGltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHVybGxpYgoraW1wb3J0
IHVybHBhcnNlCitpbXBvcnQgemlwZmlsZQogaW1wb3J0IHppcGltcG9ydAogCi1fbG9nZ2VyID0g
bG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoImF1
dG9pbnN0YWxsIikKIAorY2xhc3MgQXV0b0luc3RhbGxlcihvYmplY3QpOgogCi1faW1wb3J0ZXIg
PSBOb25lCisgICAgIiIiU3VwcG9ydHMgYXV0b21hdGljYWxseSBpbnN0YWxsaW5nIFB5dGhvbiBw
YWNrYWdlcyBmcm9tIGFuIFVSTC4KIAotZGVmIF9nZXRJbXBvcnRlcigpOgotICAgIGdsb2JhbCBf
aW1wb3J0ZXIKLSAgICBpZiBfaW1wb3J0ZXIgaXMgTm9uZToKLSAgICAgICAgX2ltcG9ydGVyID0g
SW1wb3J0ZXIoKQotICAgICAgICBzeXMubWV0YV9wYXRoLmFwcGVuZChfaW1wb3J0ZXIpCi0gICAg
cmV0dXJuIF9pbXBvcnRlcgorICAgIFN1cHBvcnRzIHVuY29tcHJlc3NlZCBmaWxlcywgLnRhci5n
eiwgYW5kIC56aXAgZm9ybWF0cy4KIAotZGVmIGJpbmQocGFja2FnZV9uYW1lLCB1cmwsIHppcF9z
dWJwYXRoPU5vbmUpOgotICAgICIiImJpbmQgYSB0b3AgbGV2ZWwgcGFja2FnZSBuYW1lIHRvIGEg
VVJMLgorICAgIEJhc2ljIHVzYWdlOgogCi0gICAgVGhlIHBhY2thZ2UgbmFtZSBzaG91bGQgYmUg
YSBwYWNrYWdlIG5hbWUgYW5kIHRoZSB1cmwgc2hvdWxkIGJlIGEKLSAgICB1cmwgdG8gc29tZXRo
aW5nIHRoYXQgY2FuIGJlIGltcG9ydGVkIHVzaW5nIHRoZSB6aXBpbXBvcnRlci4KKyAgICBpbnN0
YWxsZXIgPSBBdXRvSW5zdGFsbGVyKCkKKworICAgIGluc3RhbGxlci5pbnN0YWxsKHVybD0iaHR0
cDovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2UvcC9wZXA4L3BlcDgtMC41LjAudGFy
Lmd6I21kNT01MTJhODE4YWY5OTc5MjkwY2Q2MTljY2U4ZTljMmUyYiIsCisgICAgICAgICAgICAg
ICAgICAgICAgdXJsX3N1YnBhdGg9InBlcDgtMC41LjAvcGVwOC5weSIpCisgICAgaW5zdGFsbGVy
Lmluc3RhbGwodXJsPSJodHRwOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2VzL3NvdXJjZS9tL21l
Y2hhbml6ZS9tZWNoYW5pemUtMC4xLjExLnppcCIsCisgICAgICAgICAgICAgICAgICAgICAgdXJs
X3N1YnBhdGg9Im1lY2hhbml6ZSIpCiAKLSAgICBPcHRpb25hbCB6aXBfc3VicGF0aCBwYXJhbWV0
ZXIgYWxsb3dzIHNlYXJjaGluZyBmb3IgbW9kdWxlcwotICAgIGJlbG93IHRoZSByb290IGxldmVs
IG9mIHRoZSB6aXAgZmlsZS4KICAgICAiIiIKLSAgICBfZ2V0SW1wb3J0ZXIoKS5iaW5kKHBhY2th
Z2VfbmFtZSwgdXJsLCB6aXBfc3VicGF0aCkKIAorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0YXJn
ZXRfZGlyPU5vbmUsIHRlbXBfZGlyPU5vbmUpOgorICAgICAgICAiIiJDcmVhdGUgYW4gQXV0b0lu
c3RhbGxlciBpbnN0YW5jZS4KKworICAgICAgICBUaGlzIG1ldGhvZCBhbHNvIGNyZWF0ZXMgdGhl
IHRhcmdldCBhbmQgdGVtcCBkaXJlY3RvcmllcyBpZiB0aGV5CisgICAgICAgIGFyZSBub3QgYWxy
ZWFkeSBzZXQgdXAuCiAKLWNsYXNzIENhY2hlKG9iamVjdCk6CisgICAgICAgIEFyZ3M6CisgICAg
ICAgICAgdGFyZ2V0X2RpcjogVGhlIGRpcmVjdG9yeSBwYXRoIHRvIHdoaWNoIHBhY2thZ2VzIHNo
b3VsZCBiZSBpbnN0YWxsZWQuCisgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdHMgdG8gYSBz
dWJkaXJlY3Rvcnkgb2YgdGhlIGZvbGRlciBjb250YWluaW5nCisgICAgICAgICAgICAgICAgICAg
ICAgdGhpcyBtb2R1bGUgY2FsbGVkICJhdXRvaW5zdGFsbGVkIi4KKyAgICAgICAgICB0ZW1wX2Rp
cjogVGhlIGRpcmVjdG9yeSBwYXRoIHRvIHVzZSBmb3IgYW55IHRlbXBvcmFyeSBmaWxlcworICAg
ICAgICAgICAgICAgICAgICBnZW5lcmF0ZWQgd2hpbGUgZG93bmxvYWRpbmcsIHVuemlwcGluZywg
YW5kIGV4dHJhY3RpbmcKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgdG8gaW5zdGFsbC4g
IERlZmF1bHRzIHRvIGEgc3RhbmRhcmQgdGVtcG9yYXJ5CisgICAgICAgICAgICAgICAgICAgIGxv
Y2F0aW9uIGdlbmVyYXRlZCBieSB0aGUgdGVtcGZpbGUgbW9kdWxlLiAgVGhpcworICAgICAgICAg
ICAgICAgICAgICBwYXJhbWV0ZXIgc2hvdWxkIG5vcm1hbGx5IGJlIHVzZWQgb25seSBmb3IgZGV2
ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICAgICAgdGVzdGluZy4KIAotICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBkaXJlY3Rvcnk9Tm9uZSk6Ci0gICAgICAgIGlmIGRpcmVjdG9yeSBpcyBOb25lOgot
ICAgICAgICAgICAgIyBEZWZhdWx0IHRvIHB1dHRpbmcgdGhlIGNhY2hlIGRpcmVjdG9yeSBpbiB0
aGUgc2FtZSBkaXJlY3RvcnkKLSAgICAgICAgICAgICMgYXMgdGhpcyBmaWxlLgotICAgICAgICAg
ICAgY29udGFpbmluZ19kaXJlY3RvcnkgPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pCi0gICAg
ICAgICAgICBkaXJlY3RvcnkgPSBvcy5wYXRoLmpvaW4oY29udGFpbmluZ19kaXJlY3RvcnksICJh
dXRvaW5zdGFsbC5jYWNoZS5kIik7CisgICAgICAgICIiIgorICAgICAgICBpZiB0YXJnZXRfZGly
IGlzIE5vbmU6CisgICAgICAgICAgICB0aGlzX2RpciA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVf
XykKKyAgICAgICAgICAgIHRhcmdldF9kaXIgPSBvcy5wYXRoLmpvaW4odGhpc19kaXIsICJhdXRv
aW5zdGFsbGVkIikKKyAgICAgICAgaWYgKCh0ZW1wX2RpciBpcyBub3QgTm9uZSkgYW5kIG5vdCBv
cy5wYXRoLmV4aXN0cyh0ZW1wX2RpcikpOgorICAgICAgICAgICAgIyBUaGUgdGVtcGZpbGUubWtk
dGVtcCgpIG1ldGhvZCBjYWxsZWQgaW4KKyAgICAgICAgICAgICMgc2VsZi5fY3JlYXRlX3NjcmF0
Y2hfZGlyZWN0b3J5KCkgcmVxdWlyZXMgdGhhdCB0aGUgZGlyZWN0b3J5CisgICAgICAgICAgICAj
IGNvcnJlc3BvbmRpbmcgdG8gaXRzICJkaXIiIHBhcmFtZXRlciBhbHJlYWR5IGV4aXN0IGlmIGl0
CisgICAgICAgICAgICAjIGlzIG5vdCBOb25lLgorICAgICAgICAgICAgb3MubWFrZWRpcnModGVt
cF9kaXIpCisgICAgICAgICAgICBfbG9nLmluZm8oJ0NyZWF0ZWQgYXV0b2luc3RhbGwgdGVtcCBk
aXJlY3RvcnkgYXQ6ICIlcyIuJyAlIHRlbXBfZGlyKQorCisgICAgICAgICMgRW5zdXJlIHRoYXQg
dGhlIHRhcmdldCBkaXJlY3RvcnkgZXhpc3RzLgorICAgICAgICBzZWxmLl9jcmVhdGVfdGFyZ2V0
X2Rpcih0YXJnZXRfZGlyKQorCisgICAgICAgIHNlbGYuX3RhcmdldF9kaXIgPSB0YXJnZXRfZGly
CisgICAgICAgIHNlbGYuX3RlbXBfZGlyID0gdGVtcF9kaXIKKworICAgIGRlZiBfbG9nX3RyYW5z
Zm9ybShzZWxmLCBtZXNzYWdlLCBzb3VyY2UsIHRhcmdldCk6CisgICAgICAgICIiIkxvZyBhIGRl
YnVnIG1lc3NhZ2UgdGhhdCBpbnZvbHZlcyBhIHNvdXJjZSBhbmQgdGFyZ2V0LiIiIgorICAgICAg
ICBfbG9nLmRlYnVnKCIlc1xuIgorICAgICAgICAgICAgICAgICAgICcgRnJvbTogIiVzIlxuJwor
ICAgICAgICAgICAgICAgICAgICcgICBUbzogIiVzIicgJSAobWVzc2FnZSwgc291cmNlLCB0YXJn
ZXQpKQorCisgICAgZGVmIF93cml0ZV9maWxlKHNlbGYsIHBhdGgsIHRleHQpOgorICAgICAgICAi
IiJDcmVhdGUgYSBmaWxlIGF0IHRoZSBnaXZlbiBwYXRoIHdpdGggZ2l2ZW4gdGV4dC4KKworICAg
ICAgICBUaGlzIG1ldGhvZCBvdmVyd3JpdGVzIGFueSBleGlzdGluZyBmaWxlLgogCi0gICAgICAg
IHNlbGYuZGlyZWN0b3J5ID0gZGlyZWN0b3J5CisgICAgICAgICIiIgorICAgICAgICBfbG9nLmRl
YnVnKCdXcml0aW5nIGZpbGU6ICIlcyInICUgcGF0aCkKKyAgICAgICAgZmlsZSA9IG9wZW4ocGF0
aCwgInciKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMo
c2VsZi5kaXJlY3RvcnkpOgotICAgICAgICAgICAgICAgIHNlbGYuX2NyZWF0ZV9jYWNoZV9kaXJl
Y3RvcnkoKQotICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlcnI6Ci0gICAgICAgICAgICBfbG9n
Z2VyLmV4Y2VwdGlvbihlcnIpCi0gICAgICAgICAgICBzZWxmLmNhY2hlX2RpcmVjdHJ5ID0gdGVt
cGZpbGUubWtkdGVtcCgpCi0gICAgICAgIF9sb2dnZXIuaW5mbygiVXNpbmcgY2FjaGUgZGlyZWN0
b3J5ICclcycuIiAlIHNlbGYuZGlyZWN0b3J5KQotICAgIAotICAgIGRlZiBfY3JlYXRlX2NhY2hl
X2RpcmVjdG9yeShzZWxmKToKLSAgICAgICAgX2xvZ2dlci5kZWJ1ZygiQ3JlYXRpbmcgY2FjaGUg
ZGlyZWN0b3J5ICclcycuIiAlIHNlbGYuZGlyZWN0b3J5KQotICAgICAgICBvcy5ta2RpcihzZWxm
LmRpcmVjdG9yeSkKLSAgICAgICAgcmVhZG1lX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5kaXJl
Y3RvcnksICJSRUFETUUiKQotICAgICAgICB3aXRoIG9wZW4ocmVhZG1lX3BhdGgsICJ3IikgYXMg
ZjoKLSAgICAgICAgICAgIGYud3JpdGUoIlRoaXMgZGlyZWN0b3J5IHdhcyBhdXRvLWdlbmVyYXRl
ZCBieSAnJXMnLlxuIgotICAgICAgICAgICAgICAgICAgICAiSXQgaXMgc2FmZSB0byBkZWxldGUu
XG4iICUgX19maWxlX18pCi0KLSAgICBkZWYgZ2V0KHNlbGYsIHVybCk6Ci0gICAgICAgIF9sb2dn
ZXIuaW5mbygiR2V0dGluZyAnJXMnIGZyb20gY2FjaGUuIiAlIHVybCkKLSAgICAgICAgZmlsZW5h
bWUgPSB1cmwucnNwbGl0KCIvIilbLTFdCi0KLSAgICAgICAgIyBzbyB0aGF0IHNvdXJjZSB1cmwg
aXMgc2lnbmlmaWNhbnQgaW4gZGV0ZXJtaW5pbmcgY2FjaGUgaGl0cwotICAgICAgICBkID0gb3Mu
cGF0aC5qb2luKHNlbGYuZGlyZWN0b3J5LCAiJXMiICUgaGFzaCh1cmwpKQotICAgICAgICBpZiBu
b3Qgb3MucGF0aC5leGlzdHMoZCk6Ci0gICAgICAgICAgICBvcy5ta2RpcihkKQotCi0gICAgICAg
IGZpbGVuYW1lID0gb3MucGF0aC5qb2luKGQsIGZpbGVuYW1lKSAKLQotICAgICAgICBpZiBvcy5w
YXRoLmV4aXN0cyhmaWxlbmFtZSk6Ci0gICAgICAgICAgICBfbG9nZ2VyLmRlYnVnKCIuLi4gYWxy
ZWFkeSBjYWNoZWQgaW4gZmlsZSAnJXMnLiIgJSBmaWxlbmFtZSkKKyAgICAgICAgICAgIGZpbGUu
d3JpdGUodGV4dCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZpbGUuY2xvc2UoKQor
CisgICAgZGVmIF9jcmVhdGVfdGFyZ2V0X2RpcihzZWxmLCB0YXJnZXRfZGlyKToKKyAgICAgICAg
IiIiQ3JlYXRlIGEgdGFyZ2V0IGRpcmVjdG9yeSBhbmQgYXNzb2NpYXRlZCBfX2luaXRfXy5weSBm
aWxlLiIiIgorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHModGFyZ2V0X2Rpcik6CisgICAg
ICAgICAgICBvcy5tYWtlZGlycyh0YXJnZXRfZGlyKQorICAgICAgICAgICAgX2xvZy5pbmZvKCdD
cmVhdGVkIGF1dG9pbnN0YWxsIHBhY2thZ2UgZGlyZWN0b3J5IGF0OiAiJXMiLicKKyAgICAgICAg
ICAgICAgICAgICAgICAlIHRhcmdldF9kaXIpCisgICAgICAgIGluaXRfcGF0aCA9IG9zLnBhdGgu
am9pbih0YXJnZXRfZGlyLCAiX19pbml0X18ucHkiKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5l
eGlzdHMoaW5pdF9wYXRoKToKKyAgICAgICAgICAgIHRleHQgPSAoIiMgVGhpcyBmaWxlIGlzIHJl
cXVpcmVkIGZvciBQeXRob24gdG8gc2VhcmNoIHRoaXMgIgorICAgICAgICAgICAgICAgICAgICAi
ZGlyZWN0b3J5IGZvciBtb2R1bGVzLlxuXG4iKQorICAgICAgICAgICAgc2VsZi5fd3JpdGVfZmls
ZShpbml0X3BhdGgsIHRleHQpCisKKyAgICBkZWYgX2NyZWF0ZV9zY3JhdGNoX2RpcmVjdG9yeShz
ZWxmLCB0YXJnZXRfbmFtZSk6CisgICAgICAgICIiIkNyZWF0ZSBhIHRlbXBvcmFyeSBzY3JhdGNo
IGRpcmVjdG9yeSwgYW5kIHJldHVybiBpdHMgcGF0aC4KKworICAgICAgICBUaGUgc2NyYXRjaCBk
aXJlY3RvcnkgaXMgZ2VuZXJhdGVkIGluc2lkZSB0aGUgdGVtcG9yYXJ5IGRpcmVjdG9yeQorICAg
ICAgICBvZiB0aGlzIEF1dG9JbnN0YWxsZXIgaW5zdGFuY2UuCisKKyAgICAgICAgIiIiCisgICAg
ICAgIHByZWZpeCA9IHRhcmdldF9uYW1lICsgIl8iCisgICAgICAgIHRlbXBfZGlyID0gdGVtcGZp
bGUubWtkdGVtcChwcmVmaXg9cHJlZml4LCBkaXI9c2VsZi5fdGVtcF9kaXIpCisgICAgICAgIHJl
dHVybiB0ZW1wX2RpcgorCisgICAgZGVmIF92ZXJzaW9uX3BhdGgoc2VsZiwgdGFyZ2V0X25hbWUp
OgorICAgICAgICAiIiJSZXR1cm4gdGhlIHBhdGggdG8gdGhlIGZpbGUgY29udGFpbmluZyB0aGUg
dmVyc2lvbiBkb3dubG9hZGVkLiIiIgorICAgICAgICBmaWxlbmFtZSA9ICIuJXMudmVyc2lvbiIg
JSB0YXJnZXRfbmFtZQorICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKHNlbGYuX3RhcmdldF9k
aXIsIGZpbGVuYW1lKQorICAgICAgICByZXR1cm4gcGF0aAorCisgICAgZGVmIF9pc19kb3dubG9h
ZGVkKHNlbGYsIHRhcmdldF9uYW1lLCB1cmwpOgorICAgICAgICAiIiJSZXR1cm4gd2hldGhlciBh
IHBhY2thZ2UgdmVyc2lvbiBoYXMgYmVlbiBkb3dubG9hZGVkLiIiIgorICAgICAgICB2ZXJzaW9u
X3BhdGggPSBzZWxmLl92ZXJzaW9uX3BhdGgodGFyZ2V0X25hbWUpCisKKyAgICAgICAgaWYgbm90
IG9zLnBhdGguZXhpc3RzKHZlcnNpb25fcGF0aCk6CisgICAgICAgICAgICAjIFRoZW4gbm8gcGFj
a2FnZSB2ZXJzaW9uIGhhcyBiZWVuIGRvd25sb2FkZWQuCisgICAgICAgICAgICBfbG9nLmRlYnVn
KCdWZXJzaW9uIGZpbGUgbm90IGZvdW5kOiAiJXMiJyAlIHZlcnNpb25fcGF0aCkKKyAgICAgICAg
ICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGZpbGUgPSBvcGVuKHZlcnNpb25fcGF0aCwgInIi
KQorICAgICAgICB0cnk6CisgICAgICAgICAgICB2ZXJzaW9uID0gZmlsZS5yZWFkKCkKKyAgICAg
ICAgZmluYWxseToKKyAgICAgICAgICAgIGZpbGUuY2xvc2UoKQorICAgICAgICBfbG9nLmRlYnVn
KCdSZWFkIHZlcnNpb24gIiVzIiBmcm9tICIlcyIuJyAlICh2ZXJzaW9uLCB2ZXJzaW9uX3BhdGgp
KQorCisgICAgICAgIHJldHVybiB2ZXJzaW9uLnN0cmlwKCkgPT0gdXJsLnN0cmlwKCkKKworICAg
IGRlZiBfd3JpdGVfdmVyc2lvbl9kb3dubG9hZGVkKHNlbGYsIHRhcmdldF9uYW1lLCB1cmwpOgor
ICAgICAgICAiIiJSZWNvcmQgdGhlIHZlcnNpb24gZG93bmxvYWRlZCB0byBhIGZpbGUuIiIiCisg
ICAgICAgICMgUmVjb3JkIHZlcnNpb24gZG93bmxvYWRlZCB0byBmaWxlLgorICAgICAgICB2ZXJz
aW9uX3BhdGggPSBzZWxmLl92ZXJzaW9uX3BhdGgodGFyZ2V0X25hbWUpCisgICAgICAgIF9sb2cu
ZGVidWcoJ1dyaXRpbmcgdmVyc2lvbiAiJXMiIHRvIGZpbGU6ICIlcyIuJworICAgICAgICAgICAg
ICAgICAgICUgKHVybCwgdmVyc2lvbl9wYXRoKSkKKworICAgICAgICBzZWxmLl93cml0ZV9maWxl
KHZlcnNpb25fcGF0aCwgdXJsKQorCisgICAgZGVmIF9leHRyYWN0X3Rhcmd6KHNlbGYsIHBhdGgs
IHNjcmF0Y2hfZGlyKToKKyAgICAgICAgIyB0YXJmaWxlLmV4dHJhY3RhbGwoKSBleHRyYWN0cyB0
byBhIHBhdGggd2l0aG91dCB0aGUKKyAgICAgICAgIyB0cmFpbGluZyAiLnRhci5neiIuCisgICAg
ICAgICMKKyAgICAgICAgIyBUaGUgc3Vic3RyaW5nICIudGFyLmd6IiBoYXMgc2V2ZW4gY2hhcmFj
dGVycy4KKyAgICAgICAgdGFyZ2V0X2Jhc2VuYW1lID0gb3MucGF0aC5iYXNlbmFtZShwYXRoWzot
N10pCisgICAgICAgIHRhcmdldF9wYXRoID0gb3MucGF0aC5qb2luKHNjcmF0Y2hfZGlyLCB0YXJn
ZXRfYmFzZW5hbWUpCisKKyAgICAgICAgc2VsZi5fbG9nX3RyYW5zZm9ybSgiU3RhcnRpbmcgZ3Vu
emlwL2V4dHJhY3QuLi4iLCBwYXRoLCB0YXJnZXRfcGF0aCkKKworICAgICAgICB0ZmlsZSA9IHRh
cmZpbGUub3BlbihwYXRoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBtZW1iZXJzID0gdGZp
bGUuZ2V0bWVtYmVycygpCisgICAgICAgICAgICBfbG9nLmRlYnVnKCJNZW1iZXJzIG9mICVzIGFy
ZTogJXMiICUgKHBhdGgsIG1lbWJlcnMpKQorICAgICAgICAgICAgdGZpbGUuZXh0cmFjdGFsbCh0
YXJnZXRfcGF0aCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHRmaWxlLmNsb3NlKCkK
KworICAgICAgICByZXR1cm4gdGFyZ2V0X3BhdGgKKworICAgIGRlZiBfdW56aXAoc2VsZiwgcGF0
aCwgc2NyYXRjaF9kaXIpOgorICAgICAgICAjIHppcGZpbGUuZXh0cmFjdGFsbCgpIGV4dHJhY3Rz
IHRvIGEgcGF0aCB3aXRob3V0IHRoZQorICAgICAgICAjIHRyYWlsaW5nICIuemlwIi4KKyAgICAg
ICAgIworICAgICAgICAjIFRoZSBzdWJzdHJpbmcgIi56aXAiIGhhcyBmb3VyIGNoYXJhY3RlcnMu
CisgICAgICAgIHRhcmdldF9iYXNlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUocGF0aFs6LTRdKQor
ICAgICAgICB0YXJnZXRfcGF0aCA9IG9zLnBhdGguam9pbihzY3JhdGNoX2RpciwgdGFyZ2V0X2Jh
c2VuYW1lKQorCisgICAgICAgIHNlbGYuX2xvZ190cmFuc2Zvcm0oIlN0YXJ0aW5nIHVuemlwLi4u
IiwgcGF0aCwgdGFyZ2V0X3BhdGgpCisKKyAgICAgICAgemZpbGUgPSB6aXBmaWxlLlppcEZpbGUo
cGF0aCwgInIiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB6ZmlsZS5leHRyYWN0YWxsKHNj
cmF0Y2hfZGlyKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgemZpbGUuY2xvc2UoKQor
CisgICAgICAgIHJldHVybiB0YXJnZXRfcGF0aAorCisgICAgZGVmIF9wcmVwYXJlX3BhY2thZ2Uo
c2VsZiwgcGF0aCwgc2NyYXRjaF9kaXIpOgorICAgICAgICAiIiJQcmVwYXJlIGEgcGFja2FnZSBm
b3IgdXNlLCBpZiBuZWNlc3NhcnksIGFuZCByZXR1cm4gdGhlIG5ldyBwYXRoLgorCisgICAgICAg
IEZvciBleGFtcGxlLCB0aGlzIG1ldGhvZCB1bnppcHMgemlwcGVkIGZpbGVzIGFuZCBleHRyYWN0
cworICAgICAgICB0YXIgZmlsZXMuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICBwYXRoOiBU
aGUgcGF0aCB0byB0aGUgZG93bmxvYWRlZCBVUkwgY29udGVudHMuCisgICAgICAgICAgc2NyYXRj
aF9kaXI6IFRoZSBzY3JhdGNoIGRpcmVjdG9yeS4gIE5vdGUgdGhhdCB0aGUgc2NyYXRjaAorICAg
ICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgY29udGFpbnMgdGhlIGZpbGUgZGVzaWduYXRl
ZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgcGF0aCBwYXJhbWV0ZXIuCisKKyAgICAg
ICAgIiIiCisgICAgICAgICMgRklYTUU6IEFkZCBvdGhlciBuYXR1cmFsIGV4dGVuc2lvbnMuCisg
ICAgICAgIGlmIHBhdGguZW5kc3dpdGgoIi56aXAiKToKKyAgICAgICAgICAgIG5ld19wYXRoID0g
c2VsZi5fdW56aXAocGF0aCwgc2NyYXRjaF9kaXIpCisgICAgICAgIGVsaWYgcGF0aC5lbmRzd2l0
aCgiLnRhci5neiIpOgorICAgICAgICAgICAgbmV3X3BhdGggPSBzZWxmLl9leHRyYWN0X3Rhcmd6
KHBhdGgsIHNjcmF0Y2hfZGlyKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgX2xvZ2dlci5k
ZWJ1ZygiLi4uIG5vdCBpbiBjYWNoZS4gQ2FjaGluZyBpbiAnJXMnLiIgJSBmaWxlbmFtZSkKLSAg
ICAgICAgICAgIHN0cmVhbSA9IGZpbGUoZmlsZW5hbWUsICJ3YiIpCi0gICAgICAgICAgICBzZWxm
LmRvd25sb2FkKHVybCwgc3RyZWFtKQotICAgICAgICAgICAgc3RyZWFtLmNsb3NlKCkKLSAgICAg
ICAgcmV0dXJuIGZpbGVuYW1lCi0KLSAgICBkZWYgZG93bmxvYWQoc2VsZiwgdXJsLCBzdHJlYW0p
OgotICAgICAgICBfbG9nZ2VyLmluZm8oIkRvd25sb2FkaW5nOiAlcyIgJSB1cmwpCisgICAgICAg
ICAgICAjIE5vIHByZXBhcmF0aW9uIGlzIG5lZWRlZC4KKyAgICAgICAgICAgIG5ld19wYXRoID0g
cGF0aAorCisgICAgICAgIHJldHVybiBuZXdfcGF0aAorCisgICAgZGVmIF9kb3dubG9hZF90b19z
dHJlYW0oc2VsZiwgdXJsLCBzdHJlYW0pOgorICAgICAgICAiIiJEb3dubG9hZCBhbiBVUkwgdG8g
YSBzdHJlYW0sIGFuZCByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcy4iIiIKICAgICAgICAgdHJ5
OgogICAgICAgICAgICAgbmV0c3RyZWFtID0gdXJsbGliLnVybG9wZW4odXJsKQogICAgICAgICAg
ICAgY29kZSA9IDIwMApAQCAtMjM1LDEwMSArMzYxLDE0OSBAQCBjbGFzcyBDYWNoZShvYmplY3Qp
OgogICAgICAgICAgICAgaWYgbm90IDIwMCA8PSBjb2RlIDwgMzAwOgogICAgICAgICAgICAgICAg
IHJhaXNlIFZhbHVlRXJyb3IoIkhUVFAgRXJyb3IgY29kZSAlcyIgJSBjb2RlKQogICAgICAgICBl
eGNlcHQgRXhjZXB0aW9uLCBlcnI6Ci0gICAgICAgICAgICBfbG9nZ2VyLmV4Y2VwdGlvbihlcnIp
CisgICAgICAgICAgICBfbG9nLmV4Y2VwdGlvbihlcnIpCiAKICAgICAgICAgQlVGU0laRSA9IDIq
KjEzICAjIDhLQgotICAgICAgICBzaXplID0gMAorICAgICAgICBieXRlcyA9IDAKICAgICAgICAg
d2hpbGUgVHJ1ZToKICAgICAgICAgICAgIGRhdGEgPSBuZXRzdHJlYW0ucmVhZChCVUZTSVpFKQog
ICAgICAgICAgICAgaWYgbm90IGRhdGE6CiAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAg
ICAgIHN0cmVhbS53cml0ZShkYXRhKQotICAgICAgICAgICAgc2l6ZSArPSBsZW4oZGF0YSkKKyAg
ICAgICAgICAgIGJ5dGVzICs9IGxlbihkYXRhKQogICAgICAgICBuZXRzdHJlYW0uY2xvc2UoKQot
ICAgICAgICBfbG9nZ2VyLmluZm8oIkRvd25sb2FkZWQgJWQgYnl0ZXMuIiAlIHNpemUpCi0KLQot
Y2xhc3MgSW1wb3J0ZXIob2JqZWN0KToKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAg
ICAgc2VsZi5wYWNrYWdlcyA9IHt9Ci0gICAgICAgIHNlbGYuX19jYWNoZSA9IE5vbmUKKyAgICAg
ICAgcmV0dXJuIGJ5dGVzCiAKLSAgICBkZWYgX19nZXRfc3RvcmUoc2VsZik6Ci0gICAgICAgIHJl
dHVybiBzZWxmLl9fc3RvcmUKLSAgICBzdG9yZSA9IHByb3BlcnR5KF9fZ2V0X3N0b3JlKQorICAg
IGRlZiBfZG93bmxvYWQoc2VsZiwgdXJsLCBzY3JhdGNoX2Rpcik6CisgICAgICAgICIiIkRvd25s
b2FkIFVSTCBjb250ZW50cywgYW5kIHJldHVybiB0aGUgZG93bmxvYWQgcGF0aC4iIiIKKyAgICAg
ICAgc2VsZi5fbG9nX3RyYW5zZm9ybSgiU3RhcnRpbmcgZG93bmxvYWQuLi4iLCB1cmwsIHNjcmF0
Y2hfZGlyKQogCi0gICAgZGVmIF9nZXRfY2FjaGUoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuX19j
YWNoZSBpcyBOb25lOgotICAgICAgICAgICAgc2VsZi5fX2NhY2hlID0gQ2FjaGUoKQotICAgICAg
ICByZXR1cm4gc2VsZi5fX2NhY2hlCi0gICAgZGVmIF9zZXRfY2FjaGUoc2VsZiwgY2FjaGUpOgot
ICAgICAgICBzZWxmLl9fY2FjaGUgPSBjYWNoZQotICAgIGNhY2hlID0gcHJvcGVydHkoX2dldF9j
YWNoZSwgX3NldF9jYWNoZSkKKyAgICAgICAgdXJsX3BhdGggPSB1cmxwYXJzZS51cmxzcGxpdCh1
cmwpWzJdCisgICAgICAgIHVybF9wYXRoID0gb3MucGF0aC5ub3JtcGF0aCh1cmxfcGF0aCkgICMg
UmVtb3ZlcyB0cmFpbGluZyBzbGFzaC4KKyAgICAgICAgdGFyZ2V0X2ZpbGVuYW1lID0gb3MucGF0
aC5iYXNlbmFtZSh1cmxfcGF0aCkKKyAgICAgICAgdGFyZ2V0X3BhdGggPSBvcy5wYXRoLmpvaW4o
c2NyYXRjaF9kaXIsIHRhcmdldF9maWxlbmFtZSkKIAotICAgIGRlZiBmaW5kX21vZHVsZShzZWxm
LCBmdWxsbmFtZSwgcGF0aD1Ob25lKToKLSAgICAgICAgIiIiLT4gc2VsZiBvciBOb25lLgorICAg
ICAgICBzdHJlYW0gPSBmaWxlKHRhcmdldF9wYXRoLCAid2IiKQorICAgICAgICBieXRlcyA9IHNl
bGYuX2Rvd25sb2FkX3RvX3N0cmVhbSh1cmwsIHN0cmVhbSkKKyAgICAgICAgc3RyZWFtLmNsb3Nl
KCkKIAotICAgICAgICBTZWFyY2ggZm9yIGEgbW9kdWxlIHNwZWNpZmllZCBieSAnZnVsbG5hbWUn
LiAnZnVsbG5hbWUnIG11c3QgYmUKLSAgICAgICAgdGhlIGZ1bGx5IHF1YWxpZmllZCAoZG90dGVk
KSBtb2R1bGUgbmFtZS4gSXQgcmV0dXJucyB0aGUKLSAgICAgICAgemlwaW1wb3J0ZXIgaW5zdGFu
Y2UgaXRzZWxmIGlmIHRoZSBtb2R1bGUgd2FzIGZvdW5kLCBvciBOb25lIGlmCi0gICAgICAgIGl0
IHdhc24ndC4gVGhlIG9wdGlvbmFsICdwYXRoJyBhcmd1bWVudCBpcyBpZ25vcmVkIC0tIGl0J3MK
LSAgICAgICAgdGhlcmUgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgaW1wb3J0ZXIgcHJvdG9j
b2wuIik7Ci0gICAgICAgICIiIgotICAgICAgICBfbG9nZ2VyLmRlYnVnKCJmaW5kX21vZHVsZSgl
cywgcGF0aD0lcykiICUgKGZ1bGxuYW1lLCBwYXRoKSkKLQotICAgICAgICBpZiBmdWxsbmFtZSBp
biBzZWxmLnBhY2thZ2VzOgotICAgICAgICAgICAgKHVybCwgemlwX3N1YnBhdGgpID0gc2VsZi5w
YWNrYWdlc1tmdWxsbmFtZV0KLSAgICAgICAgICAgIGZpbGVuYW1lID0gc2VsZi5jYWNoZS5nZXQo
dXJsKQotICAgICAgICAgICAgemlwX3BhdGggPSAiJXMvJXMiICUgKGZpbGVuYW1lLCB6aXBfc3Vi
cGF0aCkgaWYgemlwX3N1YnBhdGggZWxzZSBmaWxlbmFtZQotICAgICAgICAgICAgX2xvZ2dlci5k
ZWJ1ZygiZnVsbG5hbWU6ICVzIHVybDogJXMgcGF0aDogJXMgemlwX3BhdGg6ICVzIiAlIChmdWxs
bmFtZSwgdXJsLCBwYXRoLCB6aXBfcGF0aCkpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAg
ICAgICAgbG9hZGVyID0gemlwaW1wb3J0LnppcGltcG9ydGVyKHppcF9wYXRoKQotICAgICAgICAg
ICAgICAgIF9sb2dnZXIuZGVidWcoInJldHVybmluZzogJXMiICUgbG9hZGVyKQotICAgICAgICAg
ICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKLSAgICAgICAgICAgICAgICBfbG9nZ2VyLmV4Y2VwdGlv
bihlKQotICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgICAgICByZXR1cm4gbG9h
ZGVyCi0gICAgICAgIHJldHVybiBOb25lCi0KLSAgICBkZWYgYmluZChzZWxmLCBwYWNrYWdlX25h
bWUsIHVybCwgemlwX3N1YnBhdGgpOgotICAgICAgICBfbG9nZ2VyLmluZm8oImJpbmRpbmc6ICVz
IC0+ICVzIHN1YnBhdGg6ICVzIiAlIChwYWNrYWdlX25hbWUsIHVybCwgemlwX3N1YnBhdGgpKQot
ICAgICAgICBzZWxmLnBhY2thZ2VzW3BhY2thZ2VfbmFtZV0gPSAodXJsLCB6aXBfc3VicGF0aCkK
KyAgICAgICAgbWVzc2FnZSA9ICJEb3dubG9hZGVkICVzIGJ5dGVzLi4uIiAlIGJ5dGVzCisgICAg
ICAgIHNlbGYuX2xvZ190cmFuc2Zvcm0obWVzc2FnZSwgdXJsLCB0YXJnZXRfcGF0aCkKIAorICAg
ICAgICByZXR1cm4gdGFyZ2V0X3BhdGgKIAotaWYgX19uYW1lX189PSJfX21haW5fXyI6Ci0gICAg
aW1wb3J0IGxvZ2dpbmcKLSAgICAjbG9nZ2luZy5iYXNpY0NvbmZpZygpCi0gICAgbG9nZ2VyID0g
bG9nZ2luZy5nZXRMb2dnZXIoKQorICAgIGRlZiBfaW5zdGFsbChzZWxmLCBzY3JhdGNoX2Rpciwg
dGFyZ2V0X25hbWUsIHRhcmdldF9wYXRoLCB1cmwsCisgICAgICAgICAgICAgICAgIHVybF9zdWJw
YXRoKToKKyAgICAgICAgIiIiSW5zdGFsbCBhIHB5dGhvbiBwYWNrYWdlIGZyb20gYW4gVVJMLgog
Ci0gICAgY29uc29sZSA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcigpCi0gICAgY29uc29sZS5zZXRM
ZXZlbChsb2dnaW5nLkRFQlVHKQotICAgICMgc2V0IGEgZm9ybWF0IHdoaWNoIGlzIHNpbXBsZXIg
Zm9yIGNvbnNvbGUgdXNlCi0gICAgZm9ybWF0dGVyID0gbG9nZ2luZy5Gb3JtYXR0ZXIoJyUobmFt
ZSktMTJzOiAlKGxldmVsbmFtZSktOHMgJShtZXNzYWdlKXMnKQotICAgICMgdGVsbCB0aGUgaGFu
ZGxlciB0byB1c2UgdGhpcyBmb3JtYXQKLSAgICBjb25zb2xlLnNldEZvcm1hdHRlcihmb3JtYXR0
ZXIpCi0gICAgIyBhZGQgdGhlIGhhbmRsZXIgdG8gdGhlIHJvb3QgbG9nZ2VyCi0gICAgbG9nZ2Vy
LmFkZEhhbmRsZXIoY29uc29sZSkKLSAgICBsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5JTkZPKQor
ICAgICAgICBUaGlzIGludGVybmFsIG1ldGhvZCBvdmVyd3JpdGVzIHRoZSB0YXJnZXQgcGF0aCBp
ZiB0aGUgdGFyZ2V0CisgICAgICAgIHBhdGggYWxyZWFkeSBleGlzdHMuCiAKLSAgICBiaW5kKCJw
eW1hcmMiLCAiaHR0cDovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy8yLjUvcC9weW1hcmMvcHlt
YXJjLTIuMS1weTIuNS5lZ2ciKQorICAgICAgICAiIiIKKyAgICAgICAgcGF0aCA9IHNlbGYuX2Rv
d25sb2FkKHVybCwgc2NyYXRjaF9kaXIpCisgICAgICAgIHBhdGggPSBzZWxmLl9wcmVwYXJlX3Bh
Y2thZ2UocGF0aCwgc2NyYXRjaF9kaXIpCiAKLSAgICBpbXBvcnQgcHltYXJjCisgICAgICAgIGlm
IHVybF9zdWJwYXRoIGlzIE5vbmU6CisgICAgICAgICAgICBzb3VyY2VfcGF0aCA9IHBhdGgKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIHNvdXJjZV9wYXRoID0gb3MucGF0aC5qb2luKHBhdGgs
IHVybF9zdWJwYXRoKQorCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHRhcmdldF9wYXRoKToK
KyAgICAgICAgICAgIF9sb2cuZGVidWcoJ1JlZnJlc2hpbmcgaW5zdGFsbDogZGVsZXRpbmcgIiVz
Ii4nICUgdGFyZ2V0X3BhdGgpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHRhcmdldF9w
YXRoKToKKyAgICAgICAgICAgICAgICBzaHV0aWwucm10cmVlKHRhcmdldF9wYXRoKQorICAgICAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvcy5yZW1vdmUodGFyZ2V0X3BhdGgpCisKKyAg
ICAgICAgc2VsZi5fbG9nX3RyYW5zZm9ybSgiTW92aW5nIGludG8gcGxhY2UuLi4iLCBzb3VyY2Vf
cGF0aCwgdGFyZ2V0X3BhdGgpCisKKyAgICAgICAgIyBUaGUgc2h1dGlsLm1vdmUoKSBjb21tYW5k
IGNyZWF0ZXMgaW50ZXJtZWRpYXRlIGRpcmVjdG9yaWVzIGlmIHRoZXkKKyAgICAgICAgIyBkbyBu
b3QgZXhpc3QsIGJ1dCB3ZSBkbyBub3QgcmVseSBvbiB0aGlzIGJlaGF2aW9yIHNpbmNlIHdlCisg
ICAgICAgICMgbmVlZCB0byBjcmVhdGUgdGhlIF9faW5pdF9fLnB5IGZpbGUgYW55d2F5LgorICAg
ICAgICBzaHV0aWwubW92ZShzb3VyY2VfcGF0aCwgdGFyZ2V0X3BhdGgpCisKKyAgICAgICAgc2Vs
Zi5fd3JpdGVfdmVyc2lvbl9kb3dubG9hZGVkKHRhcmdldF9uYW1lLCB1cmwpCisKKyAgICBkZWYg
aW5zdGFsbChzZWxmLCB1cmwsIHNob3VsZF9yZWZyZXNoPUZhbHNlLCB0YXJnZXRfbmFtZT1Ob25l
LAorICAgICAgICAgICAgICAgIHVybF9zdWJwYXRoPU5vbmUpOgorICAgICAgICAiIiJJbnN0YWxs
IGEgcHl0aG9uIHBhY2thZ2UgZnJvbSBhbiBVUkwuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAg
ICB1cmw6IFRoZSBVUkwgZnJvbSB3aGljaCB0byBkb3dubG9hZCB0aGUgcGFja2FnZS4KKworICAg
ICAgICBPcHRpb25hbCBBcmdzOgorICAgICAgICAgIHNob3VsZF9yZWZyZXNoOiBBIGJvb2xlYW4g
dmFsdWUgb2Ygd2hldGhlciB0aGUgcGFja2FnZSBzaG91bGQgYmUKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgZG93bmxvYWRlZCBhZ2FpbiBpZiB0aGUgcGFja2FnZSBpcyBhbHJlYWR5IHByZXNl
bnQuCisgICAgICAgICAgdGFyZ2V0X25hbWU6IFRoZSBuYW1lIG9mIHRoZSBmb2xkZXIgb3IgZmls
ZSBpbiB0aGUgYXV0b2luc3RhbGxlcgorICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQgZGly
ZWN0b3J5IGF0IHdoaWNoIHRoZSBwYWNrYWdlIHNob3VsZCBiZQorICAgICAgICAgICAgICAgICAg
ICAgICBpbnN0YWxsZWQuICBEZWZhdWx0cyB0byB0aGUgYmFzZSBuYW1lIG9mIHRoZQorICAgICAg
ICAgICAgICAgICAgICAgICBVUkwgc3ViLXBhdGguICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIHBy
b3ZpZGVkIGlmCisgICAgICAgICAgICAgICAgICAgICAgIHRoZSBVUkwgc3ViLXBhdGggaXMgbm90
IHNwZWNpZmllZC4KKyAgICAgICAgICB1cmxfc3VicGF0aDogVGhlIHJlbGF0aXZlIHBhdGggb2Yg
dGhlIFVSTCBkaXJlY3RvcnkgdGhhdCBzaG91bGQKKyAgICAgICAgICAgICAgICAgICAgICAgYmUg
aW5zdGFsbGVkLiAgRGVmYXVsdHMgdG8gdGhlIGZ1bGwgZGlyZWN0b3J5LCBvcgorICAgICAgICAg
ICAgICAgICAgICAgICB0aGUgZW50aXJlIFVSTCBjb250ZW50cy4KIAotICAgIHByaW50IHB5bWFy
Yy5fX3ZlcnNpb25fXywgcHltYXJjLl9fZmlsZV9fCisgICAgICAgICIiIgorICAgICAgICBpZiB0
YXJnZXRfbmFtZSBpcyBOb25lOgorICAgICAgICAgICAgaWYgbm90IHVybF9zdWJwYXRoOgorICAg
ICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1RoZSAidGFyZ2V0X25hbWUiIHBhcmFtZXRl
ciBtdXN0IGJlICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwcm92aWRlZCBp
ZiB0aGUgInVybF9zdWJwYXRoIiBwYXJhbWV0ZXIgJworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImlzIG5vdCBwcm92aWRlZC4iKQorICAgICAgICAgICAgIyBSZW1vdmUgYW55IHRy
YWlsaW5nIHNsYXNoZXMuCisgICAgICAgICAgICB1cmxfc3VicGF0aCA9IG9zLnBhdGgubm9ybXBh
dGgodXJsX3N1YnBhdGgpCisgICAgICAgICAgICB0YXJnZXRfbmFtZSA9IG9zLnBhdGguYmFzZW5h
bWUodXJsX3N1YnBhdGgpCisKKyAgICAgICAgdGFyZ2V0X3BhdGggPSBvcy5wYXRoLmpvaW4oc2Vs
Zi5fdGFyZ2V0X2RpciwgdGFyZ2V0X25hbWUpCisgICAgICAgIGlmIChub3Qgc2hvdWxkX3JlZnJl
c2gpIGFuZCBzZWxmLl9pc19kb3dubG9hZGVkKHRhcmdldF9uYW1lLCB1cmwpOgorICAgICAgICAg
ICAgX2xvZy5kZWJ1ZygnVVJMIGFscmVhZHkgZG93bmxvYWRlZDogc2tpcHBpbmcgIiVzIi4nCisg
ICAgICAgICAgICAgICAgICAgICAgICUgdGFyZ2V0X3BhdGgpCisgICAgICAgICAgICByZXR1cm4K
KworICAgICAgICBzZWxmLl9sb2dfdHJhbnNmb3JtKCJTdGFydGluZyAlcyBpbnN0YWxsLi4uIiAl
IHRhcmdldF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybCwgdGFyZ2V0X3Bh
dGgpCisKKyAgICAgICAgIyBUaGUgc2NyYXRjaCBkaXJlY3RvcnkgaXMgd2hlcmUgd2Ugd2lsbCBk
b3dubG9hZCBhbmQgcHJlcGFyZQorICAgICAgICAjIGZpbGVzIHNwZWNpZmljIHRvIHRoaXMgaW5z
dGFsbCB1bnRpbCB0aGV5IGFyZSByZWFkeSB0byBtb3ZlCisgICAgICAgICMgaW50byBwbGFjZS4K
KyAgICAgICAgc2NyYXRjaF9kaXIgPSBzZWxmLl9jcmVhdGVfc2NyYXRjaF9kaXJlY3RvcnkodGFy
Z2V0X25hbWUpCiAKLSAgICBhc3NlcnQgcHltYXJjLl9fdmVyc2lvbl9fPT0iMi4xIgorICAgICAg
ICB0cnk6CisgICAgICAgICAgICBzZWxmLl9pbnN0YWxsKHRhcmdldF9uYW1lPXRhcmdldF9uYW1l
LAorICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfcGF0aD10YXJnZXRfcGF0aCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2NyYXRjaF9kaXI9c2NyYXRjaF9kaXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVybD11cmwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVy
bF9zdWJwYXRoPXVybF9zdWJwYXRoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgX2xv
Zy5kZWJ1ZygnQ2xlYW5pbmcgdXA6IGRlbGV0aW5nICIlcyIuJyAlIHNjcmF0Y2hfZGlyKQorICAg
ICAgICAgICAgc2h1dGlsLnJtdHJlZShzY3JhdGNoX2RpcikKKyAgICAgICAgX2xvZy5pbmZvKCdB
dXRvLWluc3RhbGxlZCBwYWNrYWdlICIlcyIgYXQ6ICIlcyIuJworICAgICAgICAgICAgICAgICAg
JSAodGFyZ2V0X25hbWUsIHRhcmdldF9wYXRoKSkKIAotICAgIGQgPSBfZ2V0SW1wb3J0ZXIoKS5j
YWNoZS5kaXJlY3RvcnkKLSAgICBhc3NlcnQgZCBpbiBweW1hcmMuX19maWxlX18sICInJXMnIG5v
dCBmb3VuZCBpbiBweW1hcmMuX19maWxlX18gKCVzKSIgJSAoZCwgcHltYXJjLl9fZmlsZV9fKQog
Ci0gICAgIyBDYW4gbm93IGFsc28gYmluZCB0byBub24gdG9wIGxldmVsIHBhY2thZ2VzLiBUaGUg
cGFja2FnZXMKLSAgICAjIGxlYWRpbmcgdXAgdG8gdGhlIHBhY2thZ2UgYmVpbmcgYm91bmQgd2ls
bCBuZWVkIHRvIGJlIGRlZmluZWQKLSAgICAjIGhvd2V2ZXIuCi0gICAgIwotICAgICMgYmluZCgi
cmRmLnBsdWdpbnMuc3RvcmVzLm1lbW9yeSIsIAotICAgICMgICAgICAiaHR0cDovL3B5cGkucHl0
aG9uLm9yZy9wYWNrYWdlcy8yLjUvci9yZGYucGx1Z2lucy5zdG9yZXMubWVtZW9yeS9yZGYucGx1
Z2lucy5zdG9yZXMubWVtb3J5LTAuOWEtcHkyLjUuZWdnIikKLSAgICAjCi0gICAgIyBmcm9tIHJk
Zi5wbHVnaW5zLnN0b3Jlcy5tZW1vcnkgaW1wb3J0IE1lbW9yeQoraWYgX19uYW1lX189PSJfX21h
aW5fXyI6CiAKKyAgICAjIENvbmZpZ3VyZSB0aGUgYXV0b2luc3RhbGwgbG9nZ2VyIHRvIGxvZyBE
RUJVRyBtZXNzYWdlcyBmb3IKKyAgICAjIGRldmVsb3BtZW50IHRlc3RpbmcgcHVycG9zZXMuCisg
ICAgY29uc29sZSA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcigpCisgICAgZm9ybWF0dGVyID0gbG9n
Z2luZy5Gb3JtYXR0ZXIoJyUobmFtZSlzOiBbJShsZXZlbG5hbWUpc10gJShtZXNzYWdlKXMnKQor
ICAgIGNvbnNvbGUuc2V0Rm9ybWF0dGVyKGZvcm1hdHRlcikKKyAgICBfbG9nLmFkZEhhbmRsZXIo
Y29uc29sZSkKKyAgICBfbG9nLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCisKKyAgICAjIFVzZSBh
IG1vcmUgdmlzaWJsZSB0ZW1wIGRpcmVjdG9yeSBmb3IgZGVidWcgcHVycG9zZXMuCisgICAgdGhp
c19kaXIgPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pCisgICAgdGFyZ2V0X2RpciA9IG9zLnBh
dGguam9pbih0aGlzX2RpciwgImF1dG9pbnN0YWxsZWQiKQorICAgIHRlbXBfZGlyID0gb3MucGF0
aC5qb2luKHRhcmdldF9kaXIsICJUZW1wIikKKworICAgIGluc3RhbGxlciA9IEF1dG9JbnN0YWxs
ZXIodGFyZ2V0X2Rpcj10YXJnZXRfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGVtcF9kaXI9dGVtcF9kaXIpCisKKyAgICBpbnN0YWxsZXIuaW5zdGFsbChzaG91bGRfcmVmcmVz
aD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfbmFtZT0icGVwOC5weSIsCisg
ICAgICAgICAgICAgICAgICAgICAgdXJsPSJodHRwOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2Vz
L3NvdXJjZS9wL3BlcDgvcGVwOC0wLjUuMC50YXIuZ3ojbWQ1PTUxMmE4MThhZjk5NzkyOTBjZDYx
OWNjZThlOWMyZTJiIiwKKyAgICAgICAgICAgICAgICAgICAgICB1cmxfc3VicGF0aD0icGVwOC0w
LjUuMC9wZXA4LnB5IikKKyAgICBpbnN0YWxsZXIuaW5zdGFsbChzaG91bGRfcmVmcmVzaD1GYWxz
ZSwKKyAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfbmFtZT0ibWVjaGFuaXplIiwKKyAgICAg
ICAgICAgICAgICAgICAgICB1cmw9Imh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvc291
cmNlL20vbWVjaGFuaXplL21lY2hhbml6ZS0wLjEuMTEuemlwIiwKKyAgICAgICAgICAgICAgICAg
ICAgICB1cmxfc3VicGF0aD0ibWVjaGFuaXplIikKIAo=
</data>
<flag name="commit-queue"
          id="31948"
          type_id="3"
          status="-"
          setter="cjerdonek"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49283</attachid>
            <date>2010-02-23 06:09:41 -0800</date>
            <delta_ts>2010-03-28 19:40:54 -0700</delta_ts>
            <desc>Proposed patch 4</desc>
            <filename>_patch-35163-4.diff</filename>
            <type>text/plain</type>
            <size>27124</size>
            <attacher name="Chris Jerdonek">cjerdonek</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBlOTNmZmRhLi4zNDQ2MWUzIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTAtMDIt
MjEgIENocmlzIEplcmRvbmVrICA8Y2plcmRvbmVrQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmV3cm90ZSBhdXRvaW5zdGFsbC5w
eSB0byBzdXBwb3J0IHVuemlwcGluZyBhbmQgZXh0cmFjdGluZworICAgICAgICAqLnppcCBhbmQg
Ki50YXIuZ3ogZmlsZXMgYWZ0ZXIgZG93bmxvYWQgYW5kIGNvcHlpbmcgdG8gYQorICAgICAgICBn
aXZlbiBsb2NhdGlvbi4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MzUxNjMKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvX19pbml0X18ucHk6
CisgICAgICAgICAgLSBVcGRhdGVkIHRoZSBhdXRvaW5zdGFsbCBsaW5lcyB0byB1c2UgdGhlIG5l
dyBhdXRvaW5zdGFsbCBtZXRob2RzLgorICAgICAgICAgIC0gQWRkZWQgcGVwOC5weSB0byBsaXN0
IG9mIGF1dG8taW5zdGFsbGVkIHBhY2thZ2VzLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9idWd6aWxsYS5weToKKyAgICAgICAgICAtIFVwZGF0ZWQgbWVjaGFuaXplIGltcG9ydCBwYXRo
LgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9uZXR3b3JrdHJhbnNhY3Rpb24ucHk6Cisg
ICAgICAgICAgLSBVcGRhdGVkIG1lY2hhbml6ZSBpbXBvcnQgcGF0aC4KKworICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvbmV0d29ya3RyYW5zYWN0aW9uX3VuaXR0ZXN0LnB5OgorICAgICAgICAg
IC0gVXBkYXRlZCBtZWNoYW5pemUgaW1wb3J0IHBhdGguCisKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L3N0YXR1c3NlcnZlci5weToKKyAgICAgICAgICAtIFVwZGF0ZWQgbWVjaGFuaXplIGlt
cG9ydCBwYXRoLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L2F1dG9p
bnN0YWxsLnB5OgorICAgICAgICAgIC0gQWRkZWQgQXV0b0luc3RhbGxlciBjbGFzcy4KKyAgICAg
ICAgICAtIFJlbW92ZWQgb2xkICJiaW5kIi1hcHByb2FjaCBjb2RlLgorICAgICAgICAgIC0gVXBk
YXRlZCBfX21haW5fXyB3aXRoIHNhbXBsZSB1c2FnZS4KKwogMjAxMC0wMi0yMCAgQ2hyaXMgSmVy
ZG9uZWsgIDxjamVyZG9uZWtAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFt
IEJhcnRoLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9fX2luaXRf
Xy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvX19pbml0X18ucHkKaW5kZXggZWZh
OGM3YS4uN2Y2MDM5YSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9f
X2luaXRfXy5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L19faW5pdF9fLnB5
CkBAIC0xLDggKzEsMjMgQEAKICMgUmVxdWlyZWQgZm9yIFB5dGhvbiB0byBzZWFyY2ggdGhpcyBk
aXJlY3RvcnkgZm9yIG1vZHVsZSBmaWxlcwogCi1pbXBvcnQgdGhpcmRwYXJ0eS5hdXRvaW5zdGFs
bCBhcyBhdXRvaW5zdGFsbAoraW1wb3J0IGxvZ2dpbmcKKworZnJvbSB0aGlyZHBhcnR5LmF1dG9p
bnN0YWxsIGltcG9ydCBBdXRvSW5zdGFsbGVyCisKKyMgV2UgcHV0IGF1dG8taW5zdGFsbGVkIHRo
aXJkLXBhcnR5IG1vZHVsZXMgaGVyZToKKyMKKyMgICAgIHdlYmtpdHB5L3RoaXJkcGFydHkvYXV0
b2luc3RhbGxlZAorIworIyBXZSBjYW4gdXNlIHRoZSBkZWZhdWx0ICJ0YXJnZXRfZGlyIiBwYXJh
bWV0ZXIgc2luY2UgYXV0b2luc3RhbGwucHkgaXMKKyMgYWxyZWFkeSBsb2NhdGVkIGluc2lkZSB3
ZWJraXRweS90aGlyZHBhcnR5LgoraW5zdGFsbGVyID0gQXV0b0luc3RhbGxlcigpCiAKICMgTGlz
dCBvdXIgdGhpcmQtcGFydHkgbGlicmFyeSBkZXBlbmRlbmNpZXMgaGVyZSBhbmQgd2hlcmUgdGhl
eSBjYW4gYmUKICMgZG93bmxvYWRlZC4KLWF1dG9pbnN0YWxsLmJpbmQoIkNsaWVudEZvcm0iLCAi
aHR0cDovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2UvQy9DbGllbnRGb3JtL0NsaWVu
dEZvcm0tMC4yLjEwLnppcCIsICJDbGllbnRGb3JtLTAuMi4xMCIpCi1hdXRvaW5zdGFsbC5iaW5k
KCJtZWNoYW5pemUiLCAiaHR0cDovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2UvbS9t
ZWNoYW5pemUvbWVjaGFuaXplLTAuMS4xMS56aXAiLCAibWVjaGFuaXplLTAuMS4xMSIpCitpbnN0
YWxsZXIuaW5zdGFsbCh1cmw9Imh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvc291cmNl
L20vbWVjaGFuaXplL21lY2hhbml6ZS0wLjEuMTEuemlwIiwKKyAgICAgICAgICAgICAgICAgIHVy
bF9zdWJwYXRoPSJtZWNoYW5pemUiKQoraW5zdGFsbGVyLmluc3RhbGwodXJsPSJodHRwOi8vcHlw
aS5weXRob24ub3JnL3BhY2thZ2VzL3NvdXJjZS9DL0NsaWVudEZvcm0vQ2xpZW50Rm9ybS0wLjIu
MTAuemlwIiwKKyAgICAgICAgICAgICAgICAgIHVybF9zdWJwYXRoPSJDbGllbnRGb3JtLnB5IikK
K2luc3RhbGxlci5pbnN0YWxsKHVybD0iaHR0cDovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9z
b3VyY2UvcC9wZXA4L3BlcDgtMC41LjAudGFyLmd6I21kNT01MTJhODE4YWY5OTc5MjkwY2Q2MTlj
Y2U4ZTljMmUyYiIsCisgICAgICAgICAgICAgICAgICB1cmxfc3VicGF0aD0icGVwOC0wLjUuMC9w
ZXA4LnB5IikKKwpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9idWd6
aWxsYS5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvYnVnemlsbGEucHkKaW5kZXgg
MDBlNjk0MC4uNWEyMTcyOCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9idWd6aWxsYS5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2J1Z3ppbGxh
LnB5CkBAIC00NSw3ICs0NSw3IEBAIGZyb20gd2Via2l0cHkudXNlciBpbXBvcnQgVXNlcgogIyBz
byB0aGlzIGltcG9ydCBzaG91bGQgYWx3YXlzIHN1Y2NlZWQuCiBmcm9tIHdlYmtpdHB5LnRoaXJk
cGFydHkuQmVhdXRpZnVsU291cCBpbXBvcnQgQmVhdXRpZnVsU291cCwgU291cFN0cmFpbmVyCiAK
LWZyb20gbWVjaGFuaXplIGltcG9ydCBCcm93c2VyCitmcm9tIHdlYmtpdHB5LnRoaXJkcGFydHku
YXV0b2luc3RhbGxlZC5tZWNoYW5pemUgaW1wb3J0IEJyb3dzZXIKIAogCiBkZWYgcGFyc2VfYnVn
X2lkKG1lc3NhZ2UpOgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9u
ZXR3b3JrdHJhbnNhY3Rpb24ucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L25ldHdv
cmt0cmFuc2FjdGlvbi5weQppbmRleCA2NWVhMjdkLi5hNGM5MzAwIDEwMDY0NAotLS0gYS9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L25ldHdvcmt0cmFuc2FjdGlvbi5weQorKysgYi9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L25ldHdvcmt0cmFuc2FjdGlvbi5weQpAQCAtMjgsNyAr
MjgsNyBAQAogCiBpbXBvcnQgdGltZQogCi1mcm9tIG1lY2hhbml6ZSBpbXBvcnQgSFRUUEVycm9y
Citmcm9tIHdlYmtpdHB5LnRoaXJkcGFydHkuYXV0b2luc3RhbGxlZC5tZWNoYW5pemUgaW1wb3J0
IEhUVFBFcnJvcgogZnJvbSB3ZWJraXRweS53ZWJraXRfbG9nZ2luZyBpbXBvcnQgbG9nCiAKIApk
aWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9uZXR3b3JrdHJhbnNhY3Rp
b25fdW5pdHRlc3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L25ldHdvcmt0cmFu
c2FjdGlvbl91bml0dGVzdC5weQppbmRleCAzY2ZmZTAyLi5mN2NlYmQ4IDEwMDY0NAotLS0gYS9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L25ldHdvcmt0cmFuc2FjdGlvbl91bml0dGVzdC5w
eQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L25ldHdvcmt0cmFuc2FjdGlvbl91
bml0dGVzdC5weQpAQCAtMjgsNyArMjgsNyBAQAogCiBpbXBvcnQgdW5pdHRlc3QKIAotZnJvbSBt
ZWNoYW5pemUgaW1wb3J0IEhUVFBFcnJvcgorZnJvbSB3ZWJraXRweS50aGlyZHBhcnR5LmF1dG9p
bnN0YWxsZWQubWVjaGFuaXplIGltcG9ydCBIVFRQRXJyb3IKIGZyb20gd2Via2l0cHkubmV0d29y
a3RyYW5zYWN0aW9uIGltcG9ydCBOZXR3b3JrVHJhbnNhY3Rpb24sIE5ldHdvcmtUaW1lb3V0CiAK
IGNsYXNzIE5ldHdvcmtUcmFuc2FjdGlvblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgpkaWZmIC0t
Z2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdGF0dXNzZXJ2ZXIucHkgYi9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0YXR1c3NlcnZlci5weQppbmRleCA5YTU2NzAyLi4z
OTg4MmVhIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0YXR1c3Nl
cnZlci5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0YXR1c3NlcnZlci5w
eQpAQCAtMjgsNyArMjgsNyBAQAogCiBmcm9tIHdlYmtpdHB5Lm5ldHdvcmt0cmFuc2FjdGlvbiBp
bXBvcnQgTmV0d29ya1RyYW5zYWN0aW9uCiBmcm9tIHdlYmtpdHB5LndlYmtpdF9sb2dnaW5nIGlt
cG9ydCBsb2cKLWZyb20gbWVjaGFuaXplIGltcG9ydCBCcm93c2VyCitmcm9tIHdlYmtpdHB5LnRo
aXJkcGFydHkuYXV0b2luc3RhbGxlZC5tZWNoYW5pemUgaW1wb3J0IEJyb3dzZXIKIAogIyBXZWJL
aXQgaW5jbHVkZXMgYSBidWlsdCBjb3B5IG9mIEJlYXV0aWZ1bFNvdXAgaW4gU2NyaXB0cy93ZWJr
aXRweS90aGlyZHBhcnR5CiAjIHNvIHRoaXMgaW1wb3J0IHNob3VsZCBhbHdheXMgc3VjY2VlZC4K
ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9hdXRv
aW5zdGFsbC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9hdXRv
aW5zdGFsbC5weQppbmRleCA0NjdlNmI0Li5kODI5YTA2IDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvYXV0b2luc3RhbGwucHkKKysrIGIvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L2F1dG9pbnN0YWxsLnB5CkBAIC0xLDUg
KzEsNiBAQAogIyBDb3B5cmlnaHQgKGMpIDIwMDksIERhbmllbCBLcmVjaCBBbGwgcmlnaHRzIHJl
c2VydmVkLgotIyAKKyMgQ29weXJpZ2h0IChDKSAyMDEwIENocmlzIEplcmRvbmVrIChjamVyZG9u
ZWtAd2Via2l0Lm9yZykKKyMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKICMgbWV0OgpA
QCAtMTQ3LDg2ICsxNDgsMjU4IEBAIGZyb20gX19mdXR1cmVfXyBpbXBvcnQgd2l0aF9zdGF0ZW1l
bnQKIF9fdmVyc2lvbl9fID0gIjAuMiIKIF9fZG9jZm9ybWF0X18gPSAicmVzdHJ1Y3R1cmVkdGV4
dCBlbiIKIAotaW1wb3J0IG9zCitpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG5ldworaW1wb3J0IG9z
CitpbXBvcnQgc2h1dGlsCiBpbXBvcnQgc3lzCi1pbXBvcnQgdXJsbGliCi1pbXBvcnQgbG9nZ2lu
ZworaW1wb3J0IHRhcmZpbGUKIGltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHVybGxpYgoraW1wb3J0
IHVybHBhcnNlCitpbXBvcnQgemlwZmlsZQogaW1wb3J0IHppcGltcG9ydAogCi1fbG9nZ2VyID0g
bG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoImF1
dG9pbnN0YWxsIikKIAorY2xhc3MgQXV0b0luc3RhbGxlcihvYmplY3QpOgogCi1faW1wb3J0ZXIg
PSBOb25lCisgICAgIiIiU3VwcG9ydHMgYXV0b21hdGljYWxseSBpbnN0YWxsaW5nIFB5dGhvbiBw
YWNrYWdlcyBmcm9tIGFuIFVSTC4KIAotZGVmIF9nZXRJbXBvcnRlcigpOgotICAgIGdsb2JhbCBf
aW1wb3J0ZXIKLSAgICBpZiBfaW1wb3J0ZXIgaXMgTm9uZToKLSAgICAgICAgX2ltcG9ydGVyID0g
SW1wb3J0ZXIoKQotICAgICAgICBzeXMubWV0YV9wYXRoLmFwcGVuZChfaW1wb3J0ZXIpCi0gICAg
cmV0dXJuIF9pbXBvcnRlcgorICAgIFN1cHBvcnRzIHVuY29tcHJlc3NlZCBmaWxlcywgLnRhci5n
eiwgYW5kIC56aXAgZm9ybWF0cy4KIAotZGVmIGJpbmQocGFja2FnZV9uYW1lLCB1cmwsIHppcF9z
dWJwYXRoPU5vbmUpOgotICAgICIiImJpbmQgYSB0b3AgbGV2ZWwgcGFja2FnZSBuYW1lIHRvIGEg
VVJMLgorICAgIEJhc2ljIHVzYWdlOgogCi0gICAgVGhlIHBhY2thZ2UgbmFtZSBzaG91bGQgYmUg
YSBwYWNrYWdlIG5hbWUgYW5kIHRoZSB1cmwgc2hvdWxkIGJlIGEKLSAgICB1cmwgdG8gc29tZXRo
aW5nIHRoYXQgY2FuIGJlIGltcG9ydGVkIHVzaW5nIHRoZSB6aXBpbXBvcnRlci4KKyAgICBpbnN0
YWxsZXIgPSBBdXRvSW5zdGFsbGVyKCkKKworICAgIGluc3RhbGxlci5pbnN0YWxsKHVybD0iaHR0
cDovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2UvcC9wZXA4L3BlcDgtMC41LjAudGFy
Lmd6I21kNT01MTJhODE4YWY5OTc5MjkwY2Q2MTljY2U4ZTljMmUyYiIsCisgICAgICAgICAgICAg
ICAgICAgICAgdXJsX3N1YnBhdGg9InBlcDgtMC41LjAvcGVwOC5weSIpCisgICAgaW5zdGFsbGVy
Lmluc3RhbGwodXJsPSJodHRwOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2VzL3NvdXJjZS9tL21l
Y2hhbml6ZS9tZWNoYW5pemUtMC4xLjExLnppcCIsCisgICAgICAgICAgICAgICAgICAgICAgdXJs
X3N1YnBhdGg9Im1lY2hhbml6ZSIpCiAKLSAgICBPcHRpb25hbCB6aXBfc3VicGF0aCBwYXJhbWV0
ZXIgYWxsb3dzIHNlYXJjaGluZyBmb3IgbW9kdWxlcwotICAgIGJlbG93IHRoZSByb290IGxldmVs
IG9mIHRoZSB6aXAgZmlsZS4KICAgICAiIiIKLSAgICBfZ2V0SW1wb3J0ZXIoKS5iaW5kKHBhY2th
Z2VfbmFtZSwgdXJsLCB6aXBfc3VicGF0aCkKIAorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhcHBl
bmRfdG9fc2VhcmNoX3BhdGg9RmFsc2UsIG1ha2VfcGFja2FnZT1UcnVlLAorICAgICAgICAgICAg
ICAgICB0YXJnZXRfZGlyPU5vbmUsIHRlbXBfZGlyPU5vbmUpOgorICAgICAgICAiIiJDcmVhdGUg
YW4gQXV0b0luc3RhbGxlciBpbnN0YW5jZSwgYW5kIHNldCB1cCB0aGUgdGFyZ2V0IGRpcmVjdG9y
eS4KKworICAgICAgICBBcmdzOgorICAgICAgICAgIGFwcGVuZF90b19zZWFyY2hfcGF0aDogQSBi
b29sZWFuIHZhbHVlIG9mIHdoZXRoZXIgdG8gYXBwZW5kIHRoZQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGFyZ2V0IGRpcmVjdG9yeSB0byB0aGUgc3lzLnBhdGggc2VhcmNoIHBh
dGguCisgICAgICAgICAgbWFrZV9wYWNrYWdlOiBBIGJvb2xlYW4gdmFsdWUgb2Ygd2hldGhlciB0
byBtYWtlIHRoZSB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBhIHBh
Y2thZ2UuICBUaGlzIGFkZHMgYW4gX19pbml0X18ucHkgZmlsZQorICAgICAgICAgICAgICAgICAg
ICAgICAgdG8gdGhlIHRhcmdldCBkaXJlY3RvcnkgLS0gYWxsb3dpbmcgcGFja2FnZXMgYW5kCisg
ICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVzIHdpdGhpbiB0aGUgdGFyZ2V0IGRpcmVjdG9y
eSB0byBiZSBpbXBvcnRlZAorICAgICAgICAgICAgICAgICAgICAgICAgZXhwbGljaXRseSB1c2lu
ZyBkb3R0ZWQgbW9kdWxlIG5hbWVzLgorICAgICAgICAgIHRhcmdldF9kaXI6IFRoZSBkaXJlY3Rv
cnkgcGF0aCB0byB3aGljaCBwYWNrYWdlcyBzaG91bGQgYmUgaW5zdGFsbGVkLgorICAgICAgICAg
ICAgICAgICAgICAgIERlZmF1bHRzIHRvIGEgc3ViZGlyZWN0b3J5IG9mIHRoZSBmb2xkZXIgY29u
dGFpbmluZworICAgICAgICAgICAgICAgICAgICAgIHRoaXMgbW9kdWxlIGNhbGxlZCAiYXV0b2lu
c3RhbGxlZCIuCisgICAgICAgICAgdGVtcF9kaXI6IFRoZSBkaXJlY3RvcnkgcGF0aCB0byB1c2Ug
Zm9yIGFueSB0ZW1wb3JhcnkgZmlsZXMKKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVkIHdo
aWxlIGRvd25sb2FkaW5nLCB1bnppcHBpbmcsIGFuZCBleHRyYWN0aW5nCisgICAgICAgICAgICAg
ICAgICAgIHBhY2thZ2VzIHRvIGluc3RhbGwuICBEZWZhdWx0cyB0byBhIHN0YW5kYXJkIHRlbXBv
cmFyeQorICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbiBnZW5lcmF0ZWQgYnkgdGhlIHRlbXBm
aWxlIG1vZHVsZS4gIFRoaXMKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyIHNob3VsZCBu
b3JtYWxseSBiZSB1c2VkIG9ubHkgZm9yIGRldmVsb3BtZW50CisgICAgICAgICAgICAgICAgICAg
IHRlc3RpbmcuCiAKLWNsYXNzIENhY2hlKG9iamVjdCk6CisgICAgICAgICIiIgorICAgICAgICBp
ZiB0YXJnZXRfZGlyIGlzIE5vbmU6CisgICAgICAgICAgICB0aGlzX2RpciA9IG9zLnBhdGguZGly
bmFtZShfX2ZpbGVfXykKKyAgICAgICAgICAgIHRhcmdldF9kaXIgPSBvcy5wYXRoLmpvaW4odGhp
c19kaXIsICJhdXRvaW5zdGFsbGVkIikKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkaXJlY3Rv
cnk9Tm9uZSk6Ci0gICAgICAgIGlmIGRpcmVjdG9yeSBpcyBOb25lOgotICAgICAgICAgICAgIyBE
ZWZhdWx0IHRvIHB1dHRpbmcgdGhlIGNhY2hlIGRpcmVjdG9yeSBpbiB0aGUgc2FtZSBkaXJlY3Rv
cnkKLSAgICAgICAgICAgICMgYXMgdGhpcyBmaWxlLgotICAgICAgICAgICAgY29udGFpbmluZ19k
aXJlY3RvcnkgPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pCi0gICAgICAgICAgICBkaXJlY3Rv
cnkgPSBvcy5wYXRoLmpvaW4oY29udGFpbmluZ19kaXJlY3RvcnksICJhdXRvaW5zdGFsbC5jYWNo
ZS5kIik7CisgICAgICAgICMgRW5zdXJlIHRoYXQgdGhlIHRhcmdldCBkaXJlY3RvcnkgZXhpc3Rz
LgorICAgICAgICBzZWxmLl9zZXRfdXBfdGFyZ2V0X2Rpcih0YXJnZXRfZGlyLCBhcHBlbmRfdG9f
c2VhcmNoX3BhdGgsIG1ha2VfcGFja2FnZSkKIAotICAgICAgICBzZWxmLmRpcmVjdG9yeSA9IGRp
cmVjdG9yeQorICAgICAgICBzZWxmLl90YXJnZXRfZGlyID0gdGFyZ2V0X2RpcgorICAgICAgICBz
ZWxmLl90ZW1wX2RpciA9IHRlbXBfZGlyCisKKyAgICBkZWYgX2xvZ190cmFuc2ZlcihzZWxmLCBt
ZXNzYWdlLCBzb3VyY2UsIHRhcmdldCk6CisgICAgICAgICIiIkxvZyBhIGRlYnVnIG1lc3NhZ2Ug
dGhhdCBpbnZvbHZlcyBhIHNvdXJjZSBhbmQgdGFyZ2V0LiIiIgorICAgICAgICBfbG9nLmRlYnVn
KCIlc1xuIgorICAgICAgICAgICAgICAgICAgICcgRnJvbTogIiVzIlxuJworICAgICAgICAgICAg
ICAgICAgICcgICBUbzogIiVzIicgJSAobWVzc2FnZSwgc291cmNlLCB0YXJnZXQpKQorCisgICAg
ZGVmIF93cml0ZV9maWxlKHNlbGYsIHBhdGgsIHRleHQpOgorICAgICAgICAiIiJDcmVhdGUgYSBm
aWxlIGF0IHRoZSBnaXZlbiBwYXRoIHdpdGggZ2l2ZW4gdGV4dC4KKworICAgICAgICBUaGlzIG1l
dGhvZCBvdmVyd3JpdGVzIGFueSBleGlzdGluZyBmaWxlLgorCisgICAgICAgICIiIgorICAgICAg
ICBfbG9nLmRlYnVnKCdXcml0aW5nIGZpbGU6ICIlcyInICUgcGF0aCkKKyAgICAgICAgZmlsZSA9
IG9wZW4ocGF0aCwgInciKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBpZiBub3Qgb3MucGF0
aC5leGlzdHMoc2VsZi5kaXJlY3RvcnkpOgotICAgICAgICAgICAgICAgIHNlbGYuX2NyZWF0ZV9j
YWNoZV9kaXJlY3RvcnkoKQotICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlcnI6Ci0gICAgICAg
ICAgICBfbG9nZ2VyLmV4Y2VwdGlvbihlcnIpCi0gICAgICAgICAgICBzZWxmLmNhY2hlX2RpcmVj
dHJ5ID0gdGVtcGZpbGUubWtkdGVtcCgpCi0gICAgICAgIF9sb2dnZXIuaW5mbygiVXNpbmcgY2Fj
aGUgZGlyZWN0b3J5ICclcycuIiAlIHNlbGYuZGlyZWN0b3J5KQotICAgIAotICAgIGRlZiBfY3Jl
YXRlX2NhY2hlX2RpcmVjdG9yeShzZWxmKToKLSAgICAgICAgX2xvZ2dlci5kZWJ1ZygiQ3JlYXRp
bmcgY2FjaGUgZGlyZWN0b3J5ICclcycuIiAlIHNlbGYuZGlyZWN0b3J5KQotICAgICAgICBvcy5t
a2RpcihzZWxmLmRpcmVjdG9yeSkKLSAgICAgICAgcmVhZG1lX3BhdGggPSBvcy5wYXRoLmpvaW4o
c2VsZi5kaXJlY3RvcnksICJSRUFETUUiKQotICAgICAgICB3aXRoIG9wZW4ocmVhZG1lX3BhdGgs
ICJ3IikgYXMgZjoKLSAgICAgICAgICAgIGYud3JpdGUoIlRoaXMgZGlyZWN0b3J5IHdhcyBhdXRv
LWdlbmVyYXRlZCBieSAnJXMnLlxuIgotICAgICAgICAgICAgICAgICAgICAiSXQgaXMgc2FmZSB0
byBkZWxldGUuXG4iICUgX19maWxlX18pCi0KLSAgICBkZWYgZ2V0KHNlbGYsIHVybCk6Ci0gICAg
ICAgIF9sb2dnZXIuaW5mbygiR2V0dGluZyAnJXMnIGZyb20gY2FjaGUuIiAlIHVybCkKLSAgICAg
ICAgZmlsZW5hbWUgPSB1cmwucnNwbGl0KCIvIilbLTFdCi0KLSAgICAgICAgIyBzbyB0aGF0IHNv
dXJjZSB1cmwgaXMgc2lnbmlmaWNhbnQgaW4gZGV0ZXJtaW5pbmcgY2FjaGUgaGl0cwotICAgICAg
ICBkID0gb3MucGF0aC5qb2luKHNlbGYuZGlyZWN0b3J5LCAiJXMiICUgaGFzaCh1cmwpKQotICAg
ICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZCk6Ci0gICAgICAgICAgICBvcy5ta2RpcihkKQot
Ci0gICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKGQsIGZpbGVuYW1lKSAKLQotICAgICAg
ICBpZiBvcy5wYXRoLmV4aXN0cyhmaWxlbmFtZSk6Ci0gICAgICAgICAgICBfbG9nZ2VyLmRlYnVn
KCIuLi4gYWxyZWFkeSBjYWNoZWQgaW4gZmlsZSAnJXMnLiIgJSBmaWxlbmFtZSkKKyAgICAgICAg
ICAgIGZpbGUud3JpdGUodGV4dCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZpbGUu
Y2xvc2UoKQorCisgICAgZGVmIF9zZXRfdXBfdGFyZ2V0X2RpcihzZWxmLCB0YXJnZXRfZGlyLCBh
cHBlbmRfdG9fc2VhcmNoX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX3Bh
Y2thZ2UpOgorICAgICAgICAiIiJTZXQgdXAgYSB0YXJnZXQgZGlyZWN0b3J5LgorCisgICAgICAg
IEFyZ3M6CisgICAgICAgICAgdGFyZ2V0X2RpcjogVGhlIHBhdGggdG8gdGhlIHRhcmdldCBkaXJl
Y3RvcnkgdG8gc2V0IHVwLgorICAgICAgICAgIGFwcGVuZF90b19zZWFyY2hfcGF0aDogQSBib29s
ZWFuIHZhbHVlIG9mIHdoZXRoZXIgdG8gYXBwZW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGFyZ2V0IGRpcmVjdG9yeSB0byB0aGUgc3lzLnBhdGggc2VhcmNoIHBhdGgu
CisgICAgICAgICAgbWFrZV9wYWNrYWdlOiBBIGJvb2xlYW4gdmFsdWUgb2Ygd2hldGhlciB0byBt
YWtlIHRoZSB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBhIHBhY2th
Z2UuICBUaGlzIGFkZHMgYW4gX19pbml0X18ucHkgZmlsZQorICAgICAgICAgICAgICAgICAgICAg
ICAgdG8gdGhlIHRhcmdldCBkaXJlY3RvcnkgLS0gYWxsb3dpbmcgcGFja2FnZXMgYW5kCisgICAg
ICAgICAgICAgICAgICAgICAgICBtb2R1bGVzIHdpdGhpbiB0aGUgdGFyZ2V0IGRpcmVjdG9yeSB0
byBiZSBpbXBvcnRlZAorICAgICAgICAgICAgICAgICAgICAgICAgZXhwbGljaXRseSB1c2luZyBk
b3R0ZWQgbW9kdWxlIG5hbWVzLgorCisgICAgICAgICIiIgorICAgICAgICBpZiBub3Qgb3MucGF0
aC5leGlzdHModGFyZ2V0X2Rpcik6CisgICAgICAgICAgICBvcy5tYWtlZGlycyh0YXJnZXRfZGly
KQorICAgICAgICAgICAgX2xvZy5pbmZvKCdDcmVhdGVkIGF1dG9pbnN0YWxsIHBhY2thZ2UgZGly
ZWN0b3J5IGF0OiAiJXMiLicKKyAgICAgICAgICAgICAgICAgICAgICAlIHRhcmdldF9kaXIpCisK
KyAgICAgICAgaWYgYXBwZW5kX3RvX3NlYXJjaF9wYXRoOgorICAgICAgICAgICAgc3lzLnBhdGgu
YXBwZW5kKHRhcmdldF9kaXIpCisKKyAgICAgICAgaWYgbWFrZV9wYWNrYWdlOgorICAgICAgICAg
ICAgaW5pdF9wYXRoID0gb3MucGF0aC5qb2luKHRhcmdldF9kaXIsICJfX2luaXRfXy5weSIpCisg
ICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoaW5pdF9wYXRoKToKKyAgICAgICAgICAg
ICAgICB0ZXh0ID0gKCIjIFRoaXMgZmlsZSBpcyByZXF1aXJlZCBmb3IgUHl0aG9uIHRvIHNlYXJj
aCB0aGlzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJkaXJlY3RvcnkgZm9yIG1vZHVsZXMu
XG5cbiIpCisgICAgICAgICAgICAgICAgc2VsZi5fd3JpdGVfZmlsZShpbml0X3BhdGgsIHRleHQp
CisKKyAgICBkZWYgX2NyZWF0ZV9zY3JhdGNoX2RpcmVjdG9yeV9pbm5lcihzZWxmLCBwcmVmaXgp
OgorICAgICAgICAiIiJDcmVhdGUgYSBzY3JhdGNoIGRpcmVjdG9yeSB3aXRob3V0IGV4Y2VwdGlv
biBoYW5kbGluZy4KKworICAgICAgICBDcmVhdGVzIGEgc2NyYXRjaCBkaXJlY3RvcnkgaW5zaWRl
IHRoZSBBdXRvSW5zdGFsbGVyIHRlbXAKKyAgICAgICAgZGlyZWN0b3J5IHNlbGYuX3RlbXBfZGly
LCBvciBpbnNpZGUgYSBwbGF0Zm9ybS1kZXBlbmRlbnQgdGVtcAorICAgICAgICBkaXJlY3Rvcnkg
aWYgc2VsZi5fdGVtcF9kaXIgaXMgTm9uZS4gIFJldHVybnMgdGhlIHBhdGggdG8gdGhlCisgICAg
ICAgIGNyZWF0ZWQgc2NyYXRjaCBkaXJlY3RvcnkuCisKKyAgICAgICAgUmFpc2VzOgorICAgICAg
ICAgIE9TRXJyb3I6IFtFcnJubyAyXSBpZiB0aGUgY29udGFpbmluZyB0ZW1wIGRpcmVjdG9yeSBz
ZWxmLl90ZW1wX2RpcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBub3QgTm9uZSBh
bmQgZG9lcyBub3QgZXhpc3QuCisKKyAgICAgICAgIiIiCisgICAgICAgICMgVGhlIHRlbXBmaWxl
Lm1rZHRlbXAoKSBtZXRob2QgZnVuY3Rpb24gcmVxdWlyZXMgdGhhdCB0aGUKKyAgICAgICAgIyBk
aXJlY3RvcnkgY29ycmVzcG9uZGluZyB0byB0aGUgImRpciIgcGFyYW1ldGVyIGFscmVhZHkgZXhp
c3QKKyAgICAgICAgIyBpZiBpdCBpcyBub3QgTm9uZS4KKyAgICAgICAgc2NyYXRjaF9kaXIgPSB0
ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD1wcmVmaXgsIGRpcj1zZWxmLl90ZW1wX2RpcikKKyAgICAg
ICAgcmV0dXJuIHNjcmF0Y2hfZGlyCisKKyAgICBkZWYgX2NyZWF0ZV9zY3JhdGNoX2RpcmVjdG9y
eShzZWxmLCB0YXJnZXRfbmFtZSk6CisgICAgICAgICIiIkNyZWF0ZSBhIHRlbXBvcmFyeSBzY3Jh
dGNoIGRpcmVjdG9yeSwgYW5kIHJldHVybiBpdHMgcGF0aC4KKworICAgICAgICBUaGUgc2NyYXRj
aCBkaXJlY3RvcnkgaXMgZ2VuZXJhdGVkIGluc2lkZSB0aGUgdGVtcCBkaXJlY3RvcnkKKyAgICAg
ICAgb2YgdGhpcyBBdXRvSW5zdGFsbGVyIGluc3RhbmNlLiAgVGhpcyBtZXRob2QgYWxzbyBjcmVh
dGVzIHRoZQorICAgICAgICB0ZW1wIGRpcmVjdG9yeSBpZiBpdCBkb2VzIG5vdCBhbHJlYWR5IGV4
aXN0LgorCisgICAgICAgICIiIgorICAgICAgICBwcmVmaXggPSB0YXJnZXRfbmFtZSArICJfIgor
ICAgICAgICB0cnk6CisgICAgICAgICAgICBzY3JhdGNoX2RpciA9IHNlbGYuX2NyZWF0ZV9zY3Jh
dGNoX2RpcmVjdG9yeV9pbm5lcihwcmVmaXgpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAg
ICAgICAgICAgdGVtcF9kaXIgPSBzZWxmLl90ZW1wX2RpcgorICAgICAgICAgICAgIyBIYW5kbGUg
Y2FzZSBvZiBjb250YWluaW5nIHRlbXAgZGlyZWN0b3J5IG5vdCBleGlzdGluZy0tCisgICAgICAg
ICAgICAjIE9TRXJyb3I6IFtFcnJubyAyXSBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5Oi4uLgor
ICAgICAgICAgICAgaWYgdGVtcF9kaXIgaXMgTm9uZSBvciBvcy5wYXRoLmV4aXN0cyh0ZW1wX2Rp
cik6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICMgRWxzZSB0cnkgYWdhaW4g
YWZ0ZXIgY3JlYXRpbmcgdGhlIHRlbXAgZGlyZWN0b3J5LgorICAgICAgICAgICAgb3MubWFrZWRp
cnModGVtcF9kaXIpCisgICAgICAgICAgICBfbG9nLmluZm8oJ0NyZWF0ZWQgYXV0b2luc3RhbGwg
dGVtcCBkaXJlY3RvcnkgYXQ6ICIlcyIuJyAlIHRlbXBfZGlyKQorICAgICAgICAgICAgc2NyYXRj
aF9kaXIgPSBzZWxmLl9jcmVhdGVfc2NyYXRjaF9kaXJlY3RvcnlfaW5uZXIocHJlZml4KQorCisg
ICAgICAgIHJldHVybiBzY3JhdGNoX2RpcgorCisgICAgZGVmIF92ZXJzaW9uX3BhdGgoc2VsZiwg
dGFyZ2V0X25hbWUpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIHBhdGggdG8gdGhlIGZpbGUgY29u
dGFpbmluZyB0aGUgdmVyc2lvbiBkb3dubG9hZGVkLiIiIgorICAgICAgICBmaWxlbmFtZSA9ICIu
JXMudmVyc2lvbiIgJSB0YXJnZXRfbmFtZQorICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKHNl
bGYuX3RhcmdldF9kaXIsIGZpbGVuYW1lKQorICAgICAgICByZXR1cm4gcGF0aAorCisgICAgZGVm
IF9pc19kb3dubG9hZGVkKHNlbGYsIHRhcmdldF9uYW1lLCB1cmwpOgorICAgICAgICAiIiJSZXR1
cm4gd2hldGhlciBhIHBhY2thZ2UgdmVyc2lvbiBoYXMgYmVlbiBkb3dubG9hZGVkLiIiIgorICAg
ICAgICB2ZXJzaW9uX3BhdGggPSBzZWxmLl92ZXJzaW9uX3BhdGgodGFyZ2V0X25hbWUpCisKKyAg
ICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHZlcnNpb25fcGF0aCk6CisgICAgICAgICAgICAj
IFRoZW4gbm8gcGFja2FnZSB2ZXJzaW9uIGhhcyBiZWVuIGRvd25sb2FkZWQuCisgICAgICAgICAg
ICBfbG9nLmRlYnVnKCdWZXJzaW9uIGZpbGUgbm90IGZvdW5kOiAiJXMiJyAlIHZlcnNpb25fcGF0
aCkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGZpbGUgPSBvcGVuKHZlcnNp
b25fcGF0aCwgInIiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB2ZXJzaW9uID0gZmlsZS5y
ZWFkKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZpbGUuY2xvc2UoKQorICAgICAg
ICBfbG9nLmRlYnVnKCdSZWFkIHZlcnNpb24gIiVzIiBmcm9tICIlcyIuJyAlICh2ZXJzaW9uLCB2
ZXJzaW9uX3BhdGgpKQorCisgICAgICAgIHJldHVybiB2ZXJzaW9uLnN0cmlwKCkgPT0gdXJsLnN0
cmlwKCkKKworICAgIGRlZiBfd3JpdGVfdmVyc2lvbl9kb3dubG9hZGVkKHNlbGYsIHRhcmdldF9u
YW1lLCB1cmwpOgorICAgICAgICAiIiJSZWNvcmQgdGhlIHZlcnNpb24gZG93bmxvYWRlZCB0byBh
IGZpbGUuIiIiCisgICAgICAgIHZlcnNpb25fcGF0aCA9IHNlbGYuX3ZlcnNpb25fcGF0aCh0YXJn
ZXRfbmFtZSkKKyAgICAgICAgX2xvZy5kZWJ1ZygnV3JpdGluZyB2ZXJzaW9uICIlcyIgdG8gZmls
ZTogIiVzIi4nCisgICAgICAgICAgICAgICAgICAgJSAodXJsLCB2ZXJzaW9uX3BhdGgpKQorCisg
ICAgICAgIHNlbGYuX3dyaXRlX2ZpbGUodmVyc2lvbl9wYXRoLCB1cmwpCisKKyAgICBkZWYgX2V4
dHJhY3RfdGFyZ3ooc2VsZiwgcGF0aCwgc2NyYXRjaF9kaXIpOgorICAgICAgICAjIHRhcmZpbGUu
ZXh0cmFjdGFsbCgpIGV4dHJhY3RzIHRvIGEgcGF0aCB3aXRob3V0IHRoZQorICAgICAgICAjIHRy
YWlsaW5nICIudGFyLmd6Ii4KKyAgICAgICAgIworICAgICAgICAjIFRoZSBzdWJzdHJpbmcgIi50
YXIuZ3oiIGhhcyBzZXZlbiBjaGFyYWN0ZXJzLgorICAgICAgICB0YXJnZXRfYmFzZW5hbWUgPSBv
cy5wYXRoLmJhc2VuYW1lKHBhdGhbOi03XSkKKyAgICAgICAgdGFyZ2V0X3BhdGggPSBvcy5wYXRo
LmpvaW4oc2NyYXRjaF9kaXIsIHRhcmdldF9iYXNlbmFtZSkKKworICAgICAgICBzZWxmLl9sb2df
dHJhbnNmZXIoIlN0YXJ0aW5nIGd1bnppcC9leHRyYWN0Li4uIiwgcGF0aCwgdGFyZ2V0X3BhdGgp
CisKKyAgICAgICAgdGZpbGUgPSB0YXJmaWxlLm9wZW4ocGF0aCkKKyAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgbWVtYmVycyA9IHRmaWxlLmdldG1lbWJlcnMoKQorICAgICAgICAgICAgX2xvZy5k
ZWJ1ZygiTWVtYmVycyBvZiAlcyBhcmU6ICVzIiAlIChwYXRoLCBtZW1iZXJzKSkKKyAgICAgICAg
ICAgIHRmaWxlLmV4dHJhY3RhbGwodGFyZ2V0X3BhdGgpCisgICAgICAgIGZpbmFsbHk6CisgICAg
ICAgICAgICB0ZmlsZS5jbG9zZSgpCisKKyAgICAgICAgcmV0dXJuIHRhcmdldF9wYXRoCisKKyAg
ICBkZWYgX3VuemlwKHNlbGYsIHBhdGgsIHNjcmF0Y2hfZGlyKToKKyAgICAgICAgIyB6aXBmaWxl
LmV4dHJhY3RhbGwoKSBleHRyYWN0cyB0byBhIHBhdGggd2l0aG91dCB0aGUKKyAgICAgICAgIyB0
cmFpbGluZyAiLnppcCIuCisgICAgICAgICMKKyAgICAgICAgIyBUaGUgc3Vic3RyaW5nICIuemlw
IiBoYXMgZm91ciBjaGFyYWN0ZXJzLgorICAgICAgICB0YXJnZXRfYmFzZW5hbWUgPSBvcy5wYXRo
LmJhc2VuYW1lKHBhdGhbOi00XSkKKyAgICAgICAgdGFyZ2V0X3BhdGggPSBvcy5wYXRoLmpvaW4o
c2NyYXRjaF9kaXIsIHRhcmdldF9iYXNlbmFtZSkKKworICAgICAgICBzZWxmLl9sb2dfdHJhbnNm
ZXIoIlN0YXJ0aW5nIHVuemlwLi4uIiwgcGF0aCwgdGFyZ2V0X3BhdGgpCisKKyAgICAgICAgemZp
bGUgPSB6aXBmaWxlLlppcEZpbGUocGF0aCwgInIiKQorICAgICAgICB0cnk6CisgICAgICAgICAg
ICB6ZmlsZS5leHRyYWN0YWxsKHNjcmF0Y2hfZGlyKQorICAgICAgICBmaW5hbGx5OgorICAgICAg
ICAgICAgemZpbGUuY2xvc2UoKQorCisgICAgICAgIHJldHVybiB0YXJnZXRfcGF0aAorCisgICAg
ZGVmIF9wcmVwYXJlX3BhY2thZ2Uoc2VsZiwgcGF0aCwgc2NyYXRjaF9kaXIpOgorICAgICAgICAi
IiJQcmVwYXJlIGEgcGFja2FnZSBmb3IgdXNlLCBpZiBuZWNlc3NhcnksIGFuZCByZXR1cm4gdGhl
IG5ldyBwYXRoLgorCisgICAgICAgIEZvciBleGFtcGxlLCB0aGlzIG1ldGhvZCB1bnppcHMgemlw
cGVkIGZpbGVzIGFuZCBleHRyYWN0cworICAgICAgICB0YXIgZmlsZXMuCisKKyAgICAgICAgQXJn
czoKKyAgICAgICAgICBwYXRoOiBUaGUgcGF0aCB0byB0aGUgZG93bmxvYWRlZCBVUkwgY29udGVu
dHMuCisgICAgICAgICAgc2NyYXRjaF9kaXI6IFRoZSBzY3JhdGNoIGRpcmVjdG9yeS4gIE5vdGUg
dGhhdCB0aGUgc2NyYXRjaAorICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgY29udGFp
bnMgdGhlIGZpbGUgZGVzaWduYXRlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgcGF0
aCBwYXJhbWV0ZXIuCisKKyAgICAgICAgIiIiCisgICAgICAgICMgRklYTUU6IEFkZCBvdGhlciBu
YXR1cmFsIGV4dGVuc2lvbnMuCisgICAgICAgIGlmIHBhdGguZW5kc3dpdGgoIi56aXAiKToKKyAg
ICAgICAgICAgIG5ld19wYXRoID0gc2VsZi5fdW56aXAocGF0aCwgc2NyYXRjaF9kaXIpCisgICAg
ICAgIGVsaWYgcGF0aC5lbmRzd2l0aCgiLnRhci5neiIpOgorICAgICAgICAgICAgbmV3X3BhdGgg
PSBzZWxmLl9leHRyYWN0X3Rhcmd6KHBhdGgsIHNjcmF0Y2hfZGlyKQogICAgICAgICBlbHNlOgot
ICAgICAgICAgICAgX2xvZ2dlci5kZWJ1ZygiLi4uIG5vdCBpbiBjYWNoZS4gQ2FjaGluZyBpbiAn
JXMnLiIgJSBmaWxlbmFtZSkKLSAgICAgICAgICAgIHN0cmVhbSA9IGZpbGUoZmlsZW5hbWUsICJ3
YiIpCi0gICAgICAgICAgICBzZWxmLmRvd25sb2FkKHVybCwgc3RyZWFtKQotICAgICAgICAgICAg
c3RyZWFtLmNsb3NlKCkKLSAgICAgICAgcmV0dXJuIGZpbGVuYW1lCi0KLSAgICBkZWYgZG93bmxv
YWQoc2VsZiwgdXJsLCBzdHJlYW0pOgotICAgICAgICBfbG9nZ2VyLmluZm8oIkRvd25sb2FkaW5n
OiAlcyIgJSB1cmwpCisgICAgICAgICAgICAjIE5vIHByZXBhcmF0aW9uIGlzIG5lZWRlZC4KKyAg
ICAgICAgICAgIG5ld19wYXRoID0gcGF0aAorCisgICAgICAgIHJldHVybiBuZXdfcGF0aAorCisg
ICAgZGVmIF9kb3dubG9hZF90b19zdHJlYW0oc2VsZiwgdXJsLCBzdHJlYW0pOgorICAgICAgICAi
IiJEb3dubG9hZCBhbiBVUkwgdG8gYSBzdHJlYW0sIGFuZCByZXR1cm4gdGhlIG51bWJlciBvZiBi
eXRlcy4iIiIKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbmV0c3RyZWFtID0gdXJsbGliLnVy
bG9wZW4odXJsKQogICAgICAgICAgICAgY29kZSA9IDIwMApAQCAtMjM1LDEwMSArNDA4LDE0OSBA
QCBjbGFzcyBDYWNoZShvYmplY3QpOgogICAgICAgICAgICAgaWYgbm90IDIwMCA8PSBjb2RlIDwg
MzAwOgogICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkhUVFAgRXJyb3IgY29kZSAl
cyIgJSBjb2RlKQogICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlcnI6Ci0gICAgICAgICAgICBf
bG9nZ2VyLmV4Y2VwdGlvbihlcnIpCisgICAgICAgICAgICBfbG9nLmV4Y2VwdGlvbihlcnIpCiAK
ICAgICAgICAgQlVGU0laRSA9IDIqKjEzICAjIDhLQgotICAgICAgICBzaXplID0gMAorICAgICAg
ICBieXRlcyA9IDAKICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgIGRhdGEgPSBuZXRz
dHJlYW0ucmVhZChCVUZTSVpFKQogICAgICAgICAgICAgaWYgbm90IGRhdGE6CiAgICAgICAgICAg
ICAgICAgYnJlYWsKICAgICAgICAgICAgIHN0cmVhbS53cml0ZShkYXRhKQotICAgICAgICAgICAg
c2l6ZSArPSBsZW4oZGF0YSkKKyAgICAgICAgICAgIGJ5dGVzICs9IGxlbihkYXRhKQogICAgICAg
ICBuZXRzdHJlYW0uY2xvc2UoKQotICAgICAgICBfbG9nZ2VyLmluZm8oIkRvd25sb2FkZWQgJWQg
Ynl0ZXMuIiAlIHNpemUpCisgICAgICAgIHJldHVybiBieXRlcwogCisgICAgZGVmIF9kb3dubG9h
ZChzZWxmLCB1cmwsIHNjcmF0Y2hfZGlyKToKKyAgICAgICAgIiIiRG93bmxvYWQgVVJMIGNvbnRl
bnRzLCBhbmQgcmV0dXJuIHRoZSBkb3dubG9hZCBwYXRoLiIiIgorICAgICAgICBzZWxmLl9sb2df
dHJhbnNmZXIoIlN0YXJ0aW5nIGRvd25sb2FkLi4uIiwgdXJsLCBzY3JhdGNoX2RpcikKIAotY2xh
c3MgSW1wb3J0ZXIob2JqZWN0KToKKyAgICAgICAgdXJsX3BhdGggPSB1cmxwYXJzZS51cmxzcGxp
dCh1cmwpWzJdCisgICAgICAgIHVybF9wYXRoID0gb3MucGF0aC5ub3JtcGF0aCh1cmxfcGF0aCkg
ICMgUmVtb3ZlcyB0cmFpbGluZyBzbGFzaC4KKyAgICAgICAgdGFyZ2V0X2ZpbGVuYW1lID0gb3Mu
cGF0aC5iYXNlbmFtZSh1cmxfcGF0aCkKKyAgICAgICAgdGFyZ2V0X3BhdGggPSBvcy5wYXRoLmpv
aW4oc2NyYXRjaF9kaXIsIHRhcmdldF9maWxlbmFtZSkKIAotICAgIGRlZiBfX2luaXRfXyhzZWxm
KToKLSAgICAgICAgc2VsZi5wYWNrYWdlcyA9IHt9Ci0gICAgICAgIHNlbGYuX19jYWNoZSA9IE5v
bmUKKyAgICAgICAgc3RyZWFtID0gZmlsZSh0YXJnZXRfcGF0aCwgIndiIikKKyAgICAgICAgYnl0
ZXMgPSBzZWxmLl9kb3dubG9hZF90b19zdHJlYW0odXJsLCBzdHJlYW0pCisgICAgICAgIHN0cmVh
bS5jbG9zZSgpCiAKLSAgICBkZWYgX19nZXRfc3RvcmUoc2VsZik6Ci0gICAgICAgIHJldHVybiBz
ZWxmLl9fc3RvcmUKLSAgICBzdG9yZSA9IHByb3BlcnR5KF9fZ2V0X3N0b3JlKQorICAgICAgICBt
ZXNzYWdlID0gIkRvd25sb2FkZWQgJXMgYnl0ZXMuLi4iICUgYnl0ZXMKKyAgICAgICAgc2VsZi5f
bG9nX3RyYW5zZmVyKG1lc3NhZ2UsIHVybCwgdGFyZ2V0X3BhdGgpCiAKLSAgICBkZWYgX2dldF9j
YWNoZShzZWxmKToKLSAgICAgICAgaWYgc2VsZi5fX2NhY2hlIGlzIE5vbmU6Ci0gICAgICAgICAg
ICBzZWxmLl9fY2FjaGUgPSBDYWNoZSgpCi0gICAgICAgIHJldHVybiBzZWxmLl9fY2FjaGUKLSAg
ICBkZWYgX3NldF9jYWNoZShzZWxmLCBjYWNoZSk6Ci0gICAgICAgIHNlbGYuX19jYWNoZSA9IGNh
Y2hlCi0gICAgY2FjaGUgPSBwcm9wZXJ0eShfZ2V0X2NhY2hlLCBfc2V0X2NhY2hlKQorICAgICAg
ICByZXR1cm4gdGFyZ2V0X3BhdGgKIAotICAgIGRlZiBmaW5kX21vZHVsZShzZWxmLCBmdWxsbmFt
ZSwgcGF0aD1Ob25lKToKLSAgICAgICAgIiIiLT4gc2VsZiBvciBOb25lLgorICAgIGRlZiBfaW5z
dGFsbChzZWxmLCBzY3JhdGNoX2RpciwgdGFyZ2V0X25hbWUsIHRhcmdldF9wYXRoLCB1cmwsCisg
ICAgICAgICAgICAgICAgIHVybF9zdWJwYXRoKToKKyAgICAgICAgIiIiSW5zdGFsbCBhIHB5dGhv
biBwYWNrYWdlIGZyb20gYW4gVVJMLgogCi0gICAgICAgIFNlYXJjaCBmb3IgYSBtb2R1bGUgc3Bl
Y2lmaWVkIGJ5ICdmdWxsbmFtZScuICdmdWxsbmFtZScgbXVzdCBiZQotICAgICAgICB0aGUgZnVs
bHkgcXVhbGlmaWVkIChkb3R0ZWQpIG1vZHVsZSBuYW1lLiBJdCByZXR1cm5zIHRoZQotICAgICAg
ICB6aXBpbXBvcnRlciBpbnN0YW5jZSBpdHNlbGYgaWYgdGhlIG1vZHVsZSB3YXMgZm91bmQsIG9y
IE5vbmUgaWYKLSAgICAgICAgaXQgd2Fzbid0LiBUaGUgb3B0aW9uYWwgJ3BhdGgnIGFyZ3VtZW50
IGlzIGlnbm9yZWQgLS0gaXQncwotICAgICAgICB0aGVyZSBmb3IgY29tcGF0aWJpbGl0eSB3aXRo
IHRoZSBpbXBvcnRlciBwcm90b2NvbC4iKTsKLSAgICAgICAgIiIiCi0gICAgICAgIF9sb2dnZXIu
ZGVidWcoImZpbmRfbW9kdWxlKCVzLCBwYXRoPSVzKSIgJSAoZnVsbG5hbWUsIHBhdGgpKQotCi0g
ICAgICAgIGlmIGZ1bGxuYW1lIGluIHNlbGYucGFja2FnZXM6Ci0gICAgICAgICAgICAodXJsLCB6
aXBfc3VicGF0aCkgPSBzZWxmLnBhY2thZ2VzW2Z1bGxuYW1lXQotICAgICAgICAgICAgZmlsZW5h
bWUgPSBzZWxmLmNhY2hlLmdldCh1cmwpCi0gICAgICAgICAgICB6aXBfcGF0aCA9ICIlcy8lcyIg
JSAoZmlsZW5hbWUsIHppcF9zdWJwYXRoKSBpZiB6aXBfc3VicGF0aCBlbHNlIGZpbGVuYW1lCi0g
ICAgICAgICAgICBfbG9nZ2VyLmRlYnVnKCJmdWxsbmFtZTogJXMgdXJsOiAlcyBwYXRoOiAlcyB6
aXBfcGF0aDogJXMiICUgKGZ1bGxuYW1lLCB1cmwsIHBhdGgsIHppcF9wYXRoKSkKLSAgICAgICAg
ICAgIHRyeToKLSAgICAgICAgICAgICAgICBsb2FkZXIgPSB6aXBpbXBvcnQuemlwaW1wb3J0ZXIo
emlwX3BhdGgpCi0gICAgICAgICAgICAgICAgX2xvZ2dlci5kZWJ1ZygicmV0dXJuaW5nOiAlcyIg
JSBsb2FkZXIpCi0gICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgotICAgICAgICAgICAg
ICAgIF9sb2dnZXIuZXhjZXB0aW9uKGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAg
ICAgICAgICAgIHJldHVybiBsb2FkZXIKLSAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgIGRlZiBi
aW5kKHNlbGYsIHBhY2thZ2VfbmFtZSwgdXJsLCB6aXBfc3VicGF0aCk6Ci0gICAgICAgIF9sb2dn
ZXIuaW5mbygiYmluZGluZzogJXMgLT4gJXMgc3VicGF0aDogJXMiICUgKHBhY2thZ2VfbmFtZSwg
dXJsLCB6aXBfc3VicGF0aCkpCi0gICAgICAgIHNlbGYucGFja2FnZXNbcGFja2FnZV9uYW1lXSA9
ICh1cmwsIHppcF9zdWJwYXRoKQotCi0KLWlmIF9fbmFtZV9fPT0iX19tYWluX18iOgotICAgIGlt
cG9ydCBsb2dnaW5nCi0gICAgI2xvZ2dpbmcuYmFzaWNDb25maWcoKQotICAgIGxvZ2dlciA9IGxv
Z2dpbmcuZ2V0TG9nZ2VyKCkKKyAgICAgICAgVGhpcyBpbnRlcm5hbCBtZXRob2Qgb3ZlcndyaXRl
cyB0aGUgdGFyZ2V0IHBhdGggaWYgdGhlIHRhcmdldAorICAgICAgICBwYXRoIGFscmVhZHkgZXhp
c3RzLgogCi0gICAgY29uc29sZSA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcigpCi0gICAgY29uc29s
ZS5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQotICAgICMgc2V0IGEgZm9ybWF0IHdoaWNoIGlzIHNp
bXBsZXIgZm9yIGNvbnNvbGUgdXNlCi0gICAgZm9ybWF0dGVyID0gbG9nZ2luZy5Gb3JtYXR0ZXIo
JyUobmFtZSktMTJzOiAlKGxldmVsbmFtZSktOHMgJShtZXNzYWdlKXMnKQotICAgICMgdGVsbCB0
aGUgaGFuZGxlciB0byB1c2UgdGhpcyBmb3JtYXQKLSAgICBjb25zb2xlLnNldEZvcm1hdHRlcihm
b3JtYXR0ZXIpCi0gICAgIyBhZGQgdGhlIGhhbmRsZXIgdG8gdGhlIHJvb3QgbG9nZ2VyCi0gICAg
bG9nZ2VyLmFkZEhhbmRsZXIoY29uc29sZSkKLSAgICBsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5J
TkZPKQotCi0gICAgYmluZCgicHltYXJjIiwgImh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcGFja2Fn
ZXMvMi41L3AvcHltYXJjL3B5bWFyYy0yLjEtcHkyLjUuZWdnIikKKyAgICAgICAgIiIiCisgICAg
ICAgIHBhdGggPSBzZWxmLl9kb3dubG9hZCh1cmwsIHNjcmF0Y2hfZGlyKQorICAgICAgICBwYXRo
ID0gc2VsZi5fcHJlcGFyZV9wYWNrYWdlKHBhdGgsIHNjcmF0Y2hfZGlyKQogCi0gICAgaW1wb3J0
IHB5bWFyYworICAgICAgICBpZiB1cmxfc3VicGF0aCBpcyBOb25lOgorICAgICAgICAgICAgc291
cmNlX3BhdGggPSBwYXRoCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzb3VyY2VfcGF0aCA9
IG9zLnBhdGguam9pbihwYXRoLCB1cmxfc3VicGF0aCkKKworICAgICAgICBpZiBvcy5wYXRoLmV4
aXN0cyh0YXJnZXRfcGF0aCk6CisgICAgICAgICAgICBfbG9nLmRlYnVnKCdSZWZyZXNoaW5nIGlu
c3RhbGw6IGRlbGV0aW5nICIlcyIuJyAlIHRhcmdldF9wYXRoKQorICAgICAgICAgICAgaWYgb3Mu
cGF0aC5pc2Rpcih0YXJnZXRfcGF0aCk6CisgICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZSh0
YXJnZXRfcGF0aCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgb3MucmVtb3Zl
KHRhcmdldF9wYXRoKQorCisgICAgICAgIHNlbGYuX2xvZ190cmFuc2ZlcigiTW92aW5nIGludG8g
cGxhY2UuLi4iLCBzb3VyY2VfcGF0aCwgdGFyZ2V0X3BhdGgpCisKKyAgICAgICAgIyBUaGUgc2h1
dGlsLm1vdmUoKSBjb21tYW5kIGNyZWF0ZXMgaW50ZXJtZWRpYXRlIGRpcmVjdG9yaWVzIGlmIHRo
ZXkKKyAgICAgICAgIyBkbyBub3QgZXhpc3QsIGJ1dCB3ZSBkbyBub3QgcmVseSBvbiB0aGlzIGJl
aGF2aW9yIHNpbmNlIHdlCisgICAgICAgICMgbmVlZCB0byBjcmVhdGUgdGhlIF9faW5pdF9fLnB5
IGZpbGUgYW55d2F5LgorICAgICAgICBzaHV0aWwubW92ZShzb3VyY2VfcGF0aCwgdGFyZ2V0X3Bh
dGgpCisKKyAgICAgICAgc2VsZi5fd3JpdGVfdmVyc2lvbl9kb3dubG9hZGVkKHRhcmdldF9uYW1l
LCB1cmwpCisKKyAgICBkZWYgaW5zdGFsbChzZWxmLCB1cmwsIHNob3VsZF9yZWZyZXNoPUZhbHNl
LCB0YXJnZXRfbmFtZT1Ob25lLAorICAgICAgICAgICAgICAgIHVybF9zdWJwYXRoPU5vbmUpOgor
ICAgICAgICAiIiJJbnN0YWxsIGEgcHl0aG9uIHBhY2thZ2UgZnJvbSBhbiBVUkwuCisKKyAgICAg
ICAgQXJnczoKKyAgICAgICAgICB1cmw6IFRoZSBVUkwgZnJvbSB3aGljaCB0byBkb3dubG9hZCB0
aGUgcGFja2FnZS4KKworICAgICAgICBPcHRpb25hbCBBcmdzOgorICAgICAgICAgIHNob3VsZF9y
ZWZyZXNoOiBBIGJvb2xlYW4gdmFsdWUgb2Ygd2hldGhlciB0aGUgcGFja2FnZSBzaG91bGQgYmUK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgZG93bmxvYWRlZCBhZ2FpbiBpZiB0aGUgcGFja2Fn
ZSBpcyBhbHJlYWR5IHByZXNlbnQuCisgICAgICAgICAgdGFyZ2V0X25hbWU6IFRoZSBuYW1lIG9m
IHRoZSBmb2xkZXIgb3IgZmlsZSBpbiB0aGUgYXV0b2luc3RhbGxlcgorICAgICAgICAgICAgICAg
ICAgICAgICB0YXJnZXQgZGlyZWN0b3J5IGF0IHdoaWNoIHRoZSBwYWNrYWdlIHNob3VsZCBiZQor
ICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsZWQuICBEZWZhdWx0cyB0byB0aGUgYmFzZSBu
YW1lIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICBVUkwgc3ViLXBhdGguICBUaGlzIHBh
cmFtZXRlciBtdXN0IGJlIHByb3ZpZGVkIGlmCisgICAgICAgICAgICAgICAgICAgICAgIHRoZSBV
Ukwgc3ViLXBhdGggaXMgbm90IHNwZWNpZmllZC4KKyAgICAgICAgICB1cmxfc3VicGF0aDogVGhl
IHJlbGF0aXZlIHBhdGggb2YgdGhlIFVSTCBkaXJlY3RvcnkgdGhhdCBzaG91bGQKKyAgICAgICAg
ICAgICAgICAgICAgICAgYmUgaW5zdGFsbGVkLiAgRGVmYXVsdHMgdG8gdGhlIGZ1bGwgZGlyZWN0
b3J5LCBvcgorICAgICAgICAgICAgICAgICAgICAgICB0aGUgZW50aXJlIFVSTCBjb250ZW50cy4K
IAotICAgIHByaW50IHB5bWFyYy5fX3ZlcnNpb25fXywgcHltYXJjLl9fZmlsZV9fCisgICAgICAg
ICIiIgorICAgICAgICBpZiB0YXJnZXRfbmFtZSBpcyBOb25lOgorICAgICAgICAgICAgaWYgbm90
IHVybF9zdWJwYXRoOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1RoZSAidGFy
Z2V0X25hbWUiIHBhcmFtZXRlciBtdXN0IGJlICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICdwcm92aWRlZCBpZiB0aGUgInVybF9zdWJwYXRoIiBwYXJhbWV0ZXIgJworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImlzIG5vdCBwcm92aWRlZC4iKQorICAgICAgICAg
ICAgIyBSZW1vdmUgYW55IHRyYWlsaW5nIHNsYXNoZXMuCisgICAgICAgICAgICB1cmxfc3VicGF0
aCA9IG9zLnBhdGgubm9ybXBhdGgodXJsX3N1YnBhdGgpCisgICAgICAgICAgICB0YXJnZXRfbmFt
ZSA9IG9zLnBhdGguYmFzZW5hbWUodXJsX3N1YnBhdGgpCisKKyAgICAgICAgdGFyZ2V0X3BhdGgg
PSBvcy5wYXRoLmpvaW4oc2VsZi5fdGFyZ2V0X2RpciwgdGFyZ2V0X25hbWUpCisgICAgICAgIGlm
IChub3Qgc2hvdWxkX3JlZnJlc2gpIGFuZCBzZWxmLl9pc19kb3dubG9hZGVkKHRhcmdldF9uYW1l
LCB1cmwpOgorICAgICAgICAgICAgX2xvZy5kZWJ1ZygnVVJMIGFscmVhZHkgZG93bmxvYWRlZDog
c2tpcHBpbmcgIiVzIi4nCisgICAgICAgICAgICAgICAgICAgICAgICUgdGFyZ2V0X3BhdGgpCisg
ICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmLl9sb2dfdHJhbnNmZXIoIlN0YXJ0aW5n
ICVzIGluc3RhbGwuLi4iICUgdGFyZ2V0X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdXJsLCB0YXJnZXRfcGF0aCkKKworICAgICAgICAjIFRoZSBzY3JhdGNoIGRpcmVjdG9yeSBp
cyB3aGVyZSB3ZSB3aWxsIGRvd25sb2FkIGFuZCBwcmVwYXJlCisgICAgICAgICMgZmlsZXMgc3Bl
Y2lmaWMgdG8gdGhpcyBpbnN0YWxsIHVudGlsIHRoZXkgYXJlIHJlYWR5IHRvIG1vdmUKKyAgICAg
ICAgIyBpbnRvIHBsYWNlLgorICAgICAgICBzY3JhdGNoX2RpciA9IHNlbGYuX2NyZWF0ZV9zY3Jh
dGNoX2RpcmVjdG9yeSh0YXJnZXRfbmFtZSkKIAotICAgIGFzc2VydCBweW1hcmMuX192ZXJzaW9u
X189PSIyLjEiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX2luc3RhbGwodGFyZ2V0
X25hbWU9dGFyZ2V0X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9wYXRo
PXRhcmdldF9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNoX2Rpcj1zY3Jh
dGNoX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsPXVybCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgdXJsX3N1YnBhdGg9dXJsX3N1YnBhdGgpCisgICAgICAgIGZpbmFsbHk6
CisgICAgICAgICAgICBfbG9nLmRlYnVnKCdDbGVhbmluZyB1cDogZGVsZXRpbmcgIiVzIi4nICUg
c2NyYXRjaF9kaXIpCisgICAgICAgICAgICBzaHV0aWwucm10cmVlKHNjcmF0Y2hfZGlyKQorICAg
ICAgICBfbG9nLmluZm8oJ0F1dG8taW5zdGFsbGVkIHBhY2thZ2UgIiVzIiBhdDogIiVzIi4nCisg
ICAgICAgICAgICAgICAgICAlICh0YXJnZXRfbmFtZSwgdGFyZ2V0X3BhdGgpKQogCi0gICAgZCA9
IF9nZXRJbXBvcnRlcigpLmNhY2hlLmRpcmVjdG9yeQotICAgIGFzc2VydCBkIGluIHB5bWFyYy5f
X2ZpbGVfXywgIiclcycgbm90IGZvdW5kIGluIHB5bWFyYy5fX2ZpbGVfXyAoJXMpIiAlIChkLCBw
eW1hcmMuX19maWxlX18pCiAKLSAgICAjIENhbiBub3cgYWxzbyBiaW5kIHRvIG5vbiB0b3AgbGV2
ZWwgcGFja2FnZXMuIFRoZSBwYWNrYWdlcwotICAgICMgbGVhZGluZyB1cCB0byB0aGUgcGFja2Fn
ZSBiZWluZyBib3VuZCB3aWxsIG5lZWQgdG8gYmUgZGVmaW5lZAotICAgICMgaG93ZXZlci4KLSAg
ICAjCi0gICAgIyBiaW5kKCJyZGYucGx1Z2lucy5zdG9yZXMubWVtb3J5IiwgCi0gICAgIyAgICAg
ICJodHRwOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2VzLzIuNS9yL3JkZi5wbHVnaW5zLnN0b3Jl
cy5tZW1lb3J5L3JkZi5wbHVnaW5zLnN0b3Jlcy5tZW1vcnktMC45YS1weTIuNS5lZ2ciKQotICAg
ICMKLSAgICAjIGZyb20gcmRmLnBsdWdpbnMuc3RvcmVzLm1lbW9yeSBpbXBvcnQgTWVtb3J5Citp
ZiBfX25hbWVfXz09Il9fbWFpbl9fIjoKIAorICAgICMgQ29uZmlndXJlIHRoZSBhdXRvaW5zdGFs
bCBsb2dnZXIgdG8gbG9nIERFQlVHIG1lc3NhZ2VzIGZvcgorICAgICMgZGV2ZWxvcG1lbnQgdGVz
dGluZyBwdXJwb3Nlcy4KKyAgICBjb25zb2xlID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKCkKKyAg
ICBmb3JtYXR0ZXIgPSBsb2dnaW5nLkZvcm1hdHRlcignJShuYW1lKXM6IFslKGxldmVsbmFtZSlz
XSAlKG1lc3NhZ2UpcycpCisgICAgY29uc29sZS5zZXRGb3JtYXR0ZXIoZm9ybWF0dGVyKQorICAg
IF9sb2cuYWRkSGFuZGxlcihjb25zb2xlKQorICAgIF9sb2cuc2V0TGV2ZWwobG9nZ2luZy5ERUJV
RykKKworICAgICMgVXNlIGEgbW9yZSB2aXNpYmxlIHRlbXAgZGlyZWN0b3J5IGZvciBkZWJ1ZyBw
dXJwb3Nlcy4KKyAgICB0aGlzX2RpciA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykKKyAgICB0
YXJnZXRfZGlyID0gb3MucGF0aC5qb2luKHRoaXNfZGlyLCAiYXV0b2luc3RhbGxlZCIpCisgICAg
dGVtcF9kaXIgPSBvcy5wYXRoLmpvaW4odGFyZ2V0X2RpciwgIlRlbXAiKQorCisgICAgaW5zdGFs
bGVyID0gQXV0b0luc3RhbGxlcih0YXJnZXRfZGlyPXRhcmdldF9kaXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0ZW1wX2Rpcj10ZW1wX2RpcikKKworICAgIGluc3RhbGxlci5pbnN0
YWxsKHNob3VsZF9yZWZyZXNoPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9u
YW1lPSJwZXA4LnB5IiwKKyAgICAgICAgICAgICAgICAgICAgICB1cmw9Imh0dHA6Ly9weXBpLnB5
dGhvbi5vcmcvcGFja2FnZXMvc291cmNlL3AvcGVwOC9wZXA4LTAuNS4wLnRhci5neiNtZDU9NTEy
YTgxOGFmOTk3OTI5MGNkNjE5Y2NlOGU5YzJlMmIiLAorICAgICAgICAgICAgICAgICAgICAgIHVy
bF9zdWJwYXRoPSJwZXA4LTAuNS4wL3BlcDgucHkiKQorICAgIGluc3RhbGxlci5pbnN0YWxsKHNo
b3VsZF9yZWZyZXNoPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9uYW1lPSJt
ZWNoYW5pemUiLAorICAgICAgICAgICAgICAgICAgICAgIHVybD0iaHR0cDovL3B5cGkucHl0aG9u
Lm9yZy9wYWNrYWdlcy9zb3VyY2UvbS9tZWNoYW5pemUvbWVjaGFuaXplLTAuMS4xMS56aXAiLAor
ICAgICAgICAgICAgICAgICAgICAgIHVybF9zdWJwYXRoPSJtZWNoYW5pemUiKQogCg==
</data>
<flag name="review"
          id="32109"
          type_id="1"
          status="-"
          setter="cjerdonek"
    />
    <flag name="commit-queue"
          id="32110"
          type_id="3"
          status="-"
          setter="cjerdonek"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51875</attachid>
            <date>2010-03-28 19:40:54 -0700</date>
            <delta_ts>2010-03-31 19:16:03 -0700</delta_ts>
            <desc>Proposed patch 5</desc>
            <filename>_patch-35163-5.diff</filename>
            <type>text/plain</type>
            <size>46216</size>
            <attacher name="Chris Jerdonek">cjerdonek</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAxMjNhZDkyLi41NzZjMjhiIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTYgQEAKKzIwMTAtMDMt
MjggIENocmlzIEplcmRvbmVrICA8Y2plcmRvbmVrQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmV3cm90ZSBhdXRvaW5zdGFsbC5w
eSB0byBzdXBwb3J0IHVuemlwcGluZyAqLnppcCBmaWxlcyBhZnRlcgorICAgICAgICBkb3dubG9h
ZCwgdW56aXBwaW5nIGFuZCBleHRyYWN0aW5nICoudGFyLmd6IGZpbGVzIGFmdGVyIGRvd25sb2Fk
LAorICAgICAgICBhbmQgY29weWluZyBpbnN0YWxsZWQgZmlsZXMgdG8gYSBnaXZlbiBkZXN0aW5h
dGlvbiBkaXJlY3RvcnkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTM1MTYzCisKKyAgICAgICAgVGhlc2UgY2hhbmdlcyB3aWxsIGxldCB1cyBhdXRv
aW5zdGFsbCBwZXA4LnB5IGZyb20gdGhlIHdlYiBhbmQgcHV0CisgICAgICAgIG91ciB0aGlyZC1w
YXJ0eSBhdXRvaW5zdGFsbGVkIGNvZGUgaW4gYW4gZXhwbGljaXQgZGlyZWN0b3J5IGxpa2UKKyAg
ICAgICAgd2Via2l0cHkvdGhpcmRwYXJ0eS9hdXRvaW5zdGFsbGVkLiBUaGVzZSBjaGFuZ2VzIHNo
b3VsZCBhbHNvIHNwZWVkCisgICAgICAgIHVwIHRoZSBleGVjdXRpb24gb2YgYXV0b2luc3RhbGxl
ZCAqLnppcCBwYWNrYWdlcyBzbGlnaHRseSBzaW5jZQorICAgICAgICAqLnB5YyBmaWxlcyBjYW5u
b3QgYmUgZ2VuZXJhdGVkIHdoZW4gaW1wb3J0aW5nIGZyb20gemlwcGVkCisgICAgICAgIHBhY2th
Z2VzIHVzaW5nIHRoZSBjdXJyZW50IGF1dG9pbnN0YWxsLgorCisgICAgICAgICogU2NyaXB0cy90
ZXN0LXdlYmtpdHB5OgorICAgICAgICAgIC0gQWRkcmVzc2VkIHRoZSBGSVhNRSB0byBlbmFibGUg
YXV0by1pbnN0YWxsIGxvZ2dpbmcgb25jZQorICAgICAgICAgICAgYXV0b2luc3RhbGwgd2FzIHJl
d3JpdHRlbiBub3QgdG8gbG9nIGFzIHZlcmJvc2VseS4KKworICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL25ldC9idWd6aWxsYS5weToKKyAgICAgICAgICAtIFVwZGF0ZWQgbWVjaGFu
aXplIGltcG9ydCBzdGF0ZW1lbnQuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9uZXQvaXJjL2lyY2JvdC5weToKKyAgICAgICAgICAtIFVwZGF0ZWQgaXJjYm90IGFuZCBpcmNs
aWIgaW1wb3J0IHN0YXRlbWVudHMuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9uZXQvbmV0d29ya3RyYW5zYWN0aW9uLnB5OgorICAgICAgICAgIC0gVXBkYXRlZCBtZWNoYW5p
emUgaW1wb3J0IHN0YXRlbWVudC4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9u
L25ldC9uZXR3b3JrdHJhbnNhY3Rpb25fdW5pdHRlc3QucHk6CisgICAgICAgICAgLSBVcGRhdGVk
IG1lY2hhbml6ZSBpbXBvcnQgc3RhdGVtZW50LgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vbmV0L3N0YXR1c3NlcnZlci5weToKKyAgICAgICAgICAtIFVwZGF0ZWQgbWVjaGFu
aXplIGltcG9ydCBzdGF0ZW1lbnQuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9zeXN0ZW0vYXV0b2luc3RhbGwucHk6IEFkZGVkLgorICAgICAgICAgIC0gQWRkZWQgQXV0b0lu
c3RhbGxlciBjbGFzcy4KKyAgICAgICAgICAtIEFkZGVkIHNhbXBsZS90ZXN0aW5nIHVzYWdlIHRv
IHRoZSBfX21haW5fXyBibG9jay4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRw
YXJ0eS9fX2luaXRfXy5weToKKyAgICAgICAgICAtIFVwZGF0ZWQgdGhlIGF1dG9pbnN0YWxsIGxp
bmVzIHRvIHVzZSB0aGUgbmV3IGF1dG9pbnN0YWxsIG1ldGhvZHMuCisgICAgICAgICAgLSBBZGRl
ZCBwZXA4LnB5IHRvIHRoZSBsaXN0IG9mIGF1dG8taW5zdGFsbGVkIHBhY2thZ2VzLgorICAgICAg
ICAgIC0gQWRkZWQgYSBSRUFETUUgZmlsZSB0byB0aGUgdGFyZ2V0IGF1dG9pbnN0YWxsYXRpb24g
ZGlyZWN0b3J5CisgICAgICAgICAgICBzbyB1c2VycyBrbm93IHRoYXQgdGhlIGRpcmVjdG9yeSBp
cyBzYWZlIHRvIGRlbGV0ZS4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0
eS9hdXRvaW5zdGFsbC5weTogUmVtb3ZlZC4KKyAgICAgICAgICAtIFRoaXMgaXMgcmVwbGFjZWQg
YnkgdGhlIHJld3JpdHRlbiBhdXRvaW5zdGFsbAorICAgICAgICAgICAgd2Via2l0cHkvY29tbW9u
L3N5c3RlbS9hdXRvaW5zdGFsbC5weS4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhp
cmRwYXJ0eS9hdXRvaW5zdGFsbGVkL19faW5pdF9fLnB5OiBSZW1vdmVkLgorICAgICAgICAgIC0g
VGhlIHRhcmdldCBhdXRvaW5zdGFsbGF0aW9uIGRpcmVjdG9yeSBpcyBub3cgYXV0by1nZW5lcmF0
ZWQuCisKIDIwMTAtMDMtMjggIEd1c3Rhdm8gTm9yb25oYSBTaWx2YSAgPGduc0Bnbm9tZS5vcmc+
CiAKICAgICAgICAgTm8gcmV2aWV3LCByb2xsaW5nIG91dCByNTY2NzkuCmRpZmYgLS1naXQgYS9X
ZWJLaXRUb29scy9TY3JpcHRzL3Rlc3Qtd2Via2l0cHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3Rl
c3Qtd2Via2l0cHkKaW5kZXggNzYzYWM4YS4uOWVkZWM0ZSAxMDA3NTUKLS0tIGEvV2ViS2l0VG9v
bHMvU2NyaXB0cy90ZXN0LXdlYmtpdHB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvdGVzdC13
ZWJraXRweQpAQCAtMzEsOCArMzEsMTIgQEAKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgc3lzCiAK
KyMgRG8gbm90IGltcG9ydCBhbnkgUHl0aG9uIGNvZGUgaW5jb21wYXRpYmxlIHdpdGggUHl0aG9u
IDIuNCB1bnRpbCBhZnRlcgorIyBleGVjdXRpb24gb2YgdGhlIGluaXQoKSBtZXRob2QgYmVsb3cu
CisKIGltcG9ydCB3ZWJraXRweS5weXRob24yNC52ZXJzaW9uaW5nIGFzIHZlcnNpb25pbmcKIAor
CiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoInRlc3Qtd2Via2l0cHkiKQogCiAKQEAgLTU3LDEx
ICs2MSwxMiBAQCBkZWYgY29uZmlndXJlX2xvZ2dpbmcoKToKICAgICAjIHRoaXMgbWV0aG9kIGFj
Y29yZGluZ2x5LgogICAgIGRlZiBmaWx0ZXIocmVjb3JkKToKICAgICAgICAgIiIiRmlsdGVyIG91
dCBhdXRvaW5zdGFsbCBhbmQgbm9uLXRoaXJkLXBhcnR5IHdlYmtpdHB5IG1lc3NhZ2VzLiIiIgot
ICAgICAgICAjIEZJWE1FOiBFbmFibGUgdGhlIGxvZ2dpbmcgb2YgYXV0b2luc3RhbGwgbWVzc2Fn
ZXMgb25jZQotICAgICAgICAjICAgICAgICBhdXRvaW5zdGFsbCBpcyBhZGp1c3RlZC4gIEN1cnJl
bnRseSwgYXV0b2luc3RhbGwgbG9ncwotICAgICAgICAjICAgICAgICBJTkZPIG1lc3NhZ2VzIHdo
ZW4gaW1wb3J0aW5nIGFscmVhZHktZG93bmxvYWRlZCBwYWNrYWdlcywKLSAgICAgICAgIyAgICAg
ICAgd2hpY2ggaXMgdG9vIHZlcmJvc2UuCi0gICAgICAgIGlmIHJlY29yZC5uYW1lLnN0YXJ0c3dp
dGgoIndlYmtpdHB5LnRlc3QiKToKKyAgICAgICAgIyBGSVhNRTogRmlndXJlIG91dCBhIHdheSBu
b3QgdG8gdXNlIHN0cmluZyBoZXJlLCBmb3IgZXhhbXBsZSBieQorICAgICAgICAjICAgICAgICB1
c2luZyBzeW50YXggbGlrZSB3ZWJraXRweS50ZXN0Ll9fbmFtZV9fLiAgV2Ugd2FudCB0byBiZQor
ICAgICAgICAjICAgICAgICBzdXJlIG5vdCB0byBpbXBvcnQgYW55IG5vbi1QeXRob24gMi40IGNv
ZGUsIHRob3VnaCwgdW50aWwKKyAgICAgICAgIyAgICAgICAgYWZ0ZXIgdGhlIHZlcnNpb24tY2hl
Y2tpbmcgY29kZSBoYXMgZXhlY3V0ZWQuCisgICAgICAgIGlmIHJlY29yZC5uYW1lLnN0YXJ0c3dp
dGgoIndlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uYXV0b2luc3RhbGwiKSBvciBcCisgICAgICAgICAg
ICByZWNvcmQubmFtZS5zdGFydHN3aXRoKCJ3ZWJraXRweS50ZXN0Iik6CiAgICAgICAgICAgICBy
ZXR1cm4gVHJ1ZQogICAgICAgICBpZiByZWNvcmQubmFtZS5zdGFydHN3aXRoKCJ3ZWJraXRweSIp
OgogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvYnVnemlsbGEucHkgYi9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9uZXQvYnVnemlsbGEucHkKaW5kZXggODcwY2UyOS4uZTE0M2I4NiAx
MDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L2J1Z3pp
bGxhLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC9idWd6
aWxsYS5weQpAQCAtNDAsNyArNDAsNyBAQCBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZGVw
cmVjYXRlZF9sb2dnaW5nIGltcG9ydCBlcnJvciwgbG9nCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5j
b25maWcuY29tbWl0dGVycyBpbXBvcnQgQ29tbWl0dGVyTGlzdAogZnJvbSB3ZWJraXRweS5jb21t
b24ubmV0LmNyZWRlbnRpYWxzIGltcG9ydCBDcmVkZW50aWFscwogZnJvbSB3ZWJraXRweS5jb21t
b24uc3lzdGVtLnVzZXIgaW1wb3J0IFVzZXIKLWZyb20gd2Via2l0cHkudGhpcmRwYXJ0eS5hdXRv
aW5zdGFsbGVkIGltcG9ydCBCcm93c2VyCitmcm9tIHdlYmtpdHB5LnRoaXJkcGFydHkuYXV0b2lu
c3RhbGxlZC5tZWNoYW5pemUgaW1wb3J0IEJyb3dzZXIKIAogIyBXZWJLaXQgaW5jbHVkZXMgYSBi
dWlsdCBjb3B5IG9mIEJlYXV0aWZ1bFNvdXAgaW4gU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5
CiAjIHNvIHRoaXMgaW1wb3J0IHNob3VsZCBhbHdheXMgc3VjY2VlZC4KZGlmZiAtLWdpdCBhL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC9pcmMvaXJjYm90LnB5IGIvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L2lyYy9pcmNib3QucHkKaW5kZXgg
NGYwMWMzMC4uZjU5OTM2MyAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vbmV0L2lyYy9pcmNib3QucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vbmV0L2lyYy9pcmNib3QucHkKQEAgLTI5LDggKzI5LDggQEAKIGltcG9ydCB3
ZWJraXRweS5jb21tb24uY29uZmlnLmlyYyBhcyBjb25maWdfaXJjCiAKIGZyb20gd2Via2l0cHku
Y29tbW9uLnRocmVhZC5tZXNzYWdlcHVtcCBpbXBvcnQgTWVzc2FnZVB1bXAsIE1lc3NhZ2VQdW1w
RGVsZWdhdGUKLWZyb20gd2Via2l0cHkudGhpcmRwYXJ0eS5hdXRvaW5zdGFsbGVkIGltcG9ydCBp
cmNib3QKLWZyb20gd2Via2l0cHkudGhpcmRwYXJ0eS5hdXRvaW5zdGFsbGVkIGltcG9ydCBpcmNs
aWIKK2Zyb20gd2Via2l0cHkudGhpcmRwYXJ0eS5hdXRvaW5zdGFsbGVkLmlyYyBpbXBvcnQgaXJj
Ym90Citmcm9tIHdlYmtpdHB5LnRoaXJkcGFydHkuYXV0b2luc3RhbGxlZC5pcmMgaW1wb3J0IGly
Y2xpYgogCiAKIGNsYXNzIElSQ0JvdERlbGVnYXRlKG9iamVjdCk6CmRpZmYgLS1naXQgYS9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvbmV0d29ya3RyYW5zYWN0aW9uLnB5
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L25ldHdvcmt0cmFuc2Fj
dGlvbi5weQppbmRleCAyODEwMmNhLi4zZGQ5OTQwIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvbmV0d29ya3RyYW5zYWN0aW9uLnB5CisrKyBiL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC9uZXR3b3JrdHJhbnNhY3Rpb24u
cHkKQEAgLTI4LDcgKzI4LDcgQEAKIAogaW1wb3J0IHRpbWUKIAotZnJvbSB3ZWJraXRweS50aGly
ZHBhcnR5LmF1dG9pbnN0YWxsZWQgaW1wb3J0IEhUVFBFcnJvcgorZnJvbSB3ZWJraXRweS50aGly
ZHBhcnR5LmF1dG9pbnN0YWxsZWQubWVjaGFuaXplIGltcG9ydCBIVFRQRXJyb3IKIGZyb20gd2Vi
a2l0cHkuY29tbW9uLnN5c3RlbS5kZXByZWNhdGVkX2xvZ2dpbmcgaW1wb3J0IGxvZwogCiAKZGlm
ZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC9uZXR3b3Jr
dHJhbnNhY3Rpb25fdW5pdHRlc3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9uZXQvbmV0d29ya3RyYW5zYWN0aW9uX3VuaXR0ZXN0LnB5CmluZGV4IGY1YzNlNmMuLjcy
ZmE3ZGQgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25l
dC9uZXR3b3JrdHJhbnNhY3Rpb25fdW5pdHRlc3QucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tb24vbmV0L25ldHdvcmt0cmFuc2FjdGlvbl91bml0dGVzdC5weQpAQCAt
MjksNyArMjksNyBAQAogaW1wb3J0IHVuaXR0ZXN0CiAKIGZyb20gd2Via2l0cHkuY29tbW9uLm5l
dC5uZXR3b3JrdHJhbnNhY3Rpb24gaW1wb3J0IE5ldHdvcmtUcmFuc2FjdGlvbiwgTmV0d29ya1Rp
bWVvdXQKLWZyb20gd2Via2l0cHkudGhpcmRwYXJ0eS5hdXRvaW5zdGFsbGVkIGltcG9ydCBIVFRQ
RXJyb3IKK2Zyb20gd2Via2l0cHkudGhpcmRwYXJ0eS5hdXRvaW5zdGFsbGVkLm1lY2hhbml6ZSBp
bXBvcnQgSFRUUEVycm9yCiAKIGNsYXNzIE5ldHdvcmtUcmFuc2FjdGlvblRlc3QodW5pdHRlc3Qu
VGVzdENhc2UpOgogICAgIGV4Y2VwdGlvbiA9IEV4Y2VwdGlvbigiVGVzdCBleGNlcHRpb24iKQpk
aWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L3N0YXR1
c3NlcnZlci5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC9zdGF0
dXNzZXJ2ZXIucHkKaW5kZXggYTE2NzYyZS4uYzBjMDc1YiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L3N0YXR1c3NlcnZlci5weQorKysgYi9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvc3RhdHVzc2VydmVyLnB5CkBAIC0y
Nyw4ICsyNyw4IEBACiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKIGZyb20gd2Via2l0cHkuY29tbW9uLm5ldC5u
ZXR3b3JrdHJhbnNhY3Rpb24gaW1wb3J0IE5ldHdvcmtUcmFuc2FjdGlvbgotZnJvbSB3ZWJraXRw
eS50aGlyZHBhcnR5LmF1dG9pbnN0YWxsZWQgaW1wb3J0IEJyb3dzZXIKIGZyb20gd2Via2l0cHku
Y29tbW9uLnN5c3RlbS5kZXByZWNhdGVkX2xvZ2dpbmcgaW1wb3J0IGxvZworZnJvbSB3ZWJraXRw
eS50aGlyZHBhcnR5LmF1dG9pbnN0YWxsZWQubWVjaGFuaXplIGltcG9ydCBCcm93c2VyCiAKICMg
V2ViS2l0IGluY2x1ZGVzIGEgYnVpbHQgY29weSBvZiBCZWF1dGlmdWxTb3VwIGluIFNjcmlwdHMv
d2Via2l0cHkvdGhpcmRwYXJ0eQogIyBzbyB0aGlzIGltcG9ydCBzaG91bGQgYWx3YXlzIHN1Y2Nl
ZWQuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0
ZW0vYXV0b2luc3RhbGwucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9z
eXN0ZW0vYXV0b2luc3RhbGwucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4u
NjA5ZGFjYQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3N5c3RlbS9hdXRvaW5zdGFsbC5weQpAQCAtMCwwICsxLDUyMCBAQAorIyBDb3B5cmln
aHQgKGMpIDIwMDksIERhbmllbCBLcmVjaCBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmln
aHQgKEMpIDIwMTAgQ2hyaXMgSmVyZG9uZWsgKGNqZXJkb25la0B3ZWJraXQub3JnKQorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMKKyMgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBEYW5pZWwgS3JlY2ggbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworIiIiU3VwcG9ydCBmb3IgYXV0b21hdGljYWxseSBkb3dubG9hZGluZyBQ
eXRob24gcGFja2FnZXMgZnJvbSBhbiBVUkwuIiIiCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQg
bmV3CitpbXBvcnQgb3MKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBzeXMKK2ltcG9ydCB0YXJmaWxl
CitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCB1cmxsaWIKK2ltcG9ydCB1cmxwYXJzZQoraW1wb3J0
IHppcGZpbGUKK2ltcG9ydCB6aXBpbXBvcnQKKworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9f
bmFtZV9fKQorCisKK2NsYXNzIEF1dG9JbnN0YWxsZXIob2JqZWN0KToKKworICAgICIiIlN1cHBv
cnRzIGF1dG9tYXRpY2FsbHkgaW5zdGFsbGluZyBQeXRob24gcGFja2FnZXMgZnJvbSBhbiBVUkwu
CisKKyAgICBTdXBwb3J0cyB1bmNvbXByZXNzZWQgZmlsZXMsIC50YXIuZ3osIGFuZCAuemlwIGZv
cm1hdHMuCisKKyAgICBCYXNpYyB1c2FnZToKKworICAgIGluc3RhbGxlciA9IEF1dG9JbnN0YWxs
ZXIoKQorCisgICAgaW5zdGFsbGVyLmluc3RhbGwodXJsPSJodHRwOi8vcHlwaS5weXRob24ub3Jn
L3BhY2thZ2VzL3NvdXJjZS9wL3BlcDgvcGVwOC0wLjUuMC50YXIuZ3ojbWQ1PTUxMmE4MThhZjk5
NzkyOTBjZDYxOWNjZThlOWMyZTJiIiwKKyAgICAgICAgICAgICAgICAgICAgICB1cmxfc3VicGF0
aD0icGVwOC0wLjUuMC9wZXA4LnB5IikKKyAgICBpbnN0YWxsZXIuaW5zdGFsbCh1cmw9Imh0dHA6
Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvc291cmNlL20vbWVjaGFuaXplL21lY2hhbml6ZS0w
LjEuMTEuemlwIiwKKyAgICAgICAgICAgICAgICAgICAgICB1cmxfc3VicGF0aD0ibWVjaGFuaXpl
IikKKworICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFwcGVuZF90b19zZWFyY2hf
cGF0aD1GYWxzZSwgbWFrZV9wYWNrYWdlPVRydWUsCisgICAgICAgICAgICAgICAgIHRhcmdldF9k
aXI9Tm9uZSwgdGVtcF9kaXI9Tm9uZSk6CisgICAgICAgICIiIkNyZWF0ZSBhbiBBdXRvSW5zdGFs
bGVyIGluc3RhbmNlLCBhbmQgc2V0IHVwIHRoZSB0YXJnZXQgZGlyZWN0b3J5LgorCisgICAgICAg
IEFyZ3M6CisgICAgICAgICAgYXBwZW5kX3RvX3NlYXJjaF9wYXRoOiBBIGJvb2xlYW4gdmFsdWUg
b2Ygd2hldGhlciB0byBhcHBlbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0YXJnZXQgZGlyZWN0b3J5IHRvIHRoZSBzeXMucGF0aCBzZWFyY2ggcGF0aC4KKyAgICAgICAg
ICBtYWtlX3BhY2thZ2U6IEEgYm9vbGVhbiB2YWx1ZSBvZiB3aGV0aGVyIHRvIG1ha2UgdGhlIHRh
cmdldAorICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGEgcGFja2FnZS4gIFRoaXMg
YWRkcyBhbiBfX2luaXRfXy5weSBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUg
dGFyZ2V0IGRpcmVjdG9yeSAtLSBhbGxvd2luZyBwYWNrYWdlcyBhbmQKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1vZHVsZXMgd2l0aGluIHRoZSB0YXJnZXQgZGlyZWN0b3J5IHRvIGJlIGltcG9y
dGVkCisgICAgICAgICAgICAgICAgICAgICAgICBleHBsaWNpdGx5IHVzaW5nIGRvdHRlZCBtb2R1
bGUgbmFtZXMuCisgICAgICAgICAgdGFyZ2V0X2RpcjogVGhlIGRpcmVjdG9yeSBwYXRoIHRvIHdo
aWNoIHBhY2thZ2VzIHNob3VsZCBiZSBpbnN0YWxsZWQuCisgICAgICAgICAgICAgICAgICAgICAg
RGVmYXVsdHMgdG8gYSBzdWJkaXJlY3Rvcnkgb2YgdGhlIGZvbGRlciBjb250YWluaW5nCisgICAg
ICAgICAgICAgICAgICAgICAgdGhpcyBtb2R1bGUgY2FsbGVkICJhdXRvaW5zdGFsbGVkIi4KKyAg
ICAgICAgICB0ZW1wX2RpcjogVGhlIGRpcmVjdG9yeSBwYXRoIHRvIHVzZSBmb3IgYW55IHRlbXBv
cmFyeSBmaWxlcworICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZWQgd2hpbGUgZG93bmxvYWRp
bmcsIHVuemlwcGluZywgYW5kIGV4dHJhY3RpbmcKKyAgICAgICAgICAgICAgICAgICAgcGFja2Fn
ZXMgdG8gaW5zdGFsbC4gIERlZmF1bHRzIHRvIGEgc3RhbmRhcmQgdGVtcG9yYXJ5CisgICAgICAg
ICAgICAgICAgICAgIGxvY2F0aW9uIGdlbmVyYXRlZCBieSB0aGUgdGVtcGZpbGUgbW9kdWxlLiAg
VGhpcworICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIgc2hvdWxkIG5vcm1hbGx5IGJlIHVz
ZWQgb25seSBmb3IgZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICAgICAgdGVzdGluZy4KKwor
ICAgICAgICAiIiIKKyAgICAgICAgaWYgdGFyZ2V0X2RpciBpcyBOb25lOgorICAgICAgICAgICAg
dGhpc19kaXIgPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pCisgICAgICAgICAgICB0YXJnZXRf
ZGlyID0gb3MucGF0aC5qb2luKHRoaXNfZGlyLCAiYXV0b2luc3RhbGxlZCIpCisKKyAgICAgICAg
IyBFbnN1cmUgdGhhdCB0aGUgdGFyZ2V0IGRpcmVjdG9yeSBleGlzdHMuCisgICAgICAgIHNlbGYu
X3NldF91cF90YXJnZXRfZGlyKHRhcmdldF9kaXIsIGFwcGVuZF90b19zZWFyY2hfcGF0aCwgbWFr
ZV9wYWNrYWdlKQorCisgICAgICAgIHNlbGYuX3RhcmdldF9kaXIgPSB0YXJnZXRfZGlyCisgICAg
ICAgIHNlbGYuX3RlbXBfZGlyID0gdGVtcF9kaXIKKworICAgIGRlZiBfbG9nX3RyYW5zZmVyKHNl
bGYsIG1lc3NhZ2UsIHNvdXJjZSwgdGFyZ2V0LCBsb2dfbWV0aG9kPU5vbmUpOgorICAgICAgICAi
IiJMb2cgYSBkZWJ1ZyBtZXNzYWdlIHRoYXQgaW52b2x2ZXMgYSBzb3VyY2UgYW5kIHRhcmdldC4i
IiIKKyAgICAgICAgaWYgbG9nX21ldGhvZCBpcyBOb25lOgorICAgICAgICAgICAgbG9nX21ldGhv
ZCA9IF9sb2cuZGVidWcKKworICAgICAgICBsb2dfbWV0aG9kKCIlcyIgJSBtZXNzYWdlKQorICAg
ICAgICBsb2dfbWV0aG9kKCcgICAgRnJvbTogIiVzIicgJSBzb3VyY2UpCisgICAgICAgIGxvZ19t
ZXRob2QoJyAgICAgIFRvOiAiJXMiJyAlIHRhcmdldCkKKworICAgIGRlZiBfY3JlYXRlX2RpcmVj
dG9yeShzZWxmLCBwYXRoLCBuYW1lPU5vbmUpOgorICAgICAgICAiIiJDcmVhdGUgYSBkaXJlY3Rv
cnkuIiIiCisgICAgICAgIGxvZyA9IF9sb2cuZGVidWcKKworICAgICAgICBuYW1lID0gbmFtZSAr
ICIgIiBpZiBuYW1lIGlzIG5vdCBOb25lIGVsc2UgIiIKKyAgICAgICAgbG9nKCdDcmVhdGluZyAl
c2RpcmVjdG9yeS4uLicgJSBuYW1lKQorICAgICAgICBsb2coJyAgICAiJXMiJyAlIHBhdGgpCisK
KyAgICAgICAgb3MubWFrZWRpcnMocGF0aCkKKworICAgIGRlZiBfd3JpdGVfZmlsZShzZWxmLCBw
YXRoLCB0ZXh0KToKKyAgICAgICAgIiIiQ3JlYXRlIGEgZmlsZSBhdCB0aGUgZ2l2ZW4gcGF0aCB3
aXRoIGdpdmVuIHRleHQuCisKKyAgICAgICAgVGhpcyBtZXRob2Qgb3ZlcndyaXRlcyBhbnkgZXhp
c3RpbmcgZmlsZS4KKworICAgICAgICAiIiIKKyAgICAgICAgX2xvZy5kZWJ1ZygiQ3JlYXRpbmcg
ZmlsZS4uLiIpCisgICAgICAgIF9sb2cuZGVidWcoJyAgICAiJXMiJyAlIHBhdGgpCisgICAgICAg
IGZpbGUgPSBvcGVuKHBhdGgsICJ3IikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZmlsZS53
cml0ZSh0ZXh0KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZmlsZS5jbG9zZSgpCisK
KyAgICBkZWYgX3NldF91cF90YXJnZXRfZGlyKHNlbGYsIHRhcmdldF9kaXIsIGFwcGVuZF90b19z
ZWFyY2hfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VfcGFja2FnZSk6Cisg
ICAgICAgICIiIlNldCB1cCBhIHRhcmdldCBkaXJlY3RvcnkuCisKKyAgICAgICAgQXJnczoKKyAg
ICAgICAgICB0YXJnZXRfZGlyOiBUaGUgcGF0aCB0byB0aGUgdGFyZ2V0IGRpcmVjdG9yeSB0byBz
ZXQgdXAuCisgICAgICAgICAgYXBwZW5kX3RvX3NlYXJjaF9wYXRoOiBBIGJvb2xlYW4gdmFsdWUg
b2Ygd2hldGhlciB0byBhcHBlbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0YXJnZXQgZGlyZWN0b3J5IHRvIHRoZSBzeXMucGF0aCBzZWFyY2ggcGF0aC4KKyAgICAgICAg
ICBtYWtlX3BhY2thZ2U6IEEgYm9vbGVhbiB2YWx1ZSBvZiB3aGV0aGVyIHRvIG1ha2UgdGhlIHRh
cmdldAorICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGEgcGFja2FnZS4gIFRoaXMg
YWRkcyBhbiBfX2luaXRfXy5weSBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUg
dGFyZ2V0IGRpcmVjdG9yeSAtLSBhbGxvd2luZyBwYWNrYWdlcyBhbmQKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1vZHVsZXMgd2l0aGluIHRoZSB0YXJnZXQgZGlyZWN0b3J5IHRvIGJlIGltcG9y
dGVkCisgICAgICAgICAgICAgICAgICAgICAgICBleHBsaWNpdGx5IHVzaW5nIGRvdHRlZCBtb2R1
bGUgbmFtZXMuCisKKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh0
YXJnZXRfZGlyKToKKyAgICAgICAgICAgIHNlbGYuX2NyZWF0ZV9kaXJlY3RvcnkodGFyZ2V0X2Rp
ciwgImF1dG9pbnN0YWxsIHRhcmdldCIpCisKKyAgICAgICAgaWYgYXBwZW5kX3RvX3NlYXJjaF9w
YXRoOgorICAgICAgICAgICAgc3lzLnBhdGguYXBwZW5kKHRhcmdldF9kaXIpCisKKyAgICAgICAg
aWYgbWFrZV9wYWNrYWdlOgorICAgICAgICAgICAgaW5pdF9wYXRoID0gb3MucGF0aC5qb2luKHRh
cmdldF9kaXIsICJfX2luaXRfXy5weSIpCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlz
dHMoaW5pdF9wYXRoKToKKyAgICAgICAgICAgICAgICB0ZXh0ID0gKCIjIFRoaXMgZmlsZSBpcyBy
ZXF1aXJlZCBmb3IgUHl0aG9uIHRvIHNlYXJjaCB0aGlzICIKKyAgICAgICAgICAgICAgICAgICAg
ICAgICJkaXJlY3RvcnkgZm9yIG1vZHVsZXMuXG4iKQorICAgICAgICAgICAgICAgIHNlbGYuX3dy
aXRlX2ZpbGUoaW5pdF9wYXRoLCB0ZXh0KQorCisgICAgZGVmIF9jcmVhdGVfc2NyYXRjaF9kaXJl
Y3RvcnlfaW5uZXIoc2VsZiwgcHJlZml4KToKKyAgICAgICAgIiIiQ3JlYXRlIGEgc2NyYXRjaCBk
aXJlY3Rvcnkgd2l0aG91dCBleGNlcHRpb24gaGFuZGxpbmcuCisKKyAgICAgICAgQ3JlYXRlcyBh
IHNjcmF0Y2ggZGlyZWN0b3J5IGluc2lkZSB0aGUgQXV0b0luc3RhbGxlciB0ZW1wCisgICAgICAg
IGRpcmVjdG9yeSBzZWxmLl90ZW1wX2Rpciwgb3IgaW5zaWRlIGEgcGxhdGZvcm0tZGVwZW5kZW50
IHRlbXAKKyAgICAgICAgZGlyZWN0b3J5IGlmIHNlbGYuX3RlbXBfZGlyIGlzIE5vbmUuICBSZXR1
cm5zIHRoZSBwYXRoIHRvIHRoZQorICAgICAgICBjcmVhdGVkIHNjcmF0Y2ggZGlyZWN0b3J5Lgor
CisgICAgICAgIFJhaXNlczoKKyAgICAgICAgICBPU0Vycm9yOiBbRXJybm8gMl0gaWYgdGhlIGNv
bnRhaW5pbmcgdGVtcCBkaXJlY3Rvcnkgc2VsZi5fdGVtcF9kaXIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaXMgbm90IE5vbmUgYW5kIGRvZXMgbm90IGV4aXN0LgorCisgICAgICAgICIi
IgorICAgICAgICAjIFRoZSB0ZW1wZmlsZS5ta2R0ZW1wKCkgbWV0aG9kIGZ1bmN0aW9uIHJlcXVp
cmVzIHRoYXQgdGhlCisgICAgICAgICMgZGlyZWN0b3J5IGNvcnJlc3BvbmRpbmcgdG8gdGhlICJk
aXIiIHBhcmFtZXRlciBhbHJlYWR5IGV4aXN0CisgICAgICAgICMgaWYgaXQgaXMgbm90IE5vbmUu
CisgICAgICAgIHNjcmF0Y2hfZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9cHJlZml4LCBk
aXI9c2VsZi5fdGVtcF9kaXIpCisgICAgICAgIHJldHVybiBzY3JhdGNoX2RpcgorCisgICAgZGVm
IF9jcmVhdGVfc2NyYXRjaF9kaXJlY3Rvcnkoc2VsZiwgdGFyZ2V0X25hbWUpOgorICAgICAgICAi
IiJDcmVhdGUgYSB0ZW1wb3Jhcnkgc2NyYXRjaCBkaXJlY3RvcnksIGFuZCByZXR1cm4gaXRzIHBh
dGguCisKKyAgICAgICAgVGhlIHNjcmF0Y2ggZGlyZWN0b3J5IGlzIGdlbmVyYXRlZCBpbnNpZGUg
dGhlIHRlbXAgZGlyZWN0b3J5CisgICAgICAgIG9mIHRoaXMgQXV0b0luc3RhbGxlciBpbnN0YW5j
ZS4gIFRoaXMgbWV0aG9kIGFsc28gY3JlYXRlcyB0aGUKKyAgICAgICAgdGVtcCBkaXJlY3Rvcnkg
aWYgaXQgZG9lcyBub3QgYWxyZWFkeSBleGlzdC4KKworICAgICAgICAiIiIKKyAgICAgICAgcHJl
Zml4ID0gdGFyZ2V0X25hbWUgKyAiXyIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2NyYXRj
aF9kaXIgPSBzZWxmLl9jcmVhdGVfc2NyYXRjaF9kaXJlY3RvcnlfaW5uZXIocHJlZml4KQorICAg
ICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICMgSGFuZGxlIGNhc2Ugb2YgY29udGFp
bmluZyB0ZW1wIGRpcmVjdG9yeSBub3QgZXhpc3RpbmctLQorICAgICAgICAgICAgIyBPU0Vycm9y
OiBbRXJybm8gMl0gTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeTouLi4KKyAgICAgICAgICAgIHRl
bXBfZGlyID0gc2VsZi5fdGVtcF9kaXIKKyAgICAgICAgICAgIGlmIHRlbXBfZGlyIGlzIE5vbmUg
b3Igb3MucGF0aC5leGlzdHModGVtcF9kaXIpOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAg
ICAgICAgICAjIEVsc2UgdHJ5IGFnYWluIGFmdGVyIGNyZWF0aW5nIHRoZSB0ZW1wIGRpcmVjdG9y
eS4KKyAgICAgICAgICAgIHNlbGYuX2NyZWF0ZV9kaXJlY3RvcnkodGVtcF9kaXIsICJhdXRvaW5z
dGFsbCB0ZW1wIikKKyAgICAgICAgICAgIHNjcmF0Y2hfZGlyID0gc2VsZi5fY3JlYXRlX3NjcmF0
Y2hfZGlyZWN0b3J5X2lubmVyKHByZWZpeCkKKworICAgICAgICByZXR1cm4gc2NyYXRjaF9kaXIK
KworICAgIGRlZiBfdXJsX2Rvd25sb2FkZWRfcGF0aChzZWxmLCB0YXJnZXRfbmFtZSk6CisgICAg
ICAgICIiIlJldHVybiB0aGUgcGF0aCB0byB0aGUgZmlsZSBjb250YWluaW5nIHRoZSBVUkwgZG93
bmxvYWRlZC4iIiIKKyAgICAgICAgZmlsZW5hbWUgPSAiLiVzLnVybCIgJSB0YXJnZXRfbmFtZQor
ICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKHNlbGYuX3RhcmdldF9kaXIsIGZpbGVuYW1lKQor
ICAgICAgICByZXR1cm4gcGF0aAorCisgICAgZGVmIF9pc19kb3dubG9hZGVkKHNlbGYsIHRhcmdl
dF9uYW1lLCB1cmwpOgorICAgICAgICAiIiJSZXR1cm4gd2hldGhlciBhIHBhY2thZ2UgdmVyc2lv
biBoYXMgYmVlbiBkb3dubG9hZGVkLiIiIgorICAgICAgICB2ZXJzaW9uX3BhdGggPSBzZWxmLl91
cmxfZG93bmxvYWRlZF9wYXRoKHRhcmdldF9uYW1lKQorCisgICAgICAgIF9sb2cuZGVidWcoJ0No
ZWNraW5nICVzIFVSTCBkb3dubG9hZGVkLi4uJyAlIHRhcmdldF9uYW1lKQorICAgICAgICBfbG9n
LmRlYnVnKCcgICAgIiVzIicgJSB2ZXJzaW9uX3BhdGgpCisKKyAgICAgICAgaWYgbm90IG9zLnBh
dGguZXhpc3RzKHZlcnNpb25fcGF0aCk6CisgICAgICAgICAgICAjIFRoZW4gbm8gcGFja2FnZSB2
ZXJzaW9uIGhhcyBiZWVuIGRvd25sb2FkZWQuCisgICAgICAgICAgICBfbG9nLmRlYnVnKCJObyBV
UkwgZmlsZSBmb3VuZC4iKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgZmls
ZSA9IG9wZW4odmVyc2lvbl9wYXRoLCAiciIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHZl
cnNpb24gPSBmaWxlLnJlYWQoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZmlsZS5j
bG9zZSgpCisKKyAgICAgICAgcmV0dXJuIHZlcnNpb24uc3RyaXAoKSA9PSB1cmwuc3RyaXAoKQor
CisgICAgZGVmIF9yZWNvcmRfdXJsX2Rvd25sb2FkZWQoc2VsZiwgdGFyZ2V0X25hbWUsIHVybCk6
CisgICAgICAgICIiIlJlY29yZCB0aGUgVVJMIGRvd25sb2FkZWQgdG8gYSBmaWxlLiIiIgorICAg
ICAgICB2ZXJzaW9uX3BhdGggPSBzZWxmLl91cmxfZG93bmxvYWRlZF9wYXRoKHRhcmdldF9uYW1l
KQorICAgICAgICBfbG9nLmRlYnVnKCJSZWNvcmRpbmcgVVJMIGRvd25sb2FkZWQuLi4iKQorICAg
ICAgICBfbG9nLmRlYnVnKCcgICAgVVJMOiAiJXMiJyAlIHVybCkKKyAgICAgICAgX2xvZy5kZWJ1
ZygnICAgICBUbzogIiVzIicgJSB2ZXJzaW9uX3BhdGgpCisKKyAgICAgICAgc2VsZi5fd3JpdGVf
ZmlsZSh2ZXJzaW9uX3BhdGgsIHVybCkKKworICAgIGRlZiBfZXh0cmFjdF90YXJneihzZWxmLCBw
YXRoLCBzY3JhdGNoX2Rpcik6CisgICAgICAgICMgdGFyZmlsZS5leHRyYWN0YWxsKCkgZXh0cmFj
dHMgdG8gYSBwYXRoIHdpdGhvdXQgdGhlCisgICAgICAgICMgdHJhaWxpbmcgIi50YXIuZ3oiLgor
ICAgICAgICB0YXJnZXRfYmFzZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHBhdGhbOi1sZW4oIi50
YXIuZ3oiKV0pCisgICAgICAgIHRhcmdldF9wYXRoID0gb3MucGF0aC5qb2luKHNjcmF0Y2hfZGly
LCB0YXJnZXRfYmFzZW5hbWUpCisKKyAgICAgICAgc2VsZi5fbG9nX3RyYW5zZmVyKCJTdGFydGlu
ZyBndW56aXAvZXh0cmFjdC4uLiIsIHBhdGgsIHRhcmdldF9wYXRoKQorCisgICAgICAgIHRyeToK
KyAgICAgICAgICAgIHRhcl9maWxlID0gdGFyZmlsZS5vcGVuKHBhdGgpCisgICAgICAgIGV4Y2Vw
dCB0YXJmaWxlLlJlYWRFcnJvciwgZXJyOgorICAgICAgICAgICAgIyBBcHBlbmQgZXhpc3Rpbmcg
RXJyb3IgbWVzc2FnZSB0byBuZXcgRXJyb3IuCisgICAgICAgICAgICBtZXNzYWdlID0gKCJDb3Vs
ZCBub3Qgb3BlbiB0YXIgZmlsZTogJXNcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIiBUaGUg
ZmlsZSBwcm9iYWJseSBkb2VzIG5vdCBoYXZlIHRoZSBjb3JyZWN0IGZvcm1hdC5cbiIKKyAgICAg
ICAgICAgICAgICAgICAgICAgIiAtLT4gSW5uZXIgbWVzc2FnZTogJXMiCisgICAgICAgICAgICAg
ICAgICAgICAgICUgKHBhdGgsIGVycikpCisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24obWVz
c2FnZSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICAjIFRoaXMgaXMgaGVscGZ1bCBmb3Ig
ZGVidWdnaW5nIHB1cnBvc2VzLgorICAgICAgICAgICAgX2xvZy5kZWJ1ZygiTGlzdGluZyB0YXIg
ZmlsZSBjb250ZW50cy4uLiIpCisgICAgICAgICAgICBmb3IgbmFtZSBpbiB0YXJfZmlsZS5nZXRu
YW1lcygpOgorICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoJyAgICAqICIlcyInICUgbmFtZSkK
KyAgICAgICAgICAgIF9sb2cuZGVidWcoIkV4dHJhY3RpbmcgZ3ppcHBlZCB0YXIgZmlsZS4uLiIp
CisgICAgICAgICAgICB0YXJfZmlsZS5leHRyYWN0YWxsKHRhcmdldF9wYXRoKQorICAgICAgICBm
aW5hbGx5OgorICAgICAgICAgICAgdGFyX2ZpbGUuY2xvc2UoKQorCisgICAgICAgIHJldHVybiB0
YXJnZXRfcGF0aAorCisgICAgIyBUaGlzIGlzIGEgcmVwbGFjZW1lbnQgZm9yIFppcEZpbGUuZXh0
cmFjdGFsbCgpLCB3aGljaCBpcworICAgICMgYXZhaWxhYmxlIGluIFB5dGhvbiAyLjYgYnV0IG5v
dCBpbiBlYXJsaWVyIHZlcnNpb25zLgorICAgIGRlZiBfZXh0cmFjdF9hbGwoc2VsZiwgemlwX2Zp
bGUsIHRhcmdldF9kaXIpOgorICAgICAgICBzZWxmLl9sb2dfdHJhbnNmZXIoIkV4dHJhY3Rpbmcg
emlwIGZpbGUuLi4iLCB6aXBfZmlsZSwgdGFyZ2V0X2RpcikKKworICAgICAgICAjIFRoaXMgaXMg
aGVscGZ1bCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLgorICAgICAgICBfbG9nLmRlYnVnKCJMaXN0
aW5nIHppcCBmaWxlIGNvbnRlbnRzLi4uIikKKyAgICAgICAgZm9yIG5hbWUgaW4gemlwX2ZpbGUu
bmFtZWxpc3QoKToKKyAgICAgICAgICAgIF9sb2cuZGVidWcoJyAgICAqICIlcyInICUgbmFtZSkK
KworICAgICAgICBmb3IgbmFtZSBpbiB6aXBfZmlsZS5uYW1lbGlzdCgpOgorICAgICAgICAgICAg
cGF0aCA9IG9zLnBhdGguam9pbih0YXJnZXRfZGlyLCBuYW1lKQorICAgICAgICAgICAgc2VsZi5f
bG9nX3RyYW5zZmVyKCJFeHRyYWN0aW5nLi4uIiwgbmFtZSwgcGF0aCkKKworICAgICAgICAgICAg
aWYgbm90IG9zLnBhdGguYmFzZW5hbWUocGF0aCk6CisgICAgICAgICAgICAgICAgIyBUaGVuIHRo
ZSBwYXRoIGVuZHMgaW4gYSBzbGFzaCwgc28gaXQgaXMgYSBkaXJlY3RvcnkuCisgICAgICAgICAg
ICAgICAgc2VsZi5fY3JlYXRlX2RpcmVjdG9yeShwYXRoKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlCisgICAgICAgICAgICAjIE90aGVyd2lzZSwgaXQgaXMgYSBmaWxlLgorCisgICAgICAgICAg
ICB0cnk6CisgICAgICAgICAgICAgICAgb3V0ZmlsZSA9IG9wZW4ocGF0aCwgJ3diJykKKyAgICAg
ICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlcnI6CisgICAgICAgICAgICAgICAgIyBOb3QgYWxsIHpp
cCBmaWxlcyBzZWVtIHRvIGxpc3QgdGhlIGRpcmVjdG9yaWVzIGV4cGxpY2l0bHksCisgICAgICAg
ICAgICAgICAgIyBzbyB0cnkgYWdhaW4gYWZ0ZXIgY3JlYXRpbmcgdGhlIGNvbnRhaW5pbmcgZGly
ZWN0b3J5LgorICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoIkdvdCBJT0Vycm9yOiByZXRyeWlu
ZyBhZnRlciBjcmVhdGluZyBkaXJlY3RvcnkuLi4iKQorICAgICAgICAgICAgICAgIGRpciA9IG9z
LnBhdGguZGlybmFtZShwYXRoKQorICAgICAgICAgICAgICAgIHNlbGYuX2NyZWF0ZV9kaXJlY3Rv
cnkoZGlyKQorICAgICAgICAgICAgICAgIG91dGZpbGUgPSBvcGVuKHBhdGgsICd3YicpCisKKyAg
ICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvdXRmaWxlLndyaXRlKHppcF9maWxlLnJl
YWQobmFtZSkpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIG91dGZpbGUu
Y2xvc2UoKQorCisgICAgZGVmIF91bnppcChzZWxmLCBwYXRoLCBzY3JhdGNoX2Rpcik6CisgICAg
ICAgICMgemlwZmlsZS5leHRyYWN0YWxsKCkgZXh0cmFjdHMgdG8gYSBwYXRoIHdpdGhvdXQgdGhl
CisgICAgICAgICMgdHJhaWxpbmcgIi56aXAiLgorICAgICAgICB0YXJnZXRfYmFzZW5hbWUgPSBv
cy5wYXRoLmJhc2VuYW1lKHBhdGhbOi1sZW4oIi56aXAiKV0pCisgICAgICAgIHRhcmdldF9wYXRo
ID0gb3MucGF0aC5qb2luKHNjcmF0Y2hfZGlyLCB0YXJnZXRfYmFzZW5hbWUpCisKKyAgICAgICAg
c2VsZi5fbG9nX3RyYW5zZmVyKCJTdGFydGluZyB1bnppcC4uLiIsIHBhdGgsIHRhcmdldF9wYXRo
KQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHppcF9maWxlID0gemlwZmlsZS5aaXBGaWxl
KHBhdGgsICJyIikKKyAgICAgICAgZXhjZXB0IHppcGZpbGUuQmFkWmlwZmlsZSwgZXJyOgorICAg
ICAgICAgICAgbWVzc2FnZSA9ICgiQ291bGQgbm90IG9wZW4gemlwIGZpbGU6ICVzXG4iCisgICAg
ICAgICAgICAgICAgICAgICAgICIgLS0+IElubmVyIG1lc3NhZ2U6ICVzIgorICAgICAgICAgICAg
ICAgICAgICAgICAlIChwYXRoLCBlcnIpKQorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKG1l
c3NhZ2UpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fZXh0cmFjdF9hbGwoemlw
X2ZpbGUsIHNjcmF0Y2hfZGlyKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgemlwX2Zp
bGUuY2xvc2UoKQorCisgICAgICAgIHJldHVybiB0YXJnZXRfcGF0aAorCisgICAgZGVmIF9wcmVw
YXJlX3BhY2thZ2Uoc2VsZiwgcGF0aCwgc2NyYXRjaF9kaXIpOgorICAgICAgICAiIiJQcmVwYXJl
IGEgcGFja2FnZSBmb3IgdXNlLCBpZiBuZWNlc3NhcnksIGFuZCByZXR1cm4gdGhlIG5ldyBwYXRo
LgorCisgICAgICAgIEZvciBleGFtcGxlLCB0aGlzIG1ldGhvZCB1bnppcHMgemlwcGVkIGZpbGVz
IGFuZCBleHRyYWN0cworICAgICAgICB0YXIgZmlsZXMuCisKKyAgICAgICAgQXJnczoKKyAgICAg
ICAgICBwYXRoOiBUaGUgcGF0aCB0byB0aGUgZG93bmxvYWRlZCBVUkwgY29udGVudHMuCisgICAg
ICAgICAgc2NyYXRjaF9kaXI6IFRoZSBzY3JhdGNoIGRpcmVjdG9yeS4gIE5vdGUgdGhhdCB0aGUg
c2NyYXRjaAorICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgY29udGFpbnMgdGhlIGZp
bGUgZGVzaWduYXRlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgcGF0aCBwYXJhbWV0
ZXIuCisKKyAgICAgICAgIiIiCisgICAgICAgICMgRklYTUU6IEFkZCBvdGhlciBuYXR1cmFsIGV4
dGVuc2lvbnMuCisgICAgICAgIGlmIHBhdGguZW5kc3dpdGgoIi56aXAiKToKKyAgICAgICAgICAg
IG5ld19wYXRoID0gc2VsZi5fdW56aXAocGF0aCwgc2NyYXRjaF9kaXIpCisgICAgICAgIGVsaWYg
cGF0aC5lbmRzd2l0aCgiLnRhci5neiIpOgorICAgICAgICAgICAgbmV3X3BhdGggPSBzZWxmLl9l
eHRyYWN0X3Rhcmd6KHBhdGgsIHNjcmF0Y2hfZGlyKQorICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgIyBObyBwcmVwYXJhdGlvbiBpcyBuZWVkZWQuCisgICAgICAgICAgICBuZXdfcGF0aCA9IHBh
dGgKKworICAgICAgICByZXR1cm4gbmV3X3BhdGgKKworICAgIGRlZiBfZG93bmxvYWRfdG9fc3Ry
ZWFtKHNlbGYsIHVybCwgc3RyZWFtKToKKyAgICAgICAgIiIiRG93bmxvYWQgYW4gVVJMIHRvIGEg
c3RyZWFtLCBhbmQgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMuIiIiCisgICAgICAgIHRyeToK
KyAgICAgICAgICAgIG5ldHN0cmVhbSA9IHVybGxpYi51cmxvcGVuKHVybCkKKyAgICAgICAgZXhj
ZXB0IElPRXJyb3IsIGVycjoKKyAgICAgICAgICAgICMgQXBwZW5kIGV4aXN0aW5nIEVycm9yIG1l
c3NhZ2UgdG8gbmV3IEVycm9yLgorICAgICAgICAgICAgbWVzc2FnZSA9ICgnQ291bGQgbm90IGRv
d25sb2FkIFB5dGhvbiBtb2R1bGVzIGZyb20gVVJMICIlcyIuXG4nCisgICAgICAgICAgICAgICAg
ICAgICAgICIgTWFrZSBzdXJlIHlvdSBhcmUgY29ubmVjdGVkIHRvIHRoZSBpbnRlcm5ldC5cbiIK
KyAgICAgICAgICAgICAgICAgICAgICAgIiBZb3UgbXVzdCBiZSBjb25uZWN0ZWQgdG8gdGhlIGlu
dGVybmV0IHdoZW4gIgorICAgICAgICAgICAgICAgICAgICAgICAiZG93bmxvYWRpbmcgbmVlZGVk
IG1vZHVsZXMgZm9yIHRoZSBmaXJzdCB0aW1lLlxuIgorICAgICAgICAgICAgICAgICAgICAgICAi
IC0tPiBJbm5lciBtZXNzYWdlOiAlcyIKKyAgICAgICAgICAgICAgICAgICAgICAgJSAodXJsLCBl
cnIpKQorICAgICAgICAgICAgcmFpc2UgSU9FcnJvcihtZXNzYWdlKQorICAgICAgICBjb2RlID0g
MjAwCisgICAgICAgIGlmIGhhc2F0dHIobmV0c3RyZWFtLCAiZ2V0Y29kZSIpOgorICAgICAgICAg
ICAgY29kZSA9IG5ldHN0cmVhbS5nZXRjb2RlKCkKKyAgICAgICAgaWYgbm90IDIwMCA8PSBjb2Rl
IDwgMzAwOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSFRUUCBFcnJvciBjb2RlICVz
IiAlIGNvZGUpCisKKyAgICAgICAgQlVGU0laRSA9IDIqKjEzICAjIDhLQgorICAgICAgICBieXRl
cyA9IDAKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGRhdGEgPSBuZXRzdHJlYW0u
cmVhZChCVUZTSVpFKQorICAgICAgICAgICAgaWYgbm90IGRhdGE6CisgICAgICAgICAgICAgICAg
YnJlYWsKKyAgICAgICAgICAgIHN0cmVhbS53cml0ZShkYXRhKQorICAgICAgICAgICAgYnl0ZXMg
Kz0gbGVuKGRhdGEpCisgICAgICAgIG5ldHN0cmVhbS5jbG9zZSgpCisgICAgICAgIHJldHVybiBi
eXRlcworCisgICAgZGVmIF9kb3dubG9hZChzZWxmLCB1cmwsIHNjcmF0Y2hfZGlyKToKKyAgICAg
ICAgIiIiRG93bmxvYWQgVVJMIGNvbnRlbnRzLCBhbmQgcmV0dXJuIHRoZSBkb3dubG9hZCBwYXRo
LiIiIgorICAgICAgICB1cmxfcGF0aCA9IHVybHBhcnNlLnVybHNwbGl0KHVybClbMl0KKyAgICAg
ICAgdXJsX3BhdGggPSBvcy5wYXRoLm5vcm1wYXRoKHVybF9wYXRoKSAgIyBSZW1vdmVzIHRyYWls
aW5nIHNsYXNoLgorICAgICAgICB0YXJnZXRfZmlsZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHVy
bF9wYXRoKQorICAgICAgICB0YXJnZXRfcGF0aCA9IG9zLnBhdGguam9pbihzY3JhdGNoX2Rpciwg
dGFyZ2V0X2ZpbGVuYW1lKQorCisgICAgICAgIHNlbGYuX2xvZ190cmFuc2ZlcigiU3RhcnRpbmcg
ZG93bmxvYWQuLi4iLCB1cmwsIHRhcmdldF9wYXRoKQorCisgICAgICAgIHN0cmVhbSA9IGZpbGUo
dGFyZ2V0X3BhdGgsICJ3YiIpCisgICAgICAgIGJ5dGVzID0gc2VsZi5fZG93bmxvYWRfdG9fc3Ry
ZWFtKHVybCwgc3RyZWFtKQorICAgICAgICBzdHJlYW0uY2xvc2UoKQorCisgICAgICAgIF9sb2cu
ZGVidWcoIkRvd25sb2FkZWQgJXMgYnl0ZXMuIiAlIGJ5dGVzKQorCisgICAgICAgIHJldHVybiB0
YXJnZXRfcGF0aAorCisgICAgZGVmIF9pbnN0YWxsKHNlbGYsIHNjcmF0Y2hfZGlyLCBwYWNrYWdl
X25hbWUsIHRhcmdldF9wYXRoLCB1cmwsCisgICAgICAgICAgICAgICAgIHVybF9zdWJwYXRoKToK
KyAgICAgICAgIiIiSW5zdGFsbCBhIHB5dGhvbiBwYWNrYWdlIGZyb20gYW4gVVJMLgorCisgICAg
ICAgIFRoaXMgaW50ZXJuYWwgbWV0aG9kIG92ZXJ3cml0ZXMgdGhlIHRhcmdldCBwYXRoIGlmIHRo
ZSB0YXJnZXQKKyAgICAgICAgcGF0aCBhbHJlYWR5IGV4aXN0cy4KKworICAgICAgICAiIiIKKyAg
ICAgICAgcGF0aCA9IHNlbGYuX2Rvd25sb2FkKHVybD11cmwsIHNjcmF0Y2hfZGlyPXNjcmF0Y2hf
ZGlyKQorICAgICAgICBwYXRoID0gc2VsZi5fcHJlcGFyZV9wYWNrYWdlKHBhdGgsIHNjcmF0Y2hf
ZGlyKQorCisgICAgICAgIGlmIHVybF9zdWJwYXRoIGlzIE5vbmU6CisgICAgICAgICAgICBzb3Vy
Y2VfcGF0aCA9IHBhdGgKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNvdXJjZV9wYXRoID0g
b3MucGF0aC5qb2luKHBhdGgsIHVybF9zdWJwYXRoKQorCisgICAgICAgIGlmIG9zLnBhdGguZXhp
c3RzKHRhcmdldF9wYXRoKToKKyAgICAgICAgICAgIF9sb2cuZGVidWcoJ1JlZnJlc2hpbmcgaW5z
dGFsbDogZGVsZXRpbmcgIiVzIi4nICUgdGFyZ2V0X3BhdGgpCisgICAgICAgICAgICBpZiBvcy5w
YXRoLmlzZGlyKHRhcmdldF9wYXRoKToKKyAgICAgICAgICAgICAgICBzaHV0aWwucm10cmVlKHRh
cmdldF9wYXRoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvcy5yZW1vdmUo
dGFyZ2V0X3BhdGgpCisKKyAgICAgICAgc2VsZi5fbG9nX3RyYW5zZmVyKCJNb3ZpbmcgZmlsZXMg
aW50byBwbGFjZS4uLiIsIHNvdXJjZV9wYXRoLCB0YXJnZXRfcGF0aCkKKworICAgICAgICAjIFRo
ZSBzaHV0aWwubW92ZSgpIGNvbW1hbmQgY3JlYXRlcyBpbnRlcm1lZGlhdGUgZGlyZWN0b3JpZXMg
aWYgdGhleQorICAgICAgICAjIGRvIG5vdCBleGlzdCwgYnV0IHdlIGRvIG5vdCByZWx5IG9uIHRo
aXMgYmVoYXZpb3Igc2luY2Ugd2UKKyAgICAgICAgIyBuZWVkIHRvIGNyZWF0ZSB0aGUgX19pbml0
X18ucHkgZmlsZSBhbnl3YXkuCisgICAgICAgIHNodXRpbC5tb3ZlKHNvdXJjZV9wYXRoLCB0YXJn
ZXRfcGF0aCkKKworICAgICAgICBzZWxmLl9yZWNvcmRfdXJsX2Rvd25sb2FkZWQocGFja2FnZV9u
YW1lLCB1cmwpCisKKyAgICBkZWYgaW5zdGFsbChzZWxmLCB1cmwsIHNob3VsZF9yZWZyZXNoPUZh
bHNlLCB0YXJnZXRfbmFtZT1Ob25lLAorICAgICAgICAgICAgICAgIHVybF9zdWJwYXRoPU5vbmUp
OgorICAgICAgICAiIiJJbnN0YWxsIGEgcHl0aG9uIHBhY2thZ2UgZnJvbSBhbiBVUkwuCisKKyAg
ICAgICAgQXJnczoKKyAgICAgICAgICB1cmw6IFRoZSBVUkwgZnJvbSB3aGljaCB0byBkb3dubG9h
ZCB0aGUgcGFja2FnZS4KKworICAgICAgICBPcHRpb25hbCBBcmdzOgorICAgICAgICAgIHNob3Vs
ZF9yZWZyZXNoOiBBIGJvb2xlYW4gdmFsdWUgb2Ygd2hldGhlciB0aGUgcGFja2FnZSBzaG91bGQg
YmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZG93bmxvYWRlZCBhZ2FpbiBpZiB0aGUgcGFj
a2FnZSBpcyBhbHJlYWR5IHByZXNlbnQuCisgICAgICAgICAgdGFyZ2V0X25hbWU6IFRoZSBuYW1l
IG9mIHRoZSBmb2xkZXIgb3IgZmlsZSBpbiB0aGUgYXV0b2luc3RhbGxlcgorICAgICAgICAgICAg
ICAgICAgICAgICB0YXJnZXQgZGlyZWN0b3J5IGF0IHdoaWNoIHRoZSBwYWNrYWdlIHNob3VsZCBi
ZQorICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsZWQuICBEZWZhdWx0cyB0byB0aGUgYmFz
ZSBuYW1lIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICBVUkwgc3ViLXBhdGguICBUaGlz
IHBhcmFtZXRlciBtdXN0IGJlIHByb3ZpZGVkIGlmCisgICAgICAgICAgICAgICAgICAgICAgIHRo
ZSBVUkwgc3ViLXBhdGggaXMgbm90IHNwZWNpZmllZC4KKyAgICAgICAgICB1cmxfc3VicGF0aDog
VGhlIHJlbGF0aXZlIHBhdGggb2YgdGhlIFVSTCBkaXJlY3RvcnkgdGhhdCBzaG91bGQKKyAgICAg
ICAgICAgICAgICAgICAgICAgYmUgaW5zdGFsbGVkLiAgRGVmYXVsdHMgdG8gdGhlIGZ1bGwgZGly
ZWN0b3J5LCBvcgorICAgICAgICAgICAgICAgICAgICAgICB0aGUgZW50aXJlIFVSTCBjb250ZW50
cy4KKworICAgICAgICAiIiIKKyAgICAgICAgaWYgdGFyZ2V0X25hbWUgaXMgTm9uZToKKyAgICAg
ICAgICAgIGlmIG5vdCB1cmxfc3VicGF0aDoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVy
cm9yKCdUaGUgInRhcmdldF9uYW1lIiBwYXJhbWV0ZXIgbXVzdCBiZSAnCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAncHJvdmlkZWQgaWYgdGhlICJ1cmxfc3VicGF0aCIgcGFyYW1l
dGVyICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpcyBub3QgcHJvdmlkZWQu
IikKKyAgICAgICAgICAgICMgUmVtb3ZlIGFueSB0cmFpbGluZyBzbGFzaGVzLgorICAgICAgICAg
ICAgdXJsX3N1YnBhdGggPSBvcy5wYXRoLm5vcm1wYXRoKHVybF9zdWJwYXRoKQorICAgICAgICAg
ICAgdGFyZ2V0X25hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHVybF9zdWJwYXRoKQorCisgICAgICAg
IHRhcmdldF9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuX3RhcmdldF9kaXIsIHRhcmdldF9uYW1l
KQorICAgICAgICBpZiBub3Qgc2hvdWxkX3JlZnJlc2ggYW5kIHNlbGYuX2lzX2Rvd25sb2FkZWQo
dGFyZ2V0X25hbWUsIHVybCk6CisgICAgICAgICAgICBfbG9nLmRlYnVnKCdVUkwgZm9yICVzIGFs
cmVhZHkgZG93bmxvYWRlZC4gIFNraXBwaW5nLi4uJworICAgICAgICAgICAgICAgICAgICAgICAl
IHRhcmdldF9uYW1lKQorICAgICAgICAgICAgX2xvZy5kZWJ1ZygnICAgICIlcyInICUgdXJsKQor
ICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5fbG9nX3RyYW5zZmVyKCJBdXRvLWlu
c3RhbGxpbmcgcGFja2FnZTogJXMiICUgdGFyZ2V0X25hbWUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdXJsLCB0YXJnZXRfcGF0aCwgbG9nX21ldGhvZD1fbG9nLmluZm8pCisKKyAgICAg
ICAgIyBUaGUgc2NyYXRjaCBkaXJlY3RvcnkgaXMgd2hlcmUgd2Ugd2lsbCBkb3dubG9hZCBhbmQg
cHJlcGFyZQorICAgICAgICAjIGZpbGVzIHNwZWNpZmljIHRvIHRoaXMgaW5zdGFsbCB1bnRpbCB0
aGV5IGFyZSByZWFkeSB0byBtb3ZlCisgICAgICAgICMgaW50byBwbGFjZS4KKyAgICAgICAgc2Ny
YXRjaF9kaXIgPSBzZWxmLl9jcmVhdGVfc2NyYXRjaF9kaXJlY3RvcnkodGFyZ2V0X25hbWUpCisK
KyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5faW5zdGFsbChwYWNrYWdlX25hbWU9dGFy
Z2V0X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9wYXRoPXRhcmdldF9w
YXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNoX2Rpcj1zY3JhdGNoX2RpciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsPXVybCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgdXJsX3N1YnBhdGg9dXJsX3N1YnBhdGgpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24s
IGVycjoKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAjIEFwcGVuZCBleGlzdGluZyBF
cnJvciBtZXNzYWdlIHRvIG5ldyBFcnJvci4KKyAgICAgICAgICAgIG1lc3NhZ2UgPSAoIkVycm9y
IGF1dG8taW5zdGFsbGluZyB0aGUgJXMgcGFja2FnZSB0bzpcbiIKKyAgICAgICAgICAgICAgICAg
ICAgICAgJyAiJXMiXG4nCisgICAgICAgICAgICAgICAgICAgICAgICIgLS0+IElubmVyIG1lc3Nh
Z2U6ICVzIgorICAgICAgICAgICAgICAgICAgICAgICAlICh0YXJnZXRfbmFtZSwgdGFyZ2V0X3Bh
dGgsIGVycikpCisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24obWVzc2FnZSkKKyAgICAgICAg
ZmluYWxseToKKyAgICAgICAgICAgIF9sb2cuZGVidWcoJ0NsZWFuaW5nIHVwOiBkZWxldGluZyAi
JXMiLicgJSBzY3JhdGNoX2RpcikKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoc2NyYXRjaF9k
aXIpCisgICAgICAgICAgICBwYXNzCisgICAgICAgIF9sb2cuZGVidWcoJ0F1dG8taW5zdGFsbGVk
ICVzIHRvOicgJSB0YXJnZXRfbmFtZSkKKyAgICAgICAgX2xvZy5kZWJ1ZygnICAgICIlcyInICUg
dGFyZ2V0X3BhdGgpCisKKworaWYgX19uYW1lX189PSJfX21haW5fXyI6CisKKyAgICAjIENvbmZp
Z3VyZSB0aGUgYXV0b2luc3RhbGwgbG9nZ2VyIHRvIGxvZyBERUJVRyBtZXNzYWdlcyBmb3IKKyAg
ICAjIGRldmVsb3BtZW50IHRlc3RpbmcgcHVycG9zZXMuCisgICAgY29uc29sZSA9IGxvZ2dpbmcu
U3RyZWFtSGFuZGxlcigpCisKKyAgICBmb3JtYXR0ZXIgPSBsb2dnaW5nLkZvcm1hdHRlcignJShu
YW1lKXM6ICUobGV2ZWxuYW1lKS04cyAlKG1lc3NhZ2UpcycpCisgICAgY29uc29sZS5zZXRGb3Jt
YXR0ZXIoZm9ybWF0dGVyKQorICAgIF9sb2cuYWRkSGFuZGxlcihjb25zb2xlKQorICAgIF9sb2cu
c2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKKworICAgICMgVXNlIGEgbW9yZSB2aXNpYmxlIHRlbXAg
ZGlyZWN0b3J5IGZvciBkZWJ1ZyBwdXJwb3Nlcy4KKyAgICB0aGlzX2RpciA9IG9zLnBhdGguZGly
bmFtZShfX2ZpbGVfXykKKyAgICB0YXJnZXRfZGlyID0gb3MucGF0aC5qb2luKHRoaXNfZGlyLCAi
YXV0b2luc3RhbGxlZCIpCisgICAgdGVtcF9kaXIgPSBvcy5wYXRoLmpvaW4odGFyZ2V0X2Rpciwg
IlRlbXAiKQorCisgICAgaW5zdGFsbGVyID0gQXV0b0luc3RhbGxlcih0YXJnZXRfZGlyPXRhcmdl
dF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wX2Rpcj10ZW1wX2RpcikK
KworICAgIGluc3RhbGxlci5pbnN0YWxsKHNob3VsZF9yZWZyZXNoPUZhbHNlLAorICAgICAgICAg
ICAgICAgICAgICAgIHRhcmdldF9uYW1lPSJwZXA4LnB5IiwKKyAgICAgICAgICAgICAgICAgICAg
ICB1cmw9Imh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvc291cmNlL3AvcGVwOC9wZXA4
LTAuNS4wLnRhci5neiNtZDU9NTEyYTgxOGFmOTk3OTI5MGNkNjE5Y2NlOGU5YzJlMmIiLAorICAg
ICAgICAgICAgICAgICAgICAgIHVybF9zdWJwYXRoPSJwZXA4LTAuNS4wL3BlcDgucHkiKQorICAg
IGluc3RhbGxlci5pbnN0YWxsKHNob3VsZF9yZWZyZXNoPUZhbHNlLAorICAgICAgICAgICAgICAg
ICAgICAgIHRhcmdldF9uYW1lPSJtZWNoYW5pemUiLAorICAgICAgICAgICAgICAgICAgICAgIHVy
bD0iaHR0cDovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2UvbS9tZWNoYW5pemUvbWVj
aGFuaXplLTAuMS4xMS56aXAiLAorICAgICAgICAgICAgICAgICAgICAgIHVybF9zdWJwYXRoPSJt
ZWNoYW5pemUiKQorCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Ro
aXJkcGFydHkvX19pbml0X18ucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJk
cGFydHkvX19pbml0X18ucHkKaW5kZXggZWY2NWJlZS4uMzEyZGE1MyAxMDA2NDQKLS0tIGEvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L19faW5pdF9fLnB5CisrKyBiL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9fX2luaXRfXy5weQpAQCAtMSAr
MSw5MCBAQAotIyBSZXF1aXJlZCBmb3IgUHl0aG9uIHRvIHNlYXJjaCB0aGlzIGRpcmVjdG9yeSBm
b3IgbW9kdWxlIGZpbGVzCisjIENvcHlyaWdodCAoQykgMjAxMCBDaHJpcyBKZXJkb25layAoY2pl
cmRvbmVrQHdlYmtpdC5vcmcpCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1l
dDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisj
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKKyMgVGhpcyBtb2R1bGUgaXMgcmVxdWlyZWQgZm9yIFB5dGhvbiB0byB0cmVhdCB0aGlz
IGRpcmVjdG9yeSBhcyBhIHBhY2thZ2UuCisKKyIiIkF1dG9pbnN0YWxscyB0aGlyZC1wYXJ0eSBj
b2RlIHJlcXVpcmVkIGJ5IFdlYktpdC4iIiIKKworaW1wb3J0IG9zCisKK2Zyb20gd2Via2l0cHku
Y29tbW9uLnN5c3RlbS5hdXRvaW5zdGFsbCBpbXBvcnQgQXV0b0luc3RhbGxlcgorCisjIFB1dHRp
bmcgdGhlIGF1dG9pbnN0YWxsIGNvZGUgaW50byB3ZWJraXRweS90aGlyZHBhcnR5L19faW5pdF9f
LnB5CisjIGVuc3VyZXMgdGhhdCBubyBhdXRvaW5zdGFsbGluZyBvY2N1cnMgdW50aWwgYSBjYWxs
ZXIgaW1wb3J0cyBmcm9tCisjIHdlYmtpdHB5LnRoaXJkcGFydHkuICBUaGlzIGlzIHVzZWZ1bCBp
ZiB0aGUgY2FsbGVyIHdhbnRzIHRvIGNvbmZpZ3VyZQorIyBsb2dnaW5nIHByaW9yIHRvIGV4ZWN1
dGluZyBhdXRvaW5zdGFsbCBjb2RlLgorCisjIEZJWE1FOiBJZGVhbGx5LCBhIHBhY2thZ2Ugc2hv
dWxkIGJlIGF1dG9pbnN0YWxsZWQgb25seSBpZiB0aGUgY2FsbGVyCisjICAgICAgICBhdHRlbXB0
cyB0byBpbXBvcnQgZnJvbSB0aGF0IGluZGl2aWR1YWwgcGFja2FnZS4gIFRoaXMgd291bGQKKyMg
ICAgICAgIG1ha2UgYXV0b2luc3RhbGxpbmcgbGF6aWVyIHRoYW4gaXQgaXMgY3VycmVudGx5LiAg
VGhpcyBjYW4KKyMgICAgICAgIHBlcmhhcHMgYmUgZG9uZSB1c2luZyBQeXRob24ncyBpbXBvcnQg
aG9va3MgYXMgdGhlIG9yaWdpbmFsCisjICAgICAgICBhdXRvaW5zdGFsbCBpbXBsZW1lbnRhdGlv
biBkaWQuCisKKyMgV2UgcHV0IGF1dG8taW5zdGFsbGVkIHRoaXJkLXBhcnR5IG1vZHVsZXMgaW4g
dGhpcyBkaXJlY3RvcnktLQorIworIyAgICAgd2Via2l0cHkvdGhpcmRwYXJ0eS9hdXRvaW5zdGFs
bGVkCit0aGlyZHBhcnR5X2RpciA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykKK2F1dG9pbnN0
YWxsZWRfZGlyID0gb3MucGF0aC5qb2luKHRoaXJkcGFydHlfZGlyLCAiYXV0b2luc3RhbGxlZCIp
CisKKyMgV2UgbmVlZCB0byBkb3dubG9hZCBDbGllbnRGb3JtIHNpbmNlIHRoZSBtZWNoYW5pemUg
cGFja2FnZSB0aGF0IHdlIGRvd25sb2FkCisjIGJlbG93IHJlcXVpcmVzIGl0LiAgVGhlIG1lY2hh
bml6ZSBwYWNrYWdlIHVzZXMgQ2xpZW50Rm9ybSwgZm9yIGV4YW1wbGUsCisjIGluIF9odG1sLnB5
LiAgU2luY2UgbWVjaGFuaXplIGltcG9ydHMgQ2xpZW50Rm9ybSBpbiB0aGUgZm9sbG93aW5nIHdh
eSwKKyMKKyMgPiBpbXBvcnQgc2dtbGxpYiwgQ2xpZW50Rm9ybQorIworIyB0aGUgc2VhcmNoIHBh
dGggbmVlZHMgdG8gaW5jbHVkZSBDbGllbnRGb3JtLiAgV2UgcHV0IENsaWVudEZvcm0gaW4KKyMg
aXRzIG93biBkaXJlY3Rvcnkgc28gdGhhdCB3ZSBjYW4gaW5jbHVkZSBpdCBpbiB0aGUgc2VhcmNo
IHBhdGggd2l0aG91dAorIyBpbmNsdWRpbmcgb3RoZXIgbW9kdWxlcyBhcyBhIHNpZGUgZWZmZWN0
LgorY2xpZW50Zm9ybV9kaXIgPSBvcy5wYXRoLmpvaW4oYXV0b2luc3RhbGxlZF9kaXIsICJjbGll
bnRmb3JtIikKK2luc3RhbGxlciA9IEF1dG9JbnN0YWxsZXIoYXBwZW5kX3RvX3NlYXJjaF9wYXRo
PVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9kaXI9Y2xpZW50Zm9ybV9k
aXIpCitpbnN0YWxsZXIuaW5zdGFsbCh1cmw9Imh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcGFja2Fn
ZXMvc291cmNlL0MvQ2xpZW50Rm9ybS9DbGllbnRGb3JtLTAuMi4xMC56aXAiLAorICAgICAgICAg
ICAgICAgICAgdXJsX3N1YnBhdGg9IkNsaWVudEZvcm0ucHkiKQorCisjIFRoZSByZW1haW5pbmcg
cGFja2FnZXMgZG8gbm90IG5lZWQgdG8gYmUgaW4gdGhlIHNlYXJjaCBwYXRoLCBzbyB3ZSBjcmVh
dGUKKyMgYSBuZXcgQXV0b0luc3RhbGxlciBpbnN0YW5jZSB0aGF0IGRvZXMgbm90IGFwcGVuZCB0
byB0aGUgc2VhcmNoIHBhdGguCitpbnN0YWxsZXIgPSBBdXRvSW5zdGFsbGVyKHRhcmdldF9kaXI9
YXV0b2luc3RhbGxlZF9kaXIpCisKK2luc3RhbGxlci5pbnN0YWxsKHVybD0iaHR0cDovL3B5cGku
cHl0aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2UvbS9tZWNoYW5pemUvbWVjaGFuaXplLTAuMS4xMS56
aXAiLAorICAgICAgICAgICAgICAgICAgdXJsX3N1YnBhdGg9Im1lY2hhbml6ZSIpCitpbnN0YWxs
ZXIuaW5zdGFsbCh1cmw9Imh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvc291cmNlL3Av
cGVwOC9wZXA4LTAuNS4wLnRhci5neiNtZDU9NTEyYTgxOGFmOTk3OTI5MGNkNjE5Y2NlOGU5YzJl
MmIiLAorICAgICAgICAgICAgICAgICAgdXJsX3N1YnBhdGg9InBlcDgtMC41LjAvcGVwOC5weSIp
CisKKyMgU2luY2UgaXJjbGliIGFuZCBpcmNib3QgYXJlIHR3byB0b3AtbGV2ZWwgcGFja2FnZXMs
IHdlIG5lZWQgdG8gaW1wb3J0CisjIHRoZW0gc2VwYXJhdGVseS4gIFdlIGdyb3VwIHRoZW0gaW50
byBhbiBpcmMgcGFja2FnZSBmb3IgYmV0dGVyCisjIG9yZ2FuaXphdGlvbiBwdXJwb3Nlcy4KK2ly
Y19kaXIgPSBvcy5wYXRoLmpvaW4oYXV0b2luc3RhbGxlZF9kaXIsICJpcmMiKQoraW5zdGFsbGVy
ID0gQXV0b0luc3RhbGxlcih0YXJnZXRfZGlyPWlyY19kaXIpCitpbnN0YWxsZXIuaW5zdGFsbCh1
cmw9Imh0dHA6Ly9pd2ViLmRsLnNvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3B5dGhvbi1pcmNsaWIv
cHl0aG9uLWlyY2xpYi8wLjQuOC9weXRob24taXJjbGliLTAuNC44LnppcCIsCisgICAgICAgICAg
ICAgICAgICB1cmxfc3VicGF0aD0iaXJjbGliLnB5IikKK2luc3RhbGxlci5pbnN0YWxsKHVybD0i
aHR0cDovL2l3ZWIuZGwuc291cmNlZm9yZ2UubmV0L3Byb2plY3QvcHl0aG9uLWlyY2xpYi9weXRo
b24taXJjbGliLzAuNC44L3B5dGhvbi1pcmNsaWItMC40LjguemlwIiwKKyAgICAgICAgICAgICAg
ICAgIHVybF9zdWJwYXRoPSJpcmNib3QucHkiKQorCityZWFkbWVfcGF0aCA9IG9zLnBhdGguam9p
bihhdXRvaW5zdGFsbGVkX2RpciwgIlJFQURNRSIpCitpZiBub3Qgb3MucGF0aC5leGlzdHMocmVh
ZG1lX3BhdGgpOgorICAgIGZpbGUgPSBvcGVuKHJlYWRtZV9wYXRoLCAidyIpCisgICAgdHJ5Ogor
ICAgICAgICBmaWxlLndyaXRlKCJUaGlzIGRpcmVjdG9yeSBpcyBhdXRvLWdlbmVyYXRlZCBieSBX
ZWJLaXQgYW5kIGlzICIKKyAgICAgICAgICAgICAgICAgICAic2FmZSB0byBkZWxldGUuXG5JdCBj
b250YWlucyBuZWVkZWQgdGhpcmQtcGFydHkgUHl0aG9uICIKKyAgICAgICAgICAgICAgICAgICAi
cGFja2FnZXMgYXV0b21hdGljYWxseSBkb3dubG9hZGVkIGZyb20gdGhlIHdlYi4iKQorICAgIGZp
bmFsbHk6CisgICAgICAgIGZpbGUuY2xvc2UoKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS90aGlyZHBhcnR5L2F1dG9pbnN0YWxsLnB5IGIvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS90aGlyZHBhcnR5L2F1dG9pbnN0YWxsLnB5CmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA2Yzg2NGNmLi4wMDAwMDAwCi0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvdGhpcmRwYXJ0eS9hdXRvaW5zdGFsbC5weQorKysgL2Rldi9udWxsCkBAIC0xLDMz
NiArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAwOSwgRGFuaWVsIEtyZWNoIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0jIAotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jIAot
IyAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0jIAotIyAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0jIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0jIAotIyAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBEYW5pZWwgS3JlY2gg
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMgCi0jIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIEhPTERFUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSIiIlwKLXBhY2thZ2UgbG9hZGVy
IGZvciBhdXRvIGluc3RhbGxpbmcgUHl0aG9uIHBhY2thZ2VzLgotCi1BIHBhY2thZ2UgbG9hZGVy
IGluIHRoZSBzcGlyaXQgb2YgWmVybyBJbnN0YWxsIHRoYXQgY2FuIGJlIHVzZWQgdG8KLWluamVj
dCBkZXBlbmRlbmNpZXMgaW50byB0aGUgaW1wb3J0IHByb2Nlc3MuIAotCi0KLVRvIGluc3RhbGw6
OgotCi0gICAgZWFzeV9pbnN0YWxsIC1VIGF1dG9pbnN0YWxsCi0KLSAgICAgIG9yIAotCi0gICAg
ZG93bmxvYWQsIHVucGFjaywgcHl0aG9uIHNldHVwLnB5IGluc3RhbGwKLQotICAgICAgb3IgCi0K
LSAgICB0cnkgdGhlIGJvb3RzdHJhcCBsb2FkZXIuIFNlZSBiZWxvdy4KLQotCi1UbyB1c2U6Ogot
Ci0gICAgIyBZb3UgY2FuIGJpbmQgYW55IHBhY2thZ2UgbmFtZSB0byBhIFVSTCBwb2ludGluZyB0
byBzb21ldGhpbmcKLSAgICAjIHRoYXQgY2FuIGJlIGltcG9ydGVkIHVzaW5nIHRoZSB6aXBpbXBv
cnRlci4KLQotICAgIGF1dG9pbnN0YWxsLmJpbmQoInB5bWFyYyIsICJodHRwOi8vcHlwaS5weXRo
b24ub3JnL3BhY2thZ2VzLzIuNS9wL3B5bWFyYy9weW1hcmMtMi4xLXB5Mi41LmVnZyIpCi0KLSAg
ICBpbXBvcnQgcHltYXJjCi0KLSAgICBwcmludCBweW1hcmMuX192ZXJzaW9uX18sIHB5bWFyYy5f
X2ZpbGVfXwotCi0gICAgCi1DaGFuZ2Vsb2c6OgotCi0tIGFkZGVkIHN1cHBvcnQgZm9yIG5vbiB0
b3AgbGV2ZWwgcGFja2FnZXMuCi0tIGNhY2hlIGZpbGVzIG5vdyB1c2UgZmlsZW5hbWUgcGFydCBm
cm9tIFVSTC4KLS0gYXBwbGllZCBwYXRjaCBmcm9tIEVyaWMgU2VpZGVsIDxlc2VpZGVsQGdvb2ds
ZS5jb20+IHRvIGFkZCBzdXBwb3J0Ci1mb3IgbG9hZGluZyBtb2R1bGVzIHdoZXJlIHRoZSBtb2R1
bGUgaXMgbm90IGF0IHRoZSByb290IG9mIHRoZSAuemlwCi1maWxlLgotCi0KLVRPRE86OgotCi0t
IGEgZGVzY3JpcHRpb24gb2YgdGhlIGludGVuZGVkIHVzZSBjYXNlCi0tIGFkZHJlc3Mgb3RoZXIg
aXNzdWVzIHBvaW50ZWQgb3V0IGluOgotCi0gICAgaHR0cDovL21haWwucHl0aG9uLm9yZy9waXBl
cm1haWwvcHl0aG9uLWRldi8yMDA4LU1hcmNoLzA3NzkyNi5odG1sCi0KLVNjcmliYmxlczo6Ci0K
LXB1bGwgdnMuIHB1c2gKLXVzZXIgdnMuIHN5c3RlbQotd2ViIHZzLiBmaWxlc3lzdGVtCi1hdXRv
IHZzLiBtYW51YWwKLQotbWFuYWdlIGRldmVsb3BtZW50IHNhbmRib3hlcwotCi1vcHRpb25hbCBp
bnRlcmZhY2VzLi4uCi0KLSAgICBkZWYgZ2V0X2RhdGEocGF0aG5hbWUpIC0+IHN0cmluZyB3aXRo
IGZpbGUgZGF0YS4KLQotICAgIFJldHVybiB0aGUgZGF0YSBhc3NvY2lhdGVkIHdpdGggJ3BhdGhu
YW1lJy4gUmFpc2UgSU9FcnJvciBpZgotICAgIHRoZSBmaWxlIHdhc24ndCBmb3VuZC4iKTsKLQot
ICAgIGRlZiBpc19wYWNrYWdlLAotICAgICJpc19wYWNrYWdlKGZ1bGxuYW1lKSAtPiBib29sLgot
Ci0gICAgUmV0dXJuIFRydWUgaWYgdGhlIG1vZHVsZSBzcGVjaWZpZWQgYnkgZnVsbG5hbWUgaXMg
YSBwYWNrYWdlLgotICAgIFJhaXNlIFppcEltcG9ydEVycm9yIGlzIHRoZSBtb2R1bGUgY291bGRu
J3QgYmUgZm91bmQuIik7Ci0KLSAgICBkZWYgZ2V0X2NvZGUsCi0gICAgImdldF9jb2RlKGZ1bGxu
YW1lKSAtPiBjb2RlIG9iamVjdC4KLQotICAgIFJldHVybiB0aGUgY29kZSBvYmplY3QgZm9yIHRo
ZSBzcGVjaWZpZWQgbW9kdWxlLiBSYWlzZSBaaXBJbXBvcnRFcnJvcgotICAgIGlzIHRoZSBtb2R1
bGUgY291bGRuJ3QgYmUgZm91bmQuIik7Ci0KLSAgICBkZWYgZ2V0X3NvdXJjZSwKLSAgICAiZ2V0
X3NvdXJjZShmdWxsbmFtZSkgLT4gc291cmNlIHN0cmluZy4KLQotICAgIFJldHVybiB0aGUgc291
cmNlIGNvZGUgZm9yIHRoZSBzcGVjaWZpZWQgbW9kdWxlLiBSYWlzZSBaaXBJbXBvcnRFcnJvcgot
ICAgIGlzIHRoZSBtb2R1bGUgY291bGRuJ3QgYmUgZm91bmQsIHJldHVybiBOb25lIGlmIHRoZSBh
cmNoaXZlIGRvZXMKLSAgICBjb250YWluIHRoZSBtb2R1bGUsIGJ1dCBoYXMgbm8gc291cmNlIGZv
ciBpdC4iKTsKLQotCi1BdXRvaW5zdGFsbCBjYW4gYWxzbyBiZSBib290c3RyYXBlZCB3aXRoIHRo
ZSBuYXNjZW50IHBhY2thZ2UgbG9hZGVyCi1ib290c3RyYXAgbW9kdWxlLiBGb3IgZXhhbXBsZTo6
Ci0KLSAgICAjICBvciB2aWEgdGhlIGJvb3RzdHJhcAotICAgICMgbG9hZGVyLgotCi0gICAgdHJ5
OgotICAgICAgICBfdmVyc2lvbiA9ICIwLjIiCi0gICAgICAgIGltcG9ydCBhdXRvaW5zdGFsbAot
ICAgICAgICBpZiBhdXRvaW5zdGFsbC5fX3ZlcnNpb25fXyAhPSBfdmVyc2lvbjoKLSAgICAgICAg
ICAgIHJhaXNlIEltcG9ydEVycm9yKCJBIGRpZmZlcmVudCB2ZXJzaW9uIHRoYW4gZXhwZWN0ZWQg
Zm91bmQuIikKLSAgICBleGNlcHQgSW1wb3J0RXJyb3IsIGU6Ci0gICAgICAgICMgaHR0cDovL3N2
bi5weXRob24ub3JnL3Byb2plY3RzL3NhbmRib3gvdHJ1bmsvYm9vdHN0cmFwL2Jvb3RzdHJhcC5w
eQotICAgICAgICBpbXBvcnQgYm9vdHN0cmFwIAotICAgICAgICBweXBpID0gImh0dHA6Ly9weXBp
LnB5dGhvbi5vcmciCi0gICAgICAgIGRpciA9ICJwYWNrYWdlcy9zb3VyY2UvYS9hdXRvaW5zdGFs
bCIKLSAgICAgICAgdXJsID0gIiVzLyVzL2F1dG9pbnN0YWxsLSVzLnRhci5neiIgJSAocHlwaSwg
ZGlyLCBfdmVyc2lvbikKLSAgICAgICAgYm9vdHN0cmFwLm1haW4oKHVybCwpKQotICAgICAgICBp
bXBvcnQgYXV0b2luc3RhbGwKLQotUmVmZXJlbmNlczo6Ci0KLSAgaHR0cDovLzBpbnN0YWxsLm5l
dC8KLSAgaHR0cDovL3d3dy5weXRob24ub3JnL2Rldi9wZXBzL3BlcC0wMzAyLwotICBodHRwOi8v
c3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvc2FuZGJveC90cnVuay9pbXBvcnRfaW5fcHkKLSAgaHR0
cDovLzBpbnN0YWxsLm5ldC9pbmplY3Rvci1maW5kLmh0bWwKLSAgaHR0cDovL3Jvc2NpZHVzLmNv
bS9kZXNrdG9wL25vZGUvOTAzCi0KLSIiIgotCi0jIFRvIGFsbG93IHVzZSBvZiB0aGUgIndpdGgi
IGtleXdvcmQgZm9yIFB5dGhvbiAyLjUgdXNlcnMuCi1mcm9tIF9fZnV0dXJlX18gaW1wb3J0IHdp
dGhfc3RhdGVtZW50Ci0KLV9fdmVyc2lvbl9fID0gIjAuMiIKLV9fZG9jZm9ybWF0X18gPSAicmVz
dHJ1Y3R1cmVkdGV4dCBlbiIKLQotaW1wb3J0IG9zCi1pbXBvcnQgbmV3Ci1pbXBvcnQgc3lzCi1p
bXBvcnQgdXJsbGliCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IHRlbXBmaWxlCi1pbXBvcnQgemlw
aW1wb3J0Ci0KLV9sb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKLQotCi1faW1w
b3J0ZXIgPSBOb25lCi0KLWRlZiBfZ2V0SW1wb3J0ZXIoKToKLSAgICBnbG9iYWwgX2ltcG9ydGVy
Ci0gICAgaWYgX2ltcG9ydGVyIGlzIE5vbmU6Ci0gICAgICAgIF9pbXBvcnRlciA9IEltcG9ydGVy
KCkKLSAgICAgICAgc3lzLm1ldGFfcGF0aC5hcHBlbmQoX2ltcG9ydGVyKQotICAgIHJldHVybiBf
aW1wb3J0ZXIKLQotZGVmIGJpbmQocGFja2FnZV9uYW1lLCB1cmwsIHppcF9zdWJwYXRoPU5vbmUp
OgotICAgICIiImJpbmQgYSB0b3AgbGV2ZWwgcGFja2FnZSBuYW1lIHRvIGEgVVJMLgotCi0gICAg
VGhlIHBhY2thZ2UgbmFtZSBzaG91bGQgYmUgYSBwYWNrYWdlIG5hbWUgYW5kIHRoZSB1cmwgc2hv
dWxkIGJlIGEKLSAgICB1cmwgdG8gc29tZXRoaW5nIHRoYXQgY2FuIGJlIGltcG9ydGVkIHVzaW5n
IHRoZSB6aXBpbXBvcnRlci4KLQotICAgIE9wdGlvbmFsIHppcF9zdWJwYXRoIHBhcmFtZXRlciBh
bGxvd3Mgc2VhcmNoaW5nIGZvciBtb2R1bGVzCi0gICAgYmVsb3cgdGhlIHJvb3QgbGV2ZWwgb2Yg
dGhlIHppcCBmaWxlLgotICAgICIiIgotICAgIF9nZXRJbXBvcnRlcigpLmJpbmQocGFja2FnZV9u
YW1lLCB1cmwsIHppcF9zdWJwYXRoKQotCi0KLWNsYXNzIENhY2hlKG9iamVjdCk6Ci0KLSAgICBk
ZWYgX19pbml0X18oc2VsZiwgZGlyZWN0b3J5PU5vbmUpOgotICAgICAgICBpZiBkaXJlY3Rvcnkg
aXMgTm9uZToKLSAgICAgICAgICAgICMgRGVmYXVsdCB0byBwdXR0aW5nIHRoZSBjYWNoZSBkaXJl
Y3RvcnkgaW4gdGhlIHNhbWUgZGlyZWN0b3J5Ci0gICAgICAgICAgICAjIGFzIHRoaXMgZmlsZS4K
LSAgICAgICAgICAgIGNvbnRhaW5pbmdfZGlyZWN0b3J5ID0gb3MucGF0aC5kaXJuYW1lKF9fZmls
ZV9fKQotICAgICAgICAgICAgZGlyZWN0b3J5ID0gb3MucGF0aC5qb2luKGNvbnRhaW5pbmdfZGly
ZWN0b3J5LCAiYXV0b2luc3RhbGwuY2FjaGUuZCIpOwotCi0gICAgICAgIHNlbGYuZGlyZWN0b3J5
ID0gZGlyZWN0b3J5Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4
aXN0cyhzZWxmLmRpcmVjdG9yeSk6Ci0gICAgICAgICAgICAgICAgc2VsZi5fY3JlYXRlX2NhY2hl
X2RpcmVjdG9yeSgpCi0gICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGVycjoKLSAgICAgICAgICAg
IF9sb2dnZXIuZXhjZXB0aW9uKGVycikKLSAgICAgICAgICAgIHNlbGYuY2FjaGVfZGlyZWN0cnkg
PSB0ZW1wZmlsZS5ta2R0ZW1wKCkKLSAgICAgICAgX2xvZ2dlci5pbmZvKCJVc2luZyBjYWNoZSBk
aXJlY3RvcnkgJyVzJy4iICUgc2VsZi5kaXJlY3RvcnkpCi0gICAgCi0gICAgZGVmIF9jcmVhdGVf
Y2FjaGVfZGlyZWN0b3J5KHNlbGYpOgotICAgICAgICBfbG9nZ2VyLmRlYnVnKCJDcmVhdGluZyBj
YWNoZSBkaXJlY3RvcnkgJyVzJy4iICUgc2VsZi5kaXJlY3RvcnkpCi0gICAgICAgIG9zLm1rZGly
KHNlbGYuZGlyZWN0b3J5KQotICAgICAgICByZWFkbWVfcGF0aCA9IG9zLnBhdGguam9pbihzZWxm
LmRpcmVjdG9yeSwgIlJFQURNRSIpCi0gICAgICAgIHdpdGggb3BlbihyZWFkbWVfcGF0aCwgInci
KSBhcyBmOgotICAgICAgICAgICAgZi53cml0ZSgiVGhpcyBkaXJlY3Rvcnkgd2FzIGF1dG8tZ2Vu
ZXJhdGVkIGJ5ICclcycuXG4iCi0gICAgICAgICAgICAgICAgICAgICJJdCBpcyBzYWZlIHRvIGRl
bGV0ZS5cbiIgJSBfX2ZpbGVfXykKLQotICAgIGRlZiBnZXQoc2VsZiwgdXJsKToKLSAgICAgICAg
X2xvZ2dlci5pbmZvKCJHZXR0aW5nICclcycgZnJvbSBjYWNoZS4iICUgdXJsKQotICAgICAgICBm
aWxlbmFtZSA9IHVybC5yc3BsaXQoIi8iKVstMV0KLQotICAgICAgICAjIHNvIHRoYXQgc291cmNl
IHVybCBpcyBzaWduaWZpY2FudCBpbiBkZXRlcm1pbmluZyBjYWNoZSBoaXRzCi0gICAgICAgIGQg
PSBvcy5wYXRoLmpvaW4oc2VsZi5kaXJlY3RvcnksICIlcyIgJSBoYXNoKHVybCkpCi0gICAgICAg
IGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkKToKLSAgICAgICAgICAgIG9zLm1rZGlyKGQpCi0KLSAg
ICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4oZCwgZmlsZW5hbWUpIAotCi0gICAgICAgIGlm
IG9zLnBhdGguZXhpc3RzKGZpbGVuYW1lKToKLSAgICAgICAgICAgIF9sb2dnZXIuZGVidWcoIi4u
LiBhbHJlYWR5IGNhY2hlZCBpbiBmaWxlICclcycuIiAlIGZpbGVuYW1lKQotICAgICAgICBlbHNl
OgotICAgICAgICAgICAgX2xvZ2dlci5kZWJ1ZygiLi4uIG5vdCBpbiBjYWNoZS4gQ2FjaGluZyBp
biAnJXMnLiIgJSBmaWxlbmFtZSkKLSAgICAgICAgICAgIHN0cmVhbSA9IGZpbGUoZmlsZW5hbWUs
ICJ3YiIpCi0gICAgICAgICAgICBzZWxmLmRvd25sb2FkKHVybCwgc3RyZWFtKQotICAgICAgICAg
ICAgc3RyZWFtLmNsb3NlKCkKLSAgICAgICAgcmV0dXJuIGZpbGVuYW1lCi0KLSAgICBkZWYgZG93
bmxvYWQoc2VsZiwgdXJsLCBzdHJlYW0pOgotICAgICAgICBfbG9nZ2VyLmluZm8oIkRvd25sb2Fk
aW5nOiAlcyIgJSB1cmwpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG5ldHN0cmVhbSA9IHVy
bGxpYi51cmxvcGVuKHVybCkKLSAgICAgICAgICAgIGNvZGUgPSAyMDAKLSAgICAgICAgICAgIGlm
IGhhc2F0dHIobmV0c3RyZWFtLCAiZ2V0Y29kZSIpOgotICAgICAgICAgICAgICAgIGNvZGUgPSBu
ZXRzdHJlYW0uZ2V0Y29kZSgpCi0gICAgICAgICAgICBpZiBub3QgMjAwIDw9IGNvZGUgPCAzMDA6
Ci0gICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSFRUUCBFcnJvciBjb2RlICVzIiAl
IGNvZGUpCi0gICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGVycjoKLSAgICAgICAgICAgIF9sb2dn
ZXIuZXhjZXB0aW9uKGVycikKLQotICAgICAgICBCVUZTSVpFID0gMioqMTMgICMgOEtCCi0gICAg
ICAgIHNpemUgPSAwCi0gICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICBkYXRhID0gbmV0
c3RyZWFtLnJlYWQoQlVGU0laRSkKLSAgICAgICAgICAgIGlmIG5vdCBkYXRhOgotICAgICAgICAg
ICAgICAgIGJyZWFrCi0gICAgICAgICAgICBzdHJlYW0ud3JpdGUoZGF0YSkKLSAgICAgICAgICAg
IHNpemUgKz0gbGVuKGRhdGEpCi0gICAgICAgIG5ldHN0cmVhbS5jbG9zZSgpCi0gICAgICAgIF9s
b2dnZXIuaW5mbygiRG93bmxvYWRlZCAlZCBieXRlcy4iICUgc2l6ZSkKLQotCi1jbGFzcyBJbXBv
cnRlcihvYmplY3QpOgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBzZWxmLnBh
Y2thZ2VzID0ge30KLSAgICAgICAgc2VsZi5fX2NhY2hlID0gTm9uZQotCi0gICAgZGVmIF9fZ2V0
X3N0b3JlKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fX3N0b3JlCi0gICAgc3RvcmUgPSBw
cm9wZXJ0eShfX2dldF9zdG9yZSkKLQotICAgIGRlZiBfZ2V0X2NhY2hlKHNlbGYpOgotICAgICAg
ICBpZiBzZWxmLl9fY2FjaGUgaXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYuX19jYWNoZSA9IENh
Y2hlKCkKLSAgICAgICAgcmV0dXJuIHNlbGYuX19jYWNoZQotICAgIGRlZiBfc2V0X2NhY2hlKHNl
bGYsIGNhY2hlKToKLSAgICAgICAgc2VsZi5fX2NhY2hlID0gY2FjaGUKLSAgICBjYWNoZSA9IHBy
b3BlcnR5KF9nZXRfY2FjaGUsIF9zZXRfY2FjaGUpCi0KLSAgICBkZWYgZmluZF9tb2R1bGUoc2Vs
ZiwgZnVsbG5hbWUsIHBhdGg9Tm9uZSk6Ci0gICAgICAgICIiIi0+IHNlbGYgb3IgTm9uZS4KLQot
ICAgICAgICBTZWFyY2ggZm9yIGEgbW9kdWxlIHNwZWNpZmllZCBieSAnZnVsbG5hbWUnLiAnZnVs
bG5hbWUnIG11c3QgYmUKLSAgICAgICAgdGhlIGZ1bGx5IHF1YWxpZmllZCAoZG90dGVkKSBtb2R1
bGUgbmFtZS4gSXQgcmV0dXJucyB0aGUKLSAgICAgICAgemlwaW1wb3J0ZXIgaW5zdGFuY2UgaXRz
ZWxmIGlmIHRoZSBtb2R1bGUgd2FzIGZvdW5kLCBvciBOb25lIGlmCi0gICAgICAgIGl0IHdhc24n
dC4gVGhlIG9wdGlvbmFsICdwYXRoJyBhcmd1bWVudCBpcyBpZ25vcmVkIC0tIGl0J3MKLSAgICAg
ICAgdGhlcmUgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgaW1wb3J0ZXIgcHJvdG9jb2wuIik7
Ci0gICAgICAgICIiIgotICAgICAgICBfbG9nZ2VyLmRlYnVnKCJmaW5kX21vZHVsZSglcywgcGF0
aD0lcykiICUgKGZ1bGxuYW1lLCBwYXRoKSkKLQotICAgICAgICBpZiBmdWxsbmFtZSBpbiBzZWxm
LnBhY2thZ2VzOgotICAgICAgICAgICAgKHVybCwgemlwX3N1YnBhdGgpID0gc2VsZi5wYWNrYWdl
c1tmdWxsbmFtZV0KLSAgICAgICAgICAgIGZpbGVuYW1lID0gc2VsZi5jYWNoZS5nZXQodXJsKQot
ICAgICAgICAgICAgemlwX3BhdGggPSAiJXMvJXMiICUgKGZpbGVuYW1lLCB6aXBfc3VicGF0aCkg
aWYgemlwX3N1YnBhdGggZWxzZSBmaWxlbmFtZQotICAgICAgICAgICAgX2xvZ2dlci5kZWJ1Zygi
ZnVsbG5hbWU6ICVzIHVybDogJXMgcGF0aDogJXMgemlwX3BhdGg6ICVzIiAlIChmdWxsbmFtZSwg
dXJsLCBwYXRoLCB6aXBfcGF0aCkpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAg
bG9hZGVyID0gemlwaW1wb3J0LnppcGltcG9ydGVyKHppcF9wYXRoKQotICAgICAgICAgICAgICAg
IF9sb2dnZXIuZGVidWcoInJldHVybmluZzogJXMiICUgbG9hZGVyKQotICAgICAgICAgICAgZXhj
ZXB0IEV4Y2VwdGlvbiwgZToKLSAgICAgICAgICAgICAgICBfbG9nZ2VyLmV4Y2VwdGlvbihlKQot
ICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgICAgICByZXR1cm4gbG9hZGVyCi0g
ICAgICAgIHJldHVybiBOb25lCi0KLSAgICBkZWYgYmluZChzZWxmLCBwYWNrYWdlX25hbWUsIHVy
bCwgemlwX3N1YnBhdGgpOgotICAgICAgICBfbG9nZ2VyLmRlYnVnKCJiaW5kaW5nOiAlcyAtPiAl
cyBzdWJwYXRoOiAlcyIgJQotICAgICAgICAgICAgICAgICAgICAgIChwYWNrYWdlX25hbWUsIHVy
bCwgemlwX3N1YnBhdGgpKQotICAgICAgICBzZWxmLnBhY2thZ2VzW3BhY2thZ2VfbmFtZV0gPSAo
dXJsLCB6aXBfc3VicGF0aCkKLQotCi1pZiBfX25hbWVfXz09Il9fbWFpbl9fIjoKLSAgICBpbXBv
cnQgbG9nZ2luZwotICAgICNsb2dnaW5nLmJhc2ljQ29uZmlnKCkKLSAgICBsb2dnZXIgPSBsb2dn
aW5nLmdldExvZ2dlcigpCi0KLSAgICBjb25zb2xlID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKCkK
LSAgICBjb25zb2xlLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCi0gICAgIyBzZXQgYSBmb3JtYXQg
d2hpY2ggaXMgc2ltcGxlciBmb3IgY29uc29sZSB1c2UKLSAgICBmb3JtYXR0ZXIgPSBsb2dnaW5n
LkZvcm1hdHRlcignJShuYW1lKS0xMnM6ICUobGV2ZWxuYW1lKS04cyAlKG1lc3NhZ2UpcycpCi0g
ICAgIyB0ZWxsIHRoZSBoYW5kbGVyIHRvIHVzZSB0aGlzIGZvcm1hdAotICAgIGNvbnNvbGUuc2V0
Rm9ybWF0dGVyKGZvcm1hdHRlcikKLSAgICAjIGFkZCB0aGUgaGFuZGxlciB0byB0aGUgcm9vdCBs
b2dnZXIKLSAgICBsb2dnZXIuYWRkSGFuZGxlcihjb25zb2xlKQotICAgIGxvZ2dlci5zZXRMZXZl
bChsb2dnaW5nLklORk8pCi0KLSAgICBiaW5kKCJweW1hcmMiLCAiaHR0cDovL3B5cGkucHl0aG9u
Lm9yZy9wYWNrYWdlcy8yLjUvcC9weW1hcmMvcHltYXJjLTIuMS1weTIuNS5lZ2ciKQotCi0gICAg
aW1wb3J0IHB5bWFyYwotCi0gICAgcHJpbnQgcHltYXJjLl9fdmVyc2lvbl9fLCBweW1hcmMuX19m
aWxlX18KLQotICAgIGFzc2VydCBweW1hcmMuX192ZXJzaW9uX189PSIyLjEiCi0KLSAgICBkID0g
X2dldEltcG9ydGVyKCkuY2FjaGUuZGlyZWN0b3J5Ci0gICAgYXNzZXJ0IGQgaW4gcHltYXJjLl9f
ZmlsZV9fLCAiJyVzJyBub3QgZm91bmQgaW4gcHltYXJjLl9fZmlsZV9fICglcykiICUgKGQsIHB5
bWFyYy5fX2ZpbGVfXykKLQotICAgICMgQ2FuIG5vdyBhbHNvIGJpbmQgdG8gbm9uIHRvcCBsZXZl
bCBwYWNrYWdlcy4gVGhlIHBhY2thZ2VzCi0gICAgIyBsZWFkaW5nIHVwIHRvIHRoZSBwYWNrYWdl
IGJlaW5nIGJvdW5kIHdpbGwgbmVlZCB0byBiZSBkZWZpbmVkCi0gICAgIyBob3dldmVyLgotICAg
ICMKLSAgICAjIGJpbmQoInJkZi5wbHVnaW5zLnN0b3Jlcy5tZW1vcnkiLCAKLSAgICAjICAgICAg
Imh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvMi41L3IvcmRmLnBsdWdpbnMuc3RvcmVz
Lm1lbWVvcnkvcmRmLnBsdWdpbnMuc3RvcmVzLm1lbW9yeS0wLjlhLXB5Mi41LmVnZyIpCi0gICAg
IwotICAgICMgZnJvbSByZGYucGx1Z2lucy5zdG9yZXMubWVtb3J5IGltcG9ydCBNZW1vcnkKLQot
CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvYXV0
b2luc3RhbGxlZC9fX2luaXRfXy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhp
cmRwYXJ0eS9hdXRvaW5zdGFsbGVkL19faW5pdF9fLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA4ZTQ2MTQ1Li4wMDAwMDAwCi0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvdGhpcmRwYXJ0eS9hdXRvaW5zdGFsbGVkL19faW5pdF9fLnB5CisrKyAvZGV2L251bGwKQEAg
LTEsMTYgKzAsMCBAQAotIyBSZXF1aXJlZCBmb3IgUHl0aG9uIHRvIHNlYXJjaCB0aGlzIGRpcmVj
dG9yeSBmb3IgbW9kdWxlIGZpbGVzCi0KLWltcG9ydCB3ZWJraXRweS50aGlyZHBhcnR5LmF1dG9p
bnN0YWxsIGFzIGF1dG9pbnN0YWxsCi0KLSMgTGlzdCBvdXIgdGhpcmQtcGFydHkgbGlicmFyeSBk
ZXBlbmRlbmNpZXMgaGVyZSBhbmQgd2hlcmUgdGhleSBjYW4gYmUKLSMgZG93bmxvYWRlZC4KLWF1
dG9pbnN0YWxsLmJpbmQoIkNsaWVudEZvcm0iLCAiaHR0cDovL3B5cGkucHl0aG9uLm9yZy9wYWNr
YWdlcy9zb3VyY2UvQy9DbGllbnRGb3JtL0NsaWVudEZvcm0tMC4yLjEwLnppcCIsICJDbGllbnRG
b3JtLTAuMi4xMCIpCi1hdXRvaW5zdGFsbC5iaW5kKCJtZWNoYW5pemUiLCAiaHR0cDovL3B5cGku
cHl0aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2UvbS9tZWNoYW5pemUvbWVjaGFuaXplLTAuMS4xMS56
aXAiLCAibWVjaGFuaXplLTAuMS4xMSIpCi0jIFdlIGltcG9ydCBib3RoIGlyY2xpYiBhbmQgaXJj
Ym90IGJlY2F1c2UgaXJjbGliIGhhcyB0d28gdG9wLWxldmVsIHBhY2thZ2VzLgotYXV0b2luc3Rh
bGwuYmluZCgiaXJjbGliIiwgImh0dHA6Ly9pd2ViLmRsLnNvdXJjZWZvcmdlLm5ldC9wcm9qZWN0
L3B5dGhvbi1pcmNsaWIvcHl0aG9uLWlyY2xpYi8wLjQuOC9weXRob24taXJjbGliLTAuNC44Lnpp
cCIsICJweXRob24taXJjbGliLTAuNC44IikKLWF1dG9pbnN0YWxsLmJpbmQoImlyY2JvdCIsICJo
dHRwOi8vaXdlYi5kbC5zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9weXRob24taXJjbGliL3B5dGhv
bi1pcmNsaWIvMC40LjgvcHl0aG9uLWlyY2xpYi0wLjQuOC56aXAiLCAicHl0aG9uLWlyY2xpYi0w
LjQuOCIpCi0KLWZyb20gbWVjaGFuaXplIGltcG9ydCBCcm93c2VyCi1mcm9tIG1lY2hhbml6ZSBp
bXBvcnQgSFRUUEVycm9yCi1pbXBvcnQgaXJjYm90Ci1pbXBvcnQgaXJjbGliCg==
</data>
<flag name="commit-queue"
          id="35231"
          type_id="3"
          status="-"
          setter="cjerdonek"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52240</attachid>
            <date>2010-03-31 19:16:03 -0700</date>
            <delta_ts>2010-03-31 22:36:34 -0700</delta_ts>
            <desc>Proposed patch 6</desc>
            <filename>_patch-35163-6.diff</filename>
            <type>text/plain</type>
            <size>47073</size>
            <attacher name="Chris Jerdonek">cjerdonek</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA1OTRlYTAyLi5hYTRjNTNjIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTkgQEAKKzIwMTAtMDMt
MzEgIENocmlzIEplcmRvbmVrICA8Y2plcmRvbmVrQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmV3cm90ZSBhdXRvaW5zdGFsbC5w
eSB0byBzdXBwb3J0IHVuemlwcGluZyAqLnppcCBmaWxlcyBhZnRlcgorICAgICAgICBkb3dubG9h
ZCwgdW56aXBwaW5nIGFuZCBleHRyYWN0aW5nICoudGFyLmd6IGZpbGVzIGFmdGVyIGRvd25sb2Fk
LAorICAgICAgICBhbmQgY29weWluZyBpbnN0YWxsZWQgZmlsZXMgdG8gYSBnaXZlbiBkZXN0aW5h
dGlvbiBkaXJlY3RvcnkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTM1MTYzCisKKyAgICAgICAgVGhlc2UgY2hhbmdlcyB3aWxsIGxldCB1cyBhdXRv
aW5zdGFsbCBwZXA4LnB5IGZyb20gdGhlIHdlYiBhbmQgcHV0CisgICAgICAgIG91ciB0aGlyZC1w
YXJ0eSBhdXRvaW5zdGFsbGVkIGNvZGUgaW4gYW4gZXhwbGljaXQgZGlyZWN0b3J5IGxpa2UKKyAg
ICAgICAgd2Via2l0cHkvdGhpcmRwYXJ0eS9hdXRvaW5zdGFsbGVkLiBUaGVzZSBjaGFuZ2VzIHNo
b3VsZCBhbHNvIHNwZWVkCisgICAgICAgIHVwIHRoZSBleGVjdXRpb24gb2YgYXV0b2luc3RhbGxl
ZCAqLnppcCBwYWNrYWdlcyBzbGlnaHRseSBzaW5jZQorICAgICAgICAqLnB5YyBmaWxlcyBjYW5u
b3QgYmUgZ2VuZXJhdGVkIHdoZW4gaW1wb3J0aW5nIGZyb20gemlwcGVkCisgICAgICAgIHBhY2th
Z2VzIHVzaW5nIHRoZSBjdXJyZW50IGF1dG9pbnN0YWxsLgorCisgICAgICAgICogU2NyaXB0cy90
ZXN0LXdlYmtpdHB5OgorICAgICAgICAgIC0gQWRkcmVzc2VkIHRoZSBGSVhNRSB0byBlbmFibGUg
YXV0by1pbnN0YWxsIGxvZ2dpbmcgb25jZQorICAgICAgICAgICAgYXV0b2luc3RhbGwgd2FzIHJl
d3JpdHRlbiBub3QgdG8gbG9nIGFzIHZlcmJvc2VseS4KKworICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL25ldC9idWd6aWxsYS5weToKKyAgICAgICAgICAtIFVwZGF0ZWQgbWVjaGFu
aXplIGltcG9ydCBzdGF0ZW1lbnQuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9uZXQvYnVpbGRib3QucHk6CisgICAgICAgICAgLSBVcGRhdGVkIG1lY2hhbml6ZSBpbXBvcnQg
c3RhdGVtZW50LgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L2lyYy9p
cmNib3QucHk6CisgICAgICAgICAgLSBVcGRhdGVkIGlyY2JvdCBhbmQgaXJjbGliIGltcG9ydCBz
dGF0ZW1lbnRzLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L25ldHdv
cmt0cmFuc2FjdGlvbi5weToKKyAgICAgICAgICAtIFVwZGF0ZWQgbWVjaGFuaXplIGltcG9ydCBz
dGF0ZW1lbnQuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvbmV0d29y
a3RyYW5zYWN0aW9uX3VuaXR0ZXN0LnB5OgorICAgICAgICAgIC0gVXBkYXRlZCBtZWNoYW5pemUg
aW1wb3J0IHN0YXRlbWVudC4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL25l
dC9zdGF0dXNzZXJ2ZXIucHk6CisgICAgICAgICAgLSBVcGRhdGVkIG1lY2hhbml6ZSBpbXBvcnQg
c3RhdGVtZW50LgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2F1
dG9pbnN0YWxsLnB5OiBBZGRlZC4KKyAgICAgICAgICAtIEFkZGVkIEF1dG9JbnN0YWxsZXIgY2xh
c3MuCisgICAgICAgICAgLSBBZGRlZCBzYW1wbGUvdGVzdGluZyB1c2FnZSB0byB0aGUgX19tYWlu
X18gYmxvY2suCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvX19pbml0
X18ucHk6CisgICAgICAgICAgLSBVcGRhdGVkIHRoZSBhdXRvaW5zdGFsbCBsaW5lcyB0byB1c2Ug
dGhlIG5ldyBhdXRvaW5zdGFsbCBtZXRob2RzLgorICAgICAgICAgIC0gQWRkZWQgcGVwOC5weSB0
byB0aGUgbGlzdCBvZiBhdXRvLWluc3RhbGxlZCBwYWNrYWdlcy4KKyAgICAgICAgICAtIEFkZGVk
IGEgUkVBRE1FIGZpbGUgdG8gdGhlIHRhcmdldCBhdXRvaW5zdGFsbGF0aW9uIGRpcmVjdG9yeQor
ICAgICAgICAgICAgc28gdXNlcnMga25vdyB0aGF0IHRoZSBkaXJlY3RvcnkgaXMgc2FmZSB0byBk
ZWxldGUuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvYXV0b2luc3Rh
bGwucHk6IFJlbW92ZWQuCisgICAgICAgICAgLSBUaGlzIGlzIHJlcGxhY2VkIGJ5IHRoZSByZXdy
aXR0ZW4gYXV0b2luc3RhbGwKKyAgICAgICAgICAgIHdlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vYXV0
b2luc3RhbGwucHkuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvYXV0
b2luc3RhbGxlZC9fX2luaXRfXy5weTogUmVtb3ZlZC4KKyAgICAgICAgICAtIFRoZSB0YXJnZXQg
YXV0b2luc3RhbGxhdGlvbiBkaXJlY3RvcnkgaXMgbm93IGF1dG8tZ2VuZXJhdGVkLgorCiAyMDEw
LTAzLTMxICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgRXJpYyBTZWlkZWwuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3Rlc3Qt
d2Via2l0cHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3Rlc3Qtd2Via2l0cHkKaW5kZXggMjdhZDQ0
Ny4uNjY4ZDBmZCAxMDA3NTUKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy90ZXN0LXdlYmtpdHB5
CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvdGVzdC13ZWJraXRweQpAQCAtMzUsNiArMzUsMTAg
QEAgaW1wb3J0IHN5cwogIyBEbyBub3QgaW1wb3J0IGFueXRoaW5nIGZyb20gd2Via2l0cHkgcHJp
b3IgdG8gY2xlYW5pbmcgd2Via2l0cHkgb2YKICMgb3JwaGFuZWQgKi5weWMgZmlsZXMuICBUaGlz
IGVuc3VyZXMgdGhhdCBubyBvcnBoYW5lZCAqLnB5YyBmaWxlcyBhcmUKICMgYWNjaWRlbnRhbGx5
IGltcG9ydGVkIGR1cmluZyB0aGUgY291cnNlIG9mIHRoaXMgc2NyaXB0LgorIworIyBBbHNvIGRv
IG5vdCBpbXBvcnQgYW55IFB5dGhvbiBjb2RlIGluY29tcGF0aWJsZSB3aXRoIFB5dGhvbiAyLjQg
dW50aWwKKyMgYWZ0ZXIgZXhlY3V0aW9uIG9mIHRoZSBpbml0KCkgbWV0aG9kIGJlbG93LgorCiAK
IF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcigidGVzdC13ZWJraXRweSIpCiAKQEAgLTYwLDExICs2
NCwxMiBAQCBkZWYgY29uZmlndXJlX2xvZ2dpbmcoKToKICAgICAjIHRoaXMgbWV0aG9kIGFjY29y
ZGluZ2x5LgogICAgIGRlZiBmaWx0ZXIocmVjb3JkKToKICAgICAgICAgIiIiRmlsdGVyIG91dCBh
dXRvaW5zdGFsbCBhbmQgbm9uLXRoaXJkLXBhcnR5IHdlYmtpdHB5IG1lc3NhZ2VzLiIiIgotICAg
ICAgICAjIEZJWE1FOiBFbmFibGUgdGhlIGxvZ2dpbmcgb2YgYXV0b2luc3RhbGwgbWVzc2FnZXMg
b25jZQotICAgICAgICAjICAgICAgICBhdXRvaW5zdGFsbCBpcyBhZGp1c3RlZC4gIEN1cnJlbnRs
eSwgYXV0b2luc3RhbGwgbG9ncwotICAgICAgICAjICAgICAgICBJTkZPIG1lc3NhZ2VzIHdoZW4g
aW1wb3J0aW5nIGFscmVhZHktZG93bmxvYWRlZCBwYWNrYWdlcywKLSAgICAgICAgIyAgICAgICAg
d2hpY2ggaXMgdG9vIHZlcmJvc2UuCi0gICAgICAgIGlmIHJlY29yZC5uYW1lLnN0YXJ0c3dpdGgo
IndlYmtpdHB5LnRlc3QiKToKKyAgICAgICAgIyBGSVhNRTogRmlndXJlIG91dCBhIHdheSBub3Qg
dG8gdXNlIHN0cmluZyBoZXJlLCBmb3IgZXhhbXBsZSBieQorICAgICAgICAjICAgICAgICB1c2lu
ZyBzeW50YXggbGlrZSB3ZWJraXRweS50ZXN0Ll9fbmFtZV9fLiAgV2Ugd2FudCB0byBiZQorICAg
ICAgICAjICAgICAgICBzdXJlIG5vdCB0byBpbXBvcnQgYW55IG5vbi1QeXRob24gMi40IGNvZGUs
IHRob3VnaCwgdW50aWwKKyAgICAgICAgIyAgICAgICAgYWZ0ZXIgdGhlIHZlcnNpb24tY2hlY2tp
bmcgY29kZSBoYXMgZXhlY3V0ZWQuCisgICAgICAgIGlmIHJlY29yZC5uYW1lLnN0YXJ0c3dpdGgo
IndlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uYXV0b2luc3RhbGwiKSBvciBcCisgICAgICAgICAgICBy
ZWNvcmQubmFtZS5zdGFydHN3aXRoKCJ3ZWJraXRweS50ZXN0Iik6CiAgICAgICAgICAgICByZXR1
cm4gVHJ1ZQogICAgICAgICBpZiByZWNvcmQubmFtZS5zdGFydHN3aXRoKCJ3ZWJraXRweSIpOgog
ICAgICAgICAgICAgcmV0dXJuIEZhbHNlCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9uZXQvYnVnemlsbGEucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9uZXQvYnVnemlsbGEucHkKaW5kZXggODcxMmNkYi4uODQ0MDg0NyAxMDA2
NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L2J1Z3ppbGxh
LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC9idWd6aWxs
YS5weQpAQCAtNDIsNyArNDIsNyBAQCBmcm9tIHdlYmtpdHB5LmNvbW1vbi5jb25maWcgaW1wb3J0
IGNvbW1pdHRlcnMKIGZyb20gd2Via2l0cHkuY29tbW9uLm5ldC5jcmVkZW50aWFscyBpbXBvcnQg
Q3JlZGVudGlhbHMKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5vc3BhdGggaW1wb3J0IHJl
bHBhdGgKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS51c2VyIGltcG9ydCBVc2VyCi1mcm9t
IHdlYmtpdHB5LnRoaXJkcGFydHkuYXV0b2luc3RhbGxlZCBpbXBvcnQgQnJvd3NlcgorZnJvbSB3
ZWJraXRweS50aGlyZHBhcnR5LmF1dG9pbnN0YWxsZWQubWVjaGFuaXplIGltcG9ydCBCcm93c2Vy
CiAKICMgV2ViS2l0IGluY2x1ZGVzIGEgYnVpbHQgY29weSBvZiBCZWF1dGlmdWxTb3VwIGluIFNj
cmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eQogIyBzbyB0aGlzIGltcG9ydCBzaG91bGQgYWx3YXlz
IHN1Y2NlZWQuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9uZXQvYnVpbGRib3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9u
ZXQvYnVpbGRib3QucHkKaW5kZXggYmRkMTQ4Zi4uM2QwZDgzMSAxMDA2NDQKLS0tIGEvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L2J1aWxkYm90LnB5CisrKyBiL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC9idWlsZGJvdC5weQpAQCAtMzcsNyAr
MzcsNyBAQCBpbXBvcnQgeG1scnBjbGliCiAjIEltcG9ydCBXZWJLaXQtc3BlY2lmaWMgbW9kdWxl
cy4KIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5kZXByZWNhdGVkX2xvZ2dpbmcgaW1wb3J0
IGxvZwogCi1mcm9tIHdlYmtpdHB5LnRoaXJkcGFydHkuYXV0b2luc3RhbGxlZCBpbXBvcnQgQnJv
d3NlcgorZnJvbSB3ZWJraXRweS50aGlyZHBhcnR5LmF1dG9pbnN0YWxsZWQubWVjaGFuaXplIGlt
cG9ydCBCcm93c2VyCiAjIFdlYktpdCBpbmNsdWRlcyBhIGJ1aWx0IGNvcHkgb2YgQmVhdXRpZnVs
U291cCBpbiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkKICMgc28gdGhpcyBpbXBvcnQgc2hv
dWxkIGFsd2F5cyBzdWNjZWVkLgogZnJvbSB3ZWJraXRweS50aGlyZHBhcnR5LkJlYXV0aWZ1bFNv
dXAgaW1wb3J0IEJlYXV0aWZ1bFNvdXAKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvY29tbW9uL25ldC9pcmMvaXJjYm90LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9jb21tb24vbmV0L2lyYy9pcmNib3QucHkKaW5kZXggNGYwMWMzMC4uZjU5OTM2MyAx
MDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L2lyYy9p
cmNib3QucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L2ly
Yy9pcmNib3QucHkKQEAgLTI5LDggKzI5LDggQEAKIGltcG9ydCB3ZWJraXRweS5jb21tb24uY29u
ZmlnLmlyYyBhcyBjb25maWdfaXJjCiAKIGZyb20gd2Via2l0cHkuY29tbW9uLnRocmVhZC5tZXNz
YWdlcHVtcCBpbXBvcnQgTWVzc2FnZVB1bXAsIE1lc3NhZ2VQdW1wRGVsZWdhdGUKLWZyb20gd2Vi
a2l0cHkudGhpcmRwYXJ0eS5hdXRvaW5zdGFsbGVkIGltcG9ydCBpcmNib3QKLWZyb20gd2Via2l0
cHkudGhpcmRwYXJ0eS5hdXRvaW5zdGFsbGVkIGltcG9ydCBpcmNsaWIKK2Zyb20gd2Via2l0cHku
dGhpcmRwYXJ0eS5hdXRvaW5zdGFsbGVkLmlyYyBpbXBvcnQgaXJjYm90Citmcm9tIHdlYmtpdHB5
LnRoaXJkcGFydHkuYXV0b2luc3RhbGxlZC5pcmMgaW1wb3J0IGlyY2xpYgogCiAKIGNsYXNzIElS
Q0JvdERlbGVnYXRlKG9iamVjdCk6CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9uZXQvbmV0d29ya3RyYW5zYWN0aW9uLnB5IGIvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vbmV0L25ldHdvcmt0cmFuc2FjdGlvbi5weQppbmRleCAyODEw
MmNhLi4zZGQ5OTQwIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9uZXQvbmV0d29ya3RyYW5zYWN0aW9uLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvY29tbW9uL25ldC9uZXR3b3JrdHJhbnNhY3Rpb24ucHkKQEAgLTI4LDcgKzI4LDcg
QEAKIAogaW1wb3J0IHRpbWUKIAotZnJvbSB3ZWJraXRweS50aGlyZHBhcnR5LmF1dG9pbnN0YWxs
ZWQgaW1wb3J0IEhUVFBFcnJvcgorZnJvbSB3ZWJraXRweS50aGlyZHBhcnR5LmF1dG9pbnN0YWxs
ZWQubWVjaGFuaXplIGltcG9ydCBIVFRQRXJyb3IKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3Rl
bS5kZXByZWNhdGVkX2xvZ2dpbmcgaW1wb3J0IGxvZwogCiAKZGlmZiAtLWdpdCBhL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC9uZXR3b3JrdHJhbnNhY3Rpb25fdW5pdHRl
c3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvbmV0d29ya3Ry
YW5zYWN0aW9uX3VuaXR0ZXN0LnB5CmluZGV4IGY1YzNlNmMuLjcyZmE3ZGQgMTAwNjQ0Ci0tLSBh
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC9uZXR3b3JrdHJhbnNhY3Rp
b25fdW5pdHRlc3QucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24v
bmV0L25ldHdvcmt0cmFuc2FjdGlvbl91bml0dGVzdC5weQpAQCAtMjksNyArMjksNyBAQAogaW1w
b3J0IHVuaXR0ZXN0CiAKIGZyb20gd2Via2l0cHkuY29tbW9uLm5ldC5uZXR3b3JrdHJhbnNhY3Rp
b24gaW1wb3J0IE5ldHdvcmtUcmFuc2FjdGlvbiwgTmV0d29ya1RpbWVvdXQKLWZyb20gd2Via2l0
cHkudGhpcmRwYXJ0eS5hdXRvaW5zdGFsbGVkIGltcG9ydCBIVFRQRXJyb3IKK2Zyb20gd2Via2l0
cHkudGhpcmRwYXJ0eS5hdXRvaW5zdGFsbGVkLm1lY2hhbml6ZSBpbXBvcnQgSFRUUEVycm9yCiAK
IGNsYXNzIE5ldHdvcmtUcmFuc2FjdGlvblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGV4
Y2VwdGlvbiA9IEV4Y2VwdGlvbigiVGVzdCBleGNlcHRpb24iKQpkaWZmIC0tZ2l0IGEvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L3N0YXR1c3NlcnZlci5weSBiL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC9zdGF0dXNzZXJ2ZXIucHkKaW5kZXgg
YTE2NzYyZS4uYzBjMDc1YiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vbmV0L3N0YXR1c3NlcnZlci5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9uZXQvc3RhdHVzc2VydmVyLnB5CkBAIC0yNyw4ICsyNyw4IEBACiAjIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCiAKIGZyb20gd2Via2l0cHkuY29tbW9uLm5ldC5uZXR3b3JrdHJhbnNhY3Rpb24g
aW1wb3J0IE5ldHdvcmtUcmFuc2FjdGlvbgotZnJvbSB3ZWJraXRweS50aGlyZHBhcnR5LmF1dG9p
bnN0YWxsZWQgaW1wb3J0IEJyb3dzZXIKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5kZXBy
ZWNhdGVkX2xvZ2dpbmcgaW1wb3J0IGxvZworZnJvbSB3ZWJraXRweS50aGlyZHBhcnR5LmF1dG9p
bnN0YWxsZWQubWVjaGFuaXplIGltcG9ydCBCcm93c2VyCiAKICMgV2ViS2l0IGluY2x1ZGVzIGEg
YnVpbHQgY29weSBvZiBCZWF1dGlmdWxTb3VwIGluIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0
eQogIyBzbyB0aGlzIGltcG9ydCBzaG91bGQgYWx3YXlzIHN1Y2NlZWQuCmRpZmYgLS1naXQgYS9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vYXV0b2luc3RhbGwucHkg
Yi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vYXV0b2luc3RhbGwu
cHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzJmZDJjZgotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9hdXRv
aW5zdGFsbC5weQpAQCAtMCwwICsxLDUxOCBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMDksIERhbmll
bCBLcmVjaCBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgQ2hyaXMg
SmVyZG9uZWsgKGNqZXJkb25la0B3ZWJraXQub3JnKQorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorIyBtZXQ6CisjCisjICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMKKyMgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorIyBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IHRoZSBEYW5pZWwgS3JlY2ggbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMg
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyMgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIi
U3VwcG9ydCBmb3IgYXV0b21hdGljYWxseSBkb3dubG9hZGluZyBQeXRob24gcGFja2FnZXMgZnJv
bSBhbiBVUkwuIiIiCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgbmV3CitpbXBvcnQgb3MKK2lt
cG9ydCBzaHV0aWwKK2ltcG9ydCBzeXMKK2ltcG9ydCB0YXJmaWxlCitpbXBvcnQgdGVtcGZpbGUK
K2ltcG9ydCB1cmxsaWIKK2ltcG9ydCB1cmxwYXJzZQoraW1wb3J0IHppcGZpbGUKK2ltcG9ydCB6
aXBpbXBvcnQKKworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCisKK2NsYXNz
IEF1dG9JbnN0YWxsZXIob2JqZWN0KToKKworICAgICIiIlN1cHBvcnRzIGF1dG9tYXRpY2FsbHkg
aW5zdGFsbGluZyBQeXRob24gcGFja2FnZXMgZnJvbSBhbiBVUkwuCisKKyAgICBTdXBwb3J0cyB1
bmNvbXByZXNzZWQgZmlsZXMsIC50YXIuZ3osIGFuZCAuemlwIGZvcm1hdHMuCisKKyAgICBCYXNp
YyB1c2FnZToKKworICAgIGluc3RhbGxlciA9IEF1dG9JbnN0YWxsZXIoKQorCisgICAgaW5zdGFs
bGVyLmluc3RhbGwodXJsPSJodHRwOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2VzL3NvdXJjZS9w
L3BlcDgvcGVwOC0wLjUuMC50YXIuZ3ojbWQ1PTUxMmE4MThhZjk5NzkyOTBjZDYxOWNjZThlOWMy
ZTJiIiwKKyAgICAgICAgICAgICAgICAgICAgICB1cmxfc3VicGF0aD0icGVwOC0wLjUuMC9wZXA4
LnB5IikKKyAgICBpbnN0YWxsZXIuaW5zdGFsbCh1cmw9Imh0dHA6Ly9weXBpLnB5dGhvbi5vcmcv
cGFja2FnZXMvc291cmNlL20vbWVjaGFuaXplL21lY2hhbml6ZS0wLjEuMTEuemlwIiwKKyAgICAg
ICAgICAgICAgICAgICAgICB1cmxfc3VicGF0aD0ibWVjaGFuaXplIikKKworICAgICIiIgorCisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIGFwcGVuZF90b19zZWFyY2hfcGF0aD1GYWxzZSwgbWFrZV9w
YWNrYWdlPVRydWUsCisgICAgICAgICAgICAgICAgIHRhcmdldF9kaXI9Tm9uZSwgdGVtcF9kaXI9
Tm9uZSk6CisgICAgICAgICIiIkNyZWF0ZSBhbiBBdXRvSW5zdGFsbGVyIGluc3RhbmNlLCBhbmQg
c2V0IHVwIHRoZSB0YXJnZXQgZGlyZWN0b3J5LgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAg
YXBwZW5kX3RvX3NlYXJjaF9wYXRoOiBBIGJvb2xlYW4gdmFsdWUgb2Ygd2hldGhlciB0byBhcHBl
bmQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQgZGlyZWN0b3J5
IHRvIHRoZSBzeXMucGF0aCBzZWFyY2ggcGF0aC4KKyAgICAgICAgICBtYWtlX3BhY2thZ2U6IEEg
Ym9vbGVhbiB2YWx1ZSBvZiB3aGV0aGVyIHRvIG1ha2UgdGhlIHRhcmdldAorICAgICAgICAgICAg
ICAgICAgICAgICAgZGlyZWN0b3J5IGEgcGFja2FnZS4gIFRoaXMgYWRkcyBhbiBfX2luaXRfXy5w
eSBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgdGFyZ2V0IGRpcmVjdG9yeSAt
LSBhbGxvd2luZyBwYWNrYWdlcyBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZXMg
d2l0aGluIHRoZSB0YXJnZXQgZGlyZWN0b3J5IHRvIGJlIGltcG9ydGVkCisgICAgICAgICAgICAg
ICAgICAgICAgICBleHBsaWNpdGx5IHVzaW5nIGRvdHRlZCBtb2R1bGUgbmFtZXMuCisgICAgICAg
ICAgdGFyZ2V0X2RpcjogVGhlIGRpcmVjdG9yeSBwYXRoIHRvIHdoaWNoIHBhY2thZ2VzIHNob3Vs
ZCBiZSBpbnN0YWxsZWQuCisgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdHMgdG8gYSBzdWJk
aXJlY3Rvcnkgb2YgdGhlIGZvbGRlciBjb250YWluaW5nCisgICAgICAgICAgICAgICAgICAgICAg
dGhpcyBtb2R1bGUgY2FsbGVkICJhdXRvaW5zdGFsbGVkIi4KKyAgICAgICAgICB0ZW1wX2Rpcjog
VGhlIGRpcmVjdG9yeSBwYXRoIHRvIHVzZSBmb3IgYW55IHRlbXBvcmFyeSBmaWxlcworICAgICAg
ICAgICAgICAgICAgICBnZW5lcmF0ZWQgd2hpbGUgZG93bmxvYWRpbmcsIHVuemlwcGluZywgYW5k
IGV4dHJhY3RpbmcKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgdG8gaW5zdGFsbC4gIERl
ZmF1bHRzIHRvIGEgc3RhbmRhcmQgdGVtcG9yYXJ5CisgICAgICAgICAgICAgICAgICAgIGxvY2F0
aW9uIGdlbmVyYXRlZCBieSB0aGUgdGVtcGZpbGUgbW9kdWxlLiAgVGhpcworICAgICAgICAgICAg
ICAgICAgICBwYXJhbWV0ZXIgc2hvdWxkIG5vcm1hbGx5IGJlIHVzZWQgb25seSBmb3IgZGV2ZWxv
cG1lbnQKKyAgICAgICAgICAgICAgICAgICAgdGVzdGluZy4KKworICAgICAgICAiIiIKKyAgICAg
ICAgaWYgdGFyZ2V0X2RpciBpcyBOb25lOgorICAgICAgICAgICAgdGhpc19kaXIgPSBvcy5wYXRo
LmRpcm5hbWUoX19maWxlX18pCisgICAgICAgICAgICB0YXJnZXRfZGlyID0gb3MucGF0aC5qb2lu
KHRoaXNfZGlyLCAiYXV0b2luc3RhbGxlZCIpCisKKyAgICAgICAgIyBFbnN1cmUgdGhhdCB0aGUg
dGFyZ2V0IGRpcmVjdG9yeSBleGlzdHMuCisgICAgICAgIHNlbGYuX3NldF91cF90YXJnZXRfZGly
KHRhcmdldF9kaXIsIGFwcGVuZF90b19zZWFyY2hfcGF0aCwgbWFrZV9wYWNrYWdlKQorCisgICAg
ICAgIHNlbGYuX3RhcmdldF9kaXIgPSB0YXJnZXRfZGlyCisgICAgICAgIHNlbGYuX3RlbXBfZGly
ID0gdGVtcF9kaXIKKworICAgIGRlZiBfbG9nX3RyYW5zZmVyKHNlbGYsIG1lc3NhZ2UsIHNvdXJj
ZSwgdGFyZ2V0LCBsb2dfbWV0aG9kPU5vbmUpOgorICAgICAgICAiIiJMb2cgYSBkZWJ1ZyBtZXNz
YWdlIHRoYXQgaW52b2x2ZXMgYSBzb3VyY2UgYW5kIHRhcmdldC4iIiIKKyAgICAgICAgaWYgbG9n
X21ldGhvZCBpcyBOb25lOgorICAgICAgICAgICAgbG9nX21ldGhvZCA9IF9sb2cuZGVidWcKKwor
ICAgICAgICBsb2dfbWV0aG9kKCIlcyIgJSBtZXNzYWdlKQorICAgICAgICBsb2dfbWV0aG9kKCcg
ICAgRnJvbTogIiVzIicgJSBzb3VyY2UpCisgICAgICAgIGxvZ19tZXRob2QoJyAgICAgIFRvOiAi
JXMiJyAlIHRhcmdldCkKKworICAgIGRlZiBfY3JlYXRlX2RpcmVjdG9yeShzZWxmLCBwYXRoLCBu
YW1lPU5vbmUpOgorICAgICAgICAiIiJDcmVhdGUgYSBkaXJlY3RvcnkuIiIiCisgICAgICAgIGxv
ZyA9IF9sb2cuZGVidWcKKworICAgICAgICBuYW1lID0gbmFtZSArICIgIiBpZiBuYW1lIGlzIG5v
dCBOb25lIGVsc2UgIiIKKyAgICAgICAgbG9nKCdDcmVhdGluZyAlc2RpcmVjdG9yeS4uLicgJSBu
YW1lKQorICAgICAgICBsb2coJyAgICAiJXMiJyAlIHBhdGgpCisKKyAgICAgICAgb3MubWFrZWRp
cnMocGF0aCkKKworICAgIGRlZiBfd3JpdGVfZmlsZShzZWxmLCBwYXRoLCB0ZXh0KToKKyAgICAg
ICAgIiIiQ3JlYXRlIGEgZmlsZSBhdCB0aGUgZ2l2ZW4gcGF0aCB3aXRoIGdpdmVuIHRleHQuCisK
KyAgICAgICAgVGhpcyBtZXRob2Qgb3ZlcndyaXRlcyBhbnkgZXhpc3RpbmcgZmlsZS4KKworICAg
ICAgICAiIiIKKyAgICAgICAgX2xvZy5kZWJ1ZygiQ3JlYXRpbmcgZmlsZS4uLiIpCisgICAgICAg
IF9sb2cuZGVidWcoJyAgICAiJXMiJyAlIHBhdGgpCisgICAgICAgIGZpbGUgPSBvcGVuKHBhdGgs
ICJ3IikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZmlsZS53cml0ZSh0ZXh0KQorICAgICAg
ICBmaW5hbGx5OgorICAgICAgICAgICAgZmlsZS5jbG9zZSgpCisKKyAgICBkZWYgX3NldF91cF90
YXJnZXRfZGlyKHNlbGYsIHRhcmdldF9kaXIsIGFwcGVuZF90b19zZWFyY2hfcGF0aCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1ha2VfcGFja2FnZSk6CisgICAgICAgICIiIlNldCB1cCBh
IHRhcmdldCBkaXJlY3RvcnkuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICB0YXJnZXRfZGly
OiBUaGUgcGF0aCB0byB0aGUgdGFyZ2V0IGRpcmVjdG9yeSB0byBzZXQgdXAuCisgICAgICAgICAg
YXBwZW5kX3RvX3NlYXJjaF9wYXRoOiBBIGJvb2xlYW4gdmFsdWUgb2Ygd2hldGhlciB0byBhcHBl
bmQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQgZGlyZWN0b3J5
IHRvIHRoZSBzeXMucGF0aCBzZWFyY2ggcGF0aC4KKyAgICAgICAgICBtYWtlX3BhY2thZ2U6IEEg
Ym9vbGVhbiB2YWx1ZSBvZiB3aGV0aGVyIHRvIG1ha2UgdGhlIHRhcmdldAorICAgICAgICAgICAg
ICAgICAgICAgICAgZGlyZWN0b3J5IGEgcGFja2FnZS4gIFRoaXMgYWRkcyBhbiBfX2luaXRfXy5w
eSBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgdGFyZ2V0IGRpcmVjdG9yeSAt
LSBhbGxvd2luZyBwYWNrYWdlcyBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZXMg
d2l0aGluIHRoZSB0YXJnZXQgZGlyZWN0b3J5IHRvIGJlIGltcG9ydGVkCisgICAgICAgICAgICAg
ICAgICAgICAgICBleHBsaWNpdGx5IHVzaW5nIGRvdHRlZCBtb2R1bGUgbmFtZXMuCisKKyAgICAg
ICAgIiIiCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh0YXJnZXRfZGlyKToKKyAgICAg
ICAgICAgIHNlbGYuX2NyZWF0ZV9kaXJlY3RvcnkodGFyZ2V0X2RpciwgImF1dG9pbnN0YWxsIHRh
cmdldCIpCisKKyAgICAgICAgaWYgYXBwZW5kX3RvX3NlYXJjaF9wYXRoOgorICAgICAgICAgICAg
c3lzLnBhdGguYXBwZW5kKHRhcmdldF9kaXIpCisKKyAgICAgICAgaWYgbWFrZV9wYWNrYWdlOgor
ICAgICAgICAgICAgaW5pdF9wYXRoID0gb3MucGF0aC5qb2luKHRhcmdldF9kaXIsICJfX2luaXRf
Xy5weSIpCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoaW5pdF9wYXRoKToKKyAg
ICAgICAgICAgICAgICB0ZXh0ID0gKCIjIFRoaXMgZmlsZSBpcyByZXF1aXJlZCBmb3IgUHl0aG9u
IHRvIHNlYXJjaCB0aGlzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJkaXJlY3RvcnkgZm9y
IG1vZHVsZXMuXG4iKQorICAgICAgICAgICAgICAgIHNlbGYuX3dyaXRlX2ZpbGUoaW5pdF9wYXRo
LCB0ZXh0KQorCisgICAgZGVmIF9jcmVhdGVfc2NyYXRjaF9kaXJlY3RvcnlfaW5uZXIoc2VsZiwg
cHJlZml4KToKKyAgICAgICAgIiIiQ3JlYXRlIGEgc2NyYXRjaCBkaXJlY3Rvcnkgd2l0aG91dCBl
eGNlcHRpb24gaGFuZGxpbmcuCisKKyAgICAgICAgQ3JlYXRlcyBhIHNjcmF0Y2ggZGlyZWN0b3J5
IGluc2lkZSB0aGUgQXV0b0luc3RhbGxlciB0ZW1wCisgICAgICAgIGRpcmVjdG9yeSBzZWxmLl90
ZW1wX2Rpciwgb3IgaW5zaWRlIGEgcGxhdGZvcm0tZGVwZW5kZW50IHRlbXAKKyAgICAgICAgZGly
ZWN0b3J5IGlmIHNlbGYuX3RlbXBfZGlyIGlzIE5vbmUuICBSZXR1cm5zIHRoZSBwYXRoIHRvIHRo
ZQorICAgICAgICBjcmVhdGVkIHNjcmF0Y2ggZGlyZWN0b3J5LgorCisgICAgICAgIFJhaXNlczoK
KyAgICAgICAgICBPU0Vycm9yOiBbRXJybm8gMl0gaWYgdGhlIGNvbnRhaW5pbmcgdGVtcCBkaXJl
Y3Rvcnkgc2VsZi5fdGVtcF9kaXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgbm90
IE5vbmUgYW5kIGRvZXMgbm90IGV4aXN0LgorCisgICAgICAgICIiIgorICAgICAgICAjIFRoZSB0
ZW1wZmlsZS5ta2R0ZW1wKCkgbWV0aG9kIGZ1bmN0aW9uIHJlcXVpcmVzIHRoYXQgdGhlCisgICAg
ICAgICMgZGlyZWN0b3J5IGNvcnJlc3BvbmRpbmcgdG8gdGhlICJkaXIiIHBhcmFtZXRlciBhbHJl
YWR5IGV4aXN0CisgICAgICAgICMgaWYgaXQgaXMgbm90IE5vbmUuCisgICAgICAgIHNjcmF0Y2hf
ZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9cHJlZml4LCBkaXI9c2VsZi5fdGVtcF9kaXIp
CisgICAgICAgIHJldHVybiBzY3JhdGNoX2RpcgorCisgICAgZGVmIF9jcmVhdGVfc2NyYXRjaF9k
aXJlY3Rvcnkoc2VsZiwgdGFyZ2V0X25hbWUpOgorICAgICAgICAiIiJDcmVhdGUgYSB0ZW1wb3Jh
cnkgc2NyYXRjaCBkaXJlY3RvcnksIGFuZCByZXR1cm4gaXRzIHBhdGguCisKKyAgICAgICAgVGhl
IHNjcmF0Y2ggZGlyZWN0b3J5IGlzIGdlbmVyYXRlZCBpbnNpZGUgdGhlIHRlbXAgZGlyZWN0b3J5
CisgICAgICAgIG9mIHRoaXMgQXV0b0luc3RhbGxlciBpbnN0YW5jZS4gIFRoaXMgbWV0aG9kIGFs
c28gY3JlYXRlcyB0aGUKKyAgICAgICAgdGVtcCBkaXJlY3RvcnkgaWYgaXQgZG9lcyBub3QgYWxy
ZWFkeSBleGlzdC4KKworICAgICAgICAiIiIKKyAgICAgICAgcHJlZml4ID0gdGFyZ2V0X25hbWUg
KyAiXyIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2NyYXRjaF9kaXIgPSBzZWxmLl9jcmVh
dGVfc2NyYXRjaF9kaXJlY3RvcnlfaW5uZXIocHJlZml4KQorICAgICAgICBleGNlcHQgT1NFcnJv
cjoKKyAgICAgICAgICAgICMgSGFuZGxlIGNhc2Ugb2YgY29udGFpbmluZyB0ZW1wIGRpcmVjdG9y
eSBub3QgZXhpc3RpbmctLQorICAgICAgICAgICAgIyBPU0Vycm9yOiBbRXJybm8gMl0gTm8gc3Vj
aCBmaWxlIG9yIGRpcmVjdG9yeTouLi4KKyAgICAgICAgICAgIHRlbXBfZGlyID0gc2VsZi5fdGVt
cF9kaXIKKyAgICAgICAgICAgIGlmIHRlbXBfZGlyIGlzIE5vbmUgb3Igb3MucGF0aC5leGlzdHMo
dGVtcF9kaXIpOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAjIEVsc2UgdHJ5
IGFnYWluIGFmdGVyIGNyZWF0aW5nIHRoZSB0ZW1wIGRpcmVjdG9yeS4KKyAgICAgICAgICAgIHNl
bGYuX2NyZWF0ZV9kaXJlY3RvcnkodGVtcF9kaXIsICJhdXRvaW5zdGFsbCB0ZW1wIikKKyAgICAg
ICAgICAgIHNjcmF0Y2hfZGlyID0gc2VsZi5fY3JlYXRlX3NjcmF0Y2hfZGlyZWN0b3J5X2lubmVy
KHByZWZpeCkKKworICAgICAgICByZXR1cm4gc2NyYXRjaF9kaXIKKworICAgIGRlZiBfdXJsX2Rv
d25sb2FkZWRfcGF0aChzZWxmLCB0YXJnZXRfbmFtZSk6CisgICAgICAgICIiIlJldHVybiB0aGUg
cGF0aCB0byB0aGUgZmlsZSBjb250YWluaW5nIHRoZSBVUkwgZG93bmxvYWRlZC4iIiIKKyAgICAg
ICAgZmlsZW5hbWUgPSAiLiVzLnVybCIgJSB0YXJnZXRfbmFtZQorICAgICAgICBwYXRoID0gb3Mu
cGF0aC5qb2luKHNlbGYuX3RhcmdldF9kaXIsIGZpbGVuYW1lKQorICAgICAgICByZXR1cm4gcGF0
aAorCisgICAgZGVmIF9pc19kb3dubG9hZGVkKHNlbGYsIHRhcmdldF9uYW1lLCB1cmwpOgorICAg
ICAgICAiIiJSZXR1cm4gd2hldGhlciBhIHBhY2thZ2UgdmVyc2lvbiBoYXMgYmVlbiBkb3dubG9h
ZGVkLiIiIgorICAgICAgICB2ZXJzaW9uX3BhdGggPSBzZWxmLl91cmxfZG93bmxvYWRlZF9wYXRo
KHRhcmdldF9uYW1lKQorCisgICAgICAgIF9sb2cuZGVidWcoJ0NoZWNraW5nICVzIFVSTCBkb3du
bG9hZGVkLi4uJyAlIHRhcmdldF9uYW1lKQorICAgICAgICBfbG9nLmRlYnVnKCcgICAgIiVzIicg
JSB2ZXJzaW9uX3BhdGgpCisKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHZlcnNpb25f
cGF0aCk6CisgICAgICAgICAgICAjIFRoZW4gbm8gcGFja2FnZSB2ZXJzaW9uIGhhcyBiZWVuIGRv
d25sb2FkZWQuCisgICAgICAgICAgICBfbG9nLmRlYnVnKCJObyBVUkwgZmlsZSBmb3VuZC4iKQor
ICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgZmlsZSA9IG9wZW4odmVyc2lvbl9w
YXRoLCAiciIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHZlcnNpb24gPSBmaWxlLnJlYWQo
KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZmlsZS5jbG9zZSgpCisKKyAgICAgICAg
cmV0dXJuIHZlcnNpb24uc3RyaXAoKSA9PSB1cmwuc3RyaXAoKQorCisgICAgZGVmIF9yZWNvcmRf
dXJsX2Rvd25sb2FkZWQoc2VsZiwgdGFyZ2V0X25hbWUsIHVybCk6CisgICAgICAgICIiIlJlY29y
ZCB0aGUgVVJMIGRvd25sb2FkZWQgdG8gYSBmaWxlLiIiIgorICAgICAgICB2ZXJzaW9uX3BhdGgg
PSBzZWxmLl91cmxfZG93bmxvYWRlZF9wYXRoKHRhcmdldF9uYW1lKQorICAgICAgICBfbG9nLmRl
YnVnKCJSZWNvcmRpbmcgVVJMIGRvd25sb2FkZWQuLi4iKQorICAgICAgICBfbG9nLmRlYnVnKCcg
ICAgVVJMOiAiJXMiJyAlIHVybCkKKyAgICAgICAgX2xvZy5kZWJ1ZygnICAgICBUbzogIiVzIicg
JSB2ZXJzaW9uX3BhdGgpCisKKyAgICAgICAgc2VsZi5fd3JpdGVfZmlsZSh2ZXJzaW9uX3BhdGgs
IHVybCkKKworICAgIGRlZiBfZXh0cmFjdF90YXJneihzZWxmLCBwYXRoLCBzY3JhdGNoX2Rpcik6
CisgICAgICAgICMgdGFyZmlsZS5leHRyYWN0YWxsKCkgZXh0cmFjdHMgdG8gYSBwYXRoIHdpdGhv
dXQgdGhlCisgICAgICAgICMgdHJhaWxpbmcgIi50YXIuZ3oiLgorICAgICAgICB0YXJnZXRfYmFz
ZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHBhdGhbOi1sZW4oIi50YXIuZ3oiKV0pCisgICAgICAg
IHRhcmdldF9wYXRoID0gb3MucGF0aC5qb2luKHNjcmF0Y2hfZGlyLCB0YXJnZXRfYmFzZW5hbWUp
CisKKyAgICAgICAgc2VsZi5fbG9nX3RyYW5zZmVyKCJTdGFydGluZyBndW56aXAvZXh0cmFjdC4u
LiIsIHBhdGgsIHRhcmdldF9wYXRoKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRhcl9m
aWxlID0gdGFyZmlsZS5vcGVuKHBhdGgpCisgICAgICAgIGV4Y2VwdCB0YXJmaWxlLlJlYWRFcnJv
ciwgZXJyOgorICAgICAgICAgICAgIyBBcHBlbmQgZXhpc3RpbmcgRXJyb3IgbWVzc2FnZSB0byBu
ZXcgRXJyb3IuCisgICAgICAgICAgICBtZXNzYWdlID0gKCJDb3VsZCBub3Qgb3BlbiB0YXIgZmls
ZTogJXNcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIiBUaGUgZmlsZSBwcm9iYWJseSBkb2Vz
IG5vdCBoYXZlIHRoZSBjb3JyZWN0IGZvcm1hdC5cbiIKKyAgICAgICAgICAgICAgICAgICAgICAg
IiAtLT4gSW5uZXIgbWVzc2FnZTogJXMiCisgICAgICAgICAgICAgICAgICAgICAgICUgKHBhdGgs
IGVycikpCisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24obWVzc2FnZSkKKworICAgICAgICB0
cnk6CisgICAgICAgICAgICAjIFRoaXMgaXMgaGVscGZ1bCBmb3IgZGVidWdnaW5nIHB1cnBvc2Vz
LgorICAgICAgICAgICAgX2xvZy5kZWJ1ZygiTGlzdGluZyB0YXIgZmlsZSBjb250ZW50cy4uLiIp
CisgICAgICAgICAgICBmb3IgbmFtZSBpbiB0YXJfZmlsZS5nZXRuYW1lcygpOgorICAgICAgICAg
ICAgICAgIF9sb2cuZGVidWcoJyAgICAqICIlcyInICUgbmFtZSkKKyAgICAgICAgICAgIF9sb2cu
ZGVidWcoIkV4dHJhY3RpbmcgZ3ppcHBlZCB0YXIgZmlsZS4uLiIpCisgICAgICAgICAgICB0YXJf
ZmlsZS5leHRyYWN0YWxsKHRhcmdldF9wYXRoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAg
ICAgdGFyX2ZpbGUuY2xvc2UoKQorCisgICAgICAgIHJldHVybiB0YXJnZXRfcGF0aAorCisgICAg
IyBUaGlzIGlzIGEgcmVwbGFjZW1lbnQgZm9yIFppcEZpbGUuZXh0cmFjdGFsbCgpLCB3aGljaCBp
cworICAgICMgYXZhaWxhYmxlIGluIFB5dGhvbiAyLjYgYnV0IG5vdCBpbiBlYXJsaWVyIHZlcnNp
b25zLgorICAgIGRlZiBfZXh0cmFjdF9hbGwoc2VsZiwgemlwX2ZpbGUsIHRhcmdldF9kaXIpOgor
ICAgICAgICBzZWxmLl9sb2dfdHJhbnNmZXIoIkV4dHJhY3RpbmcgemlwIGZpbGUuLi4iLCB6aXBf
ZmlsZSwgdGFyZ2V0X2RpcikKKworICAgICAgICAjIFRoaXMgaXMgaGVscGZ1bCBmb3IgZGVidWdn
aW5nIHB1cnBvc2VzLgorICAgICAgICBfbG9nLmRlYnVnKCJMaXN0aW5nIHppcCBmaWxlIGNvbnRl
bnRzLi4uIikKKyAgICAgICAgZm9yIG5hbWUgaW4gemlwX2ZpbGUubmFtZWxpc3QoKToKKyAgICAg
ICAgICAgIF9sb2cuZGVidWcoJyAgICAqICIlcyInICUgbmFtZSkKKworICAgICAgICBmb3IgbmFt
ZSBpbiB6aXBfZmlsZS5uYW1lbGlzdCgpOgorICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9p
bih0YXJnZXRfZGlyLCBuYW1lKQorICAgICAgICAgICAgc2VsZi5fbG9nX3RyYW5zZmVyKCJFeHRy
YWN0aW5nLi4uIiwgbmFtZSwgcGF0aCkKKworICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguYmFz
ZW5hbWUocGF0aCk6CisgICAgICAgICAgICAgICAgIyBUaGVuIHRoZSBwYXRoIGVuZHMgaW4gYSBz
bGFzaCwgc28gaXQgaXMgYSBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgc2VsZi5fY3JlYXRl
X2RpcmVjdG9yeShwYXRoKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAj
IE90aGVyd2lzZSwgaXQgaXMgYSBmaWxlLgorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAg
ICAgICAgb3V0ZmlsZSA9IG9wZW4ocGF0aCwgJ3diJykKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vy
cm9yLCBlcnI6CisgICAgICAgICAgICAgICAgIyBOb3QgYWxsIHppcCBmaWxlcyBzZWVtIHRvIGxp
c3QgdGhlIGRpcmVjdG9yaWVzIGV4cGxpY2l0bHksCisgICAgICAgICAgICAgICAgIyBzbyB0cnkg
YWdhaW4gYWZ0ZXIgY3JlYXRpbmcgdGhlIGNvbnRhaW5pbmcgZGlyZWN0b3J5LgorICAgICAgICAg
ICAgICAgIF9sb2cuZGVidWcoIkdvdCBJT0Vycm9yOiByZXRyeWluZyBhZnRlciBjcmVhdGluZyBk
aXJlY3RvcnkuLi4iKQorICAgICAgICAgICAgICAgIGRpciA9IG9zLnBhdGguZGlybmFtZShwYXRo
KQorICAgICAgICAgICAgICAgIHNlbGYuX2NyZWF0ZV9kaXJlY3RvcnkoZGlyKQorICAgICAgICAg
ICAgICAgIG91dGZpbGUgPSBvcGVuKHBhdGgsICd3YicpCisKKyAgICAgICAgICAgIHRyeToKKyAg
ICAgICAgICAgICAgICBvdXRmaWxlLndyaXRlKHppcF9maWxlLnJlYWQobmFtZSkpCisgICAgICAg
ICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIG91dGZpbGUuY2xvc2UoKQorCisgICAgZGVm
IF91bnppcChzZWxmLCBwYXRoLCBzY3JhdGNoX2Rpcik6CisgICAgICAgICMgemlwZmlsZS5leHRy
YWN0YWxsKCkgZXh0cmFjdHMgdG8gYSBwYXRoIHdpdGhvdXQgdGhlCisgICAgICAgICMgdHJhaWxp
bmcgIi56aXAiLgorICAgICAgICB0YXJnZXRfYmFzZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHBh
dGhbOi1sZW4oIi56aXAiKV0pCisgICAgICAgIHRhcmdldF9wYXRoID0gb3MucGF0aC5qb2luKHNj
cmF0Y2hfZGlyLCB0YXJnZXRfYmFzZW5hbWUpCisKKyAgICAgICAgc2VsZi5fbG9nX3RyYW5zZmVy
KCJTdGFydGluZyB1bnppcC4uLiIsIHBhdGgsIHRhcmdldF9wYXRoKQorCisgICAgICAgIHRyeToK
KyAgICAgICAgICAgIHppcF9maWxlID0gemlwZmlsZS5aaXBGaWxlKHBhdGgsICJyIikKKyAgICAg
ICAgZXhjZXB0IHppcGZpbGUuQmFkWmlwZmlsZSwgZXJyOgorICAgICAgICAgICAgbWVzc2FnZSA9
ICgiQ291bGQgbm90IG9wZW4gemlwIGZpbGU6ICVzXG4iCisgICAgICAgICAgICAgICAgICAgICAg
ICIgLS0+IElubmVyIG1lc3NhZ2U6ICVzIgorICAgICAgICAgICAgICAgICAgICAgICAlIChwYXRo
LCBlcnIpKQorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKG1lc3NhZ2UpCisKKyAgICAgICAg
dHJ5OgorICAgICAgICAgICAgc2VsZi5fZXh0cmFjdF9hbGwoemlwX2ZpbGUsIHNjcmF0Y2hfZGly
KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgemlwX2ZpbGUuY2xvc2UoKQorCisgICAg
ICAgIHJldHVybiB0YXJnZXRfcGF0aAorCisgICAgZGVmIF9wcmVwYXJlX3BhY2thZ2Uoc2VsZiwg
cGF0aCwgc2NyYXRjaF9kaXIpOgorICAgICAgICAiIiJQcmVwYXJlIGEgcGFja2FnZSBmb3IgdXNl
LCBpZiBuZWNlc3NhcnksIGFuZCByZXR1cm4gdGhlIG5ldyBwYXRoLgorCisgICAgICAgIEZvciBl
eGFtcGxlLCB0aGlzIG1ldGhvZCB1bnppcHMgemlwcGVkIGZpbGVzIGFuZCBleHRyYWN0cworICAg
ICAgICB0YXIgZmlsZXMuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICBwYXRoOiBUaGUgcGF0
aCB0byB0aGUgZG93bmxvYWRlZCBVUkwgY29udGVudHMuCisgICAgICAgICAgc2NyYXRjaF9kaXI6
IFRoZSBzY3JhdGNoIGRpcmVjdG9yeS4gIE5vdGUgdGhhdCB0aGUgc2NyYXRjaAorICAgICAgICAg
ICAgICAgICAgICAgICBkaXJlY3RvcnkgY29udGFpbnMgdGhlIGZpbGUgZGVzaWduYXRlZCBieSB0
aGUKKyAgICAgICAgICAgICAgICAgICAgICAgcGF0aCBwYXJhbWV0ZXIuCisKKyAgICAgICAgIiIi
CisgICAgICAgICMgRklYTUU6IEFkZCBvdGhlciBuYXR1cmFsIGV4dGVuc2lvbnMuCisgICAgICAg
IGlmIHBhdGguZW5kc3dpdGgoIi56aXAiKToKKyAgICAgICAgICAgIG5ld19wYXRoID0gc2VsZi5f
dW56aXAocGF0aCwgc2NyYXRjaF9kaXIpCisgICAgICAgIGVsaWYgcGF0aC5lbmRzd2l0aCgiLnRh
ci5neiIpOgorICAgICAgICAgICAgbmV3X3BhdGggPSBzZWxmLl9leHRyYWN0X3Rhcmd6KHBhdGgs
IHNjcmF0Y2hfZGlyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBObyBwcmVwYXJhdGlv
biBpcyBuZWVkZWQuCisgICAgICAgICAgICBuZXdfcGF0aCA9IHBhdGgKKworICAgICAgICByZXR1
cm4gbmV3X3BhdGgKKworICAgIGRlZiBfZG93bmxvYWRfdG9fc3RyZWFtKHNlbGYsIHVybCwgc3Ry
ZWFtKToKKyAgICAgICAgIiIiRG93bmxvYWQgYW4gVVJMIHRvIGEgc3RyZWFtLCBhbmQgcmV0dXJu
IHRoZSBudW1iZXIgb2YgYnl0ZXMuIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG5ldHN0
cmVhbSA9IHVybGxpYi51cmxvcGVuKHVybCkKKyAgICAgICAgZXhjZXB0IElPRXJyb3IsIGVycjoK
KyAgICAgICAgICAgICMgQXBwZW5kIGV4aXN0aW5nIEVycm9yIG1lc3NhZ2UgdG8gbmV3IEVycm9y
LgorICAgICAgICAgICAgbWVzc2FnZSA9ICgnQ291bGQgbm90IGRvd25sb2FkIFB5dGhvbiBtb2R1
bGVzIGZyb20gVVJMICIlcyIuXG4nCisgICAgICAgICAgICAgICAgICAgICAgICIgTWFrZSBzdXJl
IHlvdSBhcmUgY29ubmVjdGVkIHRvIHRoZSBpbnRlcm5ldC5cbiIKKyAgICAgICAgICAgICAgICAg
ICAgICAgIiBZb3UgbXVzdCBiZSBjb25uZWN0ZWQgdG8gdGhlIGludGVybmV0IHdoZW4gIgorICAg
ICAgICAgICAgICAgICAgICAgICAiZG93bmxvYWRpbmcgbmVlZGVkIG1vZHVsZXMgZm9yIHRoZSBm
aXJzdCB0aW1lLlxuIgorICAgICAgICAgICAgICAgICAgICAgICAiIC0tPiBJbm5lciBtZXNzYWdl
OiAlcyIKKyAgICAgICAgICAgICAgICAgICAgICAgJSAodXJsLCBlcnIpKQorICAgICAgICAgICAg
cmFpc2UgSU9FcnJvcihtZXNzYWdlKQorICAgICAgICBjb2RlID0gMjAwCisgICAgICAgIGlmIGhh
c2F0dHIobmV0c3RyZWFtLCAiZ2V0Y29kZSIpOgorICAgICAgICAgICAgY29kZSA9IG5ldHN0cmVh
bS5nZXRjb2RlKCkKKyAgICAgICAgaWYgbm90IDIwMCA8PSBjb2RlIDwgMzAwOgorICAgICAgICAg
ICAgcmFpc2UgVmFsdWVFcnJvcigiSFRUUCBFcnJvciBjb2RlICVzIiAlIGNvZGUpCisKKyAgICAg
ICAgQlVGU0laRSA9IDIqKjEzICAjIDhLQgorICAgICAgICBieXRlcyA9IDAKKyAgICAgICAgd2hp
bGUgVHJ1ZToKKyAgICAgICAgICAgIGRhdGEgPSBuZXRzdHJlYW0ucmVhZChCVUZTSVpFKQorICAg
ICAgICAgICAgaWYgbm90IGRhdGE6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAg
IHN0cmVhbS53cml0ZShkYXRhKQorICAgICAgICAgICAgYnl0ZXMgKz0gbGVuKGRhdGEpCisgICAg
ICAgIG5ldHN0cmVhbS5jbG9zZSgpCisgICAgICAgIHJldHVybiBieXRlcworCisgICAgZGVmIF9k
b3dubG9hZChzZWxmLCB1cmwsIHNjcmF0Y2hfZGlyKToKKyAgICAgICAgIiIiRG93bmxvYWQgVVJM
IGNvbnRlbnRzLCBhbmQgcmV0dXJuIHRoZSBkb3dubG9hZCBwYXRoLiIiIgorICAgICAgICB1cmxf
cGF0aCA9IHVybHBhcnNlLnVybHNwbGl0KHVybClbMl0KKyAgICAgICAgdXJsX3BhdGggPSBvcy5w
YXRoLm5vcm1wYXRoKHVybF9wYXRoKSAgIyBSZW1vdmVzIHRyYWlsaW5nIHNsYXNoLgorICAgICAg
ICB0YXJnZXRfZmlsZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHVybF9wYXRoKQorICAgICAgICB0
YXJnZXRfcGF0aCA9IG9zLnBhdGguam9pbihzY3JhdGNoX2RpciwgdGFyZ2V0X2ZpbGVuYW1lKQor
CisgICAgICAgIHNlbGYuX2xvZ190cmFuc2ZlcigiU3RhcnRpbmcgZG93bmxvYWQuLi4iLCB1cmws
IHRhcmdldF9wYXRoKQorCisgICAgICAgIHN0cmVhbSA9IGZpbGUodGFyZ2V0X3BhdGgsICJ3YiIp
CisgICAgICAgIGJ5dGVzID0gc2VsZi5fZG93bmxvYWRfdG9fc3RyZWFtKHVybCwgc3RyZWFtKQor
ICAgICAgICBzdHJlYW0uY2xvc2UoKQorCisgICAgICAgIF9sb2cuZGVidWcoIkRvd25sb2FkZWQg
JXMgYnl0ZXMuIiAlIGJ5dGVzKQorCisgICAgICAgIHJldHVybiB0YXJnZXRfcGF0aAorCisgICAg
ZGVmIF9pbnN0YWxsKHNlbGYsIHNjcmF0Y2hfZGlyLCBwYWNrYWdlX25hbWUsIHRhcmdldF9wYXRo
LCB1cmwsCisgICAgICAgICAgICAgICAgIHVybF9zdWJwYXRoKToKKyAgICAgICAgIiIiSW5zdGFs
bCBhIHB5dGhvbiBwYWNrYWdlIGZyb20gYW4gVVJMLgorCisgICAgICAgIFRoaXMgaW50ZXJuYWwg
bWV0aG9kIG92ZXJ3cml0ZXMgdGhlIHRhcmdldCBwYXRoIGlmIHRoZSB0YXJnZXQKKyAgICAgICAg
cGF0aCBhbHJlYWR5IGV4aXN0cy4KKworICAgICAgICAiIiIKKyAgICAgICAgcGF0aCA9IHNlbGYu
X2Rvd25sb2FkKHVybD11cmwsIHNjcmF0Y2hfZGlyPXNjcmF0Y2hfZGlyKQorICAgICAgICBwYXRo
ID0gc2VsZi5fcHJlcGFyZV9wYWNrYWdlKHBhdGgsIHNjcmF0Y2hfZGlyKQorCisgICAgICAgIGlm
IHVybF9zdWJwYXRoIGlzIE5vbmU6CisgICAgICAgICAgICBzb3VyY2VfcGF0aCA9IHBhdGgKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIHNvdXJjZV9wYXRoID0gb3MucGF0aC5qb2luKHBhdGgs
IHVybF9zdWJwYXRoKQorCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHRhcmdldF9wYXRoKToK
KyAgICAgICAgICAgIF9sb2cuZGVidWcoJ1JlZnJlc2hpbmcgaW5zdGFsbDogZGVsZXRpbmcgIiVz
Ii4nICUgdGFyZ2V0X3BhdGgpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHRhcmdldF9w
YXRoKToKKyAgICAgICAgICAgICAgICBzaHV0aWwucm10cmVlKHRhcmdldF9wYXRoKQorICAgICAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvcy5yZW1vdmUodGFyZ2V0X3BhdGgpCisKKyAg
ICAgICAgc2VsZi5fbG9nX3RyYW5zZmVyKCJNb3ZpbmcgZmlsZXMgaW50byBwbGFjZS4uLiIsIHNv
dXJjZV9wYXRoLCB0YXJnZXRfcGF0aCkKKworICAgICAgICAjIFRoZSBzaHV0aWwubW92ZSgpIGNv
bW1hbmQgY3JlYXRlcyBpbnRlcm1lZGlhdGUgZGlyZWN0b3JpZXMgaWYgdGhleQorICAgICAgICAj
IGRvIG5vdCBleGlzdCwgYnV0IHdlIGRvIG5vdCByZWx5IG9uIHRoaXMgYmVoYXZpb3Igc2luY2Ug
d2UKKyAgICAgICAgIyBuZWVkIHRvIGNyZWF0ZSB0aGUgX19pbml0X18ucHkgZmlsZSBhbnl3YXku
CisgICAgICAgIHNodXRpbC5tb3ZlKHNvdXJjZV9wYXRoLCB0YXJnZXRfcGF0aCkKKworICAgICAg
ICBzZWxmLl9yZWNvcmRfdXJsX2Rvd25sb2FkZWQocGFja2FnZV9uYW1lLCB1cmwpCisKKyAgICBk
ZWYgaW5zdGFsbChzZWxmLCB1cmwsIHNob3VsZF9yZWZyZXNoPUZhbHNlLCB0YXJnZXRfbmFtZT1O
b25lLAorICAgICAgICAgICAgICAgIHVybF9zdWJwYXRoPU5vbmUpOgorICAgICAgICAiIiJJbnN0
YWxsIGEgcHl0aG9uIHBhY2thZ2UgZnJvbSBhbiBVUkwuCisKKyAgICAgICAgQXJnczoKKyAgICAg
ICAgICB1cmw6IFRoZSBVUkwgZnJvbSB3aGljaCB0byBkb3dubG9hZCB0aGUgcGFja2FnZS4KKwor
ICAgICAgICBPcHRpb25hbCBBcmdzOgorICAgICAgICAgIHNob3VsZF9yZWZyZXNoOiBBIGJvb2xl
YW4gdmFsdWUgb2Ygd2hldGhlciB0aGUgcGFja2FnZSBzaG91bGQgYmUKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgZG93bmxvYWRlZCBhZ2FpbiBpZiB0aGUgcGFja2FnZSBpcyBhbHJlYWR5IHBy
ZXNlbnQuCisgICAgICAgICAgdGFyZ2V0X25hbWU6IFRoZSBuYW1lIG9mIHRoZSBmb2xkZXIgb3Ig
ZmlsZSBpbiB0aGUgYXV0b2luc3RhbGxlcgorICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQg
ZGlyZWN0b3J5IGF0IHdoaWNoIHRoZSBwYWNrYWdlIHNob3VsZCBiZQorICAgICAgICAgICAgICAg
ICAgICAgICBpbnN0YWxsZWQuICBEZWZhdWx0cyB0byB0aGUgYmFzZSBuYW1lIG9mIHRoZQorICAg
ICAgICAgICAgICAgICAgICAgICBVUkwgc3ViLXBhdGguICBUaGlzIHBhcmFtZXRlciBtdXN0IGJl
IHByb3ZpZGVkIGlmCisgICAgICAgICAgICAgICAgICAgICAgIHRoZSBVUkwgc3ViLXBhdGggaXMg
bm90IHNwZWNpZmllZC4KKyAgICAgICAgICB1cmxfc3VicGF0aDogVGhlIHJlbGF0aXZlIHBhdGgg
b2YgdGhlIFVSTCBkaXJlY3RvcnkgdGhhdCBzaG91bGQKKyAgICAgICAgICAgICAgICAgICAgICAg
YmUgaW5zdGFsbGVkLiAgRGVmYXVsdHMgdG8gdGhlIGZ1bGwgZGlyZWN0b3J5LCBvcgorICAgICAg
ICAgICAgICAgICAgICAgICB0aGUgZW50aXJlIFVSTCBjb250ZW50cy4KKworICAgICAgICAiIiIK
KyAgICAgICAgaWYgdGFyZ2V0X25hbWUgaXMgTm9uZToKKyAgICAgICAgICAgIGlmIG5vdCB1cmxf
c3VicGF0aDoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdUaGUgInRhcmdldF9u
YW1lIiBwYXJhbWV0ZXIgbXVzdCBiZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAncHJvdmlkZWQgaWYgdGhlICJ1cmxfc3VicGF0aCIgcGFyYW1ldGVyICcKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJpcyBub3QgcHJvdmlkZWQuIikKKyAgICAgICAgICAgICMg
UmVtb3ZlIGFueSB0cmFpbGluZyBzbGFzaGVzLgorICAgICAgICAgICAgdXJsX3N1YnBhdGggPSBv
cy5wYXRoLm5vcm1wYXRoKHVybF9zdWJwYXRoKQorICAgICAgICAgICAgdGFyZ2V0X25hbWUgPSBv
cy5wYXRoLmJhc2VuYW1lKHVybF9zdWJwYXRoKQorCisgICAgICAgIHRhcmdldF9wYXRoID0gb3Mu
cGF0aC5qb2luKHNlbGYuX3RhcmdldF9kaXIsIHRhcmdldF9uYW1lKQorICAgICAgICBpZiBub3Qg
c2hvdWxkX3JlZnJlc2ggYW5kIHNlbGYuX2lzX2Rvd25sb2FkZWQodGFyZ2V0X25hbWUsIHVybCk6
CisgICAgICAgICAgICBfbG9nLmRlYnVnKCdVUkwgZm9yICVzIGFscmVhZHkgZG93bmxvYWRlZC4g
IFNraXBwaW5nLi4uJworICAgICAgICAgICAgICAgICAgICAgICAlIHRhcmdldF9uYW1lKQorICAg
ICAgICAgICAgX2xvZy5kZWJ1ZygnICAgICIlcyInICUgdXJsKQorICAgICAgICAgICAgcmV0dXJu
CisKKyAgICAgICAgc2VsZi5fbG9nX3RyYW5zZmVyKCJBdXRvLWluc3RhbGxpbmcgcGFja2FnZTog
JXMiICUgdGFyZ2V0X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsLCB0YXJn
ZXRfcGF0aCwgbG9nX21ldGhvZD1fbG9nLmluZm8pCisKKyAgICAgICAgIyBUaGUgc2NyYXRjaCBk
aXJlY3RvcnkgaXMgd2hlcmUgd2Ugd2lsbCBkb3dubG9hZCBhbmQgcHJlcGFyZQorICAgICAgICAj
IGZpbGVzIHNwZWNpZmljIHRvIHRoaXMgaW5zdGFsbCB1bnRpbCB0aGV5IGFyZSByZWFkeSB0byBt
b3ZlCisgICAgICAgICMgaW50byBwbGFjZS4KKyAgICAgICAgc2NyYXRjaF9kaXIgPSBzZWxmLl9j
cmVhdGVfc2NyYXRjaF9kaXJlY3RvcnkodGFyZ2V0X25hbWUpCisKKyAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgc2VsZi5faW5zdGFsbChwYWNrYWdlX25hbWU9dGFyZ2V0X25hbWUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRhcmdldF9wYXRoPXRhcmdldF9wYXRoLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICBzY3JhdGNoX2Rpcj1zY3JhdGNoX2RpciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgdXJsPXVybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsX3N1YnBhdGg9
dXJsX3N1YnBhdGgpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGVycjoKKyAgICAgICAgICAg
ICMgQXBwZW5kIGV4aXN0aW5nIEVycm9yIG1lc3NhZ2UgdG8gbmV3IEVycm9yLgorICAgICAgICAg
ICAgbWVzc2FnZSA9ICgiRXJyb3IgYXV0by1pbnN0YWxsaW5nIHRoZSAlcyBwYWNrYWdlIHRvOlxu
IgorICAgICAgICAgICAgICAgICAgICAgICAnICIlcyJcbicKKyAgICAgICAgICAgICAgICAgICAg
ICAgIiAtLT4gSW5uZXIgbWVzc2FnZTogJXMiCisgICAgICAgICAgICAgICAgICAgICAgICUgKHRh
cmdldF9uYW1lLCB0YXJnZXRfcGF0aCwgZXJyKSkKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlv
bihtZXNzYWdlKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgX2xvZy5kZWJ1ZygnQ2xl
YW5pbmcgdXA6IGRlbGV0aW5nICIlcyIuJyAlIHNjcmF0Y2hfZGlyKQorICAgICAgICAgICAgc2h1
dGlsLnJtdHJlZShzY3JhdGNoX2RpcikKKyAgICAgICAgX2xvZy5kZWJ1ZygnQXV0by1pbnN0YWxs
ZWQgJXMgdG86JyAlIHRhcmdldF9uYW1lKQorICAgICAgICBfbG9nLmRlYnVnKCcgICAgIiVzIicg
JSB0YXJnZXRfcGF0aCkKKworCitpZiBfX25hbWVfXz09Il9fbWFpbl9fIjoKKworICAgICMgQ29u
ZmlndXJlIHRoZSBhdXRvaW5zdGFsbCBsb2dnZXIgdG8gbG9nIERFQlVHIG1lc3NhZ2VzIGZvcgor
ICAgICMgZGV2ZWxvcG1lbnQgdGVzdGluZyBwdXJwb3Nlcy4KKyAgICBjb25zb2xlID0gbG9nZ2lu
Zy5TdHJlYW1IYW5kbGVyKCkKKworICAgIGZvcm1hdHRlciA9IGxvZ2dpbmcuRm9ybWF0dGVyKCcl
KG5hbWUpczogJShsZXZlbG5hbWUpLThzICUobWVzc2FnZSlzJykKKyAgICBjb25zb2xlLnNldEZv
cm1hdHRlcihmb3JtYXR0ZXIpCisgICAgX2xvZy5hZGRIYW5kbGVyKGNvbnNvbGUpCisgICAgX2xv
Zy5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQorCisgICAgIyBVc2UgYSBtb3JlIHZpc2libGUgdGVt
cCBkaXJlY3RvcnkgZm9yIGRlYnVnIHB1cnBvc2VzLgorICAgIHRoaXNfZGlyID0gb3MucGF0aC5k
aXJuYW1lKF9fZmlsZV9fKQorICAgIHRhcmdldF9kaXIgPSBvcy5wYXRoLmpvaW4odGhpc19kaXIs
ICJhdXRvaW5zdGFsbGVkIikKKyAgICB0ZW1wX2RpciA9IG9zLnBhdGguam9pbih0YXJnZXRfZGly
LCAiVGVtcCIpCisKKyAgICBpbnN0YWxsZXIgPSBBdXRvSW5zdGFsbGVyKHRhcmdldF9kaXI9dGFy
Z2V0X2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBfZGlyPXRlbXBfZGly
KQorCisgICAgaW5zdGFsbGVyLmluc3RhbGwoc2hvdWxkX3JlZnJlc2g9RmFsc2UsCisgICAgICAg
ICAgICAgICAgICAgICAgdGFyZ2V0X25hbWU9InBlcDgucHkiLAorICAgICAgICAgICAgICAgICAg
ICAgIHVybD0iaHR0cDovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2UvcC9wZXA4L3Bl
cDgtMC41LjAudGFyLmd6I21kNT01MTJhODE4YWY5OTc5MjkwY2Q2MTljY2U4ZTljMmUyYiIsCisg
ICAgICAgICAgICAgICAgICAgICAgdXJsX3N1YnBhdGg9InBlcDgtMC41LjAvcGVwOC5weSIpCisg
ICAgaW5zdGFsbGVyLmluc3RhbGwoc2hvdWxkX3JlZnJlc2g9RmFsc2UsCisgICAgICAgICAgICAg
ICAgICAgICAgdGFyZ2V0X25hbWU9Im1lY2hhbml6ZSIsCisgICAgICAgICAgICAgICAgICAgICAg
dXJsPSJodHRwOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2VzL3NvdXJjZS9tL21lY2hhbml6ZS9t
ZWNoYW5pemUtMC4xLjExLnppcCIsCisgICAgICAgICAgICAgICAgICAgICAgdXJsX3N1YnBhdGg9
Im1lY2hhbml6ZSIpCisKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
dGhpcmRwYXJ0eS9fX2luaXRfXy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhp
cmRwYXJ0eS9fX2luaXRfXy5weQppbmRleCBlZjY1YmVlLi4zMTJkYTUzIDEwMDY0NAotLS0gYS9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvX19pbml0X18ucHkKKysrIGIv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L19faW5pdF9fLnB5CkBAIC0x
ICsxLDkwIEBACi0jIFJlcXVpcmVkIGZvciBQeXRob24gdG8gc2VhcmNoIHRoaXMgZGlyZWN0b3J5
IGZvciBtb2R1bGUgZmlsZXMKKyMgQ29weXJpZ2h0IChDKSAyMDEwIENocmlzIEplcmRvbmVrIChj
amVyZG9uZWtAd2Via2l0Lm9yZykKKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUg
bWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisj
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIK
KyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKworIyBUaGlzIG1vZHVsZSBpcyByZXF1aXJlZCBmb3IgUHl0aG9uIHRvIHRyZWF0IHRo
aXMgZGlyZWN0b3J5IGFzIGEgcGFja2FnZS4KKworIiIiQXV0b2luc3RhbGxzIHRoaXJkLXBhcnR5
IGNvZGUgcmVxdWlyZWQgYnkgV2ViS2l0LiIiIgorCitpbXBvcnQgb3MKKworZnJvbSB3ZWJraXRw
eS5jb21tb24uc3lzdGVtLmF1dG9pbnN0YWxsIGltcG9ydCBBdXRvSW5zdGFsbGVyCisKKyMgUHV0
dGluZyB0aGUgYXV0b2luc3RhbGwgY29kZSBpbnRvIHdlYmtpdHB5L3RoaXJkcGFydHkvX19pbml0
X18ucHkKKyMgZW5zdXJlcyB0aGF0IG5vIGF1dG9pbnN0YWxsaW5nIG9jY3VycyB1bnRpbCBhIGNh
bGxlciBpbXBvcnRzIGZyb20KKyMgd2Via2l0cHkudGhpcmRwYXJ0eS4gIFRoaXMgaXMgdXNlZnVs
IGlmIHRoZSBjYWxsZXIgd2FudHMgdG8gY29uZmlndXJlCisjIGxvZ2dpbmcgcHJpb3IgdG8gZXhl
Y3V0aW5nIGF1dG9pbnN0YWxsIGNvZGUuCisKKyMgRklYTUU6IElkZWFsbHksIGEgcGFja2FnZSBz
aG91bGQgYmUgYXV0b2luc3RhbGxlZCBvbmx5IGlmIHRoZSBjYWxsZXIKKyMgICAgICAgIGF0dGVt
cHRzIHRvIGltcG9ydCBmcm9tIHRoYXQgaW5kaXZpZHVhbCBwYWNrYWdlLiAgVGhpcyB3b3VsZAor
IyAgICAgICAgbWFrZSBhdXRvaW5zdGFsbGluZyBsYXppZXIgdGhhbiBpdCBpcyBjdXJyZW50bHku
ICBUaGlzIGNhbgorIyAgICAgICAgcGVyaGFwcyBiZSBkb25lIHVzaW5nIFB5dGhvbidzIGltcG9y
dCBob29rcyBhcyB0aGUgb3JpZ2luYWwKKyMgICAgICAgIGF1dG9pbnN0YWxsIGltcGxlbWVudGF0
aW9uIGRpZC4KKworIyBXZSBwdXQgYXV0by1pbnN0YWxsZWQgdGhpcmQtcGFydHkgbW9kdWxlcyBp
biB0aGlzIGRpcmVjdG9yeS0tCisjCisjICAgICB3ZWJraXRweS90aGlyZHBhcnR5L2F1dG9pbnN0
YWxsZWQKK3RoaXJkcGFydHlfZGlyID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQorYXV0b2lu
c3RhbGxlZF9kaXIgPSBvcy5wYXRoLmpvaW4odGhpcmRwYXJ0eV9kaXIsICJhdXRvaW5zdGFsbGVk
IikKKworIyBXZSBuZWVkIHRvIGRvd25sb2FkIENsaWVudEZvcm0gc2luY2UgdGhlIG1lY2hhbml6
ZSBwYWNrYWdlIHRoYXQgd2UgZG93bmxvYWQKKyMgYmVsb3cgcmVxdWlyZXMgaXQuICBUaGUgbWVj
aGFuaXplIHBhY2thZ2UgdXNlcyBDbGllbnRGb3JtLCBmb3IgZXhhbXBsZSwKKyMgaW4gX2h0bWwu
cHkuICBTaW5jZSBtZWNoYW5pemUgaW1wb3J0cyBDbGllbnRGb3JtIGluIHRoZSBmb2xsb3dpbmcg
d2F5LAorIworIyA+IGltcG9ydCBzZ21sbGliLCBDbGllbnRGb3JtCisjCisjIHRoZSBzZWFyY2gg
cGF0aCBuZWVkcyB0byBpbmNsdWRlIENsaWVudEZvcm0uICBXZSBwdXQgQ2xpZW50Rm9ybSBpbgor
IyBpdHMgb3duIGRpcmVjdG9yeSBzbyB0aGF0IHdlIGNhbiBpbmNsdWRlIGl0IGluIHRoZSBzZWFy
Y2ggcGF0aCB3aXRob3V0CisjIGluY2x1ZGluZyBvdGhlciBtb2R1bGVzIGFzIGEgc2lkZSBlZmZl
Y3QuCitjbGllbnRmb3JtX2RpciA9IG9zLnBhdGguam9pbihhdXRvaW5zdGFsbGVkX2RpciwgImNs
aWVudGZvcm0iKQoraW5zdGFsbGVyID0gQXV0b0luc3RhbGxlcihhcHBlbmRfdG9fc2VhcmNoX3Bh
dGg9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X2Rpcj1jbGllbnRmb3Jt
X2RpcikKK2luc3RhbGxlci5pbnN0YWxsKHVybD0iaHR0cDovL3B5cGkucHl0aG9uLm9yZy9wYWNr
YWdlcy9zb3VyY2UvQy9DbGllbnRGb3JtL0NsaWVudEZvcm0tMC4yLjEwLnppcCIsCisgICAgICAg
ICAgICAgICAgICB1cmxfc3VicGF0aD0iQ2xpZW50Rm9ybS5weSIpCisKKyMgVGhlIHJlbWFpbmlu
ZyBwYWNrYWdlcyBkbyBub3QgbmVlZCB0byBiZSBpbiB0aGUgc2VhcmNoIHBhdGgsIHNvIHdlIGNy
ZWF0ZQorIyBhIG5ldyBBdXRvSW5zdGFsbGVyIGluc3RhbmNlIHRoYXQgZG9lcyBub3QgYXBwZW5k
IHRvIHRoZSBzZWFyY2ggcGF0aC4KK2luc3RhbGxlciA9IEF1dG9JbnN0YWxsZXIodGFyZ2V0X2Rp
cj1hdXRvaW5zdGFsbGVkX2RpcikKKworaW5zdGFsbGVyLmluc3RhbGwodXJsPSJodHRwOi8vcHlw
aS5weXRob24ub3JnL3BhY2thZ2VzL3NvdXJjZS9tL21lY2hhbml6ZS9tZWNoYW5pemUtMC4xLjEx
LnppcCIsCisgICAgICAgICAgICAgICAgICB1cmxfc3VicGF0aD0ibWVjaGFuaXplIikKK2luc3Rh
bGxlci5pbnN0YWxsKHVybD0iaHR0cDovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2Uv
cC9wZXA4L3BlcDgtMC41LjAudGFyLmd6I21kNT01MTJhODE4YWY5OTc5MjkwY2Q2MTljY2U4ZTlj
MmUyYiIsCisgICAgICAgICAgICAgICAgICB1cmxfc3VicGF0aD0icGVwOC0wLjUuMC9wZXA4LnB5
IikKKworIyBTaW5jZSBpcmNsaWIgYW5kIGlyY2JvdCBhcmUgdHdvIHRvcC1sZXZlbCBwYWNrYWdl
cywgd2UgbmVlZCB0byBpbXBvcnQKKyMgdGhlbSBzZXBhcmF0ZWx5LiAgV2UgZ3JvdXAgdGhlbSBp
bnRvIGFuIGlyYyBwYWNrYWdlIGZvciBiZXR0ZXIKKyMgb3JnYW5pemF0aW9uIHB1cnBvc2VzLgor
aXJjX2RpciA9IG9zLnBhdGguam9pbihhdXRvaW5zdGFsbGVkX2RpciwgImlyYyIpCitpbnN0YWxs
ZXIgPSBBdXRvSW5zdGFsbGVyKHRhcmdldF9kaXI9aXJjX2RpcikKK2luc3RhbGxlci5pbnN0YWxs
KHVybD0iaHR0cDovL2l3ZWIuZGwuc291cmNlZm9yZ2UubmV0L3Byb2plY3QvcHl0aG9uLWlyY2xp
Yi9weXRob24taXJjbGliLzAuNC44L3B5dGhvbi1pcmNsaWItMC40LjguemlwIiwKKyAgICAgICAg
ICAgICAgICAgIHVybF9zdWJwYXRoPSJpcmNsaWIucHkiKQoraW5zdGFsbGVyLmluc3RhbGwodXJs
PSJodHRwOi8vaXdlYi5kbC5zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9weXRob24taXJjbGliL3B5
dGhvbi1pcmNsaWIvMC40LjgvcHl0aG9uLWlyY2xpYi0wLjQuOC56aXAiLAorICAgICAgICAgICAg
ICAgICAgdXJsX3N1YnBhdGg9ImlyY2JvdC5weSIpCisKK3JlYWRtZV9wYXRoID0gb3MucGF0aC5q
b2luKGF1dG9pbnN0YWxsZWRfZGlyLCAiUkVBRE1FIikKK2lmIG5vdCBvcy5wYXRoLmV4aXN0cyhy
ZWFkbWVfcGF0aCk6CisgICAgZmlsZSA9IG9wZW4ocmVhZG1lX3BhdGgsICJ3IikKKyAgICB0cnk6
CisgICAgICAgIGZpbGUud3JpdGUoIlRoaXMgZGlyZWN0b3J5IGlzIGF1dG8tZ2VuZXJhdGVkIGJ5
IFdlYktpdCBhbmQgaXMgIgorICAgICAgICAgICAgICAgICAgICJzYWZlIHRvIGRlbGV0ZS5cbkl0
IGNvbnRhaW5zIG5lZWRlZCB0aGlyZC1wYXJ0eSBQeXRob24gIgorICAgICAgICAgICAgICAgICAg
ICJwYWNrYWdlcyBhdXRvbWF0aWNhbGx5IGRvd25sb2FkZWQgZnJvbSB0aGUgd2ViLiIpCisgICAg
ZmluYWxseToKKyAgICAgICAgZmlsZS5jbG9zZSgpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvYXV0b2luc3RhbGwucHkgYi9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvYXV0b2luc3RhbGwucHkKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDZjODY0Y2YuLjAwMDAwMDAKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS90aGlyZHBhcnR5L2F1dG9pbnN0YWxsLnB5CisrKyAvZGV2L251bGwKQEAgLTEs
MzM2ICswLDAgQEAKLSMgQ29weXJpZ2h0IChjKSAyMDA5LCBEYW5pZWwgS3JlY2ggQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSMgCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMg
Ci0jICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgCi0jICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSMgCi0jICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIERhbmllbCBLcmVj
aCBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIyAKLSMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgSE9MREVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotIiIiXAotcGFja2FnZSBsb2Fk
ZXIgZm9yIGF1dG8gaW5zdGFsbGluZyBQeXRob24gcGFja2FnZXMuCi0KLUEgcGFja2FnZSBsb2Fk
ZXIgaW4gdGhlIHNwaXJpdCBvZiBaZXJvIEluc3RhbGwgdGhhdCBjYW4gYmUgdXNlZCB0bwotaW5q
ZWN0IGRlcGVuZGVuY2llcyBpbnRvIHRoZSBpbXBvcnQgcHJvY2Vzcy4gCi0KLQotVG8gaW5zdGFs
bDo6Ci0KLSAgICBlYXN5X2luc3RhbGwgLVUgYXV0b2luc3RhbGwKLQotICAgICAgb3IgCi0KLSAg
ICBkb3dubG9hZCwgdW5wYWNrLCBweXRob24gc2V0dXAucHkgaW5zdGFsbAotCi0gICAgICBvciAK
LQotICAgIHRyeSB0aGUgYm9vdHN0cmFwIGxvYWRlci4gU2VlIGJlbG93LgotCi0KLVRvIHVzZTo6
Ci0KLSAgICAjIFlvdSBjYW4gYmluZCBhbnkgcGFja2FnZSBuYW1lIHRvIGEgVVJMIHBvaW50aW5n
IHRvIHNvbWV0aGluZwotICAgICMgdGhhdCBjYW4gYmUgaW1wb3J0ZWQgdXNpbmcgdGhlIHppcGlt
cG9ydGVyLgotCi0gICAgYXV0b2luc3RhbGwuYmluZCgicHltYXJjIiwgImh0dHA6Ly9weXBpLnB5
dGhvbi5vcmcvcGFja2FnZXMvMi41L3AvcHltYXJjL3B5bWFyYy0yLjEtcHkyLjUuZWdnIikKLQot
ICAgIGltcG9ydCBweW1hcmMKLQotICAgIHByaW50IHB5bWFyYy5fX3ZlcnNpb25fXywgcHltYXJj
Ll9fZmlsZV9fCi0KLSAgICAKLUNoYW5nZWxvZzo6Ci0KLS0gYWRkZWQgc3VwcG9ydCBmb3Igbm9u
IHRvcCBsZXZlbCBwYWNrYWdlcy4KLS0gY2FjaGUgZmlsZXMgbm93IHVzZSBmaWxlbmFtZSBwYXJ0
IGZyb20gVVJMLgotLSBhcHBsaWVkIHBhdGNoIGZyb20gRXJpYyBTZWlkZWwgPGVzZWlkZWxAZ29v
Z2xlLmNvbT4gdG8gYWRkIHN1cHBvcnQKLWZvciBsb2FkaW5nIG1vZHVsZXMgd2hlcmUgdGhlIG1v
ZHVsZSBpcyBub3QgYXQgdGhlIHJvb3Qgb2YgdGhlIC56aXAKLWZpbGUuCi0KLQotVE9ETzo6Ci0K
LS0gYSBkZXNjcmlwdGlvbiBvZiB0aGUgaW50ZW5kZWQgdXNlIGNhc2UKLS0gYWRkcmVzcyBvdGhl
ciBpc3N1ZXMgcG9pbnRlZCBvdXQgaW46Ci0KLSAgICBodHRwOi8vbWFpbC5weXRob24ub3JnL3Bp
cGVybWFpbC9weXRob24tZGV2LzIwMDgtTWFyY2gvMDc3OTI2Lmh0bWwKLQotU2NyaWJibGVzOjoK
LQotcHVsbCB2cy4gcHVzaAotdXNlciB2cy4gc3lzdGVtCi13ZWIgdnMuIGZpbGVzeXN0ZW0KLWF1
dG8gdnMuIG1hbnVhbAotCi1tYW5hZ2UgZGV2ZWxvcG1lbnQgc2FuZGJveGVzCi0KLW9wdGlvbmFs
IGludGVyZmFjZXMuLi4KLQotICAgIGRlZiBnZXRfZGF0YShwYXRobmFtZSkgLT4gc3RyaW5nIHdp
dGggZmlsZSBkYXRhLgotCi0gICAgUmV0dXJuIHRoZSBkYXRhIGFzc29jaWF0ZWQgd2l0aCAncGF0
aG5hbWUnLiBSYWlzZSBJT0Vycm9yIGlmCi0gICAgdGhlIGZpbGUgd2Fzbid0IGZvdW5kLiIpOwot
Ci0gICAgZGVmIGlzX3BhY2thZ2UsCi0gICAgImlzX3BhY2thZ2UoZnVsbG5hbWUpIC0+IGJvb2wu
Ci0KLSAgICBSZXR1cm4gVHJ1ZSBpZiB0aGUgbW9kdWxlIHNwZWNpZmllZCBieSBmdWxsbmFtZSBp
cyBhIHBhY2thZ2UuCi0gICAgUmFpc2UgWmlwSW1wb3J0RXJyb3IgaXMgdGhlIG1vZHVsZSBjb3Vs
ZG4ndCBiZSBmb3VuZC4iKTsKLQotICAgIGRlZiBnZXRfY29kZSwKLSAgICAiZ2V0X2NvZGUoZnVs
bG5hbWUpIC0+IGNvZGUgb2JqZWN0LgotCi0gICAgUmV0dXJuIHRoZSBjb2RlIG9iamVjdCBmb3Ig
dGhlIHNwZWNpZmllZCBtb2R1bGUuIFJhaXNlIFppcEltcG9ydEVycm9yCi0gICAgaXMgdGhlIG1v
ZHVsZSBjb3VsZG4ndCBiZSBmb3VuZC4iKTsKLQotICAgIGRlZiBnZXRfc291cmNlLAotICAgICJn
ZXRfc291cmNlKGZ1bGxuYW1lKSAtPiBzb3VyY2Ugc3RyaW5nLgotCi0gICAgUmV0dXJuIHRoZSBz
b3VyY2UgY29kZSBmb3IgdGhlIHNwZWNpZmllZCBtb2R1bGUuIFJhaXNlIFppcEltcG9ydEVycm9y
Ci0gICAgaXMgdGhlIG1vZHVsZSBjb3VsZG4ndCBiZSBmb3VuZCwgcmV0dXJuIE5vbmUgaWYgdGhl
IGFyY2hpdmUgZG9lcwotICAgIGNvbnRhaW4gdGhlIG1vZHVsZSwgYnV0IGhhcyBubyBzb3VyY2Ug
Zm9yIGl0LiIpOwotCi0KLUF1dG9pbnN0YWxsIGNhbiBhbHNvIGJlIGJvb3RzdHJhcGVkIHdpdGgg
dGhlIG5hc2NlbnQgcGFja2FnZSBsb2FkZXIKLWJvb3RzdHJhcCBtb2R1bGUuIEZvciBleGFtcGxl
OjoKLQotICAgICMgIG9yIHZpYSB0aGUgYm9vdHN0cmFwCi0gICAgIyBsb2FkZXIuCi0KLSAgICB0
cnk6Ci0gICAgICAgIF92ZXJzaW9uID0gIjAuMiIKLSAgICAgICAgaW1wb3J0IGF1dG9pbnN0YWxs
Ci0gICAgICAgIGlmIGF1dG9pbnN0YWxsLl9fdmVyc2lvbl9fICE9IF92ZXJzaW9uOgotICAgICAg
ICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoIkEgZGlmZmVyZW50IHZlcnNpb24gdGhhbiBleHBlY3Rl
ZCBmb3VuZC4iKQotICAgIGV4Y2VwdCBJbXBvcnRFcnJvciwgZToKLSAgICAgICAgIyBodHRwOi8v
c3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvc2FuZGJveC90cnVuay9ib290c3RyYXAvYm9vdHN0cmFw
LnB5Ci0gICAgICAgIGltcG9ydCBib290c3RyYXAgCi0gICAgICAgIHB5cGkgPSAiaHR0cDovL3B5
cGkucHl0aG9uLm9yZyIKLSAgICAgICAgZGlyID0gInBhY2thZ2VzL3NvdXJjZS9hL2F1dG9pbnN0
YWxsIgotICAgICAgICB1cmwgPSAiJXMvJXMvYXV0b2luc3RhbGwtJXMudGFyLmd6IiAlIChweXBp
LCBkaXIsIF92ZXJzaW9uKQotICAgICAgICBib290c3RyYXAubWFpbigodXJsLCkpCi0gICAgICAg
IGltcG9ydCBhdXRvaW5zdGFsbAotCi1SZWZlcmVuY2VzOjoKLQotICBodHRwOi8vMGluc3RhbGwu
bmV0LwotICBodHRwOi8vd3d3LnB5dGhvbi5vcmcvZGV2L3BlcHMvcGVwLTAzMDIvCi0gIGh0dHA6
Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9zYW5kYm94L3RydW5rL2ltcG9ydF9pbl9weQotICBo
dHRwOi8vMGluc3RhbGwubmV0L2luamVjdG9yLWZpbmQuaHRtbAotICBodHRwOi8vcm9zY2lkdXMu
Y29tL2Rlc2t0b3Avbm9kZS85MDMKLQotIiIiCi0KLSMgVG8gYWxsb3cgdXNlIG9mIHRoZSAid2l0
aCIga2V5d29yZCBmb3IgUHl0aG9uIDIuNSB1c2Vycy4KLWZyb20gX19mdXR1cmVfXyBpbXBvcnQg
d2l0aF9zdGF0ZW1lbnQKLQotX192ZXJzaW9uX18gPSAiMC4yIgotX19kb2Nmb3JtYXRfXyA9ICJy
ZXN0cnVjdHVyZWR0ZXh0IGVuIgotCi1pbXBvcnQgb3MKLWltcG9ydCBuZXcKLWltcG9ydCBzeXMK
LWltcG9ydCB1cmxsaWIKLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgdGVtcGZpbGUKLWltcG9ydCB6
aXBpbXBvcnQKLQotX2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQotCi0KLV9p
bXBvcnRlciA9IE5vbmUKLQotZGVmIF9nZXRJbXBvcnRlcigpOgotICAgIGdsb2JhbCBfaW1wb3J0
ZXIKLSAgICBpZiBfaW1wb3J0ZXIgaXMgTm9uZToKLSAgICAgICAgX2ltcG9ydGVyID0gSW1wb3J0
ZXIoKQotICAgICAgICBzeXMubWV0YV9wYXRoLmFwcGVuZChfaW1wb3J0ZXIpCi0gICAgcmV0dXJu
IF9pbXBvcnRlcgotCi1kZWYgYmluZChwYWNrYWdlX25hbWUsIHVybCwgemlwX3N1YnBhdGg9Tm9u
ZSk6Ci0gICAgIiIiYmluZCBhIHRvcCBsZXZlbCBwYWNrYWdlIG5hbWUgdG8gYSBVUkwuCi0KLSAg
ICBUaGUgcGFja2FnZSBuYW1lIHNob3VsZCBiZSBhIHBhY2thZ2UgbmFtZSBhbmQgdGhlIHVybCBz
aG91bGQgYmUgYQotICAgIHVybCB0byBzb21ldGhpbmcgdGhhdCBjYW4gYmUgaW1wb3J0ZWQgdXNp
bmcgdGhlIHppcGltcG9ydGVyLgotCi0gICAgT3B0aW9uYWwgemlwX3N1YnBhdGggcGFyYW1ldGVy
IGFsbG93cyBzZWFyY2hpbmcgZm9yIG1vZHVsZXMKLSAgICBiZWxvdyB0aGUgcm9vdCBsZXZlbCBv
ZiB0aGUgemlwIGZpbGUuCi0gICAgIiIiCi0gICAgX2dldEltcG9ydGVyKCkuYmluZChwYWNrYWdl
X25hbWUsIHVybCwgemlwX3N1YnBhdGgpCi0KLQotY2xhc3MgQ2FjaGUob2JqZWN0KToKLQotICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBkaXJlY3Rvcnk9Tm9uZSk6Ci0gICAgICAgIGlmIGRpcmVjdG9y
eSBpcyBOb25lOgotICAgICAgICAgICAgIyBEZWZhdWx0IHRvIHB1dHRpbmcgdGhlIGNhY2hlIGRp
cmVjdG9yeSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkKLSAgICAgICAgICAgICMgYXMgdGhpcyBmaWxl
LgotICAgICAgICAgICAgY29udGFpbmluZ19kaXJlY3RvcnkgPSBvcy5wYXRoLmRpcm5hbWUoX19m
aWxlX18pCi0gICAgICAgICAgICBkaXJlY3RvcnkgPSBvcy5wYXRoLmpvaW4oY29udGFpbmluZ19k
aXJlY3RvcnksICJhdXRvaW5zdGFsbC5jYWNoZS5kIik7Ci0KLSAgICAgICAgc2VsZi5kaXJlY3Rv
cnkgPSBkaXJlY3RvcnkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgaWYgbm90IG9zLnBhdGgu
ZXhpc3RzKHNlbGYuZGlyZWN0b3J5KToKLSAgICAgICAgICAgICAgICBzZWxmLl9jcmVhdGVfY2Fj
aGVfZGlyZWN0b3J5KCkKLSAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZXJyOgotICAgICAgICAg
ICAgX2xvZ2dlci5leGNlcHRpb24oZXJyKQotICAgICAgICAgICAgc2VsZi5jYWNoZV9kaXJlY3Ry
eSA9IHRlbXBmaWxlLm1rZHRlbXAoKQotICAgICAgICBfbG9nZ2VyLmluZm8oIlVzaW5nIGNhY2hl
IGRpcmVjdG9yeSAnJXMnLiIgJSBzZWxmLmRpcmVjdG9yeSkKLSAgICAKLSAgICBkZWYgX2NyZWF0
ZV9jYWNoZV9kaXJlY3Rvcnkoc2VsZik6Ci0gICAgICAgIF9sb2dnZXIuZGVidWcoIkNyZWF0aW5n
IGNhY2hlIGRpcmVjdG9yeSAnJXMnLiIgJSBzZWxmLmRpcmVjdG9yeSkKLSAgICAgICAgb3MubWtk
aXIoc2VsZi5kaXJlY3RvcnkpCi0gICAgICAgIHJlYWRtZV9wYXRoID0gb3MucGF0aC5qb2luKHNl
bGYuZGlyZWN0b3J5LCAiUkVBRE1FIikKLSAgICAgICAgd2l0aCBvcGVuKHJlYWRtZV9wYXRoLCAi
dyIpIGFzIGY6Ci0gICAgICAgICAgICBmLndyaXRlKCJUaGlzIGRpcmVjdG9yeSB3YXMgYXV0by1n
ZW5lcmF0ZWQgYnkgJyVzJy5cbiIKLSAgICAgICAgICAgICAgICAgICAgIkl0IGlzIHNhZmUgdG8g
ZGVsZXRlLlxuIiAlIF9fZmlsZV9fKQotCi0gICAgZGVmIGdldChzZWxmLCB1cmwpOgotICAgICAg
ICBfbG9nZ2VyLmluZm8oIkdldHRpbmcgJyVzJyBmcm9tIGNhY2hlLiIgJSB1cmwpCi0gICAgICAg
IGZpbGVuYW1lID0gdXJsLnJzcGxpdCgiLyIpWy0xXQotCi0gICAgICAgICMgc28gdGhhdCBzb3Vy
Y2UgdXJsIGlzIHNpZ25pZmljYW50IGluIGRldGVybWluaW5nIGNhY2hlIGhpdHMKLSAgICAgICAg
ZCA9IG9zLnBhdGguam9pbihzZWxmLmRpcmVjdG9yeSwgIiVzIiAlIGhhc2godXJsKSkKLSAgICAg
ICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGQpOgotICAgICAgICAgICAgb3MubWtkaXIoZCkKLQot
ICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihkLCBmaWxlbmFtZSkgCi0KLSAgICAgICAg
aWYgb3MucGF0aC5leGlzdHMoZmlsZW5hbWUpOgotICAgICAgICAgICAgX2xvZ2dlci5kZWJ1Zygi
Li4uIGFscmVhZHkgY2FjaGVkIGluIGZpbGUgJyVzJy4iICUgZmlsZW5hbWUpCi0gICAgICAgIGVs
c2U6Ci0gICAgICAgICAgICBfbG9nZ2VyLmRlYnVnKCIuLi4gbm90IGluIGNhY2hlLiBDYWNoaW5n
IGluICclcycuIiAlIGZpbGVuYW1lKQotICAgICAgICAgICAgc3RyZWFtID0gZmlsZShmaWxlbmFt
ZSwgIndiIikKLSAgICAgICAgICAgIHNlbGYuZG93bmxvYWQodXJsLCBzdHJlYW0pCi0gICAgICAg
ICAgICBzdHJlYW0uY2xvc2UoKQotICAgICAgICByZXR1cm4gZmlsZW5hbWUKLQotICAgIGRlZiBk
b3dubG9hZChzZWxmLCB1cmwsIHN0cmVhbSk6Ci0gICAgICAgIF9sb2dnZXIuaW5mbygiRG93bmxv
YWRpbmc6ICVzIiAlIHVybCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbmV0c3RyZWFtID0g
dXJsbGliLnVybG9wZW4odXJsKQotICAgICAgICAgICAgY29kZSA9IDIwMAotICAgICAgICAgICAg
aWYgaGFzYXR0cihuZXRzdHJlYW0sICJnZXRjb2RlIik6Ci0gICAgICAgICAgICAgICAgY29kZSA9
IG5ldHN0cmVhbS5nZXRjb2RlKCkKLSAgICAgICAgICAgIGlmIG5vdCAyMDAgPD0gY29kZSA8IDMw
MDoKLSAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJIVFRQIEVycm9yIGNvZGUgJXMi
ICUgY29kZSkKLSAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZXJyOgotICAgICAgICAgICAgX2xv
Z2dlci5leGNlcHRpb24oZXJyKQotCi0gICAgICAgIEJVRlNJWkUgPSAyKioxMyAgIyA4S0IKLSAg
ICAgICAgc2l6ZSA9IDAKLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIGRhdGEgPSBu
ZXRzdHJlYW0ucmVhZChCVUZTSVpFKQotICAgICAgICAgICAgaWYgbm90IGRhdGE6Ci0gICAgICAg
ICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIHN0cmVhbS53cml0ZShkYXRhKQotICAgICAgICAg
ICAgc2l6ZSArPSBsZW4oZGF0YSkKLSAgICAgICAgbmV0c3RyZWFtLmNsb3NlKCkKLSAgICAgICAg
X2xvZ2dlci5pbmZvKCJEb3dubG9hZGVkICVkIGJ5dGVzLiIgJSBzaXplKQotCi0KLWNsYXNzIElt
cG9ydGVyKG9iamVjdCk6Ci0KLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIHNlbGYu
cGFja2FnZXMgPSB7fQotICAgICAgICBzZWxmLl9fY2FjaGUgPSBOb25lCi0KLSAgICBkZWYgX19n
ZXRfc3RvcmUoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9fc3RvcmUKLSAgICBzdG9yZSA9
IHByb3BlcnR5KF9fZ2V0X3N0b3JlKQotCi0gICAgZGVmIF9nZXRfY2FjaGUoc2VsZik6Ci0gICAg
ICAgIGlmIHNlbGYuX19jYWNoZSBpcyBOb25lOgotICAgICAgICAgICAgc2VsZi5fX2NhY2hlID0g
Q2FjaGUoKQotICAgICAgICByZXR1cm4gc2VsZi5fX2NhY2hlCi0gICAgZGVmIF9zZXRfY2FjaGUo
c2VsZiwgY2FjaGUpOgotICAgICAgICBzZWxmLl9fY2FjaGUgPSBjYWNoZQotICAgIGNhY2hlID0g
cHJvcGVydHkoX2dldF9jYWNoZSwgX3NldF9jYWNoZSkKLQotICAgIGRlZiBmaW5kX21vZHVsZShz
ZWxmLCBmdWxsbmFtZSwgcGF0aD1Ob25lKToKLSAgICAgICAgIiIiLT4gc2VsZiBvciBOb25lLgot
Ci0gICAgICAgIFNlYXJjaCBmb3IgYSBtb2R1bGUgc3BlY2lmaWVkIGJ5ICdmdWxsbmFtZScuICdm
dWxsbmFtZScgbXVzdCBiZQotICAgICAgICB0aGUgZnVsbHkgcXVhbGlmaWVkIChkb3R0ZWQpIG1v
ZHVsZSBuYW1lLiBJdCByZXR1cm5zIHRoZQotICAgICAgICB6aXBpbXBvcnRlciBpbnN0YW5jZSBp
dHNlbGYgaWYgdGhlIG1vZHVsZSB3YXMgZm91bmQsIG9yIE5vbmUgaWYKLSAgICAgICAgaXQgd2Fz
bid0LiBUaGUgb3B0aW9uYWwgJ3BhdGgnIGFyZ3VtZW50IGlzIGlnbm9yZWQgLS0gaXQncwotICAg
ICAgICB0aGVyZSBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBpbXBvcnRlciBwcm90b2NvbC4i
KTsKLSAgICAgICAgIiIiCi0gICAgICAgIF9sb2dnZXIuZGVidWcoImZpbmRfbW9kdWxlKCVzLCBw
YXRoPSVzKSIgJSAoZnVsbG5hbWUsIHBhdGgpKQotCi0gICAgICAgIGlmIGZ1bGxuYW1lIGluIHNl
bGYucGFja2FnZXM6Ci0gICAgICAgICAgICAodXJsLCB6aXBfc3VicGF0aCkgPSBzZWxmLnBhY2th
Z2VzW2Z1bGxuYW1lXQotICAgICAgICAgICAgZmlsZW5hbWUgPSBzZWxmLmNhY2hlLmdldCh1cmwp
Ci0gICAgICAgICAgICB6aXBfcGF0aCA9ICIlcy8lcyIgJSAoZmlsZW5hbWUsIHppcF9zdWJwYXRo
KSBpZiB6aXBfc3VicGF0aCBlbHNlIGZpbGVuYW1lCi0gICAgICAgICAgICBfbG9nZ2VyLmRlYnVn
KCJmdWxsbmFtZTogJXMgdXJsOiAlcyBwYXRoOiAlcyB6aXBfcGF0aDogJXMiICUgKGZ1bGxuYW1l
LCB1cmwsIHBhdGgsIHppcF9wYXRoKSkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAg
ICBsb2FkZXIgPSB6aXBpbXBvcnQuemlwaW1wb3J0ZXIoemlwX3BhdGgpCi0gICAgICAgICAgICAg
ICAgX2xvZ2dlci5kZWJ1ZygicmV0dXJuaW5nOiAlcyIgJSBsb2FkZXIpCi0gICAgICAgICAgICBl
eGNlcHQgRXhjZXB0aW9uLCBlOgotICAgICAgICAgICAgICAgIF9sb2dnZXIuZXhjZXB0aW9uKGUp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgICAgIHJldHVybiBsb2FkZXIK
LSAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgIGRlZiBiaW5kKHNlbGYsIHBhY2thZ2VfbmFtZSwg
dXJsLCB6aXBfc3VicGF0aCk6Ci0gICAgICAgIF9sb2dnZXIuZGVidWcoImJpbmRpbmc6ICVzIC0+
ICVzIHN1YnBhdGg6ICVzIiAlCi0gICAgICAgICAgICAgICAgICAgICAgKHBhY2thZ2VfbmFtZSwg
dXJsLCB6aXBfc3VicGF0aCkpCi0gICAgICAgIHNlbGYucGFja2FnZXNbcGFja2FnZV9uYW1lXSA9
ICh1cmwsIHppcF9zdWJwYXRoKQotCi0KLWlmIF9fbmFtZV9fPT0iX19tYWluX18iOgotICAgIGlt
cG9ydCBsb2dnaW5nCi0gICAgI2xvZ2dpbmcuYmFzaWNDb25maWcoKQotICAgIGxvZ2dlciA9IGxv
Z2dpbmcuZ2V0TG9nZ2VyKCkKLQotICAgIGNvbnNvbGUgPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIo
KQotICAgIGNvbnNvbGUuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKLSAgICAjIHNldCBhIGZvcm1h
dCB3aGljaCBpcyBzaW1wbGVyIGZvciBjb25zb2xlIHVzZQotICAgIGZvcm1hdHRlciA9IGxvZ2dp
bmcuRm9ybWF0dGVyKCclKG5hbWUpLTEyczogJShsZXZlbG5hbWUpLThzICUobWVzc2FnZSlzJykK
LSAgICAjIHRlbGwgdGhlIGhhbmRsZXIgdG8gdXNlIHRoaXMgZm9ybWF0Ci0gICAgY29uc29sZS5z
ZXRGb3JtYXR0ZXIoZm9ybWF0dGVyKQotICAgICMgYWRkIHRoZSBoYW5kbGVyIHRvIHRoZSByb290
IGxvZ2dlcgotICAgIGxvZ2dlci5hZGRIYW5kbGVyKGNvbnNvbGUpCi0gICAgbG9nZ2VyLnNldExl
dmVsKGxvZ2dpbmcuSU5GTykKLQotICAgIGJpbmQoInB5bWFyYyIsICJodHRwOi8vcHlwaS5weXRo
b24ub3JnL3BhY2thZ2VzLzIuNS9wL3B5bWFyYy9weW1hcmMtMi4xLXB5Mi41LmVnZyIpCi0KLSAg
ICBpbXBvcnQgcHltYXJjCi0KLSAgICBwcmludCBweW1hcmMuX192ZXJzaW9uX18sIHB5bWFyYy5f
X2ZpbGVfXwotCi0gICAgYXNzZXJ0IHB5bWFyYy5fX3ZlcnNpb25fXz09IjIuMSIKLQotICAgIGQg
PSBfZ2V0SW1wb3J0ZXIoKS5jYWNoZS5kaXJlY3RvcnkKLSAgICBhc3NlcnQgZCBpbiBweW1hcmMu
X19maWxlX18sICInJXMnIG5vdCBmb3VuZCBpbiBweW1hcmMuX19maWxlX18gKCVzKSIgJSAoZCwg
cHltYXJjLl9fZmlsZV9fKQotCi0gICAgIyBDYW4gbm93IGFsc28gYmluZCB0byBub24gdG9wIGxl
dmVsIHBhY2thZ2VzLiBUaGUgcGFja2FnZXMKLSAgICAjIGxlYWRpbmcgdXAgdG8gdGhlIHBhY2th
Z2UgYmVpbmcgYm91bmQgd2lsbCBuZWVkIHRvIGJlIGRlZmluZWQKLSAgICAjIGhvd2V2ZXIuCi0g
ICAgIwotICAgICMgYmluZCgicmRmLnBsdWdpbnMuc3RvcmVzLm1lbW9yeSIsIAotICAgICMgICAg
ICAiaHR0cDovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy8yLjUvci9yZGYucGx1Z2lucy5zdG9y
ZXMubWVtZW9yeS9yZGYucGx1Z2lucy5zdG9yZXMubWVtb3J5LTAuOWEtcHkyLjUuZWdnIikKLSAg
ICAjCi0gICAgIyBmcm9tIHJkZi5wbHVnaW5zLnN0b3Jlcy5tZW1vcnkgaW1wb3J0IE1lbW9yeQot
Ci0KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9h
dXRvaW5zdGFsbGVkL19faW5pdF9fLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90
aGlyZHBhcnR5L2F1dG9pbnN0YWxsZWQvX19pbml0X18ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDhlNDYxNDUuLjAwMDAwMDAKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS90aGlyZHBhcnR5L2F1dG9pbnN0YWxsZWQvX19pbml0X18ucHkKKysrIC9kZXYvbnVsbApA
QCAtMSwxNiArMCwwIEBACi0jIFJlcXVpcmVkIGZvciBQeXRob24gdG8gc2VhcmNoIHRoaXMgZGly
ZWN0b3J5IGZvciBtb2R1bGUgZmlsZXMKLQotaW1wb3J0IHdlYmtpdHB5LnRoaXJkcGFydHkuYXV0
b2luc3RhbGwgYXMgYXV0b2luc3RhbGwKLQotIyBMaXN0IG91ciB0aGlyZC1wYXJ0eSBsaWJyYXJ5
IGRlcGVuZGVuY2llcyBoZXJlIGFuZCB3aGVyZSB0aGV5IGNhbiBiZQotIyBkb3dubG9hZGVkLgot
YXV0b2luc3RhbGwuYmluZCgiQ2xpZW50Rm9ybSIsICJodHRwOi8vcHlwaS5weXRob24ub3JnL3Bh
Y2thZ2VzL3NvdXJjZS9DL0NsaWVudEZvcm0vQ2xpZW50Rm9ybS0wLjIuMTAuemlwIiwgIkNsaWVu
dEZvcm0tMC4yLjEwIikKLWF1dG9pbnN0YWxsLmJpbmQoIm1lY2hhbml6ZSIsICJodHRwOi8vcHlw
aS5weXRob24ub3JnL3BhY2thZ2VzL3NvdXJjZS9tL21lY2hhbml6ZS9tZWNoYW5pemUtMC4xLjEx
LnppcCIsICJtZWNoYW5pemUtMC4xLjExIikKLSMgV2UgaW1wb3J0IGJvdGggaXJjbGliIGFuZCBp
cmNib3QgYmVjYXVzZSBpcmNsaWIgaGFzIHR3byB0b3AtbGV2ZWwgcGFja2FnZXMuCi1hdXRvaW5z
dGFsbC5iaW5kKCJpcmNsaWIiLCAiaHR0cDovL2l3ZWIuZGwuc291cmNlZm9yZ2UubmV0L3Byb2pl
Y3QvcHl0aG9uLWlyY2xpYi9weXRob24taXJjbGliLzAuNC44L3B5dGhvbi1pcmNsaWItMC40Ljgu
emlwIiwgInB5dGhvbi1pcmNsaWItMC40LjgiKQotYXV0b2luc3RhbGwuYmluZCgiaXJjYm90Iiwg
Imh0dHA6Ly9pd2ViLmRsLnNvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3B5dGhvbi1pcmNsaWIvcHl0
aG9uLWlyY2xpYi8wLjQuOC9weXRob24taXJjbGliLTAuNC44LnppcCIsICJweXRob24taXJjbGli
LTAuNC44IikKLQotZnJvbSBtZWNoYW5pemUgaW1wb3J0IEJyb3dzZXIKLWZyb20gbWVjaGFuaXpl
IGltcG9ydCBIVFRQRXJyb3IKLWltcG9ydCBpcmNib3QKLWltcG9ydCBpcmNsaWIK
</data>
<flag name="review"
          id="35668"
          type_id="1"
          status="+"
          setter="levin"
    />
    <flag name="commit-queue"
          id="35669"
          type_id="3"
          status="-"
          setter="cjerdonek"
    />
          </attachment>
      

    </bug>

</bugzilla>