<?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>48280</bug_id>
          
          <creation_ts>2010-10-25 17:07:09 -0700</creation_ts>
          <short_desc>new-run-webkit-tests: refactor config, filesystem info out of port/base</short_desc>
          <delta_ts>2010-11-11 19:58:08 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</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>48144</dependson>
    
    <dependson>48264</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Pranke">dpranke</reporter>
          <assigned_to name="Dirk Pranke">dpranke</assigned_to>
          <cc>abarth</cc>
    
    <cc>aroben</cc>
    
    <cc>eric</cc>
    
    <cc>ojan</cc>
    
    <cc>tony</cc>
    
    <cc>ukai</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>299197</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-10-25 17:07:09 -0700</bug_when>
    <thetext>new-run-webkit-tests: refactor config, filesystem info out of port/base</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299209</commentid>
    <comment_count>1</comment_count>
      <attachid>71824</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-10-25 17:28:35 -0700</bug_when>
    <thetext>Created attachment 71824
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299210</commentid>
    <comment_count>2</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-10-25 17:30:31 -0700</bug_when>
    <thetext>Note: this patch assumes that bug 48144 and bug 48264 have already landed. Trying to review this patch won&apos;t make too much sense if you aren&apos;t familiar with the FileSystem and Config objects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299212</commentid>
    <comment_count>3</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-10-25 17:33:11 -0700</bug_when>
    <thetext>Note that this patch completes nearly all of the refactoring that was in the patch for bug 46776.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299214</commentid>
    <comment_count>4</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-10-25 17:34:34 -0700</bug_when>
    <thetext>Once this lands, I can update the rest of the NRWT test code to use the mock filesystem and mock config objects and most if not all of the NRWT tests will no longer depend on the filesystem.

This change by itself speeds test-webkitpy up from ~50seconds to ~14. It should be pretty easy to update the remaining tests and get it back down to under 5 seconds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300517</commentid>
    <comment_count>5</comment_count>
      <attachid>72077</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-10-27 13:36:17 -0700</bug_when>
    <thetext>Created attachment 72077
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300737</commentid>
    <comment_count>6</comment_count>
      <attachid>72077</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-10-27 17:38:08 -0700</bug_when>
    <thetext>Comment on attachment 72077
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=72077&amp;action=review

&gt; WebKitTools/Scripts/webkitpy/common/newstringio.py:43
&gt; +class StringIO(StringIO.StringIO):
&gt; +    def __enter__(self):
&gt; +        return self
&gt; +
&gt; +    def __exit__(self, type, value, traceback):
&gt; +        pass

It seems we could implement this a lot like from future import with_statement works.

We could have from webkitpy.common import newstringio be required at the top of any file which uses StringIO and with_statement.

However, the newstringio.py would just modify the existing StringIO (which I believe is possible) by adding these to StringIO.  I think new.instancemethod() is the way one does it: http://docs.python.org/library/new.html

newstringio.py would do nothing on 2.6 or later versions of python.

I&apos;m not sure if that&apos;s cleaner or not.  The disadvantage to using a new class name is that it makes it harder to rip out once we do start requiring 2.6 or later.

Also, if __enter__ or __exit__ ever change for the better in 2.6 or later versions of python our newstringio ones will be wron, no?

I guess an alternate way to do this would be to do exactly what you&apos;ve done, but only define your class in 2.5 or earlier.  Otherwise to just import StringIO into the module as-is.  All callers should do from newstringio import StringIO and then they don&apos;t need newstringio.StringIO() at the callsites.

&gt; WebKitTools/Scripts/webkitpy/common/system/executive_mock.py:31
&gt; +# FIXME: Unify with tool/mocktool.MockExecute.

I&apos;ve since renamed that one, seems we should just move that one here instead.  Possibly in a seprate first change.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/port/base.py:88
&gt; +        self._filesystem = kwargs.get(&apos;filesystem&apos;, filesystem.FileSystem())

We don&apos;t need to use kwargs like this.  We can just have the __init__ declaration list the ones we need.  Like this:

__init__(self, filesystem=None, user=None, executive=None, **kwargs)

Make sense?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300748</commentid>
    <comment_count>7</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-10-27 17:58:13 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 72077 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=72077&amp;action=review
&gt; 
&gt; &gt; WebKitTools/Scripts/webkitpy/common/newstringio.py:43
&gt; &gt; +class StringIO(StringIO.StringIO):
&gt; &gt; +    def __enter__(self):
&gt; &gt; +        return self
&gt; &gt; +
&gt; &gt; +    def __exit__(self, type, value, traceback):
&gt; &gt; +        pass
&gt; 
&gt; It seems we could implement this a lot like from future import with_statement works.
&gt; 
&gt; We could have from webkitpy.common import newstringio be required at the top of any file which uses StringIO and with_statement.
&gt; 
&gt; However, the newstringio.py would just modify the existing StringIO (which I believe is possible) by adding these to StringIO.  I think new.instancemethod() is the way one does it: http://docs.python.org/library/new.html
&gt; 
&gt; newstringio.py would do nothing on 2.6 or later versions of python.
&gt; 
&gt; I&apos;m not sure if that&apos;s cleaner or not.  The disadvantage to using a new class name is that it makes it harder to rip out once we do start requiring 2.6 or later.
&gt; 

Monkey-patching the existing class feels like more trouble than it is worth. It&apos;s just a search-and-replace to do the upgrade when the time comes (like moving from simplejson to json).

&gt; Also, if __enter__ or __exit__ ever change for the better in 2.6 or later versions of python our newstringio ones will be wron, no?
&gt;

The code works under 2.6 (and 2.7) today. I suppose it&apos;s possible that it could change in the future, but I&apos;m not sure I understand your concern?

&gt; I guess an alternate way to do this would be to do exactly what you&apos;ve done, but only define your class in 2.5 or earlier.  Otherwise to just import StringIO into the module as-is.  All callers should do from newstringio import StringIO and then they don&apos;t need newstringio.StringIO() at the callsites.
&gt;

Yes, we could do this as well, but it again seems like more trouble than it&apos;s worth.
 
&gt; &gt; WebKitTools/Scripts/webkitpy/common/system/executive_mock.py:31
&gt; &gt; +# FIXME: Unify with tool/mocktool.MockExecute.
&gt; 
&gt; I&apos;ve since renamed that one, seems we should just move that one here instead.  Possibly in a seprate first change.
&gt;

The two classes are not identical. It will take some work to figure out what we want the functionality to be and update the tests accordingly, so I don&apos;t want to link that to this.
 
&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/port/base.py:88
&gt; &gt; +        self._filesystem = kwargs.get(&apos;filesystem&apos;, filesystem.FileSystem())
&gt; 
&gt; We don&apos;t need to use kwargs like this.  We can just have the __init__ declaration list the ones we need.  Like this:
&gt; 
&gt; __init__(self, filesystem=None, user=None, executive=None, **kwargs)
&gt; 
&gt; Make sense?

We could do that, but we&apos;d still need:

     if filesystem is None:
         filesystem = FileSystem()

that doesn&apos;t seem like much of an improvement. 

(note that you can&apos;t use filesystem.FileSystem() as the default value, since then all Port objects would share a single FileSystem object reference).

And, of course, using filesystem as the variable name would shadow the module, so we&apos;d have to use a different name for the module (or import just the class name directly, as above, but I&apos;m not a big fan of importing non-module names directly; I prefer to make the namespace explicit).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300757</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-10-27 18:03:42 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; We could do that, but we&apos;d still need:
&gt; 
&gt;      if filesystem is None:
&gt;          filesystem = FileSystem()
&gt; 
&gt; that doesn&apos;t seem like much of an improvement. 

filesystem = filesystem or FileSystem()
might be. Grabbing things manually out of kwargs just makes me cringe a bit.  The interpreter doesn&apos;t help you at all, for typos, etc.

&gt; (note that you can&apos;t use filesystem.FileSystem() as the default value, since then all Port objects would share a single FileSystem object reference).

I agree completely!  I&apos;m glad you&apos;re aware of that python got-cha.

&gt; And, of course, using filesystem as the variable name would shadow the module, so we&apos;d have to use a different name for the module (or import just the class name directly, as above, but I&apos;m not a big fan of importing non-module names directly; I prefer to make the namespace explicit).

I see.  Interesting point about shadowing.

We seem to have mixed feelings in webkitpy about how to do imports.  I&apos;m not sure we ever came up with the one-true way.  We started importing class names directly, but we&apos;ve slowly moved towards importing modules instead.  I&apos;m not sure it really matters either way. For basic webkitpy support classes it seems to make sense to import them directly. For non-webkitpy classes we should probably import the module instead.  Not sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300780</commentid>
    <comment_count>9</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-10-27 18:34:54 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; We could do that, but we&apos;d still need:
&gt; &gt; 
&gt; &gt;      if filesystem is None:
&gt; &gt;          filesystem = FileSystem()
&gt; &gt; 
&gt; &gt; that doesn&apos;t seem like much of an improvement. 
&gt; 
&gt; filesystem = filesystem or FileSystem()
&gt; might be. Grabbing things manually out of kwargs just makes me cringe a bit.  The interpreter doesn&apos;t help you at all, for typos, etc.
&gt; 

Understood. I&apos;m not sure what the best way to work around the module name renaming or stutter is. I&apos;m inclined to leave things the way we are until we can decide on a consistent style guideline.

&gt; We seem to have mixed feelings in webkitpy about how to do imports.  I&apos;m not sure we ever came up with the one-true way.  We started importing class names directly, but we&apos;ve slowly moved towards importing modules instead.  I&apos;m not sure it really matters either way. For basic webkitpy support classes it seems to make sense to import them directly. For non-webkitpy classes we should probably import the module instead.  Not sure.

Yeah. I think you and Adam (and maybe Chris?) were more of the import class names directly school, whereas Ojan, Tony and myself have always (?) done modules. I think modules is the general pythonic way to do it (and I think there are things in the Google Python style guide to that effect).

One thing that might improve stuff is if we made better use of packages and __init__.py, so we could have

from webkitpy import common.system

filesystem = system.FileSystem()

or some such thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302865</commentid>
    <comment_count>10</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-11-01 13:11:13 -0700</bug_when>
    <thetext>Dirk asked me to review this patch, but it seems like he&apos;s already got a dialog going with Eric.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303084</commentid>
    <comment_count>11</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-01 16:58:36 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; &gt; We seem to have mixed feelings in webkitpy about how to do imports.  I&apos;m not sure we ever came up with the one-true way.  We started importing class names directly, but we&apos;ve slowly moved towards importing modules instead.  I&apos;m not sure it really matters either way. For basic webkitpy support classes it seems to make sense to import them directly. For non-webkitpy classes we should probably import the module instead.  Not sure.
&gt; 
&gt; Yeah. I think you and Adam (and maybe Chris?) were more of the import class names directly school, whereas Ojan, Tony and myself have always (?) done modules. I think modules is the general pythonic way to do it (and I think there are things in the Google Python style guide to that effect).

I&apos;m OK with moving to modules if that&apos;s the python way.

I assume that would look something like this?

from webkitpy.common.system import ospath

ospath.relpath()

&gt; One thing that might improve stuff is if we made better use of packages and __init__.py, so we could have
&gt; 
&gt; from webkitpy import common.system
&gt; 
&gt; filesystem = system.FileSystem()
&gt; 
&gt; or some such thing.

Yes.  We want to break bugzilla.py out into is own submodule with a nice __init__ like that.  We named checkout/api.py the way we did because we didn&apos;t understand how to use checkout/__init__.py correctly.  (I&apos;ve since added an import into that __init__, but we should rename api.py to checkout.py now).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304846</commentid>
    <comment_count>12</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-04 13:50:49 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #9)
&gt; &gt; &gt; We seem to have mixed feelings in webkitpy about how to do imports.  I&apos;m not sure we ever came up with the one-true way.  We started importing class names directly, but we&apos;ve slowly moved towards importing modules instead.  I&apos;m not sure it really matters either way. For basic webkitpy support classes it seems to make sense to import them directly. For non-webkitpy classes we should probably import the module instead.  Not sure.
&gt; &gt; 
&gt; &gt; Yeah. I think you and Adam (and maybe Chris?) were more of the import class names directly school, whereas Ojan, Tony and myself have always (?) done modules. I think modules is the general pythonic way to do it (and I think there are things in the Google Python style guide to that effect).
&gt; 
&gt; I&apos;m OK with moving to modules if that&apos;s the python way.
&gt; 
&gt; I assume that would look something like this?
&gt; 
&gt; from webkitpy.common.system import ospath
&gt; 
&gt; ospath.relpath()
&gt;

Yes. See http://code.google.com/p/soc/wiki/PythonStyleGuide#Module_and_package_imports for more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305135</commentid>
    <comment_count>13</comment_count>
      <attachid>73034</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-04 21:36:02 -0700</bug_when>
    <thetext>Created attachment 73034
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305137</commentid>
    <comment_count>14</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-04 21:45:03 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; &gt; And, of course, using filesystem as the variable name would shadow the module, so we&apos;d have to use a different name for the module (or import just the class name directly, as above, but I&apos;m not a big fan of importing non-module names directly; I prefer to make the namespace explicit).
&gt; 
&gt; I see.  Interesting point about shadowing.
&gt;

Turns out the Google Python style guide had a good suggestion for how to work around the &apos;parameter has same name as module&apos; problem:

&quot;&quot;&quot;
Some module names might be the same as common local variable names. In those cases, to avoid confusion, it sometimes makes sense to only import the containing package, and then explicitly import the module. The result looks something like this:

from soc import models
import soc.models.user

...
  user = models.user.User()
It probably best to avoid module names that lead to this confusion in the first place, but sometimes using the obvious module name (such as in the soc.models package example above) will result in the need for workarounds like the one above.

&quot;&quot;&quot; 

I&apos;ll upload a patch with this for comparison.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305138</commentid>
    <comment_count>15</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-04 21:46:36 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 72077 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=72077&amp;action=review
&gt; 
&gt; &gt; WebKitTools/Scripts/webkitpy/common/newstringio.py:43
&gt; &gt; +class StringIO(StringIO.StringIO):
&gt; &gt; +    def __enter__(self):
&gt; &gt; +        return self
&gt; &gt; +
&gt; &gt; +    def __exit__(self, type, value, traceback):
&gt; &gt; +        pass
&gt; 
&gt; It seems we could implement this a lot like from future import with_statement works.
&gt; 
&gt; We could have from webkitpy.common import newstringio be required at the top of any file which uses StringIO and with_statement.
&gt; 
&gt; However, the newstringio.py would just modify the existing StringIO (which I believe is possible) by adding these to StringIO.  I think new.instancemethod() is the way one does it: http://docs.python.org/library/new.html
&gt; 
&gt; newstringio.py would do nothing on 2.6 or later versions of python.
&gt; 

Turns out that StringIO still doesn&apos;t work with &quot;with&quot; on either 2.6 or 2.7. I&apos;m not sure why I thought it did. Kind of makes the whole thing moot, so I&apos;ve removed the FIXME and we can leave the code as is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305145</commentid>
    <comment_count>16</comment_count>
      <attachid>73034</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-04 22:24:15 -0700</bug_when>
    <thetext>Comment on attachment 73034
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=73034&amp;action=review

Thank you for the patch.  Looks good.  I appreciate you breaking this up into smaller pieces.  Smaller still would be even better, but this was totally manageable.

&gt; WebKitTools/Scripts/webkitpy/common/system/filesystem_mock.py:55
&gt; +    def isdir(self, path):
&gt; +        # FIXME: Implement :)
&gt; +        raise NotImplementedError

Seems we should just leave thse undefined, and we&apos;d get the same behavior for 4 fewer lines in teh file.

&gt; WebKitTools/Scripts/webkitpy/common/system/filesystem_mock.py:62
&gt; +    def listdir(self, path):
&gt; +        # FIXME: Implement :)
&gt; +        raise NotImplementedError

Same here.

&gt; WebKitTools/Scripts/webkitpy/common/system/filesystem_mock.py:74
&gt; +                raise OSError()

Do we need to have code=EEXISTS or whatever it is?

&gt; WebKitTools/Scripts/webkitpy/layout_tests/port/config.py:87
&gt; +        ed)turns whether build was successful or is up-to-date.

typo.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/port/config_unittest.py:46
&gt; +    def make_config(self, output=&apos;&apos;, files={}, exit_code=0):
&gt; +        e = executive_mock.MockExecutive(output=output, exit_code=exit_code)
&gt; +        fs = filesystem_mock.MockFileSystem(files)
&gt; +        return config.Config(e, fs)

Thank you for the code sharing.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/port/webkit.py:356
&gt;      def _build_path(self, *comps):
&gt; -        if not self._cached_build_root:
&gt; -            self._cached_build_root = self._webkit_build_directory([
&gt; -                &quot;--configuration&quot;,
&gt; -                self.flag_from_configuration(self.get_option(&apos;configuration&apos;)),
&gt; -            ])
&gt; -        return os.path.join(self._cached_build_root, *comps)
&gt; +        return self._filesystem.join(self._config.build_directory(
&gt; +            self.get_option(&apos;configuration&apos;)), *comps)

Sigh.  I&apos;m about to post a patch to re-write this as part of bug 49051.  I&apos;ll deal with the conflicts. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305842</commentid>
    <comment_count>17</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-06 20:31:35 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 73034 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=73034&amp;action=review
&gt; 
&gt; Thank you for the patch.  Looks good.  I appreciate you breaking this up into smaller pieces.  Smaller still would be even better, but this was totally manageable.
&gt; 
&gt; &gt; WebKitTools/Scripts/webkitpy/common/system/filesystem_mock.py:55
&gt; &gt; +    def isdir(self, path):
&gt; &gt; +        # FIXME: Implement :)
&gt; &gt; +        raise NotImplementedError
&gt; 
&gt; Seems we should just leave thse undefined, and we&apos;d get the same behavior for 4 fewer lines in teh file.
&gt; 

Yeah, but then I wouldn&apos;t have the reminder :)

&gt; &gt; WebKitTools/Scripts/webkitpy/common/system/filesystem_mock.py:74
&gt; &gt; +                raise OSError()
&gt; 
&gt; Do we need to have code=EEXISTS or whatever it is?

Good catch. Looks like this should actually be an IOError()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305843</commentid>
    <comment_count>18</comment_count>
      <attachid>73183</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-06 20:35:25 -0700</bug_when>
    <thetext>Created attachment 73183
Patch merged to tip of tree ... this doesn&apos;t contain the memoize descriptors, because we cache the values already.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305846</commentid>
    <comment_count>19</comment_count>
      <attachid>73183</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-06 20:41:26 -0700</bug_when>
    <thetext>Comment on attachment 73183
Patch merged to tip of tree ... this doesn&apos;t contain the memoize descriptors, because we cache the values already.

Clearing flags on attachment: 73183

Committed r71474: &lt;http://trac.webkit.org/changeset/71474&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305847</commentid>
    <comment_count>20</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-06 20:41:32 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305943</commentid>
    <comment_count>21</comment_count>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2010-11-07 19:54:48 -0800</bug_when>
    <thetext>Reverted r71474 for reason:

breaks chromium webkit tests

Committed r71491: &lt;http://trac.webkit.org/changeset/71491&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308336</commentid>
    <comment_count>22</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-11 19:58:08 -0800</bug_when>
    <thetext>Okay, I fixed this again, in r71580.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71824</attachid>
            <date>2010-10-25 17:28:35 -0700</date>
            <delta_ts>2010-10-27 13:36:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-48280-20101025172834.patch</filename>
            <type>text/plain</type>
            <size>31763</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBmYTM2ODVlZDMxMGE5ZDcyM2RlNzg3ZDM1MmZmZTU4MTNjZTU4N2M3Li45Njk1Njcx
ZGEyMDg2ODQ4ZmI4N2M3MzE5ZGZlNmQ4YTRjZTA1YTAzIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0yLDYgKzIsMjMgQEAK
IAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KIAorICAgICAgICBuZXctcnVu
LXdlYmtpdC10ZXN0czogdXBkYXRlIHBvcnQvYmFzZSBhbmQgcG9ydC93ZWJraXQgdG8gdXNlIHRo
ZQorICAgICAgICBuZXcgRmlsZVN5c3RlbSBhbmQgQ29uZmlnIGFic3RyYWN0aW9ucywgcHVsbGlu
ZyBtb3JlIGxvZ2ljIG91dCBvZgorICAgICAgICB0aGUgYmFzZSBQb3J0IGNsYXNzZXMgaW50byBz
ZXBhcmF0ZSwgbW9ja2FibGUgb2JqZWN0cy4KKworICAgICAgICBBbHNvIGNyZWF0ZSBhIE1vY2tG
aWxlU3lzdGVtIG9iamVjdCwgYW5kIHVwZGF0ZSB0aGUgQ29uZmlnCisgICAgICAgIG9iamVjdCB0
byB1c2UgYSBGaWxlU3lzdGVtLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC9iYXNlLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvYmFzZV91bml0dGVzdC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L2NvbmZpZy5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L2NvbmZpZ191bml0dGVzdC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L3Rvb2wvbW9ja3Rvb2wucHk6CisKKzIwMTAtMTAtMjUgIERpcmsgUHJhbmtlICA8ZHBy
YW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKICAgICAgICAgbmV3LXJ1bi13ZWJraXQtdGVzdHM6IHNwbGl0IG91dCB3ZWJraXQtc3BlY2lm
aWMgY29uZmlndXJhdGlvbiBzdHVmZiBpbnRvIGEgbmV3IG1vZHVsZQogCiAgICAgICAgIFRoZSBj
dXJyZW50IE5SV1QgY29kZSBoYXMgd2Via2l0LXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gY29kZSAo
bGlrZQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9iYXNlLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9iYXNlLnB5CmluZGV4IGNkN2Q2NjM5MDM0MDRhNWQ1ZTA0ZDk2ODBmNzI4OGE5NWI1
NGFiN2IuLjU3YjAzMTIxNzAxYWM4NDczNWI2YWE3ZTYzZDE0OWIxNGEwNWI5MTIgMTAwNjQ0Ci0t
LSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5w
eQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jh
c2UucHkKQEAgLTMwLDEwICszMCw3IEBACiAiIiJBYnN0cmFjdCBiYXNlIGNsYXNzIG9mIFBvcnQt
c3BlY2lmaWMgZW50cnlwb2ludHMgZm9yIHRoZSBsYXlvdXQgdGVzdHMKIHRlc3QgaW5mcmFzdHJ1
Y3R1cmUgKHRoZSBQb3J0IGFuZCBEcml2ZXIgY2xhc3NlcykuIiIiCiAKLWZyb20gX19mdXR1cmVf
XyBpbXBvcnQgd2l0aF9zdGF0ZW1lbnQKLQogaW1wb3J0IGNnaQotaW1wb3J0IGNvZGVjcwogaW1w
b3J0IGRpZmZsaWIKIGltcG9ydCBlcnJubwogaW1wb3J0IG9zCkBAIC00MiwxNCArMzksMTUgQEAg
aW1wb3J0IHN5cwogaW1wb3J0IHRpbWUKIAogaW1wb3J0IGFwYWNoZV9odHRwX3NlcnZlcgoraW1w
b3J0IGNvbmZpZwogaW1wb3J0IGh0dHBfbG9jawogaW1wb3J0IGh0dHBfc2VydmVyCiBpbXBvcnQg
dGVzdF9maWxlcwogaW1wb3J0IHdlYnNvY2tldF9zZXJ2ZXIKIAorZnJvbSB3ZWJraXRweS5jb21t
b24uc3lzdGVtIGltcG9ydCBmaWxlc3lzdGVtCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0g
aW1wb3J0IGxvZ3V0aWxzCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGlt
cG9ydCBFeGVjdXRpdmUsIFNjcmlwdEVycm9yCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0u
cGF0aCBpbXBvcnQgYWJzcGF0aF90b191cmkKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS51
c2VyIGltcG9ydCBVc2VyCiAKIApAQCAtNzcsMTQgKzc1LDYgQEAgY2xhc3MgUG9ydChvYmplY3Qp
OgogICAgICIiIkFic3RyYWN0IGNsYXNzIGZvciBQb3J0LXNwZWNpZmljIGhvb2tzIGZvciB0aGUg
bGF5b3V0X3Rlc3QgcGFja2FnZS4KICAgICAiIiIKIAotICAgIEBzdGF0aWNtZXRob2QKLSAgICBk
ZWYgZmxhZ19mcm9tX2NvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbik6Ci0gICAgICAgIGZsYWdz
X2J5X2NvbmZpZ3VyYXRpb24gPSB7Ci0gICAgICAgICAgICAiRGVidWciOiAiLS1kZWJ1ZyIsCi0g
ICAgICAgICAgICAiUmVsZWFzZSI6ICItLXJlbGVhc2UiLAotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiBmbGFnc19ieV9jb25maWd1cmF0aW9uW2NvbmZpZ3VyYXRpb25dCi0KICAgICBkZWYgX19p
bml0X18oc2VsZiwgKiprd2FyZ3MpOgogICAgICAgICBzZWxmLl9uYW1lID0ga3dhcmdzLmdldCgn
cG9ydF9uYW1lJywgTm9uZSkKICAgICAgICAgc2VsZi5fb3B0aW9ucyA9IGt3YXJncy5nZXQoJ29w
dGlvbnMnKQpAQCAtOTUsNiArODUsOSBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAgICAgICAg
ICBzZWxmLl9vcHRpb25zID0gRHVtbXlPcHRpb25zKCkKICAgICAgICAgc2VsZi5fZXhlY3V0aXZl
ID0ga3dhcmdzLmdldCgnZXhlY3V0aXZlJywgRXhlY3V0aXZlKCkpCiAgICAgICAgIHNlbGYuX3Vz
ZXIgPSBrd2FyZ3MuZ2V0KCd1c2VyJywgVXNlcigpKQorICAgICAgICBzZWxmLl9maWxlc3lzdGVt
ID0ga3dhcmdzLmdldCgnZmlsZXN5c3RlbScsIGZpbGVzeXN0ZW0uRmlsZVN5c3RlbSgpKQorICAg
ICAgICBzZWxmLl9jb25maWcgPSBrd2FyZ3MuZ2V0KCdjb25maWcnLCBjb25maWcuQ29uZmlnKHNl
bGYuX2V4ZWN1dGl2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZWxmLl9maWxlc3lzdGVtKSkKICAgICAgICAgc2VsZi5faGVscGVy
ID0gTm9uZQogICAgICAgICBzZWxmLl9odHRwX3NlcnZlciA9IE5vbmUKICAgICAgICAgc2VsZi5f
d2Via2l0X2Jhc2VfZGlyID0gTm9uZQpAQCAtMTE3LDcgKzExMCw3IEBAIGNsYXNzIFBvcnQob2Jq
ZWN0KToKICAgICAgICAgc2VsZi5fd2RpZmZfYXZhaWxhYmxlID0gVHJ1ZQogCiAgICAgICAgIHNl
bGYuX3ByZXR0eV9wYXRjaF9wYXRoID0gc2VsZi5wYXRoX2Zyb21fd2Via2l0X2Jhc2UoIkJ1Z3NT
aXRlIiwKLSAgICAgICAgICAgICAgIlByZXR0eVBhdGNoIiwgInByZXR0aWZ5LnJiIikKKyAgICAg
ICAgICAgICAiUHJldHR5UGF0Y2giLCAicHJldHRpZnkucmIiKQogICAgICAgICBzZWxmLl9wcmV0
dHlfcGF0Y2hfYXZhaWxhYmxlID0gVHJ1ZQogICAgICAgICBzZWxmLnNldF9vcHRpb25fZGVmYXVs
dCgnY29uZmlndXJhdGlvbicsIE5vbmUpCiAgICAgICAgIGlmIHNlbGYuX29wdGlvbnMuY29uZmln
dXJhdGlvbiBpcyBOb25lOgpAQCAtMjY0LDcgKzI1Nyw4IEBAIGNsYXNzIFBvcnQob2JqZWN0KToK
IAogICAgICAgICBiYXNlbGluZXMgPSBbXQogICAgICAgICBmb3IgcGxhdGZvcm1fZGlyIGluIGJh
c2VsaW5lX3NlYXJjaF9wYXRoOgotICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0
aC5qb2luKHBsYXRmb3JtX2RpciwgYmFzZWxpbmVfZmlsZW5hbWUpKToKKyAgICAgICAgICAgIGlm
IHNlbGYucGF0aF9leGlzdHMoc2VsZi5fZmlsZXN5c3RlbS5qb2luKHBsYXRmb3JtX2RpciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2Vs
aW5lX2ZpbGVuYW1lKSk6CiAgICAgICAgICAgICAgICAgYmFzZWxpbmVzLmFwcGVuZCgocGxhdGZv
cm1fZGlyLCBiYXNlbGluZV9maWxlbmFtZSkpCiAKICAgICAgICAgICAgIGlmIG5vdCBhbGxfYmFz
ZWxpbmVzIGFuZCBiYXNlbGluZXM6CkBAIC0yNzMsNyArMjY3LDggQEAgY2xhc3MgUG9ydChvYmpl
Y3QpOgogICAgICAgICAjIElmIGl0IHdhc24ndCBmb3VuZCBpbiBhIHBsYXRmb3JtIGRpcmVjdG9y
eSwgcmV0dXJuIHRoZSBleHBlY3RlZAogICAgICAgICAjIHJlc3VsdCBpbiB0aGUgdGVzdCBkaXJl
Y3RvcnksIGV2ZW4gaWYgbm8gc3VjaCBmaWxlIGFjdHVhbGx5IGV4aXN0cy4KICAgICAgICAgcGxh
dGZvcm1fZGlyID0gc2VsZi5sYXlvdXRfdGVzdHNfZGlyKCkKLSAgICAgICAgaWYgb3MucGF0aC5l
eGlzdHMob3MucGF0aC5qb2luKHBsYXRmb3JtX2RpciwgYmFzZWxpbmVfZmlsZW5hbWUpKToKKyAg
ICAgICAgaWYgc2VsZi5wYXRoX2V4aXN0cyhzZWxmLl9maWxlc3lzdGVtLmpvaW4ocGxhdGZvcm1f
ZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
YXNlbGluZV9maWxlbmFtZSkpOgogICAgICAgICAgICAgYmFzZWxpbmVzLmFwcGVuZCgocGxhdGZv
cm1fZGlyLCBiYXNlbGluZV9maWxlbmFtZSkpCiAKICAgICAgICAgaWYgYmFzZWxpbmVzOgpAQCAt
MzAzLDE4ICsyOTgsMTQgQEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAgICAgICBwbGF0Zm9ybV9k
aXIsIGJhc2VsaW5lX2ZpbGVuYW1lID0gc2VsZi5leHBlY3RlZF9iYXNlbGluZXMoCiAgICAgICAg
ICAgICBmaWxlbmFtZSwgc3VmZml4KVswXQogICAgICAgICBpZiBwbGF0Zm9ybV9kaXI6Ci0gICAg
ICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHBsYXRmb3JtX2RpciwgYmFzZWxpbmVfZmlsZW5h
bWUpCi0gICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5sYXlvdXRfdGVzdHNfZGlyKCks
IGJhc2VsaW5lX2ZpbGVuYW1lKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVzeXN0ZW0u
am9pbihwbGF0Zm9ybV9kaXIsIGJhc2VsaW5lX2ZpbGVuYW1lKQorICAgICAgICByZXR1cm4gc2Vs
Zi5fZmlsZXN5c3RlbS5qb2luKHNlbGYubGF5b3V0X3Rlc3RzX2RpcigpLCBiYXNlbGluZV9maWxl
bmFtZSkKIAogICAgIGRlZiBfZXhwZWN0ZWRfZmlsZV9jb250ZW50cyhzZWxmLCB0ZXN0LCBleHRl
bnNpb24sIGVuY29kaW5nKToKICAgICAgICAgcGF0aCA9IHNlbGYuZXhwZWN0ZWRfZmlsZW5hbWUo
dGVzdCwgZXh0ZW5zaW9uKQotICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocGF0aCk6Cisg
ICAgICAgIGlmIG5vdCBzZWxmLnBhdGhfZXhpc3RzKHBhdGgpOgogICAgICAgICAgICAgcmV0dXJu
IE5vbmUKLSAgICAgICAgb3Blbl9tb2RlID0gJ3InCi0gICAgICAgIGlmIGVuY29kaW5nIGlzIE5v
bmU6Ci0gICAgICAgICAgICBvcGVuX21vZGUgPSAncitiJwotICAgICAgICB3aXRoIGNvZGVjcy5v
cGVuKHBhdGgsIG9wZW5fbW9kZSwgZW5jb2RpbmcpIGFzIGZpbGU6Ci0gICAgICAgICAgICByZXR1
cm4gZmlsZS5yZWFkKCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVzeXN0ZW0ucmVhZF9maWxl
KHBhdGgsIGVuY29kaW5nKQogCiAgICAgZGVmIGV4cGVjdGVkX2NoZWNrc3VtKHNlbGYsIHRlc3Qp
OgogICAgICAgICAiIiJSZXR1cm5zIHRoZSBjaGVja3N1bSBvZiB0aGUgaW1hZ2Ugd2UgZXhwZWN0
IHRoZSB0ZXN0IHRvIHByb2R1Y2UsIG9yIE5vbmUgaWYgaXQgaXMgYSB0ZXh0LW9ubHkgdGVzdC4i
IiIKQEAgLTM2MSw3ICszNTIsNyBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAgICAgICAgICAg
ICAgcHJvdG9jb2wgPSAiaHR0cCIKICAgICAgICAgICAgIHJldHVybiAiJXM6Ly8xMjcuMC4wLjE6
JXUvJXMiICUgKHByb3RvY29sLCBwb3J0LCByZWxhdGl2ZV9wYXRoKQogCi0gICAgICAgIHJldHVy
biBhYnNwYXRoX3RvX3VyaShvcy5wYXRoLmFic3BhdGgoZmlsZW5hbWUpKQorICAgICAgICByZXR1
cm4gc2VsZi5fZmlsZXN5c3RlbS5wYXRoX3RvX3VyaShmaWxlbmFtZSkKIAogICAgIGRlZiB0ZXN0
cyhzZWxmLCBwYXRocyk6CiAgICAgICAgICIiIlJldHVybiB0aGUgbGlzdCBvZiB0ZXN0cyBmb3Vu
ZCAocmVsYXRpdmUgdG8gbGF5b3V0X3Rlc3RzX2RpcigpLiIiIgpAQCAtMzcyLDIwICszNjMsMTkg
QEAgY2xhc3MgUG9ydChvYmplY3QpOgogCiAgICAgICAgIFVzZWQgYnkgLS1jbG9iYmVyLW9sZC1y
ZXN1bHRzLiIiIgogICAgICAgICBsYXlvdXRfdGVzdHNfZGlyID0gc2VsZi5sYXlvdXRfdGVzdHNf
ZGlyKCkKLSAgICAgICAgcmV0dXJuIGZpbHRlcihsYW1iZGEgeDogb3MucGF0aC5pc2Rpcihvcy5w
YXRoLmpvaW4obGF5b3V0X3Rlc3RzX2RpciwgeCkpLAotICAgICAgICAgICAgICAgICAgICAgIG9z
Lmxpc3RkaXIobGF5b3V0X3Rlc3RzX2RpcikpCisgICAgICAgIHJldHVybiBmaWx0ZXIobGFtYmRh
IHg6IHNlbGYuX2ZpbGVzeXN0ZW0uaXNkaXIoc2VsZi5fZmlsZXN5c3RlbS5qb2luKGxheW91dF90
ZXN0c19kaXIsIHgpKSwKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxlc3lzdGVtLmxp
c3RkaXIobGF5b3V0X3Rlc3RzX2RpcikpCiAKICAgICBkZWYgcGF0aF9pc2RpcihzZWxmLCBwYXRo
KToKLSAgICAgICAgIiIiUmV0dXJucyB3aGV0aGVyIHRoZSBwYXRoIHJlZmVycyB0byBhIGRpcmVj
dG9yeSBvZiB0ZXN0cy4KLQotICAgICAgICBVc2VkIGJ5IHRlc3RfZXhwZWN0YXRpb25zLnB5IHRv
IGFwcGx5IHJ1bGVzIHRvIHdob2xlIGRpcmVjdG9yaWVzLiIiIgotICAgICAgICByZXR1cm4gb3Mu
cGF0aC5pc2RpcihwYXRoKQorICAgICAgICAiUmV0dXJucyB3aGV0aGVyIHRoZSBwYXRoIHJlZmVy
cyB0byBhIGRpcmVjdG9yeSBvZiB0ZXN0cy4iCisgICAgICAgICMgVXNlZCBieSB0ZXN0X2V4cGVj
dGF0aW9ucy5weSB0byBhcHBseSBydWxlcyB0byB3aG9sZSBkaXJlY3Rvcmllcy4KKyAgICAgICAg
cmV0dXJuIHNlbGYuX2ZpbGVzeXN0ZW0uaXNkaXIocGF0aCkKIAogICAgIGRlZiBwYXRoX2V4aXN0
cyhzZWxmLCBwYXRoKToKLSAgICAgICAgIiIiUmV0dXJucyB3aGV0aGVyIHRoZSBwYXRoIHJlZmVy
cyB0byBhbiBleGlzdGluZyB0ZXN0IG9yIGJhc2VsaW5lLiIiIgorICAgICAgICAiUmV0dXJucyB3
aGV0aGVyIHRoZSBwYXRoIHJlZmVycyB0byBhbiBleGlzdGluZyB0ZXN0IG9yIGJhc2VsaW5lLiIK
ICAgICAgICAgIyBVc2VkIGJ5IHRlc3RfZXhwZWN0YXRpb25zLnB5IHRvIGRldGVybWluZSBpZiBh
biBlbnRyeSByZWZlcnMgdG8gYQotICAgICAgICAjIHZhbGlkIHRlc3QgYW5kIGJ5IHByaW50aW5n
LnB5IHRvIGRldGVybWluZSBpZiBiYXNlbGluZXMgZXhpc3QuIiIiCi0gICAgICAgIHJldHVybiBv
cy5wYXRoLmV4aXN0cyhwYXRoKQorICAgICAgICAjIHZhbGlkIHRlc3QgYW5kIGJ5IHByaW50aW5n
LnB5IHRvIGRldGVybWluZSBpZiBiYXNlbGluZXMgZXhpc3QuCisgICAgICAgIHJldHVybiBzZWxm
Ll9maWxlc3lzdGVtLmV4aXN0cyhwYXRoKQogCiAgICAgZGVmIHVwZGF0ZV9iYXNlbGluZShzZWxm
LCBwYXRoLCBkYXRhLCBlbmNvZGluZyk6CiAgICAgICAgICIiIlVwZGF0ZXMgdGhlIGJhc2VsaW5l
IGZvciBhIHRlc3QuCkBAIC0zOTcsMTEgKzM4Nyw3IEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAg
ICAgICAgICAgIGRhdGE6IGNvbnRlbnRzIG9mIHRoZSBiYXNlbGluZS4KICAgICAgICAgICAgIGVu
Y29kaW5nOiBmaWxlIGVuY29kaW5nIHRvIHVzZSBmb3IgdGhlIGJhc2VsaW5lLgogICAgICAgICAi
IiIKLSAgICAgICAgd3JpdGVfbW9kZSA9ICJ3IgotICAgICAgICBpZiBlbmNvZGluZyBpcyBOb25l
OgotICAgICAgICAgICAgd3JpdGVfbW9kZSA9ICJ3YiIKLSAgICAgICAgd2l0aCBjb2RlY3Mub3Bl
bihwYXRoLCB3cml0ZV9tb2RlLCBlbmNvZGluZz1lbmNvZGluZykgYXMgZmlsZToKLSAgICAgICAg
ICAgIGZpbGUud3JpdGUoZGF0YSkKKyAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS53cml0ZV9maWxl
KHBhdGgsIGRhdGEsIGVuY29kaW5nKQogCiAgICAgZGVmIHVyaV90b190ZXN0X25hbWUoc2VsZiwg
dXJpKToKICAgICAgICAgIiIiUmV0dXJuIHRoZSBiYXNlIGxheW91dCB0ZXN0IG5hbWUgZm9yIGEg
Z2l2ZW4gVVJJLgpAQCAtNDEzLDcgKzM5OSw3IEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAgICAg
ICAgIiIiCiAgICAgICAgIHRlc3QgPSB1cmkKICAgICAgICAgaWYgdXJpLnN0YXJ0c3dpdGgoImZp
bGU6Ly8vIik6Ci0gICAgICAgICAgICBwcmVmaXggPSBhYnNwYXRoX3RvX3VyaShzZWxmLmxheW91
dF90ZXN0c19kaXIoKSkgKyAiLyIKKyAgICAgICAgICAgIHByZWZpeCA9IHNlbGYuX2ZpbGVzeXN0
ZW0ucGF0aF90b191cmkoc2VsZi5sYXlvdXRfdGVzdHNfZGlyKCkpICsgIi8iCiAgICAgICAgICAg
ICByZXR1cm4gdGVzdFtsZW4ocHJlZml4KTpdCiAKICAgICAgICAgaWYgdXJpLnN0YXJ0c3dpdGgo
Imh0dHA6Ly8xMjcuMC4wLjE6ODg4MC8iKToKQEAgLTQ0MCwxOCArNDI2LDE2IEBAIGNsYXNzIFBv
cnQob2JqZWN0KToKICAgICAgICAgZm9yIHRlc3Rfb3JfY2F0ZWdvcnkgaW4gc2VsZi5za2lwcGVk
X2xheW91dF90ZXN0cygpOgogICAgICAgICAgICAgaWYgdGVzdF9vcl9jYXRlZ29yeSA9PSB0ZXN0
X25hbWU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgICAgIGNhdGVnb3J5
ID0gb3MucGF0aC5qb2luKHNlbGYubGF5b3V0X3Rlc3RzX2RpcigpLCB0ZXN0X29yX2NhdGVnb3J5
KQotICAgICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihjYXRlZ29yeSkgYW5kIHRlc3RfbmFtZS5z
dGFydHN3aXRoKHRlc3Rfb3JfY2F0ZWdvcnkpOgorICAgICAgICAgICAgY2F0ZWdvcnkgPSBzZWxm
Ll9maWxlc3lzdGVtLmpvaW4oc2VsZi5sYXlvdXRfdGVzdHNfZGlyKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X29yX2NhdGVnb3J5KQorICAgICAg
ICAgICAgaWYgKHNlbGYuX2ZpbGVzeXN0ZW0uaXNkaXIoY2F0ZWdvcnkpIGFuZAorICAgICAgICAg
ICAgICAgIHRlc3RfbmFtZS5zdGFydHN3aXRoKHRlc3Rfb3JfY2F0ZWdvcnkpKToKICAgICAgICAg
ICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgICByZXR1cm4gRmFsc2UKIAogICAgIGRlZiBtYXli
ZV9tYWtlX2RpcmVjdG9yeShzZWxmLCAqcGF0aCk6CiAgICAgICAgICIiIkNyZWF0ZXMgdGhlIHNw
ZWNpZmllZCBkaXJlY3RvcnkgaWYgaXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0LiIiIgotICAgICAg
ICB0cnk6Ci0gICAgICAgICAgICBvcy5tYWtlZGlycyhvcy5wYXRoLmpvaW4oKnBhdGgpKQotICAg
ICAgICBleGNlcHQgT1NFcnJvciwgZToKLSAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8u
RUVYSVNUOgotICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0u
bWF5YmVfbWFrZV9kaXJlY3RvcnkoKnBhdGgpCiAKICAgICBkZWYgbmFtZShzZWxmKToKICAgICAg
ICAgIiIiUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBwb3J0IChlLmcuLCAnbWFjJywgJ2Nocm9taXVt
LXdpbi14cCcpLgpAQCAtNDcyLDE5ICs0NTYsMTMgQEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAg
ICAgICBpZiBub3QgaGFzYXR0cihzZWxmLl9vcHRpb25zLCBuYW1lKToKICAgICAgICAgICAgIHJl
dHVybiBzZXRhdHRyKHNlbGYuX29wdGlvbnMsIG5hbWUsIGRlZmF1bHRfdmFsdWUpCiAKLSAgICAj
IEZJWE1FOiBUaGlzIGNvdWxkIGJlIHJlcGxhY2VkIGJ5IGZ1bmN0aW9ucyBpbiB3ZWJraXRweS5j
b21tb24uY2hlY2tvdXQuc2NtLgogICAgIGRlZiBwYXRoX2Zyb21fd2Via2l0X2Jhc2Uoc2VsZiwg
KmNvbXBzKToKICAgICAgICAgIiIiUmV0dXJucyB0aGUgZnVsbCBwYXRoIHRvIHBhdGggbWFkZSBi
eSBqb2luaW5nIHRoZSB0b3Agb2YgdGhlCiAgICAgICAgIFdlYktpdCBzb3VyY2UgdHJlZSBhbmQg
dGhlIGxpc3Qgb2YgcGF0aCBjb21wb25lbnRzIGluIHwqY29tcHN8LiIiIgotICAgICAgICBpZiBu
b3Qgc2VsZi5fd2Via2l0X2Jhc2VfZGlyOgotICAgICAgICAgICAgYWJzcGF0aCA9IG9zLnBhdGgu
YWJzcGF0aChfX2ZpbGVfXykKLSAgICAgICAgICAgIHNlbGYuX3dlYmtpdF9iYXNlX2RpciA9IGFi
c3BhdGhbMDphYnNwYXRoLmZpbmQoJ1dlYktpdFRvb2xzJyldCisgICAgICAgIHJldHVybiBzZWxm
Ll9jb25maWcucGF0aF9mcm9tX3dlYmtpdF9iYXNlKCpjb21wcykKIAotICAgICAgICByZXR1cm4g
b3MucGF0aC5qb2luKHNlbGYuX3dlYmtpdF9iYXNlX2RpciwgKmNvbXBzKQotCi0gICAgIyBGSVhN
RTogQ2FsbGVycyBzaG91bGQgZXZlbnR1YWxseSBtb3ZlIHRvIHNjbS5zY3JpcHRfcGF0aC4KICAg
ICBkZWYgc2NyaXB0X3BhdGgoc2VsZiwgc2NyaXB0X25hbWUpOgotICAgICAgICByZXR1cm4gc2Vs
Zi5wYXRoX2Zyb21fd2Via2l0X2Jhc2UoIldlYktpdFRvb2xzIiwgIlNjcmlwdHMiLCBzY3JpcHRf
bmFtZSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NvbmZpZy5zY3JpcHRfcGF0aChzY3JpcHRfbmFt
ZSkKIAogICAgIGRlZiBwYXRoX3RvX3Rlc3RfZXhwZWN0YXRpb25zX2ZpbGUoc2VsZik6CiAgICAg
ICAgICIiIlVwZGF0ZSB0aGUgdGVzdCBleHBlY3RhdGlvbnMgdG8gdGhlIHBhc3NlZC1pbiBzdHJp
bmcuCkBAIC03MjUsMzggKzcwMyw4IEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAgICAgICAgICAg
ICAgICAgICAgICAgZS5tZXNzYWdlX3dpdGhfb3V0cHV0KCkpKQogICAgICAgICAgICAgcmV0dXJu
IHNlbGYuX3ByZXR0eV9wYXRjaF9lcnJvcl9odG1sCiAKLSAgICBkZWYgX3dlYmtpdF9idWlsZF9k
aXJlY3Rvcnkoc2VsZiwgYXJncyk6Ci0gICAgICAgIGFyZ3MgPSBbInBlcmwiLCBzZWxmLnNjcmlw
dF9wYXRoKCJ3ZWJraXQtYnVpbGQtZGlyZWN0b3J5IildICsgYXJncwotICAgICAgICByZXR1cm4g
c2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKGFyZ3MpLnJzdHJpcCgpCi0KLSAgICBkZWYgX2Nv
bmZpZ3VyYXRpb25fZmlsZV9wYXRoKHNlbGYpOgotICAgICAgICBidWlsZF9yb290ID0gc2VsZi5f
d2Via2l0X2J1aWxkX2RpcmVjdG9yeShbIi0tdG9wLWxldmVsIl0pCi0gICAgICAgIHJldHVybiBv
cy5wYXRoLmpvaW4oYnVpbGRfcm9vdCwgIkNvbmZpZ3VyYXRpb24iKQotCi0gICAgIyBFYXN5IG92
ZXJyaWRlIGZvciB1bml0IHRlc3RzCi0gICAgZGVmIF9vcGVuX2NvbmZpZ3VyYXRpb25fZmlsZShz
ZWxmKToKLSAgICAgICAgY29uZmlndXJhdGlvbl9wYXRoID0gc2VsZi5fY29uZmlndXJhdGlvbl9m
aWxlX3BhdGgoKQotICAgICAgICByZXR1cm4gY29kZWNzLm9wZW4oY29uZmlndXJhdGlvbl9wYXRo
LCAiciIsICJ1dGYtOCIpCi0KLSAgICBkZWYgX3JlYWRfY29uZmlndXJhdGlvbihzZWxmKToKLSAg
ICAgICAgdHJ5OgotICAgICAgICAgICAgd2l0aCBzZWxmLl9vcGVuX2NvbmZpZ3VyYXRpb25fZmls
ZSgpIGFzIGZpbGU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZpbGUucmVhZGxpbmUoKS5yc3Ry
aXAoKQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgIyBG
SVhNRTogVGhpcyBsaXN0IG1heSBiZSBpbmNvbXBsZXRlIGFzIEFwcGxlIGhhcyBzb21lIHNla3Jl
dCBjb25maWdzLgotICAgIF9SRUNPR05JWkVEX0NPTkZJR1VSQVRJT05TID0gKCJEZWJ1ZyIsICJS
ZWxlYXNlIikKLQogICAgIGRlZiBkZWZhdWx0X2NvbmZpZ3VyYXRpb24oc2VsZik6Ci0gICAgICAg
ICMgRklYTUU6IFVuaWZ5IHRoaXMgd2l0aCB3ZWJraXRkaXIucG0gY29uZmlndXJhdGlvbiByZWFk
aW5nIGNvZGUuCi0gICAgICAgIGNvbmZpZ3VyYXRpb24gPSBzZWxmLl9yZWFkX2NvbmZpZ3VyYXRp
b24oKQotICAgICAgICBpZiBub3QgY29uZmlndXJhdGlvbjoKLSAgICAgICAgICAgIGNvbmZpZ3Vy
YXRpb24gPSAiUmVsZWFzZSIKLSAgICAgICAgaWYgY29uZmlndXJhdGlvbiBub3QgaW4gc2VsZi5f
UkVDT0dOSVpFRF9DT05GSUdVUkFUSU9OUzoKLSAgICAgICAgICAgIF9sb2cud2FybigiQ29uZmln
dXJhdGlvbiBcIiVzXCIgZm91bmQgaW4gJXMgaXMgbm90IGEgcmVjb2duaXplZCB2YWx1ZS5cbiIg
JSAoY29uZmlndXJhdGlvbiwgc2VsZi5fY29uZmlndXJhdGlvbl9maWxlX3BhdGgoKSkpCi0gICAg
ICAgICAgICBfbG9nLndhcm4oIlNjcmlwdHMgbWF5IGZhaWwuICBTZWUgJ3NldC13ZWJraXQtY29u
ZmlndXJhdGlvbiAtLWhlbHAnLiIpCi0gICAgICAgIHJldHVybiBjb25maWd1cmF0aW9uCisgICAg
ICAgIHJldHVybiBzZWxmLl9jb25maWcuZGVmYXVsdF9jb25maWd1cmF0aW9uKCkKIAogICAgICMK
ICAgICAjIFBST1RFQ1RFRCBST1VUSU5FUwpAQCAtNzY0LDYgKzcxMiw4IEBAIGNsYXNzIFBvcnQo
b2JqZWN0KToKICAgICAjIFRoZSByb3V0aW5lcyBiZWxvdyBzaG91bGQgb25seSBiZSBjYWxsZWQg
Ynkgcm91dGluZXMgaW4gdGhpcyBjbGFzcwogICAgICMgb3IgYW55IG9mIGl0cyBzdWJjbGFzc2Vz
LgogICAgICMKKyAgICBkZWYgX3dlYmtpdF9idWlsZF9kaXJlY3Rvcnkoc2VsZiwgYXJncyk6Cisg
ICAgICAgIHJldHVybiBzZWxmLl9jb25maWcuYnVpbGRfZGlyZWN0b3J5KGFyZ3NbMF0pCiAKICAg
ICBkZWYgX3BhdGhfdG9fYXBhY2hlKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm5zIHRoZSBmdWxs
IHBhdGggdG8gdGhlIGFwYWNoZSBiaW5hcnkuCkBAIC04MzUsOCArNzg1LDggQEAgY2xhc3MgUG9y
dChvYmplY3QpOgogICAgIGRlZiBfd2Via2l0X2Jhc2VsaW5lX3BhdGgoc2VsZiwgcGxhdGZvcm0p
OgogICAgICAgICAiIiJSZXR1cm4gdGhlICBmdWxsIHBhdGggdG8gdGhlIHRvcCBvZiB0aGUgYmFz
ZWxpbmUgdHJlZSBmb3IgYQogICAgICAgICBnaXZlbiBwbGF0Zm9ybS4iIiIKLSAgICAgICAgcmV0
dXJuIG9zLnBhdGguam9pbihzZWxmLmxheW91dF90ZXN0c19kaXIoKSwgJ3BsYXRmb3JtJywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybSkKKyAgICAgICAgcmV0dXJuIHNlbGYu
X2ZpbGVzeXN0ZW0uam9pbihzZWxmLmxheW91dF90ZXN0c19kaXIoKSwgJ3BsYXRmb3JtJywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybSkKIAogCiBjbGFzcyBE
cml2ZXI6CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2Jhc2VfdW5pdHRlc3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L2Jhc2VfdW5pdHRlc3QucHkKaW5kZXggZWU4NjhlODBmM2FhMGQ2
ODU0NDRiM2YzN2RjZWMxNTU1OGRhZWYzNi4uNDM1NmQ5ZmYzMWQ2ZjEwMGVmOTExZmVmYzg1ZjJk
NGZlNmEwZWIyZSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9iYXNlX3VuaXR0ZXN0LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZV91bml0dGVzdC5weQpAQCAtMzMsMTIgKzMz
LDE1IEBAIGltcG9ydCBzeXMKIGltcG9ydCB0ZW1wZmlsZQogaW1wb3J0IHVuaXR0ZXN0CiAKLWZy
b20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5wYXRoIGltcG9ydCBhYnNwYXRoX3RvX3VyaQogZnJv
bSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQgRXhlY3V0aXZlLCBTY3Jp
cHRFcnJvcgorZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBmaWxlc3lzdGVtCitm
cm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IG91dHB1dGNhcHR1cmUKK2Zyb20gd2Vi
a2l0cHkuY29tbW9uLnN5c3RlbS5wYXRoIGltcG9ydCBhYnNwYXRoX3RvX3VyaQogZnJvbSB3ZWJr
aXRweS50aGlyZHBhcnR5Lm1vY2sgaW1wb3J0IE1vY2sKIGZyb20gd2Via2l0cHkudG9vbCBpbXBv
cnQgbW9ja3Rvb2wKIAogaW1wb3J0IGJhc2UKK2ltcG9ydCBjb25maWcKIAogIyBGSVhNRTogVGhp
cyBtYWtlcyBTdHJpbmdJTyBvYmplY3RzIHdvcmsgd2l0aCAid2l0aCIuIFJlbW92ZQogIyB3aGVu
IHdlIHVwZ3JhZGUgdG8gMi42LgpAQCAtNTgsMTkgKzYxLDEzIEBAIGNsYXNzIE1vY2tFeGVjdXRp
dmUoKToKICAgICAgICAgcmFpc2Ugc2VsZi5fZXhjZXB0aW9uCiAKIAotY2xhc3MgVW5pdFRlc3RQ
b3J0KGJhc2UuUG9ydCk6Ci0gICAgIiIiU3ViY2xhc3Mgb2YgYmFzZS5Qb3J0IHVzZWQgZm9yIHVu
aXQgdGVzdGluZy4iIiIKLSAgICBkZWYgX19pbml0X18oc2VsZiwgY29uZmlndXJhdGlvbl9jb250
ZW50cz1Ob25lLCBjb25maWd1cmF0aW9uX2V4Y2VwdGlvbj1JT0Vycm9yLCBleGVjdXRpdmVfZXhj
ZXB0aW9uPU5vbmUpOgotICAgICAgICBiYXNlLlBvcnQuX19pbml0X18oc2VsZikKLSAgICAgICAg
c2VsZi5fY29uZmlndXJhdGlvbl9jb250ZW50cyA9IGNvbmZpZ3VyYXRpb25fY29udGVudHMKLSAg
ICAgICAgc2VsZi5fY29uZmlndXJhdGlvbl9leGNlcHRpb24gPSBjb25maWd1cmF0aW9uX2V4Y2Vw
dGlvbgotICAgICAgICBpZiBleGVjdXRpdmVfZXhjZXB0aW9uOgotICAgICAgICAgICAgc2VsZi5f
ZXhlY3V0aXZlID0gTW9ja0V4ZWN1dGl2ZShleGVjdXRpdmVfZXhjZXB0aW9uKQorY2xhc3MgTW9j
a0NvbmZpZyhjb25maWcuQ29uZmlnKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZGVmYXVsdF9j
b25maWd1cmF0aW9uPSdSZWxlYXNlJyk6CisgICAgICAgIGNvbmZpZy5Db25maWcuX19pbml0X18o
c2VsZiwgRXhlY3V0aXZlKCksIGZpbGVzeXN0ZW0uRmlsZVN5c3RlbSgpKQorICAgICAgICBzZWxm
Ll9kZWZhdWx0X2NvbmZpZ3VyYXRpb24gPSBkZWZhdWx0X2NvbmZpZ3VyYXRpb24KIAotICAgIGRl
ZiBfb3Blbl9jb25maWd1cmF0aW9uX2ZpbGUoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuX2NvbmZp
Z3VyYXRpb25fY29udGVudHM6Ci0gICAgICAgICAgICByZXR1cm4gTmV3U3RyaW5nSU8oc2VsZi5f
Y29uZmlndXJhdGlvbl9jb250ZW50cykKLSAgICAgICAgcmFpc2Ugc2VsZi5fY29uZmlndXJhdGlv
bl9leGNlcHRpb24KKyAgICBkZWYgZGVmYXVsdF9jb25maWd1cmF0aW9uKHNlbGYpOgorICAgICAg
ICByZXR1cm4gc2VsZi5fZGVmYXVsdF9jb25maWd1cmF0aW9uCiAKIAogY2xhc3MgUG9ydFRlc3Qo
dW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMTAyLDE4ICs5OSwyMSBAQCBjbGFzcyBQb3J0VGVzdCh1
bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHJldHVybiBuZXdfZmlsZQogCiAgICAgZGVmIHRl
c3RfcHJldHR5X3BhdGNoX29zX2Vycm9yKHNlbGYpOgotICAgICAgICBwb3J0ID0gVW5pdFRlc3RQ
b3J0KGV4ZWN1dGl2ZV9leGNlcHRpb249T1NFcnJvcikKKyAgICAgICAgcG9ydCA9IGJhc2UuUG9y
dChleGVjdXRpdmU9TW9ja0V4ZWN1dGl2ZShleGNlcHRpb249T1NFcnJvcikpCisgICAgICAgIG9j
ID0gb3V0cHV0Y2FwdHVyZS5PdXRwdXRDYXB0dXJlKCkKKyAgICAgICAgb2MuY2FwdHVyZV9vdXRw
dXQoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQucHJldHR5X3BhdGNoX3RleHQoInBh
dGNoLnR4dCIpLAogICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQuX3ByZXR0eV9wYXRjaF9l
cnJvcl9odG1sKQogCiAgICAgICAgICMgVGhpcyB0ZXN0cyByZXBlYXRlZCBjYWxscyB0byBtYWtl
IHN1cmUgd2UgY2FjaGUgdGhlIHJlc3VsdC4KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0
LnByZXR0eV9wYXRjaF90ZXh0KCJwYXRjaC50eHQiKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICBwb3J0Ll9wcmV0dHlfcGF0Y2hfZXJyb3JfaHRtbCkKKyAgICAgICAgb2MucmVzdG9yZV9vdXRw
dXQoKQogCiAgICAgZGVmIHRlc3RfcHJldHR5X3BhdGNoX3NjcmlwdF9lcnJvcihzZWxmKToKICAg
ICAgICAgIyBGSVhNRTogVGhpcyBpcyBzb21lIHVnbHkgd2hpdGUtYm94IHRlc3QgaGFja2luZyAu
Li4KICAgICAgICAgYmFzZS5fcHJldHR5X3BhdGNoX2F2YWlsYWJsZSA9IFRydWUKLSAgICAgICAg
cG9ydCA9IFVuaXRUZXN0UG9ydChleGVjdXRpdmVfZXhjZXB0aW9uPVNjcmlwdEVycm9yKQorICAg
ICAgICBwb3J0ID0gYmFzZS5Qb3J0KGV4ZWN1dGl2ZT1Nb2NrRXhlY3V0aXZlKGV4Y2VwdGlvbj1T
Y3JpcHRFcnJvcikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9ydC5wcmV0dHlfcGF0Y2hf
dGV4dCgicGF0Y2gudHh0IiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydC5fcHJldHR5
X3BhdGNoX2Vycm9yX2h0bWwpCiAKQEAgLTE5NCwxMyArMTk0LDkgQEAgY2xhc3MgUG9ydFRlc3Qo
dW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKCdub3N1Y2h0aGlu
ZycgaW4gZGlmZikKIAogICAgIGRlZiB0ZXN0X2RlZmF1bHRfY29uZmlndXJhdGlvbl9ub3Rmb3Vu
ZChzZWxmKToKLSAgICAgICAgIyBSZWd1bGFyIElPRXJyb3IgdGhyb3duIHdoaWxlIHRyeWluZyB0
byBnZXQgdGhlIGNvbmZpZ3VyYXRpb24uCi0gICAgICAgIHBvcnQgPSBVbml0VGVzdFBvcnQoKQot
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQuZGVmYXVsdF9jb25maWd1cmF0aW9uKCksICJS
ZWxlYXNlIikKLQotICAgICAgICAjIE1vcmUgZXhvdGljIE9TRXJyb3IgdGhyb3duLgotICAgICAg
ICBwb3J0ID0gVW5pdFRlc3RQb3J0KGNvbmZpZ3VyYXRpb25fZXhjZXB0aW9uPU9TRXJyb3IpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9ydC5kZWZhdWx0X2NvbmZpZ3VyYXRpb24oKSwgIlJl
bGVhc2UiKQorICAgICAgICAjIFRlc3QgdGhhdCB3ZSBkZWxlZ2F0ZSB0byB0aGUgY29uZmlnIG9i
amVjdCBwcm9wZXJseS4KKyAgICAgICAgcG9ydCA9IGJhc2UuUG9ydChjb25maWc9TW9ja0NvbmZp
ZyhkZWZhdWx0X2NvbmZpZ3VyYXRpb249J2RlZmF1bHQnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChwb3J0LmRlZmF1bHRfY29uZmlndXJhdGlvbigpLCAnZGVmYXVsdCcpCiAKICAgICBkZWYg
dGVzdF9sYXlvdXRfdGVzdHNfc2tpcHBpbmcoc2VsZik6CiAgICAgICAgIHBvcnQgPSBiYXNlLlBv
cnQoKQpAQCAtMjA5LDE0ICsyMDUsNiBAQCBjbGFzcyBQb3J0VGVzdCh1bml0dGVzdC5UZXN0Q2Fz
ZSk6CiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwb3J0LnNraXBzX2xheW91dF90ZXN0KCdtZWRp
YS92aWRlby16b29tLmh0bWwnKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwb3J0LnNraXBz
X2xheW91dF90ZXN0KCdmb28vZm9vLmh0bWwnKSkKIAotICAgIGRlZiB0ZXN0X2RlZmF1bHRfY29u
ZmlndXJhdGlvbl9mb3VuZChzZWxmKToKLSAgICAgICAgcG9ydCA9IFVuaXRUZXN0UG9ydChjb25m
aWd1cmF0aW9uX2NvbnRlbnRzPSJEZWJ1ZyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9y
dC5kZWZhdWx0X2NvbmZpZ3VyYXRpb24oKSwgIkRlYnVnIikKLQotICAgIGRlZiB0ZXN0X2RlZmF1
bHRfY29uZmlndXJhdGlvbl91bmtub3duKHNlbGYpOgotICAgICAgICBwb3J0ID0gVW5pdFRlc3RQ
b3J0KGNvbmZpZ3VyYXRpb25fY29udGVudHM9IndlaXJkX3ZhbHVlIikKLSAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChwb3J0LmRlZmF1bHRfY29uZmlndXJhdGlvbigpLCAid2VpcmRfdmFsdWUiKQot
CiAgICAgZGVmIHRlc3Rfc2V0dXBfdGVzdF9ydW4oc2VsZik6CiAgICAgICAgIHBvcnQgPSBiYXNl
LlBvcnQoKQogICAgICAgICAjIFRoaXMgcm91dGluZSBpcyBhIG5vLW9wLiBXZSBqdXN0IHRlc3Qg
aXQgZm9yIGNvdmVyYWdlLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9jb25maWcucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2NvbmZpZy5weQppbmRleCA3NThhMzM2MTkzMzZjNDc2ZWM0
YjhhMjZjMzRhMWVkN2MyODY1NWE3Li5kMmFkMzJkOTRmNGU0NjgzMGQ1ODMzMWIxZjBiOTNmZDRm
NmVhZTM5IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2NvbmZpZy5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L2NvbmZpZy5weQpAQCAtMzIsMTEgKzMyLDYgQEAKICMgRklYTUU6IFRo
aXMgZmlsZSBuZWVkcyB0byBiZSB1bmlmaWVkIHdpdGggY29tbW9uL2NoZWNrb3V0L3NjbS5weSBh
bmQKICMgY29tbW9uL2NvbmZpZy9wb3J0cy5weSAuCiAKLWZyb20gX19mdXR1cmVfXyBpbXBvcnQg
d2l0aF9zdGF0ZW1lbnQKLQotaW1wb3J0IGNvZGVjcwotaW1wb3J0IG9zCi0KIGZyb20gd2Via2l0
cHkuY29tbW9uLmNoZWNrb3V0IGltcG9ydCBzY20KIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3Rl
bSBpbXBvcnQgbG9ndXRpbHMKIApAQCAtNjIsOCArNTcsOSBAQCBjbGFzcyBDb25maWcob2JqZWN0
KToKICAgICAgICAgIlJlbGVhc2UiOiAiLS1yZWxlYXNlIiwKICAgICB9CiAKLSAgICBkZWYgX19p
bml0X18oc2VsZiwgZXhlY3V0aXZlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZXhlY3V0aXZl
LCBmaWxlc3lzdGVtKToKICAgICAgICAgc2VsZi5fZXhlY3V0aXZlID0gZXhlY3V0aXZlCisgICAg
ICAgIHNlbGYuX2ZpbGVzeXN0ZW0gPSBmaWxlc3lzdGVtCiAgICAgICAgIHNlbGYuX3dlYmtpdF9i
YXNlX2RpciA9IE5vbmUKICAgICAgICAgc2VsZi5fZGVmYXVsdF9jb25maWd1cmF0aW9uID0gTm9u
ZQogICAgICAgICBzZWxmLl9idWlsZF9kaXJlY3RvcmllcyA9IHt9CkBAIC0xMTksNyArMTE1LDcg
QEAgY2xhc3MgQ29uZmlnKG9iamVjdCk6CiAgICAgICAgIHJldHVybiBzZWxmLl9kZWZhdWx0X2Nv
bmZpZ3VyYXRpb24KIAogICAgIGRlZiBwYXRoX2Zyb21fd2Via2l0X2Jhc2Uoc2VsZiwgKmNvbXBz
KToKLSAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLndlYmtpdF9iYXNlX2RpcigpLCAq
Y29tcHMpCisgICAgICAgIHJldHVybiBzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi53ZWJraXRf
YmFzZV9kaXIoKSwgKmNvbXBzKQogCiAgICAgZGVmIHdlYmtpdF9iYXNlX2RpcihzZWxmKToKICAg
ICAgICAgIiIiUmV0dXJucyB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgdG9wIG9mIHRoZSBXZWJL
aXQgdHJlZS4KQEAgLTEzNSw4ICsxMzEsOCBAQCBjbGFzcyBDb25maWcob2JqZWN0KToKICAgICAg
ICAgcmV0dXJuIHNlbGYuX3dlYmtpdF9iYXNlX2RpcgogCiAgICAgZGVmIF9zY3JpcHRfcGF0aChz
ZWxmLCBzY3JpcHRfbmFtZSk6Ci0gICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi53ZWJr
aXRfYmFzZV9kaXIoKSwgIldlYktpdFRvb2xzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiU2NyaXB0cyIsIHNjcmlwdF9uYW1lKQorICAgICAgICByZXR1cm4gc2VsZi5fZmlsZXN5c3Rl
bS5qb2luKHNlbGYud2Via2l0X2Jhc2VfZGlyKCksICJXZWJLaXRUb29scyIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNjcmlwdHMiLCBzY3JpcHRfbmFtZSkKIAogICAg
IGRlZiBfZGV0ZXJtaW5lX2NvbmZpZ3VyYXRpb24oc2VsZik6CiAgICAgICAgICMgVGhpcyBtaXJy
b3JzIHRoZSBsb2dpYyBpbiB3ZWJraXRkaXJzLnBtOmRldGVybWluZUNvbmZpZ3VyYXRpb24oKS4K
QEAgLTE1MSwxMCArMTQ3LDkgQEAgY2xhc3MgQ29uZmlnKG9iamVjdCk6CiAgICAgICAgIHJldHVy
biBfZGV0ZXJtaW5lZF9jb25maWd1cmF0aW9uCiAKICAgICBkZWYgX3JlYWRfY29uZmlndXJhdGlv
bihzZWxmKToKLSAgICAgICAgY29uZmlndXJhdGlvbl9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYu
YnVpbGRfZGlyZWN0b3J5KE5vbmUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIkNvbmZpZ3VyYXRpb24iKQotICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMo
Y29uZmlndXJhdGlvbl9wYXRoKToKKyAgICAgICAgY29uZmlndXJhdGlvbl9wYXRoID0gc2VsZi5f
ZmlsZXN5c3RlbS5qb2luKHNlbGYuYnVpbGRfZGlyZWN0b3J5KE5vbmUpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbmZpZ3VyYXRpb24iKQor
ICAgICAgICBpZiBub3Qgc2VsZi5fZmlsZXN5c3RlbS5leGlzdHMoY29uZmlndXJhdGlvbl9wYXRo
KToKICAgICAgICAgICAgIHJldHVybiBOb25lCiAKLSAgICAgICAgd2l0aCBjb2RlY3Mub3Blbihj
b25maWd1cmF0aW9uX3BhdGgsICJyIiwgInV0Zi04IikgYXMgZmg6Ci0gICAgICAgICAgICByZXR1
cm4gZmgucmVhZCgpLnJzdHJpcCgpCisgICAgICAgIHJldHVybiBzZWxmLl9maWxlc3lzdGVtLnJl
YWRfZmlsZShjb25maWd1cmF0aW9uX3BhdGgsICJ1dGYtOCIpLnJzdHJpcCgpCmRpZmYgLS1naXQg
YS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2NvbmZpZ191
bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvY29uZmlnX3VuaXR0ZXN0LnB5CmluZGV4IDg4NjNjZmUzYThjMDBkZmNmM2FiNGI0NDcyZDFi
YjM1MzIxOTNkYmIuLmNmZjE5ODI1NzY5NWExYjdjN2FhOTQwMzE1NjI5MzQ5MTJhY2QxMDAgMTAw
NjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
Y29uZmlnX3VuaXR0ZXN0LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3BvcnQvY29uZmlnX3VuaXR0ZXN0LnB5CkBAIC0yNiwyNiArMjYsMTYgQEAKICMg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKLWltcG9ydCBjb2RlY3MKLWltcG9ydCBvcwot
aW1wb3J0IFN0cmluZ0lPCiBpbXBvcnQgdW5pdHRlc3QKIAorZnJvbSB3ZWJraXRweS5jb21tb24u
c3lzdGVtIGltcG9ydCBleGVjdXRpdmUKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBv
cnQgZmlsZXN5c3RlbQogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBvdXRwdXRj
YXB0dXJlCitmcm9tIHdlYmtpdHB5LnRvb2wgaW1wb3J0IG1vY2t0b29sCiAKIGltcG9ydCBjb25m
aWcKIAogCi0jIEZJWE1FOiBUaGlzIG1ha2VzIFN0cmluZ0lPIG9iamVjdHMgd29yayB3aXRoICJ3
aXRoIi4gUmVtb3ZlCi0jIHdoZW4gd2UgdXBncmFkZSB0byAyLjYuCi1jbGFzcyBOZXdTdHJpbmdJ
TyhTdHJpbmdJTy5TdHJpbmdJTyk6Ci0gICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKLSAgICAgICAg
cmV0dXJuIHNlbGYKLQotICAgIGRlZiBfX2V4aXRfXyhzZWxmLCB0eXBlLCB2YWx1ZSwgdHJhY2Vi
YWNrKToKLSAgICAgICAgcGFzcwotCi0KIGNsYXNzIE1vY2tFeGVjdXRpdmUob2JqZWN0KToKICAg
ICBkZWYgX19pbml0X18oc2VsZiwgb3V0cHV0PScnLCBleGl0X2NvZGU9MCk6CiAgICAgICAgIHNl
bGYuX291dHB1dCA9IG91dHB1dApAQCAtNjIsMTIwICs1Miw5NCBAQCBjbGFzcyBDb25maWdUZXN0
KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIGNv
bmZpZy5jbGVhcl9jYWNoZWRfY29uZmlndXJhdGlvbigpCiAKLSAgICBkZWYgYXNzZXJ0Q29uZmln
dXJhdGlvbihzZWxmLCBjb250ZW50cywgZXhwZWN0ZWQpOgorICAgIGRlZiBtYWtlX2NvbmZpZyhz
ZWxmLCBvdXRwdXQ9JycsIGZpbGVzPXt9LCBleGl0X2NvZGU9MCk6CisgICAgICAgIGUgPSBNb2Nr
RXhlY3V0aXZlKG91dHB1dD1vdXRwdXQsIGV4aXRfY29kZT1leGl0X2NvZGUpCisgICAgICAgIGZz
ID0gbW9ja3Rvb2wuTW9ja0ZpbGVTeXN0ZW0oZmlsZXMpCisgICAgICAgIHJldHVybiBjb25maWcu
Q29uZmlnKGUsIGZzKQorCisgICAgZGVmIGFzc2VydF9jb25maWd1cmF0aW9uKHNlbGYsIGNvbnRl
bnRzLCBleHBlY3RlZCk6CiAgICAgICAgICMgVGhpcyB0ZXN0cyB0aGF0IGEgY29uZmlndXJhdGlv
biBmaWxlIGNvbnRhaW5pbmcKICAgICAgICAgIyBfY29udGVudHNfIGVuZHNkIHVwIGJlaW5nIGlu
dGVycHJldGVkIGFzIF9leHBlY3RlZF8uCi0gICAgICAgICMKLSAgICAgICAgIyBGSVhNRTogcmV3
cml0ZSB0aGlzIHdoZW4gd2UgaGF2ZSBhIGZpbGVzeXN0ZW0gYWJzdHJhY3Rpb24gd2UKLSAgICAg
ICAgIyBjYW4gbW9jayBvdXQgbW9yZSBlYXNpbHkuCi0gICAgICAgIGNvbmZpZy5jbGVhcl9jYWNo
ZWRfY29uZmlndXJhdGlvbigpCi0gICAgICAgIG9yaWdfb3BlbiA9IGNvZGVjcy5vcGVuCi0KLSAg
ICAgICAgZGVmIHdyYXBfb3Blbihjb250ZW50cyk6Ci0gICAgICAgICAgICBkZWYgb3Blbl93cmFw
cGVyKHBhdGgsIG1vZGUsIGVuY29kaW5nKToKLSAgICAgICAgICAgICAgICByZXR1cm4gTmV3U3Ry
aW5nSU8oY29udGVudHMpCi0gICAgICAgICAgICByZXR1cm4gb3Blbl93cmFwcGVyCi0KLSAgICAg
ICAgdHJ5OgotICAgICAgICAgICAgb3JpZ19leGlzdHMgPSBvcy5wYXRoLmV4aXN0cwotICAgICAg
ICAgICAgb3MucGF0aC5leGlzdHMgPSBsYW1iZGEgcDogVHJ1ZQotICAgICAgICAgICAgY29kZWNz
Lm9wZW4gPSB3cmFwX29wZW4oY29udGVudHMpCi0KLSAgICAgICAgICAgIGUgPSBNb2NrRXhlY3V0
aXZlKG91dHB1dD0nZm9vJykKLSAgICAgICAgICAgIGMgPSBjb25maWcuQ29uZmlnKGUpCi0gICAg
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZGVmYXVsdF9jb25maWd1cmF0aW9uKCksIGV4cGVj
dGVkKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgb3MucGF0aC5leGlzdHMgPSBvcmln
X2V4aXN0cwotICAgICAgICAgICAgY29kZWNzLm9wZW4gPSBvcmlnX29wZW4KKyAgICAgICAgYyA9
IHNlbGYubWFrZV9jb25maWcoJ2ZvbycsIHsnZm9vL0NvbmZpZ3VyYXRpb24nOiBjb250ZW50c30p
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5kZWZhdWx0X2NvbmZpZ3VyYXRpb24oKSwgZXhw
ZWN0ZWQpCiAKICAgICBkZWYgdGVzdF9idWlsZF9kaXJlY3RvcnlfdG9wbGV2ZWwoc2VsZik6Ci0g
ICAgICAgIGUgPSBNb2NrRXhlY3V0aXZlKG91dHB1dD0idG9wbGV2ZWwiKQotICAgICAgICBjID0g
Y29uZmlnLkNvbmZpZyhlKQorICAgICAgICBjID0gc2VsZi5tYWtlX2NvbmZpZygndG9wbGV2ZWwn
KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuYnVpbGRfZGlyZWN0b3J5KE5vbmUpLCAndG9w
bGV2ZWwnKQogCiAgICAgICAgICMgVGVzdCBhZ2FpbiB0byBjaGVjayBjYWNoaW5nCiAgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoYy5idWlsZF9kaXJlY3RvcnkoTm9uZSksICd0b3BsZXZlbCcpCiAK
ICAgICBkZWYgdGVzdF9idWlsZF9kaXJlY3RvcnlfX3JlbGVhc2Uoc2VsZik6Ci0gICAgICAgIGUg
PSBNb2NrRXhlY3V0aXZlKG91dHB1dD0icmVsZWFzZSIpCi0gICAgICAgIGMgPSBjb25maWcuQ29u
ZmlnKGUpCisgICAgICAgIGMgPSBzZWxmLm1ha2VfY29uZmlnKCdyZWxlYXNlJykKICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChjLmJ1aWxkX2RpcmVjdG9yeSgnUmVsZWFzZScpLCAncmVsZWFzZScp
CiAKICAgICBkZWYgdGVzdF9idWlsZF9kaXJlY3RvcnlfX2RlYnVnKHNlbGYpOgotICAgICAgICBl
ID0gTW9ja0V4ZWN1dGl2ZShvdXRwdXQ9ImRlYnVnIikKLSAgICAgICAgYyA9IGNvbmZpZy5Db25m
aWcoZSkKKyAgICAgICAgYyA9IHNlbGYubWFrZV9jb25maWcoJ2RlYnVnJykKICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChjLmJ1aWxkX2RpcmVjdG9yeSgnRGVidWcnKSwgJ2RlYnVnJykKIAogICAg
IGRlZiB0ZXN0X2J1aWxkX2RpcmVjdG9yeV9fdW5rbm93bihzZWxmKToKLSAgICAgICAgZSA9IE1v
Y2tFeGVjdXRpdmUob3V0cHV0PSJ1bmtub3duIikKLSAgICAgICAgYyA9IGNvbmZpZy5Db25maWco
ZSkKKyAgICAgICAgYyA9IHNlbGYubWFrZV9jb25maWcoInVua25vd24iKQogICAgICAgICBzZWxm
LmFzc2VydFJhaXNlcyhLZXlFcnJvciwgYy5idWlsZF9kaXJlY3RvcnksICdVbmtub3duJykKIAog
ICAgIGRlZiB0ZXN0X2J1aWxkX2R1bXByZW5kZXJ0cmVlX19zdWNjZXNzKHNlbGYpOgotICAgICAg
ICBlID0gTW9ja0V4ZWN1dGl2ZShleGl0X2NvZGU9MCkKLSAgICAgICAgYyA9IGNvbmZpZy5Db25m
aWcoZSkKKyAgICAgICAgYyA9IHNlbGYubWFrZV9jb25maWcoZXhpdF9jb2RlPTApCiAgICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZShjLmJ1aWxkX2R1bXByZW5kZXJ0cmVlKCJEZWJ1ZyIpKQogICAgICAg
ICBzZWxmLmFzc2VydFRydWUoYy5idWlsZF9kdW1wcmVuZGVydHJlZSgiUmVsZWFzZSIpKQogICAg
ICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgYy5idWlsZF9kdW1wcmVuZGVydHJlZSwg
IlVua25vd24iKQogCiAgICAgZGVmIHRlc3RfYnVpbGRfZHVtcHJlbmRlcnRyZWVfX2ZhaWx1cmUo
c2VsZik6Ci0gICAgICAgIGUgPSBNb2NrRXhlY3V0aXZlKGV4aXRfY29kZT0tMSkKLSAgICAgICAg
YyA9IGNvbmZpZy5Db25maWcoZSkKLQotICAgICAgICAjIEJ1aWxkIGZhaWx1cmVzIHNob3VsZCBs
b2cgZXJyb3JzLiBTaW5jZSBubyBsb2dnaW5nIGhhbmRsZXIKLSAgICAgICAgIyBpcyByZWdpc3Rl
cmVkLCB3ZSBnZXQgdGhlICJubyBoYW5kbGVycyBmb3VuZCIgbWVzc2FnZSBvbgotICAgICAgICAj
IHRoZSBmaXJzdCBpbnZvY2F0aW9uLCBidXQgbm90IHRoZSBzZWNvbmQuIFdlIGNhcHR1cmUgb3V0
cHV0Ci0gICAgICAgICMgaW4gYm90aCBjYXNlcyBpbiBjYXNlIHRoaXMgYmVoYXZpb3IgY2hhbmdl
cywgYnV0IHdlIG9ubHkKLSAgICAgICAgIyBjaGVjayBmb3Igb3V0cHV0IG9uIHRoZSBmaXJzdCBp
bnZvY2F0aW9uLgorICAgICAgICBjID0gc2VsZi5tYWtlX2NvbmZpZyhleGl0X2NvZGU9LTEpCisK
KyAgICAgICAgIyBGSVhNRTogQnVpbGQgZmFpbHVyZXMgc2hvdWxkIGxvZyBlcnJvcnMuIEhvd2V2
ZXIsIHRoZSBtZXNzYWdlIHdlCisgICAgICAgICMgZ2V0IGRlcGVuZHMgb24gaG93IHdlJ3JlIGJl
aW5nIGNhbGxlZDsgYXMgYSBzdGFuZGFsb25lIHRlc3QsCisgICAgICAgICMgd2UnbGwgZ2V0IHRo
ZSAibm8gaGFuZGxlcnMgZm91bmQiIG1lc3NhZ2UuIEFzIHBhcnQgb2YKKyAgICAgICAgIyB0ZXN0
LXdlYmtpdHB5LCB3ZSBnZXQgdGhlIGFjdHVhbCBtZXNzYWdlLiBSZWFsbHksIHdlIG5lZWQKKyAg
ICAgICAgIyBvdXRwdXRjYXB0dXJlIHRvIGluc3RhbGwgaXRzIG93biBoYW5kbGVyLgogICAgICAg
ICBvYyA9IG91dHB1dGNhcHR1cmUuT3V0cHV0Q2FwdHVyZSgpCiAgICAgICAgIG9jLmNhcHR1cmVf
b3V0cHV0KCkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjLmJ1aWxkX2R1bXByZW5kZXJ0cmVl
KCdEZWJ1ZycpKQotICAgICAgICAob3V0LCBlcnIpID0gb2MucmVzdG9yZV9vdXRwdXQoKQotICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihvdXQpLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRO
b3RFcXVhbChzdHIoZXJyKSwgJycpCisgICAgICAgIG9jLnJlc3RvcmVfb3V0cHV0KCkKIAogICAg
ICAgICBvYy5jYXB0dXJlX291dHB1dCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYy5idWls
ZF9kdW1wcmVuZGVydHJlZSgnUmVsZWFzZScpKQogICAgICAgICBvYy5yZXN0b3JlX291dHB1dCgp
CiAKICAgICBkZWYgdGVzdF9kZWZhdWx0X2NvbmZpZ3VyYXRpb25fX3JlbGVhc2Uoc2VsZik6Ci0g
ICAgICAgIHNlbGYuYXNzZXJ0Q29uZmlndXJhdGlvbignUmVsZWFzZScsICdSZWxlYXNlJykKKyAg
ICAgICAgc2VsZi5hc3NlcnRfY29uZmlndXJhdGlvbignUmVsZWFzZScsICdSZWxlYXNlJykKIAog
ICAgIGRlZiB0ZXN0X2RlZmF1bHRfY29uZmlndXJhdGlvbl9fZGVidWcoc2VsZik6Ci0gICAgICAg
IHNlbGYuYXNzZXJ0Q29uZmlndXJhdGlvbignRGVidWcnLCAnRGVidWcnKQorICAgICAgICBzZWxm
LmFzc2VydF9jb25maWd1cmF0aW9uKCdEZWJ1ZycsICdEZWJ1ZycpCiAKICAgICBkZWYgdGVzdF9k
ZWZhdWx0X2NvbmZpZ3VyYXRpb25fX2RlcGxveW1lbnQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNz
ZXJ0Q29uZmlndXJhdGlvbignRGVwbG95bWVudCcsICdSZWxlYXNlJykKKyAgICAgICAgc2VsZi5h
c3NlcnRfY29uZmlndXJhdGlvbignRGVwbG95bWVudCcsICdSZWxlYXNlJykKIAogICAgIGRlZiB0
ZXN0X2RlZmF1bHRfY29uZmlndXJhdGlvbl9fZGV2ZWxvcG1lbnQoc2VsZik6Ci0gICAgICAgIHNl
bGYuYXNzZXJ0Q29uZmlndXJhdGlvbignRGV2ZWxvcG1lbnQnLCAnRGVidWcnKQorICAgICAgICBz
ZWxmLmFzc2VydF9jb25maWd1cmF0aW9uKCdEZXZlbG9wbWVudCcsICdEZWJ1ZycpCiAKICAgICBk
ZWYgdGVzdF9kZWZhdWx0X2NvbmZpZ3VyYXRpb25fX25vdGZvdW5kKHNlbGYpOgogICAgICAgICAj
IFRoaXMgdGVzdHMgd2hhdCBoYXBwZW5zIGlmIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZmls
ZQogICAgICAgICAjIGRvZXNuJ3QgZXhpc3QuCi0gICAgICAgIGNvbmZpZy5jbGVhcl9jYWNoZWRf
Y29uZmlndXJhdGlvbigpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG9yaWdfZXhpc3RzID0g
b3MucGF0aC5leGlzdHMKLSAgICAgICAgICAgIG9zLnBhdGguZXhpc3RzID0gbGFtYmRhIHA6IEZh
bHNlCi0gICAgICAgICAgICBlID0gTW9ja0V4ZWN1dGl2ZShvdXRwdXQ9ImZvbyIpCi0gICAgICAg
ICAgICBjID0gY29uZmlnLkNvbmZpZyhlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChj
LmRlZmF1bHRfY29uZmlndXJhdGlvbigpLCAiUmVsZWFzZSIpCi0gICAgICAgIGZpbmFsbHk6Ci0g
ICAgICAgICAgICBvcy5wYXRoLmV4aXN0cyA9IG9yaWdfZXhpc3RzCisgICAgICAgIGMgPSBzZWxm
Lm1ha2VfY29uZmlnKG91dHB1dD0nZm9vJywgZmlsZXM9eydmb28vQ29uZmlndXJhdGlvbic6IE5v
bmV9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZGVmYXVsdF9jb25maWd1cmF0aW9uKCks
ICJSZWxlYXNlIikKIAogICAgIGRlZiB0ZXN0X2RlZmF1bHRfY29uZmlndXJhdGlvbl9fdW5rbm93
bihzZWxmKToKICAgICAgICAgIyBJZ25vcmUgdGhlIHdhcm5pbmcgYWJvdXQgYW4gdW5rbm93biBj
b25maWd1cmF0aW9uIHZhbHVlLgogICAgICAgICBvYyA9IG91dHB1dGNhcHR1cmUuT3V0cHV0Q2Fw
dHVyZSgpCiAgICAgICAgIG9jLmNhcHR1cmVfb3V0cHV0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRD
b25maWd1cmF0aW9uKCdVbmtub3duJywgJ1Vua25vd24nKQorICAgICAgICBzZWxmLmFzc2VydF9j
b25maWd1cmF0aW9uKCdVbmtub3duJywgJ1Vua25vd24nKQogICAgICAgICBvYy5yZXN0b3JlX291
dHB1dCgpCiAKLSAgICBkZWYgdGVzdF9wYXRoX2Zyb21fd2Via2l0X2Jhc2Uoc2VsZiwgKmNvbXBz
KToKLSAgICAgICAgYyA9IGNvbmZpZy5Db25maWcoTm9uZSkKKyAgICBkZWYgdGVzdF9wYXRoX2Zy
b21fd2Via2l0X2Jhc2Uoc2VsZik6CisgICAgICAgICMgRklYTUU6IFdlIHVzZSBhIHJlYWwgZmls
ZXN5c3RlbSBoZXJlLiBTaG91bGQgdGhpcyBtb3ZlIHRvIGEKKyAgICAgICAgIyBtb2NrZWQgb25l
PworICAgICAgICBjID0gY29uZmlnLkNvbmZpZyhleGVjdXRpdmUuRXhlY3V0aXZlKCksIGZpbGVz
eXN0ZW0uRmlsZVN5c3RlbSgpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoYy5wYXRoX2Zyb21f
d2Via2l0X2Jhc2UoJ2ZvbycpKQogCiAgICAgZGVmIHRlc3Rfd2Via2l0X2Jhc2VfZGlyKHNlbGYp
OgotICAgICAgICBjID0gY29uZmlnLkNvbmZpZyhOb25lKQorICAgICAgICAjIEZJWE1FOiBXZSB1
c2UgYSByZWFsIGZpbGVzeXN0ZW0gaGVyZS4gU2hvdWxkIHRoaXMgbW92ZSB0byBhCisgICAgICAg
ICMgbW9ja2VkIG9uZT8KKyAgICAgICAgYyA9IGNvbmZpZy5Db25maWcoZXhlY3V0aXZlLkV4ZWN1
dGl2ZSgpLCBmaWxlc3lzdGVtLkZpbGVTeXN0ZW0oKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVl
KGMud2Via2l0X2Jhc2VfZGlyKCkpCiAKIApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJraXQucHkgYi9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYmtpdC5weQppbmRleCAwZDBkM2UwMDFi
Nzk5MzU3ZGI0OTU2NTFkY2E3NWI4ZWQyN2FhODc5Li43MGU0NDBkZmE0NTQwZDAwZTI3ZDUzNmVm
NDc3ZjVhOWVkZjBlM2ZjIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L3dlYmtpdC5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYmtpdC5weQpAQCAtODIsMTQgKzgyLDggQEAgY2xh
c3MgV2ViS2l0UG9ydChiYXNlLlBvcnQpOgogICAgICAgICByZXR1cm4gJycKIAogICAgIGRlZiBf
YnVpbGRfZHJpdmVyKHNlbGYpOgotICAgICAgICBleGl0X2NvZGUgPSBzZWxmLl9leGVjdXRpdmUu
cnVuX2NvbW1hbmQoWwotICAgICAgICAgICAgc2VsZi5zY3JpcHRfcGF0aCgiYnVpbGQtZHVtcHJl
bmRlcnRyZWUiKSwKLSAgICAgICAgICAgIHNlbGYuZmxhZ19mcm9tX2NvbmZpZ3VyYXRpb24oc2Vs
Zi5nZXRfb3B0aW9uKCdjb25maWd1cmF0aW9uJykpLAotICAgICAgICBdLCByZXR1cm5fZXhpdF9j
b2RlPVRydWUpCi0gICAgICAgIGlmIGV4aXRfY29kZSAhPSAwOgotICAgICAgICAgICAgX2xvZy5l
cnJvcigiRmFpbGVkIHRvIGJ1aWxkIER1bXBSZW5kZXJUcmVlIikKLSAgICAgICAgICAgIHJldHVy
biBGYWxzZQotICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBjb25maWd1cmF0aW9uID0gc2Vs
Zi5nZXRfb3B0aW9uKCdjb25maWd1cmF0aW9uJykKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NvbmZp
Zy5idWlsZF9kdW1wcmVuZGVydHJlZShjb25maWd1cmF0aW9uKQogCiAgICAgZGVmIF9jaGVja19k
cml2ZXIoc2VsZik6CiAgICAgICAgIGRyaXZlcl9wYXRoID0gc2VsZi5fcGF0aF90b19kcml2ZXIo
KQpAQCAtMzU4LDEyICszNTIsOCBAQCBjbGFzcyBXZWJLaXRQb3J0KGJhc2UuUG9ydCk6CiAgICAg
ICAgICAgICAnbWFjLXRpZ2VyJywgJ21hYy1sZW9wYXJkJywgJ21hYy1zbm93bGVvcGFyZCcpCiAK
ICAgICBkZWYgX2J1aWxkX3BhdGgoc2VsZiwgKmNvbXBzKToKLSAgICAgICAgaWYgbm90IHNlbGYu
X2NhY2hlZF9idWlsZF9yb290OgotICAgICAgICAgICAgc2VsZi5fY2FjaGVkX2J1aWxkX3Jvb3Qg
PSBzZWxmLl93ZWJraXRfYnVpbGRfZGlyZWN0b3J5KFsKLSAgICAgICAgICAgICAgICAiLS1jb25m
aWd1cmF0aW9uIiwKLSAgICAgICAgICAgICAgICBzZWxmLmZsYWdfZnJvbV9jb25maWd1cmF0aW9u
KHNlbGYuZ2V0X29wdGlvbignY29uZmlndXJhdGlvbicpKSwKLSAgICAgICAgICAgIF0pCi0gICAg
ICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5fY2FjaGVkX2J1aWxkX3Jvb3QsICpjb21wcykK
KyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLl9jb25maWcuYnVpbGRf
ZGlyZWN0b3J5KAorICAgICAgICAgICAgc2VsZi5nZXRfb3B0aW9uKCdjb25maWd1cmF0aW9uJykp
LCAqY29tcHMpCiAKICAgICBkZWYgX3BhdGhfdG9fZHJpdmVyKHNlbGYpOgogICAgICAgICByZXR1
cm4gc2VsZi5fYnVpbGRfcGF0aCgnRHVtcFJlbmRlclRyZWUnKQpkaWZmIC0tZ2l0IGEvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL21vY2t0b29sLnB5IGIvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS90b29sL21vY2t0b29sLnB5CmluZGV4IDA5NzA5MzA4YjkzZTRmYTA1MDgx
YWJhZDExZWVhZWVlY2FiODg4ODQuLjEwMTc2ZWUyM2RmOGQ1MDMzOTE1YTI2MjkyNzg2MTJjMTI5
NWI0MWYgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9tb2Nr
dG9vbC5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvbW9ja3Rvb2wu
cHkKQEAgLTM1LDYgKzM1LDcgQEAgZnJvbSB3ZWJraXRweS5jb21tb24uY2hlY2tvdXQuc2NtIGlt
cG9ydCBDb21taXRNZXNzYWdlCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5uZXQuYnVnemlsbGEgaW1w
b3J0IEJ1ZywgQXR0YWNobWVudAogZnJvbSB3ZWJraXRweS5jb21tb24ubmV0LnJpZXR2ZWxkIGlt
cG9ydCBSaWV0dmVsZAogZnJvbSB3ZWJraXRweS50aGlyZHBhcnR5Lm1vY2sgaW1wb3J0IE1vY2sK
K2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgZmlsZXN5c3RlbQogZnJvbSB3ZWJr
aXRweS5jb21tb24uc3lzdGVtLmRlcHJlY2F0ZWRfbG9nZ2luZyBpbXBvcnQgbG9nCiAKIApAQCAt
Njg5LDMgKzY5MCw1MyBAQCBjbGFzcyBNb2NrQnJvd3NlcihvYmplY3QpOgogCiAgICAgZGVmIHN1
Ym1pdChzZWxmKToKICAgICAgICAgcmV0dXJuIE1vY2soZmlsZSkKKworCitjbGFzcyBNb2NrRmls
ZVN5c3RlbShvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlcz17fSk6CisgICAg
ICAgICIiIkluaXRpYWxpemVzIGEgIm1vY2siIGZpbGVzeXN0ZW0gdGhhdCBjYW4gYmUgdXNlZCB0
byBjb21wbGV0ZWx5CisgICAgICAgIHN0dWIgb3V0IGEgZmlsZXN5c3RlbS4KKworICAgICAgICBB
cmdzOgorICAgICAgICAgICAgZmlsZXM6IGEgZGljdCBvZiBmaWxlbmFtZXMgLT4gZmlsZSBjb250
ZW50cy4gQSBmaWxlIGNvbnRlbnRzCisgICAgICAgICAgICAgICAgdmFsdWUgb2YgTm9uZSBpcyB1
c2VkIHRvIGluZGljYXRlIHRoYXQgdGhlIGZpbGUgc2hvdWxkCisgICAgICAgICAgICAgICAgbm90
IGV4aXN0IChldmVuIGlmIHN0YW5kYWxvbmUgaXMgRmFsc2UpLgorICAgICAgICAgICAgc3RhbmRh
bG9uZTogSWYgVHJ1ZSwgb25seSB0aGUgZmlsZXMgbGlzdGVkIGluIF9maWxlc18gZXhpc3QuCisg
ICAgICAgICAgICAgICAgSWYgRmFsc2UsIHRoZSBvYmplY3Qgd2lsbCBwYXNzIHRocm91Z2ggcmVh
ZCBjYWxscyB0byB0aGUKKyAgICAgICAgICAgICAgICB1bmRlcmx5aW5nIGZpbGVzeXN0ZW0uIFdy
aXRlcyBhcmUgbmV2ZXIgcGFzc2VkIHRocm91Z2guCisKKyAgICAgICAgIiIiCisgICAgICAgIHNl
bGYuZmlsZXMgPSBmaWxlcworCisgICAgZGVmIGV4aXN0cyhzZWxmLCBwYXRoKToKKyAgICAgICAg
aWYgcGF0aCBpbiBzZWxmLmZpbGVzOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZmlsZXNbcGF0
aF0gaXMgbm90IE5vbmUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgaXNkaXIoc2Vs
ZiwgcGF0aCk6CisgICAgICAgICMgRklYTUU6IEltcGxlbWVudCA6KQorICAgICAgICByYWlzZSBO
b3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgam9pbihzZWxmLCAqY29tcHMpOgorICAgICAg
ICByZXR1cm4gJy8nLmpvaW4oY29tcHMpCisKKyAgICBkZWYgbGlzdGRpcihzZWxmLCBwYXRoKToK
KyAgICAgICAgIyBGSVhNRTogSW1wbGVtZW50IDopCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVu
dGVkRXJyb3IKKworICAgIGRlZiBtYXliZV9tYWtlX2RpcmVjdG9yeShzZWxmLCAqcGF0aCk6Cisg
ICAgICAgICMgRklYTUU6IEltcGxlbWVudCBzdWNoIHRoYXQgc3Vic2VxdWVudCBjYWxscyB0byBp
c2RpcigpIHdvcms/CisgICAgICAgIHBhc3MKKworICAgIGRlZiBwYXRoX3RvX3VyaShzZWxmLCBw
YXRoKToKKyAgICAgICAgIyBGSVhNRTogRGlzdGluZ3Vpc2ggYmV0d2VlbiBhYnNvbHV0ZSBhbmQg
cmVsYXRpdmUgcGF0aHMgc29tZWhvdz8KKyAgICAgICAgcmV0dXJuIHBhdGguYWJzcGF0aF90b191
cmkocGF0aCkKKworICAgIGRlZiByZWFkX2ZpbGUoc2VsZiwgcGF0aCwgZW5jb2Rpbmc9Tm9uZSk6
CisgICAgICAgIGlmIHBhdGggaW4gc2VsZi5maWxlczoKKyAgICAgICAgICAgIGlmIHNlbGYuZmls
ZXNbcGF0aF0gaXMgTm9uZToKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCkKKyAgICAg
ICAgICAgIHJldHVybiBzZWxmLmZpbGVzW3BhdGhdCisKKyAgICBkZWYgd3JpdGVfZmlsZShzZWxm
LCBwYXRoLCBjb250ZW50cywgZW5jb2Rpbmc9Tm9uZSk6CisgICAgICAgIHNlbGYuZmlsZXNbcGF0
aF0gPSBjb250ZW50cwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72077</attachid>
            <date>2010-10-27 13:36:17 -0700</date>
            <delta_ts>2010-11-04 21:35:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-48280-20101027133616.patch</filename>
            <type>text/plain</type>
            <size>45393</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBmYTM2ODVlZDMxMGE5ZDcyM2RlNzg3ZDM1MmZmZTU4MTNjZTU4N2M3Li4xNjI0YzQ3
NTQyYzg5NGJjNGU1NGYwYmIzZWRjMDVhYjQ0YWQ0M2U1IDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0yLDYgKzIsMzEgQEAK
IAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KIAorICAgICAgICBuZXctcnVu
LXdlYmtpdC10ZXN0czogdXBkYXRlIHBvcnQvYmFzZSBhbmQgcG9ydC93ZWJraXQgdG8gdXNlIHRo
ZQorICAgICAgICBuZXcgRmlsZVN5c3RlbSBhbmQgQ29uZmlnIGFic3RyYWN0aW9ucywgcHVsbGlu
ZyBtb3JlIGxvZ2ljIG91dCBvZgorICAgICAgICB0aGUgYmFzZSBQb3J0IGNsYXNzZXMgaW50byBz
ZXBhcmF0ZSwgbW9ja2FibGUgb2JqZWN0cy4KKworICAgICAgICBBbHNvIGNyZWF0ZSBhIE1vY2tG
aWxlU3lzdGVtIG9iamVjdCwgYSBNb2NrQ29uZmlnIG9iamVjdCwgbW92ZQorICAgICAgICBNb2Nr
RXhlY3V0aXZlIGludG8gY29tbW9uL3N5c3RlbSB0byBiZSBuZXh0IHRvIGV4ZWN1dGl2ZSwgYW5k
CisgICAgICAgIHVwZGF0ZSB0aGUgY29uZmlnIG9iamVjdCB0byB1c2UgYSBGaWxlU3lzdGVtLgor
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV3c3RyaW5naW8ucHk6IEFkZGVk
LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ld3N0cmluZ2lvX3VuaXR0ZXN0
LnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhl
Y3V0aXZlX21vY2sucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9u
L3N5c3RlbS9maWxlc3lzdGVtX21vY2sucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2VfdW5pdHRlc3QucHk6CisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jb25maWcucHk6CisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jb25maWdfbW9jay5weToKKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2NvbmZpZ191bml0dGVzdC5weToKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2dvb2dsZV9jaHJvbWVf
dW5pdHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9y
dC93ZWJraXQucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL21vY2t0b29sLnB5
OgorCisyMDEwLTEwLTI1ICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCiAgICAgICAgIG5ldy1ydW4td2Vi
a2l0LXRlc3RzOiBzcGxpdCBvdXQgd2Via2l0LXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gc3R1ZmYg
aW50byBhIG5ldyBtb2R1bGUKIAogICAgICAgICBUaGUgY3VycmVudCBOUldUIGNvZGUgaGFzIHdl
YmtpdC1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGNvZGUgKGxpa2UKZGlmZiAtLWdpdCBhL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ld3N0cmluZ2lvLnB5IGIvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV3c3RyaW5naW8ucHkKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWMy
NzE1MDQwNWU5N2NiMTQ1NmJmZDBmNTU4Y2ZiNzQwNzMwZmM1NAotLS0gL2Rldi9udWxsCisrKyBi
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ld3N0cmluZ2lvLnB5CkBAIC0w
LDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
IyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIi
Iid3aXRoJy1jb21wbGlhbnQgU3RyaW5nSU8gaW1wbGVtZW50YXRpb24uIiIiCisKKyMgRklYTUU6
IHdlIGNhbiByZW1vdmUgdGhpcyBpbiBmYXZvciBvZiB0aGUgZGVmYXVsdCBTdHJpbmdJTyBvbmNl
CisjIGV2ZXJ5b25lIHVwZ3JhZGVzIHRvIFB5dGhvbiAyLjYuCisKK2ltcG9ydCBTdHJpbmdJTwor
CisKK2NsYXNzIFN0cmluZ0lPKFN0cmluZ0lPLlN0cmluZ0lPKToKKyAgICBkZWYgX19lbnRlcl9f
KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsIHR5
cGUsIHZhbHVlLCB0cmFjZWJhY2spOgorICAgICAgICBwYXNzCmRpZmYgLS1naXQgYS9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXdzdHJpbmdpb191bml0dGVzdC5weSBiL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ld3N0cmluZ2lvX3VuaXR0ZXN0LnB5
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjU3NTVjOTgxNDNkZDM0ODliNmUwNTFlM2Y5ZDk5NmVkNWYwOGJkMDkKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXdz
dHJpbmdpb191bml0dGVzdC5weQpAQCAtMCwwICsxLDQ2IEBACisjIS91c3IvYmluL2VudiBweXRo
b24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRp
b24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
IyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJVbml0IHRlc3RzIGZvciBuZXdzdHJpbmdpbyBtb2R1
bGUuIiIiCisKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgd2l0aF9zdGF0ZW1lbnQKKworaW1wb3J0
IHVuaXR0ZXN0CisKK2ltcG9ydCBuZXdzdHJpbmdpbworCisKK2NsYXNzIE5ld1N0cmluZ0lPVGVz
dCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3Rfd2l0aChzZWxmKToKKyAgICAgICAg
d2l0aCBuZXdzdHJpbmdpby5TdHJpbmdJTygiZm9vIikgYXMgZjoKKyAgICAgICAgICAgIGNvbnRl
bnRzID0gZi5yZWFkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb250ZW50cywgImZvbyIp
CisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYg
LS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0
aXZlX21vY2sucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0v
ZXhlY3V0aXZlX21vY2sucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGU4NjhhYTNlMmM1NDZiMjhjNmYxNTM3YjBk
MzJmOGU3ZWRkYTNmOAotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL3N5c3RlbS9leGVjdXRpdmVfbW9jay5weQpAQCAtMCwwICsxLDU1IEBACisj
IENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIwor
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworIyBGSVhNRTogSW1wbGVtZW50IHRoZSByZXN0IG9mIHRoZSBpbnRlcmZh
Y2UgYXMgbmVlZGVkIGZvciB0ZXN0aW5nIDopLgorCisjIEZJWE1FOiBVbmlmeSB3aXRoIHRvb2wv
bW9ja3Rvb2wuTW9ja0V4ZWN1dGUuCisKKworY2xhc3MgTW9ja0V4ZWN1dGl2ZShvYmplY3QpOgor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvdXRwdXQ9JycsIGV4aXRfY29kZT0wLCBleGNlcHRpb249
Tm9uZSk6CisgICAgICAgIHNlbGYuX291dHB1dCA9IG91dHB1dAorICAgICAgICBzZWxmLl9leGl0
X2NvZGUgPSBleGl0X2NvZGUKKyAgICAgICAgc2VsZi5fZXhjZXB0aW9uID0gZXhjZXB0aW9uCisK
KyAgICBkZWYgY3B1X2NvdW50KHNlbGYpOgorICAgICAgICByZXR1cm4gMgorCisgICAgZGVmIGtp
bGxfYWxsKHNlbGYsIHByb2Nlc3NfbmFtZSk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBraWxs
X3Byb2Nlc3Moc2VsZiwgcGlkKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHJ1bl9jb21tYW5k
KHNlbGYsIGFyZ19saXN0LCByZXR1cm5fZXhpdF9jb2RlPUZhbHNlLAorICAgICAgICAgICAgICAg
ICAgICBkZWNvZGVfb3V0cHV0PUZhbHNlKToKKyAgICAgICAgaWYgc2VsZi5fZXhjZXB0aW9uOgor
ICAgICAgICAgICAgcmFpc2Ugc2VsZi5fZXhjZXB0aW9uCisgICAgICAgIGlmIHJldHVybl9leGl0
X2NvZGU6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZXhpdF9jb2RlCisgICAgICAgIHJldHVy
biBzZWxmLl9vdXRwdXQKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3N5c3RlbS9maWxlc3lzdGVtX21vY2sucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbV9tb2NrLnB5Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAwOGRm
OGYxMDk3OTc0MGJhODE2ZDQzZTlhMzllYTgyYzJjZjc3OTEKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbV9tb2Nr
LnB5CkBAIC0wLDAgKzEsNzkgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1l
dDoKKyMKKyMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgcGF0aAorCisKK2Ns
YXNzIE1vY2tGaWxlU3lzdGVtKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVz
PXt9KToKKyAgICAgICAgIiIiSW5pdGlhbGl6ZXMgYSAibW9jayIgZmlsZXN5c3RlbSB0aGF0IGNh
biBiZSB1c2VkIHRvIGNvbXBsZXRlbHkKKyAgICAgICAgc3R1YiBvdXQgYSBmaWxlc3lzdGVtLgor
CisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBmaWxlczogYSBkaWN0IG9mIGZpbGVuYW1lcyAt
PiBmaWxlIGNvbnRlbnRzLiBBIGZpbGUgY29udGVudHMKKyAgICAgICAgICAgICAgICB2YWx1ZSBv
ZiBOb25lIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgZmlsZSBzaG91bGQKKyAgICAgICAg
ICAgICAgICBub3QgZXhpc3QgKGV2ZW4gaWYgc3RhbmRhbG9uZSBpcyBGYWxzZSkuCisgICAgICAg
ICAgICBzdGFuZGFsb25lOiBJZiBUcnVlLCBvbmx5IHRoZSBmaWxlcyBsaXN0ZWQgaW4gX2ZpbGVz
XyBleGlzdC4KKyAgICAgICAgICAgICAgICBJZiBGYWxzZSwgdGhlIG9iamVjdCB3aWxsIHBhc3Mg
dGhyb3VnaCByZWFkIGNhbGxzIHRvIHRoZQorICAgICAgICAgICAgICAgIHVuZGVybHlpbmcgZmls
ZXN5c3RlbS4gV3JpdGVzIGFyZSBuZXZlciBwYXNzZWQgdGhyb3VnaC4KKworICAgICAgICAiIiIK
KyAgICAgICAgc2VsZi5maWxlcyA9IGZpbGVzCisKKyAgICBkZWYgZXhpc3RzKHNlbGYsIHBhdGgp
OgorICAgICAgICBpZiBwYXRoIGluIHNlbGYuZmlsZXM6CisgICAgICAgICAgICByZXR1cm4gc2Vs
Zi5maWxlc1twYXRoXSBpcyBub3QgTm9uZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRl
ZiBpc2RpcihzZWxmLCBwYXRoKToKKyAgICAgICAgIyBGSVhNRTogSW1wbGVtZW50IDopCisgICAg
ICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBqb2luKHNlbGYsICpjb21w
cyk6CisgICAgICAgIHJldHVybiAnLycuam9pbihjb21wcykKKworICAgIGRlZiBsaXN0ZGlyKHNl
bGYsIHBhdGgpOgorICAgICAgICAjIEZJWE1FOiBJbXBsZW1lbnQgOikKKyAgICAgICAgcmFpc2Ug
Tm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIG1heWJlX21ha2VfZGlyZWN0b3J5KHNlbGYs
ICpwYXRoKToKKyAgICAgICAgIyBGSVhNRTogSW1wbGVtZW50IHN1Y2ggdGhhdCBzdWJzZXF1ZW50
IGNhbGxzIHRvIGlzZGlyKCkgd29yaz8KKyAgICAgICAgcGFzcworCisgICAgZGVmIHBhdGhfdG9f
dXJpKHNlbGYsIHBhdGgpOgorICAgICAgICAjIEZJWE1FOiBEaXN0aW5ndWlzaCBiZXR3ZWVuIGFi
c29sdXRlIGFuZCByZWxhdGl2ZSBwYXRocyBzb21laG93PworICAgICAgICByZXR1cm4gcGF0aC5h
YnNwYXRoX3RvX3VyaShwYXRoKQorCisgICAgZGVmIHJlYWRfZmlsZShzZWxmLCBwYXRoLCBlbmNv
ZGluZz1Ob25lKToKKyAgICAgICAgaWYgcGF0aCBpbiBzZWxmLmZpbGVzOgorICAgICAgICAgICAg
aWYgc2VsZi5maWxlc1twYXRoXSBpcyBOb25lOgorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJy
b3IoKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZmlsZXNbcGF0aF0KKworICAgIGRlZiB3cml0
ZV9maWxlKHNlbGYsIHBhdGgsIGNvbnRlbnRzLCBlbmNvZGluZz1Ob25lKToKKyAgICAgICAgc2Vs
Zi5maWxlc1twYXRoXSA9IGNvbnRlbnRzCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkgYi9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkKaW5kZXggY2Q3ZDY2MzkwMzQwNGE1
ZDVlMDRkOTY4MGY3Mjg4YTk1YjU0YWI3Yi4uNTdiMDMxMjE3MDFhYzg0NzM1YjZhYTdlNjNkMTQ5
YjE0YTA1YjkxMiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9iYXNlLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weQpAQCAtMzAsMTAgKzMwLDcgQEAKICIiIkFic3RyYWN0
IGJhc2UgY2xhc3Mgb2YgUG9ydC1zcGVjaWZpYyBlbnRyeXBvaW50cyBmb3IgdGhlIGxheW91dCB0
ZXN0cwogdGVzdCBpbmZyYXN0cnVjdHVyZSAodGhlIFBvcnQgYW5kIERyaXZlciBjbGFzc2VzKS4i
IiIKIAotZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudAotCiBpbXBvcnQgY2dp
Ci1pbXBvcnQgY29kZWNzCiBpbXBvcnQgZGlmZmxpYgogaW1wb3J0IGVycm5vCiBpbXBvcnQgb3MK
QEAgLTQyLDE0ICszOSwxNSBAQCBpbXBvcnQgc3lzCiBpbXBvcnQgdGltZQogCiBpbXBvcnQgYXBh
Y2hlX2h0dHBfc2VydmVyCitpbXBvcnQgY29uZmlnCiBpbXBvcnQgaHR0cF9sb2NrCiBpbXBvcnQg
aHR0cF9zZXJ2ZXIKIGltcG9ydCB0ZXN0X2ZpbGVzCiBpbXBvcnQgd2Vic29ja2V0X3NlcnZlcgog
Citmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IGZpbGVzeXN0ZW0KIGZyb20gd2Vi
a2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgbG9ndXRpbHMKIGZyb20gd2Via2l0cHkuY29tbW9u
LnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0IEV4ZWN1dGl2ZSwgU2NyaXB0RXJyb3IKLWZyb20gd2Vi
a2l0cHkuY29tbW9uLnN5c3RlbS5wYXRoIGltcG9ydCBhYnNwYXRoX3RvX3VyaQogZnJvbSB3ZWJr
aXRweS5jb21tb24uc3lzdGVtLnVzZXIgaW1wb3J0IFVzZXIKIAogCkBAIC03NywxNCArNzUsNiBA
QCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAgIiIiQWJzdHJhY3QgY2xhc3MgZm9yIFBvcnQtc3Bl
Y2lmaWMgaG9va3MgZm9yIHRoZSBsYXlvdXRfdGVzdCBwYWNrYWdlLgogICAgICIiIgogCi0gICAg
QHN0YXRpY21ldGhvZAotICAgIGRlZiBmbGFnX2Zyb21fY29uZmlndXJhdGlvbihjb25maWd1cmF0
aW9uKToKLSAgICAgICAgZmxhZ3NfYnlfY29uZmlndXJhdGlvbiA9IHsKLSAgICAgICAgICAgICJE
ZWJ1ZyI6ICItLWRlYnVnIiwKLSAgICAgICAgICAgICJSZWxlYXNlIjogIi0tcmVsZWFzZSIsCi0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZsYWdzX2J5X2NvbmZpZ3VyYXRpb25bY29uZmlndXJh
dGlvbl0KLQogICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqKmt3YXJncyk6CiAgICAgICAgIHNlbGYu
X25hbWUgPSBrd2FyZ3MuZ2V0KCdwb3J0X25hbWUnLCBOb25lKQogICAgICAgICBzZWxmLl9vcHRp
b25zID0ga3dhcmdzLmdldCgnb3B0aW9ucycpCkBAIC05NSw2ICs4NSw5IEBAIGNsYXNzIFBvcnQo
b2JqZWN0KToKICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMgPSBEdW1teU9wdGlvbnMoKQogICAg
ICAgICBzZWxmLl9leGVjdXRpdmUgPSBrd2FyZ3MuZ2V0KCdleGVjdXRpdmUnLCBFeGVjdXRpdmUo
KSkKICAgICAgICAgc2VsZi5fdXNlciA9IGt3YXJncy5nZXQoJ3VzZXInLCBVc2VyKCkpCisgICAg
ICAgIHNlbGYuX2ZpbGVzeXN0ZW0gPSBrd2FyZ3MuZ2V0KCdmaWxlc3lzdGVtJywgZmlsZXN5c3Rl
bS5GaWxlU3lzdGVtKCkpCisgICAgICAgIHNlbGYuX2NvbmZpZyA9IGt3YXJncy5nZXQoJ2NvbmZp
ZycsIGNvbmZpZy5Db25maWcoc2VsZi5fZXhlY3V0aXZlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0pKQog
ICAgICAgICBzZWxmLl9oZWxwZXIgPSBOb25lCiAgICAgICAgIHNlbGYuX2h0dHBfc2VydmVyID0g
Tm9uZQogICAgICAgICBzZWxmLl93ZWJraXRfYmFzZV9kaXIgPSBOb25lCkBAIC0xMTcsNyArMTEw
LDcgQEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAgICAgICBzZWxmLl93ZGlmZl9hdmFpbGFibGUg
PSBUcnVlCiAKICAgICAgICAgc2VsZi5fcHJldHR5X3BhdGNoX3BhdGggPSBzZWxmLnBhdGhfZnJv
bV93ZWJraXRfYmFzZSgiQnVnc1NpdGUiLAotICAgICAgICAgICAgICAiUHJldHR5UGF0Y2giLCAi
cHJldHRpZnkucmIiKQorICAgICAgICAgICAgICJQcmV0dHlQYXRjaCIsICJwcmV0dGlmeS5yYiIp
CiAgICAgICAgIHNlbGYuX3ByZXR0eV9wYXRjaF9hdmFpbGFibGUgPSBUcnVlCiAgICAgICAgIHNl
bGYuc2V0X29wdGlvbl9kZWZhdWx0KCdjb25maWd1cmF0aW9uJywgTm9uZSkKICAgICAgICAgaWYg
c2VsZi5fb3B0aW9ucy5jb25maWd1cmF0aW9uIGlzIE5vbmU6CkBAIC0yNjQsNyArMjU3LDggQEAg
Y2xhc3MgUG9ydChvYmplY3QpOgogCiAgICAgICAgIGJhc2VsaW5lcyA9IFtdCiAgICAgICAgIGZv
ciBwbGF0Zm9ybV9kaXIgaW4gYmFzZWxpbmVfc2VhcmNoX3BhdGg6Ci0gICAgICAgICAgICBpZiBv
cy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4ocGxhdGZvcm1fZGlyLCBiYXNlbGluZV9maWxlbmFt
ZSkpOgorICAgICAgICAgICAgaWYgc2VsZi5wYXRoX2V4aXN0cyhzZWxmLl9maWxlc3lzdGVtLmpv
aW4ocGxhdGZvcm1fZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYmFzZWxpbmVfZmlsZW5hbWUpKToKICAgICAgICAgICAgICAgICBiYXNl
bGluZXMuYXBwZW5kKChwbGF0Zm9ybV9kaXIsIGJhc2VsaW5lX2ZpbGVuYW1lKSkKIAogICAgICAg
ICAgICAgaWYgbm90IGFsbF9iYXNlbGluZXMgYW5kIGJhc2VsaW5lczoKQEAgLTI3Myw3ICsyNjcs
OCBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAgICAgICMgSWYgaXQgd2Fzbid0IGZvdW5kIGlu
IGEgcGxhdGZvcm0gZGlyZWN0b3J5LCByZXR1cm4gdGhlIGV4cGVjdGVkCiAgICAgICAgICMgcmVz
dWx0IGluIHRoZSB0ZXN0IGRpcmVjdG9yeSwgZXZlbiBpZiBubyBzdWNoIGZpbGUgYWN0dWFsbHkg
ZXhpc3RzLgogICAgICAgICBwbGF0Zm9ybV9kaXIgPSBzZWxmLmxheW91dF90ZXN0c19kaXIoKQot
ICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4ocGxhdGZvcm1fZGlyLCBiYXNl
bGluZV9maWxlbmFtZSkpOgorICAgICAgICBpZiBzZWxmLnBhdGhfZXhpc3RzKHNlbGYuX2ZpbGVz
eXN0ZW0uam9pbihwbGF0Zm9ybV9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lX2ZpbGVuYW1lKSk6CiAgICAgICAgICAgICBiYXNl
bGluZXMuYXBwZW5kKChwbGF0Zm9ybV9kaXIsIGJhc2VsaW5lX2ZpbGVuYW1lKSkKIAogICAgICAg
ICBpZiBiYXNlbGluZXM6CkBAIC0zMDMsMTggKzI5OCwxNCBAQCBjbGFzcyBQb3J0KG9iamVjdCk6
CiAgICAgICAgIHBsYXRmb3JtX2RpciwgYmFzZWxpbmVfZmlsZW5hbWUgPSBzZWxmLmV4cGVjdGVk
X2Jhc2VsaW5lcygKICAgICAgICAgICAgIGZpbGVuYW1lLCBzdWZmaXgpWzBdCiAgICAgICAgIGlm
IHBsYXRmb3JtX2RpcjoKLSAgICAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4ocGxhdGZvcm1f
ZGlyLCBiYXNlbGluZV9maWxlbmFtZSkKLSAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxm
LmxheW91dF90ZXN0c19kaXIoKSwgYmFzZWxpbmVfZmlsZW5hbWUpCisgICAgICAgICAgICByZXR1
cm4gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHBsYXRmb3JtX2RpciwgYmFzZWxpbmVfZmlsZW5hbWUp
CisgICAgICAgIHJldHVybiBzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5sYXlvdXRfdGVzdHNf
ZGlyKCksIGJhc2VsaW5lX2ZpbGVuYW1lKQogCiAgICAgZGVmIF9leHBlY3RlZF9maWxlX2NvbnRl
bnRzKHNlbGYsIHRlc3QsIGV4dGVuc2lvbiwgZW5jb2RpbmcpOgogICAgICAgICBwYXRoID0gc2Vs
Zi5leHBlY3RlZF9maWxlbmFtZSh0ZXN0LCBleHRlbnNpb24pCi0gICAgICAgIGlmIG5vdCBvcy5w
YXRoLmV4aXN0cyhwYXRoKToKKyAgICAgICAgaWYgbm90IHNlbGYucGF0aF9leGlzdHMocGF0aCk6
CiAgICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICBvcGVuX21vZGUgPSAncicKLSAgICAg
ICAgaWYgZW5jb2RpbmcgaXMgTm9uZToKLSAgICAgICAgICAgIG9wZW5fbW9kZSA9ICdyK2InCi0g
ICAgICAgIHdpdGggY29kZWNzLm9wZW4ocGF0aCwgb3Blbl9tb2RlLCBlbmNvZGluZykgYXMgZmls
ZToKLSAgICAgICAgICAgIHJldHVybiBmaWxlLnJlYWQoKQorICAgICAgICByZXR1cm4gc2VsZi5f
ZmlsZXN5c3RlbS5yZWFkX2ZpbGUocGF0aCwgZW5jb2RpbmcpCiAKICAgICBkZWYgZXhwZWN0ZWRf
Y2hlY2tzdW0oc2VsZiwgdGVzdCk6CiAgICAgICAgICIiIlJldHVybnMgdGhlIGNoZWNrc3VtIG9m
IHRoZSBpbWFnZSB3ZSBleHBlY3QgdGhlIHRlc3QgdG8gcHJvZHVjZSwgb3IgTm9uZSBpZiBpdCBp
cyBhIHRleHQtb25seSB0ZXN0LiIiIgpAQCAtMzYxLDcgKzM1Miw3IEBAIGNsYXNzIFBvcnQob2Jq
ZWN0KToKICAgICAgICAgICAgICAgICBwcm90b2NvbCA9ICJodHRwIgogICAgICAgICAgICAgcmV0
dXJuICIlczovLzEyNy4wLjAuMToldS8lcyIgJSAocHJvdG9jb2wsIHBvcnQsIHJlbGF0aXZlX3Bh
dGgpCiAKLSAgICAgICAgcmV0dXJuIGFic3BhdGhfdG9fdXJpKG9zLnBhdGguYWJzcGF0aChmaWxl
bmFtZSkpCisgICAgICAgIHJldHVybiBzZWxmLl9maWxlc3lzdGVtLnBhdGhfdG9fdXJpKGZpbGVu
YW1lKQogCiAgICAgZGVmIHRlc3RzKHNlbGYsIHBhdGhzKToKICAgICAgICAgIiIiUmV0dXJuIHRo
ZSBsaXN0IG9mIHRlc3RzIGZvdW5kIChyZWxhdGl2ZSB0byBsYXlvdXRfdGVzdHNfZGlyKCkuIiIi
CkBAIC0zNzIsMjAgKzM2MywxOSBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAKICAgICAgICAgVXNl
ZCBieSAtLWNsb2JiZXItb2xkLXJlc3VsdHMuIiIiCiAgICAgICAgIGxheW91dF90ZXN0c19kaXIg
PSBzZWxmLmxheW91dF90ZXN0c19kaXIoKQotICAgICAgICByZXR1cm4gZmlsdGVyKGxhbWJkYSB4
OiBvcy5wYXRoLmlzZGlyKG9zLnBhdGguam9pbihsYXlvdXRfdGVzdHNfZGlyLCB4KSksCi0gICAg
ICAgICAgICAgICAgICAgICAgb3MubGlzdGRpcihsYXlvdXRfdGVzdHNfZGlyKSkKKyAgICAgICAg
cmV0dXJuIGZpbHRlcihsYW1iZGEgeDogc2VsZi5fZmlsZXN5c3RlbS5pc2RpcihzZWxmLl9maWxl
c3lzdGVtLmpvaW4obGF5b3V0X3Rlc3RzX2RpciwgeCkpLAorICAgICAgICAgICAgICAgICAgICAg
IHNlbGYuX2ZpbGVzeXN0ZW0ubGlzdGRpcihsYXlvdXRfdGVzdHNfZGlyKSkKIAogICAgIGRlZiBw
YXRoX2lzZGlyKHNlbGYsIHBhdGgpOgotICAgICAgICAiIiJSZXR1cm5zIHdoZXRoZXIgdGhlIHBh
dGggcmVmZXJzIHRvIGEgZGlyZWN0b3J5IG9mIHRlc3RzLgotCi0gICAgICAgIFVzZWQgYnkgdGVz
dF9leHBlY3RhdGlvbnMucHkgdG8gYXBwbHkgcnVsZXMgdG8gd2hvbGUgZGlyZWN0b3JpZXMuIiIi
Ci0gICAgICAgIHJldHVybiBvcy5wYXRoLmlzZGlyKHBhdGgpCisgICAgICAgICJSZXR1cm5zIHdo
ZXRoZXIgdGhlIHBhdGggcmVmZXJzIHRvIGEgZGlyZWN0b3J5IG9mIHRlc3RzLiIKKyAgICAgICAg
IyBVc2VkIGJ5IHRlc3RfZXhwZWN0YXRpb25zLnB5IHRvIGFwcGx5IHJ1bGVzIHRvIHdob2xlIGRp
cmVjdG9yaWVzLgorICAgICAgICByZXR1cm4gc2VsZi5fZmlsZXN5c3RlbS5pc2RpcihwYXRoKQog
CiAgICAgZGVmIHBhdGhfZXhpc3RzKHNlbGYsIHBhdGgpOgotICAgICAgICAiIiJSZXR1cm5zIHdo
ZXRoZXIgdGhlIHBhdGggcmVmZXJzIHRvIGFuIGV4aXN0aW5nIHRlc3Qgb3IgYmFzZWxpbmUuIiIi
CisgICAgICAgICJSZXR1cm5zIHdoZXRoZXIgdGhlIHBhdGggcmVmZXJzIHRvIGFuIGV4aXN0aW5n
IHRlc3Qgb3IgYmFzZWxpbmUuIgogICAgICAgICAjIFVzZWQgYnkgdGVzdF9leHBlY3RhdGlvbnMu
cHkgdG8gZGV0ZXJtaW5lIGlmIGFuIGVudHJ5IHJlZmVycyB0byBhCi0gICAgICAgICMgdmFsaWQg
dGVzdCBhbmQgYnkgcHJpbnRpbmcucHkgdG8gZGV0ZXJtaW5lIGlmIGJhc2VsaW5lcyBleGlzdC4i
IiIKLSAgICAgICAgcmV0dXJuIG9zLnBhdGguZXhpc3RzKHBhdGgpCisgICAgICAgICMgdmFsaWQg
dGVzdCBhbmQgYnkgcHJpbnRpbmcucHkgdG8gZGV0ZXJtaW5lIGlmIGJhc2VsaW5lcyBleGlzdC4K
KyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVzeXN0ZW0uZXhpc3RzKHBhdGgpCiAKICAgICBkZWYg
dXBkYXRlX2Jhc2VsaW5lKHNlbGYsIHBhdGgsIGRhdGEsIGVuY29kaW5nKToKICAgICAgICAgIiIi
VXBkYXRlcyB0aGUgYmFzZWxpbmUgZm9yIGEgdGVzdC4KQEAgLTM5NywxMSArMzg3LDcgQEAgY2xh
c3MgUG9ydChvYmplY3QpOgogICAgICAgICAgICAgZGF0YTogY29udGVudHMgb2YgdGhlIGJhc2Vs
aW5lLgogICAgICAgICAgICAgZW5jb2Rpbmc6IGZpbGUgZW5jb2RpbmcgdG8gdXNlIGZvciB0aGUg
YmFzZWxpbmUuCiAgICAgICAgICIiIgotICAgICAgICB3cml0ZV9tb2RlID0gInciCi0gICAgICAg
IGlmIGVuY29kaW5nIGlzIE5vbmU6Ci0gICAgICAgICAgICB3cml0ZV9tb2RlID0gIndiIgotICAg
ICAgICB3aXRoIGNvZGVjcy5vcGVuKHBhdGgsIHdyaXRlX21vZGUsIGVuY29kaW5nPWVuY29kaW5n
KSBhcyBmaWxlOgotICAgICAgICAgICAgZmlsZS53cml0ZShkYXRhKQorICAgICAgICBzZWxmLl9m
aWxlc3lzdGVtLndyaXRlX2ZpbGUocGF0aCwgZGF0YSwgZW5jb2RpbmcpCiAKICAgICBkZWYgdXJp
X3RvX3Rlc3RfbmFtZShzZWxmLCB1cmkpOgogICAgICAgICAiIiJSZXR1cm4gdGhlIGJhc2UgbGF5
b3V0IHRlc3QgbmFtZSBmb3IgYSBnaXZlbiBVUkkuCkBAIC00MTMsNyArMzk5LDcgQEAgY2xhc3Mg
UG9ydChvYmplY3QpOgogICAgICAgICAiIiIKICAgICAgICAgdGVzdCA9IHVyaQogICAgICAgICBp
ZiB1cmkuc3RhcnRzd2l0aCgiZmlsZTovLy8iKToKLSAgICAgICAgICAgIHByZWZpeCA9IGFic3Bh
dGhfdG9fdXJpKHNlbGYubGF5b3V0X3Rlc3RzX2RpcigpKSArICIvIgorICAgICAgICAgICAgcHJl
Zml4ID0gc2VsZi5fZmlsZXN5c3RlbS5wYXRoX3RvX3VyaShzZWxmLmxheW91dF90ZXN0c19kaXIo
KSkgKyAiLyIKICAgICAgICAgICAgIHJldHVybiB0ZXN0W2xlbihwcmVmaXgpOl0KIAogICAgICAg
ICBpZiB1cmkuc3RhcnRzd2l0aCgiaHR0cDovLzEyNy4wLjAuMTo4ODgwLyIpOgpAQCAtNDQwLDE4
ICs0MjYsMTYgQEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAgICAgICBmb3IgdGVzdF9vcl9jYXRl
Z29yeSBpbiBzZWxmLnNraXBwZWRfbGF5b3V0X3Rlc3RzKCk6CiAgICAgICAgICAgICBpZiB0ZXN0
X29yX2NhdGVnb3J5ID09IHRlc3RfbmFtZToKICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQot
ICAgICAgICAgICAgY2F0ZWdvcnkgPSBvcy5wYXRoLmpvaW4oc2VsZi5sYXlvdXRfdGVzdHNfZGly
KCksIHRlc3Rfb3JfY2F0ZWdvcnkpCi0gICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGNhdGVn
b3J5KSBhbmQgdGVzdF9uYW1lLnN0YXJ0c3dpdGgodGVzdF9vcl9jYXRlZ29yeSk6CisgICAgICAg
ICAgICBjYXRlZ29yeSA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLmxheW91dF90ZXN0c19k
aXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rf
b3JfY2F0ZWdvcnkpCisgICAgICAgICAgICBpZiAoc2VsZi5fZmlsZXN5c3RlbS5pc2RpcihjYXRl
Z29yeSkgYW5kCisgICAgICAgICAgICAgICAgdGVzdF9uYW1lLnN0YXJ0c3dpdGgodGVzdF9vcl9j
YXRlZ29yeSkpOgogICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgIHJldHVybiBG
YWxzZQogCiAgICAgZGVmIG1heWJlX21ha2VfZGlyZWN0b3J5KHNlbGYsICpwYXRoKToKICAgICAg
ICAgIiIiQ3JlYXRlcyB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSBpZiBpdCBkb2Vzbid0IGFscmVh
ZHkgZXhpc3QuIiIiCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG9zLm1ha2VkaXJzKG9zLnBh
dGguam9pbigqcGF0aCkpCi0gICAgICAgIGV4Y2VwdCBPU0Vycm9yLCBlOgotICAgICAgICAgICAg
aWYgZS5lcnJubyAhPSBlcnJuby5FRVhJU1Q6Ci0gICAgICAgICAgICAgICAgcmFpc2UKKyAgICAg
ICAgc2VsZi5fZmlsZXN5c3RlbS5tYXliZV9tYWtlX2RpcmVjdG9yeSgqcGF0aCkKIAogICAgIGRl
ZiBuYW1lKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIHBvcnQgKGUu
Zy4sICdtYWMnLCAnY2hyb21pdW0td2luLXhwJykuCkBAIC00NzIsMTkgKzQ1NiwxMyBAQCBjbGFz
cyBQb3J0KG9iamVjdCk6CiAgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYuX29wdGlvbnMsIG5h
bWUpOgogICAgICAgICAgICAgcmV0dXJuIHNldGF0dHIoc2VsZi5fb3B0aW9ucywgbmFtZSwgZGVm
YXVsdF92YWx1ZSkKIAotICAgICMgRklYTUU6IFRoaXMgY291bGQgYmUgcmVwbGFjZWQgYnkgZnVu
Y3Rpb25zIGluIHdlYmtpdHB5LmNvbW1vbi5jaGVja291dC5zY20uCiAgICAgZGVmIHBhdGhfZnJv
bV93ZWJraXRfYmFzZShzZWxmLCAqY29tcHMpOgogICAgICAgICAiIiJSZXR1cm5zIHRoZSBmdWxs
IHBhdGggdG8gcGF0aCBtYWRlIGJ5IGpvaW5pbmcgdGhlIHRvcCBvZiB0aGUKICAgICAgICAgV2Vi
S2l0IHNvdXJjZSB0cmVlIGFuZCB0aGUgbGlzdCBvZiBwYXRoIGNvbXBvbmVudHMgaW4gfCpjb21w
c3wuIiIiCi0gICAgICAgIGlmIG5vdCBzZWxmLl93ZWJraXRfYmFzZV9kaXI6Ci0gICAgICAgICAg
ICBhYnNwYXRoID0gb3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKQotICAgICAgICAgICAgc2VsZi5f
d2Via2l0X2Jhc2VfZGlyID0gYWJzcGF0aFswOmFic3BhdGguZmluZCgnV2ViS2l0VG9vbHMnKV0K
KyAgICAgICAgcmV0dXJuIHNlbGYuX2NvbmZpZy5wYXRoX2Zyb21fd2Via2l0X2Jhc2UoKmNvbXBz
KQogCi0gICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5fd2Via2l0X2Jhc2VfZGlyLCAq
Y29tcHMpCi0KLSAgICAjIEZJWE1FOiBDYWxsZXJzIHNob3VsZCBldmVudHVhbGx5IG1vdmUgdG8g
c2NtLnNjcmlwdF9wYXRoLgogICAgIGRlZiBzY3JpcHRfcGF0aChzZWxmLCBzY3JpcHRfbmFtZSk6
Ci0gICAgICAgIHJldHVybiBzZWxmLnBhdGhfZnJvbV93ZWJraXRfYmFzZSgiV2ViS2l0VG9vbHMi
LCAiU2NyaXB0cyIsIHNjcmlwdF9uYW1lKQorICAgICAgICByZXR1cm4gc2VsZi5fY29uZmlnLnNj
cmlwdF9wYXRoKHNjcmlwdF9uYW1lKQogCiAgICAgZGVmIHBhdGhfdG9fdGVzdF9leHBlY3RhdGlv
bnNfZmlsZShzZWxmKToKICAgICAgICAgIiIiVXBkYXRlIHRoZSB0ZXN0IGV4cGVjdGF0aW9ucyB0
byB0aGUgcGFzc2VkLWluIHN0cmluZy4KQEAgLTcyNSwzOCArNzAzLDggQEAgY2xhc3MgUG9ydChv
YmplY3QpOgogICAgICAgICAgICAgICAgICAgICAgICBlLm1lc3NhZ2Vfd2l0aF9vdXRwdXQoKSkp
CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcHJldHR5X3BhdGNoX2Vycm9yX2h0bWwKIAotICAg
IGRlZiBfd2Via2l0X2J1aWxkX2RpcmVjdG9yeShzZWxmLCBhcmdzKToKLSAgICAgICAgYXJncyA9
IFsicGVybCIsIHNlbGYuc2NyaXB0X3BhdGgoIndlYmtpdC1idWlsZC1kaXJlY3RvcnkiKV0gKyBh
cmdzCi0gICAgICAgIHJldHVybiBzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1hbmQoYXJncykucnN0
cmlwKCkKLQotICAgIGRlZiBfY29uZmlndXJhdGlvbl9maWxlX3BhdGgoc2VsZik6Ci0gICAgICAg
IGJ1aWxkX3Jvb3QgPSBzZWxmLl93ZWJraXRfYnVpbGRfZGlyZWN0b3J5KFsiLS10b3AtbGV2ZWwi
XSkKLSAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihidWlsZF9yb290LCAiQ29uZmlndXJhdGlv
biIpCi0KLSAgICAjIEVhc3kgb3ZlcnJpZGUgZm9yIHVuaXQgdGVzdHMKLSAgICBkZWYgX29wZW5f
Y29uZmlndXJhdGlvbl9maWxlKHNlbGYpOgotICAgICAgICBjb25maWd1cmF0aW9uX3BhdGggPSBz
ZWxmLl9jb25maWd1cmF0aW9uX2ZpbGVfcGF0aCgpCi0gICAgICAgIHJldHVybiBjb2RlY3Mub3Bl
bihjb25maWd1cmF0aW9uX3BhdGgsICJyIiwgInV0Zi04IikKLQotICAgIGRlZiBfcmVhZF9jb25m
aWd1cmF0aW9uKHNlbGYpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB3aXRoIHNlbGYuX29w
ZW5fY29uZmlndXJhdGlvbl9maWxlKCkgYXMgZmlsZToKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmlsZS5yZWFkbGluZSgpLnJzdHJpcCgpCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIHJl
dHVybiBOb25lCi0KLSAgICAjIEZJWE1FOiBUaGlzIGxpc3QgbWF5IGJlIGluY29tcGxldGUgYXMg
QXBwbGUgaGFzIHNvbWUgc2VrcmV0IGNvbmZpZ3MuCi0gICAgX1JFQ09HTklaRURfQ09ORklHVVJB
VElPTlMgPSAoIkRlYnVnIiwgIlJlbGVhc2UiKQotCiAgICAgZGVmIGRlZmF1bHRfY29uZmlndXJh
dGlvbihzZWxmKToKLSAgICAgICAgIyBGSVhNRTogVW5pZnkgdGhpcyB3aXRoIHdlYmtpdGRpci5w
bSBjb25maWd1cmF0aW9uIHJlYWRpbmcgY29kZS4KLSAgICAgICAgY29uZmlndXJhdGlvbiA9IHNl
bGYuX3JlYWRfY29uZmlndXJhdGlvbigpCi0gICAgICAgIGlmIG5vdCBjb25maWd1cmF0aW9uOgot
ICAgICAgICAgICAgY29uZmlndXJhdGlvbiA9ICJSZWxlYXNlIgotICAgICAgICBpZiBjb25maWd1
cmF0aW9uIG5vdCBpbiBzZWxmLl9SRUNPR05JWkVEX0NPTkZJR1VSQVRJT05TOgotICAgICAgICAg
ICAgX2xvZy53YXJuKCJDb25maWd1cmF0aW9uIFwiJXNcIiBmb3VuZCBpbiAlcyBpcyBub3QgYSBy
ZWNvZ25pemVkIHZhbHVlLlxuIiAlIChjb25maWd1cmF0aW9uLCBzZWxmLl9jb25maWd1cmF0aW9u
X2ZpbGVfcGF0aCgpKSkKLSAgICAgICAgICAgIF9sb2cud2FybigiU2NyaXB0cyBtYXkgZmFpbC4g
IFNlZSAnc2V0LXdlYmtpdC1jb25maWd1cmF0aW9uIC0taGVscCcuIikKLSAgICAgICAgcmV0dXJu
IGNvbmZpZ3VyYXRpb24KKyAgICAgICAgcmV0dXJuIHNlbGYuX2NvbmZpZy5kZWZhdWx0X2NvbmZp
Z3VyYXRpb24oKQogCiAgICAgIwogICAgICMgUFJPVEVDVEVEIFJPVVRJTkVTCkBAIC03NjQsNiAr
NzEyLDggQEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAgICMgVGhlIHJvdXRpbmVzIGJlbG93IHNo
b3VsZCBvbmx5IGJlIGNhbGxlZCBieSByb3V0aW5lcyBpbiB0aGlzIGNsYXNzCiAgICAgIyBvciBh
bnkgb2YgaXRzIHN1YmNsYXNzZXMuCiAgICAgIworICAgIGRlZiBfd2Via2l0X2J1aWxkX2RpcmVj
dG9yeShzZWxmLCBhcmdzKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NvbmZpZy5idWlsZF9kaXJl
Y3RvcnkoYXJnc1swXSkKIAogICAgIGRlZiBfcGF0aF90b19hcGFjaGUoc2VsZik6CiAgICAgICAg
ICIiIlJldHVybnMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgYXBhY2hlIGJpbmFyeS4KQEAgLTgzNSw4
ICs3ODUsOCBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAgZGVmIF93ZWJraXRfYmFzZWxpbmVf
cGF0aChzZWxmLCBwbGF0Zm9ybSk6CiAgICAgICAgICIiIlJldHVybiB0aGUgIGZ1bGwgcGF0aCB0
byB0aGUgdG9wIG9mIHRoZSBiYXNlbGluZSB0cmVlIGZvciBhCiAgICAgICAgIGdpdmVuIHBsYXRm
b3JtLiIiIgotICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYubGF5b3V0X3Rlc3RzX2Rp
cigpLCAncGxhdGZvcm0nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtKQor
ICAgICAgICByZXR1cm4gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYubGF5b3V0X3Rlc3RzX2Rp
cigpLCAncGxhdGZvcm0nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBs
YXRmb3JtKQogCiAKIGNsYXNzIERyaXZlcjoKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZV91bml0dGVzdC5weSBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZV91bml0dGVzdC5weQpp
bmRleCBlZTg2OGU4MGYzYWEwZDY4NTQ0NGIzZjM3ZGNlYzE1NTU4ZGFlZjM2Li44NWVjNWI4ZTky
Mzc1YzQ0ZDVjZjZhZmI1ZTg4OGJiNGM2OTZlYmI4IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2VfdW5pdHRlc3QucHkKKysrIGIv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlX3VuaXR0
ZXN0LnB5CkBAIC0yOCw0OSArMjgsMjEgQEAKIAogaW1wb3J0IG9wdHBhcnNlCiBpbXBvcnQgb3MK
LWltcG9ydCBTdHJpbmdJTwogaW1wb3J0IHN5cwogaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgdW5p
dHRlc3QKIAotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnBhdGggaW1wb3J0IGFic3BhdGhf
dG9fdXJpCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBFeGVj
dXRpdmUsIFNjcmlwdEVycm9yCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IGV4
ZWN1dGl2ZV9tb2NrCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IGZpbGVzeXN0
ZW0KK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgb3V0cHV0Y2FwdHVyZQorZnJv
bSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnBhdGggaW1wb3J0IGFic3BhdGhfdG9fdXJpCiBmcm9t
IHdlYmtpdHB5LnRoaXJkcGFydHkubW9jayBpbXBvcnQgTW9jawogZnJvbSB3ZWJraXRweS50b29s
IGltcG9ydCBtb2NrdG9vbAogCiBpbXBvcnQgYmFzZQotCi0jIEZJWE1FOiBUaGlzIG1ha2VzIFN0
cmluZ0lPIG9iamVjdHMgd29yayB3aXRoICJ3aXRoIi4gUmVtb3ZlCi0jIHdoZW4gd2UgdXBncmFk
ZSB0byAyLjYuCi1jbGFzcyBOZXdTdHJpbmdJTyhTdHJpbmdJTy5TdHJpbmdJTyk6Ci0gICAgZGVm
IF9fZW50ZXJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYKLQotICAgIGRlZiBfX2V4aXRf
XyhzZWxmLCB0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKToKLSAgICAgICAgcGFzcwotCi0KLWNsYXNz
IE1vY2tFeGVjdXRpdmUoKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgZXhjZXB0aW9uKToKLSAg
ICAgICAgc2VsZi5fZXhjZXB0aW9uID0gZXhjZXB0aW9uCi0KLSAgICBkZWYgcnVuX2NvbW1hbmQo
c2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKLSAgICAgICAgcmFpc2Ugc2VsZi5fZXhjZXB0aW9uCi0K
LQotY2xhc3MgVW5pdFRlc3RQb3J0KGJhc2UuUG9ydCk6Ci0gICAgIiIiU3ViY2xhc3Mgb2YgYmFz
ZS5Qb3J0IHVzZWQgZm9yIHVuaXQgdGVzdGluZy4iIiIKLSAgICBkZWYgX19pbml0X18oc2VsZiwg
Y29uZmlndXJhdGlvbl9jb250ZW50cz1Ob25lLCBjb25maWd1cmF0aW9uX2V4Y2VwdGlvbj1JT0Vy
cm9yLCBleGVjdXRpdmVfZXhjZXB0aW9uPU5vbmUpOgotICAgICAgICBiYXNlLlBvcnQuX19pbml0
X18oc2VsZikKLSAgICAgICAgc2VsZi5fY29uZmlndXJhdGlvbl9jb250ZW50cyA9IGNvbmZpZ3Vy
YXRpb25fY29udGVudHMKLSAgICAgICAgc2VsZi5fY29uZmlndXJhdGlvbl9leGNlcHRpb24gPSBj
b25maWd1cmF0aW9uX2V4Y2VwdGlvbgotICAgICAgICBpZiBleGVjdXRpdmVfZXhjZXB0aW9uOgot
ICAgICAgICAgICAgc2VsZi5fZXhlY3V0aXZlID0gTW9ja0V4ZWN1dGl2ZShleGVjdXRpdmVfZXhj
ZXB0aW9uKQotCi0gICAgZGVmIF9vcGVuX2NvbmZpZ3VyYXRpb25fZmlsZShzZWxmKToKLSAgICAg
ICAgaWYgc2VsZi5fY29uZmlndXJhdGlvbl9jb250ZW50czoKLSAgICAgICAgICAgIHJldHVybiBO
ZXdTdHJpbmdJTyhzZWxmLl9jb25maWd1cmF0aW9uX2NvbnRlbnRzKQotICAgICAgICByYWlzZSBz
ZWxmLl9jb25maWd1cmF0aW9uX2V4Y2VwdGlvbgoraW1wb3J0IGNvbmZpZworaW1wb3J0IGNvbmZp
Z19tb2NrCiAKIAogY2xhc3MgUG9ydFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMTAyLDE4
ICs3NCwyMSBAQCBjbGFzcyBQb3J0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHJl
dHVybiBuZXdfZmlsZQogCiAgICAgZGVmIHRlc3RfcHJldHR5X3BhdGNoX29zX2Vycm9yKHNlbGYp
OgotICAgICAgICBwb3J0ID0gVW5pdFRlc3RQb3J0KGV4ZWN1dGl2ZV9leGNlcHRpb249T1NFcnJv
cikKKyAgICAgICAgcG9ydCA9IGJhc2UuUG9ydChleGVjdXRpdmU9ZXhlY3V0aXZlX21vY2suTW9j
a0V4ZWN1dGl2ZShleGNlcHRpb249T1NFcnJvcikpCisgICAgICAgIG9jID0gb3V0cHV0Y2FwdHVy
ZS5PdXRwdXRDYXB0dXJlKCkKKyAgICAgICAgb2MuY2FwdHVyZV9vdXRwdXQoKQogICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHBvcnQucHJldHR5X3BhdGNoX3RleHQoInBhdGNoLnR4dCIpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgIHBvcnQuX3ByZXR0eV9wYXRjaF9lcnJvcl9odG1sKQogCiAg
ICAgICAgICMgVGhpcyB0ZXN0cyByZXBlYXRlZCBjYWxscyB0byBtYWtlIHN1cmUgd2UgY2FjaGUg
dGhlIHJlc3VsdC4KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0LnByZXR0eV9wYXRjaF90
ZXh0KCJwYXRjaC50eHQiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0Ll9wcmV0dHlf
cGF0Y2hfZXJyb3JfaHRtbCkKKyAgICAgICAgb2MucmVzdG9yZV9vdXRwdXQoKQogCiAgICAgZGVm
IHRlc3RfcHJldHR5X3BhdGNoX3NjcmlwdF9lcnJvcihzZWxmKToKICAgICAgICAgIyBGSVhNRTog
VGhpcyBpcyBzb21lIHVnbHkgd2hpdGUtYm94IHRlc3QgaGFja2luZyAuLi4KICAgICAgICAgYmFz
ZS5fcHJldHR5X3BhdGNoX2F2YWlsYWJsZSA9IFRydWUKLSAgICAgICAgcG9ydCA9IFVuaXRUZXN0
UG9ydChleGVjdXRpdmVfZXhjZXB0aW9uPVNjcmlwdEVycm9yKQorICAgICAgICBwb3J0ID0gYmFz
ZS5Qb3J0KGV4ZWN1dGl2ZT1leGVjdXRpdmVfbW9jay5Nb2NrRXhlY3V0aXZlKGV4Y2VwdGlvbj1T
Y3JpcHRFcnJvcikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9ydC5wcmV0dHlfcGF0Y2hf
dGV4dCgicGF0Y2gudHh0IiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydC5fcHJldHR5
X3BhdGNoX2Vycm9yX2h0bWwpCiAKQEAgLTE5NCwxMyArMTY5LDkgQEAgY2xhc3MgUG9ydFRlc3Qo
dW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKCdub3N1Y2h0aGlu
ZycgaW4gZGlmZikKIAogICAgIGRlZiB0ZXN0X2RlZmF1bHRfY29uZmlndXJhdGlvbl9ub3Rmb3Vu
ZChzZWxmKToKLSAgICAgICAgIyBSZWd1bGFyIElPRXJyb3IgdGhyb3duIHdoaWxlIHRyeWluZyB0
byBnZXQgdGhlIGNvbmZpZ3VyYXRpb24uCi0gICAgICAgIHBvcnQgPSBVbml0VGVzdFBvcnQoKQot
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQuZGVmYXVsdF9jb25maWd1cmF0aW9uKCksICJS
ZWxlYXNlIikKLQotICAgICAgICAjIE1vcmUgZXhvdGljIE9TRXJyb3IgdGhyb3duLgotICAgICAg
ICBwb3J0ID0gVW5pdFRlc3RQb3J0KGNvbmZpZ3VyYXRpb25fZXhjZXB0aW9uPU9TRXJyb3IpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9ydC5kZWZhdWx0X2NvbmZpZ3VyYXRpb24oKSwgIlJl
bGVhc2UiKQorICAgICAgICAjIFRlc3QgdGhhdCB3ZSBkZWxlZ2F0ZSB0byB0aGUgY29uZmlnIG9i
amVjdCBwcm9wZXJseS4KKyAgICAgICAgcG9ydCA9IGJhc2UuUG9ydChjb25maWc9Y29uZmlnX21v
Y2suTW9ja0NvbmZpZyhkZWZhdWx0X2NvbmZpZ3VyYXRpb249J2RlZmF1bHQnKSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChwb3J0LmRlZmF1bHRfY29uZmlndXJhdGlvbigpLCAnZGVmYXVsdCcp
CiAKICAgICBkZWYgdGVzdF9sYXlvdXRfdGVzdHNfc2tpcHBpbmcoc2VsZik6CiAgICAgICAgIHBv
cnQgPSBiYXNlLlBvcnQoKQpAQCAtMjA5LDE0ICsxODAsNiBAQCBjbGFzcyBQb3J0VGVzdCh1bml0
dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwb3J0LnNraXBzX2xheW91
dF90ZXN0KCdtZWRpYS92aWRlby16b29tLmh0bWwnKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxz
ZShwb3J0LnNraXBzX2xheW91dF90ZXN0KCdmb28vZm9vLmh0bWwnKSkKIAotICAgIGRlZiB0ZXN0
X2RlZmF1bHRfY29uZmlndXJhdGlvbl9mb3VuZChzZWxmKToKLSAgICAgICAgcG9ydCA9IFVuaXRU
ZXN0UG9ydChjb25maWd1cmF0aW9uX2NvbnRlbnRzPSJEZWJ1ZyIpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwocG9ydC5kZWZhdWx0X2NvbmZpZ3VyYXRpb24oKSwgIkRlYnVnIikKLQotICAgIGRl
ZiB0ZXN0X2RlZmF1bHRfY29uZmlndXJhdGlvbl91bmtub3duKHNlbGYpOgotICAgICAgICBwb3J0
ID0gVW5pdFRlc3RQb3J0KGNvbmZpZ3VyYXRpb25fY29udGVudHM9IndlaXJkX3ZhbHVlIikKLSAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0LmRlZmF1bHRfY29uZmlndXJhdGlvbigpLCAid2Vp
cmRfdmFsdWUiKQotCiAgICAgZGVmIHRlc3Rfc2V0dXBfdGVzdF9ydW4oc2VsZik6CiAgICAgICAg
IHBvcnQgPSBiYXNlLlBvcnQoKQogICAgICAgICAjIFRoaXMgcm91dGluZSBpcyBhIG5vLW9wLiBX
ZSBqdXN0IHRlc3QgaXQgZm9yIGNvdmVyYWdlLgpAQCAtMjI5LDcgKzE5Miw2IEBAIGNsYXNzIFBv
cnRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdjc3My
LjEnIGluIGRpcnMpCiAKICAgICBkZWYgdGVzdF9maWxlbmFtZV90b191cmkoc2VsZik6Ci0KICAg
ICAgICAgcG9ydCA9IGJhc2UuUG9ydCgpCiAgICAgICAgIGxheW91dF90ZXN0X2RpciA9IHBvcnQu
bGF5b3V0X3Rlc3RzX2RpcigpCiAgICAgICAgIHRlc3RfZmlsZSA9IG9zLnBhdGguam9pbihsYXlv
dXRfdGVzdF9kaXIsICJmb28iLCAiYmFyLmh0bWwiKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jb25maWcucHkgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2NvbmZpZy5weQppbmRleCA3NThh
MzM2MTkzMzZjNDc2ZWM0YjhhMjZjMzRhMWVkN2MyODY1NWE3Li5kMmFkMzJkOTRmNGU0NjgzMGQ1
ODMzMWIxZjBiOTNmZDRmNmVhZTM5IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2NvbmZpZy5weQorKysgYi9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2NvbmZpZy5weQpAQCAtMzIsMTEgKzMyLDYg
QEAKICMgRklYTUU6IFRoaXMgZmlsZSBuZWVkcyB0byBiZSB1bmlmaWVkIHdpdGggY29tbW9uL2No
ZWNrb3V0L3NjbS5weSBhbmQKICMgY29tbW9uL2NvbmZpZy9wb3J0cy5weSAuCiAKLWZyb20gX19m
dXR1cmVfXyBpbXBvcnQgd2l0aF9zdGF0ZW1lbnQKLQotaW1wb3J0IGNvZGVjcwotaW1wb3J0IG9z
Ci0KIGZyb20gd2Via2l0cHkuY29tbW9uLmNoZWNrb3V0IGltcG9ydCBzY20KIGZyb20gd2Via2l0
cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgbG9ndXRpbHMKIApAQCAtNjIsOCArNTcsOSBAQCBjbGFz
cyBDb25maWcob2JqZWN0KToKICAgICAgICAgIlJlbGVhc2UiOiAiLS1yZWxlYXNlIiwKICAgICB9
CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgZXhlY3V0aXZlKToKKyAgICBkZWYgX19pbml0X18o
c2VsZiwgZXhlY3V0aXZlLCBmaWxlc3lzdGVtKToKICAgICAgICAgc2VsZi5fZXhlY3V0aXZlID0g
ZXhlY3V0aXZlCisgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0gPSBmaWxlc3lzdGVtCiAgICAgICAg
IHNlbGYuX3dlYmtpdF9iYXNlX2RpciA9IE5vbmUKICAgICAgICAgc2VsZi5fZGVmYXVsdF9jb25m
aWd1cmF0aW9uID0gTm9uZQogICAgICAgICBzZWxmLl9idWlsZF9kaXJlY3RvcmllcyA9IHt9CkBA
IC0xMTksNyArMTE1LDcgQEAgY2xhc3MgQ29uZmlnKG9iamVjdCk6CiAgICAgICAgIHJldHVybiBz
ZWxmLl9kZWZhdWx0X2NvbmZpZ3VyYXRpb24KIAogICAgIGRlZiBwYXRoX2Zyb21fd2Via2l0X2Jh
c2Uoc2VsZiwgKmNvbXBzKToKLSAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLndlYmtp
dF9iYXNlX2RpcigpLCAqY29tcHMpCisgICAgICAgIHJldHVybiBzZWxmLl9maWxlc3lzdGVtLmpv
aW4oc2VsZi53ZWJraXRfYmFzZV9kaXIoKSwgKmNvbXBzKQogCiAgICAgZGVmIHdlYmtpdF9iYXNl
X2RpcihzZWxmKToKICAgICAgICAgIiIiUmV0dXJucyB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUg
dG9wIG9mIHRoZSBXZWJLaXQgdHJlZS4KQEAgLTEzNSw4ICsxMzEsOCBAQCBjbGFzcyBDb25maWco
b2JqZWN0KToKICAgICAgICAgcmV0dXJuIHNlbGYuX3dlYmtpdF9iYXNlX2RpcgogCiAgICAgZGVm
IF9zY3JpcHRfcGF0aChzZWxmLCBzY3JpcHRfbmFtZSk6Ci0gICAgICAgIHJldHVybiBvcy5wYXRo
LmpvaW4oc2VsZi53ZWJraXRfYmFzZV9kaXIoKSwgIldlYktpdFRvb2xzIiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiU2NyaXB0cyIsIHNjcmlwdF9uYW1lKQorICAgICAgICByZXR1cm4g
c2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYud2Via2l0X2Jhc2VfZGlyKCksICJXZWJLaXRUb29s
cyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNjcmlwdHMiLCBzY3Jp
cHRfbmFtZSkKIAogICAgIGRlZiBfZGV0ZXJtaW5lX2NvbmZpZ3VyYXRpb24oc2VsZik6CiAgICAg
ICAgICMgVGhpcyBtaXJyb3JzIHRoZSBsb2dpYyBpbiB3ZWJraXRkaXJzLnBtOmRldGVybWluZUNv
bmZpZ3VyYXRpb24oKS4KQEAgLTE1MSwxMCArMTQ3LDkgQEAgY2xhc3MgQ29uZmlnKG9iamVjdCk6
CiAgICAgICAgIHJldHVybiBfZGV0ZXJtaW5lZF9jb25maWd1cmF0aW9uCiAKICAgICBkZWYgX3Jl
YWRfY29uZmlndXJhdGlvbihzZWxmKToKLSAgICAgICAgY29uZmlndXJhdGlvbl9wYXRoID0gb3Mu
cGF0aC5qb2luKHNlbGYuYnVpbGRfZGlyZWN0b3J5KE5vbmUpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIkNvbmZpZ3VyYXRpb24iKQotICAgICAgICBpZiBub3Qg
b3MucGF0aC5leGlzdHMoY29uZmlndXJhdGlvbl9wYXRoKToKKyAgICAgICAgY29uZmlndXJhdGlv
bl9wYXRoID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYuYnVpbGRfZGlyZWN0b3J5KE5vbmUp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNv
bmZpZ3VyYXRpb24iKQorICAgICAgICBpZiBub3Qgc2VsZi5fZmlsZXN5c3RlbS5leGlzdHMoY29u
ZmlndXJhdGlvbl9wYXRoKToKICAgICAgICAgICAgIHJldHVybiBOb25lCiAKLSAgICAgICAgd2l0
aCBjb2RlY3Mub3Blbihjb25maWd1cmF0aW9uX3BhdGgsICJyIiwgInV0Zi04IikgYXMgZmg6Ci0g
ICAgICAgICAgICByZXR1cm4gZmgucmVhZCgpLnJzdHJpcCgpCisgICAgICAgIHJldHVybiBzZWxm
Ll9maWxlc3lzdGVtLnJlYWRfZmlsZShjb25maWd1cmF0aW9uX3BhdGgsICJ1dGYtOCIpLnJzdHJp
cCgpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L2NvbmZpZ19tb2NrLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9jb25maWdfbW9jay5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZjcxZmEzMzI1NTBjZjZm
ZWI2YWNiYWEyZDYzOGE2OTVmYTY1MDQ2Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jb25maWdfbW9jay5weQpAQCAtMCww
ICsxLDUwIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMg
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJX
cmFwcGVyIG9iamVjdHMgZm9yIFdlYktpdC1zcGVjaWZpYyB1dGlsaXR5IHJvdXRpbmVzLiIiIgor
CisKK2NsYXNzIE1vY2tDb25maWcob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZGVm
YXVsdF9jb25maWd1cmF0aW9uPSdSZWxlYXNlJyk6CisgICAgICAgIHNlbGYuX2RlZmF1bHRfY29u
ZmlndXJhdGlvbiA9IGRlZmF1bHRfY29uZmlndXJhdGlvbgorCisgICAgZGVmIGJ1aWxkX2RpcmVj
dG9yeShzZWxmLCBjb25maWd1cmF0aW9uKToKKyAgICAgICAgcmV0dXJuICIvYnVpbGQiCisKKyAg
ICBkZWYgYnVpbGRfZHVtcHJlbmRlcnRyZWUoc2VsZiwgY29uZmlndXJhdGlvbik6CisgICAgICAg
IHJldHVybiBUcnVlCisKKyAgICBkZWYgZGVmYXVsdF9jb25maWd1cmF0aW9uKHNlbGYpOgorICAg
ICAgICByZXR1cm4gc2VsZi5fZGVmYXVsdF9jb25maWd1cmF0aW9uCisKKyAgICBkZWYgcGF0aF9m
cm9tX3dlYmtpdF9iYXNlKHNlbGYsICpjb21wcyk6CisgICAgICAgIHJldHVybiAiLyIgKyAiLyIu
am9pbihsaXN0KGNvbXBzKSkKKworICAgIGRlZiB3ZWJraXRfYmFzZV9kaXIoc2VsZik6CisgICAg
ICAgIHJldHVybiAiLyIKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvY29uZmlnX3VuaXR0ZXN0LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jb25maWdfdW5pdHRlc3QucHkKaW5kZXggODg2
M2NmZTNhOGMwMGRmY2YzYWI0YjQ0NzJkMWJiMzUzMjE5M2RiYi4uYTI2OGY4ZGM2NDdlODEwODBl
OWUwYjQwOTU1MzY0OWQ5NWYxMzllZiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jb25maWdfdW5pdHRlc3QucHkKKysrIGIvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jb25maWdfdW5pdHRlc3Qu
cHkKQEAgLTI2LDE1NiArMjYsMTA4IEBACiAjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogIyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgog
Ci1pbXBvcnQgY29kZWNzCi1pbXBvcnQgb3MKLWltcG9ydCBTdHJpbmdJTwogaW1wb3J0IHVuaXR0
ZXN0CiAKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgZXhlY3V0aXZlCitmcm9t
IHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IGV4ZWN1dGl2ZV9tb2NrCitmcm9tIHdlYmtp
dHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IGZpbGVzeXN0ZW0KK2Zyb20gd2Via2l0cHkuY29tbW9u
LnN5c3RlbSBpbXBvcnQgZmlsZXN5c3RlbV9tb2NrCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0
ZW0gaW1wb3J0IG91dHB1dGNhcHR1cmUKIAogaW1wb3J0IGNvbmZpZwogCi0KLSMgRklYTUU6IFRo
aXMgbWFrZXMgU3RyaW5nSU8gb2JqZWN0cyB3b3JrIHdpdGggIndpdGgiLiBSZW1vdmUKLSMgd2hl
biB3ZSB1cGdyYWRlIHRvIDIuNi4KLWNsYXNzIE5ld1N0cmluZ0lPKFN0cmluZ0lPLlN0cmluZ0lP
KToKLSAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZgotCi0gICAg
ZGVmIF9fZXhpdF9fKHNlbGYsIHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spOgotICAgICAgICBwYXNz
Ci0KLQotY2xhc3MgTW9ja0V4ZWN1dGl2ZShvYmplY3QpOgotICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBvdXRwdXQ9JycsIGV4aXRfY29kZT0wKToKLSAgICAgICAgc2VsZi5fb3V0cHV0ID0gb3V0cHV0
Ci0gICAgICAgIHNlbGYuX2V4aXRfY29kZSA9IGV4aXRfY29kZQotCi0gICAgZGVmIHJ1bl9jb21t
YW5kKHNlbGYsIGFyZ19saXN0LCByZXR1cm5fZXhpdF9jb2RlPUZhbHNlLAotICAgICAgICAgICAg
ICAgICAgICBkZWNvZGVfb3V0cHV0PUZhbHNlKToKLSAgICAgICAgaWYgcmV0dXJuX2V4aXRfY29k
ZToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9leGl0X2NvZGUKLSAgICAgICAgcmV0dXJuIHNl
bGYuX291dHB1dAotCi0KIGNsYXNzIENvbmZpZ1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAg
IGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgY29uZmlnLmNsZWFyX2NhY2hlZF9jb25maWd1
cmF0aW9uKCkKIAotICAgIGRlZiBhc3NlcnRDb25maWd1cmF0aW9uKHNlbGYsIGNvbnRlbnRzLCBl
eHBlY3RlZCk6CisgICAgZGVmIG1ha2VfY29uZmlnKHNlbGYsIG91dHB1dD0nJywgZmlsZXM9e30s
IGV4aXRfY29kZT0wKToKKyAgICAgICAgZSA9IGV4ZWN1dGl2ZV9tb2NrLk1vY2tFeGVjdXRpdmUo
b3V0cHV0PW91dHB1dCwgZXhpdF9jb2RlPWV4aXRfY29kZSkKKyAgICAgICAgZnMgPSBmaWxlc3lz
dGVtX21vY2suTW9ja0ZpbGVTeXN0ZW0oZmlsZXMpCisgICAgICAgIHJldHVybiBjb25maWcuQ29u
ZmlnKGUsIGZzKQorCisgICAgZGVmIGFzc2VydF9jb25maWd1cmF0aW9uKHNlbGYsIGNvbnRlbnRz
LCBleHBlY3RlZCk6CiAgICAgICAgICMgVGhpcyB0ZXN0cyB0aGF0IGEgY29uZmlndXJhdGlvbiBm
aWxlIGNvbnRhaW5pbmcKICAgICAgICAgIyBfY29udGVudHNfIGVuZHNkIHVwIGJlaW5nIGludGVy
cHJldGVkIGFzIF9leHBlY3RlZF8uCi0gICAgICAgICMKLSAgICAgICAgIyBGSVhNRTogcmV3cml0
ZSB0aGlzIHdoZW4gd2UgaGF2ZSBhIGZpbGVzeXN0ZW0gYWJzdHJhY3Rpb24gd2UKLSAgICAgICAg
IyBjYW4gbW9jayBvdXQgbW9yZSBlYXNpbHkuCi0gICAgICAgIGNvbmZpZy5jbGVhcl9jYWNoZWRf
Y29uZmlndXJhdGlvbigpCi0gICAgICAgIG9yaWdfb3BlbiA9IGNvZGVjcy5vcGVuCi0KLSAgICAg
ICAgZGVmIHdyYXBfb3Blbihjb250ZW50cyk6Ci0gICAgICAgICAgICBkZWYgb3Blbl93cmFwcGVy
KHBhdGgsIG1vZGUsIGVuY29kaW5nKToKLSAgICAgICAgICAgICAgICByZXR1cm4gTmV3U3RyaW5n
SU8oY29udGVudHMpCi0gICAgICAgICAgICByZXR1cm4gb3Blbl93cmFwcGVyCi0KLSAgICAgICAg
dHJ5OgotICAgICAgICAgICAgb3JpZ19leGlzdHMgPSBvcy5wYXRoLmV4aXN0cwotICAgICAgICAg
ICAgb3MucGF0aC5leGlzdHMgPSBsYW1iZGEgcDogVHJ1ZQotICAgICAgICAgICAgY29kZWNzLm9w
ZW4gPSB3cmFwX29wZW4oY29udGVudHMpCi0KLSAgICAgICAgICAgIGUgPSBNb2NrRXhlY3V0aXZl
KG91dHB1dD0nZm9vJykKLSAgICAgICAgICAgIGMgPSBjb25maWcuQ29uZmlnKGUpCi0gICAgICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZGVmYXVsdF9jb25maWd1cmF0aW9uKCksIGV4cGVjdGVk
KQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgb3MucGF0aC5leGlzdHMgPSBvcmlnX2V4
aXN0cwotICAgICAgICAgICAgY29kZWNzLm9wZW4gPSBvcmlnX29wZW4KKyAgICAgICAgYyA9IHNl
bGYubWFrZV9jb25maWcoJ2ZvbycsIHsnZm9vL0NvbmZpZ3VyYXRpb24nOiBjb250ZW50c30pCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5kZWZhdWx0X2NvbmZpZ3VyYXRpb24oKSwgZXhwZWN0
ZWQpCiAKICAgICBkZWYgdGVzdF9idWlsZF9kaXJlY3RvcnlfdG9wbGV2ZWwoc2VsZik6Ci0gICAg
ICAgIGUgPSBNb2NrRXhlY3V0aXZlKG91dHB1dD0idG9wbGV2ZWwiKQotICAgICAgICBjID0gY29u
ZmlnLkNvbmZpZyhlKQorICAgICAgICBjID0gc2VsZi5tYWtlX2NvbmZpZygndG9wbGV2ZWwnKQog
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuYnVpbGRfZGlyZWN0b3J5KE5vbmUpLCAndG9wbGV2
ZWwnKQogCiAgICAgICAgICMgVGVzdCBhZ2FpbiB0byBjaGVjayBjYWNoaW5nCiAgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoYy5idWlsZF9kaXJlY3RvcnkoTm9uZSksICd0b3BsZXZlbCcpCiAKICAg
ICBkZWYgdGVzdF9idWlsZF9kaXJlY3RvcnlfX3JlbGVhc2Uoc2VsZik6Ci0gICAgICAgIGUgPSBN
b2NrRXhlY3V0aXZlKG91dHB1dD0icmVsZWFzZSIpCi0gICAgICAgIGMgPSBjb25maWcuQ29uZmln
KGUpCisgICAgICAgIGMgPSBzZWxmLm1ha2VfY29uZmlnKCdyZWxlYXNlJykKICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChjLmJ1aWxkX2RpcmVjdG9yeSgnUmVsZWFzZScpLCAncmVsZWFzZScpCiAK
ICAgICBkZWYgdGVzdF9idWlsZF9kaXJlY3RvcnlfX2RlYnVnKHNlbGYpOgotICAgICAgICBlID0g
TW9ja0V4ZWN1dGl2ZShvdXRwdXQ9ImRlYnVnIikKLSAgICAgICAgYyA9IGNvbmZpZy5Db25maWco
ZSkKKyAgICAgICAgYyA9IHNlbGYubWFrZV9jb25maWcoJ2RlYnVnJykKICAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChjLmJ1aWxkX2RpcmVjdG9yeSgnRGVidWcnKSwgJ2RlYnVnJykKIAogICAgIGRl
ZiB0ZXN0X2J1aWxkX2RpcmVjdG9yeV9fdW5rbm93bihzZWxmKToKLSAgICAgICAgZSA9IE1vY2tF
eGVjdXRpdmUob3V0cHV0PSJ1bmtub3duIikKLSAgICAgICAgYyA9IGNvbmZpZy5Db25maWcoZSkK
KyAgICAgICAgYyA9IHNlbGYubWFrZV9jb25maWcoInVua25vd24iKQogICAgICAgICBzZWxmLmFz
c2VydFJhaXNlcyhLZXlFcnJvciwgYy5idWlsZF9kaXJlY3RvcnksICdVbmtub3duJykKIAogICAg
IGRlZiB0ZXN0X2J1aWxkX2R1bXByZW5kZXJ0cmVlX19zdWNjZXNzKHNlbGYpOgotICAgICAgICBl
ID0gTW9ja0V4ZWN1dGl2ZShleGl0X2NvZGU9MCkKLSAgICAgICAgYyA9IGNvbmZpZy5Db25maWco
ZSkKKyAgICAgICAgYyA9IHNlbGYubWFrZV9jb25maWcoZXhpdF9jb2RlPTApCiAgICAgICAgIHNl
bGYuYXNzZXJ0VHJ1ZShjLmJ1aWxkX2R1bXByZW5kZXJ0cmVlKCJEZWJ1ZyIpKQogICAgICAgICBz
ZWxmLmFzc2VydFRydWUoYy5idWlsZF9kdW1wcmVuZGVydHJlZSgiUmVsZWFzZSIpKQogICAgICAg
ICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgYy5idWlsZF9kdW1wcmVuZGVydHJlZSwgIlVu
a25vd24iKQogCiAgICAgZGVmIHRlc3RfYnVpbGRfZHVtcHJlbmRlcnRyZWVfX2ZhaWx1cmUoc2Vs
Zik6Ci0gICAgICAgIGUgPSBNb2NrRXhlY3V0aXZlKGV4aXRfY29kZT0tMSkKLSAgICAgICAgYyA9
IGNvbmZpZy5Db25maWcoZSkKLQotICAgICAgICAjIEJ1aWxkIGZhaWx1cmVzIHNob3VsZCBsb2cg
ZXJyb3JzLiBTaW5jZSBubyBsb2dnaW5nIGhhbmRsZXIKLSAgICAgICAgIyBpcyByZWdpc3RlcmVk
LCB3ZSBnZXQgdGhlICJubyBoYW5kbGVycyBmb3VuZCIgbWVzc2FnZSBvbgotICAgICAgICAjIHRo
ZSBmaXJzdCBpbnZvY2F0aW9uLCBidXQgbm90IHRoZSBzZWNvbmQuIFdlIGNhcHR1cmUgb3V0cHV0
Ci0gICAgICAgICMgaW4gYm90aCBjYXNlcyBpbiBjYXNlIHRoaXMgYmVoYXZpb3IgY2hhbmdlcywg
YnV0IHdlIG9ubHkKLSAgICAgICAgIyBjaGVjayBmb3Igb3V0cHV0IG9uIHRoZSBmaXJzdCBpbnZv
Y2F0aW9uLgorICAgICAgICBjID0gc2VsZi5tYWtlX2NvbmZpZyhleGl0X2NvZGU9LTEpCisKKyAg
ICAgICAgIyBGSVhNRTogQnVpbGQgZmFpbHVyZXMgc2hvdWxkIGxvZyBlcnJvcnMuIEhvd2V2ZXIs
IHRoZSBtZXNzYWdlIHdlCisgICAgICAgICMgZ2V0IGRlcGVuZHMgb24gaG93IHdlJ3JlIGJlaW5n
IGNhbGxlZDsgYXMgYSBzdGFuZGFsb25lIHRlc3QsCisgICAgICAgICMgd2UnbGwgZ2V0IHRoZSAi
bm8gaGFuZGxlcnMgZm91bmQiIG1lc3NhZ2UuIEFzIHBhcnQgb2YKKyAgICAgICAgIyB0ZXN0LXdl
YmtpdHB5LCB3ZSBnZXQgdGhlIGFjdHVhbCBtZXNzYWdlLiBSZWFsbHksIHdlIG5lZWQKKyAgICAg
ICAgIyBvdXRwdXRjYXB0dXJlIHRvIGluc3RhbGwgaXRzIG93biBoYW5kbGVyLgogICAgICAgICBv
YyA9IG91dHB1dGNhcHR1cmUuT3V0cHV0Q2FwdHVyZSgpCiAgICAgICAgIG9jLmNhcHR1cmVfb3V0
cHV0KCkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjLmJ1aWxkX2R1bXByZW5kZXJ0cmVlKCdE
ZWJ1ZycpKQotICAgICAgICAob3V0LCBlcnIpID0gb2MucmVzdG9yZV9vdXRwdXQoKQotICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHN0cihvdXQpLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnROb3RF
cXVhbChzdHIoZXJyKSwgJycpCisgICAgICAgIG9jLnJlc3RvcmVfb3V0cHV0KCkKIAogICAgICAg
ICBvYy5jYXB0dXJlX291dHB1dCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYy5idWlsZF9k
dW1wcmVuZGVydHJlZSgnUmVsZWFzZScpKQogICAgICAgICBvYy5yZXN0b3JlX291dHB1dCgpCiAK
ICAgICBkZWYgdGVzdF9kZWZhdWx0X2NvbmZpZ3VyYXRpb25fX3JlbGVhc2Uoc2VsZik6Ci0gICAg
ICAgIHNlbGYuYXNzZXJ0Q29uZmlndXJhdGlvbignUmVsZWFzZScsICdSZWxlYXNlJykKKyAgICAg
ICAgc2VsZi5hc3NlcnRfY29uZmlndXJhdGlvbignUmVsZWFzZScsICdSZWxlYXNlJykKIAogICAg
IGRlZiB0ZXN0X2RlZmF1bHRfY29uZmlndXJhdGlvbl9fZGVidWcoc2VsZik6Ci0gICAgICAgIHNl
bGYuYXNzZXJ0Q29uZmlndXJhdGlvbignRGVidWcnLCAnRGVidWcnKQorICAgICAgICBzZWxmLmFz
c2VydF9jb25maWd1cmF0aW9uKCdEZWJ1ZycsICdEZWJ1ZycpCiAKICAgICBkZWYgdGVzdF9kZWZh
dWx0X2NvbmZpZ3VyYXRpb25fX2RlcGxveW1lbnQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0
Q29uZmlndXJhdGlvbignRGVwbG95bWVudCcsICdSZWxlYXNlJykKKyAgICAgICAgc2VsZi5hc3Nl
cnRfY29uZmlndXJhdGlvbignRGVwbG95bWVudCcsICdSZWxlYXNlJykKIAogICAgIGRlZiB0ZXN0
X2RlZmF1bHRfY29uZmlndXJhdGlvbl9fZGV2ZWxvcG1lbnQoc2VsZik6Ci0gICAgICAgIHNlbGYu
YXNzZXJ0Q29uZmlndXJhdGlvbignRGV2ZWxvcG1lbnQnLCAnRGVidWcnKQorICAgICAgICBzZWxm
LmFzc2VydF9jb25maWd1cmF0aW9uKCdEZXZlbG9wbWVudCcsICdEZWJ1ZycpCiAKICAgICBkZWYg
dGVzdF9kZWZhdWx0X2NvbmZpZ3VyYXRpb25fX25vdGZvdW5kKHNlbGYpOgogICAgICAgICAjIFRo
aXMgdGVzdHMgd2hhdCBoYXBwZW5zIGlmIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZmlsZQog
ICAgICAgICAjIGRvZXNuJ3QgZXhpc3QuCi0gICAgICAgIGNvbmZpZy5jbGVhcl9jYWNoZWRfY29u
ZmlndXJhdGlvbigpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG9yaWdfZXhpc3RzID0gb3Mu
cGF0aC5leGlzdHMKLSAgICAgICAgICAgIG9zLnBhdGguZXhpc3RzID0gbGFtYmRhIHA6IEZhbHNl
Ci0gICAgICAgICAgICBlID0gTW9ja0V4ZWN1dGl2ZShvdXRwdXQ9ImZvbyIpCi0gICAgICAgICAg
ICBjID0gY29uZmlnLkNvbmZpZyhlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmRl
ZmF1bHRfY29uZmlndXJhdGlvbigpLCAiUmVsZWFzZSIpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAg
ICAgICAgICBvcy5wYXRoLmV4aXN0cyA9IG9yaWdfZXhpc3RzCisgICAgICAgIGMgPSBzZWxmLm1h
a2VfY29uZmlnKG91dHB1dD0nZm9vJywgZmlsZXM9eydmb28vQ29uZmlndXJhdGlvbic6IE5vbmV9
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZGVmYXVsdF9jb25maWd1cmF0aW9uKCksICJS
ZWxlYXNlIikKIAogICAgIGRlZiB0ZXN0X2RlZmF1bHRfY29uZmlndXJhdGlvbl9fdW5rbm93bihz
ZWxmKToKICAgICAgICAgIyBJZ25vcmUgdGhlIHdhcm5pbmcgYWJvdXQgYW4gdW5rbm93biBjb25m
aWd1cmF0aW9uIHZhbHVlLgogICAgICAgICBvYyA9IG91dHB1dGNhcHR1cmUuT3V0cHV0Q2FwdHVy
ZSgpCiAgICAgICAgIG9jLmNhcHR1cmVfb3V0cHV0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRDb25m
aWd1cmF0aW9uKCdVbmtub3duJywgJ1Vua25vd24nKQorICAgICAgICBzZWxmLmFzc2VydF9jb25m
aWd1cmF0aW9uKCdVbmtub3duJywgJ1Vua25vd24nKQogICAgICAgICBvYy5yZXN0b3JlX291dHB1
dCgpCiAKLSAgICBkZWYgdGVzdF9wYXRoX2Zyb21fd2Via2l0X2Jhc2Uoc2VsZiwgKmNvbXBzKToK
LSAgICAgICAgYyA9IGNvbmZpZy5Db25maWcoTm9uZSkKKyAgICBkZWYgdGVzdF9wYXRoX2Zyb21f
d2Via2l0X2Jhc2Uoc2VsZik6CisgICAgICAgICMgRklYTUU6IFdlIHVzZSBhIHJlYWwgZmlsZXN5
c3RlbSBoZXJlLiBTaG91bGQgdGhpcyBtb3ZlIHRvIGEKKyAgICAgICAgIyBtb2NrZWQgb25lPwor
ICAgICAgICBjID0gY29uZmlnLkNvbmZpZyhleGVjdXRpdmUuRXhlY3V0aXZlKCksIGZpbGVzeXN0
ZW0uRmlsZVN5c3RlbSgpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoYy5wYXRoX2Zyb21fd2Vi
a2l0X2Jhc2UoJ2ZvbycpKQogCiAgICAgZGVmIHRlc3Rfd2Via2l0X2Jhc2VfZGlyKHNlbGYpOgot
ICAgICAgICBjID0gY29uZmlnLkNvbmZpZyhOb25lKQorICAgICAgICAjIEZJWE1FOiBXZSB1c2Ug
YSByZWFsIGZpbGVzeXN0ZW0gaGVyZS4gU2hvdWxkIHRoaXMgbW92ZSB0byBhCisgICAgICAgICMg
bW9ja2VkIG9uZT8KKyAgICAgICAgYyA9IGNvbmZpZy5Db25maWcoZXhlY3V0aXZlLkV4ZWN1dGl2
ZSgpLCBmaWxlc3lzdGVtLkZpbGVTeXN0ZW0oKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMu
d2Via2l0X2Jhc2VfZGlyKCkpCiAKIApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9nb29nbGVfY2hyb21lX3VuaXR0ZXN0LnB5IGIvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9nb29nbGVfY2hyb21l
X3VuaXR0ZXN0LnB5CmluZGV4IGM0Yzg4NWQ2MzI5YWIzZDBiYmFmYWFlY2ExNzM0M2E0NjRlZTdh
MzUuLmU2MGMyNzQxNmRlYjM3OTM1ZjQwYjQ1MzU3Y2JkMjk3MWQyYzZlYTYgMTAwNjQ0Ci0tLSBh
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZ29vZ2xlX2No
cm9tZV91bml0dGVzdC5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L2dvb2dsZV9jaHJvbWVfdW5pdHRlc3QucHkKQEAgLTI4LDcgKzI4LDggQEAg
aW1wb3J0IGNvZGVjcwogaW1wb3J0IG9zCiBpbXBvcnQgdW5pdHRlc3QKIAotaW1wb3J0IGJhc2Vf
dW5pdHRlc3QKK2Zyb20gd2Via2l0cHkuY29tbW9uIGltcG9ydCBuZXdzdHJpbmdpbworCiBpbXBv
cnQgZmFjdG9yeQogaW1wb3J0IGdvb2dsZV9jaHJvbWUKIApAQCAtNzcsNyArNzgsNyBAQCBjbGFz
cyBHZXRHb29nbGVDaHJvbWVQb3J0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICAgICAg
ZGVmIG1vY2tfb3BlbihwYXRoLCBtb2RlLCBlbmNvZGluZyk6CiAgICAgICAgICAgICBpZiAndGVz
dF9leHBlY3RhdGlvbnNfY2hyb21lLnR4dCcgaW4gcGF0aDoKLSAgICAgICAgICAgICAgICByZXR1
cm4gYmFzZV91bml0dGVzdC5OZXdTdHJpbmdJTyhleHBlY3RlZF9zdHJpbmcpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIG5ld3N0cmluZ2lvLlN0cmluZ0lPKGV4cGVjdGVkX3N0cmluZykKICAgICAg
ICAgICAgIHJldHVybiBvcmlnX29wZW4ocGF0aCwgbW9kZSwgZW5jb2RpbmcpCiAKICAgICAgICAg
dHJ5OgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC93ZWJraXQucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L3dlYmtpdC5weQppbmRleCAwZDBkM2UwMDFiNzk5MzU3ZGI0OTU2NTFkY2E3NWI4
ZWQyN2FhODc5Li43MGU0NDBkZmE0NTQwZDAwZTI3ZDUzNmVmNDc3ZjVhOWVkZjBlM2ZjIDEwMDY0
NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dl
YmtpdC5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L3dlYmtpdC5weQpAQCAtODIsMTQgKzgyLDggQEAgY2xhc3MgV2ViS2l0UG9ydChiYXNlLlBv
cnQpOgogICAgICAgICByZXR1cm4gJycKIAogICAgIGRlZiBfYnVpbGRfZHJpdmVyKHNlbGYpOgot
ICAgICAgICBleGl0X2NvZGUgPSBzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1hbmQoWwotICAgICAg
ICAgICAgc2VsZi5zY3JpcHRfcGF0aCgiYnVpbGQtZHVtcHJlbmRlcnRyZWUiKSwKLSAgICAgICAg
ICAgIHNlbGYuZmxhZ19mcm9tX2NvbmZpZ3VyYXRpb24oc2VsZi5nZXRfb3B0aW9uKCdjb25maWd1
cmF0aW9uJykpLAotICAgICAgICBdLCByZXR1cm5fZXhpdF9jb2RlPVRydWUpCi0gICAgICAgIGlm
IGV4aXRfY29kZSAhPSAwOgotICAgICAgICAgICAgX2xvZy5lcnJvcigiRmFpbGVkIHRvIGJ1aWxk
IER1bXBSZW5kZXJUcmVlIikKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICByZXR1
cm4gVHJ1ZQorICAgICAgICBjb25maWd1cmF0aW9uID0gc2VsZi5nZXRfb3B0aW9uKCdjb25maWd1
cmF0aW9uJykKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NvbmZpZy5idWlsZF9kdW1wcmVuZGVydHJl
ZShjb25maWd1cmF0aW9uKQogCiAgICAgZGVmIF9jaGVja19kcml2ZXIoc2VsZik6CiAgICAgICAg
IGRyaXZlcl9wYXRoID0gc2VsZi5fcGF0aF90b19kcml2ZXIoKQpAQCAtMzU4LDEyICszNTIsOCBA
QCBjbGFzcyBXZWJLaXRQb3J0KGJhc2UuUG9ydCk6CiAgICAgICAgICAgICAnbWFjLXRpZ2VyJywg
J21hYy1sZW9wYXJkJywgJ21hYy1zbm93bGVvcGFyZCcpCiAKICAgICBkZWYgX2J1aWxkX3BhdGgo
c2VsZiwgKmNvbXBzKToKLSAgICAgICAgaWYgbm90IHNlbGYuX2NhY2hlZF9idWlsZF9yb290Ogot
ICAgICAgICAgICAgc2VsZi5fY2FjaGVkX2J1aWxkX3Jvb3QgPSBzZWxmLl93ZWJraXRfYnVpbGRf
ZGlyZWN0b3J5KFsKLSAgICAgICAgICAgICAgICAiLS1jb25maWd1cmF0aW9uIiwKLSAgICAgICAg
ICAgICAgICBzZWxmLmZsYWdfZnJvbV9jb25maWd1cmF0aW9uKHNlbGYuZ2V0X29wdGlvbignY29u
ZmlndXJhdGlvbicpKSwKLSAgICAgICAgICAgIF0pCi0gICAgICAgIHJldHVybiBvcy5wYXRoLmpv
aW4oc2VsZi5fY2FjaGVkX2J1aWxkX3Jvb3QsICpjb21wcykKKyAgICAgICAgcmV0dXJuIHNlbGYu
X2ZpbGVzeXN0ZW0uam9pbihzZWxmLl9jb25maWcuYnVpbGRfZGlyZWN0b3J5KAorICAgICAgICAg
ICAgc2VsZi5nZXRfb3B0aW9uKCdjb25maWd1cmF0aW9uJykpLCAqY29tcHMpCiAKICAgICBkZWYg
X3BhdGhfdG9fZHJpdmVyKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fYnVpbGRfcGF0aCgn
RHVtcFJlbmRlclRyZWUnKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS90b29sL21vY2t0b29sLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL21v
Y2t0b29sLnB5CmluZGV4IDA5NzA5MzA4YjkzZTRmYTA1MDgxYWJhZDExZWVhZWVlY2FiODg4ODQu
LmU3ZDM1MzFjMzJlMWI1Y2VkN2Y5Mzc1MjAxMTQ5YzY3NWJiYWYwOGIgMTAwNjQ0Ci0tLSBhL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9tb2NrdG9vbC5weQorKysgYi9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvbW9ja3Rvb2wucHkKQEAgLTU3Nyw2ICs1NzcsNyBA
QCBjbGFzcyBNb2NrU3RhdHVzU2VydmVyKG9iamVjdCk6CiAKIAogIyBGSVhNRTogVGhpcyBzaG91
bGQgbm90IGluaGVyaXQgZnJvbSBNb2NrCisjIEZJWE1FOiBVbmlmeSB3aXRoIGNvbW1vbi5zeXN0
ZW0uZXhlY3V0aXZlX21vY2suTW9ja0V4ZWN1dGl2ZS4KIGNsYXNzIE1vY2tFeGVjdXRlKE1vY2sp
OgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzaG91bGRfbG9nKToKICAgICAgICAgc2VsZi5fc2hv
dWxkX2xvZyA9IHNob3VsZF9sb2cK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73034</attachid>
            <date>2010-11-04 21:36:02 -0700</date>
            <delta_ts>2010-11-06 20:35:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-48280-20101104213601.patch</filename>
            <type>text/plain</type>
            <size>52766</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBlOGQzNGNiYWM4OTQ2MzhmMGM2N2I1YmM4MzUwMTZkMmY1Y2ExMDdiLi4xODM5YWY0
OWVmMzgyYmI5N2E0MWQxMTE0YWQ3YTEyYzA0OWMwNDkzIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzEgQEAK
KzIwMTAtMTAtMjUgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgbmV3LXJ1bi13ZWJraXQt
dGVzdHM6IHVwZGF0ZSBwb3J0L2Jhc2UgYW5kIHBvcnQvd2Via2l0IHRvIHVzZSB0aGUKKyAgICAg
ICAgbmV3IEZpbGVTeXN0ZW0gYW5kIENvbmZpZyBhYnN0cmFjdGlvbnMsIHB1bGxpbmcgbW9yZSBs
b2dpYyBvdXQgb2YKKyAgICAgICAgdGhlIGJhc2UgUG9ydCBjbGFzc2VzIGludG8gc2VwYXJhdGUs
IG1vY2thYmxlIG9iamVjdHMuCisKKyAgICAgICAgQWxzbyBjcmVhdGUgYSBNb2NrRmlsZVN5c3Rl
bSBvYmplY3QsIGEgTW9ja0NvbmZpZyBvYmplY3QsIG1vdmUKKyAgICAgICAgTW9ja0V4ZWN1dGl2
ZSBpbnRvIGNvbW1vbi9zeXN0ZW0gdG8gYmUgbmV4dCB0byBleGVjdXRpdmUsIGFuZAorICAgICAg
ICB1cGRhdGUgdGhlIGNvbmZpZyBvYmplY3QgdG8gdXNlIGEgRmlsZVN5c3RlbS4KKworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDgyODAKKworICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ld3N0cmluZ2lvLnB5OiBBZGRlZC4KKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXdzdHJpbmdpb191bml0dGVzdC5weTogQWRk
ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2ZV9t
b2NrLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0v
ZmlsZXN5c3RlbV9tb2NrLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L2Jhc2UucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9iYXNlX3VuaXR0ZXN0LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY29uZmlnLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY29uZmlnX21vY2sucHk6CisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jb25maWdfdW5pdHRlc3QucHk6CisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9nb29nbGVfY2hyb21lX3VuaXR0ZXN0
LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Via2l0
LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRf
dGVzdHNfdW5pdHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL21vY2t0
b29sLnB5OgorCiAyMDEwLTExLTA0ICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCmRpZmYgLS1naXQgYS9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXdzdHJpbmdpby5weSBiL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ld3N0cmluZ2lvLnB5Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY2ZDA4
ZWM1OTdiNjg1NjQ2ODU5MTU2OTY3NDE1Zjg3YzI3MDYwNDgKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXdzdHJpbmdpby5weQpAQCAtMCww
ICsxLDQwIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMg
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiIn
d2l0aCctY29tcGxpYW50IFN0cmluZ0lPIGltcGxlbWVudGF0aW9uLiIiIgorCitpbXBvcnQgU3Ry
aW5nSU8KKworCitjbGFzcyBTdHJpbmdJTyhTdHJpbmdJTy5TdHJpbmdJTyk6CisgICAgZGVmIF9f
ZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhz
ZWxmLCB0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKToKKyAgICAgICAgcGFzcwpkaWZmIC0tZ2l0IGEv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV3c3RyaW5naW9fdW5pdHRlc3Qu
cHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXdzdHJpbmdpb191bml0
dGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi41NzU1Yzk4MTQzZGQzNDg5YjZlMDUxZTNmOWQ5OTZlZDVmMDhi
ZDA5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vbmV3c3RyaW5naW9fdW5pdHRlc3QucHkKQEAgLTAsMCArMSw0NiBAQAorIyEvdXNyL2Jpbi9l
bnYgcHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlz
dHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiVW5pdCB0ZXN0cyBmb3IgbmV3c3RyaW5n
aW8gbW9kdWxlLiIiIgorCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHdpdGhfc3RhdGVtZW50CisK
K2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbmV3c3RyaW5naW8KKworCitjbGFzcyBOZXdTdHJp
bmdJT1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3dpdGgoc2VsZik6Cisg
ICAgICAgIHdpdGggbmV3c3RyaW5naW8uU3RyaW5nSU8oImZvbyIpIGFzIGY6CisgICAgICAgICAg
ICBjb250ZW50cyA9IGYucmVhZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29udGVudHMs
ICJmb28iKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4o
KQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVt
L2V4ZWN1dGl2ZV9tb2NrLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24v
c3lzdGVtL2V4ZWN1dGl2ZV9tb2NrLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMwNDdjNzFiN2RhMWEzYmU0ZWNi
Mjk5MjVmZjEzZGViYmY0NjM3OGMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlX21vY2sucHkKQEAgLTAsMCArMSw1
NSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRp
b24uCisjICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisj
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
IyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKKyMgRklYTUU6IEltcGxlbWVudCB0aGUgcmVzdCBvZiB0aGUg
aW50ZXJmYWNlIGFzIG5lZWRlZCBmb3IgdGVzdGluZyA6KS4KKworIyBGSVhNRTogVW5pZnkgd2l0
aCB0b29sL21vY2t0b29sLk1vY2tFeGVjdXRpdmUuCisKKworY2xhc3MgTW9ja0V4ZWN1dGl2ZShv
YmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvdXRwdXQ9JycsIGV4aXRfY29kZT0wLCBl
eGNlcHRpb249Tm9uZSk6CisgICAgICAgIHNlbGYuX291dHB1dCA9IG91dHB1dAorICAgICAgICBz
ZWxmLl9leGl0X2NvZGUgPSBleGl0X2NvZGUKKyAgICAgICAgc2VsZi5fZXhjZXB0aW9uID0gZXhj
ZXB0aW9uCisKKyAgICBkZWYgY3B1X2NvdW50KHNlbGYpOgorICAgICAgICByZXR1cm4gMgorCisg
ICAgZGVmIGtpbGxfYWxsKHNlbGYsIHByb2Nlc3NfbmFtZSk6CisgICAgICAgIHBhc3MKKworICAg
IGRlZiBraWxsX3Byb2Nlc3Moc2VsZiwgcGlkKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHJ1
bl9jb21tYW5kKHNlbGYsIGFyZ19saXN0LCByZXR1cm5fZXhpdF9jb2RlPUZhbHNlLAorICAgICAg
ICAgICAgICAgICAgICBkZWNvZGVfb3V0cHV0PUZhbHNlKToKKyAgICAgICAgaWYgc2VsZi5fZXhj
ZXB0aW9uOgorICAgICAgICAgICAgcmFpc2Ugc2VsZi5fZXhjZXB0aW9uCisgICAgICAgIGlmIHJl
dHVybl9leGl0X2NvZGU6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZXhpdF9jb2RlCisgICAg
ICAgIHJldHVybiBzZWxmLl9vdXRwdXQKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVtX21vY2sucHkgYi9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbV9tb2NrLnB5Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjU4NWZhMWYyYmM1ZmI0NDM1MTRlY2U5OGI5MjdkODQ3ZWUzMjFjZjYKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5
c3RlbV9tb2NrLnB5CkBAIC0wLDAgKzEsODEgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDA5IEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisjIG1ldDoKKyMKKyMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMg
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
IyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgcGF0
aAorCisKK2NsYXNzIE1vY2tGaWxlU3lzdGVtKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNl
bGYsIGZpbGVzPXt9KToKKyAgICAgICAgIiIiSW5pdGlhbGl6ZXMgYSAibW9jayIgZmlsZXN5c3Rl
bSB0aGF0IGNhbiBiZSB1c2VkIHRvIGNvbXBsZXRlbHkKKyAgICAgICAgc3R1YiBvdXQgYSBmaWxl
c3lzdGVtLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBmaWxlczogYSBkaWN0IG9mIGZp
bGVuYW1lcyAtPiBmaWxlIGNvbnRlbnRzLiBBIGZpbGUgY29udGVudHMKKyAgICAgICAgICAgICAg
ICB2YWx1ZSBvZiBOb25lIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgZmlsZSBzaG91bGQK
KyAgICAgICAgICAgICAgICBub3QgZXhpc3QgKGV2ZW4gaWYgc3RhbmRhbG9uZSBpcyBGYWxzZSku
CisgICAgICAgICAgICBzdGFuZGFsb25lOiBJZiBUcnVlLCBvbmx5IHRoZSBmaWxlcyBsaXN0ZWQg
aW4gX2ZpbGVzXyBleGlzdC4KKyAgICAgICAgICAgICAgICBJZiBGYWxzZSwgdGhlIG9iamVjdCB3
aWxsIHBhc3MgdGhyb3VnaCByZWFkIGNhbGxzIHRvIHRoZQorICAgICAgICAgICAgICAgIHVuZGVy
bHlpbmcgZmlsZXN5c3RlbS4gV3JpdGVzIGFyZSBuZXZlciBwYXNzZWQgdGhyb3VnaC4KKworICAg
ICAgICAiIiIKKyAgICAgICAgc2VsZi5maWxlcyA9IGZpbGVzCisKKyAgICBkZWYgZXhpc3RzKHNl
bGYsIHBhdGgpOgorICAgICAgICBpZiBwYXRoIGluIHNlbGYuZmlsZXM6CisgICAgICAgICAgICBy
ZXR1cm4gc2VsZi5maWxlc1twYXRoXSBpcyBub3QgTm9uZQorICAgICAgICByZXR1cm4gRmFsc2UK
KworICAgIGRlZiBpc2RpcihzZWxmLCBwYXRoKToKKyAgICAgICAgIyBGSVhNRTogSW1wbGVtZW50
IDopCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBqb2luKHNl
bGYsICpjb21wcyk6CisgICAgICAgIHJldHVybiAnLycuam9pbihjb21wcykKKworICAgIGRlZiBs
aXN0ZGlyKHNlbGYsIHBhdGgpOgorICAgICAgICAjIEZJWE1FOiBJbXBsZW1lbnQgOikKKyAgICAg
ICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIG1heWJlX21ha2VfZGlyZWN0
b3J5KHNlbGYsICpwYXRoKToKKyAgICAgICAgIyBGSVhNRTogSW1wbGVtZW50IHN1Y2ggdGhhdCBz
dWJzZXF1ZW50IGNhbGxzIHRvIGlzZGlyKCkgd29yaz8KKyAgICAgICAgcGFzcworCisgICAgZGVm
IHJlYWRfdGV4dF9maWxlKHNlbGYsIHBhdGgpOgorICAgICAgICByZXR1cm4gc2VsZi5yZWFkX2Jp
bmFyeV9maWxlKHBhdGgpCisKKyAgICBkZWYgcmVhZF9iaW5hcnlfZmlsZShzZWxmLCBwYXRoKToK
KyAgICAgICAgaWYgcGF0aCBpbiBzZWxmLmZpbGVzOgorICAgICAgICAgICAgaWYgc2VsZi5maWxl
c1twYXRoXSBpcyBOb25lOgorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoKQorICAgICAg
ICAgICAgcmV0dXJuIHNlbGYuZmlsZXNbcGF0aF0KKworICAgIGRlZiB3cml0ZV90ZXh0X2ZpbGUo
c2VsZiwgcGF0aCwgY29udGVudHMpOgorICAgICAgICByZXR1cm4gc2VsZi53cml0ZV9iaW5hcnlf
ZmlsZShwYXRoLCBjb250ZW50cykKKworICAgIGRlZiB3cml0ZV9iaW5hcnlfZmlsZShzZWxmLCBw
YXRoLCBjb250ZW50cyk6CisgICAgICAgIHNlbGYuZmlsZXNbcGF0aF0gPSBjb250ZW50cwpkaWZm
IC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9i
YXNlLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9i
YXNlLnB5CmluZGV4IGNkN2Q2NjM5MDM0MDRhNWQ1ZTA0ZDk2ODBmNzI4OGE5NWI1NGFiN2IuLjc4
MzlhMjNhOTljN2NhOWY1Nzg0MjcwY2VmZTlkMzQzMGM3NDM1ZTcgMTAwNjQ0Ci0tLSBhL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weQorKysgYi9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkKQEAg
LTMwLDEwICszMCw3IEBACiAiIiJBYnN0cmFjdCBiYXNlIGNsYXNzIG9mIFBvcnQtc3BlY2lmaWMg
ZW50cnlwb2ludHMgZm9yIHRoZSBsYXlvdXQgdGVzdHMKIHRlc3QgaW5mcmFzdHJ1Y3R1cmUgKHRo
ZSBQb3J0IGFuZCBEcml2ZXIgY2xhc3NlcykuIiIiCiAKLWZyb20gX19mdXR1cmVfXyBpbXBvcnQg
d2l0aF9zdGF0ZW1lbnQKLQogaW1wb3J0IGNnaQotaW1wb3J0IGNvZGVjcwogaW1wb3J0IGRpZmZs
aWIKIGltcG9ydCBlcnJubwogaW1wb3J0IG9zCkBAIC00MiwxNCArMzksMTYgQEAgaW1wb3J0IHN5
cwogaW1wb3J0IHRpbWUKIAogaW1wb3J0IGFwYWNoZV9odHRwX3NlcnZlcgoraW1wb3J0IGNvbmZp
ZwogaW1wb3J0IGh0dHBfbG9jawogaW1wb3J0IGh0dHBfc2VydmVyCiBpbXBvcnQgdGVzdF9maWxl
cwogaW1wb3J0IHdlYnNvY2tldF9zZXJ2ZXIKIAorZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVt
IGltcG9ydCBmaWxlc3lzdGVtCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IGxv
Z3V0aWxzCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IHBhdGgKIGZyb20gd2Vi
a2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0IEV4ZWN1dGl2ZSwgU2NyaXB0RXJy
b3IKLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5wYXRoIGltcG9ydCBhYnNwYXRoX3RvX3Vy
aQogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnVzZXIgaW1wb3J0IFVzZXIKIAogCkBAIC03
NywxNCArNzYsNiBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAgIiIiQWJzdHJhY3QgY2xhc3Mg
Zm9yIFBvcnQtc3BlY2lmaWMgaG9va3MgZm9yIHRoZSBsYXlvdXRfdGVzdCBwYWNrYWdlLgogICAg
ICIiIgogCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBmbGFnX2Zyb21fY29uZmlndXJhdGlv
bihjb25maWd1cmF0aW9uKToKLSAgICAgICAgZmxhZ3NfYnlfY29uZmlndXJhdGlvbiA9IHsKLSAg
ICAgICAgICAgICJEZWJ1ZyI6ICItLWRlYnVnIiwKLSAgICAgICAgICAgICJSZWxlYXNlIjogIi0t
cmVsZWFzZSIsCi0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZsYWdzX2J5X2NvbmZpZ3VyYXRp
b25bY29uZmlndXJhdGlvbl0KLQogICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqKmt3YXJncyk6CiAg
ICAgICAgIHNlbGYuX25hbWUgPSBrd2FyZ3MuZ2V0KCdwb3J0X25hbWUnLCBOb25lKQogICAgICAg
ICBzZWxmLl9vcHRpb25zID0ga3dhcmdzLmdldCgnb3B0aW9ucycpCkBAIC05NSw2ICs4Niw5IEBA
IGNsYXNzIFBvcnQob2JqZWN0KToKICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMgPSBEdW1teU9w
dGlvbnMoKQogICAgICAgICBzZWxmLl9leGVjdXRpdmUgPSBrd2FyZ3MuZ2V0KCdleGVjdXRpdmUn
LCBFeGVjdXRpdmUoKSkKICAgICAgICAgc2VsZi5fdXNlciA9IGt3YXJncy5nZXQoJ3VzZXInLCBV
c2VyKCkpCisgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0gPSBrd2FyZ3MuZ2V0KCdmaWxlc3lzdGVt
JywgZmlsZXN5c3RlbS5GaWxlU3lzdGVtKCkpCisgICAgICAgIHNlbGYuX2NvbmZpZyA9IGt3YXJn
cy5nZXQoJ2NvbmZpZycsIGNvbmZpZy5Db25maWcoc2VsZi5fZXhlY3V0aXZlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2Zp
bGVzeXN0ZW0pKQogICAgICAgICBzZWxmLl9oZWxwZXIgPSBOb25lCiAgICAgICAgIHNlbGYuX2h0
dHBfc2VydmVyID0gTm9uZQogICAgICAgICBzZWxmLl93ZWJraXRfYmFzZV9kaXIgPSBOb25lCkBA
IC0xMTcsNyArMTExLDcgQEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAgICAgICBzZWxmLl93ZGlm
Zl9hdmFpbGFibGUgPSBUcnVlCiAKICAgICAgICAgc2VsZi5fcHJldHR5X3BhdGNoX3BhdGggPSBz
ZWxmLnBhdGhfZnJvbV93ZWJraXRfYmFzZSgiQnVnc1NpdGUiLAotICAgICAgICAgICAgICAiUHJl
dHR5UGF0Y2giLCAicHJldHRpZnkucmIiKQorICAgICAgICAgICAgIlByZXR0eVBhdGNoIiwgInBy
ZXR0aWZ5LnJiIikKICAgICAgICAgc2VsZi5fcHJldHR5X3BhdGNoX2F2YWlsYWJsZSA9IFRydWUK
ICAgICAgICAgc2VsZi5zZXRfb3B0aW9uX2RlZmF1bHQoJ2NvbmZpZ3VyYXRpb24nLCBOb25lKQog
ICAgICAgICBpZiBzZWxmLl9vcHRpb25zLmNvbmZpZ3VyYXRpb24gaXMgTm9uZToKQEAgLTI2NCw3
ICsyNTgsOCBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAKICAgICAgICAgYmFzZWxpbmVzID0gW10K
ICAgICAgICAgZm9yIHBsYXRmb3JtX2RpciBpbiBiYXNlbGluZV9zZWFyY2hfcGF0aDoKLSAgICAg
ICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihwbGF0Zm9ybV9kaXIsIGJhc2Vs
aW5lX2ZpbGVuYW1lKSk6CisgICAgICAgICAgICBpZiBzZWxmLnBhdGhfZXhpc3RzKHNlbGYuX2Zp
bGVzeXN0ZW0uam9pbihwbGF0Zm9ybV9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlbGluZV9maWxlbmFtZSkpOgogICAgICAgICAg
ICAgICAgIGJhc2VsaW5lcy5hcHBlbmQoKHBsYXRmb3JtX2RpciwgYmFzZWxpbmVfZmlsZW5hbWUp
KQogCiAgICAgICAgICAgICBpZiBub3QgYWxsX2Jhc2VsaW5lcyBhbmQgYmFzZWxpbmVzOgpAQCAt
MjczLDcgKzI2OCw4IEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAgICAgICAgIyBJZiBpdCB3YXNu
J3QgZm91bmQgaW4gYSBwbGF0Zm9ybSBkaXJlY3RvcnksIHJldHVybiB0aGUgZXhwZWN0ZWQKICAg
ICAgICAgIyByZXN1bHQgaW4gdGhlIHRlc3QgZGlyZWN0b3J5LCBldmVuIGlmIG5vIHN1Y2ggZmls
ZSBhY3R1YWxseSBleGlzdHMuCiAgICAgICAgIHBsYXRmb3JtX2RpciA9IHNlbGYubGF5b3V0X3Rl
c3RzX2RpcigpCi0gICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihwbGF0Zm9y
bV9kaXIsIGJhc2VsaW5lX2ZpbGVuYW1lKSk6CisgICAgICAgIGlmIHNlbGYucGF0aF9leGlzdHMo
c2VsZi5fZmlsZXN5c3RlbS5qb2luKHBsYXRmb3JtX2RpciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZWxpbmVfZmlsZW5hbWUpKToKICAgICAg
ICAgICAgIGJhc2VsaW5lcy5hcHBlbmQoKHBsYXRmb3JtX2RpciwgYmFzZWxpbmVfZmlsZW5hbWUp
KQogCiAgICAgICAgIGlmIGJhc2VsaW5lczoKQEAgLTMwMywzNSArMjk5LDMyIEBAIGNsYXNzIFBv
cnQob2JqZWN0KToKICAgICAgICAgcGxhdGZvcm1fZGlyLCBiYXNlbGluZV9maWxlbmFtZSA9IHNl
bGYuZXhwZWN0ZWRfYmFzZWxpbmVzKAogICAgICAgICAgICAgZmlsZW5hbWUsIHN1ZmZpeClbMF0K
ICAgICAgICAgaWYgcGxhdGZvcm1fZGlyOgotICAgICAgICAgICAgcmV0dXJuIG9zLnBhdGguam9p
bihwbGF0Zm9ybV9kaXIsIGJhc2VsaW5lX2ZpbGVuYW1lKQotICAgICAgICByZXR1cm4gb3MucGF0
aC5qb2luKHNlbGYubGF5b3V0X3Rlc3RzX2RpcigpLCBiYXNlbGluZV9maWxlbmFtZSkKLQotICAg
IGRlZiBfZXhwZWN0ZWRfZmlsZV9jb250ZW50cyhzZWxmLCB0ZXN0LCBleHRlbnNpb24sIGVuY29k
aW5nKToKLSAgICAgICAgcGF0aCA9IHNlbGYuZXhwZWN0ZWRfZmlsZW5hbWUodGVzdCwgZXh0ZW5z
aW9uKQotICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocGF0aCk6Ci0gICAgICAgICAgICBy
ZXR1cm4gTm9uZQotICAgICAgICBvcGVuX21vZGUgPSAncicKLSAgICAgICAgaWYgZW5jb2Rpbmcg
aXMgTm9uZToKLSAgICAgICAgICAgIG9wZW5fbW9kZSA9ICdyK2InCi0gICAgICAgIHdpdGggY29k
ZWNzLm9wZW4ocGF0aCwgb3Blbl9tb2RlLCBlbmNvZGluZykgYXMgZmlsZToKLSAgICAgICAgICAg
IHJldHVybiBmaWxlLnJlYWQoKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVzeXN0ZW0u
am9pbihwbGF0Zm9ybV9kaXIsIGJhc2VsaW5lX2ZpbGVuYW1lKQorICAgICAgICByZXR1cm4gc2Vs
Zi5fZmlsZXN5c3RlbS5qb2luKHNlbGYubGF5b3V0X3Rlc3RzX2RpcigpLCBiYXNlbGluZV9maWxl
bmFtZSkKIAogICAgIGRlZiBleHBlY3RlZF9jaGVja3N1bShzZWxmLCB0ZXN0KToKICAgICAgICAg
IiIiUmV0dXJucyB0aGUgY2hlY2tzdW0gb2YgdGhlIGltYWdlIHdlIGV4cGVjdCB0aGUgdGVzdCB0
byBwcm9kdWNlLCBvciBOb25lIGlmIGl0IGlzIGEgdGV4dC1vbmx5IHRlc3QuIiIiCi0gICAgICAg
IHJldHVybiBzZWxmLl9leHBlY3RlZF9maWxlX2NvbnRlbnRzKHRlc3QsICcuY2hlY2tzdW0nLCAn
YXNjaWknKQorICAgICAgICBwYXRoID0gc2VsZi5leHBlY3RlZF9maWxlbmFtZSh0ZXN0LCAnLmNo
ZWNrc3VtJykKKyAgICAgICAgaWYgbm90IHNlbGYucGF0aF9leGlzdHMocGF0aCk6CisgICAgICAg
ICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gc2VsZi5fZmlsZXN5c3RlbS5yZWFkX3Rl
eHRfZmlsZShwYXRoKQogCiAgICAgZGVmIGV4cGVjdGVkX2ltYWdlKHNlbGYsIHRlc3QpOgogICAg
ICAgICAiIiJSZXR1cm5zIHRoZSBpbWFnZSB3ZSBleHBlY3QgdGhlIHRlc3QgdG8gcHJvZHVjZS4i
IiIKLSAgICAgICAgcmV0dXJuIHNlbGYuX2V4cGVjdGVkX2ZpbGVfY29udGVudHModGVzdCwgJy5w
bmcnLCBOb25lKQorICAgICAgICBwYXRoID0gc2VsZi5leHBlY3RlZF9maWxlbmFtZSh0ZXN0LCAn
LnBuZycpCisgICAgICAgIGlmIG5vdCBzZWxmLnBhdGhfZXhpc3RzKHBhdGgpOgorICAgICAgICAg
ICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVzeXN0ZW0ucmVhZF9iaW5h
cnlfZmlsZShwYXRoKQogCiAgICAgZGVmIGV4cGVjdGVkX3RleHQoc2VsZiwgdGVzdCk6CiAgICAg
ICAgICIiIlJldHVybnMgdGhlIHRleHQgb3V0cHV0IHdlIGV4cGVjdCB0aGUgdGVzdCB0byBwcm9k
dWNlLiIiIgotICAgICAgICAjIE5PVEU6IC1leHBlY3RlZC50eHQgZmlsZXMgYXJlIEFMV0FZUyB1
dGYtOC4gIEhvd2V2ZXIsCi0gICAgICAgICMgd2UgZG8gbm90IGRlY29kZSB0aGUgb3V0cHV0IGZy
b20gRFJULCBzbyB3ZSBzaG91bGQgbm90Ci0gICAgICAgICMgZGVjb2RlIHRoZSAtZXhwZWN0ZWQu
dHh0IHZhbHVlcyBlaXRoZXIgdG8gYWxsb3cgY29tcGFyaXNvbnMuCi0gICAgICAgIHRleHQgPSBz
ZWxmLl9leHBlY3RlZF9maWxlX2NvbnRlbnRzKHRlc3QsICcudHh0JywgTm9uZSkKLSAgICAgICAg
aWYgbm90IHRleHQ6CisgICAgICAgICMgRklYTUU6IERSVCBvdXRwdXQgaXMgYWN0dWFsbHkgdXRm
LTgsIGJ1dCBzaW5jZSB3ZSBkb24ndCBkZWNvZGUgdGhlCisgICAgICAgICMgb3V0cHV0IGZyb20g
RFJUIChpbnN0ZWFkIHRyZWF0aW5nIGl0IGFzIGEgYmluYXJ5IHN0cmluZyksIHdlIHJlYWQgdGhl
CisgICAgICAgICMgYmFzZWxpbmVzIGFzIGEgYmluYXJ5IHN0cmluZywgdG9vLgorICAgICAgICBw
YXRoID0gc2VsZi5leHBlY3RlZF9maWxlbmFtZSh0ZXN0LCAnLnRleHQnKQorICAgICAgICBpZiBu
b3Qgc2VsZi5wYXRoX2V4aXN0cyhwYXRoKToKICAgICAgICAgICAgIHJldHVybiAnJworICAgICAg
ICB0ZXh0ID0gc2VsZi5fZmlsZXN5c3RlbS5yZWFkX2JpbmFyeV9maWxlKHBhdGgpCiAgICAgICAg
IHJldHVybiB0ZXh0LnN0cmlwKCJcclxuIikucmVwbGFjZSgiXHJcbiIsICJcbiIpICsgIlxuIgog
CiAgICAgZGVmIGZpbGVuYW1lX3RvX3VyaShzZWxmLCBmaWxlbmFtZSk6CkBAIC0zNjEsNyArMzU0
LDcgQEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAgICAgICAgICAgICAgIHByb3RvY29sID0gImh0
dHAiCiAgICAgICAgICAgICByZXR1cm4gIiVzOi8vMTI3LjAuMC4xOiV1LyVzIiAlIChwcm90b2Nv
bCwgcG9ydCwgcmVsYXRpdmVfcGF0aCkKIAotICAgICAgICByZXR1cm4gYWJzcGF0aF90b191cmko
b3MucGF0aC5hYnNwYXRoKGZpbGVuYW1lKSkKKyAgICAgICAgcmV0dXJuIHBhdGguYWJzcGF0aF90
b191cmkob3MucGF0aC5hYnNwYXRoKGZpbGVuYW1lKSkKIAogICAgIGRlZiB0ZXN0cyhzZWxmLCBw
YXRocyk6CiAgICAgICAgICIiIlJldHVybiB0aGUgbGlzdCBvZiB0ZXN0cyBmb3VuZCAocmVsYXRp
dmUgdG8gbGF5b3V0X3Rlc3RzX2RpcigpLiIiIgpAQCAtMzcyLDIwICszNjUsMTkgQEAgY2xhc3Mg
UG9ydChvYmplY3QpOgogCiAgICAgICAgIFVzZWQgYnkgLS1jbG9iYmVyLW9sZC1yZXN1bHRzLiIi
IgogICAgICAgICBsYXlvdXRfdGVzdHNfZGlyID0gc2VsZi5sYXlvdXRfdGVzdHNfZGlyKCkKLSAg
ICAgICAgcmV0dXJuIGZpbHRlcihsYW1iZGEgeDogb3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4o
bGF5b3V0X3Rlc3RzX2RpciwgeCkpLAotICAgICAgICAgICAgICAgICAgICAgIG9zLmxpc3RkaXIo
bGF5b3V0X3Rlc3RzX2RpcikpCisgICAgICAgIHJldHVybiBmaWx0ZXIobGFtYmRhIHg6IHNlbGYu
X2ZpbGVzeXN0ZW0uaXNkaXIoc2VsZi5fZmlsZXN5c3RlbS5qb2luKGxheW91dF90ZXN0c19kaXIs
IHgpKSwKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxlc3lzdGVtLmxpc3RkaXIobGF5
b3V0X3Rlc3RzX2RpcikpCiAKICAgICBkZWYgcGF0aF9pc2RpcihzZWxmLCBwYXRoKToKLSAgICAg
ICAgIiIiUmV0dXJucyB3aGV0aGVyIHRoZSBwYXRoIHJlZmVycyB0byBhIGRpcmVjdG9yeSBvZiB0
ZXN0cy4KLQotICAgICAgICBVc2VkIGJ5IHRlc3RfZXhwZWN0YXRpb25zLnB5IHRvIGFwcGx5IHJ1
bGVzIHRvIHdob2xlIGRpcmVjdG9yaWVzLiIiIgotICAgICAgICByZXR1cm4gb3MucGF0aC5pc2Rp
cihwYXRoKQorICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGUgcGF0aCByZWZlcnMgdG8gYSBk
aXJlY3Rvcnkgb2YgdGVzdHMuIiIiCisgICAgICAgICMgVXNlZCBieSB0ZXN0X2V4cGVjdGF0aW9u
cy5weSB0byBhcHBseSBydWxlcyB0byB3aG9sZSBkaXJlY3Rvcmllcy4KKyAgICAgICAgcmV0dXJu
IHNlbGYuX2ZpbGVzeXN0ZW0uaXNkaXIocGF0aCkKIAogICAgIGRlZiBwYXRoX2V4aXN0cyhzZWxm
LCBwYXRoKToKLSAgICAgICAgIiIiUmV0dXJucyB3aGV0aGVyIHRoZSBwYXRoIHJlZmVycyB0byBh
biBleGlzdGluZyB0ZXN0IG9yIGJhc2VsaW5lLiIiIgorICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBp
ZiB0aGUgcGF0aCByZWZlcnMgdG8gYW4gZXhpc3RpbmcgdGVzdCBvciBiYXNlbGluZS4iIiIKICAg
ICAgICAgIyBVc2VkIGJ5IHRlc3RfZXhwZWN0YXRpb25zLnB5IHRvIGRldGVybWluZSBpZiBhbiBl
bnRyeSByZWZlcnMgdG8gYQotICAgICAgICAjIHZhbGlkIHRlc3QgYW5kIGJ5IHByaW50aW5nLnB5
IHRvIGRldGVybWluZSBpZiBiYXNlbGluZXMgZXhpc3QuIiIiCi0gICAgICAgIHJldHVybiBvcy5w
YXRoLmV4aXN0cyhwYXRoKQorICAgICAgICAjIHZhbGlkIHRlc3QgYW5kIGJ5IHByaW50aW5nLnB5
IHRvIGRldGVybWluZSBpZiBiYXNlbGluZXMgZXhpc3QuCisgICAgICAgIHJldHVybiBzZWxmLl9m
aWxlc3lzdGVtLmV4aXN0cyhwYXRoKQogCiAgICAgZGVmIHVwZGF0ZV9iYXNlbGluZShzZWxmLCBw
YXRoLCBkYXRhLCBlbmNvZGluZyk6CiAgICAgICAgICIiIlVwZGF0ZXMgdGhlIGJhc2VsaW5lIGZv
ciBhIHRlc3QuCkBAIC0zOTcsMTEgKzM4OSwxMiBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAg
ICAgICAgICBkYXRhOiBjb250ZW50cyBvZiB0aGUgYmFzZWxpbmUuCiAgICAgICAgICAgICBlbmNv
ZGluZzogZmlsZSBlbmNvZGluZyB0byB1c2UgZm9yIHRoZSBiYXNlbGluZS4KICAgICAgICAgIiIi
Ci0gICAgICAgIHdyaXRlX21vZGUgPSAidyIKKyAgICAgICAgIyBGSVhNRTogcmVtb3ZlIHRoZSBl
bmNvZGluZyBwYXJhbWV0ZXIgaW4gZmF2b3Igb2YgdGV4dC9iaW5hcnkKKyAgICAgICAgIyBmdW5j
dGlvbnMuCiAgICAgICAgIGlmIGVuY29kaW5nIGlzIE5vbmU6Ci0gICAgICAgICAgICB3cml0ZV9t
b2RlID0gIndiIgotICAgICAgICB3aXRoIGNvZGVjcy5vcGVuKHBhdGgsIHdyaXRlX21vZGUsIGVu
Y29kaW5nPWVuY29kaW5nKSBhcyBmaWxlOgotICAgICAgICAgICAgZmlsZS53cml0ZShkYXRhKQor
ICAgICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS53cml0ZV9iaW5hcnlfZmlsZShwYXRoLCBkYXRh
KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS53cml0ZV90ZXh0
X2ZpbGUocGF0aCwgZGF0YSkKIAogICAgIGRlZiB1cmlfdG9fdGVzdF9uYW1lKHNlbGYsIHVyaSk6
CiAgICAgICAgICIiIlJldHVybiB0aGUgYmFzZSBsYXlvdXQgdGVzdCBuYW1lIGZvciBhIGdpdmVu
IFVSSS4KQEAgLTQxMyw3ICs0MDYsNyBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAgICAgICIi
IgogICAgICAgICB0ZXN0ID0gdXJpCiAgICAgICAgIGlmIHVyaS5zdGFydHN3aXRoKCJmaWxlOi8v
LyIpOgotICAgICAgICAgICAgcHJlZml4ID0gYWJzcGF0aF90b191cmkoc2VsZi5sYXlvdXRfdGVz
dHNfZGlyKCkpICsgIi8iCisgICAgICAgICAgICBwcmVmaXggPSBwYXRoLmFic3BhdGhfdG9fdXJp
KHNlbGYubGF5b3V0X3Rlc3RzX2RpcigpKSArICIvIgogICAgICAgICAgICAgcmV0dXJuIHRlc3Rb
bGVuKHByZWZpeCk6XQogCiAgICAgICAgIGlmIHVyaS5zdGFydHN3aXRoKCJodHRwOi8vMTI3LjAu
MC4xOjg4ODAvIik6CkBAIC00NDAsMTggKzQzMywxNiBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAg
ICAgICAgIGZvciB0ZXN0X29yX2NhdGVnb3J5IGluIHNlbGYuc2tpcHBlZF9sYXlvdXRfdGVzdHMo
KToKICAgICAgICAgICAgIGlmIHRlc3Rfb3JfY2F0ZWdvcnkgPT0gdGVzdF9uYW1lOgogICAgICAg
ICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgICAgICBjYXRlZ29yeSA9IG9zLnBhdGguam9p
bihzZWxmLmxheW91dF90ZXN0c19kaXIoKSwgdGVzdF9vcl9jYXRlZ29yeSkKLSAgICAgICAgICAg
IGlmIG9zLnBhdGguaXNkaXIoY2F0ZWdvcnkpIGFuZCB0ZXN0X25hbWUuc3RhcnRzd2l0aCh0ZXN0
X29yX2NhdGVnb3J5KToKKyAgICAgICAgICAgIGNhdGVnb3J5ID0gc2VsZi5fZmlsZXN5c3RlbS5q
b2luKHNlbGYubGF5b3V0X3Rlc3RzX2RpcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGVzdF9vcl9jYXRlZ29yeSkKKyAgICAgICAgICAgIGlmIChzZWxm
Ll9maWxlc3lzdGVtLmlzZGlyKGNhdGVnb3J5KSBhbmQKKyAgICAgICAgICAgICAgICB0ZXN0X25h
bWUuc3RhcnRzd2l0aCh0ZXN0X29yX2NhdGVnb3J5KSk6CiAgICAgICAgICAgICAgICAgcmV0dXJu
IFRydWUKICAgICAgICAgcmV0dXJuIEZhbHNlCiAKICAgICBkZWYgbWF5YmVfbWFrZV9kaXJlY3Rv
cnkoc2VsZiwgKnBhdGgpOgogICAgICAgICAiIiJDcmVhdGVzIHRoZSBzcGVjaWZpZWQgZGlyZWN0
b3J5IGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdC4iIiIKLSAgICAgICAgdHJ5OgotICAgICAg
ICAgICAgb3MubWFrZWRpcnMob3MucGF0aC5qb2luKCpwYXRoKSkKLSAgICAgICAgZXhjZXB0IE9T
RXJyb3IsIGU6Ci0gICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVFWElTVDoKLSAgICAg
ICAgICAgICAgICByYWlzZQorICAgICAgICBzZWxmLl9maWxlc3lzdGVtLm1heWJlX21ha2VfZGly
ZWN0b3J5KCpwYXRoKQogCiAgICAgZGVmIG5hbWUoc2VsZik6CiAgICAgICAgICIiIlJldHVybiB0
aGUgbmFtZSBvZiB0aGUgcG9ydCAoZS5nLiwgJ21hYycsICdjaHJvbWl1bS13aW4teHAnKS4KQEAg
LTQ3MiwxOSArNDYzLDEzIEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAgICAgICAgaWYgbm90IGhh
c2F0dHIoc2VsZi5fb3B0aW9ucywgbmFtZSk6CiAgICAgICAgICAgICByZXR1cm4gc2V0YXR0cihz
ZWxmLl9vcHRpb25zLCBuYW1lLCBkZWZhdWx0X3ZhbHVlKQogCi0gICAgIyBGSVhNRTogVGhpcyBj
b3VsZCBiZSByZXBsYWNlZCBieSBmdW5jdGlvbnMgaW4gd2Via2l0cHkuY29tbW9uLmNoZWNrb3V0
LnNjbS4KICAgICBkZWYgcGF0aF9mcm9tX3dlYmtpdF9iYXNlKHNlbGYsICpjb21wcyk6CiAgICAg
ICAgICIiIlJldHVybnMgdGhlIGZ1bGwgcGF0aCB0byBwYXRoIG1hZGUgYnkgam9pbmluZyB0aGUg
dG9wIG9mIHRoZQogICAgICAgICBXZWJLaXQgc291cmNlIHRyZWUgYW5kIHRoZSBsaXN0IG9mIHBh
dGggY29tcG9uZW50cyBpbiB8KmNvbXBzfC4iIiIKLSAgICAgICAgaWYgbm90IHNlbGYuX3dlYmtp
dF9iYXNlX2RpcjoKLSAgICAgICAgICAgIGFic3BhdGggPSBvcy5wYXRoLmFic3BhdGgoX19maWxl
X18pCi0gICAgICAgICAgICBzZWxmLl93ZWJraXRfYmFzZV9kaXIgPSBhYnNwYXRoWzA6YWJzcGF0
aC5maW5kKCdXZWJLaXRUb29scycpXQotCi0gICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2Vs
Zi5fd2Via2l0X2Jhc2VfZGlyLCAqY29tcHMpCisgICAgICAgIHJldHVybiBzZWxmLl9jb25maWcu
cGF0aF9mcm9tX3dlYmtpdF9iYXNlKCpjb21wcykKIAotICAgICMgRklYTUU6IENhbGxlcnMgc2hv
dWxkIGV2ZW50dWFsbHkgbW92ZSB0byBzY20uc2NyaXB0X3BhdGguCiAgICAgZGVmIHNjcmlwdF9w
YXRoKHNlbGYsIHNjcmlwdF9uYW1lKToKLSAgICAgICAgcmV0dXJuIHNlbGYucGF0aF9mcm9tX3dl
YmtpdF9iYXNlKCJXZWJLaXRUb29scyIsICJTY3JpcHRzIiwgc2NyaXB0X25hbWUpCisgICAgICAg
IHJldHVybiBzZWxmLl9jb25maWcuc2NyaXB0X3BhdGgoc2NyaXB0X25hbWUpCiAKICAgICBkZWYg
cGF0aF90b190ZXN0X2V4cGVjdGF0aW9uc19maWxlKHNlbGYpOgogICAgICAgICAiIiJVcGRhdGUg
dGhlIHRlc3QgZXhwZWN0YXRpb25zIHRvIHRoZSBwYXNzZWQtaW4gc3RyaW5nLgpAQCAtNzI1LDM4
ICs3MTAsOCBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAgICAgICAgICAgICAgICAgICAgIGUu
bWVzc2FnZV93aXRoX291dHB1dCgpKSkKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9wcmV0dHlf
cGF0Y2hfZXJyb3JfaHRtbAogCi0gICAgZGVmIF93ZWJraXRfYnVpbGRfZGlyZWN0b3J5KHNlbGYs
IGFyZ3MpOgotICAgICAgICBhcmdzID0gWyJwZXJsIiwgc2VsZi5zY3JpcHRfcGF0aCgid2Via2l0
LWJ1aWxkLWRpcmVjdG9yeSIpXSArIGFyZ3MKLSAgICAgICAgcmV0dXJuIHNlbGYuX2V4ZWN1dGl2
ZS5ydW5fY29tbWFuZChhcmdzKS5yc3RyaXAoKQotCi0gICAgZGVmIF9jb25maWd1cmF0aW9uX2Zp
bGVfcGF0aChzZWxmKToKLSAgICAgICAgYnVpbGRfcm9vdCA9IHNlbGYuX3dlYmtpdF9idWlsZF9k
aXJlY3RvcnkoWyItLXRvcC1sZXZlbCJdKQotICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKGJ1
aWxkX3Jvb3QsICJDb25maWd1cmF0aW9uIikKLQotICAgICMgRWFzeSBvdmVycmlkZSBmb3IgdW5p
dCB0ZXN0cwotICAgIGRlZiBfb3Blbl9jb25maWd1cmF0aW9uX2ZpbGUoc2VsZik6Ci0gICAgICAg
IGNvbmZpZ3VyYXRpb25fcGF0aCA9IHNlbGYuX2NvbmZpZ3VyYXRpb25fZmlsZV9wYXRoKCkKLSAg
ICAgICAgcmV0dXJuIGNvZGVjcy5vcGVuKGNvbmZpZ3VyYXRpb25fcGF0aCwgInIiLCAidXRmLTgi
KQotCi0gICAgZGVmIF9yZWFkX2NvbmZpZ3VyYXRpb24oc2VsZik6Ci0gICAgICAgIHRyeToKLSAg
ICAgICAgICAgIHdpdGggc2VsZi5fb3Blbl9jb25maWd1cmF0aW9uX2ZpbGUoKSBhcyBmaWxlOgot
ICAgICAgICAgICAgICAgIHJldHVybiBmaWxlLnJlYWRsaW5lKCkucnN0cmlwKCkKLSAgICAgICAg
ZXhjZXB0OgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgICMgRklYTUU6IFRoaXMgbGlz
dCBtYXkgYmUgaW5jb21wbGV0ZSBhcyBBcHBsZSBoYXMgc29tZSBzZWtyZXQgY29uZmlncy4KLSAg
ICBfUkVDT0dOSVpFRF9DT05GSUdVUkFUSU9OUyA9ICgiRGVidWciLCAiUmVsZWFzZSIpCi0KICAg
ICBkZWYgZGVmYXVsdF9jb25maWd1cmF0aW9uKHNlbGYpOgotICAgICAgICAjIEZJWE1FOiBVbmlm
eSB0aGlzIHdpdGggd2Via2l0ZGlyLnBtIGNvbmZpZ3VyYXRpb24gcmVhZGluZyBjb2RlLgotICAg
ICAgICBjb25maWd1cmF0aW9uID0gc2VsZi5fcmVhZF9jb25maWd1cmF0aW9uKCkKLSAgICAgICAg
aWYgbm90IGNvbmZpZ3VyYXRpb246Ci0gICAgICAgICAgICBjb25maWd1cmF0aW9uID0gIlJlbGVh
c2UiCi0gICAgICAgIGlmIGNvbmZpZ3VyYXRpb24gbm90IGluIHNlbGYuX1JFQ09HTklaRURfQ09O
RklHVVJBVElPTlM6Ci0gICAgICAgICAgICBfbG9nLndhcm4oIkNvbmZpZ3VyYXRpb24gXCIlc1wi
IGZvdW5kIGluICVzIGlzIG5vdCBhIHJlY29nbml6ZWQgdmFsdWUuXG4iICUgKGNvbmZpZ3VyYXRp
b24sIHNlbGYuX2NvbmZpZ3VyYXRpb25fZmlsZV9wYXRoKCkpKQotICAgICAgICAgICAgX2xvZy53
YXJuKCJTY3JpcHRzIG1heSBmYWlsLiAgU2VlICdzZXQtd2Via2l0LWNvbmZpZ3VyYXRpb24gLS1o
ZWxwJy4iKQotICAgICAgICByZXR1cm4gY29uZmlndXJhdGlvbgorICAgICAgICByZXR1cm4gc2Vs
Zi5fY29uZmlnLmRlZmF1bHRfY29uZmlndXJhdGlvbigpCiAKICAgICAjCiAgICAgIyBQUk9URUNU
RUQgUk9VVElORVMKQEAgLTc2NCw2ICs3MTksOCBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAg
IyBUaGUgcm91dGluZXMgYmVsb3cgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IHJvdXRpbmVzIGlu
IHRoaXMgY2xhc3MKICAgICAjIG9yIGFueSBvZiBpdHMgc3ViY2xhc3Nlcy4KICAgICAjCisgICAg
ZGVmIF93ZWJraXRfYnVpbGRfZGlyZWN0b3J5KHNlbGYsIGFyZ3MpOgorICAgICAgICByZXR1cm4g
c2VsZi5fY29uZmlnLmJ1aWxkX2RpcmVjdG9yeShhcmdzWzBdKQogCiAgICAgZGVmIF9wYXRoX3Rv
X2FwYWNoZShzZWxmKToKICAgICAgICAgIiIiUmV0dXJucyB0aGUgZnVsbCBwYXRoIHRvIHRoZSBh
cGFjaGUgYmluYXJ5LgpAQCAtODM1LDggKzc5Miw4IEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAg
ICBkZWYgX3dlYmtpdF9iYXNlbGluZV9wYXRoKHNlbGYsIHBsYXRmb3JtKToKICAgICAgICAgIiIi
UmV0dXJuIHRoZSAgZnVsbCBwYXRoIHRvIHRoZSB0b3Agb2YgdGhlIGJhc2VsaW5lIHRyZWUgZm9y
IGEKICAgICAgICAgZ2l2ZW4gcGxhdGZvcm0uIiIiCi0gICAgICAgIHJldHVybiBvcy5wYXRoLmpv
aW4oc2VsZi5sYXlvdXRfdGVzdHNfZGlyKCksICdwbGF0Zm9ybScsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGxhdGZvcm0pCisgICAgICAgIHJldHVybiBzZWxmLl9maWxlc3lzdGVtLmpv
aW4oc2VsZi5sYXlvdXRfdGVzdHNfZGlyKCksICdwbGF0Zm9ybScsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm0pCiAKIAogY2xhc3MgRHJpdmVyOgpkaWZmIC0t
Z2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNl
X3VuaXR0ZXN0LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC9iYXNlX3VuaXR0ZXN0LnB5CmluZGV4IGVlODY4ZTgwZjNhYTBkNjg1NDQ0YjNmMzdkY2Vj
MTU1NThkYWVmMzYuLjg1ZWM1YjhlOTIzNzVjNDRkNWNmNmFmYjVlODg4YmI0YzY5NmViYjggMTAw
NjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
YmFzZV91bml0dGVzdC5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L2Jhc2VfdW5pdHRlc3QucHkKQEAgLTI4LDQ5ICsyOCwyMSBAQAogCiBpbXBv
cnQgb3B0cGFyc2UKIGltcG9ydCBvcwotaW1wb3J0IFN0cmluZ0lPCiBpbXBvcnQgc3lzCiBpbXBv
cnQgdGVtcGZpbGUKIGltcG9ydCB1bml0dGVzdAogCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0
ZW0ucGF0aCBpbXBvcnQgYWJzcGF0aF90b191cmkKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3Rl
bS5leGVjdXRpdmUgaW1wb3J0IEV4ZWN1dGl2ZSwgU2NyaXB0RXJyb3IKK2Zyb20gd2Via2l0cHku
Y29tbW9uLnN5c3RlbSBpbXBvcnQgZXhlY3V0aXZlX21vY2sKK2Zyb20gd2Via2l0cHkuY29tbW9u
LnN5c3RlbSBpbXBvcnQgZmlsZXN5c3RlbQorZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGlt
cG9ydCBvdXRwdXRjYXB0dXJlCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ucGF0aCBpbXBv
cnQgYWJzcGF0aF90b191cmkKIGZyb20gd2Via2l0cHkudGhpcmRwYXJ0eS5tb2NrIGltcG9ydCBN
b2NrCiBmcm9tIHdlYmtpdHB5LnRvb2wgaW1wb3J0IG1vY2t0b29sCiAKIGltcG9ydCBiYXNlCi0K
LSMgRklYTUU6IFRoaXMgbWFrZXMgU3RyaW5nSU8gb2JqZWN0cyB3b3JrIHdpdGggIndpdGgiLiBS
ZW1vdmUKLSMgd2hlbiB3ZSB1cGdyYWRlIHRvIDIuNi4KLWNsYXNzIE5ld1N0cmluZ0lPKFN0cmlu
Z0lPLlN0cmluZ0lPKToKLSAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4g
c2VsZgotCi0gICAgZGVmIF9fZXhpdF9fKHNlbGYsIHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spOgot
ICAgICAgICBwYXNzCi0KLQotY2xhc3MgTW9ja0V4ZWN1dGl2ZSgpOgotICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBleGNlcHRpb24pOgotICAgICAgICBzZWxmLl9leGNlcHRpb24gPSBleGNlcHRpb24K
LQotICAgIGRlZiBydW5fY29tbWFuZChzZWxmLCAqYXJncywgKiprd2FyZ3MpOgotICAgICAgICBy
YWlzZSBzZWxmLl9leGNlcHRpb24KLQotCi1jbGFzcyBVbml0VGVzdFBvcnQoYmFzZS5Qb3J0KToK
LSAgICAiIiJTdWJjbGFzcyBvZiBiYXNlLlBvcnQgdXNlZCBmb3IgdW5pdCB0ZXN0aW5nLiIiIgot
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25maWd1cmF0aW9uX2NvbnRlbnRzPU5vbmUsIGNvbmZp
Z3VyYXRpb25fZXhjZXB0aW9uPUlPRXJyb3IsIGV4ZWN1dGl2ZV9leGNlcHRpb249Tm9uZSk6Ci0g
ICAgICAgIGJhc2UuUG9ydC5fX2luaXRfXyhzZWxmKQotICAgICAgICBzZWxmLl9jb25maWd1cmF0
aW9uX2NvbnRlbnRzID0gY29uZmlndXJhdGlvbl9jb250ZW50cwotICAgICAgICBzZWxmLl9jb25m
aWd1cmF0aW9uX2V4Y2VwdGlvbiA9IGNvbmZpZ3VyYXRpb25fZXhjZXB0aW9uCi0gICAgICAgIGlm
IGV4ZWN1dGl2ZV9leGNlcHRpb246Ci0gICAgICAgICAgICBzZWxmLl9leGVjdXRpdmUgPSBNb2Nr
RXhlY3V0aXZlKGV4ZWN1dGl2ZV9leGNlcHRpb24pCi0KLSAgICBkZWYgX29wZW5fY29uZmlndXJh
dGlvbl9maWxlKHNlbGYpOgotICAgICAgICBpZiBzZWxmLl9jb25maWd1cmF0aW9uX2NvbnRlbnRz
OgotICAgICAgICAgICAgcmV0dXJuIE5ld1N0cmluZ0lPKHNlbGYuX2NvbmZpZ3VyYXRpb25fY29u
dGVudHMpCi0gICAgICAgIHJhaXNlIHNlbGYuX2NvbmZpZ3VyYXRpb25fZXhjZXB0aW9uCitpbXBv
cnQgY29uZmlnCitpbXBvcnQgY29uZmlnX21vY2sKIAogCiBjbGFzcyBQb3J0VGVzdCh1bml0dGVz
dC5UZXN0Q2FzZSk6CkBAIC0xMDIsMTggKzc0LDIxIEBAIGNsYXNzIFBvcnRUZXN0KHVuaXR0ZXN0
LlRlc3RDYXNlKToKICAgICAgICAgcmV0dXJuIG5ld19maWxlCiAKICAgICBkZWYgdGVzdF9wcmV0
dHlfcGF0Y2hfb3NfZXJyb3Ioc2VsZik6Ci0gICAgICAgIHBvcnQgPSBVbml0VGVzdFBvcnQoZXhl
Y3V0aXZlX2V4Y2VwdGlvbj1PU0Vycm9yKQorICAgICAgICBwb3J0ID0gYmFzZS5Qb3J0KGV4ZWN1
dGl2ZT1leGVjdXRpdmVfbW9jay5Nb2NrRXhlY3V0aXZlKGV4Y2VwdGlvbj1PU0Vycm9yKSkKKyAg
ICAgICAgb2MgPSBvdXRwdXRjYXB0dXJlLk91dHB1dENhcHR1cmUoKQorICAgICAgICBvYy5jYXB0
dXJlX291dHB1dCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9ydC5wcmV0dHlfcGF0Y2hf
dGV4dCgicGF0Y2gudHh0IiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydC5fcHJldHR5
X3BhdGNoX2Vycm9yX2h0bWwpCiAKICAgICAgICAgIyBUaGlzIHRlc3RzIHJlcGVhdGVkIGNhbGxz
IHRvIG1ha2Ugc3VyZSB3ZSBjYWNoZSB0aGUgcmVzdWx0LgogICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKHBvcnQucHJldHR5X3BhdGNoX3RleHQoInBhdGNoLnR4dCIpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgIHBvcnQuX3ByZXR0eV9wYXRjaF9lcnJvcl9odG1sKQorICAgICAgICBvYy5yZXN0
b3JlX291dHB1dCgpCiAKICAgICBkZWYgdGVzdF9wcmV0dHlfcGF0Y2hfc2NyaXB0X2Vycm9yKHNl
bGYpOgogICAgICAgICAjIEZJWE1FOiBUaGlzIGlzIHNvbWUgdWdseSB3aGl0ZS1ib3ggdGVzdCBo
YWNraW5nIC4uLgogICAgICAgICBiYXNlLl9wcmV0dHlfcGF0Y2hfYXZhaWxhYmxlID0gVHJ1ZQot
ICAgICAgICBwb3J0ID0gVW5pdFRlc3RQb3J0KGV4ZWN1dGl2ZV9leGNlcHRpb249U2NyaXB0RXJy
b3IpCisgICAgICAgIHBvcnQgPSBiYXNlLlBvcnQoZXhlY3V0aXZlPWV4ZWN1dGl2ZV9tb2NrLk1v
Y2tFeGVjdXRpdmUoZXhjZXB0aW9uPVNjcmlwdEVycm9yKSkKICAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChwb3J0LnByZXR0eV9wYXRjaF90ZXh0KCJwYXRjaC50eHQiKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICBwb3J0Ll9wcmV0dHlfcGF0Y2hfZXJyb3JfaHRtbCkKIApAQCAtMTk0LDEzICsx
NjksOSBAQCBjbGFzcyBQb3J0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHNlbGYu
YXNzZXJ0RmFsc2UoJ25vc3VjaHRoaW5nJyBpbiBkaWZmKQogCiAgICAgZGVmIHRlc3RfZGVmYXVs
dF9jb25maWd1cmF0aW9uX25vdGZvdW5kKHNlbGYpOgotICAgICAgICAjIFJlZ3VsYXIgSU9FcnJv
ciB0aHJvd24gd2hpbGUgdHJ5aW5nIHRvIGdldCB0aGUgY29uZmlndXJhdGlvbi4KLSAgICAgICAg
cG9ydCA9IFVuaXRUZXN0UG9ydCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9ydC5kZWZh
dWx0X2NvbmZpZ3VyYXRpb24oKSwgIlJlbGVhc2UiKQotCi0gICAgICAgICMgTW9yZSBleG90aWMg
T1NFcnJvciB0aHJvd24uCi0gICAgICAgIHBvcnQgPSBVbml0VGVzdFBvcnQoY29uZmlndXJhdGlv
bl9leGNlcHRpb249T1NFcnJvcikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0LmRlZmF1
bHRfY29uZmlndXJhdGlvbigpLCAiUmVsZWFzZSIpCisgICAgICAgICMgVGVzdCB0aGF0IHdlIGRl
bGVnYXRlIHRvIHRoZSBjb25maWcgb2JqZWN0IHByb3Blcmx5LgorICAgICAgICBwb3J0ID0gYmFz
ZS5Qb3J0KGNvbmZpZz1jb25maWdfbW9jay5Nb2NrQ29uZmlnKGRlZmF1bHRfY29uZmlndXJhdGlv
bj0nZGVmYXVsdCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQuZGVmYXVsdF9jb25m
aWd1cmF0aW9uKCksICdkZWZhdWx0JykKIAogICAgIGRlZiB0ZXN0X2xheW91dF90ZXN0c19za2lw
cGluZyhzZWxmKToKICAgICAgICAgcG9ydCA9IGJhc2UuUG9ydCgpCkBAIC0yMDksMTQgKzE4MCw2
IEBAIGNsYXNzIFBvcnRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgc2VsZi5hc3Nl
cnRUcnVlKHBvcnQuc2tpcHNfbGF5b3V0X3Rlc3QoJ21lZGlhL3ZpZGVvLXpvb20uaHRtbCcpKQog
ICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBvcnQuc2tpcHNfbGF5b3V0X3Rlc3QoJ2Zvby9mb28u
aHRtbCcpKQogCi0gICAgZGVmIHRlc3RfZGVmYXVsdF9jb25maWd1cmF0aW9uX2ZvdW5kKHNlbGYp
OgotICAgICAgICBwb3J0ID0gVW5pdFRlc3RQb3J0KGNvbmZpZ3VyYXRpb25fY29udGVudHM9IkRl
YnVnIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0LmRlZmF1bHRfY29uZmlndXJhdGlv
bigpLCAiRGVidWciKQotCi0gICAgZGVmIHRlc3RfZGVmYXVsdF9jb25maWd1cmF0aW9uX3Vua25v
d24oc2VsZik6Ci0gICAgICAgIHBvcnQgPSBVbml0VGVzdFBvcnQoY29uZmlndXJhdGlvbl9jb250
ZW50cz0id2VpcmRfdmFsdWUiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQuZGVmYXVs
dF9jb25maWd1cmF0aW9uKCksICJ3ZWlyZF92YWx1ZSIpCi0KICAgICBkZWYgdGVzdF9zZXR1cF90
ZXN0X3J1bihzZWxmKToKICAgICAgICAgcG9ydCA9IGJhc2UuUG9ydCgpCiAgICAgICAgICMgVGhp
cyByb3V0aW5lIGlzIGEgbm8tb3AuIFdlIGp1c3QgdGVzdCBpdCBmb3IgY292ZXJhZ2UuCkBAIC0y
MjksNyArMTkyLDYgQEAgY2xhc3MgUG9ydFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAg
ICBzZWxmLmFzc2VydFRydWUoJ2NzczIuMScgaW4gZGlycykKIAogICAgIGRlZiB0ZXN0X2ZpbGVu
YW1lX3RvX3VyaShzZWxmKToKLQogICAgICAgICBwb3J0ID0gYmFzZS5Qb3J0KCkKICAgICAgICAg
bGF5b3V0X3Rlc3RfZGlyID0gcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkKICAgICAgICAgdGVzdF9m
aWxlID0gb3MucGF0aC5qb2luKGxheW91dF90ZXN0X2RpciwgImZvbyIsICJiYXIuaHRtbCIpCmRp
ZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2NvbmZpZy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvY29uZmlnLnB5CmluZGV4IDIzNjQwOTg2OWIyNjA4OTgwYjU1YWEwOWZiMDRlNTNjYzRlOWI2
MjMuLjUwMTRmMTg0YTkzNTA4M2ZkZTE5Y2RmM2M4MzJkNDFlNDI4ZWI2YmQgMTAwNjQ0Ci0tLSBh
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY29uZmlnLnB5
CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY29u
ZmlnLnB5CkBAIC0zMiwxMSArMzIsNiBAQAogIyBGSVhNRTogVGhpcyBmaWxlIG5lZWRzIHRvIGJl
IHVuaWZpZWQgd2l0aCBjb21tb24vY2hlY2tvdXQvc2NtLnB5IGFuZAogIyBjb21tb24vY29uZmln
L3BvcnRzLnB5IC4KIAotZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudAotCi1p
bXBvcnQgY29kZWNzCi1pbXBvcnQgb3MKLQogZnJvbSB3ZWJraXRweS5jb21tb24uY2hlY2tvdXQg
aW1wb3J0IHNjbQogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBsb2d1dGlscwog
CkBAIC02Miw4ICs1Nyw5IEBAIGNsYXNzIENvbmZpZyhvYmplY3QpOgogICAgICAgICAiUmVsZWFz
ZSI6ICItLXJlbGVhc2UiLAogICAgIH0KIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleGVjdXRp
dmUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleGVjdXRpdmUsIGZpbGVzeXN0ZW0pOgogICAg
ICAgICBzZWxmLl9leGVjdXRpdmUgPSBleGVjdXRpdmUKKyAgICAgICAgc2VsZi5fZmlsZXN5c3Rl
bSA9IGZpbGVzeXN0ZW0KICAgICAgICAgc2VsZi5fd2Via2l0X2Jhc2VfZGlyID0gTm9uZQogICAg
ICAgICBzZWxmLl9kZWZhdWx0X2NvbmZpZ3VyYXRpb24gPSBOb25lCiAgICAgICAgIHNlbGYuX2J1
aWxkX2RpcmVjdG9yaWVzID0ge30KQEAgLTg4LDcgKzg0LDkgQEAgY2xhc3MgQ29uZmlnKG9iamVj
dCk6CiAgICAgZGVmIGJ1aWxkX2R1bXByZW5kZXJ0cmVlKHNlbGYsIGNvbmZpZ3VyYXRpb24pOgog
ICAgICAgICAiIiJCdWlsZHMgRFJUIGluIHRoZSBnaXZlbiBjb25maWd1cmF0aW9uLgogCi0gICAg
ICAgIFJldHVybnMgVHJ1ZSBpZiB0aGUgIGJ1aWxkIHdhcyBzdWNjZXNzZnVsIGFuZCB1cC10by1k
YXRlLiIiIgorICAgICAgICBlZCl0dXJucyB3aGV0aGVyIGJ1aWxkIHdhcyBzdWNjZXNzZnVsIG9y
IGlzIHVwLXRvLWRhdGUuCisKKyAgICAgICAgIiIiCiAgICAgICAgIGZsYWcgPSBzZWxmLl9GTEFH
U19GUk9NX0NPTkZJR1VSQVRJT05TW2NvbmZpZ3VyYXRpb25dCiAgICAgICAgIGV4aXRfY29kZSA9
IHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbCiAgICAgICAgICAgICBzZWxmLl9zY3JpcHRf
cGF0aCgiYnVpbGQtZHVtcHJlbmRlcnRyZWUiKSwgZmxhZ10sCkBAIC0xMDIsNyArMTAwLDkgQEAg
Y2xhc3MgQ29uZmlnKG9iamVjdCk6CiAgICAgICAgICIiIlJldHVybnMgdGhlIGRlZmF1bHQgY29u
ZmlndXJhdGlvbiBmb3IgdGhlIHVzZXIuCiAKICAgICAgICAgUmV0dXJucyB0aGUgdmFsdWUgc2V0
IGJ5ICdzZXQtd2Via2l0LWNvbmZpZ3VyYXRpb24nLCBvciAiUmVsZWFzZSIKLSAgICAgICAgaWYg
dGhhdCBoYXMgbm90IGJlZW4gc2V0LiBUaGlzIG1pcnJvcnMgdGhlIGxvZ2ljIGluIHdlYmtpdGRp
cnMucG0uIiIiCisgICAgICAgIGlmIHRoYXQgaGFzIG5vdCBiZWVuIHNldC4gVGhpcyBtaXJyb3Jz
IHRoZSBsb2dpYyBpbiB3ZWJraXRkaXJzLnBtLgorCisgICAgICAgICIiIgogICAgICAgICBpZiBu
b3Qgc2VsZi5fZGVmYXVsdF9jb25maWd1cmF0aW9uOgogICAgICAgICAgICAgc2VsZi5fZGVmYXVs
dF9jb25maWd1cmF0aW9uID0gc2VsZi5fZGV0ZXJtaW5lX2NvbmZpZ3VyYXRpb24oKQogICAgICAg
ICBpZiBub3Qgc2VsZi5fZGVmYXVsdF9jb25maWd1cmF0aW9uOgpAQCAtMTE1LDEyICsxMTUsMTQg
QEAgY2xhc3MgQ29uZmlnKG9iamVjdCk6CiAgICAgICAgIHJldHVybiBzZWxmLl9kZWZhdWx0X2Nv
bmZpZ3VyYXRpb24KIAogICAgIGRlZiBwYXRoX2Zyb21fd2Via2l0X2Jhc2Uoc2VsZiwgKmNvbXBz
KToKLSAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLndlYmtpdF9iYXNlX2RpcigpLCAq
Y29tcHMpCisgICAgICAgIHJldHVybiBzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi53ZWJraXRf
YmFzZV9kaXIoKSwgKmNvbXBzKQogCiAgICAgZGVmIHdlYmtpdF9iYXNlX2RpcihzZWxmKToKICAg
ICAgICAgIiIiUmV0dXJucyB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgdG9wIG9mIHRoZSBXZWJL
aXQgdHJlZS4KIAotICAgICAgICBSYWlzZXMgYW4gQXNzZXJ0aW9uRXJyb3IgaWYgdGhlIHRvcCBk
aXIgY2FuJ3QgYmUgZGV0ZXJtaW5lZC4iIiIKKyAgICAgICAgUmFpc2VzIGFuIEFzc2VydGlvbkVy
cm9yIGlmIHRoZSB0b3AgZGlyIGNhbid0IGJlIGRldGVybWluZWQuCisKKyAgICAgICAgIiIiCiAg
ICAgICAgICMgRklYTUU6IENvbnNpZGVyIGRldGVybWluaW5nIHRoaXMgaW5kZXBlbmRlbnRseSBv
ZiBzY20gaW4gb3JkZXIKICAgICAgICAgIyB0byBiZSBhYmxlIHRvIHJ1biBpbiBhIGJhcmUgdHJl
ZS4KICAgICAgICAgaWYgbm90IHNlbGYuX3dlYmtpdF9iYXNlX2RpcjoKQEAgLTEyOSw4ICsxMzEs
OCBAQCBjbGFzcyBDb25maWcob2JqZWN0KToKICAgICAgICAgcmV0dXJuIHNlbGYuX3dlYmtpdF9i
YXNlX2RpcgogCiAgICAgZGVmIF9zY3JpcHRfcGF0aChzZWxmLCBzY3JpcHRfbmFtZSk6Ci0gICAg
ICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi53ZWJraXRfYmFzZV9kaXIoKSwgIldlYktpdFRv
b2xzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2NyaXB0cyIsIHNjcmlwdF9uYW1l
KQorICAgICAgICByZXR1cm4gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYud2Via2l0X2Jhc2Vf
ZGlyKCksICJXZWJLaXRUb29scyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIlNjcmlwdHMiLCBzY3JpcHRfbmFtZSkKIAogICAgIGRlZiBfZGV0ZXJtaW5lX2NvbmZpZ3Vy
YXRpb24oc2VsZik6CiAgICAgICAgICMgVGhpcyBtaXJyb3JzIHRoZSBsb2dpYyBpbiB3ZWJraXRk
aXJzLnBtOmRldGVybWluZUNvbmZpZ3VyYXRpb24oKS4KQEAgLTE0NSwxMCArMTQ3LDkgQEAgY2xh
c3MgQ29uZmlnKG9iamVjdCk6CiAgICAgICAgIHJldHVybiBfZGV0ZXJtaW5lZF9jb25maWd1cmF0
aW9uCiAKICAgICBkZWYgX3JlYWRfY29uZmlndXJhdGlvbihzZWxmKToKLSAgICAgICAgY29uZmln
dXJhdGlvbl9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRfZGlyZWN0b3J5KE5vbmUpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbmZpZ3VyYXRpb24i
KQotICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoY29uZmlndXJhdGlvbl9wYXRoKToKKyAg
ICAgICAgY29uZmlndXJhdGlvbl9wYXRoID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYuYnVp
bGRfZGlyZWN0b3J5KE5vbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIkNvbmZpZ3VyYXRpb24iKQorICAgICAgICBpZiBub3Qgc2VsZi5fZmls
ZXN5c3RlbS5leGlzdHMoY29uZmlndXJhdGlvbl9wYXRoKToKICAgICAgICAgICAgIHJldHVybiBO
b25lCiAKLSAgICAgICAgd2l0aCBjb2RlY3Mub3Blbihjb25maWd1cmF0aW9uX3BhdGgsICJyIiwg
InV0Zi04IikgYXMgZmg6Ci0gICAgICAgICAgICByZXR1cm4gZmgucmVhZCgpLnJzdHJpcCgpCisg
ICAgICAgIHJldHVybiBzZWxmLl9maWxlc3lzdGVtLnJlYWRfdGV4dF9maWxlKGNvbmZpZ3VyYXRp
b25fcGF0aCkucnN0cmlwKCkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY29uZmlnX21vY2sucHkgYi9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2NvbmZpZ19tb2NrLnB5Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFm
NzFmYTMzMjU1MGNmNmZlYjZhY2JhYTJkNjM4YTY5NWZhNjUwNDYKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2NvbmZpZ19t
b2NrLnB5CkBAIC0wLDAgKzEsNTAgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisj
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisKKyIiIldyYXBwZXIgb2JqZWN0cyBmb3IgV2ViS2l0LXNwZWNpZmljIHV0aWxpdHkg
cm91dGluZXMuIiIiCisKKworY2xhc3MgTW9ja0NvbmZpZyhvYmplY3QpOgorICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBkZWZhdWx0X2NvbmZpZ3VyYXRpb249J1JlbGVhc2UnKToKKyAgICAgICAgc2Vs
Zi5fZGVmYXVsdF9jb25maWd1cmF0aW9uID0gZGVmYXVsdF9jb25maWd1cmF0aW9uCisKKyAgICBk
ZWYgYnVpbGRfZGlyZWN0b3J5KHNlbGYsIGNvbmZpZ3VyYXRpb24pOgorICAgICAgICByZXR1cm4g
Ii9idWlsZCIKKworICAgIGRlZiBidWlsZF9kdW1wcmVuZGVydHJlZShzZWxmLCBjb25maWd1cmF0
aW9uKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBkZWZhdWx0X2NvbmZpZ3VyYXRp
b24oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9kZWZhdWx0X2NvbmZpZ3VyYXRpb24KKwor
ICAgIGRlZiBwYXRoX2Zyb21fd2Via2l0X2Jhc2Uoc2VsZiwgKmNvbXBzKToKKyAgICAgICAgcmV0
dXJuICIvIiArICIvIi5qb2luKGxpc3QoY29tcHMpKQorCisgICAgZGVmIHdlYmtpdF9iYXNlX2Rp
cihzZWxmKToKKyAgICAgICAgcmV0dXJuICIvIgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jb25maWdfdW5pdHRlc3QucHkgYi9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2NvbmZpZ191bml0dGVz
dC5weQppbmRleCA0Njc0Y2JhMzYwZjJhZWJjM2EzOWQxODMxZWY3ZGQzYjYyYmIyMDgyLi5hMjY4
ZjhkYzY0N2U4MTA4MGU5ZTBiNDA5NTUzNjQ5ZDk1ZjEzOWVmIDEwMDY0NAotLS0gYS9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2NvbmZpZ191bml0dGVzdC5w
eQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nv
bmZpZ191bml0dGVzdC5weQpAQCAtMjYsMTQ5ICsyNiwxMDggQEAKICMgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAj
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCiAKLWltcG9ydCBjb2RlY3MKLWltcG9ydCBvcwotaW1wb3J0IFN0cmluZ0lP
CiBpbXBvcnQgdW5pdHRlc3QKIAorZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBl
eGVjdXRpdmUKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgZXhlY3V0aXZlX21v
Y2sKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgZmlsZXN5c3RlbQorZnJvbSB3
ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBmaWxlc3lzdGVtX21vY2sKIGZyb20gd2Via2l0
cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgb3V0cHV0Y2FwdHVyZQogCiBpbXBvcnQgY29uZmlnCiAK
LQotIyBGSVhNRTogVGhpcyBtYWtlcyBTdHJpbmdJTyBvYmplY3RzIHdvcmsgd2l0aCAid2l0aCIu
IFJlbW92ZQotIyB3aGVuIHdlIHVwZ3JhZGUgdG8gMi42LgotY2xhc3MgTmV3U3RyaW5nSU8oU3Ry
aW5nSU8uU3RyaW5nSU8pOgotICAgIGRlZiBfX2VudGVyX18oc2VsZik6Ci0gICAgICAgIHJldHVy
biBzZWxmCi0KLSAgICBkZWYgX19leGl0X18oc2VsZiwgdHlwZSwgdmFsdWUsIHRyYWNlYmFjayk6
Ci0gICAgICAgIHBhc3MKLQotCi1jbGFzcyBNb2NrRXhlY3V0aXZlKG9iamVjdCk6Ci0gICAgZGVm
IF9faW5pdF9fKHNlbGYsIG91dHB1dD0nJywgZXhpdF9jb2RlPTApOgotICAgICAgICBzZWxmLl9v
dXRwdXQgPSBvdXRwdXQKLSAgICAgICAgc2VsZi5fZXhpdF9jb2RlID0gZXhpdF9jb2RlCi0KLSAg
ICBkZWYgcnVuX2NvbW1hbmQoc2VsZiwgYXJnX2xpc3QsIHJldHVybl9leGl0X2NvZGU9RmFsc2Us
Ci0gICAgICAgICAgICAgICAgICAgIGRlY29kZV9vdXRwdXQ9RmFsc2UpOgotICAgICAgICBpZiBy
ZXR1cm5fZXhpdF9jb2RlOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2V4aXRfY29kZQotICAg
ICAgICByZXR1cm4gc2VsZi5fb3V0cHV0Ci0KLQogY2xhc3MgQ29uZmlnVGVzdCh1bml0dGVzdC5U
ZXN0Q2FzZSk6CiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICBjb25maWcuY2xlYXJf
Y2FjaGVkX2NvbmZpZ3VyYXRpb24oKQogCi0gICAgZGVmIGFzc2VydENvbmZpZ3VyYXRpb24oc2Vs
ZiwgY29udGVudHMsIGV4cGVjdGVkKToKKyAgICBkZWYgbWFrZV9jb25maWcoc2VsZiwgb3V0cHV0
PScnLCBmaWxlcz17fSwgZXhpdF9jb2RlPTApOgorICAgICAgICBlID0gZXhlY3V0aXZlX21vY2su
TW9ja0V4ZWN1dGl2ZShvdXRwdXQ9b3V0cHV0LCBleGl0X2NvZGU9ZXhpdF9jb2RlKQorICAgICAg
ICBmcyA9IGZpbGVzeXN0ZW1fbW9jay5Nb2NrRmlsZVN5c3RlbShmaWxlcykKKyAgICAgICAgcmV0
dXJuIGNvbmZpZy5Db25maWcoZSwgZnMpCisKKyAgICBkZWYgYXNzZXJ0X2NvbmZpZ3VyYXRpb24o
c2VsZiwgY29udGVudHMsIGV4cGVjdGVkKToKICAgICAgICAgIyBUaGlzIHRlc3RzIHRoYXQgYSBj
b25maWd1cmF0aW9uIGZpbGUgY29udGFpbmluZwogICAgICAgICAjIF9jb250ZW50c18gZW5kc2Qg
dXAgYmVpbmcgaW50ZXJwcmV0ZWQgYXMgX2V4cGVjdGVkXy4KLSAgICAgICAgIwotICAgICAgICAj
IEZJWE1FOiByZXdyaXRlIHRoaXMgd2hlbiB3ZSBoYXZlIGEgZmlsZXN5c3RlbSBhYnN0cmFjdGlv
biB3ZQotICAgICAgICAjIGNhbiBtb2NrIG91dCBtb3JlIGVhc2lseS4KLSAgICAgICAgY29uZmln
LmNsZWFyX2NhY2hlZF9jb25maWd1cmF0aW9uKCkKLSAgICAgICAgb3JpZ19vcGVuID0gY29kZWNz
Lm9wZW4KLQotICAgICAgICBkZWYgd3JhcF9vcGVuKGNvbnRlbnRzKToKLSAgICAgICAgICAgIGRl
ZiBvcGVuX3dyYXBwZXIocGF0aCwgbW9kZSwgZW5jb2RpbmcpOgotICAgICAgICAgICAgICAgIHJl
dHVybiBOZXdTdHJpbmdJTyhjb250ZW50cykKLSAgICAgICAgICAgIHJldHVybiBvcGVuX3dyYXBw
ZXIKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvcmlnX2V4aXN0cyA9IG9zLnBhdGguZXhp
c3RzCi0gICAgICAgICAgICBvcy5wYXRoLmV4aXN0cyA9IGxhbWJkYSBwOiBUcnVlCi0gICAgICAg
ICAgICBjb2RlY3Mub3BlbiA9IHdyYXBfb3Blbihjb250ZW50cykKLQotICAgICAgICAgICAgZSA9
IE1vY2tFeGVjdXRpdmUob3V0cHV0PSdmb28nKQotICAgICAgICAgICAgYyA9IGNvbmZpZy5Db25m
aWcoZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5kZWZhdWx0X2NvbmZpZ3VyYXRp
b24oKSwgZXhwZWN0ZWQpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBvcy5wYXRoLmV4
aXN0cyA9IG9yaWdfZXhpc3RzCi0gICAgICAgICAgICBjb2RlY3Mub3BlbiA9IG9yaWdfb3Blbgor
ICAgICAgICBjID0gc2VsZi5tYWtlX2NvbmZpZygnZm9vJywgeydmb28vQ29uZmlndXJhdGlvbic6
IGNvbnRlbnRzfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmRlZmF1bHRfY29uZmlndXJh
dGlvbigpLCBleHBlY3RlZCkKIAogICAgIGRlZiB0ZXN0X2J1aWxkX2RpcmVjdG9yeV90b3BsZXZl
bChzZWxmKToKLSAgICAgICAgZSA9IE1vY2tFeGVjdXRpdmUob3V0cHV0PSJ0b3BsZXZlbCIpCi0g
ICAgICAgIGMgPSBjb25maWcuQ29uZmlnKGUpCisgICAgICAgIGMgPSBzZWxmLm1ha2VfY29uZmln
KCd0b3BsZXZlbCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5idWlsZF9kaXJlY3Rvcnko
Tm9uZSksICd0b3BsZXZlbCcpCiAKICAgICAgICAgIyBUZXN0IGFnYWluIHRvIGNoZWNrIGNhY2hp
bmcKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmJ1aWxkX2RpcmVjdG9yeShOb25lKSwgJ3Rv
cGxldmVsJykKIAogICAgIGRlZiB0ZXN0X2J1aWxkX2RpcmVjdG9yeV9fcmVsZWFzZShzZWxmKToK
LSAgICAgICAgZSA9IE1vY2tFeGVjdXRpdmUob3V0cHV0PSJyZWxlYXNlIikKLSAgICAgICAgYyA9
IGNvbmZpZy5Db25maWcoZSkKKyAgICAgICAgYyA9IHNlbGYubWFrZV9jb25maWcoJ3JlbGVhc2Un
KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuYnVpbGRfZGlyZWN0b3J5KCdSZWxlYXNlJyks
ICdyZWxlYXNlJykKIAogICAgIGRlZiB0ZXN0X2J1aWxkX2RpcmVjdG9yeV9fZGVidWcoc2VsZik6
Ci0gICAgICAgIGUgPSBNb2NrRXhlY3V0aXZlKG91dHB1dD0iZGVidWciKQotICAgICAgICBjID0g
Y29uZmlnLkNvbmZpZyhlKQorICAgICAgICBjID0gc2VsZi5tYWtlX2NvbmZpZygnZGVidWcnKQog
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuYnVpbGRfZGlyZWN0b3J5KCdEZWJ1ZycpLCAnZGVi
dWcnKQogCiAgICAgZGVmIHRlc3RfYnVpbGRfZGlyZWN0b3J5X191bmtub3duKHNlbGYpOgotICAg
ICAgICBlID0gTW9ja0V4ZWN1dGl2ZShvdXRwdXQ9InVua25vd24iKQotICAgICAgICBjID0gY29u
ZmlnLkNvbmZpZyhlKQorICAgICAgICBjID0gc2VsZi5tYWtlX2NvbmZpZygidW5rbm93biIpCiAg
ICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBjLmJ1aWxkX2RpcmVjdG9yeSwgJ1Vu
a25vd24nKQogCiAgICAgZGVmIHRlc3RfYnVpbGRfZHVtcHJlbmRlcnRyZWVfX3N1Y2Nlc3Moc2Vs
Zik6Ci0gICAgICAgIGUgPSBNb2NrRXhlY3V0aXZlKGV4aXRfY29kZT0wKQotICAgICAgICBjID0g
Y29uZmlnLkNvbmZpZyhlKQorICAgICAgICBjID0gc2VsZi5tYWtlX2NvbmZpZyhleGl0X2NvZGU9
MCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMuYnVpbGRfZHVtcHJlbmRlcnRyZWUoIkRlYnVn
IikpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjLmJ1aWxkX2R1bXByZW5kZXJ0cmVlKCJSZWxl
YXNlIikpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBjLmJ1aWxkX2R1bXBy
ZW5kZXJ0cmVlLCAiVW5rbm93biIpCiAKICAgICBkZWYgdGVzdF9idWlsZF9kdW1wcmVuZGVydHJl
ZV9fZmFpbHVyZShzZWxmKToKLSAgICAgICAgZSA9IE1vY2tFeGVjdXRpdmUoZXhpdF9jb2RlPS0x
KQotICAgICAgICBjID0gY29uZmlnLkNvbmZpZyhlKQorICAgICAgICBjID0gc2VsZi5tYWtlX2Nv
bmZpZyhleGl0X2NvZGU9LTEpCiAKKyAgICAgICAgIyBGSVhNRTogQnVpbGQgZmFpbHVyZXMgc2hv
dWxkIGxvZyBlcnJvcnMuIEhvd2V2ZXIsIHRoZSBtZXNzYWdlIHdlCisgICAgICAgICMgZ2V0IGRl
cGVuZHMgb24gaG93IHdlJ3JlIGJlaW5nIGNhbGxlZDsgYXMgYSBzdGFuZGFsb25lIHRlc3QsCisg
ICAgICAgICMgd2UnbGwgZ2V0IHRoZSAibm8gaGFuZGxlcnMgZm91bmQiIG1lc3NhZ2UuIEFzIHBh
cnQgb2YKKyAgICAgICAgIyB0ZXN0LXdlYmtpdHB5LCB3ZSBnZXQgdGhlIGFjdHVhbCBtZXNzYWdl
LiBSZWFsbHksIHdlIG5lZWQKKyAgICAgICAgIyBvdXRwdXRjYXB0dXJlIHRvIGluc3RhbGwgaXRz
IG93biBoYW5kbGVyLgogICAgICAgICBvYyA9IG91dHB1dGNhcHR1cmUuT3V0cHV0Q2FwdHVyZSgp
CiAgICAgICAgIG9jLmNhcHR1cmVfb3V0cHV0KCkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShj
LmJ1aWxkX2R1bXByZW5kZXJ0cmVlKCdEZWJ1ZycpKQotICAgICAgICAob3V0LCBlcnIpID0gb2Mu
cmVzdG9yZV9vdXRwdXQoKQorICAgICAgICBvYy5yZXN0b3JlX291dHB1dCgpCiAKICAgICAgICAg
b2MuY2FwdHVyZV9vdXRwdXQoKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGMuYnVpbGRfZHVt
cHJlbmRlcnRyZWUoJ1JlbGVhc2UnKSkKICAgICAgICAgb2MucmVzdG9yZV9vdXRwdXQoKQogCiAg
ICAgZGVmIHRlc3RfZGVmYXVsdF9jb25maWd1cmF0aW9uX19yZWxlYXNlKHNlbGYpOgotICAgICAg
ICBzZWxmLmFzc2VydENvbmZpZ3VyYXRpb24oJ1JlbGVhc2UnLCAnUmVsZWFzZScpCisgICAgICAg
IHNlbGYuYXNzZXJ0X2NvbmZpZ3VyYXRpb24oJ1JlbGVhc2UnLCAnUmVsZWFzZScpCiAKICAgICBk
ZWYgdGVzdF9kZWZhdWx0X2NvbmZpZ3VyYXRpb25fX2RlYnVnKHNlbGYpOgotICAgICAgICBzZWxm
LmFzc2VydENvbmZpZ3VyYXRpb24oJ0RlYnVnJywgJ0RlYnVnJykKKyAgICAgICAgc2VsZi5hc3Nl
cnRfY29uZmlndXJhdGlvbignRGVidWcnLCAnRGVidWcnKQogCiAgICAgZGVmIHRlc3RfZGVmYXVs
dF9jb25maWd1cmF0aW9uX19kZXBsb3ltZW50KHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydENv
bmZpZ3VyYXRpb24oJ0RlcGxveW1lbnQnLCAnUmVsZWFzZScpCisgICAgICAgIHNlbGYuYXNzZXJ0
X2NvbmZpZ3VyYXRpb24oJ0RlcGxveW1lbnQnLCAnUmVsZWFzZScpCiAKICAgICBkZWYgdGVzdF9k
ZWZhdWx0X2NvbmZpZ3VyYXRpb25fX2RldmVsb3BtZW50KHNlbGYpOgotICAgICAgICBzZWxmLmFz
c2VydENvbmZpZ3VyYXRpb24oJ0RldmVsb3BtZW50JywgJ0RlYnVnJykKKyAgICAgICAgc2VsZi5h
c3NlcnRfY29uZmlndXJhdGlvbignRGV2ZWxvcG1lbnQnLCAnRGVidWcnKQogCiAgICAgZGVmIHRl
c3RfZGVmYXVsdF9jb25maWd1cmF0aW9uX19ub3Rmb3VuZChzZWxmKToKICAgICAgICAgIyBUaGlz
IHRlc3RzIHdoYXQgaGFwcGVucyBpZiB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZpbGUKICAg
ICAgICAgIyBkb2Vzbid0IGV4aXN0LgotICAgICAgICBjb25maWcuY2xlYXJfY2FjaGVkX2NvbmZp
Z3VyYXRpb24oKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvcmlnX2V4aXN0cyA9IG9zLnBh
dGguZXhpc3RzCi0gICAgICAgICAgICBvcy5wYXRoLmV4aXN0cyA9IGxhbWJkYSBwOiBGYWxzZQot
ICAgICAgICAgICAgZSA9IE1vY2tFeGVjdXRpdmUob3V0cHV0PSJmb28iKQotICAgICAgICAgICAg
YyA9IGNvbmZpZy5Db25maWcoZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5kZWZh
dWx0X2NvbmZpZ3VyYXRpb24oKSwgIlJlbGVhc2UiKQotICAgICAgICBmaW5hbGx5OgotICAgICAg
ICAgICAgb3MucGF0aC5leGlzdHMgPSBvcmlnX2V4aXN0cworICAgICAgICBjID0gc2VsZi5tYWtl
X2NvbmZpZyhvdXRwdXQ9J2ZvbycsIGZpbGVzPXsnZm9vL0NvbmZpZ3VyYXRpb24nOiBOb25lfSkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmRlZmF1bHRfY29uZmlndXJhdGlvbigpLCAiUmVs
ZWFzZSIpCiAKICAgICBkZWYgdGVzdF9kZWZhdWx0X2NvbmZpZ3VyYXRpb25fX3Vua25vd24oc2Vs
Zik6CiAgICAgICAgICMgSWdub3JlIHRoZSB3YXJuaW5nIGFib3V0IGFuIHVua25vd24gY29uZmln
dXJhdGlvbiB2YWx1ZS4KICAgICAgICAgb2MgPSBvdXRwdXRjYXB0dXJlLk91dHB1dENhcHR1cmUo
KQogICAgICAgICBvYy5jYXB0dXJlX291dHB1dCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0Q29uZmln
dXJhdGlvbignVW5rbm93bicsICdVbmtub3duJykKKyAgICAgICAgc2VsZi5hc3NlcnRfY29uZmln
dXJhdGlvbignVW5rbm93bicsICdVbmtub3duJykKICAgICAgICAgb2MucmVzdG9yZV9vdXRwdXQo
KQogCi0gICAgZGVmIHRlc3RfcGF0aF9mcm9tX3dlYmtpdF9iYXNlKHNlbGYsICpjb21wcyk6Ci0g
ICAgICAgIGMgPSBjb25maWcuQ29uZmlnKE5vbmUpCisgICAgZGVmIHRlc3RfcGF0aF9mcm9tX3dl
YmtpdF9iYXNlKHNlbGYpOgorICAgICAgICAjIEZJWE1FOiBXZSB1c2UgYSByZWFsIGZpbGVzeXN0
ZW0gaGVyZS4gU2hvdWxkIHRoaXMgbW92ZSB0byBhCisgICAgICAgICMgbW9ja2VkIG9uZT8KKyAg
ICAgICAgYyA9IGNvbmZpZy5Db25maWcoZXhlY3V0aXZlLkV4ZWN1dGl2ZSgpLCBmaWxlc3lzdGVt
LkZpbGVTeXN0ZW0oKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMucGF0aF9mcm9tX3dlYmtp
dF9iYXNlKCdmb28nKSkKIAogICAgIGRlZiB0ZXN0X3dlYmtpdF9iYXNlX2RpcihzZWxmKToKLSAg
ICAgICAgYyA9IGNvbmZpZy5Db25maWcoTm9uZSkKKyAgICAgICAgIyBGSVhNRTogV2UgdXNlIGEg
cmVhbCBmaWxlc3lzdGVtIGhlcmUuIFNob3VsZCB0aGlzIG1vdmUgdG8gYQorICAgICAgICAjIG1v
Y2tlZCBvbmU/CisgICAgICAgIGMgPSBjb25maWcuQ29uZmlnKGV4ZWN1dGl2ZS5FeGVjdXRpdmUo
KSwgZmlsZXN5c3RlbS5GaWxlU3lzdGVtKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjLndl
YmtpdF9iYXNlX2RpcigpKQogCiAKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZ29vZ2xlX2Nocm9tZV91bml0dGVzdC5weSBiL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZ29vZ2xlX2Nocm9tZV91
bml0dGVzdC5weQppbmRleCBjNGM4ODVkNjMyOWFiM2QwYmJhZmFhZWNhMTczNDNhNDY0ZWU3YTM1
Li5lNjBjMjc0MTZkZWIzNzkzNWY0MGI0NTM1N2NiZDI5NzFkMmM2ZWE2IDEwMDY0NAotLS0gYS9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2dvb2dsZV9jaHJv
bWVfdW5pdHRlc3QucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC9nb29nbGVfY2hyb21lX3VuaXR0ZXN0LnB5CkBAIC0yOCw3ICsyOCw4IEBAIGlt
cG9ydCBjb2RlY3MKIGltcG9ydCBvcwogaW1wb3J0IHVuaXR0ZXN0CiAKLWltcG9ydCBiYXNlX3Vu
aXR0ZXN0Citmcm9tIHdlYmtpdHB5LmNvbW1vbiBpbXBvcnQgbmV3c3RyaW5naW8KKwogaW1wb3J0
IGZhY3RvcnkKIGltcG9ydCBnb29nbGVfY2hyb21lCiAKQEAgLTc3LDcgKzc4LDcgQEAgY2xhc3Mg
R2V0R29vZ2xlQ2hyb21lUG9ydFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgICAgIGRl
ZiBtb2NrX29wZW4ocGF0aCwgbW9kZSwgZW5jb2RpbmcpOgogICAgICAgICAgICAgaWYgJ3Rlc3Rf
ZXhwZWN0YXRpb25zX2Nocm9tZS50eHQnIGluIHBhdGg6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGJhc2VfdW5pdHRlc3QuTmV3U3RyaW5nSU8oZXhwZWN0ZWRfc3RyaW5nKQorICAgICAgICAgICAg
ICAgIHJldHVybiBuZXdzdHJpbmdpby5TdHJpbmdJTyhleHBlY3RlZF9zdHJpbmcpCiAgICAgICAg
ICAgICByZXR1cm4gb3JpZ19vcGVuKHBhdGgsIG1vZGUsIGVuY29kaW5nKQogCiAgICAgICAgIHRy
eToKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvd2Via2l0LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC93ZWJraXQucHkKaW5kZXggMGQwZDNlMDAxYjc5OTM1N2RiNDk1NjUxZGNhNzViOGVk
MjdhYTg3OS4uNzBlNDQwZGZhNDU0MGQwMGUyN2Q1MzZlZjQ3N2Y1YTllZGYwZTNmYyAxMDA2NDQK
LS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJr
aXQucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9y
dC93ZWJraXQucHkKQEAgLTgyLDE0ICs4Miw4IEBAIGNsYXNzIFdlYktpdFBvcnQoYmFzZS5Qb3J0
KToKICAgICAgICAgcmV0dXJuICcnCiAKICAgICBkZWYgX2J1aWxkX2RyaXZlcihzZWxmKToKLSAg
ICAgICAgZXhpdF9jb2RlID0gc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsKLSAgICAgICAg
ICAgIHNlbGYuc2NyaXB0X3BhdGgoImJ1aWxkLWR1bXByZW5kZXJ0cmVlIiksCi0gICAgICAgICAg
ICBzZWxmLmZsYWdfZnJvbV9jb25maWd1cmF0aW9uKHNlbGYuZ2V0X29wdGlvbignY29uZmlndXJh
dGlvbicpKSwKLSAgICAgICAgXSwgcmV0dXJuX2V4aXRfY29kZT1UcnVlKQotICAgICAgICBpZiBl
eGl0X2NvZGUgIT0gMDoKLSAgICAgICAgICAgIF9sb2cuZXJyb3IoIkZhaWxlZCB0byBidWlsZCBE
dW1wUmVuZGVyVHJlZSIpCi0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgcmV0dXJu
IFRydWUKKyAgICAgICAgY29uZmlndXJhdGlvbiA9IHNlbGYuZ2V0X29wdGlvbignY29uZmlndXJh
dGlvbicpCisgICAgICAgIHJldHVybiBzZWxmLl9jb25maWcuYnVpbGRfZHVtcHJlbmRlcnRyZWUo
Y29uZmlndXJhdGlvbikKIAogICAgIGRlZiBfY2hlY2tfZHJpdmVyKHNlbGYpOgogICAgICAgICBk
cml2ZXJfcGF0aCA9IHNlbGYuX3BhdGhfdG9fZHJpdmVyKCkKQEAgLTM1OCwxMiArMzUyLDggQEAg
Y2xhc3MgV2ViS2l0UG9ydChiYXNlLlBvcnQpOgogICAgICAgICAgICAgJ21hYy10aWdlcicsICdt
YWMtbGVvcGFyZCcsICdtYWMtc25vd2xlb3BhcmQnKQogCiAgICAgZGVmIF9idWlsZF9wYXRoKHNl
bGYsICpjb21wcyk6Ci0gICAgICAgIGlmIG5vdCBzZWxmLl9jYWNoZWRfYnVpbGRfcm9vdDoKLSAg
ICAgICAgICAgIHNlbGYuX2NhY2hlZF9idWlsZF9yb290ID0gc2VsZi5fd2Via2l0X2J1aWxkX2Rp
cmVjdG9yeShbCi0gICAgICAgICAgICAgICAgIi0tY29uZmlndXJhdGlvbiIsCi0gICAgICAgICAg
ICAgICAgc2VsZi5mbGFnX2Zyb21fY29uZmlndXJhdGlvbihzZWxmLmdldF9vcHRpb24oJ2NvbmZp
Z3VyYXRpb24nKSksCi0gICAgICAgICAgICBdKQotICAgICAgICByZXR1cm4gb3MucGF0aC5qb2lu
KHNlbGYuX2NhY2hlZF9idWlsZF9yb290LCAqY29tcHMpCisgICAgICAgIHJldHVybiBzZWxmLl9m
aWxlc3lzdGVtLmpvaW4oc2VsZi5fY29uZmlnLmJ1aWxkX2RpcmVjdG9yeSgKKyAgICAgICAgICAg
IHNlbGYuZ2V0X29wdGlvbignY29uZmlndXJhdGlvbicpKSwgKmNvbXBzKQogCiAgICAgZGVmIF9w
YXRoX3RvX2RyaXZlcihzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX2J1aWxkX3BhdGgoJ0R1
bXBSZW5kZXJUcmVlJykKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkgYi9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5
CmluZGV4IGYyMWU3YTVlNzRiMjhiY2YwZTEzYWQzNTY1MDBiYmI4OWJhMWI3MDguLjcwMDVhZTli
ZDU2OTc3MmQ0YzA5OTRjY2M5M2E5NzI0YzFhZGNmMGMgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3Qu
cHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dl
YmtpdF90ZXN0c191bml0dGVzdC5weQpAQCAtMzYyLDE3ICszNjIsNiBAQCBjbGFzcyBNYWluVGVz
dCh1bml0dGVzdC5UZXN0Q2FzZSk6CiBNYWluVGVzdCA9IHNraXBfaWYoTWFpblRlc3QsIHN5cy5w
bGF0Zm9ybSA9PSAnY3lnd2luJyBhbmQgY29tcGFyZV92ZXJzaW9uKHN5cywgJzIuNicpWzBdIDwg
MCwgJ25ldy1ydW4td2Via2l0LXRlc3RzIHRlc3RzIGhhbmcgb24gQ3lnd2luIFB5dGhvbiAyLjUu
MicpCiAKIAotZGVmIF9tb2NrZWRfb3BlbihvcmlnaW5hbF9vcGVuLCBmaWxlX2xpc3QpOgotICAg
IGRlZiBfd3JhcHBlcihuYW1lLCBtb2RlLCBlbmNvZGluZyk6Ci0gICAgICAgIGlmIG5hbWUuZmlu
ZCgiLWV4cGVjdGVkLiIpICE9IC0xIGFuZCBtb2RlLmZpbmQoInciKSAhPSAtMToKLSAgICAgICAg
ICAgICMgd2UgZG9uJ3Qgd2FudCB0byBhY3R1YWxseSB3cml0ZSBuZXcgYmFzZWxpbmVzLCBzbyBz
dHViIHRoZXNlIG91dAotICAgICAgICAgICAgbmFtZS5yZXBsYWNlKCdcXCcsICcvJykKLSAgICAg
ICAgICAgIGZpbGVfbGlzdC5hcHBlbmQobmFtZSkKLSAgICAgICAgICAgIHJldHVybiBvcmlnaW5h
bF9vcGVuKG9zLmRldm51bGwsIG1vZGUsIGVuY29kaW5nKQotICAgICAgICByZXR1cm4gb3JpZ2lu
YWxfb3BlbihuYW1lLCBtb2RlLCBlbmNvZGluZykKLSAgICByZXR1cm4gX3dyYXBwZXIKLQotCiBj
bGFzcyBSZWJhc2VsaW5lVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIGFzc2VydEJh
c2VsaW5lcyhzZWxmLCBmaWxlX2xpc3QsIGZpbGUpOgogICAgICAgICAiYXNzZXJ0IHRoYXQgdGhl
IGZpbGVfbGlzdCBjb250YWlucyB0aGUgYmFzZWxpbmVzLiIiIgpAQCAtMzgwLDUwICszNjksNDEg
QEAgY2xhc3MgUmViYXNlbGluZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICAgICAg
YmFzZWxpbmUgPSBmaWxlICsgIi1leHBlY3RlZCIgKyBleHQKICAgICAgICAgICAgIHNlbGYuYXNz
ZXJ0VHJ1ZShhbnkoZi5maW5kKGJhc2VsaW5lKSAhPSAtMSBmb3IgZiBpbiBmaWxlX2xpc3QpKQog
Ci0gICAgIyBGSVhNRTogVGhpcyB0ZXN0IGlzIGZhaWxpbmcgb24gdGhlIGJvdHMuIEFsc28sIHRo
aXMgdGVzdCB0b3VjaGVzIHRoZQotICAgICMgICAgICAgIGZpbGUgc3lzdGVtLiAgVW5pdCB0ZXN0
cyBzaG91bGQgbm90IHJlYWQgb3Igd3JpdGUgdGhlIGZpbGUgc3lzdGVtLgotICAgICMgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Nzg3OQogICAgIGRlZiBk
aXNhYmxlZF90ZXN0X3Jlc2V0X3Jlc3VsdHMoc2VsZik6CisgICAgICAgICMgRklYTUU6IFRoaXMg
dGVzdCBpcyBkaXNhYmxlZCB1bnRpbCB3ZSBjYW4gcmV3cml0ZSBpdCB0byB1c2UgYQorICAgICAg
ICAjIG1vY2sgZmlsZXN5c3RlbS4KKyAgICAgICAgIworICAgICAgICAjIFRlc3QgdGhhdCB3ZSB1
cGRhdGUgZXhwZWN0YXRpb25zIGluIHBsYWNlLiBJZiB0aGUgZXhwZWN0YXRpb24KKyAgICAgICAg
IyBpcyBtaXNzaW5nLCB1cGRhdGUgdGhlIGV4cGVjdGVkIGdlbmVyaWMgbG9jYXRpb24uCiAgICAg
ICAgIGZpbGVfbGlzdCA9IFtdCi0gICAgICAgIG9yaWdpbmFsX29wZW4gPSBjb2RlY3Mub3Blbgot
ICAgICAgICB0cnk6Ci0gICAgICAgICAgICAjIFRlc3QgdGhhdCB3ZSB1cGRhdGUgZXhwZWN0YXRp
b25zIGluIHBsYWNlLiBJZiB0aGUgZXhwZWN0YXRpb24KLSAgICAgICAgICAgICMgaXMgbWlzc2lu
ZywgdXBkYXRlIHRoZSBleHBlY3RlZCBnZW5lcmljIGxvY2F0aW9uLgotICAgICAgICAgICAgZmls
ZV9saXN0ID0gW10KLSAgICAgICAgICAgIGNvZGVjcy5vcGVuID0gX21vY2tlZF9vcGVuKG9yaWdp
bmFsX29wZW4sIGZpbGVfbGlzdCkKLSAgICAgICAgICAgIHBhc3NpbmdfcnVuKFsnLS1waXhlbC10
ZXN0cycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJy0tcmVzZXQtcmVzdWx0cycsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgJ3Bhc3Nlcy9pbWFnZS5odG1sJywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAnZmFpbHVyZXMvZXhwZWN0ZWQvbWlzc2luZ19pbWFnZS5odG1sJ10sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSkKLSAgICAgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwobGVuKGZpbGVfbGlzdCksIDYpCi0gICAgICAgICAgICBzZWxmLmFzc2Vy
dEJhc2VsaW5lcyhmaWxlX2xpc3QsCi0gICAgICAgICAgICAgICAgImRhdGEvcGFzc2VzL2ltYWdl
IikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0QmFzZWxpbmVzKGZpbGVfbGlzdCwKLSAgICAgICAg
ICAgICAgICAiZGF0YS9mYWlsdXJlcy9leHBlY3RlZC9taXNzaW5nX2ltYWdlIikKLSAgICAgICAg
ZmluYWxseToKLSAgICAgICAgICAgIGNvZGVjcy5vcGVuID0gb3JpZ2luYWxfb3BlbgotCi0gICAg
ZGVmIHRlc3RfbmV3X2Jhc2VsaW5lKHNlbGYpOgotICAgICAgICBmaWxlX2xpc3QgPSBbXQotICAg
ICAgICBvcmlnaW5hbF9vcGVuID0gY29kZWNzLm9wZW4KLSAgICAgICAgdHJ5OgotICAgICAgICAg
ICAgIyBUZXN0IHRoYXQgd2UgdXBkYXRlIHRoZSBwbGF0Zm9ybSBleHBlY3RhdGlvbnMuIElmIHRo
ZSBleHBlY3RhdGlvbgotICAgICAgICAgICAgIyBpcyBtc3NpbmcsIHRoZW4gY3JlYXRlIGEgbmV3
IGV4cGVjdGF0aW9uIGluIHRoZSBwbGF0Zm9ybSBkaXIuCi0gICAgICAgICAgICBmaWxlX2xpc3Qg
PSBbXQotICAgICAgICAgICAgY29kZWNzLm9wZW4gPSBfbW9ja2VkX29wZW4ob3JpZ2luYWxfb3Bl
biwgZmlsZV9saXN0KQotICAgICAgICAgICAgcGFzc2luZ19ydW4oWyctLXBpeGVsLXRlc3RzJywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAnLS1uZXctYmFzZWxpbmUnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICdwYXNzZXMvaW1hZ2UuaHRtbCcsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgJ2ZhaWx1cmVzL2V4cGVjdGVkL21pc3NpbmdfaW1hZ2UuaHRtbCddLAorICAgICAgICBwYXNz
aW5nX3J1bihbJy0tcGl4ZWwtdGVzdHMnLAorICAgICAgICAgICAgICAgICAgICAgICAgJy0tcmVz
ZXQtcmVzdWx0cycsCisgICAgICAgICAgICAgICAgICAgICAgICAncGFzc2VzL2ltYWdlLmh0bWwn
LAorICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhaWx1cmVzL2V4cGVjdGVkL21pc3NpbmdfaW1h
Z2UuaHRtbCddLAogICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSkK
LSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGZpbGVfbGlzdCksIDYpCi0gICAgICAg
ICAgICBzZWxmLmFzc2VydEJhc2VsaW5lcyhmaWxlX2xpc3QsCi0gICAgICAgICAgICAgICAgImRh
dGEvcGxhdGZvcm0vdGVzdC9wYXNzZXMvaW1hZ2UiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRC
YXNlbGluZXMoZmlsZV9saXN0LAotICAgICAgICAgICAgICAgICJkYXRhL3BsYXRmb3JtL3Rlc3Qv
ZmFpbHVyZXMvZXhwZWN0ZWQvbWlzc2luZ19pbWFnZSIpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAg
ICAgICAgICBjb2RlY3Mub3BlbiA9IG9yaWdpbmFsX29wZW4KKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChsZW4oZmlsZV9saXN0KSwgNikKKyAgICAgICAgc2VsZi5hc3NlcnRCYXNlbGluZXMoZmls
ZV9saXN0LAorICAgICAgICAgICAgImRhdGEvcGFzc2VzL2ltYWdlIikKKyAgICAgICAgc2VsZi5h
c3NlcnRCYXNlbGluZXMoZmlsZV9saXN0LAorICAgICAgICAgICAgImRhdGEvZmFpbHVyZXMvZXhw
ZWN0ZWQvbWlzc2luZ19pbWFnZSIpCisKKyAgICBkZWYgZGlzYWJsZWRfdGVzdF9uZXdfYmFzZWxp
bmUoc2VsZik6CisgICAgICAgICMgRklYTUU6IFRoaXMgdGVzdCBpcyBkaXNhYmxlZCB1bnRpbCB3
ZSBjYW4gcmV3cml0ZSBpdCB0byB1c2UgYQorICAgICAgICAjIG1vY2sgZmlsZXN5c3RlbS4KKyAg
ICAgICAgIworICAgICAgICAjIFRlc3QgdGhhdCB3ZSB1cGRhdGUgdGhlIHBsYXRmb3JtIGV4cGVj
dGF0aW9ucy4gSWYgdGhlIGV4cGVjdGF0aW9uCisgICAgICAgICMgaXMgbXNzaW5nLCB0aGVuIGNy
ZWF0ZSBhIG5ldyBleHBlY3RhdGlvbiBpbiB0aGUgcGxhdGZvcm0gZGlyLgorICAgICAgICBmaWxl
X2xpc3QgPSBbXQorICAgICAgICBwYXNzaW5nX3J1bihbJy0tcGl4ZWwtdGVzdHMnLAorICAgICAg
ICAgICAgICAgICAgICAgICAgJy0tbmV3LWJhc2VsaW5lJywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICdwYXNzZXMvaW1hZ2UuaHRtbCcsCisgICAgICAgICAgICAgICAgICAgICAgICAnZmFpbHVy
ZXMvZXhwZWN0ZWQvbWlzc2luZ19pbWFnZS5odG1sJ10sCisgICAgICAgICAgICAgICAgICAgIHRl
c3RzX2luY2x1ZGVkPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGZpbGVfbGlz
dCksIDYpCisgICAgICAgIHNlbGYuYXNzZXJ0QmFzZWxpbmVzKGZpbGVfbGlzdCwKKyAgICAgICAg
ICAgICJkYXRhL3BsYXRmb3JtL3Rlc3QvcGFzc2VzL2ltYWdlIikKKyAgICAgICAgc2VsZi5hc3Nl
cnRCYXNlbGluZXMoZmlsZV9saXN0LAorICAgICAgICAgICAgImRhdGEvcGxhdGZvcm0vdGVzdC9m
YWlsdXJlcy9leHBlY3RlZC9taXNzaW5nX2ltYWdlIikKIAogCiBjbGFzcyBUZXN0UnVubmVyV3Jh
cHBlcihydW5fd2Via2l0X3Rlc3RzLlRlc3RSdW5uZXIpOgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS90b29sL21vY2t0b29sLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS90b29sL21vY2t0b29sLnB5CmluZGV4IGI2ZWU5NWY1NzEwMzBlMTk2YTY3MjUy
NjUyZDRmMjUyYzAyYzRkYmEuLjcxOWY5YjFiYmM4MjM1NTY5ZDg1MWU4ZjI0MjE2ZDhmYzM0NDJl
OWUgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9tb2NrdG9v
bC5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvbW9ja3Rvb2wucHkK
QEAgLTU3MSw2ICs1NzEsNyBAQCBjbGFzcyBNb2NrU3RhdHVzU2VydmVyKG9iamVjdCk6CiAKIAog
IyBGSVhNRTogVGhpcyBzaG91bGQgbm90IGluaGVyaXQgZnJvbSBNb2NrCisjIEZJWE1FOiBVbmlm
eSB3aXRoIGNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlX21vY2suTW9ja0V4ZWN1dGl2ZS4KIGNsYXNz
IE1vY2tFeGVjdXRpdmUoTW9jayk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNob3VsZF9sb2cp
OgogICAgICAgICBzZWxmLl9zaG91bGRfbG9nID0gc2hvdWxkX2xvZwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73183</attachid>
            <date>2010-11-06 20:35:25 -0700</date>
            <delta_ts>2010-11-06 20:41:26 -0700</delta_ts>
            <desc>Patch merged to tip of tree ... this doesn&apos;t contain the memoize descriptors, because we cache the values already.</desc>
            <filename>bug-48280-20101106203524.patch</filename>
            <type>text/plain</type>
            <size>37789</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBjMDQ0NjBmNTNlMDg2NTg0NGVjNjg1ZDI0MzBlNzM4MmU3Y2JmNmM2Li45Mzk4NGI3
Y2RiYjk5MmJkMDcwMDRmNjE3MWM5OTIyMWJmOWRkMDg0IDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzEgQEAK
KzIwMTAtMTAtMjUgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgRXJpYyBTaWVkZWwuCisKKyAgICAgICAgbmV3LXJ1bi13ZWJraXQtdGVz
dHM6IHVwZGF0ZSBwb3J0L2Jhc2UgYW5kIHBvcnQvd2Via2l0IHRvIHVzZSB0aGUKKyAgICAgICAg
bmV3IEZpbGVTeXN0ZW0gYW5kIENvbmZpZyBhYnN0cmFjdGlvbnMsIHB1bGxpbmcgbW9yZSBsb2dp
YyBvdXQgb2YKKyAgICAgICAgdGhlIGJhc2UgUG9ydCBjbGFzc2VzIGludG8gc2VwYXJhdGUsIG1v
Y2thYmxlIG9iamVjdHMuCisKKyAgICAgICAgQWxzbyBjcmVhdGUgYSBNb2NrRmlsZVN5c3RlbSBv
YmplY3QsIGEgTW9ja0NvbmZpZyBvYmplY3QsIG1vdmUKKyAgICAgICAgTW9ja0V4ZWN1dGl2ZSBp
bnRvIGNvbW1vbi9zeXN0ZW0gdG8gYmUgbmV4dCB0byBleGVjdXRpdmUsIGFuZAorICAgICAgICB1
cGRhdGUgdGhlIGNvbmZpZyBvYmplY3QgdG8gdXNlIGEgRmlsZVN5c3RlbS4KKworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDgyODAKKworICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ld3N0cmluZ2lvLnB5OiBBZGRlZC4KKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXdzdHJpbmdpb191bml0dGVzdC5weTogQWRkZWQu
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2ZV9tb2Nr
LnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmls
ZXN5c3RlbV9tb2NrLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L2Jhc2UucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC9iYXNlX3VuaXR0ZXN0LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvY29uZmlnLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvY29uZmlnX21vY2sucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jb25maWdfdW5pdHRlc3QucHk6CisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9nb29nbGVfY2hyb21lX3VuaXR0ZXN0LnB5
OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Via2l0LnB5
OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVz
dHNfdW5pdHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL21vY2t0b29s
LnB5OgorCiAyMDEwLTExLTA2ICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFVucmV2aWV3ZWQsIGJ1aWxkIGJyZWFrYWdlLgpkaWZmIC0tZ2l0IGEvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5IGIvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CmluZGV4IGE5
OGI4NTgxMWY3ZjllMWRiOGJiMWFhMzliOWNmZGEwYmFjNDQwNmMuLjRhMjk3MGUzMjAzYzYwMGY1
ZTI4OWY4ZTgzZGQ4YWE0MjkwMGExYjQgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weQorKysgYi9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkKQEAgLTMwLDEwICszMCw3IEBA
CiAiIiJBYnN0cmFjdCBiYXNlIGNsYXNzIG9mIFBvcnQtc3BlY2lmaWMgZW50cnlwb2ludHMgZm9y
IHRoZSBsYXlvdXQgdGVzdHMKIHRlc3QgaW5mcmFzdHJ1Y3R1cmUgKHRoZSBQb3J0IGFuZCBEcml2
ZXIgY2xhc3NlcykuIiIiCiAKLWZyb20gX19mdXR1cmVfXyBpbXBvcnQgd2l0aF9zdGF0ZW1lbnQK
LQogaW1wb3J0IGNnaQotaW1wb3J0IGNvZGVjcwogaW1wb3J0IGRpZmZsaWIKIGltcG9ydCBlcnJu
bwogaW1wb3J0IG9zCkBAIC00MiwxNSArMzksMTcgQEAgaW1wb3J0IHN5cwogaW1wb3J0IHRpbWUK
IAogaW1wb3J0IGFwYWNoZV9odHRwX3NlcnZlcgoraW1wb3J0IGNvbmZpZyBhcyBwb3J0X2NvbmZp
ZwogaW1wb3J0IGh0dHBfbG9jawogaW1wb3J0IGh0dHBfc2VydmVyCiBpbXBvcnQgdGVzdF9maWxl
cwogaW1wb3J0IHdlYnNvY2tldF9zZXJ2ZXIKIAotZnJvbSB3ZWJraXRweS5jb21tb24ubWVtb2l6
ZWQgaW1wb3J0IG1lbW9pemVkCitmcm9tIHdlYmtpdHB5LmNvbW1vbiBpbXBvcnQgc3lzdGVtCitm
cm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IGZpbGVzeXN0ZW0KIGZyb20gd2Via2l0
cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgbG9ndXRpbHMKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5
c3RlbSBpbXBvcnQgcGF0aAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBp
bXBvcnQgRXhlY3V0aXZlLCBTY3JpcHRFcnJvcgotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVt
LnBhdGggaW1wb3J0IGFic3BhdGhfdG9fdXJpCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0u
dXNlciBpbXBvcnQgVXNlcgogCiAKQEAgLTc1LDI3ICs3NCwyNiBAQCBjbGFzcyBEdW1teU9wdGlv
bnMob2JqZWN0KToKIAogIyBGSVhNRTogVGhpcyBjbGFzcyBzaG91bGQgbWVyZ2Ugd2l0aCB3ZWJr
aXRweS53ZWJraXRfcG9ydCBhdCBzb21lIHBvaW50LgogY2xhc3MgUG9ydChvYmplY3QpOgotICAg
ICIiIkFic3RyYWN0IGNsYXNzIGZvciBQb3J0LXNwZWNpZmljIGhvb2tzIGZvciB0aGUgbGF5b3V0
X3Rlc3QgcGFja2FnZS4KLSAgICAiIiIKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgZmxh
Z19mcm9tX2NvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbik6Ci0gICAgICAgIGZsYWdzX2J5X2Nv
bmZpZ3VyYXRpb24gPSB7Ci0gICAgICAgICAgICAiRGVidWciOiAiLS1kZWJ1ZyIsCi0gICAgICAg
ICAgICAiUmVsZWFzZSI6ICItLXJlbGVhc2UiLAotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBm
bGFnc19ieV9jb25maWd1cmF0aW9uW2NvbmZpZ3VyYXRpb25dCi0KLSAgICBkZWYgX19pbml0X18o
c2VsZiwgKiprd2FyZ3MpOgotICAgICAgICBzZWxmLl9uYW1lID0ga3dhcmdzLmdldCgncG9ydF9u
YW1lJywgTm9uZSkKLSAgICAgICAgc2VsZi5fb3B0aW9ucyA9IGt3YXJncy5nZXQoJ29wdGlvbnMn
KQorICAgICIiIkFic3RyYWN0IGNsYXNzIGZvciBQb3J0LXNwZWNpZmljIGhvb2tzIGZvciB0aGUg
bGF5b3V0X3Rlc3QgcGFja2FnZS4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0X25h
bWU9Tm9uZSwgb3B0aW9ucz1Ob25lLAorICAgICAgICAgICAgICAgICBleGVjdXRpdmU9Tm9uZSwK
KyAgICAgICAgICAgICAgICAgdXNlcj1Ob25lLAorICAgICAgICAgICAgICAgICBmaWxlc3lzdGVt
PU5vbmUsCisgICAgICAgICAgICAgICAgIGNvbmZpZz1Ob25lLAorICAgICAgICAgICAgICAgICAq
Kmt3YXJncyk6CisgICAgICAgIHNlbGYuX25hbWUgPSBwb3J0X25hbWUKKyAgICAgICAgc2VsZi5f
b3B0aW9ucyA9IG9wdGlvbnMKICAgICAgICAgaWYgc2VsZi5fb3B0aW9ucyBpcyBOb25lOgogICAg
ICAgICAgICAgIyBGSVhNRTogSWRlYWxseSB3ZSdkIGhhdmUgYSBwYWNrYWdlLXdpZGUgd2F5IHRv
IGdldCBhCiAgICAgICAgICAgICAjIHdlbGwtZm9ybWVkIG9wdGlvbnMgb2JqZWN0IHRoYXQgaGFk
IGFsbCBvZiB0aGUgbmVjZXNzYXJ5CiAgICAgICAgICAgICAjIG9wdGlvbnMgZGVmaW5lZCBvbiBp
dC4KICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMgPSBEdW1teU9wdGlvbnMoKQotICAgICAgICBz
ZWxmLl9leGVjdXRpdmUgPSBrd2FyZ3MuZ2V0KCdleGVjdXRpdmUnLCBFeGVjdXRpdmUoKSkKLSAg
ICAgICAgc2VsZi5fdXNlciA9IGt3YXJncy5nZXQoJ3VzZXInLCBVc2VyKCkpCisgICAgICAgIHNl
bGYuX2V4ZWN1dGl2ZSA9IGV4ZWN1dGl2ZSBvciBFeGVjdXRpdmUoKQorICAgICAgICBzZWxmLl91
c2VyID0gdXNlciBvciBVc2VyKCkKKyAgICAgICAgc2VsZi5fZmlsZXN5c3RlbSA9IGZpbGVzeXN0
ZW0gb3Igc3lzdGVtLmZpbGVzeXN0ZW0uRmlsZVN5c3RlbSgpCisgICAgICAgIHNlbGYuX2NvbmZp
ZyA9IGNvbmZpZyBvciBwb3J0X2NvbmZpZy5Db25maWcoc2VsZi5fZXhlY3V0aXZlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVz
eXN0ZW0pCiAgICAgICAgIHNlbGYuX2hlbHBlciA9IE5vbmUKICAgICAgICAgc2VsZi5faHR0cF9z
ZXJ2ZXIgPSBOb25lCiAgICAgICAgIHNlbGYuX3dlYmtpdF9iYXNlX2RpciA9IE5vbmUKQEAgLTEx
OCw3ICsxMTYsNyBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAgICAgIHNlbGYuX3dkaWZmX2F2
YWlsYWJsZSA9IFRydWUKIAogICAgICAgICBzZWxmLl9wcmV0dHlfcGF0Y2hfcGF0aCA9IHNlbGYu
cGF0aF9mcm9tX3dlYmtpdF9iYXNlKCJCdWdzU2l0ZSIsCi0gICAgICAgICAgICAgICJQcmV0dHlQ
YXRjaCIsICJwcmV0dGlmeS5yYiIpCisgICAgICAgICAgICAiUHJldHR5UGF0Y2giLCAicHJldHRp
ZnkucmIiKQogICAgICAgICBzZWxmLl9wcmV0dHlfcGF0Y2hfYXZhaWxhYmxlID0gVHJ1ZQogICAg
ICAgICBzZWxmLnNldF9vcHRpb25fZGVmYXVsdCgnY29uZmlndXJhdGlvbicsIE5vbmUpCiAgICAg
ICAgIGlmIHNlbGYuX29wdGlvbnMuY29uZmlndXJhdGlvbiBpcyBOb25lOgpAQCAtMjY1LDcgKzI2
Myw4IEBAIGNsYXNzIFBvcnQob2JqZWN0KToKIAogICAgICAgICBiYXNlbGluZXMgPSBbXQogICAg
ICAgICBmb3IgcGxhdGZvcm1fZGlyIGluIGJhc2VsaW5lX3NlYXJjaF9wYXRoOgotICAgICAgICAg
ICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHBsYXRmb3JtX2RpciwgYmFzZWxpbmVf
ZmlsZW5hbWUpKToKKyAgICAgICAgICAgIGlmIHNlbGYucGF0aF9leGlzdHMoc2VsZi5fZmlsZXN5
c3RlbS5qb2luKHBsYXRmb3JtX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lX2ZpbGVuYW1lKSk6CiAgICAgICAgICAgICAg
ICAgYmFzZWxpbmVzLmFwcGVuZCgocGxhdGZvcm1fZGlyLCBiYXNlbGluZV9maWxlbmFtZSkpCiAK
ICAgICAgICAgICAgIGlmIG5vdCBhbGxfYmFzZWxpbmVzIGFuZCBiYXNlbGluZXM6CkBAIC0yNzQs
NyArMjczLDggQEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAgICAgICAjIElmIGl0IHdhc24ndCBm
b3VuZCBpbiBhIHBsYXRmb3JtIGRpcmVjdG9yeSwgcmV0dXJuIHRoZSBleHBlY3RlZAogICAgICAg
ICAjIHJlc3VsdCBpbiB0aGUgdGVzdCBkaXJlY3RvcnksIGV2ZW4gaWYgbm8gc3VjaCBmaWxlIGFj
dHVhbGx5IGV4aXN0cy4KICAgICAgICAgcGxhdGZvcm1fZGlyID0gc2VsZi5sYXlvdXRfdGVzdHNf
ZGlyKCkKLSAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHBsYXRmb3JtX2Rp
ciwgYmFzZWxpbmVfZmlsZW5hbWUpKToKKyAgICAgICAgaWYgc2VsZi5wYXRoX2V4aXN0cyhzZWxm
Ll9maWxlc3lzdGVtLmpvaW4ocGxhdGZvcm1fZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlbGluZV9maWxlbmFtZSkpOgogICAgICAgICAg
ICAgYmFzZWxpbmVzLmFwcGVuZCgocGxhdGZvcm1fZGlyLCBiYXNlbGluZV9maWxlbmFtZSkpCiAK
ICAgICAgICAgaWYgYmFzZWxpbmVzOgpAQCAtMzA0LDM1ICszMDQsMzIgQEAgY2xhc3MgUG9ydChv
YmplY3QpOgogICAgICAgICBwbGF0Zm9ybV9kaXIsIGJhc2VsaW5lX2ZpbGVuYW1lID0gc2VsZi5l
eHBlY3RlZF9iYXNlbGluZXMoCiAgICAgICAgICAgICBmaWxlbmFtZSwgc3VmZml4KVswXQogICAg
ICAgICBpZiBwbGF0Zm9ybV9kaXI6Ci0gICAgICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHBs
YXRmb3JtX2RpciwgYmFzZWxpbmVfZmlsZW5hbWUpCi0gICAgICAgIHJldHVybiBvcy5wYXRoLmpv
aW4oc2VsZi5sYXlvdXRfdGVzdHNfZGlyKCksIGJhc2VsaW5lX2ZpbGVuYW1lKQotCi0gICAgZGVm
IF9leHBlY3RlZF9maWxlX2NvbnRlbnRzKHNlbGYsIHRlc3QsIGV4dGVuc2lvbiwgZW5jb2Rpbmcp
OgotICAgICAgICBwYXRoID0gc2VsZi5leHBlY3RlZF9maWxlbmFtZSh0ZXN0LCBleHRlbnNpb24p
Ci0gICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhwYXRoKToKLSAgICAgICAgICAgIHJldHVy
biBOb25lCi0gICAgICAgIG9wZW5fbW9kZSA9ICdyJwotICAgICAgICBpZiBlbmNvZGluZyBpcyBO
b25lOgotICAgICAgICAgICAgb3Blbl9tb2RlID0gJ3IrYicKLSAgICAgICAgd2l0aCBjb2RlY3Mu
b3BlbihwYXRoLCBvcGVuX21vZGUsIGVuY29kaW5nKSBhcyBmaWxlOgotICAgICAgICAgICAgcmV0
dXJuIGZpbGUucmVhZCgpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZmlsZXN5c3RlbS5qb2lu
KHBsYXRmb3JtX2RpciwgYmFzZWxpbmVfZmlsZW5hbWUpCisgICAgICAgIHJldHVybiBzZWxmLl9m
aWxlc3lzdGVtLmpvaW4oc2VsZi5sYXlvdXRfdGVzdHNfZGlyKCksIGJhc2VsaW5lX2ZpbGVuYW1l
KQogCiAgICAgZGVmIGV4cGVjdGVkX2NoZWNrc3VtKHNlbGYsIHRlc3QpOgogICAgICAgICAiIiJS
ZXR1cm5zIHRoZSBjaGVja3N1bSBvZiB0aGUgaW1hZ2Ugd2UgZXhwZWN0IHRoZSB0ZXN0IHRvIHBy
b2R1Y2UsIG9yIE5vbmUgaWYgaXQgaXMgYSB0ZXh0LW9ubHkgdGVzdC4iIiIKLSAgICAgICAgcmV0
dXJuIHNlbGYuX2V4cGVjdGVkX2ZpbGVfY29udGVudHModGVzdCwgJy5jaGVja3N1bScsICdhc2Np
aScpCisgICAgICAgIHBhdGggPSBzZWxmLmV4cGVjdGVkX2ZpbGVuYW1lKHRlc3QsICcuY2hlY2tz
dW0nKQorICAgICAgICBpZiBub3Qgc2VsZi5wYXRoX2V4aXN0cyhwYXRoKToKKyAgICAgICAgICAg
IHJldHVybiBOb25lCisgICAgICAgIHJldHVybiBzZWxmLl9maWxlc3lzdGVtLnJlYWRfdGV4dF9m
aWxlKHBhdGgpCiAKICAgICBkZWYgZXhwZWN0ZWRfaW1hZ2Uoc2VsZiwgdGVzdCk6CiAgICAgICAg
ICIiIlJldHVybnMgdGhlIGltYWdlIHdlIGV4cGVjdCB0aGUgdGVzdCB0byBwcm9kdWNlLiIiIgot
ICAgICAgICByZXR1cm4gc2VsZi5fZXhwZWN0ZWRfZmlsZV9jb250ZW50cyh0ZXN0LCAnLnBuZycs
IE5vbmUpCisgICAgICAgIHBhdGggPSBzZWxmLmV4cGVjdGVkX2ZpbGVuYW1lKHRlc3QsICcucG5n
JykKKyAgICAgICAgaWYgbm90IHNlbGYucGF0aF9leGlzdHMocGF0aCk6CisgICAgICAgICAgICBy
ZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gc2VsZi5fZmlsZXN5c3RlbS5yZWFkX2JpbmFyeV9m
aWxlKHBhdGgpCiAKICAgICBkZWYgZXhwZWN0ZWRfdGV4dChzZWxmLCB0ZXN0KToKICAgICAgICAg
IiIiUmV0dXJucyB0aGUgdGV4dCBvdXRwdXQgd2UgZXhwZWN0IHRoZSB0ZXN0IHRvIHByb2R1Y2Uu
IiIiCi0gICAgICAgICMgTk9URTogLWV4cGVjdGVkLnR4dCBmaWxlcyBhcmUgQUxXQVlTIHV0Zi04
LiAgSG93ZXZlciwKLSAgICAgICAgIyB3ZSBkbyBub3QgZGVjb2RlIHRoZSBvdXRwdXQgZnJvbSBE
UlQsIHNvIHdlIHNob3VsZCBub3QKLSAgICAgICAgIyBkZWNvZGUgdGhlIC1leHBlY3RlZC50eHQg
dmFsdWVzIGVpdGhlciB0byBhbGxvdyBjb21wYXJpc29ucy4KLSAgICAgICAgdGV4dCA9IHNlbGYu
X2V4cGVjdGVkX2ZpbGVfY29udGVudHModGVzdCwgJy50eHQnLCBOb25lKQotICAgICAgICBpZiBu
b3QgdGV4dDoKKyAgICAgICAgIyBGSVhNRTogRFJUIG91dHB1dCBpcyBhY3R1YWxseSB1dGYtOCwg
YnV0IHNpbmNlIHdlIGRvbid0IGRlY29kZSB0aGUKKyAgICAgICAgIyBvdXRwdXQgZnJvbSBEUlQg
KGluc3RlYWQgdHJlYXRpbmcgaXQgYXMgYSBiaW5hcnkgc3RyaW5nKSwgd2UgcmVhZCB0aGUKKyAg
ICAgICAgIyBiYXNlbGluZXMgYXMgYSBiaW5hcnkgc3RyaW5nLCB0b28uCisgICAgICAgIHBhdGgg
PSBzZWxmLmV4cGVjdGVkX2ZpbGVuYW1lKHRlc3QsICcudHh0JykKKyAgICAgICAgaWYgbm90IHNl
bGYucGF0aF9leGlzdHMocGF0aCk6CiAgICAgICAgICAgICByZXR1cm4gJycKKyAgICAgICAgdGV4
dCA9IHNlbGYuX2ZpbGVzeXN0ZW0ucmVhZF9iaW5hcnlfZmlsZShwYXRoKQogICAgICAgICByZXR1
cm4gdGV4dC5zdHJpcCgiXHJcbiIpLnJlcGxhY2UoIlxyXG4iLCAiXG4iKSArICJcbiIKIAogICAg
IGRlZiBmaWxlbmFtZV90b191cmkoc2VsZiwgZmlsZW5hbWUpOgpAQCAtMzYyLDcgKzM1OSw3IEBA
IGNsYXNzIFBvcnQob2JqZWN0KToKICAgICAgICAgICAgICAgICBwcm90b2NvbCA9ICJodHRwIgog
ICAgICAgICAgICAgcmV0dXJuICIlczovLzEyNy4wLjAuMToldS8lcyIgJSAocHJvdG9jb2wsIHBv
cnQsIHJlbGF0aXZlX3BhdGgpCiAKLSAgICAgICAgcmV0dXJuIGFic3BhdGhfdG9fdXJpKG9zLnBh
dGguYWJzcGF0aChmaWxlbmFtZSkpCisgICAgICAgIHJldHVybiBwYXRoLmFic3BhdGhfdG9fdXJp
KG9zLnBhdGguYWJzcGF0aChmaWxlbmFtZSkpCiAKICAgICBkZWYgdGVzdHMoc2VsZiwgcGF0aHMp
OgogICAgICAgICAiIiJSZXR1cm4gdGhlIGxpc3Qgb2YgdGVzdHMgZm91bmQgKHJlbGF0aXZlIHRv
IGxheW91dF90ZXN0c19kaXIoKS4iIiIKQEAgLTM3MywyMCArMzcwLDE5IEBAIGNsYXNzIFBvcnQo
b2JqZWN0KToKIAogICAgICAgICBVc2VkIGJ5IC0tY2xvYmJlci1vbGQtcmVzdWx0cy4iIiIKICAg
ICAgICAgbGF5b3V0X3Rlc3RzX2RpciA9IHNlbGYubGF5b3V0X3Rlc3RzX2RpcigpCi0gICAgICAg
IHJldHVybiBmaWx0ZXIobGFtYmRhIHg6IG9zLnBhdGguaXNkaXIob3MucGF0aC5qb2luKGxheW91
dF90ZXN0c19kaXIsIHgpKSwKLSAgICAgICAgICAgICAgICAgICAgICBvcy5saXN0ZGlyKGxheW91
dF90ZXN0c19kaXIpKQorICAgICAgICByZXR1cm4gZmlsdGVyKGxhbWJkYSB4OiBzZWxmLl9maWxl
c3lzdGVtLmlzZGlyKHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihsYXlvdXRfdGVzdHNfZGlyLCB4KSks
CisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS5saXN0ZGlyKGxheW91dF90
ZXN0c19kaXIpKQogCiAgICAgZGVmIHBhdGhfaXNkaXIoc2VsZiwgcGF0aCk6Ci0gICAgICAgICIi
IlJldHVybnMgd2hldGhlciB0aGUgcGF0aCByZWZlcnMgdG8gYSBkaXJlY3Rvcnkgb2YgdGVzdHMu
Ci0KLSAgICAgICAgVXNlZCBieSB0ZXN0X2V4cGVjdGF0aW9ucy5weSB0byBhcHBseSBydWxlcyB0
byB3aG9sZSBkaXJlY3Rvcmllcy4iIiIKLSAgICAgICAgcmV0dXJuIG9zLnBhdGguaXNkaXIocGF0
aCkKKyAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYgdGhlIHBhdGggcmVmZXJzIHRvIGEgZGlyZWN0
b3J5IG9mIHRlc3RzLiIiIgorICAgICAgICAjIFVzZWQgYnkgdGVzdF9leHBlY3RhdGlvbnMucHkg
dG8gYXBwbHkgcnVsZXMgdG8gd2hvbGUgZGlyZWN0b3JpZXMuCisgICAgICAgIHJldHVybiBzZWxm
Ll9maWxlc3lzdGVtLmlzZGlyKHBhdGgpCiAKICAgICBkZWYgcGF0aF9leGlzdHMoc2VsZiwgcGF0
aCk6Ci0gICAgICAgICIiIlJldHVybnMgd2hldGhlciB0aGUgcGF0aCByZWZlcnMgdG8gYW4gZXhp
c3RpbmcgdGVzdCBvciBiYXNlbGluZS4iIiIKKyAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYgdGhl
IHBhdGggcmVmZXJzIHRvIGFuIGV4aXN0aW5nIHRlc3Qgb3IgYmFzZWxpbmUuIiIiCiAgICAgICAg
ICMgVXNlZCBieSB0ZXN0X2V4cGVjdGF0aW9ucy5weSB0byBkZXRlcm1pbmUgaWYgYW4gZW50cnkg
cmVmZXJzIHRvIGEKLSAgICAgICAgIyB2YWxpZCB0ZXN0IGFuZCBieSBwcmludGluZy5weSB0byBk
ZXRlcm1pbmUgaWYgYmFzZWxpbmVzIGV4aXN0LiIiIgotICAgICAgICByZXR1cm4gb3MucGF0aC5l
eGlzdHMocGF0aCkKKyAgICAgICAgIyB2YWxpZCB0ZXN0IGFuZCBieSBwcmludGluZy5weSB0byBk
ZXRlcm1pbmUgaWYgYmFzZWxpbmVzIGV4aXN0LgorICAgICAgICByZXR1cm4gc2VsZi5fZmlsZXN5
c3RlbS5leGlzdHMocGF0aCkKIAogICAgIGRlZiB1cGRhdGVfYmFzZWxpbmUoc2VsZiwgcGF0aCwg
ZGF0YSwgZW5jb2RpbmcpOgogICAgICAgICAiIiJVcGRhdGVzIHRoZSBiYXNlbGluZSBmb3IgYSB0
ZXN0LgpAQCAtMzk4LDExICszOTQsMTIgQEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAgICAgICAg
ICAgZGF0YTogY29udGVudHMgb2YgdGhlIGJhc2VsaW5lLgogICAgICAgICAgICAgZW5jb2Rpbmc6
IGZpbGUgZW5jb2RpbmcgdG8gdXNlIGZvciB0aGUgYmFzZWxpbmUuCiAgICAgICAgICIiIgotICAg
ICAgICB3cml0ZV9tb2RlID0gInciCisgICAgICAgICMgRklYTUU6IHJlbW92ZSB0aGUgZW5jb2Rp
bmcgcGFyYW1ldGVyIGluIGZhdm9yIG9mIHRleHQvYmluYXJ5CisgICAgICAgICMgZnVuY3Rpb25z
LgogICAgICAgICBpZiBlbmNvZGluZyBpcyBOb25lOgotICAgICAgICAgICAgd3JpdGVfbW9kZSA9
ICJ3YiIKLSAgICAgICAgd2l0aCBjb2RlY3Mub3BlbihwYXRoLCB3cml0ZV9tb2RlLCBlbmNvZGlu
Zz1lbmNvZGluZykgYXMgZmlsZToKLSAgICAgICAgICAgIGZpbGUud3JpdGUoZGF0YSkKKyAgICAg
ICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ud3JpdGVfYmluYXJ5X2ZpbGUocGF0aCwgZGF0YSkKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ud3JpdGVfdGV4dF9maWxl
KHBhdGgsIGRhdGEpCiAKICAgICBkZWYgdXJpX3RvX3Rlc3RfbmFtZShzZWxmLCB1cmkpOgogICAg
ICAgICAiIiJSZXR1cm4gdGhlIGJhc2UgbGF5b3V0IHRlc3QgbmFtZSBmb3IgYSBnaXZlbiBVUkku
CkBAIC00MTQsNyArNDExLDcgQEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAgICAgICAiIiIKICAg
ICAgICAgdGVzdCA9IHVyaQogICAgICAgICBpZiB1cmkuc3RhcnRzd2l0aCgiZmlsZTovLy8iKToK
LSAgICAgICAgICAgIHByZWZpeCA9IGFic3BhdGhfdG9fdXJpKHNlbGYubGF5b3V0X3Rlc3RzX2Rp
cigpKSArICIvIgorICAgICAgICAgICAgcHJlZml4ID0gcGF0aC5hYnNwYXRoX3RvX3VyaShzZWxm
LmxheW91dF90ZXN0c19kaXIoKSkgKyAiLyIKICAgICAgICAgICAgIHJldHVybiB0ZXN0W2xlbihw
cmVmaXgpOl0KIAogICAgICAgICBpZiB1cmkuc3RhcnRzd2l0aCgiaHR0cDovLzEyNy4wLjAuMTo4
ODgwLyIpOgpAQCAtNDQxLDE4ICs0MzgsMTYgQEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAgICAg
ICBmb3IgdGVzdF9vcl9jYXRlZ29yeSBpbiBzZWxmLnNraXBwZWRfbGF5b3V0X3Rlc3RzKCk6CiAg
ICAgICAgICAgICBpZiB0ZXN0X29yX2NhdGVnb3J5ID09IHRlc3RfbmFtZToKICAgICAgICAgICAg
ICAgICByZXR1cm4gVHJ1ZQotICAgICAgICAgICAgY2F0ZWdvcnkgPSBvcy5wYXRoLmpvaW4oc2Vs
Zi5sYXlvdXRfdGVzdHNfZGlyKCksIHRlc3Rfb3JfY2F0ZWdvcnkpCi0gICAgICAgICAgICBpZiBv
cy5wYXRoLmlzZGlyKGNhdGVnb3J5KSBhbmQgdGVzdF9uYW1lLnN0YXJ0c3dpdGgodGVzdF9vcl9j
YXRlZ29yeSk6CisgICAgICAgICAgICBjYXRlZ29yeSA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihz
ZWxmLmxheW91dF90ZXN0c19kaXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRlc3Rfb3JfY2F0ZWdvcnkpCisgICAgICAgICAgICBpZiAoc2VsZi5fZmls
ZXN5c3RlbS5pc2RpcihjYXRlZ29yeSkgYW5kCisgICAgICAgICAgICAgICAgdGVzdF9uYW1lLnN0
YXJ0c3dpdGgodGVzdF9vcl9jYXRlZ29yeSkpOgogICAgICAgICAgICAgICAgIHJldHVybiBUcnVl
CiAgICAgICAgIHJldHVybiBGYWxzZQogCiAgICAgZGVmIG1heWJlX21ha2VfZGlyZWN0b3J5KHNl
bGYsICpwYXRoKToKICAgICAgICAgIiIiQ3JlYXRlcyB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSBp
ZiBpdCBkb2Vzbid0IGFscmVhZHkgZXhpc3QuIiIiCi0gICAgICAgIHRyeToKLSAgICAgICAgICAg
IG9zLm1ha2VkaXJzKG9zLnBhdGguam9pbigqcGF0aCkpCi0gICAgICAgIGV4Y2VwdCBPU0Vycm9y
LCBlOgotICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FRVhJU1Q6Ci0gICAgICAgICAg
ICAgICAgcmFpc2UKKyAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS5tYXliZV9tYWtlX2RpcmVjdG9y
eSgqcGF0aCkKIAogICAgIGRlZiBuYW1lKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gdGhlIG5h
bWUgb2YgdGhlIHBvcnQgKGUuZy4sICdtYWMnLCAnY2hyb21pdW0td2luLXhwJykuCkBAIC00NzMs
MTkgKzQ2OCwxMyBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAgICAgIGlmIG5vdCBoYXNhdHRy
KHNlbGYuX29wdGlvbnMsIG5hbWUpOgogICAgICAgICAgICAgcmV0dXJuIHNldGF0dHIoc2VsZi5f
b3B0aW9ucywgbmFtZSwgZGVmYXVsdF92YWx1ZSkKIAotICAgICMgRklYTUU6IFRoaXMgY291bGQg
YmUgcmVwbGFjZWQgYnkgZnVuY3Rpb25zIGluIHdlYmtpdHB5LmNvbW1vbi5jaGVja291dC5zY20u
CiAgICAgZGVmIHBhdGhfZnJvbV93ZWJraXRfYmFzZShzZWxmLCAqY29tcHMpOgogICAgICAgICAi
IiJSZXR1cm5zIHRoZSBmdWxsIHBhdGggdG8gcGF0aCBtYWRlIGJ5IGpvaW5pbmcgdGhlIHRvcCBv
ZiB0aGUKICAgICAgICAgV2ViS2l0IHNvdXJjZSB0cmVlIGFuZCB0aGUgbGlzdCBvZiBwYXRoIGNv
bXBvbmVudHMgaW4gfCpjb21wc3wuIiIiCi0gICAgICAgIGlmIG5vdCBzZWxmLl93ZWJraXRfYmFz
ZV9kaXI6Ci0gICAgICAgICAgICBhYnNwYXRoID0gb3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKQot
ICAgICAgICAgICAgc2VsZi5fd2Via2l0X2Jhc2VfZGlyID0gYWJzcGF0aFswOmFic3BhdGguZmlu
ZCgnV2ViS2l0VG9vbHMnKV0KLQotICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYuX3dl
YmtpdF9iYXNlX2RpciwgKmNvbXBzKQorICAgICAgICByZXR1cm4gc2VsZi5fY29uZmlnLnBhdGhf
ZnJvbV93ZWJraXRfYmFzZSgqY29tcHMpCiAKLSAgICAjIEZJWE1FOiBDYWxsZXJzIHNob3VsZCBl
dmVudHVhbGx5IG1vdmUgdG8gc2NtLnNjcmlwdF9wYXRoLgogICAgIGRlZiBzY3JpcHRfcGF0aChz
ZWxmLCBzY3JpcHRfbmFtZSk6Ci0gICAgICAgIHJldHVybiBzZWxmLnBhdGhfZnJvbV93ZWJraXRf
YmFzZSgiV2ViS2l0VG9vbHMiLCAiU2NyaXB0cyIsIHNjcmlwdF9uYW1lKQorICAgICAgICByZXR1
cm4gc2VsZi5fY29uZmlnLnNjcmlwdF9wYXRoKHNjcmlwdF9uYW1lKQogCiAgICAgZGVmIHBhdGhf
dG9fdGVzdF9leHBlY3RhdGlvbnNfZmlsZShzZWxmKToKICAgICAgICAgIiIiVXBkYXRlIHRoZSB0
ZXN0IGV4cGVjdGF0aW9ucyB0byB0aGUgcGFzc2VkLWluIHN0cmluZy4KQEAgLTcyNiw1MCArNzE1
LDggQEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAgICAgICAgICAgICAgICAgICAgICBlLm1lc3Nh
Z2Vfd2l0aF9vdXRwdXQoKSkpCiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcHJldHR5X3BhdGNo
X2Vycm9yX2h0bWwKIAotICAgIGRlZiBfd2Via2l0X2J1aWxkX2RpcmVjdG9yeV9jb21tYW5kKHNl
bGYsIGFyZ3MpOgotICAgICAgICByZXR1cm4gWyJwZXJsIiwgc2VsZi5zY3JpcHRfcGF0aCgid2Vi
a2l0LWJ1aWxkLWRpcmVjdG9yeSIpXSArIGFyZ3MKLQotICAgIEBtZW1vaXplZAotICAgIGRlZiBf
d2Via2l0X3RvcF9sZXZlbF9idWlsZF9kaXJlY3Rvcnkoc2VsZiwgdG9wX2xldmVsPVRydWUpOgot
ICAgICAgICAiIiJUaGlzIGRpcmVjdG9yeSBpcyBhYm92ZSB3aGVyZSBwcm9kdWN0cyBhcmUgYnVp
bHQgdG8gYW5kIGNvbnRhaW5zIHRoaW5ncyBsaWtlIHRoZSBDb25maWd1cmF0aW9uIGZpbGUuIiIi
Ci0gICAgICAgIGFyZ3MgPSBzZWxmLl93ZWJraXRfYnVpbGRfZGlyZWN0b3J5X2NvbW1hbmQoWyIt
LXRvcC1sZXZlbCJdKQotICAgICAgICByZXR1cm4gc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5k
KGFyZ3MpLnJzdHJpcCgpCi0KLSAgICBAbWVtb2l6ZWQKLSAgICBkZWYgX3dlYmtpdF9jb25maWd1
cmF0aW9uX2J1aWxkX2RpcmVjdG9yeShzZWxmLCBjb25maWd1cmF0aW9uPU5vbmUpOgotICAgICAg
ICAiIiJUaGlzIGlzIHdoZXJlIHByb2R1Y3RzIGFyZSBub3JtYWxseSBidWlsdCB0by4iIiIKLSAg
ICAgICAgaWYgbm90IGNvbmZpZ3VyYXRpb246Ci0gICAgICAgICAgICBjb25maWd1cmF0aW9uID0g
c2VsZi5mbGFnX2Zyb21fY29uZmlndXJhdGlvbihzZWxmLmdldF9vcHRpb24oJ2NvbmZpZ3VyYXRp
b24nKSkKLSAgICAgICAgYXJncyA9IHNlbGYuX3dlYmtpdF9idWlsZF9kaXJlY3RvcnlfY29tbWFu
ZChbIi0tY29uZmlndXJhdGlvbiIsIGNvbmZpZ3VyYXRpb25dKQotICAgICAgICByZXR1cm4gc2Vs
Zi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKGFyZ3MpLnJzdHJpcCgpCi0KLSAgICBkZWYgX2NvbmZp
Z3VyYXRpb25fZmlsZV9wYXRoKHNlbGYpOgotICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNl
bGYuX3dlYmtpdF90b3BfbGV2ZWxfYnVpbGRfZGlyZWN0b3J5KCksICJDb25maWd1cmF0aW9uIikK
LQotICAgICMgRWFzeSBvdmVycmlkZSBmb3IgdW5pdCB0ZXN0cwotICAgIGRlZiBfb3Blbl9jb25m
aWd1cmF0aW9uX2ZpbGUoc2VsZik6Ci0gICAgICAgIGNvbmZpZ3VyYXRpb25fcGF0aCA9IHNlbGYu
X2NvbmZpZ3VyYXRpb25fZmlsZV9wYXRoKCkKLSAgICAgICAgcmV0dXJuIGNvZGVjcy5vcGVuKGNv
bmZpZ3VyYXRpb25fcGF0aCwgInIiLCAidXRmLTgiKQotCi0gICAgZGVmIF9yZWFkX2NvbmZpZ3Vy
YXRpb24oc2VsZik6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHdpdGggc2VsZi5fb3Blbl9j
b25maWd1cmF0aW9uX2ZpbGUoKSBhcyBmaWxlOgotICAgICAgICAgICAgICAgIHJldHVybiBmaWxl
LnJlYWRsaW5lKCkucnN0cmlwKCkKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgcmV0dXJu
IE5vbmUKLQotICAgICMgRklYTUU6IFRoaXMgbGlzdCBtYXkgYmUgaW5jb21wbGV0ZSBhcyBBcHBs
ZSBoYXMgc29tZSBzZWtyZXQgY29uZmlncy4KLSAgICBfUkVDT0dOSVpFRF9DT05GSUdVUkFUSU9O
UyA9ICgiRGVidWciLCAiUmVsZWFzZSIpCi0KICAgICBkZWYgZGVmYXVsdF9jb25maWd1cmF0aW9u
KHNlbGYpOgotICAgICAgICAjIEZJWE1FOiBVbmlmeSB0aGlzIHdpdGggd2Via2l0ZGlyLnBtIGNv
bmZpZ3VyYXRpb24gcmVhZGluZyBjb2RlLgotICAgICAgICBjb25maWd1cmF0aW9uID0gc2VsZi5f
cmVhZF9jb25maWd1cmF0aW9uKCkKLSAgICAgICAgaWYgbm90IGNvbmZpZ3VyYXRpb246Ci0gICAg
ICAgICAgICBjb25maWd1cmF0aW9uID0gIlJlbGVhc2UiCi0gICAgICAgIGlmIGNvbmZpZ3VyYXRp
b24gbm90IGluIHNlbGYuX1JFQ09HTklaRURfQ09ORklHVVJBVElPTlM6Ci0gICAgICAgICAgICBf
bG9nLndhcm4oIkNvbmZpZ3VyYXRpb24gXCIlc1wiIGZvdW5kIGluICVzIGlzIG5vdCBhIHJlY29n
bml6ZWQgdmFsdWUuXG4iICUgKGNvbmZpZ3VyYXRpb24sIHNlbGYuX2NvbmZpZ3VyYXRpb25fZmls
ZV9wYXRoKCkpKQotICAgICAgICAgICAgX2xvZy53YXJuKCJTY3JpcHRzIG1heSBmYWlsLiAgU2Vl
ICdzZXQtd2Via2l0LWNvbmZpZ3VyYXRpb24gLS1oZWxwJy4iKQotICAgICAgICByZXR1cm4gY29u
ZmlndXJhdGlvbgorICAgICAgICByZXR1cm4gc2VsZi5fY29uZmlnLmRlZmF1bHRfY29uZmlndXJh
dGlvbigpCiAKICAgICAjCiAgICAgIyBQUk9URUNURUQgUk9VVElORVMKQEAgLTc3Nyw2ICs3MjQs
OCBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAgIyBUaGUgcm91dGluZXMgYmVsb3cgc2hvdWxk
IG9ubHkgYmUgY2FsbGVkIGJ5IHJvdXRpbmVzIGluIHRoaXMgY2xhc3MKICAgICAjIG9yIGFueSBv
ZiBpdHMgc3ViY2xhc3Nlcy4KICAgICAjCisgICAgZGVmIF93ZWJraXRfYnVpbGRfZGlyZWN0b3J5
KHNlbGYsIGFyZ3MpOgorICAgICAgICByZXR1cm4gc2VsZi5fY29uZmlnLmJ1aWxkX2RpcmVjdG9y
eShhcmdzWzBdKQogCiAgICAgZGVmIF9wYXRoX3RvX2FwYWNoZShzZWxmKToKICAgICAgICAgIiIi
UmV0dXJucyB0aGUgZnVsbCBwYXRoIHRvIHRoZSBhcGFjaGUgYmluYXJ5LgpAQCAtODQ4LDggKzc5
Nyw4IEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAgICBkZWYgX3dlYmtpdF9iYXNlbGluZV9wYXRo
KHNlbGYsIHBsYXRmb3JtKToKICAgICAgICAgIiIiUmV0dXJuIHRoZSAgZnVsbCBwYXRoIHRvIHRo
ZSB0b3Agb2YgdGhlIGJhc2VsaW5lIHRyZWUgZm9yIGEKICAgICAgICAgZ2l2ZW4gcGxhdGZvcm0u
IiIiCi0gICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5sYXlvdXRfdGVzdHNfZGlyKCks
ICdwbGF0Zm9ybScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm0pCisgICAg
ICAgIHJldHVybiBzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5sYXlvdXRfdGVzdHNfZGlyKCks
ICdwbGF0Zm9ybScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhdGZv
cm0pCiAKIAogY2xhc3MgRHJpdmVyOgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlX3VuaXR0ZXN0LnB5IGIvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlX3VuaXR0ZXN0LnB5CmluZGV4
IGVlODY4ZTgwZjNhYTBkNjg1NDQ0YjNmMzdkY2VjMTU1NThkYWVmMzYuLjFlOWMyYjc1ZTAyNDkw
OTliMThmMTQ4Mjk3MzQwMWViNjhmMDk5OTEgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZV91bml0dGVzdC5weQorKysgYi9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2VfdW5pdHRlc3Qu
cHkKQEAgLTI4LDQ5ICsyOCwyMSBAQAogCiBpbXBvcnQgb3B0cGFyc2UKIGltcG9ydCBvcwotaW1w
b3J0IFN0cmluZ0lPCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGVtcGZpbGUKIGltcG9ydCB1bml0dGVz
dAogCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ucGF0aCBpbXBvcnQgYWJzcGF0aF90b191
cmkKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0IEV4ZWN1dGl2
ZSwgU2NyaXB0RXJyb3IKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgZXhlY3V0
aXZlX21vY2sKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgZmlsZXN5c3RlbQor
ZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBvdXRwdXRjYXB0dXJlCitmcm9tIHdl
YmtpdHB5LmNvbW1vbi5zeXN0ZW0ucGF0aCBpbXBvcnQgYWJzcGF0aF90b191cmkKIGZyb20gd2Vi
a2l0cHkudGhpcmRwYXJ0eS5tb2NrIGltcG9ydCBNb2NrCiBmcm9tIHdlYmtpdHB5LnRvb2wgaW1w
b3J0IG1vY2t0b29sCiAKIGltcG9ydCBiYXNlCi0KLSMgRklYTUU6IFRoaXMgbWFrZXMgU3RyaW5n
SU8gb2JqZWN0cyB3b3JrIHdpdGggIndpdGgiLiBSZW1vdmUKLSMgd2hlbiB3ZSB1cGdyYWRlIHRv
IDIuNi4KLWNsYXNzIE5ld1N0cmluZ0lPKFN0cmluZ0lPLlN0cmluZ0lPKToKLSAgICBkZWYgX19l
bnRlcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZgotCi0gICAgZGVmIF9fZXhpdF9fKHNl
bGYsIHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spOgotICAgICAgICBwYXNzCi0KLQotY2xhc3MgTW9j
a0V4ZWN1dGl2ZSgpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleGNlcHRpb24pOgotICAgICAg
ICBzZWxmLl9leGNlcHRpb24gPSBleGNlcHRpb24KLQotICAgIGRlZiBydW5fY29tbWFuZChzZWxm
LCAqYXJncywgKiprd2FyZ3MpOgotICAgICAgICByYWlzZSBzZWxmLl9leGNlcHRpb24KLQotCi1j
bGFzcyBVbml0VGVzdFBvcnQoYmFzZS5Qb3J0KToKLSAgICAiIiJTdWJjbGFzcyBvZiBiYXNlLlBv
cnQgdXNlZCBmb3IgdW5pdCB0ZXN0aW5nLiIiIgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25m
aWd1cmF0aW9uX2NvbnRlbnRzPU5vbmUsIGNvbmZpZ3VyYXRpb25fZXhjZXB0aW9uPUlPRXJyb3Is
IGV4ZWN1dGl2ZV9leGNlcHRpb249Tm9uZSk6Ci0gICAgICAgIGJhc2UuUG9ydC5fX2luaXRfXyhz
ZWxmKQotICAgICAgICBzZWxmLl9jb25maWd1cmF0aW9uX2NvbnRlbnRzID0gY29uZmlndXJhdGlv
bl9jb250ZW50cwotICAgICAgICBzZWxmLl9jb25maWd1cmF0aW9uX2V4Y2VwdGlvbiA9IGNvbmZp
Z3VyYXRpb25fZXhjZXB0aW9uCi0gICAgICAgIGlmIGV4ZWN1dGl2ZV9leGNlcHRpb246Ci0gICAg
ICAgICAgICBzZWxmLl9leGVjdXRpdmUgPSBNb2NrRXhlY3V0aXZlKGV4ZWN1dGl2ZV9leGNlcHRp
b24pCi0KLSAgICBkZWYgX29wZW5fY29uZmlndXJhdGlvbl9maWxlKHNlbGYpOgotICAgICAgICBp
ZiBzZWxmLl9jb25maWd1cmF0aW9uX2NvbnRlbnRzOgotICAgICAgICAgICAgcmV0dXJuIE5ld1N0
cmluZ0lPKHNlbGYuX2NvbmZpZ3VyYXRpb25fY29udGVudHMpCi0gICAgICAgIHJhaXNlIHNlbGYu
X2NvbmZpZ3VyYXRpb25fZXhjZXB0aW9uCitpbXBvcnQgY29uZmlnCitpbXBvcnQgY29uZmlnX21v
Y2sKIAogCiBjbGFzcyBQb3J0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0xMDIsMTggKzc0
LDIxIEBAIGNsYXNzIFBvcnRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgcmV0dXJu
IG5ld19maWxlCiAKICAgICBkZWYgdGVzdF9wcmV0dHlfcGF0Y2hfb3NfZXJyb3Ioc2VsZik6Ci0g
ICAgICAgIHBvcnQgPSBVbml0VGVzdFBvcnQoZXhlY3V0aXZlX2V4Y2VwdGlvbj1PU0Vycm9yKQor
ICAgICAgICBwb3J0ID0gYmFzZS5Qb3J0KGV4ZWN1dGl2ZT1leGVjdXRpdmVfbW9jay5Nb2NrRXhl
Y3V0aXZlMihleGNlcHRpb249T1NFcnJvcikpCisgICAgICAgIG9jID0gb3V0cHV0Y2FwdHVyZS5P
dXRwdXRDYXB0dXJlKCkKKyAgICAgICAgb2MuY2FwdHVyZV9vdXRwdXQoKQogICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKHBvcnQucHJldHR5X3BhdGNoX3RleHQoInBhdGNoLnR4dCIpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgIHBvcnQuX3ByZXR0eV9wYXRjaF9lcnJvcl9odG1sKQogCiAgICAg
ICAgICMgVGhpcyB0ZXN0cyByZXBlYXRlZCBjYWxscyB0byBtYWtlIHN1cmUgd2UgY2FjaGUgdGhl
IHJlc3VsdC4KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0LnByZXR0eV9wYXRjaF90ZXh0
KCJwYXRjaC50eHQiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0Ll9wcmV0dHlfcGF0
Y2hfZXJyb3JfaHRtbCkKKyAgICAgICAgb2MucmVzdG9yZV9vdXRwdXQoKQogCiAgICAgZGVmIHRl
c3RfcHJldHR5X3BhdGNoX3NjcmlwdF9lcnJvcihzZWxmKToKICAgICAgICAgIyBGSVhNRTogVGhp
cyBpcyBzb21lIHVnbHkgd2hpdGUtYm94IHRlc3QgaGFja2luZyAuLi4KICAgICAgICAgYmFzZS5f
cHJldHR5X3BhdGNoX2F2YWlsYWJsZSA9IFRydWUKLSAgICAgICAgcG9ydCA9IFVuaXRUZXN0UG9y
dChleGVjdXRpdmVfZXhjZXB0aW9uPVNjcmlwdEVycm9yKQorICAgICAgICBwb3J0ID0gYmFzZS5Q
b3J0KGV4ZWN1dGl2ZT1leGVjdXRpdmVfbW9jay5Nb2NrRXhlY3V0aXZlMihleGNlcHRpb249U2Ny
aXB0RXJyb3IpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQucHJldHR5X3BhdGNoX3Rl
eHQoInBhdGNoLnR4dCIpLAogICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQuX3ByZXR0eV9w
YXRjaF9lcnJvcl9odG1sKQogCkBAIC0xOTQsMTMgKzE2OSw5IEBAIGNsYXNzIFBvcnRUZXN0KHVu
aXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgnbm9zdWNodGhpbmcn
IGluIGRpZmYpCiAKICAgICBkZWYgdGVzdF9kZWZhdWx0X2NvbmZpZ3VyYXRpb25fbm90Zm91bmQo
c2VsZik6Ci0gICAgICAgICMgUmVndWxhciBJT0Vycm9yIHRocm93biB3aGlsZSB0cnlpbmcgdG8g
Z2V0IHRoZSBjb25maWd1cmF0aW9uLgotICAgICAgICBwb3J0ID0gVW5pdFRlc3RQb3J0KCkKLSAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0LmRlZmF1bHRfY29uZmlndXJhdGlvbigpLCAiUmVs
ZWFzZSIpCi0KLSAgICAgICAgIyBNb3JlIGV4b3RpYyBPU0Vycm9yIHRocm93bi4KLSAgICAgICAg
cG9ydCA9IFVuaXRUZXN0UG9ydChjb25maWd1cmF0aW9uX2V4Y2VwdGlvbj1PU0Vycm9yKQotICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQuZGVmYXVsdF9jb25maWd1cmF0aW9uKCksICJSZWxl
YXNlIikKKyAgICAgICAgIyBUZXN0IHRoYXQgd2UgZGVsZWdhdGUgdG8gdGhlIGNvbmZpZyBvYmpl
Y3QgcHJvcGVybHkuCisgICAgICAgIHBvcnQgPSBiYXNlLlBvcnQoY29uZmlnPWNvbmZpZ19tb2Nr
Lk1vY2tDb25maWcoZGVmYXVsdF9jb25maWd1cmF0aW9uPSdkZWZhdWx0JykpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwocG9ydC5kZWZhdWx0X2NvbmZpZ3VyYXRpb24oKSwgJ2RlZmF1bHQnKQog
CiAgICAgZGVmIHRlc3RfbGF5b3V0X3Rlc3RzX3NraXBwaW5nKHNlbGYpOgogICAgICAgICBwb3J0
ID0gYmFzZS5Qb3J0KCkKQEAgLTIwOSwxNCArMTgwLDYgQEAgY2xhc3MgUG9ydFRlc3QodW5pdHRl
c3QuVGVzdENhc2UpOgogICAgICAgICBzZWxmLmFzc2VydFRydWUocG9ydC5za2lwc19sYXlvdXRf
dGVzdCgnbWVkaWEvdmlkZW8tem9vbS5odG1sJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uo
cG9ydC5za2lwc19sYXlvdXRfdGVzdCgnZm9vL2Zvby5odG1sJykpCiAKLSAgICBkZWYgdGVzdF9k
ZWZhdWx0X2NvbmZpZ3VyYXRpb25fZm91bmQoc2VsZik6Ci0gICAgICAgIHBvcnQgPSBVbml0VGVz
dFBvcnQoY29uZmlndXJhdGlvbl9jb250ZW50cz0iRGVidWciKQotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHBvcnQuZGVmYXVsdF9jb25maWd1cmF0aW9uKCksICJEZWJ1ZyIpCi0KLSAgICBkZWYg
dGVzdF9kZWZhdWx0X2NvbmZpZ3VyYXRpb25fdW5rbm93bihzZWxmKToKLSAgICAgICAgcG9ydCA9
IFVuaXRUZXN0UG9ydChjb25maWd1cmF0aW9uX2NvbnRlbnRzPSJ3ZWlyZF92YWx1ZSIpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9ydC5kZWZhdWx0X2NvbmZpZ3VyYXRpb24oKSwgIndlaXJk
X3ZhbHVlIikKLQogICAgIGRlZiB0ZXN0X3NldHVwX3Rlc3RfcnVuKHNlbGYpOgogICAgICAgICBw
b3J0ID0gYmFzZS5Qb3J0KCkKICAgICAgICAgIyBUaGlzIHJvdXRpbmUgaXMgYSBuby1vcC4gV2Ug
anVzdCB0ZXN0IGl0IGZvciBjb3ZlcmFnZS4KQEAgLTIyOSw3ICsxOTIsNiBAQCBjbGFzcyBQb3J0
VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnY3NzMi4x
JyBpbiBkaXJzKQogCiAgICAgZGVmIHRlc3RfZmlsZW5hbWVfdG9fdXJpKHNlbGYpOgotCiAgICAg
ICAgIHBvcnQgPSBiYXNlLlBvcnQoKQogICAgICAgICBsYXlvdXRfdGVzdF9kaXIgPSBwb3J0Lmxh
eW91dF90ZXN0c19kaXIoKQogICAgICAgICB0ZXN0X2ZpbGUgPSBvcy5wYXRoLmpvaW4obGF5b3V0
X3Rlc3RfZGlyLCAiZm9vIiwgImJhci5odG1sIikKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY29uZmlnLnB5IGIvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jb25maWcucHkKaW5kZXggMjM2NDA5
ODY5YjI2MDg5ODBiNTVhYTA5ZmIwNGU1M2NjNGU5YjYyMy4uMDFhM2ViMGVmYjMyOWM0ZjEyY2Q2
OTVmODYxYjNiMjE4MTMwNWMzNyAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jb25maWcucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jb25maWcucHkKQEAgLTMyLDExICszMiw2IEBA
CiAjIEZJWE1FOiBUaGlzIGZpbGUgbmVlZHMgdG8gYmUgdW5pZmllZCB3aXRoIGNvbW1vbi9jaGVj
a291dC9zY20ucHkgYW5kCiAjIGNvbW1vbi9jb25maWcvcG9ydHMucHkgLgogCi1mcm9tIF9fZnV0
dXJlX18gaW1wb3J0IHdpdGhfc3RhdGVtZW50Ci0KLWltcG9ydCBjb2RlY3MKLWltcG9ydCBvcwot
CiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5jaGVja291dCBpbXBvcnQgc2NtCiBmcm9tIHdlYmtpdHB5
LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IGxvZ3V0aWxzCiAKQEAgLTYyLDggKzU3LDkgQEAgY2xhc3Mg
Q29uZmlnKG9iamVjdCk6CiAgICAgICAgICJSZWxlYXNlIjogIi0tcmVsZWFzZSIsCiAgICAgfQog
Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4ZWN1dGl2ZSk6CisgICAgZGVmIF9faW5pdF9fKHNl
bGYsIGV4ZWN1dGl2ZSwgZmlsZXN5c3RlbSk6CiAgICAgICAgIHNlbGYuX2V4ZWN1dGl2ZSA9IGV4
ZWN1dGl2ZQorICAgICAgICBzZWxmLl9maWxlc3lzdGVtID0gZmlsZXN5c3RlbQogICAgICAgICBz
ZWxmLl93ZWJraXRfYmFzZV9kaXIgPSBOb25lCiAgICAgICAgIHNlbGYuX2RlZmF1bHRfY29uZmln
dXJhdGlvbiA9IE5vbmUKICAgICAgICAgc2VsZi5fYnVpbGRfZGlyZWN0b3JpZXMgPSB7fQpAQCAt
MTE1LDcgKzExMSw3IEBAIGNsYXNzIENvbmZpZyhvYmplY3QpOgogICAgICAgICByZXR1cm4gc2Vs
Zi5fZGVmYXVsdF9jb25maWd1cmF0aW9uCiAKICAgICBkZWYgcGF0aF9mcm9tX3dlYmtpdF9iYXNl
KHNlbGYsICpjb21wcyk6Ci0gICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi53ZWJraXRf
YmFzZV9kaXIoKSwgKmNvbXBzKQorICAgICAgICByZXR1cm4gc2VsZi5fZmlsZXN5c3RlbS5qb2lu
KHNlbGYud2Via2l0X2Jhc2VfZGlyKCksICpjb21wcykKIAogICAgIGRlZiB3ZWJraXRfYmFzZV9k
aXIoc2VsZik6CiAgICAgICAgICIiIlJldHVybnMgdGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHRv
cCBvZiB0aGUgV2ViS2l0IHRyZWUuCkBAIC0xMjksMTQgKzEyNSwxNiBAQCBjbGFzcyBDb25maWco
b2JqZWN0KToKICAgICAgICAgcmV0dXJuIHNlbGYuX3dlYmtpdF9iYXNlX2RpcgogCiAgICAgZGVm
IF9zY3JpcHRfcGF0aChzZWxmLCBzY3JpcHRfbmFtZSk6Ci0gICAgICAgIHJldHVybiBvcy5wYXRo
LmpvaW4oc2VsZi53ZWJraXRfYmFzZV9kaXIoKSwgIldlYktpdFRvb2xzIiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiU2NyaXB0cyIsIHNjcmlwdF9uYW1lKQorICAgICAgICByZXR1cm4g
c2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYud2Via2l0X2Jhc2VfZGlyKCksICJXZWJLaXRUb29s
cyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNjcmlwdHMiLCBzY3Jp
cHRfbmFtZSkKIAogICAgIGRlZiBfZGV0ZXJtaW5lX2NvbmZpZ3VyYXRpb24oc2VsZik6CiAgICAg
ICAgICMgVGhpcyBtaXJyb3JzIHRoZSBsb2dpYyBpbiB3ZWJraXRkaXJzLnBtOmRldGVybWluZUNv
bmZpZ3VyYXRpb24oKS4KICAgICAgICAgZ2xvYmFsIF9kZXRlcm1pbmVkX2NvbmZpZ3VyYXRpb24K
ICAgICAgICAgaWYgX2RldGVybWluZWRfY29uZmlndXJhdGlvbiA9PSAtMToKICAgICAgICAgICAg
IGNvbnRlbnRzID0gc2VsZi5fcmVhZF9jb25maWd1cmF0aW9uKCkKKyAgICAgICAgICAgIGlmIG5v
dCBjb250ZW50czoKKyAgICAgICAgICAgICAgICBjb250ZW50cyA9ICJSZWxlYXNlIgogICAgICAg
ICAgICAgaWYgY29udGVudHMgPT0gIkRlcGxveW1lbnQiOgogICAgICAgICAgICAgICAgIGNvbnRl
bnRzID0gIlJlbGVhc2UiCiAgICAgICAgICAgICBpZiBjb250ZW50cyA9PSAiRGV2ZWxvcG1lbnQi
OgpAQCAtMTQ1LDEwICsxNDMsOSBAQCBjbGFzcyBDb25maWcob2JqZWN0KToKICAgICAgICAgcmV0
dXJuIF9kZXRlcm1pbmVkX2NvbmZpZ3VyYXRpb24KIAogICAgIGRlZiBfcmVhZF9jb25maWd1cmF0
aW9uKHNlbGYpOgotICAgICAgICBjb25maWd1cmF0aW9uX3BhdGggPSBvcy5wYXRoLmpvaW4oc2Vs
Zi5idWlsZF9kaXJlY3RvcnkoTm9uZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiQ29uZmlndXJhdGlvbiIpCi0gICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0
cyhjb25maWd1cmF0aW9uX3BhdGgpOgorICAgICAgICBjb25maWd1cmF0aW9uX3BhdGggPSBzZWxm
Ll9maWxlc3lzdGVtLmpvaW4oc2VsZi5idWlsZF9kaXJlY3RvcnkoTm9uZSksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29uZmlndXJhdGlvbiIp
CisgICAgICAgIGlmIG5vdCBzZWxmLl9maWxlc3lzdGVtLmV4aXN0cyhjb25maWd1cmF0aW9uX3Bh
dGgpOgogICAgICAgICAgICAgcmV0dXJuIE5vbmUKIAotICAgICAgICB3aXRoIGNvZGVjcy5vcGVu
KGNvbmZpZ3VyYXRpb25fcGF0aCwgInIiLCAidXRmLTgiKSBhcyBmaDoKLSAgICAgICAgICAgIHJl
dHVybiBmaC5yZWFkKCkucnN0cmlwKCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVzeXN0ZW0u
cmVhZF90ZXh0X2ZpbGUoY29uZmlndXJhdGlvbl9wYXRoKS5yc3RyaXAoKQpkaWZmIC0tZ2l0IGEv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jb25maWdfdW5p
dHRlc3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2NvbmZpZ191bml0dGVzdC5weQppbmRleCA0Njc0Y2JhMzYwZjJhZWJjM2EzOWQxODMxZWY3ZGQz
YjYyYmIyMDgyLi41Njg1OTM4ZWVjNjE0ZTg0NGFjOWYxOTgxN2U0MWE4MDk4MTlkZWEzIDEwMDY0
NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nv
bmZpZ191bml0dGVzdC5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L2NvbmZpZ191bml0dGVzdC5weQpAQCAtMjYsMTQ5ICsyNiwxMDggQEAKICMg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKLWltcG9ydCBjb2RlY3MKLWltcG9ydCBvcwot
aW1wb3J0IFN0cmluZ0lPCiBpbXBvcnQgdW5pdHRlc3QKIAorZnJvbSB3ZWJraXRweS5jb21tb24u
c3lzdGVtIGltcG9ydCBleGVjdXRpdmUKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBv
cnQgZXhlY3V0aXZlX21vY2sKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgZmls
ZXN5c3RlbQorZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBmaWxlc3lzdGVtX21v
Y2sKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgb3V0cHV0Y2FwdHVyZQogCiBp
bXBvcnQgY29uZmlnCiAKLQotIyBGSVhNRTogVGhpcyBtYWtlcyBTdHJpbmdJTyBvYmplY3RzIHdv
cmsgd2l0aCAid2l0aCIuIFJlbW92ZQotIyB3aGVuIHdlIHVwZ3JhZGUgdG8gMi42LgotY2xhc3Mg
TmV3U3RyaW5nSU8oU3RyaW5nSU8uU3RyaW5nSU8pOgotICAgIGRlZiBfX2VudGVyX18oc2VsZik6
Ci0gICAgICAgIHJldHVybiBzZWxmCi0KLSAgICBkZWYgX19leGl0X18oc2VsZiwgdHlwZSwgdmFs
dWUsIHRyYWNlYmFjayk6Ci0gICAgICAgIHBhc3MKLQotCi1jbGFzcyBNb2NrRXhlY3V0aXZlKG9i
amVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG91dHB1dD0nJywgZXhpdF9jb2RlPTApOgot
ICAgICAgICBzZWxmLl9vdXRwdXQgPSBvdXRwdXQKLSAgICAgICAgc2VsZi5fZXhpdF9jb2RlID0g
ZXhpdF9jb2RlCi0KLSAgICBkZWYgcnVuX2NvbW1hbmQoc2VsZiwgYXJnX2xpc3QsIHJldHVybl9l
eGl0X2NvZGU9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgIGRlY29kZV9vdXRwdXQ9RmFsc2Up
OgotICAgICAgICBpZiByZXR1cm5fZXhpdF9jb2RlOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYu
X2V4aXRfY29kZQotICAgICAgICByZXR1cm4gc2VsZi5fb3V0cHV0Ci0KLQogY2xhc3MgQ29uZmln
VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAg
ICBjb25maWcuY2xlYXJfY2FjaGVkX2NvbmZpZ3VyYXRpb24oKQogCi0gICAgZGVmIGFzc2VydENv
bmZpZ3VyYXRpb24oc2VsZiwgY29udGVudHMsIGV4cGVjdGVkKToKKyAgICBkZWYgbWFrZV9jb25m
aWcoc2VsZiwgb3V0cHV0PScnLCBmaWxlcz17fSwgZXhpdF9jb2RlPTApOgorICAgICAgICBlID0g
ZXhlY3V0aXZlX21vY2suTW9ja0V4ZWN1dGl2ZTIob3V0cHV0PW91dHB1dCwgZXhpdF9jb2RlPWV4
aXRfY29kZSkKKyAgICAgICAgZnMgPSBmaWxlc3lzdGVtX21vY2suTW9ja0ZpbGVTeXN0ZW0oZmls
ZXMpCisgICAgICAgIHJldHVybiBjb25maWcuQ29uZmlnKGUsIGZzKQorCisgICAgZGVmIGFzc2Vy
dF9jb25maWd1cmF0aW9uKHNlbGYsIGNvbnRlbnRzLCBleHBlY3RlZCk6CiAgICAgICAgICMgVGhp
cyB0ZXN0cyB0aGF0IGEgY29uZmlndXJhdGlvbiBmaWxlIGNvbnRhaW5pbmcKICAgICAgICAgIyBf
Y29udGVudHNfIGVuZHNkIHVwIGJlaW5nIGludGVycHJldGVkIGFzIF9leHBlY3RlZF8uCi0gICAg
ICAgICMKLSAgICAgICAgIyBGSVhNRTogcmV3cml0ZSB0aGlzIHdoZW4gd2UgaGF2ZSBhIGZpbGVz
eXN0ZW0gYWJzdHJhY3Rpb24gd2UKLSAgICAgICAgIyBjYW4gbW9jayBvdXQgbW9yZSBlYXNpbHku
Ci0gICAgICAgIGNvbmZpZy5jbGVhcl9jYWNoZWRfY29uZmlndXJhdGlvbigpCi0gICAgICAgIG9y
aWdfb3BlbiA9IGNvZGVjcy5vcGVuCi0KLSAgICAgICAgZGVmIHdyYXBfb3Blbihjb250ZW50cyk6
Ci0gICAgICAgICAgICBkZWYgb3Blbl93cmFwcGVyKHBhdGgsIG1vZGUsIGVuY29kaW5nKToKLSAg
ICAgICAgICAgICAgICByZXR1cm4gTmV3U3RyaW5nSU8oY29udGVudHMpCi0gICAgICAgICAgICBy
ZXR1cm4gb3Blbl93cmFwcGVyCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgb3JpZ19leGlz
dHMgPSBvcy5wYXRoLmV4aXN0cwotICAgICAgICAgICAgb3MucGF0aC5leGlzdHMgPSBsYW1iZGEg
cDogVHJ1ZQotICAgICAgICAgICAgY29kZWNzLm9wZW4gPSB3cmFwX29wZW4oY29udGVudHMpCi0K
LSAgICAgICAgICAgIGUgPSBNb2NrRXhlY3V0aXZlKG91dHB1dD0nZm9vJykKLSAgICAgICAgICAg
IGMgPSBjb25maWcuQ29uZmlnKGUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZGVm
YXVsdF9jb25maWd1cmF0aW9uKCksIGV4cGVjdGVkKQotICAgICAgICBmaW5hbGx5OgotICAgICAg
ICAgICAgb3MucGF0aC5leGlzdHMgPSBvcmlnX2V4aXN0cwotICAgICAgICAgICAgY29kZWNzLm9w
ZW4gPSBvcmlnX29wZW4KKyAgICAgICAgYyA9IHNlbGYubWFrZV9jb25maWcoJ2ZvbycsIHsnZm9v
L0NvbmZpZ3VyYXRpb24nOiBjb250ZW50c30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5k
ZWZhdWx0X2NvbmZpZ3VyYXRpb24oKSwgZXhwZWN0ZWQpCiAKICAgICBkZWYgdGVzdF9idWlsZF9k
aXJlY3RvcnlfdG9wbGV2ZWwoc2VsZik6Ci0gICAgICAgIGUgPSBNb2NrRXhlY3V0aXZlKG91dHB1
dD0idG9wbGV2ZWwiKQotICAgICAgICBjID0gY29uZmlnLkNvbmZpZyhlKQorICAgICAgICBjID0g
c2VsZi5tYWtlX2NvbmZpZygndG9wbGV2ZWwnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMu
YnVpbGRfZGlyZWN0b3J5KE5vbmUpLCAndG9wbGV2ZWwnKQogCiAgICAgICAgICMgVGVzdCBhZ2Fp
biB0byBjaGVjayBjYWNoaW5nCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5idWlsZF9kaXJl
Y3RvcnkoTm9uZSksICd0b3BsZXZlbCcpCiAKICAgICBkZWYgdGVzdF9idWlsZF9kaXJlY3Rvcnlf
X3JlbGVhc2Uoc2VsZik6Ci0gICAgICAgIGUgPSBNb2NrRXhlY3V0aXZlKG91dHB1dD0icmVsZWFz
ZSIpCi0gICAgICAgIGMgPSBjb25maWcuQ29uZmlnKGUpCisgICAgICAgIGMgPSBzZWxmLm1ha2Vf
Y29uZmlnKCdyZWxlYXNlJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmJ1aWxkX2RpcmVj
dG9yeSgnUmVsZWFzZScpLCAncmVsZWFzZScpCiAKICAgICBkZWYgdGVzdF9idWlsZF9kaXJlY3Rv
cnlfX2RlYnVnKHNlbGYpOgotICAgICAgICBlID0gTW9ja0V4ZWN1dGl2ZShvdXRwdXQ9ImRlYnVn
IikKLSAgICAgICAgYyA9IGNvbmZpZy5Db25maWcoZSkKKyAgICAgICAgYyA9IHNlbGYubWFrZV9j
b25maWcoJ2RlYnVnJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmJ1aWxkX2RpcmVjdG9y
eSgnRGVidWcnKSwgJ2RlYnVnJykKIAogICAgIGRlZiB0ZXN0X2J1aWxkX2RpcmVjdG9yeV9fdW5r
bm93bihzZWxmKToKLSAgICAgICAgZSA9IE1vY2tFeGVjdXRpdmUob3V0cHV0PSJ1bmtub3duIikK
LSAgICAgICAgYyA9IGNvbmZpZy5Db25maWcoZSkKKyAgICAgICAgYyA9IHNlbGYubWFrZV9jb25m
aWcoInVua25vd24iKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgYy5idWls
ZF9kaXJlY3RvcnksICdVbmtub3duJykKIAogICAgIGRlZiB0ZXN0X2J1aWxkX2R1bXByZW5kZXJ0
cmVlX19zdWNjZXNzKHNlbGYpOgotICAgICAgICBlID0gTW9ja0V4ZWN1dGl2ZShleGl0X2NvZGU9
MCkKLSAgICAgICAgYyA9IGNvbmZpZy5Db25maWcoZSkKKyAgICAgICAgYyA9IHNlbGYubWFrZV9j
b25maWcoZXhpdF9jb2RlPTApCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjLmJ1aWxkX2R1bXBy
ZW5kZXJ0cmVlKCJEZWJ1ZyIpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoYy5idWlsZF9kdW1w
cmVuZGVydHJlZSgiUmVsZWFzZSIpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJv
ciwgYy5idWlsZF9kdW1wcmVuZGVydHJlZSwgIlVua25vd24iKQogCiAgICAgZGVmIHRlc3RfYnVp
bGRfZHVtcHJlbmRlcnRyZWVfX2ZhaWx1cmUoc2VsZik6Ci0gICAgICAgIGUgPSBNb2NrRXhlY3V0
aXZlKGV4aXRfY29kZT0tMSkKLSAgICAgICAgYyA9IGNvbmZpZy5Db25maWcoZSkKKyAgICAgICAg
YyA9IHNlbGYubWFrZV9jb25maWcoZXhpdF9jb2RlPS0xKQogCisgICAgICAgICMgRklYTUU6IEJ1
aWxkIGZhaWx1cmVzIHNob3VsZCBsb2cgZXJyb3JzLiBIb3dldmVyLCB0aGUgbWVzc2FnZSB3ZQor
ICAgICAgICAjIGdldCBkZXBlbmRzIG9uIGhvdyB3ZSdyZSBiZWluZyBjYWxsZWQ7IGFzIGEgc3Rh
bmRhbG9uZSB0ZXN0LAorICAgICAgICAjIHdlJ2xsIGdldCB0aGUgIm5vIGhhbmRsZXJzIGZvdW5k
IiBtZXNzYWdlLiBBcyBwYXJ0IG9mCisgICAgICAgICMgdGVzdC13ZWJraXRweSwgd2UgZ2V0IHRo
ZSBhY3R1YWwgbWVzc2FnZS4gUmVhbGx5LCB3ZSBuZWVkCisgICAgICAgICMgb3V0cHV0Y2FwdHVy
ZSB0byBpbnN0YWxsIGl0cyBvd24gaGFuZGxlci4KICAgICAgICAgb2MgPSBvdXRwdXRjYXB0dXJl
Lk91dHB1dENhcHR1cmUoKQogICAgICAgICBvYy5jYXB0dXJlX291dHB1dCgpCiAgICAgICAgIHNl
bGYuYXNzZXJ0RmFsc2UoYy5idWlsZF9kdW1wcmVuZGVydHJlZSgnRGVidWcnKSkKLSAgICAgICAg
KG91dCwgZXJyKSA9IG9jLnJlc3RvcmVfb3V0cHV0KCkKKyAgICAgICAgb2MucmVzdG9yZV9vdXRw
dXQoKQogCiAgICAgICAgIG9jLmNhcHR1cmVfb3V0cHV0KCkKICAgICAgICAgc2VsZi5hc3NlcnRG
YWxzZShjLmJ1aWxkX2R1bXByZW5kZXJ0cmVlKCdSZWxlYXNlJykpCiAgICAgICAgIG9jLnJlc3Rv
cmVfb3V0cHV0KCkKIAogICAgIGRlZiB0ZXN0X2RlZmF1bHRfY29uZmlndXJhdGlvbl9fcmVsZWFz
ZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRDb25maWd1cmF0aW9uKCdSZWxlYXNlJywgJ1Jl
bGVhc2UnKQorICAgICAgICBzZWxmLmFzc2VydF9jb25maWd1cmF0aW9uKCdSZWxlYXNlJywgJ1Jl
bGVhc2UnKQogCiAgICAgZGVmIHRlc3RfZGVmYXVsdF9jb25maWd1cmF0aW9uX19kZWJ1ZyhzZWxm
KToKLSAgICAgICAgc2VsZi5hc3NlcnRDb25maWd1cmF0aW9uKCdEZWJ1ZycsICdEZWJ1ZycpCisg
ICAgICAgIHNlbGYuYXNzZXJ0X2NvbmZpZ3VyYXRpb24oJ0RlYnVnJywgJ0RlYnVnJykKIAogICAg
IGRlZiB0ZXN0X2RlZmF1bHRfY29uZmlndXJhdGlvbl9fZGVwbG95bWVudChzZWxmKToKLSAgICAg
ICAgc2VsZi5hc3NlcnRDb25maWd1cmF0aW9uKCdEZXBsb3ltZW50JywgJ1JlbGVhc2UnKQorICAg
ICAgICBzZWxmLmFzc2VydF9jb25maWd1cmF0aW9uKCdEZXBsb3ltZW50JywgJ1JlbGVhc2UnKQog
CiAgICAgZGVmIHRlc3RfZGVmYXVsdF9jb25maWd1cmF0aW9uX19kZXZlbG9wbWVudChzZWxmKToK
LSAgICAgICAgc2VsZi5hc3NlcnRDb25maWd1cmF0aW9uKCdEZXZlbG9wbWVudCcsICdEZWJ1Zycp
CisgICAgICAgIHNlbGYuYXNzZXJ0X2NvbmZpZ3VyYXRpb24oJ0RldmVsb3BtZW50JywgJ0RlYnVn
JykKIAogICAgIGRlZiB0ZXN0X2RlZmF1bHRfY29uZmlndXJhdGlvbl9fbm90Zm91bmQoc2VsZik6
CiAgICAgICAgICMgVGhpcyB0ZXN0cyB3aGF0IGhhcHBlbnMgaWYgdGhlIGRlZmF1bHQgY29uZmln
dXJhdGlvbiBmaWxlCiAgICAgICAgICMgZG9lc24ndCBleGlzdC4KLSAgICAgICAgY29uZmlnLmNs
ZWFyX2NhY2hlZF9jb25maWd1cmF0aW9uKCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgb3Jp
Z19leGlzdHMgPSBvcy5wYXRoLmV4aXN0cwotICAgICAgICAgICAgb3MucGF0aC5leGlzdHMgPSBs
YW1iZGEgcDogRmFsc2UKLSAgICAgICAgICAgIGUgPSBNb2NrRXhlY3V0aXZlKG91dHB1dD0iZm9v
IikKLSAgICAgICAgICAgIGMgPSBjb25maWcuQ29uZmlnKGUpCi0gICAgICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKGMuZGVmYXVsdF9jb25maWd1cmF0aW9uKCksICJSZWxlYXNlIikKLSAgICAgICAg
ZmluYWxseToKLSAgICAgICAgICAgIG9zLnBhdGguZXhpc3RzID0gb3JpZ19leGlzdHMKKyAgICAg
ICAgYyA9IHNlbGYubWFrZV9jb25maWcob3V0cHV0PSdmb28nLCBmaWxlcz17J2Zvby9Db25maWd1
cmF0aW9uJzogTm9uZX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5kZWZhdWx0X2NvbmZp
Z3VyYXRpb24oKSwgIlJlbGVhc2UiKQogCiAgICAgZGVmIHRlc3RfZGVmYXVsdF9jb25maWd1cmF0
aW9uX191bmtub3duKHNlbGYpOgogICAgICAgICAjIElnbm9yZSB0aGUgd2FybmluZyBhYm91dCBh
biB1bmtub3duIGNvbmZpZ3VyYXRpb24gdmFsdWUuCiAgICAgICAgIG9jID0gb3V0cHV0Y2FwdHVy
ZS5PdXRwdXRDYXB0dXJlKCkKICAgICAgICAgb2MuY2FwdHVyZV9vdXRwdXQoKQotICAgICAgICBz
ZWxmLmFzc2VydENvbmZpZ3VyYXRpb24oJ1Vua25vd24nLCAnVW5rbm93bicpCisgICAgICAgIHNl
bGYuYXNzZXJ0X2NvbmZpZ3VyYXRpb24oJ1Vua25vd24nLCAnVW5rbm93bicpCiAgICAgICAgIG9j
LnJlc3RvcmVfb3V0cHV0KCkKIAotICAgIGRlZiB0ZXN0X3BhdGhfZnJvbV93ZWJraXRfYmFzZShz
ZWxmLCAqY29tcHMpOgotICAgICAgICBjID0gY29uZmlnLkNvbmZpZyhOb25lKQorICAgIGRlZiB0
ZXN0X3BhdGhfZnJvbV93ZWJraXRfYmFzZShzZWxmKToKKyAgICAgICAgIyBGSVhNRTogV2UgdXNl
IGEgcmVhbCBmaWxlc3lzdGVtIGhlcmUuIFNob3VsZCB0aGlzIG1vdmUgdG8gYQorICAgICAgICAj
IG1vY2tlZCBvbmU/CisgICAgICAgIGMgPSBjb25maWcuQ29uZmlnKGV4ZWN1dGl2ZS5FeGVjdXRp
dmUoKSwgZmlsZXN5c3RlbS5GaWxlU3lzdGVtKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShj
LnBhdGhfZnJvbV93ZWJraXRfYmFzZSgnZm9vJykpCiAKICAgICBkZWYgdGVzdF93ZWJraXRfYmFz
ZV9kaXIoc2VsZik6Ci0gICAgICAgIGMgPSBjb25maWcuQ29uZmlnKE5vbmUpCisgICAgICAgICMg
RklYTUU6IFdlIHVzZSBhIHJlYWwgZmlsZXN5c3RlbSBoZXJlLiBTaG91bGQgdGhpcyBtb3ZlIHRv
IGEKKyAgICAgICAgIyBtb2NrZWQgb25lPworICAgICAgICBjID0gY29uZmlnLkNvbmZpZyhleGVj
dXRpdmUuRXhlY3V0aXZlKCksIGZpbGVzeXN0ZW0uRmlsZVN5c3RlbSgpKQogICAgICAgICBzZWxm
LmFzc2VydFRydWUoYy53ZWJraXRfYmFzZV9kaXIoKSkKIAogCmRpZmYgLS1naXQgYS9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2dvb2dsZV9jaHJvbWVfdW5p
dHRlc3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2dvb2dsZV9jaHJvbWVfdW5pdHRlc3QucHkKaW5kZXggYzRjODg1ZDYzMjlhYjNkMGJiYWZhYWVj
YTE3MzQzYTQ2NGVlN2EzNS4uZTYwYzI3NDE2ZGViMzc5MzVmNDBiNDUzNTdjYmQyOTcxZDJjNmVh
NiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC9nb29nbGVfY2hyb21lX3VuaXR0ZXN0LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZ29vZ2xlX2Nocm9tZV91bml0dGVzdC5weQpAQCAt
MjgsNyArMjgsOCBAQCBpbXBvcnQgY29kZWNzCiBpbXBvcnQgb3MKIGltcG9ydCB1bml0dGVzdAog
Ci1pbXBvcnQgYmFzZV91bml0dGVzdAorZnJvbSB3ZWJraXRweS5jb21tb24gaW1wb3J0IG5ld3N0
cmluZ2lvCisKIGltcG9ydCBmYWN0b3J5CiBpbXBvcnQgZ29vZ2xlX2Nocm9tZQogCkBAIC03Nyw3
ICs3OCw3IEBAIGNsYXNzIEdldEdvb2dsZUNocm9tZVBvcnRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNl
KToKIAogICAgICAgICBkZWYgbW9ja19vcGVuKHBhdGgsIG1vZGUsIGVuY29kaW5nKToKICAgICAg
ICAgICAgIGlmICd0ZXN0X2V4cGVjdGF0aW9uc19jaHJvbWUudHh0JyBpbiBwYXRoOgotICAgICAg
ICAgICAgICAgIHJldHVybiBiYXNlX3VuaXR0ZXN0Lk5ld1N0cmluZ0lPKGV4cGVjdGVkX3N0cmlu
ZykKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3c3RyaW5naW8uU3RyaW5nSU8oZXhwZWN0ZWRf
c3RyaW5nKQogICAgICAgICAgICAgcmV0dXJuIG9yaWdfb3BlbihwYXRoLCBtb2RlLCBlbmNvZGlu
ZykKIAogICAgICAgICB0cnk6CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYmtpdC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Via2l0LnB5CmluZGV4IDBiMzI0ZjU1MmE1NTA4ODA5
YmQ4OGM4N2YyODJiNjEwZGYzNzY4YzkuLjUxZjU3YzQwZTY2NjE2N2IxOGNkZjUyZDY0MjAxODc1
OTY1MjQ3ZTggMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvd2Via2l0LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvd2Via2l0LnB5CkBAIC04MSwxNCArODEsOCBAQCBjbGFzcyBXZWJL
aXRQb3J0KGJhc2UuUG9ydCk6CiAgICAgICAgIHJldHVybiAnJwogCiAgICAgZGVmIF9idWlsZF9k
cml2ZXIoc2VsZik6Ci0gICAgICAgIGV4aXRfY29kZSA9IHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29t
bWFuZChbCi0gICAgICAgICAgICBzZWxmLnNjcmlwdF9wYXRoKCJidWlsZC1kdW1wcmVuZGVydHJl
ZSIpLAotICAgICAgICAgICAgc2VsZi5mbGFnX2Zyb21fY29uZmlndXJhdGlvbihzZWxmLmdldF9v
cHRpb24oJ2NvbmZpZ3VyYXRpb24nKSksCi0gICAgICAgIF0sIHJldHVybl9leGl0X2NvZGU9VHJ1
ZSkKLSAgICAgICAgaWYgZXhpdF9jb2RlICE9IDA6Ci0gICAgICAgICAgICBfbG9nLmVycm9yKCJG
YWlsZWQgdG8gYnVpbGQgRHVtcFJlbmRlclRyZWUiKQotICAgICAgICAgICAgcmV0dXJuIEZhbHNl
Ci0gICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGNvbmZpZ3VyYXRpb24gPSBzZWxmLmdldF9v
cHRpb24oJ2NvbmZpZ3VyYXRpb24nKQorICAgICAgICByZXR1cm4gc2VsZi5fY29uZmlnLmJ1aWxk
X2R1bXByZW5kZXJ0cmVlKGNvbmZpZ3VyYXRpb24pCiAKICAgICBkZWYgX2NoZWNrX2RyaXZlcihz
ZWxmKToKICAgICAgICAgZHJpdmVyX3BhdGggPSBzZWxmLl9wYXRoX3RvX2RyaXZlcigpCkBAIC0z
NTcsOCArMzUxLDggQEAgY2xhc3MgV2ViS2l0UG9ydChiYXNlLlBvcnQpOgogICAgICAgICAgICAg
J21hYy10aWdlcicsICdtYWMtbGVvcGFyZCcsICdtYWMtc25vd2xlb3BhcmQnKQogCiAgICAgZGVm
IF9idWlsZF9wYXRoKHNlbGYsICpjb21wcyk6Ci0gICAgICAgIGJ1aWxkX3Jvb3QgPSBzZWxmLl93
ZWJraXRfY29uZmlndXJhdGlvbl9idWlsZF9kaXJlY3RvcnkoKQotICAgICAgICByZXR1cm4gb3Mu
cGF0aC5qb2luKGJ1aWxkX3Jvb3QsICpjb21wcykKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVz
eXN0ZW0uam9pbihzZWxmLl9jb25maWcuYnVpbGRfZGlyZWN0b3J5KAorICAgICAgICAgICAgc2Vs
Zi5nZXRfb3B0aW9uKCdjb25maWd1cmF0aW9uJykpLCAqY29tcHMpCiAKICAgICBkZWYgX3BhdGhf
dG9fZHJpdmVyKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fYnVpbGRfcGF0aCgnRHVtcFJl
bmRlclRyZWUnKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkKaW5k
ZXggZjIxZTdhNWU3NGIyOGJjZjBlMTNhZDM1NjUwMGJiYjg5YmExYjcwOC4uMjQ4YTI5MWQzOTMw
MzI1ZmM3MmNiZjA2ZGZkNjJlM2FkMDZhNDIyYiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weQor
KysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0
X3Rlc3RzX3VuaXR0ZXN0LnB5CkBAIC0zODAsMzEgKzM4MCwzMCBAQCBjbGFzcyBSZWJhc2VsaW5l
VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgICAgICBiYXNlbGluZSA9IGZpbGUgKyAi
LWV4cGVjdGVkIiArIGV4dAogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueShmLmZpbmQo
YmFzZWxpbmUpICE9IC0xIGZvciBmIGluIGZpbGVfbGlzdCkpCiAKLSAgICAjIEZJWE1FOiBUaGlz
IHRlc3QgaXMgZmFpbGluZyBvbiB0aGUgYm90cy4gQWxzbywgdGhpcyB0ZXN0IHRvdWNoZXMgdGhl
Ci0gICAgIyAgICAgICAgZmlsZSBzeXN0ZW0uICBVbml0IHRlc3RzIHNob3VsZCBub3QgcmVhZCBv
ciB3cml0ZSB0aGUgZmlsZSBzeXN0ZW0uCi0gICAgIyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3ODc5CiAgICAgZGVmIGRpc2FibGVkX3Rlc3RfcmVzZXRf
cmVzdWx0cyhzZWxmKToKKyAgICAgICAgIyBGSVhNRTogVGhpcyB0ZXN0IGlzIGRpc2FibGVkIHVu
dGlsIHdlIGNhbiByZXdyaXRlIGl0IHRvIHVzZSBhCisgICAgICAgICMgbW9jayBmaWxlc3lzdGVt
LgorICAgICAgICAjCisgICAgICAgICMgVGVzdCB0aGF0IHdlIHVwZGF0ZSBleHBlY3RhdGlvbnMg
aW4gcGxhY2UuIElmIHRoZSBleHBlY3RhdGlvbgorICAgICAgICAjIGlzIG1pc3NpbmcsIHVwZGF0
ZSB0aGUgZXhwZWN0ZWQgZ2VuZXJpYyBsb2NhdGlvbi4KICAgICAgICAgZmlsZV9saXN0ID0gW10K
LSAgICAgICAgb3JpZ2luYWxfb3BlbiA9IGNvZGVjcy5vcGVuCi0gICAgICAgIHRyeToKLSAgICAg
ICAgICAgICMgVGVzdCB0aGF0IHdlIHVwZGF0ZSBleHBlY3RhdGlvbnMgaW4gcGxhY2UuIElmIHRo
ZSBleHBlY3RhdGlvbgotICAgICAgICAgICAgIyBpcyBtaXNzaW5nLCB1cGRhdGUgdGhlIGV4cGVj
dGVkIGdlbmVyaWMgbG9jYXRpb24uCi0gICAgICAgICAgICBmaWxlX2xpc3QgPSBbXQotICAgICAg
ICAgICAgY29kZWNzLm9wZW4gPSBfbW9ja2VkX29wZW4ob3JpZ2luYWxfb3BlbiwgZmlsZV9saXN0
KQotICAgICAgICAgICAgcGFzc2luZ19ydW4oWyctLXBpeGVsLXRlc3RzJywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAnLS1yZXNldC1yZXN1bHRzJywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAncGFzc2VzL2ltYWdlLmh0bWwnLAotICAgICAgICAgICAgICAgICAgICAgICAgICdmYWlsdXJl
cy9leHBlY3RlZC9taXNzaW5nX2ltYWdlLmh0bWwnXSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICB0ZXN0c19pbmNsdWRlZD1UcnVlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4o
ZmlsZV9saXN0KSwgNikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0QmFzZWxpbmVzKGZpbGVfbGlz
dCwKLSAgICAgICAgICAgICAgICAiZGF0YS9wYXNzZXMvaW1hZ2UiKQotICAgICAgICAgICAgc2Vs
Zi5hc3NlcnRCYXNlbGluZXMoZmlsZV9saXN0LAotICAgICAgICAgICAgICAgICJkYXRhL2ZhaWx1
cmVzL2V4cGVjdGVkL21pc3NpbmdfaW1hZ2UiKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAg
ICAgY29kZWNzLm9wZW4gPSBvcmlnaW5hbF9vcGVuCi0KLSAgICBkZWYgdGVzdF9uZXdfYmFzZWxp
bmUoc2VsZik6CisgICAgICAgIHBhc3NpbmdfcnVuKFsnLS1waXhlbC10ZXN0cycsCisgICAgICAg
ICAgICAgICAgICAgICAgICAnLS1yZXNldC1yZXN1bHRzJywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICdwYXNzZXMvaW1hZ2UuaHRtbCcsCisgICAgICAgICAgICAgICAgICAgICAgICAnZmFpbHVy
ZXMvZXhwZWN0ZWQvbWlzc2luZ19pbWFnZS5odG1sJ10sCisgICAgICAgICAgICAgICAgICAgICAg
ICB0ZXN0c19pbmNsdWRlZD1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihmaWxl
X2xpc3QpLCA2KQorICAgICAgICBzZWxmLmFzc2VydEJhc2VsaW5lcyhmaWxlX2xpc3QsCisgICAg
ICAgICAgICAiZGF0YS9wYXNzZXMvaW1hZ2UiKQorICAgICAgICBzZWxmLmFzc2VydEJhc2VsaW5l
cyhmaWxlX2xpc3QsCisgICAgICAgICAgICAiZGF0YS9mYWlsdXJlcy9leHBlY3RlZC9taXNzaW5n
X2ltYWdlIikKKworICAgIGRlZiBkaXNhYmxlZF90ZXN0X25ld19iYXNlbGluZShzZWxmKToKKyAg
ICAgICAgIyBGSVhNRTogVGhpcyB0ZXN0IGlzIGRpc2FibGVkIHVudGlsIHdlIGNhbiByZXdyaXRl
IGl0IHRvIHVzZSBhCisgICAgICAgICMgbW9jayBmaWxlc3lzdGVtLgorICAgICAgICAjCisgICAg
ICAgICMgVGVzdCB0aGF0IHdlIHVwZGF0ZSB0aGUgcGxhdGZvcm0gZXhwZWN0YXRpb25zLiBJZiB0
aGUgZXhwZWN0YXRpb24KKyAgICAgICAgIyBpcyBtc3NpbmcsIHRoZW4gY3JlYXRlIGEgbmV3IGV4
cGVjdGF0aW9uIGluIHRoZSBwbGF0Zm9ybSBkaXIuCiAgICAgICAgIGZpbGVfbGlzdCA9IFtdCiAg
ICAgICAgIG9yaWdpbmFsX29wZW4gPSBjb2RlY3Mub3BlbgogICAgICAgICB0cnk6CmRpZmYgLS1n
aXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvbW9ja3Rvb2wucHkgYi9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvbW9ja3Rvb2wucHkKaW5kZXggYjZlZTk1ZjU3
MTAzMGUxOTZhNjcyNTI2NTJkNGYyNTJjMDJjNGRiYS4uNzE5ZjliMWJiYzgyMzU1NjlkODUxZThm
MjQyMTZkOGZjMzQ0MmU5ZSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS90b29sL21vY2t0b29sLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9v
bC9tb2NrdG9vbC5weQpAQCAtNTcxLDYgKzU3MSw3IEBAIGNsYXNzIE1vY2tTdGF0dXNTZXJ2ZXIo
b2JqZWN0KToKIAogCiAjIEZJWE1FOiBUaGlzIHNob3VsZCBub3QgaW5oZXJpdCBmcm9tIE1vY2sK
KyMgRklYTUU6IFVuaWZ5IHdpdGggY29tbW9uLnN5c3RlbS5leGVjdXRpdmVfbW9jay5Nb2NrRXhl
Y3V0aXZlLgogY2xhc3MgTW9ja0V4ZWN1dGl2ZShNb2NrKToKICAgICBkZWYgX19pbml0X18oc2Vs
Ziwgc2hvdWxkX2xvZyk6CiAgICAgICAgIHNlbGYuX3Nob3VsZF9sb2cgPSBzaG91bGRfbG9nCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>