<?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>108577</bug_id>
          
          <creation_ts>2013-01-31 21:35:22 -0800</creation_ts>
          <short_desc>Upload results to perf.webkit.org in addition to the one specified by --test-results-server</short_desc>
          <delta_ts>2013-02-22 20:30:32 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</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>
          
          <blocked>77037</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>abarth</cc>
    
    <cc>barraclough</cc>
    
    <cc>dpranke</cc>
    
    <cc>eric</cc>
    
    <cc>mjs</cc>
    
    <cc>mrowe</cc>
    
    <cc>ojan</cc>
    
    <cc>pdr</cc>
    
    <cc>slewis</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>wsiegrist</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>822303</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-01-31 21:35:22 -0800</bug_when>
    <thetext>We will be launching new performance monitoring on perf.webkit.org soon.

Since we would like to pre-populate new monitoring app with useful data, make run-perf-tests submit results to perf.webkit.org in addition to webkit-perf.appspot.com specified by buildbot.
While we could be modifying buildbot configuration to specify both, I&apos;m going to just add a hack in run-perf-tests since this is only a temporary solution during the transition.
Once we&apos;ve completed the transition, we&apos;ll stop uploading results to webkit-perf.appspot.com and simply specify perf.webkit.org on --test-results-server.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822306</commentid>
    <comment_count>1</comment_count>
      <attachid>185938</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-01-31 21:37:38 -0800</bug_when>
    <thetext>Created attachment 185938
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823222</commentid>
    <comment_count>2</comment_count>
      <attachid>186127</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-02-01 13:46:19 -0800</bug_when>
    <thetext>Created attachment 186127
Work in progress 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>828673</commentid>
    <comment_count>3</comment_count>
      <attachid>187337</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-02-08 10:39:39 -0800</bug_when>
    <thetext>Created attachment 187337
Work in progress 3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>828949</commentid>
    <comment_count>4</comment_count>
      <attachid>187412</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-02-08 21:55:02 -0800</bug_when>
    <thetext>Created attachment 187412
Work in progress 4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>839184</commentid>
    <comment_count>5</comment_count>
      <attachid>189670</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-02-21 20:43:59 -0800</bug_when>
    <thetext>Created attachment 189670
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>839185</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-21 20:45:26 -0800</bug_when>
    <thetext>Attachment 189670 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Tools/ChangeLog&apos;, u&apos;Tools/Scripts/webkitpy/common/checkout/scm/git.py&apos;, u&apos;Tools/Scripts/webkitpy/common/checkout/scm/scm.py&apos;, u&apos;Tools/Scripts/webkitpy/common/checkout/scm/scm_mock.py&apos;, u&apos;Tools/Scripts/webkitpy/common/checkout/scm/scm_unittest.py&apos;, u&apos;Tools/Scripts/webkitpy/common/checkout/scm/svn.py&apos;, u&apos;Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py&apos;, u&apos;Tools/Scripts/webkitpy/layout_tests/port/base.py&apos;, u&apos;Tools/Scripts/webkitpy/layout_tests/port/chromium.py&apos;, u&apos;Tools/Scripts/webkitpy/performance_tests/perftestsrunner.py&apos;, u&apos;Tools/Scripts/webkitpy/performance_tests/perftestsrunner_integrationtest.py&apos;, u&apos;Tools/Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py&apos;]&quot; exit_code: 1
Tools/Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:167:  [MainTest.test_upload_json.MockFileUploader.__init__] Method should have &quot;self&quot; as first argument  [pylint/E0213] [5]
Tools/Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:172:  [MainTest.test_upload_json.MockFileUploader.upload_single_text_file] Method should have &quot;self&quot; as first argument  [pylint/E0213] [5]
Total errors found: 2 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>839932</commentid>
    <comment_count>7</comment_count>
      <attachid>189670</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-02-22 14:07:04 -0800</bug_when>
    <thetext>Comment on attachment 189670
Patch

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

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium.py:367
&gt; -        repos.append((&apos;chromium&apos;, self.path_from_chromium_base(&apos;build&apos;)))
&gt; +        repos.append((&apos;Chromium&apos;, self.path_from_chromium_base(&apos;build&apos;)))

These are paths?  Are you sure you wnat to capitalize here?

&gt; Tools/Scripts/webkitpy/performance_tests/perftestsrunner.py:281
&gt; +                url = &apos;http://trac.webkit.org/browser/trunk/PerformanceTests/&apos; + &apos;/&apos;.join(path[0:i + 1])

You might separate this out into another function.  I think common.config.urls already has this anyway. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>839933</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-02-22 14:07:27 -0800</bug_when>
    <thetext>I&apos;d prefer you ask dpranke or ojan for a review.  I think they probably know this section of webkitpy better than I do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>839985</commentid>
    <comment_count>9</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-02-22 14:31:14 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 189670 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=189670&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/chromium.py:367
&gt; &gt; -        repos.append((&apos;chromium&apos;, self.path_from_chromium_base(&apos;build&apos;)))
&gt; &gt; +        repos.append((&apos;Chromium&apos;, self.path_from_chromium_base(&apos;build&apos;)))
&gt; 
&gt; These are paths?  Are you sure you wnat to capitalize here?

No, they&apos;re repository names.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840023</commentid>
    <comment_count>10</comment_count>
      <attachid>189670</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2013-02-22 14:54:56 -0800</bug_when>
    <thetext>Comment on attachment 189670
Patch

Mostly minor comments ... I&apos;d like to review it again briefly once you can get things cleaned up?

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

&gt; Tools/ChangeLog:12
&gt; +        a svn checkout or a git clone. This information is embedded in JSON submitted to perf.webkit.org.

I saw there was some discussion of this on #irc, but can you add a bit more as to *why* you need/want the timestamp?

Also, reflecting what we discussed on #webkit, can you put in something about why we need to support two formats, and what the transition plan is? this patch makes things pretty ugly, so it would be good to clarify that this is hopefully temporary.

&gt; Tools/ChangeLog:16
&gt; +        of this feature has been updated to explicitly lowercase the names.

Is this actually needed as a part of this change? AFAIK, these repo names aren&apos;t really user-visible and this kinda seems like busy work. I&apos;m not saying you should remove it, but I wouldn&apos;t have made the changes unless they were actually needed, especially since you&apos;re having to work-around the changes to keep from breaking clients.

&gt; Tools/Scripts/webkitpy/common/checkout/scm/git.py:257
&gt; +    def svn_timestamp(self, path):

Why is this &quot;svn_timestamp&quot; rather than just &quot;timestamp&quot; or &quot;timestamp_of_latest_commit&quot;?

Why do you need &apos;-25&apos; rather than just &apos;-1&apos; ? It doesn&apos;t look like this is actually filtering for git-svn-id: or anything to find the svn-specific revisions?  

Do you need to do anything here to ensure you&apos;re not pulling timestamps off a branch?

&gt; Tools/Scripts/webkitpy/layout_tests/port/base.py:1100
&gt; +        By default it returns a list that only contains a (&apos;WebKit&apos;, &lt;webkitRepossitoryPath&gt;) tuple.&quot;&quot;&quot;

typo: webkitRepossitory . I know you didn&apos;t add it, but might as well fix it while you&apos;re here :).

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium.py:367
&gt;&gt; +        repos.append((&apos;Chromium&apos;, self.path_from_chromium_base(&apos;build&apos;)))
&gt; 
&gt; These are paths?  Are you sure you wnat to capitalize here?

The first arg is just an identifier, not a path.

&gt; Tools/Scripts/webkitpy/performance_tests/perftestsrunner.py:208
&gt;      def _generate_and_show_results(self):

this function is too long and doing too much now ... can you add some FIXMEs to break it up to be easier to follow (and test)?

&gt; Tools/Scripts/webkitpy/performance_tests/perftestsrunner.py:265
&gt; +            result = self._results[metric_full_name]

nit: for metric_full_name, result in self._results.iteritems(): ?

&gt; Tools/Scripts/webkitpy/performance_tests/perftestsrunner.py:267
&gt; +            # We can&apos;t reprot results without indivisual measurements.

typos.

&gt; Tools/Scripts/webkitpy/performance_tests/perftestsrunner.py:327
&gt; +    def _generate_output_files(self, output_json_path, perf_webkit_json_path, results_page_path, output, perf_webkit_output):

seems like here you could just call _generate_output_files twice, once with the old output, and then the second time w/ the new output and results_page_path=None ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840040</commentid>
    <comment_count>11</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-02-22 15:11:19 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt;
&gt; &gt; Tools/ChangeLog:12
&gt; &gt; +        a svn checkout or a git clone. This information is embedded in JSON submitted to perf.webkit.org.
&gt; 
&gt; I saw there was some discussion of this on #irc, but can you add a bit more as to *why* you need/want the timestamp?
&gt; 
&gt; Also, reflecting what we discussed on #webkit, can you put in something about why we need to support two formats, and what the transition plan is? this patch makes things pretty ugly, so it would be good to clarify that this is hopefully temporary.

Done.
 
&gt; &gt; Tools/ChangeLog:16
&gt; &gt; +        of this feature has been updated to explicitly lowercase the names.
&gt; 
&gt; Is this actually needed as a part of this change? AFAIK, these repo names aren&apos;t really user-visible and this kinda seems like busy work. I&apos;m not saying you should remove it, but I wouldn&apos;t have made the changes unless they were actually needed, especially since you&apos;re having to work-around the changes to keep from breaking clients.

Yes. These names are recorded and exposed on perf.webkit.org as a part of its UI.

&gt; &gt; Tools/Scripts/webkitpy/common/checkout/scm/git.py:257
&gt; &gt; +    def svn_timestamp(self, path):
&gt; 
&gt; Why is this &quot;svn_timestamp&quot; rather than just &quot;timestamp&quot; or &quot;timestamp_of_latest_commit&quot;?

Renamed.

&gt; Why do you need &apos;-25&apos; rather than just &apos;-1&apos; ? It doesn&apos;t look like this is actually filtering for git-svn-id: or anything to find the svn-specific revisions?  

Oops, changed it to -1.

&gt; Do you need to do anything here to ensure you&apos;re not pulling timestamps off a branch?

I don&apos;t really care what happens on beaches at least for now since none of our bots use branches.

&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/base.py:1100
&gt; &gt; +        By default it returns a list that only contains a (&apos;WebKit&apos;, &lt;webkitRepossitoryPath&gt;) tuple.&quot;&quot;&quot;
&gt; 
&gt; typo: webkitRepossitory . I know you didn&apos;t add it, but might as well fix it while you&apos;re here :).

Fixed.

&gt; &gt; Tools/Scripts/webkitpy/performance_tests/perftestsrunner.py:208
&gt; &gt;      def _generate_and_show_results(self):
&gt; 
&gt; this function is too long and doing too much now ... can you add some FIXMEs to break it up to be easier to follow (and test)?

Added.

&gt; &gt; Tools/Scripts/webkitpy/performance_tests/perftestsrunner.py:265
&gt; &gt; +            result = self._results[metric_full_name]
&gt; 
&gt; nit: for metric_full_name, result in self._results.iteritems(): ?

Fixed.

&gt; &gt; Tools/Scripts/webkitpy/performance_tests/perftestsrunner.py:267
&gt; &gt; +            # We can&apos;t reprot results without indivisual measurements.
&gt; 
&gt; typos.

Fixed.

&gt; &gt; Tools/Scripts/webkitpy/performance_tests/perftestsrunner.py:327
&gt; &gt; +    def _generate_output_files(self, output_json_path, perf_webkit_json_path, results_page_path, output, perf_webkit_output):
&gt; 
&gt; seems like here you could just call _generate_output_files twice, once with the old output, and then the second time w/ the new output and results_page_path=None ?

No. results page should only be generated with the old JSON format for now. I&apos;ll update the results page&apos;s template to use the new format once this patch is in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840044</commentid>
    <comment_count>12</comment_count>
      <attachid>189843</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-02-22 15:14:07 -0800</bug_when>
    <thetext>Created attachment 189843
Fixed per comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840046</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-22 15:16:24 -0800</bug_when>
    <thetext>Attachment 189843 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Tools/ChangeLog&apos;, u&apos;Tools/Scripts/webkitpy/common/checkout/scm/git.py&apos;, u&apos;Tools/Scripts/webkitpy/common/checkout/scm/scm.py&apos;, u&apos;Tools/Scripts/webkitpy/common/checkout/scm/scm_mock.py&apos;, u&apos;Tools/Scripts/webkitpy/common/checkout/scm/scm_unittest.py&apos;, u&apos;Tools/Scripts/webkitpy/common/checkout/scm/svn.py&apos;, u&apos;Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py&apos;, u&apos;Tools/Scripts/webkitpy/layout_tests/port/base.py&apos;, u&apos;Tools/Scripts/webkitpy/layout_tests/port/chromium.py&apos;, u&apos;Tools/Scripts/webkitpy/performance_tests/perftestsrunner.py&apos;, u&apos;Tools/Scripts/webkitpy/performance_tests/perftestsrunner_integrationtest.py&apos;, u&apos;Tools/Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py&apos;]&quot; exit_code: 1
Tools/Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:167:  [MainTest.test_upload_json.MockFileUploader.__init__] Method should have &quot;self&quot; as first argument  [pylint/E0213] [5]
Tools/Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:172:  [MainTest.test_upload_json.MockFileUploader.upload_single_text_file] Method should have &quot;self&quot; as first argument  [pylint/E0213] [5]
Total errors found: 2 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840048</commentid>
    <comment_count>14</comment_count>
      <attachid>189843</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2013-02-22 15:18:26 -0800</bug_when>
    <thetext>Comment on attachment 189843
Fixed per comments

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

r+ with the typos fixed.

&gt; Tools/ChangeLog:9
&gt; +        --test-results-server. The new format is needed to provide of extra information perf.webkit.org

nit: s/provide of/provide/

&gt; Tools/ChangeLog:12
&gt; +        webkit-perf.appspot.com will be deleted once the transition is completed.

webkit-perf.appspot.com can be deleted.

&gt; Tools/ChangeLog:14
&gt; +        This patch adds scm.svn_timestamp to obtain the timestamp of the latest commit present in

rename to timestamp_of_latest_commit() in the Changelog?

&gt; Tools/Scripts/webkitpy/common/checkout/scm/git.py:263
&gt; +        # Manually modify the timezone since Git doesn&apos;t have an optiton to show it in UTC.

typo: &quot;optiton&quot;

&gt; Tools/Scripts/webkitpy/common/checkout/scm/git.py:270
&gt; +        return time_wihout_timezone.strftime(&apos;%Y-%m-%dT%H:%M:%SZ&apos;)

typo: &quot;wihout&quot; (both lines)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840050</commentid>
    <comment_count>15</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2013-02-22 15:19:33 -0800</bug_when>
    <thetext>Also, can you make sure that check-webkit-style (and/or lint-webkitpy) is clean, since the style bot seems to be choking?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840060</commentid>
    <comment_count>16</comment_count>
      <attachid>189848</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-02-22 15:29:50 -0800</bug_when>
    <thetext>Created attachment 189848
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840071</commentid>
    <comment_count>17</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-02-22 15:37:06 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; Created an attachment (id=189848) [details]
&gt; Patch for landing

I&apos;m going to land this patch manually. I need to prepare both perf.webkit.org and webkit-perf.appsot.com for this patch so please don&apos;t land this patch until I do tonight.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840282</commentid>
    <comment_count>18</comment_count>
      <attachid>189848</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-02-22 20:30:25 -0800</bug_when>
    <thetext>Comment on attachment 189848
Patch for landing

Clearing flags on attachment: 189848

Committed r143833: &lt;http://trac.webkit.org/changeset/143833&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840283</commentid>
    <comment_count>19</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-02-22 20:30:32 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185938</attachid>
            <date>2013-01-31 21:37:38 -0800</date>
            <delta_ts>2013-02-01 13:46:17 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>bug-108577-20130131213422.patch</filename>
            <type>text/plain</type>
            <size>16870</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE0MTUzNCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDMzIEBACisyMDEzLTAxLTMxICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgor
CisgICAgICAgIFVwbG9hZCByZXN1bHRzIHRvIHBlcmYud2Via2l0Lm9yZyBpbiBhZGRpdGlvbiB0
byB0aGUgb25lIHNwZWNpZmllZCBieSAtLXRlc3QtcmVzdWx0cy1zZXJ2ZXIKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODU3NworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvci5weToKKyAg
ICAgICAgKEpTT05SZXN1bHRzR2VuZXJhdG9yQmFzZS5faW5zZXJ0X2dlbmVyaWNfbWV0YWRhdGEp
OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weToK
KyAgICAgICAgKFBvcnQucmVwb3NpdG9yeV9wYXRocyk6CisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weToKKyAgICAgICAgKENocm9taXVtUG9y
dC5yZXBvc2l0b3J5X3BhdGhzKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1h
bmNlX3Rlc3RzL3BlcmZ0ZXN0c3J1bm5lci5weToKKyAgICAgICAgKFBlcmZUZXN0c1J1bm5lci5f
X2luaXRfXyk6CisgICAgICAgIChQZXJmVGVzdHNSdW5uZXIuX2dlbmVyYXRlX2FuZF9zaG93X3Jl
c3VsdHMpOgorICAgICAgICAoUGVyZlRlc3RzUnVubmVyLl9nZW5lcmF0ZV9yZXN1bHRzX2RpY3Qp
OgorICAgICAgICAoUGVyZlRlc3RzUnVubmVyKToKKyAgICAgICAgKFBlcmZUZXN0c1J1bm5lci5f
ZGF0ZXRpbWVfaW5fRVM1X2NvbXBhdGlibGVfaXNvX2Zvcm1hdCk6CisgICAgICAgIChQZXJmVGVz
dHNSdW5uZXIuX21lcmdlX3NsYXZlX2NvbmZpZ19qc29uKToKKyAgICAgICAgKFBlcmZUZXN0c1J1
bm5lci5fZ2VuZXJhdGVfb3V0cHV0X2ZpbGVzKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0c3J1bm5lcl9pbnRlZ3JhdGlvbnRlc3QucHk6Cisg
ICAgICAgIChNYWluVGVzdC5fdGVzdF9ydW5fd2l0aF9qc29uX291dHB1dC5tb2NrX3VwbG9hZF9q
c29uKToKKyAgICAgICAgKE1haW5UZXN0Ll90ZXN0X3J1bl93aXRoX2pzb25fb3V0cHV0KToKKyAg
ICAgICAgKE1haW5UZXN0LnRlc3RfcnVuX3dpdGhfdXBsb2FkX2pzb25fc2hvdWxkX2dlbmVyYXRl
X3BlcmZfd2Via2l0X2pzb24pOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFu
Y2VfdGVzdHMvcGVyZnRlc3RzcnVubmVyX3VuaXR0ZXN0LnB5OgorICAgICAgICAoTWFpblRlc3Qu
dGVzdF9wYXJzZV9hcmdzKToKKyAgICAgICAgKE1haW5UZXN0KToKKyAgICAgICAgKE1haW5UZXN0
LnRlc3RfZ2VuZXJhdGVfcGVyZl93ZWJraXRfb3V0cHV0KToKKwogMjAxMy0wMS0zMSAgRGF2aWQg
RmFybGVyICA8ZGZhcmxlckBhcHBsZS5jb20+CiAKICAgICAgICAgUHJvdmlkZSBhIHNlbnNpYmxl
IGRlZmF1bHQgYXJjaGl0ZWN0dXJlIHdoZW4gYnVpbGRpbmcgb24gaU9TIFNES3MKSW5kZXg6IFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25fcmVz
dWx0c19nZW5lcmF0b3IucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvci5weQkocmV2
aXNpb24gMTQxNTE5KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5
b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvci5weQkod29ya2luZyBjb3B5KQpAQCAt
NTI2LDExICs1MjYsMTIgQEAgY2xhc3MgSlNPTlJlc3VsdHNHZW5lcmF0b3JCYXNlKG9iamVjdCk6
CiAgICAgICAgIGZvciAobmFtZSwgcGF0aCkgaW4gc2VsZi5fc3ZuX3JlcG9zaXRvcmllczoKICAg
ICAgICAgICAgICMgTm90ZTogZm9yIEpTT04gZmlsZSdzIGJhY2t3YXJkLWNvbXBhdGliaWxpdHkg
d2UgdXNlICdjaHJvbWUnIHJhdGhlcgogICAgICAgICAgICAgIyB0aGFuICdjaHJvbWl1bScgaGVy
ZS4KLSAgICAgICAgICAgIGlmIG5hbWUgPT0gJ2Nocm9taXVtJzoKLSAgICAgICAgICAgICAgICBu
YW1lID0gJ2Nocm9tZScKKyAgICAgICAgICAgIGxvd2VyY2FzZV9uYW1lID0gbmFtZS5sb3dlcigp
CisgICAgICAgICAgICBpZiBsb3dlcmNhc2VfbmFtZSA9PSAnY2hyb21pdW0nOgorICAgICAgICAg
ICAgICAgIGxvd2VyY2FzZV9uYW1lID0gJ2Nocm9tZScKICAgICAgICAgICAgIHNlbGYuX2luc2Vy
dF9pdGVtX2ludG9fcmF3X2xpc3QocmVzdWx0c19mb3JfYnVpbGRlciwKICAgICAgICAgICAgICAg
ICBzZWxmLl9nZXRfc3ZuX3JldmlzaW9uKHBhdGgpLAotICAgICAgICAgICAgICAgIG5hbWUgKyAn
UmV2aXNpb24nKQorICAgICAgICAgICAgICAgIGxvd2VyY2FzZV9uYW1lICsgJ1JldmlzaW9uJykK
IAogICAgICAgICBzZWxmLl9pbnNlcnRfaXRlbV9pbnRvX3Jhd19saXN0KHJlc3VsdHNfZm9yX2J1
aWxkZXIsCiAgICAgICAgICAgICBpbnQodGltZS50aW1lKCkpLApJbmRleDogVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weQkocmV2aXNpb24gMTQx
NTE5KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDkwLDExICsxMDkwLDExIEBAIGNsYXNzIFBvcnQob2JqZWN0
KToKIAogICAgIGRlZiByZXBvc2l0b3J5X3BhdGhzKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm5z
IGEgbGlzdCBvZiAocmVwb3NpdG9yeV9uYW1lLCByZXBvc2l0b3J5X3BhdGgpIHR1cGxlcyBvZiBp
dHMgZGVwZW5kaW5nIGNvZGUgYmFzZS4KLSAgICAgICAgQnkgZGVmYXVsdCBpdCByZXR1cm5zIGEg
bGlzdCB0aGF0IG9ubHkgY29udGFpbnMgYSAoJ3dlYmtpdCcsIDx3ZWJraXRSZXBvc3NpdG9yeVBh
dGg+KSB0dXBsZS4iIiIKKyAgICAgICAgQnkgZGVmYXVsdCBpdCByZXR1cm5zIGEgbGlzdCB0aGF0
IG9ubHkgY29udGFpbnMgYSAoJ1dlYktpdCcsIDx3ZWJraXRSZXBvc3NpdG9yeVBhdGg+KSB0dXBs
ZS4iIiIKIAotICAgICAgICAjIFdlIHVzZSBMYXlvdXRUZXN0IGRpcmVjdG9yeSBoZXJlIGJlY2F1
c2Ugd2Via2l0X2Jhc2UgaXNuJ3QgYSBwYXJ0IHdlYmtpdCByZXBvc2l0b3J5IGluIENocm9taXVt
IHBvcnQKKyAgICAgICAgIyBXZSB1c2UgTGF5b3V0VGVzdCBkaXJlY3RvcnkgaGVyZSBiZWNhdXNl
IHdlYmtpdF9iYXNlIGlzbid0IGEgcGFydCBvZiBXZWJLaXQgcmVwb3NpdG9yeSBpbiBDaHJvbWl1
bSBwb3J0CiAgICAgICAgICMgd2hlcmUgdHVybmsgaXNuJ3QgY2hlY2tlZCBvdXQgYXMgYSB3aG9s
ZS4KLSAgICAgICAgcmV0dXJuIFsoJ3dlYmtpdCcsIHNlbGYubGF5b3V0X3Rlc3RzX2RpcigpKV0K
KyAgICAgICAgcmV0dXJuIFsoJ1dlYktpdCcsIHNlbGYubGF5b3V0X3Rlc3RzX2RpcigpKV0KIAog
ICAgIF9XRElGRl9ERUwgPSAnIyNXRElGRl9ERUwjIycKICAgICBfV0RJRkZfQUREID0gJyMjV0RJ
RkZfQUREIyMnCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2Nocm9taXVtLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHkJKHJldmlzaW9uIDE0MTUxOSkKKysrIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHkJKHdvcmtpbmcgY29weSkK
QEAgLTM2NCw3ICszNjQsNyBAQCBjbGFzcyBDaHJvbWl1bVBvcnQoUG9ydCk6CiAKICAgICBkZWYg
cmVwb3NpdG9yeV9wYXRocyhzZWxmKToKICAgICAgICAgcmVwb3MgPSBzdXBlcihDaHJvbWl1bVBv
cnQsIHNlbGYpLnJlcG9zaXRvcnlfcGF0aHMoKQotICAgICAgICByZXBvcy5hcHBlbmQoKCdjaHJv
bWl1bScsIHNlbGYucGF0aF9mcm9tX2Nocm9taXVtX2Jhc2UoJ2J1aWxkJykpKQorICAgICAgICBy
ZXBvcy5hcHBlbmQoKCdDaHJvbWl1bScsIHNlbGYucGF0aF9mcm9tX2Nocm9taXVtX2Jhc2UoJ2J1
aWxkJykpKQogICAgICAgICByZXR1cm4gcmVwb3MKIAogICAgIGRlZiBfZ2V0X2NyYXNoX2xvZyhz
ZWxmLCBuYW1lLCBwaWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuKToKSW5kZXg6IFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3RzcnVubmVyLnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVy
ZnRlc3RzcnVubmVyLnB5CShyZXZpc2lvbiAxNDE1MTkpCisrKyBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0c3J1bm5lci5weQkod29ya2luZyBjb3B5KQpA
QCAtMzMsNiArMzMsNyBAQCBpbXBvcnQganNvbgogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBvcHRw
YXJzZQogaW1wb3J0IHRpbWUKK2ltcG9ydCBkYXRldGltZQogCiBmcm9tIHdlYmtpdHB5LmNvbW1v
biBpbXBvcnQgZmluZF9maWxlcwogZnJvbSB3ZWJraXRweS5jb21tb24uY2hlY2tvdXQuc2NtLmRl
dGVjdGlvbiBpbXBvcnQgU0NNRGV0ZWN0b3IKQEAgLTY3LDYgKzY4LDcgQEAgY2xhc3MgUGVyZlRl
c3RzUnVubmVyKG9iamVjdCk6CiAgICAgICAgIHNlbGYuX2Jhc2VfcGF0aCA9IHNlbGYuX3BvcnQu
cGVyZl90ZXN0c19kaXIoKQogICAgICAgICBzZWxmLl9yZXN1bHRzID0ge30KICAgICAgICAgc2Vs
Zi5fdGltZXN0YW1wID0gdGltZS50aW1lKCkKKyAgICAgICAgc2VsZi5fdXRjX3RpbWVzdGFtcCA9
IGRhdGV0aW1lLmRhdGV0aW1lLnV0Y25vdygpCiAgICAgICAgIHNlbGYuX25lZWRzX2h0dHAgPSBO
b25lCiAgICAgICAgIHNlbGYuX2hhc19odHRwX2xvY2sgPSBGYWxzZQogCkBAIC0yMDgsMjQgKzIx
MCwzMCBAQCBjbGFzcyBQZXJmVGVzdHNSdW5uZXIob2JqZWN0KToKICAgICBkZWYgX2dlbmVyYXRl
X2FuZF9zaG93X3Jlc3VsdHMoc2VsZik6CiAgICAgICAgIG9wdGlvbnMgPSBzZWxmLl9vcHRpb25z
CiAgICAgICAgIG91dHB1dF9qc29uX3BhdGggPSBzZWxmLl9vdXRwdXRfanNvbl9wYXRoKCkKLSAg
ICAgICAgb3V0cHV0ID0gc2VsZi5fZ2VuZXJhdGVfcmVzdWx0c19kaWN0KHNlbGYuX3RpbWVzdGFt
cCwgb3B0aW9ucy5kZXNjcmlwdGlvbiwgb3B0aW9ucy5wbGF0Zm9ybSwgb3B0aW9ucy5idWlsZGVy
X25hbWUsIG9wdGlvbnMuYnVpbGRfbnVtYmVyKQorICAgICAgICBvdXRwdXQsIHBlcmZfd2Via2l0
X291dHB1dCA9IHNlbGYuX2dlbmVyYXRlX3Jlc3VsdHNfZGljdChzZWxmLl90aW1lc3RhbXAsIG9w
dGlvbnMuZGVzY3JpcHRpb24sIG9wdGlvbnMucGxhdGZvcm0sIG9wdGlvbnMuYnVpbGRlcl9uYW1l
LCBvcHRpb25zLmJ1aWxkX251bWJlcikKIAogICAgICAgICBpZiBvcHRpb25zLnNsYXZlX2NvbmZp
Z19qc29uX3BhdGg6Ci0gICAgICAgICAgICBvdXRwdXQgPSBzZWxmLl9tZXJnZV9zbGF2ZV9jb25m
aWdfanNvbihvcHRpb25zLnNsYXZlX2NvbmZpZ19qc29uX3BhdGgsIG91dHB1dCkKKyAgICAgICAg
ICAgIG91dHB1dCwgcGVyZl93ZWJraXRfb3V0cHV0ID0gc2VsZi5fbWVyZ2Vfc2xhdmVfY29uZmln
X2pzb24ob3B0aW9ucy5zbGF2ZV9jb25maWdfanNvbl9wYXRoLCBvdXRwdXQsIHBlcmZfd2Via2l0
X291dHB1dCkKICAgICAgICAgICAgIGlmIG5vdCBvdXRwdXQ6CiAgICAgICAgICAgICAgICAgcmV0
dXJuIHNlbGYuRVhJVF9DT0RFX0JBRF9TT1VSQ0VfSlNPTgogCiAgICAgICAgIG91dHB1dCA9IHNl
bGYuX21lcmdlX291dHB1dHNfaWZfbmVlZGVkKG91dHB1dF9qc29uX3BhdGgsIG91dHB1dCkKICAg
ICAgICAgaWYgbm90IG91dHB1dDoKICAgICAgICAgICAgIHJldHVybiBzZWxmLkVYSVRfQ09ERV9C
QURfTUVSR0UKKyAgICAgICAgcGVyZl93ZWJraXRfb3V0cHV0ID0gW3BlcmZfd2Via2l0X291dHB1
dF0KIAogICAgICAgICByZXN1bHRzX3BhZ2VfcGF0aCA9IHNlbGYuX2hvc3QuZmlsZXN5c3RlbS5z
cGxpdGV4dChvdXRwdXRfanNvbl9wYXRoKVswXSArICcuaHRtbCcKLSAgICAgICAgc2VsZi5fZ2Vu
ZXJhdGVfb3V0cHV0X2ZpbGVzKG91dHB1dF9qc29uX3BhdGgsIHJlc3VsdHNfcGFnZV9wYXRoLCBv
dXRwdXQpCisgICAgICAgIHBlcmZfd2Via2l0X2pzb25fcGF0aCA9IHNlbGYuX2hvc3QuZmlsZXN5
c3RlbS5zcGxpdGV4dChvdXRwdXRfanNvbl9wYXRoKVswXSArICctcGVyZi13ZWJraXQuanNvbicg
aWYgb3B0aW9ucy50ZXN0X3Jlc3VsdHNfc2VydmVyIGVsc2UgTm9uZQorICAgICAgICBzZWxmLl9n
ZW5lcmF0ZV9vdXRwdXRfZmlsZXMob3V0cHV0X2pzb25fcGF0aCwgcGVyZl93ZWJraXRfanNvbl9w
YXRoLCByZXN1bHRzX3BhZ2VfcGF0aCwgb3V0cHV0LCBwZXJmX3dlYmtpdF9vdXRwdXQpCiAKICAg
ICAgICAgaWYgb3B0aW9ucy50ZXN0X3Jlc3VsdHNfc2VydmVyOgogICAgICAgICAgICAgaWYgbm90
IHNlbGYuX3VwbG9hZF9qc29uKG9wdGlvbnMudGVzdF9yZXN1bHRzX3NlcnZlciwgb3V0cHV0X2pz
b25fcGF0aCk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuRVhJVF9DT0RFX0ZBSUxFRF9V
UExPQURJTkcKIAorICAgICAgICAgICAgIyBGSVhNRTogUmVtb3ZlIHRoaXMgY29kZSBvbmNlIHdl
J3ZlIG1hZGUgdHJhbnNpdGlvbiB0byB1c2UgcGVyZi53ZWJraXQub3JnCisgICAgICAgICAgICBp
ZiBub3Qgc2VsZi5fdXBsb2FkX2pzb24oJ3BlcmYud2Via2l0Lm9yZycsIHBlcmZfd2Via2l0X2pz
b25fcGF0aCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuRVhJVF9DT0RFX0ZBSUxFRF9V
UExPQURJTkcKKwogICAgICAgICBpZiBvcHRpb25zLnNob3dfcmVzdWx0czoKICAgICAgICAgICAg
IHNlbGYuX3BvcnQuc2hvd19yZXN1bHRzX2h0bWxfZmlsZShyZXN1bHRzX3BhZ2VfcGF0aCkKIApA
QCAtMjMzLDkgKzI0MSwxNCBAQCBjbGFzcyBQZXJmVGVzdHNSdW5uZXIob2JqZWN0KToKICAgICAg
ICAgY29udGVudHMgPSB7J3Jlc3VsdHMnOiBzZWxmLl9yZXN1bHRzfQogICAgICAgICBpZiBkZXNj
cmlwdGlvbjoKICAgICAgICAgICAgIGNvbnRlbnRzWydkZXNjcmlwdGlvbiddID0gZGVzY3JpcHRp
b24KKworICAgICAgICByZXZpc2lvbnNfZm9yX3BlcmZfd2Via2l0ID0ge30KICAgICAgICAgZm9y
IChuYW1lLCBwYXRoKSBpbiBzZWxmLl9wb3J0LnJlcG9zaXRvcnlfcGF0aHMoKToKICAgICAgICAg
ICAgIHNjbSA9IFNDTURldGVjdG9yKHNlbGYuX2hvc3QuZmlsZXN5c3RlbSwgc2VsZi5faG9zdC5l
eGVjdXRpdmUpLmRldGVjdF9zY21fc3lzdGVtKHBhdGgpIG9yIHNlbGYuX2hvc3Quc2NtKCkKLSAg
ICAgICAgICAgIGNvbnRlbnRzW25hbWUgKyAnLXJldmlzaW9uJ10gPSBzY20uc3ZuX3JldmlzaW9u
KHBhdGgpCisgICAgICAgICAgICByZXZpc2lvbiA9IHNjbS5zdm5fcmV2aXNpb24ocGF0aCkKKyAg
ICAgICAgICAgIGNvbnRlbnRzW25hbWUubG93ZXIoKSArICctcmV2aXNpb24nXSA9IHJldmlzaW9u
CisgICAgICAgICAgICAjIEZJWE1FOiBPYnRhaW4gdGltZXN0YW1wCisgICAgICAgICAgICByZXZp
c2lvbnNfZm9yX3BlcmZfd2Via2l0W25hbWVdID0geydyZXZpc2lvbic6IHN0cihyZXZpc2lvbil9
CiAKICAgICAgICAgIyBGSVhNRTogQWRkIC0tYnJhbmNoIG9yIGF1dG8tZGV0ZWN0IHRoZSBicmFu
Y2ggd2UncmUgaW4KICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4geyd0aW1lc3RhbXAnOiBpbnQo
dGltZXN0YW1wKSwgJ2JyYW5jaCc6IHNlbGYuX2RlZmF1bHRfYnJhbmNoLCAncGxhdGZvcm0nOiBw
bGF0Zm9ybSwKQEAgLTI0MywyMCArMjU2LDY2IEBAIGNsYXNzIFBlcmZUZXN0c1J1bm5lcihvYmpl
Y3QpOgogICAgICAgICAgICAgaWYgdmFsdWU6CiAgICAgICAgICAgICAgICAgY29udGVudHNba2V5
XSA9IHZhbHVlCiAKLSAgICAgICAgcmV0dXJuIGNvbnRlbnRzCisgICAgICAgIGNvbnRlbnRzX2Zv
cl9wZXJmX3dlYmtpdCA9IHsKKyAgICAgICAgICAgICdidWlsZGVyTmFtZSc6IGJ1aWxkZXJfbmFt
ZSwKKyAgICAgICAgICAgICdidWlsZE51bWJlcic6IHN0cihidWlsZF9udW1iZXIpLAorICAgICAg
ICAgICAgJ2J1aWxkVGltZSc6IHNlbGYuX2RhdGV0aW1lX2luX0VTNV9jb21wYXRpYmxlX2lzb19m
b3JtYXQoc2VsZi5fdXRjX3RpbWVzdGFtcCksCisgICAgICAgICAgICAncGxhdGZvcm0nOiBwbGF0
Zm9ybSwKKyAgICAgICAgICAgICdyZXZpc2lvbnMnOiByZXZpc2lvbnNfZm9yX3BlcmZfd2Via2l0
LAorICAgICAgICAgICAgJ3Rlc3RzJzoge319CisKKyAgICAgICAgZm9yIG1ldHJpY19mdWxsX25h
bWUgaW4gc2VsZi5fcmVzdWx0czoKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuX3Jlc3VsdHNb
bWV0cmljX2Z1bGxfbmFtZV0KIAotICAgIGRlZiBfbWVyZ2Vfc2xhdmVfY29uZmlnX2pzb24oc2Vs
Ziwgc2xhdmVfY29uZmlnX2pzb25fcGF0aCwgb3V0cHV0KToKKyAgICAgICAgICAgICMgV2UgY2Fu
J3QgcmVwcm90IHJlc3VsdHMgd2l0aG91dCBpbmRpdmlzdWFsIG1lYXN1cmVtZW50cy4KKyAgICAg
ICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHJlc3VsdCwgZGljdCk6CisgICAgICAgICAgICAgICAg
Y29udGludWUKKworICAgICAgICAgICAgYXNzZXJ0IG1ldHJpY19mdWxsX25hbWUuY291bnQoJzon
KSA8PSAxCisgICAgICAgICAgICB0ZXN0X2Z1bGxfbmFtZSwgXywgbWV0cmljID0gbWV0cmljX2Z1
bGxfbmFtZS5wYXJ0aXRpb24oJzonKQorICAgICAgICAgICAgaWYgbm90IG1ldHJpYzoKKyAgICAg
ICAgICAgICAgICBtZXRyaWMgPSB7J2Zwcyc6ICdGcmFtZVJhdGUnLCAncnVucy9zJzogJ1J1bnMn
LCAnbXMnOiAnVGltZSd9W3Jlc3VsdFsndW5pdCddXQorCisgICAgICAgICAgICB0ZXN0cyA9IGNv
bnRlbnRzX2Zvcl9wZXJmX3dlYmtpdFsndGVzdHMnXQorICAgICAgICAgICAgcGF0aCA9IHRlc3Rf
ZnVsbF9uYW1lLnNwbGl0KCcvJykKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihw
YXRoKSk6CisgICAgICAgICAgICAgICAgIyBGSVhNRTogV2Ugc2hvdWxkbid0IGFzc3VtZSBIVE1M
IGV4dGVuc2lvbi4KKyAgICAgICAgICAgICAgICBpc19sYXN0X3Rva2VuID0gaSArIDEgPT0gbGVu
KHBhdGgpCisgICAgICAgICAgICAgICAgdXJsID0gJ2h0dHA6Ly90cmFjLndlYmtpdC5vcmcvYnJv
d3Nlci90cnVuay9QZXJmb3JtYW5jZVRlc3RzLycgKyAnLycuam9pbihwYXRoWzA6aSArIDFdKQor
ICAgICAgICAgICAgICAgIGlmIGlzX2xhc3RfdG9rZW46CisgICAgICAgICAgICAgICAgICAgIHVy
bCArPSAnLmh0bWwnCisKKyAgICAgICAgICAgICAgICB0ZXN0cy5zZXRkZWZhdWx0KHBhdGhbaV0s
IHsndXJsJzogdXJsfSkKKyAgICAgICAgICAgICAgICBjdXJyZW50X3Rlc3QgPSB0ZXN0c1twYXRo
W2ldXQorICAgICAgICAgICAgICAgIGlmIGlzX2xhc3RfdG9rZW46CisgICAgICAgICAgICAgICAg
ICAgIGN1cnJlbnRfdGVzdC5zZXRkZWZhdWx0KCdtZXRyaWNzJywge30pCisgICAgICAgICAgICAg
ICAgICAgIGFzc2VydCBtZXRyaWMgbm90IGluIGN1cnJlbnRfdGVzdFsnbWV0cmljcyddCisgICAg
ICAgICAgICAgICAgICAgIGN1cnJlbnRfdGVzdFsnbWV0cmljcyddW21ldHJpY10gPSB7J2N1cnJl
bnQnOiByZXN1bHRbJ3ZhbHVlcyddfQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICAgICAgICAgIGN1cnJlbnRfdGVzdC5zZXRkZWZhdWx0KCd0ZXN0cycsIHt9KQorICAgICAgICAg
ICAgICAgICAgICB0ZXN0cyA9IGN1cnJlbnRfdGVzdFsndGVzdHMnXQorCisgICAgICAgIHJldHVy
biBjb250ZW50cywgY29udGVudHNfZm9yX3BlcmZfd2Via2l0CisKKyAgICBAc3RhdGljbWV0aG9k
CisgICAgZGVmIF9kYXRldGltZV9pbl9FUzVfY29tcGF0aWJsZV9pc29fZm9ybWF0KGRhdGV0aW1l
KToKKyAgICAgICAgcmV0dXJuIGRhdGV0aW1lLnN0cmZ0aW1lKCclWS0lbS0lZFQlSDolTTolUy4l
ZicpCisKKyAgICBkZWYgX21lcmdlX3NsYXZlX2NvbmZpZ19qc29uKHNlbGYsIHNsYXZlX2NvbmZp
Z19qc29uX3BhdGgsIGNvbnRlbnRzLCBjb250ZW50c19mb3JfcGVyZl93ZWJraXQpOgogICAgICAg
ICBpZiBub3Qgc2VsZi5faG9zdC5maWxlc3lzdGVtLmlzZmlsZShzbGF2ZV9jb25maWdfanNvbl9w
YXRoKToKICAgICAgICAgICAgIF9sb2cuZXJyb3IoIk1pc3Npbmcgc2xhdmUgY29uZmlndXJhdGlv
biBKU09OIGZpbGU6ICVzIiAlIHNsYXZlX2NvbmZpZ19qc29uX3BhdGgpCi0gICAgICAgICAgICBy
ZXR1cm4gTm9uZQorICAgICAgICAgICAgcmV0dXJuIE5vbmUsIE5vbmUKIAogICAgICAgICB0cnk6
CiAgICAgICAgICAgICBzbGF2ZV9jb25maWdfanNvbiA9IHNlbGYuX2hvc3QuZmlsZXN5c3RlbS5v
cGVuX3RleHRfZmlsZV9mb3JfcmVhZGluZyhzbGF2ZV9jb25maWdfanNvbl9wYXRoKQogICAgICAg
ICAgICAgc2xhdmVfY29uZmlnID0ganNvbi5sb2FkKHNsYXZlX2NvbmZpZ19qc29uKQotICAgICAg
ICAgICAgcmV0dXJuIGRpY3Qoc2xhdmVfY29uZmlnLml0ZW1zKCkgKyBvdXRwdXQuaXRlbXMoKSkK
KyAgICAgICAgICAgIGNvbnRlbnRzID0gZGljdChzbGF2ZV9jb25maWcuaXRlbXMoKSArIGNvbnRl
bnRzLml0ZW1zKCkpCisgICAgICAgICAgICBmb3Iga2V5IGluIHNsYXZlX2NvbmZpZzoKKyAgICAg
ICAgICAgICAgICBjb250ZW50c19mb3JfcGVyZl93ZWJraXRbJ2J1aWxkZXInICsga2V5LmNhcGl0
YWxpemUoKV0gPSBzbGF2ZV9jb25maWdba2V5XQorICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnRz
LCBjb250ZW50c19mb3JfcGVyZl93ZWJraXQKICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZXJy
b3I6CiAgICAgICAgICAgICBfbG9nLmVycm9yKCJGYWlsZWQgdG8gbWVyZ2Ugc2xhdmUgY29uZmln
dXJhdGlvbiBKU09OIGZpbGUgJXM6ICVzIiAlIChzbGF2ZV9jb25maWdfanNvbl9wYXRoLCBlcnJv
cikpCi0gICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHJldHVybiBOb25lLCBOb25lCiAKICAg
ICBkZWYgX21lcmdlX291dHB1dHNfaWZfbmVlZGVkKHNlbGYsIG91dHB1dF9qc29uX3BhdGgsIG91
dHB1dCk6CiAgICAgICAgIGlmIHNlbGYuX29wdGlvbnMucmVzZXRfcmVzdWx0cyBvciBub3Qgc2Vs
Zi5faG9zdC5maWxlc3lzdGVtLmlzZmlsZShvdXRwdXRfanNvbl9wYXRoKToKQEAgLTI2OCwxMiAr
MzI3LDE1IEBAIGNsYXNzIFBlcmZUZXN0c1J1bm5lcihvYmplY3QpOgogICAgICAgICAgICAgX2xv
Zy5lcnJvcigiRmFpbGVkIHRvIG1lcmdlIG91dHB1dCBKU09OIGZpbGUgJXM6ICVzIiAlIChvdXRw
dXRfanNvbl9wYXRoLCBlcnJvcikpCiAgICAgICAgIHJldHVybiBOb25lCiAKLSAgICBkZWYgX2dl
bmVyYXRlX291dHB1dF9maWxlcyhzZWxmLCBvdXRwdXRfanNvbl9wYXRoLCByZXN1bHRzX3BhZ2Vf
cGF0aCwgb3V0cHV0KToKKyAgICBkZWYgX2dlbmVyYXRlX291dHB1dF9maWxlcyhzZWxmLCBvdXRw
dXRfanNvbl9wYXRoLCBwZXJmX3dlYmtpdF9qc29uX3BhdGgsIHJlc3VsdHNfcGFnZV9wYXRoLCBv
dXRwdXQsIHBlcmZfd2Via2l0X291dHB1dCk6CiAgICAgICAgIGZpbGVzeXN0ZW0gPSBzZWxmLl9o
b3N0LmZpbGVzeXN0ZW0KIAogICAgICAgICBqc29uX291dHB1dCA9IGpzb24uZHVtcHMob3V0cHV0
KQogICAgICAgICBmaWxlc3lzdGVtLndyaXRlX3RleHRfZmlsZShvdXRwdXRfanNvbl9wYXRoLCBq
c29uX291dHB1dCkKIAorICAgICAgICBpZiBwZXJmX3dlYmtpdF9qc29uX3BhdGg6CisgICAgICAg
ICAgICBmaWxlc3lzdGVtLndyaXRlX3RleHRfZmlsZShwZXJmX3dlYmtpdF9qc29uX3BhdGgsIGpz
b24uZHVtcHMocGVyZl93ZWJraXRfb3V0cHV0KSkKKwogICAgICAgICBpZiByZXN1bHRzX3BhZ2Vf
cGF0aDoKICAgICAgICAgICAgIHRlbXBsYXRlX3BhdGggPSBmaWxlc3lzdGVtLmpvaW4oc2VsZi5f
cG9ydC5wZXJmX3Rlc3RzX2RpcigpLCAncmVzb3VyY2VzL3Jlc3VsdHMtdGVtcGxhdGUuaHRtbCcp
CiAgICAgICAgICAgICB0ZW1wbGF0ZSA9IGZpbGVzeXN0ZW0ucmVhZF90ZXh0X2ZpbGUodGVtcGxh
dGVfcGF0aCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMv
cGVyZnRlc3RzcnVubmVyX2ludGVncmF0aW9udGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0c3J1bm5lcl9pbnRlZ3Jh
dGlvbnRlc3QucHkJKHJldmlzaW9uIDE0MTUxOSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
cGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3RzcnVubmVyX2ludGVncmF0aW9udGVzdC5weQkod29y
a2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogIiIiSW50ZWdyYXRpb24gdGVzdHMgZm9yIHJ1
bl9wZXJmX3Rlc3RzLiIiIgogCiBpbXBvcnQgU3RyaW5nSU8KK2ltcG9ydCBkYXRldGltZQogaW1w
b3J0IGpzb24KIGltcG9ydCByZQogaW1wb3J0IHVuaXR0ZXN0MiBhcyB1bml0dGVzdApAQCAtMzIy
LDEzICszMjMsMTUgQEAgY2xhc3MgTWFpblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAg
ICB1cGxvYWRlZCA9IFtGYWxzZV0KIAogICAgICAgICBkZWYgbW9ja191cGxvYWRfanNvbihob3N0
bmFtZSwganNvbl9wYXRoKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9zdG5hbWUs
ICdzb21lLmhvc3QnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqc29uX3BhdGgsICcv
bW9jay1jaGVja291dC9vdXRwdXQuanNvbicpCisgICAgICAgICAgICAjIEZJWE1FOiBHZXQgcmlk
IG9mIHRoZSBoYXJkLWNvZGVkIHBlcmYud2Via2l0Lm9yZyBvbmNlIHdlJ3ZlIGNvbXBsZXRlZCB0
aGUgdHJhbnNpdGlvbi4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oaG9zdG5hbWUsIFsnc29t
ZS5ob3N0JywgJ3BlcmYud2Via2l0Lm9yZyddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihq
c29uX3BhdGgsIFsnL21vY2stY2hlY2tvdXQvb3V0cHV0Lmpzb24nLCAnL21vY2stY2hlY2tvdXQv
b3V0cHV0LXBlcmYtd2Via2l0Lmpzb24nXSkKICAgICAgICAgICAgIHVwbG9hZGVkWzBdID0gdXBs
b2FkX3N1Y2VlZHMKICAgICAgICAgICAgIHJldHVybiB1cGxvYWRfc3VjZWVkcwogCiAgICAgICAg
IHJ1bm5lci5fdXBsb2FkX2pzb24gPSBtb2NrX3VwbG9hZF9qc29uCiAgICAgICAgIHJ1bm5lci5f
dGltZXN0YW1wID0gMTIzNDU2Nzg5CisgICAgICAgIHJ1bm5lci5fdXRjX3RpbWVzdGFtcCA9IGRh
dGV0aW1lLmRhdGV0aW1lKDIwMTMsIDIsIDgsIDE1LCAxOSwgMzcsIDQ2MDAwMCkKICAgICAgICAg
b3V0cHV0X2NhcHR1cmUgPSBPdXRwdXRDYXB0dXJlKCkKICAgICAgICAgb3V0cHV0X2NhcHR1cmUu
Y2FwdHVyZV9vdXRwdXQoKQogICAgICAgICB0cnk6CkBAIC01MjEsNiArNTI0LDMzIEBAIGNsYXNz
IE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgICAgICBzZWxmLl90ZXN0X3J1bl93
aXRoX2pzb25fb3V0cHV0KHJ1bm5lciwgcG9ydC5ob3N0LmZpbGVzeXN0ZW0sIHVwbG9hZF9zdWNl
ZWRzPUZhbHNlLCBleHBlY3RlZF9leGl0X2NvZGU9UGVyZlRlc3RzUnVubmVyLkVYSVRfQ09ERV9G
QUlMRURfVVBMT0FESU5HKQogCisgICAgZGVmIHRlc3RfcnVuX3dpdGhfdXBsb2FkX2pzb25fc2hv
dWxkX2dlbmVyYXRlX3BlcmZfd2Via2l0X2pzb24oc2VsZik6CisgICAgICAgIHJ1bm5lciwgcG9y
dCA9IHNlbGYuY3JlYXRlX3J1bm5lcl9hbmRfc2V0dXBfcmVzdWx0c190ZW1wbGF0ZShhcmdzPVsn
LS1vdXRwdXQtanNvbi1wYXRoPS9tb2NrLWNoZWNrb3V0L291dHB1dC5qc29uJywKKyAgICAgICAg
ICAgICctLXRlc3QtcmVzdWx0cy1zZXJ2ZXInLCAnc29tZS5ob3N0JywgJy0tcGxhdGZvcm0nLCAn
cGxhdGZvcm0xJywgJy0tYnVpbGRlci1uYW1lJywgJ2J1aWxkZXIxJywgJy0tYnVpbGQtbnVtYmVy
JywgJzEyMycsCisgICAgICAgICAgICAnLS1zbGF2ZS1jb25maWctanNvbi1wYXRoPS9tb2NrLWNo
ZWNrb3V0L3NsYXZlLWNvbmZpZy5qc29uJ10pCisgICAgICAgIHBvcnQuaG9zdC5maWxlc3lzdGVt
LndyaXRlX3RleHRfZmlsZSgnL21vY2stY2hlY2tvdXQvc2xhdmUtY29uZmlnLmpzb24nLCAneyJr
ZXkiOiAidmFsdWUxIn0nKQorCisgICAgICAgIHNlbGYuX3Rlc3RfcnVuX3dpdGhfanNvbl9vdXRw
dXQocnVubmVyLCBwb3J0Lmhvc3QuZmlsZXN5c3RlbSwgdXBsb2FkX3N1Y2VlZHM9VHJ1ZSkKKyAg
ICAgICAgZ2VuZXJhdGVkX2pzb24gPSBqc29uLmxvYWRzKHBvcnQuaG9zdC5maWxlc3lzdGVtLmZp
bGVzWycvbW9jay1jaGVja291dC9vdXRwdXQtcGVyZi13ZWJraXQuanNvbiddKQorICAgICAgICBz
ZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShnZW5lcmF0ZWRfanNvbiwgbGlzdCkpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwobGVuKGdlbmVyYXRlZF9qc29uKSwgMSkKKworICAgICAgICBvdXRw
dXQgPSBnZW5lcmF0ZWRfanNvblswXQorICAgICAgICBzZWxmLm1heERpZmYgPSBOb25lCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0WydwbGF0Zm9ybSddLCAncGxhdGZvcm0xJykKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXRbJ2J1aWxkTnVtYmVyJ10sICcxMjMnKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dFsnYnVpbGRUaW1lJ10sICcyMDEzLTAyLTA4VDE1
OjE5OjM3LjQ2MDAwMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0WydidWlsZGVy
TmFtZSddLCAnYnVpbGRlcjEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dFsnYnVp
bGRlcktleSddLCAndmFsdWUxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXRbJ3Jl
dmlzaW9ucyddLCB7J1dlYktpdCc6IHsncmV2aXNpb24nOiAnNTY3OCd9fSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChvdXRwdXRbJ3Rlc3RzJ10ua2V5cygpLCBbJ0JpbmRpbmdzJ10pCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKG91dHB1dFsndGVzdHMnXVsnQmluZGluZ3MnXS5r
ZXlzKCkpLCBbJ3Rlc3RzJywgJ3VybCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1
dFsndGVzdHMnXVsnQmluZGluZ3MnXVsndXJsJ10sICdodHRwOi8vdHJhYy53ZWJraXQub3JnL2Jy
b3dzZXIvdHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9CaW5kaW5ncycpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwob3V0cHV0Wyd0ZXN0cyddWydCaW5kaW5ncyddWyd0ZXN0cyddLmtleXMoKSwgWydl
dmVudC10YXJnZXQtd3JhcHBlciddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dFsn
dGVzdHMnXVsnQmluZGluZ3MnXVsndGVzdHMnXVsnZXZlbnQtdGFyZ2V0LXdyYXBwZXInXSwgewor
ICAgICAgICAgICAgJ3VybCc6ICdodHRwOi8vdHJhYy53ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsv
UGVyZm9ybWFuY2VUZXN0cy9CaW5kaW5ncy9ldmVudC10YXJnZXQtd3JhcHBlci5odG1sJywKKyAg
ICAgICAgICAgICdtZXRyaWNzJzogeydUaW1lJzogeydjdXJyZW50JzogWzE0ODYuMCwgMTQ3MS4w
LCAxNTEwLjAsIDE1MDUuMCwgMTQ3OC4wLCAxNDkwLjBdfX19KQorCiAgICAgZGVmIHRlc3RfdXBs
b2FkX2pzb24oc2VsZik6CiAgICAgICAgIHJ1bm5lciwgcG9ydCA9IHNlbGYuY3JlYXRlX3J1bm5l
cigpCiAgICAgICAgIHBvcnQuaG9zdC5maWxlc3lzdGVtLmZpbGVzWycvbW9jay1jaGVja291dC9z
b21lLmpzb24nXSA9ICdzb21lIGNvbnRlbnQnCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0c3J1bm5lcl91bml0dGVzdC5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0c3J1
bm5lcl91bml0dGVzdC5weQkocmV2aXNpb24gMTQxNTE5KQorKysgVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdHNydW5uZXJfdW5pdHRlc3QucHkJKHdvcmtp
bmcgY29weSkKQEAgLTE0NywzICsxNDcsNiBAQCBjbGFzcyBNYWluVGVzdCh1bml0dGVzdC5UZXN0
Q2FzZSk6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0aW9ucy5vdXRwdXRfanNvbl9wYXRo
LCAnYS9vdXRwdXQuanNvbicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0aW9ucy5zbGF2
ZV9jb25maWdfanNvbl9wYXRoLCAnYS9zb3VyY2UuanNvbicpCiAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwob3B0aW9ucy50ZXN0X3Jlc3VsdHNfc2VydmVyLCAnc29tZWhvc3QnKQorCisgICAgZGVm
IHRlc3RfZ2VuZXJhdGVfcGVyZl93ZWJraXRfb3V0cHV0KHNlbGYpOgorICAgICAgICBwYXNzCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186127</attachid>
            <date>2013-02-01 13:46:19 -0800</date>
            <delta_ts>2013-02-08 10:39:36 -0800</delta_ts>
            <desc>Work in progress 2</desc>
            <filename>bug-108577-20130201134301.patch</filename>
            <type>text/plain</type>
            <size>21054</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxNjM3CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggM2U2NDVhNjdlMTNhZmIxMzlmNzdhY2Q2NjhkNzQxY2Iy
ZmZjMTY3YS4uODFmY2MxM2E3NzFlM2EwMTYyN2VhYzMzNjI3OGVhMzRjNjk5ZTNkZSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQx
IEBACisyMDEzLTAyLTAxICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAg
ICAgIFVwbG9hZCByZXN1bHRzIHRvIHBlcmYud2Via2l0Lm9yZyBpbiBhZGRpdGlvbiB0byB0aGUg
b25lIHNwZWNpZmllZCBieSAtLXRlc3QtcmVzdWx0cy1zZXJ2ZXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODU3NworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24v
Y2hlY2tvdXQvc2NtL2dpdC5weToKKyAgICAgICAgKEdpdC5zdm5fdGltZXN0YW1wKToKKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc2NtLnB5OgorICAgICAg
ICAoU0NNLnN2bl90aW1lc3RhbXApOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9u
L2NoZWNrb3V0L3NjbS9zY21fbW9jay5weToKKyAgICAgICAgKE1vY2tTQ00uc3ZuX3RpbWVzdGFt
cCk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3N2bi5w
eToKKyAgICAgICAgKFNWTi5zdm5fdGltZXN0YW1wKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5
OgorICAgICAgICAoSlNPTlJlc3VsdHNHZW5lcmF0b3JCYXNlLl9pbnNlcnRfZ2VuZXJpY19tZXRh
ZGF0YSk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNl
LnB5OgorICAgICAgICAoUG9ydC5yZXBvc2l0b3J5X3BhdGhzKToKKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtLnB5OgorICAgICAgICAoQ2hyb21p
dW1Qb3J0LnJlcG9zaXRvcnlfcGF0aHMpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcGVy
Zm9ybWFuY2VfdGVzdHMvcGVyZnRlc3RzcnVubmVyLnB5OgorICAgICAgICAoUGVyZlRlc3RzUnVu
bmVyLl9faW5pdF9fKToKKyAgICAgICAgKFBlcmZUZXN0c1J1bm5lci5fZ2VuZXJhdGVfYW5kX3No
b3dfcmVzdWx0cyk6CisgICAgICAgIChQZXJmVGVzdHNSdW5uZXIuX2dlbmVyYXRlX3Jlc3VsdHNf
ZGljdCk6CisgICAgICAgIChQZXJmVGVzdHNSdW5uZXIpOgorICAgICAgICAoUGVyZlRlc3RzUnVu
bmVyLl9kYXRldGltZV9pbl9FUzVfY29tcGF0aWJsZV9pc29fZm9ybWF0KToKKyAgICAgICAgKFBl
cmZUZXN0c1J1bm5lci5fbWVyZ2Vfc2xhdmVfY29uZmlnX2pzb24pOgorICAgICAgICAoUGVyZlRl
c3RzUnVubmVyLl9nZW5lcmF0ZV9vdXRwdXRfZmlsZXMpOgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3RzcnVubmVyX2ludGVncmF0aW9udGVzdC5w
eToKKyAgICAgICAgKE1haW5UZXN0Ll90ZXN0X3J1bl93aXRoX2pzb25fb3V0cHV0Lm1vY2tfdXBs
b2FkX2pzb24pOgorICAgICAgICAoTWFpblRlc3QuX3Rlc3RfcnVuX3dpdGhfanNvbl9vdXRwdXQp
OgorICAgICAgICAoTWFpblRlc3QudGVzdF9ydW5fd2l0aF91cGxvYWRfanNvbl9zaG91bGRfZ2Vu
ZXJhdGVfcGVyZl93ZWJraXRfanNvbik6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wZXJm
b3JtYW5jZV90ZXN0cy9wZXJmdGVzdHNydW5uZXJfdW5pdHRlc3QucHk6CisgICAgICAgIChNYWlu
VGVzdC50ZXN0X3BhcnNlX2FyZ3MpOgorICAgICAgICAoTWFpblRlc3QpOgorICAgICAgICAoTWFp
blRlc3QudGVzdF9nZW5lcmF0ZV9wZXJmX3dlYmtpdF9vdXRwdXQpOgorCiAyMDEzLTAyLTAxICBS
b2dlciBGb25nICA8cm9nZXJfZm9uZ0BhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4g
UmUtdHJ5IGVuYWJsaW5nIFdpbi1FV1MgdGVzdHMgZm9yIHRoZSB0aGlyZCB0aW1lLiAKZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9naXQucHkg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vZ2l0LnB5CmluZGV4
IGZkMzU5N2Y0Y2NhZGM3MDNhMmVjNDA2YWE4ZTg2MDdjNWU5MTE5YjQuLmRlYmMxODMxMThkYWRl
NjJjMjQ5MTY3OTU1ZmM0NWEyYzRlZmYzMmIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9naXQucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vY2hlY2tvdXQvc2NtL2dpdC5weQpAQCAtMjUzLDYgKzI1MywxNCBAQCBjbGFz
cyBHaXQoU0NNLCBTVk5SZXBvc2l0b3J5KToKICAgICAgICAgICAgIHJldHVybiAiIgogICAgICAg
ICByZXR1cm4gc3RyKG1hdGNoLmdyb3VwKCdzdm5fcmV2aXNpb24nKSkKIAorICAgIGRlZiBzdm5f
dGltZXN0YW1wKHNlbGYsIHBhdGgpOgorICAgICAgICAjIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIGFs
c28gbmVlZHMgdG8gYmUgZml4ZWQgcGVyIGJ1ZyAxMDg1NzcuCisgICAgICAgIGdpdF9sb2cgPSBz
ZWxmLl9ydW5fZ2l0KFsnbG9nJywgJy0xJywgJy0tZGF0ZT1pc28nLCBwYXRoXSkKKyAgICAgICAg
bWF0Y2ggPSByZS5zZWFyY2goIl5ccypEYXRlOlxzKig/UDxkYXRlPlteXG5ccl0rKVxuIiwgZ2l0
X2xvZywgcmUuTVVMVElMSU5FKQorICAgICAgICBpZiBub3QgbWF0Y2g6CisgICAgICAgICAgICBy
ZXR1cm4gIiIKKyAgICAgICAgcmV0dXJuIHN0cihtYXRjaC5ncm91cCgnZGF0ZScpKQorCiAgICAg
ZGVmIHByZXBlbmRfc3ZuX3JldmlzaW9uKHNlbGYsIGRpZmYpOgogICAgICAgICByZXZpc2lvbiA9
IHNlbGYuaGVhZF9zdm5fcmV2aXNpb24oKQogICAgICAgICBpZiBub3QgcmV2aXNpb246CmRpZmYg
LS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc2NtLnB5
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3NjbS5weQppbmRl
eCA5ZGE0ZDNmNzNmNDFjY2E0YTYwZTgwY2VjNWViNjg2MmQ1YjBiMzEzLi5hNGFlZDUxN2E4OTRi
OWQ5YTA5NTQyN2ViNzQwZGJmYjJmYWI5Zjc3IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc2NtLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zY20ucHkKQEAgLTE2OSw2ICsxNjksOSBAQCBjbGFz
cyBTQ006CiAgICAgZGVmIHN2bl9yZXZpc2lvbihzZWxmLCBwYXRoKToKICAgICAgICAgc2VsZi5f
c3ViY2xhc3NfbXVzdF9pbXBsZW1lbnQoKQogCisgICAgZGVmIHN2bl90aW1lc3RhbXAoc2VsZiwg
cGF0aCk6CisgICAgICAgIHNlbGYuX3N1YmNsYXNzX211c3RfaW1wbGVtZW50KCkKKwogICAgIGRl
ZiBjcmVhdGVfcGF0Y2goc2VsZiwgZ2l0X2NvbW1pdD1Ob25lLCBjaGFuZ2VkX2ZpbGVzPU5vbmUp
OgogICAgICAgICBzZWxmLl9zdWJjbGFzc19tdXN0X2ltcGxlbWVudCgpCiAKZGlmZiAtLWdpdCBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zY21fbW9jay5weSBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zY21fbW9jay5weQpp
bmRleCAyNDE0NTYyNWFkZTU0NzkwYTZhYzRjNDNiN2E4ZTQwYjViZTIwOWI1Li4wNTczMDNmOWIz
ZjEzY2QyMTdhZTQyZDQwODZhM2MxOWRhNTc0YWIwIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc2NtX21vY2sucHkKKysrIGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3NjbV9tb2NrLnB5CkBAIC04NCw2ICs4
NCw5IEBAIGNsYXNzIE1vY2tTQ00ob2JqZWN0KToKICAgICBkZWYgc3ZuX3JldmlzaW9uKHNlbGYs
IHBhdGgpOgogICAgICAgICByZXR1cm4gJzU2NzgnCiAKKyAgICBkZWYgc3ZuX3RpbWVzdGFtcChz
ZWxmLCBwYXRoKToKKyAgICAgICAgcmV0dXJuICcyMDEzLTAyLTAxIDA4OjQ4OjA1ICswMDAwJwor
CiAgICAgZGVmIGNyZWF0ZV9wYXRjaChzZWxmLCBnaXRfY29tbWl0LCBjaGFuZ2VkX2ZpbGVzPU5v
bmUpOgogICAgICAgICByZXR1cm4gIlBhdGNoMSIKIApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3N2bi5weSBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zdm4ucHkKaW5kZXggZDJiMGYzNjY3ZmQ3MmJhY2Ri
ZjQ3NDZmMWVkOGQ1NGE2MzRkMTE1OC4uYjhhMDUwNjdlYzY3ZmJhNzMxNDVhYTJhYWZiYjI4MzU1
OGQ4MjJiZiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tv
dXQvc2NtL3N2bi5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291
dC9zY20vc3ZuLnB5CkBAIC0yNDYsNiArMjQ2LDEwIEBAIGNsYXNzIFNWTihTQ00sIFNWTlJlcG9z
aXRvcnkpOgogICAgIGRlZiBzdm5fcmV2aXNpb24oc2VsZiwgcGF0aCk6CiAgICAgICAgIHJldHVy
biBzZWxmLnZhbHVlX2Zyb21fc3ZuX2luZm8ocGF0aCwgJ1JldmlzaW9uJykKIAorICAgIGRlZiBz
dm5fdGltZXN0YW1wKHNlbGYsIHBhdGgpOgorICAgICAgICBkYXRlX3N0cmluZyA9IHNlbGYudmFs
dWVfZnJvbV9zdm5faW5mbyhwYXRoLCAnTGFzdCBDaGFuZ2VkIERhdGUnKQorICAgICAgICByZXR1
cm4gZGF0ZV9zdHJpbmdbMDpkYXRlX3N0cmluZy5maW5kKCcoJyldCisKICAgICAjIEZJWE1FOiBU
aGlzIG1ldGhvZCBzaG91bGQgYmUgb24gQ2hlY2tvdXQuCiAgICAgZGVmIGNyZWF0ZV9wYXRjaChz
ZWxmLCBnaXRfY29tbWl0PU5vbmUsIGNoYW5nZWRfZmlsZXM9Tm9uZSk6CiAgICAgICAgICIiIlJl
dHVybnMgYSBieXRlIGFycmF5IChzdHIoKSkgcmVwcmVzZW50aW5nIHRoZSBwYXRjaCBmaWxlLgpk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3Bh
Y2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5lcmF0b3IucHkKaW5k
ZXggNzM4MzRmMGFkNjI3M2JjNjFhYWQ0Mzc3NjkxNzIwYjM2Njc3OTBlYy4uYTE4YmM5OTY5MmY3
NTU2NzM3ZjZmZjJlNWY4YTAyOTFiYmVmMzRmMiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRv
ci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFj
a2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5CkBAIC01MjYsMTEgKzUyNiwxMiBAQCBjbGFz
cyBKU09OUmVzdWx0c0dlbmVyYXRvckJhc2Uob2JqZWN0KToKICAgICAgICAgZm9yIChuYW1lLCBw
YXRoKSBpbiBzZWxmLl9zdm5fcmVwb3NpdG9yaWVzOgogICAgICAgICAgICAgIyBOb3RlOiBmb3Ig
SlNPTiBmaWxlJ3MgYmFja3dhcmQtY29tcGF0aWJpbGl0eSB3ZSB1c2UgJ2Nocm9tZScgcmF0aGVy
CiAgICAgICAgICAgICAjIHRoYW4gJ2Nocm9taXVtJyBoZXJlLgotICAgICAgICAgICAgaWYgbmFt
ZSA9PSAnY2hyb21pdW0nOgotICAgICAgICAgICAgICAgIG5hbWUgPSAnY2hyb21lJworICAgICAg
ICAgICAgbG93ZXJjYXNlX25hbWUgPSBuYW1lLmxvd2VyKCkKKyAgICAgICAgICAgIGlmIGxvd2Vy
Y2FzZV9uYW1lID09ICdjaHJvbWl1bSc6CisgICAgICAgICAgICAgICAgbG93ZXJjYXNlX25hbWUg
PSAnY2hyb21lJwogICAgICAgICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1faW50b19yYXdfbGlzdChy
ZXN1bHRzX2Zvcl9idWlsZGVyLAogICAgICAgICAgICAgICAgIHNlbGYuX2dldF9zdm5fcmV2aXNp
b24ocGF0aCksCi0gICAgICAgICAgICAgICAgbmFtZSArICdSZXZpc2lvbicpCisgICAgICAgICAg
ICAgICAgbG93ZXJjYXNlX25hbWUgKyAnUmV2aXNpb24nKQogCiAgICAgICAgIHNlbGYuX2luc2Vy
dF9pdGVtX2ludG9fcmF3X2xpc3QocmVzdWx0c19mb3JfYnVpbGRlciwKICAgICAgICAgICAgIGlu
dCh0aW1lLnRpbWUoKSksCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L2Jhc2UucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L2Jhc2UucHkKaW5kZXggMDQ1YzYwMjNiZjEwN2FlMGJlMWRjZmZhZDYyYWVmOTRlNDQ0
YjJmNi4uZWM4ZThlMmY2ODVjODMzNjkyMmJhMmEyY2FkOTBkMmFmMTQzM2VhMCAxMDA2NDQKLS0t
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CisrKyBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weQpAQCAtMTA5
MCwxMSArMTA5MCwxMSBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAKICAgICBkZWYgcmVwb3NpdG9y
eV9wYXRocyhzZWxmKToKICAgICAgICAgIiIiUmV0dXJucyBhIGxpc3Qgb2YgKHJlcG9zaXRvcnlf
bmFtZSwgcmVwb3NpdG9yeV9wYXRoKSB0dXBsZXMgb2YgaXRzIGRlcGVuZGluZyBjb2RlIGJhc2Uu
Ci0gICAgICAgIEJ5IGRlZmF1bHQgaXQgcmV0dXJucyBhIGxpc3QgdGhhdCBvbmx5IGNvbnRhaW5z
IGEgKCd3ZWJraXQnLCA8d2Via2l0UmVwb3NzaXRvcnlQYXRoPikgdHVwbGUuIiIiCisgICAgICAg
IEJ5IGRlZmF1bHQgaXQgcmV0dXJucyBhIGxpc3QgdGhhdCBvbmx5IGNvbnRhaW5zIGEgKCdXZWJL
aXQnLCA8d2Via2l0UmVwb3NzaXRvcnlQYXRoPikgdHVwbGUuIiIiCiAKLSAgICAgICAgIyBXZSB1
c2UgTGF5b3V0VGVzdCBkaXJlY3RvcnkgaGVyZSBiZWNhdXNlIHdlYmtpdF9iYXNlIGlzbid0IGEg
cGFydCB3ZWJraXQgcmVwb3NpdG9yeSBpbiBDaHJvbWl1bSBwb3J0CisgICAgICAgICMgV2UgdXNl
IExheW91dFRlc3QgZGlyZWN0b3J5IGhlcmUgYmVjYXVzZSB3ZWJraXRfYmFzZSBpc24ndCBhIHBh
cnQgb2YgV2ViS2l0IHJlcG9zaXRvcnkgaW4gQ2hyb21pdW0gcG9ydAogICAgICAgICAjIHdoZXJl
IHR1cm5rIGlzbid0IGNoZWNrZWQgb3V0IGFzIGEgd2hvbGUuCi0gICAgICAgIHJldHVybiBbKCd3
ZWJraXQnLCBzZWxmLmxheW91dF90ZXN0c19kaXIoKSldCisgICAgICAgIHJldHVybiBbKCdXZWJL
aXQnLCBzZWxmLmxheW91dF90ZXN0c19kaXIoKSldCiAKICAgICBfV0RJRkZfREVMID0gJyMjV0RJ
RkZfREVMIyMnCiAgICAgX1dESUZGX0FERCA9ICcjI1dESUZGX0FERCMjJwpkaWZmIC0tZ2l0IGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weSBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHkKaW5kZXgg
MDkwNmE3ZGQ0ODk1MjNlNWU3MzU2YjUzYTRlMDJkOGFiZTcyNGQwZi4uZGFiYThlZGYzMmM2ZGEw
ODI4ZjBjYmE5MDU2YThmNTExOWNjMTVlZSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtLnB5CkBAIC0zNjQsNyArMzY0LDcgQEAg
Y2xhc3MgQ2hyb21pdW1Qb3J0KFBvcnQpOgogCiAgICAgZGVmIHJlcG9zaXRvcnlfcGF0aHMoc2Vs
Zik6CiAgICAgICAgIHJlcG9zID0gc3VwZXIoQ2hyb21pdW1Qb3J0LCBzZWxmKS5yZXBvc2l0b3J5
X3BhdGhzKCkKLSAgICAgICAgcmVwb3MuYXBwZW5kKCgnY2hyb21pdW0nLCBzZWxmLnBhdGhfZnJv
bV9jaHJvbWl1bV9iYXNlKCdidWlsZCcpKSkKKyAgICAgICAgcmVwb3MuYXBwZW5kKCgnQ2hyb21p
dW0nLCBzZWxmLnBhdGhfZnJvbV9jaHJvbWl1bV9iYXNlKCdidWlsZCcpKSkKICAgICAgICAgcmV0
dXJuIHJlcG9zCiAKICAgICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgbmFtZSwgcGlkLCBzdGRv
dXQsIHN0ZGVyciwgbmV3ZXJfdGhhbik6CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0c3J1bm5lci5weSBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3RzcnVubmVyLnB5CmluZGV4IDhiNTI0
ZDRjZGU1MzU4ZTZlMWIzMTM2NzZlZDU2NWZmOGYxMzRmMWEuLjA3MDliMDUwNzNhNjlhMWM1Nzkz
MWEzZTRlNTMzYmJjMGUyZjYzNWIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
cGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3RzcnVubmVyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3RzcnVubmVyLnB5CkBAIC0zMyw2ICsz
Myw3IEBAIGltcG9ydCBqc29uCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG9wdHBhcnNlCiBpbXBv
cnQgdGltZQoraW1wb3J0IGRhdGV0aW1lCiAKIGZyb20gd2Via2l0cHkuY29tbW9uIGltcG9ydCBm
aW5kX2ZpbGVzCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5jaGVja291dC5zY20uZGV0ZWN0aW9uIGlt
cG9ydCBTQ01EZXRlY3RvcgpAQCAtNjcsNiArNjgsNyBAQCBjbGFzcyBQZXJmVGVzdHNSdW5uZXIo
b2JqZWN0KToKICAgICAgICAgc2VsZi5fYmFzZV9wYXRoID0gc2VsZi5fcG9ydC5wZXJmX3Rlc3Rz
X2RpcigpCiAgICAgICAgIHNlbGYuX3Jlc3VsdHMgPSB7fQogICAgICAgICBzZWxmLl90aW1lc3Rh
bXAgPSB0aW1lLnRpbWUoKQorICAgICAgICBzZWxmLl91dGNfdGltZXN0YW1wID0gZGF0ZXRpbWUu
ZGF0ZXRpbWUudXRjbm93KCkKICAgICAgICAgc2VsZi5fbmVlZHNfaHR0cCA9IE5vbmUKICAgICAg
ICAgc2VsZi5faGFzX2h0dHBfbG9jayA9IEZhbHNlCiAKQEAgLTEyNiw4ICsxMjgsNiBAQCBjbGFz
cyBQZXJmVGVzdHNSdW5uZXIob2JqZWN0KToKICAgICAgICAgcmV0dXJuIG9wdHBhcnNlLk9wdGlv
blBhcnNlcihvcHRpb25fbGlzdD0ocGVyZl9vcHRpb25fbGlzdCkpLnBhcnNlX2FyZ3MoYXJncykK
IAogICAgIGRlZiBfY29sbGVjdF90ZXN0cyhzZWxmKToKLSAgICAgICAgIiIiUmV0dXJuIHRoZSBs
aXN0IG9mIHRlc3RzIGZvdW5kLiIiIgotCiAgICAgICAgIHRlc3RfZXh0ZW5zaW9ucyA9IFsnLmh0
bWwnLCAnLnN2ZyddCiAgICAgICAgIGlmIHNlbGYuX29wdGlvbnMucmVwbGF5OgogICAgICAgICAg
ICAgdGVzdF9leHRlbnNpb25zLmFwcGVuZCgnLnJlcGxheScpCkBAIC0yMDgsMjQgKzIwOCwzMCBA
QCBjbGFzcyBQZXJmVGVzdHNSdW5uZXIob2JqZWN0KToKICAgICBkZWYgX2dlbmVyYXRlX2FuZF9z
aG93X3Jlc3VsdHMoc2VsZik6CiAgICAgICAgIG9wdGlvbnMgPSBzZWxmLl9vcHRpb25zCiAgICAg
ICAgIG91dHB1dF9qc29uX3BhdGggPSBzZWxmLl9vdXRwdXRfanNvbl9wYXRoKCkKLSAgICAgICAg
b3V0cHV0ID0gc2VsZi5fZ2VuZXJhdGVfcmVzdWx0c19kaWN0KHNlbGYuX3RpbWVzdGFtcCwgb3B0
aW9ucy5kZXNjcmlwdGlvbiwgb3B0aW9ucy5wbGF0Zm9ybSwgb3B0aW9ucy5idWlsZGVyX25hbWUs
IG9wdGlvbnMuYnVpbGRfbnVtYmVyKQorICAgICAgICBvdXRwdXQsIHBlcmZfd2Via2l0X291dHB1
dCA9IHNlbGYuX2dlbmVyYXRlX3Jlc3VsdHNfZGljdChzZWxmLl90aW1lc3RhbXAsIG9wdGlvbnMu
ZGVzY3JpcHRpb24sIG9wdGlvbnMucGxhdGZvcm0sIG9wdGlvbnMuYnVpbGRlcl9uYW1lLCBvcHRp
b25zLmJ1aWxkX251bWJlcikKIAogICAgICAgICBpZiBvcHRpb25zLnNsYXZlX2NvbmZpZ19qc29u
X3BhdGg6Ci0gICAgICAgICAgICBvdXRwdXQgPSBzZWxmLl9tZXJnZV9zbGF2ZV9jb25maWdfanNv
bihvcHRpb25zLnNsYXZlX2NvbmZpZ19qc29uX3BhdGgsIG91dHB1dCkKKyAgICAgICAgICAgIG91
dHB1dCwgcGVyZl93ZWJraXRfb3V0cHV0ID0gc2VsZi5fbWVyZ2Vfc2xhdmVfY29uZmlnX2pzb24o
b3B0aW9ucy5zbGF2ZV9jb25maWdfanNvbl9wYXRoLCBvdXRwdXQsIHBlcmZfd2Via2l0X291dHB1
dCkKICAgICAgICAgICAgIGlmIG5vdCBvdXRwdXQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHNl
bGYuRVhJVF9DT0RFX0JBRF9TT1VSQ0VfSlNPTgogCiAgICAgICAgIG91dHB1dCA9IHNlbGYuX21l
cmdlX291dHB1dHNfaWZfbmVlZGVkKG91dHB1dF9qc29uX3BhdGgsIG91dHB1dCkKICAgICAgICAg
aWYgbm90IG91dHB1dDoKICAgICAgICAgICAgIHJldHVybiBzZWxmLkVYSVRfQ09ERV9CQURfTUVS
R0UKKyAgICAgICAgcGVyZl93ZWJraXRfb3V0cHV0ID0gW3BlcmZfd2Via2l0X291dHB1dF0KIAog
ICAgICAgICByZXN1bHRzX3BhZ2VfcGF0aCA9IHNlbGYuX2hvc3QuZmlsZXN5c3RlbS5zcGxpdGV4
dChvdXRwdXRfanNvbl9wYXRoKVswXSArICcuaHRtbCcKLSAgICAgICAgc2VsZi5fZ2VuZXJhdGVf
b3V0cHV0X2ZpbGVzKG91dHB1dF9qc29uX3BhdGgsIHJlc3VsdHNfcGFnZV9wYXRoLCBvdXRwdXQp
CisgICAgICAgIHBlcmZfd2Via2l0X2pzb25fcGF0aCA9IHNlbGYuX2hvc3QuZmlsZXN5c3RlbS5z
cGxpdGV4dChvdXRwdXRfanNvbl9wYXRoKVswXSArICctcGVyZi13ZWJraXQuanNvbicgaWYgb3B0
aW9ucy50ZXN0X3Jlc3VsdHNfc2VydmVyIGVsc2UgTm9uZQorICAgICAgICBzZWxmLl9nZW5lcmF0
ZV9vdXRwdXRfZmlsZXMob3V0cHV0X2pzb25fcGF0aCwgcGVyZl93ZWJraXRfanNvbl9wYXRoLCBy
ZXN1bHRzX3BhZ2VfcGF0aCwgb3V0cHV0LCBwZXJmX3dlYmtpdF9vdXRwdXQpCiAKICAgICAgICAg
aWYgb3B0aW9ucy50ZXN0X3Jlc3VsdHNfc2VydmVyOgogICAgICAgICAgICAgaWYgbm90IHNlbGYu
X3VwbG9hZF9qc29uKG9wdGlvbnMudGVzdF9yZXN1bHRzX3NlcnZlciwgb3V0cHV0X2pzb25fcGF0
aCk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuRVhJVF9DT0RFX0ZBSUxFRF9VUExPQURJ
TkcKIAorICAgICAgICAgICAgIyBGSVhNRTogUmVtb3ZlIHRoaXMgY29kZSBvbmNlIHdlJ3ZlIG1h
ZGUgdHJhbnNpdGlvbiB0byB1c2UgcGVyZi53ZWJraXQub3JnCisgICAgICAgICAgICBpZiBub3Qg
c2VsZi5fdXBsb2FkX2pzb24oJ3BlcmYud2Via2l0Lm9yZycsIHBlcmZfd2Via2l0X2pzb25fcGF0
aCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuRVhJVF9DT0RFX0ZBSUxFRF9VUExPQURJ
TkcKKwogICAgICAgICBpZiBvcHRpb25zLnNob3dfcmVzdWx0czoKICAgICAgICAgICAgIHNlbGYu
X3BvcnQuc2hvd19yZXN1bHRzX2h0bWxfZmlsZShyZXN1bHRzX3BhZ2VfcGF0aCkKIApAQCAtMjMz
LDkgKzIzOSwxMyBAQCBjbGFzcyBQZXJmVGVzdHNSdW5uZXIob2JqZWN0KToKICAgICAgICAgY29u
dGVudHMgPSB7J3Jlc3VsdHMnOiBzZWxmLl9yZXN1bHRzfQogICAgICAgICBpZiBkZXNjcmlwdGlv
bjoKICAgICAgICAgICAgIGNvbnRlbnRzWydkZXNjcmlwdGlvbiddID0gZGVzY3JpcHRpb24KKwor
ICAgICAgICByZXZpc2lvbnNfZm9yX3BlcmZfd2Via2l0ID0ge30KICAgICAgICAgZm9yIChuYW1l
LCBwYXRoKSBpbiBzZWxmLl9wb3J0LnJlcG9zaXRvcnlfcGF0aHMoKToKICAgICAgICAgICAgIHNj
bSA9IFNDTURldGVjdG9yKHNlbGYuX2hvc3QuZmlsZXN5c3RlbSwgc2VsZi5faG9zdC5leGVjdXRp
dmUpLmRldGVjdF9zY21fc3lzdGVtKHBhdGgpIG9yIHNlbGYuX2hvc3Quc2NtKCkKLSAgICAgICAg
ICAgIGNvbnRlbnRzW25hbWUgKyAnLXJldmlzaW9uJ10gPSBzY20uc3ZuX3JldmlzaW9uKHBhdGgp
CisgICAgICAgICAgICByZXZpc2lvbiA9IHNjbS5zdm5fcmV2aXNpb24ocGF0aCkKKyAgICAgICAg
ICAgIGNvbnRlbnRzW25hbWUubG93ZXIoKSArICctcmV2aXNpb24nXSA9IHJldmlzaW9uCisgICAg
ICAgICAgICByZXZpc2lvbnNfZm9yX3BlcmZfd2Via2l0W25hbWVdID0geydyZXZpc2lvbic6IHN0
cihyZXZpc2lvbiksICd0aW1lc3RhbXAnOiBzY20uc3ZuX3RpbWVzdGFtcChwYXRoKX0KIAogICAg
ICAgICAjIEZJWE1FOiBBZGQgLS1icmFuY2ggb3IgYXV0by1kZXRlY3QgdGhlIGJyYW5jaCB3ZSdy
ZSBpbgogICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiB7J3RpbWVzdGFtcCc6IGludCh0aW1lc3Rh
bXApLCAnYnJhbmNoJzogc2VsZi5fZGVmYXVsdF9icmFuY2gsICdwbGF0Zm9ybSc6IHBsYXRmb3Jt
LApAQCAtMjQzLDIwICsyNTMsNjYgQEAgY2xhc3MgUGVyZlRlc3RzUnVubmVyKG9iamVjdCk6CiAg
ICAgICAgICAgICBpZiB2YWx1ZToKICAgICAgICAgICAgICAgICBjb250ZW50c1trZXldID0gdmFs
dWUKIAotICAgICAgICByZXR1cm4gY29udGVudHMKKyAgICAgICAgY29udGVudHNfZm9yX3BlcmZf
d2Via2l0ID0geworICAgICAgICAgICAgJ2J1aWxkZXJOYW1lJzogYnVpbGRlcl9uYW1lLAorICAg
ICAgICAgICAgJ2J1aWxkTnVtYmVyJzogc3RyKGJ1aWxkX251bWJlciksCisgICAgICAgICAgICAn
YnVpbGRUaW1lJzogc2VsZi5fZGF0ZXRpbWVfaW5fRVM1X2NvbXBhdGlibGVfaXNvX2Zvcm1hdChz
ZWxmLl91dGNfdGltZXN0YW1wKSwKKyAgICAgICAgICAgICdwbGF0Zm9ybSc6IHBsYXRmb3JtLAor
ICAgICAgICAgICAgJ3JldmlzaW9ucyc6IHJldmlzaW9uc19mb3JfcGVyZl93ZWJraXQsCisgICAg
ICAgICAgICAndGVzdHMnOiB7fX0KKworICAgICAgICBmb3IgbWV0cmljX2Z1bGxfbmFtZSBpbiBz
ZWxmLl9yZXN1bHRzOgorICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5fcmVzdWx0c1ttZXRyaWNf
ZnVsbF9uYW1lXQorCisgICAgICAgICAgICAjIFdlIGNhbid0IHJlcHJvdCByZXN1bHRzIHdpdGhv
dXQgaW5kaXZpc3VhbCBtZWFzdXJlbWVudHMuCisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5j
ZShyZXN1bHQsIGRpY3QpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAg
IGFzc2VydCBtZXRyaWNfZnVsbF9uYW1lLmNvdW50KCc6JykgPD0gMQorICAgICAgICAgICAgdGVz
dF9mdWxsX25hbWUsIF8sIG1ldHJpYyA9IG1ldHJpY19mdWxsX25hbWUucGFydGl0aW9uKCc6JykK
KyAgICAgICAgICAgIGlmIG5vdCBtZXRyaWM6CisgICAgICAgICAgICAgICAgbWV0cmljID0geydm
cHMnOiAnRnJhbWVSYXRlJywgJ3J1bnMvcyc6ICdSdW5zJywgJ21zJzogJ1RpbWUnfVtyZXN1bHRb
J3VuaXQnXV0KKworICAgICAgICAgICAgdGVzdHMgPSBjb250ZW50c19mb3JfcGVyZl93ZWJraXRb
J3Rlc3RzJ10KKyAgICAgICAgICAgIHBhdGggPSB0ZXN0X2Z1bGxfbmFtZS5zcGxpdCgnLycpCisg
ICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4ocGF0aCkpOgorICAgICAgICAgICAgICAg
ICMgRklYTUU6IFdlIHNob3VsZG4ndCBhc3N1bWUgSFRNTCBleHRlbnNpb24uCisgICAgICAgICAg
ICAgICAgaXNfbGFzdF90b2tlbiA9IGkgKyAxID09IGxlbihwYXRoKQorICAgICAgICAgICAgICAg
IHVybCA9ICdodHRwOi8vdHJhYy53ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvUGVyZm9ybWFuY2VU
ZXN0cy8nICsgJy8nLmpvaW4ocGF0aFswOmkgKyAxXSkKKyAgICAgICAgICAgICAgICBpZiBpc19s
YXN0X3Rva2VuOgorICAgICAgICAgICAgICAgICAgICB1cmwgKz0gJy5odG1sJworCisgICAgICAg
ICAgICAgICAgdGVzdHMuc2V0ZGVmYXVsdChwYXRoW2ldLCB7J3VybCc6IHVybH0pCisgICAgICAg
ICAgICAgICAgY3VycmVudF90ZXN0ID0gdGVzdHNbcGF0aFtpXV0KKyAgICAgICAgICAgICAgICBp
ZiBpc19sYXN0X3Rva2VuOgorICAgICAgICAgICAgICAgICAgICBjdXJyZW50X3Rlc3Quc2V0ZGVm
YXVsdCgnbWV0cmljcycsIHt9KQorICAgICAgICAgICAgICAgICAgICBhc3NlcnQgbWV0cmljIG5v
dCBpbiBjdXJyZW50X3Rlc3RbJ21ldHJpY3MnXQorICAgICAgICAgICAgICAgICAgICBjdXJyZW50
X3Rlc3RbJ21ldHJpY3MnXVttZXRyaWNdID0geydjdXJyZW50JzogcmVzdWx0Wyd2YWx1ZXMnXX0K
KyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBjdXJyZW50X3Rlc3Qu
c2V0ZGVmYXVsdCgndGVzdHMnLCB7fSkKKyAgICAgICAgICAgICAgICAgICAgdGVzdHMgPSBjdXJy
ZW50X3Rlc3RbJ3Rlc3RzJ10KKworICAgICAgICByZXR1cm4gY29udGVudHMsIGNvbnRlbnRzX2Zv
cl9wZXJmX3dlYmtpdAogCi0gICAgZGVmIF9tZXJnZV9zbGF2ZV9jb25maWdfanNvbihzZWxmLCBz
bGF2ZV9jb25maWdfanNvbl9wYXRoLCBvdXRwdXQpOgorICAgIEBzdGF0aWNtZXRob2QKKyAgICBk
ZWYgX2RhdGV0aW1lX2luX0VTNV9jb21wYXRpYmxlX2lzb19mb3JtYXQoZGF0ZXRpbWUpOgorICAg
ICAgICByZXR1cm4gZGF0ZXRpbWUuc3RyZnRpbWUoJyVZLSVtLSVkVCVIOiVNOiVTLiVmJykKKwor
ICAgIGRlZiBfbWVyZ2Vfc2xhdmVfY29uZmlnX2pzb24oc2VsZiwgc2xhdmVfY29uZmlnX2pzb25f
cGF0aCwgY29udGVudHMsIGNvbnRlbnRzX2Zvcl9wZXJmX3dlYmtpdCk6CiAgICAgICAgIGlmIG5v
dCBzZWxmLl9ob3N0LmZpbGVzeXN0ZW0uaXNmaWxlKHNsYXZlX2NvbmZpZ19qc29uX3BhdGgpOgog
ICAgICAgICAgICAgX2xvZy5lcnJvcigiTWlzc2luZyBzbGF2ZSBjb25maWd1cmF0aW9uIEpTT04g
ZmlsZTogJXMiICUgc2xhdmVfY29uZmlnX2pzb25fcGF0aCkKLSAgICAgICAgICAgIHJldHVybiBO
b25lCisgICAgICAgICAgICByZXR1cm4gTm9uZSwgTm9uZQogCiAgICAgICAgIHRyeToKICAgICAg
ICAgICAgIHNsYXZlX2NvbmZpZ19qc29uID0gc2VsZi5faG9zdC5maWxlc3lzdGVtLm9wZW5fdGV4
dF9maWxlX2Zvcl9yZWFkaW5nKHNsYXZlX2NvbmZpZ19qc29uX3BhdGgpCiAgICAgICAgICAgICBz
bGF2ZV9jb25maWcgPSBqc29uLmxvYWQoc2xhdmVfY29uZmlnX2pzb24pCi0gICAgICAgICAgICBy
ZXR1cm4gZGljdChzbGF2ZV9jb25maWcuaXRlbXMoKSArIG91dHB1dC5pdGVtcygpKQorICAgICAg
ICAgICAgY29udGVudHMgPSBkaWN0KHNsYXZlX2NvbmZpZy5pdGVtcygpICsgY29udGVudHMuaXRl
bXMoKSkKKyAgICAgICAgICAgIGZvciBrZXkgaW4gc2xhdmVfY29uZmlnOgorICAgICAgICAgICAg
ICAgIGNvbnRlbnRzX2Zvcl9wZXJmX3dlYmtpdFsnYnVpbGRlcicgKyBrZXkuY2FwaXRhbGl6ZSgp
XSA9IHNsYXZlX2NvbmZpZ1trZXldCisgICAgICAgICAgICByZXR1cm4gY29udGVudHMsIGNvbnRl
bnRzX2Zvcl9wZXJmX3dlYmtpdAogICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlcnJvcjoKICAg
ICAgICAgICAgIF9sb2cuZXJyb3IoIkZhaWxlZCB0byBtZXJnZSBzbGF2ZSBjb25maWd1cmF0aW9u
IEpTT04gZmlsZSAlczogJXMiICUgKHNsYXZlX2NvbmZpZ19qc29uX3BhdGgsIGVycm9yKSkKLSAg
ICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIE5vbmUsIE5vbmUKIAogICAgIGRlZiBf
bWVyZ2Vfb3V0cHV0c19pZl9uZWVkZWQoc2VsZiwgb3V0cHV0X2pzb25fcGF0aCwgb3V0cHV0KToK
ICAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5yZXNldF9yZXN1bHRzIG9yIG5vdCBzZWxmLl9ob3N0
LmZpbGVzeXN0ZW0uaXNmaWxlKG91dHB1dF9qc29uX3BhdGgpOgpAQCAtMjY4LDEyICszMjQsMTUg
QEAgY2xhc3MgUGVyZlRlc3RzUnVubmVyKG9iamVjdCk6CiAgICAgICAgICAgICBfbG9nLmVycm9y
KCJGYWlsZWQgdG8gbWVyZ2Ugb3V0cHV0IEpTT04gZmlsZSAlczogJXMiICUgKG91dHB1dF9qc29u
X3BhdGgsIGVycm9yKSkKICAgICAgICAgcmV0dXJuIE5vbmUKIAotICAgIGRlZiBfZ2VuZXJhdGVf
b3V0cHV0X2ZpbGVzKHNlbGYsIG91dHB1dF9qc29uX3BhdGgsIHJlc3VsdHNfcGFnZV9wYXRoLCBv
dXRwdXQpOgorICAgIGRlZiBfZ2VuZXJhdGVfb3V0cHV0X2ZpbGVzKHNlbGYsIG91dHB1dF9qc29u
X3BhdGgsIHBlcmZfd2Via2l0X2pzb25fcGF0aCwgcmVzdWx0c19wYWdlX3BhdGgsIG91dHB1dCwg
cGVyZl93ZWJraXRfb3V0cHV0KToKICAgICAgICAgZmlsZXN5c3RlbSA9IHNlbGYuX2hvc3QuZmls
ZXN5c3RlbQogCiAgICAgICAgIGpzb25fb3V0cHV0ID0ganNvbi5kdW1wcyhvdXRwdXQpCiAgICAg
ICAgIGZpbGVzeXN0ZW0ud3JpdGVfdGV4dF9maWxlKG91dHB1dF9qc29uX3BhdGgsIGpzb25fb3V0
cHV0KQogCisgICAgICAgIGlmIHBlcmZfd2Via2l0X2pzb25fcGF0aDoKKyAgICAgICAgICAgIGZp
bGVzeXN0ZW0ud3JpdGVfdGV4dF9maWxlKHBlcmZfd2Via2l0X2pzb25fcGF0aCwganNvbi5kdW1w
cyhwZXJmX3dlYmtpdF9vdXRwdXQpKQorCiAgICAgICAgIGlmIHJlc3VsdHNfcGFnZV9wYXRoOgog
ICAgICAgICAgICAgdGVtcGxhdGVfcGF0aCA9IGZpbGVzeXN0ZW0uam9pbihzZWxmLl9wb3J0LnBl
cmZfdGVzdHNfZGlyKCksICdyZXNvdXJjZXMvcmVzdWx0cy10ZW1wbGF0ZS5odG1sJykKICAgICAg
ICAgICAgIHRlbXBsYXRlID0gZmlsZXN5c3RlbS5yZWFkX3RleHRfZmlsZSh0ZW1wbGF0ZV9wYXRo
KQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9w
ZXJmdGVzdHNydW5uZXJfaW50ZWdyYXRpb250ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdHNydW5uZXJfaW50ZWdyYXRpb250ZXN0LnB5Cmlu
ZGV4IDUzNDEwNGNiYjY2OTI1ZDVkNDgzM2UwOTE1MGZmNzA1MmYzZmM4YjUuLjJlY2ZlNWZmNTBm
Mzc1ZDY3ZDI1MjIzZjM5Y2FjMTQ5MTA2M2EzOGMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3RzcnVubmVyX2ludGVncmF0aW9udGVz
dC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0
ZXN0c3J1bm5lcl9pbnRlZ3JhdGlvbnRlc3QucHkKQEAgLTI5LDYgKzI5LDcgQEAKICIiIkludGVn
cmF0aW9uIHRlc3RzIGZvciBydW5fcGVyZl90ZXN0cy4iIiIKIAogaW1wb3J0IFN0cmluZ0lPCitp
bXBvcnQgZGF0ZXRpbWUKIGltcG9ydCBqc29uCiBpbXBvcnQgcmUKIGltcG9ydCB1bml0dGVzdDIg
YXMgdW5pdHRlc3QKQEAgLTMyMiwxMyArMzIzLDE1IEBAIGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0
LlRlc3RDYXNlKToKICAgICAgICAgdXBsb2FkZWQgPSBbRmFsc2VdCiAKICAgICAgICAgZGVmIG1v
Y2tfdXBsb2FkX2pzb24oaG9zdG5hbWUsIGpzb25fcGF0aCk6Ci0gICAgICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKGhvc3RuYW1lLCAnc29tZS5ob3N0JykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoanNvbl9wYXRoLCAnL21vY2stY2hlY2tvdXQvb3V0cHV0Lmpzb24nKQorICAgICAgICAg
ICAgIyBGSVhNRTogR2V0IHJpZCBvZiB0aGUgaGFyZC1jb2RlZCBwZXJmLndlYmtpdC5vcmcgb25j
ZSB3ZSd2ZSBjb21wbGV0ZWQgdGhlIHRyYW5zaXRpb24uCisgICAgICAgICAgICBzZWxmLmFzc2Vy
dEluKGhvc3RuYW1lLCBbJ3NvbWUuaG9zdCcsICdwZXJmLndlYmtpdC5vcmcnXSkKKyAgICAgICAg
ICAgIHNlbGYuYXNzZXJ0SW4oanNvbl9wYXRoLCBbJy9tb2NrLWNoZWNrb3V0L291dHB1dC5qc29u
JywgJy9tb2NrLWNoZWNrb3V0L291dHB1dC1wZXJmLXdlYmtpdC5qc29uJ10pCiAgICAgICAgICAg
ICB1cGxvYWRlZFswXSA9IHVwbG9hZF9zdWNlZWRzCiAgICAgICAgICAgICByZXR1cm4gdXBsb2Fk
X3N1Y2VlZHMKIAogICAgICAgICBydW5uZXIuX3VwbG9hZF9qc29uID0gbW9ja191cGxvYWRfanNv
bgogICAgICAgICBydW5uZXIuX3RpbWVzdGFtcCA9IDEyMzQ1Njc4OQorICAgICAgICBydW5uZXIu
X3V0Y190aW1lc3RhbXAgPSBkYXRldGltZS5kYXRldGltZSgyMDEzLCAyLCA4LCAxNSwgMTksIDM3
LCA0NjAwMDApCiAgICAgICAgIG91dHB1dF9jYXB0dXJlID0gT3V0cHV0Q2FwdHVyZSgpCiAgICAg
ICAgIG91dHB1dF9jYXB0dXJlLmNhcHR1cmVfb3V0cHV0KCkKICAgICAgICAgdHJ5OgpAQCAtNTIx
LDYgKzUyNCwzMyBAQCBjbGFzcyBNYWluVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICAg
ICAgc2VsZi5fdGVzdF9ydW5fd2l0aF9qc29uX291dHB1dChydW5uZXIsIHBvcnQuaG9zdC5maWxl
c3lzdGVtLCB1cGxvYWRfc3VjZWVkcz1GYWxzZSwgZXhwZWN0ZWRfZXhpdF9jb2RlPVBlcmZUZXN0
c1J1bm5lci5FWElUX0NPREVfRkFJTEVEX1VQTE9BRElORykKIAorICAgIGRlZiB0ZXN0X3J1bl93
aXRoX3VwbG9hZF9qc29uX3Nob3VsZF9nZW5lcmF0ZV9wZXJmX3dlYmtpdF9qc29uKHNlbGYpOgor
ICAgICAgICBydW5uZXIsIHBvcnQgPSBzZWxmLmNyZWF0ZV9ydW5uZXJfYW5kX3NldHVwX3Jlc3Vs
dHNfdGVtcGxhdGUoYXJncz1bJy0tb3V0cHV0LWpzb24tcGF0aD0vbW9jay1jaGVja291dC9vdXRw
dXQuanNvbicsCisgICAgICAgICAgICAnLS10ZXN0LXJlc3VsdHMtc2VydmVyJywgJ3NvbWUuaG9z
dCcsICctLXBsYXRmb3JtJywgJ3BsYXRmb3JtMScsICctLWJ1aWxkZXItbmFtZScsICdidWlsZGVy
MScsICctLWJ1aWxkLW51bWJlcicsICcxMjMnLAorICAgICAgICAgICAgJy0tc2xhdmUtY29uZmln
LWpzb24tcGF0aD0vbW9jay1jaGVja291dC9zbGF2ZS1jb25maWcuanNvbiddKQorICAgICAgICBw
b3J0Lmhvc3QuZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUoJy9tb2NrLWNoZWNrb3V0L3NsYXZl
LWNvbmZpZy5qc29uJywgJ3sia2V5IjogInZhbHVlMSJ9JykKKworICAgICAgICBzZWxmLl90ZXN0
X3J1bl93aXRoX2pzb25fb3V0cHV0KHJ1bm5lciwgcG9ydC5ob3N0LmZpbGVzeXN0ZW0sIHVwbG9h
ZF9zdWNlZWRzPVRydWUpCisgICAgICAgIGdlbmVyYXRlZF9qc29uID0ganNvbi5sb2Fkcyhwb3J0
Lmhvc3QuZmlsZXN5c3RlbS5maWxlc1snL21vY2stY2hlY2tvdXQvb3V0cHV0LXBlcmYtd2Via2l0
Lmpzb24nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoZ2VuZXJhdGVkX2pz
b24sIGxpc3QpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihnZW5lcmF0ZWRfanNvbiks
IDEpCisKKyAgICAgICAgb3V0cHV0ID0gZ2VuZXJhdGVkX2pzb25bMF0KKyAgICAgICAgc2VsZi5t
YXhEaWZmID0gTm9uZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dFsncGxhdGZvcm0n
XSwgJ3BsYXRmb3JtMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0WydidWlsZE51
bWJlciddLCAnMTIzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXRbJ2J1aWxkVGlt
ZSddLCAnMjAxMy0wMi0wOFQxNToxOTozNy40NjAwMDAnKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKG91dHB1dFsnYnVpbGRlck5hbWUnXSwgJ2J1aWxkZXIxJykKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChvdXRwdXRbJ2J1aWxkZXJLZXknXSwgJ3ZhbHVlMScpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwob3V0cHV0WydyZXZpc2lvbnMnXSwgeydXZWJLaXQnOiB7J3JldmlzaW9uJzogJzU2
NzgnLCAndGltZXN0YW1wJzogJzIwMTMtMDItMDEgMDg6NDg6MDUgKzAwMDAnfX0pCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0Wyd0ZXN0cyddLmtleXMoKSwgWydCaW5kaW5ncyddKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChvdXRwdXRbJ3Rlc3RzJ11bJ0JpbmRpbmdz
J10ua2V5cygpKSwgWyd0ZXN0cycsICd1cmwnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChv
dXRwdXRbJ3Rlc3RzJ11bJ0JpbmRpbmdzJ11bJ3VybCddLCAnaHR0cDovL3RyYWMud2Via2l0Lm9y
Zy9icm93c2VyL3RydW5rL1BlcmZvcm1hbmNlVGVzdHMvQmluZGluZ3MnKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKG91dHB1dFsndGVzdHMnXVsnQmluZGluZ3MnXVsndGVzdHMnXS5rZXlzKCks
IFsnZXZlbnQtdGFyZ2V0LXdyYXBwZXInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRw
dXRbJ3Rlc3RzJ11bJ0JpbmRpbmdzJ11bJ3Rlc3RzJ11bJ2V2ZW50LXRhcmdldC13cmFwcGVyJ10s
IHsKKyAgICAgICAgICAgICd1cmwnOiAnaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3Ry
dW5rL1BlcmZvcm1hbmNlVGVzdHMvQmluZGluZ3MvZXZlbnQtdGFyZ2V0LXdyYXBwZXIuaHRtbCcs
CisgICAgICAgICAgICAnbWV0cmljcyc6IHsnVGltZSc6IHsnY3VycmVudCc6IFsxNDg2LjAsIDE0
NzEuMCwgMTUxMC4wLCAxNTA1LjAsIDE0NzguMCwgMTQ5MC4wXX19fSkKKwogICAgIGRlZiB0ZXN0
X3VwbG9hZF9qc29uKHNlbGYpOgogICAgICAgICBydW5uZXIsIHBvcnQgPSBzZWxmLmNyZWF0ZV9y
dW5uZXIoKQogICAgICAgICBwb3J0Lmhvc3QuZmlsZXN5c3RlbS5maWxlc1snL21vY2stY2hlY2tv
dXQvc29tZS5qc29uJ10gPSAnc29tZSBjb250ZW50JwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdHNydW5uZXJfdW5pdHRlc3QucHkg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0c3J1bm5l
cl91bml0dGVzdC5weQppbmRleCBmY2MzNGEzMTlhMGE0MjkxZjk4MTc1MzVjZjUwY2I1NzQ0Njk0
YmIwLi5iNTUxNmUxYzg0MTY3MGIwNWM3MjQ4NTMwOTVjMTljNmY3NGMzNGY4IDEwMDY0NAotLS0g
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0c3J1bm5l
cl91bml0dGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rl
c3RzL3BlcmZ0ZXN0c3J1bm5lcl91bml0dGVzdC5weQpAQCAtMTQ3LDMgKzE0Nyw2IEBAIGNsYXNz
IE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChv
cHRpb25zLm91dHB1dF9qc29uX3BhdGgsICdhL291dHB1dC5qc29uJykKICAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChvcHRpb25zLnNsYXZlX2NvbmZpZ19qc29uX3BhdGgsICdhL3NvdXJjZS5qc29u
JykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRpb25zLnRlc3RfcmVzdWx0c19zZXJ2ZXIs
ICdzb21laG9zdCcpCisKKyAgICBkZWYgdGVzdF9nZW5lcmF0ZV9wZXJmX3dlYmtpdF9vdXRwdXQo
c2VsZik6CisgICAgICAgIHBhc3MK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187337</attachid>
            <date>2013-02-08 10:39:39 -0800</date>
            <delta_ts>2013-02-08 21:54:59 -0800</delta_ts>
            <desc>Work in progress 3</desc>
            <filename>bug-108577-20130208103613.patch</filename>
            <type>text/plain</type>
            <size>20409</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyMjQxCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vZ2l0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vY2hlY2tvdXQvc2NtL2dpdC5weQppbmRleCBiYjgzYjlkMjcxOTg5YmNlYjYwNzA1
N2RlOGRkY2QzODkzNDdhMGIyLi5mMzg5OWI5NDFlOTgzZDU5YzI5YmU2NDM1ODFjZDk5MWVjYzUz
NzRhIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9z
Y20vZ2l0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3Nj
bS9naXQucHkKQEAgLTI3LDYgKzI3LDcgQEAKICMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAjIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CiAKK2ltcG9ydCBkYXRldGltZQogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBvcwogaW1wb3J0IHJl
CkBAIC0yNTMsNiArMjU0LDIxIEBAIGNsYXNzIEdpdChTQ00sIFNWTlJlcG9zaXRvcnkpOgogICAg
ICAgICAgICAgcmV0dXJuICIiCiAgICAgICAgIHJldHVybiBzdHIobWF0Y2guZ3JvdXAoJ3N2bl9y
ZXZpc2lvbicpKQogCisgICAgZGVmIHN2bl90aW1lc3RhbXAoc2VsZiwgcGF0aCk6CisgICAgICAg
IGdpdF9sb2cgPSBzZWxmLl9ydW5fZ2l0KFsnbG9nJywgJy0yNScsICctLWRhdGU9aXNvJywgc2Vs
Zi5maW5kX2NoZWNrb3V0X3Jvb3QocGF0aCldKQorICAgICAgICBtYXRjaCA9IHJlLnNlYXJjaCgi
XkRhdGU6XHMqKFxkezR9KS0oXGR7Mn0pLShcZHsyfSkgKFxkezJ9KTooXGR7Mn0pOihcZHsyfSkg
KFsrLV0pKFxkezJ9KShcZHsyfSkkIiwgZ2l0X2xvZywgcmUuTVVMVElMSU5FKQorICAgICAgICBp
ZiBub3QgbWF0Y2g6CisgICAgICAgICAgICByZXR1cm4gIiIKKworICAgICAgICAjIE1hbnVhbGx5
IG1vZGlmeSB0aGUgdGltZXpvbmUgc2luY2UgR2l0IGRvZXNuJ3QgaGF2ZSBhbiBvcHRpdG9uIHRv
IHNob3cgaXQgaW4gVVRDLgorICAgICAgICAjIEdpdCBhbHNvIHRydW5jYXRlcyBtaWxsaXNlY29u
ZHMgYnV0IHdlJ3JlIGdvaW5nIHRvIGlnbm9yZSB0aGF0IGZvciBub3cuCisgICAgICAgIHRpbWVf
d2l0aF90aW1lem9uZSA9IGRhdGV0aW1lLmRhdGV0aW1lKGludChtYXRjaC5ncm91cCgxKSksIGlu
dChtYXRjaC5ncm91cCgyKSksIGludChtYXRjaC5ncm91cCgzKSksCisgICAgICAgICAgICBpbnQo
bWF0Y2guZ3JvdXAoNCkpLCBpbnQobWF0Y2guZ3JvdXAoNSkpLCBpbnQobWF0Y2guZ3JvdXAoNikp
LCAwKQorCisgICAgICAgIHNpZ24gPSAxIGlmIG1hdGNoLmdyb3VwKDcpID09ICcrJyBlbHNlIC0x
CisgICAgICAgIHRpbWVfd2lob3V0X3RpbWV6b25lID0gdGltZV93aXRoX3RpbWV6b25lIC0gZGF0
ZXRpbWUudGltZWRlbHRhKGhvdXJzPXNpZ24gKiBpbnQobWF0Y2guZ3JvdXAoOCkpLCBtaW51dGVz
PWludChtYXRjaC5ncm91cCg5KSkpCisgICAgICAgIHJldHVybiB0aW1lX3dpaG91dF90aW1lem9u
ZS5zdHJmdGltZSgnJVktJW0tJWRUJUg6JU06JVNaJykKKwogICAgIGRlZiBwcmVwZW5kX3N2bl9y
ZXZpc2lvbihzZWxmLCBkaWZmKToKICAgICAgICAgcmV2aXNpb24gPSBzZWxmLmhlYWRfc3ZuX3Jl
dmlzaW9uKCkKICAgICAgICAgaWYgbm90IHJldmlzaW9uOgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3NjbS5weSBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zY20ucHkKaW5kZXggOWRhNGQzZjczZjQxY2Nh
NGE2MGU4MGNlYzVlYjY4NjJkNWIwYjMxMy4uYTRhZWQ1MTdhODk0YjlkOWEwOTU0MjdlYjc0MGRi
ZmIyZmFiOWY3NyAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hl
Y2tvdXQvc2NtL3NjbS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVj
a291dC9zY20vc2NtLnB5CkBAIC0xNjksNiArMTY5LDkgQEAgY2xhc3MgU0NNOgogICAgIGRlZiBz
dm5fcmV2aXNpb24oc2VsZiwgcGF0aCk6CiAgICAgICAgIHNlbGYuX3N1YmNsYXNzX211c3RfaW1w
bGVtZW50KCkKIAorICAgIGRlZiBzdm5fdGltZXN0YW1wKHNlbGYsIHBhdGgpOgorICAgICAgICBz
ZWxmLl9zdWJjbGFzc19tdXN0X2ltcGxlbWVudCgpCisKICAgICBkZWYgY3JlYXRlX3BhdGNoKHNl
bGYsIGdpdF9jb21taXQ9Tm9uZSwgY2hhbmdlZF9maWxlcz1Ob25lKToKICAgICAgICAgc2VsZi5f
c3ViY2xhc3NfbXVzdF9pbXBsZW1lbnQoKQogCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc2NtX21vY2sucHkgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc2NtX21vY2sucHkKaW5kZXggMjQxNDU2MjVhZGU1
NDc5MGE2YWM0YzQzYjdhOGU0MGI1YmUyMDliNS4uMDU3MzAzZjliM2YxM2NkMjE3YWU0MmQ0MDg2
YTNjMTlkYTU3NGFiMCAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24v
Y2hlY2tvdXQvc2NtL3NjbV9tb2NrLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29t
bW9uL2NoZWNrb3V0L3NjbS9zY21fbW9jay5weQpAQCAtODQsNiArODQsOSBAQCBjbGFzcyBNb2Nr
U0NNKG9iamVjdCk6CiAgICAgZGVmIHN2bl9yZXZpc2lvbihzZWxmLCBwYXRoKToKICAgICAgICAg
cmV0dXJuICc1Njc4JwogCisgICAgZGVmIHN2bl90aW1lc3RhbXAoc2VsZiwgcGF0aCk6CisgICAg
ICAgIHJldHVybiAnMjAxMy0wMi0wMSAwODo0ODowNSArMDAwMCcKKwogICAgIGRlZiBjcmVhdGVf
cGF0Y2goc2VsZiwgZ2l0X2NvbW1pdCwgY2hhbmdlZF9maWxlcz1Ob25lKToKICAgICAgICAgcmV0
dXJuICJQYXRjaDEiCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9u
L2NoZWNrb3V0L3NjbS9zY21fdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9jaGVja291dC9zY20vc2NtX3VuaXR0ZXN0LnB5CmluZGV4IDdiZWJjMjhmMWY1MDllNTNm
YzM2ZDhmZGE2MDdhZDQ0ZDhmNmM4NjMuLjQ5ZDRjNTJhNmQxNWFhMTUxZDBkNDkxNDA2NTgxODUx
ODZjNGMzYmEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNr
b3V0L3NjbS9zY21fdW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vY2hlY2tvdXQvc2NtL3NjbV91bml0dGVzdC5weQpAQCAtMTU3NywzICsxNTc3LDE2IEBAIE1P
Q0sgcnVuX2NvbW1hbmQ6IFsnZ2l0JywgJ2xvZycsICctMjUnLCAnLi9NT0NLIG91dHB1dCBvZiBj
aGlsZCBwcm9jZXNzJ10sIGN3ZD0lCiAKICAgICBkZWYgdGVzdF9wdXNoX2xvY2FsX2NvbW1pdHNf
dG9fc2VydmVyX3dpdGhvdXRfdXNlcm5hbWVfYW5kX3dpdGhfcGFzc3dvcmQoc2VsZik6CiAgICAg
ICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF1dGhlbnRpY2F0aW9uRXJyb3IsIHNlbGYubWFrZV9zY20o
KS5wdXNoX2xvY2FsX2NvbW1pdHNfdG9fc2VydmVyLCB7J3Bhc3N3b3JkJzogJ2JsYWgnfSkKKwor
ICAgIGRlZiB0ZXN0X3N2bl90aW1lc3RhbXAoc2VsZik6CisgICAgICAgIHNjbSA9IHNlbGYubWFr
ZV9zY20oKQorICAgICAgICBzY20uZmluZF9jaGVja291dF9yb290ID0gbGFtYmRhIHBhdGg6ICcn
CisgICAgICAgIHNjbS5fcnVuX2dpdCA9IGxhbWJkYSBhcmdzOiAnRGF0ZTogMjAxMy0wMi0wOCAw
ODowNTo0OSArMDAwMCcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzY20uc3ZuX3RpbWVzdGFt
cCgnc29tZS1wYXRoJyksICcyMDEzLTAyLTA4VDA4OjA1OjQ5WicpCisKKyAgICAgICAgc2NtLl9y
dW5fZ2l0ID0gbGFtYmRhIGFyZ3M6ICdEYXRlOiAyMDEzLTAyLTA4IDAxOjAyOjAzICswMTMwJwor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNjbS5zdm5fdGltZXN0YW1wKCdzb21lLXBhdGgnKSwg
JzIwMTMtMDItMDdUMjM6MzI6MDNaJykKKworICAgICAgICBzY20uX3J1bl9naXQgPSBsYW1iZGEg
YXJnczogJ0RhdGU6IDIwMTMtMDItMDggMDE6NTU6MjEgLTA4MDAnCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoc2NtLnN2bl90aW1lc3RhbXAoJ3NvbWUtcGF0aCcpLCAnMjAxMy0wMi0wOFQwOTo1
NToyMVonKQorCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVj
a291dC9zY20vc3ZuLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQv
c2NtL3N2bi5weQppbmRleCBkMmIwZjM2NjdmZDcyYmFjZGJmNDc0NmYxZWQ4ZDU0YTYzNGQxMTU4
Li4yOGY3ZTJjNTNhZDA0YTg4OGZjYzZkZGI4MDk3NzBkY2U3MTc1ZWIzIDEwMDY0NAotLS0gYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc3ZuLnB5CisrKyBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zdm4ucHkKQEAgLTI0Niw2
ICsyNDYsMTIgQEAgY2xhc3MgU1ZOKFNDTSwgU1ZOUmVwb3NpdG9yeSk6CiAgICAgZGVmIHN2bl9y
ZXZpc2lvbihzZWxmLCBwYXRoKToKICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWVfZnJvbV9zdm5f
aW5mbyhwYXRoLCAnUmV2aXNpb24nKQogCisgICAgZGVmIHN2bl90aW1lc3RhbXAoc2VsZiwgcGF0
aCk6CisgICAgICAgICMgV2UgdXNlIC0teG1sIHRvIGdldCB0aW1lc3RhbXBzIGxpa2UgMjAxMy0w
Mi0wOFQwODoxODowNC45NjQ0MDlaCisgICAgICAgIGluZm9fb3V0cHV0ID0gRXhlY3V0aXZlKCku
cnVuX2NvbW1hbmQoW2Nscy5leGVjdXRhYmxlX25hbWUsICdpbmZvJywgJy0teG1sJ10sIGN3ZD1w
YXRoKS5yc3RyaXAoKQorICAgICAgICBtYXRjaCA9IHJlLnNlYXJjaChyIl48ZGF0ZT4oP1A8dmFs
dWU+LispPC9kYXRlPiQiLCByZS5NVUxUSUxJTkUpCisgICAgICAgIHJldHVybiBtYXRjaC5ncm91
cCgndmFsdWUnKQorCiAgICAgIyBGSVhNRTogVGhpcyBtZXRob2Qgc2hvdWxkIGJlIG9uIENoZWNr
b3V0LgogICAgIGRlZiBjcmVhdGVfcGF0Y2goc2VsZiwgZ2l0X2NvbW1pdD1Ob25lLCBjaGFuZ2Vk
X2ZpbGVzPU5vbmUpOgogICAgICAgICAiIiJSZXR1cm5zIGEgYnl0ZSBhcnJheSAoc3RyKCkpIHJl
cHJlc2VudGluZyB0aGUgcGF0Y2ggZmlsZS4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5lcmF0b3Iu
cHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9q
c29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5CmluZGV4IDczODM0ZjBhZDYyNzNiYzYxYWFkNDM3NzY5
MTcyMGIzNjY3NzkwZWMuLmExOGJjOTk2OTJmNzU1NjczN2Y2ZmYyZTVmOGEwMjkxYmJlZjM0ZjIg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL2pzb25fcmVzdWx0c19nZW5lcmF0b3IucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvci5w
eQpAQCAtNTI2LDExICs1MjYsMTIgQEAgY2xhc3MgSlNPTlJlc3VsdHNHZW5lcmF0b3JCYXNlKG9i
amVjdCk6CiAgICAgICAgIGZvciAobmFtZSwgcGF0aCkgaW4gc2VsZi5fc3ZuX3JlcG9zaXRvcmll
czoKICAgICAgICAgICAgICMgTm90ZTogZm9yIEpTT04gZmlsZSdzIGJhY2t3YXJkLWNvbXBhdGli
aWxpdHkgd2UgdXNlICdjaHJvbWUnIHJhdGhlcgogICAgICAgICAgICAgIyB0aGFuICdjaHJvbWl1
bScgaGVyZS4KLSAgICAgICAgICAgIGlmIG5hbWUgPT0gJ2Nocm9taXVtJzoKLSAgICAgICAgICAg
ICAgICBuYW1lID0gJ2Nocm9tZScKKyAgICAgICAgICAgIGxvd2VyY2FzZV9uYW1lID0gbmFtZS5s
b3dlcigpCisgICAgICAgICAgICBpZiBsb3dlcmNhc2VfbmFtZSA9PSAnY2hyb21pdW0nOgorICAg
ICAgICAgICAgICAgIGxvd2VyY2FzZV9uYW1lID0gJ2Nocm9tZScKICAgICAgICAgICAgIHNlbGYu
X2luc2VydF9pdGVtX2ludG9fcmF3X2xpc3QocmVzdWx0c19mb3JfYnVpbGRlciwKICAgICAgICAg
ICAgICAgICBzZWxmLl9nZXRfc3ZuX3JldmlzaW9uKHBhdGgpLAotICAgICAgICAgICAgICAgIG5h
bWUgKyAnUmV2aXNpb24nKQorICAgICAgICAgICAgICAgIGxvd2VyY2FzZV9uYW1lICsgJ1Jldmlz
aW9uJykKIAogICAgICAgICBzZWxmLl9pbnNlcnRfaXRlbV9pbnRvX3Jhd19saXN0KHJlc3VsdHNf
Zm9yX2J1aWxkZXIsCiAgICAgICAgICAgICBpbnQodGltZS50aW1lKCkpLApkaWZmIC0tZ2l0IGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5IGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CmluZGV4IGQ0NWIyMGYz
Y2ZlZGZlNzliYWZiN2JiMjRhMDc1NjAwMDM1NWVlNmMuLjE0Y2EyYjM2YmRjNWI4YjMyZDAxYTk0
NzAzN2Y0Mzk0M2IwMjc4OTAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3BvcnQvYmFzZS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L2Jhc2UucHkKQEAgLTEwOTAsMTEgKzEwOTAsMTEgQEAgY2xhc3MgUG9ydChv
YmplY3QpOgogCiAgICAgZGVmIHJlcG9zaXRvcnlfcGF0aHMoc2VsZik6CiAgICAgICAgICIiIlJl
dHVybnMgYSBsaXN0IG9mIChyZXBvc2l0b3J5X25hbWUsIHJlcG9zaXRvcnlfcGF0aCkgdHVwbGVz
IG9mIGl0cyBkZXBlbmRpbmcgY29kZSBiYXNlLgotICAgICAgICBCeSBkZWZhdWx0IGl0IHJldHVy
bnMgYSBsaXN0IHRoYXQgb25seSBjb250YWlucyBhICgnd2Via2l0JywgPHdlYmtpdFJlcG9zc2l0
b3J5UGF0aD4pIHR1cGxlLiIiIgorICAgICAgICBCeSBkZWZhdWx0IGl0IHJldHVybnMgYSBsaXN0
IHRoYXQgb25seSBjb250YWlucyBhICgnV2ViS2l0JywgPHdlYmtpdFJlcG9zc2l0b3J5UGF0aD4p
IHR1cGxlLiIiIgogCi0gICAgICAgICMgV2UgdXNlIExheW91dFRlc3QgZGlyZWN0b3J5IGhlcmUg
YmVjYXVzZSB3ZWJraXRfYmFzZSBpc24ndCBhIHBhcnQgd2Via2l0IHJlcG9zaXRvcnkgaW4gQ2hy
b21pdW0gcG9ydAorICAgICAgICAjIFdlIHVzZSBMYXlvdXRUZXN0IGRpcmVjdG9yeSBoZXJlIGJl
Y2F1c2Ugd2Via2l0X2Jhc2UgaXNuJ3QgYSBwYXJ0IG9mIFdlYktpdCByZXBvc2l0b3J5IGluIENo
cm9taXVtIHBvcnQKICAgICAgICAgIyB3aGVyZSB0dXJuayBpc24ndCBjaGVja2VkIG91dCBhcyBh
IHdob2xlLgotICAgICAgICByZXR1cm4gWygnd2Via2l0Jywgc2VsZi5sYXlvdXRfdGVzdHNfZGly
KCkpXQorICAgICAgICByZXR1cm4gWygnV2ViS2l0Jywgc2VsZi5sYXlvdXRfdGVzdHNfZGlyKCkp
XQogCiAgICAgX1dESUZGX0RFTCA9ICcjI1dESUZGX0RFTCMjJwogICAgIF9XRElGRl9BREQgPSAn
IyNXRElGRl9BREQjIycKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2Nocm9taXVtLnB5CmluZGV4IDA5MDZhN2RkNDg5NTIzZTVlNzM1NmI1M2E0ZTAy
ZDhhYmU3MjRkMGYuLmRhYmE4ZWRmMzJjNmRhMDgyOGYwY2JhOTA1NmE4ZjUxMTljYzE1ZWUgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21p
dW0ucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJv
bWl1bS5weQpAQCAtMzY0LDcgKzM2NCw3IEBAIGNsYXNzIENocm9taXVtUG9ydChQb3J0KToKIAog
ICAgIGRlZiByZXBvc2l0b3J5X3BhdGhzKHNlbGYpOgogICAgICAgICByZXBvcyA9IHN1cGVyKENo
cm9taXVtUG9ydCwgc2VsZikucmVwb3NpdG9yeV9wYXRocygpCi0gICAgICAgIHJlcG9zLmFwcGVu
ZCgoJ2Nocm9taXVtJywgc2VsZi5wYXRoX2Zyb21fY2hyb21pdW1fYmFzZSgnYnVpbGQnKSkpCisg
ICAgICAgIHJlcG9zLmFwcGVuZCgoJ0Nocm9taXVtJywgc2VsZi5wYXRoX2Zyb21fY2hyb21pdW1f
YmFzZSgnYnVpbGQnKSkpCiAgICAgICAgIHJldHVybiByZXBvcwogCiAgICAgZGVmIF9nZXRfY3Jh
c2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4pOgpkaWZm
IC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVz
dHNydW5uZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3Bl
cmZ0ZXN0c3J1bm5lci5weQppbmRleCA4YjUyNGQ0Y2RlNTM1OGU2ZTFiMzEzNjc2ZWQ1NjVmZjhm
MTM0ZjFhLi4wNzA5YjA1MDczYTY5YTFjNTc5MzFhM2U0ZTUzM2JiYzBlMmY2MzViIDEwMDY0NAot
LS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0c3J1
bm5lci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3Bl
cmZ0ZXN0c3J1bm5lci5weQpAQCAtMzMsNiArMzMsNyBAQCBpbXBvcnQganNvbgogaW1wb3J0IGxv
Z2dpbmcKIGltcG9ydCBvcHRwYXJzZQogaW1wb3J0IHRpbWUKK2ltcG9ydCBkYXRldGltZQogCiBm
cm9tIHdlYmtpdHB5LmNvbW1vbiBpbXBvcnQgZmluZF9maWxlcwogZnJvbSB3ZWJraXRweS5jb21t
b24uY2hlY2tvdXQuc2NtLmRldGVjdGlvbiBpbXBvcnQgU0NNRGV0ZWN0b3IKQEAgLTY3LDYgKzY4
LDcgQEAgY2xhc3MgUGVyZlRlc3RzUnVubmVyKG9iamVjdCk6CiAgICAgICAgIHNlbGYuX2Jhc2Vf
cGF0aCA9IHNlbGYuX3BvcnQucGVyZl90ZXN0c19kaXIoKQogICAgICAgICBzZWxmLl9yZXN1bHRz
ID0ge30KICAgICAgICAgc2VsZi5fdGltZXN0YW1wID0gdGltZS50aW1lKCkKKyAgICAgICAgc2Vs
Zi5fdXRjX3RpbWVzdGFtcCA9IGRhdGV0aW1lLmRhdGV0aW1lLnV0Y25vdygpCiAgICAgICAgIHNl
bGYuX25lZWRzX2h0dHAgPSBOb25lCiAgICAgICAgIHNlbGYuX2hhc19odHRwX2xvY2sgPSBGYWxz
ZQogCkBAIC0xMjYsOCArMTI4LDYgQEAgY2xhc3MgUGVyZlRlc3RzUnVubmVyKG9iamVjdCk6CiAg
ICAgICAgIHJldHVybiBvcHRwYXJzZS5PcHRpb25QYXJzZXIob3B0aW9uX2xpc3Q9KHBlcmZfb3B0
aW9uX2xpc3QpKS5wYXJzZV9hcmdzKGFyZ3MpCiAKICAgICBkZWYgX2NvbGxlY3RfdGVzdHMoc2Vs
Zik6Ci0gICAgICAgICIiIlJldHVybiB0aGUgbGlzdCBvZiB0ZXN0cyBmb3VuZC4iIiIKLQogICAg
ICAgICB0ZXN0X2V4dGVuc2lvbnMgPSBbJy5odG1sJywgJy5zdmcnXQogICAgICAgICBpZiBzZWxm
Ll9vcHRpb25zLnJlcGxheToKICAgICAgICAgICAgIHRlc3RfZXh0ZW5zaW9ucy5hcHBlbmQoJy5y
ZXBsYXknKQpAQCAtMjA4LDI0ICsyMDgsMzAgQEAgY2xhc3MgUGVyZlRlc3RzUnVubmVyKG9iamVj
dCk6CiAgICAgZGVmIF9nZW5lcmF0ZV9hbmRfc2hvd19yZXN1bHRzKHNlbGYpOgogICAgICAgICBv
cHRpb25zID0gc2VsZi5fb3B0aW9ucwogICAgICAgICBvdXRwdXRfanNvbl9wYXRoID0gc2VsZi5f
b3V0cHV0X2pzb25fcGF0aCgpCi0gICAgICAgIG91dHB1dCA9IHNlbGYuX2dlbmVyYXRlX3Jlc3Vs
dHNfZGljdChzZWxmLl90aW1lc3RhbXAsIG9wdGlvbnMuZGVzY3JpcHRpb24sIG9wdGlvbnMucGxh
dGZvcm0sIG9wdGlvbnMuYnVpbGRlcl9uYW1lLCBvcHRpb25zLmJ1aWxkX251bWJlcikKKyAgICAg
ICAgb3V0cHV0LCBwZXJmX3dlYmtpdF9vdXRwdXQgPSBzZWxmLl9nZW5lcmF0ZV9yZXN1bHRzX2Rp
Y3Qoc2VsZi5fdGltZXN0YW1wLCBvcHRpb25zLmRlc2NyaXB0aW9uLCBvcHRpb25zLnBsYXRmb3Jt
LCBvcHRpb25zLmJ1aWxkZXJfbmFtZSwgb3B0aW9ucy5idWlsZF9udW1iZXIpCiAKICAgICAgICAg
aWYgb3B0aW9ucy5zbGF2ZV9jb25maWdfanNvbl9wYXRoOgotICAgICAgICAgICAgb3V0cHV0ID0g
c2VsZi5fbWVyZ2Vfc2xhdmVfY29uZmlnX2pzb24ob3B0aW9ucy5zbGF2ZV9jb25maWdfanNvbl9w
YXRoLCBvdXRwdXQpCisgICAgICAgICAgICBvdXRwdXQsIHBlcmZfd2Via2l0X291dHB1dCA9IHNl
bGYuX21lcmdlX3NsYXZlX2NvbmZpZ19qc29uKG9wdGlvbnMuc2xhdmVfY29uZmlnX2pzb25fcGF0
aCwgb3V0cHV0LCBwZXJmX3dlYmtpdF9vdXRwdXQpCiAgICAgICAgICAgICBpZiBub3Qgb3V0cHV0
OgogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLkVYSVRfQ09ERV9CQURfU09VUkNFX0pTT04K
IAogICAgICAgICBvdXRwdXQgPSBzZWxmLl9tZXJnZV9vdXRwdXRzX2lmX25lZWRlZChvdXRwdXRf
anNvbl9wYXRoLCBvdXRwdXQpCiAgICAgICAgIGlmIG5vdCBvdXRwdXQ6CiAgICAgICAgICAgICBy
ZXR1cm4gc2VsZi5FWElUX0NPREVfQkFEX01FUkdFCisgICAgICAgIHBlcmZfd2Via2l0X291dHB1
dCA9IFtwZXJmX3dlYmtpdF9vdXRwdXRdCiAKICAgICAgICAgcmVzdWx0c19wYWdlX3BhdGggPSBz
ZWxmLl9ob3N0LmZpbGVzeXN0ZW0uc3BsaXRleHQob3V0cHV0X2pzb25fcGF0aClbMF0gKyAnLmh0
bWwnCi0gICAgICAgIHNlbGYuX2dlbmVyYXRlX291dHB1dF9maWxlcyhvdXRwdXRfanNvbl9wYXRo
LCByZXN1bHRzX3BhZ2VfcGF0aCwgb3V0cHV0KQorICAgICAgICBwZXJmX3dlYmtpdF9qc29uX3Bh
dGggPSBzZWxmLl9ob3N0LmZpbGVzeXN0ZW0uc3BsaXRleHQob3V0cHV0X2pzb25fcGF0aClbMF0g
KyAnLXBlcmYtd2Via2l0Lmpzb24nIGlmIG9wdGlvbnMudGVzdF9yZXN1bHRzX3NlcnZlciBlbHNl
IE5vbmUKKyAgICAgICAgc2VsZi5fZ2VuZXJhdGVfb3V0cHV0X2ZpbGVzKG91dHB1dF9qc29uX3Bh
dGgsIHBlcmZfd2Via2l0X2pzb25fcGF0aCwgcmVzdWx0c19wYWdlX3BhdGgsIG91dHB1dCwgcGVy
Zl93ZWJraXRfb3V0cHV0KQogCiAgICAgICAgIGlmIG9wdGlvbnMudGVzdF9yZXN1bHRzX3NlcnZl
cjoKICAgICAgICAgICAgIGlmIG5vdCBzZWxmLl91cGxvYWRfanNvbihvcHRpb25zLnRlc3RfcmVz
dWx0c19zZXJ2ZXIsIG91dHB1dF9qc29uX3BhdGgpOgogICAgICAgICAgICAgICAgIHJldHVybiBz
ZWxmLkVYSVRfQ09ERV9GQUlMRURfVVBMT0FESU5HCiAKKyAgICAgICAgICAgICMgRklYTUU6IFJl
bW92ZSB0aGlzIGNvZGUgb25jZSB3ZSd2ZSBtYWRlIHRyYW5zaXRpb24gdG8gdXNlIHBlcmYud2Vi
a2l0Lm9yZworICAgICAgICAgICAgaWYgbm90IHNlbGYuX3VwbG9hZF9qc29uKCdwZXJmLndlYmtp
dC5vcmcnLCBwZXJmX3dlYmtpdF9qc29uX3BhdGgpOgorICAgICAgICAgICAgICAgIHJldHVybiBz
ZWxmLkVYSVRfQ09ERV9GQUlMRURfVVBMT0FESU5HCisKICAgICAgICAgaWYgb3B0aW9ucy5zaG93
X3Jlc3VsdHM6CiAgICAgICAgICAgICBzZWxmLl9wb3J0LnNob3dfcmVzdWx0c19odG1sX2ZpbGUo
cmVzdWx0c19wYWdlX3BhdGgpCiAKQEAgLTIzMyw5ICsyMzksMTMgQEAgY2xhc3MgUGVyZlRlc3Rz
UnVubmVyKG9iamVjdCk6CiAgICAgICAgIGNvbnRlbnRzID0geydyZXN1bHRzJzogc2VsZi5fcmVz
dWx0c30KICAgICAgICAgaWYgZGVzY3JpcHRpb246CiAgICAgICAgICAgICBjb250ZW50c1snZGVz
Y3JpcHRpb24nXSA9IGRlc2NyaXB0aW9uCisKKyAgICAgICAgcmV2aXNpb25zX2Zvcl9wZXJmX3dl
YmtpdCA9IHt9CiAgICAgICAgIGZvciAobmFtZSwgcGF0aCkgaW4gc2VsZi5fcG9ydC5yZXBvc2l0
b3J5X3BhdGhzKCk6CiAgICAgICAgICAgICBzY20gPSBTQ01EZXRlY3RvcihzZWxmLl9ob3N0LmZp
bGVzeXN0ZW0sIHNlbGYuX2hvc3QuZXhlY3V0aXZlKS5kZXRlY3Rfc2NtX3N5c3RlbShwYXRoKSBv
ciBzZWxmLl9ob3N0LnNjbSgpCi0gICAgICAgICAgICBjb250ZW50c1tuYW1lICsgJy1yZXZpc2lv
biddID0gc2NtLnN2bl9yZXZpc2lvbihwYXRoKQorICAgICAgICAgICAgcmV2aXNpb24gPSBzY20u
c3ZuX3JldmlzaW9uKHBhdGgpCisgICAgICAgICAgICBjb250ZW50c1tuYW1lLmxvd2VyKCkgKyAn
LXJldmlzaW9uJ10gPSByZXZpc2lvbgorICAgICAgICAgICAgcmV2aXNpb25zX2Zvcl9wZXJmX3dl
YmtpdFtuYW1lXSA9IHsncmV2aXNpb24nOiBzdHIocmV2aXNpb24pLCAndGltZXN0YW1wJzogc2Nt
LnN2bl90aW1lc3RhbXAocGF0aCl9CiAKICAgICAgICAgIyBGSVhNRTogQWRkIC0tYnJhbmNoIG9y
IGF1dG8tZGV0ZWN0IHRoZSBicmFuY2ggd2UncmUgaW4KICAgICAgICAgZm9yIGtleSwgdmFsdWUg
aW4geyd0aW1lc3RhbXAnOiBpbnQodGltZXN0YW1wKSwgJ2JyYW5jaCc6IHNlbGYuX2RlZmF1bHRf
YnJhbmNoLCAncGxhdGZvcm0nOiBwbGF0Zm9ybSwKQEAgLTI0MywyMCArMjUzLDY2IEBAIGNsYXNz
IFBlcmZUZXN0c1J1bm5lcihvYmplY3QpOgogICAgICAgICAgICAgaWYgdmFsdWU6CiAgICAgICAg
ICAgICAgICAgY29udGVudHNba2V5XSA9IHZhbHVlCiAKLSAgICAgICAgcmV0dXJuIGNvbnRlbnRz
CisgICAgICAgIGNvbnRlbnRzX2Zvcl9wZXJmX3dlYmtpdCA9IHsKKyAgICAgICAgICAgICdidWls
ZGVyTmFtZSc6IGJ1aWxkZXJfbmFtZSwKKyAgICAgICAgICAgICdidWlsZE51bWJlcic6IHN0cihi
dWlsZF9udW1iZXIpLAorICAgICAgICAgICAgJ2J1aWxkVGltZSc6IHNlbGYuX2RhdGV0aW1lX2lu
X0VTNV9jb21wYXRpYmxlX2lzb19mb3JtYXQoc2VsZi5fdXRjX3RpbWVzdGFtcCksCisgICAgICAg
ICAgICAncGxhdGZvcm0nOiBwbGF0Zm9ybSwKKyAgICAgICAgICAgICdyZXZpc2lvbnMnOiByZXZp
c2lvbnNfZm9yX3BlcmZfd2Via2l0LAorICAgICAgICAgICAgJ3Rlc3RzJzoge319CisKKyAgICAg
ICAgZm9yIG1ldHJpY19mdWxsX25hbWUgaW4gc2VsZi5fcmVzdWx0czoKKyAgICAgICAgICAgIHJl
c3VsdCA9IHNlbGYuX3Jlc3VsdHNbbWV0cmljX2Z1bGxfbmFtZV0KKworICAgICAgICAgICAgIyBX
ZSBjYW4ndCByZXByb3QgcmVzdWx0cyB3aXRob3V0IGluZGl2aXN1YWwgbWVhc3VyZW1lbnRzLgor
ICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UocmVzdWx0LCBkaWN0KToKKyAgICAgICAgICAg
ICAgICBjb250aW51ZQorCisgICAgICAgICAgICBhc3NlcnQgbWV0cmljX2Z1bGxfbmFtZS5jb3Vu
dCgnOicpIDw9IDEKKyAgICAgICAgICAgIHRlc3RfZnVsbF9uYW1lLCBfLCBtZXRyaWMgPSBtZXRy
aWNfZnVsbF9uYW1lLnBhcnRpdGlvbignOicpCisgICAgICAgICAgICBpZiBub3QgbWV0cmljOgor
ICAgICAgICAgICAgICAgIG1ldHJpYyA9IHsnZnBzJzogJ0ZyYW1lUmF0ZScsICdydW5zL3MnOiAn
UnVucycsICdtcyc6ICdUaW1lJ31bcmVzdWx0Wyd1bml0J11dCisKKyAgICAgICAgICAgIHRlc3Rz
ID0gY29udGVudHNfZm9yX3BlcmZfd2Via2l0Wyd0ZXN0cyddCisgICAgICAgICAgICBwYXRoID0g
dGVzdF9mdWxsX25hbWUuc3BsaXQoJy8nKQorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwg
bGVuKHBhdGgpKToKKyAgICAgICAgICAgICAgICAjIEZJWE1FOiBXZSBzaG91bGRuJ3QgYXNzdW1l
IEhUTUwgZXh0ZW5zaW9uLgorICAgICAgICAgICAgICAgIGlzX2xhc3RfdG9rZW4gPSBpICsgMSA9
PSBsZW4ocGF0aCkKKyAgICAgICAgICAgICAgICB1cmwgPSAnaHR0cDovL3RyYWMud2Via2l0Lm9y
Zy9icm93c2VyL3RydW5rL1BlcmZvcm1hbmNlVGVzdHMvJyArICcvJy5qb2luKHBhdGhbMDppICsg
MV0pCisgICAgICAgICAgICAgICAgaWYgaXNfbGFzdF90b2tlbjoKKyAgICAgICAgICAgICAgICAg
ICAgdXJsICs9ICcuaHRtbCcKKworICAgICAgICAgICAgICAgIHRlc3RzLnNldGRlZmF1bHQocGF0
aFtpXSwgeyd1cmwnOiB1cmx9KQorICAgICAgICAgICAgICAgIGN1cnJlbnRfdGVzdCA9IHRlc3Rz
W3BhdGhbaV1dCisgICAgICAgICAgICAgICAgaWYgaXNfbGFzdF90b2tlbjoKKyAgICAgICAgICAg
ICAgICAgICAgY3VycmVudF90ZXN0LnNldGRlZmF1bHQoJ21ldHJpY3MnLCB7fSkKKyAgICAgICAg
ICAgICAgICAgICAgYXNzZXJ0IG1ldHJpYyBub3QgaW4gY3VycmVudF90ZXN0WydtZXRyaWNzJ10K
KyAgICAgICAgICAgICAgICAgICAgY3VycmVudF90ZXN0WydtZXRyaWNzJ11bbWV0cmljXSA9IHsn
Y3VycmVudCc6IHJlc3VsdFsndmFsdWVzJ119CisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgICAgICAgICAgY3VycmVudF90ZXN0LnNldGRlZmF1bHQoJ3Rlc3RzJywge30pCisgICAg
ICAgICAgICAgICAgICAgIHRlc3RzID0gY3VycmVudF90ZXN0Wyd0ZXN0cyddCisKKyAgICAgICAg
cmV0dXJuIGNvbnRlbnRzLCBjb250ZW50c19mb3JfcGVyZl93ZWJraXQKIAotICAgIGRlZiBfbWVy
Z2Vfc2xhdmVfY29uZmlnX2pzb24oc2VsZiwgc2xhdmVfY29uZmlnX2pzb25fcGF0aCwgb3V0cHV0
KToKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9kYXRldGltZV9pbl9FUzVfY29tcGF0aWJs
ZV9pc29fZm9ybWF0KGRhdGV0aW1lKToKKyAgICAgICAgcmV0dXJuIGRhdGV0aW1lLnN0cmZ0aW1l
KCclWS0lbS0lZFQlSDolTTolUy4lZicpCisKKyAgICBkZWYgX21lcmdlX3NsYXZlX2NvbmZpZ19q
c29uKHNlbGYsIHNsYXZlX2NvbmZpZ19qc29uX3BhdGgsIGNvbnRlbnRzLCBjb250ZW50c19mb3Jf
cGVyZl93ZWJraXQpOgogICAgICAgICBpZiBub3Qgc2VsZi5faG9zdC5maWxlc3lzdGVtLmlzZmls
ZShzbGF2ZV9jb25maWdfanNvbl9wYXRoKToKICAgICAgICAgICAgIF9sb2cuZXJyb3IoIk1pc3Np
bmcgc2xhdmUgY29uZmlndXJhdGlvbiBKU09OIGZpbGU6ICVzIiAlIHNsYXZlX2NvbmZpZ19qc29u
X3BhdGgpCi0gICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgcmV0dXJuIE5vbmUs
IE5vbmUKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzbGF2ZV9jb25maWdfanNvbiA9IHNl
bGYuX2hvc3QuZmlsZXN5c3RlbS5vcGVuX3RleHRfZmlsZV9mb3JfcmVhZGluZyhzbGF2ZV9jb25m
aWdfanNvbl9wYXRoKQogICAgICAgICAgICAgc2xhdmVfY29uZmlnID0ganNvbi5sb2FkKHNsYXZl
X2NvbmZpZ19qc29uKQotICAgICAgICAgICAgcmV0dXJuIGRpY3Qoc2xhdmVfY29uZmlnLml0ZW1z
KCkgKyBvdXRwdXQuaXRlbXMoKSkKKyAgICAgICAgICAgIGNvbnRlbnRzID0gZGljdChzbGF2ZV9j
b25maWcuaXRlbXMoKSArIGNvbnRlbnRzLml0ZW1zKCkpCisgICAgICAgICAgICBmb3Iga2V5IGlu
IHNsYXZlX2NvbmZpZzoKKyAgICAgICAgICAgICAgICBjb250ZW50c19mb3JfcGVyZl93ZWJraXRb
J2J1aWxkZXInICsga2V5LmNhcGl0YWxpemUoKV0gPSBzbGF2ZV9jb25maWdba2V5XQorICAgICAg
ICAgICAgcmV0dXJuIGNvbnRlbnRzLCBjb250ZW50c19mb3JfcGVyZl93ZWJraXQKICAgICAgICAg
ZXhjZXB0IEV4Y2VwdGlvbiwgZXJyb3I6CiAgICAgICAgICAgICBfbG9nLmVycm9yKCJGYWlsZWQg
dG8gbWVyZ2Ugc2xhdmUgY29uZmlndXJhdGlvbiBKU09OIGZpbGUgJXM6ICVzIiAlIChzbGF2ZV9j
b25maWdfanNvbl9wYXRoLCBlcnJvcikpCi0gICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHJl
dHVybiBOb25lLCBOb25lCiAKICAgICBkZWYgX21lcmdlX291dHB1dHNfaWZfbmVlZGVkKHNlbGYs
IG91dHB1dF9qc29uX3BhdGgsIG91dHB1dCk6CiAgICAgICAgIGlmIHNlbGYuX29wdGlvbnMucmVz
ZXRfcmVzdWx0cyBvciBub3Qgc2VsZi5faG9zdC5maWxlc3lzdGVtLmlzZmlsZShvdXRwdXRfanNv
bl9wYXRoKToKQEAgLTI2OCwxMiArMzI0LDE1IEBAIGNsYXNzIFBlcmZUZXN0c1J1bm5lcihvYmpl
Y3QpOgogICAgICAgICAgICAgX2xvZy5lcnJvcigiRmFpbGVkIHRvIG1lcmdlIG91dHB1dCBKU09O
IGZpbGUgJXM6ICVzIiAlIChvdXRwdXRfanNvbl9wYXRoLCBlcnJvcikpCiAgICAgICAgIHJldHVy
biBOb25lCiAKLSAgICBkZWYgX2dlbmVyYXRlX291dHB1dF9maWxlcyhzZWxmLCBvdXRwdXRfanNv
bl9wYXRoLCByZXN1bHRzX3BhZ2VfcGF0aCwgb3V0cHV0KToKKyAgICBkZWYgX2dlbmVyYXRlX291
dHB1dF9maWxlcyhzZWxmLCBvdXRwdXRfanNvbl9wYXRoLCBwZXJmX3dlYmtpdF9qc29uX3BhdGgs
IHJlc3VsdHNfcGFnZV9wYXRoLCBvdXRwdXQsIHBlcmZfd2Via2l0X291dHB1dCk6CiAgICAgICAg
IGZpbGVzeXN0ZW0gPSBzZWxmLl9ob3N0LmZpbGVzeXN0ZW0KIAogICAgICAgICBqc29uX291dHB1
dCA9IGpzb24uZHVtcHMob3V0cHV0KQogICAgICAgICBmaWxlc3lzdGVtLndyaXRlX3RleHRfZmls
ZShvdXRwdXRfanNvbl9wYXRoLCBqc29uX291dHB1dCkKIAorICAgICAgICBpZiBwZXJmX3dlYmtp
dF9qc29uX3BhdGg6CisgICAgICAgICAgICBmaWxlc3lzdGVtLndyaXRlX3RleHRfZmlsZShwZXJm
X3dlYmtpdF9qc29uX3BhdGgsIGpzb24uZHVtcHMocGVyZl93ZWJraXRfb3V0cHV0KSkKKwogICAg
ICAgICBpZiByZXN1bHRzX3BhZ2VfcGF0aDoKICAgICAgICAgICAgIHRlbXBsYXRlX3BhdGggPSBm
aWxlc3lzdGVtLmpvaW4oc2VsZi5fcG9ydC5wZXJmX3Rlc3RzX2RpcigpLCAncmVzb3VyY2VzL3Jl
c3VsdHMtdGVtcGxhdGUuaHRtbCcpCiAgICAgICAgICAgICB0ZW1wbGF0ZSA9IGZpbGVzeXN0ZW0u
cmVhZF90ZXh0X2ZpbGUodGVtcGxhdGVfcGF0aCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3RzcnVubmVyX2ludGVncmF0aW9udGVz
dC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3Rz
cnVubmVyX2ludGVncmF0aW9udGVzdC5weQppbmRleCA1MzQxMDRjYmI2NjkyNWQ1ZDQ4MzNlMDkx
NTBmZjcwNTJmM2ZjOGI1Li4yZWNmZTVmZjUwZjM3NWQ2N2QyNTIyM2YzOWNhYzE0OTEwNjNhMzhj
IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3Bl
cmZ0ZXN0c3J1bm5lcl9pbnRlZ3JhdGlvbnRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdHNydW5uZXJfaW50ZWdyYXRpb250ZXN0LnB5
CkBAIC0yOSw2ICsyOSw3IEBACiAiIiJJbnRlZ3JhdGlvbiB0ZXN0cyBmb3IgcnVuX3BlcmZfdGVz
dHMuIiIiCiAKIGltcG9ydCBTdHJpbmdJTworaW1wb3J0IGRhdGV0aW1lCiBpbXBvcnQganNvbgog
aW1wb3J0IHJlCiBpbXBvcnQgdW5pdHRlc3QyIGFzIHVuaXR0ZXN0CkBAIC0zMjIsMTMgKzMyMywx
NSBAQCBjbGFzcyBNYWluVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHVwbG9hZGVk
ID0gW0ZhbHNlXQogCiAgICAgICAgIGRlZiBtb2NrX3VwbG9hZF9qc29uKGhvc3RuYW1lLCBqc29u
X3BhdGgpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob3N0bmFtZSwgJ3NvbWUuaG9z
dCcpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpzb25fcGF0aCwgJy9tb2NrLWNoZWNr
b3V0L291dHB1dC5qc29uJykKKyAgICAgICAgICAgICMgRklYTUU6IEdldCByaWQgb2YgdGhlIGhh
cmQtY29kZWQgcGVyZi53ZWJraXQub3JnIG9uY2Ugd2UndmUgY29tcGxldGVkIHRoZSB0cmFuc2l0
aW9uLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihob3N0bmFtZSwgWydzb21lLmhvc3QnLCAn
cGVyZi53ZWJraXQub3JnJ10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGpzb25fcGF0aCwg
WycvbW9jay1jaGVja291dC9vdXRwdXQuanNvbicsICcvbW9jay1jaGVja291dC9vdXRwdXQtcGVy
Zi13ZWJraXQuanNvbiddKQogICAgICAgICAgICAgdXBsb2FkZWRbMF0gPSB1cGxvYWRfc3VjZWVk
cwogICAgICAgICAgICAgcmV0dXJuIHVwbG9hZF9zdWNlZWRzCiAKICAgICAgICAgcnVubmVyLl91
cGxvYWRfanNvbiA9IG1vY2tfdXBsb2FkX2pzb24KICAgICAgICAgcnVubmVyLl90aW1lc3RhbXAg
PSAxMjM0NTY3ODkKKyAgICAgICAgcnVubmVyLl91dGNfdGltZXN0YW1wID0gZGF0ZXRpbWUuZGF0
ZXRpbWUoMjAxMywgMiwgOCwgMTUsIDE5LCAzNywgNDYwMDAwKQogICAgICAgICBvdXRwdXRfY2Fw
dHVyZSA9IE91dHB1dENhcHR1cmUoKQogICAgICAgICBvdXRwdXRfY2FwdHVyZS5jYXB0dXJlX291
dHB1dCgpCiAgICAgICAgIHRyeToKQEAgLTUyMSw2ICs1MjQsMzMgQEAgY2xhc3MgTWFpblRlc3Qo
dW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgICAgIHNlbGYuX3Rlc3RfcnVuX3dpdGhfanNvbl9v
dXRwdXQocnVubmVyLCBwb3J0Lmhvc3QuZmlsZXN5c3RlbSwgdXBsb2FkX3N1Y2VlZHM9RmFsc2Us
IGV4cGVjdGVkX2V4aXRfY29kZT1QZXJmVGVzdHNSdW5uZXIuRVhJVF9DT0RFX0ZBSUxFRF9VUExP
QURJTkcpCiAKKyAgICBkZWYgdGVzdF9ydW5fd2l0aF91cGxvYWRfanNvbl9zaG91bGRfZ2VuZXJh
dGVfcGVyZl93ZWJraXRfanNvbihzZWxmKToKKyAgICAgICAgcnVubmVyLCBwb3J0ID0gc2VsZi5j
cmVhdGVfcnVubmVyX2FuZF9zZXR1cF9yZXN1bHRzX3RlbXBsYXRlKGFyZ3M9WyctLW91dHB1dC1q
c29uLXBhdGg9L21vY2stY2hlY2tvdXQvb3V0cHV0Lmpzb24nLAorICAgICAgICAgICAgJy0tdGVz
dC1yZXN1bHRzLXNlcnZlcicsICdzb21lLmhvc3QnLCAnLS1wbGF0Zm9ybScsICdwbGF0Zm9ybTEn
LCAnLS1idWlsZGVyLW5hbWUnLCAnYnVpbGRlcjEnLCAnLS1idWlsZC1udW1iZXInLCAnMTIzJywK
KyAgICAgICAgICAgICctLXNsYXZlLWNvbmZpZy1qc29uLXBhdGg9L21vY2stY2hlY2tvdXQvc2xh
dmUtY29uZmlnLmpzb24nXSkKKyAgICAgICAgcG9ydC5ob3N0LmZpbGVzeXN0ZW0ud3JpdGVfdGV4
dF9maWxlKCcvbW9jay1jaGVja291dC9zbGF2ZS1jb25maWcuanNvbicsICd7ImtleSI6ICJ2YWx1
ZTEifScpCisKKyAgICAgICAgc2VsZi5fdGVzdF9ydW5fd2l0aF9qc29uX291dHB1dChydW5uZXIs
IHBvcnQuaG9zdC5maWxlc3lzdGVtLCB1cGxvYWRfc3VjZWVkcz1UcnVlKQorICAgICAgICBnZW5l
cmF0ZWRfanNvbiA9IGpzb24ubG9hZHMocG9ydC5ob3N0LmZpbGVzeXN0ZW0uZmlsZXNbJy9tb2Nr
LWNoZWNrb3V0L291dHB1dC1wZXJmLXdlYmtpdC5qc29uJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0
VHJ1ZShpc2luc3RhbmNlKGdlbmVyYXRlZF9qc29uLCBsaXN0KSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChsZW4oZ2VuZXJhdGVkX2pzb24pLCAxKQorCisgICAgICAgIG91dHB1dCA9IGdlbmVy
YXRlZF9qc29uWzBdCisgICAgICAgIHNlbGYubWF4RGlmZiA9IE5vbmUKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChvdXRwdXRbJ3BsYXRmb3JtJ10sICdwbGF0Zm9ybTEnKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKG91dHB1dFsnYnVpbGROdW1iZXInXSwgJzEyMycpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwob3V0cHV0WydidWlsZFRpbWUnXSwgJzIwMTMtMDItMDhUMTU6MTk6MzcuNDYw
MDAwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXRbJ2J1aWxkZXJOYW1lJ10sICdi
dWlsZGVyMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0WydidWlsZGVyS2V5J10s
ICd2YWx1ZTEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dFsncmV2aXNpb25zJ10s
IHsnV2ViS2l0JzogeydyZXZpc2lvbic6ICc1Njc4JywgJ3RpbWVzdGFtcCc6ICcyMDEzLTAyLTAx
IDA4OjQ4OjA1ICswMDAwJ319KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dFsndGVz
dHMnXS5rZXlzKCksIFsnQmluZGluZ3MnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0
ZWQob3V0cHV0Wyd0ZXN0cyddWydCaW5kaW5ncyddLmtleXMoKSksIFsndGVzdHMnLCAndXJsJ10p
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0Wyd0ZXN0cyddWydCaW5kaW5ncyddWyd1
cmwnXSwgJ2h0dHA6Ly90cmFjLndlYmtpdC5vcmcvYnJvd3Nlci90cnVuay9QZXJmb3JtYW5jZVRl
c3RzL0JpbmRpbmdzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXRbJ3Rlc3RzJ11b
J0JpbmRpbmdzJ11bJ3Rlc3RzJ10ua2V5cygpLCBbJ2V2ZW50LXRhcmdldC13cmFwcGVyJ10pCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0Wyd0ZXN0cyddWydCaW5kaW5ncyddWyd0ZXN0
cyddWydldmVudC10YXJnZXQtd3JhcHBlciddLCB7CisgICAgICAgICAgICAndXJsJzogJ2h0dHA6
Ly90cmFjLndlYmtpdC5vcmcvYnJvd3Nlci90cnVuay9QZXJmb3JtYW5jZVRlc3RzL0JpbmRpbmdz
L2V2ZW50LXRhcmdldC13cmFwcGVyLmh0bWwnLAorICAgICAgICAgICAgJ21ldHJpY3MnOiB7J1Rp
bWUnOiB7J2N1cnJlbnQnOiBbMTQ4Ni4wLCAxNDcxLjAsIDE1MTAuMCwgMTUwNS4wLCAxNDc4LjAs
IDE0OTAuMF19fX0pCisKICAgICBkZWYgdGVzdF91cGxvYWRfanNvbihzZWxmKToKICAgICAgICAg
cnVubmVyLCBwb3J0ID0gc2VsZi5jcmVhdGVfcnVubmVyKCkKICAgICAgICAgcG9ydC5ob3N0LmZp
bGVzeXN0ZW0uZmlsZXNbJy9tb2NrLWNoZWNrb3V0L3NvbWUuanNvbiddID0gJ3NvbWUgY29udGVu
dCcK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187412</attachid>
            <date>2013-02-08 21:55:02 -0800</date>
            <delta_ts>2013-02-21 20:43:56 -0800</delta_ts>
            <desc>Work in progress 4</desc>
            <filename>bug-108577-20130208215137.patch</filename>
            <type>text/plain</type>
            <size>22031</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9naXQucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2Nt
L2dpdC5weQkocmV2aXNpb24gMTQyMzQ2KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vY2hlY2tvdXQvc2NtL2dpdC5weQkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAog
IyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAoraW1wb3J0IGRhdGV0aW1lCiBpbXBvcnQg
bG9nZ2luZwogaW1wb3J0IG9zCiBpbXBvcnQgcmUKQEAgLTI1Myw2ICsyNTQsMjEgQEAgY2xhc3Mg
R2l0KFNDTSwgU1ZOUmVwb3NpdG9yeSk6CiAgICAgICAgICAgICByZXR1cm4gIiIKICAgICAgICAg
cmV0dXJuIHN0cihtYXRjaC5ncm91cCgnc3ZuX3JldmlzaW9uJykpCiAKKyAgICBkZWYgc3ZuX3Rp
bWVzdGFtcChzZWxmLCBwYXRoKToKKyAgICAgICAgZ2l0X2xvZyA9IHNlbGYuX3J1bl9naXQoWyds
b2cnLCAnLTI1JywgJy0tZGF0ZT1pc28nLCBzZWxmLmZpbmRfY2hlY2tvdXRfcm9vdChwYXRoKV0p
CisgICAgICAgIG1hdGNoID0gcmUuc2VhcmNoKCJeRGF0ZTpccyooXGR7NH0pLShcZHsyfSktKFxk
ezJ9KSAoXGR7Mn0pOihcZHsyfSk6KFxkezJ9KSAoWystXSkoXGR7Mn0pKFxkezJ9KSQiLCBnaXRf
bG9nLCByZS5NVUxUSUxJTkUpCisgICAgICAgIGlmIG5vdCBtYXRjaDoKKyAgICAgICAgICAgIHJl
dHVybiAiIgorCisgICAgICAgICMgTWFudWFsbHkgbW9kaWZ5IHRoZSB0aW1lem9uZSBzaW5jZSBH
aXQgZG9lc24ndCBoYXZlIGFuIG9wdGl0b24gdG8gc2hvdyBpdCBpbiBVVEMuCisgICAgICAgICMg
R2l0IGFsc28gdHJ1bmNhdGVzIG1pbGxpc2Vjb25kcyBidXQgd2UncmUgZ29pbmcgdG8gaWdub3Jl
IHRoYXQgZm9yIG5vdy4KKyAgICAgICAgdGltZV93aXRoX3RpbWV6b25lID0gZGF0ZXRpbWUuZGF0
ZXRpbWUoaW50KG1hdGNoLmdyb3VwKDEpKSwgaW50KG1hdGNoLmdyb3VwKDIpKSwgaW50KG1hdGNo
Lmdyb3VwKDMpKSwKKyAgICAgICAgICAgIGludChtYXRjaC5ncm91cCg0KSksIGludChtYXRjaC5n
cm91cCg1KSksIGludChtYXRjaC5ncm91cCg2KSksIDApCisKKyAgICAgICAgc2lnbiA9IDEgaWYg
bWF0Y2guZ3JvdXAoNykgPT0gJysnIGVsc2UgLTEKKyAgICAgICAgdGltZV93aWhvdXRfdGltZXpv
bmUgPSB0aW1lX3dpdGhfdGltZXpvbmUgLSBkYXRldGltZS50aW1lZGVsdGEoaG91cnM9c2lnbiAq
IGludChtYXRjaC5ncm91cCg4KSksIG1pbnV0ZXM9aW50KG1hdGNoLmdyb3VwKDkpKSkKKyAgICAg
ICAgcmV0dXJuIHRpbWVfd2lob3V0X3RpbWV6b25lLnN0cmZ0aW1lKCclWS0lbS0lZFQlSDolTTol
U1onKQorCiAgICAgZGVmIHByZXBlbmRfc3ZuX3JldmlzaW9uKHNlbGYsIGRpZmYpOgogICAgICAg
ICByZXZpc2lvbiA9IHNlbGYuaGVhZF9zdm5fcmV2aXNpb24oKQogICAgICAgICBpZiBub3QgcmV2
aXNpb246CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20v
c2NtLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNr
b3V0L3NjbS9zY20ucHkJKHJldmlzaW9uIDE0MjM0NikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zY20ucHkJKHdvcmtpbmcgY29weSkKQEAgLTE2OSw2ICsx
NjksOSBAQCBjbGFzcyBTQ006CiAgICAgZGVmIHN2bl9yZXZpc2lvbihzZWxmLCBwYXRoKToKICAg
ICAgICAgc2VsZi5fc3ViY2xhc3NfbXVzdF9pbXBsZW1lbnQoKQogCisgICAgZGVmIHN2bl90aW1l
c3RhbXAoc2VsZiwgcGF0aCk6CisgICAgICAgIHNlbGYuX3N1YmNsYXNzX211c3RfaW1wbGVtZW50
KCkKKwogICAgIGRlZiBjcmVhdGVfcGF0Y2goc2VsZiwgZ2l0X2NvbW1pdD1Ob25lLCBjaGFuZ2Vk
X2ZpbGVzPU5vbmUpOgogICAgICAgICBzZWxmLl9zdWJjbGFzc19tdXN0X2ltcGxlbWVudCgpCiAK
SW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zY21fbW9j
ay5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291
dC9zY20vc2NtX21vY2sucHkJKHJldmlzaW9uIDE0MjM0NikKKysrIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zY21fbW9jay5weQkod29ya2luZyBjb3B5KQpAQCAt
ODQsNiArODQsOSBAQCBjbGFzcyBNb2NrU0NNKG9iamVjdCk6CiAgICAgZGVmIHN2bl9yZXZpc2lv
bihzZWxmLCBwYXRoKToKICAgICAgICAgcmV0dXJuICc1Njc4JwogCisgICAgZGVmIHN2bl90aW1l
c3RhbXAoc2VsZiwgcGF0aCk6CisgICAgICAgIHJldHVybiAnMjAxMy0wMi0wMSAwODo0ODowNSAr
MDAwMCcKKwogICAgIGRlZiBjcmVhdGVfcGF0Y2goc2VsZiwgZ2l0X2NvbW1pdCwgY2hhbmdlZF9m
aWxlcz1Ob25lKToKICAgICAgICAgcmV0dXJuICJQYXRjaDEiCiAKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zY21fdW5pdHRlc3QucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3NjbV91bml0
dGVzdC5weQkocmV2aXNpb24gMTQyMzQ2KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vY2hlY2tvdXQvc2NtL3NjbV91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMTU3Nywz
ICsxNTc3LDE2IEBAIE1PQ0sgcnVuX2NvbW1hbmQ6IFsnZ2l0JywgJ2xvZycsICctMjUnLCAKIAog
ICAgIGRlZiB0ZXN0X3B1c2hfbG9jYWxfY29tbWl0c190b19zZXJ2ZXJfd2l0aG91dF91c2VybmFt
ZV9hbmRfd2l0aF9wYXNzd29yZChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXV0
aGVudGljYXRpb25FcnJvciwgc2VsZi5tYWtlX3NjbSgpLnB1c2hfbG9jYWxfY29tbWl0c190b19z
ZXJ2ZXIsIHsncGFzc3dvcmQnOiAnYmxhaCd9KQorCisgICAgZGVmIHRlc3Rfc3ZuX3RpbWVzdGFt
cChzZWxmKToKKyAgICAgICAgc2NtID0gc2VsZi5tYWtlX3NjbSgpCisgICAgICAgIHNjbS5maW5k
X2NoZWNrb3V0X3Jvb3QgPSBsYW1iZGEgcGF0aDogJycKKyAgICAgICAgc2NtLl9ydW5fZ2l0ID0g
bGFtYmRhIGFyZ3M6ICdEYXRlOiAyMDEzLTAyLTA4IDA4OjA1OjQ5ICswMDAwJworICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHNjbS5zdm5fdGltZXN0YW1wKCdzb21lLXBhdGgnKSwgJzIwMTMtMDIt
MDhUMDg6MDU6NDlaJykKKworICAgICAgICBzY20uX3J1bl9naXQgPSBsYW1iZGEgYXJnczogJ0Rh
dGU6IDIwMTMtMDItMDggMDE6MDI6MDMgKzAxMzAnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
c2NtLnN2bl90aW1lc3RhbXAoJ3NvbWUtcGF0aCcpLCAnMjAxMy0wMi0wN1QyMzozMjowM1onKQor
CisgICAgICAgIHNjbS5fcnVuX2dpdCA9IGxhbWJkYSBhcmdzOiAnRGF0ZTogMjAxMy0wMi0wOCAw
MTo1NToyMSAtMDgwMCcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzY20uc3ZuX3RpbWVzdGFt
cCgnc29tZS1wYXRoJyksICcyMDEzLTAyLTA4VDA5OjU1OjIxWicpCisKSW5kZXg6IFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zdm4ucHkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3N2bi5weQkocmV2aXNp
b24gMTQyMzQ2KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2Nt
L3N2bi5weQkod29ya2luZyBjb3B5KQpAQCAtMjQ2LDYgKzI0NiwxMiBAQCBjbGFzcyBTVk4oU0NN
LCBTVk5SZXBvc2l0b3J5KToKICAgICBkZWYgc3ZuX3JldmlzaW9uKHNlbGYsIHBhdGgpOgogICAg
ICAgICByZXR1cm4gc2VsZi52YWx1ZV9mcm9tX3N2bl9pbmZvKHBhdGgsICdSZXZpc2lvbicpCiAK
KyAgICBkZWYgc3ZuX3RpbWVzdGFtcChzZWxmLCBwYXRoKToKKyAgICAgICAgIyBXZSB1c2UgLS14
bWwgdG8gZ2V0IHRpbWVzdGFtcHMgbGlrZSAyMDEzLTAyLTA4VDA4OjE4OjA0Ljk2NDQwOVoKKyAg
ICAgICAgaW5mb19vdXRwdXQgPSBFeGVjdXRpdmUoKS5ydW5fY29tbWFuZChbc2VsZi5leGVjdXRh
YmxlX25hbWUsICdpbmZvJywgJy0teG1sJ10sIGN3ZD1wYXRoKS5yc3RyaXAoKQorICAgICAgICBt
YXRjaCA9IHJlLnNlYXJjaChyIl48ZGF0ZT4oP1A8dmFsdWU+LispPC9kYXRlPiQiLCBpbmZvX291
dHB1dCwgcmUuTVVMVElMSU5FKQorICAgICAgICByZXR1cm4gbWF0Y2guZ3JvdXAoJ3ZhbHVlJykK
KwogICAgICMgRklYTUU6IFRoaXMgbWV0aG9kIHNob3VsZCBiZSBvbiBDaGVja291dC4KICAgICBk
ZWYgY3JlYXRlX3BhdGNoKHNlbGYsIGdpdF9jb21taXQ9Tm9uZSwgY2hhbmdlZF9maWxlcz1Ob25l
KToKICAgICAgICAgIiIiUmV0dXJucyBhIGJ5dGUgYXJyYXkgKHN0cigpKSByZXByZXNlbnRpbmcg
dGhlIHBhdGNoIGZpbGUuCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25f
cmVzdWx0c19nZW5lcmF0b3IucHkJKHJldmlzaW9uIDE0MjM0NikKKysrIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5lcmF0
b3IucHkJKHdvcmtpbmcgY29weSkKQEAgLTUyNiwxMSArNTI2LDEyIEBAIGNsYXNzIEpTT05SZXN1
bHRzR2VuZXJhdG9yQmFzZShvYmplY3QpOgogICAgICAgICBmb3IgKG5hbWUsIHBhdGgpIGluIHNl
bGYuX3N2bl9yZXBvc2l0b3JpZXM6CiAgICAgICAgICAgICAjIE5vdGU6IGZvciBKU09OIGZpbGUn
cyBiYWNrd2FyZC1jb21wYXRpYmlsaXR5IHdlIHVzZSAnY2hyb21lJyByYXRoZXIKICAgICAgICAg
ICAgICMgdGhhbiAnY2hyb21pdW0nIGhlcmUuCi0gICAgICAgICAgICBpZiBuYW1lID09ICdjaHJv
bWl1bSc6Ci0gICAgICAgICAgICAgICAgbmFtZSA9ICdjaHJvbWUnCisgICAgICAgICAgICBsb3dl
cmNhc2VfbmFtZSA9IG5hbWUubG93ZXIoKQorICAgICAgICAgICAgaWYgbG93ZXJjYXNlX25hbWUg
PT0gJ2Nocm9taXVtJzoKKyAgICAgICAgICAgICAgICBsb3dlcmNhc2VfbmFtZSA9ICdjaHJvbWUn
CiAgICAgICAgICAgICBzZWxmLl9pbnNlcnRfaXRlbV9pbnRvX3Jhd19saXN0KHJlc3VsdHNfZm9y
X2J1aWxkZXIsCiAgICAgICAgICAgICAgICAgc2VsZi5fZ2V0X3N2bl9yZXZpc2lvbihwYXRoKSwK
LSAgICAgICAgICAgICAgICBuYW1lICsgJ1JldmlzaW9uJykKKyAgICAgICAgICAgICAgICBsb3dl
cmNhc2VfbmFtZSArICdSZXZpc2lvbicpCiAKICAgICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1faW50
b19yYXdfbGlzdChyZXN1bHRzX2Zvcl9idWlsZGVyLAogICAgICAgICAgICAgaW50KHRpbWUudGlt
ZSgpKSwKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFz
ZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L2Jhc2UucHkJKHJldmlzaW9uIDE0MjM0NikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weQkod29ya2luZyBjb3B5KQpAQCAtMTA5MCwxMSArMTA5
MCwxMSBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAKICAgICBkZWYgcmVwb3NpdG9yeV9wYXRocyhz
ZWxmKToKICAgICAgICAgIiIiUmV0dXJucyBhIGxpc3Qgb2YgKHJlcG9zaXRvcnlfbmFtZSwgcmVw
b3NpdG9yeV9wYXRoKSB0dXBsZXMgb2YgaXRzIGRlcGVuZGluZyBjb2RlIGJhc2UuCi0gICAgICAg
IEJ5IGRlZmF1bHQgaXQgcmV0dXJucyBhIGxpc3QgdGhhdCBvbmx5IGNvbnRhaW5zIGEgKCd3ZWJr
aXQnLCA8d2Via2l0UmVwb3NzaXRvcnlQYXRoPikgdHVwbGUuIiIiCisgICAgICAgIEJ5IGRlZmF1
bHQgaXQgcmV0dXJucyBhIGxpc3QgdGhhdCBvbmx5IGNvbnRhaW5zIGEgKCdXZWJLaXQnLCA8d2Vi
a2l0UmVwb3NzaXRvcnlQYXRoPikgdHVwbGUuIiIiCiAKLSAgICAgICAgIyBXZSB1c2UgTGF5b3V0
VGVzdCBkaXJlY3RvcnkgaGVyZSBiZWNhdXNlIHdlYmtpdF9iYXNlIGlzbid0IGEgcGFydCB3ZWJr
aXQgcmVwb3NpdG9yeSBpbiBDaHJvbWl1bSBwb3J0CisgICAgICAgICMgV2UgdXNlIExheW91dFRl
c3QgZGlyZWN0b3J5IGhlcmUgYmVjYXVzZSB3ZWJraXRfYmFzZSBpc24ndCBhIHBhcnQgb2YgV2Vi
S2l0IHJlcG9zaXRvcnkgaW4gQ2hyb21pdW0gcG9ydAogICAgICAgICAjIHdoZXJlIHR1cm5rIGlz
bid0IGNoZWNrZWQgb3V0IGFzIGEgd2hvbGUuCi0gICAgICAgIHJldHVybiBbKCd3ZWJraXQnLCBz
ZWxmLmxheW91dF90ZXN0c19kaXIoKSldCisgICAgICAgIHJldHVybiBbKCdXZWJLaXQnLCBzZWxm
LmxheW91dF90ZXN0c19kaXIoKSldCiAKICAgICBfV0RJRkZfREVMID0gJyMjV0RJRkZfREVMIyMn
CiAgICAgX1dESUZGX0FERCA9ICcjI1dESUZGX0FERCMjJwpJbmRleDogVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtLnB5CShyZXZpc2lv
biAxNDIzNDYpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2No
cm9taXVtLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zNjQsNyArMzY0LDcgQEAgY2xhc3MgQ2hyb21p
dW1Qb3J0KFBvcnQpOgogCiAgICAgZGVmIHJlcG9zaXRvcnlfcGF0aHMoc2VsZik6CiAgICAgICAg
IHJlcG9zID0gc3VwZXIoQ2hyb21pdW1Qb3J0LCBzZWxmKS5yZXBvc2l0b3J5X3BhdGhzKCkKLSAg
ICAgICAgcmVwb3MuYXBwZW5kKCgnY2hyb21pdW0nLCBzZWxmLnBhdGhfZnJvbV9jaHJvbWl1bV9i
YXNlKCdidWlsZCcpKSkKKyAgICAgICAgcmVwb3MuYXBwZW5kKCgnQ2hyb21pdW0nLCBzZWxmLnBh
dGhfZnJvbV9jaHJvbWl1bV9iYXNlKCdidWlsZCcpKSkKICAgICAgICAgcmV0dXJuIHJlcG9zCiAK
ICAgICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwg
bmV3ZXJfdGhhbik6CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rl
c3RzL3BlcmZ0ZXN0c3J1bm5lci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0c3J1bm5lci5weQkocmV2aXNpb24gMTQyMzQ2
KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdHNy
dW5uZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAgaW1wb3J0IGpzb24KIGlt
cG9ydCBsb2dnaW5nCiBpbXBvcnQgb3B0cGFyc2UKIGltcG9ydCB0aW1lCitpbXBvcnQgZGF0ZXRp
bWUKIAogZnJvbSB3ZWJraXRweS5jb21tb24gaW1wb3J0IGZpbmRfZmlsZXMKIGZyb20gd2Via2l0
cHkuY29tbW9uLmNoZWNrb3V0LnNjbS5kZXRlY3Rpb24gaW1wb3J0IFNDTURldGVjdG9yCkBAIC02
Nyw2ICs2OCw3IEBAIGNsYXNzIFBlcmZUZXN0c1J1bm5lcihvYmplY3QpOgogICAgICAgICBzZWxm
Ll9iYXNlX3BhdGggPSBzZWxmLl9wb3J0LnBlcmZfdGVzdHNfZGlyKCkKICAgICAgICAgc2VsZi5f
cmVzdWx0cyA9IHt9CiAgICAgICAgIHNlbGYuX3RpbWVzdGFtcCA9IHRpbWUudGltZSgpCisgICAg
ICAgIHNlbGYuX3V0Y190aW1lc3RhbXAgPSBkYXRldGltZS5kYXRldGltZS51dGNub3coKQogICAg
ICAgICBzZWxmLl9uZWVkc19odHRwID0gTm9uZQogICAgICAgICBzZWxmLl9oYXNfaHR0cF9sb2Nr
ID0gRmFsc2UKIApAQCAtMTI2LDggKzEyOCw2IEBAIGNsYXNzIFBlcmZUZXN0c1J1bm5lcihvYmpl
Y3QpOgogICAgICAgICByZXR1cm4gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKG9wdGlvbl9saXN0PShw
ZXJmX29wdGlvbl9saXN0KSkucGFyc2VfYXJncyhhcmdzKQogCiAgICAgZGVmIF9jb2xsZWN0X3Rl
c3RzKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm4gdGhlIGxpc3Qgb2YgdGVzdHMgZm91bmQuIiIi
Ci0KICAgICAgICAgdGVzdF9leHRlbnNpb25zID0gWycuaHRtbCcsICcuc3ZnJ10KICAgICAgICAg
aWYgc2VsZi5fb3B0aW9ucy5yZXBsYXk6CiAgICAgICAgICAgICB0ZXN0X2V4dGVuc2lvbnMuYXBw
ZW5kKCcucmVwbGF5JykKQEAgLTIwOCwyNCArMjA4LDMwIEBAIGNsYXNzIFBlcmZUZXN0c1J1bm5l
cihvYmplY3QpOgogICAgIGRlZiBfZ2VuZXJhdGVfYW5kX3Nob3dfcmVzdWx0cyhzZWxmKToKICAg
ICAgICAgb3B0aW9ucyA9IHNlbGYuX29wdGlvbnMKICAgICAgICAgb3V0cHV0X2pzb25fcGF0aCA9
IHNlbGYuX291dHB1dF9qc29uX3BhdGgoKQotICAgICAgICBvdXRwdXQgPSBzZWxmLl9nZW5lcmF0
ZV9yZXN1bHRzX2RpY3Qoc2VsZi5fdGltZXN0YW1wLCBvcHRpb25zLmRlc2NyaXB0aW9uLCBvcHRp
b25zLnBsYXRmb3JtLCBvcHRpb25zLmJ1aWxkZXJfbmFtZSwgb3B0aW9ucy5idWlsZF9udW1iZXIp
CisgICAgICAgIG91dHB1dCwgcGVyZl93ZWJraXRfb3V0cHV0ID0gc2VsZi5fZ2VuZXJhdGVfcmVz
dWx0c19kaWN0KHNlbGYuX3RpbWVzdGFtcCwgb3B0aW9ucy5kZXNjcmlwdGlvbiwgb3B0aW9ucy5w
bGF0Zm9ybSwgb3B0aW9ucy5idWlsZGVyX25hbWUsIG9wdGlvbnMuYnVpbGRfbnVtYmVyKQogCiAg
ICAgICAgIGlmIG9wdGlvbnMuc2xhdmVfY29uZmlnX2pzb25fcGF0aDoKLSAgICAgICAgICAgIG91
dHB1dCA9IHNlbGYuX21lcmdlX3NsYXZlX2NvbmZpZ19qc29uKG9wdGlvbnMuc2xhdmVfY29uZmln
X2pzb25fcGF0aCwgb3V0cHV0KQorICAgICAgICAgICAgb3V0cHV0LCBwZXJmX3dlYmtpdF9vdXRw
dXQgPSBzZWxmLl9tZXJnZV9zbGF2ZV9jb25maWdfanNvbihvcHRpb25zLnNsYXZlX2NvbmZpZ19q
c29uX3BhdGgsIG91dHB1dCwgcGVyZl93ZWJraXRfb3V0cHV0KQogICAgICAgICAgICAgaWYgbm90
IG91dHB1dDoKICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5FWElUX0NPREVfQkFEX1NPVVJD
RV9KU09OCiAKICAgICAgICAgb3V0cHV0ID0gc2VsZi5fbWVyZ2Vfb3V0cHV0c19pZl9uZWVkZWQo
b3V0cHV0X2pzb25fcGF0aCwgb3V0cHV0KQogICAgICAgICBpZiBub3Qgb3V0cHV0OgogICAgICAg
ICAgICAgcmV0dXJuIHNlbGYuRVhJVF9DT0RFX0JBRF9NRVJHRQorICAgICAgICBwZXJmX3dlYmtp
dF9vdXRwdXQgPSBbcGVyZl93ZWJraXRfb3V0cHV0XQogCiAgICAgICAgIHJlc3VsdHNfcGFnZV9w
YXRoID0gc2VsZi5faG9zdC5maWxlc3lzdGVtLnNwbGl0ZXh0KG91dHB1dF9qc29uX3BhdGgpWzBd
ICsgJy5odG1sJwotICAgICAgICBzZWxmLl9nZW5lcmF0ZV9vdXRwdXRfZmlsZXMob3V0cHV0X2pz
b25fcGF0aCwgcmVzdWx0c19wYWdlX3BhdGgsIG91dHB1dCkKKyAgICAgICAgcGVyZl93ZWJraXRf
anNvbl9wYXRoID0gc2VsZi5faG9zdC5maWxlc3lzdGVtLnNwbGl0ZXh0KG91dHB1dF9qc29uX3Bh
dGgpWzBdICsgJy1wZXJmLXdlYmtpdC5qc29uJyBpZiBvcHRpb25zLnRlc3RfcmVzdWx0c19zZXJ2
ZXIgZWxzZSBOb25lCisgICAgICAgIHNlbGYuX2dlbmVyYXRlX291dHB1dF9maWxlcyhvdXRwdXRf
anNvbl9wYXRoLCBwZXJmX3dlYmtpdF9qc29uX3BhdGgsIHJlc3VsdHNfcGFnZV9wYXRoLCBvdXRw
dXQsIHBlcmZfd2Via2l0X291dHB1dCkKIAogICAgICAgICBpZiBvcHRpb25zLnRlc3RfcmVzdWx0
c19zZXJ2ZXI6CiAgICAgICAgICAgICBpZiBub3Qgc2VsZi5fdXBsb2FkX2pzb24ob3B0aW9ucy50
ZXN0X3Jlc3VsdHNfc2VydmVyLCBvdXRwdXRfanNvbl9wYXRoKToKICAgICAgICAgICAgICAgICBy
ZXR1cm4gc2VsZi5FWElUX0NPREVfRkFJTEVEX1VQTE9BRElORwogCisgICAgICAgICAgICAjIEZJ
WE1FOiBSZW1vdmUgdGhpcyBjb2RlIG9uY2Ugd2UndmUgbWFkZSB0cmFuc2l0aW9uIHRvIHVzZSBw
ZXJmLndlYmtpdC5vcmcKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl91cGxvYWRfanNvbigncGVy
Zi53ZWJraXQub3JnJywgcGVyZl93ZWJraXRfanNvbl9wYXRoLCAiL2FwaS9yZXBvcnQiKToKKyAg
ICAgICAgICAgICAgICByZXR1cm4gc2VsZi5FWElUX0NPREVfRkFJTEVEX1VQTE9BRElORworCiAg
ICAgICAgIGlmIG9wdGlvbnMuc2hvd19yZXN1bHRzOgogICAgICAgICAgICAgc2VsZi5fcG9ydC5z
aG93X3Jlc3VsdHNfaHRtbF9maWxlKHJlc3VsdHNfcGFnZV9wYXRoKQogCkBAIC0yMzMsOSArMjM5
LDEzIEBAIGNsYXNzIFBlcmZUZXN0c1J1bm5lcihvYmplY3QpOgogICAgICAgICBjb250ZW50cyA9
IHsncmVzdWx0cyc6IHNlbGYuX3Jlc3VsdHN9CiAgICAgICAgIGlmIGRlc2NyaXB0aW9uOgogICAg
ICAgICAgICAgY29udGVudHNbJ2Rlc2NyaXB0aW9uJ10gPSBkZXNjcmlwdGlvbgorCisgICAgICAg
IHJldmlzaW9uc19mb3JfcGVyZl93ZWJraXQgPSB7fQogICAgICAgICBmb3IgKG5hbWUsIHBhdGgp
IGluIHNlbGYuX3BvcnQucmVwb3NpdG9yeV9wYXRocygpOgogICAgICAgICAgICAgc2NtID0gU0NN
RGV0ZWN0b3Ioc2VsZi5faG9zdC5maWxlc3lzdGVtLCBzZWxmLl9ob3N0LmV4ZWN1dGl2ZSkuZGV0
ZWN0X3NjbV9zeXN0ZW0ocGF0aCkgb3Igc2VsZi5faG9zdC5zY20oKQotICAgICAgICAgICAgY29u
dGVudHNbbmFtZSArICctcmV2aXNpb24nXSA9IHNjbS5zdm5fcmV2aXNpb24ocGF0aCkKKyAgICAg
ICAgICAgIHJldmlzaW9uID0gc2NtLnN2bl9yZXZpc2lvbihwYXRoKQorICAgICAgICAgICAgY29u
dGVudHNbbmFtZS5sb3dlcigpICsgJy1yZXZpc2lvbiddID0gcmV2aXNpb24KKyAgICAgICAgICAg
IHJldmlzaW9uc19mb3JfcGVyZl93ZWJraXRbbmFtZV0gPSB7J3JldmlzaW9uJzogc3RyKHJldmlz
aW9uKSwgJ3RpbWVzdGFtcCc6IHNjbS5zdm5fdGltZXN0YW1wKHBhdGgpfQogCiAgICAgICAgICMg
RklYTUU6IEFkZCAtLWJyYW5jaCBvciBhdXRvLWRldGVjdCB0aGUgYnJhbmNoIHdlJ3JlIGluCiAg
ICAgICAgIGZvciBrZXksIHZhbHVlIGluIHsndGltZXN0YW1wJzogaW50KHRpbWVzdGFtcCksICdi
cmFuY2gnOiBzZWxmLl9kZWZhdWx0X2JyYW5jaCwgJ3BsYXRmb3JtJzogcGxhdGZvcm0sCkBAIC0y
NDMsMjAgKzI1Myw2NiBAQCBjbGFzcyBQZXJmVGVzdHNSdW5uZXIob2JqZWN0KToKICAgICAgICAg
ICAgIGlmIHZhbHVlOgogICAgICAgICAgICAgICAgIGNvbnRlbnRzW2tleV0gPSB2YWx1ZQogCi0g
ICAgICAgIHJldHVybiBjb250ZW50cworICAgICAgICBjb250ZW50c19mb3JfcGVyZl93ZWJraXQg
PSB7CisgICAgICAgICAgICAnYnVpbGRlck5hbWUnOiBidWlsZGVyX25hbWUsCisgICAgICAgICAg
ICAnYnVpbGROdW1iZXInOiBzdHIoYnVpbGRfbnVtYmVyKSwKKyAgICAgICAgICAgICdidWlsZFRp
bWUnOiBzZWxmLl9kYXRldGltZV9pbl9FUzVfY29tcGF0aWJsZV9pc29fZm9ybWF0KHNlbGYuX3V0
Y190aW1lc3RhbXApLAorICAgICAgICAgICAgJ3BsYXRmb3JtJzogcGxhdGZvcm0sCisgICAgICAg
ICAgICAncmV2aXNpb25zJzogcmV2aXNpb25zX2Zvcl9wZXJmX3dlYmtpdCwKKyAgICAgICAgICAg
ICd0ZXN0cyc6IHt9fQorCisgICAgICAgIGZvciBtZXRyaWNfZnVsbF9uYW1lIGluIHNlbGYuX3Jl
c3VsdHM6CisgICAgICAgICAgICByZXN1bHQgPSBzZWxmLl9yZXN1bHRzW21ldHJpY19mdWxsX25h
bWVdCisKKyAgICAgICAgICAgICMgV2UgY2FuJ3QgcmVwcm90IHJlc3VsdHMgd2l0aG91dCBpbmRp
dmlzdWFsIG1lYXN1cmVtZW50cy4KKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHJlc3Vs
dCwgZGljdCk6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgYXNzZXJ0
IG1ldHJpY19mdWxsX25hbWUuY291bnQoJzonKSA8PSAxCisgICAgICAgICAgICB0ZXN0X2Z1bGxf
bmFtZSwgXywgbWV0cmljID0gbWV0cmljX2Z1bGxfbmFtZS5wYXJ0aXRpb24oJzonKQorICAgICAg
ICAgICAgaWYgbm90IG1ldHJpYzoKKyAgICAgICAgICAgICAgICBtZXRyaWMgPSB7J2Zwcyc6ICdG
cmFtZVJhdGUnLCAncnVucy9zJzogJ1J1bnMnLCAnbXMnOiAnVGltZSd9W3Jlc3VsdFsndW5pdCdd
XQorCisgICAgICAgICAgICB0ZXN0cyA9IGNvbnRlbnRzX2Zvcl9wZXJmX3dlYmtpdFsndGVzdHMn
XQorICAgICAgICAgICAgcGF0aCA9IHRlc3RfZnVsbF9uYW1lLnNwbGl0KCcvJykKKyAgICAgICAg
ICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihwYXRoKSk6CisgICAgICAgICAgICAgICAgIyBGSVhN
RTogV2Ugc2hvdWxkbid0IGFzc3VtZSBIVE1MIGV4dGVuc2lvbi4KKyAgICAgICAgICAgICAgICBp
c19sYXN0X3Rva2VuID0gaSArIDEgPT0gbGVuKHBhdGgpCisgICAgICAgICAgICAgICAgdXJsID0g
J2h0dHA6Ly90cmFjLndlYmtpdC5vcmcvYnJvd3Nlci90cnVuay9QZXJmb3JtYW5jZVRlc3RzLycg
KyAnLycuam9pbihwYXRoWzA6aSArIDFdKQorICAgICAgICAgICAgICAgIGlmIGlzX2xhc3RfdG9r
ZW46CisgICAgICAgICAgICAgICAgICAgIHVybCArPSAnLmh0bWwnCisKKyAgICAgICAgICAgICAg
ICB0ZXN0cy5zZXRkZWZhdWx0KHBhdGhbaV0sIHsndXJsJzogdXJsfSkKKyAgICAgICAgICAgICAg
ICBjdXJyZW50X3Rlc3QgPSB0ZXN0c1twYXRoW2ldXQorICAgICAgICAgICAgICAgIGlmIGlzX2xh
c3RfdG9rZW46CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfdGVzdC5zZXRkZWZhdWx0KCdt
ZXRyaWNzJywge30pCisgICAgICAgICAgICAgICAgICAgIGFzc2VydCBtZXRyaWMgbm90IGluIGN1
cnJlbnRfdGVzdFsnbWV0cmljcyddCisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfdGVzdFsn
bWV0cmljcyddW21ldHJpY10gPSB7J2N1cnJlbnQnOiByZXN1bHRbJ3ZhbHVlcyddfQorICAgICAg
ICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfdGVzdC5zZXRkZWZh
dWx0KCd0ZXN0cycsIHt9KQorICAgICAgICAgICAgICAgICAgICB0ZXN0cyA9IGN1cnJlbnRfdGVz
dFsndGVzdHMnXQorCisgICAgICAgIHJldHVybiBjb250ZW50cywgY29udGVudHNfZm9yX3BlcmZf
d2Via2l0CiAKLSAgICBkZWYgX21lcmdlX3NsYXZlX2NvbmZpZ19qc29uKHNlbGYsIHNsYXZlX2Nv
bmZpZ19qc29uX3BhdGgsIG91dHB1dCk6CisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfZGF0
ZXRpbWVfaW5fRVM1X2NvbXBhdGlibGVfaXNvX2Zvcm1hdChkYXRldGltZSk6CisgICAgICAgIHJl
dHVybiBkYXRldGltZS5zdHJmdGltZSgnJVktJW0tJWRUJUg6JU06JVMuJWYnKQorCisgICAgZGVm
IF9tZXJnZV9zbGF2ZV9jb25maWdfanNvbihzZWxmLCBzbGF2ZV9jb25maWdfanNvbl9wYXRoLCBj
b250ZW50cywgY29udGVudHNfZm9yX3BlcmZfd2Via2l0KToKICAgICAgICAgaWYgbm90IHNlbGYu
X2hvc3QuZmlsZXN5c3RlbS5pc2ZpbGUoc2xhdmVfY29uZmlnX2pzb25fcGF0aCk6CiAgICAgICAg
ICAgICBfbG9nLmVycm9yKCJNaXNzaW5nIHNsYXZlIGNvbmZpZ3VyYXRpb24gSlNPTiBmaWxlOiAl
cyIgJSBzbGF2ZV9jb25maWdfanNvbl9wYXRoKQotICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAg
ICAgICAgICAgIHJldHVybiBOb25lLCBOb25lCiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAg
c2xhdmVfY29uZmlnX2pzb24gPSBzZWxmLl9ob3N0LmZpbGVzeXN0ZW0ub3Blbl90ZXh0X2ZpbGVf
Zm9yX3JlYWRpbmcoc2xhdmVfY29uZmlnX2pzb25fcGF0aCkKICAgICAgICAgICAgIHNsYXZlX2Nv
bmZpZyA9IGpzb24ubG9hZChzbGF2ZV9jb25maWdfanNvbikKLSAgICAgICAgICAgIHJldHVybiBk
aWN0KHNsYXZlX2NvbmZpZy5pdGVtcygpICsgb3V0cHV0Lml0ZW1zKCkpCisgICAgICAgICAgICBj
b250ZW50cyA9IGRpY3Qoc2xhdmVfY29uZmlnLml0ZW1zKCkgKyBjb250ZW50cy5pdGVtcygpKQor
ICAgICAgICAgICAgZm9yIGtleSBpbiBzbGF2ZV9jb25maWc6CisgICAgICAgICAgICAgICAgY29u
dGVudHNfZm9yX3BlcmZfd2Via2l0WydidWlsZGVyJyArIGtleS5jYXBpdGFsaXplKCldID0gc2xh
dmVfY29uZmlnW2tleV0KKyAgICAgICAgICAgIHJldHVybiBjb250ZW50cywgY29udGVudHNfZm9y
X3BlcmZfd2Via2l0CiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGVycm9yOgogICAgICAgICAg
ICAgX2xvZy5lcnJvcigiRmFpbGVkIHRvIG1lcmdlIHNsYXZlIGNvbmZpZ3VyYXRpb24gSlNPTiBm
aWxlICVzOiAlcyIgJSAoc2xhdmVfY29uZmlnX2pzb25fcGF0aCwgZXJyb3IpKQotICAgICAgICBy
ZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gTm9uZSwgTm9uZQogCiAgICAgZGVmIF9tZXJnZV9v
dXRwdXRzX2lmX25lZWRlZChzZWxmLCBvdXRwdXRfanNvbl9wYXRoLCBvdXRwdXQpOgogICAgICAg
ICBpZiBzZWxmLl9vcHRpb25zLnJlc2V0X3Jlc3VsdHMgb3Igbm90IHNlbGYuX2hvc3QuZmlsZXN5
c3RlbS5pc2ZpbGUob3V0cHV0X2pzb25fcGF0aCk6CkBAIC0yNjgsMTIgKzMyNCwxNSBAQCBjbGFz
cyBQZXJmVGVzdHNSdW5uZXIob2JqZWN0KToKICAgICAgICAgICAgIF9sb2cuZXJyb3IoIkZhaWxl
ZCB0byBtZXJnZSBvdXRwdXQgSlNPTiBmaWxlICVzOiAlcyIgJSAob3V0cHV0X2pzb25fcGF0aCwg
ZXJyb3IpKQogICAgICAgICByZXR1cm4gTm9uZQogCi0gICAgZGVmIF9nZW5lcmF0ZV9vdXRwdXRf
ZmlsZXMoc2VsZiwgb3V0cHV0X2pzb25fcGF0aCwgcmVzdWx0c19wYWdlX3BhdGgsIG91dHB1dCk6
CisgICAgZGVmIF9nZW5lcmF0ZV9vdXRwdXRfZmlsZXMoc2VsZiwgb3V0cHV0X2pzb25fcGF0aCwg
cGVyZl93ZWJraXRfanNvbl9wYXRoLCByZXN1bHRzX3BhZ2VfcGF0aCwgb3V0cHV0LCBwZXJmX3dl
YmtpdF9vdXRwdXQpOgogICAgICAgICBmaWxlc3lzdGVtID0gc2VsZi5faG9zdC5maWxlc3lzdGVt
CiAKICAgICAgICAganNvbl9vdXRwdXQgPSBqc29uLmR1bXBzKG91dHB1dCkKICAgICAgICAgZmls
ZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUob3V0cHV0X2pzb25fcGF0aCwganNvbl9vdXRwdXQpCiAK
KyAgICAgICAgaWYgcGVyZl93ZWJraXRfanNvbl9wYXRoOgorICAgICAgICAgICAgZmlsZXN5c3Rl
bS53cml0ZV90ZXh0X2ZpbGUocGVyZl93ZWJraXRfanNvbl9wYXRoLCBqc29uLmR1bXBzKHBlcmZf
d2Via2l0X291dHB1dCkpCisKICAgICAgICAgaWYgcmVzdWx0c19wYWdlX3BhdGg6CiAgICAgICAg
ICAgICB0ZW1wbGF0ZV9wYXRoID0gZmlsZXN5c3RlbS5qb2luKHNlbGYuX3BvcnQucGVyZl90ZXN0
c19kaXIoKSwgJ3Jlc291cmNlcy9yZXN1bHRzLXRlbXBsYXRlLmh0bWwnKQogICAgICAgICAgICAg
dGVtcGxhdGUgPSBmaWxlc3lzdGVtLnJlYWRfdGV4dF9maWxlKHRlbXBsYXRlX3BhdGgpCkBAIC0y
ODQsMjIgKzM0MywyMyBAQCBjbGFzcyBQZXJmVGVzdHNSdW5uZXIob2JqZWN0KToKIAogICAgICAg
ICAgICAgZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUocmVzdWx0c19wYWdlX3BhdGgsIHJlc3Vs
dHNfcGFnZSkKIAotICAgIGRlZiBfdXBsb2FkX2pzb24oc2VsZiwgdGVzdF9yZXN1bHRzX3NlcnZl
ciwganNvbl9wYXRoLCBmaWxlX3VwbG9hZGVyPUZpbGVVcGxvYWRlcik6Ci0gICAgICAgIHVwbG9h
ZGVyID0gZmlsZV91cGxvYWRlcigiaHR0cHM6Ly8lcy9hcGkvdGVzdC9yZXBvcnQiICUgdGVzdF9y
ZXN1bHRzX3NlcnZlciwgMTIwKQorICAgIGRlZiBfdXBsb2FkX2pzb24oc2VsZiwgdGVzdF9yZXN1
bHRzX3NlcnZlciwganNvbl9wYXRoLCBob3N0X3BhdGg9Ii9hcGkvdGVzdC9yZXBvcnQiLCBmaWxl
X3VwbG9hZGVyPUZpbGVVcGxvYWRlcik6CisgICAgICAgIHVybCA9ICJodHRwczovLyVzJXMiICUg
KHRlc3RfcmVzdWx0c19zZXJ2ZXIsIGhvc3RfcGF0aCkKKyAgICAgICAgdXBsb2FkZXIgPSBmaWxl
X3VwbG9hZGVyKHVybCwgMTIwKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICByZXNwb25zZSA9
IHVwbG9hZGVyLnVwbG9hZF9zaW5nbGVfdGV4dF9maWxlKHNlbGYuX2hvc3QuZmlsZXN5c3RlbSwg
J2FwcGxpY2F0aW9uL2pzb24nLCBqc29uX3BhdGgpCiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24s
IGVycm9yOgotICAgICAgICAgICAgX2xvZy5lcnJvcigiRmFpbGVkIHRvIHVwbG9hZCBKU09OIGZp
bGUgaW4gMTIwczogJXMiICUgZXJyb3IpCisgICAgICAgICAgICBfbG9nLmVycm9yKCJGYWlsZWQg
dG8gdXBsb2FkIEpTT04gZmlsZSB0byAlcyBpbiAxMjBzOiAlcyIgJSAodXJsLCBlcnJvcikpCiAg
ICAgICAgICAgICByZXR1cm4gRmFsc2UKIAogICAgICAgICByZXNwb25zZV9ib2R5ID0gW2xpbmUu
c3RyaXAoJ1xuJykgZm9yIGxpbmUgaW4gcmVzcG9uc2VdCiAgICAgICAgIGlmIHJlc3BvbnNlX2Jv
ZHkgIT0gWydPSyddOgotICAgICAgICAgICAgX2xvZy5lcnJvcigiVXBsb2FkZWQgSlNPTiBidXQg
Z290IGEgYmFkIHJlc3BvbnNlOiIpCisgICAgICAgICAgICBfbG9nLmVycm9yKCJVcGxvYWRlZCBK
U09OIHRvICVzIGJ1dCBnb3QgYSBiYWQgcmVzcG9uc2U6IiAlIHVybCkKICAgICAgICAgICAgIGZv
ciBsaW5lIGluIHJlc3BvbnNlX2JvZHk6CiAgICAgICAgICAgICAgICAgX2xvZy5lcnJvcihsaW5l
KQogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKLSAgICAgICAgX2xvZy5pbmZvKCJKU09OIGZp
bGUgdXBsb2FkZWQuIikKKyAgICAgICAgX2xvZy5pbmZvKCJKU09OIGZpbGUgdXBsb2FkZWQgdG8g
JXMuIiAlIHVybCkKICAgICAgICAgcmV0dXJuIFRydWUKIAogICAgIGRlZiBfcHJpbnRfc3RhdHVz
KHNlbGYsIHRlc3RzLCBleHBlY3RlZCwgdW5leHBlY3RlZCk6CkluZGV4OiBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0c3J1bm5lcl9pbnRlZ3JhdGlvbnRl
c3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90
ZXN0cy9wZXJmdGVzdHNydW5uZXJfaW50ZWdyYXRpb250ZXN0LnB5CShyZXZpc2lvbiAxNDIzNDYp
CisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0c3J1
bm5lcl9pbnRlZ3JhdGlvbnRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAK
ICIiIkludGVncmF0aW9uIHRlc3RzIGZvciBydW5fcGVyZl90ZXN0cy4iIiIKIAogaW1wb3J0IFN0
cmluZ0lPCitpbXBvcnQgZGF0ZXRpbWUKIGltcG9ydCBqc29uCiBpbXBvcnQgcmUKIGltcG9ydCB1
bml0dGVzdDIgYXMgdW5pdHRlc3QKQEAgLTMyMiwxMyArMzIzLDE1IEBAIGNsYXNzIE1haW5UZXN0
KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgdXBsb2FkZWQgPSBbRmFsc2VdCiAKICAgICAg
ICAgZGVmIG1vY2tfdXBsb2FkX2pzb24oaG9zdG5hbWUsIGpzb25fcGF0aCk6Ci0gICAgICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKGhvc3RuYW1lLCAnc29tZS5ob3N0JykKLSAgICAgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoanNvbl9wYXRoLCAnL21vY2stY2hlY2tvdXQvb3V0cHV0Lmpzb24nKQor
ICAgICAgICAgICAgIyBGSVhNRTogR2V0IHJpZCBvZiB0aGUgaGFyZC1jb2RlZCBwZXJmLndlYmtp
dC5vcmcgb25jZSB3ZSd2ZSBjb21wbGV0ZWQgdGhlIHRyYW5zaXRpb24uCisgICAgICAgICAgICBz
ZWxmLmFzc2VydEluKGhvc3RuYW1lLCBbJ3NvbWUuaG9zdCcsICdwZXJmLndlYmtpdC5vcmcnXSkK
KyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oanNvbl9wYXRoLCBbJy9tb2NrLWNoZWNrb3V0L291
dHB1dC5qc29uJywgJy9tb2NrLWNoZWNrb3V0L291dHB1dC1wZXJmLXdlYmtpdC5qc29uJ10pCiAg
ICAgICAgICAgICB1cGxvYWRlZFswXSA9IHVwbG9hZF9zdWNlZWRzCiAgICAgICAgICAgICByZXR1
cm4gdXBsb2FkX3N1Y2VlZHMKIAogICAgICAgICBydW5uZXIuX3VwbG9hZF9qc29uID0gbW9ja191
cGxvYWRfanNvbgogICAgICAgICBydW5uZXIuX3RpbWVzdGFtcCA9IDEyMzQ1Njc4OQorICAgICAg
ICBydW5uZXIuX3V0Y190aW1lc3RhbXAgPSBkYXRldGltZS5kYXRldGltZSgyMDEzLCAyLCA4LCAx
NSwgMTksIDM3LCA0NjAwMDApCiAgICAgICAgIG91dHB1dF9jYXB0dXJlID0gT3V0cHV0Q2FwdHVy
ZSgpCiAgICAgICAgIG91dHB1dF9jYXB0dXJlLmNhcHR1cmVfb3V0cHV0KCkKICAgICAgICAgdHJ5
OgpAQCAtNTIxLDYgKzUyNCwzMyBAQCBjbGFzcyBNYWluVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6
CiAKICAgICAgICAgc2VsZi5fdGVzdF9ydW5fd2l0aF9qc29uX291dHB1dChydW5uZXIsIHBvcnQu
aG9zdC5maWxlc3lzdGVtLCB1cGxvYWRfc3VjZWVkcz1GYWxzZSwgZXhwZWN0ZWRfZXhpdF9jb2Rl
PVBlcmZUZXN0c1J1bm5lci5FWElUX0NPREVfRkFJTEVEX1VQTE9BRElORykKIAorICAgIGRlZiB0
ZXN0X3J1bl93aXRoX3VwbG9hZF9qc29uX3Nob3VsZF9nZW5lcmF0ZV9wZXJmX3dlYmtpdF9qc29u
KHNlbGYpOgorICAgICAgICBydW5uZXIsIHBvcnQgPSBzZWxmLmNyZWF0ZV9ydW5uZXJfYW5kX3Nl
dHVwX3Jlc3VsdHNfdGVtcGxhdGUoYXJncz1bJy0tb3V0cHV0LWpzb24tcGF0aD0vbW9jay1jaGVj
a291dC9vdXRwdXQuanNvbicsCisgICAgICAgICAgICAnLS10ZXN0LXJlc3VsdHMtc2VydmVyJywg
J3NvbWUuaG9zdCcsICctLXBsYXRmb3JtJywgJ3BsYXRmb3JtMScsICctLWJ1aWxkZXItbmFtZScs
ICdidWlsZGVyMScsICctLWJ1aWxkLW51bWJlcicsICcxMjMnLAorICAgICAgICAgICAgJy0tc2xh
dmUtY29uZmlnLWpzb24tcGF0aD0vbW9jay1jaGVja291dC9zbGF2ZS1jb25maWcuanNvbiddKQor
ICAgICAgICBwb3J0Lmhvc3QuZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUoJy9tb2NrLWNoZWNr
b3V0L3NsYXZlLWNvbmZpZy5qc29uJywgJ3sia2V5IjogInZhbHVlMSJ9JykKKworICAgICAgICBz
ZWxmLl90ZXN0X3J1bl93aXRoX2pzb25fb3V0cHV0KHJ1bm5lciwgcG9ydC5ob3N0LmZpbGVzeXN0
ZW0sIHVwbG9hZF9zdWNlZWRzPVRydWUpCisgICAgICAgIGdlbmVyYXRlZF9qc29uID0ganNvbi5s
b2Fkcyhwb3J0Lmhvc3QuZmlsZXN5c3RlbS5maWxlc1snL21vY2stY2hlY2tvdXQvb3V0cHV0LXBl
cmYtd2Via2l0Lmpzb24nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoZ2Vu
ZXJhdGVkX2pzb24sIGxpc3QpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihnZW5lcmF0
ZWRfanNvbiksIDEpCisKKyAgICAgICAgb3V0cHV0ID0gZ2VuZXJhdGVkX2pzb25bMF0KKyAgICAg
ICAgc2VsZi5tYXhEaWZmID0gTm9uZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dFsn
cGxhdGZvcm0nXSwgJ3BsYXRmb3JtMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0
WydidWlsZE51bWJlciddLCAnMTIzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXRb
J2J1aWxkVGltZSddLCAnMjAxMy0wMi0wOFQxNToxOTozNy40NjAwMDAnKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKG91dHB1dFsnYnVpbGRlck5hbWUnXSwgJ2J1aWxkZXIxJykKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChvdXRwdXRbJ2J1aWxkZXJLZXknXSwgJ3ZhbHVlMScpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0WydyZXZpc2lvbnMnXSwgeydXZWJLaXQnOiB7J3Jldmlz
aW9uJzogJzU2NzgnLCAndGltZXN0YW1wJzogJzIwMTMtMDItMDEgMDg6NDg6MDUgKzAwMDAnfX0p
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0Wyd0ZXN0cyddLmtleXMoKSwgWydCaW5k
aW5ncyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChvdXRwdXRbJ3Rlc3RzJ11b
J0JpbmRpbmdzJ10ua2V5cygpKSwgWyd0ZXN0cycsICd1cmwnXSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChvdXRwdXRbJ3Rlc3RzJ11bJ0JpbmRpbmdzJ11bJ3VybCddLCAnaHR0cDovL3RyYWMu
d2Via2l0Lm9yZy9icm93c2VyL3RydW5rL1BlcmZvcm1hbmNlVGVzdHMvQmluZGluZ3MnKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dFsndGVzdHMnXVsnQmluZGluZ3MnXVsndGVzdHMn
XS5rZXlzKCksIFsnZXZlbnQtdGFyZ2V0LXdyYXBwZXInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChvdXRwdXRbJ3Rlc3RzJ11bJ0JpbmRpbmdzJ11bJ3Rlc3RzJ11bJ2V2ZW50LXRhcmdldC13
cmFwcGVyJ10sIHsKKyAgICAgICAgICAgICd1cmwnOiAnaHR0cDovL3RyYWMud2Via2l0Lm9yZy9i
cm93c2VyL3RydW5rL1BlcmZvcm1hbmNlVGVzdHMvQmluZGluZ3MvZXZlbnQtdGFyZ2V0LXdyYXBw
ZXIuaHRtbCcsCisgICAgICAgICAgICAnbWV0cmljcyc6IHsnVGltZSc6IHsnY3VycmVudCc6IFsx
NDg2LjAsIDE0NzEuMCwgMTUxMC4wLCAxNTA1LjAsIDE0NzguMCwgMTQ5MC4wXX19fSkKKwogICAg
IGRlZiB0ZXN0X3VwbG9hZF9qc29uKHNlbGYpOgogICAgICAgICBydW5uZXIsIHBvcnQgPSBzZWxm
LmNyZWF0ZV9ydW5uZXIoKQogICAgICAgICBwb3J0Lmhvc3QuZmlsZXN5c3RlbS5maWxlc1snL21v
Y2stY2hlY2tvdXQvc29tZS5qc29uJ10gPSAnc29tZSBjb250ZW50JwpAQCAtNTMxLDcgKzU2MSw3
IEBAIGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgICAgICBjbGFzcyBN
b2NrRmlsZVVwbG9hZGVyOgogICAgICAgICAgICAgZGVmIF9faW5pdF9fKG1vY2ssIHVybCwgdGlt
ZW91dCk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmwsICdodHRwczovL3Nv
bWUuaG9zdC9hcGkvdGVzdC9yZXBvcnQnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwodXJsLCAnaHR0cHM6Ly9zb21lLmhvc3Qvc29tZS9wYXRoJykKICAgICAgICAgICAgICAgICBz
ZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZSh0aW1lb3V0LCBpbnQpIGFuZCB0aW1lb3V0KQogICAg
ICAgICAgICAgICAgIGNhbGxlZC5hcHBlbmQoJ0ZpbGVVcGxvYWRlcicpCiAKQEAgLTU1MCw3ICs1
ODAsNyBAQCBjbGFzcyBNYWluVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIG91dHB1
dCA9IE91dHB1dENhcHR1cmUoKQogICAgICAgICBvdXRwdXQuY2FwdHVyZV9vdXRwdXQoKQogICAg
ICAgICB1cGxvYWRfc2luZ2xlX3RleHRfZmlsZV9yZXR1cm5fdmFsdWUgPSBTdHJpbmdJTy5TdHJp
bmdJTygnU29tZSBlcnJvcicpCi0gICAgICAgIHJ1bm5lci5fdXBsb2FkX2pzb24oJ3NvbWUuaG9z
dCcsICdzb21lLmpzb24nLCBNb2NrRmlsZVVwbG9hZGVyKQorICAgICAgICBydW5uZXIuX3VwbG9h
ZF9qc29uKCdzb21lLmhvc3QnLCAnc29tZS5qc29uJywgIi9zb21lL3BhdGgiLCBNb2NrRmlsZVVw
bG9hZGVyKQogICAgICAgICBfLCBfLCBsb2dzID0gb3V0cHV0LnJlc3RvcmVfb3V0cHV0KCkKICAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2dzLCAnVXBsb2FkZWQgSlNPTiBidXQgZ290IGEgYmFk
IHJlc3BvbnNlOlxuU29tZSBlcnJvclxuJykKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189670</attachid>
            <date>2013-02-21 20:43:59 -0800</date>
            <delta_ts>2013-02-22 15:14:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-108577-20130221204019.patch</filename>
            <type>text/plain</type>
            <size>32782</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE0MzY4NSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDg2IEBACisyMDEzLTAyLTIxICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgor
CisgICAgICAgIFVwbG9hZCByZXN1bHRzIHRvIHBlcmYud2Via2l0Lm9yZyBpbiBhZGRpdGlvbiB0
byB0aGUgb25lIHNwZWNpZmllZCBieSAtLXRlc3QtcmVzdWx0cy1zZXJ2ZXIKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODU3NworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwbG9hZCByZXN1bHRzIHRvIHBl
cmYud2Via2l0Lm9yZyBhcyB3ZWxsIGFzIHRoZSBob3N0IHNwZWNpZmllZCBieSAtLXRlc3QtcmVz
dWx0cy1zZXJ2ZXIuCisgICAgICAgIFRoaXMgaXMgYSB0ZW1wb3JhcmlseSBtZWFzdXJlIHVudGls
IHdlIG1vdmUgYXdheSBmcm9tIHVzaW5nIHdlYmtpdC1wZXJmLmFwcHNwb3QuY29tLgorCisgICAg
ICAgIFRoaXMgcGF0Y2ggYWRkcyBzY20uc3ZuX3RpbWVzdGFtcCB0byBvYnRhaW4gdGhlIHRpbWVz
dGFtcCBvZiB0aGUgbGF0ZXN0IGNvbW1pdCBwcmVzZW50IGluCisgICAgICAgIGEgc3ZuIGNoZWNr
b3V0IG9yIGEgZ2l0IGNsb25lLiBUaGlzIGluZm9ybWF0aW9uIGlzIGVtYmVkZGVkIGluIEpTT04g
c3VibWl0dGVkIHRvIHBlcmYud2Via2l0Lm9yZy4KKworICAgICAgICBJdCBhbHNvIGNoYW5nZXMg
dGhlIHJlcG9zaXRvcnkgbmFtZXMgcmV0dXJuZWQgYnkgcG9ydCBvYmplY3RzIHRvIGJlIHByb3Bl
cmx5IGNhcGl0YWxpemVkCisgICAgICAgIGh1bWFuIHJlYWRhYmxlIG5hbWVzIHN1Y2ggYXMgV2Vi
S2l0IGluc3RlYWQgb2YgbG93ZXJjYXNlZCBuYW1lcyBzdWNoIGFzIHdlYmtpdC4gU2V2ZXJhbCB1
c2VycworICAgICAgICBvZiB0aGlzIGZlYXR1cmUgaGFzIGJlZW4gdXBkYXRlZCB0byBleHBsaWNp
dGx5IGxvd2VyY2FzZSB0aGUgbmFtZXMuCisKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL2NoZWNrb3V0L3NjbS9naXQucHk6CisgICAgICAgIChHaXQuc3ZuX3RpbWVzdGFtcCk6
IEFkZGVkLiBPYnRhaW5zIHRoZSB0aW1lc3RhbXAgb2YgdGhlIGxhc3Qgc3VidmVyaW9uIGNvbW1p
dCBpbiB0aGUgY2xvbmUuCisgICAgICAgIFVuZm9ydHVuYXRlbHksIGdpdCdzIHRpbWVzdGFtcCBn
cmFudWxhcml0eSBpcyBzZWNvbmRzIHNvIHdlJ3JlIGxvc2luZyBzb21lIGluZm9ybWF0aW9uCisg
ICAgICAgIGNvbXBhcmVkIHRvIHVzaW5nIGEgcmVndWxhciBzdWJ2ZXJzaW9uIGNsaWVudC4gVG8g
bWFrZSBtYXR0ZXJzIHdvcnNlLCBnaXQgZG9lc24ndCBoYXZlIGFueQorICAgICAgICBvcHRpb24g
dG8gc2hvdyBJU08tZm9ybWF0IHRpbWVzdGFtcCBpbiBVVEMgc28gd2UncmUgZ29pbmcgdG8gbWFu
dWFsbHkgZmlkZGxlIHdpdGggdGltZXpvbmUuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi9jaGVja291dC9zY20vc2NtLnB5OgorICAgICAgICAoU0NNLnN2bl90aW1lc3RhbXAp
OiBBZGRlZC4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3Nj
bS9zY21fbW9jay5weToKKyAgICAgICAgKE1vY2tTQ00uc3ZuX3RpbWVzdGFtcCk6IEFkZGVkLgor
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3NjbV91bml0
dGVzdC5weToKKyAgICAgICAgKHRlc3Rfc3ZuX3RpbWVzdGFtcCk6IEFkZGVkIGEgdGVzdCBmb3Ig
R2l0LnN2bl90aW1lc3RhbXAuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9j
aGVja291dC9zY20vc3ZuLnB5OgorICAgICAgICAoU1ZOLnN2bl90aW1lc3RhbXApOiBBZGRlZC4g
V2l0aCBzdm4sIGFsbCB3ZSBuZWVkIHRvIGRvIGlzIHRvIHVzZSAtLXhtbCBvcHRpb24gYW5kIHBh
cnNlIHRoZQorICAgICAgICB0aW1lc3RhbXAgd2hpY2ggaXMgYWx3YXlzIGluIFVUQy4KKworICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25f
cmVzdWx0c19nZW5lcmF0b3IucHk6CisgICAgICAgIChKU09OUmVzdWx0c0dlbmVyYXRvckJhc2Uu
X2luc2VydF9nZW5lcmljX21ldGFkYXRhKTogTG93ZXJjYXNlIHRoZSBuYW1lLiBOb3RlIHRoYXQg
dGhlIG5hbWUKKyAgICAgICAgJ2Nocm9taXVtJyBuZWVkcyB0byBiZSBzdWJzdGl0dXRlZCBieSAn
Y2hyb21lJyBmb3IgaGlzdG9yaWNhbCByZWFzb25zLgorCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5OgorICAgICAgICAoUG9ydC5yZXBvc2l0b3J5
X3BhdGhzKTogUmV0dXJuIFdlYktpdCBpbnN0ZWFkIG9mIHdlYmtpdCBhcyBub3RlZCBhYm92ZS4K
KworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0u
cHk6CisgICAgICAgIChDaHJvbWl1bVBvcnQucmVwb3NpdG9yeV9wYXRocyk6IFJldHVybiBDaHJv
bWl1bSBpbnN0ZWFkIG9mIGNocm9taXVtIGFzIG5vdGVkIGFib3ZlLgorCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdHNydW5uZXIucHk6CisgICAg
ICAgIChQZXJmVGVzdHNSdW5uZXIuX19pbml0X18pOiBTdG9yZSB0aGUgY3VycmVudCB0aW1lIGlu
IFVUQyBhcyB3ZWxsIGFzIGluIGxvY2FsIHRpbWUuCisgICAgICAgIChQZXJmVGVzdHNSdW5uZXIu
X2NvbGxlY3RfdGVzdHMpOgorCisgICAgICAgIChQZXJmVGVzdHNSdW5uZXIuX2dlbmVyYXRlX2Fu
ZF9zaG93X3Jlc3VsdHMpOiBSZXRyaWV2ZSBib3RoIHJlZ3VsYXIgb3V0cHV0IGFuZCBvbmUgZm9y
IHBlcmYud2Via2l0Lm9yZywKKyAgICAgICAgYW5kIHVwbG9hZCB0aGVtIGFwcHJvcHJpYXRlbHku
CisKKyAgICAgICAgKFBlcmZUZXN0c1J1bm5lci5fZ2VuZXJhdGVfcmVzdWx0c19kaWN0KTogU3Rv
cmUgV2ViS2l0IGFuZCBDaHJvbWl1bSByZXZpc2lvbnMgYXQgd2hpY2ggdGVzdHMgd2VyZSByYW4K
KyAgICAgICAgaW4gcmV2aXNpb25zX2Zvcl9wZXJmX3dlYmtpdCBhbmQgY29uc3RydWN0IGFuIG91
dHB1dCBmb3IgcGVyZi53ZWJraXQub3JnLgorCisgICAgICAgIChQZXJmVGVzdHNSdW5uZXIuX2Rh
dGV0aW1lX2luX0VTNV9jb21wYXRpYmxlX2lzb19mb3JtYXQpOiBBZGRlZC4KKworICAgICAgICAo
UGVyZlRlc3RzUnVubmVyLl9tZXJnZV9zbGF2ZV9jb25maWdfanNvbik6IE1lcmdlIHNsYXZlIGNv
bmZpZ3VyYXRpb24gZmlsZXMgaW50byBib3RoIHJlZ3VsYXIgb3V0cHV0CisgICAgICAgIGFuZCBv
bmUgZm9yIHBlcmYud2Via2l0Lm9yZy4gSGVyZSwgd2UgcHJlZml4IGVhY2gga2V5IHdpdGggImJ1
aWxkZXIiIGZvciBwZXJmLndlYmtpdC5vcmcuCisgICAgICAgIGUuZy4gInByb2Nlc3NvciIgd291
bGQgYmUgcmVuYW1lZCB0byAiYnVpbGRlclByb2Nlc3NvciIuCisKKyAgICAgICAgKFBlcmZUZXN0
c1J1bm5lci5fZ2VuZXJhdGVfb3V0cHV0X2ZpbGVzKToKKworICAgICAgICAoUGVyZlRlc3RzUnVu
bmVyLl91cGxvYWRfanNvbik6IEFkZGVkIGEgcmVtb3RlIHBhdGggYXMgYW4gYXJndW1lbnQgc2lu
Y2Ugd2UgdXBsb2FkIEpTT05zIHRvIC9hcGkvcmVwb3J0CisgICAgICAgIG9uIHBlcmYud2Via2l0
Lm9yZyB3aGVyZWFzIHdlIHVwbG9hZCBpdCB0byAvYXBpL3Rlc3QvcmVwb3J0IG9uIHdlYmtpdC1w
ZXJmLmFwcHNwb3QuY29tLiBBbHNvIGFkZGVkIHRoZSBjb2RlCisgICAgICAgIHRvIHBhcnNlIHJl
c3BvbnNlIGFzIEpTT04gd2hlbiBwb3NzaWJsZSBzaW5jZSBwZXJmLndlYmtpdC5vcmcgcmV0dXJu
cyBhIEpTT04gcmVzcG9uc2UgYXMgb3Bwb3NlZCB0bworICAgICAgICB3ZWJraXQtcGVyZi5hcHBz
cG90LmNvbSB3aGljaCBzcGl0cyBvdXQgYSBwbGFpbnRleHQgcmVzcG9uc2UuCisKKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0c3J1bm5lcl9pbnRl
Z3JhdGlvbnRlc3QucHk6CisgICAgICAgIChNYWluVGVzdC5fdGVzdF9ydW5fd2l0aF9qc29uX291
dHB1dC5tb2NrX3VwbG9hZF9qc29uKTogVG9sZXJhdGUgcGVyZi53ZWJraXQub3JnL2FwaS9yZXBv
cnQgZm9yIG5vdy4KKyAgICAgICAgKE1haW5UZXN0Ll90ZXN0X3J1bl93aXRoX2pzb25fb3V0cHV0
KTogU3RvcmUgYSBVVEMgdGltZSBhcyBwZXJmdGVzdHJ1bm5lciB3b3VsZCBkby4KKyAgICAgICAg
KE1haW5UZXN0LnRlc3RfcnVuX3dpdGhfdXBsb2FkX2pzb25fc2hvdWxkX2dlbmVyYXRlX3BlcmZf
d2Via2l0X2pzb24pOiBBZGRlZC4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcGVyZm9y
bWFuY2VfdGVzdHMvcGVyZnRlc3RzcnVubmVyX3VuaXR0ZXN0LnB5OgorICAgICAgICAoTWFpblRl
c3QudGVzdF91cGxvYWRfanNvbik6IE1vdmVkIGZyb20gaXRlZ3JhdGlvbnRlc3QucHkgc2luY2Ug
aXQgcmVhbGx5IGlzIGEgdW5pdCB0ZXN0LiBBbHNvIGFkZGVkIHRlc3QKKyAgICAgICAgY2FzZXMg
dG8gcGFyc2UgSlNPTiByZXNwb25zZXMuCisgICAgICAgIChNYWluVGVzdC50ZXN0X3VwbG9hZF9q
c29uLk1vY2tGaWxlVXBsb2FkZXIpOiBSZWZhY3RvcmVkLgorICAgICAgICAoTWFpblRlc3QudGVz
dF91cGxvYWRfanNvbi5Nb2NrRmlsZVVwbG9hZGVyLnJlc2V0KTogQWRkZWQuCisgICAgICAgIChN
YWluVGVzdC50ZXN0X3VwbG9hZF9qc29uLk1vY2tGaWxlVXBsb2FkZXIuX19pbml0X18pOgorICAg
ICAgICAoTWFpblRlc3QudGVzdF91cGxvYWRfanNvbi5Nb2NrRmlsZVVwbG9hZGVyLnVwbG9hZF9z
aW5nbGVfdGV4dF9maWxlKToKKwogMjAxMy0wMi0yMSAgRGlyayBQcmFua2UgIDxkcHJhbmtlQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIHN1cHBvcnQgdGhlIGx1Y2lkIHZlcnNp
b24gb2YgZnJlZXR5cGUgb24gcHJlY2lzZSBpbiBEUlQKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9naXQucHkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL2dpdC5weQkocmV2aXNpb24gMTQzNjI2
KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL2dpdC5weQko
d29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICMgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KIAoraW1wb3J0IGRhdGV0aW1lCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG9zCiBpbXBv
cnQgcmUKQEAgLTI1Myw2ICsyNTQsMjEgQEAgY2xhc3MgR2l0KFNDTSwgU1ZOUmVwb3NpdG9yeSk6
CiAgICAgICAgICAgICByZXR1cm4gIiIKICAgICAgICAgcmV0dXJuIHN0cihtYXRjaC5ncm91cCgn
c3ZuX3JldmlzaW9uJykpCiAKKyAgICBkZWYgc3ZuX3RpbWVzdGFtcChzZWxmLCBwYXRoKToKKyAg
ICAgICAgZ2l0X2xvZyA9IHNlbGYuX3J1bl9naXQoWydsb2cnLCAnLTI1JywgJy0tZGF0ZT1pc28n
LCBzZWxmLmZpbmRfY2hlY2tvdXRfcm9vdChwYXRoKV0pCisgICAgICAgIG1hdGNoID0gcmUuc2Vh
cmNoKCJeRGF0ZTpccyooXGR7NH0pLShcZHsyfSktKFxkezJ9KSAoXGR7Mn0pOihcZHsyfSk6KFxk
ezJ9KSAoWystXSkoXGR7Mn0pKFxkezJ9KSQiLCBnaXRfbG9nLCByZS5NVUxUSUxJTkUpCisgICAg
ICAgIGlmIG5vdCBtYXRjaDoKKyAgICAgICAgICAgIHJldHVybiAiIgorCisgICAgICAgICMgTWFu
dWFsbHkgbW9kaWZ5IHRoZSB0aW1lem9uZSBzaW5jZSBHaXQgZG9lc24ndCBoYXZlIGFuIG9wdGl0
b24gdG8gc2hvdyBpdCBpbiBVVEMuCisgICAgICAgICMgR2l0IGFsc28gdHJ1bmNhdGVzIG1pbGxp
c2Vjb25kcyBidXQgd2UncmUgZ29pbmcgdG8gaWdub3JlIHRoYXQgZm9yIG5vdy4KKyAgICAgICAg
dGltZV93aXRoX3RpbWV6b25lID0gZGF0ZXRpbWUuZGF0ZXRpbWUoaW50KG1hdGNoLmdyb3VwKDEp
KSwgaW50KG1hdGNoLmdyb3VwKDIpKSwgaW50KG1hdGNoLmdyb3VwKDMpKSwKKyAgICAgICAgICAg
IGludChtYXRjaC5ncm91cCg0KSksIGludChtYXRjaC5ncm91cCg1KSksIGludChtYXRjaC5ncm91
cCg2KSksIDApCisKKyAgICAgICAgc2lnbiA9IDEgaWYgbWF0Y2guZ3JvdXAoNykgPT0gJysnIGVs
c2UgLTEKKyAgICAgICAgdGltZV93aWhvdXRfdGltZXpvbmUgPSB0aW1lX3dpdGhfdGltZXpvbmUg
LSBkYXRldGltZS50aW1lZGVsdGEoaG91cnM9c2lnbiAqIGludChtYXRjaC5ncm91cCg4KSksIG1p
bnV0ZXM9aW50KG1hdGNoLmdyb3VwKDkpKSkKKyAgICAgICAgcmV0dXJuIHRpbWVfd2lob3V0X3Rp
bWV6b25lLnN0cmZ0aW1lKCclWS0lbS0lZFQlSDolTTolU1onKQorCiAgICAgZGVmIHByZXBlbmRf
c3ZuX3JldmlzaW9uKHNlbGYsIGRpZmYpOgogICAgICAgICByZXZpc2lvbiA9IHNlbGYuaGVhZF9z
dm5fcmV2aXNpb24oKQogICAgICAgICBpZiBub3QgcmV2aXNpb246CkluZGV4OiBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc2NtLnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zY20ucHkJKHJldmlzaW9u
IDE0MzYyNikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9z
Y20ucHkJKHdvcmtpbmcgY29weSkKQEAgLTE2OSw2ICsxNjksOSBAQCBjbGFzcyBTQ006CiAgICAg
ZGVmIHN2bl9yZXZpc2lvbihzZWxmLCBwYXRoKToKICAgICAgICAgc2VsZi5fc3ViY2xhc3NfbXVz
dF9pbXBsZW1lbnQoKQogCisgICAgZGVmIHN2bl90aW1lc3RhbXAoc2VsZiwgcGF0aCk6CisgICAg
ICAgIHNlbGYuX3N1YmNsYXNzX211c3RfaW1wbGVtZW50KCkKKwogICAgIGRlZiBjcmVhdGVfcGF0
Y2goc2VsZiwgZ2l0X2NvbW1pdD1Ob25lLCBjaGFuZ2VkX2ZpbGVzPU5vbmUpOgogICAgICAgICBz
ZWxmLl9zdWJjbGFzc19tdXN0X2ltcGxlbWVudCgpCiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zY21fbW9jay5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc2NtX21vY2sucHkJKHJldmlz
aW9uIDE0MzYyNikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3Nj
bS9zY21fbW9jay5weQkod29ya2luZyBjb3B5KQpAQCAtODQsNiArODQsOSBAQCBjbGFzcyBNb2Nr
U0NNKG9iamVjdCk6CiAgICAgZGVmIHN2bl9yZXZpc2lvbihzZWxmLCBwYXRoKToKICAgICAgICAg
cmV0dXJuICc1Njc4JwogCisgICAgZGVmIHN2bl90aW1lc3RhbXAoc2VsZiwgcGF0aCk6CisgICAg
ICAgIHJldHVybiAnMjAxMy0wMi0wMSAwODo0ODowNSArMDAwMCcKKwogICAgIGRlZiBjcmVhdGVf
cGF0Y2goc2VsZiwgZ2l0X2NvbW1pdCwgY2hhbmdlZF9maWxlcz1Ob25lKToKICAgICAgICAgcmV0
dXJuICJQYXRjaDEiCiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNr
b3V0L3NjbS9zY21fdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3NjbV91bml0dGVzdC5weQkocmV2aXNpb24gMTQzNjI2
KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3NjbV91bml0
dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMTU3NywzICsxNTc3LDE1IEBAIE1PQ0sgcnVuX2Nv
bW1hbmQ6IFsnZ2l0JywgJ2xvZycsICctMjUnLCAKIAogICAgIGRlZiB0ZXN0X3B1c2hfbG9jYWxf
Y29tbWl0c190b19zZXJ2ZXJfd2l0aG91dF91c2VybmFtZV9hbmRfd2l0aF9wYXNzd29yZChzZWxm
KToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXV0aGVudGljYXRpb25FcnJvciwgc2VsZi5t
YWtlX3NjbSgpLnB1c2hfbG9jYWxfY29tbWl0c190b19zZXJ2ZXIsIHsncGFzc3dvcmQnOiAnYmxh
aCd9KQorCisgICAgZGVmIHRlc3Rfc3ZuX3RpbWVzdGFtcChzZWxmKToKKyAgICAgICAgc2NtID0g
c2VsZi5tYWtlX3NjbSgpCisgICAgICAgIHNjbS5maW5kX2NoZWNrb3V0X3Jvb3QgPSBsYW1iZGEg
cGF0aDogJycKKyAgICAgICAgc2NtLl9ydW5fZ2l0ID0gbGFtYmRhIGFyZ3M6ICdEYXRlOiAyMDEz
LTAyLTA4IDA4OjA1OjQ5ICswMDAwJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNjbS5zdm5f
dGltZXN0YW1wKCdzb21lLXBhdGgnKSwgJzIwMTMtMDItMDhUMDg6MDU6NDlaJykKKworICAgICAg
ICBzY20uX3J1bl9naXQgPSBsYW1iZGEgYXJnczogJ0RhdGU6IDIwMTMtMDItMDggMDE6MDI6MDMg
KzAxMzAnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2NtLnN2bl90aW1lc3RhbXAoJ3NvbWUt
cGF0aCcpLCAnMjAxMy0wMi0wN1QyMzozMjowM1onKQorCisgICAgICAgIHNjbS5fcnVuX2dpdCA9
IGxhbWJkYSBhcmdzOiAnRGF0ZTogMjAxMy0wMi0wOCAwMTo1NToyMSAtMDgwMCcKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChzY20uc3ZuX3RpbWVzdGFtcCgnc29tZS1wYXRoJyksICcyMDEzLTAy
LTA4VDA5OjU1OjIxWicpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVj
a291dC9zY20vc3ZuLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29t
bW9uL2NoZWNrb3V0L3NjbS9zdm4ucHkJKHJldmlzaW9uIDE0MzYyNikKKysrIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zdm4ucHkJKHdvcmtpbmcgY29weSkKQEAg
LTI0Niw2ICsyNDYsMTIgQEAgY2xhc3MgU1ZOKFNDTSwgU1ZOUmVwb3NpdG9yeSk6CiAgICAgZGVm
IHN2bl9yZXZpc2lvbihzZWxmLCBwYXRoKToKICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWVfZnJv
bV9zdm5faW5mbyhwYXRoLCAnUmV2aXNpb24nKQogCisgICAgZGVmIHN2bl90aW1lc3RhbXAoc2Vs
ZiwgcGF0aCk6CisgICAgICAgICMgV2UgdXNlIC0teG1sIHRvIGdldCB0aW1lc3RhbXBzIGxpa2Ug
MjAxMy0wMi0wOFQwODoxODowNC45NjQ0MDlaCisgICAgICAgIGluZm9fb3V0cHV0ID0gRXhlY3V0
aXZlKCkucnVuX2NvbW1hbmQoW3NlbGYuZXhlY3V0YWJsZV9uYW1lLCAnaW5mbycsICctLXhtbCdd
LCBjd2Q9cGF0aCkucnN0cmlwKCkKKyAgICAgICAgbWF0Y2ggPSByZS5zZWFyY2gociJePGRhdGU+
KD9QPHZhbHVlPi4rKTwvZGF0ZT4kIiwgaW5mb19vdXRwdXQsIHJlLk1VTFRJTElORSkKKyAgICAg
ICAgcmV0dXJuIG1hdGNoLmdyb3VwKCd2YWx1ZScpCisKICAgICAjIEZJWE1FOiBUaGlzIG1ldGhv
ZCBzaG91bGQgYmUgb24gQ2hlY2tvdXQuCiAgICAgZGVmIGNyZWF0ZV9wYXRjaChzZWxmLCBnaXRf
Y29tbWl0PU5vbmUsIGNoYW5nZWRfZmlsZXM9Tm9uZSk6CiAgICAgICAgICIiIlJldHVybnMgYSBi
eXRlIGFycmF5IChzdHIoKSkgcmVwcmVzZW50aW5nIHRoZSBwYXRjaCBmaWxlLgpJbmRleDogVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1
bHRzX2dlbmVyYXRvci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5CShyZXZp
c2lvbiAxNDM2MjYpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlv
dXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5CSh3b3JraW5nIGNvcHkpCkBAIC01
MjYsMTEgKzUyNiwxMiBAQCBjbGFzcyBKU09OUmVzdWx0c0dlbmVyYXRvckJhc2Uob2JqZWN0KToK
ICAgICAgICAgZm9yIChuYW1lLCBwYXRoKSBpbiBzZWxmLl9zdm5fcmVwb3NpdG9yaWVzOgogICAg
ICAgICAgICAgIyBOb3RlOiBmb3IgSlNPTiBmaWxlJ3MgYmFja3dhcmQtY29tcGF0aWJpbGl0eSB3
ZSB1c2UgJ2Nocm9tZScgcmF0aGVyCiAgICAgICAgICAgICAjIHRoYW4gJ2Nocm9taXVtJyBoZXJl
LgotICAgICAgICAgICAgaWYgbmFtZSA9PSAnY2hyb21pdW0nOgotICAgICAgICAgICAgICAgIG5h
bWUgPSAnY2hyb21lJworICAgICAgICAgICAgbG93ZXJjYXNlX25hbWUgPSBuYW1lLmxvd2VyKCkK
KyAgICAgICAgICAgIGlmIGxvd2VyY2FzZV9uYW1lID09ICdjaHJvbWl1bSc6CisgICAgICAgICAg
ICAgICAgbG93ZXJjYXNlX25hbWUgPSAnY2hyb21lJwogICAgICAgICAgICAgc2VsZi5faW5zZXJ0
X2l0ZW1faW50b19yYXdfbGlzdChyZXN1bHRzX2Zvcl9idWlsZGVyLAogICAgICAgICAgICAgICAg
IHNlbGYuX2dldF9zdm5fcmV2aXNpb24ocGF0aCksCi0gICAgICAgICAgICAgICAgbmFtZSArICdS
ZXZpc2lvbicpCisgICAgICAgICAgICAgICAgbG93ZXJjYXNlX25hbWUgKyAnUmV2aXNpb24nKQog
CiAgICAgICAgIHNlbGYuX2luc2VydF9pdGVtX2ludG9fcmF3X2xpc3QocmVzdWx0c19mb3JfYnVp
bGRlciwKICAgICAgICAgICAgIGludCh0aW1lLnRpbWUoKSksCkluZGV4OiBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CShyZXZpc2lvbiAxNDM2
MjYpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTEwOTcsMTEgKzEwOTcsMTEgQEAgY2xhc3MgUG9ydChvYmplY3Qp
OgogCiAgICAgZGVmIHJlcG9zaXRvcnlfcGF0aHMoc2VsZik6CiAgICAgICAgICIiIlJldHVybnMg
YSBsaXN0IG9mIChyZXBvc2l0b3J5X25hbWUsIHJlcG9zaXRvcnlfcGF0aCkgdHVwbGVzIG9mIGl0
cyBkZXBlbmRpbmcgY29kZSBiYXNlLgotICAgICAgICBCeSBkZWZhdWx0IGl0IHJldHVybnMgYSBs
aXN0IHRoYXQgb25seSBjb250YWlucyBhICgnd2Via2l0JywgPHdlYmtpdFJlcG9zc2l0b3J5UGF0
aD4pIHR1cGxlLiIiIgorICAgICAgICBCeSBkZWZhdWx0IGl0IHJldHVybnMgYSBsaXN0IHRoYXQg
b25seSBjb250YWlucyBhICgnV2ViS2l0JywgPHdlYmtpdFJlcG9zc2l0b3J5UGF0aD4pIHR1cGxl
LiIiIgogCi0gICAgICAgICMgV2UgdXNlIExheW91dFRlc3QgZGlyZWN0b3J5IGhlcmUgYmVjYXVz
ZSB3ZWJraXRfYmFzZSBpc24ndCBhIHBhcnQgd2Via2l0IHJlcG9zaXRvcnkgaW4gQ2hyb21pdW0g
cG9ydAorICAgICAgICAjIFdlIHVzZSBMYXlvdXRUZXN0IGRpcmVjdG9yeSBoZXJlIGJlY2F1c2Ug
d2Via2l0X2Jhc2UgaXNuJ3QgYSBwYXJ0IG9mIFdlYktpdCByZXBvc2l0b3J5IGluIENocm9taXVt
IHBvcnQKICAgICAgICAgIyB3aGVyZSB0dXJuayBpc24ndCBjaGVja2VkIG91dCBhcyBhIHdob2xl
LgotICAgICAgICByZXR1cm4gWygnd2Via2l0Jywgc2VsZi5sYXlvdXRfdGVzdHNfZGlyKCkpXQor
ICAgICAgICByZXR1cm4gWygnV2ViS2l0Jywgc2VsZi5sYXlvdXRfdGVzdHNfZGlyKCkpXQogCiAg
ICAgX1dESUZGX0RFTCA9ICcjI1dESUZGX0RFTCMjJwogICAgIF9XRElGRl9BREQgPSAnIyNXRElG
Rl9BREQjIycKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
Y2hyb21pdW0ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC9jaHJvbWl1bS5weQkocmV2aXNpb24gMTQzNjI2KQorKysgVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weQkod29ya2luZyBjb3B5KQpA
QCAtMzY0LDcgKzM2NCw3IEBAIGNsYXNzIENocm9taXVtUG9ydChQb3J0KToKIAogICAgIGRlZiBy
ZXBvc2l0b3J5X3BhdGhzKHNlbGYpOgogICAgICAgICByZXBvcyA9IHN1cGVyKENocm9taXVtUG9y
dCwgc2VsZikucmVwb3NpdG9yeV9wYXRocygpCi0gICAgICAgIHJlcG9zLmFwcGVuZCgoJ2Nocm9t
aXVtJywgc2VsZi5wYXRoX2Zyb21fY2hyb21pdW1fYmFzZSgnYnVpbGQnKSkpCisgICAgICAgIHJl
cG9zLmFwcGVuZCgoJ0Nocm9taXVtJywgc2VsZi5wYXRoX2Zyb21fY2hyb21pdW1fYmFzZSgnYnVp
bGQnKSkpCiAgICAgICAgIHJldHVybiByZXBvcwogCiAgICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNl
bGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4pOgpJbmRleDogVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdHNydW5uZXIucHkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJm
dGVzdHNydW5uZXIucHkJKHJldmlzaW9uIDE0MzYyNikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3RzcnVubmVyLnB5CSh3b3JraW5nIGNvcHkpCkBA
IC0zMyw2ICszMyw3IEBAIGltcG9ydCBqc29uCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG9wdHBh
cnNlCiBpbXBvcnQgdGltZQoraW1wb3J0IGRhdGV0aW1lCiAKIGZyb20gd2Via2l0cHkuY29tbW9u
IGltcG9ydCBmaW5kX2ZpbGVzCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5jaGVja291dC5zY20uZGV0
ZWN0aW9uIGltcG9ydCBTQ01EZXRlY3RvcgpAQCAtNjcsNiArNjgsNyBAQCBjbGFzcyBQZXJmVGVz
dHNSdW5uZXIob2JqZWN0KToKICAgICAgICAgc2VsZi5fYmFzZV9wYXRoID0gc2VsZi5fcG9ydC5w
ZXJmX3Rlc3RzX2RpcigpCiAgICAgICAgIHNlbGYuX3Jlc3VsdHMgPSB7fQogICAgICAgICBzZWxm
Ll90aW1lc3RhbXAgPSB0aW1lLnRpbWUoKQorICAgICAgICBzZWxmLl91dGNfdGltZXN0YW1wID0g
ZGF0ZXRpbWUuZGF0ZXRpbWUudXRjbm93KCkKICAgICAgICAgc2VsZi5fbmVlZHNfaHR0cCA9IE5v
bmUKICAgICAgICAgc2VsZi5faGFzX2h0dHBfbG9jayA9IEZhbHNlCiAKQEAgLTEyNiw4ICsxMjgs
NiBAQCBjbGFzcyBQZXJmVGVzdHNSdW5uZXIob2JqZWN0KToKICAgICAgICAgcmV0dXJuIG9wdHBh
cnNlLk9wdGlvblBhcnNlcihvcHRpb25fbGlzdD0ocGVyZl9vcHRpb25fbGlzdCkpLnBhcnNlX2Fy
Z3MoYXJncykKIAogICAgIGRlZiBfY29sbGVjdF90ZXN0cyhzZWxmKToKLSAgICAgICAgIiIiUmV0
dXJuIHRoZSBsaXN0IG9mIHRlc3RzIGZvdW5kLiIiIgotCiAgICAgICAgIHRlc3RfZXh0ZW5zaW9u
cyA9IFsnLmh0bWwnLCAnLnN2ZyddCiAgICAgICAgIGlmIHNlbGYuX29wdGlvbnMucmVwbGF5Ogog
ICAgICAgICAgICAgdGVzdF9leHRlbnNpb25zLmFwcGVuZCgnLnJlcGxheScpCkBAIC0yMDgsMjQg
KzIwOCwzMCBAQCBjbGFzcyBQZXJmVGVzdHNSdW5uZXIob2JqZWN0KToKICAgICBkZWYgX2dlbmVy
YXRlX2FuZF9zaG93X3Jlc3VsdHMoc2VsZik6CiAgICAgICAgIG9wdGlvbnMgPSBzZWxmLl9vcHRp
b25zCiAgICAgICAgIG91dHB1dF9qc29uX3BhdGggPSBzZWxmLl9vdXRwdXRfanNvbl9wYXRoKCkK
LSAgICAgICAgb3V0cHV0ID0gc2VsZi5fZ2VuZXJhdGVfcmVzdWx0c19kaWN0KHNlbGYuX3RpbWVz
dGFtcCwgb3B0aW9ucy5kZXNjcmlwdGlvbiwgb3B0aW9ucy5wbGF0Zm9ybSwgb3B0aW9ucy5idWls
ZGVyX25hbWUsIG9wdGlvbnMuYnVpbGRfbnVtYmVyKQorICAgICAgICBvdXRwdXQsIHBlcmZfd2Vi
a2l0X291dHB1dCA9IHNlbGYuX2dlbmVyYXRlX3Jlc3VsdHNfZGljdChzZWxmLl90aW1lc3RhbXAs
IG9wdGlvbnMuZGVzY3JpcHRpb24sIG9wdGlvbnMucGxhdGZvcm0sIG9wdGlvbnMuYnVpbGRlcl9u
YW1lLCBvcHRpb25zLmJ1aWxkX251bWJlcikKIAogICAgICAgICBpZiBvcHRpb25zLnNsYXZlX2Nv
bmZpZ19qc29uX3BhdGg6Ci0gICAgICAgICAgICBvdXRwdXQgPSBzZWxmLl9tZXJnZV9zbGF2ZV9j
b25maWdfanNvbihvcHRpb25zLnNsYXZlX2NvbmZpZ19qc29uX3BhdGgsIG91dHB1dCkKKyAgICAg
ICAgICAgIG91dHB1dCwgcGVyZl93ZWJraXRfb3V0cHV0ID0gc2VsZi5fbWVyZ2Vfc2xhdmVfY29u
ZmlnX2pzb24ob3B0aW9ucy5zbGF2ZV9jb25maWdfanNvbl9wYXRoLCBvdXRwdXQsIHBlcmZfd2Vi
a2l0X291dHB1dCkKICAgICAgICAgICAgIGlmIG5vdCBvdXRwdXQ6CiAgICAgICAgICAgICAgICAg
cmV0dXJuIHNlbGYuRVhJVF9DT0RFX0JBRF9TT1VSQ0VfSlNPTgogCiAgICAgICAgIG91dHB1dCA9
IHNlbGYuX21lcmdlX291dHB1dHNfaWZfbmVlZGVkKG91dHB1dF9qc29uX3BhdGgsIG91dHB1dCkK
ICAgICAgICAgaWYgbm90IG91dHB1dDoKICAgICAgICAgICAgIHJldHVybiBzZWxmLkVYSVRfQ09E
RV9CQURfTUVSR0UKKyAgICAgICAgcGVyZl93ZWJraXRfb3V0cHV0ID0gW3BlcmZfd2Via2l0X291
dHB1dF0KIAogICAgICAgICByZXN1bHRzX3BhZ2VfcGF0aCA9IHNlbGYuX2hvc3QuZmlsZXN5c3Rl
bS5zcGxpdGV4dChvdXRwdXRfanNvbl9wYXRoKVswXSArICcuaHRtbCcKLSAgICAgICAgc2VsZi5f
Z2VuZXJhdGVfb3V0cHV0X2ZpbGVzKG91dHB1dF9qc29uX3BhdGgsIHJlc3VsdHNfcGFnZV9wYXRo
LCBvdXRwdXQpCisgICAgICAgIHBlcmZfd2Via2l0X2pzb25fcGF0aCA9IHNlbGYuX2hvc3QuZmls
ZXN5c3RlbS5zcGxpdGV4dChvdXRwdXRfanNvbl9wYXRoKVswXSArICctcGVyZi13ZWJraXQuanNv
bicgaWYgb3B0aW9ucy50ZXN0X3Jlc3VsdHNfc2VydmVyIGVsc2UgTm9uZQorICAgICAgICBzZWxm
Ll9nZW5lcmF0ZV9vdXRwdXRfZmlsZXMob3V0cHV0X2pzb25fcGF0aCwgcGVyZl93ZWJraXRfanNv
bl9wYXRoLCByZXN1bHRzX3BhZ2VfcGF0aCwgb3V0cHV0LCBwZXJmX3dlYmtpdF9vdXRwdXQpCiAK
ICAgICAgICAgaWYgb3B0aW9ucy50ZXN0X3Jlc3VsdHNfc2VydmVyOgogICAgICAgICAgICAgaWYg
bm90IHNlbGYuX3VwbG9hZF9qc29uKG9wdGlvbnMudGVzdF9yZXN1bHRzX3NlcnZlciwgb3V0cHV0
X2pzb25fcGF0aCk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuRVhJVF9DT0RFX0ZBSUxF
RF9VUExPQURJTkcKIAorICAgICAgICAgICAgIyBGSVhNRTogUmVtb3ZlIHRoaXMgY29kZSBvbmNl
IHdlJ3ZlIG1hZGUgdHJhbnNpdGlvbiB0byB1c2UgcGVyZi53ZWJraXQub3JnCisgICAgICAgICAg
ICBpZiBub3Qgc2VsZi5fdXBsb2FkX2pzb24oJ3BlcmYud2Via2l0Lm9yZycsIHBlcmZfd2Via2l0
X2pzb25fcGF0aCwgIi9hcGkvcmVwb3J0Iik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYu
RVhJVF9DT0RFX0ZBSUxFRF9VUExPQURJTkcKKwogICAgICAgICBpZiBvcHRpb25zLnNob3dfcmVz
dWx0czoKICAgICAgICAgICAgIHNlbGYuX3BvcnQuc2hvd19yZXN1bHRzX2h0bWxfZmlsZShyZXN1
bHRzX3BhZ2VfcGF0aCkKIApAQCAtMjMzLDkgKzIzOSwxMyBAQCBjbGFzcyBQZXJmVGVzdHNSdW5u
ZXIob2JqZWN0KToKICAgICAgICAgY29udGVudHMgPSB7J3Jlc3VsdHMnOiBzZWxmLl9yZXN1bHRz
fQogICAgICAgICBpZiBkZXNjcmlwdGlvbjoKICAgICAgICAgICAgIGNvbnRlbnRzWydkZXNjcmlw
dGlvbiddID0gZGVzY3JpcHRpb24KKworICAgICAgICByZXZpc2lvbnNfZm9yX3BlcmZfd2Via2l0
ID0ge30KICAgICAgICAgZm9yIChuYW1lLCBwYXRoKSBpbiBzZWxmLl9wb3J0LnJlcG9zaXRvcnlf
cGF0aHMoKToKICAgICAgICAgICAgIHNjbSA9IFNDTURldGVjdG9yKHNlbGYuX2hvc3QuZmlsZXN5
c3RlbSwgc2VsZi5faG9zdC5leGVjdXRpdmUpLmRldGVjdF9zY21fc3lzdGVtKHBhdGgpIG9yIHNl
bGYuX2hvc3Quc2NtKCkKLSAgICAgICAgICAgIGNvbnRlbnRzW25hbWUgKyAnLXJldmlzaW9uJ10g
PSBzY20uc3ZuX3JldmlzaW9uKHBhdGgpCisgICAgICAgICAgICByZXZpc2lvbiA9IHNjbS5zdm5f
cmV2aXNpb24ocGF0aCkKKyAgICAgICAgICAgIGNvbnRlbnRzW25hbWUubG93ZXIoKSArICctcmV2
aXNpb24nXSA9IHJldmlzaW9uCisgICAgICAgICAgICByZXZpc2lvbnNfZm9yX3BlcmZfd2Via2l0
W25hbWVdID0geydyZXZpc2lvbic6IHN0cihyZXZpc2lvbiksICd0aW1lc3RhbXAnOiBzY20uc3Zu
X3RpbWVzdGFtcChwYXRoKX0KIAogICAgICAgICAjIEZJWE1FOiBBZGQgLS1icmFuY2ggb3IgYXV0
by1kZXRlY3QgdGhlIGJyYW5jaCB3ZSdyZSBpbgogICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiB7
J3RpbWVzdGFtcCc6IGludCh0aW1lc3RhbXApLCAnYnJhbmNoJzogc2VsZi5fZGVmYXVsdF9icmFu
Y2gsICdwbGF0Zm9ybSc6IHBsYXRmb3JtLApAQCAtMjQzLDIwICsyNTMsNjYgQEAgY2xhc3MgUGVy
ZlRlc3RzUnVubmVyKG9iamVjdCk6CiAgICAgICAgICAgICBpZiB2YWx1ZToKICAgICAgICAgICAg
ICAgICBjb250ZW50c1trZXldID0gdmFsdWUKIAotICAgICAgICByZXR1cm4gY29udGVudHMKKyAg
ICAgICAgY29udGVudHNfZm9yX3BlcmZfd2Via2l0ID0geworICAgICAgICAgICAgJ2J1aWxkZXJO
YW1lJzogYnVpbGRlcl9uYW1lLAorICAgICAgICAgICAgJ2J1aWxkTnVtYmVyJzogc3RyKGJ1aWxk
X251bWJlciksCisgICAgICAgICAgICAnYnVpbGRUaW1lJzogc2VsZi5fZGF0ZXRpbWVfaW5fRVM1
X2NvbXBhdGlibGVfaXNvX2Zvcm1hdChzZWxmLl91dGNfdGltZXN0YW1wKSwKKyAgICAgICAgICAg
ICdwbGF0Zm9ybSc6IHBsYXRmb3JtLAorICAgICAgICAgICAgJ3JldmlzaW9ucyc6IHJldmlzaW9u
c19mb3JfcGVyZl93ZWJraXQsCisgICAgICAgICAgICAndGVzdHMnOiB7fX0KIAotICAgIGRlZiBf
bWVyZ2Vfc2xhdmVfY29uZmlnX2pzb24oc2VsZiwgc2xhdmVfY29uZmlnX2pzb25fcGF0aCwgb3V0
cHV0KToKKyAgICAgICAgZm9yIG1ldHJpY19mdWxsX25hbWUgaW4gc2VsZi5fcmVzdWx0czoKKyAg
ICAgICAgICAgIHJlc3VsdCA9IHNlbGYuX3Jlc3VsdHNbbWV0cmljX2Z1bGxfbmFtZV0KKworICAg
ICAgICAgICAgIyBXZSBjYW4ndCByZXByb3QgcmVzdWx0cyB3aXRob3V0IGluZGl2aXN1YWwgbWVh
c3VyZW1lbnRzLgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UocmVzdWx0LCBkaWN0KToK
KyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBhc3NlcnQgbWV0cmljX2Z1
bGxfbmFtZS5jb3VudCgnOicpIDw9IDEKKyAgICAgICAgICAgIHRlc3RfZnVsbF9uYW1lLCBfLCBt
ZXRyaWMgPSBtZXRyaWNfZnVsbF9uYW1lLnBhcnRpdGlvbignOicpCisgICAgICAgICAgICBpZiBu
b3QgbWV0cmljOgorICAgICAgICAgICAgICAgIG1ldHJpYyA9IHsnZnBzJzogJ0ZyYW1lUmF0ZScs
ICdydW5zL3MnOiAnUnVucycsICdtcyc6ICdUaW1lJ31bcmVzdWx0Wyd1bml0J11dCisKKyAgICAg
ICAgICAgIHRlc3RzID0gY29udGVudHNfZm9yX3BlcmZfd2Via2l0Wyd0ZXN0cyddCisgICAgICAg
ICAgICBwYXRoID0gdGVzdF9mdWxsX25hbWUuc3BsaXQoJy8nKQorICAgICAgICAgICAgZm9yIGkg
aW4gcmFuZ2UoMCwgbGVuKHBhdGgpKToKKyAgICAgICAgICAgICAgICAjIEZJWE1FOiBXZSBzaG91
bGRuJ3QgYXNzdW1lIEhUTUwgZXh0ZW5zaW9uLgorICAgICAgICAgICAgICAgIGlzX2xhc3RfdG9r
ZW4gPSBpICsgMSA9PSBsZW4ocGF0aCkKKyAgICAgICAgICAgICAgICB1cmwgPSAnaHR0cDovL3Ry
YWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5rL1BlcmZvcm1hbmNlVGVzdHMvJyArICcvJy5qb2lu
KHBhdGhbMDppICsgMV0pCisgICAgICAgICAgICAgICAgaWYgaXNfbGFzdF90b2tlbjoKKyAgICAg
ICAgICAgICAgICAgICAgdXJsICs9ICcuaHRtbCcKKworICAgICAgICAgICAgICAgIHRlc3RzLnNl
dGRlZmF1bHQocGF0aFtpXSwgeyd1cmwnOiB1cmx9KQorICAgICAgICAgICAgICAgIGN1cnJlbnRf
dGVzdCA9IHRlc3RzW3BhdGhbaV1dCisgICAgICAgICAgICAgICAgaWYgaXNfbGFzdF90b2tlbjoK
KyAgICAgICAgICAgICAgICAgICAgY3VycmVudF90ZXN0LnNldGRlZmF1bHQoJ21ldHJpY3MnLCB7
fSkKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IG1ldHJpYyBub3QgaW4gY3VycmVudF90ZXN0
WydtZXRyaWNzJ10KKyAgICAgICAgICAgICAgICAgICAgY3VycmVudF90ZXN0WydtZXRyaWNzJ11b
bWV0cmljXSA9IHsnY3VycmVudCc6IHJlc3VsdFsndmFsdWVzJ119CisgICAgICAgICAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudF90ZXN0LnNldGRlZmF1bHQoJ3Rlc3Rz
Jywge30pCisgICAgICAgICAgICAgICAgICAgIHRlc3RzID0gY3VycmVudF90ZXN0Wyd0ZXN0cydd
CisKKyAgICAgICAgcmV0dXJuIGNvbnRlbnRzLCBjb250ZW50c19mb3JfcGVyZl93ZWJraXQKKwor
ICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX2RhdGV0aW1lX2luX0VTNV9jb21wYXRpYmxlX2lz
b19mb3JtYXQoZGF0ZXRpbWUpOgorICAgICAgICByZXR1cm4gZGF0ZXRpbWUuc3RyZnRpbWUoJyVZ
LSVtLSVkVCVIOiVNOiVTLiVmJykKKworICAgIGRlZiBfbWVyZ2Vfc2xhdmVfY29uZmlnX2pzb24o
c2VsZiwgc2xhdmVfY29uZmlnX2pzb25fcGF0aCwgY29udGVudHMsIGNvbnRlbnRzX2Zvcl9wZXJm
X3dlYmtpdCk6CiAgICAgICAgIGlmIG5vdCBzZWxmLl9ob3N0LmZpbGVzeXN0ZW0uaXNmaWxlKHNs
YXZlX2NvbmZpZ19qc29uX3BhdGgpOgogICAgICAgICAgICAgX2xvZy5lcnJvcigiTWlzc2luZyBz
bGF2ZSBjb25maWd1cmF0aW9uIEpTT04gZmlsZTogJXMiICUgc2xhdmVfY29uZmlnX2pzb25fcGF0
aCkKLSAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICByZXR1cm4gTm9uZSwgTm9u
ZQogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNsYXZlX2NvbmZpZ19qc29uID0gc2VsZi5f
aG9zdC5maWxlc3lzdGVtLm9wZW5fdGV4dF9maWxlX2Zvcl9yZWFkaW5nKHNsYXZlX2NvbmZpZ19q
c29uX3BhdGgpCiAgICAgICAgICAgICBzbGF2ZV9jb25maWcgPSBqc29uLmxvYWQoc2xhdmVfY29u
ZmlnX2pzb24pCi0gICAgICAgICAgICByZXR1cm4gZGljdChzbGF2ZV9jb25maWcuaXRlbXMoKSAr
IG91dHB1dC5pdGVtcygpKQorICAgICAgICAgICAgY29udGVudHMgPSBkaWN0KHNsYXZlX2NvbmZp
Zy5pdGVtcygpICsgY29udGVudHMuaXRlbXMoKSkKKyAgICAgICAgICAgIGZvciBrZXkgaW4gc2xh
dmVfY29uZmlnOgorICAgICAgICAgICAgICAgIGNvbnRlbnRzX2Zvcl9wZXJmX3dlYmtpdFsnYnVp
bGRlcicgKyBrZXkuY2FwaXRhbGl6ZSgpXSA9IHNsYXZlX2NvbmZpZ1trZXldCisgICAgICAgICAg
ICByZXR1cm4gY29udGVudHMsIGNvbnRlbnRzX2Zvcl9wZXJmX3dlYmtpdAogICAgICAgICBleGNl
cHQgRXhjZXB0aW9uLCBlcnJvcjoKICAgICAgICAgICAgIF9sb2cuZXJyb3IoIkZhaWxlZCB0byBt
ZXJnZSBzbGF2ZSBjb25maWd1cmF0aW9uIEpTT04gZmlsZSAlczogJXMiICUgKHNsYXZlX2NvbmZp
Z19qc29uX3BhdGgsIGVycm9yKSkKLSAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJu
IE5vbmUsIE5vbmUKIAogICAgIGRlZiBfbWVyZ2Vfb3V0cHV0c19pZl9uZWVkZWQoc2VsZiwgb3V0
cHV0X2pzb25fcGF0aCwgb3V0cHV0KToKICAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5yZXNldF9y
ZXN1bHRzIG9yIG5vdCBzZWxmLl9ob3N0LmZpbGVzeXN0ZW0uaXNmaWxlKG91dHB1dF9qc29uX3Bh
dGgpOgpAQCAtMjY4LDEyICszMjQsMTUgQEAgY2xhc3MgUGVyZlRlc3RzUnVubmVyKG9iamVjdCk6
CiAgICAgICAgICAgICBfbG9nLmVycm9yKCJGYWlsZWQgdG8gbWVyZ2Ugb3V0cHV0IEpTT04gZmls
ZSAlczogJXMiICUgKG91dHB1dF9qc29uX3BhdGgsIGVycm9yKSkKICAgICAgICAgcmV0dXJuIE5v
bmUKIAotICAgIGRlZiBfZ2VuZXJhdGVfb3V0cHV0X2ZpbGVzKHNlbGYsIG91dHB1dF9qc29uX3Bh
dGgsIHJlc3VsdHNfcGFnZV9wYXRoLCBvdXRwdXQpOgorICAgIGRlZiBfZ2VuZXJhdGVfb3V0cHV0
X2ZpbGVzKHNlbGYsIG91dHB1dF9qc29uX3BhdGgsIHBlcmZfd2Via2l0X2pzb25fcGF0aCwgcmVz
dWx0c19wYWdlX3BhdGgsIG91dHB1dCwgcGVyZl93ZWJraXRfb3V0cHV0KToKICAgICAgICAgZmls
ZXN5c3RlbSA9IHNlbGYuX2hvc3QuZmlsZXN5c3RlbQogCiAgICAgICAgIGpzb25fb3V0cHV0ID0g
anNvbi5kdW1wcyhvdXRwdXQpCiAgICAgICAgIGZpbGVzeXN0ZW0ud3JpdGVfdGV4dF9maWxlKG91
dHB1dF9qc29uX3BhdGgsIGpzb25fb3V0cHV0KQogCisgICAgICAgIGlmIHBlcmZfd2Via2l0X2pz
b25fcGF0aDoKKyAgICAgICAgICAgIGZpbGVzeXN0ZW0ud3JpdGVfdGV4dF9maWxlKHBlcmZfd2Vi
a2l0X2pzb25fcGF0aCwganNvbi5kdW1wcyhwZXJmX3dlYmtpdF9vdXRwdXQpKQorCiAgICAgICAg
IGlmIHJlc3VsdHNfcGFnZV9wYXRoOgogICAgICAgICAgICAgdGVtcGxhdGVfcGF0aCA9IGZpbGVz
eXN0ZW0uam9pbihzZWxmLl9wb3J0LnBlcmZfdGVzdHNfZGlyKCksICdyZXNvdXJjZXMvcmVzdWx0
cy10ZW1wbGF0ZS5odG1sJykKICAgICAgICAgICAgIHRlbXBsYXRlID0gZmlsZXN5c3RlbS5yZWFk
X3RleHRfZmlsZSh0ZW1wbGF0ZV9wYXRoKQpAQCAtMjg0LDIyICszNDMsMzAgQEAgY2xhc3MgUGVy
ZlRlc3RzUnVubmVyKG9iamVjdCk6CiAKICAgICAgICAgICAgIGZpbGVzeXN0ZW0ud3JpdGVfdGV4
dF9maWxlKHJlc3VsdHNfcGFnZV9wYXRoLCByZXN1bHRzX3BhZ2UpCiAKLSAgICBkZWYgX3VwbG9h
ZF9qc29uKHNlbGYsIHRlc3RfcmVzdWx0c19zZXJ2ZXIsIGpzb25fcGF0aCwgZmlsZV91cGxvYWRl
cj1GaWxlVXBsb2FkZXIpOgotICAgICAgICB1cGxvYWRlciA9IGZpbGVfdXBsb2FkZXIoImh0dHBz
Oi8vJXMvYXBpL3Rlc3QvcmVwb3J0IiAlIHRlc3RfcmVzdWx0c19zZXJ2ZXIsIDEyMCkKKyAgICBk
ZWYgX3VwbG9hZF9qc29uKHNlbGYsIHRlc3RfcmVzdWx0c19zZXJ2ZXIsIGpzb25fcGF0aCwgaG9z
dF9wYXRoPSIvYXBpL3Rlc3QvcmVwb3J0IiwgZmlsZV91cGxvYWRlcj1GaWxlVXBsb2FkZXIpOgor
ICAgICAgICB1cmwgPSAiaHR0cHM6Ly8lcyVzIiAlICh0ZXN0X3Jlc3VsdHNfc2VydmVyLCBob3N0
X3BhdGgpCisgICAgICAgIHVwbG9hZGVyID0gZmlsZV91cGxvYWRlcih1cmwsIDEyMCkKICAgICAg
ICAgdHJ5OgogICAgICAgICAgICAgcmVzcG9uc2UgPSB1cGxvYWRlci51cGxvYWRfc2luZ2xlX3Rl
eHRfZmlsZShzZWxmLl9ob3N0LmZpbGVzeXN0ZW0sICdhcHBsaWNhdGlvbi9qc29uJywganNvbl9w
YXRoKQogICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlcnJvcjoKLSAgICAgICAgICAgIF9sb2cu
ZXJyb3IoIkZhaWxlZCB0byB1cGxvYWQgSlNPTiBmaWxlIGluIDEyMHM6ICVzIiAlIGVycm9yKQor
ICAgICAgICAgICAgX2xvZy5lcnJvcigiRmFpbGVkIHRvIHVwbG9hZCBKU09OIGZpbGUgdG8gJXMg
aW4gMTIwczogJXMiICUgKHVybCwgZXJyb3IpKQogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAK
ICAgICAgICAgcmVzcG9uc2VfYm9keSA9IFtsaW5lLnN0cmlwKCdcbicpIGZvciBsaW5lIGluIHJl
c3BvbnNlXQogICAgICAgICBpZiByZXNwb25zZV9ib2R5ICE9IFsnT0snXToKLSAgICAgICAgICAg
IF9sb2cuZXJyb3IoIlVwbG9hZGVkIEpTT04gYnV0IGdvdCBhIGJhZCByZXNwb25zZToiKQotICAg
ICAgICAgICAgZm9yIGxpbmUgaW4gcmVzcG9uc2VfYm9keToKLSAgICAgICAgICAgICAgICBfbG9n
LmVycm9yKGxpbmUpCi0gICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIHRyeToK
KyAgICAgICAgICAgICAgICBwYXJzZWRfcmVzcG9uc2UgPSBqc29uLmxvYWRzKCdcbicuam9pbihy
ZXNwb25zZV9ib2R5KSkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBfbG9n
LmVycm9yKCJVcGxvYWRlZCBKU09OIHRvICVzIGJ1dCBnb3QgYSBiYWQgcmVzcG9uc2U6IiAlIHVy
bCkKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiByZXNwb25zZV9ib2R5OgorICAgICAgICAg
ICAgICAgICAgICBfbG9nLmVycm9yKGxpbmUpCisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNl
CisgICAgICAgICAgICBpZiBwYXJzZWRfcmVzcG9uc2UuZ2V0KCdzdGF0dXMnKSAhPSAnT0snOgor
ICAgICAgICAgICAgICAgIF9sb2cuZXJyb3IoIlVwbG9hZGVkIEpTT04gdG8gJXMgYnV0IGdvdCBh
biBlcnJvcjoiICUgdXJsKQorICAgICAgICAgICAgICAgIF9sb2cuZXJyb3IoanNvbi5kdW1wcyhw
YXJzZWRfcmVzcG9uc2UsIGluZGVudD00KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UK
IAotICAgICAgICBfbG9nLmluZm8oIkpTT04gZmlsZSB1cGxvYWRlZC4iKQorICAgICAgICBfbG9n
LmluZm8oIkpTT04gZmlsZSB1cGxvYWRlZCB0byAlcy4iICUgdXJsKQogICAgICAgICByZXR1cm4g
VHJ1ZQogCiAgICAgZGVmIF9wcmludF9zdGF0dXMoc2VsZiwgdGVzdHMsIGV4cGVjdGVkLCB1bmV4
cGVjdGVkKToKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMv
cGVyZnRlc3RzcnVubmVyX2ludGVncmF0aW9udGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0c3J1bm5lcl9pbnRlZ3Jh
dGlvbnRlc3QucHkJKHJldmlzaW9uIDE0MzYyNikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
cGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3RzcnVubmVyX2ludGVncmF0aW9udGVzdC5weQkod29y
a2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogIiIiSW50ZWdyYXRpb24gdGVzdHMgZm9yIHJ1
bl9wZXJmX3Rlc3RzLiIiIgogCiBpbXBvcnQgU3RyaW5nSU8KK2ltcG9ydCBkYXRldGltZQogaW1w
b3J0IGpzb24KIGltcG9ydCByZQogaW1wb3J0IHVuaXR0ZXN0MiBhcyB1bml0dGVzdApAQCAtMzIx
LDE0ICszMjIsMTcgQEAgY2xhc3MgTWFpblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAg
ICAgIHVwbG9hZGVkID0gW0ZhbHNlXQogCi0gICAgICAgIGRlZiBtb2NrX3VwbG9hZF9qc29uKGhv
c3RuYW1lLCBqc29uX3BhdGgpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob3N0bmFt
ZSwgJ3NvbWUuaG9zdCcpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpzb25fcGF0aCwg
Jy9tb2NrLWNoZWNrb3V0L291dHB1dC5qc29uJykKKyAgICAgICAgZGVmIG1vY2tfdXBsb2FkX2pz
b24oaG9zdG5hbWUsIGpzb25fcGF0aCwgaG9zdF9wYXRoPU5vbmUpOgorICAgICAgICAgICAgIyBG
SVhNRTogR2V0IHJpZCBvZiB0aGUgaGFyZC1jb2RlZCBwZXJmLndlYmtpdC5vcmcgb25jZSB3ZSd2
ZSBjb21wbGV0ZWQgdGhlIHRyYW5zaXRpb24uCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGhv
c3RuYW1lLCBbJ3NvbWUuaG9zdCcsICdwZXJmLndlYmtpdC5vcmcnXSkKKyAgICAgICAgICAgIHNl
bGYuYXNzZXJ0SW4oanNvbl9wYXRoLCBbJy9tb2NrLWNoZWNrb3V0L291dHB1dC5qc29uJywgJy9t
b2NrLWNoZWNrb3V0L291dHB1dC1wZXJmLXdlYmtpdC5qc29uJ10pCisgICAgICAgICAgICBzZWxm
LmFzc2VydEluKGhvc3RfcGF0aCwgW05vbmUsICcvYXBpL3JlcG9ydCddKQogICAgICAgICAgICAg
dXBsb2FkZWRbMF0gPSB1cGxvYWRfc3VjZWVkcwogICAgICAgICAgICAgcmV0dXJuIHVwbG9hZF9z
dWNlZWRzCiAKICAgICAgICAgcnVubmVyLl91cGxvYWRfanNvbiA9IG1vY2tfdXBsb2FkX2pzb24K
ICAgICAgICAgcnVubmVyLl90aW1lc3RhbXAgPSAxMjM0NTY3ODkKKyAgICAgICAgcnVubmVyLl91
dGNfdGltZXN0YW1wID0gZGF0ZXRpbWUuZGF0ZXRpbWUoMjAxMywgMiwgOCwgMTUsIDE5LCAzNywg
NDYwMDAwKQogICAgICAgICBvdXRwdXRfY2FwdHVyZSA9IE91dHB1dENhcHR1cmUoKQogICAgICAg
ICBvdXRwdXRfY2FwdHVyZS5jYXB0dXJlX291dHB1dCgpCiAgICAgICAgIHRyeToKQEAgLTUyMSw0
MSArNTI1LDI5IEBAIGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgICAg
ICBzZWxmLl90ZXN0X3J1bl93aXRoX2pzb25fb3V0cHV0KHJ1bm5lciwgcG9ydC5ob3N0LmZpbGVz
eXN0ZW0sIHVwbG9hZF9zdWNlZWRzPUZhbHNlLCBleHBlY3RlZF9leGl0X2NvZGU9UGVyZlRlc3Rz
UnVubmVyLkVYSVRfQ09ERV9GQUlMRURfVVBMT0FESU5HKQogCi0gICAgZGVmIHRlc3RfdXBsb2Fk
X2pzb24oc2VsZik6Ci0gICAgICAgIHJ1bm5lciwgcG9ydCA9IHNlbGYuY3JlYXRlX3J1bm5lcigp
Ci0gICAgICAgIHBvcnQuaG9zdC5maWxlc3lzdGVtLmZpbGVzWycvbW9jay1jaGVja291dC9zb21l
Lmpzb24nXSA9ICdzb21lIGNvbnRlbnQnCi0KLSAgICAgICAgY2FsbGVkID0gW10KLSAgICAgICAg
dXBsb2FkX3NpbmdsZV90ZXh0X2ZpbGVfdGhyb3dzID0gRmFsc2UKLSAgICAgICAgdXBsb2FkX3Np
bmdsZV90ZXh0X2ZpbGVfcmV0dXJuX3ZhbHVlID0gU3RyaW5nSU8uU3RyaW5nSU8oJ09LJykKLQot
ICAgICAgICBjbGFzcyBNb2NrRmlsZVVwbG9hZGVyOgotICAgICAgICAgICAgZGVmIF9faW5pdF9f
KG1vY2ssIHVybCwgdGltZW91dCk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1
cmwsICdodHRwczovL3NvbWUuaG9zdC9hcGkvdGVzdC9yZXBvcnQnKQotICAgICAgICAgICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHRpbWVvdXQsIGludCkgYW5kIHRpbWVvdXQpCi0g
ICAgICAgICAgICAgICAgY2FsbGVkLmFwcGVuZCgnRmlsZVVwbG9hZGVyJykKLQotICAgICAgICAg
ICAgZGVmIHVwbG9hZF9zaW5nbGVfdGV4dF9maWxlKG1vY2ssIGZpbGVzeXN0ZW0sIGNvbnRlbnRf
dHlwZSwgZmlsZW5hbWUpOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZXN5
c3RlbSwgcG9ydC5ob3N0LmZpbGVzeXN0ZW0pCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChjb250ZW50X3R5cGUsICdhcHBsaWNhdGlvbi9qc29uJykKLSAgICAgICAgICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKGZpbGVuYW1lLCAnc29tZS5qc29uJykKLSAgICAgICAgICAgICAgICBj
YWxsZWQuYXBwZW5kKCd1cGxvYWRfc2luZ2xlX3RleHRfZmlsZScpCi0gICAgICAgICAgICAgICAg
aWYgdXBsb2FkX3NpbmdsZV90ZXh0X2ZpbGVfdGhyb3dzOgotICAgICAgICAgICAgICAgICAgICBy
YWlzZSAiU29tZSBleGNlcHRpb24iCi0gICAgICAgICAgICAgICAgcmV0dXJuIHVwbG9hZF9zaW5n
bGVfdGV4dF9maWxlX3JldHVybl92YWx1ZQorICAgIGRlZiB0ZXN0X3J1bl93aXRoX3VwbG9hZF9q
c29uX3Nob3VsZF9nZW5lcmF0ZV9wZXJmX3dlYmtpdF9qc29uKHNlbGYpOgorICAgICAgICBydW5u
ZXIsIHBvcnQgPSBzZWxmLmNyZWF0ZV9ydW5uZXJfYW5kX3NldHVwX3Jlc3VsdHNfdGVtcGxhdGUo
YXJncz1bJy0tb3V0cHV0LWpzb24tcGF0aD0vbW9jay1jaGVja291dC9vdXRwdXQuanNvbicsCisg
ICAgICAgICAgICAnLS10ZXN0LXJlc3VsdHMtc2VydmVyJywgJ3NvbWUuaG9zdCcsICctLXBsYXRm
b3JtJywgJ3BsYXRmb3JtMScsICctLWJ1aWxkZXItbmFtZScsICdidWlsZGVyMScsICctLWJ1aWxk
LW51bWJlcicsICcxMjMnLAorICAgICAgICAgICAgJy0tc2xhdmUtY29uZmlnLWpzb24tcGF0aD0v
bW9jay1jaGVja291dC9zbGF2ZS1jb25maWcuanNvbiddKQorICAgICAgICBwb3J0Lmhvc3QuZmls
ZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUoJy9tb2NrLWNoZWNrb3V0L3NsYXZlLWNvbmZpZy5qc29u
JywgJ3sia2V5IjogInZhbHVlMSJ9JykKIAotICAgICAgICBydW5uZXIuX3VwbG9hZF9qc29uKCdz
b21lLmhvc3QnLCAnc29tZS5qc29uJywgTW9ja0ZpbGVVcGxvYWRlcikKLSAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChjYWxsZWQsIFsnRmlsZVVwbG9hZGVyJywgJ3VwbG9hZF9zaW5nbGVfdGV4dF9m
aWxlJ10pCisgICAgICAgIHNlbGYuX3Rlc3RfcnVuX3dpdGhfanNvbl9vdXRwdXQocnVubmVyLCBw
b3J0Lmhvc3QuZmlsZXN5c3RlbSwgdXBsb2FkX3N1Y2VlZHM9VHJ1ZSkKKyAgICAgICAgZ2VuZXJh
dGVkX2pzb24gPSBqc29uLmxvYWRzKHBvcnQuaG9zdC5maWxlc3lzdGVtLmZpbGVzWycvbW9jay1j
aGVja291dC9vdXRwdXQtcGVyZi13ZWJraXQuanNvbiddKQorICAgICAgICBzZWxmLmFzc2VydFRy
dWUoaXNpbnN0YW5jZShnZW5lcmF0ZWRfanNvbiwgbGlzdCkpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwobGVuKGdlbmVyYXRlZF9qc29uKSwgMSkKIAotICAgICAgICBvdXRwdXQgPSBPdXRwdXRD
YXB0dXJlKCkKLSAgICAgICAgb3V0cHV0LmNhcHR1cmVfb3V0cHV0KCkKLSAgICAgICAgdXBsb2Fk
X3NpbmdsZV90ZXh0X2ZpbGVfcmV0dXJuX3ZhbHVlID0gU3RyaW5nSU8uU3RyaW5nSU8oJ1NvbWUg
ZXJyb3InKQotICAgICAgICBydW5uZXIuX3VwbG9hZF9qc29uKCdzb21lLmhvc3QnLCAnc29tZS5q
c29uJywgTW9ja0ZpbGVVcGxvYWRlcikKLSAgICAgICAgXywgXywgbG9ncyA9IG91dHB1dC5yZXN0
b3JlX291dHB1dCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9ncywgJ1VwbG9hZGVkIEpT
T04gYnV0IGdvdCBhIGJhZCByZXNwb25zZTpcblNvbWUgZXJyb3JcbicpCi0KLSAgICAgICAgIyBU
aHJvd2luZyBhbiBleGNlcHRpb24gdXBsb2FkX3NpbmdsZV90ZXh0X2ZpbGUgc2hvdWxkbid0IGJs
b3cgdXAgX3VwbG9hZF9qc29uCi0gICAgICAgIGNhbGxlZCA9IFtdCi0gICAgICAgIHVwbG9hZF9z
aW5nbGVfdGV4dF9maWxlX3Rocm93cyA9IFRydWUKLSAgICAgICAgcnVubmVyLl91cGxvYWRfanNv
bignc29tZS5ob3N0JywgJ3NvbWUuanNvbicsIE1vY2tGaWxlVXBsb2FkZXIpCi0gICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoY2FsbGVkLCBbJ0ZpbGVVcGxvYWRlcicsICd1cGxvYWRfc2luZ2xlX3Rl
eHRfZmlsZSddKQorICAgICAgICBvdXRwdXQgPSBnZW5lcmF0ZWRfanNvblswXQorICAgICAgICBz
ZWxmLm1heERpZmYgPSBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0WydwbGF0
Zm9ybSddLCAncGxhdGZvcm0xJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXRbJ2J1
aWxkTnVtYmVyJ10sICcxMjMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dFsnYnVp
bGRUaW1lJ10sICcyMDEzLTAyLTA4VDE1OjE5OjM3LjQ2MDAwMCcpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwob3V0cHV0WydidWlsZGVyTmFtZSddLCAnYnVpbGRlcjEnKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKG91dHB1dFsnYnVpbGRlcktleSddLCAndmFsdWUxJykKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChvdXRwdXRbJ3JldmlzaW9ucyddLCB7J1dlYktpdCc6IHsncmV2aXNpb24n
OiAnNTY3OCcsICd0aW1lc3RhbXAnOiAnMjAxMy0wMi0wMSAwODo0ODowNSArMDAwMCd9fSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXRbJ3Rlc3RzJ10ua2V5cygpLCBbJ0JpbmRpbmdz
J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKG91dHB1dFsndGVzdHMnXVsnQmlu
ZGluZ3MnXS5rZXlzKCkpLCBbJ3Rlc3RzJywgJ3VybCddKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKG91dHB1dFsndGVzdHMnXVsnQmluZGluZ3MnXVsndXJsJ10sICdodHRwOi8vdHJhYy53ZWJr
aXQub3JnL2Jyb3dzZXIvdHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9CaW5kaW5ncycpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0Wyd0ZXN0cyddWydCaW5kaW5ncyddWyd0ZXN0cyddLmtl
eXMoKSwgWydldmVudC10YXJnZXQtd3JhcHBlciddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KG91dHB1dFsndGVzdHMnXVsnQmluZGluZ3MnXVsndGVzdHMnXVsnZXZlbnQtdGFyZ2V0LXdyYXBw
ZXInXSwgeworICAgICAgICAgICAgJ3VybCc6ICdodHRwOi8vdHJhYy53ZWJraXQub3JnL2Jyb3dz
ZXIvdHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9CaW5kaW5ncy9ldmVudC10YXJnZXQtd3JhcHBlci5o
dG1sJywKKyAgICAgICAgICAgICdtZXRyaWNzJzogeydUaW1lJzogeydjdXJyZW50JzogWzE0ODYu
MCwgMTQ3MS4wLCAxNTEwLjAsIDE1MDUuMCwgMTQ3OC4wLCAxNDkwLjBdfX19KQpJbmRleDogVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdHNydW5uZXJfdW5p
dHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5j
ZV90ZXN0cy9wZXJmdGVzdHNydW5uZXJfdW5pdHRlc3QucHkJKHJldmlzaW9uIDE0MzYyNikKKysr
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3RzcnVubmVy
X3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBAIGltcG9ydCByZQog
aW1wb3J0IHVuaXR0ZXN0MiBhcyB1bml0dGVzdAogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5ob3N0
X21vY2sgaW1wb3J0IE1vY2tIb3N0Citmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ub3V0cHV0
Y2FwdHVyZSBpbXBvcnQgT3V0cHV0Q2FwdHVyZQogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMu
cG9ydC50ZXN0IGltcG9ydCBUZXN0UG9ydAogZnJvbSB3ZWJraXRweS5wZXJmb3JtYW5jZV90ZXN0
cy5wZXJmdGVzdHNydW5uZXIgaW1wb3J0IFBlcmZUZXN0c1J1bm5lcgogCkBAIC0xNDcsMyArMTQ4
LDY0IEBAIGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChvcHRpb25zLm91dHB1dF9qc29uX3BhdGgsICdhL291dHB1dC5qc29uJykKICAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRpb25zLnNsYXZlX2NvbmZpZ19qc29uX3BhdGgsICdh
L3NvdXJjZS5qc29uJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRpb25zLnRlc3RfcmVz
dWx0c19zZXJ2ZXIsICdzb21laG9zdCcpCisKKyAgICBkZWYgdGVzdF91cGxvYWRfanNvbihzZWxm
KToKKyAgICAgICAgcnVubmVyLCBwb3J0ID0gc2VsZi5jcmVhdGVfcnVubmVyKCkKKyAgICAgICAg
cG9ydC5ob3N0LmZpbGVzeXN0ZW0uZmlsZXNbJy9tb2NrLWNoZWNrb3V0L3NvbWUuanNvbiddID0g
J3NvbWUgY29udGVudCcKKworICAgICAgICBjbGFzcyBNb2NrRmlsZVVwbG9hZGVyOgorICAgICAg
ICAgICAgY2FsbGVkID0gW10KKyAgICAgICAgICAgIHVwbG9hZF9zaW5nbGVfdGV4dF9maWxlX3Ro
cm93cyA9IEZhbHNlCisgICAgICAgICAgICB1cGxvYWRfc2luZ2xlX3RleHRfZmlsZV9yZXR1cm5f
dmFsdWUgPSBOb25lCisKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgZGVm
IHJlc2V0KGNscyk6CisgICAgICAgICAgICAgICAgY2xzLmNhbGxlZCA9IFtdCisgICAgICAgICAg
ICAgICAgY2xzLnVwbG9hZF9zaW5nbGVfdGV4dF9maWxlX3Rocm93cyA9IEZhbHNlCisgICAgICAg
ICAgICAgICAgY2xzLnVwbG9hZF9zaW5nbGVfdGV4dF9maWxlX3JldHVybl92YWx1ZSA9IE5vbmUK
KworICAgICAgICAgICAgZGVmIF9faW5pdF9fKG1vY2ssIHVybCwgdGltZW91dCk6CisgICAgICAg
ICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmwsICdodHRwczovL3NvbWUuaG9zdC9zb21lL3Bh
dGgnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHRpbWVvdXQs
IGludCkgYW5kIHRpbWVvdXQpCisgICAgICAgICAgICAgICAgbW9jay5jYWxsZWQuYXBwZW5kKCdG
aWxlVXBsb2FkZXInKQorCisgICAgICAgICAgICBkZWYgdXBsb2FkX3NpbmdsZV90ZXh0X2ZpbGUo
bW9jaywgZmlsZXN5c3RlbSwgY29udGVudF90eXBlLCBmaWxlbmFtZSk6CisgICAgICAgICAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlc3lzdGVtLCBwb3J0Lmhvc3QuZmlsZXN5c3RlbSkKKyAg
ICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbnRlbnRfdHlwZSwgJ2FwcGxpY2F0aW9u
L2pzb24nKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZW5hbWUsICdzb21l
Lmpzb24nKQorICAgICAgICAgICAgICAgIG1vY2suY2FsbGVkLmFwcGVuZCgndXBsb2FkX3Npbmds
ZV90ZXh0X2ZpbGUnKQorICAgICAgICAgICAgICAgIGlmIG1vY2sudXBsb2FkX3NpbmdsZV90ZXh0
X2ZpbGVfdGhyb3dzOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24KKyAgICAg
ICAgICAgICAgICByZXR1cm4gbW9jay51cGxvYWRfc2luZ2xlX3RleHRfZmlsZV9yZXR1cm5fdmFs
dWUKKworICAgICAgICBNb2NrRmlsZVVwbG9hZGVyLnVwbG9hZF9zaW5nbGVfdGV4dF9maWxlX3Jl
dHVybl92YWx1ZSA9IFN0cmluZ0lPLlN0cmluZ0lPKCdPSycpCisgICAgICAgIHNlbGYuYXNzZXJ0
VHJ1ZShydW5uZXIuX3VwbG9hZF9qc29uKCdzb21lLmhvc3QnLCAnc29tZS5qc29uJywgJy9zb21l
L3BhdGgnLCBNb2NrRmlsZVVwbG9hZGVyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChNb2Nr
RmlsZVVwbG9hZGVyLmNhbGxlZCwgWydGaWxlVXBsb2FkZXInLCAndXBsb2FkX3NpbmdsZV90ZXh0
X2ZpbGUnXSkKKworICAgICAgICBNb2NrRmlsZVVwbG9hZGVyLnJlc2V0KCkKKyAgICAgICAgTW9j
a0ZpbGVVcGxvYWRlci51cGxvYWRfc2luZ2xlX3RleHRfZmlsZV9yZXR1cm5fdmFsdWUgPSBTdHJp
bmdJTy5TdHJpbmdJTygnU29tZSBlcnJvcicpCisgICAgICAgIG91dHB1dCA9IE91dHB1dENhcHR1
cmUoKQorICAgICAgICBvdXRwdXQuY2FwdHVyZV9vdXRwdXQoKQorICAgICAgICBzZWxmLmFzc2Vy
dEZhbHNlKHJ1bm5lci5fdXBsb2FkX2pzb24oJ3NvbWUuaG9zdCcsICdzb21lLmpzb24nLCAnL3Nv
bWUvcGF0aCcsIE1vY2tGaWxlVXBsb2FkZXIpKQorICAgICAgICBfLCBfLCBsb2dzID0gb3V0cHV0
LnJlc3RvcmVfb3V0cHV0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2dzLCAnVXBsb2Fk
ZWQgSlNPTiB0byBodHRwczovL3NvbWUuaG9zdC9zb21lL3BhdGggYnV0IGdvdCBhIGJhZCByZXNw
b25zZTpcblNvbWUgZXJyb3JcbicpCisKKyAgICAgICAgIyBUaHJvd2luZyBhbiBleGNlcHRpb24g
dXBsb2FkX3NpbmdsZV90ZXh0X2ZpbGUgc2hvdWxkbid0IGJsb3cgdXAgX3VwbG9hZF9qc29uCisg
ICAgICAgIE1vY2tGaWxlVXBsb2FkZXIucmVzZXQoKQorICAgICAgICBNb2NrRmlsZVVwbG9hZGVy
LnVwbG9hZF9zaW5nbGVfdGV4dF9maWxlX3Rocm93cyA9IFRydWUKKyAgICAgICAgc2VsZi5hc3Nl
cnRGYWxzZShydW5uZXIuX3VwbG9hZF9qc29uKCdzb21lLmhvc3QnLCAnc29tZS5qc29uJywgJy9z
b21lL3BhdGgnLCBNb2NrRmlsZVVwbG9hZGVyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChN
b2NrRmlsZVVwbG9hZGVyLmNhbGxlZCwgWydGaWxlVXBsb2FkZXInLCAndXBsb2FkX3NpbmdsZV90
ZXh0X2ZpbGUnXSkKKworICAgICAgICBNb2NrRmlsZVVwbG9hZGVyLnJlc2V0KCkKKyAgICAgICAg
TW9ja0ZpbGVVcGxvYWRlci51cGxvYWRfc2luZ2xlX3RleHRfZmlsZV9yZXR1cm5fdmFsdWUgPSBT
dHJpbmdJTy5TdHJpbmdJTygneyJzdGF0dXMiOiAiT0sifScpCisgICAgICAgIHNlbGYuYXNzZXJ0
VHJ1ZShydW5uZXIuX3VwbG9hZF9qc29uKCdzb21lLmhvc3QnLCAnc29tZS5qc29uJywgJy9zb21l
L3BhdGgnLCBNb2NrRmlsZVVwbG9hZGVyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChNb2Nr
RmlsZVVwbG9hZGVyLmNhbGxlZCwgWydGaWxlVXBsb2FkZXInLCAndXBsb2FkX3NpbmdsZV90ZXh0
X2ZpbGUnXSkKKworICAgICAgICBNb2NrRmlsZVVwbG9hZGVyLnJlc2V0KCkKKyAgICAgICAgTW9j
a0ZpbGVVcGxvYWRlci51cGxvYWRfc2luZ2xlX3RleHRfZmlsZV9yZXR1cm5fdmFsdWUgPSBTdHJp
bmdJTy5TdHJpbmdJTygneyJzdGF0dXMiOiAiU29tZXRoaW5nSGFzRmFpbGVkIiwgImZhaWx1cmVT
dG9yZWQiOiBmYWxzZX0nKQorICAgICAgICBvdXRwdXQgPSBPdXRwdXRDYXB0dXJlKCkKKyAgICAg
ICAgb3V0cHV0LmNhcHR1cmVfb3V0cHV0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShydW5u
ZXIuX3VwbG9hZF9qc29uKCdzb21lLmhvc3QnLCAnc29tZS5qc29uJywgJy9zb21lL3BhdGgnLCBN
b2NrRmlsZVVwbG9hZGVyKSkKKyAgICAgICAgXywgXywgbG9ncyA9IG91dHB1dC5yZXN0b3JlX291
dHB1dCgpCisgICAgICAgIHNlcmlhbGl6ZWRfanNvbiA9IGpzb24uZHVtcHMoeydzdGF0dXMnOiAn
U29tZXRoaW5nSGFzRmFpbGVkJywgJ2ZhaWx1cmVTdG9yZWQnOiBGYWxzZX0sIGluZGVudD00KQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvZ3MsICdVcGxvYWRlZCBKU09OIHRvIGh0dHBzOi8v
c29tZS5ob3N0L3NvbWUvcGF0aCBidXQgZ290IGFuIGVycm9yOlxuJXNcbicgJSBzZXJpYWxpemVk
X2pzb24pCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189843</attachid>
            <date>2013-02-22 15:14:07 -0800</date>
            <delta_ts>2013-02-22 15:29:48 -0800</delta_ts>
            <desc>Fixed per comments</desc>
            <filename>bug-108577-20130222151026.patch</filename>
            <type>text/plain</type>
            <size>33402</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE0MzY4NSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDkxIEBACisyMDEzLTAyLTIxICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgor
CisgICAgICAgIFVwbG9hZCByZXN1bHRzIHRvIHBlcmYud2Via2l0Lm9yZyBpbiBhZGRpdGlvbiB0
byB0aGUgb25lIHNwZWNpZmllZCBieSAtLXRlc3QtcmVzdWx0cy1zZXJ2ZXIKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODU3NworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwbG9hZCByZXN1bHRzIHRvIHBl
cmYud2Via2l0Lm9yZyB1c2luZyBuZXcgSlNPTiBmb3JtYXQgYXMgd2VsbCBhcyB0aGUgaG9zdCBz
cGVjaWZpZWQgYnkKKyAgICAgICAgLS10ZXN0LXJlc3VsdHMtc2VydmVyLiBUaGUgbmV3IGZvcm1h
dCBpcyBuZWVkZWQgdG8gcHJvdmlkZSBvZiBleHRyYSBpbmZvcm1hdGlvbiBwZXJmLndlYmtpdC5v
cmcKKyAgICAgICAgbmVlZCBzdWNoIGFzIHRoZSBzdWJ2ZXJzaW9uIGNvbW1pdCB0aW1lIGFuZCB0
ZXN0IFVSTHMuIFRoaXMgaXMgYSB0ZW1wb3JhcmlseSBtZWFzdXJlIHVudGlsCisgICAgICAgIHdl
IGNvbXBsZXRlIHRoZSB0cmFuc2l0aW9uIGFuZCB0aGUgb2xkIEpTT04gZm9ybWF0IGFuZCB0aGUg
Y29kZSB0byB1cGxvYWQgcmVzdWx0cyB0bworICAgICAgICB3ZWJraXQtcGVyZi5hcHBzcG90LmNv
bSB3aWxsIGJlIGRlbGV0ZWQgb25jZSB0aGUgdHJhbnNpdGlvbiBpcyBjb21wbGV0ZWQuCisKKyAg
ICAgICAgVGhpcyBwYXRjaCBhZGRzIHNjbS5zdm5fdGltZXN0YW1wIHRvIG9idGFpbiB0aGUgdGlt
ZXN0YW1wIG9mIHRoZSBsYXRlc3QgY29tbWl0IHByZXNlbnQgaW4KKyAgICAgICAgYSBzdm4gY2hl
Y2tvdXQgb3IgYSBnaXQgY2xvbmUuIFRoaXMgaW5mb3JtYXRpb24gaXMgZW1iZWRkZWQgaW4gSlNP
TiBzdWJtaXR0ZWQgdG8gcGVyZi53ZWJraXQub3JnCisgICAgICAgIHNvIHRoYXQgdGhlIGFwcCBj
YW4gc29ydCBwZXJmb3JtYW5jZSB0ZXN0IHJlc3VsdHMgYmFzZWQgb24gdGhlIHRpbWVzdGFtcCBv
ZiB0aGUgbGFzdCBjb21taXQuCisKKyAgICAgICAgSXQgYWxzbyBjaGFuZ2VzIHRoZSByZXBvc2l0
b3J5IG5hbWVzIHJldHVybmVkIGJ5IHBvcnQgb2JqZWN0cyB0byBiZSBwcm9wZXJseSBjYXBpdGFs
aXplZAorICAgICAgICBodW1hbiByZWFkYWJsZSBuYW1lcyBzdWNoIGFzIFdlYktpdCBpbnN0ZWFk
IG9mIGxvd2VyY2FzZWQgbmFtZXMgc3VjaCBhcyB3ZWJraXQgc2luY2UgdGhlc2UgbmFtZXMKKyAg
ICAgICAgYXJlIGRpc3BsYXllZCBvbiBwZXJmLndlYmtpdC5vcmcgZm9yIGh1bWFucy4gU2V2ZXJh
bCB1c2VycyBvZiB0aGlzIGZlYXR1cmUgaGFzIGJlZW4gdXBkYXRlZAorICAgICAgICB0byBleHBs
aWNpdGx5IGxvd2VyY2FzZSB0aGUgbmFtZXMuCisKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9naXQucHk6CisgICAgICAgIChHaXQuc3ZuX3RpbWVzdGFt
cCk6IEFkZGVkLiBPYnRhaW5zIHRoZSB0aW1lc3RhbXAgb2YgdGhlIGxhc3Qgc3VidmVyaW9uIGNv
bW1pdCBpbiB0aGUgY2xvbmUuCisgICAgICAgIFVuZm9ydHVuYXRlbHksIGdpdCdzIHRpbWVzdGFt
cCBncmFudWxhcml0eSBpcyBzZWNvbmRzIHNvIHdlJ3JlIGxvc2luZyBzb21lIGluZm9ybWF0aW9u
CisgICAgICAgIGNvbXBhcmVkIHRvIHVzaW5nIGEgcmVndWxhciBzdWJ2ZXJzaW9uIGNsaWVudC4g
VG8gbWFrZSBtYXR0ZXJzIHdvcnNlLCBnaXQgZG9lc24ndCBoYXZlIGFueQorICAgICAgICBvcHRp
b24gdG8gc2hvdyBJU08tZm9ybWF0IHRpbWVzdGFtcCBpbiBVVEMgc28gd2UncmUgZ29pbmcgdG8g
bWFudWFsbHkgZmlkZGxlIHdpdGggdGltZXpvbmUuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi9jaGVja291dC9zY20vc2NtLnB5OgorICAgICAgICAoU0NNLnN2bl90aW1lc3Rh
bXApOiBBZGRlZC4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0
L3NjbS9zY21fbW9jay5weToKKyAgICAgICAgKE1vY2tTQ00uc3ZuX3RpbWVzdGFtcCk6IEFkZGVk
LgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3NjbV91
bml0dGVzdC5weToKKyAgICAgICAgKHRlc3Rfc3ZuX3RpbWVzdGFtcCk6IEFkZGVkIGEgdGVzdCBm
b3IgR2l0LnN2bl90aW1lc3RhbXAuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9jaGVja291dC9zY20vc3ZuLnB5OgorICAgICAgICAoU1ZOLnN2bl90aW1lc3RhbXApOiBBZGRl
ZC4gV2l0aCBzdm4sIGFsbCB3ZSBuZWVkIHRvIGRvIGlzIHRvIHVzZSAtLXhtbCBvcHRpb24gYW5k
IHBhcnNlIHRoZQorICAgICAgICB0aW1lc3RhbXAgd2hpY2ggaXMgYWx3YXlzIGluIFVUQy4KKwor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pz
b25fcmVzdWx0c19nZW5lcmF0b3IucHk6CisgICAgICAgIChKU09OUmVzdWx0c0dlbmVyYXRvckJh
c2UuX2luc2VydF9nZW5lcmljX21ldGFkYXRhKTogTG93ZXJjYXNlIHRoZSBuYW1lLiBOb3RlIHRo
YXQgdGhlIG5hbWUKKyAgICAgICAgJ2Nocm9taXVtJyBuZWVkcyB0byBiZSBzdWJzdGl0dXRlZCBi
eSAnY2hyb21lJyBmb3IgaGlzdG9yaWNhbCByZWFzb25zLgorCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5OgorICAgICAgICAoUG9ydC5yZXBvc2l0
b3J5X3BhdGhzKTogUmV0dXJuIFdlYktpdCBpbnN0ZWFkIG9mIHdlYmtpdCBhcyBub3RlZCBhYm92
ZS4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21p
dW0ucHk6CisgICAgICAgIChDaHJvbWl1bVBvcnQucmVwb3NpdG9yeV9wYXRocyk6IFJldHVybiBD
aHJvbWl1bSBpbnN0ZWFkIG9mIGNocm9taXVtIGFzIG5vdGVkIGFib3ZlLgorCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdHNydW5uZXIucHk6Cisg
ICAgICAgIChQZXJmVGVzdHNSdW5uZXIuX19pbml0X18pOiBTdG9yZSB0aGUgY3VycmVudCB0aW1l
IGluIFVUQyBhcyB3ZWxsIGFzIGluIGxvY2FsIHRpbWUuCisgICAgICAgIChQZXJmVGVzdHNSdW5u
ZXIuX2NvbGxlY3RfdGVzdHMpOgorCisgICAgICAgIChQZXJmVGVzdHNSdW5uZXIuX2dlbmVyYXRl
X2FuZF9zaG93X3Jlc3VsdHMpOiBSZXRyaWV2ZSBib3RoIHJlZ3VsYXIgb3V0cHV0IGFuZCBvbmUg
Zm9yIHBlcmYud2Via2l0Lm9yZywKKyAgICAgICAgYW5kIHVwbG9hZCB0aGVtIGFwcHJvcHJpYXRl
bHkuCisKKyAgICAgICAgKFBlcmZUZXN0c1J1bm5lci5fZ2VuZXJhdGVfcmVzdWx0c19kaWN0KTog
U3RvcmUgV2ViS2l0IGFuZCBDaHJvbWl1bSByZXZpc2lvbnMgYXQgd2hpY2ggdGVzdHMgd2VyZSBy
YW4KKyAgICAgICAgaW4gcmV2aXNpb25zX2Zvcl9wZXJmX3dlYmtpdCBhbmQgY29uc3RydWN0IGFu
IG91dHB1dCBmb3IgcGVyZi53ZWJraXQub3JnLgorCisgICAgICAgIChQZXJmVGVzdHNSdW5uZXIu
X2RhdGV0aW1lX2luX0VTNV9jb21wYXRpYmxlX2lzb19mb3JtYXQpOiBBZGRlZC4KKworICAgICAg
ICAoUGVyZlRlc3RzUnVubmVyLl9tZXJnZV9zbGF2ZV9jb25maWdfanNvbik6IE1lcmdlIHNsYXZl
IGNvbmZpZ3VyYXRpb24gZmlsZXMgaW50byBib3RoIHJlZ3VsYXIgb3V0cHV0CisgICAgICAgIGFu
ZCBvbmUgZm9yIHBlcmYud2Via2l0Lm9yZy4gSGVyZSwgd2UgcHJlZml4IGVhY2gga2V5IHdpdGgg
ImJ1aWxkZXIiIGZvciBwZXJmLndlYmtpdC5vcmcuCisgICAgICAgIGUuZy4gInByb2Nlc3NvciIg
d291bGQgYmUgcmVuYW1lZCB0byAiYnVpbGRlclByb2Nlc3NvciIuCisKKyAgICAgICAgKFBlcmZU
ZXN0c1J1bm5lci5fZ2VuZXJhdGVfb3V0cHV0X2ZpbGVzKToKKworICAgICAgICAoUGVyZlRlc3Rz
UnVubmVyLl91cGxvYWRfanNvbik6IEFkZGVkIGEgcmVtb3RlIHBhdGggYXMgYW4gYXJndW1lbnQg
c2luY2Ugd2UgdXBsb2FkIEpTT05zIHRvIC9hcGkvcmVwb3J0CisgICAgICAgIG9uIHBlcmYud2Vi
a2l0Lm9yZyB3aGVyZWFzIHdlIHVwbG9hZCBpdCB0byAvYXBpL3Rlc3QvcmVwb3J0IG9uIHdlYmtp
dC1wZXJmLmFwcHNwb3QuY29tLiBBbHNvIGFkZGVkIHRoZSBjb2RlCisgICAgICAgIHRvIHBhcnNl
IHJlc3BvbnNlIGFzIEpTT04gd2hlbiBwb3NzaWJsZSBzaW5jZSBwZXJmLndlYmtpdC5vcmcgcmV0
dXJucyBhIEpTT04gcmVzcG9uc2UgYXMgb3Bwb3NlZCB0bworICAgICAgICB3ZWJraXQtcGVyZi5h
cHBzcG90LmNvbSB3aGljaCBzcGl0cyBvdXQgYSBwbGFpbnRleHQgcmVzcG9uc2UuCisKKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0c3J1bm5lcl9p
bnRlZ3JhdGlvbnRlc3QucHk6CisgICAgICAgIChNYWluVGVzdC5fdGVzdF9ydW5fd2l0aF9qc29u
X291dHB1dC5tb2NrX3VwbG9hZF9qc29uKTogVG9sZXJhdGUgcGVyZi53ZWJraXQub3JnL2FwaS9y
ZXBvcnQgZm9yIG5vdy4KKyAgICAgICAgKE1haW5UZXN0Ll90ZXN0X3J1bl93aXRoX2pzb25fb3V0
cHV0KTogU3RvcmUgYSBVVEMgdGltZSBhcyBwZXJmdGVzdHJ1bm5lciB3b3VsZCBkby4KKyAgICAg
ICAgKE1haW5UZXN0LnRlc3RfcnVuX3dpdGhfdXBsb2FkX2pzb25fc2hvdWxkX2dlbmVyYXRlX3Bl
cmZfd2Via2l0X2pzb24pOiBBZGRlZC4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcGVy
Zm9ybWFuY2VfdGVzdHMvcGVyZnRlc3RzcnVubmVyX3VuaXR0ZXN0LnB5OgorICAgICAgICAoTWFp
blRlc3QudGVzdF91cGxvYWRfanNvbik6IE1vdmVkIGZyb20gaXRlZ3JhdGlvbnRlc3QucHkgc2lu
Y2UgaXQgcmVhbGx5IGlzIGEgdW5pdCB0ZXN0LiBBbHNvIGFkZGVkIHRlc3QKKyAgICAgICAgY2Fz
ZXMgdG8gcGFyc2UgSlNPTiByZXNwb25zZXMuCisgICAgICAgIChNYWluVGVzdC50ZXN0X3VwbG9h
ZF9qc29uLk1vY2tGaWxlVXBsb2FkZXIpOiBSZWZhY3RvcmVkLgorICAgICAgICAoTWFpblRlc3Qu
dGVzdF91cGxvYWRfanNvbi5Nb2NrRmlsZVVwbG9hZGVyLnJlc2V0KTogQWRkZWQuCisgICAgICAg
IChNYWluVGVzdC50ZXN0X3VwbG9hZF9qc29uLk1vY2tGaWxlVXBsb2FkZXIuX19pbml0X18pOgor
ICAgICAgICAoTWFpblRlc3QudGVzdF91cGxvYWRfanNvbi5Nb2NrRmlsZVVwbG9hZGVyLnVwbG9h
ZF9zaW5nbGVfdGV4dF9maWxlKToKKwogMjAxMy0wMi0yMSAgRGlyayBQcmFua2UgIDxkcHJhbmtl
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIHN1cHBvcnQgdGhlIGx1Y2lkIHZl
cnNpb24gb2YgZnJlZXR5cGUgb24gcHJlY2lzZSBpbiBEUlQKSW5kZXg6IFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9naXQucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL2dpdC5weQkocmV2aXNpb24gMTQz
NjI2KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL2dpdC5w
eQkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogIyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICMgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KIAoraW1wb3J0IGRhdGV0aW1lCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG9zCiBp
bXBvcnQgcmUKQEAgLTI1Myw2ICsyNTQsMjEgQEAgY2xhc3MgR2l0KFNDTSwgU1ZOUmVwb3NpdG9y
eSk6CiAgICAgICAgICAgICByZXR1cm4gIiIKICAgICAgICAgcmV0dXJuIHN0cihtYXRjaC5ncm91
cCgnc3ZuX3JldmlzaW9uJykpCiAKKyAgICBkZWYgdGltZXN0YW1wX29mX2xhdGVzdF9jb21taXQo
c2VsZiwgcGF0aCk6CisgICAgICAgIGdpdF9sb2cgPSBzZWxmLl9ydW5fZ2l0KFsnbG9nJywgJy0x
JywgJy0tZGF0ZT1pc28nLCBzZWxmLmZpbmRfY2hlY2tvdXRfcm9vdChwYXRoKV0pCisgICAgICAg
IG1hdGNoID0gcmUuc2VhcmNoKCJeRGF0ZTpccyooXGR7NH0pLShcZHsyfSktKFxkezJ9KSAoXGR7
Mn0pOihcZHsyfSk6KFxkezJ9KSAoWystXSkoXGR7Mn0pKFxkezJ9KSQiLCBnaXRfbG9nLCByZS5N
VUxUSUxJTkUpCisgICAgICAgIGlmIG5vdCBtYXRjaDoKKyAgICAgICAgICAgIHJldHVybiAiIgor
CisgICAgICAgICMgTWFudWFsbHkgbW9kaWZ5IHRoZSB0aW1lem9uZSBzaW5jZSBHaXQgZG9lc24n
dCBoYXZlIGFuIG9wdGl0b24gdG8gc2hvdyBpdCBpbiBVVEMuCisgICAgICAgICMgR2l0IGFsc28g
dHJ1bmNhdGVzIG1pbGxpc2Vjb25kcyBidXQgd2UncmUgZ29pbmcgdG8gaWdub3JlIHRoYXQgZm9y
IG5vdy4KKyAgICAgICAgdGltZV93aXRoX3RpbWV6b25lID0gZGF0ZXRpbWUuZGF0ZXRpbWUoaW50
KG1hdGNoLmdyb3VwKDEpKSwgaW50KG1hdGNoLmdyb3VwKDIpKSwgaW50KG1hdGNoLmdyb3VwKDMp
KSwKKyAgICAgICAgICAgIGludChtYXRjaC5ncm91cCg0KSksIGludChtYXRjaC5ncm91cCg1KSks
IGludChtYXRjaC5ncm91cCg2KSksIDApCisKKyAgICAgICAgc2lnbiA9IDEgaWYgbWF0Y2guZ3Jv
dXAoNykgPT0gJysnIGVsc2UgLTEKKyAgICAgICAgdGltZV93aWhvdXRfdGltZXpvbmUgPSB0aW1l
X3dpdGhfdGltZXpvbmUgLSBkYXRldGltZS50aW1lZGVsdGEoaG91cnM9c2lnbiAqIGludChtYXRj
aC5ncm91cCg4KSksIG1pbnV0ZXM9aW50KG1hdGNoLmdyb3VwKDkpKSkKKyAgICAgICAgcmV0dXJu
IHRpbWVfd2lob3V0X3RpbWV6b25lLnN0cmZ0aW1lKCclWS0lbS0lZFQlSDolTTolU1onKQorCiAg
ICAgZGVmIHByZXBlbmRfc3ZuX3JldmlzaW9uKHNlbGYsIGRpZmYpOgogICAgICAgICByZXZpc2lv
biA9IHNlbGYuaGVhZF9zdm5fcmV2aXNpb24oKQogICAgICAgICBpZiBub3QgcmV2aXNpb246Cklu
ZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc2NtLnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9z
Y20ucHkJKHJldmlzaW9uIDE0MzYyNikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9u
L2NoZWNrb3V0L3NjbS9zY20ucHkJKHdvcmtpbmcgY29weSkKQEAgLTE2OSw2ICsxNjksOSBAQCBj
bGFzcyBTQ006CiAgICAgZGVmIHN2bl9yZXZpc2lvbihzZWxmLCBwYXRoKToKICAgICAgICAgc2Vs
Zi5fc3ViY2xhc3NfbXVzdF9pbXBsZW1lbnQoKQogCisgICAgZGVmIHRpbWVzdGFtcF9vZl9sYXRl
c3RfY29tbWl0KHNlbGYsIHBhdGgpOgorICAgICAgICBzZWxmLl9zdWJjbGFzc19tdXN0X2ltcGxl
bWVudCgpCisKICAgICBkZWYgY3JlYXRlX3BhdGNoKHNlbGYsIGdpdF9jb21taXQ9Tm9uZSwgY2hh
bmdlZF9maWxlcz1Ob25lKToKICAgICAgICAgc2VsZi5fc3ViY2xhc3NfbXVzdF9pbXBsZW1lbnQo
KQogCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc2Nt
X21vY2sucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hl
Y2tvdXQvc2NtL3NjbV9tb2NrLnB5CShyZXZpc2lvbiAxNDM2MjYpCisrKyBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc2NtX21vY2sucHkJKHdvcmtpbmcgY29weSkK
QEAgLTg0LDYgKzg0LDkgQEAgY2xhc3MgTW9ja1NDTShvYmplY3QpOgogICAgIGRlZiBzdm5fcmV2
aXNpb24oc2VsZiwgcGF0aCk6CiAgICAgICAgIHJldHVybiAnNTY3OCcKIAorICAgIGRlZiB0aW1l
c3RhbXBfb2ZfbGF0ZXN0X2NvbW1pdChzZWxmLCBwYXRoKToKKyAgICAgICAgcmV0dXJuICcyMDEz
LTAyLTAxIDA4OjQ4OjA1ICswMDAwJworCiAgICAgZGVmIGNyZWF0ZV9wYXRjaChzZWxmLCBnaXRf
Y29tbWl0LCBjaGFuZ2VkX2ZpbGVzPU5vbmUpOgogICAgICAgICByZXR1cm4gIlBhdGNoMSIKIApJ
bmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3NjbV91bml0
dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVj
a291dC9zY20vc2NtX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAxNDM2MjYpCisrKyBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc2NtX3VuaXR0ZXN0LnB5CSh3b3JraW5n
IGNvcHkpCkBAIC0xNTc3LDMgKzE1NzcsMTUgQEAgTU9DSyBydW5fY29tbWFuZDogWydnaXQnLCAn
bG9nJywgJy0yNScsIAogCiAgICAgZGVmIHRlc3RfcHVzaF9sb2NhbF9jb21taXRzX3RvX3NlcnZl
cl93aXRob3V0X3VzZXJuYW1lX2FuZF93aXRoX3Bhc3N3b3JkKHNlbGYpOgogICAgICAgICBzZWxm
LmFzc2VydFJhaXNlcyhBdXRoZW50aWNhdGlvbkVycm9yLCBzZWxmLm1ha2Vfc2NtKCkucHVzaF9s
b2NhbF9jb21taXRzX3RvX3NlcnZlciwgeydwYXNzd29yZCc6ICdibGFoJ30pCisKKyAgICBkZWYg
dGVzdF90aW1lc3RhbXBfb2ZfbGF0ZXN0X2NvbW1pdChzZWxmKToKKyAgICAgICAgc2NtID0gc2Vs
Zi5tYWtlX3NjbSgpCisgICAgICAgIHNjbS5maW5kX2NoZWNrb3V0X3Jvb3QgPSBsYW1iZGEgcGF0
aDogJycKKyAgICAgICAgc2NtLl9ydW5fZ2l0ID0gbGFtYmRhIGFyZ3M6ICdEYXRlOiAyMDEzLTAy
LTA4IDA4OjA1OjQ5ICswMDAwJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNjbS50aW1lc3Rh
bXBfb2ZfbGF0ZXN0X2NvbW1pdCgnc29tZS1wYXRoJyksICcyMDEzLTAyLTA4VDA4OjA1OjQ5Wicp
CisKKyAgICAgICAgc2NtLl9ydW5fZ2l0ID0gbGFtYmRhIGFyZ3M6ICdEYXRlOiAyMDEzLTAyLTA4
IDAxOjAyOjAzICswMTMwJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNjbS50aW1lc3RhbXBf
b2ZfbGF0ZXN0X2NvbW1pdCgnc29tZS1wYXRoJyksICcyMDEzLTAyLTA3VDIzOjMyOjAzWicpCisK
KyAgICAgICAgc2NtLl9ydW5fZ2l0ID0gbGFtYmRhIGFyZ3M6ICdEYXRlOiAyMDEzLTAyLTA4IDAx
OjU1OjIxIC0wODAwJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNjbS50aW1lc3RhbXBfb2Zf
bGF0ZXN0X2NvbW1pdCgnc29tZS1wYXRoJyksICcyMDEzLTAyLTA4VDA5OjU1OjIxWicpCkluZGV4
OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc3ZuLnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zdm4u
cHkJKHJldmlzaW9uIDE0MzYyNikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2No
ZWNrb3V0L3NjbS9zdm4ucHkJKHdvcmtpbmcgY29weSkKQEAgLTI0Niw2ICsyNDYsMTIgQEAgY2xh
c3MgU1ZOKFNDTSwgU1ZOUmVwb3NpdG9yeSk6CiAgICAgZGVmIHN2bl9yZXZpc2lvbihzZWxmLCBw
YXRoKToKICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWVfZnJvbV9zdm5faW5mbyhwYXRoLCAnUmV2
aXNpb24nKQogCisgICAgZGVmIHRpbWVzdGFtcF9vZl9sYXRlc3RfY29tbWl0KHNlbGYsIHBhdGgp
OgorICAgICAgICAjIFdlIHVzZSAtLXhtbCB0byBnZXQgdGltZXN0YW1wcyBsaWtlIDIwMTMtMDIt
MDhUMDg6MTg6MDQuOTY0NDA5WgorICAgICAgICBpbmZvX291dHB1dCA9IEV4ZWN1dGl2ZSgpLnJ1
bl9jb21tYW5kKFtzZWxmLmV4ZWN1dGFibGVfbmFtZSwgJ2luZm8nLCAnLS14bWwnXSwgY3dkPXBh
dGgpLnJzdHJpcCgpCisgICAgICAgIG1hdGNoID0gcmUuc2VhcmNoKHIiXjxkYXRlPig/UDx2YWx1
ZT4uKyk8L2RhdGU+JCIsIGluZm9fb3V0cHV0LCByZS5NVUxUSUxJTkUpCisgICAgICAgIHJldHVy
biBtYXRjaC5ncm91cCgndmFsdWUnKQorCiAgICAgIyBGSVhNRTogVGhpcyBtZXRob2Qgc2hvdWxk
IGJlIG9uIENoZWNrb3V0LgogICAgIGRlZiBjcmVhdGVfcGF0Y2goc2VsZiwgZ2l0X2NvbW1pdD1O
b25lLCBjaGFuZ2VkX2ZpbGVzPU5vbmUpOgogICAgICAgICAiIiJSZXR1cm5zIGEgYnl0ZSBhcnJh
eSAoc3RyKCkpIHJlcHJlc2VudGluZyB0aGUgcGF0Y2ggZmlsZS4KSW5kZXg6IFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5l
cmF0b3IucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvci5weQkocmV2aXNpb24gMTQz
NjI2KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2th
Z2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvci5weQkod29ya2luZyBjb3B5KQpAQCAtNTI2LDExICs1
MjYsMTIgQEAgY2xhc3MgSlNPTlJlc3VsdHNHZW5lcmF0b3JCYXNlKG9iamVjdCk6CiAgICAgICAg
IGZvciAobmFtZSwgcGF0aCkgaW4gc2VsZi5fc3ZuX3JlcG9zaXRvcmllczoKICAgICAgICAgICAg
ICMgTm90ZTogZm9yIEpTT04gZmlsZSdzIGJhY2t3YXJkLWNvbXBhdGliaWxpdHkgd2UgdXNlICdj
aHJvbWUnIHJhdGhlcgogICAgICAgICAgICAgIyB0aGFuICdjaHJvbWl1bScgaGVyZS4KLSAgICAg
ICAgICAgIGlmIG5hbWUgPT0gJ2Nocm9taXVtJzoKLSAgICAgICAgICAgICAgICBuYW1lID0gJ2No
cm9tZScKKyAgICAgICAgICAgIGxvd2VyY2FzZV9uYW1lID0gbmFtZS5sb3dlcigpCisgICAgICAg
ICAgICBpZiBsb3dlcmNhc2VfbmFtZSA9PSAnY2hyb21pdW0nOgorICAgICAgICAgICAgICAgIGxv
d2VyY2FzZV9uYW1lID0gJ2Nocm9tZScKICAgICAgICAgICAgIHNlbGYuX2luc2VydF9pdGVtX2lu
dG9fcmF3X2xpc3QocmVzdWx0c19mb3JfYnVpbGRlciwKICAgICAgICAgICAgICAgICBzZWxmLl9n
ZXRfc3ZuX3JldmlzaW9uKHBhdGgpLAotICAgICAgICAgICAgICAgIG5hbWUgKyAnUmV2aXNpb24n
KQorICAgICAgICAgICAgICAgIGxvd2VyY2FzZV9uYW1lICsgJ1JldmlzaW9uJykKIAogICAgICAg
ICBzZWxmLl9pbnNlcnRfaXRlbV9pbnRvX3Jhd19saXN0KHJlc3VsdHNfZm9yX2J1aWxkZXIsCiAg
ICAgICAgICAgICBpbnQodGltZS50aW1lKCkpLApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weQkocmV2aXNpb24gMTQzNjI2KQorKysg
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CSh3b3JraW5n
IGNvcHkpCkBAIC0xMDk3LDExICsxMDk3LDExIEBAIGNsYXNzIFBvcnQob2JqZWN0KToKIAogICAg
IGRlZiByZXBvc2l0b3J5X3BhdGhzKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm5zIGEgbGlzdCBv
ZiAocmVwb3NpdG9yeV9uYW1lLCByZXBvc2l0b3J5X3BhdGgpIHR1cGxlcyBvZiBpdHMgZGVwZW5k
aW5nIGNvZGUgYmFzZS4KLSAgICAgICAgQnkgZGVmYXVsdCBpdCByZXR1cm5zIGEgbGlzdCB0aGF0
IG9ubHkgY29udGFpbnMgYSAoJ3dlYmtpdCcsIDx3ZWJraXRSZXBvc3NpdG9yeVBhdGg+KSB0dXBs
ZS4iIiIKKyAgICAgICAgQnkgZGVmYXVsdCBpdCByZXR1cm5zIGEgbGlzdCB0aGF0IG9ubHkgY29u
dGFpbnMgYSAoJ1dlYktpdCcsIDx3ZWJraXRSZXBvc2l0b3J5UGF0aD4pIHR1cGxlLiIiIgogCi0g
ICAgICAgICMgV2UgdXNlIExheW91dFRlc3QgZGlyZWN0b3J5IGhlcmUgYmVjYXVzZSB3ZWJraXRf
YmFzZSBpc24ndCBhIHBhcnQgd2Via2l0IHJlcG9zaXRvcnkgaW4gQ2hyb21pdW0gcG9ydAorICAg
ICAgICAjIFdlIHVzZSBMYXlvdXRUZXN0IGRpcmVjdG9yeSBoZXJlIGJlY2F1c2Ugd2Via2l0X2Jh
c2UgaXNuJ3QgYSBwYXJ0IG9mIFdlYktpdCByZXBvc2l0b3J5IGluIENocm9taXVtIHBvcnQKICAg
ICAgICAgIyB3aGVyZSB0dXJuayBpc24ndCBjaGVja2VkIG91dCBhcyBhIHdob2xlLgotICAgICAg
ICByZXR1cm4gWygnd2Via2l0Jywgc2VsZi5sYXlvdXRfdGVzdHNfZGlyKCkpXQorICAgICAgICBy
ZXR1cm4gWygnV2ViS2l0Jywgc2VsZi5sYXlvdXRfdGVzdHNfZGlyKCkpXQogCiAgICAgX1dESUZG
X0RFTCA9ICcjI1dESUZGX0RFTCMjJwogICAgIF9XRElGRl9BREQgPSAnIyNXRElGRl9BREQjIycK
SW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0u
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9y
dC9jaHJvbWl1bS5weQkocmV2aXNpb24gMTQzNjI2KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weQkod29ya2luZyBjb3B5KQpAQCAtMzY0LDcg
KzM2NCw3IEBAIGNsYXNzIENocm9taXVtUG9ydChQb3J0KToKIAogICAgIGRlZiByZXBvc2l0b3J5
X3BhdGhzKHNlbGYpOgogICAgICAgICByZXBvcyA9IHN1cGVyKENocm9taXVtUG9ydCwgc2VsZiku
cmVwb3NpdG9yeV9wYXRocygpCi0gICAgICAgIHJlcG9zLmFwcGVuZCgoJ2Nocm9taXVtJywgc2Vs
Zi5wYXRoX2Zyb21fY2hyb21pdW1fYmFzZSgnYnVpbGQnKSkpCisgICAgICAgIHJlcG9zLmFwcGVu
ZCgoJ0Nocm9taXVtJywgc2VsZi5wYXRoX2Zyb21fY2hyb21pdW1fYmFzZSgnYnVpbGQnKSkpCiAg
ICAgICAgIHJldHVybiByZXBvcwogCiAgICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUs
IHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4pOgpJbmRleDogVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdHNydW5uZXIucHkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdHNydW5u
ZXIucHkJKHJldmlzaW9uIDE0MzYyNikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGVyZm9y
bWFuY2VfdGVzdHMvcGVyZnRlc3RzcnVubmVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICsz
Myw3IEBAIGltcG9ydCBqc29uCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG9wdHBhcnNlCiBpbXBv
cnQgdGltZQoraW1wb3J0IGRhdGV0aW1lCiAKIGZyb20gd2Via2l0cHkuY29tbW9uIGltcG9ydCBm
aW5kX2ZpbGVzCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5jaGVja291dC5zY20uZGV0ZWN0aW9uIGlt
cG9ydCBTQ01EZXRlY3RvcgpAQCAtNjcsNiArNjgsNyBAQCBjbGFzcyBQZXJmVGVzdHNSdW5uZXIo
b2JqZWN0KToKICAgICAgICAgc2VsZi5fYmFzZV9wYXRoID0gc2VsZi5fcG9ydC5wZXJmX3Rlc3Rz
X2RpcigpCiAgICAgICAgIHNlbGYuX3Jlc3VsdHMgPSB7fQogICAgICAgICBzZWxmLl90aW1lc3Rh
bXAgPSB0aW1lLnRpbWUoKQorICAgICAgICBzZWxmLl91dGNfdGltZXN0YW1wID0gZGF0ZXRpbWUu
ZGF0ZXRpbWUudXRjbm93KCkKICAgICAgICAgc2VsZi5fbmVlZHNfaHR0cCA9IE5vbmUKICAgICAg
ICAgc2VsZi5faGFzX2h0dHBfbG9jayA9IEZhbHNlCiAKQEAgLTEyNiw4ICsxMjgsNiBAQCBjbGFz
cyBQZXJmVGVzdHNSdW5uZXIob2JqZWN0KToKICAgICAgICAgcmV0dXJuIG9wdHBhcnNlLk9wdGlv
blBhcnNlcihvcHRpb25fbGlzdD0ocGVyZl9vcHRpb25fbGlzdCkpLnBhcnNlX2FyZ3MoYXJncykK
IAogICAgIGRlZiBfY29sbGVjdF90ZXN0cyhzZWxmKToKLSAgICAgICAgIiIiUmV0dXJuIHRoZSBs
aXN0IG9mIHRlc3RzIGZvdW5kLiIiIgotCiAgICAgICAgIHRlc3RfZXh0ZW5zaW9ucyA9IFsnLmh0
bWwnLCAnLnN2ZyddCiAgICAgICAgIGlmIHNlbGYuX29wdGlvbnMucmVwbGF5OgogICAgICAgICAg
ICAgdGVzdF9leHRlbnNpb25zLmFwcGVuZCgnLnJlcGxheScpCkBAIC0yMDgsMjQgKzIwOCwzMCBA
QCBjbGFzcyBQZXJmVGVzdHNSdW5uZXIob2JqZWN0KToKICAgICBkZWYgX2dlbmVyYXRlX2FuZF9z
aG93X3Jlc3VsdHMoc2VsZik6CiAgICAgICAgIG9wdGlvbnMgPSBzZWxmLl9vcHRpb25zCiAgICAg
ICAgIG91dHB1dF9qc29uX3BhdGggPSBzZWxmLl9vdXRwdXRfanNvbl9wYXRoKCkKLSAgICAgICAg
b3V0cHV0ID0gc2VsZi5fZ2VuZXJhdGVfcmVzdWx0c19kaWN0KHNlbGYuX3RpbWVzdGFtcCwgb3B0
aW9ucy5kZXNjcmlwdGlvbiwgb3B0aW9ucy5wbGF0Zm9ybSwgb3B0aW9ucy5idWlsZGVyX25hbWUs
IG9wdGlvbnMuYnVpbGRfbnVtYmVyKQorICAgICAgICBvdXRwdXQsIHBlcmZfd2Via2l0X291dHB1
dCA9IHNlbGYuX2dlbmVyYXRlX3Jlc3VsdHNfZGljdChzZWxmLl90aW1lc3RhbXAsIG9wdGlvbnMu
ZGVzY3JpcHRpb24sIG9wdGlvbnMucGxhdGZvcm0sIG9wdGlvbnMuYnVpbGRlcl9uYW1lLCBvcHRp
b25zLmJ1aWxkX251bWJlcikKIAogICAgICAgICBpZiBvcHRpb25zLnNsYXZlX2NvbmZpZ19qc29u
X3BhdGg6Ci0gICAgICAgICAgICBvdXRwdXQgPSBzZWxmLl9tZXJnZV9zbGF2ZV9jb25maWdfanNv
bihvcHRpb25zLnNsYXZlX2NvbmZpZ19qc29uX3BhdGgsIG91dHB1dCkKKyAgICAgICAgICAgIG91
dHB1dCwgcGVyZl93ZWJraXRfb3V0cHV0ID0gc2VsZi5fbWVyZ2Vfc2xhdmVfY29uZmlnX2pzb24o
b3B0aW9ucy5zbGF2ZV9jb25maWdfanNvbl9wYXRoLCBvdXRwdXQsIHBlcmZfd2Via2l0X291dHB1
dCkKICAgICAgICAgICAgIGlmIG5vdCBvdXRwdXQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHNl
bGYuRVhJVF9DT0RFX0JBRF9TT1VSQ0VfSlNPTgogCiAgICAgICAgIG91dHB1dCA9IHNlbGYuX21l
cmdlX291dHB1dHNfaWZfbmVlZGVkKG91dHB1dF9qc29uX3BhdGgsIG91dHB1dCkKICAgICAgICAg
aWYgbm90IG91dHB1dDoKICAgICAgICAgICAgIHJldHVybiBzZWxmLkVYSVRfQ09ERV9CQURfTUVS
R0UKKyAgICAgICAgcGVyZl93ZWJraXRfb3V0cHV0ID0gW3BlcmZfd2Via2l0X291dHB1dF0KIAog
ICAgICAgICByZXN1bHRzX3BhZ2VfcGF0aCA9IHNlbGYuX2hvc3QuZmlsZXN5c3RlbS5zcGxpdGV4
dChvdXRwdXRfanNvbl9wYXRoKVswXSArICcuaHRtbCcKLSAgICAgICAgc2VsZi5fZ2VuZXJhdGVf
b3V0cHV0X2ZpbGVzKG91dHB1dF9qc29uX3BhdGgsIHJlc3VsdHNfcGFnZV9wYXRoLCBvdXRwdXQp
CisgICAgICAgIHBlcmZfd2Via2l0X2pzb25fcGF0aCA9IHNlbGYuX2hvc3QuZmlsZXN5c3RlbS5z
cGxpdGV4dChvdXRwdXRfanNvbl9wYXRoKVswXSArICctcGVyZi13ZWJraXQuanNvbicgaWYgb3B0
aW9ucy50ZXN0X3Jlc3VsdHNfc2VydmVyIGVsc2UgTm9uZQorICAgICAgICBzZWxmLl9nZW5lcmF0
ZV9vdXRwdXRfZmlsZXMob3V0cHV0X2pzb25fcGF0aCwgcGVyZl93ZWJraXRfanNvbl9wYXRoLCBy
ZXN1bHRzX3BhZ2VfcGF0aCwgb3V0cHV0LCBwZXJmX3dlYmtpdF9vdXRwdXQpCiAKICAgICAgICAg
aWYgb3B0aW9ucy50ZXN0X3Jlc3VsdHNfc2VydmVyOgogICAgICAgICAgICAgaWYgbm90IHNlbGYu
X3VwbG9hZF9qc29uKG9wdGlvbnMudGVzdF9yZXN1bHRzX3NlcnZlciwgb3V0cHV0X2pzb25fcGF0
aCk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuRVhJVF9DT0RFX0ZBSUxFRF9VUExPQURJ
TkcKIAorICAgICAgICAgICAgIyBGSVhNRTogUmVtb3ZlIHRoaXMgY29kZSBvbmNlIHdlJ3ZlIG1h
ZGUgdHJhbnNpdGlvbiB0byB1c2UgcGVyZi53ZWJraXQub3JnCisgICAgICAgICAgICBpZiBub3Qg
c2VsZi5fdXBsb2FkX2pzb24oJ3BlcmYud2Via2l0Lm9yZycsIHBlcmZfd2Via2l0X2pzb25fcGF0
aCwgIi9hcGkvcmVwb3J0Iik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuRVhJVF9DT0RF
X0ZBSUxFRF9VUExPQURJTkcKKwogICAgICAgICBpZiBvcHRpb25zLnNob3dfcmVzdWx0czoKICAg
ICAgICAgICAgIHNlbGYuX3BvcnQuc2hvd19yZXN1bHRzX2h0bWxfZmlsZShyZXN1bHRzX3BhZ2Vf
cGF0aCkKIApAQCAtMjMzLDkgKzIzOSwxMyBAQCBjbGFzcyBQZXJmVGVzdHNSdW5uZXIob2JqZWN0
KToKICAgICAgICAgY29udGVudHMgPSB7J3Jlc3VsdHMnOiBzZWxmLl9yZXN1bHRzfQogICAgICAg
ICBpZiBkZXNjcmlwdGlvbjoKICAgICAgICAgICAgIGNvbnRlbnRzWydkZXNjcmlwdGlvbiddID0g
ZGVzY3JpcHRpb24KKworICAgICAgICByZXZpc2lvbnNfZm9yX3BlcmZfd2Via2l0ID0ge30KICAg
ICAgICAgZm9yIChuYW1lLCBwYXRoKSBpbiBzZWxmLl9wb3J0LnJlcG9zaXRvcnlfcGF0aHMoKToK
ICAgICAgICAgICAgIHNjbSA9IFNDTURldGVjdG9yKHNlbGYuX2hvc3QuZmlsZXN5c3RlbSwgc2Vs
Zi5faG9zdC5leGVjdXRpdmUpLmRldGVjdF9zY21fc3lzdGVtKHBhdGgpIG9yIHNlbGYuX2hvc3Qu
c2NtKCkKLSAgICAgICAgICAgIGNvbnRlbnRzW25hbWUgKyAnLXJldmlzaW9uJ10gPSBzY20uc3Zu
X3JldmlzaW9uKHBhdGgpCisgICAgICAgICAgICByZXZpc2lvbiA9IHNjbS5zdm5fcmV2aXNpb24o
cGF0aCkKKyAgICAgICAgICAgIGNvbnRlbnRzW25hbWUubG93ZXIoKSArICctcmV2aXNpb24nXSA9
IHJldmlzaW9uCisgICAgICAgICAgICByZXZpc2lvbnNfZm9yX3BlcmZfd2Via2l0W25hbWVdID0g
eydyZXZpc2lvbic6IHN0cihyZXZpc2lvbiksICd0aW1lc3RhbXAnOiBzY20udGltZXN0YW1wX29m
X2xhdGVzdF9jb21taXQocGF0aCl9CiAKICAgICAgICAgIyBGSVhNRTogQWRkIC0tYnJhbmNoIG9y
IGF1dG8tZGV0ZWN0IHRoZSBicmFuY2ggd2UncmUgaW4KICAgICAgICAgZm9yIGtleSwgdmFsdWUg
aW4geyd0aW1lc3RhbXAnOiBpbnQodGltZXN0YW1wKSwgJ2JyYW5jaCc6IHNlbGYuX2RlZmF1bHRf
YnJhbmNoLCAncGxhdGZvcm0nOiBwbGF0Zm9ybSwKQEAgLTI0MywyMCArMjUzLDY0IEBAIGNsYXNz
IFBlcmZUZXN0c1J1bm5lcihvYmplY3QpOgogICAgICAgICAgICAgaWYgdmFsdWU6CiAgICAgICAg
ICAgICAgICAgY29udGVudHNba2V5XSA9IHZhbHVlCiAKLSAgICAgICAgcmV0dXJuIGNvbnRlbnRz
CisgICAgICAgIGNvbnRlbnRzX2Zvcl9wZXJmX3dlYmtpdCA9IHsKKyAgICAgICAgICAgICdidWls
ZGVyTmFtZSc6IGJ1aWxkZXJfbmFtZSwKKyAgICAgICAgICAgICdidWlsZE51bWJlcic6IHN0cihi
dWlsZF9udW1iZXIpLAorICAgICAgICAgICAgJ2J1aWxkVGltZSc6IHNlbGYuX2RhdGV0aW1lX2lu
X0VTNV9jb21wYXRpYmxlX2lzb19mb3JtYXQoc2VsZi5fdXRjX3RpbWVzdGFtcCksCisgICAgICAg
ICAgICAncGxhdGZvcm0nOiBwbGF0Zm9ybSwKKyAgICAgICAgICAgICdyZXZpc2lvbnMnOiByZXZp
c2lvbnNfZm9yX3BlcmZfd2Via2l0LAorICAgICAgICAgICAgJ3Rlc3RzJzoge319CisKKyAgICAg
ICAgIyBGSVhNRTogTWFrZSB0aGlzIGZ1bmN0aW9uIHNob3J0ZXIgb25jZSB3ZSd2ZSB0cmFuc2l0
aW9uZWQgdG8gdXNlIHBlcmYud2Via2l0Lm9yZy4KKyAgICAgICAgZm9yIG1ldHJpY19mdWxsX25h
bWUsIHJlc3VsdCBpbiBzZWxmLl9yZXN1bHRzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgaWYg
bm90IGlzaW5zdGFuY2UocmVzdWx0LCBkaWN0KTogICMgV2UgY2FuJ3QgcmVwb3J0cyByZXN1bHRz
IHdpdGhvdXQgaW5kaXZpc3VhbCBtZWFzdXJlbWVudHMuCisgICAgICAgICAgICAgICAgY29udGlu
dWUKKworICAgICAgICAgICAgYXNzZXJ0IG1ldHJpY19mdWxsX25hbWUuY291bnQoJzonKSA8PSAx
CisgICAgICAgICAgICB0ZXN0X2Z1bGxfbmFtZSwgXywgbWV0cmljID0gbWV0cmljX2Z1bGxfbmFt
ZS5wYXJ0aXRpb24oJzonKQorICAgICAgICAgICAgaWYgbm90IG1ldHJpYzoKKyAgICAgICAgICAg
ICAgICBtZXRyaWMgPSB7J2Zwcyc6ICdGcmFtZVJhdGUnLCAncnVucy9zJzogJ1J1bnMnLCAnbXMn
OiAnVGltZSd9W3Jlc3VsdFsndW5pdCddXQorCisgICAgICAgICAgICB0ZXN0cyA9IGNvbnRlbnRz
X2Zvcl9wZXJmX3dlYmtpdFsndGVzdHMnXQorICAgICAgICAgICAgcGF0aCA9IHRlc3RfZnVsbF9u
YW1lLnNwbGl0KCcvJykKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihwYXRoKSk6
CisgICAgICAgICAgICAgICAgIyBGSVhNRTogV2Ugc2hvdWxkbid0IGFzc3VtZSBIVE1MIGV4dGVu
c2lvbi4KKyAgICAgICAgICAgICAgICBpc19sYXN0X3Rva2VuID0gaSArIDEgPT0gbGVuKHBhdGgp
CisgICAgICAgICAgICAgICAgdXJsID0gJ2h0dHA6Ly90cmFjLndlYmtpdC5vcmcvYnJvd3Nlci90
cnVuay9QZXJmb3JtYW5jZVRlc3RzLycgKyAnLycuam9pbihwYXRoWzA6aSArIDFdKQorICAgICAg
ICAgICAgICAgIGlmIGlzX2xhc3RfdG9rZW46CisgICAgICAgICAgICAgICAgICAgIHVybCArPSAn
Lmh0bWwnCisKKyAgICAgICAgICAgICAgICB0ZXN0cy5zZXRkZWZhdWx0KHBhdGhbaV0sIHsndXJs
JzogdXJsfSkKKyAgICAgICAgICAgICAgICBjdXJyZW50X3Rlc3QgPSB0ZXN0c1twYXRoW2ldXQor
ICAgICAgICAgICAgICAgIGlmIGlzX2xhc3RfdG9rZW46CisgICAgICAgICAgICAgICAgICAgIGN1
cnJlbnRfdGVzdC5zZXRkZWZhdWx0KCdtZXRyaWNzJywge30pCisgICAgICAgICAgICAgICAgICAg
IGFzc2VydCBtZXRyaWMgbm90IGluIGN1cnJlbnRfdGVzdFsnbWV0cmljcyddCisgICAgICAgICAg
ICAgICAgICAgIGN1cnJlbnRfdGVzdFsnbWV0cmljcyddW21ldHJpY10gPSB7J2N1cnJlbnQnOiBy
ZXN1bHRbJ3ZhbHVlcyddfQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAg
ICAgIGN1cnJlbnRfdGVzdC5zZXRkZWZhdWx0KCd0ZXN0cycsIHt9KQorICAgICAgICAgICAgICAg
ICAgICB0ZXN0cyA9IGN1cnJlbnRfdGVzdFsndGVzdHMnXQogCi0gICAgZGVmIF9tZXJnZV9zbGF2
ZV9jb25maWdfanNvbihzZWxmLCBzbGF2ZV9jb25maWdfanNvbl9wYXRoLCBvdXRwdXQpOgorICAg
ICAgICByZXR1cm4gY29udGVudHMsIGNvbnRlbnRzX2Zvcl9wZXJmX3dlYmtpdAorCisgICAgQHN0
YXRpY21ldGhvZAorICAgIGRlZiBfZGF0ZXRpbWVfaW5fRVM1X2NvbXBhdGlibGVfaXNvX2Zvcm1h
dChkYXRldGltZSk6CisgICAgICAgIHJldHVybiBkYXRldGltZS5zdHJmdGltZSgnJVktJW0tJWRU
JUg6JU06JVMuJWYnKQorCisgICAgZGVmIF9tZXJnZV9zbGF2ZV9jb25maWdfanNvbihzZWxmLCBz
bGF2ZV9jb25maWdfanNvbl9wYXRoLCBjb250ZW50cywgY29udGVudHNfZm9yX3BlcmZfd2Via2l0
KToKICAgICAgICAgaWYgbm90IHNlbGYuX2hvc3QuZmlsZXN5c3RlbS5pc2ZpbGUoc2xhdmVfY29u
ZmlnX2pzb25fcGF0aCk6CiAgICAgICAgICAgICBfbG9nLmVycm9yKCJNaXNzaW5nIHNsYXZlIGNv
bmZpZ3VyYXRpb24gSlNPTiBmaWxlOiAlcyIgJSBzbGF2ZV9jb25maWdfanNvbl9wYXRoKQotICAg
ICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgIHJldHVybiBOb25lLCBOb25lCiAKICAg
ICAgICAgdHJ5OgogICAgICAgICAgICAgc2xhdmVfY29uZmlnX2pzb24gPSBzZWxmLl9ob3N0LmZp
bGVzeXN0ZW0ub3Blbl90ZXh0X2ZpbGVfZm9yX3JlYWRpbmcoc2xhdmVfY29uZmlnX2pzb25fcGF0
aCkKICAgICAgICAgICAgIHNsYXZlX2NvbmZpZyA9IGpzb24ubG9hZChzbGF2ZV9jb25maWdfanNv
bikKLSAgICAgICAgICAgIHJldHVybiBkaWN0KHNsYXZlX2NvbmZpZy5pdGVtcygpICsgb3V0cHV0
Lml0ZW1zKCkpCisgICAgICAgICAgICBjb250ZW50cyA9IGRpY3Qoc2xhdmVfY29uZmlnLml0ZW1z
KCkgKyBjb250ZW50cy5pdGVtcygpKQorICAgICAgICAgICAgZm9yIGtleSBpbiBzbGF2ZV9jb25m
aWc6CisgICAgICAgICAgICAgICAgY29udGVudHNfZm9yX3BlcmZfd2Via2l0WydidWlsZGVyJyAr
IGtleS5jYXBpdGFsaXplKCldID0gc2xhdmVfY29uZmlnW2tleV0KKyAgICAgICAgICAgIHJldHVy
biBjb250ZW50cywgY29udGVudHNfZm9yX3BlcmZfd2Via2l0CiAgICAgICAgIGV4Y2VwdCBFeGNl
cHRpb24sIGVycm9yOgogICAgICAgICAgICAgX2xvZy5lcnJvcigiRmFpbGVkIHRvIG1lcmdlIHNs
YXZlIGNvbmZpZ3VyYXRpb24gSlNPTiBmaWxlICVzOiAlcyIgJSAoc2xhdmVfY29uZmlnX2pzb25f
cGF0aCwgZXJyb3IpKQotICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gTm9uZSwg
Tm9uZQogCiAgICAgZGVmIF9tZXJnZV9vdXRwdXRzX2lmX25lZWRlZChzZWxmLCBvdXRwdXRfanNv
bl9wYXRoLCBvdXRwdXQpOgogICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnJlc2V0X3Jlc3VsdHMg
b3Igbm90IHNlbGYuX2hvc3QuZmlsZXN5c3RlbS5pc2ZpbGUob3V0cHV0X2pzb25fcGF0aCk6CkBA
IC0yNjgsMTIgKzMyMiwxNSBAQCBjbGFzcyBQZXJmVGVzdHNSdW5uZXIob2JqZWN0KToKICAgICAg
ICAgICAgIF9sb2cuZXJyb3IoIkZhaWxlZCB0byBtZXJnZSBvdXRwdXQgSlNPTiBmaWxlICVzOiAl
cyIgJSAob3V0cHV0X2pzb25fcGF0aCwgZXJyb3IpKQogICAgICAgICByZXR1cm4gTm9uZQogCi0g
ICAgZGVmIF9nZW5lcmF0ZV9vdXRwdXRfZmlsZXMoc2VsZiwgb3V0cHV0X2pzb25fcGF0aCwgcmVz
dWx0c19wYWdlX3BhdGgsIG91dHB1dCk6CisgICAgZGVmIF9nZW5lcmF0ZV9vdXRwdXRfZmlsZXMo
c2VsZiwgb3V0cHV0X2pzb25fcGF0aCwgcGVyZl93ZWJraXRfanNvbl9wYXRoLCByZXN1bHRzX3Bh
Z2VfcGF0aCwgb3V0cHV0LCBwZXJmX3dlYmtpdF9vdXRwdXQpOgogICAgICAgICBmaWxlc3lzdGVt
ID0gc2VsZi5faG9zdC5maWxlc3lzdGVtCiAKICAgICAgICAganNvbl9vdXRwdXQgPSBqc29uLmR1
bXBzKG91dHB1dCkKICAgICAgICAgZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUob3V0cHV0X2pz
b25fcGF0aCwganNvbl9vdXRwdXQpCiAKKyAgICAgICAgaWYgcGVyZl93ZWJraXRfanNvbl9wYXRo
OgorICAgICAgICAgICAgZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUocGVyZl93ZWJraXRfanNv
bl9wYXRoLCBqc29uLmR1bXBzKHBlcmZfd2Via2l0X291dHB1dCkpCisKICAgICAgICAgaWYgcmVz
dWx0c19wYWdlX3BhdGg6CiAgICAgICAgICAgICB0ZW1wbGF0ZV9wYXRoID0gZmlsZXN5c3RlbS5q
b2luKHNlbGYuX3BvcnQucGVyZl90ZXN0c19kaXIoKSwgJ3Jlc291cmNlcy9yZXN1bHRzLXRlbXBs
YXRlLmh0bWwnKQogICAgICAgICAgICAgdGVtcGxhdGUgPSBmaWxlc3lzdGVtLnJlYWRfdGV4dF9m
aWxlKHRlbXBsYXRlX3BhdGgpCkBAIC0yODQsMjIgKzM0MSwzMCBAQCBjbGFzcyBQZXJmVGVzdHNS
dW5uZXIob2JqZWN0KToKIAogICAgICAgICAgICAgZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUo
cmVzdWx0c19wYWdlX3BhdGgsIHJlc3VsdHNfcGFnZSkKIAotICAgIGRlZiBfdXBsb2FkX2pzb24o
c2VsZiwgdGVzdF9yZXN1bHRzX3NlcnZlciwganNvbl9wYXRoLCBmaWxlX3VwbG9hZGVyPUZpbGVV
cGxvYWRlcik6Ci0gICAgICAgIHVwbG9hZGVyID0gZmlsZV91cGxvYWRlcigiaHR0cHM6Ly8lcy9h
cGkvdGVzdC9yZXBvcnQiICUgdGVzdF9yZXN1bHRzX3NlcnZlciwgMTIwKQorICAgIGRlZiBfdXBs
b2FkX2pzb24oc2VsZiwgdGVzdF9yZXN1bHRzX3NlcnZlciwganNvbl9wYXRoLCBob3N0X3BhdGg9
Ii9hcGkvdGVzdC9yZXBvcnQiLCBmaWxlX3VwbG9hZGVyPUZpbGVVcGxvYWRlcik6CisgICAgICAg
IHVybCA9ICJodHRwczovLyVzJXMiICUgKHRlc3RfcmVzdWx0c19zZXJ2ZXIsIGhvc3RfcGF0aCkK
KyAgICAgICAgdXBsb2FkZXIgPSBmaWxlX3VwbG9hZGVyKHVybCwgMTIwKQogICAgICAgICB0cnk6
CiAgICAgICAgICAgICByZXNwb25zZSA9IHVwbG9hZGVyLnVwbG9hZF9zaW5nbGVfdGV4dF9maWxl
KHNlbGYuX2hvc3QuZmlsZXN5c3RlbSwgJ2FwcGxpY2F0aW9uL2pzb24nLCBqc29uX3BhdGgpCiAg
ICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGVycm9yOgotICAgICAgICAgICAgX2xvZy5lcnJvcigi
RmFpbGVkIHRvIHVwbG9hZCBKU09OIGZpbGUgaW4gMTIwczogJXMiICUgZXJyb3IpCisgICAgICAg
ICAgICBfbG9nLmVycm9yKCJGYWlsZWQgdG8gdXBsb2FkIEpTT04gZmlsZSB0byAlcyBpbiAxMjBz
OiAlcyIgJSAodXJsLCBlcnJvcikpCiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKIAogICAgICAg
ICByZXNwb25zZV9ib2R5ID0gW2xpbmUuc3RyaXAoJ1xuJykgZm9yIGxpbmUgaW4gcmVzcG9uc2Vd
CiAgICAgICAgIGlmIHJlc3BvbnNlX2JvZHkgIT0gWydPSyddOgotICAgICAgICAgICAgX2xvZy5l
cnJvcigiVXBsb2FkZWQgSlNPTiBidXQgZ290IGEgYmFkIHJlc3BvbnNlOiIpCi0gICAgICAgICAg
ICBmb3IgbGluZSBpbiByZXNwb25zZV9ib2R5OgotICAgICAgICAgICAgICAgIF9sb2cuZXJyb3Io
bGluZSkKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgICAgIHBhcnNlZF9yZXNwb25zZSA9IGpzb24ubG9hZHMoJ1xuJy5qb2luKHJlc3BvbnNl
X2JvZHkpKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIF9sb2cuZXJyb3Io
IlVwbG9hZGVkIEpTT04gdG8gJXMgYnV0IGdvdCBhIGJhZCByZXNwb25zZToiICUgdXJsKQorICAg
ICAgICAgICAgICAgIGZvciBsaW5lIGluIHJlc3BvbnNlX2JvZHk6CisgICAgICAgICAgICAgICAg
ICAgIF9sb2cuZXJyb3IobGluZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAg
ICAgICAgIGlmIHBhcnNlZF9yZXNwb25zZS5nZXQoJ3N0YXR1cycpICE9ICdPSyc6CisgICAgICAg
ICAgICAgICAgX2xvZy5lcnJvcigiVXBsb2FkZWQgSlNPTiB0byAlcyBidXQgZ290IGFuIGVycm9y
OiIgJSB1cmwpCisgICAgICAgICAgICAgICAgX2xvZy5lcnJvcihqc29uLmR1bXBzKHBhcnNlZF9y
ZXNwb25zZSwgaW5kZW50PTQpKQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogCi0gICAg
ICAgIF9sb2cuaW5mbygiSlNPTiBmaWxlIHVwbG9hZGVkLiIpCisgICAgICAgIF9sb2cuaW5mbygi
SlNPTiBmaWxlIHVwbG9hZGVkIHRvICVzLiIgJSB1cmwpCiAgICAgICAgIHJldHVybiBUcnVlCiAK
ICAgICBkZWYgX3ByaW50X3N0YXR1cyhzZWxmLCB0ZXN0cywgZXhwZWN0ZWQsIHVuZXhwZWN0ZWQp
OgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVz
dHNydW5uZXJfaW50ZWdyYXRpb250ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3RzcnVubmVyX2ludGVncmF0aW9udGVz
dC5weQkocmV2aXNpb24gMTQzNjI2KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wZXJmb3Jt
YW5jZV90ZXN0cy9wZXJmdGVzdHNydW5uZXJfaW50ZWdyYXRpb250ZXN0LnB5CSh3b3JraW5nIGNv
cHkpCkBAIC0yOSw2ICsyOSw3IEBACiAiIiJJbnRlZ3JhdGlvbiB0ZXN0cyBmb3IgcnVuX3BlcmZf
dGVzdHMuIiIiCiAKIGltcG9ydCBTdHJpbmdJTworaW1wb3J0IGRhdGV0aW1lCiBpbXBvcnQganNv
bgogaW1wb3J0IHJlCiBpbXBvcnQgdW5pdHRlc3QyIGFzIHVuaXR0ZXN0CkBAIC0zMjEsMTQgKzMy
MiwxNyBAQCBjbGFzcyBNYWluVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICAgICAgdXBs
b2FkZWQgPSBbRmFsc2VdCiAKLSAgICAgICAgZGVmIG1vY2tfdXBsb2FkX2pzb24oaG9zdG5hbWUs
IGpzb25fcGF0aCk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvc3RuYW1lLCAnc29t
ZS5ob3N0JykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoanNvbl9wYXRoLCAnL21vY2st
Y2hlY2tvdXQvb3V0cHV0Lmpzb24nKQorICAgICAgICBkZWYgbW9ja191cGxvYWRfanNvbihob3N0
bmFtZSwganNvbl9wYXRoLCBob3N0X3BhdGg9Tm9uZSk6CisgICAgICAgICAgICAjIEZJWE1FOiBH
ZXQgcmlkIG9mIHRoZSBoYXJkLWNvZGVkIHBlcmYud2Via2l0Lm9yZyBvbmNlIHdlJ3ZlIGNvbXBs
ZXRlZCB0aGUgdHJhbnNpdGlvbi4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oaG9zdG5hbWUs
IFsnc29tZS5ob3N0JywgJ3BlcmYud2Via2l0Lm9yZyddKQorICAgICAgICAgICAgc2VsZi5hc3Nl
cnRJbihqc29uX3BhdGgsIFsnL21vY2stY2hlY2tvdXQvb3V0cHV0Lmpzb24nLCAnL21vY2stY2hl
Y2tvdXQvb3V0cHV0LXBlcmYtd2Via2l0Lmpzb24nXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0
SW4oaG9zdF9wYXRoLCBbTm9uZSwgJy9hcGkvcmVwb3J0J10pCiAgICAgICAgICAgICB1cGxvYWRl
ZFswXSA9IHVwbG9hZF9zdWNlZWRzCiAgICAgICAgICAgICByZXR1cm4gdXBsb2FkX3N1Y2VlZHMK
IAogICAgICAgICBydW5uZXIuX3VwbG9hZF9qc29uID0gbW9ja191cGxvYWRfanNvbgogICAgICAg
ICBydW5uZXIuX3RpbWVzdGFtcCA9IDEyMzQ1Njc4OQorICAgICAgICBydW5uZXIuX3V0Y190aW1l
c3RhbXAgPSBkYXRldGltZS5kYXRldGltZSgyMDEzLCAyLCA4LCAxNSwgMTksIDM3LCA0NjAwMDAp
CiAgICAgICAgIG91dHB1dF9jYXB0dXJlID0gT3V0cHV0Q2FwdHVyZSgpCiAgICAgICAgIG91dHB1
dF9jYXB0dXJlLmNhcHR1cmVfb3V0cHV0KCkKICAgICAgICAgdHJ5OgpAQCAtNTIxLDQxICs1MjUs
MjkgQEAgY2xhc3MgTWFpblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgICAgIHNlbGYu
X3Rlc3RfcnVuX3dpdGhfanNvbl9vdXRwdXQocnVubmVyLCBwb3J0Lmhvc3QuZmlsZXN5c3RlbSwg
dXBsb2FkX3N1Y2VlZHM9RmFsc2UsIGV4cGVjdGVkX2V4aXRfY29kZT1QZXJmVGVzdHNSdW5uZXIu
RVhJVF9DT0RFX0ZBSUxFRF9VUExPQURJTkcpCiAKLSAgICBkZWYgdGVzdF91cGxvYWRfanNvbihz
ZWxmKToKLSAgICAgICAgcnVubmVyLCBwb3J0ID0gc2VsZi5jcmVhdGVfcnVubmVyKCkKLSAgICAg
ICAgcG9ydC5ob3N0LmZpbGVzeXN0ZW0uZmlsZXNbJy9tb2NrLWNoZWNrb3V0L3NvbWUuanNvbidd
ID0gJ3NvbWUgY29udGVudCcKLQotICAgICAgICBjYWxsZWQgPSBbXQotICAgICAgICB1cGxvYWRf
c2luZ2xlX3RleHRfZmlsZV90aHJvd3MgPSBGYWxzZQotICAgICAgICB1cGxvYWRfc2luZ2xlX3Rl
eHRfZmlsZV9yZXR1cm5fdmFsdWUgPSBTdHJpbmdJTy5TdHJpbmdJTygnT0snKQotCi0gICAgICAg
IGNsYXNzIE1vY2tGaWxlVXBsb2FkZXI6Ci0gICAgICAgICAgICBkZWYgX19pbml0X18obW9jaywg
dXJsLCB0aW1lb3V0KToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVybCwgJ2h0
dHBzOi8vc29tZS5ob3N0L2FwaS90ZXN0L3JlcG9ydCcpCi0gICAgICAgICAgICAgICAgc2VsZi5h
c3NlcnRUcnVlKGlzaW5zdGFuY2UodGltZW91dCwgaW50KSBhbmQgdGltZW91dCkKLSAgICAgICAg
ICAgICAgICBjYWxsZWQuYXBwZW5kKCdGaWxlVXBsb2FkZXInKQotCi0gICAgICAgICAgICBkZWYg
dXBsb2FkX3NpbmdsZV90ZXh0X2ZpbGUobW9jaywgZmlsZXN5c3RlbSwgY29udGVudF90eXBlLCBm
aWxlbmFtZSk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlc3lzdGVtLCBw
b3J0Lmhvc3QuZmlsZXN5c3RlbSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNv
bnRlbnRfdHlwZSwgJ2FwcGxpY2F0aW9uL2pzb24nKQotICAgICAgICAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoZmlsZW5hbWUsICdzb21lLmpzb24nKQotICAgICAgICAgICAgICAgIGNhbGxlZC5h
cHBlbmQoJ3VwbG9hZF9zaW5nbGVfdGV4dF9maWxlJykKLSAgICAgICAgICAgICAgICBpZiB1cGxv
YWRfc2luZ2xlX3RleHRfZmlsZV90aHJvd3M6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlICJT
b21lIGV4Y2VwdGlvbiIKLSAgICAgICAgICAgICAgICByZXR1cm4gdXBsb2FkX3NpbmdsZV90ZXh0
X2ZpbGVfcmV0dXJuX3ZhbHVlCisgICAgZGVmIHRlc3RfcnVuX3dpdGhfdXBsb2FkX2pzb25fc2hv
dWxkX2dlbmVyYXRlX3BlcmZfd2Via2l0X2pzb24oc2VsZik6CisgICAgICAgIHJ1bm5lciwgcG9y
dCA9IHNlbGYuY3JlYXRlX3J1bm5lcl9hbmRfc2V0dXBfcmVzdWx0c190ZW1wbGF0ZShhcmdzPVsn
LS1vdXRwdXQtanNvbi1wYXRoPS9tb2NrLWNoZWNrb3V0L291dHB1dC5qc29uJywKKyAgICAgICAg
ICAgICctLXRlc3QtcmVzdWx0cy1zZXJ2ZXInLCAnc29tZS5ob3N0JywgJy0tcGxhdGZvcm0nLCAn
cGxhdGZvcm0xJywgJy0tYnVpbGRlci1uYW1lJywgJ2J1aWxkZXIxJywgJy0tYnVpbGQtbnVtYmVy
JywgJzEyMycsCisgICAgICAgICAgICAnLS1zbGF2ZS1jb25maWctanNvbi1wYXRoPS9tb2NrLWNo
ZWNrb3V0L3NsYXZlLWNvbmZpZy5qc29uJ10pCisgICAgICAgIHBvcnQuaG9zdC5maWxlc3lzdGVt
LndyaXRlX3RleHRfZmlsZSgnL21vY2stY2hlY2tvdXQvc2xhdmUtY29uZmlnLmpzb24nLCAneyJr
ZXkiOiAidmFsdWUxIn0nKQogCi0gICAgICAgIHJ1bm5lci5fdXBsb2FkX2pzb24oJ3NvbWUuaG9z
dCcsICdzb21lLmpzb24nLCBNb2NrRmlsZVVwbG9hZGVyKQotICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKGNhbGxlZCwgWydGaWxlVXBsb2FkZXInLCAndXBsb2FkX3NpbmdsZV90ZXh0X2ZpbGUnXSkK
KyAgICAgICAgc2VsZi5fdGVzdF9ydW5fd2l0aF9qc29uX291dHB1dChydW5uZXIsIHBvcnQuaG9z
dC5maWxlc3lzdGVtLCB1cGxvYWRfc3VjZWVkcz1UcnVlKQorICAgICAgICBnZW5lcmF0ZWRfanNv
biA9IGpzb24ubG9hZHMocG9ydC5ob3N0LmZpbGVzeXN0ZW0uZmlsZXNbJy9tb2NrLWNoZWNrb3V0
L291dHB1dC1wZXJmLXdlYmtpdC5qc29uJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2lu
c3RhbmNlKGdlbmVyYXRlZF9qc29uLCBsaXN0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChs
ZW4oZ2VuZXJhdGVkX2pzb24pLCAxKQogCi0gICAgICAgIG91dHB1dCA9IE91dHB1dENhcHR1cmUo
KQotICAgICAgICBvdXRwdXQuY2FwdHVyZV9vdXRwdXQoKQotICAgICAgICB1cGxvYWRfc2luZ2xl
X3RleHRfZmlsZV9yZXR1cm5fdmFsdWUgPSBTdHJpbmdJTy5TdHJpbmdJTygnU29tZSBlcnJvcicp
Ci0gICAgICAgIHJ1bm5lci5fdXBsb2FkX2pzb24oJ3NvbWUuaG9zdCcsICdzb21lLmpzb24nLCBN
b2NrRmlsZVVwbG9hZGVyKQotICAgICAgICBfLCBfLCBsb2dzID0gb3V0cHV0LnJlc3RvcmVfb3V0
cHV0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2dzLCAnVXBsb2FkZWQgSlNPTiBidXQg
Z290IGEgYmFkIHJlc3BvbnNlOlxuU29tZSBlcnJvclxuJykKLQotICAgICAgICAjIFRocm93aW5n
IGFuIGV4Y2VwdGlvbiB1cGxvYWRfc2luZ2xlX3RleHRfZmlsZSBzaG91bGRuJ3QgYmxvdyB1cCBf
dXBsb2FkX2pzb24KLSAgICAgICAgY2FsbGVkID0gW10KLSAgICAgICAgdXBsb2FkX3NpbmdsZV90
ZXh0X2ZpbGVfdGhyb3dzID0gVHJ1ZQotICAgICAgICBydW5uZXIuX3VwbG9hZF9qc29uKCdzb21l
Lmhvc3QnLCAnc29tZS5qc29uJywgTW9ja0ZpbGVVcGxvYWRlcikKLSAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChjYWxsZWQsIFsnRmlsZVVwbG9hZGVyJywgJ3VwbG9hZF9zaW5nbGVfdGV4dF9maWxl
J10pCisgICAgICAgIG91dHB1dCA9IGdlbmVyYXRlZF9qc29uWzBdCisgICAgICAgIHNlbGYubWF4
RGlmZiA9IE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXRbJ3BsYXRmb3JtJ10s
ICdwbGF0Zm9ybTEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dFsnYnVpbGROdW1i
ZXInXSwgJzEyMycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0WydidWlsZFRpbWUn
XSwgJzIwMTMtMDItMDhUMTU6MTk6MzcuNDYwMDAwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChvdXRwdXRbJ2J1aWxkZXJOYW1lJ10sICdidWlsZGVyMScpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwob3V0cHV0WydidWlsZGVyS2V5J10sICd2YWx1ZTEnKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKG91dHB1dFsncmV2aXNpb25zJ10sIHsnV2ViS2l0JzogeydyZXZpc2lvbic6ICc1Njc4
JywgJ3RpbWVzdGFtcCc6ICcyMDEzLTAyLTAxIDA4OjQ4OjA1ICswMDAwJ319KQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKG91dHB1dFsndGVzdHMnXS5rZXlzKCksIFsnQmluZGluZ3MnXSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQob3V0cHV0Wyd0ZXN0cyddWydCaW5kaW5ncydd
LmtleXMoKSksIFsndGVzdHMnLCAndXJsJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0
cHV0Wyd0ZXN0cyddWydCaW5kaW5ncyddWyd1cmwnXSwgJ2h0dHA6Ly90cmFjLndlYmtpdC5vcmcv
YnJvd3Nlci90cnVuay9QZXJmb3JtYW5jZVRlc3RzL0JpbmRpbmdzJykKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChvdXRwdXRbJ3Rlc3RzJ11bJ0JpbmRpbmdzJ11bJ3Rlc3RzJ10ua2V5cygpLCBb
J2V2ZW50LXRhcmdldC13cmFwcGVyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0
Wyd0ZXN0cyddWydCaW5kaW5ncyddWyd0ZXN0cyddWydldmVudC10YXJnZXQtd3JhcHBlciddLCB7
CisgICAgICAgICAgICAndXJsJzogJ2h0dHA6Ly90cmFjLndlYmtpdC5vcmcvYnJvd3Nlci90cnVu
ay9QZXJmb3JtYW5jZVRlc3RzL0JpbmRpbmdzL2V2ZW50LXRhcmdldC13cmFwcGVyLmh0bWwnLAor
ICAgICAgICAgICAgJ21ldHJpY3MnOiB7J1RpbWUnOiB7J2N1cnJlbnQnOiBbMTQ4Ni4wLCAxNDcx
LjAsIDE1MTAuMCwgMTUwNS4wLCAxNDc4LjAsIDE0OTAuMF19fX0pCkluZGV4OiBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0c3J1bm5lcl91bml0dGVzdC5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3Rz
L3BlcmZ0ZXN0c3J1bm5lcl91bml0dGVzdC5weQkocmV2aXNpb24gMTQzNjI2KQorKysgVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdHNydW5uZXJfdW5pdHRl
c3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAgaW1wb3J0IHJlCiBpbXBvcnQg
dW5pdHRlc3QyIGFzIHVuaXR0ZXN0CiAKIGZyb20gd2Via2l0cHkuY29tbW9uLmhvc3RfbW9jayBp
bXBvcnQgTW9ja0hvc3QKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5vdXRwdXRjYXB0dXJl
IGltcG9ydCBPdXRwdXRDYXB0dXJlCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0LnRl
c3QgaW1wb3J0IFRlc3RQb3J0CiBmcm9tIHdlYmtpdHB5LnBlcmZvcm1hbmNlX3Rlc3RzLnBlcmZ0
ZXN0c3J1bm5lciBpbXBvcnQgUGVyZlRlc3RzUnVubmVyCiAKQEAgLTE0NywzICsxNDgsNjQgQEAg
Y2xhc3MgTWFpblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKG9wdGlvbnMub3V0cHV0X2pzb25fcGF0aCwgJ2Evb3V0cHV0Lmpzb24nKQogICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKG9wdGlvbnMuc2xhdmVfY29uZmlnX2pzb25fcGF0aCwgJ2Evc291cmNl
Lmpzb24nKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wdGlvbnMudGVzdF9yZXN1bHRzX3Nl
cnZlciwgJ3NvbWVob3N0JykKKworICAgIGRlZiB0ZXN0X3VwbG9hZF9qc29uKHNlbGYpOgorICAg
ICAgICBydW5uZXIsIHBvcnQgPSBzZWxmLmNyZWF0ZV9ydW5uZXIoKQorICAgICAgICBwb3J0Lmhv
c3QuZmlsZXN5c3RlbS5maWxlc1snL21vY2stY2hlY2tvdXQvc29tZS5qc29uJ10gPSAnc29tZSBj
b250ZW50JworCisgICAgICAgIGNsYXNzIE1vY2tGaWxlVXBsb2FkZXI6CisgICAgICAgICAgICBj
YWxsZWQgPSBbXQorICAgICAgICAgICAgdXBsb2FkX3NpbmdsZV90ZXh0X2ZpbGVfdGhyb3dzID0g
RmFsc2UKKyAgICAgICAgICAgIHVwbG9hZF9zaW5nbGVfdGV4dF9maWxlX3JldHVybl92YWx1ZSA9
IE5vbmUKKworICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBkZWYgcmVzZXQo
Y2xzKToKKyAgICAgICAgICAgICAgICBjbHMuY2FsbGVkID0gW10KKyAgICAgICAgICAgICAgICBj
bHMudXBsb2FkX3NpbmdsZV90ZXh0X2ZpbGVfdGhyb3dzID0gRmFsc2UKKyAgICAgICAgICAgICAg
ICBjbHMudXBsb2FkX3NpbmdsZV90ZXh0X2ZpbGVfcmV0dXJuX3ZhbHVlID0gTm9uZQorCisgICAg
ICAgICAgICBkZWYgX19pbml0X18obW9jaywgdXJsLCB0aW1lb3V0KToKKyAgICAgICAgICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHVybCwgJ2h0dHBzOi8vc29tZS5ob3N0L3NvbWUvcGF0aCcpCisg
ICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UodGltZW91dCwgaW50KSBh
bmQgdGltZW91dCkKKyAgICAgICAgICAgICAgICBtb2NrLmNhbGxlZC5hcHBlbmQoJ0ZpbGVVcGxv
YWRlcicpCisKKyAgICAgICAgICAgIGRlZiB1cGxvYWRfc2luZ2xlX3RleHRfZmlsZShtb2NrLCBm
aWxlc3lzdGVtLCBjb250ZW50X3R5cGUsIGZpbGVuYW1lKToKKyAgICAgICAgICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKGZpbGVzeXN0ZW0sIHBvcnQuaG9zdC5maWxlc3lzdGVtKQorICAgICAgICAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29udGVudF90eXBlLCAnYXBwbGljYXRpb24vanNvbicp
CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlbmFtZSwgJ3NvbWUuanNvbicp
CisgICAgICAgICAgICAgICAgbW9jay5jYWxsZWQuYXBwZW5kKCd1cGxvYWRfc2luZ2xlX3RleHRf
ZmlsZScpCisgICAgICAgICAgICAgICAgaWYgbW9jay51cGxvYWRfc2luZ2xlX3RleHRfZmlsZV90
aHJvd3M6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbgorICAgICAgICAgICAg
ICAgIHJldHVybiBtb2NrLnVwbG9hZF9zaW5nbGVfdGV4dF9maWxlX3JldHVybl92YWx1ZQorCisg
ICAgICAgIE1vY2tGaWxlVXBsb2FkZXIudXBsb2FkX3NpbmdsZV90ZXh0X2ZpbGVfcmV0dXJuX3Zh
bHVlID0gU3RyaW5nSU8uU3RyaW5nSU8oJ09LJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJ1
bm5lci5fdXBsb2FkX2pzb24oJ3NvbWUuaG9zdCcsICdzb21lLmpzb24nLCAnL3NvbWUvcGF0aCcs
IE1vY2tGaWxlVXBsb2FkZXIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE1vY2tGaWxlVXBs
b2FkZXIuY2FsbGVkLCBbJ0ZpbGVVcGxvYWRlcicsICd1cGxvYWRfc2luZ2xlX3RleHRfZmlsZSdd
KQorCisgICAgICAgIE1vY2tGaWxlVXBsb2FkZXIucmVzZXQoKQorICAgICAgICBNb2NrRmlsZVVw
bG9hZGVyLnVwbG9hZF9zaW5nbGVfdGV4dF9maWxlX3JldHVybl92YWx1ZSA9IFN0cmluZ0lPLlN0
cmluZ0lPKCdTb21lIGVycm9yJykKKyAgICAgICAgb3V0cHV0ID0gT3V0cHV0Q2FwdHVyZSgpCisg
ICAgICAgIG91dHB1dC5jYXB0dXJlX291dHB1dCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uo
cnVubmVyLl91cGxvYWRfanNvbignc29tZS5ob3N0JywgJ3NvbWUuanNvbicsICcvc29tZS9wYXRo
JywgTW9ja0ZpbGVVcGxvYWRlcikpCisgICAgICAgIF8sIF8sIGxvZ3MgPSBvdXRwdXQucmVzdG9y
ZV9vdXRwdXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvZ3MsICdVcGxvYWRlZCBKU09O
IHRvIGh0dHBzOi8vc29tZS5ob3N0L3NvbWUvcGF0aCBidXQgZ290IGEgYmFkIHJlc3BvbnNlOlxu
U29tZSBlcnJvclxuJykKKworICAgICAgICAjIFRocm93aW5nIGFuIGV4Y2VwdGlvbiB1cGxvYWRf
c2luZ2xlX3RleHRfZmlsZSBzaG91bGRuJ3QgYmxvdyB1cCBfdXBsb2FkX2pzb24KKyAgICAgICAg
TW9ja0ZpbGVVcGxvYWRlci5yZXNldCgpCisgICAgICAgIE1vY2tGaWxlVXBsb2FkZXIudXBsb2Fk
X3NpbmdsZV90ZXh0X2ZpbGVfdGhyb3dzID0gVHJ1ZQorICAgICAgICBzZWxmLmFzc2VydEZhbHNl
KHJ1bm5lci5fdXBsb2FkX2pzb24oJ3NvbWUuaG9zdCcsICdzb21lLmpzb24nLCAnL3NvbWUvcGF0
aCcsIE1vY2tGaWxlVXBsb2FkZXIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE1vY2tGaWxl
VXBsb2FkZXIuY2FsbGVkLCBbJ0ZpbGVVcGxvYWRlcicsICd1cGxvYWRfc2luZ2xlX3RleHRfZmls
ZSddKQorCisgICAgICAgIE1vY2tGaWxlVXBsb2FkZXIucmVzZXQoKQorICAgICAgICBNb2NrRmls
ZVVwbG9hZGVyLnVwbG9hZF9zaW5nbGVfdGV4dF9maWxlX3JldHVybl92YWx1ZSA9IFN0cmluZ0lP
LlN0cmluZ0lPKCd7InN0YXR1cyI6ICJPSyJ9JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJ1
bm5lci5fdXBsb2FkX2pzb24oJ3NvbWUuaG9zdCcsICdzb21lLmpzb24nLCAnL3NvbWUvcGF0aCcs
IE1vY2tGaWxlVXBsb2FkZXIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE1vY2tGaWxlVXBs
b2FkZXIuY2FsbGVkLCBbJ0ZpbGVVcGxvYWRlcicsICd1cGxvYWRfc2luZ2xlX3RleHRfZmlsZSdd
KQorCisgICAgICAgIE1vY2tGaWxlVXBsb2FkZXIucmVzZXQoKQorICAgICAgICBNb2NrRmlsZVVw
bG9hZGVyLnVwbG9hZF9zaW5nbGVfdGV4dF9maWxlX3JldHVybl92YWx1ZSA9IFN0cmluZ0lPLlN0
cmluZ0lPKCd7InN0YXR1cyI6ICJTb21ldGhpbmdIYXNGYWlsZWQiLCAiZmFpbHVyZVN0b3JlZCI6
IGZhbHNlfScpCisgICAgICAgIG91dHB1dCA9IE91dHB1dENhcHR1cmUoKQorICAgICAgICBvdXRw
dXQuY2FwdHVyZV9vdXRwdXQoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJ1bm5lci5fdXBs
b2FkX2pzb24oJ3NvbWUuaG9zdCcsICdzb21lLmpzb24nLCAnL3NvbWUvcGF0aCcsIE1vY2tGaWxl
VXBsb2FkZXIpKQorICAgICAgICBfLCBfLCBsb2dzID0gb3V0cHV0LnJlc3RvcmVfb3V0cHV0KCkK
KyAgICAgICAgc2VyaWFsaXplZF9qc29uID0ganNvbi5kdW1wcyh7J3N0YXR1cyc6ICdTb21ldGhp
bmdIYXNGYWlsZWQnLCAnZmFpbHVyZVN0b3JlZCc6IEZhbHNlfSwgaW5kZW50PTQpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwobG9ncywgJ1VwbG9hZGVkIEpTT04gdG8gaHR0cHM6Ly9zb21lLmhv
c3Qvc29tZS9wYXRoIGJ1dCBnb3QgYW4gZXJyb3I6XG4lc1xuJyAlIHNlcmlhbGl6ZWRfanNvbikK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189848</attachid>
            <date>2013-02-22 15:29:50 -0800</date>
            <delta_ts>2013-02-22 20:30:25 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-108577-20130222152609.patch</filename>
            <type>text/plain</type>
            <size>33431</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE0MzY4NSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDkxIEBACisyMDEzLTAyLTIxICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgor
CisgICAgICAgIFVwbG9hZCByZXN1bHRzIHRvIHBlcmYud2Via2l0Lm9yZyBpbiBhZGRpdGlvbiB0
byB0aGUgb25lIHNwZWNpZmllZCBieSAtLXRlc3QtcmVzdWx0cy1zZXJ2ZXIKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODU3NworCisgICAgICAgIFJl
dmlld2VkIGJ5IERpcmsgUHJhbmtlLgorCisgICAgICAgIFVwbG9hZCByZXN1bHRzIHRvIHBlcmYu
d2Via2l0Lm9yZyB1c2luZyBuZXcgSlNPTiBmb3JtYXQgYXMgd2VsbCBhcyB0aGUgaG9zdCBzcGVj
aWZpZWQgYnkKKyAgICAgICAgLS10ZXN0LXJlc3VsdHMtc2VydmVyLiBUaGUgbmV3IGZvcm1hdCBp
cyBuZWVkZWQgdG8gcHJvdmlkZSBleHRyYSBpbmZvcm1hdGlvbiBwZXJmLndlYmtpdC5vcmcKKyAg
ICAgICAgbmVlZCBzdWNoIGFzIHRoZSBzdWJ2ZXJzaW9uIGNvbW1pdCB0aW1lIGFuZCB0ZXN0IFVS
THMuIFRoaXMgaXMgYSB0ZW1wb3JhcmlseSBtZWFzdXJlIHVudGlsCisgICAgICAgIHdlIGNvbXBs
ZXRlIHRoZSB0cmFuc2l0aW9uIGFuZCB0aGUgb2xkIEpTT04gZm9ybWF0IGFuZCB0aGUgY29kZSB0
byB1cGxvYWQgcmVzdWx0cyB0bworICAgICAgICB3ZWJraXQtcGVyZi5hcHBzcG90LmNvbSBjYW4g
YmUgZGVsZXRlZC4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZHMgc2NtLnRpbWVzdGFtcF9vZl9s
YXRlc3RfY29tbWl0IHRvIG9idGFpbiB0aGUgdGltZXN0YW1wIG9mIHRoZSBsYXRlc3QgY29tbWl0
IHByZXNlbnQKKyAgICAgICAgaW4gYSBzdm4gY2hlY2tvdXQgb3IgYSBnaXQgY2xvbmUuIFRoaXMg
aW5mb3JtYXRpb24gaXMgZW1iZWRkZWQgaW4gSlNPTiBzdWJtaXR0ZWQgdG8gcGVyZi53ZWJraXQu
b3JnCisgICAgICAgIHNvIHRoYXQgdGhlIGFwcCBjYW4gc29ydCBwZXJmb3JtYW5jZSB0ZXN0IHJl
c3VsdHMgYmFzZWQgb24gdGhlIHRpbWVzdGFtcCBvZiB0aGUgbGFzdCBjb21taXQuCisKKyAgICAg
ICAgSXQgYWxzbyBjaGFuZ2VzIHRoZSByZXBvc2l0b3J5IG5hbWVzIHJldHVybmVkIGJ5IHBvcnQg
b2JqZWN0cyB0byBiZSBwcm9wZXJseSBjYXBpdGFsaXplZAorICAgICAgICBodW1hbiByZWFkYWJs
ZSBuYW1lcyBzdWNoIGFzIFdlYktpdCBpbnN0ZWFkIG9mIGxvd2VyY2FzZWQgbmFtZXMgc3VjaCBh
cyB3ZWJraXQgc2luY2UgdGhlc2UgbmFtZXMKKyAgICAgICAgYXJlIGRpc3BsYXllZCBvbiBwZXJm
LndlYmtpdC5vcmcgZm9yIGh1bWFucy4gU2V2ZXJhbCB1c2VycyBvZiB0aGlzIGZlYXR1cmUgaGFz
IGJlZW4gdXBkYXRlZAorICAgICAgICB0byBleHBsaWNpdGx5IGxvd2VyY2FzZSB0aGUgbmFtZXMu
CisKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9naXQu
cHk6CisgICAgICAgIChHaXQudGltZXN0YW1wX29mX2xhdGVzdF9jb21taXQpOiBBZGRlZC4gT2J0
YWlucyB0aGUgdGltZXN0YW1wIG9mIHRoZSBsYXN0IGNvbW1pdC4gVW5mb3J0dW5hdGVseSwKKyAg
ICAgICAgZ2l0J3MgdGltZXN0YW1wIGdyYW51bGFyaXR5IGlzIHNlY29uZHMgc28gd2UncmUgbG9z
aW5nIHNvbWUgaW5mb3JtYXRpb24gY29tcGFyZWQgdG8gdXNpbmcgYSByZWd1bGFyCisgICAgICAg
IHN1YnZlcnNpb24gY2xpZW50LiBUbyBtYWtlIG1hdHRlcnMgd29yc2UsIGdpdCBkb2Vzbid0IGhh
dmUgYW55IG9wdGlvbiB0byBzaG93IElTTy1mb3JtYXQgdGltZXN0YW1wIGluCisgICAgICAgIFVU
QyBzbyB3ZSdyZSBnb2luZyB0byBtYW51YWxseSBmaWRkbGUgd2l0aCB0aW1lem9uZS4KKworICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zY20ucHk6CisgICAg
ICAgIChTQ00udGltZXN0YW1wX29mX2xhdGVzdF9jb21taXQpOiBBZGRlZC4KKworICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zY21fbW9jay5weToKKyAgICAg
ICAgKE1vY2tTQ00udGltZXN0YW1wX29mX2xhdGVzdF9jb21taXQpOiBBZGRlZC4KKworICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zY21fdW5pdHRlc3QucHk6
CisgICAgICAgICh0ZXN0X3RpbWVzdGFtcF9vZl9sYXRlc3RfY29tbWl0KTogQWRkZWQgYSB0ZXN0
IGZvciBHaXQudGltZXN0YW1wX29mX2xhdGVzdF9jb21taXQuCisKKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc3ZuLnB5OgorICAgICAgICAoU1ZOLnRpbWVz
dGFtcF9vZl9sYXRlc3RfY29tbWl0KTogQWRkZWQuIFdpdGggc3ZuLCBhbGwgd2UgbmVlZCB0byBk
byBpcyB0byB1c2UgLS14bWwgb3B0aW9uIGFuZCBwYXJzZQorICAgICAgICB0aGUgdGltZXN0YW1w
IHdoaWNoIGlzIGFsd2F5cyBpbiBVVEMuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5OgorICAg
ICAgICAoSlNPTlJlc3VsdHNHZW5lcmF0b3JCYXNlLl9pbnNlcnRfZ2VuZXJpY19tZXRhZGF0YSk6
IExvd2VyY2FzZSB0aGUgbmFtZS4gTm90ZSB0aGF0IHRoZSBuYW1lCisgICAgICAgICdjaHJvbWl1
bScgbmVlZHMgdG8gYmUgc3Vic3RpdHV0ZWQgYnkgJ2Nocm9tZScgZm9yIGhpc3RvcmljYWwgcmVh
c29ucy4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFz
ZS5weToKKyAgICAgICAgKFBvcnQucmVwb3NpdG9yeV9wYXRocyk6IFJldHVybiBXZWJLaXQgaW5z
dGVhZCBvZiB3ZWJraXQgYXMgbm90ZWQgYWJvdmUuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtLnB5OgorICAgICAgICAoQ2hyb21pdW1Qb3J0
LnJlcG9zaXRvcnlfcGF0aHMpOiBSZXR1cm4gQ2hyb21pdW0gaW5zdGVhZCBvZiBjaHJvbWl1bSBh
cyBub3RlZCBhYm92ZS4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFuY2Vf
dGVzdHMvcGVyZnRlc3RzcnVubmVyLnB5OgorICAgICAgICAoUGVyZlRlc3RzUnVubmVyLl9faW5p
dF9fKTogU3RvcmUgdGhlIGN1cnJlbnQgdGltZSBpbiBVVEMgYXMgd2VsbCBhcyBpbiBsb2NhbCB0
aW1lLgorICAgICAgICAoUGVyZlRlc3RzUnVubmVyLl9jb2xsZWN0X3Rlc3RzKToKKworICAgICAg
ICAoUGVyZlRlc3RzUnVubmVyLl9nZW5lcmF0ZV9hbmRfc2hvd19yZXN1bHRzKTogUmV0cmlldmUg
Ym90aCByZWd1bGFyIG91dHB1dCBhbmQgb25lIGZvciBwZXJmLndlYmtpdC5vcmcsCisgICAgICAg
IGFuZCB1cGxvYWQgdGhlbSBhcHByb3ByaWF0ZWx5LgorCisgICAgICAgIChQZXJmVGVzdHNSdW5u
ZXIuX2dlbmVyYXRlX3Jlc3VsdHNfZGljdCk6IFN0b3JlIFdlYktpdCBhbmQgQ2hyb21pdW0gcmV2
aXNpb25zIGF0IHdoaWNoIHRlc3RzIHdlcmUgcmFuCisgICAgICAgIGluIHJldmlzaW9uc19mb3Jf
cGVyZl93ZWJraXQgYW5kIGNvbnN0cnVjdCBhbiBvdXRwdXQgZm9yIHBlcmYud2Via2l0Lm9yZy4K
KworICAgICAgICAoUGVyZlRlc3RzUnVubmVyLl9kYXRldGltZV9pbl9FUzVfY29tcGF0aWJsZV9p
c29fZm9ybWF0KTogQWRkZWQuCisKKyAgICAgICAgKFBlcmZUZXN0c1J1bm5lci5fbWVyZ2Vfc2xh
dmVfY29uZmlnX2pzb24pOiBNZXJnZSBzbGF2ZSBjb25maWd1cmF0aW9uIGZpbGVzIGludG8gYm90
aCByZWd1bGFyIG91dHB1dAorICAgICAgICBhbmQgb25lIGZvciBwZXJmLndlYmtpdC5vcmcuIEhl
cmUsIHdlIHByZWZpeCBlYWNoIGtleSB3aXRoICJidWlsZGVyIiBmb3IgcGVyZi53ZWJraXQub3Jn
LgorICAgICAgICBlLmcuICJwcm9jZXNzb3IiIHdvdWxkIGJlIHJlbmFtZWQgdG8gImJ1aWxkZXJQ
cm9jZXNzb3IiLgorCisgICAgICAgIChQZXJmVGVzdHNSdW5uZXIuX2dlbmVyYXRlX291dHB1dF9m
aWxlcyk6CisKKyAgICAgICAgKFBlcmZUZXN0c1J1bm5lci5fdXBsb2FkX2pzb24pOiBBZGRlZCBh
IHJlbW90ZSBwYXRoIGFzIGFuIGFyZ3VtZW50IHNpbmNlIHdlIHVwbG9hZCBKU09OcyB0byAvYXBp
L3JlcG9ydAorICAgICAgICBvbiBwZXJmLndlYmtpdC5vcmcgd2hlcmVhcyB3ZSB1cGxvYWQgaXQg
dG8gL2FwaS90ZXN0L3JlcG9ydCBvbiB3ZWJraXQtcGVyZi5hcHBzcG90LmNvbS4gQWxzbyBhZGRl
ZCB0aGUgY29kZQorICAgICAgICB0byBwYXJzZSByZXNwb25zZSBhcyBKU09OIHdoZW4gcG9zc2li
bGUgc2luY2UgcGVyZi53ZWJraXQub3JnIHJldHVybnMgYSBKU09OIHJlc3BvbnNlIGFzIG9wcG9z
ZWQgdG8KKyAgICAgICAgd2Via2l0LXBlcmYuYXBwc3BvdC5jb20gd2hpY2ggc3BpdHMgb3V0IGEg
cGxhaW50ZXh0IHJlc3BvbnNlLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wZXJmb3Jt
YW5jZV90ZXN0cy9wZXJmdGVzdHNydW5uZXJfaW50ZWdyYXRpb250ZXN0LnB5OgorICAgICAgICAo
TWFpblRlc3QuX3Rlc3RfcnVuX3dpdGhfanNvbl9vdXRwdXQubW9ja191cGxvYWRfanNvbik6IFRv
bGVyYXRlIHBlcmYud2Via2l0Lm9yZy9hcGkvcmVwb3J0IGZvciBub3cuCisgICAgICAgIChNYWlu
VGVzdC5fdGVzdF9ydW5fd2l0aF9qc29uX291dHB1dCk6IFN0b3JlIGEgVVRDIHRpbWUgYXMgcGVy
ZnRlc3RydW5uZXIgd291bGQgZG8uCisgICAgICAgIChNYWluVGVzdC50ZXN0X3J1bl93aXRoX3Vw
bG9hZF9qc29uX3Nob3VsZF9nZW5lcmF0ZV9wZXJmX3dlYmtpdF9qc29uKTogQWRkZWQuCisKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0c3J1bm5l
cl91bml0dGVzdC5weToKKyAgICAgICAgKE1haW5UZXN0LnRlc3RfdXBsb2FkX2pzb24pOiBNb3Zl
ZCBmcm9tIGl0ZWdyYXRpb250ZXN0LnB5IHNpbmNlIGl0IHJlYWxseSBpcyBhIHVuaXQgdGVzdC4g
QWxzbyBhZGRlZCB0ZXN0CisgICAgICAgIGNhc2VzIHRvIHBhcnNlIEpTT04gcmVzcG9uc2VzLgor
ICAgICAgICAoTWFpblRlc3QudGVzdF91cGxvYWRfanNvbi5Nb2NrRmlsZVVwbG9hZGVyKTogUmVm
YWN0b3JlZC4KKyAgICAgICAgKE1haW5UZXN0LnRlc3RfdXBsb2FkX2pzb24uTW9ja0ZpbGVVcGxv
YWRlci5yZXNldCk6IEFkZGVkLgorICAgICAgICAoTWFpblRlc3QudGVzdF91cGxvYWRfanNvbi5N
b2NrRmlsZVVwbG9hZGVyLl9faW5pdF9fKToKKyAgICAgICAgKE1haW5UZXN0LnRlc3RfdXBsb2Fk
X2pzb24uTW9ja0ZpbGVVcGxvYWRlci51cGxvYWRfc2luZ2xlX3RleHRfZmlsZSk6CisKIDIwMTMt
MDItMjEgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2No
cm9taXVtXSBzdXBwb3J0IHRoZSBsdWNpZCB2ZXJzaW9uIG9mIGZyZWV0eXBlIG9uIHByZWNpc2Ug
aW4gRFJUCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20v
Z2l0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNr
b3V0L3NjbS9naXQucHkJKHJldmlzaW9uIDE0MzYyNikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9naXQucHkJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3
LDcgQEAKICMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKK2ltcG9ydCBkYXRldGltZQog
aW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBvcwogaW1wb3J0IHJlCkBAIC0yNTMsNiArMjU0LDIxIEBA
IGNsYXNzIEdpdChTQ00sIFNWTlJlcG9zaXRvcnkpOgogICAgICAgICAgICAgcmV0dXJuICIiCiAg
ICAgICAgIHJldHVybiBzdHIobWF0Y2guZ3JvdXAoJ3N2bl9yZXZpc2lvbicpKQogCisgICAgZGVm
IHRpbWVzdGFtcF9vZl9sYXRlc3RfY29tbWl0KHNlbGYsIHBhdGgpOgorICAgICAgICBnaXRfbG9n
ID0gc2VsZi5fcnVuX2dpdChbJ2xvZycsICctMScsICctLWRhdGU9aXNvJywgc2VsZi5maW5kX2No
ZWNrb3V0X3Jvb3QocGF0aCldKQorICAgICAgICBtYXRjaCA9IHJlLnNlYXJjaCgiXkRhdGU6XHMq
KFxkezR9KS0oXGR7Mn0pLShcZHsyfSkgKFxkezJ9KTooXGR7Mn0pOihcZHsyfSkgKFsrLV0pKFxk
ezJ9KShcZHsyfSkkIiwgZ2l0X2xvZywgcmUuTVVMVElMSU5FKQorICAgICAgICBpZiBub3QgbWF0
Y2g6CisgICAgICAgICAgICByZXR1cm4gIiIKKworICAgICAgICAjIE1hbnVhbGx5IG1vZGlmeSB0
aGUgdGltZXpvbmUgc2luY2UgR2l0IGRvZXNuJ3QgaGF2ZSBhbiBvcHRpb24gdG8gc2hvdyBpdCBp
biBVVEMuCisgICAgICAgICMgR2l0IGFsc28gdHJ1bmNhdGVzIG1pbGxpc2Vjb25kcyBidXQgd2Un
cmUgZ29pbmcgdG8gaWdub3JlIHRoYXQgZm9yIG5vdy4KKyAgICAgICAgdGltZV93aXRoX3RpbWV6
b25lID0gZGF0ZXRpbWUuZGF0ZXRpbWUoaW50KG1hdGNoLmdyb3VwKDEpKSwgaW50KG1hdGNoLmdy
b3VwKDIpKSwgaW50KG1hdGNoLmdyb3VwKDMpKSwKKyAgICAgICAgICAgIGludChtYXRjaC5ncm91
cCg0KSksIGludChtYXRjaC5ncm91cCg1KSksIGludChtYXRjaC5ncm91cCg2KSksIDApCisKKyAg
ICAgICAgc2lnbiA9IDEgaWYgbWF0Y2guZ3JvdXAoNykgPT0gJysnIGVsc2UgLTEKKyAgICAgICAg
dGltZV93aXRob3V0X3RpbWV6b25lID0gdGltZV93aXRoX3RpbWV6b25lIC0gZGF0ZXRpbWUudGlt
ZWRlbHRhKGhvdXJzPXNpZ24gKiBpbnQobWF0Y2guZ3JvdXAoOCkpLCBtaW51dGVzPWludChtYXRj
aC5ncm91cCg5KSkpCisgICAgICAgIHJldHVybiB0aW1lX3dpdGhvdXRfdGltZXpvbmUuc3RyZnRp
bWUoJyVZLSVtLSVkVCVIOiVNOiVTWicpCisKICAgICBkZWYgcHJlcGVuZF9zdm5fcmV2aXNpb24o
c2VsZiwgZGlmZik6CiAgICAgICAgIHJldmlzaW9uID0gc2VsZi5oZWFkX3N2bl9yZXZpc2lvbigp
CiAgICAgICAgIGlmIG5vdCByZXZpc2lvbjoKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL2NoZWNrb3V0L3NjbS9zY20ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3NjbS5weQkocmV2aXNpb24gMTQzNjI2KQorKysg
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3NjbS5weQkod29ya2lu
ZyBjb3B5KQpAQCAtMTY5LDYgKzE2OSw5IEBAIGNsYXNzIFNDTToKICAgICBkZWYgc3ZuX3Jldmlz
aW9uKHNlbGYsIHBhdGgpOgogICAgICAgICBzZWxmLl9zdWJjbGFzc19tdXN0X2ltcGxlbWVudCgp
CiAKKyAgICBkZWYgdGltZXN0YW1wX29mX2xhdGVzdF9jb21taXQoc2VsZiwgcGF0aCk6CisgICAg
ICAgIHNlbGYuX3N1YmNsYXNzX211c3RfaW1wbGVtZW50KCkKKwogICAgIGRlZiBjcmVhdGVfcGF0
Y2goc2VsZiwgZ2l0X2NvbW1pdD1Ob25lLCBjaGFuZ2VkX2ZpbGVzPU5vbmUpOgogICAgICAgICBz
ZWxmLl9zdWJjbGFzc19tdXN0X2ltcGxlbWVudCgpCiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zY21fbW9jay5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc2NtX21vY2sucHkJKHJldmlz
aW9uIDE0MzYyNikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3Nj
bS9zY21fbW9jay5weQkod29ya2luZyBjb3B5KQpAQCAtODQsNiArODQsOSBAQCBjbGFzcyBNb2Nr
U0NNKG9iamVjdCk6CiAgICAgZGVmIHN2bl9yZXZpc2lvbihzZWxmLCBwYXRoKToKICAgICAgICAg
cmV0dXJuICc1Njc4JwogCisgICAgZGVmIHRpbWVzdGFtcF9vZl9sYXRlc3RfY29tbWl0KHNlbGYs
IHBhdGgpOgorICAgICAgICByZXR1cm4gJzIwMTMtMDItMDEgMDg6NDg6MDUgKzAwMDAnCisKICAg
ICBkZWYgY3JlYXRlX3BhdGNoKHNlbGYsIGdpdF9jb21taXQsIGNoYW5nZWRfZmlsZXM9Tm9uZSk6
CiAgICAgICAgIHJldHVybiAiUGF0Y2gxIgogCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi9jaGVja291dC9zY20vc2NtX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zY21fdW5pdHRlc3QucHkJKHJl
dmlzaW9uIDE0MzYyNikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0
L3NjbS9zY21fdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTE1NzcsMyArMTU3NywxNSBA
QCBNT0NLIHJ1bl9jb21tYW5kOiBbJ2dpdCcsICdsb2cnLCAnLTI1JywgCiAKICAgICBkZWYgdGVz
dF9wdXNoX2xvY2FsX2NvbW1pdHNfdG9fc2VydmVyX3dpdGhvdXRfdXNlcm5hbWVfYW5kX3dpdGhf
cGFzc3dvcmQoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF1dGhlbnRpY2F0aW9u
RXJyb3IsIHNlbGYubWFrZV9zY20oKS5wdXNoX2xvY2FsX2NvbW1pdHNfdG9fc2VydmVyLCB7J3Bh
c3N3b3JkJzogJ2JsYWgnfSkKKworICAgIGRlZiB0ZXN0X3RpbWVzdGFtcF9vZl9sYXRlc3RfY29t
bWl0KHNlbGYpOgorICAgICAgICBzY20gPSBzZWxmLm1ha2Vfc2NtKCkKKyAgICAgICAgc2NtLmZp
bmRfY2hlY2tvdXRfcm9vdCA9IGxhbWJkYSBwYXRoOiAnJworICAgICAgICBzY20uX3J1bl9naXQg
PSBsYW1iZGEgYXJnczogJ0RhdGU6IDIwMTMtMDItMDggMDg6MDU6NDkgKzAwMDAnCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoc2NtLnRpbWVzdGFtcF9vZl9sYXRlc3RfY29tbWl0KCdzb21lLXBh
dGgnKSwgJzIwMTMtMDItMDhUMDg6MDU6NDlaJykKKworICAgICAgICBzY20uX3J1bl9naXQgPSBs
YW1iZGEgYXJnczogJ0RhdGU6IDIwMTMtMDItMDggMDE6MDI6MDMgKzAxMzAnCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoc2NtLnRpbWVzdGFtcF9vZl9sYXRlc3RfY29tbWl0KCdzb21lLXBhdGgn
KSwgJzIwMTMtMDItMDdUMjM6MzI6MDNaJykKKworICAgICAgICBzY20uX3J1bl9naXQgPSBsYW1i
ZGEgYXJnczogJ0RhdGU6IDIwMTMtMDItMDggMDE6NTU6MjEgLTA4MDAnCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoc2NtLnRpbWVzdGFtcF9vZl9sYXRlc3RfY29tbWl0KCdzb21lLXBhdGgnKSwg
JzIwMTMtMDItMDhUMDk6NTU6MjFaJykKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29t
bW9uL2NoZWNrb3V0L3NjbS9zdm4ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3N2bi5weQkocmV2aXNpb24gMTQzNjI2KQorKysgVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3N2bi5weQkod29ya2luZyBj
b3B5KQpAQCAtMjQ2LDYgKzI0NiwxMiBAQCBjbGFzcyBTVk4oU0NNLCBTVk5SZXBvc2l0b3J5KToK
ICAgICBkZWYgc3ZuX3JldmlzaW9uKHNlbGYsIHBhdGgpOgogICAgICAgICByZXR1cm4gc2VsZi52
YWx1ZV9mcm9tX3N2bl9pbmZvKHBhdGgsICdSZXZpc2lvbicpCiAKKyAgICBkZWYgdGltZXN0YW1w
X29mX2xhdGVzdF9jb21taXQoc2VsZiwgcGF0aCk6CisgICAgICAgICMgV2UgdXNlIC0teG1sIHRv
IGdldCB0aW1lc3RhbXBzIGxpa2UgMjAxMy0wMi0wOFQwODoxODowNC45NjQ0MDlaCisgICAgICAg
IGluZm9fb3V0cHV0ID0gRXhlY3V0aXZlKCkucnVuX2NvbW1hbmQoW3NlbGYuZXhlY3V0YWJsZV9u
YW1lLCAnaW5mbycsICctLXhtbCddLCBjd2Q9cGF0aCkucnN0cmlwKCkKKyAgICAgICAgbWF0Y2gg
PSByZS5zZWFyY2gociJePGRhdGU+KD9QPHZhbHVlPi4rKTwvZGF0ZT4kIiwgaW5mb19vdXRwdXQs
IHJlLk1VTFRJTElORSkKKyAgICAgICAgcmV0dXJuIG1hdGNoLmdyb3VwKCd2YWx1ZScpCisKICAg
ICAjIEZJWE1FOiBUaGlzIG1ldGhvZCBzaG91bGQgYmUgb24gQ2hlY2tvdXQuCiAgICAgZGVmIGNy
ZWF0ZV9wYXRjaChzZWxmLCBnaXRfY29tbWl0PU5vbmUsIGNoYW5nZWRfZmlsZXM9Tm9uZSk6CiAg
ICAgICAgICIiIlJldHVybnMgYSBieXRlIGFycmF5IChzdHIoKSkgcmVwcmVzZW50aW5nIHRoZSBw
YXRjaCBmaWxlLgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5
b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvci5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3Vs
dHNfZ2VuZXJhdG9yLnB5CShyZXZpc2lvbiAxNDM2MjYpCisrKyBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5
CSh3b3JraW5nIGNvcHkpCkBAIC01MjYsMTEgKzUyNiwxMiBAQCBjbGFzcyBKU09OUmVzdWx0c0dl
bmVyYXRvckJhc2Uob2JqZWN0KToKICAgICAgICAgZm9yIChuYW1lLCBwYXRoKSBpbiBzZWxmLl9z
dm5fcmVwb3NpdG9yaWVzOgogICAgICAgICAgICAgIyBOb3RlOiBmb3IgSlNPTiBmaWxlJ3MgYmFj
a3dhcmQtY29tcGF0aWJpbGl0eSB3ZSB1c2UgJ2Nocm9tZScgcmF0aGVyCiAgICAgICAgICAgICAj
IHRoYW4gJ2Nocm9taXVtJyBoZXJlLgotICAgICAgICAgICAgaWYgbmFtZSA9PSAnY2hyb21pdW0n
OgotICAgICAgICAgICAgICAgIG5hbWUgPSAnY2hyb21lJworICAgICAgICAgICAgbG93ZXJjYXNl
X25hbWUgPSBuYW1lLmxvd2VyKCkKKyAgICAgICAgICAgIGlmIGxvd2VyY2FzZV9uYW1lID09ICdj
aHJvbWl1bSc6CisgICAgICAgICAgICAgICAgbG93ZXJjYXNlX25hbWUgPSAnY2hyb21lJwogICAg
ICAgICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1faW50b19yYXdfbGlzdChyZXN1bHRzX2Zvcl9idWls
ZGVyLAogICAgICAgICAgICAgICAgIHNlbGYuX2dldF9zdm5fcmV2aXNpb24ocGF0aCksCi0gICAg
ICAgICAgICAgICAgbmFtZSArICdSZXZpc2lvbicpCisgICAgICAgICAgICAgICAgbG93ZXJjYXNl
X25hbWUgKyAnUmV2aXNpb24nKQogCiAgICAgICAgIHNlbGYuX2luc2VydF9pdGVtX2ludG9fcmF3
X2xpc3QocmVzdWx0c19mb3JfYnVpbGRlciwKICAgICAgICAgICAgIGludCh0aW1lLnRpbWUoKSks
CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9i
YXNlLnB5CShyZXZpc2lvbiAxNDM2MjYpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L2Jhc2UucHkJKHdvcmtpbmcgY29weSkKQEAgLTEwOTcsMTEgKzEwOTcsMTEg
QEAgY2xhc3MgUG9ydChvYmplY3QpOgogCiAgICAgZGVmIHJlcG9zaXRvcnlfcGF0aHMoc2VsZik6
CiAgICAgICAgICIiIlJldHVybnMgYSBsaXN0IG9mIChyZXBvc2l0b3J5X25hbWUsIHJlcG9zaXRv
cnlfcGF0aCkgdHVwbGVzIG9mIGl0cyBkZXBlbmRpbmcgY29kZSBiYXNlLgotICAgICAgICBCeSBk
ZWZhdWx0IGl0IHJldHVybnMgYSBsaXN0IHRoYXQgb25seSBjb250YWlucyBhICgnd2Via2l0Jywg
PHdlYmtpdFJlcG9zc2l0b3J5UGF0aD4pIHR1cGxlLiIiIgorICAgICAgICBCeSBkZWZhdWx0IGl0
IHJldHVybnMgYSBsaXN0IHRoYXQgb25seSBjb250YWlucyBhICgnV2ViS2l0JywgPHdlYmtpdFJl
cG9zaXRvcnlQYXRoPikgdHVwbGUuIiIiCiAKLSAgICAgICAgIyBXZSB1c2UgTGF5b3V0VGVzdCBk
aXJlY3RvcnkgaGVyZSBiZWNhdXNlIHdlYmtpdF9iYXNlIGlzbid0IGEgcGFydCB3ZWJraXQgcmVw
b3NpdG9yeSBpbiBDaHJvbWl1bSBwb3J0CisgICAgICAgICMgV2UgdXNlIExheW91dFRlc3QgZGly
ZWN0b3J5IGhlcmUgYmVjYXVzZSB3ZWJraXRfYmFzZSBpc24ndCBhIHBhcnQgb2YgV2ViS2l0IHJl
cG9zaXRvcnkgaW4gQ2hyb21pdW0gcG9ydAogICAgICAgICAjIHdoZXJlIHR1cm5rIGlzbid0IGNo
ZWNrZWQgb3V0IGFzIGEgd2hvbGUuCi0gICAgICAgIHJldHVybiBbKCd3ZWJraXQnLCBzZWxmLmxh
eW91dF90ZXN0c19kaXIoKSldCisgICAgICAgIHJldHVybiBbKCdXZWJLaXQnLCBzZWxmLmxheW91
dF90ZXN0c19kaXIoKSldCiAKICAgICBfV0RJRkZfREVMID0gJyMjV0RJRkZfREVMIyMnCiAgICAg
X1dESUZGX0FERCA9ICcjI1dESUZGX0FERCMjJwpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtLnB5CShyZXZpc2lvbiAxNDM2
MjYpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVt
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zNjQsNyArMzY0LDcgQEAgY2xhc3MgQ2hyb21pdW1Qb3J0
KFBvcnQpOgogCiAgICAgZGVmIHJlcG9zaXRvcnlfcGF0aHMoc2VsZik6CiAgICAgICAgIHJlcG9z
ID0gc3VwZXIoQ2hyb21pdW1Qb3J0LCBzZWxmKS5yZXBvc2l0b3J5X3BhdGhzKCkKLSAgICAgICAg
cmVwb3MuYXBwZW5kKCgnY2hyb21pdW0nLCBzZWxmLnBhdGhfZnJvbV9jaHJvbWl1bV9iYXNlKCdi
dWlsZCcpKSkKKyAgICAgICAgcmVwb3MuYXBwZW5kKCgnQ2hyb21pdW0nLCBzZWxmLnBhdGhfZnJv
bV9jaHJvbWl1bV9iYXNlKCdidWlsZCcpKSkKICAgICAgICAgcmV0dXJuIHJlcG9zCiAKICAgICBk
ZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJf
dGhhbik6CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3Bl
cmZ0ZXN0c3J1bm5lci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Bl
cmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0c3J1bm5lci5weQkocmV2aXNpb24gMTQzNjI2KQorKysg
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdHNydW5uZXIu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAgaW1wb3J0IGpzb24KIGltcG9ydCBs
b2dnaW5nCiBpbXBvcnQgb3B0cGFyc2UKIGltcG9ydCB0aW1lCitpbXBvcnQgZGF0ZXRpbWUKIAog
ZnJvbSB3ZWJraXRweS5jb21tb24gaW1wb3J0IGZpbmRfZmlsZXMKIGZyb20gd2Via2l0cHkuY29t
bW9uLmNoZWNrb3V0LnNjbS5kZXRlY3Rpb24gaW1wb3J0IFNDTURldGVjdG9yCkBAIC02Nyw2ICs2
OCw3IEBAIGNsYXNzIFBlcmZUZXN0c1J1bm5lcihvYmplY3QpOgogICAgICAgICBzZWxmLl9iYXNl
X3BhdGggPSBzZWxmLl9wb3J0LnBlcmZfdGVzdHNfZGlyKCkKICAgICAgICAgc2VsZi5fcmVzdWx0
cyA9IHt9CiAgICAgICAgIHNlbGYuX3RpbWVzdGFtcCA9IHRpbWUudGltZSgpCisgICAgICAgIHNl
bGYuX3V0Y190aW1lc3RhbXAgPSBkYXRldGltZS5kYXRldGltZS51dGNub3coKQogICAgICAgICBz
ZWxmLl9uZWVkc19odHRwID0gTm9uZQogICAgICAgICBzZWxmLl9oYXNfaHR0cF9sb2NrID0gRmFs
c2UKIApAQCAtMTI2LDggKzEyOCw2IEBAIGNsYXNzIFBlcmZUZXN0c1J1bm5lcihvYmplY3QpOgog
ICAgICAgICByZXR1cm4gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKG9wdGlvbl9saXN0PShwZXJmX29w
dGlvbl9saXN0KSkucGFyc2VfYXJncyhhcmdzKQogCiAgICAgZGVmIF9jb2xsZWN0X3Rlc3RzKHNl
bGYpOgotICAgICAgICAiIiJSZXR1cm4gdGhlIGxpc3Qgb2YgdGVzdHMgZm91bmQuIiIiCi0KICAg
ICAgICAgdGVzdF9leHRlbnNpb25zID0gWycuaHRtbCcsICcuc3ZnJ10KICAgICAgICAgaWYgc2Vs
Zi5fb3B0aW9ucy5yZXBsYXk6CiAgICAgICAgICAgICB0ZXN0X2V4dGVuc2lvbnMuYXBwZW5kKCcu
cmVwbGF5JykKQEAgLTIwOCwyNCArMjA4LDMwIEBAIGNsYXNzIFBlcmZUZXN0c1J1bm5lcihvYmpl
Y3QpOgogICAgIGRlZiBfZ2VuZXJhdGVfYW5kX3Nob3dfcmVzdWx0cyhzZWxmKToKICAgICAgICAg
b3B0aW9ucyA9IHNlbGYuX29wdGlvbnMKICAgICAgICAgb3V0cHV0X2pzb25fcGF0aCA9IHNlbGYu
X291dHB1dF9qc29uX3BhdGgoKQotICAgICAgICBvdXRwdXQgPSBzZWxmLl9nZW5lcmF0ZV9yZXN1
bHRzX2RpY3Qoc2VsZi5fdGltZXN0YW1wLCBvcHRpb25zLmRlc2NyaXB0aW9uLCBvcHRpb25zLnBs
YXRmb3JtLCBvcHRpb25zLmJ1aWxkZXJfbmFtZSwgb3B0aW9ucy5idWlsZF9udW1iZXIpCisgICAg
ICAgIG91dHB1dCwgcGVyZl93ZWJraXRfb3V0cHV0ID0gc2VsZi5fZ2VuZXJhdGVfcmVzdWx0c19k
aWN0KHNlbGYuX3RpbWVzdGFtcCwgb3B0aW9ucy5kZXNjcmlwdGlvbiwgb3B0aW9ucy5wbGF0Zm9y
bSwgb3B0aW9ucy5idWlsZGVyX25hbWUsIG9wdGlvbnMuYnVpbGRfbnVtYmVyKQogCiAgICAgICAg
IGlmIG9wdGlvbnMuc2xhdmVfY29uZmlnX2pzb25fcGF0aDoKLSAgICAgICAgICAgIG91dHB1dCA9
IHNlbGYuX21lcmdlX3NsYXZlX2NvbmZpZ19qc29uKG9wdGlvbnMuc2xhdmVfY29uZmlnX2pzb25f
cGF0aCwgb3V0cHV0KQorICAgICAgICAgICAgb3V0cHV0LCBwZXJmX3dlYmtpdF9vdXRwdXQgPSBz
ZWxmLl9tZXJnZV9zbGF2ZV9jb25maWdfanNvbihvcHRpb25zLnNsYXZlX2NvbmZpZ19qc29uX3Bh
dGgsIG91dHB1dCwgcGVyZl93ZWJraXRfb3V0cHV0KQogICAgICAgICAgICAgaWYgbm90IG91dHB1
dDoKICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5FWElUX0NPREVfQkFEX1NPVVJDRV9KU09O
CiAKICAgICAgICAgb3V0cHV0ID0gc2VsZi5fbWVyZ2Vfb3V0cHV0c19pZl9uZWVkZWQob3V0cHV0
X2pzb25fcGF0aCwgb3V0cHV0KQogICAgICAgICBpZiBub3Qgb3V0cHV0OgogICAgICAgICAgICAg
cmV0dXJuIHNlbGYuRVhJVF9DT0RFX0JBRF9NRVJHRQorICAgICAgICBwZXJmX3dlYmtpdF9vdXRw
dXQgPSBbcGVyZl93ZWJraXRfb3V0cHV0XQogCiAgICAgICAgIHJlc3VsdHNfcGFnZV9wYXRoID0g
c2VsZi5faG9zdC5maWxlc3lzdGVtLnNwbGl0ZXh0KG91dHB1dF9qc29uX3BhdGgpWzBdICsgJy5o
dG1sJwotICAgICAgICBzZWxmLl9nZW5lcmF0ZV9vdXRwdXRfZmlsZXMob3V0cHV0X2pzb25fcGF0
aCwgcmVzdWx0c19wYWdlX3BhdGgsIG91dHB1dCkKKyAgICAgICAgcGVyZl93ZWJraXRfanNvbl9w
YXRoID0gc2VsZi5faG9zdC5maWxlc3lzdGVtLnNwbGl0ZXh0KG91dHB1dF9qc29uX3BhdGgpWzBd
ICsgJy1wZXJmLXdlYmtpdC5qc29uJyBpZiBvcHRpb25zLnRlc3RfcmVzdWx0c19zZXJ2ZXIgZWxz
ZSBOb25lCisgICAgICAgIHNlbGYuX2dlbmVyYXRlX291dHB1dF9maWxlcyhvdXRwdXRfanNvbl9w
YXRoLCBwZXJmX3dlYmtpdF9qc29uX3BhdGgsIHJlc3VsdHNfcGFnZV9wYXRoLCBvdXRwdXQsIHBl
cmZfd2Via2l0X291dHB1dCkKIAogICAgICAgICBpZiBvcHRpb25zLnRlc3RfcmVzdWx0c19zZXJ2
ZXI6CiAgICAgICAgICAgICBpZiBub3Qgc2VsZi5fdXBsb2FkX2pzb24ob3B0aW9ucy50ZXN0X3Jl
c3VsdHNfc2VydmVyLCBvdXRwdXRfanNvbl9wYXRoKToKICAgICAgICAgICAgICAgICByZXR1cm4g
c2VsZi5FWElUX0NPREVfRkFJTEVEX1VQTE9BRElORwogCisgICAgICAgICAgICAjIEZJWE1FOiBS
ZW1vdmUgdGhpcyBjb2RlIG9uY2Ugd2UndmUgbWFkZSB0cmFuc2l0aW9uIHRvIHVzZSBwZXJmLndl
YmtpdC5vcmcKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl91cGxvYWRfanNvbigncGVyZi53ZWJr
aXQub3JnJywgcGVyZl93ZWJraXRfanNvbl9wYXRoLCAiL2FwaS9yZXBvcnQiKToKKyAgICAgICAg
ICAgICAgICByZXR1cm4gc2VsZi5FWElUX0NPREVfRkFJTEVEX1VQTE9BRElORworCiAgICAgICAg
IGlmIG9wdGlvbnMuc2hvd19yZXN1bHRzOgogICAgICAgICAgICAgc2VsZi5fcG9ydC5zaG93X3Jl
c3VsdHNfaHRtbF9maWxlKHJlc3VsdHNfcGFnZV9wYXRoKQogCkBAIC0yMzMsOSArMjM5LDEzIEBA
IGNsYXNzIFBlcmZUZXN0c1J1bm5lcihvYmplY3QpOgogICAgICAgICBjb250ZW50cyA9IHsncmVz
dWx0cyc6IHNlbGYuX3Jlc3VsdHN9CiAgICAgICAgIGlmIGRlc2NyaXB0aW9uOgogICAgICAgICAg
ICAgY29udGVudHNbJ2Rlc2NyaXB0aW9uJ10gPSBkZXNjcmlwdGlvbgorCisgICAgICAgIHJldmlz
aW9uc19mb3JfcGVyZl93ZWJraXQgPSB7fQogICAgICAgICBmb3IgKG5hbWUsIHBhdGgpIGluIHNl
bGYuX3BvcnQucmVwb3NpdG9yeV9wYXRocygpOgogICAgICAgICAgICAgc2NtID0gU0NNRGV0ZWN0
b3Ioc2VsZi5faG9zdC5maWxlc3lzdGVtLCBzZWxmLl9ob3N0LmV4ZWN1dGl2ZSkuZGV0ZWN0X3Nj
bV9zeXN0ZW0ocGF0aCkgb3Igc2VsZi5faG9zdC5zY20oKQotICAgICAgICAgICAgY29udGVudHNb
bmFtZSArICctcmV2aXNpb24nXSA9IHNjbS5zdm5fcmV2aXNpb24ocGF0aCkKKyAgICAgICAgICAg
IHJldmlzaW9uID0gc2NtLnN2bl9yZXZpc2lvbihwYXRoKQorICAgICAgICAgICAgY29udGVudHNb
bmFtZS5sb3dlcigpICsgJy1yZXZpc2lvbiddID0gcmV2aXNpb24KKyAgICAgICAgICAgIHJldmlz
aW9uc19mb3JfcGVyZl93ZWJraXRbbmFtZV0gPSB7J3JldmlzaW9uJzogc3RyKHJldmlzaW9uKSwg
J3RpbWVzdGFtcCc6IHNjbS50aW1lc3RhbXBfb2ZfbGF0ZXN0X2NvbW1pdChwYXRoKX0KIAogICAg
ICAgICAjIEZJWE1FOiBBZGQgLS1icmFuY2ggb3IgYXV0by1kZXRlY3QgdGhlIGJyYW5jaCB3ZSdy
ZSBpbgogICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiB7J3RpbWVzdGFtcCc6IGludCh0aW1lc3Rh
bXApLCAnYnJhbmNoJzogc2VsZi5fZGVmYXVsdF9icmFuY2gsICdwbGF0Zm9ybSc6IHBsYXRmb3Jt
LApAQCAtMjQzLDIwICsyNTMsNjQgQEAgY2xhc3MgUGVyZlRlc3RzUnVubmVyKG9iamVjdCk6CiAg
ICAgICAgICAgICBpZiB2YWx1ZToKICAgICAgICAgICAgICAgICBjb250ZW50c1trZXldID0gdmFs
dWUKIAotICAgICAgICByZXR1cm4gY29udGVudHMKKyAgICAgICAgY29udGVudHNfZm9yX3BlcmZf
d2Via2l0ID0geworICAgICAgICAgICAgJ2J1aWxkZXJOYW1lJzogYnVpbGRlcl9uYW1lLAorICAg
ICAgICAgICAgJ2J1aWxkTnVtYmVyJzogc3RyKGJ1aWxkX251bWJlciksCisgICAgICAgICAgICAn
YnVpbGRUaW1lJzogc2VsZi5fZGF0ZXRpbWVfaW5fRVM1X2NvbXBhdGlibGVfaXNvX2Zvcm1hdChz
ZWxmLl91dGNfdGltZXN0YW1wKSwKKyAgICAgICAgICAgICdwbGF0Zm9ybSc6IHBsYXRmb3JtLAor
ICAgICAgICAgICAgJ3JldmlzaW9ucyc6IHJldmlzaW9uc19mb3JfcGVyZl93ZWJraXQsCisgICAg
ICAgICAgICAndGVzdHMnOiB7fX0KKworICAgICAgICAjIEZJWE1FOiBNYWtlIHRoaXMgZnVuY3Rp
b24gc2hvcnRlciBvbmNlIHdlJ3ZlIHRyYW5zaXRpb25lZCB0byB1c2UgcGVyZi53ZWJraXQub3Jn
LgorICAgICAgICBmb3IgbWV0cmljX2Z1bGxfbmFtZSwgcmVzdWx0IGluIHNlbGYuX3Jlc3VsdHMu
aXRlcml0ZW1zKCk6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShyZXN1bHQsIGRpY3Qp
OiAgIyBXZSBjYW4ndCByZXBvcnRzIHJlc3VsdHMgd2l0aG91dCBpbmRpdmlzdWFsIG1lYXN1cmVt
ZW50cy4KKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBhc3NlcnQgbWV0
cmljX2Z1bGxfbmFtZS5jb3VudCgnOicpIDw9IDEKKyAgICAgICAgICAgIHRlc3RfZnVsbF9uYW1l
LCBfLCBtZXRyaWMgPSBtZXRyaWNfZnVsbF9uYW1lLnBhcnRpdGlvbignOicpCisgICAgICAgICAg
ICBpZiBub3QgbWV0cmljOgorICAgICAgICAgICAgICAgIG1ldHJpYyA9IHsnZnBzJzogJ0ZyYW1l
UmF0ZScsICdydW5zL3MnOiAnUnVucycsICdtcyc6ICdUaW1lJ31bcmVzdWx0Wyd1bml0J11dCisK
KyAgICAgICAgICAgIHRlc3RzID0gY29udGVudHNfZm9yX3BlcmZfd2Via2l0Wyd0ZXN0cyddCisg
ICAgICAgICAgICBwYXRoID0gdGVzdF9mdWxsX25hbWUuc3BsaXQoJy8nKQorICAgICAgICAgICAg
Zm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHBhdGgpKToKKyAgICAgICAgICAgICAgICAjIEZJWE1FOiBX
ZSBzaG91bGRuJ3QgYXNzdW1lIEhUTUwgZXh0ZW5zaW9uLgorICAgICAgICAgICAgICAgIGlzX2xh
c3RfdG9rZW4gPSBpICsgMSA9PSBsZW4ocGF0aCkKKyAgICAgICAgICAgICAgICB1cmwgPSAnaHR0
cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5rL1BlcmZvcm1hbmNlVGVzdHMvJyArICcv
Jy5qb2luKHBhdGhbMDppICsgMV0pCisgICAgICAgICAgICAgICAgaWYgaXNfbGFzdF90b2tlbjoK
KyAgICAgICAgICAgICAgICAgICAgdXJsICs9ICcuaHRtbCcKKworICAgICAgICAgICAgICAgIHRl
c3RzLnNldGRlZmF1bHQocGF0aFtpXSwgeyd1cmwnOiB1cmx9KQorICAgICAgICAgICAgICAgIGN1
cnJlbnRfdGVzdCA9IHRlc3RzW3BhdGhbaV1dCisgICAgICAgICAgICAgICAgaWYgaXNfbGFzdF90
b2tlbjoKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudF90ZXN0LnNldGRlZmF1bHQoJ21ldHJp
Y3MnLCB7fSkKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IG1ldHJpYyBub3QgaW4gY3VycmVu
dF90ZXN0WydtZXRyaWNzJ10KKyAgICAgICAgICAgICAgICAgICAgY3VycmVudF90ZXN0WydtZXRy
aWNzJ11bbWV0cmljXSA9IHsnY3VycmVudCc6IHJlc3VsdFsndmFsdWVzJ119CisgICAgICAgICAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudF90ZXN0LnNldGRlZmF1bHQo
J3Rlc3RzJywge30pCisgICAgICAgICAgICAgICAgICAgIHRlc3RzID0gY3VycmVudF90ZXN0Wyd0
ZXN0cyddCiAKLSAgICBkZWYgX21lcmdlX3NsYXZlX2NvbmZpZ19qc29uKHNlbGYsIHNsYXZlX2Nv
bmZpZ19qc29uX3BhdGgsIG91dHB1dCk6CisgICAgICAgIHJldHVybiBjb250ZW50cywgY29udGVu
dHNfZm9yX3BlcmZfd2Via2l0CisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9kYXRldGlt
ZV9pbl9FUzVfY29tcGF0aWJsZV9pc29fZm9ybWF0KGRhdGV0aW1lKToKKyAgICAgICAgcmV0dXJu
IGRhdGV0aW1lLnN0cmZ0aW1lKCclWS0lbS0lZFQlSDolTTolUy4lZicpCisKKyAgICBkZWYgX21l
cmdlX3NsYXZlX2NvbmZpZ19qc29uKHNlbGYsIHNsYXZlX2NvbmZpZ19qc29uX3BhdGgsIGNvbnRl
bnRzLCBjb250ZW50c19mb3JfcGVyZl93ZWJraXQpOgogICAgICAgICBpZiBub3Qgc2VsZi5faG9z
dC5maWxlc3lzdGVtLmlzZmlsZShzbGF2ZV9jb25maWdfanNvbl9wYXRoKToKICAgICAgICAgICAg
IF9sb2cuZXJyb3IoIk1pc3Npbmcgc2xhdmUgY29uZmlndXJhdGlvbiBKU09OIGZpbGU6ICVzIiAl
IHNsYXZlX2NvbmZpZ19qc29uX3BhdGgpCi0gICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAg
ICAgICAgcmV0dXJuIE5vbmUsIE5vbmUKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzbGF2
ZV9jb25maWdfanNvbiA9IHNlbGYuX2hvc3QuZmlsZXN5c3RlbS5vcGVuX3RleHRfZmlsZV9mb3Jf
cmVhZGluZyhzbGF2ZV9jb25maWdfanNvbl9wYXRoKQogICAgICAgICAgICAgc2xhdmVfY29uZmln
ID0ganNvbi5sb2FkKHNsYXZlX2NvbmZpZ19qc29uKQotICAgICAgICAgICAgcmV0dXJuIGRpY3Qo
c2xhdmVfY29uZmlnLml0ZW1zKCkgKyBvdXRwdXQuaXRlbXMoKSkKKyAgICAgICAgICAgIGNvbnRl
bnRzID0gZGljdChzbGF2ZV9jb25maWcuaXRlbXMoKSArIGNvbnRlbnRzLml0ZW1zKCkpCisgICAg
ICAgICAgICBmb3Iga2V5IGluIHNsYXZlX2NvbmZpZzoKKyAgICAgICAgICAgICAgICBjb250ZW50
c19mb3JfcGVyZl93ZWJraXRbJ2J1aWxkZXInICsga2V5LmNhcGl0YWxpemUoKV0gPSBzbGF2ZV9j
b25maWdba2V5XQorICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnRzLCBjb250ZW50c19mb3JfcGVy
Zl93ZWJraXQKICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZXJyb3I6CiAgICAgICAgICAgICBf
bG9nLmVycm9yKCJGYWlsZWQgdG8gbWVyZ2Ugc2xhdmUgY29uZmlndXJhdGlvbiBKU09OIGZpbGUg
JXM6ICVzIiAlIChzbGF2ZV9jb25maWdfanNvbl9wYXRoLCBlcnJvcikpCi0gICAgICAgIHJldHVy
biBOb25lCisgICAgICAgIHJldHVybiBOb25lLCBOb25lCiAKICAgICBkZWYgX21lcmdlX291dHB1
dHNfaWZfbmVlZGVkKHNlbGYsIG91dHB1dF9qc29uX3BhdGgsIG91dHB1dCk6CiAgICAgICAgIGlm
IHNlbGYuX29wdGlvbnMucmVzZXRfcmVzdWx0cyBvciBub3Qgc2VsZi5faG9zdC5maWxlc3lzdGVt
LmlzZmlsZShvdXRwdXRfanNvbl9wYXRoKToKQEAgLTI2OCwxMiArMzIyLDE1IEBAIGNsYXNzIFBl
cmZUZXN0c1J1bm5lcihvYmplY3QpOgogICAgICAgICAgICAgX2xvZy5lcnJvcigiRmFpbGVkIHRv
IG1lcmdlIG91dHB1dCBKU09OIGZpbGUgJXM6ICVzIiAlIChvdXRwdXRfanNvbl9wYXRoLCBlcnJv
cikpCiAgICAgICAgIHJldHVybiBOb25lCiAKLSAgICBkZWYgX2dlbmVyYXRlX291dHB1dF9maWxl
cyhzZWxmLCBvdXRwdXRfanNvbl9wYXRoLCByZXN1bHRzX3BhZ2VfcGF0aCwgb3V0cHV0KToKKyAg
ICBkZWYgX2dlbmVyYXRlX291dHB1dF9maWxlcyhzZWxmLCBvdXRwdXRfanNvbl9wYXRoLCBwZXJm
X3dlYmtpdF9qc29uX3BhdGgsIHJlc3VsdHNfcGFnZV9wYXRoLCBvdXRwdXQsIHBlcmZfd2Via2l0
X291dHB1dCk6CiAgICAgICAgIGZpbGVzeXN0ZW0gPSBzZWxmLl9ob3N0LmZpbGVzeXN0ZW0KIAog
ICAgICAgICBqc29uX291dHB1dCA9IGpzb24uZHVtcHMob3V0cHV0KQogICAgICAgICBmaWxlc3lz
dGVtLndyaXRlX3RleHRfZmlsZShvdXRwdXRfanNvbl9wYXRoLCBqc29uX291dHB1dCkKIAorICAg
ICAgICBpZiBwZXJmX3dlYmtpdF9qc29uX3BhdGg6CisgICAgICAgICAgICBmaWxlc3lzdGVtLndy
aXRlX3RleHRfZmlsZShwZXJmX3dlYmtpdF9qc29uX3BhdGgsIGpzb24uZHVtcHMocGVyZl93ZWJr
aXRfb3V0cHV0KSkKKwogICAgICAgICBpZiByZXN1bHRzX3BhZ2VfcGF0aDoKICAgICAgICAgICAg
IHRlbXBsYXRlX3BhdGggPSBmaWxlc3lzdGVtLmpvaW4oc2VsZi5fcG9ydC5wZXJmX3Rlc3RzX2Rp
cigpLCAncmVzb3VyY2VzL3Jlc3VsdHMtdGVtcGxhdGUuaHRtbCcpCiAgICAgICAgICAgICB0ZW1w
bGF0ZSA9IGZpbGVzeXN0ZW0ucmVhZF90ZXh0X2ZpbGUodGVtcGxhdGVfcGF0aCkKQEAgLTI4NCwy
MiArMzQxLDMwIEBAIGNsYXNzIFBlcmZUZXN0c1J1bm5lcihvYmplY3QpOgogCiAgICAgICAgICAg
ICBmaWxlc3lzdGVtLndyaXRlX3RleHRfZmlsZShyZXN1bHRzX3BhZ2VfcGF0aCwgcmVzdWx0c19w
YWdlKQogCi0gICAgZGVmIF91cGxvYWRfanNvbihzZWxmLCB0ZXN0X3Jlc3VsdHNfc2VydmVyLCBq
c29uX3BhdGgsIGZpbGVfdXBsb2FkZXI9RmlsZVVwbG9hZGVyKToKLSAgICAgICAgdXBsb2FkZXIg
PSBmaWxlX3VwbG9hZGVyKCJodHRwczovLyVzL2FwaS90ZXN0L3JlcG9ydCIgJSB0ZXN0X3Jlc3Vs
dHNfc2VydmVyLCAxMjApCisgICAgZGVmIF91cGxvYWRfanNvbihzZWxmLCB0ZXN0X3Jlc3VsdHNf
c2VydmVyLCBqc29uX3BhdGgsIGhvc3RfcGF0aD0iL2FwaS90ZXN0L3JlcG9ydCIsIGZpbGVfdXBs
b2FkZXI9RmlsZVVwbG9hZGVyKToKKyAgICAgICAgdXJsID0gImh0dHBzOi8vJXMlcyIgJSAodGVz
dF9yZXN1bHRzX3NlcnZlciwgaG9zdF9wYXRoKQorICAgICAgICB1cGxvYWRlciA9IGZpbGVfdXBs
b2FkZXIodXJsLCAxMjApCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHJlc3BvbnNlID0gdXBs
b2FkZXIudXBsb2FkX3NpbmdsZV90ZXh0X2ZpbGUoc2VsZi5faG9zdC5maWxlc3lzdGVtLCAnYXBw
bGljYXRpb24vanNvbicsIGpzb25fcGF0aCkKICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZXJy
b3I6Ci0gICAgICAgICAgICBfbG9nLmVycm9yKCJGYWlsZWQgdG8gdXBsb2FkIEpTT04gZmlsZSBp
biAxMjBzOiAlcyIgJSBlcnJvcikKKyAgICAgICAgICAgIF9sb2cuZXJyb3IoIkZhaWxlZCB0byB1
cGxvYWQgSlNPTiBmaWxlIHRvICVzIGluIDEyMHM6ICVzIiAlICh1cmwsIGVycm9yKSkKICAgICAg
ICAgICAgIHJldHVybiBGYWxzZQogCiAgICAgICAgIHJlc3BvbnNlX2JvZHkgPSBbbGluZS5zdHJp
cCgnXG4nKSBmb3IgbGluZSBpbiByZXNwb25zZV0KICAgICAgICAgaWYgcmVzcG9uc2VfYm9keSAh
PSBbJ09LJ106Ci0gICAgICAgICAgICBfbG9nLmVycm9yKCJVcGxvYWRlZCBKU09OIGJ1dCBnb3Qg
YSBiYWQgcmVzcG9uc2U6IikKLSAgICAgICAgICAgIGZvciBsaW5lIGluIHJlc3BvbnNlX2JvZHk6
Ci0gICAgICAgICAgICAgICAgX2xvZy5lcnJvcihsaW5lKQotICAgICAgICAgICAgcmV0dXJuIEZh
bHNlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcGFyc2VkX3Jlc3BvbnNlID0g
anNvbi5sb2FkcygnXG4nLmpvaW4ocmVzcG9uc2VfYm9keSkpCisgICAgICAgICAgICBleGNlcHQ6
CisgICAgICAgICAgICAgICAgX2xvZy5lcnJvcigiVXBsb2FkZWQgSlNPTiB0byAlcyBidXQgZ290
IGEgYmFkIHJlc3BvbnNlOiIgJSB1cmwpCisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gcmVz
cG9uc2VfYm9keToKKyAgICAgICAgICAgICAgICAgICAgX2xvZy5lcnJvcihsaW5lKQorICAgICAg
ICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgaWYgcGFyc2VkX3Jlc3BvbnNlLmdl
dCgnc3RhdHVzJykgIT0gJ09LJzoKKyAgICAgICAgICAgICAgICBfbG9nLmVycm9yKCJVcGxvYWRl
ZCBKU09OIHRvICVzIGJ1dCBnb3QgYW4gZXJyb3I6IiAlIHVybCkKKyAgICAgICAgICAgICAgICBf
bG9nLmVycm9yKGpzb24uZHVtcHMocGFyc2VkX3Jlc3BvbnNlLCBpbmRlbnQ9NCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIEZhbHNlCiAKLSAgICAgICAgX2xvZy5pbmZvKCJKU09OIGZpbGUgdXBs
b2FkZWQuIikKKyAgICAgICAgX2xvZy5pbmZvKCJKU09OIGZpbGUgdXBsb2FkZWQgdG8gJXMuIiAl
IHVybCkKICAgICAgICAgcmV0dXJuIFRydWUKIAogICAgIGRlZiBfcHJpbnRfc3RhdHVzKHNlbGYs
IHRlc3RzLCBleHBlY3RlZCwgdW5leHBlY3RlZCk6CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0c3J1bm5lcl9pbnRlZ3JhdGlvbnRlc3QucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9w
ZXJmdGVzdHNydW5uZXJfaW50ZWdyYXRpb250ZXN0LnB5CShyZXZpc2lvbiAxNDM2MjYpCisrKyBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0c3J1bm5lcl9p
bnRlZ3JhdGlvbnRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICIiIklu
dGVncmF0aW9uIHRlc3RzIGZvciBydW5fcGVyZl90ZXN0cy4iIiIKIAogaW1wb3J0IFN0cmluZ0lP
CitpbXBvcnQgZGF0ZXRpbWUKIGltcG9ydCBqc29uCiBpbXBvcnQgcmUKIGltcG9ydCB1bml0dGVz
dDIgYXMgdW5pdHRlc3QKQEAgLTMyMSwxNCArMzIyLDE3IEBAIGNsYXNzIE1haW5UZXN0KHVuaXR0
ZXN0LlRlc3RDYXNlKToKIAogICAgICAgICB1cGxvYWRlZCA9IFtGYWxzZV0KIAotICAgICAgICBk
ZWYgbW9ja191cGxvYWRfanNvbihob3N0bmFtZSwganNvbl9wYXRoKToKLSAgICAgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoaG9zdG5hbWUsICdzb21lLmhvc3QnKQotICAgICAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChqc29uX3BhdGgsICcvbW9jay1jaGVja291dC9vdXRwdXQuanNvbicpCisgICAg
ICAgIGRlZiBtb2NrX3VwbG9hZF9qc29uKGhvc3RuYW1lLCBqc29uX3BhdGgsIGhvc3RfcGF0aD1O
b25lKToKKyAgICAgICAgICAgICMgRklYTUU6IEdldCByaWQgb2YgdGhlIGhhcmQtY29kZWQgcGVy
Zi53ZWJraXQub3JnIG9uY2Ugd2UndmUgY29tcGxldGVkIHRoZSB0cmFuc2l0aW9uLgorICAgICAg
ICAgICAgc2VsZi5hc3NlcnRJbihob3N0bmFtZSwgWydzb21lLmhvc3QnLCAncGVyZi53ZWJraXQu
b3JnJ10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGpzb25fcGF0aCwgWycvbW9jay1jaGVj
a291dC9vdXRwdXQuanNvbicsICcvbW9jay1jaGVja291dC9vdXRwdXQtcGVyZi13ZWJraXQuanNv
biddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihob3N0X3BhdGgsIFtOb25lLCAnL2FwaS9y
ZXBvcnQnXSkKICAgICAgICAgICAgIHVwbG9hZGVkWzBdID0gdXBsb2FkX3N1Y2VlZHMKICAgICAg
ICAgICAgIHJldHVybiB1cGxvYWRfc3VjZWVkcwogCiAgICAgICAgIHJ1bm5lci5fdXBsb2FkX2pz
b24gPSBtb2NrX3VwbG9hZF9qc29uCiAgICAgICAgIHJ1bm5lci5fdGltZXN0YW1wID0gMTIzNDU2
Nzg5CisgICAgICAgIHJ1bm5lci5fdXRjX3RpbWVzdGFtcCA9IGRhdGV0aW1lLmRhdGV0aW1lKDIw
MTMsIDIsIDgsIDE1LCAxOSwgMzcsIDQ2MDAwMCkKICAgICAgICAgb3V0cHV0X2NhcHR1cmUgPSBP
dXRwdXRDYXB0dXJlKCkKICAgICAgICAgb3V0cHV0X2NhcHR1cmUuY2FwdHVyZV9vdXRwdXQoKQog
ICAgICAgICB0cnk6CkBAIC01MjEsNDEgKzUyNSwyOSBAQCBjbGFzcyBNYWluVGVzdCh1bml0dGVz
dC5UZXN0Q2FzZSk6CiAKICAgICAgICAgc2VsZi5fdGVzdF9ydW5fd2l0aF9qc29uX291dHB1dChy
dW5uZXIsIHBvcnQuaG9zdC5maWxlc3lzdGVtLCB1cGxvYWRfc3VjZWVkcz1GYWxzZSwgZXhwZWN0
ZWRfZXhpdF9jb2RlPVBlcmZUZXN0c1J1bm5lci5FWElUX0NPREVfRkFJTEVEX1VQTE9BRElORykK
IAotICAgIGRlZiB0ZXN0X3VwbG9hZF9qc29uKHNlbGYpOgotICAgICAgICBydW5uZXIsIHBvcnQg
PSBzZWxmLmNyZWF0ZV9ydW5uZXIoKQotICAgICAgICBwb3J0Lmhvc3QuZmlsZXN5c3RlbS5maWxl
c1snL21vY2stY2hlY2tvdXQvc29tZS5qc29uJ10gPSAnc29tZSBjb250ZW50JwotCi0gICAgICAg
IGNhbGxlZCA9IFtdCi0gICAgICAgIHVwbG9hZF9zaW5nbGVfdGV4dF9maWxlX3Rocm93cyA9IEZh
bHNlCi0gICAgICAgIHVwbG9hZF9zaW5nbGVfdGV4dF9maWxlX3JldHVybl92YWx1ZSA9IFN0cmlu
Z0lPLlN0cmluZ0lPKCdPSycpCi0KLSAgICAgICAgY2xhc3MgTW9ja0ZpbGVVcGxvYWRlcjoKLSAg
ICAgICAgICAgIGRlZiBfX2luaXRfXyhtb2NrLCB1cmwsIHRpbWVvdXQpOgotICAgICAgICAgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJsLCAnaHR0cHM6Ly9zb21lLmhvc3QvYXBpL3Rlc3QvcmVw
b3J0JykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZSh0aW1lb3V0
LCBpbnQpIGFuZCB0aW1lb3V0KQotICAgICAgICAgICAgICAgIGNhbGxlZC5hcHBlbmQoJ0ZpbGVV
cGxvYWRlcicpCi0KLSAgICAgICAgICAgIGRlZiB1cGxvYWRfc2luZ2xlX3RleHRfZmlsZShtb2Nr
LCBmaWxlc3lzdGVtLCBjb250ZW50X3R5cGUsIGZpbGVuYW1lKToKLSAgICAgICAgICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKGZpbGVzeXN0ZW0sIHBvcnQuaG9zdC5maWxlc3lzdGVtKQotICAgICAg
ICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29udGVudF90eXBlLCAnYXBwbGljYXRpb24vanNv
bicpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlbmFtZSwgJ3NvbWUuanNv
bicpCi0gICAgICAgICAgICAgICAgY2FsbGVkLmFwcGVuZCgndXBsb2FkX3NpbmdsZV90ZXh0X2Zp
bGUnKQotICAgICAgICAgICAgICAgIGlmIHVwbG9hZF9zaW5nbGVfdGV4dF9maWxlX3Rocm93czoK
LSAgICAgICAgICAgICAgICAgICAgcmFpc2UgIlNvbWUgZXhjZXB0aW9uIgotICAgICAgICAgICAg
ICAgIHJldHVybiB1cGxvYWRfc2luZ2xlX3RleHRfZmlsZV9yZXR1cm5fdmFsdWUKKyAgICBkZWYg
dGVzdF9ydW5fd2l0aF91cGxvYWRfanNvbl9zaG91bGRfZ2VuZXJhdGVfcGVyZl93ZWJraXRfanNv
bihzZWxmKToKKyAgICAgICAgcnVubmVyLCBwb3J0ID0gc2VsZi5jcmVhdGVfcnVubmVyX2FuZF9z
ZXR1cF9yZXN1bHRzX3RlbXBsYXRlKGFyZ3M9WyctLW91dHB1dC1qc29uLXBhdGg9L21vY2stY2hl
Y2tvdXQvb3V0cHV0Lmpzb24nLAorICAgICAgICAgICAgJy0tdGVzdC1yZXN1bHRzLXNlcnZlcics
ICdzb21lLmhvc3QnLCAnLS1wbGF0Zm9ybScsICdwbGF0Zm9ybTEnLCAnLS1idWlsZGVyLW5hbWUn
LCAnYnVpbGRlcjEnLCAnLS1idWlsZC1udW1iZXInLCAnMTIzJywKKyAgICAgICAgICAgICctLXNs
YXZlLWNvbmZpZy1qc29uLXBhdGg9L21vY2stY2hlY2tvdXQvc2xhdmUtY29uZmlnLmpzb24nXSkK
KyAgICAgICAgcG9ydC5ob3N0LmZpbGVzeXN0ZW0ud3JpdGVfdGV4dF9maWxlKCcvbW9jay1jaGVj
a291dC9zbGF2ZS1jb25maWcuanNvbicsICd7ImtleSI6ICJ2YWx1ZTEifScpCiAKLSAgICAgICAg
cnVubmVyLl91cGxvYWRfanNvbignc29tZS5ob3N0JywgJ3NvbWUuanNvbicsIE1vY2tGaWxlVXBs
b2FkZXIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FsbGVkLCBbJ0ZpbGVVcGxvYWRlcics
ICd1cGxvYWRfc2luZ2xlX3RleHRfZmlsZSddKQorICAgICAgICBzZWxmLl90ZXN0X3J1bl93aXRo
X2pzb25fb3V0cHV0KHJ1bm5lciwgcG9ydC5ob3N0LmZpbGVzeXN0ZW0sIHVwbG9hZF9zdWNlZWRz
PVRydWUpCisgICAgICAgIGdlbmVyYXRlZF9qc29uID0ganNvbi5sb2Fkcyhwb3J0Lmhvc3QuZmls
ZXN5c3RlbS5maWxlc1snL21vY2stY2hlY2tvdXQvb3V0cHV0LXBlcmYtd2Via2l0Lmpzb24nXSkK
KyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoZ2VuZXJhdGVkX2pzb24sIGxpc3Qp
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihnZW5lcmF0ZWRfanNvbiksIDEpCiAKLSAg
ICAgICAgb3V0cHV0ID0gT3V0cHV0Q2FwdHVyZSgpCi0gICAgICAgIG91dHB1dC5jYXB0dXJlX291
dHB1dCgpCi0gICAgICAgIHVwbG9hZF9zaW5nbGVfdGV4dF9maWxlX3JldHVybl92YWx1ZSA9IFN0
cmluZ0lPLlN0cmluZ0lPKCdTb21lIGVycm9yJykKLSAgICAgICAgcnVubmVyLl91cGxvYWRfanNv
bignc29tZS5ob3N0JywgJ3NvbWUuanNvbicsIE1vY2tGaWxlVXBsb2FkZXIpCi0gICAgICAgIF8s
IF8sIGxvZ3MgPSBvdXRwdXQucmVzdG9yZV9vdXRwdXQoKQotICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKGxvZ3MsICdVcGxvYWRlZCBKU09OIGJ1dCBnb3QgYSBiYWQgcmVzcG9uc2U6XG5Tb21lIGVy
cm9yXG4nKQotCi0gICAgICAgICMgVGhyb3dpbmcgYW4gZXhjZXB0aW9uIHVwbG9hZF9zaW5nbGVf
dGV4dF9maWxlIHNob3VsZG4ndCBibG93IHVwIF91cGxvYWRfanNvbgotICAgICAgICBjYWxsZWQg
PSBbXQotICAgICAgICB1cGxvYWRfc2luZ2xlX3RleHRfZmlsZV90aHJvd3MgPSBUcnVlCi0gICAg
ICAgIHJ1bm5lci5fdXBsb2FkX2pzb24oJ3NvbWUuaG9zdCcsICdzb21lLmpzb24nLCBNb2NrRmls
ZVVwbG9hZGVyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhbGxlZCwgWydGaWxlVXBsb2Fk
ZXInLCAndXBsb2FkX3NpbmdsZV90ZXh0X2ZpbGUnXSkKKyAgICAgICAgb3V0cHV0ID0gZ2VuZXJh
dGVkX2pzb25bMF0KKyAgICAgICAgc2VsZi5tYXhEaWZmID0gTm9uZQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKG91dHB1dFsncGxhdGZvcm0nXSwgJ3BsYXRmb3JtMScpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwob3V0cHV0WydidWlsZE51bWJlciddLCAnMTIzJykKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChvdXRwdXRbJ2J1aWxkVGltZSddLCAnMjAxMy0wMi0wOFQxNToxOTozNy40NjAw
MDAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dFsnYnVpbGRlck5hbWUnXSwgJ2J1
aWxkZXIxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXRbJ2J1aWxkZXJLZXknXSwg
J3ZhbHVlMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0WydyZXZpc2lvbnMnXSwg
eydXZWJLaXQnOiB7J3JldmlzaW9uJzogJzU2NzgnLCAndGltZXN0YW1wJzogJzIwMTMtMDItMDEg
MDg6NDg6MDUgKzAwMDAnfX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0Wyd0ZXN0
cyddLmtleXMoKSwgWydCaW5kaW5ncyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRl
ZChvdXRwdXRbJ3Rlc3RzJ11bJ0JpbmRpbmdzJ10ua2V5cygpKSwgWyd0ZXN0cycsICd1cmwnXSkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXRbJ3Rlc3RzJ11bJ0JpbmRpbmdzJ11bJ3Vy
bCddLCAnaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5rL1BlcmZvcm1hbmNlVGVz
dHMvQmluZGluZ3MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dFsndGVzdHMnXVsn
QmluZGluZ3MnXVsndGVzdHMnXS5rZXlzKCksIFsnZXZlbnQtdGFyZ2V0LXdyYXBwZXInXSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXRbJ3Rlc3RzJ11bJ0JpbmRpbmdzJ11bJ3Rlc3Rz
J11bJ2V2ZW50LXRhcmdldC13cmFwcGVyJ10sIHsKKyAgICAgICAgICAgICd1cmwnOiAnaHR0cDov
L3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5rL1BlcmZvcm1hbmNlVGVzdHMvQmluZGluZ3Mv
ZXZlbnQtdGFyZ2V0LXdyYXBwZXIuaHRtbCcsCisgICAgICAgICAgICAnbWV0cmljcyc6IHsnVGlt
ZSc6IHsnY3VycmVudCc6IFsxNDg2LjAsIDE0NzEuMCwgMTUxMC4wLCAxNTA1LjAsIDE0NzguMCwg
MTQ5MC4wXX19fSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFuY2VfdGVz
dHMvcGVyZnRlc3RzcnVubmVyX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3RzcnVubmVyX3VuaXR0ZXN0LnB5
CShyZXZpc2lvbiAxNDM2MjYpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNl
X3Rlc3RzL3BlcmZ0ZXN0c3J1bm5lcl91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMzQs
NiArMzQsNyBAQCBpbXBvcnQgcmUKIGltcG9ydCB1bml0dGVzdDIgYXMgdW5pdHRlc3QKIAogZnJv
bSB3ZWJraXRweS5jb21tb24uaG9zdF9tb2NrIGltcG9ydCBNb2NrSG9zdAorZnJvbSB3ZWJraXRw
eS5jb21tb24uc3lzdGVtLm91dHB1dGNhcHR1cmUgaW1wb3J0IE91dHB1dENhcHR1cmUKIGZyb20g
d2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQudGVzdCBpbXBvcnQgVGVzdFBvcnQKIGZyb20gd2Vi
a2l0cHkucGVyZm9ybWFuY2VfdGVzdHMucGVyZnRlc3RzcnVubmVyIGltcG9ydCBQZXJmVGVzdHNS
dW5uZXIKIApAQCAtMTQ3LDMgKzE0OCw2NCBAQCBjbGFzcyBNYWluVGVzdCh1bml0dGVzdC5UZXN0
Q2FzZSk6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0aW9ucy5vdXRwdXRfanNvbl9wYXRo
LCAnYS9vdXRwdXQuanNvbicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0aW9ucy5zbGF2
ZV9jb25maWdfanNvbl9wYXRoLCAnYS9zb3VyY2UuanNvbicpCiAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwob3B0aW9ucy50ZXN0X3Jlc3VsdHNfc2VydmVyLCAnc29tZWhvc3QnKQorCisgICAgZGVm
IHRlc3RfdXBsb2FkX2pzb24oc2VsZik6CisgICAgICAgIHJ1bm5lciwgcG9ydCA9IHNlbGYuY3Jl
YXRlX3J1bm5lcigpCisgICAgICAgIHBvcnQuaG9zdC5maWxlc3lzdGVtLmZpbGVzWycvbW9jay1j
aGVja291dC9zb21lLmpzb24nXSA9ICdzb21lIGNvbnRlbnQnCisKKyAgICAgICAgY2xhc3MgTW9j
a0ZpbGVVcGxvYWRlcjoKKyAgICAgICAgICAgIGNhbGxlZCA9IFtdCisgICAgICAgICAgICB1cGxv
YWRfc2luZ2xlX3RleHRfZmlsZV90aHJvd3MgPSBGYWxzZQorICAgICAgICAgICAgdXBsb2FkX3Np
bmdsZV90ZXh0X2ZpbGVfcmV0dXJuX3ZhbHVlID0gTm9uZQorCisgICAgICAgICAgICBAY2xhc3Nt
ZXRob2QKKyAgICAgICAgICAgIGRlZiByZXNldChjbHMpOgorICAgICAgICAgICAgICAgIGNscy5j
YWxsZWQgPSBbXQorICAgICAgICAgICAgICAgIGNscy51cGxvYWRfc2luZ2xlX3RleHRfZmlsZV90
aHJvd3MgPSBGYWxzZQorICAgICAgICAgICAgICAgIGNscy51cGxvYWRfc2luZ2xlX3RleHRfZmls
ZV9yZXR1cm5fdmFsdWUgPSBOb25lCisKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhtb2NrLCB1
cmwsIHRpbWVvdXQpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJsLCAnaHR0
cHM6Ly9zb21lLmhvc3Qvc29tZS9wYXRoJykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRy
dWUoaXNpbnN0YW5jZSh0aW1lb3V0LCBpbnQpIGFuZCB0aW1lb3V0KQorICAgICAgICAgICAgICAg
IG1vY2suY2FsbGVkLmFwcGVuZCgnRmlsZVVwbG9hZGVyJykKKworICAgICAgICAgICAgZGVmIHVw
bG9hZF9zaW5nbGVfdGV4dF9maWxlKG1vY2ssIGZpbGVzeXN0ZW0sIGNvbnRlbnRfdHlwZSwgZmls
ZW5hbWUpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZXN5c3RlbSwgcG9y
dC5ob3N0LmZpbGVzeXN0ZW0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb250
ZW50X3R5cGUsICdhcHBsaWNhdGlvbi9qc29uJykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKGZpbGVuYW1lLCAnc29tZS5qc29uJykKKyAgICAgICAgICAgICAgICBtb2NrLmNhbGxl
ZC5hcHBlbmQoJ3VwbG9hZF9zaW5nbGVfdGV4dF9maWxlJykKKyAgICAgICAgICAgICAgICBpZiBt
b2NrLnVwbG9hZF9zaW5nbGVfdGV4dF9maWxlX3Rocm93czoKKyAgICAgICAgICAgICAgICAgICAg
cmFpc2UgRXhjZXB0aW9uCisgICAgICAgICAgICAgICAgcmV0dXJuIG1vY2sudXBsb2FkX3Npbmds
ZV90ZXh0X2ZpbGVfcmV0dXJuX3ZhbHVlCisKKyAgICAgICAgTW9ja0ZpbGVVcGxvYWRlci51cGxv
YWRfc2luZ2xlX3RleHRfZmlsZV9yZXR1cm5fdmFsdWUgPSBTdHJpbmdJTy5TdHJpbmdJTygnT0sn
KQorICAgICAgICBzZWxmLmFzc2VydFRydWUocnVubmVyLl91cGxvYWRfanNvbignc29tZS5ob3N0
JywgJ3NvbWUuanNvbicsICcvc29tZS9wYXRoJywgTW9ja0ZpbGVVcGxvYWRlcikpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoTW9ja0ZpbGVVcGxvYWRlci5jYWxsZWQsIFsnRmlsZVVwbG9hZGVy
JywgJ3VwbG9hZF9zaW5nbGVfdGV4dF9maWxlJ10pCisKKyAgICAgICAgTW9ja0ZpbGVVcGxvYWRl
ci5yZXNldCgpCisgICAgICAgIE1vY2tGaWxlVXBsb2FkZXIudXBsb2FkX3NpbmdsZV90ZXh0X2Zp
bGVfcmV0dXJuX3ZhbHVlID0gU3RyaW5nSU8uU3RyaW5nSU8oJ1NvbWUgZXJyb3InKQorICAgICAg
ICBvdXRwdXQgPSBPdXRwdXRDYXB0dXJlKCkKKyAgICAgICAgb3V0cHV0LmNhcHR1cmVfb3V0cHV0
KCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShydW5uZXIuX3VwbG9hZF9qc29uKCdzb21lLmhv
c3QnLCAnc29tZS5qc29uJywgJy9zb21lL3BhdGgnLCBNb2NrRmlsZVVwbG9hZGVyKSkKKyAgICAg
ICAgXywgXywgbG9ncyA9IG91dHB1dC5yZXN0b3JlX291dHB1dCgpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwobG9ncywgJ1VwbG9hZGVkIEpTT04gdG8gaHR0cHM6Ly9zb21lLmhvc3Qvc29tZS9w
YXRoIGJ1dCBnb3QgYSBiYWQgcmVzcG9uc2U6XG5Tb21lIGVycm9yXG4nKQorCisgICAgICAgICMg
VGhyb3dpbmcgYW4gZXhjZXB0aW9uIHVwbG9hZF9zaW5nbGVfdGV4dF9maWxlIHNob3VsZG4ndCBi
bG93IHVwIF91cGxvYWRfanNvbgorICAgICAgICBNb2NrRmlsZVVwbG9hZGVyLnJlc2V0KCkKKyAg
ICAgICAgTW9ja0ZpbGVVcGxvYWRlci51cGxvYWRfc2luZ2xlX3RleHRfZmlsZV90aHJvd3MgPSBU
cnVlCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocnVubmVyLl91cGxvYWRfanNvbignc29tZS5o
b3N0JywgJ3NvbWUuanNvbicsICcvc29tZS9wYXRoJywgTW9ja0ZpbGVVcGxvYWRlcikpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoTW9ja0ZpbGVVcGxvYWRlci5jYWxsZWQsIFsnRmlsZVVwbG9h
ZGVyJywgJ3VwbG9hZF9zaW5nbGVfdGV4dF9maWxlJ10pCisKKyAgICAgICAgTW9ja0ZpbGVVcGxv
YWRlci5yZXNldCgpCisgICAgICAgIE1vY2tGaWxlVXBsb2FkZXIudXBsb2FkX3NpbmdsZV90ZXh0
X2ZpbGVfcmV0dXJuX3ZhbHVlID0gU3RyaW5nSU8uU3RyaW5nSU8oJ3sic3RhdHVzIjogIk9LIn0n
KQorICAgICAgICBzZWxmLmFzc2VydFRydWUocnVubmVyLl91cGxvYWRfanNvbignc29tZS5ob3N0
JywgJ3NvbWUuanNvbicsICcvc29tZS9wYXRoJywgTW9ja0ZpbGVVcGxvYWRlcikpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoTW9ja0ZpbGVVcGxvYWRlci5jYWxsZWQsIFsnRmlsZVVwbG9hZGVy
JywgJ3VwbG9hZF9zaW5nbGVfdGV4dF9maWxlJ10pCisKKyAgICAgICAgTW9ja0ZpbGVVcGxvYWRl
ci5yZXNldCgpCisgICAgICAgIE1vY2tGaWxlVXBsb2FkZXIudXBsb2FkX3NpbmdsZV90ZXh0X2Zp
bGVfcmV0dXJuX3ZhbHVlID0gU3RyaW5nSU8uU3RyaW5nSU8oJ3sic3RhdHVzIjogIlNvbWV0aGlu
Z0hhc0ZhaWxlZCIsICJmYWlsdXJlU3RvcmVkIjogZmFsc2V9JykKKyAgICAgICAgb3V0cHV0ID0g
T3V0cHV0Q2FwdHVyZSgpCisgICAgICAgIG91dHB1dC5jYXB0dXJlX291dHB1dCgpCisgICAgICAg
IHNlbGYuYXNzZXJ0RmFsc2UocnVubmVyLl91cGxvYWRfanNvbignc29tZS5ob3N0JywgJ3NvbWUu
anNvbicsICcvc29tZS9wYXRoJywgTW9ja0ZpbGVVcGxvYWRlcikpCisgICAgICAgIF8sIF8sIGxv
Z3MgPSBvdXRwdXQucmVzdG9yZV9vdXRwdXQoKQorICAgICAgICBzZXJpYWxpemVkX2pzb24gPSBq
c29uLmR1bXBzKHsnc3RhdHVzJzogJ1NvbWV0aGluZ0hhc0ZhaWxlZCcsICdmYWlsdXJlU3RvcmVk
JzogRmFsc2V9LCBpbmRlbnQ9NCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2dzLCAnVXBs
b2FkZWQgSlNPTiB0byBodHRwczovL3NvbWUuaG9zdC9zb21lL3BhdGggYnV0IGdvdCBhbiBlcnJv
cjpcbiVzXG4nICUgc2VyaWFsaXplZF9qc29uKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>