<?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>38693</bug_id>
          
          <creation_ts>2010-05-06 14:41:28 -0700</creation_ts>
          <short_desc>cleanup json_results_generator dependencies so that non-layout-tests can also use it safely</short_desc>
          <delta_ts>2010-07-09 13:52:15 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>39665</dependson>
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Kinuko Yasuda">kinuko</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>cjerdonek</cc>
    
    <cc>dpranke</cc>
    
    <cc>eric</cc>
    
    <cc>ojan</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>221973</commentid>
    <comment_count>0</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-05-06 14:41:28 -0700</bug_when>
    <thetext>Dependencies and APIs of json_results_generator.py [1] should be cleaned up and layout-tests specific code should be placed only in json_layout_results_generator.py, so that non-layout-tests can safely/cleanly utilize the JSON generator as well.

For example currently json_results_generator.py is also used for chromium&apos;s unit/ui testing and called from outside WebKit (from chromium&apos;s test script), but it is making things complicated and error prone.

[1] WebKitTools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py
Related chromium bug: http://crbug.com/41405</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222085</commentid>
    <comment_count>1</comment_count>
      <attachid>55325</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-05-06 17:51:39 -0700</bug_when>
    <thetext>Created attachment 55325
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222122</commentid>
    <comment_count>2</comment_count>
      <attachid>55325</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-06 19:38:43 -0700</bug_when>
    <thetext>Comment on attachment 55325
Patch

Why does any of this code need _chromium_svn_base?

Nothing outside of ChromiumPort should ever need to touch _chromium_svn_base.

This is not really a [chromium] bug, as WebKit is about to start using json_results_generator to post layout test results as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222123</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-06 19:39:40 -0700</bug_when>
    <thetext>This is definitely not chromium-specific as webkit already uses this code as part of new-run-webkit-tests and soon will use it as part of webkit-patch to be able to post historical buildbot results to the test results sever.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222138</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-05-06 20:35:48 -0700</bug_when>
    <thetext>FYI, this patch is not applying because __init__.py is an empty file.

Try adding a single comment line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222208</commentid>
    <comment_count>5</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-05-06 23:45:41 -0700</bug_when>
    <thetext>_chromium_svn_base is used to get chromium&apos;s code revision only if the script
is executed in a chromium tree.  (to clarify, I reorganized the code but the
logic had been there.)

So I&apos;m going to move/hide the platform dependent part into Ports, but the
existing port package is under layout_tests and seems to include a lot of
layout-tests specific stuff.
Should I make another port directory under test_package?  Or what if I extract
some of basic common part of webkitpy/layout_tests/port and put them under
webkitpy/common/port?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222209</commentid>
    <comment_count>6</comment_count>
      <attachid>55343</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-05-06 23:52:09 -0700</bug_when>
    <thetext>Created attachment 55343
=add comment in __init__.py</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222210</commentid>
    <comment_count>7</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-05-06 23:53:49 -0700</bug_when>
    <thetext>btw thanks for fixing the bug summary.  I was a bit unaware of non-chromium usages.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222375</commentid>
    <comment_count>8</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-05-07 08:07:03 -0700</bug_when>
    <thetext>Do we want to support checking in empty files?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222793</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-07 22:00:11 -0700</bug_when>
    <thetext>@chris:  Yes, we should support patches with empty files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>235095</commentid>
    <comment_count>10</comment_count>
      <attachid>58101</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-06-07 19:31:02 -0700</bug_when>
    <thetext>Created attachment 58101
Take 2 (removed chromium-specific code)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>235099</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-07 19:36:08 -0700</bug_when>
    <thetext>Attachment 58101 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebKitTools/Scripts/webkitpy/test_package/json_results_generator_unittest.py:60:  indentation is not a multiple of four  [pep8/E111] [5]
WebKitTools/Scripts/webkitpy/test_package/json_results_generator.py:127:  indentation is not a multiple of four  [pep8/E111] [5]
Total errors found: 2 in 8 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>235109</commentid>
    <comment_count>12</comment_count>
      <attachid>58105</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-06-07 19:53:19 -0700</bug_when>
    <thetext>Created attachment 58105
Take 2.1 (style fix)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239653</commentid>
    <comment_count>13</comment_count>
      <attachid>58105</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-06-17 17:02:38 -0700</bug_when>
    <thetext>Comment on attachment 58105
Take 2.1 (style fix)

Very sorry this took so long to review. Now that I can see it in rietveld it&apos;s much easier to see that this is mostly just moving code around. Anyways, r- due to a few minor issues. Otherwise this looks good.
---------------------------------
http://wkrietveld.appspot.com/38693/diff/1/2
File WebKitTools/ChangeLog (right):

http://wkrietveld.appspot.com/38693/diff/1/2#newcode18
WebKitTools/ChangeLog:18: * Scripts/webkitpy/test_package/__init__.py: Added.
I think a better home for these files would be a new directory in &quot;common&quot;. For example:
webkitpy/common/test.

http://wkrietveld.appspot.com/38693/diff/1/5
File WebKitTools/Scripts/webkitpy/layout_tests/layout_package/test_expectations.py (right):

http://wkrietveld.appspot.com/38693/diff/1/5#newcode46
WebKitTools/Scripts/webkitpy/layout_tests/layout_package/test_expectations.py:46: # Note: They need to match with the webkitpy.test_package.test_results.
I think you can do this in the import statement and avoid duplicating this list. Namely:
from webkitpy.test_package.test_results import *

If that doesn&apos;t work, I&apos;d rather we just use test_results.PASS instead of PASS in this file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240215</commentid>
    <comment_count>14</comment_count>
      <attachid>59169</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-06-18 16:40:19 -0700</bug_when>
    <thetext>Created attachment 59169
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240220</commentid>
    <comment_count>15</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-06-18 16:48:20 -0700</bug_when>
    <thetext>Thanks for reviewing!

(In reply to comment #13)
&gt; (From update of attachment 58105 [details])
&gt; http://wkrietveld.appspot.com/38693/diff/1/2
&gt; File WebKitTools/ChangeLog (right):
&gt; 
&gt; http://wkrietveld.appspot.com/38693/diff/1/2#newcode18
&gt; WebKitTools/ChangeLog:18: * Scripts/webkitpy/test_package/__init__.py: Added.
&gt; I think a better home for these files would be a new directory in &quot;common&quot;. For example:
&gt; webkitpy/common/test.

Done.

&gt; http://wkrietveld.appspot.com/38693/diff/1/5
&gt; File WebKitTools/Scripts/webkitpy/layout_tests/layout_package/test_expectations.py (right):
&gt; 
&gt; http://wkrietveld.appspot.com/38693/diff/1/5#newcode46
&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/test_expectations.py:46: # Note: They need to match with the webkitpy.test_package.test_results.
&gt; I think you can do this in the import statement and avoid duplicating this list. Namely:
&gt; from webkitpy.test_package.test_results import *
&gt; 
&gt; If that doesn&apos;t work, I&apos;d rather we just use test_results.PASS instead of PASS in this file.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240405</commentid>
    <comment_count>16</comment_count>
      <attachid>59169</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-19 17:36:33 -0700</bug_when>
    <thetext>Comment on attachment 59169
Patch

Mostly an r- because it looks like your unit test is talking to the network, which is bad news bears.

WebKitTools/Scripts/webkitpy/common/test/json_results_generator.py:1
 +  #!/usr/bin/env python
We don&apos;t need this line.  This file isn&apos;t runnable on its own.

WebKitTools/Scripts/webkitpy/common/test/json_results_generator.py:83
 +      def __init__(self, builder_name, build_name, build_number,
Wow, that&apos;s a lot of arguments.  Maybe we&apos;d be better off with some sort of object?

WebKitTools/Scripts/webkitpy/common/test/json_results_generator.py:141
 +      def _get_svn_revision(self, in_directory):
This function shouldn&apos;t exist.

WebKitTools/Scripts/webkitpy/common/test/json_results_generator.py:147
 +          if os.path.exists(os.path.join(in_directory, &apos;.svn&apos;)):
scm.py does this work.

WebKitTools/Scripts/webkitpy/common/test/json_results_generator.py:149
 +              output = subprocess.Popen([&quot;svn&quot;, &quot;info&quot;, &quot;--xml&quot;],
Please don&apos;t use subprocess directly.  Use executive.py instead.

WebKitTools/Scripts/webkitpy/common/test/json_results_generator.py:151
 +                                        shell=(sys.platform == &apos;win32&apos;),
I&apos;m not sure we want to use the shell here.

WebKitTools/Scripts/webkitpy/common/test/json_results_generator_unittest.py:45
 +  class TestJSONGeneration(unittest.TestCase):
We usually use Test as a suffix instead of a prefix.

WebKitTools/Scripts/webkitpy/common/test/json_results_generator_unittest.py:42
 +  BUILDER_BASE_URL = &quot;http://build.chromium.org/buildbot/gtest-results/&quot;
Is this really going to talk to the network?  We should use a Mock network instead so the unit tests are self-contained.

WebKitTools/Scripts/webkitpy/common/test/json_results_generator_unittest.py:47
 +          self.results_directory = tempfile.mkdtemp()
We should also abstract away access to the file system so we don&apos;t need to touch the disk to test this code (which isn&apos;t really about manipulating the disk).

WebKitTools/Scripts/webkitpy/common/test/test_results.py:30
 +  # Test results and modifier constants.
I don&apos;t understand what role this file places.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243945</commentid>
    <comment_count>17</comment_count>
      <attachid>59952</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-06-28 15:23:52 -0700</bug_when>
    <thetext>Created attachment 59952
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243952</commentid>
    <comment_count>18</comment_count>
      <attachid>59954</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-06-28 15:30:58 -0700</bug_when>
    <thetext>Created attachment 59954
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243960</commentid>
    <comment_count>19</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-06-28 15:49:36 -0700</bug_when>
    <thetext>Updated the patch with some additional refactoring changes.
(This time the patch doesn&apos;t include directory move/rename as combining update+move generally makes the patch hard to read)

(In reply to comment #16)
&gt; (From update of attachment 59169 [details])
&gt; Mostly an r- because it looks like your unit test is talking to the network, which is bad news bears.
&gt; 
&gt; WebKitTools/Scripts/webkitpy/common/test/json_results_generator.py:1
&gt;  +  #!/usr/bin/env python
&gt; We don&apos;t need this line.  This file isn&apos;t runnable on its own.

Removed.

&gt; WebKitTools/Scripts/webkitpy/common/test/json_results_generator.py:83
&gt;  +      def __init__(self, builder_name, build_name, build_number,
&gt; Wow, that&apos;s a lot of arguments.  Maybe we&apos;d be better off with some sort of object?

Refactored a bit to use a new TestResult class.

&gt; WebKitTools/Scripts/webkitpy/common/test/json_results_generator.py:141
&gt;  +      def _get_svn_revision(self, in_directory):
&gt; This function shouldn&apos;t exist.
&gt; 
&gt; WebKitTools/Scripts/webkitpy/common/test/json_results_generator.py:147
&gt;  +          if os.path.exists(os.path.join(in_directory, &apos;.svn&apos;)):
&gt; scm.py does this work.
&gt; 
&gt; WebKitTools/Scripts/webkitpy/common/test/json_results_generator.py:149
&gt;  +              output = subprocess.Popen([&quot;svn&quot;, &quot;info&quot;, &quot;--xml&quot;],
&gt; Please don&apos;t use subprocess directly.  Use executive.py instead.
&gt; 
&gt; WebKitTools/Scripts/webkitpy/common/test/json_results_generator.py:151
&gt;  +                                        shell=(sys.platform == &apos;win32&apos;),
&gt; I&apos;m not sure we want to use the shell here.

For now I&apos;ve put an additional comment to explain why it is kept as is.
(I&apos;ve once replaced this part (_get_svn_revision()) to use scm.py but it caused some run-time
errors on chromium Windows buildbot.  I&apos;ve been failing to reproduce it on my env for now.)

&gt; WebKitTools/Scripts/webkitpy/common/test/json_results_generator_unittest.py:45
&gt;  +  class TestJSONGeneration(unittest.TestCase):
&gt; We usually use Test as a suffix instead of a prefix.

Fixed.

&gt; WebKitTools/Scripts/webkitpy/common/test/json_results_generator_unittest.py:42
&gt;  +  BUILDER_BASE_URL = &quot;http://build.chromium.org/buildbot/gtest-results/&quot;
&gt; Is this really going to talk to the network?  We should use a Mock network instead so the unit tests are self-contained.

Fixed.  It won&apos;t talk to the network.

&gt; WebKitTools/Scripts/webkitpy/common/test/json_results_generator_unittest.py:47
&gt;  +          self.results_directory = tempfile.mkdtemp()
&gt; We should also abstract away access to the file system so we don&apos;t need to touch the disk to test this code (which isn&apos;t really about manipulating the disk).

Fixed.  It won&apos;t touch the disk either.

&gt; WebKitTools/Scripts/webkitpy/common/test/test_results.py:30
&gt;  +  # Test results and modifier constants.
&gt; I don&apos;t understand what role this file places.

Removed the file as there wasn&apos;t a strong reason to expose those constants there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247787</commentid>
    <comment_count>20</comment_count>
      <attachid>59954</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-07-07 15:01:19 -0700</bug_when>
    <thetext>Comment on attachment 59954
Patch

Thanks for following up with this. Please fix the nits below before committing.

WebKitTools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:190
 +          PASS_RESULT, NO_DATA_RESULT and etc) that indicates the test result
nit: Common style for this would be the following (no &quot;and&quot;):
PASS_RESULT, NO_DATA_RESULT, etc)

WebKitTools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:451
 +  # Please keep the interface until the other script is cleaned up.
Nit: This should probably be phrased as a FIXME. Something like:
# FIXME: Remove this interface once the other script is cleaned up.

Also, a link pointing to the other script (e.g. in src.chromium.org) wouldn&apos;t hurt.

WebKitTools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:42
 +  class JSONGenerationTest(unittest.TestCase):
How about calling this JSONResultsGeneratorTest?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>249225</commentid>
    <comment_count>21</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-07-09 13:38:47 -0700</bug_when>
    <thetext>Committed r62989: &lt;http://trac.webkit.org/changeset/62989&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>249237</commentid>
    <comment_count>22</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-07-09 13:52:15 -0700</bug_when>
    <thetext>Thanks for your review, submitted with fixes for the nits.

(In reply to comment #20)
&gt; (From update of attachment 59954 [details])
&gt; Thanks for following up with this. Please fix the nits below before committing.
&gt; 
&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:190
&gt;  +          PASS_RESULT, NO_DATA_RESULT and etc) that indicates the test result
&gt; nit: Common style for this would be the following (no &quot;and&quot;):
&gt; PASS_RESULT, NO_DATA_RESULT, etc)
&gt; 
&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:451
&gt;  +  # Please keep the interface until the other script is cleaned up.
&gt; Nit: This should probably be phrased as a FIXME. Something like:
&gt; # FIXME: Remove this interface once the other script is cleaned up.
&gt; 
&gt; Also, a link pointing to the other script (e.g. in src.chromium.org) wouldn&apos;t hurt.
&gt; 
&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:42
&gt;  +  class JSONGenerationTest(unittest.TestCase):
&gt; How about calling this JSONResultsGeneratorTest?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55325</attachid>
            <date>2010-05-06 17:51:39 -0700</date>
            <delta_ts>2010-05-06 23:52:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-38693-20100506175137.patch</filename>
            <type>text/plain</type>
            <size>49540</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBjZWRmNzYwOWNiYTY4OGE0MDhlZTM4OTc1MjNkZGI5ZWJkNzc2NWEyLi5mM2QzZjgx
ZjljZTU2Yzk0ODAxZDYyZTMzNDE1N2Y4NWRjNjY0YWVlIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAK
KzIwMTAtMDUtMDYgIEtpbnVrbyBZYXN1ZGEgIDxraW51a29AY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtDaHJvbWl1bV0gY2xl
YW51cCBqc29uX3Jlc3VsdHNfZ2VuZXJhdG9yIGRlcGVuZGVuY2llcyBzbyB0aGF0IG5vbi1sYXlv
dXQtdGVzdHMgY2FuIGFsc28gdXNlIGl0IHNhZmVseQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzg2OTMKKworICAgICAgICBDbGVhbi11cCBqc29uX3Jl
c3VsdHNfZ2VuZXJhdG9yLnB5IGZyb20gbGF5b3V0X3Rlc3RzIHBhY2thZ2UuCisgICAgICAgIENy
ZWF0ZWQgYSBuZXcgZGlyZWN0b3J5IHRlc3RfcGFja2FnZSBmb3Igbm9uLWxheW91dC10ZXN0cyBz
cGVjaWZpYworICAgICAgICB0ZXN0IHJlbGF0ZWQgc2NyaXB0cyBhbmQgbW92ZWQganNvbl9yZXN1
bHRzX2dlbmVyYXRvci5weSBpbnRvIHRoZQorICAgICAgICBuZXcgZGlyZWN0b3J5LiAgQWxzbyBl
eHRyYWN0ZWQgZ2VuZXJpYyB0ZXN0LXJlbGF0ZWQgY29uc3RhbnRzCisgICAgICAgIGRlZmluaXRp
b25zIGZyb20gbGF5b3V0X3BhY2thZ2UvdGVzdF9leHBlY3RhdGlvbnMucHkgYW5kIHBsYWNlZCB0
aGVtCisgICAgICAgIGluIHRlc3RfcGFja2FnZS90ZXN0X3Jlc3VsdHMucHkuCisgICAgICAgIEFk
ZGVkIGEgdW5pdHRlc3QgZm9yIGpzb25fcmVzdWx0c19nZW5lcmF0b3IucHkuCisKKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX2xheW91
dF9yZXN1bHRzX2dlbmVyYXRvci5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5OgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfZXhw
ZWN0YXRpb25zLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGVzdF9wYWNrYWdlL19f
aW5pdF9fLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rlc3RfcGFja2Fn
ZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5OiBDb3BpZWQgZnJvbSBTY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5Lgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGVzdF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5l
cmF0b3JfdW5pdHRlc3QucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGVz
dF9wYWNrYWdlL3Rlc3RfcmVzdWx0cy5weTogQWRkZWQuCisKIDIwMTAtMDUtMDUgIERpcmsgUHJh
bmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBT
ZWlkZWwuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX2xheW91dF9yZXN1bHRzX2dlbmVyYXRvci5weSBiL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pz
b25fbGF5b3V0X3Jlc3VsdHNfZ2VuZXJhdG9yLnB5CmluZGV4IGNlZTQ0YWRhYTE5ZWZjMjBjNGM4
NDVmMTM2ZmNkYjM5NDYyYTNjMWYuLjY0OGE4YmQ4ZjFjODBkNDY5ZDMwZTMxZGM2YWVhZDBkY2Vk
YmRkNjIgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2xheW91dF9wYWNrYWdlL2pzb25fbGF5b3V0X3Jlc3VsdHNfZ2VuZXJhdG9yLnB5CisrKyBi
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdl
L2pzb25fbGF5b3V0X3Jlc3VsdHNfZ2VuZXJhdG9yLnB5CkBAIC03OCw2ICs3OCwxOSBAQCBjbGFz
cyBKU09OTGF5b3V0UmVzdWx0c0dlbmVyYXRvcihqc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLkpTT05S
ZXN1bHRzR2VuZXJhdG9yKToKICAgICAgICAgICAgIChwYXRoX3RvX25hbWUodGVzdF90dXBsZS5m
aWxlbmFtZSksIHRlc3RfdHVwbGUudGVzdF9ydW5fdGltZSkKICAgICAgICAgICAgIGZvciB0ZXN0
X3R1cGxlIGluIHRlc3RfdGltaW5ncykKIAorICAgICAgICAjIFRoZXNlIG5leHQgdHdvIGJyYW5j
aGVzIHRlc3QgdG8gc2VlIHdoaWNoIHNvdXJjZSByZXBvcyB3ZSBjYW4KKyAgICAgICAgIyBwdWxs
IHJldmlzaW9ucyBmcm9tLgorICAgICAgICBzZWxmLl93ZWJraXRfc3ZuX2Jhc2UgPSBOb25lCisg
ICAgICAgIHNlbGYuX2Nocm9taXVtX3N2bl9iYXNlID0gTm9uZQorICAgICAgICBpZiBoYXNhdHRy
KHNlbGYuX3BvcnQsICdwYXRoX2Zyb21fd2Via2l0X2Jhc2UnKToKKyAgICAgICAgICAgIHNlbGYu
X3dlYmtpdF9zdm5fYmFzZSA9IHNlbGYuX3BvcnQucGF0aF9mcm9tX3dlYmtpdF9iYXNlKCdXZWJD
b3JlJykKKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLl9wb3J0LCAncGF0aF9mcm9tX2Nocm9taXVt
X2Jhc2UnKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl9jaHJvbWl1
bV9zdm5fYmFzZSA9IHNlbGYuX3BvcnQucGF0aF9mcm9tX2Nocm9taXVtX2Jhc2UoKQorICAgICAg
ICAgICAgZXhjZXB0IEFzc2VydGlvbkVycm9yOgorICAgICAgICAgICAgICAgICMgV2UncmUgbm90
IGluIGEgQ2hyb21pdW0gY2hlY2tvdXQsIHRoYXQncyBvay4KKyAgICAgICAgICAgICAgICBwYXNz
CisKICAgICAgICAgc2VsZi5fZ2VuZXJhdGVfanNvbl9vdXRwdXQoKQogCiAgICAgZGVmIF9nZXRf
cGF0aF9yZWxhdGl2ZV90b19sYXlvdXRfdGVzdF9yb290KHNlbGYsIHRlc3QpOgpkaWZmIC0tZ2l0
IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2th
Z2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvci5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5lcmF0b3IucHkK
aW5kZXggMDk5M2NiZGQ3YjA0MzVlNGZhMTE2MDU0YTdmNjAxYmRiMTk5ODNjZi4uNjAzOGE5ZTZj
ZDgyYjRhNWQzZDQ2NjgzNmE4NmE1ODJlZjNkMmJlOSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRz
X2dlbmVyYXRvci5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5CkBAIC0yOSw0MDQg
KzI5LDMyIEBACiAKIGZyb20gX19mdXR1cmVfXyBpbXBvcnQgd2l0aF9zdGF0ZW1lbnQKIAotaW1w
b3J0IGNvZGVjcwotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBvcwotaW1wb3J0IHN1YnByb2Nlc3MK
LWltcG9ydCBzeXMKLWltcG9ydCB0aW1lCi1pbXBvcnQgdXJsbGliMgotaW1wb3J0IHhtbC5kb20u
bWluaWRvbQorZnJvbSB3ZWJraXRweS50ZXN0X3BhY2thZ2UgaW1wb3J0IGpzb25fcmVzdWx0c19n
ZW5lcmF0b3IKIAotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1w
b3J0IHRlc3RfZXhwZWN0YXRpb25zCi1pbXBvcnQgd2Via2l0cHkudGhpcmRwYXJ0eS5zaW1wbGVq
c29uIGFzIHNpbXBsZWpzb24KKyMgSlNPTlJlc3VsdHNHZW5lcmF0b3IgaXMgbW92ZWQgaW50byB3
ZWJraXRweS50ZXN0X3BhY2thZ2UuCisjIFRoaXMgbW9kdWxlIGlzIGxlZnQgYXMgYSBzaW1wbGUg
d3JhcHBlciBmb3Igbm90IGJyZWFraW5nIHRoaW5ncworIyBkdXJpbmcgdGhlIHRyYW5zaXRpb24u
CiAKLV9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcigid2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91
dF9wYWNrYWdlLiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAianNvbl9yZXN1bHRzX2dlbmVy
YXRvciIpCi0KLQotY2xhc3MgSlNPTlJlc3VsdHNHZW5lcmF0b3Iob2JqZWN0KToKLQotICAgIE1B
WF9OVU1CRVJfT0ZfQlVJTERfUkVTVUxUU19UT19MT0cgPSA3NTAKLSAgICAjIE1pbiB0aW1lIChz
ZWNvbmRzKSB0aGF0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIEpTT04uCi0gICAgTUlOX1RJTUUgPSAx
Ci0gICAgSlNPTl9QUkVGSVggPSAiQUREX1JFU1VMVFMoIgotICAgIEpTT05fU1VGRklYID0gIik7
IgotICAgIFBBU1NfUkVTVUxUID0gIlAiCi0gICAgU0tJUF9SRVNVTFQgPSAiWCIKLSAgICBOT19E
QVRBX1JFU1VMVCA9ICJOIgotICAgIFZFUlNJT04gPSAzCi0gICAgVkVSU0lPTl9LRVkgPSAidmVy
c2lvbiIKLSAgICBSRVNVTFRTID0gInJlc3VsdHMiCi0gICAgVElNRVMgPSAidGltZXMiCi0gICAg
QlVJTERfTlVNQkVSUyA9ICJidWlsZE51bWJlcnMiCi0gICAgV0VCS0lUX1NWTiA9ICJ3ZWJraXRS
ZXZpc2lvbiIKLSAgICBDSFJPTUVfU1ZOID0gImNocm9tZVJldmlzaW9uIgotICAgIFRJTUUgPSAi
c2Vjb25kc1NpbmNlRXBvY2giCi0gICAgVEVTVFMgPSAidGVzdHMiCi0KLSAgICBGSVhBQkxFX0NP
VU5UID0gImZpeGFibGVDb3VudCIKLSAgICBGSVhBQkxFID0gImZpeGFibGVDb3VudHMiCi0gICAg
QUxMX0ZJWEFCTEVfQ09VTlQgPSAiYWxsRml4YWJsZUNvdW50IgotCi0gICAgIyBOb3RlIHRoYXQg
d2Ugb21pdCB0ZXN0X2V4cGVjdGF0aW9ucy5GQUlMIGZyb20gdGhpcyBsaXN0IGJlY2F1c2UKLSAg
ICAjIGl0IHNob3VsZCBuZXZlciBzaG93IHVwIChpdCdzIGEgbGVnYWN5IGlucHV0IGV4cGVjdGF0
aW9uLCBuZXZlcgotICAgICMgYW4gb3V0cHV0IGV4cGVjdGF0aW9uKS4KLSAgICBGQUlMVVJFX1RP
X0NIQVIgPSB7dGVzdF9leHBlY3RhdGlvbnMuQ1JBU0g6ICJDIiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgdGVzdF9leHBlY3RhdGlvbnMuVElNRU9VVDogIlQiLAotICAgICAgICAgICAgICAgICAg
ICAgICB0ZXN0X2V4cGVjdGF0aW9ucy5JTUFHRTogIkkiLAotICAgICAgICAgICAgICAgICAgICAg
ICB0ZXN0X2V4cGVjdGF0aW9ucy5URVhUOiAiRiIsCi0gICAgICAgICAgICAgICAgICAgICAgIHRl
c3RfZXhwZWN0YXRpb25zLk1JU1NJTkc6ICJPIiwKLSAgICAgICAgICAgICAgICAgICAgICAgdGVz
dF9leHBlY3RhdGlvbnMuSU1BR0VfUExVU19URVhUOiAiWiJ9Ci0gICAgRkFJTFVSRV9DSEFSUyA9
IEZBSUxVUkVfVE9fQ0hBUi52YWx1ZXMoKQotCi0gICAgUkVTVUxUU19GSUxFTkFNRSA9ICJyZXN1
bHRzLmpzb24iCiAKK2NsYXNzIEpTT05SZXN1bHRzR2VuZXJhdG9yKGpzb25fcmVzdWx0c19nZW5l
cmF0b3IuSlNPTlJlc3VsdHNHZW5lcmF0b3IpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0
LCBidWlsZGVyX25hbWUsIGJ1aWxkX25hbWUsIGJ1aWxkX251bWJlciwKICAgICAgICAgcmVzdWx0
c19maWxlX2Jhc2VfcGF0aCwgYnVpbGRlcl9iYXNlX3VybCwKICAgICAgICAgdGVzdF90aW1pbmdz
LCBmYWlsdXJlcywgcGFzc2VkX3Rlc3RzLCBza2lwcGVkX3Rlc3RzLCBhbGxfdGVzdHMpOgotICAg
ICAgICAiIiJNb2RpZmllcyB0aGUgcmVzdWx0cy5qc29uIGZpbGUuIEdyYWJzIGl0IG9mZiB0aGUg
YXJjaGl2ZSBkaXJlY3RvcnkKLSAgICAgICAgaWYgaXQgaXMgbm90IGZvdW5kIGxvY2FsbHkuCi0K
LSAgICAgICAgQXJncwotICAgICAgICAgIGJ1aWxkZXJfbmFtZTogdGhlIGJ1aWxkZXIgbmFtZSAo
ZS5nLiBXZWJraXQpLgotICAgICAgICAgIGJ1aWxkX25hbWU6IHRoZSBidWlsZCBuYW1lIChlLmcu
IHdlYmtpdC1yZWwpLgotICAgICAgICAgIGJ1aWxkX251bWJlcjogdGhlIGJ1aWxkIG51bWJlci4K
LSAgICAgICAgICByZXN1bHRzX2ZpbGVfYmFzZV9wYXRoOiBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBk
aXJlY3RvcnkgY29udGFpbmluZyB0aGUKLSAgICAgICAgICAgICAgcmVzdWx0cyBqc29uIGZpbGUu
Ci0gICAgICAgICAgYnVpbGRlcl9iYXNlX3VybDogdGhlIFVSTCB3aGVyZSB3ZSBoYXZlIHRoZSBh
cmNoaXZlZCB0ZXN0IHJlc3VsdHMuCi0gICAgICAgICAgdGVzdF90aW1pbmdzOiBNYXAgb2YgdGVz
dCBuYW1lIHRvIGEgdGVzdF9ydW4tdGltZS4KLSAgICAgICAgICBmYWlsdXJlczogTWFwIG9mIHRl
c3QgbmFtZSB0byBhIGZhaWx1cmUgdHlwZSAob2YgdGVzdF9leHBlY3RhdGlvbnMpLgotICAgICAg
ICAgIHBhc3NlZF90ZXN0czogQSBzZXQgY29udGFpbmluZyBhbGwgdGhlIHBhc3NlZCB0ZXN0cy4K
LSAgICAgICAgICBza2lwcGVkX3Rlc3RzOiBBIHNldCBjb250YWluaW5nIGFsbCB0aGUgc2tpcHBl
ZCB0ZXN0cy4KLSAgICAgICAgICBhbGxfdGVzdHM6IExpc3Qgb2YgYWxsIHRoZSB0ZXN0cyB0aGF0
IHdlcmUgcnVuLiAgVGhpcyBzaG91bGQgbm90Ci0gICAgICAgICAgICAgIGluY2x1ZGUgc2tpcHBl
ZCB0ZXN0cy4KLSAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0Ci0gICAgICAg
IHNlbGYuX2J1aWxkZXJfbmFtZSA9IGJ1aWxkZXJfbmFtZQotICAgICAgICBzZWxmLl9idWlsZF9u
YW1lID0gYnVpbGRfbmFtZQotICAgICAgICBzZWxmLl9idWlsZF9udW1iZXIgPSBidWlsZF9udW1i
ZXIKLSAgICAgICAgc2VsZi5fYnVpbGRlcl9iYXNlX3VybCA9IGJ1aWxkZXJfYmFzZV91cmwKLSAg
ICAgICAgc2VsZi5fcmVzdWx0c19maWxlX3BhdGggPSBvcy5wYXRoLmpvaW4ocmVzdWx0c19maWxl
X2Jhc2VfcGF0aCwKLSAgICAgICAgICAgIHNlbGYuUkVTVUxUU19GSUxFTkFNRSkKLSAgICAgICAg
c2VsZi5fdGVzdF90aW1pbmdzID0gdGVzdF90aW1pbmdzCi0gICAgICAgIHNlbGYuX2ZhaWx1cmVz
ID0gZmFpbHVyZXMKLSAgICAgICAgc2VsZi5fcGFzc2VkX3Rlc3RzID0gcGFzc2VkX3Rlc3RzCi0g
ICAgICAgIHNlbGYuX3NraXBwZWRfdGVzdHMgPSBza2lwcGVkX3Rlc3RzCi0gICAgICAgIHNlbGYu
X2FsbF90ZXN0cyA9IGFsbF90ZXN0cwotCi0gICAgICAgIHNlbGYuX2dlbmVyYXRlX2pzb25fb3V0
cHV0KCkKLQotICAgIGRlZiBfZ2VuZXJhdGVfanNvbl9vdXRwdXQoc2VsZik6Ci0gICAgICAgICIi
IkdlbmVyYXRlcyB0aGUgSlNPTiBvdXRwdXQgZmlsZS4iIiIKLSAgICAgICAganNvbiA9IHNlbGYu
X2dldF9qc29uKCkKLSAgICAgICAgaWYganNvbjoKLSAgICAgICAgICAgIHJlc3VsdHNfZmlsZSA9
IGNvZGVjcy5vcGVuKHNlbGYuX3Jlc3VsdHNfZmlsZV9wYXRoLCAidyIsICJ1dGYtOCIpCi0gICAg
ICAgICAgICByZXN1bHRzX2ZpbGUud3JpdGUoanNvbikKLSAgICAgICAgICAgIHJlc3VsdHNfZmls
ZS5jbG9zZSgpCi0KLSAgICAjIEZJWE1FOiBDYWxsZXJzIHNob3VsZCB1c2Ugc2NtLnB5IGluc3Rl
YWQuCi0gICAgZGVmIF9nZXRfc3ZuX3JldmlzaW9uKHNlbGYsIGluX2RpcmVjdG9yeSk6Ci0gICAg
ICAgICIiIlJldHVybnMgdGhlIHN2biByZXZpc2lvbiBmb3IgdGhlIGdpdmVuIGRpcmVjdG9yeS4K
LQotICAgICAgICBBcmdzOgotICAgICAgICAgIGluX2RpcmVjdG9yeTogVGhlIGRpcmVjdG9yeSB3
aGVyZSBzdm4gaXMgdG8gYmUgcnVuLgotICAgICAgICAiIiIKLSAgICAgICAgaWYgb3MucGF0aC5l
eGlzdHMob3MucGF0aC5qb2luKGluX2RpcmVjdG9yeSwgJy5zdm4nKSk6Ci0gICAgICAgICAgICAj
IE5vdGU6IE5vdCB0aHJlYWQgc2FmZTogaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTIzMjAK
LSAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuUG9wZW4oWyJzdm4iLCAiaW5mbyIsICIt
LXhtbCJdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjd2Q9aW5fZGly
ZWN0b3J5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGVsbD0oc3lz
LnBsYXRmb3JtID09ICd3aW4zMicpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5jb21tdW5pY2F0ZSgpWzBdCi0gICAgICAgICAg
ICB0cnk6Ci0gICAgICAgICAgICAgICAgZG9tID0geG1sLmRvbS5taW5pZG9tLnBhcnNlU3RyaW5n
KG91dHB1dCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZG9tLmdldEVsZW1lbnRzQnlUYWdOYW1l
KCdlbnRyeScpWzBdLmdldEF0dHJpYnV0ZSgKLSAgICAgICAgICAgICAgICAgICAgJ3JldmlzaW9u
JykKLSAgICAgICAgICAgIGV4Y2VwdCB4bWwucGFyc2Vycy5leHBhdC5FeHBhdEVycm9yOgotICAg
ICAgICAgICAgICAgIHJldHVybiAiIgotICAgICAgICByZXR1cm4gIiIKLQotICAgIGRlZiBfZ2V0
X2FyY2hpdmVkX2pzb25fcmVzdWx0cyhzZWxmKToKLSAgICAgICAgIiIiUmVhZHMgb2xkIHJlc3Vs
dHMgSlNPTiBmaWxlIGlmIGl0IGV4aXN0cy4KLSAgICAgICAgUmV0dXJucyAoYXJjaGl2ZWRfcmVz
dWx0cywgZXJyb3IpIHR1cGxlIHdoZXJlIGVycm9yIGlzIE5vbmUgaWYgcmVzdWx0cwotICAgICAg
ICB3ZXJlIHN1Y2Nlc3NmdWxseSByZWFkLgotICAgICAgICAiIiIKLSAgICAgICAgcmVzdWx0c19q
c29uID0ge30KLSAgICAgICAgb2xkX3Jlc3VsdHMgPSBOb25lCi0gICAgICAgIGVycm9yID0gTm9u
ZQotCi0gICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYuX3Jlc3VsdHNfZmlsZV9wYXRoKToK
LSAgICAgICAgICAgIHdpdGggY29kZWNzLm9wZW4oc2VsZi5fcmVzdWx0c19maWxlX3BhdGgsICJy
IiwgInV0Zi04IikgYXMgZmlsZToKLSAgICAgICAgICAgICAgICBvbGRfcmVzdWx0cyA9IGZpbGUu
cmVhZCgpCi0gICAgICAgIGVsaWYgc2VsZi5fYnVpbGRlcl9iYXNlX3VybDoKLSAgICAgICAgICAg
ICMgQ2hlY2sgaWYgd2UgaGF2ZSB0aGUgYXJjaGl2ZWQgSlNPTiBmaWxlIG9uIHRoZSBidWlsZGJv
dCBzZXJ2ZXIuCi0gICAgICAgICAgICByZXN1bHRzX2ZpbGVfdXJsID0gKHNlbGYuX2J1aWxkZXJf
YmFzZV91cmwgKwotICAgICAgICAgICAgICAgIHNlbGYuX2J1aWxkX25hbWUgKyAiLyIgKyBzZWxm
LlJFU1VMVFNfRklMRU5BTUUpCi0gICAgICAgICAgICBfbG9nLmVycm9yKCJMb2NhbCByZXN1bHRz
Lmpzb24gZmlsZSBkb2VzIG5vdCBleGlzdC4gR3JhYmJpbmcgIgotICAgICAgICAgICAgICAgICAg
ICAgICAiaXQgb2ZmIHRoZSBhcmNoaXZlIGF0ICIgKyByZXN1bHRzX2ZpbGVfdXJsKQogCisgICAg
ICAgIHdlYmtpdF9zdm5fYmFzZSA9IE5vbmUKKyAgICAgICAgY2hyb21pdW1fc3ZuX2Jhc2UgPSBO
b25lCisgICAgICAgIGlmIGhhc2F0dHIocG9ydCwgJ3BhdGhfZnJvbV93ZWJraXRfYmFzZScpOgor
ICAgICAgICAgICAgd2Via2l0X3N2bl9iYXNlID0gcG9ydC5wYXRoX2Zyb21fd2Via2l0X2Jhc2Uo
J1dlYkNvcmUnKQorICAgICAgICBpZiBoYXNhdHRyKHBvcnQsICdwYXRoX2Zyb21fY2hyb21pdW1f
YmFzZScpOgogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHJlc3VsdHNfZmlsZSA9
IHVybGxpYjIudXJsb3BlbihyZXN1bHRzX2ZpbGVfdXJsKQotICAgICAgICAgICAgICAgIGluZm8g
PSByZXN1bHRzX2ZpbGUuaW5mbygpCi0gICAgICAgICAgICAgICAgb2xkX3Jlc3VsdHMgPSByZXN1
bHRzX2ZpbGUucmVhZCgpCi0gICAgICAgICAgICBleGNlcHQgdXJsbGliMi5IVFRQRXJyb3IsIGh0
dHBfZXJyb3I6Ci0gICAgICAgICAgICAgICAgIyBBIG5vbi00eHggc3RhdHVzIGNvZGUgbWVhbnMg
dGhlIGJvdCBpcyBob3NlZCBmb3Igc29tZSByZWFzb24KLSAgICAgICAgICAgICAgICAjIGFuZCB3
ZSBjYW4ndCBncmFiIHRoZSByZXN1bHRzLmpzb24gZmlsZSBvZmYgb2YgaXQuCi0gICAgICAgICAg
ICAgICAgaWYgKGh0dHBfZXJyb3IuY29kZSA8IDQwMCBhbmQgaHR0cF9lcnJvci5jb2RlID49IDUw
MCk6Ci0gICAgICAgICAgICAgICAgICAgIGVycm9yID0gaHR0cF9lcnJvcgotICAgICAgICAgICAg
ZXhjZXB0IHVybGxpYjIuVVJMRXJyb3IsIHVybF9lcnJvcjoKLSAgICAgICAgICAgICAgICBlcnJv
ciA9IHVybF9lcnJvcgotCi0gICAgICAgIGlmIG9sZF9yZXN1bHRzOgotICAgICAgICAgICAgIyBT
dHJpcCB0aGUgcHJlZml4IGFuZCBzdWZmaXggc28gd2UgY2FuIGdldCB0aGUgYWN0dWFsIEpTT04g
b2JqZWN0LgotICAgICAgICAgICAgb2xkX3Jlc3VsdHMgPSBvbGRfcmVzdWx0c1tsZW4oc2VsZi5K
U09OX1BSRUZJWCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbihv
bGRfcmVzdWx0cykgLSBsZW4oc2VsZi5KU09OX1NVRkZJWCldCi0KLSAgICAgICAgICAgIHRyeToK
LSAgICAgICAgICAgICAgICByZXN1bHRzX2pzb24gPSBzaW1wbGVqc29uLmxvYWRzKG9sZF9yZXN1
bHRzKQotICAgICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoInJl
c3VsdHMuanNvbiB3YXMgbm90IHZhbGlkIEpTT04uIENsb2JiZXJpbmcuIikKLSAgICAgICAgICAg
ICAgICAjIFRoZSBKU09OIGZpbGUgaXMgbm90IHZhbGlkIEpTT04uIEp1c3QgY2xvYmJlciB0aGUg
cmVzdWx0cy4KLSAgICAgICAgICAgICAgICByZXN1bHRzX2pzb24gPSB7fQotICAgICAgICBlbHNl
OgotICAgICAgICAgICAgX2xvZy5kZWJ1ZygnT2xkIEpTT04gcmVzdWx0cyBkbyBub3QgZXhpc3Qu
IFN0YXJ0aW5nIGZyZXNoLicpCi0gICAgICAgICAgICByZXN1bHRzX2pzb24gPSB7fQotCi0gICAg
ICAgIHJldHVybiByZXN1bHRzX2pzb24sIGVycm9yCi0KLSAgICBkZWYgX2dldF9qc29uKHNlbGYp
OgotICAgICAgICAiIiJHZXRzIHRoZSByZXN1bHRzIGZvciB0aGUgcmVzdWx0cy5qc29uIGZpbGUu
IiIiCi0gICAgICAgIHJlc3VsdHNfanNvbiwgZXJyb3IgPSBzZWxmLl9nZXRfYXJjaGl2ZWRfanNv
bl9yZXN1bHRzKCkKLSAgICAgICAgaWYgZXJyb3I6Ci0gICAgICAgICAgICAjIElmIHRoZXJlIHdh
cyBhbiBlcnJvciBkb24ndCB3cml0ZSBhIHJlc3VsdHMuanNvbgotICAgICAgICAgICAgIyBmaWxl
IGF0IGFsbCBhcyBpdCB3b3VsZCBsb3NlIGFsbCB0aGUgaW5mb3JtYXRpb24gb24gdGhlIGJvdC4K
LSAgICAgICAgICAgIF9sb2cuZXJyb3IoIkFyY2hpdmUgZGlyZWN0b3J5IGlzIGluYWNjZXNzaWJs
ZS4gTm90IG1vZGlmeWluZyAiCi0gICAgICAgICAgICAgICAgICAgICAgICJvciBjbG9iYmVyaW5n
IHRoZSByZXN1bHRzLmpzb24gZmlsZTogIiArIHN0cihlcnJvcikpCi0gICAgICAgICAgICByZXR1
cm4gTm9uZQotCi0gICAgICAgIGJ1aWxkZXJfbmFtZSA9IHNlbGYuX2J1aWxkZXJfbmFtZQotICAg
ICAgICBpZiByZXN1bHRzX2pzb24gYW5kIGJ1aWxkZXJfbmFtZSBub3QgaW4gcmVzdWx0c19qc29u
OgotICAgICAgICAgICAgX2xvZy5kZWJ1ZygiQnVpbGRlciBuYW1lICglcykgaXMgbm90IGluIHRo
ZSByZXN1bHRzLmpzb24gZmlsZS4iCi0gICAgICAgICAgICAgICAgICAgICAgICUgYnVpbGRlcl9u
YW1lKQotCi0gICAgICAgIHNlbGYuX2NvbnZlcnRfanNvbl90b19jdXJyZW50X3ZlcnNpb24ocmVz
dWx0c19qc29uKQotCi0gICAgICAgIGlmIGJ1aWxkZXJfbmFtZSBub3QgaW4gcmVzdWx0c19qc29u
OgotICAgICAgICAgICAgcmVzdWx0c19qc29uW2J1aWxkZXJfbmFtZV0gPSAoCi0gICAgICAgICAg
ICAgICAgc2VsZi5fY3JlYXRlX3Jlc3VsdHNfZm9yX2J1aWxkZXJfanNvbigpKQotCi0gICAgICAg
IHJlc3VsdHNfZm9yX2J1aWxkZXIgPSByZXN1bHRzX2pzb25bYnVpbGRlcl9uYW1lXQotCi0gICAg
ICAgIHNlbGYuX2luc2VydF9nZW5lcmljX21ldGFkYXRhKHJlc3VsdHNfZm9yX2J1aWxkZXIpCi0K
LSAgICAgICAgc2VsZi5faW5zZXJ0X2ZhaWx1cmVfc3VtbWFyaWVzKHJlc3VsdHNfZm9yX2J1aWxk
ZXIpCi0KLSAgICAgICAgIyBVcGRhdGUgdGhlIGFsbCBmYWlsaW5nIHRlc3RzIHdpdGggcmVzdWx0
IHR5cGUgYW5kIHRpbWUuCi0gICAgICAgIHRlc3RzID0gcmVzdWx0c19mb3JfYnVpbGRlcltzZWxm
LlRFU1RTXQotICAgICAgICBhbGxfZmFpbGluZ190ZXN0cyA9IHNldChzZWxmLl9mYWlsdXJlcy5p
dGVya2V5cygpKQotICAgICAgICBhbGxfZmFpbGluZ190ZXN0cy51cGRhdGUodGVzdHMuaXRlcmtl
eXMoKSkKLSAgICAgICAgZm9yIHRlc3QgaW4gYWxsX2ZhaWxpbmdfdGVzdHM6Ci0gICAgICAgICAg
ICBzZWxmLl9pbnNlcnRfdGVzdF90aW1lX2FuZF9yZXN1bHQodGVzdCwgdGVzdHMpCi0KLSAgICAg
ICAgIyBTcGVjaWZ5IHNlcGFyYXRvcnMgaW4gb3JkZXIgdG8gZ2V0IGNvbXBhY3QgZW5jb2Rpbmcu
Ci0gICAgICAgIHJlc3VsdHNfc3RyID0gc2ltcGxlanNvbi5kdW1wcyhyZXN1bHRzX2pzb24sIHNl
cGFyYXRvcnM9KCcsJywgJzonKSkKLSAgICAgICAgcmV0dXJuIHNlbGYuSlNPTl9QUkVGSVggKyBy
ZXN1bHRzX3N0ciArIHNlbGYuSlNPTl9TVUZGSVgKLQotICAgIGRlZiBfaW5zZXJ0X2ZhaWx1cmVf
c3VtbWFyaWVzKHNlbGYsIHJlc3VsdHNfZm9yX2J1aWxkZXIpOgotICAgICAgICAiIiJJbnNlcnRz
IGFnZ3JlZ2F0ZSBwYXNzL2ZhaWx1cmUgc3RhdGlzdGljcyBpbnRvIHRoZSBKU09OLgotICAgICAg
ICBUaGlzIG1ldGhvZCByZWFkcyBzZWxmLl9za2lwcGVkX3Rlc3RzLCBzZWxmLl9wYXNzZWRfdGVz
dHMgYW5kCi0gICAgICAgIHNlbGYuX2ZhaWx1cmVzIGFuZCBpbnNlcnRzIEZJWEFCTEUsIEZJWEFC
TEVfQ09VTlQgYW5kIEFMTF9GSVhBQkxFX0NPVU5UCi0gICAgICAgIGVudHJpZXMuCi0KLSAgICAg
ICAgQXJnczoKLSAgICAgICAgICByZXN1bHRzX2Zvcl9idWlsZGVyOiBEaWN0aW9uYXJ5IGNvbnRh
aW5pbmcgdGhlIHRlc3QgcmVzdWx0cyBmb3IgYQotICAgICAgICAgICAgICBzaW5nbGUgYnVpbGRl
ci4KLSAgICAgICAgIiIiCi0gICAgICAgICMgSW5zZXJ0IHRoZSBudW1iZXIgb2YgdGVzdHMgdGhh
dCBmYWlsZWQuCi0gICAgICAgIHNlbGYuX2luc2VydF9pdGVtX2ludG9fcmF3X2xpc3QocmVzdWx0
c19mb3JfYnVpbGRlciwKLSAgICAgICAgICAgIGxlbihzZXQoc2VsZi5fZmFpbHVyZXMua2V5cygp
KSB8IHNlbGYuX3NraXBwZWRfdGVzdHMpLAotICAgICAgICAgICAgc2VsZi5GSVhBQkxFX0NPVU5U
KQotCi0gICAgICAgICMgQ3JlYXRlIGEgcGFzcy9za2lwL2ZhaWx1cmUgc3VtbWFyeSBkaWN0aW9u
YXJ5LgotICAgICAgICBlbnRyeSA9IHt9Ci0gICAgICAgIGVudHJ5W3NlbGYuU0tJUF9SRVNVTFRd
ID0gbGVuKHNlbGYuX3NraXBwZWRfdGVzdHMpCi0gICAgICAgIGVudHJ5W3NlbGYuUEFTU19SRVNV
TFRdID0gbGVuKHNlbGYuX3Bhc3NlZF90ZXN0cykKLSAgICAgICAgZ2V0ID0gZW50cnkuZ2V0Ci0g
ICAgICAgIGZvciBmYWlsdXJlX3R5cGUgaW4gc2VsZi5fZmFpbHVyZXMudmFsdWVzKCk6Ci0gICAg
ICAgICAgICBmYWlsdXJlX2NoYXIgPSBzZWxmLkZBSUxVUkVfVE9fQ0hBUltmYWlsdXJlX3R5cGVd
Ci0gICAgICAgICAgICBlbnRyeVtmYWlsdXJlX2NoYXJdID0gZ2V0KGZhaWx1cmVfY2hhciwgMCkg
KyAxCi0KLSAgICAgICAgIyBJbnNlcnQgdGhlIHBhc3Mvc2tpcC9mYWlsdXJlIHN1bW1hcnkgZGlj
dGlvbmFyeS4KLSAgICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1faW50b19yYXdfbGlzdChyZXN1bHRz
X2Zvcl9idWlsZGVyLCBlbnRyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxmLkZJWEFCTEUpCi0KLSAgICAgICAgIyBJbnNlcnQgdGhlIG51bWJlciBvZiBhbGwg
dGhlIHRlc3RzIHRoYXQgYXJlIHN1cHBvc2VkIHRvIHBhc3MuCi0gICAgICAgIHNlbGYuX2luc2Vy
dF9pdGVtX2ludG9fcmF3X2xpc3QocmVzdWx0c19mb3JfYnVpbGRlciwKLSAgICAgICAgICAgIGxl
bihzZWxmLl9za2lwcGVkX3Rlc3RzIHwgc2VsZi5fYWxsX3Rlc3RzKSwKLSAgICAgICAgICAgIHNl
bGYuQUxMX0ZJWEFCTEVfQ09VTlQpCi0KLSAgICBkZWYgX2luc2VydF9pdGVtX2ludG9fcmF3X2xp
c3Qoc2VsZiwgcmVzdWx0c19mb3JfYnVpbGRlciwgaXRlbSwga2V5KToKLSAgICAgICAgIiIiSW5z
ZXJ0cyB0aGUgaXRlbSBpbnRvIHRoZSBsaXN0IHdpdGggdGhlIGdpdmVuIGtleSBpbiB0aGUgcmVz
dWx0cyBmb3IKLSAgICAgICAgdGhpcyBidWlsZGVyLiBDcmVhdGVzIHRoZSBsaXN0IGlmIG5vIHN1
Y2ggbGlzdCBleGlzdHMuCi0KLSAgICAgICAgQXJnczoKLSAgICAgICAgICByZXN1bHRzX2Zvcl9i
dWlsZGVyOiBEaWN0aW9uYXJ5IGNvbnRhaW5pbmcgdGhlIHRlc3QgcmVzdWx0cyBmb3IgYQotICAg
ICAgICAgICAgICBzaW5nbGUgYnVpbGRlci4KLSAgICAgICAgICBpdGVtOiBOdW1iZXIgb3Igc3Ry
aW5nIHRvIGluc2VydCBpbnRvIHRoZSBsaXN0LgotICAgICAgICAgIGtleTogS2V5IGluIHJlc3Vs
dHNfZm9yX2J1aWxkZXIgZm9yIHRoZSBsaXN0IHRvIGluc2VydCBpbnRvLgotICAgICAgICAiIiIK
LSAgICAgICAgaWYga2V5IGluIHJlc3VsdHNfZm9yX2J1aWxkZXI6Ci0gICAgICAgICAgICByYXdf
bGlzdCA9IHJlc3VsdHNfZm9yX2J1aWxkZXJba2V5XQotICAgICAgICBlbHNlOgotICAgICAgICAg
ICAgcmF3X2xpc3QgPSBbXQotCi0gICAgICAgIHJhd19saXN0Lmluc2VydCgwLCBpdGVtKQotICAg
ICAgICByYXdfbGlzdCA9IHJhd19saXN0WzpzZWxmLk1BWF9OVU1CRVJfT0ZfQlVJTERfUkVTVUxU
U19UT19MT0ddCi0gICAgICAgIHJlc3VsdHNfZm9yX2J1aWxkZXJba2V5XSA9IHJhd19saXN0Ci0K
LSAgICBkZWYgX2luc2VydF9pdGVtX3J1bl9sZW5ndGhfZW5jb2RlZChzZWxmLCBpdGVtLCBlbmNv
ZGVkX3Jlc3VsdHMpOgotICAgICAgICAiIiJJbnNlcnRzIHRoZSBpdGVtIGludG8gdGhlIHJ1bi1s
ZW5ndGggZW5jb2RlZCByZXN1bHRzLgotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgaXRlbTog
U3RyaW5nIG9yIG51bWJlciB0byBpbnNlcnQuCi0gICAgICAgICAgZW5jb2RlZF9yZXN1bHRzOiBy
dW4tbGVuZ3RoIGVuY29kZWQgcmVzdWx0cy4gQW4gYXJyYXkgb2YgYXJyYXlzLCBlLmcuCi0gICAg
ICAgICAgICAgIFtbMywnQSddLFsxLCdRJ11dIGVuY29kZXMgQUFBUS4KLSAgICAgICAgIiIiCi0g
ICAgICAgIGlmIGxlbihlbmNvZGVkX3Jlc3VsdHMpIGFuZCBpdGVtID09IGVuY29kZWRfcmVzdWx0
c1swXVsxXToKLSAgICAgICAgICAgIG51bV9yZXN1bHRzID0gZW5jb2RlZF9yZXN1bHRzWzBdWzBd
Ci0gICAgICAgICAgICBpZiBudW1fcmVzdWx0cyA8PSBzZWxmLk1BWF9OVU1CRVJfT0ZfQlVJTERf
UkVTVUxUU19UT19MT0c6Ci0gICAgICAgICAgICAgICAgZW5jb2RlZF9yZXN1bHRzWzBdWzBdID0g
bnVtX3Jlc3VsdHMgKyAxCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAjIFVzZSBhIGxpc3Qg
aW5zdGVhZCBvZiBhIGNsYXNzIGZvciB0aGUgcnVuLWxlbmd0aCBlbmNvZGluZyBzaW5jZQotICAg
ICAgICAgICAgIyB3ZSB3YW50IHRoZSBzZXJpYWxpemVkIGZvcm0gdG8gYmUgY29uY2lzZS4KLSAg
ICAgICAgICAgIGVuY29kZWRfcmVzdWx0cy5pbnNlcnQoMCwgWzEsIGl0ZW1dKQotCi0gICAgZGVm
IF9pbnNlcnRfZ2VuZXJpY19tZXRhZGF0YShzZWxmLCByZXN1bHRzX2Zvcl9idWlsZGVyKToKLSAg
ICAgICAgIiIiIEluc2VydHMgZ2VuZXJpYyBtZXRhZGF0YSAoc3VjaCBhcyB2ZXJzaW9uIG51bWJl
ciwgY3VycmVudCB0aW1lIGV0YykKLSAgICAgICAgaW50byB0aGUgSlNPTi4KLQotICAgICAgICBB
cmdzOgotICAgICAgICAgIHJlc3VsdHNfZm9yX2J1aWxkZXI6IERpY3Rpb25hcnkgY29udGFpbmlu
ZyB0aGUgdGVzdCByZXN1bHRzIGZvcgotICAgICAgICAgICAgICBhIHNpbmdsZSBidWlsZGVyLgot
ICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1faW50b19yYXdfbGlzdChyZXN1
bHRzX2Zvcl9idWlsZGVyLAotICAgICAgICAgICAgc2VsZi5fYnVpbGRfbnVtYmVyLCBzZWxmLkJV
SUxEX05VTUJFUlMpCi0KLSAgICAgICAgIyBUaGVzZSBuZXh0IHR3byBicmFuY2hlcyB0ZXN0IHRv
IHNlZSB3aGljaCBzb3VyY2UgcmVwb3Mgd2UgY2FuCi0gICAgICAgICMgcHVsbCByZXZpc2lvbnMg
ZnJvbS4KLSAgICAgICAgaWYgaGFzYXR0cihzZWxmLl9wb3J0LCAncGF0aF9mcm9tX3dlYmtpdF9i
YXNlJyk6Ci0gICAgICAgICAgICBwYXRoX3RvX3dlYmtpdCA9IHNlbGYuX3BvcnQucGF0aF9mcm9t
X3dlYmtpdF9iYXNlKCdXZWJDb3JlJykKLSAgICAgICAgICAgIHNlbGYuX2luc2VydF9pdGVtX2lu
dG9fcmF3X2xpc3QocmVzdWx0c19mb3JfYnVpbGRlciwKLSAgICAgICAgICAgICAgICBzZWxmLl9n
ZXRfc3ZuX3JldmlzaW9uKHBhdGhfdG9fd2Via2l0KSwKLSAgICAgICAgICAgICAgICBzZWxmLldF
QktJVF9TVk4pCi0KLSAgICAgICAgaWYgaGFzYXR0cihzZWxmLl9wb3J0LCAncGF0aF9mcm9tX2No
cm9taXVtX2Jhc2UnKToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBwYXRoX3Rv
X2Nocm9tZSA9IHNlbGYuX3BvcnQucGF0aF9mcm9tX2Nocm9taXVtX2Jhc2UoKQotICAgICAgICAg
ICAgICAgIHNlbGYuX2luc2VydF9pdGVtX2ludG9fcmF3X2xpc3QocmVzdWx0c19mb3JfYnVpbGRl
ciwKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fZ2V0X3N2bl9yZXZpc2lvbihwYXRoX3RvX2No
cm9tZSksCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuQ0hST01FX1NWTikKKyAgICAgICAgICAg
ICAgICBjaHJvbWl1bV9zdm5fYmFzZSA9IHBvcnQucGF0aF9mcm9tX2Nocm9taXVtX2Jhc2UoKQog
ICAgICAgICAgICAgZXhjZXB0IEFzc2VydGlvbkVycm9yOgogICAgICAgICAgICAgICAgICMgV2Un
cmUgbm90IGluIGEgQ2hyb21pdW0gY2hlY2tvdXQsIHRoYXQncyBvay4KICAgICAgICAgICAgICAg
ICBwYXNzCiAKLSAgICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1faW50b19yYXdfbGlzdChyZXN1bHRz
X2Zvcl9idWlsZGVyLAotICAgICAgICAgICAgaW50KHRpbWUudGltZSgpKSwKLSAgICAgICAgICAg
IHNlbGYuVElNRSkKLQotICAgIGRlZiBfaW5zZXJ0X3Rlc3RfdGltZV9hbmRfcmVzdWx0KHNlbGYs
IHRlc3RfbmFtZSwgdGVzdHMpOgotICAgICAgICAiIiIgSW5zZXJ0IGEgdGVzdCBpdGVtIHdpdGgg
aXRzIHJlc3VsdHMgdG8gdGhlIGdpdmVuIHRlc3RzIGRpY3Rpb25hcnkuCi0KLSAgICAgICAgQXJn
czoKLSAgICAgICAgICB0ZXN0czogRGljdGlvbmFyeSBjb250YWluaW5nIHRlc3QgcmVzdWx0IGVu
dHJpZXMuCi0gICAgICAgICIiIgotCi0gICAgICAgIHJlc3VsdCA9IEpTT05SZXN1bHRzR2VuZXJh
dG9yLlBBU1NfUkVTVUxUCi0gICAgICAgIHRpbWUgPSAwCi0KLSAgICAgICAgaWYgdGVzdF9uYW1l
IG5vdCBpbiBzZWxmLl9hbGxfdGVzdHM6Ci0gICAgICAgICAgICByZXN1bHQgPSBKU09OUmVzdWx0
c0dlbmVyYXRvci5OT19EQVRBX1JFU1VMVAotCi0gICAgICAgIGlmIHRlc3RfbmFtZSBpbiBzZWxm
Ll9mYWlsdXJlczoKLSAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuRkFJTFVSRV9UT19DSEFSW3Nl
bGYuX2ZhaWx1cmVzW3Rlc3RfbmFtZV1dCi0KLSAgICAgICAgaWYgdGVzdF9uYW1lIGluIHNlbGYu
X3Rlc3RfdGltaW5nczoKLSAgICAgICAgICAgICMgRmxvb3IgZm9yIG5vdyB0byBnZXQgdGltZSBp
biBzZWNvbmRzLgotICAgICAgICAgICAgdGltZSA9IGludChzZWxmLl90ZXN0X3RpbWluZ3NbdGVz
dF9uYW1lXSkKLQotICAgICAgICBpZiB0ZXN0X25hbWUgbm90IGluIHRlc3RzOgotICAgICAgICAg
ICAgdGVzdHNbdGVzdF9uYW1lXSA9IHNlbGYuX2NyZWF0ZV9yZXN1bHRzX2FuZF90aW1lc19qc29u
KCkKLQotICAgICAgICB0aGlzVGVzdCA9IHRlc3RzW3Rlc3RfbmFtZV0KLSAgICAgICAgc2VsZi5f
aW5zZXJ0X2l0ZW1fcnVuX2xlbmd0aF9lbmNvZGVkKHJlc3VsdCwgdGhpc1Rlc3Rbc2VsZi5SRVNV
TFRTXSkKLSAgICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1fcnVuX2xlbmd0aF9lbmNvZGVkKHRpbWUs
IHRoaXNUZXN0W3NlbGYuVElNRVNdKQotICAgICAgICBzZWxmLl9ub3JtYWxpemVfcmVzdWx0c19q
c29uKHRoaXNUZXN0LCB0ZXN0X25hbWUsIHRlc3RzKQotCi0gICAgZGVmIF9jb252ZXJ0X2pzb25f
dG9fY3VycmVudF92ZXJzaW9uKHNlbGYsIHJlc3VsdHNfanNvbik6Ci0gICAgICAgICIiIklmIHRo
ZSBKU09OIGRvZXMgbm90IG1hdGNoIHRoZSBjdXJyZW50IHZlcnNpb24sIGNvbnZlcnRzIGl0IHRv
IHRoZQotICAgICAgICBjdXJyZW50IHZlcnNpb24gYW5kIGFkZHMgaW4gdGhlIG5ldyB2ZXJzaW9u
IG51bWJlci4KLSAgICAgICAgIiIiCi0gICAgICAgIGlmIChzZWxmLlZFUlNJT05fS0VZIGluIHJl
c3VsdHNfanNvbiBhbmQKLSAgICAgICAgICAgIHJlc3VsdHNfanNvbltzZWxmLlZFUlNJT05fS0VZ
XSA9PSBzZWxmLlZFUlNJT04pOgotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgcmVzdWx0
c19qc29uW3NlbGYuVkVSU0lPTl9LRVldID0gc2VsZi5WRVJTSU9OCi0KLSAgICBkZWYgX2NyZWF0
ZV9yZXN1bHRzX2FuZF90aW1lc19qc29uKHNlbGYpOgotICAgICAgICByZXN1bHRzX2FuZF90aW1l
cyA9IHt9Ci0gICAgICAgIHJlc3VsdHNfYW5kX3RpbWVzW3NlbGYuUkVTVUxUU10gPSBbXQotICAg
ICAgICByZXN1bHRzX2FuZF90aW1lc1tzZWxmLlRJTUVTXSA9IFtdCi0gICAgICAgIHJldHVybiBy
ZXN1bHRzX2FuZF90aW1lcwotCi0gICAgZGVmIF9jcmVhdGVfcmVzdWx0c19mb3JfYnVpbGRlcl9q
c29uKHNlbGYpOgotICAgICAgICByZXN1bHRzX2Zvcl9idWlsZGVyID0ge30KLSAgICAgICAgcmVz
dWx0c19mb3JfYnVpbGRlcltzZWxmLlRFU1RTXSA9IHt9Ci0gICAgICAgIHJldHVybiByZXN1bHRz
X2Zvcl9idWlsZGVyCi0KLSAgICBkZWYgX3JlbW92ZV9pdGVtc19vdmVyX21heF9udW1iZXJfb2Zf
YnVpbGRzKHNlbGYsIGVuY29kZWRfbGlzdCk6Ci0gICAgICAgICIiIlJlbW92ZXMgaXRlbXMgZnJv
bSB0aGUgcnVuLWxlbmd0aCBlbmNvZGVkIGxpc3QgYWZ0ZXIgdGhlIGZpbmFsCi0gICAgICAgIGl0
ZW0gdGhhdCBleGNlZWRzIHRoZSBtYXggbnVtYmVyIG9mIGJ1aWxkcyB0byB0cmFjay4KLQotICAg
ICAgICBBcmdzOgotICAgICAgICAgIGVuY29kZWRfcmVzdWx0czogcnVuLWxlbmd0aCBlbmNvZGVk
IHJlc3VsdHMuIEFuIGFycmF5IG9mIGFycmF5cywgZS5nLgotICAgICAgICAgICAgICBbWzMsJ0En
XSxbMSwnUSddXSBlbmNvZGVzIEFBQVEuCi0gICAgICAgICIiIgotICAgICAgICBudW1fYnVpbGRz
ID0gMAotICAgICAgICBpbmRleCA9IDAKLSAgICAgICAgZm9yIHJlc3VsdCBpbiBlbmNvZGVkX2xp
c3Q6Ci0gICAgICAgICAgICBudW1fYnVpbGRzID0gbnVtX2J1aWxkcyArIHJlc3VsdFswXQotICAg
ICAgICAgICAgaW5kZXggPSBpbmRleCArIDEKLSAgICAgICAgICAgIGlmIG51bV9idWlsZHMgPiBz
ZWxmLk1BWF9OVU1CRVJfT0ZfQlVJTERfUkVTVUxUU19UT19MT0c6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGVuY29kZWRfbGlzdFs6aW5kZXhdCi0gICAgICAgIHJldHVybiBlbmNvZGVkX2xpc3QK
LQotICAgIGRlZiBfbm9ybWFsaXplX3Jlc3VsdHNfanNvbihzZWxmLCB0ZXN0LCB0ZXN0X25hbWUs
IHRlc3RzKToKLSAgICAgICAgIiIiIFBydW5lIHRlc3RzIHdoZXJlIGFsbCBydW5zIHBhc3Mgb3Ig
dGVzdHMgdGhhdCBubyBsb25nZXIgZXhpc3QgYW5kCi0gICAgICAgIHRydW5jYXRlIGFsbCByZXN1
bHRzIHRvIG1heE51bWJlck9mQnVpbGRzLgotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgdGVz
dDogUmVzdWx0c0FuZFRpbWVzIG9iamVjdCBmb3IgdGhpcyB0ZXN0LgotICAgICAgICAgIHRlc3Rf
bmFtZTogTmFtZSBvZiB0aGUgdGVzdC4KLSAgICAgICAgICB0ZXN0czogVGhlIEpTT04gb2JqZWN0
IHdpdGggYWxsIHRoZSB0ZXN0IHJlc3VsdHMgZm9yIHRoaXMgYnVpbGRlci4KLSAgICAgICAgIiIi
Ci0gICAgICAgIHRlc3Rbc2VsZi5SRVNVTFRTXSA9IHNlbGYuX3JlbW92ZV9pdGVtc19vdmVyX21h
eF9udW1iZXJfb2ZfYnVpbGRzKAotICAgICAgICAgICAgdGVzdFtzZWxmLlJFU1VMVFNdKQotICAg
ICAgICB0ZXN0W3NlbGYuVElNRVNdID0gc2VsZi5fcmVtb3ZlX2l0ZW1zX292ZXJfbWF4X251bWJl
cl9vZl9idWlsZHMoCi0gICAgICAgICAgICB0ZXN0W3NlbGYuVElNRVNdKQotCi0gICAgICAgIGlz
X2FsbF9wYXNzID0gc2VsZi5faXNfcmVzdWx0c19hbGxfb2ZfdHlwZSh0ZXN0W3NlbGYuUkVTVUxU
U10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLlBBU1NfUkVTVUxUKQotICAgICAgICBpc19hbGxfbm9fZGF0YSA9IHNlbGYuX2lzX3Jlc3Vs
dHNfYWxsX29mX3R5cGUodGVzdFtzZWxmLlJFU1VMVFNdLAotICAgICAgICAgICAgc2VsZi5OT19E
QVRBX1JFU1VMVCkKLSAgICAgICAgbWF4X3RpbWUgPSBtYXgoW3RpbWVbMV0gZm9yIHRpbWUgaW4g
dGVzdFtzZWxmLlRJTUVTXV0pCi0KLSAgICAgICAgIyBSZW1vdmUgYWxsIHBhc3Nlcy9uby1kYXRh
IGZyb20gdGhlIHJlc3VsdHMgdG8gcmVkdWNlIG5vaXNlIGFuZAotICAgICAgICAjIGZpbGVzaXpl
LiBJZiBhIHRlc3QgcGFzc2VzIGV2ZXJ5IHJ1biwgYnV0IHRha2VzID4gTUlOX1RJTUUgdG8gcnVu
LAotICAgICAgICAjIGRvbid0IHRocm93IGF3YXkgdGhlIGRhdGEuCi0gICAgICAgIGlmIGlzX2Fs
bF9ub19kYXRhIG9yIChpc19hbGxfcGFzcyBhbmQgbWF4X3RpbWUgPD0gc2VsZi5NSU5fVElNRSk6
Ci0gICAgICAgICAgICBkZWwgdGVzdHNbdGVzdF9uYW1lXQotCi0gICAgZGVmIF9pc19yZXN1bHRz
X2FsbF9vZl90eXBlKHNlbGYsIHJlc3VsdHMsIHR5cGUpOgotICAgICAgICAiIiJSZXR1cm5zIHdo
ZXRoZXIgYWxsIHRoZSByZXN1bHRzIGFyZSBvZiB0aGUgZ2l2ZW4gdHlwZQotICAgICAgICAoZS5n
LiBhbGwgcGFzc2VzKS4iIiIKLSAgICAgICAgcmV0dXJuIGxlbihyZXN1bHRzKSA9PSAxIGFuZCBy
ZXN1bHRzWzBdWzFdID09IHR5cGUKKyAgICAgICAgc3VwZXIoSlNPTlJlc3VsdHNHZW5lcmF0b3Is
IHNlbGYpLl9faW5pdF9fKAorICAgICAgICAgICAgYnVpbGRlcl9uYW1lLCBidWlsZF9uYW1lLCBi
dWlsZF9udW1iZXIsCisgICAgICAgICAgICByZXN1bHRzX2ZpbGVfYmFzZV9wYXRoLCBidWlsZGVy
X2Jhc2VfdXJsLAorICAgICAgICAgICAgdGVzdF90aW1pbmdzLCBmYWlsdXJlcywgcGFzc2VkX3Rl
c3RzLCBza2lwcGVkX3Rlc3RzLCBhbGxfdGVzdHMsCisgICAgICAgICAgICB3ZWJraXRfc3ZuX2Jh
c2U9d2Via2l0X3N2bl9iYXNlLAorICAgICAgICAgICAgY2hyb21pdW1fc3ZuX2Jhc2U9Y2hyb21p
dW1fc3ZuX2Jhc2UpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X2V4cGVjdGF0aW9ucy5weSBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfZXhw
ZWN0YXRpb25zLnB5CmluZGV4IDM4MjIzZGRkYmIyMzNiMGU0MzVlMWM3MjQ5NDViMTNlNDcxMThm
YjUuLjEwNjk1MzI1YjNhMDRjNDIyYzUwMTQ4YjI4OGE4ZGM4MmMyYjIwNDAgMTAwNjQ0Ci0tLSBh
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdl
L3Rlc3RfZXhwZWN0YXRpb25zLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfZXhwZWN0YXRpb25zLnB5CkBAIC0zNiwx
NCArMzYsMzAgQEAgaW1wb3J0IG9zCiBpbXBvcnQgcmUKIGltcG9ydCBzeXMKIAorZnJvbSB3ZWJr
aXRweS50ZXN0X3BhY2thZ2UgaW1wb3J0IHRlc3RfcmVzdWx0cwogaW1wb3J0IHdlYmtpdHB5LnRo
aXJkcGFydHkuc2ltcGxlanNvbiBhcyBzaW1wbGVqc29uCiAKIF9sb2cgPSBsb2dnaW5nLmdldExv
Z2dlcigid2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlLiIKICAgICAgICAgICAg
ICAgICAgICAgICAgICAidGVzdF9leHBlY3RhdGlvbnMiKQogCiAjIFRlc3QgZXhwZWN0YXRpb24g
YW5kIG1vZGlmaWVyIGNvbnN0YW50cy4KLShQQVNTLCBGQUlMLCBURVhULCBJTUFHRSwgSU1BR0Vf
UExVU19URVhULCBUSU1FT1VULCBDUkFTSCwgU0tJUCwgV09OVEZJWCwKLSBERUZFUiwgU0xPVywg
UkVCQVNFTElORSwgTUlTU0lORywgRkxBS1ksIE5PVywgTk9ORSkgPSByYW5nZSgxNikKKyMgVGhl
eSBuZWVkIHRvIG1hdGNoIHdpdGggd2Via2l0cHkudGVzdF9wYWNrYWdlLnRlc3RfcmVzdWx0cycg
b25lcy4KK1BBU1MgPSB0ZXN0X3Jlc3VsdHMuUEFTUworRkFJTCA9IHRlc3RfcmVzdWx0cy5GQUlM
CitURVhUID0gdGVzdF9yZXN1bHRzLlRFWFQKK0lNQUdFID0gdGVzdF9yZXN1bHRzLklNQUdFCitJ
TUFHRV9QTFVTX1RFWFQgPSB0ZXN0X3Jlc3VsdHMuSU1BR0VfUExVU19URVhUCitUSU1FT1VUID0g
dGVzdF9yZXN1bHRzLlRJTUVPVVQKK0NSQVNIID0gdGVzdF9yZXN1bHRzLkNSQVNICitTS0lQID0g
dGVzdF9yZXN1bHRzLlNLSVAKK1dPTlRGSVggPSB0ZXN0X3Jlc3VsdHMuV09OVEZJWAorREVGRVIg
PSB0ZXN0X3Jlc3VsdHMuREVGRVIKK1NMT1cgPSB0ZXN0X3Jlc3VsdHMuU0xPVworUkVCQVNFTElO
RSA9IHRlc3RfcmVzdWx0cy5SRUJBU0VMSU5FCitNSVNTSU5HID0gdGVzdF9yZXN1bHRzLk1JU1NJ
TkcKK0ZMQUtZID0gdGVzdF9yZXN1bHRzLkZMQUtZCitOT1cgPSB0ZXN0X3Jlc3VsdHMuTk9XCitO
T05FID0gdGVzdF9yZXN1bHRzLk5PTkUKIAogIyBUZXN0IGV4cGVjdGF0aW9uIGZpbGUgdXBkYXRl
IGFjdGlvbiBjb25zdGFudHMKIChOT19DSEFOR0UsIFJFTU9WRV9URVNULCBSRU1PVkVfUExBVEZP
Uk0sIEFERF9QTEFURk9STVNfRVhDRVBUX1RISVMpID0gcmFuZ2UoNCkKZGlmZiAtLWdpdCBhL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdF9wYWNrYWdlL19faW5pdF9fLnB5IGIvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90ZXN0X3BhY2thZ2UvX19pbml0X18ucHkKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MQpkaWZmIC0tZ2l0
IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90ZXN0X3BhY2thZ2UvanNvbl9yZXN1bHRz
X2dlbmVyYXRvci5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdF9wYWNrYWdl
L2pzb25fcmVzdWx0c19nZW5lcmF0b3IucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWM2MDVjMjZjMzFlY2I5MzVm
N2VlYjk5OGVlNTA3NTZiZjNhNThlNQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvdGVzdF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5lcmF0b3IucHkKQEAg
LTAsMCArMSw0MzMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMg
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
K2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgd2l0aF9zdGF0ZW1lbnQKKworaW1wb3J0IGNvZGVjcwor
aW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMK
K2ltcG9ydCB0aW1lCitpbXBvcnQgdXJsbGliMgoraW1wb3J0IHhtbC5kb20ubWluaWRvbQorCitm
cm9tIHdlYmtpdHB5LnRlc3RfcGFja2FnZSBpbXBvcnQgdGVzdF9yZXN1bHRzCitpbXBvcnQgd2Vi
a2l0cHkudGhpcmRwYXJ0eS5zaW1wbGVqc29uIGFzIHNpbXBsZWpzb24KKworX2xvZyA9IGxvZ2dp
bmcuZ2V0TG9nZ2VyKCJ3ZWJraXRweS50ZXN0X3BhY2thZ2UuanNvbl9yZXN1bHRzX2dlbmVyYXRv
ciIpCisKKworY2xhc3MgSlNPTlJlc3VsdHNHZW5lcmF0b3Iob2JqZWN0KToKKyAgICAiIiJBIEpT
T04gcmVzdWx0cyBnZW5lcmF0b3IgZm9yIGdlbmVyaWMgdGVzdHMuIiIiCisKKyAgICBNQVhfTlVN
QkVSX09GX0JVSUxEX1JFU1VMVFNfVE9fTE9HID0gNzUwCisgICAgIyBNaW4gdGltZSAoc2Vjb25k
cykgdGhhdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBKU09OLgorICAgIE1JTl9USU1FID0gMQorICAg
IEpTT05fUFJFRklYID0gIkFERF9SRVNVTFRTKCIKKyAgICBKU09OX1NVRkZJWCA9ICIpOyIKKyAg
ICBQQVNTX1JFU1VMVCA9ICJQIgorICAgIFNLSVBfUkVTVUxUID0gIlgiCisgICAgTk9fREFUQV9S
RVNVTFQgPSAiTiIKKyAgICBWRVJTSU9OID0gMworICAgIFZFUlNJT05fS0VZID0gInZlcnNpb24i
CisgICAgUkVTVUxUUyA9ICJyZXN1bHRzIgorICAgIFRJTUVTID0gInRpbWVzIgorICAgIEJVSUxE
X05VTUJFUlMgPSAiYnVpbGROdW1iZXJzIgorICAgIFdFQktJVF9TVk4gPSAid2Via2l0UmV2aXNp
b24iCisgICAgQ0hST01FX1NWTiA9ICJjaHJvbWVSZXZpc2lvbiIKKyAgICBUSU1FID0gInNlY29u
ZHNTaW5jZUVwb2NoIgorICAgIFRFU1RTID0gInRlc3RzIgorCisgICAgRklYQUJMRV9DT1VOVCA9
ICJmaXhhYmxlQ291bnQiCisgICAgRklYQUJMRSA9ICJmaXhhYmxlQ291bnRzIgorICAgIEFMTF9G
SVhBQkxFX0NPVU5UID0gImFsbEZpeGFibGVDb3VudCIKKworICAgICMgTm90ZSB0aGF0IHdlIG9t
aXQgdGVzdF9yZXN1bHRzLkZBSUwgZnJvbSB0aGlzIGxpc3QgYmVjYXVzZQorICAgICMgaXQgc2hv
dWxkIG5ldmVyIHNob3cgdXAgKGl0J3MgYSBsZWdhY3kgaW5wdXQgZXhwZWN0YXRpb24sIG5ldmVy
CisgICAgIyBhbiBvdXRwdXQgZXhwZWN0YXRpb24pLgorICAgIEZBSUxVUkVfVE9fQ0hBUiA9IHt0
ZXN0X3Jlc3VsdHMuQ1JBU0g6ICJDIiwKKyAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9yZXN1
bHRzLlRJTUVPVVQ6ICJUIiwKKyAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9yZXN1bHRzLklN
QUdFOiAiSSIsCisgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfcmVzdWx0cy5URVhUOiAiRiIs
CisgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfcmVzdWx0cy5NSVNTSU5HOiAiTyIsCisgICAg
ICAgICAgICAgICAgICAgICAgIHRlc3RfcmVzdWx0cy5JTUFHRV9QTFVTX1RFWFQ6ICJaIn0KKyAg
ICBGQUlMVVJFX0NIQVJTID0gRkFJTFVSRV9UT19DSEFSLnZhbHVlcygpCisKKyAgICBSRVNVTFRT
X0ZJTEVOQU1FID0gInJlc3VsdHMuanNvbiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBidWls
ZGVyX25hbWUsIGJ1aWxkX25hbWUsIGJ1aWxkX251bWJlciwKKyAgICAgICAgcmVzdWx0c19maWxl
X2Jhc2VfcGF0aCwgYnVpbGRlcl9iYXNlX3VybCwKKyAgICAgICAgdGVzdF90aW1pbmdzLCBmYWls
dXJlcywgcGFzc2VkX3Rlc3RzLCBza2lwcGVkX3Rlc3RzLCBhbGxfdGVzdHMsCisgICAgICAgIHdl
YmtpdF9zdm5fYmFzZT1Ob25lLCBjaHJvbWl1bV9zdm5fYmFzZT1Ob25lKToKKyAgICAgICAgIiIi
TW9kaWZpZXMgdGhlIHJlc3VsdHMuanNvbiBmaWxlLiBHcmFicyBpdCBvZmYgdGhlIGFyY2hpdmUg
ZGlyZWN0b3J5CisgICAgICAgIGlmIGl0IGlzIG5vdCBmb3VuZCBsb2NhbGx5LgorCisgICAgICAg
IEFyZ3MKKyAgICAgICAgICBidWlsZGVyX25hbWU6IHRoZSBidWlsZGVyIG5hbWUgKGUuZy4gV2Vi
a2l0KS4KKyAgICAgICAgICBidWlsZF9uYW1lOiB0aGUgYnVpbGQgbmFtZSAoZS5nLiB3ZWJraXQt
cmVsKS4KKyAgICAgICAgICBidWlsZF9udW1iZXI6IHRoZSBidWlsZCBudW1iZXIuCisgICAgICAg
ICAgcmVzdWx0c19maWxlX2Jhc2VfcGF0aDogQWJzb2x1dGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5
IGNvbnRhaW5pbmcgdGhlCisgICAgICAgICAgICAgIHJlc3VsdHMganNvbiBmaWxlLgorICAgICAg
ICAgIGJ1aWxkZXJfYmFzZV91cmw6IHRoZSBVUkwgd2hlcmUgd2UgaGF2ZSB0aGUgYXJjaGl2ZWQg
dGVzdCByZXN1bHRzLgorICAgICAgICAgIHRlc3RfdGltaW5nczogTWFwIG9mIHRlc3QgbmFtZSB0
byBhIHRlc3RfcnVuLXRpbWUuCisgICAgICAgICAgZmFpbHVyZXM6IE1hcCBvZiB0ZXN0IG5hbWUg
dG8gYSBmYWlsdXJlIHR5cGUgKG9mIHRlc3RfcmVzdWx0cyksIG9yCisgICAgICAgICAgICAgIGEg
bGlzdCAob3Igc2V0KSBvZiBmYWlsZWQgdGVzdCBuYW1lcy4KKyAgICAgICAgICBwYXNzZWRfdGVz
dHM6IEEgc2V0IGNvbnRhaW5pbmcgYWxsIHRoZSBwYXNzZWQgdGVzdHMuCisgICAgICAgICAgc2tp
cHBlZF90ZXN0czogQSBzZXQgY29udGFpbmluZyBhbGwgdGhlIHNraXBwZWQgdGVzdHMuCisgICAg
ICAgICAgYWxsX3Rlc3RzOiBMaXN0IG9mIGFsbCB0aGUgdGVzdHMgdGhhdCB3ZXJlIHJ1bi4gIFRo
aXMgc2hvdWxkIG5vdAorICAgICAgICAgICAgICBpbmNsdWRlIHNraXBwZWQgdGVzdHMuCisgICAg
ICAgICIiIgorICAgICAgICBzZWxmLl9idWlsZGVyX25hbWUgPSBidWlsZGVyX25hbWUKKyAgICAg
ICAgc2VsZi5fYnVpbGRfbmFtZSA9IGJ1aWxkX25hbWUKKyAgICAgICAgc2VsZi5fYnVpbGRfbnVt
YmVyID0gYnVpbGRfbnVtYmVyCisgICAgICAgIHNlbGYuX2J1aWxkZXJfYmFzZV91cmwgPSBidWls
ZGVyX2Jhc2VfdXJsCisgICAgICAgIHNlbGYuX3Jlc3VsdHNfZmlsZV9wYXRoID0gb3MucGF0aC5q
b2luKHJlc3VsdHNfZmlsZV9iYXNlX3BhdGgsCisgICAgICAgICAgICBzZWxmLlJFU1VMVFNfRklM
RU5BTUUpCisgICAgICAgIHNlbGYuX3Rlc3RfdGltaW5ncyA9IHRlc3RfdGltaW5ncworICAgICAg
ICBzZWxmLl9mYWlsdXJlcyA9IHt9CisgICAgICAgIGlmIHR5cGUoZmFpbHVyZXMpIGlzIGRpY3Q6
CisgICAgICAgICAgICBzZWxmLl9mYWlsdXJlcyA9IGZhaWx1cmVzCisgICAgICAgIGVsaWYgZ2V0
YXR0cihmYWlsdXJlcywgJ19faXRlcl9fJywgRmFsc2UpOgorICAgICAgICAgICAgIyBJZiB0aGUg
Z2l2ZW4gZmFpbHVyZXMgaXMgaXRlcmFibGUgYnV0IG5vdCBhIGRpY3QsIGxldHMgYXNzdW1lCisg
ICAgICAgICAgICAjIHRoYXQgZXZlcnkgZmFpbHVyZSB3YXMgYSBURVhUIGZhaWx1cmUuCisgICAg
ICAgICAgICBzZWxmLl9mYWlsdXJlcyA9IGRpY3QoWyhmLCB0ZXN0X3Jlc3VsdHMuVEVYVCkgZm9y
IGYgaW4gZmFpbHVyZXNdKQorICAgICAgICBzZWxmLl9wYXNzZWRfdGVzdHMgPSBwYXNzZWRfdGVz
dHMKKyAgICAgICAgc2VsZi5fc2tpcHBlZF90ZXN0cyA9IHNraXBwZWRfdGVzdHMKKyAgICAgICAg
c2VsZi5fYWxsX3Rlc3RzID0gYWxsX3Rlc3RzCisKKyAgICAgICAgc2VsZi5fd2Via2l0X3N2bl9i
YXNlID0gd2Via2l0X3N2bl9iYXNlCisgICAgICAgIHNlbGYuX2Nocm9taXVtX3N2bl9iYXNlID0g
Y2hyb21pdW1fc3ZuX2Jhc2UKKworICAgICAgICBzZWxmLl9nZW5lcmF0ZV9qc29uX291dHB1dCgp
CisKKyAgICBkZWYgX2dlbmVyYXRlX2pzb25fb3V0cHV0KHNlbGYpOgorICAgICAgICAiIiJHZW5l
cmF0ZXMgdGhlIEpTT04gb3V0cHV0IGZpbGUuIiIiCisgICAgICAgIGpzb24gPSBzZWxmLl9nZXRf
anNvbigpCisgICAgICAgIGlmIGpzb246CisgICAgICAgICAgICByZXN1bHRzX2ZpbGUgPSBjb2Rl
Y3Mub3BlbihzZWxmLl9yZXN1bHRzX2ZpbGVfcGF0aCwgInciLCAidXRmLTgiKQorICAgICAgICAg
ICAgcmVzdWx0c19maWxlLndyaXRlKGpzb24pCisgICAgICAgICAgICByZXN1bHRzX2ZpbGUuY2xv
c2UoKQorCisgICAgIyBGSVhNRTogQ2FsbGVycyBzaG91bGQgdXNlIHNjbS5weSBpbnN0ZWFkLgor
ICAgIGRlZiBfZ2V0X3N2bl9yZXZpc2lvbihzZWxmLCBpbl9kaXJlY3RvcnkpOgorICAgICAgICAi
IiJSZXR1cm5zIHRoZSBzdm4gcmV2aXNpb24gZm9yIHRoZSBnaXZlbiBkaXJlY3RvcnkuCisKKyAg
ICAgICAgQXJnczoKKyAgICAgICAgICBpbl9kaXJlY3Rvcnk6IFRoZSBkaXJlY3Rvcnkgd2hlcmUg
c3ZuIGlzIHRvIGJlIHJ1bi4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3Rz
KG9zLnBhdGguam9pbihpbl9kaXJlY3RvcnksICcuc3ZuJykpOgorICAgICAgICAgICAgIyBOb3Rl
OiBOb3QgdGhyZWFkIHNhZmU6IGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyMzIwCisgICAg
ICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLlBvcGVuKFsic3ZuIiwgImluZm8iLCAiLS14bWwi
XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3dkPWluX2RpcmVjdG9y
eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hlbGw9KHN5cy5wbGF0
Zm9ybSA9PSAnd2luMzInKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuY29tbXVuaWNhdGUoKVswXQorICAgICAgICAgICAgdHJ5
OgorICAgICAgICAgICAgICAgIGRvbSA9IHhtbC5kb20ubWluaWRvbS5wYXJzZVN0cmluZyhvdXRw
dXQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGRvbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZW50
cnknKVswXS5nZXRBdHRyaWJ1dGUoCisgICAgICAgICAgICAgICAgICAgICdyZXZpc2lvbicpCisg
ICAgICAgICAgICBleGNlcHQgeG1sLnBhcnNlcnMuZXhwYXQuRXhwYXRFcnJvcjoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gIiIKKyAgICAgICAgcmV0dXJuICIiCisKKyAgICBkZWYgX2dldF9hcmNo
aXZlZF9qc29uX3Jlc3VsdHMoc2VsZik6CisgICAgICAgICIiIlJlYWRzIG9sZCByZXN1bHRzIEpT
T04gZmlsZSBpZiBpdCBleGlzdHMuCisgICAgICAgIFJldHVybnMgKGFyY2hpdmVkX3Jlc3VsdHMs
IGVycm9yKSB0dXBsZSB3aGVyZSBlcnJvciBpcyBOb25lIGlmIHJlc3VsdHMKKyAgICAgICAgd2Vy
ZSBzdWNjZXNzZnVsbHkgcmVhZC4KKyAgICAgICAgIiIiCisgICAgICAgIHJlc3VsdHNfanNvbiA9
IHt9CisgICAgICAgIG9sZF9yZXN1bHRzID0gTm9uZQorICAgICAgICBlcnJvciA9IE5vbmUKKwor
ICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLl9yZXN1bHRzX2ZpbGVfcGF0aCk6CisgICAg
ICAgICAgICB3aXRoIGNvZGVjcy5vcGVuKHNlbGYuX3Jlc3VsdHNfZmlsZV9wYXRoLCAiciIsICJ1
dGYtOCIpIGFzIGZpbGU6CisgICAgICAgICAgICAgICAgb2xkX3Jlc3VsdHMgPSBmaWxlLnJlYWQo
KQorICAgICAgICBlbGlmIHNlbGYuX2J1aWxkZXJfYmFzZV91cmw6CisgICAgICAgICAgICAjIENo
ZWNrIGlmIHdlIGhhdmUgdGhlIGFyY2hpdmVkIEpTT04gZmlsZSBvbiB0aGUgYnVpbGRib3Qgc2Vy
dmVyLgorICAgICAgICAgICAgcmVzdWx0c19maWxlX3VybCA9IChzZWxmLl9idWlsZGVyX2Jhc2Vf
dXJsICsKKyAgICAgICAgICAgICAgICBzZWxmLl9idWlsZF9uYW1lICsgIi8iICsgc2VsZi5SRVNV
TFRTX0ZJTEVOQU1FKQorICAgICAgICAgICAgX2xvZy5lcnJvcigiTG9jYWwgcmVzdWx0cy5qc29u
IGZpbGUgZG9lcyBub3QgZXhpc3QuIEdyYWJiaW5nICIKKyAgICAgICAgICAgICAgICAgICAgICAg
Iml0IG9mZiB0aGUgYXJjaGl2ZSBhdCAiICsgcmVzdWx0c19maWxlX3VybCkKKworICAgICAgICAg
ICAgdHJ5OgorICAgICAgICAgICAgICAgIHJlc3VsdHNfZmlsZSA9IHVybGxpYjIudXJsb3Blbihy
ZXN1bHRzX2ZpbGVfdXJsKQorICAgICAgICAgICAgICAgIGluZm8gPSByZXN1bHRzX2ZpbGUuaW5m
bygpCisgICAgICAgICAgICAgICAgb2xkX3Jlc3VsdHMgPSByZXN1bHRzX2ZpbGUucmVhZCgpCisg
ICAgICAgICAgICBleGNlcHQgdXJsbGliMi5IVFRQRXJyb3IsIGh0dHBfZXJyb3I6CisgICAgICAg
ICAgICAgICAgIyBBIG5vbi00eHggc3RhdHVzIGNvZGUgbWVhbnMgdGhlIGJvdCBpcyBob3NlZCBm
b3Igc29tZSByZWFzb24KKyAgICAgICAgICAgICAgICAjIGFuZCB3ZSBjYW4ndCBncmFiIHRoZSBy
ZXN1bHRzLmpzb24gZmlsZSBvZmYgb2YgaXQuCisgICAgICAgICAgICAgICAgaWYgKGh0dHBfZXJy
b3IuY29kZSA8IDQwMCBhbmQgaHR0cF9lcnJvci5jb2RlID49IDUwMCk6CisgICAgICAgICAgICAg
ICAgICAgIGVycm9yID0gaHR0cF9lcnJvcgorICAgICAgICAgICAgZXhjZXB0IHVybGxpYjIuVVJM
RXJyb3IsIHVybF9lcnJvcjoKKyAgICAgICAgICAgICAgICBlcnJvciA9IHVybF9lcnJvcgorCisg
ICAgICAgIGlmIG9sZF9yZXN1bHRzOgorICAgICAgICAgICAgIyBTdHJpcCB0aGUgcHJlZml4IGFu
ZCBzdWZmaXggc28gd2UgY2FuIGdldCB0aGUgYWN0dWFsIEpTT04gb2JqZWN0LgorICAgICAgICAg
ICAgb2xkX3Jlc3VsdHMgPSBvbGRfcmVzdWx0c1tsZW4oc2VsZi5KU09OX1BSRUZJWCk6CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbihvbGRfcmVzdWx0cykgLSBsZW4o
c2VsZi5KU09OX1NVRkZJWCldCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBy
ZXN1bHRzX2pzb24gPSBzaW1wbGVqc29uLmxvYWRzKG9sZF9yZXN1bHRzKQorICAgICAgICAgICAg
ZXhjZXB0OgorICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoInJlc3VsdHMuanNvbiB3YXMgbm90
IHZhbGlkIEpTT04uIENsb2JiZXJpbmcuIikKKyAgICAgICAgICAgICAgICAjIFRoZSBKU09OIGZp
bGUgaXMgbm90IHZhbGlkIEpTT04uIEp1c3QgY2xvYmJlciB0aGUgcmVzdWx0cy4KKyAgICAgICAg
ICAgICAgICByZXN1bHRzX2pzb24gPSB7fQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgX2xv
Zy5kZWJ1ZygnT2xkIEpTT04gcmVzdWx0cyBkbyBub3QgZXhpc3QuIFN0YXJ0aW5nIGZyZXNoLicp
CisgICAgICAgICAgICByZXN1bHRzX2pzb24gPSB7fQorCisgICAgICAgIHJldHVybiByZXN1bHRz
X2pzb24sIGVycm9yCisKKyAgICBkZWYgX2dldF9qc29uKHNlbGYpOgorICAgICAgICAiIiJHZXRz
IHRoZSByZXN1bHRzIGZvciB0aGUgcmVzdWx0cy5qc29uIGZpbGUuIiIiCisgICAgICAgIHJlc3Vs
dHNfanNvbiwgZXJyb3IgPSBzZWxmLl9nZXRfYXJjaGl2ZWRfanNvbl9yZXN1bHRzKCkKKyAgICAg
ICAgaWYgZXJyb3I6CisgICAgICAgICAgICAjIElmIHRoZXJlIHdhcyBhbiBlcnJvciBkb24ndCB3
cml0ZSBhIHJlc3VsdHMuanNvbgorICAgICAgICAgICAgIyBmaWxlIGF0IGFsbCBhcyBpdCB3b3Vs
ZCBsb3NlIGFsbCB0aGUgaW5mb3JtYXRpb24gb24gdGhlIGJvdC4KKyAgICAgICAgICAgIF9sb2cu
ZXJyb3IoIkFyY2hpdmUgZGlyZWN0b3J5IGlzIGluYWNjZXNzaWJsZS4gTm90IG1vZGlmeWluZyAi
CisgICAgICAgICAgICAgICAgICAgICAgICJvciBjbG9iYmVyaW5nIHRoZSByZXN1bHRzLmpzb24g
ZmlsZTogIiArIHN0cihlcnJvcikpCisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAg
IGJ1aWxkZXJfbmFtZSA9IHNlbGYuX2J1aWxkZXJfbmFtZQorICAgICAgICBpZiByZXN1bHRzX2pz
b24gYW5kIGJ1aWxkZXJfbmFtZSBub3QgaW4gcmVzdWx0c19qc29uOgorICAgICAgICAgICAgX2xv
Zy5kZWJ1ZygiQnVpbGRlciBuYW1lICglcykgaXMgbm90IGluIHRoZSByZXN1bHRzLmpzb24gZmls
ZS4iCisgICAgICAgICAgICAgICAgICAgICAgICUgYnVpbGRlcl9uYW1lKQorCisgICAgICAgIHNl
bGYuX2NvbnZlcnRfanNvbl90b19jdXJyZW50X3ZlcnNpb24ocmVzdWx0c19qc29uKQorCisgICAg
ICAgIGlmIGJ1aWxkZXJfbmFtZSBub3QgaW4gcmVzdWx0c19qc29uOgorICAgICAgICAgICAgcmVz
dWx0c19qc29uW2J1aWxkZXJfbmFtZV0gPSAoCisgICAgICAgICAgICAgICAgc2VsZi5fY3JlYXRl
X3Jlc3VsdHNfZm9yX2J1aWxkZXJfanNvbigpKQorCisgICAgICAgIHJlc3VsdHNfZm9yX2J1aWxk
ZXIgPSByZXN1bHRzX2pzb25bYnVpbGRlcl9uYW1lXQorCisgICAgICAgIHNlbGYuX2luc2VydF9n
ZW5lcmljX21ldGFkYXRhKHJlc3VsdHNfZm9yX2J1aWxkZXIpCisKKyAgICAgICAgc2VsZi5faW5z
ZXJ0X2ZhaWx1cmVfc3VtbWFyaWVzKHJlc3VsdHNfZm9yX2J1aWxkZXIpCisKKyAgICAgICAgIyBV
cGRhdGUgdGhlIGFsbCBmYWlsaW5nIHRlc3RzIHdpdGggcmVzdWx0IHR5cGUgYW5kIHRpbWUuCisg
ICAgICAgIHRlc3RzID0gcmVzdWx0c19mb3JfYnVpbGRlcltzZWxmLlRFU1RTXQorICAgICAgICBh
bGxfZmFpbGluZ190ZXN0cyA9IHNldChzZWxmLl9mYWlsdXJlcy5pdGVya2V5cygpKQorICAgICAg
ICBhbGxfZmFpbGluZ190ZXN0cy51cGRhdGUodGVzdHMuaXRlcmtleXMoKSkKKyAgICAgICAgZm9y
IHRlc3QgaW4gYWxsX2ZhaWxpbmdfdGVzdHM6CisgICAgICAgICAgICBzZWxmLl9pbnNlcnRfdGVz
dF90aW1lX2FuZF9yZXN1bHQodGVzdCwgdGVzdHMpCisKKyAgICAgICAgIyBTcGVjaWZ5IHNlcGFy
YXRvcnMgaW4gb3JkZXIgdG8gZ2V0IGNvbXBhY3QgZW5jb2RpbmcuCisgICAgICAgIHJlc3VsdHNf
c3RyID0gc2ltcGxlanNvbi5kdW1wcyhyZXN1bHRzX2pzb24sIHNlcGFyYXRvcnM9KCcsJywgJzon
KSkKKyAgICAgICAgcmV0dXJuIHNlbGYuSlNPTl9QUkVGSVggKyByZXN1bHRzX3N0ciArIHNlbGYu
SlNPTl9TVUZGSVgKKworICAgIGRlZiBfaW5zZXJ0X2ZhaWx1cmVfc3VtbWFyaWVzKHNlbGYsIHJl
c3VsdHNfZm9yX2J1aWxkZXIpOgorICAgICAgICAiIiJJbnNlcnRzIGFnZ3JlZ2F0ZSBwYXNzL2Zh
aWx1cmUgc3RhdGlzdGljcyBpbnRvIHRoZSBKU09OLgorICAgICAgICBUaGlzIG1ldGhvZCByZWFk
cyBzZWxmLl9za2lwcGVkX3Rlc3RzLCBzZWxmLl9wYXNzZWRfdGVzdHMgYW5kCisgICAgICAgIHNl
bGYuX2ZhaWx1cmVzIGFuZCBpbnNlcnRzIEZJWEFCTEUsIEZJWEFCTEVfQ09VTlQgYW5kIEFMTF9G
SVhBQkxFX0NPVU5UCisgICAgICAgIGVudHJpZXMuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAg
ICByZXN1bHRzX2Zvcl9idWlsZGVyOiBEaWN0aW9uYXJ5IGNvbnRhaW5pbmcgdGhlIHRlc3QgcmVz
dWx0cyBmb3IgYQorICAgICAgICAgICAgICBzaW5nbGUgYnVpbGRlci4KKyAgICAgICAgIiIiCisg
ICAgICAgICMgSW5zZXJ0IHRoZSBudW1iZXIgb2YgdGVzdHMgdGhhdCBmYWlsZWQuCisgICAgICAg
IHNlbGYuX2luc2VydF9pdGVtX2ludG9fcmF3X2xpc3QocmVzdWx0c19mb3JfYnVpbGRlciwKKyAg
ICAgICAgICAgIGxlbihzZXQoc2VsZi5fZmFpbHVyZXMua2V5cygpKSB8IHNlbGYuX3NraXBwZWRf
dGVzdHMpLAorICAgICAgICAgICAgc2VsZi5GSVhBQkxFX0NPVU5UKQorCisgICAgICAgICMgQ3Jl
YXRlIGEgcGFzcy9za2lwL2ZhaWx1cmUgc3VtbWFyeSBkaWN0aW9uYXJ5LgorICAgICAgICBlbnRy
eSA9IHt9CisgICAgICAgIGVudHJ5W3NlbGYuU0tJUF9SRVNVTFRdID0gbGVuKHNlbGYuX3NraXBw
ZWRfdGVzdHMpCisgICAgICAgIGVudHJ5W3NlbGYuUEFTU19SRVNVTFRdID0gbGVuKHNlbGYuX3Bh
c3NlZF90ZXN0cykKKyAgICAgICAgZ2V0ID0gZW50cnkuZ2V0CisgICAgICAgIGZvciBmYWlsdXJl
X3R5cGUgaW4gc2VsZi5fZmFpbHVyZXMudmFsdWVzKCk6CisgICAgICAgICAgICBmYWlsdXJlX2No
YXIgPSBzZWxmLkZBSUxVUkVfVE9fQ0hBUltmYWlsdXJlX3R5cGVdCisgICAgICAgICAgICBlbnRy
eVtmYWlsdXJlX2NoYXJdID0gZ2V0KGZhaWx1cmVfY2hhciwgMCkgKyAxCisKKyAgICAgICAgIyBJ
bnNlcnQgdGhlIHBhc3Mvc2tpcC9mYWlsdXJlIHN1bW1hcnkgZGljdGlvbmFyeS4KKyAgICAgICAg
c2VsZi5faW5zZXJ0X2l0ZW1faW50b19yYXdfbGlzdChyZXN1bHRzX2Zvcl9idWlsZGVyLCBlbnRy
eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLkZJWEFCTEUp
CisKKyAgICAgICAgIyBJbnNlcnQgdGhlIG51bWJlciBvZiBhbGwgdGhlIHRlc3RzIHRoYXQgYXJl
IHN1cHBvc2VkIHRvIHBhc3MuCisgICAgICAgIHNlbGYuX2luc2VydF9pdGVtX2ludG9fcmF3X2xp
c3QocmVzdWx0c19mb3JfYnVpbGRlciwKKyAgICAgICAgICAgIGxlbihzZWxmLl9za2lwcGVkX3Rl
c3RzIHwgc2VsZi5fYWxsX3Rlc3RzKSwKKyAgICAgICAgICAgIHNlbGYuQUxMX0ZJWEFCTEVfQ09V
TlQpCisKKyAgICBkZWYgX2luc2VydF9pdGVtX2ludG9fcmF3X2xpc3Qoc2VsZiwgcmVzdWx0c19m
b3JfYnVpbGRlciwgaXRlbSwga2V5KToKKyAgICAgICAgIiIiSW5zZXJ0cyB0aGUgaXRlbSBpbnRv
IHRoZSBsaXN0IHdpdGggdGhlIGdpdmVuIGtleSBpbiB0aGUgcmVzdWx0cyBmb3IKKyAgICAgICAg
dGhpcyBidWlsZGVyLiBDcmVhdGVzIHRoZSBsaXN0IGlmIG5vIHN1Y2ggbGlzdCBleGlzdHMuCisK
KyAgICAgICAgQXJnczoKKyAgICAgICAgICByZXN1bHRzX2Zvcl9idWlsZGVyOiBEaWN0aW9uYXJ5
IGNvbnRhaW5pbmcgdGhlIHRlc3QgcmVzdWx0cyBmb3IgYQorICAgICAgICAgICAgICBzaW5nbGUg
YnVpbGRlci4KKyAgICAgICAgICBpdGVtOiBOdW1iZXIgb3Igc3RyaW5nIHRvIGluc2VydCBpbnRv
IHRoZSBsaXN0LgorICAgICAgICAgIGtleTogS2V5IGluIHJlc3VsdHNfZm9yX2J1aWxkZXIgZm9y
IHRoZSBsaXN0IHRvIGluc2VydCBpbnRvLgorICAgICAgICAiIiIKKyAgICAgICAgaWYga2V5IGlu
IHJlc3VsdHNfZm9yX2J1aWxkZXI6CisgICAgICAgICAgICByYXdfbGlzdCA9IHJlc3VsdHNfZm9y
X2J1aWxkZXJba2V5XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmF3X2xpc3QgPSBbXQor
CisgICAgICAgIHJhd19saXN0Lmluc2VydCgwLCBpdGVtKQorICAgICAgICByYXdfbGlzdCA9IHJh
d19saXN0WzpzZWxmLk1BWF9OVU1CRVJfT0ZfQlVJTERfUkVTVUxUU19UT19MT0ddCisgICAgICAg
IHJlc3VsdHNfZm9yX2J1aWxkZXJba2V5XSA9IHJhd19saXN0CisKKyAgICBkZWYgX2luc2VydF9p
dGVtX3J1bl9sZW5ndGhfZW5jb2RlZChzZWxmLCBpdGVtLCBlbmNvZGVkX3Jlc3VsdHMpOgorICAg
ICAgICAiIiJJbnNlcnRzIHRoZSBpdGVtIGludG8gdGhlIHJ1bi1sZW5ndGggZW5jb2RlZCByZXN1
bHRzLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgaXRlbTogU3RyaW5nIG9yIG51bWJlciB0
byBpbnNlcnQuCisgICAgICAgICAgZW5jb2RlZF9yZXN1bHRzOiBydW4tbGVuZ3RoIGVuY29kZWQg
cmVzdWx0cy4gQW4gYXJyYXkgb2YgYXJyYXlzLCBlLmcuCisgICAgICAgICAgICAgIFtbMywnQSdd
LFsxLCdRJ11dIGVuY29kZXMgQUFBUS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGxlbihlbmNv
ZGVkX3Jlc3VsdHMpIGFuZCBpdGVtID09IGVuY29kZWRfcmVzdWx0c1swXVsxXToKKyAgICAgICAg
ICAgIG51bV9yZXN1bHRzID0gZW5jb2RlZF9yZXN1bHRzWzBdWzBdCisgICAgICAgICAgICBpZiBu
dW1fcmVzdWx0cyA8PSBzZWxmLk1BWF9OVU1CRVJfT0ZfQlVJTERfUkVTVUxUU19UT19MT0c6Cisg
ICAgICAgICAgICAgICAgZW5jb2RlZF9yZXN1bHRzWzBdWzBdID0gbnVtX3Jlc3VsdHMgKyAxCisg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFVzZSBhIGxpc3QgaW5zdGVhZCBvZiBhIGNsYXNz
IGZvciB0aGUgcnVuLWxlbmd0aCBlbmNvZGluZyBzaW5jZQorICAgICAgICAgICAgIyB3ZSB3YW50
IHRoZSBzZXJpYWxpemVkIGZvcm0gdG8gYmUgY29uY2lzZS4KKyAgICAgICAgICAgIGVuY29kZWRf
cmVzdWx0cy5pbnNlcnQoMCwgWzEsIGl0ZW1dKQorCisgICAgZGVmIF9pbnNlcnRfZ2VuZXJpY19t
ZXRhZGF0YShzZWxmLCByZXN1bHRzX2Zvcl9idWlsZGVyKToKKyAgICAgICAgIiIiIEluc2VydHMg
Z2VuZXJpYyBtZXRhZGF0YSAoc3VjaCBhcyB2ZXJzaW9uIG51bWJlciwgY3VycmVudCB0aW1lIGV0
YykKKyAgICAgICAgaW50byB0aGUgSlNPTi4KKworICAgICAgICBBcmdzOgorICAgICAgICAgIHJl
c3VsdHNfZm9yX2J1aWxkZXI6IERpY3Rpb25hcnkgY29udGFpbmluZyB0aGUgdGVzdCByZXN1bHRz
IGZvcgorICAgICAgICAgICAgICBhIHNpbmdsZSBidWlsZGVyLgorICAgICAgICAiIiIKKyAgICAg
ICAgc2VsZi5faW5zZXJ0X2l0ZW1faW50b19yYXdfbGlzdChyZXN1bHRzX2Zvcl9idWlsZGVyLAor
ICAgICAgICAgICAgc2VsZi5fYnVpbGRfbnVtYmVyLCBzZWxmLkJVSUxEX05VTUJFUlMpCisKKyAg
ICAgICAgaWYgc2VsZi5fd2Via2l0X3N2bl9iYXNlOgorICAgICAgICAgICAgc2VsZi5faW5zZXJ0
X2l0ZW1faW50b19yYXdfbGlzdChyZXN1bHRzX2Zvcl9idWlsZGVyLAorICAgICAgICAgICAgICAg
IHNlbGYuX2dldF9zdm5fcmV2aXNpb24oc2VsZi5fd2Via2l0X3N2bl9iYXNlKSwKKyAgICAgICAg
ICAgICAgICBzZWxmLldFQktJVF9TVk4pCisgICAgICAgIGlmIHNlbGYuX2Nocm9taXVtX3N2bl9i
YXNlOgorICAgICAgICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1faW50b19yYXdfbGlzdChyZXN1bHRz
X2Zvcl9idWlsZGVyLAorICAgICAgICAgICAgICAgIHNlbGYuX2dldF9zdm5fcmV2aXNpb24oc2Vs
Zi5fY2hyb21pdW1fc3ZuX2Jhc2UpLAorICAgICAgICAgICAgICAgIHNlbGYuQ0hST01FX1NWTikK
KworICAgICAgICBzZWxmLl9pbnNlcnRfaXRlbV9pbnRvX3Jhd19saXN0KHJlc3VsdHNfZm9yX2J1
aWxkZXIsCisgICAgICAgICAgICBpbnQodGltZS50aW1lKCkpLAorICAgICAgICAgICAgc2VsZi5U
SU1FKQorCisgICAgZGVmIF9pbnNlcnRfdGVzdF90aW1lX2FuZF9yZXN1bHQoc2VsZiwgdGVzdF9u
YW1lLCB0ZXN0cyk6CisgICAgICAgICIiIiBJbnNlcnQgYSB0ZXN0IGl0ZW0gd2l0aCBpdHMgcmVz
dWx0cyB0byB0aGUgZ2l2ZW4gdGVzdHMgZGljdGlvbmFyeS4KKworICAgICAgICBBcmdzOgorICAg
ICAgICAgIHRlc3RzOiBEaWN0aW9uYXJ5IGNvbnRhaW5pbmcgdGVzdCByZXN1bHQgZW50cmllcy4K
KyAgICAgICAgIiIiCisKKyAgICAgICAgcmVzdWx0ID0gSlNPTlJlc3VsdHNHZW5lcmF0b3IuUEFT
U19SRVNVTFQKKyAgICAgICAgdGltZSA9IDAKKworICAgICAgICBpZiB0ZXN0X25hbWUgbm90IGlu
IHNlbGYuX2FsbF90ZXN0czoKKyAgICAgICAgICAgIHJlc3VsdCA9IEpTT05SZXN1bHRzR2VuZXJh
dG9yLk5PX0RBVEFfUkVTVUxUCisKKyAgICAgICAgaWYgdGVzdF9uYW1lIGluIHNlbGYuX2ZhaWx1
cmVzOgorICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5GQUlMVVJFX1RPX0NIQVJbc2VsZi5fZmFp
bHVyZXNbdGVzdF9uYW1lXV0KKworICAgICAgICBpZiB0ZXN0X25hbWUgaW4gc2VsZi5fdGVzdF90
aW1pbmdzOgorICAgICAgICAgICAgIyBGbG9vciBmb3Igbm93IHRvIGdldCB0aW1lIGluIHNlY29u
ZHMuCisgICAgICAgICAgICB0aW1lID0gaW50KHNlbGYuX3Rlc3RfdGltaW5nc1t0ZXN0X25hbWVd
KQorCisgICAgICAgIGlmIHRlc3RfbmFtZSBub3QgaW4gdGVzdHM6CisgICAgICAgICAgICB0ZXN0
c1t0ZXN0X25hbWVdID0gc2VsZi5fY3JlYXRlX3Jlc3VsdHNfYW5kX3RpbWVzX2pzb24oKQorCisg
ICAgICAgIHRoaXNUZXN0ID0gdGVzdHNbdGVzdF9uYW1lXQorICAgICAgICBzZWxmLl9pbnNlcnRf
aXRlbV9ydW5fbGVuZ3RoX2VuY29kZWQocmVzdWx0LCB0aGlzVGVzdFtzZWxmLlJFU1VMVFNdKQor
ICAgICAgICBzZWxmLl9pbnNlcnRfaXRlbV9ydW5fbGVuZ3RoX2VuY29kZWQodGltZSwgdGhpc1Rl
c3Rbc2VsZi5USU1FU10pCisgICAgICAgIHNlbGYuX25vcm1hbGl6ZV9yZXN1bHRzX2pzb24odGhp
c1Rlc3QsIHRlc3RfbmFtZSwgdGVzdHMpCisKKyAgICBkZWYgX2NvbnZlcnRfanNvbl90b19jdXJy
ZW50X3ZlcnNpb24oc2VsZiwgcmVzdWx0c19qc29uKToKKyAgICAgICAgIiIiSWYgdGhlIEpTT04g
ZG9lcyBub3QgbWF0Y2ggdGhlIGN1cnJlbnQgdmVyc2lvbiwgY29udmVydHMgaXQgdG8gdGhlCisg
ICAgICAgIGN1cnJlbnQgdmVyc2lvbiBhbmQgYWRkcyBpbiB0aGUgbmV3IHZlcnNpb24gbnVtYmVy
LgorICAgICAgICAiIiIKKyAgICAgICAgaWYgKHNlbGYuVkVSU0lPTl9LRVkgaW4gcmVzdWx0c19q
c29uIGFuZAorICAgICAgICAgICAgcmVzdWx0c19qc29uW3NlbGYuVkVSU0lPTl9LRVldID09IHNl
bGYuVkVSU0lPTik6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICByZXN1bHRzX2pzb25b
c2VsZi5WRVJTSU9OX0tFWV0gPSBzZWxmLlZFUlNJT04KKworICAgIGRlZiBfY3JlYXRlX3Jlc3Vs
dHNfYW5kX3RpbWVzX2pzb24oc2VsZik6CisgICAgICAgIHJlc3VsdHNfYW5kX3RpbWVzID0ge30K
KyAgICAgICAgcmVzdWx0c19hbmRfdGltZXNbc2VsZi5SRVNVTFRTXSA9IFtdCisgICAgICAgIHJl
c3VsdHNfYW5kX3RpbWVzW3NlbGYuVElNRVNdID0gW10KKyAgICAgICAgcmV0dXJuIHJlc3VsdHNf
YW5kX3RpbWVzCisKKyAgICBkZWYgX2NyZWF0ZV9yZXN1bHRzX2Zvcl9idWlsZGVyX2pzb24oc2Vs
Zik6CisgICAgICAgIHJlc3VsdHNfZm9yX2J1aWxkZXIgPSB7fQorICAgICAgICByZXN1bHRzX2Zv
cl9idWlsZGVyW3NlbGYuVEVTVFNdID0ge30KKyAgICAgICAgcmV0dXJuIHJlc3VsdHNfZm9yX2J1
aWxkZXIKKworICAgIGRlZiBfcmVtb3ZlX2l0ZW1zX292ZXJfbWF4X251bWJlcl9vZl9idWlsZHMo
c2VsZiwgZW5jb2RlZF9saXN0KToKKyAgICAgICAgIiIiUmVtb3ZlcyBpdGVtcyBmcm9tIHRoZSBy
dW4tbGVuZ3RoIGVuY29kZWQgbGlzdCBhZnRlciB0aGUgZmluYWwKKyAgICAgICAgaXRlbSB0aGF0
IGV4Y2VlZHMgdGhlIG1heCBudW1iZXIgb2YgYnVpbGRzIHRvIHRyYWNrLgorCisgICAgICAgIEFy
Z3M6CisgICAgICAgICAgZW5jb2RlZF9yZXN1bHRzOiBydW4tbGVuZ3RoIGVuY29kZWQgcmVzdWx0
cy4gQW4gYXJyYXkgb2YgYXJyYXlzLCBlLmcuCisgICAgICAgICAgICAgIFtbMywnQSddLFsxLCdR
J11dIGVuY29kZXMgQUFBUS4KKyAgICAgICAgIiIiCisgICAgICAgIG51bV9idWlsZHMgPSAwCisg
ICAgICAgIGluZGV4ID0gMAorICAgICAgICBmb3IgcmVzdWx0IGluIGVuY29kZWRfbGlzdDoKKyAg
ICAgICAgICAgIG51bV9idWlsZHMgPSBudW1fYnVpbGRzICsgcmVzdWx0WzBdCisgICAgICAgICAg
ICBpbmRleCA9IGluZGV4ICsgMQorICAgICAgICAgICAgaWYgbnVtX2J1aWxkcyA+IHNlbGYuTUFY
X05VTUJFUl9PRl9CVUlMRF9SRVNVTFRTX1RPX0xPRzoKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZW5jb2RlZF9saXN0WzppbmRleF0KKyAgICAgICAgcmV0dXJuIGVuY29kZWRfbGlzdAorCisgICAg
ZGVmIF9ub3JtYWxpemVfcmVzdWx0c19qc29uKHNlbGYsIHRlc3QsIHRlc3RfbmFtZSwgdGVzdHMp
OgorICAgICAgICAiIiIgUHJ1bmUgdGVzdHMgd2hlcmUgYWxsIHJ1bnMgcGFzcyBvciB0ZXN0cyB0
aGF0IG5vIGxvbmdlciBleGlzdCBhbmQKKyAgICAgICAgdHJ1bmNhdGUgYWxsIHJlc3VsdHMgdG8g
bWF4TnVtYmVyT2ZCdWlsZHMuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICB0ZXN0OiBSZXN1
bHRzQW5kVGltZXMgb2JqZWN0IGZvciB0aGlzIHRlc3QuCisgICAgICAgICAgdGVzdF9uYW1lOiBO
YW1lIG9mIHRoZSB0ZXN0LgorICAgICAgICAgIHRlc3RzOiBUaGUgSlNPTiBvYmplY3Qgd2l0aCBh
bGwgdGhlIHRlc3QgcmVzdWx0cyBmb3IgdGhpcyBidWlsZGVyLgorICAgICAgICAiIiIKKyAgICAg
ICAgdGVzdFtzZWxmLlJFU1VMVFNdID0gc2VsZi5fcmVtb3ZlX2l0ZW1zX292ZXJfbWF4X251bWJl
cl9vZl9idWlsZHMoCisgICAgICAgICAgICB0ZXN0W3NlbGYuUkVTVUxUU10pCisgICAgICAgIHRl
c3Rbc2VsZi5USU1FU10gPSBzZWxmLl9yZW1vdmVfaXRlbXNfb3Zlcl9tYXhfbnVtYmVyX29mX2J1
aWxkcygKKyAgICAgICAgICAgIHRlc3Rbc2VsZi5USU1FU10pCisKKyAgICAgICAgaXNfYWxsX3Bh
c3MgPSBzZWxmLl9pc19yZXN1bHRzX2FsbF9vZl90eXBlKHRlc3Rbc2VsZi5SRVNVTFRTXSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuUEFT
U19SRVNVTFQpCisgICAgICAgIGlzX2FsbF9ub19kYXRhID0gc2VsZi5faXNfcmVzdWx0c19hbGxf
b2ZfdHlwZSh0ZXN0W3NlbGYuUkVTVUxUU10sCisgICAgICAgICAgICBzZWxmLk5PX0RBVEFfUkVT
VUxUKQorICAgICAgICBtYXhfdGltZSA9IG1heChbdGltZVsxXSBmb3IgdGltZSBpbiB0ZXN0W3Nl
bGYuVElNRVNdXSkKKworICAgICAgICAjIFJlbW92ZSBhbGwgcGFzc2VzL25vLWRhdGEgZnJvbSB0
aGUgcmVzdWx0cyB0byByZWR1Y2Ugbm9pc2UgYW5kCisgICAgICAgICMgZmlsZXNpemUuIElmIGEg
dGVzdCBwYXNzZXMgZXZlcnkgcnVuLCBidXQgdGFrZXMgPiBNSU5fVElNRSB0byBydW4sCisgICAg
ICAgICMgZG9uJ3QgdGhyb3cgYXdheSB0aGUgZGF0YS4KKyAgICAgICAgaWYgaXNfYWxsX25vX2Rh
dGEgb3IgKGlzX2FsbF9wYXNzIGFuZCBtYXhfdGltZSA8PSBzZWxmLk1JTl9USU1FKToKKyAgICAg
ICAgICAgIGRlbCB0ZXN0c1t0ZXN0X25hbWVdCisKKyAgICBkZWYgX2lzX3Jlc3VsdHNfYWxsX29m
X3R5cGUoc2VsZiwgcmVzdWx0cywgdHlwZSk6CisgICAgICAgICIiIlJldHVybnMgd2hldGhlciBh
bGwgdGhlIHJlc3VsdHMgYXJlIG9mIHRoZSBnaXZlbiB0eXBlCisgICAgICAgIChlLmcuIGFsbCBw
YXNzZXMpLiIiIgorICAgICAgICByZXR1cm4gbGVuKHJlc3VsdHMpID09IDEgYW5kIHJlc3VsdHNb
MF1bMV0gPT0gdHlwZQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90
ZXN0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvcl91bml0dGVzdC5weSBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5lcmF0b3Jf
dW5pdHRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWRlZDAxNjlkMDYwODgyOTkzNGY3YWU1NWJjYzk4MDBl
NTU0NTFkZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
dGVzdF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5lcmF0b3JfdW5pdHRlc3QucHkKQEAgLTAsMCAr
MSwxMjggQEAKKyMhL3Vzci9iaW4vcHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisj
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisj
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiVW5pdCB0
ZXN0cyBmb3IganNvbl9yZXN1bHRzX2dlbmVyYXRvci5weS4iIiIKKworaW1wb3J0IGxvZ2dpbmcK
K2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitpbXBvcnQgcmFuZG9tCitpbXBvcnQgc2h1dGls
CitpbXBvcnQgdGVtcGZpbGUKKworZnJvbSB3ZWJraXRweS50ZXN0X3BhY2thZ2UuanNvbl9yZXN1
bHRzX2dlbmVyYXRvciBpbXBvcnQgSlNPTlJlc3VsdHNHZW5lcmF0b3IKK2Zyb20gd2Via2l0cHku
dGVzdF9wYWNrYWdlIGltcG9ydCB0ZXN0X3Jlc3VsdHMKK2ltcG9ydCB3ZWJraXRweS50aGlyZHBh
cnR5LnNpbXBsZWpzb24gYXMgc2ltcGxlanNvbgorCitCVUlMREVSX0JBU0VfVVJMID0gImh0dHA6
Ly9idWlsZC5jaHJvbWl1bS5vcmcvYnVpbGRib3QvZ3Rlc3QtcmVzdWx0cy8iCisKKworY2xhc3Mg
VGVzdEpTT05HZW5lcmF0aW9uKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2Vs
Zik6CisgICAgICAgIHNlbGYucmVzdWx0c19kaXJlY3RvcnkgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkK
KyAgICAgICAgc2VsZi5yZXN1bHRzX2pzb25fcGF0aCA9ICclcy9yZXN1bHRzLmpzb24nICUgc2Vs
Zi5yZXN1bHRzX2RpcmVjdG9yeQorICAgICAgICBzZWxmLmJ1aWxkZXJfbmFtZSA9ICdEVU1NWV9C
VUlMREVSX05BTUUnCisgICAgICAgIHNlbGYuYnVpbGRfbmFtZSA9ICdEVU1NWV9CVUlMRF9OQU1F
JworICAgICAgICBzZWxmLmJ1aWxkX251bWJlciA9ICdEVU1NWV9CVUlMREVSX05VTUJFUicKKwor
ICAgICAgICBzZWxmLnRlc3RfY291bnQgPSAwCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6Cisg
ICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5yZXN1bHRzX2RpcmVjdG9yeSkKKworICAgIGRlZiBf
dGVzdF9qc29uX2dlbmVyYXRpb24oc2VsZiwgcGFzc2VkX3Rlc3RzLCBmYWlsZWRfdGVzdHMsIHNr
aXBwZWRfdGVzdHMpOgorICAgICAgICAjIE1ha2Ugc3VyZSB3ZSBoYXZlIHNldHMgKHJhdGhlciB0
aGFuIGxpc3RzKS4KKyAgICAgICAgcGFzc2VkX3Rlc3RzID0gc2V0KHBhc3NlZF90ZXN0cykKKyAg
ICAgICAgc2tpcHBlZF90ZXN0cyA9IHNldChza2lwcGVkX3Rlc3RzKQorICAgICAgICBpZiBub3Qg
dHlwZShmYWlsZWRfdGVzdHMpIGlzIGRpY3Q6CisgICAgICAgICAgICBmYWlsZWRfdGVzdHMgPSBk
aWN0KFsoZiwgdGVzdF9yZXN1bHRzLlRFWFQpIGZvciBmIGluIGZhaWxlZF90ZXN0c10pCisgICAg
ICAgIHRlc3RzX2xpc3QgPSBwYXNzZWRfdGVzdHMgfCBzZXQoZmFpbGVkX3Rlc3RzLmtleXMoKSkK
KyAgICAgICAgdGVzdF90aW1pbmdzID0ge30KKyAgICAgICAgZm9yIHRlc3QgaW4gdGVzdHNfbGlz
dDoKKyAgICAgICAgICAgIHRlc3RfdGltaW5nc1t0ZXN0XSA9IGZsb2F0KHJhbmRvbS5yYW5kaW50
KDEsIDEwKSkKKworICAgICAgICAjIEdlbmVyYXRlIGEgSlNPTiBmaWxlLgorICAgICAgICBKU09O
UmVzdWx0c0dlbmVyYXRvcigKKyAgICAgICAgICAgIHNlbGYuYnVpbGRlcl9uYW1lLCBzZWxmLmJ1
aWxkX25hbWUsIHNlbGYuYnVpbGRfbnVtYmVyLAorICAgICAgICAgICAgc2VsZi5yZXN1bHRzX2Rp
cmVjdG9yeSwKKyAgICAgICAgICAgIEJVSUxERVJfQkFTRV9VUkwsCisgICAgICAgICAgICB0ZXN0
X3RpbWluZ3MsCisgICAgICAgICAgICBmYWlsZWRfdGVzdHMsCisgICAgICAgICAgICBwYXNzZWRf
dGVzdHMsCisgICAgICAgICAgICBza2lwcGVkX3Rlc3RzLAorICAgICAgICAgICAgdGVzdHNfbGlz
dCkKKyAgICAgICAgc2VsZi50ZXN0X2NvdW50ICs9IDEKKworICAgICAgICAjIEFsaWFzaW5nIHRv
IGEgc2hvcnQgbmFtZSBmb3IgYmV0dGVyIGFjY2VzcyB0byBpdHMgY29uc3RhbnRzLgorICAgICAg
ICBKUkcgPSBKU09OUmVzdWx0c0dlbmVyYXRvcgorCisgICAgICAgIGYgPSBvcGVuKHNlbGYucmVz
dWx0c19qc29uX3BhdGgpCisgICAgICAgIGpzb25fZGF0YSA9IGYucmVhZCgpCisgICAgICAgIGpz
b25fZGF0YSA9IGpzb25fZGF0YVtsZW4oSlJHLkpTT05fUFJFRklYKToKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxlbihqc29uX2RhdGEpIC0gbGVuKEpSRy5KU09OX1NVRkZJWCldCisg
ICAgICAgIHByaW50IGpzb25fZGF0YQorICAgICAgICBqc29uID0gc2ltcGxlanNvbi5sb2Fkcyhq
c29uX2RhdGEpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEpSRy5WRVJTSU9OX0tFWSBpbiBq
c29uKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5idWlsZGVyX25hbWUgaW4ganNvbikK
KworICAgICAgICBidWlsZGluZm8gPSBqc29uW3NlbGYuYnVpbGRlcl9uYW1lXQorICAgICAgICBz
ZWxmLmFzc2VydFRydWUoSlJHLkZJWEFCTEUgaW4gYnVpbGRpbmZvKQorICAgICAgICBzZWxmLmFz
c2VydFRydWUoSlJHLlRFU1RTIGluIGJ1aWxkaW5mbykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVl
KGxlbihidWlsZGluZm9bSlJHLkJVSUxEX05VTUJFUlNdKSA9PSBzZWxmLnRlc3RfY291bnQpCisg
ICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShidWlsZGluZm9bSlJHLkJVSUxEX05VTUJFUlNdWzBdID09
IHNlbGYuYnVpbGRfbnVtYmVyKQorCisgICAgICAgIGlmIHRlc3RzX2xpc3QgIG9yIHNraXBwZWRf
dGVzdHM6CisgICAgICAgICAgICBmaXhhYmxlID0gYnVpbGRpbmZvW0pSRy5GSVhBQkxFXVswXQor
ICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpeGFibGVbSlJHLlBBU1NfUkVTVUxUXSA9PSBs
ZW4ocGFzc2VkX3Rlc3RzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaXhhYmxlW0pS
Ry5TS0lQX1JFU1VMVF0gPT0gbGVuKHNraXBwZWRfdGVzdHMpKQorCisgICAgICAgIGlmIGZhaWxl
ZF90ZXN0czoKKyAgICAgICAgICAgIHRlc3RzID0gYnVpbGRpbmZvW0pSRy5URVNUU10KKyAgICAg
ICAgICAgIGZvciB0ZXN0X25hbWUsIGZhaWx1cmUgaW4gZmFpbGVkX3Rlc3RzLml0ZXJpdGVtcygp
OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ZXN0X25hbWUgaW4gdGVzdHMpCisg
ICAgICAgICAgICAgICAgdGVzdCA9IHRlc3RzW3Rlc3RfbmFtZV0KKyAgICAgICAgICAgICAgICBz
ZWxmLmFzc2VydFRydWUodGVzdFtKUkcuUkVTVUxUU11bMF1bMF0gPT0gMSkKKyAgICAgICAgICAg
ICAgICBzZWxmLmFzc2VydFRydWUodGVzdFtKUkcuUkVTVUxUU11bMF1bMV0gPT0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgSlJHLkZBSUxVUkVfVE9fQ0hBUltmYWlsdXJlXSkKKyAg
ICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodGVzdFtKUkcuVElNRVNdWzBdWzBdID09IDEp
CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRlc3RbSlJHLlRJTUVTXVswXVsxXSA9
PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQodGVzdF90aW1pbmdzW3Rlc3Rf
bmFtZV0pKQorCisgICAgZGVmIHRlc3RfanNvbl9nZW5lcmF0aW9uKHNlbGYpOgorICAgICAgICBz
ZWxmLl90ZXN0X2pzb25fZ2VuZXJhdGlvbihbXSwgW10sIFtdKQorICAgICAgICBzZWxmLl90ZXN0
X2pzb25fZ2VuZXJhdGlvbihbJ0EnXSwgW10sIFtdKQorICAgICAgICBzZWxmLl90ZXN0X2pzb25f
Z2VuZXJhdGlvbihbJ0EnXSwgWydCJywgJ0MnXSwgW10pCisgICAgICAgIHNlbGYuX3Rlc3RfanNv
bl9nZW5lcmF0aW9uKFsnQScsICdCJywgJ0MnXSwgWydEJywgJ0UnXSwgWydGJywgJ0cnXSkKKyAg
ICAgICAgc2VsZi5fdGVzdF9qc29uX2dlbmVyYXRpb24oWydBJ10sIHsnQic6IHRlc3RfcmVzdWx0
cy5JTUFHRSwKKyAgICAgICAgICAgICdDJzogdGVzdF9yZXN1bHRzLlRFWFQsICdEJzogdGVzdF9y
ZXN1bHRzLkNSQVNIfSwgWydFJ10pCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAg
ICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvdGVzdF9wYWNrYWdlL3Rlc3RfcmVzdWx0cy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvdGVzdF9wYWNrYWdlL3Rlc3RfcmVzdWx0cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNzUxMjNlMDJm
YzBkMGE2ZTVjNDdhYzRkMDNhY2FlOWYxZjA4OGFkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS90ZXN0X3BhY2thZ2UvdGVzdF9yZXN1bHRzLnB5CkBAIC0w
LDAgKzEsMzIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
IyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyMg
VGVzdCByZXN1bHRzIGFuZCBtb2RpZmllciBjb25zdGFudHMuCisoUEFTUywgRkFJTCwgVEVYVCwg
SU1BR0UsIElNQUdFX1BMVVNfVEVYVCwgVElNRU9VVCwgQ1JBU0gsIFNLSVAsIFdPTlRGSVgsCisg
REVGRVIsIFNMT1csIFJFQkFTRUxJTkUsIE1JU1NJTkcsIEZMQUtZLCBOT1csIE5PTkUpID0gcmFu
Z2UoMTYpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55343</attachid>
            <date>2010-05-06 23:52:09 -0700</date>
            <delta_ts>2010-06-07 19:30:55 -0700</delta_ts>
            <desc>=add comment in __init__.py</desc>
            <filename>bug-38693-20100506235208.patch</filename>
            <type>text/plain</type>
            <size>49693</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBjZWRmNzYwOWNiYTY4OGE0MDhlZTM4OTc1MjNkZGI5ZWJkNzc2NWEyLi5mM2QzZjgx
ZjljZTU2Yzk0ODAxZDYyZTMzNDE1N2Y4NWRjNjY0YWVlIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAK
KzIwMTAtMDUtMDYgIEtpbnVrbyBZYXN1ZGEgIDxraW51a29AY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtDaHJvbWl1bV0gY2xl
YW51cCBqc29uX3Jlc3VsdHNfZ2VuZXJhdG9yIGRlcGVuZGVuY2llcyBzbyB0aGF0IG5vbi1sYXlv
dXQtdGVzdHMgY2FuIGFsc28gdXNlIGl0IHNhZmVseQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzg2OTMKKworICAgICAgICBDbGVhbi11cCBqc29uX3Jl
c3VsdHNfZ2VuZXJhdG9yLnB5IGZyb20gbGF5b3V0X3Rlc3RzIHBhY2thZ2UuCisgICAgICAgIENy
ZWF0ZWQgYSBuZXcgZGlyZWN0b3J5IHRlc3RfcGFja2FnZSBmb3Igbm9uLWxheW91dC10ZXN0cyBz
cGVjaWZpYworICAgICAgICB0ZXN0IHJlbGF0ZWQgc2NyaXB0cyBhbmQgbW92ZWQganNvbl9yZXN1
bHRzX2dlbmVyYXRvci5weSBpbnRvIHRoZQorICAgICAgICBuZXcgZGlyZWN0b3J5LiAgQWxzbyBl
eHRyYWN0ZWQgZ2VuZXJpYyB0ZXN0LXJlbGF0ZWQgY29uc3RhbnRzCisgICAgICAgIGRlZmluaXRp
b25zIGZyb20gbGF5b3V0X3BhY2thZ2UvdGVzdF9leHBlY3RhdGlvbnMucHkgYW5kIHBsYWNlZCB0
aGVtCisgICAgICAgIGluIHRlc3RfcGFja2FnZS90ZXN0X3Jlc3VsdHMucHkuCisgICAgICAgIEFk
ZGVkIGEgdW5pdHRlc3QgZm9yIGpzb25fcmVzdWx0c19nZW5lcmF0b3IucHkuCisKKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX2xheW91
dF9yZXN1bHRzX2dlbmVyYXRvci5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5OgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfZXhw
ZWN0YXRpb25zLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGVzdF9wYWNrYWdlL19f
aW5pdF9fLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rlc3RfcGFja2Fn
ZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5OiBDb3BpZWQgZnJvbSBTY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5Lgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGVzdF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5l
cmF0b3JfdW5pdHRlc3QucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGVz
dF9wYWNrYWdlL3Rlc3RfcmVzdWx0cy5weTogQWRkZWQuCisKIDIwMTAtMDUtMDUgIERpcmsgUHJh
bmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBT
ZWlkZWwuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX2xheW91dF9yZXN1bHRzX2dlbmVyYXRvci5weSBiL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pz
b25fbGF5b3V0X3Jlc3VsdHNfZ2VuZXJhdG9yLnB5CmluZGV4IGNlZTQ0YWRhYTE5ZWZjMjBjNGM4
NDVmMTM2ZmNkYjM5NDYyYTNjMWYuLjY0OGE4YmQ4ZjFjODBkNDY5ZDMwZTMxZGM2YWVhZDBkY2Vk
YmRkNjIgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2xheW91dF9wYWNrYWdlL2pzb25fbGF5b3V0X3Jlc3VsdHNfZ2VuZXJhdG9yLnB5CisrKyBi
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdl
L2pzb25fbGF5b3V0X3Jlc3VsdHNfZ2VuZXJhdG9yLnB5CkBAIC03OCw2ICs3OCwxOSBAQCBjbGFz
cyBKU09OTGF5b3V0UmVzdWx0c0dlbmVyYXRvcihqc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLkpTT05S
ZXN1bHRzR2VuZXJhdG9yKToKICAgICAgICAgICAgIChwYXRoX3RvX25hbWUodGVzdF90dXBsZS5m
aWxlbmFtZSksIHRlc3RfdHVwbGUudGVzdF9ydW5fdGltZSkKICAgICAgICAgICAgIGZvciB0ZXN0
X3R1cGxlIGluIHRlc3RfdGltaW5ncykKIAorICAgICAgICAjIFRoZXNlIG5leHQgdHdvIGJyYW5j
aGVzIHRlc3QgdG8gc2VlIHdoaWNoIHNvdXJjZSByZXBvcyB3ZSBjYW4KKyAgICAgICAgIyBwdWxs
IHJldmlzaW9ucyBmcm9tLgorICAgICAgICBzZWxmLl93ZWJraXRfc3ZuX2Jhc2UgPSBOb25lCisg
ICAgICAgIHNlbGYuX2Nocm9taXVtX3N2bl9iYXNlID0gTm9uZQorICAgICAgICBpZiBoYXNhdHRy
KHNlbGYuX3BvcnQsICdwYXRoX2Zyb21fd2Via2l0X2Jhc2UnKToKKyAgICAgICAgICAgIHNlbGYu
X3dlYmtpdF9zdm5fYmFzZSA9IHNlbGYuX3BvcnQucGF0aF9mcm9tX3dlYmtpdF9iYXNlKCdXZWJD
b3JlJykKKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLl9wb3J0LCAncGF0aF9mcm9tX2Nocm9taXVt
X2Jhc2UnKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl9jaHJvbWl1
bV9zdm5fYmFzZSA9IHNlbGYuX3BvcnQucGF0aF9mcm9tX2Nocm9taXVtX2Jhc2UoKQorICAgICAg
ICAgICAgZXhjZXB0IEFzc2VydGlvbkVycm9yOgorICAgICAgICAgICAgICAgICMgV2UncmUgbm90
IGluIGEgQ2hyb21pdW0gY2hlY2tvdXQsIHRoYXQncyBvay4KKyAgICAgICAgICAgICAgICBwYXNz
CisKICAgICAgICAgc2VsZi5fZ2VuZXJhdGVfanNvbl9vdXRwdXQoKQogCiAgICAgZGVmIF9nZXRf
cGF0aF9yZWxhdGl2ZV90b19sYXlvdXRfdGVzdF9yb290KHNlbGYsIHRlc3QpOgpkaWZmIC0tZ2l0
IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2th
Z2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvci5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5lcmF0b3IucHkK
aW5kZXggMDk5M2NiZGQ3YjA0MzVlNGZhMTE2MDU0YTdmNjAxYmRiMTk5ODNjZi4uNjAzOGE5ZTZj
ZDgyYjRhNWQzZDQ2NjgzNmE4NmE1ODJlZjNkMmJlOSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRz
X2dlbmVyYXRvci5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5CkBAIC0yOSw0MDQg
KzI5LDMyIEBACiAKIGZyb20gX19mdXR1cmVfXyBpbXBvcnQgd2l0aF9zdGF0ZW1lbnQKIAotaW1w
b3J0IGNvZGVjcwotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBvcwotaW1wb3J0IHN1YnByb2Nlc3MK
LWltcG9ydCBzeXMKLWltcG9ydCB0aW1lCi1pbXBvcnQgdXJsbGliMgotaW1wb3J0IHhtbC5kb20u
bWluaWRvbQorZnJvbSB3ZWJraXRweS50ZXN0X3BhY2thZ2UgaW1wb3J0IGpzb25fcmVzdWx0c19n
ZW5lcmF0b3IKIAotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1w
b3J0IHRlc3RfZXhwZWN0YXRpb25zCi1pbXBvcnQgd2Via2l0cHkudGhpcmRwYXJ0eS5zaW1wbGVq
c29uIGFzIHNpbXBsZWpzb24KKyMgSlNPTlJlc3VsdHNHZW5lcmF0b3IgaXMgbW92ZWQgaW50byB3
ZWJraXRweS50ZXN0X3BhY2thZ2UuCisjIFRoaXMgbW9kdWxlIGlzIGxlZnQgYXMgYSBzaW1wbGUg
d3JhcHBlciBmb3Igbm90IGJyZWFraW5nIHRoaW5ncworIyBkdXJpbmcgdGhlIHRyYW5zaXRpb24u
CiAKLV9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcigid2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91
dF9wYWNrYWdlLiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAianNvbl9yZXN1bHRzX2dlbmVy
YXRvciIpCi0KLQotY2xhc3MgSlNPTlJlc3VsdHNHZW5lcmF0b3Iob2JqZWN0KToKLQotICAgIE1B
WF9OVU1CRVJfT0ZfQlVJTERfUkVTVUxUU19UT19MT0cgPSA3NTAKLSAgICAjIE1pbiB0aW1lIChz
ZWNvbmRzKSB0aGF0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIEpTT04uCi0gICAgTUlOX1RJTUUgPSAx
Ci0gICAgSlNPTl9QUkVGSVggPSAiQUREX1JFU1VMVFMoIgotICAgIEpTT05fU1VGRklYID0gIik7
IgotICAgIFBBU1NfUkVTVUxUID0gIlAiCi0gICAgU0tJUF9SRVNVTFQgPSAiWCIKLSAgICBOT19E
QVRBX1JFU1VMVCA9ICJOIgotICAgIFZFUlNJT04gPSAzCi0gICAgVkVSU0lPTl9LRVkgPSAidmVy
c2lvbiIKLSAgICBSRVNVTFRTID0gInJlc3VsdHMiCi0gICAgVElNRVMgPSAidGltZXMiCi0gICAg
QlVJTERfTlVNQkVSUyA9ICJidWlsZE51bWJlcnMiCi0gICAgV0VCS0lUX1NWTiA9ICJ3ZWJraXRS
ZXZpc2lvbiIKLSAgICBDSFJPTUVfU1ZOID0gImNocm9tZVJldmlzaW9uIgotICAgIFRJTUUgPSAi
c2Vjb25kc1NpbmNlRXBvY2giCi0gICAgVEVTVFMgPSAidGVzdHMiCi0KLSAgICBGSVhBQkxFX0NP
VU5UID0gImZpeGFibGVDb3VudCIKLSAgICBGSVhBQkxFID0gImZpeGFibGVDb3VudHMiCi0gICAg
QUxMX0ZJWEFCTEVfQ09VTlQgPSAiYWxsRml4YWJsZUNvdW50IgotCi0gICAgIyBOb3RlIHRoYXQg
d2Ugb21pdCB0ZXN0X2V4cGVjdGF0aW9ucy5GQUlMIGZyb20gdGhpcyBsaXN0IGJlY2F1c2UKLSAg
ICAjIGl0IHNob3VsZCBuZXZlciBzaG93IHVwIChpdCdzIGEgbGVnYWN5IGlucHV0IGV4cGVjdGF0
aW9uLCBuZXZlcgotICAgICMgYW4gb3V0cHV0IGV4cGVjdGF0aW9uKS4KLSAgICBGQUlMVVJFX1RP
X0NIQVIgPSB7dGVzdF9leHBlY3RhdGlvbnMuQ1JBU0g6ICJDIiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgdGVzdF9leHBlY3RhdGlvbnMuVElNRU9VVDogIlQiLAotICAgICAgICAgICAgICAgICAg
ICAgICB0ZXN0X2V4cGVjdGF0aW9ucy5JTUFHRTogIkkiLAotICAgICAgICAgICAgICAgICAgICAg
ICB0ZXN0X2V4cGVjdGF0aW9ucy5URVhUOiAiRiIsCi0gICAgICAgICAgICAgICAgICAgICAgIHRl
c3RfZXhwZWN0YXRpb25zLk1JU1NJTkc6ICJPIiwKLSAgICAgICAgICAgICAgICAgICAgICAgdGVz
dF9leHBlY3RhdGlvbnMuSU1BR0VfUExVU19URVhUOiAiWiJ9Ci0gICAgRkFJTFVSRV9DSEFSUyA9
IEZBSUxVUkVfVE9fQ0hBUi52YWx1ZXMoKQotCi0gICAgUkVTVUxUU19GSUxFTkFNRSA9ICJyZXN1
bHRzLmpzb24iCiAKK2NsYXNzIEpTT05SZXN1bHRzR2VuZXJhdG9yKGpzb25fcmVzdWx0c19nZW5l
cmF0b3IuSlNPTlJlc3VsdHNHZW5lcmF0b3IpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0
LCBidWlsZGVyX25hbWUsIGJ1aWxkX25hbWUsIGJ1aWxkX251bWJlciwKICAgICAgICAgcmVzdWx0
c19maWxlX2Jhc2VfcGF0aCwgYnVpbGRlcl9iYXNlX3VybCwKICAgICAgICAgdGVzdF90aW1pbmdz
LCBmYWlsdXJlcywgcGFzc2VkX3Rlc3RzLCBza2lwcGVkX3Rlc3RzLCBhbGxfdGVzdHMpOgotICAg
ICAgICAiIiJNb2RpZmllcyB0aGUgcmVzdWx0cy5qc29uIGZpbGUuIEdyYWJzIGl0IG9mZiB0aGUg
YXJjaGl2ZSBkaXJlY3RvcnkKLSAgICAgICAgaWYgaXQgaXMgbm90IGZvdW5kIGxvY2FsbHkuCi0K
LSAgICAgICAgQXJncwotICAgICAgICAgIGJ1aWxkZXJfbmFtZTogdGhlIGJ1aWxkZXIgbmFtZSAo
ZS5nLiBXZWJraXQpLgotICAgICAgICAgIGJ1aWxkX25hbWU6IHRoZSBidWlsZCBuYW1lIChlLmcu
IHdlYmtpdC1yZWwpLgotICAgICAgICAgIGJ1aWxkX251bWJlcjogdGhlIGJ1aWxkIG51bWJlci4K
LSAgICAgICAgICByZXN1bHRzX2ZpbGVfYmFzZV9wYXRoOiBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBk
aXJlY3RvcnkgY29udGFpbmluZyB0aGUKLSAgICAgICAgICAgICAgcmVzdWx0cyBqc29uIGZpbGUu
Ci0gICAgICAgICAgYnVpbGRlcl9iYXNlX3VybDogdGhlIFVSTCB3aGVyZSB3ZSBoYXZlIHRoZSBh
cmNoaXZlZCB0ZXN0IHJlc3VsdHMuCi0gICAgICAgICAgdGVzdF90aW1pbmdzOiBNYXAgb2YgdGVz
dCBuYW1lIHRvIGEgdGVzdF9ydW4tdGltZS4KLSAgICAgICAgICBmYWlsdXJlczogTWFwIG9mIHRl
c3QgbmFtZSB0byBhIGZhaWx1cmUgdHlwZSAob2YgdGVzdF9leHBlY3RhdGlvbnMpLgotICAgICAg
ICAgIHBhc3NlZF90ZXN0czogQSBzZXQgY29udGFpbmluZyBhbGwgdGhlIHBhc3NlZCB0ZXN0cy4K
LSAgICAgICAgICBza2lwcGVkX3Rlc3RzOiBBIHNldCBjb250YWluaW5nIGFsbCB0aGUgc2tpcHBl
ZCB0ZXN0cy4KLSAgICAgICAgICBhbGxfdGVzdHM6IExpc3Qgb2YgYWxsIHRoZSB0ZXN0cyB0aGF0
IHdlcmUgcnVuLiAgVGhpcyBzaG91bGQgbm90Ci0gICAgICAgICAgICAgIGluY2x1ZGUgc2tpcHBl
ZCB0ZXN0cy4KLSAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0Ci0gICAgICAg
IHNlbGYuX2J1aWxkZXJfbmFtZSA9IGJ1aWxkZXJfbmFtZQotICAgICAgICBzZWxmLl9idWlsZF9u
YW1lID0gYnVpbGRfbmFtZQotICAgICAgICBzZWxmLl9idWlsZF9udW1iZXIgPSBidWlsZF9udW1i
ZXIKLSAgICAgICAgc2VsZi5fYnVpbGRlcl9iYXNlX3VybCA9IGJ1aWxkZXJfYmFzZV91cmwKLSAg
ICAgICAgc2VsZi5fcmVzdWx0c19maWxlX3BhdGggPSBvcy5wYXRoLmpvaW4ocmVzdWx0c19maWxl
X2Jhc2VfcGF0aCwKLSAgICAgICAgICAgIHNlbGYuUkVTVUxUU19GSUxFTkFNRSkKLSAgICAgICAg
c2VsZi5fdGVzdF90aW1pbmdzID0gdGVzdF90aW1pbmdzCi0gICAgICAgIHNlbGYuX2ZhaWx1cmVz
ID0gZmFpbHVyZXMKLSAgICAgICAgc2VsZi5fcGFzc2VkX3Rlc3RzID0gcGFzc2VkX3Rlc3RzCi0g
ICAgICAgIHNlbGYuX3NraXBwZWRfdGVzdHMgPSBza2lwcGVkX3Rlc3RzCi0gICAgICAgIHNlbGYu
X2FsbF90ZXN0cyA9IGFsbF90ZXN0cwotCi0gICAgICAgIHNlbGYuX2dlbmVyYXRlX2pzb25fb3V0
cHV0KCkKLQotICAgIGRlZiBfZ2VuZXJhdGVfanNvbl9vdXRwdXQoc2VsZik6Ci0gICAgICAgICIi
IkdlbmVyYXRlcyB0aGUgSlNPTiBvdXRwdXQgZmlsZS4iIiIKLSAgICAgICAganNvbiA9IHNlbGYu
X2dldF9qc29uKCkKLSAgICAgICAgaWYganNvbjoKLSAgICAgICAgICAgIHJlc3VsdHNfZmlsZSA9
IGNvZGVjcy5vcGVuKHNlbGYuX3Jlc3VsdHNfZmlsZV9wYXRoLCAidyIsICJ1dGYtOCIpCi0gICAg
ICAgICAgICByZXN1bHRzX2ZpbGUud3JpdGUoanNvbikKLSAgICAgICAgICAgIHJlc3VsdHNfZmls
ZS5jbG9zZSgpCi0KLSAgICAjIEZJWE1FOiBDYWxsZXJzIHNob3VsZCB1c2Ugc2NtLnB5IGluc3Rl
YWQuCi0gICAgZGVmIF9nZXRfc3ZuX3JldmlzaW9uKHNlbGYsIGluX2RpcmVjdG9yeSk6Ci0gICAg
ICAgICIiIlJldHVybnMgdGhlIHN2biByZXZpc2lvbiBmb3IgdGhlIGdpdmVuIGRpcmVjdG9yeS4K
LQotICAgICAgICBBcmdzOgotICAgICAgICAgIGluX2RpcmVjdG9yeTogVGhlIGRpcmVjdG9yeSB3
aGVyZSBzdm4gaXMgdG8gYmUgcnVuLgotICAgICAgICAiIiIKLSAgICAgICAgaWYgb3MucGF0aC5l
eGlzdHMob3MucGF0aC5qb2luKGluX2RpcmVjdG9yeSwgJy5zdm4nKSk6Ci0gICAgICAgICAgICAj
IE5vdGU6IE5vdCB0aHJlYWQgc2FmZTogaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTIzMjAK
LSAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuUG9wZW4oWyJzdm4iLCAiaW5mbyIsICIt
LXhtbCJdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjd2Q9aW5fZGly
ZWN0b3J5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGVsbD0oc3lz
LnBsYXRmb3JtID09ICd3aW4zMicpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5jb21tdW5pY2F0ZSgpWzBdCi0gICAgICAgICAg
ICB0cnk6Ci0gICAgICAgICAgICAgICAgZG9tID0geG1sLmRvbS5taW5pZG9tLnBhcnNlU3RyaW5n
KG91dHB1dCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZG9tLmdldEVsZW1lbnRzQnlUYWdOYW1l
KCdlbnRyeScpWzBdLmdldEF0dHJpYnV0ZSgKLSAgICAgICAgICAgICAgICAgICAgJ3JldmlzaW9u
JykKLSAgICAgICAgICAgIGV4Y2VwdCB4bWwucGFyc2Vycy5leHBhdC5FeHBhdEVycm9yOgotICAg
ICAgICAgICAgICAgIHJldHVybiAiIgotICAgICAgICByZXR1cm4gIiIKLQotICAgIGRlZiBfZ2V0
X2FyY2hpdmVkX2pzb25fcmVzdWx0cyhzZWxmKToKLSAgICAgICAgIiIiUmVhZHMgb2xkIHJlc3Vs
dHMgSlNPTiBmaWxlIGlmIGl0IGV4aXN0cy4KLSAgICAgICAgUmV0dXJucyAoYXJjaGl2ZWRfcmVz
dWx0cywgZXJyb3IpIHR1cGxlIHdoZXJlIGVycm9yIGlzIE5vbmUgaWYgcmVzdWx0cwotICAgICAg
ICB3ZXJlIHN1Y2Nlc3NmdWxseSByZWFkLgotICAgICAgICAiIiIKLSAgICAgICAgcmVzdWx0c19q
c29uID0ge30KLSAgICAgICAgb2xkX3Jlc3VsdHMgPSBOb25lCi0gICAgICAgIGVycm9yID0gTm9u
ZQotCi0gICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYuX3Jlc3VsdHNfZmlsZV9wYXRoKToK
LSAgICAgICAgICAgIHdpdGggY29kZWNzLm9wZW4oc2VsZi5fcmVzdWx0c19maWxlX3BhdGgsICJy
IiwgInV0Zi04IikgYXMgZmlsZToKLSAgICAgICAgICAgICAgICBvbGRfcmVzdWx0cyA9IGZpbGUu
cmVhZCgpCi0gICAgICAgIGVsaWYgc2VsZi5fYnVpbGRlcl9iYXNlX3VybDoKLSAgICAgICAgICAg
ICMgQ2hlY2sgaWYgd2UgaGF2ZSB0aGUgYXJjaGl2ZWQgSlNPTiBmaWxlIG9uIHRoZSBidWlsZGJv
dCBzZXJ2ZXIuCi0gICAgICAgICAgICByZXN1bHRzX2ZpbGVfdXJsID0gKHNlbGYuX2J1aWxkZXJf
YmFzZV91cmwgKwotICAgICAgICAgICAgICAgIHNlbGYuX2J1aWxkX25hbWUgKyAiLyIgKyBzZWxm
LlJFU1VMVFNfRklMRU5BTUUpCi0gICAgICAgICAgICBfbG9nLmVycm9yKCJMb2NhbCByZXN1bHRz
Lmpzb24gZmlsZSBkb2VzIG5vdCBleGlzdC4gR3JhYmJpbmcgIgotICAgICAgICAgICAgICAgICAg
ICAgICAiaXQgb2ZmIHRoZSBhcmNoaXZlIGF0ICIgKyByZXN1bHRzX2ZpbGVfdXJsKQogCisgICAg
ICAgIHdlYmtpdF9zdm5fYmFzZSA9IE5vbmUKKyAgICAgICAgY2hyb21pdW1fc3ZuX2Jhc2UgPSBO
b25lCisgICAgICAgIGlmIGhhc2F0dHIocG9ydCwgJ3BhdGhfZnJvbV93ZWJraXRfYmFzZScpOgor
ICAgICAgICAgICAgd2Via2l0X3N2bl9iYXNlID0gcG9ydC5wYXRoX2Zyb21fd2Via2l0X2Jhc2Uo
J1dlYkNvcmUnKQorICAgICAgICBpZiBoYXNhdHRyKHBvcnQsICdwYXRoX2Zyb21fY2hyb21pdW1f
YmFzZScpOgogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHJlc3VsdHNfZmlsZSA9
IHVybGxpYjIudXJsb3BlbihyZXN1bHRzX2ZpbGVfdXJsKQotICAgICAgICAgICAgICAgIGluZm8g
PSByZXN1bHRzX2ZpbGUuaW5mbygpCi0gICAgICAgICAgICAgICAgb2xkX3Jlc3VsdHMgPSByZXN1
bHRzX2ZpbGUucmVhZCgpCi0gICAgICAgICAgICBleGNlcHQgdXJsbGliMi5IVFRQRXJyb3IsIGh0
dHBfZXJyb3I6Ci0gICAgICAgICAgICAgICAgIyBBIG5vbi00eHggc3RhdHVzIGNvZGUgbWVhbnMg
dGhlIGJvdCBpcyBob3NlZCBmb3Igc29tZSByZWFzb24KLSAgICAgICAgICAgICAgICAjIGFuZCB3
ZSBjYW4ndCBncmFiIHRoZSByZXN1bHRzLmpzb24gZmlsZSBvZmYgb2YgaXQuCi0gICAgICAgICAg
ICAgICAgaWYgKGh0dHBfZXJyb3IuY29kZSA8IDQwMCBhbmQgaHR0cF9lcnJvci5jb2RlID49IDUw
MCk6Ci0gICAgICAgICAgICAgICAgICAgIGVycm9yID0gaHR0cF9lcnJvcgotICAgICAgICAgICAg
ZXhjZXB0IHVybGxpYjIuVVJMRXJyb3IsIHVybF9lcnJvcjoKLSAgICAgICAgICAgICAgICBlcnJv
ciA9IHVybF9lcnJvcgotCi0gICAgICAgIGlmIG9sZF9yZXN1bHRzOgotICAgICAgICAgICAgIyBT
dHJpcCB0aGUgcHJlZml4IGFuZCBzdWZmaXggc28gd2UgY2FuIGdldCB0aGUgYWN0dWFsIEpTT04g
b2JqZWN0LgotICAgICAgICAgICAgb2xkX3Jlc3VsdHMgPSBvbGRfcmVzdWx0c1tsZW4oc2VsZi5K
U09OX1BSRUZJWCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbihv
bGRfcmVzdWx0cykgLSBsZW4oc2VsZi5KU09OX1NVRkZJWCldCi0KLSAgICAgICAgICAgIHRyeToK
LSAgICAgICAgICAgICAgICByZXN1bHRzX2pzb24gPSBzaW1wbGVqc29uLmxvYWRzKG9sZF9yZXN1
bHRzKQotICAgICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoInJl
c3VsdHMuanNvbiB3YXMgbm90IHZhbGlkIEpTT04uIENsb2JiZXJpbmcuIikKLSAgICAgICAgICAg
ICAgICAjIFRoZSBKU09OIGZpbGUgaXMgbm90IHZhbGlkIEpTT04uIEp1c3QgY2xvYmJlciB0aGUg
cmVzdWx0cy4KLSAgICAgICAgICAgICAgICByZXN1bHRzX2pzb24gPSB7fQotICAgICAgICBlbHNl
OgotICAgICAgICAgICAgX2xvZy5kZWJ1ZygnT2xkIEpTT04gcmVzdWx0cyBkbyBub3QgZXhpc3Qu
IFN0YXJ0aW5nIGZyZXNoLicpCi0gICAgICAgICAgICByZXN1bHRzX2pzb24gPSB7fQotCi0gICAg
ICAgIHJldHVybiByZXN1bHRzX2pzb24sIGVycm9yCi0KLSAgICBkZWYgX2dldF9qc29uKHNlbGYp
OgotICAgICAgICAiIiJHZXRzIHRoZSByZXN1bHRzIGZvciB0aGUgcmVzdWx0cy5qc29uIGZpbGUu
IiIiCi0gICAgICAgIHJlc3VsdHNfanNvbiwgZXJyb3IgPSBzZWxmLl9nZXRfYXJjaGl2ZWRfanNv
bl9yZXN1bHRzKCkKLSAgICAgICAgaWYgZXJyb3I6Ci0gICAgICAgICAgICAjIElmIHRoZXJlIHdh
cyBhbiBlcnJvciBkb24ndCB3cml0ZSBhIHJlc3VsdHMuanNvbgotICAgICAgICAgICAgIyBmaWxl
IGF0IGFsbCBhcyBpdCB3b3VsZCBsb3NlIGFsbCB0aGUgaW5mb3JtYXRpb24gb24gdGhlIGJvdC4K
LSAgICAgICAgICAgIF9sb2cuZXJyb3IoIkFyY2hpdmUgZGlyZWN0b3J5IGlzIGluYWNjZXNzaWJs
ZS4gTm90IG1vZGlmeWluZyAiCi0gICAgICAgICAgICAgICAgICAgICAgICJvciBjbG9iYmVyaW5n
IHRoZSByZXN1bHRzLmpzb24gZmlsZTogIiArIHN0cihlcnJvcikpCi0gICAgICAgICAgICByZXR1
cm4gTm9uZQotCi0gICAgICAgIGJ1aWxkZXJfbmFtZSA9IHNlbGYuX2J1aWxkZXJfbmFtZQotICAg
ICAgICBpZiByZXN1bHRzX2pzb24gYW5kIGJ1aWxkZXJfbmFtZSBub3QgaW4gcmVzdWx0c19qc29u
OgotICAgICAgICAgICAgX2xvZy5kZWJ1ZygiQnVpbGRlciBuYW1lICglcykgaXMgbm90IGluIHRo
ZSByZXN1bHRzLmpzb24gZmlsZS4iCi0gICAgICAgICAgICAgICAgICAgICAgICUgYnVpbGRlcl9u
YW1lKQotCi0gICAgICAgIHNlbGYuX2NvbnZlcnRfanNvbl90b19jdXJyZW50X3ZlcnNpb24ocmVz
dWx0c19qc29uKQotCi0gICAgICAgIGlmIGJ1aWxkZXJfbmFtZSBub3QgaW4gcmVzdWx0c19qc29u
OgotICAgICAgICAgICAgcmVzdWx0c19qc29uW2J1aWxkZXJfbmFtZV0gPSAoCi0gICAgICAgICAg
ICAgICAgc2VsZi5fY3JlYXRlX3Jlc3VsdHNfZm9yX2J1aWxkZXJfanNvbigpKQotCi0gICAgICAg
IHJlc3VsdHNfZm9yX2J1aWxkZXIgPSByZXN1bHRzX2pzb25bYnVpbGRlcl9uYW1lXQotCi0gICAg
ICAgIHNlbGYuX2luc2VydF9nZW5lcmljX21ldGFkYXRhKHJlc3VsdHNfZm9yX2J1aWxkZXIpCi0K
LSAgICAgICAgc2VsZi5faW5zZXJ0X2ZhaWx1cmVfc3VtbWFyaWVzKHJlc3VsdHNfZm9yX2J1aWxk
ZXIpCi0KLSAgICAgICAgIyBVcGRhdGUgdGhlIGFsbCBmYWlsaW5nIHRlc3RzIHdpdGggcmVzdWx0
IHR5cGUgYW5kIHRpbWUuCi0gICAgICAgIHRlc3RzID0gcmVzdWx0c19mb3JfYnVpbGRlcltzZWxm
LlRFU1RTXQotICAgICAgICBhbGxfZmFpbGluZ190ZXN0cyA9IHNldChzZWxmLl9mYWlsdXJlcy5p
dGVya2V5cygpKQotICAgICAgICBhbGxfZmFpbGluZ190ZXN0cy51cGRhdGUodGVzdHMuaXRlcmtl
eXMoKSkKLSAgICAgICAgZm9yIHRlc3QgaW4gYWxsX2ZhaWxpbmdfdGVzdHM6Ci0gICAgICAgICAg
ICBzZWxmLl9pbnNlcnRfdGVzdF90aW1lX2FuZF9yZXN1bHQodGVzdCwgdGVzdHMpCi0KLSAgICAg
ICAgIyBTcGVjaWZ5IHNlcGFyYXRvcnMgaW4gb3JkZXIgdG8gZ2V0IGNvbXBhY3QgZW5jb2Rpbmcu
Ci0gICAgICAgIHJlc3VsdHNfc3RyID0gc2ltcGxlanNvbi5kdW1wcyhyZXN1bHRzX2pzb24sIHNl
cGFyYXRvcnM9KCcsJywgJzonKSkKLSAgICAgICAgcmV0dXJuIHNlbGYuSlNPTl9QUkVGSVggKyBy
ZXN1bHRzX3N0ciArIHNlbGYuSlNPTl9TVUZGSVgKLQotICAgIGRlZiBfaW5zZXJ0X2ZhaWx1cmVf
c3VtbWFyaWVzKHNlbGYsIHJlc3VsdHNfZm9yX2J1aWxkZXIpOgotICAgICAgICAiIiJJbnNlcnRz
IGFnZ3JlZ2F0ZSBwYXNzL2ZhaWx1cmUgc3RhdGlzdGljcyBpbnRvIHRoZSBKU09OLgotICAgICAg
ICBUaGlzIG1ldGhvZCByZWFkcyBzZWxmLl9za2lwcGVkX3Rlc3RzLCBzZWxmLl9wYXNzZWRfdGVz
dHMgYW5kCi0gICAgICAgIHNlbGYuX2ZhaWx1cmVzIGFuZCBpbnNlcnRzIEZJWEFCTEUsIEZJWEFC
TEVfQ09VTlQgYW5kIEFMTF9GSVhBQkxFX0NPVU5UCi0gICAgICAgIGVudHJpZXMuCi0KLSAgICAg
ICAgQXJnczoKLSAgICAgICAgICByZXN1bHRzX2Zvcl9idWlsZGVyOiBEaWN0aW9uYXJ5IGNvbnRh
aW5pbmcgdGhlIHRlc3QgcmVzdWx0cyBmb3IgYQotICAgICAgICAgICAgICBzaW5nbGUgYnVpbGRl
ci4KLSAgICAgICAgIiIiCi0gICAgICAgICMgSW5zZXJ0IHRoZSBudW1iZXIgb2YgdGVzdHMgdGhh
dCBmYWlsZWQuCi0gICAgICAgIHNlbGYuX2luc2VydF9pdGVtX2ludG9fcmF3X2xpc3QocmVzdWx0
c19mb3JfYnVpbGRlciwKLSAgICAgICAgICAgIGxlbihzZXQoc2VsZi5fZmFpbHVyZXMua2V5cygp
KSB8IHNlbGYuX3NraXBwZWRfdGVzdHMpLAotICAgICAgICAgICAgc2VsZi5GSVhBQkxFX0NPVU5U
KQotCi0gICAgICAgICMgQ3JlYXRlIGEgcGFzcy9za2lwL2ZhaWx1cmUgc3VtbWFyeSBkaWN0aW9u
YXJ5LgotICAgICAgICBlbnRyeSA9IHt9Ci0gICAgICAgIGVudHJ5W3NlbGYuU0tJUF9SRVNVTFRd
ID0gbGVuKHNlbGYuX3NraXBwZWRfdGVzdHMpCi0gICAgICAgIGVudHJ5W3NlbGYuUEFTU19SRVNV
TFRdID0gbGVuKHNlbGYuX3Bhc3NlZF90ZXN0cykKLSAgICAgICAgZ2V0ID0gZW50cnkuZ2V0Ci0g
ICAgICAgIGZvciBmYWlsdXJlX3R5cGUgaW4gc2VsZi5fZmFpbHVyZXMudmFsdWVzKCk6Ci0gICAg
ICAgICAgICBmYWlsdXJlX2NoYXIgPSBzZWxmLkZBSUxVUkVfVE9fQ0hBUltmYWlsdXJlX3R5cGVd
Ci0gICAgICAgICAgICBlbnRyeVtmYWlsdXJlX2NoYXJdID0gZ2V0KGZhaWx1cmVfY2hhciwgMCkg
KyAxCi0KLSAgICAgICAgIyBJbnNlcnQgdGhlIHBhc3Mvc2tpcC9mYWlsdXJlIHN1bW1hcnkgZGlj
dGlvbmFyeS4KLSAgICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1faW50b19yYXdfbGlzdChyZXN1bHRz
X2Zvcl9idWlsZGVyLCBlbnRyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxmLkZJWEFCTEUpCi0KLSAgICAgICAgIyBJbnNlcnQgdGhlIG51bWJlciBvZiBhbGwg
dGhlIHRlc3RzIHRoYXQgYXJlIHN1cHBvc2VkIHRvIHBhc3MuCi0gICAgICAgIHNlbGYuX2luc2Vy
dF9pdGVtX2ludG9fcmF3X2xpc3QocmVzdWx0c19mb3JfYnVpbGRlciwKLSAgICAgICAgICAgIGxl
bihzZWxmLl9za2lwcGVkX3Rlc3RzIHwgc2VsZi5fYWxsX3Rlc3RzKSwKLSAgICAgICAgICAgIHNl
bGYuQUxMX0ZJWEFCTEVfQ09VTlQpCi0KLSAgICBkZWYgX2luc2VydF9pdGVtX2ludG9fcmF3X2xp
c3Qoc2VsZiwgcmVzdWx0c19mb3JfYnVpbGRlciwgaXRlbSwga2V5KToKLSAgICAgICAgIiIiSW5z
ZXJ0cyB0aGUgaXRlbSBpbnRvIHRoZSBsaXN0IHdpdGggdGhlIGdpdmVuIGtleSBpbiB0aGUgcmVz
dWx0cyBmb3IKLSAgICAgICAgdGhpcyBidWlsZGVyLiBDcmVhdGVzIHRoZSBsaXN0IGlmIG5vIHN1
Y2ggbGlzdCBleGlzdHMuCi0KLSAgICAgICAgQXJnczoKLSAgICAgICAgICByZXN1bHRzX2Zvcl9i
dWlsZGVyOiBEaWN0aW9uYXJ5IGNvbnRhaW5pbmcgdGhlIHRlc3QgcmVzdWx0cyBmb3IgYQotICAg
ICAgICAgICAgICBzaW5nbGUgYnVpbGRlci4KLSAgICAgICAgICBpdGVtOiBOdW1iZXIgb3Igc3Ry
aW5nIHRvIGluc2VydCBpbnRvIHRoZSBsaXN0LgotICAgICAgICAgIGtleTogS2V5IGluIHJlc3Vs
dHNfZm9yX2J1aWxkZXIgZm9yIHRoZSBsaXN0IHRvIGluc2VydCBpbnRvLgotICAgICAgICAiIiIK
LSAgICAgICAgaWYga2V5IGluIHJlc3VsdHNfZm9yX2J1aWxkZXI6Ci0gICAgICAgICAgICByYXdf
bGlzdCA9IHJlc3VsdHNfZm9yX2J1aWxkZXJba2V5XQotICAgICAgICBlbHNlOgotICAgICAgICAg
ICAgcmF3X2xpc3QgPSBbXQotCi0gICAgICAgIHJhd19saXN0Lmluc2VydCgwLCBpdGVtKQotICAg
ICAgICByYXdfbGlzdCA9IHJhd19saXN0WzpzZWxmLk1BWF9OVU1CRVJfT0ZfQlVJTERfUkVTVUxU
U19UT19MT0ddCi0gICAgICAgIHJlc3VsdHNfZm9yX2J1aWxkZXJba2V5XSA9IHJhd19saXN0Ci0K
LSAgICBkZWYgX2luc2VydF9pdGVtX3J1bl9sZW5ndGhfZW5jb2RlZChzZWxmLCBpdGVtLCBlbmNv
ZGVkX3Jlc3VsdHMpOgotICAgICAgICAiIiJJbnNlcnRzIHRoZSBpdGVtIGludG8gdGhlIHJ1bi1s
ZW5ndGggZW5jb2RlZCByZXN1bHRzLgotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgaXRlbTog
U3RyaW5nIG9yIG51bWJlciB0byBpbnNlcnQuCi0gICAgICAgICAgZW5jb2RlZF9yZXN1bHRzOiBy
dW4tbGVuZ3RoIGVuY29kZWQgcmVzdWx0cy4gQW4gYXJyYXkgb2YgYXJyYXlzLCBlLmcuCi0gICAg
ICAgICAgICAgIFtbMywnQSddLFsxLCdRJ11dIGVuY29kZXMgQUFBUS4KLSAgICAgICAgIiIiCi0g
ICAgICAgIGlmIGxlbihlbmNvZGVkX3Jlc3VsdHMpIGFuZCBpdGVtID09IGVuY29kZWRfcmVzdWx0
c1swXVsxXToKLSAgICAgICAgICAgIG51bV9yZXN1bHRzID0gZW5jb2RlZF9yZXN1bHRzWzBdWzBd
Ci0gICAgICAgICAgICBpZiBudW1fcmVzdWx0cyA8PSBzZWxmLk1BWF9OVU1CRVJfT0ZfQlVJTERf
UkVTVUxUU19UT19MT0c6Ci0gICAgICAgICAgICAgICAgZW5jb2RlZF9yZXN1bHRzWzBdWzBdID0g
bnVtX3Jlc3VsdHMgKyAxCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAjIFVzZSBhIGxpc3Qg
aW5zdGVhZCBvZiBhIGNsYXNzIGZvciB0aGUgcnVuLWxlbmd0aCBlbmNvZGluZyBzaW5jZQotICAg
ICAgICAgICAgIyB3ZSB3YW50IHRoZSBzZXJpYWxpemVkIGZvcm0gdG8gYmUgY29uY2lzZS4KLSAg
ICAgICAgICAgIGVuY29kZWRfcmVzdWx0cy5pbnNlcnQoMCwgWzEsIGl0ZW1dKQotCi0gICAgZGVm
IF9pbnNlcnRfZ2VuZXJpY19tZXRhZGF0YShzZWxmLCByZXN1bHRzX2Zvcl9idWlsZGVyKToKLSAg
ICAgICAgIiIiIEluc2VydHMgZ2VuZXJpYyBtZXRhZGF0YSAoc3VjaCBhcyB2ZXJzaW9uIG51bWJl
ciwgY3VycmVudCB0aW1lIGV0YykKLSAgICAgICAgaW50byB0aGUgSlNPTi4KLQotICAgICAgICBB
cmdzOgotICAgICAgICAgIHJlc3VsdHNfZm9yX2J1aWxkZXI6IERpY3Rpb25hcnkgY29udGFpbmlu
ZyB0aGUgdGVzdCByZXN1bHRzIGZvcgotICAgICAgICAgICAgICBhIHNpbmdsZSBidWlsZGVyLgot
ICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1faW50b19yYXdfbGlzdChyZXN1
bHRzX2Zvcl9idWlsZGVyLAotICAgICAgICAgICAgc2VsZi5fYnVpbGRfbnVtYmVyLCBzZWxmLkJV
SUxEX05VTUJFUlMpCi0KLSAgICAgICAgIyBUaGVzZSBuZXh0IHR3byBicmFuY2hlcyB0ZXN0IHRv
IHNlZSB3aGljaCBzb3VyY2UgcmVwb3Mgd2UgY2FuCi0gICAgICAgICMgcHVsbCByZXZpc2lvbnMg
ZnJvbS4KLSAgICAgICAgaWYgaGFzYXR0cihzZWxmLl9wb3J0LCAncGF0aF9mcm9tX3dlYmtpdF9i
YXNlJyk6Ci0gICAgICAgICAgICBwYXRoX3RvX3dlYmtpdCA9IHNlbGYuX3BvcnQucGF0aF9mcm9t
X3dlYmtpdF9iYXNlKCdXZWJDb3JlJykKLSAgICAgICAgICAgIHNlbGYuX2luc2VydF9pdGVtX2lu
dG9fcmF3X2xpc3QocmVzdWx0c19mb3JfYnVpbGRlciwKLSAgICAgICAgICAgICAgICBzZWxmLl9n
ZXRfc3ZuX3JldmlzaW9uKHBhdGhfdG9fd2Via2l0KSwKLSAgICAgICAgICAgICAgICBzZWxmLldF
QktJVF9TVk4pCi0KLSAgICAgICAgaWYgaGFzYXR0cihzZWxmLl9wb3J0LCAncGF0aF9mcm9tX2No
cm9taXVtX2Jhc2UnKToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBwYXRoX3Rv
X2Nocm9tZSA9IHNlbGYuX3BvcnQucGF0aF9mcm9tX2Nocm9taXVtX2Jhc2UoKQotICAgICAgICAg
ICAgICAgIHNlbGYuX2luc2VydF9pdGVtX2ludG9fcmF3X2xpc3QocmVzdWx0c19mb3JfYnVpbGRl
ciwKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fZ2V0X3N2bl9yZXZpc2lvbihwYXRoX3RvX2No
cm9tZSksCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuQ0hST01FX1NWTikKKyAgICAgICAgICAg
ICAgICBjaHJvbWl1bV9zdm5fYmFzZSA9IHBvcnQucGF0aF9mcm9tX2Nocm9taXVtX2Jhc2UoKQog
ICAgICAgICAgICAgZXhjZXB0IEFzc2VydGlvbkVycm9yOgogICAgICAgICAgICAgICAgICMgV2Un
cmUgbm90IGluIGEgQ2hyb21pdW0gY2hlY2tvdXQsIHRoYXQncyBvay4KICAgICAgICAgICAgICAg
ICBwYXNzCiAKLSAgICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1faW50b19yYXdfbGlzdChyZXN1bHRz
X2Zvcl9idWlsZGVyLAotICAgICAgICAgICAgaW50KHRpbWUudGltZSgpKSwKLSAgICAgICAgICAg
IHNlbGYuVElNRSkKLQotICAgIGRlZiBfaW5zZXJ0X3Rlc3RfdGltZV9hbmRfcmVzdWx0KHNlbGYs
IHRlc3RfbmFtZSwgdGVzdHMpOgotICAgICAgICAiIiIgSW5zZXJ0IGEgdGVzdCBpdGVtIHdpdGgg
aXRzIHJlc3VsdHMgdG8gdGhlIGdpdmVuIHRlc3RzIGRpY3Rpb25hcnkuCi0KLSAgICAgICAgQXJn
czoKLSAgICAgICAgICB0ZXN0czogRGljdGlvbmFyeSBjb250YWluaW5nIHRlc3QgcmVzdWx0IGVu
dHJpZXMuCi0gICAgICAgICIiIgotCi0gICAgICAgIHJlc3VsdCA9IEpTT05SZXN1bHRzR2VuZXJh
dG9yLlBBU1NfUkVTVUxUCi0gICAgICAgIHRpbWUgPSAwCi0KLSAgICAgICAgaWYgdGVzdF9uYW1l
IG5vdCBpbiBzZWxmLl9hbGxfdGVzdHM6Ci0gICAgICAgICAgICByZXN1bHQgPSBKU09OUmVzdWx0
c0dlbmVyYXRvci5OT19EQVRBX1JFU1VMVAotCi0gICAgICAgIGlmIHRlc3RfbmFtZSBpbiBzZWxm
Ll9mYWlsdXJlczoKLSAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuRkFJTFVSRV9UT19DSEFSW3Nl
bGYuX2ZhaWx1cmVzW3Rlc3RfbmFtZV1dCi0KLSAgICAgICAgaWYgdGVzdF9uYW1lIGluIHNlbGYu
X3Rlc3RfdGltaW5nczoKLSAgICAgICAgICAgICMgRmxvb3IgZm9yIG5vdyB0byBnZXQgdGltZSBp
biBzZWNvbmRzLgotICAgICAgICAgICAgdGltZSA9IGludChzZWxmLl90ZXN0X3RpbWluZ3NbdGVz
dF9uYW1lXSkKLQotICAgICAgICBpZiB0ZXN0X25hbWUgbm90IGluIHRlc3RzOgotICAgICAgICAg
ICAgdGVzdHNbdGVzdF9uYW1lXSA9IHNlbGYuX2NyZWF0ZV9yZXN1bHRzX2FuZF90aW1lc19qc29u
KCkKLQotICAgICAgICB0aGlzVGVzdCA9IHRlc3RzW3Rlc3RfbmFtZV0KLSAgICAgICAgc2VsZi5f
aW5zZXJ0X2l0ZW1fcnVuX2xlbmd0aF9lbmNvZGVkKHJlc3VsdCwgdGhpc1Rlc3Rbc2VsZi5SRVNV
TFRTXSkKLSAgICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1fcnVuX2xlbmd0aF9lbmNvZGVkKHRpbWUs
IHRoaXNUZXN0W3NlbGYuVElNRVNdKQotICAgICAgICBzZWxmLl9ub3JtYWxpemVfcmVzdWx0c19q
c29uKHRoaXNUZXN0LCB0ZXN0X25hbWUsIHRlc3RzKQotCi0gICAgZGVmIF9jb252ZXJ0X2pzb25f
dG9fY3VycmVudF92ZXJzaW9uKHNlbGYsIHJlc3VsdHNfanNvbik6Ci0gICAgICAgICIiIklmIHRo
ZSBKU09OIGRvZXMgbm90IG1hdGNoIHRoZSBjdXJyZW50IHZlcnNpb24sIGNvbnZlcnRzIGl0IHRv
IHRoZQotICAgICAgICBjdXJyZW50IHZlcnNpb24gYW5kIGFkZHMgaW4gdGhlIG5ldyB2ZXJzaW9u
IG51bWJlci4KLSAgICAgICAgIiIiCi0gICAgICAgIGlmIChzZWxmLlZFUlNJT05fS0VZIGluIHJl
c3VsdHNfanNvbiBhbmQKLSAgICAgICAgICAgIHJlc3VsdHNfanNvbltzZWxmLlZFUlNJT05fS0VZ
XSA9PSBzZWxmLlZFUlNJT04pOgotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgcmVzdWx0
c19qc29uW3NlbGYuVkVSU0lPTl9LRVldID0gc2VsZi5WRVJTSU9OCi0KLSAgICBkZWYgX2NyZWF0
ZV9yZXN1bHRzX2FuZF90aW1lc19qc29uKHNlbGYpOgotICAgICAgICByZXN1bHRzX2FuZF90aW1l
cyA9IHt9Ci0gICAgICAgIHJlc3VsdHNfYW5kX3RpbWVzW3NlbGYuUkVTVUxUU10gPSBbXQotICAg
ICAgICByZXN1bHRzX2FuZF90aW1lc1tzZWxmLlRJTUVTXSA9IFtdCi0gICAgICAgIHJldHVybiBy
ZXN1bHRzX2FuZF90aW1lcwotCi0gICAgZGVmIF9jcmVhdGVfcmVzdWx0c19mb3JfYnVpbGRlcl9q
c29uKHNlbGYpOgotICAgICAgICByZXN1bHRzX2Zvcl9idWlsZGVyID0ge30KLSAgICAgICAgcmVz
dWx0c19mb3JfYnVpbGRlcltzZWxmLlRFU1RTXSA9IHt9Ci0gICAgICAgIHJldHVybiByZXN1bHRz
X2Zvcl9idWlsZGVyCi0KLSAgICBkZWYgX3JlbW92ZV9pdGVtc19vdmVyX21heF9udW1iZXJfb2Zf
YnVpbGRzKHNlbGYsIGVuY29kZWRfbGlzdCk6Ci0gICAgICAgICIiIlJlbW92ZXMgaXRlbXMgZnJv
bSB0aGUgcnVuLWxlbmd0aCBlbmNvZGVkIGxpc3QgYWZ0ZXIgdGhlIGZpbmFsCi0gICAgICAgIGl0
ZW0gdGhhdCBleGNlZWRzIHRoZSBtYXggbnVtYmVyIG9mIGJ1aWxkcyB0byB0cmFjay4KLQotICAg
ICAgICBBcmdzOgotICAgICAgICAgIGVuY29kZWRfcmVzdWx0czogcnVuLWxlbmd0aCBlbmNvZGVk
IHJlc3VsdHMuIEFuIGFycmF5IG9mIGFycmF5cywgZS5nLgotICAgICAgICAgICAgICBbWzMsJ0En
XSxbMSwnUSddXSBlbmNvZGVzIEFBQVEuCi0gICAgICAgICIiIgotICAgICAgICBudW1fYnVpbGRz
ID0gMAotICAgICAgICBpbmRleCA9IDAKLSAgICAgICAgZm9yIHJlc3VsdCBpbiBlbmNvZGVkX2xp
c3Q6Ci0gICAgICAgICAgICBudW1fYnVpbGRzID0gbnVtX2J1aWxkcyArIHJlc3VsdFswXQotICAg
ICAgICAgICAgaW5kZXggPSBpbmRleCArIDEKLSAgICAgICAgICAgIGlmIG51bV9idWlsZHMgPiBz
ZWxmLk1BWF9OVU1CRVJfT0ZfQlVJTERfUkVTVUxUU19UT19MT0c6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGVuY29kZWRfbGlzdFs6aW5kZXhdCi0gICAgICAgIHJldHVybiBlbmNvZGVkX2xpc3QK
LQotICAgIGRlZiBfbm9ybWFsaXplX3Jlc3VsdHNfanNvbihzZWxmLCB0ZXN0LCB0ZXN0X25hbWUs
IHRlc3RzKToKLSAgICAgICAgIiIiIFBydW5lIHRlc3RzIHdoZXJlIGFsbCBydW5zIHBhc3Mgb3Ig
dGVzdHMgdGhhdCBubyBsb25nZXIgZXhpc3QgYW5kCi0gICAgICAgIHRydW5jYXRlIGFsbCByZXN1
bHRzIHRvIG1heE51bWJlck9mQnVpbGRzLgotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgdGVz
dDogUmVzdWx0c0FuZFRpbWVzIG9iamVjdCBmb3IgdGhpcyB0ZXN0LgotICAgICAgICAgIHRlc3Rf
bmFtZTogTmFtZSBvZiB0aGUgdGVzdC4KLSAgICAgICAgICB0ZXN0czogVGhlIEpTT04gb2JqZWN0
IHdpdGggYWxsIHRoZSB0ZXN0IHJlc3VsdHMgZm9yIHRoaXMgYnVpbGRlci4KLSAgICAgICAgIiIi
Ci0gICAgICAgIHRlc3Rbc2VsZi5SRVNVTFRTXSA9IHNlbGYuX3JlbW92ZV9pdGVtc19vdmVyX21h
eF9udW1iZXJfb2ZfYnVpbGRzKAotICAgICAgICAgICAgdGVzdFtzZWxmLlJFU1VMVFNdKQotICAg
ICAgICB0ZXN0W3NlbGYuVElNRVNdID0gc2VsZi5fcmVtb3ZlX2l0ZW1zX292ZXJfbWF4X251bWJl
cl9vZl9idWlsZHMoCi0gICAgICAgICAgICB0ZXN0W3NlbGYuVElNRVNdKQotCi0gICAgICAgIGlz
X2FsbF9wYXNzID0gc2VsZi5faXNfcmVzdWx0c19hbGxfb2ZfdHlwZSh0ZXN0W3NlbGYuUkVTVUxU
U10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLlBBU1NfUkVTVUxUKQotICAgICAgICBpc19hbGxfbm9fZGF0YSA9IHNlbGYuX2lzX3Jlc3Vs
dHNfYWxsX29mX3R5cGUodGVzdFtzZWxmLlJFU1VMVFNdLAotICAgICAgICAgICAgc2VsZi5OT19E
QVRBX1JFU1VMVCkKLSAgICAgICAgbWF4X3RpbWUgPSBtYXgoW3RpbWVbMV0gZm9yIHRpbWUgaW4g
dGVzdFtzZWxmLlRJTUVTXV0pCi0KLSAgICAgICAgIyBSZW1vdmUgYWxsIHBhc3Nlcy9uby1kYXRh
IGZyb20gdGhlIHJlc3VsdHMgdG8gcmVkdWNlIG5vaXNlIGFuZAotICAgICAgICAjIGZpbGVzaXpl
LiBJZiBhIHRlc3QgcGFzc2VzIGV2ZXJ5IHJ1biwgYnV0IHRha2VzID4gTUlOX1RJTUUgdG8gcnVu
LAotICAgICAgICAjIGRvbid0IHRocm93IGF3YXkgdGhlIGRhdGEuCi0gICAgICAgIGlmIGlzX2Fs
bF9ub19kYXRhIG9yIChpc19hbGxfcGFzcyBhbmQgbWF4X3RpbWUgPD0gc2VsZi5NSU5fVElNRSk6
Ci0gICAgICAgICAgICBkZWwgdGVzdHNbdGVzdF9uYW1lXQotCi0gICAgZGVmIF9pc19yZXN1bHRz
X2FsbF9vZl90eXBlKHNlbGYsIHJlc3VsdHMsIHR5cGUpOgotICAgICAgICAiIiJSZXR1cm5zIHdo
ZXRoZXIgYWxsIHRoZSByZXN1bHRzIGFyZSBvZiB0aGUgZ2l2ZW4gdHlwZQotICAgICAgICAoZS5n
LiBhbGwgcGFzc2VzKS4iIiIKLSAgICAgICAgcmV0dXJuIGxlbihyZXN1bHRzKSA9PSAxIGFuZCBy
ZXN1bHRzWzBdWzFdID09IHR5cGUKKyAgICAgICAgc3VwZXIoSlNPTlJlc3VsdHNHZW5lcmF0b3Is
IHNlbGYpLl9faW5pdF9fKAorICAgICAgICAgICAgYnVpbGRlcl9uYW1lLCBidWlsZF9uYW1lLCBi
dWlsZF9udW1iZXIsCisgICAgICAgICAgICByZXN1bHRzX2ZpbGVfYmFzZV9wYXRoLCBidWlsZGVy
X2Jhc2VfdXJsLAorICAgICAgICAgICAgdGVzdF90aW1pbmdzLCBmYWlsdXJlcywgcGFzc2VkX3Rl
c3RzLCBza2lwcGVkX3Rlc3RzLCBhbGxfdGVzdHMsCisgICAgICAgICAgICB3ZWJraXRfc3ZuX2Jh
c2U9d2Via2l0X3N2bl9iYXNlLAorICAgICAgICAgICAgY2hyb21pdW1fc3ZuX2Jhc2U9Y2hyb21p
dW1fc3ZuX2Jhc2UpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X2V4cGVjdGF0aW9ucy5weSBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfZXhw
ZWN0YXRpb25zLnB5CmluZGV4IDM4MjIzZGRkYmIyMzNiMGU0MzVlMWM3MjQ5NDViMTNlNDcxMThm
YjUuLjEwNjk1MzI1YjNhMDRjNDIyYzUwMTQ4YjI4OGE4ZGM4MmMyYjIwNDAgMTAwNjQ0Ci0tLSBh
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdl
L3Rlc3RfZXhwZWN0YXRpb25zLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfZXhwZWN0YXRpb25zLnB5CkBAIC0zNiwx
NCArMzYsMzAgQEAgaW1wb3J0IG9zCiBpbXBvcnQgcmUKIGltcG9ydCBzeXMKIAorZnJvbSB3ZWJr
aXRweS50ZXN0X3BhY2thZ2UgaW1wb3J0IHRlc3RfcmVzdWx0cwogaW1wb3J0IHdlYmtpdHB5LnRo
aXJkcGFydHkuc2ltcGxlanNvbiBhcyBzaW1wbGVqc29uCiAKIF9sb2cgPSBsb2dnaW5nLmdldExv
Z2dlcigid2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlLiIKICAgICAgICAgICAg
ICAgICAgICAgICAgICAidGVzdF9leHBlY3RhdGlvbnMiKQogCiAjIFRlc3QgZXhwZWN0YXRpb24g
YW5kIG1vZGlmaWVyIGNvbnN0YW50cy4KLShQQVNTLCBGQUlMLCBURVhULCBJTUFHRSwgSU1BR0Vf
UExVU19URVhULCBUSU1FT1VULCBDUkFTSCwgU0tJUCwgV09OVEZJWCwKLSBERUZFUiwgU0xPVywg
UkVCQVNFTElORSwgTUlTU0lORywgRkxBS1ksIE5PVywgTk9ORSkgPSByYW5nZSgxNikKKyMgVGhl
eSBuZWVkIHRvIG1hdGNoIHdpdGggd2Via2l0cHkudGVzdF9wYWNrYWdlLnRlc3RfcmVzdWx0cycg
b25lcy4KK1BBU1MgPSB0ZXN0X3Jlc3VsdHMuUEFTUworRkFJTCA9IHRlc3RfcmVzdWx0cy5GQUlM
CitURVhUID0gdGVzdF9yZXN1bHRzLlRFWFQKK0lNQUdFID0gdGVzdF9yZXN1bHRzLklNQUdFCitJ
TUFHRV9QTFVTX1RFWFQgPSB0ZXN0X3Jlc3VsdHMuSU1BR0VfUExVU19URVhUCitUSU1FT1VUID0g
dGVzdF9yZXN1bHRzLlRJTUVPVVQKK0NSQVNIID0gdGVzdF9yZXN1bHRzLkNSQVNICitTS0lQID0g
dGVzdF9yZXN1bHRzLlNLSVAKK1dPTlRGSVggPSB0ZXN0X3Jlc3VsdHMuV09OVEZJWAorREVGRVIg
PSB0ZXN0X3Jlc3VsdHMuREVGRVIKK1NMT1cgPSB0ZXN0X3Jlc3VsdHMuU0xPVworUkVCQVNFTElO
RSA9IHRlc3RfcmVzdWx0cy5SRUJBU0VMSU5FCitNSVNTSU5HID0gdGVzdF9yZXN1bHRzLk1JU1NJ
TkcKK0ZMQUtZID0gdGVzdF9yZXN1bHRzLkZMQUtZCitOT1cgPSB0ZXN0X3Jlc3VsdHMuTk9XCitO
T05FID0gdGVzdF9yZXN1bHRzLk5PTkUKIAogIyBUZXN0IGV4cGVjdGF0aW9uIGZpbGUgdXBkYXRl
IGFjdGlvbiBjb25zdGFudHMKIChOT19DSEFOR0UsIFJFTU9WRV9URVNULCBSRU1PVkVfUExBVEZP
Uk0sIEFERF9QTEFURk9STVNfRVhDRVBUX1RISVMpID0gcmFuZ2UoNCkKZGlmZiAtLWdpdCBhL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdF9wYWNrYWdlL19faW5pdF9fLnB5IGIvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90ZXN0X3BhY2thZ2UvX19pbml0X18ucHkKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZWY2NWJlZTViYjc3ZTk2ZWJjN2NkOWM0NzY0MDY5MGZiZGE4YWMxOQotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdF9wYWNrYWdlL19faW5p
dF9fLnB5CkBAIC0wLDAgKzEgQEAKKyMgUmVxdWlyZWQgZm9yIFB5dGhvbiB0byBzZWFyY2ggdGhp
cyBkaXJlY3RvcnkgZm9yIG1vZHVsZSBmaWxlcwpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS90ZXN0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvci5weSBiL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5l
cmF0b3IucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMWM2MDVjMjZjMzFlY2I5MzVmN2VlYjk5OGVlNTA3NTZiZjNh
NThlNQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVz
dF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5lcmF0b3IucHkKQEAgLTAsMCArMSw0MzMgQEAKKyMh
L3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0
OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2Zyb20gX19mdXR1cmVfXyBp
bXBvcnQgd2l0aF9zdGF0ZW1lbnQKKworaW1wb3J0IGNvZGVjcworaW1wb3J0IGxvZ2dpbmcKK2lt
cG9ydCBvcworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aW1lCitpbXBv
cnQgdXJsbGliMgoraW1wb3J0IHhtbC5kb20ubWluaWRvbQorCitmcm9tIHdlYmtpdHB5LnRlc3Rf
cGFja2FnZSBpbXBvcnQgdGVzdF9yZXN1bHRzCitpbXBvcnQgd2Via2l0cHkudGhpcmRwYXJ0eS5z
aW1wbGVqc29uIGFzIHNpbXBsZWpzb24KKworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ3ZWJr
aXRweS50ZXN0X3BhY2thZ2UuanNvbl9yZXN1bHRzX2dlbmVyYXRvciIpCisKKworY2xhc3MgSlNP
TlJlc3VsdHNHZW5lcmF0b3Iob2JqZWN0KToKKyAgICAiIiJBIEpTT04gcmVzdWx0cyBnZW5lcmF0
b3IgZm9yIGdlbmVyaWMgdGVzdHMuIiIiCisKKyAgICBNQVhfTlVNQkVSX09GX0JVSUxEX1JFU1VM
VFNfVE9fTE9HID0gNzUwCisgICAgIyBNaW4gdGltZSAoc2Vjb25kcykgdGhhdCB3aWxsIGJlIGFk
ZGVkIHRvIHRoZSBKU09OLgorICAgIE1JTl9USU1FID0gMQorICAgIEpTT05fUFJFRklYID0gIkFE
RF9SRVNVTFRTKCIKKyAgICBKU09OX1NVRkZJWCA9ICIpOyIKKyAgICBQQVNTX1JFU1VMVCA9ICJQ
IgorICAgIFNLSVBfUkVTVUxUID0gIlgiCisgICAgTk9fREFUQV9SRVNVTFQgPSAiTiIKKyAgICBW
RVJTSU9OID0gMworICAgIFZFUlNJT05fS0VZID0gInZlcnNpb24iCisgICAgUkVTVUxUUyA9ICJy
ZXN1bHRzIgorICAgIFRJTUVTID0gInRpbWVzIgorICAgIEJVSUxEX05VTUJFUlMgPSAiYnVpbGRO
dW1iZXJzIgorICAgIFdFQktJVF9TVk4gPSAid2Via2l0UmV2aXNpb24iCisgICAgQ0hST01FX1NW
TiA9ICJjaHJvbWVSZXZpc2lvbiIKKyAgICBUSU1FID0gInNlY29uZHNTaW5jZUVwb2NoIgorICAg
IFRFU1RTID0gInRlc3RzIgorCisgICAgRklYQUJMRV9DT1VOVCA9ICJmaXhhYmxlQ291bnQiCisg
ICAgRklYQUJMRSA9ICJmaXhhYmxlQ291bnRzIgorICAgIEFMTF9GSVhBQkxFX0NPVU5UID0gImFs
bEZpeGFibGVDb3VudCIKKworICAgICMgTm90ZSB0aGF0IHdlIG9taXQgdGVzdF9yZXN1bHRzLkZB
SUwgZnJvbSB0aGlzIGxpc3QgYmVjYXVzZQorICAgICMgaXQgc2hvdWxkIG5ldmVyIHNob3cgdXAg
KGl0J3MgYSBsZWdhY3kgaW5wdXQgZXhwZWN0YXRpb24sIG5ldmVyCisgICAgIyBhbiBvdXRwdXQg
ZXhwZWN0YXRpb24pLgorICAgIEZBSUxVUkVfVE9fQ0hBUiA9IHt0ZXN0X3Jlc3VsdHMuQ1JBU0g6
ICJDIiwKKyAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9yZXN1bHRzLlRJTUVPVVQ6ICJUIiwK
KyAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9yZXN1bHRzLklNQUdFOiAiSSIsCisgICAgICAg
ICAgICAgICAgICAgICAgIHRlc3RfcmVzdWx0cy5URVhUOiAiRiIsCisgICAgICAgICAgICAgICAg
ICAgICAgIHRlc3RfcmVzdWx0cy5NSVNTSU5HOiAiTyIsCisgICAgICAgICAgICAgICAgICAgICAg
IHRlc3RfcmVzdWx0cy5JTUFHRV9QTFVTX1RFWFQ6ICJaIn0KKyAgICBGQUlMVVJFX0NIQVJTID0g
RkFJTFVSRV9UT19DSEFSLnZhbHVlcygpCisKKyAgICBSRVNVTFRTX0ZJTEVOQU1FID0gInJlc3Vs
dHMuanNvbiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBidWlsZGVyX25hbWUsIGJ1aWxkX25h
bWUsIGJ1aWxkX251bWJlciwKKyAgICAgICAgcmVzdWx0c19maWxlX2Jhc2VfcGF0aCwgYnVpbGRl
cl9iYXNlX3VybCwKKyAgICAgICAgdGVzdF90aW1pbmdzLCBmYWlsdXJlcywgcGFzc2VkX3Rlc3Rz
LCBza2lwcGVkX3Rlc3RzLCBhbGxfdGVzdHMsCisgICAgICAgIHdlYmtpdF9zdm5fYmFzZT1Ob25l
LCBjaHJvbWl1bV9zdm5fYmFzZT1Ob25lKToKKyAgICAgICAgIiIiTW9kaWZpZXMgdGhlIHJlc3Vs
dHMuanNvbiBmaWxlLiBHcmFicyBpdCBvZmYgdGhlIGFyY2hpdmUgZGlyZWN0b3J5CisgICAgICAg
IGlmIGl0IGlzIG5vdCBmb3VuZCBsb2NhbGx5LgorCisgICAgICAgIEFyZ3MKKyAgICAgICAgICBi
dWlsZGVyX25hbWU6IHRoZSBidWlsZGVyIG5hbWUgKGUuZy4gV2Via2l0KS4KKyAgICAgICAgICBi
dWlsZF9uYW1lOiB0aGUgYnVpbGQgbmFtZSAoZS5nLiB3ZWJraXQtcmVsKS4KKyAgICAgICAgICBi
dWlsZF9udW1iZXI6IHRoZSBidWlsZCBudW1iZXIuCisgICAgICAgICAgcmVzdWx0c19maWxlX2Jh
c2VfcGF0aDogQWJzb2x1dGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlCisg
ICAgICAgICAgICAgIHJlc3VsdHMganNvbiBmaWxlLgorICAgICAgICAgIGJ1aWxkZXJfYmFzZV91
cmw6IHRoZSBVUkwgd2hlcmUgd2UgaGF2ZSB0aGUgYXJjaGl2ZWQgdGVzdCByZXN1bHRzLgorICAg
ICAgICAgIHRlc3RfdGltaW5nczogTWFwIG9mIHRlc3QgbmFtZSB0byBhIHRlc3RfcnVuLXRpbWUu
CisgICAgICAgICAgZmFpbHVyZXM6IE1hcCBvZiB0ZXN0IG5hbWUgdG8gYSBmYWlsdXJlIHR5cGUg
KG9mIHRlc3RfcmVzdWx0cyksIG9yCisgICAgICAgICAgICAgIGEgbGlzdCAob3Igc2V0KSBvZiBm
YWlsZWQgdGVzdCBuYW1lcy4KKyAgICAgICAgICBwYXNzZWRfdGVzdHM6IEEgc2V0IGNvbnRhaW5p
bmcgYWxsIHRoZSBwYXNzZWQgdGVzdHMuCisgICAgICAgICAgc2tpcHBlZF90ZXN0czogQSBzZXQg
Y29udGFpbmluZyBhbGwgdGhlIHNraXBwZWQgdGVzdHMuCisgICAgICAgICAgYWxsX3Rlc3RzOiBM
aXN0IG9mIGFsbCB0aGUgdGVzdHMgdGhhdCB3ZXJlIHJ1bi4gIFRoaXMgc2hvdWxkIG5vdAorICAg
ICAgICAgICAgICBpbmNsdWRlIHNraXBwZWQgdGVzdHMuCisgICAgICAgICIiIgorICAgICAgICBz
ZWxmLl9idWlsZGVyX25hbWUgPSBidWlsZGVyX25hbWUKKyAgICAgICAgc2VsZi5fYnVpbGRfbmFt
ZSA9IGJ1aWxkX25hbWUKKyAgICAgICAgc2VsZi5fYnVpbGRfbnVtYmVyID0gYnVpbGRfbnVtYmVy
CisgICAgICAgIHNlbGYuX2J1aWxkZXJfYmFzZV91cmwgPSBidWlsZGVyX2Jhc2VfdXJsCisgICAg
ICAgIHNlbGYuX3Jlc3VsdHNfZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKHJlc3VsdHNfZmlsZV9i
YXNlX3BhdGgsCisgICAgICAgICAgICBzZWxmLlJFU1VMVFNfRklMRU5BTUUpCisgICAgICAgIHNl
bGYuX3Rlc3RfdGltaW5ncyA9IHRlc3RfdGltaW5ncworICAgICAgICBzZWxmLl9mYWlsdXJlcyA9
IHt9CisgICAgICAgIGlmIHR5cGUoZmFpbHVyZXMpIGlzIGRpY3Q6CisgICAgICAgICAgICBzZWxm
Ll9mYWlsdXJlcyA9IGZhaWx1cmVzCisgICAgICAgIGVsaWYgZ2V0YXR0cihmYWlsdXJlcywgJ19f
aXRlcl9fJywgRmFsc2UpOgorICAgICAgICAgICAgIyBJZiB0aGUgZ2l2ZW4gZmFpbHVyZXMgaXMg
aXRlcmFibGUgYnV0IG5vdCBhIGRpY3QsIGxldHMgYXNzdW1lCisgICAgICAgICAgICAjIHRoYXQg
ZXZlcnkgZmFpbHVyZSB3YXMgYSBURVhUIGZhaWx1cmUuCisgICAgICAgICAgICBzZWxmLl9mYWls
dXJlcyA9IGRpY3QoWyhmLCB0ZXN0X3Jlc3VsdHMuVEVYVCkgZm9yIGYgaW4gZmFpbHVyZXNdKQor
ICAgICAgICBzZWxmLl9wYXNzZWRfdGVzdHMgPSBwYXNzZWRfdGVzdHMKKyAgICAgICAgc2VsZi5f
c2tpcHBlZF90ZXN0cyA9IHNraXBwZWRfdGVzdHMKKyAgICAgICAgc2VsZi5fYWxsX3Rlc3RzID0g
YWxsX3Rlc3RzCisKKyAgICAgICAgc2VsZi5fd2Via2l0X3N2bl9iYXNlID0gd2Via2l0X3N2bl9i
YXNlCisgICAgICAgIHNlbGYuX2Nocm9taXVtX3N2bl9iYXNlID0gY2hyb21pdW1fc3ZuX2Jhc2UK
KworICAgICAgICBzZWxmLl9nZW5lcmF0ZV9qc29uX291dHB1dCgpCisKKyAgICBkZWYgX2dlbmVy
YXRlX2pzb25fb3V0cHV0KHNlbGYpOgorICAgICAgICAiIiJHZW5lcmF0ZXMgdGhlIEpTT04gb3V0
cHV0IGZpbGUuIiIiCisgICAgICAgIGpzb24gPSBzZWxmLl9nZXRfanNvbigpCisgICAgICAgIGlm
IGpzb246CisgICAgICAgICAgICByZXN1bHRzX2ZpbGUgPSBjb2RlY3Mub3BlbihzZWxmLl9yZXN1
bHRzX2ZpbGVfcGF0aCwgInciLCAidXRmLTgiKQorICAgICAgICAgICAgcmVzdWx0c19maWxlLndy
aXRlKGpzb24pCisgICAgICAgICAgICByZXN1bHRzX2ZpbGUuY2xvc2UoKQorCisgICAgIyBGSVhN
RTogQ2FsbGVycyBzaG91bGQgdXNlIHNjbS5weSBpbnN0ZWFkLgorICAgIGRlZiBfZ2V0X3N2bl9y
ZXZpc2lvbihzZWxmLCBpbl9kaXJlY3RvcnkpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBzdm4g
cmV2aXNpb24gZm9yIHRoZSBnaXZlbiBkaXJlY3RvcnkuCisKKyAgICAgICAgQXJnczoKKyAgICAg
ICAgICBpbl9kaXJlY3Rvcnk6IFRoZSBkaXJlY3Rvcnkgd2hlcmUgc3ZuIGlzIHRvIGJlIHJ1bi4K
KyAgICAgICAgIiIiCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihpbl9k
aXJlY3RvcnksICcuc3ZuJykpOgorICAgICAgICAgICAgIyBOb3RlOiBOb3QgdGhyZWFkIHNhZmU6
IGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyMzIwCisgICAgICAgICAgICBvdXRwdXQgPSBz
dWJwcm9jZXNzLlBvcGVuKFsic3ZuIiwgImluZm8iLCAiLS14bWwiXSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY3dkPWluX2RpcmVjdG9yeSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2hlbGw9KHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3Mu
UElQRSkuY29tbXVuaWNhdGUoKVswXQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAg
IGRvbSA9IHhtbC5kb20ubWluaWRvbS5wYXJzZVN0cmluZyhvdXRwdXQpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGRvbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZW50cnknKVswXS5nZXRBdHRyaWJ1
dGUoCisgICAgICAgICAgICAgICAgICAgICdyZXZpc2lvbicpCisgICAgICAgICAgICBleGNlcHQg
eG1sLnBhcnNlcnMuZXhwYXQuRXhwYXRFcnJvcjoKKyAgICAgICAgICAgICAgICByZXR1cm4gIiIK
KyAgICAgICAgcmV0dXJuICIiCisKKyAgICBkZWYgX2dldF9hcmNoaXZlZF9qc29uX3Jlc3VsdHMo
c2VsZik6CisgICAgICAgICIiIlJlYWRzIG9sZCByZXN1bHRzIEpTT04gZmlsZSBpZiBpdCBleGlz
dHMuCisgICAgICAgIFJldHVybnMgKGFyY2hpdmVkX3Jlc3VsdHMsIGVycm9yKSB0dXBsZSB3aGVy
ZSBlcnJvciBpcyBOb25lIGlmIHJlc3VsdHMKKyAgICAgICAgd2VyZSBzdWNjZXNzZnVsbHkgcmVh
ZC4KKyAgICAgICAgIiIiCisgICAgICAgIHJlc3VsdHNfanNvbiA9IHt9CisgICAgICAgIG9sZF9y
ZXN1bHRzID0gTm9uZQorICAgICAgICBlcnJvciA9IE5vbmUKKworICAgICAgICBpZiBvcy5wYXRo
LmV4aXN0cyhzZWxmLl9yZXN1bHRzX2ZpbGVfcGF0aCk6CisgICAgICAgICAgICB3aXRoIGNvZGVj
cy5vcGVuKHNlbGYuX3Jlc3VsdHNfZmlsZV9wYXRoLCAiciIsICJ1dGYtOCIpIGFzIGZpbGU6Cisg
ICAgICAgICAgICAgICAgb2xkX3Jlc3VsdHMgPSBmaWxlLnJlYWQoKQorICAgICAgICBlbGlmIHNl
bGYuX2J1aWxkZXJfYmFzZV91cmw6CisgICAgICAgICAgICAjIENoZWNrIGlmIHdlIGhhdmUgdGhl
IGFyY2hpdmVkIEpTT04gZmlsZSBvbiB0aGUgYnVpbGRib3Qgc2VydmVyLgorICAgICAgICAgICAg
cmVzdWx0c19maWxlX3VybCA9IChzZWxmLl9idWlsZGVyX2Jhc2VfdXJsICsKKyAgICAgICAgICAg
ICAgICBzZWxmLl9idWlsZF9uYW1lICsgIi8iICsgc2VsZi5SRVNVTFRTX0ZJTEVOQU1FKQorICAg
ICAgICAgICAgX2xvZy5lcnJvcigiTG9jYWwgcmVzdWx0cy5qc29uIGZpbGUgZG9lcyBub3QgZXhp
c3QuIEdyYWJiaW5nICIKKyAgICAgICAgICAgICAgICAgICAgICAgIml0IG9mZiB0aGUgYXJjaGl2
ZSBhdCAiICsgcmVzdWx0c19maWxlX3VybCkKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgICAgIHJlc3VsdHNfZmlsZSA9IHVybGxpYjIudXJsb3BlbihyZXN1bHRzX2ZpbGVfdXJsKQor
ICAgICAgICAgICAgICAgIGluZm8gPSByZXN1bHRzX2ZpbGUuaW5mbygpCisgICAgICAgICAgICAg
ICAgb2xkX3Jlc3VsdHMgPSByZXN1bHRzX2ZpbGUucmVhZCgpCisgICAgICAgICAgICBleGNlcHQg
dXJsbGliMi5IVFRQRXJyb3IsIGh0dHBfZXJyb3I6CisgICAgICAgICAgICAgICAgIyBBIG5vbi00
eHggc3RhdHVzIGNvZGUgbWVhbnMgdGhlIGJvdCBpcyBob3NlZCBmb3Igc29tZSByZWFzb24KKyAg
ICAgICAgICAgICAgICAjIGFuZCB3ZSBjYW4ndCBncmFiIHRoZSByZXN1bHRzLmpzb24gZmlsZSBv
ZmYgb2YgaXQuCisgICAgICAgICAgICAgICAgaWYgKGh0dHBfZXJyb3IuY29kZSA8IDQwMCBhbmQg
aHR0cF9lcnJvci5jb2RlID49IDUwMCk6CisgICAgICAgICAgICAgICAgICAgIGVycm9yID0gaHR0
cF9lcnJvcgorICAgICAgICAgICAgZXhjZXB0IHVybGxpYjIuVVJMRXJyb3IsIHVybF9lcnJvcjoK
KyAgICAgICAgICAgICAgICBlcnJvciA9IHVybF9lcnJvcgorCisgICAgICAgIGlmIG9sZF9yZXN1
bHRzOgorICAgICAgICAgICAgIyBTdHJpcCB0aGUgcHJlZml4IGFuZCBzdWZmaXggc28gd2UgY2Fu
IGdldCB0aGUgYWN0dWFsIEpTT04gb2JqZWN0LgorICAgICAgICAgICAgb2xkX3Jlc3VsdHMgPSBv
bGRfcmVzdWx0c1tsZW4oc2VsZi5KU09OX1BSRUZJWCk6CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxlbihvbGRfcmVzdWx0cykgLSBsZW4oc2VsZi5KU09OX1NVRkZJWCld
CisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXN1bHRzX2pzb24gPSBzaW1w
bGVqc29uLmxvYWRzKG9sZF9yZXN1bHRzKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAg
ICAgICAgIF9sb2cuZGVidWcoInJlc3VsdHMuanNvbiB3YXMgbm90IHZhbGlkIEpTT04uIENsb2Ji
ZXJpbmcuIikKKyAgICAgICAgICAgICAgICAjIFRoZSBKU09OIGZpbGUgaXMgbm90IHZhbGlkIEpT
T04uIEp1c3QgY2xvYmJlciB0aGUgcmVzdWx0cy4KKyAgICAgICAgICAgICAgICByZXN1bHRzX2pz
b24gPSB7fQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgX2xvZy5kZWJ1ZygnT2xkIEpTT04g
cmVzdWx0cyBkbyBub3QgZXhpc3QuIFN0YXJ0aW5nIGZyZXNoLicpCisgICAgICAgICAgICByZXN1
bHRzX2pzb24gPSB7fQorCisgICAgICAgIHJldHVybiByZXN1bHRzX2pzb24sIGVycm9yCisKKyAg
ICBkZWYgX2dldF9qc29uKHNlbGYpOgorICAgICAgICAiIiJHZXRzIHRoZSByZXN1bHRzIGZvciB0
aGUgcmVzdWx0cy5qc29uIGZpbGUuIiIiCisgICAgICAgIHJlc3VsdHNfanNvbiwgZXJyb3IgPSBz
ZWxmLl9nZXRfYXJjaGl2ZWRfanNvbl9yZXN1bHRzKCkKKyAgICAgICAgaWYgZXJyb3I6CisgICAg
ICAgICAgICAjIElmIHRoZXJlIHdhcyBhbiBlcnJvciBkb24ndCB3cml0ZSBhIHJlc3VsdHMuanNv
bgorICAgICAgICAgICAgIyBmaWxlIGF0IGFsbCBhcyBpdCB3b3VsZCBsb3NlIGFsbCB0aGUgaW5m
b3JtYXRpb24gb24gdGhlIGJvdC4KKyAgICAgICAgICAgIF9sb2cuZXJyb3IoIkFyY2hpdmUgZGly
ZWN0b3J5IGlzIGluYWNjZXNzaWJsZS4gTm90IG1vZGlmeWluZyAiCisgICAgICAgICAgICAgICAg
ICAgICAgICJvciBjbG9iYmVyaW5nIHRoZSByZXN1bHRzLmpzb24gZmlsZTogIiArIHN0cihlcnJv
cikpCisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGJ1aWxkZXJfbmFtZSA9IHNl
bGYuX2J1aWxkZXJfbmFtZQorICAgICAgICBpZiByZXN1bHRzX2pzb24gYW5kIGJ1aWxkZXJfbmFt
ZSBub3QgaW4gcmVzdWx0c19qc29uOgorICAgICAgICAgICAgX2xvZy5kZWJ1ZygiQnVpbGRlciBu
YW1lICglcykgaXMgbm90IGluIHRoZSByZXN1bHRzLmpzb24gZmlsZS4iCisgICAgICAgICAgICAg
ICAgICAgICAgICUgYnVpbGRlcl9uYW1lKQorCisgICAgICAgIHNlbGYuX2NvbnZlcnRfanNvbl90
b19jdXJyZW50X3ZlcnNpb24ocmVzdWx0c19qc29uKQorCisgICAgICAgIGlmIGJ1aWxkZXJfbmFt
ZSBub3QgaW4gcmVzdWx0c19qc29uOgorICAgICAgICAgICAgcmVzdWx0c19qc29uW2J1aWxkZXJf
bmFtZV0gPSAoCisgICAgICAgICAgICAgICAgc2VsZi5fY3JlYXRlX3Jlc3VsdHNfZm9yX2J1aWxk
ZXJfanNvbigpKQorCisgICAgICAgIHJlc3VsdHNfZm9yX2J1aWxkZXIgPSByZXN1bHRzX2pzb25b
YnVpbGRlcl9uYW1lXQorCisgICAgICAgIHNlbGYuX2luc2VydF9nZW5lcmljX21ldGFkYXRhKHJl
c3VsdHNfZm9yX2J1aWxkZXIpCisKKyAgICAgICAgc2VsZi5faW5zZXJ0X2ZhaWx1cmVfc3VtbWFy
aWVzKHJlc3VsdHNfZm9yX2J1aWxkZXIpCisKKyAgICAgICAgIyBVcGRhdGUgdGhlIGFsbCBmYWls
aW5nIHRlc3RzIHdpdGggcmVzdWx0IHR5cGUgYW5kIHRpbWUuCisgICAgICAgIHRlc3RzID0gcmVz
dWx0c19mb3JfYnVpbGRlcltzZWxmLlRFU1RTXQorICAgICAgICBhbGxfZmFpbGluZ190ZXN0cyA9
IHNldChzZWxmLl9mYWlsdXJlcy5pdGVya2V5cygpKQorICAgICAgICBhbGxfZmFpbGluZ190ZXN0
cy51cGRhdGUodGVzdHMuaXRlcmtleXMoKSkKKyAgICAgICAgZm9yIHRlc3QgaW4gYWxsX2ZhaWxp
bmdfdGVzdHM6CisgICAgICAgICAgICBzZWxmLl9pbnNlcnRfdGVzdF90aW1lX2FuZF9yZXN1bHQo
dGVzdCwgdGVzdHMpCisKKyAgICAgICAgIyBTcGVjaWZ5IHNlcGFyYXRvcnMgaW4gb3JkZXIgdG8g
Z2V0IGNvbXBhY3QgZW5jb2RpbmcuCisgICAgICAgIHJlc3VsdHNfc3RyID0gc2ltcGxlanNvbi5k
dW1wcyhyZXN1bHRzX2pzb24sIHNlcGFyYXRvcnM9KCcsJywgJzonKSkKKyAgICAgICAgcmV0dXJu
IHNlbGYuSlNPTl9QUkVGSVggKyByZXN1bHRzX3N0ciArIHNlbGYuSlNPTl9TVUZGSVgKKworICAg
IGRlZiBfaW5zZXJ0X2ZhaWx1cmVfc3VtbWFyaWVzKHNlbGYsIHJlc3VsdHNfZm9yX2J1aWxkZXIp
OgorICAgICAgICAiIiJJbnNlcnRzIGFnZ3JlZ2F0ZSBwYXNzL2ZhaWx1cmUgc3RhdGlzdGljcyBp
bnRvIHRoZSBKU09OLgorICAgICAgICBUaGlzIG1ldGhvZCByZWFkcyBzZWxmLl9za2lwcGVkX3Rl
c3RzLCBzZWxmLl9wYXNzZWRfdGVzdHMgYW5kCisgICAgICAgIHNlbGYuX2ZhaWx1cmVzIGFuZCBp
bnNlcnRzIEZJWEFCTEUsIEZJWEFCTEVfQ09VTlQgYW5kIEFMTF9GSVhBQkxFX0NPVU5UCisgICAg
ICAgIGVudHJpZXMuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICByZXN1bHRzX2Zvcl9idWls
ZGVyOiBEaWN0aW9uYXJ5IGNvbnRhaW5pbmcgdGhlIHRlc3QgcmVzdWx0cyBmb3IgYQorICAgICAg
ICAgICAgICBzaW5nbGUgYnVpbGRlci4KKyAgICAgICAgIiIiCisgICAgICAgICMgSW5zZXJ0IHRo
ZSBudW1iZXIgb2YgdGVzdHMgdGhhdCBmYWlsZWQuCisgICAgICAgIHNlbGYuX2luc2VydF9pdGVt
X2ludG9fcmF3X2xpc3QocmVzdWx0c19mb3JfYnVpbGRlciwKKyAgICAgICAgICAgIGxlbihzZXQo
c2VsZi5fZmFpbHVyZXMua2V5cygpKSB8IHNlbGYuX3NraXBwZWRfdGVzdHMpLAorICAgICAgICAg
ICAgc2VsZi5GSVhBQkxFX0NPVU5UKQorCisgICAgICAgICMgQ3JlYXRlIGEgcGFzcy9za2lwL2Zh
aWx1cmUgc3VtbWFyeSBkaWN0aW9uYXJ5LgorICAgICAgICBlbnRyeSA9IHt9CisgICAgICAgIGVu
dHJ5W3NlbGYuU0tJUF9SRVNVTFRdID0gbGVuKHNlbGYuX3NraXBwZWRfdGVzdHMpCisgICAgICAg
IGVudHJ5W3NlbGYuUEFTU19SRVNVTFRdID0gbGVuKHNlbGYuX3Bhc3NlZF90ZXN0cykKKyAgICAg
ICAgZ2V0ID0gZW50cnkuZ2V0CisgICAgICAgIGZvciBmYWlsdXJlX3R5cGUgaW4gc2VsZi5fZmFp
bHVyZXMudmFsdWVzKCk6CisgICAgICAgICAgICBmYWlsdXJlX2NoYXIgPSBzZWxmLkZBSUxVUkVf
VE9fQ0hBUltmYWlsdXJlX3R5cGVdCisgICAgICAgICAgICBlbnRyeVtmYWlsdXJlX2NoYXJdID0g
Z2V0KGZhaWx1cmVfY2hhciwgMCkgKyAxCisKKyAgICAgICAgIyBJbnNlcnQgdGhlIHBhc3Mvc2tp
cC9mYWlsdXJlIHN1bW1hcnkgZGljdGlvbmFyeS4KKyAgICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1f
aW50b19yYXdfbGlzdChyZXN1bHRzX2Zvcl9idWlsZGVyLCBlbnRyeSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLkZJWEFCTEUpCisKKyAgICAgICAgIyBJbnNl
cnQgdGhlIG51bWJlciBvZiBhbGwgdGhlIHRlc3RzIHRoYXQgYXJlIHN1cHBvc2VkIHRvIHBhc3Mu
CisgICAgICAgIHNlbGYuX2luc2VydF9pdGVtX2ludG9fcmF3X2xpc3QocmVzdWx0c19mb3JfYnVp
bGRlciwKKyAgICAgICAgICAgIGxlbihzZWxmLl9za2lwcGVkX3Rlc3RzIHwgc2VsZi5fYWxsX3Rl
c3RzKSwKKyAgICAgICAgICAgIHNlbGYuQUxMX0ZJWEFCTEVfQ09VTlQpCisKKyAgICBkZWYgX2lu
c2VydF9pdGVtX2ludG9fcmF3X2xpc3Qoc2VsZiwgcmVzdWx0c19mb3JfYnVpbGRlciwgaXRlbSwg
a2V5KToKKyAgICAgICAgIiIiSW5zZXJ0cyB0aGUgaXRlbSBpbnRvIHRoZSBsaXN0IHdpdGggdGhl
IGdpdmVuIGtleSBpbiB0aGUgcmVzdWx0cyBmb3IKKyAgICAgICAgdGhpcyBidWlsZGVyLiBDcmVh
dGVzIHRoZSBsaXN0IGlmIG5vIHN1Y2ggbGlzdCBleGlzdHMuCisKKyAgICAgICAgQXJnczoKKyAg
ICAgICAgICByZXN1bHRzX2Zvcl9idWlsZGVyOiBEaWN0aW9uYXJ5IGNvbnRhaW5pbmcgdGhlIHRl
c3QgcmVzdWx0cyBmb3IgYQorICAgICAgICAgICAgICBzaW5nbGUgYnVpbGRlci4KKyAgICAgICAg
ICBpdGVtOiBOdW1iZXIgb3Igc3RyaW5nIHRvIGluc2VydCBpbnRvIHRoZSBsaXN0LgorICAgICAg
ICAgIGtleTogS2V5IGluIHJlc3VsdHNfZm9yX2J1aWxkZXIgZm9yIHRoZSBsaXN0IHRvIGluc2Vy
dCBpbnRvLgorICAgICAgICAiIiIKKyAgICAgICAgaWYga2V5IGluIHJlc3VsdHNfZm9yX2J1aWxk
ZXI6CisgICAgICAgICAgICByYXdfbGlzdCA9IHJlc3VsdHNfZm9yX2J1aWxkZXJba2V5XQorICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgcmF3X2xpc3QgPSBbXQorCisgICAgICAgIHJhd19saXN0
Lmluc2VydCgwLCBpdGVtKQorICAgICAgICByYXdfbGlzdCA9IHJhd19saXN0WzpzZWxmLk1BWF9O
VU1CRVJfT0ZfQlVJTERfUkVTVUxUU19UT19MT0ddCisgICAgICAgIHJlc3VsdHNfZm9yX2J1aWxk
ZXJba2V5XSA9IHJhd19saXN0CisKKyAgICBkZWYgX2luc2VydF9pdGVtX3J1bl9sZW5ndGhfZW5j
b2RlZChzZWxmLCBpdGVtLCBlbmNvZGVkX3Jlc3VsdHMpOgorICAgICAgICAiIiJJbnNlcnRzIHRo
ZSBpdGVtIGludG8gdGhlIHJ1bi1sZW5ndGggZW5jb2RlZCByZXN1bHRzLgorCisgICAgICAgIEFy
Z3M6CisgICAgICAgICAgaXRlbTogU3RyaW5nIG9yIG51bWJlciB0byBpbnNlcnQuCisgICAgICAg
ICAgZW5jb2RlZF9yZXN1bHRzOiBydW4tbGVuZ3RoIGVuY29kZWQgcmVzdWx0cy4gQW4gYXJyYXkg
b2YgYXJyYXlzLCBlLmcuCisgICAgICAgICAgICAgIFtbMywnQSddLFsxLCdRJ11dIGVuY29kZXMg
QUFBUS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGxlbihlbmNvZGVkX3Jlc3VsdHMpIGFuZCBp
dGVtID09IGVuY29kZWRfcmVzdWx0c1swXVsxXToKKyAgICAgICAgICAgIG51bV9yZXN1bHRzID0g
ZW5jb2RlZF9yZXN1bHRzWzBdWzBdCisgICAgICAgICAgICBpZiBudW1fcmVzdWx0cyA8PSBzZWxm
Lk1BWF9OVU1CRVJfT0ZfQlVJTERfUkVTVUxUU19UT19MT0c6CisgICAgICAgICAgICAgICAgZW5j
b2RlZF9yZXN1bHRzWzBdWzBdID0gbnVtX3Jlc3VsdHMgKyAxCisgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICAjIFVzZSBhIGxpc3QgaW5zdGVhZCBvZiBhIGNsYXNzIGZvciB0aGUgcnVuLWxlbmd0
aCBlbmNvZGluZyBzaW5jZQorICAgICAgICAgICAgIyB3ZSB3YW50IHRoZSBzZXJpYWxpemVkIGZv
cm0gdG8gYmUgY29uY2lzZS4KKyAgICAgICAgICAgIGVuY29kZWRfcmVzdWx0cy5pbnNlcnQoMCwg
WzEsIGl0ZW1dKQorCisgICAgZGVmIF9pbnNlcnRfZ2VuZXJpY19tZXRhZGF0YShzZWxmLCByZXN1
bHRzX2Zvcl9idWlsZGVyKToKKyAgICAgICAgIiIiIEluc2VydHMgZ2VuZXJpYyBtZXRhZGF0YSAo
c3VjaCBhcyB2ZXJzaW9uIG51bWJlciwgY3VycmVudCB0aW1lIGV0YykKKyAgICAgICAgaW50byB0
aGUgSlNPTi4KKworICAgICAgICBBcmdzOgorICAgICAgICAgIHJlc3VsdHNfZm9yX2J1aWxkZXI6
IERpY3Rpb25hcnkgY29udGFpbmluZyB0aGUgdGVzdCByZXN1bHRzIGZvcgorICAgICAgICAgICAg
ICBhIHNpbmdsZSBidWlsZGVyLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5faW5zZXJ0X2l0
ZW1faW50b19yYXdfbGlzdChyZXN1bHRzX2Zvcl9idWlsZGVyLAorICAgICAgICAgICAgc2VsZi5f
YnVpbGRfbnVtYmVyLCBzZWxmLkJVSUxEX05VTUJFUlMpCisKKyAgICAgICAgaWYgc2VsZi5fd2Vi
a2l0X3N2bl9iYXNlOgorICAgICAgICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1faW50b19yYXdfbGlz
dChyZXN1bHRzX2Zvcl9idWlsZGVyLAorICAgICAgICAgICAgICAgIHNlbGYuX2dldF9zdm5fcmV2
aXNpb24oc2VsZi5fd2Via2l0X3N2bl9iYXNlKSwKKyAgICAgICAgICAgICAgICBzZWxmLldFQktJ
VF9TVk4pCisgICAgICAgIGlmIHNlbGYuX2Nocm9taXVtX3N2bl9iYXNlOgorICAgICAgICAgICAg
c2VsZi5faW5zZXJ0X2l0ZW1faW50b19yYXdfbGlzdChyZXN1bHRzX2Zvcl9idWlsZGVyLAorICAg
ICAgICAgICAgICAgIHNlbGYuX2dldF9zdm5fcmV2aXNpb24oc2VsZi5fY2hyb21pdW1fc3ZuX2Jh
c2UpLAorICAgICAgICAgICAgICAgIHNlbGYuQ0hST01FX1NWTikKKworICAgICAgICBzZWxmLl9p
bnNlcnRfaXRlbV9pbnRvX3Jhd19saXN0KHJlc3VsdHNfZm9yX2J1aWxkZXIsCisgICAgICAgICAg
ICBpbnQodGltZS50aW1lKCkpLAorICAgICAgICAgICAgc2VsZi5USU1FKQorCisgICAgZGVmIF9p
bnNlcnRfdGVzdF90aW1lX2FuZF9yZXN1bHQoc2VsZiwgdGVzdF9uYW1lLCB0ZXN0cyk6CisgICAg
ICAgICIiIiBJbnNlcnQgYSB0ZXN0IGl0ZW0gd2l0aCBpdHMgcmVzdWx0cyB0byB0aGUgZ2l2ZW4g
dGVzdHMgZGljdGlvbmFyeS4KKworICAgICAgICBBcmdzOgorICAgICAgICAgIHRlc3RzOiBEaWN0
aW9uYXJ5IGNvbnRhaW5pbmcgdGVzdCByZXN1bHQgZW50cmllcy4KKyAgICAgICAgIiIiCisKKyAg
ICAgICAgcmVzdWx0ID0gSlNPTlJlc3VsdHNHZW5lcmF0b3IuUEFTU19SRVNVTFQKKyAgICAgICAg
dGltZSA9IDAKKworICAgICAgICBpZiB0ZXN0X25hbWUgbm90IGluIHNlbGYuX2FsbF90ZXN0czoK
KyAgICAgICAgICAgIHJlc3VsdCA9IEpTT05SZXN1bHRzR2VuZXJhdG9yLk5PX0RBVEFfUkVTVUxU
CisKKyAgICAgICAgaWYgdGVzdF9uYW1lIGluIHNlbGYuX2ZhaWx1cmVzOgorICAgICAgICAgICAg
cmVzdWx0ID0gc2VsZi5GQUlMVVJFX1RPX0NIQVJbc2VsZi5fZmFpbHVyZXNbdGVzdF9uYW1lXV0K
KworICAgICAgICBpZiB0ZXN0X25hbWUgaW4gc2VsZi5fdGVzdF90aW1pbmdzOgorICAgICAgICAg
ICAgIyBGbG9vciBmb3Igbm93IHRvIGdldCB0aW1lIGluIHNlY29uZHMuCisgICAgICAgICAgICB0
aW1lID0gaW50KHNlbGYuX3Rlc3RfdGltaW5nc1t0ZXN0X25hbWVdKQorCisgICAgICAgIGlmIHRl
c3RfbmFtZSBub3QgaW4gdGVzdHM6CisgICAgICAgICAgICB0ZXN0c1t0ZXN0X25hbWVdID0gc2Vs
Zi5fY3JlYXRlX3Jlc3VsdHNfYW5kX3RpbWVzX2pzb24oKQorCisgICAgICAgIHRoaXNUZXN0ID0g
dGVzdHNbdGVzdF9uYW1lXQorICAgICAgICBzZWxmLl9pbnNlcnRfaXRlbV9ydW5fbGVuZ3RoX2Vu
Y29kZWQocmVzdWx0LCB0aGlzVGVzdFtzZWxmLlJFU1VMVFNdKQorICAgICAgICBzZWxmLl9pbnNl
cnRfaXRlbV9ydW5fbGVuZ3RoX2VuY29kZWQodGltZSwgdGhpc1Rlc3Rbc2VsZi5USU1FU10pCisg
ICAgICAgIHNlbGYuX25vcm1hbGl6ZV9yZXN1bHRzX2pzb24odGhpc1Rlc3QsIHRlc3RfbmFtZSwg
dGVzdHMpCisKKyAgICBkZWYgX2NvbnZlcnRfanNvbl90b19jdXJyZW50X3ZlcnNpb24oc2VsZiwg
cmVzdWx0c19qc29uKToKKyAgICAgICAgIiIiSWYgdGhlIEpTT04gZG9lcyBub3QgbWF0Y2ggdGhl
IGN1cnJlbnQgdmVyc2lvbiwgY29udmVydHMgaXQgdG8gdGhlCisgICAgICAgIGN1cnJlbnQgdmVy
c2lvbiBhbmQgYWRkcyBpbiB0aGUgbmV3IHZlcnNpb24gbnVtYmVyLgorICAgICAgICAiIiIKKyAg
ICAgICAgaWYgKHNlbGYuVkVSU0lPTl9LRVkgaW4gcmVzdWx0c19qc29uIGFuZAorICAgICAgICAg
ICAgcmVzdWx0c19qc29uW3NlbGYuVkVSU0lPTl9LRVldID09IHNlbGYuVkVSU0lPTik6CisgICAg
ICAgICAgICByZXR1cm4KKworICAgICAgICByZXN1bHRzX2pzb25bc2VsZi5WRVJTSU9OX0tFWV0g
PSBzZWxmLlZFUlNJT04KKworICAgIGRlZiBfY3JlYXRlX3Jlc3VsdHNfYW5kX3RpbWVzX2pzb24o
c2VsZik6CisgICAgICAgIHJlc3VsdHNfYW5kX3RpbWVzID0ge30KKyAgICAgICAgcmVzdWx0c19h
bmRfdGltZXNbc2VsZi5SRVNVTFRTXSA9IFtdCisgICAgICAgIHJlc3VsdHNfYW5kX3RpbWVzW3Nl
bGYuVElNRVNdID0gW10KKyAgICAgICAgcmV0dXJuIHJlc3VsdHNfYW5kX3RpbWVzCisKKyAgICBk
ZWYgX2NyZWF0ZV9yZXN1bHRzX2Zvcl9idWlsZGVyX2pzb24oc2VsZik6CisgICAgICAgIHJlc3Vs
dHNfZm9yX2J1aWxkZXIgPSB7fQorICAgICAgICByZXN1bHRzX2Zvcl9idWlsZGVyW3NlbGYuVEVT
VFNdID0ge30KKyAgICAgICAgcmV0dXJuIHJlc3VsdHNfZm9yX2J1aWxkZXIKKworICAgIGRlZiBf
cmVtb3ZlX2l0ZW1zX292ZXJfbWF4X251bWJlcl9vZl9idWlsZHMoc2VsZiwgZW5jb2RlZF9saXN0
KToKKyAgICAgICAgIiIiUmVtb3ZlcyBpdGVtcyBmcm9tIHRoZSBydW4tbGVuZ3RoIGVuY29kZWQg
bGlzdCBhZnRlciB0aGUgZmluYWwKKyAgICAgICAgaXRlbSB0aGF0IGV4Y2VlZHMgdGhlIG1heCBu
dW1iZXIgb2YgYnVpbGRzIHRvIHRyYWNrLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgZW5j
b2RlZF9yZXN1bHRzOiBydW4tbGVuZ3RoIGVuY29kZWQgcmVzdWx0cy4gQW4gYXJyYXkgb2YgYXJy
YXlzLCBlLmcuCisgICAgICAgICAgICAgIFtbMywnQSddLFsxLCdRJ11dIGVuY29kZXMgQUFBUS4K
KyAgICAgICAgIiIiCisgICAgICAgIG51bV9idWlsZHMgPSAwCisgICAgICAgIGluZGV4ID0gMAor
ICAgICAgICBmb3IgcmVzdWx0IGluIGVuY29kZWRfbGlzdDoKKyAgICAgICAgICAgIG51bV9idWls
ZHMgPSBudW1fYnVpbGRzICsgcmVzdWx0WzBdCisgICAgICAgICAgICBpbmRleCA9IGluZGV4ICsg
MQorICAgICAgICAgICAgaWYgbnVtX2J1aWxkcyA+IHNlbGYuTUFYX05VTUJFUl9PRl9CVUlMRF9S
RVNVTFRTX1RPX0xPRzoKKyAgICAgICAgICAgICAgICByZXR1cm4gZW5jb2RlZF9saXN0WzppbmRl
eF0KKyAgICAgICAgcmV0dXJuIGVuY29kZWRfbGlzdAorCisgICAgZGVmIF9ub3JtYWxpemVfcmVz
dWx0c19qc29uKHNlbGYsIHRlc3QsIHRlc3RfbmFtZSwgdGVzdHMpOgorICAgICAgICAiIiIgUHJ1
bmUgdGVzdHMgd2hlcmUgYWxsIHJ1bnMgcGFzcyBvciB0ZXN0cyB0aGF0IG5vIGxvbmdlciBleGlz
dCBhbmQKKyAgICAgICAgdHJ1bmNhdGUgYWxsIHJlc3VsdHMgdG8gbWF4TnVtYmVyT2ZCdWlsZHMu
CisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICB0ZXN0OiBSZXN1bHRzQW5kVGltZXMgb2JqZWN0
IGZvciB0aGlzIHRlc3QuCisgICAgICAgICAgdGVzdF9uYW1lOiBOYW1lIG9mIHRoZSB0ZXN0Lgor
ICAgICAgICAgIHRlc3RzOiBUaGUgSlNPTiBvYmplY3Qgd2l0aCBhbGwgdGhlIHRlc3QgcmVzdWx0
cyBmb3IgdGhpcyBidWlsZGVyLgorICAgICAgICAiIiIKKyAgICAgICAgdGVzdFtzZWxmLlJFU1VM
VFNdID0gc2VsZi5fcmVtb3ZlX2l0ZW1zX292ZXJfbWF4X251bWJlcl9vZl9idWlsZHMoCisgICAg
ICAgICAgICB0ZXN0W3NlbGYuUkVTVUxUU10pCisgICAgICAgIHRlc3Rbc2VsZi5USU1FU10gPSBz
ZWxmLl9yZW1vdmVfaXRlbXNfb3Zlcl9tYXhfbnVtYmVyX29mX2J1aWxkcygKKyAgICAgICAgICAg
IHRlc3Rbc2VsZi5USU1FU10pCisKKyAgICAgICAgaXNfYWxsX3Bhc3MgPSBzZWxmLl9pc19yZXN1
bHRzX2FsbF9vZl90eXBlKHRlc3Rbc2VsZi5SRVNVTFRTXSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuUEFTU19SRVNVTFQpCisgICAgICAg
IGlzX2FsbF9ub19kYXRhID0gc2VsZi5faXNfcmVzdWx0c19hbGxfb2ZfdHlwZSh0ZXN0W3NlbGYu
UkVTVUxUU10sCisgICAgICAgICAgICBzZWxmLk5PX0RBVEFfUkVTVUxUKQorICAgICAgICBtYXhf
dGltZSA9IG1heChbdGltZVsxXSBmb3IgdGltZSBpbiB0ZXN0W3NlbGYuVElNRVNdXSkKKworICAg
ICAgICAjIFJlbW92ZSBhbGwgcGFzc2VzL25vLWRhdGEgZnJvbSB0aGUgcmVzdWx0cyB0byByZWR1
Y2Ugbm9pc2UgYW5kCisgICAgICAgICMgZmlsZXNpemUuIElmIGEgdGVzdCBwYXNzZXMgZXZlcnkg
cnVuLCBidXQgdGFrZXMgPiBNSU5fVElNRSB0byBydW4sCisgICAgICAgICMgZG9uJ3QgdGhyb3cg
YXdheSB0aGUgZGF0YS4KKyAgICAgICAgaWYgaXNfYWxsX25vX2RhdGEgb3IgKGlzX2FsbF9wYXNz
IGFuZCBtYXhfdGltZSA8PSBzZWxmLk1JTl9USU1FKToKKyAgICAgICAgICAgIGRlbCB0ZXN0c1t0
ZXN0X25hbWVdCisKKyAgICBkZWYgX2lzX3Jlc3VsdHNfYWxsX29mX3R5cGUoc2VsZiwgcmVzdWx0
cywgdHlwZSk6CisgICAgICAgICIiIlJldHVybnMgd2hldGhlciBhbGwgdGhlIHJlc3VsdHMgYXJl
IG9mIHRoZSBnaXZlbiB0eXBlCisgICAgICAgIChlLmcuIGFsbCBwYXNzZXMpLiIiIgorICAgICAg
ICByZXR1cm4gbGVuKHJlc3VsdHMpID09IDEgYW5kIHJlc3VsdHNbMF1bMV0gPT0gdHlwZQpkaWZm
IC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90ZXN0X3BhY2thZ2UvanNvbl9y
ZXN1bHRzX2dlbmVyYXRvcl91bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvdGVzdF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5lcmF0b3JfdW5pdHRlc3QucHkKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZWRlZDAxNjlkMDYwODgyOTkzNGY3YWU1NWJjYzk4MDBlNTU0NTFkZQotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdF9wYWNrYWdlL2pzb25f
cmVzdWx0c19nZW5lcmF0b3JfdW5pdHRlc3QucHkKQEAgLTAsMCArMSwxMjggQEAKKyMhL3Vzci9i
aW4vcHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlz
dHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiVW5pdCB0ZXN0cyBmb3IganNvbl9yZXN1
bHRzX2dlbmVyYXRvci5weS4iIiIKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCB1bml0dGVzdAor
aW1wb3J0IG9zCitpbXBvcnQgcmFuZG9tCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgdGVtcGZpbGUK
KworZnJvbSB3ZWJraXRweS50ZXN0X3BhY2thZ2UuanNvbl9yZXN1bHRzX2dlbmVyYXRvciBpbXBv
cnQgSlNPTlJlc3VsdHNHZW5lcmF0b3IKK2Zyb20gd2Via2l0cHkudGVzdF9wYWNrYWdlIGltcG9y
dCB0ZXN0X3Jlc3VsdHMKK2ltcG9ydCB3ZWJraXRweS50aGlyZHBhcnR5LnNpbXBsZWpzb24gYXMg
c2ltcGxlanNvbgorCitCVUlMREVSX0JBU0VfVVJMID0gImh0dHA6Ly9idWlsZC5jaHJvbWl1bS5v
cmcvYnVpbGRib3QvZ3Rlc3QtcmVzdWx0cy8iCisKKworY2xhc3MgVGVzdEpTT05HZW5lcmF0aW9u
KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYu
cmVzdWx0c19kaXJlY3RvcnkgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKKyAgICAgICAgc2VsZi5yZXN1
bHRzX2pzb25fcGF0aCA9ICclcy9yZXN1bHRzLmpzb24nICUgc2VsZi5yZXN1bHRzX2RpcmVjdG9y
eQorICAgICAgICBzZWxmLmJ1aWxkZXJfbmFtZSA9ICdEVU1NWV9CVUlMREVSX05BTUUnCisgICAg
ICAgIHNlbGYuYnVpbGRfbmFtZSA9ICdEVU1NWV9CVUlMRF9OQU1FJworICAgICAgICBzZWxmLmJ1
aWxkX251bWJlciA9ICdEVU1NWV9CVUlMREVSX05VTUJFUicKKworICAgICAgICBzZWxmLnRlc3Rf
Y291bnQgPSAwCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNodXRpbC5ybXRy
ZWUoc2VsZi5yZXN1bHRzX2RpcmVjdG9yeSkKKworICAgIGRlZiBfdGVzdF9qc29uX2dlbmVyYXRp
b24oc2VsZiwgcGFzc2VkX3Rlc3RzLCBmYWlsZWRfdGVzdHMsIHNraXBwZWRfdGVzdHMpOgorICAg
ICAgICAjIE1ha2Ugc3VyZSB3ZSBoYXZlIHNldHMgKHJhdGhlciB0aGFuIGxpc3RzKS4KKyAgICAg
ICAgcGFzc2VkX3Rlc3RzID0gc2V0KHBhc3NlZF90ZXN0cykKKyAgICAgICAgc2tpcHBlZF90ZXN0
cyA9IHNldChza2lwcGVkX3Rlc3RzKQorICAgICAgICBpZiBub3QgdHlwZShmYWlsZWRfdGVzdHMp
IGlzIGRpY3Q6CisgICAgICAgICAgICBmYWlsZWRfdGVzdHMgPSBkaWN0KFsoZiwgdGVzdF9yZXN1
bHRzLlRFWFQpIGZvciBmIGluIGZhaWxlZF90ZXN0c10pCisgICAgICAgIHRlc3RzX2xpc3QgPSBw
YXNzZWRfdGVzdHMgfCBzZXQoZmFpbGVkX3Rlc3RzLmtleXMoKSkKKyAgICAgICAgdGVzdF90aW1p
bmdzID0ge30KKyAgICAgICAgZm9yIHRlc3QgaW4gdGVzdHNfbGlzdDoKKyAgICAgICAgICAgIHRl
c3RfdGltaW5nc1t0ZXN0XSA9IGZsb2F0KHJhbmRvbS5yYW5kaW50KDEsIDEwKSkKKworICAgICAg
ICAjIEdlbmVyYXRlIGEgSlNPTiBmaWxlLgorICAgICAgICBKU09OUmVzdWx0c0dlbmVyYXRvcigK
KyAgICAgICAgICAgIHNlbGYuYnVpbGRlcl9uYW1lLCBzZWxmLmJ1aWxkX25hbWUsIHNlbGYuYnVp
bGRfbnVtYmVyLAorICAgICAgICAgICAgc2VsZi5yZXN1bHRzX2RpcmVjdG9yeSwKKyAgICAgICAg
ICAgIEJVSUxERVJfQkFTRV9VUkwsCisgICAgICAgICAgICB0ZXN0X3RpbWluZ3MsCisgICAgICAg
ICAgICBmYWlsZWRfdGVzdHMsCisgICAgICAgICAgICBwYXNzZWRfdGVzdHMsCisgICAgICAgICAg
ICBza2lwcGVkX3Rlc3RzLAorICAgICAgICAgICAgdGVzdHNfbGlzdCkKKyAgICAgICAgc2VsZi50
ZXN0X2NvdW50ICs9IDEKKworICAgICAgICAjIEFsaWFzaW5nIHRvIGEgc2hvcnQgbmFtZSBmb3Ig
YmV0dGVyIGFjY2VzcyB0byBpdHMgY29uc3RhbnRzLgorICAgICAgICBKUkcgPSBKU09OUmVzdWx0
c0dlbmVyYXRvcgorCisgICAgICAgIGYgPSBvcGVuKHNlbGYucmVzdWx0c19qc29uX3BhdGgpCisg
ICAgICAgIGpzb25fZGF0YSA9IGYucmVhZCgpCisgICAgICAgIGpzb25fZGF0YSA9IGpzb25fZGF0
YVtsZW4oSlJHLkpTT05fUFJFRklYKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxl
bihqc29uX2RhdGEpIC0gbGVuKEpSRy5KU09OX1NVRkZJWCldCisgICAgICAgIHByaW50IGpzb25f
ZGF0YQorICAgICAgICBqc29uID0gc2ltcGxlanNvbi5sb2Fkcyhqc29uX2RhdGEpCisKKyAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKEpSRy5WRVJTSU9OX0tFWSBpbiBqc29uKQorICAgICAgICBzZWxm
LmFzc2VydFRydWUoc2VsZi5idWlsZGVyX25hbWUgaW4ganNvbikKKworICAgICAgICBidWlsZGlu
Zm8gPSBqc29uW3NlbGYuYnVpbGRlcl9uYW1lXQorICAgICAgICBzZWxmLmFzc2VydFRydWUoSlJH
LkZJWEFCTEUgaW4gYnVpbGRpbmZvKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoSlJHLlRFU1RT
IGluIGJ1aWxkaW5mbykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihidWlsZGluZm9bSlJH
LkJVSUxEX05VTUJFUlNdKSA9PSBzZWxmLnRlc3RfY291bnQpCisgICAgICAgIHNlbGYuYXNzZXJ0
VHJ1ZShidWlsZGluZm9bSlJHLkJVSUxEX05VTUJFUlNdWzBdID09IHNlbGYuYnVpbGRfbnVtYmVy
KQorCisgICAgICAgIGlmIHRlc3RzX2xpc3QgIG9yIHNraXBwZWRfdGVzdHM6CisgICAgICAgICAg
ICBmaXhhYmxlID0gYnVpbGRpbmZvW0pSRy5GSVhBQkxFXVswXQorICAgICAgICAgICAgc2VsZi5h
c3NlcnRUcnVlKGZpeGFibGVbSlJHLlBBU1NfUkVTVUxUXSA9PSBsZW4ocGFzc2VkX3Rlc3RzKSkK
KyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaXhhYmxlW0pSRy5TS0lQX1JFU1VMVF0gPT0g
bGVuKHNraXBwZWRfdGVzdHMpKQorCisgICAgICAgIGlmIGZhaWxlZF90ZXN0czoKKyAgICAgICAg
ICAgIHRlc3RzID0gYnVpbGRpbmZvW0pSRy5URVNUU10KKyAgICAgICAgICAgIGZvciB0ZXN0X25h
bWUsIGZhaWx1cmUgaW4gZmFpbGVkX3Rlc3RzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZSh0ZXN0X25hbWUgaW4gdGVzdHMpCisgICAgICAgICAgICAgICAgdGVz
dCA9IHRlc3RzW3Rlc3RfbmFtZV0KKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodGVz
dFtKUkcuUkVTVUxUU11bMF1bMF0gPT0gMSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRy
dWUodGVzdFtKUkcuUkVTVUxUU11bMF1bMV0gPT0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgSlJHLkZBSUxVUkVfVE9fQ0hBUltmYWlsdXJlXSkKKyAgICAgICAgICAgICAgICBzZWxm
LmFzc2VydFRydWUodGVzdFtKUkcuVElNRVNdWzBdWzBdID09IDEpCisgICAgICAgICAgICAgICAg
c2VsZi5hc3NlcnRUcnVlKHRlc3RbSlJHLlRJTUVTXVswXVsxXSA9PQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQodGVzdF90aW1pbmdzW3Rlc3RfbmFtZV0pKQorCisgICAgZGVm
IHRlc3RfanNvbl9nZW5lcmF0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2pzb25fZ2Vu
ZXJhdGlvbihbXSwgW10sIFtdKQorICAgICAgICBzZWxmLl90ZXN0X2pzb25fZ2VuZXJhdGlvbihb
J0EnXSwgW10sIFtdKQorICAgICAgICBzZWxmLl90ZXN0X2pzb25fZ2VuZXJhdGlvbihbJ0EnXSwg
WydCJywgJ0MnXSwgW10pCisgICAgICAgIHNlbGYuX3Rlc3RfanNvbl9nZW5lcmF0aW9uKFsnQScs
ICdCJywgJ0MnXSwgWydEJywgJ0UnXSwgWydGJywgJ0cnXSkKKyAgICAgICAgc2VsZi5fdGVzdF9q
c29uX2dlbmVyYXRpb24oWydBJ10sIHsnQic6IHRlc3RfcmVzdWx0cy5JTUFHRSwKKyAgICAgICAg
ICAgICdDJzogdGVzdF9yZXN1bHRzLlRFWFQsICdEJzogdGVzdF9yZXN1bHRzLkNSQVNIfSwgWydF
J10pCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkK
ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdF9wYWNrYWdlL3Rl
c3RfcmVzdWx0cy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdF9wYWNrYWdl
L3Rlc3RfcmVzdWx0cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNzUxMjNlMDJmYzBkMGE2ZTVjNDdhYzRkMDNh
Y2FlOWYxZjA4OGFkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS90ZXN0X3BhY2thZ2UvdGVzdF9yZXN1bHRzLnB5CkBAIC0wLDAgKzEsMzIgQEAKKyMhL3Vz
ci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0Ogor
IworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyMgVGVzdCByZXN1bHRzIGFuZCBt
b2RpZmllciBjb25zdGFudHMuCisoUEFTUywgRkFJTCwgVEVYVCwgSU1BR0UsIElNQUdFX1BMVVNf
VEVYVCwgVElNRU9VVCwgQ1JBU0gsIFNLSVAsIFdPTlRGSVgsCisgREVGRVIsIFNMT1csIFJFQkFT
RUxJTkUsIE1JU1NJTkcsIEZMQUtZLCBOT1csIE5PTkUpID0gcmFuZ2UoMTYpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58101</attachid>
            <date>2010-06-07 19:31:02 -0700</date>
            <delta_ts>2010-06-07 19:53:11 -0700</delta_ts>
            <desc>Take 2 (removed chromium-specific code)</desc>
            <filename>bug-38693-20100607193100.patch</filename>
            <type>text/plain</type>
            <size>48339</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA4NzAxYWNmZDE1NzI1OTA1Y2UzN2RkYjc0YTA0YWIxZjU4Y2FiMzQ3Li4wOWFiY2U1
YTJkNWFhOWQwODc0MzdjNTgwZWNmZjA1ZDhmYzEyNTVhIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAK
KzIwMTAtMDYtMDcgIEtpbnVrbyBZYXN1ZGEgIDxraW51a29AY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGNsZWFudXAganNvbl9y
ZXN1bHRzX2dlbmVyYXRvciBkZXBlbmRlbmNpZXMgc28gdGhhdCBub24tbGF5b3V0LXRlc3RzIGNh
biBhbHNvIHVzZSBpdCBzYWZlbHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTM4NjkzCisKKyAgICAgICAgQ3JlYXRlIGEgbmV3IHBhY2thZ2UgdGVzdF9w
YWNrYWdlIGZvciBub24gbGF5b3V0LXRlc3RzLXNwZWNpZmljCisgICAgICAgIHNjcmlwdHMgYW5k
IG1vdmUganNvbl9yZXN1bHRzX2dlbmVyYXRvci5weSBpbnRvIHRoZSBwYWNrYWdlIHRvCisgICAg
ICAgIGNsZWFuLXVwIHBhY2thZ2UgZGVwZW5kZW5jaWVzLiAoSW5zdGVhZCBwdXQgYSB3cmFwcGVy
IHNjcmlwdCBpbiB0aGUKKyAgICAgICAgbGF5b3V0X3BhY2thZ2Ugc28gdGhhdCBleGlzdGluZyBz
Y3JpcHRzIGNvbnRpbnVlIHRvIHJ1bi4pCisKKyAgICAgICAgQWxzbyBhZGQgYSB1bml0dGVzdCBm
b3IganNvbl9yZXN1bHRzX2dlbmVyYXRvci5weS4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25fbGF5b3V0X3Jlc3VsdHNfZ2VuZXJh
dG9yLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL2pzb25fcmVzdWx0c19nZW5lcmF0b3IucHk6IE1vdmVkIG1vc3Qgb2YgaXRzIGNvbnRl
bnRzIHRvIFNjcmlwdHMvd2Via2l0cHkvdGVzdF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5lcmF0
b3IucHkuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3Bh
Y2thZ2UvdGVzdF9leHBlY3RhdGlvbnMucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90
ZXN0X3BhY2thZ2UvX19pbml0X18ucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvdGVzdF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5lcmF0b3IucHk6IENvcGllZCBmcm9tIFNj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25fcmVzdWx0c19n
ZW5lcmF0b3IucHkuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90ZXN0X3BhY2thZ2UvanNv
bl9yZXN1bHRzX2dlbmVyYXRvcl91bml0dGVzdC5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS90ZXN0X3BhY2thZ2UvdGVzdF9yZXN1bHRzLnB5OiBBZGRlZC4KKwogMjAxMC0w
Ni0wNyAgTmlrb2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AcmltLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9sYXlvdXRfcmVzdWx0
c19nZW5lcmF0b3IucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS9qc29uX2xheW91dF9yZXN1bHRzX2dlbmVyYXRvci5weQppbmRleCBi
YjIxNGY3ZGFjNzFmZWY0MWUyNGExMzRkZmQyNzAzMWVkZTMyMTE2Li5mNmY2NDI4MzAzYWRmNTE2
NzhlY2NjNGFkZTAxMjc5MDQ0NWU4YTg1IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX2xheW91dF9yZXN1bHRz
X2dlbmVyYXRvci5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX2xheW91dF9yZXN1bHRzX2dlbmVyYXRvci5weQpAQCAt
MzAsOSArMzAsOSBAQAogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBvcwogCi1mcm9tIHdlYmtpdHB5
LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQganNvbl9yZXN1bHRzX2dlbmVyYXRv
cgogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3Rf
ZXhwZWN0YXRpb25zCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBp
bXBvcnQgdGVzdF9mYWlsdXJlcworZnJvbSB3ZWJraXRweS50ZXN0X3BhY2thZ2UgaW1wb3J0IGpz
b25fcmVzdWx0c19nZW5lcmF0b3IKIGltcG9ydCB3ZWJraXRweS50aGlyZHBhcnR5LnNpbXBsZWpz
b24gYXMgc2ltcGxlanNvbgogCiBjbGFzcyBKU09OTGF5b3V0UmVzdWx0c0dlbmVyYXRvcihqc29u
X3Jlc3VsdHNfZ2VuZXJhdG9yLkpTT05SZXN1bHRzR2VuZXJhdG9yKToKZGlmZiAtLWdpdCBhL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pz
b25fcmVzdWx0c19nZW5lcmF0b3IucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5CmluZGV4
IDFjZjFiOTU4ZGQyNjg5OGQyMjEwYjdmNzQyMjNhZTNlNDM4NTE3MzcuLjVjMGZlYjEyNDVlZTk2
NDFjYWU0ODVhZmViMTcwNzM2YmNkODIxNjcgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5l
cmF0b3IucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvci5weQpAQCAtMjksMzk0ICsyOSwy
MCBAQAogCiBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHdpdGhfc3RhdGVtZW50CiAKLWltcG9ydCBj
b2RlY3MKLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgb3MKLWltcG9ydCBzdWJwcm9jZXNzCi1pbXBv
cnQgc3lzCi1pbXBvcnQgdGltZQotaW1wb3J0IHVybGxpYjIKLWltcG9ydCB4bWwuZG9tLm1pbmlk
b20KK2Zyb20gd2Via2l0cHkudGVzdF9wYWNrYWdlIGltcG9ydCBqc29uX3Jlc3VsdHNfZ2VuZXJh
dG9yCiAKLWZyb20gd2Via2l0cHkuY29tbW9uLmNoZWNrb3V0IGltcG9ydCBzY20KLWZyb20gd2Vi
a2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0IFNjcmlwdEVycm9yCi1mcm9tIHdl
YmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9leHBlY3RhdGlv
bnMKLWltcG9ydCB3ZWJraXRweS50aGlyZHBhcnR5LnNpbXBsZWpzb24gYXMgc2ltcGxlanNvbgor
IyBKU09OUmVzdWx0c0dlbmVyYXRvciBpcyBtb3ZlZCBpbnRvIHdlYmtpdHB5LnRlc3RfcGFja2Fn
ZS4KKyMgVGhpcyBtb2R1bGUgaXMgbGVmdCBhcyBhIHNpbXBsZSB3cmFwcGVyIGZvciBub3QgYnJl
YWtpbmcgdGhpbmdzCisjIGR1cmluZyB0aGUgdHJhbnNpdGlvbi4KIAotX2xvZyA9IGxvZ2dpbmcu
Z2V0TG9nZ2VyKCJ3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UuIgotICAgICAg
ICAgICAgICAgICAgICAgICAgICJqc29uX3Jlc3VsdHNfZ2VuZXJhdG9yIikKLQotCi1jbGFzcyBK
U09OUmVzdWx0c0dlbmVyYXRvcihvYmplY3QpOgotICAgICIiIkEgSlNPTiByZXN1bHRzIGdlbmVy
YXRvciBmb3IgZ2VuZXJpYyB0ZXN0cy4iIiIKLQotICAgIE1BWF9OVU1CRVJfT0ZfQlVJTERfUkVT
VUxUU19UT19MT0cgPSA3NTAKLSAgICAjIE1pbiB0aW1lIChzZWNvbmRzKSB0aGF0IHdpbGwgYmUg
YWRkZWQgdG8gdGhlIEpTT04uCi0gICAgTUlOX1RJTUUgPSAxCi0gICAgSlNPTl9QUkVGSVggPSAi
QUREX1JFU1VMVFMoIgotICAgIEpTT05fU1VGRklYID0gIik7IgotICAgIFBBU1NfUkVTVUxUID0g
IlAiCi0gICAgU0tJUF9SRVNVTFQgPSAiWCIKLSAgICBOT19EQVRBX1JFU1VMVCA9ICJOIgotICAg
IFZFUlNJT04gPSAzCi0gICAgVkVSU0lPTl9LRVkgPSAidmVyc2lvbiIKLSAgICBSRVNVTFRTID0g
InJlc3VsdHMiCi0gICAgVElNRVMgPSAidGltZXMiCi0gICAgQlVJTERfTlVNQkVSUyA9ICJidWls
ZE51bWJlcnMiCi0gICAgVElNRSA9ICJzZWNvbmRzU2luY2VFcG9jaCIKLSAgICBURVNUUyA9ICJ0
ZXN0cyIKLQotICAgIEZJWEFCTEVfQ09VTlQgPSAiZml4YWJsZUNvdW50IgotICAgIEZJWEFCTEUg
PSAiZml4YWJsZUNvdW50cyIKLSAgICBBTExfRklYQUJMRV9DT1VOVCA9ICJhbGxGaXhhYmxlQ291
bnQiCi0KLSAgICAjIE5vdGUgdGhhdCB3ZSBvbWl0IHRlc3RfZXhwZWN0YXRpb25zLkZBSUwgZnJv
bSB0aGlzIGxpc3QgYmVjYXVzZQotICAgICMgaXQgc2hvdWxkIG5ldmVyIHNob3cgdXAgKGl0J3Mg
YSBsZWdhY3kgaW5wdXQgZXhwZWN0YXRpb24sIG5ldmVyCi0gICAgIyBhbiBvdXRwdXQgZXhwZWN0
YXRpb24pLgotICAgIEZBSUxVUkVfVE9fQ0hBUiA9IHt0ZXN0X2V4cGVjdGF0aW9ucy5DUkFTSDog
IkMiLAotICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucy5USU1FT1VUOiAi
VCIsCi0gICAgICAgICAgICAgICAgICAgICAgIHRlc3RfZXhwZWN0YXRpb25zLklNQUdFOiAiSSIs
Ci0gICAgICAgICAgICAgICAgICAgICAgIHRlc3RfZXhwZWN0YXRpb25zLlRFWFQ6ICJGIiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgdGVzdF9leHBlY3RhdGlvbnMuTUlTU0lORzogIk8iLAotICAg
ICAgICAgICAgICAgICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucy5JTUFHRV9QTFVTX1RFWFQ6ICJa
In0KLSAgICBGQUlMVVJFX0NIQVJTID0gRkFJTFVSRV9UT19DSEFSLnZhbHVlcygpCi0KLSAgICBS
RVNVTFRTX0ZJTEVOQU1FID0gInJlc3VsdHMuanNvbiIKIAorY2xhc3MgSlNPTlJlc3VsdHNHZW5l
cmF0b3IoanNvbl9yZXN1bHRzX2dlbmVyYXRvci5KU09OUmVzdWx0c0dlbmVyYXRvcik6CiAgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIGJ1aWxkZXJfbmFtZSwgYnVpbGRfbmFtZSwgYnVpbGRf
bnVtYmVyLAogICAgICAgICByZXN1bHRzX2ZpbGVfYmFzZV9wYXRoLCBidWlsZGVyX2Jhc2VfdXJs
LAogICAgICAgICB0ZXN0X3RpbWluZ3MsIGZhaWx1cmVzLCBwYXNzZWRfdGVzdHMsIHNraXBwZWRf
dGVzdHMsIGFsbF90ZXN0cyk6Ci0gICAgICAgICIiIk1vZGlmaWVzIHRoZSByZXN1bHRzLmpzb24g
ZmlsZS4gR3JhYnMgaXQgb2ZmIHRoZSBhcmNoaXZlIGRpcmVjdG9yeQotICAgICAgICBpZiBpdCBp
cyBub3QgZm91bmQgbG9jYWxseS4KLQotICAgICAgICBBcmdzCi0gICAgICAgICAgYnVpbGRlcl9u
YW1lOiB0aGUgYnVpbGRlciBuYW1lIChlLmcuIFdlYmtpdCkuCi0gICAgICAgICAgYnVpbGRfbmFt
ZTogdGhlIGJ1aWxkIG5hbWUgKGUuZy4gd2Via2l0LXJlbCkuCi0gICAgICAgICAgYnVpbGRfbnVt
YmVyOiB0aGUgYnVpbGQgbnVtYmVyLgotICAgICAgICAgIHJlc3VsdHNfZmlsZV9iYXNlX3BhdGg6
IEFic29sdXRlIHBhdGggdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZQotICAgICAgICAg
ICAgICByZXN1bHRzIGpzb24gZmlsZS4KLSAgICAgICAgICBidWlsZGVyX2Jhc2VfdXJsOiB0aGUg
VVJMIHdoZXJlIHdlIGhhdmUgdGhlIGFyY2hpdmVkIHRlc3QgcmVzdWx0cy4KLSAgICAgICAgICB0
ZXN0X3RpbWluZ3M6IE1hcCBvZiB0ZXN0IG5hbWUgdG8gYSB0ZXN0X3J1bi10aW1lLgotICAgICAg
ICAgIGZhaWx1cmVzOiBNYXAgb2YgdGVzdCBuYW1lIHRvIGEgZmFpbHVyZSB0eXBlIChvZiB0ZXN0
X2V4cGVjdGF0aW9ucykuCi0gICAgICAgICAgcGFzc2VkX3Rlc3RzOiBBIHNldCBjb250YWluaW5n
IGFsbCB0aGUgcGFzc2VkIHRlc3RzLgotICAgICAgICAgIHNraXBwZWRfdGVzdHM6IEEgc2V0IGNv
bnRhaW5pbmcgYWxsIHRoZSBza2lwcGVkIHRlc3RzLgotICAgICAgICAgIGFsbF90ZXN0czogTGlz
dCBvZiBhbGwgdGhlIHRlc3RzIHRoYXQgd2VyZSBydW4uICBUaGlzIHNob3VsZCBub3QKLSAgICAg
ICAgICAgICAgaW5jbHVkZSBza2lwcGVkIHRlc3RzLgotICAgICAgICAiIiIKLSAgICAgICAgc2Vs
Zi5fYnVpbGRlcl9uYW1lID0gYnVpbGRlcl9uYW1lCi0gICAgICAgIHNlbGYuX2J1aWxkX25hbWUg
PSBidWlsZF9uYW1lCi0gICAgICAgIHNlbGYuX2J1aWxkX251bWJlciA9IGJ1aWxkX251bWJlcgot
ICAgICAgICBzZWxmLl9idWlsZGVyX2Jhc2VfdXJsID0gYnVpbGRlcl9iYXNlX3VybAotICAgICAg
ICBzZWxmLl9yZXN1bHRzX2ZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihyZXN1bHRzX2ZpbGVfYmFz
ZV9wYXRoLAotICAgICAgICAgICAgc2VsZi5SRVNVTFRTX0ZJTEVOQU1FKQotICAgICAgICBzZWxm
Ll90ZXN0X3RpbWluZ3MgPSB0ZXN0X3RpbWluZ3MKLSAgICAgICAgc2VsZi5fZmFpbHVyZXMgPSBm
YWlsdXJlcwotICAgICAgICBzZWxmLl9wYXNzZWRfdGVzdHMgPSBwYXNzZWRfdGVzdHMKLSAgICAg
ICAgc2VsZi5fc2tpcHBlZF90ZXN0cyA9IHNraXBwZWRfdGVzdHMKLSAgICAgICAgc2VsZi5fYWxs
X3Rlc3RzID0gYWxsX3Rlc3RzCi0gICAgICAgIHNlbGYuX3N2bl9yZXBvc2l0b3JpZXMgPSBwb3J0
LnRlc3RfcmVwb3NpdG9yeV9wYXRocygpCi0KLSAgICAgICAgc2VsZi5fZ2VuZXJhdGVfanNvbl9v
dXRwdXQoKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9qc29uX291dHB1dChzZWxmKToKLSAgICAgICAg
IiIiR2VuZXJhdGVzIHRoZSBKU09OIG91dHB1dCBmaWxlLiIiIgotICAgICAgICBqc29uID0gc2Vs
Zi5fZ2V0X2pzb24oKQotICAgICAgICBpZiBqc29uOgotICAgICAgICAgICAgcmVzdWx0c19maWxl
ID0gY29kZWNzLm9wZW4oc2VsZi5fcmVzdWx0c19maWxlX3BhdGgsICJ3IiwgInV0Zi04IikKLSAg
ICAgICAgICAgIHJlc3VsdHNfZmlsZS53cml0ZShqc29uKQotICAgICAgICAgICAgcmVzdWx0c19m
aWxlLmNsb3NlKCkKLQotICAgICMgRklYTUU6IENhbGxlcnMgc2hvdWxkIHVzZSBzY20ucHkgaW5z
dGVhZC4KLSAgICBkZWYgX2dldF9zdm5fcmV2aXNpb24oc2VsZiwgaW5fZGlyZWN0b3J5KToKLSAg
ICAgICAgIiIiUmV0dXJucyB0aGUgc3ZuIHJldmlzaW9uIGZvciB0aGUgZ2l2ZW4gZGlyZWN0b3J5
LgotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgaW5fZGlyZWN0b3J5OiBUaGUgZGlyZWN0b3J5
IHdoZXJlIHN2biBpcyB0byBiZSBydW4uCi0gICAgICAgICIiIgotCi0gICAgICAgIGlmIG9zLnBh
dGguZXhpc3RzKG9zLnBhdGguam9pbihpbl9kaXJlY3RvcnksICcuc3ZuJykpOgotICAgICAgICAg
ICAgIyBOb3RlOiBOb3QgdGhyZWFkIHNhZmU6IGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUy
MzIwCi0gICAgICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLlBvcGVuKFsic3ZuIiwgImluZm8i
LCAiLS14bWwiXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3dkPWlu
X2RpcmVjdG9yeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hlbGw9
KHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuY29tbXVuaWNhdGUoKVswXQotICAgICAg
ICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGRvbSA9IHhtbC5kb20ubWluaWRvbS5wYXJzZVN0
cmluZyhvdXRwdXQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGRvbS5nZXRFbGVtZW50c0J5VGFn
TmFtZSgnZW50cnknKVswXS5nZXRBdHRyaWJ1dGUoCi0gICAgICAgICAgICAgICAgICAgICdyZXZp
c2lvbicpCi0gICAgICAgICAgICBleGNlcHQgeG1sLnBhcnNlcnMuZXhwYXQuRXhwYXRFcnJvcjoK
LSAgICAgICAgICAgICAgICByZXR1cm4gIiIKLSAgICAgICAgcmV0dXJuICIiCi0KLSAgICBkZWYg
X2dldF9hcmNoaXZlZF9qc29uX3Jlc3VsdHMoc2VsZik6Ci0gICAgICAgICIiIlJlYWRzIG9sZCBy
ZXN1bHRzIEpTT04gZmlsZSBpZiBpdCBleGlzdHMuCi0gICAgICAgIFJldHVybnMgKGFyY2hpdmVk
X3Jlc3VsdHMsIGVycm9yKSB0dXBsZSB3aGVyZSBlcnJvciBpcyBOb25lIGlmIHJlc3VsdHMKLSAg
ICAgICAgd2VyZSBzdWNjZXNzZnVsbHkgcmVhZC4KLSAgICAgICAgIiIiCi0gICAgICAgIHJlc3Vs
dHNfanNvbiA9IHt9Ci0gICAgICAgIG9sZF9yZXN1bHRzID0gTm9uZQotICAgICAgICBlcnJvciA9
IE5vbmUKLQotICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLl9yZXN1bHRzX2ZpbGVfcGF0
aCk6Ci0gICAgICAgICAgICB3aXRoIGNvZGVjcy5vcGVuKHNlbGYuX3Jlc3VsdHNfZmlsZV9wYXRo
LCAiciIsICJ1dGYtOCIpIGFzIGZpbGU6Ci0gICAgICAgICAgICAgICAgb2xkX3Jlc3VsdHMgPSBm
aWxlLnJlYWQoKQotICAgICAgICBlbGlmIHNlbGYuX2J1aWxkZXJfYmFzZV91cmw6Ci0gICAgICAg
ICAgICAjIENoZWNrIGlmIHdlIGhhdmUgdGhlIGFyY2hpdmVkIEpTT04gZmlsZSBvbiB0aGUgYnVp
bGRib3Qgc2VydmVyLgotICAgICAgICAgICAgcmVzdWx0c19maWxlX3VybCA9IChzZWxmLl9idWls
ZGVyX2Jhc2VfdXJsICsKLSAgICAgICAgICAgICAgICBzZWxmLl9idWlsZF9uYW1lICsgIi8iICsg
c2VsZi5SRVNVTFRTX0ZJTEVOQU1FKQotICAgICAgICAgICAgX2xvZy5lcnJvcigiTG9jYWwgcmVz
dWx0cy5qc29uIGZpbGUgZG9lcyBub3QgZXhpc3QuIEdyYWJiaW5nICIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIml0IG9mZiB0aGUgYXJjaGl2ZSBhdCAiICsgcmVzdWx0c19maWxlX3VybCkKLQot
ICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHJlc3VsdHNfZmlsZSA9IHVybGxpYjIu
dXJsb3BlbihyZXN1bHRzX2ZpbGVfdXJsKQotICAgICAgICAgICAgICAgIGluZm8gPSByZXN1bHRz
X2ZpbGUuaW5mbygpCi0gICAgICAgICAgICAgICAgb2xkX3Jlc3VsdHMgPSByZXN1bHRzX2ZpbGUu
cmVhZCgpCi0gICAgICAgICAgICBleGNlcHQgdXJsbGliMi5IVFRQRXJyb3IsIGh0dHBfZXJyb3I6
Ci0gICAgICAgICAgICAgICAgIyBBIG5vbi00eHggc3RhdHVzIGNvZGUgbWVhbnMgdGhlIGJvdCBp
cyBob3NlZCBmb3Igc29tZSByZWFzb24KLSAgICAgICAgICAgICAgICAjIGFuZCB3ZSBjYW4ndCBn
cmFiIHRoZSByZXN1bHRzLmpzb24gZmlsZSBvZmYgb2YgaXQuCi0gICAgICAgICAgICAgICAgaWYg
KGh0dHBfZXJyb3IuY29kZSA8IDQwMCBhbmQgaHR0cF9lcnJvci5jb2RlID49IDUwMCk6Ci0gICAg
ICAgICAgICAgICAgICAgIGVycm9yID0gaHR0cF9lcnJvcgotICAgICAgICAgICAgZXhjZXB0IHVy
bGxpYjIuVVJMRXJyb3IsIHVybF9lcnJvcjoKLSAgICAgICAgICAgICAgICBlcnJvciA9IHVybF9l
cnJvcgotCi0gICAgICAgIGlmIG9sZF9yZXN1bHRzOgotICAgICAgICAgICAgIyBTdHJpcCB0aGUg
cHJlZml4IGFuZCBzdWZmaXggc28gd2UgY2FuIGdldCB0aGUgYWN0dWFsIEpTT04gb2JqZWN0Lgot
ICAgICAgICAgICAgb2xkX3Jlc3VsdHMgPSBvbGRfcmVzdWx0c1tsZW4oc2VsZi5KU09OX1BSRUZJ
WCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbihvbGRfcmVzdWx0
cykgLSBsZW4oc2VsZi5KU09OX1NVRkZJWCldCi0KLSAgICAgICAgICAgIHRyeToKLSAgICAgICAg
ICAgICAgICByZXN1bHRzX2pzb24gPSBzaW1wbGVqc29uLmxvYWRzKG9sZF9yZXN1bHRzKQotICAg
ICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoInJlc3VsdHMuanNv
biB3YXMgbm90IHZhbGlkIEpTT04uIENsb2JiZXJpbmcuIikKLSAgICAgICAgICAgICAgICAjIFRo
ZSBKU09OIGZpbGUgaXMgbm90IHZhbGlkIEpTT04uIEp1c3QgY2xvYmJlciB0aGUgcmVzdWx0cy4K
LSAgICAgICAgICAgICAgICByZXN1bHRzX2pzb24gPSB7fQotICAgICAgICBlbHNlOgotICAgICAg
ICAgICAgX2xvZy5kZWJ1ZygnT2xkIEpTT04gcmVzdWx0cyBkbyBub3QgZXhpc3QuIFN0YXJ0aW5n
IGZyZXNoLicpCi0gICAgICAgICAgICByZXN1bHRzX2pzb24gPSB7fQotCi0gICAgICAgIHJldHVy
biByZXN1bHRzX2pzb24sIGVycm9yCi0KLSAgICBkZWYgX2dldF9qc29uKHNlbGYpOgotICAgICAg
ICAiIiJHZXRzIHRoZSByZXN1bHRzIGZvciB0aGUgcmVzdWx0cy5qc29uIGZpbGUuIiIiCi0gICAg
ICAgIHJlc3VsdHNfanNvbiwgZXJyb3IgPSBzZWxmLl9nZXRfYXJjaGl2ZWRfanNvbl9yZXN1bHRz
KCkKLSAgICAgICAgaWYgZXJyb3I6Ci0gICAgICAgICAgICAjIElmIHRoZXJlIHdhcyBhbiBlcnJv
ciBkb24ndCB3cml0ZSBhIHJlc3VsdHMuanNvbgotICAgICAgICAgICAgIyBmaWxlIGF0IGFsbCBh
cyBpdCB3b3VsZCBsb3NlIGFsbCB0aGUgaW5mb3JtYXRpb24gb24gdGhlIGJvdC4KLSAgICAgICAg
ICAgIF9sb2cuZXJyb3IoIkFyY2hpdmUgZGlyZWN0b3J5IGlzIGluYWNjZXNzaWJsZS4gTm90IG1v
ZGlmeWluZyAiCi0gICAgICAgICAgICAgICAgICAgICAgICJvciBjbG9iYmVyaW5nIHRoZSByZXN1
bHRzLmpzb24gZmlsZTogIiArIHN0cihlcnJvcikpCi0gICAgICAgICAgICByZXR1cm4gTm9uZQot
Ci0gICAgICAgIGJ1aWxkZXJfbmFtZSA9IHNlbGYuX2J1aWxkZXJfbmFtZQotICAgICAgICBpZiBy
ZXN1bHRzX2pzb24gYW5kIGJ1aWxkZXJfbmFtZSBub3QgaW4gcmVzdWx0c19qc29uOgotICAgICAg
ICAgICAgX2xvZy5kZWJ1ZygiQnVpbGRlciBuYW1lICglcykgaXMgbm90IGluIHRoZSByZXN1bHRz
Lmpzb24gZmlsZS4iCi0gICAgICAgICAgICAgICAgICAgICAgICUgYnVpbGRlcl9uYW1lKQotCi0g
ICAgICAgIHNlbGYuX2NvbnZlcnRfanNvbl90b19jdXJyZW50X3ZlcnNpb24ocmVzdWx0c19qc29u
KQotCi0gICAgICAgIGlmIGJ1aWxkZXJfbmFtZSBub3QgaW4gcmVzdWx0c19qc29uOgotICAgICAg
ICAgICAgcmVzdWx0c19qc29uW2J1aWxkZXJfbmFtZV0gPSAoCi0gICAgICAgICAgICAgICAgc2Vs
Zi5fY3JlYXRlX3Jlc3VsdHNfZm9yX2J1aWxkZXJfanNvbigpKQotCi0gICAgICAgIHJlc3VsdHNf
Zm9yX2J1aWxkZXIgPSByZXN1bHRzX2pzb25bYnVpbGRlcl9uYW1lXQotCi0gICAgICAgIHNlbGYu
X2luc2VydF9nZW5lcmljX21ldGFkYXRhKHJlc3VsdHNfZm9yX2J1aWxkZXIpCi0KLSAgICAgICAg
c2VsZi5faW5zZXJ0X2ZhaWx1cmVfc3VtbWFyaWVzKHJlc3VsdHNfZm9yX2J1aWxkZXIpCi0KLSAg
ICAgICAgIyBVcGRhdGUgdGhlIGFsbCBmYWlsaW5nIHRlc3RzIHdpdGggcmVzdWx0IHR5cGUgYW5k
IHRpbWUuCi0gICAgICAgIHRlc3RzID0gcmVzdWx0c19mb3JfYnVpbGRlcltzZWxmLlRFU1RTXQot
ICAgICAgICBhbGxfZmFpbGluZ190ZXN0cyA9IHNldChzZWxmLl9mYWlsdXJlcy5pdGVya2V5cygp
KQotICAgICAgICBhbGxfZmFpbGluZ190ZXN0cy51cGRhdGUodGVzdHMuaXRlcmtleXMoKSkKLSAg
ICAgICAgZm9yIHRlc3QgaW4gYWxsX2ZhaWxpbmdfdGVzdHM6Ci0gICAgICAgICAgICBzZWxmLl9p
bnNlcnRfdGVzdF90aW1lX2FuZF9yZXN1bHQodGVzdCwgdGVzdHMpCi0KLSAgICAgICAgIyBTcGVj
aWZ5IHNlcGFyYXRvcnMgaW4gb3JkZXIgdG8gZ2V0IGNvbXBhY3QgZW5jb2RpbmcuCi0gICAgICAg
IHJlc3VsdHNfc3RyID0gc2ltcGxlanNvbi5kdW1wcyhyZXN1bHRzX2pzb24sIHNlcGFyYXRvcnM9
KCcsJywgJzonKSkKLSAgICAgICAgcmV0dXJuIHNlbGYuSlNPTl9QUkVGSVggKyByZXN1bHRzX3N0
ciArIHNlbGYuSlNPTl9TVUZGSVgKLQotICAgIGRlZiBfaW5zZXJ0X2ZhaWx1cmVfc3VtbWFyaWVz
KHNlbGYsIHJlc3VsdHNfZm9yX2J1aWxkZXIpOgotICAgICAgICAiIiJJbnNlcnRzIGFnZ3JlZ2F0
ZSBwYXNzL2ZhaWx1cmUgc3RhdGlzdGljcyBpbnRvIHRoZSBKU09OLgotICAgICAgICBUaGlzIG1l
dGhvZCByZWFkcyBzZWxmLl9za2lwcGVkX3Rlc3RzLCBzZWxmLl9wYXNzZWRfdGVzdHMgYW5kCi0g
ICAgICAgIHNlbGYuX2ZhaWx1cmVzIGFuZCBpbnNlcnRzIEZJWEFCTEUsIEZJWEFCTEVfQ09VTlQg
YW5kIEFMTF9GSVhBQkxFX0NPVU5UCi0gICAgICAgIGVudHJpZXMuCi0KLSAgICAgICAgQXJnczoK
LSAgICAgICAgICByZXN1bHRzX2Zvcl9idWlsZGVyOiBEaWN0aW9uYXJ5IGNvbnRhaW5pbmcgdGhl
IHRlc3QgcmVzdWx0cyBmb3IgYQotICAgICAgICAgICAgICBzaW5nbGUgYnVpbGRlci4KLSAgICAg
ICAgIiIiCi0gICAgICAgICMgSW5zZXJ0IHRoZSBudW1iZXIgb2YgdGVzdHMgdGhhdCBmYWlsZWQu
Ci0gICAgICAgIHNlbGYuX2luc2VydF9pdGVtX2ludG9fcmF3X2xpc3QocmVzdWx0c19mb3JfYnVp
bGRlciwKLSAgICAgICAgICAgIGxlbihzZXQoc2VsZi5fZmFpbHVyZXMua2V5cygpKSB8IHNlbGYu
X3NraXBwZWRfdGVzdHMpLAotICAgICAgICAgICAgc2VsZi5GSVhBQkxFX0NPVU5UKQotCi0gICAg
ICAgICMgQ3JlYXRlIGEgcGFzcy9za2lwL2ZhaWx1cmUgc3VtbWFyeSBkaWN0aW9uYXJ5LgotICAg
ICAgICBlbnRyeSA9IHt9Ci0gICAgICAgIGVudHJ5W3NlbGYuU0tJUF9SRVNVTFRdID0gbGVuKHNl
bGYuX3NraXBwZWRfdGVzdHMpCi0gICAgICAgIGVudHJ5W3NlbGYuUEFTU19SRVNVTFRdID0gbGVu
KHNlbGYuX3Bhc3NlZF90ZXN0cykKLSAgICAgICAgZ2V0ID0gZW50cnkuZ2V0Ci0gICAgICAgIGZv
ciBmYWlsdXJlX3R5cGUgaW4gc2VsZi5fZmFpbHVyZXMudmFsdWVzKCk6Ci0gICAgICAgICAgICBm
YWlsdXJlX2NoYXIgPSBzZWxmLkZBSUxVUkVfVE9fQ0hBUltmYWlsdXJlX3R5cGVdCi0gICAgICAg
ICAgICBlbnRyeVtmYWlsdXJlX2NoYXJdID0gZ2V0KGZhaWx1cmVfY2hhciwgMCkgKyAxCi0KLSAg
ICAgICAgIyBJbnNlcnQgdGhlIHBhc3Mvc2tpcC9mYWlsdXJlIHN1bW1hcnkgZGljdGlvbmFyeS4K
LSAgICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1faW50b19yYXdfbGlzdChyZXN1bHRzX2Zvcl9idWls
ZGVyLCBlbnRyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxm
LkZJWEFCTEUpCi0KLSAgICAgICAgIyBJbnNlcnQgdGhlIG51bWJlciBvZiBhbGwgdGhlIHRlc3Rz
IHRoYXQgYXJlIHN1cHBvc2VkIHRvIHBhc3MuCi0gICAgICAgIHNlbGYuX2luc2VydF9pdGVtX2lu
dG9fcmF3X2xpc3QocmVzdWx0c19mb3JfYnVpbGRlciwKLSAgICAgICAgICAgIGxlbihzZWxmLl9z
a2lwcGVkX3Rlc3RzIHwgc2VsZi5fYWxsX3Rlc3RzKSwKLSAgICAgICAgICAgIHNlbGYuQUxMX0ZJ
WEFCTEVfQ09VTlQpCi0KLSAgICBkZWYgX2luc2VydF9pdGVtX2ludG9fcmF3X2xpc3Qoc2VsZiwg
cmVzdWx0c19mb3JfYnVpbGRlciwgaXRlbSwga2V5KToKLSAgICAgICAgIiIiSW5zZXJ0cyB0aGUg
aXRlbSBpbnRvIHRoZSBsaXN0IHdpdGggdGhlIGdpdmVuIGtleSBpbiB0aGUgcmVzdWx0cyBmb3IK
LSAgICAgICAgdGhpcyBidWlsZGVyLiBDcmVhdGVzIHRoZSBsaXN0IGlmIG5vIHN1Y2ggbGlzdCBl
eGlzdHMuCi0KLSAgICAgICAgQXJnczoKLSAgICAgICAgICByZXN1bHRzX2Zvcl9idWlsZGVyOiBE
aWN0aW9uYXJ5IGNvbnRhaW5pbmcgdGhlIHRlc3QgcmVzdWx0cyBmb3IgYQotICAgICAgICAgICAg
ICBzaW5nbGUgYnVpbGRlci4KLSAgICAgICAgICBpdGVtOiBOdW1iZXIgb3Igc3RyaW5nIHRvIGlu
c2VydCBpbnRvIHRoZSBsaXN0LgotICAgICAgICAgIGtleTogS2V5IGluIHJlc3VsdHNfZm9yX2J1
aWxkZXIgZm9yIHRoZSBsaXN0IHRvIGluc2VydCBpbnRvLgotICAgICAgICAiIiIKLSAgICAgICAg
aWYga2V5IGluIHJlc3VsdHNfZm9yX2J1aWxkZXI6Ci0gICAgICAgICAgICByYXdfbGlzdCA9IHJl
c3VsdHNfZm9yX2J1aWxkZXJba2V5XQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmF3X2xp
c3QgPSBbXQotCi0gICAgICAgIHJhd19saXN0Lmluc2VydCgwLCBpdGVtKQotICAgICAgICByYXdf
bGlzdCA9IHJhd19saXN0WzpzZWxmLk1BWF9OVU1CRVJfT0ZfQlVJTERfUkVTVUxUU19UT19MT0dd
Ci0gICAgICAgIHJlc3VsdHNfZm9yX2J1aWxkZXJba2V5XSA9IHJhd19saXN0Ci0KLSAgICBkZWYg
X2luc2VydF9pdGVtX3J1bl9sZW5ndGhfZW5jb2RlZChzZWxmLCBpdGVtLCBlbmNvZGVkX3Jlc3Vs
dHMpOgotICAgICAgICAiIiJJbnNlcnRzIHRoZSBpdGVtIGludG8gdGhlIHJ1bi1sZW5ndGggZW5j
b2RlZCByZXN1bHRzLgotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgaXRlbTogU3RyaW5nIG9y
IG51bWJlciB0byBpbnNlcnQuCi0gICAgICAgICAgZW5jb2RlZF9yZXN1bHRzOiBydW4tbGVuZ3Ro
IGVuY29kZWQgcmVzdWx0cy4gQW4gYXJyYXkgb2YgYXJyYXlzLCBlLmcuCi0gICAgICAgICAgICAg
IFtbMywnQSddLFsxLCdRJ11dIGVuY29kZXMgQUFBUS4KLSAgICAgICAgIiIiCi0gICAgICAgIGlm
IGxlbihlbmNvZGVkX3Jlc3VsdHMpIGFuZCBpdGVtID09IGVuY29kZWRfcmVzdWx0c1swXVsxXToK
LSAgICAgICAgICAgIG51bV9yZXN1bHRzID0gZW5jb2RlZF9yZXN1bHRzWzBdWzBdCi0gICAgICAg
ICAgICBpZiBudW1fcmVzdWx0cyA8PSBzZWxmLk1BWF9OVU1CRVJfT0ZfQlVJTERfUkVTVUxUU19U
T19MT0c6Ci0gICAgICAgICAgICAgICAgZW5jb2RlZF9yZXN1bHRzWzBdWzBdID0gbnVtX3Jlc3Vs
dHMgKyAxCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAjIFVzZSBhIGxpc3QgaW5zdGVhZCBv
ZiBhIGNsYXNzIGZvciB0aGUgcnVuLWxlbmd0aCBlbmNvZGluZyBzaW5jZQotICAgICAgICAgICAg
IyB3ZSB3YW50IHRoZSBzZXJpYWxpemVkIGZvcm0gdG8gYmUgY29uY2lzZS4KLSAgICAgICAgICAg
IGVuY29kZWRfcmVzdWx0cy5pbnNlcnQoMCwgWzEsIGl0ZW1dKQotCi0gICAgZGVmIF9pbnNlcnRf
Z2VuZXJpY19tZXRhZGF0YShzZWxmLCByZXN1bHRzX2Zvcl9idWlsZGVyKToKLSAgICAgICAgIiIi
IEluc2VydHMgZ2VuZXJpYyBtZXRhZGF0YSAoc3VjaCBhcyB2ZXJzaW9uIG51bWJlciwgY3VycmVu
dCB0aW1lIGV0YykKLSAgICAgICAgaW50byB0aGUgSlNPTi4KLQotICAgICAgICBBcmdzOgotICAg
ICAgICAgIHJlc3VsdHNfZm9yX2J1aWxkZXI6IERpY3Rpb25hcnkgY29udGFpbmluZyB0aGUgdGVz
dCByZXN1bHRzIGZvcgotICAgICAgICAgICAgICBhIHNpbmdsZSBidWlsZGVyLgotICAgICAgICAi
IiIKLSAgICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1faW50b19yYXdfbGlzdChyZXN1bHRzX2Zvcl9i
dWlsZGVyLAotICAgICAgICAgICAgc2VsZi5fYnVpbGRfbnVtYmVyLCBzZWxmLkJVSUxEX05VTUJF
UlMpCi0KLSAgICAgICAgIyBJbmNsdWRlIFNWTiByZXZpc2lvbnMgZm9yIHRoZSBnaXZlbiByZXBv
c2l0b3JpZXMuCi0gICAgICAgIGZvciAobmFtZSwgcGF0aCkgaW4gc2VsZi5fc3ZuX3JlcG9zaXRv
cmllczoKLSAgICAgICAgICAgIHNlbGYuX2luc2VydF9pdGVtX2ludG9fcmF3X2xpc3QocmVzdWx0
c19mb3JfYnVpbGRlciwKLSAgICAgICAgICAgICAgICBzZWxmLl9nZXRfc3ZuX3JldmlzaW9uKHBh
dGgpLAotICAgICAgICAgICAgICAgIG5hbWUgKyAnUmV2aXNpb24nKQotCi0gICAgICAgIHNlbGYu
X2luc2VydF9pdGVtX2ludG9fcmF3X2xpc3QocmVzdWx0c19mb3JfYnVpbGRlciwKLSAgICAgICAg
ICAgIGludCh0aW1lLnRpbWUoKSksCi0gICAgICAgICAgICBzZWxmLlRJTUUpCi0KLSAgICBkZWYg
X2luc2VydF90ZXN0X3RpbWVfYW5kX3Jlc3VsdChzZWxmLCB0ZXN0X25hbWUsIHRlc3RzKToKLSAg
ICAgICAgIiIiIEluc2VydCBhIHRlc3QgaXRlbSB3aXRoIGl0cyByZXN1bHRzIHRvIHRoZSBnaXZl
biB0ZXN0cyBkaWN0aW9uYXJ5LgotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgdGVzdHM6IERp
Y3Rpb25hcnkgY29udGFpbmluZyB0ZXN0IHJlc3VsdCBlbnRyaWVzLgotICAgICAgICAiIiIKLQot
ICAgICAgICByZXN1bHQgPSBKU09OUmVzdWx0c0dlbmVyYXRvci5QQVNTX1JFU1VMVAotICAgICAg
ICB0aW1lID0gMAotCi0gICAgICAgIGlmIHRlc3RfbmFtZSBub3QgaW4gc2VsZi5fYWxsX3Rlc3Rz
OgotICAgICAgICAgICAgcmVzdWx0ID0gSlNPTlJlc3VsdHNHZW5lcmF0b3IuTk9fREFUQV9SRVNV
TFQKLQotICAgICAgICBpZiB0ZXN0X25hbWUgaW4gc2VsZi5fZmFpbHVyZXM6Ci0gICAgICAgICAg
ICByZXN1bHQgPSBzZWxmLkZBSUxVUkVfVE9fQ0hBUltzZWxmLl9mYWlsdXJlc1t0ZXN0X25hbWVd
XQotCi0gICAgICAgIGlmIHRlc3RfbmFtZSBpbiBzZWxmLl90ZXN0X3RpbWluZ3M6Ci0gICAgICAg
ICAgICAjIEZsb29yIGZvciBub3cgdG8gZ2V0IHRpbWUgaW4gc2Vjb25kcy4KLSAgICAgICAgICAg
IHRpbWUgPSBpbnQoc2VsZi5fdGVzdF90aW1pbmdzW3Rlc3RfbmFtZV0pCi0KLSAgICAgICAgaWYg
dGVzdF9uYW1lIG5vdCBpbiB0ZXN0czoKLSAgICAgICAgICAgIHRlc3RzW3Rlc3RfbmFtZV0gPSBz
ZWxmLl9jcmVhdGVfcmVzdWx0c19hbmRfdGltZXNfanNvbigpCi0KLSAgICAgICAgdGhpc1Rlc3Qg
PSB0ZXN0c1t0ZXN0X25hbWVdCi0gICAgICAgIHNlbGYuX2luc2VydF9pdGVtX3J1bl9sZW5ndGhf
ZW5jb2RlZChyZXN1bHQsIHRoaXNUZXN0W3NlbGYuUkVTVUxUU10pCi0gICAgICAgIHNlbGYuX2lu
c2VydF9pdGVtX3J1bl9sZW5ndGhfZW5jb2RlZCh0aW1lLCB0aGlzVGVzdFtzZWxmLlRJTUVTXSkK
LSAgICAgICAgc2VsZi5fbm9ybWFsaXplX3Jlc3VsdHNfanNvbih0aGlzVGVzdCwgdGVzdF9uYW1l
LCB0ZXN0cykKLQotICAgIGRlZiBfY29udmVydF9qc29uX3RvX2N1cnJlbnRfdmVyc2lvbihzZWxm
LCByZXN1bHRzX2pzb24pOgotICAgICAgICAiIiJJZiB0aGUgSlNPTiBkb2VzIG5vdCBtYXRjaCB0
aGUgY3VycmVudCB2ZXJzaW9uLCBjb252ZXJ0cyBpdCB0byB0aGUKLSAgICAgICAgY3VycmVudCB2
ZXJzaW9uIGFuZCBhZGRzIGluIHRoZSBuZXcgdmVyc2lvbiBudW1iZXIuCi0gICAgICAgICIiIgot
ICAgICAgICBpZiAoc2VsZi5WRVJTSU9OX0tFWSBpbiByZXN1bHRzX2pzb24gYW5kCi0gICAgICAg
ICAgICByZXN1bHRzX2pzb25bc2VsZi5WRVJTSU9OX0tFWV0gPT0gc2VsZi5WRVJTSU9OKToKLSAg
ICAgICAgICAgIHJldHVybgotCi0gICAgICAgIHJlc3VsdHNfanNvbltzZWxmLlZFUlNJT05fS0VZ
XSA9IHNlbGYuVkVSU0lPTgotCi0gICAgZGVmIF9jcmVhdGVfcmVzdWx0c19hbmRfdGltZXNfanNv
bihzZWxmKToKLSAgICAgICAgcmVzdWx0c19hbmRfdGltZXMgPSB7fQotICAgICAgICByZXN1bHRz
X2FuZF90aW1lc1tzZWxmLlJFU1VMVFNdID0gW10KLSAgICAgICAgcmVzdWx0c19hbmRfdGltZXNb
c2VsZi5USU1FU10gPSBbXQotICAgICAgICByZXR1cm4gcmVzdWx0c19hbmRfdGltZXMKLQotICAg
IGRlZiBfY3JlYXRlX3Jlc3VsdHNfZm9yX2J1aWxkZXJfanNvbihzZWxmKToKLSAgICAgICAgcmVz
dWx0c19mb3JfYnVpbGRlciA9IHt9Ci0gICAgICAgIHJlc3VsdHNfZm9yX2J1aWxkZXJbc2VsZi5U
RVNUU10gPSB7fQotICAgICAgICByZXR1cm4gcmVzdWx0c19mb3JfYnVpbGRlcgotCi0gICAgZGVm
IF9yZW1vdmVfaXRlbXNfb3Zlcl9tYXhfbnVtYmVyX29mX2J1aWxkcyhzZWxmLCBlbmNvZGVkX2xp
c3QpOgotICAgICAgICAiIiJSZW1vdmVzIGl0ZW1zIGZyb20gdGhlIHJ1bi1sZW5ndGggZW5jb2Rl
ZCBsaXN0IGFmdGVyIHRoZSBmaW5hbAotICAgICAgICBpdGVtIHRoYXQgZXhjZWVkcyB0aGUgbWF4
IG51bWJlciBvZiBidWlsZHMgdG8gdHJhY2suCi0KLSAgICAgICAgQXJnczoKLSAgICAgICAgICBl
bmNvZGVkX3Jlc3VsdHM6IHJ1bi1sZW5ndGggZW5jb2RlZCByZXN1bHRzLiBBbiBhcnJheSBvZiBh
cnJheXMsIGUuZy4KLSAgICAgICAgICAgICAgW1szLCdBJ10sWzEsJ1EnXV0gZW5jb2RlcyBBQUFR
LgotICAgICAgICAiIiIKLSAgICAgICAgbnVtX2J1aWxkcyA9IDAKLSAgICAgICAgaW5kZXggPSAw
Ci0gICAgICAgIGZvciByZXN1bHQgaW4gZW5jb2RlZF9saXN0OgotICAgICAgICAgICAgbnVtX2J1
aWxkcyA9IG51bV9idWlsZHMgKyByZXN1bHRbMF0KLSAgICAgICAgICAgIGluZGV4ID0gaW5kZXgg
KyAxCi0gICAgICAgICAgICBpZiBudW1fYnVpbGRzID4gc2VsZi5NQVhfTlVNQkVSX09GX0JVSUxE
X1JFU1VMVFNfVE9fTE9HOgotICAgICAgICAgICAgICAgIHJldHVybiBlbmNvZGVkX2xpc3RbOmlu
ZGV4XQotICAgICAgICByZXR1cm4gZW5jb2RlZF9saXN0Ci0KLSAgICBkZWYgX25vcm1hbGl6ZV9y
ZXN1bHRzX2pzb24oc2VsZiwgdGVzdCwgdGVzdF9uYW1lLCB0ZXN0cyk6Ci0gICAgICAgICIiIiBQ
cnVuZSB0ZXN0cyB3aGVyZSBhbGwgcnVucyBwYXNzIG9yIHRlc3RzIHRoYXQgbm8gbG9uZ2VyIGV4
aXN0IGFuZAotICAgICAgICB0cnVuY2F0ZSBhbGwgcmVzdWx0cyB0byBtYXhOdW1iZXJPZkJ1aWxk
cy4KLQotICAgICAgICBBcmdzOgotICAgICAgICAgIHRlc3Q6IFJlc3VsdHNBbmRUaW1lcyBvYmpl
Y3QgZm9yIHRoaXMgdGVzdC4KLSAgICAgICAgICB0ZXN0X25hbWU6IE5hbWUgb2YgdGhlIHRlc3Qu
Ci0gICAgICAgICAgdGVzdHM6IFRoZSBKU09OIG9iamVjdCB3aXRoIGFsbCB0aGUgdGVzdCByZXN1
bHRzIGZvciB0aGlzIGJ1aWxkZXIuCi0gICAgICAgICIiIgotICAgICAgICB0ZXN0W3NlbGYuUkVT
VUxUU10gPSBzZWxmLl9yZW1vdmVfaXRlbXNfb3Zlcl9tYXhfbnVtYmVyX29mX2J1aWxkcygKLSAg
ICAgICAgICAgIHRlc3Rbc2VsZi5SRVNVTFRTXSkKLSAgICAgICAgdGVzdFtzZWxmLlRJTUVTXSA9
IHNlbGYuX3JlbW92ZV9pdGVtc19vdmVyX21heF9udW1iZXJfb2ZfYnVpbGRzKAotICAgICAgICAg
ICAgdGVzdFtzZWxmLlRJTUVTXSkKLQotICAgICAgICBpc19hbGxfcGFzcyA9IHNlbGYuX2lzX3Jl
c3VsdHNfYWxsX29mX3R5cGUodGVzdFtzZWxmLlJFU1VMVFNdLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5QQVNTX1JFU1VMVCkKLSAgICAg
ICAgaXNfYWxsX25vX2RhdGEgPSBzZWxmLl9pc19yZXN1bHRzX2FsbF9vZl90eXBlKHRlc3Rbc2Vs
Zi5SRVNVTFRTXSwKLSAgICAgICAgICAgIHNlbGYuTk9fREFUQV9SRVNVTFQpCi0gICAgICAgIG1h
eF90aW1lID0gbWF4KFt0aW1lWzFdIGZvciB0aW1lIGluIHRlc3Rbc2VsZi5USU1FU11dKQotCi0g
ICAgICAgICMgUmVtb3ZlIGFsbCBwYXNzZXMvbm8tZGF0YSBmcm9tIHRoZSByZXN1bHRzIHRvIHJl
ZHVjZSBub2lzZSBhbmQKLSAgICAgICAgIyBmaWxlc2l6ZS4gSWYgYSB0ZXN0IHBhc3NlcyBldmVy
eSBydW4sIGJ1dCB0YWtlcyA+IE1JTl9USU1FIHRvIHJ1biwKLSAgICAgICAgIyBkb24ndCB0aHJv
dyBhd2F5IHRoZSBkYXRhLgotICAgICAgICBpZiBpc19hbGxfbm9fZGF0YSBvciAoaXNfYWxsX3Bh
c3MgYW5kIG1heF90aW1lIDw9IHNlbGYuTUlOX1RJTUUpOgotICAgICAgICAgICAgZGVsIHRlc3Rz
W3Rlc3RfbmFtZV0KIAotICAgIGRlZiBfaXNfcmVzdWx0c19hbGxfb2ZfdHlwZShzZWxmLCByZXN1
bHRzLCB0eXBlKToKLSAgICAgICAgIiIiUmV0dXJucyB3aGV0aGVyIGFsbCB0aGUgcmVzdWx0cyBh
cmUgb2YgdGhlIGdpdmVuIHR5cGUKLSAgICAgICAgKGUuZy4gYWxsIHBhc3NlcykuIiIiCi0gICAg
ICAgIHJldHVybiBsZW4ocmVzdWx0cykgPT0gMSBhbmQgcmVzdWx0c1swXVsxXSA9PSB0eXBlCisg
ICAgICAgIHN1cGVyKEpTT05SZXN1bHRzR2VuZXJhdG9yLCBzZWxmKS5fX2luaXRfXygKKyAgICAg
ICAgICAgIGJ1aWxkZXJfbmFtZSwgYnVpbGRfbmFtZSwgYnVpbGRfbnVtYmVyLAorICAgICAgICAg
ICAgcmVzdWx0c19maWxlX2Jhc2VfcGF0aCwgYnVpbGRlcl9iYXNlX3VybCwKKyAgICAgICAgICAg
IHRlc3RfdGltaW5ncywgZmFpbHVyZXMsIHBhc3NlZF90ZXN0cywgc2tpcHBlZF90ZXN0cywgYWxs
X3Rlc3RzLAorICAgICAgICAgICAgc3ZuX3JlcG9zaXRvcmllcz1wb3J0LnRlc3RfcmVwb3NpdG9y
eV9wYXRocygpKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9leHBlY3RhdGlvbnMucHkgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X2V4cGVj
dGF0aW9ucy5weQppbmRleCAzODIyM2RkZGJiMjMzYjBlNDM1ZTFjNzI0OTQ1YjEzZTQ3MTE4ZmI1
Li5lZWRkNjYxYTMwOTkzNTQwZjU1YmRiNDQ0ZDk5OTlmNDcwMzNhMWI3IDEwMDY0NAotLS0gYS9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90
ZXN0X2V4cGVjdGF0aW9ucy5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X2V4cGVjdGF0aW9ucy5weQpAQCAtMzYsMTQg
KzM2LDIxIEBAIGltcG9ydCBvcwogaW1wb3J0IHJlCiBpbXBvcnQgc3lzCiAKK2Zyb20gd2Via2l0
cHkudGVzdF9wYWNrYWdlIGltcG9ydCB0ZXN0X3Jlc3VsdHMKIGltcG9ydCB3ZWJraXRweS50aGly
ZHBhcnR5LnNpbXBsZWpzb24gYXMgc2ltcGxlanNvbgogCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dn
ZXIoIndlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZS4iCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgInRlc3RfZXhwZWN0YXRpb25zIikKIAogIyBUZXN0IGV4cGVjdGF0aW9uIGFu
ZCBtb2RpZmllciBjb25zdGFudHMuCisjIE5vdGU6IFRoZXkgbmVlZCB0byBtYXRjaCB3aXRoIHRo
ZSB3ZWJraXRweS50ZXN0X3BhY2thZ2UudGVzdF9yZXN1bHRzLgogKFBBU1MsIEZBSUwsIFRFWFQs
IElNQUdFLCBJTUFHRV9QTFVTX1RFWFQsIFRJTUVPVVQsIENSQVNILCBTS0lQLCBXT05URklYLAot
IERFRkVSLCBTTE9XLCBSRUJBU0VMSU5FLCBNSVNTSU5HLCBGTEFLWSwgTk9XLCBOT05FKSA9IHJh
bmdlKDE2KQorIERFRkVSLCBTTE9XLCBSRUJBU0VMSU5FLCBNSVNTSU5HLCBGTEFLWSwgTk9XLCBO
T05FKSA9ICgKK3Rlc3RfcmVzdWx0cy5QQVNTLCB0ZXN0X3Jlc3VsdHMuRkFJTCwgdGVzdF9yZXN1
bHRzLlRFWFQsIHRlc3RfcmVzdWx0cy5JTUFHRSwKK3Rlc3RfcmVzdWx0cy5JTUFHRV9QTFVTX1RF
WFQsIHRlc3RfcmVzdWx0cy5USU1FT1VULCB0ZXN0X3Jlc3VsdHMuQ1JBU0gsCit0ZXN0X3Jlc3Vs
dHMuU0tJUCwgdGVzdF9yZXN1bHRzLldPTlRGSVgsIHRlc3RfcmVzdWx0cy5ERUZFUiwgdGVzdF9y
ZXN1bHRzLlNMT1csCit0ZXN0X3Jlc3VsdHMuUkVCQVNFTElORSwgdGVzdF9yZXN1bHRzLk1JU1NJ
TkcsIHRlc3RfcmVzdWx0cy5GTEFLWSwKK3Rlc3RfcmVzdWx0cy5OT1csIHRlc3RfcmVzdWx0cy5O
T05FKQogCiAjIFRlc3QgZXhwZWN0YXRpb24gZmlsZSB1cGRhdGUgYWN0aW9uIGNvbnN0YW50cwog
KE5PX0NIQU5HRSwgUkVNT1ZFX1RFU1QsIFJFTU9WRV9QTEFURk9STSwgQUREX1BMQVRGT1JNU19F
WENFUFRfVEhJUykgPSByYW5nZSg0KQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS90ZXN0X3BhY2thZ2UvX19pbml0X18ucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3Rlc3RfcGFja2FnZS9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZjY1YmVlNWJiNzdl
OTZlYmM3Y2Q5YzQ3NjQwNjkwZmJkYThhYzE5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS90ZXN0X3BhY2thZ2UvX19pbml0X18ucHkKQEAgLTAsMCArMSBA
QAorIyBSZXF1aXJlZCBmb3IgUHl0aG9uIHRvIHNlYXJjaCB0aGlzIGRpcmVjdG9yeSBmb3IgbW9k
dWxlIGZpbGVzCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3Rf
cGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS90ZXN0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvci5weQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4zYmUwM2ZhM2VkODU4OTY1NGMxMzEyYWE5MmJiMDYwNGYwMTFiOWU4Ci0tLSAvZGV2L251bGwK
KysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90ZXN0X3BhY2thZ2UvanNvbl9yZXN1
bHRzX2dlbmVyYXRvci5weQpAQCAtMCwwICsxLDQzMiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9u
CisjIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9u
LgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMg
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisj
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVu
dAorCitpbXBvcnQgY29kZWNzCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgc3Vi
cHJvY2VzcworaW1wb3J0IHN5cworaW1wb3J0IHRpbWUKK2ltcG9ydCB1cmxsaWIyCitpbXBvcnQg
eG1sLmRvbS5taW5pZG9tCisKK2Zyb20gd2Via2l0cHkudGVzdF9wYWNrYWdlIGltcG9ydCB0ZXN0
X3Jlc3VsdHMKK2ltcG9ydCB3ZWJraXRweS50aGlyZHBhcnR5LnNpbXBsZWpzb24gYXMgc2ltcGxl
anNvbgorCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoIndlYmtpdHB5LnRlc3RfcGFja2FnZS5q
c29uX3Jlc3VsdHNfZ2VuZXJhdG9yIikKKworCitjbGFzcyBKU09OUmVzdWx0c0dlbmVyYXRvcihv
YmplY3QpOgorICAgICIiIkEgSlNPTiByZXN1bHRzIGdlbmVyYXRvciBmb3IgZ2VuZXJpYyB0ZXN0
cy4iIiIKKworICAgIE1BWF9OVU1CRVJfT0ZfQlVJTERfUkVTVUxUU19UT19MT0cgPSA3NTAKKyAg
ICAjIE1pbiB0aW1lIChzZWNvbmRzKSB0aGF0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIEpTT04uCisg
ICAgTUlOX1RJTUUgPSAxCisgICAgSlNPTl9QUkVGSVggPSAiQUREX1JFU1VMVFMoIgorICAgIEpT
T05fU1VGRklYID0gIik7IgorICAgIFBBU1NfUkVTVUxUID0gIlAiCisgICAgU0tJUF9SRVNVTFQg
PSAiWCIKKyAgICBOT19EQVRBX1JFU1VMVCA9ICJOIgorICAgIFZFUlNJT04gPSAzCisgICAgVkVS
U0lPTl9LRVkgPSAidmVyc2lvbiIKKyAgICBSRVNVTFRTID0gInJlc3VsdHMiCisgICAgVElNRVMg
PSAidGltZXMiCisgICAgQlVJTERfTlVNQkVSUyA9ICJidWlsZE51bWJlcnMiCisgICAgVElNRSA9
ICJzZWNvbmRzU2luY2VFcG9jaCIKKyAgICBURVNUUyA9ICJ0ZXN0cyIKKworICAgIEZJWEFCTEVf
Q09VTlQgPSAiZml4YWJsZUNvdW50IgorICAgIEZJWEFCTEUgPSAiZml4YWJsZUNvdW50cyIKKyAg
ICBBTExfRklYQUJMRV9DT1VOVCA9ICJhbGxGaXhhYmxlQ291bnQiCisKKyAgICAjIE5vdGUgdGhh
dCB3ZSBvbWl0IHRlc3RfcmVzdWx0cy5GQUlMIGZyb20gdGhpcyBsaXN0IGJlY2F1c2UKKyAgICAj
IGl0IHNob3VsZCBuZXZlciBzaG93IHVwIChpdCdzIGEgbGVnYWN5IGlucHV0IGV4cGVjdGF0aW9u
LCBuZXZlcgorICAgICMgYW4gb3V0cHV0IGV4cGVjdGF0aW9uKS4KKyAgICBGQUlMVVJFX1RPX0NI
QVIgPSB7dGVzdF9yZXN1bHRzLkNSQVNIOiAiQyIsCisgICAgICAgICAgICAgICAgICAgICAgIHRl
c3RfcmVzdWx0cy5USU1FT1VUOiAiVCIsCisgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfcmVz
dWx0cy5JTUFHRTogIkkiLAorICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3Jlc3VsdHMuVEVY
VDogIkYiLAorICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3Jlc3VsdHMuTUlTU0lORzogIk8i
LAorICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3Jlc3VsdHMuSU1BR0VfUExVU19URVhUOiAi
WiJ9CisgICAgRkFJTFVSRV9DSEFSUyA9IEZBSUxVUkVfVE9fQ0hBUi52YWx1ZXMoKQorCisgICAg
UkVTVUxUU19GSUxFTkFNRSA9ICJyZXN1bHRzLmpzb24iCisKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgYnVpbGRlcl9uYW1lLCBidWlsZF9uYW1lLCBidWlsZF9udW1iZXIsCisgICAgICAgIHJlc3Vs
dHNfZmlsZV9iYXNlX3BhdGgsIGJ1aWxkZXJfYmFzZV91cmwsCisgICAgICAgIHRlc3RfdGltaW5n
cywgZmFpbHVyZXMsIHBhc3NlZF90ZXN0cywgc2tpcHBlZF90ZXN0cywgYWxsX3Rlc3RzLAorICAg
ICAgICBzdm5fcmVwb3NpdG9yaWVzPU5vbmUpOgorICAgICAgICAiIiJNb2RpZmllcyB0aGUgcmVz
dWx0cy5qc29uIGZpbGUuIEdyYWJzIGl0IG9mZiB0aGUgYXJjaGl2ZSBkaXJlY3RvcnkKKyAgICAg
ICAgaWYgaXQgaXMgbm90IGZvdW5kIGxvY2FsbHkuCisKKyAgICAgICAgQXJncworICAgICAgICAg
IGJ1aWxkZXJfbmFtZTogdGhlIGJ1aWxkZXIgbmFtZSAoZS5nLiBXZWJraXQpLgorICAgICAgICAg
IGJ1aWxkX25hbWU6IHRoZSBidWlsZCBuYW1lIChlLmcuIHdlYmtpdC1yZWwpLgorICAgICAgICAg
IGJ1aWxkX251bWJlcjogdGhlIGJ1aWxkIG51bWJlci4KKyAgICAgICAgICByZXN1bHRzX2ZpbGVf
YmFzZV9wYXRoOiBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUK
KyAgICAgICAgICAgICAgcmVzdWx0cyBqc29uIGZpbGUuCisgICAgICAgICAgYnVpbGRlcl9iYXNl
X3VybDogdGhlIFVSTCB3aGVyZSB3ZSBoYXZlIHRoZSBhcmNoaXZlZCB0ZXN0IHJlc3VsdHMuCisg
ICAgICAgICAgdGVzdF90aW1pbmdzOiBNYXAgb2YgdGVzdCBuYW1lIHRvIGEgdGVzdF9ydW4tdGlt
ZS4KKyAgICAgICAgICBmYWlsdXJlczogTWFwIG9mIHRlc3QgbmFtZSB0byBhIGZhaWx1cmUgdHlw
ZSAob2YgdGVzdF9yZXN1bHRzKSwgb3IKKyAgICAgICAgICAgICAgYSBsaXN0IChvciBzZXQpIG9m
IGZhaWxlZCB0ZXN0IG5hbWVzLgorICAgICAgICAgIHBhc3NlZF90ZXN0czogQSBzZXQgY29udGFp
bmluZyBhbGwgdGhlIHBhc3NlZCB0ZXN0cy4KKyAgICAgICAgICBza2lwcGVkX3Rlc3RzOiBBIHNl
dCBjb250YWluaW5nIGFsbCB0aGUgc2tpcHBlZCB0ZXN0cy4KKyAgICAgICAgICBhbGxfdGVzdHM6
IExpc3Qgb2YgYWxsIHRoZSB0ZXN0cyB0aGF0IHdlcmUgcnVuLiAgVGhpcyBzaG91bGQgbm90Cisg
ICAgICAgICAgICAgIGluY2x1ZGUgc2tpcHBlZCB0ZXN0cy4KKyAgICAgICAgICBzdm5fcmVwb3Np
dG9yaWVzOiBBIGxpc3Qgb2YgKHJlcG9zaXRvcnlfbmFtZSwgc3ZuX3BhdGgpIHR1cGxlcworICAg
ICAgICAgICAgICBmb3IgZGVwZW5kZW50IFNWTiByZXBvc2l0b3JpZXMuICBUaGUgU1ZOIHJldmlz
aW9ucyBmb3IgdGhlCisgICAgICAgICAgICAgIHJlcG9zaXRvcmllcyB3aWxsIGJlIGluY2x1ZGVk
IGluIHRoZSBvdXRwdXQgSlNPTiBmaWxlLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fYnVp
bGRlcl9uYW1lID0gYnVpbGRlcl9uYW1lCisgICAgICAgIHNlbGYuX2J1aWxkX25hbWUgPSBidWls
ZF9uYW1lCisgICAgICAgIHNlbGYuX2J1aWxkX251bWJlciA9IGJ1aWxkX251bWJlcgorICAgICAg
ICBzZWxmLl9idWlsZGVyX2Jhc2VfdXJsID0gYnVpbGRlcl9iYXNlX3VybAorICAgICAgICBzZWxm
Ll9yZXN1bHRzX2ZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihyZXN1bHRzX2ZpbGVfYmFzZV9wYXRo
LAorICAgICAgICAgICAgc2VsZi5SRVNVTFRTX0ZJTEVOQU1FKQorICAgICAgICBzZWxmLl90ZXN0
X3RpbWluZ3MgPSB0ZXN0X3RpbWluZ3MKKyAgICAgICAgc2VsZi5fZmFpbHVyZXMgPSB7fQorICAg
ICAgICBpZiB0eXBlKGZhaWx1cmVzKSBpcyBkaWN0OgorICAgICAgICAgICAgc2VsZi5fZmFpbHVy
ZXMgPSBmYWlsdXJlcworICAgICAgICBlbGlmIGdldGF0dHIoZmFpbHVyZXMsICdfX2l0ZXJfXycs
IEZhbHNlKToKKyAgICAgICAgICAgICMgSWYgdGhlIGdpdmVuIGZhaWx1cmVzIGlzIGl0ZXJhYmxl
IGJ1dCBub3QgYSBkaWN0LCBhc3N1bWUgdGhhdAorICAgICAgICAgICAgIyBldmVyeSBmYWlsdXJl
IHdhcyBhIFRFWFQgZmFpbHVyZS4KKyAgICAgICAgICAgIHNlbGYuX2ZhaWx1cmVzID0gZGljdChb
KGYsIHRlc3RfcmVzdWx0cy5URVhUKSBmb3IgZiBpbiBmYWlsdXJlc10pCisgICAgICAgIHNlbGYu
X3Bhc3NlZF90ZXN0cyA9IHBhc3NlZF90ZXN0cworICAgICAgICBzZWxmLl9za2lwcGVkX3Rlc3Rz
ID0gc2tpcHBlZF90ZXN0cworICAgICAgICBzZWxmLl9hbGxfdGVzdHMgPSBhbGxfdGVzdHMKKyAg
ICAgICAgc2VsZi5fc3ZuX3JlcG9zaXRvcmllcyA9IFtdCisgICAgICAgIGlmIHN2bl9yZXBvc2l0
b3JpZXM6CisgICAgICAgICAgc2VsZi5fc3ZuX3JlcG9zaXRvcmllcyA9IHN2bl9yZXBvc2l0b3Jp
ZXMKKworICAgICAgICBzZWxmLl9nZW5lcmF0ZV9qc29uX291dHB1dCgpCisKKyAgICBkZWYgX2dl
bmVyYXRlX2pzb25fb3V0cHV0KHNlbGYpOgorICAgICAgICAiIiJHZW5lcmF0ZXMgdGhlIEpTT04g
b3V0cHV0IGZpbGUuIiIiCisgICAgICAgIGpzb24gPSBzZWxmLl9nZXRfanNvbigpCisgICAgICAg
IGlmIGpzb246CisgICAgICAgICAgICByZXN1bHRzX2ZpbGUgPSBjb2RlY3Mub3BlbihzZWxmLl9y
ZXN1bHRzX2ZpbGVfcGF0aCwgInciLCAidXRmLTgiKQorICAgICAgICAgICAgcmVzdWx0c19maWxl
LndyaXRlKGpzb24pCisgICAgICAgICAgICByZXN1bHRzX2ZpbGUuY2xvc2UoKQorCisgICAgIyBG
SVhNRTogQ2FsbGVycyBzaG91bGQgdXNlIHNjbS5weSBpbnN0ZWFkLgorICAgIGRlZiBfZ2V0X3N2
bl9yZXZpc2lvbihzZWxmLCBpbl9kaXJlY3RvcnkpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBz
dm4gcmV2aXNpb24gZm9yIHRoZSBnaXZlbiBkaXJlY3RvcnkuCisKKyAgICAgICAgQXJnczoKKyAg
ICAgICAgICBpbl9kaXJlY3Rvcnk6IFRoZSBkaXJlY3Rvcnkgd2hlcmUgc3ZuIGlzIHRvIGJlIHJ1
bi4KKyAgICAgICAgIiIiCisKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2lu
KGluX2RpcmVjdG9yeSwgJy5zdm4nKSk6CisgICAgICAgICAgICAjIE5vdGU6IE5vdCB0aHJlYWQg
c2FmZTogaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTIzMjAKKyAgICAgICAgICAgIG91dHB1
dCA9IHN1YnByb2Nlc3MuUG9wZW4oWyJzdm4iLCAiaW5mbyIsICItLXhtbCJdLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjd2Q9aW5fZGlyZWN0b3J5LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGVsbD0oc3lzLnBsYXRmb3JtID09ICd3aW4z
MicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJv
Y2Vzcy5QSVBFKS5jb21tdW5pY2F0ZSgpWzBdCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAg
ICAgICAgZG9tID0geG1sLmRvbS5taW5pZG9tLnBhcnNlU3RyaW5nKG91dHB1dCkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZG9tLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdlbnRyeScpWzBdLmdldEF0
dHJpYnV0ZSgKKyAgICAgICAgICAgICAgICAgICAgJ3JldmlzaW9uJykKKyAgICAgICAgICAgIGV4
Y2VwdCB4bWwucGFyc2Vycy5leHBhdC5FeHBhdEVycm9yOgorICAgICAgICAgICAgICAgIHJldHVy
biAiIgorICAgICAgICByZXR1cm4gIiIKKworICAgIGRlZiBfZ2V0X2FyY2hpdmVkX2pzb25fcmVz
dWx0cyhzZWxmKToKKyAgICAgICAgIiIiUmVhZHMgb2xkIHJlc3VsdHMgSlNPTiBmaWxlIGlmIGl0
IGV4aXN0cy4KKyAgICAgICAgUmV0dXJucyAoYXJjaGl2ZWRfcmVzdWx0cywgZXJyb3IpIHR1cGxl
IHdoZXJlIGVycm9yIGlzIE5vbmUgaWYgcmVzdWx0cworICAgICAgICB3ZXJlIHN1Y2Nlc3NmdWxs
eSByZWFkLgorICAgICAgICAiIiIKKyAgICAgICAgcmVzdWx0c19qc29uID0ge30KKyAgICAgICAg
b2xkX3Jlc3VsdHMgPSBOb25lCisgICAgICAgIGVycm9yID0gTm9uZQorCisgICAgICAgIGlmIG9z
LnBhdGguZXhpc3RzKHNlbGYuX3Jlc3VsdHNfZmlsZV9wYXRoKToKKyAgICAgICAgICAgIHdpdGgg
Y29kZWNzLm9wZW4oc2VsZi5fcmVzdWx0c19maWxlX3BhdGgsICJyIiwgInV0Zi04IikgYXMgZmls
ZToKKyAgICAgICAgICAgICAgICBvbGRfcmVzdWx0cyA9IGZpbGUucmVhZCgpCisgICAgICAgIGVs
aWYgc2VsZi5fYnVpbGRlcl9iYXNlX3VybDoKKyAgICAgICAgICAgICMgQ2hlY2sgaWYgd2UgaGF2
ZSB0aGUgYXJjaGl2ZWQgSlNPTiBmaWxlIG9uIHRoZSBidWlsZGJvdCBzZXJ2ZXIuCisgICAgICAg
ICAgICByZXN1bHRzX2ZpbGVfdXJsID0gKHNlbGYuX2J1aWxkZXJfYmFzZV91cmwgKworICAgICAg
ICAgICAgICAgIHNlbGYuX2J1aWxkX25hbWUgKyAiLyIgKyBzZWxmLlJFU1VMVFNfRklMRU5BTUUp
CisgICAgICAgICAgICBfbG9nLmVycm9yKCJMb2NhbCByZXN1bHRzLmpzb24gZmlsZSBkb2VzIG5v
dCBleGlzdC4gR3JhYmJpbmcgIgorICAgICAgICAgICAgICAgICAgICAgICAiaXQgb2ZmIHRoZSBh
cmNoaXZlIGF0ICIgKyByZXN1bHRzX2ZpbGVfdXJsKQorCisgICAgICAgICAgICB0cnk6CisgICAg
ICAgICAgICAgICAgcmVzdWx0c19maWxlID0gdXJsbGliMi51cmxvcGVuKHJlc3VsdHNfZmlsZV91
cmwpCisgICAgICAgICAgICAgICAgaW5mbyA9IHJlc3VsdHNfZmlsZS5pbmZvKCkKKyAgICAgICAg
ICAgICAgICBvbGRfcmVzdWx0cyA9IHJlc3VsdHNfZmlsZS5yZWFkKCkKKyAgICAgICAgICAgIGV4
Y2VwdCB1cmxsaWIyLkhUVFBFcnJvciwgaHR0cF9lcnJvcjoKKyAgICAgICAgICAgICAgICAjIEEg
bm9uLTR4eCBzdGF0dXMgY29kZSBtZWFucyB0aGUgYm90IGlzIGhvc2VkIGZvciBzb21lIHJlYXNv
bgorICAgICAgICAgICAgICAgICMgYW5kIHdlIGNhbid0IGdyYWIgdGhlIHJlc3VsdHMuanNvbiBm
aWxlIG9mZiBvZiBpdC4KKyAgICAgICAgICAgICAgICBpZiAoaHR0cF9lcnJvci5jb2RlIDwgNDAw
IGFuZCBodHRwX2Vycm9yLmNvZGUgPj0gNTAwKToKKyAgICAgICAgICAgICAgICAgICAgZXJyb3Ig
PSBodHRwX2Vycm9yCisgICAgICAgICAgICBleGNlcHQgdXJsbGliMi5VUkxFcnJvciwgdXJsX2Vy
cm9yOgorICAgICAgICAgICAgICAgIGVycm9yID0gdXJsX2Vycm9yCisKKyAgICAgICAgaWYgb2xk
X3Jlc3VsdHM6CisgICAgICAgICAgICAjIFN0cmlwIHRoZSBwcmVmaXggYW5kIHN1ZmZpeCBzbyB3
ZSBjYW4gZ2V0IHRoZSBhY3R1YWwgSlNPTiBvYmplY3QuCisgICAgICAgICAgICBvbGRfcmVzdWx0
cyA9IG9sZF9yZXN1bHRzW2xlbihzZWxmLkpTT05fUFJFRklYKToKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbGVuKG9sZF9yZXN1bHRzKSAtIGxlbihzZWxmLkpTT05fU1VG
RklYKV0KKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJlc3VsdHNfanNvbiA9
IHNpbXBsZWpzb24ubG9hZHMob2xkX3Jlc3VsdHMpCisgICAgICAgICAgICBleGNlcHQ6CisgICAg
ICAgICAgICAgICAgX2xvZy5kZWJ1ZygicmVzdWx0cy5qc29uIHdhcyBub3QgdmFsaWQgSlNPTi4g
Q2xvYmJlcmluZy4iKQorICAgICAgICAgICAgICAgICMgVGhlIEpTT04gZmlsZSBpcyBub3QgdmFs
aWQgSlNPTi4gSnVzdCBjbG9iYmVyIHRoZSByZXN1bHRzLgorICAgICAgICAgICAgICAgIHJlc3Vs
dHNfanNvbiA9IHt9CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBfbG9nLmRlYnVnKCdPbGQg
SlNPTiByZXN1bHRzIGRvIG5vdCBleGlzdC4gU3RhcnRpbmcgZnJlc2guJykKKyAgICAgICAgICAg
IHJlc3VsdHNfanNvbiA9IHt9CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdHNfanNvbiwgZXJyb3IK
KworICAgIGRlZiBfZ2V0X2pzb24oc2VsZik6CisgICAgICAgICIiIkdldHMgdGhlIHJlc3VsdHMg
Zm9yIHRoZSByZXN1bHRzLmpzb24gZmlsZS4iIiIKKyAgICAgICAgcmVzdWx0c19qc29uLCBlcnJv
ciA9IHNlbGYuX2dldF9hcmNoaXZlZF9qc29uX3Jlc3VsdHMoKQorICAgICAgICBpZiBlcnJvcjoK
KyAgICAgICAgICAgICMgSWYgdGhlcmUgd2FzIGFuIGVycm9yIGRvbid0IHdyaXRlIGEgcmVzdWx0
cy5qc29uCisgICAgICAgICAgICAjIGZpbGUgYXQgYWxsIGFzIGl0IHdvdWxkIGxvc2UgYWxsIHRo
ZSBpbmZvcm1hdGlvbiBvbiB0aGUgYm90LgorICAgICAgICAgICAgX2xvZy5lcnJvcigiQXJjaGl2
ZSBkaXJlY3RvcnkgaXMgaW5hY2Nlc3NpYmxlLiBOb3QgbW9kaWZ5aW5nICIKKyAgICAgICAgICAg
ICAgICAgICAgICAgIm9yIGNsb2JiZXJpbmcgdGhlIHJlc3VsdHMuanNvbiBmaWxlOiAiICsgc3Ry
KGVycm9yKSkKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgYnVpbGRlcl9uYW1l
ID0gc2VsZi5fYnVpbGRlcl9uYW1lCisgICAgICAgIGlmIHJlc3VsdHNfanNvbiBhbmQgYnVpbGRl
cl9uYW1lIG5vdCBpbiByZXN1bHRzX2pzb246CisgICAgICAgICAgICBfbG9nLmRlYnVnKCJCdWls
ZGVyIG5hbWUgKCVzKSBpcyBub3QgaW4gdGhlIHJlc3VsdHMuanNvbiBmaWxlLiIKKyAgICAgICAg
ICAgICAgICAgICAgICAgJSBidWlsZGVyX25hbWUpCisKKyAgICAgICAgc2VsZi5fY29udmVydF9q
c29uX3RvX2N1cnJlbnRfdmVyc2lvbihyZXN1bHRzX2pzb24pCisKKyAgICAgICAgaWYgYnVpbGRl
cl9uYW1lIG5vdCBpbiByZXN1bHRzX2pzb246CisgICAgICAgICAgICByZXN1bHRzX2pzb25bYnVp
bGRlcl9uYW1lXSA9ICgKKyAgICAgICAgICAgICAgICBzZWxmLl9jcmVhdGVfcmVzdWx0c19mb3Jf
YnVpbGRlcl9qc29uKCkpCisKKyAgICAgICAgcmVzdWx0c19mb3JfYnVpbGRlciA9IHJlc3VsdHNf
anNvbltidWlsZGVyX25hbWVdCisKKyAgICAgICAgc2VsZi5faW5zZXJ0X2dlbmVyaWNfbWV0YWRh
dGEocmVzdWx0c19mb3JfYnVpbGRlcikKKworICAgICAgICBzZWxmLl9pbnNlcnRfZmFpbHVyZV9z
dW1tYXJpZXMocmVzdWx0c19mb3JfYnVpbGRlcikKKworICAgICAgICAjIFVwZGF0ZSB0aGUgYWxs
IGZhaWxpbmcgdGVzdHMgd2l0aCByZXN1bHQgdHlwZSBhbmQgdGltZS4KKyAgICAgICAgdGVzdHMg
PSByZXN1bHRzX2Zvcl9idWlsZGVyW3NlbGYuVEVTVFNdCisgICAgICAgIGFsbF9mYWlsaW5nX3Rl
c3RzID0gc2V0KHNlbGYuX2ZhaWx1cmVzLml0ZXJrZXlzKCkpCisgICAgICAgIGFsbF9mYWlsaW5n
X3Rlc3RzLnVwZGF0ZSh0ZXN0cy5pdGVya2V5cygpKQorICAgICAgICBmb3IgdGVzdCBpbiBhbGxf
ZmFpbGluZ190ZXN0czoKKyAgICAgICAgICAgIHNlbGYuX2luc2VydF90ZXN0X3RpbWVfYW5kX3Jl
c3VsdCh0ZXN0LCB0ZXN0cykKKworICAgICAgICAjIFNwZWNpZnkgc2VwYXJhdG9ycyBpbiBvcmRl
ciB0byBnZXQgY29tcGFjdCBlbmNvZGluZy4KKyAgICAgICAgcmVzdWx0c19zdHIgPSBzaW1wbGVq
c29uLmR1bXBzKHJlc3VsdHNfanNvbiwgc2VwYXJhdG9ycz0oJywnLCAnOicpKQorICAgICAgICBy
ZXR1cm4gc2VsZi5KU09OX1BSRUZJWCArIHJlc3VsdHNfc3RyICsgc2VsZi5KU09OX1NVRkZJWAor
CisgICAgZGVmIF9pbnNlcnRfZmFpbHVyZV9zdW1tYXJpZXMoc2VsZiwgcmVzdWx0c19mb3JfYnVp
bGRlcik6CisgICAgICAgICIiIkluc2VydHMgYWdncmVnYXRlIHBhc3MvZmFpbHVyZSBzdGF0aXN0
aWNzIGludG8gdGhlIEpTT04uCisgICAgICAgIFRoaXMgbWV0aG9kIHJlYWRzIHNlbGYuX3NraXBw
ZWRfdGVzdHMsIHNlbGYuX3Bhc3NlZF90ZXN0cyBhbmQKKyAgICAgICAgc2VsZi5fZmFpbHVyZXMg
YW5kIGluc2VydHMgRklYQUJMRSwgRklYQUJMRV9DT1VOVCBhbmQgQUxMX0ZJWEFCTEVfQ09VTlQK
KyAgICAgICAgZW50cmllcy4KKworICAgICAgICBBcmdzOgorICAgICAgICAgIHJlc3VsdHNfZm9y
X2J1aWxkZXI6IERpY3Rpb25hcnkgY29udGFpbmluZyB0aGUgdGVzdCByZXN1bHRzIGZvciBhCisg
ICAgICAgICAgICAgIHNpbmdsZSBidWlsZGVyLgorICAgICAgICAiIiIKKyAgICAgICAgIyBJbnNl
cnQgdGhlIG51bWJlciBvZiB0ZXN0cyB0aGF0IGZhaWxlZC4KKyAgICAgICAgc2VsZi5faW5zZXJ0
X2l0ZW1faW50b19yYXdfbGlzdChyZXN1bHRzX2Zvcl9idWlsZGVyLAorICAgICAgICAgICAgbGVu
KHNldChzZWxmLl9mYWlsdXJlcy5rZXlzKCkpIHwgc2VsZi5fc2tpcHBlZF90ZXN0cyksCisgICAg
ICAgICAgICBzZWxmLkZJWEFCTEVfQ09VTlQpCisKKyAgICAgICAgIyBDcmVhdGUgYSBwYXNzL3Nr
aXAvZmFpbHVyZSBzdW1tYXJ5IGRpY3Rpb25hcnkuCisgICAgICAgIGVudHJ5ID0ge30KKyAgICAg
ICAgZW50cnlbc2VsZi5TS0lQX1JFU1VMVF0gPSBsZW4oc2VsZi5fc2tpcHBlZF90ZXN0cykKKyAg
ICAgICAgZW50cnlbc2VsZi5QQVNTX1JFU1VMVF0gPSBsZW4oc2VsZi5fcGFzc2VkX3Rlc3RzKQor
ICAgICAgICBnZXQgPSBlbnRyeS5nZXQKKyAgICAgICAgZm9yIGZhaWx1cmVfdHlwZSBpbiBzZWxm
Ll9mYWlsdXJlcy52YWx1ZXMoKToKKyAgICAgICAgICAgIGZhaWx1cmVfY2hhciA9IHNlbGYuRkFJ
TFVSRV9UT19DSEFSW2ZhaWx1cmVfdHlwZV0KKyAgICAgICAgICAgIGVudHJ5W2ZhaWx1cmVfY2hh
cl0gPSBnZXQoZmFpbHVyZV9jaGFyLCAwKSArIDEKKworICAgICAgICAjIEluc2VydCB0aGUgcGFz
cy9za2lwL2ZhaWx1cmUgc3VtbWFyeSBkaWN0aW9uYXJ5LgorICAgICAgICBzZWxmLl9pbnNlcnRf
aXRlbV9pbnRvX3Jhd19saXN0KHJlc3VsdHNfZm9yX2J1aWxkZXIsIGVudHJ5LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuRklYQUJMRSkKKworICAgICAgICAj
IEluc2VydCB0aGUgbnVtYmVyIG9mIGFsbCB0aGUgdGVzdHMgdGhhdCBhcmUgc3VwcG9zZWQgdG8g
cGFzcy4KKyAgICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1faW50b19yYXdfbGlzdChyZXN1bHRzX2Zv
cl9idWlsZGVyLAorICAgICAgICAgICAgbGVuKHNlbGYuX3NraXBwZWRfdGVzdHMgfCBzZWxmLl9h
bGxfdGVzdHMpLAorICAgICAgICAgICAgc2VsZi5BTExfRklYQUJMRV9DT1VOVCkKKworICAgIGRl
ZiBfaW5zZXJ0X2l0ZW1faW50b19yYXdfbGlzdChzZWxmLCByZXN1bHRzX2Zvcl9idWlsZGVyLCBp
dGVtLCBrZXkpOgorICAgICAgICAiIiJJbnNlcnRzIHRoZSBpdGVtIGludG8gdGhlIGxpc3Qgd2l0
aCB0aGUgZ2l2ZW4ga2V5IGluIHRoZSByZXN1bHRzIGZvcgorICAgICAgICB0aGlzIGJ1aWxkZXIu
IENyZWF0ZXMgdGhlIGxpc3QgaWYgbm8gc3VjaCBsaXN0IGV4aXN0cy4KKworICAgICAgICBBcmdz
OgorICAgICAgICAgIHJlc3VsdHNfZm9yX2J1aWxkZXI6IERpY3Rpb25hcnkgY29udGFpbmluZyB0
aGUgdGVzdCByZXN1bHRzIGZvciBhCisgICAgICAgICAgICAgIHNpbmdsZSBidWlsZGVyLgorICAg
ICAgICAgIGl0ZW06IE51bWJlciBvciBzdHJpbmcgdG8gaW5zZXJ0IGludG8gdGhlIGxpc3QuCisg
ICAgICAgICAga2V5OiBLZXkgaW4gcmVzdWx0c19mb3JfYnVpbGRlciBmb3IgdGhlIGxpc3QgdG8g
aW5zZXJ0IGludG8uCisgICAgICAgICIiIgorICAgICAgICBpZiBrZXkgaW4gcmVzdWx0c19mb3Jf
YnVpbGRlcjoKKyAgICAgICAgICAgIHJhd19saXN0ID0gcmVzdWx0c19mb3JfYnVpbGRlcltrZXld
CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYXdfbGlzdCA9IFtdCisKKyAgICAgICAgcmF3
X2xpc3QuaW5zZXJ0KDAsIGl0ZW0pCisgICAgICAgIHJhd19saXN0ID0gcmF3X2xpc3RbOnNlbGYu
TUFYX05VTUJFUl9PRl9CVUlMRF9SRVNVTFRTX1RPX0xPR10KKyAgICAgICAgcmVzdWx0c19mb3Jf
YnVpbGRlcltrZXldID0gcmF3X2xpc3QKKworICAgIGRlZiBfaW5zZXJ0X2l0ZW1fcnVuX2xlbmd0
aF9lbmNvZGVkKHNlbGYsIGl0ZW0sIGVuY29kZWRfcmVzdWx0cyk6CisgICAgICAgICIiIkluc2Vy
dHMgdGhlIGl0ZW0gaW50byB0aGUgcnVuLWxlbmd0aCBlbmNvZGVkIHJlc3VsdHMuCisKKyAgICAg
ICAgQXJnczoKKyAgICAgICAgICBpdGVtOiBTdHJpbmcgb3IgbnVtYmVyIHRvIGluc2VydC4KKyAg
ICAgICAgICBlbmNvZGVkX3Jlc3VsdHM6IHJ1bi1sZW5ndGggZW5jb2RlZCByZXN1bHRzLiBBbiBh
cnJheSBvZiBhcnJheXMsIGUuZy4KKyAgICAgICAgICAgICAgW1szLCdBJ10sWzEsJ1EnXV0gZW5j
b2RlcyBBQUFRLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbGVuKGVuY29kZWRfcmVzdWx0cykg
YW5kIGl0ZW0gPT0gZW5jb2RlZF9yZXN1bHRzWzBdWzFdOgorICAgICAgICAgICAgbnVtX3Jlc3Vs
dHMgPSBlbmNvZGVkX3Jlc3VsdHNbMF1bMF0KKyAgICAgICAgICAgIGlmIG51bV9yZXN1bHRzIDw9
IHNlbGYuTUFYX05VTUJFUl9PRl9CVUlMRF9SRVNVTFRTX1RPX0xPRzoKKyAgICAgICAgICAgICAg
ICBlbmNvZGVkX3Jlc3VsdHNbMF1bMF0gPSBudW1fcmVzdWx0cyArIDEKKyAgICAgICAgZWxzZToK
KyAgICAgICAgICAgICMgVXNlIGEgbGlzdCBpbnN0ZWFkIG9mIGEgY2xhc3MgZm9yIHRoZSBydW4t
bGVuZ3RoIGVuY29kaW5nIHNpbmNlCisgICAgICAgICAgICAjIHdlIHdhbnQgdGhlIHNlcmlhbGl6
ZWQgZm9ybSB0byBiZSBjb25jaXNlLgorICAgICAgICAgICAgZW5jb2RlZF9yZXN1bHRzLmluc2Vy
dCgwLCBbMSwgaXRlbV0pCisKKyAgICBkZWYgX2luc2VydF9nZW5lcmljX21ldGFkYXRhKHNlbGYs
IHJlc3VsdHNfZm9yX2J1aWxkZXIpOgorICAgICAgICAiIiIgSW5zZXJ0cyBnZW5lcmljIG1ldGFk
YXRhIChzdWNoIGFzIHZlcnNpb24gbnVtYmVyLCBjdXJyZW50IHRpbWUgZXRjKQorICAgICAgICBp
bnRvIHRoZSBKU09OLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgcmVzdWx0c19mb3JfYnVp
bGRlcjogRGljdGlvbmFyeSBjb250YWluaW5nIHRoZSB0ZXN0IHJlc3VsdHMgZm9yCisgICAgICAg
ICAgICAgIGEgc2luZ2xlIGJ1aWxkZXIuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9pbnNl
cnRfaXRlbV9pbnRvX3Jhd19saXN0KHJlc3VsdHNfZm9yX2J1aWxkZXIsCisgICAgICAgICAgICBz
ZWxmLl9idWlsZF9udW1iZXIsIHNlbGYuQlVJTERfTlVNQkVSUykKKworICAgICAgICAjIEluY2x1
ZGUgU1ZOIHJldmlzaW9ucyBmb3IgdGhlIGdpdmVuIHJlcG9zaXRvcmllcy4KKyAgICAgICAgZm9y
IChuYW1lLCBwYXRoKSBpbiBzZWxmLl9zdm5fcmVwb3NpdG9yaWVzOgorICAgICAgICAgICAgc2Vs
Zi5faW5zZXJ0X2l0ZW1faW50b19yYXdfbGlzdChyZXN1bHRzX2Zvcl9idWlsZGVyLAorICAgICAg
ICAgICAgICAgIHNlbGYuX2dldF9zdm5fcmV2aXNpb24ocGF0aCksCisgICAgICAgICAgICAgICAg
bmFtZSArICdSZXZpc2lvbicpCisKKyAgICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1faW50b19yYXdf
bGlzdChyZXN1bHRzX2Zvcl9idWlsZGVyLAorICAgICAgICAgICAgaW50KHRpbWUudGltZSgpKSwK
KyAgICAgICAgICAgIHNlbGYuVElNRSkKKworICAgIGRlZiBfaW5zZXJ0X3Rlc3RfdGltZV9hbmRf
cmVzdWx0KHNlbGYsIHRlc3RfbmFtZSwgdGVzdHMpOgorICAgICAgICAiIiIgSW5zZXJ0IGEgdGVz
dCBpdGVtIHdpdGggaXRzIHJlc3VsdHMgdG8gdGhlIGdpdmVuIHRlc3RzIGRpY3Rpb25hcnkuCisK
KyAgICAgICAgQXJnczoKKyAgICAgICAgICB0ZXN0czogRGljdGlvbmFyeSBjb250YWluaW5nIHRl
c3QgcmVzdWx0IGVudHJpZXMuCisgICAgICAgICIiIgorCisgICAgICAgIHJlc3VsdCA9IEpTT05S
ZXN1bHRzR2VuZXJhdG9yLlBBU1NfUkVTVUxUCisgICAgICAgIHRpbWUgPSAwCisKKyAgICAgICAg
aWYgdGVzdF9uYW1lIG5vdCBpbiBzZWxmLl9hbGxfdGVzdHM6CisgICAgICAgICAgICByZXN1bHQg
PSBKU09OUmVzdWx0c0dlbmVyYXRvci5OT19EQVRBX1JFU1VMVAorCisgICAgICAgIGlmIHRlc3Rf
bmFtZSBpbiBzZWxmLl9mYWlsdXJlczoKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuRkFJTFVS
RV9UT19DSEFSW3NlbGYuX2ZhaWx1cmVzW3Rlc3RfbmFtZV1dCisKKyAgICAgICAgaWYgdGVzdF9u
YW1lIGluIHNlbGYuX3Rlc3RfdGltaW5nczoKKyAgICAgICAgICAgICMgRmxvb3IgZm9yIG5vdyB0
byBnZXQgdGltZSBpbiBzZWNvbmRzLgorICAgICAgICAgICAgdGltZSA9IGludChzZWxmLl90ZXN0
X3RpbWluZ3NbdGVzdF9uYW1lXSkKKworICAgICAgICBpZiB0ZXN0X25hbWUgbm90IGluIHRlc3Rz
OgorICAgICAgICAgICAgdGVzdHNbdGVzdF9uYW1lXSA9IHNlbGYuX2NyZWF0ZV9yZXN1bHRzX2Fu
ZF90aW1lc19qc29uKCkKKworICAgICAgICB0aGlzVGVzdCA9IHRlc3RzW3Rlc3RfbmFtZV0KKyAg
ICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1fcnVuX2xlbmd0aF9lbmNvZGVkKHJlc3VsdCwgdGhpc1Rl
c3Rbc2VsZi5SRVNVTFRTXSkKKyAgICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1fcnVuX2xlbmd0aF9l
bmNvZGVkKHRpbWUsIHRoaXNUZXN0W3NlbGYuVElNRVNdKQorICAgICAgICBzZWxmLl9ub3JtYWxp
emVfcmVzdWx0c19qc29uKHRoaXNUZXN0LCB0ZXN0X25hbWUsIHRlc3RzKQorCisgICAgZGVmIF9j
b252ZXJ0X2pzb25fdG9fY3VycmVudF92ZXJzaW9uKHNlbGYsIHJlc3VsdHNfanNvbik6CisgICAg
ICAgICIiIklmIHRoZSBKU09OIGRvZXMgbm90IG1hdGNoIHRoZSBjdXJyZW50IHZlcnNpb24sIGNv
bnZlcnRzIGl0IHRvIHRoZQorICAgICAgICBjdXJyZW50IHZlcnNpb24gYW5kIGFkZHMgaW4gdGhl
IG5ldyB2ZXJzaW9uIG51bWJlci4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIChzZWxmLlZFUlNJ
T05fS0VZIGluIHJlc3VsdHNfanNvbiBhbmQKKyAgICAgICAgICAgIHJlc3VsdHNfanNvbltzZWxm
LlZFUlNJT05fS0VZXSA9PSBzZWxmLlZFUlNJT04pOgorICAgICAgICAgICAgcmV0dXJuCisKKyAg
ICAgICAgcmVzdWx0c19qc29uW3NlbGYuVkVSU0lPTl9LRVldID0gc2VsZi5WRVJTSU9OCisKKyAg
ICBkZWYgX2NyZWF0ZV9yZXN1bHRzX2FuZF90aW1lc19qc29uKHNlbGYpOgorICAgICAgICByZXN1
bHRzX2FuZF90aW1lcyA9IHt9CisgICAgICAgIHJlc3VsdHNfYW5kX3RpbWVzW3NlbGYuUkVTVUxU
U10gPSBbXQorICAgICAgICByZXN1bHRzX2FuZF90aW1lc1tzZWxmLlRJTUVTXSA9IFtdCisgICAg
ICAgIHJldHVybiByZXN1bHRzX2FuZF90aW1lcworCisgICAgZGVmIF9jcmVhdGVfcmVzdWx0c19m
b3JfYnVpbGRlcl9qc29uKHNlbGYpOgorICAgICAgICByZXN1bHRzX2Zvcl9idWlsZGVyID0ge30K
KyAgICAgICAgcmVzdWx0c19mb3JfYnVpbGRlcltzZWxmLlRFU1RTXSA9IHt9CisgICAgICAgIHJl
dHVybiByZXN1bHRzX2Zvcl9idWlsZGVyCisKKyAgICBkZWYgX3JlbW92ZV9pdGVtc19vdmVyX21h
eF9udW1iZXJfb2ZfYnVpbGRzKHNlbGYsIGVuY29kZWRfbGlzdCk6CisgICAgICAgICIiIlJlbW92
ZXMgaXRlbXMgZnJvbSB0aGUgcnVuLWxlbmd0aCBlbmNvZGVkIGxpc3QgYWZ0ZXIgdGhlIGZpbmFs
CisgICAgICAgIGl0ZW0gdGhhdCBleGNlZWRzIHRoZSBtYXggbnVtYmVyIG9mIGJ1aWxkcyB0byB0
cmFjay4KKworICAgICAgICBBcmdzOgorICAgICAgICAgIGVuY29kZWRfcmVzdWx0czogcnVuLWxl
bmd0aCBlbmNvZGVkIHJlc3VsdHMuIEFuIGFycmF5IG9mIGFycmF5cywgZS5nLgorICAgICAgICAg
ICAgICBbWzMsJ0EnXSxbMSwnUSddXSBlbmNvZGVzIEFBQVEuCisgICAgICAgICIiIgorICAgICAg
ICBudW1fYnVpbGRzID0gMAorICAgICAgICBpbmRleCA9IDAKKyAgICAgICAgZm9yIHJlc3VsdCBp
biBlbmNvZGVkX2xpc3Q6CisgICAgICAgICAgICBudW1fYnVpbGRzID0gbnVtX2J1aWxkcyArIHJl
c3VsdFswXQorICAgICAgICAgICAgaW5kZXggPSBpbmRleCArIDEKKyAgICAgICAgICAgIGlmIG51
bV9idWlsZHMgPiBzZWxmLk1BWF9OVU1CRVJfT0ZfQlVJTERfUkVTVUxUU19UT19MT0c6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGVuY29kZWRfbGlzdFs6aW5kZXhdCisgICAgICAgIHJldHVybiBl
bmNvZGVkX2xpc3QKKworICAgIGRlZiBfbm9ybWFsaXplX3Jlc3VsdHNfanNvbihzZWxmLCB0ZXN0
LCB0ZXN0X25hbWUsIHRlc3RzKToKKyAgICAgICAgIiIiIFBydW5lIHRlc3RzIHdoZXJlIGFsbCBy
dW5zIHBhc3Mgb3IgdGVzdHMgdGhhdCBubyBsb25nZXIgZXhpc3QgYW5kCisgICAgICAgIHRydW5j
YXRlIGFsbCByZXN1bHRzIHRvIG1heE51bWJlck9mQnVpbGRzLgorCisgICAgICAgIEFyZ3M6Cisg
ICAgICAgICAgdGVzdDogUmVzdWx0c0FuZFRpbWVzIG9iamVjdCBmb3IgdGhpcyB0ZXN0LgorICAg
ICAgICAgIHRlc3RfbmFtZTogTmFtZSBvZiB0aGUgdGVzdC4KKyAgICAgICAgICB0ZXN0czogVGhl
IEpTT04gb2JqZWN0IHdpdGggYWxsIHRoZSB0ZXN0IHJlc3VsdHMgZm9yIHRoaXMgYnVpbGRlci4K
KyAgICAgICAgIiIiCisgICAgICAgIHRlc3Rbc2VsZi5SRVNVTFRTXSA9IHNlbGYuX3JlbW92ZV9p
dGVtc19vdmVyX21heF9udW1iZXJfb2ZfYnVpbGRzKAorICAgICAgICAgICAgdGVzdFtzZWxmLlJF
U1VMVFNdKQorICAgICAgICB0ZXN0W3NlbGYuVElNRVNdID0gc2VsZi5fcmVtb3ZlX2l0ZW1zX292
ZXJfbWF4X251bWJlcl9vZl9idWlsZHMoCisgICAgICAgICAgICB0ZXN0W3NlbGYuVElNRVNdKQor
CisgICAgICAgIGlzX2FsbF9wYXNzID0gc2VsZi5faXNfcmVzdWx0c19hbGxfb2ZfdHlwZSh0ZXN0
W3NlbGYuUkVTVUxUU10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxmLlBBU1NfUkVTVUxUKQorICAgICAgICBpc19hbGxfbm9fZGF0YSA9IHNl
bGYuX2lzX3Jlc3VsdHNfYWxsX29mX3R5cGUodGVzdFtzZWxmLlJFU1VMVFNdLAorICAgICAgICAg
ICAgc2VsZi5OT19EQVRBX1JFU1VMVCkKKyAgICAgICAgbWF4X3RpbWUgPSBtYXgoW3RpbWVbMV0g
Zm9yIHRpbWUgaW4gdGVzdFtzZWxmLlRJTUVTXV0pCisKKyAgICAgICAgIyBSZW1vdmUgYWxsIHBh
c3Nlcy9uby1kYXRhIGZyb20gdGhlIHJlc3VsdHMgdG8gcmVkdWNlIG5vaXNlIGFuZAorICAgICAg
ICAjIGZpbGVzaXplLiBJZiBhIHRlc3QgcGFzc2VzIGV2ZXJ5IHJ1biwgYnV0IHRha2VzID4gTUlO
X1RJTUUgdG8gcnVuLAorICAgICAgICAjIGRvbid0IHRocm93IGF3YXkgdGhlIGRhdGEuCisgICAg
ICAgIGlmIGlzX2FsbF9ub19kYXRhIG9yIChpc19hbGxfcGFzcyBhbmQgbWF4X3RpbWUgPD0gc2Vs
Zi5NSU5fVElNRSk6CisgICAgICAgICAgICBkZWwgdGVzdHNbdGVzdF9uYW1lXQorCisgICAgZGVm
IF9pc19yZXN1bHRzX2FsbF9vZl90eXBlKHNlbGYsIHJlc3VsdHMsIHR5cGUpOgorICAgICAgICAi
IiJSZXR1cm5zIHdoZXRoZXIgYWxsIHRoZSByZXN1bHRzIGFyZSBvZiB0aGUgZ2l2ZW4gdHlwZQor
ICAgICAgICAoZS5nLiBhbGwgcGFzc2VzKS4iIiIKKyAgICAgICAgcmV0dXJuIGxlbihyZXN1bHRz
KSA9PSAxIGFuZCByZXN1bHRzWzBdWzFdID09IHR5cGUKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvdGVzdF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5lcmF0b3JfdW5p
dHRlc3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3RfcGFja2FnZS9qc29u
X3Jlc3VsdHNfZ2VuZXJhdG9yX3VuaXR0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM3MDhmOGQ1MGMxYzI3
MjVhZDJhZDFhZTUwOTYzOWM0YThkODIwOGIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3RfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yX3Vu
aXR0ZXN0LnB5CkBAIC0wLDAgKzEsMTI4IEBACisjIS91c3IvYmluL3B5dGhvbgorIyBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisj
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisKKyIiIlVuaXQgdGVzdHMgZm9yIGpzb25fcmVzdWx0c19nZW5lcmF0b3IucHkuIiIi
CisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworaW1wb3J0IHJh
bmRvbQoraW1wb3J0IHNodXRpbAoraW1wb3J0IHRlbXBmaWxlCisKK2Zyb20gd2Via2l0cHkudGVz
dF9wYWNrYWdlLmpzb25fcmVzdWx0c19nZW5lcmF0b3IgaW1wb3J0IEpTT05SZXN1bHRzR2VuZXJh
dG9yCitmcm9tIHdlYmtpdHB5LnRlc3RfcGFja2FnZSBpbXBvcnQgdGVzdF9yZXN1bHRzCitpbXBv
cnQgd2Via2l0cHkudGhpcmRwYXJ0eS5zaW1wbGVqc29uIGFzIHNpbXBsZWpzb24KKworQlVJTERF
Ul9CQVNFX1VSTCA9ICJodHRwOi8vYnVpbGQuY2hyb21pdW0ub3JnL2J1aWxkYm90L2d0ZXN0LXJl
c3VsdHMvIgorCisKK2NsYXNzIFRlc3RKU09OR2VuZXJhdGlvbih1bml0dGVzdC5UZXN0Q2FzZSk6
CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnJlc3VsdHNfZGlyZWN0b3J5ID0g
dGVtcGZpbGUubWtkdGVtcCgpCisgICAgICAgIHNlbGYucmVzdWx0c19qc29uX3BhdGggPSAnJXMv
cmVzdWx0cy5qc29uJyAlIHNlbGYucmVzdWx0c19kaXJlY3RvcnkKKyAgICAgICAgc2VsZi5idWls
ZGVyX25hbWUgPSAnRFVNTVlfQlVJTERFUl9OQU1FJworICAgICAgICBzZWxmLmJ1aWxkX25hbWUg
PSAnRFVNTVlfQlVJTERfTkFNRScKKyAgICAgICAgc2VsZi5idWlsZF9udW1iZXIgPSAnRFVNTVlf
QlVJTERFUl9OVU1CRVInCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNodXRp
bC5ybXRyZWUoc2VsZi5yZXN1bHRzX2RpcmVjdG9yeSkKKworICAgIGRlZiBfdGVzdF9qc29uX2dl
bmVyYXRpb24oc2VsZiwgcGFzc2VkX3Rlc3RzLCBmYWlsZWRfdGVzdHMsIHNraXBwZWRfdGVzdHMp
OgorICAgICAgICAjIFJlc2V0IHRoZSB0ZXN0IHJlc3VsdHMuCisgICAgICAgIGlmIG9zLnBhdGgu
ZXhpc3RzKHNlbGYucmVzdWx0c19qc29uX3BhdGgpOgorICAgICAgICAgIG9zLnJlbW92ZShzZWxm
LnJlc3VsdHNfanNvbl9wYXRoKQorCisgICAgICAgICMgTWFrZSBzdXJlIHdlIGhhdmUgc2V0cyAo
cmF0aGVyIHRoYW4gbGlzdHMpLgorICAgICAgICBwYXNzZWRfdGVzdHMgPSBzZXQocGFzc2VkX3Rl
c3RzKQorICAgICAgICBza2lwcGVkX3Rlc3RzID0gc2V0KHNraXBwZWRfdGVzdHMpCisgICAgICAg
IGlmIG5vdCB0eXBlKGZhaWxlZF90ZXN0cykgaXMgZGljdDoKKyAgICAgICAgICAgIGZhaWxlZF90
ZXN0cyA9IGRpY3QoWyhmLCB0ZXN0X3Jlc3VsdHMuVEVYVCkgZm9yIGYgaW4gZmFpbGVkX3Rlc3Rz
XSkKKyAgICAgICAgdGVzdHNfbGlzdCA9IHBhc3NlZF90ZXN0cyB8IHNldChmYWlsZWRfdGVzdHMu
a2V5cygpKQorICAgICAgICB0ZXN0X3RpbWluZ3MgPSB7fQorICAgICAgICBmb3IgdGVzdCBpbiB0
ZXN0c19saXN0OgorICAgICAgICAgICAgdGVzdF90aW1pbmdzW3Rlc3RdID0gZmxvYXQocmFuZG9t
LnJhbmRpbnQoMSwgMTApKQorCisgICAgICAgICMgR2VuZXJhdGUgYSBKU09OIGZpbGUuCisgICAg
ICAgIEpTT05SZXN1bHRzR2VuZXJhdG9yKAorICAgICAgICAgICAgc2VsZi5idWlsZGVyX25hbWUs
IHNlbGYuYnVpbGRfbmFtZSwgc2VsZi5idWlsZF9udW1iZXIsCisgICAgICAgICAgICBzZWxmLnJl
c3VsdHNfZGlyZWN0b3J5LAorICAgICAgICAgICAgQlVJTERFUl9CQVNFX1VSTCwKKyAgICAgICAg
ICAgIHRlc3RfdGltaW5ncywKKyAgICAgICAgICAgIGZhaWxlZF90ZXN0cywKKyAgICAgICAgICAg
IHBhc3NlZF90ZXN0cywKKyAgICAgICAgICAgIHNraXBwZWRfdGVzdHMsCisgICAgICAgICAgICB0
ZXN0c19saXN0KQorCisgICAgICAgICMgQWxpYXNpbmcgdG8gYSBzaG9ydCBuYW1lIGZvciBiZXR0
ZXIgYWNjZXNzIHRvIGl0cyBjb25zdGFudHMuCisgICAgICAgIEpSRyA9IEpTT05SZXN1bHRzR2Vu
ZXJhdG9yCisKKyAgICAgICAgZiA9IG9wZW4oc2VsZi5yZXN1bHRzX2pzb25fcGF0aCkKKyAgICAg
ICAganNvbl9kYXRhID0gZi5yZWFkKCkKKyAgICAgICAganNvbl9kYXRhID0ganNvbl9kYXRhW2xl
bihKUkcuSlNPTl9QUkVGSVgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKGpz
b25fZGF0YSkgLSBsZW4oSlJHLkpTT05fU1VGRklYKV0KKyAgICAgICAganNvbiA9IHNpbXBsZWpz
b24ubG9hZHMoanNvbl9kYXRhKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShKUkcuVkVSU0lP
Tl9LRVkgaW4ganNvbikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuYnVpbGRlcl9uYW1l
IGluIGpzb24pCisKKyAgICAgICAgYnVpbGRpbmZvID0ganNvbltzZWxmLmJ1aWxkZXJfbmFtZV0K
KyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEpSRy5GSVhBQkxFIGluIGJ1aWxkaW5mbykKKyAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKEpSRy5URVNUUyBpbiBidWlsZGluZm8pCisgICAgICAgIHNlbGYu
YXNzZXJ0VHJ1ZShsZW4oYnVpbGRpbmZvW0pSRy5CVUlMRF9OVU1CRVJTXSkgPT0gMSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKGJ1aWxkaW5mb1tKUkcuQlVJTERfTlVNQkVSU11bMF0gPT0gc2Vs
Zi5idWlsZF9udW1iZXIpCisKKyAgICAgICAgaWYgdGVzdHNfbGlzdCAgb3Igc2tpcHBlZF90ZXN0
czoKKyAgICAgICAgICAgIGZpeGFibGUgPSBidWlsZGluZm9bSlJHLkZJWEFCTEVdWzBdCisgICAg
ICAgICAgICBzZWxmLmFzc2VydFRydWUoZml4YWJsZVtKUkcuUEFTU19SRVNVTFRdID09IGxlbihw
YXNzZWRfdGVzdHMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpeGFibGVbSlJHLlNL
SVBfUkVTVUxUXSA9PSBsZW4oc2tpcHBlZF90ZXN0cykpCisKKyAgICAgICAgaWYgZmFpbGVkX3Rl
c3RzOgorICAgICAgICAgICAgdGVzdHMgPSBidWlsZGluZm9bSlJHLlRFU1RTXQorICAgICAgICAg
ICAgZm9yIHRlc3RfbmFtZSwgZmFpbHVyZSBpbiBmYWlsZWRfdGVzdHMuaXRlcml0ZW1zKCk6Cisg
ICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRlc3RfbmFtZSBpbiB0ZXN0cykKKyAgICAg
ICAgICAgICAgICB0ZXN0ID0gdGVzdHNbdGVzdF9uYW1lXQorICAgICAgICAgICAgICAgIHNlbGYu
YXNzZXJ0VHJ1ZSh0ZXN0W0pSRy5SRVNVTFRTXVswXVswXSA9PSAxKQorICAgICAgICAgICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZSh0ZXN0W0pSRy5SRVNVTFRTXVswXVsxXSA9PQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBKUkcuRkFJTFVSRV9UT19DSEFSW2ZhaWx1cmVdKQorICAgICAg
ICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ZXN0W0pSRy5USU1FU11bMF1bMF0gPT0gMSkKKyAg
ICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodGVzdFtKUkcuVElNRVNdWzBdWzFdID09Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCh0ZXN0X3RpbWluZ3NbdGVzdF9uYW1l
XSkpCisKKyAgICBkZWYgdGVzdF9qc29uX2dlbmVyYXRpb24oc2VsZik6CisgICAgICAgIHNlbGYu
X3Rlc3RfanNvbl9nZW5lcmF0aW9uKFtdLCBbXSwgW10pCisgICAgICAgIHNlbGYuX3Rlc3RfanNv
bl9nZW5lcmF0aW9uKFsnQSddLCBbXSwgW10pCisgICAgICAgIHNlbGYuX3Rlc3RfanNvbl9nZW5l
cmF0aW9uKFsnQSddLCBbJ0InLCAnQyddLCBbXSkKKyAgICAgICAgc2VsZi5fdGVzdF9qc29uX2dl
bmVyYXRpb24oWydBJywgJ0InLCAnQyddLCBbJ0QnLCAnRSddLCBbJ0YnLCAnRyddKQorICAgICAg
ICBzZWxmLl90ZXN0X2pzb25fZ2VuZXJhdGlvbihbJ0EnXSwgeydCJzogdGVzdF9yZXN1bHRzLklN
QUdFLAorICAgICAgICAgICAgJ0MnOiB0ZXN0X3Jlc3VsdHMuVEVYVCwgJ0QnOiB0ZXN0X3Jlc3Vs
dHMuQ1JBU0h9LCBbJ0UnXSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVu
aXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90
ZXN0X3BhY2thZ2UvdGVzdF9yZXN1bHRzLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS90ZXN0X3BhY2thZ2UvdGVzdF9yZXN1bHRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY3NTEyM2UwMmZjMGQw
YTZlNWM0N2FjNGQwM2FjYWU5ZjFmMDg4YWQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3RfcGFja2FnZS90ZXN0X3Jlc3VsdHMucHkKQEAgLTAsMCAr
MSwzMiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisj
CisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIyBUZXN0
IHJlc3VsdHMgYW5kIG1vZGlmaWVyIGNvbnN0YW50cy4KKyhQQVNTLCBGQUlMLCBURVhULCBJTUFH
RSwgSU1BR0VfUExVU19URVhULCBUSU1FT1VULCBDUkFTSCwgU0tJUCwgV09OVEZJWCwKKyBERUZF
UiwgU0xPVywgUkVCQVNFTElORSwgTUlTU0lORywgRkxBS1ksIE5PVywgTk9ORSkgPSByYW5nZSgx
NikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58105</attachid>
            <date>2010-06-07 19:53:19 -0700</date>
            <delta_ts>2010-06-18 16:40:10 -0700</delta_ts>
            <desc>Take 2.1 (style fix)</desc>
            <filename>bug-38693-20100607195318.patch</filename>
            <type>text/plain</type>
            <size>48358</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA4NzAxYWNmZDE1NzI1OTA1Y2UzN2RkYjc0YTA0YWIxZjU4Y2FiMzQ3Li4wOWFiY2U1
YTJkNWFhOWQwODc0MzdjNTgwZWNmZjA1ZDhmYzEyNTVhIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAK
KzIwMTAtMDYtMDcgIEtpbnVrbyBZYXN1ZGEgIDxraW51a29AY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGNsZWFudXAganNvbl9y
ZXN1bHRzX2dlbmVyYXRvciBkZXBlbmRlbmNpZXMgc28gdGhhdCBub24tbGF5b3V0LXRlc3RzIGNh
biBhbHNvIHVzZSBpdCBzYWZlbHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTM4NjkzCisKKyAgICAgICAgQ3JlYXRlIGEgbmV3IHBhY2thZ2UgdGVzdF9w
YWNrYWdlIGZvciBub24gbGF5b3V0LXRlc3RzLXNwZWNpZmljCisgICAgICAgIHNjcmlwdHMgYW5k
IG1vdmUganNvbl9yZXN1bHRzX2dlbmVyYXRvci5weSBpbnRvIHRoZSBwYWNrYWdlIHRvCisgICAg
ICAgIGNsZWFuLXVwIHBhY2thZ2UgZGVwZW5kZW5jaWVzLiAoSW5zdGVhZCBwdXQgYSB3cmFwcGVy
IHNjcmlwdCBpbiB0aGUKKyAgICAgICAgbGF5b3V0X3BhY2thZ2Ugc28gdGhhdCBleGlzdGluZyBz
Y3JpcHRzIGNvbnRpbnVlIHRvIHJ1bi4pCisKKyAgICAgICAgQWxzbyBhZGQgYSB1bml0dGVzdCBm
b3IganNvbl9yZXN1bHRzX2dlbmVyYXRvci5weS4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25fbGF5b3V0X3Jlc3VsdHNfZ2VuZXJh
dG9yLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL2pzb25fcmVzdWx0c19nZW5lcmF0b3IucHk6IE1vdmVkIG1vc3Qgb2YgaXRzIGNvbnRl
bnRzIHRvIFNjcmlwdHMvd2Via2l0cHkvdGVzdF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5lcmF0
b3IucHkuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3Bh
Y2thZ2UvdGVzdF9leHBlY3RhdGlvbnMucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90
ZXN0X3BhY2thZ2UvX19pbml0X18ucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvdGVzdF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5lcmF0b3IucHk6IENvcGllZCBmcm9tIFNj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25fcmVzdWx0c19n
ZW5lcmF0b3IucHkuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90ZXN0X3BhY2thZ2UvanNv
bl9yZXN1bHRzX2dlbmVyYXRvcl91bml0dGVzdC5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS90ZXN0X3BhY2thZ2UvdGVzdF9yZXN1bHRzLnB5OiBBZGRlZC4KKwogMjAxMC0w
Ni0wNyAgTmlrb2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AcmltLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9sYXlvdXRfcmVzdWx0
c19nZW5lcmF0b3IucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS9qc29uX2xheW91dF9yZXN1bHRzX2dlbmVyYXRvci5weQppbmRleCBi
YjIxNGY3ZGFjNzFmZWY0MWUyNGExMzRkZmQyNzAzMWVkZTMyMTE2Li5mNmY2NDI4MzAzYWRmNTE2
NzhlY2NjNGFkZTAxMjc5MDQ0NWU4YTg1IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX2xheW91dF9yZXN1bHRz
X2dlbmVyYXRvci5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX2xheW91dF9yZXN1bHRzX2dlbmVyYXRvci5weQpAQCAt
MzAsOSArMzAsOSBAQAogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBvcwogCi1mcm9tIHdlYmtpdHB5
LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQganNvbl9yZXN1bHRzX2dlbmVyYXRv
cgogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3Rf
ZXhwZWN0YXRpb25zCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBp
bXBvcnQgdGVzdF9mYWlsdXJlcworZnJvbSB3ZWJraXRweS50ZXN0X3BhY2thZ2UgaW1wb3J0IGpz
b25fcmVzdWx0c19nZW5lcmF0b3IKIGltcG9ydCB3ZWJraXRweS50aGlyZHBhcnR5LnNpbXBsZWpz
b24gYXMgc2ltcGxlanNvbgogCiBjbGFzcyBKU09OTGF5b3V0UmVzdWx0c0dlbmVyYXRvcihqc29u
X3Jlc3VsdHNfZ2VuZXJhdG9yLkpTT05SZXN1bHRzR2VuZXJhdG9yKToKZGlmZiAtLWdpdCBhL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pz
b25fcmVzdWx0c19nZW5lcmF0b3IucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5CmluZGV4
IDFjZjFiOTU4ZGQyNjg5OGQyMjEwYjdmNzQyMjNhZTNlNDM4NTE3MzcuLjVjMGZlYjEyNDVlZTk2
NDFjYWU0ODVhZmViMTcwNzM2YmNkODIxNjcgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5l
cmF0b3IucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvci5weQpAQCAtMjksMzk0ICsyOSwy
MCBAQAogCiBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHdpdGhfc3RhdGVtZW50CiAKLWltcG9ydCBj
b2RlY3MKLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgb3MKLWltcG9ydCBzdWJwcm9jZXNzCi1pbXBv
cnQgc3lzCi1pbXBvcnQgdGltZQotaW1wb3J0IHVybGxpYjIKLWltcG9ydCB4bWwuZG9tLm1pbmlk
b20KK2Zyb20gd2Via2l0cHkudGVzdF9wYWNrYWdlIGltcG9ydCBqc29uX3Jlc3VsdHNfZ2VuZXJh
dG9yCiAKLWZyb20gd2Via2l0cHkuY29tbW9uLmNoZWNrb3V0IGltcG9ydCBzY20KLWZyb20gd2Vi
a2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0IFNjcmlwdEVycm9yCi1mcm9tIHdl
YmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9leHBlY3RhdGlv
bnMKLWltcG9ydCB3ZWJraXRweS50aGlyZHBhcnR5LnNpbXBsZWpzb24gYXMgc2ltcGxlanNvbgor
IyBKU09OUmVzdWx0c0dlbmVyYXRvciBpcyBtb3ZlZCBpbnRvIHdlYmtpdHB5LnRlc3RfcGFja2Fn
ZS4KKyMgVGhpcyBtb2R1bGUgaXMgbGVmdCBhcyBhIHNpbXBsZSB3cmFwcGVyIGZvciBub3QgYnJl
YWtpbmcgdGhpbmdzCisjIGR1cmluZyB0aGUgdHJhbnNpdGlvbi4KIAotX2xvZyA9IGxvZ2dpbmcu
Z2V0TG9nZ2VyKCJ3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UuIgotICAgICAg
ICAgICAgICAgICAgICAgICAgICJqc29uX3Jlc3VsdHNfZ2VuZXJhdG9yIikKLQotCi1jbGFzcyBK
U09OUmVzdWx0c0dlbmVyYXRvcihvYmplY3QpOgotICAgICIiIkEgSlNPTiByZXN1bHRzIGdlbmVy
YXRvciBmb3IgZ2VuZXJpYyB0ZXN0cy4iIiIKLQotICAgIE1BWF9OVU1CRVJfT0ZfQlVJTERfUkVT
VUxUU19UT19MT0cgPSA3NTAKLSAgICAjIE1pbiB0aW1lIChzZWNvbmRzKSB0aGF0IHdpbGwgYmUg
YWRkZWQgdG8gdGhlIEpTT04uCi0gICAgTUlOX1RJTUUgPSAxCi0gICAgSlNPTl9QUkVGSVggPSAi
QUREX1JFU1VMVFMoIgotICAgIEpTT05fU1VGRklYID0gIik7IgotICAgIFBBU1NfUkVTVUxUID0g
IlAiCi0gICAgU0tJUF9SRVNVTFQgPSAiWCIKLSAgICBOT19EQVRBX1JFU1VMVCA9ICJOIgotICAg
IFZFUlNJT04gPSAzCi0gICAgVkVSU0lPTl9LRVkgPSAidmVyc2lvbiIKLSAgICBSRVNVTFRTID0g
InJlc3VsdHMiCi0gICAgVElNRVMgPSAidGltZXMiCi0gICAgQlVJTERfTlVNQkVSUyA9ICJidWls
ZE51bWJlcnMiCi0gICAgVElNRSA9ICJzZWNvbmRzU2luY2VFcG9jaCIKLSAgICBURVNUUyA9ICJ0
ZXN0cyIKLQotICAgIEZJWEFCTEVfQ09VTlQgPSAiZml4YWJsZUNvdW50IgotICAgIEZJWEFCTEUg
PSAiZml4YWJsZUNvdW50cyIKLSAgICBBTExfRklYQUJMRV9DT1VOVCA9ICJhbGxGaXhhYmxlQ291
bnQiCi0KLSAgICAjIE5vdGUgdGhhdCB3ZSBvbWl0IHRlc3RfZXhwZWN0YXRpb25zLkZBSUwgZnJv
bSB0aGlzIGxpc3QgYmVjYXVzZQotICAgICMgaXQgc2hvdWxkIG5ldmVyIHNob3cgdXAgKGl0J3Mg
YSBsZWdhY3kgaW5wdXQgZXhwZWN0YXRpb24sIG5ldmVyCi0gICAgIyBhbiBvdXRwdXQgZXhwZWN0
YXRpb24pLgotICAgIEZBSUxVUkVfVE9fQ0hBUiA9IHt0ZXN0X2V4cGVjdGF0aW9ucy5DUkFTSDog
IkMiLAotICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucy5USU1FT1VUOiAi
VCIsCi0gICAgICAgICAgICAgICAgICAgICAgIHRlc3RfZXhwZWN0YXRpb25zLklNQUdFOiAiSSIs
Ci0gICAgICAgICAgICAgICAgICAgICAgIHRlc3RfZXhwZWN0YXRpb25zLlRFWFQ6ICJGIiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgdGVzdF9leHBlY3RhdGlvbnMuTUlTU0lORzogIk8iLAotICAg
ICAgICAgICAgICAgICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucy5JTUFHRV9QTFVTX1RFWFQ6ICJa
In0KLSAgICBGQUlMVVJFX0NIQVJTID0gRkFJTFVSRV9UT19DSEFSLnZhbHVlcygpCi0KLSAgICBS
RVNVTFRTX0ZJTEVOQU1FID0gInJlc3VsdHMuanNvbiIKIAorY2xhc3MgSlNPTlJlc3VsdHNHZW5l
cmF0b3IoanNvbl9yZXN1bHRzX2dlbmVyYXRvci5KU09OUmVzdWx0c0dlbmVyYXRvcik6CiAgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIGJ1aWxkZXJfbmFtZSwgYnVpbGRfbmFtZSwgYnVpbGRf
bnVtYmVyLAogICAgICAgICByZXN1bHRzX2ZpbGVfYmFzZV9wYXRoLCBidWlsZGVyX2Jhc2VfdXJs
LAogICAgICAgICB0ZXN0X3RpbWluZ3MsIGZhaWx1cmVzLCBwYXNzZWRfdGVzdHMsIHNraXBwZWRf
dGVzdHMsIGFsbF90ZXN0cyk6Ci0gICAgICAgICIiIk1vZGlmaWVzIHRoZSByZXN1bHRzLmpzb24g
ZmlsZS4gR3JhYnMgaXQgb2ZmIHRoZSBhcmNoaXZlIGRpcmVjdG9yeQotICAgICAgICBpZiBpdCBp
cyBub3QgZm91bmQgbG9jYWxseS4KLQotICAgICAgICBBcmdzCi0gICAgICAgICAgYnVpbGRlcl9u
YW1lOiB0aGUgYnVpbGRlciBuYW1lIChlLmcuIFdlYmtpdCkuCi0gICAgICAgICAgYnVpbGRfbmFt
ZTogdGhlIGJ1aWxkIG5hbWUgKGUuZy4gd2Via2l0LXJlbCkuCi0gICAgICAgICAgYnVpbGRfbnVt
YmVyOiB0aGUgYnVpbGQgbnVtYmVyLgotICAgICAgICAgIHJlc3VsdHNfZmlsZV9iYXNlX3BhdGg6
IEFic29sdXRlIHBhdGggdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZQotICAgICAgICAg
ICAgICByZXN1bHRzIGpzb24gZmlsZS4KLSAgICAgICAgICBidWlsZGVyX2Jhc2VfdXJsOiB0aGUg
VVJMIHdoZXJlIHdlIGhhdmUgdGhlIGFyY2hpdmVkIHRlc3QgcmVzdWx0cy4KLSAgICAgICAgICB0
ZXN0X3RpbWluZ3M6IE1hcCBvZiB0ZXN0IG5hbWUgdG8gYSB0ZXN0X3J1bi10aW1lLgotICAgICAg
ICAgIGZhaWx1cmVzOiBNYXAgb2YgdGVzdCBuYW1lIHRvIGEgZmFpbHVyZSB0eXBlIChvZiB0ZXN0
X2V4cGVjdGF0aW9ucykuCi0gICAgICAgICAgcGFzc2VkX3Rlc3RzOiBBIHNldCBjb250YWluaW5n
IGFsbCB0aGUgcGFzc2VkIHRlc3RzLgotICAgICAgICAgIHNraXBwZWRfdGVzdHM6IEEgc2V0IGNv
bnRhaW5pbmcgYWxsIHRoZSBza2lwcGVkIHRlc3RzLgotICAgICAgICAgIGFsbF90ZXN0czogTGlz
dCBvZiBhbGwgdGhlIHRlc3RzIHRoYXQgd2VyZSBydW4uICBUaGlzIHNob3VsZCBub3QKLSAgICAg
ICAgICAgICAgaW5jbHVkZSBza2lwcGVkIHRlc3RzLgotICAgICAgICAiIiIKLSAgICAgICAgc2Vs
Zi5fYnVpbGRlcl9uYW1lID0gYnVpbGRlcl9uYW1lCi0gICAgICAgIHNlbGYuX2J1aWxkX25hbWUg
PSBidWlsZF9uYW1lCi0gICAgICAgIHNlbGYuX2J1aWxkX251bWJlciA9IGJ1aWxkX251bWJlcgot
ICAgICAgICBzZWxmLl9idWlsZGVyX2Jhc2VfdXJsID0gYnVpbGRlcl9iYXNlX3VybAotICAgICAg
ICBzZWxmLl9yZXN1bHRzX2ZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihyZXN1bHRzX2ZpbGVfYmFz
ZV9wYXRoLAotICAgICAgICAgICAgc2VsZi5SRVNVTFRTX0ZJTEVOQU1FKQotICAgICAgICBzZWxm
Ll90ZXN0X3RpbWluZ3MgPSB0ZXN0X3RpbWluZ3MKLSAgICAgICAgc2VsZi5fZmFpbHVyZXMgPSBm
YWlsdXJlcwotICAgICAgICBzZWxmLl9wYXNzZWRfdGVzdHMgPSBwYXNzZWRfdGVzdHMKLSAgICAg
ICAgc2VsZi5fc2tpcHBlZF90ZXN0cyA9IHNraXBwZWRfdGVzdHMKLSAgICAgICAgc2VsZi5fYWxs
X3Rlc3RzID0gYWxsX3Rlc3RzCi0gICAgICAgIHNlbGYuX3N2bl9yZXBvc2l0b3JpZXMgPSBwb3J0
LnRlc3RfcmVwb3NpdG9yeV9wYXRocygpCi0KLSAgICAgICAgc2VsZi5fZ2VuZXJhdGVfanNvbl9v
dXRwdXQoKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9qc29uX291dHB1dChzZWxmKToKLSAgICAgICAg
IiIiR2VuZXJhdGVzIHRoZSBKU09OIG91dHB1dCBmaWxlLiIiIgotICAgICAgICBqc29uID0gc2Vs
Zi5fZ2V0X2pzb24oKQotICAgICAgICBpZiBqc29uOgotICAgICAgICAgICAgcmVzdWx0c19maWxl
ID0gY29kZWNzLm9wZW4oc2VsZi5fcmVzdWx0c19maWxlX3BhdGgsICJ3IiwgInV0Zi04IikKLSAg
ICAgICAgICAgIHJlc3VsdHNfZmlsZS53cml0ZShqc29uKQotICAgICAgICAgICAgcmVzdWx0c19m
aWxlLmNsb3NlKCkKLQotICAgICMgRklYTUU6IENhbGxlcnMgc2hvdWxkIHVzZSBzY20ucHkgaW5z
dGVhZC4KLSAgICBkZWYgX2dldF9zdm5fcmV2aXNpb24oc2VsZiwgaW5fZGlyZWN0b3J5KToKLSAg
ICAgICAgIiIiUmV0dXJucyB0aGUgc3ZuIHJldmlzaW9uIGZvciB0aGUgZ2l2ZW4gZGlyZWN0b3J5
LgotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgaW5fZGlyZWN0b3J5OiBUaGUgZGlyZWN0b3J5
IHdoZXJlIHN2biBpcyB0byBiZSBydW4uCi0gICAgICAgICIiIgotCi0gICAgICAgIGlmIG9zLnBh
dGguZXhpc3RzKG9zLnBhdGguam9pbihpbl9kaXJlY3RvcnksICcuc3ZuJykpOgotICAgICAgICAg
ICAgIyBOb3RlOiBOb3QgdGhyZWFkIHNhZmU6IGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUy
MzIwCi0gICAgICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLlBvcGVuKFsic3ZuIiwgImluZm8i
LCAiLS14bWwiXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3dkPWlu
X2RpcmVjdG9yeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hlbGw9
KHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuY29tbXVuaWNhdGUoKVswXQotICAgICAg
ICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGRvbSA9IHhtbC5kb20ubWluaWRvbS5wYXJzZVN0
cmluZyhvdXRwdXQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGRvbS5nZXRFbGVtZW50c0J5VGFn
TmFtZSgnZW50cnknKVswXS5nZXRBdHRyaWJ1dGUoCi0gICAgICAgICAgICAgICAgICAgICdyZXZp
c2lvbicpCi0gICAgICAgICAgICBleGNlcHQgeG1sLnBhcnNlcnMuZXhwYXQuRXhwYXRFcnJvcjoK
LSAgICAgICAgICAgICAgICByZXR1cm4gIiIKLSAgICAgICAgcmV0dXJuICIiCi0KLSAgICBkZWYg
X2dldF9hcmNoaXZlZF9qc29uX3Jlc3VsdHMoc2VsZik6Ci0gICAgICAgICIiIlJlYWRzIG9sZCBy
ZXN1bHRzIEpTT04gZmlsZSBpZiBpdCBleGlzdHMuCi0gICAgICAgIFJldHVybnMgKGFyY2hpdmVk
X3Jlc3VsdHMsIGVycm9yKSB0dXBsZSB3aGVyZSBlcnJvciBpcyBOb25lIGlmIHJlc3VsdHMKLSAg
ICAgICAgd2VyZSBzdWNjZXNzZnVsbHkgcmVhZC4KLSAgICAgICAgIiIiCi0gICAgICAgIHJlc3Vs
dHNfanNvbiA9IHt9Ci0gICAgICAgIG9sZF9yZXN1bHRzID0gTm9uZQotICAgICAgICBlcnJvciA9
IE5vbmUKLQotICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLl9yZXN1bHRzX2ZpbGVfcGF0
aCk6Ci0gICAgICAgICAgICB3aXRoIGNvZGVjcy5vcGVuKHNlbGYuX3Jlc3VsdHNfZmlsZV9wYXRo
LCAiciIsICJ1dGYtOCIpIGFzIGZpbGU6Ci0gICAgICAgICAgICAgICAgb2xkX3Jlc3VsdHMgPSBm
aWxlLnJlYWQoKQotICAgICAgICBlbGlmIHNlbGYuX2J1aWxkZXJfYmFzZV91cmw6Ci0gICAgICAg
ICAgICAjIENoZWNrIGlmIHdlIGhhdmUgdGhlIGFyY2hpdmVkIEpTT04gZmlsZSBvbiB0aGUgYnVp
bGRib3Qgc2VydmVyLgotICAgICAgICAgICAgcmVzdWx0c19maWxlX3VybCA9IChzZWxmLl9idWls
ZGVyX2Jhc2VfdXJsICsKLSAgICAgICAgICAgICAgICBzZWxmLl9idWlsZF9uYW1lICsgIi8iICsg
c2VsZi5SRVNVTFRTX0ZJTEVOQU1FKQotICAgICAgICAgICAgX2xvZy5lcnJvcigiTG9jYWwgcmVz
dWx0cy5qc29uIGZpbGUgZG9lcyBub3QgZXhpc3QuIEdyYWJiaW5nICIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIml0IG9mZiB0aGUgYXJjaGl2ZSBhdCAiICsgcmVzdWx0c19maWxlX3VybCkKLQot
ICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHJlc3VsdHNfZmlsZSA9IHVybGxpYjIu
dXJsb3BlbihyZXN1bHRzX2ZpbGVfdXJsKQotICAgICAgICAgICAgICAgIGluZm8gPSByZXN1bHRz
X2ZpbGUuaW5mbygpCi0gICAgICAgICAgICAgICAgb2xkX3Jlc3VsdHMgPSByZXN1bHRzX2ZpbGUu
cmVhZCgpCi0gICAgICAgICAgICBleGNlcHQgdXJsbGliMi5IVFRQRXJyb3IsIGh0dHBfZXJyb3I6
Ci0gICAgICAgICAgICAgICAgIyBBIG5vbi00eHggc3RhdHVzIGNvZGUgbWVhbnMgdGhlIGJvdCBp
cyBob3NlZCBmb3Igc29tZSByZWFzb24KLSAgICAgICAgICAgICAgICAjIGFuZCB3ZSBjYW4ndCBn
cmFiIHRoZSByZXN1bHRzLmpzb24gZmlsZSBvZmYgb2YgaXQuCi0gICAgICAgICAgICAgICAgaWYg
KGh0dHBfZXJyb3IuY29kZSA8IDQwMCBhbmQgaHR0cF9lcnJvci5jb2RlID49IDUwMCk6Ci0gICAg
ICAgICAgICAgICAgICAgIGVycm9yID0gaHR0cF9lcnJvcgotICAgICAgICAgICAgZXhjZXB0IHVy
bGxpYjIuVVJMRXJyb3IsIHVybF9lcnJvcjoKLSAgICAgICAgICAgICAgICBlcnJvciA9IHVybF9l
cnJvcgotCi0gICAgICAgIGlmIG9sZF9yZXN1bHRzOgotICAgICAgICAgICAgIyBTdHJpcCB0aGUg
cHJlZml4IGFuZCBzdWZmaXggc28gd2UgY2FuIGdldCB0aGUgYWN0dWFsIEpTT04gb2JqZWN0Lgot
ICAgICAgICAgICAgb2xkX3Jlc3VsdHMgPSBvbGRfcmVzdWx0c1tsZW4oc2VsZi5KU09OX1BSRUZJ
WCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbihvbGRfcmVzdWx0
cykgLSBsZW4oc2VsZi5KU09OX1NVRkZJWCldCi0KLSAgICAgICAgICAgIHRyeToKLSAgICAgICAg
ICAgICAgICByZXN1bHRzX2pzb24gPSBzaW1wbGVqc29uLmxvYWRzKG9sZF9yZXN1bHRzKQotICAg
ICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoInJlc3VsdHMuanNv
biB3YXMgbm90IHZhbGlkIEpTT04uIENsb2JiZXJpbmcuIikKLSAgICAgICAgICAgICAgICAjIFRo
ZSBKU09OIGZpbGUgaXMgbm90IHZhbGlkIEpTT04uIEp1c3QgY2xvYmJlciB0aGUgcmVzdWx0cy4K
LSAgICAgICAgICAgICAgICByZXN1bHRzX2pzb24gPSB7fQotICAgICAgICBlbHNlOgotICAgICAg
ICAgICAgX2xvZy5kZWJ1ZygnT2xkIEpTT04gcmVzdWx0cyBkbyBub3QgZXhpc3QuIFN0YXJ0aW5n
IGZyZXNoLicpCi0gICAgICAgICAgICByZXN1bHRzX2pzb24gPSB7fQotCi0gICAgICAgIHJldHVy
biByZXN1bHRzX2pzb24sIGVycm9yCi0KLSAgICBkZWYgX2dldF9qc29uKHNlbGYpOgotICAgICAg
ICAiIiJHZXRzIHRoZSByZXN1bHRzIGZvciB0aGUgcmVzdWx0cy5qc29uIGZpbGUuIiIiCi0gICAg
ICAgIHJlc3VsdHNfanNvbiwgZXJyb3IgPSBzZWxmLl9nZXRfYXJjaGl2ZWRfanNvbl9yZXN1bHRz
KCkKLSAgICAgICAgaWYgZXJyb3I6Ci0gICAgICAgICAgICAjIElmIHRoZXJlIHdhcyBhbiBlcnJv
ciBkb24ndCB3cml0ZSBhIHJlc3VsdHMuanNvbgotICAgICAgICAgICAgIyBmaWxlIGF0IGFsbCBh
cyBpdCB3b3VsZCBsb3NlIGFsbCB0aGUgaW5mb3JtYXRpb24gb24gdGhlIGJvdC4KLSAgICAgICAg
ICAgIF9sb2cuZXJyb3IoIkFyY2hpdmUgZGlyZWN0b3J5IGlzIGluYWNjZXNzaWJsZS4gTm90IG1v
ZGlmeWluZyAiCi0gICAgICAgICAgICAgICAgICAgICAgICJvciBjbG9iYmVyaW5nIHRoZSByZXN1
bHRzLmpzb24gZmlsZTogIiArIHN0cihlcnJvcikpCi0gICAgICAgICAgICByZXR1cm4gTm9uZQot
Ci0gICAgICAgIGJ1aWxkZXJfbmFtZSA9IHNlbGYuX2J1aWxkZXJfbmFtZQotICAgICAgICBpZiBy
ZXN1bHRzX2pzb24gYW5kIGJ1aWxkZXJfbmFtZSBub3QgaW4gcmVzdWx0c19qc29uOgotICAgICAg
ICAgICAgX2xvZy5kZWJ1ZygiQnVpbGRlciBuYW1lICglcykgaXMgbm90IGluIHRoZSByZXN1bHRz
Lmpzb24gZmlsZS4iCi0gICAgICAgICAgICAgICAgICAgICAgICUgYnVpbGRlcl9uYW1lKQotCi0g
ICAgICAgIHNlbGYuX2NvbnZlcnRfanNvbl90b19jdXJyZW50X3ZlcnNpb24ocmVzdWx0c19qc29u
KQotCi0gICAgICAgIGlmIGJ1aWxkZXJfbmFtZSBub3QgaW4gcmVzdWx0c19qc29uOgotICAgICAg
ICAgICAgcmVzdWx0c19qc29uW2J1aWxkZXJfbmFtZV0gPSAoCi0gICAgICAgICAgICAgICAgc2Vs
Zi5fY3JlYXRlX3Jlc3VsdHNfZm9yX2J1aWxkZXJfanNvbigpKQotCi0gICAgICAgIHJlc3VsdHNf
Zm9yX2J1aWxkZXIgPSByZXN1bHRzX2pzb25bYnVpbGRlcl9uYW1lXQotCi0gICAgICAgIHNlbGYu
X2luc2VydF9nZW5lcmljX21ldGFkYXRhKHJlc3VsdHNfZm9yX2J1aWxkZXIpCi0KLSAgICAgICAg
c2VsZi5faW5zZXJ0X2ZhaWx1cmVfc3VtbWFyaWVzKHJlc3VsdHNfZm9yX2J1aWxkZXIpCi0KLSAg
ICAgICAgIyBVcGRhdGUgdGhlIGFsbCBmYWlsaW5nIHRlc3RzIHdpdGggcmVzdWx0IHR5cGUgYW5k
IHRpbWUuCi0gICAgICAgIHRlc3RzID0gcmVzdWx0c19mb3JfYnVpbGRlcltzZWxmLlRFU1RTXQot
ICAgICAgICBhbGxfZmFpbGluZ190ZXN0cyA9IHNldChzZWxmLl9mYWlsdXJlcy5pdGVya2V5cygp
KQotICAgICAgICBhbGxfZmFpbGluZ190ZXN0cy51cGRhdGUodGVzdHMuaXRlcmtleXMoKSkKLSAg
ICAgICAgZm9yIHRlc3QgaW4gYWxsX2ZhaWxpbmdfdGVzdHM6Ci0gICAgICAgICAgICBzZWxmLl9p
bnNlcnRfdGVzdF90aW1lX2FuZF9yZXN1bHQodGVzdCwgdGVzdHMpCi0KLSAgICAgICAgIyBTcGVj
aWZ5IHNlcGFyYXRvcnMgaW4gb3JkZXIgdG8gZ2V0IGNvbXBhY3QgZW5jb2RpbmcuCi0gICAgICAg
IHJlc3VsdHNfc3RyID0gc2ltcGxlanNvbi5kdW1wcyhyZXN1bHRzX2pzb24sIHNlcGFyYXRvcnM9
KCcsJywgJzonKSkKLSAgICAgICAgcmV0dXJuIHNlbGYuSlNPTl9QUkVGSVggKyByZXN1bHRzX3N0
ciArIHNlbGYuSlNPTl9TVUZGSVgKLQotICAgIGRlZiBfaW5zZXJ0X2ZhaWx1cmVfc3VtbWFyaWVz
KHNlbGYsIHJlc3VsdHNfZm9yX2J1aWxkZXIpOgotICAgICAgICAiIiJJbnNlcnRzIGFnZ3JlZ2F0
ZSBwYXNzL2ZhaWx1cmUgc3RhdGlzdGljcyBpbnRvIHRoZSBKU09OLgotICAgICAgICBUaGlzIG1l
dGhvZCByZWFkcyBzZWxmLl9za2lwcGVkX3Rlc3RzLCBzZWxmLl9wYXNzZWRfdGVzdHMgYW5kCi0g
ICAgICAgIHNlbGYuX2ZhaWx1cmVzIGFuZCBpbnNlcnRzIEZJWEFCTEUsIEZJWEFCTEVfQ09VTlQg
YW5kIEFMTF9GSVhBQkxFX0NPVU5UCi0gICAgICAgIGVudHJpZXMuCi0KLSAgICAgICAgQXJnczoK
LSAgICAgICAgICByZXN1bHRzX2Zvcl9idWlsZGVyOiBEaWN0aW9uYXJ5IGNvbnRhaW5pbmcgdGhl
IHRlc3QgcmVzdWx0cyBmb3IgYQotICAgICAgICAgICAgICBzaW5nbGUgYnVpbGRlci4KLSAgICAg
ICAgIiIiCi0gICAgICAgICMgSW5zZXJ0IHRoZSBudW1iZXIgb2YgdGVzdHMgdGhhdCBmYWlsZWQu
Ci0gICAgICAgIHNlbGYuX2luc2VydF9pdGVtX2ludG9fcmF3X2xpc3QocmVzdWx0c19mb3JfYnVp
bGRlciwKLSAgICAgICAgICAgIGxlbihzZXQoc2VsZi5fZmFpbHVyZXMua2V5cygpKSB8IHNlbGYu
X3NraXBwZWRfdGVzdHMpLAotICAgICAgICAgICAgc2VsZi5GSVhBQkxFX0NPVU5UKQotCi0gICAg
ICAgICMgQ3JlYXRlIGEgcGFzcy9za2lwL2ZhaWx1cmUgc3VtbWFyeSBkaWN0aW9uYXJ5LgotICAg
ICAgICBlbnRyeSA9IHt9Ci0gICAgICAgIGVudHJ5W3NlbGYuU0tJUF9SRVNVTFRdID0gbGVuKHNl
bGYuX3NraXBwZWRfdGVzdHMpCi0gICAgICAgIGVudHJ5W3NlbGYuUEFTU19SRVNVTFRdID0gbGVu
KHNlbGYuX3Bhc3NlZF90ZXN0cykKLSAgICAgICAgZ2V0ID0gZW50cnkuZ2V0Ci0gICAgICAgIGZv
ciBmYWlsdXJlX3R5cGUgaW4gc2VsZi5fZmFpbHVyZXMudmFsdWVzKCk6Ci0gICAgICAgICAgICBm
YWlsdXJlX2NoYXIgPSBzZWxmLkZBSUxVUkVfVE9fQ0hBUltmYWlsdXJlX3R5cGVdCi0gICAgICAg
ICAgICBlbnRyeVtmYWlsdXJlX2NoYXJdID0gZ2V0KGZhaWx1cmVfY2hhciwgMCkgKyAxCi0KLSAg
ICAgICAgIyBJbnNlcnQgdGhlIHBhc3Mvc2tpcC9mYWlsdXJlIHN1bW1hcnkgZGljdGlvbmFyeS4K
LSAgICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1faW50b19yYXdfbGlzdChyZXN1bHRzX2Zvcl9idWls
ZGVyLCBlbnRyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxm
LkZJWEFCTEUpCi0KLSAgICAgICAgIyBJbnNlcnQgdGhlIG51bWJlciBvZiBhbGwgdGhlIHRlc3Rz
IHRoYXQgYXJlIHN1cHBvc2VkIHRvIHBhc3MuCi0gICAgICAgIHNlbGYuX2luc2VydF9pdGVtX2lu
dG9fcmF3X2xpc3QocmVzdWx0c19mb3JfYnVpbGRlciwKLSAgICAgICAgICAgIGxlbihzZWxmLl9z
a2lwcGVkX3Rlc3RzIHwgc2VsZi5fYWxsX3Rlc3RzKSwKLSAgICAgICAgICAgIHNlbGYuQUxMX0ZJ
WEFCTEVfQ09VTlQpCi0KLSAgICBkZWYgX2luc2VydF9pdGVtX2ludG9fcmF3X2xpc3Qoc2VsZiwg
cmVzdWx0c19mb3JfYnVpbGRlciwgaXRlbSwga2V5KToKLSAgICAgICAgIiIiSW5zZXJ0cyB0aGUg
aXRlbSBpbnRvIHRoZSBsaXN0IHdpdGggdGhlIGdpdmVuIGtleSBpbiB0aGUgcmVzdWx0cyBmb3IK
LSAgICAgICAgdGhpcyBidWlsZGVyLiBDcmVhdGVzIHRoZSBsaXN0IGlmIG5vIHN1Y2ggbGlzdCBl
eGlzdHMuCi0KLSAgICAgICAgQXJnczoKLSAgICAgICAgICByZXN1bHRzX2Zvcl9idWlsZGVyOiBE
aWN0aW9uYXJ5IGNvbnRhaW5pbmcgdGhlIHRlc3QgcmVzdWx0cyBmb3IgYQotICAgICAgICAgICAg
ICBzaW5nbGUgYnVpbGRlci4KLSAgICAgICAgICBpdGVtOiBOdW1iZXIgb3Igc3RyaW5nIHRvIGlu
c2VydCBpbnRvIHRoZSBsaXN0LgotICAgICAgICAgIGtleTogS2V5IGluIHJlc3VsdHNfZm9yX2J1
aWxkZXIgZm9yIHRoZSBsaXN0IHRvIGluc2VydCBpbnRvLgotICAgICAgICAiIiIKLSAgICAgICAg
aWYga2V5IGluIHJlc3VsdHNfZm9yX2J1aWxkZXI6Ci0gICAgICAgICAgICByYXdfbGlzdCA9IHJl
c3VsdHNfZm9yX2J1aWxkZXJba2V5XQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmF3X2xp
c3QgPSBbXQotCi0gICAgICAgIHJhd19saXN0Lmluc2VydCgwLCBpdGVtKQotICAgICAgICByYXdf
bGlzdCA9IHJhd19saXN0WzpzZWxmLk1BWF9OVU1CRVJfT0ZfQlVJTERfUkVTVUxUU19UT19MT0dd
Ci0gICAgICAgIHJlc3VsdHNfZm9yX2J1aWxkZXJba2V5XSA9IHJhd19saXN0Ci0KLSAgICBkZWYg
X2luc2VydF9pdGVtX3J1bl9sZW5ndGhfZW5jb2RlZChzZWxmLCBpdGVtLCBlbmNvZGVkX3Jlc3Vs
dHMpOgotICAgICAgICAiIiJJbnNlcnRzIHRoZSBpdGVtIGludG8gdGhlIHJ1bi1sZW5ndGggZW5j
b2RlZCByZXN1bHRzLgotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgaXRlbTogU3RyaW5nIG9y
IG51bWJlciB0byBpbnNlcnQuCi0gICAgICAgICAgZW5jb2RlZF9yZXN1bHRzOiBydW4tbGVuZ3Ro
IGVuY29kZWQgcmVzdWx0cy4gQW4gYXJyYXkgb2YgYXJyYXlzLCBlLmcuCi0gICAgICAgICAgICAg
IFtbMywnQSddLFsxLCdRJ11dIGVuY29kZXMgQUFBUS4KLSAgICAgICAgIiIiCi0gICAgICAgIGlm
IGxlbihlbmNvZGVkX3Jlc3VsdHMpIGFuZCBpdGVtID09IGVuY29kZWRfcmVzdWx0c1swXVsxXToK
LSAgICAgICAgICAgIG51bV9yZXN1bHRzID0gZW5jb2RlZF9yZXN1bHRzWzBdWzBdCi0gICAgICAg
ICAgICBpZiBudW1fcmVzdWx0cyA8PSBzZWxmLk1BWF9OVU1CRVJfT0ZfQlVJTERfUkVTVUxUU19U
T19MT0c6Ci0gICAgICAgICAgICAgICAgZW5jb2RlZF9yZXN1bHRzWzBdWzBdID0gbnVtX3Jlc3Vs
dHMgKyAxCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAjIFVzZSBhIGxpc3QgaW5zdGVhZCBv
ZiBhIGNsYXNzIGZvciB0aGUgcnVuLWxlbmd0aCBlbmNvZGluZyBzaW5jZQotICAgICAgICAgICAg
IyB3ZSB3YW50IHRoZSBzZXJpYWxpemVkIGZvcm0gdG8gYmUgY29uY2lzZS4KLSAgICAgICAgICAg
IGVuY29kZWRfcmVzdWx0cy5pbnNlcnQoMCwgWzEsIGl0ZW1dKQotCi0gICAgZGVmIF9pbnNlcnRf
Z2VuZXJpY19tZXRhZGF0YShzZWxmLCByZXN1bHRzX2Zvcl9idWlsZGVyKToKLSAgICAgICAgIiIi
IEluc2VydHMgZ2VuZXJpYyBtZXRhZGF0YSAoc3VjaCBhcyB2ZXJzaW9uIG51bWJlciwgY3VycmVu
dCB0aW1lIGV0YykKLSAgICAgICAgaW50byB0aGUgSlNPTi4KLQotICAgICAgICBBcmdzOgotICAg
ICAgICAgIHJlc3VsdHNfZm9yX2J1aWxkZXI6IERpY3Rpb25hcnkgY29udGFpbmluZyB0aGUgdGVz
dCByZXN1bHRzIGZvcgotICAgICAgICAgICAgICBhIHNpbmdsZSBidWlsZGVyLgotICAgICAgICAi
IiIKLSAgICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1faW50b19yYXdfbGlzdChyZXN1bHRzX2Zvcl9i
dWlsZGVyLAotICAgICAgICAgICAgc2VsZi5fYnVpbGRfbnVtYmVyLCBzZWxmLkJVSUxEX05VTUJF
UlMpCi0KLSAgICAgICAgIyBJbmNsdWRlIFNWTiByZXZpc2lvbnMgZm9yIHRoZSBnaXZlbiByZXBv
c2l0b3JpZXMuCi0gICAgICAgIGZvciAobmFtZSwgcGF0aCkgaW4gc2VsZi5fc3ZuX3JlcG9zaXRv
cmllczoKLSAgICAgICAgICAgIHNlbGYuX2luc2VydF9pdGVtX2ludG9fcmF3X2xpc3QocmVzdWx0
c19mb3JfYnVpbGRlciwKLSAgICAgICAgICAgICAgICBzZWxmLl9nZXRfc3ZuX3JldmlzaW9uKHBh
dGgpLAotICAgICAgICAgICAgICAgIG5hbWUgKyAnUmV2aXNpb24nKQotCi0gICAgICAgIHNlbGYu
X2luc2VydF9pdGVtX2ludG9fcmF3X2xpc3QocmVzdWx0c19mb3JfYnVpbGRlciwKLSAgICAgICAg
ICAgIGludCh0aW1lLnRpbWUoKSksCi0gICAgICAgICAgICBzZWxmLlRJTUUpCi0KLSAgICBkZWYg
X2luc2VydF90ZXN0X3RpbWVfYW5kX3Jlc3VsdChzZWxmLCB0ZXN0X25hbWUsIHRlc3RzKToKLSAg
ICAgICAgIiIiIEluc2VydCBhIHRlc3QgaXRlbSB3aXRoIGl0cyByZXN1bHRzIHRvIHRoZSBnaXZl
biB0ZXN0cyBkaWN0aW9uYXJ5LgotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgdGVzdHM6IERp
Y3Rpb25hcnkgY29udGFpbmluZyB0ZXN0IHJlc3VsdCBlbnRyaWVzLgotICAgICAgICAiIiIKLQot
ICAgICAgICByZXN1bHQgPSBKU09OUmVzdWx0c0dlbmVyYXRvci5QQVNTX1JFU1VMVAotICAgICAg
ICB0aW1lID0gMAotCi0gICAgICAgIGlmIHRlc3RfbmFtZSBub3QgaW4gc2VsZi5fYWxsX3Rlc3Rz
OgotICAgICAgICAgICAgcmVzdWx0ID0gSlNPTlJlc3VsdHNHZW5lcmF0b3IuTk9fREFUQV9SRVNV
TFQKLQotICAgICAgICBpZiB0ZXN0X25hbWUgaW4gc2VsZi5fZmFpbHVyZXM6Ci0gICAgICAgICAg
ICByZXN1bHQgPSBzZWxmLkZBSUxVUkVfVE9fQ0hBUltzZWxmLl9mYWlsdXJlc1t0ZXN0X25hbWVd
XQotCi0gICAgICAgIGlmIHRlc3RfbmFtZSBpbiBzZWxmLl90ZXN0X3RpbWluZ3M6Ci0gICAgICAg
ICAgICAjIEZsb29yIGZvciBub3cgdG8gZ2V0IHRpbWUgaW4gc2Vjb25kcy4KLSAgICAgICAgICAg
IHRpbWUgPSBpbnQoc2VsZi5fdGVzdF90aW1pbmdzW3Rlc3RfbmFtZV0pCi0KLSAgICAgICAgaWYg
dGVzdF9uYW1lIG5vdCBpbiB0ZXN0czoKLSAgICAgICAgICAgIHRlc3RzW3Rlc3RfbmFtZV0gPSBz
ZWxmLl9jcmVhdGVfcmVzdWx0c19hbmRfdGltZXNfanNvbigpCi0KLSAgICAgICAgdGhpc1Rlc3Qg
PSB0ZXN0c1t0ZXN0X25hbWVdCi0gICAgICAgIHNlbGYuX2luc2VydF9pdGVtX3J1bl9sZW5ndGhf
ZW5jb2RlZChyZXN1bHQsIHRoaXNUZXN0W3NlbGYuUkVTVUxUU10pCi0gICAgICAgIHNlbGYuX2lu
c2VydF9pdGVtX3J1bl9sZW5ndGhfZW5jb2RlZCh0aW1lLCB0aGlzVGVzdFtzZWxmLlRJTUVTXSkK
LSAgICAgICAgc2VsZi5fbm9ybWFsaXplX3Jlc3VsdHNfanNvbih0aGlzVGVzdCwgdGVzdF9uYW1l
LCB0ZXN0cykKLQotICAgIGRlZiBfY29udmVydF9qc29uX3RvX2N1cnJlbnRfdmVyc2lvbihzZWxm
LCByZXN1bHRzX2pzb24pOgotICAgICAgICAiIiJJZiB0aGUgSlNPTiBkb2VzIG5vdCBtYXRjaCB0
aGUgY3VycmVudCB2ZXJzaW9uLCBjb252ZXJ0cyBpdCB0byB0aGUKLSAgICAgICAgY3VycmVudCB2
ZXJzaW9uIGFuZCBhZGRzIGluIHRoZSBuZXcgdmVyc2lvbiBudW1iZXIuCi0gICAgICAgICIiIgot
ICAgICAgICBpZiAoc2VsZi5WRVJTSU9OX0tFWSBpbiByZXN1bHRzX2pzb24gYW5kCi0gICAgICAg
ICAgICByZXN1bHRzX2pzb25bc2VsZi5WRVJTSU9OX0tFWV0gPT0gc2VsZi5WRVJTSU9OKToKLSAg
ICAgICAgICAgIHJldHVybgotCi0gICAgICAgIHJlc3VsdHNfanNvbltzZWxmLlZFUlNJT05fS0VZ
XSA9IHNlbGYuVkVSU0lPTgotCi0gICAgZGVmIF9jcmVhdGVfcmVzdWx0c19hbmRfdGltZXNfanNv
bihzZWxmKToKLSAgICAgICAgcmVzdWx0c19hbmRfdGltZXMgPSB7fQotICAgICAgICByZXN1bHRz
X2FuZF90aW1lc1tzZWxmLlJFU1VMVFNdID0gW10KLSAgICAgICAgcmVzdWx0c19hbmRfdGltZXNb
c2VsZi5USU1FU10gPSBbXQotICAgICAgICByZXR1cm4gcmVzdWx0c19hbmRfdGltZXMKLQotICAg
IGRlZiBfY3JlYXRlX3Jlc3VsdHNfZm9yX2J1aWxkZXJfanNvbihzZWxmKToKLSAgICAgICAgcmVz
dWx0c19mb3JfYnVpbGRlciA9IHt9Ci0gICAgICAgIHJlc3VsdHNfZm9yX2J1aWxkZXJbc2VsZi5U
RVNUU10gPSB7fQotICAgICAgICByZXR1cm4gcmVzdWx0c19mb3JfYnVpbGRlcgotCi0gICAgZGVm
IF9yZW1vdmVfaXRlbXNfb3Zlcl9tYXhfbnVtYmVyX29mX2J1aWxkcyhzZWxmLCBlbmNvZGVkX2xp
c3QpOgotICAgICAgICAiIiJSZW1vdmVzIGl0ZW1zIGZyb20gdGhlIHJ1bi1sZW5ndGggZW5jb2Rl
ZCBsaXN0IGFmdGVyIHRoZSBmaW5hbAotICAgICAgICBpdGVtIHRoYXQgZXhjZWVkcyB0aGUgbWF4
IG51bWJlciBvZiBidWlsZHMgdG8gdHJhY2suCi0KLSAgICAgICAgQXJnczoKLSAgICAgICAgICBl
bmNvZGVkX3Jlc3VsdHM6IHJ1bi1sZW5ndGggZW5jb2RlZCByZXN1bHRzLiBBbiBhcnJheSBvZiBh
cnJheXMsIGUuZy4KLSAgICAgICAgICAgICAgW1szLCdBJ10sWzEsJ1EnXV0gZW5jb2RlcyBBQUFR
LgotICAgICAgICAiIiIKLSAgICAgICAgbnVtX2J1aWxkcyA9IDAKLSAgICAgICAgaW5kZXggPSAw
Ci0gICAgICAgIGZvciByZXN1bHQgaW4gZW5jb2RlZF9saXN0OgotICAgICAgICAgICAgbnVtX2J1
aWxkcyA9IG51bV9idWlsZHMgKyByZXN1bHRbMF0KLSAgICAgICAgICAgIGluZGV4ID0gaW5kZXgg
KyAxCi0gICAgICAgICAgICBpZiBudW1fYnVpbGRzID4gc2VsZi5NQVhfTlVNQkVSX09GX0JVSUxE
X1JFU1VMVFNfVE9fTE9HOgotICAgICAgICAgICAgICAgIHJldHVybiBlbmNvZGVkX2xpc3RbOmlu
ZGV4XQotICAgICAgICByZXR1cm4gZW5jb2RlZF9saXN0Ci0KLSAgICBkZWYgX25vcm1hbGl6ZV9y
ZXN1bHRzX2pzb24oc2VsZiwgdGVzdCwgdGVzdF9uYW1lLCB0ZXN0cyk6Ci0gICAgICAgICIiIiBQ
cnVuZSB0ZXN0cyB3aGVyZSBhbGwgcnVucyBwYXNzIG9yIHRlc3RzIHRoYXQgbm8gbG9uZ2VyIGV4
aXN0IGFuZAotICAgICAgICB0cnVuY2F0ZSBhbGwgcmVzdWx0cyB0byBtYXhOdW1iZXJPZkJ1aWxk
cy4KLQotICAgICAgICBBcmdzOgotICAgICAgICAgIHRlc3Q6IFJlc3VsdHNBbmRUaW1lcyBvYmpl
Y3QgZm9yIHRoaXMgdGVzdC4KLSAgICAgICAgICB0ZXN0X25hbWU6IE5hbWUgb2YgdGhlIHRlc3Qu
Ci0gICAgICAgICAgdGVzdHM6IFRoZSBKU09OIG9iamVjdCB3aXRoIGFsbCB0aGUgdGVzdCByZXN1
bHRzIGZvciB0aGlzIGJ1aWxkZXIuCi0gICAgICAgICIiIgotICAgICAgICB0ZXN0W3NlbGYuUkVT
VUxUU10gPSBzZWxmLl9yZW1vdmVfaXRlbXNfb3Zlcl9tYXhfbnVtYmVyX29mX2J1aWxkcygKLSAg
ICAgICAgICAgIHRlc3Rbc2VsZi5SRVNVTFRTXSkKLSAgICAgICAgdGVzdFtzZWxmLlRJTUVTXSA9
IHNlbGYuX3JlbW92ZV9pdGVtc19vdmVyX21heF9udW1iZXJfb2ZfYnVpbGRzKAotICAgICAgICAg
ICAgdGVzdFtzZWxmLlRJTUVTXSkKLQotICAgICAgICBpc19hbGxfcGFzcyA9IHNlbGYuX2lzX3Jl
c3VsdHNfYWxsX29mX3R5cGUodGVzdFtzZWxmLlJFU1VMVFNdLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5QQVNTX1JFU1VMVCkKLSAgICAg
ICAgaXNfYWxsX25vX2RhdGEgPSBzZWxmLl9pc19yZXN1bHRzX2FsbF9vZl90eXBlKHRlc3Rbc2Vs
Zi5SRVNVTFRTXSwKLSAgICAgICAgICAgIHNlbGYuTk9fREFUQV9SRVNVTFQpCi0gICAgICAgIG1h
eF90aW1lID0gbWF4KFt0aW1lWzFdIGZvciB0aW1lIGluIHRlc3Rbc2VsZi5USU1FU11dKQotCi0g
ICAgICAgICMgUmVtb3ZlIGFsbCBwYXNzZXMvbm8tZGF0YSBmcm9tIHRoZSByZXN1bHRzIHRvIHJl
ZHVjZSBub2lzZSBhbmQKLSAgICAgICAgIyBmaWxlc2l6ZS4gSWYgYSB0ZXN0IHBhc3NlcyBldmVy
eSBydW4sIGJ1dCB0YWtlcyA+IE1JTl9USU1FIHRvIHJ1biwKLSAgICAgICAgIyBkb24ndCB0aHJv
dyBhd2F5IHRoZSBkYXRhLgotICAgICAgICBpZiBpc19hbGxfbm9fZGF0YSBvciAoaXNfYWxsX3Bh
c3MgYW5kIG1heF90aW1lIDw9IHNlbGYuTUlOX1RJTUUpOgotICAgICAgICAgICAgZGVsIHRlc3Rz
W3Rlc3RfbmFtZV0KIAotICAgIGRlZiBfaXNfcmVzdWx0c19hbGxfb2ZfdHlwZShzZWxmLCByZXN1
bHRzLCB0eXBlKToKLSAgICAgICAgIiIiUmV0dXJucyB3aGV0aGVyIGFsbCB0aGUgcmVzdWx0cyBh
cmUgb2YgdGhlIGdpdmVuIHR5cGUKLSAgICAgICAgKGUuZy4gYWxsIHBhc3NlcykuIiIiCi0gICAg
ICAgIHJldHVybiBsZW4ocmVzdWx0cykgPT0gMSBhbmQgcmVzdWx0c1swXVsxXSA9PSB0eXBlCisg
ICAgICAgIHN1cGVyKEpTT05SZXN1bHRzR2VuZXJhdG9yLCBzZWxmKS5fX2luaXRfXygKKyAgICAg
ICAgICAgIGJ1aWxkZXJfbmFtZSwgYnVpbGRfbmFtZSwgYnVpbGRfbnVtYmVyLAorICAgICAgICAg
ICAgcmVzdWx0c19maWxlX2Jhc2VfcGF0aCwgYnVpbGRlcl9iYXNlX3VybCwKKyAgICAgICAgICAg
IHRlc3RfdGltaW5ncywgZmFpbHVyZXMsIHBhc3NlZF90ZXN0cywgc2tpcHBlZF90ZXN0cywgYWxs
X3Rlc3RzLAorICAgICAgICAgICAgc3ZuX3JlcG9zaXRvcmllcz1wb3J0LnRlc3RfcmVwb3NpdG9y
eV9wYXRocygpKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9leHBlY3RhdGlvbnMucHkgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X2V4cGVj
dGF0aW9ucy5weQppbmRleCAzODIyM2RkZGJiMjMzYjBlNDM1ZTFjNzI0OTQ1YjEzZTQ3MTE4ZmI1
Li5lZWRkNjYxYTMwOTkzNTQwZjU1YmRiNDQ0ZDk5OTlmNDcwMzNhMWI3IDEwMDY0NAotLS0gYS9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90
ZXN0X2V4cGVjdGF0aW9ucy5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X2V4cGVjdGF0aW9ucy5weQpAQCAtMzYsMTQg
KzM2LDIxIEBAIGltcG9ydCBvcwogaW1wb3J0IHJlCiBpbXBvcnQgc3lzCiAKK2Zyb20gd2Via2l0
cHkudGVzdF9wYWNrYWdlIGltcG9ydCB0ZXN0X3Jlc3VsdHMKIGltcG9ydCB3ZWJraXRweS50aGly
ZHBhcnR5LnNpbXBsZWpzb24gYXMgc2ltcGxlanNvbgogCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dn
ZXIoIndlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZS4iCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgInRlc3RfZXhwZWN0YXRpb25zIikKIAogIyBUZXN0IGV4cGVjdGF0aW9uIGFu
ZCBtb2RpZmllciBjb25zdGFudHMuCisjIE5vdGU6IFRoZXkgbmVlZCB0byBtYXRjaCB3aXRoIHRo
ZSB3ZWJraXRweS50ZXN0X3BhY2thZ2UudGVzdF9yZXN1bHRzLgogKFBBU1MsIEZBSUwsIFRFWFQs
IElNQUdFLCBJTUFHRV9QTFVTX1RFWFQsIFRJTUVPVVQsIENSQVNILCBTS0lQLCBXT05URklYLAot
IERFRkVSLCBTTE9XLCBSRUJBU0VMSU5FLCBNSVNTSU5HLCBGTEFLWSwgTk9XLCBOT05FKSA9IHJh
bmdlKDE2KQorIERFRkVSLCBTTE9XLCBSRUJBU0VMSU5FLCBNSVNTSU5HLCBGTEFLWSwgTk9XLCBO
T05FKSA9ICgKK3Rlc3RfcmVzdWx0cy5QQVNTLCB0ZXN0X3Jlc3VsdHMuRkFJTCwgdGVzdF9yZXN1
bHRzLlRFWFQsIHRlc3RfcmVzdWx0cy5JTUFHRSwKK3Rlc3RfcmVzdWx0cy5JTUFHRV9QTFVTX1RF
WFQsIHRlc3RfcmVzdWx0cy5USU1FT1VULCB0ZXN0X3Jlc3VsdHMuQ1JBU0gsCit0ZXN0X3Jlc3Vs
dHMuU0tJUCwgdGVzdF9yZXN1bHRzLldPTlRGSVgsIHRlc3RfcmVzdWx0cy5ERUZFUiwgdGVzdF9y
ZXN1bHRzLlNMT1csCit0ZXN0X3Jlc3VsdHMuUkVCQVNFTElORSwgdGVzdF9yZXN1bHRzLk1JU1NJ
TkcsIHRlc3RfcmVzdWx0cy5GTEFLWSwKK3Rlc3RfcmVzdWx0cy5OT1csIHRlc3RfcmVzdWx0cy5O
T05FKQogCiAjIFRlc3QgZXhwZWN0YXRpb24gZmlsZSB1cGRhdGUgYWN0aW9uIGNvbnN0YW50cwog
KE5PX0NIQU5HRSwgUkVNT1ZFX1RFU1QsIFJFTU9WRV9QTEFURk9STSwgQUREX1BMQVRGT1JNU19F
WENFUFRfVEhJUykgPSByYW5nZSg0KQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS90ZXN0X3BhY2thZ2UvX19pbml0X18ucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3Rlc3RfcGFja2FnZS9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZjY1YmVlNWJiNzdl
OTZlYmM3Y2Q5YzQ3NjQwNjkwZmJkYThhYzE5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS90ZXN0X3BhY2thZ2UvX19pbml0X18ucHkKQEAgLTAsMCArMSBA
QAorIyBSZXF1aXJlZCBmb3IgUHl0aG9uIHRvIHNlYXJjaCB0aGlzIGRpcmVjdG9yeSBmb3IgbW9k
dWxlIGZpbGVzCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3Rf
cGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS90ZXN0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvci5weQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li43ZGNmYzVkYjI1NzI3MTI5YjUxZDZlZDE4MmM1ZDc4NWM5ODc1NmUwCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90ZXN0X3BhY2thZ2UvanNvbl9yZXN1
bHRzX2dlbmVyYXRvci5weQpAQCAtMCwwICsxLDQzMiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9u
CisjIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9u
LgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMg
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisj
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVu
dAorCitpbXBvcnQgY29kZWNzCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgc3Vi
cHJvY2VzcworaW1wb3J0IHN5cworaW1wb3J0IHRpbWUKK2ltcG9ydCB1cmxsaWIyCitpbXBvcnQg
eG1sLmRvbS5taW5pZG9tCisKK2Zyb20gd2Via2l0cHkudGVzdF9wYWNrYWdlIGltcG9ydCB0ZXN0
X3Jlc3VsdHMKK2ltcG9ydCB3ZWJraXRweS50aGlyZHBhcnR5LnNpbXBsZWpzb24gYXMgc2ltcGxl
anNvbgorCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoIndlYmtpdHB5LnRlc3RfcGFja2FnZS5q
c29uX3Jlc3VsdHNfZ2VuZXJhdG9yIikKKworCitjbGFzcyBKU09OUmVzdWx0c0dlbmVyYXRvcihv
YmplY3QpOgorICAgICIiIkEgSlNPTiByZXN1bHRzIGdlbmVyYXRvciBmb3IgZ2VuZXJpYyB0ZXN0
cy4iIiIKKworICAgIE1BWF9OVU1CRVJfT0ZfQlVJTERfUkVTVUxUU19UT19MT0cgPSA3NTAKKyAg
ICAjIE1pbiB0aW1lIChzZWNvbmRzKSB0aGF0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIEpTT04uCisg
ICAgTUlOX1RJTUUgPSAxCisgICAgSlNPTl9QUkVGSVggPSAiQUREX1JFU1VMVFMoIgorICAgIEpT
T05fU1VGRklYID0gIik7IgorICAgIFBBU1NfUkVTVUxUID0gIlAiCisgICAgU0tJUF9SRVNVTFQg
PSAiWCIKKyAgICBOT19EQVRBX1JFU1VMVCA9ICJOIgorICAgIFZFUlNJT04gPSAzCisgICAgVkVS
U0lPTl9LRVkgPSAidmVyc2lvbiIKKyAgICBSRVNVTFRTID0gInJlc3VsdHMiCisgICAgVElNRVMg
PSAidGltZXMiCisgICAgQlVJTERfTlVNQkVSUyA9ICJidWlsZE51bWJlcnMiCisgICAgVElNRSA9
ICJzZWNvbmRzU2luY2VFcG9jaCIKKyAgICBURVNUUyA9ICJ0ZXN0cyIKKworICAgIEZJWEFCTEVf
Q09VTlQgPSAiZml4YWJsZUNvdW50IgorICAgIEZJWEFCTEUgPSAiZml4YWJsZUNvdW50cyIKKyAg
ICBBTExfRklYQUJMRV9DT1VOVCA9ICJhbGxGaXhhYmxlQ291bnQiCisKKyAgICAjIE5vdGUgdGhh
dCB3ZSBvbWl0IHRlc3RfcmVzdWx0cy5GQUlMIGZyb20gdGhpcyBsaXN0IGJlY2F1c2UKKyAgICAj
IGl0IHNob3VsZCBuZXZlciBzaG93IHVwIChpdCdzIGEgbGVnYWN5IGlucHV0IGV4cGVjdGF0aW9u
LCBuZXZlcgorICAgICMgYW4gb3V0cHV0IGV4cGVjdGF0aW9uKS4KKyAgICBGQUlMVVJFX1RPX0NI
QVIgPSB7dGVzdF9yZXN1bHRzLkNSQVNIOiAiQyIsCisgICAgICAgICAgICAgICAgICAgICAgIHRl
c3RfcmVzdWx0cy5USU1FT1VUOiAiVCIsCisgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfcmVz
dWx0cy5JTUFHRTogIkkiLAorICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3Jlc3VsdHMuVEVY
VDogIkYiLAorICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3Jlc3VsdHMuTUlTU0lORzogIk8i
LAorICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3Jlc3VsdHMuSU1BR0VfUExVU19URVhUOiAi
WiJ9CisgICAgRkFJTFVSRV9DSEFSUyA9IEZBSUxVUkVfVE9fQ0hBUi52YWx1ZXMoKQorCisgICAg
UkVTVUxUU19GSUxFTkFNRSA9ICJyZXN1bHRzLmpzb24iCisKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgYnVpbGRlcl9uYW1lLCBidWlsZF9uYW1lLCBidWlsZF9udW1iZXIsCisgICAgICAgIHJlc3Vs
dHNfZmlsZV9iYXNlX3BhdGgsIGJ1aWxkZXJfYmFzZV91cmwsCisgICAgICAgIHRlc3RfdGltaW5n
cywgZmFpbHVyZXMsIHBhc3NlZF90ZXN0cywgc2tpcHBlZF90ZXN0cywgYWxsX3Rlc3RzLAorICAg
ICAgICBzdm5fcmVwb3NpdG9yaWVzPU5vbmUpOgorICAgICAgICAiIiJNb2RpZmllcyB0aGUgcmVz
dWx0cy5qc29uIGZpbGUuIEdyYWJzIGl0IG9mZiB0aGUgYXJjaGl2ZSBkaXJlY3RvcnkKKyAgICAg
ICAgaWYgaXQgaXMgbm90IGZvdW5kIGxvY2FsbHkuCisKKyAgICAgICAgQXJncworICAgICAgICAg
IGJ1aWxkZXJfbmFtZTogdGhlIGJ1aWxkZXIgbmFtZSAoZS5nLiBXZWJraXQpLgorICAgICAgICAg
IGJ1aWxkX25hbWU6IHRoZSBidWlsZCBuYW1lIChlLmcuIHdlYmtpdC1yZWwpLgorICAgICAgICAg
IGJ1aWxkX251bWJlcjogdGhlIGJ1aWxkIG51bWJlci4KKyAgICAgICAgICByZXN1bHRzX2ZpbGVf
YmFzZV9wYXRoOiBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUK
KyAgICAgICAgICAgICAgcmVzdWx0cyBqc29uIGZpbGUuCisgICAgICAgICAgYnVpbGRlcl9iYXNl
X3VybDogdGhlIFVSTCB3aGVyZSB3ZSBoYXZlIHRoZSBhcmNoaXZlZCB0ZXN0IHJlc3VsdHMuCisg
ICAgICAgICAgdGVzdF90aW1pbmdzOiBNYXAgb2YgdGVzdCBuYW1lIHRvIGEgdGVzdF9ydW4tdGlt
ZS4KKyAgICAgICAgICBmYWlsdXJlczogTWFwIG9mIHRlc3QgbmFtZSB0byBhIGZhaWx1cmUgdHlw
ZSAob2YgdGVzdF9yZXN1bHRzKSwgb3IKKyAgICAgICAgICAgICAgYSBsaXN0IChvciBzZXQpIG9m
IGZhaWxlZCB0ZXN0IG5hbWVzLgorICAgICAgICAgIHBhc3NlZF90ZXN0czogQSBzZXQgY29udGFp
bmluZyBhbGwgdGhlIHBhc3NlZCB0ZXN0cy4KKyAgICAgICAgICBza2lwcGVkX3Rlc3RzOiBBIHNl
dCBjb250YWluaW5nIGFsbCB0aGUgc2tpcHBlZCB0ZXN0cy4KKyAgICAgICAgICBhbGxfdGVzdHM6
IExpc3Qgb2YgYWxsIHRoZSB0ZXN0cyB0aGF0IHdlcmUgcnVuLiAgVGhpcyBzaG91bGQgbm90Cisg
ICAgICAgICAgICAgIGluY2x1ZGUgc2tpcHBlZCB0ZXN0cy4KKyAgICAgICAgICBzdm5fcmVwb3Np
dG9yaWVzOiBBIGxpc3Qgb2YgKHJlcG9zaXRvcnlfbmFtZSwgc3ZuX3BhdGgpIHR1cGxlcworICAg
ICAgICAgICAgICBmb3IgZGVwZW5kZW50IFNWTiByZXBvc2l0b3JpZXMuICBUaGUgU1ZOIHJldmlz
aW9ucyBmb3IgdGhlCisgICAgICAgICAgICAgIHJlcG9zaXRvcmllcyB3aWxsIGJlIGluY2x1ZGVk
IGluIHRoZSBvdXRwdXQgSlNPTiBmaWxlLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fYnVp
bGRlcl9uYW1lID0gYnVpbGRlcl9uYW1lCisgICAgICAgIHNlbGYuX2J1aWxkX25hbWUgPSBidWls
ZF9uYW1lCisgICAgICAgIHNlbGYuX2J1aWxkX251bWJlciA9IGJ1aWxkX251bWJlcgorICAgICAg
ICBzZWxmLl9idWlsZGVyX2Jhc2VfdXJsID0gYnVpbGRlcl9iYXNlX3VybAorICAgICAgICBzZWxm
Ll9yZXN1bHRzX2ZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihyZXN1bHRzX2ZpbGVfYmFzZV9wYXRo
LAorICAgICAgICAgICAgc2VsZi5SRVNVTFRTX0ZJTEVOQU1FKQorICAgICAgICBzZWxmLl90ZXN0
X3RpbWluZ3MgPSB0ZXN0X3RpbWluZ3MKKyAgICAgICAgc2VsZi5fZmFpbHVyZXMgPSB7fQorICAg
ICAgICBpZiB0eXBlKGZhaWx1cmVzKSBpcyBkaWN0OgorICAgICAgICAgICAgc2VsZi5fZmFpbHVy
ZXMgPSBmYWlsdXJlcworICAgICAgICBlbGlmIGdldGF0dHIoZmFpbHVyZXMsICdfX2l0ZXJfXycs
IEZhbHNlKToKKyAgICAgICAgICAgICMgSWYgdGhlIGdpdmVuIGZhaWx1cmVzIGlzIGl0ZXJhYmxl
IGJ1dCBub3QgYSBkaWN0LCBhc3N1bWUgdGhhdAorICAgICAgICAgICAgIyBldmVyeSBmYWlsdXJl
IHdhcyBhIFRFWFQgZmFpbHVyZS4KKyAgICAgICAgICAgIHNlbGYuX2ZhaWx1cmVzID0gZGljdChb
KGYsIHRlc3RfcmVzdWx0cy5URVhUKSBmb3IgZiBpbiBmYWlsdXJlc10pCisgICAgICAgIHNlbGYu
X3Bhc3NlZF90ZXN0cyA9IHBhc3NlZF90ZXN0cworICAgICAgICBzZWxmLl9za2lwcGVkX3Rlc3Rz
ID0gc2tpcHBlZF90ZXN0cworICAgICAgICBzZWxmLl9hbGxfdGVzdHMgPSBhbGxfdGVzdHMKKyAg
ICAgICAgc2VsZi5fc3ZuX3JlcG9zaXRvcmllcyA9IFtdCisgICAgICAgIGlmIHN2bl9yZXBvc2l0
b3JpZXM6CisgICAgICAgICAgICBzZWxmLl9zdm5fcmVwb3NpdG9yaWVzID0gc3ZuX3JlcG9zaXRv
cmllcworCisgICAgICAgIHNlbGYuX2dlbmVyYXRlX2pzb25fb3V0cHV0KCkKKworICAgIGRlZiBf
Z2VuZXJhdGVfanNvbl9vdXRwdXQoc2VsZik6CisgICAgICAgICIiIkdlbmVyYXRlcyB0aGUgSlNP
TiBvdXRwdXQgZmlsZS4iIiIKKyAgICAgICAganNvbiA9IHNlbGYuX2dldF9qc29uKCkKKyAgICAg
ICAgaWYganNvbjoKKyAgICAgICAgICAgIHJlc3VsdHNfZmlsZSA9IGNvZGVjcy5vcGVuKHNlbGYu
X3Jlc3VsdHNfZmlsZV9wYXRoLCAidyIsICJ1dGYtOCIpCisgICAgICAgICAgICByZXN1bHRzX2Zp
bGUud3JpdGUoanNvbikKKyAgICAgICAgICAgIHJlc3VsdHNfZmlsZS5jbG9zZSgpCisKKyAgICAj
IEZJWE1FOiBDYWxsZXJzIHNob3VsZCB1c2Ugc2NtLnB5IGluc3RlYWQuCisgICAgZGVmIF9nZXRf
c3ZuX3JldmlzaW9uKHNlbGYsIGluX2RpcmVjdG9yeSk6CisgICAgICAgICIiIlJldHVybnMgdGhl
IHN2biByZXZpc2lvbiBmb3IgdGhlIGdpdmVuIGRpcmVjdG9yeS4KKworICAgICAgICBBcmdzOgor
ICAgICAgICAgIGluX2RpcmVjdG9yeTogVGhlIGRpcmVjdG9yeSB3aGVyZSBzdm4gaXMgdG8gYmUg
cnVuLgorICAgICAgICAiIiIKKworICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpv
aW4oaW5fZGlyZWN0b3J5LCAnLnN2bicpKToKKyAgICAgICAgICAgICMgTm90ZTogTm90IHRocmVh
ZCBzYWZlOiBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMjMyMAorICAgICAgICAgICAgb3V0
cHV0ID0gc3VicHJvY2Vzcy5Qb3BlbihbInN2biIsICJpbmZvIiwgIi0teG1sIl0sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN3ZD1pbl9kaXJlY3RvcnksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoZWxsPShzeXMucGxhdGZvcm0gPT0gJ3dp
bjMyJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJw
cm9jZXNzLlBJUEUpLmNvbW11bmljYXRlKClbMF0KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAg
ICAgICAgICBkb20gPSB4bWwuZG9tLm1pbmlkb20ucGFyc2VTdHJpbmcob3V0cHV0KQorICAgICAg
ICAgICAgICAgIHJldHVybiBkb20uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2VudHJ5JylbMF0uZ2V0
QXR0cmlidXRlKAorICAgICAgICAgICAgICAgICAgICAncmV2aXNpb24nKQorICAgICAgICAgICAg
ZXhjZXB0IHhtbC5wYXJzZXJzLmV4cGF0LkV4cGF0RXJyb3I6CisgICAgICAgICAgICAgICAgcmV0
dXJuICIiCisgICAgICAgIHJldHVybiAiIgorCisgICAgZGVmIF9nZXRfYXJjaGl2ZWRfanNvbl9y
ZXN1bHRzKHNlbGYpOgorICAgICAgICAiIiJSZWFkcyBvbGQgcmVzdWx0cyBKU09OIGZpbGUgaWYg
aXQgZXhpc3RzLgorICAgICAgICBSZXR1cm5zIChhcmNoaXZlZF9yZXN1bHRzLCBlcnJvcikgdHVw
bGUgd2hlcmUgZXJyb3IgaXMgTm9uZSBpZiByZXN1bHRzCisgICAgICAgIHdlcmUgc3VjY2Vzc2Z1
bGx5IHJlYWQuCisgICAgICAgICIiIgorICAgICAgICByZXN1bHRzX2pzb24gPSB7fQorICAgICAg
ICBvbGRfcmVzdWx0cyA9IE5vbmUKKyAgICAgICAgZXJyb3IgPSBOb25lCisKKyAgICAgICAgaWYg
b3MucGF0aC5leGlzdHMoc2VsZi5fcmVzdWx0c19maWxlX3BhdGgpOgorICAgICAgICAgICAgd2l0
aCBjb2RlY3Mub3BlbihzZWxmLl9yZXN1bHRzX2ZpbGVfcGF0aCwgInIiLCAidXRmLTgiKSBhcyBm
aWxlOgorICAgICAgICAgICAgICAgIG9sZF9yZXN1bHRzID0gZmlsZS5yZWFkKCkKKyAgICAgICAg
ZWxpZiBzZWxmLl9idWlsZGVyX2Jhc2VfdXJsOgorICAgICAgICAgICAgIyBDaGVjayBpZiB3ZSBo
YXZlIHRoZSBhcmNoaXZlZCBKU09OIGZpbGUgb24gdGhlIGJ1aWxkYm90IHNlcnZlci4KKyAgICAg
ICAgICAgIHJlc3VsdHNfZmlsZV91cmwgPSAoc2VsZi5fYnVpbGRlcl9iYXNlX3VybCArCisgICAg
ICAgICAgICAgICAgc2VsZi5fYnVpbGRfbmFtZSArICIvIiArIHNlbGYuUkVTVUxUU19GSUxFTkFN
RSkKKyAgICAgICAgICAgIF9sb2cuZXJyb3IoIkxvY2FsIHJlc3VsdHMuanNvbiBmaWxlIGRvZXMg
bm90IGV4aXN0LiBHcmFiYmluZyAiCisgICAgICAgICAgICAgICAgICAgICAgICJpdCBvZmYgdGhl
IGFyY2hpdmUgYXQgIiArIHJlc3VsdHNfZmlsZV91cmwpCisKKyAgICAgICAgICAgIHRyeToKKyAg
ICAgICAgICAgICAgICByZXN1bHRzX2ZpbGUgPSB1cmxsaWIyLnVybG9wZW4ocmVzdWx0c19maWxl
X3VybCkKKyAgICAgICAgICAgICAgICBpbmZvID0gcmVzdWx0c19maWxlLmluZm8oKQorICAgICAg
ICAgICAgICAgIG9sZF9yZXN1bHRzID0gcmVzdWx0c19maWxlLnJlYWQoKQorICAgICAgICAgICAg
ZXhjZXB0IHVybGxpYjIuSFRUUEVycm9yLCBodHRwX2Vycm9yOgorICAgICAgICAgICAgICAgICMg
QSBub24tNHh4IHN0YXR1cyBjb2RlIG1lYW5zIHRoZSBib3QgaXMgaG9zZWQgZm9yIHNvbWUgcmVh
c29uCisgICAgICAgICAgICAgICAgIyBhbmQgd2UgY2FuJ3QgZ3JhYiB0aGUgcmVzdWx0cy5qc29u
IGZpbGUgb2ZmIG9mIGl0LgorICAgICAgICAgICAgICAgIGlmIChodHRwX2Vycm9yLmNvZGUgPCA0
MDAgYW5kIGh0dHBfZXJyb3IuY29kZSA+PSA1MDApOgorICAgICAgICAgICAgICAgICAgICBlcnJv
ciA9IGh0dHBfZXJyb3IKKyAgICAgICAgICAgIGV4Y2VwdCB1cmxsaWIyLlVSTEVycm9yLCB1cmxf
ZXJyb3I6CisgICAgICAgICAgICAgICAgZXJyb3IgPSB1cmxfZXJyb3IKKworICAgICAgICBpZiBv
bGRfcmVzdWx0czoKKyAgICAgICAgICAgICMgU3RyaXAgdGhlIHByZWZpeCBhbmQgc3VmZml4IHNv
IHdlIGNhbiBnZXQgdGhlIGFjdHVhbCBKU09OIG9iamVjdC4KKyAgICAgICAgICAgIG9sZF9yZXN1
bHRzID0gb2xkX3Jlc3VsdHNbbGVuKHNlbGYuSlNPTl9QUkVGSVgpOgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsZW4ob2xkX3Jlc3VsdHMpIC0gbGVuKHNlbGYuSlNPTl9T
VUZGSVgpXQorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmVzdWx0c19qc29u
ID0gc2ltcGxlanNvbi5sb2FkcyhvbGRfcmVzdWx0cykKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAg
ICAgICAgICAgICAgICBfbG9nLmRlYnVnKCJyZXN1bHRzLmpzb24gd2FzIG5vdCB2YWxpZCBKU09O
LiBDbG9iYmVyaW5nLiIpCisgICAgICAgICAgICAgICAgIyBUaGUgSlNPTiBmaWxlIGlzIG5vdCB2
YWxpZCBKU09OLiBKdXN0IGNsb2JiZXIgdGhlIHJlc3VsdHMuCisgICAgICAgICAgICAgICAgcmVz
dWx0c19qc29uID0ge30KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIF9sb2cuZGVidWcoJ09s
ZCBKU09OIHJlc3VsdHMgZG8gbm90IGV4aXN0LiBTdGFydGluZyBmcmVzaC4nKQorICAgICAgICAg
ICAgcmVzdWx0c19qc29uID0ge30KKworICAgICAgICByZXR1cm4gcmVzdWx0c19qc29uLCBlcnJv
cgorCisgICAgZGVmIF9nZXRfanNvbihzZWxmKToKKyAgICAgICAgIiIiR2V0cyB0aGUgcmVzdWx0
cyBmb3IgdGhlIHJlc3VsdHMuanNvbiBmaWxlLiIiIgorICAgICAgICByZXN1bHRzX2pzb24sIGVy
cm9yID0gc2VsZi5fZ2V0X2FyY2hpdmVkX2pzb25fcmVzdWx0cygpCisgICAgICAgIGlmIGVycm9y
OgorICAgICAgICAgICAgIyBJZiB0aGVyZSB3YXMgYW4gZXJyb3IgZG9uJ3Qgd3JpdGUgYSByZXN1
bHRzLmpzb24KKyAgICAgICAgICAgICMgZmlsZSBhdCBhbGwgYXMgaXQgd291bGQgbG9zZSBhbGwg
dGhlIGluZm9ybWF0aW9uIG9uIHRoZSBib3QuCisgICAgICAgICAgICBfbG9nLmVycm9yKCJBcmNo
aXZlIGRpcmVjdG9yeSBpcyBpbmFjY2Vzc2libGUuIE5vdCBtb2RpZnlpbmcgIgorICAgICAgICAg
ICAgICAgICAgICAgICAib3IgY2xvYmJlcmluZyB0aGUgcmVzdWx0cy5qc29uIGZpbGU6ICIgKyBz
dHIoZXJyb3IpKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBidWlsZGVyX25h
bWUgPSBzZWxmLl9idWlsZGVyX25hbWUKKyAgICAgICAgaWYgcmVzdWx0c19qc29uIGFuZCBidWls
ZGVyX25hbWUgbm90IGluIHJlc3VsdHNfanNvbjoKKyAgICAgICAgICAgIF9sb2cuZGVidWcoIkJ1
aWxkZXIgbmFtZSAoJXMpIGlzIG5vdCBpbiB0aGUgcmVzdWx0cy5qc29uIGZpbGUuIgorICAgICAg
ICAgICAgICAgICAgICAgICAlIGJ1aWxkZXJfbmFtZSkKKworICAgICAgICBzZWxmLl9jb252ZXJ0
X2pzb25fdG9fY3VycmVudF92ZXJzaW9uKHJlc3VsdHNfanNvbikKKworICAgICAgICBpZiBidWls
ZGVyX25hbWUgbm90IGluIHJlc3VsdHNfanNvbjoKKyAgICAgICAgICAgIHJlc3VsdHNfanNvblti
dWlsZGVyX25hbWVdID0gKAorICAgICAgICAgICAgICAgIHNlbGYuX2NyZWF0ZV9yZXN1bHRzX2Zv
cl9idWlsZGVyX2pzb24oKSkKKworICAgICAgICByZXN1bHRzX2Zvcl9idWlsZGVyID0gcmVzdWx0
c19qc29uW2J1aWxkZXJfbmFtZV0KKworICAgICAgICBzZWxmLl9pbnNlcnRfZ2VuZXJpY19tZXRh
ZGF0YShyZXN1bHRzX2Zvcl9idWlsZGVyKQorCisgICAgICAgIHNlbGYuX2luc2VydF9mYWlsdXJl
X3N1bW1hcmllcyhyZXN1bHRzX2Zvcl9idWlsZGVyKQorCisgICAgICAgICMgVXBkYXRlIHRoZSBh
bGwgZmFpbGluZyB0ZXN0cyB3aXRoIHJlc3VsdCB0eXBlIGFuZCB0aW1lLgorICAgICAgICB0ZXN0
cyA9IHJlc3VsdHNfZm9yX2J1aWxkZXJbc2VsZi5URVNUU10KKyAgICAgICAgYWxsX2ZhaWxpbmdf
dGVzdHMgPSBzZXQoc2VsZi5fZmFpbHVyZXMuaXRlcmtleXMoKSkKKyAgICAgICAgYWxsX2ZhaWxp
bmdfdGVzdHMudXBkYXRlKHRlc3RzLml0ZXJrZXlzKCkpCisgICAgICAgIGZvciB0ZXN0IGluIGFs
bF9mYWlsaW5nX3Rlc3RzOgorICAgICAgICAgICAgc2VsZi5faW5zZXJ0X3Rlc3RfdGltZV9hbmRf
cmVzdWx0KHRlc3QsIHRlc3RzKQorCisgICAgICAgICMgU3BlY2lmeSBzZXBhcmF0b3JzIGluIG9y
ZGVyIHRvIGdldCBjb21wYWN0IGVuY29kaW5nLgorICAgICAgICByZXN1bHRzX3N0ciA9IHNpbXBs
ZWpzb24uZHVtcHMocmVzdWx0c19qc29uLCBzZXBhcmF0b3JzPSgnLCcsICc6JykpCisgICAgICAg
IHJldHVybiBzZWxmLkpTT05fUFJFRklYICsgcmVzdWx0c19zdHIgKyBzZWxmLkpTT05fU1VGRklY
CisKKyAgICBkZWYgX2luc2VydF9mYWlsdXJlX3N1bW1hcmllcyhzZWxmLCByZXN1bHRzX2Zvcl9i
dWlsZGVyKToKKyAgICAgICAgIiIiSW5zZXJ0cyBhZ2dyZWdhdGUgcGFzcy9mYWlsdXJlIHN0YXRp
c3RpY3MgaW50byB0aGUgSlNPTi4KKyAgICAgICAgVGhpcyBtZXRob2QgcmVhZHMgc2VsZi5fc2tp
cHBlZF90ZXN0cywgc2VsZi5fcGFzc2VkX3Rlc3RzIGFuZAorICAgICAgICBzZWxmLl9mYWlsdXJl
cyBhbmQgaW5zZXJ0cyBGSVhBQkxFLCBGSVhBQkxFX0NPVU5UIGFuZCBBTExfRklYQUJMRV9DT1VO
VAorICAgICAgICBlbnRyaWVzLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgcmVzdWx0c19m
b3JfYnVpbGRlcjogRGljdGlvbmFyeSBjb250YWluaW5nIHRoZSB0ZXN0IHJlc3VsdHMgZm9yIGEK
KyAgICAgICAgICAgICAgc2luZ2xlIGJ1aWxkZXIuCisgICAgICAgICIiIgorICAgICAgICAjIElu
c2VydCB0aGUgbnVtYmVyIG9mIHRlc3RzIHRoYXQgZmFpbGVkLgorICAgICAgICBzZWxmLl9pbnNl
cnRfaXRlbV9pbnRvX3Jhd19saXN0KHJlc3VsdHNfZm9yX2J1aWxkZXIsCisgICAgICAgICAgICBs
ZW4oc2V0KHNlbGYuX2ZhaWx1cmVzLmtleXMoKSkgfCBzZWxmLl9za2lwcGVkX3Rlc3RzKSwKKyAg
ICAgICAgICAgIHNlbGYuRklYQUJMRV9DT1VOVCkKKworICAgICAgICAjIENyZWF0ZSBhIHBhc3Mv
c2tpcC9mYWlsdXJlIHN1bW1hcnkgZGljdGlvbmFyeS4KKyAgICAgICAgZW50cnkgPSB7fQorICAg
ICAgICBlbnRyeVtzZWxmLlNLSVBfUkVTVUxUXSA9IGxlbihzZWxmLl9za2lwcGVkX3Rlc3RzKQor
ICAgICAgICBlbnRyeVtzZWxmLlBBU1NfUkVTVUxUXSA9IGxlbihzZWxmLl9wYXNzZWRfdGVzdHMp
CisgICAgICAgIGdldCA9IGVudHJ5LmdldAorICAgICAgICBmb3IgZmFpbHVyZV90eXBlIGluIHNl
bGYuX2ZhaWx1cmVzLnZhbHVlcygpOgorICAgICAgICAgICAgZmFpbHVyZV9jaGFyID0gc2VsZi5G
QUlMVVJFX1RPX0NIQVJbZmFpbHVyZV90eXBlXQorICAgICAgICAgICAgZW50cnlbZmFpbHVyZV9j
aGFyXSA9IGdldChmYWlsdXJlX2NoYXIsIDApICsgMQorCisgICAgICAgICMgSW5zZXJ0IHRoZSBw
YXNzL3NraXAvZmFpbHVyZSBzdW1tYXJ5IGRpY3Rpb25hcnkuCisgICAgICAgIHNlbGYuX2luc2Vy
dF9pdGVtX2ludG9fcmF3X2xpc3QocmVzdWx0c19mb3JfYnVpbGRlciwgZW50cnksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5GSVhBQkxFKQorCisgICAgICAg
ICMgSW5zZXJ0IHRoZSBudW1iZXIgb2YgYWxsIHRoZSB0ZXN0cyB0aGF0IGFyZSBzdXBwb3NlZCB0
byBwYXNzLgorICAgICAgICBzZWxmLl9pbnNlcnRfaXRlbV9pbnRvX3Jhd19saXN0KHJlc3VsdHNf
Zm9yX2J1aWxkZXIsCisgICAgICAgICAgICBsZW4oc2VsZi5fc2tpcHBlZF90ZXN0cyB8IHNlbGYu
X2FsbF90ZXN0cyksCisgICAgICAgICAgICBzZWxmLkFMTF9GSVhBQkxFX0NPVU5UKQorCisgICAg
ZGVmIF9pbnNlcnRfaXRlbV9pbnRvX3Jhd19saXN0KHNlbGYsIHJlc3VsdHNfZm9yX2J1aWxkZXIs
IGl0ZW0sIGtleSk6CisgICAgICAgICIiIkluc2VydHMgdGhlIGl0ZW0gaW50byB0aGUgbGlzdCB3
aXRoIHRoZSBnaXZlbiBrZXkgaW4gdGhlIHJlc3VsdHMgZm9yCisgICAgICAgIHRoaXMgYnVpbGRl
ci4gQ3JlYXRlcyB0aGUgbGlzdCBpZiBubyBzdWNoIGxpc3QgZXhpc3RzLgorCisgICAgICAgIEFy
Z3M6CisgICAgICAgICAgcmVzdWx0c19mb3JfYnVpbGRlcjogRGljdGlvbmFyeSBjb250YWluaW5n
IHRoZSB0ZXN0IHJlc3VsdHMgZm9yIGEKKyAgICAgICAgICAgICAgc2luZ2xlIGJ1aWxkZXIuCisg
ICAgICAgICAgaXRlbTogTnVtYmVyIG9yIHN0cmluZyB0byBpbnNlcnQgaW50byB0aGUgbGlzdC4K
KyAgICAgICAgICBrZXk6IEtleSBpbiByZXN1bHRzX2Zvcl9idWlsZGVyIGZvciB0aGUgbGlzdCB0
byBpbnNlcnQgaW50by4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGtleSBpbiByZXN1bHRzX2Zv
cl9idWlsZGVyOgorICAgICAgICAgICAgcmF3X2xpc3QgPSByZXN1bHRzX2Zvcl9idWlsZGVyW2tl
eV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhd19saXN0ID0gW10KKworICAgICAgICBy
YXdfbGlzdC5pbnNlcnQoMCwgaXRlbSkKKyAgICAgICAgcmF3X2xpc3QgPSByYXdfbGlzdFs6c2Vs
Zi5NQVhfTlVNQkVSX09GX0JVSUxEX1JFU1VMVFNfVE9fTE9HXQorICAgICAgICByZXN1bHRzX2Zv
cl9idWlsZGVyW2tleV0gPSByYXdfbGlzdAorCisgICAgZGVmIF9pbnNlcnRfaXRlbV9ydW5fbGVu
Z3RoX2VuY29kZWQoc2VsZiwgaXRlbSwgZW5jb2RlZF9yZXN1bHRzKToKKyAgICAgICAgIiIiSW5z
ZXJ0cyB0aGUgaXRlbSBpbnRvIHRoZSBydW4tbGVuZ3RoIGVuY29kZWQgcmVzdWx0cy4KKworICAg
ICAgICBBcmdzOgorICAgICAgICAgIGl0ZW06IFN0cmluZyBvciBudW1iZXIgdG8gaW5zZXJ0Lgor
ICAgICAgICAgIGVuY29kZWRfcmVzdWx0czogcnVuLWxlbmd0aCBlbmNvZGVkIHJlc3VsdHMuIEFu
IGFycmF5IG9mIGFycmF5cywgZS5nLgorICAgICAgICAgICAgICBbWzMsJ0EnXSxbMSwnUSddXSBl
bmNvZGVzIEFBQVEuCisgICAgICAgICIiIgorICAgICAgICBpZiBsZW4oZW5jb2RlZF9yZXN1bHRz
KSBhbmQgaXRlbSA9PSBlbmNvZGVkX3Jlc3VsdHNbMF1bMV06CisgICAgICAgICAgICBudW1fcmVz
dWx0cyA9IGVuY29kZWRfcmVzdWx0c1swXVswXQorICAgICAgICAgICAgaWYgbnVtX3Jlc3VsdHMg
PD0gc2VsZi5NQVhfTlVNQkVSX09GX0JVSUxEX1JFU1VMVFNfVE9fTE9HOgorICAgICAgICAgICAg
ICAgIGVuY29kZWRfcmVzdWx0c1swXVswXSA9IG51bV9yZXN1bHRzICsgMQorICAgICAgICBlbHNl
OgorICAgICAgICAgICAgIyBVc2UgYSBsaXN0IGluc3RlYWQgb2YgYSBjbGFzcyBmb3IgdGhlIHJ1
bi1sZW5ndGggZW5jb2Rpbmcgc2luY2UKKyAgICAgICAgICAgICMgd2Ugd2FudCB0aGUgc2VyaWFs
aXplZCBmb3JtIHRvIGJlIGNvbmNpc2UuCisgICAgICAgICAgICBlbmNvZGVkX3Jlc3VsdHMuaW5z
ZXJ0KDAsIFsxLCBpdGVtXSkKKworICAgIGRlZiBfaW5zZXJ0X2dlbmVyaWNfbWV0YWRhdGEoc2Vs
ZiwgcmVzdWx0c19mb3JfYnVpbGRlcik6CisgICAgICAgICIiIiBJbnNlcnRzIGdlbmVyaWMgbWV0
YWRhdGEgKHN1Y2ggYXMgdmVyc2lvbiBudW1iZXIsIGN1cnJlbnQgdGltZSBldGMpCisgICAgICAg
IGludG8gdGhlIEpTT04uCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICByZXN1bHRzX2Zvcl9i
dWlsZGVyOiBEaWN0aW9uYXJ5IGNvbnRhaW5pbmcgdGhlIHRlc3QgcmVzdWx0cyBmb3IKKyAgICAg
ICAgICAgICAgYSBzaW5nbGUgYnVpbGRlci4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2lu
c2VydF9pdGVtX2ludG9fcmF3X2xpc3QocmVzdWx0c19mb3JfYnVpbGRlciwKKyAgICAgICAgICAg
IHNlbGYuX2J1aWxkX251bWJlciwgc2VsZi5CVUlMRF9OVU1CRVJTKQorCisgICAgICAgICMgSW5j
bHVkZSBTVk4gcmV2aXNpb25zIGZvciB0aGUgZ2l2ZW4gcmVwb3NpdG9yaWVzLgorICAgICAgICBm
b3IgKG5hbWUsIHBhdGgpIGluIHNlbGYuX3N2bl9yZXBvc2l0b3JpZXM6CisgICAgICAgICAgICBz
ZWxmLl9pbnNlcnRfaXRlbV9pbnRvX3Jhd19saXN0KHJlc3VsdHNfZm9yX2J1aWxkZXIsCisgICAg
ICAgICAgICAgICAgc2VsZi5fZ2V0X3N2bl9yZXZpc2lvbihwYXRoKSwKKyAgICAgICAgICAgICAg
ICBuYW1lICsgJ1JldmlzaW9uJykKKworICAgICAgICBzZWxmLl9pbnNlcnRfaXRlbV9pbnRvX3Jh
d19saXN0KHJlc3VsdHNfZm9yX2J1aWxkZXIsCisgICAgICAgICAgICBpbnQodGltZS50aW1lKCkp
LAorICAgICAgICAgICAgc2VsZi5USU1FKQorCisgICAgZGVmIF9pbnNlcnRfdGVzdF90aW1lX2Fu
ZF9yZXN1bHQoc2VsZiwgdGVzdF9uYW1lLCB0ZXN0cyk6CisgICAgICAgICIiIiBJbnNlcnQgYSB0
ZXN0IGl0ZW0gd2l0aCBpdHMgcmVzdWx0cyB0byB0aGUgZ2l2ZW4gdGVzdHMgZGljdGlvbmFyeS4K
KworICAgICAgICBBcmdzOgorICAgICAgICAgIHRlc3RzOiBEaWN0aW9uYXJ5IGNvbnRhaW5pbmcg
dGVzdCByZXN1bHQgZW50cmllcy4KKyAgICAgICAgIiIiCisKKyAgICAgICAgcmVzdWx0ID0gSlNP
TlJlc3VsdHNHZW5lcmF0b3IuUEFTU19SRVNVTFQKKyAgICAgICAgdGltZSA9IDAKKworICAgICAg
ICBpZiB0ZXN0X25hbWUgbm90IGluIHNlbGYuX2FsbF90ZXN0czoKKyAgICAgICAgICAgIHJlc3Vs
dCA9IEpTT05SZXN1bHRzR2VuZXJhdG9yLk5PX0RBVEFfUkVTVUxUCisKKyAgICAgICAgaWYgdGVz
dF9uYW1lIGluIHNlbGYuX2ZhaWx1cmVzOgorICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5GQUlM
VVJFX1RPX0NIQVJbc2VsZi5fZmFpbHVyZXNbdGVzdF9uYW1lXV0KKworICAgICAgICBpZiB0ZXN0
X25hbWUgaW4gc2VsZi5fdGVzdF90aW1pbmdzOgorICAgICAgICAgICAgIyBGbG9vciBmb3Igbm93
IHRvIGdldCB0aW1lIGluIHNlY29uZHMuCisgICAgICAgICAgICB0aW1lID0gaW50KHNlbGYuX3Rl
c3RfdGltaW5nc1t0ZXN0X25hbWVdKQorCisgICAgICAgIGlmIHRlc3RfbmFtZSBub3QgaW4gdGVz
dHM6CisgICAgICAgICAgICB0ZXN0c1t0ZXN0X25hbWVdID0gc2VsZi5fY3JlYXRlX3Jlc3VsdHNf
YW5kX3RpbWVzX2pzb24oKQorCisgICAgICAgIHRoaXNUZXN0ID0gdGVzdHNbdGVzdF9uYW1lXQor
ICAgICAgICBzZWxmLl9pbnNlcnRfaXRlbV9ydW5fbGVuZ3RoX2VuY29kZWQocmVzdWx0LCB0aGlz
VGVzdFtzZWxmLlJFU1VMVFNdKQorICAgICAgICBzZWxmLl9pbnNlcnRfaXRlbV9ydW5fbGVuZ3Ro
X2VuY29kZWQodGltZSwgdGhpc1Rlc3Rbc2VsZi5USU1FU10pCisgICAgICAgIHNlbGYuX25vcm1h
bGl6ZV9yZXN1bHRzX2pzb24odGhpc1Rlc3QsIHRlc3RfbmFtZSwgdGVzdHMpCisKKyAgICBkZWYg
X2NvbnZlcnRfanNvbl90b19jdXJyZW50X3ZlcnNpb24oc2VsZiwgcmVzdWx0c19qc29uKToKKyAg
ICAgICAgIiIiSWYgdGhlIEpTT04gZG9lcyBub3QgbWF0Y2ggdGhlIGN1cnJlbnQgdmVyc2lvbiwg
Y29udmVydHMgaXQgdG8gdGhlCisgICAgICAgIGN1cnJlbnQgdmVyc2lvbiBhbmQgYWRkcyBpbiB0
aGUgbmV3IHZlcnNpb24gbnVtYmVyLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgKHNlbGYuVkVS
U0lPTl9LRVkgaW4gcmVzdWx0c19qc29uIGFuZAorICAgICAgICAgICAgcmVzdWx0c19qc29uW3Nl
bGYuVkVSU0lPTl9LRVldID09IHNlbGYuVkVSU0lPTik6CisgICAgICAgICAgICByZXR1cm4KKwor
ICAgICAgICByZXN1bHRzX2pzb25bc2VsZi5WRVJTSU9OX0tFWV0gPSBzZWxmLlZFUlNJT04KKwor
ICAgIGRlZiBfY3JlYXRlX3Jlc3VsdHNfYW5kX3RpbWVzX2pzb24oc2VsZik6CisgICAgICAgIHJl
c3VsdHNfYW5kX3RpbWVzID0ge30KKyAgICAgICAgcmVzdWx0c19hbmRfdGltZXNbc2VsZi5SRVNV
TFRTXSA9IFtdCisgICAgICAgIHJlc3VsdHNfYW5kX3RpbWVzW3NlbGYuVElNRVNdID0gW10KKyAg
ICAgICAgcmV0dXJuIHJlc3VsdHNfYW5kX3RpbWVzCisKKyAgICBkZWYgX2NyZWF0ZV9yZXN1bHRz
X2Zvcl9idWlsZGVyX2pzb24oc2VsZik6CisgICAgICAgIHJlc3VsdHNfZm9yX2J1aWxkZXIgPSB7
fQorICAgICAgICByZXN1bHRzX2Zvcl9idWlsZGVyW3NlbGYuVEVTVFNdID0ge30KKyAgICAgICAg
cmV0dXJuIHJlc3VsdHNfZm9yX2J1aWxkZXIKKworICAgIGRlZiBfcmVtb3ZlX2l0ZW1zX292ZXJf
bWF4X251bWJlcl9vZl9idWlsZHMoc2VsZiwgZW5jb2RlZF9saXN0KToKKyAgICAgICAgIiIiUmVt
b3ZlcyBpdGVtcyBmcm9tIHRoZSBydW4tbGVuZ3RoIGVuY29kZWQgbGlzdCBhZnRlciB0aGUgZmlu
YWwKKyAgICAgICAgaXRlbSB0aGF0IGV4Y2VlZHMgdGhlIG1heCBudW1iZXIgb2YgYnVpbGRzIHRv
IHRyYWNrLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgZW5jb2RlZF9yZXN1bHRzOiBydW4t
bGVuZ3RoIGVuY29kZWQgcmVzdWx0cy4gQW4gYXJyYXkgb2YgYXJyYXlzLCBlLmcuCisgICAgICAg
ICAgICAgIFtbMywnQSddLFsxLCdRJ11dIGVuY29kZXMgQUFBUS4KKyAgICAgICAgIiIiCisgICAg
ICAgIG51bV9idWlsZHMgPSAwCisgICAgICAgIGluZGV4ID0gMAorICAgICAgICBmb3IgcmVzdWx0
IGluIGVuY29kZWRfbGlzdDoKKyAgICAgICAgICAgIG51bV9idWlsZHMgPSBudW1fYnVpbGRzICsg
cmVzdWx0WzBdCisgICAgICAgICAgICBpbmRleCA9IGluZGV4ICsgMQorICAgICAgICAgICAgaWYg
bnVtX2J1aWxkcyA+IHNlbGYuTUFYX05VTUJFUl9PRl9CVUlMRF9SRVNVTFRTX1RPX0xPRzoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZW5jb2RlZF9saXN0WzppbmRleF0KKyAgICAgICAgcmV0dXJu
IGVuY29kZWRfbGlzdAorCisgICAgZGVmIF9ub3JtYWxpemVfcmVzdWx0c19qc29uKHNlbGYsIHRl
c3QsIHRlc3RfbmFtZSwgdGVzdHMpOgorICAgICAgICAiIiIgUHJ1bmUgdGVzdHMgd2hlcmUgYWxs
IHJ1bnMgcGFzcyBvciB0ZXN0cyB0aGF0IG5vIGxvbmdlciBleGlzdCBhbmQKKyAgICAgICAgdHJ1
bmNhdGUgYWxsIHJlc3VsdHMgdG8gbWF4TnVtYmVyT2ZCdWlsZHMuCisKKyAgICAgICAgQXJnczoK
KyAgICAgICAgICB0ZXN0OiBSZXN1bHRzQW5kVGltZXMgb2JqZWN0IGZvciB0aGlzIHRlc3QuCisg
ICAgICAgICAgdGVzdF9uYW1lOiBOYW1lIG9mIHRoZSB0ZXN0LgorICAgICAgICAgIHRlc3RzOiBU
aGUgSlNPTiBvYmplY3Qgd2l0aCBhbGwgdGhlIHRlc3QgcmVzdWx0cyBmb3IgdGhpcyBidWlsZGVy
LgorICAgICAgICAiIiIKKyAgICAgICAgdGVzdFtzZWxmLlJFU1VMVFNdID0gc2VsZi5fcmVtb3Zl
X2l0ZW1zX292ZXJfbWF4X251bWJlcl9vZl9idWlsZHMoCisgICAgICAgICAgICB0ZXN0W3NlbGYu
UkVTVUxUU10pCisgICAgICAgIHRlc3Rbc2VsZi5USU1FU10gPSBzZWxmLl9yZW1vdmVfaXRlbXNf
b3Zlcl9tYXhfbnVtYmVyX29mX2J1aWxkcygKKyAgICAgICAgICAgIHRlc3Rbc2VsZi5USU1FU10p
CisKKyAgICAgICAgaXNfYWxsX3Bhc3MgPSBzZWxmLl9pc19yZXN1bHRzX2FsbF9vZl90eXBlKHRl
c3Rbc2VsZi5SRVNVTFRTXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNlbGYuUEFTU19SRVNVTFQpCisgICAgICAgIGlzX2FsbF9ub19kYXRhID0g
c2VsZi5faXNfcmVzdWx0c19hbGxfb2ZfdHlwZSh0ZXN0W3NlbGYuUkVTVUxUU10sCisgICAgICAg
ICAgICBzZWxmLk5PX0RBVEFfUkVTVUxUKQorICAgICAgICBtYXhfdGltZSA9IG1heChbdGltZVsx
XSBmb3IgdGltZSBpbiB0ZXN0W3NlbGYuVElNRVNdXSkKKworICAgICAgICAjIFJlbW92ZSBhbGwg
cGFzc2VzL25vLWRhdGEgZnJvbSB0aGUgcmVzdWx0cyB0byByZWR1Y2Ugbm9pc2UgYW5kCisgICAg
ICAgICMgZmlsZXNpemUuIElmIGEgdGVzdCBwYXNzZXMgZXZlcnkgcnVuLCBidXQgdGFrZXMgPiBN
SU5fVElNRSB0byBydW4sCisgICAgICAgICMgZG9uJ3QgdGhyb3cgYXdheSB0aGUgZGF0YS4KKyAg
ICAgICAgaWYgaXNfYWxsX25vX2RhdGEgb3IgKGlzX2FsbF9wYXNzIGFuZCBtYXhfdGltZSA8PSBz
ZWxmLk1JTl9USU1FKToKKyAgICAgICAgICAgIGRlbCB0ZXN0c1t0ZXN0X25hbWVdCisKKyAgICBk
ZWYgX2lzX3Jlc3VsdHNfYWxsX29mX3R5cGUoc2VsZiwgcmVzdWx0cywgdHlwZSk6CisgICAgICAg
ICIiIlJldHVybnMgd2hldGhlciBhbGwgdGhlIHJlc3VsdHMgYXJlIG9mIHRoZSBnaXZlbiB0eXBl
CisgICAgICAgIChlLmcuIGFsbCBwYXNzZXMpLiIiIgorICAgICAgICByZXR1cm4gbGVuKHJlc3Vs
dHMpID09IDEgYW5kIHJlc3VsdHNbMF1bMV0gPT0gdHlwZQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS90ZXN0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvcl91
bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdF9wYWNrYWdlL2pz
b25fcmVzdWx0c19nZW5lcmF0b3JfdW5pdHRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTNjNmU5YzQ3YmU5
MWE3MDc2NTQ0ZGRkMzc1YTdiYzQ0YTQyYzk5ZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5lcmF0b3Jf
dW5pdHRlc3QucHkKQEAgLTAsMCArMSwxMjggQEAKKyMhL3Vzci9iaW4vcHl0aG9uCisjIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisj
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworIiIiVW5pdCB0ZXN0cyBmb3IganNvbl9yZXN1bHRzX2dlbmVyYXRvci5weS4i
IiIKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitpbXBvcnQg
cmFuZG9tCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgdGVtcGZpbGUKKworZnJvbSB3ZWJraXRweS50
ZXN0X3BhY2thZ2UuanNvbl9yZXN1bHRzX2dlbmVyYXRvciBpbXBvcnQgSlNPTlJlc3VsdHNHZW5l
cmF0b3IKK2Zyb20gd2Via2l0cHkudGVzdF9wYWNrYWdlIGltcG9ydCB0ZXN0X3Jlc3VsdHMKK2lt
cG9ydCB3ZWJraXRweS50aGlyZHBhcnR5LnNpbXBsZWpzb24gYXMgc2ltcGxlanNvbgorCitCVUlM
REVSX0JBU0VfVVJMID0gImh0dHA6Ly9idWlsZC5jaHJvbWl1bS5vcmcvYnVpbGRib3QvZ3Rlc3Qt
cmVzdWx0cy8iCisKKworY2xhc3MgVGVzdEpTT05HZW5lcmF0aW9uKHVuaXR0ZXN0LlRlc3RDYXNl
KToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYucmVzdWx0c19kaXJlY3Rvcnkg
PSB0ZW1wZmlsZS5ta2R0ZW1wKCkKKyAgICAgICAgc2VsZi5yZXN1bHRzX2pzb25fcGF0aCA9ICcl
cy9yZXN1bHRzLmpzb24nICUgc2VsZi5yZXN1bHRzX2RpcmVjdG9yeQorICAgICAgICBzZWxmLmJ1
aWxkZXJfbmFtZSA9ICdEVU1NWV9CVUlMREVSX05BTUUnCisgICAgICAgIHNlbGYuYnVpbGRfbmFt
ZSA9ICdEVU1NWV9CVUlMRF9OQU1FJworICAgICAgICBzZWxmLmJ1aWxkX251bWJlciA9ICdEVU1N
WV9CVUlMREVSX05VTUJFUicKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2h1
dGlsLnJtdHJlZShzZWxmLnJlc3VsdHNfZGlyZWN0b3J5KQorCisgICAgZGVmIF90ZXN0X2pzb25f
Z2VuZXJhdGlvbihzZWxmLCBwYXNzZWRfdGVzdHMsIGZhaWxlZF90ZXN0cywgc2tpcHBlZF90ZXN0
cyk6CisgICAgICAgICMgUmVzZXQgdGhlIHRlc3QgcmVzdWx0cyBpZiB3ZSBoYXZlIGFueS4KKyAg
ICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi5yZXN1bHRzX2pzb25fcGF0aCk6CisgICAgICAg
ICAgICBvcy5yZW1vdmUoc2VsZi5yZXN1bHRzX2pzb25fcGF0aCkKKworICAgICAgICAjIE1ha2Ug
c3VyZSB3ZSBoYXZlIHNldHMgKHJhdGhlciB0aGFuIGxpc3RzKS4KKyAgICAgICAgcGFzc2VkX3Rl
c3RzID0gc2V0KHBhc3NlZF90ZXN0cykKKyAgICAgICAgc2tpcHBlZF90ZXN0cyA9IHNldChza2lw
cGVkX3Rlc3RzKQorICAgICAgICBpZiBub3QgdHlwZShmYWlsZWRfdGVzdHMpIGlzIGRpY3Q6Cisg
ICAgICAgICAgICBmYWlsZWRfdGVzdHMgPSBkaWN0KFsoZiwgdGVzdF9yZXN1bHRzLlRFWFQpIGZv
ciBmIGluIGZhaWxlZF90ZXN0c10pCisgICAgICAgIHRlc3RzX2xpc3QgPSBwYXNzZWRfdGVzdHMg
fCBzZXQoZmFpbGVkX3Rlc3RzLmtleXMoKSkKKyAgICAgICAgdGVzdF90aW1pbmdzID0ge30KKyAg
ICAgICAgZm9yIHRlc3QgaW4gdGVzdHNfbGlzdDoKKyAgICAgICAgICAgIHRlc3RfdGltaW5nc1t0
ZXN0XSA9IGZsb2F0KHJhbmRvbS5yYW5kaW50KDEsIDEwKSkKKworICAgICAgICAjIEdlbmVyYXRl
IGEgSlNPTiBmaWxlLgorICAgICAgICBKU09OUmVzdWx0c0dlbmVyYXRvcigKKyAgICAgICAgICAg
IHNlbGYuYnVpbGRlcl9uYW1lLCBzZWxmLmJ1aWxkX25hbWUsIHNlbGYuYnVpbGRfbnVtYmVyLAor
ICAgICAgICAgICAgc2VsZi5yZXN1bHRzX2RpcmVjdG9yeSwKKyAgICAgICAgICAgIEJVSUxERVJf
QkFTRV9VUkwsCisgICAgICAgICAgICB0ZXN0X3RpbWluZ3MsCisgICAgICAgICAgICBmYWlsZWRf
dGVzdHMsCisgICAgICAgICAgICBwYXNzZWRfdGVzdHMsCisgICAgICAgICAgICBza2lwcGVkX3Rl
c3RzLAorICAgICAgICAgICAgdGVzdHNfbGlzdCkKKworICAgICAgICAjIEFsaWFzaW5nIHRvIGEg
c2hvcnQgbmFtZSBmb3IgYmV0dGVyIGFjY2VzcyB0byBpdHMgY29uc3RhbnRzLgorICAgICAgICBK
UkcgPSBKU09OUmVzdWx0c0dlbmVyYXRvcgorCisgICAgICAgIGYgPSBvcGVuKHNlbGYucmVzdWx0
c19qc29uX3BhdGgpCisgICAgICAgIGpzb25fZGF0YSA9IGYucmVhZCgpCisgICAgICAgIGpzb25f
ZGF0YSA9IGpzb25fZGF0YVtsZW4oSlJHLkpTT05fUFJFRklYKToKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxlbihqc29uX2RhdGEpIC0gbGVuKEpSRy5KU09OX1NVRkZJWCldCisgICAg
ICAgIGpzb24gPSBzaW1wbGVqc29uLmxvYWRzKGpzb25fZGF0YSkKKworICAgICAgICBzZWxmLmFz
c2VydFRydWUoSlJHLlZFUlNJT05fS0VZIGluIGpzb24pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZShzZWxmLmJ1aWxkZXJfbmFtZSBpbiBqc29uKQorCisgICAgICAgIGJ1aWxkaW5mbyA9IGpzb25b
c2VsZi5idWlsZGVyX25hbWVdCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShKUkcuRklYQUJMRSBp
biBidWlsZGluZm8pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShKUkcuVEVTVFMgaW4gYnVpbGRp
bmZvKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGJ1aWxkaW5mb1tKUkcuQlVJTERfTlVN
QkVSU10pID09IDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShidWlsZGluZm9bSlJHLkJVSUxE
X05VTUJFUlNdWzBdID09IHNlbGYuYnVpbGRfbnVtYmVyKQorCisgICAgICAgIGlmIHRlc3RzX2xp
c3QgIG9yIHNraXBwZWRfdGVzdHM6CisgICAgICAgICAgICBmaXhhYmxlID0gYnVpbGRpbmZvW0pS
Ry5GSVhBQkxFXVswXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpeGFibGVbSlJHLlBB
U1NfUkVTVUxUXSA9PSBsZW4ocGFzc2VkX3Rlc3RzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0
VHJ1ZShmaXhhYmxlW0pSRy5TS0lQX1JFU1VMVF0gPT0gbGVuKHNraXBwZWRfdGVzdHMpKQorCisg
ICAgICAgIGlmIGZhaWxlZF90ZXN0czoKKyAgICAgICAgICAgIHRlc3RzID0gYnVpbGRpbmZvW0pS
Ry5URVNUU10KKyAgICAgICAgICAgIGZvciB0ZXN0X25hbWUsIGZhaWx1cmUgaW4gZmFpbGVkX3Rl
c3RzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ZXN0X25h
bWUgaW4gdGVzdHMpCisgICAgICAgICAgICAgICAgdGVzdCA9IHRlc3RzW3Rlc3RfbmFtZV0KKyAg
ICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodGVzdFtKUkcuUkVTVUxUU11bMF1bMF0gPT0g
MSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodGVzdFtKUkcuUkVTVUxUU11bMF1b
MV0gPT0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlJHLkZBSUxVUkVfVE9fQ0hB
UltmYWlsdXJlXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodGVzdFtKUkcuVElN
RVNdWzBdWzBdID09IDEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRlc3RbSlJH
LlRJTUVTXVswXVsxXSA9PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQodGVz
dF90aW1pbmdzW3Rlc3RfbmFtZV0pKQorCisgICAgZGVmIHRlc3RfanNvbl9nZW5lcmF0aW9uKHNl
bGYpOgorICAgICAgICBzZWxmLl90ZXN0X2pzb25fZ2VuZXJhdGlvbihbXSwgW10sIFtdKQorICAg
ICAgICBzZWxmLl90ZXN0X2pzb25fZ2VuZXJhdGlvbihbJ0EnXSwgW10sIFtdKQorICAgICAgICBz
ZWxmLl90ZXN0X2pzb25fZ2VuZXJhdGlvbihbJ0EnXSwgWydCJywgJ0MnXSwgW10pCisgICAgICAg
IHNlbGYuX3Rlc3RfanNvbl9nZW5lcmF0aW9uKFsnQScsICdCJywgJ0MnXSwgWydEJywgJ0UnXSwg
WydGJywgJ0cnXSkKKyAgICAgICAgc2VsZi5fdGVzdF9qc29uX2dlbmVyYXRpb24oWydBJ10sIHsn
Qic6IHRlc3RfcmVzdWx0cy5JTUFHRSwKKyAgICAgICAgICAgICdDJzogdGVzdF9yZXN1bHRzLlRF
WFQsICdEJzogdGVzdF9yZXN1bHRzLkNSQVNIfSwgWydFJ10pCisKKworaWYgX19uYW1lX18gPT0g
J19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvdGVzdF9wYWNrYWdlL3Rlc3RfcmVzdWx0cy5weSBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdF9wYWNrYWdlL3Rlc3RfcmVzdWx0cy5weQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5mNzUxMjNlMDJmYzBkMGE2ZTVjNDdhYzRkMDNhY2FlOWYxZjA4OGFkCi0tLSAvZGV2L251
bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90ZXN0X3BhY2thZ2UvdGVzdF9y
ZXN1bHRzLnB5CkBAIC0wLDAgKzEsMzIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
IyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKKyMgVGVzdCByZXN1bHRzIGFuZCBtb2RpZmllciBjb25zdGFudHMuCisoUEFT
UywgRkFJTCwgVEVYVCwgSU1BR0UsIElNQUdFX1BMVVNfVEVYVCwgVElNRU9VVCwgQ1JBU0gsIFNL
SVAsIFdPTlRGSVgsCisgREVGRVIsIFNMT1csIFJFQkFTRUxJTkUsIE1JU1NJTkcsIEZMQUtZLCBO
T1csIE5PTkUpID0gcmFuZ2UoMTYpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59169</attachid>
            <date>2010-06-18 16:40:19 -0700</date>
            <delta_ts>2010-06-28 15:23:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-38693-20100618164018.patch</filename>
            <type>text/plain</type>
            <size>48365</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAxYjk5MzZkNDJhMWQwYmE0MzU0YWQyM2M0YjQ1NjU0OWVkOGYwNmI1Li5lMGUzMmRj
N2FiNTQzNjJlZGI2OTBlOWI5ZmJhMWJkYjllZTllYWY0IDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAK
KzIwMTAtMDYtMTggIEtpbnVrbyBZYXN1ZGEgIDxraW51a29AY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGNsZWFudXAganNvbl9y
ZXN1bHRzX2dlbmVyYXRvciBkZXBlbmRlbmNpZXMgc28gdGhhdCBub24tbGF5b3V0LXRlc3RzIGNh
biBhbHNvIHVzZSBpdCBzYWZlbHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTM4NjkzCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi90
ZXN0L19faW5pdF9fLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi90ZXN0L2pzb25fcmVzdWx0c19nZW5lcmF0b3IucHk6IEFkZGVkLiAoTW92ZWQgd2l0aCBzbGln
aHQgbW9kaWZpY2F0aW9uIGZyb20gbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlKS4KKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi90ZXN0L2pzb25fcmVzdWx0c19nZW5lcmF0b3Jf
dW5pdHRlc3QucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3Rl
c3QvdGVzdF9yZXN1bHRzLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX2xheW91dF9yZXN1bHRzX2dlbmVyYXRvci5w
eToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2Fn
ZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfZXhwZWN0YXRpb25zLnB5OgorCiAyMDEw
LTA2LTE3ICBUb255IENoYW5nICA8dG9ueUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgS2VudCBUYW11cmEuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi90ZXN0L19faW5pdF9fLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vdGVzdC9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZjY1YmVlNWJiNzdlOTZlYmM3
Y2Q5YzQ3NjQwNjkwZmJkYThhYzE5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vdGVzdC9fX2luaXRfXy5weQpAQCAtMCwwICsxIEBACisjIFJl
cXVpcmVkIGZvciBQeXRob24gdG8gc2VhcmNoIHRoaXMgZGlyZWN0b3J5IGZvciBtb2R1bGUgZmls
ZXMKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3Rlc3Qv
anNvbl9yZXN1bHRzX2dlbmVyYXRvci5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3Rlc3QvanNvbl9yZXN1bHRzX2dlbmVyYXRvci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNTE1MjUy
ZDBlYjMxMDE0Yzg2M2MwOTVmZDFmZTljMzY2NjI1ZWFlCi0tLSAvZGV2L251bGwKKysrIGIvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vdGVzdC9qc29uX3Jlc3VsdHNfZ2VuZXJh
dG9yLnB5CkBAIC0wLDAgKzEsNDMyIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
IyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHdpdGhfc3RhdGVtZW50CisKK2ltcG9y
dCBjb2RlY3MKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKK2ltcG9ydCBzdWJwcm9jZXNzCitp
bXBvcnQgc3lzCitpbXBvcnQgdGltZQoraW1wb3J0IHVybGxpYjIKK2ltcG9ydCB4bWwuZG9tLm1p
bmlkb20KKworZnJvbSB3ZWJraXRweS5jb21tb24udGVzdCBpbXBvcnQgdGVzdF9yZXN1bHRzCitp
bXBvcnQgd2Via2l0cHkudGhpcmRwYXJ0eS5zaW1wbGVqc29uIGFzIHNpbXBsZWpzb24KKworX2xv
ZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ3ZWJraXRweS5jb21tb24udGVzdC5qc29uX3Jlc3VsdHNf
Z2VuZXJhdG9yIikKKworCitjbGFzcyBKU09OUmVzdWx0c0dlbmVyYXRvcihvYmplY3QpOgorICAg
ICIiIkEgSlNPTiByZXN1bHRzIGdlbmVyYXRvciBmb3IgZ2VuZXJpYyB0ZXN0cy4iIiIKKworICAg
IE1BWF9OVU1CRVJfT0ZfQlVJTERfUkVTVUxUU19UT19MT0cgPSA3NTAKKyAgICAjIE1pbiB0aW1l
IChzZWNvbmRzKSB0aGF0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIEpTT04uCisgICAgTUlOX1RJTUUg
PSAxCisgICAgSlNPTl9QUkVGSVggPSAiQUREX1JFU1VMVFMoIgorICAgIEpTT05fU1VGRklYID0g
Iik7IgorICAgIFBBU1NfUkVTVUxUID0gIlAiCisgICAgU0tJUF9SRVNVTFQgPSAiWCIKKyAgICBO
T19EQVRBX1JFU1VMVCA9ICJOIgorICAgIFZFUlNJT04gPSAzCisgICAgVkVSU0lPTl9LRVkgPSAi
dmVyc2lvbiIKKyAgICBSRVNVTFRTID0gInJlc3VsdHMiCisgICAgVElNRVMgPSAidGltZXMiCisg
ICAgQlVJTERfTlVNQkVSUyA9ICJidWlsZE51bWJlcnMiCisgICAgVElNRSA9ICJzZWNvbmRzU2lu
Y2VFcG9jaCIKKyAgICBURVNUUyA9ICJ0ZXN0cyIKKworICAgIEZJWEFCTEVfQ09VTlQgPSAiZml4
YWJsZUNvdW50IgorICAgIEZJWEFCTEUgPSAiZml4YWJsZUNvdW50cyIKKyAgICBBTExfRklYQUJM
RV9DT1VOVCA9ICJhbGxGaXhhYmxlQ291bnQiCisKKyAgICAjIE5vdGUgdGhhdCB3ZSBvbWl0IHRl
c3RfcmVzdWx0cy5GQUlMIGZyb20gdGhpcyBsaXN0IGJlY2F1c2UKKyAgICAjIGl0IHNob3VsZCBu
ZXZlciBzaG93IHVwIChpdCdzIGEgbGVnYWN5IGlucHV0IGV4cGVjdGF0aW9uLCBuZXZlcgorICAg
ICMgYW4gb3V0cHV0IGV4cGVjdGF0aW9uKS4KKyAgICBGQUlMVVJFX1RPX0NIQVIgPSB7dGVzdF9y
ZXN1bHRzLkNSQVNIOiAiQyIsCisgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfcmVzdWx0cy5U
SU1FT1VUOiAiVCIsCisgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfcmVzdWx0cy5JTUFHRTog
IkkiLAorICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3Jlc3VsdHMuVEVYVDogIkYiLAorICAg
ICAgICAgICAgICAgICAgICAgICB0ZXN0X3Jlc3VsdHMuTUlTU0lORzogIk8iLAorICAgICAgICAg
ICAgICAgICAgICAgICB0ZXN0X3Jlc3VsdHMuSU1BR0VfUExVU19URVhUOiAiWiJ9CisgICAgRkFJ
TFVSRV9DSEFSUyA9IEZBSUxVUkVfVE9fQ0hBUi52YWx1ZXMoKQorCisgICAgUkVTVUxUU19GSUxF
TkFNRSA9ICJyZXN1bHRzLmpzb24iCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYnVpbGRlcl9u
YW1lLCBidWlsZF9uYW1lLCBidWlsZF9udW1iZXIsCisgICAgICAgIHJlc3VsdHNfZmlsZV9iYXNl
X3BhdGgsIGJ1aWxkZXJfYmFzZV91cmwsCisgICAgICAgIHRlc3RfdGltaW5ncywgZmFpbHVyZXMs
IHBhc3NlZF90ZXN0cywgc2tpcHBlZF90ZXN0cywgYWxsX3Rlc3RzLAorICAgICAgICBzdm5fcmVw
b3NpdG9yaWVzPU5vbmUpOgorICAgICAgICAiIiJNb2RpZmllcyB0aGUgcmVzdWx0cy5qc29uIGZp
bGUuIEdyYWJzIGl0IG9mZiB0aGUgYXJjaGl2ZSBkaXJlY3RvcnkKKyAgICAgICAgaWYgaXQgaXMg
bm90IGZvdW5kIGxvY2FsbHkuCisKKyAgICAgICAgQXJncworICAgICAgICAgIGJ1aWxkZXJfbmFt
ZTogdGhlIGJ1aWxkZXIgbmFtZSAoZS5nLiBXZWJraXQpLgorICAgICAgICAgIGJ1aWxkX25hbWU6
IHRoZSBidWlsZCBuYW1lIChlLmcuIHdlYmtpdC1yZWwpLgorICAgICAgICAgIGJ1aWxkX251bWJl
cjogdGhlIGJ1aWxkIG51bWJlci4KKyAgICAgICAgICByZXN1bHRzX2ZpbGVfYmFzZV9wYXRoOiBB
YnNvbHV0ZSBwYXRoIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUKKyAgICAgICAgICAg
ICAgcmVzdWx0cyBqc29uIGZpbGUuCisgICAgICAgICAgYnVpbGRlcl9iYXNlX3VybDogdGhlIFVS
TCB3aGVyZSB3ZSBoYXZlIHRoZSBhcmNoaXZlZCB0ZXN0IHJlc3VsdHMuCisgICAgICAgICAgdGVz
dF90aW1pbmdzOiBNYXAgb2YgdGVzdCBuYW1lIHRvIGEgdGVzdF9ydW4tdGltZS4KKyAgICAgICAg
ICBmYWlsdXJlczogTWFwIG9mIHRlc3QgbmFtZSB0byBhIGZhaWx1cmUgdHlwZSAob2YgdGVzdF9y
ZXN1bHRzKSwgb3IKKyAgICAgICAgICAgICAgYSBsaXN0IChvciBzZXQpIG9mIGZhaWxlZCB0ZXN0
IG5hbWVzLgorICAgICAgICAgIHBhc3NlZF90ZXN0czogQSBzZXQgY29udGFpbmluZyBhbGwgdGhl
IHBhc3NlZCB0ZXN0cy4KKyAgICAgICAgICBza2lwcGVkX3Rlc3RzOiBBIHNldCBjb250YWluaW5n
IGFsbCB0aGUgc2tpcHBlZCB0ZXN0cy4KKyAgICAgICAgICBhbGxfdGVzdHM6IExpc3Qgb2YgYWxs
IHRoZSB0ZXN0cyB0aGF0IHdlcmUgcnVuLiAgVGhpcyBzaG91bGQgbm90CisgICAgICAgICAgICAg
IGluY2x1ZGUgc2tpcHBlZCB0ZXN0cy4KKyAgICAgICAgICBzdm5fcmVwb3NpdG9yaWVzOiBBIChq
c29uX2ZpZWxkX25hbWUsIHN2bl9wYXRoKSBwYWlyIGZvciBTVk4gcmVwb3NpdG9yaWVzCisgICAg
ICAgICAgICAgIHRoYXQgdGVzdHMgcmVseSBvbi4gIFRoZSBTVk4gcmV2aXNpb24gd2lsbCBiZSBp
bmNsdWRlZCBpbiB0aGUgSlNPTgorICAgICAgICAgICAgICB3aXRoIHRoZSBnaXZlbiBqc29uX2Zp
ZWxkX25hbWUuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9idWlsZGVyX25hbWUgPSBidWls
ZGVyX25hbWUKKyAgICAgICAgc2VsZi5fYnVpbGRfbmFtZSA9IGJ1aWxkX25hbWUKKyAgICAgICAg
c2VsZi5fYnVpbGRfbnVtYmVyID0gYnVpbGRfbnVtYmVyCisgICAgICAgIHNlbGYuX2J1aWxkZXJf
YmFzZV91cmwgPSBidWlsZGVyX2Jhc2VfdXJsCisgICAgICAgIHNlbGYuX3Jlc3VsdHNfZmlsZV9w
YXRoID0gb3MucGF0aC5qb2luKHJlc3VsdHNfZmlsZV9iYXNlX3BhdGgsCisgICAgICAgICAgICBz
ZWxmLlJFU1VMVFNfRklMRU5BTUUpCisgICAgICAgIHNlbGYuX3Rlc3RfdGltaW5ncyA9IHRlc3Rf
dGltaW5ncworICAgICAgICBzZWxmLl9mYWlsdXJlcyA9IHt9CisgICAgICAgIGlmIHR5cGUoZmFp
bHVyZXMpIGlzIGRpY3Q6CisgICAgICAgICAgICBzZWxmLl9mYWlsdXJlcyA9IGZhaWx1cmVzCisg
ICAgICAgIGVsaWYgZ2V0YXR0cihmYWlsdXJlcywgJ19faXRlcl9fJywgRmFsc2UpOgorICAgICAg
ICAgICAgIyBJZiB0aGUgZ2l2ZW4gZmFpbHVyZXMgaXMgaXRlcmFibGUgYnV0IG5vdCBhIGRpY3Qs
IGxldHMgYXNzdW1lCisgICAgICAgICAgICAjIHRoYXQgZXZlcnkgZmFpbHVyZSB3YXMgYSBURVhU
IGZhaWx1cmUuCisgICAgICAgICAgICBzZWxmLl9mYWlsdXJlcyA9IGRpY3QoWyhmLCB0ZXN0X3Jl
c3VsdHMuVEVYVCkgZm9yIGYgaW4gZmFpbHVyZXNdKQorICAgICAgICBzZWxmLl9wYXNzZWRfdGVz
dHMgPSBwYXNzZWRfdGVzdHMKKyAgICAgICAgc2VsZi5fc2tpcHBlZF90ZXN0cyA9IHNraXBwZWRf
dGVzdHMKKyAgICAgICAgc2VsZi5fYWxsX3Rlc3RzID0gYWxsX3Rlc3RzCisKKyAgICAgICAgc2Vs
Zi5fc3ZuX3JlcG9zaXRvcmllcyA9IHN2bl9yZXBvc2l0b3JpZXMKKyAgICAgICAgaWYgbm90IHNl
bGYuX3N2bl9yZXBvc2l0b3JpZXM6CisgICAgICAgICAgICBzZWxmLl9zdm5fcmVwb3NpdG9yaWVz
ID0ge30KKworICAgICAgICBzZWxmLl9nZW5lcmF0ZV9qc29uX291dHB1dCgpCisKKyAgICBkZWYg
X2dlbmVyYXRlX2pzb25fb3V0cHV0KHNlbGYpOgorICAgICAgICAiIiJHZW5lcmF0ZXMgdGhlIEpT
T04gb3V0cHV0IGZpbGUuIiIiCisgICAgICAgIGpzb24gPSBzZWxmLl9nZXRfanNvbigpCisgICAg
ICAgIGlmIGpzb246CisgICAgICAgICAgICByZXN1bHRzX2ZpbGUgPSBjb2RlY3Mub3BlbihzZWxm
Ll9yZXN1bHRzX2ZpbGVfcGF0aCwgInciLCAidXRmLTgiKQorICAgICAgICAgICAgcmVzdWx0c19m
aWxlLndyaXRlKGpzb24pCisgICAgICAgICAgICByZXN1bHRzX2ZpbGUuY2xvc2UoKQorCisgICAg
IyBGSVhNRTogQ2FsbGVycyBzaG91bGQgdXNlIHNjbS5weSBpbnN0ZWFkLgorICAgIGRlZiBfZ2V0
X3N2bl9yZXZpc2lvbihzZWxmLCBpbl9kaXJlY3RvcnkpOgorICAgICAgICAiIiJSZXR1cm5zIHRo
ZSBzdm4gcmV2aXNpb24gZm9yIHRoZSBnaXZlbiBkaXJlY3RvcnkuCisKKyAgICAgICAgQXJnczoK
KyAgICAgICAgICBpbl9kaXJlY3Rvcnk6IFRoZSBkaXJlY3Rvcnkgd2hlcmUgc3ZuIGlzIHRvIGJl
IHJ1bi4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9p
bihpbl9kaXJlY3RvcnksICcuc3ZuJykpOgorICAgICAgICAgICAgIyBOb3RlOiBOb3QgdGhyZWFk
IHNhZmU6IGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyMzIwCisgICAgICAgICAgICBvdXRw
dXQgPSBzdWJwcm9jZXNzLlBvcGVuKFsic3ZuIiwgImluZm8iLCAiLS14bWwiXSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3dkPWluX2RpcmVjdG9yeSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hlbGw9KHN5cy5wbGF0Zm9ybSA9PSAnd2lu
MzInKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnBy
b2Nlc3MuUElQRSkuY29tbXVuaWNhdGUoKVswXQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgICAgIGRvbSA9IHhtbC5kb20ubWluaWRvbS5wYXJzZVN0cmluZyhvdXRwdXQpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGRvbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZW50cnknKVswXS5nZXRB
dHRyaWJ1dGUoCisgICAgICAgICAgICAgICAgICAgICdyZXZpc2lvbicpCisgICAgICAgICAgICBl
eGNlcHQgeG1sLnBhcnNlcnMuZXhwYXQuRXhwYXRFcnJvcjoKKyAgICAgICAgICAgICAgICByZXR1
cm4gIiIKKyAgICAgICAgcmV0dXJuICIiCisKKyAgICBkZWYgX2dldF9hcmNoaXZlZF9qc29uX3Jl
c3VsdHMoc2VsZik6CisgICAgICAgICIiIlJlYWRzIG9sZCByZXN1bHRzIEpTT04gZmlsZSBpZiBp
dCBleGlzdHMuCisgICAgICAgIFJldHVybnMgKGFyY2hpdmVkX3Jlc3VsdHMsIGVycm9yKSB0dXBs
ZSB3aGVyZSBlcnJvciBpcyBOb25lIGlmIHJlc3VsdHMKKyAgICAgICAgd2VyZSBzdWNjZXNzZnVs
bHkgcmVhZC4KKyAgICAgICAgIiIiCisgICAgICAgIHJlc3VsdHNfanNvbiA9IHt9CisgICAgICAg
IG9sZF9yZXN1bHRzID0gTm9uZQorICAgICAgICBlcnJvciA9IE5vbmUKKworICAgICAgICBpZiBv
cy5wYXRoLmV4aXN0cyhzZWxmLl9yZXN1bHRzX2ZpbGVfcGF0aCk6CisgICAgICAgICAgICB3aXRo
IGNvZGVjcy5vcGVuKHNlbGYuX3Jlc3VsdHNfZmlsZV9wYXRoLCAiciIsICJ1dGYtOCIpIGFzIGZp
bGU6CisgICAgICAgICAgICAgICAgb2xkX3Jlc3VsdHMgPSBmaWxlLnJlYWQoKQorICAgICAgICBl
bGlmIHNlbGYuX2J1aWxkZXJfYmFzZV91cmw6CisgICAgICAgICAgICAjIENoZWNrIGlmIHdlIGhh
dmUgdGhlIGFyY2hpdmVkIEpTT04gZmlsZSBvbiB0aGUgYnVpbGRib3Qgc2VydmVyLgorICAgICAg
ICAgICAgcmVzdWx0c19maWxlX3VybCA9IChzZWxmLl9idWlsZGVyX2Jhc2VfdXJsICsKKyAgICAg
ICAgICAgICAgICBzZWxmLl9idWlsZF9uYW1lICsgIi8iICsgc2VsZi5SRVNVTFRTX0ZJTEVOQU1F
KQorICAgICAgICAgICAgX2xvZy5lcnJvcigiTG9jYWwgcmVzdWx0cy5qc29uIGZpbGUgZG9lcyBu
b3QgZXhpc3QuIEdyYWJiaW5nICIKKyAgICAgICAgICAgICAgICAgICAgICAgIml0IG9mZiB0aGUg
YXJjaGl2ZSBhdCAiICsgcmVzdWx0c19maWxlX3VybCkKKworICAgICAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgICAgIHJlc3VsdHNfZmlsZSA9IHVybGxpYjIudXJsb3BlbihyZXN1bHRzX2ZpbGVf
dXJsKQorICAgICAgICAgICAgICAgIGluZm8gPSByZXN1bHRzX2ZpbGUuaW5mbygpCisgICAgICAg
ICAgICAgICAgb2xkX3Jlc3VsdHMgPSByZXN1bHRzX2ZpbGUucmVhZCgpCisgICAgICAgICAgICBl
eGNlcHQgdXJsbGliMi5IVFRQRXJyb3IsIGh0dHBfZXJyb3I6CisgICAgICAgICAgICAgICAgIyBB
IG5vbi00eHggc3RhdHVzIGNvZGUgbWVhbnMgdGhlIGJvdCBpcyBob3NlZCBmb3Igc29tZSByZWFz
b24KKyAgICAgICAgICAgICAgICAjIGFuZCB3ZSBjYW4ndCBncmFiIHRoZSByZXN1bHRzLmpzb24g
ZmlsZSBvZmYgb2YgaXQuCisgICAgICAgICAgICAgICAgaWYgKGh0dHBfZXJyb3IuY29kZSA8IDQw
MCBhbmQgaHR0cF9lcnJvci5jb2RlID49IDUwMCk6CisgICAgICAgICAgICAgICAgICAgIGVycm9y
ID0gaHR0cF9lcnJvcgorICAgICAgICAgICAgZXhjZXB0IHVybGxpYjIuVVJMRXJyb3IsIHVybF9l
cnJvcjoKKyAgICAgICAgICAgICAgICBlcnJvciA9IHVybF9lcnJvcgorCisgICAgICAgIGlmIG9s
ZF9yZXN1bHRzOgorICAgICAgICAgICAgIyBTdHJpcCB0aGUgcHJlZml4IGFuZCBzdWZmaXggc28g
d2UgY2FuIGdldCB0aGUgYWN0dWFsIEpTT04gb2JqZWN0LgorICAgICAgICAgICAgb2xkX3Jlc3Vs
dHMgPSBvbGRfcmVzdWx0c1tsZW4oc2VsZi5KU09OX1BSRUZJWCk6CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxlbihvbGRfcmVzdWx0cykgLSBsZW4oc2VsZi5KU09OX1NV
RkZJWCldCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXN1bHRzX2pzb24g
PSBzaW1wbGVqc29uLmxvYWRzKG9sZF9yZXN1bHRzKQorICAgICAgICAgICAgZXhjZXB0OgorICAg
ICAgICAgICAgICAgIF9sb2cuZGVidWcoInJlc3VsdHMuanNvbiB3YXMgbm90IHZhbGlkIEpTT04u
IENsb2JiZXJpbmcuIikKKyAgICAgICAgICAgICAgICAjIFRoZSBKU09OIGZpbGUgaXMgbm90IHZh
bGlkIEpTT04uIEp1c3QgY2xvYmJlciB0aGUgcmVzdWx0cy4KKyAgICAgICAgICAgICAgICByZXN1
bHRzX2pzb24gPSB7fQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgX2xvZy5kZWJ1ZygnT2xk
IEpTT04gcmVzdWx0cyBkbyBub3QgZXhpc3QuIFN0YXJ0aW5nIGZyZXNoLicpCisgICAgICAgICAg
ICByZXN1bHRzX2pzb24gPSB7fQorCisgICAgICAgIHJldHVybiByZXN1bHRzX2pzb24sIGVycm9y
CisKKyAgICBkZWYgX2dldF9qc29uKHNlbGYpOgorICAgICAgICAiIiJHZXRzIHRoZSByZXN1bHRz
IGZvciB0aGUgcmVzdWx0cy5qc29uIGZpbGUuIiIiCisgICAgICAgIHJlc3VsdHNfanNvbiwgZXJy
b3IgPSBzZWxmLl9nZXRfYXJjaGl2ZWRfanNvbl9yZXN1bHRzKCkKKyAgICAgICAgaWYgZXJyb3I6
CisgICAgICAgICAgICAjIElmIHRoZXJlIHdhcyBhbiBlcnJvciBkb24ndCB3cml0ZSBhIHJlc3Vs
dHMuanNvbgorICAgICAgICAgICAgIyBmaWxlIGF0IGFsbCBhcyBpdCB3b3VsZCBsb3NlIGFsbCB0
aGUgaW5mb3JtYXRpb24gb24gdGhlIGJvdC4KKyAgICAgICAgICAgIF9sb2cuZXJyb3IoIkFyY2hp
dmUgZGlyZWN0b3J5IGlzIGluYWNjZXNzaWJsZS4gTm90IG1vZGlmeWluZyAiCisgICAgICAgICAg
ICAgICAgICAgICAgICJvciBjbG9iYmVyaW5nIHRoZSByZXN1bHRzLmpzb24gZmlsZTogIiArIHN0
cihlcnJvcikpCisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGJ1aWxkZXJfbmFt
ZSA9IHNlbGYuX2J1aWxkZXJfbmFtZQorICAgICAgICBpZiByZXN1bHRzX2pzb24gYW5kIGJ1aWxk
ZXJfbmFtZSBub3QgaW4gcmVzdWx0c19qc29uOgorICAgICAgICAgICAgX2xvZy5kZWJ1ZygiQnVp
bGRlciBuYW1lICglcykgaXMgbm90IGluIHRoZSByZXN1bHRzLmpzb24gZmlsZS4iCisgICAgICAg
ICAgICAgICAgICAgICAgICUgYnVpbGRlcl9uYW1lKQorCisgICAgICAgIHNlbGYuX2NvbnZlcnRf
anNvbl90b19jdXJyZW50X3ZlcnNpb24ocmVzdWx0c19qc29uKQorCisgICAgICAgIGlmIGJ1aWxk
ZXJfbmFtZSBub3QgaW4gcmVzdWx0c19qc29uOgorICAgICAgICAgICAgcmVzdWx0c19qc29uW2J1
aWxkZXJfbmFtZV0gPSAoCisgICAgICAgICAgICAgICAgc2VsZi5fY3JlYXRlX3Jlc3VsdHNfZm9y
X2J1aWxkZXJfanNvbigpKQorCisgICAgICAgIHJlc3VsdHNfZm9yX2J1aWxkZXIgPSByZXN1bHRz
X2pzb25bYnVpbGRlcl9uYW1lXQorCisgICAgICAgIHNlbGYuX2luc2VydF9nZW5lcmljX21ldGFk
YXRhKHJlc3VsdHNfZm9yX2J1aWxkZXIpCisKKyAgICAgICAgc2VsZi5faW5zZXJ0X2ZhaWx1cmVf
c3VtbWFyaWVzKHJlc3VsdHNfZm9yX2J1aWxkZXIpCisKKyAgICAgICAgIyBVcGRhdGUgdGhlIGFs
bCBmYWlsaW5nIHRlc3RzIHdpdGggcmVzdWx0IHR5cGUgYW5kIHRpbWUuCisgICAgICAgIHRlc3Rz
ID0gcmVzdWx0c19mb3JfYnVpbGRlcltzZWxmLlRFU1RTXQorICAgICAgICBhbGxfZmFpbGluZ190
ZXN0cyA9IHNldChzZWxmLl9mYWlsdXJlcy5pdGVya2V5cygpKQorICAgICAgICBhbGxfZmFpbGlu
Z190ZXN0cy51cGRhdGUodGVzdHMuaXRlcmtleXMoKSkKKyAgICAgICAgZm9yIHRlc3QgaW4gYWxs
X2ZhaWxpbmdfdGVzdHM6CisgICAgICAgICAgICBzZWxmLl9pbnNlcnRfdGVzdF90aW1lX2FuZF9y
ZXN1bHQodGVzdCwgdGVzdHMpCisKKyAgICAgICAgIyBTcGVjaWZ5IHNlcGFyYXRvcnMgaW4gb3Jk
ZXIgdG8gZ2V0IGNvbXBhY3QgZW5jb2RpbmcuCisgICAgICAgIHJlc3VsdHNfc3RyID0gc2ltcGxl
anNvbi5kdW1wcyhyZXN1bHRzX2pzb24sIHNlcGFyYXRvcnM9KCcsJywgJzonKSkKKyAgICAgICAg
cmV0dXJuIHNlbGYuSlNPTl9QUkVGSVggKyByZXN1bHRzX3N0ciArIHNlbGYuSlNPTl9TVUZGSVgK
KworICAgIGRlZiBfaW5zZXJ0X2ZhaWx1cmVfc3VtbWFyaWVzKHNlbGYsIHJlc3VsdHNfZm9yX2J1
aWxkZXIpOgorICAgICAgICAiIiJJbnNlcnRzIGFnZ3JlZ2F0ZSBwYXNzL2ZhaWx1cmUgc3RhdGlz
dGljcyBpbnRvIHRoZSBKU09OLgorICAgICAgICBUaGlzIG1ldGhvZCByZWFkcyBzZWxmLl9za2lw
cGVkX3Rlc3RzLCBzZWxmLl9wYXNzZWRfdGVzdHMgYW5kCisgICAgICAgIHNlbGYuX2ZhaWx1cmVz
IGFuZCBpbnNlcnRzIEZJWEFCTEUsIEZJWEFCTEVfQ09VTlQgYW5kIEFMTF9GSVhBQkxFX0NPVU5U
CisgICAgICAgIGVudHJpZXMuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICByZXN1bHRzX2Zv
cl9idWlsZGVyOiBEaWN0aW9uYXJ5IGNvbnRhaW5pbmcgdGhlIHRlc3QgcmVzdWx0cyBmb3IgYQor
ICAgICAgICAgICAgICBzaW5nbGUgYnVpbGRlci4KKyAgICAgICAgIiIiCisgICAgICAgICMgSW5z
ZXJ0IHRoZSBudW1iZXIgb2YgdGVzdHMgdGhhdCBmYWlsZWQuCisgICAgICAgIHNlbGYuX2luc2Vy
dF9pdGVtX2ludG9fcmF3X2xpc3QocmVzdWx0c19mb3JfYnVpbGRlciwKKyAgICAgICAgICAgIGxl
bihzZXQoc2VsZi5fZmFpbHVyZXMua2V5cygpKSB8IHNlbGYuX3NraXBwZWRfdGVzdHMpLAorICAg
ICAgICAgICAgc2VsZi5GSVhBQkxFX0NPVU5UKQorCisgICAgICAgICMgQ3JlYXRlIGEgcGFzcy9z
a2lwL2ZhaWx1cmUgc3VtbWFyeSBkaWN0aW9uYXJ5LgorICAgICAgICBlbnRyeSA9IHt9CisgICAg
ICAgIGVudHJ5W3NlbGYuU0tJUF9SRVNVTFRdID0gbGVuKHNlbGYuX3NraXBwZWRfdGVzdHMpCisg
ICAgICAgIGVudHJ5W3NlbGYuUEFTU19SRVNVTFRdID0gbGVuKHNlbGYuX3Bhc3NlZF90ZXN0cykK
KyAgICAgICAgZ2V0ID0gZW50cnkuZ2V0CisgICAgICAgIGZvciBmYWlsdXJlX3R5cGUgaW4gc2Vs
Zi5fZmFpbHVyZXMudmFsdWVzKCk6CisgICAgICAgICAgICBmYWlsdXJlX2NoYXIgPSBzZWxmLkZB
SUxVUkVfVE9fQ0hBUltmYWlsdXJlX3R5cGVdCisgICAgICAgICAgICBlbnRyeVtmYWlsdXJlX2No
YXJdID0gZ2V0KGZhaWx1cmVfY2hhciwgMCkgKyAxCisKKyAgICAgICAgIyBJbnNlcnQgdGhlIHBh
c3Mvc2tpcC9mYWlsdXJlIHN1bW1hcnkgZGljdGlvbmFyeS4KKyAgICAgICAgc2VsZi5faW5zZXJ0
X2l0ZW1faW50b19yYXdfbGlzdChyZXN1bHRzX2Zvcl9idWlsZGVyLCBlbnRyeSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLkZJWEFCTEUpCisKKyAgICAgICAg
IyBJbnNlcnQgdGhlIG51bWJlciBvZiBhbGwgdGhlIHRlc3RzIHRoYXQgYXJlIHN1cHBvc2VkIHRv
IHBhc3MuCisgICAgICAgIHNlbGYuX2luc2VydF9pdGVtX2ludG9fcmF3X2xpc3QocmVzdWx0c19m
b3JfYnVpbGRlciwKKyAgICAgICAgICAgIGxlbihzZWxmLl9za2lwcGVkX3Rlc3RzIHwgc2VsZi5f
YWxsX3Rlc3RzKSwKKyAgICAgICAgICAgIHNlbGYuQUxMX0ZJWEFCTEVfQ09VTlQpCisKKyAgICBk
ZWYgX2luc2VydF9pdGVtX2ludG9fcmF3X2xpc3Qoc2VsZiwgcmVzdWx0c19mb3JfYnVpbGRlciwg
aXRlbSwga2V5KToKKyAgICAgICAgIiIiSW5zZXJ0cyB0aGUgaXRlbSBpbnRvIHRoZSBsaXN0IHdp
dGggdGhlIGdpdmVuIGtleSBpbiB0aGUgcmVzdWx0cyBmb3IKKyAgICAgICAgdGhpcyBidWlsZGVy
LiBDcmVhdGVzIHRoZSBsaXN0IGlmIG5vIHN1Y2ggbGlzdCBleGlzdHMuCisKKyAgICAgICAgQXJn
czoKKyAgICAgICAgICByZXN1bHRzX2Zvcl9idWlsZGVyOiBEaWN0aW9uYXJ5IGNvbnRhaW5pbmcg
dGhlIHRlc3QgcmVzdWx0cyBmb3IgYQorICAgICAgICAgICAgICBzaW5nbGUgYnVpbGRlci4KKyAg
ICAgICAgICBpdGVtOiBOdW1iZXIgb3Igc3RyaW5nIHRvIGluc2VydCBpbnRvIHRoZSBsaXN0Lgor
ICAgICAgICAgIGtleTogS2V5IGluIHJlc3VsdHNfZm9yX2J1aWxkZXIgZm9yIHRoZSBsaXN0IHRv
IGluc2VydCBpbnRvLgorICAgICAgICAiIiIKKyAgICAgICAgaWYga2V5IGluIHJlc3VsdHNfZm9y
X2J1aWxkZXI6CisgICAgICAgICAgICByYXdfbGlzdCA9IHJlc3VsdHNfZm9yX2J1aWxkZXJba2V5
XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmF3X2xpc3QgPSBbXQorCisgICAgICAgIHJh
d19saXN0Lmluc2VydCgwLCBpdGVtKQorICAgICAgICByYXdfbGlzdCA9IHJhd19saXN0WzpzZWxm
Lk1BWF9OVU1CRVJfT0ZfQlVJTERfUkVTVUxUU19UT19MT0ddCisgICAgICAgIHJlc3VsdHNfZm9y
X2J1aWxkZXJba2V5XSA9IHJhd19saXN0CisKKyAgICBkZWYgX2luc2VydF9pdGVtX3J1bl9sZW5n
dGhfZW5jb2RlZChzZWxmLCBpdGVtLCBlbmNvZGVkX3Jlc3VsdHMpOgorICAgICAgICAiIiJJbnNl
cnRzIHRoZSBpdGVtIGludG8gdGhlIHJ1bi1sZW5ndGggZW5jb2RlZCByZXN1bHRzLgorCisgICAg
ICAgIEFyZ3M6CisgICAgICAgICAgaXRlbTogU3RyaW5nIG9yIG51bWJlciB0byBpbnNlcnQuCisg
ICAgICAgICAgZW5jb2RlZF9yZXN1bHRzOiBydW4tbGVuZ3RoIGVuY29kZWQgcmVzdWx0cy4gQW4g
YXJyYXkgb2YgYXJyYXlzLCBlLmcuCisgICAgICAgICAgICAgIFtbMywnQSddLFsxLCdRJ11dIGVu
Y29kZXMgQUFBUS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGxlbihlbmNvZGVkX3Jlc3VsdHMp
IGFuZCBpdGVtID09IGVuY29kZWRfcmVzdWx0c1swXVsxXToKKyAgICAgICAgICAgIG51bV9yZXN1
bHRzID0gZW5jb2RlZF9yZXN1bHRzWzBdWzBdCisgICAgICAgICAgICBpZiBudW1fcmVzdWx0cyA8
PSBzZWxmLk1BWF9OVU1CRVJfT0ZfQlVJTERfUkVTVUxUU19UT19MT0c6CisgICAgICAgICAgICAg
ICAgZW5jb2RlZF9yZXN1bHRzWzBdWzBdID0gbnVtX3Jlc3VsdHMgKyAxCisgICAgICAgIGVsc2U6
CisgICAgICAgICAgICAjIFVzZSBhIGxpc3QgaW5zdGVhZCBvZiBhIGNsYXNzIGZvciB0aGUgcnVu
LWxlbmd0aCBlbmNvZGluZyBzaW5jZQorICAgICAgICAgICAgIyB3ZSB3YW50IHRoZSBzZXJpYWxp
emVkIGZvcm0gdG8gYmUgY29uY2lzZS4KKyAgICAgICAgICAgIGVuY29kZWRfcmVzdWx0cy5pbnNl
cnQoMCwgWzEsIGl0ZW1dKQorCisgICAgZGVmIF9pbnNlcnRfZ2VuZXJpY19tZXRhZGF0YShzZWxm
LCByZXN1bHRzX2Zvcl9idWlsZGVyKToKKyAgICAgICAgIiIiIEluc2VydHMgZ2VuZXJpYyBtZXRh
ZGF0YSAoc3VjaCBhcyB2ZXJzaW9uIG51bWJlciwgY3VycmVudCB0aW1lIGV0YykKKyAgICAgICAg
aW50byB0aGUgSlNPTi4KKworICAgICAgICBBcmdzOgorICAgICAgICAgIHJlc3VsdHNfZm9yX2J1
aWxkZXI6IERpY3Rpb25hcnkgY29udGFpbmluZyB0aGUgdGVzdCByZXN1bHRzIGZvcgorICAgICAg
ICAgICAgICBhIHNpbmdsZSBidWlsZGVyLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5faW5z
ZXJ0X2l0ZW1faW50b19yYXdfbGlzdChyZXN1bHRzX2Zvcl9idWlsZGVyLAorICAgICAgICAgICAg
c2VsZi5fYnVpbGRfbnVtYmVyLCBzZWxmLkJVSUxEX05VTUJFUlMpCisKKyAgICAgICAgIyBJbmNs
dWRlIFNWTiByZXZpc2lvbnMgZm9yIHRoZSBnaXZlbiByZXBvc2l0b3JpZXMuCisgICAgICAgIGZv
ciAobmFtZSwgcGF0aCkgaW4gc2VsZi5fc3ZuX3JlcG9zaXRvcmllczoKKyAgICAgICAgICAgIHNl
bGYuX2luc2VydF9pdGVtX2ludG9fcmF3X2xpc3QocmVzdWx0c19mb3JfYnVpbGRlciwKKyAgICAg
ICAgICAgICAgICBzZWxmLl9nZXRfc3ZuX3JldmlzaW9uKHBhdGgpLAorICAgICAgICAgICAgICAg
IG5hbWUgKyAnUmV2aXNpb24nKQorCisgICAgICAgIHNlbGYuX2luc2VydF9pdGVtX2ludG9fcmF3
X2xpc3QocmVzdWx0c19mb3JfYnVpbGRlciwKKyAgICAgICAgICAgIGludCh0aW1lLnRpbWUoKSks
CisgICAgICAgICAgICBzZWxmLlRJTUUpCisKKyAgICBkZWYgX2luc2VydF90ZXN0X3RpbWVfYW5k
X3Jlc3VsdChzZWxmLCB0ZXN0X25hbWUsIHRlc3RzKToKKyAgICAgICAgIiIiIEluc2VydCBhIHRl
c3QgaXRlbSB3aXRoIGl0cyByZXN1bHRzIHRvIHRoZSBnaXZlbiB0ZXN0cyBkaWN0aW9uYXJ5Lgor
CisgICAgICAgIEFyZ3M6CisgICAgICAgICAgdGVzdHM6IERpY3Rpb25hcnkgY29udGFpbmluZyB0
ZXN0IHJlc3VsdCBlbnRyaWVzLgorICAgICAgICAiIiIKKworICAgICAgICByZXN1bHQgPSBKU09O
UmVzdWx0c0dlbmVyYXRvci5QQVNTX1JFU1VMVAorICAgICAgICB0aW1lID0gMAorCisgICAgICAg
IGlmIHRlc3RfbmFtZSBub3QgaW4gc2VsZi5fYWxsX3Rlc3RzOgorICAgICAgICAgICAgcmVzdWx0
ID0gSlNPTlJlc3VsdHNHZW5lcmF0b3IuTk9fREFUQV9SRVNVTFQKKworICAgICAgICBpZiB0ZXN0
X25hbWUgaW4gc2VsZi5fZmFpbHVyZXM6CisgICAgICAgICAgICByZXN1bHQgPSBzZWxmLkZBSUxV
UkVfVE9fQ0hBUltzZWxmLl9mYWlsdXJlc1t0ZXN0X25hbWVdXQorCisgICAgICAgIGlmIHRlc3Rf
bmFtZSBpbiBzZWxmLl90ZXN0X3RpbWluZ3M6CisgICAgICAgICAgICAjIEZsb29yIGZvciBub3cg
dG8gZ2V0IHRpbWUgaW4gc2Vjb25kcy4KKyAgICAgICAgICAgIHRpbWUgPSBpbnQoc2VsZi5fdGVz
dF90aW1pbmdzW3Rlc3RfbmFtZV0pCisKKyAgICAgICAgaWYgdGVzdF9uYW1lIG5vdCBpbiB0ZXN0
czoKKyAgICAgICAgICAgIHRlc3RzW3Rlc3RfbmFtZV0gPSBzZWxmLl9jcmVhdGVfcmVzdWx0c19h
bmRfdGltZXNfanNvbigpCisKKyAgICAgICAgdGhpc1Rlc3QgPSB0ZXN0c1t0ZXN0X25hbWVdCisg
ICAgICAgIHNlbGYuX2luc2VydF9pdGVtX3J1bl9sZW5ndGhfZW5jb2RlZChyZXN1bHQsIHRoaXNU
ZXN0W3NlbGYuUkVTVUxUU10pCisgICAgICAgIHNlbGYuX2luc2VydF9pdGVtX3J1bl9sZW5ndGhf
ZW5jb2RlZCh0aW1lLCB0aGlzVGVzdFtzZWxmLlRJTUVTXSkKKyAgICAgICAgc2VsZi5fbm9ybWFs
aXplX3Jlc3VsdHNfanNvbih0aGlzVGVzdCwgdGVzdF9uYW1lLCB0ZXN0cykKKworICAgIGRlZiBf
Y29udmVydF9qc29uX3RvX2N1cnJlbnRfdmVyc2lvbihzZWxmLCByZXN1bHRzX2pzb24pOgorICAg
ICAgICAiIiJJZiB0aGUgSlNPTiBkb2VzIG5vdCBtYXRjaCB0aGUgY3VycmVudCB2ZXJzaW9uLCBj
b252ZXJ0cyBpdCB0byB0aGUKKyAgICAgICAgY3VycmVudCB2ZXJzaW9uIGFuZCBhZGRzIGluIHRo
ZSBuZXcgdmVyc2lvbiBudW1iZXIuCisgICAgICAgICIiIgorICAgICAgICBpZiAoc2VsZi5WRVJT
SU9OX0tFWSBpbiByZXN1bHRzX2pzb24gYW5kCisgICAgICAgICAgICByZXN1bHRzX2pzb25bc2Vs
Zi5WRVJTSU9OX0tFWV0gPT0gc2VsZi5WRVJTSU9OKToKKyAgICAgICAgICAgIHJldHVybgorCisg
ICAgICAgIHJlc3VsdHNfanNvbltzZWxmLlZFUlNJT05fS0VZXSA9IHNlbGYuVkVSU0lPTgorCisg
ICAgZGVmIF9jcmVhdGVfcmVzdWx0c19hbmRfdGltZXNfanNvbihzZWxmKToKKyAgICAgICAgcmVz
dWx0c19hbmRfdGltZXMgPSB7fQorICAgICAgICByZXN1bHRzX2FuZF90aW1lc1tzZWxmLlJFU1VM
VFNdID0gW10KKyAgICAgICAgcmVzdWx0c19hbmRfdGltZXNbc2VsZi5USU1FU10gPSBbXQorICAg
ICAgICByZXR1cm4gcmVzdWx0c19hbmRfdGltZXMKKworICAgIGRlZiBfY3JlYXRlX3Jlc3VsdHNf
Zm9yX2J1aWxkZXJfanNvbihzZWxmKToKKyAgICAgICAgcmVzdWx0c19mb3JfYnVpbGRlciA9IHt9
CisgICAgICAgIHJlc3VsdHNfZm9yX2J1aWxkZXJbc2VsZi5URVNUU10gPSB7fQorICAgICAgICBy
ZXR1cm4gcmVzdWx0c19mb3JfYnVpbGRlcgorCisgICAgZGVmIF9yZW1vdmVfaXRlbXNfb3Zlcl9t
YXhfbnVtYmVyX29mX2J1aWxkcyhzZWxmLCBlbmNvZGVkX2xpc3QpOgorICAgICAgICAiIiJSZW1v
dmVzIGl0ZW1zIGZyb20gdGhlIHJ1bi1sZW5ndGggZW5jb2RlZCBsaXN0IGFmdGVyIHRoZSBmaW5h
bAorICAgICAgICBpdGVtIHRoYXQgZXhjZWVkcyB0aGUgbWF4IG51bWJlciBvZiBidWlsZHMgdG8g
dHJhY2suCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICBlbmNvZGVkX3Jlc3VsdHM6IHJ1bi1s
ZW5ndGggZW5jb2RlZCByZXN1bHRzLiBBbiBhcnJheSBvZiBhcnJheXMsIGUuZy4KKyAgICAgICAg
ICAgICAgW1szLCdBJ10sWzEsJ1EnXV0gZW5jb2RlcyBBQUFRLgorICAgICAgICAiIiIKKyAgICAg
ICAgbnVtX2J1aWxkcyA9IDAKKyAgICAgICAgaW5kZXggPSAwCisgICAgICAgIGZvciByZXN1bHQg
aW4gZW5jb2RlZF9saXN0OgorICAgICAgICAgICAgbnVtX2J1aWxkcyA9IG51bV9idWlsZHMgKyBy
ZXN1bHRbMF0KKyAgICAgICAgICAgIGluZGV4ID0gaW5kZXggKyAxCisgICAgICAgICAgICBpZiBu
dW1fYnVpbGRzID4gc2VsZi5NQVhfTlVNQkVSX09GX0JVSUxEX1JFU1VMVFNfVE9fTE9HOgorICAg
ICAgICAgICAgICAgIHJldHVybiBlbmNvZGVkX2xpc3RbOmluZGV4XQorICAgICAgICByZXR1cm4g
ZW5jb2RlZF9saXN0CisKKyAgICBkZWYgX25vcm1hbGl6ZV9yZXN1bHRzX2pzb24oc2VsZiwgdGVz
dCwgdGVzdF9uYW1lLCB0ZXN0cyk6CisgICAgICAgICIiIiBQcnVuZSB0ZXN0cyB3aGVyZSBhbGwg
cnVucyBwYXNzIG9yIHRlc3RzIHRoYXQgbm8gbG9uZ2VyIGV4aXN0IGFuZAorICAgICAgICB0cnVu
Y2F0ZSBhbGwgcmVzdWx0cyB0byBtYXhOdW1iZXJPZkJ1aWxkcy4KKworICAgICAgICBBcmdzOgor
ICAgICAgICAgIHRlc3Q6IFJlc3VsdHNBbmRUaW1lcyBvYmplY3QgZm9yIHRoaXMgdGVzdC4KKyAg
ICAgICAgICB0ZXN0X25hbWU6IE5hbWUgb2YgdGhlIHRlc3QuCisgICAgICAgICAgdGVzdHM6IFRo
ZSBKU09OIG9iamVjdCB3aXRoIGFsbCB0aGUgdGVzdCByZXN1bHRzIGZvciB0aGlzIGJ1aWxkZXIu
CisgICAgICAgICIiIgorICAgICAgICB0ZXN0W3NlbGYuUkVTVUxUU10gPSBzZWxmLl9yZW1vdmVf
aXRlbXNfb3Zlcl9tYXhfbnVtYmVyX29mX2J1aWxkcygKKyAgICAgICAgICAgIHRlc3Rbc2VsZi5S
RVNVTFRTXSkKKyAgICAgICAgdGVzdFtzZWxmLlRJTUVTXSA9IHNlbGYuX3JlbW92ZV9pdGVtc19v
dmVyX21heF9udW1iZXJfb2ZfYnVpbGRzKAorICAgICAgICAgICAgdGVzdFtzZWxmLlRJTUVTXSkK
KworICAgICAgICBpc19hbGxfcGFzcyA9IHNlbGYuX2lzX3Jlc3VsdHNfYWxsX29mX3R5cGUodGVz
dFtzZWxmLlJFU1VMVFNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZi5QQVNTX1JFU1VMVCkKKyAgICAgICAgaXNfYWxsX25vX2RhdGEgPSBz
ZWxmLl9pc19yZXN1bHRzX2FsbF9vZl90eXBlKHRlc3Rbc2VsZi5SRVNVTFRTXSwKKyAgICAgICAg
ICAgIHNlbGYuTk9fREFUQV9SRVNVTFQpCisgICAgICAgIG1heF90aW1lID0gbWF4KFt0aW1lWzFd
IGZvciB0aW1lIGluIHRlc3Rbc2VsZi5USU1FU11dKQorCisgICAgICAgICMgUmVtb3ZlIGFsbCBw
YXNzZXMvbm8tZGF0YSBmcm9tIHRoZSByZXN1bHRzIHRvIHJlZHVjZSBub2lzZSBhbmQKKyAgICAg
ICAgIyBmaWxlc2l6ZS4gSWYgYSB0ZXN0IHBhc3NlcyBldmVyeSBydW4sIGJ1dCB0YWtlcyA+IE1J
Tl9USU1FIHRvIHJ1biwKKyAgICAgICAgIyBkb24ndCB0aHJvdyBhd2F5IHRoZSBkYXRhLgorICAg
ICAgICBpZiBpc19hbGxfbm9fZGF0YSBvciAoaXNfYWxsX3Bhc3MgYW5kIG1heF90aW1lIDw9IHNl
bGYuTUlOX1RJTUUpOgorICAgICAgICAgICAgZGVsIHRlc3RzW3Rlc3RfbmFtZV0KKworICAgIGRl
ZiBfaXNfcmVzdWx0c19hbGxfb2ZfdHlwZShzZWxmLCByZXN1bHRzLCB0eXBlKToKKyAgICAgICAg
IiIiUmV0dXJucyB3aGV0aGVyIGFsbCB0aGUgcmVzdWx0cyBhcmUgb2YgdGhlIGdpdmVuIHR5cGUK
KyAgICAgICAgKGUuZy4gYWxsIHBhc3NlcykuIiIiCisgICAgICAgIHJldHVybiBsZW4ocmVzdWx0
cykgPT0gMSBhbmQgcmVzdWx0c1swXVsxXSA9PSB0eXBlCmRpZmYgLS1naXQgYS9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi90ZXN0L2pzb25fcmVzdWx0c19nZW5lcmF0b3JfdW5p
dHRlc3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi90ZXN0L2pzb25f
cmVzdWx0c19nZW5lcmF0b3JfdW5pdHRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGQ5YzI2NTBhZTY2ODlm
ZGZkNDBlZWQ3MDIyZGYyZGY5ZGQ0ZDNhNQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3Rlc3QvanNvbl9yZXN1bHRzX2dlbmVyYXRvcl91bml0
dGVzdC5weQpAQCAtMCwwICsxLDEzOSBAQAorIyEvdXNyL2Jpbi9weXRob24KKyMgQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorCisiIiJVbml0IHRlc3RzIGZvciBqc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5LiIiIgor
CitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworaW1wb3J0IHJhbmRvbQoraW1wb3J0IHNodXRp
bAoraW1wb3J0IHRlbXBmaWxlCisKK2Zyb20gd2Via2l0cHkuY29tbW9uLnRlc3QgaW1wb3J0IHRl
c3RfcmVzdWx0cworZnJvbSB3ZWJraXRweS5jb21tb24udGVzdC5qc29uX3Jlc3VsdHNfZ2VuZXJh
dG9yIGltcG9ydCBKU09OUmVzdWx0c0dlbmVyYXRvcgoraW1wb3J0IHdlYmtpdHB5LnRoaXJkcGFy
dHkuc2ltcGxlanNvbiBhcyBzaW1wbGVqc29uCisKK0JVSUxERVJfQkFTRV9VUkwgPSAiaHR0cDov
L2J1aWxkLmNocm9taXVtLm9yZy9idWlsZGJvdC9ndGVzdC1yZXN1bHRzLyIKKworCitjbGFzcyBU
ZXN0SlNPTkdlbmVyYXRpb24odW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxm
KToKKyAgICAgICAgc2VsZi5yZXN1bHRzX2RpcmVjdG9yeSA9IHRlbXBmaWxlLm1rZHRlbXAoKQor
ICAgICAgICBzZWxmLnJlc3VsdHNfanNvbl9wYXRoID0gJyVzL3Jlc3VsdHMuanNvbicgJSBzZWxm
LnJlc3VsdHNfZGlyZWN0b3J5CisgICAgICAgIHNlbGYuYnVpbGRlcl9uYW1lID0gJ0RVTU1ZX0JV
SUxERVJfTkFNRScKKyAgICAgICAgc2VsZi5idWlsZF9uYW1lID0gJ0RVTU1ZX0JVSUxEX05BTUUn
CisgICAgICAgIHNlbGYuYnVpbGRfbnVtYmVyID0gJ0RVTU1ZX0JVSUxERVJfTlVNQkVSJworCisg
ICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYucmVzdWx0
c19kaXJlY3RvcnkpCisKKyAgICBkZWYgX3Rlc3RfanNvbl9nZW5lcmF0aW9uKHNlbGYsIHBhc3Nl
ZF90ZXN0cywgZmFpbGVkX3Rlc3RzLCBza2lwcGVkX3Rlc3RzLAorICAgICAgICAgICAgc3ZuX3Jl
cG9zaXRvcmllcz1Ob25lKToKKyAgICAgICAgIyBSZXNldCB0aGUgdGVzdCByZXN1bHRzIGlmIHdl
IGhhdmUgYW55LgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLnJlc3VsdHNfanNvbl9w
YXRoKToKKyAgICAgICAgICAgIG9zLnJlbW92ZShzZWxmLnJlc3VsdHNfanNvbl9wYXRoKQorCisg
ICAgICAgICMgTWFrZSBzdXJlIHdlIGhhdmUgc2V0cyAocmF0aGVyIHRoYW4gbGlzdHMpLgorICAg
ICAgICBwYXNzZWRfdGVzdHMgPSBzZXQocGFzc2VkX3Rlc3RzKQorICAgICAgICBza2lwcGVkX3Rl
c3RzID0gc2V0KHNraXBwZWRfdGVzdHMpCisgICAgICAgIGlmIG5vdCB0eXBlKGZhaWxlZF90ZXN0
cykgaXMgZGljdDoKKyAgICAgICAgICAgIGZhaWxlZF90ZXN0cyA9IGRpY3QoWyhmLCB0ZXN0X3Jl
c3VsdHMuVEVYVCkgZm9yIGYgaW4gZmFpbGVkX3Rlc3RzXSkKKyAgICAgICAgdGVzdHNfbGlzdCA9
IHBhc3NlZF90ZXN0cyB8IHNldChmYWlsZWRfdGVzdHMua2V5cygpKQorICAgICAgICB0ZXN0X3Rp
bWluZ3MgPSB7fQorICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0c19saXN0OgorICAgICAgICAgICAg
dGVzdF90aW1pbmdzW3Rlc3RdID0gZmxvYXQocmFuZG9tLnJhbmRpbnQoMSwgMTApKQorCisgICAg
ICAgICMgR2VuZXJhdGUgYSBKU09OIGZpbGUuCisgICAgICAgIEpTT05SZXN1bHRzR2VuZXJhdG9y
KAorICAgICAgICAgICAgc2VsZi5idWlsZGVyX25hbWUsIHNlbGYuYnVpbGRfbmFtZSwgc2VsZi5i
dWlsZF9udW1iZXIsCisgICAgICAgICAgICBzZWxmLnJlc3VsdHNfZGlyZWN0b3J5LAorICAgICAg
ICAgICAgQlVJTERFUl9CQVNFX1VSTCwKKyAgICAgICAgICAgIHRlc3RfdGltaW5ncywKKyAgICAg
ICAgICAgIGZhaWxlZF90ZXN0cywKKyAgICAgICAgICAgIHBhc3NlZF90ZXN0cywKKyAgICAgICAg
ICAgIHNraXBwZWRfdGVzdHMsCisgICAgICAgICAgICB0ZXN0c19saXN0LAorICAgICAgICAgICAg
c3ZuX3JlcG9zaXRvcmllcykKKworICAgICAgICAjIEFsaWFzaW5nIHRvIGEgc2hvcnQgbmFtZSBm
b3IgYmV0dGVyIGFjY2VzcyB0byBpdHMgY29uc3RhbnRzLgorICAgICAgICBKUkcgPSBKU09OUmVz
dWx0c0dlbmVyYXRvcgorCisgICAgICAgIGYgPSBvcGVuKHNlbGYucmVzdWx0c19qc29uX3BhdGgp
CisgICAgICAgIGpzb25fZGF0YSA9IGYucmVhZCgpCisgICAgICAgIGpzb25fZGF0YSA9IGpzb25f
ZGF0YVtsZW4oSlJHLkpTT05fUFJFRklYKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxlbihqc29uX2RhdGEpIC0gbGVuKEpSRy5KU09OX1NVRkZJWCldCisgICAgICAgIGpzb24gPSBz
aW1wbGVqc29uLmxvYWRzKGpzb25fZGF0YSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoSlJH
LlZFUlNJT05fS0VZIGluIGpzb24pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmJ1aWxk
ZXJfbmFtZSBpbiBqc29uKQorCisgICAgICAgIGJ1aWxkaW5mbyA9IGpzb25bc2VsZi5idWlsZGVy
X25hbWVdCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShKUkcuRklYQUJMRSBpbiBidWlsZGluZm8p
CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShKUkcuVEVTVFMgaW4gYnVpbGRpbmZvKQorICAgICAg
ICBzZWxmLmFzc2VydFRydWUobGVuKGJ1aWxkaW5mb1tKUkcuQlVJTERfTlVNQkVSU10pID09IDEp
CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShidWlsZGluZm9bSlJHLkJVSUxEX05VTUJFUlNdWzBd
ID09IHNlbGYuYnVpbGRfbnVtYmVyKQorCisgICAgICAgIGlmIHRlc3RzX2xpc3QgIG9yIHNraXBw
ZWRfdGVzdHM6CisgICAgICAgICAgICBmaXhhYmxlID0gYnVpbGRpbmZvW0pSRy5GSVhBQkxFXVsw
XQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpeGFibGVbSlJHLlBBU1NfUkVTVUxUXSA9
PSBsZW4ocGFzc2VkX3Rlc3RzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaXhhYmxl
W0pSRy5TS0lQX1JFU1VMVF0gPT0gbGVuKHNraXBwZWRfdGVzdHMpKQorCisgICAgICAgIGlmIGZh
aWxlZF90ZXN0czoKKyAgICAgICAgICAgIHRlc3RzID0gYnVpbGRpbmZvW0pSRy5URVNUU10KKyAg
ICAgICAgICAgIGZvciB0ZXN0X25hbWUsIGZhaWx1cmUgaW4gZmFpbGVkX3Rlc3RzLml0ZXJpdGVt
cygpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ZXN0X25hbWUgaW4gdGVzdHMp
CisgICAgICAgICAgICAgICAgdGVzdCA9IHRlc3RzW3Rlc3RfbmFtZV0KKyAgICAgICAgICAgICAg
ICBzZWxmLmFzc2VydFRydWUodGVzdFtKUkcuUkVTVUxUU11bMF1bMF0gPT0gMSkKKyAgICAgICAg
ICAgICAgICBzZWxmLmFzc2VydFRydWUodGVzdFtKUkcuUkVTVUxUU11bMF1bMV0gPT0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgSlJHLkZBSUxVUkVfVE9fQ0hBUltmYWlsdXJlXSkK
KyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodGVzdFtKUkcuVElNRVNdWzBdWzBdID09
IDEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRlc3RbSlJHLlRJTUVTXVswXVsx
XSA9PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQodGVzdF90aW1pbmdzW3Rl
c3RfbmFtZV0pKQorCisgICAgICAgIGlmIHN2bl9yZXBvc2l0b3JpZXM6CisgICAgICAgICAgICBm
b3IgKG5hbWUsIHBhdGgpIGluIHN2bl9yZXBvc2l0b3JpZXM6CisgICAgICAgICAgICAgICAgIyBK
dXN0IGNoZWNrIGl0cyBleGlzdGVuY2UgYnV0IG5vdCB2YWx1ZSBhcyB3ZSBtYXkgbm90IGJlCisg
ICAgICAgICAgICAgICAgIyBpbiBzdm4gZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIHNlbGYu
YXNzZXJ0VHJ1ZShuYW1lICsgJ1JldmlzaW9uJyBpbiBidWlsZGluZm8pCisgICAgICAgICAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKGxlbihidWlsZGluZm9bbmFtZSArICdSZXZpc2lvbiddKSA9PSAx
KQorCisgICAgZGVmIHRlc3RfanNvbl9nZW5lcmF0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLl90
ZXN0X2pzb25fZ2VuZXJhdGlvbihbXSwgW10sIFtdKQorICAgICAgICBzZWxmLl90ZXN0X2pzb25f
Z2VuZXJhdGlvbihbJ0EnXSwgW10sIFtdKQorICAgICAgICBzZWxmLl90ZXN0X2pzb25fZ2VuZXJh
dGlvbihbJ0EnXSwgWydCJywgJ0MnXSwgW10pCisgICAgICAgIHNlbGYuX3Rlc3RfanNvbl9nZW5l
cmF0aW9uKFsnQScsICdCJywgJ0MnXSwgWydEJywgJ0UnXSwgWydGJywgJ0cnXSkKKyAgICAgICAg
c2VsZi5fdGVzdF9qc29uX2dlbmVyYXRpb24oWydBJ10sIHsnQic6IHRlc3RfcmVzdWx0cy5JTUFH
RSwKKyAgICAgICAgICAgICdDJzogdGVzdF9yZXN1bHRzLlRFWFQsICdEJzogdGVzdF9yZXN1bHRz
LkNSQVNIfSwgWydFJ10pCisKKyAgICAgICAgZGlyID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGgu
YWJzcGF0aChfX2ZpbGVfXykpCisgICAgICAgIHNlbGYuX3Rlc3RfanNvbl9nZW5lcmF0aW9uKFsn
QSddLCBbJ0InXSwgWydEJ10sICgoJ2EnLCBkaXIpLCkpCisKKworaWYgX19uYW1lX18gPT0gJ19f
bWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvY29tbW9uL3Rlc3QvdGVzdF9yZXN1bHRzLnB5IGIvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9jb21tb24vdGVzdC90ZXN0X3Jlc3VsdHMucHkKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
Zjc1MTIzZTAyZmMwZDBhNmU1YzQ3YWM0ZDAzYWNhZTlmMWYwODhhZAotLS0gL2Rldi9udWxsCisr
KyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3Rlc3QvdGVzdF9yZXN1bHRz
LnB5CkBAIC0wLDAgKzEsMzIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
IyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKKyMgVGVzdCByZXN1bHRzIGFuZCBtb2RpZmllciBjb25zdGFudHMuCisoUEFTUywgRkFJ
TCwgVEVYVCwgSU1BR0UsIElNQUdFX1BMVVNfVEVYVCwgVElNRU9VVCwgQ1JBU0gsIFNLSVAsIFdP
TlRGSVgsCisgREVGRVIsIFNMT1csIFJFQkFTRUxJTkUsIE1JU1NJTkcsIEZMQUtZLCBOT1csIE5P
TkUpID0gcmFuZ2UoMTYpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX2xheW91dF9yZXN1bHRzX2dlbmVyYXRv
ci5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL2pzb25fbGF5b3V0X3Jlc3VsdHNfZ2VuZXJhdG9yLnB5CmluZGV4IGJiMjE0ZjdkYWM3
MWZlZjQxZTI0YTEzNGRmZDI3MDMxZWRlMzIxMTYuLjI5MzFlNTU4MWI2ZjZjZTQ0OTczYWY3NGFk
NmZmYWQxZGExYTA0YzMgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25fbGF5b3V0X3Jlc3VsdHNfZ2VuZXJhdG9y
LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL2pzb25fbGF5b3V0X3Jlc3VsdHNfZ2VuZXJhdG9yLnB5CkBAIC0zMCw3ICszMCw3
IEBACiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG9zCiAKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rl
c3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCBqc29uX3Jlc3VsdHNfZ2VuZXJhdG9yCitmcm9tIHdl
YmtpdHB5LmNvbW1vbi50ZXN0IGltcG9ydCBqc29uX3Jlc3VsdHNfZ2VuZXJhdG9yCiBmcm9tIHdl
YmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9leHBlY3RhdGlv
bnMKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0
X2ZhaWx1cmVzCiBpbXBvcnQgd2Via2l0cHkudGhpcmRwYXJ0eS5zaW1wbGVqc29uIGFzIHNpbXBs
ZWpzb24KQEAgLTY1LDcgKzY1LDcgQEAgY2xhc3MgSlNPTkxheW91dFJlc3VsdHNHZW5lcmF0b3Io
anNvbl9yZXN1bHRzX2dlbmVyYXRvci5KU09OUmVzdWx0c0dlbmVyYXRvcik6CiAgICAgICAgIHNl
bGYuX2V4cGVjdGF0aW9ucyA9IGV4cGVjdGF0aW9ucwogCiAgICAgICAgICMgV2UgZG9uJ3QgdXNl
IHNlbGYuX3NraXBwZWRfdGVzdHMgYW5kIHNlbGYuX3Bhc3NlZF90ZXN0cyBhcyB3ZQotICAgICAg
ICAjIG92ZXJyaWRlIF9JbnNlcnRGYWlsdXJlU3VtbWFyaWVzLgorICAgICAgICAjIG92ZXJyaWRl
IF9pbnNlcnRfZmFpbHVyZV9zdW1tYXJpZXMuCiAKICAgICAgICAgIyBXZSB3YW50IHJlbGF0aXZl
IHBhdGhzIHRvIExheW91dFRlc3Qgcm9vdCBmb3IgSlNPTiBvdXRwdXQuCiAgICAgICAgIHBhdGhf
dG9fbmFtZSA9IHNlbGYuX2dldF9wYXRoX3JlbGF0aXZlX3RvX2xheW91dF90ZXN0X3Jvb3QKZGlm
ZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5lcmF0b3IucHkgYi9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJh
dG9yLnB5CmluZGV4IDFjZjFiOTU4ZGQyNjg5OGQyMjEwYjdmNzQyMjNhZTNlNDM4NTE3MzcuLjcz
MDllNmFmMDk3Y2IxYWNkODYxNmUwMmUyOTY2ZDU4ZGJhMTczZTUgMTAwNjQ0Ci0tLSBhL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25f
cmVzdWx0c19nZW5lcmF0b3IucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvci5weQpAQCAt
MjksMzk0ICsyOSwyMCBAQAogCiBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHdpdGhfc3RhdGVtZW50
CiAKLWltcG9ydCBjb2RlY3MKLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgb3MKLWltcG9ydCBzdWJw
cm9jZXNzCi1pbXBvcnQgc3lzCi1pbXBvcnQgdGltZQotaW1wb3J0IHVybGxpYjIKLWltcG9ydCB4
bWwuZG9tLm1pbmlkb20KK2Zyb20gd2Via2l0cHkuY29tbW9uLnRlc3QgaW1wb3J0IGpzb25fcmVz
dWx0c19nZW5lcmF0b3IKIAotZnJvbSB3ZWJraXRweS5jb21tb24uY2hlY2tvdXQgaW1wb3J0IHNj
bQotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQgU2NyaXB0RXJy
b3IKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0
X2V4cGVjdGF0aW9ucwotaW1wb3J0IHdlYmtpdHB5LnRoaXJkcGFydHkuc2ltcGxlanNvbiBhcyBz
aW1wbGVqc29uCisjIEpTT05SZXN1bHRzR2VuZXJhdG9yIGlzIG1vdmVkIGludG8gd2Via2l0cHku
dGVzdF9wYWNrYWdlLgorIyBUaGlzIG1vZHVsZSBpcyBsZWZ0IGFzIGEgc2ltcGxlIHdyYXBwZXIg
Zm9yIG5vdCBicmVha2luZyB0aGluZ3MKKyMgZHVyaW5nIHRoZSB0cmFuc2l0aW9uLgogCi1fbG9n
ID0gbG9nZ2luZy5nZXRMb2dnZXIoIndlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2Fn
ZS4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgImpzb25fcmVzdWx0c19nZW5lcmF0b3IiKQot
Ci0KLWNsYXNzIEpTT05SZXN1bHRzR2VuZXJhdG9yKG9iamVjdCk6Ci0gICAgIiIiQSBKU09OIHJl
c3VsdHMgZ2VuZXJhdG9yIGZvciBnZW5lcmljIHRlc3RzLiIiIgotCi0gICAgTUFYX05VTUJFUl9P
Rl9CVUlMRF9SRVNVTFRTX1RPX0xPRyA9IDc1MAotICAgICMgTWluIHRpbWUgKHNlY29uZHMpIHRo
YXQgd2lsbCBiZSBhZGRlZCB0byB0aGUgSlNPTi4KLSAgICBNSU5fVElNRSA9IDEKLSAgICBKU09O
X1BSRUZJWCA9ICJBRERfUkVTVUxUUygiCi0gICAgSlNPTl9TVUZGSVggPSAiKTsiCi0gICAgUEFT
U19SRVNVTFQgPSAiUCIKLSAgICBTS0lQX1JFU1VMVCA9ICJYIgotICAgIE5PX0RBVEFfUkVTVUxU
ID0gIk4iCi0gICAgVkVSU0lPTiA9IDMKLSAgICBWRVJTSU9OX0tFWSA9ICJ2ZXJzaW9uIgotICAg
IFJFU1VMVFMgPSAicmVzdWx0cyIKLSAgICBUSU1FUyA9ICJ0aW1lcyIKLSAgICBCVUlMRF9OVU1C
RVJTID0gImJ1aWxkTnVtYmVycyIKLSAgICBUSU1FID0gInNlY29uZHNTaW5jZUVwb2NoIgotICAg
IFRFU1RTID0gInRlc3RzIgotCi0gICAgRklYQUJMRV9DT1VOVCA9ICJmaXhhYmxlQ291bnQiCi0g
ICAgRklYQUJMRSA9ICJmaXhhYmxlQ291bnRzIgotICAgIEFMTF9GSVhBQkxFX0NPVU5UID0gImFs
bEZpeGFibGVDb3VudCIKLQotICAgICMgTm90ZSB0aGF0IHdlIG9taXQgdGVzdF9leHBlY3RhdGlv
bnMuRkFJTCBmcm9tIHRoaXMgbGlzdCBiZWNhdXNlCi0gICAgIyBpdCBzaG91bGQgbmV2ZXIgc2hv
dyB1cCAoaXQncyBhIGxlZ2FjeSBpbnB1dCBleHBlY3RhdGlvbiwgbmV2ZXIKLSAgICAjIGFuIG91
dHB1dCBleHBlY3RhdGlvbikuCi0gICAgRkFJTFVSRV9UT19DSEFSID0ge3Rlc3RfZXhwZWN0YXRp
b25zLkNSQVNIOiAiQyIsCi0gICAgICAgICAgICAgICAgICAgICAgIHRlc3RfZXhwZWN0YXRpb25z
LlRJTUVPVVQ6ICJUIiwKLSAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9leHBlY3RhdGlvbnMu
SU1BR0U6ICJJIiwKLSAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9leHBlY3RhdGlvbnMuVEVY
VDogIkYiLAotICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucy5NSVNTSU5H
OiAiTyIsCi0gICAgICAgICAgICAgICAgICAgICAgIHRlc3RfZXhwZWN0YXRpb25zLklNQUdFX1BM
VVNfVEVYVDogIloifQotICAgIEZBSUxVUkVfQ0hBUlMgPSBGQUlMVVJFX1RPX0NIQVIudmFsdWVz
KCkKLQotICAgIFJFU1VMVFNfRklMRU5BTUUgPSAicmVzdWx0cy5qc29uIgogCitjbGFzcyBKU09O
UmVzdWx0c0dlbmVyYXRvcihqc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLkpTT05SZXN1bHRzR2VuZXJh
dG9yKToKICAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgYnVpbGRlcl9uYW1lLCBidWlsZF9u
YW1lLCBidWlsZF9udW1iZXIsCiAgICAgICAgIHJlc3VsdHNfZmlsZV9iYXNlX3BhdGgsIGJ1aWxk
ZXJfYmFzZV91cmwsCiAgICAgICAgIHRlc3RfdGltaW5ncywgZmFpbHVyZXMsIHBhc3NlZF90ZXN0
cywgc2tpcHBlZF90ZXN0cywgYWxsX3Rlc3RzKToKLSAgICAgICAgIiIiTW9kaWZpZXMgdGhlIHJl
c3VsdHMuanNvbiBmaWxlLiBHcmFicyBpdCBvZmYgdGhlIGFyY2hpdmUgZGlyZWN0b3J5Ci0gICAg
ICAgIGlmIGl0IGlzIG5vdCBmb3VuZCBsb2NhbGx5LgotCi0gICAgICAgIEFyZ3MKLSAgICAgICAg
ICBidWlsZGVyX25hbWU6IHRoZSBidWlsZGVyIG5hbWUgKGUuZy4gV2Via2l0KS4KLSAgICAgICAg
ICBidWlsZF9uYW1lOiB0aGUgYnVpbGQgbmFtZSAoZS5nLiB3ZWJraXQtcmVsKS4KLSAgICAgICAg
ICBidWlsZF9udW1iZXI6IHRoZSBidWlsZCBudW1iZXIuCi0gICAgICAgICAgcmVzdWx0c19maWxl
X2Jhc2VfcGF0aDogQWJzb2x1dGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhl
Ci0gICAgICAgICAgICAgIHJlc3VsdHMganNvbiBmaWxlLgotICAgICAgICAgIGJ1aWxkZXJfYmFz
ZV91cmw6IHRoZSBVUkwgd2hlcmUgd2UgaGF2ZSB0aGUgYXJjaGl2ZWQgdGVzdCByZXN1bHRzLgot
ICAgICAgICAgIHRlc3RfdGltaW5nczogTWFwIG9mIHRlc3QgbmFtZSB0byBhIHRlc3RfcnVuLXRp
bWUuCi0gICAgICAgICAgZmFpbHVyZXM6IE1hcCBvZiB0ZXN0IG5hbWUgdG8gYSBmYWlsdXJlIHR5
cGUgKG9mIHRlc3RfZXhwZWN0YXRpb25zKS4KLSAgICAgICAgICBwYXNzZWRfdGVzdHM6IEEgc2V0
IGNvbnRhaW5pbmcgYWxsIHRoZSBwYXNzZWQgdGVzdHMuCi0gICAgICAgICAgc2tpcHBlZF90ZXN0
czogQSBzZXQgY29udGFpbmluZyBhbGwgdGhlIHNraXBwZWQgdGVzdHMuCi0gICAgICAgICAgYWxs
X3Rlc3RzOiBMaXN0IG9mIGFsbCB0aGUgdGVzdHMgdGhhdCB3ZXJlIHJ1bi4gIFRoaXMgc2hvdWxk
IG5vdAotICAgICAgICAgICAgICBpbmNsdWRlIHNraXBwZWQgdGVzdHMuCi0gICAgICAgICIiIgot
ICAgICAgICBzZWxmLl9idWlsZGVyX25hbWUgPSBidWlsZGVyX25hbWUKLSAgICAgICAgc2VsZi5f
YnVpbGRfbmFtZSA9IGJ1aWxkX25hbWUKLSAgICAgICAgc2VsZi5fYnVpbGRfbnVtYmVyID0gYnVp
bGRfbnVtYmVyCi0gICAgICAgIHNlbGYuX2J1aWxkZXJfYmFzZV91cmwgPSBidWlsZGVyX2Jhc2Vf
dXJsCi0gICAgICAgIHNlbGYuX3Jlc3VsdHNfZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKHJlc3Vs
dHNfZmlsZV9iYXNlX3BhdGgsCi0gICAgICAgICAgICBzZWxmLlJFU1VMVFNfRklMRU5BTUUpCi0g
ICAgICAgIHNlbGYuX3Rlc3RfdGltaW5ncyA9IHRlc3RfdGltaW5ncwotICAgICAgICBzZWxmLl9m
YWlsdXJlcyA9IGZhaWx1cmVzCi0gICAgICAgIHNlbGYuX3Bhc3NlZF90ZXN0cyA9IHBhc3NlZF90
ZXN0cwotICAgICAgICBzZWxmLl9za2lwcGVkX3Rlc3RzID0gc2tpcHBlZF90ZXN0cwotICAgICAg
ICBzZWxmLl9hbGxfdGVzdHMgPSBhbGxfdGVzdHMKLSAgICAgICAgc2VsZi5fc3ZuX3JlcG9zaXRv
cmllcyA9IHBvcnQudGVzdF9yZXBvc2l0b3J5X3BhdGhzKCkKLQotICAgICAgICBzZWxmLl9nZW5l
cmF0ZV9qc29uX291dHB1dCgpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2pzb25fb3V0cHV0KHNlbGYp
OgotICAgICAgICAiIiJHZW5lcmF0ZXMgdGhlIEpTT04gb3V0cHV0IGZpbGUuIiIiCi0gICAgICAg
IGpzb24gPSBzZWxmLl9nZXRfanNvbigpCi0gICAgICAgIGlmIGpzb246Ci0gICAgICAgICAgICBy
ZXN1bHRzX2ZpbGUgPSBjb2RlY3Mub3BlbihzZWxmLl9yZXN1bHRzX2ZpbGVfcGF0aCwgInciLCAi
dXRmLTgiKQotICAgICAgICAgICAgcmVzdWx0c19maWxlLndyaXRlKGpzb24pCi0gICAgICAgICAg
ICByZXN1bHRzX2ZpbGUuY2xvc2UoKQotCi0gICAgIyBGSVhNRTogQ2FsbGVycyBzaG91bGQgdXNl
IHNjbS5weSBpbnN0ZWFkLgotICAgIGRlZiBfZ2V0X3N2bl9yZXZpc2lvbihzZWxmLCBpbl9kaXJl
Y3RvcnkpOgotICAgICAgICAiIiJSZXR1cm5zIHRoZSBzdm4gcmV2aXNpb24gZm9yIHRoZSBnaXZl
biBkaXJlY3RvcnkuCi0KLSAgICAgICAgQXJnczoKLSAgICAgICAgICBpbl9kaXJlY3Rvcnk6IFRo
ZSBkaXJlY3Rvcnkgd2hlcmUgc3ZuIGlzIHRvIGJlIHJ1bi4KLSAgICAgICAgIiIiCi0KLSAgICAg
ICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKGluX2RpcmVjdG9yeSwgJy5zdm4nKSk6
Ci0gICAgICAgICAgICAjIE5vdGU6IE5vdCB0aHJlYWQgc2FmZTogaHR0cDovL2J1Z3MucHl0aG9u
Lm9yZy9pc3N1ZTIzMjAKLSAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuUG9wZW4oWyJz
dm4iLCAiaW5mbyIsICItLXhtbCJdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjd2Q9aW5fZGlyZWN0b3J5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaGVsbD0oc3lzLnBsYXRmb3JtID09ICd3aW4zMicpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5jb21tdW5pY2F0ZSgp
WzBdCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgZG9tID0geG1sLmRvbS5taW5p
ZG9tLnBhcnNlU3RyaW5nKG91dHB1dCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZG9tLmdldEVs
ZW1lbnRzQnlUYWdOYW1lKCdlbnRyeScpWzBdLmdldEF0dHJpYnV0ZSgKLSAgICAgICAgICAgICAg
ICAgICAgJ3JldmlzaW9uJykKLSAgICAgICAgICAgIGV4Y2VwdCB4bWwucGFyc2Vycy5leHBhdC5F
eHBhdEVycm9yOgotICAgICAgICAgICAgICAgIHJldHVybiAiIgotICAgICAgICByZXR1cm4gIiIK
LQotICAgIGRlZiBfZ2V0X2FyY2hpdmVkX2pzb25fcmVzdWx0cyhzZWxmKToKLSAgICAgICAgIiIi
UmVhZHMgb2xkIHJlc3VsdHMgSlNPTiBmaWxlIGlmIGl0IGV4aXN0cy4KLSAgICAgICAgUmV0dXJu
cyAoYXJjaGl2ZWRfcmVzdWx0cywgZXJyb3IpIHR1cGxlIHdoZXJlIGVycm9yIGlzIE5vbmUgaWYg
cmVzdWx0cwotICAgICAgICB3ZXJlIHN1Y2Nlc3NmdWxseSByZWFkLgotICAgICAgICAiIiIKLSAg
ICAgICAgcmVzdWx0c19qc29uID0ge30KLSAgICAgICAgb2xkX3Jlc3VsdHMgPSBOb25lCi0gICAg
ICAgIGVycm9yID0gTm9uZQotCi0gICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYuX3Jlc3Vs
dHNfZmlsZV9wYXRoKToKLSAgICAgICAgICAgIHdpdGggY29kZWNzLm9wZW4oc2VsZi5fcmVzdWx0
c19maWxlX3BhdGgsICJyIiwgInV0Zi04IikgYXMgZmlsZToKLSAgICAgICAgICAgICAgICBvbGRf
cmVzdWx0cyA9IGZpbGUucmVhZCgpCi0gICAgICAgIGVsaWYgc2VsZi5fYnVpbGRlcl9iYXNlX3Vy
bDoKLSAgICAgICAgICAgICMgQ2hlY2sgaWYgd2UgaGF2ZSB0aGUgYXJjaGl2ZWQgSlNPTiBmaWxl
IG9uIHRoZSBidWlsZGJvdCBzZXJ2ZXIuCi0gICAgICAgICAgICByZXN1bHRzX2ZpbGVfdXJsID0g
KHNlbGYuX2J1aWxkZXJfYmFzZV91cmwgKwotICAgICAgICAgICAgICAgIHNlbGYuX2J1aWxkX25h
bWUgKyAiLyIgKyBzZWxmLlJFU1VMVFNfRklMRU5BTUUpCi0gICAgICAgICAgICBfbG9nLmVycm9y
KCJMb2NhbCByZXN1bHRzLmpzb24gZmlsZSBkb2VzIG5vdCBleGlzdC4gR3JhYmJpbmcgIgotICAg
ICAgICAgICAgICAgICAgICAgICAiaXQgb2ZmIHRoZSBhcmNoaXZlIGF0ICIgKyByZXN1bHRzX2Zp
bGVfdXJsKQotCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcmVzdWx0c19maWxl
ID0gdXJsbGliMi51cmxvcGVuKHJlc3VsdHNfZmlsZV91cmwpCi0gICAgICAgICAgICAgICAgaW5m
byA9IHJlc3VsdHNfZmlsZS5pbmZvKCkKLSAgICAgICAgICAgICAgICBvbGRfcmVzdWx0cyA9IHJl
c3VsdHNfZmlsZS5yZWFkKCkKLSAgICAgICAgICAgIGV4Y2VwdCB1cmxsaWIyLkhUVFBFcnJvciwg
aHR0cF9lcnJvcjoKLSAgICAgICAgICAgICAgICAjIEEgbm9uLTR4eCBzdGF0dXMgY29kZSBtZWFu
cyB0aGUgYm90IGlzIGhvc2VkIGZvciBzb21lIHJlYXNvbgotICAgICAgICAgICAgICAgICMgYW5k
IHdlIGNhbid0IGdyYWIgdGhlIHJlc3VsdHMuanNvbiBmaWxlIG9mZiBvZiBpdC4KLSAgICAgICAg
ICAgICAgICBpZiAoaHR0cF9lcnJvci5jb2RlIDwgNDAwIGFuZCBodHRwX2Vycm9yLmNvZGUgPj0g
NTAwKToKLSAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBodHRwX2Vycm9yCi0gICAgICAgICAg
ICBleGNlcHQgdXJsbGliMi5VUkxFcnJvciwgdXJsX2Vycm9yOgotICAgICAgICAgICAgICAgIGVy
cm9yID0gdXJsX2Vycm9yCi0KLSAgICAgICAgaWYgb2xkX3Jlc3VsdHM6Ci0gICAgICAgICAgICAj
IFN0cmlwIHRoZSBwcmVmaXggYW5kIHN1ZmZpeCBzbyB3ZSBjYW4gZ2V0IHRoZSBhY3R1YWwgSlNP
TiBvYmplY3QuCi0gICAgICAgICAgICBvbGRfcmVzdWx0cyA9IG9sZF9yZXN1bHRzW2xlbihzZWxm
LkpTT05fUFJFRklYKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVu
KG9sZF9yZXN1bHRzKSAtIGxlbihzZWxmLkpTT05fU1VGRklYKV0KLQotICAgICAgICAgICAgdHJ5
OgotICAgICAgICAgICAgICAgIHJlc3VsdHNfanNvbiA9IHNpbXBsZWpzb24ubG9hZHMob2xkX3Jl
c3VsdHMpCi0gICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgX2xvZy5kZWJ1Zygi
cmVzdWx0cy5qc29uIHdhcyBub3QgdmFsaWQgSlNPTi4gQ2xvYmJlcmluZy4iKQotICAgICAgICAg
ICAgICAgICMgVGhlIEpTT04gZmlsZSBpcyBub3QgdmFsaWQgSlNPTi4gSnVzdCBjbG9iYmVyIHRo
ZSByZXN1bHRzLgotICAgICAgICAgICAgICAgIHJlc3VsdHNfanNvbiA9IHt9Ci0gICAgICAgIGVs
c2U6Ci0gICAgICAgICAgICBfbG9nLmRlYnVnKCdPbGQgSlNPTiByZXN1bHRzIGRvIG5vdCBleGlz
dC4gU3RhcnRpbmcgZnJlc2guJykKLSAgICAgICAgICAgIHJlc3VsdHNfanNvbiA9IHt9Ci0KLSAg
ICAgICAgcmV0dXJuIHJlc3VsdHNfanNvbiwgZXJyb3IKLQotICAgIGRlZiBfZ2V0X2pzb24oc2Vs
Zik6Ci0gICAgICAgICIiIkdldHMgdGhlIHJlc3VsdHMgZm9yIHRoZSByZXN1bHRzLmpzb24gZmls
ZS4iIiIKLSAgICAgICAgcmVzdWx0c19qc29uLCBlcnJvciA9IHNlbGYuX2dldF9hcmNoaXZlZF9q
c29uX3Jlc3VsdHMoKQotICAgICAgICBpZiBlcnJvcjoKLSAgICAgICAgICAgICMgSWYgdGhlcmUg
d2FzIGFuIGVycm9yIGRvbid0IHdyaXRlIGEgcmVzdWx0cy5qc29uCi0gICAgICAgICAgICAjIGZp
bGUgYXQgYWxsIGFzIGl0IHdvdWxkIGxvc2UgYWxsIHRoZSBpbmZvcm1hdGlvbiBvbiB0aGUgYm90
LgotICAgICAgICAgICAgX2xvZy5lcnJvcigiQXJjaGl2ZSBkaXJlY3RvcnkgaXMgaW5hY2Nlc3Np
YmxlLiBOb3QgbW9kaWZ5aW5nICIKLSAgICAgICAgICAgICAgICAgICAgICAgIm9yIGNsb2JiZXJp
bmcgdGhlIHJlc3VsdHMuanNvbiBmaWxlOiAiICsgc3RyKGVycm9yKSkKLSAgICAgICAgICAgIHJl
dHVybiBOb25lCi0KLSAgICAgICAgYnVpbGRlcl9uYW1lID0gc2VsZi5fYnVpbGRlcl9uYW1lCi0g
ICAgICAgIGlmIHJlc3VsdHNfanNvbiBhbmQgYnVpbGRlcl9uYW1lIG5vdCBpbiByZXN1bHRzX2pz
b246Ci0gICAgICAgICAgICBfbG9nLmRlYnVnKCJCdWlsZGVyIG5hbWUgKCVzKSBpcyBub3QgaW4g
dGhlIHJlc3VsdHMuanNvbiBmaWxlLiIKLSAgICAgICAgICAgICAgICAgICAgICAgJSBidWlsZGVy
X25hbWUpCi0KLSAgICAgICAgc2VsZi5fY29udmVydF9qc29uX3RvX2N1cnJlbnRfdmVyc2lvbihy
ZXN1bHRzX2pzb24pCi0KLSAgICAgICAgaWYgYnVpbGRlcl9uYW1lIG5vdCBpbiByZXN1bHRzX2pz
b246Ci0gICAgICAgICAgICByZXN1bHRzX2pzb25bYnVpbGRlcl9uYW1lXSA9ICgKLSAgICAgICAg
ICAgICAgICBzZWxmLl9jcmVhdGVfcmVzdWx0c19mb3JfYnVpbGRlcl9qc29uKCkpCi0KLSAgICAg
ICAgcmVzdWx0c19mb3JfYnVpbGRlciA9IHJlc3VsdHNfanNvbltidWlsZGVyX25hbWVdCi0KLSAg
ICAgICAgc2VsZi5faW5zZXJ0X2dlbmVyaWNfbWV0YWRhdGEocmVzdWx0c19mb3JfYnVpbGRlcikK
LQotICAgICAgICBzZWxmLl9pbnNlcnRfZmFpbHVyZV9zdW1tYXJpZXMocmVzdWx0c19mb3JfYnVp
bGRlcikKLQotICAgICAgICAjIFVwZGF0ZSB0aGUgYWxsIGZhaWxpbmcgdGVzdHMgd2l0aCByZXN1
bHQgdHlwZSBhbmQgdGltZS4KLSAgICAgICAgdGVzdHMgPSByZXN1bHRzX2Zvcl9idWlsZGVyW3Nl
bGYuVEVTVFNdCi0gICAgICAgIGFsbF9mYWlsaW5nX3Rlc3RzID0gc2V0KHNlbGYuX2ZhaWx1cmVz
Lml0ZXJrZXlzKCkpCi0gICAgICAgIGFsbF9mYWlsaW5nX3Rlc3RzLnVwZGF0ZSh0ZXN0cy5pdGVy
a2V5cygpKQotICAgICAgICBmb3IgdGVzdCBpbiBhbGxfZmFpbGluZ190ZXN0czoKLSAgICAgICAg
ICAgIHNlbGYuX2luc2VydF90ZXN0X3RpbWVfYW5kX3Jlc3VsdCh0ZXN0LCB0ZXN0cykKLQotICAg
ICAgICAjIFNwZWNpZnkgc2VwYXJhdG9ycyBpbiBvcmRlciB0byBnZXQgY29tcGFjdCBlbmNvZGlu
Zy4KLSAgICAgICAgcmVzdWx0c19zdHIgPSBzaW1wbGVqc29uLmR1bXBzKHJlc3VsdHNfanNvbiwg
c2VwYXJhdG9ycz0oJywnLCAnOicpKQotICAgICAgICByZXR1cm4gc2VsZi5KU09OX1BSRUZJWCAr
IHJlc3VsdHNfc3RyICsgc2VsZi5KU09OX1NVRkZJWAotCi0gICAgZGVmIF9pbnNlcnRfZmFpbHVy
ZV9zdW1tYXJpZXMoc2VsZiwgcmVzdWx0c19mb3JfYnVpbGRlcik6Ci0gICAgICAgICIiIkluc2Vy
dHMgYWdncmVnYXRlIHBhc3MvZmFpbHVyZSBzdGF0aXN0aWNzIGludG8gdGhlIEpTT04uCi0gICAg
ICAgIFRoaXMgbWV0aG9kIHJlYWRzIHNlbGYuX3NraXBwZWRfdGVzdHMsIHNlbGYuX3Bhc3NlZF90
ZXN0cyBhbmQKLSAgICAgICAgc2VsZi5fZmFpbHVyZXMgYW5kIGluc2VydHMgRklYQUJMRSwgRklY
QUJMRV9DT1VOVCBhbmQgQUxMX0ZJWEFCTEVfQ09VTlQKLSAgICAgICAgZW50cmllcy4KLQotICAg
ICAgICBBcmdzOgotICAgICAgICAgIHJlc3VsdHNfZm9yX2J1aWxkZXI6IERpY3Rpb25hcnkgY29u
dGFpbmluZyB0aGUgdGVzdCByZXN1bHRzIGZvciBhCi0gICAgICAgICAgICAgIHNpbmdsZSBidWls
ZGVyLgotICAgICAgICAiIiIKLSAgICAgICAgIyBJbnNlcnQgdGhlIG51bWJlciBvZiB0ZXN0cyB0
aGF0IGZhaWxlZC4KLSAgICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1faW50b19yYXdfbGlzdChyZXN1
bHRzX2Zvcl9idWlsZGVyLAotICAgICAgICAgICAgbGVuKHNldChzZWxmLl9mYWlsdXJlcy5rZXlz
KCkpIHwgc2VsZi5fc2tpcHBlZF90ZXN0cyksCi0gICAgICAgICAgICBzZWxmLkZJWEFCTEVfQ09V
TlQpCi0KLSAgICAgICAgIyBDcmVhdGUgYSBwYXNzL3NraXAvZmFpbHVyZSBzdW1tYXJ5IGRpY3Rp
b25hcnkuCi0gICAgICAgIGVudHJ5ID0ge30KLSAgICAgICAgZW50cnlbc2VsZi5TS0lQX1JFU1VM
VF0gPSBsZW4oc2VsZi5fc2tpcHBlZF90ZXN0cykKLSAgICAgICAgZW50cnlbc2VsZi5QQVNTX1JF
U1VMVF0gPSBsZW4oc2VsZi5fcGFzc2VkX3Rlc3RzKQotICAgICAgICBnZXQgPSBlbnRyeS5nZXQK
LSAgICAgICAgZm9yIGZhaWx1cmVfdHlwZSBpbiBzZWxmLl9mYWlsdXJlcy52YWx1ZXMoKToKLSAg
ICAgICAgICAgIGZhaWx1cmVfY2hhciA9IHNlbGYuRkFJTFVSRV9UT19DSEFSW2ZhaWx1cmVfdHlw
ZV0KLSAgICAgICAgICAgIGVudHJ5W2ZhaWx1cmVfY2hhcl0gPSBnZXQoZmFpbHVyZV9jaGFyLCAw
KSArIDEKLQotICAgICAgICAjIEluc2VydCB0aGUgcGFzcy9za2lwL2ZhaWx1cmUgc3VtbWFyeSBk
aWN0aW9uYXJ5LgotICAgICAgICBzZWxmLl9pbnNlcnRfaXRlbV9pbnRvX3Jhd19saXN0KHJlc3Vs
dHNfZm9yX2J1aWxkZXIsIGVudHJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGYuRklYQUJMRSkKLQotICAgICAgICAjIEluc2VydCB0aGUgbnVtYmVyIG9mIGFs
bCB0aGUgdGVzdHMgdGhhdCBhcmUgc3VwcG9zZWQgdG8gcGFzcy4KLSAgICAgICAgc2VsZi5faW5z
ZXJ0X2l0ZW1faW50b19yYXdfbGlzdChyZXN1bHRzX2Zvcl9idWlsZGVyLAotICAgICAgICAgICAg
bGVuKHNlbGYuX3NraXBwZWRfdGVzdHMgfCBzZWxmLl9hbGxfdGVzdHMpLAotICAgICAgICAgICAg
c2VsZi5BTExfRklYQUJMRV9DT1VOVCkKLQotICAgIGRlZiBfaW5zZXJ0X2l0ZW1faW50b19yYXdf
bGlzdChzZWxmLCByZXN1bHRzX2Zvcl9idWlsZGVyLCBpdGVtLCBrZXkpOgotICAgICAgICAiIiJJ
bnNlcnRzIHRoZSBpdGVtIGludG8gdGhlIGxpc3Qgd2l0aCB0aGUgZ2l2ZW4ga2V5IGluIHRoZSBy
ZXN1bHRzIGZvcgotICAgICAgICB0aGlzIGJ1aWxkZXIuIENyZWF0ZXMgdGhlIGxpc3QgaWYgbm8g
c3VjaCBsaXN0IGV4aXN0cy4KLQotICAgICAgICBBcmdzOgotICAgICAgICAgIHJlc3VsdHNfZm9y
X2J1aWxkZXI6IERpY3Rpb25hcnkgY29udGFpbmluZyB0aGUgdGVzdCByZXN1bHRzIGZvciBhCi0g
ICAgICAgICAgICAgIHNpbmdsZSBidWlsZGVyLgotICAgICAgICAgIGl0ZW06IE51bWJlciBvciBz
dHJpbmcgdG8gaW5zZXJ0IGludG8gdGhlIGxpc3QuCi0gICAgICAgICAga2V5OiBLZXkgaW4gcmVz
dWx0c19mb3JfYnVpbGRlciBmb3IgdGhlIGxpc3QgdG8gaW5zZXJ0IGludG8uCi0gICAgICAgICIi
IgotICAgICAgICBpZiBrZXkgaW4gcmVzdWx0c19mb3JfYnVpbGRlcjoKLSAgICAgICAgICAgIHJh
d19saXN0ID0gcmVzdWx0c19mb3JfYnVpbGRlcltrZXldCi0gICAgICAgIGVsc2U6Ci0gICAgICAg
ICAgICByYXdfbGlzdCA9IFtdCi0KLSAgICAgICAgcmF3X2xpc3QuaW5zZXJ0KDAsIGl0ZW0pCi0g
ICAgICAgIHJhd19saXN0ID0gcmF3X2xpc3RbOnNlbGYuTUFYX05VTUJFUl9PRl9CVUlMRF9SRVNV
TFRTX1RPX0xPR10KLSAgICAgICAgcmVzdWx0c19mb3JfYnVpbGRlcltrZXldID0gcmF3X2xpc3QK
LQotICAgIGRlZiBfaW5zZXJ0X2l0ZW1fcnVuX2xlbmd0aF9lbmNvZGVkKHNlbGYsIGl0ZW0sIGVu
Y29kZWRfcmVzdWx0cyk6Ci0gICAgICAgICIiIkluc2VydHMgdGhlIGl0ZW0gaW50byB0aGUgcnVu
LWxlbmd0aCBlbmNvZGVkIHJlc3VsdHMuCi0KLSAgICAgICAgQXJnczoKLSAgICAgICAgICBpdGVt
OiBTdHJpbmcgb3IgbnVtYmVyIHRvIGluc2VydC4KLSAgICAgICAgICBlbmNvZGVkX3Jlc3VsdHM6
IHJ1bi1sZW5ndGggZW5jb2RlZCByZXN1bHRzLiBBbiBhcnJheSBvZiBhcnJheXMsIGUuZy4KLSAg
ICAgICAgICAgICAgW1szLCdBJ10sWzEsJ1EnXV0gZW5jb2RlcyBBQUFRLgotICAgICAgICAiIiIK
LSAgICAgICAgaWYgbGVuKGVuY29kZWRfcmVzdWx0cykgYW5kIGl0ZW0gPT0gZW5jb2RlZF9yZXN1
bHRzWzBdWzFdOgotICAgICAgICAgICAgbnVtX3Jlc3VsdHMgPSBlbmNvZGVkX3Jlc3VsdHNbMF1b
MF0KLSAgICAgICAgICAgIGlmIG51bV9yZXN1bHRzIDw9IHNlbGYuTUFYX05VTUJFUl9PRl9CVUlM
RF9SRVNVTFRTX1RPX0xPRzoKLSAgICAgICAgICAgICAgICBlbmNvZGVkX3Jlc3VsdHNbMF1bMF0g
PSBudW1fcmVzdWx0cyArIDEKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgVXNlIGEgbGlz
dCBpbnN0ZWFkIG9mIGEgY2xhc3MgZm9yIHRoZSBydW4tbGVuZ3RoIGVuY29kaW5nIHNpbmNlCi0g
ICAgICAgICAgICAjIHdlIHdhbnQgdGhlIHNlcmlhbGl6ZWQgZm9ybSB0byBiZSBjb25jaXNlLgot
ICAgICAgICAgICAgZW5jb2RlZF9yZXN1bHRzLmluc2VydCgwLCBbMSwgaXRlbV0pCi0KLSAgICBk
ZWYgX2luc2VydF9nZW5lcmljX21ldGFkYXRhKHNlbGYsIHJlc3VsdHNfZm9yX2J1aWxkZXIpOgot
ICAgICAgICAiIiIgSW5zZXJ0cyBnZW5lcmljIG1ldGFkYXRhIChzdWNoIGFzIHZlcnNpb24gbnVt
YmVyLCBjdXJyZW50IHRpbWUgZXRjKQotICAgICAgICBpbnRvIHRoZSBKU09OLgotCi0gICAgICAg
IEFyZ3M6Ci0gICAgICAgICAgcmVzdWx0c19mb3JfYnVpbGRlcjogRGljdGlvbmFyeSBjb250YWlu
aW5nIHRoZSB0ZXN0IHJlc3VsdHMgZm9yCi0gICAgICAgICAgICAgIGEgc2luZ2xlIGJ1aWxkZXIu
Ci0gICAgICAgICIiIgotICAgICAgICBzZWxmLl9pbnNlcnRfaXRlbV9pbnRvX3Jhd19saXN0KHJl
c3VsdHNfZm9yX2J1aWxkZXIsCi0gICAgICAgICAgICBzZWxmLl9idWlsZF9udW1iZXIsIHNlbGYu
QlVJTERfTlVNQkVSUykKLQotICAgICAgICAjIEluY2x1ZGUgU1ZOIHJldmlzaW9ucyBmb3IgdGhl
IGdpdmVuIHJlcG9zaXRvcmllcy4KLSAgICAgICAgZm9yIChuYW1lLCBwYXRoKSBpbiBzZWxmLl9z
dm5fcmVwb3NpdG9yaWVzOgotICAgICAgICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1faW50b19yYXdf
bGlzdChyZXN1bHRzX2Zvcl9idWlsZGVyLAotICAgICAgICAgICAgICAgIHNlbGYuX2dldF9zdm5f
cmV2aXNpb24ocGF0aCksCi0gICAgICAgICAgICAgICAgbmFtZSArICdSZXZpc2lvbicpCi0KLSAg
ICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1faW50b19yYXdfbGlzdChyZXN1bHRzX2Zvcl9idWlsZGVy
LAotICAgICAgICAgICAgaW50KHRpbWUudGltZSgpKSwKLSAgICAgICAgICAgIHNlbGYuVElNRSkK
LQotICAgIGRlZiBfaW5zZXJ0X3Rlc3RfdGltZV9hbmRfcmVzdWx0KHNlbGYsIHRlc3RfbmFtZSwg
dGVzdHMpOgotICAgICAgICAiIiIgSW5zZXJ0IGEgdGVzdCBpdGVtIHdpdGggaXRzIHJlc3VsdHMg
dG8gdGhlIGdpdmVuIHRlc3RzIGRpY3Rpb25hcnkuCi0KLSAgICAgICAgQXJnczoKLSAgICAgICAg
ICB0ZXN0czogRGljdGlvbmFyeSBjb250YWluaW5nIHRlc3QgcmVzdWx0IGVudHJpZXMuCi0gICAg
ICAgICIiIgotCi0gICAgICAgIHJlc3VsdCA9IEpTT05SZXN1bHRzR2VuZXJhdG9yLlBBU1NfUkVT
VUxUCi0gICAgICAgIHRpbWUgPSAwCi0KLSAgICAgICAgaWYgdGVzdF9uYW1lIG5vdCBpbiBzZWxm
Ll9hbGxfdGVzdHM6Ci0gICAgICAgICAgICByZXN1bHQgPSBKU09OUmVzdWx0c0dlbmVyYXRvci5O
T19EQVRBX1JFU1VMVAotCi0gICAgICAgIGlmIHRlc3RfbmFtZSBpbiBzZWxmLl9mYWlsdXJlczoK
LSAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuRkFJTFVSRV9UT19DSEFSW3NlbGYuX2ZhaWx1cmVz
W3Rlc3RfbmFtZV1dCi0KLSAgICAgICAgaWYgdGVzdF9uYW1lIGluIHNlbGYuX3Rlc3RfdGltaW5n
czoKLSAgICAgICAgICAgICMgRmxvb3IgZm9yIG5vdyB0byBnZXQgdGltZSBpbiBzZWNvbmRzLgot
ICAgICAgICAgICAgdGltZSA9IGludChzZWxmLl90ZXN0X3RpbWluZ3NbdGVzdF9uYW1lXSkKLQot
ICAgICAgICBpZiB0ZXN0X25hbWUgbm90IGluIHRlc3RzOgotICAgICAgICAgICAgdGVzdHNbdGVz
dF9uYW1lXSA9IHNlbGYuX2NyZWF0ZV9yZXN1bHRzX2FuZF90aW1lc19qc29uKCkKLQotICAgICAg
ICB0aGlzVGVzdCA9IHRlc3RzW3Rlc3RfbmFtZV0KLSAgICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1f
cnVuX2xlbmd0aF9lbmNvZGVkKHJlc3VsdCwgdGhpc1Rlc3Rbc2VsZi5SRVNVTFRTXSkKLSAgICAg
ICAgc2VsZi5faW5zZXJ0X2l0ZW1fcnVuX2xlbmd0aF9lbmNvZGVkKHRpbWUsIHRoaXNUZXN0W3Nl
bGYuVElNRVNdKQotICAgICAgICBzZWxmLl9ub3JtYWxpemVfcmVzdWx0c19qc29uKHRoaXNUZXN0
LCB0ZXN0X25hbWUsIHRlc3RzKQotCi0gICAgZGVmIF9jb252ZXJ0X2pzb25fdG9fY3VycmVudF92
ZXJzaW9uKHNlbGYsIHJlc3VsdHNfanNvbik6Ci0gICAgICAgICIiIklmIHRoZSBKU09OIGRvZXMg
bm90IG1hdGNoIHRoZSBjdXJyZW50IHZlcnNpb24sIGNvbnZlcnRzIGl0IHRvIHRoZQotICAgICAg
ICBjdXJyZW50IHZlcnNpb24gYW5kIGFkZHMgaW4gdGhlIG5ldyB2ZXJzaW9uIG51bWJlci4KLSAg
ICAgICAgIiIiCi0gICAgICAgIGlmIChzZWxmLlZFUlNJT05fS0VZIGluIHJlc3VsdHNfanNvbiBh
bmQKLSAgICAgICAgICAgIHJlc3VsdHNfanNvbltzZWxmLlZFUlNJT05fS0VZXSA9PSBzZWxmLlZF
UlNJT04pOgotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgcmVzdWx0c19qc29uW3NlbGYu
VkVSU0lPTl9LRVldID0gc2VsZi5WRVJTSU9OCi0KLSAgICBkZWYgX2NyZWF0ZV9yZXN1bHRzX2Fu
ZF90aW1lc19qc29uKHNlbGYpOgotICAgICAgICByZXN1bHRzX2FuZF90aW1lcyA9IHt9Ci0gICAg
ICAgIHJlc3VsdHNfYW5kX3RpbWVzW3NlbGYuUkVTVUxUU10gPSBbXQotICAgICAgICByZXN1bHRz
X2FuZF90aW1lc1tzZWxmLlRJTUVTXSA9IFtdCi0gICAgICAgIHJldHVybiByZXN1bHRzX2FuZF90
aW1lcwotCi0gICAgZGVmIF9jcmVhdGVfcmVzdWx0c19mb3JfYnVpbGRlcl9qc29uKHNlbGYpOgot
ICAgICAgICByZXN1bHRzX2Zvcl9idWlsZGVyID0ge30KLSAgICAgICAgcmVzdWx0c19mb3JfYnVp
bGRlcltzZWxmLlRFU1RTXSA9IHt9Ci0gICAgICAgIHJldHVybiByZXN1bHRzX2Zvcl9idWlsZGVy
Ci0KLSAgICBkZWYgX3JlbW92ZV9pdGVtc19vdmVyX21heF9udW1iZXJfb2ZfYnVpbGRzKHNlbGYs
IGVuY29kZWRfbGlzdCk6Ci0gICAgICAgICIiIlJlbW92ZXMgaXRlbXMgZnJvbSB0aGUgcnVuLWxl
bmd0aCBlbmNvZGVkIGxpc3QgYWZ0ZXIgdGhlIGZpbmFsCi0gICAgICAgIGl0ZW0gdGhhdCBleGNl
ZWRzIHRoZSBtYXggbnVtYmVyIG9mIGJ1aWxkcyB0byB0cmFjay4KLQotICAgICAgICBBcmdzOgot
ICAgICAgICAgIGVuY29kZWRfcmVzdWx0czogcnVuLWxlbmd0aCBlbmNvZGVkIHJlc3VsdHMuIEFu
IGFycmF5IG9mIGFycmF5cywgZS5nLgotICAgICAgICAgICAgICBbWzMsJ0EnXSxbMSwnUSddXSBl
bmNvZGVzIEFBQVEuCi0gICAgICAgICIiIgotICAgICAgICBudW1fYnVpbGRzID0gMAotICAgICAg
ICBpbmRleCA9IDAKLSAgICAgICAgZm9yIHJlc3VsdCBpbiBlbmNvZGVkX2xpc3Q6Ci0gICAgICAg
ICAgICBudW1fYnVpbGRzID0gbnVtX2J1aWxkcyArIHJlc3VsdFswXQotICAgICAgICAgICAgaW5k
ZXggPSBpbmRleCArIDEKLSAgICAgICAgICAgIGlmIG51bV9idWlsZHMgPiBzZWxmLk1BWF9OVU1C
RVJfT0ZfQlVJTERfUkVTVUxUU19UT19MT0c6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVuY29k
ZWRfbGlzdFs6aW5kZXhdCi0gICAgICAgIHJldHVybiBlbmNvZGVkX2xpc3QKLQotICAgIGRlZiBf
bm9ybWFsaXplX3Jlc3VsdHNfanNvbihzZWxmLCB0ZXN0LCB0ZXN0X25hbWUsIHRlc3RzKToKLSAg
ICAgICAgIiIiIFBydW5lIHRlc3RzIHdoZXJlIGFsbCBydW5zIHBhc3Mgb3IgdGVzdHMgdGhhdCBu
byBsb25nZXIgZXhpc3QgYW5kCi0gICAgICAgIHRydW5jYXRlIGFsbCByZXN1bHRzIHRvIG1heE51
bWJlck9mQnVpbGRzLgotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgdGVzdDogUmVzdWx0c0Fu
ZFRpbWVzIG9iamVjdCBmb3IgdGhpcyB0ZXN0LgotICAgICAgICAgIHRlc3RfbmFtZTogTmFtZSBv
ZiB0aGUgdGVzdC4KLSAgICAgICAgICB0ZXN0czogVGhlIEpTT04gb2JqZWN0IHdpdGggYWxsIHRo
ZSB0ZXN0IHJlc3VsdHMgZm9yIHRoaXMgYnVpbGRlci4KLSAgICAgICAgIiIiCi0gICAgICAgIHRl
c3Rbc2VsZi5SRVNVTFRTXSA9IHNlbGYuX3JlbW92ZV9pdGVtc19vdmVyX21heF9udW1iZXJfb2Zf
YnVpbGRzKAotICAgICAgICAgICAgdGVzdFtzZWxmLlJFU1VMVFNdKQotICAgICAgICB0ZXN0W3Nl
bGYuVElNRVNdID0gc2VsZi5fcmVtb3ZlX2l0ZW1zX292ZXJfbWF4X251bWJlcl9vZl9idWlsZHMo
Ci0gICAgICAgICAgICB0ZXN0W3NlbGYuVElNRVNdKQotCi0gICAgICAgIGlzX2FsbF9wYXNzID0g
c2VsZi5faXNfcmVzdWx0c19hbGxfb2ZfdHlwZSh0ZXN0W3NlbGYuUkVTVUxUU10sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLlBBU1NfUkVT
VUxUKQotICAgICAgICBpc19hbGxfbm9fZGF0YSA9IHNlbGYuX2lzX3Jlc3VsdHNfYWxsX29mX3R5
cGUodGVzdFtzZWxmLlJFU1VMVFNdLAotICAgICAgICAgICAgc2VsZi5OT19EQVRBX1JFU1VMVCkK
LSAgICAgICAgbWF4X3RpbWUgPSBtYXgoW3RpbWVbMV0gZm9yIHRpbWUgaW4gdGVzdFtzZWxmLlRJ
TUVTXV0pCi0KLSAgICAgICAgIyBSZW1vdmUgYWxsIHBhc3Nlcy9uby1kYXRhIGZyb20gdGhlIHJl
c3VsdHMgdG8gcmVkdWNlIG5vaXNlIGFuZAotICAgICAgICAjIGZpbGVzaXplLiBJZiBhIHRlc3Qg
cGFzc2VzIGV2ZXJ5IHJ1biwgYnV0IHRha2VzID4gTUlOX1RJTUUgdG8gcnVuLAotICAgICAgICAj
IGRvbid0IHRocm93IGF3YXkgdGhlIGRhdGEuCi0gICAgICAgIGlmIGlzX2FsbF9ub19kYXRhIG9y
IChpc19hbGxfcGFzcyBhbmQgbWF4X3RpbWUgPD0gc2VsZi5NSU5fVElNRSk6Ci0gICAgICAgICAg
ICBkZWwgdGVzdHNbdGVzdF9uYW1lXQogCi0gICAgZGVmIF9pc19yZXN1bHRzX2FsbF9vZl90eXBl
KHNlbGYsIHJlc3VsdHMsIHR5cGUpOgotICAgICAgICAiIiJSZXR1cm5zIHdoZXRoZXIgYWxsIHRo
ZSByZXN1bHRzIGFyZSBvZiB0aGUgZ2l2ZW4gdHlwZQotICAgICAgICAoZS5nLiBhbGwgcGFzc2Vz
KS4iIiIKLSAgICAgICAgcmV0dXJuIGxlbihyZXN1bHRzKSA9PSAxIGFuZCByZXN1bHRzWzBdWzFd
ID09IHR5cGUKKyAgICAgICAgc3VwZXIoSlNPTlJlc3VsdHNHZW5lcmF0b3IsIHNlbGYpLl9faW5p
dF9fKAorICAgICAgICAgICAgYnVpbGRlcl9uYW1lLCBidWlsZF9uYW1lLCBidWlsZF9udW1iZXIs
CisgICAgICAgICAgICByZXN1bHRzX2ZpbGVfYmFzZV9wYXRoLCBidWlsZGVyX2Jhc2VfdXJsLAor
ICAgICAgICAgICAgdGVzdF90aW1pbmdzLCBmYWlsdXJlcywgcGFzc2VkX3Rlc3RzLCBza2lwcGVk
X3Rlc3RzLCBhbGxfdGVzdHMsCisgICAgICAgICAgICBzdm5fcmVwb3NpdG9yaWVzPXBvcnQudGVz
dF9yZXBvc2l0b3J5X3BhdGhzKCkpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X2V4cGVjdGF0aW9ucy5weSBi
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdl
L3Rlc3RfZXhwZWN0YXRpb25zLnB5CmluZGV4IDM4MjIzZGRkYmIyMzNiMGU0MzVlMWM3MjQ5NDVi
MTNlNDcxMThmYjUuLjIxNTE3YTZkN2JlZTg3ZTYxOTA2MTYyYTVjZjUxYzk3Y2Y2N2VmMGEgMTAw
NjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL3Rlc3RfZXhwZWN0YXRpb25zLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfZXhwZWN0YXRpb25zLnB5
CkBAIC0zNiwxNSArMzYsMTQgQEAgaW1wb3J0IG9zCiBpbXBvcnQgcmUKIGltcG9ydCBzeXMKIAor
IyBJbXBvcnQgdGVzdF9yZXN1bHRzIGNvbnN0YW50cyAoZS5nLiBQQVNTLCBTS0lQIGFuZCBldGMp
LgorZnJvbSB3ZWJraXRweS5jb21tb24udGVzdC50ZXN0X3Jlc3VsdHMgaW1wb3J0ICoKKwogaW1w
b3J0IHdlYmtpdHB5LnRoaXJkcGFydHkuc2ltcGxlanNvbiBhcyBzaW1wbGVqc29uCiAKIF9sb2cg
PSBsb2dnaW5nLmdldExvZ2dlcigid2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdl
LiIKICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9leHBlY3RhdGlvbnMiKQogCi0jIFRl
c3QgZXhwZWN0YXRpb24gYW5kIG1vZGlmaWVyIGNvbnN0YW50cy4KLShQQVNTLCBGQUlMLCBURVhU
LCBJTUFHRSwgSU1BR0VfUExVU19URVhULCBUSU1FT1VULCBDUkFTSCwgU0tJUCwgV09OVEZJWCwK
LSBERUZFUiwgU0xPVywgUkVCQVNFTElORSwgTUlTU0lORywgRkxBS1ksIE5PVywgTk9ORSkgPSBy
YW5nZSgxNikKLQogIyBUZXN0IGV4cGVjdGF0aW9uIGZpbGUgdXBkYXRlIGFjdGlvbiBjb25zdGFu
dHMKIChOT19DSEFOR0UsIFJFTU9WRV9URVNULCBSRU1PVkVfUExBVEZPUk0sIEFERF9QTEFURk9S
TVNfRVhDRVBUX1RISVMpID0gcmFuZ2UoNCkKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59952</attachid>
            <date>2010-06-28 15:23:52 -0700</date>
            <delta_ts>2010-06-28 15:30:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-38693-20100628152351.patch</filename>
            <type>text/plain</type>
            <size>28142</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAxYjk5MzZkNDJhMWQwYmE0MzU0YWQyM2M0YjQ1NjU0OWVkOGYwNmI1Li44YTQ3OTE1
Y2I0ZmY3NWJkZmNiMzFkMTNlM2YyYmI4NTc5NzI0MDlhIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAK
KzIwMTAtMDYtMjcgIEtpbnVrbyBZYXN1ZGEgIDxraW51a29AY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGNsZWFudXAganNvbl9y
ZXN1bHRzX2dlbmVyYXRvciBkZXBlbmRlbmNpZXMgc28gdGhhdCBub24tbGF5b3V0LXRlc3RzIGNh
biBhbHNvIHVzZSBpdCBzYWZlbHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTM4NjkzCisKKyAgICAgICAgSW50cm9kdWNlZCBhIG5ldyBiYXNlIGNsYXNz
IEpTT05SZXN1bHRzR2VuZXJhdG9yQmFzZSB0aGF0IGRvZXNuJ3QKKyAgICAgICAgaGF2ZSBhbnkg
ZGVwZW5kZW5jeSBvbiBsYXlvdXRfdGVzdHMgcGFja2FnZXMuCisgICAgICAgIFR1cm5lZCBKU09O
UmVzdWx0c0dlbmVyYXRvciBpbnRvIGEgd3JhcHBlciBjbGFzcyBvZiB0aGUgYmFzZSBjbGFzcwor
ICAgICAgICBzbyB0aGF0IHRoZSBvbGQgY29kZSBjYW4gd29yayB3aXRoIGl0IGR1cmluZyB0aGUg
Y2xlYW51cC4KKworICAgICAgICBBZGRlZCBqc29uX3Jlc3VsdHNfZ2VuZXJhdG9yX3VuaXR0ZXN0
LnB5LgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3Bh
Y2thZ2UvanNvbl9sYXlvdXRfcmVzdWx0c19nZW5lcmF0b3IucHk6CisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVy
YXRvci5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRf
cGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yX3VuaXR0ZXN0LnB5OiBBZGRlZAorCiAyMDEw
LTA2LTE3ICBUb255IENoYW5nICA8dG9ueUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgS2VudCBUYW11cmEuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX2xheW91dF9yZXN1bHRzX2dlbmVy
YXRvci5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL2pzb25fbGF5b3V0X3Jlc3VsdHNfZ2VuZXJhdG9yLnB5CmluZGV4IGJiMjE0Zjdk
YWM3MWZlZjQxZTI0YTEzNGRmZDI3MDMxZWRlMzIxMTYuLjQ3YTllODI0ZTdmMmQ3MjY4MTM3ZTIy
YTY3ZGUxZjczNDZlOWJiZGYgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25fbGF5b3V0X3Jlc3VsdHNfZ2VuZXJh
dG9yLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL2pzb25fbGF5b3V0X3Jlc3VsdHNfZ2VuZXJhdG9yLnB5CkBAIC0zNSw3ICsz
NSw4IEBAIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCB0
ZXN0X2V4cGVjdGF0aW9ucwogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2th
Z2UgaW1wb3J0IHRlc3RfZmFpbHVyZXMKIGltcG9ydCB3ZWJraXRweS50aGlyZHBhcnR5LnNpbXBs
ZWpzb24gYXMgc2ltcGxlanNvbgogCi1jbGFzcyBKU09OTGF5b3V0UmVzdWx0c0dlbmVyYXRvcihq
c29uX3Jlc3VsdHNfZ2VuZXJhdG9yLkpTT05SZXN1bHRzR2VuZXJhdG9yKToKKworY2xhc3MgSlNP
TkxheW91dFJlc3VsdHNHZW5lcmF0b3IoanNvbl9yZXN1bHRzX2dlbmVyYXRvci5KU09OUmVzdWx0
c0dlbmVyYXRvckJhc2UpOgogICAgICIiIkEgSlNPTiByZXN1bHRzIGdlbmVyYXRvciBmb3IgbGF5
b3V0IHRlc3RzLiIiIgogCiAgICAgTEFZT1VUX1RFU1RTX1BBVEggPSAiTGF5b3V0VGVzdHMiCkBA
IC00NCw2ICs0NSwxNiBAQCBjbGFzcyBKU09OTGF5b3V0UmVzdWx0c0dlbmVyYXRvcihqc29uX3Jl
c3VsdHNfZ2VuZXJhdG9yLkpTT05SZXN1bHRzR2VuZXJhdG9yKToKICAgICBXT05URklYID0gIndv
bnRmaXhDb3VudHMiCiAgICAgREVGRVJSRUQgPSAiZGVmZXJyZWRDb3VudHMiCiAKKyAgICAjIE5v
dGUgdGhhdCB3ZSBvbWl0IHRlc3RfZXhwZWN0YXRpb25zLkZBSUwgZnJvbSB0aGlzIGxpc3QgYmVj
YXVzZQorICAgICMgaXQgc2hvdWxkIG5ldmVyIHNob3cgdXAgKGl0J3MgYSBsZWdhY3kgaW5wdXQg
ZXhwZWN0YXRpb24sIG5ldmVyCisgICAgIyBhbiBvdXRwdXQgZXhwZWN0YXRpb24pLgorICAgIEZB
SUxVUkVfVE9fQ0hBUiA9IHt0ZXN0X2V4cGVjdGF0aW9ucy5DUkFTSDogIkMiLAorICAgICAgICAg
ICAgICAgICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucy5USU1FT1VUOiAiVCIsCisgICAgICAgICAg
ICAgICAgICAgICAgIHRlc3RfZXhwZWN0YXRpb25zLklNQUdFOiAiSSIsCisgICAgICAgICAgICAg
ICAgICAgICAgIHRlc3RfZXhwZWN0YXRpb25zLlRFWFQ6ICJGIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgdGVzdF9leHBlY3RhdGlvbnMuTUlTU0lORzogIk8iLAorICAgICAgICAgICAgICAgICAg
ICAgICB0ZXN0X2V4cGVjdGF0aW9ucy5JTUFHRV9QTFVTX1RFWFQ6ICJaIn0KKwogICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBwb3J0LCBidWlsZGVyX25hbWUsIGJ1aWxkX25hbWUsIGJ1aWxkX251bWJl
ciwKICAgICAgICAgcmVzdWx0c19maWxlX2Jhc2VfcGF0aCwgYnVpbGRlcl9iYXNlX3VybCwKICAg
ICAgICAgdGVzdF90aW1pbmdzLCBleHBlY3RhdGlvbnMsIHJlc3VsdF9zdW1tYXJ5LCBhbGxfdGVz
dHMpOgpAQCAtNTMsMjAgKzY0LDE0IEBAIGNsYXNzIEpTT05MYXlvdXRSZXN1bHRzR2VuZXJhdG9y
KGpzb25fcmVzdWx0c19nZW5lcmF0b3IuSlNPTlJlc3VsdHNHZW5lcmF0b3IpOgogICAgICAgICBB
cmdzOgogICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5OiBSZXN1bHRzU3VtbWFyeSBvYmplY3Qgc3Rv
cmluZyB0aGUgc3VtbWFyeSBvZiB0aGUgdGVzdAogICAgICAgICAgICAgICByZXN1bHRzLgotICAg
ICAgICAgIChzZWUgdGhlIGNvbW1lbnQgb2YgSlNPTlJlc3VsdHNHZW5lcmF0b3IuX19pbml0X18g
Zm9yIG90aGVyIEFyZ3MpCiAgICAgICAgICIiIgorICAgICAgICBzdXBlcihKU09OTGF5b3V0UmVz
dWx0c0dlbmVyYXRvciwgc2VsZikuX19pbml0X18oCisgICAgICAgICAgICBidWlsZGVyX25hbWUs
IGJ1aWxkX25hbWUsIGJ1aWxkX251bWJlciwgcmVzdWx0c19maWxlX2Jhc2VfcGF0aCwKKyAgICAg
ICAgICAgIGJ1aWxkZXJfYmFzZV91cmwsIHt9LCBwb3J0LnRlc3RfcmVwb3NpdG9yeV9wYXRocygp
KQorCiAgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0Ci0gICAgICAgIHNlbGYuX2J1aWxkZXJfbmFt
ZSA9IGJ1aWxkZXJfbmFtZQotICAgICAgICBzZWxmLl9idWlsZF9uYW1lID0gYnVpbGRfbmFtZQot
ICAgICAgICBzZWxmLl9idWlsZF9udW1iZXIgPSBidWlsZF9udW1iZXIKLSAgICAgICAgc2VsZi5f
YnVpbGRlcl9iYXNlX3VybCA9IGJ1aWxkZXJfYmFzZV91cmwKLSAgICAgICAgc2VsZi5fcmVzdWx0
c19maWxlX3BhdGggPSBvcy5wYXRoLmpvaW4ocmVzdWx0c19maWxlX2Jhc2VfcGF0aCwKLSAgICAg
ICAgICAgIHNlbGYuUkVTVUxUU19GSUxFTkFNRSkKICAgICAgICAgc2VsZi5fZXhwZWN0YXRpb25z
ID0gZXhwZWN0YXRpb25zCiAKLSAgICAgICAgIyBXZSBkb24ndCB1c2Ugc2VsZi5fc2tpcHBlZF90
ZXN0cyBhbmQgc2VsZi5fcGFzc2VkX3Rlc3RzIGFzIHdlCi0gICAgICAgICMgb3ZlcnJpZGUgX0lu
c2VydEZhaWx1cmVTdW1tYXJpZXMuCi0KICAgICAgICAgIyBXZSB3YW50IHJlbGF0aXZlIHBhdGhz
IHRvIExheW91dFRlc3Qgcm9vdCBmb3IgSlNPTiBvdXRwdXQuCiAgICAgICAgIHBhdGhfdG9fbmFt
ZSA9IHNlbGYuX2dldF9wYXRoX3JlbGF0aXZlX3RvX2xheW91dF90ZXN0X3Jvb3QKICAgICAgICAg
c2VsZi5fcmVzdWx0X3N1bW1hcnkgPSByZXN1bHRfc3VtbWFyeQpAQCAtNzcsOSArODIsOCBAQCBj
bGFzcyBKU09OTGF5b3V0UmVzdWx0c0dlbmVyYXRvcihqc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLkpT
T05SZXN1bHRzR2VuZXJhdG9yKToKICAgICAgICAgc2VsZi5fdGVzdF90aW1pbmdzID0gZGljdCgK
ICAgICAgICAgICAgIChwYXRoX3RvX25hbWUodGVzdF90dXBsZS5maWxlbmFtZSksIHRlc3RfdHVw
bGUudGVzdF9ydW5fdGltZSkKICAgICAgICAgICAgIGZvciB0ZXN0X3R1cGxlIGluIHRlc3RfdGlt
aW5ncykKLSAgICAgICAgc2VsZi5fc3ZuX3JlcG9zaXRvcmllcyA9IHBvcnQudGVzdF9yZXBvc2l0
b3J5X3BhdGhzKCkKIAotICAgICAgICBzZWxmLl9nZW5lcmF0ZV9qc29uX291dHB1dCgpCisgICAg
ICAgIHNlbGYuZ2VuZXJhdGVfanNvbl9vdXRwdXQoKQogCiAgICAgZGVmIF9nZXRfcGF0aF9yZWxh
dGl2ZV90b19sYXlvdXRfdGVzdF9yb290KHNlbGYsIHRlc3QpOgogICAgICAgICAiIiJSZXR1cm5z
IHRoZSBwYXRoIG9mIHRoZSB0ZXN0IHJlbGF0aXZlIHRvIHRoZSBsYXlvdXQgdGVzdCByb290LgpA
QCAtMTAyLDYgKzEwNiwyNyBAQCBjbGFzcyBKU09OTGF5b3V0UmVzdWx0c0dlbmVyYXRvcihqc29u
X3Jlc3VsdHNfZ2VuZXJhdG9yLkpTT05SZXN1bHRzR2VuZXJhdG9yKToKICAgICAgICAgcmV0dXJu
IHJlbGF0aXZlUGF0aC5yZXBsYWNlKCdcXCcsICcvJykKIAogICAgICMgb3ZlcnJpZGUKKyAgICBk
ZWYgX2dldF90ZXN0X3RpbWluZyhzZWxmLCB0ZXN0X25hbWUpOgorICAgICAgICBpZiB0ZXN0X25h
bWUgaW4gc2VsZi5fdGVzdF90aW1pbmdzOgorICAgICAgICAgICAgIyBGbG9vciBmb3Igbm93IHRv
IGdldCB0aW1lIGluIHNlY29uZHMuCisgICAgICAgICAgICByZXR1cm4gaW50KHNlbGYuX3Rlc3Rf
dGltaW5nc1t0ZXN0X25hbWVdKQorICAgICAgICByZXR1cm4gMAorCisgICAgIyBvdmVycmlkZQor
ICAgIGRlZiBfZ2V0X2ZhaWxlZF90ZXN0X25hbWVzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2V0
KHNlbGYuX2ZhaWx1cmVzLmtleXMoKSkKKworICAgICMgb3ZlcnJpZGUKKyAgICBkZWYgX2dldF9y
ZXN1bHRfdHlwZV9jaGFyKHNlbGYsIHRlc3RfbmFtZSk6CisgICAgICAgIGlmIHRlc3RfbmFtZSBu
b3QgaW4gc2VsZi5fYWxsX3Rlc3RzOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuTk9fREFUQV9S
RVNVTFQKKworICAgICAgICBpZiB0ZXN0X25hbWUgaW4gc2VsZi5fZmFpbHVyZXM6CisgICAgICAg
ICAgICByZXR1cm4gc2VsZi5GQUlMVVJFX1RPX0NIQVJbc2VsZi5fZmFpbHVyZXNbdGVzdF9uYW1l
XV0KKworICAgICAgICByZXR1cm4gc2VsZi5QQVNTX1JFU1VMVAorCisgICAgIyBvdmVycmlkZQog
ICAgIGRlZiBfY29udmVydF9qc29uX3RvX2N1cnJlbnRfdmVyc2lvbihzZWxmLCByZXN1bHRzX2pz
b24pOgogICAgICAgICBhcmNoaXZlX3ZlcnNpb24gPSBOb25lCiAgICAgICAgIGlmIHNlbGYuVkVS
U0lPTl9LRVkgaW4gcmVzdWx0c19qc29uOgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVy
YXRvci5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5lcmF0b3IucHkKaW5kZXggMWNmMWI5NThkZDI2ODk4
ZDIyMTBiN2Y3NDIyM2FlM2U0Mzg1MTczNy4uZmQ3YzdlNTBmYjU0ZDc1OTQ1NTk2NDhjZGQ0NmQ2
MjI0ODNlMmRmZiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvci5weQorKysgYi9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9q
c29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5CkBAIC0zOCwxNiArMzgsMjcgQEAgaW1wb3J0IHRpbWUK
IGltcG9ydCB1cmxsaWIyCiBpbXBvcnQgeG1sLmRvbS5taW5pZG9tCiAKLWZyb20gd2Via2l0cHku
Y29tbW9uLmNoZWNrb3V0IGltcG9ydCBzY20KLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5l
eGVjdXRpdmUgaW1wb3J0IFNjcmlwdEVycm9yCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5s
YXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9leHBlY3RhdGlvbnMKIGltcG9ydCB3ZWJraXRweS50
aGlyZHBhcnR5LnNpbXBsZWpzb24gYXMgc2ltcGxlanNvbgogCi1fbG9nID0gbG9nZ2luZy5nZXRM
b2dnZXIoIndlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZS4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgImpzb25fcmVzdWx0c19nZW5lcmF0b3IiKQorIyBBIEpTT04gcmVzdWx0
cyBnZW5lcmF0b3IgZm9yIGdlbmVyaWMgdGVzdHMuCisjIEZJWE1FOiBtb3ZlIHRoaXMgY29kZSBv
dXQgb2YgdGhlIGxheW91dF9wYWNrYWdlIGRpcmVjdG9yeS4KIAorX2xvZyA9IGxvZ2dpbmcuZ2V0
TG9nZ2VyKCJ3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UuanNvbl9yZXN1bHRz
X2dlbmVyYXRvciIpCiAKLWNsYXNzIEpTT05SZXN1bHRzR2VuZXJhdG9yKG9iamVjdCk6CisKK2Ns
YXNzIFRlc3RSZXN1bHQob2JqZWN0KToKKyAgICAiIiJBIHNpbXBsZSBjbGFzcyB0aGF0IHJlcHJl
c2VudHMgYSBzaW5nbGUgdGVzdCByZXN1bHQuIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5h
bWUsIGZhaWxlZD1GYWxzZSwgc2tpcHBlZD1GYWxzZSwgZWxhcHNlZF90aW1lPTApOgorICAgICAg
ICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgIHNlbGYuZmFpbGVkID0gZmFpbGVkCisgICAgICAg
IHNlbGYuc2tpcHBlZCA9IHNraXBwZWQKKyAgICAgICAgc2VsZi50aW1lID0gZWxhcHNlZF90aW1l
CisKKyAgICBkZWYgZml4YWJsZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZmFpbGVkIG9y
IHNlbGYuc2tpcHBlZAorCisKK2NsYXNzIEpTT05SZXN1bHRzR2VuZXJhdG9yQmFzZShvYmplY3Qp
OgogICAgICIiIkEgSlNPTiByZXN1bHRzIGdlbmVyYXRvciBmb3IgZ2VuZXJpYyB0ZXN0cy4iIiIK
IAogICAgIE1BWF9OVU1CRVJfT0ZfQlVJTERfUkVTVUxUU19UT19MT0cgPSA3NTAKQEAgLTU3LDYg
KzY4LDcgQEAgY2xhc3MgSlNPTlJlc3VsdHNHZW5lcmF0b3Iob2JqZWN0KToKICAgICBKU09OX1NV
RkZJWCA9ICIpOyIKICAgICBQQVNTX1JFU1VMVCA9ICJQIgogICAgIFNLSVBfUkVTVUxUID0gIlgi
CisgICAgRkFJTF9SRVNVTFQgPSAiRiIKICAgICBOT19EQVRBX1JFU1VMVCA9ICJOIgogICAgIFZF
UlNJT04gPSAzCiAgICAgVkVSU0lPTl9LRVkgPSAidmVyc2lvbiIKQEAgLTcwLDIyICs4MiwxMSBA
QCBjbGFzcyBKU09OUmVzdWx0c0dlbmVyYXRvcihvYmplY3QpOgogICAgIEZJWEFCTEUgPSAiZml4
YWJsZUNvdW50cyIKICAgICBBTExfRklYQUJMRV9DT1VOVCA9ICJhbGxGaXhhYmxlQ291bnQiCiAK
LSAgICAjIE5vdGUgdGhhdCB3ZSBvbWl0IHRlc3RfZXhwZWN0YXRpb25zLkZBSUwgZnJvbSB0aGlz
IGxpc3QgYmVjYXVzZQotICAgICMgaXQgc2hvdWxkIG5ldmVyIHNob3cgdXAgKGl0J3MgYSBsZWdh
Y3kgaW5wdXQgZXhwZWN0YXRpb24sIG5ldmVyCi0gICAgIyBhbiBvdXRwdXQgZXhwZWN0YXRpb24p
LgotICAgIEZBSUxVUkVfVE9fQ0hBUiA9IHt0ZXN0X2V4cGVjdGF0aW9ucy5DUkFTSDogIkMiLAot
ICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucy5USU1FT1VUOiAiVCIsCi0g
ICAgICAgICAgICAgICAgICAgICAgIHRlc3RfZXhwZWN0YXRpb25zLklNQUdFOiAiSSIsCi0gICAg
ICAgICAgICAgICAgICAgICAgIHRlc3RfZXhwZWN0YXRpb25zLlRFWFQ6ICJGIiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgdGVzdF9leHBlY3RhdGlvbnMuTUlTU0lORzogIk8iLAotICAgICAgICAg
ICAgICAgICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucy5JTUFHRV9QTFVTX1RFWFQ6ICJaIn0KLSAg
ICBGQUlMVVJFX0NIQVJTID0gRkFJTFVSRV9UT19DSEFSLnZhbHVlcygpCi0KICAgICBSRVNVTFRT
X0ZJTEVOQU1FID0gInJlc3VsdHMuanNvbiIKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0
LCBidWlsZGVyX25hbWUsIGJ1aWxkX25hbWUsIGJ1aWxkX251bWJlciwKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgYnVpbGRlcl9uYW1lLCBidWlsZF9uYW1lLCBidWlsZF9udW1iZXIsCiAgICAgICAg
IHJlc3VsdHNfZmlsZV9iYXNlX3BhdGgsIGJ1aWxkZXJfYmFzZV91cmwsCi0gICAgICAgIHRlc3Rf
dGltaW5ncywgZmFpbHVyZXMsIHBhc3NlZF90ZXN0cywgc2tpcHBlZF90ZXN0cywgYWxsX3Rlc3Rz
KToKKyAgICAgICAgdGVzdF9yZXN1bHRzX21hcCwgc3ZuX3JlcG9zaXRvcmllcz1Ob25lKToKICAg
ICAgICAgIiIiTW9kaWZpZXMgdGhlIHJlc3VsdHMuanNvbiBmaWxlLiBHcmFicyBpdCBvZmYgdGhl
IGFyY2hpdmUgZGlyZWN0b3J5CiAgICAgICAgIGlmIGl0IGlzIG5vdCBmb3VuZCBsb2NhbGx5Lgog
CkBAIC05NiwxMiArOTcsMTEgQEAgY2xhc3MgSlNPTlJlc3VsdHNHZW5lcmF0b3Iob2JqZWN0KToK
ICAgICAgICAgICByZXN1bHRzX2ZpbGVfYmFzZV9wYXRoOiBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBk
aXJlY3RvcnkgY29udGFpbmluZyB0aGUKICAgICAgICAgICAgICAgcmVzdWx0cyBqc29uIGZpbGUu
CiAgICAgICAgICAgYnVpbGRlcl9iYXNlX3VybDogdGhlIFVSTCB3aGVyZSB3ZSBoYXZlIHRoZSBh
cmNoaXZlZCB0ZXN0IHJlc3VsdHMuCi0gICAgICAgICAgdGVzdF90aW1pbmdzOiBNYXAgb2YgdGVz
dCBuYW1lIHRvIGEgdGVzdF9ydW4tdGltZS4KLSAgICAgICAgICBmYWlsdXJlczogTWFwIG9mIHRl
c3QgbmFtZSB0byBhIGZhaWx1cmUgdHlwZSAob2YgdGVzdF9leHBlY3RhdGlvbnMpLgotICAgICAg
ICAgIHBhc3NlZF90ZXN0czogQSBzZXQgY29udGFpbmluZyBhbGwgdGhlIHBhc3NlZCB0ZXN0cy4K
LSAgICAgICAgICBza2lwcGVkX3Rlc3RzOiBBIHNldCBjb250YWluaW5nIGFsbCB0aGUgc2tpcHBl
ZCB0ZXN0cy4KLSAgICAgICAgICBhbGxfdGVzdHM6IExpc3Qgb2YgYWxsIHRoZSB0ZXN0cyB0aGF0
IHdlcmUgcnVuLiAgVGhpcyBzaG91bGQgbm90Ci0gICAgICAgICAgICAgIGluY2x1ZGUgc2tpcHBl
ZCB0ZXN0cy4KKyAgICAgICAgICAgICAgSWYgdGhpcyBpcyBOb25lIG5vIGFyY2hpdmVkIHJlc3Vs
dHMgd2lsbCBiZSByZXRyaWV2ZWQuCisgICAgICAgICAgdGVzdF9yZXN1bHRzX21hcDogQSBkaWN0
aW9uYXJ5IHRoYXQgbWFwcyB0ZXN0X25hbWUgdG8gVGVzdFJlc3VsdC4KKyAgICAgICAgICBzdm5f
cmVwb3NpdG9yaWVzOiBBIChqc29uX2ZpZWxkX25hbWUsIHN2bl9wYXRoKSBwYWlyIGZvciBTVk4K
KyAgICAgICAgICAgICAgcmVwb3NpdG9yaWVzIHRoYXQgdGVzdHMgcmVseSBvbi4gIFRoZSBTVk4g
cmV2aXNpb24gd2lsbCBiZQorICAgICAgICAgICAgICBpbmNsdWRlZCBpbiB0aGUgSlNPTiB3aXRo
IHRoZSBnaXZlbiBqc29uX2ZpZWxkX25hbWUuCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLl9i
dWlsZGVyX25hbWUgPSBidWlsZGVyX25hbWUKICAgICAgICAgc2VsZi5fYnVpbGRfbmFtZSA9IGJ1
aWxkX25hbWUKQEAgLTEwOSwzMSArMTA5LDEwOCBAQCBjbGFzcyBKU09OUmVzdWx0c0dlbmVyYXRv
cihvYmplY3QpOgogICAgICAgICBzZWxmLl9idWlsZGVyX2Jhc2VfdXJsID0gYnVpbGRlcl9iYXNl
X3VybAogICAgICAgICBzZWxmLl9yZXN1bHRzX2ZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihyZXN1
bHRzX2ZpbGVfYmFzZV9wYXRoLAogICAgICAgICAgICAgc2VsZi5SRVNVTFRTX0ZJTEVOQU1FKQot
ICAgICAgICBzZWxmLl90ZXN0X3RpbWluZ3MgPSB0ZXN0X3RpbWluZ3MKLSAgICAgICAgc2VsZi5f
ZmFpbHVyZXMgPSBmYWlsdXJlcwotICAgICAgICBzZWxmLl9wYXNzZWRfdGVzdHMgPSBwYXNzZWRf
dGVzdHMKLSAgICAgICAgc2VsZi5fc2tpcHBlZF90ZXN0cyA9IHNraXBwZWRfdGVzdHMKLSAgICAg
ICAgc2VsZi5fYWxsX3Rlc3RzID0gYWxsX3Rlc3RzCi0gICAgICAgIHNlbGYuX3N2bl9yZXBvc2l0
b3JpZXMgPSBwb3J0LnRlc3RfcmVwb3NpdG9yeV9wYXRocygpCiAKLSAgICAgICAgc2VsZi5fZ2Vu
ZXJhdGVfanNvbl9vdXRwdXQoKQorICAgICAgICBzZWxmLl90ZXN0X3Jlc3VsdHNfbWFwID0gdGVz
dF9yZXN1bHRzX21hcAorICAgICAgICBzZWxmLl90ZXN0X3Jlc3VsdHMgPSB0ZXN0X3Jlc3VsdHNf
bWFwLnZhbHVlcygpCisgICAgICAgIHNlbGYuX3Rlc3RfdGltaW5ncyA9IGRpY3QoWyhyLm5hbWUs
IHIudGltZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHIgaW4gc2Vs
Zi5fdGVzdF9yZXN1bHRzXSkKKworICAgICAgICBzZWxmLl9zdm5fcmVwb3NpdG9yaWVzID0gc3Zu
X3JlcG9zaXRvcmllcworICAgICAgICBpZiBub3Qgc2VsZi5fc3ZuX3JlcG9zaXRvcmllczoKKyAg
ICAgICAgICAgIHNlbGYuX3N2bl9yZXBvc2l0b3JpZXMgPSB7fQorCisgICAgICAgIHNlbGYuX2pz
b24gPSBOb25lCiAKLSAgICBkZWYgX2dlbmVyYXRlX2pzb25fb3V0cHV0KHNlbGYpOgorICAgIGRl
ZiBnZW5lcmF0ZV9qc29uX291dHB1dChzZWxmKToKICAgICAgICAgIiIiR2VuZXJhdGVzIHRoZSBK
U09OIG91dHB1dCBmaWxlLiIiIgotICAgICAgICBqc29uID0gc2VsZi5fZ2V0X2pzb24oKQotICAg
ICAgICBpZiBqc29uOgorICAgICAgICBpZiBub3Qgc2VsZi5fanNvbjoKKyAgICAgICAgICAgIHNl
bGYuX2pzb24gPSBzZWxmLmdldF9qc29uKCkKKyAgICAgICAgaWYgc2VsZi5fanNvbjoKKyAgICAg
ICAgICAgICMgU3BlY2lmeSBzZXBhcmF0b3JzIGluIG9yZGVyIHRvIGdldCBjb21wYWN0IGVuY29k
aW5nLgorICAgICAgICAgICAganNvbl9kYXRhID0gc2ltcGxlanNvbi5kdW1wcyhzZWxmLl9qc29u
LCBzZXBhcmF0b3JzPSgnLCcsICc6JykpCisgICAgICAgICAgICBqc29uX3N0cmluZyA9IHNlbGYu
SlNPTl9QUkVGSVggKyBqc29uX2RhdGEgKyBzZWxmLkpTT05fU1VGRklYCisKICAgICAgICAgICAg
IHJlc3VsdHNfZmlsZSA9IGNvZGVjcy5vcGVuKHNlbGYuX3Jlc3VsdHNfZmlsZV9wYXRoLCAidyIs
ICJ1dGYtOCIpCi0gICAgICAgICAgICByZXN1bHRzX2ZpbGUud3JpdGUoanNvbikKKyAgICAgICAg
ICAgIHJlc3VsdHNfZmlsZS53cml0ZShqc29uX3N0cmluZykKICAgICAgICAgICAgIHJlc3VsdHNf
ZmlsZS5jbG9zZSgpCiAKKyAgICBkZWYgZ2V0X2pzb24oc2VsZik6CisgICAgICAgICIiIkdldHMg
dGhlIHJlc3VsdHMgZm9yIHRoZSByZXN1bHRzLmpzb24gZmlsZS4iIiIKKyAgICAgICAgaWYgc2Vs
Zi5fanNvbjoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9qc29uCisKKyAgICAgICAgcmVzdWx0
c19qc29uLCBlcnJvciA9IHNlbGYuX2dldF9hcmNoaXZlZF9qc29uX3Jlc3VsdHMoKQorICAgICAg
ICBpZiBlcnJvcjoKKyAgICAgICAgICAgICMgSWYgdGhlcmUgd2FzIGFuIGVycm9yIGRvbid0IHdy
aXRlIGEgcmVzdWx0cy5qc29uCisgICAgICAgICAgICAjIGZpbGUgYXQgYWxsIGFzIGl0IHdvdWxk
IGxvc2UgYWxsIHRoZSBpbmZvcm1hdGlvbiBvbiB0aGUgYm90LgorICAgICAgICAgICAgX2xvZy5l
cnJvcigiQXJjaGl2ZSBkaXJlY3RvcnkgaXMgaW5hY2Nlc3NpYmxlLiBOb3QgbW9kaWZ5aW5nICIK
KyAgICAgICAgICAgICAgICAgICAgICAgIm9yIGNsb2JiZXJpbmcgdGhlIHJlc3VsdHMuanNvbiBm
aWxlOiAiICsgc3RyKGVycm9yKSkKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAg
YnVpbGRlcl9uYW1lID0gc2VsZi5fYnVpbGRlcl9uYW1lCisgICAgICAgIGlmIHJlc3VsdHNfanNv
biBhbmQgYnVpbGRlcl9uYW1lIG5vdCBpbiByZXN1bHRzX2pzb246CisgICAgICAgICAgICBfbG9n
LmRlYnVnKCJCdWlsZGVyIG5hbWUgKCVzKSBpcyBub3QgaW4gdGhlIHJlc3VsdHMuanNvbiBmaWxl
LiIKKyAgICAgICAgICAgICAgICAgICAgICAgJSBidWlsZGVyX25hbWUpCisKKyAgICAgICAgc2Vs
Zi5fY29udmVydF9qc29uX3RvX2N1cnJlbnRfdmVyc2lvbihyZXN1bHRzX2pzb24pCisKKyAgICAg
ICAgaWYgYnVpbGRlcl9uYW1lIG5vdCBpbiByZXN1bHRzX2pzb246CisgICAgICAgICAgICByZXN1
bHRzX2pzb25bYnVpbGRlcl9uYW1lXSA9ICgKKyAgICAgICAgICAgICAgICBzZWxmLl9jcmVhdGVf
cmVzdWx0c19mb3JfYnVpbGRlcl9qc29uKCkpCisKKyAgICAgICAgcmVzdWx0c19mb3JfYnVpbGRl
ciA9IHJlc3VsdHNfanNvbltidWlsZGVyX25hbWVdCisKKyAgICAgICAgc2VsZi5faW5zZXJ0X2dl
bmVyaWNfbWV0YWRhdGEocmVzdWx0c19mb3JfYnVpbGRlcikKKworICAgICAgICBzZWxmLl9pbnNl
cnRfZmFpbHVyZV9zdW1tYXJpZXMocmVzdWx0c19mb3JfYnVpbGRlcikKKworICAgICAgICAjIFVw
ZGF0ZSB0aGUgYWxsIGZhaWxpbmcgdGVzdHMgd2l0aCByZXN1bHQgdHlwZSBhbmQgdGltZS4KKyAg
ICAgICAgdGVzdHMgPSByZXN1bHRzX2Zvcl9idWlsZGVyW3NlbGYuVEVTVFNdCisgICAgICAgIGFs
bF9mYWlsaW5nX3Rlc3RzID0gc2VsZi5fZ2V0X2ZhaWxlZF90ZXN0X25hbWVzKCkKKyAgICAgICAg
YWxsX2ZhaWxpbmdfdGVzdHMudXBkYXRlKHRlc3RzLml0ZXJrZXlzKCkpCisgICAgICAgIGZvciB0
ZXN0IGluIGFsbF9mYWlsaW5nX3Rlc3RzOgorICAgICAgICAgICAgc2VsZi5faW5zZXJ0X3Rlc3Rf
dGltZV9hbmRfcmVzdWx0KHRlc3QsIHRlc3RzKQorCisgICAgICAgIHNlbGYuX2pzb24gPSByZXN1
bHRzX2pzb24KKyAgICAgICAgcmV0dXJuIHNlbGYuX2pzb24KKworICAgIGRlZiBfZ2V0X3Rlc3Rf
dGltaW5nKHNlbGYsIHRlc3RfbmFtZSk6CisgICAgICAgICIiIlJldHVybnMgdGVzdCB0aW1pbmcg
ZGF0YSAoZWxhcHNlZCB0aW1lKSBpbiBzZWNvbmQKKyAgICAgICAgZm9yIHRoZSBnaXZlbiB0ZXN0
X25hbWUuIiIiCisgICAgICAgIGlmIHRlc3RfbmFtZSBpbiBzZWxmLl90ZXN0X3RpbWluZ3M6Cisg
ICAgICAgICAgICAjIEZsb29yIGZvciBub3cgdG8gZ2V0IHRpbWUgaW4gc2Vjb25kcy4KKyAgICAg
ICAgICAgIHJldHVybiBpbnQoc2VsZi5fdGVzdF90aW1pbmdzW3Rlc3RfbmFtZV0pCisgICAgICAg
IHJldHVybiAwCisKKyAgICBkZWYgX2dldF9mYWlsZWRfdGVzdF9uYW1lcyhzZWxmKToKKyAgICAg
ICAgIiIiUmV0dXJucyBhIHNldCBvZiBmYWlsZWQgdGVzdCBuYW1lcy4iIiIKKyAgICAgICAgcmV0
dXJuIHNldChbci5uYW1lIGZvciByIGluIHNlbGYuX3Rlc3RfcmVzdWx0cyBpZiByLmZhaWxlZF0p
CisKKyAgICBkZWYgX2dldF9yZXN1bHRfdHlwZV9jaGFyKHNlbGYsIHRlc3RfbmFtZSk6CisgICAg
ICAgICIiIlJldHVybnMgYSBzaW5nbGUgY2hhciAoZS5nLiBTS0lQX1JFU1VMVCwgRkFJTF9SRVNV
TFQsCisgICAgICAgIFBBU1NfUkVTVUxULCBOT19EQVRBX1JFU1VMVCBhbmQgZXRjKSB0aGF0IGlu
ZGljYXRlcyB0aGUgdGVzdCByZXN1bHQKKyAgICAgICAgZm9yIHRoZSBnaXZlbiB0ZXN0X25hbWUu
CisgICAgICAgICIiIgorICAgICAgICBpZiB0ZXN0X25hbWUgbm90IGluIHNlbGYuX3Rlc3RfcmVz
dWx0c19tYXA6CisgICAgICAgICAgICByZXR1cm4gSlNPTlJlc3VsdHNHZW5lcmF0b3IuTk9fREFU
QV9SRVNVTFQKKworICAgICAgICB0ZXN0X3Jlc3VsdCA9IHNlbGYuX3Rlc3RfcmVzdWx0c19tYXBb
dGVzdF9uYW1lXQorICAgICAgICBpZiB0ZXN0X3Jlc3VsdC5za2lwcGVkOgorICAgICAgICAgICAg
cmV0dXJuIEpTT05SZXN1bHRzR2VuZXJhdG9yLlNLSVBfUkVTVUxUCisgICAgICAgIGlmIHRlc3Rf
cmVzdWx0LmZhaWxlZDoKKyAgICAgICAgICAgIHJldHVybiBKU09OUmVzdWx0c0dlbmVyYXRvci5G
QUlMX1JFU1VMVAorCisgICAgICAgIHJldHVybiBKU09OUmVzdWx0c0dlbmVyYXRvci5QQVNTX1JF
U1VMVAorCiAgICAgIyBGSVhNRTogQ2FsbGVycyBzaG91bGQgdXNlIHNjbS5weSBpbnN0ZWFkLgor
ICAgICMgRklYTUU6IElkZW50aWZ5IGFuZCBmaXggdGhlIHJ1bi10aW1lIGVycm9ycyB0aGF0IHdl
cmUgb2JzZXJ2ZWQgb24gV2luZG93cworICAgICMgY2hyb21pdW0gYnVpbGRib3Qgd2hlbiB3ZSBo
YWQgdXBkYXRlZCB0aGlzIGNvZGUgdG8gdXNlIHNjbS5weSBvbmNlIGJlZm9yZS4KICAgICBkZWYg
X2dldF9zdm5fcmV2aXNpb24oc2VsZiwgaW5fZGlyZWN0b3J5KToKICAgICAgICAgIiIiUmV0dXJu
cyB0aGUgc3ZuIHJldmlzaW9uIGZvciB0aGUgZ2l2ZW4gZGlyZWN0b3J5LgogCiAgICAgICAgIEFy
Z3M6CiAgICAgICAgICAgaW5fZGlyZWN0b3J5OiBUaGUgZGlyZWN0b3J5IHdoZXJlIHN2biBpcyB0
byBiZSBydW4uCiAgICAgICAgICIiIgotCiAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLnBh
dGguam9pbihpbl9kaXJlY3RvcnksICcuc3ZuJykpOgogICAgICAgICAgICAgIyBOb3RlOiBOb3Qg
dGhyZWFkIHNhZmU6IGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyMzIwCiAgICAgICAgICAg
ICBvdXRwdXQgPSBzdWJwcm9jZXNzLlBvcGVuKFsic3ZuIiwgImluZm8iLCAiLS14bWwiXSwKQEAg
LTE5Niw3NiArMjczLDM0IEBAIGNsYXNzIEpTT05SZXN1bHRzR2VuZXJhdG9yKG9iamVjdCk6CiAK
ICAgICAgICAgcmV0dXJuIHJlc3VsdHNfanNvbiwgZXJyb3IKIAotICAgIGRlZiBfZ2V0X2pzb24o
c2VsZik6Ci0gICAgICAgICIiIkdldHMgdGhlIHJlc3VsdHMgZm9yIHRoZSByZXN1bHRzLmpzb24g
ZmlsZS4iIiIKLSAgICAgICAgcmVzdWx0c19qc29uLCBlcnJvciA9IHNlbGYuX2dldF9hcmNoaXZl
ZF9qc29uX3Jlc3VsdHMoKQotICAgICAgICBpZiBlcnJvcjoKLSAgICAgICAgICAgICMgSWYgdGhl
cmUgd2FzIGFuIGVycm9yIGRvbid0IHdyaXRlIGEgcmVzdWx0cy5qc29uCi0gICAgICAgICAgICAj
IGZpbGUgYXQgYWxsIGFzIGl0IHdvdWxkIGxvc2UgYWxsIHRoZSBpbmZvcm1hdGlvbiBvbiB0aGUg
Ym90LgotICAgICAgICAgICAgX2xvZy5lcnJvcigiQXJjaGl2ZSBkaXJlY3RvcnkgaXMgaW5hY2Nl
c3NpYmxlLiBOb3QgbW9kaWZ5aW5nICIKLSAgICAgICAgICAgICAgICAgICAgICAgIm9yIGNsb2Ji
ZXJpbmcgdGhlIHJlc3VsdHMuanNvbiBmaWxlOiAiICsgc3RyKGVycm9yKSkKLSAgICAgICAgICAg
IHJldHVybiBOb25lCi0KLSAgICAgICAgYnVpbGRlcl9uYW1lID0gc2VsZi5fYnVpbGRlcl9uYW1l
Ci0gICAgICAgIGlmIHJlc3VsdHNfanNvbiBhbmQgYnVpbGRlcl9uYW1lIG5vdCBpbiByZXN1bHRz
X2pzb246Ci0gICAgICAgICAgICBfbG9nLmRlYnVnKCJCdWlsZGVyIG5hbWUgKCVzKSBpcyBub3Qg
aW4gdGhlIHJlc3VsdHMuanNvbiBmaWxlLiIKLSAgICAgICAgICAgICAgICAgICAgICAgJSBidWls
ZGVyX25hbWUpCi0KLSAgICAgICAgc2VsZi5fY29udmVydF9qc29uX3RvX2N1cnJlbnRfdmVyc2lv
bihyZXN1bHRzX2pzb24pCi0KLSAgICAgICAgaWYgYnVpbGRlcl9uYW1lIG5vdCBpbiByZXN1bHRz
X2pzb246Ci0gICAgICAgICAgICByZXN1bHRzX2pzb25bYnVpbGRlcl9uYW1lXSA9ICgKLSAgICAg
ICAgICAgICAgICBzZWxmLl9jcmVhdGVfcmVzdWx0c19mb3JfYnVpbGRlcl9qc29uKCkpCi0KLSAg
ICAgICAgcmVzdWx0c19mb3JfYnVpbGRlciA9IHJlc3VsdHNfanNvbltidWlsZGVyX25hbWVdCi0K
LSAgICAgICAgc2VsZi5faW5zZXJ0X2dlbmVyaWNfbWV0YWRhdGEocmVzdWx0c19mb3JfYnVpbGRl
cikKLQotICAgICAgICBzZWxmLl9pbnNlcnRfZmFpbHVyZV9zdW1tYXJpZXMocmVzdWx0c19mb3Jf
YnVpbGRlcikKLQotICAgICAgICAjIFVwZGF0ZSB0aGUgYWxsIGZhaWxpbmcgdGVzdHMgd2l0aCBy
ZXN1bHQgdHlwZSBhbmQgdGltZS4KLSAgICAgICAgdGVzdHMgPSByZXN1bHRzX2Zvcl9idWlsZGVy
W3NlbGYuVEVTVFNdCi0gICAgICAgIGFsbF9mYWlsaW5nX3Rlc3RzID0gc2V0KHNlbGYuX2ZhaWx1
cmVzLml0ZXJrZXlzKCkpCi0gICAgICAgIGFsbF9mYWlsaW5nX3Rlc3RzLnVwZGF0ZSh0ZXN0cy5p
dGVya2V5cygpKQotICAgICAgICBmb3IgdGVzdCBpbiBhbGxfZmFpbGluZ190ZXN0czoKLSAgICAg
ICAgICAgIHNlbGYuX2luc2VydF90ZXN0X3RpbWVfYW5kX3Jlc3VsdCh0ZXN0LCB0ZXN0cykKLQot
ICAgICAgICAjIFNwZWNpZnkgc2VwYXJhdG9ycyBpbiBvcmRlciB0byBnZXQgY29tcGFjdCBlbmNv
ZGluZy4KLSAgICAgICAgcmVzdWx0c19zdHIgPSBzaW1wbGVqc29uLmR1bXBzKHJlc3VsdHNfanNv
biwgc2VwYXJhdG9ycz0oJywnLCAnOicpKQotICAgICAgICByZXR1cm4gc2VsZi5KU09OX1BSRUZJ
WCArIHJlc3VsdHNfc3RyICsgc2VsZi5KU09OX1NVRkZJWAotCiAgICAgZGVmIF9pbnNlcnRfZmFp
bHVyZV9zdW1tYXJpZXMoc2VsZiwgcmVzdWx0c19mb3JfYnVpbGRlcik6CiAgICAgICAgICIiIklu
c2VydHMgYWdncmVnYXRlIHBhc3MvZmFpbHVyZSBzdGF0aXN0aWNzIGludG8gdGhlIEpTT04uCi0g
ICAgICAgIFRoaXMgbWV0aG9kIHJlYWRzIHNlbGYuX3NraXBwZWRfdGVzdHMsIHNlbGYuX3Bhc3Nl
ZF90ZXN0cyBhbmQKLSAgICAgICAgc2VsZi5fZmFpbHVyZXMgYW5kIGluc2VydHMgRklYQUJMRSwg
RklYQUJMRV9DT1VOVCBhbmQgQUxMX0ZJWEFCTEVfQ09VTlQKLSAgICAgICAgZW50cmllcy4KKyAg
ICAgICAgVGhpcyBtZXRob2QgcmVhZHMgc2VsZi5fdGVzdF9yZXN1bHRzIGFuZCBnZW5lcmF0ZXMK
KyAgICAgICAgRklYQUJMRSwgRklYQUJMRV9DT1VOVCBhbmQgQUxMX0ZJWEFCTEVfQ09VTlQgZW50
cmllcy4KIAogICAgICAgICBBcmdzOgogICAgICAgICAgIHJlc3VsdHNfZm9yX2J1aWxkZXI6IERp
Y3Rpb25hcnkgY29udGFpbmluZyB0aGUgdGVzdCByZXN1bHRzIGZvciBhCiAgICAgICAgICAgICAg
IHNpbmdsZSBidWlsZGVyLgogICAgICAgICAiIiIKLSAgICAgICAgIyBJbnNlcnQgdGhlIG51bWJl
ciBvZiB0ZXN0cyB0aGF0IGZhaWxlZC4KKyAgICAgICAgIyBJbnNlcnQgdGhlIG51bWJlciBvZiB0
ZXN0cyB0aGF0IGZhaWxlZCBvciBza2lwcGVkLgorICAgICAgICBmaXhhYmxlX2NvdW50ID0gbGVu
KFtyLm5hbWUgZm9yIHIgaW4gc2VsZi5fdGVzdF9yZXN1bHRzIGlmIHIuZml4YWJsZSgpXSkKICAg
ICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1faW50b19yYXdfbGlzdChyZXN1bHRzX2Zvcl9idWlsZGVy
LAotICAgICAgICAgICAgbGVuKHNldChzZWxmLl9mYWlsdXJlcy5rZXlzKCkpIHwgc2VsZi5fc2tp
cHBlZF90ZXN0cyksCi0gICAgICAgICAgICBzZWxmLkZJWEFCTEVfQ09VTlQpCisgICAgICAgICAg
ICBmaXhhYmxlX2NvdW50LCBzZWxmLkZJWEFCTEVfQ09VTlQpCiAKICAgICAgICAgIyBDcmVhdGUg
YSBwYXNzL3NraXAvZmFpbHVyZSBzdW1tYXJ5IGRpY3Rpb25hcnkuCiAgICAgICAgIGVudHJ5ID0g
e30KLSAgICAgICAgZW50cnlbc2VsZi5TS0lQX1JFU1VMVF0gPSBsZW4oc2VsZi5fc2tpcHBlZF90
ZXN0cykKLSAgICAgICAgZW50cnlbc2VsZi5QQVNTX1JFU1VMVF0gPSBsZW4oc2VsZi5fcGFzc2Vk
X3Rlc3RzKQotICAgICAgICBnZXQgPSBlbnRyeS5nZXQKLSAgICAgICAgZm9yIGZhaWx1cmVfdHlw
ZSBpbiBzZWxmLl9mYWlsdXJlcy52YWx1ZXMoKToKLSAgICAgICAgICAgIGZhaWx1cmVfY2hhciA9
IHNlbGYuRkFJTFVSRV9UT19DSEFSW2ZhaWx1cmVfdHlwZV0KLSAgICAgICAgICAgIGVudHJ5W2Zh
aWx1cmVfY2hhcl0gPSBnZXQoZmFpbHVyZV9jaGFyLCAwKSArIDEKKyAgICAgICAgZm9yIHRlc3Rf
bmFtZSBpbiBzZWxmLl90ZXN0X3Jlc3VsdHNfbWFwLml0ZXJrZXlzKCk6CisgICAgICAgICAgICBy
ZXN1bHRfY2hhciA9IHNlbGYuX2dldF9yZXN1bHRfdHlwZV9jaGFyKHRlc3RfbmFtZSkKKyAgICAg
ICAgICAgIGVudHJ5W3Jlc3VsdF9jaGFyXSA9IGVudHJ5LmdldChyZXN1bHRfY2hhciwgMCkgKyAx
CiAKICAgICAgICAgIyBJbnNlcnQgdGhlIHBhc3Mvc2tpcC9mYWlsdXJlIHN1bW1hcnkgZGljdGlv
bmFyeS4KICAgICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1faW50b19yYXdfbGlzdChyZXN1bHRzX2Zv
cl9idWlsZGVyLCBlbnRyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxmLkZJWEFCTEUpCiAKICAgICAgICAgIyBJbnNlcnQgdGhlIG51bWJlciBvZiBhbGwgdGhl
IHRlc3RzIHRoYXQgYXJlIHN1cHBvc2VkIHRvIHBhc3MuCisgICAgICAgIGFsbF90ZXN0X2NvdW50
ID0gbGVuKFtyLm5hbWUgZm9yIHIgaW4gc2VsZi5fdGVzdF9yZXN1bHRzXSkKICAgICAgICAgc2Vs
Zi5faW5zZXJ0X2l0ZW1faW50b19yYXdfbGlzdChyZXN1bHRzX2Zvcl9idWlsZGVyLAotICAgICAg
ICAgICAgbGVuKHNlbGYuX3NraXBwZWRfdGVzdHMgfCBzZWxmLl9hbGxfdGVzdHMpLAotICAgICAg
ICAgICAgc2VsZi5BTExfRklYQUJMRV9DT1VOVCkKKyAgICAgICAgICAgIGFsbF90ZXN0X2NvdW50
LCBzZWxmLkFMTF9GSVhBQkxFX0NPVU5UKQogCiAgICAgZGVmIF9pbnNlcnRfaXRlbV9pbnRvX3Jh
d19saXN0KHNlbGYsIHJlc3VsdHNfZm9yX2J1aWxkZXIsIGl0ZW0sIGtleSk6CiAgICAgICAgICIi
Ikluc2VydHMgdGhlIGl0ZW0gaW50byB0aGUgbGlzdCB3aXRoIHRoZSBnaXZlbiBrZXkgaW4gdGhl
IHJlc3VsdHMgZm9yCkBAIC0zMzEsMTggKzM2Niw4IEBAIGNsYXNzIEpTT05SZXN1bHRzR2VuZXJh
dG9yKG9iamVjdCk6CiAgICAgICAgICAgdGVzdHM6IERpY3Rpb25hcnkgY29udGFpbmluZyB0ZXN0
IHJlc3VsdCBlbnRyaWVzLgogICAgICAgICAiIiIKIAotICAgICAgICByZXN1bHQgPSBKU09OUmVz
dWx0c0dlbmVyYXRvci5QQVNTX1JFU1VMVAotICAgICAgICB0aW1lID0gMAotCi0gICAgICAgIGlm
IHRlc3RfbmFtZSBub3QgaW4gc2VsZi5fYWxsX3Rlc3RzOgotICAgICAgICAgICAgcmVzdWx0ID0g
SlNPTlJlc3VsdHNHZW5lcmF0b3IuTk9fREFUQV9SRVNVTFQKLQotICAgICAgICBpZiB0ZXN0X25h
bWUgaW4gc2VsZi5fZmFpbHVyZXM6Ci0gICAgICAgICAgICByZXN1bHQgPSBzZWxmLkZBSUxVUkVf
VE9fQ0hBUltzZWxmLl9mYWlsdXJlc1t0ZXN0X25hbWVdXQotCi0gICAgICAgIGlmIHRlc3RfbmFt
ZSBpbiBzZWxmLl90ZXN0X3RpbWluZ3M6Ci0gICAgICAgICAgICAjIEZsb29yIGZvciBub3cgdG8g
Z2V0IHRpbWUgaW4gc2Vjb25kcy4KLSAgICAgICAgICAgIHRpbWUgPSBpbnQoc2VsZi5fdGVzdF90
aW1pbmdzW3Rlc3RfbmFtZV0pCisgICAgICAgIHJlc3VsdCA9IHNlbGYuX2dldF9yZXN1bHRfdHlw
ZV9jaGFyKHRlc3RfbmFtZSkKKyAgICAgICAgdGltZSA9IHNlbGYuX2dldF90ZXN0X3RpbWluZyh0
ZXN0X25hbWUpCiAKICAgICAgICAgaWYgdGVzdF9uYW1lIG5vdCBpbiB0ZXN0czoKICAgICAgICAg
ICAgIHRlc3RzW3Rlc3RfbmFtZV0gPSBzZWxmLl9jcmVhdGVfcmVzdWx0c19hbmRfdGltZXNfanNv
bigpCkBAIC00MjAsMyArNDQ1LDU4IEBAIGNsYXNzIEpTT05SZXN1bHRzR2VuZXJhdG9yKG9iamVj
dCk6CiAgICAgICAgICIiIlJldHVybnMgd2hldGhlciBhbGwgdGhlIHJlc3VsdHMgYXJlIG9mIHRo
ZSBnaXZlbiB0eXBlCiAgICAgICAgIChlLmcuIGFsbCBwYXNzZXMpLiIiIgogICAgICAgICByZXR1
cm4gbGVuKHJlc3VsdHMpID09IDEgYW5kIHJlc3VsdHNbMF1bMV0gPT0gdHlwZQorCisKKyMgQSB3
cmFwcGVyIGNsYXNzIGZvciBKU09OUmVzdWx0c0dlbmVyYXRvckJhc2UuCisjIE5vdGU6IFRoZXJl
J3MgYSBzY3JpcHQgb3V0c2lkZSB0aGUgV2ViS2l0IGNvZGViYXNlIGNhbGxpbmcgdGhpcyBzY3Jp
cHQuCisjIFBsZWFzZSBrZWVwIHRoZSBpbnRlcmZhY2UgdW50aWwgdGhlIG90aGVyIHNjcmlwdCBp
cyBjbGVhbmVkIHVwLgorY2xhc3MgSlNPTlJlc3VsdHNHZW5lcmF0b3IoSlNPTlJlc3VsdHNHZW5l
cmF0b3JCYXNlKToKKyAgICAjIFRoZSBmbGFnIGlzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5
LgorICAgIG91dHB1dF9qc29uX2luX2luaXQgPSBUcnVlCisKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgcG9ydCwgYnVpbGRlcl9uYW1lLCBidWlsZF9uYW1lLCBidWlsZF9udW1iZXIsCisgICAgICAg
IHJlc3VsdHNfZmlsZV9iYXNlX3BhdGgsIGJ1aWxkZXJfYmFzZV91cmwsCisgICAgICAgIHRlc3Rf
dGltaW5ncywgZmFpbHVyZXMsIHBhc3NlZF90ZXN0cywgc2tpcHBlZF90ZXN0cywgYWxsX3Rlc3Rz
KToKKyAgICAgICAgIiIiR2VuZXJhdGVzIGEgSlNPTiByZXN1bHRzIGZpbGUuCisKKyAgICAgICAg
QXJncworICAgICAgICAgIGJ1aWxkZXJfbmFtZTogdGhlIGJ1aWxkZXIgbmFtZSAoZS5nLiBXZWJr
aXQpLgorICAgICAgICAgIGJ1aWxkX25hbWU6IHRoZSBidWlsZCBuYW1lIChlLmcuIHdlYmtpdC1y
ZWwpLgorICAgICAgICAgIGJ1aWxkX251bWJlcjogdGhlIGJ1aWxkIG51bWJlci4KKyAgICAgICAg
ICByZXN1bHRzX2ZpbGVfYmFzZV9wYXRoOiBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBkaXJlY3Rvcnkg
Y29udGFpbmluZyB0aGUKKyAgICAgICAgICAgICAgcmVzdWx0cyBqc29uIGZpbGUuCisgICAgICAg
ICAgYnVpbGRlcl9iYXNlX3VybDogdGhlIFVSTCB3aGVyZSB3ZSBoYXZlIHRoZSBhcmNoaXZlZCB0
ZXN0IHJlc3VsdHMuCisgICAgICAgICAgdGVzdF90aW1pbmdzOiBNYXAgb2YgdGVzdCBuYW1lIHRv
IGEgdGVzdF9ydW4tdGltZS4KKyAgICAgICAgICBmYWlsdXJlczogTWFwIG9mIHRlc3QgbmFtZSB0
byBhIGZhaWx1cmUgdHlwZSAob2YgdGVzdF9leHBlY3RhdGlvbnMpLgorICAgICAgICAgIHBhc3Nl
ZF90ZXN0czogQSBzZXQgY29udGFpbmluZyBhbGwgdGhlIHBhc3NlZCB0ZXN0cy4KKyAgICAgICAg
ICBza2lwcGVkX3Rlc3RzOiBBIHNldCBjb250YWluaW5nIGFsbCB0aGUgc2tpcHBlZCB0ZXN0cy4K
KyAgICAgICAgICBhbGxfdGVzdHM6IExpc3Qgb2YgYWxsIHRoZSB0ZXN0cyB0aGF0IHdlcmUgcnVu
LiAgVGhpcyBzaG91bGQgbm90CisgICAgICAgICAgICAgIGluY2x1ZGUgc2tpcHBlZCB0ZXN0cy4K
KyAgICAgICAgIiIiCisKKyAgICAgICAgIyBDcmVhdGUgYSBtYXAgb2YgKG5hbWUsIFRlc3RSZXN1
bHQpLgorICAgICAgICB0ZXN0X3Jlc3VsdHNfbWFwID0gZGljdCgpCisgICAgICAgIGdldCA9IHRl
c3RfcmVzdWx0c19tYXAuZ2V0CisgICAgICAgIGZvciAodGVzdCwgdGltZSkgaW4gdGVzdF90aW1p
bmdzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgdGVzdF9yZXN1bHRzX21hcFt0ZXN0XSA9IFRl
c3RSZXN1bHQodGVzdCwgZWxhcHNlZF90aW1lPXRpbWUpCisgICAgICAgIGZvciB0ZXN0IGluIGZh
aWx1cmVzLml0ZXJrZXlzKCk6CisgICAgICAgICAgICB0ZXN0X3Jlc3VsdHNfbWFwW3Rlc3RdID0g
dGVzdF9yZXN1bHQgPSBnZXQodGVzdCwgVGVzdFJlc3VsdCh0ZXN0KSkKKyAgICAgICAgICAgIHRl
c3RfcmVzdWx0LmZhaWxlZCA9IFRydWUKKyAgICAgICAgZm9yIHRlc3QgaW4gc2tpcHBlZF90ZXN0
czoKKyAgICAgICAgICAgIHRlc3RfcmVzdWx0c19tYXBbdGVzdF0gPSB0ZXN0X3Jlc3VsdCA9IGdl
dCh0ZXN0LCBUZXN0UmVzdWx0KHRlc3QpKQorICAgICAgICAgICAgdGVzdF9yZXN1bHQuc2tpcHBl
ZCA9IFRydWUKKyAgICAgICAgZm9yIHRlc3QgaW4gcGFzc2VkX3Rlc3RzOgorICAgICAgICAgICAg
dGVzdF9yZXN1bHRzX21hcFt0ZXN0XSA9IHRlc3RfcmVzdWx0ID0gZ2V0KHRlc3QsIFRlc3RSZXN1
bHQodGVzdCkpCisgICAgICAgICAgICB0ZXN0X3Jlc3VsdC5mYWlsZWQgPSBGYWxzZQorICAgICAg
ICAgICAgdGVzdF9yZXN1bHQuc2tpcHBlZCA9IEZhbHNlCisgICAgICAgIGZvciB0ZXN0IGluIGFs
bF90ZXN0czoKKyAgICAgICAgICAgIGlmIHRlc3Qgbm90IGluIHRlc3RfcmVzdWx0c19tYXA6Cisg
ICAgICAgICAgICAgICAgdGVzdF9yZXN1bHRzX21hcFt0ZXN0XSA9IFRlc3RSZXN1bHQodGVzdCkK
KworICAgICAgICBzdXBlcihKU09OUmVzdWx0c0dlbmVyYXRvciwgc2VsZikuX19pbml0X18oCisg
ICAgICAgICAgICBidWlsZGVyX25hbWUsIGJ1aWxkX25hbWUsIGJ1aWxkX251bWJlciwKKyAgICAg
ICAgICAgIHJlc3VsdHNfZmlsZV9iYXNlX3BhdGgsIGJ1aWxkZXJfYmFzZV91cmwsIHRlc3RfcmVz
dWx0c19tYXAsCisgICAgICAgICAgICBzdm5fcmVwb3NpdG9yaWVzPXBvcnQudGVzdF9yZXBvc2l0
b3J5X3BhdGhzKCkpCisKKyAgICAgICAgaWYgc2VsZi5fX2NsYXNzX18ub3V0cHV0X2pzb25faW5f
aW5pdDoKKyAgICAgICAgICAgIHNlbGYuZ2VuZXJhdGVfanNvbl9vdXRwdXQoKQpkaWZmIC0tZ2l0
IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2th
Z2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvcl91bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5l
cmF0b3JfdW5pdHRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODNmYzI3MjY4YzJmZmE2ZDI5ZDEyZDg4ZjY5
ODNjNTJkZGY5MWJhZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5lcmF0b3Jf
dW5pdHRlc3QucHkKQEAgLTAsMCArMSwxMjYgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMK
KyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJVbml0
IHRlc3RzIGZvciBqc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5LiIiIgorCitpbXBvcnQgdW5pdHRl
c3QKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IHJhbmRvbQoraW1wb3J0IHNodXRpbAoraW1wb3J0
IHRlbXBmaWxlCisKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGlt
cG9ydCBqc29uX3Jlc3VsdHNfZ2VuZXJhdG9yCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5s
YXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9leHBlY3RhdGlvbnMKK2Zyb20gd2Via2l0cHkubGF5
b3V0X3Rlc3RzIGltcG9ydCBwb3J0CisKKworY2xhc3MgSlNPTkdlbmVyYXRpb25UZXN0KHVuaXR0
ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGpzb25fcmVzdWx0
c19nZW5lcmF0b3IuSlNPTlJlc3VsdHNHZW5lcmF0b3Iub3V0cHV0X2pzb25faW5faW5pdCA9IEZh
bHNlCisgICAgICAgIHNlbGYuYnVpbGRlcl9uYW1lID0gJ0RVTU1ZX0JVSUxERVJfTkFNRScKKyAg
ICAgICAgc2VsZi5idWlsZF9uYW1lID0gJ0RVTU1ZX0JVSUxEX05BTUUnCisgICAgICAgIHNlbGYu
YnVpbGRfbnVtYmVyID0gJ0RVTU1ZX0JVSUxERVJfTlVNQkVSJworCisgICAgZGVmIF90ZXN0X2pz
b25fZ2VuZXJhdGlvbihzZWxmLCBwYXNzZWRfdGVzdHMsIGZhaWxlZF90ZXN0cywgc2tpcHBlZF90
ZXN0cyk6CisgICAgICAgICMgTWFrZSBzdXJlIHdlIGhhdmUgc2V0cyAocmF0aGVyIHRoYW4gbGlz
dHMpLgorICAgICAgICBwYXNzZWRfdGVzdHMgPSBzZXQocGFzc2VkX3Rlc3RzKQorICAgICAgICBz
a2lwcGVkX3Rlc3RzID0gc2V0KHNraXBwZWRfdGVzdHMpCisgICAgICAgIHRlc3RzX2xpc3QgPSBw
YXNzZWRfdGVzdHMgfCBzZXQoZmFpbGVkX3Rlc3RzLmtleXMoKSkKKyAgICAgICAgdGVzdF90aW1p
bmdzID0ge30KKyAgICAgICAgZm9yIHRlc3QgaW4gdGVzdHNfbGlzdDoKKyAgICAgICAgICAgIHRl
c3RfdGltaW5nc1t0ZXN0XSA9IGZsb2F0KHJhbmRvbS5yYW5kaW50KDEsIDEwKSkKKworICAgICAg
ICBwb3J0X29iaiA9IHBvcnQuZ2V0KE5vbmUpCisKKyAgICAgICAgIyBHZW5lcmF0ZSBhIEpTT04g
ZmlsZS4KKyAgICAgICAgZ2VuZXJhdG9yID0ganNvbl9yZXN1bHRzX2dlbmVyYXRvci5KU09OUmVz
dWx0c0dlbmVyYXRvcihwb3J0X29iaiwKKyAgICAgICAgICAgIHNlbGYuYnVpbGRlcl9uYW1lLCBz
ZWxmLmJ1aWxkX25hbWUsIHNlbGYuYnVpbGRfbnVtYmVyLAorICAgICAgICAgICAgJycsCisgICAg
ICAgICAgICBOb25lLCAgICMgZG9uJ3QgZmV0Y2ggcGFzdCBqc29uIHJlc3VsdHMgYXJjaGl2ZQor
ICAgICAgICAgICAgdGVzdF90aW1pbmdzLAorICAgICAgICAgICAgZmFpbGVkX3Rlc3RzLAorICAg
ICAgICAgICAgcGFzc2VkX3Rlc3RzLAorICAgICAgICAgICAgc2tpcHBlZF90ZXN0cywKKyAgICAg
ICAgICAgIHRlc3RzX2xpc3QpCisKKyAgICAgICAganNvbiA9IGdlbmVyYXRvci5nZXRfanNvbigp
CisKKyAgICAgICAgIyBBbGlhc2luZyB0byBhIHNob3J0IG5hbWUgZm9yIGJldHRlciBhY2Nlc3Mg
dG8gaXRzIGNvbnN0YW50cy4KKyAgICAgICAgSlJHID0ganNvbl9yZXN1bHRzX2dlbmVyYXRvci5K
U09OUmVzdWx0c0dlbmVyYXRvcgorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShKUkcuVkVSU0lP
Tl9LRVkgaW4ganNvbikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuYnVpbGRlcl9uYW1l
IGluIGpzb24pCisKKyAgICAgICAgYnVpbGRpbmZvID0ganNvbltzZWxmLmJ1aWxkZXJfbmFtZV0K
KyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEpSRy5GSVhBQkxFIGluIGJ1aWxkaW5mbykKKyAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKEpSRy5URVNUUyBpbiBidWlsZGluZm8pCisgICAgICAgIHNlbGYu
YXNzZXJ0VHJ1ZShsZW4oYnVpbGRpbmZvW0pSRy5CVUlMRF9OVU1CRVJTXSkgPT0gMSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKGJ1aWxkaW5mb1tKUkcuQlVJTERfTlVNQkVSU11bMF0gPT0gc2Vs
Zi5idWlsZF9udW1iZXIpCisKKyAgICAgICAgaWYgdGVzdHNfbGlzdCAgb3Igc2tpcHBlZF90ZXN0
czoKKyAgICAgICAgICAgIGZpeGFibGUgPSBidWlsZGluZm9bSlJHLkZJWEFCTEVdWzBdCisgICAg
ICAgICAgICBpZiBwYXNzZWRfdGVzdHM6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVl
KGZpeGFibGVbSlJHLlBBU1NfUkVTVUxUXSA9PSBsZW4ocGFzc2VkX3Rlc3RzKSkKKyAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEpSRy5QQVNTX1JFU1VM
VCBub3QgaW4gZml4YWJsZSBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXhh
YmxlW0pSRy5QQVNTX1JFU1VMVF0gPT0gMCkKKyAgICAgICAgICAgIGlmIHNraXBwZWRfdGVzdHM6
CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpeGFibGVbSlJHLlNLSVBfUkVTVUxU
XSA9PSBsZW4oc2tpcHBlZF90ZXN0cykpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAg
ICAgIHNlbGYuYXNzZXJ0VHJ1ZShKUkcuU0tJUF9SRVNVTFQgbm90IGluIGZpeGFibGUgb3IKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4YWJsZVtKUkcuU0tJUF9SRVNVTFRdID09
IDApCisKKyAgICAgICAgaWYgZmFpbGVkX3Rlc3RzOgorICAgICAgICAgICAgdGVzdHMgPSBidWls
ZGluZm9bSlJHLlRFU1RTXQorICAgICAgICAgICAgZm9yIHRlc3RfbmFtZSwgZmFpbHVyZSBpbiBm
YWlsZWRfdGVzdHMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVl
KHRlc3RfbmFtZSBpbiB0ZXN0cykKKyAgICAgICAgICAgICAgICB0ZXN0ID0gdGVzdHNbdGVzdF9u
YW1lXQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ZXN0W0pSRy5SRVNVTFRTXVsw
XVswXSA9PSAxKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ZXN0W0pSRy5SRVNV
TFRTXVswXVsxXSA9PSBKUkcuRkFJTF9SRVNVTFQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3Nl
cnRUcnVlKHRlc3RbSlJHLlRJTUVTXVswXVswXSA9PSAxKQorICAgICAgICAgICAgICAgIHNlbGYu
YXNzZXJ0VHJ1ZSh0ZXN0W0pSRy5USU1FU11bMF1bMV0gPT0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50KHRlc3RfdGltaW5nc1t0ZXN0X25hbWVdKSkKKworICAgICAgICBmaXhh
YmxlX2NvdW50ID0gbGVuKHNraXBwZWRfdGVzdHMpICsgbGVuKGZhaWxlZF90ZXN0cy5rZXlzKCkp
CisgICAgICAgIGlmIHNraXBwZWRfdGVzdHMgb3IgZmFpbGVkX3Rlc3RzOgorICAgICAgICAgICAg
c2VsZi5hc3NlcnRUcnVlKGJ1aWxkaW5mb1tKUkcuRklYQUJMRV9DT1VOVF1bMF0gPT0gZml4YWJs
ZV9jb3VudCkKKworICAgIGRlZiB0ZXN0X2pzb25fZ2VuZXJhdGlvbihzZWxmKToKKyAgICAgICAg
cmVhc29uID0gdGVzdF9leHBlY3RhdGlvbnMuVEVYVAorCisgICAgICAgIHNlbGYuX3Rlc3RfanNv
bl9nZW5lcmF0aW9uKFtdLCB7fSwgW10pCisgICAgICAgIHNlbGYuX3Rlc3RfanNvbl9nZW5lcmF0
aW9uKFsnQScsICdCJ10sIHt9LCBbXSkKKyAgICAgICAgc2VsZi5fdGVzdF9qc29uX2dlbmVyYXRp
b24oW10sIHsnQSc6IHJlYXNvbiwgJ0InOiByZWFzb259LCBbXSkKKyAgICAgICAgc2VsZi5fdGVz
dF9qc29uX2dlbmVyYXRpb24oW10sIHt9LCBbJ0EnLCAnQiddKQorICAgICAgICBzZWxmLl90ZXN0
X2pzb25fZ2VuZXJhdGlvbihbJ0EnXSwgeydCJzogcmVhc29uLCAnQyc6IHJlYXNvbn0sIFtdKQor
ICAgICAgICBzZWxmLl90ZXN0X2pzb25fZ2VuZXJhdGlvbihbXSwgeydBJzogcmVhc29uLCAnQic6
IHJlYXNvbn0sIFsnQycsICdEJ10pCisgICAgICAgIHNlbGYuX3Rlc3RfanNvbl9nZW5lcmF0aW9u
KFsnQScsICdCJywgJ0MnXSwgeydEJzogcmVhc29ufSwgWydFJywgJ0YnXSkKKworCitpZiBfX25h
bWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59954</attachid>
            <date>2010-06-28 15:30:58 -0700</date>
            <delta_ts>2010-07-07 15:01:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-38693-20100628153057.patch</filename>
            <type>text/plain</type>
            <size>28476</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAxYjk5MzZkNDJhMWQwYmE0MzU0YWQyM2M0YjQ1NjU0OWVkOGYwNmI1Li44YTQ3OTE1
Y2I0ZmY3NWJkZmNiMzFkMTNlM2YyYmI4NTc5NzI0MDlhIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAK
KzIwMTAtMDYtMjcgIEtpbnVrbyBZYXN1ZGEgIDxraW51a29AY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGNsZWFudXAganNvbl9y
ZXN1bHRzX2dlbmVyYXRvciBkZXBlbmRlbmNpZXMgc28gdGhhdCBub24tbGF5b3V0LXRlc3RzIGNh
biBhbHNvIHVzZSBpdCBzYWZlbHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTM4NjkzCisKKyAgICAgICAgSW50cm9kdWNlZCBhIG5ldyBiYXNlIGNsYXNz
IEpTT05SZXN1bHRzR2VuZXJhdG9yQmFzZSB0aGF0IGRvZXNuJ3QKKyAgICAgICAgaGF2ZSBhbnkg
ZGVwZW5kZW5jeSBvbiBsYXlvdXRfdGVzdHMgcGFja2FnZXMuCisgICAgICAgIFR1cm5lZCBKU09O
UmVzdWx0c0dlbmVyYXRvciBpbnRvIGEgd3JhcHBlciBjbGFzcyBvZiB0aGUgYmFzZSBjbGFzcwor
ICAgICAgICBzbyB0aGF0IHRoZSBvbGQgY29kZSBjYW4gd29yayB3aXRoIGl0IGR1cmluZyB0aGUg
Y2xlYW51cC4KKworICAgICAgICBBZGRlZCBqc29uX3Jlc3VsdHNfZ2VuZXJhdG9yX3VuaXR0ZXN0
LnB5LgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3Bh
Y2thZ2UvanNvbl9sYXlvdXRfcmVzdWx0c19nZW5lcmF0b3IucHk6CisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVy
YXRvci5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRf
cGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yX3VuaXR0ZXN0LnB5OiBBZGRlZAorCiAyMDEw
LTA2LTE3ICBUb255IENoYW5nICA8dG9ueUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgS2VudCBUYW11cmEuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX2xheW91dF9yZXN1bHRzX2dlbmVy
YXRvci5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL2pzb25fbGF5b3V0X3Jlc3VsdHNfZ2VuZXJhdG9yLnB5CmluZGV4IGJiMjE0Zjdk
YWM3MWZlZjQxZTI0YTEzNGRmZDI3MDMxZWRlMzIxMTYuLmMwNTI1ZWE4OGNjYzAzMzUyNWIyZWM0
YjMzNGRlODk4NWRhOWM0M2UgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25fbGF5b3V0X3Jlc3VsdHNfZ2VuZXJh
dG9yLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL2pzb25fbGF5b3V0X3Jlc3VsdHNfZ2VuZXJhdG9yLnB5CkBAIC0xLDQgKzEs
MyBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiAjIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTM1LDcgKzM0LDgg
QEAgZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3Rf
ZXhwZWN0YXRpb25zCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBp
bXBvcnQgdGVzdF9mYWlsdXJlcwogaW1wb3J0IHdlYmtpdHB5LnRoaXJkcGFydHkuc2ltcGxlanNv
biBhcyBzaW1wbGVqc29uCiAKLWNsYXNzIEpTT05MYXlvdXRSZXN1bHRzR2VuZXJhdG9yKGpzb25f
cmVzdWx0c19nZW5lcmF0b3IuSlNPTlJlc3VsdHNHZW5lcmF0b3IpOgorCitjbGFzcyBKU09OTGF5
b3V0UmVzdWx0c0dlbmVyYXRvcihqc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLkpTT05SZXN1bHRzR2Vu
ZXJhdG9yQmFzZSk6CiAgICAgIiIiQSBKU09OIHJlc3VsdHMgZ2VuZXJhdG9yIGZvciBsYXlvdXQg
dGVzdHMuIiIiCiAKICAgICBMQVlPVVRfVEVTVFNfUEFUSCA9ICJMYXlvdXRUZXN0cyIKQEAgLTQ0
LDYgKzQ0LDE2IEBAIGNsYXNzIEpTT05MYXlvdXRSZXN1bHRzR2VuZXJhdG9yKGpzb25fcmVzdWx0
c19nZW5lcmF0b3IuSlNPTlJlc3VsdHNHZW5lcmF0b3IpOgogICAgIFdPTlRGSVggPSAid29udGZp
eENvdW50cyIKICAgICBERUZFUlJFRCA9ICJkZWZlcnJlZENvdW50cyIKIAorICAgICMgTm90ZSB0
aGF0IHdlIG9taXQgdGVzdF9leHBlY3RhdGlvbnMuRkFJTCBmcm9tIHRoaXMgbGlzdCBiZWNhdXNl
CisgICAgIyBpdCBzaG91bGQgbmV2ZXIgc2hvdyB1cCAoaXQncyBhIGxlZ2FjeSBpbnB1dCBleHBl
Y3RhdGlvbiwgbmV2ZXIKKyAgICAjIGFuIG91dHB1dCBleHBlY3RhdGlvbikuCisgICAgRkFJTFVS
RV9UT19DSEFSID0ge3Rlc3RfZXhwZWN0YXRpb25zLkNSQVNIOiAiQyIsCisgICAgICAgICAgICAg
ICAgICAgICAgIHRlc3RfZXhwZWN0YXRpb25zLlRJTUVPVVQ6ICJUIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgdGVzdF9leHBlY3RhdGlvbnMuSU1BR0U6ICJJIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgdGVzdF9leHBlY3RhdGlvbnMuVEVYVDogIkYiLAorICAgICAgICAgICAgICAgICAgICAg
ICB0ZXN0X2V4cGVjdGF0aW9ucy5NSVNTSU5HOiAiTyIsCisgICAgICAgICAgICAgICAgICAgICAg
IHRlc3RfZXhwZWN0YXRpb25zLklNQUdFX1BMVVNfVEVYVDogIloifQorCiAgICAgZGVmIF9faW5p
dF9fKHNlbGYsIHBvcnQsIGJ1aWxkZXJfbmFtZSwgYnVpbGRfbmFtZSwgYnVpbGRfbnVtYmVyLAog
ICAgICAgICByZXN1bHRzX2ZpbGVfYmFzZV9wYXRoLCBidWlsZGVyX2Jhc2VfdXJsLAogICAgICAg
ICB0ZXN0X3RpbWluZ3MsIGV4cGVjdGF0aW9ucywgcmVzdWx0X3N1bW1hcnksIGFsbF90ZXN0cyk6
CkBAIC01MywyMCArNjMsMTQgQEAgY2xhc3MgSlNPTkxheW91dFJlc3VsdHNHZW5lcmF0b3IoanNv
bl9yZXN1bHRzX2dlbmVyYXRvci5KU09OUmVzdWx0c0dlbmVyYXRvcik6CiAgICAgICAgIEFyZ3M6
CiAgICAgICAgICAgcmVzdWx0X3N1bW1hcnk6IFJlc3VsdHNTdW1tYXJ5IG9iamVjdCBzdG9yaW5n
IHRoZSBzdW1tYXJ5IG9mIHRoZSB0ZXN0CiAgICAgICAgICAgICAgIHJlc3VsdHMuCi0gICAgICAg
ICAgKHNlZSB0aGUgY29tbWVudCBvZiBKU09OUmVzdWx0c0dlbmVyYXRvci5fX2luaXRfXyBmb3Ig
b3RoZXIgQXJncykKICAgICAgICAgIiIiCisgICAgICAgIHN1cGVyKEpTT05MYXlvdXRSZXN1bHRz
R2VuZXJhdG9yLCBzZWxmKS5fX2luaXRfXygKKyAgICAgICAgICAgIGJ1aWxkZXJfbmFtZSwgYnVp
bGRfbmFtZSwgYnVpbGRfbnVtYmVyLCByZXN1bHRzX2ZpbGVfYmFzZV9wYXRoLAorICAgICAgICAg
ICAgYnVpbGRlcl9iYXNlX3VybCwge30sIHBvcnQudGVzdF9yZXBvc2l0b3J5X3BhdGhzKCkpCisK
ICAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKLSAgICAgICAgc2VsZi5fYnVpbGRlcl9uYW1lID0g
YnVpbGRlcl9uYW1lCi0gICAgICAgIHNlbGYuX2J1aWxkX25hbWUgPSBidWlsZF9uYW1lCi0gICAg
ICAgIHNlbGYuX2J1aWxkX251bWJlciA9IGJ1aWxkX251bWJlcgotICAgICAgICBzZWxmLl9idWls
ZGVyX2Jhc2VfdXJsID0gYnVpbGRlcl9iYXNlX3VybAotICAgICAgICBzZWxmLl9yZXN1bHRzX2Zp
bGVfcGF0aCA9IG9zLnBhdGguam9pbihyZXN1bHRzX2ZpbGVfYmFzZV9wYXRoLAotICAgICAgICAg
ICAgc2VsZi5SRVNVTFRTX0ZJTEVOQU1FKQogICAgICAgICBzZWxmLl9leHBlY3RhdGlvbnMgPSBl
eHBlY3RhdGlvbnMKIAotICAgICAgICAjIFdlIGRvbid0IHVzZSBzZWxmLl9za2lwcGVkX3Rlc3Rz
IGFuZCBzZWxmLl9wYXNzZWRfdGVzdHMgYXMgd2UKLSAgICAgICAgIyBvdmVycmlkZSBfSW5zZXJ0
RmFpbHVyZVN1bW1hcmllcy4KLQogICAgICAgICAjIFdlIHdhbnQgcmVsYXRpdmUgcGF0aHMgdG8g
TGF5b3V0VGVzdCByb290IGZvciBKU09OIG91dHB1dC4KICAgICAgICAgcGF0aF90b19uYW1lID0g
c2VsZi5fZ2V0X3BhdGhfcmVsYXRpdmVfdG9fbGF5b3V0X3Rlc3Rfcm9vdAogICAgICAgICBzZWxm
Ll9yZXN1bHRfc3VtbWFyeSA9IHJlc3VsdF9zdW1tYXJ5CkBAIC03Nyw5ICs4MSw4IEBAIGNsYXNz
IEpTT05MYXlvdXRSZXN1bHRzR2VuZXJhdG9yKGpzb25fcmVzdWx0c19nZW5lcmF0b3IuSlNPTlJl
c3VsdHNHZW5lcmF0b3IpOgogICAgICAgICBzZWxmLl90ZXN0X3RpbWluZ3MgPSBkaWN0KAogICAg
ICAgICAgICAgKHBhdGhfdG9fbmFtZSh0ZXN0X3R1cGxlLmZpbGVuYW1lKSwgdGVzdF90dXBsZS50
ZXN0X3J1bl90aW1lKQogICAgICAgICAgICAgZm9yIHRlc3RfdHVwbGUgaW4gdGVzdF90aW1pbmdz
KQotICAgICAgICBzZWxmLl9zdm5fcmVwb3NpdG9yaWVzID0gcG9ydC50ZXN0X3JlcG9zaXRvcnlf
cGF0aHMoKQogCi0gICAgICAgIHNlbGYuX2dlbmVyYXRlX2pzb25fb3V0cHV0KCkKKyAgICAgICAg
c2VsZi5nZW5lcmF0ZV9qc29uX291dHB1dCgpCiAKICAgICBkZWYgX2dldF9wYXRoX3JlbGF0aXZl
X3RvX2xheW91dF90ZXN0X3Jvb3Qoc2VsZiwgdGVzdCk6CiAgICAgICAgICIiIlJldHVybnMgdGhl
IHBhdGggb2YgdGhlIHRlc3QgcmVsYXRpdmUgdG8gdGhlIGxheW91dCB0ZXN0IHJvb3QuCkBAIC0x
MDIsNiArMTA1LDI3IEBAIGNsYXNzIEpTT05MYXlvdXRSZXN1bHRzR2VuZXJhdG9yKGpzb25fcmVz
dWx0c19nZW5lcmF0b3IuSlNPTlJlc3VsdHNHZW5lcmF0b3IpOgogICAgICAgICByZXR1cm4gcmVs
YXRpdmVQYXRoLnJlcGxhY2UoJ1xcJywgJy8nKQogCiAgICAgIyBvdmVycmlkZQorICAgIGRlZiBf
Z2V0X3Rlc3RfdGltaW5nKHNlbGYsIHRlc3RfbmFtZSk6CisgICAgICAgIGlmIHRlc3RfbmFtZSBp
biBzZWxmLl90ZXN0X3RpbWluZ3M6CisgICAgICAgICAgICAjIEZsb29yIGZvciBub3cgdG8gZ2V0
IHRpbWUgaW4gc2Vjb25kcy4KKyAgICAgICAgICAgIHJldHVybiBpbnQoc2VsZi5fdGVzdF90aW1p
bmdzW3Rlc3RfbmFtZV0pCisgICAgICAgIHJldHVybiAwCisKKyAgICAjIG92ZXJyaWRlCisgICAg
ZGVmIF9nZXRfZmFpbGVkX3Rlc3RfbmFtZXMoc2VsZik6CisgICAgICAgIHJldHVybiBzZXQoc2Vs
Zi5fZmFpbHVyZXMua2V5cygpKQorCisgICAgIyBvdmVycmlkZQorICAgIGRlZiBfZ2V0X3Jlc3Vs
dF90eXBlX2NoYXIoc2VsZiwgdGVzdF9uYW1lKToKKyAgICAgICAgaWYgdGVzdF9uYW1lIG5vdCBp
biBzZWxmLl9hbGxfdGVzdHM6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5OT19EQVRBX1JFU1VM
VAorCisgICAgICAgIGlmIHRlc3RfbmFtZSBpbiBzZWxmLl9mYWlsdXJlczoKKyAgICAgICAgICAg
IHJldHVybiBzZWxmLkZBSUxVUkVfVE9fQ0hBUltzZWxmLl9mYWlsdXJlc1t0ZXN0X25hbWVdXQor
CisgICAgICAgIHJldHVybiBzZWxmLlBBU1NfUkVTVUxUCisKKyAgICAjIG92ZXJyaWRlCiAgICAg
ZGVmIF9jb252ZXJ0X2pzb25fdG9fY3VycmVudF92ZXJzaW9uKHNlbGYsIHJlc3VsdHNfanNvbik6
CiAgICAgICAgIGFyY2hpdmVfdmVyc2lvbiA9IE5vbmUKICAgICAgICAgaWYgc2VsZi5WRVJTSU9O
X0tFWSBpbiByZXN1bHRzX2pzb246CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9y
LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3Bh
Y2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvci5weQppbmRleCAxY2YxYjk1OGRkMjY4OThkMjIx
MGI3Zjc0MjIzYWUzZTQzODUxNzM3Li5iN2VjMThlN2NkZDY1NTZlMGRjYjVhN2Y1YzNkYWRiZWFl
MmUwOTFhIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5CisrKyBiL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25f
cmVzdWx0c19nZW5lcmF0b3IucHkKQEAgLTEsNCArMSwzIEBACi0jIS91c3IvYmluL2VudiBweXRo
b24KICMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dApAQCAtMzgsMTYgKzM3LDI3IEBAIGltcG9ydCB0aW1lCiBpbXBvcnQg
dXJsbGliMgogaW1wb3J0IHhtbC5kb20ubWluaWRvbQogCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5j
aGVja291dCBpbXBvcnQgc2NtCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZl
IGltcG9ydCBTY3JpcHRFcnJvcgotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3Bh
Y2thZ2UgaW1wb3J0IHRlc3RfZXhwZWN0YXRpb25zCiBpbXBvcnQgd2Via2l0cHkudGhpcmRwYXJ0
eS5zaW1wbGVqc29uIGFzIHNpbXBsZWpzb24KIAotX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ3
ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UuIgotICAgICAgICAgICAgICAgICAg
ICAgICAgICJqc29uX3Jlc3VsdHNfZ2VuZXJhdG9yIikKKyMgQSBKU09OIHJlc3VsdHMgZ2VuZXJh
dG9yIGZvciBnZW5lcmljIHRlc3RzLgorIyBGSVhNRTogbW92ZSB0aGlzIGNvZGUgb3V0IG9mIHRo
ZSBsYXlvdXRfcGFja2FnZSBkaXJlY3RvcnkuCiAKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcigi
d2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlLmpzb25fcmVzdWx0c19nZW5lcmF0
b3IiKQogCi1jbGFzcyBKU09OUmVzdWx0c0dlbmVyYXRvcihvYmplY3QpOgorCitjbGFzcyBUZXN0
UmVzdWx0KG9iamVjdCk6CisgICAgIiIiQSBzaW1wbGUgY2xhc3MgdGhhdCByZXByZXNlbnRzIGEg
c2luZ2xlIHRlc3QgcmVzdWx0LiIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBmYWls
ZWQ9RmFsc2UsIHNraXBwZWQ9RmFsc2UsIGVsYXBzZWRfdGltZT0wKToKKyAgICAgICAgc2VsZi5u
YW1lID0gbmFtZQorICAgICAgICBzZWxmLmZhaWxlZCA9IGZhaWxlZAorICAgICAgICBzZWxmLnNr
aXBwZWQgPSBza2lwcGVkCisgICAgICAgIHNlbGYudGltZSA9IGVsYXBzZWRfdGltZQorCisgICAg
ZGVmIGZpeGFibGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmZhaWxlZCBvciBzZWxmLnNr
aXBwZWQKKworCitjbGFzcyBKU09OUmVzdWx0c0dlbmVyYXRvckJhc2Uob2JqZWN0KToKICAgICAi
IiJBIEpTT04gcmVzdWx0cyBnZW5lcmF0b3IgZm9yIGdlbmVyaWMgdGVzdHMuIiIiCiAKICAgICBN
QVhfTlVNQkVSX09GX0JVSUxEX1JFU1VMVFNfVE9fTE9HID0gNzUwCkBAIC01Nyw2ICs2Nyw3IEBA
IGNsYXNzIEpTT05SZXN1bHRzR2VuZXJhdG9yKG9iamVjdCk6CiAgICAgSlNPTl9TVUZGSVggPSAi
KTsiCiAgICAgUEFTU19SRVNVTFQgPSAiUCIKICAgICBTS0lQX1JFU1VMVCA9ICJYIgorICAgIEZB
SUxfUkVTVUxUID0gIkYiCiAgICAgTk9fREFUQV9SRVNVTFQgPSAiTiIKICAgICBWRVJTSU9OID0g
MwogICAgIFZFUlNJT05fS0VZID0gInZlcnNpb24iCkBAIC03MCwyMiArODEsMTEgQEAgY2xhc3Mg
SlNPTlJlc3VsdHNHZW5lcmF0b3Iob2JqZWN0KToKICAgICBGSVhBQkxFID0gImZpeGFibGVDb3Vu
dHMiCiAgICAgQUxMX0ZJWEFCTEVfQ09VTlQgPSAiYWxsRml4YWJsZUNvdW50IgogCi0gICAgIyBO
b3RlIHRoYXQgd2Ugb21pdCB0ZXN0X2V4cGVjdGF0aW9ucy5GQUlMIGZyb20gdGhpcyBsaXN0IGJl
Y2F1c2UKLSAgICAjIGl0IHNob3VsZCBuZXZlciBzaG93IHVwIChpdCdzIGEgbGVnYWN5IGlucHV0
IGV4cGVjdGF0aW9uLCBuZXZlcgotICAgICMgYW4gb3V0cHV0IGV4cGVjdGF0aW9uKS4KLSAgICBG
QUlMVVJFX1RPX0NIQVIgPSB7dGVzdF9leHBlY3RhdGlvbnMuQ1JBU0g6ICJDIiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgdGVzdF9leHBlY3RhdGlvbnMuVElNRU9VVDogIlQiLAotICAgICAgICAg
ICAgICAgICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucy5JTUFHRTogIkkiLAotICAgICAgICAgICAg
ICAgICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucy5URVhUOiAiRiIsCi0gICAgICAgICAgICAgICAg
ICAgICAgIHRlc3RfZXhwZWN0YXRpb25zLk1JU1NJTkc6ICJPIiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgdGVzdF9leHBlY3RhdGlvbnMuSU1BR0VfUExVU19URVhUOiAiWiJ9Ci0gICAgRkFJTFVS
RV9DSEFSUyA9IEZBSUxVUkVfVE9fQ0hBUi52YWx1ZXMoKQotCiAgICAgUkVTVUxUU19GSUxFTkFN
RSA9ICJyZXN1bHRzLmpzb24iCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgYnVpbGRl
cl9uYW1lLCBidWlsZF9uYW1lLCBidWlsZF9udW1iZXIsCisgICAgZGVmIF9faW5pdF9fKHNlbGYs
IGJ1aWxkZXJfbmFtZSwgYnVpbGRfbmFtZSwgYnVpbGRfbnVtYmVyLAogICAgICAgICByZXN1bHRz
X2ZpbGVfYmFzZV9wYXRoLCBidWlsZGVyX2Jhc2VfdXJsLAotICAgICAgICB0ZXN0X3RpbWluZ3Ms
IGZhaWx1cmVzLCBwYXNzZWRfdGVzdHMsIHNraXBwZWRfdGVzdHMsIGFsbF90ZXN0cyk6CisgICAg
ICAgIHRlc3RfcmVzdWx0c19tYXAsIHN2bl9yZXBvc2l0b3JpZXM9Tm9uZSk6CiAgICAgICAgICIi
Ik1vZGlmaWVzIHRoZSByZXN1bHRzLmpzb24gZmlsZS4gR3JhYnMgaXQgb2ZmIHRoZSBhcmNoaXZl
IGRpcmVjdG9yeQogICAgICAgICBpZiBpdCBpcyBub3QgZm91bmQgbG9jYWxseS4KIApAQCAtOTYs
MTIgKzk2LDExIEBAIGNsYXNzIEpTT05SZXN1bHRzR2VuZXJhdG9yKG9iamVjdCk6CiAgICAgICAg
ICAgcmVzdWx0c19maWxlX2Jhc2VfcGF0aDogQWJzb2x1dGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5
IGNvbnRhaW5pbmcgdGhlCiAgICAgICAgICAgICAgIHJlc3VsdHMganNvbiBmaWxlLgogICAgICAg
ICAgIGJ1aWxkZXJfYmFzZV91cmw6IHRoZSBVUkwgd2hlcmUgd2UgaGF2ZSB0aGUgYXJjaGl2ZWQg
dGVzdCByZXN1bHRzLgotICAgICAgICAgIHRlc3RfdGltaW5nczogTWFwIG9mIHRlc3QgbmFtZSB0
byBhIHRlc3RfcnVuLXRpbWUuCi0gICAgICAgICAgZmFpbHVyZXM6IE1hcCBvZiB0ZXN0IG5hbWUg
dG8gYSBmYWlsdXJlIHR5cGUgKG9mIHRlc3RfZXhwZWN0YXRpb25zKS4KLSAgICAgICAgICBwYXNz
ZWRfdGVzdHM6IEEgc2V0IGNvbnRhaW5pbmcgYWxsIHRoZSBwYXNzZWQgdGVzdHMuCi0gICAgICAg
ICAgc2tpcHBlZF90ZXN0czogQSBzZXQgY29udGFpbmluZyBhbGwgdGhlIHNraXBwZWQgdGVzdHMu
Ci0gICAgICAgICAgYWxsX3Rlc3RzOiBMaXN0IG9mIGFsbCB0aGUgdGVzdHMgdGhhdCB3ZXJlIHJ1
bi4gIFRoaXMgc2hvdWxkIG5vdAotICAgICAgICAgICAgICBpbmNsdWRlIHNraXBwZWQgdGVzdHMu
CisgICAgICAgICAgICAgIElmIHRoaXMgaXMgTm9uZSBubyBhcmNoaXZlZCByZXN1bHRzIHdpbGwg
YmUgcmV0cmlldmVkLgorICAgICAgICAgIHRlc3RfcmVzdWx0c19tYXA6IEEgZGljdGlvbmFyeSB0
aGF0IG1hcHMgdGVzdF9uYW1lIHRvIFRlc3RSZXN1bHQuCisgICAgICAgICAgc3ZuX3JlcG9zaXRv
cmllczogQSAoanNvbl9maWVsZF9uYW1lLCBzdm5fcGF0aCkgcGFpciBmb3IgU1ZOCisgICAgICAg
ICAgICAgIHJlcG9zaXRvcmllcyB0aGF0IHRlc3RzIHJlbHkgb24uICBUaGUgU1ZOIHJldmlzaW9u
IHdpbGwgYmUKKyAgICAgICAgICAgICAgaW5jbHVkZWQgaW4gdGhlIEpTT04gd2l0aCB0aGUgZ2l2
ZW4ganNvbl9maWVsZF9uYW1lLgogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5fYnVpbGRlcl9u
YW1lID0gYnVpbGRlcl9uYW1lCiAgICAgICAgIHNlbGYuX2J1aWxkX25hbWUgPSBidWlsZF9uYW1l
CkBAIC0xMDksMzEgKzEwOCwxMDggQEAgY2xhc3MgSlNPTlJlc3VsdHNHZW5lcmF0b3Iob2JqZWN0
KToKICAgICAgICAgc2VsZi5fYnVpbGRlcl9iYXNlX3VybCA9IGJ1aWxkZXJfYmFzZV91cmwKICAg
ICAgICAgc2VsZi5fcmVzdWx0c19maWxlX3BhdGggPSBvcy5wYXRoLmpvaW4ocmVzdWx0c19maWxl
X2Jhc2VfcGF0aCwKICAgICAgICAgICAgIHNlbGYuUkVTVUxUU19GSUxFTkFNRSkKLSAgICAgICAg
c2VsZi5fdGVzdF90aW1pbmdzID0gdGVzdF90aW1pbmdzCi0gICAgICAgIHNlbGYuX2ZhaWx1cmVz
ID0gZmFpbHVyZXMKLSAgICAgICAgc2VsZi5fcGFzc2VkX3Rlc3RzID0gcGFzc2VkX3Rlc3RzCi0g
ICAgICAgIHNlbGYuX3NraXBwZWRfdGVzdHMgPSBza2lwcGVkX3Rlc3RzCi0gICAgICAgIHNlbGYu
X2FsbF90ZXN0cyA9IGFsbF90ZXN0cwotICAgICAgICBzZWxmLl9zdm5fcmVwb3NpdG9yaWVzID0g
cG9ydC50ZXN0X3JlcG9zaXRvcnlfcGF0aHMoKQogCi0gICAgICAgIHNlbGYuX2dlbmVyYXRlX2pz
b25fb3V0cHV0KCkKKyAgICAgICAgc2VsZi5fdGVzdF9yZXN1bHRzX21hcCA9IHRlc3RfcmVzdWx0
c19tYXAKKyAgICAgICAgc2VsZi5fdGVzdF9yZXN1bHRzID0gdGVzdF9yZXN1bHRzX21hcC52YWx1
ZXMoKQorICAgICAgICBzZWxmLl90ZXN0X3RpbWluZ3MgPSBkaWN0KFsoci5uYW1lLCByLnRpbWUp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciByIGluIHNlbGYuX3Rlc3Rf
cmVzdWx0c10pCisKKyAgICAgICAgc2VsZi5fc3ZuX3JlcG9zaXRvcmllcyA9IHN2bl9yZXBvc2l0
b3JpZXMKKyAgICAgICAgaWYgbm90IHNlbGYuX3N2bl9yZXBvc2l0b3JpZXM6CisgICAgICAgICAg
ICBzZWxmLl9zdm5fcmVwb3NpdG9yaWVzID0ge30KKworICAgICAgICBzZWxmLl9qc29uID0gTm9u
ZQogCi0gICAgZGVmIF9nZW5lcmF0ZV9qc29uX291dHB1dChzZWxmKToKKyAgICBkZWYgZ2VuZXJh
dGVfanNvbl9vdXRwdXQoc2VsZik6CiAgICAgICAgICIiIkdlbmVyYXRlcyB0aGUgSlNPTiBvdXRw
dXQgZmlsZS4iIiIKLSAgICAgICAganNvbiA9IHNlbGYuX2dldF9qc29uKCkKLSAgICAgICAgaWYg
anNvbjoKKyAgICAgICAgaWYgbm90IHNlbGYuX2pzb246CisgICAgICAgICAgICBzZWxmLl9qc29u
ID0gc2VsZi5nZXRfanNvbigpCisgICAgICAgIGlmIHNlbGYuX2pzb246CisgICAgICAgICAgICAj
IFNwZWNpZnkgc2VwYXJhdG9ycyBpbiBvcmRlciB0byBnZXQgY29tcGFjdCBlbmNvZGluZy4KKyAg
ICAgICAgICAgIGpzb25fZGF0YSA9IHNpbXBsZWpzb24uZHVtcHMoc2VsZi5fanNvbiwgc2VwYXJh
dG9ycz0oJywnLCAnOicpKQorICAgICAgICAgICAganNvbl9zdHJpbmcgPSBzZWxmLkpTT05fUFJF
RklYICsganNvbl9kYXRhICsgc2VsZi5KU09OX1NVRkZJWAorCiAgICAgICAgICAgICByZXN1bHRz
X2ZpbGUgPSBjb2RlY3Mub3BlbihzZWxmLl9yZXN1bHRzX2ZpbGVfcGF0aCwgInciLCAidXRmLTgi
KQotICAgICAgICAgICAgcmVzdWx0c19maWxlLndyaXRlKGpzb24pCisgICAgICAgICAgICByZXN1
bHRzX2ZpbGUud3JpdGUoanNvbl9zdHJpbmcpCiAgICAgICAgICAgICByZXN1bHRzX2ZpbGUuY2xv
c2UoKQogCisgICAgZGVmIGdldF9qc29uKHNlbGYpOgorICAgICAgICAiIiJHZXRzIHRoZSByZXN1
bHRzIGZvciB0aGUgcmVzdWx0cy5qc29uIGZpbGUuIiIiCisgICAgICAgIGlmIHNlbGYuX2pzb246
CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fanNvbgorCisgICAgICAgIHJlc3VsdHNfanNvbiwg
ZXJyb3IgPSBzZWxmLl9nZXRfYXJjaGl2ZWRfanNvbl9yZXN1bHRzKCkKKyAgICAgICAgaWYgZXJy
b3I6CisgICAgICAgICAgICAjIElmIHRoZXJlIHdhcyBhbiBlcnJvciBkb24ndCB3cml0ZSBhIHJl
c3VsdHMuanNvbgorICAgICAgICAgICAgIyBmaWxlIGF0IGFsbCBhcyBpdCB3b3VsZCBsb3NlIGFs
bCB0aGUgaW5mb3JtYXRpb24gb24gdGhlIGJvdC4KKyAgICAgICAgICAgIF9sb2cuZXJyb3IoIkFy
Y2hpdmUgZGlyZWN0b3J5IGlzIGluYWNjZXNzaWJsZS4gTm90IG1vZGlmeWluZyAiCisgICAgICAg
ICAgICAgICAgICAgICAgICJvciBjbG9iYmVyaW5nIHRoZSByZXN1bHRzLmpzb24gZmlsZTogIiAr
IHN0cihlcnJvcikpCisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGJ1aWxkZXJf
bmFtZSA9IHNlbGYuX2J1aWxkZXJfbmFtZQorICAgICAgICBpZiByZXN1bHRzX2pzb24gYW5kIGJ1
aWxkZXJfbmFtZSBub3QgaW4gcmVzdWx0c19qc29uOgorICAgICAgICAgICAgX2xvZy5kZWJ1Zygi
QnVpbGRlciBuYW1lICglcykgaXMgbm90IGluIHRoZSByZXN1bHRzLmpzb24gZmlsZS4iCisgICAg
ICAgICAgICAgICAgICAgICAgICUgYnVpbGRlcl9uYW1lKQorCisgICAgICAgIHNlbGYuX2NvbnZl
cnRfanNvbl90b19jdXJyZW50X3ZlcnNpb24ocmVzdWx0c19qc29uKQorCisgICAgICAgIGlmIGJ1
aWxkZXJfbmFtZSBub3QgaW4gcmVzdWx0c19qc29uOgorICAgICAgICAgICAgcmVzdWx0c19qc29u
W2J1aWxkZXJfbmFtZV0gPSAoCisgICAgICAgICAgICAgICAgc2VsZi5fY3JlYXRlX3Jlc3VsdHNf
Zm9yX2J1aWxkZXJfanNvbigpKQorCisgICAgICAgIHJlc3VsdHNfZm9yX2J1aWxkZXIgPSByZXN1
bHRzX2pzb25bYnVpbGRlcl9uYW1lXQorCisgICAgICAgIHNlbGYuX2luc2VydF9nZW5lcmljX21l
dGFkYXRhKHJlc3VsdHNfZm9yX2J1aWxkZXIpCisKKyAgICAgICAgc2VsZi5faW5zZXJ0X2ZhaWx1
cmVfc3VtbWFyaWVzKHJlc3VsdHNfZm9yX2J1aWxkZXIpCisKKyAgICAgICAgIyBVcGRhdGUgdGhl
IGFsbCBmYWlsaW5nIHRlc3RzIHdpdGggcmVzdWx0IHR5cGUgYW5kIHRpbWUuCisgICAgICAgIHRl
c3RzID0gcmVzdWx0c19mb3JfYnVpbGRlcltzZWxmLlRFU1RTXQorICAgICAgICBhbGxfZmFpbGlu
Z190ZXN0cyA9IHNlbGYuX2dldF9mYWlsZWRfdGVzdF9uYW1lcygpCisgICAgICAgIGFsbF9mYWls
aW5nX3Rlc3RzLnVwZGF0ZSh0ZXN0cy5pdGVya2V5cygpKQorICAgICAgICBmb3IgdGVzdCBpbiBh
bGxfZmFpbGluZ190ZXN0czoKKyAgICAgICAgICAgIHNlbGYuX2luc2VydF90ZXN0X3RpbWVfYW5k
X3Jlc3VsdCh0ZXN0LCB0ZXN0cykKKworICAgICAgICBzZWxmLl9qc29uID0gcmVzdWx0c19qc29u
CisgICAgICAgIHJldHVybiBzZWxmLl9qc29uCisKKyAgICBkZWYgX2dldF90ZXN0X3RpbWluZyhz
ZWxmLCB0ZXN0X25hbWUpOgorICAgICAgICAiIiJSZXR1cm5zIHRlc3QgdGltaW5nIGRhdGEgKGVs
YXBzZWQgdGltZSkgaW4gc2Vjb25kCisgICAgICAgIGZvciB0aGUgZ2l2ZW4gdGVzdF9uYW1lLiIi
IgorICAgICAgICBpZiB0ZXN0X25hbWUgaW4gc2VsZi5fdGVzdF90aW1pbmdzOgorICAgICAgICAg
ICAgIyBGbG9vciBmb3Igbm93IHRvIGdldCB0aW1lIGluIHNlY29uZHMuCisgICAgICAgICAgICBy
ZXR1cm4gaW50KHNlbGYuX3Rlc3RfdGltaW5nc1t0ZXN0X25hbWVdKQorICAgICAgICByZXR1cm4g
MAorCisgICAgZGVmIF9nZXRfZmFpbGVkX3Rlc3RfbmFtZXMoc2VsZik6CisgICAgICAgICIiIlJl
dHVybnMgYSBzZXQgb2YgZmFpbGVkIHRlc3QgbmFtZXMuIiIiCisgICAgICAgIHJldHVybiBzZXQo
W3IubmFtZSBmb3IgciBpbiBzZWxmLl90ZXN0X3Jlc3VsdHMgaWYgci5mYWlsZWRdKQorCisgICAg
ZGVmIF9nZXRfcmVzdWx0X3R5cGVfY2hhcihzZWxmLCB0ZXN0X25hbWUpOgorICAgICAgICAiIiJS
ZXR1cm5zIGEgc2luZ2xlIGNoYXIgKGUuZy4gU0tJUF9SRVNVTFQsIEZBSUxfUkVTVUxULAorICAg
ICAgICBQQVNTX1JFU1VMVCwgTk9fREFUQV9SRVNVTFQgYW5kIGV0YykgdGhhdCBpbmRpY2F0ZXMg
dGhlIHRlc3QgcmVzdWx0CisgICAgICAgIGZvciB0aGUgZ2l2ZW4gdGVzdF9uYW1lLgorICAgICAg
ICAiIiIKKyAgICAgICAgaWYgdGVzdF9uYW1lIG5vdCBpbiBzZWxmLl90ZXN0X3Jlc3VsdHNfbWFw
OgorICAgICAgICAgICAgcmV0dXJuIEpTT05SZXN1bHRzR2VuZXJhdG9yLk5PX0RBVEFfUkVTVUxU
CisKKyAgICAgICAgdGVzdF9yZXN1bHQgPSBzZWxmLl90ZXN0X3Jlc3VsdHNfbWFwW3Rlc3RfbmFt
ZV0KKyAgICAgICAgaWYgdGVzdF9yZXN1bHQuc2tpcHBlZDoKKyAgICAgICAgICAgIHJldHVybiBK
U09OUmVzdWx0c0dlbmVyYXRvci5TS0lQX1JFU1VMVAorICAgICAgICBpZiB0ZXN0X3Jlc3VsdC5m
YWlsZWQ6CisgICAgICAgICAgICByZXR1cm4gSlNPTlJlc3VsdHNHZW5lcmF0b3IuRkFJTF9SRVNV
TFQKKworICAgICAgICByZXR1cm4gSlNPTlJlc3VsdHNHZW5lcmF0b3IuUEFTU19SRVNVTFQKKwog
ICAgICMgRklYTUU6IENhbGxlcnMgc2hvdWxkIHVzZSBzY20ucHkgaW5zdGVhZC4KKyAgICAjIEZJ
WE1FOiBJZGVudGlmeSBhbmQgZml4IHRoZSBydW4tdGltZSBlcnJvcnMgdGhhdCB3ZXJlIG9ic2Vy
dmVkIG9uIFdpbmRvd3MKKyAgICAjIGNocm9taXVtIGJ1aWxkYm90IHdoZW4gd2UgaGFkIHVwZGF0
ZWQgdGhpcyBjb2RlIHRvIHVzZSBzY20ucHkgb25jZSBiZWZvcmUuCiAgICAgZGVmIF9nZXRfc3Zu
X3JldmlzaW9uKHNlbGYsIGluX2RpcmVjdG9yeSk6CiAgICAgICAgICIiIlJldHVybnMgdGhlIHN2
biByZXZpc2lvbiBmb3IgdGhlIGdpdmVuIGRpcmVjdG9yeS4KIAogICAgICAgICBBcmdzOgogICAg
ICAgICAgIGluX2RpcmVjdG9yeTogVGhlIGRpcmVjdG9yeSB3aGVyZSBzdm4gaXMgdG8gYmUgcnVu
LgogICAgICAgICAiIiIKLQogICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4o
aW5fZGlyZWN0b3J5LCAnLnN2bicpKToKICAgICAgICAgICAgICMgTm90ZTogTm90IHRocmVhZCBz
YWZlOiBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMjMyMAogICAgICAgICAgICAgb3V0cHV0
ID0gc3VicHJvY2Vzcy5Qb3BlbihbInN2biIsICJpbmZvIiwgIi0teG1sIl0sCkBAIC0xOTYsNzYg
KzI3MiwzNCBAQCBjbGFzcyBKU09OUmVzdWx0c0dlbmVyYXRvcihvYmplY3QpOgogCiAgICAgICAg
IHJldHVybiByZXN1bHRzX2pzb24sIGVycm9yCiAKLSAgICBkZWYgX2dldF9qc29uKHNlbGYpOgot
ICAgICAgICAiIiJHZXRzIHRoZSByZXN1bHRzIGZvciB0aGUgcmVzdWx0cy5qc29uIGZpbGUuIiIi
Ci0gICAgICAgIHJlc3VsdHNfanNvbiwgZXJyb3IgPSBzZWxmLl9nZXRfYXJjaGl2ZWRfanNvbl9y
ZXN1bHRzKCkKLSAgICAgICAgaWYgZXJyb3I6Ci0gICAgICAgICAgICAjIElmIHRoZXJlIHdhcyBh
biBlcnJvciBkb24ndCB3cml0ZSBhIHJlc3VsdHMuanNvbgotICAgICAgICAgICAgIyBmaWxlIGF0
IGFsbCBhcyBpdCB3b3VsZCBsb3NlIGFsbCB0aGUgaW5mb3JtYXRpb24gb24gdGhlIGJvdC4KLSAg
ICAgICAgICAgIF9sb2cuZXJyb3IoIkFyY2hpdmUgZGlyZWN0b3J5IGlzIGluYWNjZXNzaWJsZS4g
Tm90IG1vZGlmeWluZyAiCi0gICAgICAgICAgICAgICAgICAgICAgICJvciBjbG9iYmVyaW5nIHRo
ZSByZXN1bHRzLmpzb24gZmlsZTogIiArIHN0cihlcnJvcikpCi0gICAgICAgICAgICByZXR1cm4g
Tm9uZQotCi0gICAgICAgIGJ1aWxkZXJfbmFtZSA9IHNlbGYuX2J1aWxkZXJfbmFtZQotICAgICAg
ICBpZiByZXN1bHRzX2pzb24gYW5kIGJ1aWxkZXJfbmFtZSBub3QgaW4gcmVzdWx0c19qc29uOgot
ICAgICAgICAgICAgX2xvZy5kZWJ1ZygiQnVpbGRlciBuYW1lICglcykgaXMgbm90IGluIHRoZSBy
ZXN1bHRzLmpzb24gZmlsZS4iCi0gICAgICAgICAgICAgICAgICAgICAgICUgYnVpbGRlcl9uYW1l
KQotCi0gICAgICAgIHNlbGYuX2NvbnZlcnRfanNvbl90b19jdXJyZW50X3ZlcnNpb24ocmVzdWx0
c19qc29uKQotCi0gICAgICAgIGlmIGJ1aWxkZXJfbmFtZSBub3QgaW4gcmVzdWx0c19qc29uOgot
ICAgICAgICAgICAgcmVzdWx0c19qc29uW2J1aWxkZXJfbmFtZV0gPSAoCi0gICAgICAgICAgICAg
ICAgc2VsZi5fY3JlYXRlX3Jlc3VsdHNfZm9yX2J1aWxkZXJfanNvbigpKQotCi0gICAgICAgIHJl
c3VsdHNfZm9yX2J1aWxkZXIgPSByZXN1bHRzX2pzb25bYnVpbGRlcl9uYW1lXQotCi0gICAgICAg
IHNlbGYuX2luc2VydF9nZW5lcmljX21ldGFkYXRhKHJlc3VsdHNfZm9yX2J1aWxkZXIpCi0KLSAg
ICAgICAgc2VsZi5faW5zZXJ0X2ZhaWx1cmVfc3VtbWFyaWVzKHJlc3VsdHNfZm9yX2J1aWxkZXIp
Ci0KLSAgICAgICAgIyBVcGRhdGUgdGhlIGFsbCBmYWlsaW5nIHRlc3RzIHdpdGggcmVzdWx0IHR5
cGUgYW5kIHRpbWUuCi0gICAgICAgIHRlc3RzID0gcmVzdWx0c19mb3JfYnVpbGRlcltzZWxmLlRF
U1RTXQotICAgICAgICBhbGxfZmFpbGluZ190ZXN0cyA9IHNldChzZWxmLl9mYWlsdXJlcy5pdGVy
a2V5cygpKQotICAgICAgICBhbGxfZmFpbGluZ190ZXN0cy51cGRhdGUodGVzdHMuaXRlcmtleXMo
KSkKLSAgICAgICAgZm9yIHRlc3QgaW4gYWxsX2ZhaWxpbmdfdGVzdHM6Ci0gICAgICAgICAgICBz
ZWxmLl9pbnNlcnRfdGVzdF90aW1lX2FuZF9yZXN1bHQodGVzdCwgdGVzdHMpCi0KLSAgICAgICAg
IyBTcGVjaWZ5IHNlcGFyYXRvcnMgaW4gb3JkZXIgdG8gZ2V0IGNvbXBhY3QgZW5jb2RpbmcuCi0g
ICAgICAgIHJlc3VsdHNfc3RyID0gc2ltcGxlanNvbi5kdW1wcyhyZXN1bHRzX2pzb24sIHNlcGFy
YXRvcnM9KCcsJywgJzonKSkKLSAgICAgICAgcmV0dXJuIHNlbGYuSlNPTl9QUkVGSVggKyByZXN1
bHRzX3N0ciArIHNlbGYuSlNPTl9TVUZGSVgKLQogICAgIGRlZiBfaW5zZXJ0X2ZhaWx1cmVfc3Vt
bWFyaWVzKHNlbGYsIHJlc3VsdHNfZm9yX2J1aWxkZXIpOgogICAgICAgICAiIiJJbnNlcnRzIGFn
Z3JlZ2F0ZSBwYXNzL2ZhaWx1cmUgc3RhdGlzdGljcyBpbnRvIHRoZSBKU09OLgotICAgICAgICBU
aGlzIG1ldGhvZCByZWFkcyBzZWxmLl9za2lwcGVkX3Rlc3RzLCBzZWxmLl9wYXNzZWRfdGVzdHMg
YW5kCi0gICAgICAgIHNlbGYuX2ZhaWx1cmVzIGFuZCBpbnNlcnRzIEZJWEFCTEUsIEZJWEFCTEVf
Q09VTlQgYW5kIEFMTF9GSVhBQkxFX0NPVU5UCi0gICAgICAgIGVudHJpZXMuCisgICAgICAgIFRo
aXMgbWV0aG9kIHJlYWRzIHNlbGYuX3Rlc3RfcmVzdWx0cyBhbmQgZ2VuZXJhdGVzCisgICAgICAg
IEZJWEFCTEUsIEZJWEFCTEVfQ09VTlQgYW5kIEFMTF9GSVhBQkxFX0NPVU5UIGVudHJpZXMuCiAK
ICAgICAgICAgQXJnczoKICAgICAgICAgICByZXN1bHRzX2Zvcl9idWlsZGVyOiBEaWN0aW9uYXJ5
IGNvbnRhaW5pbmcgdGhlIHRlc3QgcmVzdWx0cyBmb3IgYQogICAgICAgICAgICAgICBzaW5nbGUg
YnVpbGRlci4KICAgICAgICAgIiIiCi0gICAgICAgICMgSW5zZXJ0IHRoZSBudW1iZXIgb2YgdGVz
dHMgdGhhdCBmYWlsZWQuCisgICAgICAgICMgSW5zZXJ0IHRoZSBudW1iZXIgb2YgdGVzdHMgdGhh
dCBmYWlsZWQgb3Igc2tpcHBlZC4KKyAgICAgICAgZml4YWJsZV9jb3VudCA9IGxlbihbci5uYW1l
IGZvciByIGluIHNlbGYuX3Rlc3RfcmVzdWx0cyBpZiByLmZpeGFibGUoKV0pCiAgICAgICAgIHNl
bGYuX2luc2VydF9pdGVtX2ludG9fcmF3X2xpc3QocmVzdWx0c19mb3JfYnVpbGRlciwKLSAgICAg
ICAgICAgIGxlbihzZXQoc2VsZi5fZmFpbHVyZXMua2V5cygpKSB8IHNlbGYuX3NraXBwZWRfdGVz
dHMpLAotICAgICAgICAgICAgc2VsZi5GSVhBQkxFX0NPVU5UKQorICAgICAgICAgICAgZml4YWJs
ZV9jb3VudCwgc2VsZi5GSVhBQkxFX0NPVU5UKQogCiAgICAgICAgICMgQ3JlYXRlIGEgcGFzcy9z
a2lwL2ZhaWx1cmUgc3VtbWFyeSBkaWN0aW9uYXJ5LgogICAgICAgICBlbnRyeSA9IHt9Ci0gICAg
ICAgIGVudHJ5W3NlbGYuU0tJUF9SRVNVTFRdID0gbGVuKHNlbGYuX3NraXBwZWRfdGVzdHMpCi0g
ICAgICAgIGVudHJ5W3NlbGYuUEFTU19SRVNVTFRdID0gbGVuKHNlbGYuX3Bhc3NlZF90ZXN0cykK
LSAgICAgICAgZ2V0ID0gZW50cnkuZ2V0Ci0gICAgICAgIGZvciBmYWlsdXJlX3R5cGUgaW4gc2Vs
Zi5fZmFpbHVyZXMudmFsdWVzKCk6Ci0gICAgICAgICAgICBmYWlsdXJlX2NoYXIgPSBzZWxmLkZB
SUxVUkVfVE9fQ0hBUltmYWlsdXJlX3R5cGVdCi0gICAgICAgICAgICBlbnRyeVtmYWlsdXJlX2No
YXJdID0gZ2V0KGZhaWx1cmVfY2hhciwgMCkgKyAxCisgICAgICAgIGZvciB0ZXN0X25hbWUgaW4g
c2VsZi5fdGVzdF9yZXN1bHRzX21hcC5pdGVya2V5cygpOgorICAgICAgICAgICAgcmVzdWx0X2No
YXIgPSBzZWxmLl9nZXRfcmVzdWx0X3R5cGVfY2hhcih0ZXN0X25hbWUpCisgICAgICAgICAgICBl
bnRyeVtyZXN1bHRfY2hhcl0gPSBlbnRyeS5nZXQocmVzdWx0X2NoYXIsIDApICsgMQogCiAgICAg
ICAgICMgSW5zZXJ0IHRoZSBwYXNzL3NraXAvZmFpbHVyZSBzdW1tYXJ5IGRpY3Rpb25hcnkuCiAg
ICAgICAgIHNlbGYuX2luc2VydF9pdGVtX2ludG9fcmF3X2xpc3QocmVzdWx0c19mb3JfYnVpbGRl
ciwgZW50cnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5G
SVhBQkxFKQogCiAgICAgICAgICMgSW5zZXJ0IHRoZSBudW1iZXIgb2YgYWxsIHRoZSB0ZXN0cyB0
aGF0IGFyZSBzdXBwb3NlZCB0byBwYXNzLgorICAgICAgICBhbGxfdGVzdF9jb3VudCA9IGxlbihb
ci5uYW1lIGZvciByIGluIHNlbGYuX3Rlc3RfcmVzdWx0c10pCiAgICAgICAgIHNlbGYuX2luc2Vy
dF9pdGVtX2ludG9fcmF3X2xpc3QocmVzdWx0c19mb3JfYnVpbGRlciwKLSAgICAgICAgICAgIGxl
bihzZWxmLl9za2lwcGVkX3Rlc3RzIHwgc2VsZi5fYWxsX3Rlc3RzKSwKLSAgICAgICAgICAgIHNl
bGYuQUxMX0ZJWEFCTEVfQ09VTlQpCisgICAgICAgICAgICBhbGxfdGVzdF9jb3VudCwgc2VsZi5B
TExfRklYQUJMRV9DT1VOVCkKIAogICAgIGRlZiBfaW5zZXJ0X2l0ZW1faW50b19yYXdfbGlzdChz
ZWxmLCByZXN1bHRzX2Zvcl9idWlsZGVyLCBpdGVtLCBrZXkpOgogICAgICAgICAiIiJJbnNlcnRz
IHRoZSBpdGVtIGludG8gdGhlIGxpc3Qgd2l0aCB0aGUgZ2l2ZW4ga2V5IGluIHRoZSByZXN1bHRz
IGZvcgpAQCAtMzMxLDE4ICszNjUsOCBAQCBjbGFzcyBKU09OUmVzdWx0c0dlbmVyYXRvcihvYmpl
Y3QpOgogICAgICAgICAgIHRlc3RzOiBEaWN0aW9uYXJ5IGNvbnRhaW5pbmcgdGVzdCByZXN1bHQg
ZW50cmllcy4KICAgICAgICAgIiIiCiAKLSAgICAgICAgcmVzdWx0ID0gSlNPTlJlc3VsdHNHZW5l
cmF0b3IuUEFTU19SRVNVTFQKLSAgICAgICAgdGltZSA9IDAKLQotICAgICAgICBpZiB0ZXN0X25h
bWUgbm90IGluIHNlbGYuX2FsbF90ZXN0czoKLSAgICAgICAgICAgIHJlc3VsdCA9IEpTT05SZXN1
bHRzR2VuZXJhdG9yLk5PX0RBVEFfUkVTVUxUCi0KLSAgICAgICAgaWYgdGVzdF9uYW1lIGluIHNl
bGYuX2ZhaWx1cmVzOgotICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5GQUlMVVJFX1RPX0NIQVJb
c2VsZi5fZmFpbHVyZXNbdGVzdF9uYW1lXV0KLQotICAgICAgICBpZiB0ZXN0X25hbWUgaW4gc2Vs
Zi5fdGVzdF90aW1pbmdzOgotICAgICAgICAgICAgIyBGbG9vciBmb3Igbm93IHRvIGdldCB0aW1l
IGluIHNlY29uZHMuCi0gICAgICAgICAgICB0aW1lID0gaW50KHNlbGYuX3Rlc3RfdGltaW5nc1t0
ZXN0X25hbWVdKQorICAgICAgICByZXN1bHQgPSBzZWxmLl9nZXRfcmVzdWx0X3R5cGVfY2hhcih0
ZXN0X25hbWUpCisgICAgICAgIHRpbWUgPSBzZWxmLl9nZXRfdGVzdF90aW1pbmcodGVzdF9uYW1l
KQogCiAgICAgICAgIGlmIHRlc3RfbmFtZSBub3QgaW4gdGVzdHM6CiAgICAgICAgICAgICB0ZXN0
c1t0ZXN0X25hbWVdID0gc2VsZi5fY3JlYXRlX3Jlc3VsdHNfYW5kX3RpbWVzX2pzb24oKQpAQCAt
NDIwLDMgKzQ0NCw1OCBAQCBjbGFzcyBKU09OUmVzdWx0c0dlbmVyYXRvcihvYmplY3QpOgogICAg
ICAgICAiIiJSZXR1cm5zIHdoZXRoZXIgYWxsIHRoZSByZXN1bHRzIGFyZSBvZiB0aGUgZ2l2ZW4g
dHlwZQogICAgICAgICAoZS5nLiBhbGwgcGFzc2VzKS4iIiIKICAgICAgICAgcmV0dXJuIGxlbihy
ZXN1bHRzKSA9PSAxIGFuZCByZXN1bHRzWzBdWzFdID09IHR5cGUKKworCisjIEEgd3JhcHBlciBj
bGFzcyBmb3IgSlNPTlJlc3VsdHNHZW5lcmF0b3JCYXNlLgorIyBOb3RlOiBUaGVyZSdzIGEgc2Ny
aXB0IG91dHNpZGUgdGhlIFdlYktpdCBjb2RlYmFzZSBjYWxsaW5nIHRoaXMgc2NyaXB0LgorIyBQ
bGVhc2Uga2VlcCB0aGUgaW50ZXJmYWNlIHVudGlsIHRoZSBvdGhlciBzY3JpcHQgaXMgY2xlYW5l
ZCB1cC4KK2NsYXNzIEpTT05SZXN1bHRzR2VuZXJhdG9yKEpTT05SZXN1bHRzR2VuZXJhdG9yQmFz
ZSk6CisgICAgIyBUaGUgZmxhZyBpcyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KKyAgICBv
dXRwdXRfanNvbl9pbl9pbml0ID0gVHJ1ZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQs
IGJ1aWxkZXJfbmFtZSwgYnVpbGRfbmFtZSwgYnVpbGRfbnVtYmVyLAorICAgICAgICByZXN1bHRz
X2ZpbGVfYmFzZV9wYXRoLCBidWlsZGVyX2Jhc2VfdXJsLAorICAgICAgICB0ZXN0X3RpbWluZ3Ms
IGZhaWx1cmVzLCBwYXNzZWRfdGVzdHMsIHNraXBwZWRfdGVzdHMsIGFsbF90ZXN0cyk6CisgICAg
ICAgICIiIkdlbmVyYXRlcyBhIEpTT04gcmVzdWx0cyBmaWxlLgorCisgICAgICAgIEFyZ3MKKyAg
ICAgICAgICBidWlsZGVyX25hbWU6IHRoZSBidWlsZGVyIG5hbWUgKGUuZy4gV2Via2l0KS4KKyAg
ICAgICAgICBidWlsZF9uYW1lOiB0aGUgYnVpbGQgbmFtZSAoZS5nLiB3ZWJraXQtcmVsKS4KKyAg
ICAgICAgICBidWlsZF9udW1iZXI6IHRoZSBidWlsZCBudW1iZXIuCisgICAgICAgICAgcmVzdWx0
c19maWxlX2Jhc2VfcGF0aDogQWJzb2x1dGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5p
bmcgdGhlCisgICAgICAgICAgICAgIHJlc3VsdHMganNvbiBmaWxlLgorICAgICAgICAgIGJ1aWxk
ZXJfYmFzZV91cmw6IHRoZSBVUkwgd2hlcmUgd2UgaGF2ZSB0aGUgYXJjaGl2ZWQgdGVzdCByZXN1
bHRzLgorICAgICAgICAgIHRlc3RfdGltaW5nczogTWFwIG9mIHRlc3QgbmFtZSB0byBhIHRlc3Rf
cnVuLXRpbWUuCisgICAgICAgICAgZmFpbHVyZXM6IE1hcCBvZiB0ZXN0IG5hbWUgdG8gYSBmYWls
dXJlIHR5cGUgKG9mIHRlc3RfZXhwZWN0YXRpb25zKS4KKyAgICAgICAgICBwYXNzZWRfdGVzdHM6
IEEgc2V0IGNvbnRhaW5pbmcgYWxsIHRoZSBwYXNzZWQgdGVzdHMuCisgICAgICAgICAgc2tpcHBl
ZF90ZXN0czogQSBzZXQgY29udGFpbmluZyBhbGwgdGhlIHNraXBwZWQgdGVzdHMuCisgICAgICAg
ICAgYWxsX3Rlc3RzOiBMaXN0IG9mIGFsbCB0aGUgdGVzdHMgdGhhdCB3ZXJlIHJ1bi4gIFRoaXMg
c2hvdWxkIG5vdAorICAgICAgICAgICAgICBpbmNsdWRlIHNraXBwZWQgdGVzdHMuCisgICAgICAg
ICIiIgorCisgICAgICAgICMgQ3JlYXRlIGEgbWFwIG9mIChuYW1lLCBUZXN0UmVzdWx0KS4KKyAg
ICAgICAgdGVzdF9yZXN1bHRzX21hcCA9IGRpY3QoKQorICAgICAgICBnZXQgPSB0ZXN0X3Jlc3Vs
dHNfbWFwLmdldAorICAgICAgICBmb3IgKHRlc3QsIHRpbWUpIGluIHRlc3RfdGltaW5ncy5pdGVy
aXRlbXMoKToKKyAgICAgICAgICAgIHRlc3RfcmVzdWx0c19tYXBbdGVzdF0gPSBUZXN0UmVzdWx0
KHRlc3QsIGVsYXBzZWRfdGltZT10aW1lKQorICAgICAgICBmb3IgdGVzdCBpbiBmYWlsdXJlcy5p
dGVya2V5cygpOgorICAgICAgICAgICAgdGVzdF9yZXN1bHRzX21hcFt0ZXN0XSA9IHRlc3RfcmVz
dWx0ID0gZ2V0KHRlc3QsIFRlc3RSZXN1bHQodGVzdCkpCisgICAgICAgICAgICB0ZXN0X3Jlc3Vs
dC5mYWlsZWQgPSBUcnVlCisgICAgICAgIGZvciB0ZXN0IGluIHNraXBwZWRfdGVzdHM6CisgICAg
ICAgICAgICB0ZXN0X3Jlc3VsdHNfbWFwW3Rlc3RdID0gdGVzdF9yZXN1bHQgPSBnZXQodGVzdCwg
VGVzdFJlc3VsdCh0ZXN0KSkKKyAgICAgICAgICAgIHRlc3RfcmVzdWx0LnNraXBwZWQgPSBUcnVl
CisgICAgICAgIGZvciB0ZXN0IGluIHBhc3NlZF90ZXN0czoKKyAgICAgICAgICAgIHRlc3RfcmVz
dWx0c19tYXBbdGVzdF0gPSB0ZXN0X3Jlc3VsdCA9IGdldCh0ZXN0LCBUZXN0UmVzdWx0KHRlc3Qp
KQorICAgICAgICAgICAgdGVzdF9yZXN1bHQuZmFpbGVkID0gRmFsc2UKKyAgICAgICAgICAgIHRl
c3RfcmVzdWx0LnNraXBwZWQgPSBGYWxzZQorICAgICAgICBmb3IgdGVzdCBpbiBhbGxfdGVzdHM6
CisgICAgICAgICAgICBpZiB0ZXN0IG5vdCBpbiB0ZXN0X3Jlc3VsdHNfbWFwOgorICAgICAgICAg
ICAgICAgIHRlc3RfcmVzdWx0c19tYXBbdGVzdF0gPSBUZXN0UmVzdWx0KHRlc3QpCisKKyAgICAg
ICAgc3VwZXIoSlNPTlJlc3VsdHNHZW5lcmF0b3IsIHNlbGYpLl9faW5pdF9fKAorICAgICAgICAg
ICAgYnVpbGRlcl9uYW1lLCBidWlsZF9uYW1lLCBidWlsZF9udW1iZXIsCisgICAgICAgICAgICBy
ZXN1bHRzX2ZpbGVfYmFzZV9wYXRoLCBidWlsZGVyX2Jhc2VfdXJsLCB0ZXN0X3Jlc3VsdHNfbWFw
LAorICAgICAgICAgICAgc3ZuX3JlcG9zaXRvcmllcz1wb3J0LnRlc3RfcmVwb3NpdG9yeV9wYXRo
cygpKQorCisgICAgICAgIGlmIHNlbGYuX19jbGFzc19fLm91dHB1dF9qc29uX2luX2luaXQ6Cisg
ICAgICAgICAgICBzZWxmLmdlbmVyYXRlX2pzb25fb3V0cHV0KCkKZGlmZiAtLWdpdCBhL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25f
cmVzdWx0c19nZW5lcmF0b3JfdW5pdHRlc3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yX3Vu
aXR0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgzZmMyNzI2OGMyZmZhNmQyOWQxMmQ4OGY2OTgzYzUyZGRm
OTFiYWUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yX3VuaXR0ZXN0
LnB5CkBAIC0wLDAgKzEsMTI2IEBACisjIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBt
ZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisj
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiVW5pdCB0ZXN0cyBm
b3IganNvbl9yZXN1bHRzX2dlbmVyYXRvci5weS4iIiIKKworaW1wb3J0IHVuaXR0ZXN0CitpbXBv
cnQgb3B0cGFyc2UKK2ltcG9ydCByYW5kb20KK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCB0ZW1wZmls
ZQorCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQganNv
bl9yZXN1bHRzX2dlbmVyYXRvcgorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3Bh
Y2thZ2UgaW1wb3J0IHRlc3RfZXhwZWN0YXRpb25zCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0
cyBpbXBvcnQgcG9ydAorCisKK2NsYXNzIEpTT05HZW5lcmF0aW9uVGVzdCh1bml0dGVzdC5UZXN0
Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBqc29uX3Jlc3VsdHNfZ2VuZXJh
dG9yLkpTT05SZXN1bHRzR2VuZXJhdG9yLm91dHB1dF9qc29uX2luX2luaXQgPSBGYWxzZQorICAg
ICAgICBzZWxmLmJ1aWxkZXJfbmFtZSA9ICdEVU1NWV9CVUlMREVSX05BTUUnCisgICAgICAgIHNl
bGYuYnVpbGRfbmFtZSA9ICdEVU1NWV9CVUlMRF9OQU1FJworICAgICAgICBzZWxmLmJ1aWxkX251
bWJlciA9ICdEVU1NWV9CVUlMREVSX05VTUJFUicKKworICAgIGRlZiBfdGVzdF9qc29uX2dlbmVy
YXRpb24oc2VsZiwgcGFzc2VkX3Rlc3RzLCBmYWlsZWRfdGVzdHMsIHNraXBwZWRfdGVzdHMpOgor
ICAgICAgICAjIE1ha2Ugc3VyZSB3ZSBoYXZlIHNldHMgKHJhdGhlciB0aGFuIGxpc3RzKS4KKyAg
ICAgICAgcGFzc2VkX3Rlc3RzID0gc2V0KHBhc3NlZF90ZXN0cykKKyAgICAgICAgc2tpcHBlZF90
ZXN0cyA9IHNldChza2lwcGVkX3Rlc3RzKQorICAgICAgICB0ZXN0c19saXN0ID0gcGFzc2VkX3Rl
c3RzIHwgc2V0KGZhaWxlZF90ZXN0cy5rZXlzKCkpCisgICAgICAgIHRlc3RfdGltaW5ncyA9IHt9
CisgICAgICAgIGZvciB0ZXN0IGluIHRlc3RzX2xpc3Q6CisgICAgICAgICAgICB0ZXN0X3RpbWlu
Z3NbdGVzdF0gPSBmbG9hdChyYW5kb20ucmFuZGludCgxLCAxMCkpCisKKyAgICAgICAgcG9ydF9v
YmogPSBwb3J0LmdldChOb25lKQorCisgICAgICAgICMgR2VuZXJhdGUgYSBKU09OIGZpbGUuCisg
ICAgICAgIGdlbmVyYXRvciA9IGpzb25fcmVzdWx0c19nZW5lcmF0b3IuSlNPTlJlc3VsdHNHZW5l
cmF0b3IocG9ydF9vYmosCisgICAgICAgICAgICBzZWxmLmJ1aWxkZXJfbmFtZSwgc2VsZi5idWls
ZF9uYW1lLCBzZWxmLmJ1aWxkX251bWJlciwKKyAgICAgICAgICAgICcnLAorICAgICAgICAgICAg
Tm9uZSwgICAjIGRvbid0IGZldGNoIHBhc3QganNvbiByZXN1bHRzIGFyY2hpdmUKKyAgICAgICAg
ICAgIHRlc3RfdGltaW5ncywKKyAgICAgICAgICAgIGZhaWxlZF90ZXN0cywKKyAgICAgICAgICAg
IHBhc3NlZF90ZXN0cywKKyAgICAgICAgICAgIHNraXBwZWRfdGVzdHMsCisgICAgICAgICAgICB0
ZXN0c19saXN0KQorCisgICAgICAgIGpzb24gPSBnZW5lcmF0b3IuZ2V0X2pzb24oKQorCisgICAg
ICAgICMgQWxpYXNpbmcgdG8gYSBzaG9ydCBuYW1lIGZvciBiZXR0ZXIgYWNjZXNzIHRvIGl0cyBj
b25zdGFudHMuCisgICAgICAgIEpSRyA9IGpzb25fcmVzdWx0c19nZW5lcmF0b3IuSlNPTlJlc3Vs
dHNHZW5lcmF0b3IKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoSlJHLlZFUlNJT05fS0VZIGlu
IGpzb24pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmJ1aWxkZXJfbmFtZSBpbiBqc29u
KQorCisgICAgICAgIGJ1aWxkaW5mbyA9IGpzb25bc2VsZi5idWlsZGVyX25hbWVdCisgICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZShKUkcuRklYQUJMRSBpbiBidWlsZGluZm8pCisgICAgICAgIHNlbGYu
YXNzZXJ0VHJ1ZShKUkcuVEVTVFMgaW4gYnVpbGRpbmZvKQorICAgICAgICBzZWxmLmFzc2VydFRy
dWUobGVuKGJ1aWxkaW5mb1tKUkcuQlVJTERfTlVNQkVSU10pID09IDEpCisgICAgICAgIHNlbGYu
YXNzZXJ0VHJ1ZShidWlsZGluZm9bSlJHLkJVSUxEX05VTUJFUlNdWzBdID09IHNlbGYuYnVpbGRf
bnVtYmVyKQorCisgICAgICAgIGlmIHRlc3RzX2xpc3QgIG9yIHNraXBwZWRfdGVzdHM6CisgICAg
ICAgICAgICBmaXhhYmxlID0gYnVpbGRpbmZvW0pSRy5GSVhBQkxFXVswXQorICAgICAgICAgICAg
aWYgcGFzc2VkX3Rlc3RzOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaXhhYmxl
W0pSRy5QQVNTX1JFU1VMVF0gPT0gbGVuKHBhc3NlZF90ZXN0cykpCisgICAgICAgICAgICBlbHNl
OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShKUkcuUEFTU19SRVNVTFQgbm90IGlu
IGZpeGFibGUgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4YWJsZVtKUkcu
UEFTU19SRVNVTFRdID09IDApCisgICAgICAgICAgICBpZiBza2lwcGVkX3Rlc3RzOgorICAgICAg
ICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaXhhYmxlW0pSRy5TS0lQX1JFU1VMVF0gPT0gbGVu
KHNraXBwZWRfdGVzdHMpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxm
LmFzc2VydFRydWUoSlJHLlNLSVBfUkVTVUxUIG5vdCBpbiBmaXhhYmxlIG9yCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZpeGFibGVbSlJHLlNLSVBfUkVTVUxUXSA9PSAwKQorCisg
ICAgICAgIGlmIGZhaWxlZF90ZXN0czoKKyAgICAgICAgICAgIHRlc3RzID0gYnVpbGRpbmZvW0pS
Ry5URVNUU10KKyAgICAgICAgICAgIGZvciB0ZXN0X25hbWUsIGZhaWx1cmUgaW4gZmFpbGVkX3Rl
c3RzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ZXN0X25h
bWUgaW4gdGVzdHMpCisgICAgICAgICAgICAgICAgdGVzdCA9IHRlc3RzW3Rlc3RfbmFtZV0KKyAg
ICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodGVzdFtKUkcuUkVTVUxUU11bMF1bMF0gPT0g
MSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodGVzdFtKUkcuUkVTVUxUU11bMF1b
MV0gPT0gSlJHLkZBSUxfUkVTVUxUKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0
ZXN0W0pSRy5USU1FU11bMF1bMF0gPT0gMSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRy
dWUodGVzdFtKUkcuVElNRVNdWzBdWzFdID09CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCh0ZXN0X3RpbWluZ3NbdGVzdF9uYW1lXSkpCisKKyAgICAgICAgZml4YWJsZV9jb3Vu
dCA9IGxlbihza2lwcGVkX3Rlc3RzKSArIGxlbihmYWlsZWRfdGVzdHMua2V5cygpKQorICAgICAg
ICBpZiBza2lwcGVkX3Rlc3RzIG9yIGZhaWxlZF90ZXN0czoKKyAgICAgICAgICAgIHNlbGYuYXNz
ZXJ0VHJ1ZShidWlsZGluZm9bSlJHLkZJWEFCTEVfQ09VTlRdWzBdID09IGZpeGFibGVfY291bnQp
CisKKyAgICBkZWYgdGVzdF9qc29uX2dlbmVyYXRpb24oc2VsZik6CisgICAgICAgIHJlYXNvbiA9
IHRlc3RfZXhwZWN0YXRpb25zLlRFWFQKKworICAgICAgICBzZWxmLl90ZXN0X2pzb25fZ2VuZXJh
dGlvbihbXSwge30sIFtdKQorICAgICAgICBzZWxmLl90ZXN0X2pzb25fZ2VuZXJhdGlvbihbJ0En
LCAnQiddLCB7fSwgW10pCisgICAgICAgIHNlbGYuX3Rlc3RfanNvbl9nZW5lcmF0aW9uKFtdLCB7
J0EnOiByZWFzb24sICdCJzogcmVhc29ufSwgW10pCisgICAgICAgIHNlbGYuX3Rlc3RfanNvbl9n
ZW5lcmF0aW9uKFtdLCB7fSwgWydBJywgJ0InXSkKKyAgICAgICAgc2VsZi5fdGVzdF9qc29uX2dl
bmVyYXRpb24oWydBJ10sIHsnQic6IHJlYXNvbiwgJ0MnOiByZWFzb259LCBbXSkKKyAgICAgICAg
c2VsZi5fdGVzdF9qc29uX2dlbmVyYXRpb24oW10sIHsnQSc6IHJlYXNvbiwgJ0InOiByZWFzb259
LCBbJ0MnLCAnRCddKQorICAgICAgICBzZWxmLl90ZXN0X2pzb25fZ2VuZXJhdGlvbihbJ0EnLCAn
QicsICdDJ10sIHsnRCc6IHJlYXNvbn0sIFsnRScsICdGJ10pCisKKworaWYgX19uYW1lX18gPT0g
J19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkK
</data>
<flag name="review"
          id="47137"
          type_id="1"
          status="+"
          setter="ojan"
    />
          </attachment>
      

    </bug>

</bugzilla>