<?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>90504</bug_id>
          
          <creation_ts>2012-07-03 15:45:42 -0700</creation_ts>
          <short_desc>Improve webkit-patch rebaseline to work for more cases</short_desc>
          <delta_ts>2012-07-10 10:33:49 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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>90551</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ojan Vafai">ojan</reporter>
          <assigned_to name="Ojan Vafai">ojan</assigned_to>
          <cc>abarth</cc>
    
    <cc>dpranke</cc>
    
    <cc>eric</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>662529</commentid>
    <comment_count>0</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-07-03 15:45:42 -0700</bug_when>
    <thetext>Improve webkit-patch rebaseline to work for more cases</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662532</commentid>
    <comment_count>1</comment_count>
      <attachid>150684</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-07-03 15:49:47 -0700</bug_when>
    <thetext>Created attachment 150684
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662590</commentid>
    <comment_count>2</comment_count>
      <attachid>150684</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-07-03 17:04:12 -0700</bug_when>
    <thetext>Comment on attachment 150684
Patch

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

&gt; Tools/Scripts/webkitpy/tool/commands/rebaseline.py:378
&gt; +            optparse.make_option(&quot;--test&quot;, help=&quot;Test to rebaseline&quot;),

should we support multiple tests and/or builders here?

It seems like if you don&apos;t specify either --builder or --test, then we will prompt the user for each builder and then prompt for the tests on the builder, and that could be pretty annoying, so I&apos;m not sure that this is a great design, but I&apos;m happy to try it out and see.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662637</commentid>
    <comment_count>3</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-07-03 19:09:04 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 150684 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=150684&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/tool/commands/rebaseline.py:378
&gt; &gt; +            optparse.make_option(&quot;--test&quot;, help=&quot;Test to rebaseline&quot;),
&gt; 
&gt; should we support multiple tests and/or builders here?
&gt; 
&gt; It seems like if you don&apos;t specify either --builder or --test, then we will prompt the user for each builder and then prompt for the tests on the builder, and that could be pretty annoying, so I&apos;m not sure that this is a great design, but I&apos;m happy to try it out and see.

I&apos;ll add a FIXME to do this. We&apos;ll see how people use it in practice. Personally, I hate having to type or copy-paste builder or test names, so the lists might be useful.

Mostly, I just want --test so I can rebaseline a test across all ports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662639</commentid>
    <comment_count>4</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-07-03 19:13:20 -0700</bug_when>
    <thetext>Committed r121821: &lt;http://trac.webkit.org/changeset/121821&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662688</commentid>
    <comment_count>5</comment_count>
      <attachid>150684</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-07-03 23:44:43 -0700</bug_when>
    <thetext>Comment on attachment 150684
Patch

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

&gt; Tools/Scripts/webkitpy/common/net/buildbot/buildbot.py:242
&gt; +        # FIXME: We should probably have a better way of determining chromium builders than checking if the name starts with &apos;Webkit&apos;.

Rather than greping the builder name, why not just add some state to the builder object to track this information?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662938</commentid>
    <comment_count>6</comment_count>
      <attachid>150684</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-07-04 07:43:54 -0700</bug_when>
    <thetext>Comment on attachment 150684
Patch

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

&gt; Tools/Scripts/webkitpy/common/net/buildbot/buildbot.py:243
&gt; +        results_directory = &quot;results/layout-test-results&quot; if self._builder.name().startswith(&apos;Webkit&apos;) else &quot;r%s (%s)&quot; % (self.revision(), self._number)

The more I think about this line, the more it bothers me.  The fact that the Chromium builders have names that misspell WebKit is something I&apos;d like to fix some day.  Relying upon that error here is really crappy.

This line also contains the string &quot;results/layout-test-results&quot;, which repeats a constant in accumulated_results_url().  Rather than repeating ourselves, we should call accumulated_results_url().  In fact, that&apos;s key to avoiding introspecting the builder&apos;s name.  Rather than looking for the &quot;Webkit&quot; typo, we should check whether accumulated_results_url() is truthy.

Actually, now that I think about this further, this change is just plain wrong.  results_url() no longer returns the results URL for this Build on Chromium buildbots.  Instead, it returns the accumulated_results_url, which contains results other than the ones for this build.  Rather than make this function wrong, we need to make the callers of this function smarter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662940</commentid>
    <comment_count>7</comment_count>
      <attachid>150684</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-07-04 07:52:00 -0700</bug_when>
    <thetext>Comment on attachment 150684
Patch

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

&gt; Tools/ChangeLog:29
&gt; +        so these can return different values. In either case, I&apos;m pretty sure these
&gt; +        are not remotely hot codepaths.

Did you check this in any way?

&gt; Tools/Scripts/webkitpy/tool/commands/rebaseline.py:384
&gt; +        builder_names = [self._chromium_prefix + name if name.startswith(&apos;Webkit&apos;) else name for name in builders.all_builder_names()]

Another instance of relying on the Webkit typo.  That&apos;s really a crappy way to write this code.

&gt; Tools/Scripts/webkitpy/tool/commands/rebaseline.py:389
&gt; +        if name.startswith(self._chromium_prefix):

More string comparison.  Note: This code will be wrong if any of the build.webkit.orb buildbots happen to be named with the self._chromium_prefix prefix (e.g., the chromium ones).

&gt; Tools/Scripts/webkitpy/tool/commands/rebaseline.py:394
&gt; +        if port.name().startswith(&apos;chromium-&apos;):

I didn&apos;t like this idiom the first time it was introduced.  Rather than copying / pasting it around the codebase, we should refactor the code to either put the hack in a single place, or (better) avoid the need to do this comparison.

&gt; Tools/Scripts/webkitpy/tool/commands/rebaseline.py:416
&gt; +                # FIXME: Allow for choosing the suffixes.
&gt; +                test_list[test][builder.name()] = [&apos;txt&apos;]

Does this mean this command only works for text results?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662941</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-07-04 07:52:15 -0700</bug_when>
    <thetext>I&apos;m sad that I didn&apos;t have a chance to review this patch in the 75 minutes that it was posted for review.  Given that it&apos;s now the July 4th weekend, I&apos;m going to roll out this change so that we don&apos;t forget to fix the wrongness this patch introduced.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662944</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-04 07:54:07 -0700</bug_when>
    <thetext>Re-opened since this is blocked by 90551</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>663040</commentid>
    <comment_count>10</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-07-04 09:45:43 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; I&apos;m sad that I didn&apos;t have a chance to review this patch in the 75 minutes that it was posted for review.  Given that it&apos;s now the July 4th weekend, I&apos;m going to roll out this change so that we don&apos;t forget to fix the wrongness this patch introduced.

Rolling out is not a big deal. I&apos;ll fix it up after the break. I think maybe you&apos;re overreacting a bit because it got committed. IMO, the wrongness in this patch is mostly a result of technical debt already incurred by other things (bot naming conventions, chromiumbuildbot not supporting a good chunk of the buildbot API, etc). You&apos;re right though that I could do a better job of minimizing and isolating the wrongness.

I&apos;ll post a patch after the break that isolates and avoids the string comparison as much as possible.

(In reply to comment #7)
&gt; (From update of attachment 150684 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=150684&amp;action=review
&gt; 
&gt; &gt; Tools/ChangeLog:29
&gt; &gt; +        so these can return different values. In either case, I&apos;m pretty sure these
&gt; &gt; +        are not remotely hot codepaths.
&gt; 
&gt; Did you check this in any way?

Not sure what you&apos;re asking. Having these be memoized was not useful and was causing the tests to be flaky. You see a problem with removing the memoization here? Is there a purpose to the memoization other than the performance benefit?

&gt; &gt; Tools/Scripts/webkitpy/tool/commands/rebaseline.py:416
&gt; &gt; +                # FIXME: Allow for choosing the suffixes.
&gt; &gt; +                test_list[test][builder.name()] = [&apos;txt&apos;]
&gt; 
&gt; Does this mean this command only works for text results?

For now. Which is also what the help text says. I&apos;m improving this command incrementally. The follow-on patch was going to make it also work for pngs. Before this patch, this command only worked for text results that weren&apos;t new files.

(In reply to comment #6)
&gt; Actually, now that I think about this further, this change is just plain wrong.  results_url() no longer returns the results URL for this Build on Chromium buildbots.  Instead, it returns the accumulated_results_url, which contains results other than the ones for this build.  Rather than make this function wrong, we need to make the callers of this function smarter.

That&apos;s a good point. I think probably the best way to fix this is to add a new method latest_full_results_json_url that points to the latest full_results.json for that bot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>663053</commentid>
    <comment_count>11</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-07-04 10:33:19 -0700</bug_when>
    <thetext>The main reason I didn&apos;t like the patch was the dependency on the Webkit misspelling, which (to me) is emblematic of a bunch of Chromium practices that I dislike, in particular ignorance of WebKit (i.e., not even being able to spell the name of the project correctly) and unwillingness to fix bugs for fear of breaking things (i.e., this misspelling has persisted for years for this reason even though I&apos;ve asked the admins to fix it).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665059</commentid>
    <comment_count>12</comment_count>
      <attachid>151295</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-07-09 12:20:59 -0700</bug_when>
    <thetext>Created attachment 151295
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665060</commentid>
    <comment_count>13</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-07-09 12:23:32 -0700</bug_when>
    <thetext>I think this should address all of Adam&apos;s concerns and also makes --builders/--tests take a CSV as per Dirk&apos;s request.

&gt; &gt; &gt; Tools/ChangeLog:29
&gt; &gt; &gt; +        so these can return different values. In either case, I&apos;m pretty sure these
&gt; &gt; &gt; +        are not remotely hot codepaths.
&gt; &gt; 
&gt; &gt; Did you check this in any way?
&gt; 
&gt; Not sure what you&apos;re asking. Having these be memoized was not useful and was causing the tests to be flaky. You see a problem with removing the memoization here? Is there a purpose to the memoization other than the performance benefit?

Ah, I misparsed this. I thought you were asking why I committed the change. I checked this manually by looking at all the callers. I didn&apos;t run any tests, but it&apos;s pretty clear to me that none of the callers are in hot code paths, except possibly one of them, but that one already memoizes the calling function. Added a comment to the ChangeLog to that effect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665104</commentid>
    <comment_count>14</comment_count>
      <attachid>151295</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-07-09 13:06:29 -0700</bug_when>
    <thetext>Comment on attachment 151295
Patch

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

&gt; Tools/Scripts/webkitpy/tool/commands/rebaseline.py:377
&gt; +            optparse.make_option(&quot;--tests&quot;, default=None, help=&quot;Comma-separated-list of tests to rebaseline&quot;),

Nit: for multiple values I usually use action=append and so you do --builder=foo --builder=bar.

Also, it occurred to me that the common case is to do one or more tests, so we should probably just make those args instead of options, and not allow &quot;all&quot; tests (or make that an explicit opt-in with --all-tests or something).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665380</commentid>
    <comment_count>15</comment_count>
      <attachid>151377</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-07-09 18:24:37 -0700</bug_when>
    <thetext>Created attachment 151377
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665383</commentid>
    <comment_count>16</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-07-09 18:26:29 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 151295 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=151295&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/tool/commands/rebaseline.py:377
&gt; &gt; +            optparse.make_option(&quot;--tests&quot;, default=None, help=&quot;Comma-separated-list of tests to rebaseline&quot;),
&gt; 
&gt; Nit: for multiple values I usually use action=append and so you do --builder=foo --builder=bar.

Sure. I made it append, but still accepting a comma-separated-list. So people can do whatever they prefer.

&gt; Also, it occurred to me that the common case is to do one or more tests, so we should probably just make those args instead of options, and not allow &quot;all&quot; tests (or make that an explicit opt-in with --all-tests or something).

I think you&apos;re probably right. I changed it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665833</commentid>
    <comment_count>17</comment_count>
      <attachid>151377</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-07-10 10:01:17 -0700</bug_when>
    <thetext>Comment on attachment 151377
Patch

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

Thanks for iterating on this patch.  Sorry for being a complainy pants before...

&gt; Tools/Scripts/webkitpy/common/net/buildbot/buildbot.py:69
&gt; +    def latest_layout_test_results(self):

Why not just @memoize?

&gt; Tools/Scripts/webkitpy/tool/commands/rebaseline.py:88
&gt; +        # FIXME: Use self._tool.buildbot_for_builder_name(builder_name).
&gt;          port = self._tool.port_factory.get_from_builder_name(builder_name)
&gt; -        # FIXME: Come up with a better way than string manipulation to see if the port is a chromium port.
&gt; -        if port.name().startswith(&apos;chromium-&apos;):
&gt; +        if port.is_chromium():
&gt;              return self._tool.chromium_buildbot().builder_with_name(builder_name).accumulated_results_url()
&gt;          return self._tool.buildbot.builder_with_name(builder_name).latest_cached_build().results_url()

Why not refactor latest_layout_test_results slightly to separate the URL finding from the results fetching?  That will let you get rid of the is_chromium branch.

&gt; Tools/Scripts/webkitpy/tool/commands/rebaseline.py:414
&gt; +            if len(args):

You can just say &quot;if args:&quot; or, even better:

tests = args or self._tests_to_update(builder)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665863</commentid>
    <comment_count>18</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-07-10 10:32:25 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 151377 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=151377&amp;action=review
&gt; 
&gt; Thanks for iterating on this patch.  Sorry for being a complainy pants before...
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/common/net/buildbot/buildbot.py:69
&gt; &gt; +    def latest_layout_test_results(self):
&gt; 
&gt; Why not just @memoize?

I was mimicing the code in Build. Changed both.

&gt; &gt; Tools/Scripts/webkitpy/tool/commands/rebaseline.py:88
&gt; &gt; +        # FIXME: Use self._tool.buildbot_for_builder_name(builder_name).
&gt; &gt;          port = self._tool.port_factory.get_from_builder_name(builder_name)
&gt; &gt; -        # FIXME: Come up with a better way than string manipulation to see if the port is a chromium port.
&gt; &gt; -        if port.name().startswith(&apos;chromium-&apos;):
&gt; &gt; +        if port.is_chromium():
&gt; &gt;              return self._tool.chromium_buildbot().builder_with_name(builder_name).accumulated_results_url()
&gt; &gt;          return self._tool.buildbot.builder_with_name(builder_name).latest_cached_build().results_url()
&gt; 
&gt; Why not refactor latest_layout_test_results slightly to separate the URL finding from the results fetching?  That will let you get rid of the is_chromium branch.

I considered this and decided against it since this could potentially cause use to fetch the file twice (once in Builder and once in Build). On second thought, the code cleanliness is probably worth it. I went ahead and changed it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665867</commentid>
    <comment_count>19</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-07-10 10:33:49 -0700</bug_when>
    <thetext>Committed r122234: &lt;http://trac.webkit.org/changeset/122234&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150684</attachid>
            <date>2012-07-03 15:49:47 -0700</date>
            <delta_ts>2012-07-09 12:20:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90504-20120703154946.patch</filename>
            <type>text/plain</type>
            <size>15901</size>
            <attacher name="Ojan Vafai">ojan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxODAwCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMDFiZWNjODllYjgzYTBmMjQxMWUwODJiYTQ5Yjg2Mjhj
N2ExNmU5ZS4uMWZhZWY3ZjM4ZGM3NWFiMDczNTM2M2JjYTk3ZDkxOTMxNTVlODJkZiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDUx
IEBACiAyMDEyLTA3LTAzICBPamFuIFZhZmFpICA8b2phbkBjaHJvbWl1bS5vcmc+CiAKKyAgICAg
ICAgSW1wcm92ZSB3ZWJraXQtcGF0Y2ggcmViYXNlbGluZSB0byB3b3JrIGZvciBtb3JlIGNhc2Vz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDUwNAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC1NYWtlcyBp
dCB3b3JrIGZvciB0aGUgYnVpbGQuY2hyb21pdW0ub3JnIGJvdHMuCisgICAgICAgIC1MZXRzIHlv
dSByZWJhc2VsaW5lIGFsbCBidWlsZGVycyBpbnN0ZWFkIG9mIGp1c3Qgb25lLgorICAgICAgICAt
TGV0cyB5b3UgcGFzcyBpbiB0aGUgYnVpbGRlciBvciB0ZXN0IHRvIHJlYmFzZWxpbmUuCisKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvYnVpbGRib3QvYnVpbGRib3QucHk6
CisgICAgICAgIChCdWlsZC5yZXN1bHRzX3VybCk6CisgICAgICAgIE1ha2UgdGhpcyB3b3JrIGZv
ciBidWlsZC5jaHJvbWl1bS5vcmcgYnVpbGRlcnMgYXMgd2VsbC4KKworICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvY29tbW9uL25ldC9idWlsZGJvdC9jaHJvbWl1bWJ1aWxkYm90LnB5OgorICAg
ICAgICAoQ2hyb21pdW1CdWlsZGVyKToKKyAgICAgICAgKENocm9taXVtQnVpbGRlci5sYXRlc3Rf
Y2FjaGVkX2J1aWxkKToKKyAgICAgICAgQ2hyb21pdW1CdWlsZGVyIGRvZXNuJ3Qgc3VwcG9ydCBs
YXJnZSBwYXJ0cyBvZiB0aGUgQnVpbGRlciBpbnRlcmZhY2UuCisgICAgICAgIFRoaXMgcHJvdmlk
ZXMgdGhlIGJhcmUgbWluaW11bSBmb3IgdGhpcyBwYXRjaCB0byB3b3JrLiBFdmVudHVhbGx5LAor
ICAgICAgICB3ZSBzaG91bGQgY3JlYXRlIGEgc2luZ2xlIGludGVyZmFjZSB0aGF0IGNhbiBiZSBz
dXBwb3J0ZWQgZm9yIGJvdGgKKyAgICAgICAgc2V0cyBvZiBidWlsZGJvdHMuCisKKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2J1aWxkZXJzLnB5OgorICAgICAg
ICAoYnVpbGRlcl9wYXRoX2Zyb21fbmFtZSk6CisgICAgICAgIChhbGxfYnVpbGRlcl9uYW1lcyk6
CisgICAgICAgIG1lbW9pemluZyBoZXJlIGlzIGluY29ycmVjdCBiZWNhdXNlIHRoZSB0ZXN0IG92
ZXJyaWRlIF9leGFjdF9tYXRjaGVzLAorICAgICAgICBzbyB0aGVzZSBjYW4gcmV0dXJuIGRpZmZl
cmVudCB2YWx1ZXMuIEluIGVpdGhlciBjYXNlLCBJJ20gcHJldHR5IHN1cmUgdGhlc2UKKyAgICAg
ICAgYXJlIG5vdCByZW1vdGVseSBob3QgY29kZXBhdGhzLgorCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS90b29sL2NvbW1hbmRzL3JlYmFzZWxpbmUucHk6CisgICAgICAgIChBYnN0cmFjdFBh
cmFsbGVsUmViYXNlbGluZUNvbW1hbmQuX19pbml0X18pOgorICAgICAgICAoUmViYXNlbGluZSk6
CisgICAgICAgIChSZWJhc2VsaW5lLl9faW5pdF9fKToKKyAgICAgICAgKFJlYmFzZWxpbmUuX2J1
aWxkZXJzX3RvX3B1bGxfZnJvbSk6CisgICAgICAgIChSZWJhc2VsaW5lLl9idWlsZGVyX3dpdGhf
bmFtZSk6CisgICAgICAgIChSZWJhc2VsaW5lLl90ZXN0c190b191cGRhdGUpOgorICAgICAgICAo
UmViYXNlbGluZS5leGVjdXRlKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29t
bWFuZHMvcmViYXNlbGluZV91bml0dGVzdC5weToKKyAgICAgICAgKHRlc3RfcmViYXNlbGluZS5t
b2NrX2J1aWxkZXJzX3RvX3B1bGxfZnJvbSk6CisgICAgICAgICh0ZXN0X3JlYmFzZWxpbmUpOgor
ICAgICAgICAodGVzdF9yZWJhc2VsaW5lX2NvbW1hbmRfbGluZV9mbGFncyk6CisgICAgICAgICh0
ZXN0X3JlYmFzZWxpbmVfbXVsdGlwbGVfYnVpbGRlcnMpOgorICAgICAgICAodGVzdF9yZWJhc2Vs
aW5lX211bHRpcGxlX2J1aWxkZXJzLm1vY2tfYnVpbGRlcnNfdG9fcHVsbF9mcm9tKToKKyAgICAg
ICAgKHRlc3RfcmViYXNlbGluZV9tdWx0aXBsZV9idWlsZGVycy5tb2NrX3Rlc3RzX3RvX3VwZGF0
ZSk6CisKKzIwMTItMDctMDMgIE9qYW4gVmFmYWkgIDxvamFuQGNocm9taXVtLm9yZz4KKwogICAg
ICAgICBIYXZlIHdlYmtpdC1wYXRjaCByZWJhc2VsaW5lIHVzZSByZWJhc2VsaW5lLXRlc3QtaW50
ZXJuYWwKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkw
NDkxCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC9idWls
ZGJvdC9idWlsZGJvdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC9idWls
ZGJvdC9idWlsZGJvdC5weQppbmRleCA0ZTgyMGNlZTBmZWY3MmNkYjFiMzIxOGNhNDY5MmJkZmVh
NzI4ZTVmLi40MGRlOGQ1N2I2NGFmMTZmMDg0OGE5NjMzZjc5NGFiOGRmYjg4MTUzIDEwMDY0NAot
LS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvYnVpbGRib3QvYnVpbGRib3Qu
cHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L2J1aWxkYm90L2J1aWxk
Ym90LnB5CkBAIC0yMzksNyArMjM5LDggQEAgY2xhc3MgQnVpbGQob2JqZWN0KToKICAgICAgICAg
cmV0dXJuIHNlbGYuYnVpbGRfdXJsKHNlbGYuYnVpbGRlcigpLCBzZWxmLl9udW1iZXIpCiAKICAg
ICBkZWYgcmVzdWx0c191cmwoc2VsZik6Ci0gICAgICAgIHJlc3VsdHNfZGlyZWN0b3J5ID0gInIl
cyAoJXMpIiAlIChzZWxmLnJldmlzaW9uKCksIHNlbGYuX251bWJlcikKKyAgICAgICAgIyBGSVhN
RTogV2Ugc2hvdWxkIHByb2JhYmx5IGhhdmUgYSBiZXR0ZXIgd2F5IG9mIGRldGVybWluaW5nIGNo
cm9taXVtIGJ1aWxkZXJzIHRoYW4gY2hlY2tpbmcgaWYgdGhlIG5hbWUgc3RhcnRzIHdpdGggJ1dl
YmtpdCcuCisgICAgICAgIHJlc3VsdHNfZGlyZWN0b3J5ID0gInJlc3VsdHMvbGF5b3V0LXRlc3Qt
cmVzdWx0cyIgaWYgc2VsZi5fYnVpbGRlci5uYW1lKCkuc3RhcnRzd2l0aCgnV2Via2l0JykgZWxz
ZSAiciVzICglcykiICUgKHNlbGYucmV2aXNpb24oKSwgc2VsZi5fbnVtYmVyKQogICAgICAgICBy
ZXR1cm4gIiVzLyVzIiAlIChzZWxmLl9idWlsZGVyLnJlc3VsdHNfdXJsKCksIHVybGxpYi5xdW90
ZShyZXN1bHRzX2RpcmVjdG9yeSkpCiAKICAgICBkZWYgcmVzdWx0c196aXBfdXJsKHNlbGYpOgpk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L2J1aWxkYm90L2No
cm9taXVtYnVpbGRib3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvYnVp
bGRib3QvY2hyb21pdW1idWlsZGJvdC5weQppbmRleCA1MDMwYmJhNDgwMjcwNGJjNzAzODBlMWZl
MzAwNGZiMzVmNmQ1NjllLi45ZjkwNDNiZjkxMzJlMjJkOTdiZGUwMGVjODcxMjJhZDM0Y2M0NGYw
IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvYnVpbGRib3Qv
Y2hyb21pdW1idWlsZGJvdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9u
ZXQvYnVpbGRib3QvY2hyb21pdW1idWlsZGJvdC5weQpAQCAtNDEsNiArNDEsMTYgQEAgY2xhc3Mg
Q2hyb21pdW1CdWlsZGVyKEJ1aWxkZXIpOgogICAgIGRlZiBhY2N1bXVsYXRlZF9yZXN1bHRzX3Vy
bChzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYucmVzdWx0c191cmwoKSArICIvcmVzdWx0cy9s
YXlvdXQtdGVzdC1yZXN1bHRzIgogCisgICAgIyBXZSBvdmVycmlkZSBCdWlsZGVyLmxhdGVzdF9j
YWNoZWRfYnVpbGQgYmVjYXVzZSBpdCByZWxpZXMgb24gZnVuY3Rpb25zIHRoYXQgYXNzdW1lIHRv
byBtdWNoIGFib3V0CisgICAgIyB0aGUgaW5mb3JtYXRpb24gcHJvdmlkZWQgb24gdGhlIGJ1aWxk
Ym90IHBhZ2VzLgorICAgICMgRklYTUU6IEhhdmUgQnVpbGRlciBhbmQgQ2hyb21pdW1CdWlsZGVy
IGFjdHVhbGx5IHByb3ZpZGUgYSB1bmlmaWVkIGludGVmYWNlIHRoYXQgdGhleSBib3RoIHN1cHBv
cnQuCisgICAgZGVmIGxhdGVzdF9jYWNoZWRfYnVpbGQoc2VsZik6CisgICAgICAgIGZvciBidWls
ZGVyX3N0YXR1cyBpbiBzZWxmLl9idWlsZGJvdC5idWlsZGVyX3N0YXR1c2VzKCk6CisgICAgICAg
ICAgICBpZiBidWlsZGVyX3N0YXR1c1sibmFtZSJdID09IHNlbGYubmFtZSgpOgorICAgICAgICAg
ICAgICAgIGJ1aWxkX251bWJlciA9IGJ1aWxkZXJfc3RhdHVzWyJidWlsZF9udW1iZXIiXQorICAg
ICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHJldHVybiBzZWxmLmJ1aWxkKGJ1aWxkX251bWJl
cikKKwogCiBjbGFzcyBDaHJvbWl1bUJ1aWxkQm90KEJ1aWxkQm90KToKICAgICBfYnVpbGRlcl9m
YWN0b3J5ID0gQ2hyb21pdW1CdWlsZGVyCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2J1aWxkZXJzLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9idWlsZGVycy5weQppbmRleCBiMjg5Yjk3NmFkN2FlYTJjYzNj
ZjJiYjI1YzEyZGI1NTU5YjIzMzk4Li4yMWZjYzk4MDE1ZjhhNDY4YzY0YjFjZWUwNDc0OWRiNGM0
NzZlYTk2IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L2J1aWxkZXJzLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvYnVpbGRlcnMucHkKQEAgLTk2LDEyICs5NiwxMCBAQCBkZWYgYnVpbGRlcl9wYXRoX2Zy
b21fbmFtZShidWlsZGVyX25hbWUpOgogICAgIHJldHVybiByZS5zdWIocidbXHMoKS5dJywgJ18n
LCBidWlsZGVyX25hbWUpCiAKIAotQG1lbW9pemVkCiBkZWYgYWxsX2J1aWxkZXJfbmFtZXMoKToK
ICAgICByZXR1cm4gc29ydGVkKHNldChfZXhhY3RfbWF0Y2hlcy5rZXlzKCkpKQogCiAKLUBtZW1v
aXplZAogZGVmIGFsbF9wb3J0X25hbWVzKCk6CiAgICAgcmV0dXJuIHNvcnRlZChzZXQobWFwKGxh
bWJkYSB4OiB4WyJwb3J0X25hbWUiXSwgX2V4YWN0X21hdGNoZXMudmFsdWVzKCkpICsgX3BvcnRz
X3dpdGhvdXRfYnVpbGRlcnMpKQogCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3Rvb2wvY29tbWFuZHMvcmViYXNlbGluZS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9v
bC9jb21tYW5kcy9yZWJhc2VsaW5lLnB5CmluZGV4IGNhYTVmNWI3MzcwNjIyYjQzNmY0MjAxZDYz
ZjE3YzM2MTc0NjVjNzMuLjYyOTE5ZDEyOTJmMzE5YTNkYzg1NjgzMTFmOGI4YjFmNTI4OGM1MzEg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9yZWJhc2Vs
aW5lLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9yZWJhc2Vs
aW5lLnB5CkBAIC0yMjksMTMgKzIyOSwxMyBAQCBjbGFzcyBBbmFseXplQmFzZWxpbmVzKEFic3Ry
YWN0UmViYXNlbGluaW5nQ29tbWFuZCk6CiAKIAogY2xhc3MgQWJzdHJhY3RQYXJhbGxlbFJlYmFz
ZWxpbmVDb21tYW5kKEFic3RyYWN0RGVjbGFyYXRpdmVDb21tYW5kKToKLSAgICBkZWYgX19pbml0
X18oc2VsZik6Ci0gICAgICAgIG9wdGlvbnMgPSBbCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9w
dGlvbnM9Tm9uZSk6CisgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIG9yIFtdCisgICAgICAgIG9w
dGlvbnMuZXh0ZW5kKFsKICAgICAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLW5vLW9w
dGltaXplJywgZGVzdD0nb3B0aW1pemUnLCBhY3Rpb249J3N0b3JlX2ZhbHNlJywgZGVmYXVsdD1U
cnVlLAogICAgICAgICAgICAgICAgIGhlbHA9KCdEbyBub3Qgb3B0aW1pemUvZGUtZHVwIHRoZSBl
eHBlY3RhdGlvbnMgYWZ0ZXIgcmViYXNlbGluaW5nICcKICAgICAgICAgICAgICAgICAgICAgICAn
KGRlZmF1bHQgaXMgdG8gZGUtZHVwIGF1dG9tYXRpY2FsbHkpLiAnCi0gICAgICAgICAgICAgICAg
ICAgICAgJ1lvdSBjYW4gdXNlICJ3ZWJraXQtcGF0Y2ggb3B0aW1pemUtYmFzZWxpbmVzIiB0byBv
cHRpbWl6ZSBzZXBhcmF0ZWx5LicpKSwKLSAgICAgICAgXQorICAgICAgICAgICAgICAgICAgICAg
ICdZb3UgY2FuIHVzZSAid2Via2l0LXBhdGNoIG9wdGltaXplLWJhc2VsaW5lcyIgdG8gb3B0aW1p
emUgc2VwYXJhdGVseS4nKSldKQogICAgICAgICBBYnN0cmFjdERlY2xhcmF0aXZlQ29tbWFuZC5f
X2luaXRfXyhzZWxmLCBvcHRpb25zPW9wdGlvbnMpCiAKICAgICBkZWYgX3J1bl93ZWJraXRfcGF0
Y2goc2VsZiwgYXJncyk6CkBAIC0zNzAsMjkgKzM3MCw1MiBAQCBjbGFzcyBSZWJhc2VsaW5lRXhw
ZWN0YXRpb25zKEFic3RyYWN0UGFyYWxsZWxSZWJhc2VsaW5lQ29tbWFuZCk6CiBjbGFzcyBSZWJh
c2VsaW5lKEFic3RyYWN0UGFyYWxsZWxSZWJhc2VsaW5lQ29tbWFuZCk6CiAgICAgbmFtZSA9ICJy
ZWJhc2VsaW5lIgogICAgIGhlbHBfdGV4dCA9ICJSZXBsYWNlcyBsb2NhbCBleHBlY3RlZC50eHQg
ZmlsZXMgd2l0aCBuZXcgcmVzdWx0cyBmcm9tIGJ1aWxkIGJvdHMiCisgICAgX2Nocm9taXVtX3By
ZWZpeCA9ICdDaHJvbWl1bSAtICcKIAotICAgICMgRklYTUU6IFRoaXMgc2hvdWxkIHNoYXJlIG1v
cmUgY29kZSB3aXRoIEZhaWx1cmVSZWFzb24uX2J1aWxkZXJfdG9fZXhwbGFpbgotICAgIGRlZiBf
YnVpbGRlcl90b19wdWxsX2Zyb20oc2VsZik6Ci0gICAgICAgIGJ1aWxkZXJfc3RhdHVzZXMgPSBz
ZWxmLl90b29sLmJ1aWxkYm90LmJ1aWxkZXJfc3RhdHVzZXMoKQotICAgICAgICByZWRfc3RhdHVz
ZXMgPSBbc3RhdHVzIGZvciBzdGF0dXMgaW4gYnVpbGRlcl9zdGF0dXNlcyBpZiBub3Qgc3RhdHVz
WyJpc19ncmVlbiJdXQotICAgICAgICBfbG9nLmluZm8oIiVzIGZhaWxpbmciICUgKHBsdXJhbGl6
ZSgiYnVpbGRlciIsIGxlbihyZWRfc3RhdHVzZXMpKSkpCi0gICAgICAgIGJ1aWxkZXJfY2hvaWNl
cyA9IFtzdGF0dXNbIm5hbWUiXSBmb3Igc3RhdHVzIGluIHJlZF9zdGF0dXNlc10KLSAgICAgICAg
Y2hvc2VuX25hbWUgPSBzZWxmLl90b29sLnVzZXIucHJvbXB0X3dpdGhfbGlzdCgiV2hpY2ggYnVp
bGRlciB0byBwdWxsIHJlc3VsdHMgZnJvbToiLCBidWlsZGVyX2Nob2ljZXMpCi0gICAgICAgICMg
RklYTUU6IHByb21wdF93aXRoX2xpc3Qgc2hvdWxkIHJlYWxseSB0YWtlIGEgc2V0IG9mIG9iamVj
dHMgYW5kIGEgc2V0IG9mIG5hbWVzIGFuZCB0aGVuIHJldHVybiB0aGUgb2JqZWN0LgotICAgICAg
ICBmb3Igc3RhdHVzIGluIHJlZF9zdGF0dXNlczoKLSAgICAgICAgICAgIGlmIHN0YXR1c1sibmFt
ZSJdID09IGNob3Nlbl9uYW1lOgotICAgICAgICAgICAgICAgIHJldHVybiAoc2VsZi5fdG9vbC5i
dWlsZGJvdC5idWlsZGVyX3dpdGhfbmFtZShjaG9zZW5fbmFtZSksIHN0YXR1c1siYnVpbGRfbnVt
YmVyIl0pCi0KLSAgICBkZWYgX3Rlc3RzX3RvX3VwZGF0ZShzZWxmLCBidWlsZCk6Ci0gICAgICAg
IGZhaWxpbmdfdGVzdHMgPSBidWlsZC5sYXlvdXRfdGVzdF9yZXN1bHRzKCkudGVzdHNfbWF0Y2hp
bmdfZmFpbHVyZV90eXBlcyhbdGVzdF9mYWlsdXJlcy5GYWlsdXJlVGV4dE1pc21hdGNoXSkKLSAg
ICAgICAgcmV0dXJuIHNlbGYuX3Rvb2wudXNlci5wcm9tcHRfd2l0aF9saXN0KCJXaGljaCB0ZXN0
KHMpIHRvIHJlYmFzZWxpbmU6IiwgZmFpbGluZ190ZXN0cywgY2FuX2Nob29zZV9tdWx0aXBsZT1U
cnVlKQorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgb3B0aW9ucyA9IFsKKyAgICAg
ICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLWJ1aWxkZXIiLCBkZWZhdWx0PU5vbmUsIGhl
bHA9IkJ1aWxkZXIgdG8gcHVsbCBuZXcgYmFzZWxpbmVzIGZyb20iKSwKKyAgICAgICAgICAgIG9w
dHBhcnNlLm1ha2Vfb3B0aW9uKCItLXRlc3QiLCBoZWxwPSJUZXN0IHRvIHJlYmFzZWxpbmUiKSwK
KyAgICAgICAgXQorICAgICAgICBBYnN0cmFjdFBhcmFsbGVsUmViYXNlbGluZUNvbW1hbmQuX19p
bml0X18oc2VsZiwgb3B0aW9ucz1vcHRpb25zKQorCisgICAgZGVmIF9idWlsZGVyc190b19wdWxs
X2Zyb20oc2VsZik6CisgICAgICAgICMgRklYTUU6IEluc3RlYWQgb2YgcHJlZml4aW5nIHRoZSBj
aHJvbWl1bSBidWlsZGVyIG5hbWVzLCBzaG93IGEgYnVpbGQud2Via2l0Lm9yZyBsaXN0IGFuZCBh
IGJ1aWxkLmNocm9taXVtLm9yZyBsaXN0LgorICAgICAgICBidWlsZGVyX25hbWVzID0gW3NlbGYu
X2Nocm9taXVtX3ByZWZpeCArIG5hbWUgaWYgbmFtZS5zdGFydHN3aXRoKCdXZWJraXQnKSBlbHNl
IG5hbWUgZm9yIG5hbWUgaW4gYnVpbGRlcnMuYWxsX2J1aWxkZXJfbmFtZXMoKV0KKyAgICAgICAg
Y2hvc2VuX25hbWVzID0gc2VsZi5fdG9vbC51c2VyLnByb21wdF93aXRoX2xpc3QoIldoaWNoIGJ1
aWxkZXIgdG8gcHVsbCByZXN1bHRzIGZyb206IiwgYnVpbGRlcl9uYW1lcywgY2FuX2Nob29zZV9t
dWx0aXBsZT1UcnVlKQorICAgICAgICByZXR1cm4gW3NlbGYuX2J1aWxkZXJfd2l0aF9uYW1lKG5h
bWUpIGZvciBuYW1lIGluIGNob3Nlbl9uYW1lc10KKworICAgIGRlZiBfYnVpbGRlcl93aXRoX25h
bWUoc2VsZiwgbmFtZSk6CisgICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aChzZWxmLl9jaHJvbWl1
bV9wcmVmaXgpOgorICAgICAgICAgICAgbmFtZSA9IG5hbWVbbGVuKHNlbGYuX2Nocm9taXVtX3By
ZWZpeCk6XQorCisgICAgICAgICMgRklYTUU6IFNoYXJlIHRoaXMgY29kZSB3aXRoIHRoZSBjb2Rl
IGluIFJlYmFzZWxpbmVUZXN0Ll9yZXN1bHRzX3VybC4KKyAgICAgICAgcG9ydCA9IHNlbGYuX3Rv
b2wucG9ydF9mYWN0b3J5LmdldF9mcm9tX2J1aWxkZXJfbmFtZShuYW1lKQorICAgICAgICBpZiBw
b3J0Lm5hbWUoKS5zdGFydHN3aXRoKCdjaHJvbWl1bS0nKToKKyAgICAgICAgICAgIHJldHVybiBz
ZWxmLl90b29sLmNocm9taXVtX2J1aWxkYm90KCkuYnVpbGRlcl93aXRoX25hbWUobmFtZSkKKyAg
ICAgICAgcmV0dXJuIHNlbGYuX3Rvb2wuYnVpbGRib3QuYnVpbGRlcl93aXRoX25hbWUobmFtZSkK
KworICAgIGRlZiBfdGVzdHNfdG9fdXBkYXRlKHNlbGYsIGJ1aWxkZXIpOgorICAgICAgICBmYWls
aW5nX3Rlc3RzID0gYnVpbGRlci5sYXRlc3RfY2FjaGVkX2J1aWxkKCkubGF5b3V0X3Rlc3RfcmVz
dWx0cygpLnRlc3RzX21hdGNoaW5nX2ZhaWx1cmVfdHlwZXMoW3Rlc3RfZmFpbHVyZXMuRmFpbHVy
ZVRleHRNaXNtYXRjaF0pCisgICAgICAgIHJldHVybiBzZWxmLl90b29sLnVzZXIucHJvbXB0X3dp
dGhfbGlzdCgiV2hpY2ggdGVzdChzKSB0byByZWJhc2VsaW5lIGZvciAlczoiICUgYnVpbGRlci5u
YW1lKCksIGZhaWxpbmdfdGVzdHMsIGNhbl9jaG9vc2VfbXVsdGlwbGU9VHJ1ZSkKIAogICAgIGRl
ZiBleGVjdXRlKHNlbGYsIG9wdGlvbnMsIGFyZ3MsIHRvb2wpOgotICAgICAgICBidWlsZGVyLCBi
dWlsZF9udW1iZXIgPSBzZWxmLl9idWlsZGVyX3RvX3B1bGxfZnJvbSgpCi0gICAgICAgIGJ1aWxk
ID0gYnVpbGRlci5idWlsZChidWlsZF9udW1iZXIpCisgICAgICAgIGlmIG9wdGlvbnMuYnVpbGRl
cjoKKyAgICAgICAgICAgIGJ1aWxkZXJzID0gW3NlbGYuX2J1aWxkZXJfd2l0aF9uYW1lKG9wdGlv
bnMuYnVpbGRlcildCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBidWlsZGVycyA9IHNlbGYu
X2J1aWxkZXJzX3RvX3B1bGxfZnJvbSgpCiAKLSAgICAgICAgYnVpbGRlcl9uYW1lID0gYnVpbGRl
ci5uYW1lKCkKICAgICAgICAgdGVzdF9saXN0ID0ge30KLSAgICAgICAgZm9yIHRlc3QgaW4gc2Vs
Zi5fdGVzdHNfdG9fdXBkYXRlKGJ1aWxkKToKLSAgICAgICAgICAgIHRlc3RfbGlzdFt0ZXN0XSA9
IHtidWlsZGVyX25hbWU6IFsndHh0J119CisKKyAgICAgICAgZm9yIGJ1aWxkZXIgaW4gYnVpbGRl
cnM6CisgICAgICAgICAgICB0ZXN0cyA9IFtvcHRpb25zLnRlc3RdIGlmIG9wdGlvbnMudGVzdCBl
bHNlIHNlbGYuX3Rlc3RzX3RvX3VwZGF0ZShidWlsZGVyKQorICAgICAgICAgICAgZm9yIHRlc3Qg
aW4gdGVzdHM6CisgICAgICAgICAgICAgICAgaWYgdGVzdCBub3QgaW4gdGVzdF9saXN0OgorICAg
ICAgICAgICAgICAgICAgICB0ZXN0X2xpc3RbdGVzdF0gPSB7fQorICAgICAgICAgICAgICAgICMg
RklYTUU6IEFsbG93IGZvciBjaG9vc2luZyB0aGUgc3VmZml4ZXMuCisgICAgICAgICAgICAgICAg
dGVzdF9saXN0W3Rlc3RdW2J1aWxkZXIubmFtZSgpXSA9IFsndHh0J10KKworICAgICAgICBpZiBv
cHRpb25zLnZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAicmViYXNlbGluZS1qc29uOiAiICsg
c3RyKHRlc3RfbGlzdCkKKwogICAgICAgICBzZWxmLl9yZWJhc2VsaW5lKG9wdGlvbnMsIHRlc3Rf
bGlzdCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9y
ZWJhc2VsaW5lX3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1h
bmRzL3JlYmFzZWxpbmVfdW5pdHRlc3QucHkKaW5kZXggMTNkMDNiNjM5OGFjODNkMGI3MTNiYjhi
NzAyNTFlNzFjYjMyZWY4Ni4uYWYwMzQxMzFjMjk2NGY5MGZmOTQ2ZDBmYjNkOTY5NzIwMmRmOTY5
NyAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3JlYmFz
ZWxpbmVfdW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1h
bmRzL3JlYmFzZWxpbmVfdW5pdHRlc3QucHkKQEAgLTM1MSwyMCArMzUxLDk2IEBAIE1PQ0sgcnVu
X2NvbW1hbmQ6IFsncW1ha2UnLCAnLXYnXSwgY3dkPU5vbmUKIAogICAgICAgICAgICAgdG9vbC5l
eGVjdXRpdmUgPSBNb2NrRXhlY3V0aXZlKHNob3VsZF9sb2c9VHJ1ZSkKIAotICAgICAgICAgICAg
ZGVmIG1vY2tfYnVpbGRlcl90b19wdWxsX2Zyb20oKToKLSAgICAgICAgICAgICAgICByZXR1cm4g
TW9ja0J1aWxkZXIoJ01PQ0sgYnVpbGRlcicpLCAxMjM0CisgICAgICAgICAgICBkZWYgbW9ja19i
dWlsZGVyc190b19wdWxsX2Zyb20oKToKKyAgICAgICAgICAgICAgICByZXR1cm4gW01vY2tCdWls
ZGVyKCdNT0NLIGJ1aWxkZXInKV0KIAogICAgICAgICAgICAgZGVmIG1vY2tfdGVzdHNfdG9fdXBk
YXRlKGJ1aWxkKToKICAgICAgICAgICAgICAgICByZXR1cm4gWydtb2NrL3BhdGgvdG8vdGVzdC5o
dG1sJ10KIAotICAgICAgICAgICAgY29tbWFuZC5fYnVpbGRlcl90b19wdWxsX2Zyb20gPSBtb2Nr
X2J1aWxkZXJfdG9fcHVsbF9mcm9tCisgICAgICAgICAgICBjb21tYW5kLl9idWlsZGVyc190b19w
dWxsX2Zyb20gPSBtb2NrX2J1aWxkZXJzX3RvX3B1bGxfZnJvbQogICAgICAgICAgICAgY29tbWFu
ZC5fdGVzdHNfdG9fdXBkYXRlID0gbW9ja190ZXN0c190b191cGRhdGUKIAorICAgICAgICAgICAg
ZXhwZWN0ZWRfc3Rkb3V0ID0gIiIicmViYXNlbGluZS1qc29uOiB7J21vY2svcGF0aC90by90ZXN0
Lmh0bWwnOiB7J01PQ0sgYnVpbGRlcic6IFsndHh0J119fQorIiIiCisKICAgICAgICAgICAgIGV4
cGVjdGVkX3N0ZGVyciA9ICIiIk1PQ0sgcnVuX2NvbW1hbmQ6IFsnZWNobycsICdyZWJhc2VsaW5l
LXRlc3QtaW50ZXJuYWwnLCAnLS1zdWZmaXhlcycsICd0eHQnLCAnLS1idWlsZGVyJywgJ01PQ0sg
YnVpbGRlcicsICctLXRlc3QnLCAnbW9jay9wYXRoL3RvL3Rlc3QuaHRtbCddLCBjd2Q9L21vY2st
Y2hlY2tvdXQKIE1PQ0sgcnVuX2NvbW1hbmQ6IFsnZWNobycsICdvcHRpbWl6ZS1iYXNlbGluZXMn
LCAnLS1zdWZmaXhlcycsICd0eHQnLCAnbW9jay9wYXRoL3RvL3Rlc3QuaHRtbCddLCBjd2Q9L21v
Y2stY2hlY2tvdXQKICIiIgogCi0gICAgICAgICAgICBPdXRwdXRDYXB0dXJlKCkuYXNzZXJ0X291
dHB1dHMoc2VsZiwgY29tbWFuZC5leGVjdXRlLCBbTW9ja09wdGlvbnMob3B0aW1pemU9VHJ1ZSks
IFtdLCB0b29sXSwgZXhwZWN0ZWRfc3RkZXJyPWV4cGVjdGVkX3N0ZGVycikKKyAgICAgICAgICAg
IE91dHB1dENhcHR1cmUoKS5hc3NlcnRfb3V0cHV0cyhzZWxmLCBjb21tYW5kLmV4ZWN1dGUsIFtN
b2NrT3B0aW9ucyhvcHRpbWl6ZT1UcnVlLCBidWlsZGVyPU5vbmUsIHRlc3Q9Tm9uZSwgdmVyYm9z
ZT1UcnVlKSwgW10sIHRvb2xdLCBleHBlY3RlZF9zdGRvdXQ9ZXhwZWN0ZWRfc3Rkb3V0LCBleHBl
Y3RlZF9zdGRlcnI9ZXhwZWN0ZWRfc3RkZXJyKQorCisgICAgICAgIGZpbmFsbHk6CisgICAgICAg
ICAgICBidWlsZGVycy5fZXhhY3RfbWF0Y2hlcyA9IG9sZF9leGFjdF9tYXRjaGVzCisKKyAgICBk
ZWYgdGVzdF9yZWJhc2VsaW5lX2NvbW1hbmRfbGluZV9mbGFncyhzZWxmKToKKyAgICAgICAgb2xk
X2V4YWN0X21hdGNoZXMgPSBidWlsZGVycy5fZXhhY3RfbWF0Y2hlcworICAgICAgICB0cnk6Cisg
ICAgICAgICAgICBidWlsZGVycy5fZXhhY3RfbWF0Y2hlcyA9IHsKKyAgICAgICAgICAgICAgICAi
TU9DSyBidWlsZGVyIjogeyJwb3J0X25hbWUiOiAidGVzdC1tYWMtbGVvcGFyZCIsICJzcGVjaWZp
ZXJzIjogc2V0KFsibW9jay1zcGVjaWZpZXIiXSl9LAorICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBjb21tYW5kID0gUmViYXNlbGluZSgpCisgICAgICAgICAgICB0b29sID0gTW9ja1Rvb2wo
KQorICAgICAgICAgICAgY29tbWFuZC5iaW5kX3RvX3Rvb2wodG9vbCkKKworICAgICAgICAgICAg
Zm9yIHBvcnRfbmFtZSBpbiB0b29sLnBvcnRfZmFjdG9yeS5hbGxfcG9ydF9uYW1lcygpOgorICAg
ICAgICAgICAgICAgIHBvcnQgPSB0b29sLnBvcnRfZmFjdG9yeS5nZXQocG9ydF9uYW1lKQorICAg
ICAgICAgICAgICAgIGZvciBwYXRoIGluIHBvcnQuZXhwZWN0YXRpb25zX2ZpbGVzKCk6CisgICAg
ICAgICAgICAgICAgICAgIHRvb2wuZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUocGF0aCwgJycp
CisKKyAgICAgICAgICAgIHRvb2wuZXhlY3V0aXZlID0gTW9ja0V4ZWN1dGl2ZShzaG91bGRfbG9n
PVRydWUpCisKKyAgICAgICAgICAgIGV4cGVjdGVkX3N0ZG91dCA9ICIiInJlYmFzZWxpbmUtanNv
bjogeydtb2NrL3BhdGgvdG8vdGVzdC5odG1sJzogeydNT0NLIGJ1aWxkZXInOiBbJ3R4dCddfX0K
KyIiIgorCisgICAgICAgICAgICBleHBlY3RlZF9zdGRlcnIgPSAiIiJNT0NLIHJ1bl9jb21tYW5k
OiBbJ2VjaG8nLCAncmViYXNlbGluZS10ZXN0LWludGVybmFsJywgJy0tc3VmZml4ZXMnLCAndHh0
JywgJy0tYnVpbGRlcicsICdNT0NLIGJ1aWxkZXInLCAnLS10ZXN0JywgJ21vY2svcGF0aC90by90
ZXN0Lmh0bWwnXSwgY3dkPS9tb2NrLWNoZWNrb3V0CitNT0NLIHJ1bl9jb21tYW5kOiBbJ2VjaG8n
LCAnb3B0aW1pemUtYmFzZWxpbmVzJywgJy0tc3VmZml4ZXMnLCAndHh0JywgJ21vY2svcGF0aC90
by90ZXN0Lmh0bWwnXSwgY3dkPS9tb2NrLWNoZWNrb3V0CisiIiIKKworICAgICAgICAgICAgYnVp
bGRlciA9ICJNT0NLIGJ1aWxkZXIiCisgICAgICAgICAgICB0ZXN0ID0gIm1vY2svcGF0aC90by90
ZXN0Lmh0bWwiCisgICAgICAgICAgICBPdXRwdXRDYXB0dXJlKCkuYXNzZXJ0X291dHB1dHMoc2Vs
ZiwgY29tbWFuZC5leGVjdXRlLCBbTW9ja09wdGlvbnMob3B0aW1pemU9VHJ1ZSwgYnVpbGRlcj1i
dWlsZGVyLCB0ZXN0PXRlc3QsIHZlcmJvc2U9VHJ1ZSksIFtdLCB0b29sXSwgZXhwZWN0ZWRfc3Rk
b3V0PWV4cGVjdGVkX3N0ZG91dCwgZXhwZWN0ZWRfc3RkZXJyPWV4cGVjdGVkX3N0ZGVycikKKwor
ICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgYnVpbGRlcnMuX2V4YWN0X21hdGNoZXMgPSBv
bGRfZXhhY3RfbWF0Y2hlcworCisgICAgZGVmIHRlc3RfcmViYXNlbGluZV9tdWx0aXBsZV9idWls
ZGVycyhzZWxmKToKKyAgICAgICAgb2xkX2V4YWN0X21hdGNoZXMgPSBidWlsZGVycy5fZXhhY3Rf
bWF0Y2hlcworICAgICAgICB0cnk6CisgICAgICAgICAgICBidWlsZGVycy5fZXhhY3RfbWF0Y2hl
cyA9IHsKKyAgICAgICAgICAgICAgICAiTU9DSyBidWlsZGVyIjogeyJwb3J0X25hbWUiOiAidGVz
dC1tYWMtbGVvcGFyZCIsICJzcGVjaWZpZXJzIjogc2V0KFsibW9jay1zcGVjaWZpZXIiXSl9LAor
ICAgICAgICAgICAgICAgICJNT0NLIGJ1aWxkZXIyIjogeyJwb3J0X25hbWUiOiAidGVzdC1tYWMt
c25vd2xlb3BhcmQiLCAic3BlY2lmaWVycyI6IHNldChbIm1vY2stc3BlY2lmaWVyMiJdKX0sCisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbW1hbmQgPSBSZWJhc2VsaW5lKCkKKyAgICAg
ICAgICAgIHRvb2wgPSBNb2NrVG9vbCgpCisgICAgICAgICAgICBjb21tYW5kLmJpbmRfdG9fdG9v
bCh0b29sKQorCisgICAgICAgICAgICBmb3IgcG9ydF9uYW1lIGluIHRvb2wucG9ydF9mYWN0b3J5
LmFsbF9wb3J0X25hbWVzKCk6CisgICAgICAgICAgICAgICAgcG9ydCA9IHRvb2wucG9ydF9mYWN0
b3J5LmdldChwb3J0X25hbWUpCisgICAgICAgICAgICAgICAgZm9yIHBhdGggaW4gcG9ydC5leHBl
Y3RhdGlvbnNfZmlsZXMoKToKKyAgICAgICAgICAgICAgICAgICAgdG9vbC5maWxlc3lzdGVtLndy
aXRlX3RleHRfZmlsZShwYXRoLCAnJykKKworICAgICAgICAgICAgdG9vbC5leGVjdXRpdmUgPSBN
b2NrRXhlY3V0aXZlKHNob3VsZF9sb2c9VHJ1ZSkKKworICAgICAgICAgICAgZGVmIG1vY2tfYnVp
bGRlcnNfdG9fcHVsbF9mcm9tKCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFtNb2NrQnVpbGRl
cignTU9DSyBidWlsZGVyJyksIE1vY2tCdWlsZGVyKCdNT0NLIGJ1aWxkZXIyJyldCisKKyAgICAg
ICAgICAgIGRlZiBtb2NrX3Rlc3RzX3RvX3VwZGF0ZShidWlsZCk6CisgICAgICAgICAgICAgICAg
cmV0dXJuIFsnbW9jay9wYXRoL3RvL3Rlc3QuaHRtbCddCisKKyAgICAgICAgICAgIGNvbW1hbmQu
X2J1aWxkZXJzX3RvX3B1bGxfZnJvbSA9IG1vY2tfYnVpbGRlcnNfdG9fcHVsbF9mcm9tCisgICAg
ICAgICAgICBjb21tYW5kLl90ZXN0c190b191cGRhdGUgPSBtb2NrX3Rlc3RzX3RvX3VwZGF0ZQor
CisgICAgICAgICAgICBleHBlY3RlZF9zdGRvdXQgPSAiIiJyZWJhc2VsaW5lLWpzb246IHsnbW9j
ay9wYXRoL3RvL3Rlc3QuaHRtbCc6IHsnTU9DSyBidWlsZGVyMic6IFsndHh0J10sICdNT0NLIGJ1
aWxkZXInOiBbJ3R4dCddfX0KKyIiIgorCisgICAgICAgICAgICBleHBlY3RlZF9zdGRlcnIgPSAi
IiJNT0NLIHJ1bl9jb21tYW5kOiBbJ2VjaG8nLCAncmViYXNlbGluZS10ZXN0LWludGVybmFsJywg
Jy0tc3VmZml4ZXMnLCAndHh0JywgJy0tYnVpbGRlcicsICdNT0NLIGJ1aWxkZXIyJywgJy0tdGVz
dCcsICdtb2NrL3BhdGgvdG8vdGVzdC5odG1sJ10sIGN3ZD0vbW9jay1jaGVja291dAorTU9DSyBy
dW5fY29tbWFuZDogWydlY2hvJywgJ3JlYmFzZWxpbmUtdGVzdC1pbnRlcm5hbCcsICctLXN1ZmZp
eGVzJywgJ3R4dCcsICctLWJ1aWxkZXInLCAnTU9DSyBidWlsZGVyJywgJy0tdGVzdCcsICdtb2Nr
L3BhdGgvdG8vdGVzdC5odG1sJ10sIGN3ZD0vbW9jay1jaGVja291dAorTU9DSyBydW5fY29tbWFu
ZDogWydlY2hvJywgJ29wdGltaXplLWJhc2VsaW5lcycsICctLXN1ZmZpeGVzJywgJ3R4dCcsICdt
b2NrL3BhdGgvdG8vdGVzdC5odG1sJ10sIGN3ZD0vbW9jay1jaGVja291dAorIiIiCisKKyAgICAg
ICAgICAgIE91dHB1dENhcHR1cmUoKS5hc3NlcnRfb3V0cHV0cyhzZWxmLCBjb21tYW5kLmV4ZWN1
dGUsIFtNb2NrT3B0aW9ucyhvcHRpbWl6ZT1UcnVlLCBidWlsZGVyPU5vbmUsIHRlc3Q9Tm9uZSwg
dmVyYm9zZT1UcnVlKSwgW10sIHRvb2xdLCBleHBlY3RlZF9zdGRvdXQ9ZXhwZWN0ZWRfc3Rkb3V0
LCBleHBlY3RlZF9zdGRlcnI9ZXhwZWN0ZWRfc3RkZXJyKQogCiAgICAgICAgIGZpbmFsbHk6CiAg
ICAgICAgICAgICBidWlsZGVycy5fZXhhY3RfbWF0Y2hlcyA9IG9sZF9leGFjdF9tYXRjaGVzCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151295</attachid>
            <date>2012-07-09 12:20:59 -0700</date>
            <delta_ts>2012-07-09 18:24:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90504-20120709122058.patch</filename>
            <type>text/plain</type>
            <size>30805</size>
            <attacher name="Ojan Vafai">ojan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyMTEyCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOTJhYzYxOGQ4NWFmMDM4ZjU5NmNkOTg2ZWIwOTI3MTk5
Y2IwMjcwNi4uYjAzMmM0ZWRiYjNjOWVmNjA2NjIzMzA1ZWE0NWU2MDhiMTdjZDUyNiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg0
IEBACisyMDEyLTA3LTA5ICBPamFuIFZhZmFpICA8b2phbkBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgSW1wcm92ZSB3ZWJraXQtcGF0Y2ggcmViYXNlbGluZSB0byB3b3JrIGZvciBtb3JlIGNhc2Vz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDUwNAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC1NYWtlcyBp
dCB3b3JrIGZvciB0aGUgYnVpbGQuY2hyb21pdW0ub3JnIGJvdHMuCisgICAgICAgIC1MZXRzIHlv
dSByZWJhc2VsaW5lIGFsbCBidWlsZGVycyBpbnN0ZWFkIG9mIGp1c3Qgb25lLgorICAgICAgICAt
TGV0cyB5b3UgcGFzcyBpbiB0aGUgYnVpbGRlcnMgb3IgdGVzdHMgdG8gcmViYXNlbGluZS4KKwor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL2hvc3QucHk6CisgICAgICAgIChIb3N0
LmJ1aWxkYm90X2Zvcl9idWlsZGVyX25hbWUpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL25ldC9idWlsZGJvdC9idWlsZGJvdC5weToKKyAgICAgICAgKEJ1aWxkZXIuX19pbml0
X18pOgorICAgICAgICAoQnVpbGRlci5sYXRlc3RfbGF5b3V0X3Rlc3RfcmVzdWx0cyk6CisgICAg
ICAgIFByb3ZpZGUgYSB3YXkgdG8gZ2V0IHRvIHRoZSBMYXlvdXRUZXN0UmVzdWx0cyBvZiB0aGUg
bGF0ZXN0IGJ1aWxkLgorICAgICAgICBNb3N0IG9mIHRoZSB0aW1lIHdlIG9ubHkgbmVlZCB0byBn
ZXQgdGhlIGxhdGVzdCBvbmUgYW5kIHRoZSBDaHJvbWl1bSBib3RzCisgICAgICAgIG9ubHkgZXhw
b3NlIHRoZSBmdWxsX3Jlc3VsdHMuanNvbiBmaWxlIGZvciB0aGUgbGF0ZXN0IGJ1aWxkLgorCisg
ICAgICAgIChCdWlsZGVyKToKKyAgICAgICAgKEJ1aWxkZXIuX2ZldGNoX2ZpbGVfZnJvbV9yZXN1
bHRzKToKKyAgICAgICAgKEJ1aWxkZXIuZmV0Y2hfbGF5b3V0X3Rlc3RfcmVzdWx0cyk6CisgICAg
ICAgIE1vdmUgdGhlc2UgZnVuY3Rpb25zIGludG8gQnVpbGRlciBzbyB0aGF0IEJ1aWxkZXIgYW5k
IEJ1aWxkIGNhbiBib3RoCisgICAgICAgIGZldGNoIGxheW91dCB0ZXN0IHJlc3VsdHMuCisKKyAg
ICAgICAgKEJ1aWxkLnJlc3VsdHNfemlwX3VybCk6CisgICAgICAgIChCdWlsZC5sYXlvdXRfdGVz
dF9yZXN1bHRzKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvYnVpbGRi
b3QvYnVpbGRib3RfdW5pdHRlc3QucHk6CisgICAgICAgIChCdWlsZGVyVGVzdC50ZXN0X2xhdGVz
dF9sYXlvdXRfdGVzdF9yZXN1bHRzKToKKyAgICAgICAgKEJ1aWxkVGVzdC50ZXN0X2xheW91dF90
ZXN0X3Jlc3VsdHMpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS91
c2VyLnB5OgorICAgICAgICAoVXNlci5wcm9tcHRfd2l0aF9tdWx0aXBsZV9saXN0cyk6CisgICAg
ICAgIFByb21wdCB3aXRoIG11bHRpcGxlIHN1Ymxpc3RzLCBidXQgc3RpbGwgaGF2ZSBhIGdsb2Jh
bCBudW1iZXJpbmcuCisgICAgICAgIFRoaXMgbGV0cyB0aGUgYnVpbGQuY2hyb21pdW0ub3JnIGJv
dHMgYmUgY2xlYXJseSBzZXBhcmF0ZWQgZnJvbSB0aGUKKyAgICAgICAgYnVpbGQud2Via2l0Lm9y
ZyBib3RzLCB3aGljaCBoZWxwcyB1bmRlcnN0YW5kIHRoZSBidWlsZGVyIG5hbWVzLgorCisgICAg
ICAgIChVc2VyKToKKyAgICAgICAgKFVzZXIuX3dhaXRfb25fbGlzdF9yZXNwb25zZSk6CisgICAg
ICAgIChVc2VyLnByb21wdF93aXRoX2xpc3QpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3N5c3RlbS91c2VyX3VuaXR0ZXN0LnB5OgorICAgICAgICAoVXNlclRlc3QudGVzdF9w
cm9tcHRfd2l0aF9tdWx0aXBsZV9saXN0cyk6CisgICAgICAgIChVc2VyVGVzdC50ZXN0X3Byb21w
dF93aXRoX211bHRpcGxlX2xpc3RzLnJ1bl9wcm9tcHRfdGVzdCk6CisgICAgICAgIChVc2VyVGVz
dC50ZXN0X3Byb21wdF93aXRoX211bHRpcGxlX2xpc3RzLnJ1bl9wcm9tcHRfdGVzdC5tb2NrX3Jh
d19pbnB1dCk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9i
YXNlLnB5OgorICAgICAgICAoUG9ydC5pc19jaHJvbWl1bSk6CisgICAgICAgIFByb3ZpZGUgYSB3
YXkgdG8gdGVsbCBpZiBhIHBvcnQgaXMgYSBDaHJvbWl1bSBwb3J0IHRoYXQgZG9lc24ndCBpbnZv
bHZlIHN0cmluZworICAgICAgICBtYW5pcHVsYXRpb24gb24gdGhlIHBvcnQgbmFtZSBvciBidWls
ZGVyIG5hbWUuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2J1aWxkZXJzLnB5OgorICAgICAgICAoYnVpbGRlcl9wYXRoX2Zyb21fbmFtZSk6CisgICAgICAg
IChhbGxfYnVpbGRlcl9uYW1lcyk6CisgICAgICAgIE1lbW9pemluZyBoZXJlIGlzIGluY29ycmVj
dCBiZWNhdXNlIHRoZSB0ZXN0IG92ZXJyaWRlIF9leGFjdF9tYXRjaGVzLAorICAgICAgICBzbyB0
aGVzZSBjYW4gcmV0dXJuIGRpZmZlcmVudCB2YWx1ZXMuIEluIGVpdGhlciBjYXNlLCBJJ20gcHJl
dHR5IHN1cmUgdGhlc2UKKyAgICAgICAgYXJlIG5vdCByZW1vdGVseSBob3QgY29kZXBhdGhzLiBJ
IG1hbnVhbGx5IGluc3BlY3RlZCBhbGwgY2FsbCBzaXRlcyBhbmQgdGhleSdyZQorICAgICAgICBh
bGwgaW4gaGlnaC1sZXZlbCBjYWxscyAoZS5nLiBleGVjdXRlIGNhbGxzIGZvciB3ZWJraXQtcGF0
Y2ggY29tbWFuZHMpIGFuZCBub3QKKyAgICAgICAgY2FsbGVkIGluIGEgbG9vcC4KKworICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHk6CisgICAg
ICAgIChDaHJvbWl1bVBvcnQuaXNfY2hyb21pdW0pOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvdG9vbC9jb21tYW5kcy9yZWJhc2VsaW5lLnB5OgorICAgICAgICAoUmViYXNlbGluZVRlc3Qu
X3Jlc3VsdHNfdXJsKToKKyAgICAgICAgKEFic3RyYWN0UGFyYWxsZWxSZWJhc2VsaW5lQ29tbWFu
ZC5fX2luaXRfXyk6CisgICAgICAgIChSZWJhc2VsaW5lLl9faW5pdF9fKToKKyAgICAgICAgKFJl
YmFzZWxpbmUpOgorICAgICAgICAoUmViYXNlbGluZS5fYnVpbGRlcnNfdG9fcHVsbF9mcm9tKToK
KyAgICAgICAgKFJlYmFzZWxpbmUuX3Rlc3RzX3RvX3VwZGF0ZSk6CisgICAgICAgIChSZWJhc2Vs
aW5lLmV4ZWN1dGUpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9y
ZWJhc2VsaW5lX3VuaXR0ZXN0LnB5OgorICAgICAgICAodGVzdF9yZWJhc2VsaW5lLm1vY2tfYnVp
bGRlcnNfdG9fcHVsbF9mcm9tKToKKyAgICAgICAgKHRlc3RfcmViYXNlbGluZSk6CisgICAgICAg
ICh0ZXN0X3JlYmFzZWxpbmVfY29tbWFuZF9saW5lX2ZsYWdzKToKKyAgICAgICAgKHRlc3RfcmVi
YXNlbGluZV9tdWx0aXBsZV9idWlsZGVycyk6CisgICAgICAgICh0ZXN0X3JlYmFzZWxpbmVfbXVs
dGlwbGVfYnVpbGRlcnMubW9ja19idWlsZGVyc190b19wdWxsX2Zyb20pOgorICAgICAgICAodGVz
dF9yZWJhc2VsaW5lX211bHRpcGxlX2J1aWxkZXJzLm1vY2tfdGVzdHNfdG9fdXBkYXRlKToKKyAg
ICAgICAgKHRlc3RfcmViYXNlbGluZV9tdWx0aXBsZV9idWlsZGVyc19hbmRfdGVzdHNfY29tbWFu
ZF9saW5lKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvbW9ja3Rvb2wucHk6Cisg
ICAgICAgIChNb2NrVG9vbC5pcmMpOgorICAgICAgICAoTW9ja1Rvb2wpOgorICAgICAgICAoTW9j
a1Rvb2wuYnVpbGRib3RfZm9yX2J1aWxkZXJfbmFtZSk6CisKIDIwMTItMDctMDkgIFphbiBEb2Jl
cnNlayAgPHphbmRvYmVyc2VrQGdtYWlsLmNvbT4KIAogICAgICAgICBbR3RrXSBVbnNraXAgdGhl
IENTUyBSZWdpb25zIGxheW91dCB0ZXN0cwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vaG9zdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2hvc3Qu
cHkKaW5kZXggMDgzMTIwMjI3YmU2MDIwMGZiZWU4OTJiZTAyMDQzNjNiNWMyYTUyNi4uNTM4ODk2
NTdiMDQ1ODA1ZjA4OGRiMzhiMjIwZWY0ZGZmMTg0MTQzMSAxMDA2NDQKLS0tIGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vaG9zdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi9ob3N0LnB5CkBAIC0xMzgsNiArMTM4LDExIEBAIGNsYXNzIEhvc3QoU3lzdGVtSG9z
dCk6CiAgICAgZGVmIGNoZWNrb3V0KHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fY2hlY2tv
dXQKIAorICAgIGRlZiBidWlsZGJvdF9mb3JfYnVpbGRlcl9uYW1lKHNlbGYsIG5hbWUpOgorICAg
ICAgICBpZiBzZWxmLnBvcnRfZmFjdG9yeS5nZXRfZnJvbV9idWlsZGVyX25hbWUobmFtZSkuaXNf
Y2hyb21pdW0oKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmNocm9taXVtX2J1aWxkYm90KCkK
KyAgICAgICAgcmV0dXJuIHNlbGYuYnVpbGRib3QKKwogICAgIEBtZW1vaXplZAogICAgIGRlZiBj
aHJvbWl1bV9idWlsZGJvdChzZWxmKToKICAgICAgICAgcmV0dXJuIENocm9taXVtQnVpbGRCb3Qo
KQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L2J1aWxkYm90
L2J1aWxkYm90LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L2J1aWxkYm90
L2J1aWxkYm90LnB5CmluZGV4IDRlODIwY2VlMGZlZjcyY2RiMWIzMjE4Y2E0NjkyYmRmZWE3Mjhl
NWYuLjQ1MjI2NmM0MzA4YmNmOTUyYThmODNiODNkYzVjZGUyMjFhMDg3ZjkgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC9idWlsZGJvdC9idWlsZGJvdC5weQor
KysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvYnVpbGRib3QvYnVpbGRib3Qu
cHkKQEAgLTUzLDYgKzUzLDcgQEAgY2xhc3MgQnVpbGRlcihvYmplY3QpOgogICAgICAgICBmcm9t
IHdlYmtpdHB5LnRoaXJkcGFydHkuYXV0b2luc3RhbGxlZC5tZWNoYW5pemUgaW1wb3J0IEJyb3dz
ZXIKICAgICAgICAgc2VsZi5fYnJvd3NlciA9IEJyb3dzZXIoKQogICAgICAgICBzZWxmLl9icm93
c2VyLnNldF9oYW5kbGVfcm9ib3RzKEZhbHNlKSAjIFRoZSBidWlsZGVyIHBhZ2VzIGFyZSBleGNs
dWRlZCBieSByb2JvdHMudHh0CisgICAgICAgIHNlbGYuX2xheW91dF90ZXN0X3Jlc3VsdHMgPSBO
b25lCiAKICAgICBkZWYgbmFtZShzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX25hbWUKQEAg
LTY1LDYgKzY2LDM0IEBAIGNsYXNzIEJ1aWxkZXIob2JqZWN0KToKICAgICBkZWYgYWNjdW11bGF0
ZWRfcmVzdWx0c191cmwoc2VsZik6CiAgICAgICAgIHJldHVybiBOb25lCiAKKyAgICBkZWYgbGF0
ZXN0X2xheW91dF90ZXN0X3Jlc3VsdHMoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2xheW91dF90
ZXN0X3Jlc3VsdHM6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fbGF5b3V0X3Rlc3RfcmVzdWx0
cworCisgICAgICAgIGlmIHNlbGYuYWNjdW11bGF0ZWRfcmVzdWx0c191cmwoKToKKyAgICAgICAg
ICAgIHNlbGYuX2xheW91dF90ZXN0X3Jlc3VsdHMgPSBzZWxmLmZldGNoX2xheW91dF90ZXN0X3Jl
c3VsdHMoc2VsZi5hY2N1bXVsYXRlZF9yZXN1bHRzX3VybCgpKQorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgc2VsZi5fbGF5b3V0X3Rlc3RfcmVzdWx0cyA9IHNlbGYubGF0ZXN0X2NhY2hlZF9i
dWlsZCgpLmxheW91dF90ZXN0X3Jlc3VsdHMoKQorICAgICAgICByZXR1cm4gc2VsZi5fbGF5b3V0
X3Rlc3RfcmVzdWx0cworCisgICAgZGVmIF9mZXRjaF9maWxlX2Zyb21fcmVzdWx0cyhzZWxmLCBy
ZXN1bHRzX3VybCwgZmlsZV9uYW1lKToKKyAgICAgICAgIyBJdCBzZWVtcyB0aGlzIGNhbiByZXR1
cm4gTm9uZSBpZiB0aGUgdXJsIHJlZGlyZWN0cyBhbmQgdGhlbiByZXR1cm5zIDQwNC4KKyAgICAg
ICAgcmVzdWx0ID0gdXJsbGliMi51cmxvcGVuKCIlcy8lcyIgJSAocmVzdWx0c191cmwsIGZpbGVf
bmFtZSkpCisgICAgICAgIGlmIG5vdCByZXN1bHQ6CisgICAgICAgICAgICByZXR1cm4gTm9uZQor
ICAgICAgICAjIHVybG9wZW4gcmV0dXJucyBhIGZpbGUtbGlrZSBvYmplY3Qgd2hpY2ggc29tZXRp
bWVzIHdvcmtzIGZpbmUgd2l0aCBzdHIoKQorICAgICAgICAjIGJ1dCBzb21ldGltZXMgaXMgYSBh
ZGRpbmZvdXJsIG9iamVjdC4gIEluIGVpdGhlciBjYXNlIGNhbGxpbmcgcmVhZCgpIGlzIGNvcnJl
Y3QuCisgICAgICAgIHJldHVybiByZXN1bHQucmVhZCgpCisKKyAgICBkZWYgZmV0Y2hfbGF5b3V0
X3Rlc3RfcmVzdWx0cyhzZWxmLCByZXN1bHRzX3VybCk6CisgICAgICAgICMgRklYTUU6IFRoaXMg
c2hvdWxkIGNhY2hlIHRoYXQgdGhlIHJlc3VsdCB3YXMgYSA0MDQgYW5kIHN0b3AgaGl0dGluZyB0
aGUgbmV0d29yay4KKyAgICAgICAgcmVzdWx0c19maWxlID0gTmV0d29ya1RyYW5zYWN0aW9uKGNv
bnZlcnRfNDA0X3RvX05vbmU9VHJ1ZSkucnVuKGxhbWJkYTogc2VsZi5fZmV0Y2hfZmlsZV9mcm9t
X3Jlc3VsdHMocmVzdWx0c191cmwsICJmdWxsX3Jlc3VsdHMuanNvbiIpKQorICAgICAgICBpZiBu
b3QgcmVzdWx0c19maWxlOgorICAgICAgICAgICAgcmVzdWx0c19maWxlID0gTmV0d29ya1RyYW5z
YWN0aW9uKGNvbnZlcnRfNDA0X3RvX05vbmU9VHJ1ZSkucnVuKGxhbWJkYTogc2VsZi5fZmV0Y2hf
ZmlsZV9mcm9tX3Jlc3VsdHMocmVzdWx0c191cmwsICJyZXN1bHRzLmh0bWwiKSkKKworICAgICAg
ICAjIHJlc3VsdHNfZnJvbV9zdHJpbmcgYWNjZXB0cyBlaXRoZXIgT1JXVCBodG1sIG9yIE5SV1Qg
anNvbi4KKyAgICAgICAgcmV0dXJuIExheW91dFRlc3RSZXN1bHRzLnJlc3VsdHNfZnJvbV9zdHJp
bmcocmVzdWx0c19maWxlKQorCiAgICAgZGVmIHVybF9lbmNvZGVkX25hbWUoc2VsZik6CiAgICAg
ICAgIHJldHVybiB1cmxsaWIucXVvdGUoc2VsZi5fbmFtZSkKIApAQCAtMjQ1LDI2ICsyNzQsMTEg
QEAgY2xhc3MgQnVpbGQob2JqZWN0KToKICAgICBkZWYgcmVzdWx0c196aXBfdXJsKHNlbGYpOgog
ICAgICAgICByZXR1cm4gIiVzLnppcCIgJSBzZWxmLnJlc3VsdHNfdXJsKCkKIAotICAgIGRlZiBf
ZmV0Y2hfZmlsZV9mcm9tX3Jlc3VsdHMoc2VsZiwgZmlsZV9uYW1lKToKLSAgICAgICAgIyBJdCBz
ZWVtcyB0aGlzIGNhbiByZXR1cm4gTm9uZSBpZiB0aGUgdXJsIHJlZGlyZWN0cyBhbmQgdGhlbiBy
ZXR1cm5zIDQwNC4KLSAgICAgICAgcmVzdWx0ID0gdXJsbGliMi51cmxvcGVuKCIlcy8lcyIgJSAo
c2VsZi5yZXN1bHRzX3VybCgpLCBmaWxlX25hbWUpKQotICAgICAgICBpZiBub3QgcmVzdWx0Ogot
ICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgIyB1cmxvcGVuIHJldHVybnMgYSBmaWxl
LWxpa2Ugb2JqZWN0IHdoaWNoIHNvbWV0aW1lcyB3b3JrcyBmaW5lIHdpdGggc3RyKCkKLSAgICAg
ICAgIyBidXQgc29tZXRpbWVzIGlzIGEgYWRkaW5mb3VybCBvYmplY3QuICBJbiBlaXRoZXIgY2Fz
ZSBjYWxsaW5nIHJlYWQoKSBpcyBjb3JyZWN0LgotICAgICAgICByZXR1cm4gcmVzdWx0LnJlYWQo
KQotCiAgICAgZGVmIGxheW91dF90ZXN0X3Jlc3VsdHMoc2VsZik6CiAgICAgICAgIGlmIHNlbGYu
X2xheW91dF90ZXN0X3Jlc3VsdHM6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fbGF5b3V0X3Rl
c3RfcmVzdWx0cwogCi0gICAgICAgICMgRklYTUU6IFRoaXMgc2hvdWxkIGNhY2hlIHRoYXQgdGhl
IHJlc3VsdCB3YXMgYSA0MDQgYW5kIHN0b3AgaGl0dGluZyB0aGUgbmV0d29yay4KLSAgICAgICAg
cmVzdWx0c19maWxlID0gTmV0d29ya1RyYW5zYWN0aW9uKGNvbnZlcnRfNDA0X3RvX05vbmU9VHJ1
ZSkucnVuKGxhbWJkYTogc2VsZi5fZmV0Y2hfZmlsZV9mcm9tX3Jlc3VsdHMoImZ1bGxfcmVzdWx0
cy5qc29uIikpCi0gICAgICAgIGlmIG5vdCByZXN1bHRzX2ZpbGU6Ci0gICAgICAgICAgICByZXN1
bHRzX2ZpbGUgPSBOZXR3b3JrVHJhbnNhY3Rpb24oY29udmVydF80MDRfdG9fTm9uZT1UcnVlKS5y
dW4obGFtYmRhOiBzZWxmLl9mZXRjaF9maWxlX2Zyb21fcmVzdWx0cygicmVzdWx0cy5odG1sIikp
Ci0KLSAgICAgICAgIyByZXN1bHRzX2Zyb21fc3RyaW5nIGFjY2VwdHMgZWl0aGVyIE9SV1QgaHRt
bCBvciBOUldUIGpzb24uCi0gICAgICAgIHNlbGYuX2xheW91dF90ZXN0X3Jlc3VsdHMgPSBMYXlv
dXRUZXN0UmVzdWx0cy5yZXN1bHRzX2Zyb21fc3RyaW5nKHJlc3VsdHNfZmlsZSkKKyAgICAgICAg
c2VsZi5fbGF5b3V0X3Rlc3RfcmVzdWx0cyA9IHNlbGYuX2J1aWxkZXIuZmV0Y2hfbGF5b3V0X3Rl
c3RfcmVzdWx0cyhzZWxmLnJlc3VsdHNfdXJsKCkpCiAgICAgICAgIHJldHVybiBzZWxmLl9sYXlv
dXRfdGVzdF9yZXN1bHRzCiAKICAgICBkZWYgYnVpbGRlcihzZWxmKToKZGlmZiAtLWdpdCBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC9idWlsZGJvdC9idWlsZGJvdF91bml0dGVz
dC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC9idWlsZGJvdC9idWlsZGJv
dF91bml0dGVzdC5weQppbmRleCAyMzEzMzI2MTE3NDFkYmRmNmZlYjdhYTY0Y2IwMzMwNGQwMjQy
YjVkLi43MWMzYTFmZTdjYjk5M2Q3ZjgyODFkN2Y3ZmFjZThjMmRiYmE0YmM2IDEwMDY0NAotLS0g
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvYnVpbGRib3QvYnVpbGRib3RfdW5p
dHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L2J1aWxkYm90
L2J1aWxkYm90X3VuaXR0ZXN0LnB5CkBAIC01Nyw2ICs1NywxMSBAQCBjbGFzcyBCdWlsZGVyVGVz
dCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHNlbGYuYnVpbGRlciA9IEJ1aWxkZXIodSJU
ZXN0IEJ1aWxkZXIgXHUyNjYxIiwgc2VsZi5idWlsZGJvdCkKICAgICAgICAgc2VsZi5faW5zdGFs
bF9mZXRjaF9idWlsZChsYW1iZGEgYnVpbGRfbnVtYmVyOiBbInRlc3QxIiwgInRlc3QyIl0pCiAK
KyAgICBkZWYgdGVzdF9sYXRlc3RfbGF5b3V0X3Rlc3RfcmVzdWx0cyhzZWxmKToKKyAgICAgICAg
c2VsZi5idWlsZGVyLmZldGNoX2xheW91dF90ZXN0X3Jlc3VsdHMgPSBsYW1iZGEgcmVzdWx0c191
cmw6IExheW91dFRlc3RSZXN1bHRzKFtzZWxmLl9tb2NrX3Rlc3RfcmVzdWx0KHRlc3RuYW1lKSBm
b3IgdGVzdG5hbWUgaW4gWyJ0ZXN0MSIsICJ0ZXN0MiJdXSkKKyAgICAgICAgc2VsZi5idWlsZGVy
LmFjY3VtdWxhdGVkX3Jlc3VsdHNfdXJsID0gbGFtYmRhOiAiaHR0cDovL2R1bW15X3VybC5vcmci
CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmJ1aWxkZXIubGF0ZXN0X2xheW91dF90ZXN0
X3Jlc3VsdHMoKSkKKwogICAgIGRlZiB0ZXN0X2ZpbmRfcmVncmVzc2lvbl93aW5kb3coc2VsZik6
CiAgICAgICAgIHJlZ3Jlc3Npb25fd2luZG93ID0gc2VsZi5idWlsZGVyLmZpbmRfcmVncmVzc2lv
bl93aW5kb3coc2VsZi5idWlsZGVyLmJ1aWxkKDEwKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChyZWdyZXNzaW9uX3dpbmRvdy5idWlsZF9iZWZvcmVfZmFpbHVyZSgpLnJldmlzaW9uKCksIDEw
MDMpCkBAIC0xNDcsOCArMTUyLDggQEAgY2xhc3MgQnVpbGRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNl
KToKICAgICBkZWYgdGVzdF9sYXlvdXRfdGVzdF9yZXN1bHRzKHNlbGYpOgogICAgICAgICBidWls
ZGJvdCA9IEJ1aWxkQm90KCkKICAgICAgICAgYnVpbGRlciA9IEJ1aWxkZXIodSJGb28gQnVpbGRl
ciAodGVzdCkiLCBidWlsZGJvdCkKKyAgICAgICAgYnVpbGRlci5fZmV0Y2hfZmlsZV9mcm9tX3Jl
c3VsdHMgPSBsYW1iZGEgcmVzdWx0c191cmwsIGZpbGVfbmFtZTogTm9uZQogICAgICAgICBidWls
ZCA9IEJ1aWxkKGJ1aWxkZXIsIE5vbmUsIE5vbmUsIE5vbmUpCi0gICAgICAgIGJ1aWxkLl9mZXRj
aF9maWxlX2Zyb21fcmVzdWx0cyA9IGxhbWJkYSBmaWxlX25hbWU6IE5vbmUKICAgICAgICAgIyBU
ZXN0IHRoYXQgbGF5b3V0X3Rlc3RfcmVzdWx0cygpIHJldHVybnMgTm9uZSBpZiB0aGUgZmV0Y2gg
ZmFpbHMuCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVpbGQubGF5b3V0X3Rlc3RfcmVzdWx0
cygpLCBOb25lKQogCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9z
eXN0ZW0vdXNlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS91c2Vy
LnB5CmluZGV4IGUyMDQwNTkxMjhkYTQyZDgzMDhhYjYwZGNlNGM1MDkxMDBjMTNlNzUuLjI2MmI5
Nzk0NDk3YjA1NGRkNjcyZjQ3MDFlZmJhMDVlZWUxZWJkNTUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS91c2VyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvY29tbW9uL3N5c3RlbS91c2VyLnB5CkBAIC03NCwxNCArNzQsMjAgQEAgY2xhc3Mg
VXNlcihvYmplY3QpOgogICAgICAgICByZXR1cm4gY2xzLnByb21wdChtZXNzYWdlLCByZXBlYXQ9
cmVwZWF0LCByYXdfaW5wdXQ9Z2V0cGFzcy5nZXRwYXNzKQogCiAgICAgQGNsYXNzbWV0aG9kCi0g
ICAgZGVmIHByb21wdF93aXRoX2xpc3QoY2xzLCBsaXN0X3RpdGxlLCBsaXN0X2l0ZW1zLCBjYW5f
Y2hvb3NlX211bHRpcGxlPUZhbHNlLCByYXdfaW5wdXQ9cmF3X2lucHV0KToKKyAgICBkZWYgcHJv
bXB0X3dpdGhfbXVsdGlwbGVfbGlzdHMoY2xzLCBsaXN0X3RpdGxlLCBzdWJ0aXRsZXMsIGxpc3Rz
LCBjYW5fY2hvb3NlX211bHRpcGxlPUZhbHNlLCByYXdfaW5wdXQ9cmF3X2lucHV0KToKKyAgICAg
ICAgaXRlbV9pbmRleCA9IDAKKyAgICAgICAgY3VtdWxhdGVkX2xpc3QgPSBbXQogICAgICAgICBw
cmludCBsaXN0X3RpdGxlCi0gICAgICAgIGkgPSAwCi0gICAgICAgIGZvciBpdGVtIGluIGxpc3Rf
aXRlbXM6Ci0gICAgICAgICAgICBpICs9IDEKLSAgICAgICAgICAgIHByaW50ICIlMmQuICVzIiAl
IChpLCBpdGVtKQorICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oc3VidGl0bGVzKSk6CisgICAg
ICAgICAgICBwcmludCAiXG4iICsgc3VidGl0bGVzW2ldCisgICAgICAgICAgICBmb3IgaXRlbSBp
biBsaXN0c1tpXToKKyAgICAgICAgICAgICAgICBpdGVtX2luZGV4ICs9IDEKKyAgICAgICAgICAg
ICAgICBwcmludCAiJTJkLiAlcyIgJSAoaXRlbV9pbmRleCwgaXRlbSkKKyAgICAgICAgICAgIGN1
bXVsYXRlZF9saXN0ICs9IGxpc3RzW2ldCisgICAgICAgIHJldHVybiBjbHMuX3dhaXRfb25fbGlz
dF9yZXNwb25zZShjdW11bGF0ZWRfbGlzdCwgY2FuX2Nob29zZV9tdWx0aXBsZSwgcmF3X2lucHV0
KQogCi0gICAgICAgICMgTG9vcCB1bnRpbCB3ZSBnZXQgdmFsaWQgaW5wdXQKKyAgICBAY2xhc3Nt
ZXRob2QKKyAgICBkZWYgX3dhaXRfb25fbGlzdF9yZXNwb25zZShjbHMsIGxpc3RfaXRlbXMsIGNh
bl9jaG9vc2VfbXVsdGlwbGUsIHJhd19pbnB1dCk6CiAgICAgICAgIHdoaWxlIFRydWU6CiAgICAg
ICAgICAgICBpZiBjYW5fY2hvb3NlX211bHRpcGxlOgogICAgICAgICAgICAgICAgIHJlc3BvbnNl
ID0gY2xzLnByb21wdCgiRW50ZXIgb25lIG9yIG1vcmUgbnVtYmVycyAoY29tbWEtc2VwYXJhdGVk
KSwgb3IgXCJhbGxcIjogIiwgcmF3X2lucHV0PXJhd19pbnB1dCkKQEAgLTk5LDYgKzEwNSwxNSBA
QCBjbGFzcyBVc2VyKG9iamVjdCk6CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGxpc3RfaXRlbXNbcmVzdWx0XQogCisgICAgQGNsYXNzbWV0aG9k
CisgICAgZGVmIHByb21wdF93aXRoX2xpc3QoY2xzLCBsaXN0X3RpdGxlLCBsaXN0X2l0ZW1zLCBj
YW5fY2hvb3NlX211bHRpcGxlPUZhbHNlLCByYXdfaW5wdXQ9cmF3X2lucHV0KToKKyAgICAgICAg
cHJpbnQgbGlzdF90aXRsZQorICAgICAgICBpID0gMAorICAgICAgICBmb3IgaXRlbSBpbiBsaXN0
X2l0ZW1zOgorICAgICAgICAgICAgaSArPSAxCisgICAgICAgICAgICBwcmludCAiJTJkLiAlcyIg
JSAoaSwgaXRlbSkKKyAgICAgICAgcmV0dXJuIGNscy5fd2FpdF9vbl9saXN0X3Jlc3BvbnNlKGxp
c3RfaXRlbXMsIGNhbl9jaG9vc2VfbXVsdGlwbGUsIHJhd19pbnB1dCkKKwogICAgIGRlZiBlZGl0
KHNlbGYsIGZpbGVzKToKICAgICAgICAgZWRpdG9yID0gb3MuZW52aXJvbi5nZXQoIkVESVRPUiIp
IG9yICJ2aSIKICAgICAgICAgYXJncyA9IHNobGV4LnNwbGl0KGVkaXRvcikKZGlmZiAtLWdpdCBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS91c2VyX3VuaXR0ZXN0LnB5IGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3VzZXJfdW5pdHRlc3QucHkKaW5k
ZXggN2VjOWIzNGU0NzgzZWM1MmYwMGU4Zjc4ZGRkYWU4YTA2YzQ3MzAyYi4uOGI3Y2MxYzBjODI1
YjQxNDBmMTg1MDc5ODczNTVkNjQ1ZDYyNDcyOCAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9jb21tb24vc3lzdGVtL3VzZXJfdW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3VzZXJfdW5pdHRlc3QucHkKQEAgLTUxLDYgKzUxLDMy
IEBAIGNsYXNzIFVzZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgICAgIHJldHVy
biBOb25lCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVXNlci5wcm9tcHQoImlucHV0IiwgcmVw
ZWF0PXNlbGYucmVwZWF0c1JlbWFpbmluZywgcmF3X2lucHV0PW1vY2tfcmF3X2lucHV0KSwgTm9u
ZSkKIAorICAgIGRlZiB0ZXN0X3Byb21wdF93aXRoX211bHRpcGxlX2xpc3RzKHNlbGYpOgorICAg
ICAgICBkZWYgcnVuX3Byb21wdF90ZXN0KGlucHV0cywgZXhwZWN0ZWRfcmVzdWx0LCBjYW5fY2hv
b3NlX211bHRpcGxlPUZhbHNlKToKKyAgICAgICAgICAgIGRlZiBtb2NrX3Jhd19pbnB1dChtZXNz
YWdlKToKKyAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXRzLnBvcCgwKQorICAgICAgICAgICAg
b3V0cHV0X2NhcHR1cmUgPSBPdXRwdXRDYXB0dXJlKCkKKyAgICAgICAgICAgIGFjdHVhbF9yZXN1
bHQgPSBvdXRwdXRfY2FwdHVyZS5hc3NlcnRfb3V0cHV0cygKKyAgICAgICAgICAgICAgICBzZWxm
LAorICAgICAgICAgICAgICAgIFVzZXIucHJvbXB0X3dpdGhfbXVsdGlwbGVfbGlzdHMsCisgICAg
ICAgICAgICAgICAgYXJncz1bInRpdGxlIiwgWyJzdWJ0aXRsZTEiLCAic3VidGl0bGUyIl0sIFtb
ImZvbyIsICJiYXIiXSwgWyJmb29iYXIiLCAiYmFyYmF6Il1dXSwKKyAgICAgICAgICAgICAgICBr
d2FyZ3M9eyJjYW5fY2hvb3NlX211bHRpcGxlIjogY2FuX2Nob29zZV9tdWx0aXBsZSwgInJhd19p
bnB1dCI6IG1vY2tfcmF3X2lucHV0fSwKKyAgICAgICAgICAgICAgICBleHBlY3RlZF9zdGRvdXQ9
InRpdGxlXG5cbnN1YnRpdGxlMVxuIDEuIGZvb1xuIDIuIGJhclxuXG5zdWJ0aXRsZTJcbiAzLiBm
b29iYXJcbiA0LiBiYXJiYXpcbiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVh
bF9yZXN1bHQsIGV4cGVjdGVkX3Jlc3VsdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
bGVuKGlucHV0cyksIDApCisKKyAgICAgICAgcnVuX3Byb21wdF90ZXN0KFsiMSJdLCAiZm9vIikK
KyAgICAgICAgcnVuX3Byb21wdF90ZXN0KFsiYmFkaW5wdXQiLCAiMiJdLCAiYmFyIikKKyAgICAg
ICAgcnVuX3Byb21wdF90ZXN0KFsiMyJdLCAiZm9vYmFyIikKKyAgICAgICAgcnVuX3Byb21wdF90
ZXN0KFsiNCJdLCAiYmFyYmF6IikKKworICAgICAgICBydW5fcHJvbXB0X3Rlc3QoWyIxLDIiXSwg
WyJmb28iLCAiYmFyIl0sIGNhbl9jaG9vc2VfbXVsdGlwbGU9VHJ1ZSkKKyAgICAgICAgcnVuX3By
b21wdF90ZXN0KFsiICAxLCAgMiAgICJdLCBbImZvbyIsICJiYXIiXSwgY2FuX2Nob29zZV9tdWx0
aXBsZT1UcnVlKQorICAgICAgICBydW5fcHJvbXB0X3Rlc3QoWyJhbGwiXSwgWyJmb28iLCAiYmFy
IiwgJ2Zvb2JhcicsICdiYXJiYXonXSwgY2FuX2Nob29zZV9tdWx0aXBsZT1UcnVlKQorICAgICAg
ICBydW5fcHJvbXB0X3Rlc3QoWyIiXSwgWyJmb28iLCAiYmFyIiwgJ2Zvb2JhcicsICdiYXJiYXon
XSwgY2FuX2Nob29zZV9tdWx0aXBsZT1UcnVlKQorICAgICAgICBydW5fcHJvbXB0X3Rlc3QoWyIg
ICJdLCBbImZvbyIsICJiYXIiLCAnZm9vYmFyJywgJ2JhcmJheiddLCBjYW5fY2hvb3NlX211bHRp
cGxlPVRydWUpCisgICAgICAgIHJ1bl9wcm9tcHRfdGVzdChbImJhZGlucHV0IiwgImFsbCJdLCBb
ImZvbyIsICJiYXIiLCAnZm9vYmFyJywgJ2JhcmJheiddLCBjYW5fY2hvb3NlX211bHRpcGxlPVRy
dWUpCisKICAgICBkZWYgdGVzdF9wcm9tcHRfd2l0aF9saXN0KHNlbGYpOgogICAgICAgICBkZWYg
cnVuX3Byb21wdF90ZXN0KGlucHV0cywgZXhwZWN0ZWRfcmVzdWx0LCBjYW5fY2hvb3NlX211bHRp
cGxlPUZhbHNlKToKICAgICAgICAgICAgIGRlZiBtb2NrX3Jhd19pbnB1dChtZXNzYWdlKToKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5w
eSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weQppbmRl
eCBjMTg2YWM4MzI5Y2I3MTlhZjY1NWM4Zjc5NDQ3ZTJiYmFkODgwNzYyLi5mYmYwYjkzMGI4ZDA0
NTIyMWE5OWYyNjMxMWZkMzRlMDFmYmU0YzA1IDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CkBAIC02NTQsNiArNjU0LDkgQEAgY2xhc3Mg
UG9ydChvYmplY3QpOgogICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgIHJldHVy
biBGYWxzZQogCisgICAgZGVmIGlzX2Nocm9taXVtKHNlbGYpOgorICAgICAgICByZXR1cm4gRmFs
c2UKKwogICAgIGRlZiBuYW1lKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm5zIGEgbmFtZSB0aGF0
IHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBwYXJ0aWN1bGFyIHR5cGUgb2YgcG9ydAogICAgICAg
ICAoZS5nLiwgIm1hYy1zbm93bGVvcGFyZCIgb3IgImNocm9taXVtLWxpbnV4LXg4Nl94NjQiIGFu
ZCBjYW4gYmUgcGFzc2VkCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L2J1aWxkZXJzLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC9idWlsZGVycy5weQppbmRleCBiMjg5Yjk3NmFkN2FlYTJjYzNjZjJiYjI1YzEy
ZGI1NTU5YjIzMzk4Li4yMWZjYzk4MDE1ZjhhNDY4YzY0YjFjZWUwNDc0OWRiNGM0NzZlYTk2IDEw
MDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2J1aWxk
ZXJzLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYnVp
bGRlcnMucHkKQEAgLTk2LDEyICs5NiwxMCBAQCBkZWYgYnVpbGRlcl9wYXRoX2Zyb21fbmFtZShi
dWlsZGVyX25hbWUpOgogICAgIHJldHVybiByZS5zdWIocidbXHMoKS5dJywgJ18nLCBidWlsZGVy
X25hbWUpCiAKIAotQG1lbW9pemVkCiBkZWYgYWxsX2J1aWxkZXJfbmFtZXMoKToKICAgICByZXR1
cm4gc29ydGVkKHNldChfZXhhY3RfbWF0Y2hlcy5rZXlzKCkpKQogCiAKLUBtZW1vaXplZAogZGVm
IGFsbF9wb3J0X25hbWVzKCk6CiAgICAgcmV0dXJuIHNvcnRlZChzZXQobWFwKGxhbWJkYSB4OiB4
WyJwb3J0X25hbWUiXSwgX2V4YWN0X21hdGNoZXMudmFsdWVzKCkpICsgX3BvcnRzX3dpdGhvdXRf
YnVpbGRlcnMpKQogCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2Nocm9taXVtLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9jaHJvbWl1bS5weQppbmRleCA1YjY5MjRjZmVlYjczM2I5Njk4M2FjOTRiNTIzYmRj
ODk3ZGNiZGM4Li4yNGY3ZWZhMGY1Yzk3OGYxNjk1ZjgyZTQ1OWE5NmI1YjI0ODE0YTFkIDEwMDc1
NQotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVt
LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21p
dW0ucHkKQEAgLTExMCw2ICsxMTAsOSBAQCBjbGFzcyBDaHJvbWl1bVBvcnQoV2ViS2l0UG9ydCk6
CiAgICAgICAgICMgQWxsIHN1Yi1jbGFzc2VzIG92ZXJyaWRlIHRoaXMsIGJ1dCB3ZSBuZWVkIGFu
IGluaXRpYWwgdmFsdWUgZm9yIHRlc3RpbmcuCiAgICAgICAgIHNlbGYuX2Nocm9taXVtX2Jhc2Vf
ZGlyX3BhdGggPSBOb25lCiAKKyAgICBkZWYgaXNfY2hyb21pdW0oc2VsZik6CisgICAgICAgIHJl
dHVybiBUcnVlCisKICAgICBkZWYgZGVmYXVsdF9waXhlbF90ZXN0cyhzZWxmKToKICAgICAgICAg
cmV0dXJuIFRydWUKIApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2Nv
bW1hbmRzL3JlYmFzZWxpbmUucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFu
ZHMvcmViYXNlbGluZS5weQppbmRleCBjYWE1ZjViNzM3MDYyMmI0MzZmNDIwMWQ2M2YxN2MzNjE3
NDY1YzczLi4yZGRkOTdmZDgxZDY5ODQ2MTMyMDVkZjAxOTQ1OWVhNTJkMDVkNjI1IDEwMDY0NAot
LS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcmViYXNlbGluZS5weQor
KysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcmViYXNlbGluZS5weQpA
QCAtODEsOSArODEsOSBAQCBjbGFzcyBSZWJhc2VsaW5lVGVzdChBYnN0cmFjdFJlYmFzZWxpbmlu
Z0NvbW1hbmQpOgogICAgICAgICBzZWxmLl9zY21fY2hhbmdlcyA9IHsnYWRkJzogW119CiAKICAg
ICBkZWYgX3Jlc3VsdHNfdXJsKHNlbGYsIGJ1aWxkZXJfbmFtZSk6CisgICAgICAgICMgRklYTUU6
IFVzZSBzZWxmLl90b29sLmJ1aWxkYm90X2Zvcl9idWlsZGVyX25hbWUoYnVpbGRlcl9uYW1lKS4K
ICAgICAgICAgcG9ydCA9IHNlbGYuX3Rvb2wucG9ydF9mYWN0b3J5LmdldF9mcm9tX2J1aWxkZXJf
bmFtZShidWlsZGVyX25hbWUpCi0gICAgICAgICMgRklYTUU6IENvbWUgdXAgd2l0aCBhIGJldHRl
ciB3YXkgdGhhbiBzdHJpbmcgbWFuaXB1bGF0aW9uIHRvIHNlZSBpZiB0aGUgcG9ydCBpcyBhIGNo
cm9taXVtIHBvcnQuCi0gICAgICAgIGlmIHBvcnQubmFtZSgpLnN0YXJ0c3dpdGgoJ2Nocm9taXVt
LScpOgorICAgICAgICBpZiBwb3J0LmlzX2Nocm9taXVtKCk6CiAgICAgICAgICAgICByZXR1cm4g
c2VsZi5fdG9vbC5jaHJvbWl1bV9idWlsZGJvdCgpLmJ1aWxkZXJfd2l0aF9uYW1lKGJ1aWxkZXJf
bmFtZSkuYWNjdW11bGF0ZWRfcmVzdWx0c191cmwoKQogICAgICAgICByZXR1cm4gc2VsZi5fdG9v
bC5idWlsZGJvdC5idWlsZGVyX3dpdGhfbmFtZShidWlsZGVyX25hbWUpLmxhdGVzdF9jYWNoZWRf
YnVpbGQoKS5yZXN1bHRzX3VybCgpCiAKQEAgLTIyOSwxMyArMjI5LDEzIEBAIGNsYXNzIEFuYWx5
emVCYXNlbGluZXMoQWJzdHJhY3RSZWJhc2VsaW5pbmdDb21tYW5kKToKIAogCiBjbGFzcyBBYnN0
cmFjdFBhcmFsbGVsUmViYXNlbGluZUNvbW1hbmQoQWJzdHJhY3REZWNsYXJhdGl2ZUNvbW1hbmQp
OgotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgb3B0aW9ucyA9IFsKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgb3B0aW9ucz1Ob25lKToKKyAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMg
b3IgW10KKyAgICAgICAgb3B0aW9ucy5leHRlbmQoWwogICAgICAgICAgICAgb3B0cGFyc2UubWFr
ZV9vcHRpb24oJy0tbm8tb3B0aW1pemUnLCBkZXN0PSdvcHRpbWl6ZScsIGFjdGlvbj0nc3RvcmVf
ZmFsc2UnLCBkZWZhdWx0PVRydWUsCiAgICAgICAgICAgICAgICAgaGVscD0oJ0RvIG5vdCBvcHRp
bWl6ZS9kZS1kdXAgdGhlIGV4cGVjdGF0aW9ucyBhZnRlciByZWJhc2VsaW5pbmcgJwogICAgICAg
ICAgICAgICAgICAgICAgICcoZGVmYXVsdCBpcyB0byBkZS1kdXAgYXV0b21hdGljYWxseSkuICcK
LSAgICAgICAgICAgICAgICAgICAgICAnWW91IGNhbiB1c2UgIndlYmtpdC1wYXRjaCBvcHRpbWl6
ZS1iYXNlbGluZXMiIHRvIG9wdGltaXplIHNlcGFyYXRlbHkuJykpLAotICAgICAgICBdCisgICAg
ICAgICAgICAgICAgICAgICAgJ1lvdSBjYW4gdXNlICJ3ZWJraXQtcGF0Y2ggb3B0aW1pemUtYmFz
ZWxpbmVzIiB0byBvcHRpbWl6ZSBzZXBhcmF0ZWx5LicpKV0pCiAgICAgICAgIEFic3RyYWN0RGVj
bGFyYXRpdmVDb21tYW5kLl9faW5pdF9fKHNlbGYsIG9wdGlvbnM9b3B0aW9ucykKIAogICAgIGRl
ZiBfcnVuX3dlYmtpdF9wYXRjaChzZWxmLCBhcmdzKToKQEAgLTM3MSwyOCArMzcxLDQ5IEBAIGNs
YXNzIFJlYmFzZWxpbmUoQWJzdHJhY3RQYXJhbGxlbFJlYmFzZWxpbmVDb21tYW5kKToKICAgICBu
YW1lID0gInJlYmFzZWxpbmUiCiAgICAgaGVscF90ZXh0ID0gIlJlcGxhY2VzIGxvY2FsIGV4cGVj
dGVkLnR4dCBmaWxlcyB3aXRoIG5ldyByZXN1bHRzIGZyb20gYnVpbGQgYm90cyIKIAotICAgICMg
RklYTUU6IFRoaXMgc2hvdWxkIHNoYXJlIG1vcmUgY29kZSB3aXRoIEZhaWx1cmVSZWFzb24uX2J1
aWxkZXJfdG9fZXhwbGFpbgotICAgIGRlZiBfYnVpbGRlcl90b19wdWxsX2Zyb20oc2VsZik6Ci0g
ICAgICAgIGJ1aWxkZXJfc3RhdHVzZXMgPSBzZWxmLl90b29sLmJ1aWxkYm90LmJ1aWxkZXJfc3Rh
dHVzZXMoKQotICAgICAgICByZWRfc3RhdHVzZXMgPSBbc3RhdHVzIGZvciBzdGF0dXMgaW4gYnVp
bGRlcl9zdGF0dXNlcyBpZiBub3Qgc3RhdHVzWyJpc19ncmVlbiJdXQotICAgICAgICBfbG9nLmlu
Zm8oIiVzIGZhaWxpbmciICUgKHBsdXJhbGl6ZSgiYnVpbGRlciIsIGxlbihyZWRfc3RhdHVzZXMp
KSkpCi0gICAgICAgIGJ1aWxkZXJfY2hvaWNlcyA9IFtzdGF0dXNbIm5hbWUiXSBmb3Igc3RhdHVz
IGluIHJlZF9zdGF0dXNlc10KLSAgICAgICAgY2hvc2VuX25hbWUgPSBzZWxmLl90b29sLnVzZXIu
cHJvbXB0X3dpdGhfbGlzdCgiV2hpY2ggYnVpbGRlciB0byBwdWxsIHJlc3VsdHMgZnJvbToiLCBi
dWlsZGVyX2Nob2ljZXMpCi0gICAgICAgICMgRklYTUU6IHByb21wdF93aXRoX2xpc3Qgc2hvdWxk
IHJlYWxseSB0YWtlIGEgc2V0IG9mIG9iamVjdHMgYW5kIGEgc2V0IG9mIG5hbWVzIGFuZCB0aGVu
IHJldHVybiB0aGUgb2JqZWN0LgotICAgICAgICBmb3Igc3RhdHVzIGluIHJlZF9zdGF0dXNlczoK
LSAgICAgICAgICAgIGlmIHN0YXR1c1sibmFtZSJdID09IGNob3Nlbl9uYW1lOgotICAgICAgICAg
ICAgICAgIHJldHVybiAoc2VsZi5fdG9vbC5idWlsZGJvdC5idWlsZGVyX3dpdGhfbmFtZShjaG9z
ZW5fbmFtZSksIHN0YXR1c1siYnVpbGRfbnVtYmVyIl0pCi0KLSAgICBkZWYgX3Rlc3RzX3RvX3Vw
ZGF0ZShzZWxmLCBidWlsZCk6Ci0gICAgICAgIGZhaWxpbmdfdGVzdHMgPSBidWlsZC5sYXlvdXRf
dGVzdF9yZXN1bHRzKCkudGVzdHNfbWF0Y2hpbmdfZmFpbHVyZV90eXBlcyhbdGVzdF9mYWlsdXJl
cy5GYWlsdXJlVGV4dE1pc21hdGNoXSkKLSAgICAgICAgcmV0dXJuIHNlbGYuX3Rvb2wudXNlci5w
cm9tcHRfd2l0aF9saXN0KCJXaGljaCB0ZXN0KHMpIHRvIHJlYmFzZWxpbmU6IiwgZmFpbGluZ190
ZXN0cywgY2FuX2Nob29zZV9tdWx0aXBsZT1UcnVlKQorICAgIGRlZiBfX2luaXRfXyhzZWxmKToK
KyAgICAgICAgb3B0aW9ucyA9IFsKKyAgICAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCIt
LWJ1aWxkZXJzIiwgZGVmYXVsdD1Ob25lLCBoZWxwPSJDb21tYS1zZXBhcmF0ZWQtbGlzdCBvZiBi
dWlsZGVycyB0byBwdWxsIG5ldyBiYXNlbGluZXMgZnJvbSIpLAorICAgICAgICAgICAgb3B0cGFy
c2UubWFrZV9vcHRpb24oIi0tdGVzdHMiLCBkZWZhdWx0PU5vbmUsIGhlbHA9IkNvbW1hLXNlcGFy
YXRlZC1saXN0IG9mIHRlc3RzIHRvIHJlYmFzZWxpbmUiKSwKKyAgICAgICAgXQorICAgICAgICBB
YnN0cmFjdFBhcmFsbGVsUmViYXNlbGluZUNvbW1hbmQuX19pbml0X18oc2VsZiwgb3B0aW9ucz1v
cHRpb25zKQorCisgICAgZGVmIF9idWlsZGVyc190b19wdWxsX2Zyb20oc2VsZik6CisgICAgICAg
IGNocm9taXVtX2J1aWxkYm90X2J1aWxkZXJfbmFtZXMgPSBbXQorICAgICAgICB3ZWJraXRfYnVp
bGRib3RfYnVpbGRlcl9uYW1lcyA9IFtdCisgICAgICAgIGZvciBuYW1lIGluIGJ1aWxkZXJzLmFs
bF9idWlsZGVyX25hbWVzKCk6CisgICAgICAgICAgICBpZiBzZWxmLl90b29sLnBvcnRfZmFjdG9y
eS5nZXRfZnJvbV9idWlsZGVyX25hbWUobmFtZSkuaXNfY2hyb21pdW0oKToKKyAgICAgICAgICAg
ICAgICBjaHJvbWl1bV9idWlsZGJvdF9idWlsZGVyX25hbWVzLmFwcGVuZChuYW1lKQorICAgICAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB3ZWJraXRfYnVpbGRib3RfYnVpbGRlcl9uYW1l
cy5hcHBlbmQobmFtZSkKKworICAgICAgICB0aXRsZXMgPSBbImJ1aWxkLndlYmtpdC5vcmcgYm90
cyIsICJidWlsZC5jaHJvbWl1bS5vcmcgYm90cyJdCisgICAgICAgIGxpc3RzID0gW3dlYmtpdF9i
dWlsZGJvdF9idWlsZGVyX25hbWVzLCBjaHJvbWl1bV9idWlsZGJvdF9idWlsZGVyX25hbWVzXQor
CisgICAgICAgIGNob3Nlbl9uYW1lcyA9IHNlbGYuX3Rvb2wudXNlci5wcm9tcHRfd2l0aF9tdWx0
aXBsZV9saXN0cygiV2hpY2ggYnVpbGRlciB0byBwdWxsIHJlc3VsdHMgZnJvbToiLCB0aXRsZXMs
IGxpc3RzLCBjYW5fY2hvb3NlX211bHRpcGxlPVRydWUpCisgICAgICAgIHJldHVybiBbc2VsZi5f
YnVpbGRlcl93aXRoX25hbWUobmFtZSkgZm9yIG5hbWUgaW4gY2hvc2VuX25hbWVzXQorCisgICAg
ZGVmIF90ZXN0c190b191cGRhdGUoc2VsZiwgYnVpbGRlcik6CisgICAgICAgIGZhaWxpbmdfdGVz
dHMgPSBidWlsZGVyLmxhdGVzdF9sYXlvdXRfdGVzdF9yZXN1bHRzKCkudGVzdHNfbWF0Y2hpbmdf
ZmFpbHVyZV90eXBlcyhbdGVzdF9mYWlsdXJlcy5GYWlsdXJlVGV4dE1pc21hdGNoXSkKKyAgICAg
ICAgcmV0dXJuIHNlbGYuX3Rvb2wudXNlci5wcm9tcHRfd2l0aF9saXN0KCJXaGljaCB0ZXN0KHMp
IHRvIHJlYmFzZWxpbmUgZm9yICVzOiIgJSBidWlsZGVyLm5hbWUoKSwgZmFpbGluZ190ZXN0cywg
Y2FuX2Nob29zZV9tdWx0aXBsZT1UcnVlKQogCiAgICAgZGVmIGV4ZWN1dGUoc2VsZiwgb3B0aW9u
cywgYXJncywgdG9vbCk6Ci0gICAgICAgIGJ1aWxkZXIsIGJ1aWxkX251bWJlciA9IHNlbGYuX2J1
aWxkZXJfdG9fcHVsbF9mcm9tKCkKLSAgICAgICAgYnVpbGQgPSBidWlsZGVyLmJ1aWxkKGJ1aWxk
X251bWJlcikKKyAgICAgICAgaWYgb3B0aW9ucy5idWlsZGVyczoKKyAgICAgICAgICAgIGJ1aWxk
ZXJzID0gW3NlbGYuX3Rvb2wuYnVpbGRib3RfZm9yX2J1aWxkZXJfbmFtZShidWlsZGVyX25hbWUp
LmJ1aWxkZXJfd2l0aF9uYW1lKGJ1aWxkZXJfbmFtZSkgZm9yIGJ1aWxkZXJfbmFtZSBpbiBvcHRp
b25zLmJ1aWxkZXJzLnNwbGl0KCIsIildCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBidWls
ZGVycyA9IHNlbGYuX2J1aWxkZXJzX3RvX3B1bGxfZnJvbSgpCiAKLSAgICAgICAgYnVpbGRlcl9u
YW1lID0gYnVpbGRlci5uYW1lKCkKICAgICAgICAgdGVzdF9saXN0ID0ge30KLSAgICAgICAgZm9y
IHRlc3QgaW4gc2VsZi5fdGVzdHNfdG9fdXBkYXRlKGJ1aWxkKToKLSAgICAgICAgICAgIHRlc3Rf
bGlzdFt0ZXN0XSA9IHtidWlsZGVyX25hbWU6IFsndHh0J119CisKKyAgICAgICAgZm9yIGJ1aWxk
ZXIgaW4gYnVpbGRlcnM6CisgICAgICAgICAgICB0ZXN0cyA9IG9wdGlvbnMudGVzdHMuc3BsaXQo
IiwiKSBpZiBvcHRpb25zLnRlc3RzIGVsc2Ugc2VsZi5fdGVzdHNfdG9fdXBkYXRlKGJ1aWxkZXIp
CisgICAgICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0czoKKyAgICAgICAgICAgICAgICBpZiB0ZXN0
IG5vdCBpbiB0ZXN0X2xpc3Q6CisgICAgICAgICAgICAgICAgICAgIHRlc3RfbGlzdFt0ZXN0XSA9
IHt9CisgICAgICAgICAgICAgICAgIyBGSVhNRTogQWxsb3cgZm9yIGNob29zaW5nIHRoZSBzdWZm
aXhlcy4KKyAgICAgICAgICAgICAgICB0ZXN0X2xpc3RbdGVzdF1bYnVpbGRlci5uYW1lKCldID0g
Wyd0eHQnXQorCisgICAgICAgIGlmIG9wdGlvbnMudmVyYm9zZToKKyAgICAgICAgICAgIHByaW50
ICJyZWJhc2VsaW5lLWpzb246ICIgKyBzdHIodGVzdF9saXN0KQorCiAgICAgICAgIHNlbGYuX3Jl
YmFzZWxpbmUob3B0aW9ucywgdGVzdF9saXN0KQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS90b29sL2NvbW1hbmRzL3JlYmFzZWxpbmVfdW5pdHRlc3QucHkgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcmViYXNlbGluZV91bml0dGVzdC5weQppbmRleCAx
M2QwM2I2Mzk4YWM4M2QwYjcxM2JiOGI3MDI1MWU3MWNiMzJlZjg2Li5hOTQwYmQ3YjBiOWVlMWE3
YTU5YzA0MmVlYjFmYTQyZGUwNGRkMTUyIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3Rvb2wvY29tbWFuZHMvcmViYXNlbGluZV91bml0dGVzdC5weQorKysgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcmViYXNlbGluZV91bml0dGVzdC5weQpAQCAtMzUx
LDIwICszNTEsMTMxIEBAIE1PQ0sgcnVuX2NvbW1hbmQ6IFsncW1ha2UnLCAnLXYnXSwgY3dkPU5v
bmUKIAogICAgICAgICAgICAgdG9vbC5leGVjdXRpdmUgPSBNb2NrRXhlY3V0aXZlKHNob3VsZF9s
b2c9VHJ1ZSkKIAotICAgICAgICAgICAgZGVmIG1vY2tfYnVpbGRlcl90b19wdWxsX2Zyb20oKToK
LSAgICAgICAgICAgICAgICByZXR1cm4gTW9ja0J1aWxkZXIoJ01PQ0sgYnVpbGRlcicpLCAxMjM0
CisgICAgICAgICAgICBkZWYgbW9ja19idWlsZGVyc190b19wdWxsX2Zyb20oKToKKyAgICAgICAg
ICAgICAgICByZXR1cm4gW01vY2tCdWlsZGVyKCdNT0NLIGJ1aWxkZXInKV0KIAogICAgICAgICAg
ICAgZGVmIG1vY2tfdGVzdHNfdG9fdXBkYXRlKGJ1aWxkKToKICAgICAgICAgICAgICAgICByZXR1
cm4gWydtb2NrL3BhdGgvdG8vdGVzdC5odG1sJ10KIAotICAgICAgICAgICAgY29tbWFuZC5fYnVp
bGRlcl90b19wdWxsX2Zyb20gPSBtb2NrX2J1aWxkZXJfdG9fcHVsbF9mcm9tCisgICAgICAgICAg
ICBjb21tYW5kLl9idWlsZGVyc190b19wdWxsX2Zyb20gPSBtb2NrX2J1aWxkZXJzX3RvX3B1bGxf
ZnJvbQogICAgICAgICAgICAgY29tbWFuZC5fdGVzdHNfdG9fdXBkYXRlID0gbW9ja190ZXN0c190
b191cGRhdGUKIAorICAgICAgICAgICAgZXhwZWN0ZWRfc3Rkb3V0ID0gIiIicmViYXNlbGluZS1q
c29uOiB7J21vY2svcGF0aC90by90ZXN0Lmh0bWwnOiB7J01PQ0sgYnVpbGRlcic6IFsndHh0J119
fQorIiIiCisKKyAgICAgICAgICAgIGV4cGVjdGVkX3N0ZGVyciA9ICIiIk1PQ0sgcnVuX2NvbW1h
bmQ6IFsnZWNobycsICdyZWJhc2VsaW5lLXRlc3QtaW50ZXJuYWwnLCAnLS1zdWZmaXhlcycsICd0
eHQnLCAnLS1idWlsZGVyJywgJ01PQ0sgYnVpbGRlcicsICctLXRlc3QnLCAnbW9jay9wYXRoL3Rv
L3Rlc3QuaHRtbCddLCBjd2Q9L21vY2stY2hlY2tvdXQKK01PQ0sgcnVuX2NvbW1hbmQ6IFsnZWNo
bycsICdvcHRpbWl6ZS1iYXNlbGluZXMnLCAnLS1zdWZmaXhlcycsICd0eHQnLCAnbW9jay9wYXRo
L3RvL3Rlc3QuaHRtbCddLCBjd2Q9L21vY2stY2hlY2tvdXQKKyIiIgorCisgICAgICAgICAgICBP
dXRwdXRDYXB0dXJlKCkuYXNzZXJ0X291dHB1dHMoc2VsZiwgY29tbWFuZC5leGVjdXRlLCBbTW9j
a09wdGlvbnMob3B0aW1pemU9VHJ1ZSwgYnVpbGRlcnM9Tm9uZSwgdGVzdHM9Tm9uZSwgdmVyYm9z
ZT1UcnVlKSwgW10sIHRvb2xdLCBleHBlY3RlZF9zdGRvdXQ9ZXhwZWN0ZWRfc3Rkb3V0LCBleHBl
Y3RlZF9zdGRlcnI9ZXhwZWN0ZWRfc3RkZXJyKQorCisgICAgICAgIGZpbmFsbHk6CisgICAgICAg
ICAgICBidWlsZGVycy5fZXhhY3RfbWF0Y2hlcyA9IG9sZF9leGFjdF9tYXRjaGVzCisKKyAgICBk
ZWYgdGVzdF9yZWJhc2VsaW5lX2NvbW1hbmRfbGluZV9mbGFncyhzZWxmKToKKyAgICAgICAgb2xk
X2V4YWN0X21hdGNoZXMgPSBidWlsZGVycy5fZXhhY3RfbWF0Y2hlcworICAgICAgICB0cnk6Cisg
ICAgICAgICAgICBidWlsZGVycy5fZXhhY3RfbWF0Y2hlcyA9IHsKKyAgICAgICAgICAgICAgICAi
TU9DSyBidWlsZGVyIjogeyJwb3J0X25hbWUiOiAidGVzdC1tYWMtbGVvcGFyZCIsICJzcGVjaWZp
ZXJzIjogc2V0KFsibW9jay1zcGVjaWZpZXIiXSl9LAorICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBjb21tYW5kID0gUmViYXNlbGluZSgpCisgICAgICAgICAgICB0b29sID0gTW9ja1Rvb2wo
KQorICAgICAgICAgICAgY29tbWFuZC5iaW5kX3RvX3Rvb2wodG9vbCkKKworICAgICAgICAgICAg
Zm9yIHBvcnRfbmFtZSBpbiB0b29sLnBvcnRfZmFjdG9yeS5hbGxfcG9ydF9uYW1lcygpOgorICAg
ICAgICAgICAgICAgIHBvcnQgPSB0b29sLnBvcnRfZmFjdG9yeS5nZXQocG9ydF9uYW1lKQorICAg
ICAgICAgICAgICAgIGZvciBwYXRoIGluIHBvcnQuZXhwZWN0YXRpb25zX2ZpbGVzKCk6CisgICAg
ICAgICAgICAgICAgICAgIHRvb2wuZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUocGF0aCwgJycp
CisKKyAgICAgICAgICAgIHRvb2wuZXhlY3V0aXZlID0gTW9ja0V4ZWN1dGl2ZShzaG91bGRfbG9n
PVRydWUpCisKKyAgICAgICAgICAgIGV4cGVjdGVkX3N0ZG91dCA9ICIiInJlYmFzZWxpbmUtanNv
bjogeydtb2NrL3BhdGgvdG8vdGVzdC5odG1sJzogeydNT0NLIGJ1aWxkZXInOiBbJ3R4dCddfX0K
KyIiIgorCiAgICAgICAgICAgICBleHBlY3RlZF9zdGRlcnIgPSAiIiJNT0NLIHJ1bl9jb21tYW5k
OiBbJ2VjaG8nLCAncmViYXNlbGluZS10ZXN0LWludGVybmFsJywgJy0tc3VmZml4ZXMnLCAndHh0
JywgJy0tYnVpbGRlcicsICdNT0NLIGJ1aWxkZXInLCAnLS10ZXN0JywgJ21vY2svcGF0aC90by90
ZXN0Lmh0bWwnXSwgY3dkPS9tb2NrLWNoZWNrb3V0CiBNT0NLIHJ1bl9jb21tYW5kOiBbJ2VjaG8n
LCAnb3B0aW1pemUtYmFzZWxpbmVzJywgJy0tc3VmZml4ZXMnLCAndHh0JywgJ21vY2svcGF0aC90
by90ZXN0Lmh0bWwnXSwgY3dkPS9tb2NrLWNoZWNrb3V0CiAiIiIKIAotICAgICAgICAgICAgT3V0
cHV0Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRzKHNlbGYsIGNvbW1hbmQuZXhlY3V0ZSwgW01vY2tP
cHRpb25zKG9wdGltaXplPVRydWUpLCBbXSwgdG9vbF0sIGV4cGVjdGVkX3N0ZGVycj1leHBlY3Rl
ZF9zdGRlcnIpCisgICAgICAgICAgICBidWlsZGVyID0gIk1PQ0sgYnVpbGRlciIKKyAgICAgICAg
ICAgIHRlc3QgPSAibW9jay9wYXRoL3RvL3Rlc3QuaHRtbCIKKyAgICAgICAgICAgIE91dHB1dENh
cHR1cmUoKS5hc3NlcnRfb3V0cHV0cyhzZWxmLCBjb21tYW5kLmV4ZWN1dGUsIFtNb2NrT3B0aW9u
cyhvcHRpbWl6ZT1UcnVlLCBidWlsZGVycz1idWlsZGVyLCB0ZXN0cz10ZXN0LCB2ZXJib3NlPVRy
dWUpLCBbXSwgdG9vbF0sIGV4cGVjdGVkX3N0ZG91dD1leHBlY3RlZF9zdGRvdXQsIGV4cGVjdGVk
X3N0ZGVycj1leHBlY3RlZF9zdGRlcnIpCisKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAg
IGJ1aWxkZXJzLl9leGFjdF9tYXRjaGVzID0gb2xkX2V4YWN0X21hdGNoZXMKKworICAgIGRlZiB0
ZXN0X3JlYmFzZWxpbmVfbXVsdGlwbGVfYnVpbGRlcnMoc2VsZik6CisgICAgICAgIG9sZF9leGFj
dF9tYXRjaGVzID0gYnVpbGRlcnMuX2V4YWN0X21hdGNoZXMKKyAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgYnVpbGRlcnMuX2V4YWN0X21hdGNoZXMgPSB7CisgICAgICAgICAgICAgICAgIk1PQ0sg
YnVpbGRlciI6IHsicG9ydF9uYW1lIjogInRlc3QtbWFjLWxlb3BhcmQiLCAic3BlY2lmaWVycyI6
IHNldChbIm1vY2stc3BlY2lmaWVyIl0pfSwKKyAgICAgICAgICAgICAgICAiTU9DSyBidWlsZGVy
MiI6IHsicG9ydF9uYW1lIjogInRlc3QtbWFjLXNub3dsZW9wYXJkIiwgInNwZWNpZmllcnMiOiBz
ZXQoWyJtb2NrLXNwZWNpZmllcjIiXSl9LAorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBj
b21tYW5kID0gUmViYXNlbGluZSgpCisgICAgICAgICAgICB0b29sID0gTW9ja1Rvb2woKQorICAg
ICAgICAgICAgY29tbWFuZC5iaW5kX3RvX3Rvb2wodG9vbCkKKworICAgICAgICAgICAgZm9yIHBv
cnRfbmFtZSBpbiB0b29sLnBvcnRfZmFjdG9yeS5hbGxfcG9ydF9uYW1lcygpOgorICAgICAgICAg
ICAgICAgIHBvcnQgPSB0b29sLnBvcnRfZmFjdG9yeS5nZXQocG9ydF9uYW1lKQorICAgICAgICAg
ICAgICAgIGZvciBwYXRoIGluIHBvcnQuZXhwZWN0YXRpb25zX2ZpbGVzKCk6CisgICAgICAgICAg
ICAgICAgICAgIHRvb2wuZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUocGF0aCwgJycpCisKKyAg
ICAgICAgICAgIHRvb2wuZXhlY3V0aXZlID0gTW9ja0V4ZWN1dGl2ZShzaG91bGRfbG9nPVRydWUp
CisKKyAgICAgICAgICAgIGRlZiBtb2NrX2J1aWxkZXJzX3RvX3B1bGxfZnJvbSgpOgorICAgICAg
ICAgICAgICAgIHJldHVybiBbTW9ja0J1aWxkZXIoJ01PQ0sgYnVpbGRlcicpLCBNb2NrQnVpbGRl
cignTU9DSyBidWlsZGVyMicpXQorCisgICAgICAgICAgICBkZWYgbW9ja190ZXN0c190b191cGRh
dGUoYnVpbGQpOgorICAgICAgICAgICAgICAgIHJldHVybiBbJ21vY2svcGF0aC90by90ZXN0Lmh0
bWwnXQorCisgICAgICAgICAgICBjb21tYW5kLl9idWlsZGVyc190b19wdWxsX2Zyb20gPSBtb2Nr
X2J1aWxkZXJzX3RvX3B1bGxfZnJvbQorICAgICAgICAgICAgY29tbWFuZC5fdGVzdHNfdG9fdXBk
YXRlID0gbW9ja190ZXN0c190b191cGRhdGUKKworICAgICAgICAgICAgZXhwZWN0ZWRfc3Rkb3V0
ID0gIiIicmViYXNlbGluZS1qc29uOiB7J21vY2svcGF0aC90by90ZXN0Lmh0bWwnOiB7J01PQ0sg
YnVpbGRlcjInOiBbJ3R4dCddLCAnTU9DSyBidWlsZGVyJzogWyd0eHQnXX19CisiIiIKKworICAg
ICAgICAgICAgZXhwZWN0ZWRfc3RkZXJyID0gIiIiTU9DSyBydW5fY29tbWFuZDogWydlY2hvJywg
J3JlYmFzZWxpbmUtdGVzdC1pbnRlcm5hbCcsICctLXN1ZmZpeGVzJywgJ3R4dCcsICctLWJ1aWxk
ZXInLCAnTU9DSyBidWlsZGVyMicsICctLXRlc3QnLCAnbW9jay9wYXRoL3RvL3Rlc3QuaHRtbCdd
LCBjd2Q9L21vY2stY2hlY2tvdXQKK01PQ0sgcnVuX2NvbW1hbmQ6IFsnZWNobycsICdyZWJhc2Vs
aW5lLXRlc3QtaW50ZXJuYWwnLCAnLS1zdWZmaXhlcycsICd0eHQnLCAnLS1idWlsZGVyJywgJ01P
Q0sgYnVpbGRlcicsICctLXRlc3QnLCAnbW9jay9wYXRoL3RvL3Rlc3QuaHRtbCddLCBjd2Q9L21v
Y2stY2hlY2tvdXQKK01PQ0sgcnVuX2NvbW1hbmQ6IFsnZWNobycsICdvcHRpbWl6ZS1iYXNlbGlu
ZXMnLCAnLS1zdWZmaXhlcycsICd0eHQnLCAnbW9jay9wYXRoL3RvL3Rlc3QuaHRtbCddLCBjd2Q9
L21vY2stY2hlY2tvdXQKKyIiIgorCisgICAgICAgICAgICBPdXRwdXRDYXB0dXJlKCkuYXNzZXJ0
X291dHB1dHMoc2VsZiwgY29tbWFuZC5leGVjdXRlLCBbTW9ja09wdGlvbnMob3B0aW1pemU9VHJ1
ZSwgYnVpbGRlcnM9Tm9uZSwgdGVzdHM9Tm9uZSwgdmVyYm9zZT1UcnVlKSwgW10sIHRvb2xdLCBl
eHBlY3RlZF9zdGRvdXQ9ZXhwZWN0ZWRfc3Rkb3V0LCBleHBlY3RlZF9zdGRlcnI9ZXhwZWN0ZWRf
c3RkZXJyKQorCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBidWlsZGVycy5fZXhhY3Rf
bWF0Y2hlcyA9IG9sZF9leGFjdF9tYXRjaGVzCisKKyAgICBkZWYgdGVzdF9yZWJhc2VsaW5lX211
bHRpcGxlX2J1aWxkZXJzX2FuZF90ZXN0c19jb21tYW5kX2xpbmUoc2VsZik6CisgICAgICAgIG9s
ZF9leGFjdF9tYXRjaGVzID0gYnVpbGRlcnMuX2V4YWN0X21hdGNoZXMKKyAgICAgICAgdHJ5Ogor
ICAgICAgICAgICAgYnVpbGRlcnMuX2V4YWN0X21hdGNoZXMgPSB7CisgICAgICAgICAgICAgICAg
Ik1PQ0sgYnVpbGRlciI6IHsicG9ydF9uYW1lIjogInRlc3QtbWFjLWxlb3BhcmQiLCAic3BlY2lm
aWVycyI6IHNldChbIm1vY2stc3BlY2lmaWVyIl0pfSwKKyAgICAgICAgICAgICAgICAiTU9DSyBi
dWlsZGVyMiI6IHsicG9ydF9uYW1lIjogInRlc3QtbWFjLXNub3dsZW9wYXJkIiwgInNwZWNpZmll
cnMiOiBzZXQoWyJtb2NrLXNwZWNpZmllcjIiXSl9LAorICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBjb21tYW5kID0gUmViYXNlbGluZSgpCisgICAgICAgICAgICB0b29sID0gTW9ja1Rvb2wo
KQorICAgICAgICAgICAgY29tbWFuZC5iaW5kX3RvX3Rvb2wodG9vbCkKKworICAgICAgICAgICAg
Zm9yIHBvcnRfbmFtZSBpbiB0b29sLnBvcnRfZmFjdG9yeS5hbGxfcG9ydF9uYW1lcygpOgorICAg
ICAgICAgICAgICAgIHBvcnQgPSB0b29sLnBvcnRfZmFjdG9yeS5nZXQocG9ydF9uYW1lKQorICAg
ICAgICAgICAgICAgIGZvciBwYXRoIGluIHBvcnQuZXhwZWN0YXRpb25zX2ZpbGVzKCk6CisgICAg
ICAgICAgICAgICAgICAgIHRvb2wuZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUocGF0aCwgJycp
CisKKyAgICAgICAgICAgIHRvb2wuZXhlY3V0aXZlID0gTW9ja0V4ZWN1dGl2ZShzaG91bGRfbG9n
PVRydWUpCisKKyAgICAgICAgICAgIGV4cGVjdGVkX3N0ZG91dCA9ICIiInJlYmFzZWxpbmUtanNv
bjogeydtb2NrL3BhdGgvdG8vdGVzdC5odG1sJzogeydNT0NLIGJ1aWxkZXIyJzogWyd0eHQnXSwg
J01PQ0sgYnVpbGRlcic6IFsndHh0J119LCAnbW9jay9wYXRoL3RvL3Rlc3QyLmh0bWwnOiB7J01P
Q0sgYnVpbGRlcjInOiBbJ3R4dCddLCAnTU9DSyBidWlsZGVyJzogWyd0eHQnXX19CisiIiIKKwor
ICAgICAgICAgICAgZXhwZWN0ZWRfc3RkZXJyID0gIiIiTU9DSyBydW5fY29tbWFuZDogWydlY2hv
JywgJ3JlYmFzZWxpbmUtdGVzdC1pbnRlcm5hbCcsICctLXN1ZmZpeGVzJywgJ3R4dCcsICctLWJ1
aWxkZXInLCAnTU9DSyBidWlsZGVyMicsICctLXRlc3QnLCAnbW9jay9wYXRoL3RvL3Rlc3QuaHRt
bCddLCBjd2Q9L21vY2stY2hlY2tvdXQKK01PQ0sgcnVuX2NvbW1hbmQ6IFsnZWNobycsICdyZWJh
c2VsaW5lLXRlc3QtaW50ZXJuYWwnLCAnLS1zdWZmaXhlcycsICd0eHQnLCAnLS1idWlsZGVyJywg
J01PQ0sgYnVpbGRlcicsICctLXRlc3QnLCAnbW9jay9wYXRoL3RvL3Rlc3QuaHRtbCddLCBjd2Q9
L21vY2stY2hlY2tvdXQKK01PQ0sgcnVuX2NvbW1hbmQ6IFsnZWNobycsICdyZWJhc2VsaW5lLXRl
c3QtaW50ZXJuYWwnLCAnLS1zdWZmaXhlcycsICd0eHQnLCAnLS1idWlsZGVyJywgJ01PQ0sgYnVp
bGRlcjInLCAnLS10ZXN0JywgJ21vY2svcGF0aC90by90ZXN0Mi5odG1sJ10sIGN3ZD0vbW9jay1j
aGVja291dAorTU9DSyBydW5fY29tbWFuZDogWydlY2hvJywgJ3JlYmFzZWxpbmUtdGVzdC1pbnRl
cm5hbCcsICctLXN1ZmZpeGVzJywgJ3R4dCcsICctLWJ1aWxkZXInLCAnTU9DSyBidWlsZGVyJywg
Jy0tdGVzdCcsICdtb2NrL3BhdGgvdG8vdGVzdDIuaHRtbCddLCBjd2Q9L21vY2stY2hlY2tvdXQK
K01PQ0sgcnVuX2NvbW1hbmQ6IFsnZWNobycsICdvcHRpbWl6ZS1iYXNlbGluZXMnLCAnLS1zdWZm
aXhlcycsICd0eHQnLCAnbW9jay9wYXRoL3RvL3Rlc3QuaHRtbCddLCBjd2Q9L21vY2stY2hlY2tv
dXQKK01PQ0sgcnVuX2NvbW1hbmQ6IFsnZWNobycsICdvcHRpbWl6ZS1iYXNlbGluZXMnLCAnLS1z
dWZmaXhlcycsICd0eHQnLCAnbW9jay9wYXRoL3RvL3Rlc3QyLmh0bWwnXSwgY3dkPS9tb2NrLWNo
ZWNrb3V0CisiIiIKKworICAgICAgICAgICAgT3V0cHV0Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRz
KHNlbGYsIGNvbW1hbmQuZXhlY3V0ZSwgW01vY2tPcHRpb25zKG9wdGltaXplPVRydWUsIGJ1aWxk
ZXJzPSJNT0NLIGJ1aWxkZXIsTU9DSyBidWlsZGVyMiIsIHRlc3RzPSJtb2NrL3BhdGgvdG8vdGVz
dC5odG1sLG1vY2svcGF0aC90by90ZXN0Mi5odG1sIiwgdmVyYm9zZT1UcnVlKSwgW10sIHRvb2xd
LCBleHBlY3RlZF9zdGRvdXQ9ZXhwZWN0ZWRfc3Rkb3V0LCBleHBlY3RlZF9zdGRlcnI9ZXhwZWN0
ZWRfc3RkZXJyKQogCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBidWlsZGVycy5fZXhh
Y3RfbWF0Y2hlcyA9IG9sZF9leGFjdF9tYXRjaGVzCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3Rvb2wvbW9ja3Rvb2wucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wv
bW9ja3Rvb2wucHkKaW5kZXggMjFlZTkxZmM5ZGI5ODI3NzM0ZDJlNjExMDgzYzBjNWZjMDUxNjk2
Zi4uYjhmMDk3NmJjOTI5ZWEyOWNkNDI0MzcxN2U5N2I2NTA5ZDBlYmY2YyAxMDA2NDQKLS0tIGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL21vY2t0b29sLnB5CisrKyBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdG9vbC9tb2NrdG9vbC5weQpAQCAtMjksNiArMjksNyBAQAogaW1wb3J0IHRo
cmVhZGluZwogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5ob3N0X21vY2sgaW1wb3J0IE1vY2tIb3N0
Citmcm9tIHdlYmtpdHB5LmNvbW1vbi5uZXQuYnVpbGRib3QuYnVpbGRib3RfbW9jayBpbXBvcnQg
TW9ja0J1aWxkQm90CiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5uZXQuc3RhdHVzc2VydmVyX21vY2sg
aW1wb3J0IE1vY2tTdGF0dXNTZXJ2ZXIKIGZyb20gd2Via2l0cHkuY29tbW9uLm5ldC5pcmMuaXJj
X21vY2sgaW1wb3J0IE1vY2tJUkMKIApAQCAtODIsMyArODMsNiBAQCBjbGFzcyBNb2NrVG9vbChN
b2NrSG9zdCk6CiAKICAgICBkZWYgaXJjKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5faXJj
CisKKyAgICBkZWYgYnVpbGRib3RfZm9yX2J1aWxkZXJfbmFtZShzZWxmLCBuYW1lKToKKyAgICAg
ICAgcmV0dXJuIE1vY2tCdWlsZEJvdCgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151377</attachid>
            <date>2012-07-09 18:24:37 -0700</date>
            <delta_ts>2012-07-10 10:01:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90504-20120709182437.patch</filename>
            <type>text/plain</type>
            <size>31391</size>
            <attacher name="Ojan Vafai">ojan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyMTc1CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNDNhYWM5MDBkMjk3YzFiNTNiOWQ3YWEzMjY3M2JiMDQ4
MzE5YmE5Mi4uMjE5Zjc1ZGYzZGYwMzdiMmEwMThlZTAyMTg4N2UzODg1ZWUyNWVmYiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg0
IEBACisyMDEyLTA3LTA5ICBPamFuIFZhZmFpICA8b2phbkBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgSW1wcm92ZSB3ZWJraXQtcGF0Y2ggcmViYXNlbGluZSB0byB3b3JrIGZvciBtb3JlIGNhc2Vz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDUwNAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC1NYWtlcyBp
dCB3b3JrIGZvciB0aGUgYnVpbGQuY2hyb21pdW0ub3JnIGJvdHMuCisgICAgICAgIC1MZXRzIHlv
dSByZWJhc2VsaW5lIGFsbCBidWlsZGVycyBpbnN0ZWFkIG9mIGp1c3Qgb25lLgorICAgICAgICAt
TGV0cyB5b3UgcGFzcyBpbiB0aGUgYnVpbGRlcnMgb3IgdGVzdHMgdG8gcmViYXNlbGluZS4KKwor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL2hvc3QucHk6CisgICAgICAgIChIb3N0
LmJ1aWxkYm90X2Zvcl9idWlsZGVyX25hbWUpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL25ldC9idWlsZGJvdC9idWlsZGJvdC5weToKKyAgICAgICAgKEJ1aWxkZXIuX19pbml0
X18pOgorICAgICAgICAoQnVpbGRlci5sYXRlc3RfbGF5b3V0X3Rlc3RfcmVzdWx0cyk6CisgICAg
ICAgIFByb3ZpZGUgYSB3YXkgdG8gZ2V0IHRvIHRoZSBMYXlvdXRUZXN0UmVzdWx0cyBvZiB0aGUg
bGF0ZXN0IGJ1aWxkLgorICAgICAgICBNb3N0IG9mIHRoZSB0aW1lIHdlIG9ubHkgbmVlZCB0byBn
ZXQgdGhlIGxhdGVzdCBvbmUgYW5kIHRoZSBDaHJvbWl1bSBib3RzCisgICAgICAgIG9ubHkgZXhw
b3NlIHRoZSBmdWxsX3Jlc3VsdHMuanNvbiBmaWxlIGZvciB0aGUgbGF0ZXN0IGJ1aWxkLgorCisg
ICAgICAgIChCdWlsZGVyKToKKyAgICAgICAgKEJ1aWxkZXIuX2ZldGNoX2ZpbGVfZnJvbV9yZXN1
bHRzKToKKyAgICAgICAgKEJ1aWxkZXIuZmV0Y2hfbGF5b3V0X3Rlc3RfcmVzdWx0cyk6CisgICAg
ICAgIE1vdmUgdGhlc2UgZnVuY3Rpb25zIGludG8gQnVpbGRlciBzbyB0aGF0IEJ1aWxkZXIgYW5k
IEJ1aWxkIGNhbiBib3RoCisgICAgICAgIGZldGNoIGxheW91dCB0ZXN0IHJlc3VsdHMuCisKKyAg
ICAgICAgKEJ1aWxkLnJlc3VsdHNfemlwX3VybCk6CisgICAgICAgIChCdWlsZC5sYXlvdXRfdGVz
dF9yZXN1bHRzKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvYnVpbGRi
b3QvYnVpbGRib3RfdW5pdHRlc3QucHk6CisgICAgICAgIChCdWlsZGVyVGVzdC50ZXN0X2xhdGVz
dF9sYXlvdXRfdGVzdF9yZXN1bHRzKToKKyAgICAgICAgKEJ1aWxkVGVzdC50ZXN0X2xheW91dF90
ZXN0X3Jlc3VsdHMpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS91
c2VyLnB5OgorICAgICAgICAoVXNlci5wcm9tcHRfd2l0aF9tdWx0aXBsZV9saXN0cyk6CisgICAg
ICAgIFByb21wdCB3aXRoIG11bHRpcGxlIHN1Ymxpc3RzLCBidXQgc3RpbGwgaGF2ZSBhIGdsb2Jh
bCBudW1iZXJpbmcuCisgICAgICAgIFRoaXMgbGV0cyB0aGUgYnVpbGQuY2hyb21pdW0ub3JnIGJv
dHMgYmUgY2xlYXJseSBzZXBhcmF0ZWQgZnJvbSB0aGUKKyAgICAgICAgYnVpbGQud2Via2l0Lm9y
ZyBib3RzLCB3aGljaCBoZWxwcyB1bmRlcnN0YW5kIHRoZSBidWlsZGVyIG5hbWVzLgorCisgICAg
ICAgIChVc2VyKToKKyAgICAgICAgKFVzZXIuX3dhaXRfb25fbGlzdF9yZXNwb25zZSk6CisgICAg
ICAgIChVc2VyLnByb21wdF93aXRoX2xpc3QpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3N5c3RlbS91c2VyX3VuaXR0ZXN0LnB5OgorICAgICAgICAoVXNlclRlc3QudGVzdF9w
cm9tcHRfd2l0aF9tdWx0aXBsZV9saXN0cyk6CisgICAgICAgIChVc2VyVGVzdC50ZXN0X3Byb21w
dF93aXRoX211bHRpcGxlX2xpc3RzLnJ1bl9wcm9tcHRfdGVzdCk6CisgICAgICAgIChVc2VyVGVz
dC50ZXN0X3Byb21wdF93aXRoX211bHRpcGxlX2xpc3RzLnJ1bl9wcm9tcHRfdGVzdC5tb2NrX3Jh
d19pbnB1dCk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9i
YXNlLnB5OgorICAgICAgICAoUG9ydC5pc19jaHJvbWl1bSk6CisgICAgICAgIFByb3ZpZGUgYSB3
YXkgdG8gdGVsbCBpZiBhIHBvcnQgaXMgYSBDaHJvbWl1bSBwb3J0IHRoYXQgZG9lc24ndCBpbnZv
bHZlIHN0cmluZworICAgICAgICBtYW5pcHVsYXRpb24gb24gdGhlIHBvcnQgbmFtZSBvciBidWls
ZGVyIG5hbWUuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2J1aWxkZXJzLnB5OgorICAgICAgICAoYnVpbGRlcl9wYXRoX2Zyb21fbmFtZSk6CisgICAgICAg
IChhbGxfYnVpbGRlcl9uYW1lcyk6CisgICAgICAgIE1lbW9pemluZyBoZXJlIGlzIGluY29ycmVj
dCBiZWNhdXNlIHRoZSB0ZXN0IG92ZXJyaWRlIF9leGFjdF9tYXRjaGVzLAorICAgICAgICBzbyB0
aGVzZSBjYW4gcmV0dXJuIGRpZmZlcmVudCB2YWx1ZXMuIEluIGVpdGhlciBjYXNlLCBJJ20gcHJl
dHR5IHN1cmUgdGhlc2UKKyAgICAgICAgYXJlIG5vdCByZW1vdGVseSBob3QgY29kZXBhdGhzLiBJ
IG1hbnVhbGx5IGluc3BlY3RlZCBhbGwgY2FsbCBzaXRlcyBhbmQgdGhleSdyZQorICAgICAgICBh
bGwgaW4gaGlnaC1sZXZlbCBjYWxscyAoZS5nLiBleGVjdXRlIGNhbGxzIGZvciB3ZWJraXQtcGF0
Y2ggY29tbWFuZHMpIGFuZCBub3QKKyAgICAgICAgY2FsbGVkIGluIGEgbG9vcC4KKworICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHk6CisgICAg
ICAgIChDaHJvbWl1bVBvcnQuaXNfY2hyb21pdW0pOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvdG9vbC9jb21tYW5kcy9yZWJhc2VsaW5lLnB5OgorICAgICAgICAoUmViYXNlbGluZVRlc3Qu
X3Jlc3VsdHNfdXJsKToKKyAgICAgICAgKEFic3RyYWN0UGFyYWxsZWxSZWJhc2VsaW5lQ29tbWFu
ZC5fX2luaXRfXyk6CisgICAgICAgIChSZWJhc2VsaW5lLl9faW5pdF9fKToKKyAgICAgICAgKFJl
YmFzZWxpbmUpOgorICAgICAgICAoUmViYXNlbGluZS5fYnVpbGRlcnNfdG9fcHVsbF9mcm9tKToK
KyAgICAgICAgKFJlYmFzZWxpbmUuX3Rlc3RzX3RvX3VwZGF0ZSk6CisgICAgICAgIChSZWJhc2Vs
aW5lLmV4ZWN1dGUpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9y
ZWJhc2VsaW5lX3VuaXR0ZXN0LnB5OgorICAgICAgICAodGVzdF9yZWJhc2VsaW5lLm1vY2tfYnVp
bGRlcnNfdG9fcHVsbF9mcm9tKToKKyAgICAgICAgKHRlc3RfcmViYXNlbGluZSk6CisgICAgICAg
ICh0ZXN0X3JlYmFzZWxpbmVfY29tbWFuZF9saW5lX2ZsYWdzKToKKyAgICAgICAgKHRlc3RfcmVi
YXNlbGluZV9tdWx0aXBsZV9idWlsZGVycyk6CisgICAgICAgICh0ZXN0X3JlYmFzZWxpbmVfbXVs
dGlwbGVfYnVpbGRlcnMubW9ja19idWlsZGVyc190b19wdWxsX2Zyb20pOgorICAgICAgICAodGVz
dF9yZWJhc2VsaW5lX211bHRpcGxlX2J1aWxkZXJzLm1vY2tfdGVzdHNfdG9fdXBkYXRlKToKKyAg
ICAgICAgKHRlc3RfcmViYXNlbGluZV9tdWx0aXBsZV9idWlsZGVyc19hbmRfdGVzdHNfY29tbWFu
ZF9saW5lKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvbW9ja3Rvb2wucHk6Cisg
ICAgICAgIChNb2NrVG9vbC5pcmMpOgorICAgICAgICAoTW9ja1Rvb2wpOgorICAgICAgICAoTW9j
a1Rvb2wuYnVpbGRib3RfZm9yX2J1aWxkZXJfbmFtZSk6CisKIDIwMTItMDctMDkgIE5vJ2FtIFJv
c2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KIAogICAgICAgICBTaGFyZWQgY29k
ZSB0aGF0IGlzIGd1YXJkZWQgd2l0aCBFTkFCTEUoV0VCR0wpIHNob3VsZCBiZSBndWFyZGVkIHdp
dGggVVNFKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2hvc3Qu
cHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9ob3N0LnB5CmluZGV4IDA4MzEyMDIy
N2JlNjAyMDBmYmVlODkyYmUwMjA0MzYzYjVjMmE1MjYuLjUzODg5NjU3YjA0NTgwNWYwODhkYjM4
YjIyMGVmNGRmZjE4NDE0MzEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29t
bW9uL2hvc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vaG9zdC5weQpA
QCAtMTM4LDYgKzEzOCwxMSBAQCBjbGFzcyBIb3N0KFN5c3RlbUhvc3QpOgogICAgIGRlZiBjaGVj
a291dChzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX2NoZWNrb3V0CiAKKyAgICBkZWYgYnVp
bGRib3RfZm9yX2J1aWxkZXJfbmFtZShzZWxmLCBuYW1lKToKKyAgICAgICAgaWYgc2VsZi5wb3J0
X2ZhY3RvcnkuZ2V0X2Zyb21fYnVpbGRlcl9uYW1lKG5hbWUpLmlzX2Nocm9taXVtKCk6CisgICAg
ICAgICAgICByZXR1cm4gc2VsZi5jaHJvbWl1bV9idWlsZGJvdCgpCisgICAgICAgIHJldHVybiBz
ZWxmLmJ1aWxkYm90CisKICAgICBAbWVtb2l6ZWQKICAgICBkZWYgY2hyb21pdW1fYnVpbGRib3Qo
c2VsZik6CiAgICAgICAgIHJldHVybiBDaHJvbWl1bUJ1aWxkQm90KCkKZGlmZiAtLWdpdCBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC9idWlsZGJvdC9idWlsZGJvdC5weSBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC9idWlsZGJvdC9idWlsZGJvdC5weQppbmRl
eCA0ZTgyMGNlZTBmZWY3MmNkYjFiMzIxOGNhNDY5MmJkZmVhNzI4ZTVmLi40NTIyNjZjNDMwOGJj
Zjk1MmE4ZjgzYjgzZGM1Y2RlMjIxYTA4N2Y5IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9uZXQvYnVpbGRib3QvYnVpbGRib3QucHkKKysrIGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tb24vbmV0L2J1aWxkYm90L2J1aWxkYm90LnB5CkBAIC01Myw2ICs1Myw3
IEBAIGNsYXNzIEJ1aWxkZXIob2JqZWN0KToKICAgICAgICAgZnJvbSB3ZWJraXRweS50aGlyZHBh
cnR5LmF1dG9pbnN0YWxsZWQubWVjaGFuaXplIGltcG9ydCBCcm93c2VyCiAgICAgICAgIHNlbGYu
X2Jyb3dzZXIgPSBCcm93c2VyKCkKICAgICAgICAgc2VsZi5fYnJvd3Nlci5zZXRfaGFuZGxlX3Jv
Ym90cyhGYWxzZSkgIyBUaGUgYnVpbGRlciBwYWdlcyBhcmUgZXhjbHVkZWQgYnkgcm9ib3RzLnR4
dAorICAgICAgICBzZWxmLl9sYXlvdXRfdGVzdF9yZXN1bHRzID0gTm9uZQogCiAgICAgZGVmIG5h
bWUoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLl9uYW1lCkBAIC02NSw2ICs2NiwzNCBAQCBj
bGFzcyBCdWlsZGVyKG9iamVjdCk6CiAgICAgZGVmIGFjY3VtdWxhdGVkX3Jlc3VsdHNfdXJsKHNl
bGYpOgogICAgICAgICByZXR1cm4gTm9uZQogCisgICAgZGVmIGxhdGVzdF9sYXlvdXRfdGVzdF9y
ZXN1bHRzKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9sYXlvdXRfdGVzdF9yZXN1bHRzOgorICAg
ICAgICAgICAgcmV0dXJuIHNlbGYuX2xheW91dF90ZXN0X3Jlc3VsdHMKKworICAgICAgICBpZiBz
ZWxmLmFjY3VtdWxhdGVkX3Jlc3VsdHNfdXJsKCk6CisgICAgICAgICAgICBzZWxmLl9sYXlvdXRf
dGVzdF9yZXN1bHRzID0gc2VsZi5mZXRjaF9sYXlvdXRfdGVzdF9yZXN1bHRzKHNlbGYuYWNjdW11
bGF0ZWRfcmVzdWx0c191cmwoKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2xh
eW91dF90ZXN0X3Jlc3VsdHMgPSBzZWxmLmxhdGVzdF9jYWNoZWRfYnVpbGQoKS5sYXlvdXRfdGVz
dF9yZXN1bHRzKCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2xheW91dF90ZXN0X3Jlc3VsdHMKKwor
ICAgIGRlZiBfZmV0Y2hfZmlsZV9mcm9tX3Jlc3VsdHMoc2VsZiwgcmVzdWx0c191cmwsIGZpbGVf
bmFtZSk6CisgICAgICAgICMgSXQgc2VlbXMgdGhpcyBjYW4gcmV0dXJuIE5vbmUgaWYgdGhlIHVy
bCByZWRpcmVjdHMgYW5kIHRoZW4gcmV0dXJucyA0MDQuCisgICAgICAgIHJlc3VsdCA9IHVybGxp
YjIudXJsb3BlbigiJXMvJXMiICUgKHJlc3VsdHNfdXJsLCBmaWxlX25hbWUpKQorICAgICAgICBp
ZiBub3QgcmVzdWx0OgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgIyB1cmxvcGVu
IHJldHVybnMgYSBmaWxlLWxpa2Ugb2JqZWN0IHdoaWNoIHNvbWV0aW1lcyB3b3JrcyBmaW5lIHdp
dGggc3RyKCkKKyAgICAgICAgIyBidXQgc29tZXRpbWVzIGlzIGEgYWRkaW5mb3VybCBvYmplY3Qu
ICBJbiBlaXRoZXIgY2FzZSBjYWxsaW5nIHJlYWQoKSBpcyBjb3JyZWN0LgorICAgICAgICByZXR1
cm4gcmVzdWx0LnJlYWQoKQorCisgICAgZGVmIGZldGNoX2xheW91dF90ZXN0X3Jlc3VsdHMoc2Vs
ZiwgcmVzdWx0c191cmwpOgorICAgICAgICAjIEZJWE1FOiBUaGlzIHNob3VsZCBjYWNoZSB0aGF0
IHRoZSByZXN1bHQgd2FzIGEgNDA0IGFuZCBzdG9wIGhpdHRpbmcgdGhlIG5ldHdvcmsuCisgICAg
ICAgIHJlc3VsdHNfZmlsZSA9IE5ldHdvcmtUcmFuc2FjdGlvbihjb252ZXJ0XzQwNF90b19Ob25l
PVRydWUpLnJ1bihsYW1iZGE6IHNlbGYuX2ZldGNoX2ZpbGVfZnJvbV9yZXN1bHRzKHJlc3VsdHNf
dXJsLCAiZnVsbF9yZXN1bHRzLmpzb24iKSkKKyAgICAgICAgaWYgbm90IHJlc3VsdHNfZmlsZToK
KyAgICAgICAgICAgIHJlc3VsdHNfZmlsZSA9IE5ldHdvcmtUcmFuc2FjdGlvbihjb252ZXJ0XzQw
NF90b19Ob25lPVRydWUpLnJ1bihsYW1iZGE6IHNlbGYuX2ZldGNoX2ZpbGVfZnJvbV9yZXN1bHRz
KHJlc3VsdHNfdXJsLCAicmVzdWx0cy5odG1sIikpCisKKyAgICAgICAgIyByZXN1bHRzX2Zyb21f
c3RyaW5nIGFjY2VwdHMgZWl0aGVyIE9SV1QgaHRtbCBvciBOUldUIGpzb24uCisgICAgICAgIHJl
dHVybiBMYXlvdXRUZXN0UmVzdWx0cy5yZXN1bHRzX2Zyb21fc3RyaW5nKHJlc3VsdHNfZmlsZSkK
KwogICAgIGRlZiB1cmxfZW5jb2RlZF9uYW1lKHNlbGYpOgogICAgICAgICByZXR1cm4gdXJsbGli
LnF1b3RlKHNlbGYuX25hbWUpCiAKQEAgLTI0NSwyNiArMjc0LDExIEBAIGNsYXNzIEJ1aWxkKG9i
amVjdCk6CiAgICAgZGVmIHJlc3VsdHNfemlwX3VybChzZWxmKToKICAgICAgICAgcmV0dXJuICIl
cy56aXAiICUgc2VsZi5yZXN1bHRzX3VybCgpCiAKLSAgICBkZWYgX2ZldGNoX2ZpbGVfZnJvbV9y
ZXN1bHRzKHNlbGYsIGZpbGVfbmFtZSk6Ci0gICAgICAgICMgSXQgc2VlbXMgdGhpcyBjYW4gcmV0
dXJuIE5vbmUgaWYgdGhlIHVybCByZWRpcmVjdHMgYW5kIHRoZW4gcmV0dXJucyA0MDQuCi0gICAg
ICAgIHJlc3VsdCA9IHVybGxpYjIudXJsb3BlbigiJXMvJXMiICUgKHNlbGYucmVzdWx0c191cmwo
KSwgZmlsZV9uYW1lKSkKLSAgICAgICAgaWYgbm90IHJlc3VsdDoKLSAgICAgICAgICAgIHJldHVy
biBOb25lCi0gICAgICAgICMgdXJsb3BlbiByZXR1cm5zIGEgZmlsZS1saWtlIG9iamVjdCB3aGlj
aCBzb21ldGltZXMgd29ya3MgZmluZSB3aXRoIHN0cigpCi0gICAgICAgICMgYnV0IHNvbWV0aW1l
cyBpcyBhIGFkZGluZm91cmwgb2JqZWN0LiAgSW4gZWl0aGVyIGNhc2UgY2FsbGluZyByZWFkKCkg
aXMgY29ycmVjdC4KLSAgICAgICAgcmV0dXJuIHJlc3VsdC5yZWFkKCkKLQogICAgIGRlZiBsYXlv
dXRfdGVzdF9yZXN1bHRzKHNlbGYpOgogICAgICAgICBpZiBzZWxmLl9sYXlvdXRfdGVzdF9yZXN1
bHRzOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2xheW91dF90ZXN0X3Jlc3VsdHMKIAotICAg
ICAgICAjIEZJWE1FOiBUaGlzIHNob3VsZCBjYWNoZSB0aGF0IHRoZSByZXN1bHQgd2FzIGEgNDA0
IGFuZCBzdG9wIGhpdHRpbmcgdGhlIG5ldHdvcmsuCi0gICAgICAgIHJlc3VsdHNfZmlsZSA9IE5l
dHdvcmtUcmFuc2FjdGlvbihjb252ZXJ0XzQwNF90b19Ob25lPVRydWUpLnJ1bihsYW1iZGE6IHNl
bGYuX2ZldGNoX2ZpbGVfZnJvbV9yZXN1bHRzKCJmdWxsX3Jlc3VsdHMuanNvbiIpKQotICAgICAg
ICBpZiBub3QgcmVzdWx0c19maWxlOgotICAgICAgICAgICAgcmVzdWx0c19maWxlID0gTmV0d29y
a1RyYW5zYWN0aW9uKGNvbnZlcnRfNDA0X3RvX05vbmU9VHJ1ZSkucnVuKGxhbWJkYTogc2VsZi5f
ZmV0Y2hfZmlsZV9mcm9tX3Jlc3VsdHMoInJlc3VsdHMuaHRtbCIpKQotCi0gICAgICAgICMgcmVz
dWx0c19mcm9tX3N0cmluZyBhY2NlcHRzIGVpdGhlciBPUldUIGh0bWwgb3IgTlJXVCBqc29uLgot
ICAgICAgICBzZWxmLl9sYXlvdXRfdGVzdF9yZXN1bHRzID0gTGF5b3V0VGVzdFJlc3VsdHMucmVz
dWx0c19mcm9tX3N0cmluZyhyZXN1bHRzX2ZpbGUpCisgICAgICAgIHNlbGYuX2xheW91dF90ZXN0
X3Jlc3VsdHMgPSBzZWxmLl9idWlsZGVyLmZldGNoX2xheW91dF90ZXN0X3Jlc3VsdHMoc2VsZi5y
ZXN1bHRzX3VybCgpKQogICAgICAgICByZXR1cm4gc2VsZi5fbGF5b3V0X3Rlc3RfcmVzdWx0cwog
CiAgICAgZGVmIGJ1aWxkZXIoc2VsZik6CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi9uZXQvYnVpbGRib3QvYnVpbGRib3RfdW5pdHRlc3QucHkgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvYnVpbGRib3QvYnVpbGRib3RfdW5pdHRlc3QucHkKaW5k
ZXggMjMxMzMyNjExNzQxZGJkZjZmZWI3YWE2NGNiMDMzMDRkMDI0MmI1ZC4uNzFjM2ExZmU3Y2I5
OTNkN2Y4MjgxZDdmN2ZhY2U4YzJkYmJhNGJjNiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9jb21tb24vbmV0L2J1aWxkYm90L2J1aWxkYm90X3VuaXR0ZXN0LnB5CisrKyBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC9idWlsZGJvdC9idWlsZGJvdF91bml0dGVz
dC5weQpAQCAtNTcsNiArNTcsMTEgQEAgY2xhc3MgQnVpbGRlclRlc3QodW5pdHRlc3QuVGVzdENh
c2UpOgogICAgICAgICBzZWxmLmJ1aWxkZXIgPSBCdWlsZGVyKHUiVGVzdCBCdWlsZGVyIFx1MjY2
MSIsIHNlbGYuYnVpbGRib3QpCiAgICAgICAgIHNlbGYuX2luc3RhbGxfZmV0Y2hfYnVpbGQobGFt
YmRhIGJ1aWxkX251bWJlcjogWyJ0ZXN0MSIsICJ0ZXN0MiJdKQogCisgICAgZGVmIHRlc3RfbGF0
ZXN0X2xheW91dF90ZXN0X3Jlc3VsdHMoc2VsZik6CisgICAgICAgIHNlbGYuYnVpbGRlci5mZXRj
aF9sYXlvdXRfdGVzdF9yZXN1bHRzID0gbGFtYmRhIHJlc3VsdHNfdXJsOiBMYXlvdXRUZXN0UmVz
dWx0cyhbc2VsZi5fbW9ja190ZXN0X3Jlc3VsdCh0ZXN0bmFtZSkgZm9yIHRlc3RuYW1lIGluIFsi
dGVzdDEiLCAidGVzdDIiXV0pCisgICAgICAgIHNlbGYuYnVpbGRlci5hY2N1bXVsYXRlZF9yZXN1
bHRzX3VybCA9IGxhbWJkYTogImh0dHA6Ly9kdW1teV91cmwub3JnIgorICAgICAgICBzZWxmLmFz
c2VydFRydWUoc2VsZi5idWlsZGVyLmxhdGVzdF9sYXlvdXRfdGVzdF9yZXN1bHRzKCkpCisKICAg
ICBkZWYgdGVzdF9maW5kX3JlZ3Jlc3Npb25fd2luZG93KHNlbGYpOgogICAgICAgICByZWdyZXNz
aW9uX3dpbmRvdyA9IHNlbGYuYnVpbGRlci5maW5kX3JlZ3Jlc3Npb25fd2luZG93KHNlbGYuYnVp
bGRlci5idWlsZCgxMCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVncmVzc2lvbl93aW5k
b3cuYnVpbGRfYmVmb3JlX2ZhaWx1cmUoKS5yZXZpc2lvbigpLCAxMDAzKQpAQCAtMTQ3LDggKzE1
Miw4IEBAIGNsYXNzIEJ1aWxkVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3Rf
bGF5b3V0X3Rlc3RfcmVzdWx0cyhzZWxmKToKICAgICAgICAgYnVpbGRib3QgPSBCdWlsZEJvdCgp
CiAgICAgICAgIGJ1aWxkZXIgPSBCdWlsZGVyKHUiRm9vIEJ1aWxkZXIgKHRlc3QpIiwgYnVpbGRi
b3QpCisgICAgICAgIGJ1aWxkZXIuX2ZldGNoX2ZpbGVfZnJvbV9yZXN1bHRzID0gbGFtYmRhIHJl
c3VsdHNfdXJsLCBmaWxlX25hbWU6IE5vbmUKICAgICAgICAgYnVpbGQgPSBCdWlsZChidWlsZGVy
LCBOb25lLCBOb25lLCBOb25lKQotICAgICAgICBidWlsZC5fZmV0Y2hfZmlsZV9mcm9tX3Jlc3Vs
dHMgPSBsYW1iZGEgZmlsZV9uYW1lOiBOb25lCiAgICAgICAgICMgVGVzdCB0aGF0IGxheW91dF90
ZXN0X3Jlc3VsdHMoKSByZXR1cm5zIE5vbmUgaWYgdGhlIGZldGNoIGZhaWxzLgogICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKGJ1aWxkLmxheW91dF90ZXN0X3Jlc3VsdHMoKSwgTm9uZSkKIApkaWZm
IC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3VzZXIucHkgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vdXNlci5weQppbmRleCBlMjA0MDU5
MTI4ZGE0MmQ4MzA4YWI2MGRjZTRjNTA5MTAwYzEzZTc1Li4yNjJiOTc5NDQ5N2IwNTRkZDY3MmY0
NzAxZWZiYTA1ZWVlMWViZDU1IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9zeXN0ZW0vdXNlci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9z
eXN0ZW0vdXNlci5weQpAQCAtNzQsMTQgKzc0LDIwIEBAIGNsYXNzIFVzZXIob2JqZWN0KToKICAg
ICAgICAgcmV0dXJuIGNscy5wcm9tcHQobWVzc2FnZSwgcmVwZWF0PXJlcGVhdCwgcmF3X2lucHV0
PWdldHBhc3MuZ2V0cGFzcykKIAogICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBwcm9tcHRfd2l0
aF9saXN0KGNscywgbGlzdF90aXRsZSwgbGlzdF9pdGVtcywgY2FuX2Nob29zZV9tdWx0aXBsZT1G
YWxzZSwgcmF3X2lucHV0PXJhd19pbnB1dCk6CisgICAgZGVmIHByb21wdF93aXRoX211bHRpcGxl
X2xpc3RzKGNscywgbGlzdF90aXRsZSwgc3VidGl0bGVzLCBsaXN0cywgY2FuX2Nob29zZV9tdWx0
aXBsZT1GYWxzZSwgcmF3X2lucHV0PXJhd19pbnB1dCk6CisgICAgICAgIGl0ZW1faW5kZXggPSAw
CisgICAgICAgIGN1bXVsYXRlZF9saXN0ID0gW10KICAgICAgICAgcHJpbnQgbGlzdF90aXRsZQot
ICAgICAgICBpID0gMAotICAgICAgICBmb3IgaXRlbSBpbiBsaXN0X2l0ZW1zOgotICAgICAgICAg
ICAgaSArPSAxCi0gICAgICAgICAgICBwcmludCAiJTJkLiAlcyIgJSAoaSwgaXRlbSkKKyAgICAg
ICAgZm9yIGkgaW4gcmFuZ2UobGVuKHN1YnRpdGxlcykpOgorICAgICAgICAgICAgcHJpbnQgIlxu
IiArIHN1YnRpdGxlc1tpXQorICAgICAgICAgICAgZm9yIGl0ZW0gaW4gbGlzdHNbaV06CisgICAg
ICAgICAgICAgICAgaXRlbV9pbmRleCArPSAxCisgICAgICAgICAgICAgICAgcHJpbnQgIiUyZC4g
JXMiICUgKGl0ZW1faW5kZXgsIGl0ZW0pCisgICAgICAgICAgICBjdW11bGF0ZWRfbGlzdCArPSBs
aXN0c1tpXQorICAgICAgICByZXR1cm4gY2xzLl93YWl0X29uX2xpc3RfcmVzcG9uc2UoY3VtdWxh
dGVkX2xpc3QsIGNhbl9jaG9vc2VfbXVsdGlwbGUsIHJhd19pbnB1dCkKIAotICAgICAgICAjIExv
b3AgdW50aWwgd2UgZ2V0IHZhbGlkIGlucHV0CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF93
YWl0X29uX2xpc3RfcmVzcG9uc2UoY2xzLCBsaXN0X2l0ZW1zLCBjYW5fY2hvb3NlX211bHRpcGxl
LCByYXdfaW5wdXQpOgogICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgaWYgY2FuX2No
b29zZV9tdWx0aXBsZToKICAgICAgICAgICAgICAgICByZXNwb25zZSA9IGNscy5wcm9tcHQoIkVu
dGVyIG9uZSBvciBtb3JlIG51bWJlcnMgKGNvbW1hLXNlcGFyYXRlZCksIG9yIFwiYWxsXCI6ICIs
IHJhd19pbnB1dD1yYXdfaW5wdXQpCkBAIC05OSw2ICsxMDUsMTUgQEAgY2xhc3MgVXNlcihvYmpl
Y3QpOgogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgIHJldHVy
biBsaXN0X2l0ZW1zW3Jlc3VsdF0KIAorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBwcm9tcHRf
d2l0aF9saXN0KGNscywgbGlzdF90aXRsZSwgbGlzdF9pdGVtcywgY2FuX2Nob29zZV9tdWx0aXBs
ZT1GYWxzZSwgcmF3X2lucHV0PXJhd19pbnB1dCk6CisgICAgICAgIHByaW50IGxpc3RfdGl0bGUK
KyAgICAgICAgaSA9IDAKKyAgICAgICAgZm9yIGl0ZW0gaW4gbGlzdF9pdGVtczoKKyAgICAgICAg
ICAgIGkgKz0gMQorICAgICAgICAgICAgcHJpbnQgIiUyZC4gJXMiICUgKGksIGl0ZW0pCisgICAg
ICAgIHJldHVybiBjbHMuX3dhaXRfb25fbGlzdF9yZXNwb25zZShsaXN0X2l0ZW1zLCBjYW5fY2hv
b3NlX211bHRpcGxlLCByYXdfaW5wdXQpCisKICAgICBkZWYgZWRpdChzZWxmLCBmaWxlcyk6CiAg
ICAgICAgIGVkaXRvciA9IG9zLmVudmlyb24uZ2V0KCJFRElUT1IiKSBvciAidmkiCiAgICAgICAg
IGFyZ3MgPSBzaGxleC5zcGxpdChlZGl0b3IpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9zeXN0ZW0vdXNlcl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL3N5c3RlbS91c2VyX3VuaXR0ZXN0LnB5CmluZGV4IDdlYzliMzRlNDc4M2Vj
NTJmMDBlOGY3OGRkZGFlOGEwNmM0NzMwMmIuLjhiN2NjMWMwYzgyNWI0MTQwZjE4NTA3OTg3MzU1
ZDY0NWQ2MjQ3MjggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5
c3RlbS91c2VyX3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9u
L3N5c3RlbS91c2VyX3VuaXR0ZXN0LnB5CkBAIC01MSw2ICs1MSwzMiBAQCBjbGFzcyBVc2VyVGVz
dCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKFVzZXIucHJvbXB0KCJpbnB1dCIsIHJlcGVhdD1zZWxmLnJlcGVhdHNS
ZW1haW5pbmcsIHJhd19pbnB1dD1tb2NrX3Jhd19pbnB1dCksIE5vbmUpCiAKKyAgICBkZWYgdGVz
dF9wcm9tcHRfd2l0aF9tdWx0aXBsZV9saXN0cyhzZWxmKToKKyAgICAgICAgZGVmIHJ1bl9wcm9t
cHRfdGVzdChpbnB1dHMsIGV4cGVjdGVkX3Jlc3VsdCwgY2FuX2Nob29zZV9tdWx0aXBsZT1GYWxz
ZSk6CisgICAgICAgICAgICBkZWYgbW9ja19yYXdfaW5wdXQobWVzc2FnZSk6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGlucHV0cy5wb3AoMCkKKyAgICAgICAgICAgIG91dHB1dF9jYXB0dXJlID0g
T3V0cHV0Q2FwdHVyZSgpCisgICAgICAgICAgICBhY3R1YWxfcmVzdWx0ID0gb3V0cHV0X2NhcHR1
cmUuYXNzZXJ0X291dHB1dHMoCisgICAgICAgICAgICAgICAgc2VsZiwKKyAgICAgICAgICAgICAg
ICBVc2VyLnByb21wdF93aXRoX211bHRpcGxlX2xpc3RzLAorICAgICAgICAgICAgICAgIGFyZ3M9
WyJ0aXRsZSIsIFsic3VidGl0bGUxIiwgInN1YnRpdGxlMiJdLCBbWyJmb28iLCAiYmFyIl0sIFsi
Zm9vYmFyIiwgImJhcmJheiJdXV0sCisgICAgICAgICAgICAgICAga3dhcmdzPXsiY2FuX2Nob29z
ZV9tdWx0aXBsZSI6IGNhbl9jaG9vc2VfbXVsdGlwbGUsICJyYXdfaW5wdXQiOiBtb2NrX3Jhd19p
bnB1dH0sCisgICAgICAgICAgICAgICAgZXhwZWN0ZWRfc3Rkb3V0PSJ0aXRsZVxuXG5zdWJ0aXRs
ZTFcbiAxLiBmb29cbiAyLiBiYXJcblxuc3VidGl0bGUyXG4gMy4gZm9vYmFyXG4gNC4gYmFyYmF6
XG4iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWxfcmVzdWx0LCBleHBlY3Rl
ZF9yZXN1bHQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpbnB1dHMpLCAwKQor
CisgICAgICAgIHJ1bl9wcm9tcHRfdGVzdChbIjEiXSwgImZvbyIpCisgICAgICAgIHJ1bl9wcm9t
cHRfdGVzdChbImJhZGlucHV0IiwgIjIiXSwgImJhciIpCisgICAgICAgIHJ1bl9wcm9tcHRfdGVz
dChbIjMiXSwgImZvb2JhciIpCisgICAgICAgIHJ1bl9wcm9tcHRfdGVzdChbIjQiXSwgImJhcmJh
eiIpCisKKyAgICAgICAgcnVuX3Byb21wdF90ZXN0KFsiMSwyIl0sIFsiZm9vIiwgImJhciJdLCBj
YW5fY2hvb3NlX211bHRpcGxlPVRydWUpCisgICAgICAgIHJ1bl9wcm9tcHRfdGVzdChbIiAgMSwg
IDIgICAiXSwgWyJmb28iLCAiYmFyIl0sIGNhbl9jaG9vc2VfbXVsdGlwbGU9VHJ1ZSkKKyAgICAg
ICAgcnVuX3Byb21wdF90ZXN0KFsiYWxsIl0sIFsiZm9vIiwgImJhciIsICdmb29iYXInLCAnYmFy
YmF6J10sIGNhbl9jaG9vc2VfbXVsdGlwbGU9VHJ1ZSkKKyAgICAgICAgcnVuX3Byb21wdF90ZXN0
KFsiIl0sIFsiZm9vIiwgImJhciIsICdmb29iYXInLCAnYmFyYmF6J10sIGNhbl9jaG9vc2VfbXVs
dGlwbGU9VHJ1ZSkKKyAgICAgICAgcnVuX3Byb21wdF90ZXN0KFsiICAiXSwgWyJmb28iLCAiYmFy
IiwgJ2Zvb2JhcicsICdiYXJiYXonXSwgY2FuX2Nob29zZV9tdWx0aXBsZT1UcnVlKQorICAgICAg
ICBydW5fcHJvbXB0X3Rlc3QoWyJiYWRpbnB1dCIsICJhbGwiXSwgWyJmb28iLCAiYmFyIiwgJ2Zv
b2JhcicsICdiYXJiYXonXSwgY2FuX2Nob29zZV9tdWx0aXBsZT1UcnVlKQorCiAgICAgZGVmIHRl
c3RfcHJvbXB0X3dpdGhfbGlzdChzZWxmKToKICAgICAgICAgZGVmIHJ1bl9wcm9tcHRfdGVzdChp
bnB1dHMsIGV4cGVjdGVkX3Jlc3VsdCwgY2FuX2Nob29zZV9tdWx0aXBsZT1GYWxzZSk6CiAgICAg
ICAgICAgICBkZWYgbW9ja19yYXdfaW5wdXQobWVzc2FnZSk6CmRpZmYgLS1naXQgYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkKaW5kZXggYzE4NmFjODMyOWNiNzE5
YWY2NTVjOGY3OTQ0N2UyYmJhZDg4MDc2Mi4uZmJmMGI5MzBiOGQwNDUyMjFhOTlmMjYzMTFmZDM0
ZTAxZmJlNGMwNSAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9iYXNlLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvYmFzZS5weQpAQCAtNjU0LDYgKzY1NCw5IEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAg
ICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgICByZXR1cm4gRmFsc2UKIAorICAgIGRl
ZiBpc19jaHJvbWl1bShzZWxmKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKICAgICBkZWYgbmFt
ZShzZWxmKToKICAgICAgICAgIiIiUmV0dXJucyBhIG5hbWUgdGhhdCB1bmlxdWVseSBpZGVudGlm
aWVzIHRoaXMgcGFydGljdWxhciB0eXBlIG9mIHBvcnQKICAgICAgICAgKGUuZy4sICJtYWMtc25v
d2xlb3BhcmQiIG9yICJjaHJvbWl1bS1saW51eC14ODZfeDY0IiBhbmQgY2FuIGJlIHBhc3NlZApk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9idWls
ZGVycy5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYnVpbGRl
cnMucHkKaW5kZXggYjI4OWI5NzZhZDdhZWEyY2MzY2YyYmIyNWMxMmRiNTU1OWIyMzM5OC4uMjFm
Y2M5ODAxNWY4YTQ2OGM2NGIxY2VlMDQ3NDlkYjRjNDc2ZWE5NiAxMDA2NDQKLS0tIGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9idWlsZGVycy5weQorKysgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2J1aWxkZXJzLnB5CkBAIC05Niwx
MiArOTYsMTAgQEAgZGVmIGJ1aWxkZXJfcGF0aF9mcm9tX25hbWUoYnVpbGRlcl9uYW1lKToKICAg
ICByZXR1cm4gcmUuc3ViKHInW1xzKCkuXScsICdfJywgYnVpbGRlcl9uYW1lKQogCiAKLUBtZW1v
aXplZAogZGVmIGFsbF9idWlsZGVyX25hbWVzKCk6CiAgICAgcmV0dXJuIHNvcnRlZChzZXQoX2V4
YWN0X21hdGNoZXMua2V5cygpKSkKIAogCi1AbWVtb2l6ZWQKIGRlZiBhbGxfcG9ydF9uYW1lcygp
OgogICAgIHJldHVybiBzb3J0ZWQoc2V0KG1hcChsYW1iZGEgeDogeFsicG9ydF9uYW1lIl0sIF9l
eGFjdF9tYXRjaGVzLnZhbHVlcygpKSArIF9wb3J0c193aXRob3V0X2J1aWxkZXJzKSkKIApkaWZm
IC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1
bS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0u
cHkKaW5kZXggNWI2OTI0Y2ZlZWI3MzNiOTY5ODNhYzk0YjUyM2JkYzg5N2RjYmRjOC4uMjRmN2Vm
YTBmNWM5NzhmMTY5NWY4MmU0NTlhOTZiNWIyNDgxNGExZCAxMDA3NTUKLS0tIGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weQorKysgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtLnB5CkBAIC0xMTAsNiAr
MTEwLDkgQEAgY2xhc3MgQ2hyb21pdW1Qb3J0KFdlYktpdFBvcnQpOgogICAgICAgICAjIEFsbCBz
dWItY2xhc3NlcyBvdmVycmlkZSB0aGlzLCBidXQgd2UgbmVlZCBhbiBpbml0aWFsIHZhbHVlIGZv
ciB0ZXN0aW5nLgogICAgICAgICBzZWxmLl9jaHJvbWl1bV9iYXNlX2Rpcl9wYXRoID0gTm9uZQog
CisgICAgZGVmIGlzX2Nocm9taXVtKHNlbGYpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCiAgICAg
ZGVmIGRlZmF1bHRfcGl4ZWxfdGVzdHMoc2VsZik6CiAgICAgICAgIHJldHVybiBUcnVlCiAKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9yZWJhc2VsaW5l
LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3JlYmFzZWxpbmUucHkK
aW5kZXggY2FhNWY1YjczNzA2MjJiNDM2ZjQyMDFkNjNmMTdjMzYxNzQ2NWM3My4uNTc1NGE2MDRi
NDVhY2MwZmJjNTRiY2E5Y2M1Y2RkMGJiOWJjMjJiMCAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3JlYmFzZWxpbmUucHkKKysrIGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3JlYmFzZWxpbmUucHkKQEAgLTgxLDkgKzgxLDkgQEAg
Y2xhc3MgUmViYXNlbGluZVRlc3QoQWJzdHJhY3RSZWJhc2VsaW5pbmdDb21tYW5kKToKICAgICAg
ICAgc2VsZi5fc2NtX2NoYW5nZXMgPSB7J2FkZCc6IFtdfQogCiAgICAgZGVmIF9yZXN1bHRzX3Vy
bChzZWxmLCBidWlsZGVyX25hbWUpOgorICAgICAgICAjIEZJWE1FOiBVc2Ugc2VsZi5fdG9vbC5i
dWlsZGJvdF9mb3JfYnVpbGRlcl9uYW1lKGJ1aWxkZXJfbmFtZSkuCiAgICAgICAgIHBvcnQgPSBz
ZWxmLl90b29sLnBvcnRfZmFjdG9yeS5nZXRfZnJvbV9idWlsZGVyX25hbWUoYnVpbGRlcl9uYW1l
KQotICAgICAgICAjIEZJWE1FOiBDb21lIHVwIHdpdGggYSBiZXR0ZXIgd2F5IHRoYW4gc3RyaW5n
IG1hbmlwdWxhdGlvbiB0byBzZWUgaWYgdGhlIHBvcnQgaXMgYSBjaHJvbWl1bSBwb3J0LgotICAg
ICAgICBpZiBwb3J0Lm5hbWUoKS5zdGFydHN3aXRoKCdjaHJvbWl1bS0nKToKKyAgICAgICAgaWYg
cG9ydC5pc19jaHJvbWl1bSgpOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3Rvb2wuY2hyb21p
dW1fYnVpbGRib3QoKS5idWlsZGVyX3dpdGhfbmFtZShidWlsZGVyX25hbWUpLmFjY3VtdWxhdGVk
X3Jlc3VsdHNfdXJsKCkKICAgICAgICAgcmV0dXJuIHNlbGYuX3Rvb2wuYnVpbGRib3QuYnVpbGRl
cl93aXRoX25hbWUoYnVpbGRlcl9uYW1lKS5sYXRlc3RfY2FjaGVkX2J1aWxkKCkucmVzdWx0c191
cmwoKQogCkBAIC0yMjksMTMgKzIyOSwxMyBAQCBjbGFzcyBBbmFseXplQmFzZWxpbmVzKEFic3Ry
YWN0UmViYXNlbGluaW5nQ29tbWFuZCk6CiAKIAogY2xhc3MgQWJzdHJhY3RQYXJhbGxlbFJlYmFz
ZWxpbmVDb21tYW5kKEFic3RyYWN0RGVjbGFyYXRpdmVDb21tYW5kKToKLSAgICBkZWYgX19pbml0
X18oc2VsZik6Ci0gICAgICAgIG9wdGlvbnMgPSBbCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9w
dGlvbnM9Tm9uZSk6CisgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIG9yIFtdCisgICAgICAgIG9w
dGlvbnMuZXh0ZW5kKFsKICAgICAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLW5vLW9w
dGltaXplJywgZGVzdD0nb3B0aW1pemUnLCBhY3Rpb249J3N0b3JlX2ZhbHNlJywgZGVmYXVsdD1U
cnVlLAogICAgICAgICAgICAgICAgIGhlbHA9KCdEbyBub3Qgb3B0aW1pemUvZGUtZHVwIHRoZSBl
eHBlY3RhdGlvbnMgYWZ0ZXIgcmViYXNlbGluaW5nICcKICAgICAgICAgICAgICAgICAgICAgICAn
KGRlZmF1bHQgaXMgdG8gZGUtZHVwIGF1dG9tYXRpY2FsbHkpLiAnCi0gICAgICAgICAgICAgICAg
ICAgICAgJ1lvdSBjYW4gdXNlICJ3ZWJraXQtcGF0Y2ggb3B0aW1pemUtYmFzZWxpbmVzIiB0byBv
cHRpbWl6ZSBzZXBhcmF0ZWx5LicpKSwKLSAgICAgICAgXQorICAgICAgICAgICAgICAgICAgICAg
ICdZb3UgY2FuIHVzZSAid2Via2l0LXBhdGNoIG9wdGltaXplLWJhc2VsaW5lcyIgdG8gb3B0aW1p
emUgc2VwYXJhdGVseS4nKSldKQogICAgICAgICBBYnN0cmFjdERlY2xhcmF0aXZlQ29tbWFuZC5f
X2luaXRfXyhzZWxmLCBvcHRpb25zPW9wdGlvbnMpCiAKICAgICBkZWYgX3J1bl93ZWJraXRfcGF0
Y2goc2VsZiwgYXJncyk6CkBAIC0zNjksMzAgKzM2OSw2MCBAQCBjbGFzcyBSZWJhc2VsaW5lRXhw
ZWN0YXRpb25zKEFic3RyYWN0UGFyYWxsZWxSZWJhc2VsaW5lQ29tbWFuZCk6CiAKIGNsYXNzIFJl
YmFzZWxpbmUoQWJzdHJhY3RQYXJhbGxlbFJlYmFzZWxpbmVDb21tYW5kKToKICAgICBuYW1lID0g
InJlYmFzZWxpbmUiCi0gICAgaGVscF90ZXh0ID0gIlJlcGxhY2VzIGxvY2FsIGV4cGVjdGVkLnR4
dCBmaWxlcyB3aXRoIG5ldyByZXN1bHRzIGZyb20gYnVpbGQgYm90cyIKLQotICAgICMgRklYTUU6
IFRoaXMgc2hvdWxkIHNoYXJlIG1vcmUgY29kZSB3aXRoIEZhaWx1cmVSZWFzb24uX2J1aWxkZXJf
dG9fZXhwbGFpbgotICAgIGRlZiBfYnVpbGRlcl90b19wdWxsX2Zyb20oc2VsZik6Ci0gICAgICAg
IGJ1aWxkZXJfc3RhdHVzZXMgPSBzZWxmLl90b29sLmJ1aWxkYm90LmJ1aWxkZXJfc3RhdHVzZXMo
KQotICAgICAgICByZWRfc3RhdHVzZXMgPSBbc3RhdHVzIGZvciBzdGF0dXMgaW4gYnVpbGRlcl9z
dGF0dXNlcyBpZiBub3Qgc3RhdHVzWyJpc19ncmVlbiJdXQotICAgICAgICBfbG9nLmluZm8oIiVz
IGZhaWxpbmciICUgKHBsdXJhbGl6ZSgiYnVpbGRlciIsIGxlbihyZWRfc3RhdHVzZXMpKSkpCi0g
ICAgICAgIGJ1aWxkZXJfY2hvaWNlcyA9IFtzdGF0dXNbIm5hbWUiXSBmb3Igc3RhdHVzIGluIHJl
ZF9zdGF0dXNlc10KLSAgICAgICAgY2hvc2VuX25hbWUgPSBzZWxmLl90b29sLnVzZXIucHJvbXB0
X3dpdGhfbGlzdCgiV2hpY2ggYnVpbGRlciB0byBwdWxsIHJlc3VsdHMgZnJvbToiLCBidWlsZGVy
X2Nob2ljZXMpCi0gICAgICAgICMgRklYTUU6IHByb21wdF93aXRoX2xpc3Qgc2hvdWxkIHJlYWxs
eSB0YWtlIGEgc2V0IG9mIG9iamVjdHMgYW5kIGEgc2V0IG9mIG5hbWVzIGFuZCB0aGVuIHJldHVy
biB0aGUgb2JqZWN0LgotICAgICAgICBmb3Igc3RhdHVzIGluIHJlZF9zdGF0dXNlczoKLSAgICAg
ICAgICAgIGlmIHN0YXR1c1sibmFtZSJdID09IGNob3Nlbl9uYW1lOgotICAgICAgICAgICAgICAg
IHJldHVybiAoc2VsZi5fdG9vbC5idWlsZGJvdC5idWlsZGVyX3dpdGhfbmFtZShjaG9zZW5fbmFt
ZSksIHN0YXR1c1siYnVpbGRfbnVtYmVyIl0pCi0KLSAgICBkZWYgX3Rlc3RzX3RvX3VwZGF0ZShz
ZWxmLCBidWlsZCk6Ci0gICAgICAgIGZhaWxpbmdfdGVzdHMgPSBidWlsZC5sYXlvdXRfdGVzdF9y
ZXN1bHRzKCkudGVzdHNfbWF0Y2hpbmdfZmFpbHVyZV90eXBlcyhbdGVzdF9mYWlsdXJlcy5GYWls
dXJlVGV4dE1pc21hdGNoXSkKLSAgICAgICAgcmV0dXJuIHNlbGYuX3Rvb2wudXNlci5wcm9tcHRf
d2l0aF9saXN0KCJXaGljaCB0ZXN0KHMpIHRvIHJlYmFzZWxpbmU6IiwgZmFpbGluZ190ZXN0cywg
Y2FuX2Nob29zZV9tdWx0aXBsZT1UcnVlKQorICAgIGhlbHBfdGV4dCA9ICJSZXBsYWNlcyBsb2Nh
bCBleHBlY3RlZC50eHQgZmlsZXMgd2l0aCBuZXcgcmVzdWx0cyBmcm9tIGJ1aWxkIGJvdHMuIFNo
b3dzIHRoZSBsaXN0IG9mIGZhaWxpbmcgdGVzdHMgb24gdGhlIGJ1aWxkZXJzIGlmIG5vIHRlc3Qg
bmFtZXMgYXJlIHByb3ZpZGVkLiIKKyAgICBhcmd1bWVudF9uYW1lcyA9ICJbVEVTVF9OQU1FU10i
CisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIG9wdGlvbnMgPSBbCisgICAgICAg
ICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1idWlsZGVycyIsIGRlZmF1bHQ9Tm9uZSwgYWN0
aW9uPSJhcHBlbmQiLCBoZWxwPSJDb21tYS1zZXBhcmF0ZWQtbGlzdCBvZiBidWlsZGVycyB0byBw
dWxsIG5ldyBiYXNlbGluZXMgZnJvbSAoY2FuIGFsc28gYmUgcHJvdmlkZWQgbXVsdGlwbGUgdGlt
ZXMpIiksCisgICAgICAgIF0KKyAgICAgICAgQWJzdHJhY3RQYXJhbGxlbFJlYmFzZWxpbmVDb21t
YW5kLl9faW5pdF9fKHNlbGYsIG9wdGlvbnM9b3B0aW9ucykKKworICAgIGRlZiBfYnVpbGRlcnNf
dG9fcHVsbF9mcm9tKHNlbGYpOgorICAgICAgICBjaHJvbWl1bV9idWlsZGJvdF9idWlsZGVyX25h
bWVzID0gW10KKyAgICAgICAgd2Via2l0X2J1aWxkYm90X2J1aWxkZXJfbmFtZXMgPSBbXQorICAg
ICAgICBmb3IgbmFtZSBpbiBidWlsZGVycy5hbGxfYnVpbGRlcl9uYW1lcygpOgorICAgICAgICAg
ICAgaWYgc2VsZi5fdG9vbC5wb3J0X2ZhY3RvcnkuZ2V0X2Zyb21fYnVpbGRlcl9uYW1lKG5hbWUp
LmlzX2Nocm9taXVtKCk6CisgICAgICAgICAgICAgICAgY2hyb21pdW1fYnVpbGRib3RfYnVpbGRl
cl9uYW1lcy5hcHBlbmQobmFtZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAg
d2Via2l0X2J1aWxkYm90X2J1aWxkZXJfbmFtZXMuYXBwZW5kKG5hbWUpCisKKyAgICAgICAgdGl0
bGVzID0gWyJidWlsZC53ZWJraXQub3JnIGJvdHMiLCAiYnVpbGQuY2hyb21pdW0ub3JnIGJvdHMi
XQorICAgICAgICBsaXN0cyA9IFt3ZWJraXRfYnVpbGRib3RfYnVpbGRlcl9uYW1lcywgY2hyb21p
dW1fYnVpbGRib3RfYnVpbGRlcl9uYW1lc10KKworICAgICAgICBjaG9zZW5fbmFtZXMgPSBzZWxm
Ll90b29sLnVzZXIucHJvbXB0X3dpdGhfbXVsdGlwbGVfbGlzdHMoIldoaWNoIGJ1aWxkZXIgdG8g
cHVsbCByZXN1bHRzIGZyb206IiwgdGl0bGVzLCBsaXN0cywgY2FuX2Nob29zZV9tdWx0aXBsZT1U
cnVlKQorICAgICAgICByZXR1cm4gW3NlbGYuX2J1aWxkZXJfd2l0aF9uYW1lKG5hbWUpIGZvciBu
YW1lIGluIGNob3Nlbl9uYW1lc10KKworICAgIGRlZiBfYnVpbGRlcl93aXRoX25hbWUoc2VsZiwg
bmFtZSk6CisgICAgICAgIHJldHVybiBzZWxmLl90b29sLmJ1aWxkYm90X2Zvcl9idWlsZGVyX25h
bWUobmFtZSkuYnVpbGRlcl93aXRoX25hbWUobmFtZSkKKworICAgIGRlZiBfdGVzdHNfdG9fdXBk
YXRlKHNlbGYsIGJ1aWxkZXIpOgorICAgICAgICBmYWlsaW5nX3Rlc3RzID0gYnVpbGRlci5sYXRl
c3RfbGF5b3V0X3Rlc3RfcmVzdWx0cygpLnRlc3RzX21hdGNoaW5nX2ZhaWx1cmVfdHlwZXMoW3Rl
c3RfZmFpbHVyZXMuRmFpbHVyZVRleHRNaXNtYXRjaF0pCisgICAgICAgIHJldHVybiBzZWxmLl90
b29sLnVzZXIucHJvbXB0X3dpdGhfbGlzdCgiV2hpY2ggdGVzdChzKSB0byByZWJhc2VsaW5lIGZv
ciAlczoiICUgYnVpbGRlci5uYW1lKCksIGZhaWxpbmdfdGVzdHMsIGNhbl9jaG9vc2VfbXVsdGlw
bGU9VHJ1ZSkKIAogICAgIGRlZiBleGVjdXRlKHNlbGYsIG9wdGlvbnMsIGFyZ3MsIHRvb2wpOgot
ICAgICAgICBidWlsZGVyLCBidWlsZF9udW1iZXIgPSBzZWxmLl9idWlsZGVyX3RvX3B1bGxfZnJv
bSgpCi0gICAgICAgIGJ1aWxkID0gYnVpbGRlci5idWlsZChidWlsZF9udW1iZXIpCisgICAgICAg
IGlmIG9wdGlvbnMuYnVpbGRlcnM6CisgICAgICAgICAgICBidWlsZGVycyA9IFtdCisgICAgICAg
ICAgICBmb3IgYnVpbGRlcl9uYW1lcyBpbiBvcHRpb25zLmJ1aWxkZXJzOgorICAgICAgICAgICAg
ICAgIGJ1aWxkZXJzICs9IFtzZWxmLl9idWlsZGVyX3dpdGhfbmFtZShuYW1lKSBmb3IgbmFtZSBp
biBidWlsZGVyX25hbWVzLnNwbGl0KCIsIildCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBi
dWlsZGVycyA9IHNlbGYuX2J1aWxkZXJzX3RvX3B1bGxfZnJvbSgpCiAKLSAgICAgICAgYnVpbGRl
cl9uYW1lID0gYnVpbGRlci5uYW1lKCkKICAgICAgICAgdGVzdF9saXN0ID0ge30KLSAgICAgICAg
Zm9yIHRlc3QgaW4gc2VsZi5fdGVzdHNfdG9fdXBkYXRlKGJ1aWxkKToKLSAgICAgICAgICAgIHRl
c3RfbGlzdFt0ZXN0XSA9IHtidWlsZGVyX25hbWU6IFsndHh0J119CisKKyAgICAgICAgZm9yIGJ1
aWxkZXIgaW4gYnVpbGRlcnM6CisgICAgICAgICAgICBpZiBsZW4oYXJncyk6CisgICAgICAgICAg
ICAgICAgdGVzdHMgPSBhcmdzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHRl
c3RzID0gc2VsZi5fdGVzdHNfdG9fdXBkYXRlKGJ1aWxkZXIpCisKKyAgICAgICAgICAgIGZvciB0
ZXN0IGluIHRlc3RzOgorICAgICAgICAgICAgICAgIGlmIHRlc3Qgbm90IGluIHRlc3RfbGlzdDoK
KyAgICAgICAgICAgICAgICAgICAgdGVzdF9saXN0W3Rlc3RdID0ge30KKyAgICAgICAgICAgICAg
ICAjIEZJWE1FOiBBbGxvdyBmb3IgY2hvb3NpbmcgdGhlIHN1ZmZpeGVzLgorICAgICAgICAgICAg
ICAgIHRlc3RfbGlzdFt0ZXN0XVtidWlsZGVyLm5hbWUoKV0gPSBbJ3R4dCddCisKKyAgICAgICAg
aWYgb3B0aW9ucy52ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgInJlYmFzZWxpbmUtanNvbjog
IiArIHN0cih0ZXN0X2xpc3QpCisKICAgICAgICAgc2VsZi5fcmViYXNlbGluZShvcHRpb25zLCB0
ZXN0X2xpc3QpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFu
ZHMvcmViYXNlbGluZV91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9j
b21tYW5kcy9yZWJhc2VsaW5lX3VuaXR0ZXN0LnB5CmluZGV4IDEzZDAzYjYzOThhYzgzZDBiNzEz
YmI4YjcwMjUxZTcxY2IzMmVmODYuLmI2ODFmZWVkNGNiOWY4NzYzMjRkMDJjNWFiZDBiYmUzNjdl
ODMzNDIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9y
ZWJhc2VsaW5lX3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9j
b21tYW5kcy9yZWJhc2VsaW5lX3VuaXR0ZXN0LnB5CkBAIC0zNTEsMjAgKzM1MSwxMzIgQEAgTU9D
SyBydW5fY29tbWFuZDogWydxbWFrZScsICctdiddLCBjd2Q9Tm9uZQogCiAgICAgICAgICAgICB0
b29sLmV4ZWN1dGl2ZSA9IE1vY2tFeGVjdXRpdmUoc2hvdWxkX2xvZz1UcnVlKQogCi0gICAgICAg
ICAgICBkZWYgbW9ja19idWlsZGVyX3RvX3B1bGxfZnJvbSgpOgotICAgICAgICAgICAgICAgIHJl
dHVybiBNb2NrQnVpbGRlcignTU9DSyBidWlsZGVyJyksIDEyMzQKKyAgICAgICAgICAgIGRlZiBt
b2NrX2J1aWxkZXJzX3RvX3B1bGxfZnJvbSgpOgorICAgICAgICAgICAgICAgIHJldHVybiBbTW9j
a0J1aWxkZXIoJ01PQ0sgYnVpbGRlcicpXQogCiAgICAgICAgICAgICBkZWYgbW9ja190ZXN0c190
b191cGRhdGUoYnVpbGQpOgogICAgICAgICAgICAgICAgIHJldHVybiBbJ21vY2svcGF0aC90by90
ZXN0Lmh0bWwnXQogCi0gICAgICAgICAgICBjb21tYW5kLl9idWlsZGVyX3RvX3B1bGxfZnJvbSA9
IG1vY2tfYnVpbGRlcl90b19wdWxsX2Zyb20KKyAgICAgICAgICAgIGNvbW1hbmQuX2J1aWxkZXJz
X3RvX3B1bGxfZnJvbSA9IG1vY2tfYnVpbGRlcnNfdG9fcHVsbF9mcm9tCiAgICAgICAgICAgICBj
b21tYW5kLl90ZXN0c190b191cGRhdGUgPSBtb2NrX3Rlc3RzX3RvX3VwZGF0ZQogCisgICAgICAg
ICAgICBleHBlY3RlZF9zdGRvdXQgPSAiIiJyZWJhc2VsaW5lLWpzb246IHsnbW9jay9wYXRoL3Rv
L3Rlc3QuaHRtbCc6IHsnTU9DSyBidWlsZGVyJzogWyd0eHQnXX19CisiIiIKKworICAgICAgICAg
ICAgZXhwZWN0ZWRfc3RkZXJyID0gIiIiTU9DSyBydW5fY29tbWFuZDogWydlY2hvJywgJ3JlYmFz
ZWxpbmUtdGVzdC1pbnRlcm5hbCcsICctLXN1ZmZpeGVzJywgJ3R4dCcsICctLWJ1aWxkZXInLCAn
TU9DSyBidWlsZGVyJywgJy0tdGVzdCcsICdtb2NrL3BhdGgvdG8vdGVzdC5odG1sJ10sIGN3ZD0v
bW9jay1jaGVja291dAorTU9DSyBydW5fY29tbWFuZDogWydlY2hvJywgJ29wdGltaXplLWJhc2Vs
aW5lcycsICctLXN1ZmZpeGVzJywgJ3R4dCcsICdtb2NrL3BhdGgvdG8vdGVzdC5odG1sJ10sIGN3
ZD0vbW9jay1jaGVja291dAorIiIiCisKKyAgICAgICAgICAgIE91dHB1dENhcHR1cmUoKS5hc3Nl
cnRfb3V0cHV0cyhzZWxmLCBjb21tYW5kLmV4ZWN1dGUsIFtNb2NrT3B0aW9ucyhvcHRpbWl6ZT1U
cnVlLCBidWlsZGVycz1Ob25lLCB2ZXJib3NlPVRydWUpLCBbXSwgdG9vbF0sIGV4cGVjdGVkX3N0
ZG91dD1leHBlY3RlZF9zdGRvdXQsIGV4cGVjdGVkX3N0ZGVycj1leHBlY3RlZF9zdGRlcnIpCisK
KyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGJ1aWxkZXJzLl9leGFjdF9tYXRjaGVzID0g
b2xkX2V4YWN0X21hdGNoZXMKKworICAgIGRlZiB0ZXN0X3JlYmFzZWxpbmVfY29tbWFuZF9saW5l
X2ZsYWdzKHNlbGYpOgorICAgICAgICBvbGRfZXhhY3RfbWF0Y2hlcyA9IGJ1aWxkZXJzLl9leGFj
dF9tYXRjaGVzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJ1aWxkZXJzLl9leGFjdF9tYXRj
aGVzID0geworICAgICAgICAgICAgICAgICJNT0NLIGJ1aWxkZXIiOiB7InBvcnRfbmFtZSI6ICJ0
ZXN0LW1hYy1sZW9wYXJkIiwgInNwZWNpZmllcnMiOiBzZXQoWyJtb2NrLXNwZWNpZmllciJdKX0s
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbW1hbmQgPSBSZWJhc2VsaW5lKCkKKyAg
ICAgICAgICAgIHRvb2wgPSBNb2NrVG9vbCgpCisgICAgICAgICAgICBjb21tYW5kLmJpbmRfdG9f
dG9vbCh0b29sKQorCisgICAgICAgICAgICBmb3IgcG9ydF9uYW1lIGluIHRvb2wucG9ydF9mYWN0
b3J5LmFsbF9wb3J0X25hbWVzKCk6CisgICAgICAgICAgICAgICAgcG9ydCA9IHRvb2wucG9ydF9m
YWN0b3J5LmdldChwb3J0X25hbWUpCisgICAgICAgICAgICAgICAgZm9yIHBhdGggaW4gcG9ydC5l
eHBlY3RhdGlvbnNfZmlsZXMoKToKKyAgICAgICAgICAgICAgICAgICAgdG9vbC5maWxlc3lzdGVt
LndyaXRlX3RleHRfZmlsZShwYXRoLCAnJykKKworICAgICAgICAgICAgdG9vbC5leGVjdXRpdmUg
PSBNb2NrRXhlY3V0aXZlKHNob3VsZF9sb2c9VHJ1ZSkKKworICAgICAgICAgICAgZXhwZWN0ZWRf
c3Rkb3V0ID0gIiIicmViYXNlbGluZS1qc29uOiB7J21vY2svcGF0aC90by90ZXN0Lmh0bWwnOiB7
J01PQ0sgYnVpbGRlcic6IFsndHh0J119fQorIiIiCisKICAgICAgICAgICAgIGV4cGVjdGVkX3N0
ZGVyciA9ICIiIk1PQ0sgcnVuX2NvbW1hbmQ6IFsnZWNobycsICdyZWJhc2VsaW5lLXRlc3QtaW50
ZXJuYWwnLCAnLS1zdWZmaXhlcycsICd0eHQnLCAnLS1idWlsZGVyJywgJ01PQ0sgYnVpbGRlcics
ICctLXRlc3QnLCAnbW9jay9wYXRoL3RvL3Rlc3QuaHRtbCddLCBjd2Q9L21vY2stY2hlY2tvdXQK
IE1PQ0sgcnVuX2NvbW1hbmQ6IFsnZWNobycsICdvcHRpbWl6ZS1iYXNlbGluZXMnLCAnLS1zdWZm
aXhlcycsICd0eHQnLCAnbW9jay9wYXRoL3RvL3Rlc3QuaHRtbCddLCBjd2Q9L21vY2stY2hlY2tv
dXQKICIiIgogCi0gICAgICAgICAgICBPdXRwdXRDYXB0dXJlKCkuYXNzZXJ0X291dHB1dHMoc2Vs
ZiwgY29tbWFuZC5leGVjdXRlLCBbTW9ja09wdGlvbnMob3B0aW1pemU9VHJ1ZSksIFtdLCB0b29s
XSwgZXhwZWN0ZWRfc3RkZXJyPWV4cGVjdGVkX3N0ZGVycikKKyAgICAgICAgICAgIGJ1aWxkZXIg
PSAiTU9DSyBidWlsZGVyIgorICAgICAgICAgICAgdGVzdCA9ICJtb2NrL3BhdGgvdG8vdGVzdC5o
dG1sIgorICAgICAgICAgICAgT3V0cHV0Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRzKHNlbGYsIGNv
bW1hbmQuZXhlY3V0ZSwgW01vY2tPcHRpb25zKG9wdGltaXplPVRydWUsIGJ1aWxkZXJzPVtidWls
ZGVyXSwgdmVyYm9zZT1UcnVlKSwgW3Rlc3RdLCB0b29sXSwgZXhwZWN0ZWRfc3Rkb3V0PWV4cGVj
dGVkX3N0ZG91dCwgZXhwZWN0ZWRfc3RkZXJyPWV4cGVjdGVkX3N0ZGVycikKKworICAgICAgICBm
aW5hbGx5OgorICAgICAgICAgICAgYnVpbGRlcnMuX2V4YWN0X21hdGNoZXMgPSBvbGRfZXhhY3Rf
bWF0Y2hlcworCisgICAgZGVmIHRlc3RfcmViYXNlbGluZV9tdWx0aXBsZV9idWlsZGVycyhzZWxm
KToKKyAgICAgICAgb2xkX2V4YWN0X21hdGNoZXMgPSBidWlsZGVycy5fZXhhY3RfbWF0Y2hlcwor
ICAgICAgICB0cnk6CisgICAgICAgICAgICBidWlsZGVycy5fZXhhY3RfbWF0Y2hlcyA9IHsKKyAg
ICAgICAgICAgICAgICAiTU9DSyBidWlsZGVyIjogeyJwb3J0X25hbWUiOiAidGVzdC1tYWMtbGVv
cGFyZCIsICJzcGVjaWZpZXJzIjogc2V0KFsibW9jay1zcGVjaWZpZXIiXSl9LAorICAgICAgICAg
ICAgICAgICJNT0NLIGJ1aWxkZXIyIjogeyJwb3J0X25hbWUiOiAidGVzdC1tYWMtc25vd2xlb3Bh
cmQiLCAic3BlY2lmaWVycyI6IHNldChbIm1vY2stc3BlY2lmaWVyMiJdKX0sCisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGNvbW1hbmQgPSBSZWJhc2VsaW5lKCkKKyAgICAgICAgICAgIHRv
b2wgPSBNb2NrVG9vbCgpCisgICAgICAgICAgICBjb21tYW5kLmJpbmRfdG9fdG9vbCh0b29sKQor
CisgICAgICAgICAgICBmb3IgcG9ydF9uYW1lIGluIHRvb2wucG9ydF9mYWN0b3J5LmFsbF9wb3J0
X25hbWVzKCk6CisgICAgICAgICAgICAgICAgcG9ydCA9IHRvb2wucG9ydF9mYWN0b3J5LmdldChw
b3J0X25hbWUpCisgICAgICAgICAgICAgICAgZm9yIHBhdGggaW4gcG9ydC5leHBlY3RhdGlvbnNf
ZmlsZXMoKToKKyAgICAgICAgICAgICAgICAgICAgdG9vbC5maWxlc3lzdGVtLndyaXRlX3RleHRf
ZmlsZShwYXRoLCAnJykKKworICAgICAgICAgICAgdG9vbC5leGVjdXRpdmUgPSBNb2NrRXhlY3V0
aXZlKHNob3VsZF9sb2c9VHJ1ZSkKKworICAgICAgICAgICAgZGVmIG1vY2tfYnVpbGRlcnNfdG9f
cHVsbF9mcm9tKCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFtNb2NrQnVpbGRlcignTU9DSyBi
dWlsZGVyJyksIE1vY2tCdWlsZGVyKCdNT0NLIGJ1aWxkZXIyJyldCisKKyAgICAgICAgICAgIGRl
ZiBtb2NrX3Rlc3RzX3RvX3VwZGF0ZShidWlsZCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFsn
bW9jay9wYXRoL3RvL3Rlc3QuaHRtbCddCisKKyAgICAgICAgICAgIGNvbW1hbmQuX2J1aWxkZXJz
X3RvX3B1bGxfZnJvbSA9IG1vY2tfYnVpbGRlcnNfdG9fcHVsbF9mcm9tCisgICAgICAgICAgICBj
b21tYW5kLl90ZXN0c190b191cGRhdGUgPSBtb2NrX3Rlc3RzX3RvX3VwZGF0ZQorCisgICAgICAg
ICAgICBleHBlY3RlZF9zdGRvdXQgPSAiIiJyZWJhc2VsaW5lLWpzb246IHsnbW9jay9wYXRoL3Rv
L3Rlc3QuaHRtbCc6IHsnTU9DSyBidWlsZGVyMic6IFsndHh0J10sICdNT0NLIGJ1aWxkZXInOiBb
J3R4dCddfX0KKyIiIgorCisgICAgICAgICAgICBleHBlY3RlZF9zdGRlcnIgPSAiIiJNT0NLIHJ1
bl9jb21tYW5kOiBbJ2VjaG8nLCAncmViYXNlbGluZS10ZXN0LWludGVybmFsJywgJy0tc3VmZml4
ZXMnLCAndHh0JywgJy0tYnVpbGRlcicsICdNT0NLIGJ1aWxkZXIyJywgJy0tdGVzdCcsICdtb2Nr
L3BhdGgvdG8vdGVzdC5odG1sJ10sIGN3ZD0vbW9jay1jaGVja291dAorTU9DSyBydW5fY29tbWFu
ZDogWydlY2hvJywgJ3JlYmFzZWxpbmUtdGVzdC1pbnRlcm5hbCcsICctLXN1ZmZpeGVzJywgJ3R4
dCcsICctLWJ1aWxkZXInLCAnTU9DSyBidWlsZGVyJywgJy0tdGVzdCcsICdtb2NrL3BhdGgvdG8v
dGVzdC5odG1sJ10sIGN3ZD0vbW9jay1jaGVja291dAorTU9DSyBydW5fY29tbWFuZDogWydlY2hv
JywgJ29wdGltaXplLWJhc2VsaW5lcycsICctLXN1ZmZpeGVzJywgJ3R4dCcsICdtb2NrL3BhdGgv
dG8vdGVzdC5odG1sJ10sIGN3ZD0vbW9jay1jaGVja291dAorIiIiCisKKyAgICAgICAgICAgIE91
dHB1dENhcHR1cmUoKS5hc3NlcnRfb3V0cHV0cyhzZWxmLCBjb21tYW5kLmV4ZWN1dGUsIFtNb2Nr
T3B0aW9ucyhvcHRpbWl6ZT1UcnVlLCBidWlsZGVycz1Ob25lLCB2ZXJib3NlPVRydWUpLCBbXSwg
dG9vbF0sIGV4cGVjdGVkX3N0ZG91dD1leHBlY3RlZF9zdGRvdXQsIGV4cGVjdGVkX3N0ZGVycj1l
eHBlY3RlZF9zdGRlcnIpCisKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGJ1aWxkZXJz
Ll9leGFjdF9tYXRjaGVzID0gb2xkX2V4YWN0X21hdGNoZXMKKworICAgIGRlZiB0ZXN0X3JlYmFz
ZWxpbmVfbXVsdGlwbGVfYnVpbGRlcnNfYW5kX3Rlc3RzX2NvbW1hbmRfbGluZShzZWxmKToKKyAg
ICAgICAgb2xkX2V4YWN0X21hdGNoZXMgPSBidWlsZGVycy5fZXhhY3RfbWF0Y2hlcworICAgICAg
ICB0cnk6CisgICAgICAgICAgICBidWlsZGVycy5fZXhhY3RfbWF0Y2hlcyA9IHsKKyAgICAgICAg
ICAgICAgICAiTU9DSyBidWlsZGVyIjogeyJwb3J0X25hbWUiOiAidGVzdC1tYWMtbGVvcGFyZCIs
ICJzcGVjaWZpZXJzIjogc2V0KFsibW9jay1zcGVjaWZpZXIiXSl9LAorICAgICAgICAgICAgICAg
ICJNT0NLIGJ1aWxkZXIyIjogeyJwb3J0X25hbWUiOiAidGVzdC1tYWMtc25vd2xlb3BhcmQiLCAi
c3BlY2lmaWVycyI6IHNldChbIm1vY2stc3BlY2lmaWVyMiJdKX0sCisgICAgICAgICAgICAgICAg
Ik1PQ0sgYnVpbGRlcjMiOiB7InBvcnRfbmFtZSI6ICJ0ZXN0LW1hYy1zbm93bGVvcGFyZCIsICJz
cGVjaWZpZXJzIjogc2V0KFsibW9jay1zcGVjaWZpZXIyIl0pfSwKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgY29tbWFuZCA9IFJlYmFzZWxpbmUoKQorICAgICAgICAgICAgdG9vbCA9IE1v
Y2tUb29sKCkKKyAgICAgICAgICAgIGNvbW1hbmQuYmluZF90b190b29sKHRvb2wpCisKKyAgICAg
ICAgICAgIGZvciBwb3J0X25hbWUgaW4gdG9vbC5wb3J0X2ZhY3RvcnkuYWxsX3BvcnRfbmFtZXMo
KToKKyAgICAgICAgICAgICAgICBwb3J0ID0gdG9vbC5wb3J0X2ZhY3RvcnkuZ2V0KHBvcnRfbmFt
ZSkKKyAgICAgICAgICAgICAgICBmb3IgcGF0aCBpbiBwb3J0LmV4cGVjdGF0aW9uc19maWxlcygp
OgorICAgICAgICAgICAgICAgICAgICB0b29sLmZpbGVzeXN0ZW0ud3JpdGVfdGV4dF9maWxlKHBh
dGgsICcnKQorCisgICAgICAgICAgICB0b29sLmV4ZWN1dGl2ZSA9IE1vY2tFeGVjdXRpdmUoc2hv
dWxkX2xvZz1UcnVlKQorCisgICAgICAgICAgICBleHBlY3RlZF9zdGRvdXQgPSAiIiJyZWJhc2Vs
aW5lLWpzb246IHsnbW9jay9wYXRoL3RvL3Rlc3QuaHRtbCc6IHsnTU9DSyBidWlsZGVyMic6IFsn
dHh0J10sICdNT0NLIGJ1aWxkZXInOiBbJ3R4dCddLCAnTU9DSyBidWlsZGVyMyc6IFsndHh0J119
LCAnbW9jay9wYXRoL3RvL3Rlc3QyLmh0bWwnOiB7J01PQ0sgYnVpbGRlcjInOiBbJ3R4dCddLCAn
TU9DSyBidWlsZGVyJzogWyd0eHQnXSwgJ01PQ0sgYnVpbGRlcjMnOiBbJ3R4dCddfX0KKyIiIgor
CisgICAgICAgICAgICBleHBlY3RlZF9zdGRlcnIgPSAiIiJNT0NLIHJ1bl9jb21tYW5kOiBbJ2Vj
aG8nLCAncmViYXNlbGluZS10ZXN0LWludGVybmFsJywgJy0tc3VmZml4ZXMnLCAndHh0JywgJy0t
YnVpbGRlcicsICdNT0NLIGJ1aWxkZXIyJywgJy0tdGVzdCcsICdtb2NrL3BhdGgvdG8vdGVzdC5o
dG1sJ10sIGN3ZD0vbW9jay1jaGVja291dAorTU9DSyBydW5fY29tbWFuZDogWydlY2hvJywgJ3Jl
YmFzZWxpbmUtdGVzdC1pbnRlcm5hbCcsICctLXN1ZmZpeGVzJywgJ3R4dCcsICctLWJ1aWxkZXIn
LCAnTU9DSyBidWlsZGVyJywgJy0tdGVzdCcsICdtb2NrL3BhdGgvdG8vdGVzdC5odG1sJ10sIGN3
ZD0vbW9jay1jaGVja291dAorTU9DSyBydW5fY29tbWFuZDogWydlY2hvJywgJ3JlYmFzZWxpbmUt
dGVzdC1pbnRlcm5hbCcsICctLXN1ZmZpeGVzJywgJ3R4dCcsICctLWJ1aWxkZXInLCAnTU9DSyBi
dWlsZGVyMicsICctLXRlc3QnLCAnbW9jay9wYXRoL3RvL3Rlc3QyLmh0bWwnXSwgY3dkPS9tb2Nr
LWNoZWNrb3V0CitNT0NLIHJ1bl9jb21tYW5kOiBbJ2VjaG8nLCAncmViYXNlbGluZS10ZXN0LWlu
dGVybmFsJywgJy0tc3VmZml4ZXMnLCAndHh0JywgJy0tYnVpbGRlcicsICdNT0NLIGJ1aWxkZXIn
LCAnLS10ZXN0JywgJ21vY2svcGF0aC90by90ZXN0Mi5odG1sJ10sIGN3ZD0vbW9jay1jaGVja291
dAorTU9DSyBydW5fY29tbWFuZDogWydlY2hvJywgJ29wdGltaXplLWJhc2VsaW5lcycsICctLXN1
ZmZpeGVzJywgJ3R4dCcsICdtb2NrL3BhdGgvdG8vdGVzdC5odG1sJ10sIGN3ZD0vbW9jay1jaGVj
a291dAorTU9DSyBydW5fY29tbWFuZDogWydlY2hvJywgJ29wdGltaXplLWJhc2VsaW5lcycsICct
LXN1ZmZpeGVzJywgJ3R4dCcsICdtb2NrL3BhdGgvdG8vdGVzdDIuaHRtbCddLCBjd2Q9L21vY2st
Y2hlY2tvdXQKKyIiIgorCisgICAgICAgICAgICBPdXRwdXRDYXB0dXJlKCkuYXNzZXJ0X291dHB1
dHMoc2VsZiwgY29tbWFuZC5leGVjdXRlLCBbTW9ja09wdGlvbnMob3B0aW1pemU9VHJ1ZSwgYnVp
bGRlcnM9WyJNT0NLIGJ1aWxkZXIsTU9DSyBidWlsZGVyMiIsICJNT0NLIGJ1aWxkZXIzIl0sIHZl
cmJvc2U9VHJ1ZSksIFsibW9jay9wYXRoL3RvL3Rlc3QuaHRtbCIsICJtb2NrL3BhdGgvdG8vdGVz
dDIuaHRtbCJdLCB0b29sXSwgZXhwZWN0ZWRfc3Rkb3V0PWV4cGVjdGVkX3N0ZG91dCwgZXhwZWN0
ZWRfc3RkZXJyPWV4cGVjdGVkX3N0ZGVycikKIAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAg
ICAgYnVpbGRlcnMuX2V4YWN0X21hdGNoZXMgPSBvbGRfZXhhY3RfbWF0Y2hlcwpkaWZmIC0tZ2l0
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL21vY2t0b29sLnB5IGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS90b29sL21vY2t0b29sLnB5CmluZGV4IDIxZWU5MWZjOWRiOTgyNzczNGQyZTYx
MTA4M2MwYzVmYzA1MTY5NmYuLmI4ZjA5NzZiYzkyOWVhMjljZDQyNDM3MTdlOTdiNjUwOWQwZWJm
NmMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9tb2NrdG9vbC5weQor
KysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvbW9ja3Rvb2wucHkKQEAgLTI5LDYgKzI5
LDcgQEAKIGltcG9ydCB0aHJlYWRpbmcKIAogZnJvbSB3ZWJraXRweS5jb21tb24uaG9zdF9tb2Nr
IGltcG9ydCBNb2NrSG9zdAorZnJvbSB3ZWJraXRweS5jb21tb24ubmV0LmJ1aWxkYm90LmJ1aWxk
Ym90X21vY2sgaW1wb3J0IE1vY2tCdWlsZEJvdAogZnJvbSB3ZWJraXRweS5jb21tb24ubmV0LnN0
YXR1c3NlcnZlcl9tb2NrIGltcG9ydCBNb2NrU3RhdHVzU2VydmVyCiBmcm9tIHdlYmtpdHB5LmNv
bW1vbi5uZXQuaXJjLmlyY19tb2NrIGltcG9ydCBNb2NrSVJDCiAKQEAgLTgyLDMgKzgzLDYgQEAg
Y2xhc3MgTW9ja1Rvb2woTW9ja0hvc3QpOgogCiAgICAgZGVmIGlyYyhzZWxmKToKICAgICAgICAg
cmV0dXJuIHNlbGYuX2lyYworCisgICAgZGVmIGJ1aWxkYm90X2Zvcl9idWlsZGVyX25hbWUoc2Vs
ZiwgbmFtZSk6CisgICAgICAgIHJldHVybiBNb2NrQnVpbGRCb3QoKQo=
</data>
<flag name="review"
          id="159817"
          type_id="1"
          status="+"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>