<?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>177304</bug_id>
          
          <creation_ts>2017-09-21 09:02:23 -0700</creation_ts>
          <short_desc>WebDriver: Add support to import and run W3C tests</short_desc>
          <delta_ts>2017-11-15 13:12:46 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=177351</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bburg</cc>
    
    <cc>buildbot</cc>
    
    <cc>glenn</cc>
    
    <cc>joepeck</cc>
    
    <cc>lforschler</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1351198</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-09-21 09:02:23 -0700</bug_when>
    <thetext>WPT has now several web driver tests, and new ones are going to be added to cover the whole spec. See 

https://docs.google.com/spreadsheets/d/1GUK_sdY2cv59VAJNDxZQIfypnOpapSQhMjfcJ9Wc42U/edit#gid=0

We should be able to run those tests in our bots. We might want to import the selenium tests, or even add our owns, but for now, passing the w3c tests should ensure we properly implement the spec.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351206</commentid>
    <comment_count>1</comment_count>
      <attachid>321434</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-09-21 09:25:53 -0700</bug_when>
    <thetext>Created attachment 321434
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351216</commentid>
    <comment_count>2</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-09-21 09:32:58 -0700</bug_when>
    <thetext>Attachment 321434 did not pass style-queue:


ERROR: Tools/Scripts/webkitpy/webdriver_tests/webdriver_w3c_executor.py:29:  No name &apos;mozlog&apos; in module &apos;webkitpy.thirdparty.autoinstalled&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/webkitpy/webdriver_tests/webdriver_w3c_executor.py:30:  No name &apos;mozprocess&apos; in module &apos;webkitpy.thirdparty.autoinstalled&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/webkitpy/webdriver_tests/webdriver_w3c_executor.py:115:  [WebKitDriverServer.make_command] Instance of &apos;WebKitDriverServer&apos; has no &apos;binary&apos; member  [pylint/E1101] [5]
ERROR: Tools/Scripts/webkitpy/webdriver_tests/webdriver_w3c_executor.py:115:  [WebKitDriverServer.make_command] Instance of &apos;WebKitDriverServer&apos; has no &apos;port&apos; member  [pylint/E1101] [5]
ERROR: Tools/Scripts/webkitpy/webdriver_tests/webdriver_w3c_executor.py:115:  [WebKitDriverServer.make_command] Instance of &apos;WebKitDriverServer&apos; has no &apos;_args&apos; member  [pylint/E1101] [5]
ERROR: Tools/Scripts/webkitpy/webdriver_tests/webdriver_w3c_executor.py:132:  [WebDriverW3CExecutor.setup] Instance of &apos;WebDriverW3CExecutor&apos; has no &apos;protocol&apos; member  [pylint/E1101] [5]
ERROR: Tools/Scripts/webkitpy/webdriver_tests/webdriver_w3c_executor.py:135:  [WebDriverW3CExecutor.teardown] Instance of &apos;WebDriverW3CExecutor&apos; has no &apos;protocol&apos; member  [pylint/E1101] [5]
ERROR: Tools/Scripts/webkitpy/webdriver_tests/webdriver_w3c_executor.py:138:  [WebDriverW3CExecutor.run] Instance of &apos;WebDriverW3CExecutor&apos; has no &apos;do_wdspec&apos; member  [pylint/E1101] [5]
ERROR: Tools/Scripts/webkitpy/webdriver_tests/webdriver_w3c_executor.py:138:  [WebDriverW3CExecutor.run] Instance of &apos;WebDriverW3CExecutor&apos; has no &apos;protocol&apos; member  [pylint/E1101] [5]
Total errors found: 9 in 237 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>1351242</commentid>
    <comment_count>3</comment_count>
      <attachid>321434</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2017-09-21 10:21:36 -0700</bug_when>
    <thetext>Comment on attachment 321434
Patch

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

Overall, importing WebDriver tests to a separate directory on a different timescale seems like the right thing to do. We don&apos;t want WebDriver test updates to be blocked on rebaselining updated W3C layout tests.

However, I really don&apos;t want two copies of the same WPT tools in the tree. Especially because they import pytest, html5lib, and other dependencies into their tree instead of using versioned modules, so there is a lot of 3rd party code sitting around. This is an invitation for cruft and problems.

Carlos and I talked in IRC about ways to avoid doing this. Imported layout tests probably only use wptserve, so we can try to import just that for layout tests and import the full tools to WebDriverTests. Or, we can have a shared copy of tools and update the two test suites independently.

&gt; Tools/Scripts/run-webdriver-tests:46
&gt; +option_parser.add_option(&apos;--display-server&apos;, choices=[&apos;xvfb&apos;, &apos;xorg&apos;, &apos;weston&apos;, &apos;wayland&apos;], default=&apos;xvfb&apos;,

I think this option won&apos;t make any sense on other platforms than GTK?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351560</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-09-22 00:47:48 -0700</bug_when>
    <thetext>(In reply to Brian Burg from comment #3)
&gt; Comment on attachment 321434 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=321434&amp;action=review
&gt; 
&gt; Overall, importing WebDriver tests to a separate directory on a different
&gt; timescale seems like the right thing to do. We don&apos;t want WebDriver test
&gt; updates to be blocked on rebaselining updated W3C layout tests.

Exactly!

&gt; However, I really don&apos;t want two copies of the same WPT tools in the tree.
&gt; Especially because they import pytest, html5lib, and other dependencies into
&gt; their tree instead of using versioned modules, so there is a lot of 3rd
&gt; party code sitting around. This is an invitation for cruft and problems.

Agree.

&gt; Carlos and I talked in IRC about ways to avoid doing this. Imported layout
&gt; tests probably only use wptserve, so we can try to import just that for
&gt; layout tests and import the full tools to WebDriverTests. Or, we can have a
&gt; shared copy of tools and update the two test suites independently.

I&apos;ve checked it and layout tests don&apos;t need wptrunner and pytest at all, so we can update the importer to import only wptserve and its dependencies from tools directory. This way we won&apos;t have two copies of wptrunner, and we&apos;ll also reduce a bit the size since there are more things in tools that are unused.

&gt; &gt; Tools/Scripts/run-webdriver-tests:46
&gt; &gt; +option_parser.add_option(&apos;--display-server&apos;, choices=[&apos;xvfb&apos;, &apos;xorg&apos;, &apos;weston&apos;, &apos;wayland&apos;], default=&apos;xvfb&apos;,
&gt; 
&gt; I think this option won&apos;t make any sense on other platforms than GTK?

Right, same way it happens in run-webkit-tests, I don&apos;t think we can add options that depends on the value of other values. What we could do is adding groups to include the port specific options when we add support for more ports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351701</commentid>
    <comment_count>5</comment_count>
      <attachid>321562</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-09-22 10:40:25 -0700</bug_when>
    <thetext>Created attachment 321562
Updated patch

I&apos;ve updated the WPT tests, since it fixes tests, and now it also needs wptserve. Before the update all html content was loaded as data urls, but it seems edge doens&apos;t like those data urls (really?), so they changed to use http urls, which now requires wptserve to handle those requests. This patch adds a simple server implementation that launches the layout tests wpt server, but with a different configuration. This way we can reuse the implementation and we don&apos;t need to import wptserve for WebDriver tests too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351705</commentid>
    <comment_count>6</comment_count>
      <attachid>321564</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-09-22 10:42:03 -0700</bug_when>
    <thetext>Created attachment 321564
Patch

I forgot to git add the wpt server config file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351712</commentid>
    <comment_count>7</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-09-22 10:49:46 -0700</bug_when>
    <thetext>Attachment 321564 did not pass style-queue:


ERROR: Tools/Scripts/webkitpy/webdriver_tests/webdriver_w3c_executor.py:29:  No name &apos;mozlog&apos; in module &apos;webkitpy.thirdparty.autoinstalled&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/webkitpy/webdriver_tests/webdriver_w3c_executor.py:30:  No name &apos;mozprocess&apos; in module &apos;webkitpy.thirdparty.autoinstalled&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/webkitpy/webdriver_tests/webdriver_w3c_executor.py:115:  [WebKitDriverServer.make_command] Instance of &apos;WebKitDriverServer&apos; has no &apos;binary&apos; member  [pylint/E1101] [5]
ERROR: Tools/Scripts/webkitpy/webdriver_tests/webdriver_w3c_executor.py:115:  [WebKitDriverServer.make_command] Instance of &apos;WebKitDriverServer&apos; has no &apos;port&apos; member  [pylint/E1101] [5]
ERROR: Tools/Scripts/webkitpy/webdriver_tests/webdriver_w3c_executor.py:115:  [WebKitDriverServer.make_command] Instance of &apos;WebKitDriverServer&apos; has no &apos;_args&apos; member  [pylint/E1101] [5]
ERROR: Tools/Scripts/webkitpy/webdriver_tests/webdriver_w3c_executor.py:132:  [WebDriverW3CExecutor.setup] Instance of &apos;WebDriverW3CExecutor&apos; has no &apos;protocol&apos; member  [pylint/E1101] [5]
ERROR: Tools/Scripts/webkitpy/webdriver_tests/webdriver_w3c_executor.py:135:  [WebDriverW3CExecutor.teardown] Instance of &apos;WebDriverW3CExecutor&apos; has no &apos;protocol&apos; member  [pylint/E1101] [5]
ERROR: Tools/Scripts/webkitpy/webdriver_tests/webdriver_w3c_executor.py:138:  [WebDriverW3CExecutor.run] Instance of &apos;WebDriverW3CExecutor&apos; has no &apos;do_wdspec&apos; member  [pylint/E1101] [5]
ERROR: Tools/Scripts/webkitpy/webdriver_tests/webdriver_w3c_executor.py:138:  [WebDriverW3CExecutor.run] Instance of &apos;WebDriverW3CExecutor&apos; has no &apos;protocol&apos; member  [pylint/E1101] [5]
Total errors found: 9 in 244 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>1352305</commentid>
    <comment_count>8</comment_count>
      <attachid>321564</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2017-09-25 12:08:38 -0700</bug_when>
    <thetext>Comment on attachment 321564
Patch

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

r=me

&gt; Tools/Scripts/webkitpy/webdriver_tests/webdriver_w3c_web_server.py:48
&gt; +        if self._port.host.platform.is_mac():

Shouldn&apos;t this use mkdtemp or similar? Why is Mac a special case?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1364766</commentid>
    <comment_count>9</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-10-26 03:58:33 -0700</bug_when>
    <thetext>Committed r224014: &lt;https://trac.webkit.org/changeset/224014&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1372412</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-11-15 13:12:46 -0800</bug_when>
    <thetext>&lt;rdar://problem/35569015&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321434</attachid>
            <date>2017-09-21 09:25:53 -0700</date>
            <delta_ts>2017-09-22 10:40:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wd-w3c-tests.diff</filename>
            <type>text/plain</type>
            <size>1528748</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA0ZDkx
NDMxYzNhNC4uZjY2YzRjMmJhNTkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9U
b29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNCBAQAorMjAxNy0wOS0yMSAgQ2FybG9zIEdhcmNp
YSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgV2ViRHJpdmVyOiBBZGQg
c3VwcG9ydCB0byBpbXBvcnQgYW5kIHJ1biBXM0MgdGVzdHMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzMwNAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdQVCBoYXMgbm93IHNldmVyYWwgV2ViRHJpdmVy
IHRlc3RzLCBhbmQgbmV3IG9uZXMgYXJlIGdvaW5nIHRvIGJlIGFkZGVkIHRvIGNvdmVyIHRoZSB3
aG9sZSBzcGVjLiBUaGlzIHBhdGNoCisgICAgICAgIGFkZHMgdGhlIGluaXRpYWwgc3VwcG9ydCBm
b3IgcnVubmluZyBXM0MgdGVzdHMuIFRoZSBzY3JpcHQgaW1wb3J0LXczYy13ZWJkcml2ZXItdGVz
dHMgcmV1c2VzIHBhcnRzIG9mIHRoZSAgVzNDCisgICAgICAgIHRlc3QgZG93bmxvYWRlciB0byBk
b3dubG9hZCB0aGUgdGVzdHMgYW5kIHJlcXVpcmVkIHRvb2xzIGZyb20gV1BUIHJlcG9zaXRvcnkg
aW50byBXZWJEcml2ZXJUZXN0cworICAgICAgICBkaXJlY3RvcnkuIFRlc3RzIGNhbiBiZSBydW4g
d2l0aCBydW4td2ViZHJpdmVyLXRlc3RzLCBhIG5ldyBzY3JpcHQgdGhhdCB3b3JrcyBzaW1pbGFy
IHRvIG90aGVyIHRlc3QgcnVubmVyCisgICAgICAgIHNjcmlwdHMuIEZvciBub3cgaXQgc2hvd3Mg
YSBzdW1tYXJ5IGF0IHRoZSBlbmQgb2YgdGhlIGV4ZWN1dGlvbiwgdGhlcmUgYXJlbid0IGV4cGVj
dGF0aW9ucyB5ZXQsIHNpbmNlIHdlIGFyZSBub3QKKyAgICAgICAgcmVhZHkgdG8gcnVuIHRob3Nl
IHRlc3RzIGluIHRoZSBib3RzLiBOb3Qgb25seSBiZWNhdXNlIG9mIGJ1Z3MgYW5kIG1pc3Npbmcg
Y29tbWFuZHMgaW4gb3VyIFdlYkRyaXZlcgorICAgICAgICBpbXBsZW1lbnRhdGlvbiwgYnV0IGFs
c28gYmVjYXVzZSB0aGUgdGVzdHMgdGhlbXNldmVzIGFyZSBub3Qgc3BlYyBjb21wbGlhbnQuIEhv
d2V2ZXIsIHRoaXMgaXMgc3RpbGwgdXNlZnVsIHRvCisgICAgICAgIHJ1biB0aGUgdGVzdHMgdG8g
Zml4IHRoZSBidWdzIGFuZCBpbXBsZW1lbnQgdGhlIG1pc3NpbmcgZmVhdHVyZXMuIE9uY2Ugd2Ug
YXJlIHJlYWR5IHRvIHByb3Blcmx5IHJ1biB0aGUgdGVzdHMsCisgICAgICAgIHdlIGNhbiBhZGQg
dGhlIGV4cGVjdGF0aW9ucyBzdXBwb3J0IGFuZCBydW4gdGhlIHRlc3RzIGluIHRoZSBib3RzLgor
CisgICAgICAgICogU2NyaXB0cy9pbXBvcnQtdzNjLXdlYmRyaXZlci10ZXN0czogQWRkZWQuCisg
ICAgICAgICogU2NyaXB0cy9ydW4td2ViZHJpdmVyLXRlc3RzOiBBZGRlZC4KKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHk6IFNraXAgV2ViRHJpdmVyVGVzdHMgZGly
ZWN0b3J5IHNpbmNlIGl0IG9ubHkgY29udGFpbnMgdGhpcmQtcGFydHkgcHl0aG9uCisgICAgICAg
IGNvZGUuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L19faW5pdF9fLnB5
OiBBZGQgc3VwcG9ydCB0byBhdXRvZG93bmxvYWQgbW96bG9nIGFuZCBtb3pwcm9jZXNzIHNpbmNl
IHRoZXkgcmVxdWlyZWQKKyAgICAgICAgYnkgdGhlIFdlYkRyaXZlciB0ZXN0cy4KKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZlcl90ZXN0cy9fX2luaXRfXy5weTogQWRkZWQuCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJfdGVzdHMvd2ViZHJpdmVyX2RyaXZl
ci5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJfdGVzdHMv
d2ViZHJpdmVyX2RyaXZlcl9ndGsucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvd2ViZHJpdmVyX3Rlc3RzL3dlYmRyaXZlcl90ZXN0X3Jlc3VsdC5weTogQWRkZWQuCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJfdGVzdHMvd2ViZHJpdmVyX3Rlc3RfcnVu
bmVyLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZlcl90ZXN0
cy93ZWJkcml2ZXJfdGVzdF9ydW5uZXJfdzNjLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L3dlYmRyaXZlcl90ZXN0cy93ZWJkcml2ZXJfdzNjX2V4ZWN1dG9yLnB5OiBBZGRl
ZC4KKwogMjAxNy0wOS0xOSAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29t
PgogCiAgICAgICAgIFdTTCBzaG91bGQgYmUgYWJsZSB0byB0cmFwIHdoZW4gc29tZXRoaW5nIGZh
dGFsIGhhcHBlbnMKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvaW1wb3J0LXczYy13ZWJkcml2
ZXItdGVzdHMgYi9Ub29scy9TY3JpcHRzL2ltcG9ydC13M2Mtd2ViZHJpdmVyLXRlc3RzCm5ldyBm
aWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwLi4xZmQ3Nzk0NjAyMgotLS0gL2Rldi9u
dWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvaW1wb3J0LXczYy13ZWJkcml2ZXItdGVzdHMKQEAgLTAs
MCArMSw4MCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyMgQ29weXJpZ2h0IChDKSAyMDE3
IElnYWxpYSBTLkwuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMK
KyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZQorIyAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZworIyAgICBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjICAgIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisjICAgIGRpc2NsYWlt
ZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworIyAgICBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIgIkFTIElTIiBBTkQgQU5ZCisjIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisj
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUIEhPTERFUiBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCisjIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorIyBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IKKyMgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GCisjIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorIyBTVUNIIERBTUFHRS4KKworaW1wb3J0
IGxvZ2dpbmcKK2ltcG9ydCBqc29uCitpbXBvcnQgb3MKKworZnJvbSB3ZWJraXRweS5jb21tb24u
aG9zdCBpbXBvcnQgSG9zdAorZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmZpbGVzeXN0ZW0g
aW1wb3J0IEZpbGVTeXN0ZW0KK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5sb2d1dGlscyBp
bXBvcnQgY29uZmlndXJlX2xvZ2dpbmcKK2Zyb20gd2Via2l0cHkuY29tbW9uLndlYmtpdF9maW5k
ZXIgaW1wb3J0IFdlYktpdEZpbmRlcgorZnJvbSB3ZWJraXRweS5jb21tb24uY2hlY2tvdXQuc2Nt
LmdpdCBpbXBvcnQgR2l0Citmcm9tIHdlYmtpdHB5LnczYy50ZXN0X2Rvd25sb2FkZXIgaW1wb3J0
IFRlc3REb3dubG9hZGVyCisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKKwor
ZGVmIGRvd25sb2FkX3Rlc3RzKGhvc3QsIHVybCwgcmV2aXNpb24sIGRlc3RfZGlyZWN0b3J5KToK
KyAgICBkb3dubG9hZGVyID0gVGVzdERvd25sb2FkZXIoTm9uZSwgaG9zdCwgVGVzdERvd25sb2Fk
ZXIuZGVmYXVsdF9vcHRpb25zKCkpCisgICAgZG93bmxvYWRlci5jaGVja291dF90ZXN0X3JlcG9z
aXRvcnkocmV2aXNpb24sIHVybCwgZGVzdF9kaXJlY3RvcnkpCisgICAgZG93bmxvYWRlci5naXQo
ZGVzdF9kaXJlY3RvcnkpLmNoZWNrb3V0KHJldmlzaW9uLCBGYWxzZSkKKworZGVmIHNob3VsZF9z
a2lwX2ZpbGUoc291cmNlX3BhdGgsIGZ1bGxfcGF0aHNfdG9fc2tpcCk6CisgICAgZm9yIHBhdGgg
aW4gZnVsbF9wYXRoc190b19za2lwOgorICAgICAgICBpZiBzb3VyY2VfcGF0aC5zdGFydHN3aXRo
KHBhdGgpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICByZXR1cm4gRmFsc2UKKworZGVm
IGltcG9ydF90ZXN0cyhob3N0LCBwYXRoc190b19pbXBvcnQsIHBhdGhzX3RvX3NraXAsIHNyY19k
aXJlY3RvcnksIGRlc3RfZGlyZWN0b3J5KToKKyAgICBfbG9nLmluZm8oJ0ltcG9ydGluZyB0ZXN0
cycpCisgICAgZnVsbF9wYXRoc190b19za2lwID0gW2hvc3QuZmlsZXN5c3RlbS5qb2luKHNyY19k
aXJlY3RvcnksIHBhdGgpIGZvciBwYXRoIGluIHBhdGhzX3RvX3NraXBdCisgICAgZm9yIHBhdGgg
aW4gcGF0aHNfdG9faW1wb3J0OgorICAgICAgICBzb3VyY2VfZGlyZWN0b3J5ID0gaG9zdC5maWxl
c3lzdGVtLmpvaW4oc3JjX2RpcmVjdG9yeSwgcGF0aCkKKyAgICAgICAgZm9yIHNvdXJjZV9wYXRo
IGluIGhvc3QuZmlsZXN5c3RlbS5maWxlc191bmRlcihzb3VyY2VfZGlyZWN0b3J5KToKKyAgICAg
ICAgICAgIGlmIHNob3VsZF9za2lwX2ZpbGUoc291cmNlX3BhdGgsIGZ1bGxfcGF0aHNfdG9fc2tp
cCk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uX3Bh
dGggPSBob3N0LmZpbGVzeXN0ZW0uam9pbihkZXN0X2RpcmVjdG9yeSwgaG9zdC5maWxlc3lzdGVt
LnJlbHBhdGgoc291cmNlX3BhdGgsIHNyY19kaXJlY3RvcnkpKQorICAgICAgICAgICAgaG9zdC5m
aWxlc3lzdGVtLm1heWJlX21ha2VfZGlyZWN0b3J5KGhvc3QuZmlsZXN5c3RlbS5kaXJuYW1lKGRl
c3RpbmF0aW9uX3BhdGgpKQorICAgICAgICAgICAgaG9zdC5maWxlc3lzdGVtLmNvcHlmaWxlKHNv
dXJjZV9wYXRoLCBkZXN0aW5hdGlvbl9wYXRoKQorCisKK2NvbmZpZ3VyZV9sb2dnaW5nKCkKKwor
aG9zdCA9IEhvc3QoKQoraG9zdC5pbml0aWFsaXplX3NjbSgpCit3ZWJraXRfZmluZGVyID0gV2Vi
S2l0RmluZGVyKGhvc3QuZmlsZXN5c3RlbSkKK2ltcG9ydGVyX2NvbmZpZ19wYXRoID0gd2Via2l0
X2ZpbmRlci5wYXRoX2Zyb21fd2Via2l0X2Jhc2UoJ1dlYkRyaXZlclRlc3RzJywgJ2ltcG9ydGVk
JywgJ3czYycsICdpbXBvcnRlci5qc29uJykKK2NvbmZpZyA9IGpzb24ubG9hZHMoaG9zdC5maWxl
c3lzdGVtLnJlYWRfdGV4dF9maWxlKGltcG9ydGVyX2NvbmZpZ19wYXRoKSkKKworZG93bmxvYWRf
cGF0aCA9IHdlYmtpdF9maW5kZXIucGF0aF9mcm9tX3dlYmtpdF9iYXNlKCdXZWJLaXRCdWlsZCcs
ICd3M2MtdGVzdHMnLCAnd2ViLXBsYXRmb3JtLXRlc3RzJykKK2hvc3QuZmlsZXN5c3RlbS5tYXli
ZV9tYWtlX2RpcmVjdG9yeShob3N0LmZpbGVzeXN0ZW0uZGlybmFtZShkb3dubG9hZF9wYXRoKSkK
K2Rvd25sb2FkX3Rlc3RzKGhvc3QsIGNvbmZpZ1sncmVwb3NpdG9yeSddLCBjb25maWdbJ3Jldmlz
aW9uJ10sIGRvd25sb2FkX3BhdGgpCisKK2ltcG9ydF9wYXRoID0gd2Via2l0X2ZpbmRlci5wYXRo
X2Zyb21fd2Via2l0X2Jhc2UoJ1dlYkRyaXZlclRlc3RzJywgJ2ltcG9ydGVkJywgJ3czYycpCitp
bXBvcnRfdGVzdHMoaG9zdCwgY29uZmlnWydwYXRoc190b19pbXBvcnQnXSwgY29uZmlnWydwYXRo
c190b19za2lwJ10sIGRvd25sb2FkX3BhdGgsIGltcG9ydF9wYXRoKQpkaWZmIC0tZ2l0IGEvVG9v
bHMvU2NyaXB0cy9ydW4td2ViZHJpdmVyLXRlc3RzIGIvVG9vbHMvU2NyaXB0cy9ydW4td2ViZHJp
dmVyLXRlc3RzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwLi45NGUyYzE0
Nzk3OQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvcnVuLXdlYmRyaXZlci10ZXN0
cwpAQCAtMCwwICsxLDY2IEBACisjIS91c3IvYmluL2VudiBweXRob24KKworIyBDb3B5cmlnaHQg
KEMpIDIwMTcgSWdhbGlhIFMuTC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUg
bWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyMg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorIyBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworIyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisjIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgorIyBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwor
IyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IHN5cworCitm
cm9tIHdlYmtpdHB5LmNvbW1vbi5ob3N0IGltcG9ydCBIb3N0Citmcm9tIHdlYmtpdHB5LndlYmRy
aXZlcl90ZXN0cy53ZWJkcml2ZXJfdGVzdF9ydW5uZXIgaW1wb3J0IFdlYkRyaXZlclRlc3RSdW5u
ZXIKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5sb2d1dGlscyBpbXBvcnQgY29uZmlndXJl
X2xvZ2dpbmcKKworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCitvcHRpb25f
cGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKHVzYWdlPSd1c2FnZTogJXByb2cgW29wdGlv
bnNdIFt0ZXN0Li4uXScpCitvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy0tdmVyYm9zZScsIGFj
dGlvbj0nc3RvcmVfdHJ1ZScsIGRlc3Q9J3ZlcmJvc2UnLAorICAgICAgICAgICAgICAgICAgICAg
ICAgIGhlbHA9J1Nob3cgZGVidWcgbWVzc2FnZScpCitvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24o
Jy0tcGxhdGZvcm0nLCBhY3Rpb249J3N0b3JlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBo
ZWxwPSdQbGF0Zm9ybSB0byB1c2UgKGUuZy4sICJndGsiKScpCitvcHRpb25fcGFyc2VyLmFkZF9v
cHRpb24oJy0tZ3RrJywgYWN0aW9uPSdzdG9yZV9jb25zdCcsIGRlc3Q9J3BsYXRmb3JtJywgY29u
c3Q9J2d0aycsCisgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nQWxpYXMgZm9yIC0tcGxh
dGZvcm09Z3RrJykKK29wdGlvbl9wYXJzZXIuYWRkX29wdGlvbignLS1yZWxlYXNlJywgYWN0aW9u
PSdzdG9yZV9jb25zdCcsIGNvbnN0PSdSZWxlYXNlJywgZGVzdD0iY29uZmlndXJhdGlvbiIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nU2V0IHRoZSBjb25maWd1cmF0aW9uIHRvIFJl
bGVhc2UnKQorb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCctLWRlYnVnJywgYWN0aW9uPSdzdG9y
ZV9jb25zdCcsIGNvbnN0PSdEZWJ1ZycsIGRlc3Q9ImNvbmZpZ3VyYXRpb24iLAorICAgICAgICAg
ICAgICAgICAgICAgICAgIGhlbHA9J1NldCB0aGUgY29uZmlndXJhdGlvbiB0byBEZWJ1ZycpCitv
cHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy0tZGlzcGxheS1zZXJ2ZXInLCBjaG9pY2VzPVsneHZm
YicsICd4b3JnJywgJ3dlc3RvbicsICd3YXlsYW5kJ10sIGRlZmF1bHQ9J3h2ZmInLAorICAgICAg
ICAgICAgICAgICAgICAgICAgIGhlbHA9JyJ4dmZiIjogVXNlIGEgdmlydHVhbGl6ZWQgWDExIHNl
cnZlci4gInhvcmciOiBVc2UgdGhlIGN1cnJlbnQgWDExIHNlc3Npb24uICcKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICcid2VzdG9uIjogVXNlIGEgdmlydHVhbGl6ZWQgV2VzdG9uIHNl
cnZlci4gIndheWxhbmQiOiBVc2UgdGhlIGN1cnJlbnQgd2F5bGFuZCBzZXNzaW9uLicpCisKK29w
dGlvbnMsIGFyZ3MgPSBvcHRpb25fcGFyc2VyLnBhcnNlX2FyZ3MoKQorCitjb25maWd1cmVfbG9n
Z2luZyhsb2dnaW5nLkRFQlVHIGlmIG9wdGlvbnMudmVyYm9zZSBlbHNlIGxvZ2dpbmcuSU5GTykK
KwordHJ5OgorICAgIHBvcnQgPSBIb3N0KCkucG9ydF9mYWN0b3J5LmdldChvcHRpb25zLnBsYXRm
b3JtLCBvcHRpb25zKQorZXhjZXB0IE5vdEltcGxlbWVudGVkRXJyb3IsIGU6CisgICAgX2xvZy5l
cnJvcihzdHIoZSkpCisgICAgc3lzLmV4aXQoLTEpCisKK3BvcnQuX2Rpc3BsYXlfc2VydmVyID0g
b3B0aW9ucy5kaXNwbGF5X3NlcnZlcgorcnVubmVyID0gV2ViRHJpdmVyVGVzdFJ1bm5lcihwb3J0
KQorcmV0dmFsID0gcnVubmVyLnJ1bihhcmdzKQorcnVubmVyLnByaW50X3Jlc3VsdHMoKQorCitz
eXMuZXhpdChyZXR2YWwpCisKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5
bGUvY2hlY2tlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQpp
bmRleCBiYWQ1NzZjZDNmNC4uZDFlMGFmNjhjOTUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0
eWxlL2NoZWNrZXIucHkKQEAgLTM0Niw2ICszNDYsOCBAQCBfU0tJUFBFRF9GSUxFU19XSVRIX1dB
Uk5JTkcgPSBbCiBfU0tJUFBFRF9GSUxFU19XSVRIT1VUX1dBUk5JTkcgPSBbCiAgICAgIkxheW91
dFRlc3RzIiArIG9zLnBhdGguc2VwLAogCisgICAgIldlYkRyaXZlclRlc3RzIiArIG9zLnBhdGgu
c2VwLAorCiAgICAgIyBGaWxlcyBnZW5lcmF0ZWQgYnkgdGhlIGJpbmRpbmdzIHNjcmlwdCBzaG91
bGQgbm90IGJlIGNoZWNrZWQgZm9yIHN0eWxlLgogICAgIG9zLnBhdGguam9pbignU291cmNlJywg
J1dlYkNvcmUnLCAnYmluZGluZ3MnLCAnc2NyaXB0cycsICd0ZXN0JyksCiAKZGlmZiAtLWdpdCBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9fX2luaXRfXy5weSBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9fX2luaXRfXy5weQppbmRleCBjMDg0YTE3Y2I5OC4u
OTU1N2I2N2FhODYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0
eS9fX2luaXRfXy5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvX19p
bml0X18ucHkKQEAgLTEwNiw2ICsxMDYsMTAgQEAgY2xhc3MgQXV0b2luc3RhbGxJbXBvcnRIb29r
KG9iamVjdCk6CiAgICAgICAgICAgICBzZWxmLmluc3RhbGxfY2hyb21lZHJpdmVyKCkKICAgICAg
ICAgZWxpZiAnLmdlY2tvZHJpdmVyJyBpbiBmdWxsbmFtZToKICAgICAgICAgICAgIHNlbGYuaW5z
dGFsbF9nZWNrb2RyaXZlcigpCisgICAgICAgIGVsaWYgJy5tb3psb2cnIGluIGZ1bGxuYW1lOgor
ICAgICAgICAgICAgc2VsZi5faW5zdGFsbF9tb3psb2coKQorICAgICAgICBlbGlmICcubW96cHJv
Y2VzcycgaW4gZnVsbG5hbWU6CisgICAgICAgICAgICBzZWxmLl9pbnN0YWxsX21venByb2Nlc3Mo
KQogCiAgICAgZGVmIF9pbnN0YWxsX21lY2hhbml6ZShzZWxmKToKICAgICAgICAgc2VsZi5faW5z
dGFsbCgiaHR0cDovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2UvbS9tZWNoYW5pemUv
bWVjaGFuaXplLTAuMi41LnRhci5neiIsCkBAIC0xMTksNiArMTIzLDE2IEBAIGNsYXNzIEF1dG9p
bnN0YWxsSW1wb3J0SG9vayhvYmplY3QpOgogICAgICAgICBzZWxmLl9pbnN0YWxsKCJodHRwOi8v
cHlwaS5weXRob24ub3JnL3BhY2thZ2VzL3NvdXJjZS9wL3BlcDgvcGVwOC0wLjUuMC50YXIuZ3oj
bWQ1PTUxMmE4MThhZjk5NzkyOTBjZDYxOWNjZThlOWMyZTJiIiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgInBlcDgtMC41LjAvcGVwOC5weSIpCiAKKyAgICBkZWYgX2luc3RhbGxfbW96
bG9nKHNlbGYpOgorICAgICAgICBzZWxmLl9lbnN1cmVfYXV0b2luc3RhbGxlZF9kaXJfaXNfaW5f
c3lzX3BhdGgoKQorICAgICAgICBzZWxmLl9pbnN0YWxsKCJodHRwczovL3B5cGkucHl0aG9uLm9y
Zy9wYWNrYWdlcy8xMC9kNS9kMjg2YjVkYzNmNDBlMzJkMmE5YjNjYWIwYjViMjBhMDVkNzA0OTU4
YjQ0YjRjNWE5YWVkNjQ3MmRlYWIvbW96bG9nLTMuNS50YXIuZ3ojbWQ1PTMyODJjNzBlNzAzNzI2
NmY4M2Q4YzgwMTE5MTI5Yjc1IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ps
b2ctMy41L21vemxvZyIpCisKKyAgICBkZWYgX2luc3RhbGxfbW96cHJvY2VzcyhzZWxmKToKKyAg
ICAgICAgc2VsZi5fZW5zdXJlX2F1dG9pbnN0YWxsZWRfZGlyX2lzX2luX3N5c19wYXRoKCkKKyAg
ICAgICAgc2VsZi5faW5zdGFsbCgiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvY2Iv
MjYvMTQ0ZGJjMjhkMWY0MGUzOTJmOGEwY2JlZTc3MWJhNjI0YTYxMDE3ZjAxNmM3N2FkODg0MjRk
ODRiMjMwL21venByb2Nlc3MtMC4yNS50YXIuZ3ojbWQ1PTA3YTA0ZTZhZTFhNzA1NzA1ZTRiNDQ5
NjlmZTdhMTgyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3pwcm9jZXNzLTAu
MjUvbW96cHJvY2VzcyIpCisKICAgICBkZWYgX2luc3RhbGxfcHlsaW50KHNlbGYpOgogICAgICAg
ICBzZWxmLl9lbnN1cmVfYXV0b2luc3RhbGxlZF9kaXJfaXNfaW5fc3lzX3BhdGgoKQogICAgICAg
ICBpZiAobm90IHNlbGYuX2ZzLmV4aXN0cyhzZWxmLl9mcy5qb2luKF9BVVRPSU5TVEFMTEVEX0RJ
UiwgInB5bGludCIpKSBvcgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93ZWJk
cml2ZXJfdGVzdHMvX19pbml0X18ucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZl
cl90ZXN0cy9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MC4uZWY2NWJlZTViYjcKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3dlYmRyaXZlcl90ZXN0cy9fX2luaXRfXy5weQpAQCAtMCwwICsxIEBACisjIFJlcXVpcmVkIGZv
ciBQeXRob24gdG8gc2VhcmNoIHRoaXMgZGlyZWN0b3J5IGZvciBtb2R1bGUgZmlsZXMKZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvd2ViZHJpdmVyX3Rlc3RzL3dlYmRyaXZlcl9k
cml2ZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZlcl90ZXN0cy93ZWJkcml2
ZXJfZHJpdmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45ZWUy
YjQ0ZGZiNAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvd2ViZHJp
dmVyX3Rlc3RzL3dlYmRyaXZlcl9kcml2ZXIucHkKQEAgLTAsMCArMSw0OSBAQAorIyBDb3B5cmln
aHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBh
cmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkK
KyMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorIyBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworIyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisjIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTgorIyBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UworIyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworCitjbGFzcyBXZWJEcml2ZXIob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18o
c2VsZiwgcG9ydCk6CisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CisKKyAgICBkZWYgYmluYXJ5
X3BhdGgoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRl
ZiBicm93c2VyX25hbWUoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IK
KworICAgIGRlZiBjYXBhYmlsaXRpZXMoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVu
dGVkRXJyb3IKKworCitfZHJpdmVycyA9IHt9CisKKworZGVmIHJlZ2lzdGVyX2RyaXZlcihwb3J0
X25hbWUsIGRyaXZlcl9jbHMpOgorICAgIF9kcml2ZXJzW3BvcnRfbmFtZV0gPSBkcml2ZXJfY2xz
CisKKworZGVmIGNyZWF0ZV9kcml2ZXIocG9ydCk6CisgICAgaWYgcG9ydC5uYW1lKCkgbm90IGlu
IF9kcml2ZXJzOgorICAgICAgICBfX2ltcG9ydF9fKCd3ZWJraXRweS53ZWJkcml2ZXJfdGVzdHMu
d2ViZHJpdmVyX2RyaXZlcl8lcycgJSBwb3J0Lm5hbWUoKSkKKworICAgIHJldHVybiBfZHJpdmVy
c1twb3J0Lm5hbWUoKV0ocG9ydCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
d2ViZHJpdmVyX3Rlc3RzL3dlYmRyaXZlcl9kcml2ZXJfZ3RrLnB5IGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS93ZWJkcml2ZXJfdGVzdHMvd2ViZHJpdmVyX2RyaXZlcl9ndGsucHkKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQ5OWU2ZjhhODI1Ci0tLSAvZGV2L251bGwK
KysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJfdGVzdHMvd2ViZHJpdmVyX2Ry
aXZlcl9ndGsucHkKQEAgLTAsMCArMSw0NCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlh
IFMuTC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorIyBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworIyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisjIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgor
IyBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworIyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworZnJvbSB3
ZWJraXRweS53ZWJkcml2ZXJfdGVzdHMud2ViZHJpdmVyX2RyaXZlciBpbXBvcnQgV2ViRHJpdmVy
LCByZWdpc3Rlcl9kcml2ZXIKKworCitjbGFzcyBXZWJEcml2ZXJHdGsoV2ViRHJpdmVyKToKKwor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0KToKKyAgICAgICAgc3VwZXIoV2ViRHJpdmVyR3Rr
LCBzZWxmKS5fX2luaXRfXyhwb3J0KQorCisgICAgZGVmIGJpbmFyeV9wYXRoKHNlbGYpOgorICAg
ICAgICByZXR1cm4gc2VsZi5fcG9ydC5fYnVpbGRfcGF0aCgnYmluJywgJ1dlYktpdFdlYkRyaXZl
cicpCisKKyAgICBkZWYgYnJvd3Nlcl9uYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gJ01pbmlC
cm93c2VyJworCisgICAgZGVmIGNhcGFiaWxpdGllcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHsn
YnJvd3Nlck5hbWUnOiBzZWxmLmJyb3dzZXJfbmFtZSgpLAorICAgICAgICAgICAgICAgICd3ZWJr
aXRndGs6YnJvd3Nlck9wdGlvbnMnOiB7CisgICAgICAgICAgICAgICAgICAgICdiaW5hcnknOiBz
ZWxmLl9wb3J0Ll9idWlsZF9wYXRoKCdiaW4nLCAnTWluaUJyb3dzZXInKSwKKyAgICAgICAgICAg
ICAgICAgICAgJ2FyZ3MnOiBbJy0tYXV0b21hdGlvbicsICctLWphdmFzY3JpcHQtY2FuLW9wZW4t
d2luZG93cy1hdXRvbWF0aWNhbGx5PXRydWUnXX19CisKKworcmVnaXN0ZXJfZHJpdmVyKCdndGsn
LCBXZWJEcml2ZXJHdGspCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3dlYmRy
aXZlcl90ZXN0cy93ZWJkcml2ZXJfdGVzdF9yZXN1bHQucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3dlYmRyaXZlcl90ZXN0cy93ZWJkcml2ZXJfdGVzdF9yZXN1bHQucHkKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjVlNTA3Y2ZiZmViCi0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJfdGVzdHMvd2ViZHJpdmVyX3Rlc3Rf
cmVzdWx0LnB5CkBAIC0wLDAgKzEsMzUgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBT
LkwuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyMgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworIyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyMg
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBv
cworCisKK2NsYXNzIFdlYkRyaXZlclRlc3RSZXN1bHQob2JqZWN0KToKKworICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCB0ZXN0X3ByZWZpeCwgdGVzdCwgc3RhdHVzLCBtZXNzYWdlLCBiYWNrdHJhY2U9
Tm9uZSk6CisgICAgICAgIHNlbGYudGVzdCA9IG9zLnBhdGguam9pbih0ZXN0X3ByZWZpeCwgdGVz
dCkKKyAgICAgICAgc2VsZi5zdGF0dXMgPSBzdGF0dXMKKyAgICAgICAgc2VsZi5tZXNzYWdlID0g
bWVzc2FnZQorICAgICAgICBzZWxmLmJhY2t0cmFjZSA9IGJhY2t0cmFjZQorCisgICAgZGVmIF9f
cmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIjwlcy4lcyAlcyAlcz4iICUgKHNlbGYuX19t
b2R1bGVfXywgc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIHNlbGYudGVzdCwgc2VsZi5zdGF0dXMp
CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZlcl90ZXN0cy93ZWJk
cml2ZXJfdGVzdF9ydW5uZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZlcl90
ZXN0cy93ZWJkcml2ZXJfdGVzdF9ydW5uZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLjY0NjYxZWE5MmJhCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS93ZWJkcml2ZXJfdGVzdHMvd2ViZHJpdmVyX3Rlc3RfcnVubmVyLnB5CkBAIC0w
LDAgKzEsNzUgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCisjCisjIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisj
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyMgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworIyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyMgQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBsb2dnaW5nCisKK2Zyb20g
d2Via2l0cHkud2ViZHJpdmVyX3Rlc3RzLndlYmRyaXZlcl90ZXN0X3J1bm5lcl93M2MgaW1wb3J0
IFdlYkRyaXZlclRlc3RSdW5uZXJXM0MKKworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFt
ZV9fKQorCisKK2NsYXNzIFdlYkRyaXZlclRlc3RSdW5uZXIob2JqZWN0KToKKworICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBwb3J0KToKKyAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKKyAgICAgICAg
X2xvZy5pbmZvKCdVc2luZyBwb3J0ICVzJyAlIHNlbGYuX3BvcnQubmFtZSgpKQorICAgICAgICBf
bG9nLmluZm8oJ1Rlc3QgY29uZmlndXJhdGlvbjogJXMnICUgc2VsZi5fcG9ydC50ZXN0X2NvbmZp
Z3VyYXRpb24oKSkKKyAgICAgICAgX2xvZy5pbmZvKCdVc2luZyBkaXNwbGF5IHNlcnZlciAlcycg
JSAoc2VsZi5fcG9ydC5fZGlzcGxheV9zZXJ2ZXIpKQorCisgICAgICAgIHNlbGYuX2Rpc3BsYXlf
ZHJpdmVyID0gc2VsZi5fcG9ydC5jcmVhdGVfZHJpdmVyKHdvcmtlcl9udW1iZXI9MCwgbm9fdGlt
ZW91dD1UcnVlKS5fbWFrZV9kcml2ZXIocGl4ZWxfdGVzdHM9RmFsc2UpCisgICAgICAgIGlmIG5v
dCBzZWxmLl9kaXNwbGF5X2RyaXZlci5jaGVja19kcml2ZXIoc2VsZi5fcG9ydCk6CisgICAgICAg
ICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkZhaWxlZCB0byBjaGVjayBkcml2ZXIgJXMiICUgc2Vs
Zi5fZGlzcGxheV9kcml2ZXIuX19jbGFzc19fLl9fbmFtZV9fKQorICAgICAgICBzZWxmLl9ydW5u
ZXIgPSBXZWJEcml2ZXJUZXN0UnVubmVyVzNDKHNlbGYuX3BvcnQsIHNlbGYuX2Rpc3BsYXlfZHJp
dmVyKQorCisgICAgZGVmIHJ1bihzZWxmLCB0ZXN0cz1bXSk6CisgICAgICAgIHJ1bm5lcl90ZXN0
cyA9IHNlbGYuX3J1bm5lci5jb2xsZWN0X3Rlc3RzKHRlc3RzKQorICAgICAgICBpZiBydW5uZXJf
dGVzdHM6CisgICAgICAgICAgICBfbG9nLmluZm8oJ0NvbGxlY3RlZCAlZCB0ZXN0cycgJSBsZW4o
cnVubmVyX3Rlc3RzKSkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9ydW5uZXIucnVuKHJ1bm5l
cl90ZXN0cykKKworICAgICAgICBfbG9nLmluZm8oJ05vIHRlc3RzIGZvdW5kJykKKyAgICAgICAg
cmV0dXJuIDAKKworICAgIGRlZiBwcmludF9yZXN1bHRzKHNlbGYpOgorICAgICAgICByZXN1bHRz
ID0ge30KKyAgICAgICAgcGFzc2VkX2NvdW50ID0gMAorICAgICAgICBmYWlsdXJlc19jb3VudCA9
IDAKKyAgICAgICAgZm9yIHJlc3VsdCBpbiBzZWxmLl9ydW5uZXIucmVzdWx0cygpOgorICAgICAg
ICAgICAgaWYgcmVzdWx0LnN0YXR1cyA9PSAnUEFTUyc6CisgICAgICAgICAgICAgICAgcGFzc2Vk
X2NvdW50ICs9IDEKKyAgICAgICAgICAgIGVsaWYgcmVzdWx0LnN0YXR1cyA9PSAnRkFJTCc6Cisg
ICAgICAgICAgICAgICAgcmVzdWx0cy5zZXRkZWZhdWx0KHJlc3VsdC5zdGF0dXMsIFtdKS5hcHBl
bmQocmVzdWx0LnRlc3QpCisgICAgICAgICAgICAgICAgZmFpbHVyZXNfY291bnQgKz0gMQorCisg
ICAgICAgIF9sb2cuaW5mbygnJykKKworICAgICAgICBpZiBub3QgcmVzdWx0czoKKyAgICAgICAg
ICAgIF9sb2cuaW5mbygnQWxsIHRlc3RzIHJ1biBhcyBleHBlY3RlZCcpCisgICAgICAgICAgICBy
ZXR1cm4KKworICAgICAgICBfbG9nLmluZm8oJyVkIHRlc3RzIHJhbiBhcyBleHBlY3RlZCwgJWQg
ZGlkblwndFxuJyAlIChwYXNzZWRfY291bnQsIGZhaWx1cmVzX2NvdW50KSkKKworICAgICAgICBp
ZiAnRkFJTCcgaW4gcmVzdWx0czoKKyAgICAgICAgICAgIGZhaWxlZCA9IHJlc3VsdHNbJ0ZBSUwn
XQorICAgICAgICAgICAgX2xvZy5pbmZvKCdVbmV4cGVjdGVkIGZhaWx1cmVzICglZCknICUgbGVu
KGZhaWxlZCkpCisgICAgICAgICAgICBmb3IgdGVzdCBpbiBmYWlsZWQ6CisgICAgICAgICAgICAg
ICAgX2xvZy5pbmZvKCcgICVzJyAlIHRlc3QpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L3dlYmRyaXZlcl90ZXN0cy93ZWJkcml2ZXJfdGVzdF9ydW5uZXJfdzNjLnB5IGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJfdGVzdHMvd2ViZHJpdmVyX3Rlc3RfcnVubmVy
X3czYy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDcyYzMwNGFh
ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZlcl90
ZXN0cy93ZWJkcml2ZXJfdGVzdF9ydW5uZXJfdzNjLnB5CkBAIC0wLDAgKzEsMTAzIEBACisjIENv
cHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
IEFOWQorIyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisjIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisjIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyMg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OCisjIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTCisjIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgc3lzCisK
K2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5maWxlc3lzdGVtIGltcG9ydCBGaWxlU3lzdGVt
Citmcm9tIHdlYmtpdHB5LmNvbW1vbi53ZWJraXRfZmluZGVyIGltcG9ydCBXZWJLaXRGaW5kZXIK
K2Zyb20gd2Via2l0cHkud2ViZHJpdmVyX3Rlc3RzLndlYmRyaXZlcl93M2NfZXhlY3V0b3IgaW1w
b3J0IFdlYkRyaXZlclczQ0V4ZWN1dG9yCitmcm9tIHdlYmtpdHB5LndlYmRyaXZlcl90ZXN0cy53
ZWJkcml2ZXJfZHJpdmVyIGltcG9ydCBjcmVhdGVfZHJpdmVyCitmcm9tIHdlYmtpdHB5LndlYmRy
aXZlcl90ZXN0cy53ZWJkcml2ZXJfdGVzdF9yZXN1bHQgaW1wb3J0IFdlYkRyaXZlclRlc3RSZXN1
bHQKKworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCisKK2NsYXNzIFdlYkRy
aXZlclRlc3RSdW5uZXJXM0Mob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0
LCBkaXNwbGF5X2RyaXZlcik6CisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CisgICAgICAgIHNl
bGYuX2Rpc3BsYXlfZHJpdmVyID0gZGlzcGxheV9kcml2ZXIKKyAgICAgICAgc2VsZi5fZHJpdmVy
ID0gY3JlYXRlX2RyaXZlcihzZWxmLl9wb3J0KQorICAgICAgICBfbG9nLmluZm8oJ1VzaW5nIGRy
aXZlciBhdCAlcycgJSAoc2VsZi5fZHJpdmVyLmJpbmFyeV9wYXRoKCkpKQorICAgICAgICBfbG9n
LmluZm8oJ0Jyb3dzZXI6ICVzJyAlIChzZWxmLl9kcml2ZXIuYnJvd3Nlcl9uYW1lKCkpKQorCisg
ICAgICAgIHNlbGYuX3Jlc3VsdHMgPSBbXQorCisgICAgZGVmIF90ZXN0c19kaXIoc2VsZik6Cisg
ICAgICAgIHJldHVybiBXZWJLaXRGaW5kZXIoc2VsZi5fcG9ydC5ob3N0LmZpbGVzeXN0ZW0pLnBh
dGhfZnJvbV93ZWJraXRfYmFzZSgnV2ViRHJpdmVyVGVzdHMnKQorCisgICAgZGVmIGNvbGxlY3Rf
dGVzdHMoc2VsZiwgdGVzdHM9W10pOgorICAgICAgICByZWxhdGl2ZV90ZXN0c19kaXIgPSBvcy5w
YXRoLmpvaW4oJ2ltcG9ydGVkJywgJ3czYycsICd3ZWJkcml2ZXInLCAndGVzdHMnKQorICAgICAg
ICB3M2NfdGVzdHMgPSBbXQorICAgICAgICBpZiBub3QgdGVzdHM6CisgICAgICAgICAgICB0ZXN0
cyA9IFtyZWxhdGl2ZV90ZXN0c19kaXJdCisgICAgICAgIGZvciB0ZXN0IGluIHRlc3RzOgorICAg
ICAgICAgICAgaWYgbm90IHRlc3Quc3RhcnRzd2l0aChyZWxhdGl2ZV90ZXN0c19kaXIpOgorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICB0ZXN0X3BhdGggPSBvcy5wYXRoLmpv
aW4oc2VsZi5fdGVzdHNfZGlyKCksIHRlc3QpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGly
KHRlc3RfcGF0aCk6CisgICAgICAgICAgICAgICAgdzNjX3Rlc3RzLmV4dGVuZChzZWxmLl9zY2Fu
X2RpcmVjdG9yeSh0ZXN0X3BhdGgpKQorICAgICAgICAgICAgZWxpZiBzZWxmLl9pc190ZXN0KHRl
c3RfcGF0aCk6CisgICAgICAgICAgICAgICAgdzNjX3Rlc3RzLmFwcGVuZCh0ZXN0X3BhdGgpCisg
ICAgICAgIHJldHVybiB3M2NfdGVzdHMKKworICAgIGRlZiBfaXNfdGVzdChzZWxmLCB0ZXN0KToK
KyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKHRlc3QpOgorICAgICAgICAgICAgcmV0dXJu
IEZhbHNlCisgICAgICAgIGlmIG9zLnBhdGguc3BsaXRleHQodGVzdClbMV0gIT0gJy5weSc6Cisg
ICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgaWYgb3MucGF0aC5iYXNlbmFtZSh0ZXN0
KSBpbiBbJ2NvbmZ0ZXN0LnB5JywgJ19faW5pdF9fLnB5J106CisgICAgICAgICAgICByZXR1cm4g
RmFsc2UKKyAgICAgICAgaWYgb3MucGF0aC5kaXJuYW1lKHRlc3QpID09ICdzdXBwb3J0JzoKKyAg
ICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9z
Y2FuX2RpcmVjdG9yeShzZWxmLCBkaXJlY3RvcnkpOgorICAgICAgICB0ZXN0cyA9IFtdCisgICAg
ICAgIGZvciBwYXRoIGluIHNlbGYuX3BvcnQuaG9zdC5maWxlc3lzdGVtLmZpbGVzX3VuZGVyKGRp
cmVjdG9yeSk6CisgICAgICAgICAgICBpZiBzZWxmLl9pc190ZXN0KHBhdGgpOgorICAgICAgICAg
ICAgICAgIHRlc3RzLmFwcGVuZChwYXRoKQorICAgICAgICByZXR1cm4gdGVzdHMKKworICAgIGRl
ZiBydW4oc2VsZiwgdGVzdHM9W10pOgorICAgICAgICBleGVjdXRvciA9IFdlYkRyaXZlclczQ0V4
ZWN1dG9yKHNlbGYuX2RyaXZlciwgc2VsZi5fZGlzcGxheV9kcml2ZXIpCisgICAgICAgIGV4ZWN1
dG9yLnNldHVwKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIHRlc3QgaW4gdGVzdHM6
CisgICAgICAgICAgICAgICAgdGVzdF9uYW1lID0gb3MucGF0aC5yZWxwYXRoKHRlc3QsIHNlbGYu
X3Rlc3RzX2RpcigpKQorICAgICAgICAgICAgICAgIGhhcm5lc3NfcmVzdWx0LCB0ZXN0X3Jlc3Vs
dHMgPSBleGVjdXRvci5ydW4odGVzdCkKKyAgICAgICAgICAgICAgICBpZiBoYXJuZXNzX3Jlc3Vs
dFswXSAhPSAnT0snOgorICAgICAgICAgICAgICAgICAgICBfbG9nLmVycm9yKCJGYWlsZWQgdG8g
cnVuIHRlc3QgJXM6ICVzIiAlICh0ZXN0X25hbWUsIGhhcm5lc3NfcmVzdWx0WzFdKSkKKyAgICAg
ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9hZGRfcmVzdWx0cyhv
cy5wYXRoLmRpcm5hbWUodGVzdF9uYW1lKSwgdGVzdF9yZXN1bHRzKQorICAgICAgICBmaW5hbGx5
OgorICAgICAgICAgICAgZXhlY3V0b3IudGVhcmRvd24oKQorCisgICAgICAgIHJldHVybiBsZW4o
c2VsZi5fcmVzdWx0cykKKworICAgIGRlZiBfYWRkX3Jlc3VsdHMoc2VsZiwgdGVzdF9wcmVmaXgs
IHJlc3VsdHMpOgorICAgICAgICBzZWxmLl9yZXN1bHRzLmV4dGVuZChbV2ViRHJpdmVyVGVzdFJl
c3VsdCh0ZXN0X3ByZWZpeCwgKnJlc3VsdCkgZm9yIHJlc3VsdCBpbiByZXN1bHRzXSkKKworICAg
IGRlZiByZXN1bHRzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcmVzdWx0cwpkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJfdGVzdHMvd2ViZHJpdmVyX3cz
Y19leGVjdXRvci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvd2ViZHJpdmVyX3Rlc3RzL3dl
YmRyaXZlcl93M2NfZXhlY3V0b3IucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLmRlNDc2ZDAyZGNhCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS93ZWJkcml2ZXJfdGVzdHMvd2ViZHJpdmVyX3czY19leGVjdXRvci5weQpAQCAtMCwwICsx
LDEzOCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4KKyMKKyMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisj
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorIyBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworIyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisjIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorIyBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUworIyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcwor
aW1wb3J0IHN5cworCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZmlsZXN5c3RlbSBpbXBv
cnQgRmlsZVN5c3RlbQorZnJvbSB3ZWJraXRweS5jb21tb24ud2Via2l0X2ZpbmRlciBpbXBvcnQg
V2ViS2l0RmluZGVyCitpbXBvcnQgd2Via2l0cHkudGhpcmRwYXJ0eS5hdXRvaW5zdGFsbGVkLm1v
emxvZworaW1wb3J0IHdlYmtpdHB5LnRoaXJkcGFydHkuYXV0b2luc3RhbGxlZC5tb3pwcm9jZXNz
Citmcm9tIG1vemxvZyBpbXBvcnQgc3RydWN0dXJlZGxvZworCit3M2NfdG9vbHNfZGlyID0gV2Vi
S2l0RmluZGVyKEZpbGVTeXN0ZW0oKSkucGF0aF9mcm9tX3dlYmtpdF9iYXNlKCdXZWJEcml2ZXJU
ZXN0cycsICdpbXBvcnRlZCcsICd3M2MnLCAndG9vbHMnKQorCisKK2RlZiBfZW5zdXJlX2RpcmVj
dG9yeV9pbl9wYXRoKGRpcmVjdG9yeSk6CisgICAgaWYgbm90IGRpcmVjdG9yeSBpbiBzeXMucGF0
aDoKKyAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIGRpcmVjdG9yeSkKK19lbnN1cmVfZGlyZWN0
b3J5X2luX3BhdGgob3MucGF0aC5qb2luKHczY190b29sc19kaXIsICdweXRlc3QnKSkKK19lbnN1
cmVfZGlyZWN0b3J5X2luX3BhdGgob3MucGF0aC5qb2luKHczY190b29sc19kaXIsICd3ZWJkcml2
ZXInKSkKK19lbnN1cmVfZGlyZWN0b3J5X2luX3BhdGgob3MucGF0aC5qb2luKHczY190b29sc19k
aXIsICd3cHRydW5uZXInKSkKK19lbnN1cmVfZGlyZWN0b3J5X2luX3BhdGgob3MucGF0aC5qb2lu
KHczY190b29sc19kaXIsICJ3ZWJkcml2ZXIiKSkKKworZnJvbSB3cHRydW5uZXIuZXhlY3V0b3Jz
LmJhc2UgaW1wb3J0IFdkc3BlY0V4ZWN1dG9yLCBXZWJEcml2ZXJQcm90b2NvbAorZnJvbSB3cHRy
dW5uZXIud2ViZHJpdmVyX3NlcnZlciBpbXBvcnQgV2ViRHJpdmVyU2VydmVyCisKK19sb2cgPSBs
b2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKKworCitjbGFzcyBNZXNzYWdlTG9nZ2VyKG9iamVj
dCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWVzc2FnZV9mdW5jKToKKyAgICAgICAgc2Vs
Zi5uYW1lID0gJ1dlYktpdCBXZWJEcml2ZXIgV1BUIGxvZ2dlcicKKyAgICAgICAgc2VsZi5zZW5k
X21lc3NhZ2UgPSBtZXNzYWdlX2Z1bmMKKworICAgIGRlZiBfbG9nX2RhdGEoc2VsZiwgYWN0aW9u
LCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYuc2VuZF9tZXNzYWdlKCdsb2cnLCBhY3Rpb24sIGt3
YXJncykKKworICAgIGRlZiBwcm9jZXNzX291dHB1dChzZWxmLCBwcm9jZXNzLCBkYXRhLCBjb21t
YW5kKToKKyAgICAgICAgc2VsZi5fbG9nX2RhdGEoJ3Byb2Nlc3Nfb3V0cHV0JywgcHJvY2Vzcz1w
cm9jZXNzLCBkYXRhPWRhdGEsIGNvbW1hbmQ9Y29tbWFuZCkKKworCitjbGFzcyBUZXN0UnVubmVy
KG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYubG9nZ2Vy
ID0gTWVzc2FnZUxvZ2dlcihzZWxmLnNlbmRfbWVzc2FnZSkKKyAgICAgICAgc3RydWN0dXJlZGxv
Zy5zZXRfZGVmYXVsdF9sb2dnZXIoc2VsZi5sb2dnZXIpCisKKyAgICBkZWYgc2VuZF9tZXNzYWdl
KHNlbGYsIGNvbW1hbmQsICphcmdzKToKKyAgICAgICAgaWYgY29tbWFuZCA9PSAnbG9nJzoKKyAg
ICAgICAgICAgIHNlbGYuX2xvZygqYXJncykKKworICAgIGRlZiBfbG9nKHNlbGYsIGxldmVsLCBk
ZXRhaWxzKToKKyAgICAgICAgaWYgbGV2ZWwgPT0gJ3Byb2Nlc3Nfb3V0cHV0JzoKKyAgICAgICAg
ICAgIHNlbGYuX3Byb2Nlc3Nfb3V0cHV0KGRldGFpbHNbJ3Byb2Nlc3MnXSwgZGV0YWlsc1snY29t
bWFuZCddLCBkZXRhaWxzWydkYXRhJ10pCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBp
ZiBub3QgJ21lc3NhZ2UnIGluIGRldGFpbHM6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAg
bWVzc2FnZSA9IGRldGFpbHNbJ21lc3NhZ2UnXQorICAgICAgICBpZiBsZXZlbCA9PSAnaW5mbyc6
CisgICAgICAgICAgICBfbG9nLmluZm8obWVzc2FnZSkKKyAgICAgICAgZWxpZiBsZXZlbCA9PSAn
ZGVidWcnOgorICAgICAgICAgICAgX2xvZy5kZWJ1ZyhtZXNzYWdlKQorICAgICAgICBlbGlmIGxl
dmVsID09ICdlcnJvcic6CisgICAgICAgICAgICBfbG9nLmVycm9yKG1lc3NhZ2UpCisgICAgICAg
IGVsaWYgbGV2ZWwgPT0gJ2NyaXRpY2lhbCc6CisgICAgICAgICAgICBfbG9nLmNyaXRpY2FsKG1l
c3NhZ2UpCisgICAgICAgIGVsaWYgbGV2ZWwgPT0gJ3dhcm5pbmcnOgorICAgICAgICAgICAgX2xv
Zy53YXJuaW5nKG1lc3NhZ2UpCisKKyAgICBkZWYgX3Byb2Nlc3Nfb3V0cHV0KHNlbGYsIHBpZCwg
Y29tbWFuZCwgZGF0YSk6CisgICAgICAgIF9sb2cuZGVidWcoJyglczolZCk6ICVzJyAlIChvcy5w
YXRoLmJhc2VuYW1lKGNvbW1hbmQpLnNwbGl0KClbMF0sIHBpZCwgZGF0YSkpCisKKworZGVmIF9s
b2dfZnVuYyhsZXZlbF9uYW1lKToKKyAgICBkZWYgbG9nKHNlbGYsIG1lc3NhZ2UpOgorICAgICAg
ICBzZWxmLl9sb2dfZGF0YShsZXZlbF9uYW1lLmxvd2VyKCksIG1lc3NhZ2U9bWVzc2FnZSkKKyAg
ICBsb2cuX19uYW1lX18gPSBzdHIobGV2ZWxfbmFtZSkubG93ZXIoKQorICAgIHJldHVybiBsb2cK
KworIyBDcmVhdGUgYWxsIHRoZSBtZXRob2RzIG9uIFN0cnVjdHVyZWRMb2cgZm9yIGRlYnVnIGxl
dmVscy4KK2ZvciBsZXZlbF9uYW1lIGluIHN0cnVjdHVyZWRsb2cubG9nX2xldmVsczoKKyAgICBz
ZXRhdHRyKE1lc3NhZ2VMb2dnZXIsIGxldmVsX25hbWUubG93ZXIoKSwgX2xvZ19mdW5jKGxldmVs
X25hbWUpKQorCisKK2NsYXNzIFdlYktpdERyaXZlclNlcnZlcihXZWJEcml2ZXJTZXJ2ZXIpOgor
ICAgIGRlZmF1bHRfYmFzZV9wYXRoID0gJy8nCisgICAgdGVzdF9lbnYgPSBOb25lCisKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgbG9nZ2VyLCBiaW5hcnk9Tm9uZSwgcG9ydD1Ob25lLCBiYXNlX3Bh
dGg9JycsIGFyZ3M9Tm9uZSk6CisgICAgICAgIFdlYkRyaXZlclNlcnZlci5fX2luaXRfXyhzZWxm
LCBsb2dnZXIsIGJpbmFyeSwgcG9ydD1wb3J0LCBiYXNlX3BhdGg9YmFzZV9wYXRoLCBhcmdzPWFy
Z3MsIGVudj1zZWxmLnRlc3RfZW52KQorCisgICAgZGVmIG1ha2VfY29tbWFuZChzZWxmKToKKyAg
ICAgICAgcmV0dXJuIFtzZWxmLmJpbmFyeSwgJy0tcG9ydD0lcycgJSBzdHIoc2VsZi5wb3J0KV0g
KyBzZWxmLl9hcmdzCisKKworY2xhc3MgV2ViS2l0RHJpdmVyUHJvdG9jb2woV2ViRHJpdmVyUHJv
dG9jb2wpOgorICAgIHNlcnZlcl9jbHMgPSBXZWJLaXREcml2ZXJTZXJ2ZXIKKworCitjbGFzcyBX
ZWJEcml2ZXJXM0NFeGVjdXRvcihXZHNwZWNFeGVjdXRvcik6CisgICAgcHJvdG9jb2xfY2xzID0g
V2ViS2l0RHJpdmVyUHJvdG9jb2wKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkcml2ZXIsIGRp
c3BsYXlfZHJpdmVyKToKKyAgICAgICAgV2ViS2l0RHJpdmVyU2VydmVyLnRlc3RfZW52ID0gZGlz
cGxheV9kcml2ZXIuX3NldHVwX2Vudmlyb25fZm9yX3Rlc3QoKQorICAgICAgICBzZXJ2ZXJfY29u
ZmlnID0geydob3N0JzogJzEyNy4wLjAuMScsICdwb3J0cyc6IHsnaHR0cCc6IFsnNDQ0NCddfX0K
KyAgICAgICAgV2RzcGVjRXhlY3V0b3IuX19pbml0X18oc2VsZiwgZHJpdmVyLmJyb3dzZXJfbmFt
ZSgpLCBzZXJ2ZXJfY29uZmlnLCBkcml2ZXIuYmluYXJ5X3BhdGgoKSwgTm9uZSwgY2FwYWJpbGl0
aWVzPWRyaXZlci5jYXBhYmlsaXRpZXMoKSkKKworICAgIGRlZiBzZXR1cChzZWxmKToKKyAgICAg
ICAgc2VsZi5ydW5uZXIgPSBUZXN0UnVubmVyKCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5zZXR1
cChzZWxmLnJ1bm5lcikKKworICAgIGRlZiB0ZWFyZG93bihzZWxmKToKKyAgICAgICAgc2VsZi5w
cm90b2NvbC50ZWFyZG93bigpCisKKyAgICBkZWYgcnVuKHNlbGYsIHBhdGgpOgorICAgICAgICBy
ZXR1cm4gc2VsZi5kb193ZHNwZWMoc2VsZi5wcm90b2NvbC5zZXNzaW9uX2NvbmZpZywgcGF0aCwg
MjUpCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9DaGFuZ2VMb2cgYi9XZWJEcml2ZXJUZXN0
cy9DaGFuZ2VMb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjRiYTUw
NzYxOGYzCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvQ2hhbmdlTG9nCkBAIC0w
LDAgKzEsMTQgQEAKKzIwMTctMDktMjEgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBp
Z2FsaWEuY29tPgorCisgICAgICAgIFdlYkRyaXZlcjogQWRkIHN1cHBvcnQgdG8gaW1wb3J0IGFu
ZCBydW4gVzNDIHRlc3RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzczMDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGQganNvbiBmaWxlIHVzZWQgYnkgdGhlIGltcG9ydGVyIGFuZCB0aGUgcmVzdWx0
IG9mIHJ1bm5pbmcgdGhlIGltcG9ydGVyLgorCisgICAgICAgICogaW1wb3J0ZWQvdzNjL2ltcG9y
dGVyLmpzb246IEFkZGVkLgorICAgICAgICAqIGltcG9ydGVkL3czYy90b29scy9weXRlc3QvOiBB
ZGRlZC4KKyAgICAgICAgKiBpbXBvcnRlZC93M2MvdG9vbHMvd2ViZHJpdmVyLzogQWRkZWQuCisg
ICAgICAgICogaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci86IEFkZGVkLgorICAgICAgICAq
IGltcG9ydGVkL3czYy93ZWJkcml2ZXIvOiBBZGRlZC4KZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRl
c3RzL2ltcG9ydGVkL3czYy9pbXBvcnRlci5qc29uIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQv
dzNjL2ltcG9ydGVyLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LmVkODJkNWZkZWMzCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQv
dzNjL2ltcG9ydGVyLmpzb24KQEAgLTAsMCArMSwxNSBAQAoreworICAgICJyZXBvc2l0b3J5Ijog
Imh0dHBzOi8vZ2l0aHViLmNvbS93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzLmdpdCIsCisgICAgInJl
dmlzaW9uIjogIjUzYjcxNzk4NDA4MGY5NzA4MTc5MjQ3ZjA2ZGYzYzQ3YzNiNjIxYjYiLAorICAg
ICJwYXRoc190b19pbXBvcnQiOiBbCisgICAgICAgICJ0b29scy9weXRlc3QiLAorICAgICAgICAi
dG9vbHMvd2ViZHJpdmVyIiwKKyAgICAgICAgInRvb2xzL3dwdHJ1bm5lciIsCisgICAgICAgICJ3
ZWJkcml2ZXIiCisgICAgXSwKKyAgICAicGF0aHNfdG9fc2tpcCI6IFsKKyAgICAgICAgInRvb2xz
L3B5dGVzdC9kb2MiLAorICAgICAgICAidG9vbHMvcHl0ZXN0L3Rlc3RpbmciLAorICAgICAgICAi
dG9vbHMvd3B0cnVubmVyL3Rlc3QiCisgICAgXQorfQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVz
dHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC8uY292ZXJhZ2VyYyBiL1dlYkRyaXZlclRlc3Rz
L2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvLmNvdmVyYWdlcmMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAuLjI3ZGI2NGUwOWMxCi0tLSAvZGV2L251bGwKKysrIGIvV2Vi
RHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC8uY292ZXJhZ2VyYwpAQCAtMCww
ICsxLDcgQEAKK1tydW5dCitvbWl0ID0gCisgICAgIyBzdGFuZGxvbmV0ZW1wbGF0ZSBpcyByZWFk
IGR5bmFtaWNhbGx5IGFuZCB0ZXN0ZWQgYnkgdGVzdF9nZW5zY3JpcHQKKyAgICAqc3RhbmRhbG9u
ZXRlbXBsYXRlLnB5CisgICAgIyBvbGRpbnRlcnByZXQgY291bGQgYmUgcmVtb3ZlZCwgYXMgaXQg
aXMgbm8gbG9uZ2VyIHVzZWQgaW4gcHkyNisKKyAgICAqb2xkaW50ZXJwcmV0LnB5CisgICAgdmVu
ZG9yZWRfcGFja2FnZXMKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90
b29scy9weXRlc3QvLmdpdGF0dHJpYnV0ZXMgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mv
dG9vbHMvcHl0ZXN0Ly5naXRhdHRyaWJ1dGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi4yNDJkM2RhMGQ3NAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3Rz
L2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvLmdpdGF0dHJpYnV0ZXMKQEAgLTAsMCArMSBAQAor
Q0hBTkdFTE9HICAgIG1lcmdlPXVuaW9uCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBv
cnRlZC93M2MvdG9vbHMvcHl0ZXN0Ly5naXRodWIvSVNTVUVfVEVNUExBVEUubWQgYi9XZWJEcml2
ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0Ly5naXRodWIvSVNTVUVfVEVNUExBVEUu
bWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmJjNjJlOGEzZjdkCi0t
LSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVz
dC8uZ2l0aHViL0lTU1VFX1RFTVBMQVRFLm1kCkBAIC0wLDAgKzEsOCBAQAorVGhhbmtzIGZvciBz
dWJtaXR0aW5nIGFuIGlzc3VlIQorCitIZXJlJ3MgYSBxdWljayBjaGVja2xpc3QgaW4gd2hhdCB0
byBpbmNsdWRlOgorCistIFsgXSBJbmNsdWRlIGEgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhl
IGJ1ZyBvciBzdWdnZXN0aW9uCistIFsgXSBgcGlwIGxpc3RgIG9mIHRoZSB2aXJ0dWFsIGVudmly
b25tZW50IHlvdSBhcmUgdXNpbmcKKy0gWyBdIHB5LnRlc3QgYW5kIG9wZXJhdGluZyBzeXN0ZW0g
dmVyc2lvbnMKKy0gWyBdIE1pbmltYWwgZXhhbXBsZSBpZiBwb3NzaWJsZQpkaWZmIC0tZ2l0IGEv
V2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC8uZ2l0aHViL1BVTExfUkVR
VUVTVF9URU1QTEFURS5tZCBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRl
c3QvLmdpdGh1Yi9QVUxMX1JFUVVFU1RfVEVNUExBVEUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAuLmQwOWVkY2U0M2QzCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJp
dmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC8uZ2l0aHViL1BVTExfUkVRVUVTVF9U
RU1QTEFURS5tZApAQCAtMCwwICsxLDggQEAKK1RoYW5rcyBmb3Igc3VibWl0dGluZyBhIFBSLCB5
b3VyIGNvbnRyaWJ1dGlvbiBpcyByZWFsbHkgYXBwcmVjaWF0ZWQhCisKK0hlcmUncyBhIHF1aWNr
IGNoZWNrbGlzdCB0aGF0IHNob3VsZCBiZSBwcmVzZW50IGluIFBSczoKKworLSBbIF0gVGFyZ2V0
OiBmb3IgYnVnIG9yIGRvYyBmaXhlcywgdGFyZ2V0IGBtYXN0ZXJgOyBmb3IgbmV3IGZlYXR1cmVz
LCB0YXJnZXQgYGZlYXR1cmVzYAorLSBbIF0gTWFrZSBzdXJlIHRvIGluY2x1ZGUgb25lIG9yIG1v
cmUgdGVzdHMgZm9yIHlvdXIgY2hhbmdlCistIFsgXSBBZGQgeW91cnNlbGYgdG8gYEFVVEhPUlNg
CistIFsgXSBBZGQgYSBuZXcgZW50cnkgdG8gdGhlIGBDSEFOR0VMT0dgIChjaG9vc2UgYW55IG9w
ZW4gcG9zaXRpb24gdG8gYXZvaWQgbWVyZ2UgY29uZmxpY3RzIHdpdGggb3RoZXIgUFJzKSAKZGlm
ZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvLmdpdGln
bm9yZSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvLmdpdGlnbm9y
ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZTQzNTViODU5Y2MKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0
Ly5naXRpZ25vcmUKQEAgLTAsMCArMSwzNCBAQAorIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBi
eSBgaGdpbXBvcnRzdm5gCisuc3ZuCisuaGdzdm4KKworIyBJZ25vcmUgbG9jYWwgdmlydHVhbGVu
dnMKK2xpYi8KK2Jpbi8KK2luY2x1ZGUvCisuUHl0aG9uLworCisjIFRoZXNlIGxpbmVzIGFyZSBz
dWdnZXN0ZWQgYWNjb3JkaW5nIHRvIHRoZSBzdm46aWdub3JlIHByb3BlcnR5CisjIEZlZWwgZnJl
ZSB0byBlbmFibGUgdGhlbSBieSB1bmNvbW1lbnRpbmcgdGhlbQorKi5weWMKKyoucHlvCisqLnN3
cAorKi5jbGFzcworKi5vcmlnCisqfgorCisuZWdncy8KKworZG9jLyovX2J1aWxkCitidWlsZC8K
K2Rpc3QvCisqLmVnZy1pbmZvCitpc3N1ZS8KK2Vudi8KKy5lbnYvCiszcmRwYXJ0eS8KKy50b3gK
Ky5jYWNoZQorLmNvdmVyYWdlCisucm9wZXByb2plY3QKKy5pZGVhCmRpZmYgLS1naXQgYS9XZWJE
cml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0Ly50cmF2aXMueW1sIGIvV2ViRHJp
dmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC8udHJhdmlzLnltbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uM2E4ZjM2ZTk1ZjgKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0Ly50cmF2aXMueW1s
CkBAIC0wLDAgKzEsNDAgQEAKK3N1ZG86IGZhbHNlCitsYW5ndWFnZTogcHl0aG9uCitweXRob246
CisgICAgLSAnMy41JworIyBjb21tYW5kIHRvIGluc3RhbGwgZGVwZW5kZW5jaWVzCitpbnN0YWxs
OiAicGlwIGluc3RhbGwgLVUgdG94IgorIyAjIGNvbW1hbmQgdG8gcnVuIHRlc3RzCitlbnY6Cisg
IG1hdHJpeDoKKyAgICAjIGNvdmVyYWxscyBpcyBub3QgbGlzdGVkIGluIHRveCdzIGVudmxpc3Qs
IGJ1dCBzaG91bGQgcnVuIGluIHRyYXZpcworICAgIC0gVEVTVEVOVj1jb3ZlcmFsbHMKKyAgICAj
IG5vdGU6IHBsZWFzZSB1c2UgInRveCAtLWxpc3RlbnZzIiB0byBwb3B1bGF0ZSB0aGUgYnVpbGQg
bWF0cml4IGJlbG93CisgICAgLSBURVNURU5WPWxpbnRpbmcKKyAgICAtIFRFU1RFTlY9cHkyNgor
ICAgIC0gVEVTVEVOVj1weTI3CisgICAgLSBURVNURU5WPXB5MzMKKyAgICAtIFRFU1RFTlY9cHkz
NAorICAgIC0gVEVTVEVOVj1weTM1CisgICAgLSBURVNURU5WPXB5cHkKKyAgICAtIFRFU1RFTlY9
cHkyNy1wZXhwZWN0CisgICAgLSBURVNURU5WPXB5MjcteGRpc3QKKyAgICAtIFRFU1RFTlY9cHky
Ny10cmlhbAorICAgIC0gVEVTVEVOVj1weTM1LXBleHBlY3QKKyAgICAtIFRFU1RFTlY9cHkzNS14
ZGlzdAorICAgIC0gVEVTVEVOVj1weTM1LXRyaWFsCisgICAgLSBURVNURU5WPXB5Mjctbm9ieXRl
CisgICAgLSBURVNURU5WPWRvY3Rlc3RpbmcKKyAgICAtIFRFU1RFTlY9cHkyNy1jeGZyZWV6ZQor
CitzY3JpcHQ6IHRveCAtLXJlY3JlYXRlIC1lICRURVNURU5WCisKK25vdGlmaWNhdGlvbnM6Cisg
IGlyYzoKKyAgICBjaGFubmVsczoKKyAgICAgIC0gImNoYXQuZnJlZW5vZGUubmV0I3B5dGVzdCIK
KyAgICBvbl9zdWNjZXNzOiBjaGFuZ2UKKyAgICBvbl9mYWlsdXJlOiBjaGFuZ2UKKyAgICBza2lw
X2pvaW46IHRydWUKKyAgZW1haWw6CisgICAgLSBweXRlc3QtY29tbWl0QHB5dGhvbi5vcmcKZGlm
ZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvQVVUSE9S
UyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvQVVUSE9SUwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZGZjMGE1NDJlYzUKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L0FVVEhP
UlMKQEAgLTAsMCArMSw4NyBAQAorSG9sZ2VyIEtyZWtlbCwgaG9sZ2VyIGF0IG1lcmxpbnV4IGV1
CittZXJsaW51eCBHbWJILCBHZXJtYW55LCBvZmZpY2UgYXQgbWVybGludXggZXUKKworQ29udHJp
YnV0b3JzIGluY2x1ZGU6OgorCitBYmhpamVldCBLYXN1cmRlCitBbmF0b2x5IEJ1YmVua29mZgor
QW5kcmVhcyBaZWlkbGVyCitBbmR5IEZyZWVsYW5kCitBbnRob24gdmFuIGRlciBOZXV0CitBcm1p
biBSaWdvCitBcm9uIEN1cnpvbgorQXZpdiBQYWxpdm9kYQorQmVuamFtaW4gUGV0ZXJzb24KK0Jv
YiBJcHBvbGl0bworQnJpYW4gRG9yc2V5CitCcmlhbiBPa2tlbgorQnJpYW5uYSBMYXVnaGVyCitC
cnVubyBPbGl2ZWlyYQorQ2FybCBGcmllZHJpY2ggQm9segorQ2hhcmxlcyBDbG91ZAorQ2hyaXMg
TGFtYgorQ2hyaXN0aWFuIFRoZXVuZXJ0CitDaHJpc3RpYW4gVGlzbWVyCitDaHJpc3RvcGhlciBH
aWxsaW5nCitEYW5pZWwgR3JhbmEKK0RhbmllbCBIYWhsZXIKK0RhbmllbCBOdXJpCitEYXZlIEh1
bnQKK0RhdmlkIE1vaHIKK0RhdmlkIFZpZXJyYQorRWRpc29uIEd1c3Rhdm8gTXVlbnoKK0VkdWFy
ZG8gU2NoZXR0aW5vCitFbmRyZSBHYWxhY3ppCitFbGl6YXZldGEgU2hhc2hrb3ZhCitFcmljIEh1
bnNiZXJnZXIKK0VyaWMgU2llZ2VybWFuCitFcmlrIE0uIEJyYXkKK0Zsb3JpYW4gQnJ1aGluCitG
bG9yaXMgQnJ1eW5vb2doZQorR2FicmllbCBSZWlzCitHZW9yZ3kgRHl1bGRpbgorR3JhaGFtIEhv
cmxlcgorR3JpZyBHaGVvcmdoaXUKK0d1aWRvIFdlc2RvcnAKK0hhcmFsZCBBcm1pbiBNYXNzYQor
SWFuIEJpY2tpbmcKK0phYXAgQnJvZWtodWl6ZW4KK0phbiBCYWxzdGVyCitKYW5uZSBWYW5oYWxh
CitKYXNvbiBSLiBDb29tYnMKK0pvc2h1YSBCcm9uc29uCitKdXJrbyBHb3Nwb2RuZXRpxIcKK0th
dGFyenluYSBKYWNoaW0KK0tldmluIENveAorTGVlIEthbWVudHNreQorTHVrYXMgQmVkbmFyCitN
YWNpZWsgRmlqYWxrb3dza2kKK01haG8KK01hcmMgU2NobGFpY2gKK01hcmsgQWJyYW1vd2l0egor
TWFya3VzIFVudGVyd2FkaXR6ZXIKK01hcnRpam4gRmFhc3NlbgorTWF0dCBCYWNobWFubgorTWlj
aGFlbCBBcXVpbGluYQorTWljaGFlbCBCaXJ0d2VsbAorTWljaGFlbCBEcm9ldHRib29tCitOaWNv
bGFzIERlbGFieQorUGlldGVyIE11bGRlcgorUGlvdHIgQmFuYXN6a2lld2ljegorUHVueWFzaGxv
a2EgQmlzd2FsCitSYWxmIFNjaG1pdHQKK1JhcGhhZWwgUGllcnppbmEKK1Jvbm55IFBmYW5uc2No
bWlkdAorUm9zcyBMYXdsZXkKK1J5YW4gV29vZGVuCitTYW11ZWxlIFBlZHJvbmkKK1RvbSBWaW5l
cgorVHJldm9yIEJla29sYXkKK1dvdXRlciB2YW4gQWNrb295CitEYXZpZCBEw61hei1CYXJxdWVy
bworRXJpYyBIdW5zYmVyZ2VyCitTaW1vbiBHb21pemVsagorUnVzc2VsIFdpbmRlcgorQmVuIFdl
YmIKK0FsZXhlaSBLb3psZW5vaworQ2FsIExlZW1pbmcKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRl
c3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvQ0hBTkdFTE9HLnJzdCBiL1dlYkRyaXZlclRl
c3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvQ0hBTkdFTE9HLnJzdApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZjE4ZjY0NmYwMDgKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L0NIQU5HRUxPRy5yc3QK
QEAgLTAsMCArMSwyNTg2IEBACisyLjkuMQorPT09PT0KKworKipCdWcgRml4ZXMqKgorCisqIElt
cHJvdmUgZXJyb3IgbWVzc2FnZSB3aGVuIGEgcGx1Z2luIGZhaWxzIHRvIGxvYWQuCisgIFRoYW5r
cyBgQG5pY29kZGVtdXNgXyBmb3IgdGhlIFBSLgorCisqIEZpeCAoYCMxMTc4IDxodHRwczovL2dp
dGh1Yi5jb20vcHl0ZXN0LWRldi9weXRlc3QvaXNzdWVzLzExNzg+YF8pOgorICBgYHB5dGVzdC5m
YWlsYGAgd2l0aCBub24tYXNjaWkgY2hhcmFjdGVycyByYWlzZXMgYW4gaW50ZXJuYWwgcHl0ZXN0
IGVycm9yLgorICBUaGFua3MgYEBuaWNvZGRlbXVzYF8gZm9yIHRoZSBQUi4KKworKiBGaXggKGAj
NDY5YF8pOiBqdW5pdCBwYXJzZXMgcmVwb3J0Lm5vZGVpZCBpbmNvcnJlY3RseSwgd2hlbiBwYXJh
bXMgSURzCisgIGNvbnRhaW4gYGA6OmBgLiBUaGFua3MgYEB0b212aW5lcmBfIGZvciB0aGUgUFIg
KGAjMTQzMWBfKS4KKworKiBGaXggKGAjNTc4IDxodHRwczovL2dpdGh1Yi5jb20vcHl0ZXN0LWRl
di9weXRlc3QvaXNzdWVzLzU3OD5gXyk6IFN5bnRheEVycm9ycworICBjb250YWluaW5nIG5vbi1h
c2NpaSBsaW5lcyBhdCB0aGUgcG9pbnQgb2YgZmFpbHVyZSBnZW5lcmF0ZWQgYW4gaW50ZXJuYWwK
KyAgcHkudGVzdCBlcnJvci4KKyAgVGhhbmtzIGBAYXNvdHRpbGVgXyBmb3IgdGhlIHJlcG9ydCBh
bmQgYEBuaWNvZGRlbXVzYF8gZm9yIHRoZSBQUi4KKworKiBGaXggKGAjMTQzN2BfKTogV2hlbiBw
YXNzaW5nIGluIGEgYnl0ZXN0cmluZyByZWdleCBwYXR0ZXJuIHRvIHBhcmFtZXRlcml6ZQorICBh
dHRlbXB0IHRvIGRlY29kZSBpdCBhcyB1dGYtOCBpZ25vcmluZyBlcnJvcnMuCisKKyogRml4IChg
IzY0OWBfKTogcGFyYW1ldHJpemVkIHRlc3Qgbm9kZXMgY2Fubm90IGJlIHNwZWNpZmllZCB0byBy
dW4gb24gdGhlIGNvbW1hbmQgbGluZS4KKworCisuLiBfIzE0Mzc6IGh0dHBzOi8vZ2l0aHViLmNv
bS9weXRlc3QtZGV2L3B5dGVzdC9pc3N1ZXMvMTQzNworLi4gXyM0Njk6IGh0dHBzOi8vZ2l0aHVi
LmNvbS9weXRlc3QtZGV2L3B5dGVzdC9pc3N1ZXMvNDY5CisuLiBfIzE0MzE6IGh0dHBzOi8vZ2l0
aHViLmNvbS9weXRlc3QtZGV2L3B5dGVzdC9wdWxsLzE0MzEKKy4uIF8jNjQ5OiBodHRwczovL2dp
dGh1Yi5jb20vcHl0ZXN0LWRldi9weXRlc3QvaXNzdWVzLzY0OQorCisuLiBfQGFzb3R0aWxlOiBo
dHRwczovL2dpdGh1Yi5jb20vYXNvdHRpbGUKKworCisyLjkuMAorPT09PT0KKworKipOZXcgRmVh
dHVyZXMqKgorCisqIE5ldyBgYHB5dGVzdC5tYXJrLnNraXBgYCBtYXJrLCB3aGljaCB1bmNvbmRp
dGlvbmFsbHkgc2tpcHMgbWFya2VkIHRlc3RzLgorICBUaGFua3MgYEBNaWNoYWVsQXF1aWxpbmFg
XyBmb3IgdGhlIGNvbXBsZXRlIFBSIChgIzEwNDBgXykuCisKKyogYGAtLWRvY3Rlc3QtZ2xvYmBg
IG1heSBub3cgYmUgcGFzc2VkIG11bHRpcGxlIHRpbWVzIGluIHRoZSBjb21tYW5kLWxpbmUuCisg
IFRoYW5rcyBgQGphYmBfIGFuZCBgQG5pY29kZGVtdXNgXyBmb3IgdGhlIFBSLgorCisqIE5ldyBg
YC1ycGBgIGFuZCBgYC1yUGBgIHJlcG9ydGluZyBvcHRpb25zIGdpdmUgdGhlIHN1bW1hcnkgYW5k
IGZ1bGwgb3V0cHV0CisgIG9mIHBhc3NpbmcgdGVzdHMsIHJlc3BlY3RpdmVseS4gVGhhbmtzIHRv
IGBAY29kZXdhcnJpb3IwYF8gZm9yIHRoZSBQUi4KKworKiBgYHB5dGVzdC5tYXJrLnhmYWlsYGAg
bm93IGhhcyBhIGBgc3RyaWN0YGAgb3B0aW9uLCB3aGljaCBtYWtlcyBgYFhQQVNTYGAKKyAgdGVz
dHMgdG8gZmFpbCB0aGUgdGVzdCBzdWl0ZSAoZGVmYXVsdGluZyB0byBgYEZhbHNlYGApLiBUaGVy
ZSdzIGFsc28gYQorICBgYHhmYWlsX3N0cmljdGBgIGluaSBvcHRpb24gdGhhdCBjYW4gYmUgdXNl
ZCB0byBjb25maWd1cmUgaXQgcHJvamVjdC13aXNlLgorICBUaGFua3MgYEByYWJiYml0YF8gZm9y
IHRoZSByZXF1ZXN0IGFuZCBgQG5pY29kZGVtdXNgXyBmb3IgdGhlIFBSIChgIzEzNTVgXykuCisK
KyogYGBQYXJzZXIuYWRkaW5pYGAgbm93IHN1cHBvcnRzIG9wdGlvbnMgb2YgdHlwZSBgYGJvb2xg
YC4gCisgIFRoYW5rcyBgQG5pY29kZGVtdXNgXyBmb3IgdGhlIFBSLgorCisqIE5ldyBgYEFMTE9X
X0JZVEVTYGAgZG9jdGVzdCBvcHRpb24uIFRoaXMgc3RyaXBzIGBgYmBgIHByZWZpeGVzIGZyb20g
Ynl0ZSBzdHJpbmdzCisgIGluIGRvY3Rlc3Qgb3V0cHV0IChzaW1pbGFyIHRvIGBgQUxMT1dfVU5J
Q09ERWBgKS4KKyAgVGhhbmtzIGBAamFyYWNvYF8gZm9yIHRoZSByZXF1ZXN0IGFuZCBgQG5pY29k
ZGVtdXNgXyBmb3IgdGhlIFBSIChgIzEyODdgXykuCisKKyogR2l2ZSBhIGhpbnQgb24gYGBLZXli
b2FyZEludGVycnVwdGBgIHRvIHVzZSB0aGUgYGAtLWZ1bGx0cmFjZWBgIG9wdGlvbiB0byBzaG93
IHRoZSBlcnJvcnMuCisgIEZpeGVzIGAjMTM2NmBfLgorICBUaGFua3MgdG8gYEBocGs0MmBfIGZv
ciB0aGUgcmVwb3J0IGFuZCBgQFJvbm55UGZhbm5zY2htaWR0YF8gZm9yIHRoZSBQUi4KKworKiBD
YXRjaCBgYEluZGV4RXJyb3JgYCBleGNlcHRpb25zIHdoZW4gZ2V0dGluZyBleGNlcHRpb24gc291
cmNlIGxvY2F0aW9uLiAKKyAgRml4ZXMgYSBweXRlc3QgaW50ZXJuYWwgZXJyb3IgZm9yIGR5bmFt
aWNhbGx5IGdlbmVyYXRlZCBjb2RlIChmaXh0dXJlcyBhbmQgdGVzdHMpCisgIHdoZXJlIHNvdXJj
ZSBsaW5lcyBhcmUgZmFrZSBieSBpbnRlbnRpb24uCisKKyoqQ2hhbmdlcyoqCisKKyogKipJbXBv
cnRhbnQqKjogYHB5LmNvZGUgPGh0dHA6Ly9weWxpYi5yZWFkdGhlZG9jcy5vcmcvZW4vbGF0ZXN0
L2NvZGUuaHRtbD5gXyBoYXMgYmVlbgorICBtZXJnZWQgaW50byB0aGUgYGBweXRlc3RgYCByZXBv
c2l0b3J5IGFzIGBgcHl0ZXN0Ll9jb2RlYGAuIFRoaXMgZGVjaXNpb24gCisgIHdhcyBtYWRlIGJl
Y2F1c2UgYGBweS5jb2RlYGAgaGFkIHZlcnkgZmV3IHVzZXMgb3V0c2lkZSBgYHB5dGVzdGBgIGFu
ZCB0aGUgCisgIGZhY3QgdGhhdCBpdCB3YXMgaW4gYSBkaWZmZXJlbnQgcmVwb3NpdG9yeSBtYWRl
IGl0IGRpZmZpY3VsdCB0byBmaXggYnVncyBvbiAKKyAgaXRzIGNvZGUgaW4gYSB0aW1lbHkgbWFu
bmVyLiBUaGUgdGVhbSBob3BlcyB3aXRoIHRoaXMgdG8gYmUgYWJsZSB0byBiZXR0ZXIKKyAgcmVm
YWN0b3Igb3V0IGFuZCBpbXByb3ZlIHRoYXQgY29kZS4KKyAgVGhpcyBjaGFuZ2Ugc2hvdWxkbid0
IGFmZmVjdCB1c2VycywgYnV0IGl0IGlzIHVzZWZ1bCB0byBsZXQgdXNlcnMgYXdhcmUKKyAgaWYg
dGhleSBlbmNvdW50ZXIgYW55IHN0cmFuZ2UgYmVoYXZpb3IuCisgIAorICBLZWVwIGluIG1pbmQg
dGhhdCB0aGUgY29kZSBmb3IgYGBweXRlc3QuX2NvZGVgYCBpcyAqKnByaXZhdGUqKiBhbmQgCisg
ICoqZXhwZXJpbWVudGFsKiosIHNvIHlvdSBkZWZpbml0ZWx5IHNob3VsZCBub3QgaW1wb3J0IGl0
IGV4cGxpY2l0bHkhCisKKyAgUGxlYXNlIG5vdGUgdGhhdCB0aGUgb3JpZ2luYWwgYGBweS5jb2Rl
YGAgaXMgc3RpbGwgYXZhaWxhYmxlIGluIAorICBgcHlsaWIgPGh0dHA6Ly9weWxpYi5yZWFkdGhl
ZG9jcy5vcmc+YF8uCisKKyogYGBweXRlc3RfZW50ZXJfcGRiYGAgbm93IG9wdGlvbmFsbHkgcmVj
ZWl2ZXMgdGhlIHB5dGVzdCBjb25maWcgb2JqZWN0LgorICBUaGFua3MgYEBuaWNvZGRlbXVzYF8g
Zm9yIHRoZSBQUi4KKworKiBSZW1vdmVkIGNvZGUgYW5kIGRvY3VtZW50YXRpb24gZm9yIFB5dGhv
biAyLjUgb3IgbG93ZXIgdmVyc2lvbnMsCisgIGluY2x1ZGluZyByZW1vdmFsIG9mIHRoZSBvYnNv
bGV0ZSBgYF9weXRlc3QuYXNzZXJ0aW9uLm9sZGludGVycHJldGBgIG1vZHVsZS4KKyAgVGhhbmtz
IGBAbmljb2RkZW11c2BfIGZvciB0aGUgUFIgKGAjMTIyNmBfKS4KKworKiBDb21wYXJpc29ucyBu
b3cgYWx3YXlzIHNob3cgdXAgaW4gZnVsbCB3aGVuIGBgQ0lgYCBvciBgYEJVSUxEX05VTUJFUmBg
IGlzCisgIGZvdW5kIGluIHRoZSBlbnZpcm9ubWVudCwgZXZlbiB3aGVuIGBgLXZ2YGAgaXNuJ3Qg
dXNlZC4KKyAgVGhhbmtzIGBAVGhlLUNvbXBpbGVyYF8gZm9yIHRoZSBQUi4KKworKiBgYC0tbGZg
YCBhbmQgYGAtLWZmYGAgbm93IHN1cHBvcnQgbG9uZyBuYW1lczogYGAtLWxhc3QtZmFpbGVkYGAg
YW5kCisgIGBgLS1mYWlsZWQtZmlyc3RgYCByZXNwZWN0aXZlbHkuCisgIFRoYW5rcyBgQE1pY2hh
ZWxBcXVpbGluYWBfIGZvciB0aGUgUFIuCisKKyogQWRkZWQgZXhwZWN0ZWQgZXhjZXB0aW9ucyB0
byBgYHB5dGVzdC5yYWlzZXNgYCBmYWlsIG1lc3NhZ2UuCisKKyogQ29sbGVjdGlvbiBvbmx5IGRp
c3BsYXlzIHByb2dyZXNzICgiY29sbGVjdGluZyBYIGl0ZW1zIikgd2hlbiBpbiBhIHRlcm1pbmFs
LgorICBUaGlzIGF2b2lkcyBjbHV0dGVyaW5nIHRoZSBvdXRwdXQgd2hlbiB1c2luZyBgYC0tY29s
b3I9eWVzYGAgdG8gb2J0YWluCisgIGNvbG9ycyBpbiBDSSBpbnRlZ3JhdGlvbnMgc3lzdGVtcyAo
YCMxMzk3YF8pLgorCisqKkJ1ZyBGaXhlcyoqCisKKyogVGhlIGBgLXNgYCBhbmQgYGAtY2BgIG9w
dGlvbnMgc2hvdWxkIG5vdyB3b3JrIHVuZGVyIGBgeGRpc3RgYDsKKyAgYGBDb25maWcuZnJvbWRp
Y3RhcmdzYGAgbm93IHJlcHJlc2VudHMgaXRzIGlucHV0IG11Y2ggbW9yZSBmYWl0aGZ1bGx5Lgor
ICBUaGFua3MgdG8gYEBidWt6b3JgXyBmb3IgdGhlIGNvbXBsZXRlIFBSIChgIzY4MGBfKS4KKwor
KiBGaXggKGAjMTI5MGBfKTogc3VwcG9ydCBQeXRob24gMy41J3MgYGBAYGAgb3BlcmF0b3IgaW4g
YXNzZXJ0aW9uIHJld3JpdGluZy4KKyAgVGhhbmtzIGBAU2hpbmtlbmpvZWBfIGZvciByZXBvcnQg
d2l0aCB0ZXN0IGNhc2UgYW5kIGBAdG9tdmluZXJgXyBmb3IgdGhlIFBSLgorCisqIEZpeCBmb3Jt
YXR0aW5nIHV0Zi04IGV4cGxhbmF0aW9uIG1lc3NhZ2VzIChgIzEzNzlgXykuCisgIFRoYW5rcyBg
QGJpZXJuYF8gZm9yIHRoZSBQUi4KKworKiBGaXggYHRyYWNlYmFjayBzdHlsZSBkb2NzYF8gdG8g
ZGVzY3JpYmUgYWxsIG9mIHRoZSBhdmFpbGFibGUgb3B0aW9ucworICAoYXV0by9sb25nL3Nob3J0
L2xpbmUvbmF0aXZlL25vKSwgd2l0aCBgYXV0b2AgYmVpbmcgdGhlIGRlZmF1bHQgc2luY2UgdjIu
Ni4KKyAgVGhhbmtzIGBAaGFja2Vicm90YF8gZm9yIHRoZSBQUi4KKworKiBGaXggKGAjMTQyMmBf
KToganVuaXQgcmVjb3JkX3htbF9wcm9wZXJ0eSBkb2Vzbid0IGFsbG93IG11bHRpcGxlIHJlY29y
ZHMKKyAgd2l0aCBzYW1lIG5hbWUuCisKKy4uIF9gdHJhY2ViYWNrIHN0eWxlIGRvY3NgOiBodHRw
czovL3B5dGVzdC5vcmcvbGF0ZXN0L3VzYWdlLmh0bWwjbW9kaWZ5aW5nLXB5dGhvbi10cmFjZWJh
Y2stcHJpbnRpbmcKKworLi4gXyMxNDIyOiBodHRwczovL2dpdGh1Yi5jb20vcHl0ZXN0LWRldi9w
eXRlc3QvaXNzdWVzLzE0MjIKKy4uIF8jMTM3OTogaHR0cHM6Ly9naXRodWIuY29tL3B5dGVzdC1k
ZXYvcHl0ZXN0L2lzc3Vlcy8xMzc5CisuLiBfIzEzNjY6IGh0dHBzOi8vZ2l0aHViLmNvbS9weXRl
c3QtZGV2L3B5dGVzdC9pc3N1ZXMvMTM2NgorLi4gXyMxMDQwOiBodHRwczovL2dpdGh1Yi5jb20v
cHl0ZXN0LWRldi9weXRlc3QvcHVsbC8xMDQwCisuLiBfIzY4MDogaHR0cHM6Ly9naXRodWIuY29t
L3B5dGVzdC1kZXYvcHl0ZXN0L2lzc3Vlcy82ODAKKy4uIF8jMTI4NzogaHR0cHM6Ly9naXRodWIu
Y29tL3B5dGVzdC1kZXYvcHl0ZXN0L3B1bGwvMTI4NworLi4gXyMxMjI2OiBodHRwczovL2dpdGh1
Yi5jb20vcHl0ZXN0LWRldi9weXRlc3QvcHVsbC8xMjI2CisuLiBfIzEyOTA6IGh0dHBzOi8vZ2l0
aHViLmNvbS9weXRlc3QtZGV2L3B5dGVzdC9wdWxsLzEyOTAKKy4uIF8jMTM1NTogaHR0cHM6Ly9n
aXRodWIuY29tL3B5dGVzdC1kZXYvcHl0ZXN0L3B1bGwvMTM1NQorLi4gXyMxMzk3OiBodHRwczov
L2dpdGh1Yi5jb20vcHl0ZXN0LWRldi9weXRlc3QvaXNzdWVzLzEzOTcKKy4uIF9AYmllcm46IGh0
dHBzOi8vZ2l0aHViLmNvbS9iaWVybgorLi4gX0BNaWNoYWVsQXF1aWxpbmE6IGh0dHBzOi8vZ2l0
aHViLmNvbS9NaWNoYWVsQXF1aWxpbmEKKy4uIF9AYnVrem9yOiBodHRwczovL2dpdGh1Yi5jb20v
YnVrem9yCisuLiBfQGhwazQyOiBodHRwczovL2dpdGh1Yi5jb20vaHBrNDIKKy4uIF9Abmljb2Rk
ZW11czogaHR0cHM6Ly9naXRodWIuY29tL25pY29kZGVtdXMKKy4uIF9AamFiOiBodHRwczovL2dp
dGh1Yi5jb20vamFiCisuLiBfQGNvZGV3YXJyaW9yMDogaHR0cHM6Ly9naXRodWIuY29tL2NvZGV3
YXJyaW9yMAorLi4gX0BqYXJhY286IGh0dHBzOi8vZ2l0aHViLmNvbS9qYXJhY28KKy4uIF9AVGhl
LUNvbXBpbGVyOiBodHRwczovL2dpdGh1Yi5jb20vVGhlLUNvbXBpbGVyCisuLiBfQFNoaW5rZW5q
b2U6IGh0dHBzOi8vZ2l0aHViLmNvbS9TaGlua2Vuam9lCisuLiBfQHRvbXZpbmVyOiBodHRwczov
L2dpdGh1Yi5jb20vdG9tdmluZXIKKy4uIF9AUm9ubnlQZmFubnNjaG1pZHQ6IGh0dHBzOi8vZ2l0
aHViLmNvbS9Sb25ueVBmYW5uc2NobWlkdAorLi4gX0ByYWJiYml0OiBodHRwczovL2dpdGh1Yi5j
b20vcmFiYmJpdAorLi4gX0BoYWNrZWJyb3Q6IGh0dHBzOi8vZ2l0aHViLmNvbS9oYWNrZWJyb3QK
KworMi44LjcKKz09PT09CisKKy0gZml4ICMxMzM4OiB1c2UgcHJlZGljdGFibGUgb2JqZWN0IHJl
c29sdXRpb24gZm9yIG1vbmtleXBhdGNoCisKKzIuOC42Cis9PT09PQorCistIGZpeCAjMTI1OTog
YWxsb3cgZm9yIGRvdWJsZSBub2RlaWRzIGluIGp1bml0eG1sLAorICB0aGlzIHdhcyBhIHJlZ3Jl
c3Npb24gZmFpbGluZyBwbHVnaW5zIGNvbWJpbmF0aW9ucworICBsaWtlIHB5dGVzdC1wZXA4ICsg
cHl0ZXN0LWZsYWtlcworCistIFdvcmthcm91bmQgZm9yIGV4Y2VwdGlvbiB0aGF0IG9jY3VycyBp
biBweXJlYWRsaW5lIHdoZW4gdXNpbmcKKyAgYGAtLXBkYmBgIHdpdGggc3RhbmRhcmQgSS9PIGNh
cHR1cmUgZW5hYmxlZC4KKyAgVGhhbmtzIEVyaWsgTS4gQnJheSBmb3IgdGhlIFBSLgorCistIGZp
eCAjOTAwOiBCZXR0ZXIgZXJyb3IgbWVzc2FnZSBpbiBjYXNlIHRoZSB0YXJnZXQgb2YgYSBgYG1v
bmtleXBhdGNoYGAgY2FsbAorICByYWlzZXMgYW4gYGBJbXBvcnRFcnJvcmBgLgorCistIGZpeCAj
MTI5MjogbW9ua2V5cGF0Y2ggY2FsbHMgKHNldGF0dHIsIHNldGVudiwgZXRjLikgYXJlIG5vdyBP
KDEpLgorICBUaGFua3MgRGF2aWQgUi4gTWFjSXZlciBmb3IgdGhlIHJlcG9ydCBhbmQgQnJ1bm8g
T2xpdmVpcmEgZm9yIHRoZSBQUi4KKworLSBmaXggIzEyMjM6IGNhcHR1cmVkIHN0ZG91dCBhbmQg
c3RkZXJyIGFyZSBub3cgcHJvcGVybHkgZGlzcGxheWVkIGJlZm9yZSAKKyAgZW50ZXJpbmcgcGRi
IHdoZW4gYGAtLXBkYmBgIGlzIHVzZWQgaW5zdGVhZCBvZiBiZWluZyB0aHJvd24gYXdheS4KKyAg
VGhhbmtzIENhbCBMZWVtaW5nIGZvciB0aGUgUFIuCisKKy0gZml4ICMxMzA1OiBweXRlc3Qgd2Fy
bmluZ3MgZW1pdHRlZCBkdXJpbmcgYGBweXRlc3RfdGVybWluYWxfc3VtbWFyeWBgIGFyZSBub3cK
KyAgcHJvcGVybHkgZGlzcGxheWVkLgorICBUaGFua3MgSW9uZWwgTWFyaWVzIENyaXN0aWFuIGZv
ciB0aGUgcmVwb3J0IGFuZCBCcnVubyBPbGl2ZWlyYSBmb3IgdGhlIFBSLgorCistIGZpeCAjNjI4
OiBmaXhlZCBpbnRlcm5hbCBVbmljb2RlRGVjb2RlRXJyb3Igd2hlbiBkb2N0ZXN0cyBjb250YWlu
IHVuaWNvZGUuCisgIFRoYW5rcyBKYXNvbiBSLiBDb29tYnMgZm9yIHRoZSByZXBvcnQgYW5kIEJy
dW5vIE9saXZlaXJhIGZvciB0aGUgUFIuCisKKy0gZml4ICMxMzM0OiBBZGQgY2FwdHVyZWQgc3Rk
b3V0IHRvIGpVbml0IFhNTCByZXBvcnQgb24gc2V0dXAgZXJyb3IuCisgIFRoYW5rcyBHZW9yZ3kg
RHl1bGRpbiBmb3IgdGhlIFBSLgorCisKKzIuOC41Cis9PT09PQorCistIGZpeCAjMTI0MzogZml4
ZWQgaXNzdWUgd2hlcmUgY2xhc3MgYXR0cmlidXRlcyBpbmplY3RlZCBkdXJpbmcgY29sbGVjdGlv
biBjb3VsZCBicmVhayBweXRlc3QuCisgIFBSIGJ5IEFsZXhlaSBLb3psZW5vaywgdGhhbmtzIFJv
bm55IFBmYW5uc2NobWlkdCBhbmQgQnJ1bm8gT2xpdmVpcmEgZm9yIHRoZSByZXZpZXcgYW5kIGhl
bHAuCisKKy0gZml4ICMxMDc0OiBwcmVjb21wdXRlIGp1bml0eG1sIGNodW5rcyBpbnN0ZWFkIG9m
IHN0b3JpbmcgdGhlIHdob2xlIHRyZWUgaW4gb2JqZWN0cworICBUaGFua3MgQnJ1bm8gT2xpdmVp
cmEgZm9yIHRoZSByZXBvcnQgYW5kIFJvbm55IFBmYW5uc2NobWlkdCBmb3IgdGhlIFBSCisKKy0g
Zml4ICMxMjM4OiBmaXggYGBweXRlc3QuZGVwcmVjYXRlZF9jYWxsKClgYCByZWNlaXZpbmcgbXVs
dGlwbGUgYXJndW1lbnRzCisgIChSZWdyZXNzaW9uIGludHJvZHVjZWQgaW4gMi44LjQpLiBUaGFu
a3MgQWxleCBHYXlub3IgZm9yIHRoZSByZXBvcnQgYW5kCisgIEJydW5vIE9saXZlaXJhIGZvciB0
aGUgUFIuCisKKworMi44LjQKKz09PT09CisKKy0gZml4ICMxMTkwOiBgYGRlcHJlY2F0ZWRfY2Fs
bCgpYGAgbm93IHdvcmtzIHdoZW4gdGhlIGRlcHJlY2F0ZWQKKyAgZnVuY3Rpb24gaGFzIGJlZW4g
YWxyZWFkeSBjYWxsZWQgYnkgYW5vdGhlciB0ZXN0IGluIHRoZSBzYW1lCisgIG1vZHVsZS4gVGhh
bmtzIE1pa2hhaWwgQ2hlcm55a2ggZm9yIHRoZSByZXBvcnQgYW5kIEJydW5vIE9saXZlaXJhIGZv
ciB0aGUKKyAgUFIuCisKKy0gZml4ICMxMTk4OiBgYC0tcGFzdGViaW5gYCBvcHRpb24gbm93IHdv
cmtzIG9uIFB5dGhvbiAzLiBUaGFua3MKKyAgTWVoZHkgS2hvc2hub29keSBmb3IgdGhlIFBSLgor
CistIGZpeCAjMTIxOTogYGAtLXBhc3RlYmluYGAgbm93IHdvcmtzIGNvcnJlY3RseSB3aGVuIGNh
cHR1cmVkIG91dHB1dCBjb250YWlucworICBub24tYXNjaWkgY2hhcmFjdGVycy4gVGhhbmtzIEJy
dW5vIE9saXZlaXJhIGZvciB0aGUgUFIuCisKKy0gZml4ICMxMjA0OiBhbm90aGVyIGVycm9yIHdo
ZW4gY29sbGVjdGluZyB3aXRoIGEgbmFzdHkgX19nZXRhdHRyX18oKS4KKyAgVGhhbmtzIEZsb3Jp
YW4gQnJ1aGluIGZvciB0aGUgUFIuCisKKy0gZml4IHRoZSBzdW1tYXJ5IHByaW50ZWQgd2hlbiBu
byB0ZXN0cyBkaWQgcnVuLgorICBUaGFua3MgRmxvcmlhbiBCcnVoaW4gZm9yIHRoZSBQUi4KKy0g
Zml4ICMxMTg1IC0gZW5zdXJlIE1BTklGRVNULmluIGV4YWN0bHkgbWF0Y2hlcyB3aGF0IHNob3Vs
ZCBnbyB0byBhIHNkaXN0CisKKy0gYSBudW1iZXIgb2YgZG9jdW1lbnRhdGlvbiBtb2Rlcm5pemF0
aW9ucyB3cnQgZ29vZCBwcmFjdGljZXMuCisgIFRoYW5rcyBCcnVubyBPbGl2ZWlyYSBmb3IgdGhl
IFBSLgorCisyLjguMworPT09PT0KKworLSBmaXggIzExNjk6IGFkZCBfX25hbWVfXyBhdHRyaWJ1
dGUgdG8gdGVzdGNhc2VzIGluIFRlc3RDYXNlRnVuY3Rpb24gdG8KKyAgc3VwcG9ydCB0aGUgQHVu
aXR0ZXN0LnNraXAgZGVjb3JhdG9yIG9uIGZ1bmN0aW9ucyBhbmQgbWV0aG9kcy4KKyAgVGhhbmtz
IExlZSBLYW1lbnRza3kgZm9yIHRoZSBQUi4KKworLSBmaXggIzEwMzU6IGNvbGxlY3RpbmcgdGVz
dHMgaWYgdGVzdCBtb2R1bGUgbGV2ZWwgb2JqIGhhcyBfX2dldGF0dHJfXygpLgorICBUaGFua3Mg
U3VvciBmb3IgdGhlIHJlcG9ydCBhbmQgQnJ1bm8gT2xpdmVpcmEgLyBUb20gVmluZXIgZm9yIHRo
ZSBQUi4KKworLSBmaXggIzMzMTogZG9uJ3QgY29sbGVjdCB0ZXN0cyBpZiB0aGVpciBmYWlsdXJl
IGNhbm5vdCBiZSByZXBvcnRlZCBjb3JyZWN0bHkKKyAgZS5nLiB0aGV5IGFyZSBhIGNhbGxhYmxl
IGluc3RhbmNlIG9mIGEgY2xhc3MuCisKKy0gZml4ICMxMTMzOiBmaXhlZCBpbnRlcm5hbCBlcnJv
ciB3aGVuIGZpbHRlcmluZyB0cmFjZWJhY2tzIHdoZXJlIG9uZSBlbnRyeQorICBiZWxvbmdzIHRv
IGEgZmlsZSB3aGljaCBpcyBubyBsb25nZXIgYXZhaWxhYmxlLgorICBUaGFua3MgQnJ1bm8gT2xp
dmVpcmEgZm9yIHRoZSBQUi4KKworLSBlbmhhbmNlbWVudCBtYWRlIHRvIGhpZ2hsaWdodCBpbiBy
ZWQgdGhlIG5hbWUgb2YgdGhlIGZhaWxpbmcgdGVzdHMgc28KKyAgdGhleSBzdGFuZCBvdXQgaW4g
dGhlIG91dHB1dC4KKyAgVGhhbmtzIEdhYnJpZWwgUmVpcyBmb3IgdGhlIFBSLgorCistIGFkZCBt
b3JlIHRhbGtzIHRvIHRoZSBkb2N1bWVudGF0aW9uCistIGV4dGVuZCBkb2N1bWVudGF0aW9uIG9u
IHRoZSAtLWlnbm9yZSBjbGkgb3B0aW9uIAorLSB1c2UgcHl0ZXN0LXJ1bm5lciBmb3Igc2V0dXB0
b29scyBpbnRlZ3JhdGlvbiAKKy0gbWlub3IgZml4ZXMgZm9yIGludGVyYWN0aW9uIHdpdGggT1Mg
WCBFbCBDYXBpdGFuCisgIHN5c3RlbSBpbnRlZ3JpdHkgcHJvdGVjdGlvbiAodGhhbmtzIEZsb3Jp
YW4pCisKKworMi44LjIKKz09PT09CisKKy0gZml4ICMxMDg1OiBwcm9wZXIgaGFuZGxpbmcgb2Yg
ZW5jb2RpbmcgZXJyb3JzIHdoZW4gcGFzc2luZyBlbmNvZGVkIGJ5dGUKKyAgc3RyaW5ncyB0byBw
eXRlc3QucGFyYW1ldHJpemUgaW4gUHl0aG9uIDIuCisgIFRoYW5rcyBUaGVtYW53aXRob3V0YXBs
YW4gZm9yIHRoZSByZXBvcnQgYW5kIEJydW5vIE9saXZlaXJhIGZvciB0aGUgUFIuCisKKy0gZml4
ICMxMDg3OiBoYW5kbGluZyBTeXN0ZW1FcnJvciB3aGVuIHBhc3NpbmcgZW1wdHkgYnl0ZSBzdHJp
bmdzIHRvCisgIHB5dGVzdC5wYXJhbWV0cml6ZSBpbiBQeXRob24gMy4KKyAgVGhhbmtzIFBhdWwg
S2VocmVyIGZvciB0aGUgcmVwb3J0IGFuZCBCcnVubyBPbGl2ZWlyYSBmb3IgdGhlIFBSLgorCist
IGZpeCAjOTk1OiBmaXhlZCBpbnRlcm5hbCBlcnJvciB3aGVuIGZpbHRlcmluZyB0cmFjZWJhY2tz
IHdoZXJlIG9uZSBlbnRyeQorICB3YXMgZ2VuZXJhdGVkIGJ5IGFuIGV4ZWMoKSBzdGF0ZW1lbnQu
CisgIFRoYW5rcyBEYW5pZWwgSGFobGVyLCBBc2hsZXkgQyBTdHJhdywgUGhpbGlwcGUgR2F1dGhp
ZXIgYW5kIFBhdmVsIFNhdmNoZW5rbworICBmb3IgY29udHJpYnV0aW5nIGFuZCBCcnVubyBPbGl2
ZWlyYSBmb3IgdGhlIFBSLgorCistIGZpeCAjMTEwMCBhbmQgIzEwNTc6IGVycm9ycyB3aGVuIHVz
aW5nIGF1dG91c2UgZml4dHVyZXMgYW5kIGRvY3Rlc3QgbW9kdWxlcy4KKyAgVGhhbmtzIFNlcmdl
eSBCIEtpcnBpY2hldiBhbmQgVml0YWwgS3VkemVsa2EgZm9yIGNvbnRyaWJ1dGluZyBhbmQgQnJ1
bm8KKyAgT2xpdmVpcmEgZm9yIHRoZSBQUi4KKworMi44LjEKKz09PT09CisKKy0gZml4ICMxMDM0
OiBBZGQgbWlzc2luZyBub2RlaWQgb24gcHl0ZXN0X2xvZ3dhcm5pbmcgY2FsbCBpbgorICBhZGRo
b29rLiAgVGhhbmtzIFNpbW9uIEdvbWl6ZWxqIGZvciB0aGUgUFIuCisKKy0gJ2RlcHJlY2F0ZWRf
Y2FsbCcgaXMgbm93IG9ubHkgc2F0aXNmaWVkIHdpdGggYSBEZXByZWNhdGlvbldhcm5pbmcgb3IK
KyAgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZy4gQmVmb3JlIDIuOC4wLCBpdCBhY2NlcHRlZCBh
bnkgd2FybmluZywgYW5kIDIuOC4wCisgIG1hZGUgaXQgYWNjZXB0IG9ubHkgRGVwcmVjYXRpb25X
YXJuaW5nIChidXQgbm90IFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcpLgorICBUaGFua3MgQWxl
eCBHYXlub3IgZm9yIHRoZSBpc3N1ZSBhbmQgRXJpYyBIdW5zYmVyZ2VyIGZvciB0aGUgUFIuCisK
Ky0gZml4IGlzc3VlICMxMDczOiBhdm9pZCBjYWxsaW5nIF9fZ2V0YXR0cl9fIG9uIHBvdGVudGlh
bCBwbHVnaW4gb2JqZWN0cy4KKyAgVGhpcyBmaXhlcyBhbiBpbmNvbXBhdGliaWxpdHkgd2l0aCBw
eXRlc3QtZGphbmdvLiAgVGhhbmtzIEFuZHJlYXMgUGVsbWUsCisgIEJydW5vIE9saXZlaXJhIGFu
ZCBSb25ueSBQZmFubnNjaG1pZHQgZm9yIGNvbnRyaWJ1dGluZyBhbmQgSG9sZ2VyIEtyZWtlbAor
ICBmb3IgdGhlIGZpeC4KKworLSBGaXggaXNzdWUgIzcwNDogaGFuZGxlIHZlcnNpb25jb25mbGlj
dCBkdXJpbmcgcGx1Z2luIGxvYWRpbmcgbW9yZQorICBncmFjZWZ1bGx5LiAgVGhhbmtzIEJydW5v
IE9saXZlaXJhIGZvciB0aGUgUFIuCisKKy0gRml4IGlzc3VlICMxMDY0OiAiIi0tanVuaXR4bWwi
IHJlZ3Jlc3Npb24gd2hlbiB1c2VkIHdpdGggdGhlCisgICJweXRlc3QteGRpc3QiIHBsdWdpbiwg
d2l0aCB0ZXN0IHJlcG9ydHMgYmVpbmcgYXNzaWduZWQgdG8gdGhlIHdyb25nIHRlc3RzLgorICBU
aGFua3MgRGFuaWVsIEdydW53YWxkIGZvciB0aGUgcmVwb3J0IGFuZCBCcnVubyBPbGl2ZWlyYSBm
b3IgdGhlIFBSLgorCistIChleHBlcmltZW50YWwpIGFkYXB0IG1vcmUgU0VNVkVSIHN0eWxlIHZl
cnNpb25pbmcgYW5kIGNoYW5nZSBtZWFuaW5nIG9mCisgIG1hc3RlciBicmFuY2ggaW4gZ2l0IHJl
cG86ICJtYXN0ZXIiIGJyYW5jaCBub3cga2VlcHMgdGhlIGJ1Z2ZpeGVzLCBjaGFuZ2VzCisgIGFp
bWVkIGZvciBtaWNybyByZWxlYXNlcy4gICJmZWF0dXJlcyIgYnJhbmNoIHdpbGwgb25seSBiZSBi
ZSByZWxlYXNlZAorICB3aXRoIG1pbm9yIG9yIG1ham9yIHB5dGVzdCByZWxlYXNlcy4KKworLSBG
aXggaXNzdWUgIzc2NiBieSByZW1vdmluZyBkb2N1bWVudGF0aW9uIHJlZmVyZW5jZXMgdG8gZGlz
dHV0aWxzLgorICBUaGFua3MgUnVzc2VsIFdpbmRlci4KKworLSBGaXggaXNzdWUgIzEwMzA6IG5v
dyBieXRlLXN0cmluZ3MgYXJlIGVzY2FwZWQgdG8gcHJvZHVjZSBpdGVtIG5vZGUgaWRzCisgIHRv
IG1ha2UgdGhlbSBhbHdheXMgc2VyaWFsaXphYmxlLgorICBUaGFua3MgQW5keSBGcmVlbGFuZCBm
b3IgdGhlIHJlcG9ydCBhbmQgQnJ1bm8gT2xpdmVpcmEgZm9yIHRoZSBQUi4KKworLSBQeXRob24g
MjogaWYgdW5pY29kZSBwYXJhbWV0cml6ZWQgdmFsdWVzIGFyZSBjb252ZXJ0aWJsZSB0byBhc2Np
aSwgdGhlaXIKKyAgYXNjaWkgcmVwcmVzZW50YXRpb24gaXMgdXNlZCBmb3IgdGhlIG5vZGUgaWQu
CisKKy0gRml4IGlzc3VlICM0MTE6IEFkZCBfX2VxX18gbWV0aG9kIHRvIGFzc2VydGlvbiBjb21w
YXJpc29uIGV4YW1wbGUuCisgIFRoYW5rcyBCZW4gV2ViYi4KKy0gRml4IGlzc3VlICM2NTM6IGRl
cHJlY2F0ZWRfY2FsbCBjYW4gYmUgdXNlZCBhcyBjb250ZXh0IG1hbmFnZXIuCisKKy0gZml4IGlz
c3VlIDg3NzogcHJvcGVybHkgaGFuZGxlIGFzc2VydGlvbiBleHBsYW5hdGlvbnMgd2l0aCBub24t
YXNjaWkgcmVwcgorICBUaGFua3MgTWF0aGlldSBBZ29waWFuIGZvciB0aGUgcmVwb3J0IGFuZCBS
b25ueSBQZmFubnNjaG1pZHQgZm9yIHRoZSBQUi4KKworLSBmaXggaXNzdWUgMTAyOTogdHJhbnNm
b3JtIGVycm9ycyB3aGVuIHdyaXRpbmcgY2FjaGUgdmFsdWVzIGludG8gcHl0ZXN0LXdhcm5pbmdz
CisKKzIuOC4wCis9PT09PQorCistIG5ldyBgYC0tbGZgYCBhbmQgYGAtZmZgYCBvcHRpb25zIHRv
IHJ1biBvbmx5IHRoZSBsYXN0IGZhaWxpbmcgdGVzdHMgb3IKKyAgImZhaWxpbmcgdGVzdHMgZmly
c3QiIGZyb20gdGhlIGxhc3QgcnVuLiAgVGhpcyBmdW5jdGlvbmFsaXR5IGlzIHByb3ZpZGVkCisg
IHRocm91Z2ggcG9ydGluZyB0aGUgZm9ybWVybHkgZXh0ZXJuYWwgcHl0ZXN0LWNhY2hlIHBsdWdp
biBpbnRvIHB5dGVzdCBjb3JlLgorICBCQUNLV0FSRCBJTkNPTVBBVDogaWYgeW91IHVzZWQgcHl0
ZXN0LWNhY2hlJ3MgZnVuY3Rpb25hbGl0eSB0byBwZXJzaXN0CisgIGRhdGEgYmV0d2VlbiB0ZXN0
IHJ1bnMgYmUgYXdhcmUgdGhhdCB3ZSBkb24ndCBzZXJpYWxpemUgc2V0cyBhbnltb3JlLgorICBU
aGFua3MgUm9ubnkgUGZhbm5zY2htaWR0IGZvciBtb3N0IG9mIHRoZSBtZXJnaW5nIHdvcmsuCisK
Ky0gIi1yIiBvcHRpb24gbm93IGFjY2VwdHMgImEiIHRvIGluY2x1ZGUgYWxsIHBvc3NpYmxlIHJl
cG9ydHMsIHNpbWlsYXIKKyAgdG8gcGFzc2luZyAiZkVzeFh3IiBleHBsaWNpdGx5IChpc3NlOTYw
KS4KKyAgVGhhbmtzIEFiaGlqZWV0IEthc3VyZGUgZm9yIHRoZSBQUi4KKworLSBhdm9pZCBweXRo
b24zLjUgZGVwcmVjYXRpb24gd2FybmluZ3MgYnkgaW50cm9kdWNpbmcgdmVyc2lvbgorICBzcGVj
aWZpYyBpbnNwZWN0aW9uIGhlbHBlcnMsIHRoYW5rcyBNaWNoYWVsIERyb2V0dGJvb20uCisKKy0g
Zml4IGlzc3VlNTYyOiBAbm9zZS50b29scy5pc3Rlc3Qgbm93IGZ1bGx5IHJlc3BlY3RlZC4KKwor
LSBmaXggaXNzdWU5MzQ6IHdoZW4gc3RyaW5nIGNvbXBhcmlzb24gZmFpbHMgYW5kIGEgZGlmZiBp
cyB0b28gbGFyZ2UgdG8gZGlzcGxheQorICB3aXRob3V0IHBhc3NpbmcgLXZ2LCBzdGlsbCBzaG93
IGEgZmV3IGxpbmVzIG9mIHRoZSBkaWZmLgorICBUaGFua3MgRmxvcmlhbiBCcnVoaW4gZm9yIHRo
ZSByZXBvcnQgYW5kIEJydW5vIE9saXZlaXJhIGZvciB0aGUgUFIuCisKKy0gZml4IGlzc3VlNzM2
OiBGaXggYSBidWcgd2hlcmUgZml4dHVyZSBwYXJhbXMgd291bGQgYmUgZGlzY2FyZGVkIHdoZW4g
Y29tYmluZWQKKyAgd2l0aCBwYXJhbWV0cml6YXRpb24gbWFya2Vycy4KKyAgVGhhbmtzIHRvIE1h
cmt1cyBVbnRlcndhZGl0emVyIGZvciB0aGUgUFIuCisKKy0gZml4IGlzc3VlNzEwOiBpbnRyb2R1
Y2UgQUxMT1dfVU5JQ09ERSBkb2N0ZXN0IG9wdGlvbjogd2hlbiBlbmFibGVkLCB0aGUKKyAgYGB1
YGAgcHJlZml4IGlzIHN0cmlwcGVkIGZyb20gdW5pY29kZSBzdHJpbmdzIGluIGV4cGVjdGVkIGRv
Y3Rlc3Qgb3V0cHV0LiBUaGlzCisgIGFsbG93cyBkb2N0ZXN0cyB3aGljaCB1c2UgdW5pY29kZSB0
byBydW4gaW4gUHl0aG9uIDIgYW5kIDMgdW5jaGFuZ2VkLgorICBUaGFua3MgSmFzb24gUi4gQ29v
bWJzIGZvciB0aGUgcmVwb3J0IGFuZCBCcnVubyBPbGl2ZWlyYSBmb3IgdGhlIFBSLgorCistIHBh
cmFtZXRyaXplIG5vdyBhbHNvIGdlbmVyYXRlcyBtZWFuaW5nZnVsIHRlc3QgSURzIGZvciBlbnVt
LCByZWdleCBhbmQgY2xhc3MKKyAgb2JqZWN0cyAoYXMgb3Bwb3NlZCB0byBjbGFzcyBpbnN0YW5j
ZXMpLgorICBUaGFua3MgdG8gRmxvcmlhbiBCcnVoaW4gZm9yIHRoZSBQUi4KKworLSBBZGQgJ3dh
cm5zJyB0byBhc3NlcnQgdGhhdCB3YXJuaW5ncyBhcmUgdGhyb3duIChsaWtlICdyYWlzZXMnKS4K
KyAgVGhhbmtzIHRvIEVyaWMgSHVuc2JlcmdlciBmb3IgdGhlIFBSLgorCistIEZpeCBpc3N1ZTY4
MzogRG8gbm90IGFwcGx5IGFuIGFscmVhZHkgYXBwbGllZCBtYXJrLiAgVGhhbmtzIG9qYWtlIGZv
ciB0aGUgUFIuCisKKy0gRGVhbCB3aXRoIGNhcHR1cmluZyBmYWlsdXJlcyBiZXR0ZXIgc28gZmV3
ZXIgZXhjZXB0aW9ucyBnZXQgbG9zdCB0bworICAvZGV2L251bGwuICBUaGFua3MgRGF2aWQgU3pv
dHRlbiBmb3IgdGhlIFBSLgorCistIGZpeCBpc3N1ZTczMDogZGVwcmVjYXRlIGFuZCB3YXJuIGFi
b3V0IHRoZSAtLWdlbnNjcmlwdCBvcHRpb24uCisgIFRoYW5rcyBSb25ueSBQZmFubnNjaG1pZHQg
Zm9yIHRoZSByZXBvcnQgYW5kIENocmlzdGlhbiBQb21tcmFueiBmb3IgdGhlIFBSLgorCistIGZp
eCBpc3N1ZTc1MTogbXVsdGlwbGUgcGFyYW1ldHJpemUgd2l0aCBpZHMgYnVnIGlmIGl0IHBhcmFt
ZXRyaXplcyBjbGFzcyB3aXRoCisgIHR3byBvciBtb3JlIHRlc3QgbWV0aG9kcy4gVGhhbmtzIFNl
cmdleSBDaGlwaWdhIGZvciByZXBvcnRpbmcgYW5kIEphbgorICBCZWRuYXJpayBmb3IgUFIuCisK
Ky0gZml4IGlzc3VlODI6IGF2b2lkIGxvYWRpbmcgY29uZnRlc3QgZmlsZXMgZnJvbSBzZXR1cC5j
ZmcvcHl0ZXN0LmluaS90b3guaW5pCisgIGZpbGVzIGFuZCB1cHdhcmRzIGJ5IGRlZmF1bHQgKC0t
Y29uZmN1dGRpciBjYW4gc3RpbGwgYmUgc2V0IHRvIG92ZXJyaWRlIHRoaXMpLgorICBUaGFua3Mg
QnJ1bm8gT2xpdmVpcmEgZm9yIHRoZSBQUi4KKworLSBmaXggaXNzdWU3Njg6IGRvY3N0cmluZ3Mg
Zm91bmQgaW4gcHl0aG9uIG1vZHVsZXMgd2VyZSBub3Qgc2V0dGluZyB1cCBzZXNzaW9uCisgIGZp
eHR1cmVzLiBUaGFua3MgSmFzb24gUi4gQ29vbWJzIGZvciByZXBvcnRpbmcgYW5kIEJydW5vIE9s
aXZlaXJhIGZvciB0aGUgUFIuCisKKy0gYWRkZWQgYGB0bXBkaXJfZmFjdG9yeWBgLCBhIHNlc3Np
b24tc2NvcGVkIGZpeHR1cmUgdGhhdCBjYW4gYmUgdXNlZCB0byBjcmVhdGUKKyAgZGlyZWN0b3Jp
ZXMgdW5kZXIgdGhlIGJhc2UgdGVtcG9yYXJ5IGRpcmVjdG9yeS4gUHJldmlvdXNseSB0aGlzIG9i
amVjdCB3YXMKKyAgaW5zdGFsbGVkIGFzIGEgYGBfdG1wZGlyaGFuZGxlcmBgIGF0dHJpYnV0ZSBv
ZiB0aGUgYGBjb25maWdgYCBvYmplY3QsIGJ1dCBub3cgaXQKKyAgaXMgcGFydCBvZiB0aGUgb2Zm
aWNpYWwgQVBJIGFuZCB1c2luZyBgYGNvbmZpZy5fdG1wZGlyaGFuZGxlcmBgIGlzCisgIGRlcHJl
Y2F0ZWQuCisgIFRoYW5rcyBCcnVubyBPbGl2ZWlyYSBmb3IgdGhlIFBSLgorCistIGZpeCBpc3N1
ZTgwODogcHl0ZXN0J3MgaW50ZXJuYWwgYXNzZXJ0aW9uIHJld3JpdGUgaG9vayBub3cgaW1wbGVt
ZW50cyB0aGUKKyAgb3B0aW9uYWwgUEVQMzAyIGdldF9kYXRhIEFQSSBzbyB0ZXN0cyBjYW4gYWNj
ZXNzIGRhdGEgZmlsZXMgbmV4dCB0byB0aGVtLgorICBUaGFua3MgeG1vLW9kb28gZm9yIHJlcXVl
c3QgYW5kIGV4YW1wbGUgYW5kIEJydW5vIE9saXZlaXJhIGZvcgorICB0aGUgUFIuCisKKy0gcm9v
dGRpciBhbmQgaW5pZmlsZSBhcmUgbm93IGRpc3BsYXllZCBkdXJpbmcgdXNhZ2UgZXJyb3JzIHRv
IGhlbHAKKyAgdXNlcnMgZGlhZ25vc2UgcHJvYmxlbXMgc3VjaCBhcyB1bmV4cGVjdGVkIGluaSBm
aWxlcyB3aGljaCBhZGQKKyAgdW5rbm93biBvcHRpb25zIGJlaW5nIHBpY2tlZCB1cCBieSBweXRl
c3QuIFRoYW5rcyB0byBQYXZlbCBTYXZjaGVua28gZm9yCisgIGJyaW5naW5nIHRoZSBwcm9ibGVt
IHRvIGF0dGVudGlvbiBpbiAjODIxIGFuZCBCcnVubyBPbGl2ZWlyYSBmb3IgdGhlIFBSLgorCist
IFN1bW1hcnkgYmFyIG5vdyBpcyBjb2xvcmVkIHllbGxvdyBmb3Igd2FybmluZworICBzaXR1YXRp
b25zIHN1Y2ggYXM6IGFsbCB0ZXN0cyBlaXRoZXIgd2VyZSBza2lwcGVkIG9yIHhwYXNzL3hmYWls
ZWQsCisgIG9yIG5vIHRlc3RzIHdlcmUgcnVuIGF0IGFsbCAodGhpcyBpcyBhIHBhcnRpYWwgZml4
IGZvciBpc3N1ZTUwMCkuCisKKy0gZml4IGlzc3VlODEyOiBweXRlc3Qgbm93IGV4aXRzIHdpdGgg
c3RhdHVzIGNvZGUgNSBpbiBzaXR1YXRpb25zIHdoZXJlIG5vCisgIHRlc3RzIHdlcmUgcnVuIGF0
IGFsbCwgc3VjaCBhcyB0aGUgZGlyZWN0b3J5IGdpdmVuIGluIHRoZSBjb21tYW5kIGxpbmUgZG9l
cworICBub3QgY29udGFpbiBhbnkgdGVzdHMgb3IgYXMgcmVzdWx0IG9mIGEgY29tbWFuZCBsaW5l
IG9wdGlvbiBmaWx0ZXJzCisgIGFsbCBvdXQgYWxsIHRlc3RzICgtayBmb3IgZXhhbXBsZSkuCisg
IFRoYW5rcyBFcmljIFNpZWdlcm1hbiAoaXNzdWU4MTIpIGFuZCBCcnVubyBPbGl2ZWlyYSBmb3Ig
dGhlIFBSLgorCistIFN1bW1hcnkgYmFyIG5vdyBpcyBjb2xvcmVkIHllbGxvdyBmb3Igd2Fybmlu
ZworICBzaXR1YXRpb25zIHN1Y2ggYXM6IGFsbCB0ZXN0cyBlaXRoZXIgd2VyZSBza2lwcGVkIG9y
IHhwYXNzL3hmYWlsZWQsCisgIG9yIG5vIHRlc3RzIHdlcmUgcnVuIGF0IGFsbCAocmVsYXRlZCB0
byBpc3N1ZTUwMCkuCisgIFRoYW5rcyBFcmljIFNpZWdlcm1hbi4KKworLSBOZXcgYGB0ZXN0cGF0
aHNgYCBpbmkgb3B0aW9uOiBsaXN0IG9mIGRpcmVjdG9yaWVzIHRvIHNlYXJjaCBmb3IgdGVzdHMK
KyAgd2hlbiBleGVjdXRpbmcgcHl0ZXN0IGZyb20gdGhlIHJvb3QgZGlyZWN0b3J5LiBUaGlzIGNh
biBiZSB1c2VkCisgIHRvIHNwZWVkIHVwIHRlc3QgY29sbGVjdGlvbiB3aGVuIGEgcHJvamVjdCBo
YXMgd2VsbCBzcGVjaWZpZWQgZGlyZWN0b3JpZXMKKyAgZm9yIHRlc3RzLCBiZWluZyB1c3VhbGx5
IG1vcmUgcHJhY3RpY2FsIHRoYW4gY29uZmlndXJpbmcgbm9yZWN1cnNlZGlycyBmb3IKKyAgYWxs
IGRpcmVjdG9yaWVzIHRoYXQgZG8gbm90IGNvbnRhaW4gdGVzdHMuCisgIFRoYW5rcyB0byBBZHJp
YW4gZm9yIGlkZWEgKCM2OTQpIGFuZCBCcnVubyBPbGl2ZWlyYSBmb3IgdGhlIFBSLgorCistIGZp
eCBpc3N1ZTcxMzogSlVuaXQgWE1MIHJlcG9ydHMgZm9yIGRvY3Rlc3QgZmFpbHVyZXMuCisgIFRo
YW5rcyBQdW55YXNobG9rYSBCaXN3YWwuCisKKy0gZml4IGlzc3VlOTcwOiBpbnRlcm5hbCBweXRl
c3Qgd2FybmluZ3Mgbm93IGFwcGVhciBhcyAicHl0ZXN0LXdhcm5pbmdzIiBpbgorICB0aGUgdGVy
bWluYWwgaW5zdGVhZCBvZiAid2FybmluZ3MiLCBzbyBpdCBpcyBjbGVhciBmb3IgdXNlcnMgdGhh
dCB0aG9zZQorICB3YXJuaW5ncyBhcmUgZnJvbSBweXRlc3QgYW5kIG5vdCBmcm9tIHRoZSBidWls
dGluICJ3YXJuaW5ncyIgbW9kdWxlLgorICBUaGFua3MgQnJ1bm8gT2xpdmVpcmEuCisKKy0gSW5j
bHVkZSBzZXR1cCBhbmQgdGVhcmRvd24gaW4ganVuaXR4bWwgdGVzdCBkdXJhdGlvbnMuCisgIFRo
YW5rcyBKYW5uZSBWYW5oYWxhLgorCistIGZpeCBpc3N1ZTczNTogYXNzZXJ0aW9uIGZhaWx1cmVz
IG9uIGRlYnVnIHZlcnNpb25zIG9mIFB5dGhvbiAzLjQrCisKKy0gbmV3IG9wdGlvbiBgYC0taW1w
b3J0LW1vZGVgYCB0byBhbGxvdyB0byBjaGFuZ2UgdGVzdCBtb2R1bGUgaW1wb3J0aW5nCisgIGJl
aGF2aW91ciB0byBhcHBlbmQgdG8gc3lzLnBhdGggaW5zdGVhZCBvZiBwcmVwZW5kaW5nLiAgVGhp
cyBiZXR0ZXIgYWxsb3dzCisgIHRvIHJ1biB0ZXN0IG1vZHVsZXMgYWdhaW5zdCBpbnN0YWxsYXRl
ZCB2ZXJzaW9ucyBvZiBhIHBhY2thZ2UgZXZlbiBpZiB0aGUKKyAgcGFja2FnZSB1bmRlciB0ZXN0
IGhhcyB0aGUgc2FtZSBpbXBvcnQgcm9vdC4gIEluIHRoaXMgZXhhbXBsZTo6CisKKyAgICAgICAg
dGVzdGluZy9fX2luaXRfXy5weQorICAgICAgICB0ZXN0aW5nL3Rlc3RfcGtnX3VuZGVyX3Rlc3Qu
cHkKKyAgICAgICAgcGtnX3VuZGVyX3Rlc3QvCisKKyAgdGhlIHRlc3RzIHdpbGwgcnVuIGFnYWlu
c3QgdGhlIGluc3RhbGxlZCB2ZXJzaW9uCisgIG9mIHBrZ191bmRlcl90ZXN0IHdoZW4gYGAtLWlt
cG9ydC1tb2RlPWFwcGVuZGBgIGlzIHVzZWQgd2hlcmVhcworICBieSBkZWZhdWx0IHRoZXkgd291
bGQgYWx3YXlzIHBpY2sgdXAgdGhlIGxvY2FsIHZlcnNpb24uICBUaGFua3MgSG9sZ2VyIEtyZWtl
bC4KKworLSBweXRlc3RlcjogYWRkIG1ldGhvZCBgYFRtcFRlc3RkaXIuZGVsZXRlX2xvYWRlZF9t
b2R1bGVzKClgYCwgYW5kIGNhbGwgaXQKKyAgZnJvbSBgYGlubGluZV9ydW4oKWBgIHRvIGFsbG93
IHRlbXBvcmFyeSBtb2R1bGVzIHRvIGJlIHJlbG9hZGVkLgorICBUaGFua3MgRWR1YXJkbyBTY2hl
dHRpbm8uCisKKy0gaW50ZXJuYWxseSByZWZhY3RvciBwbHVnaW5tYW5hZ2VyIEFQSSBhbmQgY29k
ZSBzbyB0aGF0IHRoZXJlCisgIGlzIGEgY2xlYXIgZGlzdGluY3Rpb24gYmV0d2VlbiBhIHB5dGVz
dC1hZ25vc3RpYyByYXRoZXIgc2ltcGxlCisgIHBsdWdpbm1hbmFnZXIgYW5kIHRoZSBQeXRlc3RQ
bHVnaW5NYW5hZ2VyIHdoaWNoIGFkZHMgYSBsb3Qgb2YKKyAgYmVoYXZpb3VyLCBhbW9uZyBpdCBo
YW5kbGluZyBvZiB0aGUgbG9jYWwgY29uZnRlc3QgZmlsZXMuCisgIEluIHRlcm1zIG9mIGRvY3Vt
ZW50ZWQgbWV0aG9kcyB0aGlzIGlzIGEgYmFja3dhcmQgY29tcGF0aWJsZQorICBjaGFuZ2UgYnV0
IGl0IG1pZ2h0IHN0aWxsIGJyZWFrIDNyZCBwYXJ0eSBwbHVnaW5zIHdoaWNoIHJlbGllZCBvbgor
ICBkZXRhaWxzIGxpa2UgZXNwZWNpYWxseSB0aGUgcGx1Z2lubWFuYWdlci5hZGRfc2h1dGRvd24o
KSBBUEkuCisgIFRoYW5rcyBIb2xnZXIgS3Jla2VsLgorCistIHBsdWdpbm1hbmFnZW1lbnQ6IGlu
dHJvZHVjZSBgYHB5dGVzdC5ob29raW1wbGBgIGFuZAorICBgYHB5dGVzdC5ob29rc3BlY2BgIGRl
Y29yYXRvcnMgZm9yIHNldHRpbmcgaW1wbC9zcGVjCisgIHNwZWNpZmljIHBhcmFtZXRlcnMuICBU
aGlzIHN1YnN0aXR1dGVzIHRoZSBwcmV2aW91cworICBub3cgZGVwcmVjYXRlZCB1c2Ugb2YgYGBw
eXRlc3QubWFya2BgIHdoaWNoIGlzIG1lYW50IHRvCisgIGNvbnRhaW4gbWFya2VycyBmb3IgdGVz
dCBmdW5jdGlvbnMgb25seS4KKworLSB3cml0ZS9yZWZpbmUgZG9jcyBmb3IgIndyaXRpbmcgcGx1
Z2lucyIgd2hpY2ggbm93IGhhdmUgdGhlaXIKKyAgb3duIHBhZ2UgYW5kIGFyZSBzZXBhcmF0ZSBm
cm9tIHRoZSAidXNpbmcvaW5zdGFsbGluZyBwbHVnaW5zYGAgcGFnZS4KKworLSBmaXggaXNzdWU3
MzI6IHByb3Blcmx5IHVucmVnaXN0ZXIgcGx1Z2lucyBmcm9tIGFueSBob29rIGNhbGxpbmcKKyAg
c2l0ZXMgYWxsb3dpbmcgdG8gaGF2ZSB0ZW1wb3JhcnkgcGx1Z2lucyBkdXJpbmcgdGVzdCBleGVj
dXRpb24uCisKKy0gZGVwcmVjYXRlIGFuZCB3YXJuIGFib3V0IGBgX19tdWx0aWNhbGxfX2BgIGFy
Z3VtZW50IGluIGhvb2sKKyAgaW1wbGVtZW50YXRpb25zLiAgVXNlIHRoZSBgYGhvb2t3cmFwcGVy
YGAgbWVjaGFuaXNtIGluc3RlYWQgYWxyZWFkeQorICBpbnRyb2R1Y2VkIHdpdGggcHl0ZXN0LTIu
Ny4KKworLSBzcGVlZCB1cCBweXRlc3QncyBvd24gdGVzdCBzdWl0ZSBjb25zaWRlcmFibHkgYnkg
dXNpbmcgaW5wcm9jZXNzCisgIHRlc3RzIGJ5IGRlZmF1bHQgKHRlc3RydW4gY2FuIGJlIG1vZGlm
aWVkIHdpdGggLS1ydW5weXRlc3Q9c3VicHJvY2VzcworICB0byBjcmVhdGUgc3VicHJvY2Vzc2Vz
IGluIG1hbnkgcGxhY2VzIGluc3RlYWQpLiAgVGhlIG1haW4KKyAgQVBJcyB0byBydW4gcHl0ZXN0
IGluIGEgdGVzdCBpcyAicnVucHl0ZXN0KCkiIG9yICJydW5weXRlc3Rfc3VicHJvY2VzcyIKKyAg
YW5kICJydW5weXRlc3RfaW5wcm9jZXNzIiBpZiB5b3UgbmVlZCBhIHBhcnRpY3VsYXIgd2F5IG9m
IHJ1bm5pbmcKKyAgdGhlIHRlc3QuICBJbiBhbGwgY2FzZXMgeW91IGdldCBiYWNrIGEgUnVuUmVz
dWx0IGJ1dCB0aGUgaW5wcm9jZXNzCisgIG9uZSB3aWxsIGFsc28gaGF2ZSBhICJyZXByZWMiIGF0
dHJpYnV0ZSB3aXRoIHRoZSByZWNvcmRlZCBldmVudHMvcmVwb3J0cy4KKworLSBmaXggbW9ua2V5
cGF0Y2guc2V0YXR0cigieC55IiwgcmFpc2luZz1GYWxzZSkgdG8gYWN0dWFsbHkgbm90IHJhaXNl
CisgIGlmICJ5IiBpcyBub3QgYSBwcmUtZXhpc3RpbmcgYXR0cmlidXRlLiBUaGFua3MgRmxvcmlh
biBCcnVoaW4uCisKKy0gZml4IGlzc3VlNzQxOiBtYWtlIHJ1bm5pbmcgb3V0cHV0IGZyb20gdGVz
dGRpci5ydW4gY29weS9wYXN0ZWFibGUKKyAgVGhhbmtzIEJydW5vIE9saXZlaXJhLgorCistIGFk
ZCBhIG5ldyBgYC0tbm9jb25mdGVzdGBgIGFyZ3VtZW50IHdoaWNoIGlnbm9yZXMgYWxsIGBgY29u
ZnRlc3QucHlgYCBmaWxlcy4KKworLSBhZGQgYGBmaWxlYGAgYW5kIGBgbGluZWBgIGF0dHJpYnV0
ZXMgdG8gSlVuaXQtWE1MIG91dHB1dC4KKworLSBmaXggaXNzdWU4OTA6IGNoYW5nZWQgZXh0ZW5z
aW9uIG9mIGFsbCBkb2N1bWVudGF0aW9uIGZpbGVzIGZyb20gYGB0eHRgYCB0bworICBgYHJzdGBg
LiBUaGFua3MgdG8gQWJoaWplZXQgZm9yIHRoZSBQUi4KKworLSBmaXggaXNzdWU3MTQ6IGFkZCBh
YmlsaXR5IHRvIGFwcGx5IGluZGlyZWN0PVRydWUgcGFyYW1ldGVyIG9uIHBhcnRpY3VsYXIgYXJn
bmFtZXMuCisgIFRoYW5rcyBFbGl6YXZldGEyMzkuCisKKy0gZml4IGlzc3VlODkwOiBjaGFuZ2Vk
IGV4dGVuc2lvbiBvZiBhbGwgZG9jdW1lbnRhdGlvbiBmaWxlcyBmcm9tIGBgdHh0YGAgdG8KKyAg
YGByc3RgYC4gVGhhbmtzIHRvIEFiaGlqZWV0IGZvciB0aGUgUFIuCisKKy0gZml4IGlzc3VlOTU3
OiAiIyBkb2N0ZXN0OiBTS0lQIiBvcHRpb24gd2lsbCBub3cgcmVnaXN0ZXIgZG9jdGVzdHMgYXMg
U0tJUFBFRAorICByYXRoZXIgdGhhbiBQQVNTRUQuCisgIFRoYW5rcyBUaG9tYXMgR3JhaW5nZXIg
Zm9yIHRoZSByZXBvcnQgYW5kIEJydW5vIE9saXZlaXJhIGZvciB0aGUgUFIuCisKKy0gaXNzdWU5
NTE6IGFkZCBuZXcgcmVjb3JkX3htbF9wcm9wZXJ0eSBmaXh0dXJlLCB0aGF0IHN1cHBvcnRzIGxv
Z2dpbmcKKyAgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiB4bWwgb3V0cHV0LiBUaGFua3MgRGF2
aWQgRGlheiBmb3IgdGhlIFBSLgorCistIGlzc3VlOTQ5OiBwYXRocyBhZnRlciBub3JtYWwgb3B0
aW9ucyAoZm9yIGV4YW1wbGUgYGAtc2BgLCBgYC12YGAsIGV0YykgYXJlIG5vdworICBwcm9wZXJs
eSB1c2VkIHRvIGRpc2NvdmVyIGBgcm9vdGRpcmBgIGFuZCBgYGluaWBgIGZpbGVzLgorICBUaGFu
a3MgUGV0ZXIgTGF1cmkgZm9yIHRoZSByZXBvcnQgYW5kIEJydW5vIE9saXZlaXJhIGZvciB0aGUg
UFIuCisKKzIuNy4zIChjb21wYXJlZCB0byAyLjcuMikKKz09PT09PT09PT09PT09PT09PT09PT09
PT09PT09CisKKy0gQWxsb3cgJ2RldicsICdyYycsIG9yIG90aGVyIG5vbi1pbnRlZ2VyIHZlcnNp
b24gc3RyaW5ncyBpbiBgYGltcG9ydG9yc2tpcGBgLgorICBUaGFua3MgdG8gRXJpYyBIdW5zYmVy
Z2VyIGZvciB0aGUgUFIuCisKKy0gZml4IGlzc3VlODU2OiBjb25zaWRlciAtLWNvbG9yIHBhcmFt
ZXRlciBpbiBhbGwgb3V0cHV0cyAoZm9yIGV4YW1wbGUKKyAgLS1maXh0dXJlcykuIFRoYW5rcyBC
YXJuZXkgR2FsZSBmb3IgdGhlIHJlcG9ydCBhbmQgQnJ1bm8gT2xpdmVpcmEgZm9yIHRoZSBQUi4K
KworLSBmaXggaXNzdWU4NTU6IHBhc3Npbmcgc3RyIG9iamVjdHMgYXMgYGBwbHVnaW5zYGAgYXJn
dW1lbnQgdG8gcHl0ZXN0Lm1haW4KKyAgaXMgbm93IGludGVycHJldGVkIGFzIGEgbW9kdWxlIG5h
bWUgdG8gYmUgaW1wb3J0ZWQgYW5kIHJlZ2lzdGVyZWQgYXMgYQorICBwbHVnaW4sIGluc3RlYWQg
b2Ygc2lsZW50bHkgaGF2aW5nIG5vIGVmZmVjdC4KKyAgVGhhbmtzIHhtby1vZG9vIGZvciB0aGUg
cmVwb3J0IGFuZCBCcnVubyBPbGl2ZWlyYSBmb3IgdGhlIFBSLgorCistIGZpeCBpc3N1ZTc0NDog
Zml4IGZvciBhc3QuQ2FsbCBjaGFuZ2VzIGluIFB5dGhvbiAzLjUrLiAgVGhhbmtzCisgIEd1aWRv
IHZhbiBSb3NzdW0sIE1hdHRoaWFzIEJ1c3Nvbm5pZXIsIFN0ZWZhbiBaaW1tZXJtYW5uIGFuZAor
ICBUaG9tYXMgS2x1eXZlci4KKworLSBmaXggaXNzdWU4NDI6IGFwcGx5aW5nIG1hcmtlcnMgaW4g
Y2xhc3NlcyBubyBsb25nZXIgcHJvcGFnYXRlIHRoaXMgbWFya2VycworICB0byBzdXBlcmNsYXNz
ZXMgd2hpY2ggYWxzbyBoYXZlIG1hcmtlcnMuCisgIFRoYW5rcyB4bW8tb2RvbyBmb3IgdGhlIHJl
cG9ydCBhbmQgQnJ1bm8gT2xpdmVpcmEgZm9yIHRoZSBQUi4KKworLSBwcmVzZXJ2ZSB3YXJuaW5n
IGZ1bmN0aW9ucyBhZnRlciBjYWxsIHRvIHB5dGVzdC5kZXByZWNhdGVkX2NhbGwuIFRoYW5rcwor
ICBQaWV0ZXIgTXVsZGVyIGZvciBQUi4KKworLSBmaXggaXNzdWU4NTQ6IGF1dG91c2UgeWllbGRf
Zml4dHVyZXMgZGVmaW5lZCBhcyBjbGFzcyBtZW1iZXJzIG9mCisgIHVuaXR0ZXN0LlRlc3RDYXNl
IHN1YmNsYXNzZXMgbm93IHdvcmsgYXMgZXhwZWN0ZWQuCisgIFRoYW5ua3MgeG1vLW9kb28gZm9y
IHRoZSByZXBvcnQgYW5kIEJydW5vIE9saXZlaXJhIGZvciB0aGUgUFIuCisKKy0gZml4IGlzc3Vl
ODMzOiAtLWZpeHR1cmVzIG5vdyBzaG93cyBhbGwgZml4dHVyZXMgb2YgY29sbGVjdGVkIHRlc3Qg
ZmlsZXMsIGluc3RlYWQgb2YganVzdCB0aGUKKyAgZml4dHVyZXMgZGVjbGFyZWQgb24gdGhlIGZp
cnN0IG9uZS4KKyAgVGhhbmtzIEZsb3JpYW4gQnJ1aGluIGZvciByZXBvcnRpbmcgYW5kIEJydW5v
IE9saXZlaXJhIGZvciB0aGUgUFIuCisKKy0gZml4IGlzc3VlODYzOiBza2lwcGVkIHRlc3RzIG5v
dyByZXBvcnQgdGhlIGNvcnJlY3QgcmVhc29uIHdoZW4gYSBza2lwL3hmYWlsCisgIGNvbmRpdGlv
biBpcyBtZXQgd2hlbiB1c2luZyBtdWx0aXBsZSBtYXJrZXJzLgorICBUaGFua3MgUmFwaGFlbCBQ
aWVyemluYSBmb3IgcmVwb3J0aW5nIGFuZCBCcnVubyBPbGl2ZWlyYSBmb3IgdGhlIFBSLgorCist
IG9wdGltaXplZCB0bXBkaXIgZml4dHVyZSBpbml0aWFsaXphdGlvbiwgd2hpY2ggc2hvdWxkIG1h
a2UgdGVzdCBzZXNzaW9ucworICBmYXN0ZXIgKHNwZWNpYWxseSB3aGVuIHVzaW5nIHB5dGVzdC14
ZGlzdCkuIFRoZSBvbmx5IHZpc2libGUgZWZmZWN0CisgIGlzIHRoYXQgbm93IHB5dGVzdCB1c2Vz
IGEgc3ViZGlyZWN0b3J5IGluIHRoZSAkVEVNUCBkaXJlY3RvcnkgZm9yIGFsbAorICBkaXJlY3Rv
cmllcyBjcmVhdGVkIGJ5IHRoaXMgZml4dHVyZSAoZGVmYXVsdHMgdG8gJFRFTVAvcHl0ZXN0LSRV
U0VSKS4KKyAgVGhhbmtzIEJydW5vIE9saXZlaXJhIGZvciB0aGUgUFIuCisKKzIuNy4yIChjb21w
YXJlZCB0byAyLjcuMSkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy0gZml4IGlz
c3VlNzY3OiBweXRlc3QucmFpc2VzIHZhbHVlIGF0dHJpYnV0ZSBkb2VzIG5vdCBjb250YWluIHRo
ZSBleGNlcHRpb24KKyAgaW5zdGFuY2Ugb24gUHl0aG9uIDIuNi4gVGhhbmtzIEVyaWMgU2llZ2Vy
bWFuIGZvciBwcm92aWRpbmcgdGhlIHRlc3QKKyAgY2FzZSBhbmQgQnJ1bm8gT2xpdmVpcmEgZm9y
IFBSLgorCistIEF1dG9tYXRpY2FsbHkgY3JlYXRlIGRpcmVjdG9yeSBmb3IganVuaXR4bWwgYW5k
IHJlc3VsdHMgbG9nLgorICBUaGFua3MgQXJvbiBDdXJ6b24uCisKKy0gZml4IGlzc3VlNzEzOiBK
VW5pdCBYTUwgcmVwb3J0cyBmb3IgZG9jdGVzdCBmYWlsdXJlcy4KKyAgVGhhbmtzIFB1bnlhc2hs
b2thIEJpc3dhbC4KKworLSBmaXggaXNzdWU3MzU6IGFzc2VydGlvbiBmYWlsdXJlcyBvbiBkZWJ1
ZyB2ZXJzaW9ucyBvZiBQeXRob24gMy40KworICBUaGFua3MgQmVuamFtaW4gUGV0ZXJzb24uCisK
Ky0gZml4IGlzc3VlMTE0OiBza2lwaWYgbWFya2VyIHJlcG9ydHMgdG8gaW50ZXJuYWwgc2tpcHBp
bmcgcGx1Z2luOworICBUaGFua3MgRmxvcmlzIEJydXlub29naGUgZm9yIHJlcG9ydGluZyBhbmQg
QnJ1bm8gT2xpdmVpcmEgZm9yIHRoZSBQUi4KKworLSBmaXggaXNzdWU3NDg6IHVuaXR0ZXN0LlNr
aXBUZXN0IHJlcG9ydHMgdG8gaW50ZXJuYWwgcHl0ZXN0IHVuaXR0ZXN0IHBsdWdpbi4KKyAgVGhh
bmtzIFRob21hcyBEZSBTY2hhbXBoZWxlaXJlIGZvciByZXBvcnRpbmcgYW5kIEJydW5vIE9saXZl
aXJhIGZvciB0aGUgUFIuCisKKy0gZml4IGlzc3VlNzE4OiBmYWlsZWQgdG8gY3JlYXRlIHJlcHJl
c2VudGF0aW9uIG9mIHNldHMgY29udGFpbmluZyB1bnNvcnRhYmxlCisgIGVsZW1lbnRzIGluIHB5
dGhvbiAyLiBUaGFua3MgRWRpc29uIEd1c3Rhdm8gTXVlbnouCisKKy0gZml4IGlzc3VlNzU2LCBm
aXggaXNzdWU3NTIgKGFuZCBzaW1pbGFyIGlzc3Vlcyk6IGRlcGVuZCBvbiBweS0xLjQuMjkKKyAg
d2hpY2ggaGFzIGEgcmVmaW5lZCBhbGdvcml0aG0gZm9yIHRyYWNlYmFjayBnZW5lcmF0aW9uLgor
CisKKzIuNy4xIChjb21wYXJlZCB0byAyLjcuMCkKKz09PT09PT09PT09PT09PT09PT09PT09PT09
PT09CisKKy0gZml4IGlzc3VlNzMxOiBkbyBub3QgZ2V0IGNvbmZ1c2VkIGJ5IHRoZSBicmFjZXMg
d2hpY2ggbWF5IGJlIHByZXNlbnQKKyAgYW5kIHVuYmFsYW5jZWQgaW4gYW4gb2JqZWN0J3MgcmVw
ciB3aGlsZSBjb2xsYXBzaW5nIEZhbHNlCisgIGV4cGxhbmF0aW9ucy4gIFRoYW5rcyBDYXJsIE1l
eWVyIGZvciB0aGUgcmVwb3J0IGFuZCB0ZXN0IGNhc2UuCisKKy0gZml4IGlzc3VlNTUzOiBwcm9w
ZXJseSBoYW5kbGluZyBpbnNwZWN0LmdldHNvdXJjZWxpbmVzIGZhaWx1cmVzIGluCisgIEZpeHR1
cmVMb29rdXBFcnJvciB3aGljaCB3b3VsZCBsZWFkIHRvIHRvIGFuIGludGVybmFsIGVycm9yLAor
ICBvYmZ1c2NhdGluZyB0aGUgb3JpZ2luYWwgcHJvYmxlbS4gVGhhbmtzIHRhbGxqb3NoIGZvciBp
bml0aWFsCisgIGRpYWdub3NlL3BhdGNoIGFuZCBCcnVubyBPbGl2ZWlyYSBmb3IgZmluYWwgcGF0
Y2guCisKKy0gZml4IGlzc3VlNjYwOiBwcm9wZXJseSByZXBvcnQgc2NvcGUtbWlzbWF0Y2gtYWNj
ZXNzIGVycm9ycworICBpbmRlcGVuZGVudGx5IGZyb20gb3JkZXJpbmcgb2YgZml4dHVyZSBhcmd1
bWVudHMuICBBbHNvCisgIGF2b2lkIHRoZSBweXRlc3QgaW50ZXJuYWwgdHJhY2ViYWNrIHdoaWNo
IGRvZXMgbm90IHByb3ZpZGUKKyAgaW5mb3JtYXRpb24gdG8gdGhlIHVzZXIuIFRoYW5rcyBIb2xn
ZXIgS3Jla2VsLgorCistIHN0cmVhbWxpbmVkIGFuZCBkb2N1bWVudGVkIHJlbGVhc2UgcHJvY2Vz
cy4gIEFsc28gYWxsIHZlcnNpb25zCisgIChpbiBzZXR1cC5weSBhbmQgZG9jdW1lbnRhdGlvbiBn
ZW5lcmF0aW9uKSBhcmUgbm93IHJlYWQKKyAgZnJvbSBfcHl0ZXN0L19faW5pdF9fLnB5LiBUaGFu
a3MgSG9sZ2VyIEtyZWtlbC4KKworLSBmaXhlZCBkb2NzIHRvIHJlbW92ZSB0aGUgbm90aW9uIHRo
YXQgeWllbGQtZml4dHVyZXMgYXJlIGV4cGVyaW1lbnRhbC4KKyAgVGhleSBhcmUgaGVyZSB0byBz
dGF5IDopICBUaGFua3MgQnJ1bm8gT2xpdmVpcmEuCisKKy0gU3VwcG9ydCBidWlsZGluZyB3aGVl
bHMgYnkgdXNpbmcgZW52aXJvbm1lbnQgbWFya2VycyBmb3IgdGhlCisgIHJlcXVpcmVtZW50cy4g
IFRoYW5rcyBJb25lbCBNYXJpZXMgQ3Jpc3RpYW4uCisKKy0gZml4ZWQgcmVncmVzc2lvbiB0byAy
LjYuNCB3aGljaCBzdXJmYWNlZCBlLmcuIGluIGxvc3Qgc3Rkb3V0IGNhcHR1cmUgcHJpbnRpbmcK
KyAgd2hlbiB0ZXN0cyByYWlzZWQgU3lzdGVtRXhpdC4gVGhhbmtzIEhvbGdlciBLcmVrZWwuCisK
Ky0gcmVpbnRyb2R1Y2VkIF9weXRlc3QgZml4dHVyZSBvZiB0aGUgcHl0ZXN0ZXIgcGx1Z2luIHdo
aWNoIGlzIHVzZWQKKyAgYXQgbGVhc3QgYnkgcHl0ZXN0LXhkaXN0LgorCisyLjcuMCAoY29tcGFy
ZWQgdG8gMi42LjQpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCistIGZpeCBpc3N1
ZTQzNTogbWFrZSByZWxvYWQoKSB3b3JrIHdoZW4gYXNzZXJ0IHJld3JpdGluZyBpcyBhY3RpdmUu
CisgIFRoYW5rcyBEYW5pZWwgSGFobGVyLgorCistIGZpeCBpc3N1ZTYxNjogY29uZnRlc3QucHkg
ZmlsZXMgYW5kIHRoZWlyIGNvbnRhaW5lZCBmaXh1dHJlcyBhcmUgbm93CisgIHByb3Blcmx5IGNv
bnNpZGVyZWQgZm9yIHZpc2liaWxpdHksIGluZGVwZW5kZW50bHkgZnJvbSB0aGUgZXhhY3QKKyAg
Y3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBhbmQgdGVzdCBhcmd1bWVudHMgdGhhdCBhcmUgdXNl
ZC4KKyAgTWFueSB0aGFua3MgdG8gRXJpYyBTaWVnZXJtYW4gYW5kIGhpcyBQUjIzNSB3aGljaCBj
b250YWlucworICBzeXN0ZW1hdGljIHRlc3RzIGZvciBjb25mdGVzdCB2aXNpYmlsaXR5IGFuZCBu
b3cgcGFzc2VzLgorICBUaGlzIGNoYW5nZSBhbHNvIGludHJvZHVjZXMgdGhlIGNvbmNlcHQgb2Yg
YSBgYHJvb3RkaXJgYCB3aGljaAorICBpcyBwcmludGVkIGFzIGEgbmV3IHB5dGVzdCBoZWFkZXIg
YW5kIGRvY3VtZW50ZWQgaW4gdGhlIHB5dGVzdAorICBjdXN0b21pemUgd2ViIHBhZ2UuCisKKy0g
Y2hhbmdlIHJlcG9ydGluZyBvZiAiZGl2ZXJ0ZWQiIHRlc3RzLCBpLmUuIHRlc3RzIHRoYXQgYXJl
IGNvbGxlY3RlZAorICBpbiBvbmUgZmlsZSBidXQgYWN0dWFsbHkgY29tZSBmcm9tIGFub3RoZXIg
KGUuZy4gd2hlbiB0ZXN0cyBpbiBhIHRlc3QgY2xhc3MKKyAgY29tZSBmcm9tIGEgYmFzZSBjbGFz
cyBpbiBhIGRpZmZlcmVudCBmaWxlKS4gIFdlIG5vdyBzaG93IHRoZSBub2RlaWQKKyAgYW5kIGlu
ZGljYXRlIHZpYSBhIHBvc3RmaXggdGhlIG90aGVyIGZpbGUuCisKKy0gYWRkIGFiaWxpdHkgdG8g
c2V0IGNvbW1hbmQgbGluZSBvcHRpb25zIGJ5IGVudmlyb25tZW50IHZhcmlhYmxlIFBZVEVTVF9B
RERPUFRTLgorCistIGFkZGVkIGRvY3VtZW50YXRpb24gb24gdGhlIG5ldyBweXRlc3QtZGV2IHRl
YW1zIG9uIGJpdGJ1Y2tldCBhbmQKKyAgZ2l0aHViLiAgU2VlIGh0dHBzOi8vcHl0ZXN0Lm9yZy9s
YXRlc3QvY29udHJpYnV0aW5nLmh0bWwgLgorICBUaGFua3MgdG8gQW5hdG9seSBmb3IgcHVzaGlu
ZyBhbmQgaW5pdGlhbCB3b3JrIG9uIHRoaXMuCisKKy0gZml4IGlzc3VlNjUwOiBuZXcgb3B0aW9u
IGBgLS1kb2N0dGVzdC1pZ25vcmUtaW1wb3J0LWVycm9yc2BgIHdoaWNoCisgIHdpbGwgdHVybiBp
bXBvcnQgZXJyb3JzIGluIGRvY3Rlc3RzIGludG8gc2tpcHMuICBUaGFua3MgQ2hhcmxlcyBDbG91
ZAorICBmb3IgdGhlIGNvbXBsZXRlIFBSLgorCistIGZpeCBpc3N1ZTY1NTogd29yayBhcm91bmQg
ZGlmZmVyZW50IHdheXMgdGhhdCBjYXVzZSBweXRob24yLzMKKyAgdG8gbGVhayBzeXMuZXhjX2lu
Zm8gaW50byBmaXh0dXJlcy90ZXN0cyBjYXVzaW5nIGZhaWx1cmVzIGluIDNyZCBwYXJ0eSBjb2Rl
CisKKy0gZml4IGlzc3VlNjE1OiBhc3NlcnRpb24gcmUtd3JpdGluZyBkaWQgbm90IGNvcnJlY3Rs
eSBlc2NhcGUgJSBzaWducworICB3aGVuIGZvcm1hdHRpbmcgYm9vbGVhbiBvcGVyYXRpb25zLCB3
aGljaCB0cmlwcGVkIG92ZXIgbWl4aW5nCisgIGJvb2xlYW5zIHdpdGggbW9kdWxvIG9wZXJhdG9y
cy4gIFRoYW5rcyB0byBUb20gVmluZXIgZm9yIHRoZSByZXBvcnQsCisgIHRyaWFnaW5nIGFuZCBm
aXguCisKKy0gaW1wbGVtZW50IGlzc3VlMzUxOiBhZGQgYWJpbGl0eSB0byBzcGVjaWZ5IHBhcmFt
ZXRyaXplIGlkcyBhcyBhIGNhbGxhYmxlCisgIHRvIGdlbmVyYXRlIGN1c3RvbSB0ZXN0IGlkcy4g
IFRoYW5rcyBCcmlhbm5hIExhdWdoZXIgZm9yIHRoZSBpZGVhIGFuZAorICBpbXBsZW1lbnRhdGlv
bi4KKworLSBpbnRyb2R1Y2UgYW5kIGRvY3VtZW50IG5ldyBob29rd3JhcHBlciBtZWNoYW5pc20g
dXNlZnVsIGZvciBwbHVnaW5zCisgIHdoaWNoIHdhbnQgdG8gd3JhcCB0aGUgZXhlY3V0aW9uIG9m
IGNlcnRhaW4gaG9va3MgZm9yIHRoZWlyIHB1cnBvc2VzLgorICBUaGlzIHN1cGVyc2VkZXMgdGhl
IHVuZG9jdW1lbnRlZCBgYF9fbXVsdGljYWxsX19gYCBwcm90b2NvbCB3aGljaAorICBweXRlc3Qg
aXRzZWxmIGFuZCBzb21lIGV4dGVybmFsIHBsdWdpbnMgdXNlLiAgTm90ZSB0aGF0IHB5dGVzdC0y
LjgKKyAgaXMgc2NoZWR1bGVkIHRvIGRyb3Agc3VwcG9ydGluZyB0aGUgb2xkIGBgX19tdWx0aWNh
bGxfX2BgCisgIGFuZCBvbmx5IHN1cHBvcnQgdGhlIGhvb2t3cmFwcGVyIHByb3RvY29sLgorCist
IG1ham9ybHkgc3BlZWQgdXAgaW52b2NhdGlvbiBvZiBwbHVnaW4gaG9va3MKKworLSB1c2UgaG9v
a3dyYXBwZXIgbWVjaGFuaXNtIGluIGJ1aWx0aW4gcHl0ZXN0IHBsdWdpbnMuCisKKy0gYWRkIGEg
ZG9jdGVzdCBpbmkgb3B0aW9uIGZvciBkb2N0ZXN0IGZsYWdzLCB0aGFua3MgSG9sZ2VyIFBldGVy
cy4KKworLSBhZGQgbm90ZSB0byBkb2NzIHRoYXQgaWYgeW91IHdhbnQgdG8gbWFyayBhIHBhcmFt
ZXRlciBhbmQgdGhlCisgIHBhcmFtZXRlciBpcyBhIGNhbGxhYmxlLCB5b3UgYWxzbyBuZWVkIHRv
IHBhc3MgaW4gYSByZWFzb24gdG8gZGlzYW1iaWd1YXRlCisgIGl0IGZyb20gdGhlICJkZWNvcmF0
b3IiIGNhc2UuICBUaGFua3MgVG9tIFZpbmVyLgorCistICJweXRob25fY2xhc3NlcyIgYW5kICJw
eXRob25fZnVuY3Rpb25zIiBvcHRpb25zIG5vdyBzdXBwb3J0IGdsb2ItcGF0dGVybnMKKyAgZm9y
IHRlc3QgZGlzY292ZXJ5LCBhcyBkaXNjdXNzZWQgaW4gaXNzdWU2MDAuIFRoYW5rcyBMZGlhcnkg
VHJhbnNsYXRpb25zLgorCistIGFsbG93IHRvIG92ZXJyaWRlIHBhcmFtZXRyaXplZCBmaXh0dXJl
cyB3aXRoIG5vbi1wYXJhbWV0cml6ZWQgb25lcyBhbmQgdmljZSB2ZXJzYSAoYnViZW5rb2ZmKS4K
KworLSBmaXggaXNzdWU0NjM6IHJhaXNlIHNwZWNpZmljIGVycm9yIGZvciAncGFyYW1ldGVyaXpl
JyBtaXNzcGVsbGluZyAocGZjdGRheWVsaXNlKS4KKworLSBPbiBmYWlsdXJlLCB0aGUgYGBzeXMu
bGFzdF92YWx1ZWBgLCBgYHN5cy5sYXN0X3R5cGVgYCBhbmQKKyAgYGBzeXMubGFzdF90cmFjZWJh
Y2tgYCBhcmUgc2V0LCBzbyB0aGF0IGEgdXNlciBjYW4gaW5zcGVjdCB0aGUgZXJyb3IKKyAgdmlh
IHBvc3Rtb3J0ZW0gZGVidWdnaW5nIChhbG1hcmtsZWluKS4KKworMi42LjQKKz09PT09CisKKy0g
SW1wcm92ZSBhc3NlcnRpb24gZmFpbHVyZSByZXBvcnRpbmcgb24gaXRlcmFibGVzLCBieSB1c2lu
ZyBuZGlmZiBhbmQKKyAgcHByaW50LgorCistIHJlbW92ZWQgb3V0ZGF0ZWQgamFwYW5lc2UgZG9j
cyBmcm9tIHNvdXJjZSB0cmVlLgorCistIGRvY3MgZm9yICJweXRlc3RfYWRkaG9va3MiIGhvb2su
ICBUaGFua3MgQnJ1bm8gT2xpdmVpcmEuCisKKy0gdXBkYXRlZCBwbHVnaW4gaW5kZXggZG9jcy4g
IFRoYW5rcyBCcnVubyBPbGl2ZWlyYS4KKworLSBmaXggaXNzdWU1NTc6IHdpdGggIi1rIiB3ZSBv
bmx5IGFsbG93IHRoZSBvbGQgc3R5bGUgIi0iIGZvciBuZWdhdGlvbgorICBhdCB0aGUgYmVnaW5u
aW5nIG9mIHN0cmluZ3MgYW5kIGV2ZW4gdGhhdCBpcyBkZXByZWNhdGVkLiAgVXNlICJub3QiIGlu
c3RlYWQuCisgIFRoaXMgc2hvdWxkIGFsbG93IHRvIHBpY2sgcGFyYW1ldHJpemVkIHRlc3RzIHdo
ZXJlICItIiBhcHBlYXJlZCBpbiB0aGUgcGFyYW1ldGVyLgorCistIGZpeCBpc3N1ZTYwNDogRXNj
YXBlICUgY2hhcmFjdGVyIGluIHRoZSBhc3NlcnRpb24gbWVzc2FnZS4KKworLSBmaXggaXNzdWU2
MjA6IGFkZCBleHBsYW5hdGlvbiBpbiB0aGUgLS1nZW5zY3JpcHQgdGFyZ2V0IGFib3V0IHdoYXQK
KyAgdGhlIGJpbmFyeSBibG9iIG1lYW5zLiBUaGFua3MgRGludSBHaGVybWFuLgorCistIGZpeCBp
c3N1ZTYxNDogZml4ZWQgcGFzdGViaW4gc3VwcG9ydC4KKworCistIGZpeCBpc3N1ZTYyMDogYWRk
IGV4cGxhbmF0aW9uIGluIHRoZSAtLWdlbnNjcmlwdCB0YXJnZXQgYWJvdXQgd2hhdAorICB0aGUg
YmluYXJ5IGJsb2IgbWVhbnMuIFRoYW5rcyBEaW51IEdoZXJtYW4uCisKKy0gZml4IGlzc3VlNjE0
OiBmaXhlZCBwYXN0ZWJpbiBzdXBwb3J0LgorCisyLjYuMworPT09PT0KKworLSBmaXggaXNzdWU1
NzU6IHh1bml0LXhtbCB3YXMgcmVwb3J0aW5nIGNvbGxlY3Rpb24gZXJyb3JzIGFzIGZhaWx1cmVz
CisgIGluc3RlYWQgb2YgZXJyb3JzLCB0aGFua3MgT2xlZyBTaW55YXZza2l5LgorCistIGZpeCBp
c3N1ZTU4MjogZml4IHNldHVwdG9vbHMgZXhhbXBsZSwgdGhhbmtzIExhc3psbyBQYXBwIGFuZCBS
b25ueQorICBQZmFubnNjaG1pZHQuCisKKy0gRml4IGluZmluaXRlIHJlY3Vyc2lvbiBidWcgd2hl
biBwaWNrbGluZyBjYXB0dXJlLkVuY29kZWRGaWxlLCB0aGFua3MKKyAgVXdlIFNjaG1pdHQuCisK
Ky0gZml4IGlzc3VlNTg5OiBmaXggYmFkIGludGVyYWN0aW9uIHdpdGggbnVtcHkgYW5kIG90aGVy
cyB3aGVuIHNob3dpbmcKKyAgZXhjZXB0aW9ucy4gIENoZWNrIGZvciBwcmVjaXNlICJtYXhpbXVt
IHJlY3Vyc2lvbiBkZXB0aCBleGNlZWQiIGV4Y2VwdGlvbgorICBpbnN0ZWFkIG9mIHByZXN1bWlu
ZyBhbnkgUnVudGltZUVycm9yIGlzIHRoYXQgb25lIChpbXBsZW1lbnRlZCBpbiBweQorICBkZXAp
LiAgVGhhbmtzIENoYXJsZXMgQ2xvdWQgZm9yIGFuYWx5c2luZyB0aGUgaXNzdWUuCisKKy0gZml4
IGNvbmZ0ZXN0IHJlbGF0ZWQgZml4dHVyZSB2aXNpYmlsaXR5IGlzc3VlOiB3aGVuIHJ1bm5pbmcg
d2l0aCBhCisgIENXRCBvdXRzaWRlIGEgdGVzdCBwYWNrYWdlIHB5dGVzdCB3b3VsZCBnZXQgZml4
dHVyZSBkaXNjb3Zlcnkgd3JvbmcuCisgIFRoYW5rcyB0byBXb2xmZ2FuZyBTY2huZXJyaW5nIGZv
ciBmaWd1cmluZyBvdXQgYSByZXByb2R1Y2FibGUgZXhhbXBsZS4KKworLSBJbnRyb2R1Y2UgcHl0
ZXN0X2VudGVyX3BkYiBob29rIChuZWVkZWQgZS5nLiBieSBweXRlc3RfdGltZW91dCB0byBjYW5j
ZWwgdGhlCisgIHRpbWVvdXQgd2hlbiBpbnRlcmFjdGl2ZWx5IGVudGVyaW5nIHBkYikuICBUaGFu
a3MgV29sZmdhbmcgU2NobmVycmluZy4KKworLSBjaGVjayB4ZmFpbC9za2lwIGFsc28gd2l0aCBu
b24tcHl0aG9uIGZ1bmN0aW9uIHRlc3QgaXRlbXMuIFRoYW5rcworICBGbG9yaXMgQnJ1eW5vb2do
ZS4KKworMi42LjIKKz09PT09CisKKy0gQWRkZWQgZnVuY3Rpb24gcHl0ZXN0LmZyZWV6ZV9pbmNs
dWRlcygpLCB3aGljaCBtYWtlcyBpdCBlYXN5IHRvIGVtYmVkCisgIHB5dGVzdCBpbnRvIGV4ZWN1
dGFibGVzIHVzaW5nIHRvb2xzIGxpa2UgY3hfZnJlZXplLgorICBTZWUgZG9jcyBmb3IgZXhhbXBs
ZXMgYW5kIHJhdGlvbmFsZS4gVGhhbmtzIEJydW5vIE9saXZlaXJhLgorCistIEltcHJvdmUgYXNz
ZXJ0aW9uIHJld3JpdGluZyBjYWNoZSBpbnZhbGlkYXRpb24gcHJlY2lzaW9uLgorCistIGZpeGVk
IGlzc3VlNTYxOiBhZGFwdCBhdXRvdXNlIGZpeHR1cmUgZXhhbXBsZSBmb3IgcHl0aG9uMy4KKwor
LSBmaXhlZCBpc3N1ZTQ1MzogYXNzZXJ0aW9uIHJld3JpdGluZyBpc3N1ZSB3aXRoIF9fcmVwcl9f
IGNvbnRhaW5pbmcKKyAgIlxueyIsICJcbn0iIGFuZCAiXG5+Ii4KKworLSBmaXggaXNzdWU1NjA6
IGNvcnJlY3RseSBkaXNwbGF5IGNvZGUgaWYgYW4gImVsc2U6IiBvciAiZmluYWxseToiIGlzCisg
IGZvbGxvd2VkIGJ5IHN0YXRlbWVudHMgb24gdGhlIHNhbWUgbGluZS4KKworLSBGaXggZXhhbXBs
ZSBpbiBtb25rZXlwYXRjaCBkb2N1bWVudGF0aW9uLCB0aGFua3MgdC04Y2guCisKKy0gZml4IGlz
c3VlNTcyOiBjb3JyZWN0IHRtcGRpciBkb2MgZXhhbXBsZSBmb3IgcHl0aG9uMy4KKworLSBEbyBu
b3QgbWFyayBhcyB1bml2ZXJzYWwgd2hlZWwgYmVjYXVzZSBQeXRob24gMi42IGlzIGRpZmZlcmVu
dCBmcm9tCisgIG90aGVyIGJ1aWxkcyBkdWUgdG8gdGhlIGV4dHJhIGFyZ3BhcnNlIGRlcGVuZGVu
Y3kuICBGaXhlcyBpc3N1ZTU2Ni4KKyAgVGhhbmtzIHNvbnRlay4KKworLSBJbXBsZW1lbnQgaXNz
dWU1NDk6IHVzZXItcHJvdmlkZWQgYXNzZXJ0aW9uIG1lc3NhZ2VzIG5vdyBubyBsb25nZXIKKyAg
cmVwbGFjZSB0aGUgcHkudGVzdCBpbnRyb3NwZWN0aW9uIG1lc3NhZ2UgYnV0IGFyZSBzaG93biBp
biBhZGRpdGlvbgorICB0byB0aGVtLgorCisyLjYuMQorPT09PT0KKworLSBObyBsb25nZXIgc2hv
dyBsaW5lIG51bWJlcnMgaW4gdGhlIC0tdmVyYm9zZSBvdXRwdXQsIHRoZSBvdXRwdXQgaXMgbm93
CisgIHB1cmVseSB0aGUgbm9kZWlkLiAgVGhlIGxpbmUgbnVtYmVyIGlzIHN0aWxsIHNob3duIGlu
IGZhaWx1cmUgcmVwb3J0cy4KKyAgVGhhbmtzIEZsb3JpcyBCcnV5bm9vZ2hlLgorCistIGZpeCBp
c3N1ZTQzNyB3aGVyZSBhc3NlcnRpb24gcmV3cml0aW5nIGNvdWxkIGNhdXNlIHB5dGVzdC14ZGlz
dCBzbGF2ZXMKKyAgdG8gY29sbGVjdCBkaWZmZXJlbnQgdGVzdHMuIFRoYW5rcyBCcnVubyBPbGl2
ZWlyYS4KKworLSBmaXggaXNzdWU1NTU6IGFkZCAiZXJyb3JzIiBhdHRyaWJ1dGUgdG8gY2FwdHVy
ZS1zdHJlYW1zIHRvIHNhdGlzZnkKKyAgc29tZSBkaXN0dXRpbHMgYW5kIHBvc3NpYmx5IG90aGVy
IGNvZGUgYWNjZXNzaW5nIHN5cy5zdGRvdXQuZXJyb3JzLgorCistIGZpeCBpc3N1ZTU0NyBjYXBz
eXMvY2FwZmQgYWxzbyB3b3JrIHdoZW4gb3V0cHV0IGNhcHR1cmluZyAoIi1zIikgaXMgZGlzYWJs
ZWQuCisKKy0gYWRkcmVzcyBpc3N1ZTE3MDogYWxsb3cgcHl0ZXN0Lm1hcmsueGZhaWwoLi4uKSB0
byBzcGVjaWZ5IGV4cGVjdGVkIGV4Y2VwdGlvbnMgdmlhCisgIGFuIG9wdGlvbmFsICJyYWlzZXM9
RVhDIiBhcmd1bWVudCB3aGVyZSBFWEMgY2FuIGJlIGEgc2luZ2xlIGV4Y2VwdGlvbgorICBvciBh
IHR1cGxlIG9mIGV4Y2VwdGlvbiBjbGFzc2VzLiAgVGhhbmtzIERhdmlkIE1vaHIgZm9yIHRoZSBj
b21wbGV0ZQorICBQUi4KKworLSBmaXggaW50ZWdyYXRpb24gb2YgcHl0ZXN0IHdpdGggdW5pdHRl
c3QubW9jay5wYXRjaCBkZWNvcmF0b3Igd2hlbgorICBpdCB1c2VzIHRoZSAibmV3IiBhcmd1bWVu
dC4gIFRoYW5rcyBOaWNvbGFzIERlbGFieSBmb3IgdGVzdCBhbmQgUFIuCisKKy0gZml4IGlzc3Vl
IHdpdGggZGV0ZWN0aW5nIGNvbmZ0ZXN0IGZpbGVzIGlmIHRoZSBhcmd1bWVudHMgY29udGFpbgor
ICAiOjoiIG5vZGUgaWQgc3BlY2lmaWNhdGlvbnMgKGNvcHkgcGFzdGVkIGZyb20gIi12IiBvdXRw
dXQpCisKKy0gZml4IGlzc3VlNTQ0IGJ5IG9ubHkgcmVtb3ZpbmcgIkBOVU0iIGF0IHRoZSBlbmQg
b2YgIjo6IiBzZXBhcmF0ZWQgcGFydHMKKyAgYW5kIGlmIHRoZSBwYXJ0IGhhcyBhbiAiLnB5IiBl
eHRlbnNpb24KKworLSBkb24ndCB1c2UgcHkuc3RkIGltcG9ydCBoZWxwZXIsIHJhdGhlciBpbXBv
cnQgdGhpbmdzIGRpcmVjdGx5LgorICBUaGFua3MgQnJ1bm8gT2xpdmVpcmEuCisKKzIuNgorPT09
CisKKy0gQ2FjaGUgZXhjZXB0aW9ucyBmcm9tIGZpeHR1cmVzIGFjY29yZGluZyB0byB0aGVpciBz
Y29wZSAoaXNzdWUgNDY3KS4KKworLSBmaXggaXNzdWU1Mzc6IEF2b2lkIGltcG9ydGluZyBvbGQg
YXNzZXJ0aW9uIHJlaW50ZXJwcmV0YXRpb24gY29kZSBieSBkZWZhdWx0LgorCistIGZpeCBpc3N1
ZTM2NDogc2hvcnRlbiBhbmQgZW5oYW5jZSB0cmFjZWJhY2tzIHJlcHJlc2VudGF0aW9uIGJ5IGRl
ZmF1bHQuCisgIFRoZSBuZXcgIi0tdGI9YXV0byIgb3B0aW9uIChkZWZhdWx0KSB3aWxsIG9ubHkg
ZGlzcGxheSBsb25nIHRyYWNlYmFja3MKKyAgZm9yIHRoZSBmaXJzdCBhbmQgbGFzdCBlbnRyeS4g
IFlvdSBjYW4gZ2V0IHRoZSBvbGQgYmVoYXZpb3VyIG9mIHByaW50aW5nCisgIGFsbCBlbnRyaWVz
IGFzIGxvbmcgZW50cmllcyB3aXRoICItLXRiPWxvbmciLiAgQWxzbyBzaG9ydCBlbnRyaWVzIGJ5
CisgIGRlZmF1bHQgYXJlIG5vdyBwcmludGVkIHZlcnkgc2ltaWxhcmx5IHRvICItLXRiPW5hdGl2
ZSIgb25lcy4KKworLSBmaXggaXNzdWU1MTQ6IHRlYWNoIGFzc2VydGlvbiByZWludGVycHJldGF0
aW9uIGFib3V0IHByaXZhdGUgY2xhc3MgYXR0cmlidXRlcworCistIGNoYW5nZSAtdiBvdXRwdXQg
dG8gaW5jbHVkZSBmdWxsIG5vZGUgSURzIG9mIHRlc3RzLiAgVXNlcnMgY2FuIGNvcHkKKyAgYSBu
b2RlIElEIGZyb20gYSB0ZXN0IHJ1biwgaW5jbHVkaW5nIGxpbmUgbnVtYmVyLCBhbmQgdXNlIGl0
IGFzIGEKKyAgcG9zaXRpb25hbCBhcmd1bWVudCBpbiBvcmRlciB0byBydW4gb25seSBhIHNpbmds
ZSB0ZXN0LgorCistIGZpeCBpc3N1ZSA0NzU6IGZhaWwgZWFybHkgYW5kIGNvbXByZWhlbnNpYmxl
IGlmIGNhbGxpbmcKKyAgcHl0ZXN0LnJhaXNlcyB3aXRoIHdyb25nIGV4Y2VwdGlvbiB0eXBlLgor
CistIGZpeCBpc3N1ZTUxNjogdGVsbCBpbiBnZXR0aW5nLXN0YXJ0ZWQgYWJvdXQgY3VycmVudCBk
ZXBlbmRlbmNpZXMuCisKKy0gY2xlYW51cCBzZXR1cC5weSBhIGJpdCBhbmQgc3BlY2lmeSBzdXBw
b3J0ZWQgdmVyc2lvbnMuIFRoYW5rcyBKdXJrbworICBHb3Nwb2RuZXRpYyBmb3IgdGhlIFBSLgor
CistIGNoYW5nZSBYUEFTUyBjb2xvdXIgdG8geWVsbG93IHJhdGhlciB0aGVuIHJlZCB3aGVuIHRl
c3RzIGFyZSBydW4KKyAgd2l0aCAtdi4KKworLSBmaXggaXNzdWU0NzM6IHdvcmsgYXJvdW5kIG1v
Y2sgcHV0dGluZyBhbiB1bmJvdW5kIG1ldGhvZCBpbnRvIGEgY2xhc3MKKyAgZGljdCB3aGVuIGRv
dWJsZS1wYXRjaGluZy4KKworLSBmaXggaXNzdWU0OTg6IGlmIGEgZml4dHVyZSBmaW5hbGl6ZXIg
ZmFpbHMsIG1ha2Ugc3VyZSB0aGF0CisgIHRoZSBmaXh0dXJlIGlzIHN0aWxsIGludmFsaWRhdGVk
LgorCistIGZpeCBpc3N1ZTQ1MzogdGhlIHJlc3VsdCBvZiB0aGUgcHl0ZXN0X2Fzc2VydHJlcHJf
Y29tcGFyZSBob29rIG5vdyBnZXRzCisgIGl0J3MgbmV3bGluZXMgZXNjYXBlZCBzbyB0aGF0IGZv
cm1hdF9leGNlcHRpb24gZG9lcyBub3QgYmxvdyB1cC4KKworLSBpbnRlcm5hbCBuZXcgd2Fybmlu
ZyBzeXN0ZW06IHB5dGVzdCB3aWxsIG5vdyBwcm9kdWNlIHdhcm5pbmdzIHdoZW4KKyAgaXQgZGV0
ZWN0cyBvZGRpdGllcyBpbiB5b3VyIHRlc3QgY29sbGVjdGlvbiBvciBleGVjdXRpb24uCisgIFdh
cm5pbmdzIGFyZSB1bHRpbWF0ZWx5IHNlbnQgdG8gYSBuZXcgcHl0ZXN0X2xvZ3dhcm5pbmcgaG9v
ayB3aGljaCBpcworICBjdXJyZW50bHkgb25seSBpbXBsZW1lbnRlZCBieSB0aGUgdGVybWluYWwg
cGx1Z2luIHdoaWNoIGRpc3BsYXlzCisgIHdhcm5pbmdzIGluIHRoZSBzdW1tYXJ5IGxpbmUgYW5k
IHNob3dzIG1vcmUgZGV0YWlscyB3aGVuIC1ydyAocmVwb3J0IG9uCisgIHdhcm5pbmdzKSBpcyBz
cGVjaWZpZWQuCisKKy0gY2hhbmdlIHNraXBzIGludG8gd2FybmluZ3MgZm9yIHRlc3QgY2xhc3Nl
cyB3aXRoIGFuIF9faW5pdF9fIGFuZAorICBjYWxsYWJsZXMgaW4gdGVzdCBtb2R1bGVzIHdoaWNo
IGxvb2sgbGlrZSBhIHRlc3QgYnV0IGFyZSBub3QgZnVuY3Rpb25zLgorCistIGZpeCBpc3N1ZTQz
NjogaW1wcm92ZWQgZmluZGluZyBvZiBpbml0aWFsIGNvbmZ0ZXN0IGZpbGVzIGZyb20gY29tbWFu
ZAorICBsaW5lIGFyZ3VtZW50cyBieSB1c2luZyB0aGUgcmVzdWx0IG9mIHBhcnNlX2tub3duX2Fy
Z3MgcmF0aGVyIHRoYW4KKyAgdGhlIHByZXZpb3VzIGZsYWt5IGhldXJpc3RpY3MuICBUaGFua3Mg
TWFyYyBBYnJhbW93aXR6IGZvciB0ZXN0cworICBhbmQgaW5pdGlhbCBmaXhpbmcgYXBwcm9hY2hl
cyBpbiB0aGlzIGFyZWEuCisKKy0gZml4IGlzc3VlICM0Nzk6IHByb3Blcmx5IGhhbmRsZSBub3Nl
L3VuaXR0ZXN0KDIpIFNraXBUZXN0IGV4Y2VwdGlvbnMKKyAgZHVyaW5nIGNvbGxlY3Rpb24vbG9h
ZGluZyBvZiB0ZXN0IG1vZHVsZXMuICBUaGFua3MgdG8gTWFyYyBTY2hsYWljaAorICBmb3IgdGhl
IGNvbXBsZXRlIFBSLgorCistIGZpeCBpc3N1ZTQ5MDogaW5jbHVkZSBweXRlc3RfbG9hZF9pbml0
aWFsX2NvbmZ0ZXN0cyBpbiBkb2N1bWVudGF0aW9uCisgIGFuZCBpbXByb3ZlIGRvY3N0cmluZy4K
KworLSBmaXggaXNzdWU0NzI6IGNsYXJpZnkgdGhhdCBgYHB5dGVzdC5jb25maWcuZ2V0dmFsdWUo
KWBgIGNhbm5vdCB3b3JrCisgIGlmIGl0J3MgdHJpZ2dlcmVkIGFoZWFkIG9mIGNvbW1hbmQgbGlu
ZSBwYXJzaW5nLgorCistIG1lcmdlIFBSMTIzOiBpbXByb3ZlZCBpbnRlZ3JhdGlvbiB3aXRoIG1v
Y2sucGF0Y2ggZGVjb3JhdG9yIG9uIHRlc3RzLgorCistIGZpeCBpc3N1ZTQxMjogbWVzc2luZyB3
aXRoIHN0ZG91dC9zdGRlcnIgRkQtbGV2ZWwgc3RyZWFtcyBpcyBub3cKKyAgY2FwdHVyZWQgd2l0
aG91dCBjcmFzaGVzLgorCistIGZpeCBpc3N1ZTQ4MzogdHJpYWwvcHkzMyB3b3JrcyBub3cgcHJv
cGVybHkuICBUaGFua3MgRGFuaWVsIEdyYW5hIGZvciBQUi4KKworLSBpbXByb3ZlIGV4YW1wbGUg
Zm9yIHB5dGVzdCBpbnRlZ3JhdGlvbiB3aXRoICJweXRob24gc2V0dXAucHkgdGVzdCIKKyAgd2hp
Y2ggbm93IGhhcyBhIGdlbmVyaWMgIi1hIiBvciAiLS1weXRlc3QtYXJncyIgb3B0aW9uIHdoZXJl
IHlvdQorICBjYW4gcGFzcyBhZGRpdGlvbmFsIG9wdGlvbnMgYXMgYSBxdW90ZWQgc3RyaW5nLiAg
VGhhbmtzIFRyZXZvciBCZWtvbGF5LgorCistIHNpbXBsaWZpZWQgaW50ZXJuYWwgY2FwdHVyaW5n
IG1lY2hhbmlzbSBhbmQgbWFkZSBpdCBtb3JlIHJvYnVzdAorICBhZ2FpbnN0IHRlc3RzIG9yIHNl
dHVwcyBjaGFuZ2luZyBGRDEvRkQyLCBhbHNvIGJldHRlciBpbnRlZ3JhdGVkCisgIG5vdyB3aXRo
IHB5dGVzdC5wZGIoKSBpbiBzaW5nbGUgdGVzdHMuCisKKy0gaW1wcm92ZW1lbnRzIHRvIHB5dGVz
dCdzIG93biB0ZXN0LXN1aXRlIGxlYWthZ2UgZGV0ZWN0aW9uLCBjb3VydGVzeSBvZiBQUnMKKyAg
ZnJvbSBNYXJjIEFicmFtb3dpdHoKKworLSBmaXggaXNzdWU0OTI6IGF2b2lkIGxlYWsgaW4gdGVz
dF93cml0ZW9yZy4gIFRoYW5rcyBNYXJjIEFicmFtb3dpdHouCisKKy0gZml4IGlzc3VlNDkzOiBk
b24ndCBydW4gdGVzdHMgaW4gZG9jIGRpcmVjdG9yeSB3aXRoIGBgcHl0aG9uIHNldHVwLnB5IHRl
c3RgYAorICAodXNlIHRveCAtZSBkb2N0ZXN0aW5nIGZvciB0aGF0KQorCistIGZpeCBpc3N1ZTQ4
NjogYmV0dGVyIHJlcG9ydGluZyBhbmQgaGFuZGxpbmcgb2YgZWFybHkgY29uZnRlc3QgbG9hZGlu
ZyBmYWlsdXJlcworCistIHNvbWUgY2xlYW51cCBhbmQgc2ltcGxpZmljYXRpb24gb2YgaW50ZXJu
YWwgY29uZnRlc3QgaGFuZGxpbmcuCisKKy0gd29yayBhIGJpdCBoYXJkZXIgdG8gYnJlYWsgcmVm
ZXJlbmNlIGN5Y2xlcyB3aGVuIGNhdGNoaW5nIGV4Y2VwdGlvbnMuCisgIFRoYW5rcyBKdXJrbyBH
b3Nwb2RuZXRpYy4KKworLSBmaXggaXNzdWU0NDM6IGZpeCBza2lwIGV4YW1wbGVzIHRvIHVzZSBw
cm9wZXIgY29tcGFyaXNvbi4gIFRoYW5rcyBBbGV4CisgIEdyb2VuaG9sbS4KKworLSBzdXBwb3J0
IG5vc2Utc3R5bGUgYGBfX3Rlc3RfX2BgIGF0dHJpYnV0ZSBvbiBtb2R1bGVzLCBjbGFzc2VzIGFu
ZAorICBmdW5jdGlvbnMsIGluY2x1ZGluZyB1bml0dGVzdC1zdHlsZSBDbGFzc2VzLiAgSWYgc2V0
IHRvIEZhbHNlLCB0aGUKKyAgdGVzdCB3aWxsIG5vdCBiZSBjb2xsZWN0ZWQuCisKKy0gZml4IGlz
c3VlNTEyOiBzaG93ICI8bm90c2V0PiIgZm9yIGFyZ3VtZW50cyB3aGljaCBtaWdodCBub3QgYmUg
c2V0CisgIGluIG1vbmtleXBhdGNoIHBsdWdpbi4gIEltcHJvdmVzIG91dHB1dCBpbiBkb2N1bWVu
dGF0aW9uLgorCisKKzIuNS4yCis9PT09PQorCistIGZpeCBpc3N1ZTQwOSAtLSBiZXR0ZXIgaW50
ZXJvcGVyYXRlIHdpdGggY3hfZnJlZXplIGJ5IG5vdAorICB0cnlpbmcgdG8gaW1wb3J0IGZyb20g
Y29sbGVjdGlvbnMuYWJjIHdoaWNoIGNhdXNlcyBwcm9ibGVtcworICBmb3IgcHkyNy9jeF9mcmVl
emUuICBUaGFua3MgV29sZmdhbmcgTC4gZm9yIHJlcG9ydGluZyBhbmQgdHJhY2tpbmcgaXQgZG93
bi4KKworLSBmaXhlZCBkb2NzIGFuZCBjb2RlIHRvIHVzZSAicHl0ZXN0IiBpbnN0ZWFkIG9mICJw
eS50ZXN0IiBhbG1vc3QgZXZlcnl3aGVyZS4KKyAgVGhhbmtzIEp1cmtvIEdvc3BvZG5ldGljIGZv
ciB0aGUgY29tcGxldGUgUFIuCisKKy0gZml4IGlzc3VlNDI1OiBtZW50aW9uIGF0IGVuZCBvZiAi
cHkudGVzdCAtaCIgdGhhdCAtLW1hcmtlcnMKKyAgYW5kIC0tZml4dHVyZXMgd29yayBhY2NvcmRp
bmcgdG8gc3BlY2lmaWVkIHRlc3QgcGF0aCAob3IgY3VycmVudCBkaXIpCisKKy0gZml4IGlzc3Vl
NDEzOiBleGNlcHRpb25zIHdpdGggdW5pY29kZSBhdHRyaWJ1dGVzIGFyZSBub3cgcHJpbnRlZAor
ICBjb3JyZWN0bHkgYWxzbyBvbiBweXRob24yIGFuZCB3aXRoIHB5dGVzdC14ZGlzdCBydW5zLiAo
dGhlIGZpeAorICByZXF1aXJlcyBweS0xLjQuMjApCisKKy0gY29weSwgY2xlYW51cCBhbmQgaW50
ZWdyYXRlIHB5LmlvIGNhcHR1cmUKKyAgZnJvbSBweWxpYiAxLjQuMjAuZGV2MiAocmV2IDEzZDlh
Zjk1NTQ3ZSkKKworLSBhZGRyZXNzIGlzc3VlNDE2OiBjbGFyaWZ5IGRvY3MgYXMgdG8gY29uZnRl
c3QucHkgbG9hZGluZyBzZW1hbnRpY3MKKworLSBmaXggaXNzdWU0Mjk6IGNvbXBhcmluZyBieXRl
IHN0cmluZ3Mgd2l0aCBub24tYXNjaWkgY2hhcnMgaW4gYXNzZXJ0CisgIGV4cHJlc3Npb25zIG5v
dyB3b3JrIGJldHRlci4gIFRoYW5rcyBGbG9yaXMgQnJ1eW5vb2doZS4KKworLSBtYWtlIGNhcGZk
L2NhcHN5cy5jYXB0dXJlIHByaXZhdGUsIGl0cyB1bnVzZWQgYW5kIHNob3VsZG50IGJlIGV4cG9z
ZWQKKworCisyLjUuMQorPT09PT0KKworLSBtZXJnZSBuZXcgZG9jdW1lbnRhdGlvbiBzdHlsaW5n
IFBSIGZyb20gVG9iaWFzIEJpZW5pZWsuCisKKy0gZml4IGlzc3VlNDAzOiBhbGxvdyBwYXJhbWV0
cml6ZSBvZiBtdWx0aXBsZSBzYW1lLW5hbWUgZnVuY3Rpb25zIHdpdGhpbgorICBhIGNvbGxlY3Rp
b24gbm9kZS4gIFRoYW5rcyBBbmRyZWFzIEtsb2Vja25lciBhbmQgQWxleCBHYXlub3IgZm9yIHJl
cG9ydGluZworICBhbmQgYW5hbHlzaXMuCisKKy0gQWxsb3cgcGFyYW1ldGVyaXplZCBmaXh0dXJl
cyB0byBzcGVjaWZ5IHRoZSBJRCBvZiB0aGUgcGFyYW1ldGVycyBieQorICBhZGRpbmcgYW4gaWRz
IGFyZ3VtZW50IHRvIHB5dGVzdC5maXh0dXJlKCkgYW5kIHB5dGVzdC55aWVsZF9maXh0dXJlKCku
CisgIFRoYW5rcyBGbG9yaXMgQnJ1eW5vb2doZS4KKworLSBmaXggaXNzdWU0MDQgYnkgYWx3YXlz
IHVzaW5nIHRoZSBiaW5hcnkgeG1sIGVzY2FwZSBpbiB0aGUganVuaXR4bWwKKyAgcGx1Z2luLiAg
VGhhbmtzIFJvbm55IFBmYW5uc2NobWlkdC4KKworLSBmaXggaXNzdWU0MDc6IGZpeCBhZGRvcHRp
b24gZG9jc3RyaW5nIHRvIHBvaW50IHRvIGFyZ3BhcnNlIGluc3RlYWQgb2YKKyAgb3B0cGFyc2Uu
IFRoYW5rcyBEYW5pZWwgRC4gV3JpZ2h0LgorCisKKworMi41LjAKKz09PT09CisKKy0gZHJvcHBl
ZCBweXRob24yLjUgZnJvbSBhdXRvbWF0ZWQgcmVsZWFzZSB0ZXN0aW5nIG9mIHB5dGVzdCBpdHNl
bGYKKyAgd2hpY2ggbWVhbnMgaXQncyBwcm9iYWJseSBnb2luZyB0byBicmVhayBzb29uIChidXQg
c3RpbGwgd29ya3MKKyAgd2l0aCB0aGlzIHJlbGVhc2Ugd2UgYmVsaWV2ZSkuCisKKy0gc2ltcGxp
ZmllZCBhbmQgZml4ZWQgaW1wbGVtZW50YXRpb24gZm9yIGNhbGxpbmcgZmluYWxpemVycyB3aGVu
CisgIHBhcmFtZXRyaXplZCBmaXh0dXJlcyBvciBmdW5jdGlvbiBhcmd1bWVudHMgYXJlIGludm9s
dmVkLiAgZmluYWxpemF0aW9uCisgIGlzIG5vdyBwZXJmb3JtZWQgbGF6aWx5IGF0IHNldHVwIHRp
bWUgaW5zdGVhZCBvZiBpbiB0aGUgInRlYXJkb3duIHBoYXNlIi4KKyAgV2hpbGUgdGhpcyBtaWdo
dCBzb3VuZCBvZGQgYXQgZmlyc3QsIGl0IGhlbHBzIHRvIGVuc3VyZSB0aGF0IHdlIGFyZQorICBj
b3JyZWN0bHkgaGFuZGxpbmcgc2V0dXAvdGVhcmRvd24gZXZlbiBpbiBjb21wbGV4IGNvZGUuICBV
c2VyLWxldmVsIGNvZGUKKyAgc2hvdWxkIG5vdCBiZSBhZmZlY3RlZCB1bmxlc3MgaXQncyBpbXBs
ZW1lbnRpbmcgdGhlIHB5dGVzdF9ydW50ZXN0X3RlYXJkb3duCisgIGhvb2sgYW5kIGV4cGVjdGlu
ZyBjZXJ0YWluIGZpeHR1cmUgaW5zdGFuY2VzIGFyZSB0b3JuIGRvd24gd2l0aGluICh2ZXJ5Cisg
IHVubGlrZWx5IGFuZCB3b3VsZCBoYXZlIGJlZW4gdW5yZWxpYWJsZSBhbnl3YXkpLgorCistIFBS
OTA6IGFkZCAtLWNvbG9yPXllc3xub3xhdXRvIG9wdGlvbiB0byBmb3JjZSB0ZXJtaW5hbCBjb2xv
cmluZworICBtb2RlICgiYXV0byIgaXMgZGVmYXVsdCkuICBUaGFua3MgTWFyYyBBYnJhbW93aXR6
LgorCistIGZpeCBpc3N1ZTMxOSAtIGNvcnJlY3RseSBzaG93IHVuaWNvZGUgaW4gYXNzZXJ0aW9u
IGVycm9ycy4gIE1hbnkKKyAgdGhhbmtzIHRvIEZsb3JpcyBCcnV5bm9vZ2hlIGZvciB0aGUgY29t
cGxldGUgUFIuICBBbHNvIG1lYW5zCisgIHdlIGRlcGVuZCBvbiBweT49MS40LjE5IG5vdy4KKwor
LSBmaXggaXNzdWUzOTYgLSBjb3JyZWN0bHkgc29ydCBhbmQgZmluYWxpemUgY2xhc3Mtc2NvcGVk
IHBhcmFtZXRyaXplZAorICB0ZXN0cyBpbmRlcGVuZGVudGx5IGZyb20gbnVtYmVyIG9mIG1ldGhv
ZHMgb24gdGhlIGNsYXNzLgorCistIHJlZml4IGlzc3VlMzIzIGluIGEgYmV0dGVyIHdheSAtLSBw
YXJhbWV0cml6YXRpb24gc2hvdWxkIG5vdyBuZXZlcgorICBjYXVzZSBSdW50aW1lIFJlY3Vyc2lv
biBlcnJvcnMgYmVjYXVzZSB0aGUgdW5kZXJseWluZyBhbGdvcml0aG0KKyAgZm9yIHJlLW9yZGVy
aW5nIHRlc3RzIHBlci1zY29wZS9wZXItZml4dHVyZSBpcyBub3QgcmVjdXJzaXZlCisgIGFueW1v
cmUgKGl0IHdhcyB0YWlsLWNhbGwgcmVjdXJzaXZlIGJlZm9yZSB3aGljaCBjb3VsZCBsZWFkCisg
IHRvIHByb2JsZW1zIGZvciBtb3JlIHRoYW4gPjk2NiBub24tZnVuY3Rpb24gc2NvcGVkIHBhcmFt
ZXRlcnMpLgorCistIGZpeCBpc3N1ZTI5MCAtIHRoZXJlIGlzIHByZWxpbWluYXJ5IHN1cHBvcnQg
bm93IGZvciBwYXJhbWV0cml6aW5nCisgIHdpdGggcmVwZWF0ZWQgc2FtZSB2YWx1ZXMgKHNvbWV0
aW1lcyB1c2VmdWwgdG8gdG8gdGVzdCBpZiBjYWxsaW5nCisgIGEgc2Vjb25kIHRpbWUgd29ya3Mg
YXMgd2l0aCB0aGUgZmlyc3QgdGltZSkuCisKKy0gY2xvc2UgaXNzdWUyNDAgLSBkb2N1bWVudCBw
cmVjaXNlbHkgaG93IHB5dGVzdCBtb2R1bGUgaW1wb3J0aW5nCisgIHdvcmtzLCBkaXNjdXNzIHRo
ZSB0d28gY29tbW9uIHRlc3QgZGlyZWN0b3J5IGxheW91dHMsIGFuZCBob3cgaXQKKyAgaW50ZXJh
Y3RzIHdpdGggUEVQNDIwLW5hbWVzcGFjZSBwYWNrYWdlcy4KKworLSBmaXggaXNzdWUyNDYgZml4
IGZpbmFsaXplciBvcmRlciB0byBiZSBMSUZPIG9uIGluZGVwZW5kZW50IGZpeHR1cmVzCisgIGRl
cGVuZGluZyBvbiBhIHBhcmFtZXRyaXplZCBoaWdoZXItdGhhbi1mdW5jdGlvbiBzY29wZWQgZml4
dHVyZS4KKyAgKHdhcyBxdWl0ZSBzb21lIGVmZm9ydCBzbyBwbGVhc2UgYmVhciB3aXRoIHRoZSBj
b21wbGV4aXR5IG9mIHRoaXMgc2VudGVuY2UgOikKKyAgVGhhbmtzIFJhbHBoIFNjaG1pdHQgZm9y
IHRoZSBwcmVjaXNlIGZhaWx1cmUgZXhhbXBsZS4KKworLSBmaXggaXNzdWUyNDQgYnkgaW1wbGVt
ZW50aW5nIHNwZWNpYWwgaW5kZXggZm9yIHBhcmFtZXRlcnMgdG8gb25seSB1c2UKKyAgaW5kaWNl
cyBmb3IgcGFyYW1lbnRyaXplZCB0ZXN0IGlkcworCistIGZpeCBpc3N1ZTI4NyBieSBydW5uaW5n
IGFsbCBmaW5hbGl6ZXJzIGJ1dCBzYXZpbmcgdGhlIGV4Y2VwdGlvbgorICBmcm9tIHRoZSBmaXJz
dCBmYWlsaW5nIGZpbmFsaXplciBhbmQgcmUtcmFpc2luZyBpdCBzbyB0ZWFyZG93biB3aWxsCisg
IHN0aWxsIGhhdmUgZmFpbGVkLiAgV2UgcmVyYWlzZSB0aGUgZmlyc3QgZmFpbGluZyBleGNlcHRp
b24gYmVjYXVzZQorICBpdCBtaWdodCBiZSB0aGUgY2F1c2UgZm9yIG90aGVyIGZpbmFsaXplcnMg
dG8gZmFpbC4KKworLSBmaXggb3JkZXJpbmcgd2hlbiBtb2NrLnBhdGNoIG9yIG90aGVyIHN0YW5k
YXJkIGRlY29yYXRvci13cmFwcGluZ3MKKyAgYXJlIHVzZWQgd2l0aCB0ZXN0IG1ldGhvZHMuICBU
aGlzIGZpeHVlcyBpc3N1ZTM0NiBhbmQgc2hvdWxkCisgIGhlbHAgd2l0aCByYW5kb20gInhkaXN0
IiBjb2xsZWN0aW9uIGZhaWx1cmVzLiAgVGhhbmtzIHRvCisgIFJvbm55IFBmYW5uc2NobWlkdCBh
bmQgRG9uYWxkIFN0dWZmdCBmb3IgaGVscGluZyB0byBpc29sYXRlIGl0LgorCistIGZpeCBpc3N1
ZTM1NyAtIHNwZWNpYWwgY2FzZSAiLWsiIGV4cHJlc3Npb25zIHRvIGFsbG93IGZvcgorICBmaWx0
ZXJpbmcgd2l0aCBzaW1wbGUgc3RyaW5ncyB0aGF0IGFyZSBub3QgdmFsaWQgcHl0aG9uIGV4cHJl
c3Npb25zLgorICBFeGFtcGxlczogIi1rIDEuMyIgbWF0Y2hlcyBhbGwgdGVzdHMgcGFyYW1ldHJp
emVkIHdpdGggMS4zLgorICAiLWsgTm9uZSIgZmlsdGVycyBhbGwgdGVzdHMgdGhhdCBoYXZlICJO
b25lIiBpbiB0aGVpciBuYW1lCisgIGFuZCBjb252ZXJzZWx5ICItayAnbm90IE5vbmUnIi4KKyAg
UHJldmlvdXNseSB0aGVzZSBleGFtcGxlcyB3b3VsZCByYWlzZSBzeW50YXggZXJyb3JzLgorCist
IGZpeCBpc3N1ZTM4NCBieSByZW1vdmluZyB0aGUgdHJpYWwgc3VwcG9ydCBjb2RlCisgIHNpbmNl
IHRoZSB1bml0dGVzdCBjb21wYXQgZW5oYW5jZW1lbnRzIGFsbG93CisgIHRyaWFsIHRvIGhhbmRs
ZSBpdCBvbiBpdHMgb3duCisKKy0gZG9uJ3QgaGlkZSBhbiBJbXBvcnRFcnJvciB3aGVuIGltcG9y
dGluZyBhIHBsdWdpbiBwcm9kdWNlcyBvbmUuCisgIGZpeGVzIGlzc3VlMzc1LgorCistIGZpeCBp
c3N1ZTI3NSAtIGFsbG93IHVzZWZpeHR1cmVzIGFuZCBhdXRvdXNlIGZpeHR1cmVzCisgIGZvciBy
dW5uaW5nIGRvY3Rlc3QgdGV4dCBmaWxlcy4KKworLSBmaXggaXNzdWUzODAgYnkgbWFraW5nIC0t
cmVzdWx0bG9nIG9ubHkgcmVseSBvbiBsb25ncmVwciBpbnN0ZWFkCisgIG9mIHRoZSAicmVwcmNy
YXNoIiBhdHRyaWJ1dGUgd2hpY2ggb25seSBleGlzdHMgc29tZXRpbWVzLgorCistIGFkZHJlc3Mg
aXNzdWUxMjI6IGFsbG93IEBweXRlc3QuZml4dHVyZShwYXJhbXM9aXRlcmF0b3IpIGJ5IGV4cGxv
ZGluZworICBpbnRvIGEgbGlzdCBlYXJseSBvbi4KKworLSBmaXggcGV4cGVjdC0zLjAgY29tcGF0
aWJpbGl0eSBmb3IgcHl0ZXN0J3Mgb3duIHRlc3RzLgorICAoZml4ZXMgaXNzdWUzODYpCisKKy0g
YWxsb3cgbmVzdGVkIHBhcmFtZXRyaXplLXZhbHVlIG1hcmtlcnMsIHRoYW5rcyBKYW1lcyBMYW4g
Zm9yIHRoZSBQUi4KKworLSBmaXggdW5pY29kZSBoYW5kbGluZyB3aXRoIG5ldyBtb25rZXlwYXRj
aC5zZXRhdHRyKGltcG9ydF9wYXRoLCB2YWx1ZSkKKyAgQVBJLiAgVGhhbmtzIFJvYiBEZW5uaXMu
ICBGaXhlcyBpc3N1ZTM3MS4KKworLSBmaXggdW5pY29kZSBoYW5kbGluZyB3aXRoIGp1bml0eG1s
LCBmaXhlcyBpc3N1ZTM2OC4KKworLSBJbiBhc3NlcnRpb24gcmV3cml0aW5nIG1vZGUgb24gUHl0
aG9uIDIsIGZpeCB0aGUgZGV0ZWN0aW9uIG9mIGNvZGluZworICBjb29raWVzLiBTZWUgaXNzdWUg
IzMzMC4KKworLSBtYWtlICItLXJ1bnhmYWlsIiB0dXJuIGltcGVyYXRpdmUgcHl0ZXN0LnhmYWls
IGNhbGxzIGludG8gbm8gb3BzCisgIChpdCBhbHJlYWR5IGRpZCBuZXV0cmFsaXplIHB5dGVzdC5t
YXJrLnhmYWlsIG1hcmtlcnMpCisKKy0gcmVmaW5lIHB5dGVzdCAvIHBrZ19yZXNvdXJjZXMgaW50
ZXJhY3Rpb25zOiBUaGUgQXNzZXJ0aW9uUmV3cml0aW5nSG9vaworICBQRVAzMDIgY29tcGxpYW50
IGxvYWRlciBub3cgcmVnaXN0ZXJzIGl0c2VsZiB3aXRoIHNldHVwdG9vbHMvcGtnX3Jlc291cmNl
cworICBwcm9wZXJseSBzbyB0aGF0IHRoZSBwa2dfcmVzb3VyY2VzLnJlc291cmNlX3N0cmVhbSBt
ZXRob2Qgd29ya3MgcHJvcGVybHkuCisgIEZpeGVzIGlzc3VlMzY2LiAgVGhhbmtzIGZvciB0aGUg
aW52ZXN0aWdhdGlvbnMgYW5kIGZ1bGwgUFIgdG8gSmFzb24gUi4gQ29vbWJzLgorCistIHB5dGVz
dGNvbmZpZyBmaXh0dXJlIGlzIG5vdyBzZXNzaW9uLXNjb3BlZCBhcyBpdCBpcyB0aGUgc2FtZSBv
YmplY3QgZHVyaW5nIHRoZQorICB3aG9sZSB0ZXN0IHJ1bi4gIEZpeGVzIGlzc3VlMzcwLgorCist
IGF2b2lkIG9uZSBzdXJwcmlzaW5nIGNhc2Ugb2YgbWFya2VyIG1hbGZ1bmN0aW9uL2NvbmZ1c2lv
bjo6CisKKyAgICAgIEBweXRlc3QubWFyay5zb21lKGxhbWJkYSBhcmc6IC4uLikKKyAgICAgIGRl
ZiB0ZXN0X2Z1bmN0aW9uKCk6CisKKyAgd291bGQgbm90IHdvcmsgY29ycmVjdGx5IGJlY2F1c2Ug
cHl0ZXN0IGFzc3VtZXMgQHB5dGVzdC5tYXJrLnNvbWUKKyAgZ2V0cyBhIGZ1bmN0aW9uIHRvIGJl
IGRlY29yYXRlZCBhbHJlYWR5LiAgV2Ugbm93IGF0IGxlYXN0IGRldGVjdCBpZiB0aGlzCisgIGFy
ZyBpcyBhbiBsYW1iZGEgYW5kIHRodXMgdGhlIGV4YW1wbGUgd2lsbCB3b3JrLiAgVGhhbmtzIEFs
ZXggR2F5bm9yCisgIGZvciBicmluZ2luZyBpdCB1cC4KKworLSB4ZmFpbCBhIHRlc3Qgb24gcHlw
eSB0aGF0IGNoZWNrcyB3cm9uZyBlbmNvZGluZy9hc2NpaSAocHlweSBkb2VzCisgIG5vdCBlcnJv
ciBvdXQpLiBmaXhlcyBpc3N1ZTM4NS4KKworLSBpbnRlcm5hbGx5IG1ha2UgdmFybmFtZXMoKSBk
ZWFsIHdpdGggY2xhc3NlcydzIF9faW5pdF9fLAorICBhbHRob3VnaCBpdCdzIG5vdCBuZWVkZWQg
YnkgcHl0ZXN0IGl0c2VsZiBhdG0uICBBbHNvCisgIGZpeCBjYWNoaW5nLiAgRml4ZXMgaXNzdWUz
NzYuCisKKy0gZml4IGlzc3VlMjIxIC0gaGFuZGxlIGltcG9ydGluZyBvZiBuYW1lc3BhY2UtcGFj
a2FnZSB3aXRoIG5vCisgIF9faW5pdF9fLnB5IHByb3Blcmx5LgorCistIHJlZmFjdG9yIGludGVy
bmFsIEZpeHR1cmVSZXF1ZXN0IGhhbmRsaW5nIHRvIGF2b2lkIG1vbmtleXBhdGNoaW5nLgorICBP
bmUgb2YgdGhlIHBvc2l0aXZlIHVzZXItZmFjaW5nIGVmZmVjdHMgaXMgdGhhdCB0aGUgInJlcXVl
c3QiIG9iamVjdAorICBjYW4gbm93IGJlIHVzZWQgaW4gY2xvc3VyZXMuCisKKy0gZml4ZWQgdmVy
c2lvbiBjb21wYXJpc29uIGluIHB5dGVzdC5pbXBvcnRza2lwKG1vZG5hbWUsIG1pbnZlcnN0cmlu
ZykKKworLSBmaXggaXNzdWUzNzcgYnkgY2xhcmlmeWluZyBpbiB0aGUgbm9zZS1jb21wYXQgZG9j
cyB0aGF0IHB5dGVzdAorICBkb2VzIG5vdCBkdXBsaWNhdGUgdGhlIHVuaXR0ZXN0LUFQSSBpbnRv
IHRoZSAicGxhaW4iIG5hbWVzcGFjZS4KKworLSBmaXggdmVyYm9zZSByZXBvcnRpbmcgZm9yIEBt
b2NrJ2QgdGVzdCBmdW5jdGlvbnMKKworMi40LjIKKz09PT09CisKKy0gb24gV2luZG93cyByZXF1
aXJlIGNvbG9yYW1hIGFuZCBhIG5ld2VyIHB5IGxpYiBzbyB0aGF0IHB5LmlvLlRlcm1pbmFsV3Jp
dGVyKCkKKyAgbm93IHVzZXMgY29sb3JhbWEgaW5zdGVhZCBvZiBpdHMgb3duIGN0eXBlcyBoYWNr
cy4gKGZpeGVzIGlzc3VlMzY1KQorICB0aGFua3MgUGF1bCBNb29yZSBmb3IgYnJpbmdpbmcgaXQg
dXAuCisKKy0gZml4ICItayIgbWF0Y2hpbmcgb2YgdGVzdHMgd2hlcmUgInJlcHIiIGFuZCAiYXR0
ciIgYW5kIG90aGVyIG5hbWVzIHdvdWxkCisgIGNhdXNlIHdyb25nIG1hdGNoZXMgYmVjYXVzZSBv
ZiBhbiBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBxdWlyaworICAoZG9uJ3QgYXNrKSB3aGljaCBp
cyBub3cgcHJvcGVybHkgaW1wbGVtZW50ZWQuIGZpeGVzIGlzc3VlMzQ1LgorCistIGF2b2lkIHRt
cGRpciBmaXh0dXJlIHRvIGNyZWF0ZSB0b28gbG9uZyBmaWxlbmFtZXMgZXNwZWNpYWxseQorICB3
aGVuIHBhcmFtZXRyaXphdGlvbiBpcyB1c2VkIChpc3N1ZTM1NCkKKworLSBmaXggcHl0ZXN0LXBl
cDggYW5kIHB5dGVzdC1mbGFrZXMgLyBweXRlc3QgaW50ZXJhY3Rpb25zCisgIChjb2xsZWN0aW9u
IG5hbWVzIGluIG1hcmsgcGx1Z2luIHdhcyBhc3N1bWluZyBhbiBpdGVtIGFsd2F5cworICBoYXMg
YSBmdW5jdGlvbiB3aGljaCBpcyBub3QgdHJ1ZSBmb3IgdGhvc2UgcGx1Z2lucyBldGMuKQorICBU
aGFua3MgQW5kaSBaZWlkbGVyLgorCistIGludHJvZHVjZSBub2RlLmdldF9tYXJrZXIvbm9kZS5h
ZGRfbWFya2VyIEFQSSBmb3IgcGx1Z2lucworICBsaWtlIHB5dGVzdC1wZXA4IGFuZCBweXRlc3Qt
Zmxha2VzIHRvIGF2b2lkIHRoZSBtZXNzeQorICBkZXRhaWxzIG9mIHRoZSBub2RlLmtleXdvcmRz
ICBwc2V1ZG8tZGljdHMuICBBZGFwdGVkCisgIGRvY3MuCisKKy0gcmVtb3ZlIGF0dGVtcHQgdG8g
ImR1cCIgc3Rkb3V0IGF0IHN0YXJ0dXAgYXMgaXQncyBpY2t5LgorICB0aGUgbm9ybWFsIGNhcHR1
cmluZyBzaG91bGQgY2F0Y2ggZW5vdWdoIHBvc3NpYmlsaXRpZXMKKyAgb2YgdGVzdHMgbWVzc2lu
ZyB1cCBzdGFuZGFyZCBGRHMuCisKKy0gYWRkIHBsdWdpbm1hbmFnZXIuZG9fY29uZmlndXJlKGNv
bmZpZykgYXMgYSBsaW5rIHRvCisgIGNvbmZpZy5kb19jb25maWd1cmUoKSBmb3IgcGx1Z2luLWNv
bXBhdGliaWxpdHkKKworMi40LjEKKz09PT09CisKKy0gV2hlbiB1c2luZyBwYXJzZXIuYWRkb3B0
aW9uKCkgdW5pY29kZSBhcmd1bWVudHMgdG8gdGhlCisgICJ0eXBlIiBrZXl3b3JkIHNob3VsZCBh
bHNvIGJlIGNvbnZlcnRlZCB0byB0aGUgcmVzcGVjdGl2ZSB0eXBlcy4KKyAgdGhhbmtzIEZsb3Jp
cyBCcnV5bm9vZ2hlLCBAZG5vemF5LiAoZml4ZXMgaXNzdWUzNjAgYW5kIGlzc3VlMzYyKQorCist
IGZpeCBkb3R0ZWQgZmlsZW5hbWUgY29tcGxldGlvbiB3aGVuIHVzaW5nIGFyZ2NvbXBsZXRlCisg
IHRoYW5rcyBBbnRob24gdmFuIGRlciBOZXV0aC4gKGZpeGVzIGlzc3VlMzYxKQorCistIGZpeCBy
ZWdyZXNzaW9uIHdoZW4gYSAxLXR1cGxlICgiYXJnIiwpIGlzIHVzZWQgZm9yIHNwZWNpZnlpbmcK
KyAgcGFyYW1ldHJpemF0aW9uICh0aGUgdmFsdWVzIG9mIHRoZSBwYXJhbWV0cml6YXRpb24gd2Vy
ZSBwYXNzZWQKKyAgbmVzdGVkIGluIGEgdHVwbGUpLiAgVGhhbmtzIERvbmFsZCBTdHVmZnQuCisK
Ky0gbWVyZ2UgZG9jIHR5cG8gZml4ZXMsIHRoYW5rcyBBbmR5IERpcm5iZXJnZXIKKworMi40Cis9
PT0KKwora25vd24gaW5jb21wYXRpYmlsaXRpZXM6CisKKy0gaWYgY2FsbGluZyAtLWdlbnNjcmlw
dCBmcm9tIHB5dGhvbjIuNyBvciBhYm92ZSwgeW91IG9ubHkgZ2V0IGEKKyAgc3RhbmRhbG9uZSBz
Y3JpcHQgd2hpY2ggd29ya3Mgb24gcHl0aG9uMi43IG9yIGFib3ZlLiAgVXNlIFB5dGhvbjIuNgor
ICB0byBhbHNvIGdldCBhIHB5dGhvbjIuNSBjb21wYXRpYmxlIHZlcnNpb24uCisKKy0gYWxsIHh1
bml0LXN0eWxlIHRlYXJkb3duIG1ldGhvZHMgKG5vc2Utc3R5bGUsIHB5dGVzdC1zdHlsZSwKKyAg
dW5pdHRlc3Qtc3R5bGUpIHdpbGwgbm90IGJlIGNhbGxlZCBpZiB0aGUgY29ycmVzcG9uZGluZyBz
ZXR1cCBtZXRob2QgZmFpbGVkLAorICBzZWUgaXNzdWUzMjIgYmVsb3cuCisKKy0gdGhlIHB5dGVz
dF9wbHVnaW5fdW5yZWdpc3RlciBob29rIHdhc24ndCBldmVyIHByb3Blcmx5IGNhbGxlZAorICBh
bmQgdGhlcmUgaXMgbm8ga25vd24gaW1wbGVtZW50YXRpb24gb2YgdGhlIGhvb2sgLSBzbyBpdCBn
b3QgcmVtb3ZlZC4KKworLSBweXRlc3QuZml4dHVyZS1kZWNvcmF0ZWQgZnVuY3Rpb25zIGNhbm5v
dCBiZSBnZW5lcmF0b3JzIChpLmUuIHVzZQorICB5aWVsZCkgYW55bW9yZS4gIFRoaXMgY2hhbmdl
IG1pZ2h0IGJlIHJldmVyc2VkIGluIDIuNC4xIGlmIGl0IGNhdXNlcworICB1bmZvcmVzZWVuIHJl
YWwtbGlmZSBpc3N1ZXMuICBIb3dldmVyLCB5b3UgY2FuIGFsd2F5cyB3cml0ZSBhbmQgcmV0dXJu
CisgIGFuIGlubmVyIGZ1bmN0aW9uL2dlbmVyYXRvciBhbmQgY2hhbmdlIHRoZSBmaXh0dXJlIGNv
bnN1bWVyIHRvIGl0ZXJhdGUKKyAgb3ZlciB0aGUgcmV0dXJuZWQgZ2VuZXJhdG9yLiAgVGhpcyBj
aGFuZ2Ugd2FzIGRvbmUgaW4gbGlldSBvZiB0aGUgbmV3CisgIGBgcHl0ZXN0LnlpZWxkX2ZpeHR1
cmVgYCBkZWNvcmF0b3IsIHNlZSBiZWxvdy4KKworbmV3IGZlYXR1cmVzOgorCistIGV4cGVyaW1l
bnRhbGx5IGludHJvZHVjZSBhIG5ldyBgYHB5dGVzdC55aWVsZF9maXh0dXJlYGAgZGVjb3JhdG9y
CisgIHdoaWNoIGFjY2VwdHMgZXhhY3RseSB0aGUgc2FtZSBwYXJhbWV0ZXJzIGFzIHB5dGVzdC5m
aXh0dXJlIGJ1dAorICBtYW5kYXRlcyBhIGBgeWllbGRgYCBzdGF0ZW1lbnQgaW5zdGVhZCBvZiBh
IGBgcmV0dXJuIHN0YXRlbWVudGBgIGZyb20KKyAgZml4dHVyZSBmdW5jdGlvbnMuICBUaGlzIGFs
bG93cyBkaXJlY3QgaW50ZWdyYXRpb24gd2l0aCAid2l0aC1zdHlsZSIKKyAgY29udGV4dCBtYW5h
Z2VycyBpbiBmaXh0dXJlIGZ1bmN0aW9ucyBhbmQgZ2VuZXJhbGx5IGF2b2lkcyByZWdpc3Rlcmlu
ZworICBvZiBmaW5hbGl6YXRpb24gY2FsbGJhY2tzIGluIGZhdm91ciBvZiB0cmVhdGluZyB0aGUg
ImFmdGVyLXlpZWxkIiBhcworICB0ZWFyZG93biBjb2RlLiAgVGhhbmtzIEFuZHJlYXMgUGVsbWUs
IFZsYWRpbWlyIEtlbGVzaGV2LCBGbG9yaXMKKyAgQnJ1eW5vb2doZSwgUm9ubnkgUGZhbm5zY2ht
aWR0IGFuZCBtYW55IG90aGVycyBmb3IgZGlzY3Vzc2lvbnMuCisKKy0gYWxsb3cgYm9vbGVhbiBl
eHByZXNzaW9uIGRpcmVjdGx5IHdpdGggc2tpcGlmL3hmYWlsCisgIGlmIGEgInJlYXNvbiIgaXMg
YWxzbyBzcGVjaWZpZWQuICBSZXdvcmsgc2tpcHBpbmcgZG9jdW1lbnRhdGlvbgorICB0byByZWNv
bW1lbmQgImNvbmRpdGlvbiBhcyBib29sZWFucyIgYmVjYXVzZSBpdCBwcmV2ZW50cyBzdXJwcmlz
ZXMKKyAgd2hlbiBpbXBvcnRpbmcgbWFya2VycyBiZXR3ZWVuIG1vZHVsZXMuICBTcGVjaWZ5aW5n
IGNvbmRpdGlvbnMKKyAgYXMgc3RyaW5ncyB3aWxsIHJlbWFpbiBmdWxseSBzdXBwb3J0ZWQuCisK
Ky0gcmVwb3J0aW5nOiBjb2xvciB0aGUgbGFzdCBsaW5lIHJlZCBvciBncmVlbiBkZXBlbmRpbmcg
aWYKKyAgZmFpbHVyZXMvZXJyb3JzIG9jY3VycmVkIG9yIGV2ZXJ5dGhpbmcgcGFzc2VkLiAgdGhh
bmtzIENocmlzdGlhbgorICBUaGV1bmVydC4KKworLSBtYWtlICJpbXBvcnQgcGRiIDsgcGRiLnNl
dF90cmFjZSgpIiB3b3JrIG5hdGl2ZWx5IHdydCBjYXB0dXJpbmcgKG5vCisgICItcyIgbmVlZGVk
IGFueW1vcmUpLCBtYWtpbmcgYGBweXRlc3Quc2V0X3RyYWNlKClgYCBhIG1lcmUgc2hvcnRjdXQu
CisKKy0gZml4IGlzc3VlMTgxOiAtLXBkYiBub3cgYWxzbyB3b3JrcyBvbiBjb2xsZWN0IGVycm9y
cyAoYW5kCisgIG9uIGludGVybmFsIGVycm9ycykgLiAgVGhpcyB3YXMgaW1wbGVtZW50ZWQgYnkg
YSBzbGlnaHQgaW50ZXJuYWwKKyAgcmVmYWN0b3JpbmcgYW5kIHRoZSBpbnRyb2R1Y3Rpb24gb2Yg
YSBuZXcgaG9vaworICBgYHB5dGVzdF9leGNlcHRpb25faW50ZXJhY3RgYCBob29rIChzZWUgbmV4
dCBpdGVtKS4KKworLSBmaXggaXNzdWUzNDE6IGludHJvZHVjZSBuZXcgZXhwZXJpbWVudGFsIGhv
b2sgZm9yIElERXMvdGVybWluYWxzIHRvCisgIGludGVyY2VwdCBkZWJ1Z2dpbmc6IGBgcHl0ZXN0
X2V4Y2VwdGlvbl9pbnRlcmFjdChub2RlLCBjYWxsLCByZXBvcnQpYGAuCisKKy0gbmV3IG1vbmtl
eXBhdGNoLnNldGF0dHIoKSB2YXJpYW50IHRvIHByb3ZpZGUgYSBzaG9ydGVyCisgIGludm9jYXRp
b24gZm9yIHBhdGNoaW5nIG91dCBjbGFzc2VzL2Z1bmN0aW9ucyBmcm9tIG1vZHVsZXM6CisKKyAg
ICAgbW9ua2V5cGF0Y2guc2V0YXR0cigicmVxdWVzdHMuZ2V0IiwgbXlmdW5jKQorCisgIHdpbGwg
cmVwbGFjZSB0aGUgImdldCIgZnVuY3Rpb24gb2YgdGhlICJyZXF1ZXN0cyIgbW9kdWxlIHdpdGgg
YGBteWZ1bmNgYC4KKworLSBmaXggaXNzdWUzMjI6IHRlYXJEb3duQ2xhc3MgaXMgbm90IHJ1biBp
ZiBzZXRVcENsYXNzIGZhaWxlZC4gVGhhbmtzCisgIE1hdGhpZXUgQWdvcGlhbiBmb3IgdGhlIGlu
aXRpYWwgZml4LiAgQWxzbyBtYWtlIGFsbCBvZiBweXRlc3Qvbm9zZQorICBmaW5hbGl6ZXIgbWlt
aWNrIHRoZSBzYW1lIGdlbmVyaWMgYmVoYXZpb3VyOiBpZiBhIHNldHVwWCBleGlzdHMgYW5kCisg
IGZhaWxzLCBkb24ndCBydW4gdGVhcmRvd25YLiAgVGhpcyBpbnRlcm5hbGx5IGludHJvZHVjZXMg
YSBuZXcgbWV0aG9kCisgICJub2RlLmFkZGZpbmFsaXplcigpIiBoZWxwZXIgd2hpY2ggY2FuIG9u
bHkgYmUgY2FsbGVkIGR1cmluZyB0aGUgc2V0dXAKKyAgcGhhc2Ugb2YgYSBub2RlLgorCistIHNp
bXBsaWZ5IHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKCkgc2lnbmF0dXJlOiBhbGxvdyB0byBwYXNz
IGEKKyAgQ1NWLXNlcGFyYXRlZCBzdHJpbmcgdG8gc3BlY2lmeSBhcmduYW1lcy4gIEZvciBleGFt
cGxlOgorICBgYHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKCJpbnB1dCxleHBlY3RlZCIsICBbKDEs
MiksICgyLDMpXSlgYAorICB3b3JrcyBhcyB3ZWxsIGFzIHRoZSBwcmV2aW91czoKKyAgYGBweXRl
c3QubWFyay5wYXJhbWV0cml6ZSgoImlucHV0IiwgImV4cGVjdGVkIiksIC4uLilgYC4KKworLSBh
ZGQgc3VwcG9ydCBmb3Igc2V0VXBNb2R1bGUvdGVhckRvd25Nb2R1bGUgZGV0ZWN0aW9uLCB0aGFu
a3MgQnJpYW4gT2trZW4uCisKKy0gaW50ZWdyYXRlIHRhYi1jb21wbGV0aW9uIG9uIG9wdGlvbnMg
dGhyb3VnaCB1c2Ugb2YgImFyZ2NvbXBsZXRlIi4KKyAgVGhhbmtzIEFudGhvbiB2YW4gZGVyIE5l
dXQgZm9yIHRoZSBQUi4KKworLSBjaGFuZ2Ugb3B0aW9uIG5hbWVzIHRvIGJlIGh5cGhlbi1zZXBh
cmF0ZWQgbG9uZyBvcHRpb25zIGJ1dCBrZWVwIHRoZQorICBvbGQgc3BlbGxpbmcgYmFja3dhcmQg
Y29tcGF0aWJsZS4gIHB5LnRlc3QgLWggd2lsbCBvbmx5IHNob3cgdGhlCisgIGh5cGhlbmF0ZWQg
dmVyc2lvbiwgZm9yIGV4YW1wbGUgIi0tY29sbGVjdC1vbmx5IiBidXQgIi0tY29sbGVjdG9ubHki
CisgIHdpbGwgcmVtYWluIHZhbGlkIGFzIHdlbGwgKGZvciBiYWNrd2FyZC1jb21wYXQgcmVhc29u
cykuICBNYW55IHRoYW5rcyB0bworICBBbnRob24gdmFuIGRlciBOZXV0IGZvciB0aGUgaW1wbGVt
ZW50YXRpb24gYW5kIHRvIEh5bmVrIFNjaGxhd2FjayBmb3IKKyAgcHVzaGluZyB1cy4KKworLSBm
aXggaXNzdWUgMzA4IC0gYWxsb3cgdG8gbWFyay94ZmFpbC9za2lwIGluZGl2aWR1YWwgcGFyYW1l
dGVyIHNldHMKKyAgd2hlbiBwYXJhbWV0cml6aW5nLiAgVGhhbmtzIEJyaWFubmEgTGF1Z2hlci4K
KworLSBjYWxsIG5ldyBleHBlcmltZW50YWwgcHl0ZXN0X2xvYWRfaW5pdGlhbF9jb25mdGVzdHMg
aG9vayB0byBhbGxvdworICAzcmQgcGFydHkgcGx1Z2lucyB0byBkbyBzb21ldGhpbmcgYmVmb3Jl
IGEgY29uZnRlc3QgaXMgbG9hZGVkLgorCitCdWcgZml4ZXM6CisKKy0gZml4IGlzc3VlMzU4IC0g
Y2FwdHVyaW5nIG9wdGlvbnMgYXJlIG5vdyBwYXJzZWQgbW9yZSBwcm9wZXJseQorICBieSB1c2lu
ZyBhIG5ldyBwYXJzZXIucGFyc2Vfa25vd25fYXJncyBtZXRob2QuCisKKy0gcHl0ZXN0IG5vdyB1
c2VzIGFyZ3BhcnNlIGluc3RlYWQgb2Ygb3B0cGFyc2UgKHRoYW5rcyBBbnRob24pIHdoaWNoCisg
IG1lYW5zIHRoYXQgImFyZ3BhcnNlIiBpcyBhZGRlZCBhcyBhIGRlcGVuZGVuY3kgaWYgaW5zdGFs
bGluZyBpbnRvIHB5dGhvbjIuNgorICBlbnZpcm9ubWVudHMgb3IgYmVsb3cuCisKKy0gZml4IGlz
c3VlMzMzOiBmaXggYSBjYXNlIG9mIGJhZCB1bml0dGVzdC9weXRlc3QgaG9vayBpbnRlcmFjdGlv
bi4KKworLSBQUjI3OiBjb3JyZWN0bHkgaGFuZGxlIG5vc2UuU2tpcFRlc3QgZHVyaW5nIGNvbGxl
Y3Rpb24uICBUaGFua3MKKyAgQW50b25pbyBDdW5pLCBSb25ueSBQZmFubnNjaG1pZHQuCisKKy0g
Zml4IGlzc3VlMzU1OiBqdW5pdHhtbCBwdXRzIG5hbWU9InB5dGVzdCIgYXR0cmlidXRlIHRvIHRl
c3RzdWl0ZSB0YWcuCisKKy0gZml4IGlzc3VlMzM2OiBhdXRvdXNlIGZpeHR1cmUgaW4gcGx1Z2lu
cyBzaG91bGQgd29yayBhZ2Fpbi4KKworLSBmaXggaXNzdWUyNzk6IGltcHJvdmUgb2JqZWN0IGNv
bXBhcmlzb25zIG9uIGFzc2VydGlvbiBmYWlsdXJlCisgIGZvciBzdGFuZGFyZCBkYXRhdHlwZXMg
YW5kIHJlY29nbmlzZSBjb2xsZWN0aW9ucy5hYmMuICBUaGFua3MgdG8KKyAgQnJpYW5uYSBMYXVn
aGVyIGFuZCBNYXRoaWV1IEFnb3BpYW4uCisKKy0gZml4IGlzc3VlMzE3OiBhc3NlcnRpb24gcmV3
cml0ZXIgc3VwcG9ydCBmb3IgdGhlIGlzX3BhY2thZ2UgbWV0aG9kCisKKy0gZml4IGlzc3VlMzM1
OiBkb2N1bWVudCBweS5jb2RlLkV4Y2VwdGlvbkluZm8oKSBvYmplY3QgcmV0dXJuZWQKKyAgZnJv
bSBweXRlc3QucmFpc2VzKCksIHRoYW5rcyBNYXRoaWV1IEFnb3BpYW4uCisKKy0gcmVtb3ZlIGlt
cGxpY2l0IGRpc3RyaWJ1dGVfc2V0dXAgc3VwcG9ydCBmcm9tIHNldHVwLnB5LgorCistIGZpeCBp
c3N1ZTMwNTogaWdub3JlIGFueSBwcm9ibGVtcyB3aGVuIHdyaXRpbmcgcHljIGZpbGVzLgorCist
IFNPLTE3NjY0NzAyOiBjYWxsIGZpeHR1cmUgZmluYWxpemVycyBldmVuIGlmIHRoZSBmaXh0dXJl
IGZ1bmN0aW9uCisgIHBhcnRpYWxseSBmYWlsZWQgKGZpbmFsaXplcnMgd291bGQgbm90IGFsd2F5
cyBiZSBjYWxsZWQgYmVmb3JlKQorCistIGZpeCBpc3N1ZTMyMCAtIGZpeCBjbGFzcyBzY29wZSBm
b3IgZml4dHVyZXMgd2hlbiBtaXhlZCB3aXRoCisgIG1vZHVsZS1sZXZlbCBmdW5jdGlvbnMuICBU
aGFua3MgQW5hdGxveSBCdWJlbmtvZmYuCisKKy0geW91IGNhbiBzcGVjaWZ5ICItcSIgb3IgIi1x
cSIgdG8gZ2V0IGRpZmZlcmVudCBsZXZlbHMgb2YgInF1aWV0ZXIiCisgIHJlcG9ydGluZyAodGhh
bmtzIEthdGFyenluYSBKYWNoaW0pCisKKy0gZml4IGlzc3VlMzAwIC0gRml4IG9yZGVyIG9mIGNv
bmZ0ZXN0IGxvYWRpbmcgd2hlbiBzdGFydGluZyBweS50ZXN0CisgIGluIGEgc3ViZGlyZWN0b3J5
LgorCistIGZpeCBpc3N1ZTMyMyAtIHNvcnRpbmcgb2YgbWFueSBtb2R1bGUtc2NvcGVkIGFyZyBw
YXJhbWV0cml6YXRpb25zCisKKy0gbWFrZSBzZXNzaW9uZmluaXNoIGhvb2tzIGV4ZWN1dGUgd2l0
aCB0aGUgc2FtZSBjd2QtY29udGV4dCBhcyBhdAorICBzZXNzaW9uIHN0YXJ0IChoZWxwcyBmaXgg
cGx1Z2luIGJlaGF2aW91ciB3aGljaCB3cml0ZSBvdXRwdXQgZmlsZXMKKyAgd2l0aCByZWxhdGl2
ZSBwYXRoIHN1Y2ggYXMgcHl0ZXN0LWNvdikKKworLSBmaXggaXNzdWUzMTYgLSBwcm9wZXJseSBy
ZWZlcmVuY2UgY29sbGVjdGlvbiBob29rcyBpbiBkb2NzCisKKy0gZml4IGlzc3VlIDMwNiAtIGNs
ZWFudXAgb2YgLWsvLW0gb3B0aW9ucyB0byBvbmx5IG1hdGNoIG1hcmtlcnMvdGVzdAorICBuYW1l
cy9rZXl3b3JkcyByZXNwZWN0aXZlbHkuICBUaGFua3MgV291dGVyIHZhbiBBY2tvb3kuCisKKy0g
aW1wcm92ZWQgZG9jdGVzdCBjb3VudGluZyBmb3IgZG9jdGVzdHMgaW4gcHl0aG9uIG1vZHVsZXMg
LS0KKyAgZmlsZXMgd2l0aG91dCBhbnkgZG9jdGVzdCBpdGVtcyB3aWxsIG5vdCBzaG93IHVwIGFu
eW1vcmUKKyAgYW5kIGRvY3Rlc3QgZXhhbXBsZXMgYXJlIGNvdW50ZWQgYXMgc2VwYXJhdGUgdGVz
dCBpdGVtcy4KKyAgdGhhbmtzIERhbmlsbyBCZWxsaW5pLgorCistIGZpeCBpc3N1ZTI0NSBieSBk
ZXBlbmRpbmcgb24gdGhlIHJlbGVhc2VkIHB5LTEuNC4xNAorICB3aGljaCBmaXhlcyBweS5pby5k
dXBmaWxlIHRvIHdvcmsgd2l0aCBmaWxlcyB3aXRoIG5vCisgIG1vZGUuIFRoYW5rcyBKYXNvbiBS
LiBDb29tYnMuCisKKy0gZml4IGp1bml0eG1sIGdlbmVyYXRpb24gd2hlbiB0ZXN0IG91dHB1dCBj
b250YWlucyBjb250cm9sIGNoYXJhY3RlcnMsCisgIGFkZHJlc3NpbmcgaXNzdWUyNjcsIHRoYW5r
cyBKYWFwIEJyb2VraHVpemVuCisKKy0gZml4IGlzc3VlMzM4OiBob25vciAtLXRiIHN0eWxlIGZv
ciBzZXR1cC90ZWFyZG93biBlcnJvcnMgYXMgd2VsbC4gIFRoYW5rcyBNYWhvLgorCistIGZpeCBp
c3N1ZTMwNyAtIHVzZSB5YW1sLnNhZmVfbG9hZCBpbiBleGFtcGxlLCB0aGFua3MgTWFyayBFaWNo
aW4uCisKKy0gYmV0dGVyIHBhcmFtZXRyaXplIGVycm9yIG1lc3NhZ2VzLCB0aGFua3MgQnJpYW5u
YSBMYXVnaGVyCisKKy0gcHl0ZXN0X3Rlcm1pbmFsX3N1bW1hcnkodGVybWluYWxyZXBvcnRlcikg
aG9va3MgY2FuIG5vdyB1c2UKKyAgIi5zZWN0aW9uKHRpdGxlKSIgYW5kICIubGluZShtc2cpIiBt
ZXRob2RzIHRvIHByaW50IGV4dHJhCisgIGluZm9ybWF0aW9uIGF0IHRoZSBlbmQgb2YgYSB0ZXN0
IHJ1bi4KKworMi4zLjUKKz09PT09CisKKy0gZml4IGlzc3VlMTY5OiByZXNwZWN0IC0tdGI9c3R5
bGUgd2l0aCBzZXR1cC90ZWFyZG93biBlcnJvcnMgYXMgd2VsbC4KKworLSBuZXZlciBjb25zaWRl
ciBhIGZpeHR1cmUgZnVuY3Rpb24gZm9yIHRlc3QgZnVuY3Rpb24gY29sbGVjdGlvbgorCistIGFs
bG93IHJlLXJ1bm5pbmcgb2YgdGVzdCBpdGVtcyAvIGhlbHBzIHRvIGZpeCBweXRlc3QtcmVydW50
ZXN0cyBwbHVnaW4KKyAgYW5kIGFsc28gaGVscCB0byBrZWVwIGxlc3MgZml4dHVyZS9yZXNvdXJj
ZSByZWZlcmVuY2VzIGFsaXZlCisKKy0gcHV0IGNhcHR1cmVkIHN0ZG91dC9zdGRlcnIgaW50byBq
dW5pdHhtbCBvdXRwdXQgZXZlbiBmb3IgcGFzc2luZyB0ZXN0cworICAodGhhbmtzIEFkYW0gR291
Y2hlcikKKworLSBJc3N1ZSAyNjUgLSBpbnRlZ3JhdGUgbm9zZSBzZXR1cC90ZWFyZG93biB3aXRo
IHNldHVwc3RhdGUKKyAgc28gaXQgZG9lc250IHRyeSB0byB0ZWFyZG93biBpZiBpdCBkaWQgbm90
IHNldHVwCisKKy0gaXNzdWUgMjcxIC0gZG9udCB3cml0ZSBqdW5pdHhtbCBvbiBzbGF2ZSBub2Rl
cworCistIElzc3VlIDI3NCAtIGRvbnQgdHJ5IHRvIHNob3cgZnVsbCBkb2N0ZXN0IGV4YW1wbGUK
KyAgd2hlbiBkb2N0ZXN0IGRvZXMgbm90IGtub3cgdGhlIGV4YW1wbGUgbG9jYXRpb24KKworLSBp
c3N1ZSAyODAgLSBkaXNhYmxlIGFzc2VydGlvbiByZXdyaXRpbmcgb24gYnVnZ3kgQ1B5dGhvbiAy
LjYuMAorCistIGluamVjdCAiZ2V0Zml4dHVyZSgpIiBoZWxwZXIgdG8gcmV0cmlldmUgZml4dHVy
ZXMgZnJvbSBkb2N0ZXN0cywKKyAgdGhhbmtzIEFuZHJlYXMgWmVpZGxlcgorCistIGlzc3VlIDI1
OSAtIHdoZW4gYXNzZXJ0aW9uIHJld3JpdGluZywgYmUgY29uc2lzdGVudCB3aXRoIHRoZSBkZWZh
dWx0CisgIHNvdXJjZSBlbmNvZGluZyBvZiBBU0NJSSBvbiBQeXRob24gMgorCistIGlzc3VlIDI1
MSAtIHJlcG9ydCBhIHNraXAgaW5zdGVhZCBvZiBpZ25vcmluZyBjbGFzc2VzIHdpdGggaW5pdAor
CistIGlzc3VlMjUwIHVuaWNvZGUvc3RyIG1peGVzIGluIHBhcmFtZXRyaXphdGlvbiBuYW1lcyBh
bmQgdmFsdWVzIG5vdyB3b3JrcworCistIGlzc3VlMjU3LCBhc3NlcnRpb24tdHJpZ2dlcmVkIGNv
bXBpbGF0aW9uIG9mIHNvdXJjZSBlbmRpbmcgaW4gYQorICBjb21tZW50IGxpbmUgZG9lc24ndCBi
bG93IHVwIGluIHB5dGhvbjIuNSAoZml4ZWQgdGhyb3VnaCBweT49MS40LjEzLmRldjYpCisKKy0g
Zml4IC0tZ2Vuc2NyaXB0IG9wdGlvbiB0byBnZW5lcmF0ZSBzdGFuZGFsb25lIHNjcmlwdHMgdGhh
dCBhbHNvCisgIHdvcmsgd2l0aCBweXRob24zLjMgKGltcG9ydGVyIG9yZGVyaW5nKQorCistIGlz
c3VlMTcxIC0gaW4gYXNzZXJ0aW9uIHJld3JpdGluZywgc2hvdyB0aGUgcmVwciBvZiBzb21lCisg
IGdsb2JhbCB2YXJpYWJsZXMKKworLSBmaXggb3B0aW9uIGhlbHAgZm9yICItayIKKworLSBtb3Zl
IGxvbmcgZGVzY3JpcHRpb24gb2YgZGlzdHJpYnV0aW9uIGludG8gUkVBRE1FLnJzdAorCistIGlt
cHJvdmUgZG9jc3RyaW5nIGZvciBtZXRhZnVuYy5wYXJhbWV0cml6ZSgpCisKKy0gZml4IGJ1ZyB3
aGVyZSB1c2luZyBjYXBzeXMgd2l0aCBweXRlc3Quc2V0X3RyYWNlKCkgaW4gYSB0ZXN0CisgIGZ1
bmN0aW9uIHdvdWxkIGJyZWFrIHdoZW4gbG9va2luZyBhdCBjYXBzeXMucmVhZG91dGVycigpCisK
Ky0gYWxsb3cgdG8gc3BlY2lmeSBwcmVmaXhlcyBzdGFydGluZyB3aXRoICJfIiB3aGVuCisgIGN1
c3RvbWl6aW5nIHB5dGhvbl9mdW5jdGlvbnMgdGVzdCBkaXNjb3ZlcnkuICh0aGFua3MgR3JhaGFt
IEhvcmxlcikKKworLSBpbXByb3ZlIFBZVEVTVF9ERUJVRyB0cmFjaW5nIG91dHB1dCBieSBwdXRp
bmcKKyAgZXh0cmEgZGF0YSBvbiBhIG5ldyBsaW5lcyB3aXRoIGFkZGl0aW9uYWwgaW5kZW50CisK
Ky0gZW5zdXJlIE91dGNvbWVFeGNlcHRpb25zIGxpa2Ugc2tpcC9mYWlsIGhhdmUgaW5pdGlhbGl6
ZWQgZXhjZXB0aW9uIGF0dHJpYnV0ZXMKKworLSBpc3N1ZSAyNjAgLSBkb24ndCB1c2Ugbm9zZSBz
cGVjaWFsIHNldHVwIG9uIHBsYWluIHVuaXR0ZXN0IGNhc2VzCisKKy0gZml4IGlzc3VlMTM0IC0g
cHJpbnQgdGhlIGNvbGxlY3QgZXJyb3JzIHRoYXQgcHJldmVudCBydW5uaW5nIHNwZWNpZmllZCB0
ZXN0IGl0ZW1zCisKKy0gZml4IGlzc3VlMjY2IC0gYWNjZXB0IHVuaWNvZGUgaW4gTWFya0V2YWx1
YXRvciBleHByZXNzaW9ucworCisyLjMuNAorPT09PT0KKworLSB5aWVsZGVkIHRlc3QgZnVuY3Rp
b25zIHdpbGwgbm93IGhhdmUgYXV0b3VzZS1maXh0dXJlcyBhY3RpdmUgYnV0CisgIGNhbm5vdCBh
Y2NlcHQgZml4dHVyZXMgYXMgZnVuY2FyZ3MgLSBpdCdzIGFueXdheSByZWNvbW1lbmRlZCB0bwor
ICByYXRoZXIgdXNlIHRoZSBwb3N0LTIuMCBwYXJhbWV0cml6ZSBmZWF0dXJlcyBpbnN0ZWFkIG9m
IHlpZWxkLCBzZWU6CisgIGh0dHA6Ly9weXRlc3Qub3JnL2xhdGVzdC9leGFtcGxlL3BhcmFtZXRy
aXplLmh0bWwKKy0gZml4IGF1dG91c2UtaXNzdWUgd2hlcmUgYXV0b3VzZS1maXh0dXJlcyB3b3Vs
ZCBub3QgYmUgZGlzY292ZXJlZAorICBpZiBkZWZpbmVkIGluIGEgYS9jb25mdGVzdC5weSBmaWxl
IGFuZCB0ZXN0cyBpbiBhL3Rlc3RzL3Rlc3Rfc29tZS5weQorLSBmaXggaXNzdWUyMjYgLSBMSUZP
IG9yZGVyaW5nIGZvciBmaXh0dXJlIHRlYXJkb3ducworLSBmaXggaXNzdWUyMjQgLSBpbnZvY2F0
aW9ucyB3aXRoID4yNTYgY2hhciBhcmd1bWVudHMgbm93IHdvcmsKKy0gZml4IGlzc3VlOTEgLSBh
ZGQvZGlzY3VzcyBwYWNrYWdlL2RpcmVjdG9yeSBsZXZlbCBzZXR1cHMgaW4gZXhhbXBsZQorLSBh
bGxvdyB0byBkeW5hbWljYWxseSBkZWZpbmUgbWFya2VycyB2aWEKKyAgaXRlbS5rZXl3b3Jkc1su
Li5dPWFzc2lnbm1lbnQgaW50ZWdyYXRpbmcgd2l0aCAiLW0iIG9wdGlvbgorLSBtYWtlICItayIg
YWNjZXB0IGFuIGV4cHJlc3Npb25zIHRoZSBzYW1lIGFzIHdpdGggIi1tIiBzbyB0aGF0IG9uZQor
ICBjYW4gd3JpdGU6IC1rICJuYW1lMSBvciBuYW1lMiIgZXRjLiAgVGhpcyBpcyBhIHNsaWdodCBp
bmNvbXBhdGliaWxpdHkKKyAgaWYgeW91IHVzZWQgc3BlY2lhbCBzeW50YXggbGlrZSAiVGVzdENs
YXNzLnRlc3RfbWV0aG9kIiB3aGljaCB5b3Ugbm93CisgIG5lZWQgdG8gd3JpdGUgYXMgLWsgIlRl
c3RDbGFzcyBhbmQgdGVzdF9tZXRob2QiIHRvIG1hdGNoIGEgY2VydGFpbgorICBtZXRob2QgaW4g
YSBjZXJ0YWluIHRlc3QgY2xhc3MuCisKKzIuMy4zCis9PT09PQorCistIGZpeCBpc3N1ZTIxNCAt
IHBhcnNlIG1vZHVsZXMgdGhhdCBjb250YWluIHNwZWNpYWwgb2JqZWN0cyBsaWtlIGUuIGcuCisg
IGZsYXNrJ3MgcmVxdWVzdCBvYmplY3Qgd2hpY2ggYmxvd3MgdXAgb24gZ2V0YXR0ciBhY2Nlc3Mg
aWYgbm8gcmVxdWVzdAorICBpcyBhY3RpdmUuIHRoYW5rcyBUaG9tYXMgV2FsZG1hbm4uCisKKy0g
Zml4IGlzc3VlMjEzIC0gYWxsb3cgdG8gcGFyYW1ldHJpemUgd2l0aCB2YWx1ZXMgbGlrZSBudW1w
eSBhcnJheXMgdGhhdAorICBkbyBub3Qgc3VwcG9ydCBhbiBfX2VxX18gb3BlcmF0b3IKKworLSBm
aXggaXNzdWUyMTUgLSBzcGxpdCB0ZXN0X3B5dGhvbi5vcmcgaW50byBtdWx0aXBsZSBmaWxlcwor
CistIGZpeCBpc3N1ZTE0OCAtIEB1bml0dGVzdC5za2lwIG9uIGNsYXNzZXMgaXMgbm93IHJlY29n
bml6ZWQgYW5kIGF2b2lkcworICBjYWxsaW5nIHNldFVwQ2xhc3MvdGVhckRvd25DbGFzcywgdGhh
bmtzIFBhdmVsIFJlcGluCisKKy0gZml4IGlzc3VlMjA5IC0gcmVpbnRyb2R1Y2UgcHl0aG9uMi40
IHN1cHBvcnQgYnkgZGVwZW5kaW5nIG9uIG5ld2VyCisgIHB5bGliIHdoaWNoIHJlLWludHJvZHVj
ZWQgc3RhdGVtZW50LWZpbmRpbmcgZm9yIHByZS1BU1QgaW50ZXJwcmV0ZXJzCisKKy0gbm9zZSBz
dXBwb3J0OiBvbmx5IGNhbGwgc2V0dXAgaWYgaXRzIGEgY2FsbGFibGUsIHRoYW5rcyBBbmRyZXcK
KyAgVGF1bW9lZm9sYXUKKworLSBmaXggaXNzdWUyMTkgLSBhZGQgcHkyLjQtMy4zIGNsYXNzaWZp
ZXJzIHRvIFRST1ZFIGxpc3QKKworLSBpbiB0cmFjZWJhY2tzICosKiogYXJnIHZhbHVlcyBhcmUg
bm93IHNob3duIG5leHQgdG8gbm9ybWFsIGFyZ3VtZW50cworICAodGhhbmtzIE1hbnVlbCBKYWNv
YikKKworLSBmaXggaXNzdWUyMTcgLSBzdXBwb3J0IG1vY2sucGF0Y2ggd2l0aCBweXRlc3QncyBm
aXh0dXJlcyAtIG5vdGUgdGhhdAorICB5b3UgbmVlZCBlaXRoZXIgbW9jay0xLjAuMSBvciB0aGUg
cHl0aG9uMy4zIGJ1aWx0aW4gdW5pdHRlc3QubW9jay4KKworLSBmaXggaXNzdWUxMjcgLSBpbXBy
b3ZlIGRvY3VtZW50YXRpb24gZm9yIHB5dGVzdF9hZGRvcHRpb24oKSBhbmQKKyAgYWRkIGEgYGBj
b25maWcuZ2V0b3B0aW9uKG5hbWUpYGAgaGVscGVyIGZ1bmN0aW9uIGZvciBjb25zaXN0ZW5jeS4K
KworMi4zLjIKKz09PT09CisKKy0gZml4IGlzc3VlMjA4IGFuZCBmaXggaXNzdWUyOSB1c2UgbmV3
IHB5IHZlcnNpb24gdG8gYXZvaWQgbG9uZyBwYXVzZXMKKyAgd2hlbiBwcmludGluZyB0cmFjZWJh
Y2tzIGluIGxvbmcgbW9kdWxlcworCistIGZpeCBpc3N1ZTIwNSAtIGNvbmZ0ZXN0cyBpbiBzdWJk
aXJzIGN1c3RvbWl6aW5nCisgIHB5dGVzdF9weWNvbGxlY3RfbWFrZW1vZHVsZSBhbmQgcHl0ZXN0
X3B5Y29sbGVjdF9tYWtlaXRlbQorICBub3cgd29yayBwcm9wZXJseQorCistIGZpeCB0ZWFyZG93
bi1vcmRlcmluZyBmb3IgcGFyYW1ldHJpemVkIHNldHVwcworCistIGZpeCBpc3N1ZTEyNyAtIGJl
dHRlciBkb2N1bWVudGF0aW9uIGZvciBweXRlc3RfYWRkb3B0aW9uCisgIGFuZCByZWxhdGVkIG9i
amVjdHMuCisKKy0gZml4IHVuaXR0ZXN0IGJlaGF2aW91cjogVGVzdENhc2UucnVudGVzdCBvbmx5
IGNhbGxlZCBpZiB0aGVyZSBhcmUKKyAgdGVzdCBtZXRob2RzIGRlZmluZWQKKworLSBpbXByb3Zl
IHRyaWFsIHN1cHBvcnQ6IGRvbid0IGNvbGxlY3QgaXRzIGVtcHR5CisgIHVuaXR0ZXN0LlRlc3RD
YXNlLnJ1blRlc3QoKSBtZXRob2QKKworLSAicHl0aG9uIHNldHVwLnB5IHRlc3QiIG5vdyB3b3Jr
cyB3aXRoIHB5dGVzdCBpdHNlbGYKKworLSBmaXgvaW1wcm92ZSBpbnRlcm5hbC9wYWNrYWdpbmcg
cmVsYXRlZCBiaXRzOgorCisgIC0gZXhjZXB0aW9uIG1lc3NhZ2UgY2hlY2sgb2YgdGVzdF9ub3Nl
LnB5IG5vdyBwYXNzZXMgb24gcHl0aG9uMzMgYXMgd2VsbAorCisgIC0gaXNzdWUyMDYgLSBmaXgg
dGVzdF9hc3NlcnRyZXdyaXRlLnB5IHRvIHdvcmsgd2hlbiBhIGdsb2JhbAorICAgIFBZVEhPTkRP
TlRXUklURUJZVEVDT0RFPTEgaXMgcHJlc2VudAorCisgIC0gYWRkIHRveC5pbmkgdG8gcHl0ZXN0
IGRpc3RyaWJ1dGlvbiBzbyB0aGF0IGlnbm9yZS1kaXJzIGFuZCBvdGhlcnMgY29uZmlnCisgICAg
Yml0cyBhcmUgcHJvcGVybHkgZGlzdHJpYnV0ZWQgZm9yIG1haW50YWluZXJzIHdobyBydW4gcHl0
ZXN0LW93biB0ZXN0cworCisyLjMuMQorPT09PT0KKworLSBmaXggaXNzdWUyMDIgLSBmaXggcmVn
cmVzc2lvbjogdXNpbmcgInNlbGYiIGZyb20gZml4dHVyZSBmdW5jdGlvbnMgbm93CisgIHdvcmtz
IGFzIGV4cGVjdGVkIChpdCdzIHRoZSBzYW1lICJzZWxmIiBpbnN0YW5jZSB0aGF0IGEgdGVzdCBt
ZXRob2QKKyAgd2hpY2ggdXNlcyB0aGUgZml4dHVyZSBzZWVzKQorCistIHNraXAgcGV4cGVjdCB1
c2luZyB0ZXN0cyAodGVzdF9wZGIucHkgbW9zdGx5KSBvbiBmcmVlYnNkKiBzeXN0ZW1zCisgIGR1
ZSB0byBwZXhwZWN0IG5vdCBzdXBwb3J0aW5nIGl0IHByb3Blcmx5IChoYW5naW5nKQorCistIGxp
bmsgdG8gd2ViIHBhZ2VzIGZyb20gLS1tYXJrZXJzIG91dHB1dCB3aGljaCBwcm92aWRlcyBoZWxw
IGZvcgorICBweXRlc3QubWFyay4qIHVzYWdlLgorCisyLjMuMAorPT09PT0KKworLSBmaXggaXNz
dWUyMDIgLSBiZXR0ZXIgYXV0b21hdGljIG5hbWVzIGZvciBwYXJhbWV0cml6ZWQgdGVzdCBmdW5j
dGlvbnMKKy0gZml4IGlzc3VlMTM5IC0gaW50cm9kdWNlIEBweXRlc3QuZml4dHVyZSB3aGljaCBh
bGxvd3MgZGlyZWN0IHNjb3BpbmcKKyAgYW5kIHBhcmFtZXRyaXphdGlvbiBvZiBmdW5jYXJnIGZh
Y3Rvcmllcy4KKy0gZml4IGlzc3VlMTk4IC0gY29uZnRlc3QgZml4dHVyZXMgd2VyZSBub3QgZm91
bmQgb24gd2luZG93czMyIGluIHNvbWUKKyAgY2lyY3Vtc3RhbmNlcyB3aXRoIG5lc3RlZCBkaXJl
Y3Rvcnkgc3RydWN0dXJlcyBkdWUgdG8gcGF0aCBtYW5pcHVsYXRpb24gaXNzdWVzCistIGZpeCBp
c3N1ZTE5MyBza2lwIHRlc3QgZnVuY3Rpb25zIHdpdGggd2VyZSBwYXJhbWV0cml6ZWQgd2l0aCBl
bXB0eQorICBwYXJhbWV0ZXIgc2V0cworLSBmaXggcHl0aG9uMy4zIGNvbXBhdCwgbW9zdGx5IHJl
cG9ydGluZyBiaXRzIHRoYXQgcHJldmlvdXNseSBkZXBlbmRlZAorICBvbiBkaWN0IG9yZGVyaW5n
CistIGludHJvZHVjZSByZS1vcmRlcmluZyBvZiB0ZXN0cyBieSByZXNvdXJjZSBhbmQgcGFyYW1l
dHJpemF0aW9uIHNldHVwCisgIHdoaWNoIHRha2VzIHByZWNlZGVuY2UgdG8gdGhlIHVzdWFsIGZp
bGUtb3JkZXJpbmcKKy0gZml4IGlzc3VlMTg1IG1vbmtleXBhdGNoaW5nIHRpbWUudGltZSBkb2Vz
IG5vdCBjYXVzZSBweXRlc3QgdG8gZmFpbAorLSBmaXggaXNzdWUxNzIgZHVwbGljYXRlIGNhbGwg
b2YgcHl0ZXN0LmZpeHR1cmUgZGVjb3JhdG9yZWQgc2V0dXBfbW9kdWxlCisgIGZ1bmN0aW9ucwor
LSBmaXgganVuaXR4bWw9cGF0aCBjb25zdHJ1Y3Rpb24gc28gdGhhdCBpZiB0ZXN0cyBjaGFuZ2Ug
dGhlCisgIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgYW5kIHRoZSBwYXRoIGlzIGEgcmVsYXRp
dmUgcGF0aAorICBpdCBpcyBjb25zdHJ1Y3RlZCBjb3JyZWN0bHkgZnJvbSB0aGUgb3JpZ2luYWwg
Y3VycmVudCB3b3JraW5nIGRpci4KKy0gZml4ICJweXRob24gc2V0dXAucHkgdGVzdCIgZXhhbXBs
ZSB0byBjYXVzZSBhIHByb3BlciAiZXJybm8iIHJldHVybgorLSBmaXggaXNzdWUxNjUgLSBmaXgg
YnJva2VuIGRvYyBsaW5rcyBhbmQgbWVudGlvbiBzdGFja292ZXJmbG93IGZvciBGQVEKKy0gY2F0
Y2ggdW5pY29kZS1pc3N1ZXMgd2hlbiB3cml0aW5nIGZhaWx1cmUgcmVwcmVzZW50YXRpb25zCisg
IHRvIHRlcm1pbmFsIHRvIHByZXZlbnQgdGhlIHdob2xlIHNlc3Npb24gZnJvbSBjcmFzaGluZwor
LSBmaXggeGZhaWwvc2tpcCBjb25mdXNpb246IGEgc2tpcC1tYXJrIG9yIGFuIGltcGVyYXRpdmUg
cHl0ZXN0LnNraXAKKyAgd2lsbCBub3cgdGFrZSBwcmVjZWRlbmNlIGJlZm9yZSB4ZmFpbC1tYXJr
ZXJzIGJlY2F1c2Ugd2UKKyAgY2FuJ3QgZGV0ZXJtaW5lIHhmYWlsL3hwYXNzIHN0YXR1cyBpbiBj
YXNlIG9mIGEgc2tpcC4gc2VlIGFsc286CisgIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVz
dGlvbnMvMTExMDU4MjgvaW4tcHktdGVzdC13aGVuLWktZXhwbGljaXRseS1za2lwLWEtdGVzdC10
aGF0LWlzLW1hcmtlZC1hcy14ZmFpbC1ob3ctY2FuLWktZ2V0CisKKy0gYWx3YXlzIHJlcG9ydCBp
bnN0YWxsZWQgM3JkIHBhcnR5IHBsdWdpbnMgaW4gdGhlIGhlYWRlciBvZiBhIHRlc3QgcnVuCisK
Ky0gZml4IGlzc3VlMTYwOiBhIGZhaWxpbmcgc2V0dXAgb2YgYW4geGZhaWwtbWFya2VkIHRlc3Rz
IHNob3VsZAorICBiZSByZXBvcnRlZCBhcyB4ZmFpbCAobm90IHhwYXNzKQorCistIGZpeCBpc3N1
ZTEyODogc2hvdyBjYXB0dXJlZCBvdXRwdXQgd2hlbiBjYXBzeXMvY2FwZmQgYXJlIHVzZWQKKwor
LSBmaXggaXNzdWUxNzk6IHByb3BwZXJseSBzaG93IHRoZSBkZXBlbmRlbmN5IGNoYWluIG9mIGZh
Y3RvcmllcworCistIHBsdWdpbm1hbmFnZXIucmVnaXN0ZXIoLi4uKSBub3cgcmFpc2VzIFZhbHVl
RXJyb3IgaWYgdGhlCisgIHBsdWdpbiBoYXMgYmVlbiBhbHJlYWR5IHJlZ2lzdGVyZWQgb3IgdGhl
IG5hbWUgaXMgdGFrZW4KKworLSBmaXggaXNzdWUxNTk6IGltcHJvdmUgaHR0cDovL3B5dGVzdC5v
cmcvbGF0ZXN0L2ZhcS5odG1sCisgIGVzcGVjaWFsbHkgd2l0aCByZXNwZWN0IHRvIHRoZSAibWFn
aWMiIGhpc3RvcnksIGFsc28gbWVudGlvbgorICBweXRlc3QtZGphbmdvLCB0cmlhbCBhbmQgdW5p
dHRlc3QgaW50ZWdyYXRpb24uCisKKy0gbWFrZSByZXF1ZXN0LmtleXdvcmRzIGFuZCBub2RlLmtl
eXdvcmRzIHdyaXRhYmxlLiAgQWxsIGRlc2NlbmRhbnQKKyAgY29sbGVjdGlvbiBub2RlcyB3aWxs
IHNlZSBrZXl3b3JkIHZhbHVlcy4gIEtleXdvcmRzIGFyZSBkaWN0aW9uYXJpZXMKKyAgY29udGFp
bmluZyBtYXJrZXJzIGFuZCBvdGhlciBpbmZvLgorCistIGZpeCBpc3N1ZSAxNzg6IHhtbCBiaW5h
cnkgZXNjYXBlcyBhcmUgbm93IHdyYXBwZWQgaW4gcHkueG1sLnJhdworCistIGZpeCBpc3N1ZSAx
NzY6IGNvcnJlY3RseSBjYXRjaCB0aGUgYnVpbHRpbiBBc3NlcnRpb25FcnJvcgorICBldmVuIHdo
ZW4gd2UgcmVwbGFjZWQgQXNzZXJ0aW9uRXJyb3Igd2l0aCBhIHN1YmNsYXNzIG9uIHRoZQorICBw
eXRob24gbGV2ZWwKKworLSBmYWN0b3J5IGRpc2NvdmVyeSBubyBsb25nZXIgZmFpbHMgd2l0aCBt
YWdpYyBnbG9iYWwgY2FsbGFibGVzCisgIHRoYXQgcHJvdmlkZSBubyBzYW5lIF9fY29kZV9fIG9i
amVjdCAobW9jay5jYWxsIGZvciBleGFtcGxlKQorCistIGZpeCBpc3N1ZSAxODI6IHRlc3RkaXIu
aW5wcm9jZXNzX3J1biBub3cgY29uc2lkZXJzIHBhc3NlZCBwbHVnaW5zCisKKy0gZml4IGlzc3Vl
IDE4ODogZW5zdXJlIHN5cy5leGNfaW5mbyBpcyBjbGVhciBvbiBweXRob24yCisgICAgICAgICAg
ICAgICAgIGJlZm9yZSBjYWxsaW5nIGludG8gYSB0ZXN0CisKKy0gZml4IGlzc3VlIDE5MTogYWRk
IHVuaXR0ZXN0IFRlc3RDYXNlIHJ1blRlc3QgbWV0aG9kIHN1cHBvcnQKKy0gZml4IGlzc3VlIDE1
NjogbW9ua2V5cGF0Y2ggY29ycmVjdGx5IGhhbmRsZXMgY2xhc3MgbGV2ZWwgZGVzY3JpcHRvcnMK
KworLSByZXBvcnRpbmcgcmVmaW5lbWVudHM6CisKKyAgLSBweXRlc3RfcmVwb3J0X2hlYWRlciBu
b3cgcmVjZWl2ZXMgYSAic3RhcnRkaXIiIHNvIHRoYXQKKyAgICB5b3UgY2FuIHVzZSBzdGFydGRp
ci5iZXN0cmVscGF0aCh5b3VycGF0aCkgdG8gc2hvdworICAgIG5pY2UgcmVsYXRpdmUgcGF0aAor
CisgIC0gYWxsb3cgcGx1Z2lucyB0byBpbXBsZW1lbnQgYm90aCBweXRlc3RfcmVwb3J0X2hlYWRl
ciBhbmQKKyAgICBweXRlc3Rfc2Vzc2lvbnN0YXJ0IChzZXNzaW9uc3RhcnQgaXMgaW52b2tlZCBm
aXJzdCkuCisKKyAgLSBkb24ndCBzaG93IGRlc2VsZWN0ZWQgcmVhc29uIGxpbmUgaWYgdGhlcmUg
aXMgbm9uZQorCisgIC0gcHkudGVzdCAtdnYgd2lsbCBzaG93IGFsbCBvZiBhc3NlcnQgY29tcGFy
aXNhdGlvbnMgaW5zdGVhZCBvZiB0cnVuY2F0aW5nCisKKzIuMi40Cis9PT09PQorCistIGZpeCBl
cnJvciBtZXNzYWdlIGZvciByZXdyaXR0ZW4gYXNzZXJ0aW9ucyBpbnZvbHZpbmcgdGhlICUgb3Bl
cmF0b3IKKy0gZml4IGlzc3VlIDEyNjogY29ycmVjdGx5IG1hdGNoIGFsbCBpbnZhbGlkIHhtbCBj
aGFyYWN0ZXJzIGZvciBqdW5pdHhtbAorICBiaW5hcnkgZXNjYXBlCistIGZpeCBpc3N1ZSB3aXRo
IHVuaXR0ZXN0OiBub3cgQHVuaXR0ZXN0LmV4cGVjdGVkRmFpbHVyZSBtYXJrZXJzIHNob3VsZAor
ICBiZSBwcm9jZXNzZWQgY29ycmVjdGx5ICh5b3UgY2FuIGFsc28gdXNlIEBweXRlc3QubWFyayBt
YXJrZXJzKQorLSBkb2N1bWVudCBpbnRlZ3JhdGlvbiB3aXRoIHRoZSBleHRlbmRlZCBkaXN0cmli
dXRlL3NldHVwdG9vbHMgdGVzdCBjb21tYW5kcworLSBmaXggaXNzdWUgMTQwOiBwcm9wcGVybHkg
Z2V0IHRoZSByZWFsIGZ1bmN0aW9ucworICBvZiBib3VuZCBjbGFzc21ldGhvZHMgZm9yIHNldHVw
L3RlYXJkb3duX2NsYXNzCistIGZpeCBpc3N1ZSAjMTQxOiBzd2l0Y2ggZnJvbSB0aGUgZGVjZWFz
ZWQgcGFzdGUucG9jb28ub3JnIHRvIGJwYXN0ZS5uZXQKKy0gZml4IGlzc3VlICMxNDM6IGNhbGwg
dW5jb25maWd1cmUvc2Vzc2lvbmZpbmlzaCBhbHdheXMgd2hlbgorICBjb25maWd1cmUvc2Vzc2lv
bnN0YXJ0IHdoZXJlIGNhbGxlZAorLSBmaXggaXNzdWUgIzE0NDogYmV0dGVyIG1hbmdsZSB0ZXN0
IGlkcyB0byBqdW5pdHhtbCBjbGFzc25hbWVzCistIHVwZ3JhZGUgZGlzdHJpYnV0ZV9zZXR1cC5w
eSB0byAwLjYuMjcKKworMi4yLjMKKz09PT09CisKKy0gZml4IHVwbG9hZGVkIHBhY2thZ2UgdG8g
b25seSBpbmNsdWRlIG5lY2Nlc2FyeSBmaWxlcworCisyLjIuMgorPT09PT0KKworLSBmaXggaXNz
dWUxMDE6IHdyb25nIGFyZ3MgdG8gdW5pdHRlc3QuVGVzdENhc2UgdGVzdCBmdW5jdGlvbiBub3cK
KyAgcHJvZHVjZSBiZXR0ZXIgb3V0cHV0CistIGZpeCBpc3N1ZTEwMjogcmVwb3J0IG1vcmUgdXNl
ZnVsIGVycm9ycyBhbmQgaGludHMgZm9yIHdoZW4gYQorICB0ZXN0IGRpcmVjdG9yeSB3YXMgcmVu
YW1lZCBhbmQgc29tZSBweWMvX19weWNhY2hlX18gcmVtYWluCistIGZpeCBpc3N1ZTEwNjogYWxs
b3cgcGFyYW1ldHJpemUgdG8gYmUgYXBwbGllZCBtdWx0aXBsZSB0aW1lcworICBlLmcuIGZyb20g
bW9kdWxlLCBjbGFzcyBhbmQgYXQgZnVuY3Rpb24gbGV2ZWwuCistIGZpeCBpc3N1ZTEwNzogYWN0
dWFsbHkgcGVyZm9ybSBzZXNzaW9uIHNjb3BlIGZpbmFsaXphdGlvbgorLSBkb24ndCBjaGVjayBp
biBwYXJhbWV0cml6ZSBpZiBpbmRpcmVjdCBwYXJhbWV0ZXJzIGFyZSBmdW5jYXJnIG5hbWVzCist
IGFkZCBjaGRpciBtZXRob2QgdG8gbW9ua2V5cGF0Y2ggZnVuY2FyZworLSBmaXggY3Jhc2ggcmVz
dWx0aW5nIGZyb20gY2FsbGluZyBtb25rZXlwYXRjaCB1bmRvIGEgc2Vjb25kIHRpbWUKKy0gZml4
IGlzc3VlMTE1OiBtYWtlIC0tY29sbGVjdG9ubHkgcm9idXN0IGFnYWluc3QgZWFybHkgZmFpbHVy
ZQorICAobWlzc2luZyBmaWxlcy9kaXJlY3RvcmllcykKKy0gIi1xcSAtLWNvbGxlY3Rvbmx5IiBu
b3cgc2hvd3Mgb25seSBmaWxlcyBhbmQgdGhlIG51bWJlciBvZiB0ZXN0cyBpbiB0aGVtCistICIt
cSAtLWNvbGxlY3Rvbmx5IiBub3cgc2hvd3MgdGVzdCBpZHMKKy0gYWxsb3cgYWRkaW5nIG9mIGF0
dHJpYnV0ZXMgdG8gdGVzdCByZXBvcnRzIHN1Y2ggdGhhdCBpdCBhbHNvIHdvcmtzCisgIHdpdGgg
ZGlzdHJpYnV0ZWQgdGVzdGluZyAobm8gdXBncmFkZSBvZiBweXRlc3QteGRpc3QgbmVlZGVkKQor
CisyLjIuMQorPT09PT0KKworLSBmaXggaXNzdWU5OSAoaW4gcHl0ZXN0IGFuZCBweSkgaW50ZXJu
YWxsZXJyb3JzIHdpdGggcmVzdWx0bG9nIG5vdworICBwcm9kdWNlIGJldHRlciBvdXRwdXQgLSBm
aXhlZCBieSBub3JtYWxpemluZyBweXRlc3RfaW50ZXJuYWxlcnJvcgorICBpbnB1dCBhcmd1bWVu
dHMuCistIGZpeCBpc3N1ZTk3IC8gdHJhY2ViYWNrIGlzc3VlcyAoaW4gcHl0ZXN0IGFuZCBweSkg
aW1wcm92ZSB0cmFjZWJhY2sgb3V0cHV0CisgIGluIGNvbmp1bmN0aW9uIHdpdGggamluamEyIGFu
ZCBjeXRob24gd2hpY2ggaGFjayB0cmFjZWJhY2tzCistIGZpeCBpc3N1ZTkzIChpbiBweXRlc3Qg
YW5kIHB5dGVzdC14ZGlzdCkgYXZvaWQgImRlbGF5ZWQgdGVhcmRvd25zIjoKKyAgdGhlIGZpbmFs
IHRlc3QgaW4gYSB0ZXN0IG5vZGUgd2lsbCBub3cgcnVuIGl0cyB0ZWFyZG93biBkaXJlY3RseQor
ICBpbnN0ZWFkIG9mIHdhaXRpbmcgZm9yIHRoZSBlbmQgb2YgdGhlIHNlc3Npb24uIFRoYW5rcyBE
YXZlIEh1bnQgZm9yCisgIHRoZSBnb29kIHJlcG9ydGluZyBhbmQgZmVlZGJhY2suICBUaGUgcHl0
ZXN0X3J1bnRlc3RfcHJvdG9jb2wgYXMgd2VsbAorICBhcyB0aGUgcHl0ZXN0X3J1bnRlc3RfdGVh
cmRvd24gaG9va3Mgbm93IGhhdmUgIm5leHRpdGVtIiBhdmFpbGFibGUKKyAgd2hpY2ggd2lsbCBi
ZSBOb25lIGluZGljYXRpbmcgdGhlIGVuZCBvZiB0aGUgdGVzdCBydW4uCistIGZpeCBjb2xsZWN0
aW9uIGNyYXNoIGR1ZSB0byB1bmtub3duLXNvdXJjZSBjb2xsZWN0ZWQgaXRlbXMsIHRoYW5rcwor
ICB0byBSYWxmIFNjaG1pdHQgKGZpeGVkIGJ5IGRlcGVuZGluZyBvbiBhIG1vcmUgcmVjZW50IHB5
bGliKQorCisyLjIuMAorPT09PT0KKworLSBmaXggaXNzdWU5MDogaW50cm9kdWNlIGVhZ2VyIHRl
YXJpbmcgZG93biBvZiB0ZXN0IGl0ZW1zIHNvIHRoYXQKKyAgdGVhcmRvd24gZnVuY3Rpb24gYXJl
IGNhbGxlZCBlYXJsaWVyLgorLSBhZGQgYW4gYWxsLXBvd2VyZnVsIG1ldGFmdW5jLnBhcmFtZXRy
aXplIGZ1bmN0aW9uIHdoaWNoIGFsbG93cyB0bworICBwYXJhbWV0cml6ZSB0ZXN0IGZ1bmN0aW9u
IGFyZ3VtZW50cyBpbiBtdWx0aXBsZSBzdGVwcyBhbmQgdGhlcmVmb3JlCisgIGZyb20gaW5kZXBk
ZW5lbnQgcGx1Z2lucyBhbmQgcGFsY2VzLgorLSBhZGQgYSBAcHl0ZXN0Lm1hcmsucGFyYW1ldHJp
emUgaGVscGVyIHdoaWNoIGFsbG93cyB0byBlYXNpbHkKKyAgY2FsbCBhIHRlc3QgZnVuY3Rpb24g
d2l0aCBkaWZmZXJlbnQgYXJndW1lbnQgdmFsdWVzCistIEFkZCBleGFtcGxlcyB0byB0aGUgInBh
cmFtZXRyaXplIiBleGFtcGxlIHBhZ2UsIGluY2x1ZGluZyBhIHF1aWNrIHBvcnQKKyAgb2YgVGVz
dCBzY2VuYXJpb3MgYW5kIHRoZSBuZXcgcGFyYW1ldHJpemUgZnVuY3Rpb24gYW5kIGRlY29yYXRv
ci4KKy0gaW50cm9kdWNlIHJlZ2lzdHJhdGlvbiBmb3IgInB5dGVzdC5tYXJrLioiIGhlbHBlcnMg
dmlhIGluaS1maWxlcworICBvciB0aHJvdWdoIHBsdWdpbiBob29rcy4gIEFsc28gaW50cm9kdWNl
IGEgIi0tc3RyaWN0IiBvcHRpb24gd2hpY2gKKyAgd2lsbCB0cmVhdCB1bnJlZ2lzdGVyZWQgbWFy
a2VycyBhcyBlcnJvcnMKKyAgYWxsb3dpbmcgdG8gYXZvaWQgdHlwb3MgYW5kIG1haW50YWluIGEg
d2VsbCBkZXNjcmliZWQgc2V0IG9mIG1hcmtlcnMKKyAgZm9yIHlvdXIgdGVzdCBzdWl0ZS4gIFNl
ZSBleGFwbGVzIGF0IGh0dHA6Ly9weXRlc3Qub3JnL2xhdGVzdC9tYXJrLmh0bWwKKyAgYW5kIGl0
cyBsaW5rcy4KKy0gaXNzdWU1MDogaW50cm9kdWNlICItbSBtYXJrZXIiIG9wdGlvbiB0byBzZWxl
Y3QgdGVzdHMgYmFzZWQgb24gbWFya2VycworICAodGhpcyBpcyBhIHN0cmljdGVyIGFuZCBtb3Jl
IHByZWRpY3RhYmxlIHZlcnNpb24gb2YgJy1rJyBpbiB0aGF0ICItbSIKKyAgb25seSBtYXRjaGVz
IGNvbXBsZXRlIG1hcmtlcnMgYW5kIGhhcyBtb3JlIG9idmlvdXMgcnVsZXMgZm9yIGFuZC9vcgor
ICBzZW1hbnRpY3MuCistIG5ldyBmZWF0dXJlIHRvIGhlbHAgb3B0aW1pemluZyB0aGUgc3BlZWQg
b2YgeW91ciB0ZXN0czoKKyAgLS1kdXJhdGlvbnM9TiBvcHRpb24gZm9yIGRpc3BsYXlpbmcgTiBz
bG93ZXN0IHRlc3QgY2FsbHMKKyAgYW5kIHNldHVwL3RlYXJkb3duIG1ldGhvZHMuCistIGZpeCBp
c3N1ZTg3OiAtLXBhc3RlYmluIG5vdyB3b3JrcyB3aXRoIHB5dGhvbjMKKy0gZml4IGlzc3VlODk6
IC0tcGRiIHdpdGggdW5leHBlY3RlZCBleGNlcHRpb25zIGluIGRvY3Rlc3Qgd29yayBtb3JlIHNl
bnNpYmx5CistIGZpeCBhbmQgY2xlYW51cCBweXRlc3QncyBvd24gdGVzdCBzdWl0ZSB0byBub3Qg
bGVhayBGRHMKKy0gZml4IGlzc3VlODM6IGxpbmsgdG8gZ2VuZXJhdGVkIGZ1bmNhcmcgbGlzdAor
LSBmaXggaXNzdWU3NDogcHlhcmcgbW9kdWxlIG5hbWVzIGFyZSBub3cgY2hlY2tlZCBhZ2FpbnN0
IGltcC5maW5kX21vZHVsZSBmYWxzZSBwb3NpdGl2ZXMKKy0gZml4IGNvbXBhdGliaWxpdHkgd2l0
aCB0d2lzdGVkL3RyaWFsLTExLjEuMCB1c2UgY2FzZXMKKy0gc2ltcGxpZnkgTm9kZS5saXN0Y2hh
aW4KKy0gc2ltcGxpZnkganVuaXR4bWwgb3V0cHV0IGNvZGUgYnkgcmVseWluZyBvbiBweS54bWwK
Ky0gYWRkIHN1cHBvcnQgZm9yIHNraXAgcHJvcGVydGllcyBvbiB1bml0dGVzdCBjbGFzc2VzIGFu
ZCBmdW5jdGlvbnMKKworMi4xLjMKKz09PT09CisKKy0gZml4IGlzc3VlNzk6IGFzc2VydGlvbiBy
ZXdyaXRpbmcgZmFpbGVkIG9uIHNvbWUgY29tcGFyaXNvbnMgaW4gYm9vbG9wcworLSBjb3JyZWN0
bHkgaGFuZGxlIHplcm8gbGVuZ3RoIGFyZ3VtZW50cyAoYSBsYSBweXRlc3QgJycpCistIGZpeCBp
c3N1ZTY3IC8ganVuaXR4bWwgbm93IGNvbnRhaW5zIGNvcnJlY3QgdGVzdCBkdXJhdGlvbnMsIHRo
YW5rcyByb25ueQorLSBmaXggaXNzdWU3NSAvIHNraXBwaW5nIHRlc3QgZmFpbHVyZSBvbiBqeXRo
b24KKy0gZml4IGlzc3VlNzcgLyBBbGxvdyBhc3NlcnRyZXByX2NvbXBhcmUgaG9vayB0byBhcHBs
eSB0byBhIHN1YnNldCBvZiB0ZXN0cworCisyLjEuMgorPT09PT0KKworLSBmaXggYXNzZXJ0aW9u
IHJld3JpdGluZyBvbiBmaWxlcyB3aXRoIHdpbmRvd3MgbmV3bGluZXMgb24gc29tZSBQeXRob24g
dmVyc2lvbnMKKy0gcmVmaW5lIHRlc3QgZGlzY292ZXJ5IGJ5IHBhY2thZ2UvbW9kdWxlIG5hbWUg
KC0tcHlhcmdzKSwgdGhhbmtzIEZsb3JpYW4gTWF5ZXIKKy0gZml4IGlzc3VlNjkgLyBhc3NlcnRp
b24gcmV3cml0aW5nIGZpeGVkIG9uIHNvbWUgYm9vbGVhbiBvcGVyYXRpb25zCistIGZpeCBpc3N1
ZTY4IC8gcGFja2FnZXMgbm93IHdvcmsgd2l0aCBhc3NlcnRpb24gcmV3cml0aW5nCistIGZpeCBp
c3N1ZTY2OiB1c2UgZGlmZmVyZW50IGFzc2VydGlvbiByZXdyaXRpbmcgY2FjaGVzIHdoZW4gdGhl
IC1PIG9wdGlvbiBpcyBwYXNzZWQKKy0gZG9uJ3QgdHJ5IGFzc2VydGlvbiByZXdyaXRpbmcgb24g
Snl0aG9uLCB1c2UgcmVpbnRlcnAKKworMi4xLjEKKz09PT09CisKKy0gZml4IGlzc3VlNjQgLyBw
eXRlc3Quc2V0X3RyYWNlIG5vdyB3b3JrcyB3aXRoaW4gcHl0ZXN0X2dlbmVyYXRlX3Rlc3RzIGhv
b2tzCistIGZpeCBpc3N1ZTYwIC8gZml4IGVycm9yIGNvbmRpdGlvbnMgaW52b2x2aW5nIHRoZSBj
cmVhdGlvbiBvZiBfX3B5Y2FjaGVfXworLSBmaXggaXNzdWU2MyAvIGFzc2VydGlvbiByZXdyaXRp
bmcgb24gaW5zZXJ0cyBpbnZvbHZpbmcgc3RyaW5ncyBjb250YWluaW5nICclJworLSBmaXggYXNz
ZXJ0aW9uIHJld3JpdGluZyBvbiBjYWxscyB3aXRoIGEgKiogYXJnCistIGRvbid0IGNhY2hlIHJl
d3JpdHRlbiBtb2R1bGVzIGlmIGJ5dGVjb2RlIGdlbmVyYXRpb24gaXMgZGlzYWJsZWQKKy0gZml4
IGFzc2VydGlvbiByZXdyaXRpbmcgaW4gcmVhZC1vbmx5IGRpcmVjdG9yaWVzCistIGZpeCBpc3N1
ZTU5OiBwcm92aWRlIHN5c3RlbS1vdXQvZXJyIHRhZ3MgZm9yIGp1bml0eG1sIG91dHB1dAorLSBm
aXggaXNzdWU2MTogYXNzZXJ0aW9uIHJld3JpdGluZyBvbiBib29sZWFuIG9wZXJhdGlvbnMgd2l0
aCAzIG9yIG1vcmUgb3BlcmFuZHMKKy0geW91IGNhbiBub3cgYnVpbGQgYSBtYW4gcGFnZSB3aXRo
ICJjZCBkb2MgOyBtYWtlIG1hbiIKKworMi4xLjAKKz09PT09CisKKy0gZml4IGlzc3VlNTMgY2Fs
bCBub3Nlc3R5bGUgc2V0dXAgZnVuY3Rpb25zIHdpdGggY29ycmVjdCBvcmRlcmluZworLSBmaXgg
aXNzdWU1OCBhbmQgaXNzdWU1OTogbmV3IGFzc2VydGlvbiBjb2RlIGZpeGVzCistIG1lcmdlIEJl
bmphbWluJ3MgYXNzZXJ0aW9ucmV3cml0ZSBicmFuY2g6IG5vdyBhc3NlcnRpb25zCisgIGZvciB0
ZXN0IG1vZHVsZXMgb24gcHl0aG9uIDIuNiBhbmQgYWJvdmUgYXJlIGRvbmUgYnkgcmV3cml0aW5n
CisgIHRoZSBBU1QgYW5kIHNhdmluZyB0aGUgcHljIGZpbGUgYmVmb3JlIHRoZSB0ZXN0IG1vZHVs
ZSBpcyBpbXBvcnRlZC4KKyAgc2VlIGRvYy9hc3NlcnQudHh0IGZvciBtb3JlIGluZm8uCistIGZp
eCBpc3N1ZTQzOiBpbXByb3ZlIGRvY3Rlc3RzIHdpdGggYmV0dGVyIHRyYWNlYmFjayByZXBvcnRp
bmcgb24KKyAgdW5leHBlY3RlZCBleGNlcHRpb25zCistIGZpeCBpc3N1ZTQ3OiB0aW1pbmcgb3V0
cHV0IGluIGp1bml0eG1sIGZvciB0ZXN0IGNhc2VzIGlzIG5vdyBjb3JyZWN0CistIGZpeCBpc3N1
ZTQ4OiB0eXBvIGluIE1hcmtJbmZvIHJlcHIgbGVhZGluZyB0byBleGNlcHRpb24KKy0gZml4IGlz
c3VlNDk6IGF2b2lkIGNvbmZ1c2luZyBlcnJvciB3aGVuIGluaXRpemFsaWF0aW9uIHBhcnRpYWxs
eSBmYWlscworLSBmaXggaXNzdWU0NDogZW52L3VzZXJuYW1lIGV4cGFuc2lvbiBmb3IganVuaXR4
bWwgZmlsZSBwYXRoCistIHNob3cgcmVsZWFzZWxldmVsIGluZm9ybWF0aW9uIGluIHRlc3QgcnVu
cyBmb3IgcHlweQorLSByZXdvcmtlZCBkb2MgcGFnZXMgZm9yIGJldHRlciBuYXZpZ2F0aW9uIGFu
ZCBQREYgZ2VuZXJhdGlvbgorLSByZXBvcnQgS2V5Ym9hcmRJbnRlcnJ1cHQgZXZlbiBpZiBpbnRl
cnJ1cHRlZCBkdXJpbmcgc2Vzc2lvbiBzdGFydHVwCistIGZpeCBpc3N1ZSAzNSAtIHByb3ZpZGUg
UERGIGRvYyB2ZXJzaW9uIGFuZCBkb3dubG9hZCBsaW5rIGZyb20gaW5kZXggcGFnZQorCisyLjAu
MworPT09PT0KKworLSBmaXggaXNzdWUzODogbmljZXIgdHJhY2ViYWNrcyBvbiBjYWxscyB0byBo
b29rcywgcGFydGljdWxhcmx5IGVhcmx5CisgIGNvbmZpZ3VyZS9zZXNzaW9uc3RhcnQgb25lcwor
CistIGZpeCBtaXNzaW5nIHNraXAgcmVhc29uL21ldGEgaW5mb3JtYXRpb24gaW4ganVuaXR4bWwg
ZmlsZXMsIHJlcG9ydGVkCisgIHZpYSBodHRwOi8vbGlzdHMuaWR5bGwub3JnL3BpcGVybWFpbC90
ZXN0aW5nLWluLXB5dGhvbi8yMDExLU1hcmNoLzAwMzkyOC5odG1sCisKKy0gZml4IGlzc3VlMzQ6
IGF2b2lkIGNvbGxlY3Rpb24gZmFpbHVyZSB3aXRoICJ0ZXN0IiBwcmVmaXhlZCBjbGFzc2VzCisg
IGRlcml2aW5nIGZyb20gb2JqZWN0LgorCistIGRvbid0IHJlcXVpcmUgemxpYiAoYW5kIG90aGVy
IGxpYnMpIGZvciBnZW5zY3JpcHQgcGx1Z2luIHdpdGhvdXQKKyAgLS1nZW5zY3JpcHQgYWN0dWFs
bHkgYmVpbmcgdXNlZC4KKworLSBzcGVlZCB1cCBza2lwcyAoYnkgbm90IGRvaW5nIGEgZnVsbCB0
cmFjZWJhY2sgcmVwcmVzZW5hdGlvbgorICBpbnRlcm5hbGx5KQorCistIGZpeCBpc3N1ZTM3OiBh
dm9pZCBpbnZhbGlkIGNoYXJhY3RlcnMgaW4ganVuaXR4bWwncyBvdXRwdXQKKworMi4wLjIKKz09
PT09CisKKy0gdGFja2xlIGlzc3VlMzIgLSBzcGVlZCB1cCB0ZXN0IHJ1bnMgb2YgdmVyeSBxdWlj
ayB0ZXN0IGZ1bmN0aW9ucworICBieSByZWR1Y2luZyB0aGUgcmVsYXRpdmUgb3ZlcmhlYWQKKwor
LSBmaXggaXNzdWUzMCAtIGV4dGVuZGVkIHhmYWlsL3NraXBpZiBoYW5kbGluZyBhbmQgaW1wcm92
ZWQgcmVwb3J0aW5nLgorICBJZiB5b3UgaGF2ZSBhIHN5bnRheCBlcnJvciBpbiB5b3VyIHNraXAv
eGZhaWwKKyAgZXhwcmVzc2lvbnMgeW91IG5vdyBnZXQgbmljZSBlcnJvciByZXBvcnRzLgorCisg
IEFsc28geW91IGNhbiBub3cgYWNjZXNzIG1vZHVsZSBnbG9iYWxzIGZyb20geGZhaWwvc2tpcGlm
CisgIGV4cHJlc3Npb25zIHNvIHRoYXQgdGhpcyBmb3IgZXhhbXBsZSB3b3JrcyBub3c6OgorCisg
ICAgaW1wb3J0IHB5dGVzdAorICAgIGltcG9ydCBteW1vZHVsZQorICAgIEBweXRlc3QubWFyay5z
a2lwaWYoIm15bW9kdWxlLl9fdmVyc2lvbl9fWzBdID09ICIxIikKKyAgICBkZWYgdGVzdF9mdW5j
dGlvbigpOgorICAgICAgICBwYXNzCisKKyAgVGhpcyB3aWxsIG5vdCBydW4gdGhlIHRlc3QgZnVu
Y3Rpb24gaWYgdGhlIG1vZHVsZSdzIHZlcnNpb24gc3RyaW5nCisgIGRvZXMgbm90IHN0YXJ0IHdp
dGggYSAiMSIuICBOb3RlIHRoYXQgc3BlY2lmeWluZyBhIHN0cmluZyBpbnN0ZWFkCisgIG9mIGEg
Ym9vbGVhbiBleHByZXNzaW9ucyBhbGxvd3MgcHkudGVzdCB0byByZXBvcnQgbWVhbmluZ2Z1bCBp
bmZvcm1hdGlvbgorICB3aGVuIHN1bW1hcml6aW5nIGEgdGVzdCBydW4gYXMgdG8gd2hhdCBjb25k
aXRpb25zIGxlYWQgdG8gc2tpcHBpbmcKKyAgKG9yIHhmYWlsLWluZykgdGVzdHMuCisKKy0gZml4
IGlzc3VlMjggLSBzZXR1cF9tZXRob2QgYW5kIHB5dGVzdF9nZW5lcmF0ZV90ZXN0cyB3b3JrIHRv
Z2V0aGVyCisgIFRoZSBzZXR1cF9tZXRob2QgZml4dHVyZSBtZXRob2Qgbm93IGdldHMgY2FsbGVk
IGFsc28gZm9yCisgIHRlc3QgZnVuY3Rpb24gaW52b2NhdGlvbnMgZ2VuZXJhdGVkIGZyb20gdGhl
IHB5dGVzdF9nZW5lcmF0ZV90ZXN0cworICBob29rLgorCistIGZpeCBpc3N1ZTI3IC0gY29sbGVj
dG9ubHkgYW5kIGtleXdvcmQtc2VsZWN0aW9uICgtaykgbm93IHdvcmsgdG9nZXRoZXIKKyAgQWxz
bywgaWYgeW91IGRvICJweS50ZXN0IC0tY29sbGVjdG9ubHkgLXEiIHlvdSBub3cgZ2V0IGEgZmxh
dCBsaXN0CisgIG9mIHRlc3QgaWRzIHRoYXQgeW91IGNhbiB1c2UgdG8gcGFzdGUgdG8gdGhlIHB5
LnRlc3QgY29tbWFuZGxpbmUKKyAgaW4gb3JkZXIgdG8gZXhlY3V0ZSBhIHBhcnRpY3VsYXIgdGVz
dC4KKworLSBmaXggaXNzdWUyNSBhdm9pZCByZXBvcnRlZCBwcm9ibGVtcyB3aXRoIC0tcGRiIGFu
ZCBweXRob24zLjIvZW5jb2RpbmdzIG91dHB1dAorCistIGZpeCBpc3N1ZTIzIC0gdG1wZGlyIGFy
Z3VtZW50IG5vdyB3b3JrcyBvbiBQeXRob24zLjIgYW5kIFdpbmRvd3NYUAorICBTdGFydGluZyB3
aXRoIFB5dGhvbjMuMiBvcy5zeW1saW5rIG1heSBiZSBzdXBwb3J0ZWQuIEJ5IHJlcXVpcmluZwor
ICBhIG5ld2VyIHB5IGxpYiB2ZXJzaW9uIHRoZSBweS5wYXRoLmxvY2FsKCkgaW1wbGVtZW50YXRp
b24gYWNrbm93bGVkZ2VzCisgIHRoaXMuCisKKy0gZml4ZWQgdHlwb3MgaW4gdGhlIGRvY3MgKHRo
YW5rcyBWaWN0b3IgR2FyY2lhLCBCcmlhbm5hIExhdWdoZXIpIGFuZCBwYXJ0aWN1bGFyCisgIHRo
YW5rcyB0byBMYXVyYSBDcmVpZ2h0b24gd2hvIGFsc28gcmV2aWV2ZWQgcGFydHMgb2YgdGhlIGRv
Y3VtZW50YXRpb24uCisKKy0gZml4IHNsaWdobHkgd3Jvbmcgb3V0cHV0IG9mIHZlcmJvc2UgcHJv
Z3Jlc3MgcmVwb3J0aW5nIGZvciBjbGFzc2VzCisgICh0aGFua3MgQW1hdXJ5KQorCistIG1vcmUg
cHJlY2lzZSAoYXZvaWRpbmcgb2YpIGRlcHJlY2F0aW9uIHdhcm5pbmdzIGZvciBub2RlLkNsYXNz
fEZ1bmN0aW9uIGFjY2Vzc2VzCisKKy0gYXZvaWQgc3RkIHVuaXR0ZXN0IGFzc2VydGlvbiBoZWxw
ZXIgY29kZSBpbiB0cmFjZWJhY2tzICh0aGFua3MgUm9ubnkpCisKKzIuMC4xCis9PT09PQorCist
IHJlZmluZSBhbmQgdW5pZnkgaW5pdGlhbCBjYXB0dXJpbmcgc28gdGhhdCBpdCB3b3JrcyBuaWNl
bHkKKyAgZXZlbiBpZiB0aGUgbG9nZ2luZyBtb2R1bGUgaXMgdXNlZCBvbiBhbiBlYXJseS1sb2Fk
ZWQgY29uZnRlc3QucHkKKyAgZmlsZSBvciBwbHVnaW4uCistIGFsbG93IHRvIG9taXQgIigpIiBp
biB0ZXN0IGlkcyB0byBhbGxvdyBmb3IgdW5pZm9ybSB0ZXN0IGlkcworICBhcyBwcm9kdWNlZCBi
eSBBbGZyZWRvJ3MgbmljZSBweXRlc3QudmltIHBsdWdpbi4KKy0gZml4IGlzc3VlMTIgLSBzaG93
IHBsdWdpbiB2ZXJzaW9ucyB3aXRoICItLXZlcnNpb24iIGFuZAorICAiLS10cmFjZWNvbmZpZyIg
YW5kIGFsc28gZG9jdW1lbnQgaG93IHRvIGFkZCBleHRyYSBpbmZvcm1hdGlvbgorICB0byByZXBv
cnRpbmcgdGVzdCBoZWFkZXIKKy0gZml4IGlzc3VlMTcgKGltcG9ydC0qIHJlcG9ydGluZyBpc3N1
ZSBvbiBweXRob24zKSBieQorICByZXF1aXJpbmcgcHk+MS40LjAgKDEuNC4xIGlzIGdvaW5nIHRv
IGluY2x1ZGUgaXQpCistIGZpeCBpc3N1ZTEwIChudW1weSBhcnJheXMgdHJ1dGggY2hlY2tpbmcp
IGJ5IHJlZmluaW5nCisgIGFzc2VydGlvbiBpbnRlcnByZXRhdGlvbiBpbiBweSBsaWIKKy0gZml4
IGlzc3VlMTU6IG1ha2Ugbm9zZSBjb21wYXRpYmlsaXR5IHRlc3RzIGNvbXBhdGlibGUKKyAgd2l0
aCBweXRob24zIChub3cgdGhhdCBub3NlLTEuMCBzdXBwb3J0cyBweXRob24zKQorLSByZW1vdmUg
c29tZXdoYXQgc3VycHJpc2luZyAic2FtZS1jb25mdGVzdCIgZGV0ZWN0aW9uIGJlY2F1c2UKKyAg
aXQgaWdub3JlcyBjb25mdGVzdC5weSB3aGVuIHRoZXkgYXBwZWFyIGluIHNldmVyYWwgc3ViZGly
cy4KKy0gaW1wcm92ZSBhc3NlcnRpb25zICgibm90IGluIiksIHRoYW5rcyBGbG9yaXMgQnJ1eW5v
b2doZQorLSBpbXByb3ZlIGJlaGF2aW91ci93YXJuaW5ncyB3aGVuIHJ1bm5pbmcgb24gdG9wIG9m
ICJweXRob24gLU9PIgorICAoYXNzZXJ0aW9ucyBhbmQgZG9jc3RyaW5ncyBhcmUgdHVybmVkIG9m
ZiwgbGVhZGluZyB0byBwb3RlbnRpYWwKKyAgZmFsc2UgcG9zaXRpdmVzKQorLSBpbnRyb2R1Y2Ug
YSBweXRlc3RfY21kbGluZV9wcm9jZXNzYXJncyhhcmdzKSBob29rCisgIHRvIGFsbG93IGR5bmFt
aWMgY29tcHV0YXRpb24gb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KKyAgVGhpcyBmaXhlcyBh
IHJlZ3Jlc3Npb24gYmVjYXVzZSBweS50ZXN0IHByaW9yIHRvIDIuMAorICBhbGxvd2VkIHRvIHNl
dCBjb21tYW5kIGxpbmUgb3B0aW9ucyBmcm9tIGNvbmZ0ZXN0LnB5CisgIGZpbGVzIHdoaWNoIHNv
IGZhciBweXRlc3QtMi4wIG9ubHkgYWxsb3dlZCBmcm9tIGluaS1maWxlcyBub3cuCistIGZpeCBp
c3N1ZTc6IGFzc2VydCBmYWlsdXJlcyBpbiBkb2N0ZXN0IG1vZHVsZXMuCisgIHVuZXhwZWN0ZWQg
ZmFpbHVyZXMgaW4gZG9jdGVzdHMgd2lsbCBub3QgZ2VuZXJhbGx5CisgIHNob3cgbmljZXIsIGku
ZS4gd2l0aGluIHRoZSBkb2N0ZXN0IGZhaWxpbmcgY29udGV4dC4KKy0gZml4IGlzc3VlOTogc2V0
dXAvdGVhcmRvd24gZnVuY3Rpb25zIGZvciBhbiB4ZmFpbC1tYXJrZWQKKyAgdGVzdCB3aWxsIHJl
cG9ydCBhcyB4ZmFpbCBpZiB0aGV5IGZhaWwgYnV0IHJlcG9ydCBhcyBub3JtYWxseQorICBwYXNz
aW5nIChub3QgeHBhc3NpbmcpIGlmIHRoZXkgc3VjY2VlZC4gIFRoaXMgb25seSBpcyB0cnVlCisg
IGZvciAiZGlyZWN0IiBzZXR1cC90ZWFyZG93biBpbnZvY2F0aW9ucyBiZWNhdXNlIHRlYXJkb3du
X2NsYXNzLworICB0ZWFyZG93bl9tb2R1bGUgY2Fubm90IGNsb3NlbHkgcmVsYXRlIHRvIGEgc2lu
Z2xlIHRlc3QuCistIGZpeCBpc3N1ZTE0OiBubyBsb2dnaW5nIGVycm9ycyBhdCBwcm9jZXNzIGV4
aXQKKy0gcmVmaW5lbWVudHMgdG8gImNvbGxlY3RpbmciIG91dHB1dCBvbiBub24tdHR5cworLSBy
ZWZpbmUgaW50ZXJuYWwgcGx1Z2luIHJlZ2lzdHJhdGlvbiBhbmQgLS10cmFjZWNvbmZpZyBvdXRw
dXQKKy0gaW50cm9kdWNlIGEgbWVjaGFuaXNtIHRvIHByZXZlbnQvdW5yZWdpc3RlciBwbHVnaW5z
IGZyb20gdGhlCisgIGNvbW1hbmQgbGluZSwgc2VlIGh0dHA6Ly9weXRlc3Qub3JnL3BsdWdpbnMu
aHRtbCNjbWR1bnJlZ2lzdGVyCistIGFjdGl2YXRlIHJlc3VsdGxvZyBwbHVnaW4gYnkgZGVmYXVs
dAorLSBmaXggcmVncmVzc2lvbiB3cnQgeWllbGRlZCB0ZXN0cyB3aGljaCBkdWUgdG8gdGhlCisg
IGNvbGxlY3Rpb24tYmVmb3JlLXJ1bm5pbmcgc2VtYW50aWNzIHdlcmUgbm90CisgIHNldHVwIGFz
IHdpdGggcHl0ZXN0IDEuMy40LiAgTm90ZSwgaG93ZXZlciwgdGhhdAorICB0aGUgcmVjb21tZW5k
ZWQgYW5kIG11Y2ggY2xlYW5lciB3YXkgdG8gZG8gdGVzdAorICBwYXJhbWV0cmFpemF0aW9uIHJl
bWFpbnMgdGhlICJweXRlc3RfZ2VuZXJhdGVfdGVzdHMiCisgIG1lY2hhbmlzbSwgc2VlIHRoZSBk
b2NzLgorCisyLjAuMAorPT09PT0KKworLSBweXRlc3QtMi4wIGlzIG5vdyBpdHMgb3duIHBhY2th
Z2UgYW5kIGRlcGVuZHMgb24gcHlsaWItMi4wCistIG5ldyBhYmlsaXR5OiBweXRob24gLW0gcHl0
ZXN0IC8gcHl0aG9uIC1tIHB5dGVzdC5tYWluIGFiaWxpdHkKKy0gbmV3IHB5dGhvbiBpbnZjYXRp
b246IHB5dGVzdC5tYWluKGFyZ3MsIHBsdWdpbnMpIHRvIGxvYWQKKyAgc29tZSBjdXN0b20gcGx1
Z2lucyBlYXJseS4KKy0gdHJ5IGhhcmRlciB0byBydW4gdW5pdHRlc3QgdGVzdCBzdWl0ZXMgaW4g
YSBtb3JlIGNvbXBhdGlibGUgbWFubmVyCisgIGJ5IGRlZmVycmluZyBzZXR1cC90ZWFyZG93biBz
ZW1hbnRpY3MgdG8gdGhlIHVuaXR0ZXN0IHBhY2thZ2UuCisgIGFsc28gd29yayBoYXJkZXIgdG8g
cnVuIHR3aXN0ZWQvdHJpYWwgYW5kIERqYW5nbyB0ZXN0cyB3aGljaAorICBzaG91bGQgbm93IGJh
c2ljYWxseSB3b3JrIGJ5IGRlZmF1bHQuCistIGludHJvZHVjZSBhIG5ldyB3YXkgdG8gc2V0IGNv
bmZpZyBvcHRpb25zIHZpYSBpbmktc3R5bGUgZmlsZXMsCisgIGJ5IGRlZmF1bHQgc2V0dXAuY2Zn
IGFuZCB0b3guaW5pIGZpbGVzIGFyZSBzZWFyY2hlZC4gIFRoZSBvbGQKKyAgd2F5cyAoY2VydGFp
biBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIGR5bmFtaWMgY29uZnRlc3QucHkgcmVhZGluZworICBp
cyByZW1vdmVkKS4KKy0gYWRkIGEgbmV3ICItcSIgb3B0aW9uIHdoaWNoIGRlY3JlYXNlcyB2ZXJi
b3NpdHkgYW5kIHByaW50cyBhIG1vcmUKKyAgbm9zZS91bml0dGVzdC1zdHlsZSAiZG90IiBvdXRw
dXQuCistIGZpeCBpc3N1ZTEzNSAtIG1hcmtzIG5vdyB3b3JrIHdpdGggdW5pdHRlc3QgdGVzdCBj
YXNlcyBhcyB3ZWxsCistIGZpeCBpc3N1ZTEyNiAtIGludHJvZHVjZSBweS50ZXN0LnNldF90cmFj
ZSgpIHRvIHRyYWNlIGV4ZWN1dGlvbiB2aWEKKyAgUERCIGR1cmluZyB0aGUgcnVubmluZyBvZiB0
ZXN0cyBldmVuIGlmIGNhcHR1cmluZyBpcyBvbmdvaW5nLgorLSBmaXggaXNzdWUxMjMgLSBuZXcg
InB5dGhvbiAtbSBweS50ZXN0IiBpbnZvY2F0aW9uIGZvciBweS50ZXN0CisgIChyZXF1aXJlcyBQ
eXRob24gMi41IG9yIGFib3ZlKQorLSBmaXggaXNzdWUxMjQgLSBtYWtlIHJlcG9ydGluZyBtb3Jl
IHJlc2lsaWVudCBhZ2FpbnN0IHRlc3RzIG9wZW5pbmcKKyAgZmlsZXMgb24gZmlsZWRlc2NyaXB0
b3IgMSAoc3Rkb3V0KS4KKy0gZml4IGlzc3VlMTA5IC0gc2libGluZyBjb25mdGVzdC5weSBmaWxl
cyB3aWxsIG5vdCBiZSBsb2FkZWQuCisgIChhbmQgRGlyZWN0b3J5IGNvbGxlY3RvcnMgY2Fubm90
IGJlIGN1c3RvbWl6ZWQgYW55bW9yZSBmcm9tIGEgRGlyZWN0b3J5J3MKKyAgY29uZnRlc3QucHkg
LSB0aGlzIG5lZWRzIHRvIGhhcHBlbiBhdCBsZWFzdCBvbmUgbGV2ZWwgdXApLgorLSBpbnRyb2R1
Y2UgKGN1c3RvbWl6YWJsZSkgYXNzZXJ0aW9uIGZhaWx1cmUgcmVwcmVzZW50YXRpb25zIGFuZCBl
bmhhbmNlCisgIG91dHB1dCBvbiBhc3NlcnRpb24gZmFpbHVyZXMgZm9yIGNvbXBhcmlzb25zIGFu
ZCBvdGhlciBjYXNlcyAoRmxvcmlzIEJydXlub29naGUpCistIG5vc2UtcGx1Z2luOiBwYXNzIHRo
cm91Z2ggdHlwZS1zaWduYXR1cmUgZmFpbHVyZXMgaW4gc2V0dXAvdGVhcmRvd24KKyAgZnVuY3Rp
b25zIGluc3RlYWQgb2Ygbm90IGNhbGxpbmcgdGhlbSAoRWQgU2luZ2xldG9uKQorLSByZW1vdmUg
cHkudGVzdC5jb2xsZWN0LkRpcmVjdG9yeSAoZm9sbG93cyBmcm9tIGEgbWFqb3IgcmVmYWN0b3Jp
bmcKKyAgYW5kIHNpbXBsaWZpY2F0aW9uIG9mIHRoZSBjb2xsZWN0aW9uIHByb2Nlc3MpCistIG1h
am9ybHkgcmVkdWNlIHB5LnRlc3QgY29yZSBjb2RlLCBzaGlmdCBmdW5jdGlvbi9weXRob24gdGVz
dGluZyB0byBvd24gcGx1Z2luCistIGZpeCBpc3N1ZTg4IChmaW5kaW5nIGN1c3RvbSB0ZXN0IG5v
ZGVzIGZyb20gY29tbWFuZCBsaW5lIGFyZykKKy0gcmVmaW5lICd0bXBkaXInIGNyZWF0aW9uLCB3
aWxsIG5vdyBjcmVhdGUgYmFzZW5hbWVzIGJldHRlciBhc3NvY2lhdGVkCisgIHdpdGggdGVzdCBu
YW1lcyAodGhhbmtzIFJvbm55KQorLSAieHBhc3MiICh1bmV4cGVjdGVkIHBhc3MpIHRlc3RzIGRv
bid0IGNhdXNlIGV4aXRjb2RlIT0wCistIGZpeCBpc3N1ZTEzMSAvIGlzc3VlNjAgLSBpbXBvcnRp
bmcgZG9jdGVzdHMgaW4gX19pbml0X18gZmlsZXMgdXNlZCBhcyBuYW1lc3BhY2UgcGFja2FnZXMK
Ky0gZml4IGlzc3VlOTMgc3Rkb3V0L3N0ZGVyciBpcyBjYXB0dXJlZCB3aGlsZSBpbXBvcnRpbmcg
Y29uZnRlc3QucHkKKy0gZml4IGJ1ZzogdW5pdHRlc3QgY29sbGVjdGVkIGZ1bmN0aW9ucyBub3cg
YWxzbyBjYW4gaGF2ZSAicHl0ZXN0bWFyayIKKyAgYXBwbGllZCBhdCBjbGFzcy9tb2R1bGUgbGV2
ZWwKKy0gYWRkIGFiaWxpdHkgdG8gdXNlICJjbGFzcyIgbGV2ZWwgZm9yIGNhY2hlZF9zZXR1cCBo
ZWxwZXIKKy0gZml4IHN0cmFuZ2VuZXNzOiBtYXJrLiogb2JqZWN0cyBhcmUgbm93IGltbXV0YWJs
ZSwgY3JlYXRlIG5ldyBpbnN0YW5jZXMKKworMS4zLjQKKz09PT09CisKKy0gZml4IGlzc3VlMTEx
OiBpbXByb3ZlIGluc3RhbGwgZG9jdW1lbnRhdGlvbiBmb3Igd2luZG93cworLSBmaXggaXNzdWUx
MTk6IGZpeCBjdXN0b20gY29sbGVjdGFiaWxpdHkgb2YgX19pbml0X18ucHkgYXMgYSBtb2R1bGUK
Ky0gZml4IGlzc3VlMTE2OiAtLWRvY3Rlc3Rtb2R1bGVzIHdvcmsgd2l0aCBfX2luaXRfXy5weSBm
aWxlcyBhcyB3ZWxsCistIGZpeCBpc3N1ZTExNTogdW5pZnkgaW50ZXJuYWwgZXhjZXB0aW9uIHBh
c3N0aHJvdWdoL2NhdGNoaW5nL0dlbmVyYXRvckV4aXQKKy0gZml4IGlzc3VlMTE4OiBuZXcgLS10
Yj1uYXRpdmUgZm9yIHByZXNlbnRpbmcgY3B5dGhvbi1zdGFuZGFyZCBleGNlcHRpb25zCisKKzEu
My4zCis9PT09PQorCistIGZpeCBpc3N1ZTExMzogYXNzZXJ0aW9uIHJlcHJlc2VudGF0aW9uIHBy
b2JsZW0gd2l0aCB0cmlwbGUtcXVvdGVkIHN0cmluZ3MKKyAgKGFuZCBwb3NzaWJseSBvdGhlciBj
YXNlcykKKy0gbWFrZSBjb25mdGVzdCBsb2FkaW5nIGRldGVjdCB0aGF0IGEgY29uZnRlc3QgZmls
ZSB3aXRoIHRoZSBzYW1lCisgIGNvbnRlbnQgd2FzIGFscmVhZHkgbG9hZGVkLCBhdm9pZHMgc3Vy
cHJpc2VzIGluIG5lc3RlZCBkaXJlY3Rvcnkgc3RydWN0dXJlcworICB3aGljaCBjYW4gYmUgcHJv
ZHVjZWQgZS5nLiBieSBIdWRzb24uIEl0IHByb2JhYmx5IHJlbW92ZXMgdGhlIG5lZWQgdG8gdXNl
CisgIC0tY29uZmN1dGRpciBpbiBtb3N0IGNhc2VzLgorLSBmaXggdGVybWluYWwgY29sb3Jpbmcg
Zm9yIHdpbjMyCisgICh0aGFua3MgTWljaGFlbCBGb29yZCBmb3IgcmVwb3J0aW5nKQorLSBmaXgg
d2VpcmRuZXNzOiBtYWtlIHRlcm1pbmFsIHdpZHRoIGRldGVjdGlvbiB3b3JrIG9uIHN0ZG91dCBp
bnN0ZWFkIG9mIHN0ZGluCisgICh0aGFua3MgQXJtaW4gUm9uYWNoZXIgZm9yIHJlcG9ydGluZykK
Ky0gcmVtb3ZlIHRyYWlsaW5nIHdoaXRlc3BhY2UgaW4gYWxsIHB5L3RleHQgZGlzdHJpYnV0aW9u
IGZpbGVzCisKKzEuMy4yCis9PT09PQorCisqKk5ldyBmZWF0dXJlcyoqCisKKy0gZml4IGlzc3Vl
MTAzOiAgaW50cm9kdWNlIHB5LnRlc3QucmFpc2VzIGFzIGNvbnRleHQgbWFuYWdlciwgZXhhbXBs
ZXM6OgorCisgICAgd2l0aCBweS50ZXN0LnJhaXNlcyhaZXJvRGl2aXNpb25FcnJvcik6CisgICAg
ICAgIHggPSAwCisgICAgICAgIDEgLyB4CisKKyAgICB3aXRoIHB5LnRlc3QucmFpc2VzKFJ1bnRp
bWVFcnJvcikgYXMgZXhjaW5mbzoKKyAgICAgICAgY2FsbF9zb21ldGhpbmcoKQorCisgICAgIyB5
b3UgbWF5IGRvIGV4dHJhIGNoZWNrcyBvbiBleGNpbmZvLnZhbHVlfHR5cGV8dHJhY2ViYWNrIGhl
cmUKKworICAodGhhbmtzIFJvbm55IFBmYW5uc2NobWlkdCkKKworLSBGdW5jYXJnIGZhY3Rvcmll
cyBjYW4gbm93IGR5bmFtaWNhbGx5IGFwcGx5IGEgbWFya2VyIHRvIGEKKyAgdGVzdCBpbnZvY2F0
aW9uLiAgVGhpcyBpcyBmb3IgZXhhbXBsZSB1c2VmdWwgaWYgYSBmYWN0b3J5CisgIHByb3ZpZGVz
IHBhcmFtZXRlcnMgdG8gYSB0ZXN0IHdoaWNoIGFyZSBleHBlY3RlZC10by1mYWlsOjoKKworICAg
IGRlZiBweXRlc3RfZnVuY2FyZ19fYXJnKHJlcXVlc3QpOgorICAgICAgICByZXF1ZXN0LmFwcGx5
bWFya2VyKHB5LnRlc3QubWFyay54ZmFpbChyZWFzb249ImZsYWt5IGNvbmZpZyIpKQorICAgICAg
ICAuLi4KKworICAgIGRlZiB0ZXN0X2Z1bmN0aW9uKGFyZyk6CisgICAgICAgIC4uLgorCistIGlt
cHJvdmVkIGVycm9yIHJlcG9ydGluZyBvbiBjb2xsZWN0aW9uIGFuZCBpbXBvcnQgZXJyb3JzLiBU
aGlzIG1ha2VzCisgIHVzZSBvZiBhIG1vcmUgZ2VuZXJhbCBtZWNoYW5pc20sIG5hbWVseSB0aGF0
IGZvciBjdXN0b20gdGVzdCBpdGVtL2NvbGxlY3QKKyAgbm9kZXMgYGBub2RlLnJlcHJfZmFpbHVy
ZShleGNpbmZvKWBgIGlzIG5vdyB1bmlmb3JtbHkgY2FsbGVkIHNvIHRoYXQgeW91IGNhbgorICBv
dmVycmlkZSBpdCB0byByZXR1cm4gYSBzdHJpbmcgZXJyb3IgcmVwcmVzZW50YXRpb24gb2YgeW91
ciBjaG9pY2UKKyAgd2hpY2ggaXMgZ29pbmcgdG8gYmUgcmVwb3J0ZWQgYXMgYSAocmVkKSBzdHJp
bmcuCisKKy0gaW50cm9kdWNlICctLWp1bml0cHJlZml4PVNUUicgb3B0aW9uIHRvIHByZXBlbmQg
YSBwcmVmaXgKKyAgdG8gYWxsIHJlcG9ydHMgaW4gdGhlIGp1bml0eG1sIGZpbGUuCisKKyoqQnVn
IGZpeGVzKioKKworLSBtYWtlIHRlc3RzIGFuZCB0aGUgYGBweXRlc3RfcmVjd2FybmBgIHBsdWdp
biBpbiBwYXJ0aWN1bGFyIGZ1bGx5IGNvbXBhdGlibGUKKyAgdG8gUHl0aG9uMi43IChpZiB5b3Ug
dXNlIHRoZSBgYHJlY3dhcm5gYCBmdW5jYXJnIHdhcm5pbmdzIHdpbGwgYmUgZW5hYmxlZCBzbyB0
aGF0CisgIHlvdSBjYW4gcHJvcGVybHkgY2hlY2sgZm9yIHRoZWlyIGV4aXN0ZW5jZSBpbiBhIGNy
b3NzLXB5dGhvbiBtYW5uZXIpLgorLSByZWZpbmUgLS1wZGI6IGlnbm9yZSB4ZmFpbGVkIHRlc3Rz
LCB1bmlmeSBpdHMgVEItcmVwb3J0aW5nIGFuZAorICBkb24ndCBkaXNwbGF5IGZhaWx1cmVzIGFn
YWluIGF0IHRoZSBlbmQuCistIGZpeCBhc3NlcnRpb24gaW50ZXJwcmV0YXRpb24gd2l0aCB0aGUg
Kiogb3BlcmF0b3IgKHRoYW5rcyBCZW5qYW1pbiBQZXRlcnNvbikKKy0gZml4IGlzc3VlMTA1IGFz
c2lnbm1lbnQgb24gdGhlIHNhbWUgbGluZSBhcyBhIGZhaWxpbmcgYXNzZXJ0aW9uICh0aGFua3Mg
QmVuamFtaW4gUGV0ZXJzb24pCistIGZpeCBpc3N1ZTEwNCBwcm9wZXIgZXNjYXBpbmcgZm9yIHRl
c3QgbmFtZXMgaW4ganVuaXR4bWwgcGx1Z2luICh0aGFua3MgYW5vbnltb3VzKQorLSBmaXggaXNz
dWU1NyAtZnwtLWxvb3BvbmZhaWwgdG8gd29yayB3aXRoIHhwYXNzaW5nIHRlc3RzICh0aGFua3Mg
Um9ubnkpCistIGZpeCBpc3N1ZTkyIGNvbGxlY3Rvbmx5IHJlcG9ydGVyIGFuZCAtLXBhc3RlYmlu
ICh0aGFua3MgQmVuamFtaW4gUGV0ZXJzb24pCistIGZpeCBweS5jb2RlLmNvbXBpbGUoc291cmNl
KSB0byBnZW5lcmF0ZSB1bmlxdWUgZmlsZW5hbWVzCistIGZpeCBhc3NlcnRpb24gcmUtaW50ZXJw
IHByb2JsZW1zIG9uIFB5UHksIGJ5IGRlZmVyaW5nIGNvZGUKKyAgY29tcGlsYXRpb24gdG8gdGhl
IChvdmVycmlkYWJsZSkgRnJhbWUuZXZhbCBjbGFzcy4gKHRoYW5rcyBBbWF1cnkgRm9yZ2VvdCkK
Ky0gZml4IHB5LnBhdGgubG9jYWwucHlpbXBvcnQoKSB0byB3b3JrIHdpdGggZGlyZWN0b3JpZXMK
Ky0gc3RyZWFtbGluZSBweS5wYXRoLmxvY2FsLm1rZHRlbXAgaW1wbGVtZW50YXRpb24gYW5kIHVz
YWdlCistIGRvbid0IHByaW50IGVtcHR5IGxpbmVzIHdoZW4gc2hvd2luZyBqdW5pdHhtbC1maWxl
bmFtZQorLSBhZGQgb3B0aW9uYWwgYm9vbGVhbiBpZ25vcmVfZXJyb3JzIHBhcmFtZXRlciB0byBw
eS5wYXRoLmxvY2FsLnJlbW92ZQorLSBmaXggdGVybWluYWwgd3JpdGluZyBvbiB3aW4zMi9weXRo
b24yLjQKKy0gcHkucHJvY2Vzcy5jbWRleGVjKCkgbm93IHRyaWVzIGhhcmRlciB0byByZXR1cm4g
cHJvcGVybHkgZW5jb2RlZCB1bmljb2RlIG9iamVjdHMKKyAgb24gYWxsIHB5dGhvbiB2ZXJzaW9u
cworLSBpbnN0YWxsIHBsYWluIHB5LnRlc3QvcHkud2hpY2ggc2NyaXB0cyBhbHNvIGZvciBKeXRo
b24sIHRoaXMgaGVscHMgdG8KKyAgZ2V0IGNhbm9uaWNhbCBzY3JpcHQgcGF0aHMgaW4gdmlydHVh
bGVudiBzaXR1YXRpb25zCistIG1ha2UgcGF0aC5iZXN0cmVscGF0aChwYXRoKSByZXR1cm4gIi4i
LCBub3RlIHRoYXQgd2hlbiBjYWxsaW5nCisgIFguYmVzdHJlbHBhdGggdGhlIGFzc3VtcHRpb24g
aXMgdGhhdCBYIGlzIGEgZGlyZWN0b3J5LgorLSBtYWtlIGluaXRpYWwgY29uZnRlc3QgZGlzY292
ZXJ5IGlnbm9yZSAiLS0iIHByZWZpeGVkIGFyZ3VtZW50cworLSBmaXggcmVzdWx0bG9nIHBsdWdp
biB3aGVuIHVzZWQgaW4gYW4gbXVsdGljcHUvbXVsdGlob3N0IHhkaXN0IHNpdHVhdGlvbgorICAo
dGhhbmtzIEpha3ViIEd1c3RhaykKKy0gcGVyZm9ybSBkaXN0cmlidXRlZCB0ZXN0aW5nIHJlbGF0
ZWQgcmVwb3J0aW5nIGluIHRoZSB4ZGlzdC1wbHVnaW4KKyAgcmF0aGVyIHRoYW4gaGF2aW5nIGRp
c3QtcmVsYXRlZCBjb2RlIGluIHRoZSBnZW5lcmljIHB5LnRlc3QKKyAgZGlzdHJpYnV0aW9uCist
IGZpeCBob21lZGlyIGRldGVjdGlvbiBvbiBXaW5kb3dzCistIHNoaXAgZGlzdHJpYnV0ZV9zZXR1
cC5weSB2ZXJzaW9uIDAuNi4xMworCisxLjMuMQorPT09PT0KKworKipOZXcgZmVhdHVyZXMqKgor
CistIGlzc3VlOTE6IGludHJvZHVjZSBuZXcgcHkudGVzdC54ZmFpbChyZWFzb24pIGhlbHBlcgor
ICB0byBpbXBlcmF0aXZlbHkgbWFyayBhIHRlc3QgYXMgZXhwZWN0ZWQgdG8gZmFpbC4gQ2FuCisg
IGJlIHVzZWQgZnJvbSB3aXRoaW4gc2V0dXAgYW5kIHRlc3QgZnVuY3Rpb25zLiBUaGlzIGlzCisg
IHVzZWZ1bCBlc3BlY2lhbGx5IGZvciBwYXJhbWV0cml6ZWQgdGVzdHMgd2hlbiBjZXJ0YWluCisg
IGNvbmZpZ3VyYXRpb25zIGFyZSBleHBlY3RlZC10by1mYWlsLiAgSW4gdGhpcyBjYXNlIHRoZQor
ICBkZWNsYXJhdGl2ZSBhcHByb2FjaCB3aXRoIHRoZSBAcHkudGVzdC5tYXJrLnhmYWlsIGNhbm5v
dAorICBiZSB1c2VkIGFzIGl0IHdvdWxkIG1hcmsgYWxsIGNvbmZpZ3VyYXRpb25zIGFzIHhmYWls
LgorCistIGlzc3VlMTAyOiBpbnRyb2R1Y2UgbmV3IC0tbWF4ZmFpbD1OVU0gb3B0aW9uIHRvIHN0
b3AKKyAgdGVzdCBydW5zIGFmdGVyIE5VTSBmYWlsdXJlcy4gIFRoaXMgaXMgYSBnZW5lcmFsaXph
dGlvbgorICBvZiB0aGUgJy14JyBvciAnLS1leGl0Zmlyc3QnIG9wdGlvbiB3aGljaCBpcyBub3cg
ZXF1aXZhbGVudAorICB0byAnLS1tYXhmYWlsPTEnLiAgQm90aCAnLXgnIGFuZCAnLS1tYXhmYWls
JyB3aWxsCisgIG5vdyBhbHNvIHByaW50IGEgbGluZSBuZWFyIHRoZSBlbmQgaW5kaWNhdGluZyB0
aGUgSW50ZXJydXB0aW9uLgorCistIGlzc3VlODk6IGFsbG93IHB5LnRlc3QubWFyayBkZWNvcmF0
b3JzIHRvIGJlIHVzZWQgb24gY2xhc3NlcworICAoY2xhc3MgZGVjb3JhdG9ycyB3ZXJlIGludHJv
ZHVjZWQgd2l0aCBweXRob24yLjYpIGFuZAorICBhbHNvIGFsbG93IHRvIGhhdmUgbXVsdGlwbGUg
bWFya2VycyBhcHBsaWVkIGF0IGNsYXNzL21vZHVsZSBsZXZlbAorICBieSBzcGVjaWZ5aW5nIGEg
bGlzdC4KKworLSBpbXByb3ZlIGFuZCByZWZpbmUgbGV0dGVyIHJlcG9ydGluZyBpbiB0aGUgcHJv
Z3Jlc3MgYmFyOgorICAuICBwYXNzCisgIGYgIGZhaWxlZCB0ZXN0CisgIHMgIHNraXBwZWQgdGVz
dHMgKHJlbWluZGVyOiB1c2UgZm9yIGRlcGVuZGVuY3kvcGxhdGZvcm0gbWlzbWF0Y2ggb25seSkK
KyAgeCAgeGZhaWxlZCB0ZXN0ICh0ZXN0IHRoYXQgd2FzIGV4cGVjdGVkIHRvIGZhaWwpCisgIFgg
IHhwYXNzZWQgdGVzdCAodGVzdCB0aGF0IHdhcyBleHBlY3RlZCB0byBmYWlsIGJ1dCBwYXNzZWQp
CisKKyAgWW91IGNhbiB1c2UgYW55IGNvbWJpbmF0aW9uIG9mICdmc3hYJyB3aXRoIHRoZSAnLXIn
IGV4dGVuZGVkCisgIHJlcG9ydGluZyBvcHRpb24uIFRoZSB4ZmFpbC94cGFzcyByZXN1bHRzIHdp
bGwgc2hvdyB1cCBhcworICBza2lwcGVkIHRlc3RzIGluIHRoZSBqdW5pdHhtbCBvdXRwdXQgLSB3
aGljaCBhbHNvIGZpeGVzCisgIGlzc3VlOTkuCisKKy0gbWFrZSBweS50ZXN0LmNtZGxpbmUubWFp
bigpIHJldHVybiB0aGUgZXhpdHN0YXR1cyBpbnN0ZWFkIG9mIHJhaXNpbmcKKyAgU3lzdGVtRXhp
dCBhbmQgYWxzbyBhbGxvdyBpdCB0byBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMuICBUaGlzIG9m
CisgIGNvdXJzZSByZXF1aXJlcyB0aGF0IHlvdXIgYXBwbGljYXRpb24gYW5kIHRlc3RzIGFyZSBw
cm9wZXJseSB0ZWFyZWQKKyAgZG93biBhbmQgZG9uJ3QgaGF2ZSBnbG9iYWwgc3RhdGUuCisKKyoq
QnVnIEZpeGVzKioKKworLSBpbXByb3ZlZCB0cmFjZWJhY2sgcHJlc2VudGF0aW9uOgorICAtIGlt
cHJvdmVkIGFuZCB1bmlmaWVkIHJlcG9ydGluZyBmb3IgIi0tdGI9c2hvcnQiIG9wdGlvbgorICAt
IEVycm9ycyBkdXJpbmcgdGVzdCBtb2R1bGUgaW1wb3J0cyBhcmUgbXVjaCBzaG9ydGVyLCAodXNp
bmcgLS10Yj1zaG9ydCBzdHlsZSkKKyAgLSByYWlzZXMgc2hvd3Mgc2hvcnRlciBtb3JlIHJlbGV2
YW50IHRyYWNlYmFja3MKKyAgLSAtLWZ1bGx0cmFjZSBub3cgbW9yZSBzeXN0ZW1hdGljYWxseSBt
YWtlcyB0cmFjZXMgbG9uZ2VyIC8gaW5oaWJpdHMgY3V0dGluZworCistIGltcHJvdmUgc3VwcG9y
dCBmb3IgcmFpc2VzIGFuZCBvdGhlciBkeW5hbWljYWxseSBjb21waWxlZCBjb2RlIGJ5CisgIG1h
bmlwdWxhdGluZyBweXRob24ncyBsaW5lY2FjaGUuY2FjaGUgaW5zdGVhZCBvZiB0aGUgcHJldmlv
dXMKKyAgcmF0aGVyIGhhY2t5IHdheSBvZiBjcmVhdGluZyBjdXN0b20gY29kZSBvYmplY3RzLiAg
VGhpcyBtYWtlcworICBpdCBzZWVtbGVzc2x5IHdvcmsgb24gSnl0aG9uIGFuZCBQeVB5IHdoZXJl
IGl0IHByZXZpb3VzbHkgZGlkbid0LgorCistIGZpeCBpc3N1ZTk2OiBtYWtlIGNhcHR1cmluZyBt
b3JlIHJlc2lsaWVudCBhZ2FpbnN0IENvbnRyb2wtQworICBpbnRlcnJ1cHRpb25zIChpbnZvbHZl
ZCBzb21ld2hhdCBzdWJzdGFudGlhbCByZWZhY3RvcmluZworICB0byB0aGUgdW5kZXJseWluZyBj
YXB0dXJpbmcgZnVuY3Rpb25hbGl0eSB0byBhdm9pZCByYWNlCisgIGNvbmRpdGlvbnMpLgorCist
IGZpeCBjaGFpbmluZyBvZiBjb25kaXRpb25hbCBza2lwaWYveGZhaWwgZGVjb3JhdG9ycyAtIHNv
IGl0IHdvcmtzIG5vdworICBhcyBleHBlY3RlZCB0byB1c2UgbXVsdGlwbGUgQHB5LnRlc3QubWFy
ay5za2lwaWYoY29uZGl0aW9uKSBkZWNvcmF0b3JzLAorICBpbmNsdWRpbmcgc3BlY2lmaWMgcmVw
b3J0aW5nIHdoaWNoIG9mIHRoZSBjb25kaXRpb25zIGxlYWQgdG8gc2tpcHBpbmcuCisKKy0gZml4
IGlzc3VlOTU6IGxhdGUtaW1wb3J0IHpsaWIgc28gdGhhdCBpdCdzIG5vdCByZXF1aXJlZAorICBm
b3IgZ2VuZXJhbCBweS50ZXN0IHN0YXJ0dXAuCisKKy0gZml4IGlzc3VlOTQ6IG1ha2UgcmVwb3J0
aW5nIG1vcmUgcm9idXN0IGFnYWluc3QgYm9ndXMgc291cmNlIGNvZGUKKyAgKGFuZCBpbnRlcm5h
bGx5IGJlIG1vcmUgY2FyZWZ1bCB3aGVuIHByZXNlbnRpbmcgdW5leHBlY3RlZCBieXRlIHNlcXVl
bmNlcykKKworCisxLjMuMAorPT09PT0KKworLSBkZXByZWNhdGUgLS1yZXBvcnQgb3B0aW9uIGlu
IGZhdm91ciBvZiBhIG5ldyBzaG9ydGVyIGFuZCBlYXNpZXIgdG8KKyAgcmVtZW1iZXIgLXIgb3B0
aW9uOiBpdCB0YWtlcyBhIHN0cmluZyBhcmd1bWVudCBjb25zaXN0aW5nIG9mIGFueQorICBjb21i
aW5hdGlvbiBvZiAneGZzWCcgY2hhcmFjdGVycy4gIFRoZXkgcmVsYXRlIHRvIHRoZSBzaW5nbGUg
Y2hhcnMKKyAgeW91IHNlZSBkdXJpbmcgdGhlIGRvdHRlZCBwcm9ncmVzcyBwcmludGluZyBhbmQg
d2lsbCBwcmludCBhbiBleHRyYSBsaW5lCisgIHBlciB0ZXN0IGF0IHRoZSBlbmQgb2YgdGhlIHRl
c3QgcnVuLiAgVGhpcyBleHRyYSBsaW5lIGluZGljYXRlcyB0aGUgZXhhY3QKKyAgcG9zaXRpb24g
b3IgdGVzdCBJRCB0aGF0IHlvdSBkaXJlY3RseSBwYXN0ZSB0byB0aGUgcHkudGVzdCBjbWRsaW5l
IGluIG9yZGVyCisgIHRvIHJlLXJ1biBhIHBhcnRpY3VsYXIgdGVzdC4KKworLSBhbGxvdyBleHRl
cm5hbCBwbHVnaW5zIHRvIHJlZ2lzdGVyIG5ldyBob29rcyB2aWEgdGhlIG5ldworICBweXRlc3Rf
YWRkaG9va3MocGx1Z2lubWFuYWdlcikgaG9vay4gIFRoZSBuZXcgcmVsZWFzZSBvZgorICB0aGUg
cHl0ZXN0LXhkaXN0IHBsdWdpbiBmb3IgZGlzdHJpYnV0ZWQgYW5kIGxvb3BvbmZhaWxpbmcKKyAg
dGVzdGluZyByZXF1aXJlcyB0aGlzIGZlYXR1cmUuCisKKy0gYWRkIGEgbmV3IHB5dGVzdF9pZ25v
cmVfY29sbGVjdChwYXRoLCBjb25maWcpIGhvb2sgdG8gYWxsb3cgcHJvamVjdHMgYW5kCisgIHBs
dWdpbnMgdG8gZGVmaW5lIGV4Y2x1c2lvbiBiZWhhdmlvdXIgZm9yIHRoZWlyIGRpcmVjdG9yeSBz
dHJ1Y3R1cmUgLQorICBmb3IgZXhhbXBsZSB5b3UgbWF5IGRlZmluZSBpbiBhIGNvbmZ0ZXN0LnB5
IHRoaXMgbWV0aG9kOjoKKworICAgICAgICBkZWYgcHl0ZXN0X2lnbm9yZV9jb2xsZWN0KHBhdGgp
OgorICAgICAgICAgICAgcmV0dXJuIHBhdGguY2hlY2sobGluaz0xKQorCisgIHRvIHByZXZlbnQg
ZXZlbiBhIGNvbGxlY3Rpb24gdHJ5IG9mIGFueSB0ZXN0cyBpbiBzeW1saW5rZWQgZGlycy4KKwor
LSBuZXcgcHl0ZXN0X3B5Y29sbGVjdF9tYWtlbW9kdWxlKHBhdGgsIHBhcmVudCkgaG9vayBmb3IK
KyAgYWxsb3dpbmcgY3VzdG9taXphdGlvbiBvZiB0aGUgTW9kdWxlIGNvbGxlY3Rpb24gb2JqZWN0
IGZvciBhCisgIG1hdGNoaW5nIHRlc3QgbW9kdWxlLgorCistIGV4dGVuZCBhbmQgcmVmaW5lIHhm
YWlsIG1lY2hhbmlzbToKKyAgYGBAcHkudGVzdC5tYXJrLnhmYWlsKHJ1bj1GYWxzZSlgYCBkbyBu
b3QgcnVuIHRoZSBkZWNvcmF0ZWQgdGVzdAorICBgYEBweS50ZXN0Lm1hcmsueGZhaWwocmVhc29u
PSIuLi4iKWBgIHByaW50cyB0aGUgcmVhc29uIHN0cmluZyBpbiB4ZmFpbCBzdW1tYXJpZXMKKyAg
c3BlY2lmaXlpbmcgYGAtLXJ1bnhmYWlsYGAgb24gY29tbWFuZCBsaW5lIHZpcnR1YWxseSBpZ25v
cmVzIHhmYWlsIG1hcmtlcnMKKworLSBleHBvc2UgKHByZXZpb3VzbHkgaW50ZXJuYWwpIGNvbW1v
bmx5IHVzZWZ1bCBtZXRob2RzOgorICBweS5pby5nZXRfdGVybWluYWxfd2l0aCgpIC0+IHJldHVy
biB0ZXJtaW5hbCB3aWR0aAorICBweS5pby5hbnNpX3ByaW50KC4uLikgLT4gcHJpbnQgY29sb3Jl
ZC9ib2xkIHRleHQgb24gbGludXgvd2luMzIKKyAgcHkuaW8uc2FmZXJlcHIob2JqKSAtPiByZXR1
cm4gbGltaXRlZCByZXByZXNlbnRhdGlvbiBzdHJpbmcKKworLSBleHBvc2UgdGVzdCBvdXRjb21l
IHJlbGF0ZWQgZXhjZXB0aW9ucyBhcyBweS50ZXN0LnNraXAuRXhjZXB0aW9uLAorICBweS50ZXN0
LnJhaXNlcy5FeGNlcHRpb24gZXRjLiwgdXNlZnVsIG1vc3RseSBmb3IgcGx1Z2lucworICBkb2lu
ZyBzcGVjaWFsIG91dGNvbWUgaW50ZXJwcmV0YXRpb24vdHdlYWtpbmcKKworLSAoaXNzdWU4NSkg
Zml4IGp1bml0eG1sIHBsdWdpbiB0byBoYW5kbGUgdGVzdHMgd2l0aCBub24tYXNjaWkgb3V0cHV0
CisKKy0gZml4L3JlZmluZSBweXRob24zIGNvbXBhdGliaWxpdHkgKHRoYW5rcyBCZW5qYW1pbiBQ
ZXRlcnNvbikKKworLSBmaXhlcyBmb3IgbWFraW5nIHRoZSBqeXRob24vd2luMzIgY29tYmluYXRp
b24gd29yaywgbm90ZSBob3dldmVyOgorICBqeXRob24yLjUuMS93aW4zMiBkb2VzIG5vdCBwcm92
aWRlIGEgY29tbWFuZCBsaW5lIGxhdW5jaGVyLCBzZWUKKyAgaHR0cDovL2J1Z3Muanl0aG9uLm9y
Zy9pc3N1ZTE0OTEgLiBTZWUgcHlsaWIgaW5zdGFsbCBkb2N1bWVudGF0aW9uCisgIGZvciBob3cg
dG8gd29yayBhcm91bmQuCisKKy0gZml4ZXMgZm9yIGhhbmRsaW5nIG9mIHVuaWNvZGUgZXhjZXB0
aW9uIHZhbHVlcyBhbmQgdW5wcmludGFibGUgb2JqZWN0cworCistIChpc3N1ZTg3KSBmaXggdW5i
b3VuZGxvY2FsIGVycm9yIGluIGFzc2VydGlvbm9sZCBjb2RlCisKKy0gKGlzc3VlODYpIGltcHJv
dmUgZG9jdW1lbnRhdGlvbiBmb3IgbG9vcG9uZmFpbGluZworCistIHJlZmluZSBJTyBjYXB0dXJp
bmc6IHN0ZGluLXJlZGlyZWN0IHBzZXVkby1maWxlIG5vdyBoYXMgYSBOT1AgY2xvc2UoKSBtZXRo
b2QKKworLSBzaGlwIGRpc3RyaWJ1dGVfc2V0dXAucHkgdmVyc2lvbiAwLjYuMTAKKworLSBhZGRl
ZCBsaW5rcyB0byB0aGUgbmV3IGNhcHR1cmVsb2cgYW5kIGNvdmVyYWdlIHBsdWdpbnMKKworCisx
LjIuMAorPT09PT0KKworLSByZWZpbmVkIHVzYWdlIGFuZCBvcHRpb25zIGZvciAicHkuY2xlYW51
cCI6OgorCisgICAgcHkuY2xlYW51cCAgICAgIyByZW1vdmUgIioucHljIiBhbmQgIiokcHkuY2xh
c3MiIChqeXRob24pIGZpbGVzCisgICAgcHkuY2xlYW51cCAtZSAuc3dwIC1lIC5jYWNoZSAjIGFs
c28gcmVtb3ZlIGZpbGVzIHdpdGggdGhlc2UgZXh0ZW5zaW9ucworICAgIHB5LmNsZWFudXAgLXMg
ICMgcmVtb3ZlICJidWlsZCIgYW5kICJkaXN0IiBkaXJlY3RvcnkgbmV4dCB0byBzZXR1cC5weSBm
aWxlcworICAgIHB5LmNsZWFudXAgLWQgICMgYWxzbyByZW1vdmUgZW1wdHkgZGlyZWN0b3JpZXMK
KyAgICBweS5jbGVhbnVwIC1hICAjIHN5bm9ueW0gZm9yICItcyAtZCAtZSAncGlwLWxvZy50eHQn
IgorICAgIHB5LmNsZWFudXAgLW4gICMgZHJ5IHJ1biwgb25seSBzaG93IHdoYXQgd291bGQgYmUg
cmVtb3ZlZAorCistIGFkZCBhIG5ldyBvcHRpb24gInB5LnRlc3QgLS1mdW5jYXJncyIgd2hpY2gg
c2hvd3MgYXZhaWxhYmxlIGZ1bmNhcmdzCisgIGFuZCB0aGVpciBoZWxwIHN0cmluZ3MgKGRvY3N0
cmluZ3Mgb24gdGhlaXIgcmVzcGVjdGl2ZSBmYWN0b3J5IGZ1bmN0aW9uKQorICBmb3IgYSBnaXZl
biB0ZXN0IHBhdGgKKworLSBkaXNwbGF5IGEgc2hvcnQgYW5kIGNvbmNpc2UgdHJhY2ViYWNrIGlm
IGEgZnVuY2FyZyBsb29rdXAgZmFpbHMKKworLSBlYXJseS1sb2FkICJjb25mdGVzdC5weSIgZmls
ZXMgaW4gbm9uLWRvdCBmaXJzdC1sZXZlbCBzdWIgZGlyZWN0b3JpZXMuCisgIGFsbG93cyB0byBj
b252ZW5pZW50bHkga2VlcCBhbmQgYWNjZXNzIHRlc3QtcmVsYXRlZCBvcHRpb25zIGluIGEgYGB0
ZXN0YGAKKyAgc3ViZGlyIGFuZCBzdGlsbCBhZGQgY29tbWFuZCBsaW5lIG9wdGlvbnMuCisKKy0g
Zml4IGlzc3VlNjc6IG5ldyBzdXBlci1zaG9ydCB0cmFjZWJhY2stcHJpbnRpbmcgb3B0aW9uOiAi
LS10Yj1saW5lIiB3aWxsIHByaW50IGEgc2luZ2xlIGxpbmUgZm9yIGVhY2ggZmFpbGluZyAocHl0
aG9uKSB0ZXN0IGluZGljYXRpbmcgaXRzIGZpbGVuYW1lLCBsaW5lbm8gYW5kIHRoZSBmYWlsdXJl
IHZhbHVlCisKKy0gZml4IGlzc3VlNzg6IGFsd2F5cyBjYWxsIHB5dGhvbi1sZXZlbCB0ZWFyZG93
biBmdW5jdGlvbnMgZXZlbiBpZiB0aGUKKyAgYWNjb3JkaW5nIHNldHVwIGZhaWxlZC4gIFRoaXMg
aW5jbHVkZXMgcmVmaW5lbWVudHMgZm9yIGNhbGxpbmcgc2V0dXBfbW9kdWxlL2NsYXNzIGZ1bmN0
aW9ucworICB3aGljaCB3aWxsIG5vdyBvbmx5IGJlIGNhbGxlZCBvbmNlIGluc3RlYWQgb2YgdGhl
IHByZXZpb3VzIGJlaGF2aW91ciB3aGVyZSB0aGV5J2QgYmUgY2FsbGVkCisgIG11bHRpcGxlIHRp
bWVzIGlmIHRoZXkgcmFpc2UgYW4gZXhjZXB0aW9uIChpbmNsdWRpbmcgYSBTa2lwcGVkIGV4Y2Vw
dGlvbikuICBBbnkgZXhjZXB0aW9uCisgIHdpbGwgYmUgcmUtY29yZGVkIGFuZCBhc3NvY2lhdGVk
IHdpdGggYWxsIHRlc3RzIGluIHRoZSBhY2NvcmRpbmcgbW9kdWxlL2NsYXNzIHNjb3BlLgorCist
IGZpeCBpc3N1ZTYzOiBhc3N1bWUgPDQwIGNvbHVtbnMgdG8gYmUgYSBib2d1cyB0ZXJtaW5hbCB3
aWR0aCwgZGVmYXVsdCB0byA4MAorCistIGZpeCBwZGIgZGVidWdnaW5nIHRvIGJlIGluIHRoZSBj
b3JyZWN0IGZyYW1lIG9uIHJhaXNlcy1yZWxhdGVkIGVycm9ycworCistIHVwZGF0ZSBhcGlwa2cu
cHkgdG8gZml4IGFuIGlzc3VlIHdoZXJlIHJlY3Vyc2l2ZSBpbXBvcnRzIG1pZ2h0CisgIHVubmVj
ZXNzYXJpbHkgYnJlYWsgaW1wb3J0aW5nCisKKy0gZml4IHBsdWdpbiBsaW5rcworCisxLjEuMQor
PT09PT0KKworLSBtb3ZlZCBkaXN0L2xvb3BvbmZhaWxpbmcgZnJvbSBweS50ZXN0IGNvcmUgaW50
byBhIG5ldworICBzZXBhcmF0ZWx5IHJlbGVhc2VkIHB5dGVzdC14ZGlzdCBwbHVnaW4uCisKKy0g
bmV3IGp1bml0eG1sIHBsdWdpbjogLS1qdW5pdHhtbD1wYXRoIHdpbGwgZ2VuZXJhdGUgYSBqdW5p
dCBzdHlsZSB4bWwgZmlsZQorICB3aGljaCBpcyBwcm9jZXNzYWJsZSBlLmcuIGJ5IHRoZSBIdWRz
b24gQ0kgc3lzdGVtLgorCistIG5ldyBvcHRpb246IC0tZ2Vuc2NyaXB0PXBhdGggd2lsbCBnZW5l
cmF0ZSBhIHN0YW5kYWxvbmUgcHkudGVzdCBzY3JpcHQKKyAgd2hpY2ggd2lsbCBub3QgbmVlZCBh
bnkgbGlicmFyaWVzIGluc3RhbGxlZC4gIHRoYW5rcyB0byBSYWxmIFNjaG1pdHQuCisKKy0gbmV3
IG9wdGlvbjogLS1pZ25vcmUgd2lsbCBwcmV2ZW50IHNwZWNpZmllZCBwYXRoIGZyb20gY29sbGVj
dGlvbi4KKyAgQ2FuIGJlIHNwZWNpZmllZCBtdWx0aXBsZSB0aW1lcy4KKworLSBuZXcgb3B0aW9u
OiAtLWNvbmZjdXRkaXI9ZGlyIHdpbGwgbWFrZSBweS50ZXN0IG9ubHkgY29uc2lkZXIgY29uZnRl
c3QKKyAgZmlsZXMgdGhhdCBhcmUgcmVsYXRpdmUgdG8gdGhlIHNwZWNpZmllZCBkaXIuCisKKy0g
bmV3IGZ1bmNhcmc6ICJweXRlc3Rjb25maWciIGlzIHRoZSBweXRlc3QgY29uZmlnIG9iamVjdCBm
b3IgYWNjZXNzCisgIHRvIGNvbW1hbmQgbGluZSBhcmdzIGFuZCBjYW4gbm93IGJlIGVhc2lseSB1
c2VkIGluIGEgdGVzdC4KKworLSBpbnN0YWxsIGBgcHkudGVzdGBgIGFuZCBgYHB5LndoaWNoYGAg
d2l0aCBhIGBgLSRWRVJTSU9OYGAgc3VmZml4IHRvCisgIGRpc2FtYmlndWF0ZSBiZXR3ZWVuIFB5
dGhvbjMsIHB5dGhvbjIuWCwgSnl0aG9uIGFuZCBQeVB5IGluc3RhbGxlZCB2ZXJzaW9ucy4KKwor
LSBuZXcgInB5dGVzdGNvbmZpZyIgZnVuY2FyZyBhbGxvd3MgYWNjZXNzIHRvIHRlc3QgY29uZmln
IG9iamVjdAorCistIG5ldyAicHl0ZXN0X3JlcG9ydF9oZWFkZXIiIGhvb2sgY2FuIHJldHVybiBh
ZGRpdGlvbmFsIGxpbmVzCisgIHRvIGJlIGRpc3BsYXllZCBhdCB0aGUgaGVhZGVyIG9mIGEgdGVz
dCBydW4uCisKKy0gKGV4cGVyaW1lbnRhbCkgYWxsb3cgInB5LnRlc3QgcGF0aDo6bmFtZTE6Om5h
bWUyOjouLi4iIGZvciBwb2ludGluZworICB0byBhIHRlc3Qgd2l0aGluIGEgdGVzdCBjb2xsZWN0
aW9uIGRpcmVjdGx5LiAgVGhpcyBtaWdodCBldmVudHVhbGx5CisgIGV2b2x2ZSBhcyBhIGZ1bGwg
c3Vic3RpdHV0ZSB0byAiLWsiIHNwZWNpZmljYXRpb25zLgorCistIHN0cmVhbWxpbmVkIHBsdWdp
biBsb2FkaW5nOiBvcmRlciBpcyBub3cgYXMgZG9jdW1lbnRlZCBpbgorICBjdXN0b21pemUuaHRt
bDogc2V0dXB0b29scywgRU5WLCBjb21tYW5kbGluZSwgY29uZnRlc3QuCisgIGFsc28gc2V0dXB0
b29scyBlbnRyeSBwb2ludCBuYW1lcyBhcmUgdHVybmVkIHRvIGNhbm9uaWNhbCBuYW1lZXMgKCJw
eXRlc3RfKiIpCisKKy0gYXV0b21hdGljYWxseSBza2lwIHRlc3RzIHRoYXQgbmVlZCAnY2FwZmQn
IGJ1dCBoYXZlIG5vIG9zLmR1cAorCistIGFsbG93IHB5dGVzdF9nZW5lcmF0ZV90ZXN0cyB0byBi
ZSBkZWZpbmVkIGluIGNsYXNzZXMgYXMgd2VsbAorCistIGRlcHJlY2F0ZSB1c2FnZSBvZiAnZGlz
YWJsZWQnIGF0dHJpYnV0ZSBpbiBmYXZvdXIgb2YgcHl0ZXN0bWFyaworLSBkZXByZWNhdGUgZGVm
aW5pdGlvbiBvZiBEaXJlY3RvcnksIE1vZHVsZSwgQ2xhc3MgYW5kIEZ1bmN0aW9uIG5vZGVzCisg
IGluIGNvbmZ0ZXN0LnB5IGZpbGVzLiAgVXNlIHB5dGVzdCBjb2xsZWN0IGhvb2tzIGluc3RlYWQu
CisKKy0gY29sbGVjdGlvbi9pdGVtIG5vZGUgc3BlY2lmaWMgcnVudGVzdC9jb2xsZWN0IGhvb2tz
IGFyZSBvbmx5IGNhbGxlZCBleGFjdGx5CisgIG9uIG1hdGNoaW5nIGNvbmZ0ZXN0LnB5IGZpbGVz
LCBpLmUuIG9uZXMgd2hpY2ggYXJlIGV4YWN0bHkgYmVsb3cKKyAgdGhlIGZpbGVzeXN0ZW0gcGF0
aCBvZiBhbiBpdGVtCisKKy0gY2hhbmdlOiB0aGUgZmlyc3QgcHl0ZXN0X2NvbGxlY3RfZGlyZWN0
b3J5IGhvb2sgdG8gcmV0dXJuIHNvbWV0aGluZworICB3aWxsIG5vdyBwcmV2ZW50IGZ1cnRoZXIg
aG9va3MgdG8gYmUgY2FsbGVkLgorCistIGNoYW5nZTogZmlnbGVhZiBwbHVnaW4gbm93IHJlcXVp
cmVzIC0tZmlnbGVhZiB0byBydW4uICBBbHNvCisgIGNoYW5nZSBpdHMgbG9uZyBjb21tYW5kIGxp
bmUgb3B0aW9ucyB0byBiZSBhIGJpdCBzaG9ydGVyIChzZWUgcHkudGVzdCAtaCkuCisKKy0gY2hh
bmdlOiBweXRlc3QgZG9jdGVzdCBwbHVnaW4gaXMgbm93IGVuYWJsZWQgYnkgZGVmYXVsdCBhbmQg
aGFzIGEKKyAgbmV3IG9wdGlvbiAtLWRvY3Rlc3QtZ2xvYiB0byBzZXQgYSBwYXR0ZXJuIGZvciBm
aWxlIG1hdGNoZXMuCisKKy0gY2hhbmdlOiByZW1vdmUgaW50ZXJuYWwgcHkuXyogaGVscGVyIHZh
cnMsIG9ubHkga2VlcCBweS5fcHlkaXIKKworLSByb2J1c3RpZnkgY2FwdHVyaW5nIHRvIHN1cnZp
dmUgaWYgY3VzdG9tIHB5dGVzdF9ydW50ZXN0X3NldHVwCisgIGNvZGUgZmFpbGVkIGFuZCBwcmV2
ZW50ZWQgdGhlIGNhcHR1cmluZyBzZXR1cCBjb2RlIGZyb20gcnVubmluZy4KKworLSBtYWtlIHB5
LnRlc3QuKiBoZWxwZXJzIHByb3ZpZGVkIGJ5IGRlZmF1bHQgcGx1Z2lucyB2aXNpYmxlIGVhcmx5
IC0KKyAgd29ya3MgdHJhbnNwYXJlbnRseSBib3RoIGZvciBweWRvYyBhbmQgZm9yIGludGVyYWN0
aXZlIHNlc3Npb25zCisgIHdoaWNoIHdpbGwgcmVndWxhcmx5IHNlZSBlLmcuIHB5LnRlc3QubWFy
ayBhbmQgcHkudGVzdC5pbXBvcnRvcnNraXAuCisKKy0gc2ltcGxpZnkgaW50ZXJuYWwgcGx1Z2lu
IG1hbmFnZXIgbWFjaGluZXJ5CistIHNpbXBsaWZ5IGludGVybmFsIGNvbGxlY3Rpb24gdHJlZSBi
eSBpbnRyb2R1Y2luZyBhIFJvb3RDb2xsZWN0b3Igbm9kZQorCistIGZpeCBhc3NlcnQgcmVpbnRl
cnByZWF0aW9uIHRoYXQgc2VlcyBhIGNhbGwgY29udGFpbmluZyAia2V5d29yZD0uLi4iCisKKy0g
Zml4IGlzc3VlNjY6IGludm9rZSBweXRlc3Rfc2Vzc2lvbnN0YXJ0IGFuZCBweXRlc3Rfc2Vzc2lv
bmZpbmlzaAorICBob29rcyBvbiBzbGF2ZXMgZHVyaW5nIGRpc3QtdGVzdGluZywgcmVwb3J0IG1v
ZHVsZS9zZXNzaW9uIHRlYXJkb3duCisgIGhvb2tzIGNvcnJlY3RseS4KKworLSBmaXggaXNzdWU2
NTogcHJvcGVybHkgaGFuZGxlIGRpc3QtdGVzdGluZyBpZiBubworICBleGVjbmV0L3B5IGxpYiBp
bnN0YWxsZWQgcmVtb3RlbHkuCisKKy0gc2tpcCBzb21lIGluc3RhbGwtdGVzdHMgaWYgbm8gZXhl
Y25ldCBpcyBhdmFpbGFibGUKKworLSBmaXggZG9jcywgZml4IGludGVybmFsIGJpbi8gc2NyaXB0
IGdlbmVyYXRpb24KKworCisxLjEuMAorPT09PT0KKworLSBpbnRyb2R1Y2UgYXV0b21hdGljIHBs
dWdpbiByZWdpc3RyYXRpb24gdmlhICdweXRlc3QxMScKKyAgZW50cnlwb2ludHMgdmlhIHNldHVw
dG9vbHMnIHBrZ19yZXNvdXJjZXMuaXRlcl9lbnRyeV9wb2ludHMKKworLSBmaXggcHkudGVzdCBk
aXN0LXRlc3RpbmcgdG8gd29yayB3aXRoIGV4ZWNuZXQgPj0gMS4wLjBiNAorCistIHJlLWludHJv
ZHVjZSBweS50ZXN0LmNtZGxpbmUubWFpbigpIGZvciBiZXR0ZXIgYmFja3dhcmQgY29tcGF0aWJp
bGl0eQorCistIHN2biBwYXRoczogZml4IGEgYnVnIHdpdGggcGF0aC5jaGVjayh2ZXJzaW9uZWQ9
VHJ1ZSkgZm9yIHN2biBwYXRocywKKyAgYWxsb3cgJyUnIGluIHN2biBwYXRocywgbWFrZSBzdm53
Yy51cGRhdGUoKSBkZWZhdWx0IHRvIGludGVyYWN0aXZlIG1vZGUKKyAgbGlrZSBpbiAxLjAueCBh
bmQgYWRkIHN2bndjLnVwZGF0ZShpbnRlcmFjdGl2ZT1GYWxzZSkgdG8gaW5oaWJpdCBpbnRlcmFj
dGlvbi4KKworLSByZWZpbmUgZGlzdHJpYnV0ZWQgdGFyYmFsbCB0byBjb250YWluIHRlc3QgYW5k
IG5vIHB5YyBmaWxlcworCistIHRyeSBoYXJkZXIgdG8gaGF2ZSBkZXByZWNhdGlvbiB3YXJuaW5n
cyBmb3IgcHkuY29tcGF0LiogYWNjZXNzZXMKKyAgcmVwb3J0IGEgY29ycmVjdCBsb2NhdGlvbgor
CisxLjAuMworPT09PT0KKworKiBhZGp1c3QgYW5kIGltcHJvdmUgZG9jcworCisqIHJlbW92ZSBw
eS5yZXN0IHRvb2wgYW5kIGludGVybmFsIG5hbWVzcGFjZSAtIGl0IHdhcworICBuZXZlciByZWFs
bHkgYWR2ZXJ0aXNlZCBhbmQgY2FuIHN0aWxsIGJlIHVzZWQgd2l0aAorICB0aGUgb2xkIHJlbGVh
c2UgaWYgbmVlZGVkLiAgSWYgdGhlcmUgaXMgaW50ZXJlc3QKKyAgaXQgY291bGQgYmUgcmV2aXZl
ZCBpbnRvIGl0cyBvd24gdG9vbCBpIGd1ZXNzLgorCisqIGZpeCBpc3N1ZTQ4IGFuZCBpc3N1ZTU5
OiByYWlzZSBhbiBFcnJvciBpZiB0aGUgbW9kdWxlCisgIGZyb20gYW4gaW1wb3J0ZWQgdGVzdCBm
aWxlIGRvZXMgbm90IHNlZW0gdG8gY29tZSBmcm9tCisgIHRoZSBmaWxlcGF0aCAtIGF2b2lkcyAi
c2FtZS1uYW1lIiBjb25mdXNpb24gdGhhdCBoYXMKKyAgYmVlbiByZXBvcnRlZCByZXBlYXRlZGx5
CisKKyogbWVyZ2VkIFJvbm55J3Mgbm9zZS1jb21wYXRpYmlsaXR5IGhhY2tzOiBub3cKKyAgbm9z
ZS1zdHlsZSBzZXR1cF9tb2R1bGUoKSBhbmQgc2V0dXAoKSBmdW5jdGlvbnMgYXJlCisgIHN1cHBv
cnRlZAorCisqIGludHJvZHVjZSBnZW5lcmFsaXplZCBweS50ZXN0Lm1hcmsgZnVuY3Rpb24gbWFy
a2luZworCisqIHJlc2h1ZmZsZSAvIHJlZmluZSBjb21tYW5kIGxpbmUgZ3JvdXBpbmcKKworKiBk
ZXByZWNhdGUgcGFyc2VyLmFkZGdyb3VwIGluIGZhdm91ciBvZiBnZXRncm91cCB3aGljaCBjcmVh
dGVzIG9wdGlvbiBncm91cAorCisqIGFkZCAtLXJlcG9ydCBjb21tYW5kIGxpbmUgb3B0aW9uIHRo
YXQgYWxsb3dzIHRvIGNvbnRyb2wgc2hvd2luZyBvZiBza2lwcGVkL3hmYWlsZWQgc2VjdGlvbnMK
KworKiBnZW5lcmFsaXplZCBza2lwcGluZzogYSBuZXcgd2F5IHRvIG1hcmsgcHl0aG9uIGZ1bmN0
aW9ucyB3aXRoIHNraXBpZiBvciB4ZmFpbAorICBhdCBmdW5jdGlvbiwgY2xhc3MgYW5kIG1vZHVs
ZXMgbGV2ZWwgYmFzZWQgb24gcGxhdGZvcm0gb3Igc3lzLW1vZHVsZSBhdHRyaWJ1dGVzLgorCisq
IGV4dGVuZCBweS50ZXN0Lm1hcmsgZGVjb3JhdG9yIHRvIGFsbG93IGZvciBwb3NpdGlvbmFsIGFy
Z3MKKworKiBpbnRyb2R1Y2UgYW5kIHRlc3QgInB5LmNsZWFudXAgLWQiIHRvIHJlbW92ZSBlbXB0
eSBkaXJlY3RvcmllcworCisqIGZpeCBpc3N1ZSAjNTkgLSByb2J1c3RpZnkgdW5pdHRlc3QgdGVz
dCBjb2xsZWN0aW9uCisKKyogbWFrZSBicHl0aG9uL2hlbHAgaW50ZXJhY3Rpb24gd29yayBieSBh
ZGRpbmcgYW4gX19hbGxfXyBhdHRyaWJ1dGUKKyAgdG8gQXBpTW9kdWxlLCBjbGVhbnVwIGluaXRw
a2cKKworKiB1c2UgTUlUIGxpY2Vuc2UgZm9yIHB5bGliLCBhZGQgc29tZSBjb250cmlidXRvcnMK
KworKiByZW1vdmUgcHkuZXhlY25ldCBjb2RlIGFuZCBzdWJzdGl0dXRlIGFsbCB1c2FnZXMgd2l0
aCAnZXhlY25ldCcgcHJvcGVyCisKKyogZml4IGlzc3VlNTAgLSBjYWNoZWRfc2V0dXAgbm93IGNh
Y2hlcyBtb3JlIHRvIGV4cGVjdGF0aW9ucworICBmb3IgdGVzdCBmdW5jdGlvbnMgd2l0aCBtdWx0
aXBsZSBhcmd1bWVudHMuCisKKyogbWVyZ2UgSmFya28ncyBmaXhlcywgaXNzdWUgIzQ1IGFuZCAj
NDYKKworKiBhZGQgdGhlIGFiaWxpdHkgdG8gc3BlY2lmeSBhIHBhdGggZm9yIHB5Lmxvb2t1cCB0
byBzZWFyY2ggaW4KKworKiBmaXggYSBmdW5jYXJnIGNhY2hlZF9zZXR1cCBidWcgcHJvYmFibHkg
b25seSBvY2N1cmluZworICBpbiBkaXN0cmlidXRlZCB0ZXN0aW5nIGFuZCAibW9kdWxlIiBzY29w
ZSB3aXRoIHRlYXJkb3duLgorCisqIG1hbnkgZml4ZXMgYW5kIGNoYW5nZXMgZm9yIG1ha2luZyB0
aGUgY29kZSBiYXNlIHB5dGhvbjMgY29tcGF0aWJsZSwKKyAgbWFueSB0aGFua3MgdG8gQmVuamFt
aW4gUGV0ZXJzb24gZm9yIGhlbHBpbmcgd2l0aCB0aGlzLgorCisqIGNvbnNvbGlkYXRlIGJ1aWx0
aW5zIGltcGxlbWVudGF0aW9uIHRvIGJlIGNvbXBhdGlibGUgd2l0aCA+PTIuMywKKyAgYWRkIGhl
bHBlcnMgdG8gZWFzZSBrZWVwaW5nIDIgYW5kIDNrIGNvbXBhdGlibGUgY29kZQorCisqIGRlcHJl
Y2F0ZSBweS5jb21wYXQuZG9jdGVzdHxzdWJwcm9jZXNzfHRleHR3cmFwfG9wdHBhcnNlCisKKyog
ZGVwcmVjYXRlIHB5Lm1hZ2ljLmF1dG9wYXRoLCByZW1vdmUgcHkvbWFnaWMgZGlyZWN0b3J5CisK
KyogbW92ZSBweXRlc3QgYXNzZXJ0aW9uIGhhbmRsaW5nIHRvIHB5L2NvZGUgYW5kIGEgcHl0ZXN0
X2Fzc2VydGlvbgorICBwbHVnaW4sIGFkZCAiLS1uby1hc3NlcnQiIG9wdGlvbiwgZGVwcmVjYXRl
IHB5Lm1hZ2ljIG5hbWVzcGFjZXMKKyAgaW4gZmF2b3VyIG9mIChsZXNzKSBweS5jb2RlIG9uZXMu
CisKKyogY29uc29saWRhdGUgYW5kIGNsZWFudXAgcHkvY29kZSBjbGFzc2VzIGFuZCBmaWxlcwor
CisqIGNsZWFudXAgcHkvbWlzYywgbW92ZSB0ZXN0cyB0byBiaW4tZm9yLWRpc3QKKworKiBpbnRy
b2R1Y2UgZGVsYXR0ci9kZWxpdGVtL2RlbGVudiBtZXRob2RzIHRvIHB5LnRlc3QncyBtb25rZXlw
YXRjaCBmdW5jYXJnCisKKyogY29uc29saWRhdGUgcHkubG9nIGltcGxlbWVudGF0aW9uLCByZW1v
dmUgb2xkIGFwcHJvYWNoLgorCisqIGludHJvZHVjZSBweS5pby5UZXh0SU8gYW5kIHB5LmlvLkJ5
dGVzSU8gZm9yIGRpc3Rpbmd1aXNoaW5nIGJldHdlZW4KKyAgdGV4dC91bmljb2RlIGFuZCBieXRl
LXN0cmVhbXMgKHVzZXMgdW5kZXJseWluZyBzdGFuZGFyZCBsaWIgaW8uKgorICBpZiBhdmFpbGFi
bGUpCisKKyogbWFrZSBweS51bml0dGVzdF9jb252ZXJ0IGhlbHBlciBzY3JpcHQgYXZhaWxhYmxl
IHdoaWNoIGNvbnZlcnRzICJ1bml0dGVzdC5weSIKKyAgc3R5bGUgZmlsZXMgaW50byB0aGUgc2lt
cGxlciBhc3NlcnQvZGlyZWN0LXRlc3QtY2xhc3NlcyBweS50ZXN0L25vc2V0ZXN0cworICBzdHls
ZS4gIFRoZSBzY3JpcHQgd2FzIHdyaXR0ZW4gYnkgTGF1cmEgQ3JlaWdodG9uLgorCisqIHNpbXBs
aWZpZWQgaW50ZXJuYWwgbG9jYWxwYXRoIGltcGxlbWVudGF0aW9uCisKKzEuMC4yCis9PT09PQor
CisqIGZpeGluZyBwYWNrYWdpbmcgaXNzdWVzLCB0cmlnZ2VyZWQgYnkgZmVkb3JhIHJlZGhhdCBw
YWNrYWdpbmcsCisgIGFsc28gYWRkZWQgZG9jLCBleGFtcGxlcyBhbmQgY29udHJpYiBkaXJzIHRv
IHRoZSB0YXJiYWxsLgorCisqIGFkZGVkIGEgZG9jdW1lbnRhdGlvbiBsaW5rIHRvIHRoZSBuZXcg
ZGphbmdvIHBsdWdpbi4KKworMS4wLjEKKz09PT09CisKKyogYWRkZWQgYSAncHl0ZXN0X25vc2Un
IHBsdWdpbiB3aGljaCBoYW5kbGVzIG5vc2UuU2tpcFRlc3QsCisgIG5vc2Utc3R5bGUgZnVuY3Rp
b24vbWV0aG9kL2dlbmVyYXRvciBzZXR1cC90ZWFyZG93biBhbmQKKyAgdHJpZXMgdG8gcmVwb3J0
IGZ1bmN0aW9ucyBjb3JyZWN0bHkuCisKKyogY2FwdHVyaW5nIG9mIHVuaWNvZGUgd3JpdGVzIG9y
IGVuY29kZWQgc3RyaW5ncyB0byBzeXMuc3Rkb3V0L2VycgorICB3b3JrIGJldHRlciwgYWxzbyB0
ZXJtaW5hbHdyaXRpbmcgd2FzIGFkYXB0ZWQgYW5kIHNvbWV3aGF0CisgIHVuaWZpZWQgYmV0d2Vl
biB3aW5kb3dzIGFuZCBsaW51eC4KKworKiBpbXByb3ZlZCBkb2N1bWVudGF0aW9uIGxheW91dCBh
bmQgY29udGVudCBhIGxvdAorCisqIGFkZGVkIGEgIi0taGVscC1jb25maWciIG9wdGlvbiB0byBz
aG93IGNvbmZ0ZXN0LnB5IC8gRU5WLXZhciBuYW1lcyBmb3IKKyAgYWxsIGxvbmdvcHQgY21kbGlu
ZSBvcHRpb25zLCBhbmQgc29tZSBzcGVjaWFsIGNvbmZ0ZXN0LnB5IHZhcmlhYmxlcy4KKyAgcmVu
YW1lZCAnY29uZl9jYXB0dXJlJyBjb25mdGVzdCBzZXR0aW5nIHRvICdvcHRpb25fY2FwdHVyZScg
YWNjb3JkaW5nbHkuCisKKyogZml4IGlzc3VlICMyNzogYmV0dGVyIHJlcG9ydGluZyBvbiBub24t
Y29sbGVjdGFibGUgaXRlbXMgZ2l2ZW4gb24gY29tbWFuZGxpbmUKKyAgKGUuZy4gcHljIGZpbGVz
KQorCisqIGZpeCBpc3N1ZSAjMzM6IGFkZGVkIC0tdmVyc2lvbiBmbGFnICh0aGFua3MgQmVuamFt
aW4gUGV0ZXJzb24pCisKKyogZml4IGlzc3VlICMzMjogYWRkaW5nIHN1cHBvcnQgZm9yICJpbmNv
bXBsZXRlIiBwYXRocyB0byB3Y3BhdGguc3RhdHVzKCkKKworKiAiVGVzdCIgcHJlZml4ZWQgY2xh
c3NlcyBhcmUgKm5vdCogY29sbGVjdGVkIGJ5IGRlZmF1bHQgYW55bW9yZSBpZiB0aGV5CisgIGhh
dmUgYW4gX19pbml0X18gbWV0aG9kCisKKyogbW9ua2V5cGF0Y2ggc2V0ZW52KCkgbm93IGFjY2Vw
dHMgYSAicHJlcGVuZCIgcGFyYW1ldGVyCisKKyogaW1wcm92ZWQgcmVwb3J0aW5nIG9mIGNvbGxl
Y3Rpb24gZXJyb3IgdHJhY2ViYWNrcworCisqIHNpbXBsaWZpZWQgbXVsdGljYWxsIG1lY2hhbmlz
bSBhbmQgcGx1Z2luIGFyY2hpdGVjdHVyZSwKKyAgcmVuYW1lZCBzb21lIGludGVybmFsIG1ldGhv
ZHMgYW5kIGFyZ25hbWVzCisKKzEuMC4wCis9PT09PQorCisqIG1vcmUgdGVyc2UgcmVwb3J0aW5n
IHRyeSB0byBzaG93IGZpbGVzeXN0ZW0gcGF0aCByZWxhdGl2ZWx5IHRvIGN1cnJlbnQgZGlyCisq
IGltcHJvdmUgeGZhaWwgb3V0cHV0IGEgYml0CisKKzEuMC4wYjkKKz09PT09PT0KKworKiBjbGVh
bmx5IGhhbmRsZSBhbmQgcmVwb3J0IGZpbmFsIHRlYXJkb3duIG9mIHRlc3Qgc2V0dXAKKworKiBm
aXggc3ZuLTEuNiBjb21wYXQgaXNzdWUgd2l0aCBweS5wYXRoLnN2bndjKCkudmVyc2lvbmVkKCkK
KyAgKHRoYW5rcyBXb3V0ZXIgVmFuZGVuIEhvdmUpCisKKyogc2V0dXAvdGVhcmRvd24gb3IgY29s
bGVjdGlvbiBwcm9ibGVtcyBub3cgc2hvdyBhcyBFUlJPUnMKKyAgb3Igd2l0aCBiaWcgIkUiJ3Mg
aW4gdGhlIHByb2dyZXNzIGxpbmVzLiAgdGhleSBhcmUgcmVwb3J0ZWQKKyAgYW5kIGNvdW50ZWQg
c2VwYXJhdGVseS4KKworKiBkaXN0LXRlc3Rpbmc6IHByb3Blcmx5IGhhbmRsZSB0ZXN0IGl0ZW1z
IHRoYXQgZ2V0IGxvY2FsbHkKKyAgY29sbGVjdGVkIGJ1dCBjYW5ub3QgYmUgY29sbGVjdGVkIG9u
IHRoZSByZW1vdGUgc2lkZSAtIG9mdGVuCisgIGR1ZSB0byBwbGF0Zm9ybS9kZXBlbmRlbmN5IHJl
YXNvbnMKKworKiBzaW1wbGlmaWVkIHB5LnRlc3QubWFyayBBUEkgLSBzZWUga2V5d29yZCBwbHVn
aW4gZG9jdW1lbnRhdGlvbgorCisqIGludGVncmF0ZSBiZXR0ZXIgd2l0aCBsb2dnaW5nOiBjYXB0
dXJpbmcgbm93IGJ5IGRlZmF1bHQgY2FwdHVyZXMKKyAgdGVzdCBmdW5jdGlvbnMgYW5kIHRoZWly
IGltbWVkaWF0ZSBzZXR1cC90ZWFyZG93biBpbiBhIHNpbmdsZSBzdHJlYW0KKworKiBjYXBzeXMg
YW5kIGNhcGZkIGZ1bmNhcmdzIG5vdyBoYXZlIGEgcmVhZG91dGVycigpIGFuZCBhIGNsb3NlKCkg
bWV0aG9kCisgICh1bmRlcmx5aW5nbHkgcHkuaW8uU3RkQ2FwdHVyZS9GRCBvYmplY3RzIGFyZSB1
c2VkIHdoaWNoIGdyZXcgYQorICByZWFkb3V0ZXJyKCkgbWV0aG9kIGFzIHdlbGwgdG8gcmV0dXJu
IHNuYXBzaG90cyBvZiBjYXB0dXJlZCBvdXQvZXJyKQorCisqIG1ha2UgYXNzZXJ0LXJlaW50ZXJw
cmV0YXRpb24gd29yayBiZXR0ZXIgd2l0aCBjb21wYXJpc29ucyBub3QKKyAgcmV0dXJuaW5nIGJv
b2xzIChyZXBvcnRlZCB3aXRoIG51bXB5IGZyb20gdGhhbmtzIG1hY2llaiBmaWphbGtvd3NraSkK
KworKiByZXdvcmtlZCBwZXItdGVzdCBvdXRwdXQgY2FwdHVyaW5nIGludG8gdGhlIHB5dGVzdF9p
b2NhcHR1cmUucHkgcGx1Z2luCisgIGFuZCB0aHVzIHJlbW92ZWQgY2FwdHVyaW5nIGNvZGUgZnJv
bSBjb25maWcgb2JqZWN0CisKKyogaXRlbS5yZXByX2ZhaWx1cmUoZXhjaW5mbykgaW5zdGVhZCBv
ZiBpdGVtLnJlcHJfZmFpbHVyZShleGNpbmZvLCBvdXRlcnIpCisKKworMS4wLjBiOAorPT09PT09
PQorCisqIHB5dGVzdF91bml0dGVzdC1wbHVnaW4gaXMgbm93IGVuYWJsZWQgYnkgZGVmYXVsdAor
CisqIGludHJvZHVjZWQgcHl0ZXN0X2tleWJvYXJkaW50ZXJydXB0IGhvb2sgYW5kCisgIHJlZmlu
ZWQgcHl0ZXN0X3Nlc3Npb25maW5pc2ggaG9va2VkLCBhZGRlZCB0ZXN0cy4KKworKiB3b3JrYXJv
dW5kIGEgYnVnZ3kgbG9nZ2luZyBtb2R1bGUgaW50ZXJhY3Rpb24gKCJjbG9zaW5nIGFscmVhZHkg
Y2xvc2VkCisgIGZpbGVzIikuICBUaGFua3MgdG8gU3JpZGhhciBSYXRuYWt1bWFyIGZvciB0cmln
Z2VyaW5nLgorCisqIGlmIHBsdWdpbnMgdXNlICJweS50ZXN0LmltcG9ydG9yc2tpcCIgZm9yIGlt
cG9ydGluZworICBhIGRlcGVuZGVuY3kgb25seSBhIHdhcm5pbmcgd2lsbCBiZSBpc3N1ZWQgaW5z
dGVhZAorICBvZiBleGl0aW5nIHRoZSB0ZXN0aW5nIHByb2Nlc3MuCisKKyogbWFueSBpbXByb3Zl
bWVudHMgdG8gZG9jczoKKyAgLSByZWZpbmVkIGZ1bmNhcmdzIGRvYyAsIHVzZSB0aGUgdGVybSAi
ZmFjdG9yeSIgaW5zdGVhZCBvZiAicHJvdmlkZXIiCisgIC0gYWRkZWQgYSBuZXcgdGFsay90dXRv
cmlhbCBkb2MgcGFnZQorICAtIGJldHRlciBkb3dubG9hZCBwYWdlCisgIC0gYmV0dGVyIHBsdWdp
biBkb2NzdHJpbmdzCisgIC0gYWRkZWQgbmV3IHBsdWdpbnMgcGFnZSBhbmQgYXV0b21hdGljIGRv
YyBnZW5lcmF0aW9uIHNjcmlwdAorCisqIGZpeGVkIHRlYXJkb3duIHByb2JsZW0gcmVsYXRlZCB0
byBwYXJ0aWFsbHkgZmFpbGluZyBmdW5jYXJnIHNldHVwcworICAodGhhbmtzIE1yVG9wZiBmb3Ig
cmVwb3J0aW5nKSwgInB5dGVzdF9ydW50ZXN0X3RlYXJkb3duIiBpcyBub3cKKyAgYWx3YXlzIGlu
dm9rZWQgZXZlbiBpZiB0aGUgInB5dGVzdF9ydW50ZXN0X3NldHVwIiBmYWlsZWQuCisKKyogdHdl
YWtlZCBkb2N0ZXN0IG91dHB1dCBmb3IgZG9jc3RyaW5ncyBpbiBweSBtb2R1bGVzLAorICB0aGFu
a3MgUmFkb21pci4KKworMS4wLjBiNworPT09PT09PQorCisqIHJlbmFtZWQgcHkudGVzdC54ZmFp
bCBiYWNrIHRvIHB5LnRlc3QubWFyay54ZmFpbCB0byBhdm9pZAorICB0d28gd2F5cyB0byBkZWNv
cmF0ZSBmb3IgeGZhaWwKKworKiByZS1hZGRlZCBweS50ZXN0Lm1hcmsgZGVjb3JhdG9yIGZvciBz
ZXR0aW5nIGtleXdvcmRzIG9uIGZ1bmN0aW9ucworICAoaXQgd2FzIGFjdHVhbGx5IGRvY3VtZW50
ZWQgc28gcmVtb3ZpbmcgaXQgd2FzIG5vdCBuaWNlKQorCisqIHJlbW92ZSBzY29wZS1hcmd1bWVu
dCBmcm9tIHJlcXVlc3QuYWRkZmluYWxpemVyKCkgYmVjYXVzZQorICByZXF1ZXN0LmNhY2hlZF9z
ZXR1cCBoYXMgdGhlIHNjb3BlIGFyZy4gVE9PV1RESS4KKworKiBwZXJmb3JtIHNldHVwIGZpbmFs
aXphdGlvbiBiZWZvcmUgcmVwb3J0aW5nIGZhaWx1cmVzCisKKyogYXBwbHkgbW9kaWZpZWQgcGF0
Y2hlcyBmcm9tIEFuZHJlYXMgS2xvZWNrbmVyIHRvIGFsbG93CisgIHRlc3QgZnVuY3Rpb25zIHRv
IGhhdmUgbm8gZnVuY19jb2RlICgjMjIpIGFuZCB0byBtYWtlCisgICItayIgYW5kIGZ1bmN0aW9u
IGtleXdvcmRzIHdvcmsgICgjMjApCisKKyogYXBwbHkgcGF0Y2ggZnJvbSBEYW5pZWwgUGVvbHps
ZWl0aG5lciAoaXNzdWUgIzIzKQorCisqIHJlc29sdmUgaXNzdWUgIzE4LCBtdWx0aXByb2Nlc3Np
bmcuTWFuYWdlcigpIGFuZAorICByZWRpcmVjdGlvbiBjbGFzaAorCisqIG1ha2UgX19uYW1lX18g
PT0gIl9fY2hhbm5lbGV4ZWNfXyIgZm9yIHJlbW90ZV9leGVjIGNvZGUKKworMS4wLjBiMworPT09
PT09PQorCisqIHBsdWdpbiBjbGFzc2VzIGFyZSByZW1vdmVkOiBvbmUgbm93IGRlZmluZXMKKyAg
aG9va3MgZGlyZWN0bHkgaW4gY29uZnRlc3QucHkgb3IgZ2xvYmFsIHB5dGVzdF8qLnB5CisgIGZp
bGVzLgorCisqIGFkZGVkIG5ldyBweXRlc3RfbmFtZXNwYWNlKGNvbmZpZykgaG9vayB0aGF0IGFs
bG93cworICB0byBpbmplY3QgaGVscGVycyBkaXJlY3RseSB0byB0aGUgcHkudGVzdC4qIG5hbWVz
cGFjZS4KKworKiBkb2N1bWVudGVkIGFuZCByZWZpbmVkIG1hbnkgaG9va3MKKworKiBhZGRlZCBu
ZXcgc3R5bGUgb2YgZ2VuZXJhdGl2ZSB0ZXN0cyB2aWEKKyAgcHl0ZXN0X2dlbmVyYXRlX3Rlc3Rz
IGhvb2sgdGhhdCBpbnRlZ3JhdGVzCisgIHdlbGwgd2l0aCBmdW5jdGlvbiBhcmd1bWVudHMuCisK
KworMS4wLjBiMQorPT09PT09PQorCisqIGludHJvZHVjZWQgbmV3ICJmdW5jYXJnIiBzZXR1cCBt
ZXRob2QsCisgIHNlZSBkb2MvdGVzdC9mdW5jYXJnLnR4dAorCisqIGludHJvZHVjZWQgcGx1Z2lu
IGFyY2hpdGVjdHVyZSBhbmQgbWFueQorICBuZXcgcHkudGVzdCBwbHVnaW5zLCBzZWUKKyAgZG9j
L3Rlc3QvcGx1Z2lucy50eHQKKworKiB0ZWFyZG93bl9tZXRob2QgaXMgbm93IGd1YXJhbnRlZWQg
dG8gZ2V0CisgIGNhbGxlZCBhZnRlciBhIHRlc3QgbWV0aG9kIGhhcyBydW4uCisKKyogbmV3IG1l
dGhvZDogcHkudGVzdC5pbXBvcnRvcnNraXAobW9kLG1pbnZlcnNpb24pCisgIHdpbGwgZWl0aGVy
IGltcG9ydCBvciBjYWxsIHB5LnRlc3Quc2tpcCgpCisKKyogY29tcGxldGVseSByZXZpc2VkIGlu
dGVybmFsIHB5LnRlc3QgYXJjaGl0ZWN0dXJlCisKKyogbmV3IHB5LnByb2Nlc3MuRm9ya2VkRnVu
YyBvYmplY3QgYWxsb3dpbmcgdG8KKyAgZm9yayBleGVjdXRpb24gb2YgYSBmdW5jdGlvbiB0byBh
IHN1YiBwcm9jZXNzCisgIGFuZCBnZXR0aW5nIGEgcmVzdWx0IGJhY2suCisKK1hYWCBsb3RzIG9m
IHRoaW5ncyBtaXNzaW5nIGhlcmUgWFhYCisKKzAuOS4yCis9PT09PQorCisqIHJlZmluZWQgaW5z
dGFsbGF0aW9uIGFuZCBtZXRhZGF0YSwgY3JlYXRlZCBuZXcgc2V0dXAucHksCisgIG5vdyBiYXNl
ZCBvbiBzZXR1cHRvb2xzL2V6X3NldHVwICh0aGFua3MgdG8gUmFsZiBTY2htaXR0CisgIGZvciBo
aXMgc3VwcG9ydCkuCisKKyogaW1wcm92ZWQgdGhlIHdheSBvZiBtYWtpbmcgcHkuKiBzY3JpcHRz
IGF2YWlsYWJsZSBpbgorICB3aW5kb3dzIGVudmlyb25tZW50cywgdGhleSBhcmUgbm93IGFkZGVk
IHRvIHRoZQorICBTY3JpcHRzIGRpcmVjdG9yeSBhcyAiLmNtZCIgZmlsZXMuCisKKyogcHkucGF0
aC5zdm53Yy5zdGF0dXMoKSBub3cgaXMgbW9yZSBjb21wbGV0ZSBhbmQKKyAgdXNlcyB4bWwgb3V0
cHV0IGZyb20gdGhlICdzdm4nIGNvbW1hbmQgaWYgYXZhaWxhYmxlCisgIChHdWlkbyBXZXNkb3Jw
KQorCisqIGZpeCBmb3IgcHkucGF0aC5zdm4qIHRvIHdvcmsgd2l0aCBzdm4gMS41CisgIChDaHJp
cyBMYW1iKQorCisqIGZpeCBwYXRoLnJlbHRvKG90aGVycGF0aCkgbWV0aG9kIG9uIHdpbmRvd3Mg
dG8KKyAgdXNlIG5vcm1jYXNlIGZvciBjaGVja2luZyBpZiBhIHBhdGggaXMgcmVsYXRpdmUuCisK
KyogcHkudGVzdCdzIHRyYWNlYmFjayBpcyBiZXR0ZXIgcGFyc2VhYmxlIGZyb20gZWRpdG9ycwor
ICAoZm9sbG93cyB0aGUgZmlsZW5hbWVzOkxJTkVOTzogTVNHIGNvbnZlbnRpb24pCisgICh0aGFu
a3MgdG8gT3NtbyBTYWxvbWFhKQorCisqIGZpeCB0byBqYXZhc2NyaXB0LWdlbmVyYXRpb24sICJw
eS50ZXN0IC0tcnVuYnJvd3NlciIKKyAgc2hvdWxkIHdvcmsgbW9yZSByZWxpYWJseSBub3cKKwor
KiByZW1vdmVkIHByZXZpb3VzbHkgYWNjaWRlbnRhbGx5IGFkZGVkCisgIHB5LnRlc3QuYnJva2Vu
IGFuZCBweS50ZXN0Lm5vdGltcGxlbWVudGVkIGhlbHBlcnMuCisKKyogdGhlcmUgbm93IGlzIGEg
cHkuX192ZXJzaW9uX18gYXR0cmlidXRlCisKKzAuOS4xCis9PT09PQorCitUaGlzIGlzIGEgZmFp
cmx5IGNvbXBsZXRlIGxpc3Qgb2YgdjAuOS4xLCB3aGljaCBjYW4KK3NlcnZlIGFzIGEgcmVmZXJl
bmNlIGZvciBkZXZlbG9wZXJzLgorCisqIGFsbG93aW5nICsgc2lnbnMgaW4gcHkucGF0aC5zdm4g
dXJscyBbMzkxMDZdCisqIGZpeGVkIHN1cHBvcnQgZm9yIEZhaWxlZCBleGNlcHRpb25zIHdpdGhv
dXQgZXhjaW5mbyBpbiBweS50ZXN0IFszOTM0MF0KKyogYWRkZWQgc3VwcG9ydCBmb3Iga2lsbGlu
ZyBwcm9jZXNzZXMgZm9yIFdpbmRvd3MgKGFzIHdlbGwgYXMgcGxhdGZvcm1zIHRoYXQKKyAgc3Vw
cG9ydCBvcy5raWxsKSBpbiBweS5taXNjLmtpbGxwcm9jIFszOTY1NV0KKyogYWRkZWQgc2V0dXAv
dGVhcmRvd24gZm9yIGdlbmVyYXRpdmUgdGVzdHMgdG8gcHkudGVzdCBbNDA3MDJdCisqIGFkZGVk
IGRldGVjdGlvbiBvZiBGQUlMRUQgVE8gTE9BRCBNT0RVTEUgdG8gcHkudGVzdCBbNDA3MDMsIDQw
NzM4LCA0MDczOV0KKyogZml4ZWQgcHJvYmxlbSB3aXRoIGNhbGxpbmcgLnJlbW92ZSgpIG9uIHdj
cGF0aHMgb2Ygbm9uLXZlcnNpb25lZCBmaWxlcyBpbgorICBweS5wYXRoIFs0NDI0OF0KKyogZml4
ZWQgc29tZSBpbXBvcnQgYW5kIGluaGVyaXRhbmNlIGlzc3VlcyBpbiBweS50ZXN0IFs0MTQ4MCwg
NDQ2NDgsIDQ0NjU1XQorKiBmYWlsIHRvIHJ1biBncmVlbmxldCB0ZXN0cyB3aGVuIHB5cHkgaXMg
YXZhaWxhYmxlLCBidXQgd2l0aG91dCBzdGFja2xlc3MKKyAgWzQ1Mjk0XQorKiBzbWFsbCBmaXhl
cyBpbiByc2Vzc2lvbiB0ZXN0cyBbNDUyOTVdCisqIGZpeGVkIGlzc3VlIHdpdGggMi41IHR5cGUg
cmVwcmVzZW50YXRpb25zIGluIHB5LnRlc3QgWzQ1NDgzLCA0NTQ4NF0KKyogbWFkZSB0aGF0IGlu
dGVybmFsIHJlcG9ydGluZyBpc3N1ZXMgZGlzcGxheWluZyBpcyBkb25lIGF0b21pY2FsbHkgaW4g
cHkudGVzdAorICBbNDU1MThdCisqIG1hZGUgdGhhdCBub24tZXhpc3RpbmcgZmlsZXMgYXJlIGln
b3JlZCBieSB0aGUgcHkubG9va3VwIHNjcmlwdCBbNDU1MTldCisqIGltcHJvdmVkIGV4Y2VwdGlv
biBuYW1lIGNyZWF0aW9uIGluIHB5LnRlc3QgWzQ1NTM1XQorKiBtYWRlIHRoYXQgbGVzcyB0aHJl
YWRzIGFyZSB1c2VkIGluIGV4ZWNuZXQgW21lcmdlIGluIDQ1NTM5XQorKiByZW1vdmVkIGxvY2sg
cmVxdWlyZWQgZm9yIGF0b21pY2FsIHJlcG9ydGluZyBpc3N1ZSBkaXNwbGF5aW5nIGluIHB5LnRl
c3QKKyAgWzQ1NTQ1XQorKiByZW1vdmVkIGdsb2JhbHMgZnJvbSBleGVjbmV0IFs0NTU0MSwgNDU1
NDddCisqIHJlZmFjdG9yZWQgY2xlYW51cCBtZWNoYW5pY3MsIG1hZGUgdGhhdCBzZXREYWVtb24g
aXMgc2V0IHRvIDEgdG8gbWFrZSBhdGV4aXQKKyAgZ2V0IGNhbGxlZCBpbiAyLjUgKHB5LmV4ZWNu
ZXQpIFs0NTU0OF0KKyogZml4ZWQgYnVnIGluIGpvaW5pbmcgdGhyZWFkcyBpbiBweS5leGVjbmV0
J3Mgc2VydmVtYWluIFs0NTU0OV0KKyogcmVmYWN0b3JlZCBweS50ZXN0LnJzZXNzaW9uIHRlc3Rz
IHRvIG5vdCByZWx5IG9uIGV4YWN0IG91dHB1dCBmb3JtYXQgYW55bW9yZQorICBbNDU2NDZdCisq
IHVzaW5nIHJlcHIoKSBvbiB0ZXN0IG91dGNvbWUgWzQ1NjQ3XQorKiBhZGRlZCAnUmVhc29uJyBj
bGFzc2VzIGZvciBweS50ZXN0LnNraXAoKSBbNDU2NDgsIDQ1NjQ5XQorKiBraWxsZWQgc29tZSB1
bm5lY2Vzc2FyeSBzYW5pdHkgY2hlY2sgaW4gcHkudGVzdC5jb2xsZWN0IFs0NTY1NV0KKyogYXZv
aWQgdXNpbmcgb3MudG1wZmlsZSgpIGluIHB5LmlvLmZkY2FwdHVyZSBiZWNhdXNlIG9uIFdpbmRv
d3MgaXQncyBvbmx5CisgIHVzYWJsZSBieSBBZG1pbmlzdHJhdG9ycyBbNDU5MDFdCisqIGFkZGVk
IHN1cHBvcnQgZm9yIGxvY2tpbmcgYW5kIG5vbi1yZWN1cnNpdmUgY29tbWl0cyB0byBweS5wYXRo
LnN2bndjIFs0NTk5NF0KKyogbG9ja2luZyBmaWxlcyBpbiBweS5leGVjbmV0IHRvIHByZXZlbnQg
Q1B5dGhvbiBmcm9tIHNlZ2ZhdWx0aW5nIFs0NjAxMF0KKyogYWRkZWQgZXhwb3J0KCkgbWV0aG9k
IHRvIHB5LnBhdGguc3ZudXJsCisqIGZpeGVkIC1kIC14IGluIHB5LnRlc3QgWzQ3Mjc3XQorKiBm
aXhlZCBhcmd1bWVudCBjb25jYXRlbmF0aW9uIHByb2JsZW0gaW4gcHkucGF0aC5zdm53YyBbNDk0
MjNdCisqIHJlc3RvcmUgcHkudGVzdCBiZWhhdmlvdXIgdGhhdCBpdCBleGl0cyB3aXRoIGNvZGUg
MSB3aGVuIHRoZXJlIGFyZSBmYWlsdXJlcworICBbNDk5NzRdCisqIGRvbid0IGZhaWwgb24gaHRt
bCBmaWxlcyB0aGF0IGRvbid0IGhhdmUgYW4gYWNjb21wYW55aW5nIC50eHQgZmlsZSBbNTA2MDZd
CisqIGZpeGVkICd1dGVzdGNvbnZlcnQucHkgPCBpbnB1dCcgWzUwNjQ1XQorKiBzbWFsbCBmaXgg
Zm9yIGNvZGUgaW5kZW50YXRpb24gaW4gcHkuY29kZS5zb3VyY2UgWzUwNzU1XQorKiBmaXggX2Rv
Y2dlbi5weSBkb2N1bWVudGF0aW9uIGJ1aWxkaW5nIFs1MTI4NV0KKyogaW1wcm92ZWQgY2hlY2tz
IGZvciBzb3VyY2UgcmVwcmVzZW50YXRpb24gb2YgY29kZSBibG9ja3MgaW4gcHkudGVzdCBbNTEy
OTJdCisqIGFkZGVkIHN1cHBvcnQgZm9yIHBhc3NpbmcgYXV0aGVudGljYXRpb24gdG8gcHkucGF0
aC5zdm4qIG9iamVjdHMgWzUyMDAwLAorICA1MjAwMV0KKyogcmVtb3ZlZCBzb3J0ZWQoKSBjYWxs
IGZvciBweS5hcGlnZW4gdGVzdHMgaW4gZmF2b3VyIG9mIFtdLnNvcnQoKSB0byBzdXBwb3J0Cisg
IFB5dGhvbiAyLjMgWzUyNDgxXQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQv
dzNjL3Rvb2xzL3B5dGVzdC9DT05UUklCVVRJTkcucnN0IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0
ZWQvdzNjL3Rvb2xzL3B5dGVzdC9DT05UUklCVVRJTkcucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwLi43NWVlM2VjMzJkMwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRy
aXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvQ09OVFJJQlVUSU5HLnJzdApAQCAt
MCwwICsxLDI1MyBAQAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ29udHJpYnV0aW9u
IGdldHRpbmcgc3RhcnRlZAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDb250cmli
dXRpb25zIGFyZSBoaWdobHkgd2VsY29tZWQgYW5kIGFwcHJlY2lhdGVkLiAgRXZlcnkgbGl0dGxl
IGhlbHAgY291bnRzLAorc28gZG8gbm90IGhlc2l0YXRlIQorCisuLiBjb250ZW50czo6IENvbnRy
aWJ1dGlvbiBsaW5rcworICAgOmRlcHRoOiAyCisKKworLi4gX3N1Ym1pdGZlZWRiYWNrOgorCitG
ZWF0dXJlIHJlcXVlc3RzIGFuZCBmZWVkYmFjaworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworRG8geW91IGxpa2UgcHl0ZXN0PyAgU2hhcmUgc29tZSBsb3ZlIG9uIFR3aXR0ZXIgb3Ig
aW4geW91ciBibG9nIHBvc3RzIQorCitXZSdkIGFsc28gbGlrZSB0byBoZWFyIGFib3V0IHlvdXIg
cHJvcG9zaXRpb25zIGFuZCBzdWdnZXN0aW9ucy4gIEZlZWwgZnJlZSB0bworYHN1Ym1pdCB0aGVt
IGFzIGlzc3VlcyA8aHR0cHM6Ly9naXRodWIuY29tL3B5dGVzdC1kZXYvcHl0ZXN0L2lzc3Vlcz5g
XyBhbmQ6CisKKyogRXhwbGFpbiBpbiBkZXRhaWwgaG93IHRoZXkgc2hvdWxkIHdvcmsuCisqIEtl
ZXAgdGhlIHNjb3BlIGFzIG5hcnJvdyBhcyBwb3NzaWJsZS4gIFRoaXMgd2lsbCBtYWtlIGl0IGVh
c2llciB0byBpbXBsZW1lbnQuCisKKworLi4gX3JlcG9ydGJ1Z3M6CisKK1JlcG9ydCBidWdzCist
LS0tLS0tLS0tLQorCitSZXBvcnQgYnVncyBmb3IgcHl0ZXN0IGluIHRoZSBgaXNzdWUgdHJhY2tl
ciA8aHR0cHM6Ly9naXRodWIuY29tL3B5dGVzdC1kZXYvcHl0ZXN0L2lzc3Vlcz5gXy4KKworSWYg
eW91IGFyZSByZXBvcnRpbmcgYSBidWcsIHBsZWFzZSBpbmNsdWRlOgorCisqIFlvdXIgb3BlcmF0
aW5nIHN5c3RlbSBuYW1lIGFuZCB2ZXJzaW9uLgorKiBBbnkgZGV0YWlscyBhYm91dCB5b3VyIGxv
Y2FsIHNldHVwIHRoYXQgbWlnaHQgYmUgaGVscGZ1bCBpbiB0cm91Ymxlc2hvb3RpbmcsCisgIHNw
ZWNpZmljYWxseSBQeXRob24gaW50ZXJwcmV0ZXIgdmVyc2lvbiwKKyAgaW5zdGFsbGVkIGxpYnJh
cmllcyBhbmQgcHl0ZXN0IHZlcnNpb24uCisqIERldGFpbGVkIHN0ZXBzIHRvIHJlcHJvZHVjZSB0
aGUgYnVnLgorCitJZiB5b3UgY2FuIHdyaXRlIGEgZGVtb25zdHJhdGlvbiB0ZXN0IHRoYXQgY3Vy
cmVudGx5IGZhaWxzIGJ1dCBzaG91bGQgcGFzcyAoeGZhaWwpLAordGhhdCBpcyBhIHZlcnkgdXNl
ZnVsIGNvbW1pdCB0byBtYWtlIGFzIHdlbGwsIGV2ZW4gaWYgeW91IGNhbid0IGZpbmQgaG93Cit0
byBmaXggdGhlIGJ1ZyB5ZXQuCisKKworLi4gX2ZpeGJ1Z3M6CisKK0ZpeCBidWdzCistLS0tLS0t
LQorCitMb29rIHRocm91Z2ggdGhlIEdpdEh1YiBpc3N1ZXMgZm9yIGJ1Z3MuICBIZXJlIGlzIHNh
bXBsZSBmaWx0ZXIgeW91IGNhbiB1c2U6CitodHRwczovL2dpdGh1Yi5jb20vcHl0ZXN0LWRldi9w
eXRlc3QvbGFiZWxzL2J1ZworCis6cmVmOmBUYWxrIDxjb250YWN0PmAgdG8gZGV2ZWxvcGVycyB0
byBmaW5kIG91dCBob3cgeW91IGNhbiBmaXggc3BlY2lmaWMgYnVncy4KKworRG9uJ3QgZm9yZ2V0
IHRvIGNoZWNrIHRoZSBpc3N1ZSB0cmFja2VycyBvZiB5b3VyIGZhdm91cml0ZSBwbHVnaW5zLCB0
b28hCisKKy4uIF93cml0ZXBsdWdpbnM6CisKK0ltcGxlbWVudCBmZWF0dXJlcworLS0tLS0tLS0t
LS0tLS0tLS0tCisKK0xvb2sgdGhyb3VnaCB0aGUgR2l0SHViIGlzc3VlcyBmb3IgZW5oYW5jZW1l
bnRzLiAgSGVyZSBpcyBzYW1wbGUgZmlsdGVyIHlvdQorY2FuIHVzZToKK2h0dHBzOi8vZ2l0aHVi
LmNvbS9weXRlc3QtZGV2L3B5dGVzdC9sYWJlbHMvZW5oYW5jZW1lbnQKKworOnJlZjpgVGFsayA8
Y29udGFjdD5gIHRvIGRldmVsb3BlcnMgdG8gZmluZCBvdXQgaG93IHlvdSBjYW4gaW1wbGVtZW50
IHNwZWNpZmljCitmZWF0dXJlcy4KKworV3JpdGUgZG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0t
LS0tLS0tLQorCitweXRlc3QgY291bGQgYWx3YXlzIHVzZSBtb3JlIGRvY3VtZW50YXRpb24uICBX
aGF0IGV4YWN0bHkgaXMgbmVlZGVkPworCisqIE1vcmUgY29tcGxlbWVudGFyeSBkb2N1bWVudGF0
aW9uLiAgSGF2ZSB5b3UgcGVyaGFwcyBmb3VuZCBzb21ldGhpbmcgdW5jbGVhcj8KKyogRG9jdW1l
bnRhdGlvbiB0cmFuc2xhdGlvbnMuICBXZSBjdXJyZW50bHkgaGF2ZSBvbmx5IEVuZ2xpc2guCisq
IERvY3N0cmluZ3MuICBUaGVyZSBjYW4gbmV2ZXIgYmUgdG9vIG1hbnkgb2YgdGhlbS4KKyogQmxv
ZyBwb3N0cywgYXJ0aWNsZXMgYW5kIHN1Y2ggLS0gdGhleSdyZSBhbGwgdmVyeSBhcHByZWNpYXRl
ZC4KKworWW91IGNhbiBhbHNvIGVkaXQgZG9jdW1lbnRhdGlvbiBmaWxlcyBkaXJlY3RseSBpbiB0
aGUgR2l0aHViIHdlYiBpbnRlcmZhY2UKK3dpdGhvdXQgbmVlZGluZyB0byBtYWtlIGEgZm9yayBh
bmQgbG9jYWwgY29weS4gVGhpcyBjYW4gYmUgY29udmVuaWVudCBmb3IKK3NtYWxsIGZpeGVzLgor
CisKKy4uIF9zdWJtaXRwbHVnaW46CisKK1N1Ym1pdHRpbmcgUGx1Z2lucyB0byBweXRlc3QtZGV2
CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQeXRlc3QgZGV2ZWxvcG1lbnQg
b2YgdGhlIGNvcmUsIHNvbWUgcGx1Z2lucyBhbmQgc3VwcG9ydCBjb2RlIGhhcHBlbnMKK2luIHJl
cG9zaXRvcmllcyBsaXZpbmcgdW5kZXIgdGhlIGBgcHl0ZXN0LWRldmBgIG9yZ2FuaXNhdGlvbnM6
CisKKy0gYHB5dGVzdC1kZXYgb24gR2l0SHViIDxodHRwczovL2dpdGh1Yi5jb20vcHl0ZXN0LWRl
dj5gXworCistIGBweXRlc3QtZGV2IG9uIEJpdGJ1Y2tldCA8aHR0cHM6Ly9iaXRidWNrZXQub3Jn
L3B5dGVzdC1kZXY+YF8KKworQWxsIHB5dGVzdC1kZXYgQ29udHJpYnV0b3JzIHRlYW0gbWVtYmVy
cyBoYXZlIHdyaXRlIGFjY2VzcyB0byBhbGwgY29udGFpbmVkCityZXBvc2l0b3JpZXMuICBweXRl
c3QgY29yZSBhbmQgcGx1Z2lucyBhcmUgZ2VuZXJhbGx5IGRldmVsb3BlZAordXNpbmcgYHB1bGwg
cmVxdWVzdHNgXyB0byByZXNwZWN0aXZlIHJlcG9zaXRvcmllcy4KKworVGhlIG9iamVjdGl2ZXMg
b2YgdGhlIGBgcHl0ZXN0LWRldmBgIG9yZ2FuaXNhdGlvbiBhcmU6CisKKyogSGF2aW5nIGEgY2Vu
dHJhbCBsb2NhdGlvbiBmb3IgcG9wdWxhciBweXRlc3QgcGx1Z2lucworKiBTaGFyaW5nIHNvbWUg
b2YgdGhlIG1haW50ZW5hbmNlIHJlc3BvbnNpYmlsaXR5IChpbiBjYXNlIGEgbWFpbnRhaW5lciBu
byBsb25nZXIgd2hpc2hlcyB0byBtYWludGFpbiBhIHBsdWdpbikKKworWW91IGNhbiBzdWJtaXQg
eW91ciBwbHVnaW4gYnkgc3Vic2NyaWJpbmcgdG8gdGhlIGBweXRlc3QtZGV2IG1haWwgbGlzdAor
PGh0dHBzOi8vbWFpbC5weXRob24ub3JnL21haWxtYW4vbGlzdGluZm8vcHl0ZXN0LWRldj5gXyBh
bmQgd3JpdGluZyBhCittYWlsIHBvaW50aW5nIHRvIHlvdXIgZXhpc3RpbmcgcHl0ZXN0IHBsdWdp
biByZXBvc2l0b3J5IHdoaWNoIG11c3QgaGF2ZQordGhlIGZvbGxvd2luZzoKKworLSBQeVBJIHBy
ZXNlbmNlIHdpdGggYSBgYHNldHVwLnB5YGAgdGhhdCBjb250YWlucyBhIGxpY2Vuc2UsIGBgcHl0
ZXN0LWBgCisgIHByZWZpeGVkIG5hbWUsIHZlcnNpb24gbnVtYmVyLCBhdXRob3JzLCBzaG9ydCBh
bmQgbG9uZyBkZXNjcmlwdGlvbi4KKworLSBhIGBgdG94LmluaWBgIGZvciBydW5uaW5nIHRlc3Rz
IHVzaW5nIGB0b3ggPGh0dHA6Ly90b3gudGVzdHJ1bi5vcmc+YF8uCisKKy0gYSBgYFJFQURNRS50
eHRgYCBkZXNjcmliaW5nIGhvdyB0byB1c2UgdGhlIHBsdWdpbiBhbmQgb24gd2hpY2gKKyAgcGxh
dGZvcm1zIGl0IHJ1bnMuCisKKy0gYSBgYExJQ0VOU0UudHh0YGAgZmlsZSBvciBlcXVpdmFsZW50
IGNvbnRhaW5pbmcgdGhlIGxpY2Vuc2luZworICBpbmZvcm1hdGlvbiwgd2l0aCBtYXRjaGluZyBp
bmZvIGluIGBgc2V0dXAucHlgYC4KKworLSBhbiBpc3N1ZSB0cmFja2VyIGZvciBidWcgcmVwb3J0
cyBhbmQgZW5oYW5jZW1lbnQgcmVxdWVzdHMuCisKK0lmIG5vIGNvbnRyaWJ1dG9yIHN0cm9uZ2x5
IG9iamVjdHMgYW5kIHR3byBhZ3JlZSwgdGhlIHJlcG9zaXRvcnkgY2FuIHRoZW4gYmUKK3RyYW5z
ZmVycmVkIHRvIHRoZSBgYHB5dGVzdC1kZXZgYCBvcmdhbmlzYXRpb24uCisKK0hlcmUncyBhIHJ1
bmRvd24gb2YgaG93IGEgcmVwb3NpdG9yeSB0cmFuc2ZlciB1c3VhbGx5IHByb2NlZWRzCisodXNp
bmcgYSByZXBvc2l0b3J5IG5hbWVkIGBgam9lZG9lL3B5dGVzdC14eXpgYCBhcyBleGFtcGxlKToK
KworKiBPbmUgb2YgdGhlIGBgcHl0ZXN0LWRldmBgIGFkbWluaXN0cmF0b3JzIGNyZWF0ZXM6CisK
KyAgLSBgYHB5dGVzdC14eXotYWRtaW5gYCB0ZWFtLCB3aXRoIGZ1bGwgYWRtaW5pc3RyYXRpb24g
cmlnaHRzIHRvCisgICAgYGBweXRlc3QtZGV2L3B5dGVzdC14eXpgYC4KKyAgLSBgYHB5dGVzdC14
eXotZGV2ZWxvcGVyc2BgIHRlYW0sIHdpdGggd3JpdGUgYWNjZXNzIHRvCisgICAgYGBweXRlc3Qt
ZGV2L3B5dGVzdC14eXpgYC4KKworKiBgYGpvZWRvZWBgIGlzIGludml0ZWQgdG8gdGhlIGBgcHl0
ZXN0LXh5ei1hZG1pbmBgIHRlYW07CisKKyogQWZ0ZXIgYWNjZXB0aW5nIHRoZSBpbnZpdGF0aW9u
LCBgYGpvZWRvZWBgIHRyYW5zZmVycyB0aGUgcmVwb3NpdG9yeSBmcm9tIGl0cworICBvcmlnaW5h
bCBsb2NhdGlvbiB0byBgYHB5dGVzdC1kZXYvcHl0ZXN0LXh5emBgIChBIG5pY2UgZmVhdHVyZSBp
cyB0aGF0IEdpdEh1YiBoYW5kbGVzIFVSTCByZWRpcmVjdGlvbiBmcm9tCisgIHRoZSBvbGQgdG8g
dGhlIG5ldyBsb2NhdGlvbiBhdXRvbWF0aWNhbGx5KS4KKworKiBgYGpvZWRvZWBgIGlzIGZyZWUg
dG8gYWRkIGFueSBvdGhlciBjb2xsYWJvcmF0b3JzIHRvIHRoZQorICBgYHB5dGVzdC14eXotYWRt
aW5gYCBvciBgYHB5dGVzdC14eXotZGV2ZWxvcGVyc2BgIHRlYW0gYXMgZGVzaXJlZC4KKworVGhl
IGBgcHl0ZXN0LWRldi9Db250cmlidXRvcnNgYCB0ZWFtIGhhcyB3cml0ZSBhY2Nlc3MgdG8gYWxs
IHByb2plY3RzLCBhbmQKK2V2ZXJ5IHByb2plY3QgYWRtaW5pc3RyYXRvciBpcyBpbiBpdC4gV2Ug
cmVjb21tZW5kIHRoYXQgZWFjaCBwbHVnaW4gaGFzIGF0IGxlYXN0IHRocmVlCitwZW9wbGUgd2hv
IGhhdmUgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdG8gUHlQSS4KKworUmVwb3NpdG9yeSBvd25lcnMg
Y2FuIGJlIGFzc3VyZWQgdGhhdCBubyBgYHB5dGVzdC1kZXZgYCBhZG1pbmlzdHJhdG9yIHdpbGwg
ZXZlciBtYWtlCityZWxlYXNlcyBvZiB5b3VyIHJlcG9zaXRvcnkgb3IgdGFrZSBvd25lcnNoaXAg
aW4gYW55IHdheSwgZXhjZXB0IGluIHJhcmUgY2FzZXMKK3doZXJlIHNvbWVvbmUgYmVjb21lcyB1
bnJlc3BvbnNpdmUgYWZ0ZXIgbW9udGhzIG9mIGNvbnRhY3QgYXR0ZW1wdHMuCitBcyBzdGF0ZWQs
IHRoZSBvYmplY3RpdmUgaXMgdG8gc2hhcmUgbWFpbnRlbmFuY2UgYW5kIGF2b2lkICJwbHVnaW4t
YWJhbmRvbiIuCisKKworLi4gX2BwdWxsIHJlcXVlc3RzYDoKKy4uIF9wdWxsLXJlcXVlc3RzOgor
CitQcmVwYXJpbmcgUHVsbCBSZXF1ZXN0cyBvbiBHaXRIdWIKKy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCitUaGVyZSdzIGFuIGV4Y2VsbGVudCB0dXRvcmlhbCBvbiBob3cgUHVs
bCBSZXF1ZXN0cyB3b3JrIGluIHRoZQorYEdpdEh1YiBIZWxwIENlbnRlciA8aHR0cHM6Ly9oZWxw
LmdpdGh1Yi5jb20vYXJ0aWNsZXMvdXNpbmctcHVsbC1yZXF1ZXN0cy8+YF8KKworCisuLiBub3Rl
OjoKKyAgV2hhdCBpcyBhICJwdWxsIHJlcXVlc3QiPyAgSXQgaW5mb3JtcyBwcm9qZWN0J3MgY29y
ZSBkZXZlbG9wZXJzIGFib3V0IHRoZQorICBjaGFuZ2VzIHlvdSB3YW50IHRvIHJldmlldyBhbmQg
bWVyZ2UuICBQdWxsIHJlcXVlc3RzIGFyZSBzdG9yZWQgb24KKyAgYEdpdEh1YiBzZXJ2ZXJzIDxo
dHRwczovL2dpdGh1Yi5jb20vcHl0ZXN0LWRldi9weXRlc3QvcHVsbHM+YF8uCisgIE9uY2UgeW91
IHNlbmQgcHVsbCByZXF1ZXN0LCB3ZSBjYW4gZGlzY3VzcyBpdCdzIHBvdGVudGlhbCBtb2RpZmlj
YXRpb25zIGFuZAorICBldmVuIGFkZCBtb3JlIGNvbW1pdHMgdG8gaXQgbGF0ZXIgb24uCisKK1Ro
ZXJlJ3MgYW4gZXhjZWxsZW50IHR1dG9yaWFsIG9uIGhvdyBQdWxsIFJlcXVlc3RzIHdvcmsgaW4g
dGhlCitgR2l0SHViIEhlbHAgQ2VudGVyIDxodHRwczovL2hlbHAuZ2l0aHViLmNvbS9hcnRpY2xl
cy91c2luZy1wdWxsLXJlcXVlc3RzLz5gXywKK2J1dCBoZXJlIGlzIGEgc2ltcGxlIG92ZXJ2aWV3
OgorCisjLiBGb3JrIHRoZQorICAgYHB5dGVzdCBHaXRIdWIgcmVwb3NpdG9yeSA8aHR0cHM6Ly9n
aXRodWIuY29tL3B5dGVzdC1kZXYvcHl0ZXN0PmBfXy4gIEl0J3MKKyAgIGZpbmUgdG8gdXNlIGBg
cHl0ZXN0YGAgYXMgeW91ciBmb3JrIHJlcG9zaXRvcnkgbmFtZSBiZWNhdXNlIGl0IHdpbGwgbGl2
ZQorICAgdW5kZXIgeW91ciB1c2VyLgorCisjLiBDbG9uZSB5b3VyIGZvcmsgbG9jYWxseSB1c2lu
ZyBgZ2l0IDxodHRwczovL2dpdC1zY20uY29tLz5gXyBhbmQgY3JlYXRlIGEgYnJhbmNoOjoKKwor
ICAgICQgZ2l0IGNsb25lIGdpdEBnaXRodWIuY29tOllPVVJfR0lUSFVCX1VTRVJOQU1FL3B5dGVz
dC5naXQKKyAgICAkIGNkIHB5dGVzdAorICAgICMgbm93LCB0byBmaXggYSBidWcgY3JlYXRlIHlv
dXIgb3duIGJyYW5jaCBvZmYgIm1hc3RlciI6CisgICAgCisgICAgICAgICQgZ2l0IGNoZWNrb3V0
IC1iIHlvdXItYnVnZml4LWJyYW5jaC1uYW1lIG1hc3RlcgorCisgICAgIyBvciB0byBpbnN0ZWFk
IGFkZCBhIGZlYXR1cmUgY3JlYXRlIHlvdXIgb3duIGJyYW5jaCBvZmYgImZlYXR1cmVzIjoKKyAg
ICAKKyAgICAgICAgJCBnaXQgY2hlY2tvdXQgLWIgeW91ci1mZWF0dXJlLWJyYW5jaC1uYW1lIGZl
YXR1cmVzCisKKyAgIEdpdmVuIHdlIGhhdmUgIm1ham9yLm1pbm9yLm1pY3JvIiB2ZXJzaW9uIG51
bWJlcnMsIGJ1Z2ZpeGVzIHdpbGwgdXN1YWxseSAKKyAgIGJlIHJlbGVhc2VkIGluIG1pY3JvIHJl
bGVhc2VzIHdoZXJlYXMgZmVhdHVyZXMgd2lsbCBiZSByZWxlYXNlZCBpbiAKKyAgIG1pbm9yIHJl
bGVhc2VzIGFuZCBpbmNvbXBhdGlibGUgY2hhbmdlcyBpbiBtYWpvciByZWxlYXNlcy4KKworICAg
SWYgeW91IG5lZWQgc29tZSBoZWxwIHdpdGggR2l0LCBmb2xsb3cgdGhpcyBxdWljayBzdGFydAor
ICAgZ3VpZGU6IGh0dHBzOi8vZ2l0Lndpa2kua2VybmVsLm9yZy9pbmRleC5waHAvUXVpY2tTdGFy
dAorCisjLiBJbnN0YWxsIHRveAorCisgICBUb3ggaXMgdXNlZCB0byBydW4gYWxsIHRoZSB0ZXN0
cyBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHNldHVwIHZpcnR1YWxlbnZzCisgICB0byBydW4gdGhl
IHRlc3RzIGluLgorICAgKHdpbGwgaW1wbGljaXRseSB1c2UgaHR0cDovL3d3dy52aXJ0dWFsZW52
Lm9yZy9lbi9sYXRlc3QvKTo6CisKKyAgICAkIHBpcCBpbnN0YWxsIHRveAorCisjLiBSdW4gYWxs
IHRoZSB0ZXN0cworCisgICBZb3UgbmVlZCB0byBoYXZlIFB5dGhvbiAyLjcgYW5kIDMuNSBhdmFp
bGFibGUgaW4geW91ciBzeXN0ZW0uICBOb3cKKyAgIHJ1bm5pbmcgdGVzdHMgaXMgYXMgc2ltcGxl
IGFzIGlzc3VpbmcgdGhpcyBjb21tYW5kOjoKKworICAgICQgcHl0aG9uIHJ1bnRveC5weSAtZSBs
aW50aW5nLHB5MjcscHkzNQorCisgICBUaGlzIGNvbW1hbmQgd2lsbCBydW4gdGVzdHMgdmlhIHRo
ZSAidG94IiB0b29sIGFnYWluc3QgUHl0aG9uIDIuNyBhbmQgMy41CisgICBhbmQgYWxzbyBwZXJm
b3JtICJsaW50IiBjb2Rpbmctc3R5bGUgY2hlY2tzLiAgYGBydW50b3gucHlgYCBpcworICAgYSB0
aGluIHdyYXBwZXIgYXJvdW5kIGBgdG94YGAgd2hpY2ggaW5zdGFsbHMgZnJvbSBhIGRldmVsb3Bt
ZW50IHBhY2thZ2UKKyAgIGluZGV4IHdoZXJlIG5ld2VyIChub3QgeWV0IHJlbGVhc2VkIHRvIHB5
cGkpIHZlcnNpb25zIG9mIGRlcGVuZGVuY2llcworICAgKGVzcGVjaWFsbHkgYGBweWBgKSBtaWdo
dCBiZSBwcmVzZW50LgorCisjLiBZb3UgY2FuIG5vdyBlZGl0IHlvdXIgbG9jYWwgd29ya2luZyBj
b3B5LgorCisgICBZb3UgY2FuIG5vdyBtYWtlIHRoZSBjaGFuZ2VzIHlvdSB3YW50IGFuZCBydW4g
dGhlIHRlc3RzIGFnYWluIGFzIG5lY2Vzc2FyeS4KKworICAgVG8gcnVuIHRlc3RzIG9uIHB5Mjcg
YW5kIHBhc3Mgb3B0aW9ucyB0byBweXRlc3QgKGUuZy4gZW50ZXIgcGRiIG9uIGZhaWx1cmUpCisg
ICB0byBweXRlc3QgeW91IGNhbiBkbzo6CisKKyAgICAkIHB5dGhvbiBydW50b3gucHkgLWUgcHky
NyAtLSAtLXBkYgorCisgICBvciB0byBvbmx5IHJ1biB0ZXN0cyBpbiBhIHBhcnRpY3VsYXIgdGVz
dCBtb2R1bGUgb24gcHkzNTo6CisKKyAgICAkIHB5dGhvbiBydW50b3gucHkgLWUgcHkzNSAtLSB0
ZXN0aW5nL3Rlc3RfY29uZmlnLnB5CisKKyMuIENvbW1pdCBhbmQgcHVzaCBvbmNlIHlvdXIgdGVz
dHMgcGFzcyBhbmQgeW91IGFyZSBoYXBweSB3aXRoIHlvdXIgY2hhbmdlKHMpOjoKKworICAgICQg
Z2l0IGNvbW1pdCAtYSAtbSAiPGNvbW1pdCBtZXNzYWdlPiIKKyAgICAkIGdpdCBwdXNoIC11CisK
KyAgIE1ha2Ugc3VyZSB5b3UgYWRkIGEgQ0hBTkdFTE9HIG1lc3NhZ2UsIGFuZCBhZGQgeW91cnNl
bGYgdG8gQVVUSE9SUy4gSWYgeW91CisgICBhcmUgdW5zdXJlIGFib3V0IGVpdGhlciBvZiB0aGVz
ZSBzdGVwcywgc3VibWl0IHlvdXIgcHVsbCByZXF1ZXN0IGFuZCB3ZSdsbAorICAgaGVscCB5b3Ug
Zml4IGl0IHVwLgorCisjLiBGaW5hbGx5LCBzdWJtaXQgYSBwdWxsIHJlcXVlc3QgdGhyb3VnaCB0
aGUgR2l0SHViIHdlYnNpdGUgdXNpbmcgdGhpcyBkYXRhOjoKKworICAgIGhlYWQtZm9yazogWU9V
Ul9HSVRIVUJfVVNFUk5BTUUvcHl0ZXN0CisgICAgY29tcGFyZTogeW91ci1icmFuY2gtbmFtZQor
CisgICAgYmFzZS1mb3JrOiBweXRlc3QtZGV2L3B5dGVzdAorICAgIGJhc2U6IG1hc3RlciAgICAg
ICAgICAjIGlmIGl0J3MgYSBidWdmaXgKKyAgICBiYXNlOiBmZWF0dXJlICAgICAgICAgIyBpZiBp
dCdzIGEgZmVhdHVyZQorCisKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3cz
Yy90b29scy9weXRlc3QvSE9XVE9SRUxFQVNFLnJzdCBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVk
L3czYy90b29scy9weXRlc3QvSE9XVE9SRUxFQVNFLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uM2ViZmEyOGIxZWQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2
ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L0hPV1RPUkVMRUFTRS5yc3QKQEAgLTAs
MCArMSw5MiBAQAorSG93IHRvIHJlbGVhc2UgcHl0ZXN0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitOb3RlOiB0aGlzIGFzc3VtZXMgeW91IGhhdmUgYWxy
ZWFkeSByZWdpc3RlcmVkIG9uIHB5cGkuCisKKzAuIGNyZWF0ZSB0aGUgYnJhbmNoIHJlbGVhc2Ut
VkVSU0lPTgorICAgdXNlIGZlYXR1cmVzIGFzIGJhc2UgZm9yIG1pbm9yL21ham9yIHJlbGVhc2Vz
CisgICBhbmQgbWFzdGVyIGFzIGJhc2UgZm9yIGJ1Z2ZpeCByZWxlYXNlcworCisxLiBCdW1wIHZl
cnNpb24gbnVtYmVycyBpbiBfcHl0ZXN0L19faW5pdF9fLnB5IChzZXR1cC5weSByZWFkcyBpdCkK
KworMi4gQ2hlY2sgYW5kIGZpbmFsaXplIENIQU5HRUxPRworCiszLiBXcml0ZSBkb2MvZW4vYW5u
b3VuY2UvcmVsZWFzZS1WRVJTSU9OLnR4dCBhbmQgaW5jbHVkZQorICAgaXQgaW4gZG9jL2VuL2Fu
bm91bmNlL2luZGV4LnR4dDo6CisKKyAgICAgICAgZ2l0IGxvZyAyLjguMi4uSEVBRCAtLWZvcm1h
dD0nJWFOJyB8IHNvcnQgLXUgIyBsaXN0cyB0aGUgbmFtZXMgb2YgYXV0aG9ycyBpbnZvbHZlZAor
Cis0LiBVc2UgZGV2cGkgZm9yIHVwbG9hZGluZyBhIHJlbGVhc2UgdGFyYmFsbCB0byBhIHN0YWdp
bmcgYXJlYTo6CisKKyAgICAgZGV2cGkgdXNlIGh0dHBzOi8vZGV2cGkubmV0L1VTRVIvZGV2Cisg
ICAgIGRldnBpIHVwbG9hZCAtLWZvcm1hdHMgc2Rpc3QsYmRpc3Rfd2hlZWwKKworNS4gUnVuIGZy
b20gbXVsdGlwbGUgbWFjaGluZXM6OgorCisgICAgIGRldnBpIHVzZSBodHRwczovL2RldnBpLm5l
dC9VU0VSL2RldgorICAgICBkZXZwaSB0ZXN0IHB5dGVzdD09VkVSU0lPTgorCis2LiBDaGVjayB0
aGF0IHRlc3RzIHBhc3MgZm9yIHJlbGV2YW50IGNvbWJpbmF0aW9ucyB3aXRoOjoKKworICAgICAg
IGRldnBpIGxpc3QgcHl0ZXN0CisKKyAgIG9yIGxvb2sgYXQgZmFpbHVyZXMgd2l0aCAiZGV2cGkg
bGlzdCAtZiBweXRlc3QiLgorCis3LiBSZWdlbmVyYXRlIHRoZSBkb2NzIGV4YW1wbGVzIHVzaW5n
IHRveCwgYW5kIGNoZWNrIGZvciByZWdyZXNzaW9uczo6CisKKyAgICAgIHRveCAtZSByZWdlbgor
ICAgICAgZ2l0IGRpZmYKKworCis4LiBCdWlsZCB0aGUgZG9jcywgeW91IG5lZWQgYSB2aXJ0dWFs
ZW52IHdpdGggcHkgYW5kIHNwaGlueAorICAgaW5zdGFsbGVkOjoKKworICAgICAgY2QgZG9jL2Vu
ICAgICAgCisgICAgICBtYWtlIGh0bWwKKworICAgQ29tbWl0IGFueSBjaGFuZ2VzIGJlZm9yZSB0
YWdnaW5nIHRoZSByZWxlYXNlLgorCis5LiBUYWcgdGhlIHJlbGVhc2U6OgorCisgICAgICBnaXQg
dGFnIFZFUlNJT04KKyAgICAgIGdpdCBwdXNoCisKKzEwLiBVcGxvYWQgdGhlIGRvY3MgdXNpbmcg
ZG9jL2VuL01ha2VmaWxlOjoKKworICAgICAgY2QgZG9jL2VuCisgICAgICBtYWtlIGluc3RhbGwg
ICMgb3IgImluc3RhbGxhbGwiIGlmIHlvdSBoYXZlIExhVGVYIGluc3RhbGxlZCBmb3IgUERGCisK
KyAgICBUaGlzIHJlcXVpcmVzIHNzaC1sb2dpbiBwZXJtaXNzaW9uIG9uIHB5dGVzdC5vcmcgYmVj
YXVzZSBpdCB1c2VzCisgICAgcnN5bmMuCisgICAgTm90ZSB0aGF0IHRoZSBgYGluc3RhbGxgYCB0
YXJnZXQgb2YgYGBkb2MvZW4vTWFrZWZpbGVgYCBkZWZpbmVzIHdoZXJlIHRoZQorICAgIHJzeW5j
IGdvZXMgdG8sIHR5cGljYWxseSB0byB0aGUgImxhdGVzdCIgc2VjdGlvbiBvZiBweXRlc3Qub3Jn
LgorCisgICAgSWYgeW91IGFyZSBtYWtpbmcgYSBtaW5vciByZWxlYXNlIChlLmcuIDUuNCksIHlv
dSBhbHNvIG5lZWQgdG8gbWFudWFsbHkKKyAgICBjcmVhdGUgYSBzeW1saW5rIGZvciAibGF0ZXN0
Ijo6CisKKyAgICAgICBzc2ggcHl0ZXN0LWRldkBweXRlc3Qub3JnCisgICAgICAgbG4gLXMgNS40
IGxhdGVzdAorCisgICAgQnJvd3NlIHRvIHB5dGVzdC5vcmcgdG8gdmVyaWZ5LgorCisxMS4gUHVi
bGlzaCB0byBweXBpOjoKKworICAgICAgZGV2cGkgcHVzaCBweXRlc3QtVkVSU0lPTiBweXBpOk5B
TUUKKworICAgIHdoZXJlIE5BTUUgaXMgdGhlIG5hbWUgb2YgcHlwaS5weXRob24ub3JnIGFzIGNv
bmZpZ3VyZWQgaW4geW91ciBgYH4vLnB5cGlyY2BgCisgICAgZmlsZSBgZm9yIGRldnBpIDxodHRw
Oi8vZG9jLmRldnBpLm5ldC9sYXRlc3QvcXVpY2tzdGFydC1yZWxlYXNlcHJvY2Vzcy5odG1sP2hp
Z2hsaWdodD1weXBpcmMjZGV2cGktcHVzaC1yZWxlYXNpbmctdG8tYW4tZXh0ZXJuYWwtaW5kZXg+
YF8uCisKKworMTIuIFNlbmQgcmVsZWFzZSBhbm5vdW5jZW1lbnQgdG8gbWFpbGluZyBsaXN0czoK
KworICAgIC0gcHl0ZXN0LWRldgorICAgIC0gdGVzdGluZy1pbi1weXRob24KKyAgICAtIHB5dGhv
bi1hbm5vdW5jZS1saXN0QHB5dGhvbi5vcmcKKworCisxMy4gKiphZnRlciB0aGUgcmVsZWFzZSoq
IEJ1bXAgdGhlIHZlcnNpb24gbnVtYmVyIGluIGBgX3B5dGVzdC9fX2luaXRfXy5weWBgLAorICAg
IHRvIHRoZSBuZXh0IE1pbm9yIHJlbGVhc2UgdmVyc2lvbiAoaS5lLiBpZiB5b3UgcmVsZWFzZWQg
YGBweXRlc3QtMi44LjBgYCwKKyAgICBzZXQgaXQgdG8gYGBweXRlc3QtMi45LjAuZGV2MWBgKS4K
KworMTQuIG1lcmdlIHRoZSBhY3R1YWwgcmVsZWFzZSBpbnRvIHRoZSBtYXN0ZXIgYnJhbmNoIGFu
ZCBkbyBhIHB1bGwgcmVxdWVzdCBhZ2FpbnN0IGl0CisxNS4gbWVyZ2UgZnJvbSBtYXN0ZXIgdG8g
ZmVhdHVyZXMKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9w
eXRlc3QvSVNTVUVTLnR4dCBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRl
c3QvSVNTVUVTLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDgx
ZDcyN2U4NmEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mv
dG9vbHMvcHl0ZXN0L0lTU1VFUy50eHQKQEAgLTAsMCArMSwzNjUgQEAKKworCityZWNvcmRlciA9
IG1vbmtleXBhdGNoLmZ1bmN0aW9uKCIuLi4uLi4uIikKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3RhZ3M6IG5pY2UgZmVhdHVy
ZSAKKworTGlrZSBtb25rZXlwYXRjaC5yZXBsYWNlIGJ1dCBzZXRzIGEgbW9jay1saWtlIGNhbGwg
cmVjb3JkZXI6CisKKyAgICByZWNvcmRlciA9IG1vbmtleXBhdGNoLmZ1bmN0aW9uKCJvcy5wYXRo
LmFic3BhdGgiKQorICAgIHJlY29yZGVyLnNldF9yZXR1cm4oIi9oZWxsbyIpCisgICAgb3MucGF0
aC5hYnNwYXRoKCJoZWxsbyIpCisgICAgY2FsbCwgPSByZWNvcmRlci5jYWxscworICAgIGFzc2Vy
dCBjYWxsLmFyZ3MucGF0aCA9PSAiaGVsbG8iCisgICAgYXNzZXJ0IGNhbGwucmV0dXJuZWQgPT0g
Ii9oZWxsbyIKKyAgICAuLi4KKworVW5saWtlIG1vY2ssICJhcmdzLnBhdGgiIGFjdHMgb24gdGhl
IHBhcnNlZCBhdXRvLXNwZWMnZWQgYGBvcy5wYXRoLmFic3BhdGhgYAorc28gaXQncyBpbmRlcGVu
ZGVudCBmcm9tIGlmIHRoZSBjbGllbnQgc2lkZSBjYWxsZWQgIm9zLnBhdGguYWJzcGF0aChwYXRo
PS4uLikiCitvciAib3MucGF0aC5hYnNwYXRoKCdwb3NpdGlvbmFsJykiLgorCisKK3JlZmluZSBw
YXJhbWV0cml6ZSBBUEkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KK3RhZ3M6IGNyaXRpY2FsIGZlYXR1cmUgCisKK2V4dGVuZCBt
ZXRhZnVuYy5wYXJhbWV0cml6ZSB0byBkaXJlY3RseSBzdXBwb3J0IGluZGlyZWN0aW9uLCBleGFt
cGxlOgorCisgICAgZGVmIHNldHVwZGIocmVxdWVzdCwgY29uZmlnKToKKyAgICAgICAgIyBzZXR1
cCAicmVzb3VyY2UiIGJhc2VkIG9uIHRlc3QgcmVxdWVzdCBhbmQgdGhlIHZhbHVlcyBwYXNzZWQg
CisgICAgICAgICMgaW4gdG8gcGFyYW1ldHJpemUuICBzZXR1cGZ1bmMgaXMgY2FsbGVkIGZvciBl
YWNoIHN1Y2ggdmFsdWUuCisgICAgICAgICMgeW91IG1heSB1c2UgcmVxdWVzdC5hZGRmaW5hbGl6
ZXIoKSBvciByZXF1ZXN0LmNhY2hlZF9zZXR1cCAuLi4KKyAgICAgICAgcmV0dXJuIGR5bmFtaWNf
c2V0dXBfZGF0YWJhc2UodmFsKQorCisgICAgQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKCJkYiIs
IFsicGciLCAibXlzcWwiXSwgc2V0dXBmdW5jPXNldHVwZGIpCisgICAgZGVmIHRlc3RfaGVhdnlf
ZnVuY3Rpb25hbF90ZXN0KGRiKToKKyAgICAgICAgLi4uCisKK1RoZXJlIHdvdWxkIGJlIG5vIG5l
ZWQgdG8gd3JpdGUgb3IgZXhwbGFpbiBmdW5jYXJnIGZhY3RvcmllcyBhbmQKK3RoZWlyIHNwZWNp
YWwgX18gc3ludGF4LgorCitUaGUgZXhhbXBsZXMgYW5kIGltcHJvdmVtZW50cyBzaG91bGQgYWxz
byBzaG93IGhvdyB0byBwdXQgdGhlIHBhcmFtZXRyaXplCitkZWNvcmF0b3IgdG8gYSBjbGFzcywg
dG8gYSBtb2R1bGUgb3IgZXZlbiB0byBhIGRpcmVjdG9yeS4gIEZvciB0aGUgZGlyZWN0b3J5Citw
YXJ0IGEgY29uZnRlc3QucHkgY29udGVudCBsaWtlIHRoaXM6OgorCisgICAgcHl0ZXN0bWFyayA9
IFsKKyAgICAgICAgQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplX3NldHVwKCJkYiIsIC4uLiksCisg
ICAgXQorCitwcm9iYWJseSBtYWtlcyBzZW5zZSBpbiBvcmRlciB0byBrZWVwIHRoZSBkZWNsYXJh
dGl2ZSBuYXR1cmUuICAgVGhpcyBtaXJyb3JzCit0aGUgbWFya2VyLW1lY2hhbmlzbSB3aXRoIHJl
c3BlY3QgdG8gYSB0ZXN0IG1vZHVsZSBidXQgcHV0cyBpdCB0byBhIGRpcmVjdG9yeQorc2NhbGUu
CisKK1doZW4gZG9pbmcgbGFyZ2VyIHNjb3BlZCBwYXJhbWV0cml6YXRpb24gaXQgcHJvYmFibHkg
YmVjb21lcyBuZWNlc3NhcnkKK3RvIGFsbG93IHBhcmFtZXRyaXphdGlvbiB0byBiZSBpZ25vcmVk
IGlmIHRoZSBhY2NvcmRpbmcgcGFyYW1ldGVyIGlzIG5vdAordXNlZCAoY3VycmVudGx5IGFueSBw
YXJhbWV0cml6ZWQgYXJndW1lbnQgdGhhdCBpcyBub3QgcHJlc2VudCBpbiBhIGZ1bmN0aW9uIHdp
bGwgY2F1c2UgYSBWYWx1ZUVycm9yKS4gRXhhbXBsZToKKworICAgICAgICBAcHl0ZXN0Lm1hcmsu
cGFyYW1ldHJpemUoImRiIiwgLi4uLCBtdXN0bWF0Y2g9RmFsc2UpCisKK21lYW5zIHRvIG5vdCBy
YWlzZSBhbiBlcnJvciBidXQgc2ltcGx5IGlnbm9yZSB0aGUgcGFyYW1ldHJpemF0aW9uCitpZiB0
aGUgc2lnbmF0dXJlIG9mIGEgZGVjb3JhdGVkIGZ1bmN0aW9uIGRvZXMgbm90IG1hdGNoLiBYWFgg
aXMgaXQKK25vdCBzdWZmaWNpZW50IHRvIGFsd2F5cyBhbGxvdyBub24tbWF0Y2hlcz8KKworCith
bGxvdyBwYXJhbWV0cml6ZWQgYXR0cmlidXRlcyBvbiBjbGFzc2VzCistLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKKwordGFnczogd2lzaCAyLjQKKwor
ZXhhbXBsZToKKworICAgIEBweXRlc3QubWFyay5wYXJhbWV0cml6ZV9hdHRyKCJkYiIsIHNldHVw
ZnVuYywgWzEsMiwzXSwgc2NvcGU9ImNsYXNzIikKKyAgICBAcHl0ZXN0Lm1hcmsucGFyYW1ldHJp
emVfYXR0cigidG1wIiwgc2V0dXBmdW5jLCBzY29wZT0iLi4uIikKKyAgICBjbGFzcyBUZXN0TWU6
CisgICAgICAgIGRlZiB0ZXN0X2hlbGxvKHNlbGYpOgorICAgICAgICAgICAgYWNjZXNzIHNlbGYu
ZGIgLi4uCisKK3RoaXMgd291bGQgcnVuIHRoZSB0ZXN0X2hlbGxvKCkgZnVuY3Rpb24gdGhyZWUg
dGltZXMgd2l0aCB0aHJlZQorZGlmZmVyZW50IHZhbHVlcyBmb3Igc2VsZi5kYi4gVGhpcyBjb3Vs
ZCBhbHNvIHdvcmsgd2l0aCB1bml0dGVzdC9ub3NlCitzdHlsZSB0ZXN0cywgaS5lLiBpdCBsZXZl
cmFnZXMgZXhpc3RpbmcgdGVzdCBzdWl0ZXMgd2l0aG91dCBuZWVkaW5nCit0byByZXdyaXRlIHRo
ZW0uIFRvZ2V0aGVyIHdpdGggdGhlIHByZXZpb3VzbHkgbWVudGlvbmVkIHNldHVwX3Rlc3QoKQor
bWF5YmUgdGhlIHNldHVwZnVuYyBjb3VsZCBiZSBvbWl0dGVkPworCitvcHRpbWl6YXRpb25zIAor
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCit0YWdzOiAyLjQgY29yZQorCistIGxvb2sgYXQgaWhvb2sgb3B0aW1pemF0aW9uIHN1
Y2ggdGhhdCBhbGwgbG9va3VwcyBmb3IKKyAgaG9va3MgcmVsYXRpbmcgdG8gdGhlIHNhbWUgZnNw
YXRoIGFyZSBjYWNoZWQuCisKK2ZpeCBzdGFydC9maW5pc2ggcGFydGlhbCBmaW5haWxpemF0aW9u
IHByb2JsZW0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQordGFnczogYnVnIGNvcmUKKworaWYgYSBjb25maWd1cmUvcnVudGVz
dF9zZXR1cC9zZXNzaW9uc3RhcnQvLi4uIGhvb2sgaW52b2NhdGlvbiBwYXJ0aWFsbHkKK2ZhaWxz
IHRoZSBzZXNzaW9uZmluaXNoZXMgaXMgbm90IGNhbGxlZC4gIEVhY2ggaG9vayBpbXBsZW1lbnRh
dGlvbgorc2hvdWxkIGJldHRlciBiZSByZXBzb25zaWJsZSBmb3IgcmVnaXN0ZXJpbmcgYSBjbGVh
bnVwL2ZpbmFsaXplcgorYXBwcm9wcmlhdGVseSB0byBhdm9pZCB0aGlzIGlzc3VlLiAgTW9yZW92
ZXIvQWx0ZXJuYXRpdmVseSwgd2UgY291bGQgCityZWNvcmQgd2hpY2ggaW1wbGVtZW50YXRpb25z
IG9mIGEgaG9vayBzdWNjZWVkZWQgYW5kIG9ubHkgY2FsbCB0aGVpcgordGVhcmRvd24uCisKKwor
cmVsYXggcmVxdWlyZW1lbnQgdG8gaGF2ZSB0ZXN0cy90ZXN0aW5nIGNvbnRhaW4gYW4gX19pbml0
X18KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KK3RhZ3M6IGZlYXR1cmUgCitiYjogaHR0cDovL2JpdGJ1Y2tldC5vcmcvaHBr
NDIvcHktdHJ1bmsvaXNzdWUvNjQKKworQSBsb2NhbCB0ZXN0IHJ1biBvZiBhICJ0ZXN0cyIgZGly
ZWN0b3J5IG1heSB3b3JrCitidXQgYSByZW1vdGUgb25lIGZhaWwgYmVjYXVzZSB0aGUgdGVzdHMg
ZGlyZWN0b3J5Citkb2VzIG5vdCBjb250YWluIGFuICJfX2luaXRfXy5weSIuIEVpdGhlciBnaXZl
CithbiBlcnJvciBvciBtYWtlIGl0IHdvcmsgd2l0aG91dCB0aGUgX19pbml0X18ucHkKK2kuZS4g
cG9ydCB0aGUgbm9zZS1sb2dpYyBvZiB1bmxvYWRpbmcgYSB0ZXN0IG1vZHVsZS4KKworY3VzdG9t
aXplIHRlc3QgZnVuY3Rpb24gY29sbGVjdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordGFnczogZmVhdHVyZSAKKworLSBpbnRyb2R1
Y2UgcHl0ZXN0Lm1hcmsubm9jb2xsZWN0IGZvciBub3QgY29uc2lkZXJpbmcgYSBmdW5jdGlvbiBm
b3IKKyAgdGVzdCBjb2xsZWN0aW9uIGF0IGFsbC4gIG1heWJlIGFsc28gaW50cm9kdWNlIGEgcHl0
ZXN0Lm1hcmsudGVzdCB0bworICBleHBsaWNpdGx5IG1hcmsgYSBmdW5jdGlvbiB0byBiZWNvbWUg
YSB0ZXN0ZWQgb25lLiAgTG9va3VwIEpVbml0IHdheXMKKyAgb2YgdGFnZ2luZyB0ZXN0cy4KKwor
aW50cm9kdWNlIHB5dGVzdC5tYXJrLmltcG9ydG9yc2tpcAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordGFnczogZmVhdHVyZSAKKworaW4g
YWRkaXRpb24gdG8gdGhlIGltcGVyYXRpdmUgcHl0ZXN0LmltcG9ydG9yc2tpcCBhbHNvIGludHJv
ZHVjZQorYSBweXRlc3QubWFyay5pbXBvcnRvcnNraXAgc28gdGhhdCB0aGUgdGVzdCBjb3VudCBp
cyBtb3JlIGNvcnJlY3QuCisKKworaW50cm9kdWNlIHB5dGVzdC5tYXJrLnBsYXRmb3JtCistLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0YWdz
OiBmZWF0dXJlIAorCitJbnRyb2R1Y2UgbmljZS10by1zcGVsbCBwbGF0Zm9ybS1za2lwcGluZywg
ZXhhbXBsZXM6CisKKyAgICBAcHl0ZXN0Lm1hcmsucGxhdGZvcm0oInB5dGhvbjMiKQorICAgIEBw
eXRlc3QubWFyay5wbGF0Zm9ybSgibm90IHB5dGhvbjMiKQorICAgIEBweXRlc3QubWFyay5wbGF0
Zm9ybSgid2luMzIgYW5kIG5vdCBweXRob24zIikKKyAgICBAcHl0ZXN0Lm1hcmsucGxhdGZvcm0o
ImRhcndpbiIpCisgICAgQHB5dGVzdC5tYXJrLnBsYXRmb3JtKCJub3QgKGp5dGhvbiBhbmQgd2lu
MzIpIikKKyAgICBAcHl0ZXN0Lm1hcmsucGxhdGZvcm0oIm5vdCAoanl0aG9uIGFuZCB3aW4zMiki
LCB4ZmFpbD1UcnVlKQorCitldGMuIElkZWEgaXMgdG8gYWxsb3cgUHl0aG9uIGV4cHJlc3Npb25z
IHdoaWNoIGNhbiBvcGVyYXRlCitvbiBjb21tb24gc3BlbGxpbmdzIGZvciBvcGVyYXRpbmcgc3lz
dGVtcyBhbmQgcHl0aG9uCitpbnRlcnByZXRlciB2ZXJzaW9ucy4KKworcHl0ZXN0Lm1hcmsueGZh
aWwgc2lnbmF0dXJlIGNoYW5nZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQordGFnczogZmVhdHVyZSAKKworY2hhbmdlIHRvIHB5dGVzdC5t
YXJrLnhmYWlsKHJlYXNvbiwgKG9wdGlvbmFsKWNvbmRpdGlvbikKK3RvIGJldHRlciBpbXBsZW1l
bnQgdGhlIHdvcmQgbWVhbmluZy4gIEl0IGFsc28gc2lnbmFscworYmV0dGVyIHRoYXQgd2UgYWx3
YXlzIGhhdmUgc29tZSBraW5kIG9mIGFuIGltcGxlbWVudGF0aW9uCityZWFzb24gdGhhdCBjYW4g
YmUgZm9ybXVhbGF0ZWQuCitDb21wYXRpYmlsaXR5PyBob3cgdG8gaW50cm9kdWNlIGEgbmV3IG5h
bWUva2VlcCBjb21wYXQ/CisKK2FsbG93IHRvIG5vbi1pbnRydXNpdmVseSBhcHBseSBza2lwZnMv
eGZhaWwvbWFya3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQordGFnczogZmVhdHVyZSAKKwordXNlIGNhc2U6IG1hcmsgYSBtb2R1bGUgb3IgZGly
ZWN0b3J5IHN0cnVjdHVyZXMKK3RvIGJlIHNraXBwZWQgb24gY2VydGFpbiBwbGF0Zm9ybXMgKGku
ZS4gbm8gaW1wb3J0CithdHRlbXB0IHdpbGwgYmUgbWFkZSkuCisKK2NvbnNpZGVyIGludHJvZHVj
aW5nIGEgaG9vay9tZWNoYW5pc20gdGhhdCBhbGxvd3MgdG8gYXBwbHkgbWFya3MKK2Zyb20gY29u
ZnRlc3RzIG9yIHBsdWdpbnMuIChTZWUgZXh0ZW5kZWQgcGFyYW1ldHJpemF0aW9uKQorCisKK2V4
cGxpY2l0IHJlZmVyZW5jaW5nIG9mIGNvbmZ0ZXN0LnB5IGZpbGVzCistLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordGFnczogZmVhdHVyZSAKKworYWxsb3cgdG8gbmFt
ZSBjb25mdGVzdC5weSBmaWxlcyAoaW4gc3ViIGRpcmVjdG9yaWVzKSB0aGF0IHNob3VsZAorYmUg
aW1wb3J0ZWQgZWFybHksIGFzIHRvIGluY2x1ZGUgY29tbWFuZCBsaW5lIG9wdGlvbnMuCisKK2lt
cHJvdmUgY2VudHJhbCBweXRlc3QgaW5pIGZpbGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KK3RhZ3M6IGZlYXR1cmUgCisKK2ludHJvZHVjZSBtb3JlIGRlY2xhcmF0aXZlIGNvbmZp
Z3VyYXRpb24gb3B0aW9uczoKKy0gKHRvLWJlLWNvbGxlY3RlZCB0ZXN0IGRpcmVjdG9yaWVzKQor
LSByZXF1aXJlZCBwbHVnaW5zCistIHRlc3QgZnVuYy9jbGFzcy9maWxlIG1hdGNoaW5nIHBhdHRl
cm5zCistIHNraXAveGZhaWwgKG5vbi1pbnRydXNpdmUpCistIHB5dGVzdC5pbmkgYW5kIHRveC5p
bmkgYW5kIHNldHVwLmNmZyBjb25maWd1cmF0aW9uIGluIHRoZSBzYW1lIGZpbGUKKworbmV3IGRv
Y3VtZW50YXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3RhZ3M6IGZl
YXR1cmUgCisKKy0gbG9nbyBweXRlc3QKKy0gZXhhbXBsZXMgZm9yIHVuaXR0ZXN0IG9yIGZ1bmN0
aW9uYWwgdGVzdGluZworLSByZXNvdXJjZSBtYW5hZ2VtZW50IGZvciBmdW5jdGlvbmFsIHRlc3Rp
bmcKKy0gcGF0dGVybnM6IHBhZ2Ugb2JqZWN0CisKK2hhdmUgaW1wb3J0ZWQgbW9kdWxlIG1pc21h
dGNoIGhvbm91ciByZWxhdGl2ZSBwYXRocworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3RhZ3M6IGJ1ZyAKKworV2l0aCAxLjEuMSBweXRl
c3QgZmFpbHMgYXQgbGVhc3Qgb24gd2luZG93cyBpZiBhbiBpbXBvcnQKK2lzIHJlbGF0aXZlIGFu
ZCBjb21wYXJlZCBhZ2FpbnN0IGFuIGFic29sdXRlIGNvbmZ0ZXN0LnB5CitwYXRoLiBOb3JtYWxp
emUuCisKK2NvbnNpZGVyIGdsb2JhbHM6IHB5dGVzdC5lbnN1cmV0ZW1wIGFuZCBjb25maWcKKy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCit0YWdzOiBleHBlcmltZW50YWwtd2lzaCAKKworY29uc2lkZXIgZGVwcmVjYXRpbmcgcHl0
ZXN0LmVuc3VyZXRlbXAgYW5kIHB5dGVzdC5jb25maWcKK3RvIGZ1cnRoZXIgcmVkdWNlIHB5dGVz
dCBnbG9iYWxpdHkuICBBbHNvIGNvbnNpZGVyCitoYXZpbmcgcHl0ZXN0LmNvbmZpZyBhbmQgZW5z
dXJldGVtcCBjb21pbmcgZnJvbQorYSBwbHVnaW4gcmF0aGVyIHRoYW4gYmVpbmcgdGhlcmUgZnJv
bSB0aGUgc3RhcnQuCisKKworY29uc2lkZXIgcHl0ZXN0X2FkZHN5c3BhdGggaG9vaworLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3RhZ3M6IHdpc2gKKworcHl0ZXN0
IGNvdWxkIGNhbGwgYSBuZXcgcHl0ZXN0X2FkZHN5c3BhdGgoKSBpbiBvcmRlciB0byBzeXN0ZW1h
dGljYWxseQorYWxsb3cgbWFuaXB1bGF0aW9uIG9mIHN5cy5wYXRoIGFuZCB0byBpbmhpYml0IGl0
IHZpYSAtLW5vLWFkZHN5c3BhdGgKK2luIG9yZGVyIHRvIG1vcmUgZWFzaWx5IHJ1biBhZ2FpbnN0
IGluc3RhbGxlZCBwYWNrYWdlcy4KKworQWx0ZXJuYXRpdmVseSBpdCBjb3VsZCBhbHNvIGJlIGRv
bmUgdmlhIHRoZSBjb25maWcgb2JqZWN0CithbmQgcHl0ZXN0X2NvbmZpZ3VyZS4KKworCisKK2Rl
cHJlY2F0ZSBnbG9iYWwgcHl0ZXN0LmNvbmZpZyB1c2FnZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordGFnczogZmVhdHVy
ZSAKKworcHl0ZXN0LmVuc3VyZXRlbXAgYW5kIHB5dGVzdC5jb25maWcgYXJlIHByb2JhYmx5IHRo
ZSBsYXN0CitvYmplY3RzIGNvbnRhaW5pbmcgZ2xvYmFsIHN0YXRlLiAgT2Z0ZW4gdXNpbmcgdGhl
bSBpcyBub3QKK25lY2Vzc2FyeS4gIFRoaXMgaXMgYWJvdXQgdHJ5aW5nIHRvIGdldCByaWQgb2Yg
dGhlbSwgaS5lLgorZGVwcmVjYXRpbmcgdGhlbSBhbmQgY2hlY2tpbmcgd2l0aCBQeVB5J3MgdXNh
Z2VzIGFzIHdlbGwKK2FzIG90aGVycy4KKworcmVtb3ZlIGRlcHJlY2F0ZWQgYml0cyBpbiBjb2xs
ZWN0LnB5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCit0YWdzOiBmZWF0dXJlIAorCitJbiBhbiBlZmZvcnQgdG8gZnVy
dGhlciBzaW1wbGlmeSBjb2RlLCByZXZpZXcgYW5kIHJlbW92ZSBkZXByZWNhdGVkIGJpdHMKK2lu
IGNvbGxlY3QucHkuICBQcm9iYWJseSBnb29kOgorLSBpbmxpbmUgY29uc2lkZXJfZmlsZS9kaXIg
bWV0aG9kcywgbm8gbmVlZCB0byBoYXZlIHRoZW0KKyAgc3ViY2xhc3Mtb3ZlcnJpZGFibGUgYmVj
YXVzZSBvZiBob29rcworCitpbXBsZW1lbnQgZnNsYXlvdXQgZGVjb3JhdG9yCistLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3RhZ3M6IGZlYXR1cmUgCisKK0ltcHJvdmUgdGhlIHdh
eSBob3cgdGVzdHMgY2FuIHdvcmsgd2l0aCBwcmUtbWFkZSBleGFtcGxlcywKK2tlZXBpbmcgdGhl
IGxheW91dCBjbG9zZSB0byB0aGUgdGVzdCBmdW5jdGlvbjoKKworQHB5dGVzdC5tYXJrLmZzbGF5
b3V0KCIiIgorICAgIGNvbmZ0ZXN0LnB5OgorICAgICAgICAjICBlbXB0eQorICAgIHRlc3RzLwor
ICAgICAgICB0ZXN0XyUoTkFNRSlzOiAgIyBiZWNvbWVzIHRlc3RfcnVuMS5weQorICAgICAgICAg
ICAgZGVmIHRlc3RfZnVuY3Rpb24oc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworIiIiKQor
ZGVmIHRlc3RfcnVuKHB5dGVzdGVyLCBmc2xheW91dCk6CisgICAgcCA9IGZzbGF5b3V0LmZpbmRv
bmUoInRlc3RfKi5weSIpCisgICAgcmVzdWx0ID0gcHl0ZXN0ZXIucnVucHl0ZXN0KHApCisgICAg
YXNzZXJ0IHJlc3VsdC5yZXQgPT0gMAorICAgIGFzc2VydCByZXN1bHQucGFzc2VkID09IDEKKwor
QW5vdGhlciBpZGVhIGlzIHRvIGFsbG93IHRvIGRlZmluZSBhIGZ1bGwgc2NlbmFyaW8gaW5jbHVk
aW5nIHRoZSBydW4KK2luIG9uZSBjb250ZW50IHN0cmluZzo6CisKKyAgICBydW5zY2VuYXJpbygi
IiIKKyAgICAgICAgdGVzdF97VEVTVE5BTUV9LnB5OgorICAgICAgICAgICAgaW1wb3J0IHB5dGVz
dAorICAgICAgICAgICAgQHB5dGVzdC5tYXJrLnhmYWlsCisgICAgICAgICAgICBkZWYgdGVzdF90
aGF0X2ZhaWxzKCk6CisgICAgICAgICAgICAgICAgYXNzZXJ0IDAKKworICAgICAgICAgICAgQHB5
dGVzdC5tYXJrLnNraXBpZigiVHJ1ZSIpCisgICAgICAgICAgICBkZWYgdGVzdF9oZWxsbygpOgor
ICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjb25mdGVzdC5weToKKyAgICAgICAgICAg
IGltcG9ydCBweXRlc3QKKyAgICAgICAgICAgIGRlZiBweXRlc3RfcnVuc2V0dXBfc2V0dXAoaXRl
bSk6CisgICAgICAgICAgICAgICAgcHl0ZXN0LnNraXAoImFiYyIpCisKKyAgICAgICAgcnVucHl0
ZXN0IC1yc3hYCisgICAgICAgICpTS0lQKntURVNUTkFNRX0qCisgICAgICAgICoxIHNraXBwZWQq
IAorICAgICIiIikKKworVGhpcyBjb3VsZCBiZSBydW4gd2l0aCBhdCBsZWFzdCB0aHJlZSBkaWZm
ZXJlbnQgd2F5cyB0byBpbnZva2UgcHl0ZXN0OgordGhyb3VnaCB0aGUgc2hlbGwsIHRocm91Z2gg
InB5dGhvbiAtbSBweXRlc3QiIGFuZCBpbmxpbmVkLiBBcyBpbmxpbmVkCit3b3VsZCBiZSB0aGUg
ZmFzdGVzdCBpdCBjb3VsZCBiZSBydW4gZmlyc3QgKG9yICItLWZhc3QiIG1vZGUpLgorCisKK0Ny
ZWF0ZSBpc29sYXRlIHBsdWdpbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0YWdzOiBmZWF0dXJl
CisKK1RoZSBpZGVhIGlzIHRoYXQgeW91IGNhbiBlLmcuIGltcG9ydCBtb2R1bGVzIGluIGEgdGVz
dCBhbmQgYWZ0ZXJ3YXJkcworc3lzLm1vZHVsZXMsIHN5cy5tZXRhX3BhdGggZXRjIHdvdWxkIGJl
IHJldmVydGVkLiAgSXQgY2FuIGdvIGZ1cnRoZXIKK3RoZW4ganVzdCBpbXBvcnRpbmcgaG93ZXZl
ciwgZS5nLiBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LCBmaWxlCitkZXNjcmlwdG9ycywgLi4u
CisKK1RoaXMgd291bGQgcHJvYmFibHkgYmUgZG9uZSBieSBtYXJraW5nOjoKKworICAgIEBweXRl
c3QubWFyay5pc29sYXRlKGltcG9ydGluZz1UcnVlLCBjd2Q9VHJ1ZSwgZmRzPUZhbHNlKQorICAg
IGRlZiB0ZXN0X2ZvbygpOgorICAgICAgICAuLi4KKworV2l0aCB0aGUgcG9zc2liaWxpdHkgb2Yg
ZG9pbmcgdGhpcyBnbG9iYWxseSBpbiBhbiBpbmktZmlsZS4KKworCitmbm1hdGNoIGZvciB0ZXN0
IG5hbWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0YWdzOiBmZWF0dXJlLXdpc2gKKwordmFy
aW91cyB0ZXN0c3VpdGVzIHVzZSBzdWZmaXhlcyBpbnN0ZWFkIG9mIHByZWZpeGVzIGZvciB0ZXN0
IGNsYXNzZXMKK2Fsc28gaXQgbGVuZHMgaXRzZWxmIHRvIGJkZCBzdHlsZSB0ZXN0IG5hbWVzOjoK
KworICAgIGNsYXNzIFVzZXJCZWhhdmlvdXI6CisgICAgICAgIGRlZiBhbm9ueW1vdXNfc2hvdWxk
X25vdF9oYXZlX2luYm94KHVzZXIpOgorICAgICAgICAgICAgLi4uCisgICAgICAgIGRlZiByZWdp
c3RyZWRfc2hvdWxkX2hhdmVfaW5ib3godXNlcik6CisgICAgICAgICAgICAuLgorCit1c2luZyB0
aGUgZm9sbG93aW5nIGluIHB5dGVzdC5pbmk6OgorCisgICAgW3B5dGVzdF0KKyAgICBweXRob25f
Y2xhc3NlcyA9IFRlc3QgKkJlaGF2aW91ciAqVGVzdAorICAgIHB5dGhvbl9mdW5jdGlvbnMgPSB0
ZXN0ICpfc2hvdWxkXyoKKworCittZWNoYW5pc20gZm9yIHJ1bm5pbmcgbmFtZWQgcGFydHMgb2Yg
dGVzdHMgd2l0aCBkaWZmZXJlbnQgcmVwb3J0aW5nIGJlaGF2aW91cgorLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCit0YWdzOiBmZWF0dXJlLXdpc2gtaW5jb21wbGV0ZQorCithIGZldyB1c2UtY2FzZXMg
Y29tZSB0byBtaW5kOgorCisqIGZhaWwgYXNzZXJ0aW9ucyBhbmQgcmVjb3JkIHRoYXQgd2l0aG91
dCBzdG9wcGluZyBhIGNvbXBsZXRlIHRlc3QKKworICAqIHRoaXMgaXMgaW4gcGFydGljdWxhciBo
ZXBmdWxsIGlmIGEgc21hbGwgYml0IG9mIGEgdGVzdCBpcyBrbm93biB0byBmYWlsL3hmYWlsOjoK
KworICAgIGRlZiB0ZXN0X2Z1bigpOgorICAgICAgICB3aXRoIHB5dGVzdC5zZWN0aW9uKCdmZGNo
ZWNrLCBtYXJrcz1weXRlc3QubWFyay54ZmFpbF9pZiguLi4pKToKKyAgICAgICAgICAgIGJyZWFr
c19vbl93aW5kb3dzKCkKKworKiBkaXZpZGUgZnVuY3Rpb25hbC9hY2NlcHRhbmNlIHRlc3RzIGlu
dG8gc2VjdGlvbnMKKyogcHJvdmlkZSBhIGRpZmZlcmVudCBtZWNoYW5pc20gZm9yIGdlbmVyYXRv
cnMsIG1heWJlIHNvbWV0aGluZyBsaWtlOjoKKworICAgIGRlZiBweXRlc3RfcnVudGVzdF9jYWxs
KGl0ZW0pCisgICAgICAgIGlmIG5vdCBnZW5lcmF0b3I6CisgICAgICAgICAgICAuLi4KKyAgICAg
ICAgcHJlcGFyZV9jaGVjayA9IEdlbmVyYXRvckNoZWNrcHJlcGFyZSgpCisKKyAgICAgICAgZ2Vu
ID0gaXRlbS5vYmooKipmaXh0dXJlcykKKyAgICAgICAgZm9yIGNoZWNrIGluIGdlbgorICAgICAg
ICAgICAgaWQsIGNhbGwgPSBwcmVwYXJlX2NoZWNrKGNoZWNrKQorICAgICAgICAgICAgIyBidWJi
bGUgc2hvdWxkIG9ubHkgcHJldmVudCBleGNlcHRpb24gcHJvcGFnYXRpb24gYWZ0ZXIgYSBmYWls
dXJlCisgICAgICAgICAgICAjIHRoZSB3aG9sZSB0ZXN0IHNob3VsZCBzdGlsbCBmYWlsCisgICAg
ICAgICAgICAjIHRoZXJlIG1pZ2h0IGJlIG5lZWQgZm9yIGEgbG93ZXIgbGV2ZWwgYXBpIGFuZCB0
YWtpbmcgY3VzdG9tIG1hcmtlcnMgaW50byBhY2NvdW50CisgICAgICAgICAgICB3aXRoIHB5dGVz
dC5zZWN0aW9uKGlkLCBidWJibGU9RmFsc2UpOgorICAgICAgICAgICAgICAgIGNhbGwoKQorCisK
ZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvTElD
RU5TRSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvTElDRU5TRQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOWUyN2JkNzg0MTkKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L0xJ
Q0VOU0UKQEAgLTAsMCArMSwyMSBAQAorVGhlIE1JVCBMaWNlbnNlIChNSVQpCisKK0NvcHlyaWdo
dCAoYykgMjAwNC0yMDE2IEhvbGdlciBLcmVrZWwgYW5kIG90aGVycworCitQZXJtaXNzaW9uIGlz
IGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcg
YSBjb3B5IG9mCit0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmls
ZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbgordGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVz
dHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwordXNl
LCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBh
bmQvb3Igc2VsbCBjb3BpZXMKK29mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25z
IHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbworc28sIHN1YmplY3QgdG8g
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBh
bmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKK2NvcGll
cyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FS
RSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBS
RVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQVVUSE9SUyBPUiBD
T1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhF
UgorTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBP
VEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKK09VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhF
IFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCitTT0ZUV0FSRS4K
ZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvTUFO
SUZFU1QuaW4gYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L01BTklG
RVNULmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yNjZhOTE4NGRj
MwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9w
eXRlc3QvTUFOSUZFU1QuaW4KQEAgLTAsMCArMSwzNCBAQAoraW5jbHVkZSBDSEFOR0VMT0cucnN0
CitpbmNsdWRlIExJQ0VOU0UKK2luY2x1ZGUgQVVUSE9SUworCitpbmNsdWRlIFJFQURNRS5yc3QK
K2luY2x1ZGUgQ09OVFJJQlVUSU5HLnJzdAorCitpbmNsdWRlIHRveC5pbmkKK2luY2x1ZGUgc2V0
dXAucHkKKworaW5jbHVkZSAuY292ZXJhZ2VyYworCitpbmNsdWRlIHBsdWdpbi10ZXN0LnNoCitp
bmNsdWRlIHJlcXVpcmVtZW50cy1kb2NzLnR4dAoraW5jbHVkZSBydW50b3gucHkKKworcmVjdXJz
aXZlLWluY2x1ZGUgYmVuY2ggKi5weQorcmVjdXJzaXZlLWluY2x1ZGUgZXh0cmEgKi5weQorCitn
cmFmdCB0ZXN0aW5nCitncmFmdCBkb2MKKworZXhjbHVkZSBfcHl0ZXN0L2ltcGwKKworZ3JhZnQg
X3B5dGVzdC92ZW5kb3JlZF9wYWNrYWdlcworCityZWN1cnNpdmUtZXhjbHVkZSAqICoucHljICou
cHlvCisKK2V4Y2x1ZGUgYXBwdmV5b3IvaW5zdGFsbC5wczEKK2V4Y2x1ZGUgYXBwdmV5b3IueW1s
CitleGNsdWRlIGFwcHZleW9yCisKK2V4Y2x1ZGUgSVNTVUVTLnR4dAorZXhjbHVkZSBIT1dUT1JF
TEVBU0UucnN0CmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMv
cHl0ZXN0L1JFQURNRS5yc3QgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0
ZXN0L1JFQURNRS5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjY4
ZmM5MjIxMWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNj
L3Rvb2xzL3B5dGVzdC9SRUFETUUucnN0CkBAIC0wLDAgKzEsMTAyIEBACisuLiBpbWFnZTo6IGh0
dHA6Ly9weXRlc3Qub3JnL2xhdGVzdC9fc3RhdGljL3B5dGVzdDEucG5nCisgICA6dGFyZ2V0OiBo
dHRwOi8vcHl0ZXN0Lm9yZworICAgOmFsaWduOiBjZW50ZXIKKyAgIDphbHQ6IHB5dGVzdAorCist
LS0tLS0KKworLi4gaW1hZ2U6OiBodHRwczovL2ltZy5zaGllbGRzLmlvL3B5cGkvdi9weXRlc3Qu
c3ZnCisgICA6dGFyZ2V0OiBodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL3B5dGVzdAorLi4g
aW1hZ2U6OiBodHRwczovL2ltZy5zaGllbGRzLmlvL3B5cGkvcHl2ZXJzaW9ucy9weXRlc3Quc3Zn
CisgIDp0YXJnZXQ6IGh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvcHl0ZXN0CisuLiBpbWFn
ZTo6IGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vY292ZXJhbGxzL3B5dGVzdC1kZXYvcHl0ZXN0L21h
c3Rlci5zdmcKKyAgIDp0YXJnZXQ6IGh0dHBzOi8vY292ZXJhbGxzLmlvL3IvcHl0ZXN0LWRldi9w
eXRlc3QKKy4uIGltYWdlOjogaHR0cHM6Ly90cmF2aXMtY2kub3JnL3B5dGVzdC1kZXYvcHl0ZXN0
LnN2Zz9icmFuY2g9bWFzdGVyCisgICAgOnRhcmdldDogaHR0cHM6Ly90cmF2aXMtY2kub3JnL3B5
dGVzdC1kZXYvcHl0ZXN0CisuLiBpbWFnZTo6IGh0dHBzOi8vY2kuYXBwdmV5b3IuY29tL2FwaS9w
cm9qZWN0cy9zdGF0dXMvbXJnYmphdWE3dDMzcGc2Yj9zdmc9dHJ1ZQorICAgIDp0YXJnZXQ6IGh0
dHBzOi8vY2kuYXBwdmV5b3IuY29tL3Byb2plY3QvcHl0ZXN0Ym90L3B5dGVzdAorCitUaGUgYGBw
eXRlc3RgYCBmcmFtZXdvcmsgbWFrZXMgaXQgZWFzeSB0byB3cml0ZSBzbWFsbCB0ZXN0cywgeWV0
CitzY2FsZXMgdG8gc3VwcG9ydCBjb21wbGV4IGZ1bmN0aW9uYWwgdGVzdGluZyBmb3IgYXBwbGlj
YXRpb25zIGFuZCBsaWJyYXJpZXMuICAgIAorCitBbiBleGFtcGxlIG9mIGEgc2ltcGxlIHRlc3Q6
CisKKy4uIGNvZGUtYmxvY2s6OiBweXRob24KKworICAgICMgY29udGVudCBvZiB0ZXN0X3NhbXBs
ZS5weQorICAgIGRlZiBmdW5jKHgpOgorICAgICAgICByZXR1cm4geCArIDEKKworICAgIGRlZiB0
ZXN0X2Fuc3dlcigpOgorICAgICAgICBhc3NlcnQgZnVuYygzKSA9PSA1CisKKworVG8gZXhlY3V0
ZSBpdDo6CisKKyAgICAkIHB5LnRlc3QKKyAgICA9PT09PT09IHRlc3Qgc2Vzc2lvbiBzdGFydHMg
PT09PT09PT0KKyAgICBwbGF0Zm9ybSBsaW51eCAtLSBQeXRob24gMy40LjMsIHB5dGVzdC0yLjgu
NSwgcHktMS40LjMxLCBwbHVnZ3ktMC4zLjEgICAgCisgICAgY29sbGVjdGVkIDEgaXRlbXMKKwor
ICAgIHRlc3Rfc2FtcGxlLnB5IEYKKworICAgID09PT09PT0gRkFJTFVSRVMgPT09PT09PT0KKyAg
ICBfX19fX19fIHRlc3RfYW5zd2VyIF9fX19fX19fCisKKyAgICAgICAgZGVmIHRlc3RfYW5zd2Vy
KCk6CisgICAgPiAgICAgICBhc3NlcnQgZnVuYygzKSA9PSA1CisgICAgRSAgICAgICBhc3NlcnQg
NCA9PSA1CisgICAgRSAgICAgICAgKyAgd2hlcmUgNCA9IGZ1bmMoMykKKworICAgIHRlc3Rfc2Ft
cGxlLnB5OjU6IEFzc2VydGlvbkVycm9yCisgICAgPT09PT09PSAxIGZhaWxlZCBpbiAwLjEyIHNl
Y29uZHMgPT09PT09PT0KKworRHVlIHRvIGBgcHkudGVzdGBgJ3MgZGV0YWlsZWQgYXNzZXJ0aW9u
IGludHJvc3BlY3Rpb24sIG9ubHkgcGxhaW4gYGBhc3NlcnRgYCBzdGF0ZW1lbnRzIGFyZSB1c2Vk
LiBTZWUgYGdldHRpbmctc3RhcnRlZCA8aHR0cDovL3B5dGVzdC5vcmcvbGF0ZXN0L2dldHRpbmct
c3RhcnRlZC5odG1sI291ci1maXJzdC10ZXN0LXJ1bj5gXyBmb3IgbW9yZSBleGFtcGxlcy4KKyAg
ICAgICAgCisKK0ZlYXR1cmVzCistLS0tLS0tLQorCistIERldGFpbGVkIGluZm8gb24gZmFpbGlu
ZyBgYXNzZXJ0IHN0YXRlbWVudHMgPGh0dHA6Ly9weXRlc3Qub3JnL2xhdGVzdC9hc3NlcnQuaHRt
bD5gXyAobm8gbmVlZCB0byByZW1lbWJlciBgYHNlbGYuYXNzZXJ0KmBgIG5hbWVzKTsKKworLSBg
QXV0by1kaXNjb3ZlcnkKKyAgPGh0dHA6Ly9weXRlc3Qub3JnL2xhdGVzdC9nb29kcHJhY3RpY2Vz
Lmh0bWwjcHl0aG9uLXRlc3QtZGlzY292ZXJ5PmBfCisgIG9mIHRlc3QgbW9kdWxlcyBhbmQgZnVu
Y3Rpb25zOworCistIGBNb2R1bGFyIGZpeHR1cmVzIDxodHRwOi8vcHl0ZXN0Lm9yZy9sYXRlc3Qv
Zml4dHVyZS5odG1sPmBfICBmb3IKKyAgbWFuYWdpbmcgc21hbGwgb3IgcGFyYW1ldHJpemVkIGxv
bmctbGl2ZWQgdGVzdCByZXNvdXJjZXM7CisKKy0gQ2FuIHJ1biBgdW5pdHRlc3QgPGh0dHA6Ly9w
eXRlc3Qub3JnL2xhdGVzdC91bml0dGVzdC5odG1sPmBfIChvciB0cmlhbCksCisgIGBub3NlIDxo
dHRwOi8vcHl0ZXN0Lm9yZy9sYXRlc3Qvbm9zZS5odG1sPmBfIHRlc3Qgc3VpdGVzIG91dCBvZiB0
aGUgYm94OworCistIFB5dGhvbjIuNissIFB5dGhvbjMuMissIFB5UHktMi4zLCBKeXRob24tMi41
ICh1bnRlc3RlZCk7CisKKy0gUmljaCBwbHVnaW4gYXJjaGl0ZWN0dXJlLCB3aXRoIG92ZXIgMTUw
KyBgZXh0ZXJuYWwgcGx1Z2lucyA8aHR0cDovL3B5dGVzdC5vcmcvbGF0ZXN0L3BsdWdpbnMuaHRt
bCNpbnN0YWxsaW5nLWV4dGVybmFsLXBsdWdpbnMtc2VhcmNoaW5nPmBfIGFuZCB0aHJpdmluZyBj
b21tdW5pdHk7CisKKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCitGb3IgZnVsbCBk
b2N1bWVudGF0aW9uLCBpbmNsdWRpbmcgaW5zdGFsbGF0aW9uLCB0dXRvcmlhbHMgYW5kIFBERiBk
b2N1bWVudHMsIHBsZWFzZSBzZWUgaHR0cDovL3B5dGVzdC5vcmcuCisKKworQnVncy9SZXF1ZXN0
cworLS0tLS0tLS0tLS0tLQorCitQbGVhc2UgdXNlIHRoZSBgR2l0SHViIGlzc3VlIHRyYWNrZXIg
PGh0dHBzOi8vZ2l0aHViLmNvbS9weXRlc3QtZGV2L3B5dGVzdC9pc3N1ZXM+YF8gdG8gc3VibWl0
IGJ1Z3Mgb3IgcmVxdWVzdCBmZWF0dXJlcy4KKworCitDaGFuZ2Vsb2cKKy0tLS0tLS0tLQorCitD
b25zdWx0IHRoZSBgQ2hhbmdlbG9nIDxodHRwOi8vcHl0ZXN0Lm9yZy9sYXRlc3QvY2hhbmdlbG9n
Lmh0bWw+YF8gcGFnZSBmb3IgZml4ZXMgYW5kIGVuaGFuY2VtZW50cyBvZiBlYWNoIHZlcnNpb24u
CisKKworTGljZW5zZQorLS0tLS0tLQorCitDb3B5cmlnaHQgSG9sZ2VyIEtyZWtlbCBhbmQgb3Ro
ZXJzLCAyMDA0LTIwMTYuCisKK0Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgYE1J
VGBfIGxpY2Vuc2UsIHB5dGVzdCBpcyBmcmVlIGFuZCBvcGVuIHNvdXJjZSBzb2Z0d2FyZS4KKwor
Li4gX2BNSVRgOiBodHRwczovL2dpdGh1Yi5jb20vcHl0ZXN0LWRldi9weXRlc3QvYmxvYi9tYXN0
ZXIvTElDRU5TRQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xz
L3B5dGVzdC9fcHl0ZXN0L19faW5pdF9fLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNj
L3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi43MjNmYjllODU1YQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZl
clRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9fX2luaXRfXy5weQpAQCAt
MCwwICsxLDIgQEAKKyMKK19fdmVyc2lvbl9fID0gJzIuOS4xJwpkaWZmIC0tZ2l0IGEvV2ViRHJp
dmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L19hcmdjb21wbGV0ZS5w
eSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9fYXJn
Y29tcGxldGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjk1NTg1
NWE5NjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rv
b2xzL3B5dGVzdC9fcHl0ZXN0L19hcmdjb21wbGV0ZS5weQpAQCAtMCwwICsxLDEwMSBAQAorCisi
IiJhbGxvdyBiYXNoLWNvbXBsZXRpb24gZm9yIGFyZ3BhcnNlIHdpdGggYXJnY29tcGxldGUgaWYg
aW5zdGFsbGVkCituZWVkcyBhcmdjb21wbGV0ZT49MC41LjYgZm9yIHB5dGhvbiAzLjIvMy4zIChv
bGRlciB2ZXJzaW9ucyBmYWlsCit0byBmaW5kIHRoZSBtYWdpYyBzdHJpbmcsIHNvIF9BUkdDT01Q
TEVURSBlbnYuIHZhciBpcyBuZXZlciBzZXQsIGFuZAordGhpcyBkb2VzIG5vdCBuZWVkIHNwZWNp
YWwgY29kZS4KKworYXJnY29tcGxldGUgZG9lcyBub3Qgc3VwcG9ydCBweXRob24gMi41IChhbHRo
b3VnaCB0aGUgY2hhbmdlcyBmb3IgdGhhdAorYXJlIG1pbm9yKS4KKworRnVuY3Rpb24gdHJ5X2Fy
Z2NvbXBsZXRlKHBhcnNlcikgc2hvdWxkIGJlIGNhbGxlZCBkaXJlY3RseSBiZWZvcmUKK3RoZSBj
YWxsIHRvIEFyZ3VtZW50UGFyc2VyLnBhcnNlX2FyZ3MoKS4KKworVGhlIGZpbGVzY29tcGxldGVy
IGlzIHdoYXQgeW91IG5vcm1hbGx5IHdvdWxkIHVzZSBvbiB0aGUgcG9zaXRpb25hbAorYXJndW1l
bnRzIHNwZWNpZmljYXRpb24sIGluIG9yZGVyIHRvIGdldCAiZGlybmFtZS8iIGFmdGVyICJkaXJu
PFRBQj4iCitpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0ICJkaXJuYW1lICI6CisKKyAgIG9wdHBhcnNl
ci5hZGRfYXJndW1lbnQoQ29uZmlnLl9maWxlX29yX2RpciwgbmFyZ3M9JyonCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKS5jb21wbGV0ZXI9ZmlsZXNjb21wbGV0ZXIKKworT3RoZXIs
IGFwcGxpY2F0aW9uIHNwZWNpZmljLCBjb21wbGV0ZXJzIHNob3VsZCBnbyBpbiB0aGUgZmlsZQor
ZG9pbmcgdGhlIGFkZF9hcmd1bWVudCBjYWxscyBhcyB0aGV5IG5lZWQgdG8gYmUgc3BlY2lmaWVk
IGFzIC5jb21wbGV0ZXIKK2F0dHJpYnV0ZXMgYXMgd2VsbC4gKElmIGFyZ2NvbXBsZXRlIGlzIG5v
dCBpbnN0YWxsZWQsIHRoZSBmdW5jdGlvbiB0aGUKK2F0dHJpYnV0ZSBwb2ludHMgdG8gd2lsbCBu
b3QgYmUgdXNlZCkuCisKK1NQRUVEVVAKKz09PT09PT0KK1RoZSBnZW5lcmljIGFyZ2NvbXBsZXRl
IHNjcmlwdCBmb3IgYmFzaC1jb21wbGV0aW9uCisoL2V0Yy9iYXNoX2NvbXBsZXRpb24uZC9weXRo
b24tYXJnY29tcGxldGUuc2ggKQordXNlcyBhIHB5dGhvbiBwcm9ncmFtIHRvIGRldGVybWluZSBz
dGFydHVwIHNjcmlwdCBnZW5lcmF0ZWQgYnkgcGlwLgorWW91IGNhbiBzcGVlZCB1cCBjb21wbGV0
aW9uIHNvbWV3aGF0IGJ5IGNoYW5naW5nIHRoaXMgc2NyaXB0IHRvIGluY2x1ZGUKKyAgIyBQWVRI
T05fQVJHQ09NUExFVEVfT0sKK3NvIHRoZSB0aGUgcHl0aG9uLWFyZ2NvbXBsZXRlLWNoZWNrLWVh
c3ktaW5zdGFsbC1zY3JpcHQgZG9lcyBub3QKK25lZWQgdG8gYmUgY2FsbGVkIHRvIGZpbmQgdGhl
IGVudHJ5IHBvaW50IG9mIHRoZSBjb2RlIGFuZCBzZWUgaWYgdGhhdCBpcworbWFya2VkICB3aXRo
IFBZVEhPTl9BUkdDT01QTEVURV9PSworCitJTlNUQUxML0RFQlVHR0lORworPT09PT09PT09PT09
PT09PT0KK1RvIGluY2x1ZGUgdGhpcyBzdXBwb3J0IGluIGFub3RoZXIgYXBwbGljYXRpb24gdGhh
dCBoYXMgc2V0dXAucHkgZ2VuZXJhdGVkCitzY3JpcHRzOgorLSBhZGQgdGhlIGxpbmU6CisgICAg
IyBQWVRIT05fQVJHQ09NUExFVEVfT0sKKyAgbmVhciB0aGUgdG9wIG9mIHRoZSBtYWluIHB5dGhv
biBlbnRyeSBwb2ludAorLSBpbmNsdWRlIGluIHRoZSBmaWxlIGNhbGxpbmcgcGFyc2VfYXJncygp
OgorICAgIGZyb20gX2FyZ2NvbXBsZXRlIGltcG9ydCB0cnlfYXJnY29tcGxldGUsIGZpbGVzY29t
cGxldGVyCisgICAsIGNhbGwgdHJ5X2FyZ2NvbXBsZXRlIGp1c3QgYmVmb3JlIHBhcnNlX2FyZ3Mo
KSwgYW5kIG9wdGlvbmFsbHkgYWRkCisgICBmaWxlc2NvbXBsZXRlciB0byB0aGUgcG9zaXRpb25h
bCBhcmd1bWVudHMnIGFkZF9hcmd1bWVudCgpCitJZiB0aGluZ3MgZG8gbm90IHdvcmsgcmlnaHQg
YXdheToKKy0gc3dpdGNoIG9uIGFyZ2NvbXBsZXRlIGRlYnVnZ2luZyB3aXRoIChhbHNvIGhlbHBm
dWwgd2hlbiBkb2luZyBjdXN0b20KKyAgY29tcGxldGVycyk6CisgICAgZXhwb3J0IF9BUkNfREVC
VUc9MQorLSBydW46CisgICAgcHl0aG9uLWFyZ2NvbXBsZXRlLWNoZWNrLWVhc3ktaW5zdGFsbC1z
Y3JpcHQgJCh3aGljaCBhcHBuYW1lKQorICAgIGVjaG8gJD8KKyAgd2lsbCBlY2hvIDAgaWYgdGhl
IG1hZ2ljIGxpbmUgaGFzIGJlZW4gZm91bmQsIDEgaWYgbm90CistIHNvbWV0aW1lcyBpdCBoZWxw
cyB0byBmaW5kIGVhcmx5IG9uIGVycm9ycyB1c2luZzoKKyAgICBfQVJHQ09NUExFVEU9MSBfQVJD
X0RFQlVHPTEgYXBwbmFtZQorICB3aGljaCBzaG91bGQgdGhyb3cgYSBLZXlFcnJvcjogJ0NPTVBM
SU5FJyAod2hpY2ggaXMgcHJvcGVybHkgc2V0IGJ5IHRoZQorICBnbG9iYWwgYXJnY29tcGxldGUg
c2NyaXB0KS4KKyIiIgorCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2Zyb20gZ2xvYiBpbXBvcnQg
Z2xvYgorCitjbGFzcyBGYXN0RmlsZXNDb21wbGV0ZXI6CisgICAgJ0Zhc3QgZmlsZSBjb21wbGV0
ZXIgY2xhc3MnCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRpcmVjdG9yaWVzPVRydWUpOgorICAg
ICAgICBzZWxmLmRpcmVjdG9yaWVzID0gZGlyZWN0b3JpZXMKKworICAgIGRlZiBfX2NhbGxfXyhz
ZWxmLCBwcmVmaXgsICoqa3dhcmdzKToKKyAgICAgICAgIiIib25seSBjYWxsZWQgb24gbm9uIG9w
dGlvbiBjb21wbGV0aW9ucyIiIgorICAgICAgICBpZiBvcy5wYXRoLnNlcCBpbiBwcmVmaXhbMTpd
OiAjCisgICAgICAgICAgICBwcmVmaXhfZGlyID0gbGVuKG9zLnBhdGguZGlybmFtZShwcmVmaXgp
ICsgb3MucGF0aC5zZXApCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmVmaXhfZGlyID0g
MAorICAgICAgICBjb21wbGV0aW9uID0gW10KKyAgICAgICAgZ2xvYmJlZCA9IFtdCisgICAgICAg
IGlmICcqJyBub3QgaW4gcHJlZml4IGFuZCAnPycgbm90IGluIHByZWZpeDoKKyAgICAgICAgICAg
IGlmIHByZWZpeFstMV0gPT0gb3MucGF0aC5zZXA6ICAjIHdlIGFyZSBvbiB1bml4LCBvdGhlcndp
c2Ugbm8gYmFzaAorICAgICAgICAgICAgICAgIGdsb2JiZWQuZXh0ZW5kKGdsb2IocHJlZml4ICsg
Jy4qJykpCisgICAgICAgICAgICBwcmVmaXggKz0gJyonCisgICAgICAgIGdsb2JiZWQuZXh0ZW5k
KGdsb2IocHJlZml4KSkKKyAgICAgICAgZm9yIHggaW4gc29ydGVkKGdsb2JiZWQpOgorICAgICAg
ICAgICAgaWYgb3MucGF0aC5pc2Rpcih4KToKKyAgICAgICAgICAgICAgICB4ICs9ICcvJworICAg
ICAgICAgICAgIyBhcHBlbmQgc3RyaXBwaW5nIHRoZSBwcmVmaXggKGxpa2UgYmFzaCwgbm90IGxp
a2UgY29tcGdlbikKKyAgICAgICAgICAgIGNvbXBsZXRpb24uYXBwZW5kKHhbcHJlZml4X2Rpcjpd
KQorICAgICAgICByZXR1cm4gY29tcGxldGlvbgorCitpZiBvcy5lbnZpcm9uLmdldCgnX0FSR0NP
TVBMRVRFJyk6CisgICAgdHJ5OgorICAgICAgICBpbXBvcnQgYXJnY29tcGxldGUuY29tcGxldGVy
cworICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgc3lzLmV4aXQoLTEpCisgICAgZmls
ZXNjb21wbGV0ZXIgPSBGYXN0RmlsZXNDb21wbGV0ZXIoKQorCisgICAgZGVmIHRyeV9hcmdjb21w
bGV0ZShwYXJzZXIpOgorICAgICAgICBhcmdjb21wbGV0ZS5hdXRvY29tcGxldGUocGFyc2VyKQor
ZWxzZToKKyAgICBkZWYgdHJ5X2FyZ2NvbXBsZXRlKHBhcnNlcik6IHBhc3MKKyAgICBmaWxlc2Nv
bXBsZXRlciA9IE5vbmUKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90
b29scy9weXRlc3QvX3B5dGVzdC9fY29kZS9fX2luaXRfXy5weSBiL1dlYkRyaXZlclRlc3RzL2lt
cG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9fY29kZS9fX2luaXRfXy5weQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYzA0NmI5NzE2Y2EKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3Qv
X2NvZGUvX19pbml0X18ucHkKQEAgLTAsMCArMSwxMiBAQAorIiIiIHB5dGhvbiBpbnNwZWN0aW9u
L2NvZGUgZ2VuZXJhdGlvbiBBUEkgIiIiCitmcm9tIC5jb2RlIGltcG9ydCBDb2RlICAjIG5vcWEK
K2Zyb20gLmNvZGUgaW1wb3J0IEV4Y2VwdGlvbkluZm8gICMgbm9xYQorZnJvbSAuY29kZSBpbXBv
cnQgRnJhbWUgICMgbm9xYQorZnJvbSAuY29kZSBpbXBvcnQgVHJhY2ViYWNrICAjIG5vcWEKK2Zy
b20gLmNvZGUgaW1wb3J0IGdldHJhd2NvZGUgICMgbm9xYQorZnJvbSAuY29kZSBpbXBvcnQgcGF0
Y2hfYnVpbHRpbnMgICMgbm9xYQorZnJvbSAuY29kZSBpbXBvcnQgdW5wYXRjaF9idWlsdGlucyAg
IyBub3FhCitmcm9tIC5zb3VyY2UgaW1wb3J0IFNvdXJjZSAgIyBub3FhCitmcm9tIC5zb3VyY2Ug
aW1wb3J0IGNvbXBpbGVfIGFzIGNvbXBpbGUgICMgbm9xYQorZnJvbSAuc291cmNlIGltcG9ydCBn
ZXRmc2xpbmVubyAgIyBub3FhCisKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVk
L3czYy90b29scy9weXRlc3QvX3B5dGVzdC9fY29kZS9fcHkydHJhY2ViYWNrLnB5IGIvV2ViRHJp
dmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L19jb2RlL19weTJ0cmFj
ZWJhY2sucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmE4MzBkOTg5
OWFlCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xz
L3B5dGVzdC9fcHl0ZXN0L19jb2RlL19weTJ0cmFjZWJhY2sucHkKQEAgLTAsMCArMSw4MSBAQAor
IyBjb3BpZWQgZnJvbSBweXRob24tMi43LjMncyB0cmFjZWJhY2sucHkKKyMgQ0hBTkdFUzoKKyMg
LSBzb21lX3N0ciBpcyByZXBsYWNlZCwgdHJ5aW5nIHRvIGNyZWF0ZSB1bmljb2RlIHN0cmluZ3MK
KyMKK2ltcG9ydCB0eXBlcworCitkZWYgZm9ybWF0X2V4Y2VwdGlvbl9vbmx5KGV0eXBlLCB2YWx1
ZSk6CisgICAgIiIiRm9ybWF0IHRoZSBleGNlcHRpb24gcGFydCBvZiBhIHRyYWNlYmFjay4KKwor
ICAgIFRoZSBhcmd1bWVudHMgYXJlIHRoZSBleGNlcHRpb24gdHlwZSBhbmQgdmFsdWUgc3VjaCBh
cyBnaXZlbiBieQorICAgIHN5cy5sYXN0X3R5cGUgYW5kIHN5cy5sYXN0X3ZhbHVlLiBUaGUgcmV0
dXJuIHZhbHVlIGlzIGEgbGlzdCBvZgorICAgIHN0cmluZ3MsIGVhY2ggZW5kaW5nIGluIGEgbmV3
bGluZS4KKworICAgIE5vcm1hbGx5LCB0aGUgbGlzdCBjb250YWlucyBhIHNpbmdsZSBzdHJpbmc7
IGhvd2V2ZXIsIGZvcgorICAgIFN5bnRheEVycm9yIGV4Y2VwdGlvbnMsIGl0IGNvbnRhaW5zIHNl
dmVyYWwgbGluZXMgdGhhdCAod2hlbgorICAgIHByaW50ZWQpIGRpc3BsYXkgZGV0YWlsZWQgaW5m
b3JtYXRpb24gYWJvdXQgd2hlcmUgdGhlIHN5bnRheAorICAgIGVycm9yIG9jY3VycmVkLgorCisg
ICAgVGhlIG1lc3NhZ2UgaW5kaWNhdGluZyB3aGljaCBleGNlcHRpb24gb2NjdXJyZWQgaXMgYWx3
YXlzIHRoZSBsYXN0CisgICAgc3RyaW5nIGluIHRoZSBsaXN0LgorCisgICAgIiIiCisKKyAgICAj
IEFuIGluc3RhbmNlIHNob3VsZCBub3QgaGF2ZSBhIG1lYW5pbmdmdWwgdmFsdWUgcGFyYW1ldGVy
LCBidXQKKyAgICAjIHNvbWV0aW1lcyBkb2VzLCBwYXJ0aWN1bGFybHkgZm9yIHN0cmluZyBleGNl
cHRpb25zLCBzdWNoIGFzCisgICAgIyA+Pj4gcmFpc2Ugc3RyaW5nMSwgc3RyaW5nMiAgIyBkZXBy
ZWNhdGVkCisgICAgIworICAgICMgQ2xlYXIgdGhlc2Ugb3V0IGZpcnN0IGJlY2F1c2UgaXNzdWJ0
eXBlKHN0cmluZzEsIFN5bnRheEVycm9yKQorICAgICMgd291bGQgdGhyb3cgYW5vdGhlciBleGNl
cHRpb24gYW5kIG1hc2sgdGhlIG9yaWdpbmFsIHByb2JsZW0uCisgICAgaWYgKGlzaW5zdGFuY2Uo
ZXR5cGUsIEJhc2VFeGNlcHRpb24pIG9yCisgICAgICAgIGlzaW5zdGFuY2UoZXR5cGUsIHR5cGVz
Lkluc3RhbmNlVHlwZSkgb3IKKyAgICAgICAgZXR5cGUgaXMgTm9uZSBvciB0eXBlKGV0eXBlKSBp
cyBzdHIpOgorICAgICAgICByZXR1cm4gW19mb3JtYXRfZmluYWxfZXhjX2xpbmUoZXR5cGUsIHZh
bHVlKV0KKworICAgIHN0eXBlID0gZXR5cGUuX19uYW1lX18KKworICAgIGlmIG5vdCBpc3N1YmNs
YXNzKGV0eXBlLCBTeW50YXhFcnJvcik6CisgICAgICAgIHJldHVybiBbX2Zvcm1hdF9maW5hbF9l
eGNfbGluZShzdHlwZSwgdmFsdWUpXQorCisgICAgIyBJdCB3YXMgYSBzeW50YXggZXJyb3I7IHNo
b3cgZXhhY3RseSB3aGVyZSB0aGUgcHJvYmxlbSB3YXMgZm91bmQuCisgICAgbGluZXMgPSBbXQor
ICAgIHRyeToKKyAgICAgICAgbXNnLCAoZmlsZW5hbWUsIGxpbmVubywgb2Zmc2V0LCBiYWRsaW5l
KSA9IHZhbHVlLmFyZ3MKKyAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICBwYXNzCisgICAg
ZWxzZToKKyAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZSBvciAiPHN0cmluZz4iCisgICAgICAg
IGxpbmVzLmFwcGVuZCgnICBGaWxlICIlcyIsIGxpbmUgJWRcbicgJSAoZmlsZW5hbWUsIGxpbmVu
bykpCisgICAgICAgIGlmIGJhZGxpbmUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBpc2lu
c3RhbmNlKGJhZGxpbmUsIGJ5dGVzKTogICMgcHl0aG9uIDIgb25seQorICAgICAgICAgICAgICAg
IGJhZGxpbmUgPSBiYWRsaW5lLmRlY29kZSgndXRmLTgnLCAncmVwbGFjZScpCisgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQodScgICAgJXNcbicgJSBiYWRsaW5lLnN0cmlwKCkpCisgICAgICAgICAg
ICBpZiBvZmZzZXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgY2FyZXRzcGFjZSA9IGJh
ZGxpbmUucnN0cmlwKCdcbicpWzpvZmZzZXRdLmxzdHJpcCgpCisgICAgICAgICAgICAgICAgIyBu
b24tc3BhY2Ugd2hpdGVzcGFjZSAobGlrZXMgdGFicykgbXVzdCBiZSBrZXB0IGZvciBhbGlnbm1l
bnQKKyAgICAgICAgICAgICAgICBjYXJldHNwYWNlID0gKChjLmlzc3BhY2UoKSBhbmQgYyBvciAn
ICcpIGZvciBjIGluIGNhcmV0c3BhY2UpCisgICAgICAgICAgICAgICAgIyBvbmx5IHRocmVlIHNw
YWNlcyB0byBhY2NvdW50IGZvciBvZmZzZXQxID09IHBvcyAwCisgICAgICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKCcgICAlc15cbicgJSAnJy5qb2luKGNhcmV0c3BhY2UpKQorICAgICAgICB2YWx1
ZSA9IG1zZworCisgICAgbGluZXMuYXBwZW5kKF9mb3JtYXRfZmluYWxfZXhjX2xpbmUoc3R5cGUs
IHZhbHVlKSkKKyAgICByZXR1cm4gbGluZXMKKworZGVmIF9mb3JtYXRfZmluYWxfZXhjX2xpbmUo
ZXR5cGUsIHZhbHVlKToKKyAgICAiIiJSZXR1cm4gYSBsaXN0IG9mIGEgc2luZ2xlIGxpbmUgLS0g
bm9ybWFsIGNhc2UgZm9yIGZvcm1hdF9leGNlcHRpb25fb25seSIiIgorICAgIHZhbHVlc3RyID0g
X3NvbWVfc3RyKHZhbHVlKQorICAgIGlmIHZhbHVlIGlzIE5vbmUgb3Igbm90IHZhbHVlc3RyOgor
ICAgICAgICBsaW5lID0gIiVzXG4iICUgZXR5cGUKKyAgICBlbHNlOgorICAgICAgICBsaW5lID0g
IiVzOiAlc1xuIiAlIChldHlwZSwgdmFsdWVzdHIpCisgICAgcmV0dXJuIGxpbmUKKworZGVmIF9z
b21lX3N0cih2YWx1ZSk6CisgICAgdHJ5OgorICAgICAgICByZXR1cm4gdW5pY29kZSh2YWx1ZSkK
KyAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4g
c3RyKHZhbHVlKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgcGFzcwor
ICAgIHJldHVybiAnPHVucHJpbnRhYmxlICVzIG9iamVjdD4nICUgdHlwZSh2YWx1ZSkuX19uYW1l
X18KZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3Qv
X3B5dGVzdC9fY29kZS9jb2RlLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xz
L3B5dGVzdC9fcHl0ZXN0L19jb2RlL2NvZGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLmJjNjhhYWM1NTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVz
dHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L19jb2RlL2NvZGUucHkKQEAgLTAs
MCArMSw3OTUgQEAKK2ltcG9ydCBzeXMKK2Zyb20gaW5zcGVjdCBpbXBvcnQgQ09fVkFSQVJHUywg
Q09fVkFSS0VZV09SRFMKKworaW1wb3J0IHB5CisKK2J1aWx0aW5fcmVwciA9IHJlcHIKKworcmVw
cmxpYiA9IHB5LmJ1aWx0aW4uX3RyeWltcG9ydCgncmVwcicsICdyZXBybGliJykKKworaWYgc3lz
LnZlcnNpb25faW5mb1swXSA+PSAzOgorICAgIGZyb20gdHJhY2ViYWNrIGltcG9ydCBmb3JtYXRf
ZXhjZXB0aW9uX29ubHkKK2Vsc2U6CisgICAgZnJvbSAuX3B5MnRyYWNlYmFjayBpbXBvcnQgZm9y
bWF0X2V4Y2VwdGlvbl9vbmx5CisKK2NsYXNzIENvZGUob2JqZWN0KToKKyAgICAiIiIgd3JhcHBl
ciBhcm91bmQgUHl0aG9uIGNvZGUgb2JqZWN0cyAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
cmF3Y29kZSk6CisgICAgICAgIGlmIG5vdCBoYXNhdHRyKHJhd2NvZGUsICJjb19maWxlbmFtZSIp
OgorICAgICAgICAgICAgcmF3Y29kZSA9IGdldHJhd2NvZGUocmF3Y29kZSkKKyAgICAgICAgdHJ5
OgorICAgICAgICAgICAgc2VsZi5maWxlbmFtZSA9IHJhd2NvZGUuY29fZmlsZW5hbWUKKyAgICAg
ICAgICAgIHNlbGYuZmlyc3RsaW5lbm8gPSByYXdjb2RlLmNvX2ZpcnN0bGluZW5vIC0gMQorICAg
ICAgICAgICAgc2VsZi5uYW1lID0gcmF3Y29kZS5jb19uYW1lCisgICAgICAgIGV4Y2VwdCBBdHRy
aWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigibm90IGEgY29kZSBvYmpl
Y3Q6ICVyIiAlKHJhd2NvZGUsKSkKKyAgICAgICAgc2VsZi5yYXcgPSByYXdjb2RlCisKKyAgICBk
ZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYucmF3ID09IG90aGVy
LnJhdworCisgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBub3Qg
c2VsZiA9PSBvdGhlcgorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHBhdGgoc2VsZik6CisgICAg
ICAgICIiIiByZXR1cm4gYSBwYXRoIG9iamVjdCBwb2ludGluZyB0byBzb3VyY2UgY29kZSAobm90
ZSB0aGF0IGl0CisgICAgICAgIG1pZ2h0IG5vdCBwb2ludCB0byBhbiBhY3R1YWxseSBleGlzdGlu
ZyBmaWxlKS4gIiIiCisgICAgICAgIHAgPSBweS5wYXRoLmxvY2FsKHNlbGYucmF3LmNvX2ZpbGVu
YW1lKQorICAgICAgICAjIG1heWJlIGRvbid0IHRyeSB0aGlzIGNoZWNraW5nCisgICAgICAgIGlm
IG5vdCBwLmNoZWNrKCk6CisgICAgICAgICAgICAjIFhYWCBtYXliZSB0cnkgaGFyZGVyIGxpa2Ug
dGhlIHdlaXJkIGxvZ2ljCisgICAgICAgICAgICAjIGluIHRoZSBzdGFuZGFyZCBsaWIgW2xpbmVj
YWNoZS51cGRhdGVjYWNoZV0gZG9lcz8KKyAgICAgICAgICAgIHAgPSBzZWxmLnJhdy5jb19maWxl
bmFtZQorICAgICAgICByZXR1cm4gcAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGZ1bGxzb3Vy
Y2Uoc2VsZik6CisgICAgICAgICIiIiByZXR1cm4gYSBfcHl0ZXN0Ll9jb2RlLlNvdXJjZSBvYmpl
Y3QgZm9yIHRoZSBmdWxsIHNvdXJjZSBmaWxlIG9mIHRoZSBjb2RlCisgICAgICAgICIiIgorICAg
ICAgICBmcm9tIF9weXRlc3QuX2NvZGUgaW1wb3J0IHNvdXJjZQorICAgICAgICBmdWxsLCBfID0g
c291cmNlLmZpbmRzb3VyY2Uoc2VsZi5yYXcpCisgICAgICAgIHJldHVybiBmdWxsCisKKyAgICBk
ZWYgc291cmNlKHNlbGYpOgorICAgICAgICAiIiIgcmV0dXJuIGEgX3B5dGVzdC5fY29kZS5Tb3Vy
Y2Ugb2JqZWN0IGZvciB0aGUgY29kZSBvYmplY3QncyBzb3VyY2Ugb25seQorICAgICAgICAiIiIK
KyAgICAgICAgIyByZXR1cm4gc291cmNlIG9ubHkgZm9yIHRoYXQgcGFydCBvZiBjb2RlCisgICAg
ICAgIGltcG9ydCBfcHl0ZXN0Ll9jb2RlCisgICAgICAgIHJldHVybiBfcHl0ZXN0Ll9jb2RlLlNv
dXJjZShzZWxmLnJhdykKKworICAgIGRlZiBnZXRhcmdzKHNlbGYsIHZhcj1GYWxzZSk6CisgICAg
ICAgICIiIiByZXR1cm4gYSB0dXBsZSB3aXRoIHRoZSBhcmd1bWVudCBuYW1lcyBmb3IgdGhlIGNv
ZGUgb2JqZWN0CisKKyAgICAgICAgICAgIGlmICd2YXInIGlzIHNldCBUcnVlIGFsc28gcmV0dXJu
IHRoZSBuYW1lcyBvZiB0aGUgdmFyaWFibGUgYW5kCisgICAgICAgICAgICBrZXl3b3JkIGFyZ3Vt
ZW50cyB3aGVuIHByZXNlbnQKKyAgICAgICAgIiIiCisgICAgICAgICMgaGFuZGZ1bGwgc2hvcnRj
dXQgZm9yIGdldHRpbmcgYXJncworICAgICAgICByYXcgPSBzZWxmLnJhdworICAgICAgICBhcmdj
b3VudCA9IHJhdy5jb19hcmdjb3VudAorICAgICAgICBpZiB2YXI6CisgICAgICAgICAgICBhcmdj
b3VudCArPSByYXcuY29fZmxhZ3MgJiBDT19WQVJBUkdTCisgICAgICAgICAgICBhcmdjb3VudCAr
PSByYXcuY29fZmxhZ3MgJiBDT19WQVJLRVlXT1JEUworICAgICAgICByZXR1cm4gcmF3LmNvX3Zh
cm5hbWVzWzphcmdjb3VudF0KKworY2xhc3MgRnJhbWUob2JqZWN0KToKKyAgICAiIiJXcmFwcGVy
IGFyb3VuZCBhIFB5dGhvbiBmcmFtZSBob2xkaW5nIGZfbG9jYWxzIGFuZCBmX2dsb2JhbHMKKyAg
ICBpbiB3aGljaCBleHByZXNzaW9ucyBjYW4gYmUgZXZhbHVhdGVkLiIiIgorCisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIGZyYW1lKToKKyAgICAgICAgc2VsZi5saW5lbm8gPSBmcmFtZS5mX2xpbmVu
byAtIDEKKyAgICAgICAgc2VsZi5mX2dsb2JhbHMgPSBmcmFtZS5mX2dsb2JhbHMKKyAgICAgICAg
c2VsZi5mX2xvY2FscyA9IGZyYW1lLmZfbG9jYWxzCisgICAgICAgIHNlbGYucmF3ID0gZnJhbWUK
KyAgICAgICAgc2VsZi5jb2RlID0gQ29kZShmcmFtZS5mX2NvZGUpCisKKyAgICBAcHJvcGVydHkK
KyAgICBkZWYgc3RhdGVtZW50KHNlbGYpOgorICAgICAgICAiIiIgc3RhdGVtZW50IHRoaXMgZnJh
bWUgaXMgYXQgIiIiCisgICAgICAgIGltcG9ydCBfcHl0ZXN0Ll9jb2RlCisgICAgICAgIGlmIHNl
bGYuY29kZS5mdWxsc291cmNlIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gX3B5dGVzdC5f
Y29kZS5Tb3VyY2UoIiIpCisgICAgICAgIHJldHVybiBzZWxmLmNvZGUuZnVsbHNvdXJjZS5nZXRz
dGF0ZW1lbnQoc2VsZi5saW5lbm8pCisKKyAgICBkZWYgZXZhbChzZWxmLCBjb2RlLCAqKnZhcnMp
OgorICAgICAgICAiIiIgZXZhbHVhdGUgJ2NvZGUnIGluIHRoZSBmcmFtZQorCisgICAgICAgICAg
ICAndmFycycgYXJlIG9wdGlvbmFsIGFkZGl0aW9uYWwgbG9jYWwgdmFyaWFibGVzCisKKyAgICAg
ICAgICAgIHJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgZXZhbHVhdGlvbgorICAgICAgICAiIiIK
KyAgICAgICAgZl9sb2NhbHMgPSBzZWxmLmZfbG9jYWxzLmNvcHkoKQorICAgICAgICBmX2xvY2Fs
cy51cGRhdGUodmFycykKKyAgICAgICAgcmV0dXJuIGV2YWwoY29kZSwgc2VsZi5mX2dsb2JhbHMs
IGZfbG9jYWxzKQorCisgICAgZGVmIGV4ZWNfKHNlbGYsIGNvZGUsICoqdmFycyk6CisgICAgICAg
ICIiIiBleGVjICdjb2RlJyBpbiB0aGUgZnJhbWUKKworICAgICAgICAgICAgJ3ZhcnMnIGFyZSBv
cHRpb25hOyBhZGRpdGlvbmFsIGxvY2FsIHZhcmlhYmxlcworICAgICAgICAiIiIKKyAgICAgICAg
Zl9sb2NhbHMgPSBzZWxmLmZfbG9jYWxzLmNvcHkoKQorICAgICAgICBmX2xvY2Fscy51cGRhdGUo
dmFycykKKyAgICAgICAgcHkuYnVpbHRpbi5leGVjXyhjb2RlLCBzZWxmLmZfZ2xvYmFscywgZl9s
b2NhbHMgKQorCisgICAgZGVmIHJlcHIoc2VsZiwgb2JqZWN0KToKKyAgICAgICAgIiIiIHJldHVy
biBhICdzYWZlJyAobm9uLXJlY3Vyc2l2ZSwgb25lLWxpbmUpIHN0cmluZyByZXByIGZvciAnb2Jq
ZWN0JworICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHB5LmlvLnNhZmVyZXByKG9iamVjdCkK
KworICAgIGRlZiBpc190cnVlKHNlbGYsIG9iamVjdCk6CisgICAgICAgIHJldHVybiBvYmplY3QK
KworICAgIGRlZiBnZXRhcmdzKHNlbGYsIHZhcj1GYWxzZSk6CisgICAgICAgICIiIiByZXR1cm4g
YSBsaXN0IG9mIHR1cGxlcyAobmFtZSwgdmFsdWUpIGZvciBhbGwgYXJndW1lbnRzCisKKyAgICAg
ICAgICAgIGlmICd2YXInIGlzIHNldCBUcnVlIGFsc28gaW5jbHVkZSB0aGUgdmFyaWFibGUgYW5k
IGtleXdvcmQKKyAgICAgICAgICAgIGFyZ3VtZW50cyB3aGVuIHByZXNlbnQKKyAgICAgICAgIiIi
CisgICAgICAgIHJldHZhbCA9IFtdCisgICAgICAgIGZvciBhcmcgaW4gc2VsZi5jb2RlLmdldGFy
Z3ModmFyKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXR2YWwuYXBwZW5k
KChhcmcsIHNlbGYuZl9sb2NhbHNbYXJnXSkpCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6
CisgICAgICAgICAgICAgICAgcGFzcyAgICAgIyB0aGlzIGNhbiBvY2N1ciB3aGVuIHVzaW5nIFBz
eWNvCisgICAgICAgIHJldHVybiByZXR2YWwKKworY2xhc3MgVHJhY2ViYWNrRW50cnkob2JqZWN0
KToKKyAgICAiIiIgYSBzaW5nbGUgZW50cnkgaW4gYSB0cmFjZWJhY2sgIiIiCisKKyAgICBfcmVw
cl9zdHlsZSA9IE5vbmUKKyAgICBleHByaW5mbyA9IE5vbmUKKworICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCByYXdlbnRyeSk6CisgICAgICAgIHNlbGYuX3Jhd2VudHJ5ID0gcmF3ZW50cnkKKyAgICAg
ICAgc2VsZi5saW5lbm8gPSByYXdlbnRyeS50Yl9saW5lbm8gLSAxCisKKyAgICBkZWYgc2V0X3Jl
cHJfc3R5bGUoc2VsZiwgbW9kZSk6CisgICAgICAgIGFzc2VydCBtb2RlIGluICgic2hvcnQiLCAi
bG9uZyIpCisgICAgICAgIHNlbGYuX3JlcHJfc3R5bGUgPSBtb2RlCisKKyAgICBAcHJvcGVydHkK
KyAgICBkZWYgZnJhbWUoc2VsZik6CisgICAgICAgIGltcG9ydCBfcHl0ZXN0Ll9jb2RlCisgICAg
ICAgIHJldHVybiBfcHl0ZXN0Ll9jb2RlLkZyYW1lKHNlbGYuX3Jhd2VudHJ5LnRiX2ZyYW1lKQor
CisgICAgQHByb3BlcnR5CisgICAgZGVmIHJlbGxpbmUoc2VsZik6CisgICAgICAgIHJldHVybiBz
ZWxmLmxpbmVubyAtIHNlbGYuZnJhbWUuY29kZS5maXJzdGxpbmVubworCisgICAgZGVmIF9fcmVw
cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIjxUcmFjZWJhY2tFbnRyeSAlczolZD4iICUoc2Vs
Zi5mcmFtZS5jb2RlLnBhdGgsIHNlbGYubGluZW5vKzEpCisKKyAgICBAcHJvcGVydHkKKyAgICBk
ZWYgc3RhdGVtZW50KHNlbGYpOgorICAgICAgICAiIiIgX3B5dGVzdC5fY29kZS5Tb3VyY2Ugb2Jq
ZWN0IGZvciB0aGUgY3VycmVudCBzdGF0ZW1lbnQgIiIiCisgICAgICAgIHNvdXJjZSA9IHNlbGYu
ZnJhbWUuY29kZS5mdWxsc291cmNlCisgICAgICAgIHJldHVybiBzb3VyY2UuZ2V0c3RhdGVtZW50
KHNlbGYubGluZW5vKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHBhdGgoc2VsZik6CisgICAg
ICAgICIiIiBwYXRoIHRvIHRoZSBzb3VyY2UgY29kZSAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYu
ZnJhbWUuY29kZS5wYXRoCisKKyAgICBkZWYgZ2V0bG9jYWxzKHNlbGYpOgorICAgICAgICByZXR1
cm4gc2VsZi5mcmFtZS5mX2xvY2FscworICAgIGxvY2FscyA9IHByb3BlcnR5KGdldGxvY2Fscywg
Tm9uZSwgTm9uZSwgImxvY2FscyBvZiB1bmRlcmxheWluZyBmcmFtZSIpCisKKyAgICBkZWYgcmVp
bnRlcnByZXQoc2VsZik6CisgICAgICAgICIiIlJlaW50ZXJwcmV0IHRoZSBmYWlsaW5nIHN0YXRl
bWVudCBhbmQgcmV0dXJucyBhIGRldGFpbGVkIGluZm9ybWF0aW9uCisgICAgICAgICAgIGFib3V0
IHdoYXQgb3BlcmF0aW9ucyBhcmUgcGVyZm9ybWVkLiIiIgorICAgICAgICBmcm9tIF9weXRlc3Qu
YXNzZXJ0aW9uLnJlaW50ZXJwcmV0IGltcG9ydCByZWludGVycHJldAorICAgICAgICBpZiBzZWxm
LmV4cHJpbmZvIGlzIE5vbmU6CisgICAgICAgICAgICBzb3VyY2UgPSBweS5idWlsdGluLl90b3Rl
eHQoc2VsZi5zdGF0ZW1lbnQpLnN0cmlwKCkKKyAgICAgICAgICAgIHggPSByZWludGVycHJldChz
b3VyY2UsIHNlbGYuZnJhbWUsIHNob3VsZF9mYWlsPVRydWUpCisgICAgICAgICAgICBpZiBub3Qg
cHkuYnVpbHRpbi5faXN0ZXh0KHgpOgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigi
aW50ZXJwcmV0IHJldHVybmVkIG5vbi1zdHJpbmcgJXIiICUgKHgsKSkKKyAgICAgICAgICAgIHNl
bGYuZXhwcmluZm8gPSB4CisgICAgICAgIHJldHVybiBzZWxmLmV4cHJpbmZvCisKKyAgICBkZWYg
Z2V0Zmlyc3RsaW5lc291cmNlKHNlbGYpOgorICAgICAgICAjIG9uIEp5dGhvbiB0aGlzIGZpcnN0
bGluZW5vIGNhbiBiZSAtMSBhcHBhcmVudGx5CisgICAgICAgIHJldHVybiBtYXgoc2VsZi5mcmFt
ZS5jb2RlLmZpcnN0bGluZW5vLCAwKQorCisgICAgZGVmIGdldHNvdXJjZShzZWxmLCBhc3RjYWNo
ZT1Ob25lKToKKyAgICAgICAgIiIiIHJldHVybiBmYWlsaW5nIHNvdXJjZSBjb2RlLiAiIiIKKyAg
ICAgICAgIyB3ZSB1c2UgdGhlIHBhc3NlZCBpbiBhc3RjYWNoZSB0byBub3QgcmVwYXJzZSBhc3R0
cmVlcworICAgICAgICAjIHdpdGhpbiBleGNlcHRpb24gaW5mbyBwcmludGluZworICAgICAgICBm
cm9tIF9weXRlc3QuX2NvZGUuc291cmNlIGltcG9ydCBnZXRzdGF0ZW1lbnRyYW5nZV9hc3QKKyAg
ICAgICAgc291cmNlID0gc2VsZi5mcmFtZS5jb2RlLmZ1bGxzb3VyY2UKKyAgICAgICAgaWYgc291
cmNlIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBrZXkgPSBhc3Ru
b2RlID0gTm9uZQorICAgICAgICBpZiBhc3RjYWNoZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAg
IGtleSA9IHNlbGYuZnJhbWUuY29kZS5wYXRoCisgICAgICAgICAgICBpZiBrZXkgaXMgbm90IE5v
bmU6CisgICAgICAgICAgICAgICAgYXN0bm9kZSA9IGFzdGNhY2hlLmdldChrZXksIE5vbmUpCisg
ICAgICAgIHN0YXJ0ID0gc2VsZi5nZXRmaXJzdGxpbmVzb3VyY2UoKQorICAgICAgICB0cnk6Cisg
ICAgICAgICAgICBhc3Rub2RlLCBfLCBlbmQgPSBnZXRzdGF0ZW1lbnRyYW5nZV9hc3Qoc2VsZi5s
aW5lbm8sIHNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhc3Rub2RlPWFzdG5vZGUpCisgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvcjoK
KyAgICAgICAgICAgIGVuZCA9IHNlbGYubGluZW5vICsgMQorICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgaWYga2V5IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGFzdGNhY2hlW2tleV0g
PSBhc3Rub2RlCisgICAgICAgIHJldHVybiBzb3VyY2Vbc3RhcnQ6ZW5kXQorCisgICAgc291cmNl
ID0gcHJvcGVydHkoZ2V0c291cmNlKQorCisgICAgZGVmIGlzaGlkZGVuKHNlbGYpOgorICAgICAg
ICAiIiIgcmV0dXJuIFRydWUgaWYgdGhlIGN1cnJlbnQgZnJhbWUgaGFzIGEgdmFyIF9fdHJhY2Vi
YWNraGlkZV9fCisgICAgICAgICAgICByZXNvbHZpbmcgdG8gVHJ1ZQorCisgICAgICAgICAgICBt
b3N0bHkgZm9yIGludGVybmFsIHVzZQorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgcmV0dXJuIHNlbGYuZnJhbWUuZl9sb2NhbHNbJ19fdHJhY2ViYWNraGlkZV9fJ10KKyAg
ICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAg
IHJldHVybiBzZWxmLmZyYW1lLmZfZ2xvYmFsc1snX190cmFjZWJhY2toaWRlX18nXQorICAgICAg
ICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisg
ICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZuID0gc3Ry
KHNlbGYucGF0aCkKKyAgICAgICAgZXhjZXB0IHB5LmVycm9yLkVycm9yOgorICAgICAgICAgICAg
Zm4gPSAnPz8/JworICAgICAgICBuYW1lID0gc2VsZi5mcmFtZS5jb2RlLm5hbWUKKyAgICAgICAg
dHJ5OgorICAgICAgICAgICAgbGluZSA9IHN0cihzZWxmLnN0YXRlbWVudCkubHN0cmlwKCkKKyAg
ICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgcmFpc2UKKyAgICAg
ICAgZXhjZXB0OgorICAgICAgICAgICAgbGluZSA9ICI/Pz8iCisgICAgICAgIHJldHVybiAiICBG
aWxlICVyOiVkIGluICVzXG4gICVzXG4iICUoZm4sIHNlbGYubGluZW5vKzEsIG5hbWUsIGxpbmUp
CisKKyAgICBkZWYgbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZnJhbWUuY29kZS5y
YXcuY29fbmFtZQorICAgIG5hbWUgPSBwcm9wZXJ0eShuYW1lLCBOb25lLCBOb25lLCAiY29fbmFt
ZSBvZiB1bmRlcmxheWluZyBjb2RlIikKKworY2xhc3MgVHJhY2ViYWNrKGxpc3QpOgorICAgICIi
IiBUcmFjZWJhY2sgb2JqZWN0cyBlbmNhcHN1bGF0ZSBhbmQgb2ZmZXIgaGlnaGVyIGxldmVsCisg
ICAgICAgIGFjY2VzcyB0byBUcmFjZWJhY2sgZW50cmllcy4KKyAgICAiIiIKKyAgICBFbnRyeSA9
IFRyYWNlYmFja0VudHJ5CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRiKToKKyAgICAgICAgIiIi
IGluaXRpYWxpemUgZnJvbSBnaXZlbiBweXRob24gdHJhY2ViYWNrIG9iamVjdC4gIiIiCisgICAg
ICAgIGlmIGhhc2F0dHIodGIsICd0Yl9uZXh0Jyk6CisgICAgICAgICAgICBkZWYgZihjdXIpOgor
ICAgICAgICAgICAgICAgIHdoaWxlIGN1ciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAg
ICAgeWllbGQgc2VsZi5FbnRyeShjdXIpCisgICAgICAgICAgICAgICAgICAgIGN1ciA9IGN1ci50
Yl9uZXh0CisgICAgICAgICAgICBsaXN0Ll9faW5pdF9fKHNlbGYsIGYodGIpKQorICAgICAgICBl
bHNlOgorICAgICAgICAgICAgbGlzdC5fX2luaXRfXyhzZWxmLCB0YikKKworICAgIGRlZiBjdXQo
c2VsZiwgcGF0aD1Ob25lLCBsaW5lbm89Tm9uZSwgZmlyc3RsaW5lbm89Tm9uZSwgZXhjbHVkZXBh
dGg9Tm9uZSk6CisgICAgICAgICIiIiByZXR1cm4gYSBUcmFjZWJhY2sgaW5zdGFuY2Ugd3JhcHBp
bmcgcGFydCBvZiB0aGlzIFRyYWNlYmFjaworCisgICAgICAgICAgICBieSBwcm92ZGluZyBhbnkg
Y29tYmluYXRpb24gb2YgcGF0aCwgbGluZW5vIGFuZCBmaXJzdGxpbmVubywgdGhlCisgICAgICAg
ICAgICBmaXJzdCBmcmFtZSB0byBzdGFydCB0aGUgdG8tYmUtcmV0dXJuZWQgdHJhY2ViYWNrIGlz
IGRldGVybWluZWQKKworICAgICAgICAgICAgdGhpcyBhbGxvd3MgY3V0dGluZyB0aGUgZmlyc3Qg
cGFydCBvZiBhIFRyYWNlYmFjayBpbnN0YW5jZSBlLmcuCisgICAgICAgICAgICBmb3IgZm9ybWF0
dGluZyByZWFzb25zIChyZW1vdmluZyBzb21lIHVuaW50ZXJlc3RpbmcgYml0cyB0aGF0IGRlYWwK
KyAgICAgICAgICAgIHdpdGggaGFuZGxpbmcgb2YgdGhlIGV4Y2VwdGlvbi90cmFjZWJhY2spCisg
ICAgICAgICIiIgorICAgICAgICBmb3IgeCBpbiBzZWxmOgorICAgICAgICAgICAgY29kZSA9IHgu
ZnJhbWUuY29kZQorICAgICAgICAgICAgY29kZXBhdGggPSBjb2RlLnBhdGgKKyAgICAgICAgICAg
IGlmICgocGF0aCBpcyBOb25lIG9yIGNvZGVwYXRoID09IHBhdGgpIGFuZAorICAgICAgICAgICAg
ICAgIChleGNsdWRlcGF0aCBpcyBOb25lIG9yIG5vdCBoYXNhdHRyKGNvZGVwYXRoLCAncmVsdG8n
KSBvcgorICAgICAgICAgICAgICAgICBub3QgY29kZXBhdGgucmVsdG8oZXhjbHVkZXBhdGgpKSBh
bmQKKyAgICAgICAgICAgICAgICAobGluZW5vIGlzIE5vbmUgb3IgeC5saW5lbm8gPT0gbGluZW5v
KSBhbmQKKyAgICAgICAgICAgICAgICAoZmlyc3RsaW5lbm8gaXMgTm9uZSBvciB4LmZyYW1lLmNv
ZGUuZmlyc3RsaW5lbm8gPT0gZmlyc3RsaW5lbm8pKToKKyAgICAgICAgICAgICAgICByZXR1cm4g
VHJhY2ViYWNrKHguX3Jhd2VudHJ5KQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9f
Z2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgIHZhbCA9IHN1cGVyKFRyYWNlYmFjaywgc2Vs
ZikuX19nZXRpdGVtX18oa2V5KQorICAgICAgICBpZiBpc2luc3RhbmNlKGtleSwgdHlwZShzbGlj
ZSgwKSkpOgorICAgICAgICAgICAgdmFsID0gc2VsZi5fX2NsYXNzX18odmFsKQorICAgICAgICBy
ZXR1cm4gdmFsCisKKyAgICBkZWYgZmlsdGVyKHNlbGYsIGZuPWxhbWJkYSB4OiBub3QgeC5pc2hp
ZGRlbigpKToKKyAgICAgICAgIiIiIHJldHVybiBhIFRyYWNlYmFjayBpbnN0YW5jZSB3aXRoIGNl
cnRhaW4gaXRlbXMgcmVtb3ZlZAorCisgICAgICAgICAgICBmbiBpcyBhIGZ1bmN0aW9uIHRoYXQg
Z2V0cyBhIHNpbmdsZSBhcmd1bWVudCwgYSBUcmFjZWJhY2tJdGVtCisgICAgICAgICAgICBpbnN0
YW5jZSwgYW5kIHNob3VsZCByZXR1cm4gVHJ1ZSB3aGVuIHRoZSBpdGVtIHNob3VsZCBiZSBhZGRl
ZAorICAgICAgICAgICAgdG8gdGhlIFRyYWNlYmFjaywgRmFsc2Ugd2hlbiBub3QKKworICAgICAg
ICAgICAgYnkgZGVmYXVsdCB0aGlzIHJlbW92ZXMgYWxsIHRoZSBUcmFjZWJhY2tJdGVtcyB3aGlj
aCBhcmUgaGlkZGVuCisgICAgICAgICAgICAoc2VlIGlzaGlkZGVuKCkgYWJvdmUpCisgICAgICAg
ICIiIgorICAgICAgICByZXR1cm4gVHJhY2ViYWNrKGZpbHRlcihmbiwgc2VsZikpCisKKyAgICBk
ZWYgZ2V0Y3Jhc2hlbnRyeShzZWxmKToKKyAgICAgICAgIiIiIHJldHVybiBsYXN0IG5vbi1oaWRk
ZW4gdHJhY2ViYWNrIGVudHJ5IHRoYXQgbGVhZAorICAgICAgICB0byB0aGUgZXhjZXB0aW9uIG9m
IGEgdHJhY2ViYWNrLgorICAgICAgICAiIiIKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoLTEsIC1s
ZW4oc2VsZiktMSwgLTEpOgorICAgICAgICAgICAgZW50cnkgPSBzZWxmW2ldCisgICAgICAgICAg
ICBpZiBub3QgZW50cnkuaXNoaWRkZW4oKToKKyAgICAgICAgICAgICAgICByZXR1cm4gZW50cnkK
KyAgICAgICAgcmV0dXJuIHNlbGZbLTFdCisKKyAgICBkZWYgcmVjdXJzaW9uaW5kZXgoc2VsZik6
CisgICAgICAgICIiIiByZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBmcmFtZS9UcmFjZWJhY2tJdGVt
IHdoZXJlIHJlY3Vyc2lvbgorICAgICAgICAgICAgb3JpZ2luYXRlcyBpZiBhcHByb3ByaWF0ZSwg
Tm9uZSBpZiBubyByZWN1cnNpb24gb2NjdXJyZWQKKyAgICAgICAgIiIiCisgICAgICAgIGNhY2hl
ID0ge30KKyAgICAgICAgZm9yIGksIGVudHJ5IGluIGVudW1lcmF0ZShzZWxmKToKKyAgICAgICAg
ICAgICMgaWQgZm9yIHRoZSBjb2RlLnJhdyBpcyBuZWVkZWQgdG8gd29yayBhcm91bmQKKyAgICAg
ICAgICAgICMgdGhlIHN0cmFuZ2UgbWV0YXByb2dyYW1taW5nIGluIHRoZSBkZWNvcmF0b3IgbGli
IGZyb20gcHlwaQorICAgICAgICAgICAgIyB3aGljaCBnZW5lcmF0ZXMgY29kZSBvYmplY3RzIHRo
YXQgaGF2ZSBoYXNoL3ZhbHVlIGVxdWFsaXR5CisgICAgICAgICAgICAjWFhYIG5lZWRzIGEgdGVz
dAorICAgICAgICAgICAga2V5ID0gZW50cnkuZnJhbWUuY29kZS5wYXRoLCBpZChlbnRyeS5mcmFt
ZS5jb2RlLnJhdyksIGVudHJ5LmxpbmVubworICAgICAgICAgICAgI3ByaW50ICJjaGVja2luZyBm
b3IgcmVjdXJzaW9uIGF0Iiwga2V5CisgICAgICAgICAgICBsID0gY2FjaGUuc2V0ZGVmYXVsdChr
ZXksIFtdKQorICAgICAgICAgICAgaWYgbDoKKyAgICAgICAgICAgICAgICBmID0gZW50cnkuZnJh
bWUKKyAgICAgICAgICAgICAgICBsb2MgPSBmLmZfbG9jYWxzCisgICAgICAgICAgICAgICAgZm9y
IG90aGVybG9jIGluIGw6CisgICAgICAgICAgICAgICAgICAgIGlmIGYuaXNfdHJ1ZShmLmV2YWwo
Y29fZXF1YWwsCisgICAgICAgICAgICAgICAgICAgICAgICBfX3JlY3Vyc2lvbmNhY2hlX2xvY2Fs
c18xPWxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVjdXJzaW9uY2FjaGVfbG9jYWxz
XzI9b3RoZXJsb2MpKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpCisgICAgICAg
ICAgICBsLmFwcGVuZChlbnRyeS5mcmFtZS5mX2xvY2FscykKKyAgICAgICAgcmV0dXJuIE5vbmUK
KworY29fZXF1YWwgPSBjb21waWxlKCdfX3JlY3Vyc2lvbmNhY2hlX2xvY2Fsc18xID09IF9fcmVj
dXJzaW9uY2FjaGVfbG9jYWxzXzInLAorICAgICAgICAgICAgICAgICAgICc/JywgJ2V2YWwnKQor
CitjbGFzcyBFeGNlcHRpb25JbmZvKG9iamVjdCk6CisgICAgIiIiIHdyYXBzIHN5cy5leGNfaW5m
bygpIG9iamVjdHMgYW5kIG9mZmVycworICAgICAgICBoZWxwIGZvciBuYXZpZ2F0aW5nIHRoZSB0
cmFjZWJhY2suCisgICAgIiIiCisgICAgX3N0cmlwdGV4dCA9ICcnCisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIHR1cD1Ob25lLCBleHByaW5mbz1Ob25lKToKKyAgICAgICAgaW1wb3J0IF9weXRlc3Qu
X2NvZGUKKyAgICAgICAgaWYgdHVwIGlzIE5vbmU6CisgICAgICAgICAgICB0dXAgPSBzeXMuZXhj
X2luZm8oKQorICAgICAgICAgICAgaWYgZXhwcmluZm8gaXMgTm9uZSBhbmQgaXNpbnN0YW5jZSh0
dXBbMV0sIEFzc2VydGlvbkVycm9yKToKKyAgICAgICAgICAgICAgICBleHByaW5mbyA9IGdldGF0
dHIodHVwWzFdLCAnbXNnJywgTm9uZSkKKyAgICAgICAgICAgICAgICBpZiBleHByaW5mbyBpcyBO
b25lOgorICAgICAgICAgICAgICAgICAgICBleHByaW5mbyA9IHN0cih0dXBbMV0pCisgICAgICAg
ICAgICAgICAgaWYgZXhwcmluZm8gYW5kIGV4cHJpbmZvLnN0YXJ0c3dpdGgoJ2Fzc2VydCAnKToK
KyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RyaXB0ZXh0ID0gJ0Fzc2VydGlvbkVycm9yOiAn
CisgICAgICAgIHNlbGYuX2V4Y2luZm8gPSB0dXAKKyAgICAgICAgIzogdGhlIGV4Y2VwdGlvbiBj
bGFzcworICAgICAgICBzZWxmLnR5cGUgPSB0dXBbMF0KKyAgICAgICAgIzogdGhlIGV4Y2VwdGlv
biBpbnN0YW5jZQorICAgICAgICBzZWxmLnZhbHVlID0gdHVwWzFdCisgICAgICAgICM6IHRoZSBl
eGNlcHRpb24gcmF3IHRyYWNlYmFjaworICAgICAgICBzZWxmLnRiID0gdHVwWzJdCisgICAgICAg
ICM6IHRoZSBleGNlcHRpb24gdHlwZSBuYW1lCisgICAgICAgIHNlbGYudHlwZW5hbWUgPSBzZWxm
LnR5cGUuX19uYW1lX18KKyAgICAgICAgIzogdGhlIGV4Y2VwdGlvbiB0cmFjZWJhY2sgKF9weXRl
c3QuX2NvZGUuVHJhY2ViYWNrIGluc3RhbmNlKQorICAgICAgICBzZWxmLnRyYWNlYmFjayA9IF9w
eXRlc3QuX2NvZGUuVHJhY2ViYWNrKHNlbGYudGIpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6
CisgICAgICAgIHJldHVybiAiPEV4Y2VwdGlvbkluZm8gJXMgdGJsZW49JWQ+IiAlIChzZWxmLnR5
cGVuYW1lLCBsZW4oc2VsZi50cmFjZWJhY2spKQorCisgICAgZGVmIGV4Y29ubHkoc2VsZiwgdHJ5
c2hvcnQ9RmFsc2UpOgorICAgICAgICAiIiIgcmV0dXJuIHRoZSBleGNlcHRpb24gYXMgYSBzdHJp
bmcKKworICAgICAgICAgICAgd2hlbiAndHJ5c2hvcnQnIHJlc29sdmVzIHRvIFRydWUsIGFuZCB0
aGUgZXhjZXB0aW9uIGlzIGEKKyAgICAgICAgICAgIF9weXRlc3QuX2NvZGUuX0Fzc2VydGlvbkVy
cm9yLCBvbmx5IHRoZSBhY3R1YWwgZXhjZXB0aW9uIHBhcnQgb2YKKyAgICAgICAgICAgIHRoZSBl
eGNlcHRpb24gcmVwcmVzZW50YXRpb24gaXMgcmV0dXJuZWQgKHNvICdBc3NlcnRpb25FcnJvcjog
JyBpcworICAgICAgICAgICAgcmVtb3ZlZCBmcm9tIHRoZSBiZWdpbm5pbmcpCisgICAgICAgICIi
IgorICAgICAgICBsaW5lcyA9IGZvcm1hdF9leGNlcHRpb25fb25seShzZWxmLnR5cGUsIHNlbGYu
dmFsdWUpCisgICAgICAgIHRleHQgPSAnJy5qb2luKGxpbmVzKQorICAgICAgICB0ZXh0ID0gdGV4
dC5yc3RyaXAoKQorICAgICAgICBpZiB0cnlzaG9ydDoKKyAgICAgICAgICAgIGlmIHRleHQuc3Rh
cnRzd2l0aChzZWxmLl9zdHJpcHRleHQpOgorICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0W2xl
bihzZWxmLl9zdHJpcHRleHQpOl0KKyAgICAgICAgcmV0dXJuIHRleHQKKworICAgIGRlZiBlcnJp
c2luc3RhbmNlKHNlbGYsIGV4Yyk6CisgICAgICAgICIiIiByZXR1cm4gVHJ1ZSBpZiB0aGUgZXhj
ZXB0aW9uIGlzIGFuIGluc3RhbmNlIG9mIGV4YyAiIiIKKyAgICAgICAgcmV0dXJuIGlzaW5zdGFu
Y2Uoc2VsZi52YWx1ZSwgZXhjKQorCisgICAgZGVmIF9nZXRyZXByY3Jhc2goc2VsZik6CisgICAg
ICAgIGV4Y29ubHkgPSBzZWxmLmV4Y29ubHkodHJ5c2hvcnQ9VHJ1ZSkKKyAgICAgICAgZW50cnkg
PSBzZWxmLnRyYWNlYmFjay5nZXRjcmFzaGVudHJ5KCkKKyAgICAgICAgcGF0aCwgbGluZW5vID0g
ZW50cnkuZnJhbWUuY29kZS5yYXcuY29fZmlsZW5hbWUsIGVudHJ5LmxpbmVubworICAgICAgICBy
ZXR1cm4gUmVwckZpbGVMb2NhdGlvbihwYXRoLCBsaW5lbm8rMSwgZXhjb25seSkKKworICAgIGRl
ZiBnZXRyZXByKHNlbGYsIHNob3dsb2NhbHM9RmFsc2UsIHN0eWxlPSJsb25nIiwKKyAgICAgICAg
ICAgIGFic3BhdGg9RmFsc2UsIHRiZmlsdGVyPVRydWUsIGZ1bmNhcmdzPUZhbHNlKToKKyAgICAg
ICAgIiIiIHJldHVybiBzdHIoKWFibGUgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBleGNlcHRpb24g
aW5mby4KKyAgICAgICAgICAgIHNob3dsb2NhbHM6IHNob3cgbG9jYWxzIHBlciB0cmFjZWJhY2sg
ZW50cnkKKyAgICAgICAgICAgIHN0eWxlOiBsb25nfHNob3J0fG5vfG5hdGl2ZSB0cmFjZWJhY2sg
c3R5bGUKKyAgICAgICAgICAgIHRiZmlsdGVyOiBoaWRlIGVudHJpZXMgKHdoZXJlIF9fdHJhY2Vi
YWNraGlkZV9fIGlzIHRydWUpCisKKyAgICAgICAgICAgIGluIGNhc2Ugb2Ygc3R5bGU9PW5hdGl2
ZSwgdGJmaWx0ZXIgYW5kIHNob3dsb2NhbHMgaXMgaWdub3JlZC4KKyAgICAgICAgIiIiCisgICAg
ICAgIGlmIHN0eWxlID09ICduYXRpdmUnOgorICAgICAgICAgICAgcmV0dXJuIFJlcHJFeGNlcHRp
b25JbmZvKFJlcHJUcmFjZWJhY2tOYXRpdmUoCisgICAgICAgICAgICAgICAgcHkuc3RkLnRyYWNl
YmFjay5mb3JtYXRfZXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICBzZWxmLnR5cGUsCisg
ICAgICAgICAgICAgICAgICAgIHNlbGYudmFsdWUsCisgICAgICAgICAgICAgICAgICAgIHNlbGYu
dHJhY2ViYWNrWzBdLl9yYXdlbnRyeSwKKyAgICAgICAgICAgICAgICApKSwgc2VsZi5fZ2V0cmVw
cmNyYXNoKCkpCisKKyAgICAgICAgZm10ID0gRm9ybWF0dGVkRXhjaW5mbyhzaG93bG9jYWxzPXNo
b3dsb2NhbHMsIHN0eWxlPXN0eWxlLAorICAgICAgICAgICAgYWJzcGF0aD1hYnNwYXRoLCB0YmZp
bHRlcj10YmZpbHRlciwgZnVuY2FyZ3M9ZnVuY2FyZ3MpCisgICAgICAgIHJldHVybiBmbXQucmVw
cl9leGNpbmZvKHNlbGYpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgZW50cnkg
PSBzZWxmLnRyYWNlYmFja1stMV0KKyAgICAgICAgbG9jID0gUmVwckZpbGVMb2NhdGlvbihlbnRy
eS5wYXRoLCBlbnRyeS5saW5lbm8gKyAxLCBzZWxmLmV4Y29ubHkoKSkKKyAgICAgICAgcmV0dXJu
IHN0cihsb2MpCisKKyAgICBkZWYgX191bmljb2RlX18oc2VsZik6CisgICAgICAgIGVudHJ5ID0g
c2VsZi50cmFjZWJhY2tbLTFdCisgICAgICAgIGxvYyA9IFJlcHJGaWxlTG9jYXRpb24oZW50cnku
cGF0aCwgZW50cnkubGluZW5vICsgMSwgc2VsZi5leGNvbmx5KCkpCisgICAgICAgIHJldHVybiB1
bmljb2RlKGxvYykKKworCitjbGFzcyBGb3JtYXR0ZWRFeGNpbmZvKG9iamVjdCk6CisgICAgIiIi
IHByZXNlbnRpbmcgaW5mb3JtYXRpb24gYWJvdXQgZmFpbGluZyBGdW5jdGlvbnMgYW5kIEdlbmVy
YXRvcnMuICIiIgorICAgICMgZm9yIHRyYWNlYmFjayBlbnRyaWVzCisgICAgZmxvd19tYXJrZXIg
PSAiPiIKKyAgICBmYWlsX21hcmtlciA9ICJFIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNo
b3dsb2NhbHM9RmFsc2UsIHN0eWxlPSJsb25nIiwgYWJzcGF0aD1UcnVlLCB0YmZpbHRlcj1UcnVl
LCBmdW5jYXJncz1GYWxzZSk6CisgICAgICAgIHNlbGYuc2hvd2xvY2FscyA9IHNob3dsb2NhbHMK
KyAgICAgICAgc2VsZi5zdHlsZSA9IHN0eWxlCisgICAgICAgIHNlbGYudGJmaWx0ZXIgPSB0YmZp
bHRlcgorICAgICAgICBzZWxmLmZ1bmNhcmdzID0gZnVuY2FyZ3MKKyAgICAgICAgc2VsZi5hYnNw
YXRoID0gYWJzcGF0aAorICAgICAgICBzZWxmLmFzdGNhY2hlID0ge30KKworICAgIGRlZiBfZ2V0
aW5kZW50KHNlbGYsIHNvdXJjZSk6CisgICAgICAgICMgZmlndXJlIG91dCBpbmRlbnQgZm9yIGdp
dmVuIHNvdXJjZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzID0gc3RyKHNvdXJjZS5nZXRz
dGF0ZW1lbnQobGVuKHNvdXJjZSktMSkpCisgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVw
dDoKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHRyeToK
KyAgICAgICAgICAgICAgICBzID0gc3RyKHNvdXJjZVstMV0pCisgICAgICAgICAgICBleGNlcHQg
S2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGV4
Y2VwdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICByZXR1cm4gNCArIChsZW4o
cykgLSBsZW4ocy5sc3RyaXAoKSkpCisKKyAgICBkZWYgX2dldGVudHJ5c291cmNlKHNlbGYsIGVu
dHJ5KToKKyAgICAgICAgc291cmNlID0gZW50cnkuZ2V0c291cmNlKHNlbGYuYXN0Y2FjaGUpCisg
ICAgICAgIGlmIHNvdXJjZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNvdXJjZSA9IHNvdXJj
ZS5kZWluZGVudCgpCisgICAgICAgIHJldHVybiBzb3VyY2UKKworICAgIGRlZiBfc2FmZXJlcHIo
c2VsZiwgb2JqKToKKyAgICAgICAgcmV0dXJuIHB5LmlvLnNhZmVyZXByKG9iaikKKworICAgIGRl
ZiByZXByX2FyZ3Moc2VsZiwgZW50cnkpOgorICAgICAgICBpZiBzZWxmLmZ1bmNhcmdzOgorICAg
ICAgICAgICAgYXJncyA9IFtdCisgICAgICAgICAgICBmb3IgYXJnbmFtZSwgYXJndmFsdWUgaW4g
ZW50cnkuZnJhbWUuZ2V0YXJncyh2YXI9VHJ1ZSk6CisgICAgICAgICAgICAgICAgYXJncy5hcHBl
bmQoKGFyZ25hbWUsIHNlbGYuX3NhZmVyZXByKGFyZ3ZhbHVlKSkpCisgICAgICAgICAgICByZXR1
cm4gUmVwckZ1bmNBcmdzKGFyZ3MpCisKKyAgICBkZWYgZ2V0X3NvdXJjZShzZWxmLCBzb3VyY2Us
IGxpbmVfaW5kZXg9LTEsIGV4Y2luZm89Tm9uZSwgc2hvcnQ9RmFsc2UpOgorICAgICAgICAiIiIg
cmV0dXJuIGZvcm1hdHRlZCBhbmQgbWFya2VkIHVwIHNvdXJjZSBsaW5lcy4gIiIiCisgICAgICAg
IGltcG9ydCBfcHl0ZXN0Ll9jb2RlCisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgaWYgc291
cmNlIGlzIE5vbmUgb3IgbGluZV9pbmRleCA+PSBsZW4oc291cmNlLmxpbmVzKToKKyAgICAgICAg
ICAgIHNvdXJjZSA9IF9weXRlc3QuX2NvZGUuU291cmNlKCI/Pz8iKQorICAgICAgICAgICAgbGlu
ZV9pbmRleCA9IDAKKyAgICAgICAgaWYgbGluZV9pbmRleCA8IDA6CisgICAgICAgICAgICBsaW5l
X2luZGV4ICs9IGxlbihzb3VyY2UpCisgICAgICAgIHNwYWNlX3ByZWZpeCA9ICIgICAgIgorICAg
ICAgICBpZiBzaG9ydDoKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzcGFjZV9wcmVmaXggKyBz
b3VyY2UubGluZXNbbGluZV9pbmRleF0uc3RyaXAoKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgIGZvciBsaW5lIGluIHNvdXJjZS5saW5lc1s6bGluZV9pbmRleF06CisgICAgICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKHNwYWNlX3ByZWZpeCArIGxpbmUpCisgICAgICAgICAgICBsaW5lcy5h
cHBlbmQoc2VsZi5mbG93X21hcmtlciArICIgICAiICsgc291cmNlLmxpbmVzW2xpbmVfaW5kZXhd
KQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gc291cmNlLmxpbmVzW2xpbmVfaW5kZXgrMTpdOgor
ICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzcGFjZV9wcmVmaXggKyBsaW5lKQorICAgICAg
ICBpZiBleGNpbmZvIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaW5kZW50ID0gNCBpZiBzaG9y
dCBlbHNlIHNlbGYuX2dldGluZGVudChzb3VyY2UpCisgICAgICAgICAgICBsaW5lcy5leHRlbmQo
c2VsZi5nZXRfZXhjb25seShleGNpbmZvLCBpbmRlbnQ9aW5kZW50LCBtYXJrYWxsPVRydWUpKQor
ICAgICAgICByZXR1cm4gbGluZXMKKworICAgIGRlZiBnZXRfZXhjb25seShzZWxmLCBleGNpbmZv
LCBpbmRlbnQ9NCwgbWFya2FsbD1GYWxzZSk6CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAg
aW5kZW50ID0gIiAiICogaW5kZW50CisgICAgICAgICMgZ2V0IHRoZSByZWFsIGV4Y2VwdGlvbiBp
bmZvcm1hdGlvbiBvdXQKKyAgICAgICAgZXhsaW5lcyA9IGV4Y2luZm8uZXhjb25seSh0cnlzaG9y
dD1UcnVlKS5zcGxpdCgnXG4nKQorICAgICAgICBmYWlsaW5kZW50ID0gc2VsZi5mYWlsX21hcmtl
ciArIGluZGVudFsxOl0KKyAgICAgICAgZm9yIGxpbmUgaW4gZXhsaW5lczoKKyAgICAgICAgICAg
IGxpbmVzLmFwcGVuZChmYWlsaW5kZW50ICsgbGluZSkKKyAgICAgICAgICAgIGlmIG5vdCBtYXJr
YWxsOgorICAgICAgICAgICAgICAgIGZhaWxpbmRlbnQgPSBpbmRlbnQKKyAgICAgICAgcmV0dXJu
IGxpbmVzCisKKyAgICBkZWYgcmVwcl9sb2NhbHMoc2VsZiwgbG9jYWxzKToKKyAgICAgICAgaWYg
c2VsZi5zaG93bG9jYWxzOgorICAgICAgICAgICAgbGluZXMgPSBbXQorICAgICAgICAgICAga2V5
cyA9IFtsb2MgZm9yIGxvYyBpbiBsb2NhbHMgaWYgbG9jWzBdICE9ICJAIl0KKyAgICAgICAgICAg
IGtleXMuc29ydCgpCisgICAgICAgICAgICBmb3IgbmFtZSBpbiBrZXlzOgorICAgICAgICAgICAg
ICAgIHZhbHVlID0gbG9jYWxzW25hbWVdCisgICAgICAgICAgICAgICAgaWYgbmFtZSA9PSAnX19i
dWlsdGluc19fJzoKKyAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCJfX2J1aWx0aW5z
X18gPSA8YnVpbHRpbnM+IikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg
ICAgICAjIFRoaXMgZm9ybWF0dGluZyBjb3VsZCBhbGwgYmUgaGFuZGxlZCBieSB0aGUKKyAgICAg
ICAgICAgICAgICAgICAgIyBfcmVwcigpIGZ1bmN0aW9uLCB3aGljaCBpcyBvbmx5IHJlcHJsaWIu
UmVwciBpbgorICAgICAgICAgICAgICAgICAgICAjIGRpc2d1aXNlLCBzbyBpcyB2ZXJ5IGNvbmZp
Z3VyYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgc3RyX3JlcHIgPSBzZWxmLl9zYWZlcmVwcih2
YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgI2lmIGxlbihzdHJfcmVwcikgPCA3MCBvciBub3Qg
aXNpbnN0YW5jZSh2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAobGlzdCwgdHVwbGUsIGRpY3QpKToKKyAgICAgICAgICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKCIlLTEwcyA9ICVzIiAlKG5hbWUsIHN0cl9yZXByKSkKKyAgICAgICAgICAgICAg
ICAgICAgI2Vsc2U6CisgICAgICAgICAgICAgICAgICAgICMgICAgc2VsZi5fbGluZSgiJS0xMHMg
PVxcIiAlIChuYW1lLCkpCisgICAgICAgICAgICAgICAgICAgICMgICAgIyBYWFgKKyAgICAgICAg
ICAgICAgICAgICAgIyAgICBweS5zdGQucHByaW50LnBwcmludCh2YWx1ZSwgc3RyZWFtPXNlbGYu
ZXhjaW5mb3dyaXRlcikKKyAgICAgICAgICAgIHJldHVybiBSZXByTG9jYWxzKGxpbmVzKQorCisg
ICAgZGVmIHJlcHJfdHJhY2ViYWNrX2VudHJ5KHNlbGYsIGVudHJ5LCBleGNpbmZvPU5vbmUpOgor
ICAgICAgICBpbXBvcnQgX3B5dGVzdC5fY29kZQorICAgICAgICBzb3VyY2UgPSBzZWxmLl9nZXRl
bnRyeXNvdXJjZShlbnRyeSkKKyAgICAgICAgaWYgc291cmNlIGlzIE5vbmU6CisgICAgICAgICAg
ICBzb3VyY2UgPSBfcHl0ZXN0Ll9jb2RlLlNvdXJjZSgiPz8/IikKKyAgICAgICAgICAgIGxpbmVf
aW5kZXggPSAwCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIGVudHJ5LmdldGZpcnN0bGlu
ZXNvdXJjZSgpIGNhbiBiZSAtMSwgc2hvdWxkIGJlIDAgb24ganl0aG9uCisgICAgICAgICAgICBs
aW5lX2luZGV4ID0gZW50cnkubGluZW5vIC0gbWF4KGVudHJ5LmdldGZpcnN0bGluZXNvdXJjZSgp
LCAwKQorCisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgc3R5bGUgPSBlbnRyeS5fcmVwcl9z
dHlsZQorICAgICAgICBpZiBzdHlsZSBpcyBOb25lOgorICAgICAgICAgICAgc3R5bGUgPSBzZWxm
LnN0eWxlCisgICAgICAgIGlmIHN0eWxlIGluICgic2hvcnQiLCAibG9uZyIpOgorICAgICAgICAg
ICAgc2hvcnQgPSBzdHlsZSA9PSAic2hvcnQiCisgICAgICAgICAgICByZXByYXJncyA9IHNlbGYu
cmVwcl9hcmdzKGVudHJ5KSBpZiBub3Qgc2hvcnQgZWxzZSBOb25lCisgICAgICAgICAgICBzID0g
c2VsZi5nZXRfc291cmNlKHNvdXJjZSwgbGluZV9pbmRleCwgZXhjaW5mbywgc2hvcnQ9c2hvcnQp
CisgICAgICAgICAgICBsaW5lcy5leHRlbmQocykKKyAgICAgICAgICAgIGlmIHNob3J0OgorICAg
ICAgICAgICAgICAgIG1lc3NhZ2UgPSAiaW4gJXMiICUoZW50cnkubmFtZSkKKyAgICAgICAgICAg
IGVsc2U6CisgICAgICAgICAgICAgICAgbWVzc2FnZSA9IGV4Y2luZm8gYW5kIGV4Y2luZm8udHlw
ZW5hbWUgb3IgIiIKKyAgICAgICAgICAgIHBhdGggPSBzZWxmLl9tYWtlcGF0aChlbnRyeS5wYXRo
KQorICAgICAgICAgICAgZmlsZWxvY3JlcHIgPSBSZXByRmlsZUxvY2F0aW9uKHBhdGgsIGVudHJ5
LmxpbmVubysxLCBtZXNzYWdlKQorICAgICAgICAgICAgbG9jYWxzcmVwciA9IE5vbmUKKyAgICAg
ICAgICAgIGlmIG5vdCBzaG9ydDoKKyAgICAgICAgICAgICAgICBsb2NhbHNyZXByID0gIHNlbGYu
cmVwcl9sb2NhbHMoZW50cnkubG9jYWxzKQorICAgICAgICAgICAgcmV0dXJuIFJlcHJFbnRyeShs
aW5lcywgcmVwcmFyZ3MsIGxvY2Fsc3JlcHIsIGZpbGVsb2NyZXByLCBzdHlsZSkKKyAgICAgICAg
aWYgZXhjaW5mbzoKKyAgICAgICAgICAgIGxpbmVzLmV4dGVuZChzZWxmLmdldF9leGNvbmx5KGV4
Y2luZm8sIGluZGVudD00KSkKKyAgICAgICAgcmV0dXJuIFJlcHJFbnRyeShsaW5lcywgTm9uZSwg
Tm9uZSwgTm9uZSwgc3R5bGUpCisKKyAgICBkZWYgX21ha2VwYXRoKHNlbGYsIHBhdGgpOgorICAg
ICAgICBpZiBub3Qgc2VsZi5hYnNwYXRoOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAg
ICAgIG5wID0gcHkucGF0aC5sb2NhbCgpLmJlc3RyZWxwYXRoKHBhdGgpCisgICAgICAgICAgICBl
eGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICByZXR1cm4gcGF0aAorICAgICAgICAgICAg
aWYgbGVuKG5wKSA8IGxlbihzdHIocGF0aCkpOgorICAgICAgICAgICAgICAgIHBhdGggPSBucAor
ICAgICAgICByZXR1cm4gcGF0aAorCisgICAgZGVmIHJlcHJfdHJhY2ViYWNrKHNlbGYsIGV4Y2lu
Zm8pOgorICAgICAgICB0cmFjZWJhY2sgPSBleGNpbmZvLnRyYWNlYmFjaworICAgICAgICBpZiBz
ZWxmLnRiZmlsdGVyOgorICAgICAgICAgICAgdHJhY2ViYWNrID0gdHJhY2ViYWNrLmZpbHRlcigp
CisgICAgICAgIHJlY3Vyc2lvbmluZGV4ID0gTm9uZQorICAgICAgICBpZiBleGNpbmZvLmVycmlz
aW5zdGFuY2UoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgIGlmICJtYXhpbXVtIHJlY3Vyc2lv
biBkZXB0aCBleGNlZWRlZCIgaW4gc3RyKGV4Y2luZm8udmFsdWUpOgorICAgICAgICAgICAgICAg
IHJlY3Vyc2lvbmluZGV4ID0gdHJhY2ViYWNrLnJlY3Vyc2lvbmluZGV4KCkKKyAgICAgICAgbGFz
dCA9IHRyYWNlYmFja1stMV0KKyAgICAgICAgZW50cmllcyA9IFtdCisgICAgICAgIGV4dHJhbGlu
ZSA9IE5vbmUKKyAgICAgICAgZm9yIGluZGV4LCBlbnRyeSBpbiBlbnVtZXJhdGUodHJhY2ViYWNr
KToKKyAgICAgICAgICAgIGVpbmZvID0gKGxhc3QgPT0gZW50cnkpIGFuZCBleGNpbmZvIG9yIE5v
bmUKKyAgICAgICAgICAgIHJlcHJlbnRyeSA9IHNlbGYucmVwcl90cmFjZWJhY2tfZW50cnkoZW50
cnksIGVpbmZvKQorICAgICAgICAgICAgZW50cmllcy5hcHBlbmQocmVwcmVudHJ5KQorICAgICAg
ICAgICAgaWYgaW5kZXggPT0gcmVjdXJzaW9uaW5kZXg6CisgICAgICAgICAgICAgICAgZXh0cmFs
aW5lID0gIiEhISBSZWN1cnNpb24gZGV0ZWN0ZWQgKHNhbWUgbG9jYWxzICYgcG9zaXRpb24pIgor
ICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHJldHVybiBSZXByVHJhY2ViYWNrKGVudHJp
ZXMsIGV4dHJhbGluZSwgc3R5bGU9c2VsZi5zdHlsZSkKKworICAgIGRlZiByZXByX2V4Y2luZm8o
c2VsZiwgZXhjaW5mbyk6CisgICAgICAgIHJlcHJ0cmFjZWJhY2sgPSBzZWxmLnJlcHJfdHJhY2Vi
YWNrKGV4Y2luZm8pCisgICAgICAgIHJlcHJjcmFzaCA9IGV4Y2luZm8uX2dldHJlcHJjcmFzaCgp
CisgICAgICAgIHJldHVybiBSZXByRXhjZXB0aW9uSW5mbyhyZXBydHJhY2ViYWNrLCByZXByY3Jh
c2gpCisKK2NsYXNzIFRlcm1pbmFsUmVwcjoKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAg
ICAgcyA9IHNlbGYuX191bmljb2RlX18oKQorICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzBd
IDwgMzoKKyAgICAgICAgICAgIHMgPSBzLmVuY29kZSgndXRmLTgnKQorICAgICAgICByZXR1cm4g
cworCisgICAgZGVmIF9fdW5pY29kZV9fKHNlbGYpOgorICAgICAgICAjIEZZSSB0aGlzIGlzIGNh
bGxlZCBmcm9tIHB5dGVzdC14ZGlzdCdzIHNlcmlhbGl6YXRpb24gb2YgZXhjZXB0aW9uCisgICAg
ICAgICMgaW5mb3JtYXRpb24uCisgICAgICAgIGlvID0gcHkuaW8uVGV4dElPKCkKKyAgICAgICAg
dHcgPSBweS5pby5UZXJtaW5hbFdyaXRlcihmaWxlPWlvKQorICAgICAgICBzZWxmLnRvdGVybWlu
YWwodHcpCisgICAgICAgIHJldHVybiBpby5nZXR2YWx1ZSgpLnN0cmlwKCkKKworICAgIGRlZiBf
X3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICI8JXMgaW5zdGFuY2UgYXQgJTB4PiIgJShz
ZWxmLl9fY2xhc3NfXywgaWQoc2VsZikpCisKKworY2xhc3MgUmVwckV4Y2VwdGlvbkluZm8oVGVy
bWluYWxSZXByKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVwcnRyYWNlYmFjaywgcmVwcmNy
YXNoKToKKyAgICAgICAgc2VsZi5yZXBydHJhY2ViYWNrID0gcmVwcnRyYWNlYmFjaworICAgICAg
ICBzZWxmLnJlcHJjcmFzaCA9IHJlcHJjcmFzaAorICAgICAgICBzZWxmLnNlY3Rpb25zID0gW10K
KworICAgIGRlZiBhZGRzZWN0aW9uKHNlbGYsIG5hbWUsIGNvbnRlbnQsIHNlcD0iLSIpOgorICAg
ICAgICBzZWxmLnNlY3Rpb25zLmFwcGVuZCgobmFtZSwgY29udGVudCwgc2VwKSkKKworICAgIGRl
ZiB0b3Rlcm1pbmFsKHNlbGYsIHR3KToKKyAgICAgICAgc2VsZi5yZXBydHJhY2ViYWNrLnRvdGVy
bWluYWwodHcpCisgICAgICAgIGZvciBuYW1lLCBjb250ZW50LCBzZXAgaW4gc2VsZi5zZWN0aW9u
czoKKyAgICAgICAgICAgIHR3LnNlcChzZXAsIG5hbWUpCisgICAgICAgICAgICB0dy5saW5lKGNv
bnRlbnQpCisKK2NsYXNzIFJlcHJUcmFjZWJhY2soVGVybWluYWxSZXByKToKKyAgICBlbnRyeXNl
cCA9ICJfICIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXByZW50cmllcywgZXh0cmFsaW5l
LCBzdHlsZSk6CisgICAgICAgIHNlbGYucmVwcmVudHJpZXMgPSByZXByZW50cmllcworICAgICAg
ICBzZWxmLmV4dHJhbGluZSA9IGV4dHJhbGluZQorICAgICAgICBzZWxmLnN0eWxlID0gc3R5bGUK
KworICAgIGRlZiB0b3Rlcm1pbmFsKHNlbGYsIHR3KToKKyAgICAgICAgIyB0aGUgZW50cmllcyBt
aWdodCBoYXZlIGRpZmZlcmVudCBzdHlsZXMKKyAgICAgICAgZm9yIGksIGVudHJ5IGluIGVudW1l
cmF0ZShzZWxmLnJlcHJlbnRyaWVzKToKKyAgICAgICAgICAgIGlmIGVudHJ5LnN0eWxlID09ICJs
b25nIjoKKyAgICAgICAgICAgICAgICB0dy5saW5lKCIiKQorICAgICAgICAgICAgZW50cnkudG90
ZXJtaW5hbCh0dykKKyAgICAgICAgICAgIGlmIGkgPCBsZW4oc2VsZi5yZXByZW50cmllcykgLSAx
OgorICAgICAgICAgICAgICAgIG5leHRfZW50cnkgPSBzZWxmLnJlcHJlbnRyaWVzW2krMV0KKyAg
ICAgICAgICAgICAgICBpZiBlbnRyeS5zdHlsZSA9PSAibG9uZyIgb3IgXAorICAgICAgICAgICAg
ICAgICAgIGVudHJ5LnN0eWxlID09ICJzaG9ydCIgYW5kIG5leHRfZW50cnkuc3R5bGUgPT0gImxv
bmciOgorICAgICAgICAgICAgICAgICAgICB0dy5zZXAoc2VsZi5lbnRyeXNlcCkKKworICAgICAg
ICBpZiBzZWxmLmV4dHJhbGluZToKKyAgICAgICAgICAgIHR3LmxpbmUoc2VsZi5leHRyYWxpbmUp
CisKK2NsYXNzIFJlcHJUcmFjZWJhY2tOYXRpdmUoUmVwclRyYWNlYmFjayk6CisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIHRibGluZXMpOgorICAgICAgICBzZWxmLnN0eWxlID0gIm5hdGl2ZSIKKyAg
ICAgICAgc2VsZi5yZXByZW50cmllcyA9IFtSZXByRW50cnlOYXRpdmUodGJsaW5lcyldCisgICAg
ICAgIHNlbGYuZXh0cmFsaW5lID0gTm9uZQorCitjbGFzcyBSZXByRW50cnlOYXRpdmUoVGVybWlu
YWxSZXByKToKKyAgICBzdHlsZSA9ICJuYXRpdmUiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
dGJsaW5lcyk6CisgICAgICAgIHNlbGYubGluZXMgPSB0YmxpbmVzCisKKyAgICBkZWYgdG90ZXJt
aW5hbChzZWxmLCB0dyk6CisgICAgICAgIHR3LndyaXRlKCIiLmpvaW4oc2VsZi5saW5lcykpCisK
K2NsYXNzIFJlcHJFbnRyeShUZXJtaW5hbFJlcHIpOgorICAgIGxvY2Fsc3NlcCA9ICJfICIKKwor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsaW5lcywgcmVwcmZ1bmNhcmdzLCByZXBybG9jYWxzLCBm
aWxlbG9jcmVwciwgc3R5bGUpOgorICAgICAgICBzZWxmLmxpbmVzID0gbGluZXMKKyAgICAgICAg
c2VsZi5yZXByZnVuY2FyZ3MgPSByZXByZnVuY2FyZ3MKKyAgICAgICAgc2VsZi5yZXBybG9jYWxz
ID0gcmVwcmxvY2FscworICAgICAgICBzZWxmLnJlcHJmaWxlbG9jID0gZmlsZWxvY3JlcHIKKyAg
ICAgICAgc2VsZi5zdHlsZSA9IHN0eWxlCisKKyAgICBkZWYgdG90ZXJtaW5hbChzZWxmLCB0dyk6
CisgICAgICAgIGlmIHNlbGYuc3R5bGUgPT0gInNob3J0IjoKKyAgICAgICAgICAgIHNlbGYucmVw
cmZpbGVsb2MudG90ZXJtaW5hbCh0dykKKyAgICAgICAgICAgIGZvciBsaW5lIGluIHNlbGYubGlu
ZXM6CisgICAgICAgICAgICAgICAgcmVkID0gbGluZS5zdGFydHN3aXRoKCJFICAgIikKKyAgICAg
ICAgICAgICAgICB0dy5saW5lKGxpbmUsIGJvbGQ9VHJ1ZSwgcmVkPXJlZCkKKyAgICAgICAgICAg
ICN0dy5saW5lKCIiKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIHNlbGYucmVwcmZ1
bmNhcmdzOgorICAgICAgICAgICAgc2VsZi5yZXByZnVuY2FyZ3MudG90ZXJtaW5hbCh0dykKKyAg
ICAgICAgZm9yIGxpbmUgaW4gc2VsZi5saW5lczoKKyAgICAgICAgICAgIHJlZCA9IGxpbmUuc3Rh
cnRzd2l0aCgiRSAgICIpCisgICAgICAgICAgICB0dy5saW5lKGxpbmUsIGJvbGQ9VHJ1ZSwgcmVk
PXJlZCkKKyAgICAgICAgaWYgc2VsZi5yZXBybG9jYWxzOgorICAgICAgICAgICAgI3R3LnNlcChz
ZWxmLmxvY2Fsc3NlcCwgIkxvY2FscyIpCisgICAgICAgICAgICB0dy5saW5lKCIiKQorICAgICAg
ICAgICAgc2VsZi5yZXBybG9jYWxzLnRvdGVybWluYWwodHcpCisgICAgICAgIGlmIHNlbGYucmVw
cmZpbGVsb2M6CisgICAgICAgICAgICBpZiBzZWxmLmxpbmVzOgorICAgICAgICAgICAgICAgIHR3
LmxpbmUoIiIpCisgICAgICAgICAgICBzZWxmLnJlcHJmaWxlbG9jLnRvdGVybWluYWwodHcpCisK
KyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICIlc1xuJXNcbiVzIiAlICgi
XG4iLmpvaW4oc2VsZi5saW5lcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5yZXBybG9jYWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVwcmZp
bGVsb2MpCisKK2NsYXNzIFJlcHJGaWxlTG9jYXRpb24oVGVybWluYWxSZXByKToKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgcGF0aCwgbGluZW5vLCBtZXNzYWdlKToKKyAgICAgICAgc2VsZi5wYXRo
ID0gc3RyKHBhdGgpCisgICAgICAgIHNlbGYubGluZW5vID0gbGluZW5vCisgICAgICAgIHNlbGYu
bWVzc2FnZSA9IG1lc3NhZ2UKKworICAgIGRlZiB0b3Rlcm1pbmFsKHNlbGYsIHR3KToKKyAgICAg
ICAgIyBmaWxlbmFtZSBhbmQgbGluZW5vIG91dHB1dCBmb3IgZWFjaCBlbnRyeSwKKyAgICAgICAg
IyB1c2luZyBhbiBvdXRwdXQgZm9ybWF0IHRoYXQgbW9zdCBlZGl0b3JzIHVudGVyc3RhbmQKKyAg
ICAgICAgbXNnID0gc2VsZi5tZXNzYWdlCisgICAgICAgIGkgPSBtc2cuZmluZCgiXG4iKQorICAg
ICAgICBpZiBpICE9IC0xOgorICAgICAgICAgICAgbXNnID0gbXNnWzppXQorICAgICAgICB0dy5s
aW5lKCIlczolczogJXMiICUoc2VsZi5wYXRoLCBzZWxmLmxpbmVubywgbXNnKSkKKworY2xhc3Mg
UmVwckxvY2FscyhUZXJtaW5hbFJlcHIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsaW5lcyk6
CisgICAgICAgIHNlbGYubGluZXMgPSBsaW5lcworCisgICAgZGVmIHRvdGVybWluYWwoc2VsZiwg
dHcpOgorICAgICAgICBmb3IgbGluZSBpbiBzZWxmLmxpbmVzOgorICAgICAgICAgICAgdHcubGlu
ZShsaW5lKQorCitjbGFzcyBSZXByRnVuY0FyZ3MoVGVybWluYWxSZXByKToKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgYXJncyk6CisgICAgICAgIHNlbGYuYXJncyA9IGFyZ3MKKworICAgIGRlZiB0
b3Rlcm1pbmFsKHNlbGYsIHR3KToKKyAgICAgICAgaWYgc2VsZi5hcmdzOgorICAgICAgICAgICAg
bGluZXNvZmFyID0gIiIKKyAgICAgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBzZWxmLmFyZ3M6
CisgICAgICAgICAgICAgICAgbnMgPSAiJXMgPSAlcyIgJShuYW1lLCB2YWx1ZSkKKyAgICAgICAg
ICAgICAgICBpZiBsZW4obnMpICsgbGVuKGxpbmVzb2ZhcikgKyAyID4gdHcuZnVsbHdpZHRoOgor
ICAgICAgICAgICAgICAgICAgICBpZiBsaW5lc29mYXI6CisgICAgICAgICAgICAgICAgICAgICAg
ICB0dy5saW5lKGxpbmVzb2ZhcikKKyAgICAgICAgICAgICAgICAgICAgbGluZXNvZmFyID0gIG5z
CisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaWYgbGluZXNvZmFy
OgorICAgICAgICAgICAgICAgICAgICAgICAgbGluZXNvZmFyICs9ICIsICIgKyBucworICAgICAg
ICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgbGluZXNvZmFyID0g
bnMKKyAgICAgICAgICAgIGlmIGxpbmVzb2ZhcjoKKyAgICAgICAgICAgICAgICB0dy5saW5lKGxp
bmVzb2ZhcikKKyAgICAgICAgICAgIHR3LmxpbmUoIiIpCisKKworCitvbGRidWlsdGlucyA9IHt9
CisKK2RlZiBwYXRjaF9idWlsdGlucyhhc3NlcnRpb249VHJ1ZSwgY29tcGlsZT1UcnVlKToKKyAg
ICAiIiIgcHV0IGNvbXBpbGUgYW5kIEFzc2VydGlvbkVycm9yIGJ1aWx0aW5zIHRvIFB5dGhvbidz
IGJ1aWx0aW5zLiAiIiIKKyAgICBpZiBhc3NlcnRpb246CisgICAgICAgIGZyb20gX3B5dGVzdC5h
c3NlcnRpb24gaW1wb3J0IHJlaW50ZXJwcmV0CisgICAgICAgIGwgPSBvbGRidWlsdGlucy5zZXRk
ZWZhdWx0KCdBc3NlcnRpb25FcnJvcicsIFtdKQorICAgICAgICBsLmFwcGVuZChweS5idWlsdGlu
LmJ1aWx0aW5zLkFzc2VydGlvbkVycm9yKQorICAgICAgICBweS5idWlsdGluLmJ1aWx0aW5zLkFz
c2VydGlvbkVycm9yID0gcmVpbnRlcnByZXQuQXNzZXJ0aW9uRXJyb3IKKyAgICBpZiBjb21waWxl
OgorICAgICAgICBpbXBvcnQgX3B5dGVzdC5fY29kZQorICAgICAgICBsID0gb2xkYnVpbHRpbnMu
c2V0ZGVmYXVsdCgnY29tcGlsZScsIFtdKQorICAgICAgICBsLmFwcGVuZChweS5idWlsdGluLmJ1
aWx0aW5zLmNvbXBpbGUpCisgICAgICAgIHB5LmJ1aWx0aW4uYnVpbHRpbnMuY29tcGlsZSA9IF9w
eXRlc3QuX2NvZGUuY29tcGlsZQorCitkZWYgdW5wYXRjaF9idWlsdGlucyhhc3NlcnRpb249VHJ1
ZSwgY29tcGlsZT1UcnVlKToKKyAgICAiIiIgcmVtb3ZlIGNvbXBpbGUgYW5kIEFzc2VydGlvbkVy
cm9yIGJ1aWx0aW5zIGZyb20gUHl0aG9uIGJ1aWx0aW5zLiAiIiIKKyAgICBpZiBhc3NlcnRpb246
CisgICAgICAgIHB5LmJ1aWx0aW4uYnVpbHRpbnMuQXNzZXJ0aW9uRXJyb3IgPSBvbGRidWlsdGlu
c1snQXNzZXJ0aW9uRXJyb3InXS5wb3AoKQorICAgIGlmIGNvbXBpbGU6CisgICAgICAgIHB5LmJ1
aWx0aW4uYnVpbHRpbnMuY29tcGlsZSA9IG9sZGJ1aWx0aW5zWydjb21waWxlJ10ucG9wKCkKKwor
ZGVmIGdldHJhd2NvZGUob2JqLCB0cnljYWxsPVRydWUpOgorICAgICIiIiByZXR1cm4gY29kZSBv
YmplY3QgZm9yIGdpdmVuIGZ1bmN0aW9uLiAiIiIKKyAgICB0cnk6CisgICAgICAgIHJldHVybiBv
YmouX19jb2RlX18KKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIG9iaiA9IGdl
dGF0dHIob2JqLCAnaW1fZnVuYycsIG9iaikKKyAgICAgICAgb2JqID0gZ2V0YXR0cihvYmosICdm
dW5jX2NvZGUnLCBvYmopCisgICAgICAgIG9iaiA9IGdldGF0dHIob2JqLCAnZl9jb2RlJywgb2Jq
KQorICAgICAgICBvYmogPSBnZXRhdHRyKG9iaiwgJ19fY29kZV9fJywgb2JqKQorICAgICAgICBp
ZiB0cnljYWxsIGFuZCBub3QgaGFzYXR0cihvYmosICdjb19maXJzdGxpbmVubycpOgorICAgICAg
ICAgICAgaWYgaGFzYXR0cihvYmosICdfX2NhbGxfXycpIGFuZCBub3QgcHkuc3RkLmluc3BlY3Qu
aXNjbGFzcyhvYmopOgorICAgICAgICAgICAgICAgIHggPSBnZXRyYXdjb2RlKG9iai5fX2NhbGxf
XywgdHJ5Y2FsbD1GYWxzZSkKKyAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKHgsICdjb19maXJz
dGxpbmVubycpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4geAorICAgICAgICByZXR1cm4g
b2JqCisKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRl
c3QvX3B5dGVzdC9fY29kZS9zb3VyY2UucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mv
dG9vbHMvcHl0ZXN0L19weXRlc3QvX2NvZGUvc291cmNlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwLi5hMTUyMWY4YTIxMgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRy
aXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9fY29kZS9zb3VyY2Uu
cHkKQEAgLTAsMCArMSw0MjEgQEAKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgZ2VuZXJhdG9ycwor
Citmcm9tIGJpc2VjdCBpbXBvcnQgYmlzZWN0X3JpZ2h0CitpbXBvcnQgc3lzCitpbXBvcnQgaW5z
cGVjdCwgdG9rZW5pemUKK2ltcG9ydCBweQorZnJvbSB0eXBlcyBpbXBvcnQgTW9kdWxlVHlwZQor
Y3B5X2NvbXBpbGUgPSBjb21waWxlCisKK3RyeToKKyAgICBpbXBvcnQgX2FzdAorICAgIGZyb20g
X2FzdCBpbXBvcnQgUHlDRl9PTkxZX0FTVCBhcyBfQVNUX0ZMQUcKK2V4Y2VwdCBJbXBvcnRFcnJv
cjoKKyAgICBfQVNUX0ZMQUcgPSAwCisgICAgX2FzdCA9IE5vbmUKKworCitjbGFzcyBTb3VyY2Uo
b2JqZWN0KToKKyAgICAiIiIgYSBpbW11dGFibGUgb2JqZWN0IGhvbGRpbmcgYSBzb3VyY2UgY29k
ZSBmcmFnbWVudCwKKyAgICAgICAgcG9zc2libHkgZGVpbmRlbnRpbmcgaXQuCisgICAgIiIiCisg
ICAgX2NvbXBpbGVjb3VudGVyID0gMAorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqcGFydHMsICoq
a3dhcmdzKToKKyAgICAgICAgc2VsZi5saW5lcyA9IGxpbmVzID0gW10KKyAgICAgICAgZGUgPSBr
d2FyZ3MuZ2V0KCdkZWluZGVudCcsIFRydWUpCisgICAgICAgIHJzdHJpcCA9IGt3YXJncy5nZXQo
J3JzdHJpcCcsIFRydWUpCisgICAgICAgIGZvciBwYXJ0IGluIHBhcnRzOgorICAgICAgICAgICAg
aWYgbm90IHBhcnQ6CisgICAgICAgICAgICAgICAgcGFydGxpbmVzID0gW10KKyAgICAgICAgICAg
IGlmIGlzaW5zdGFuY2UocGFydCwgU291cmNlKToKKyAgICAgICAgICAgICAgICBwYXJ0bGluZXMg
PSBwYXJ0LmxpbmVzCisgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UocGFydCwgKHR1cGxlLCBs
aXN0KSk6CisgICAgICAgICAgICAgICAgcGFydGxpbmVzID0gW3gucnN0cmlwKCJcbiIpIGZvciB4
IGluIHBhcnRdCisgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UocGFydCwgcHkuYnVpbHRpbi5f
YmFzZXN0cmluZyk6CisgICAgICAgICAgICAgICAgcGFydGxpbmVzID0gcGFydC5zcGxpdCgnXG4n
KQorICAgICAgICAgICAgICAgIGlmIHJzdHJpcDoKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUg
cGFydGxpbmVzOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgcGFydGxpbmVzWy0xXS5zdHJp
cCgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAg
ICAgICAgICBwYXJ0bGluZXMucG9wKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAg
ICAgcGFydGxpbmVzID0gZ2V0c291cmNlKHBhcnQsIGRlaW5kZW50PWRlKS5saW5lcworICAgICAg
ICAgICAgaWYgZGU6CisgICAgICAgICAgICAgICAgcGFydGxpbmVzID0gZGVpbmRlbnQocGFydGxp
bmVzKQorICAgICAgICAgICAgbGluZXMuZXh0ZW5kKHBhcnRsaW5lcykKKworICAgIGRlZiBfX2Vx
X18oc2VsZiwgb3RoZXIpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5s
aW5lcyA9PSBvdGhlci5saW5lcworICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAg
ICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBzdHIpOgorICAgICAgICAgICAgICAgIHJldHVy
biBzdHIoc2VsZikgPT0gb3RoZXIKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVm
IF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uoa2V5LCBpbnQp
OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYubGluZXNba2V5XQorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgaWYga2V5LnN0ZXAgbm90IGluIChOb25lLCAxKToKKyAgICAgICAgICAgICAgICBy
YWlzZSBJbmRleEVycm9yKCJjYW5ub3Qgc2xpY2UgYSBTb3VyY2Ugd2l0aCBhIHN0ZXAiKQorICAg
ICAgICAgICAgcmV0dXJuIHNlbGYuX19nZXRzbGljZV9fKGtleS5zdGFydCwga2V5LnN0b3ApCisK
KyAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLmxpbmVzKQor
CisgICAgZGVmIF9fZ2V0c2xpY2VfXyhzZWxmLCBzdGFydCwgZW5kKToKKyAgICAgICAgbmV3c291
cmNlID0gU291cmNlKCkKKyAgICAgICAgbmV3c291cmNlLmxpbmVzID0gc2VsZi5saW5lc1tzdGFy
dDplbmRdCisgICAgICAgIHJldHVybiBuZXdzb3VyY2UKKworICAgIGRlZiBzdHJpcChzZWxmKToK
KyAgICAgICAgIiIiIHJldHVybiBuZXcgc291cmNlIG9iamVjdCB3aXRoIHRyYWlsaW5nCisgICAg
ICAgICAgICBhbmQgbGVhZGluZyBibGFuayBsaW5lcyByZW1vdmVkLgorICAgICAgICAiIiIKKyAg
ICAgICAgc3RhcnQsIGVuZCA9IDAsIGxlbihzZWxmKQorICAgICAgICB3aGlsZSBzdGFydCA8IGVu
ZCBhbmQgbm90IHNlbGYubGluZXNbc3RhcnRdLnN0cmlwKCk6CisgICAgICAgICAgICBzdGFydCAr
PSAxCisgICAgICAgIHdoaWxlIGVuZCA+IHN0YXJ0IGFuZCBub3Qgc2VsZi5saW5lc1tlbmQtMV0u
c3RyaXAoKToKKyAgICAgICAgICAgIGVuZCAtPSAxCisgICAgICAgIHNvdXJjZSA9IFNvdXJjZSgp
CisgICAgICAgIHNvdXJjZS5saW5lc1s6XSA9IHNlbGYubGluZXNbc3RhcnQ6ZW5kXQorICAgICAg
ICByZXR1cm4gc291cmNlCisKKyAgICBkZWYgcHV0YXJvdW5kKHNlbGYsIGJlZm9yZT0nJywgYWZ0
ZXI9JycsIGluZGVudD0nICcgKiA0KToKKyAgICAgICAgIiIiIHJldHVybiBhIGNvcHkgb2YgdGhl
IHNvdXJjZSBvYmplY3Qgd2l0aAorICAgICAgICAgICAgJ2JlZm9yZScgYW5kICdhZnRlcicgd3Jh
cHBlZCBhcm91bmQgaXQuCisgICAgICAgICIiIgorICAgICAgICBiZWZvcmUgPSBTb3VyY2UoYmVm
b3JlKQorICAgICAgICBhZnRlciA9IFNvdXJjZShhZnRlcikKKyAgICAgICAgbmV3c291cmNlID0g
U291cmNlKCkKKyAgICAgICAgbGluZXMgPSBbIChpbmRlbnQgKyBsaW5lKSBmb3IgbGluZSBpbiBz
ZWxmLmxpbmVzXQorICAgICAgICBuZXdzb3VyY2UubGluZXMgPSBiZWZvcmUubGluZXMgKyBsaW5l
cyArICBhZnRlci5saW5lcworICAgICAgICByZXR1cm4gbmV3c291cmNlCisKKyAgICBkZWYgaW5k
ZW50KHNlbGYsIGluZGVudD0nICcgKiA0KToKKyAgICAgICAgIiIiIHJldHVybiBhIGNvcHkgb2Yg
dGhlIHNvdXJjZSBvYmplY3Qgd2l0aAorICAgICAgICAgICAgYWxsIGxpbmVzIGluZGVudGVkIGJ5
IHRoZSBnaXZlbiBpbmRlbnQtc3RyaW5nLgorICAgICAgICAiIiIKKyAgICAgICAgbmV3c291cmNl
ID0gU291cmNlKCkKKyAgICAgICAgbmV3c291cmNlLmxpbmVzID0gWyhpbmRlbnQrbGluZSkgZm9y
IGxpbmUgaW4gc2VsZi5saW5lc10KKyAgICAgICAgcmV0dXJuIG5ld3NvdXJjZQorCisgICAgZGVm
IGdldHN0YXRlbWVudChzZWxmLCBsaW5lbm8sIGFzc2VydGlvbj1GYWxzZSk6CisgICAgICAgICIi
IiByZXR1cm4gU291cmNlIHN0YXRlbWVudCB3aGljaCBjb250YWlucyB0aGUKKyAgICAgICAgICAg
IGdpdmVuIGxpbmVudW1iZXIgKGNvdW50ZWQgZnJvbSAwKS4KKyAgICAgICAgIiIiCisgICAgICAg
IHN0YXJ0LCBlbmQgPSBzZWxmLmdldHN0YXRlbWVudHJhbmdlKGxpbmVubywgYXNzZXJ0aW9uKQor
ICAgICAgICByZXR1cm4gc2VsZltzdGFydDplbmRdCisKKyAgICBkZWYgZ2V0c3RhdGVtZW50cmFu
Z2Uoc2VsZiwgbGluZW5vLCBhc3NlcnRpb249RmFsc2UpOgorICAgICAgICAiIiIgcmV0dXJuIChz
dGFydCwgZW5kKSB0dXBsZSB3aGljaCBzcGFucyB0aGUgbWluaW1hbAorICAgICAgICAgICAgc3Rh
dGVtZW50IHJlZ2lvbiB3aGljaCBjb250YWluaW5nIHRoZSBnaXZlbiBsaW5lbm8uCisgICAgICAg
ICIiIgorICAgICAgICBpZiBub3QgKDAgPD0gbGluZW5vIDwgbGVuKHNlbGYpKToKKyAgICAgICAg
ICAgIHJhaXNlIEluZGV4RXJyb3IoImxpbmVubyBvdXQgb2YgcmFuZ2UiKQorICAgICAgICBhc3Qs
IHN0YXJ0LCBlbmQgPSBnZXRzdGF0ZW1lbnRyYW5nZV9hc3QobGluZW5vLCBzZWxmKQorICAgICAg
ICByZXR1cm4gc3RhcnQsIGVuZAorCisgICAgZGVmIGRlaW5kZW50KHNlbGYsIG9mZnNldD1Ob25l
KToKKyAgICAgICAgIiIiIHJldHVybiBhIG5ldyBzb3VyY2Ugb2JqZWN0IGRlaW5kZW50ZWQgYnkg
b2Zmc2V0LgorICAgICAgICAgICAgSWYgb2Zmc2V0IGlzIE5vbmUgdGhlbiBndWVzcyBhbiBpbmRl
bnRhdGlvbiBvZmZzZXQgZnJvbQorICAgICAgICAgICAgdGhlIGZpcnN0IG5vbi1ibGFuayBsaW5l
LiAgU3Vic2VxdWVudCBsaW5lcyB3aGljaCBoYXZlIGEKKyAgICAgICAgICAgIGxvd2VyIGluZGVu
dGF0aW9uIG9mZnNldCB3aWxsIGJlIGNvcGllZCB2ZXJiYXRpbSBhcworICAgICAgICAgICAgdGhl
eSBhcmUgYXNzdW1lZCB0byBiZSBwYXJ0IG9mIG11bHRpbGluZXMuCisgICAgICAgICIiIgorICAg
ICAgICAjIFhYWCBtYXliZSB1c2UgdGhlIHRva2VuaXplciB0byBwcm9wZXJseSBoYW5kbGUgbXVs
dGlsaW5lCisgICAgICAgICMgICAgIHN0cmluZ3MgZXRjLnBwPworICAgICAgICBuZXdzb3VyY2Ug
PSBTb3VyY2UoKQorICAgICAgICBuZXdzb3VyY2UubGluZXNbOl0gPSBkZWluZGVudChzZWxmLmxp
bmVzLCBvZmZzZXQpCisgICAgICAgIHJldHVybiBuZXdzb3VyY2UKKworICAgIGRlZiBpc3BhcnNl
YWJsZShzZWxmLCBkZWluZGVudD1UcnVlKToKKyAgICAgICAgIiIiIHJldHVybiBUcnVlIGlmIHNv
dXJjZSBpcyBwYXJzZWFibGUsIGhldXJpc3RpY2FsbHkKKyAgICAgICAgICAgIGRlaW5kZW50aW5n
IGl0IGJ5IGRlZmF1bHQuCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBp
bXBvcnQgcGFyc2VyCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIHN5
bnRheF9jaGVja2VyID0gbGFtYmRhIHg6IGNvbXBpbGUoeCwgJ2FzZCcsICdleGVjJykKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIHN5bnRheF9jaGVja2VyID0gcGFyc2VyLnN1aXRlCisKKyAg
ICAgICAgaWYgZGVpbmRlbnQ6CisgICAgICAgICAgICBzb3VyY2UgPSBzdHIoc2VsZi5kZWluZGVu
dCgpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc291cmNlID0gc3RyKHNlbGYpCisgICAg
ICAgIHRyeToKKyAgICAgICAgICAgICNjb21waWxlKHNvdXJjZSsnXG4nLCAieCIsICJleGVjIikK
KyAgICAgICAgICAgIHN5bnRheF9jaGVja2VyKHNvdXJjZSsnXG4nKQorICAgICAgICBleGNlcHQg
S2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICByYWlzZQorICAgICAgICBleGNlcHQgRXhj
ZXB0aW9uOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVy
biAiXG4iLmpvaW4oc2VsZi5saW5lcykKKworICAgIGRlZiBjb21waWxlKHNlbGYsIGZpbGVuYW1l
PU5vbmUsIG1vZGU9J2V4ZWMnLAorICAgICAgICAgICAgICAgIGZsYWc9Z2VuZXJhdG9ycy5jb21w
aWxlcl9mbGFnLAorICAgICAgICAgICAgICAgIGRvbnRfaW5oZXJpdD0wLCBfZ2VuZnJhbWU9Tm9u
ZSk6CisgICAgICAgICIiIiByZXR1cm4gY29tcGlsZWQgY29kZSBvYmplY3QuIGlmIGZpbGVuYW1l
IGlzIE5vbmUKKyAgICAgICAgICAgIGludmVudCBhbiBhcnRpZmljaWFsIGZpbGVuYW1lIHdoaWNo
IGRpc3BsYXlzCisgICAgICAgICAgICB0aGUgc291cmNlL2xpbmUgcG9zaXRpb24gb2YgdGhlIGNh
bGxlciBmcmFtZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBmaWxlbmFtZSBvciBweS5w
YXRoLmxvY2FsKGZpbGVuYW1lKS5jaGVjayhmaWxlPTApOgorICAgICAgICAgICAgaWYgX2dlbmZy
YW1lIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgX2dlbmZyYW1lID0gc3lzLl9nZXRmcmFtZSgx
KSAjIHRoZSBjYWxsZXIKKyAgICAgICAgICAgIGZuLGxpbmVubyA9IF9nZW5mcmFtZS5mX2NvZGUu
Y29fZmlsZW5hbWUsIF9nZW5mcmFtZS5mX2xpbmVubworICAgICAgICAgICAgYmFzZSA9ICI8JWQt
Y29kZWdlbiAiICUgc2VsZi5fY29tcGlsZWNvdW50ZXIKKyAgICAgICAgICAgIHNlbGYuX19jbGFz
c19fLl9jb21waWxlY291bnRlciArPSAxCisgICAgICAgICAgICBpZiBub3QgZmlsZW5hbWU6Cisg
ICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBiYXNlICsgJyVzOiVkPicgJSAoZm4sIGxpbmVubykK
KyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBiYXNlICsgJyVy
ICVzOiVkPicgJSAoZmlsZW5hbWUsIGZuLCBsaW5lbm8pCisgICAgICAgIHNvdXJjZSA9ICJcbiIu
am9pbihzZWxmLmxpbmVzKSArICdcbicKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY28gPSBj
cHlfY29tcGlsZShzb3VyY2UsIGZpbGVuYW1lLCBtb2RlLCBmbGFnKQorICAgICAgICBleGNlcHQg
U3ludGF4RXJyb3I6CisgICAgICAgICAgICBleCA9IHN5cy5leGNfaW5mbygpWzFdCisgICAgICAg
ICAgICAjIHJlLXJlcHJlc2VudCBzeW50YXggZXJyb3JzIGZyb20gcGFyc2luZyBweXRob24gc3Ry
aW5ncworICAgICAgICAgICAgbXNnbGluZXMgPSBzZWxmLmxpbmVzWzpleC5saW5lbm9dCisgICAg
ICAgICAgICBpZiBleC5vZmZzZXQ6CisgICAgICAgICAgICAgICAgbXNnbGluZXMuYXBwZW5kKCIg
IipleC5vZmZzZXQgKyAnXicpCisgICAgICAgICAgICBtc2dsaW5lcy5hcHBlbmQoIihjb2RlIHdh
cyBjb21waWxlZCBwcm9iYWJseSBmcm9tIGhlcmU6ICVzKSIgJSBmaWxlbmFtZSkKKyAgICAgICAg
ICAgIG5ld2V4ID0gU3ludGF4RXJyb3IoJ1xuJy5qb2luKG1zZ2xpbmVzKSkKKyAgICAgICAgICAg
IG5ld2V4Lm9mZnNldCA9IGV4Lm9mZnNldAorICAgICAgICAgICAgbmV3ZXgubGluZW5vID0gZXgu
bGluZW5vCisgICAgICAgICAgICBuZXdleC50ZXh0ID0gZXgudGV4dAorICAgICAgICAgICAgcmFp
c2UgbmV3ZXgKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGZsYWcgJiBfQVNUX0ZMQUc6
CisgICAgICAgICAgICAgICAgcmV0dXJuIGNvCisgICAgICAgICAgICBsaW5lcyA9IFsoeCArICJc
biIpIGZvciB4IGluIHNlbGYubGluZXNdCisgICAgICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZv
WzBdID49IDM6CisgICAgICAgICAgICAgICAgIyBYWFggcHkzJ3MgaW5zcGVjdC5nZXRzb3VyY2Vm
aWxlKCkgY2hlY2tzIGZvciBhIG1vZHVsZQorICAgICAgICAgICAgICAgICMgYW5kIGEgcGVwMzAy
IF9fbG9hZGVyX18gLi4uIHdlIGRvbid0IGhhdmUgYSBtb2R1bGUKKyAgICAgICAgICAgICAgICAj
IGF0IGNvZGUgY29tcGlsZS10aW1lIHNvIHdlIG5lZWQgdG8gZmFrZSBpdCBoZXJlCisgICAgICAg
ICAgICAgICAgbSA9IE1vZHVsZVR5cGUoIl9weWNvZGVjb21waWxlX3BzZXVkb19tb2R1bGUiKQor
ICAgICAgICAgICAgICAgIHB5LnN0ZC5pbnNwZWN0Lm1vZHVsZXNieWZpbGVbZmlsZW5hbWVdID0g
Tm9uZQorICAgICAgICAgICAgICAgIHB5LnN0ZC5zeXMubW9kdWxlc1tOb25lXSA9IG0KKyAgICAg
ICAgICAgICAgICBtLl9fbG9hZGVyX18gPSAxCisgICAgICAgICAgICBweS5zdGQubGluZWNhY2hl
LmNhY2hlW2ZpbGVuYW1lXSA9ICgxLCBOb25lLCBsaW5lcywgZmlsZW5hbWUpCisgICAgICAgICAg
ICByZXR1cm4gY28KKworIworIyBwdWJsaWMgQVBJIHNob3J0Y3V0IGZ1bmN0aW9ucworIworCitk
ZWYgY29tcGlsZV8oc291cmNlLCBmaWxlbmFtZT1Ob25lLCBtb2RlPSdleGVjJywgZmxhZ3M9Cisg
ICAgICAgICAgICBnZW5lcmF0b3JzLmNvbXBpbGVyX2ZsYWcsIGRvbnRfaW5oZXJpdD0wKToKKyAg
ICAiIiIgY29tcGlsZSB0aGUgZ2l2ZW4gc291cmNlIHRvIGEgcmF3IGNvZGUgb2JqZWN0LAorICAg
ICAgICBhbmQgbWFpbnRhaW4gYW4gaW50ZXJuYWwgY2FjaGUgd2hpY2ggYWxsb3dzIGxhdGVyCisg
ICAgICAgIHJldHJpZXZhbCBvZiB0aGUgc291cmNlIGNvZGUgZm9yIHRoZSBjb2RlIG9iamVjdAor
ICAgICAgICBhbmQgYW55IHJlY3Vyc2l2ZWx5IGNyZWF0ZWQgY29kZSBvYmplY3RzLgorICAgICIi
IgorICAgIGlmIF9hc3QgaXMgbm90IE5vbmUgYW5kIGlzaW5zdGFuY2Uoc291cmNlLCBfYXN0LkFT
VCk6CisgICAgICAgICMgWFhYIHNob3VsZCBTb3VyY2Ugc3VwcG9ydCBoYXZpbmcgQVNUPworICAg
ICAgICByZXR1cm4gY3B5X2NvbXBpbGUoc291cmNlLCBmaWxlbmFtZSwgbW9kZSwgZmxhZ3MsIGRv
bnRfaW5oZXJpdCkKKyAgICBfZ2VuZnJhbWUgPSBzeXMuX2dldGZyYW1lKDEpICMgdGhlIGNhbGxl
cgorICAgIHMgPSBTb3VyY2Uoc291cmNlKQorICAgIGNvID0gcy5jb21waWxlKGZpbGVuYW1lLCBt
b2RlLCBmbGFncywgX2dlbmZyYW1lPV9nZW5mcmFtZSkKKyAgICByZXR1cm4gY28KKworCitkZWYg
Z2V0ZnNsaW5lbm8ob2JqKToKKyAgICAiIiIgUmV0dXJuIHNvdXJjZSBsb2NhdGlvbiAocGF0aCwg
bGluZW5vKSBmb3IgdGhlIGdpdmVuIG9iamVjdC4KKyAgICBJZiB0aGUgc291cmNlIGNhbm5vdCBi
ZSBkZXRlcm1pbmVkIHJldHVybiAoIiIsIC0xKQorICAgICIiIgorICAgIGltcG9ydCBfcHl0ZXN0
Ll9jb2RlCisgICAgdHJ5OgorICAgICAgICBjb2RlID0gX3B5dGVzdC5fY29kZS5Db2RlKG9iaikK
KyAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmbiA9IChw
eS5zdGQuaW5zcGVjdC5nZXRzb3VyY2VmaWxlKG9iaikgb3IKKyAgICAgICAgICAgICAgICAgIHB5
LnN0ZC5pbnNwZWN0LmdldGZpbGUob2JqKSkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAg
ICAgICAgICAgIHJldHVybiAiIiwgLTEKKworICAgICAgICBmc3BhdGggPSBmbiBhbmQgcHkucGF0
aC5sb2NhbChmbikgb3IgTm9uZQorICAgICAgICBsaW5lbm8gPSAtMQorICAgICAgICBpZiBmc3Bh
dGg6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgXywgbGluZW5vID0gZmluZHNv
dXJjZShvYmopCisgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICBw
YXNzCisgICAgZWxzZToKKyAgICAgICAgZnNwYXRoID0gY29kZS5wYXRoCisgICAgICAgIGxpbmVu
byA9IGNvZGUuZmlyc3RsaW5lbm8KKyAgICBhc3NlcnQgaXNpbnN0YW5jZShsaW5lbm8sIGludCkK
KyAgICByZXR1cm4gZnNwYXRoLCBsaW5lbm8KKworIworIyBoZWxwZXIgZnVuY3Rpb25zCisjCisK
K2RlZiBmaW5kc291cmNlKG9iaik6CisgICAgdHJ5OgorICAgICAgICBzb3VyY2VsaW5lcywgbGlu
ZW5vID0gcHkuc3RkLmluc3BlY3QuZmluZHNvdXJjZShvYmopCisgICAgZXhjZXB0IHB5LmJ1aWx0
aW4uX3N5c2V4OgorICAgICAgICByYWlzZQorICAgIGV4Y2VwdDoKKyAgICAgICAgcmV0dXJuIE5v
bmUsIC0xCisgICAgc291cmNlID0gU291cmNlKCkKKyAgICBzb3VyY2UubGluZXMgPSBbbGluZS5y
c3RyaXAoKSBmb3IgbGluZSBpbiBzb3VyY2VsaW5lc10KKyAgICByZXR1cm4gc291cmNlLCBsaW5l
bm8KKworZGVmIGdldHNvdXJjZShvYmosICoqa3dhcmdzKToKKyAgICBpbXBvcnQgX3B5dGVzdC5f
Y29kZQorICAgIG9iaiA9IF9weXRlc3QuX2NvZGUuZ2V0cmF3Y29kZShvYmopCisgICAgdHJ5Ogor
ICAgICAgICBzdHJzcmMgPSBpbnNwZWN0LmdldHNvdXJjZShvYmopCisgICAgZXhjZXB0IEluZGVu
dGF0aW9uRXJyb3I6CisgICAgICAgIHN0cnNyYyA9ICJcIkJ1Z2d5IHB5dGhvbiB2ZXJzaW9uIGNv
bnNpZGVyIHVwZ3JhZGluZywgY2Fubm90IGdldCBzb3VyY2VcIiIKKyAgICBhc3NlcnQgaXNpbnN0
YW5jZShzdHJzcmMsIHN0cikKKyAgICByZXR1cm4gU291cmNlKHN0cnNyYywgKiprd2FyZ3MpCisK
K2RlZiBkZWluZGVudChsaW5lcywgb2Zmc2V0PU5vbmUpOgorICAgIGlmIG9mZnNldCBpcyBOb25l
OgorICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgICAgIGxpbmUgPSBsaW5lLmV4
cGFuZHRhYnMoKQorICAgICAgICAgICAgcyA9IGxpbmUubHN0cmlwKCkKKyAgICAgICAgICAgIGlm
IHM6CisgICAgICAgICAgICAgICAgb2Zmc2V0ID0gbGVuKGxpbmUpLWxlbihzKQorICAgICAgICAg
ICAgICAgIGJyZWFrCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvZmZzZXQgPSAwCisgICAg
aWYgb2Zmc2V0ID09IDA6CisgICAgICAgIHJldHVybiBsaXN0KGxpbmVzKQorICAgIG5ld2xpbmVz
ID0gW10KKyAgICBkZWYgcmVhZGxpbmVfZ2VuZXJhdG9yKGxpbmVzKToKKyAgICAgICAgZm9yIGxp
bmUgaW4gbGluZXM6CisgICAgICAgICAgICB5aWVsZCBsaW5lICsgJ1xuJworICAgICAgICB3aGls
ZSBUcnVlOgorICAgICAgICAgICAgeWllbGQgJycKKworICAgIGl0ID0gcmVhZGxpbmVfZ2VuZXJh
dG9yKGxpbmVzKQorCisgICAgdHJ5OgorICAgICAgICBmb3IgXywgXywgKHNsaW5lLCBfKSwgKGVs
aW5lLCBfKSwgXyBpbiB0b2tlbml6ZS5nZW5lcmF0ZV90b2tlbnMobGFtYmRhOiBuZXh0KGl0KSk6
CisgICAgICAgICAgICBpZiBzbGluZSA+IGxlbihsaW5lcyk6CisgICAgICAgICAgICAgICAgYnJl
YWsgIyBFbmQgb2YgaW5wdXQgcmVhY2hlZAorICAgICAgICAgICAgaWYgc2xpbmUgPiBsZW4obmV3
bGluZXMpOgorICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lc1tzbGluZSAtIDFdLmV4cGFuZHRh
YnMoKQorICAgICAgICAgICAgICAgIGlmIGxpbmUubHN0cmlwKCkgYW5kIGxpbmVbOm9mZnNldF0u
aXNzcGFjZSgpOgorICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZVtvZmZzZXQ6XSAjIERl
aW5kZW50CisgICAgICAgICAgICAgICAgbmV3bGluZXMuYXBwZW5kKGxpbmUpCisKKyAgICAgICAg
ICAgIGZvciBpIGluIHJhbmdlKHNsaW5lLCBlbGluZSk6CisgICAgICAgICAgICAgICAgIyBEb24n
dCBkZWluZGVudCBjb250aW51aW5nIGxpbmVzIG9mCisgICAgICAgICAgICAgICAgIyBtdWx0aWxp
bmUgdG9rZW5zIChpLmUuIG11bHRpbGluZSBzdHJpbmdzKQorICAgICAgICAgICAgICAgIG5ld2xp
bmVzLmFwcGVuZChsaW5lc1tpXSkKKyAgICBleGNlcHQgKEluZGVudGF0aW9uRXJyb3IsIHRva2Vu
aXplLlRva2VuRXJyb3IpOgorICAgICAgICBwYXNzCisgICAgIyBBZGQgYW55IGxpbmVzIHdlIGRp
ZG4ndCBzZWUuIEUuZy4gaWYgYW4gZXhjZXB0aW9uIHdhcyByYWlzZWQuCisgICAgbmV3bGluZXMu
ZXh0ZW5kKGxpbmVzW2xlbihuZXdsaW5lcyk6XSkKKyAgICByZXR1cm4gbmV3bGluZXMKKworCitk
ZWYgZ2V0X3N0YXRlbWVudF9zdGFydGVuZDIobGluZW5vLCBub2RlKToKKyAgICBpbXBvcnQgYXN0
CisgICAgIyBmbGF0dGVuIGFsbCBzdGF0ZW1lbnRzIGFuZCBleGNlcHQgaGFuZGxlcnMgaW50byBv
bmUgbGluZW5vLWxpc3QKKyAgICAjIEFTVCdzIGxpbmUgbnVtYmVycyBzdGFydCBpbmRleGluZyBh
dCAxCisgICAgbCA9IFtdCisgICAgZm9yIHggaW4gYXN0LndhbGsobm9kZSk6CisgICAgICAgIGlm
IGlzaW5zdGFuY2UoeCwgX2FzdC5zdG10KSBvciBpc2luc3RhbmNlKHgsIF9hc3QuRXhjZXB0SGFu
ZGxlcik6CisgICAgICAgICAgICBsLmFwcGVuZCh4LmxpbmVubyAtIDEpCisgICAgICAgICAgICBm
b3IgbmFtZSBpbiAiZmluYWxib2R5IiwgIm9yZWxzZSI6CisgICAgICAgICAgICAgICAgdmFsID0g
Z2V0YXR0cih4LCBuYW1lLCBOb25lKQorICAgICAgICAgICAgICAgIGlmIHZhbDoKKyAgICAgICAg
ICAgICAgICAgICAgIyB0cmVhdCB0aGUgZmluYWxseS9vcmVsc2UgcGFydCBhcyBpdHMgb3duIHN0
YXRlbWVudAorICAgICAgICAgICAgICAgICAgICBsLmFwcGVuZCh2YWxbMF0ubGluZW5vIC0gMSAt
IDEpCisgICAgbC5zb3J0KCkKKyAgICBpbnNlcnRfaW5kZXggPSBiaXNlY3RfcmlnaHQobCwgbGlu
ZW5vKQorICAgIHN0YXJ0ID0gbFtpbnNlcnRfaW5kZXggLSAxXQorICAgIGlmIGluc2VydF9pbmRl
eCA+PSBsZW4obCk6CisgICAgICAgIGVuZCA9IE5vbmUKKyAgICBlbHNlOgorICAgICAgICBlbmQg
PSBsW2luc2VydF9pbmRleF0KKyAgICByZXR1cm4gc3RhcnQsIGVuZAorCisKK2RlZiBnZXRzdGF0
ZW1lbnRyYW5nZV9hc3QobGluZW5vLCBzb3VyY2UsIGFzc2VydGlvbj1GYWxzZSwgYXN0bm9kZT1O
b25lKToKKyAgICBpZiBhc3Rub2RlIGlzIE5vbmU6CisgICAgICAgIGNvbnRlbnQgPSBzdHIoc291
cmNlKQorICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvIDwgKDIsNyk6CisgICAgICAgICAgICBj
b250ZW50ICs9ICJcbiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYXN0bm9kZSA9IGNvbXBp
bGUoY29udGVudCwgInNvdXJjZSIsICJleGVjIiwgMTAyNCkgICMgMTAyNCBmb3IgQVNUCisgICAg
ICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgc3RhcnQsIGVuZCA9IGdldHN0YXRl
bWVudHJhbmdlX29sZChsaW5lbm8sIHNvdXJjZSwgYXNzZXJ0aW9uKQorICAgICAgICAgICAgcmV0
dXJuIE5vbmUsIHN0YXJ0LCBlbmQKKyAgICBzdGFydCwgZW5kID0gZ2V0X3N0YXRlbWVudF9zdGFy
dGVuZDIobGluZW5vLCBhc3Rub2RlKQorICAgICMgd2UgbmVlZCB0byBjb3JyZWN0IHRoZSBlbmQ6
CisgICAgIyAtIGFzdC1wYXJzaW5nIHN0cmlwcyBjb21tZW50cworICAgICMgLSB0aGVyZSBtaWdo
dCBiZSBlbXB0eSBsaW5lcworICAgICMgLSB3ZSBtaWdodCBoYXZlIGxlc3NlciBpbmRlbnRlZCBj
b2RlIGJsb2NrcyBhdCB0aGUgZW5kCisgICAgaWYgZW5kIGlzIE5vbmU6CisgICAgICAgIGVuZCA9
IGxlbihzb3VyY2UubGluZXMpCisKKyAgICBpZiBlbmQgPiBzdGFydCArIDE6CisgICAgICAgICMg
bWFrZSBzdXJlIHdlIGRvbid0IHNwYW4gZGlmZmVyZW50bHkgaW5kZW50ZWQgY29kZSBibG9ja3MK
KyAgICAgICAgIyBieSB1c2luZyB0aGUgQmxvY2tGaW5kZXIgaGVscGVyIHVzZWQgd2hpY2ggaW5z
cGVjdC5nZXRzb3VyY2UoKSB1c2VzIGl0c2VsZgorICAgICAgICBibG9ja19maW5kZXIgPSBpbnNw
ZWN0LkJsb2NrRmluZGVyKCkKKyAgICAgICAgIyBpZiB3ZSBzdGFydCB3aXRoIGFuIGluZGVudGVk
IGxpbmUsIHB1dCBibG9ja2ZpbmRlciB0byAic3RhcnRlZCIgbW9kZQorICAgICAgICBibG9ja19m
aW5kZXIuc3RhcnRlZCA9IHNvdXJjZS5saW5lc1tzdGFydF1bMF0uaXNzcGFjZSgpCisgICAgICAg
IGl0ID0gKCh4ICsgIlxuIikgZm9yIHggaW4gc291cmNlLmxpbmVzW3N0YXJ0OmVuZF0pCisgICAg
ICAgIHRyeToKKyAgICAgICAgICAgIGZvciB0b2sgaW4gdG9rZW5pemUuZ2VuZXJhdGVfdG9rZW5z
KGxhbWJkYTogbmV4dChpdCkpOgorICAgICAgICAgICAgICAgIGJsb2NrX2ZpbmRlci50b2tlbmVh
dGVyKCp0b2spCisgICAgICAgIGV4Y2VwdCAoaW5zcGVjdC5FbmRPZkJsb2NrLCBJbmRlbnRhdGlv
bkVycm9yKToKKyAgICAgICAgICAgIGVuZCA9IGJsb2NrX2ZpbmRlci5sYXN0ICsgc3RhcnQKKyAg
ICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHBhc3MKKworICAgICMgdGhlIGVu
ZCBtaWdodCBzdGlsbCBwb2ludCB0byBhIGNvbW1lbnQgb3IgZW1wdHkgbGluZSwgY29ycmVjdCBp
dAorICAgIHdoaWxlIGVuZDoKKyAgICAgICAgbGluZSA9IHNvdXJjZS5saW5lc1tlbmQgLSAxXS5s
c3RyaXAoKQorICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIiMiKSBvciBub3QgbGluZToKKyAg
ICAgICAgICAgIGVuZCAtPSAxCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBicmVhaworICAg
IHJldHVybiBhc3Rub2RlLCBzdGFydCwgZW5kCisKKworZGVmIGdldHN0YXRlbWVudHJhbmdlX29s
ZChsaW5lbm8sIHNvdXJjZSwgYXNzZXJ0aW9uPUZhbHNlKToKKyAgICAiIiIgcmV0dXJuIChzdGFy
dCwgZW5kKSB0dXBsZSB3aGljaCBzcGFucyB0aGUgbWluaW1hbAorICAgICAgICBzdGF0ZW1lbnQg
cmVnaW9uIHdoaWNoIGNvbnRhaW5pbmcgdGhlIGdpdmVuIGxpbmVuby4KKyAgICAgICAgcmFpc2Ug
YW4gSW5kZXhFcnJvciBpZiBubyBzdWNoIHN0YXRlbWVudHJhbmdlIGNhbiBiZSBmb3VuZC4KKyAg
ICAiIiIKKyAgICAjIFhYWCB0aGlzIGxvZ2ljIGlzIG9ubHkgdXNlZCBvbiBweXRob24yLjQgYW5k
IGJlbG93CisgICAgIyAxLiBmaW5kIHRoZSBzdGFydCBvZiB0aGUgc3RhdGVtZW50CisgICAgZnJv
bSBjb2Rlb3AgaW1wb3J0IGNvbXBpbGVfY29tbWFuZAorICAgIGZvciBzdGFydCBpbiByYW5nZShs
aW5lbm8sIC0xLCAtMSk6CisgICAgICAgIGlmIGFzc2VydGlvbjoKKyAgICAgICAgICAgIGxpbmUg
PSBzb3VyY2UubGluZXNbc3RhcnRdCisgICAgICAgICAgICAjIHRoZSBmb2xsb3dpbmcgbGluZXMg
YXJlIG5vdCBmdWxseSB0ZXN0ZWQsIGNoYW5nZSB3aXRoIGNhcmUKKyAgICAgICAgICAgIGlmICdz
dXBlcicgaW4gbGluZSBhbmQgJ3NlbGYnIGluIGxpbmUgYW5kICdfX2luaXRfXycgaW4gbGluZToK
KyAgICAgICAgICAgICAgICByYWlzZSBJbmRleEVycm9yKCJsaWtlbHkgYSBzdWJjbGFzcyIpCisg
ICAgICAgICAgICBpZiAiYXNzZXJ0IiBub3QgaW4gbGluZSBhbmQgInJhaXNlIiBub3QgaW4gbGlu
ZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICB0cnlsaW5lcyA9IHNvdXJjZS5s
aW5lc1tzdGFydDpsaW5lbm8rMV0KKyAgICAgICAgIyBxdWljayBoYWNrIHRvIHByZXBhcmUgcGFy
c2luZyBhbiBpbmRlbnRlZCBsaW5lIHdpdGgKKyAgICAgICAgIyBjb21waWxlX2NvbW1hbmQoKSAo
d2hpY2ggZXJyb3JzIG9uICJyZXR1cm4iIG91dHNpZGUgZGVmcykKKyAgICAgICAgdHJ5bGluZXMu
aW5zZXJ0KDAsICdkZWYgeHh4KCk6JykKKyAgICAgICAgdHJ5c291cmNlID0gJ1xuICcuam9pbih0
cnlsaW5lcykKKyAgICAgICAgIyAgICAgICAgICAgICAgXiBzcGFjZSBoZXJlCisgICAgICAgIHRy
eToKKyAgICAgICAgICAgIGNvbXBpbGVfY29tbWFuZCh0cnlzb3VyY2UpCisgICAgICAgIGV4Y2Vw
dCAoU3ludGF4RXJyb3IsIE92ZXJmbG93RXJyb3IsIFZhbHVlRXJyb3IpOgorICAgICAgICAgICAg
Y29udGludWUKKworICAgICAgICAjIDIuIGZpbmQgdGhlIGVuZCBvZiB0aGUgc3RhdGVtZW50Cisg
ICAgICAgIGZvciBlbmQgaW4gcmFuZ2UobGluZW5vKzEsIGxlbihzb3VyY2UpKzEpOgorICAgICAg
ICAgICAgdHJ5c291cmNlID0gc291cmNlW3N0YXJ0OmVuZF0KKyAgICAgICAgICAgIGlmIHRyeXNv
dXJjZS5pc3BhcnNlYWJsZSgpOgorICAgICAgICAgICAgICAgIHJldHVybiBzdGFydCwgZW5kCisg
ICAgcmFpc2UgU3ludGF4RXJyb3IoIm5vIHZhbGlkIHNvdXJjZSByYW5nZSBhcm91bmQgbGluZSAl
ZCAiICUgKGxpbmVubywpKQorCisKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVk
L3czYy90b29scy9weXRlc3QvX3B5dGVzdC9fcGx1Z2d5LnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1w
b3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L19wbHVnZ3kucHkKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjg3ZDMyY2Y4ZGQxCi0tLSAvZGV2L251bGwKKysrIGIv
V2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L19wbHVnZ3ku
cHkKQEAgLTAsMCArMSwxMSBAQAorIiIiCitpbXBvcnRzIHN5bWJvbHMgZnJvbSB2ZW5kb3JlZCAi
cGx1Z2d5IiBpZiBhdmFpbGFibGUsIG90aGVyd2lzZQorZmFsbHMgYmFjayB0byBpbXBvcnRpbmcg
InBsdWdneSIgZnJvbSB0aGUgZGVmYXVsdCBuYW1lc3BhY2UuCisiIiIKKwordHJ5OgorICAgIGZy
b20gX3B5dGVzdC52ZW5kb3JlZF9wYWNrYWdlcy5wbHVnZ3kgaW1wb3J0ICogICMgbm9xYQorICAg
IGZyb20gX3B5dGVzdC52ZW5kb3JlZF9wYWNrYWdlcy5wbHVnZ3kgaW1wb3J0IF9fdmVyc2lvbl9f
ICAjIG5vcWEKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBmcm9tIHBsdWdneSBpbXBvcnQgKiAg
IyBub3FhCisgICAgZnJvbSBwbHVnZ3kgaW1wb3J0IF9fdmVyc2lvbl9fICAjIG5vcWEKZGlmZiAt
LWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9h
c3NlcnRpb24vX19pbml0X18ucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMv
cHl0ZXN0L19weXRlc3QvYXNzZXJ0aW9uL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwLi42OTIxZGViMmE2MAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRy
aXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9hc3NlcnRpb24vX19p
bml0X18ucHkKQEAgLTAsMCArMSwxNzYgQEAKKyIiIgorc3VwcG9ydCBmb3IgcHJlc2VudGluZyBk
ZXRhaWxlZCBpbmZvcm1hdGlvbiBpbiBmYWlsaW5nIGFzc2VydGlvbnMuCisiIiIKK2ltcG9ydCBw
eQoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitmcm9tIF9weXRlc3QubW9ua2V5cGF0Y2ggaW1wb3J0
IG1vbmtleXBhdGNoCitmcm9tIF9weXRlc3QuYXNzZXJ0aW9uIGltcG9ydCB1dGlsCisKKworZGVm
IHB5dGVzdF9hZGRvcHRpb24ocGFyc2VyKToKKyAgICBncm91cCA9IHBhcnNlci5nZXRncm91cCgi
ZGVidWdjb25maWciKQorICAgIGdyb3VwLmFkZG9wdGlvbignLS1hc3NlcnQnLAorICAgICAgICAg
ICAgICAgICAgICBhY3Rpb249InN0b3JlIiwKKyAgICAgICAgICAgICAgICAgICAgZGVzdD0iYXNz
ZXJ0bW9kZSIsCisgICAgICAgICAgICAgICAgICAgIGNob2ljZXM9KCJyZXdyaXRlIiwgInJlaW50
ZXJwIiwgInBsYWluIiwpLAorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PSJyZXdyaXRlIiwK
KyAgICAgICAgICAgICAgICAgICAgbWV0YXZhcj0iTU9ERSIsCisgICAgICAgICAgICAgICAgICAg
IGhlbHA9IiIiY29udHJvbCBhc3NlcnRpb24gZGVidWdnaW5nIHRvb2xzLiAgJ3BsYWluJworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmZvcm1zIG5vIGFzc2VydGlvbiBkZWJ1Z2dpbmcu
ICAncmVpbnRlcnAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRzIGFz
c2VydCBzdGF0ZW1lbnRzIGFmdGVyIHRoZXkgZmFpbGVkCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdG8gcHJvdmlkZSBhc3NlcnRpb24gZXhwcmVzc2lvbiBpbmZvcm1hdGlvbi4KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAncmV3cml0ZScgKHRoZSBkZWZhdWx0KSByZXdyaXRlcyBh
c3NlcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnRzIGluIHRlc3QgbW9k
dWxlcyBvbiBpbXBvcnQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlIGFz
c2VydCBleHByZXNzaW9uIGluZm9ybWF0aW9uLiAiIiIpCisgICAgZ3JvdXAuYWRkb3B0aW9uKCct
LW5vLWFzc2VydCcsCisgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisg
ICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgIGRl
c3Q9Im5vYXNzZXJ0IiwKKyAgICAgICAgICAgICAgICAgICAgaGVscD0iREVQUkVDQVRFRCBlcXVp
dmFsZW50IHRvIC0tYXNzZXJ0PXBsYWluIikKKyAgICBncm91cC5hZGRvcHRpb24oJy0tbm9tYWdp
YycsICctLW5vLW1hZ2ljJywKKyAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVl
IiwKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAg
ICAgaGVscD0iREVQUkVDQVRFRCBlcXVpdmFsZW50IHRvIC0tYXNzZXJ0PXBsYWluIikKKworCitj
bGFzcyBBc3NlcnRpb25TdGF0ZToKKyAgICAiIiJTdGF0ZSBmb3IgdGhlIGFzc2VydGlvbiBwbHVn
aW4uIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29uZmlnLCBtb2RlKToKKyAgICAgICAg
c2VsZi5tb2RlID0gbW9kZQorICAgICAgICBzZWxmLnRyYWNlID0gY29uZmlnLnRyYWNlLnJvb3Qu
Z2V0KCJhc3NlcnRpb24iKQorCisKK2RlZiBweXRlc3RfY29uZmlndXJlKGNvbmZpZyk6CisgICAg
bW9kZSA9IGNvbmZpZy5nZXR2YWx1ZSgiYXNzZXJ0bW9kZSIpCisgICAgaWYgY29uZmlnLmdldHZh
bHVlKCJub2Fzc2VydCIpIG9yIGNvbmZpZy5nZXR2YWx1ZSgibm9tYWdpYyIpOgorICAgICAgICBt
b2RlID0gInBsYWluIgorICAgIGlmIG1vZGUgPT0gInJld3JpdGUiOgorICAgICAgICB0cnk6Cisg
ICAgICAgICAgICBpbXBvcnQgYXN0ICAjIG5vcWEKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9y
OgorICAgICAgICAgICAgbW9kZSA9ICJyZWludGVycCIKKyAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgICMgQm90aCBKeXRob24gYW5kIENQeXRob24gMi42LjAgaGF2ZSBBU1QgYnVncyB0aGF0IG1h
a2UgdGhlCisgICAgICAgICAgICAjIGFzc2VydGlvbiByZXdyaXRpbmcgaG9vayBtYWxmdW5jdGlv
bi4KKyAgICAgICAgICAgIGlmIChzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnamF2YScpIG9yCisg
ICAgICAgICAgICAgICAgICAgIHN5cy52ZXJzaW9uX2luZm9bOjNdID09ICgyLCA2LCAwKSk6Cisg
ICAgICAgICAgICAgICAgbW9kZSA9ICJyZWludGVycCIKKyAgICBpZiBtb2RlICE9ICJwbGFpbiI6
CisgICAgICAgIF9sb2FkX21vZHVsZXMobW9kZSkKKyAgICAgICAgbSA9IG1vbmtleXBhdGNoKCkK
KyAgICAgICAgY29uZmlnLl9jbGVhbnVwLmFwcGVuZChtLnVuZG8pCisgICAgICAgIG0uc2V0YXR0
cihweS5idWlsdGluLmJ1aWx0aW5zLCAnQXNzZXJ0aW9uRXJyb3InLAorICAgICAgICAgICAgICAg
ICAgcmVpbnRlcnByZXQuQXNzZXJ0aW9uRXJyb3IpICAjIG5vcWEKKyAgICBob29rID0gTm9uZQor
ICAgIGlmIG1vZGUgPT0gInJld3JpdGUiOgorICAgICAgICBob29rID0gcmV3cml0ZS5Bc3NlcnRp
b25SZXdyaXRpbmdIb29rKCkgICMgbm9xYQorICAgICAgICBzeXMubWV0YV9wYXRoLmluc2VydCgw
LCBob29rKQorICAgIHdhcm5fYWJvdXRfbWlzc2luZ19hc3NlcnRpb24obW9kZSkKKyAgICBjb25m
aWcuX2Fzc2VydHN0YXRlID0gQXNzZXJ0aW9uU3RhdGUoY29uZmlnLCBtb2RlKQorICAgIGNvbmZp
Zy5fYXNzZXJ0c3RhdGUuaG9vayA9IGhvb2sKKyAgICBjb25maWcuX2Fzc2VydHN0YXRlLnRyYWNl
KCJjb25maWd1cmVkIHdpdGggbW9kZSBzZXQgdG8gJXIiICUgKG1vZGUsKSkKKyAgICBkZWYgdW5k
bygpOgorICAgICAgICBob29rID0gY29uZmlnLl9hc3NlcnRzdGF0ZS5ob29rCisgICAgICAgIGlm
IGhvb2sgaXMgbm90IE5vbmUgYW5kIGhvb2sgaW4gc3lzLm1ldGFfcGF0aDoKKyAgICAgICAgICAg
IHN5cy5tZXRhX3BhdGgucmVtb3ZlKGhvb2spCisgICAgY29uZmlnLmFkZF9jbGVhbnVwKHVuZG8p
CisKKworZGVmIHB5dGVzdF9jb2xsZWN0aW9uKHNlc3Npb24pOgorICAgICMgdGhpcyBob29rIGlz
IG9ubHkgY2FsbGVkIHdoZW4gdGVzdCBtb2R1bGVzIGFyZSBjb2xsZWN0ZWQKKyAgICAjIHNvIGZv
ciBleGFtcGxlIG5vdCBpbiB0aGUgbWFzdGVyIHByb2Nlc3Mgb2YgcHl0ZXN0LXhkaXN0CisgICAg
IyAod2hpY2ggZG9lcyBub3QgY29sbGVjdCB0ZXN0IG1vZHVsZXMpCisgICAgaG9vayA9IHNlc3Np
b24uY29uZmlnLl9hc3NlcnRzdGF0ZS5ob29rCisgICAgaWYgaG9vayBpcyBub3QgTm9uZToKKyAg
ICAgICAgaG9vay5zZXRfc2Vzc2lvbihzZXNzaW9uKQorCisKK2RlZiBfcnVubmluZ19vbl9jaSgp
OgorICAgICIiIkNoZWNrIGlmIHdlJ3JlIGN1cnJlbnRseSBydW5uaW5nIG9uIGEgQ0kgc3lzdGVt
LiIiIgorICAgIGVudl92YXJzID0gWydDSScsICdCVUlMRF9OVU1CRVInXQorICAgIHJldHVybiBh
bnkodmFyIGluIG9zLmVudmlyb24gZm9yIHZhciBpbiBlbnZfdmFycykKKworCitkZWYgcHl0ZXN0
X3J1bnRlc3Rfc2V0dXAoaXRlbSk6CisgICAgIiIiU2V0dXAgdGhlIHB5dGVzdF9hc3NlcnRyZXBy
X2NvbXBhcmUgaG9vaworCisgICAgVGhlIG5ld2ludGVycHJldCBhbmQgcmV3cml0ZSBtb2R1bGVz
IHdpbGwgdXNlIHV0aWwuX3JlcHJjb21wYXJlIGlmCisgICAgaXQgZXhpc3RzIHRvIHVzZSBjdXN0
b20gcmVwb3J0aW5nIHZpYSB0aGUKKyAgICBweXRlc3RfYXNzZXJ0cmVwcl9jb21wYXJlIGhvb2su
ICBUaGlzIHNldHMgdXAgdGhpcyBjdXN0b20KKyAgICBjb21wYXJpc29uIGZvciB0aGUgdGVzdC4K
KyAgICAiIiIKKyAgICBkZWYgY2FsbGJpbnJlcHIob3AsIGxlZnQsIHJpZ2h0KToKKyAgICAgICAg
IiIiQ2FsbCB0aGUgcHl0ZXN0X2Fzc2VydHJlcHJfY29tcGFyZSBob29rIGFuZCBwcmVwYXJlIHRo
ZSByZXN1bHQKKworICAgICAgICBUaGlzIHVzZXMgdGhlIGZpcnN0IHJlc3VsdCBmcm9tIHRoZSBo
b29rIGFuZCB0aGVuIGVuc3VyZXMgdGhlCisgICAgICAgIGZvbGxvd2luZzoKKyAgICAgICAgKiBP
dmVybHkgdmVyYm9zZSBleHBsYW5hdGlvbnMgYXJlIGRyb3BwZWQgdW5sZXNzIC12diB3YXMgdXNl
ZCBvcgorICAgICAgICAgIHJ1bm5pbmcgb24gYSBDSS4KKyAgICAgICAgKiBFbWJlZGRlZCBuZXds
aW5lcyBhcmUgZXNjYXBlZCB0byBoZWxwIHV0aWwuZm9ybWF0X2V4cGxhbmF0aW9uKCkKKyAgICAg
ICAgICBsYXRlci4KKyAgICAgICAgKiBJZiB0aGUgcmV3cml0ZSBtb2RlIGlzIHVzZWQgZW1iZWRk
ZWQgJS1jaGFyYWN0ZXJzIGFyZSByZXBsYWNlZAorICAgICAgICAgIHRvIHByb3RlY3QgbGF0ZXIg
JSBmb3JtYXR0aW5nLgorCisgICAgICAgIFRoZSByZXN1bHQgY2FuIGJlIGZvcm1hdHRlZCBieSB1
dGlsLmZvcm1hdF9leHBsYW5hdGlvbigpIGZvcgorICAgICAgICBwcmV0dHkgcHJpbnRpbmcuCisg
ICAgICAgICIiIgorICAgICAgICBob29rX3Jlc3VsdCA9IGl0ZW0uaWhvb2sucHl0ZXN0X2Fzc2Vy
dHJlcHJfY29tcGFyZSgKKyAgICAgICAgICAgIGNvbmZpZz1pdGVtLmNvbmZpZywgb3A9b3AsIGxl
ZnQ9bGVmdCwgcmlnaHQ9cmlnaHQpCisgICAgICAgIGZvciBuZXdfZXhwbCBpbiBob29rX3Jlc3Vs
dDoKKyAgICAgICAgICAgIGlmIG5ld19leHBsOgorICAgICAgICAgICAgICAgIGlmIChzdW0obGVu
KHApIGZvciBwIGluIG5ld19leHBsWzE6XSkgPiA4MCo4IGFuZAorICAgICAgICAgICAgICAgICAg
ICAgICAgaXRlbS5jb25maWcub3B0aW9uLnZlcmJvc2UgPCAyIGFuZAorICAgICAgICAgICAgICAg
ICAgICAgICAgbm90IF9ydW5uaW5nX29uX2NpKCkpOgorICAgICAgICAgICAgICAgICAgICBzaG93
X21heCA9IDEwCisgICAgICAgICAgICAgICAgICAgIHRydW5jYXRlZF9saW5lcyA9IGxlbihuZXdf
ZXhwbCkgLSBzaG93X21heAorICAgICAgICAgICAgICAgICAgICBuZXdfZXhwbFtzaG93X21heDpd
ID0gW3B5LmJ1aWx0aW4uX3RvdGV4dCgKKyAgICAgICAgICAgICAgICAgICAgICAgICdEZXRhaWxl
ZCBpbmZvcm1hdGlvbiB0cnVuY2F0ZWQgKCVkIG1vcmUgbGluZXMpJworICAgICAgICAgICAgICAg
ICAgICAgICAgJywgdXNlICItdnYiIHRvIHNob3cnICUgdHJ1bmNhdGVkX2xpbmVzKV0KKyAgICAg
ICAgICAgICAgICBuZXdfZXhwbCA9IFtsaW5lLnJlcGxhY2UoIlxuIiwgIlxcbiIpIGZvciBsaW5l
IGluIG5ld19leHBsXQorICAgICAgICAgICAgICAgIHJlcyA9IHB5LmJ1aWx0aW4uX3RvdGV4dCgi
XG5+Iikuam9pbihuZXdfZXhwbCkKKyAgICAgICAgICAgICAgICBpZiBpdGVtLmNvbmZpZy5nZXR2
YWx1ZSgiYXNzZXJ0bW9kZSIpID09ICJyZXdyaXRlIjoKKyAgICAgICAgICAgICAgICAgICAgcmVz
ID0gcmVzLnJlcGxhY2UoIiUiLCAiJSUiKQorICAgICAgICAgICAgICAgIHJldHVybiByZXMKKyAg
ICB1dGlsLl9yZXByY29tcGFyZSA9IGNhbGxiaW5yZXByCisKKworZGVmIHB5dGVzdF9ydW50ZXN0
X3RlYXJkb3duKGl0ZW0pOgorICAgIHV0aWwuX3JlcHJjb21wYXJlID0gTm9uZQorCisKK2RlZiBw
eXRlc3Rfc2Vzc2lvbmZpbmlzaChzZXNzaW9uKToKKyAgICBob29rID0gc2Vzc2lvbi5jb25maWcu
X2Fzc2VydHN0YXRlLmhvb2sKKyAgICBpZiBob29rIGlzIG5vdCBOb25lOgorICAgICAgICBob29r
LnNlc3Npb24gPSBOb25lCisKKworZGVmIF9sb2FkX21vZHVsZXMobW9kZSk6CisgICAgIiIiTGF6
aWx5IGltcG9ydCBhc3NlcnRpb24gcmVsYXRlZCBjb2RlLiIiIgorICAgIGdsb2JhbCByZXdyaXRl
LCByZWludGVycHJldAorICAgIGZyb20gX3B5dGVzdC5hc3NlcnRpb24gaW1wb3J0IHJlaW50ZXJw
cmV0ICAjIG5vcWEKKyAgICBpZiBtb2RlID09ICJyZXdyaXRlIjoKKyAgICAgICAgZnJvbSBfcHl0
ZXN0LmFzc2VydGlvbiBpbXBvcnQgcmV3cml0ZSAgIyBub3FhCisKKworZGVmIHdhcm5fYWJvdXRf
bWlzc2luZ19hc3NlcnRpb24obW9kZSk6CisgICAgdHJ5OgorICAgICAgICBhc3NlcnQgRmFsc2UK
KyAgICBleGNlcHQgQXNzZXJ0aW9uRXJyb3I6CisgICAgICAgIHBhc3MKKyAgICBlbHNlOgorICAg
ICAgICBpZiBtb2RlID09ICJyZXdyaXRlIjoKKyAgICAgICAgICAgIHNwZWNpZmljYWxseSA9ICgi
YXNzZXJ0aW9ucyB3aGljaCBhcmUgbm90IGluIHRlc3QgbW9kdWxlcyAiCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIndpbGwgYmUgaWdub3JlZCIpCisgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICBzcGVjaWZpY2FsbHkgPSAiZmFpbGluZyB0ZXN0cyBtYXkgcmVwb3J0IGFzIHBhc3Npbmci
CisKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiV0FSTklORzogIiArIHNwZWNpZmljYWxseSAr
CisgICAgICAgICAgICAgICAgICAgICAgICAgIiBiZWNhdXNlIGFzc2VydCBzdGF0ZW1lbnRzIGFy
ZSBub3QgZXhlY3V0ZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJieSB0aGUgdW5kZXJs
eWluZyBQeXRob24gaW50ZXJwcmV0ZXIgIgorICAgICAgICAgICAgICAgICAgICAgICAgICIoYXJl
IHlvdSB1c2luZyBweXRob24gLU8/KVxuIikKKworCisjIEV4cG9zZSB0aGlzIHBsdWdpbidzIGlt
cGxlbWVudGF0aW9uIGZvciB0aGUgcHl0ZXN0X2Fzc2VydHJlcHJfY29tcGFyZSBob29rCitweXRl
c3RfYXNzZXJ0cmVwcl9jb21wYXJlID0gdXRpbC5hc3NlcnRyZXByX2NvbXBhcmUKZGlmZiAtLWdp
dCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9hc3Nl
cnRpb24vcmVpbnRlcnByZXQucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMv
cHl0ZXN0L19weXRlc3QvYXNzZXJ0aW9uL3JlaW50ZXJwcmV0LnB5Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mNDI2MmMzYWNlZAotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9hc3NlcnRpb24v
cmVpbnRlcnByZXQucHkKQEAgLTAsMCArMSw0MDcgQEAKKyIiIgorRmluZCBpbnRlcm1lZGlhdGUg
ZXZhbHV0YXRpb24gcmVzdWx0cyBpbiBhc3NlcnQgc3RhdGVtZW50cyB0aHJvdWdoIGJ1aWx0aW4g
QVNULgorIiIiCitpbXBvcnQgYXN0CitpbXBvcnQgc3lzCisKK2ltcG9ydCBfcHl0ZXN0Ll9jb2Rl
CitpbXBvcnQgcHkKK2Zyb20gX3B5dGVzdC5hc3NlcnRpb24gaW1wb3J0IHV0aWwKK3UgPSBweS5i
dWlsdGluLl90b3RleHQKKworCitjbGFzcyBBc3NlcnRpb25FcnJvcih1dGlsLkJ1aWx0aW5Bc3Nl
cnRpb25FcnJvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgdXRp
bC5CdWlsdGluQXNzZXJ0aW9uRXJyb3IuX19pbml0X18oc2VsZiwgKmFyZ3MpCisgICAgICAgIGlm
IGFyZ3M6CisgICAgICAgICAgICAjIG9uIFB5dGhvbjIuNiB3ZSBnZXQgbGVuKGFyZ3MpPT0yIGZv
cjogYXNzZXJ0IDAsICh4LHkpCisgICAgICAgICAgICAjIG9uIFB5dGhvbjIuNyBhbmQgYWJvdmUg
d2UgYWx3YXlzIGdldCBsZW4oYXJncykgPT0gMQorICAgICAgICAgICAgIyB3aXRoIGFyZ3NbMF0g
YmVpbmcgdGhlICh4LHkpIHR1cGxlLgorICAgICAgICAgICAgaWYgbGVuKGFyZ3MpID4gMToKKyAg
ICAgICAgICAgICAgICB0b3ByaW50ID0gYXJncworICAgICAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgICAgICB0b3ByaW50ID0gYXJnc1swXQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAg
ICAgIHNlbGYubXNnID0gdSh0b3ByaW50KQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoK
KyAgICAgICAgICAgICAgICBzZWxmLm1zZyA9IHUoCisgICAgICAgICAgICAgICAgICAgICI8W2Jy
b2tlbiBfX3JlcHJfX10gJXMgYXQgJTB4ZD4iCisgICAgICAgICAgICAgICAgICAgICUgKHRvcHJp
bnQuX19jbGFzc19fLCBpZCh0b3ByaW50KSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBm
ID0gX3B5dGVzdC5fY29kZS5GcmFtZShzeXMuX2dldGZyYW1lKDEpKQorICAgICAgICAgICAgdHJ5
OgorICAgICAgICAgICAgICAgIHNvdXJjZSA9IGYuY29kZS5mdWxsc291cmNlCisgICAgICAgICAg
ICAgICAgaWYgc291cmNlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICB0cnk6Cisg
ICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UgPSBzb3VyY2UuZ2V0c3RhdGVtZW50KGYubGlu
ZW5vLCBhc3NlcnRpb249VHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEluZGV4RXJy
b3I6CisgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UgPSBOb25lCisgICAgICAgICAgICAg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UgPSBzdHIoc291cmNl
LmRlaW5kZW50KCkpLnN0cmlwKCkKKyAgICAgICAgICAgIGV4Y2VwdCBweS5lcnJvci5FTk9FTlQ6
CisgICAgICAgICAgICAgICAgc291cmNlID0gTm9uZQorICAgICAgICAgICAgICAgICMgdGhpcyBj
YW4gYWxzbyBvY2N1ciBkdXJpbmcgcmVpbnRlcnByZXRhdGlvbiwgd2hlbiB0aGUKKyAgICAgICAg
ICAgICAgICAjIGNvX2ZpbGVuYW1lIGlzIHNldCB0byAiPHJ1bj4iLgorICAgICAgICAgICAgaWYg
c291cmNlOgorICAgICAgICAgICAgICAgIHNlbGYubXNnID0gcmVpbnRlcnByZXQoc291cmNlLCBm
LCBzaG91bGRfZmFpbD1UcnVlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBz
ZWxmLm1zZyA9ICI8Y291bGQgbm90IGRldGVybWluZSBpbmZvcm1hdGlvbj4iCisgICAgICAgICAg
ICBpZiBub3Qgc2VsZi5hcmdzOgorICAgICAgICAgICAgICAgIHNlbGYuYXJncyA9IChzZWxmLm1z
ZywpCisKK2lmIHN5cy52ZXJzaW9uX2luZm8gPiAoMywgMCk6CisgICAgQXNzZXJ0aW9uRXJyb3Iu
X19tb2R1bGVfXyA9ICJidWlsdGlucyIKKworaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoImph
dmEiKToKKyAgICAjIFNlZSBodHRwOi8vYnVncy5qeXRob24ub3JnL2lzc3VlMTQ5NworICAgIF9l
eHBycyA9ICgiQm9vbE9wIiwgIkJpbk9wIiwgIlVuYXJ5T3AiLCAiTGFtYmRhIiwgIklmRXhwIiwg
IkRpY3QiLAorICAgICAgICAgICAgICAiTGlzdENvbXAiLCAiR2VuZXJhdG9yRXhwIiwgIllpZWxk
IiwgIkNvbXBhcmUiLCAiQ2FsbCIsCisgICAgICAgICAgICAgICJSZXByIiwgIk51bSIsICJTdHIi
LCAiQXR0cmlidXRlIiwgIlN1YnNjcmlwdCIsICJOYW1lIiwKKyAgICAgICAgICAgICAgIkxpc3Qi
LCAiVHVwbGUiKQorICAgIF9zdG10cyA9ICgiRnVuY3Rpb25EZWYiLCAiQ2xhc3NEZWYiLCAiUmV0
dXJuIiwgIkRlbGV0ZSIsICJBc3NpZ24iLAorICAgICAgICAgICAgICAiQXVnQXNzaWduIiwgIlBy
aW50IiwgIkZvciIsICJXaGlsZSIsICJJZiIsICJXaXRoIiwgIlJhaXNlIiwKKyAgICAgICAgICAg
ICAgIlRyeUV4Y2VwdCIsICJUcnlGaW5hbGx5IiwgIkFzc2VydCIsICJJbXBvcnQiLCAiSW1wb3J0
RnJvbSIsCisgICAgICAgICAgICAgICJFeGVjIiwgIkdsb2JhbCIsICJFeHByIiwgIlBhc3MiLCAi
QnJlYWsiLCAiQ29udGludWUiKQorICAgIF9leHByX25vZGVzID0gc2V0KGdldGF0dHIoYXN0LCBu
YW1lKSBmb3IgbmFtZSBpbiBfZXhwcnMpCisgICAgX3N0bXRfbm9kZXMgPSBzZXQoZ2V0YXR0cihh
c3QsIG5hbWUpIGZvciBuYW1lIGluIF9zdG10cykKKyAgICBkZWYgX2lzX2FzdF9leHByKG5vZGUp
OgorICAgICAgICByZXR1cm4gbm9kZS5fX2NsYXNzX18gaW4gX2V4cHJfbm9kZXMKKyAgICBkZWYg
X2lzX2FzdF9zdG10KG5vZGUpOgorICAgICAgICByZXR1cm4gbm9kZS5fX2NsYXNzX18gaW4gX3N0
bXRfbm9kZXMKK2Vsc2U6CisgICAgZGVmIF9pc19hc3RfZXhwcihub2RlKToKKyAgICAgICAgcmV0
dXJuIGlzaW5zdGFuY2Uobm9kZSwgYXN0LmV4cHIpCisgICAgZGVmIF9pc19hc3Rfc3RtdChub2Rl
KToKKyAgICAgICAgcmV0dXJuIGlzaW5zdGFuY2Uobm9kZSwgYXN0LnN0bXQpCisKK3RyeToKKyAg
ICBfU3RhcnJlZCA9IGFzdC5TdGFycmVkCitleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgIyBQ
eXRob24gMi4gRGVmaW5lIGEgZHVtbXkgY2xhc3Mgc28gaXNpbnN0YW5jZSgpIHdpbGwgYWx3YXlz
IGJlIEZhbHNlLgorICAgIGNsYXNzIF9TdGFycmVkKG9iamVjdCk6IHBhc3MKKworCitjbGFzcyBG
YWlsdXJlKEV4Y2VwdGlvbik6CisgICAgIiIiRXJyb3IgZm91bmQgd2hpbGUgaW50ZXJwcmV0aW5n
IEFTVC4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleHBsYW5hdGlvbj0iIik6CisgICAg
ICAgIHNlbGYuY2F1c2UgPSBzeXMuZXhjX2luZm8oKQorICAgICAgICBzZWxmLmV4cGxhbmF0aW9u
ID0gZXhwbGFuYXRpb24KKworCitkZWYgcmVpbnRlcnByZXQoc291cmNlLCBmcmFtZSwgc2hvdWxk
X2ZhaWw9RmFsc2UpOgorICAgIG1vZCA9IGFzdC5wYXJzZShzb3VyY2UpCisgICAgdmlzaXRvciA9
IERlYnVnSW50ZXJwcmV0ZXIoZnJhbWUpCisgICAgdHJ5OgorICAgICAgICB2aXNpdG9yLnZpc2l0
KG1vZCkKKyAgICBleGNlcHQgRmFpbHVyZToKKyAgICAgICAgZmFpbHVyZSA9IHN5cy5leGNfaW5m
bygpWzFdCisgICAgICAgIHJldHVybiBnZXRmYWlsdXJlKGZhaWx1cmUpCisgICAgaWYgc2hvdWxk
X2ZhaWw6CisgICAgICAgIHJldHVybiAoIihhc3NlcnRpb24gZmFpbGVkLCBidXQgd2hlbiBpdCB3
YXMgcmUtcnVuIGZvciAiCisgICAgICAgICAgICAgICAgInByaW50aW5nIGludGVybWVkaWF0ZSB2
YWx1ZXMsIGl0IGRpZCBub3QgZmFpbC4gIFN1Z2dlc3Rpb25zOiAiCisgICAgICAgICAgICAgICAg
ImNvbXB1dGUgYXNzZXJ0IGV4cHJlc3Npb24gYmVmb3JlIHRoZSBhc3NlcnQgb3IgdXNlIC0tYXNz
ZXJ0PXBsYWluKSIpCisKK2RlZiBydW4ob2ZmZW5kaW5nX2xpbmUsIGZyYW1lPU5vbmUpOgorICAg
IGlmIGZyYW1lIGlzIE5vbmU6CisgICAgICAgIGZyYW1lID0gX3B5dGVzdC5fY29kZS5GcmFtZShz
eXMuX2dldGZyYW1lKDEpKQorICAgIHJldHVybiByZWludGVycHJldChvZmZlbmRpbmdfbGluZSwg
ZnJhbWUpCisKK2RlZiBnZXRmYWlsdXJlKGUpOgorICAgIGV4cGxhbmF0aW9uID0gdXRpbC5mb3Jt
YXRfZXhwbGFuYXRpb24oZS5leHBsYW5hdGlvbikKKyAgICB2YWx1ZSA9IGUuY2F1c2VbMV0KKyAg
ICBpZiBzdHIodmFsdWUpOgorICAgICAgICBsaW5lcyA9IGV4cGxhbmF0aW9uLnNwbGl0KCdcbicp
CisgICAgICAgIGxpbmVzWzBdICs9ICIgIDw8ICVzIiAlICh2YWx1ZSwpCisgICAgICAgIGV4cGxh
bmF0aW9uID0gJ1xuJy5qb2luKGxpbmVzKQorICAgIHRleHQgPSAiJXM6ICVzIiAlIChlLmNhdXNl
WzBdLl9fbmFtZV9fLCBleHBsYW5hdGlvbikKKyAgICBpZiB0ZXh0LnN0YXJ0c3dpdGgoJ0Fzc2Vy
dGlvbkVycm9yOiBhc3NlcnQgJyk6CisgICAgICAgIHRleHQgPSB0ZXh0WzE2Ol0KKyAgICByZXR1
cm4gdGV4dAorCitvcGVyYXRvcl9tYXAgPSB7CisgICAgYXN0LkJpdE9yIDogInwiLAorICAgIGFz
dC5CaXRYb3IgOiAiXiIsCisgICAgYXN0LkJpdEFuZCA6ICImIiwKKyAgICBhc3QuTFNoaWZ0IDog
Ijw8IiwKKyAgICBhc3QuUlNoaWZ0IDogIj4+IiwKKyAgICBhc3QuQWRkIDogIisiLAorICAgIGFz
dC5TdWIgOiAiLSIsCisgICAgYXN0Lk11bHQgOiAiKiIsCisgICAgYXN0LkRpdiA6ICIvIiwKKyAg
ICBhc3QuRmxvb3JEaXYgOiAiLy8iLAorICAgIGFzdC5Nb2QgOiAiJSIsCisgICAgYXN0LkVxIDog
Ij09IiwKKyAgICBhc3QuTm90RXEgOiAiIT0iLAorICAgIGFzdC5MdCA6ICI8IiwKKyAgICBhc3Qu
THRFIDogIjw9IiwKKyAgICBhc3QuR3QgOiAiPiIsCisgICAgYXN0Lkd0RSA6ICI+PSIsCisgICAg
YXN0LlBvdyA6ICIqKiIsCisgICAgYXN0LklzIDogImlzIiwKKyAgICBhc3QuSXNOb3QgOiAiaXMg
bm90IiwKKyAgICBhc3QuSW4gOiAiaW4iLAorICAgIGFzdC5Ob3RJbiA6ICJub3QgaW4iCit9CisK
K3VuYXJ5X21hcCA9IHsKKyAgICBhc3QuTm90IDogIm5vdCAlcyIsCisgICAgYXN0LkludmVydCA6
ICJ+JXMiLAorICAgIGFzdC5VU3ViIDogIi0lcyIsCisgICAgYXN0LlVBZGQgOiAiKyVzIgorfQor
CisKK2NsYXNzIERlYnVnSW50ZXJwcmV0ZXIoYXN0Lk5vZGVWaXNpdG9yKToKKyAgICAiIiJJbnRl
cnByZXQgQVNUIG5vZGVzIHRvIGdsZWFtIHVzZWZ1bCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uICIi
IgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZyYW1lKToKKyAgICAgICAgc2VsZi5mcmFtZSA9
IGZyYW1lCisKKyAgICBkZWYgZ2VuZXJpY192aXNpdChzZWxmLCBub2RlKToKKyAgICAgICAgIyBG
YWxsYmFjayB3aGVuIHdlIGRvbid0IGhhdmUgYSBzcGVjaWFsIGltcGxlbWVudGF0aW9uLgorICAg
ICAgICBpZiBfaXNfYXN0X2V4cHIobm9kZSk6CisgICAgICAgICAgICBtb2QgPSBhc3QuRXhwcmVz
c2lvbihub2RlKQorICAgICAgICAgICAgY28gPSBzZWxmLl9jb21waWxlKG1vZCkKKyAgICAgICAg
ICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBzZWxmLmZyYW1lLmV2YWwoY28pCisg
ICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIHJhaXNlIEZhaWx1
cmUoKQorICAgICAgICAgICAgZXhwbGFuYXRpb24gPSBzZWxmLmZyYW1lLnJlcHIocmVzdWx0KQor
ICAgICAgICAgICAgcmV0dXJuIGV4cGxhbmF0aW9uLCByZXN1bHQKKyAgICAgICAgZWxpZiBfaXNf
YXN0X3N0bXQobm9kZSk6CisgICAgICAgICAgICBtb2QgPSBhc3QuTW9kdWxlKFtub2RlXSkKKyAg
ICAgICAgICAgIGNvID0gc2VsZi5fY29tcGlsZShtb2QsICJleGVjIikKKyAgICAgICAgICAgIHRy
eToKKyAgICAgICAgICAgICAgICBzZWxmLmZyYW1lLmV4ZWNfKGNvKQorICAgICAgICAgICAgZXhj
ZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICByYWlzZSBGYWlsdXJlKCkKKyAgICAgICAg
ICAgIHJldHVybiBOb25lLCBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBB
c3NlcnRpb25FcnJvcigiY2FuJ3QgaGFuZGxlICVzIiAlKG5vZGUsKSkKKworICAgIGRlZiBfY29t
cGlsZShzZWxmLCBzb3VyY2UsIG1vZGU9ImV2YWwiKToKKyAgICAgICAgcmV0dXJuIGNvbXBpbGUo
c291cmNlLCAiPGFzc2VydGlvbiBpbnRlcnByZXRhdGlvbj4iLCBtb2RlKQorCisgICAgZGVmIHZp
c2l0X0V4cHIoc2VsZiwgZXhwcik6CisgICAgICAgIHJldHVybiBzZWxmLnZpc2l0KGV4cHIudmFs
dWUpCisKKyAgICBkZWYgdmlzaXRfTW9kdWxlKHNlbGYsIG1vZCk6CisgICAgICAgIGZvciBzdG10
IGluIG1vZC5ib2R5OgorICAgICAgICAgICAgc2VsZi52aXNpdChzdG10KQorCisgICAgZGVmIHZp
c2l0X05hbWUoc2VsZiwgbmFtZSk6CisgICAgICAgIGV4cGxhbmF0aW9uLCByZXN1bHQgPSBzZWxm
LmdlbmVyaWNfdmlzaXQobmFtZSkKKyAgICAgICAgIyBTZWUgaWYgdGhlIG5hbWUgaXMgbG9jYWwu
CisgICAgICAgIHNvdXJjZSA9ICIlciBpbiBsb2NhbHMoKSBpcyBub3QgZ2xvYmFscygpIiAlIChu
YW1lLmlkLCkKKyAgICAgICAgY28gPSBzZWxmLl9jb21waWxlKHNvdXJjZSkKKyAgICAgICAgdHJ5
OgorICAgICAgICAgICAgbG9jYWwgPSBzZWxmLmZyYW1lLmV2YWwoY28pCisgICAgICAgIGV4Y2Vw
dCBFeGNlcHRpb246CisgICAgICAgICAgICAjIGhhdmUgdG8gYXNzdW1lIGl0IGlzbid0CisgICAg
ICAgICAgICBsb2NhbCA9IE5vbmUKKyAgICAgICAgaWYgbG9jYWwgaXMgTm9uZSBvciBub3Qgc2Vs
Zi5mcmFtZS5pc190cnVlKGxvY2FsKToKKyAgICAgICAgICAgIHJldHVybiBuYW1lLmlkLCByZXN1
bHQKKyAgICAgICAgcmV0dXJuIGV4cGxhbmF0aW9uLCByZXN1bHQKKworICAgIGRlZiB2aXNpdF9D
b21wYXJlKHNlbGYsIGNvbXApOgorICAgICAgICBsZWZ0ID0gY29tcC5sZWZ0CisgICAgICAgIGxl
ZnRfZXhwbGFuYXRpb24sIGxlZnRfcmVzdWx0ID0gc2VsZi52aXNpdChsZWZ0KQorICAgICAgICBm
b3Igb3AsIG5leHRfb3AgaW4gemlwKGNvbXAub3BzLCBjb21wLmNvbXBhcmF0b3JzKToKKyAgICAg
ICAgICAgIG5leHRfZXhwbGFuYXRpb24sIG5leHRfcmVzdWx0ID0gc2VsZi52aXNpdChuZXh0X29w
KQorICAgICAgICAgICAgb3Bfc3ltYm9sID0gb3BlcmF0b3JfbWFwW29wLl9fY2xhc3NfX10KKyAg
ICAgICAgICAgIGV4cGxhbmF0aW9uID0gIiVzICVzICVzIiAlIChsZWZ0X2V4cGxhbmF0aW9uLCBv
cF9zeW1ib2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9l
eHBsYW5hdGlvbikKKyAgICAgICAgICAgIHNvdXJjZSA9ICJfX2V4cHJpbmZvX2xlZnQgJXMgX19l
eHByaW5mb19yaWdodCIgJSAob3Bfc3ltYm9sLCkKKyAgICAgICAgICAgIGNvID0gc2VsZi5fY29t
cGlsZShzb3VyY2UpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0g
c2VsZi5mcmFtZS5ldmFsKGNvLCBfX2V4cHJpbmZvX2xlZnQ9bGVmdF9yZXN1bHQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXhwcmluZm9fcmlnaHQ9bmV4dF9y
ZXN1bHQpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIHJh
aXNlIEZhaWx1cmUoZXhwbGFuYXRpb24pCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAg
ICAgaWYgbm90IHNlbGYuZnJhbWUuaXNfdHJ1ZShyZXN1bHQpOgorICAgICAgICAgICAgICAgICAg
ICBicmVhaworICAgICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAg
ICAgICAgIHJhaXNlCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgYnJlYWsK
KyAgICAgICAgICAgIGxlZnRfZXhwbGFuYXRpb24sIGxlZnRfcmVzdWx0ID0gbmV4dF9leHBsYW5h
dGlvbiwgbmV4dF9yZXN1bHQKKworICAgICAgICBpZiB1dGlsLl9yZXByY29tcGFyZSBpcyBub3Qg
Tm9uZToKKyAgICAgICAgICAgIHJlcyA9IHV0aWwuX3JlcHJjb21wYXJlKG9wX3N5bWJvbCwgbGVm
dF9yZXN1bHQsIG5leHRfcmVzdWx0KQorICAgICAgICAgICAgaWYgcmVzOgorICAgICAgICAgICAg
ICAgIGV4cGxhbmF0aW9uID0gcmVzCisgICAgICAgIHJldHVybiBleHBsYW5hdGlvbiwgcmVzdWx0
CisKKyAgICBkZWYgdmlzaXRfQm9vbE9wKHNlbGYsIGJvb2xvcCk6CisgICAgICAgIGlzX29yID0g
aXNpbnN0YW5jZShib29sb3Aub3AsIGFzdC5PcikKKyAgICAgICAgZXhwbGFuYXRpb25zID0gW10K
KyAgICAgICAgZm9yIG9wZXJhbmQgaW4gYm9vbG9wLnZhbHVlczoKKyAgICAgICAgICAgIGV4cGxh
bmF0aW9uLCByZXN1bHQgPSBzZWxmLnZpc2l0KG9wZXJhbmQpCisgICAgICAgICAgICBleHBsYW5h
dGlvbnMuYXBwZW5kKGV4cGxhbmF0aW9uKQorICAgICAgICAgICAgaWYgcmVzdWx0ID09IGlzX29y
OgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIG5hbWUgPSBpc19vciBhbmQgIiBvciAi
IG9yICIgYW5kICIKKyAgICAgICAgZXhwbGFuYXRpb24gPSAiKCIgKyBuYW1lLmpvaW4oZXhwbGFu
YXRpb25zKSArICIpIgorICAgICAgICByZXR1cm4gZXhwbGFuYXRpb24sIHJlc3VsdAorCisgICAg
ZGVmIHZpc2l0X1VuYXJ5T3Aoc2VsZiwgdW5hcnkpOgorICAgICAgICBwYXR0ZXJuID0gdW5hcnlf
bWFwW3VuYXJ5Lm9wLl9fY2xhc3NfX10KKyAgICAgICAgb3BlcmFuZF9leHBsYW5hdGlvbiwgb3Bl
cmFuZF9yZXN1bHQgPSBzZWxmLnZpc2l0KHVuYXJ5Lm9wZXJhbmQpCisgICAgICAgIGV4cGxhbmF0
aW9uID0gcGF0dGVybiAlIChvcGVyYW5kX2V4cGxhbmF0aW9uLCkKKyAgICAgICAgY28gPSBzZWxm
Ll9jb21waWxlKHBhdHRlcm4gJSAoIl9fZXhwcmluZm9fZXhwciIsKSkKKyAgICAgICAgdHJ5Ogor
ICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5mcmFtZS5ldmFsKGNvLCBfX2V4cHJpbmZvX2V4cHI9
b3BlcmFuZF9yZXN1bHQpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICBy
YWlzZSBGYWlsdXJlKGV4cGxhbmF0aW9uKQorICAgICAgICByZXR1cm4gZXhwbGFuYXRpb24sIHJl
c3VsdAorCisgICAgZGVmIHZpc2l0X0Jpbk9wKHNlbGYsIGJpbm9wKToKKyAgICAgICAgbGVmdF9l
eHBsYW5hdGlvbiwgbGVmdF9yZXN1bHQgPSBzZWxmLnZpc2l0KGJpbm9wLmxlZnQpCisgICAgICAg
IHJpZ2h0X2V4cGxhbmF0aW9uLCByaWdodF9yZXN1bHQgPSBzZWxmLnZpc2l0KGJpbm9wLnJpZ2h0
KQorICAgICAgICBzeW1ib2wgPSBvcGVyYXRvcl9tYXBbYmlub3Aub3AuX19jbGFzc19fXQorICAg
ICAgICBleHBsYW5hdGlvbiA9ICIoJXMgJXMgJXMpIiAlIChsZWZ0X2V4cGxhbmF0aW9uLCBzeW1i
b2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0X2V4cGxhbmF0
aW9uKQorICAgICAgICBzb3VyY2UgPSAiX19leHByaW5mb19sZWZ0ICVzIF9fZXhwcmluZm9fcmln
aHQiICUgKHN5bWJvbCwpCisgICAgICAgIGNvID0gc2VsZi5fY29tcGlsZShzb3VyY2UpCisgICAg
ICAgIHRyeToKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuZnJhbWUuZXZhbChjbywgX19leHBy
aW5mb19sZWZ0PWxlZnRfcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fZXhwcmluZm9fcmlnaHQ9cmlnaHRfcmVzdWx0KQorICAgICAgICBleGNlcHQgRXhjZXB0
aW9uOgorICAgICAgICAgICAgcmFpc2UgRmFpbHVyZShleHBsYW5hdGlvbikKKyAgICAgICAgcmV0
dXJuIGV4cGxhbmF0aW9uLCByZXN1bHQKKworICAgIGRlZiB2aXNpdF9DYWxsKHNlbGYsIGNhbGwp
OgorICAgICAgICBmdW5jX2V4cGxhbmF0aW9uLCBmdW5jID0gc2VsZi52aXNpdChjYWxsLmZ1bmMp
CisgICAgICAgIGFyZ19leHBsYW5hdGlvbnMgPSBbXQorICAgICAgICBucyA9IHsiX19leHByaW5m
b19mdW5jIiA6IGZ1bmN9CisgICAgICAgIGFyZ3VtZW50cyA9IFtdCisgICAgICAgIGZvciBhcmcg
aW4gY2FsbC5hcmdzOgorICAgICAgICAgICAgYXJnX2V4cGxhbmF0aW9uLCBhcmdfcmVzdWx0ID0g
c2VsZi52aXNpdChhcmcpCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGFyZywgX1N0YXJyZWQp
OgorICAgICAgICAgICAgICAgIGFyZ19uYW1lID0gIl9fZXhwcmluZm9fc3RhciIKKyAgICAgICAg
ICAgICAgICBuc1thcmdfbmFtZV0gPSBhcmdfcmVzdWx0CisgICAgICAgICAgICAgICAgYXJndW1l
bnRzLmFwcGVuZCgiKiVzIiAlIChhcmdfbmFtZSwpKQorICAgICAgICAgICAgICAgIGFyZ19leHBs
YW5hdGlvbnMuYXBwZW5kKCIqJXMiICUgKGFyZ19leHBsYW5hdGlvbiwpKQorICAgICAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgICAgICBhcmdfbmFtZSA9ICJfX2V4cHJpbmZvXyVzIiAlIChsZW4o
bnMpLCkKKyAgICAgICAgICAgICAgICBuc1thcmdfbmFtZV0gPSBhcmdfcmVzdWx0CisgICAgICAg
ICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChhcmdfbmFtZSkKKyAgICAgICAgICAgICAgICBhcmdf
ZXhwbGFuYXRpb25zLmFwcGVuZChhcmdfZXhwbGFuYXRpb24pCisgICAgICAgIGZvciBrZXl3b3Jk
IGluIGNhbGwua2V5d29yZHM6CisgICAgICAgICAgICBhcmdfZXhwbGFuYXRpb24sIGFyZ19yZXN1
bHQgPSBzZWxmLnZpc2l0KGtleXdvcmQudmFsdWUpCisgICAgICAgICAgICBpZiBrZXl3b3JkLmFy
ZzoKKyAgICAgICAgICAgICAgICBhcmdfbmFtZSA9ICJfX2V4cHJpbmZvXyVzIiAlIChsZW4obnMp
LCkKKyAgICAgICAgICAgICAgICBrZXl3b3JkX3NvdXJjZSA9ICIlcz0lJXMiICUgKGtleXdvcmQu
YXJnKQorICAgICAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoa2V5d29yZF9zb3VyY2UgJSAo
YXJnX25hbWUsKSkKKyAgICAgICAgICAgICAgICBhcmdfZXhwbGFuYXRpb25zLmFwcGVuZChrZXl3
b3JkX3NvdXJjZSAlIChhcmdfZXhwbGFuYXRpb24sKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICAgICAgYXJnX25hbWUgPSAiX19leHByaW5mb19rd2RzIgorICAgICAgICAgICAgICAg
IGFyZ3VtZW50cy5hcHBlbmQoIioqJXMiICUgKGFyZ19uYW1lLCkpCisgICAgICAgICAgICAgICAg
YXJnX2V4cGxhbmF0aW9ucy5hcHBlbmQoIioqJXMiICUgKGFyZ19leHBsYW5hdGlvbiwpKQorCisg
ICAgICAgICAgICBuc1thcmdfbmFtZV0gPSBhcmdfcmVzdWx0CisKKyAgICAgICAgaWYgZ2V0YXR0
cihjYWxsLCAnc3RhcmFyZ3MnLCBOb25lKToKKyAgICAgICAgICAgIGFyZ19leHBsYW5hdGlvbiwg
YXJnX3Jlc3VsdCA9IHNlbGYudmlzaXQoY2FsbC5zdGFyYXJncykKKyAgICAgICAgICAgIGFyZ19u
YW1lID0gIl9fZXhwcmluZm9fc3RhciIKKyAgICAgICAgICAgIG5zW2FyZ19uYW1lXSA9IGFyZ19y
ZXN1bHQKKyAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoIiolcyIgJSAoYXJnX25hbWUsKSkK
KyAgICAgICAgICAgIGFyZ19leHBsYW5hdGlvbnMuYXBwZW5kKCIqJXMiICUgKGFyZ19leHBsYW5h
dGlvbiwpKQorCisgICAgICAgIGlmIGdldGF0dHIoY2FsbCwgJ2t3YXJncycsIE5vbmUpOgorICAg
ICAgICAgICAgYXJnX2V4cGxhbmF0aW9uLCBhcmdfcmVzdWx0ID0gc2VsZi52aXNpdChjYWxsLmt3
YXJncykKKyAgICAgICAgICAgIGFyZ19uYW1lID0gIl9fZXhwcmluZm9fa3dkcyIKKyAgICAgICAg
ICAgIG5zW2FyZ19uYW1lXSA9IGFyZ19yZXN1bHQKKyAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBl
bmQoIioqJXMiICUgKGFyZ19uYW1lLCkpCisgICAgICAgICAgICBhcmdfZXhwbGFuYXRpb25zLmFw
cGVuZCgiKiolcyIgJSAoYXJnX2V4cGxhbmF0aW9uLCkpCisgICAgICAgIGFyZ3NfZXhwbGFpbmVk
ID0gIiwgIi5qb2luKGFyZ19leHBsYW5hdGlvbnMpCisgICAgICAgIGV4cGxhbmF0aW9uID0gIiVz
KCVzKSIgJSAoZnVuY19leHBsYW5hdGlvbiwgYXJnc19leHBsYWluZWQpCisgICAgICAgIGFyZ3Mg
PSAiLCAiLmpvaW4oYXJndW1lbnRzKQorICAgICAgICBzb3VyY2UgPSAiX19leHByaW5mb19mdW5j
KCVzKSIgJSAoYXJncywpCisgICAgICAgIGNvID0gc2VsZi5fY29tcGlsZShzb3VyY2UpCisgICAg
ICAgIHRyeToKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuZnJhbWUuZXZhbChjbywgKipucykK
KyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHJhaXNlIEZhaWx1cmUoZXhw
bGFuYXRpb24pCisgICAgICAgIHBhdHRlcm4gPSAiJXNcbnslcyA9ICVzXG59IgorICAgICAgICBy
ZXAgPSBzZWxmLmZyYW1lLnJlcHIocmVzdWx0KQorICAgICAgICBleHBsYW5hdGlvbiA9IHBhdHRl
cm4gJSAocmVwLCByZXAsIGV4cGxhbmF0aW9uKQorICAgICAgICByZXR1cm4gZXhwbGFuYXRpb24s
IHJlc3VsdAorCisgICAgZGVmIF9pc19idWlsdGluX25hbWUoc2VsZiwgbmFtZSk6CisgICAgICAg
IHBhdHRlcm4gPSAiJXIgbm90IGluIGdsb2JhbHMoKSBhbmQgJXIgbm90IGluIGxvY2FscygpIgor
ICAgICAgICBzb3VyY2UgPSBwYXR0ZXJuICUgKG5hbWUuaWQsIG5hbWUuaWQpCisgICAgICAgIGNv
ID0gc2VsZi5fY29tcGlsZShzb3VyY2UpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVy
biBzZWxmLmZyYW1lLmV2YWwoY28pCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAg
ICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiB2aXNpdF9BdHRyaWJ1dGUoc2VsZiwgYXR0cik6
CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGF0dHIuY3R4LCBhc3QuTG9hZCk6CisgICAgICAg
ICAgICByZXR1cm4gc2VsZi5nZW5lcmljX3Zpc2l0KGF0dHIpCisgICAgICAgIHNvdXJjZV9leHBs
YW5hdGlvbiwgc291cmNlX3Jlc3VsdCA9IHNlbGYudmlzaXQoYXR0ci52YWx1ZSkKKyAgICAgICAg
ZXhwbGFuYXRpb24gPSAiJXMuJXMiICUgKHNvdXJjZV9leHBsYW5hdGlvbiwgYXR0ci5hdHRyKQor
ICAgICAgICBzb3VyY2UgPSAiX19leHByaW5mb19leHByLiVzIiAlIChhdHRyLmF0dHIsKQorICAg
ICAgICBjbyA9IHNlbGYuX2NvbXBpbGUoc291cmNlKQorICAgICAgICB0cnk6CisgICAgICAgICAg
ICB0cnk6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5mcmFtZS5ldmFsKGNvLCBfX2V4
cHJpbmZvX2V4cHI9c291cmNlX3Jlc3VsdCkKKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVF
cnJvcjoKKyAgICAgICAgICAgICAgICAjIE1heWJlIHRoZSBhdHRyaWJ1dGUgbmFtZSBuZWVkcyB0
byBiZSBtYW5nbGVkPworICAgICAgICAgICAgICAgIGlmIG5vdCBhdHRyLmF0dHIuc3RhcnRzd2l0
aCgiX18iKSBvciBhdHRyLmF0dHIuZW5kc3dpdGgoIl9fIik6CisgICAgICAgICAgICAgICAgICAg
IHJhaXNlCisgICAgICAgICAgICAgICAgc291cmNlID0gImdldGF0dHIoX19leHByaW5mb19leHBy
Ll9fY2xhc3NfXywgJ19fbmFtZV9fJywgJycpIgorICAgICAgICAgICAgICAgIGNvID0gc2VsZi5f
Y29tcGlsZShzb3VyY2UpCisgICAgICAgICAgICAgICAgY2xhc3NfbmFtZSA9IHNlbGYuZnJhbWUu
ZXZhbChjbywgX19leHByaW5mb19leHByPXNvdXJjZV9yZXN1bHQpCisgICAgICAgICAgICAgICAg
bWFuZ2xlZF9hdHRyID0gIl8iICsgY2xhc3NfbmFtZSArICBhdHRyLmF0dHIKKyAgICAgICAgICAg
ICAgICBzb3VyY2UgPSAiX19leHByaW5mb19leHByLiVzIiAlIChtYW5nbGVkX2F0dHIsKQorICAg
ICAgICAgICAgICAgIGNvID0gc2VsZi5fY29tcGlsZShzb3VyY2UpCisgICAgICAgICAgICAgICAg
cmVzdWx0ID0gc2VsZi5mcmFtZS5ldmFsKGNvLCBfX2V4cHJpbmZvX2V4cHI9c291cmNlX3Jlc3Vs
dCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHJhaXNlIEZhaWx1cmUo
ZXhwbGFuYXRpb24pCisgICAgICAgIGV4cGxhbmF0aW9uID0gIiVzXG57JXMgPSAlcy4lc1xufSIg
JSAoc2VsZi5mcmFtZS5yZXByKHJlc3VsdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2VsZi5mcmFtZS5yZXByKHJlc3VsdCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlX2V4cGxhbmF0aW9uLCBhdHRy
LmF0dHIpCisgICAgICAgICMgQ2hlY2sgaWYgdGhlIGF0dHIgaXMgZnJvbSBhbiBpbnN0YW5jZS4K
KyAgICAgICAgc291cmNlID0gIiVyIGluIGdldGF0dHIoX19leHByaW5mb19leHByLCAnX19kaWN0
X18nLCB7fSkiCisgICAgICAgIHNvdXJjZSA9IHNvdXJjZSAlIChhdHRyLmF0dHIsKQorICAgICAg
ICBjbyA9IHNlbGYuX2NvbXBpbGUoc291cmNlKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBm
cm9tX2luc3RhbmNlID0gc2VsZi5mcmFtZS5ldmFsKGNvLCBfX2V4cHJpbmZvX2V4cHI9c291cmNl
X3Jlc3VsdCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIGZyb21faW5z
dGFuY2UgPSBOb25lCisgICAgICAgIGlmIGZyb21faW5zdGFuY2UgaXMgTm9uZSBvciBzZWxmLmZy
YW1lLmlzX3RydWUoZnJvbV9pbnN0YW5jZSk6CisgICAgICAgICAgICByZXAgPSBzZWxmLmZyYW1l
LnJlcHIocmVzdWx0KQorICAgICAgICAgICAgcGF0dGVybiA9ICIlc1xueyVzID0gJXNcbn0iCisg
ICAgICAgICAgICBleHBsYW5hdGlvbiA9IHBhdHRlcm4gJSAocmVwLCByZXAsIGV4cGxhbmF0aW9u
KQorICAgICAgICByZXR1cm4gZXhwbGFuYXRpb24sIHJlc3VsdAorCisgICAgZGVmIHZpc2l0X0Fz
c2VydChzZWxmLCBhc3NydCk6CisgICAgICAgIHRlc3RfZXhwbGFuYXRpb24sIHRlc3RfcmVzdWx0
ID0gc2VsZi52aXNpdChhc3NydC50ZXN0KQorICAgICAgICBleHBsYW5hdGlvbiA9ICJhc3NlcnQg
JXMiICUgKHRlc3RfZXhwbGFuYXRpb24sKQorICAgICAgICBpZiBub3Qgc2VsZi5mcmFtZS5pc190
cnVlKHRlc3RfcmVzdWx0KToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByYWlz
ZSB1dGlsLkJ1aWx0aW5Bc3NlcnRpb25FcnJvcgorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlv
bjoKKyAgICAgICAgICAgICAgICByYWlzZSBGYWlsdXJlKGV4cGxhbmF0aW9uKQorICAgICAgICBy
ZXR1cm4gZXhwbGFuYXRpb24sIHRlc3RfcmVzdWx0CisKKyAgICBkZWYgdmlzaXRfQXNzaWduKHNl
bGYsIGFzc2lnbik6CisgICAgICAgIHZhbHVlX2V4cGxhbmF0aW9uLCB2YWx1ZV9yZXN1bHQgPSBz
ZWxmLnZpc2l0KGFzc2lnbi52YWx1ZSkKKyAgICAgICAgZXhwbGFuYXRpb24gPSAiLi4uID0gJXMi
ICUgKHZhbHVlX2V4cGxhbmF0aW9uLCkKKyAgICAgICAgbmFtZSA9IGFzdC5OYW1lKCJfX2V4cHJp
bmZvX2V4cHIiLCBhc3QuTG9hZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgbGluZW5vPWFz
c2lnbi52YWx1ZS5saW5lbm8sCisgICAgICAgICAgICAgICAgICAgICAgICBjb2xfb2Zmc2V0PWFz
c2lnbi52YWx1ZS5jb2xfb2Zmc2V0KQorICAgICAgICBuZXdfYXNzaWduID0gYXN0LkFzc2lnbihh
c3NpZ24udGFyZ2V0cywgbmFtZSwgbGluZW5vPWFzc2lnbi5saW5lbm8sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbF9vZmZzZXQ9YXNzaWduLmNvbF9vZmZzZXQpCisgICAgICAg
IG1vZCA9IGFzdC5Nb2R1bGUoW25ld19hc3NpZ25dKQorICAgICAgICBjbyA9IHNlbGYuX2NvbXBp
bGUobW9kLCAiZXhlYyIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuZnJhbWUuZXhl
Y18oY28sIF9fZXhwcmluZm9fZXhwcj12YWx1ZV9yZXN1bHQpCisgICAgICAgIGV4Y2VwdCBFeGNl
cHRpb246CisgICAgICAgICAgICByYWlzZSBGYWlsdXJlKGV4cGxhbmF0aW9uKQorICAgICAgICBy
ZXR1cm4gZXhwbGFuYXRpb24sIHZhbHVlX3Jlc3VsdAorCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJU
ZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvYXNzZXJ0aW9uL3Jld3JpdGUu
cHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvYXNz
ZXJ0aW9uL3Jld3JpdGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LjE0YjhlNDlkYjJiCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQv
dzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L2Fzc2VydGlvbi9yZXdyaXRlLnB5CkBAIC0wLDAgKzEs
ODg1IEBACisiIiJSZXdyaXRlIGFzc2VydGlvbiBBU1QgdG8gcHJvZHVjZSBuaWNlIGVycm9yIG1l
c3NhZ2VzIiIiCisKK2ltcG9ydCBhc3QKK2ltcG9ydCBlcnJubworaW1wb3J0IGl0ZXJ0b29scwor
aW1wb3J0IGltcAoraW1wb3J0IG1hcnNoYWwKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQg
c3RydWN0CitpbXBvcnQgc3lzCitpbXBvcnQgdHlwZXMKKworaW1wb3J0IHB5Citmcm9tIF9weXRl
c3QuYXNzZXJ0aW9uIGltcG9ydCB1dGlsCisKKworIyBweXRlc3QgY2FjaGVzIHJld3JpdHRlbiBw
eWNzIGluIF9fcHljYWNoZV9fLgoraWYgaGFzYXR0cihpbXAsICJnZXRfdGFnIik6CisgICAgUFlU
RVNUX1RBRyA9IGltcC5nZXRfdGFnKCkgKyAiLVBZVEVTVCIKK2Vsc2U6CisgICAgaWYgaGFzYXR0
cihzeXMsICJweXB5X3ZlcnNpb25faW5mbyIpOgorICAgICAgICBpbXBsID0gInB5cHkiCisgICAg
ZWxpZiBzeXMucGxhdGZvcm0gPT0gImphdmEiOgorICAgICAgICBpbXBsID0gImp5dGhvbiIKKyAg
ICBlbHNlOgorICAgICAgICBpbXBsID0gImNweXRob24iCisgICAgdmVyID0gc3lzLnZlcnNpb25f
aW5mbworICAgIFBZVEVTVF9UQUcgPSAiJXMtJXMlcy1QWVRFU1QiICUgKGltcGwsIHZlclswXSwg
dmVyWzFdKQorICAgIGRlbCB2ZXIsIGltcGwKKworUFlDX0VYVCA9ICIucHkiICsgKF9fZGVidWdf
XyBhbmQgImMiIG9yICJvIikKK1BZQ19UQUlMID0gIi4iICsgUFlURVNUX1RBRyArIFBZQ19FWFQK
KworUkVXUklURV9ORVdMSU5FUyA9IHN5cy52ZXJzaW9uX2luZm9bOjJdICE9ICgyLCA3KSBhbmQg
c3lzLnZlcnNpb25faW5mbyA8ICgzLCAyKQorQVNDSUlfSVNfREVGQVVMVF9FTkNPRElORyA9IHN5
cy52ZXJzaW9uX2luZm9bMF0gPCAzCisKK2lmIHN5cy52ZXJzaW9uX2luZm8gPj0gKDMsNSk6Cisg
ICAgYXN0X0NhbGwgPSBhc3QuQ2FsbAorZWxzZToKKyAgICBhc3RfQ2FsbCA9IGxhbWJkYSBhLGIs
YzogYXN0LkNhbGwoYSwgYiwgYywgTm9uZSwgTm9uZSkKKworCitjbGFzcyBBc3NlcnRpb25SZXdy
aXRpbmdIb29rKG9iamVjdCk6CisgICAgIiIiUEVQMzAyIEltcG9ydCBob29rIHdoaWNoIHJld3Jp
dGVzIGFzc2VydHMuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYu
c2Vzc2lvbiA9IE5vbmUKKyAgICAgICAgc2VsZi5tb2R1bGVzID0ge30KKyAgICAgICAgc2VsZi5f
cmVnaXN0ZXJfd2l0aF9wa2dfcmVzb3VyY2VzKCkKKworICAgIGRlZiBzZXRfc2Vzc2lvbihzZWxm
LCBzZXNzaW9uKToKKyAgICAgICAgc2VsZi5mbnBhdHMgPSBzZXNzaW9uLmNvbmZpZy5nZXRpbmko
InB5dGhvbl9maWxlcyIpCisgICAgICAgIHNlbGYuc2Vzc2lvbiA9IHNlc3Npb24KKworICAgIGRl
ZiBmaW5kX21vZHVsZShzZWxmLCBuYW1lLCBwYXRoPU5vbmUpOgorICAgICAgICBpZiBzZWxmLnNl
c3Npb24gaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHNlc3MgPSBz
ZWxmLnNlc3Npb24KKyAgICAgICAgc3RhdGUgPSBzZXNzLmNvbmZpZy5fYXNzZXJ0c3RhdGUKKyAg
ICAgICAgc3RhdGUudHJhY2UoImZpbmRfbW9kdWxlIGNhbGxlZCBmb3I6ICVzIiAlIG5hbWUpCisg
ICAgICAgIG5hbWVzID0gbmFtZS5yc3BsaXQoIi4iLCAxKQorICAgICAgICBsYXN0bmFtZSA9IG5h
bWVzWy0xXQorICAgICAgICBwdGggPSBOb25lCisgICAgICAgIGlmIHBhdGggaXMgbm90IE5vbmU6
CisgICAgICAgICAgICAjIFN0YXJ0aW5nIHdpdGggUHl0aG9uIDMuMywgcGF0aCBpcyBhIF9OYW1l
c3BhY2VQYXRoKCksIHdoaWNoCisgICAgICAgICAgICAjIGNhdXNlcyBwcm9ibGVtcyBpZiBub3Qg
Y29udmVydGVkIHRvIGxpc3QuCisgICAgICAgICAgICBwYXRoID0gbGlzdChwYXRoKQorICAgICAg
ICAgICAgaWYgbGVuKHBhdGgpID09IDE6CisgICAgICAgICAgICAgICAgcHRoID0gcGF0aFswXQor
ICAgICAgICBpZiBwdGggaXMgTm9uZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAg
ICBmZCwgZm4sIGRlc2MgPSBpbXAuZmluZF9tb2R1bGUobGFzdG5hbWUsIHBhdGgpCisgICAgICAg
ICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAg
ICAgICAgICAgIGlmIGZkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGZkLmNsb3NlKCkK
KyAgICAgICAgICAgIHRwID0gZGVzY1syXQorICAgICAgICAgICAgaWYgdHAgPT0gaW1wLlBZX0NP
TVBJTEVEOgorICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIoaW1wLCAic291cmNlX2Zyb21fY2Fj
aGUiKToKKyAgICAgICAgICAgICAgICAgICAgZm4gPSBpbXAuc291cmNlX2Zyb21fY2FjaGUoZm4p
CisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZm4gPSBmbls6LTFd
CisgICAgICAgICAgICBlbGlmIHRwICE9IGltcC5QWV9TT1VSQ0U6CisgICAgICAgICAgICAgICAg
IyBEb24ndCBrbm93IHdoYXQgdGhpcyBpcy4KKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQor
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm4gPSBvcy5wYXRoLmpvaW4ocHRoLCBuYW1lLnJw
YXJ0aXRpb24oIi4iKVsyXSArICIucHkiKQorICAgICAgICBmbl9weXBhdGggPSBweS5wYXRoLmxv
Y2FsKGZuKQorICAgICAgICAjIElzIHRoaXMgYSB0ZXN0IGZpbGU/CisgICAgICAgIGlmIG5vdCBz
ZXNzLmlzaW5pdHBhdGgoZm4pOgorICAgICAgICAgICAgIyBXZSBoYXZlIHRvIGJlIHZlcnkgY2Fy
ZWZ1bCBoZXJlIGJlY2F1c2UgaW1wb3J0cyBpbiB0aGlzIGNvZGUgY2FuCisgICAgICAgICAgICAj
IHRyaWdnZXIgYSBjeWNsZS4KKyAgICAgICAgICAgIHNlbGYuc2Vzc2lvbiA9IE5vbmUKKyAgICAg
ICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmb3IgcGF0IGluIHNlbGYuZm5wYXRzOgorICAg
ICAgICAgICAgICAgICAgICBpZiBmbl9weXBhdGguZm5tYXRjaChwYXQpOgorICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhdGUudHJhY2UoIm1hdGNoZWQgdGVzdCBmaWxlICVyIiAlIChmbiwpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgZmluYWxseToKKyAgICAg
ICAgICAgICAgICBzZWxmLnNlc3Npb24gPSBzZXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICBzdGF0ZS50cmFjZSgibWF0Y2hlZCB0ZXN0IGZpbGUgKHdhcyBzcGVjaWZpZWQgb24gY21kbGlu
ZSk6ICVyIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAoZm4sKSkKKyAgICAgICAgIyBUaGUg
cmVxdWVzdGVkIG1vZHVsZSBsb29rcyBsaWtlIGEgdGVzdCBmaWxlLCBzbyByZXdyaXRlIGl0LiBU
aGlzIGlzCisgICAgICAgICMgdGhlIG1vc3QgbWFnaWNhbCBwYXJ0IG9mIHRoZSBwcm9jZXNzOiBs
b2FkIHRoZSBzb3VyY2UsIHJld3JpdGUgdGhlCisgICAgICAgICMgYXNzZXJ0cywgYW5kIGxvYWQg
dGhlIHJld3JpdHRlbiBzb3VyY2UuIFdlIGFsc28gY2FjaGUgdGhlIHJld3JpdHRlbgorICAgICAg
ICAjIG1vZHVsZSBjb2RlIGluIGEgc3BlY2lhbCBweWMuIFdlIG11c3QgYmUgYXdhcmUgb2YgdGhl
IHBvc3NpYmlsaXR5IG9mCisgICAgICAgICMgY29uY3VycmVudCBweXRlc3QgcHJvY2Vzc2VzIHJl
d3JpdGluZyBhbmQgbG9hZGluZyBweWNzLiBUbyBhdm9pZAorICAgICAgICAjIHRyaWNreSByYWNl
IGNvbmRpdGlvbnMsIHdlIG1haW50YWluIHRoZSBmb2xsb3dpbmcgaW52YXJpYW50OiBUaGUKKyAg
ICAgICAgIyBjYWNoZWQgcHljIGlzIGFsd2F5cyBhIGNvbXBsZXRlLCB2YWxpZCBweWMuIE9wZXJh
dGlvbnMgb24gaXQgbXVzdCBiZQorICAgICAgICAjIGF0b21pYy4gUE9TSVgncyBhdG9taWMgcmVu
YW1lIGNvbWVzIGluIGhhbmR5LgorICAgICAgICB3cml0ZSA9IG5vdCBzeXMuZG9udF93cml0ZV9i
eXRlY29kZQorICAgICAgICBjYWNoZV9kaXIgPSBvcy5wYXRoLmpvaW4oZm5fcHlwYXRoLmRpcm5h
bWUsICJfX3B5Y2FjaGVfXyIpCisgICAgICAgIGlmIHdyaXRlOgorICAgICAgICAgICAgdHJ5Ogor
ICAgICAgICAgICAgICAgIG9zLm1rZGlyKGNhY2hlX2RpcikKKyAgICAgICAgICAgIGV4Y2VwdCBP
U0Vycm9yOgorICAgICAgICAgICAgICAgIGUgPSBzeXMuZXhjX2luZm8oKVsxXS5lcnJubworICAg
ICAgICAgICAgICAgIGlmIGUgPT0gZXJybm8uRUVYSVNUOgorICAgICAgICAgICAgICAgICAgICAj
IEVpdGhlciB0aGUgX19weWNhY2hlX18gZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzICh0aGUKKyAg
ICAgICAgICAgICAgICAgICAgIyBjb21tb24gY2FzZSkgb3IgaXQncyBibG9ja2VkIGJ5IGEgbm9u
LWRpciBub2RlLiBJbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgIyBsYXR0ZXIgY2FzZSwgd2Un
bGwgaWdub3JlIGl0IGluIF93cml0ZV9weWMuCisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAg
ICAgICAgICAgICAgICBlbGlmIGUgaW4gW2Vycm5vLkVOT0VOVCwgZXJybm8uRU5PVERJUl06Cisg
ICAgICAgICAgICAgICAgICAgICMgT25lIG9mIHRoZSBwYXRoIGNvbXBvbmVudHMgd2FzIG5vdCBh
IGRpcmVjdG9yeSwgbGlrZWx5CisgICAgICAgICAgICAgICAgICAgICMgYmVjYXVzZSB3ZSdyZSBp
biBhIHppcCBmaWxlLgorICAgICAgICAgICAgICAgICAgICB3cml0ZSA9IEZhbHNlCisgICAgICAg
ICAgICAgICAgZWxpZiBlIGluIFtlcnJuby5FQUNDRVMsIGVycm5vLkVST0ZTLCBlcnJuby5FUEVS
TV06CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLnRyYWNlKCJyZWFkIG9ubHkgZGlyZWN0b3J5
OiAlciIgJSBmbl9weXBhdGguZGlybmFtZSkKKyAgICAgICAgICAgICAgICAgICAgd3JpdGUgPSBG
YWxzZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisg
ICAgICAgIGNhY2hlX25hbWUgPSBmbl9weXBhdGguYmFzZW5hbWVbOi0zXSArIFBZQ19UQUlMCisg
ICAgICAgIHB5YyA9IG9zLnBhdGguam9pbihjYWNoZV9kaXIsIGNhY2hlX25hbWUpCisgICAgICAg
ICMgTm90aWNlIHRoYXQgZXZlbiBpZiB3ZSdyZSBpbiBhIHJlYWQtb25seSBkaXJlY3RvcnksIEkn
bSBnb2luZworICAgICAgICAjIHRvIGNoZWNrIGZvciBhIGNhY2hlZCBweWMuIFRoaXMgbWF5IG5v
dCBiZSBvcHRpbWFsLi4uCisgICAgICAgIGNvID0gX3JlYWRfcHljKGZuX3B5cGF0aCwgcHljLCBz
dGF0ZS50cmFjZSkKKyAgICAgICAgaWYgY28gaXMgTm9uZToKKyAgICAgICAgICAgIHN0YXRlLnRy
YWNlKCJyZXdyaXRpbmcgJXIiICUgKGZuLCkpCisgICAgICAgICAgICBzb3VyY2Vfc3RhdCwgY28g
PSBfcmV3cml0ZV90ZXN0KHN0YXRlLCBmbl9weXBhdGgpCisgICAgICAgICAgICBpZiBjbyBpcyBO
b25lOgorICAgICAgICAgICAgICAgICMgUHJvYmFibHkgYSBTeW50YXhFcnJvciBpbiB0aGUgdGVz
dC4KKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgaWYgd3JpdGU6Cisg
ICAgICAgICAgICAgICAgX21ha2VfcmV3cml0dGVuX3B5YyhzdGF0ZSwgc291cmNlX3N0YXQsIHB5
YywgY28pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzdGF0ZS50cmFjZSgiZm91bmQgY2Fj
aGVkIHJld3JpdHRlbiBweWMgZm9yICVyIiAlIChmbiwpKQorICAgICAgICBzZWxmLm1vZHVsZXNb
bmFtZV0gPSBjbywgcHljCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgbG9hZF9tb2R1
bGUoc2VsZiwgbmFtZSk6CisgICAgICAgICMgSWYgdGhlcmUgaXMgYW4gZXhpc3RpbmcgbW9kdWxl
IG9iamVjdCBuYW1lZCAnZnVsbG5hbWUnIGluCisgICAgICAgICMgc3lzLm1vZHVsZXMsIHRoZSBs
b2FkZXIgbXVzdCB1c2UgdGhhdCBleGlzdGluZyBtb2R1bGUuIChPdGhlcndpc2UsCisgICAgICAg
ICMgdGhlIHJlbG9hZCgpIGJ1aWx0aW4gd2lsbCBub3Qgd29yayBjb3JyZWN0bHkuKQorICAgICAg
ICBpZiBuYW1lIGluIHN5cy5tb2R1bGVzOgorICAgICAgICAgICAgcmV0dXJuIHN5cy5tb2R1bGVz
W25hbWVdCisKKyAgICAgICAgY28sIHB5YyA9IHNlbGYubW9kdWxlcy5wb3AobmFtZSkKKyAgICAg
ICAgIyBJIHdpc2ggSSBjb3VsZCBqdXN0IGNhbGwgaW1wLmxvYWRfY29tcGlsZWQgaGVyZSwgYnV0
IF9fZmlsZV9fIGhhcyB0bworICAgICAgICAjIGJlIHNldCBwcm9wZXJseS4gSW4gUHl0aG9uIDMu
MissIHRoaXMgYWxsIHdvdWxkIGJlIGhhbmRsZWQgY29ycmVjdGx5CisgICAgICAgICMgYnkgbG9h
ZF9jb21waWxlZC4KKyAgICAgICAgbW9kID0gc3lzLm1vZHVsZXNbbmFtZV0gPSBpbXAubmV3X21v
ZHVsZShuYW1lKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBtb2QuX19maWxlX18gPSBjby5j
b19maWxlbmFtZQorICAgICAgICAgICAgIyBOb3JtYWxseSwgdGhpcyBhdHRyaWJ1dGUgaXMgMy4y
Ky4KKyAgICAgICAgICAgIG1vZC5fX2NhY2hlZF9fID0gcHljCisgICAgICAgICAgICBtb2QuX19s
b2FkZXJfXyA9IHNlbGYKKyAgICAgICAgICAgIHB5LmJ1aWx0aW4uZXhlY18oY28sIG1vZC5fX2Rp
Y3RfXykKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW25hbWVd
CisgICAgICAgICAgICByYWlzZQorICAgICAgICByZXR1cm4gc3lzLm1vZHVsZXNbbmFtZV0KKwor
CisKKyAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBuYW1lKToKKyAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgZmQsIGZuLCBkZXNjID0gaW1wLmZpbmRfbW9kdWxlKG5hbWUpCisgICAgICAgIGV4Y2Vw
dCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBpZiBmZCBp
cyBub3QgTm9uZToKKyAgICAgICAgICAgIGZkLmNsb3NlKCkKKyAgICAgICAgdHAgPSBkZXNjWzJd
CisgICAgICAgIHJldHVybiB0cCA9PSBpbXAuUEtHX0RJUkVDVE9SWQorCisgICAgQGNsYXNzbWV0
aG9kCisgICAgZGVmIF9yZWdpc3Rlcl93aXRoX3BrZ19yZXNvdXJjZXMoY2xzKToKKyAgICAgICAg
IiIiCisgICAgICAgIEVuc3VyZSBwYWNrYWdlIHJlc291cmNlcyBjYW4gYmUgbG9hZGVkIGZyb20g
dGhpcyBsb2FkZXIuIE1heSBiZSBjYWxsZWQKKyAgICAgICAgbXVsdGlwbGUgdGltZXMsIGFzIHRo
ZSBvcGVyYXRpb24gaXMgaWRlbXBvdGVudC4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAg
ICAgICAgICAgIGltcG9ydCBwa2dfcmVzb3VyY2VzCisgICAgICAgICAgICAjIGFjY2VzcyBhbiBh
dHRyaWJ1dGUgaW4gY2FzZSBhIGRlZmVycmVkIGltcG9ydGVyIGlzIHByZXNlbnQKKyAgICAgICAg
ICAgIHBrZ19yZXNvdXJjZXMuX19uYW1lX18KKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgor
ICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBTaW5jZSBweXRlc3QgdGVzdHMgYXJlIGFs
d2F5cyBsb2NhdGVkIGluIHRoZSBmaWxlIHN5c3RlbSwgdGhlCisgICAgICAgICMgIERlZmF1bHRQ
cm92aWRlciBpcyBhcHByb3ByaWF0ZS4KKyAgICAgICAgcGtnX3Jlc291cmNlcy5yZWdpc3Rlcl9s
b2FkZXJfdHlwZShjbHMsIHBrZ19yZXNvdXJjZXMuRGVmYXVsdFByb3ZpZGVyKQorCisgICAgZGVm
IGdldF9kYXRhKHNlbGYsIHBhdGhuYW1lKToKKyAgICAgICAgIiIiT3B0aW9uYWwgUEVQMzAyIGdl
dF9kYXRhIEFQSS4KKyAgICAgICAgIiIiCisgICAgICAgIHdpdGggb3BlbihwYXRobmFtZSwgJ3Ji
JykgYXMgZjoKKyAgICAgICAgICAgIHJldHVybiBmLnJlYWQoKQorCisKK2RlZiBfd3JpdGVfcHlj
KHN0YXRlLCBjbywgc291cmNlX3N0YXQsIHB5Yyk6CisgICAgIyBUZWNobmljYWxseSwgd2UgZG9u
J3QgaGF2ZSB0byBoYXZlIHRoZSBzYW1lIHB5YyBmb3JtYXQgYXMKKyAgICAjIChDKVB5dGhvbiwg
c2luY2UgdGhlc2UgInB5Y3MiIHNob3VsZCBuZXZlciBiZSBzZWVuIGJ5IGJ1aWx0aW4KKyAgICAj
IGltcG9ydC4gSG93ZXZlciwgdGhlcmUncyBsaXR0bGUgcmVhc29uIGRldmlhdGUsIGFuZCBJIGhv
cGUKKyAgICAjIHNvbWV0aW1lIHRvIGJlIGFibGUgdG8gdXNlIGltcC5sb2FkX2NvbXBpbGVkIHRv
IGxvYWQgdGhlbS4gKFNlZQorICAgICMgdGhlIGNvbW1lbnQgaW4gbG9hZF9tb2R1bGUgYWJvdmUu
KQorICAgIHRyeToKKyAgICAgICAgZnAgPSBvcGVuKHB5YywgIndiIikKKyAgICBleGNlcHQgSU9F
cnJvcjoKKyAgICAgICAgZXJyID0gc3lzLmV4Y19pbmZvKClbMV0uZXJybm8KKyAgICAgICAgc3Rh
dGUudHJhY2UoImVycm9yIHdyaXRpbmcgcHljIGZpbGUgYXQgJXM6IGVycm5vPSVzIiAlKHB5Yywg
ZXJyKSkKKyAgICAgICAgIyB3ZSBpZ25vcmUgYW55IGZhaWx1cmUgdG8gd3JpdGUgdGhlIGNhY2hl
IGZpbGUKKyAgICAgICAgIyB0aGVyZSBhcmUgbWFueSByZWFzb25zLCBwZXJtaXNzaW9uLWRlbmll
ZCwgX19weWNhY2hlX18gYmVpbmcgYQorICAgICAgICAjIGZpbGUgZXRjLgorICAgICAgICByZXR1
cm4gRmFsc2UKKyAgICB0cnk6CisgICAgICAgIGZwLndyaXRlKGltcC5nZXRfbWFnaWMoKSkKKyAg
ICAgICAgbXRpbWUgPSBpbnQoc291cmNlX3N0YXQubXRpbWUpCisgICAgICAgIHNpemUgPSBzb3Vy
Y2Vfc3RhdC5zaXplICYgMHhGRkZGRkZGRgorICAgICAgICBmcC53cml0ZShzdHJ1Y3QucGFjaygi
PGxsIiwgbXRpbWUsIHNpemUpKQorICAgICAgICBtYXJzaGFsLmR1bXAoY28sIGZwKQorICAgIGZp
bmFsbHk6CisgICAgICAgIGZwLmNsb3NlKCkKKyAgICByZXR1cm4gVHJ1ZQorCitSTiA9ICJcclxu
Ii5lbmNvZGUoInV0Zi04IikKK04gPSAiXG4iLmVuY29kZSgidXRmLTgiKQorCitjb29raWVfcmUg
PSByZS5jb21waWxlKHIiXlsgXHRcZl0qIy4qY29kaW5nWzo9XVsgXHRdKlstXHcuXSsiKQorQk9N
X1VURjggPSAnXHhlZlx4YmJceGJmJworCitkZWYgX3Jld3JpdGVfdGVzdChzdGF0ZSwgZm4pOgor
ICAgICIiIlRyeSB0byByZWFkIGFuZCByZXdyaXRlICpmbiogYW5kIHJldHVybiB0aGUgY29kZSBv
YmplY3QuIiIiCisgICAgdHJ5OgorICAgICAgICBzdGF0ID0gZm4uc3RhdCgpCisgICAgICAgIHNv
dXJjZSA9IGZuLnJlYWQoInJiIikKKyAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvcjoKKyAgICAg
ICAgcmV0dXJuIE5vbmUsIE5vbmUKKyAgICBpZiBBU0NJSV9JU19ERUZBVUxUX0VOQ09ESU5HOgor
ICAgICAgICAjIEFTQ0lJIGlzIHRoZSBkZWZhdWx0IGVuY29kaW5nIGluIFB5dGhvbiAyLiBXaXRo
b3V0IGEgY29kaW5nCisgICAgICAgICMgZGVjbGFyYXRpb24sIFB5dGhvbiAyIHdpbGwgY29tcGxh
aW4gYWJvdXQgYW55IGJ5dGVzIGluIHRoZSBmaWxlCisgICAgICAgICMgb3V0c2lkZSB0aGUgQVND
SUkgcmFuZ2UuIFNhZGx5LCB0aGlzIGJlaGF2aW9yIGRvZXMgbm90IGV4dGVuZCB0bworICAgICAg
ICAjIGNvbXBpbGUoKSBvciBhc3QucGFyc2UoKSwgd2hpY2ggcHJlZmVyIHRvIGludGVycHJldCB0
aGUgYnl0ZXMgYXMKKyAgICAgICAgIyBsYXRpbi0xLiAoQXQgbGVhc3QgdGhleSBwcm9wZXJseSBo
YW5kbGUgZXhwbGljaXQgY29kaW5nIGNvb2tpZXMuKSBUbworICAgICAgICAjIHByZXNlcnZlIHRo
aXMgZXJyb3IgYmVoYXZpb3IsIHdlIGNvdWxkIGZvcmNlIGFzdC5wYXJzZSgpIHRvIHVzZSBBU0NJ
SQorICAgICAgICAjIGFzIHRoZSBlbmNvZGluZyBieSBpbnNlcnRpbmcgYSBjb2RpbmcgY29va2ll
LiBVbmZvcnR1bmF0ZWx5LCB0aGF0CisgICAgICAgICMgbWVzc2VzIHVwIGxpbmUgbnVtYmVycy4g
VGh1cywgd2UgaGF2ZSB0byBjaGVjayBvdXJzZWx2ZXMgaWYgYW55dGhpbmcKKyAgICAgICAgIyBp
cyBvdXRzaWRlIHRoZSBBU0NJSSByYW5nZSBpbiB0aGUgY2FzZSBubyBlbmNvZGluZyBpcyBleHBs
aWNpdGx5CisgICAgICAgICMgZGVjbGFyZWQuIEZvciBtb3JlIGNvbnRleHQsIHNlZSBpc3N1ZSAj
MjY5LiBZYXkgZm9yIFB5dGhvbiAzIHdoaWNoCisgICAgICAgICMgZ2V0cyB0aGlzIHJpZ2h0Lgor
ICAgICAgICBlbmQxID0gc291cmNlLmZpbmQoIlxuIikKKyAgICAgICAgZW5kMiA9IHNvdXJjZS5m
aW5kKCJcbiIsIGVuZDEgKyAxKQorICAgICAgICBpZiAobm90IHNvdXJjZS5zdGFydHN3aXRoKEJP
TV9VVEY4KSBhbmQKKyAgICAgICAgICAgIGNvb2tpZV9yZS5tYXRjaChzb3VyY2VbMDplbmQxXSkg
aXMgTm9uZSBhbmQKKyAgICAgICAgICAgIGNvb2tpZV9yZS5tYXRjaChzb3VyY2VbZW5kMSArIDE6
ZW5kMl0pIGlzIE5vbmUpOgorICAgICAgICAgICAgaWYgaGFzYXR0cihzdGF0ZSwgIl9pbmRlY29k
ZSIpOgorICAgICAgICAgICAgICAgICMgZW5jb2RpbmdzIGltcG9ydGVkIHVzIGFnYWluLCBzbyBk
b24ndCByZXdyaXRlLgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lLCBOb25lCisgICAgICAg
ICAgICBzdGF0ZS5faW5kZWNvZGUgPSBUcnVlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzb3VyY2UuZGVjb2RlKCJhc2NpaSIpCisg
ICAgICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVEZWNvZGVFcnJvcjoKKyAgICAgICAgICAgICAg
ICAgICAgIyBMZXQgaXQgZmFpbCBpbiByZWFsIGltcG9ydC4KKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIE5vbmUsIE5vbmUKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAg
ZGVsIHN0YXRlLl9pbmRlY29kZQorICAgICMgT24gUHl0aG9uIHZlcnNpb25zIHdoaWNoIGFyZSBu
b3QgMi43IGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMy4xLCB0aGUKKyAgICAjIHBhcnNlciBl
eHBlY3RzICpuaXggbmV3bGluZXMuCisgICAgaWYgUkVXUklURV9ORVdMSU5FUzoKKyAgICAgICAg
c291cmNlID0gc291cmNlLnJlcGxhY2UoUk4sIE4pICsgTgorICAgIHRyeToKKyAgICAgICAgdHJl
ZSA9IGFzdC5wYXJzZShzb3VyY2UpCisgICAgZXhjZXB0IFN5bnRheEVycm9yOgorICAgICAgICAj
IExldCB0aGlzIHBvcCB1cCBhZ2FpbiBpbiB0aGUgcmVhbCBpbXBvcnQuCisgICAgICAgIHN0YXRl
LnRyYWNlKCJmYWlsZWQgdG8gcGFyc2U6ICVyIiAlIChmbiwpKQorICAgICAgICByZXR1cm4gTm9u
ZSwgTm9uZQorICAgIHJld3JpdGVfYXNzZXJ0cyh0cmVlKQorICAgIHRyeToKKyAgICAgICAgY28g
PSBjb21waWxlKHRyZWUsIGZuLnN0cnBhdGgsICJleGVjIikKKyAgICBleGNlcHQgU3ludGF4RXJy
b3I6CisgICAgICAgICMgSXQncyBwb3NzaWJsZSB0aGF0IHRoaXMgZXJyb3IgaXMgZnJvbSBzb21l
IGJ1ZyBpbiB0aGUKKyAgICAgICAgIyBhc3NlcnRpb24gcmV3cml0aW5nLCBidXQgSSBkb24ndCBr
bm93IG9mIGEgZmFzdCB3YXkgdG8gdGVsbC4KKyAgICAgICAgc3RhdGUudHJhY2UoImZhaWxlZCB0
byBjb21waWxlOiAlciIgJSAoZm4sKSkKKyAgICAgICAgcmV0dXJuIE5vbmUsIE5vbmUKKyAgICBy
ZXR1cm4gc3RhdCwgY28KKworZGVmIF9tYWtlX3Jld3JpdHRlbl9weWMoc3RhdGUsIHNvdXJjZV9z
dGF0LCBweWMsIGNvKToKKyAgICAiIiJUcnkgdG8gZHVtcCByZXdyaXR0ZW4gY29kZSB0byAqcHlj
Ki4iIiIKKyAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgid2luIik6CisgICAgICAgICMg
V2luZG93cyBncmFudHMgZXhjbHVzaXZlIGFjY2VzcyB0byBvcGVuIGZpbGVzIGFuZCBkb2Vzbid0
IGhhdmUgYXRvbWljCisgICAgICAgICMgcmVuYW1lLCBzbyBqdXN0IHdyaXRlIGludG8gdGhlIGZp
bmFsIGZpbGUuCisgICAgICAgIF93cml0ZV9weWMoc3RhdGUsIGNvLCBzb3VyY2Vfc3RhdCwgcHlj
KQorICAgIGVsc2U6CisgICAgICAgICMgV2hlbiBub3Qgb24gd2luZG93cywgYXNzdW1lIHJlbmFt
ZSBpcyBhdG9taWMuIER1bXAgdGhlIGNvZGUgb2JqZWN0CisgICAgICAgICMgaW50byBhIGZpbGUg
c3BlY2lmaWMgdG8gdGhpcyBwcm9jZXNzIGFuZCBhdG9taWNhbGx5IHJlcGxhY2UgaXQuCisgICAg
ICAgIHByb2NfcHljID0gcHljICsgIi4iICsgc3RyKG9zLmdldHBpZCgpKQorICAgICAgICBpZiBf
d3JpdGVfcHljKHN0YXRlLCBjbywgc291cmNlX3N0YXQsIHByb2NfcHljKToKKyAgICAgICAgICAg
IG9zLnJlbmFtZShwcm9jX3B5YywgcHljKQorCitkZWYgX3JlYWRfcHljKHNvdXJjZSwgcHljLCB0
cmFjZT1sYW1iZGEgeDogTm9uZSk6CisgICAgIiIiUG9zc2libHkgcmVhZCBhIHB5dGVzdCBweWMg
Y29udGFpbmluZyByZXdyaXR0ZW4gY29kZS4KKworICAgIFJldHVybiByZXdyaXR0ZW4gY29kZSBp
ZiBzdWNjZXNzZnVsIG9yIE5vbmUgaWYgbm90LgorICAgICIiIgorICAgIHRyeToKKyAgICAgICAg
ZnAgPSBvcGVuKHB5YywgInJiIikKKyAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgcmV0dXJu
IE5vbmUKKyAgICB3aXRoIGZwOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBtdGltZSA9IGlu
dChzb3VyY2UubXRpbWUoKSkKKyAgICAgICAgICAgIHNpemUgPSBzb3VyY2Uuc2l6ZSgpCisgICAg
ICAgICAgICBkYXRhID0gZnAucmVhZCgxMikKKyAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJy
b3IgYXMgZToKKyAgICAgICAgICAgIHRyYWNlKCdfcmVhZF9weWMoJXMpOiBFbnZpcm9ubWVudEVy
cm9yICVzJyAlIChzb3VyY2UsIGUpKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAg
IyBDaGVjayBmb3IgaW52YWxpZCBvciBvdXQgb2YgZGF0ZSBweWMgZmlsZS4KKyAgICAgICAgaWYg
KGxlbihkYXRhKSAhPSAxMiBvciBkYXRhWzo0XSAhPSBpbXAuZ2V0X21hZ2ljKCkgb3IKKyAgICAg
ICAgICAgICAgICBzdHJ1Y3QudW5wYWNrKCI8bGwiLCBkYXRhWzQ6XSkgIT0gKG10aW1lLCBzaXpl
KSk6CisgICAgICAgICAgICB0cmFjZSgnX3JlYWRfcHljKCVzKTogaW52YWxpZCBvciBvdXQgb2Yg
ZGF0ZSBweWMnICUgc291cmNlKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgdHJ5
OgorICAgICAgICAgICAgY28gPSBtYXJzaGFsLmxvYWQoZnApCisgICAgICAgIGV4Y2VwdCBFeGNl
cHRpb24gYXMgZToKKyAgICAgICAgICAgIHRyYWNlKCdfcmVhZF9weWMoJXMpOiBtYXJzaGFsLmxv
YWQgZXJyb3IgJXMnICUgKHNvdXJjZSwgZSkpCisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAg
ICAgICBpZiBub3QgaXNpbnN0YW5jZShjbywgdHlwZXMuQ29kZVR5cGUpOgorICAgICAgICAgICAg
dHJhY2UoJ19yZWFkX3B5Yyglcyk6IG5vdCBhIGNvZGUgb2JqZWN0JyAlIHNvdXJjZSkKKyAgICAg
ICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHJldHVybiBjbworCisKK2RlZiByZXdyaXRlX2Fz
c2VydHMobW9kKToKKyAgICAiIiJSZXdyaXRlIHRoZSBhc3NlcnQgc3RhdGVtZW50cyBpbiBtb2Qu
IiIiCisgICAgQXNzZXJ0aW9uUmV3cml0ZXIoKS5ydW4obW9kKQorCisKK2RlZiBfc2FmZXJlcHIo
b2JqKToKKyAgICAiIiJHZXQgYSBzYWZlIHJlcHIgb2YgYW4gb2JqZWN0IGZvciBhc3NlcnRpb24g
ZXJyb3IgbWVzc2FnZXMuCisKKyAgICBUaGUgYXNzZXJ0aW9uIGZvcm1hdHRpbmcgKHV0aWwuZm9y
bWF0X2V4cGxhbmF0aW9uKCkpIHJlcXVpcmVzCisgICAgbmV3bGluZXMgdG8gYmUgZXNjYXBlZCBz
aW5jZSB0aGV5IGFyZSBhIHNwZWNpYWwgY2hhcmFjdGVyIGZvciBpdC4KKyAgICBOb3JtYWxseSBh
c3NlcnRpb24udXRpbC5mb3JtYXRfZXhwbGFuYXRpb24oKSBkb2VzIHRoaXMgYnV0IGZvciBhCisg
ICAgY3VzdG9tIHJlcHIgaXQgaXMgcG9zc2libGUgdG8gY29udGFpbiBvbmUgb2YgdGhlIHNwZWNp
YWwgZXNjYXBlCisgICAgc2VxdWVuY2VzLCBlc3BlY2lhbGx5ICdcbnsnIGFuZCAnXG59JyBhcmUg
bGlrZWx5IHRvIGJlIHByZXNlbnQgaW4KKyAgICBKU09OIHJlcHJzLgorCisgICAgIiIiCisgICAg
cmVwciA9IHB5LmlvLnNhZmVyZXByKG9iaikKKyAgICBpZiBweS5idWlsdGluLl9pc3RleHQocmVw
cik6CisgICAgICAgIHQgPSBweS5idWlsdGluLnRleHQKKyAgICBlbHNlOgorICAgICAgICB0ID0g
cHkuYnVpbHRpbi5ieXRlcworICAgIHJldHVybiByZXByLnJlcGxhY2UodCgiXG4iKSwgdCgiXFxu
IikpCisKKworZnJvbSBfcHl0ZXN0LmFzc2VydGlvbi51dGlsIGltcG9ydCBmb3JtYXRfZXhwbGFu
YXRpb24gYXMgX2Zvcm1hdF9leHBsYW5hdGlvbiAjIG5vcWEKKworZGVmIF9mb3JtYXRfYXNzZXJ0
bXNnKG9iaik6CisgICAgIiIiRm9ybWF0IHRoZSBjdXN0b20gYXNzZXJ0aW9uIG1lc3NhZ2UgZ2l2
ZW4uCisKKyAgICBGb3Igc3RyaW5ncyB0aGlzIHNpbXBseSByZXBsYWNlcyBuZXdsaW5lcyB3aXRo
ICdcbn4nIHNvIHRoYXQKKyAgICB1dGlsLmZvcm1hdF9leHBsYW5hdGlvbigpIHdpbGwgcHJlc2Vy
dmUgdGhlbSBpbnN0ZWFkIG9mIGVzY2FwaW5nCisgICAgbmV3bGluZXMuICBGb3Igb3RoZXIgb2Jq
ZWN0cyBweS5pby5zYWZlcmVwcigpIGlzIHVzZWQgZmlyc3QuCisKKyAgICAiIiIKKyAgICAjIHJl
cHJsaWIgYXBwZWFycyB0byBoYXZlIGEgYnVnIHdoaWNoIG1lYW5zIHRoYXQgaWYgYSBzdHJpbmcK
KyAgICAjIGNvbnRhaW5zIGEgbmV3bGluZSBpdCBnZXRzIGVzY2FwZWQsIGhvd2V2ZXIgaWYgYW4g
b2JqZWN0IGhhcyBhCisgICAgIyAuX19yZXByX18oKSB3aGljaCBjb250YWlucyBuZXdsaW5lcyBp
dCBkb2VzIG5vdCBnZXQgZXNjYXBlZC4KKyAgICAjIEhvd2V2ZXIgaW4gZWl0aGVyIGNhc2Ugd2Ug
d2FudCB0byBwcmVzZXJ2ZSB0aGUgbmV3bGluZS4KKyAgICBpZiBweS5idWlsdGluLl9pc3RleHQo
b2JqKSBvciBweS5idWlsdGluLl9pc2J5dGVzKG9iaik6CisgICAgICAgIHMgPSBvYmoKKyAgICAg
ICAgaXNfcmVwciA9IEZhbHNlCisgICAgZWxzZToKKyAgICAgICAgcyA9IHB5LmlvLnNhZmVyZXBy
KG9iaikKKyAgICAgICAgaXNfcmVwciA9IFRydWUKKyAgICBpZiBweS5idWlsdGluLl9pc3RleHQo
cyk6CisgICAgICAgIHQgPSBweS5idWlsdGluLnRleHQKKyAgICBlbHNlOgorICAgICAgICB0ID0g
cHkuYnVpbHRpbi5ieXRlcworICAgIHMgPSBzLnJlcGxhY2UodCgiXG4iKSwgdCgiXG5+IikpLnJl
cGxhY2UodCgiJSIpLCB0KCIlJSIpKQorICAgIGlmIGlzX3JlcHI6CisgICAgICAgIHMgPSBzLnJl
cGxhY2UodCgiXFxuIiksIHQoIlxufiIpKQorICAgIHJldHVybiBzCisKK2RlZiBfc2hvdWxkX3Jl
cHJfZ2xvYmFsX25hbWUob2JqKToKKyAgICByZXR1cm4gbm90IGhhc2F0dHIob2JqLCAiX19uYW1l
X18iKSBhbmQgbm90IHB5LmJ1aWx0aW4uY2FsbGFibGUob2JqKQorCitkZWYgX2Zvcm1hdF9ib29s
b3AoZXhwbGFuYXRpb25zLCBpc19vcik6CisgICAgZXhwbGFuYXRpb24gPSAiKCIgKyAoaXNfb3Ig
YW5kICIgb3IgIiBvciAiIGFuZCAiKS5qb2luKGV4cGxhbmF0aW9ucykgKyAiKSIKKyAgICBpZiBw
eS5idWlsdGluLl9pc3RleHQoZXhwbGFuYXRpb24pOgorICAgICAgICB0ID0gcHkuYnVpbHRpbi50
ZXh0CisgICAgZWxzZToKKyAgICAgICAgdCA9IHB5LmJ1aWx0aW4uYnl0ZXMKKyAgICByZXR1cm4g
ZXhwbGFuYXRpb24ucmVwbGFjZSh0KCclJyksIHQoJyUlJykpCisKK2RlZiBfY2FsbF9yZXByY29t
cGFyZShvcHMsIHJlc3VsdHMsIGV4cGxzLCBlYWNoX29iaik6CisgICAgZm9yIGksIHJlcywgZXhw
bCBpbiB6aXAocmFuZ2UobGVuKG9wcykpLCByZXN1bHRzLCBleHBscyk6CisgICAgICAgIHRyeToK
KyAgICAgICAgICAgIGRvbmUgPSBub3QgcmVzCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246Cisg
ICAgICAgICAgICBkb25lID0gVHJ1ZQorICAgICAgICBpZiBkb25lOgorICAgICAgICAgICAgYnJl
YWsKKyAgICBpZiB1dGlsLl9yZXByY29tcGFyZSBpcyBub3QgTm9uZToKKyAgICAgICAgY3VzdG9t
ID0gdXRpbC5fcmVwcmNvbXBhcmUob3BzW2ldLCBlYWNoX29ialtpXSwgZWFjaF9vYmpbaSArIDFd
KQorICAgICAgICBpZiBjdXN0b20gaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gY3Vz
dG9tCisgICAgcmV0dXJuIGV4cGwKKworCit1bmFyeV9tYXAgPSB7CisgICAgYXN0Lk5vdDogIm5v
dCAlcyIsCisgICAgYXN0LkludmVydDogIn4lcyIsCisgICAgYXN0LlVTdWI6ICItJXMiLAorICAg
IGFzdC5VQWRkOiAiKyVzIgorfQorCitiaW5vcF9tYXAgPSB7CisgICAgYXN0LkJpdE9yOiAifCIs
CisgICAgYXN0LkJpdFhvcjogIl4iLAorICAgIGFzdC5CaXRBbmQ6ICImIiwKKyAgICBhc3QuTFNo
aWZ0OiAiPDwiLAorICAgIGFzdC5SU2hpZnQ6ICI+PiIsCisgICAgYXN0LkFkZDogIisiLAorICAg
IGFzdC5TdWI6ICItIiwKKyAgICBhc3QuTXVsdDogIioiLAorICAgIGFzdC5EaXY6ICIvIiwKKyAg
ICBhc3QuRmxvb3JEaXY6ICIvLyIsCisgICAgYXN0Lk1vZDogIiUlIiwgIyBlc2NhcGVkIGZvciBz
dHJpbmcgZm9ybWF0dGluZworICAgIGFzdC5FcTogIj09IiwKKyAgICBhc3QuTm90RXE6ICIhPSIs
CisgICAgYXN0Lkx0OiAiPCIsCisgICAgYXN0Lkx0RTogIjw9IiwKKyAgICBhc3QuR3Q6ICI+IiwK
KyAgICBhc3QuR3RFOiAiPj0iLAorICAgIGFzdC5Qb3c6ICIqKiIsCisgICAgYXN0LklzOiAiaXMi
LAorICAgIGFzdC5Jc05vdDogImlzIG5vdCIsCisgICAgYXN0LkluOiAiaW4iLAorICAgIGFzdC5O
b3RJbjogIm5vdCBpbiIKK30KKyMgUHl0aG9uIDMuNSsgY29tcGF0aWJpbGl0eQordHJ5OgorICAg
IGJpbm9wX21hcFthc3QuTWF0TXVsdF0gPSAiQCIKK2V4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAg
ICBwYXNzCisKKyMgUHl0aG9uIDMuNCsgY29tcGF0aWJpbGl0eQoraWYgaGFzYXR0cihhc3QsICJO
YW1lQ29uc3RhbnQiKToKKyAgICBfTmFtZUNvbnN0YW50ID0gYXN0Lk5hbWVDb25zdGFudAorZWxz
ZToKKyAgICBkZWYgX05hbWVDb25zdGFudChjKToKKyAgICAgICAgcmV0dXJuIGFzdC5OYW1lKHN0
cihjKSwgYXN0LkxvYWQoKSkKKworCitkZWYgc2V0X2xvY2F0aW9uKG5vZGUsIGxpbmVubywgY29s
X29mZnNldCk6CisgICAgIiIiU2V0IG5vZGUgbG9jYXRpb24gaW5mb3JtYXRpb24gcmVjdXJzaXZl
bHkuIiIiCisgICAgZGVmIF9maXgobm9kZSwgbGluZW5vLCBjb2xfb2Zmc2V0KToKKyAgICAgICAg
aWYgImxpbmVubyIgaW4gbm9kZS5fYXR0cmlidXRlczoKKyAgICAgICAgICAgIG5vZGUubGluZW5v
ID0gbGluZW5vCisgICAgICAgIGlmICJjb2xfb2Zmc2V0IiBpbiBub2RlLl9hdHRyaWJ1dGVzOgor
ICAgICAgICAgICAgbm9kZS5jb2xfb2Zmc2V0ID0gY29sX29mZnNldAorICAgICAgICBmb3IgY2hp
bGQgaW4gYXN0Lml0ZXJfY2hpbGRfbm9kZXMobm9kZSk6CisgICAgICAgICAgICBfZml4KGNoaWxk
LCBsaW5lbm8sIGNvbF9vZmZzZXQpCisgICAgX2ZpeChub2RlLCBsaW5lbm8sIGNvbF9vZmZzZXQp
CisgICAgcmV0dXJuIG5vZGUKKworCitjbGFzcyBBc3NlcnRpb25SZXdyaXRlcihhc3QuTm9kZVZp
c2l0b3IpOgorICAgICIiIkFzc2VydGlvbiByZXdyaXRpbmcgaW1wbGVtZW50YXRpb24uCisKKyAg
ICBUaGUgbWFpbiBlbnRyeXBvaW50IGlzIHRvIGNhbGwgLnJ1bigpIHdpdGggYW4gYXN0Lk1vZHVs
ZSBpbnN0YW5jZSwKKyAgICB0aGlzIHdpbGwgdGhlbiBmaW5kIGFsbCB0aGUgYXNzZXJ0IHN0YXRl
bWVudHMgYW5kIHJlLXdyaXRlIHRoZW0gdG8KKyAgICBwcm92aWRlIGludGVybWVkaWF0ZSB2YWx1
ZXMgYW5kIGEgZGV0YWlsZWQgYXNzZXJ0aW9uIGVycm9yLiAgU2VlCisgICAgaHR0cDovL3B5Yml0
ZXMuYmxvZ3Nwb3QuYmUvMjAxMS8wNy9iZWhpbmQtc2NlbmVzLW9mLXB5dGVzdHMtbmV3LWFzc2Vy
dGlvbi5odG1sCisgICAgZm9yIGFuIG92ZXJ2aWV3IG9mIGhvdyB0aGlzIHdvcmtzLgorCisgICAg
VGhlIGVudHJ5IHBvaW50IGhlcmUgaXMgLnJ1bigpIHdoaWNoIHdpbGwgaXRlcmF0ZSBvdmVyIGFs
bCB0aGUKKyAgICBzdGF0ZW1lbnRzIGluIGFuIGFzdC5Nb2R1bGUgYW5kIGZvciBlYWNoIGFzdC5B
c3NlcnQgc3RhdGVtZW50IGl0CisgICAgZmluZHMgY2FsbCAudmlzaXQoKSB3aXRoIGl0LiAgVGhl
biAudmlzaXRfQXNzZXJ0KCkgdGFrZXMgb3ZlciBhbmQKKyAgICBpcyByZXNwb25zaWJsZSBmb3Ig
Y3JlYXRpbmcgbmV3IGFzdCBzdGF0ZW1lbnRzIHRvIHJlcGxhY2UgdGhlCisgICAgb3JpZ2luYWwg
YXNzZXJ0IHN0YXRlbWVudDogaXQgcmUtd3JpdGVzIHRoZSB0ZXN0IG9mIGFuIGFzc2VydGlvbgor
ICAgIHRvIHByb3ZpZGUgaW50ZXJtZWRpYXRlIHZhbHVlcyBhbmQgcmVwbGFjZSBpdCB3aXRoIGFu
IGlmIHN0YXRlbWVudAorICAgIHdoaWNoIHJhaXNlcyBhbiBhc3NlcnRpb24gZXJyb3Igd2l0aCBh
IGRldGFpbGVkIGV4cGxhbmF0aW9uIGluCisgICAgY2FzZSB0aGUgZXhwcmVzc2lvbiBpcyBmYWxz
ZS4KKworICAgIEZvciB0aGlzIC52aXNpdF9Bc3NlcnQoKSB1c2VzIHRoZSB2aXNpdG9yIHBhdHRl
cm4gdG8gdmlzaXQgYWxsIHRoZQorICAgIEFTVCBub2RlcyBvZiB0aGUgYXN0LkFzc2VydC50ZXN0
IGZpZWxkLCBlYWNoIHZpc2l0IGNhbGwgcmV0dXJuaW5nCisgICAgYW4gQVNUIG5vZGUgYW5kIHRo
ZSBjb3JyZXNwb25kaW5nIGV4cGxhbmF0aW9uIHN0cmluZy4gIER1cmluZyB0aGlzCisgICAgc3Rh
dGUgaXMga2VwdCBpbiBzZXZlcmFsIGluc3RhbmNlIGF0dHJpYnV0ZXM6CisKKyAgICA6c3RhdGVt
ZW50czogQWxsIHRoZSBBU1Qgc3RhdGVtZW50cyB3aGljaCB3aWxsIHJlcGxhY2UgdGhlIGFzc2Vy
dAorICAgICAgIHN0YXRlbWVudC4KKworICAgIDp2YXJpYWJsZXM6IFRoaXMgaXMgcG9wdWxhdGVk
IGJ5IC52YXJpYWJsZSgpIHdpdGggZWFjaCB2YXJpYWJsZQorICAgICAgIHVzZWQgYnkgdGhlIHN0
YXRlbWVudHMgc28gdGhhdCB0aGV5IGNhbiBhbGwgYmUgc2V0IHRvIE5vbmUgYXQKKyAgICAgICB0
aGUgZW5kIG9mIHRoZSBzdGF0ZW1lbnRzLgorCisgICAgOnZhcmlhYmxlX2NvdW50ZXI6IENvdW50
ZXIgdG8gY3JlYXRlIG5ldyB1bmlxdWUgdmFyaWFibGVzIG5lZWRlZAorICAgICAgIGJ5IHN0YXRl
bWVudHMuICBWYXJpYWJsZXMgYXJlIGNyZWF0ZWQgdXNpbmcgLnZhcmlhYmxlKCkgYW5kCisgICAg
ICAgaGF2ZSB0aGUgZm9ybSBvZiAiQHB5X2Fzc2VydDAiLgorCisgICAgOm9uX2ZhaWx1cmU6IFRo
ZSBBU1Qgc3RhdGVtZW50cyB3aGljaCB3aWxsIGJlIGV4ZWN1dGVkIGlmIHRoZQorICAgICAgIGFz
c2VydGlvbiB0ZXN0IGZhaWxzLiAgVGhpcyBpcyB0aGUgY29kZSB3aGljaCB3aWxsIGNvbnN0cnVj
dAorICAgICAgIHRoZSBmYWlsdXJlIG1lc3NhZ2UgYW5kIHJhaXNlcyB0aGUgQXNzZXJ0aW9uRXJy
b3IuCisKKyAgICA6ZXhwbGFuYXRpb25fc3BlY2lmaWVyczogQSBkaWN0IGZpbGxlZCBieSAuZXhw
bGFuYXRpb25fcGFyYW0oKQorICAgICAgIHdpdGggJS1mb3JtYXR0aW5nIHBsYWNlaG9sZGVycyBh
bmQgdGhlaXIgY29ycmVzcG9uZGluZworICAgICAgIGV4cHJlc3Npb25zIHRvIHVzZSBpbiB0aGUg
YnVpbGRpbmcgb2YgYW4gYXNzZXJ0aW9uIG1lc3NhZ2UuCisgICAgICAgVGhpcyBpcyB1c2VkIGJ5
IC5wb3BfZm9ybWF0X2NvbnRleHQoKSB0byBidWlsZCBhIG1lc3NhZ2UuCisKKyAgICA6c3RhY2s6
IEEgc3RhY2sgb2YgdGhlIGV4cGxhbmF0aW9uX3NwZWNpZmllcnMgZGljdHMgbWFpbnRhaW5lZCBi
eQorICAgICAgIC5wdXNoX2Zvcm1hdF9jb250ZXh0KCkgYW5kIC5wb3BfZm9ybWF0X2NvbnRleHQo
KSB3aGljaCBhbGxvd3MKKyAgICAgICB0byBidWlsZCBhbm90aGVyICUtZm9ybWF0dGVkIHN0cmlu
ZyB3aGlsZSBhbHJlYWR5IGJ1aWxkaW5nIG9uZS4KKworICAgIFRoaXMgc3RhdGUgaXMgcmVzZXQg
b24gZXZlcnkgbmV3IGFzc2VydCBzdGF0ZW1lbnQgdmlzaXRlZCBhbmQgdXNlZAorICAgIGJ5IHRo
ZSBvdGhlciB2aXNpdG9ycy4KKworICAgICIiIgorCisgICAgZGVmIHJ1bihzZWxmLCBtb2QpOgor
ICAgICAgICAiIiJGaW5kIGFsbCBhc3NlcnQgc3RhdGVtZW50cyBpbiAqbW9kKiBhbmQgcmV3cml0
ZSB0aGVtLiIiIgorICAgICAgICBpZiBub3QgbW9kLmJvZHk6CisgICAgICAgICAgICAjIE5vdGhp
bmcgdG8gZG8uCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgIyBJbnNlcnQgc29tZSBzcGVj
aWFsIGltcG9ydHMgYXQgdGhlIHRvcCBvZiB0aGUgbW9kdWxlIGJ1dCBhZnRlciBhbnkKKyAgICAg
ICAgIyBkb2NzdHJpbmdzIGFuZCBfX2Z1dHVyZV9fIGltcG9ydHMuCisgICAgICAgIGFsaWFzZXMg
PSBbYXN0LmFsaWFzKHB5LmJ1aWx0aW4uYnVpbHRpbnMuX19uYW1lX18sICJAcHlfYnVpbHRpbnMi
KSwKKyAgICAgICAgICAgICAgICAgICBhc3QuYWxpYXMoIl9weXRlc3QuYXNzZXJ0aW9uLnJld3Jp
dGUiLCAiQHB5dGVzdF9hciIpXQorICAgICAgICBleHBlY3RfZG9jc3RyaW5nID0gVHJ1ZQorICAg
ICAgICBwb3MgPSAwCisgICAgICAgIGxpbmVubyA9IDAKKyAgICAgICAgZm9yIGl0ZW0gaW4gbW9k
LmJvZHk6CisgICAgICAgICAgICBpZiAoZXhwZWN0X2RvY3N0cmluZyBhbmQgaXNpbnN0YW5jZShp
dGVtLCBhc3QuRXhwcikgYW5kCisgICAgICAgICAgICAgICAgICAgIGlzaW5zdGFuY2UoaXRlbS52
YWx1ZSwgYXN0LlN0cikpOgorICAgICAgICAgICAgICAgIGRvYyA9IGl0ZW0udmFsdWUucworICAg
ICAgICAgICAgICAgIGlmICJQWVRFU1RfRE9OVF9SRVdSSVRFIiBpbiBkb2M6CisgICAgICAgICAg
ICAgICAgICAgICMgVGhlIG1vZHVsZSBoYXMgZGlzYWJsZWQgYXNzZXJ0aW9uIHJld3JpdGluZy4K
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgbGluZW5vICs9IGxl
bihkb2MpIC0gMQorICAgICAgICAgICAgICAgIGV4cGVjdF9kb2NzdHJpbmcgPSBGYWxzZQorICAg
ICAgICAgICAgZWxpZiAobm90IGlzaW5zdGFuY2UoaXRlbSwgYXN0LkltcG9ydEZyb20pIG9yIGl0
ZW0ubGV2ZWwgPiAwIG9yCisgICAgICAgICAgICAgICAgICBpdGVtLm1vZHVsZSAhPSAiX19mdXR1
cmVfXyIpOgorICAgICAgICAgICAgICAgIGxpbmVubyA9IGl0ZW0ubGluZW5vCisgICAgICAgICAg
ICAgICAgYnJlYWsKKyAgICAgICAgICAgIHBvcyArPSAxCisgICAgICAgIGltcG9ydHMgPSBbYXN0
LkltcG9ydChbYWxpYXNdLCBsaW5lbm89bGluZW5vLCBjb2xfb2Zmc2V0PTApCisgICAgICAgICAg
ICAgICAgICAgZm9yIGFsaWFzIGluIGFsaWFzZXNdCisgICAgICAgIG1vZC5ib2R5W3Bvczpwb3Nd
ID0gaW1wb3J0cworICAgICAgICAjIENvbGxlY3QgYXNzZXJ0cy4KKyAgICAgICAgbm9kZXMgPSBb
bW9kXQorICAgICAgICB3aGlsZSBub2RlczoKKyAgICAgICAgICAgIG5vZGUgPSBub2Rlcy5wb3Ao
KQorICAgICAgICAgICAgZm9yIG5hbWUsIGZpZWxkIGluIGFzdC5pdGVyX2ZpZWxkcyhub2RlKToK
KyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGZpZWxkLCBsaXN0KToKKyAgICAgICAgICAg
ICAgICAgICAgbmV3ID0gW10KKyAgICAgICAgICAgICAgICAgICAgZm9yIGksIGNoaWxkIGluIGVu
dW1lcmF0ZShmaWVsZCk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGNo
aWxkLCBhc3QuQXNzZXJ0KToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFRyYW5zZm9y
bSBhc3NlcnQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3LmV4dGVuZChzZWxmLnZp
c2l0KGNoaWxkKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbmV3LmFwcGVuZChjaGlsZCkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiBpc2luc3RhbmNlKGNoaWxkLCBhc3QuQVNUKToKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbm9kZXMuYXBwZW5kKGNoaWxkKQorICAgICAgICAgICAgICAgICAgICBzZXRh
dHRyKG5vZGUsIG5hbWUsIG5ldykKKyAgICAgICAgICAgICAgICBlbGlmIChpc2luc3RhbmNlKGZp
ZWxkLCBhc3QuQVNUKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAjIERvbid0IHJlY3Vyc2Ug
aW50byBleHByZXNzaW9ucyBhcyB0aGV5IGNhbid0IGNvbnRhaW4KKyAgICAgICAgICAgICAgICAg
ICAgICAjIGFzc2VydHMuCisgICAgICAgICAgICAgICAgICAgICAgbm90IGlzaW5zdGFuY2UoZmll
bGQsIGFzdC5leHByKSk6CisgICAgICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChmaWVsZCkK
KworICAgIGRlZiB2YXJpYWJsZShzZWxmKToKKyAgICAgICAgIiIiR2V0IGEgbmV3IHZhcmlhYmxl
LiIiIgorICAgICAgICAjIFVzZSBhIGNoYXJhY3RlciBpbnZhbGlkIGluIHB5dGhvbiBpZGVudGlm
aWVycyB0byBhdm9pZCBjbGFzaGluZy4KKyAgICAgICAgbmFtZSA9ICJAcHlfYXNzZXJ0IiArIHN0
cihuZXh0KHNlbGYudmFyaWFibGVfY291bnRlcikpCisgICAgICAgIHNlbGYudmFyaWFibGVzLmFw
cGVuZChuYW1lKQorICAgICAgICByZXR1cm4gbmFtZQorCisgICAgZGVmIGFzc2lnbihzZWxmLCBl
eHByKToKKyAgICAgICAgIiIiR2l2ZSAqZXhwciogYSBuYW1lLiIiIgorICAgICAgICBuYW1lID0g
c2VsZi52YXJpYWJsZSgpCisgICAgICAgIHNlbGYuc3RhdGVtZW50cy5hcHBlbmQoYXN0LkFzc2ln
bihbYXN0Lk5hbWUobmFtZSwgYXN0LlN0b3JlKCkpXSwgZXhwcikpCisgICAgICAgIHJldHVybiBh
c3QuTmFtZShuYW1lLCBhc3QuTG9hZCgpKQorCisgICAgZGVmIGRpc3BsYXkoc2VsZiwgZXhwcik6
CisgICAgICAgICIiIkNhbGwgcHkuaW8uc2FmZXJlcHIgb24gdGhlIGV4cHJlc3Npb24uIiIiCisg
ICAgICAgIHJldHVybiBzZWxmLmhlbHBlcigic2FmZXJlcHIiLCBleHByKQorCisgICAgZGVmIGhl
bHBlcihzZWxmLCBuYW1lLCAqYXJncyk6CisgICAgICAgICIiIkNhbGwgYSBoZWxwZXIgaW4gdGhp
cyBtb2R1bGUuIiIiCisgICAgICAgIHB5X25hbWUgPSBhc3QuTmFtZSgiQHB5dGVzdF9hciIsIGFz
dC5Mb2FkKCkpCisgICAgICAgIGF0dHIgPSBhc3QuQXR0cmlidXRlKHB5X25hbWUsICJfIiArIG5h
bWUsIGFzdC5Mb2FkKCkpCisgICAgICAgIHJldHVybiBhc3RfQ2FsbChhdHRyLCBsaXN0KGFyZ3Mp
LCBbXSkKKworICAgIGRlZiBidWlsdGluKHNlbGYsIG5hbWUpOgorICAgICAgICAiIiJSZXR1cm4g
dGhlIGJ1aWx0aW4gY2FsbGVkICpuYW1lKi4iIiIKKyAgICAgICAgYnVpbHRpbl9uYW1lID0gYXN0
Lk5hbWUoIkBweV9idWlsdGlucyIsIGFzdC5Mb2FkKCkpCisgICAgICAgIHJldHVybiBhc3QuQXR0
cmlidXRlKGJ1aWx0aW5fbmFtZSwgbmFtZSwgYXN0LkxvYWQoKSkKKworICAgIGRlZiBleHBsYW5h
dGlvbl9wYXJhbShzZWxmLCBleHByKToKKyAgICAgICAgIiIiUmV0dXJuIGEgbmV3IG5hbWVkICUt
Zm9ybWF0dGluZyBwbGFjZWhvbGRlciBmb3IgZXhwci4KKworICAgICAgICBUaGlzIGNyZWF0ZXMg
YSAlLWZvcm1hdHRpbmcgcGxhY2Vob2xkZXIgZm9yIGV4cHIgaW4gdGhlCisgICAgICAgIGN1cnJl
bnQgZm9ybWF0dGluZyBjb250ZXh0LCBlLmcuIGBgJShweTApc2BgLiAgVGhlIHBsYWNlaG9sZGVy
CisgICAgICAgIGFuZCBleHByIGFyZSBwbGFjZWQgaW4gdGhlIGN1cnJlbnQgZm9ybWF0IGNvbnRl
eHQgc28gdGhhdCBpdAorICAgICAgICBjYW4gYmUgdXNlZCBvbiB0aGUgbmV4dCBjYWxsIHRvIC5w
b3BfZm9ybWF0X2NvbnRleHQoKS4KKworICAgICAgICAiIiIKKyAgICAgICAgc3BlY2lmaWVyID0g
InB5IiArIHN0cihuZXh0KHNlbGYudmFyaWFibGVfY291bnRlcikpCisgICAgICAgIHNlbGYuZXhw
bGFuYXRpb25fc3BlY2lmaWVyc1tzcGVjaWZpZXJdID0gZXhwcgorICAgICAgICByZXR1cm4gIiUo
IiArIHNwZWNpZmllciArICIpcyIKKworICAgIGRlZiBwdXNoX2Zvcm1hdF9jb250ZXh0KHNlbGYp
OgorICAgICAgICAiIiJDcmVhdGUgYSBuZXcgZm9ybWF0dGluZyBjb250ZXh0LgorCisgICAgICAg
IFRoZSBmb3JtYXQgY29udGV4dCBpcyB1c2VkIGZvciB3aGVuIGFuIGV4cGxhbmF0aW9uIHdhbnRz
IHRvCisgICAgICAgIGhhdmUgYSB2YXJpYWJsZSB2YWx1ZSBmb3JtYXR0ZWQgaW4gdGhlIGFzc2Vy
dGlvbiBtZXNzYWdlLiAgSW4KKyAgICAgICAgdGhpcyBjYXNlIHRoZSB2YWx1ZSByZXF1aXJlZCBj
YW4gYmUgYWRkZWQgdXNpbmcKKyAgICAgICAgLmV4cGxhbmF0aW9uX3BhcmFtKCkuICBGaW5hbGx5
IC5wb3BfZm9ybWF0X2NvbnRleHQoKSBpcyB1c2VkCisgICAgICAgIHRvIGZvcm1hdCBhIHN0cmlu
ZyBvZiAlLWZvcm1hdHRlZCB2YWx1ZXMgYXMgYWRkZWQgYnkKKyAgICAgICAgLmV4cGxhbmF0aW9u
X3BhcmFtKCkuCisKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuZXhwbGFuYXRpb25fc3BlY2lm
aWVycyA9IHt9CisgICAgICAgIHNlbGYuc3RhY2suYXBwZW5kKHNlbGYuZXhwbGFuYXRpb25fc3Bl
Y2lmaWVycykKKworICAgIGRlZiBwb3BfZm9ybWF0X2NvbnRleHQoc2VsZiwgZXhwbF9leHByKToK
KyAgICAgICAgIiIiRm9ybWF0IHRoZSAlLWZvcm1hdHRlZCBzdHJpbmcgd2l0aCBjdXJyZW50IGZv
cm1hdCBjb250ZXh0LgorCisgICAgICAgIFRoZSBleHBsX2V4cHIgc2hvdWxkIGJlIGFuIGFzdC5T
dHIgaW5zdGFuY2UgY29uc3RydWN0ZWQgZnJvbQorICAgICAgICB0aGUgJS1wbGFjZWhvbGRlcnMg
Y3JlYXRlZCBieSAuZXhwbGFuYXRpb25fcGFyYW0oKS4gIFRoaXMgd2lsbAorICAgICAgICBhZGQg
dGhlIHJlcXVpcmVkIGNvZGUgdG8gZm9ybWF0IHNhaWQgc3RyaW5nIHRvIC5vbl9mYWlsdXJlIGFu
ZAorICAgICAgICByZXR1cm4gdGhlIGFzdC5OYW1lIGluc3RhbmNlIG9mIHRoZSBmb3JtYXR0ZWQg
c3RyaW5nLgorCisgICAgICAgICIiIgorICAgICAgICBjdXJyZW50ID0gc2VsZi5zdGFjay5wb3Ao
KQorICAgICAgICBpZiBzZWxmLnN0YWNrOgorICAgICAgICAgICAgc2VsZi5leHBsYW5hdGlvbl9z
cGVjaWZpZXJzID0gc2VsZi5zdGFja1stMV0KKyAgICAgICAga2V5cyA9IFthc3QuU3RyKGtleSkg
Zm9yIGtleSBpbiBjdXJyZW50LmtleXMoKV0KKyAgICAgICAgZm9ybWF0X2RpY3QgPSBhc3QuRGlj
dChrZXlzLCBsaXN0KGN1cnJlbnQudmFsdWVzKCkpKQorICAgICAgICBmb3JtID0gYXN0LkJpbk9w
KGV4cGxfZXhwciwgYXN0Lk1vZCgpLCBmb3JtYXRfZGljdCkKKyAgICAgICAgbmFtZSA9ICJAcHlf
Zm9ybWF0IiArIHN0cihuZXh0KHNlbGYudmFyaWFibGVfY291bnRlcikpCisgICAgICAgIHNlbGYu
b25fZmFpbHVyZS5hcHBlbmQoYXN0LkFzc2lnbihbYXN0Lk5hbWUobmFtZSwgYXN0LlN0b3JlKCkp
XSwgZm9ybSkpCisgICAgICAgIHJldHVybiBhc3QuTmFtZShuYW1lLCBhc3QuTG9hZCgpKQorCisg
ICAgZGVmIGdlbmVyaWNfdmlzaXQoc2VsZiwgbm9kZSk6CisgICAgICAgICIiIkhhbmRsZSBleHBy
ZXNzaW9ucyB3ZSBkb24ndCBoYXZlIGN1c3RvbSBjb2RlIGZvci4iIiIKKyAgICAgICAgYXNzZXJ0
IGlzaW5zdGFuY2Uobm9kZSwgYXN0LmV4cHIpCisgICAgICAgIHJlcyA9IHNlbGYuYXNzaWduKG5v
ZGUpCisgICAgICAgIHJldHVybiByZXMsIHNlbGYuZXhwbGFuYXRpb25fcGFyYW0oc2VsZi5kaXNw
bGF5KHJlcykpCisKKyAgICBkZWYgdmlzaXRfQXNzZXJ0KHNlbGYsIGFzc2VydF8pOgorICAgICAg
ICAiIiJSZXR1cm4gdGhlIEFTVCBzdGF0ZW1lbnRzIHRvIHJlcGxhY2UgdGhlIGFzdC5Bc3NlcnQg
aW5zdGFuY2UuCisKKyAgICAgICAgVGhpcyByZS13cml0ZXMgdGhlIHRlc3Qgb2YgYW4gYXNzZXJ0
aW9uIHRvIHByb3ZpZGUKKyAgICAgICAgaW50ZXJtZWRpYXRlIHZhbHVlcyBhbmQgcmVwbGFjZSBp
dCB3aXRoIGFuIGlmIHN0YXRlbWVudCB3aGljaAorICAgICAgICByYWlzZXMgYW4gYXNzZXJ0aW9u
IGVycm9yIHdpdGggYSBkZXRhaWxlZCBleHBsYW5hdGlvbiBpbiBjYXNlCisgICAgICAgIHRoZSBl
eHByZXNzaW9uIGlzIGZhbHNlLgorCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnN0YXRlbWVu
dHMgPSBbXQorICAgICAgICBzZWxmLnZhcmlhYmxlcyA9IFtdCisgICAgICAgIHNlbGYudmFyaWFi
bGVfY291bnRlciA9IGl0ZXJ0b29scy5jb3VudCgpCisgICAgICAgIHNlbGYuc3RhY2sgPSBbXQor
ICAgICAgICBzZWxmLm9uX2ZhaWx1cmUgPSBbXQorICAgICAgICBzZWxmLnB1c2hfZm9ybWF0X2Nv
bnRleHQoKQorICAgICAgICAjIFJld3JpdGUgYXNzZXJ0IGludG8gYSBidW5jaCBvZiBzdGF0ZW1l
bnRzLgorICAgICAgICB0b3BfY29uZGl0aW9uLCBleHBsYW5hdGlvbiA9IHNlbGYudmlzaXQoYXNz
ZXJ0Xy50ZXN0KQorICAgICAgICAjIENyZWF0ZSBmYWlsdXJlIG1lc3NhZ2UuCisgICAgICAgIGJv
ZHkgPSBzZWxmLm9uX2ZhaWx1cmUKKyAgICAgICAgbmVnYXRpb24gPSBhc3QuVW5hcnlPcChhc3Qu
Tm90KCksIHRvcF9jb25kaXRpb24pCisgICAgICAgIHNlbGYuc3RhdGVtZW50cy5hcHBlbmQoYXN0
LklmKG5lZ2F0aW9uLCBib2R5LCBbXSkpCisgICAgICAgIGlmIGFzc2VydF8ubXNnOgorICAgICAg
ICAgICAgYXNzZXJ0bXNnID0gc2VsZi5oZWxwZXIoJ2Zvcm1hdF9hc3NlcnRtc2cnLCBhc3NlcnRf
Lm1zZykKKyAgICAgICAgICAgIGV4cGxhbmF0aW9uID0gIlxuPmFzc2VydCAiICsgZXhwbGFuYXRp
b24KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFzc2VydG1zZyA9IGFzdC5TdHIoIiIpCisg
ICAgICAgICAgICBleHBsYW5hdGlvbiA9ICJhc3NlcnQgIiArIGV4cGxhbmF0aW9uCisgICAgICAg
IHRlbXBsYXRlID0gYXN0LkJpbk9wKGFzc2VydG1zZywgYXN0LkFkZCgpLCBhc3QuU3RyKGV4cGxh
bmF0aW9uKSkKKyAgICAgICAgbXNnID0gc2VsZi5wb3BfZm9ybWF0X2NvbnRleHQodGVtcGxhdGUp
CisgICAgICAgIGZtdCA9IHNlbGYuaGVscGVyKCJmb3JtYXRfZXhwbGFuYXRpb24iLCBtc2cpCisg
ICAgICAgIGVycl9uYW1lID0gYXN0Lk5hbWUoIkFzc2VydGlvbkVycm9yIiwgYXN0LkxvYWQoKSkK
KyAgICAgICAgZXhjID0gYXN0X0NhbGwoZXJyX25hbWUsIFtmbXRdLCBbXSkKKyAgICAgICAgaWYg
c3lzLnZlcnNpb25faW5mb1swXSA+PSAzOgorICAgICAgICAgICAgcmFpc2VfID0gYXN0LlJhaXNl
KGV4YywgTm9uZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlXyA9IGFzdC5SYWlz
ZShleGMsIE5vbmUsIE5vbmUpCisgICAgICAgIGJvZHkuYXBwZW5kKHJhaXNlXykKKyAgICAgICAg
IyBDbGVhciB0ZW1wb3JhcnkgdmFyaWFibGVzIGJ5IHNldHRpbmcgdGhlbSB0byBOb25lLgorICAg
ICAgICBpZiBzZWxmLnZhcmlhYmxlczoKKyAgICAgICAgICAgIHZhcmlhYmxlcyA9IFthc3QuTmFt
ZShuYW1lLCBhc3QuU3RvcmUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbmFtZSBp
biBzZWxmLnZhcmlhYmxlc10KKyAgICAgICAgICAgIGNsZWFyID0gYXN0LkFzc2lnbih2YXJpYWJs
ZXMsIF9OYW1lQ29uc3RhbnQoTm9uZSkpCisgICAgICAgICAgICBzZWxmLnN0YXRlbWVudHMuYXBw
ZW5kKGNsZWFyKQorICAgICAgICAjIEZpeCBsaW5lIG51bWJlcnMuCisgICAgICAgIGZvciBzdG10
IGluIHNlbGYuc3RhdGVtZW50czoKKyAgICAgICAgICAgIHNldF9sb2NhdGlvbihzdG10LCBhc3Nl
cnRfLmxpbmVubywgYXNzZXJ0Xy5jb2xfb2Zmc2V0KQorICAgICAgICByZXR1cm4gc2VsZi5zdGF0
ZW1lbnRzCisKKyAgICBkZWYgdmlzaXRfTmFtZShzZWxmLCBuYW1lKToKKyAgICAgICAgIyBEaXNw
bGF5IHRoZSByZXByIG9mIHRoZSBuYW1lIGlmIGl0J3MgYSBsb2NhbCB2YXJpYWJsZSBvcgorICAg
ICAgICAjIF9zaG91bGRfcmVwcl9nbG9iYWxfbmFtZSgpIHRoaW5rcyBpdCdzIGFjY2VwdGFibGUu
CisgICAgICAgIGxvY3MgPSBhc3RfQ2FsbChzZWxmLmJ1aWx0aW4oImxvY2FscyIpLCBbXSwgW10p
CisgICAgICAgIGlubG9jcyA9IGFzdC5Db21wYXJlKGFzdC5TdHIobmFtZS5pZCksIFthc3QuSW4o
KV0sIFtsb2NzXSkKKyAgICAgICAgZG9yZXByID0gc2VsZi5oZWxwZXIoInNob3VsZF9yZXByX2ds
b2JhbF9uYW1lIiwgbmFtZSkKKyAgICAgICAgdGVzdCA9IGFzdC5Cb29sT3AoYXN0Lk9yKCksIFtp
bmxvY3MsIGRvcmVwcl0pCisgICAgICAgIGV4cHIgPSBhc3QuSWZFeHAodGVzdCwgc2VsZi5kaXNw
bGF5KG5hbWUpLCBhc3QuU3RyKG5hbWUuaWQpKQorICAgICAgICByZXR1cm4gbmFtZSwgc2VsZi5l
eHBsYW5hdGlvbl9wYXJhbShleHByKQorCisgICAgZGVmIHZpc2l0X0Jvb2xPcChzZWxmLCBib29s
b3ApOgorICAgICAgICByZXNfdmFyID0gc2VsZi52YXJpYWJsZSgpCisgICAgICAgIGV4cGxfbGlz
dCA9IHNlbGYuYXNzaWduKGFzdC5MaXN0KFtdLCBhc3QuTG9hZCgpKSkKKyAgICAgICAgYXBwID0g
YXN0LkF0dHJpYnV0ZShleHBsX2xpc3QsICJhcHBlbmQiLCBhc3QuTG9hZCgpKQorICAgICAgICBp
c19vciA9IGludChpc2luc3RhbmNlKGJvb2xvcC5vcCwgYXN0Lk9yKSkKKyAgICAgICAgYm9keSA9
IHNhdmUgPSBzZWxmLnN0YXRlbWVudHMKKyAgICAgICAgZmFpbF9zYXZlID0gc2VsZi5vbl9mYWls
dXJlCisgICAgICAgIGxldmVscyA9IGxlbihib29sb3AudmFsdWVzKSAtIDEKKyAgICAgICAgc2Vs
Zi5wdXNoX2Zvcm1hdF9jb250ZXh0KCkKKyAgICAgICAgIyBQcm9jZXNzIGVhY2ggb3BlcmFuZCwg
c2hvcnQtY2lyY3V0aW5nIGlmIG5lZWRlZC4KKyAgICAgICAgZm9yIGksIHYgaW4gZW51bWVyYXRl
KGJvb2xvcC52YWx1ZXMpOgorICAgICAgICAgICAgaWYgaToKKyAgICAgICAgICAgICAgICBmYWls
X2lubmVyID0gW10KKyAgICAgICAgICAgICAgICAjIGNvbmQgaXMgc2V0IGluIGEgcHJpb3IgbG9v
cCBpdGVyYXRpb24gYmVsb3cKKyAgICAgICAgICAgICAgICBzZWxmLm9uX2ZhaWx1cmUuYXBwZW5k
KGFzdC5JZihjb25kLCBmYWlsX2lubmVyLCBbXSkpICMgbm9xYQorICAgICAgICAgICAgICAgIHNl
bGYub25fZmFpbHVyZSA9IGZhaWxfaW5uZXIKKyAgICAgICAgICAgIHNlbGYucHVzaF9mb3JtYXRf
Y29udGV4dCgpCisgICAgICAgICAgICByZXMsIGV4cGwgPSBzZWxmLnZpc2l0KHYpCisgICAgICAg
ICAgICBib2R5LmFwcGVuZChhc3QuQXNzaWduKFthc3QuTmFtZShyZXNfdmFyLCBhc3QuU3RvcmUo
KSldLCByZXMpKQorICAgICAgICAgICAgZXhwbF9mb3JtYXQgPSBzZWxmLnBvcF9mb3JtYXRfY29u
dGV4dChhc3QuU3RyKGV4cGwpKQorICAgICAgICAgICAgY2FsbCA9IGFzdF9DYWxsKGFwcCwgW2V4
cGxfZm9ybWF0XSwgW10pCisgICAgICAgICAgICBzZWxmLm9uX2ZhaWx1cmUuYXBwZW5kKGFzdC5F
eHByKGNhbGwpKQorICAgICAgICAgICAgaWYgaSA8IGxldmVsczoKKyAgICAgICAgICAgICAgICBj
b25kID0gcmVzCisgICAgICAgICAgICAgICAgaWYgaXNfb3I6CisgICAgICAgICAgICAgICAgICAg
IGNvbmQgPSBhc3QuVW5hcnlPcChhc3QuTm90KCksIGNvbmQpCisgICAgICAgICAgICAgICAgaW5u
ZXIgPSBbXQorICAgICAgICAgICAgICAgIHNlbGYuc3RhdGVtZW50cy5hcHBlbmQoYXN0LklmKGNv
bmQsIGlubmVyLCBbXSkpCisgICAgICAgICAgICAgICAgc2VsZi5zdGF0ZW1lbnRzID0gYm9keSA9
IGlubmVyCisgICAgICAgIHNlbGYuc3RhdGVtZW50cyA9IHNhdmUKKyAgICAgICAgc2VsZi5vbl9m
YWlsdXJlID0gZmFpbF9zYXZlCisgICAgICAgIGV4cGxfdGVtcGxhdGUgPSBzZWxmLmhlbHBlcigi
Zm9ybWF0X2Jvb2xvcCIsIGV4cGxfbGlzdCwgYXN0Lk51bShpc19vcikpCisgICAgICAgIGV4cGwg
PSBzZWxmLnBvcF9mb3JtYXRfY29udGV4dChleHBsX3RlbXBsYXRlKQorICAgICAgICByZXR1cm4g
YXN0Lk5hbWUocmVzX3ZhciwgYXN0LkxvYWQoKSksIHNlbGYuZXhwbGFuYXRpb25fcGFyYW0oZXhw
bCkKKworICAgIGRlZiB2aXNpdF9VbmFyeU9wKHNlbGYsIHVuYXJ5KToKKyAgICAgICAgcGF0dGVy
biA9IHVuYXJ5X21hcFt1bmFyeS5vcC5fX2NsYXNzX19dCisgICAgICAgIG9wZXJhbmRfcmVzLCBv
cGVyYW5kX2V4cGwgPSBzZWxmLnZpc2l0KHVuYXJ5Lm9wZXJhbmQpCisgICAgICAgIHJlcyA9IHNl
bGYuYXNzaWduKGFzdC5VbmFyeU9wKHVuYXJ5Lm9wLCBvcGVyYW5kX3JlcykpCisgICAgICAgIHJl
dHVybiByZXMsIHBhdHRlcm4gJSAob3BlcmFuZF9leHBsLCkKKworICAgIGRlZiB2aXNpdF9CaW5P
cChzZWxmLCBiaW5vcCk6CisgICAgICAgIHN5bWJvbCA9IGJpbm9wX21hcFtiaW5vcC5vcC5fX2Ns
YXNzX19dCisgICAgICAgIGxlZnRfZXhwciwgbGVmdF9leHBsID0gc2VsZi52aXNpdChiaW5vcC5s
ZWZ0KQorICAgICAgICByaWdodF9leHByLCByaWdodF9leHBsID0gc2VsZi52aXNpdChiaW5vcC5y
aWdodCkKKyAgICAgICAgZXhwbGFuYXRpb24gPSAiKCVzICVzICVzKSIgJSAobGVmdF9leHBsLCBz
eW1ib2wsIHJpZ2h0X2V4cGwpCisgICAgICAgIHJlcyA9IHNlbGYuYXNzaWduKGFzdC5CaW5PcChs
ZWZ0X2V4cHIsIGJpbm9wLm9wLCByaWdodF9leHByKSkKKyAgICAgICAgcmV0dXJuIHJlcywgZXhw
bGFuYXRpb24KKworICAgIGRlZiB2aXNpdF9DYWxsXzM1KHNlbGYsIGNhbGwpOgorICAgICAgICAi
IiIKKyAgICAgICAgdmlzaXQgYGFzdC5DYWxsYCBub2RlcyBvbiBQeXRob24zLjUgYW5kIGFmdGVy
CisgICAgICAgICIiIgorICAgICAgICBuZXdfZnVuYywgZnVuY19leHBsID0gc2VsZi52aXNpdChj
YWxsLmZ1bmMpCisgICAgICAgIGFyZ19leHBscyA9IFtdCisgICAgICAgIG5ld19hcmdzID0gW10K
KyAgICAgICAgbmV3X2t3YXJncyA9IFtdCisgICAgICAgIGZvciBhcmcgaW4gY2FsbC5hcmdzOgor
ICAgICAgICAgICAgcmVzLCBleHBsID0gc2VsZi52aXNpdChhcmcpCisgICAgICAgICAgICBhcmdf
ZXhwbHMuYXBwZW5kKGV4cGwpCisgICAgICAgICAgICBuZXdfYXJncy5hcHBlbmQocmVzKQorICAg
ICAgICBmb3Iga2V5d29yZCBpbiBjYWxsLmtleXdvcmRzOgorICAgICAgICAgICAgcmVzLCBleHBs
ID0gc2VsZi52aXNpdChrZXl3b3JkLnZhbHVlKQorICAgICAgICAgICAgbmV3X2t3YXJncy5hcHBl
bmQoYXN0LmtleXdvcmQoa2V5d29yZC5hcmcsIHJlcykpCisgICAgICAgICAgICBpZiBrZXl3b3Jk
LmFyZzoKKyAgICAgICAgICAgICAgICBhcmdfZXhwbHMuYXBwZW5kKGtleXdvcmQuYXJnICsgIj0i
ICsgZXhwbCkKKyAgICAgICAgICAgIGVsc2U6ICMjICoqYXJncyBoYXZlIGBhcmdgIGtleXdvcmRz
IHdpdGggYW4gLmFyZyBvZiBOb25lCisgICAgICAgICAgICAgICAgYXJnX2V4cGxzLmFwcGVuZCgi
KioiICsgZXhwbCkKKworICAgICAgICBleHBsID0gIiVzKCVzKSIgJSAoZnVuY19leHBsLCAnLCAn
LmpvaW4oYXJnX2V4cGxzKSkKKyAgICAgICAgbmV3X2NhbGwgPSBhc3QuQ2FsbChuZXdfZnVuYywg
bmV3X2FyZ3MsIG5ld19rd2FyZ3MpCisgICAgICAgIHJlcyA9IHNlbGYuYXNzaWduKG5ld19jYWxs
KQorICAgICAgICByZXNfZXhwbCA9IHNlbGYuZXhwbGFuYXRpb25fcGFyYW0oc2VsZi5kaXNwbGF5
KHJlcykpCisgICAgICAgIG91dGVyX2V4cGwgPSAiJXNcbnslcyA9ICVzXG59IiAlIChyZXNfZXhw
bCwgcmVzX2V4cGwsIGV4cGwpCisgICAgICAgIHJldHVybiByZXMsIG91dGVyX2V4cGwKKworICAg
IGRlZiB2aXNpdF9TdGFycmVkKHNlbGYsIHN0YXJyZWQpOgorICAgICAgICAjIEZyb20gUHl0aG9u
IDMuNSwgYSBTdGFycmVkIG5vZGUgY2FuIGFwcGVhciBpbiBhIGZ1bmN0aW9uIGNhbGwKKyAgICAg
ICAgcmVzLCBleHBsID0gc2VsZi52aXNpdChzdGFycmVkLnZhbHVlKQorICAgICAgICByZXR1cm4g
c3RhcnJlZCwgJyonICsgZXhwbAorCisgICAgZGVmIHZpc2l0X0NhbGxfbGVnYWN5KHNlbGYsIGNh
bGwpOgorICAgICAgICAiIiIKKyAgICAgICAgdmlzaXQgYGFzdC5DYWxsIG5vZGVzIG9uIDMuNCBh
bmQgYmVsb3dgCisgICAgICAgICIiIgorICAgICAgICBuZXdfZnVuYywgZnVuY19leHBsID0gc2Vs
Zi52aXNpdChjYWxsLmZ1bmMpCisgICAgICAgIGFyZ19leHBscyA9IFtdCisgICAgICAgIG5ld19h
cmdzID0gW10KKyAgICAgICAgbmV3X2t3YXJncyA9IFtdCisgICAgICAgIG5ld19zdGFyID0gbmV3
X2t3YXJnID0gTm9uZQorICAgICAgICBmb3IgYXJnIGluIGNhbGwuYXJnczoKKyAgICAgICAgICAg
IHJlcywgZXhwbCA9IHNlbGYudmlzaXQoYXJnKQorICAgICAgICAgICAgbmV3X2FyZ3MuYXBwZW5k
KHJlcykKKyAgICAgICAgICAgIGFyZ19leHBscy5hcHBlbmQoZXhwbCkKKyAgICAgICAgZm9yIGtl
eXdvcmQgaW4gY2FsbC5rZXl3b3JkczoKKyAgICAgICAgICAgIHJlcywgZXhwbCA9IHNlbGYudmlz
aXQoa2V5d29yZC52YWx1ZSkKKyAgICAgICAgICAgIG5ld19rd2FyZ3MuYXBwZW5kKGFzdC5rZXl3
b3JkKGtleXdvcmQuYXJnLCByZXMpKQorICAgICAgICAgICAgYXJnX2V4cGxzLmFwcGVuZChrZXl3
b3JkLmFyZyArICI9IiArIGV4cGwpCisgICAgICAgIGlmIGNhbGwuc3RhcmFyZ3M6CisgICAgICAg
ICAgICBuZXdfc3RhciwgZXhwbCA9IHNlbGYudmlzaXQoY2FsbC5zdGFyYXJncykKKyAgICAgICAg
ICAgIGFyZ19leHBscy5hcHBlbmQoIioiICsgZXhwbCkKKyAgICAgICAgaWYgY2FsbC5rd2FyZ3M6
CisgICAgICAgICAgICBuZXdfa3dhcmcsIGV4cGwgPSBzZWxmLnZpc2l0KGNhbGwua3dhcmdzKQor
ICAgICAgICAgICAgYXJnX2V4cGxzLmFwcGVuZCgiKioiICsgZXhwbCkKKyAgICAgICAgZXhwbCA9
ICIlcyglcykiICUgKGZ1bmNfZXhwbCwgJywgJy5qb2luKGFyZ19leHBscykpCisgICAgICAgIG5l
d19jYWxsID0gYXN0LkNhbGwobmV3X2Z1bmMsIG5ld19hcmdzLCBuZXdfa3dhcmdzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5ld19zdGFyLCBuZXdfa3dhcmcpCisgICAgICAgIHJlcyA9
IHNlbGYuYXNzaWduKG5ld19jYWxsKQorICAgICAgICByZXNfZXhwbCA9IHNlbGYuZXhwbGFuYXRp
b25fcGFyYW0oc2VsZi5kaXNwbGF5KHJlcykpCisgICAgICAgIG91dGVyX2V4cGwgPSAiJXNcbnsl
cyA9ICVzXG59IiAlIChyZXNfZXhwbCwgcmVzX2V4cGwsIGV4cGwpCisgICAgICAgIHJldHVybiBy
ZXMsIG91dGVyX2V4cGwKKworICAgICMgYXN0LkNhbGwgc2lnbmF0dXJlIGNoYW5nZWQgb24gMy41
LAorICAgICMgY29uZGl0aW9uYWxseSBjaGFuZ2UgIHdoaWNoIG1ldGhvZHMgaXMgbmFtZWQKKyAg
ICAjIHZpc2l0X0NhbGwgZGVwZW5kaW5nIG9uIFB5dGhvbiB2ZXJzaW9uCisgICAgaWYgc3lzLnZl
cnNpb25faW5mbyA+PSAoMywgNSk6CisgICAgICAgIHZpc2l0X0NhbGwgPSB2aXNpdF9DYWxsXzM1
CisgICAgZWxzZToKKyAgICAgICAgdmlzaXRfQ2FsbCA9IHZpc2l0X0NhbGxfbGVnYWN5CisKKwor
ICAgIGRlZiB2aXNpdF9BdHRyaWJ1dGUoc2VsZiwgYXR0cik6CisgICAgICAgIGlmIG5vdCBpc2lu
c3RhbmNlKGF0dHIuY3R4LCBhc3QuTG9hZCk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5nZW5l
cmljX3Zpc2l0KGF0dHIpCisgICAgICAgIHZhbHVlLCB2YWx1ZV9leHBsID0gc2VsZi52aXNpdChh
dHRyLnZhbHVlKQorICAgICAgICByZXMgPSBzZWxmLmFzc2lnbihhc3QuQXR0cmlidXRlKHZhbHVl
LCBhdHRyLmF0dHIsIGFzdC5Mb2FkKCkpKQorICAgICAgICByZXNfZXhwbCA9IHNlbGYuZXhwbGFu
YXRpb25fcGFyYW0oc2VsZi5kaXNwbGF5KHJlcykpCisgICAgICAgIHBhdCA9ICIlc1xueyVzID0g
JXMuJXNcbn0iCisgICAgICAgIGV4cGwgPSBwYXQgJSAocmVzX2V4cGwsIHJlc19leHBsLCB2YWx1
ZV9leHBsLCBhdHRyLmF0dHIpCisgICAgICAgIHJldHVybiByZXMsIGV4cGwKKworICAgIGRlZiB2
aXNpdF9Db21wYXJlKHNlbGYsIGNvbXApOgorICAgICAgICBzZWxmLnB1c2hfZm9ybWF0X2NvbnRl
eHQoKQorICAgICAgICBsZWZ0X3JlcywgbGVmdF9leHBsID0gc2VsZi52aXNpdChjb21wLmxlZnQp
CisgICAgICAgIHJlc192YXJpYWJsZXMgPSBbc2VsZi52YXJpYWJsZSgpIGZvciBpIGluIHJhbmdl
KGxlbihjb21wLm9wcykpXQorICAgICAgICBsb2FkX25hbWVzID0gW2FzdC5OYW1lKHYsIGFzdC5M
b2FkKCkpIGZvciB2IGluIHJlc192YXJpYWJsZXNdCisgICAgICAgIHN0b3JlX25hbWVzID0gW2Fz
dC5OYW1lKHYsIGFzdC5TdG9yZSgpKSBmb3IgdiBpbiByZXNfdmFyaWFibGVzXQorICAgICAgICBp
dCA9IHppcChyYW5nZShsZW4oY29tcC5vcHMpKSwgY29tcC5vcHMsIGNvbXAuY29tcGFyYXRvcnMp
CisgICAgICAgIGV4cGxzID0gW10KKyAgICAgICAgc3ltcyA9IFtdCisgICAgICAgIHJlc3VsdHMg
PSBbbGVmdF9yZXNdCisgICAgICAgIGZvciBpLCBvcCwgbmV4dF9vcGVyYW5kIGluIGl0OgorICAg
ICAgICAgICAgbmV4dF9yZXMsIG5leHRfZXhwbCA9IHNlbGYudmlzaXQobmV4dF9vcGVyYW5kKQor
ICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobmV4dF9yZXMpCisgICAgICAgICAgICBzeW0gPSBi
aW5vcF9tYXBbb3AuX19jbGFzc19fXQorICAgICAgICAgICAgc3ltcy5hcHBlbmQoYXN0LlN0cihz
eW0pKQorICAgICAgICAgICAgZXhwbCA9ICIlcyAlcyAlcyIgJSAobGVmdF9leHBsLCBzeW0sIG5l
eHRfZXhwbCkKKyAgICAgICAgICAgIGV4cGxzLmFwcGVuZChhc3QuU3RyKGV4cGwpKQorICAgICAg
ICAgICAgcmVzX2V4cHIgPSBhc3QuQ29tcGFyZShsZWZ0X3JlcywgW29wXSwgW25leHRfcmVzXSkK
KyAgICAgICAgICAgIHNlbGYuc3RhdGVtZW50cy5hcHBlbmQoYXN0LkFzc2lnbihbc3RvcmVfbmFt
ZXNbaV1dLCByZXNfZXhwcikpCisgICAgICAgICAgICBsZWZ0X3JlcywgbGVmdF9leHBsID0gbmV4
dF9yZXMsIG5leHRfZXhwbAorICAgICAgICAjIFVzZSBweXRlc3QuYXNzZXJ0aW9uLnV0aWwuX3Jl
cHJjb21wYXJlIGlmIHRoYXQncyBhdmFpbGFibGUuCisgICAgICAgIGV4cGxfY2FsbCA9IHNlbGYu
aGVscGVyKCJjYWxsX3JlcHJjb21wYXJlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYXN0LlR1cGxlKHN5bXMsIGFzdC5Mb2FkKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhc3QuVHVwbGUobG9hZF9uYW1lcywgYXN0LkxvYWQoKSksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFzdC5UdXBsZShleHBscywgYXN0LkxvYWQoKSksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFzdC5UdXBsZShyZXN1bHRzLCBhc3QuTG9hZCgpKSkK
KyAgICAgICAgaWYgbGVuKGNvbXAub3BzKSA+IDE6CisgICAgICAgICAgICByZXMgPSBhc3QuQm9v
bE9wKGFzdC5BbmQoKSwgbG9hZF9uYW1lcykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJl
cyA9IGxvYWRfbmFtZXNbMF0KKyAgICAgICAgcmV0dXJuIHJlcywgc2VsZi5leHBsYW5hdGlvbl9w
YXJhbShzZWxmLnBvcF9mb3JtYXRfY29udGV4dChleHBsX2NhbGwpKQpkaWZmIC0tZ2l0IGEvV2Vi
RHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L2Fzc2VydGlvbi91
dGlsLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0
L2Fzc2VydGlvbi91dGlsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li5mMmYyM2VmZWEyNwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVk
L3czYy90b29scy9weXRlc3QvX3B5dGVzdC9hc3NlcnRpb24vdXRpbC5weQpAQCAtMCwwICsxLDMz
MiBAQAorIiIiVXRpbGl0aWVzIGZvciBhc3NlcnRpb24gZGVidWdnaW5nIiIiCitpbXBvcnQgcHBy
aW50CisKK2ltcG9ydCBfcHl0ZXN0Ll9jb2RlCitpbXBvcnQgcHkKK3RyeToKKyAgICBmcm9tIGNv
bGxlY3Rpb25zIGltcG9ydCBTZXF1ZW5jZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIFNlcXVl
bmNlID0gbGlzdAorCitCdWlsdGluQXNzZXJ0aW9uRXJyb3IgPSBweS5idWlsdGluLmJ1aWx0aW5z
LkFzc2VydGlvbkVycm9yCit1ID0gcHkuYnVpbHRpbi5fdG90ZXh0CisKKyMgVGhlIF9yZXByY29t
cGFyZSBhdHRyaWJ1dGUgb24gdGhlIHV0aWwgbW9kdWxlIGlzIHVzZWQgYnkgdGhlIG5ldyBhc3Nl
cnRpb24KKyMgaW50ZXJwcmV0YXRpb24gY29kZSBhbmQgYXNzZXJ0aW9uIHJld3JpdGVyIHRvIGRl
dGVjdCB0aGlzIHBsdWdpbiB3YXMKKyMgbG9hZGVkIGFuZCBpbiB0dXJuIGNhbGwgdGhlIGhvb2tz
IGRlZmluZWQgaGVyZSBhcyBwYXJ0IG9mIHRoZQorIyBEZWJ1Z0ludGVycHJldGVyLgorX3JlcHJj
b21wYXJlID0gTm9uZQorCisKKyMgdGhlIHJlLWVuY29kaW5nIGlzIG5lZWRlZCBmb3IgcHl0aG9u
MiByZXByCisjIHdpdGggbm9uLWFzY2lpIGNoYXJhY3RlcnMgKHNlZSBpc3N1ZSA4NzcgYW5kIDEz
NzkpCitkZWYgZWN1KHMpOgorICAgIHRyeToKKyAgICAgICAgcmV0dXJuIHUocywgJ3V0Zi04Jywg
J3JlcGxhY2UnKQorICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgIHJldHVybiBzCisKKwor
ZGVmIGZvcm1hdF9leHBsYW5hdGlvbihleHBsYW5hdGlvbik6CisgICAgIiIiVGhpcyBmb3JtYXRz
IGFuIGV4cGxhbmF0aW9uCisKKyAgICBOb3JtYWxseSBhbGwgZW1iZWRkZWQgbmV3bGluZXMgYXJl
IGVzY2FwZWQsIGhvd2V2ZXIgdGhlcmUgYXJlCisgICAgdGhyZWUgZXhjZXB0aW9uczogXG57LCBc
bn0gYW5kIFxufi4gIFRoZSBmaXJzdCB0d28gYXJlIGludGVuZGVkCisgICAgY292ZXIgbmVzdGVk
IGV4cGxhbmF0aW9ucywgc2VlIGZ1bmN0aW9uIGFuZCBhdHRyaWJ1dGUgZXhwbGFuYXRpb25zCisg
ICAgZm9yIGV4YW1wbGVzICgudmlzaXRfQ2FsbCgpLCB2aXNpdF9BdHRyaWJ1dGUoKSkuICBUaGUg
bGFzdCBvbmUgaXMKKyAgICBmb3Igd2hlbiBvbmUgZXhwbGFuYXRpb24gbmVlZHMgdG8gc3BhbiBt
dWx0aXBsZSBsaW5lcywgZS5nLiB3aGVuCisgICAgZGlzcGxheWluZyBkaWZmcy4KKyAgICAiIiIK
KyAgICBleHBsYW5hdGlvbiA9IGVjdShleHBsYW5hdGlvbikKKyAgICBleHBsYW5hdGlvbiA9IF9j
b2xsYXBzZV9mYWxzZShleHBsYW5hdGlvbikKKyAgICBsaW5lcyA9IF9zcGxpdF9leHBsYW5hdGlv
bihleHBsYW5hdGlvbikKKyAgICByZXN1bHQgPSBfZm9ybWF0X2xpbmVzKGxpbmVzKQorICAgIHJl
dHVybiB1KCdcbicpLmpvaW4ocmVzdWx0KQorCisKK2RlZiBfY29sbGFwc2VfZmFsc2UoZXhwbGFu
YXRpb24pOgorICAgICIiIkNvbGxhcHNlIGV4cGFuc2lvbnMgb2YgRmFsc2UKKworICAgIFNvIHRo
aXMgc3RyaXBzIG91dCBhbnkgImFzc2VydCBGYWxzZVxue3doZXJlIEZhbHNlID0gLi4uXG59Igor
ICAgIGJsb2Nrcy4KKyAgICAiIiIKKyAgICB3aGVyZSA9IDAKKyAgICB3aGlsZSBUcnVlOgorICAg
ICAgICBzdGFydCA9IHdoZXJlID0gZXhwbGFuYXRpb24uZmluZCgiRmFsc2VcbntGYWxzZSA9ICIs
IHdoZXJlKQorICAgICAgICBpZiB3aGVyZSA9PSAtMToKKyAgICAgICAgICAgIGJyZWFrCisgICAg
ICAgIGxldmVsID0gMAorICAgICAgICBwcmV2X2MgPSBleHBsYW5hdGlvbltzdGFydF0KKyAgICAg
ICAgZm9yIGksIGMgaW4gZW51bWVyYXRlKGV4cGxhbmF0aW9uW3N0YXJ0Ol0pOgorICAgICAgICAg
ICAgaWYgcHJldl9jICsgYyA9PSAiXG57IjoKKyAgICAgICAgICAgICAgICBsZXZlbCArPSAxCisg
ICAgICAgICAgICBlbGlmIHByZXZfYyArIGMgPT0gIlxufSI6CisgICAgICAgICAgICAgICAgbGV2
ZWwgLT0gMQorICAgICAgICAgICAgICAgIGlmIG5vdCBsZXZlbDoKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWsKKyAgICAgICAgICAgIHByZXZfYyA9IGMKKyAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJ1bmJhbGFuY2VkIGJyYWNlczogJXIiICUgKGV4cGxh
bmF0aW9uLCkpCisgICAgICAgIGVuZCA9IHN0YXJ0ICsgaQorICAgICAgICB3aGVyZSA9IGVuZAor
ICAgICAgICBpZiBleHBsYW5hdGlvbltlbmQgLSAxXSA9PSAnXG4nOgorICAgICAgICAgICAgZXhw
bGFuYXRpb24gPSAoZXhwbGFuYXRpb25bOnN0YXJ0XSArIGV4cGxhbmF0aW9uW3N0YXJ0KzE1OmVu
ZC0xXSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBsYW5hdGlvbltlbmQrMTpdKQor
ICAgICAgICAgICAgd2hlcmUgLT0gMTcKKyAgICByZXR1cm4gZXhwbGFuYXRpb24KKworCitkZWYg
X3NwbGl0X2V4cGxhbmF0aW9uKGV4cGxhbmF0aW9uKToKKyAgICAiIiJSZXR1cm4gYSBsaXN0IG9m
IGluZGl2aWR1YWwgbGluZXMgaW4gdGhlIGV4cGxhbmF0aW9uCisKKyAgICBUaGlzIHdpbGwgcmV0
dXJuIGEgbGlzdCBvZiBsaW5lcyBzcGxpdCBvbiAnXG57JywgJ1xufScgYW5kICdcbn4nLgorICAg
IEFueSBvdGhlciBuZXdsaW5lcyB3aWxsIGJlIGVzY2FwZWQgYW5kIGFwcGVhciBpbiB0aGUgbGlu
ZSBhcyB0aGUKKyAgICBsaXRlcmFsICdcbicgY2hhcmFjdGVycy4KKyAgICAiIiIKKyAgICByYXdf
bGluZXMgPSAoZXhwbGFuYXRpb24gb3IgdSgnJykpLnNwbGl0KCdcbicpCisgICAgbGluZXMgPSBb
cmF3X2xpbmVzWzBdXQorICAgIGZvciBsIGluIHJhd19saW5lc1sxOl06CisgICAgICAgIGlmIGwg
YW5kIGxbMF0gaW4gWyd7JywgJ30nLCAnficsICc+J106CisgICAgICAgICAgICBsaW5lcy5hcHBl
bmQobCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxpbmVzWy0xXSArPSAnXFxuJyArIGwK
KyAgICByZXR1cm4gbGluZXMKKworCitkZWYgX2Zvcm1hdF9saW5lcyhsaW5lcyk6CisgICAgIiIi
Rm9ybWF0IHRoZSBpbmRpdmlkdWFsIGxpbmVzCisKKyAgICBUaGlzIHdpbGwgcmVwbGFjZSB0aGUg
J3snLCAnfScgYW5kICd+JyBjaGFyYWN0ZXJzIG9mIG91ciBtaW5pCisgICAgZm9ybWF0dGluZyBs
YW5ndWFnZSB3aXRoIHRoZSBwcm9wZXIgJ3doZXJlIC4uLicsICdhbmQgLi4uJyBhbmQgJyArCisg
ICAgLi4uJyB0ZXh0LCB0YWtpbmcgY2FyZSBvZiBpbmRlbnRhdGlvbiBhbG9uZyB0aGUgd2F5Lgor
CisgICAgUmV0dXJuIGEgbGlzdCBvZiBmb3JtYXR0ZWQgbGluZXMuCisgICAgIiIiCisgICAgcmVz
dWx0ID0gbGluZXNbOjFdCisgICAgc3RhY2sgPSBbMF0KKyAgICBzdGFja2NudCA9IFswXQorICAg
IGZvciBsaW5lIGluIGxpbmVzWzE6XToKKyAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCd7Jyk6
CisgICAgICAgICAgICBpZiBzdGFja2NudFstMV06CisgICAgICAgICAgICAgICAgcyA9IHUoJ2Fu
ZCAgICcpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHMgPSB1KCd3aGVyZSAn
KQorICAgICAgICAgICAgc3RhY2suYXBwZW5kKGxlbihyZXN1bHQpKQorICAgICAgICAgICAgc3Rh
Y2tjbnRbLTFdICs9IDEKKyAgICAgICAgICAgIHN0YWNrY250LmFwcGVuZCgwKQorICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZCh1KCcgKycpICsgdSgnICAnKSoobGVuKHN0YWNrKS0xKSArIHMgKyBs
aW5lWzE6XSkKKyAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoJ30nKToKKyAgICAgICAgICAg
IHN0YWNrLnBvcCgpCisgICAgICAgICAgICBzdGFja2NudC5wb3AoKQorICAgICAgICAgICAgcmVz
dWx0W3N0YWNrWy0xXV0gKz0gbGluZVsxOl0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFz
c2VydCBsaW5lWzBdIGluIFsnficsICc+J10KKyAgICAgICAgICAgIHN0YWNrWy0xXSArPSAxCisg
ICAgICAgICAgICBpbmRlbnQgPSBsZW4oc3RhY2spIGlmIGxpbmUuc3RhcnRzd2l0aCgnficpIGVs
c2UgbGVuKHN0YWNrKSAtIDEKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodSgnICAnKSppbmRl
bnQgKyBsaW5lWzE6XSkKKyAgICBhc3NlcnQgbGVuKHN0YWNrKSA9PSAxCisgICAgcmV0dXJuIHJl
c3VsdAorCisKKyMgUHJvdmlkZSBiYXNlc3RyaW5nIGluIHB5dGhvbjMKK3RyeToKKyAgICBiYXNl
c3RyaW5nID0gYmFzZXN0cmluZworZXhjZXB0IE5hbWVFcnJvcjoKKyAgICBiYXNlc3RyaW5nID0g
c3RyCisKKworZGVmIGFzc2VydHJlcHJfY29tcGFyZShjb25maWcsIG9wLCBsZWZ0LCByaWdodCk6
CisgICAgIiIiUmV0dXJuIHNwZWNpYWxpc2VkIGV4cGxhbmF0aW9ucyBmb3Igc29tZSBvcGVyYXRv
cnMvb3BlcmFuZHMiIiIKKyAgICB3aWR0aCA9IDgwIC0gMTUgLSBsZW4ob3ApIC0gMiAgIyAxNSBj
aGFycyBpbmRlbnRhdGlvbiwgMSBzcGFjZSBhcm91bmQgb3AKKyAgICBsZWZ0X3JlcHIgPSBweS5p
by5zYWZlcmVwcihsZWZ0LCBtYXhzaXplPWludCh3aWR0aC8yKSkKKyAgICByaWdodF9yZXByID0g
cHkuaW8uc2FmZXJlcHIocmlnaHQsIG1heHNpemU9d2lkdGgtbGVuKGxlZnRfcmVwcikpCisKKyAg
ICBzdW1tYXJ5ID0gdSgnJXMgJXMgJXMnKSAlIChlY3UobGVmdF9yZXByKSwgb3AsIGVjdShyaWdo
dF9yZXByKSkKKworICAgIGlzc2VxdWVuY2UgPSBsYW1iZGEgeDogKGlzaW5zdGFuY2UoeCwgKGxp
c3QsIHR1cGxlLCBTZXF1ZW5jZSkpIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5v
dCBpc2luc3RhbmNlKHgsIGJhc2VzdHJpbmcpKQorICAgIGlzdGV4dCA9IGxhbWJkYSB4OiBpc2lu
c3RhbmNlKHgsIGJhc2VzdHJpbmcpCisgICAgaXNkaWN0ID0gbGFtYmRhIHg6IGlzaW5zdGFuY2Uo
eCwgZGljdCkKKyAgICBpc3NldCA9IGxhbWJkYSB4OiBpc2luc3RhbmNlKHgsIChzZXQsIGZyb3pl
bnNldCkpCisKKyAgICBkZWYgaXNpdGVyYWJsZShvYmopOgorICAgICAgICB0cnk6CisgICAgICAg
ICAgICBpdGVyKG9iaikKKyAgICAgICAgICAgIHJldHVybiBub3QgaXN0ZXh0KG9iaikKKyAgICAg
ICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgdmVy
Ym9zZSA9IGNvbmZpZy5nZXRvcHRpb24oJ3ZlcmJvc2UnKQorICAgIGV4cGxhbmF0aW9uID0gTm9u
ZQorICAgIHRyeToKKyAgICAgICAgaWYgb3AgPT0gJz09JzoKKyAgICAgICAgICAgIGlmIGlzdGV4
dChsZWZ0KSBhbmQgaXN0ZXh0KHJpZ2h0KToKKyAgICAgICAgICAgICAgICBleHBsYW5hdGlvbiA9
IF9kaWZmX3RleHQobGVmdCwgcmlnaHQsIHZlcmJvc2UpCisgICAgICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgICAgIGlmIGlzc2VxdWVuY2UobGVmdCkgYW5kIGlzc2VxdWVuY2UocmlnaHQpOgor
ICAgICAgICAgICAgICAgICAgICBleHBsYW5hdGlvbiA9IF9jb21wYXJlX2VxX3NlcXVlbmNlKGxl
ZnQsIHJpZ2h0LCB2ZXJib3NlKQorICAgICAgICAgICAgICAgIGVsaWYgaXNzZXQobGVmdCkgYW5k
IGlzc2V0KHJpZ2h0KToKKyAgICAgICAgICAgICAgICAgICAgZXhwbGFuYXRpb24gPSBfY29tcGFy
ZV9lcV9zZXQobGVmdCwgcmlnaHQsIHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZWxpZiBpc2Rp
Y3QobGVmdCkgYW5kIGlzZGljdChyaWdodCk6CisgICAgICAgICAgICAgICAgICAgIGV4cGxhbmF0
aW9uID0gX2NvbXBhcmVfZXFfZGljdChsZWZ0LCByaWdodCwgdmVyYm9zZSkKKyAgICAgICAgICAg
ICAgICBpZiBpc2l0ZXJhYmxlKGxlZnQpIGFuZCBpc2l0ZXJhYmxlKHJpZ2h0KToKKyAgICAgICAg
ICAgICAgICAgICAgZXhwbCA9IF9jb21wYXJlX2VxX2l0ZXJhYmxlKGxlZnQsIHJpZ2h0LCB2ZXJi
b3NlKQorICAgICAgICAgICAgICAgICAgICBpZiBleHBsYW5hdGlvbiBpcyBub3QgTm9uZToKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGV4cGxhbmF0aW9uLmV4dGVuZChleHBsKQorICAgICAgICAg
ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgZXhwbGFuYXRpb24gPSBl
eHBsCisgICAgICAgIGVsaWYgb3AgPT0gJ25vdCBpbic6CisgICAgICAgICAgICBpZiBpc3RleHQo
bGVmdCkgYW5kIGlzdGV4dChyaWdodCk6CisgICAgICAgICAgICAgICAgZXhwbGFuYXRpb24gPSBf
bm90aW5fdGV4dChsZWZ0LCByaWdodCwgdmVyYm9zZSkKKyAgICBleGNlcHQgRXhjZXB0aW9uOgor
ICAgICAgICBleHBsYW5hdGlvbiA9IFsKKyAgICAgICAgICAgIHUoJyhweXRlc3RfYXNzZXJ0aW9u
IHBsdWdpbjogcmVwcmVzZW50YXRpb24gb2YgZGV0YWlscyBmYWlsZWQuICAnCisgICAgICAgICAg
ICAgICdQcm9iYWJseSBhbiBvYmplY3QgaGFzIGEgZmF1bHR5IF9fcmVwcl9fLiknKSwKKyAgICAg
ICAgICAgIHUoX3B5dGVzdC5fY29kZS5FeGNlcHRpb25JbmZvKCkpXQorCisgICAgaWYgbm90IGV4
cGxhbmF0aW9uOgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgcmV0dXJuIFtzdW1tYXJ5XSAr
IGV4cGxhbmF0aW9uCisKKworZGVmIF9kaWZmX3RleHQobGVmdCwgcmlnaHQsIHZlcmJvc2U9RmFs
c2UpOgorICAgICIiIlJldHVybiB0aGUgZXhwbGFuYXRpb24gZm9yIHRoZSBkaWZmIGJldHdlZW4g
dGV4dCBvciBieXRlcworCisgICAgVW5sZXNzIC0tdmVyYm9zZSBpcyB1c2VkIHRoaXMgd2lsbCBz
a2lwIGxlYWRpbmcgYW5kIHRyYWlsaW5nCisgICAgY2hhcmFjdGVycyB3aGljaCBhcmUgaWRlbnRp
Y2FsIHRvIGtlZXAgdGhlIGRpZmYgbWluaW1hbC4KKworICAgIElmIHRoZSBpbnB1dCBhcmUgYnl0
ZXMgdGhleSB3aWxsIGJlIHNhZmVseSBjb252ZXJ0ZWQgdG8gdGV4dC4KKyAgICAiIiIKKyAgICBm
cm9tIGRpZmZsaWIgaW1wb3J0IG5kaWZmCisgICAgZXhwbGFuYXRpb24gPSBbXQorICAgIGlmIGlz
aW5zdGFuY2UobGVmdCwgcHkuYnVpbHRpbi5ieXRlcyk6CisgICAgICAgIGxlZnQgPSB1KHJlcHIo
bGVmdClbMTotMV0pLnJlcGxhY2UocidcbicsICdcbicpCisgICAgaWYgaXNpbnN0YW5jZShyaWdo
dCwgcHkuYnVpbHRpbi5ieXRlcyk6CisgICAgICAgIHJpZ2h0ID0gdShyZXByKHJpZ2h0KVsxOi0x
XSkucmVwbGFjZShyJ1xuJywgJ1xuJykKKyAgICBpZiBub3QgdmVyYm9zZToKKyAgICAgICAgaSA9
IDAgICMganVzdCBpbiBjYXNlIGxlZnQgb3IgcmlnaHQgaGFzIHplcm8gbGVuZ3RoCisgICAgICAg
IGZvciBpIGluIHJhbmdlKG1pbihsZW4obGVmdCksIGxlbihyaWdodCkpKToKKyAgICAgICAgICAg
IGlmIGxlZnRbaV0gIT0gcmlnaHRbaV06CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAg
aWYgaSA+IDQyOgorICAgICAgICAgICAgaSAtPSAxMCAgICAgICAgICAgICAgICAgIyBQcm92aWRl
IHNvbWUgY29udGV4dAorICAgICAgICAgICAgZXhwbGFuYXRpb24gPSBbdSgnU2tpcHBpbmcgJXMg
aWRlbnRpY2FsIGxlYWRpbmcgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2hhcmFj
dGVycyBpbiBkaWZmLCB1c2UgLXYgdG8gc2hvdycpICUgaV0KKyAgICAgICAgICAgIGxlZnQgPSBs
ZWZ0W2k6XQorICAgICAgICAgICAgcmlnaHQgPSByaWdodFtpOl0KKyAgICAgICAgaWYgbGVuKGxl
ZnQpID09IGxlbihyaWdodCk6CisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4obGVmdCkp
OgorICAgICAgICAgICAgICAgIGlmIGxlZnRbLWldICE9IHJpZ2h0Wy1pXToKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIGkgPiA0MjoKKyAgICAgICAgICAgICAgICBp
IC09IDEwICAgICAjIFByb3ZpZGUgc29tZSBjb250ZXh0CisgICAgICAgICAgICAgICAgZXhwbGFu
YXRpb24gKz0gW3UoJ1NraXBwaW5nICVzIGlkZW50aWNhbCB0cmFpbGluZyAnCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJ2NoYXJhY3RlcnMgaW4gZGlmZiwgdXNlIC12IHRvIHNo
b3cnKSAlIGldCisgICAgICAgICAgICAgICAgbGVmdCA9IGxlZnRbOi1pXQorICAgICAgICAgICAg
ICAgIHJpZ2h0ID0gcmlnaHRbOi1pXQorICAgIGV4cGxhbmF0aW9uICs9IFtsaW5lLnN0cmlwKCdc
bicpCisgICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIG5kaWZmKGxlZnQuc3BsaXRsaW5l
cygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaWdodC5zcGxpdGxp
bmVzKCkpXQorICAgIHJldHVybiBleHBsYW5hdGlvbgorCisKK2RlZiBfY29tcGFyZV9lcV9pdGVy
YWJsZShsZWZ0LCByaWdodCwgdmVyYm9zZT1GYWxzZSk6CisgICAgaWYgbm90IHZlcmJvc2U6Cisg
ICAgICAgIHJldHVybiBbdSgnVXNlIC12IHRvIGdldCB0aGUgZnVsbCBkaWZmJyldCisgICAgIyBk
eW5hbWljIGltcG9ydCB0byBzcGVlZHVwIHB5dGVzdAorICAgIGltcG9ydCBkaWZmbGliCisKKyAg
ICB0cnk6CisgICAgICAgIGxlZnRfZm9ybWF0dGluZyA9IHBwcmludC5wZm9ybWF0KGxlZnQpLnNw
bGl0bGluZXMoKQorICAgICAgICByaWdodF9mb3JtYXR0aW5nID0gcHByaW50LnBmb3JtYXQocmln
aHQpLnNwbGl0bGluZXMoKQorICAgICAgICBleHBsYW5hdGlvbiA9IFt1KCdGdWxsIGRpZmY6Jyld
CisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgIyBoYWNrOiBQcmV0dHlQcmludGVyLnBm
b3JtYXQoKSBpbiBweXRob24gMiBmYWlscyB3aGVuIGZvcm1hdHRpbmcgaXRlbXMgdGhhdCBjYW4n
dCBiZSBzb3J0ZWQoKSwgaWUsIGNhbGxpbmcKKyAgICAgICAgIyBzb3J0ZWQoKSBvbiBhIGxpc3Qg
d291bGQgcmFpc2UuIFNlZSBpc3N1ZSAjNzE4LgorICAgICAgICAjIEFzIGEgd29ya2Fyb3VuZCwg
dGhlIGZ1bGwgZGlmZiBpcyBnZW5lcmF0ZWQgYnkgdXNpbmcgdGhlIHJlcHIoKSBzdHJpbmcgb2Yg
ZWFjaCBpdGVtIG9mIGVhY2ggY29udGFpbmVyLgorICAgICAgICBsZWZ0X2Zvcm1hdHRpbmcgPSBz
b3J0ZWQocmVwcih4KSBmb3IgeCBpbiBsZWZ0KQorICAgICAgICByaWdodF9mb3JtYXR0aW5nID0g
c29ydGVkKHJlcHIoeCkgZm9yIHggaW4gcmlnaHQpCisgICAgICAgIGV4cGxhbmF0aW9uID0gW3Uo
J0Z1bGwgZGlmZiAoZmFsbGJhY2sgdG8gY2FsbGluZyByZXByIG9uIGVhY2ggaXRlbSk6JyldCisg
ICAgZXhwbGFuYXRpb24uZXh0ZW5kKGxpbmUuc3RyaXAoKSBmb3IgbGluZSBpbiBkaWZmbGliLm5k
aWZmKGxlZnRfZm9ybWF0dGluZywgcmlnaHRfZm9ybWF0dGluZykpCisgICAgcmV0dXJuIGV4cGxh
bmF0aW9uCisKKworZGVmIF9jb21wYXJlX2VxX3NlcXVlbmNlKGxlZnQsIHJpZ2h0LCB2ZXJib3Nl
PUZhbHNlKToKKyAgICBleHBsYW5hdGlvbiA9IFtdCisgICAgZm9yIGkgaW4gcmFuZ2UobWluKGxl
bihsZWZ0KSwgbGVuKHJpZ2h0KSkpOgorICAgICAgICBpZiBsZWZ0W2ldICE9IHJpZ2h0W2ldOgor
ICAgICAgICAgICAgZXhwbGFuYXRpb24gKz0gW3UoJ0F0IGluZGV4ICVzIGRpZmY6ICVyICE9ICVy
JykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChpLCBsZWZ0W2ldLCByaWdodFtpXSld
CisgICAgICAgICAgICBicmVhaworICAgIGlmIGxlbihsZWZ0KSA+IGxlbihyaWdodCk6CisgICAg
ICAgIGV4cGxhbmF0aW9uICs9IFt1KCdMZWZ0IGNvbnRhaW5zIG1vcmUgaXRlbXMsIGZpcnN0IGV4
dHJhIGl0ZW06ICVzJykKKyAgICAgICAgICAgICAgICAgICAgICAgICUgcHkuaW8uc2FmZXJlcHIo
bGVmdFtsZW4ocmlnaHQpXSwpXQorICAgIGVsaWYgbGVuKGxlZnQpIDwgbGVuKHJpZ2h0KToKKyAg
ICAgICAgZXhwbGFuYXRpb24gKz0gWworICAgICAgICAgICAgdSgnUmlnaHQgY29udGFpbnMgbW9y
ZSBpdGVtcywgZmlyc3QgZXh0cmEgaXRlbTogJXMnKSAlCisgICAgICAgICAgICBweS5pby5zYWZl
cmVwcihyaWdodFtsZW4obGVmdCldLCldCisgICAgcmV0dXJuIGV4cGxhbmF0aW9uCisKKworZGVm
IF9jb21wYXJlX2VxX3NldChsZWZ0LCByaWdodCwgdmVyYm9zZT1GYWxzZSk6CisgICAgZXhwbGFu
YXRpb24gPSBbXQorICAgIGRpZmZfbGVmdCA9IGxlZnQgLSByaWdodAorICAgIGRpZmZfcmlnaHQg
PSByaWdodCAtIGxlZnQKKyAgICBpZiBkaWZmX2xlZnQ6CisgICAgICAgIGV4cGxhbmF0aW9uLmFw
cGVuZCh1KCdFeHRyYSBpdGVtcyBpbiB0aGUgbGVmdCBzZXQ6JykpCisgICAgICAgIGZvciBpdGVt
IGluIGRpZmZfbGVmdDoKKyAgICAgICAgICAgIGV4cGxhbmF0aW9uLmFwcGVuZChweS5pby5zYWZl
cmVwcihpdGVtKSkKKyAgICBpZiBkaWZmX3JpZ2h0OgorICAgICAgICBleHBsYW5hdGlvbi5hcHBl
bmQodSgnRXh0cmEgaXRlbXMgaW4gdGhlIHJpZ2h0IHNldDonKSkKKyAgICAgICAgZm9yIGl0ZW0g
aW4gZGlmZl9yaWdodDoKKyAgICAgICAgICAgIGV4cGxhbmF0aW9uLmFwcGVuZChweS5pby5zYWZl
cmVwcihpdGVtKSkKKyAgICByZXR1cm4gZXhwbGFuYXRpb24KKworCitkZWYgX2NvbXBhcmVfZXFf
ZGljdChsZWZ0LCByaWdodCwgdmVyYm9zZT1GYWxzZSk6CisgICAgZXhwbGFuYXRpb24gPSBbXQor
ICAgIGNvbW1vbiA9IHNldChsZWZ0KS5pbnRlcnNlY3Rpb24oc2V0KHJpZ2h0KSkKKyAgICBzYW1l
ID0gZGljdCgoaywgbGVmdFtrXSkgZm9yIGsgaW4gY29tbW9uIGlmIGxlZnRba10gPT0gcmlnaHRb
a10pCisgICAgaWYgc2FtZSBhbmQgbm90IHZlcmJvc2U6CisgICAgICAgIGV4cGxhbmF0aW9uICs9
IFt1KCdPbWl0dGluZyAlcyBpZGVudGljYWwgaXRlbXMsIHVzZSAtdiB0byBzaG93JykgJQorICAg
ICAgICAgICAgICAgICAgICAgICAgbGVuKHNhbWUpXQorICAgIGVsaWYgc2FtZToKKyAgICAgICAg
ZXhwbGFuYXRpb24gKz0gW3UoJ0NvbW1vbiBpdGVtczonKV0KKyAgICAgICAgZXhwbGFuYXRpb24g
Kz0gcHByaW50LnBmb3JtYXQoc2FtZSkuc3BsaXRsaW5lcygpCisgICAgZGlmZiA9IHNldChrIGZv
ciBrIGluIGNvbW1vbiBpZiBsZWZ0W2tdICE9IHJpZ2h0W2tdKQorICAgIGlmIGRpZmY6CisgICAg
ICAgIGV4cGxhbmF0aW9uICs9IFt1KCdEaWZmZXJpbmcgaXRlbXM6JyldCisgICAgICAgIGZvciBr
IGluIGRpZmY6CisgICAgICAgICAgICBleHBsYW5hdGlvbiArPSBbcHkuaW8uc2FmZXJlcHIoe2s6
IGxlZnRba119KSArICcgIT0gJyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHkuaW8u
c2FmZXJlcHIoe2s6IHJpZ2h0W2tdfSldCisgICAgZXh0cmFfbGVmdCA9IHNldChsZWZ0KSAtIHNl
dChyaWdodCkKKyAgICBpZiBleHRyYV9sZWZ0OgorICAgICAgICBleHBsYW5hdGlvbi5hcHBlbmQo
dSgnTGVmdCBjb250YWlucyBtb3JlIGl0ZW1zOicpKQorICAgICAgICBleHBsYW5hdGlvbi5leHRl
bmQocHByaW50LnBmb3JtYXQoCisgICAgICAgICAgICBkaWN0KChrLCBsZWZ0W2tdKSBmb3IgayBp
biBleHRyYV9sZWZ0KSkuc3BsaXRsaW5lcygpKQorICAgIGV4dHJhX3JpZ2h0ID0gc2V0KHJpZ2h0
KSAtIHNldChsZWZ0KQorICAgIGlmIGV4dHJhX3JpZ2h0OgorICAgICAgICBleHBsYW5hdGlvbi5h
cHBlbmQodSgnUmlnaHQgY29udGFpbnMgbW9yZSBpdGVtczonKSkKKyAgICAgICAgZXhwbGFuYXRp
b24uZXh0ZW5kKHBwcmludC5wZm9ybWF0KAorICAgICAgICAgICAgZGljdCgoaywgcmlnaHRba10p
IGZvciBrIGluIGV4dHJhX3JpZ2h0KSkuc3BsaXRsaW5lcygpKQorICAgIHJldHVybiBleHBsYW5h
dGlvbgorCisKK2RlZiBfbm90aW5fdGV4dCh0ZXJtLCB0ZXh0LCB2ZXJib3NlPUZhbHNlKToKKyAg
ICBpbmRleCA9IHRleHQuZmluZCh0ZXJtKQorICAgIGhlYWQgPSB0ZXh0WzppbmRleF0KKyAgICB0
YWlsID0gdGV4dFtpbmRleCtsZW4odGVybSk6XQorICAgIGNvcnJlY3RfdGV4dCA9IGhlYWQgKyB0
YWlsCisgICAgZGlmZiA9IF9kaWZmX3RleHQoY29ycmVjdF90ZXh0LCB0ZXh0LCB2ZXJib3NlKQor
ICAgIG5ld2RpZmYgPSBbdSgnJXMgaXMgY29udGFpbmVkIGhlcmU6JykgJSBweS5pby5zYWZlcmVw
cih0ZXJtLCBtYXhzaXplPTQyKV0KKyAgICBmb3IgbGluZSBpbiBkaWZmOgorICAgICAgICBpZiBs
aW5lLnN0YXJ0c3dpdGgodSgnU2tpcHBpbmcnKSk6CisgICAgICAgICAgICBjb250aW51ZQorICAg
ICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgodSgnLSAnKSk6CisgICAgICAgICAgICBjb250aW51ZQor
ICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgodSgnKyAnKSk6CisgICAgICAgICAgICBuZXdkaWZm
LmFwcGVuZCh1KCcgICcpICsgbGluZVsyOl0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBu
ZXdkaWZmLmFwcGVuZChsaW5lKQorICAgIHJldHVybiBuZXdkaWZmCmRpZmYgLS1naXQgYS9XZWJE
cml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvY2FjaGVwcm92aWRl
ci5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9j
YWNoZXByb3ZpZGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4w
NjU3MDAxZjJkNAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3cz
Yy90b29scy9weXRlc3QvX3B5dGVzdC9jYWNoZXByb3ZpZGVyLnB5CkBAIC0wLDAgKzEsMjQ1IEBA
CisiIiIKK21lcmdlZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgY2FjaGUgcHJvdmlkZXIKKwordGhl
IG5hbWUgY2FjaGUgd2FzIG5vdCBjaG9vc2VuIHRvIGVuc3VyZSBwbHVnZ3kgYXV0b21hdGljYWxs
eQoraWdub3JlcyB0aGUgZXh0ZXJuYWwgcHl0ZXN0LWNhY2hlCisiIiIKKworaW1wb3J0IHB5Citp
bXBvcnQgcHl0ZXN0CitpbXBvcnQganNvbgorZnJvbSBvcy5wYXRoIGltcG9ydCBzZXAgYXMgX3Nl
cCwgYWx0c2VwIGFzIF9hbHRzZXAKKworCitjbGFzcyBDYWNoZShvYmplY3QpOgorICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBjb25maWcpOgorICAgICAgICBzZWxmLmNvbmZpZyA9IGNvbmZpZworICAg
ICAgICBzZWxmLl9jYWNoZWRpciA9IGNvbmZpZy5yb290ZGlyLmpvaW4oIi5jYWNoZSIpCisgICAg
ICAgIHNlbGYudHJhY2UgPSBjb25maWcudHJhY2Uucm9vdC5nZXQoImNhY2hlIikKKyAgICAgICAg
aWYgY29uZmlnLmdldHZhbHVlKCJjYWNoZWNsZWFyIik6CisgICAgICAgICAgICBzZWxmLnRyYWNl
KCJjbGVhcmluZyBjYWNoZWRpciIpCisgICAgICAgICAgICBpZiBzZWxmLl9jYWNoZWRpci5jaGVj
aygpOgorICAgICAgICAgICAgICAgIHNlbGYuX2NhY2hlZGlyLnJlbW92ZSgpCisgICAgICAgICAg
ICBzZWxmLl9jYWNoZWRpci5ta2RpcigpCisKKyAgICBkZWYgbWFrZWRpcihzZWxmLCBuYW1lKToK
KyAgICAgICAgIiIiIHJldHVybiBhIGRpcmVjdG9yeSBwYXRoIG9iamVjdCB3aXRoIHRoZSBnaXZl
biBuYW1lLiAgSWYgdGhlCisgICAgICAgIGRpcmVjdG9yeSBkb2VzIG5vdCB5ZXQgZXhpc3QsIGl0
IHdpbGwgYmUgY3JlYXRlZC4gIFlvdSBjYW4gdXNlIGl0CisgICAgICAgIHRvIG1hbmFnZSBmaWxl
cyBsaWtlcyBlLiBnLiBzdG9yZS9yZXRyaWV2ZSBkYXRhYmFzZQorICAgICAgICBkdW1wcyBhY3Jv
c3MgdGVzdCBzZXNzaW9ucy4KKworICAgICAgICA6cGFyYW0gbmFtZTogbXVzdCBiZSBhIHN0cmlu
ZyBub3QgY29udGFpbmluZyBhIGBgL2BgIHNlcGFyYXRvci4KKyAgICAgICAgICAgICBNYWtlIHN1
cmUgdGhlIG5hbWUgY29udGFpbnMgeW91ciBwbHVnaW4gb3IgYXBwbGljYXRpb24KKyAgICAgICAg
ICAgICBpZGVudGlmaWVycyB0byBwcmV2ZW50IGNsYXNoZXMgd2l0aCBvdGhlciBjYWNoZSB1c2Vy
cy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIF9zZXAgaW4gbmFtZSBvciBfYWx0c2VwIGlzIG5v
dCBOb25lIGFuZCBfYWx0c2VwIGluIG5hbWU6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9y
KCJuYW1lIGlzIG5vdCBhbGxvd2VkIHRvIGNvbnRhaW4gcGF0aCBzZXBhcmF0b3JzIikKKyAgICAg
ICAgcmV0dXJuIHNlbGYuX2NhY2hlZGlyLmVuc3VyZV9kaXIoImQiLCBuYW1lKQorCisgICAgZGVm
IF9nZXR2YWx1ZXBhdGgoc2VsZiwga2V5KToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NhY2hlZGly
LmpvaW4oJ3YnLCAqa2V5LnNwbGl0KCcvJykpCisKKyAgICBkZWYgZ2V0KHNlbGYsIGtleSwgZGVm
YXVsdCk6CisgICAgICAgICIiIiByZXR1cm4gY2FjaGVkIHZhbHVlIGZvciB0aGUgZ2l2ZW4ga2V5
LiAgSWYgbm8gdmFsdWUKKyAgICAgICAgd2FzIHlldCBjYWNoZWQgb3IgdGhlIHZhbHVlIGNhbm5v
dCBiZSByZWFkLCB0aGUgc3BlY2lmaWVkCisgICAgICAgIGRlZmF1bHQgaXMgcmV0dXJuZWQuCisK
KyAgICAgICAgOnBhcmFtIGtleTogbXVzdCBiZSBhIGBgL2BgIHNlcGFyYXRlZCB2YWx1ZS4gVXN1
YWxseSB0aGUgZmlyc3QKKyAgICAgICAgICAgICBuYW1lIGlzIHRoZSBuYW1lIG9mIHlvdXIgcGx1
Z2luIG9yIHlvdXIgYXBwbGljYXRpb24uCisgICAgICAgIDpwYXJhbSBkZWZhdWx0OiBtdXN0IGJl
IHByb3ZpZGVkIGluIGNhc2Ugb2YgYSBjYWNoZS1taXNzIG9yCisgICAgICAgICAgICAgaW52YWxp
ZCBjYWNoZSB2YWx1ZXMuCisKKyAgICAgICAgIiIiCisgICAgICAgIHBhdGggPSBzZWxmLl9nZXR2
YWx1ZXBhdGgoa2V5KQorICAgICAgICBpZiBwYXRoLmNoZWNrKCk6CisgICAgICAgICAgICB0cnk6
CisgICAgICAgICAgICAgICAgd2l0aCBwYXRoLm9wZW4oInIiKSBhcyBmOgorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4ganNvbi5sb2FkKGYpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJv
cjoKKyAgICAgICAgICAgICAgICBzZWxmLnRyYWNlKCJjYWNoZS1pbnZhbGlkIGF0ICVzIiAlIChw
YXRoLCkpCisgICAgICAgIHJldHVybiBkZWZhdWx0CisKKyAgICBkZWYgc2V0KHNlbGYsIGtleSwg
dmFsdWUpOgorICAgICAgICAiIiIgc2F2ZSB2YWx1ZSBmb3IgdGhlIGdpdmVuIGtleS4KKworICAg
ICAgICA6cGFyYW0ga2V5OiBtdXN0IGJlIGEgYGAvYGAgc2VwYXJhdGVkIHZhbHVlLiBVc3VhbGx5
IHRoZSBmaXJzdAorICAgICAgICAgICAgIG5hbWUgaXMgdGhlIG5hbWUgb2YgeW91ciBwbHVnaW4g
b3IgeW91ciBhcHBsaWNhdGlvbi4KKyAgICAgICAgOnBhcmFtIHZhbHVlOiBtdXN0IGJlIG9mIGFu
eSBjb21iaW5hdGlvbiBvZiBiYXNpYworICAgICAgICAgICAgICAgcHl0aG9uIHR5cGVzLCBpbmNs
dWRpbmcgbmVzdGVkIHR5cGVzCisgICAgICAgICAgICAgICBsaWtlIGUuIGcuIGxpc3RzIG9mIGRp
Y3Rpb25hcmllcy4KKyAgICAgICAgIiIiCisgICAgICAgIHBhdGggPSBzZWxmLl9nZXR2YWx1ZXBh
dGgoa2V5KQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwYXRoLmRpcnBhdGgoKS5lbnN1cmVf
ZGlyKCkKKyAgICAgICAgZXhjZXB0IChweS5lcnJvci5FRVhJU1QsIHB5LmVycm9yLkVBQ0NFUyk6
CisgICAgICAgICAgICBzZWxmLmNvbmZpZy53YXJuKAorICAgICAgICAgICAgICAgIGNvZGU9J0k5
JywgbWVzc2FnZT0nY291bGQgbm90IGNyZWF0ZSBjYWNoZSBwYXRoICVzJyAlIChwYXRoLCkKKyAg
ICAgICAgICAgICkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB0cnk6CisgICAgICAgICAg
ICBmID0gcGF0aC5vcGVuKCd3JykKKyAgICAgICAgZXhjZXB0IHB5LmVycm9yLkVOT1RESVI6Cisg
ICAgICAgICAgICBzZWxmLmNvbmZpZy53YXJuKAorICAgICAgICAgICAgICAgIGNvZGU9J0k5Jywg
bWVzc2FnZT0nY2FjaGUgY291bGQgbm90IHdyaXRlIHBhdGggJXMnICUgKHBhdGgsKSkKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIHdpdGggZjoKKyAgICAgICAgICAgICAgICBzZWxmLnRyYWNl
KCJjYWNoZS13cml0ZSAlczogJXIiICUgKGtleSwgdmFsdWUsKSkKKyAgICAgICAgICAgICAgICBq
c29uLmR1bXAodmFsdWUsIGYsIGluZGVudD0yLCBzb3J0X2tleXM9VHJ1ZSkKKworCitjbGFzcyBM
RlBsdWdpbjoKKyAgICAiIiIgUGx1Z2luIHdoaWNoIGltcGxlbWVudHMgdGhlIC0tbGYgKHJ1biBs
YXN0LWZhaWxpbmcpIG9wdGlvbiAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29uZmlnKToK
KyAgICAgICAgc2VsZi5jb25maWcgPSBjb25maWcKKyAgICAgICAgYWN0aXZlX2tleXMgPSAnbGYn
LCAnZmFpbGVkZmlyc3QnCisgICAgICAgIHNlbGYuYWN0aXZlID0gYW55KGNvbmZpZy5nZXR2YWx1
ZShrZXkpIGZvciBrZXkgaW4gYWN0aXZlX2tleXMpCisgICAgICAgIGlmIHNlbGYuYWN0aXZlOgor
ICAgICAgICAgICAgc2VsZi5sYXN0ZmFpbGVkID0gY29uZmlnLmNhY2hlLmdldCgiY2FjaGUvbGFz
dGZhaWxlZCIsIHt9KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5sYXN0ZmFpbGVk
ID0ge30KKworICAgIGRlZiBweXRlc3RfcmVwb3J0X2hlYWRlcihzZWxmKToKKyAgICAgICAgaWYg
c2VsZi5hY3RpdmU6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5sYXN0ZmFpbGVkOgorICAgICAg
ICAgICAgICAgIG1vZGUgPSAicnVuIGFsbCAobm8gcmVjb3JkZWQgZmFpbHVyZXMpIgorICAgICAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtb2RlID0gInJlcnVuIGxhc3QgJWQgZmFpbHVy
ZXMlcyIgJSAoCisgICAgICAgICAgICAgICAgICAgIGxlbihzZWxmLmxhc3RmYWlsZWQpLAorICAg
ICAgICAgICAgICAgICAgICAiIGZpcnN0IiBpZiBzZWxmLmNvbmZpZy5nZXR2YWx1ZSgiZmFpbGVk
Zmlyc3QiKSBlbHNlICIiKQorICAgICAgICAgICAgcmV0dXJuICJydW4tbGFzdC1mYWlsdXJlOiAl
cyIgJSBtb2RlCisKKyAgICBkZWYgcHl0ZXN0X3J1bnRlc3RfbG9ncmVwb3J0KHNlbGYsIHJlcG9y
dCk6CisgICAgICAgIGlmIHJlcG9ydC5mYWlsZWQgYW5kICJ4ZmFpbCIgbm90IGluIHJlcG9ydC5r
ZXl3b3JkczoKKyAgICAgICAgICAgIHNlbGYubGFzdGZhaWxlZFtyZXBvcnQubm9kZWlkXSA9IFRy
dWUKKyAgICAgICAgZWxpZiBub3QgcmVwb3J0LmZhaWxlZDoKKyAgICAgICAgICAgIGlmIHJlcG9y
dC53aGVuID09ICJjYWxsIjoKKyAgICAgICAgICAgICAgICBzZWxmLmxhc3RmYWlsZWQucG9wKHJl
cG9ydC5ub2RlaWQsIE5vbmUpCisKKyAgICBkZWYgcHl0ZXN0X2NvbGxlY3RyZXBvcnQoc2VsZiwg
cmVwb3J0KToKKyAgICAgICAgcGFzc2VkID0gcmVwb3J0Lm91dGNvbWUgaW4gKCdwYXNzZWQnLCAn
c2tpcHBlZCcpCisgICAgICAgIGlmIHBhc3NlZDoKKyAgICAgICAgICAgIGlmIHJlcG9ydC5ub2Rl
aWQgaW4gc2VsZi5sYXN0ZmFpbGVkOgorICAgICAgICAgICAgICAgIHNlbGYubGFzdGZhaWxlZC5w
b3AocmVwb3J0Lm5vZGVpZCkKKyAgICAgICAgICAgICAgICBzZWxmLmxhc3RmYWlsZWQudXBkYXRl
KAorICAgICAgICAgICAgICAgICAgICAoaXRlbS5ub2RlaWQsIFRydWUpCisgICAgICAgICAgICAg
ICAgICAgIGZvciBpdGVtIGluIHJlcG9ydC5yZXN1bHQpCisgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICBzZWxmLmxhc3RmYWlsZWRbcmVwb3J0Lm5vZGVpZF0gPSBUcnVlCisKKyAgICBkZWYgcHl0
ZXN0X2NvbGxlY3Rpb25fbW9kaWZ5aXRlbXMoc2VsZiwgc2Vzc2lvbiwgY29uZmlnLCBpdGVtcyk6
CisgICAgICAgIGlmIHNlbGYuYWN0aXZlIGFuZCBzZWxmLmxhc3RmYWlsZWQ6CisgICAgICAgICAg
ICBwcmV2aW91c2x5X2ZhaWxlZCA9IFtdCisgICAgICAgICAgICBwcmV2aW91c2x5X3Bhc3NlZCA9
IFtdCisgICAgICAgICAgICBmb3IgaXRlbSBpbiBpdGVtczoKKyAgICAgICAgICAgICAgICBpZiBp
dGVtLm5vZGVpZCBpbiBzZWxmLmxhc3RmYWlsZWQ6CisgICAgICAgICAgICAgICAgICAgIHByZXZp
b3VzbHlfZmFpbGVkLmFwcGVuZChpdGVtKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICAgICAgICAgIHByZXZpb3VzbHlfcGFzc2VkLmFwcGVuZChpdGVtKQorICAgICAgICAgICAg
aWYgbm90IHByZXZpb3VzbHlfZmFpbGVkIGFuZCBwcmV2aW91c2x5X3Bhc3NlZDoKKyAgICAgICAg
ICAgICAgICAjIHJ1bm5pbmcgYSBzdWJzZXQgb2YgYWxsIHRlc3RzIHdpdGggcmVjb3JkZWQgZmFp
bHVyZXMgb3V0c2lkZQorICAgICAgICAgICAgICAgICMgb2YgdGhlIHNldCBvZiB0ZXN0cyBjdXJy
ZW50bHkgZXhlY3V0aW5nCisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxpZiBz
ZWxmLmNvbmZpZy5nZXR2YWx1ZSgiZmFpbGVkZmlyc3QiKToKKyAgICAgICAgICAgICAgICBpdGVt
c1s6XSA9IHByZXZpb3VzbHlfZmFpbGVkICsgcHJldmlvdXNseV9wYXNzZWQKKyAgICAgICAgICAg
IGVsc2U6CisgICAgICAgICAgICAgICAgaXRlbXNbOl0gPSBwcmV2aW91c2x5X2ZhaWxlZAorICAg
ICAgICAgICAgICAgIGNvbmZpZy5ob29rLnB5dGVzdF9kZXNlbGVjdGVkKGl0ZW1zPXByZXZpb3Vz
bHlfcGFzc2VkKQorCisgICAgZGVmIHB5dGVzdF9zZXNzaW9uZmluaXNoKHNlbGYsIHNlc3Npb24p
OgorICAgICAgICBjb25maWcgPSBzZWxmLmNvbmZpZworICAgICAgICBpZiBjb25maWcuZ2V0dmFs
dWUoImNhY2hlc2hvdyIpIG9yIGhhc2F0dHIoY29uZmlnLCAic2xhdmVpbnB1dCIpOgorICAgICAg
ICAgICAgcmV0dXJuCisgICAgICAgIHByZXZfZmFpbGVkID0gY29uZmlnLmNhY2hlLmdldCgiY2Fj
aGUvbGFzdGZhaWxlZCIsIE5vbmUpIGlzIG5vdCBOb25lCisgICAgICAgIGlmIChzZXNzaW9uLnRl
c3RzY29sbGVjdGVkIGFuZCBwcmV2X2ZhaWxlZCkgb3Igc2VsZi5sYXN0ZmFpbGVkOgorICAgICAg
ICAgICAgY29uZmlnLmNhY2hlLnNldCgiY2FjaGUvbGFzdGZhaWxlZCIsIHNlbGYubGFzdGZhaWxl
ZCkKKworCitkZWYgcHl0ZXN0X2FkZG9wdGlvbihwYXJzZXIpOgorICAgIGdyb3VwID0gcGFyc2Vy
LmdldGdyb3VwKCJnZW5lcmFsIikKKyAgICBncm91cC5hZGRvcHRpb24oCisgICAgICAgICctLWxm
JywgJy0tbGFzdC1mYWlsZWQnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZXN0PSJsZiIsCisgICAg
ICAgIGhlbHA9InJlcnVuIG9ubHkgdGhlIHRlc3RzIHRoYXQgZmFpbGVkICIKKyAgICAgICAgICAg
ICAiYXQgdGhlIGxhc3QgcnVuIChvciBhbGwgaWYgbm9uZSBmYWlsZWQpIikKKyAgICBncm91cC5h
ZGRvcHRpb24oCisgICAgICAgICctLWZmJywgJy0tZmFpbGVkLWZpcnN0JywgYWN0aW9uPSdzdG9y
ZV90cnVlJywgZGVzdD0iZmFpbGVkZmlyc3QiLAorICAgICAgICBoZWxwPSJydW4gYWxsIHRlc3Rz
IGJ1dCBydW4gdGhlIGxhc3QgZmFpbHVyZXMgZmlyc3QuICAiCisgICAgICAgICAgICAgIlRoaXMg
bWF5IHJlLW9yZGVyIHRlc3RzIGFuZCB0aHVzIGxlYWQgdG8gIgorICAgICAgICAgICAgICJyZXBl
YXRlZCBmaXh0dXJlIHNldHVwL3RlYXJkb3duIikKKyAgICBncm91cC5hZGRvcHRpb24oCisgICAg
ICAgICctLWNhY2hlLXNob3cnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZXN0PSJjYWNoZXNob3ci
LAorICAgICAgICBoZWxwPSJzaG93IGNhY2hlIGNvbnRlbnRzLCBkb24ndCBwZXJmb3JtIGNvbGxl
Y3Rpb24gb3IgdGVzdHMiKQorICAgIGdyb3VwLmFkZG9wdGlvbigKKyAgICAgICAgJy0tY2FjaGUt
Y2xlYXInLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZXN0PSJjYWNoZWNsZWFyIiwKKyAgICAgICAg
aGVscD0icmVtb3ZlIGFsbCBjYWNoZSBjb250ZW50cyBhdCBzdGFydCBvZiB0ZXN0IHJ1bi4iKQor
CisKK2RlZiBweXRlc3RfY21kbGluZV9tYWluKGNvbmZpZyk6CisgICAgaWYgY29uZmlnLm9wdGlv
bi5jYWNoZXNob3c6CisgICAgICAgIGZyb20gX3B5dGVzdC5tYWluIGltcG9ydCB3cmFwX3Nlc3Np
b24KKyAgICAgICAgcmV0dXJuIHdyYXBfc2Vzc2lvbihjb25maWcsIGNhY2hlc2hvdykKKworCisK
K0BweXRlc3QuaG9va2ltcGwodHJ5Zmlyc3Q9VHJ1ZSkKK2RlZiBweXRlc3RfY29uZmlndXJlKGNv
bmZpZyk6CisgICAgY29uZmlnLmNhY2hlID0gQ2FjaGUoY29uZmlnKQorICAgIGNvbmZpZy5wbHVn
aW5tYW5hZ2VyLnJlZ2lzdGVyKExGUGx1Z2luKGNvbmZpZyksICJsZnBsdWdpbiIpCisKKworQHB5
dGVzdC5maXh0dXJlCitkZWYgY2FjaGUocmVxdWVzdCk6CisgICAgIiIiCisgICAgUmV0dXJuIGEg
Y2FjaGUgb2JqZWN0IHRoYXQgY2FuIHBlcnNpc3Qgc3RhdGUgYmV0d2VlbiB0ZXN0aW5nIHNlc3Np
b25zLgorCisgICAgY2FjaGUuZ2V0KGtleSwgZGVmYXVsdCkKKyAgICBjYWNoZS5zZXQoa2V5LCB2
YWx1ZSkKKworICAgIEtleXMgbXVzdCBiZSBhIGBgL2BgIHNlcGFyYXRlZCB2YWx1ZSwgd2hlcmUg
dGhlIGZpcnN0IHBhcnQgaXMgdXN1YWxseSB0aGUKKyAgICBuYW1lIG9mIHlvdXIgcGx1Z2luIG9y
IGFwcGxpY2F0aW9uIHRvIGF2b2lkIGNsYXNoZXMgd2l0aCBvdGhlciBjYWNoZSB1c2Vycy4KKwor
ICAgIFZhbHVlcyBjYW4gYmUgYW55IG9iamVjdCBoYW5kbGVkIGJ5IHRoZSBqc29uIHN0ZGxpYiBt
b2R1bGUuCisgICAgIiIiCisgICAgcmV0dXJuIHJlcXVlc3QuY29uZmlnLmNhY2hlCisKKworZGVm
IHB5dGVzdF9yZXBvcnRfaGVhZGVyKGNvbmZpZyk6CisgICAgaWYgY29uZmlnLm9wdGlvbi52ZXJi
b3NlOgorICAgICAgICByZWxwYXRoID0gcHkucGF0aC5sb2NhbCgpLmJlc3RyZWxwYXRoKGNvbmZp
Zy5jYWNoZS5fY2FjaGVkaXIpCisgICAgICAgIHJldHVybiAiY2FjaGVkaXI6ICVzIiAlIHJlbHBh
dGgKKworCitkZWYgY2FjaGVzaG93KGNvbmZpZywgc2Vzc2lvbik6CisgICAgZnJvbSBwcHJpbnQg
aW1wb3J0IHBwcmludAorICAgIHR3ID0gcHkuaW8uVGVybWluYWxXcml0ZXIoKQorICAgIHR3Lmxp
bmUoImNhY2hlZGlyOiAiICsgc3RyKGNvbmZpZy5jYWNoZS5fY2FjaGVkaXIpKQorICAgIGlmIG5v
dCBjb25maWcuY2FjaGUuX2NhY2hlZGlyLmNoZWNrKCk6CisgICAgICAgIHR3LmxpbmUoImNhY2hl
IGlzIGVtcHR5IikKKyAgICAgICAgcmV0dXJuIDAKKyAgICBkdW1teSA9IG9iamVjdCgpCisgICAg
YmFzZWRpciA9IGNvbmZpZy5jYWNoZS5fY2FjaGVkaXIKKyAgICB2ZGlyID0gYmFzZWRpci5qb2lu
KCJ2IikKKyAgICB0dy5zZXAoIi0iLCAiY2FjaGUgdmFsdWVzIikKKyAgICBmb3IgdmFscGF0aCBp
biB2ZGlyLnZpc2l0KGxhbWJkYSB4OiB4LmlzZmlsZSgpKToKKyAgICAgICAga2V5ID0gdmFscGF0
aC5yZWx0byh2ZGlyKS5yZXBsYWNlKHZhbHBhdGguc2VwLCAiLyIpCisgICAgICAgIHZhbCA9IGNv
bmZpZy5jYWNoZS5nZXQoa2V5LCBkdW1teSkKKyAgICAgICAgaWYgdmFsIGlzIGR1bW15OgorICAg
ICAgICAgICAgdHcubGluZSgiJXMgY29udGFpbnMgdW5yZWFkYWJsZSBjb250ZW50LCAiCisgICAg
ICAgICAgICAgICAgICAid2lsbCBiZSBpZ25vcmVkIiAlIGtleSkKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIHR3LmxpbmUoIiVzIGNvbnRhaW5zOiIgJSBrZXkpCisgICAgICAgICAgICBzdHJl
YW0gPSBweS5pby5UZXh0SU8oKQorICAgICAgICAgICAgcHByaW50KHZhbCwgc3RyZWFtPXN0cmVh
bSkKKyAgICAgICAgICAgIGZvciBsaW5lIGluIHN0cmVhbS5nZXR2YWx1ZSgpLnNwbGl0bGluZXMo
KToKKyAgICAgICAgICAgICAgICB0dy5saW5lKCIgICIgKyBsaW5lKQorCisgICAgZGRpciA9IGJh
c2VkaXIuam9pbigiZCIpCisgICAgaWYgZGRpci5pc2RpcigpIGFuZCBkZGlyLmxpc3RkaXIoKToK
KyAgICAgICAgdHcuc2VwKCItIiwgImNhY2hlIGRpcmVjdG9yaWVzIikKKyAgICAgICAgZm9yIHAg
aW4gYmFzZWRpci5qb2luKCJkIikudmlzaXQoKToKKyAgICAgICAgICAgICNpZiBwLmNoZWNrKGRp
cj0xKToKKyAgICAgICAgICAgICMgICAgcHJpbnQoIiVzLyIgJSBwLnJlbHRvKGJhc2VkaXIpKQor
ICAgICAgICAgICAgaWYgcC5pc2ZpbGUoKToKKyAgICAgICAgICAgICAgICBrZXkgPSBwLnJlbHRv
KGJhc2VkaXIpCisgICAgICAgICAgICAgICAgdHcubGluZSgiJXMgaXMgYSBmaWxlIG9mIGxlbmd0
aCAlZCIgJSAoCisgICAgICAgICAgICAgICAgICAgICAgICBrZXksIHAuc2l6ZSgpKSkKKyAgICBy
ZXR1cm4gMApkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5
dGVzdC9fcHl0ZXN0L2NhcHR1cmUucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9v
bHMvcHl0ZXN0L19weXRlc3QvY2FwdHVyZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMC4uMzg5NWE3MTRhYTAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0
cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvY2FwdHVyZS5weQpAQCAtMCwwICsx
LDQ3MiBAQAorIiIiCitwZXItdGVzdCBzdGRvdXQvc3RkZXJyIGNhcHR1cmluZyBtZWNoYW5pc20u
CisKKyIiIgorZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudAorCitpbXBvcnQg
c3lzCitpbXBvcnQgb3MKK2Zyb20gdGVtcGZpbGUgaW1wb3J0IFRlbXBvcmFyeUZpbGUKKworaW1w
b3J0IHB5CitpbXBvcnQgcHl0ZXN0CisKK2Zyb20gcHkuaW8gaW1wb3J0IFRleHRJTwordW5pY29k
ZSA9IHB5LmJ1aWx0aW4udGV4dAorCitwYXRjaHN5c2RpY3QgPSB7MDogJ3N0ZGluJywgMTogJ3N0
ZG91dCcsIDI6ICdzdGRlcnInfQorCisKK2RlZiBweXRlc3RfYWRkb3B0aW9uKHBhcnNlcik6Cisg
ICAgZ3JvdXAgPSBwYXJzZXIuZ2V0Z3JvdXAoImdlbmVyYWwiKQorICAgIGdyb3VwLl9hZGRvcHRp
b24oCisgICAgICAgICctLWNhcHR1cmUnLCBhY3Rpb249InN0b3JlIiwKKyAgICAgICAgZGVmYXVs
dD0iZmQiIGlmIGhhc2F0dHIob3MsICJkdXAiKSBlbHNlICJzeXMiLAorICAgICAgICBtZXRhdmFy
PSJtZXRob2QiLCBjaG9pY2VzPVsnZmQnLCAnc3lzJywgJ25vJ10sCisgICAgICAgIGhlbHA9InBl
ci10ZXN0IGNhcHR1cmluZyBtZXRob2Q6IG9uZSBvZiBmZHxzeXN8bm8uIikKKyAgICBncm91cC5f
YWRkb3B0aW9uKAorICAgICAgICAnLXMnLCBhY3Rpb249InN0b3JlX2NvbnN0IiwgY29uc3Q9Im5v
IiwgZGVzdD0iY2FwdHVyZSIsCisgICAgICAgIGhlbHA9InNob3J0Y3V0IGZvciAtLWNhcHR1cmU9
bm8uIikKKworCitAcHl0ZXN0Lmhvb2tpbXBsKGhvb2t3cmFwcGVyPVRydWUpCitkZWYgcHl0ZXN0
X2xvYWRfaW5pdGlhbF9jb25mdGVzdHMoZWFybHlfY29uZmlnLCBwYXJzZXIsIGFyZ3MpOgorICAg
IF9yZWFkbGluZV93b3JrYXJvdW5kKCkKKyAgICBucyA9IGVhcmx5X2NvbmZpZy5rbm93bl9hcmdz
X25hbWVzcGFjZQorICAgIHBsdWdpbm1hbmFnZXIgPSBlYXJseV9jb25maWcucGx1Z2lubWFuYWdl
cgorICAgIGNhcG1hbiA9IENhcHR1cmVNYW5hZ2VyKG5zLmNhcHR1cmUpCisgICAgcGx1Z2lubWFu
YWdlci5yZWdpc3RlcihjYXBtYW4sICJjYXB0dXJlbWFuYWdlciIpCisKKyAgICAjIG1ha2Ugc3Vy
ZSB0aGF0IGNhcHR1cmVtYW5hZ2VyIGlzIHByb3Blcmx5IHJlc2V0IGF0IGZpbmFsIHNodXRkb3du
CisgICAgZWFybHlfY29uZmlnLmFkZF9jbGVhbnVwKGNhcG1hbi5yZXNldF9jYXB0dXJpbmdzKQor
CisgICAgIyBtYWtlIHN1cmUgbG9nZ2luZyBkb2VzIG5vdCByYWlzZSBleGNlcHRpb25zIGF0IHRo
ZSBlbmQKKyAgICBkZWYgc2lsZW5jZV9sb2dnaW5nX2F0X3NodXRkb3duKCk6CisgICAgICAgIGlm
ICJsb2dnaW5nIiBpbiBzeXMubW9kdWxlczoKKyAgICAgICAgICAgIHN5cy5tb2R1bGVzWyJsb2dn
aW5nIl0ucmFpc2VFeGNlcHRpb25zID0gRmFsc2UKKyAgICBlYXJseV9jb25maWcuYWRkX2NsZWFu
dXAoc2lsZW5jZV9sb2dnaW5nX2F0X3NodXRkb3duKQorCisgICAgIyBmaW5hbGx5IHRyaWdnZXIg
Y29uZnRlc3QgbG9hZGluZyBidXQgd2hpbGUgY2FwdHVyaW5nIChpc3N1ZTkzKQorICAgIGNhcG1h
bi5pbml0X2NhcHR1cmluZ3MoKQorICAgIG91dGNvbWUgPSB5aWVsZAorICAgIG91dCwgZXJyID0g
Y2FwbWFuLnN1c3BlbmRjYXB0dXJlKCkKKyAgICBpZiBvdXRjb21lLmV4Y2luZm8gaXMgbm90IE5v
bmU6CisgICAgICAgIHN5cy5zdGRvdXQud3JpdGUob3V0KQorICAgICAgICBzeXMuc3RkZXJyLndy
aXRlKGVycikKKworCitjbGFzcyBDYXB0dXJlTWFuYWdlcjoKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgbWV0aG9kKToKKyAgICAgICAgc2VsZi5fbWV0aG9kID0gbWV0aG9kCisKKyAgICBkZWYgX2dl
dGNhcHR1cmUoc2VsZiwgbWV0aG9kKToKKyAgICAgICAgaWYgbWV0aG9kID09ICJmZCI6CisgICAg
ICAgICAgICByZXR1cm4gTXVsdGlDYXB0dXJlKG91dD1UcnVlLCBlcnI9VHJ1ZSwgQ2FwdHVyZT1G
RENhcHR1cmUpCisgICAgICAgIGVsaWYgbWV0aG9kID09ICJzeXMiOgorICAgICAgICAgICAgcmV0
dXJuIE11bHRpQ2FwdHVyZShvdXQ9VHJ1ZSwgZXJyPVRydWUsIENhcHR1cmU9U3lzQ2FwdHVyZSkK
KyAgICAgICAgZWxpZiBtZXRob2QgPT0gIm5vIjoKKyAgICAgICAgICAgIHJldHVybiBNdWx0aUNh
cHR1cmUob3V0PUZhbHNlLCBlcnI9RmFsc2UsIGluXz1GYWxzZSkKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVua25vd24gY2FwdHVyaW5nIG1ldGhvZDogJXIi
ICUgbWV0aG9kKQorCisgICAgZGVmIGluaXRfY2FwdHVyaW5ncyhzZWxmKToKKyAgICAgICAgYXNz
ZXJ0IG5vdCBoYXNhdHRyKHNlbGYsICJfY2FwdHVyaW5nIikKKyAgICAgICAgc2VsZi5fY2FwdHVy
aW5nID0gc2VsZi5fZ2V0Y2FwdHVyZShzZWxmLl9tZXRob2QpCisgICAgICAgIHNlbGYuX2NhcHR1
cmluZy5zdGFydF9jYXB0dXJpbmcoKQorCisgICAgZGVmIHJlc2V0X2NhcHR1cmluZ3Moc2VsZik6
CisgICAgICAgIGNhcCA9IHNlbGYuX19kaWN0X18ucG9wKCJfY2FwdHVyaW5nIiwgTm9uZSkKKyAg
ICAgICAgaWYgY2FwIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgY2FwLnBvcF9vdXRlcnJfdG9f
b3JpZygpCisgICAgICAgICAgICBjYXAuc3RvcF9jYXB0dXJpbmcoKQorCisgICAgZGVmIHJlc3Vt
ZWNhcHR1cmUoc2VsZik6CisgICAgICAgIHNlbGYuX2NhcHR1cmluZy5yZXN1bWVfY2FwdHVyaW5n
KCkKKworICAgIGRlZiBzdXNwZW5kY2FwdHVyZShzZWxmLCBpbl89RmFsc2UpOgorICAgICAgICBz
ZWxmLmRlYWN0aXZhdGVfZnVuY2FyZ3MoKQorICAgICAgICBjYXAgPSBnZXRhdHRyKHNlbGYsICJf
Y2FwdHVyaW5nIiwgTm9uZSkKKyAgICAgICAgaWYgY2FwIGlzIG5vdCBOb25lOgorICAgICAgICAg
ICAgdHJ5OgorICAgICAgICAgICAgICAgIG91dGVyciA9IGNhcC5yZWFkb3V0ZXJyKCkKKyAgICAg
ICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgY2FwLnN1c3BlbmRfY2FwdHVyaW5nKGlu
Xz1pbl8pCisgICAgICAgICAgICByZXR1cm4gb3V0ZXJyCisKKyAgICBkZWYgYWN0aXZhdGVfZnVu
Y2FyZ3Moc2VsZiwgcHlmdW5jaXRlbSk6CisgICAgICAgIGNhcGZ1bmNhcmcgPSBweWZ1bmNpdGVt
Ll9fZGljdF9fLnBvcCgiX2NhcGZ1bmNhcmciLCBOb25lKQorICAgICAgICBpZiBjYXBmdW5jYXJn
IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgY2FwZnVuY2FyZy5fc3RhcnQoKQorICAgICAgICAg
ICAgc2VsZi5fY2FwZnVuY2FyZyA9IGNhcGZ1bmNhcmcKKworICAgIGRlZiBkZWFjdGl2YXRlX2Z1
bmNhcmdzKHNlbGYpOgorICAgICAgICBjYXBmdW5jYXJnID0gc2VsZi5fX2RpY3RfXy5wb3AoIl9j
YXBmdW5jYXJnIiwgTm9uZSkKKyAgICAgICAgaWYgY2FwZnVuY2FyZyBpcyBub3QgTm9uZToKKyAg
ICAgICAgICAgIGNhcGZ1bmNhcmcuY2xvc2UoKQorCisgICAgQHB5dGVzdC5ob29raW1wbChob29r
d3JhcHBlcj1UcnVlKQorICAgIGRlZiBweXRlc3RfbWFrZV9jb2xsZWN0X3JlcG9ydChzZWxmLCBj
b2xsZWN0b3IpOgorICAgICAgICBpZiBpc2luc3RhbmNlKGNvbGxlY3RvciwgcHl0ZXN0LkZpbGUp
OgorICAgICAgICAgICAgc2VsZi5yZXN1bWVjYXB0dXJlKCkKKyAgICAgICAgICAgIG91dGNvbWUg
PSB5aWVsZAorICAgICAgICAgICAgb3V0LCBlcnIgPSBzZWxmLnN1c3BlbmRjYXB0dXJlKCkKKyAg
ICAgICAgICAgIHJlcCA9IG91dGNvbWUuZ2V0X3Jlc3VsdCgpCisgICAgICAgICAgICBpZiBvdXQ6
CisgICAgICAgICAgICAgICAgcmVwLnNlY3Rpb25zLmFwcGVuZCgoIkNhcHR1cmVkIHN0ZG91dCIs
IG91dCkpCisgICAgICAgICAgICBpZiBlcnI6CisgICAgICAgICAgICAgICAgcmVwLnNlY3Rpb25z
LmFwcGVuZCgoIkNhcHR1cmVkIHN0ZGVyciIsIGVycikpCisgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICB5aWVsZAorCisgICAgQHB5dGVzdC5ob29raW1wbChob29rd3JhcHBlcj1UcnVlKQorICAg
IGRlZiBweXRlc3RfcnVudGVzdF9zZXR1cChzZWxmLCBpdGVtKToKKyAgICAgICAgc2VsZi5yZXN1
bWVjYXB0dXJlKCkKKyAgICAgICAgeWllbGQKKyAgICAgICAgc2VsZi5zdXNwZW5kY2FwdHVyZV9p
dGVtKGl0ZW0sICJzZXR1cCIpCisKKyAgICBAcHl0ZXN0Lmhvb2tpbXBsKGhvb2t3cmFwcGVyPVRy
dWUpCisgICAgZGVmIHB5dGVzdF9ydW50ZXN0X2NhbGwoc2VsZiwgaXRlbSk6CisgICAgICAgIHNl
bGYucmVzdW1lY2FwdHVyZSgpCisgICAgICAgIHNlbGYuYWN0aXZhdGVfZnVuY2FyZ3MoaXRlbSkK
KyAgICAgICAgeWllbGQKKyAgICAgICAgI3NlbGYuZGVhY3RpdmF0ZV9mdW5jYXJncygpIGNhbGxl
ZCBmcm9tIHN1c3BlbmRjYXB0dXJlKCkKKyAgICAgICAgc2VsZi5zdXNwZW5kY2FwdHVyZV9pdGVt
KGl0ZW0sICJjYWxsIikKKworICAgIEBweXRlc3QuaG9va2ltcGwoaG9va3dyYXBwZXI9VHJ1ZSkK
KyAgICBkZWYgcHl0ZXN0X3J1bnRlc3RfdGVhcmRvd24oc2VsZiwgaXRlbSk6CisgICAgICAgIHNl
bGYucmVzdW1lY2FwdHVyZSgpCisgICAgICAgIHlpZWxkCisgICAgICAgIHNlbGYuc3VzcGVuZGNh
cHR1cmVfaXRlbShpdGVtLCAidGVhcmRvd24iKQorCisgICAgQHB5dGVzdC5ob29raW1wbCh0cnlm
aXJzdD1UcnVlKQorICAgIGRlZiBweXRlc3Rfa2V5Ym9hcmRfaW50ZXJydXB0KHNlbGYsIGV4Y2lu
Zm8pOgorICAgICAgICBzZWxmLnJlc2V0X2NhcHR1cmluZ3MoKQorCisgICAgQHB5dGVzdC5ob29r
aW1wbCh0cnlmaXJzdD1UcnVlKQorICAgIGRlZiBweXRlc3RfaW50ZXJuYWxlcnJvcihzZWxmLCBl
eGNpbmZvKToKKyAgICAgICAgc2VsZi5yZXNldF9jYXB0dXJpbmdzKCkKKworICAgIGRlZiBzdXNw
ZW5kY2FwdHVyZV9pdGVtKHNlbGYsIGl0ZW0sIHdoZW4pOgorICAgICAgICBvdXQsIGVyciA9IHNl
bGYuc3VzcGVuZGNhcHR1cmUoKQorICAgICAgICBpdGVtLmFkZF9yZXBvcnRfc2VjdGlvbih3aGVu
LCAic3Rkb3V0Iiwgb3V0KQorICAgICAgICBpdGVtLmFkZF9yZXBvcnRfc2VjdGlvbih3aGVuLCAi
c3RkZXJyIiwgZXJyKQorCitlcnJvcl9jYXBzeXNmZGVycm9yID0gImNhbm5vdCB1c2UgY2Fwc3lz
IGFuZCBjYXBmZCBhdCB0aGUgc2FtZSB0aW1lIgorCisKK0BweXRlc3QuZml4dHVyZQorZGVmIGNh
cHN5cyhyZXF1ZXN0KToKKyAgICAiIiJlbmFibGVzIGNhcHR1cmluZyBvZiB3cml0ZXMgdG8gc3lz
LnN0ZG91dC9zeXMuc3RkZXJyIGFuZCBtYWtlcworICAgIGNhcHR1cmVkIG91dHB1dCBhdmFpbGFi
bGUgdmlhIGBgY2Fwc3lzLnJlYWRvdXRlcnIoKWBgIG1ldGhvZCBjYWxscworICAgIHdoaWNoIHJl
dHVybiBhIGBgKG91dCwgZXJyKWBgIHR1cGxlLgorICAgICIiIgorICAgIGlmICJjYXBmZCIgaW4g
cmVxdWVzdC5fZnVuY2FyZ3M6CisgICAgICAgIHJhaXNlIHJlcXVlc3QucmFpc2VlcnJvcihlcnJv
cl9jYXBzeXNmZGVycm9yKQorICAgIHJlcXVlc3Qubm9kZS5fY2FwZnVuY2FyZyA9IGMgPSBDYXB0
dXJlRml4dHVyZShTeXNDYXB0dXJlKQorICAgIHJldHVybiBjCisKK0BweXRlc3QuZml4dHVyZQor
ZGVmIGNhcGZkKHJlcXVlc3QpOgorICAgICIiImVuYWJsZXMgY2FwdHVyaW5nIG9mIHdyaXRlcyB0
byBmaWxlIGRlc2NyaXB0b3JzIDEgYW5kIDIgYW5kIG1ha2VzCisgICAgY2FwdHVyZWQgb3V0cHV0
IGF2YWlsYWJsZSB2aWEgYGBjYXBmZC5yZWFkb3V0ZXJyKClgYCBtZXRob2QgY2FsbHMKKyAgICB3
aGljaCByZXR1cm4gYSBgYChvdXQsIGVycilgYCB0dXBsZS4KKyAgICAiIiIKKyAgICBpZiAiY2Fw
c3lzIiBpbiByZXF1ZXN0Ll9mdW5jYXJnczoKKyAgICAgICAgcmVxdWVzdC5yYWlzZWVycm9yKGVy
cm9yX2NhcHN5c2ZkZXJyb3IpCisgICAgaWYgbm90IGhhc2F0dHIob3MsICdkdXAnKToKKyAgICAg
ICAgcHl0ZXN0LnNraXAoImNhcGZkIGZ1bmNhcmcgbmVlZHMgb3MuZHVwIikKKyAgICByZXF1ZXN0
Lm5vZGUuX2NhcGZ1bmNhcmcgPSBjID0gQ2FwdHVyZUZpeHR1cmUoRkRDYXB0dXJlKQorICAgIHJl
dHVybiBjCisKKworY2xhc3MgQ2FwdHVyZUZpeHR1cmU6CisgICAgZGVmIF9faW5pdF9fKHNlbGYs
IGNhcHR1cmVjbGFzcyk6CisgICAgICAgIHNlbGYuY2FwdHVyZWNsYXNzID0gY2FwdHVyZWNsYXNz
CisKKyAgICBkZWYgX3N0YXJ0KHNlbGYpOgorICAgICAgICBzZWxmLl9jYXB0dXJlID0gTXVsdGlD
YXB0dXJlKG91dD1UcnVlLCBlcnI9VHJ1ZSwgaW5fPUZhbHNlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ2FwdHVyZT1zZWxmLmNhcHR1cmVjbGFzcykKKyAgICAgICAg
c2VsZi5fY2FwdHVyZS5zdGFydF9jYXB0dXJpbmcoKQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgor
ICAgICAgICBjYXAgPSBzZWxmLl9fZGljdF9fLnBvcCgiX2NhcHR1cmUiLCBOb25lKQorICAgICAg
ICBpZiBjYXAgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9vdXRlcnIgPSBjYXAucG9w
X291dGVycl90b19vcmlnKCkKKyAgICAgICAgICAgIGNhcC5zdG9wX2NhcHR1cmluZygpCisKKyAg
ICBkZWYgcmVhZG91dGVycihzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJu
IHNlbGYuX2NhcHR1cmUucmVhZG91dGVycigpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJv
cjoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9vdXRlcnIKKworCitkZWYgc2FmZV90ZXh0X2R1
cGZpbGUoZiwgbW9kZSwgZGVmYXVsdF9lbmNvZGluZz0iVVRGOCIpOgorICAgICIiIiByZXR1cm4g
YSBvcGVuIHRleHQgZmlsZSBvYmplY3QgdGhhdCdzIGEgZHVwbGljYXRlIG9mIGYgb24gdGhlCisg
ICAgICAgIEZELWxldmVsIGlmIHBvc3NpYmxlLgorICAgICIiIgorICAgIGVuY29kaW5nID0gZ2V0
YXR0cihmLCAiZW5jb2RpbmciLCBOb25lKQorICAgIHRyeToKKyAgICAgICAgZmQgPSBmLmZpbGVu
bygpCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgaWYgImIiIG5vdCBpbiBnZXRhdHRy
KGYsICJtb2RlIiwgIiIpIGFuZCBoYXNhdHRyKGYsICJlbmNvZGluZyIpOgorICAgICAgICAgICAg
IyB3ZSBzZWVtIHRvIGhhdmUgYSB0ZXh0IHN0cmVhbSwgbGV0J3MganVzdCB1c2UgaXQKKyAgICAg
ICAgICAgIHJldHVybiBmCisgICAgZWxzZToKKyAgICAgICAgbmV3ZmQgPSBvcy5kdXAoZmQpCisg
ICAgICAgIGlmICJiIiBub3QgaW4gbW9kZToKKyAgICAgICAgICAgIG1vZGUgKz0gImIiCisgICAg
ICAgIGYgPSBvcy5mZG9wZW4obmV3ZmQsIG1vZGUsIDApICAjIG5vIGJ1ZmZlcmluZworICAgIHJl
dHVybiBFbmNvZGVkRmlsZShmLCBlbmNvZGluZyBvciBkZWZhdWx0X2VuY29kaW5nKQorCisKK2Ns
YXNzIEVuY29kZWRGaWxlKG9iamVjdCk6CisgICAgZXJyb3JzID0gInN0cmljdCIgICMgcG9zc2li
bHkgbmVlZGVkIGJ5IHB5MyBjb2RlIChpc3N1ZTU1NSkKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
YnVmZmVyLCBlbmNvZGluZyk6CisgICAgICAgIHNlbGYuYnVmZmVyID0gYnVmZmVyCisgICAgICAg
IHNlbGYuZW5jb2RpbmcgPSBlbmNvZGluZworCisgICAgZGVmIHdyaXRlKHNlbGYsIG9iaik6Cisg
ICAgICAgIGlmIGlzaW5zdGFuY2Uob2JqLCB1bmljb2RlKToKKyAgICAgICAgICAgIG9iaiA9IG9i
ai5lbmNvZGUoc2VsZi5lbmNvZGluZywgInJlcGxhY2UiKQorICAgICAgICBzZWxmLmJ1ZmZlci53
cml0ZShvYmopCisKKyAgICBkZWYgd3JpdGVsaW5lcyhzZWxmLCBsaW5lbGlzdCk6CisgICAgICAg
IGRhdGEgPSAnJy5qb2luKGxpbmVsaXN0KQorICAgICAgICBzZWxmLndyaXRlKGRhdGEpCisKKyAg
ICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFtZSk6CisgICAgICAgIHJldHVybiBnZXRhdHRyKG9i
amVjdC5fX2dldGF0dHJpYnV0ZV9fKHNlbGYsICJidWZmZXIiKSwgbmFtZSkKKworCitjbGFzcyBN
dWx0aUNhcHR1cmUob2JqZWN0KToKKyAgICBvdXQgPSBlcnIgPSBpbl8gPSBOb25lCisKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgb3V0PVRydWUsIGVycj1UcnVlLCBpbl89VHJ1ZSwgQ2FwdHVyZT1O
b25lKToKKyAgICAgICAgaWYgaW5fOgorICAgICAgICAgICAgc2VsZi5pbl8gPSBDYXB0dXJlKDAp
CisgICAgICAgIGlmIG91dDoKKyAgICAgICAgICAgIHNlbGYub3V0ID0gQ2FwdHVyZSgxKQorICAg
ICAgICBpZiBlcnI6CisgICAgICAgICAgICBzZWxmLmVyciA9IENhcHR1cmUoMikKKworICAgIGRl
ZiBzdGFydF9jYXB0dXJpbmcoc2VsZik6CisgICAgICAgIGlmIHNlbGYuaW5fOgorICAgICAgICAg
ICAgc2VsZi5pbl8uc3RhcnQoKQorICAgICAgICBpZiBzZWxmLm91dDoKKyAgICAgICAgICAgIHNl
bGYub3V0LnN0YXJ0KCkKKyAgICAgICAgaWYgc2VsZi5lcnI6CisgICAgICAgICAgICBzZWxmLmVy
ci5zdGFydCgpCisKKyAgICBkZWYgcG9wX291dGVycl90b19vcmlnKHNlbGYpOgorICAgICAgICAi
IiIgcG9wIGN1cnJlbnQgc25hcHNob3Qgb3V0L2VyciBjYXB0dXJlIGFuZCBmbHVzaCB0byBvcmln
IHN0cmVhbXMuICIiIgorICAgICAgICBvdXQsIGVyciA9IHNlbGYucmVhZG91dGVycigpCisgICAg
ICAgIGlmIG91dDoKKyAgICAgICAgICAgIHNlbGYub3V0LndyaXRlb3JnKG91dCkKKyAgICAgICAg
aWYgZXJyOgorICAgICAgICAgICAgc2VsZi5lcnIud3JpdGVvcmcoZXJyKQorICAgICAgICByZXR1
cm4gb3V0LCBlcnIKKworICAgIGRlZiBzdXNwZW5kX2NhcHR1cmluZyhzZWxmLCBpbl89RmFsc2Up
OgorICAgICAgICBpZiBzZWxmLm91dDoKKyAgICAgICAgICAgIHNlbGYub3V0LnN1c3BlbmQoKQor
ICAgICAgICBpZiBzZWxmLmVycjoKKyAgICAgICAgICAgIHNlbGYuZXJyLnN1c3BlbmQoKQorICAg
ICAgICBpZiBpbl8gYW5kIHNlbGYuaW5fOgorICAgICAgICAgICAgc2VsZi5pbl8uc3VzcGVuZCgp
CisgICAgICAgICAgICBzZWxmLl9pbl9zdXNwZW5kZWQgPSBUcnVlCisKKyAgICBkZWYgcmVzdW1l
X2NhcHR1cmluZyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5vdXQ6CisgICAgICAgICAgICBzZWxm
Lm91dC5yZXN1bWUoKQorICAgICAgICBpZiBzZWxmLmVycjoKKyAgICAgICAgICAgIHNlbGYuZXJy
LnJlc3VtZSgpCisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgIl9pbl9zdXNwZW5kZWQiKToKKyAg
ICAgICAgICAgIHNlbGYuaW5fLnJlc3VtZSgpCisgICAgICAgICAgICBkZWwgc2VsZi5faW5fc3Vz
cGVuZGVkCisKKyAgICBkZWYgc3RvcF9jYXB0dXJpbmcoc2VsZik6CisgICAgICAgICIiIiBzdG9w
IGNhcHR1cmluZyBhbmQgcmVzZXQgY2FwdHVyaW5nIHN0cmVhbXMgIiIiCisgICAgICAgIGlmIGhh
c2F0dHIoc2VsZiwgJ19yZXNldCcpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigid2Fz
IGFscmVhZHkgc3RvcHBlZCIpCisgICAgICAgIHNlbGYuX3Jlc2V0ID0gVHJ1ZQorICAgICAgICBp
ZiBzZWxmLm91dDoKKyAgICAgICAgICAgIHNlbGYub3V0LmRvbmUoKQorICAgICAgICBpZiBzZWxm
LmVycjoKKyAgICAgICAgICAgIHNlbGYuZXJyLmRvbmUoKQorICAgICAgICBpZiBzZWxmLmluXzoK
KyAgICAgICAgICAgIHNlbGYuaW5fLmRvbmUoKQorCisgICAgZGVmIHJlYWRvdXRlcnIoc2VsZik6
CisgICAgICAgICIiIiByZXR1cm4gc25hcHNob3QgdW5pY29kZSB2YWx1ZSBvZiBzdGRvdXQvc3Rk
ZXJyIGNhcHR1cmluZ3MuICIiIgorICAgICAgICByZXR1cm4gKHNlbGYub3V0LnNuYXAoKSBpZiBz
ZWxmLm91dCBpcyBub3QgTm9uZSBlbHNlICIiLAorICAgICAgICAgICAgICAgIHNlbGYuZXJyLnNu
YXAoKSBpZiBzZWxmLmVyciBpcyBub3QgTm9uZSBlbHNlICIiKQorCitjbGFzcyBOb0NhcHR1cmU6
CisgICAgX19pbml0X18gPSBzdGFydCA9IGRvbmUgPSBzdXNwZW5kID0gcmVzdW1lID0gbGFtYmRh
ICphcmdzOiBOb25lCisKK2NsYXNzIEZEQ2FwdHVyZToKKyAgICAiIiIgQ2FwdHVyZSBJTyB0by9m
cm9tIGEgZ2l2ZW4gb3MtbGV2ZWwgZmlsZWRlc2NyaXB0b3IuICIiIgorCisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIHRhcmdldGZkLCB0bXBmaWxlPU5vbmUpOgorICAgICAgICBzZWxmLnRhcmdldGZk
ID0gdGFyZ2V0ZmQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi50YXJnZXRmZF9zYXZl
ID0gb3MuZHVwKHNlbGYudGFyZ2V0ZmQpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAg
ICAgICAgc2VsZi5zdGFydCA9IGxhbWJkYTogTm9uZQorICAgICAgICAgICAgc2VsZi5kb25lID0g
bGFtYmRhOiBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiB0YXJnZXRmZCA9PSAw
OgorICAgICAgICAgICAgICAgIGFzc2VydCBub3QgdG1wZmlsZSwgImNhbm5vdCBzZXQgdG1wZmls
ZSB3aXRoIHN0ZGluIgorICAgICAgICAgICAgICAgIHRtcGZpbGUgPSBvcGVuKG9zLmRldm51bGws
ICJyIikKKyAgICAgICAgICAgICAgICBzZWxmLnN5c2NhcHR1cmUgPSBTeXNDYXB0dXJlKHRhcmdl
dGZkKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiB0bXBmaWxlIGlzIE5v
bmU6CisgICAgICAgICAgICAgICAgICAgIGYgPSBUZW1wb3JhcnlGaWxlKCkKKyAgICAgICAgICAg
ICAgICAgICAgd2l0aCBmOgorICAgICAgICAgICAgICAgICAgICAgICAgdG1wZmlsZSA9IHNhZmVf
dGV4dF9kdXBmaWxlKGYsIG1vZGU9IndiKyIpCisgICAgICAgICAgICAgICAgaWYgdGFyZ2V0ZmQg
aW4gcGF0Y2hzeXNkaWN0OgorICAgICAgICAgICAgICAgICAgICBzZWxmLnN5c2NhcHR1cmUgPSBT
eXNDYXB0dXJlKHRhcmdldGZkLCB0bXBmaWxlKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICAgICAgICAgIHNlbGYuc3lzY2FwdHVyZSA9IE5vQ2FwdHVyZSgpCisgICAgICAgICAg
ICBzZWxmLnRtcGZpbGUgPSB0bXBmaWxlCisgICAgICAgICAgICBzZWxmLnRtcGZpbGVfZmQgPSB0
bXBmaWxlLmZpbGVubygpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVy
biAiPEZEQ2FwdHVyZSAlcyBvbGRmZD0lcz4iICUgKHNlbGYudGFyZ2V0ZmQsIHNlbGYudGFyZ2V0
ZmRfc2F2ZSkKKworICAgIGRlZiBzdGFydChzZWxmKToKKyAgICAgICAgIiIiIFN0YXJ0IGNhcHR1
cmluZyBvbiB0YXJnZXRmZCB1c2luZyBtZW1vcml6ZWQgdG1wZmlsZS4gIiIiCisgICAgICAgIHRy
eToKKyAgICAgICAgICAgIG9zLmZzdGF0KHNlbGYudGFyZ2V0ZmRfc2F2ZSkKKyAgICAgICAgZXhj
ZXB0IChBdHRyaWJ1dGVFcnJvciwgT1NFcnJvcik6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVy
cm9yKCJzYXZlZCBmaWxlZGVzY3JpcHRvciBub3QgdmFsaWQgYW55bW9yZSIpCisgICAgICAgIG9z
LmR1cDIoc2VsZi50bXBmaWxlX2ZkLCBzZWxmLnRhcmdldGZkKQorICAgICAgICBzZWxmLnN5c2Nh
cHR1cmUuc3RhcnQoKQorCisgICAgZGVmIHNuYXAoc2VsZik6CisgICAgICAgIGYgPSBzZWxmLnRt
cGZpbGUKKyAgICAgICAgZi5zZWVrKDApCisgICAgICAgIHJlcyA9IGYucmVhZCgpCisgICAgICAg
IGlmIHJlczoKKyAgICAgICAgICAgIGVuYyA9IGdldGF0dHIoZiwgImVuY29kaW5nIiwgTm9uZSkK
KyAgICAgICAgICAgIGlmIGVuYyBhbmQgaXNpbnN0YW5jZShyZXMsIGJ5dGVzKToKKyAgICAgICAg
ICAgICAgICByZXMgPSBweS5idWlsdGluLl90b3RleHQocmVzLCBlbmMsICJyZXBsYWNlIikKKyAg
ICAgICAgICAgIGYudHJ1bmNhdGUoMCkKKyAgICAgICAgICAgIGYuc2VlaygwKQorICAgICAgICAg
ICAgcmV0dXJuIHJlcworICAgICAgICByZXR1cm4gJycKKworICAgIGRlZiBkb25lKHNlbGYpOgor
ICAgICAgICAiIiIgc3RvcCBjYXB0dXJpbmcsIHJlc3RvcmUgc3RyZWFtcywgcmV0dXJuIG9yaWdp
bmFsIGNhcHR1cmUgZmlsZSwKKyAgICAgICAgc2Vla2VkIHRvIHBvc2l0aW9uIHplcm8uICIiIgor
ICAgICAgICB0YXJnZXRmZF9zYXZlID0gc2VsZi5fX2RpY3RfXy5wb3AoInRhcmdldGZkX3NhdmUi
KQorICAgICAgICBvcy5kdXAyKHRhcmdldGZkX3NhdmUsIHNlbGYudGFyZ2V0ZmQpCisgICAgICAg
IG9zLmNsb3NlKHRhcmdldGZkX3NhdmUpCisgICAgICAgIHNlbGYuc3lzY2FwdHVyZS5kb25lKCkK
KyAgICAgICAgc2VsZi50bXBmaWxlLmNsb3NlKCkKKworICAgIGRlZiBzdXNwZW5kKHNlbGYpOgor
ICAgICAgICBzZWxmLnN5c2NhcHR1cmUuc3VzcGVuZCgpCisgICAgICAgIG9zLmR1cDIoc2VsZi50
YXJnZXRmZF9zYXZlLCBzZWxmLnRhcmdldGZkKQorCisgICAgZGVmIHJlc3VtZShzZWxmKToKKyAg
ICAgICAgc2VsZi5zeXNjYXB0dXJlLnJlc3VtZSgpCisgICAgICAgIG9zLmR1cDIoc2VsZi50bXBm
aWxlX2ZkLCBzZWxmLnRhcmdldGZkKQorCisgICAgZGVmIHdyaXRlb3JnKHNlbGYsIGRhdGEpOgor
ICAgICAgICAiIiIgd3JpdGUgdG8gb3JpZ2luYWwgZmlsZSBkZXNjcmlwdG9yLiAiIiIKKyAgICAg
ICAgaWYgcHkuYnVpbHRpbi5faXN0ZXh0KGRhdGEpOgorICAgICAgICAgICAgZGF0YSA9IGRhdGEu
ZW5jb2RlKCJ1dGY4IikgIyBYWFggdXNlIGVuY29kaW5nIG9mIG9yaWdpbmFsIHN0cmVhbQorICAg
ICAgICBvcy53cml0ZShzZWxmLnRhcmdldGZkX3NhdmUsIGRhdGEpCisKKworY2xhc3MgU3lzQ2Fw
dHVyZToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmQsIHRtcGZpbGU9Tm9uZSk6CisgICAgICAg
IG5hbWUgPSBwYXRjaHN5c2RpY3RbZmRdCisgICAgICAgIHNlbGYuX29sZCA9IGdldGF0dHIoc3lz
LCBuYW1lKQorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgIGlmIHRtcGZpbGUgaXMg
Tm9uZToKKyAgICAgICAgICAgIGlmIG5hbWUgPT0gInN0ZGluIjoKKyAgICAgICAgICAgICAgICB0
bXBmaWxlID0gRG9udFJlYWRGcm9tSW5wdXQoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgICAgICB0bXBmaWxlID0gVGV4dElPKCkKKyAgICAgICAgc2VsZi50bXBmaWxlID0gdG1wZmls
ZQorCisgICAgZGVmIHN0YXJ0KHNlbGYpOgorICAgICAgICBzZXRhdHRyKHN5cywgc2VsZi5uYW1l
LCBzZWxmLnRtcGZpbGUpCisKKyAgICBkZWYgc25hcChzZWxmKToKKyAgICAgICAgZiA9IHNlbGYu
dG1wZmlsZQorICAgICAgICByZXMgPSBmLmdldHZhbHVlKCkKKyAgICAgICAgZi50cnVuY2F0ZSgw
KQorICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgcmV0dXJuIHJlcworCisgICAgZGVmIGRvbmUo
c2VsZik6CisgICAgICAgIHNldGF0dHIoc3lzLCBzZWxmLm5hbWUsIHNlbGYuX29sZCkKKyAgICAg
ICAgZGVsIHNlbGYuX29sZAorICAgICAgICBzZWxmLnRtcGZpbGUuY2xvc2UoKQorCisgICAgZGVm
IHN1c3BlbmQoc2VsZik6CisgICAgICAgIHNldGF0dHIoc3lzLCBzZWxmLm5hbWUsIHNlbGYuX29s
ZCkKKworICAgIGRlZiByZXN1bWUoc2VsZik6CisgICAgICAgIHNldGF0dHIoc3lzLCBzZWxmLm5h
bWUsIHNlbGYudG1wZmlsZSkKKworICAgIGRlZiB3cml0ZW9yZyhzZWxmLCBkYXRhKToKKyAgICAg
ICAgc2VsZi5fb2xkLndyaXRlKGRhdGEpCisgICAgICAgIHNlbGYuX29sZC5mbHVzaCgpCisKKwor
Y2xhc3MgRG9udFJlYWRGcm9tSW5wdXQ6CisgICAgIiIiVGVtcG9yYXJ5IHN0dWIgY2xhc3MuICBJ
ZGVhbGx5IHdoZW4gc3RkaW4gaXMgYWNjZXNzZWQsIHRoZQorICAgIGNhcHR1cmluZyBzaG91bGQg
YmUgdHVybmVkIG9mZiwgd2l0aCBwb3NzaWJseSBhbGwgZGF0YSBjYXB0dXJlZAorICAgIHNvIGZh
ciBzZW50IHRvIHRoZSBzY3JlZW4uICBUaGlzIHNob3VsZCBiZSBjb25maWd1cmFibGUsIHRob3Vn
aCwKKyAgICBiZWNhdXNlIGluIGF1dG9tYXRlZCB0ZXN0IHJ1bnMgaXQgaXMgYmV0dGVyIHRvIGNy
YXNoIHRoYW4KKyAgICBoYW5nIGluZGVmaW5pdGVseS4KKyAgICAiIiIKKworICAgIGVuY29kaW5n
ID0gTm9uZQorCisgICAgZGVmIHJlYWQoc2VsZiwgKmFyZ3MpOgorICAgICAgICByYWlzZSBJT0Vy
cm9yKCJyZWFkaW5nIGZyb20gc3RkaW4gd2hpbGUgb3V0cHV0IGlzIGNhcHR1cmVkIikKKyAgICBy
ZWFkbGluZSA9IHJlYWQKKyAgICByZWFkbGluZXMgPSByZWFkCisgICAgX19pdGVyX18gPSByZWFk
CisKKyAgICBkZWYgZmlsZW5vKHNlbGYpOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJyZWRp
cmVjdGVkIFN0ZGluIGlzIHBzZXVkb2ZpbGUsIGhhcyBubyBmaWxlbm8oKSIpCisKKyAgICBkZWYg
aXNhdHR5KHNlbGYpOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBjbG9zZShzZWxm
KToKKyAgICAgICAgcGFzcworCisKK2RlZiBfcmVhZGxpbmVfd29ya2Fyb3VuZCgpOgorICAgICIi
IgorICAgIEVuc3VyZSByZWFkbGluZSBpcyBpbXBvcnRlZCBzbyB0aGF0IGl0IGF0dGFjaGVzIHRv
IHRoZSBjb3JyZWN0IHN0ZGlvCisgICAgaGFuZGxlcyBvbiBXaW5kb3dzLgorCisgICAgUGRiIHVz
ZXMgcmVhZGxpbmUgc3VwcG9ydCB3aGVyZSBhdmFpbGFibGUtLXdoZW4gbm90IHJ1bm5pbmcgZnJv
bSB0aGUgUHl0aG9uCisgICAgcHJvbXB0LCB0aGUgcmVhZGxpbmUgbW9kdWxlIGlzIG5vdCBpbXBv
cnRlZCB1bnRpbCBydW5uaW5nIHRoZSBwZGIgUkVQTC4gIElmCisgICAgcnVubmluZyBweS50ZXN0
IHdpdGggdGhlIC0tcGRiIG9wdGlvbiB0aGlzIG1lYW5zIHRoZSByZWFkbGluZSBtb2R1bGUgaXMg
bm90CisgICAgaW1wb3J0ZWQgdW50aWwgYWZ0ZXIgSS9PIGNhcHR1cmUgaGFzIGJlZW4gc3RhcnRl
ZC4KKworICAgIFRoaXMgaXMgYSBwcm9ibGVtIGZvciBweXJlYWRsaW5lLCB3aGljaCBpcyBvZnRl
biB1c2VkIHRvIGltcGxlbWVudCByZWFkbGluZQorICAgIHN1cHBvcnQgb24gV2luZG93cywgYXMg
aXQgZG9lcyBub3QgYXR0YWNoIHRvIHRoZSBjb3JyZWN0IGhhbmRsZXMgZm9yIHN0ZG91dAorICAg
IGFuZC9vciBzdGRpbiBpZiB0aGV5IGhhdmUgYmVlbiByZWRpcmVjdGVkIGJ5IHRoZSBGRENhcHR1
cmUgbWVjaGFuaXNtLiAgVGhpcworICAgIHdvcmthcm91bmQgZW5zdXJlcyB0aGF0IHJlYWRsaW5l
IGlzIGltcG9ydGVkIGJlZm9yZSBJL08gY2FwdHVyZSBpcyBzZXR1cCBzbworICAgIHRoYXQgaXQg
Y2FuIGF0dGFjaCB0byB0aGUgYWN0dWFsIHN0ZGluL291dCBmb3IgdGhlIGNvbnNvbGUuCisKKyAg
ICBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3B5dGVzdC1kZXYvcHl0ZXN0L3B1bGwvMTI4MQorICAg
ICIiIgorCisgICAgaWYgbm90IHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4zMicpOgorICAg
ICAgICByZXR1cm4KKyAgICB0cnk6CisgICAgICAgIGltcG9ydCByZWFkbGluZSAgIyBub3FhCisg
ICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICBwYXNzCmRpZmYgLS1naXQgYS9XZWJEcml2
ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvY29uZmlnLnB5IGIvV2Vi
RHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L2NvbmZpZy5weQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZmI3YjE3NzRmNjgKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19w
eXRlc3QvY29uZmlnLnB5CkBAIC0wLDAgKzEsMTE5MiBAQAorIiIiIGNvbW1hbmQgbGluZSBvcHRp
b25zLCBpbmktZmlsZSBhbmQgY29uZnRlc3QucHkgcHJvY2Vzc2luZy4gIiIiCitpbXBvcnQgYXJn
cGFyc2UKK2ltcG9ydCBzaGxleAoraW1wb3J0IHRyYWNlYmFjaworaW1wb3J0IHR5cGVzCitpbXBv
cnQgd2FybmluZ3MKKworaW1wb3J0IHB5CisjIERPTid0IGltcG9ydCBweXRlc3QgaGVyZSBiZWNh
dXNlIGl0IGNhdXNlcyBpbXBvcnQgY3ljbGUgdHJvdWJsZXMKK2ltcG9ydCBzeXMsIG9zCitpbXBv
cnQgX3B5dGVzdC5fY29kZQoraW1wb3J0IF9weXRlc3QuaG9va3NwZWMgICMgdGhlIGV4dGVuc2lv
biBwb2ludCBkZWZpbml0aW9ucworZnJvbSBfcHl0ZXN0Ll9wbHVnZ3kgaW1wb3J0IFBsdWdpbk1h
bmFnZXIsIEhvb2tpbXBsTWFya2VyLCBIb29rc3BlY01hcmtlcgorCitob29raW1wbCA9IEhvb2tp
bXBsTWFya2VyKCJweXRlc3QiKQoraG9va3NwZWMgPSBIb29rc3BlY01hcmtlcigicHl0ZXN0IikK
KworIyBweXRlc3Qgc3RhcnR1cAorIworCisKK2NsYXNzIENvbmZ0ZXN0SW1wb3J0RmFpbHVyZShF
eGNlcHRpb24pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoLCBleGNpbmZvKToKKyAgICAg
ICAgRXhjZXB0aW9uLl9faW5pdF9fKHNlbGYsIHBhdGgsIGV4Y2luZm8pCisgICAgICAgIHNlbGYu
cGF0aCA9IHBhdGgKKyAgICAgICAgc2VsZi5leGNpbmZvID0gZXhjaW5mbworCisKK2RlZiBtYWlu
KGFyZ3M9Tm9uZSwgcGx1Z2lucz1Ob25lKToKKyAgICAiIiIgcmV0dXJuIGV4aXQgY29kZSwgYWZ0
ZXIgcGVyZm9ybWluZyBhbiBpbi1wcm9jZXNzIHRlc3QgcnVuLgorCisgICAgOmFyZyBhcmdzOiBs
aXN0IG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCisKKyAgICA6YXJnIHBsdWdpbnM6IGxpc3Qg
b2YgcGx1Z2luIG9iamVjdHMgdG8gYmUgYXV0by1yZWdpc3RlcmVkIGR1cmluZworICAgICAgICAg
ICAgICAgICAgaW5pdGlhbGl6YXRpb24uCisgICAgIiIiCisgICAgdHJ5OgorICAgICAgICB0cnk6
CisgICAgICAgICAgICBjb25maWcgPSBfcHJlcGFyZWNvbmZpZyhhcmdzLCBwbHVnaW5zKQorICAg
ICAgICBleGNlcHQgQ29uZnRlc3RJbXBvcnRGYWlsdXJlIGFzIGU6CisgICAgICAgICAgICB0dyA9
IHB5LmlvLlRlcm1pbmFsV3JpdGVyKHN5cy5zdGRlcnIpCisgICAgICAgICAgICBmb3IgbGluZSBp
biB0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbigqZS5leGNpbmZvKToKKyAgICAgICAgICAgICAg
ICB0dy5saW5lKGxpbmUucnN0cmlwKCksIHJlZD1UcnVlKQorICAgICAgICAgICAgdHcubGluZSgi
RVJST1I6IGNvdWxkIG5vdCBsb2FkICVzXG4iICUgKGUucGF0aCksIHJlZD1UcnVlKQorICAgICAg
ICAgICAgcmV0dXJuIDQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAg
ICAgICAgICBjb25maWcucGx1Z2lubWFuYWdlci5jaGVja19wZW5kaW5nKCkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gY29uZmlnLmhvb2sucHl0ZXN0X2NtZGxpbmVfbWFpbihjb25maWc9Y29uZmln
KQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBjb25maWcuX2Vuc3VyZV91
bmNvbmZpZ3VyZSgpCisgICAgZXhjZXB0IFVzYWdlRXJyb3IgYXMgZToKKyAgICAgICAgZm9yIG1z
ZyBpbiBlLmFyZ3M6CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJFUlJPUjogJXNcbiIg
JShtc2csKSkKKyAgICAgICAgcmV0dXJuIDQKKworY2xhc3MgY21kbGluZTogICMgY29tcGF0aWJp
bGl0eSBuYW1lc3BhY2UKKyAgICBtYWluID0gc3RhdGljbWV0aG9kKG1haW4pCisKK2NsYXNzIFVz
YWdlRXJyb3IoRXhjZXB0aW9uKToKKyAgICAiIiIgZXJyb3IgaW4gcHl0ZXN0IHVzYWdlIG9yIGlu
dm9jYXRpb24iIiIKKworX3ByZWluaXQgPSBbXQorCitkZWZhdWx0X3BsdWdpbnMgPSAoCisgICAg
ICJtYXJrIG1haW4gdGVybWluYWwgcnVubmVyIHB5dGhvbiBwZGIgdW5pdHRlc3QgY2FwdHVyZSBz
a2lwcGluZyAiCisgICAgICJ0bXBkaXIgbW9ua2V5cGF0Y2ggcmVjd2FybiBwYXN0ZWJpbiBoZWxw
Y29uZmlnIG5vc2UgYXNzZXJ0aW9uIGdlbnNjcmlwdCAiCisgICAgICJqdW5pdHhtbCByZXN1bHRs
b2cgZG9jdGVzdCBjYWNoZXByb3ZpZGVyIikuc3BsaXQoKQorCitidWlsdGluX3BsdWdpbnMgPSBz
ZXQoZGVmYXVsdF9wbHVnaW5zKQorYnVpbHRpbl9wbHVnaW5zLmFkZCgicHl0ZXN0ZXIiKQorCisK
K2RlZiBfcHJlbG9hZHBsdWdpbnMoKToKKyAgICBhc3NlcnQgbm90IF9wcmVpbml0CisgICAgX3By
ZWluaXQuYXBwZW5kKGdldF9jb25maWcoKSkKKworZGVmIGdldF9jb25maWcoKToKKyAgICBpZiBf
cHJlaW5pdDoKKyAgICAgICAgcmV0dXJuIF9wcmVpbml0LnBvcCgwKQorICAgICMgc3Vic2VxdWVu
dCBjYWxscyB0byBtYWluIHdpbGwgY3JlYXRlIGEgZnJlc2ggaW5zdGFuY2UKKyAgICBwbHVnaW5t
YW5hZ2VyID0gUHl0ZXN0UGx1Z2luTWFuYWdlcigpCisgICAgY29uZmlnID0gQ29uZmlnKHBsdWdp
bm1hbmFnZXIpCisgICAgZm9yIHNwZWMgaW4gZGVmYXVsdF9wbHVnaW5zOgorICAgICAgICBwbHVn
aW5tYW5hZ2VyLmltcG9ydF9wbHVnaW4oc3BlYykKKyAgICByZXR1cm4gY29uZmlnCisKK2RlZiBn
ZXRfcGx1Z2luX21hbmFnZXIoKToKKyAgICAiIiIKKyAgICBPYnRhaW4gYSBuZXcgaW5zdGFuY2Ug
b2YgdGhlCisgICAgOnB5OmNsYXNzOmBfcHl0ZXN0LmNvbmZpZy5QeXRlc3RQbHVnaW5NYW5hZ2Vy
YCwgd2l0aCBkZWZhdWx0IHBsdWdpbnMKKyAgICBhbHJlYWR5IGxvYWRlZC4KKworICAgIFRoaXMg
ZnVuY3Rpb24gY2FuIGJlIHVzZWQgYnkgaW50ZWdyYXRpb24gd2l0aCBvdGhlciB0b29scywgbGlr
ZSBob29raW5nCisgICAgaW50byBweXRlc3QgdG8gcnVuIHRlc3RzIGludG8gYW4gSURFLgorICAg
ICIiIgorICAgIHJldHVybiBnZXRfY29uZmlnKCkucGx1Z2lubWFuYWdlcgorCitkZWYgX3ByZXBh
cmVjb25maWcoYXJncz1Ob25lLCBwbHVnaW5zPU5vbmUpOgorICAgIGlmIGFyZ3MgaXMgTm9uZToK
KyAgICAgICAgYXJncyA9IHN5cy5hcmd2WzE6XQorICAgIGVsaWYgaXNpbnN0YW5jZShhcmdzLCBw
eS5wYXRoLmxvY2FsKToKKyAgICAgICAgYXJncyA9IFtzdHIoYXJncyldCisgICAgZWxpZiBub3Qg
aXNpbnN0YW5jZShhcmdzLCAodHVwbGUsIGxpc3QpKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFu
Y2UoYXJncywgc3RyKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIm5vdCBhIHN0cmlu
ZyBvciBhcmd1bWVudCBsaXN0OiAlciIgJSAoYXJncywpKQorICAgICAgICBhcmdzID0gc2hsZXgu
c3BsaXQoYXJncykKKyAgICBjb25maWcgPSBnZXRfY29uZmlnKCkKKyAgICBwbHVnaW5tYW5hZ2Vy
ID0gY29uZmlnLnBsdWdpbm1hbmFnZXIKKyAgICB0cnk6CisgICAgICAgIGlmIHBsdWdpbnM6Cisg
ICAgICAgICAgICBmb3IgcGx1Z2luIGluIHBsdWdpbnM6CisgICAgICAgICAgICAgICAgaWYgaXNp
bnN0YW5jZShwbHVnaW4sIHB5LmJ1aWx0aW4uX2Jhc2VzdHJpbmcpOgorICAgICAgICAgICAgICAg
ICAgICBwbHVnaW5tYW5hZ2VyLmNvbnNpZGVyX3BsdWdpbmFyZyhwbHVnaW4pCisgICAgICAgICAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcGx1Z2lubWFuYWdlci5yZWdpc3Rlcihw
bHVnaW4pCisgICAgICAgIHJldHVybiBwbHVnaW5tYW5hZ2VyLmhvb2sucHl0ZXN0X2NtZGxpbmVf
cGFyc2UoCisgICAgICAgICAgICAgICAgcGx1Z2lubWFuYWdlcj1wbHVnaW5tYW5hZ2VyLCBhcmdz
PWFyZ3MpCisgICAgZXhjZXB0IEJhc2VFeGNlcHRpb246CisgICAgICAgIGNvbmZpZy5fZW5zdXJl
X3VuY29uZmlndXJlKCkKKyAgICAgICAgcmFpc2UKKworCitjbGFzcyBQeXRlc3RQbHVnaW5NYW5h
Z2VyKFBsdWdpbk1hbmFnZXIpOgorICAgICIiIgorICAgIE92ZXJ3cml0ZXMgOnB5OmNsYXNzOmBw
bHVnZ3kuUGx1Z2luTWFuYWdlcmAgdG8gYWRkIHB5dGVzdC1zcGVjaWZpYworICAgIGZ1bmN0aW9u
YWxpdHk6CisKKyAgICAqIGxvYWRpbmcgcGx1Z2lucyBmcm9tIHRoZSBjb21tYW5kIGxpbmUsIGBg
UFlURVNUX1BMVUdJTmBgIGVudiB2YXJpYWJsZSBhbmQKKyAgICAgIGBgcHl0ZXN0X3BsdWdpbnNg
YCBnbG9iYWwgdmFyaWFibGVzIGZvdW5kIGluIHBsdWdpbnMgYmVpbmcgbG9hZGVkOworICAgICog
YGBjb25mdGVzdC5weWBgIGxvYWRpbmcgZHVyaW5nIHN0YXJ0LXVwOworICAgICIiIgorICAgIGRl
ZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc3VwZXIoUHl0ZXN0UGx1Z2luTWFuYWdlciwgc2Vs
ZikuX19pbml0X18oInB5dGVzdCIsIGltcGxwcmVmaXg9InB5dGVzdF8iKQorICAgICAgICBzZWxm
Ll9jb25mdGVzdF9wbHVnaW5zID0gc2V0KCkKKworICAgICAgICAjIHN0YXRlIHJlbGF0ZWQgdG8g
bG9jYWwgY29uZnRlc3QgcGx1Z2lucworICAgICAgICBzZWxmLl9wYXRoMmNvbmZtb2RzID0ge30K
KyAgICAgICAgc2VsZi5fY29uZnRlc3RwYXRoMm1vZCA9IHt9CisgICAgICAgIHNlbGYuX2NvbmZj
dXRkaXIgPSBOb25lCisgICAgICAgIHNlbGYuX25vY29uZnRlc3QgPSBGYWxzZQorCisgICAgICAg
IHNlbGYuYWRkX2hvb2tzcGVjcyhfcHl0ZXN0Lmhvb2tzcGVjKQorICAgICAgICBzZWxmLnJlZ2lz
dGVyKHNlbGYpCisgICAgICAgIGlmIG9zLmVudmlyb24uZ2V0KCdQWVRFU1RfREVCVUcnKToKKyAg
ICAgICAgICAgIGVyciA9IHN5cy5zdGRlcnIKKyAgICAgICAgICAgIGVuY29kaW5nID0gZ2V0YXR0
cihlcnIsICdlbmNvZGluZycsICd1dGY4JykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAg
ICAgICBlcnIgPSBweS5pby5kdXBmaWxlKGVyciwgZW5jb2Rpbmc9ZW5jb2RpbmcpCisgICAgICAg
ICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAg
IHNlbGYudHJhY2Uucm9vdC5zZXR3cml0ZXIoZXJyLndyaXRlKQorICAgICAgICAgICAgc2VsZi5l
bmFibGVfdHJhY2luZygpCisKKyAgICBkZWYgYWRkaG9va3Moc2VsZiwgbW9kdWxlX29yX2NsYXNz
KToKKyAgICAgICAgIiIiCisgICAgICAgIC4uIGRlcHJlY2F0ZWQ6OiAyLjgKKworICAgICAgICBV
c2UgOnB5Om1ldGg6YHBsdWdneS5QbHVnaW5NYW5hZ2VyLmFkZF9ob29rc3BlY3NgIGluc3RlYWQu
CisgICAgICAgICIiIgorICAgICAgICB3YXJuaW5nID0gZGljdChjb2RlPSJJMiIsCisgICAgICAg
ICAgICAgICAgICAgICAgIGZzbG9jYXRpb249X3B5dGVzdC5fY29kZS5nZXRmc2xpbmVubyhzeXMu
X2dldGZyYW1lKDEpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgbm9kZWlkPU5vbmUsCisgICAg
ICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9InVzZSBwbHVnaW5tYW5hZ2VyLmFkZF9ob29rc3Bl
Y3MgaW5zdGVhZCBvZiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlcHJlY2F0
ZWQgYWRkaG9va3MoKSBtZXRob2QuIikKKyAgICAgICAgc2VsZi5fd2Fybih3YXJuaW5nKQorICAg
ICAgICByZXR1cm4gc2VsZi5hZGRfaG9va3NwZWNzKG1vZHVsZV9vcl9jbGFzcykKKworICAgIGRl
ZiBwYXJzZV9ob29raW1wbF9vcHRzKHNlbGYsIHBsdWdpbiwgbmFtZSk6CisgICAgICAgICMgcHl0
ZXN0IGhvb2tzIGFyZSBhbHdheXMgcHJlZml4ZWQgd2l0aCBweXRlc3RfCisgICAgICAgICMgc28g
d2UgYXZvaWQgYWNjZXNzaW5nIHBvc3NpYmx5IG5vbi1yZWFkYWJsZSBhdHRyaWJ1dGVzCisgICAg
ICAgICMgKHNlZSBpc3N1ZSAjMTA3MykKKyAgICAgICAgaWYgbm90IG5hbWUuc3RhcnRzd2l0aCgi
cHl0ZXN0XyIpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICMgaWdub3JlIHNvbWUgaGlz
dG9yaWMgc3BlY2lhbCBuYW1lcyB3aGljaCBjYW4gbm90IGJlIGhvb2tzIGFueXdheQorICAgICAg
ICBpZiBuYW1lID09ICJweXRlc3RfcGx1Z2lucyIgb3IgbmFtZS5zdGFydHN3aXRoKCJweXRlc3Rf
ZnVuY2FyZ19fIik6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBtZXRob2QgPSBnZXRh
dHRyKHBsdWdpbiwgbmFtZSkKKyAgICAgICAgb3B0cyA9IHN1cGVyKFB5dGVzdFBsdWdpbk1hbmFn
ZXIsIHNlbGYpLnBhcnNlX2hvb2tpbXBsX29wdHMocGx1Z2luLCBuYW1lKQorICAgICAgICBpZiBv
cHRzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZm9yIG5hbWUgaW4gKCJ0cnlmaXJzdCIsICJ0
cnlsYXN0IiwgIm9wdGlvbmFsaG9vayIsICJob29rd3JhcHBlciIpOgorICAgICAgICAgICAgICAg
IG9wdHMuc2V0ZGVmYXVsdChuYW1lLCBoYXNhdHRyKG1ldGhvZCwgbmFtZSkpCisgICAgICAgIHJl
dHVybiBvcHRzCisKKyAgICBkZWYgcGFyc2VfaG9va3NwZWNfb3B0cyhzZWxmLCBtb2R1bGVfb3Jf
Y2xhc3MsIG5hbWUpOgorICAgICAgICBvcHRzID0gc3VwZXIoUHl0ZXN0UGx1Z2luTWFuYWdlciwg
c2VsZikucGFyc2VfaG9va3NwZWNfb3B0cygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1vZHVsZV9vcl9jbGFzcywgbmFtZSkKKyAgICAgICAgaWYgb3B0
cyBpcyBOb25lOgorICAgICAgICAgICAgbWV0aG9kID0gZ2V0YXR0cihtb2R1bGVfb3JfY2xhc3Ms
IG5hbWUpCisgICAgICAgICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoInB5dGVzdF8iKToKKyAgICAg
ICAgICAgICAgICBvcHRzID0geyJmaXJzdHJlc3VsdCI6IGhhc2F0dHIobWV0aG9kLCAiZmlyc3Ry
ZXN1bHQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJoaXN0b3JpYyI6IGhhc2F0dHIobWV0
aG9kLCAiaGlzdG9yaWMiKX0KKyAgICAgICAgcmV0dXJuIG9wdHMKKworICAgIGRlZiBfdmVyaWZ5
X2hvb2soc2VsZiwgaG9vaywgaG9va21ldGhvZCk6CisgICAgICAgIHN1cGVyKFB5dGVzdFBsdWdp
bk1hbmFnZXIsIHNlbGYpLl92ZXJpZnlfaG9vayhob29rLCBob29rbWV0aG9kKQorICAgICAgICBp
ZiAiX19tdWx0aWNhbGxfXyIgaW4gaG9va21ldGhvZC5hcmduYW1lczoKKyAgICAgICAgICAgIGZz
bGluZW5vID0gX3B5dGVzdC5fY29kZS5nZXRmc2xpbmVubyhob29rbWV0aG9kLmZ1bmN0aW9uKQor
ICAgICAgICAgICAgd2FybmluZyA9IGRpY3QoY29kZT0iSTEiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZnNsb2NhdGlvbj1mc2xpbmVubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5vZGVpZD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT0iJXIgaG9v
ayB1c2VzIGRlcHJlY2F0ZWQgX19tdWx0aWNhbGxfXyAiCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJhcmd1bWVudCIgJSAoaG9vay5uYW1lKSkKKyAgICAgICAgICAgIHNlbGYu
X3dhcm4od2FybmluZykKKworICAgIGRlZiByZWdpc3RlcihzZWxmLCBwbHVnaW4sIG5hbWU9Tm9u
ZSk6CisgICAgICAgIHJldCA9IHN1cGVyKFB5dGVzdFBsdWdpbk1hbmFnZXIsIHNlbGYpLnJlZ2lz
dGVyKHBsdWdpbiwgbmFtZSkKKyAgICAgICAgaWYgcmV0OgorICAgICAgICAgICAgc2VsZi5ob29r
LnB5dGVzdF9wbHVnaW5fcmVnaXN0ZXJlZC5jYWxsX2hpc3RvcmljKAorICAgICAgICAgICAgICAg
ICAgICAgIGt3YXJncz1kaWN0KHBsdWdpbj1wbHVnaW4sIG1hbmFnZXI9c2VsZikpCisgICAgICAg
IHJldHVybiByZXQKKworICAgIGRlZiBnZXRwbHVnaW4oc2VsZiwgbmFtZSk6CisgICAgICAgICMg
c3VwcG9ydCBkZXByZWNhdGVkIG5hbWluZyBiZWNhdXNlIHBsdWdpbnMgKHhkaXN0IGUuZy4pIHVz
ZSBpdAorICAgICAgICByZXR1cm4gc2VsZi5nZXRfcGx1Z2luKG5hbWUpCisKKyAgICBkZWYgaGFz
cGx1Z2luKHNlbGYsIG5hbWUpOgorICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGUgcGx1Z2lu
IHdpdGggdGhlIGdpdmVuIG5hbWUgaXMgcmVnaXN0ZXJlZC4iIiIKKyAgICAgICAgcmV0dXJuIGJv
b2woc2VsZi5nZXRfcGx1Z2luKG5hbWUpKQorCisgICAgZGVmIHB5dGVzdF9jb25maWd1cmUoc2Vs
ZiwgY29uZmlnKToKKyAgICAgICAgIyBYWFggbm93IHRoYXQgdGhlIHBsdWdpbm1hbmFnZXIgZXhw
b3NlcyBob29raW1wbCh0cnlmaXJzdC4uLikKKyAgICAgICAgIyB3ZSBzaG91bGQgcmVtb3ZlIHRy
eWZpcnN0L3RyeWxhc3QgYXMgbWFya2VycworICAgICAgICBjb25maWcuYWRkaW5pdmFsdWVfbGlu
ZSgibWFya2VycyIsCisgICAgICAgICAgICAidHJ5Zmlyc3Q6IG1hcmsgYSBob29rIGltcGxlbWVu
dGF0aW9uIGZ1bmN0aW9uIHN1Y2ggdGhhdCB0aGUgIgorICAgICAgICAgICAgInBsdWdpbiBtYWNo
aW5lcnkgd2lsbCB0cnkgdG8gY2FsbCBpdCBmaXJzdC9hcyBlYXJseSBhcyBwb3NzaWJsZS4iKQor
ICAgICAgICBjb25maWcuYWRkaW5pdmFsdWVfbGluZSgibWFya2VycyIsCisgICAgICAgICAgICAi
dHJ5bGFzdDogbWFyayBhIGhvb2sgaW1wbGVtZW50YXRpb24gZnVuY3Rpb24gc3VjaCB0aGF0IHRo
ZSAiCisgICAgICAgICAgICAicGx1Z2luIG1hY2hpbmVyeSB3aWxsIHRyeSB0byBjYWxsIGl0IGxh
c3QvYXMgbGF0ZSBhcyBwb3NzaWJsZS4iKQorCisgICAgZGVmIF93YXJuKHNlbGYsIG1lc3NhZ2Up
OgorICAgICAgICBrd2FyZ3MgPSBtZXNzYWdlIGlmIGlzaW5zdGFuY2UobWVzc2FnZSwgZGljdCkg
ZWxzZSB7CisgICAgICAgICAgICAnY29kZSc6ICdJMScsCisgICAgICAgICAgICAnbWVzc2FnZSc6
IG1lc3NhZ2UsCisgICAgICAgICAgICAnZnNsb2NhdGlvbic6IE5vbmUsCisgICAgICAgICAgICAn
bm9kZWlkJzogTm9uZSwKKyAgICAgICAgfQorICAgICAgICBzZWxmLmhvb2sucHl0ZXN0X2xvZ3dh
cm5pbmcuY2FsbF9oaXN0b3JpYyhrd2FyZ3M9a3dhcmdzKQorCisgICAgIworICAgICMgaW50ZXJu
YWwgQVBJIGZvciBsb2NhbCBjb25mdGVzdCBwbHVnaW4gaGFuZGxpbmcKKyAgICAjCisgICAgZGVm
IF9zZXRfaW5pdGlhbF9jb25mdGVzdHMoc2VsZiwgbmFtZXNwYWNlKToKKyAgICAgICAgIiIiIGxv
YWQgaW5pdGlhbCBjb25mdGVzdCBmaWxlcyBnaXZlbiBhIHByZXBhcnNlZCAibmFtZXNwYWNlIi4K
KyAgICAgICAgICAgIEFzIGNvbmZ0ZXN0IGZpbGVzIG1heSBhZGQgdGhlaXIgb3duIGNvbW1hbmQg
bGluZSBvcHRpb25zCisgICAgICAgICAgICB3aGljaCBoYXZlIGFyZ3VtZW50cyAoJy0tbXktb3B0
IHNvbWVwYXRoJykgd2UgbWlnaHQgZ2V0IHNvbWUKKyAgICAgICAgICAgIGZhbHNlIHBvc2l0aXZl
cy4gIEFsbCBidWlsdGluIGFuZCAzcmQgcGFydHkgcGx1Z2lucyB3aWxsIGhhdmUKKyAgICAgICAg
ICAgIGJlZW4gbG9hZGVkLCBob3dldmVyLCBzbyBjb21tb24gb3B0aW9ucyB3aWxsIG5vdCBjb25m
dXNlIG91ciBsb2dpYworICAgICAgICAgICAgaGVyZS4KKyAgICAgICAgIiIiCisgICAgICAgIGN1
cnJlbnQgPSBweS5wYXRoLmxvY2FsKCkKKyAgICAgICAgc2VsZi5fY29uZmN1dGRpciA9IGN1cnJl
bnQuam9pbihuYW1lc3BhY2UuY29uZmN1dGRpciwgYWJzPVRydWUpIFwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgbmFtZXNwYWNlLmNvbmZjdXRkaXIgZWxzZSBOb25lCisgICAg
ICAgIHNlbGYuX25vY29uZnRlc3QgPSBuYW1lc3BhY2Uubm9jb25mdGVzdAorICAgICAgICB0ZXN0
cGF0aHMgPSBuYW1lc3BhY2UuZmlsZV9vcl9kaXIKKyAgICAgICAgZm91bmRhbmNob3IgPSBGYWxz
ZQorICAgICAgICBmb3IgcGF0aCBpbiB0ZXN0cGF0aHM6CisgICAgICAgICAgICBwYXRoID0gc3Ry
KHBhdGgpCisgICAgICAgICAgICAjIHJlbW92ZSBub2RlLWlkIHN5bnRheAorICAgICAgICAgICAg
aSA9IHBhdGguZmluZCgiOjoiKQorICAgICAgICAgICAgaWYgaSAhPSAtMToKKyAgICAgICAgICAg
ICAgICBwYXRoID0gcGF0aFs6aV0KKyAgICAgICAgICAgIGFuY2hvciA9IGN1cnJlbnQuam9pbihw
YXRoLCBhYnM9MSkKKyAgICAgICAgICAgIGlmIGV4aXN0cyhhbmNob3IpOiAjIHdlIGZvdW5kIHNv
bWUgZmlsZSBvYmplY3QKKyAgICAgICAgICAgICAgICBzZWxmLl90cnlfbG9hZF9jb25mdGVzdChh
bmNob3IpCisgICAgICAgICAgICAgICAgZm91bmRhbmNob3IgPSBUcnVlCisgICAgICAgIGlmIG5v
dCBmb3VuZGFuY2hvcjoKKyAgICAgICAgICAgIHNlbGYuX3RyeV9sb2FkX2NvbmZ0ZXN0KGN1cnJl
bnQpCisKKyAgICBkZWYgX3RyeV9sb2FkX2NvbmZ0ZXN0KHNlbGYsIGFuY2hvcik6CisgICAgICAg
IHNlbGYuX2dldGNvbmZ0ZXN0bW9kdWxlcyhhbmNob3IpCisgICAgICAgICMgbGV0J3MgYWxzbyBj
b25zaWRlciB0ZXN0KiBzdWJkaXJzCisgICAgICAgIGlmIGFuY2hvci5jaGVjayhkaXI9MSk6Cisg
ICAgICAgICAgICBmb3IgeCBpbiBhbmNob3IubGlzdGRpcigidGVzdCoiKToKKyAgICAgICAgICAg
ICAgICBpZiB4LmNoZWNrKGRpcj0xKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fZ2V0Y29u
ZnRlc3Rtb2R1bGVzKHgpCisKKyAgICBkZWYgX2dldGNvbmZ0ZXN0bW9kdWxlcyhzZWxmLCBwYXRo
KToKKyAgICAgICAgaWYgc2VsZi5fbm9jb25mdGVzdDoKKyAgICAgICAgICAgIHJldHVybiBbXQor
ICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fcGF0aDJjb25mbW9kc1twYXRo
XQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBpZiBwYXRoLmlzZmlsZSgp
OgorICAgICAgICAgICAgICAgIGNsaXN0ID0gc2VsZi5fZ2V0Y29uZnRlc3Rtb2R1bGVzKHBhdGgu
ZGlycGF0aCgpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIFhYWCB0aGVz
ZSBkYXlzIHdlIG1heSByYXRoZXIgd2FudCB0byB1c2UgY29uZmlnLnJvb3RkaXIKKyAgICAgICAg
ICAgICAgICAjIGFuZCBhbGxvdyB1c2VycyB0byBvcHQgaW50byBsb29raW5nIGludG8gdGhlIHJv
b3RkaXIgcGFyZW50CisgICAgICAgICAgICAgICAgIyBkaXJlY3RvcmllcyBpbnN0ZWFkIG9mIHJl
cXVpcmluZyB0byBzcGVjaWZ5IGNvbmZjdXRkaXIKKyAgICAgICAgICAgICAgICBjbGlzdCA9IFtd
CisgICAgICAgICAgICAgICAgZm9yIHBhcmVudCBpbiBwYXRoLnBhcnRzKCk6CisgICAgICAgICAg
ICAgICAgICAgIGlmIHNlbGYuX2NvbmZjdXRkaXIgYW5kIHNlbGYuX2NvbmZjdXRkaXIucmVsdG8o
cGFyZW50KToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAg
ICAgICAgIGNvbmZ0ZXN0cGF0aCA9IHBhcmVudC5qb2luKCJjb25mdGVzdC5weSIpCisgICAgICAg
ICAgICAgICAgICAgIGlmIGNvbmZ0ZXN0cGF0aC5pc2ZpbGUoKToKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1vZCA9IHNlbGYuX2ltcG9ydGNvbmZ0ZXN0KGNvbmZ0ZXN0cGF0aCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNsaXN0LmFwcGVuZChtb2QpCisKKyAgICAgICAgICAgIHNlbGYuX3Bh
dGgyY29uZm1vZHNbcGF0aF0gPSBjbGlzdAorICAgICAgICAgICAgcmV0dXJuIGNsaXN0CisKKyAg
ICBkZWYgX3JnZXRfd2l0aF9jb25mbW9kKHNlbGYsIG5hbWUsIHBhdGgpOgorICAgICAgICBtb2R1
bGVzID0gc2VsZi5fZ2V0Y29uZnRlc3Rtb2R1bGVzKHBhdGgpCisgICAgICAgIGZvciBtb2QgaW4g
cmV2ZXJzZWQobW9kdWxlcyk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0
dXJuIG1vZCwgZ2V0YXR0cihtb2QsIG5hbWUpCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRl
RXJyb3I6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgcmFpc2UgS2V5RXJyb3Io
bmFtZSkKKworICAgIGRlZiBfaW1wb3J0Y29uZnRlc3Qoc2VsZiwgY29uZnRlc3RwYXRoKToKKyAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2NvbmZ0ZXN0cGF0aDJtb2RbY29u
ZnRlc3RwYXRoXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBwa2dwYXRo
ID0gY29uZnRlc3RwYXRoLnB5cGtncGF0aCgpCisgICAgICAgICAgICBpZiBwa2dwYXRoIGlzIE5v
bmU6CisgICAgICAgICAgICAgICAgX2Vuc3VyZV9yZW1vdmVkX3N5c21vZHVsZShjb25mdGVzdHBh
dGgucHVyZWJhc2VuYW1lKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG1vZCA9
IGNvbmZ0ZXN0cGF0aC5weWltcG9ydCgpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgor
ICAgICAgICAgICAgICAgIHJhaXNlIENvbmZ0ZXN0SW1wb3J0RmFpbHVyZShjb25mdGVzdHBhdGgs
IHN5cy5leGNfaW5mbygpKQorCisgICAgICAgICAgICBzZWxmLl9jb25mdGVzdF9wbHVnaW5zLmFk
ZChtb2QpCisgICAgICAgICAgICBzZWxmLl9jb25mdGVzdHBhdGgybW9kW2NvbmZ0ZXN0cGF0aF0g
PSBtb2QKKyAgICAgICAgICAgIGRpcnBhdGggPSBjb25mdGVzdHBhdGguZGlycGF0aCgpCisgICAg
ICAgICAgICBpZiBkaXJwYXRoIGluIHNlbGYuX3BhdGgyY29uZm1vZHM6CisgICAgICAgICAgICAg
ICAgZm9yIHBhdGgsIG1vZHMgaW4gc2VsZi5fcGF0aDJjb25mbW9kcy5pdGVtcygpOgorICAgICAg
ICAgICAgICAgICAgICBpZiBwYXRoIGFuZCBwYXRoLnJlbHRvKGRpcnBhdGgpIG9yIHBhdGggPT0g
ZGlycGF0aDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCBtb2Qgbm90IGluIG1vZHMK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1vZHMuYXBwZW5kKG1vZCkKKyAgICAgICAgICAgIHNl
bGYudHJhY2UoImxvYWRlZCBjb25mdGVzdG1vZHVsZSAlciIgJShtb2QpKQorICAgICAgICAgICAg
c2VsZi5jb25zaWRlcl9jb25mdGVzdChtb2QpCisgICAgICAgICAgICByZXR1cm4gbW9kCisKKyAg
ICAjCisgICAgIyBBUEkgZm9yIGJvb3RzdHJhcHBpbmcgcGx1Z2luIGxvYWRpbmcKKyAgICAjCisg
ICAgIworCisgICAgZGVmIGNvbnNpZGVyX3ByZXBhcnNlKHNlbGYsIGFyZ3MpOgorICAgICAgICBm
b3Igb3B0MSxvcHQyIGluIHppcChhcmdzLCBhcmdzWzE6XSk6CisgICAgICAgICAgICBpZiBvcHQx
ID09ICItcCI6CisgICAgICAgICAgICAgICAgc2VsZi5jb25zaWRlcl9wbHVnaW5hcmcob3B0MikK
KworICAgIGRlZiBjb25zaWRlcl9wbHVnaW5hcmcoc2VsZiwgYXJnKToKKyAgICAgICAgaWYgYXJn
LnN0YXJ0c3dpdGgoIm5vOiIpOgorICAgICAgICAgICAgbmFtZSA9IGFyZ1szOl0KKyAgICAgICAg
ICAgIHNlbGYuc2V0X2Jsb2NrZWQobmFtZSkKKyAgICAgICAgICAgIGlmIG5vdCBuYW1lLnN0YXJ0
c3dpdGgoInB5dGVzdF8iKToKKyAgICAgICAgICAgICAgICBzZWxmLnNldF9ibG9ja2VkKCJweXRl
c3RfIiArIG5hbWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmltcG9ydF9wbHVn
aW4oYXJnKQorCisgICAgZGVmIGNvbnNpZGVyX2NvbmZ0ZXN0KHNlbGYsIGNvbmZ0ZXN0bW9kdWxl
KToKKyAgICAgICAgaWYgc2VsZi5yZWdpc3Rlcihjb25mdGVzdG1vZHVsZSwgbmFtZT1jb25mdGVz
dG1vZHVsZS5fX2ZpbGVfXyk6CisgICAgICAgICAgICBzZWxmLmNvbnNpZGVyX21vZHVsZShjb25m
dGVzdG1vZHVsZSkKKworICAgIGRlZiBjb25zaWRlcl9lbnYoc2VsZik6CisgICAgICAgIHNlbGYu
X2ltcG9ydF9wbHVnaW5fc3BlY3Mob3MuZW52aXJvbi5nZXQoIlBZVEVTVF9QTFVHSU5TIikpCisK
KyAgICBkZWYgY29uc2lkZXJfbW9kdWxlKHNlbGYsIG1vZCk6CisgICAgICAgIHNlbGYuX2ltcG9y
dF9wbHVnaW5fc3BlY3MoZ2V0YXR0cihtb2QsICJweXRlc3RfcGx1Z2lucyIsIE5vbmUpKQorCisg
ICAgZGVmIF9pbXBvcnRfcGx1Z2luX3NwZWNzKHNlbGYsIHNwZWMpOgorICAgICAgICBpZiBzcGVj
OgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShzcGVjLCBzdHIpOgorICAgICAgICAgICAgICAg
IHNwZWMgPSBzcGVjLnNwbGl0KCIsIikKKyAgICAgICAgICAgIGZvciBpbXBvcnRfc3BlYyBpbiBz
cGVjOgorICAgICAgICAgICAgICAgIHNlbGYuaW1wb3J0X3BsdWdpbihpbXBvcnRfc3BlYykKKwor
ICAgIGRlZiBpbXBvcnRfcGx1Z2luKHNlbGYsIG1vZG5hbWUpOgorICAgICAgICAjIG1vc3Qgb2Z0
ZW4gbW9kbmFtZSByZWZlcnMgdG8gYnVpbHRpbiBtb2R1bGVzLCBlLmcuICJweXRlc3RlciIsCisg
ICAgICAgICMgInRlcm1pbmFsIiBvciAiY2FwdHVyZSIuICBUaG9zZSBwbHVnaW5zIGFyZSByZWdp
c3RlcmVkIHVuZGVyIHRoZWlyCisgICAgICAgICMgYmFzZW5hbWUgZm9yIGhpc3RvcmljIHB1cnBv
c2VzIGJ1dCBtdXN0IGJlIGltcG9ydGVkIHdpdGggdGhlCisgICAgICAgICMgX3B5dGVzdCBwcmVm
aXguCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKG1vZG5hbWUsIHN0cikKKyAgICAgICAgaWYg
c2VsZi5nZXRfcGx1Z2luKG1vZG5hbWUpIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJu
CisgICAgICAgIGlmIG1vZG5hbWUgaW4gYnVpbHRpbl9wbHVnaW5zOgorICAgICAgICAgICAgaW1w
b3J0c3BlYyA9ICJfcHl0ZXN0LiIgKyBtb2RuYW1lCisgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICBpbXBvcnRzcGVjID0gbW9kbmFtZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBfX2ltcG9y
dF9fKGltcG9ydHNwZWMpCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciBhcyBlOgorICAgICAg
ICAgICAgbmV3X2V4YyA9IEltcG9ydEVycm9yKCdFcnJvciBpbXBvcnRpbmcgcGx1Z2luICIlcyI6
ICVzJyAlIChtb2RuYW1lLCBlKSkKKyAgICAgICAgICAgICMgY29weSBvdmVyIG5hbWUgYW5kIHBh
dGggYXR0cmlidXRlcworICAgICAgICAgICAgZm9yIGF0dHIgaW4gKCduYW1lJywgJ3BhdGgnKToK
KyAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKGUsIGF0dHIpOgorICAgICAgICAgICAgICAgICAg
ICBzZXRhdHRyKG5ld19leGMsIGF0dHIsIGdldGF0dHIoZSwgYXR0cikpCisgICAgICAgICAgICBy
YWlzZSBuZXdfZXhjCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAg
IGltcG9ydCBweXRlc3QKKyAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKHB5dGVzdCwgJ3NraXAn
KSBvciBub3QgaXNpbnN0YW5jZShlLCBweXRlc3Quc2tpcC5FeGNlcHRpb24pOgorICAgICAgICAg
ICAgICAgIHJhaXNlCisgICAgICAgICAgICBzZWxmLl93YXJuKCJza2lwcGVkIHBsdWdpbiAlcjog
JXMiICUoKG1vZG5hbWUsIGUubXNnKSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtb2Qg
PSBzeXMubW9kdWxlc1tpbXBvcnRzcGVjXQorICAgICAgICAgICAgc2VsZi5yZWdpc3Rlcihtb2Qs
IG1vZG5hbWUpCisgICAgICAgICAgICBzZWxmLmNvbnNpZGVyX21vZHVsZShtb2QpCisKKworY2xh
c3MgUGFyc2VyOgorICAgICIiIiBQYXJzZXIgZm9yIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgYW5k
IGluaS1maWxlIHZhbHVlcy4KKworICAgIDppdmFyIGV4dHJhX2luZm86IGRpY3Qgb2YgZ2VuZXJp
YyBwYXJhbSAtPiB2YWx1ZSB0byBkaXNwbGF5IGluIGNhc2UKKyAgICAgICAgdGhlcmUncyBhbiBl
cnJvciBwcm9jZXNzaW5nIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgorICAgICIiIgorCisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIHVzYWdlPU5vbmUsIHByb2Nlc3NvcHQ9Tm9uZSk6CisgICAg
ICAgIHNlbGYuX2Fub255bW91cyA9IE9wdGlvbkdyb3VwKCJjdXN0b20gb3B0aW9ucyIsIHBhcnNl
cj1zZWxmKQorICAgICAgICBzZWxmLl9ncm91cHMgPSBbXQorICAgICAgICBzZWxmLl9wcm9jZXNz
b3B0ID0gcHJvY2Vzc29wdAorICAgICAgICBzZWxmLl91c2FnZSA9IHVzYWdlCisgICAgICAgIHNl
bGYuX2luaWRpY3QgPSB7fQorICAgICAgICBzZWxmLl9pbmluYW1lcyA9IFtdCisgICAgICAgIHNl
bGYuZXh0cmFfaW5mbyA9IHt9CisKKyAgICBkZWYgcHJvY2Vzc29wdGlvbihzZWxmLCBvcHRpb24p
OgorICAgICAgICBpZiBzZWxmLl9wcm9jZXNzb3B0OgorICAgICAgICAgICAgaWYgb3B0aW9uLmRl
c3Q6CisgICAgICAgICAgICAgICAgc2VsZi5fcHJvY2Vzc29wdChvcHRpb24pCisKKyAgICBkZWYg
Z2V0Z3JvdXAoc2VsZiwgbmFtZSwgZGVzY3JpcHRpb249IiIsIGFmdGVyPU5vbmUpOgorICAgICAg
ICAiIiIgZ2V0IChvciBjcmVhdGUpIGEgbmFtZWQgb3B0aW9uIEdyb3VwLgorCisgICAgICAgIDpu
YW1lOiBuYW1lIG9mIHRoZSBvcHRpb24gZ3JvdXAuCisgICAgICAgIDpkZXNjcmlwdGlvbjogbG9u
ZyBkZXNjcmlwdGlvbiBmb3IgLS1oZWxwIG91dHB1dC4KKyAgICAgICAgOmFmdGVyOiBuYW1lIG9m
IG90aGVyIGdyb3VwLCB1c2VkIGZvciBvcmRlcmluZyAtLWhlbHAgb3V0cHV0LgorCisgICAgICAg
IFRoZSByZXR1cm5lZCBncm91cCBvYmplY3QgaGFzIGFuIGBgYWRkb3B0aW9uYGAgbWV0aG9kIHdp
dGggdGhlIHNhbWUKKyAgICAgICAgc2lnbmF0dXJlIGFzIDpweTpmdW5jOmBwYXJzZXIuYWRkb3B0
aW9uCisgICAgICAgIDxfcHl0ZXN0LmNvbmZpZy5QYXJzZXIuYWRkb3B0aW9uPmAgYnV0IHdpbGwg
YmUgc2hvd24gaW4gdGhlCisgICAgICAgIHJlc3BlY3RpdmUgZ3JvdXAgaW4gdGhlIG91dHB1dCBv
ZiBgYHB5dGVzdC4gLS1oZWxwYGAuCisgICAgICAgICIiIgorICAgICAgICBmb3IgZ3JvdXAgaW4g
c2VsZi5fZ3JvdXBzOgorICAgICAgICAgICAgaWYgZ3JvdXAubmFtZSA9PSBuYW1lOgorICAgICAg
ICAgICAgICAgIHJldHVybiBncm91cAorICAgICAgICBncm91cCA9IE9wdGlvbkdyb3VwKG5hbWUs
IGRlc2NyaXB0aW9uLCBwYXJzZXI9c2VsZikKKyAgICAgICAgaSA9IDAKKyAgICAgICAgZm9yIGks
IGdycCBpbiBlbnVtZXJhdGUoc2VsZi5fZ3JvdXBzKToKKyAgICAgICAgICAgIGlmIGdycC5uYW1l
ID09IGFmdGVyOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHNlbGYuX2dyb3Vwcy5p
bnNlcnQoaSsxLCBncm91cCkKKyAgICAgICAgcmV0dXJuIGdyb3VwCisKKyAgICBkZWYgYWRkb3B0
aW9uKHNlbGYsICpvcHRzLCAqKmF0dHJzKToKKyAgICAgICAgIiIiIHJlZ2lzdGVyIGEgY29tbWFu
ZCBsaW5lIG9wdGlvbi4KKworICAgICAgICA6b3B0czogb3B0aW9uIG5hbWVzLCBjYW4gYmUgc2hv
cnQgb3IgbG9uZyBvcHRpb25zLgorICAgICAgICA6YXR0cnM6IHNhbWUgYXR0cmlidXRlcyB3aGlj
aCB0aGUgYGBhZGRfb3B0aW9uKClgYCBmdW5jdGlvbiBvZiB0aGUKKyAgICAgICAgICAgYGFyZ3Bh
cnNlIGxpYnJhcnkKKyAgICAgICAgICAgPGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5
L2FyZ3BhcnNlLmh0bWw+YF8KKyAgICAgICAgICAgYWNjZXB0cy4KKworICAgICAgICBBZnRlciBj
b21tYW5kIGxpbmUgcGFyc2luZyBvcHRpb25zIGFyZSBhdmFpbGFibGUgb24gdGhlIHB5dGVzdCBj
b25maWcKKyAgICAgICAgb2JqZWN0IHZpYSBgYGNvbmZpZy5vcHRpb24uTkFNRWBgIHdoZXJlIGBg
TkFNRWBgIGlzIHVzdWFsbHkgc2V0CisgICAgICAgIGJ5IHBhc3NpbmcgYSBgYGRlc3RgYCBhdHRy
aWJ1dGUsIGZvciBleGFtcGxlCisgICAgICAgIGBgYWRkb3B0aW9uKCItLWxvbmciLCBkZXN0PSJO
QU1FIiwgLi4uKWBgLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fYW5vbnltb3VzLmFkZG9w
dGlvbigqb3B0cywgKiphdHRycykKKworICAgIGRlZiBwYXJzZShzZWxmLCBhcmdzLCBuYW1lc3Bh
Y2U9Tm9uZSk6CisgICAgICAgIGZyb20gX3B5dGVzdC5fYXJnY29tcGxldGUgaW1wb3J0IHRyeV9h
cmdjb21wbGV0ZQorICAgICAgICBzZWxmLm9wdHBhcnNlciA9IHNlbGYuX2dldHBhcnNlcigpCisg
ICAgICAgIHRyeV9hcmdjb21wbGV0ZShzZWxmLm9wdHBhcnNlcikKKyAgICAgICAgcmV0dXJuIHNl
bGYub3B0cGFyc2VyLnBhcnNlX2FyZ3MoW3N0cih4KSBmb3IgeCBpbiBhcmdzXSwgbmFtZXNwYWNl
PW5hbWVzcGFjZSkKKworICAgIGRlZiBfZ2V0cGFyc2VyKHNlbGYpOgorICAgICAgICBmcm9tIF9w
eXRlc3QuX2FyZ2NvbXBsZXRlIGltcG9ydCBmaWxlc2NvbXBsZXRlcgorICAgICAgICBvcHRwYXJz
ZXIgPSBNeU9wdGlvblBhcnNlcihzZWxmLCBzZWxmLmV4dHJhX2luZm8pCisgICAgICAgIGdyb3Vw
cyA9IHNlbGYuX2dyb3VwcyArIFtzZWxmLl9hbm9ueW1vdXNdCisgICAgICAgIGZvciBncm91cCBp
biBncm91cHM6CisgICAgICAgICAgICBpZiBncm91cC5vcHRpb25zOgorICAgICAgICAgICAgICAg
IGRlc2MgPSBncm91cC5kZXNjcmlwdGlvbiBvciBncm91cC5uYW1lCisgICAgICAgICAgICAgICAg
YXJnZ3JvdXAgPSBvcHRwYXJzZXIuYWRkX2FyZ3VtZW50X2dyb3VwKGRlc2MpCisgICAgICAgICAg
ICAgICAgZm9yIG9wdGlvbiBpbiBncm91cC5vcHRpb25zOgorICAgICAgICAgICAgICAgICAgICBu
ID0gb3B0aW9uLm5hbWVzKCkKKyAgICAgICAgICAgICAgICAgICAgYSA9IG9wdGlvbi5hdHRycygp
CisgICAgICAgICAgICAgICAgICAgIGFyZ2dyb3VwLmFkZF9hcmd1bWVudCgqbiwgKiphKQorICAg
ICAgICAjIGJhc2ggbGlrZSBhdXRvY29tcGxldGlvbiBmb3IgZGlycyAoYXBwZW5kaW5nICcvJykK
KyAgICAgICAgb3B0cGFyc2VyLmFkZF9hcmd1bWVudChGSUxFX09SX0RJUiwgbmFyZ3M9JyonKS5j
b21wbGV0ZXI9ZmlsZXNjb21wbGV0ZXIKKyAgICAgICAgcmV0dXJuIG9wdHBhcnNlcgorCisgICAg
ZGVmIHBhcnNlX3NldG9wdGlvbihzZWxmLCBhcmdzLCBvcHRpb24sIG5hbWVzcGFjZT1Ob25lKToK
KyAgICAgICAgcGFyc2Vkb3B0aW9uID0gc2VsZi5wYXJzZShhcmdzLCBuYW1lc3BhY2U9bmFtZXNw
YWNlKQorICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gcGFyc2Vkb3B0aW9uLl9fZGljdF9fLml0
ZW1zKCk6CisgICAgICAgICAgICBzZXRhdHRyKG9wdGlvbiwgbmFtZSwgdmFsdWUpCisgICAgICAg
IHJldHVybiBnZXRhdHRyKHBhcnNlZG9wdGlvbiwgRklMRV9PUl9ESVIpCisKKyAgICBkZWYgcGFy
c2Vfa25vd25fYXJncyhzZWxmLCBhcmdzLCBuYW1lc3BhY2U9Tm9uZSk6CisgICAgICAgICIiInBh
cnNlcyBhbmQgcmV0dXJucyBhIG5hbWVzcGFjZSBvYmplY3Qgd2l0aCBrbm93biBhcmd1bWVudHMg
YXQgdGhpcworICAgICAgICBwb2ludC4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxm
LnBhcnNlX2tub3duX2FuZF91bmtub3duX2FyZ3MoYXJncywgbmFtZXNwYWNlPW5hbWVzcGFjZSlb
MF0KKworICAgIGRlZiBwYXJzZV9rbm93bl9hbmRfdW5rbm93bl9hcmdzKHNlbGYsIGFyZ3MsIG5h
bWVzcGFjZT1Ob25lKToKKyAgICAgICAgIiIicGFyc2VzIGFuZCByZXR1cm5zIGEgbmFtZXNwYWNl
IG9iamVjdCB3aXRoIGtub3duIGFyZ3VtZW50cywgYW5kCisgICAgICAgIHRoZSByZW1haW5pbmcg
YXJndW1lbnRzIHVua25vd24gYXQgdGhpcyBwb2ludC4KKyAgICAgICAgIiIiCisgICAgICAgIG9w
dHBhcnNlciA9IHNlbGYuX2dldHBhcnNlcigpCisgICAgICAgIGFyZ3MgPSBbc3RyKHgpIGZvciB4
IGluIGFyZ3NdCisgICAgICAgIHJldHVybiBvcHRwYXJzZXIucGFyc2Vfa25vd25fYXJncyhhcmdz
LCBuYW1lc3BhY2U9bmFtZXNwYWNlKQorCisgICAgZGVmIGFkZGluaShzZWxmLCBuYW1lLCBoZWxw
LCB0eXBlPU5vbmUsIGRlZmF1bHQ9Tm9uZSk6CisgICAgICAgICIiIiByZWdpc3RlciBhbiBpbmkt
ZmlsZSBvcHRpb24uCisKKyAgICAgICAgOm5hbWU6IG5hbWUgb2YgdGhlIGluaS12YXJpYWJsZQor
ICAgICAgICA6dHlwZTogdHlwZSBvZiB0aGUgdmFyaWFibGUsIGNhbiBiZSBgYHBhdGhsaXN0YGAs
IGBgYXJnc2BgLCBgYGxpbmVsaXN0YGAKKyAgICAgICAgICAgICAgIG9yIGBgYm9vbGBgLgorICAg
ICAgICA6ZGVmYXVsdDogZGVmYXVsdCB2YWx1ZSBpZiBubyBpbmktZmlsZSBvcHRpb24gZXhpc3Rz
IGJ1dCBpcyBxdWVyaWVkLgorCisgICAgICAgIFRoZSB2YWx1ZSBvZiBpbmktdmFyaWFibGVzIGNh
biBiZSByZXRyaWV2ZWQgdmlhIGEgY2FsbCB0bworICAgICAgICA6cHk6ZnVuYzpgY29uZmlnLmdl
dGluaShuYW1lKSA8X3B5dGVzdC5jb25maWcuQ29uZmlnLmdldGluaT5gLgorICAgICAgICAiIiIK
KyAgICAgICAgYXNzZXJ0IHR5cGUgaW4gKE5vbmUsICJwYXRobGlzdCIsICJhcmdzIiwgImxpbmVs
aXN0IiwgImJvb2wiKQorICAgICAgICBzZWxmLl9pbmlkaWN0W25hbWVdID0gKGhlbHAsIHR5cGUs
IGRlZmF1bHQpCisgICAgICAgIHNlbGYuX2luaW5hbWVzLmFwcGVuZChuYW1lKQorCisKK2NsYXNz
IEFyZ3VtZW50RXJyb3IoRXhjZXB0aW9uKToKKyAgICAiIiIKKyAgICBSYWlzZWQgaWYgYW4gQXJn
dW1lbnQgaW5zdGFuY2UgaXMgY3JlYXRlZCB3aXRoIGludmFsaWQgb3IKKyAgICBpbmNvbnNpc3Rl
bnQgYXJndW1lbnRzLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1zZywgb3B0
aW9uKToKKyAgICAgICAgc2VsZi5tc2cgPSBtc2cKKyAgICAgICAgc2VsZi5vcHRpb25faWQgPSBz
dHIob3B0aW9uKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIGlmIHNlbGYub3B0
aW9uX2lkOgorICAgICAgICAgICAgcmV0dXJuICJvcHRpb24gJXM6ICVzIiAlIChzZWxmLm9wdGlv
bl9pZCwgc2VsZi5tc2cpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5t
c2cKKworCitjbGFzcyBBcmd1bWVudDoKKyAgICAiIiJjbGFzcyB0aGF0IG1pbWljcyB0aGUgbmVj
ZXNzYXJ5IGJlaGF2aW91ciBvZiBvcHRwYXJzZS5PcHRpb24gIiIiCisgICAgX3R5cF9tYXAgPSB7
CisgICAgICAgICdpbnQnOiBpbnQsCisgICAgICAgICdzdHJpbmcnOiBzdHIsCisgICAgICAgIH0K
KyAgICAjIGVuYWJsZSBhZnRlciBzb21lIGdyYWNlIHBlcmlvZCBmb3IgcGx1Z2luIHdyaXRlcnMK
KyAgICBUWVBFX1dBUk4gPSBGYWxzZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICpuYW1lcywg
KiphdHRycyk6CisgICAgICAgICIiInN0b3JlIHBhcm1zIGluIHByaXZhdGUgdmFycyBmb3IgdXNl
IGluIGFkZF9hcmd1bWVudCIiIgorICAgICAgICBzZWxmLl9hdHRycyA9IGF0dHJzCisgICAgICAg
IHNlbGYuX3Nob3J0X29wdHMgPSBbXQorICAgICAgICBzZWxmLl9sb25nX29wdHMgPSBbXQorICAg
ICAgICBzZWxmLmRlc3QgPSBhdHRycy5nZXQoJ2Rlc3QnKQorICAgICAgICBpZiBzZWxmLlRZUEVf
V0FSTjoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBoZWxwID0gYXR0cnNbJ2hl
bHAnXQorICAgICAgICAgICAgICAgIGlmICclZGVmYXVsdCcgaW4gaGVscDoKKyAgICAgICAgICAg
ICAgICAgICAgd2FybmluZ3Mud2FybigKKyAgICAgICAgICAgICAgICAgICAgICAgICdweXRlc3Qg
bm93IHVzZXMgYXJncGFyc2UuICIlZGVmYXVsdCIgc2hvdWxkIGJlJworICAgICAgICAgICAgICAg
ICAgICAgICAgJyBjaGFuZ2VkIHRvICIlKGRlZmF1bHQpcyIgJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgIEZ1dHVyZVdhcm5pbmcsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGFja2xldmVs
PTMpCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcwor
ICAgICAgICB0cnk6CisgICAgICAgICAgICB0eXAgPSBhdHRyc1sndHlwZSddCisgICAgICAgIGV4
Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgICMgdGhpcyBtaWdodCByYWlzZSBhIGtleWVycm9yIGFzIHdlbGwsIGRvbid0IHdhbnQgdG8g
Y2F0Y2ggdGhhdAorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXAsIHB5LmJ1aWx0aW4uX2Jh
c2VzdHJpbmcpOgorICAgICAgICAgICAgICAgIGlmIHR5cCA9PSAnY2hvaWNlJzoKKyAgICAgICAg
ICAgICAgICAgICAgaWYgc2VsZi5UWVBFX1dBUk46CisgICAgICAgICAgICAgICAgICAgICAgICB3
YXJuaW5ncy53YXJuKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0eXBlIGFyZ3VtZW50
IHRvIGFkZG9wdGlvbigpIGlzIGEgc3RyaW5nICVyLicKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnIEZvciBwYXJzZWFyZyB0aGlzIGlzIG9wdGlvbmFsIGFuZCB3aGVuIHN1cHBsaWVkICcK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIHNob3VsZCBiZSBhIHR5cGUuJworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICcgKG9wdGlvbnM6ICVzKScgJSAodHlwLCBuYW1lcyksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRnV0dXJlV2FybmluZywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGFja2xldmVsPTMpCisgICAgICAgICAgICAgICAgICAgICMgYXJncGFy
c2UgZXhwZWN0cyBhIHR5cGUgaGVyZSB0YWtlIGl0IGZyb20KKyAgICAgICAgICAgICAgICAgICAg
IyB0aGUgdHlwZSBvZiB0aGUgZmlyc3QgZWxlbWVudAorICAgICAgICAgICAgICAgICAgICBhdHRy
c1sndHlwZSddID0gdHlwZShhdHRyc1snY2hvaWNlcyddWzBdKQorICAgICAgICAgICAgICAgIGVs
c2U6CisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuVFlQRV9XQVJOOgorICAgICAgICAgICAg
ICAgICAgICAgICAgd2FybmluZ3Mud2FybigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
dHlwZSBhcmd1bWVudCB0byBhZGRvcHRpb24oKSBpcyBhIHN0cmluZyAlci4nCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJyBGb3IgcGFyc2VhcmcgdGhpcyBzaG91bGQgYmUgYSB0eXBlLicK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIChvcHRpb25zOiAlcyknICUgKHR5cCwgbmFt
ZXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1dHVyZVdhcm5pbmcsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhY2tsZXZlbD0zKQorICAgICAgICAgICAgICAgICAgICBh
dHRyc1sndHlwZSddID0gQXJndW1lbnQuX3R5cF9tYXBbdHlwXQorICAgICAgICAgICAgICAgICMg
dXNlZCBpbiB0ZXN0X3BhcnNlb3B0IC0+IHRlc3RfcGFyc2VfZGVmYXVsdGdldHRlcgorICAgICAg
ICAgICAgICAgIHNlbGYudHlwZSA9IGF0dHJzWyd0eXBlJ10KKyAgICAgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICAgICAgc2VsZi50eXBlID0gdHlwCisgICAgICAgIHRyeToKKyAgICAgICAgICAg
ICMgYXR0cmlidXRlIGV4aXN0ZW5jZSBpcyB0ZXN0ZWQgaW4gQ29uZmlnLl9wcm9jZXNzb3B0Cisg
ICAgICAgICAgICBzZWxmLmRlZmF1bHQgPSBhdHRyc1snZGVmYXVsdCddCisgICAgICAgIGV4Y2Vw
dCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5fc2V0X29wdF9zdHJp
bmdzKG5hbWVzKQorICAgICAgICBpZiBub3Qgc2VsZi5kZXN0OgorICAgICAgICAgICAgaWYgc2Vs
Zi5fbG9uZ19vcHRzOgorICAgICAgICAgICAgICAgIHNlbGYuZGVzdCA9IHNlbGYuX2xvbmdfb3B0
c1swXVsyOl0ucmVwbGFjZSgnLScsICdfJykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLmRlc3QgPSBzZWxmLl9zaG9ydF9v
cHRzWzBdWzE6XQorICAgICAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAg
ICAgICAgICAgICByYWlzZSBBcmd1bWVudEVycm9yKAorICAgICAgICAgICAgICAgICAgICAgICAg
J25lZWQgYSBsb25nIG9yIHNob3J0IG9wdGlvbicsIHNlbGYpCisKKyAgICBkZWYgbmFtZXMoc2Vs
Zik6CisgICAgICAgIHJldHVybiBzZWxmLl9zaG9ydF9vcHRzICsgc2VsZi5fbG9uZ19vcHRzCisK
KyAgICBkZWYgYXR0cnMoc2VsZik6CisgICAgICAgICMgdXBkYXRlIGFueSBhdHRyaWJ1dGVzIHNl
dCBieSBwcm9jZXNzb3B0CisgICAgICAgIGF0dHJzID0gJ2RlZmF1bHQgZGVzdCBoZWxwJy5zcGxp
dCgpCisgICAgICAgIGlmIHNlbGYuZGVzdDoKKyAgICAgICAgICAgIGF0dHJzLmFwcGVuZChzZWxm
LmRlc3QpCisgICAgICAgIGZvciBhdHRyIGluIGF0dHJzOgorICAgICAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgICAgIHNlbGYuX2F0dHJzW2F0dHJdID0gZ2V0YXR0cihzZWxmLCBhdHRyKQorICAg
ICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAg
ICAgICAgaWYgc2VsZi5fYXR0cnMuZ2V0KCdoZWxwJyk6CisgICAgICAgICAgICBhID0gc2VsZi5f
YXR0cnNbJ2hlbHAnXQorICAgICAgICAgICAgYSA9IGEucmVwbGFjZSgnJWRlZmF1bHQnLCAnJShk
ZWZhdWx0KXMnKQorICAgICAgICAgICAgI2EgPSBhLnJlcGxhY2UoJyVwcm9nJywgJyUocHJvZylz
JykKKyAgICAgICAgICAgIHNlbGYuX2F0dHJzWydoZWxwJ10gPSBhCisgICAgICAgIHJldHVybiBz
ZWxmLl9hdHRycworCisgICAgZGVmIF9zZXRfb3B0X3N0cmluZ3Moc2VsZiwgb3B0cyk6CisgICAg
ICAgICIiImRpcmVjdGx5IGZyb20gb3B0cGFyc2UKKworICAgICAgICBtaWdodCBub3QgYmUgbmVj
ZXNzYXJ5IGFzIHRoaXMgaXMgcGFzc2VkIHRvIGFyZ3BhcnNlIGxhdGVyIG9uIiIiCisgICAgICAg
IGZvciBvcHQgaW4gb3B0czoKKyAgICAgICAgICAgIGlmIGxlbihvcHQpIDwgMjoKKyAgICAgICAg
ICAgICAgICByYWlzZSBBcmd1bWVudEVycm9yKAorICAgICAgICAgICAgICAgICAgICAiaW52YWxp
ZCBvcHRpb24gc3RyaW5nICVyOiAiCisgICAgICAgICAgICAgICAgICAgICJtdXN0IGJlIGF0IGxl
YXN0IHR3byBjaGFyYWN0ZXJzIGxvbmciICUgb3B0LCBzZWxmKQorICAgICAgICAgICAgZWxpZiBs
ZW4ob3B0KSA9PSAyOgorICAgICAgICAgICAgICAgIGlmIG5vdCAob3B0WzBdID09ICItIiBhbmQg
b3B0WzFdICE9ICItIik6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEFyZ3VtZW50RXJyb3Io
CisgICAgICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCBzaG9ydCBvcHRpb24gc3RyaW5nICVy
OiAiCisgICAgICAgICAgICAgICAgICAgICAgICAibXVzdCBiZSBvZiB0aGUgZm9ybSAteCwgKHgg
YW55IG5vbi1kYXNoIGNoYXIpIiAlIG9wdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYp
CisgICAgICAgICAgICAgICAgc2VsZi5fc2hvcnRfb3B0cy5hcHBlbmQob3B0KQorICAgICAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBub3QgKG9wdFswOjJdID09ICItLSIgYW5kIG9w
dFsyXSAhPSAiLSIpOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBBcmd1bWVudEVycm9yKAor
ICAgICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgbG9uZyBvcHRpb24gc3RyaW5nICVyOiAi
CisgICAgICAgICAgICAgICAgICAgICAgICAibXVzdCBzdGFydCB3aXRoIC0tLCBmb2xsb3dlZCBi
eSBub24tZGFzaCIgJSBvcHQsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmKQorICAgICAg
ICAgICAgICAgIHNlbGYuX2xvbmdfb3B0cy5hcHBlbmQob3B0KQorCisgICAgZGVmIF9fcmVwcl9f
KHNlbGYpOgorICAgICAgICByZXR2YWwgPSAnQXJndW1lbnQoJworICAgICAgICBpZiBzZWxmLl9z
aG9ydF9vcHRzOgorICAgICAgICAgICAgcmV0dmFsICs9ICdfc2hvcnRfb3B0czogJyArIHJlcHIo
c2VsZi5fc2hvcnRfb3B0cykgKyAnLCAnCisgICAgICAgIGlmIHNlbGYuX2xvbmdfb3B0czoKKyAg
ICAgICAgICAgIHJldHZhbCArPSAnX2xvbmdfb3B0czogJyArIHJlcHIoc2VsZi5fbG9uZ19vcHRz
KSArICcsICcKKyAgICAgICAgcmV0dmFsICs9ICdkZXN0OiAnICsgcmVwcihzZWxmLmRlc3QpICsg
JywgJworICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICd0eXBlJyk6CisgICAgICAgICAgICByZXR2
YWwgKz0gJ3R5cGU6ICcgKyByZXByKHNlbGYudHlwZSkgKyAnLCAnCisgICAgICAgIGlmIGhhc2F0
dHIoc2VsZiwgJ2RlZmF1bHQnKToKKyAgICAgICAgICAgIHJldHZhbCArPSAnZGVmYXVsdDogJyAr
IHJlcHIoc2VsZi5kZWZhdWx0KSArICcsICcKKyAgICAgICAgaWYgcmV0dmFsWy0yOl0gPT0gJywg
JzogICMgYWx3YXlzIGxvbmcgZW5vdWdoIHRvIHRlc3QgKCJBcmd1bWVudCgiICkKKyAgICAgICAg
ICAgIHJldHZhbCA9IHJldHZhbFs6LTJdCisgICAgICAgIHJldHZhbCArPSAnKScKKyAgICAgICAg
cmV0dXJuIHJldHZhbAorCisKK2NsYXNzIE9wdGlvbkdyb3VwOgorICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBuYW1lLCBkZXNjcmlwdGlvbj0iIiwgcGFyc2VyPU5vbmUpOgorICAgICAgICBzZWxmLm5h
bWUgPSBuYW1lCisgICAgICAgIHNlbGYuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbgorICAgICAg
ICBzZWxmLm9wdGlvbnMgPSBbXQorICAgICAgICBzZWxmLnBhcnNlciA9IHBhcnNlcgorCisgICAg
ZGVmIGFkZG9wdGlvbihzZWxmLCAqb3B0bmFtZXMsICoqYXR0cnMpOgorICAgICAgICAiIiIgYWRk
IGFuIG9wdGlvbiB0byB0aGlzIGdyb3VwLgorCisgICAgICAgIGlmIGEgc2hvcnRlbmVkIHZlcnNp
b24gb2YgYSBsb25nIG9wdGlvbiBpcyBzcGVjaWZpZWQgaXQgd2lsbAorICAgICAgICBiZSBzdXBw
cmVzc2VkIGluIHRoZSBoZWxwLiBhZGRvcHRpb24oJy0tdHdvd29yZHMnLCAnLS10d28td29yZHMn
KQorICAgICAgICByZXN1bHRzIGluIGhlbHAgc2hvd2luZyAnLS10d28td29yZHMnIG9ubHksIGJ1
dCAtLXR3b3dvcmRzIGdldHMKKyAgICAgICAgYWNjZXB0ZWQgKiphbmQqKiB0aGUgYXV0b21hdGlj
IGRlc3RpbmF0aW9uIGlzIGluIGFyZ3MudHdvd29yZHMKKyAgICAgICAgIiIiCisgICAgICAgIG9w
dGlvbiA9IEFyZ3VtZW50KCpvcHRuYW1lcywgKiphdHRycykKKyAgICAgICAgc2VsZi5fYWRkb3B0
aW9uX2luc3RhbmNlKG9wdGlvbiwgc2hvcnR1cHBlcj1GYWxzZSkKKworICAgIGRlZiBfYWRkb3B0
aW9uKHNlbGYsICpvcHRuYW1lcywgKiphdHRycyk6CisgICAgICAgIG9wdGlvbiA9IEFyZ3VtZW50
KCpvcHRuYW1lcywgKiphdHRycykKKyAgICAgICAgc2VsZi5fYWRkb3B0aW9uX2luc3RhbmNlKG9w
dGlvbiwgc2hvcnR1cHBlcj1UcnVlKQorCisgICAgZGVmIF9hZGRvcHRpb25faW5zdGFuY2Uoc2Vs
Ziwgb3B0aW9uLCBzaG9ydHVwcGVyPUZhbHNlKToKKyAgICAgICAgaWYgbm90IHNob3J0dXBwZXI6
CisgICAgICAgICAgICBmb3Igb3B0IGluIG9wdGlvbi5fc2hvcnRfb3B0czoKKyAgICAgICAgICAg
ICAgICBpZiBvcHRbMF0gPT0gJy0nIGFuZCBvcHRbMV0uaXNsb3dlcigpOgorICAgICAgICAgICAg
ICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJsb3dlcmNhc2Ugc2hvcnRvcHRpb25zIHJlc2VydmVk
IikKKyAgICAgICAgaWYgc2VsZi5wYXJzZXI6CisgICAgICAgICAgICBzZWxmLnBhcnNlci5wcm9j
ZXNzb3B0aW9uKG9wdGlvbikKKyAgICAgICAgc2VsZi5vcHRpb25zLmFwcGVuZChvcHRpb24pCisK
KworY2xhc3MgTXlPcHRpb25QYXJzZXIoYXJncGFyc2UuQXJndW1lbnRQYXJzZXIpOgorICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBwYXJzZXIsIGV4dHJhX2luZm89Tm9uZSk6CisgICAgICAgIGlmIG5v
dCBleHRyYV9pbmZvOgorICAgICAgICAgICAgZXh0cmFfaW5mbyA9IHt9CisgICAgICAgIHNlbGYu
X3BhcnNlciA9IHBhcnNlcgorICAgICAgICBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlci5fX2luaXRf
XyhzZWxmLCB1c2FnZT1wYXJzZXIuX3VzYWdlLAorICAgICAgICAgICAgYWRkX2hlbHA9RmFsc2Us
IGZvcm1hdHRlcl9jbGFzcz1Ecm9wU2hvcnRlckxvbmdIZWxwRm9ybWF0dGVyKQorICAgICAgICAj
IGV4dHJhX2luZm8gaXMgYSBkaWN0IG9mIChwYXJhbSAtPiB2YWx1ZSkgdG8gZGlzcGxheSBpZiB0
aGVyZSdzCisgICAgICAgICMgYW4gdXNhZ2UgZXJyb3IgdG8gcHJvdmlkZSBtb3JlIGNvbnRleHR1
YWwgaW5mb3JtYXRpb24gdG8gdGhlIHVzZXIKKyAgICAgICAgc2VsZi5leHRyYV9pbmZvID0gZXh0
cmFfaW5mbworCisgICAgZGVmIHBhcnNlX2FyZ3Moc2VsZiwgYXJncz1Ob25lLCBuYW1lc3BhY2U9
Tm9uZSk6CisgICAgICAgICIiImFsbG93IHNwbGl0dGluZyBvZiBwb3NpdGlvbmFsIGFyZ3VtZW50
cyIiIgorICAgICAgICBhcmdzLCBhcmd2ID0gc2VsZi5wYXJzZV9rbm93bl9hcmdzKGFyZ3MsIG5h
bWVzcGFjZSkKKyAgICAgICAgaWYgYXJndjoKKyAgICAgICAgICAgIGZvciBhcmcgaW4gYXJndjoK
KyAgICAgICAgICAgICAgICBpZiBhcmcgYW5kIGFyZ1swXSA9PSAnLSc6CisgICAgICAgICAgICAg
ICAgICAgIGxpbmVzID0gWyd1bnJlY29nbml6ZWQgYXJndW1lbnRzOiAlcycgJSAoJyAnLmpvaW4o
YXJndikpXQorICAgICAgICAgICAgICAgICAgICBmb3IgaywgdiBpbiBzb3J0ZWQoc2VsZi5leHRy
YV9pbmZvLml0ZW1zKCkpOgorICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICVzOiAlcycgJSAoaywgdikpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IoJ1xuJy5q
b2luKGxpbmVzKSkKKyAgICAgICAgICAgIGdldGF0dHIoYXJncywgRklMRV9PUl9ESVIpLmV4dGVu
ZChhcmd2KQorICAgICAgICByZXR1cm4gYXJncworCisKK2NsYXNzIERyb3BTaG9ydGVyTG9uZ0hl
bHBGb3JtYXR0ZXIoYXJncGFyc2UuSGVscEZvcm1hdHRlcik6CisgICAgIiIic2hvcnRlbiBoZWxw
IGZvciBsb25nIG9wdGlvbnMgdGhhdCBkaWZmZXIgb25seSBpbiBleHRyYSBoeXBoZW5zCisKKyAg
ICAtIGNvbGxhcHNlICoqbG9uZyoqIG9wdGlvbnMgdGhhdCBhcmUgdGhlIHNhbWUgZXhjZXB0IGZv
ciBleHRyYSBoeXBoZW5zCisgICAgLSBzcGVjaWFsIGFjdGlvbiBhdHRyaWJ1dGUgbWFwX2xvbmdf
b3B0aW9uIGFsbG93cyBzdXJwcmVzc2luZyBhZGRpdGlvbmFsCisgICAgICBsb25nIG9wdGlvbnMK
KyAgICAtIHNob3J0Y3V0IGlmIHRoZXJlIGFyZSBvbmx5IHR3byBvcHRpb25zIGFuZCBvbmUgb2Yg
dGhlbSBpcyBhIHNob3J0IG9uZQorICAgIC0gY2FjaGUgcmVzdWx0IG9uIGFjdGlvbiBvYmplY3Qg
YXMgdGhpcyBpcyBjYWxsZWQgYXQgbGVhc3QgMiB0aW1lcworICAgICIiIgorICAgIGRlZiBfZm9y
bWF0X2FjdGlvbl9pbnZvY2F0aW9uKHNlbGYsIGFjdGlvbik6CisgICAgICAgIG9yZ3N0ciA9IGFy
Z3BhcnNlLkhlbHBGb3JtYXR0ZXIuX2Zvcm1hdF9hY3Rpb25faW52b2NhdGlvbihzZWxmLCBhY3Rp
b24pCisgICAgICAgIGlmIG9yZ3N0ciBhbmQgb3Jnc3RyWzBdICE9ICctJzogIyBvbmx5IG9wdGlv
bmFsIGFyZ3VtZW50cworICAgICAgICAgICAgcmV0dXJuIG9yZ3N0cgorICAgICAgICByZXMgPSBn
ZXRhdHRyKGFjdGlvbiwgJ19mb3JtYXR0ZWRfYWN0aW9uX2ludm9jYXRpb24nLCBOb25lKQorICAg
ICAgICBpZiByZXM6CisgICAgICAgICAgICByZXR1cm4gcmVzCisgICAgICAgIG9wdGlvbnMgPSBv
cmdzdHIuc3BsaXQoJywgJykKKyAgICAgICAgaWYgbGVuKG9wdGlvbnMpID09IDIgYW5kIChsZW4o
b3B0aW9uc1swXSkgPT0gMiBvciBsZW4ob3B0aW9uc1sxXSkgPT0gMik6CisgICAgICAgICAgICAj
IGEgc2hvcnRjdXQgZm9yICctaCwgLS1oZWxwJyBvciAnLS1hYmMnLCAnLWEnCisgICAgICAgICAg
ICBhY3Rpb24uX2Zvcm1hdHRlZF9hY3Rpb25faW52b2NhdGlvbiA9IG9yZ3N0cgorICAgICAgICAg
ICAgcmV0dXJuIG9yZ3N0cgorICAgICAgICByZXR1cm5fbGlzdCA9IFtdCisgICAgICAgIG9wdGlv
bl9tYXAgPSAgZ2V0YXR0cihhY3Rpb24sICdtYXBfbG9uZ19vcHRpb24nLCB7fSkKKyAgICAgICAg
aWYgb3B0aW9uX21hcCBpcyBOb25lOgorICAgICAgICAgICAgb3B0aW9uX21hcCA9IHt9CisgICAg
ICAgIHNob3J0X2xvbmcgPSB7fQorICAgICAgICBmb3Igb3B0aW9uIGluIG9wdGlvbnM6CisgICAg
ICAgICAgICBpZiBsZW4ob3B0aW9uKSA9PSAyIG9yIG9wdGlvblsyXSA9PSAnICc6CisgICAgICAg
ICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIG5vdCBvcHRpb24uc3RhcnRzd2l0aCgn
LS0nKToKKyAgICAgICAgICAgICAgICByYWlzZSBBcmd1bWVudEVycm9yKCdsb25nIG9wdGlvbmFs
IGFyZ3VtZW50IHdpdGhvdXQgIi0tIjogWyVzXScKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICUgKG9wdGlvbiksIHNlbGYpCisgICAgICAgICAgICB4eG9wdGlvbiA9IG9wdGlv
blsyOl0KKyAgICAgICAgICAgIGlmIHh4b3B0aW9uLnNwbGl0KClbMF0gbm90IGluIG9wdGlvbl9t
YXA6CisgICAgICAgICAgICAgICAgc2hvcnRlbmVkID0geHhvcHRpb24ucmVwbGFjZSgnLScsICcn
KQorICAgICAgICAgICAgICAgIGlmIHNob3J0ZW5lZCBub3QgaW4gc2hvcnRfbG9uZyBvciBcCisg
ICAgICAgICAgICAgICAgICAgbGVuKHNob3J0X2xvbmdbc2hvcnRlbmVkXSkgPCBsZW4oeHhvcHRp
b24pOgorICAgICAgICAgICAgICAgICAgICBzaG9ydF9sb25nW3Nob3J0ZW5lZF0gPSB4eG9wdGlv
bgorICAgICAgICAjIG5vdyBzaG9ydF9sb25nIGhhcyBiZWVuIGZpbGxlZCBvdXQgdG8gdGhlIGxv
bmdlc3Qgd2l0aCBkYXNoZXMKKyAgICAgICAgIyAqKmFuZCoqIHdlIGtlZXAgdGhlIHJpZ2h0IG9w
dGlvbiBvcmRlcmluZyBmcm9tIGFkZF9hcmd1bWVudAorICAgICAgICBmb3Igb3B0aW9uIGluIG9w
dGlvbnM6ICMKKyAgICAgICAgICAgIGlmIGxlbihvcHRpb24pID09IDIgb3Igb3B0aW9uWzJdID09
ICcgJzoKKyAgICAgICAgICAgICAgICByZXR1cm5fbGlzdC5hcHBlbmQob3B0aW9uKQorICAgICAg
ICAgICAgaWYgb3B0aW9uWzI6XSA9PSBzaG9ydF9sb25nLmdldChvcHRpb24ucmVwbGFjZSgnLScs
ICcnKSk6CisgICAgICAgICAgICAgICAgcmV0dXJuX2xpc3QuYXBwZW5kKG9wdGlvbi5yZXBsYWNl
KCcgJywgJz0nKSkKKyAgICAgICAgYWN0aW9uLl9mb3JtYXR0ZWRfYWN0aW9uX2ludm9jYXRpb24g
PSAnLCAnLmpvaW4ocmV0dXJuX2xpc3QpCisgICAgICAgIHJldHVybiBhY3Rpb24uX2Zvcm1hdHRl
ZF9hY3Rpb25faW52b2NhdGlvbgorCisKKworZGVmIF9lbnN1cmVfcmVtb3ZlZF9zeXNtb2R1bGUo
bW9kbmFtZSk6CisgICAgdHJ5OgorICAgICAgICBkZWwgc3lzLm1vZHVsZXNbbW9kbmFtZV0KKyAg
ICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgIHBhc3MKKworY2xhc3MgQ21kT3B0aW9ucyhvYmpl
Y3QpOgorICAgICIiIiBob2xkcyBjbWRsaW5lIG9wdGlvbnMgYXMgYXR0cmlidXRlcy4iIiIKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWVzPSgpKToKKyAgICAgICAgc2VsZi5fX2RpY3RfXy51
cGRhdGUodmFsdWVzKQorICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICI8
Q21kT3B0aW9ucyAlcj4iICUoc2VsZi5fX2RpY3RfXywpCisgICAgZGVmIGNvcHkoc2VsZik6Cisg
ICAgICAgIHJldHVybiBDbWRPcHRpb25zKHNlbGYuX19kaWN0X18pCisKK2NsYXNzIE5vdHNldDoK
KyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiPE5PVFNFVD4iCisKK25v
dHNldCA9IE5vdHNldCgpCitGSUxFX09SX0RJUiA9ICdmaWxlX29yX2RpcicKKworY2xhc3MgQ29u
ZmlnKG9iamVjdCk6CisgICAgIiIiIGFjY2VzcyB0byBjb25maWd1cmF0aW9uIHZhbHVlcywgcGx1
Z2lubWFuYWdlciBhbmQgcGx1Z2luIGhvb2tzLiAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgcGx1Z2lubWFuYWdlcik6CisgICAgICAgICM6IGFjY2VzcyB0byBjb21tYW5kIGxpbmUgb3B0
aW9uIGFzIGF0dHJpYnV0ZXMuCisgICAgICAgICM6IChkZXByZWNhdGVkKSwgdXNlIDpweTpmdW5j
OmBnZXRvcHRpb24oKSA8X3B5dGVzdC5jb25maWcuQ29uZmlnLmdldG9wdGlvbj5gIGluc3RlYWQK
KyAgICAgICAgc2VsZi5vcHRpb24gPSBDbWRPcHRpb25zKCkKKyAgICAgICAgX2EgPSBGSUxFX09S
X0RJUgorICAgICAgICBzZWxmLl9wYXJzZXIgPSBQYXJzZXIoCisgICAgICAgICAgICB1c2FnZT0i
JSUocHJvZylzIFtvcHRpb25zXSBbJXNdIFslc10gWy4uLl0iICUgKF9hLCBfYSksCisgICAgICAg
ICAgICBwcm9jZXNzb3B0PXNlbGYuX3Byb2Nlc3NvcHQsCisgICAgICAgICkKKyAgICAgICAgIzog
YSBwbHVnaW5tYW5hZ2VyIGluc3RhbmNlCisgICAgICAgIHNlbGYucGx1Z2lubWFuYWdlciA9IHBs
dWdpbm1hbmFnZXIKKyAgICAgICAgc2VsZi50cmFjZSA9IHNlbGYucGx1Z2lubWFuYWdlci50cmFj
ZS5yb290LmdldCgiY29uZmlnIikKKyAgICAgICAgc2VsZi5ob29rID0gc2VsZi5wbHVnaW5tYW5h
Z2VyLmhvb2sKKyAgICAgICAgc2VsZi5faW5pY2FjaGUgPSB7fQorICAgICAgICBzZWxmLl9vcHQy
ZGVzdCA9IHt9CisgICAgICAgIHNlbGYuX2NsZWFudXAgPSBbXQorICAgICAgICBzZWxmLl93YXJu
ID0gc2VsZi5wbHVnaW5tYW5hZ2VyLl93YXJuCisgICAgICAgIHNlbGYucGx1Z2lubWFuYWdlci5y
ZWdpc3RlcihzZWxmLCAicHl0ZXN0Y29uZmlnIikKKyAgICAgICAgc2VsZi5fY29uZmlndXJlZCA9
IEZhbHNlCisgICAgICAgIGRlZiBkb19zZXRucyhkaWMpOgorICAgICAgICAgICAgaW1wb3J0IHB5
dGVzdAorICAgICAgICAgICAgc2V0bnMocHl0ZXN0LCBkaWMpCisgICAgICAgIHNlbGYuaG9vay5w
eXRlc3RfbmFtZXNwYWNlLmNhbGxfaGlzdG9yaWMoZG9fc2V0bnMsIHt9KQorICAgICAgICBzZWxm
Lmhvb2sucHl0ZXN0X2FkZG9wdGlvbi5jYWxsX2hpc3RvcmljKGt3YXJncz1kaWN0KHBhcnNlcj1z
ZWxmLl9wYXJzZXIpKQorCisgICAgZGVmIGFkZF9jbGVhbnVwKHNlbGYsIGZ1bmMpOgorICAgICAg
ICAiIiIgQWRkIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIGNvbmZpZyBvYmplY3Qg
Z2V0cyBvdXQgb2YKKyAgICAgICAgdXNlICh1c3VhbGx5IGNvbmluY2lkaW5nIHdpdGggcHl0ZXN0
X3VuY29uZmlndXJlKS4iIiIKKyAgICAgICAgc2VsZi5fY2xlYW51cC5hcHBlbmQoZnVuYykKKwor
ICAgIGRlZiBfZG9fY29uZmlndXJlKHNlbGYpOgorICAgICAgICBhc3NlcnQgbm90IHNlbGYuX2Nv
bmZpZ3VyZWQKKyAgICAgICAgc2VsZi5fY29uZmlndXJlZCA9IFRydWUKKyAgICAgICAgc2VsZi5o
b29rLnB5dGVzdF9jb25maWd1cmUuY2FsbF9oaXN0b3JpYyhrd2FyZ3M9ZGljdChjb25maWc9c2Vs
ZikpCisKKyAgICBkZWYgX2Vuc3VyZV91bmNvbmZpZ3VyZShzZWxmKToKKyAgICAgICAgaWYgc2Vs
Zi5fY29uZmlndXJlZDoKKyAgICAgICAgICAgIHNlbGYuX2NvbmZpZ3VyZWQgPSBGYWxzZQorICAg
ICAgICAgICAgc2VsZi5ob29rLnB5dGVzdF91bmNvbmZpZ3VyZShjb25maWc9c2VsZikKKyAgICAg
ICAgICAgIHNlbGYuaG9vay5weXRlc3RfY29uZmlndXJlLl9jYWxsX2hpc3RvcnkgPSBbXQorICAg
ICAgICB3aGlsZSBzZWxmLl9jbGVhbnVwOgorICAgICAgICAgICAgZmluID0gc2VsZi5fY2xlYW51
cC5wb3AoKQorICAgICAgICAgICAgZmluKCkKKworICAgIGRlZiB3YXJuKHNlbGYsIGNvZGUsIG1l
c3NhZ2UsIGZzbG9jYXRpb249Tm9uZSk6CisgICAgICAgICIiIiBnZW5lcmF0ZSBhIHdhcm5pbmcg
Zm9yIHRoaXMgdGVzdCBzZXNzaW9uLiAiIiIKKyAgICAgICAgc2VsZi5ob29rLnB5dGVzdF9sb2d3
YXJuaW5nLmNhbGxfaGlzdG9yaWMoa3dhcmdzPWRpY3QoCisgICAgICAgICAgICBjb2RlPWNvZGUs
IG1lc3NhZ2U9bWVzc2FnZSwKKyAgICAgICAgICAgIGZzbG9jYXRpb249ZnNsb2NhdGlvbiwgbm9k
ZWlkPU5vbmUpKQorCisgICAgZGVmIGdldF90ZXJtaW5hbF93cml0ZXIoc2VsZik6CisgICAgICAg
IHJldHVybiBzZWxmLnBsdWdpbm1hbmFnZXIuZ2V0X3BsdWdpbigidGVybWluYWxyZXBvcnRlciIp
Ll90dworCisgICAgZGVmIHB5dGVzdF9jbWRsaW5lX3BhcnNlKHNlbGYsIHBsdWdpbm1hbmFnZXIs
IGFyZ3MpOgorICAgICAgICAjIFJFRjEgYXNzZXJ0IHNlbGYgPT0gcGx1Z2lubWFuYWdlci5jb25m
aWcsIChzZWxmLCBwbHVnaW5tYW5hZ2VyLmNvbmZpZykKKyAgICAgICAgc2VsZi5wYXJzZShhcmdz
KQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIG5vdGlmeV9leGNlcHRpb24oc2VsZiwg
ZXhjaW5mbywgb3B0aW9uPU5vbmUpOgorICAgICAgICBpZiBvcHRpb24gYW5kIG9wdGlvbi5mdWxs
dHJhY2U6CisgICAgICAgICAgICBzdHlsZSA9ICJsb25nIgorICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgc3R5bGUgPSAibmF0aXZlIgorICAgICAgICBleGNyZXByID0gZXhjaW5mby5nZXRyZXBy
KGZ1bmNhcmdzPVRydWUsCisgICAgICAgICAgICBzaG93bG9jYWxzPWdldGF0dHIob3B0aW9uLCAn
c2hvd2xvY2FscycsIEZhbHNlKSwKKyAgICAgICAgICAgIHN0eWxlPXN0eWxlLAorICAgICAgICAp
CisgICAgICAgIHJlcyA9IHNlbGYuaG9vay5weXRlc3RfaW50ZXJuYWxlcnJvcihleGNyZXByPWV4
Y3JlcHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNp
bmZvPWV4Y2luZm8pCisgICAgICAgIGlmIG5vdCBweS5idWlsdGluLmFueShyZXMpOgorICAgICAg
ICAgICAgZm9yIGxpbmUgaW4gc3RyKGV4Y3JlcHIpLnNwbGl0KCJcbiIpOgorICAgICAgICAgICAg
ICAgIHN5cy5zdGRlcnIud3JpdGUoIklOVEVSTkFMRVJST1I+ICVzXG4iICVsaW5lKQorICAgICAg
ICAgICAgICAgIHN5cy5zdGRlcnIuZmx1c2goKQorCisgICAgZGVmIGN3ZF9yZWxhdGl2ZV9ub2Rl
aWQoc2VsZiwgbm9kZWlkKToKKyAgICAgICAgIyBub2RlaWQncyBhcmUgcmVsYXRpdmUgdG8gdGhl
IHJvb3RwYXRoLCBjb21wdXRlIHJlbGF0aXZlIHRvIGN3ZAorICAgICAgICBpZiBzZWxmLmludm9j
YXRpb25fZGlyICE9IHNlbGYucm9vdGRpcjoKKyAgICAgICAgICAgIGZ1bGxwYXRoID0gc2VsZi5y
b290ZGlyLmpvaW4obm9kZWlkKQorICAgICAgICAgICAgbm9kZWlkID0gc2VsZi5pbnZvY2F0aW9u
X2Rpci5iZXN0cmVscGF0aChmdWxscGF0aCkKKyAgICAgICAgcmV0dXJuIG5vZGVpZAorCisgICAg
QGNsYXNzbWV0aG9kCisgICAgZGVmIGZyb21kaWN0YXJncyhjbHMsIG9wdGlvbl9kaWN0LCBhcmdz
KToKKyAgICAgICAgIiIiIGNvbnN0cnVjdG9yIHVzZWFibGUgZm9yIHN1YnByb2Nlc3Nlcy4gIiIi
CisgICAgICAgIGNvbmZpZyA9IGdldF9jb25maWcoKQorICAgICAgICBjb25maWcub3B0aW9uLl9f
ZGljdF9fLnVwZGF0ZShvcHRpb25fZGljdCkKKyAgICAgICAgY29uZmlnLnBhcnNlKGFyZ3MsIGFk
ZG9wdHM9RmFsc2UpCisgICAgICAgIGZvciB4IGluIGNvbmZpZy5vcHRpb24ucGx1Z2luczoKKyAg
ICAgICAgICAgIGNvbmZpZy5wbHVnaW5tYW5hZ2VyLmNvbnNpZGVyX3BsdWdpbmFyZyh4KQorICAg
ICAgICByZXR1cm4gY29uZmlnCisKKyAgICBkZWYgX3Byb2Nlc3NvcHQoc2VsZiwgb3B0KToKKyAg
ICAgICAgZm9yIG5hbWUgaW4gb3B0Ll9zaG9ydF9vcHRzICsgb3B0Ll9sb25nX29wdHM6CisgICAg
ICAgICAgICBzZWxmLl9vcHQyZGVzdFtuYW1lXSA9IG9wdC5kZXN0CisKKyAgICAgICAgaWYgaGFz
YXR0cihvcHQsICdkZWZhdWx0JykgYW5kIG9wdC5kZXN0OgorICAgICAgICAgICAgaWYgbm90IGhh
c2F0dHIoc2VsZi5vcHRpb24sIG9wdC5kZXN0KToKKyAgICAgICAgICAgICAgICBzZXRhdHRyKHNl
bGYub3B0aW9uLCBvcHQuZGVzdCwgb3B0LmRlZmF1bHQpCisKKyAgICBAaG9va2ltcGwodHJ5bGFz
dD1UcnVlKQorICAgIGRlZiBweXRlc3RfbG9hZF9pbml0aWFsX2NvbmZ0ZXN0cyhzZWxmLCBlYXJs
eV9jb25maWcpOgorICAgICAgICBzZWxmLnBsdWdpbm1hbmFnZXIuX3NldF9pbml0aWFsX2NvbmZ0
ZXN0cyhlYXJseV9jb25maWcua25vd25fYXJnc19uYW1lc3BhY2UpCisKKyAgICBkZWYgX2luaXRp
bmkoc2VsZiwgYXJncyk6CisgICAgICAgIG5zLCB1bmtub3duX2FyZ3MgPSBzZWxmLl9wYXJzZXIu
cGFyc2Vfa25vd25fYW5kX3Vua25vd25fYXJncyhhcmdzLCBuYW1lc3BhY2U9c2VsZi5vcHRpb24u
Y29weSgpKQorICAgICAgICByID0gZGV0ZXJtaW5lX3NldHVwKG5zLmluaWZpbGVuYW1lLCBucy5m
aWxlX29yX2RpciArIHVua25vd25fYXJncykKKyAgICAgICAgc2VsZi5yb290ZGlyLCBzZWxmLmlu
aWZpbGUsIHNlbGYuaW5pY2ZnID0gcgorICAgICAgICBzZWxmLl9wYXJzZXIuZXh0cmFfaW5mb1sn
cm9vdGRpciddID0gc2VsZi5yb290ZGlyCisgICAgICAgIHNlbGYuX3BhcnNlci5leHRyYV9pbmZv
WydpbmlmaWxlJ10gPSBzZWxmLmluaWZpbGUKKyAgICAgICAgc2VsZi5pbnZvY2F0aW9uX2RpciA9
IHB5LnBhdGgubG9jYWwoKQorICAgICAgICBzZWxmLl9wYXJzZXIuYWRkaW5pKCdhZGRvcHRzJywg
J2V4dHJhIGNvbW1hbmQgbGluZSBvcHRpb25zJywgJ2FyZ3MnKQorICAgICAgICBzZWxmLl9wYXJz
ZXIuYWRkaW5pKCdtaW52ZXJzaW9uJywgJ21pbmltYWxseSByZXF1aXJlZCBweXRlc3QgdmVyc2lv
bicpCisKKyAgICBkZWYgX3ByZXBhcnNlKHNlbGYsIGFyZ3MsIGFkZG9wdHM9VHJ1ZSk6CisgICAg
ICAgIHNlbGYuX2luaXRpbmkoYXJncykKKyAgICAgICAgaWYgYWRkb3B0czoKKyAgICAgICAgICAg
IGFyZ3NbOl0gPSBzaGxleC5zcGxpdChvcy5lbnZpcm9uLmdldCgnUFlURVNUX0FERE9QVFMnLCAn
JykpICsgYXJncworICAgICAgICAgICAgYXJnc1s6XSA9IHNlbGYuZ2V0aW5pKCJhZGRvcHRzIikg
KyBhcmdzCisgICAgICAgIHNlbGYuX2NoZWNrdmVyc2lvbigpCisgICAgICAgIHNlbGYucGx1Z2lu
bWFuYWdlci5jb25zaWRlcl9wcmVwYXJzZShhcmdzKQorICAgICAgICB0cnk6CisgICAgICAgICAg
ICBzZWxmLnBsdWdpbm1hbmFnZXIubG9hZF9zZXR1cHRvb2xzX2VudHJ5cG9pbnRzKCJweXRlc3Qx
MSIpCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciBhcyBlOgorICAgICAgICAgICAgc2VsZi53
YXJuKCJJMiIsICJjb3VsZCBub3QgbG9hZCBzZXR1cHRvb2xzIGVudHJ5IGltcG9ydDogJXMiICUg
KGUsKSkKKyAgICAgICAgc2VsZi5wbHVnaW5tYW5hZ2VyLmNvbnNpZGVyX2VudigpCisgICAgICAg
IHNlbGYua25vd25fYXJnc19uYW1lc3BhY2UgPSBucyA9IHNlbGYuX3BhcnNlci5wYXJzZV9rbm93
bl9hcmdzKGFyZ3MsIG5hbWVzcGFjZT1zZWxmLm9wdGlvbi5jb3B5KCkpCisgICAgICAgIGlmIHNl
bGYua25vd25fYXJnc19uYW1lc3BhY2UuY29uZmN1dGRpciBpcyBOb25lIGFuZCBzZWxmLmluaWZp
bGU6CisgICAgICAgICAgICBjb25mY3V0ZGlyID0gcHkucGF0aC5sb2NhbChzZWxmLmluaWZpbGUp
LmRpcm5hbWUKKyAgICAgICAgICAgIHNlbGYua25vd25fYXJnc19uYW1lc3BhY2UuY29uZmN1dGRp
ciA9IGNvbmZjdXRkaXIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5ob29rLnB5dGVz
dF9sb2FkX2luaXRpYWxfY29uZnRlc3RzKGVhcmx5X2NvbmZpZz1zZWxmLAorICAgICAgICAgICAg
ICAgICAgICBhcmdzPWFyZ3MsIHBhcnNlcj1zZWxmLl9wYXJzZXIpCisgICAgICAgIGV4Y2VwdCBD
b25mdGVzdEltcG9ydEZhaWx1cmU6CisgICAgICAgICAgICBlID0gc3lzLmV4Y19pbmZvKClbMV0K
KyAgICAgICAgICAgIGlmIG5zLmhlbHAgb3IgbnMudmVyc2lvbjoKKyAgICAgICAgICAgICAgICAj
IHdlIGRvbid0IHdhbnQgdG8gcHJldmVudCAtLWhlbHAvLS12ZXJzaW9uIHRvIHdvcmsKKyAgICAg
ICAgICAgICAgICAjIHNvIGp1c3QgbGV0IGlzIHBhc3MgYW5kIHByaW50IGEgd2FybmluZyBhdCB0
aGUgZW5kCisgICAgICAgICAgICAgICAgc2VsZi5fd2FybigiY291bGQgbm90IGxvYWQgaW5pdGlh
bCBjb25mdGVzdHMgKCVzKVxuIiAlIGUucGF0aCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICAgICAgcmFpc2UKKworICAgIGRlZiBfY2hlY2t2ZXJzaW9uKHNlbGYpOgorICAgICAgICBp
bXBvcnQgcHl0ZXN0CisgICAgICAgIG1pbnZlciA9IHNlbGYuaW5pY2ZnLmdldCgnbWludmVyc2lv
bicsIE5vbmUpCisgICAgICAgIGlmIG1pbnZlcjoKKyAgICAgICAgICAgIHZlciA9IG1pbnZlci5z
cGxpdCgiLiIpCisgICAgICAgICAgICBteXZlciA9IHB5dGVzdC5fX3ZlcnNpb25fXy5zcGxpdCgi
LiIpCisgICAgICAgICAgICBpZiBteXZlciA8IHZlcjoKKyAgICAgICAgICAgICAgICByYWlzZSBw
eXRlc3QuVXNhZ2VFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgIiVzOiVkOiByZXF1aXJlcyBw
eXRlc3QtJXMsIGFjdHVhbCBweXRlc3QtJXMnIiAlKAorICAgICAgICAgICAgICAgICAgICBzZWxm
LmluaWNmZy5jb25maWcucGF0aCwgc2VsZi5pbmljZmcubGluZW9mKCdtaW52ZXJzaW9uJyksCisg
ICAgICAgICAgICAgICAgICAgIG1pbnZlciwgcHl0ZXN0Ll9fdmVyc2lvbl9fKSkKKworICAgIGRl
ZiBwYXJzZShzZWxmLCBhcmdzLCBhZGRvcHRzPVRydWUpOgorICAgICAgICAjIHBhcnNlIGdpdmVu
IGNtZGxpbmUgYXJndW1lbnRzIGludG8gdGhpcyBjb25maWcgb2JqZWN0LgorICAgICAgICBhc3Nl
cnQgbm90IGhhc2F0dHIoc2VsZiwgJ2FyZ3MnKSwgKAorICAgICAgICAgICAgICAgICJjYW4gb25s
eSBwYXJzZSBjbWRsaW5lIGFyZ3MgYXQgbW9zdCBvbmNlIHBlciBDb25maWcgb2JqZWN0IikKKyAg
ICAgICAgc2VsZi5fb3JpZ2FyZ3MgPSBhcmdzCisgICAgICAgIHNlbGYuaG9vay5weXRlc3RfYWRk
aG9va3MuY2FsbF9oaXN0b3JpYygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBr
d2FyZ3M9ZGljdChwbHVnaW5tYW5hZ2VyPXNlbGYucGx1Z2lubWFuYWdlcikpCisgICAgICAgIHNl
bGYuX3ByZXBhcnNlKGFyZ3MsIGFkZG9wdHM9YWRkb3B0cykKKyAgICAgICAgIyBYWFggZGVwcmVj
YXRlZCBob29rOgorICAgICAgICBzZWxmLmhvb2sucHl0ZXN0X2NtZGxpbmVfcHJlcGFyc2UoY29u
ZmlnPXNlbGYsIGFyZ3M9YXJncykKKyAgICAgICAgYXJncyA9IHNlbGYuX3BhcnNlci5wYXJzZV9z
ZXRvcHRpb24oYXJncywgc2VsZi5vcHRpb24sIG5hbWVzcGFjZT1zZWxmLm9wdGlvbikKKyAgICAg
ICAgaWYgbm90IGFyZ3M6CisgICAgICAgICAgICBjd2QgPSBvcy5nZXRjd2QoKQorICAgICAgICAg
ICAgaWYgY3dkID09IHNlbGYucm9vdGRpcjoKKyAgICAgICAgICAgICAgICBhcmdzID0gc2VsZi5n
ZXRpbmkoJ3Rlc3RwYXRocycpCisgICAgICAgICAgICBpZiBub3QgYXJnczoKKyAgICAgICAgICAg
ICAgICBhcmdzID0gW2N3ZF0KKyAgICAgICAgc2VsZi5hcmdzID0gYXJncworCisgICAgZGVmIGFk
ZGluaXZhbHVlX2xpbmUoc2VsZiwgbmFtZSwgbGluZSk6CisgICAgICAgICIiIiBhZGQgYSBsaW5l
IHRvIGFuIGluaS1maWxlIG9wdGlvbi4gVGhlIG9wdGlvbiBtdXN0IGhhdmUgYmVlbgorICAgICAg
ICBkZWNsYXJlZCBidXQgbWlnaHQgbm90IHlldCBiZSBzZXQgaW4gd2hpY2ggY2FzZSB0aGUgbGlu
ZSBiZWNvbWVzIHRoZQorICAgICAgICB0aGUgZmlyc3QgbGluZSBpbiBpdHMgdmFsdWUuICIiIgor
ICAgICAgICB4ID0gc2VsZi5nZXRpbmkobmFtZSkKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2Uo
eCwgbGlzdCkKKyAgICAgICAgeC5hcHBlbmQobGluZSkgIyBtb2RpZmllcyB0aGUgY2FjaGVkIGxp
c3QgaW5saW5lCisKKyAgICBkZWYgZ2V0aW5pKHNlbGYsIG5hbWUpOgorICAgICAgICAiIiIgcmV0
dXJuIGNvbmZpZ3VyYXRpb24gdmFsdWUgZnJvbSBhbiA6cmVmOmBpbmkgZmlsZSA8aW5pZmlsZXM+
YC4gSWYgdGhlCisgICAgICAgIHNwZWNpZmllZCBuYW1lIGhhc24ndCBiZWVuIHJlZ2lzdGVyZWQg
dGhyb3VnaCBhIHByaW9yCisgICAgICAgIDpweTpmdW5jOmBwYXJzZXIuYWRkaW5pIDxweXRlc3Qu
Y29uZmlnLlBhcnNlci5hZGRpbmk+YAorICAgICAgICBjYWxsICh1c3VhbGx5IGZyb20gYSBwbHVn
aW4pLCBhIFZhbHVlRXJyb3IgaXMgcmFpc2VkLiAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgcmV0dXJuIHNlbGYuX2luaWNhY2hlW25hbWVdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoK
KyAgICAgICAgICAgIHNlbGYuX2luaWNhY2hlW25hbWVdID0gdmFsID0gc2VsZi5fZ2V0aW5pKG5h
bWUpCisgICAgICAgICAgICByZXR1cm4gdmFsCisKKyAgICBkZWYgX2dldGluaShzZWxmLCBuYW1l
KToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGVzY3JpcHRpb24sIHR5cGUsIGRlZmF1bHQg
PSBzZWxmLl9wYXJzZXIuX2luaWRpY3RbbmFtZV0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgor
ICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5rbm93biBjb25maWd1cmF0aW9uIHZhbHVl
OiAlciIgJShuYW1lLCkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHZhbHVlID0gc2VsZi5p
bmljZmdbbmFtZV0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgaWYgZGVm
YXVsdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdAorICAgICAg
ICAgICAgaWYgdHlwZSBpcyBOb25lOgorICAgICAgICAgICAgICAgIHJldHVybiAnJworICAgICAg
ICAgICAgcmV0dXJuIFtdCisgICAgICAgIGlmIHR5cGUgPT0gInBhdGhsaXN0IjoKKyAgICAgICAg
ICAgIGRwID0gcHkucGF0aC5sb2NhbChzZWxmLmluaWNmZy5jb25maWcucGF0aCkuZGlycGF0aCgp
CisgICAgICAgICAgICBsID0gW10KKyAgICAgICAgICAgIGZvciByZWxwYXRoIGluIHNobGV4LnNw
bGl0KHZhbHVlKToKKyAgICAgICAgICAgICAgICBsLmFwcGVuZChkcC5qb2luKHJlbHBhdGgsIGFi
cz1UcnVlKSkKKyAgICAgICAgICAgIHJldHVybiBsCisgICAgICAgIGVsaWYgdHlwZSA9PSAiYXJn
cyI6CisgICAgICAgICAgICByZXR1cm4gc2hsZXguc3BsaXQodmFsdWUpCisgICAgICAgIGVsaWYg
dHlwZSA9PSAibGluZWxpc3QiOgorICAgICAgICAgICAgcmV0dXJuIFt0IGZvciB0IGluIG1hcChs
YW1iZGEgeDogeC5zdHJpcCgpLCB2YWx1ZS5zcGxpdCgiXG4iKSkgaWYgdF0KKyAgICAgICAgZWxp
ZiB0eXBlID09ICJib29sIjoKKyAgICAgICAgICAgIHJldHVybiBib29sKF9zdHJ0b2Jvb2wodmFs
dWUuc3RyaXAoKSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhc3NlcnQgdHlwZSBpcyBO
b25lCisgICAgICAgICAgICByZXR1cm4gdmFsdWUKKworICAgIGRlZiBfZ2V0Y29uZnRlc3RfcGF0
aGxpc3Qoc2VsZiwgbmFtZSwgcGF0aCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG1vZCwg
cmVscm9vdHMgPSBzZWxmLnBsdWdpbm1hbmFnZXIuX3JnZXRfd2l0aF9jb25mbW9kKG5hbWUsIHBh
dGgpCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisg
ICAgICAgIG1vZHBhdGggPSBweS5wYXRoLmxvY2FsKG1vZC5fX2ZpbGVfXykuZGlycGF0aCgpCisg
ICAgICAgIGwgPSBbXQorICAgICAgICBmb3IgcmVscm9vdCBpbiByZWxyb290czoKKyAgICAgICAg
ICAgIGlmIG5vdCBpc2luc3RhbmNlKHJlbHJvb3QsIHB5LnBhdGgubG9jYWwpOgorICAgICAgICAg
ICAgICAgIHJlbHJvb3QgPSByZWxyb290LnJlcGxhY2UoIi8iLCBweS5wYXRoLmxvY2FsLnNlcCkK
KyAgICAgICAgICAgICAgICByZWxyb290ID0gbW9kcGF0aC5qb2luKHJlbHJvb3QsIGFicz1UcnVl
KQorICAgICAgICAgICAgbC5hcHBlbmQocmVscm9vdCkKKyAgICAgICAgcmV0dXJuIGwKKworICAg
IGRlZiBnZXRvcHRpb24oc2VsZiwgbmFtZSwgZGVmYXVsdD1ub3RzZXQsIHNraXA9RmFsc2UpOgor
ICAgICAgICAiIiIgcmV0dXJuIGNvbW1hbmQgbGluZSBvcHRpb24gdmFsdWUuCisKKyAgICAgICAg
OmFyZyBuYW1lOiBuYW1lIG9mIHRoZSBvcHRpb24uICBZb3UgbWF5IGFsc28gc3BlY2lmeQorICAg
ICAgICAgICAgdGhlIGxpdGVyYWwgYGAtLU9QVGBgIG9wdGlvbiBpbnN0ZWFkIG9mIHRoZSAiZGVz
dCIgb3B0aW9uIG5hbWUuCisgICAgICAgIDphcmcgZGVmYXVsdDogZGVmYXVsdCB2YWx1ZSBpZiBu
byBvcHRpb24gb2YgdGhhdCBuYW1lIGV4aXN0cy4KKyAgICAgICAgOmFyZyBza2lwOiBpZiBUcnVl
IHJhaXNlIHB5dGVzdC5za2lwIGlmIG9wdGlvbiBkb2VzIG5vdCBleGlzdHMKKyAgICAgICAgICAg
IG9yIGhhcyBhIE5vbmUgdmFsdWUuCisgICAgICAgICIiIgorICAgICAgICBuYW1lID0gc2VsZi5f
b3B0MmRlc3QuZ2V0KG5hbWUsIG5hbWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHZhbCA9
IGdldGF0dHIoc2VsZi5vcHRpb24sIG5hbWUpCisgICAgICAgICAgICBpZiB2YWwgaXMgTm9uZSBh
bmQgc2tpcDoKKyAgICAgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcihuYW1lKQorICAg
ICAgICAgICAgcmV0dXJuIHZhbAorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAg
ICAgICAgICBpZiBkZWZhdWx0IGlzIG5vdCBub3RzZXQ6CisgICAgICAgICAgICAgICAgcmV0dXJu
IGRlZmF1bHQKKyAgICAgICAgICAgIGlmIHNraXA6CisgICAgICAgICAgICAgICAgaW1wb3J0IHB5
dGVzdAorICAgICAgICAgICAgICAgIHB5dGVzdC5za2lwKCJubyAlciBvcHRpb24gZm91bmQiICUo
bmFtZSwpKQorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibm8gb3B0aW9uIG5hbWVkICVy
IiAlIChuYW1lLCkpCisKKyAgICBkZWYgZ2V0dmFsdWUoc2VsZiwgbmFtZSwgcGF0aD1Ob25lKToK
KyAgICAgICAgIiIiIChkZXByZWNhdGVkLCB1c2UgZ2V0b3B0aW9uKCkpICIiIgorICAgICAgICBy
ZXR1cm4gc2VsZi5nZXRvcHRpb24obmFtZSkKKworICAgIGRlZiBnZXR2YWx1ZW9yc2tpcChzZWxm
LCBuYW1lLCBwYXRoPU5vbmUpOgorICAgICAgICAiIiIgKGRlcHJlY2F0ZWQsIHVzZSBnZXRvcHRp
b24oc2tpcD1UcnVlKSkgIiIiCisgICAgICAgIHJldHVybiBzZWxmLmdldG9wdGlvbihuYW1lLCBz
a2lwPVRydWUpCisKK2RlZiBleGlzdHMocGF0aCwgaWdub3JlPUVudmlyb25tZW50RXJyb3IpOgor
ICAgIHRyeToKKyAgICAgICAgcmV0dXJuIHBhdGguY2hlY2soKQorICAgIGV4Y2VwdCBpZ25vcmU6
CisgICAgICAgIHJldHVybiBGYWxzZQorCitkZWYgZ2V0Y2ZnKGFyZ3MsIGluaWJhc2VuYW1lcyk6
CisgICAgYXJncyA9IFt4IGZvciB4IGluIGFyZ3MgaWYgbm90IHN0cih4KS5zdGFydHN3aXRoKCIt
IildCisgICAgaWYgbm90IGFyZ3M6CisgICAgICAgIGFyZ3MgPSBbcHkucGF0aC5sb2NhbCgpXQor
ICAgIGZvciBhcmcgaW4gYXJnczoKKyAgICAgICAgYXJnID0gcHkucGF0aC5sb2NhbChhcmcpCisg
ICAgICAgIGZvciBiYXNlIGluIGFyZy5wYXJ0cyhyZXZlcnNlPVRydWUpOgorICAgICAgICAgICAg
Zm9yIGluaWJhc2VuYW1lIGluIGluaWJhc2VuYW1lczoKKyAgICAgICAgICAgICAgICBwID0gYmFz
ZS5qb2luKGluaWJhc2VuYW1lKQorICAgICAgICAgICAgICAgIGlmIGV4aXN0cyhwKToKKyAgICAg
ICAgICAgICAgICAgICAgaW5pY29uZmlnID0gcHkuaW5pY29uZmlnLkluaUNvbmZpZyhwKQorICAg
ICAgICAgICAgICAgICAgICBpZiAncHl0ZXN0JyBpbiBpbmljb25maWcuc2VjdGlvbnM6CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmFzZSwgcCwgaW5pY29uZmlnWydweXRlc3QnXQor
ICAgICAgICAgICAgICAgICAgICBlbGlmIGluaWJhc2VuYW1lID09ICJweXRlc3QuaW5pIjoKKyAg
ICAgICAgICAgICAgICAgICAgICAgICMgYWxsb3dlZCB0byBiZSBlbXB0eQorICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGJhc2UsIHAsIHt9CisgICAgcmV0dXJuIE5vbmUsIE5vbmUsIE5v
bmUKKworCitkZWYgZ2V0X2NvbW1vbl9hbmNlc3RvcihhcmdzKToKKyAgICAjIGFyZ3MgYXJlIHdo
YXQgd2UgZ2V0IGFmdGVyIGVhcmx5IGNvbW1hbmQgbGluZSBwYXJzaW5nICh1c3VhbGx5CisgICAg
IyBzdHJpbmdzLCBidXQgY2FuIGJlIHB5LnBhdGgubG9jYWwgb2JqZWN0cyBhcyB3ZWxsKQorICAg
IGNvbW1vbl9hbmNlc3RvciA9IE5vbmUKKyAgICBmb3IgYXJnIGluIGFyZ3M6CisgICAgICAgIGlm
IHN0cihhcmcpWzBdID09ICItIjoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIHAgPSBw
eS5wYXRoLmxvY2FsKGFyZykKKyAgICAgICAgaWYgY29tbW9uX2FuY2VzdG9yIGlzIE5vbmU6Cisg
ICAgICAgICAgICBjb21tb25fYW5jZXN0b3IgPSBwCisgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICBpZiBwLnJlbHRvKGNvbW1vbl9hbmNlc3Rvcikgb3IgcCA9PSBjb21tb25fYW5jZXN0b3I6Cisg
ICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGVsaWYgY29tbW9uX2FuY2VzdG9y
LnJlbHRvKHApOgorICAgICAgICAgICAgICAgIGNvbW1vbl9hbmNlc3RvciA9IHAKKyAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2hhcmVkID0gcC5jb21tb24oY29tbW9uX2FuY2Vz
dG9yKQorICAgICAgICAgICAgICAgIGlmIHNoYXJlZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAg
ICAgICAgICAgY29tbW9uX2FuY2VzdG9yID0gc2hhcmVkCisgICAgaWYgY29tbW9uX2FuY2VzdG9y
IGlzIE5vbmU6CisgICAgICAgIGNvbW1vbl9hbmNlc3RvciA9IHB5LnBhdGgubG9jYWwoKQorICAg
IGVsaWYgbm90IGNvbW1vbl9hbmNlc3Rvci5pc2RpcigpOgorICAgICAgICBjb21tb25fYW5jZXN0
b3IgPSBjb21tb25fYW5jZXN0b3IuZGlycGF0aCgpCisgICAgcmV0dXJuIGNvbW1vbl9hbmNlc3Rv
cgorCisKK2RlZiBkZXRlcm1pbmVfc2V0dXAoaW5pZmlsZSwgYXJncyk6CisgICAgaWYgaW5pZmls
ZToKKyAgICAgICAgaW5pY29uZmlnID0gcHkuaW5pY29uZmlnLkluaUNvbmZpZyhpbmlmaWxlKQor
ICAgICAgICB0cnk6CisgICAgICAgICAgICBpbmljZmcgPSBpbmljb25maWdbInB5dGVzdCJdCisg
ICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIGluaWNmZyA9IE5vbmUKKyAgICAg
ICAgcm9vdGRpciA9IGdldF9jb21tb25fYW5jZXN0b3IoYXJncykKKyAgICBlbHNlOgorICAgICAg
ICBhbmNlc3RvciA9IGdldF9jb21tb25fYW5jZXN0b3IoYXJncykKKyAgICAgICAgcm9vdGRpciwg
aW5pZmlsZSwgaW5pY2ZnID0gZ2V0Y2ZnKAorICAgICAgICAgICAgW2FuY2VzdG9yXSwgWyJweXRl
c3QuaW5pIiwgInRveC5pbmkiLCAic2V0dXAuY2ZnIl0pCisgICAgICAgIGlmIHJvb3RkaXIgaXMg
Tm9uZToKKyAgICAgICAgICAgIGZvciByb290ZGlyIGluIGFuY2VzdG9yLnBhcnRzKHJldmVyc2U9
VHJ1ZSk6CisgICAgICAgICAgICAgICAgaWYgcm9vdGRpci5qb2luKCJzZXR1cC5weSIpLmV4aXN0
cygpOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgICAgICByb290ZGlyID0gYW5jZXN0b3IKKyAgICByZXR1cm4gcm9vdGRpciwgaW5pZmls
ZSwgaW5pY2ZnIG9yIHt9CisKKworZGVmIHNldG5zKG9iaiwgZGljKToKKyAgICBpbXBvcnQgcHl0
ZXN0CisgICAgZm9yIG5hbWUsIHZhbHVlIGluIGRpYy5pdGVtcygpOgorICAgICAgICBpZiBpc2lu
c3RhbmNlKHZhbHVlLCBkaWN0KToKKyAgICAgICAgICAgIG1vZCA9IGdldGF0dHIob2JqLCBuYW1l
LCBOb25lKQorICAgICAgICAgICAgaWYgbW9kIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgbW9k
bmFtZSA9ICJweXRlc3QuJXMiICUgbmFtZQorICAgICAgICAgICAgICAgIG1vZCA9IHR5cGVzLk1v
ZHVsZVR5cGUobW9kbmFtZSkKKyAgICAgICAgICAgICAgICBzeXMubW9kdWxlc1ttb2RuYW1lXSA9
IG1vZAorICAgICAgICAgICAgICAgIG1vZC5fX2FsbF9fID0gW10KKyAgICAgICAgICAgICAgICBz
ZXRhdHRyKG9iaiwgbmFtZSwgbW9kKQorICAgICAgICAgICAgb2JqLl9fYWxsX18uYXBwZW5kKG5h
bWUpCisgICAgICAgICAgICBzZXRucyhtb2QsIHZhbHVlKQorICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgc2V0YXR0cihvYmosIG5hbWUsIHZhbHVlKQorICAgICAgICAgICAgb2JqLl9fYWxsX18u
YXBwZW5kKG5hbWUpCisgICAgICAgICAgICAjaWYgb2JqICE9IHB5dGVzdDoKKyAgICAgICAgICAg
ICMgICAgcHl0ZXN0Ll9fYWxsX18uYXBwZW5kKG5hbWUpCisgICAgICAgICAgICBzZXRhdHRyKHB5
dGVzdCwgbmFtZSwgdmFsdWUpCisKKworZGVmIGNyZWF0ZV90ZXJtaW5hbF93cml0ZXIoY29uZmln
LCAqYXJncywgKiprd2FyZ3MpOgorICAgICIiIkNyZWF0ZSBhIFRlcm1pbmFsV3JpdGVyIGluc3Rh
bmNlIGNvbmZpZ3VyZWQgYWNjb3JkaW5nIHRvIHRoZSBvcHRpb25zCisgICAgaW4gdGhlIGNvbmZp
ZyBvYmplY3QuIEV2ZXJ5IGNvZGUgd2hpY2ggcmVxdWlyZXMgYSBUZXJtaW5hbFdyaXRlciBvYmpl
Y3QKKyAgICBhbmQgaGFzIGFjY2VzcyB0byBhIGNvbmZpZyBvYmplY3Qgc2hvdWxkIHVzZSB0aGlz
IGZ1bmN0aW9uLgorICAgICIiIgorICAgIHR3ID0gcHkuaW8uVGVybWluYWxXcml0ZXIoKmFyZ3Ms
ICoqa3dhcmdzKQorICAgIGlmIGNvbmZpZy5vcHRpb24uY29sb3IgPT0gJ3llcyc6CisgICAgICAg
IHR3Lmhhc21hcmt1cCA9IFRydWUKKyAgICBpZiBjb25maWcub3B0aW9uLmNvbG9yID09ICdubyc6
CisgICAgICAgIHR3Lmhhc21hcmt1cCA9IEZhbHNlCisgICAgcmV0dXJuIHR3CisKKworZGVmIF9z
dHJ0b2Jvb2wodmFsKToKKyAgICAiIiJDb252ZXJ0IGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9m
IHRydXRoIHRvIHRydWUgKDEpIG9yIGZhbHNlICgwKS4KKworICAgIFRydWUgdmFsdWVzIGFyZSAn
eScsICd5ZXMnLCAndCcsICd0cnVlJywgJ29uJywgYW5kICcxJzsgZmFsc2UgdmFsdWVzCisgICAg
YXJlICduJywgJ25vJywgJ2YnLCAnZmFsc2UnLCAnb2ZmJywgYW5kICcwJy4gIFJhaXNlcyBWYWx1
ZUVycm9yIGlmCisgICAgJ3ZhbCcgaXMgYW55dGhpbmcgZWxzZS4KKworICAgIC4uIG5vdGU6OiBj
b3BpZWQgZnJvbSBkaXN0dXRpbHMudXRpbAorICAgICIiIgorICAgIHZhbCA9IHZhbC5sb3dlcigp
CisgICAgaWYgdmFsIGluICgneScsICd5ZXMnLCAndCcsICd0cnVlJywgJ29uJywgJzEnKToKKyAg
ICAgICAgcmV0dXJuIDEKKyAgICBlbGlmIHZhbCBpbiAoJ24nLCAnbm8nLCAnZicsICdmYWxzZScs
ICdvZmYnLCAnMCcpOgorICAgICAgICByZXR1cm4gMAorICAgIGVsc2U6CisgICAgICAgIHJhaXNl
IFZhbHVlRXJyb3IoImludmFsaWQgdHJ1dGggdmFsdWUgJXIiICUgKHZhbCwpKQpkaWZmIC0tZ2l0
IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L2RvY3Rl
c3QucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3Qv
ZG9jdGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYTU3Zjdh
NDk0OWUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9v
bHMvcHl0ZXN0L19weXRlc3QvZG9jdGVzdC5weQpAQCAtMCwwICsxLDI5MCBAQAorIiIiIGRpc2Nv
dmVyIGFuZCBydW4gZG9jdGVzdHMgaW4gbW9kdWxlcyBhbmQgdGVzdCBmaWxlcy4iIiIKK2Zyb20g
X19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CisKK2ltcG9ydCB0cmFjZWJhY2sKKwor
aW1wb3J0IHB5dGVzdAorZnJvbSBfcHl0ZXN0Ll9jb2RlLmNvZGUgaW1wb3J0IFRlcm1pbmFsUmVw
ciwgUmVwckZpbGVMb2NhdGlvbiwgRXhjZXB0aW9uSW5mbworZnJvbSBfcHl0ZXN0LnB5dGhvbiBp
bXBvcnQgRml4dHVyZVJlcXVlc3QKKworCisKK2RlZiBweXRlc3RfYWRkb3B0aW9uKHBhcnNlcik6
CisgICAgcGFyc2VyLmFkZGluaSgnZG9jdGVzdF9vcHRpb25mbGFncycsICdvcHRpb24gZmxhZ3Mg
Zm9yIGRvY3Rlc3RzJywKKyAgICAgICAgdHlwZT0iYXJncyIsIGRlZmF1bHQ9WyJFTExJUFNJUyJd
KQorICAgIGdyb3VwID0gcGFyc2VyLmdldGdyb3VwKCJjb2xsZWN0IikKKyAgICBncm91cC5hZGRv
cHRpb24oIi0tZG9jdGVzdC1tb2R1bGVzIiwKKyAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwg
ZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgaGVscD0icnVuIGRvY3Rlc3RzIGluIGFsbCAucHkgbW9k
dWxlcyIsCisgICAgICAgIGRlc3Q9ImRvY3Rlc3Rtb2R1bGVzIikKKyAgICBncm91cC5hZGRvcHRp
b24oIi0tZG9jdGVzdC1nbG9iIiwKKyAgICAgICAgYWN0aW9uPSJhcHBlbmQiLCBkZWZhdWx0PVtd
LCBtZXRhdmFyPSJwYXQiLAorICAgICAgICBoZWxwPSJkb2N0ZXN0cyBmaWxlIG1hdGNoaW5nIHBh
dHRlcm4sIGRlZmF1bHQ6IHRlc3QqLnR4dCIsCisgICAgICAgIGRlc3Q9ImRvY3Rlc3RnbG9iIikK
KyAgICBncm91cC5hZGRvcHRpb24oIi0tZG9jdGVzdC1pZ25vcmUtaW1wb3J0LWVycm9ycyIsCisg
ICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgIGhlbHA9
Imlnbm9yZSBkb2N0ZXN0IEltcG9ydEVycm9ycyIsCisgICAgICAgIGRlc3Q9ImRvY3Rlc3RfaWdu
b3JlX2ltcG9ydF9lcnJvcnMiKQorCisKK2RlZiBweXRlc3RfY29sbGVjdF9maWxlKHBhdGgsIHBh
cmVudCk6CisgICAgY29uZmlnID0gcGFyZW50LmNvbmZpZworICAgIGlmIHBhdGguZXh0ID09ICIu
cHkiOgorICAgICAgICBpZiBjb25maWcub3B0aW9uLmRvY3Rlc3Rtb2R1bGVzOgorICAgICAgICAg
ICAgcmV0dXJuIERvY3Rlc3RNb2R1bGUocGF0aCwgcGFyZW50KQorICAgIGVsaWYgX2lzX2RvY3Rl
c3QoY29uZmlnLCBwYXRoLCBwYXJlbnQpOgorICAgICAgICByZXR1cm4gRG9jdGVzdFRleHRmaWxl
KHBhdGgsIHBhcmVudCkKKworCitkZWYgX2lzX2RvY3Rlc3QoY29uZmlnLCBwYXRoLCBwYXJlbnQp
OgorICAgIGlmIHBhdGguZXh0IGluICgnLnR4dCcsICcucnN0JykgYW5kIHBhcmVudC5zZXNzaW9u
LmlzaW5pdHBhdGgocGF0aCk6CisgICAgICAgIHJldHVybiBUcnVlCisgICAgZ2xvYnMgPSBjb25m
aWcuZ2V0b3B0aW9uKCJkb2N0ZXN0Z2xvYiIpIG9yIFsndGVzdCoudHh0J10KKyAgICBmb3IgZ2xv
YiBpbiBnbG9iczoKKyAgICAgICAgaWYgcGF0aC5jaGVjayhmbm1hdGNoPWdsb2IpOgorICAgICAg
ICAgICAgcmV0dXJuIFRydWUKKyAgICByZXR1cm4gRmFsc2UKKworCitjbGFzcyBSZXByRmFpbERv
Y3Rlc3QoVGVybWluYWxSZXByKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXBybG9jYXRp
b24sIGxpbmVzKToKKyAgICAgICAgc2VsZi5yZXBybG9jYXRpb24gPSByZXBybG9jYXRpb24KKyAg
ICAgICAgc2VsZi5saW5lcyA9IGxpbmVzCisKKyAgICBkZWYgdG90ZXJtaW5hbChzZWxmLCB0dyk6
CisgICAgICAgIGZvciBsaW5lIGluIHNlbGYubGluZXM6CisgICAgICAgICAgICB0dy5saW5lKGxp
bmUpCisgICAgICAgIHNlbGYucmVwcmxvY2F0aW9uLnRvdGVybWluYWwodHcpCisKKworY2xhc3Mg
RG9jdGVzdEl0ZW0ocHl0ZXN0Lkl0ZW0pOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUs
IHBhcmVudCwgcnVubmVyPU5vbmUsIGR0ZXN0PU5vbmUpOgorICAgICAgICBzdXBlcihEb2N0ZXN0
SXRlbSwgc2VsZikuX19pbml0X18obmFtZSwgcGFyZW50KQorICAgICAgICBzZWxmLnJ1bm5lciA9
IHJ1bm5lcgorICAgICAgICBzZWxmLmR0ZXN0ID0gZHRlc3QKKyAgICAgICAgc2VsZi5vYmogPSBO
b25lCisgICAgICAgIHNlbGYuZml4dHVyZV9yZXF1ZXN0ID0gTm9uZQorCisgICAgZGVmIHNldHVw
KHNlbGYpOgorICAgICAgICBpZiBzZWxmLmR0ZXN0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAg
c2VsZi5maXh0dXJlX3JlcXVlc3QgPSBfc2V0dXBfZml4dHVyZXMoc2VsZikKKyAgICAgICAgICAg
IGdsb2JzID0gZGljdChnZXRmaXh0dXJlPXNlbGYuZml4dHVyZV9yZXF1ZXN0LmdldGZ1bmNhcmd2
YWx1ZSkKKyAgICAgICAgICAgIHNlbGYuZHRlc3QuZ2xvYnMudXBkYXRlKGdsb2JzKQorCisgICAg
ZGVmIHJ1bnRlc3Qoc2VsZik6CisgICAgICAgIF9jaGVja19hbGxfc2tpcHBlZChzZWxmLmR0ZXN0
KQorICAgICAgICBzZWxmLnJ1bm5lci5ydW4oc2VsZi5kdGVzdCkKKworICAgIGRlZiByZXByX2Zh
aWx1cmUoc2VsZiwgZXhjaW5mbyk6CisgICAgICAgIGltcG9ydCBkb2N0ZXN0CisgICAgICAgIGlm
IGV4Y2luZm8uZXJyaXNpbnN0YW5jZSgoZG9jdGVzdC5Eb2NUZXN0RmFpbHVyZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N0ZXN0LlVuZXhwZWN0ZWRFeGNlcHRpb24pKToK
KyAgICAgICAgICAgIGRvY3Rlc3RmYWlsdXJlID0gZXhjaW5mby52YWx1ZQorICAgICAgICAgICAg
ZXhhbXBsZSA9IGRvY3Rlc3RmYWlsdXJlLmV4YW1wbGUKKyAgICAgICAgICAgIHRlc3QgPSBkb2N0
ZXN0ZmFpbHVyZS50ZXN0CisgICAgICAgICAgICBmaWxlbmFtZSA9IHRlc3QuZmlsZW5hbWUKKyAg
ICAgICAgICAgIGlmIHRlc3QubGluZW5vIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgbGluZW5v
ID0gTm9uZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsaW5lbm8gPSB0ZXN0
LmxpbmVubyArIGV4YW1wbGUubGluZW5vICsgMQorICAgICAgICAgICAgbWVzc2FnZSA9IGV4Y2lu
Zm8udHlwZS5fX25hbWVfXworICAgICAgICAgICAgcmVwcmxvY2F0aW9uID0gUmVwckZpbGVMb2Nh
dGlvbihmaWxlbmFtZSwgbGluZW5vLCBtZXNzYWdlKQorICAgICAgICAgICAgY2hlY2tlciA9IF9n
ZXRfY2hlY2tlcigpCisgICAgICAgICAgICBSRVBPUlRfVURJRkYgPSBkb2N0ZXN0LlJFUE9SVF9V
RElGRgorICAgICAgICAgICAgaWYgbGluZW5vIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAg
IGxpbmVzID0gZG9jdGVzdGZhaWx1cmUudGVzdC5kb2NzdHJpbmcuc3BsaXRsaW5lcyhGYWxzZSkK
KyAgICAgICAgICAgICAgICAjIGFkZCBsaW5lIG51bWJlcnMgdG8gdGhlIGxlZnQgb2YgdGhlIGVy
cm9yIG1lc3NhZ2UKKyAgICAgICAgICAgICAgICBsaW5lcyA9IFsiJTAzZCAlcyIgJSAoaSArIHRl
c3QubGluZW5vICsgMSwgeCkKKyAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGksIHgpIGlu
IGVudW1lcmF0ZShsaW5lcyldCisgICAgICAgICAgICAgICAgIyB0cmltIGRvY3N0cmluZyBlcnJv
ciBsaW5lcyB0byAxMAorICAgICAgICAgICAgICAgIGxpbmVzID0gbGluZXNbZXhhbXBsZS5saW5l
bm8gLSA5OmV4YW1wbGUubGluZW5vICsgMV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICAgICAgbGluZXMgPSBbJ0VYQU1QTEUgTE9DQVRJT04gVU5LTk9XTiwgbm90IHNob3dpbmcgYWxs
IHRlc3RzIG9mIHRoYXQgZXhhbXBsZSddCisgICAgICAgICAgICAgICAgaW5kZW50ID0gJz4+PicK
KyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBleGFtcGxlLnNvdXJjZS5zcGxpdGxpbmVzKCk6
CisgICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnPz8/ICVzICVzJyAlIChpbmRlbnQs
IGxpbmUpKQorICAgICAgICAgICAgICAgICAgICBpbmRlbnQgPSAnLi4uJworICAgICAgICAgICAg
aWYgZXhjaW5mby5lcnJpc2luc3RhbmNlKGRvY3Rlc3QuRG9jVGVzdEZhaWx1cmUpOgorICAgICAg
ICAgICAgICAgIGxpbmVzICs9IGNoZWNrZXIub3V0cHV0X2RpZmZlcmVuY2UoZXhhbXBsZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGRvY3Rlc3RmYWlsdXJlLmdvdCwgUkVQT1JUX1VESUZGKS5z
cGxpdCgiXG4iKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpbm5lcl9leGNp
bmZvID0gRXhjZXB0aW9uSW5mbyhleGNpbmZvLnZhbHVlLmV4Y19pbmZvKQorICAgICAgICAgICAg
ICAgIGxpbmVzICs9IFsiVU5FWFBFQ1RFRCBFWENFUFRJT046ICVzIiAlCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVwcihpbm5lcl9leGNpbmZvLnZhbHVlKV0KKyAgICAgICAgICAgICAg
ICBsaW5lcyArPSB0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbigqZXhjaW5mby52YWx1ZS5leGNf
aW5mbykKKyAgICAgICAgICAgIHJldHVybiBSZXByRmFpbERvY3Rlc3QocmVwcmxvY2F0aW9uLCBs
aW5lcykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzdXBlcihEb2N0ZXN0SXRl
bSwgc2VsZikucmVwcl9mYWlsdXJlKGV4Y2luZm8pCisKKyAgICBkZWYgcmVwb3J0aW5mbyhzZWxm
KToKKyAgICAgICAgcmV0dXJuIHNlbGYuZnNwYXRoLCBOb25lLCAiW2RvY3Rlc3RdICVzIiAlIHNl
bGYubmFtZQorCisKK2RlZiBfZ2V0X2ZsYWdfbG9va3VwKCk6CisgICAgaW1wb3J0IGRvY3Rlc3QK
KyAgICByZXR1cm4gZGljdChET05UX0FDQ0VQVF9UUlVFX0ZPUl8xPWRvY3Rlc3QuRE9OVF9BQ0NF
UFRfVFJVRV9GT1JfMSwKKyAgICAgICAgICAgICAgICBET05UX0FDQ0VQVF9CTEFOS0xJTkU9ZG9j
dGVzdC5ET05UX0FDQ0VQVF9CTEFOS0xJTkUsCisgICAgICAgICAgICAgICAgTk9STUFMSVpFX1dI
SVRFU1BBQ0U9ZG9jdGVzdC5OT1JNQUxJWkVfV0hJVEVTUEFDRSwKKyAgICAgICAgICAgICAgICBF
TExJUFNJUz1kb2N0ZXN0LkVMTElQU0lTLAorICAgICAgICAgICAgICAgIElHTk9SRV9FWENFUFRJ
T05fREVUQUlMPWRvY3Rlc3QuSUdOT1JFX0VYQ0VQVElPTl9ERVRBSUwsCisgICAgICAgICAgICAg
ICAgQ09NUEFSSVNPTl9GTEFHUz1kb2N0ZXN0LkNPTVBBUklTT05fRkxBR1MsCisgICAgICAgICAg
ICAgICAgQUxMT1dfVU5JQ09ERT1fZ2V0X2FsbG93X3VuaWNvZGVfZmxhZygpLAorICAgICAgICAg
ICAgICAgIEFMTE9XX0JZVEVTPV9nZXRfYWxsb3dfYnl0ZXNfZmxhZygpLAorICAgICAgICAgICAg
ICAgICkKKworCitkZWYgZ2V0X29wdGlvbmZsYWdzKHBhcmVudCk6CisgICAgb3B0aW9uZmxhZ3Nf
c3RyID0gcGFyZW50LmNvbmZpZy5nZXRpbmkoImRvY3Rlc3Rfb3B0aW9uZmxhZ3MiKQorICAgIGZs
YWdfbG9va3VwX3RhYmxlID0gX2dldF9mbGFnX2xvb2t1cCgpCisgICAgZmxhZ19hY2MgPSAwCisg
ICAgZm9yIGZsYWcgaW4gb3B0aW9uZmxhZ3Nfc3RyOgorICAgICAgICBmbGFnX2FjYyB8PSBmbGFn
X2xvb2t1cF90YWJsZVtmbGFnXQorICAgIHJldHVybiBmbGFnX2FjYworCisKK2NsYXNzIERvY3Rl
c3RUZXh0ZmlsZShEb2N0ZXN0SXRlbSwgcHl0ZXN0Lk1vZHVsZSk6CisKKyAgICBkZWYgcnVudGVz
dChzZWxmKToKKyAgICAgICAgaW1wb3J0IGRvY3Rlc3QKKyAgICAgICAgZml4dHVyZV9yZXF1ZXN0
ID0gX3NldHVwX2ZpeHR1cmVzKHNlbGYpCisKKyAgICAgICAgIyBpbnNwaXJlZCBieSBkb2N0ZXN0
LnRlc3RmaWxlOyBpZGVhbGx5IHdlIHdvdWxkIHVzZSBpdCBkaXJlY3RseSwKKyAgICAgICAgIyBi
dXQgaXQgZG9lc24ndCBzdXBwb3J0IHBhc3NpbmcgYSBjdXN0b20gY2hlY2tlcgorICAgICAgICB0
ZXh0ID0gc2VsZi5mc3BhdGgucmVhZCgpCisgICAgICAgIGZpbGVuYW1lID0gc3RyKHNlbGYuZnNw
YXRoKQorICAgICAgICBuYW1lID0gc2VsZi5mc3BhdGguYmFzZW5hbWUKKyAgICAgICAgZ2xvYnMg
PSBkaWN0KGdldGZpeHR1cmU9Zml4dHVyZV9yZXF1ZXN0LmdldGZ1bmNhcmd2YWx1ZSkKKyAgICAg
ICAgaWYgJ19fbmFtZV9fJyBub3QgaW4gZ2xvYnM6CisgICAgICAgICAgICBnbG9ic1snX19uYW1l
X18nXSA9ICdfX21haW5fXycKKworICAgICAgICBvcHRpb25mbGFncyA9IGdldF9vcHRpb25mbGFn
cyhzZWxmKQorICAgICAgICBydW5uZXIgPSBkb2N0ZXN0LkRlYnVnUnVubmVyKHZlcmJvc2U9MCwg
b3B0aW9uZmxhZ3M9b3B0aW9uZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2hlY2tlcj1fZ2V0X2NoZWNrZXIoKSkKKworICAgICAgICBwYXJzZXIgPSBkb2N0ZXN0
LkRvY1Rlc3RQYXJzZXIoKQorICAgICAgICB0ZXN0ID0gcGFyc2VyLmdldF9kb2N0ZXN0KHRleHQs
IGdsb2JzLCBuYW1lLCBmaWxlbmFtZSwgMCkKKyAgICAgICAgX2NoZWNrX2FsbF9za2lwcGVkKHRl
c3QpCisgICAgICAgIHJ1bm5lci5ydW4odGVzdCkKKworCitkZWYgX2NoZWNrX2FsbF9za2lwcGVk
KHRlc3QpOgorICAgICIiInJhaXNlcyBweXRlc3Quc2tpcCgpIGlmIGFsbCBleGFtcGxlcyBpbiB0
aGUgZ2l2ZW4gRG9jVGVzdCBoYXZlIHRoZSBTS0lQCisgICAgb3B0aW9uIHNldC4KKyAgICAiIiIK
KyAgICBpbXBvcnQgZG9jdGVzdAorICAgIGFsbF9za2lwcGVkID0gYWxsKHgub3B0aW9ucy5nZXQo
ZG9jdGVzdC5TS0lQLCBGYWxzZSkgZm9yIHggaW4gdGVzdC5leGFtcGxlcykKKyAgICBpZiBhbGxf
c2tpcHBlZDoKKyAgICAgICAgcHl0ZXN0LnNraXAoJ2FsbCB0ZXN0cyBza2lwcGVkIGJ5ICtTS0lQ
IG9wdGlvbicpCisKKworY2xhc3MgRG9jdGVzdE1vZHVsZShweXRlc3QuTW9kdWxlKToKKyAgICBk
ZWYgY29sbGVjdChzZWxmKToKKyAgICAgICAgaW1wb3J0IGRvY3Rlc3QKKyAgICAgICAgaWYgc2Vs
Zi5mc3BhdGguYmFzZW5hbWUgPT0gImNvbmZ0ZXN0LnB5IjoKKyAgICAgICAgICAgIG1vZHVsZSA9
IHNlbGYuY29uZmlnLnBsdWdpbm1hbmFnZXIuX2ltcG9ydGNvbmZ0ZXN0KHNlbGYuZnNwYXRoKQor
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG1vZHVsZSA9
IHNlbGYuZnNwYXRoLnB5aW1wb3J0KCkKKyAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoK
KyAgICAgICAgICAgICAgICBpZiBzZWxmLmNvbmZpZy5nZXR2YWx1ZSgnZG9jdGVzdF9pZ25vcmVf
aW1wb3J0X2Vycm9ycycpOgorICAgICAgICAgICAgICAgICAgICBweXRlc3Quc2tpcCgndW5hYmxl
IHRvIGltcG9ydCBtb2R1bGUgJXInICUgc2VsZi5mc3BhdGgpCisgICAgICAgICAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgIyB1c2VzIGludGVybmFsIGRv
Y3Rlc3QgbW9kdWxlIHBhcnNpbmcgbWVjaGFuaXNtCisgICAgICAgIGZpbmRlciA9IGRvY3Rlc3Qu
RG9jVGVzdEZpbmRlcigpCisgICAgICAgIG9wdGlvbmZsYWdzID0gZ2V0X29wdGlvbmZsYWdzKHNl
bGYpCisgICAgICAgIHJ1bm5lciA9IGRvY3Rlc3QuRGVidWdSdW5uZXIodmVyYm9zZT0wLCBvcHRp
b25mbGFncz1vcHRpb25mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjaGVja2VyPV9nZXRfY2hlY2tlcigpKQorICAgICAgICBmb3IgdGVzdCBpbiBmaW5kZXIuZmlu
ZChtb2R1bGUsIG1vZHVsZS5fX25hbWVfXyk6CisgICAgICAgICAgICBpZiB0ZXN0LmV4YW1wbGVz
OiAgIyBza2lwIGVtcHR5IGRvY3Rlc3RzCisgICAgICAgICAgICAgICAgeWllbGQgRG9jdGVzdEl0
ZW0odGVzdC5uYW1lLCBzZWxmLCBydW5uZXIsIHRlc3QpCisKKworZGVmIF9zZXR1cF9maXh0dXJl
cyhkb2N0ZXN0X2l0ZW0pOgorICAgICIiIgorICAgIFVzZWQgYnkgRG9jdGVzdFRleHRmaWxlIGFu
ZCBEb2N0ZXN0SXRlbSB0byBzZXR1cCBmaXh0dXJlIGluZm9ybWF0aW9uLgorICAgICIiIgorICAg
IGRlZiBmdW5jKCk6CisgICAgICAgIHBhc3MKKworICAgIGRvY3Rlc3RfaXRlbS5mdW5jYXJncyA9
IHt9CisgICAgZm0gPSBkb2N0ZXN0X2l0ZW0uc2Vzc2lvbi5fZml4dHVyZW1hbmFnZXIKKyAgICBk
b2N0ZXN0X2l0ZW0uX2ZpeHR1cmVpbmZvID0gZm0uZ2V0Zml4dHVyZWluZm8obm9kZT1kb2N0ZXN0
X2l0ZW0sIGZ1bmM9ZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2xzPU5vbmUsIGZ1bmNhcmdzPUZhbHNlKQorICAgIGZpeHR1cmVfcmVxdWVz
dCA9IEZpeHR1cmVSZXF1ZXN0KGRvY3Rlc3RfaXRlbSkKKyAgICBmaXh0dXJlX3JlcXVlc3QuX2Zp
bGxmaXh0dXJlcygpCisgICAgcmV0dXJuIGZpeHR1cmVfcmVxdWVzdAorCisKK2RlZiBfZ2V0X2No
ZWNrZXIoKToKKyAgICAiIiIKKyAgICBSZXR1cm5zIGEgZG9jdGVzdC5PdXRwdXRDaGVja2VyIHN1
YmNsYXNzIHRoYXQgdGFrZXMgaW4gYWNjb3VudCB0aGUKKyAgICBBTExPV19VTklDT0RFIG9wdGlv
biB0byBpZ25vcmUgdScnIHByZWZpeGVzIGluIHN0cmluZ3MgYW5kIEFMTE9XX0JZVEVTCisgICAg
dG8gc3RyaXAgYicnIHByZWZpeGVzLgorICAgIFVzZWZ1bCB3aGVuIHRoZSBzYW1lIGRvY3Rlc3Qg
c2hvdWxkIHJ1biBpbiBQeXRob24gMiBhbmQgUHl0aG9uIDMuCisKKyAgICBBbiBpbm5lciBjbGFz
cyBpcyB1c2VkIHRvIGF2b2lkIGltcG9ydGluZyAiZG9jdGVzdCIgYXQgdGhlIG1vZHVsZQorICAg
IGxldmVsLgorICAgICIiIgorICAgIGlmIGhhc2F0dHIoX2dldF9jaGVja2VyLCAnTGl0ZXJhbHNP
dXRwdXRDaGVja2VyJyk6CisgICAgICAgIHJldHVybiBfZ2V0X2NoZWNrZXIuTGl0ZXJhbHNPdXRw
dXRDaGVja2VyKCkKKworICAgIGltcG9ydCBkb2N0ZXN0CisgICAgaW1wb3J0IHJlCisKKyAgICBj
bGFzcyBMaXRlcmFsc091dHB1dENoZWNrZXIoZG9jdGVzdC5PdXRwdXRDaGVja2VyKToKKyAgICAg
ICAgIiIiCisgICAgICAgIENvcGllZCBmcm9tIGRvY3Rlc3Rfbm9zZV9wbHVnaW4ucHkgZnJvbSB0
aGUgbmx0ayBwcm9qZWN0OgorICAgICAgICAgICAgaHR0cHM6Ly9naXRodWIuY29tL25sdGsvbmx0
aworCisgICAgICAgIEZ1cnRoZXIgZXh0ZW5kZWQgdG8gYWxzbyBzdXBwb3J0IGJ5dGUgbGl0ZXJh
bHMuCisgICAgICAgICIiIgorCisgICAgICAgIF91bmljb2RlX2xpdGVyYWxfcmUgPSByZS5jb21w
aWxlKHIiKFxXfF4pW3VVXShbclJdP1tcJ1wiXSkiLCByZS5VTklDT0RFKQorICAgICAgICBfYnl0
ZXNfbGl0ZXJhbF9yZSA9IHJlLmNvbXBpbGUociIoXFd8XilbYkJdKFtyUl0/W1wnXCJdKSIsIHJl
LlVOSUNPREUpCisKKyAgICAgICAgZGVmIGNoZWNrX291dHB1dChzZWxmLCB3YW50LCBnb3QsIG9w
dGlvbmZsYWdzKToKKyAgICAgICAgICAgIHJlcyA9IGRvY3Rlc3QuT3V0cHV0Q2hlY2tlci5jaGVj
a19vdXRwdXQoc2VsZiwgd2FudCwgZ290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25mbGFncykKKyAgICAgICAgICAgIGlmIHJlczoK
KyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgICAgICBhbGxvd191bmljb2Rl
ID0gb3B0aW9uZmxhZ3MgJiBfZ2V0X2FsbG93X3VuaWNvZGVfZmxhZygpCisgICAgICAgICAgICBh
bGxvd19ieXRlcyA9IG9wdGlvbmZsYWdzICYgX2dldF9hbGxvd19ieXRlc19mbGFnKCkKKyAgICAg
ICAgICAgIGlmIG5vdCBhbGxvd191bmljb2RlIGFuZCBub3QgYWxsb3dfYnl0ZXM6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgICAgIGVsc2U6ICAjIHByYWdtYTogbm8g
Y292ZXIKKyAgICAgICAgICAgICAgICBkZWYgcmVtb3ZlX3ByZWZpeGVzKHJlZ2V4LCB0eHQpOgor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmUuc3ViKHJlZ2V4LCByJ1wxXDInLCB0eHQpCisK
KyAgICAgICAgICAgICAgICBpZiBhbGxvd191bmljb2RlOgorICAgICAgICAgICAgICAgICAgICB3
YW50ID0gcmVtb3ZlX3ByZWZpeGVzKHNlbGYuX3VuaWNvZGVfbGl0ZXJhbF9yZSwgd2FudCkKKyAg
ICAgICAgICAgICAgICAgICAgZ290ID0gcmVtb3ZlX3ByZWZpeGVzKHNlbGYuX3VuaWNvZGVfbGl0
ZXJhbF9yZSwgZ290KQorICAgICAgICAgICAgICAgIGlmIGFsbG93X2J5dGVzOgorICAgICAgICAg
ICAgICAgICAgICB3YW50ID0gcmVtb3ZlX3ByZWZpeGVzKHNlbGYuX2J5dGVzX2xpdGVyYWxfcmUs
IHdhbnQpCisgICAgICAgICAgICAgICAgICAgIGdvdCA9IHJlbW92ZV9wcmVmaXhlcyhzZWxmLl9i
eXRlc19saXRlcmFsX3JlLCBnb3QpCisgICAgICAgICAgICAgICAgcmVzID0gZG9jdGVzdC5PdXRw
dXRDaGVja2VyLmNoZWNrX291dHB1dChzZWxmLCB3YW50LCBnb3QsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25mbGFncykKKyAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzCisKKyAgICBfZ2V0X2NoZWNrZXIuTGl0ZXJhbHNPdXRw
dXRDaGVja2VyID0gTGl0ZXJhbHNPdXRwdXRDaGVja2VyCisgICAgcmV0dXJuIF9nZXRfY2hlY2tl
ci5MaXRlcmFsc091dHB1dENoZWNrZXIoKQorCisKK2RlZiBfZ2V0X2FsbG93X3VuaWNvZGVfZmxh
ZygpOgorICAgICIiIgorICAgIFJlZ2lzdGVycyBhbmQgcmV0dXJucyB0aGUgQUxMT1dfVU5JQ09E
RSBmbGFnLgorICAgICIiIgorICAgIGltcG9ydCBkb2N0ZXN0CisgICAgcmV0dXJuIGRvY3Rlc3Qu
cmVnaXN0ZXJfb3B0aW9uZmxhZygnQUxMT1dfVU5JQ09ERScpCisKKworZGVmIF9nZXRfYWxsb3df
Ynl0ZXNfZmxhZygpOgorICAgICIiIgorICAgIFJlZ2lzdGVycyBhbmQgcmV0dXJucyB0aGUgQUxM
T1dfQllURVMgZmxhZy4KKyAgICAiIiIKKyAgICBpbXBvcnQgZG9jdGVzdAorICAgIHJldHVybiBk
b2N0ZXN0LnJlZ2lzdGVyX29wdGlvbmZsYWcoJ0FMTE9XX0JZVEVTJykKZGlmZiAtLWdpdCBhL1dl
YkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9nZW5zY3JpcHQu
cHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvZ2Vu
c2NyaXB0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kMjk2MmQ4
ZmM4MgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29s
cy9weXRlc3QvX3B5dGVzdC9nZW5zY3JpcHQucHkKQEAgLTAsMCArMSwxMzIgQEAKKyIiIiAoZGVw
cmVjYXRlZCkgZ2VuZXJhdGUgYSBzaW5nbGUtZmlsZSBzZWxmLWNvbnRhaW5lZCB2ZXJzaW9uIG9m
IHB5dGVzdCAiIiIKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHBrZ3V0aWwKKworaW1w
b3J0IHB5CitpbXBvcnQgX3B5dGVzdAorCisKKworZGVmIGZpbmRfdG9wbGV2ZWwobmFtZSk6Cisg
ICAgZm9yIHN5c3BhdGggaW4gc3lzLnBhdGg6CisgICAgICAgIGJhc2UgPSBweS5wYXRoLmxvY2Fs
KHN5c3BhdGgpCisgICAgICAgIGxpYiA9IGJhc2UvbmFtZQorICAgICAgICBpZiBsaWIuY2hlY2so
ZGlyPTEpOgorICAgICAgICAgICAgcmV0dXJuIGxpYgorICAgICAgICBtb2QgPSBiYXNlLmpvaW4o
IiVzLnB5IiAlIG5hbWUpCisgICAgICAgIGlmIG1vZC5jaGVjayhmaWxlPTEpOgorICAgICAgICAg
ICAgcmV0dXJuIG1vZAorICAgIHJhaXNlIExvb2t1cEVycm9yKG5hbWUpCisKK2RlZiBwa2duYW1l
KHRvcGxldmVsLCByb290cGF0aCwgcGF0aCk6CisgICAgcGFydHMgPSBwYXRoLnBhcnRzKClbbGVu
KHJvb3RwYXRoLnBhcnRzKCkpOl0KKyAgICByZXR1cm4gJy4nLmpvaW4oW3RvcGxldmVsXSArIFt4
LnB1cmViYXNlbmFtZSBmb3IgeCBpbiBwYXJ0c10pCisKK2RlZiBwa2dfdG9fbWFwcGluZyhuYW1l
KToKKyAgICB0b3BsZXZlbCA9IGZpbmRfdG9wbGV2ZWwobmFtZSkKKyAgICBuYW1lMnNyYyA9IHt9
CisgICAgaWYgdG9wbGV2ZWwuY2hlY2soZmlsZT0xKTogIyBtb2R1bGUKKyAgICAgICAgbmFtZTJz
cmNbdG9wbGV2ZWwucHVyZWJhc2VuYW1lXSA9IHRvcGxldmVsLnJlYWQoKQorICAgIGVsc2U6ICMg
cGFja2FnZQorICAgICAgICBmb3IgcHlmaWxlIGluIHRvcGxldmVsLnZpc2l0KCcqLnB5Jyk6Cisg
ICAgICAgICAgICBwa2cgPSBwa2duYW1lKG5hbWUsIHRvcGxldmVsLCBweWZpbGUpCisgICAgICAg
ICAgICBuYW1lMnNyY1twa2ddID0gcHlmaWxlLnJlYWQoKQorICAgICAgICAjIHdpdGggd2hlZWxz
IHB5IHNvdXJjZSBjb2RlIG1pZ2h0IGJlIG5vdCBiZSBpbnN0YWxsZWQKKyAgICAgICAgIyBhbmQg
dGhlIHJlc3VsdGluZyBnZW5zY3JpcHQgaXMgdXNlbGVzcywganVzdCBiYWlsIG91dC4KKyAgICAg
ICAgYXNzZXJ0IG5hbWUyc3JjLCAibm8gc291cmNlIGNvZGUgZm91bmQgZm9yICVyIGF0ICVyIiAl
KG5hbWUsIHRvcGxldmVsKQorICAgIHJldHVybiBuYW1lMnNyYworCitkZWYgY29tcHJlc3NfbWFw
cGluZyhtYXBwaW5nKToKKyAgICBpbXBvcnQgYmFzZTY0LCBwaWNrbGUsIHpsaWIKKyAgICBkYXRh
ID0gcGlja2xlLmR1bXBzKG1hcHBpbmcsIDIpCisgICAgZGF0YSA9IHpsaWIuY29tcHJlc3MoZGF0
YSwgOSkKKyAgICBkYXRhID0gYmFzZTY0LmVuY29kZXN0cmluZyhkYXRhKQorICAgIGRhdGEgPSBk
YXRhLmRlY29kZSgnYXNjaWknKQorICAgIHJldHVybiBkYXRhCisKKworZGVmIGNvbXByZXNzX3Bh
Y2thZ2VzKG5hbWVzKToKKyAgICBtYXBwaW5nID0ge30KKyAgICBmb3IgbmFtZSBpbiBuYW1lczoK
KyAgICAgICAgbWFwcGluZy51cGRhdGUocGtnX3RvX21hcHBpbmcobmFtZSkpCisgICAgcmV0dXJu
IGNvbXByZXNzX21hcHBpbmcobWFwcGluZykKKworZGVmIGdlbmVyYXRlX3NjcmlwdChlbnRyeSwg
cGFja2FnZXMpOgorICAgIGRhdGEgPSBjb21wcmVzc19wYWNrYWdlcyhwYWNrYWdlcykKKyAgICB0
bXBsID0gcHkucGF0aC5sb2NhbChfX2ZpbGVfXykuZGlycGF0aCgpLmpvaW4oJ3N0YW5kYWxvbmV0
ZW1wbGF0ZS5weScpCisgICAgZXhlID0gdG1wbC5yZWFkKCkKKyAgICBleGUgPSBleGUucmVwbGFj
ZSgnQFNPVVJDRVNAJywgZGF0YSkKKyAgICBleGUgPSBleGUucmVwbGFjZSgnQEVOVFJZQCcsIGVu
dHJ5KQorICAgIHJldHVybiBleGUKKworCitkZWYgcHl0ZXN0X2FkZG9wdGlvbihwYXJzZXIpOgor
ICAgIGdyb3VwID0gcGFyc2VyLmdldGdyb3VwKCJkZWJ1Z2NvbmZpZyIpCisgICAgZ3JvdXAuYWRk
b3B0aW9uKCItLWdlbnNjcmlwdCIsIGFjdGlvbj0ic3RvcmUiLCBkZWZhdWx0PU5vbmUsCisgICAg
ICAgIGRlc3Q9ImdlbnNjcmlwdCIsIG1ldGF2YXI9InBhdGgiLAorICAgICAgICBoZWxwPSJjcmVh
dGUgc3RhbmRhbG9uZSBweXRlc3Qgc2NyaXB0IGF0IGdpdmVuIHRhcmdldCBwYXRoLiIpCisKK2Rl
ZiBweXRlc3RfY21kbGluZV9tYWluKGNvbmZpZyk6CisgICAgaW1wb3J0IF9weXRlc3QuY29uZmln
CisgICAgZ2Vuc2NyaXB0ID0gY29uZmlnLmdldHZhbHVlKCJnZW5zY3JpcHQiKQorICAgIGlmIGdl
bnNjcmlwdDoKKyAgICAgICAgdHcgPSBfcHl0ZXN0LmNvbmZpZy5jcmVhdGVfdGVybWluYWxfd3Jp
dGVyKGNvbmZpZykKKyAgICAgICAgdHcubGluZSgiV0FSTklORzogdXNhZ2Ugb2YgZ2Vuc2NyaXB0
IGlzIGRlcHJlY2F0ZWQuIiwKKyAgICAgICAgICAgICAgICByZWQ9VHJ1ZSkKKyAgICAgICAgZGVw
cyA9ICBbJ3B5JywgJ19weXRlc3QnLCAncHl0ZXN0J10gICMgcGx1Z2d5IGlzIHZlbmRvcmVkCisg
ICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiw3KToKKyAgICAgICAgICAgIGRlcHMuYXBw
ZW5kKCJhcmdwYXJzZSIpCisgICAgICAgICAgICB0dy5saW5lKCJnZW5lcmF0ZWQgc2NyaXB0IHdp
bGwgcnVuIG9uIHB5dGhvbjIuNi1weXRob24zLjMrKyIpCisgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICB0dy5saW5lKCJXQVJOSU5HOiBnZW5lcmF0ZWQgc2NyaXB0IHdpbGwgbm90IHJ1biBvbiBw
eXRob24yLjYgIgorICAgICAgICAgICAgICAgICAgICAiZHVlIHRvICdhcmdwYXJzZScgZGVwZW5k
ZW5jeS4gVXNlIHB5dGhvbjIuNiAiCisgICAgICAgICAgICAgICAgICAgICJ0byBnZW5lcmF0ZSBh
IHB5dGhvbjIuNiBjb21wYXRpYmxlIHNjcmlwdCIsIHJlZD1UcnVlKQorICAgICAgICBzY3JpcHQg
PSBnZW5lcmF0ZV9zY3JpcHQoCisgICAgICAgICAgICAnaW1wb3J0IHB5dGVzdDsgcmFpc2UgU3lz
dGVtRXhpdChweXRlc3QuY21kbGluZS5tYWluKCkpJywKKyAgICAgICAgICAgIGRlcHMsCisgICAg
ICAgICkKKyAgICAgICAgZ2Vuc2NyaXB0ID0gcHkucGF0aC5sb2NhbChnZW5zY3JpcHQpCisgICAg
ICAgIGdlbnNjcmlwdC53cml0ZShzY3JpcHQpCisgICAgICAgIHR3LmxpbmUoImdlbmVyYXRlZCBw
eXRlc3Qgc3RhbmRhbG9uZSBzY3JpcHQ6ICVzIiAlIGdlbnNjcmlwdCwKKyAgICAgICAgICAgICAg
ICBib2xkPVRydWUpCisgICAgICAgIHJldHVybiAwCisKKworZGVmIHB5dGVzdF9uYW1lc3BhY2Uo
KToKKyAgICByZXR1cm4geydmcmVlemVfaW5jbHVkZXMnOiBmcmVlemVfaW5jbHVkZXN9CisKKwor
ZGVmIGZyZWV6ZV9pbmNsdWRlcygpOgorICAgICIiIgorICAgIFJldHVybnMgYSBsaXN0IG9mIG1v
ZHVsZSBuYW1lcyB1c2VkIGJ5IHB5LnRlc3QgdGhhdCBzaG91bGQgYmUKKyAgICBpbmNsdWRlZCBi
eSBjeF9mcmVlemUuCisgICAgIiIiCisgICAgcmVzdWx0ID0gbGlzdChfaXRlcl9hbGxfbW9kdWxl
cyhweSkpCisgICAgcmVzdWx0ICs9IGxpc3QoX2l0ZXJfYWxsX21vZHVsZXMoX3B5dGVzdCkpCisg
ICAgcmV0dXJuIHJlc3VsdAorCisKK2RlZiBfaXRlcl9hbGxfbW9kdWxlcyhwYWNrYWdlLCBwcmVm
aXg9JycpOgorICAgICIiIgorICAgIEl0ZXJhdGVzIG92ZXIgdGhlIG5hbWVzIG9mIGFsbCBtb2R1
bGVzIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBnaXZlbgorICAgIHBhY2thZ2UsIHJlY3Vyc2l2
ZWx5LgorCisgICAgRXhhbXBsZToKKyAgICAgICAgX2l0ZXJfYWxsX21vZHVsZXMoX3B5dGVzdCkg
LT4KKyAgICAgICAgICAgIFsnX3B5dGVzdC5hc3NlcnRpb24ubmV3aW50ZXJwcmV0JywKKyAgICAg
ICAgICAgICAnX3B5dGVzdC5jYXB0dXJlJywKKyAgICAgICAgICAgICAnX3B5dGVzdC5jb3JlJywK
KyAgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgIF0KKyAgICAiIiIKKyAgICBpZiB0eXBlKHBh
Y2thZ2UpIGlzIG5vdCBzdHI6CisgICAgICAgIHBhdGgsIHByZWZpeCA9IHBhY2thZ2UuX19wYXRo
X19bMF0sIHBhY2thZ2UuX19uYW1lX18gKyAnLicKKyAgICBlbHNlOgorICAgICAgICBwYXRoID0g
cGFja2FnZQorICAgIGZvciBfLCBuYW1lLCBpc19wYWNrYWdlIGluIHBrZ3V0aWwuaXRlcl9tb2R1
bGVzKFtwYXRoXSk6CisgICAgICAgIGlmIGlzX3BhY2thZ2U6CisgICAgICAgICAgICBmb3IgbSBp
biBfaXRlcl9hbGxfbW9kdWxlcyhvcy5wYXRoLmpvaW4ocGF0aCwgbmFtZSksIHByZWZpeD1uYW1l
ICsgJy4nKToKKyAgICAgICAgICAgICAgICB5aWVsZCBwcmVmaXggKyBtCisgICAgICAgIGVsc2U6
CisgICAgICAgICAgICB5aWVsZCBwcmVmaXggKyBuYW1lCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJU
ZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvaGVscGNvbmZpZy5weSBiL1dl
YkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9oZWxwY29uZmln
LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xZGYwYzU2YWM3Ygot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRl
c3QvX3B5dGVzdC9oZWxwY29uZmlnLnB5CkBAIC0wLDAgKzEsMTM5IEBACisiIiIgdmVyc2lvbiBp
bmZvLCBoZWxwIG1lc3NhZ2VzLCB0cmFjaW5nIGNvbmZpZ3VyYXRpb24uICAiIiIKK2ltcG9ydCBw
eQoraW1wb3J0IHB5dGVzdAoraW1wb3J0IG9zLCBzeXMKKworZGVmIHB5dGVzdF9hZGRvcHRpb24o
cGFyc2VyKToKKyAgICBncm91cCA9IHBhcnNlci5nZXRncm91cCgnZGVidWdjb25maWcnKQorICAg
IGdyb3VwLmFkZG9wdGlvbignLS12ZXJzaW9uJywgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAg
ICAgICAgIGhlbHA9ImRpc3BsYXkgcHl0ZXN0IGxpYiB2ZXJzaW9uIGFuZCBpbXBvcnQgaW5mb3Jt
YXRpb24uIikKKyAgICBncm91cC5fYWRkb3B0aW9uKCItaCIsICItLWhlbHAiLCBhY3Rpb249InN0
b3JlX3RydWUiLCBkZXN0PSJoZWxwIiwKKyAgICAgICAgICAgIGhlbHA9InNob3cgaGVscCBtZXNz
YWdlIGFuZCBjb25maWd1cmF0aW9uIGluZm8iKQorICAgIGdyb3VwLl9hZGRvcHRpb24oJy1wJywg
YWN0aW9uPSJhcHBlbmQiLCBkZXN0PSJwbHVnaW5zIiwgZGVmYXVsdCA9IFtdLAorICAgICAgICAg
ICAgICAgbWV0YXZhcj0ibmFtZSIsCisgICAgICAgICAgICAgICBoZWxwPSJlYXJseS1sb2FkIGdp
dmVuIHBsdWdpbiAobXVsdGktYWxsb3dlZCkuICIKKyAgICAgICAgICAgICAgICAgICAgIlRvIGF2
b2lkIGxvYWRpbmcgb2YgcGx1Z2lucywgdXNlIHRoZSBgbm86YCBwcmVmaXgsIGUuZy4gIgorICAg
ICAgICAgICAgICAgICAgICAiYG5vOmRvY3Rlc3RgLiIpCisgICAgZ3JvdXAuYWRkb3B0aW9uKCct
LXRyYWNlY29uZmlnJywgJy0tdHJhY2UtY29uZmlnJywKKyAgICAgICAgICAgICAgIGFjdGlvbj0i
c3RvcmVfdHJ1ZSIsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICBoZWxwPSJ0cmFjZSBj
b25zaWRlcmF0aW9ucyBvZiBjb25mdGVzdC5weSBmaWxlcy4iKSwKKyAgICBncm91cC5hZGRvcHRp
b24oJy0tZGVidWcnLAorICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0i
ZGVidWciLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgaGVscD0ic3RvcmUgaW50ZXJu
YWwgdHJhY2luZyBkZWJ1ZyBpbmZvcm1hdGlvbiBpbiAncHl0ZXN0ZGVidWcubG9nJy4iKQorCisK
K0BweXRlc3QuaG9va2ltcGwoaG9va3dyYXBwZXI9VHJ1ZSkKK2RlZiBweXRlc3RfY21kbGluZV9w
YXJzZSgpOgorICAgIG91dGNvbWUgPSB5aWVsZAorICAgIGNvbmZpZyA9IG91dGNvbWUuZ2V0X3Jl
c3VsdCgpCisgICAgaWYgY29uZmlnLm9wdGlvbi5kZWJ1ZzoKKyAgICAgICAgcGF0aCA9IG9zLnBh
dGguYWJzcGF0aCgicHl0ZXN0ZGVidWcubG9nIikKKyAgICAgICAgZGVidWdmaWxlID0gb3Blbihw
YXRoLCAndycpCisgICAgICAgIGRlYnVnZmlsZS53cml0ZSgidmVyc2lvbnMgcHl0ZXN0LSVzLCBw
eS0lcywgIgorICAgICAgICAgICAgICAgICJweXRob24tJXNcbmN3ZD0lc1xuYXJncz0lc1xuXG4i
ICUoCisgICAgICAgICAgICBweXRlc3QuX192ZXJzaW9uX18sIHB5Ll9fdmVyc2lvbl9fLAorICAg
ICAgICAgICAgIi4iLmpvaW4obWFwKHN0ciwgc3lzLnZlcnNpb25faW5mbykpLAorICAgICAgICAg
ICAgb3MuZ2V0Y3dkKCksIGNvbmZpZy5fb3JpZ2FyZ3MpKQorICAgICAgICBjb25maWcudHJhY2Uu
cm9vdC5zZXR3cml0ZXIoZGVidWdmaWxlLndyaXRlKQorICAgICAgICB1bmRvX3RyYWNpbmcgPSBj
b25maWcucGx1Z2lubWFuYWdlci5lbmFibGVfdHJhY2luZygpCisgICAgICAgIHN5cy5zdGRlcnIu
d3JpdGUoIndyaXRpbmcgcHl0ZXN0ZGVidWcgaW5mb3JtYXRpb24gdG8gJXNcbiIgJSBwYXRoKQor
ICAgICAgICBkZWYgdW5zZXRfdHJhY2luZygpOgorICAgICAgICAgICAgZGVidWdmaWxlLmNsb3Nl
KCkKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIndyb3RlIHB5dGVzdGRlYnVnIGluZm9y
bWF0aW9uIHRvICVzXG4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdmaWxl
Lm5hbWUpCisgICAgICAgICAgICBjb25maWcudHJhY2Uucm9vdC5zZXR3cml0ZXIoTm9uZSkKKyAg
ICAgICAgICAgIHVuZG9fdHJhY2luZygpCisgICAgICAgIGNvbmZpZy5hZGRfY2xlYW51cCh1bnNl
dF90cmFjaW5nKQorCitkZWYgcHl0ZXN0X2NtZGxpbmVfbWFpbihjb25maWcpOgorICAgIGlmIGNv
bmZpZy5vcHRpb24udmVyc2lvbjoKKyAgICAgICAgcCA9IHB5LnBhdGgubG9jYWwocHl0ZXN0Ll9f
ZmlsZV9fKQorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJUaGlzIGlzIHB5dGVzdCB2ZXJzaW9u
ICVzLCBpbXBvcnRlZCBmcm9tICVzXG4iICUKKyAgICAgICAgICAgIChweXRlc3QuX192ZXJzaW9u
X18sIHApKQorICAgICAgICBwbHVnaW5pbmZvID0gZ2V0cGx1Z2ludmVyc2lvbmluZm8oY29uZmln
KQorICAgICAgICBpZiBwbHVnaW5pbmZvOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gcGx1Z2lu
aW5mbzoKKyAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKGxpbmUgKyAiXG4iKQorICAg
ICAgICByZXR1cm4gMAorICAgIGVsaWYgY29uZmlnLm9wdGlvbi5oZWxwOgorICAgICAgICBjb25m
aWcuX2RvX2NvbmZpZ3VyZSgpCisgICAgICAgIHNob3doZWxwKGNvbmZpZykKKyAgICAgICAgY29u
ZmlnLl9lbnN1cmVfdW5jb25maWd1cmUoKQorICAgICAgICByZXR1cm4gMAorCitkZWYgc2hvd2hl
bHAoY29uZmlnKToKKyAgICByZXBvcnRlciA9IGNvbmZpZy5wbHVnaW5tYW5hZ2VyLmdldF9wbHVn
aW4oJ3Rlcm1pbmFscmVwb3J0ZXInKQorICAgIHR3ID0gcmVwb3J0ZXIuX3R3CisgICAgdHcud3Jp
dGUoY29uZmlnLl9wYXJzZXIub3B0cGFyc2VyLmZvcm1hdF9oZWxwKCkpCisgICAgdHcubGluZSgp
CisgICAgdHcubGluZSgpCisgICAgI3R3LnNlcCggIj0iLCAiY29uZmlnIGZpbGUgc2V0dGluZ3Mi
KQorICAgIHR3LmxpbmUoIltweXRlc3RdIGluaS1vcHRpb25zIGluIHRoZSBuZXh0ICIKKyAgICAg
ICAgICAgICJweXRlc3QuaW5pfHRveC5pbml8c2V0dXAuY2ZnIGZpbGU6IikKKyAgICB0dy5saW5l
KCkKKworICAgIGZvciBuYW1lIGluIGNvbmZpZy5fcGFyc2VyLl9pbmluYW1lczoKKyAgICAgICAg
aGVscCwgdHlwZSwgZGVmYXVsdCA9IGNvbmZpZy5fcGFyc2VyLl9pbmlkaWN0W25hbWVdCisgICAg
ICAgIGlmIHR5cGUgaXMgTm9uZToKKyAgICAgICAgICAgIHR5cGUgPSAic3RyaW5nIgorICAgICAg
ICBzcGVjID0gIiVzICglcykiICUgKG5hbWUsIHR5cGUpCisgICAgICAgIGxpbmUgPSAiICAlLTI0
cyAlcyIgJShzcGVjLCBoZWxwKQorICAgICAgICB0dy5saW5lKGxpbmVbOnR3LmZ1bGx3aWR0aF0p
CisKKyAgICB0dy5saW5lKCkKKyAgICB0dy5saW5lKCJlbnZpcm9ubWVudCB2YXJpYWJsZXM6IikK
KyAgICB2YXJzID0gWworICAgICAgICAoIlBZVEVTVF9BRERPUFRTIiwgImV4dHJhIGNvbW1hbmQg
bGluZSBvcHRpb25zIiksCisgICAgICAgICgiUFlURVNUX1BMVUdJTlMiLCAiY29tbWEtc2VwYXJh
dGVkIHBsdWdpbnMgdG8gbG9hZCBkdXJpbmcgc3RhcnR1cCIpLAorICAgICAgICAoIlBZVEVTVF9E
RUJVRyIsICJzZXQgdG8gZW5hYmxlIGRlYnVnIHRyYWNpbmcgb2YgcHl0ZXN0J3MgaW50ZXJuYWxz
IikKKyAgICBdCisgICAgZm9yIG5hbWUsIGhlbHAgaW4gdmFyczoKKyAgICAgICAgdHcubGluZSgi
ICAlLTI0cyAlcyIgJSAobmFtZSwgaGVscCkpCisgICAgdHcubGluZSgpCisgICAgdHcubGluZSgp
CisKKyAgICB0dy5saW5lKCJ0byBzZWUgYXZhaWxhYmxlIG1hcmtlcnMgdHlwZTogcHkudGVzdCAt
LW1hcmtlcnMiKQorICAgIHR3LmxpbmUoInRvIHNlZSBhdmFpbGFibGUgZml4dHVyZXMgdHlwZTog
cHkudGVzdCAtLWZpeHR1cmVzIikKKyAgICB0dy5saW5lKCIoc2hvd24gYWNjb3JkaW5nIHRvIHNw
ZWNpZmllZCBmaWxlX29yX2RpciBvciBjdXJyZW50IGRpciAiCisgICAgICAgICAgICAiaWYgbm90
IHNwZWNpZmllZCkiKQorCisgICAgZm9yIHdhcm5pbmdyZXBvcnQgaW4gcmVwb3J0ZXIuc3RhdHMu
Z2V0KCd3YXJuaW5ncycsIFtdKToKKyAgICAgICAgdHcubGluZSgid2FybmluZyA6ICIgKyB3YXJu
aW5ncmVwb3J0Lm1lc3NhZ2UsIHJlZD1UcnVlKQorICAgIHJldHVybgorCisKK2NvbmZ0ZXN0X29w
dGlvbnMgPSBbCisgICAgKCdweXRlc3RfcGx1Z2lucycsICdsaXN0IG9mIHBsdWdpbiBuYW1lcyB0
byBsb2FkJyksCitdCisKK2RlZiBnZXRwbHVnaW52ZXJzaW9uaW5mbyhjb25maWcpOgorICAgIGxp
bmVzID0gW10KKyAgICBwbHVnaW5pbmZvID0gY29uZmlnLnBsdWdpbm1hbmFnZXIubGlzdF9wbHVn
aW5fZGlzdGluZm8oKQorICAgIGlmIHBsdWdpbmluZm86CisgICAgICAgIGxpbmVzLmFwcGVuZCgi
c2V0dXB0b29scyByZWdpc3RlcmVkIHBsdWdpbnM6IikKKyAgICAgICAgZm9yIHBsdWdpbiwgZGlz
dCBpbiBwbHVnaW5pbmZvOgorICAgICAgICAgICAgbG9jID0gZ2V0YXR0cihwbHVnaW4sICdfX2Zp
bGVfXycsIHJlcHIocGx1Z2luKSkKKyAgICAgICAgICAgIGNvbnRlbnQgPSAiJXMtJXMgYXQgJXMi
ICUgKGRpc3QucHJvamVjdF9uYW1lLCBkaXN0LnZlcnNpb24sIGxvYykKKyAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgiICAiICsgY29udGVudCkKKyAgICByZXR1cm4gbGluZXMKKworZGVmIHB5dGVz
dF9yZXBvcnRfaGVhZGVyKGNvbmZpZyk6CisgICAgbGluZXMgPSBbXQorICAgIGlmIGNvbmZpZy5v
cHRpb24uZGVidWcgb3IgY29uZmlnLm9wdGlvbi50cmFjZWNvbmZpZzoKKyAgICAgICAgbGluZXMu
YXBwZW5kKCJ1c2luZzogcHl0ZXN0LSVzIHB5bGliLSVzIiAlCisgICAgICAgICAgICAocHl0ZXN0
Ll9fdmVyc2lvbl9fLHB5Ll9fdmVyc2lvbl9fKSkKKworICAgICAgICB2ZXJpbmZvID0gZ2V0cGx1
Z2ludmVyc2lvbmluZm8oY29uZmlnKQorICAgICAgICBpZiB2ZXJpbmZvOgorICAgICAgICAgICAg
bGluZXMuZXh0ZW5kKHZlcmluZm8pCisKKyAgICBpZiBjb25maWcub3B0aW9uLnRyYWNlY29uZmln
OgorICAgICAgICBsaW5lcy5hcHBlbmQoImFjdGl2ZSBwbHVnaW5zOiIpCisgICAgICAgIGl0ZW1z
ID0gY29uZmlnLnBsdWdpbm1hbmFnZXIubGlzdF9uYW1lX3BsdWdpbigpCisgICAgICAgIGZvciBu
YW1lLCBwbHVnaW4gaW4gaXRlbXM6CisgICAgICAgICAgICBpZiBoYXNhdHRyKHBsdWdpbiwgJ19f
ZmlsZV9fJyk6CisgICAgICAgICAgICAgICAgciA9IHBsdWdpbi5fX2ZpbGVfXworICAgICAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgICAgICByID0gcmVwcihwbHVnaW4pCisgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoIiAgICAlLTIwczogJXMiICUobmFtZSwgcikpCisgICAgcmV0dXJuIGxpbmVz
CmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19w
eXRlc3QvaG9va3NwZWMucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0
ZXN0L19weXRlc3QvaG9va3NwZWMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLjYwZTliNDdkMjYyCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1w
b3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L2hvb2tzcGVjLnB5CkBAIC0wLDAgKzEsMjk1
IEBACisiIiIgaG9vayBzcGVjaWZpY2F0aW9ucyBmb3IgcHl0ZXN0IHBsdWdpbnMsIGludm9rZWQg
ZnJvbSBtYWluLnB5IGFuZCBidWlsdGluIHBsdWdpbnMuICAiIiIKKworZnJvbSBfcHl0ZXN0Ll9w
bHVnZ3kgaW1wb3J0IEhvb2tzcGVjTWFya2VyCisKK2hvb2tzcGVjID0gSG9va3NwZWNNYXJrZXIo
InB5dGVzdCIpCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBJbml0aWFsaXphdGlvbiBob29rcyBj
YWxsZWQgZm9yIGV2ZXJ5IHBsdWdpbgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Bob29rc3BlYyho
aXN0b3JpYz1UcnVlKQorZGVmIHB5dGVzdF9hZGRob29rcyhwbHVnaW5tYW5hZ2VyKToKKyAgICAi
IiJjYWxsZWQgYXQgcGx1Z2luIHJlZ2lzdHJhdGlvbiB0aW1lIHRvIGFsbG93IGFkZGluZyBuZXcg
aG9va3MgdmlhIGEgY2FsbCB0bworICAgIHBsdWdpbm1hbmFnZXIuYWRkX2hvb2tzcGVjcyhtb2R1
bGVfb3JfY2xhc3MsIHByZWZpeCkuIiIiCisKKworQGhvb2tzcGVjKGhpc3RvcmljPVRydWUpCitk
ZWYgcHl0ZXN0X25hbWVzcGFjZSgpOgorICAgICIiInJldHVybiBkaWN0IG9mIG5hbWUtPm9iamVj
dCB0byBiZSBtYWRlIGdsb2JhbGx5IGF2YWlsYWJsZSBpbgorICAgIHRoZSBweXRlc3QgbmFtZXNw
YWNlLiAgVGhpcyBob29rIGlzIGNhbGxlZCBhdCBwbHVnaW4gcmVnaXN0cmF0aW9uCisgICAgdGlt
ZS4KKyAgICAiIiIKKworQGhvb2tzcGVjKGhpc3RvcmljPVRydWUpCitkZWYgcHl0ZXN0X3BsdWdp
bl9yZWdpc3RlcmVkKHBsdWdpbiwgbWFuYWdlcik6CisgICAgIiIiIGEgbmV3IHB5dGVzdCBwbHVn
aW4gZ290IHJlZ2lzdGVyZWQuICIiIgorCisKK0Bob29rc3BlYyhoaXN0b3JpYz1UcnVlKQorZGVm
IHB5dGVzdF9hZGRvcHRpb24ocGFyc2VyKToKKyAgICAiIiJyZWdpc3RlciBhcmdwYXJzZS1zdHls
ZSBvcHRpb25zIGFuZCBpbmktc3R5bGUgY29uZmlnIHZhbHVlcywKKyAgICBjYWxsZWQgb25jZSBh
dCB0aGUgYmVnaW5uaW5nIG9mIGEgdGVzdCBydW4uCisKKyAgICAuLiBub3RlOjoKKworICAgICAg
ICBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBvbmx5IGluIHBsdWdpbnMgb3Ig
YGBjb25mdGVzdC5weWBgCisgICAgICAgIGZpbGVzIHNpdHVhdGVkIGF0IHRoZSB0ZXN0cyByb290
IGRpcmVjdG9yeSBkdWUgdG8gaG93IHB5LnRlc3QKKyAgICAgICAgOnJlZjpgZGlzY292ZXJzIHBs
dWdpbnMgZHVyaW5nIHN0YXJ0dXAgPHBsdWdpbm9yZGVyPmAuCisKKyAgICA6YXJnIHBhcnNlcjog
VG8gYWRkIGNvbW1hbmQgbGluZSBvcHRpb25zLCBjYWxsCisgICAgICAgIDpweTpmdW5jOmBwYXJz
ZXIuYWRkb3B0aW9uKC4uLikgPF9weXRlc3QuY29uZmlnLlBhcnNlci5hZGRvcHRpb24+YC4KKyAg
ICAgICAgVG8gYWRkIGluaS1maWxlIHZhbHVlcyBjYWxsIDpweTpmdW5jOmBwYXJzZXIuYWRkaW5p
KC4uLikKKyAgICAgICAgPF9weXRlc3QuY29uZmlnLlBhcnNlci5hZGRpbmk+YC4KKworICAgIE9w
dGlvbnMgY2FuIGxhdGVyIGJlIGFjY2Vzc2VkIHRocm91Z2ggdGhlCisgICAgOnB5OmNsYXNzOmBj
b25maWcgPF9weXRlc3QuY29uZmlnLkNvbmZpZz5gIG9iamVjdCwgcmVzcGVjdGl2ZWx5OgorCisg
ICAgLSA6cHk6ZnVuYzpgY29uZmlnLmdldG9wdGlvbihuYW1lKSA8X3B5dGVzdC5jb25maWcuQ29u
ZmlnLmdldG9wdGlvbj5gIHRvCisgICAgICByZXRyaWV2ZSB0aGUgdmFsdWUgb2YgYSBjb21tYW5k
IGxpbmUgb3B0aW9uLgorCisgICAgLSA6cHk6ZnVuYzpgY29uZmlnLmdldGluaShuYW1lKSA8X3B5
dGVzdC5jb25maWcuQ29uZmlnLmdldGluaT5gIHRvIHJldHJpZXZlCisgICAgICBhIHZhbHVlIHJl
YWQgZnJvbSBhbiBpbmktc3R5bGUgZmlsZS4KKworICAgIFRoZSBjb25maWcgb2JqZWN0IGlzIHBh
c3NlZCBhcm91bmQgb24gbWFueSBpbnRlcm5hbCBvYmplY3RzIHZpYSB0aGUgYGAuY29uZmlnYGAK
KyAgICBhdHRyaWJ1dGUgb3IgY2FuIGJlIHJldHJpZXZlZCBhcyB0aGUgYGBweXRlc3Rjb25maWdg
YCBmaXh0dXJlIG9yIGFjY2Vzc2VkCisgICAgdmlhIChkZXByZWNhdGVkKSBgYHB5dGVzdC5jb25m
aWdgYC4KKyAgICAiIiIKKworQGhvb2tzcGVjKGhpc3RvcmljPVRydWUpCitkZWYgcHl0ZXN0X2Nv
bmZpZ3VyZShjb25maWcpOgorICAgICIiIiBjYWxsZWQgYWZ0ZXIgY29tbWFuZCBsaW5lIG9wdGlv
bnMgaGF2ZSBiZWVuIHBhcnNlZAorICAgIGFuZCBhbGwgcGx1Z2lucyBhbmQgaW5pdGlhbCBjb25m
dGVzdCBmaWxlcyBiZWVuIGxvYWRlZC4KKyAgICBUaGlzIGhvb2sgaXMgY2FsbGVkIGZvciBldmVy
eSBwbHVnaW4uCisgICAgIiIiCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBCb290c3RyYXBwaW5n
IGhvb2tzIGNhbGxlZCBmb3IgcGx1Z2lucyByZWdpc3RlcmVkIGVhcmx5IGVub3VnaDoKKyMgaW50
ZXJuYWwgYW5kIDNyZCBwYXJ0eSBwbHVnaW5zIGFzIHdlbGwgYXMgZGlyZWN0bHkKKyMgZGlzY292
ZXJhYmxlIGNvbmZ0ZXN0LnB5IGxvY2FsIHBsdWdpbnMuCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
QGhvb2tzcGVjKGZpcnN0cmVzdWx0PVRydWUpCitkZWYgcHl0ZXN0X2NtZGxpbmVfcGFyc2UocGx1
Z2lubWFuYWdlciwgYXJncyk6CisgICAgIiIicmV0dXJuIGluaXRpYWxpemVkIGNvbmZpZyBvYmpl
Y3QsIHBhcnNpbmcgdGhlIHNwZWNpZmllZCBhcmdzLiAiIiIKKworZGVmIHB5dGVzdF9jbWRsaW5l
X3ByZXBhcnNlKGNvbmZpZywgYXJncyk6CisgICAgIiIiKGRlcHJlY2F0ZWQpIG1vZGlmeSBjb21t
YW5kIGxpbmUgYXJndW1lbnRzIGJlZm9yZSBvcHRpb24gcGFyc2luZy4gIiIiCisKK0Bob29rc3Bl
YyhmaXJzdHJlc3VsdD1UcnVlKQorZGVmIHB5dGVzdF9jbWRsaW5lX21haW4oY29uZmlnKToKKyAg
ICAiIiIgY2FsbGVkIGZvciBwZXJmb3JtaW5nIHRoZSBtYWluIGNvbW1hbmQgbGluZSBhY3Rpb24u
IFRoZSBkZWZhdWx0CisgICAgaW1wbGVtZW50YXRpb24gd2lsbCBpbnZva2UgdGhlIGNvbmZpZ3Vy
ZSBob29rcyBhbmQgcnVudGVzdF9tYWlubG9vcC4gIiIiCisKK2RlZiBweXRlc3RfbG9hZF9pbml0
aWFsX2NvbmZ0ZXN0cyhlYXJseV9jb25maWcsIHBhcnNlciwgYXJncyk6CisgICAgIiIiIGltcGxl
bWVudHMgdGhlIGxvYWRpbmcgb2YgaW5pdGlhbCBjb25mdGVzdCBmaWxlcyBhaGVhZAorICAgIG9m
IGNvbW1hbmQgbGluZSBvcHRpb24gcGFyc2luZy4gIiIiCisKKworIyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisjIGNvbGxlY3Rpb24gaG9va3MKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitAaG9va3NwZWMoZmly
c3RyZXN1bHQ9VHJ1ZSkKK2RlZiBweXRlc3RfY29sbGVjdGlvbihzZXNzaW9uKToKKyAgICAiIiIg
cGVyZm9ybSB0aGUgY29sbGVjdGlvbiBwcm90b2NvbCBmb3IgdGhlIGdpdmVuIHNlc3Npb24uICIi
IgorCitkZWYgcHl0ZXN0X2NvbGxlY3Rpb25fbW9kaWZ5aXRlbXMoc2Vzc2lvbiwgY29uZmlnLCBp
dGVtcyk6CisgICAgIiIiIGNhbGxlZCBhZnRlciBjb2xsZWN0aW9uIGhhcyBiZWVuIHBlcmZvcm1l
ZCwgbWF5IGZpbHRlciBvciByZS1vcmRlcgorICAgIHRoZSBpdGVtcyBpbi1wbGFjZS4iIiIKKwor
ZGVmIHB5dGVzdF9jb2xsZWN0aW9uX2ZpbmlzaChzZXNzaW9uKToKKyAgICAiIiIgY2FsbGVkIGFm
dGVyIGNvbGxlY3Rpb24gaGFzIGJlZW4gcGVyZm9ybWVkIGFuZCBtb2RpZmllZC4gIiIiCisKK0Bo
b29rc3BlYyhmaXJzdHJlc3VsdD1UcnVlKQorZGVmIHB5dGVzdF9pZ25vcmVfY29sbGVjdChwYXRo
LCBjb25maWcpOgorICAgICIiIiByZXR1cm4gVHJ1ZSB0byBwcmV2ZW50IGNvbnNpZGVyaW5nIHRo
aXMgcGF0aCBmb3IgY29sbGVjdGlvbi4KKyAgICBUaGlzIGhvb2sgaXMgY29uc3VsdGVkIGZvciBh
bGwgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHByaW9yIHRvIGNhbGxpbmcKKyAgICBtb3JlIHNwZWNp
ZmljIGhvb2tzLgorICAgICIiIgorCitAaG9va3NwZWMoZmlyc3RyZXN1bHQ9VHJ1ZSkKK2RlZiBw
eXRlc3RfY29sbGVjdF9kaXJlY3RvcnkocGF0aCwgcGFyZW50KToKKyAgICAiIiIgY2FsbGVkIGJl
Zm9yZSB0cmF2ZXJzaW5nIGEgZGlyZWN0b3J5IGZvciBjb2xsZWN0aW9uIGZpbGVzLiAiIiIKKwor
ZGVmIHB5dGVzdF9jb2xsZWN0X2ZpbGUocGF0aCwgcGFyZW50KToKKyAgICAiIiIgcmV0dXJuIGNv
bGxlY3Rpb24gTm9kZSBvciBOb25lIGZvciB0aGUgZ2l2ZW4gcGF0aC4gQW55IG5ldyBub2RlCisg
ICAgbmVlZHMgdG8gaGF2ZSB0aGUgc3BlY2lmaWVkIGBgcGFyZW50YGAgYXMgYSBwYXJlbnQuIiIi
CisKKyMgbG9nZ2luZyBob29rcyBmb3IgY29sbGVjdGlvbgorZGVmIHB5dGVzdF9jb2xsZWN0c3Rh
cnQoY29sbGVjdG9yKToKKyAgICAiIiIgY29sbGVjdG9yIHN0YXJ0cyBjb2xsZWN0aW5nLiAiIiIK
KworZGVmIHB5dGVzdF9pdGVtY29sbGVjdGVkKGl0ZW0pOgorICAgICIiIiB3ZSBqdXN0IGNvbGxl
Y3RlZCBhIHRlc3QgaXRlbS4gIiIiCisKK2RlZiBweXRlc3RfY29sbGVjdHJlcG9ydChyZXBvcnQp
OgorICAgICIiIiBjb2xsZWN0b3IgZmluaXNoZWQgY29sbGVjdGluZy4gIiIiCisKK2RlZiBweXRl
c3RfZGVzZWxlY3RlZChpdGVtcyk6CisgICAgIiIiIGNhbGxlZCBmb3IgdGVzdCBpdGVtcyBkZXNl
bGVjdGVkIGJ5IGtleXdvcmQuICIiIgorCitAaG9va3NwZWMoZmlyc3RyZXN1bHQ9VHJ1ZSkKK2Rl
ZiBweXRlc3RfbWFrZV9jb2xsZWN0X3JlcG9ydChjb2xsZWN0b3IpOgorICAgICIiIiBwZXJmb3Jt
IGBgY29sbGVjdG9yLmNvbGxlY3QoKWBgIGFuZCByZXR1cm4gYSBDb2xsZWN0UmVwb3J0LiAiIiIK
KworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFB5dGhvbiB0ZXN0IGZ1bmN0aW9uIHJlbGF0ZWQgaG9v
a3MKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitAaG9va3NwZWMoZmlyc3RyZXN1bHQ9VHJ1ZSkKK2Rl
ZiBweXRlc3RfcHljb2xsZWN0X21ha2Vtb2R1bGUocGF0aCwgcGFyZW50KToKKyAgICAiIiIgcmV0
dXJuIGEgTW9kdWxlIGNvbGxlY3RvciBvciBOb25lIGZvciB0aGUgZ2l2ZW4gcGF0aC4KKyAgICBU
aGlzIGhvb2sgd2lsbCBiZSBjYWxsZWQgZm9yIGVhY2ggbWF0Y2hpbmcgdGVzdCBtb2R1bGUgcGF0
aC4KKyAgICBUaGUgcHl0ZXN0X2NvbGxlY3RfZmlsZSBob29rIG5lZWRzIHRvIGJlIHVzZWQgaWYg
eW91IHdhbnQgdG8KKyAgICBjcmVhdGUgdGVzdCBtb2R1bGVzIGZvciBmaWxlcyB0aGF0IGRvIG5v
dCBtYXRjaCBhcyBhIHRlc3QgbW9kdWxlLgorICAgICIiIgorCitAaG9va3NwZWMoZmlyc3RyZXN1
bHQ9VHJ1ZSkKK2RlZiBweXRlc3RfcHljb2xsZWN0X21ha2VpdGVtKGNvbGxlY3RvciwgbmFtZSwg
b2JqKToKKyAgICAiIiIgcmV0dXJuIGN1c3RvbSBpdGVtL2NvbGxlY3RvciBmb3IgYSBweXRob24g
b2JqZWN0IGluIGEgbW9kdWxlLCBvciBOb25lLiAgIiIiCisKK0Bob29rc3BlYyhmaXJzdHJlc3Vs
dD1UcnVlKQorZGVmIHB5dGVzdF9weWZ1bmNfY2FsbChweWZ1bmNpdGVtKToKKyAgICAiIiIgY2Fs
bCB1bmRlcmx5aW5nIHRlc3QgZnVuY3Rpb24uICIiIgorCitkZWYgcHl0ZXN0X2dlbmVyYXRlX3Rl
c3RzKG1ldGFmdW5jKToKKyAgICAiIiIgZ2VuZXJhdGUgKG11bHRpcGxlKSBwYXJhbWV0cml6ZWQg
Y2FsbHMgdG8gYSB0ZXN0IGZ1bmN0aW9uLiIiIgorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgZ2Vu
ZXJpYyBydW50ZXN0IHJlbGF0ZWQgaG9va3MKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitAaG9va3Nw
ZWMoZmlyc3RyZXN1bHQ9VHJ1ZSkKK2RlZiBweXRlc3RfcnVudGVzdGxvb3Aoc2Vzc2lvbik6Cisg
ICAgIiIiIGNhbGxlZCBmb3IgcGVyZm9ybWluZyB0aGUgbWFpbiBydW50ZXN0IGxvb3AKKyAgICAo
YWZ0ZXIgY29sbGVjdGlvbiBmaW5pc2hlZCkuICIiIgorCitkZWYgcHl0ZXN0X2l0ZW1zdGFydChp
dGVtLCBub2RlKToKKyAgICAiIiIgKGRlcHJlY2F0ZWQsIHVzZSBweXRlc3RfcnVudGVzdF9sb2dz
dGFydCkuICIiIgorCitAaG9va3NwZWMoZmlyc3RyZXN1bHQ9VHJ1ZSkKK2RlZiBweXRlc3RfcnVu
dGVzdF9wcm90b2NvbChpdGVtLCBuZXh0aXRlbSk6CisgICAgIiIiIGltcGxlbWVudHMgdGhlIHJ1
bnRlc3Rfc2V0dXAvY2FsbC90ZWFyZG93biBwcm90b2NvbCBmb3IKKyAgICB0aGUgZ2l2ZW4gdGVz
dCBpdGVtLCBpbmNsdWRpbmcgY2FwdHVyaW5nIGV4Y2VwdGlvbnMgYW5kIGNhbGxpbmcKKyAgICBy
ZXBvcnRpbmcgaG9va3MuCisKKyAgICA6YXJnIGl0ZW06IHRlc3QgaXRlbSBmb3Igd2hpY2ggdGhl
IHJ1bnRlc3QgcHJvdG9jb2wgaXMgcGVyZm9ybWVkLgorCisgICAgOmFyZyBuZXh0aXRlbTogdGhl
IHNjaGVkdWxlZC10by1iZS1uZXh0IHRlc3QgaXRlbSAob3IgTm9uZSBpZiB0aGlzCisgICAgICAg
ICAgICAgICAgICAgaXMgdGhlIGVuZCBteSBmcmllbmQpLiAgVGhpcyBhcmd1bWVudCBpcyBwYXNz
ZWQgb24gdG8KKyAgICAgICAgICAgICAgICAgICA6cHk6ZnVuYzpgcHl0ZXN0X3J1bnRlc3RfdGVh
cmRvd25gLgorCisgICAgOnJldHVybiBib29sZWFuOiBUcnVlIGlmIG5vIGZ1cnRoZXIgaG9vayBp
bXBsZW1lbnRhdGlvbnMgc2hvdWxkIGJlIGludm9rZWQuCisgICAgIiIiCisKK2RlZiBweXRlc3Rf
cnVudGVzdF9sb2dzdGFydChub2RlaWQsIGxvY2F0aW9uKToKKyAgICAiIiIgc2lnbmFsIHRoZSBz
dGFydCBvZiBydW5uaW5nIGEgc2luZ2xlIHRlc3QgaXRlbS4gIiIiCisKK2RlZiBweXRlc3RfcnVu
dGVzdF9zZXR1cChpdGVtKToKKyAgICAiIiIgY2FsbGVkIGJlZm9yZSBgYHB5dGVzdF9ydW50ZXN0
X2NhbGwoaXRlbSlgYC4gIiIiCisKK2RlZiBweXRlc3RfcnVudGVzdF9jYWxsKGl0ZW0pOgorICAg
ICIiIiBjYWxsZWQgdG8gZXhlY3V0ZSB0aGUgdGVzdCBgYGl0ZW1gYC4gIiIiCisKK2RlZiBweXRl
c3RfcnVudGVzdF90ZWFyZG93bihpdGVtLCBuZXh0aXRlbSk6CisgICAgIiIiIGNhbGxlZCBhZnRl
ciBgYHB5dGVzdF9ydW50ZXN0X2NhbGxgYC4KKworICAgIDphcmcgbmV4dGl0ZW06IHRoZSBzY2hl
ZHVsZWQtdG8tYmUtbmV4dCB0ZXN0IGl0ZW0gKE5vbmUgaWYgbm8gZnVydGhlcgorICAgICAgICAg
ICAgICAgICAgIHRlc3QgaXRlbSBpcyBzY2hlZHVsZWQpLiAgVGhpcyBhcmd1bWVudCBjYW4gYmUg
dXNlZCB0bworICAgICAgICAgICAgICAgICAgIHBlcmZvcm0gZXhhY3QgdGVhcmRvd25zLCBpLmUu
IGNhbGxpbmcganVzdCBlbm91Z2ggZmluYWxpemVycworICAgICAgICAgICAgICAgICAgIHNvIHRo
YXQgbmV4dGl0ZW0gb25seSBuZWVkcyB0byBjYWxsIHNldHVwLWZ1bmN0aW9ucy4KKyAgICAiIiIK
KworQGhvb2tzcGVjKGZpcnN0cmVzdWx0PVRydWUpCitkZWYgcHl0ZXN0X3J1bnRlc3RfbWFrZXJl
cG9ydChpdGVtLCBjYWxsKToKKyAgICAiIiIgcmV0dXJuIGEgOnB5OmNsYXNzOmBfcHl0ZXN0LnJ1
bm5lci5UZXN0UmVwb3J0YCBvYmplY3QKKyAgICBmb3IgdGhlIGdpdmVuIDpweTpjbGFzczpgcHl0
ZXN0Lkl0ZW1gIGFuZAorICAgIDpweTpjbGFzczpgX3B5dGVzdC5ydW5uZXIuQ2FsbEluZm9gLgor
ICAgICIiIgorCitkZWYgcHl0ZXN0X3J1bnRlc3RfbG9ncmVwb3J0KHJlcG9ydCk6CisgICAgIiIi
IHByb2Nlc3MgYSB0ZXN0IHNldHVwL2NhbGwvdGVhcmRvd24gcmVwb3J0IHJlbGF0aW5nIHRvCisg
ICAgdGhlIHJlc3BlY3RpdmUgcGhhc2Ugb2YgZXhlY3V0aW5nIGEgdGVzdC4gIiIiCisKKyMgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorIyB0ZXN0IHNlc3Npb24gcmVsYXRlZCBob29rcworIyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKK2RlZiBweXRlc3Rfc2Vzc2lvbnN0YXJ0KHNlc3Npb24pOgorICAgICIiIiBiZWZv
cmUgc2Vzc2lvbi5tYWluKCkgaXMgY2FsbGVkLiAiIiIKKworZGVmIHB5dGVzdF9zZXNzaW9uZmlu
aXNoKHNlc3Npb24sIGV4aXRzdGF0dXMpOgorICAgICIiIiB3aG9sZSB0ZXN0IHJ1biBmaW5pc2hl
cy4gIiIiCisKK2RlZiBweXRlc3RfdW5jb25maWd1cmUoY29uZmlnKToKKyAgICAiIiIgY2FsbGVk
IGJlZm9yZSB0ZXN0IHByb2Nlc3MgaXMgZXhpdGVkLiAgIiIiCisKKworIyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisjIGhvb2tzIGZvciBjdXN0b21pc2luZyB0aGUgYXNzZXJ0IG1ldGhvZHMKKyMgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCitkZWYgcHl0ZXN0X2Fzc2VydHJlcHJfY29tcGFyZShjb25maWcsIG9wLCBs
ZWZ0LCByaWdodCk6CisgICAgIiIicmV0dXJuIGV4cGxhbmF0aW9uIGZvciBjb21wYXJpc29ucyBp
biBmYWlsaW5nIGFzc2VydCBleHByZXNzaW9ucy4KKworICAgIFJldHVybiBOb25lIGZvciBubyBj
dXN0b20gZXhwbGFuYXRpb24sIG90aGVyd2lzZSByZXR1cm4gYSBsaXN0CisgICAgb2Ygc3RyaW5n
cy4gIFRoZSBzdHJpbmdzIHdpbGwgYmUgam9pbmVkIGJ5IG5ld2xpbmVzIGJ1dCBhbnkgbmV3bGlu
ZXMKKyAgICAqaW4qIGEgc3RyaW5nIHdpbGwgYmUgZXNjYXBlZC4gIE5vdGUgdGhhdCBhbGwgYnV0
IHRoZSBmaXJzdCBsaW5lIHdpbGwKKyAgICBiZSBpbmRlbnRlZCBzbGlndGhseSwgdGhlIGludGVu
dGlvbiBpcyBmb3IgdGhlIGZpcnN0IGxpbmUgdG8gYmUgYSBzdW1tYXJ5LgorICAgICIiIgorCisj
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKyMgaG9va3MgZm9yIGluZmx1ZW5jaW5nIHJlcG9ydGluZyAoaW52
b2tlZCBmcm9tIF9weXRlc3RfdGVybWluYWwpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZGVmIHB5
dGVzdF9yZXBvcnRfaGVhZGVyKGNvbmZpZywgc3RhcnRkaXIpOgorICAgICIiIiByZXR1cm4gYSBz
dHJpbmcgdG8gYmUgZGlzcGxheWVkIGFzIGhlYWRlciBpbmZvIGZvciB0ZXJtaW5hbCByZXBvcnRp
bmcuIiIiCisKK0Bob29rc3BlYyhmaXJzdHJlc3VsdD1UcnVlKQorZGVmIHB5dGVzdF9yZXBvcnRf
dGVzdHN0YXR1cyhyZXBvcnQpOgorICAgICIiIiByZXR1cm4gcmVzdWx0LWNhdGVnb3J5LCBzaG9y
dGxldHRlciBhbmQgdmVyYm9zZSB3b3JkIGZvciByZXBvcnRpbmcuIiIiCisKK2RlZiBweXRlc3Rf
dGVybWluYWxfc3VtbWFyeSh0ZXJtaW5hbHJlcG9ydGVyKToKKyAgICAiIiIgYWRkIGFkZGl0aW9u
YWwgc2VjdGlvbiBpbiB0ZXJtaW5hbCBzdW1tYXJ5IHJlcG9ydGluZy4gICIiIgorCisKK0Bob29r
c3BlYyhoaXN0b3JpYz1UcnVlKQorZGVmIHB5dGVzdF9sb2d3YXJuaW5nKG1lc3NhZ2UsIGNvZGUs
IG5vZGVpZCwgZnNsb2NhdGlvbik6CisgICAgIiIiIHByb2Nlc3MgYSB3YXJuaW5nIHNwZWNpZmll
ZCBieSBhIG1lc3NhZ2UsIGEgY29kZSBzdHJpbmcsCisgICAgYSBub2RlaWQgYW5kIGZzbG9jYXRp
b24gKGJvdGggb2Ygd2hpY2ggbWF5IGJlIE5vbmUKKyAgICBpZiB0aGUgd2FybmluZyBpcyBub3Qg
dGllZCB0byBhIHBhcnRpbGFyIG5vZGUvbG9jYXRpb24pLiIiIgorCisjIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKyMgZG9jdGVzdCBob29rcworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Bob29rc3BlYyhmaXJz
dHJlc3VsdD1UcnVlKQorZGVmIHB5dGVzdF9kb2N0ZXN0X3ByZXBhcmVfY29udGVudChjb250ZW50
KToKKyAgICAiIiIgcmV0dXJuIHByb2Nlc3NlZCBjb250ZW50IGZvciBhIGdpdmVuIGRvY3Rlc3Qi
IiIKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGVycm9yIGhhbmRsaW5nIGFuZCBpbnRlcm5hbCBk
ZWJ1Z2dpbmcgaG9va3MKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitkZWYgcHl0ZXN0X2ludGVybmFs
ZXJyb3IoZXhjcmVwciwgZXhjaW5mbyk6CisgICAgIiIiIGNhbGxlZCBmb3IgaW50ZXJuYWwgZXJy
b3JzLiAiIiIKKworZGVmIHB5dGVzdF9rZXlib2FyZF9pbnRlcnJ1cHQoZXhjaW5mbyk6CisgICAg
IiIiIGNhbGxlZCBmb3Iga2V5Ym9hcmQgaW50ZXJydXB0LiAiIiIKKworZGVmIHB5dGVzdF9leGNl
cHRpb25faW50ZXJhY3Qobm9kZSwgY2FsbCwgcmVwb3J0KToKKyAgICAiIiJjYWxsZWQgd2hlbiBh
biBleGNlcHRpb24gd2FzIHJhaXNlZCB3aGljaCBjYW4gcG90ZW50aWFsbHkgYmUKKyAgICBpbnRl
cmFjdGl2ZWx5IGhhbmRsZWQuCisKKyAgICBUaGlzIGhvb2sgaXMgb25seSBjYWxsZWQgaWYgYW4g
ZXhjZXB0aW9uIHdhcyByYWlzZWQKKyAgICB0aGF0IGlzIG5vdCBhbiBpbnRlcm5hbCBleGNlcHRp
b24gbGlrZSBgYHNraXAuRXhjZXB0aW9uYGAuCisgICAgIiIiCisKK2RlZiBweXRlc3RfZW50ZXJf
cGRiKGNvbmZpZyk6CisgICAgIiIiIGNhbGxlZCB1cG9uIHBkYi5zZXRfdHJhY2UoKSwgY2FuIGJl
IHVzZWQgYnkgcGx1Z2lucyB0byB0YWtlIHNwZWNpYWwKKyAgICBhY3Rpb24ganVzdCBiZWZvcmUg
dGhlIHB5dGhvbiBkZWJ1Z2dlciBlbnRlcnMgaW4gaW50ZXJhY3RpdmUgbW9kZS4KKworICAgIDph
cmcgY29uZmlnOiBweXRlc3QgY29uZmlnIG9iamVjdAorICAgIDp0eXBlIGNvbmZpZzogX3B5dGVz
dC5jb25maWcuQ29uZmlnCisgICAgIiIiCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBv
cnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvaW1wbCBiL1dlYkRyaXZlclRlc3RzL2ltcG9y
dGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9pbXBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi44ODllMzdlNWFiYwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZl
clRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9pbXBsCkBAIC0wLDAgKzEs
MjU0IEBACitTb3J0aW5nIHBlci1yZXNvdXJjZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworZm9yIGFueSBnaXZlbiBzZXQgb2YgaXRlbXM6CisKKy0gY29sbGVjdCBpdGVtcyBwZXIg
c2Vzc2lvbi1zY29wZWQgcGFyYW1ldHJpemVkIGZ1bmNhcmcKKy0gcmUtb3JkZXIgdW50aWwgaXRl
bXMgbm8gcGFyYW1ldHJpemF0aW9ucyBhcmUgbWl4ZWQKKworICBleGFtcGxlczoKKworICAgICAg
ICB0ZXN0KCkKKyAgICAgICAgdGVzdDEoczEpCisgICAgICAgIHRlc3QxKHMyKSAgICAgCisgICAg
ICAgIHRlc3QyKCkKKyAgICAgICAgdGVzdDMoczEpCisgICAgICAgIHRlc3QzKHMyKQorCisgIGdl
dHMgc29ydGVkIHRvOgorCisgICAgICAgIHRlc3QoKQorICAgICAgICB0ZXN0MigpCisgICAgICAg
IHRlc3QxKHMxKQorICAgICAgICB0ZXN0MyhzMSkKKyAgICAgICAgdGVzdDEoczIpCisgICAgICAg
IHRlc3QzKHMyKQorIAorCit0aGUgbmV3IEBzZXR1cCBmdW5jdGlvbnMgCistLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb25zaWRlciBhIGdpdmVuIEBzZXR1cC1tYXJr
ZWQgZnVuY3Rpb246OgorCisgICAgQHB5dGVzdC5tYXJrLnNldHVwKG1heHNjb3BlPVNDT1BFKQor
ICAgIGRlZiBteXNldHVwKHJlcXVlc3QsIGFyZzEsIGFyZzIsIC4uLikKKyAgICAgICAgLi4uCisg
ICAgICAgIHJlcXVlc3QuYWRkZmluYWxpemVyKGZpbikKKyAgICAgICAgLi4uCisKK3RoZW4gRlVO
Q0FSR1NFVCBkZW5vdGVzIHRoZSBzZXQgb2YgKGFyZzEsIGFyZzIsIC4uLikgZnVuY2FyZ3MgYW5k
CithbGwgb2YgaXRzIGRlcGVuZGVudCBmdW5jYXJncy4gIFRoZSBteXNldHVwIGZ1bmN0aW9uIHdp
bGwgZXhlY3V0ZQorZm9yIGFueSBtYXRjaGluZyB0ZXN0IGl0ZW0gb25jZSBwZXIgc2NvcGUuICAK
KworVGhlIHNjb3BlIGlzIGRldGVybWluZWQgYXMgdGhlIG1pbmltdW0gc2NvcGUgb2YgYWxsIHNj
b3BlcyBvZiB0aGUgYXJncworaW4gRlVOQ0FSR1NFVCBhbmQgdGhlIGdpdmVuICJtYXhzY29wZSIu
IAorCitJZiBteXNldHVwIGhhcyBiZWVuIGNhbGxlZCBhbmQgbm8gZmluYWxpemVycyBoYXZlIGJl
ZW4gY2FsbGVkIGl0IGlzCitjYWxsZWQgImFjdGl2ZSIuCisKK0Z1cnRoZXJtb3JlIHRoZSBmb2xs
b3dpbmcgcnVsZXMgYXBwbHk6CisKKy0gaWYgYW4gYXJnIHZhbHVlIGluIEZVTkNBUkdTRVQgaXMg
YWJvdXQgdG8gYmUgdG9ybiBkb3duLCB0aGUgCisgIG15c2V0dXAtcmVnaXN0ZXJlZCBmaW5hbGl6
ZXJzIHdpbGwgZXhlY3V0ZSBhcyB3ZWxsLgorCistIFRoZXJlIHdpbGwgbmV2ZXIgYmUgdHdvIGFj
dGl2ZSBteXNldHVwIGludm9jYXRpb25zLgorCitFeGFtcGxlIDEsIHNlc3Npb24gc2NvcGU6Ogor
CisgICAgQHB5dGVzdC5tYXJrLmZ1bmNhcmcoc2NvcGU9InNlc3Npb24iLCBwYXJhbXM9WzEsMl0p
CisgICAgZGVmIGRiKHJlcXVlc3QpOgorICAgICAgICByZXF1ZXN0LmFkZGZpbmFsaXplcihkYl9m
aW5hbGl6ZSkKKworICAgIEBweXRlc3QubWFyay5zZXR1cAorICAgIGRlZiBteXNldHVwKHJlcXVl
c3QsIGRiKToKKyAgICAgICAgcmVxdWVzdC5hZGRmaW5hbGl6ZXIobXlzZXR1cF9maW5hbGl6ZSkK
KyAgICAgICAgLi4uCisKK0FuZCBhIGdpdmVuIHRlc3QgbW9kdWxlOgorCisgICAgZGVmIHRlc3Rf
c29tZXRoaW5nKCk6CisgICAgICAgIC4uLgorICAgIGRlZiB0ZXN0X290aGVydGhpbmcoKToKKyAg
ICAgICAgcGFzcworCitIZXJlIGlzIHdoYXQgaGFwcGVuczo6CisKKyAgICBkYihyZXF1ZXN0KSBl
eGVjdXRlcyB3aXRoIHJlcXVlc3QucGFyYW0gPT0gMQorICAgICAgICBteXNldHVwKHJlcXVlc3Qs
IGRiKSBleGVjdXRlcworICAgICAgICAgICAgdGVzdF9zb21ldGhpbmcoKSBleGVjdXRlcworICAg
ICAgICAgICAgdGVzdF9vdGhlcnRoaW5nKCkgZXhlY3V0ZXMKKyAgICAgICAgICAgIG15c2V0dXBf
ZmluYWxpemUoKSBleGVjdXRlcworICAgIGRiX2ZpbmFsaXplKCkgZXhlY3V0ZXMKKyAgICBkYihy
ZXF1ZXN0KSBleGVjdXRlcyB3aXRoIHJlcXVlc3QucGFyYW0gPT0gMgorICAgICAgICBteXNldHVw
KHJlcXVlc3QsIGRiKSBleGVjdXRlcworICAgICAgICAgICAgdGVzdF9zb21ldGhpbmcoKSBleGVj
dXRlcworICAgICAgICAgICAgdGVzdF9vdGhlcnRoaW5nKCkgZXhlY3V0ZXMKKyAgICAgICAgbXlz
ZXR1cF9maW5hbGl6ZSgpIGV4ZWN1dGVzCisgICAgZGJfZmluYWxpemUoKSBleGVjdXRlcworCitF
eGFtcGxlIDIsIHNlc3Npb24vZnVuY3Rpb24gc2NvcGU6OgorCisgICAgQHB5dGVzdC5tYXJrLmZ1
bmNhcmcoc2NvcGU9InNlc3Npb24iLCBwYXJhbXM9WzEsMl0pCisgICAgZGVmIGRiKHJlcXVlc3Qp
OgorICAgICAgICByZXF1ZXN0LmFkZGZpbmFsaXplcihkYl9maW5hbGl6ZSkKKworICAgIEBweXRl
c3QubWFyay5zZXR1cChzY29wZT0iZnVuY3Rpb24iKQorICAgIGRlZiBteXNldHVwKHJlcXVlc3Qs
IGRiKToKKyAgICAgICAgLi4uCisgICAgICAgIHJlcXVlc3QuYWRkZmluYWxpemVyKG15c2V0dXBf
ZmluYWxpemUpCisgICAgICAgIC4uLgorCitBbmQgYSBnaXZlbiB0ZXN0IG1vZHVsZToKKworICAg
IGRlZiB0ZXN0X3NvbWV0aGluZygpOgorICAgICAgICAuLi4KKyAgICBkZWYgdGVzdF9vdGhlcnRo
aW5nKCk6CisgICAgICAgIHBhc3MKKworSGVyZSBpcyB3aGF0IGhhcHBlbnM6OgorCisgICAgZGIo
cmVxdWVzdCkgZXhlY3V0ZXMgd2l0aCByZXF1ZXN0LnBhcmFtID09IDEKKyAgICAgICAgbXlzZXR1
cChyZXF1ZXN0LCBkYikgZXhlY3V0ZXMKKyAgICAgICAgICAgIHRlc3Rfc29tZXRoaW5nKCkgZXhl
Y3V0ZXMKKyAgICAgICAgbXlzZXR1cF9maW5hbGl6ZSgpIGV4ZWN1dGVzCisgICAgICAgIG15c2V0
dXAocmVxdWVzdCwgZGIpIGV4ZWN1dGVzCisgICAgICAgICAgICB0ZXN0X290aGVydGhpbmcoKSBl
eGVjdXRlcworICAgICAgICBteXNldHVwX2ZpbmFsaXplKCkgZXhlY3V0ZXMKKyAgICBkYl9maW5h
bGl6ZSgpIGV4ZWN1dGVzCisgICAgZGIocmVxdWVzdCkgZXhlY3V0ZXMgd2l0aCByZXF1ZXN0LnBh
cmFtID09IDIKKyAgICAgICAgbXlzZXR1cChyZXF1ZXN0LCBkYikgZXhlY3V0ZXMKKyAgICAgICAg
ICAgIHRlc3Rfc29tZXRoaW5nKCkgZXhlY3V0ZXMKKyAgICAgICAgbXlzZXR1cF9maW5hbGl6ZSgp
IGV4ZWN1dGVzCisgICAgICAgIG15c2V0dXAocmVxdWVzdCwgZGIpIGV4ZWN1dGVzCisgICAgICAg
ICAgICB0ZXN0X290aGVydGhpbmcoKSBleGVjdXRlcworICAgICAgICBteXNldHVwX2ZpbmFsaXpl
KCkgZXhlY3V0ZXMKKyAgICBkYl9maW5hbGl6ZSgpIGV4ZWN1dGVzCisKKworRXhhbXBsZSAzIC0g
ZnVuY2FyZ3Mgc2Vzc2lvbi1taXgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKworU2ltaWxhciB3aXRoIGZ1bmNhcmdzLCBhbiBleGFtcGxlOjoKKworICAgIEBweXRl
c3QubWFyay5mdW5jYXJnKHNjb3BlPSJzZXNzaW9uIiwgcGFyYW1zPVsxLDJdKQorICAgIGRlZiBk
YihyZXF1ZXN0KToKKyAgICAgICAgcmVxdWVzdC5hZGRmaW5hbGl6ZXIoZGJfZmluYWxpemUpCisK
KyAgICBAcHl0ZXN0Lm1hcmsuZnVuY2FyZyhzY29wZT0iZnVuY3Rpb24iKQorICAgIGRlZiB0YWJs
ZShyZXF1ZXN0LCBkYik6CisgICAgICAgIC4uLgorICAgICAgICByZXF1ZXN0LmFkZGZpbmFsaXpl
cih0YWJsZV9maW5hbGl6ZSkKKyAgICAgICAgLi4uCisKK0FuZCBhIGdpdmVuIHRlc3QgbW9kdWxl
OgorCisgICAgZGVmIHRlc3Rfc29tZXRoaW5nKHRhYmxlKToKKyAgICAgICAgLi4uCisgICAgZGVm
IHRlc3Rfb3RoZXJ0aGluZyh0YWJsZSk6CisgICAgICAgIHBhc3MKKyAgICBkZWYgdGVzdF90aGly
ZHRoaW5nKCk6CisgICAgICAgIHBhc3MKKworSGVyZSBpcyB3aGF0IGhhcHBlbnM6OgorCisgICAg
ZGIocmVxdWVzdCkgZXhlY3V0ZXMgd2l0aCBwYXJhbSA9PSAxCisgICAgICAgIHRhYmxlKHJlcXVl
c3QsIGRiKQorICAgICAgICAgICAgdGVzdF9zb21ldGhpbmcodGFibGUpCisgICAgICAgIHRhYmxl
X2ZpbmFsaXplKCkKKyAgICAgICAgdGFibGUocmVxdWVzdCwgZGIpCisgICAgICAgICAgICB0ZXN0
X290aGVydGhpbmcodGFibGUpCisgICAgICAgIHRhYmxlX2ZpbmFsaXplKCkKKyAgICBkYl9maW5h
bGl6ZQorICAgIGRiKHJlcXVlc3QpIGV4ZWN1dGVzIHdpdGggcGFyYW0gPT0gMgorICAgICAgICB0
YWJsZShyZXF1ZXN0LCBkYikKKyAgICAgICAgICAgIHRlc3Rfc29tZXRoaW5nKHRhYmxlKQorICAg
ICAgICB0YWJsZV9maW5hbGl6ZSgpCisgICAgICAgIHRhYmxlKHJlcXVlc3QsIGRiKQorICAgICAg
ICAgICAgdGVzdF9vdGhlcnRoaW5nKHRhYmxlKQorICAgICAgICB0YWJsZV9maW5hbGl6ZSgpCisg
ICAgZGJfZmluYWxpemUKKyAgICB0ZXN0X3RoaXJkdGhpbmcoKQorICAgIAorRGF0YSBzdHJ1Y3R1
cmVzCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitweXRlc3QgaW50ZXJuYWxseSBtYWludGFpbnMg
YSBkaWN0IG9mIGFjdGl2ZSBmdW5jYXJncyB3aXRoIGNhY2hlLCBwYXJhbSwKK2ZpbmFsaXplciwg
KHNjb3BlaXRlbT8pIGluZm9ybWF0aW9uOgorCisgICAgYWN0aXZlX2Z1bmNhcmdzID0gZGljdCgp
CisKK2lmIGEgcGFyYW1ldHJpemVkICJkYiIgaXMgYWN0aXZhdGVkOgorICAgIAorICAgIGFjdGl2
ZV9mdW5jYXJnc1siZGIiXSA9IEZ1bmNhcmdJbmZvKGRidmFsdWUsIHBhcmFtaW5kZXgsIAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmNhcmdGaW5hbGl6ZSguLi4p
LCBzY29wZWl0ZW0pCisKK2lmIGEgdGVzdCBpcyB0b3JuIGRvd24gYW5kIHRoZSBuZXh0IHRlc3Qg
cmVxdWlyZXMgYSBkaWZmZXJlbnRseSAKK3BhcmFtZXRyaXplZCAiZGIiOgorCisgICAgZm9yIGFy
Z25hbWUgaW4gaXRlbS5jYWxsc3BlYy5wYXJhbXM6CisgICAgICAgIGlmIGFyZ25hbWUgaW4gYWN0
aXZlX2Z1bmNhcmdzOgorICAgICAgICAgICAgZnVuY2FyZ2luZm8gPSBhY3RpdmVfZnVuY2FyZ3Nb
YXJnbmFtZV0KKyAgICAgICAgICAgIGlmIGZ1bmNhcmdpbmZvLnBhcmFtICE9IGl0ZW0uY2FsbHNw
ZWMucGFyYW1zW2FyZ25hbWVdOgorICAgICAgICAgICAgICAgIGZ1bmNhcmdpbmZvLmNhbGxmaW5h
bGl6ZXIoKQorICAgICAgICAgICAgICAgIGRlbCBub2RlMmZ1bmNhcmdbZnVuY2FyZ2luZm8uc2Nv
cGVpdGVtXQorICAgICAgICAgICAgICAgIGRlbCBhY3RpdmVfZnVuY2FyZ3NbYXJnbmFtZV0KKyAg
ICBub2Rlc190b19iZV90b3JuX2Rvd24gPSAuLi4KKyAgICBmb3Igbm9kZSBpbiBub2Rlc190b19i
ZV90b3JuX2Rvd246CisgICAgICAgIGlmIG5vZGUgaW4gbm9kZTJmdW5jYXJnOgorICAgICAgICAg
ICAgYXJnbmFtZSA9IG5vZGUyZnVuY2FyZ1tub2RlXQorICAgICAgICAgICAgYWN0aXZlX2Z1bmNh
cmdzW2FyZ25hbWVdLmNhbGxmaW5hbGl6ZXIoKQorICAgICAgICAgICAgZGVsIG5vZGUyZnVuY2Fy
Z1tub2RlXQorICAgICAgICAgICAgZGVsIGFjdGl2ZV9mdW5jYXJnc1thcmduYW1lXQorCitpZiBh
IHRlc3QgaXMgc2V0dXAgcmVxdWlyaW5nIGEgImRiIiBmdW5jYXJnOgorCisgICAgaWYgImRiIiBp
biBhY3RpdmVfZnVuY2FyZ3M6CisgICAgICAgIHJldHVybiBhY3RpdmVfZnVuY2FyZ3NbImRiIl1b
MF0KKyAgICBmdW5jYXJnaW5mbyA9IHNldHVwX2Z1bmNhcmcoKQorICAgIGFjdGl2ZV9mdW5jYXJn
c1siZGIiXSA9IGZ1bmNhcmdpbmZvCisgICAgbm9kZTJmdW5jYXJnW2Z1bmNhcmdpbmZvLnNjb3Bl
aXRlbV0gPSAiZGIiCisKK0ltcGxlbWVudGF0aW9uIHBsYW4gZm9yIHJlc291cmNlcworLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzEuIFJldmVydCBGdW5jYXJn
UmVxdWVzdCB0byB0aGUgb2xkIGZvcm0sIHVubWVyZ2UgaXRlbS9yZXF1ZXN0CisgICAoZG9uZSkK
KzIuIG1ha2UgZnVuY2FyZyBmYWN0b3JpZXMgYmUgZGlzY292ZXJlZCBhdCBjb2xsZWN0aW9uIHRp
bWUKKzMuIEludHJvZHVjZSBmdW5jYXJnIG1hcmtlcgorNC4gSW50cm9kdWNlIGZ1bmNhcmcgc2Nv
cGUgcGFyYW1ldGVyCis1LiBJbnRyb2R1Y2UgZnVuY2FyZyBwYXJhbWV0cml6ZSBwYXJhbWV0ZXIK
KzYuIG1ha2Ugc2V0dXAgZnVuY3Rpb25zIGJlIGRpc2NvdmVyZWQgYXQgY29sbGVjdGlvbiB0aW1l
Cis3LiAoSW50cm9kdWNlIGEgcHl0ZXN0X2ZpeHR1cmVfcHJvdG9jb2wvc2V0dXBfZnVuY2FyZ3Mg
aG9vaykKKworbWV0aG9kcyBhbmQgZGF0YSBzdHJ1Y3R1cmVzCistLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCitBIEZ1bmNhcmNNYW5hZ2VyIGhvbGRzIGFsbCBpbmZvcm1hdGlvbiBh
Ym91dCBmdW5jYXJnIGRlZmluaXRpb25zCitpbmNsdWRpbmcgcGFyYW1ldHJpemF0aW9uIGFuZCBz
Y29wZSBkZWZpbml0aW9ucy4gIEl0IGltcGxlbWVudHMKK2EgcHl0ZXN0X2dlbmVyYXRlX3Rlc3Rz
IGhvb2sgd2hpY2ggcGVyZm9ybXMgcGFyYW1ldHJpemF0aW9uIGFzIGFwcHJvcHJpYXRlLgorCith
cyBhIHNpbXBsZSBleGFtcGxlLCBsZXQncyBjb25zaWRlciBhIHRyZWUgd2hlcmUgYSB0ZXN0IGZ1
bmN0aW9uIHJlcXVpcmVzCithICJhYmMiIGZ1bmNhcmcgYW5kIGl0cyBmYWN0b3J5IGRlZmluZXMg
aXQgYXMgcGFyYW1ldHJpemVkIGFuZCBzY29wZWQKK2ZvciBNb2R1bGVzLiAgV2hlbiBjb2xsZWN0
aW9ucyBoaXRzIHRoZSBmdW5jdGlvbiBpdGVtLCBpdCBjcmVhdGVzCit0aGUgbWV0YWZ1bmMgb2Jq
ZWN0LCBhbmQgY2FsbHMgZnVuY2FyZ2RiLnB5dGVzdF9nZW5lcmF0ZV90ZXN0cyhtZXRhZnVuYykK
K3doaWNoIGxvb2tzIHVwIGF2YWlsYWJsZSBmdW5jYXJnIGZhY3RvcmllcyBhbmQgdGhlaXIgc2Nv
cGUgYW5kIHBhcmFtZXRyaXphdGlvbi4KK1RoaXMgaW5mb3JtYXRpb24gaXMgZXF1aXZhbGVudCB0
byB3aGF0IGNhbiBiZSBwcm92aWRlZCB0b2RheSBkaXJlY3RseQorYXQgdGhlIGZ1bmN0aW9uIHNp
dGUgYW5kIGl0IHNob3VsZCB0aHVzIGJlIHJlbGF0aXZlbHkgc3RyYWlnaHQgZm9yd2FyZAordG8g
aW1wbGVtZW50IHRoZSBhZGRpdGlvbmFsIHdheSBvZiBkZWZpbmluZyBwYXJhbWV0cml6YXRpb24v
c2NvcGluZy4KKworY29uZnRlc3QgbG9hZGluZzoKKyAgICBlYWNoIGZ1bmNhcmctZmFjdG9yeSB3
aWxsIHBvcHVsYXRlIHRoZSBzZXNzaW9uLmZ1bmNhcmdtYW5hZ2VyCisKK1doZW4gYSB0ZXN0IGl0
ZW0gaXMgY29sbGVjdGVkLCBpdCBncm93cyBhIGRpY3Rpb25hcnkgCisoZnVuY2FyZ25hbWUyZmFj
dG9yeWNhbGxsaXN0KS4gIEEgZmFjdG9yeSBsb29rdXAgaXMgcGVyZm9ybWVkIAorZm9yIGVhY2gg
cmVxdWlyZWQgZnVuY2FyZy4gIFRoZSByZXN1bHRpbmcgZmFjdG9yeSBjYWxsIGlzIHN0b3JlZCAK
K3dpdGggdGhlIGl0ZW0uICBJZiBhIGZ1bmN0aW9uIGlzIHBhcmFtZXRyaXplZCBtdWx0aXBsZSBp
dGVtcyBhcmUgCitjcmVhdGVkIHdpdGggcmVzcGVjdGl2ZSBmYWN0b3J5IGNhbGxzLiBFbHNlIGlm
IGEgZmFjdG9yeSBpcyBwYXJhbWV0cml6ZWQKK211bHRpcGxlIGl0ZW1zIGFuZCBjYWxscyB0byB0
aGUgZmFjdG9yeSBmdW5jdGlvbiBhcmUgY3JlYXRlZCBhcyB3ZWxsLgorCitBdCBzZXR1cCB0aW1l
LCBhbiBpdGVtIHBvcHVsYXRlcyBhIGZ1bmNhcmdzIG1hcHBpbmcsIG1hcHBpbmcgbmFtZXMKK3Rv
IHZhbHVlcy4gIElmIGEgdmFsdWUgaXMgZnVuY2FyZyBmYWN0b3JpZXMgYXJlIHF1ZXJpZWQgZm9y
IGEgZ2l2ZW4gaXRlbQordGVzdCBmdW5jdGlvbnMgYW5kIHNldHVwIGZ1bmN0aW9ucyBhcmUgcHV0
IGluIGEgY2xhc3MKK3doaWNoIGxvb2tzIHVwIHJlcXVpcmVkIGZ1bmNhcmcgZmFjdG9yaWVzLgor
CisKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3Qv
X3B5dGVzdC9qdW5pdHhtbC5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9w
eXRlc3QvX3B5dGVzdC9qdW5pdHhtbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMC4uNjYwZDcxOGE2YTgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9p
bXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvanVuaXR4bWwucHkKQEAgLTAsMCArMSwz
ODcgQEAKKyIiIgorICAgIHJlcG9ydCB0ZXN0IHJlc3VsdHMgaW4gSlVuaXQtWE1MIGZvcm1hdCwK
KyAgICBmb3IgdXNlIHdpdGggSmVua2lucyBhbmQgYnVpbGQgaW50ZWdyYXRpb24gc2VydmVycy4K
KworCitCYXNlZCBvbiBpbml0aWFsIGNvZGUgZnJvbSBSb3NzIExhd2xleS4KKyIiIgorIyBPdXRw
dXQgY29uZm9ybXMgdG8gaHR0cHM6Ly9naXRodWIuY29tL2plbmtpbnNjaS94dW5pdC1wbHVnaW4v
YmxvYi9tYXN0ZXIvCisjIHNyYy9tYWluL3Jlc291cmNlcy9vcmcvamVua2luc2NpL3BsdWdpbnMv
eHVuaXQvdHlwZXMvbW9kZWwveHNkL2p1bml0LTEwLnhzZAorCitpbXBvcnQgcHkKK2ltcG9ydCBv
cworaW1wb3J0IHJlCitpbXBvcnQgc3lzCitpbXBvcnQgdGltZQoraW1wb3J0IHB5dGVzdAorCisj
IFB5dGhvbiAyLlggYW5kIDMuWCBjb21wYXRpYmlsaXR5CitpZiBzeXMudmVyc2lvbl9pbmZvWzBd
IDwgMzoKKyAgICBmcm9tIGNvZGVjcyBpbXBvcnQgb3BlbgorZWxzZToKKyAgICB1bmljaHIgPSBj
aHIKKyAgICB1bmljb2RlID0gc3RyCisgICAgbG9uZyA9IGludAorCisKK2NsYXNzIEp1bml0KHB5
LnhtbC5OYW1lc3BhY2UpOgorICAgIHBhc3MKKworIyBXZSBuZWVkIHRvIGdldCB0aGUgc3Vic2V0
IG9mIHRoZSBpbnZhbGlkIHVuaWNvZGUgcmFuZ2VzIGFjY29yZGluZyB0bworIyBYTUwgMS4wIHdo
aWNoIGFyZSB2YWxpZCBpbiB0aGlzIHB5dGhvbiBidWlsZC4gIEhlbmNlIHdlIGNhbGN1bGF0ZQor
IyB0aGlzIGR5bmFtaWNhbGx5IGluc3RlYWQgb2YgaGFyZGNvZGluZyBpdC4gIFRoZSBzcGVjIHJh
bmdlIG9mIHZhbGlkCisjIGNoYXJzIGlzOiBDaGFyIDo6PSAjeDkgfCAjeEEgfCAjeEQgfCBbI3gy
MC0jeEQ3RkZdIHwgWyN4RTAwMC0jeEZGRkRdCisjICAgICAgICAgICAgICAgICAgICB8IFsjeDEw
MDAwLSN4MTBGRkZGXQorX2xlZ2FsX2NoYXJzID0gKDB4MDksIDB4MEEsIDB4MGQpCitfbGVnYWxf
cmFuZ2VzID0gKAorICAgICgweDIwLCAweDdFKSwgKDB4ODAsIDB4RDdGRiksICgweEUwMDAsIDB4
RkZGRCksICgweDEwMDAwLCAweDEwRkZGRiksCispCitfbGVnYWxfeG1sX3JlID0gWworICAgIHVu
aWNvZGUoIiVzLSVzIikgJSAodW5pY2hyKGxvdyksIHVuaWNocihoaWdoKSkKKyAgICBmb3IgKGxv
dywgaGlnaCkgaW4gX2xlZ2FsX3JhbmdlcyBpZiBsb3cgPCBzeXMubWF4dW5pY29kZQorXQorX2xl
Z2FsX3htbF9yZSA9IFt1bmljaHIoeCkgZm9yIHggaW4gX2xlZ2FsX2NoYXJzXSArIF9sZWdhbF94
bWxfcmUKK2lsbGVnYWxfeG1sX3JlID0gcmUuY29tcGlsZSh1bmljb2RlKCdbXiVzXScpICUgdW5p
Y29kZSgnJykuam9pbihfbGVnYWxfeG1sX3JlKSkKK2RlbCBfbGVnYWxfY2hhcnMKK2RlbCBfbGVn
YWxfcmFuZ2VzCitkZWwgX2xlZ2FsX3htbF9yZQorCitfcHlfZXh0X3JlID0gcmUuY29tcGlsZShy
IlwucHkkIikKKworCitkZWYgYmluX3htbF9lc2NhcGUoYXJnKToKKyAgICBkZWYgcmVwbChtYXRj
aG9iaik6CisgICAgICAgIGkgPSBvcmQobWF0Y2hvYmouZ3JvdXAoKSkKKyAgICAgICAgaWYgaSA8
PSAweEZGOgorICAgICAgICAgICAgcmV0dXJuIHVuaWNvZGUoJyN4JTAyWCcpICUgaQorICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHVuaWNvZGUoJyN4JTA0WCcpICUgaQorCisgICAg
cmV0dXJuIHB5LnhtbC5yYXcoaWxsZWdhbF94bWxfcmUuc3ViKHJlcGwsIHB5LnhtbC5lc2NhcGUo
YXJnKSkpCisKKworY2xhc3MgX05vZGVSZXBvcnRlcihvYmplY3QpOgorICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBub2RlaWQsIHhtbCk6CisKKyAgICAgICAgc2VsZi5pZCA9IG5vZGVpZAorICAgICAg
ICBzZWxmLnhtbCA9IHhtbAorICAgICAgICBzZWxmLmFkZF9zdGF0cyA9IHNlbGYueG1sLmFkZF9z
dGF0cworICAgICAgICBzZWxmLmR1cmF0aW9uID0gMAorICAgICAgICBzZWxmLnByb3BlcnRpZXMg
PSBbXQorICAgICAgICBzZWxmLm5vZGVzID0gW10KKyAgICAgICAgc2VsZi50ZXN0Y2FzZSA9IE5v
bmUKKyAgICAgICAgc2VsZi5hdHRycyA9IHt9CisKKyAgICBkZWYgYXBwZW5kKHNlbGYsIG5vZGUp
OgorICAgICAgICBzZWxmLnhtbC5hZGRfc3RhdHModHlwZShub2RlKS5fX25hbWVfXykKKyAgICAg
ICAgc2VsZi5ub2Rlcy5hcHBlbmQobm9kZSkKKworICAgIGRlZiBhZGRfcHJvcGVydHkoc2VsZiwg
bmFtZSwgdmFsdWUpOgorICAgICAgICBzZWxmLnByb3BlcnRpZXMuYXBwZW5kKChzdHIobmFtZSks
IGJpbl94bWxfZXNjYXBlKHZhbHVlKSkpCisKKyAgICBkZWYgbWFrZV9wcm9wZXJ0aWVzX25vZGUo
c2VsZik6CisgICAgICAgICIiIlJldHVybiBhIEp1bml0IG5vZGUgY29udGFpbmluZyBjdXN0b20g
cHJvcGVydGllcywgaWYgYW55LgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5wcm9wZXJ0
aWVzOgorICAgICAgICAgICAgcmV0dXJuIEp1bml0LnByb3BlcnRpZXMoWworICAgICAgICAgICAg
ICAgIEp1bml0LnByb3BlcnR5KG5hbWU9bmFtZSwgdmFsdWU9dmFsdWUpCisgICAgICAgICAgICAg
ICAgZm9yIG5hbWUsIHZhbHVlIGluIHNlbGYucHJvcGVydGllcworICAgICAgICAgICAgXSkKKyAg
ICAgICAgcmV0dXJuICcnCisKKyAgICBkZWYgcmVjb3JkX3Rlc3RyZXBvcnQoc2VsZiwgdGVzdHJl
cG9ydCk6CisgICAgICAgIGFzc2VydCBub3Qgc2VsZi50ZXN0Y2FzZQorICAgICAgICBuYW1lcyA9
IG1hbmdsZV90ZXN0X2FkZHJlc3ModGVzdHJlcG9ydC5ub2RlaWQpCisgICAgICAgIGNsYXNzbmFt
ZXMgPSBuYW1lc1s6LTFdCisgICAgICAgIGlmIHNlbGYueG1sLnByZWZpeDoKKyAgICAgICAgICAg
IGNsYXNzbmFtZXMuaW5zZXJ0KDAsIHNlbGYueG1sLnByZWZpeCkKKyAgICAgICAgYXR0cnMgPSB7
CisgICAgICAgICAgICAiY2xhc3NuYW1lIjogIi4iLmpvaW4oY2xhc3NuYW1lcyksCisgICAgICAg
ICAgICAibmFtZSI6IGJpbl94bWxfZXNjYXBlKG5hbWVzWy0xXSksCisgICAgICAgICAgICAiZmls
ZSI6IHRlc3RyZXBvcnQubG9jYXRpb25bMF0sCisgICAgICAgIH0KKyAgICAgICAgaWYgdGVzdHJl
cG9ydC5sb2NhdGlvblsxXSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGF0dHJzWyJsaW5lIl0g
PSB0ZXN0cmVwb3J0LmxvY2F0aW9uWzFdCisgICAgICAgIHNlbGYuYXR0cnMgPSBhdHRycworCisg
ICAgZGVmIHRvX3htbChzZWxmKToKKyAgICAgICAgdGVzdGNhc2UgPSBKdW5pdC50ZXN0Y2FzZSh0
aW1lPXNlbGYuZHVyYXRpb24sICoqc2VsZi5hdHRycykKKyAgICAgICAgdGVzdGNhc2UuYXBwZW5k
KHNlbGYubWFrZV9wcm9wZXJ0aWVzX25vZGUoKSkKKyAgICAgICAgZm9yIG5vZGUgaW4gc2VsZi5u
b2RlczoKKyAgICAgICAgICAgIHRlc3RjYXNlLmFwcGVuZChub2RlKQorICAgICAgICByZXR1cm4g
dGVzdGNhc2UKKworICAgIGRlZiBfYWRkX3NpbXBsZShzZWxmLCBraW5kLCBtZXNzYWdlLCBkYXRh
PU5vbmUpOgorICAgICAgICBkYXRhID0gYmluX3htbF9lc2NhcGUoZGF0YSkKKyAgICAgICAgbm9k
ZSA9IGtpbmQoZGF0YSwgbWVzc2FnZT1tZXNzYWdlKQorICAgICAgICBzZWxmLmFwcGVuZChub2Rl
KQorCisgICAgZGVmIF93cml0ZV9jYXB0dXJlZF9vdXRwdXQoc2VsZiwgcmVwb3J0KToKKyAgICAg
ICAgZm9yIGNhcG5hbWUgaW4gKCdvdXQnLCAnZXJyJyk6CisgICAgICAgICAgICBhbGxjb250ZW50
ID0gIiIKKyAgICAgICAgICAgIGZvciBuYW1lLCBjb250ZW50IGluIHJlcG9ydC5nZXRfc2VjdGlv
bnMoIkNhcHR1cmVkIHN0ZCVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNhcG5hbWUpOgorICAgICAgICAgICAgICAgIGFsbGNvbnRlbnQg
Kz0gY29udGVudAorICAgICAgICAgICAgaWYgYWxsY29udGVudDoKKyAgICAgICAgICAgICAgICB0
YWcgPSBnZXRhdHRyKEp1bml0LCAnc3lzdGVtLScgKyBjYXBuYW1lKQorICAgICAgICAgICAgICAg
IHNlbGYuYXBwZW5kKHRhZyhiaW5feG1sX2VzY2FwZShhbGxjb250ZW50KSkpCisKKyAgICBkZWYg
YXBwZW5kX3Bhc3Moc2VsZiwgcmVwb3J0KToKKyAgICAgICAgc2VsZi5hZGRfc3RhdHMoJ3Bhc3Nl
ZCcpCisgICAgICAgIHNlbGYuX3dyaXRlX2NhcHR1cmVkX291dHB1dChyZXBvcnQpCisKKyAgICBk
ZWYgYXBwZW5kX2ZhaWx1cmUoc2VsZiwgcmVwb3J0KToKKyAgICAgICAgIyBtc2cgPSBzdHIocmVw
b3J0LmxvbmdyZXByLnJlcHJ0cmFjZWJhY2suZXh0cmFsaW5lKQorICAgICAgICBpZiBoYXNhdHRy
KHJlcG9ydCwgIndhc3hmYWlsIik6CisgICAgICAgICAgICBzZWxmLl9hZGRfc2ltcGxlKAorICAg
ICAgICAgICAgICAgIEp1bml0LnNraXBwZWQsCisgICAgICAgICAgICAgICAgInhmYWlsLW1hcmtl
ZCB0ZXN0IHBhc3NlcyB1bmV4cGVjdGVkbHkiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
aWYgaGFzYXR0cihyZXBvcnQubG9uZ3JlcHIsICJyZXByY3Jhc2giKToKKyAgICAgICAgICAgICAg
ICBtZXNzYWdlID0gcmVwb3J0LmxvbmdyZXByLnJlcHJjcmFzaC5tZXNzYWdlCisgICAgICAgICAg
ICBlbGlmIGlzaW5zdGFuY2UocmVwb3J0LmxvbmdyZXByLCAodW5pY29kZSwgc3RyKSk6CisgICAg
ICAgICAgICAgICAgbWVzc2FnZSA9IHJlcG9ydC5sb25ncmVwcgorICAgICAgICAgICAgZWxzZToK
KyAgICAgICAgICAgICAgICBtZXNzYWdlID0gc3RyKHJlcG9ydC5sb25ncmVwcikKKyAgICAgICAg
ICAgIG1lc3NhZ2UgPSBiaW5feG1sX2VzY2FwZShtZXNzYWdlKQorICAgICAgICAgICAgZmFpbCA9
IEp1bml0LmZhaWx1cmUobWVzc2FnZT1tZXNzYWdlKQorICAgICAgICAgICAgZmFpbC5hcHBlbmQo
YmluX3htbF9lc2NhcGUocmVwb3J0LmxvbmdyZXByKSkKKyAgICAgICAgICAgIHNlbGYuYXBwZW5k
KGZhaWwpCisgICAgICAgIHNlbGYuX3dyaXRlX2NhcHR1cmVkX291dHB1dChyZXBvcnQpCisKKyAg
ICBkZWYgYXBwZW5kX2NvbGxlY3RfZXJyb3Ioc2VsZiwgcmVwb3J0KToKKyAgICAgICAgIyBtc2cg
PSBzdHIocmVwb3J0LmxvbmdyZXByLnJlcHJ0cmFjZWJhY2suZXh0cmFsaW5lKQorICAgICAgICBz
ZWxmLmFwcGVuZChKdW5pdC5lcnJvcihiaW5feG1sX2VzY2FwZShyZXBvcnQubG9uZ3JlcHIpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlPSJjb2xsZWN0aW9uIGZhaWx1
cmUiKSkKKworICAgIGRlZiBhcHBlbmRfY29sbGVjdF9za2lwcGVkKHNlbGYsIHJlcG9ydCk6Cisg
ICAgICAgIHNlbGYuX2FkZF9zaW1wbGUoCisgICAgICAgICAgICBKdW5pdC5za2lwcGVkLCAiY29s
bGVjdGlvbiBza2lwcGVkIiwgcmVwb3J0LmxvbmdyZXByKQorCisgICAgZGVmIGFwcGVuZF9lcnJv
cihzZWxmLCByZXBvcnQpOgorICAgICAgICBzZWxmLl9hZGRfc2ltcGxlKAorICAgICAgICAgICAg
SnVuaXQuZXJyb3IsICJ0ZXN0IHNldHVwIGZhaWx1cmUiLCByZXBvcnQubG9uZ3JlcHIpCisgICAg
ICAgIHNlbGYuX3dyaXRlX2NhcHR1cmVkX291dHB1dChyZXBvcnQpCisKKyAgICBkZWYgYXBwZW5k
X3NraXBwZWQoc2VsZiwgcmVwb3J0KToKKyAgICAgICAgaWYgaGFzYXR0cihyZXBvcnQsICJ3YXN4
ZmFpbCIpOgorICAgICAgICAgICAgc2VsZi5fYWRkX3NpbXBsZSgKKyAgICAgICAgICAgICAgICBK
dW5pdC5za2lwcGVkLCAiZXhwZWN0ZWQgdGVzdCBmYWlsdXJlIiwgcmVwb3J0Lndhc3hmYWlsCisg
ICAgICAgICAgICApCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmaWxlbmFtZSwgbGluZW5v
LCBza2lwcmVhc29uID0gcmVwb3J0LmxvbmdyZXByCisgICAgICAgICAgICBpZiBza2lwcmVhc29u
LnN0YXJ0c3dpdGgoIlNraXBwZWQ6ICIpOgorICAgICAgICAgICAgICAgIHNraXByZWFzb24gPSBi
aW5feG1sX2VzY2FwZShza2lwcmVhc29uWzk6XSkKKyAgICAgICAgICAgIHNlbGYuYXBwZW5kKAor
ICAgICAgICAgICAgICAgIEp1bml0LnNraXBwZWQoIiVzOiVzOiAlcyIgJSAoZmlsZW5hbWUsIGxp
bmVubywgc2tpcHJlYXNvbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJw
eXRlc3Quc2tpcCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlPXNraXBy
ZWFzb24pKQorICAgICAgICBzZWxmLl93cml0ZV9jYXB0dXJlZF9vdXRwdXQocmVwb3J0KQorCisg
ICAgZGVmIGZpbmFsaXplKHNlbGYpOgorICAgICAgICBkYXRhID0gc2VsZi50b194bWwoKS51bmlj
b2RlKGluZGVudD0wKQorICAgICAgICBzZWxmLl9fZGljdF9fLmNsZWFyKCkKKyAgICAgICAgc2Vs
Zi50b194bWwgPSBsYW1iZGE6IHB5LnhtbC5yYXcoZGF0YSkKKworCitAcHl0ZXN0LmZpeHR1cmUK
K2RlZiByZWNvcmRfeG1sX3Byb3BlcnR5KHJlcXVlc3QpOgorICAgICIiIkZpeHR1cmUgdGhhdCBh
ZGRzIGV4dHJhIHhtbCBwcm9wZXJ0aWVzIHRvIHRoZSB0YWcgZm9yIHRoZSBjYWxsaW5nIHRlc3Qu
CisgICAgVGhlIGZpeHR1cmUgaXMgY2FsbGFibGUgd2l0aCAobmFtZSwgdmFsdWUpLCB3aXRoIHZh
bHVlIGJlaW5nIGF1dG9tYXRpY2FsbHkKKyAgICB4bWwtZW5jb2RlZC4KKyAgICAiIiIKKyAgICBy
ZXF1ZXN0Lm5vZGUud2FybigKKyAgICAgICAgY29kZT0nQzMnLAorICAgICAgICBtZXNzYWdlPSdy
ZWNvcmRfeG1sX3Byb3BlcnR5IGlzIGFuIGV4cGVyaW1lbnRhbCBmZWF0dXJlJywKKyAgICApCisg
ICAgeG1sID0gZ2V0YXR0cihyZXF1ZXN0LmNvbmZpZywgIl94bWwiLCBOb25lKQorICAgIGlmIHht
bCBpcyBub3QgTm9uZToKKyAgICAgICAgbm9kZV9yZXBvcnRlciA9IHhtbC5ub2RlX3JlcG9ydGVy
KHJlcXVlc3Qubm9kZS5ub2RlaWQpCisgICAgICAgIHJldHVybiBub2RlX3JlcG9ydGVyLmFkZF9w
cm9wZXJ0eQorICAgIGVsc2U6CisgICAgICAgIGRlZiBhZGRfcHJvcGVydHlfbm9vcChuYW1lLCB2
YWx1ZSk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgcmV0dXJuIGFkZF9wcm9wZXJ0eV9u
b29wCisKKworZGVmIHB5dGVzdF9hZGRvcHRpb24ocGFyc2VyKToKKyAgICBncm91cCA9IHBhcnNl
ci5nZXRncm91cCgidGVybWluYWwgcmVwb3J0aW5nIikKKyAgICBncm91cC5hZGRvcHRpb24oCisg
ICAgICAgICctLWp1bml0eG1sJywgJy0tanVuaXQteG1sJywKKyAgICAgICAgYWN0aW9uPSJzdG9y
ZSIsCisgICAgICAgIGRlc3Q9InhtbHBhdGgiLAorICAgICAgICBtZXRhdmFyPSJwYXRoIiwKKyAg
ICAgICAgZGVmYXVsdD1Ob25lLAorICAgICAgICBoZWxwPSJjcmVhdGUganVuaXQteG1sIHN0eWxl
IHJlcG9ydCBmaWxlIGF0IGdpdmVuIHBhdGguIikKKyAgICBncm91cC5hZGRvcHRpb24oCisgICAg
ICAgICctLWp1bml0cHJlZml4JywgJy0tanVuaXQtcHJlZml4JywKKyAgICAgICAgYWN0aW9uPSJz
dG9yZSIsCisgICAgICAgIG1ldGF2YXI9InN0ciIsCisgICAgICAgIGRlZmF1bHQ9Tm9uZSwKKyAg
ICAgICAgaGVscD0icHJlcGVuZCBwcmVmaXggdG8gY2xhc3NuYW1lcyBpbiBqdW5pdC14bWwgb3V0
cHV0IikKKworCitkZWYgcHl0ZXN0X2NvbmZpZ3VyZShjb25maWcpOgorICAgIHhtbHBhdGggPSBj
b25maWcub3B0aW9uLnhtbHBhdGgKKyAgICAjIHByZXZlbnQgb3BlbmluZyB4bWxsb2cgb24gc2xh
dmUgbm9kZXMgKHhkaXN0KQorICAgIGlmIHhtbHBhdGggYW5kIG5vdCBoYXNhdHRyKGNvbmZpZywg
J3NsYXZlaW5wdXQnKToKKyAgICAgICAgY29uZmlnLl94bWwgPSBMb2dYTUwoeG1scGF0aCwgY29u
ZmlnLm9wdGlvbi5qdW5pdHByZWZpeCkKKyAgICAgICAgY29uZmlnLnBsdWdpbm1hbmFnZXIucmVn
aXN0ZXIoY29uZmlnLl94bWwpCisKKworZGVmIHB5dGVzdF91bmNvbmZpZ3VyZShjb25maWcpOgor
ICAgIHhtbCA9IGdldGF0dHIoY29uZmlnLCAnX3htbCcsIE5vbmUpCisgICAgaWYgeG1sOgorICAg
ICAgICBkZWwgY29uZmlnLl94bWwKKyAgICAgICAgY29uZmlnLnBsdWdpbm1hbmFnZXIudW5yZWdp
c3Rlcih4bWwpCisKKworZGVmIG1hbmdsZV90ZXN0X2FkZHJlc3MoYWRkcmVzcyk6CisgICAgcGF0
aCwgcG9zc2libGVfb3Blbl9icmFja2V0LCBwYXJhbXMgPSBhZGRyZXNzLnBhcnRpdGlvbignWycp
CisgICAgbmFtZXMgPSBwYXRoLnNwbGl0KCI6OiIpCisgICAgdHJ5OgorICAgICAgICBuYW1lcy5y
ZW1vdmUoJygpJykKKyAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgcGFzcworICAgICMg
Y29udmVydCBmaWxlIHBhdGggdG8gZG90dGVkIHBhdGgKKyAgICBuYW1lc1swXSA9IG5hbWVzWzBd
LnJlcGxhY2UoIi8iLCAnLicpCisgICAgbmFtZXNbMF0gPSBfcHlfZXh0X3JlLnN1YigiIiwgbmFt
ZXNbMF0pCisgICAgIyBwdXQgYW55IHBhcmFtcyBiYWNrCisgICAgbmFtZXNbLTFdICs9IHBvc3Np
YmxlX29wZW5fYnJhY2tldCArIHBhcmFtcworICAgIHJldHVybiBuYW1lcworCisKK2NsYXNzIExv
Z1hNTChvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2dmaWxlLCBwcmVmaXgpOgor
ICAgICAgICBsb2dmaWxlID0gb3MucGF0aC5leHBhbmR1c2VyKG9zLnBhdGguZXhwYW5kdmFycyhs
b2dmaWxlKSkKKyAgICAgICAgc2VsZi5sb2dmaWxlID0gb3MucGF0aC5ub3JtcGF0aChvcy5wYXRo
LmFic3BhdGgobG9nZmlsZSkpCisgICAgICAgIHNlbGYucHJlZml4ID0gcHJlZml4CisgICAgICAg
IHNlbGYuc3RhdHMgPSBkaWN0LmZyb21rZXlzKFsKKyAgICAgICAgICAgICdlcnJvcicsCisgICAg
ICAgICAgICAncGFzc2VkJywKKyAgICAgICAgICAgICdmYWlsdXJlJywKKyAgICAgICAgICAgICdz
a2lwcGVkJywKKyAgICAgICAgXSwgMCkKKyAgICAgICAgc2VsZi5ub2RlX3JlcG9ydGVycyA9IHt9
ICAjIG5vZGVpZCAtPiBfTm9kZVJlcG9ydGVyCisgICAgICAgIHNlbGYubm9kZV9yZXBvcnRlcnNf
b3JkZXJlZCA9IFtdCisKKyAgICBkZWYgZmluYWxpemUoc2VsZiwgcmVwb3J0KToKKyAgICAgICAg
bm9kZWlkID0gZ2V0YXR0cihyZXBvcnQsICdub2RlaWQnLCByZXBvcnQpCisgICAgICAgICMgbG9j
YWwgaGFjayB0byBoYW5kbGUgeGRpc3QgcmVwb3J0IG9yZGVyCisgICAgICAgIHNsYXZlbm9kZSA9
IGdldGF0dHIocmVwb3J0LCAnbm9kZScsIE5vbmUpCisgICAgICAgIHJlcG9ydGVyID0gc2VsZi5u
b2RlX3JlcG9ydGVycy5wb3AoKG5vZGVpZCwgc2xhdmVub2RlKSkKKyAgICAgICAgaWYgcmVwb3J0
ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXBvcnRlci5maW5hbGl6ZSgpCisKKyAgICBk
ZWYgbm9kZV9yZXBvcnRlcihzZWxmLCByZXBvcnQpOgorICAgICAgICBub2RlaWQgPSBnZXRhdHRy
KHJlcG9ydCwgJ25vZGVpZCcsIHJlcG9ydCkKKyAgICAgICAgIyBsb2NhbCBoYWNrIHRvIGhhbmRs
ZSB4ZGlzdCByZXBvcnQgb3JkZXIKKyAgICAgICAgc2xhdmVub2RlID0gZ2V0YXR0cihyZXBvcnQs
ICdub2RlJywgTm9uZSkKKworICAgICAgICBrZXkgPSBub2RlaWQsIHNsYXZlbm9kZQorCisgICAg
ICAgIGlmIGtleSBpbiBzZWxmLm5vZGVfcmVwb3J0ZXJzOgorICAgICAgICAgICAgIyBUT0RPOiBi
cmVhc2tzIGZvciAtLWRpc3Q9ZWFjaAorICAgICAgICAgICAgcmV0dXJuIHNlbGYubm9kZV9yZXBv
cnRlcnNba2V5XQorICAgICAgICByZXBvcnRlciA9IF9Ob2RlUmVwb3J0ZXIobm9kZWlkLCBzZWxm
KQorICAgICAgICBzZWxmLm5vZGVfcmVwb3J0ZXJzW2tleV0gPSByZXBvcnRlcgorICAgICAgICBz
ZWxmLm5vZGVfcmVwb3J0ZXJzX29yZGVyZWQuYXBwZW5kKHJlcG9ydGVyKQorICAgICAgICByZXR1
cm4gcmVwb3J0ZXIKKworICAgIGRlZiBhZGRfc3RhdHMoc2VsZiwga2V5KToKKyAgICAgICAgaWYg
a2V5IGluIHNlbGYuc3RhdHM6CisgICAgICAgICAgICBzZWxmLnN0YXRzW2tleV0gKz0gMQorCisg
ICAgZGVmIF9vcGVudGVzdGNhc2Uoc2VsZiwgcmVwb3J0KToKKyAgICAgICAgcmVwb3J0ZXIgPSBz
ZWxmLm5vZGVfcmVwb3J0ZXIocmVwb3J0KQorICAgICAgICByZXBvcnRlci5yZWNvcmRfdGVzdHJl
cG9ydChyZXBvcnQpCisgICAgICAgIHJldHVybiByZXBvcnRlcgorCisgICAgZGVmIHB5dGVzdF9y
dW50ZXN0X2xvZ3JlcG9ydChzZWxmLCByZXBvcnQpOgorICAgICAgICAiIiJoYW5kbGUgYSBzZXR1
cC9jYWxsL3RlYXJkb3duIHJlcG9ydCwgZ2VuZXJhdGluZyB0aGUgYXBwcm9wcmlhdGUKKyAgICAg
ICAgeG1sIHRhZ3MgYXMgbmVjZXNzYXJ5LgorCisgICAgICAgIG5vdGU6IGR1ZSB0byBwbHVnaW5z
IGxpa2UgeGRpc3QsIHRoaXMgaG9vayBtYXkgYmUgY2FsbGVkIGluIGludGVybGFjZWQKKyAgICAg
ICAgb3JkZXIgd2l0aCByZXBvcnRzIGZyb20gb3RoZXIgbm9kZXMuIGZvciBleGFtcGxlOgorCisg
ICAgICAgIHVzdWFsIGNhbGwgb3JkZXI6CisgICAgICAgICAgICAtPiBzZXR1cCBub2RlMQorICAg
ICAgICAgICAgLT4gY2FsbCBub2RlMQorICAgICAgICAgICAgLT4gdGVhcmRvd24gbm9kZTEKKyAg
ICAgICAgICAgIC0+IHNldHVwIG5vZGUyCisgICAgICAgICAgICAtPiBjYWxsIG5vZGUyCisgICAg
ICAgICAgICAtPiB0ZWFyZG93biBub2RlMgorCisgICAgICAgIHBvc3NpYmxlIGNhbGwgb3JkZXIg
aW4geGRpc3Q6CisgICAgICAgICAgICAtPiBzZXR1cCBub2RlMQorICAgICAgICAgICAgLT4gY2Fs
bCBub2RlMQorICAgICAgICAgICAgLT4gc2V0dXAgbm9kZTIKKyAgICAgICAgICAgIC0+IGNhbGwg
bm9kZTIKKyAgICAgICAgICAgIC0+IHRlYXJkb3duIG5vZGUyCisgICAgICAgICAgICAtPiB0ZWFy
ZG93biBub2RlMQorICAgICAgICAiIiIKKyAgICAgICAgaWYgcmVwb3J0LnBhc3NlZDoKKyAgICAg
ICAgICAgIGlmIHJlcG9ydC53aGVuID09ICJjYWxsIjogICMgaWdub3JlIHNldHVwL3RlYXJkb3du
CisgICAgICAgICAgICAgICAgcmVwb3J0ZXIgPSBzZWxmLl9vcGVudGVzdGNhc2UocmVwb3J0KQor
ICAgICAgICAgICAgICAgIHJlcG9ydGVyLmFwcGVuZF9wYXNzKHJlcG9ydCkKKyAgICAgICAgZWxp
ZiByZXBvcnQuZmFpbGVkOgorICAgICAgICAgICAgcmVwb3J0ZXIgPSBzZWxmLl9vcGVudGVzdGNh
c2UocmVwb3J0KQorICAgICAgICAgICAgaWYgcmVwb3J0LndoZW4gPT0gImNhbGwiOgorICAgICAg
ICAgICAgICAgIHJlcG9ydGVyLmFwcGVuZF9mYWlsdXJlKHJlcG9ydCkKKyAgICAgICAgICAgIGVs
c2U6CisgICAgICAgICAgICAgICAgcmVwb3J0ZXIuYXBwZW5kX2Vycm9yKHJlcG9ydCkKKyAgICAg
ICAgZWxpZiByZXBvcnQuc2tpcHBlZDoKKyAgICAgICAgICAgIHJlcG9ydGVyID0gc2VsZi5fb3Bl
bnRlc3RjYXNlKHJlcG9ydCkKKyAgICAgICAgICAgIHJlcG9ydGVyLmFwcGVuZF9za2lwcGVkKHJl
cG9ydCkKKyAgICAgICAgc2VsZi51cGRhdGVfdGVzdGNhc2VfZHVyYXRpb24ocmVwb3J0KQorICAg
ICAgICBpZiByZXBvcnQud2hlbiA9PSAidGVhcmRvd24iOgorICAgICAgICAgICAgc2VsZi5maW5h
bGl6ZShyZXBvcnQpCisKKyAgICBkZWYgdXBkYXRlX3Rlc3RjYXNlX2R1cmF0aW9uKHNlbGYsIHJl
cG9ydCk6CisgICAgICAgICIiImFjY3VtdWxhdGVzIHRvdGFsIGR1cmF0aW9uIGZvciBub2RlaWQg
ZnJvbSBnaXZlbiByZXBvcnQgYW5kIHVwZGF0ZXMKKyAgICAgICAgdGhlIEp1bml0LnRlc3RjYXNl
IHdpdGggdGhlIG5ldyB0b3RhbCBpZiBhbHJlYWR5IGNyZWF0ZWQuCisgICAgICAgICIiIgorICAg
ICAgICByZXBvcnRlciA9IHNlbGYubm9kZV9yZXBvcnRlcihyZXBvcnQpCisgICAgICAgIHJlcG9y
dGVyLmR1cmF0aW9uICs9IGdldGF0dHIocmVwb3J0LCAnZHVyYXRpb24nLCAwLjApCisKKyAgICBk
ZWYgcHl0ZXN0X2NvbGxlY3RyZXBvcnQoc2VsZiwgcmVwb3J0KToKKyAgICAgICAgaWYgbm90IHJl
cG9ydC5wYXNzZWQ6CisgICAgICAgICAgICByZXBvcnRlciA9IHNlbGYuX29wZW50ZXN0Y2FzZShy
ZXBvcnQpCisgICAgICAgICAgICBpZiByZXBvcnQuZmFpbGVkOgorICAgICAgICAgICAgICAgIHJl
cG9ydGVyLmFwcGVuZF9jb2xsZWN0X2Vycm9yKHJlcG9ydCkKKyAgICAgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICAgICAgcmVwb3J0ZXIuYXBwZW5kX2NvbGxlY3Rfc2tpcHBlZChyZXBvcnQpCisK
KyAgICBkZWYgcHl0ZXN0X2ludGVybmFsZXJyb3Ioc2VsZiwgZXhjcmVwcik6CisgICAgICAgIHJl
cG9ydGVyID0gc2VsZi5ub2RlX3JlcG9ydGVyKCdpbnRlcm5hbCcpCisgICAgICAgIHJlcG9ydGVy
LmF0dHJzLnVwZGF0ZShjbGFzc25hbWU9InB5dGVzdCIsIG5hbWU9J2ludGVybmFsJykKKyAgICAg
ICAgcmVwb3J0ZXIuX2FkZF9zaW1wbGUoSnVuaXQuZXJyb3IsICdpbnRlcm5hbCBlcnJvcicsIGV4
Y3JlcHIpCisKKyAgICBkZWYgcHl0ZXN0X3Nlc3Npb25zdGFydChzZWxmKToKKyAgICAgICAgc2Vs
Zi5zdWl0ZV9zdGFydF90aW1lID0gdGltZS50aW1lKCkKKworICAgIGRlZiBweXRlc3Rfc2Vzc2lv
bmZpbmlzaChzZWxmKToKKyAgICAgICAgZGlybmFtZSA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRo
LmFic3BhdGgoc2VsZi5sb2dmaWxlKSkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoZGly
bmFtZSk6CisgICAgICAgICAgICBvcy5tYWtlZGlycyhkaXJuYW1lKQorICAgICAgICBsb2dmaWxl
ID0gb3BlbihzZWxmLmxvZ2ZpbGUsICd3JywgZW5jb2Rpbmc9J3V0Zi04JykKKyAgICAgICAgc3Vp
dGVfc3RvcF90aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgc3VpdGVfdGltZV9kZWx0YSA9IHN1
aXRlX3N0b3BfdGltZSAtIHNlbGYuc3VpdGVfc3RhcnRfdGltZQorCisgICAgICAgIG51bXRlc3Rz
ID0gc2VsZi5zdGF0c1sncGFzc2VkJ10gKyBzZWxmLnN0YXRzWydmYWlsdXJlJ10KKworICAgICAg
ICBsb2dmaWxlLndyaXRlKCc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Picp
CisgICAgICAgIGxvZ2ZpbGUud3JpdGUoSnVuaXQudGVzdHN1aXRlKAorICAgICAgICAgICAgW3gu
dG9feG1sKCkgZm9yIHggaW4gc2VsZi5ub2RlX3JlcG9ydGVyc19vcmRlcmVkXSwKKyAgICAgICAg
ICAgIG5hbWU9InB5dGVzdCIsCisgICAgICAgICAgICBlcnJvcnM9c2VsZi5zdGF0c1snZXJyb3In
XSwKKyAgICAgICAgICAgIGZhaWx1cmVzPXNlbGYuc3RhdHNbJ2ZhaWx1cmUnXSwKKyAgICAgICAg
ICAgIHNraXBzPXNlbGYuc3RhdHNbJ3NraXBwZWQnXSwKKyAgICAgICAgICAgIHRlc3RzPW51bXRl
c3RzLAorICAgICAgICAgICAgdGltZT0iJS4zZiIgJSBzdWl0ZV90aW1lX2RlbHRhLCApLnVuaWNv
ZGUoaW5kZW50PTApKQorICAgICAgICBsb2dmaWxlLmNsb3NlKCkKKworICAgIGRlZiBweXRlc3Rf
dGVybWluYWxfc3VtbWFyeShzZWxmLCB0ZXJtaW5hbHJlcG9ydGVyKToKKyAgICAgICAgdGVybWlu
YWxyZXBvcnRlci53cml0ZV9zZXAoIi0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiZ2VuZXJhdGVkIHhtbCBmaWxlOiAlcyIgJSAoc2VsZi5sb2dmaWxlKSkKZGlmZiAtLWdp
dCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9tYWlu
LnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L21h
aW4ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjg2NTRkN2FmNjI3
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5
dGVzdC9fcHl0ZXN0L21haW4ucHkKQEAgLTAsMCArMSw3NDQgQEAKKyIiIiBjb3JlIGltcGxlbWVu
dGF0aW9uIG9mIHRlc3RpbmcgcHJvY2VzczogaW5pdCwgc2Vzc2lvbiwgcnVudGVzdCBsb29wLiAi
IiIKK2ltcG9ydCBpbXAKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc3lzCisKK2ltcG9y
dCBfcHl0ZXN0CitpbXBvcnQgX3B5dGVzdC5fY29kZQoraW1wb3J0IHB5CitpbXBvcnQgcHl0ZXN0
Cit0cnk6CisgICAgZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgTXV0YWJsZU1hcHBpbmcgYXMgTWFw
cGluZ01peGluCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZnJvbSBVc2VyRGljdCBpbXBvcnQg
RGljdE1peGluIGFzIE1hcHBpbmdNaXhpbgorCitmcm9tIF9weXRlc3QucnVubmVyIGltcG9ydCBj
b2xsZWN0X29uZV9ub2RlCisKK3RyYWNlYmFja2N1dGRpciA9IHB5LnBhdGgubG9jYWwoX3B5dGVz
dC5fX2ZpbGVfXykuZGlycGF0aCgpCisKKyMgZXhpdGNvZGVzIGZvciB0aGUgY29tbWFuZCBsaW5l
CitFWElUX09LID0gMAorRVhJVF9URVNUU0ZBSUxFRCA9IDEKK0VYSVRfSU5URVJSVVBURUQgPSAy
CitFWElUX0lOVEVSTkFMRVJST1IgPSAzCitFWElUX1VTQUdFRVJST1IgPSA0CitFWElUX05PVEVT
VFNDT0xMRUNURUQgPSA1CisKK25hbWVfcmUgPSByZS5jb21waWxlKCJeW2EtekEtWl9dXHcqJCIp
CisKK2RlZiBweXRlc3RfYWRkb3B0aW9uKHBhcnNlcik6CisgICAgcGFyc2VyLmFkZGluaSgibm9y
ZWN1cnNlZGlycyIsICJkaXJlY3RvcnkgcGF0dGVybnMgdG8gYXZvaWQgZm9yIHJlY3Vyc2lvbiIs
CisgICAgICAgIHR5cGU9ImFyZ3MiLCBkZWZhdWx0PVsnLionLCAnQ1ZTJywgJ19kYXJjcycsICd7
YXJjaH0nLCAnKi5lZ2cnXSkKKyAgICBwYXJzZXIuYWRkaW5pKCJ0ZXN0cGF0aHMiLCAiZGlyZWN0
b3JpZXMgdG8gc2VhcmNoIGZvciB0ZXN0cyB3aGVuIG5vIGZpbGVzIG9yIGRpcmVjdG9yaWVzIGFy
ZSBnaXZlbiBpbiB0aGUgY29tbWFuZCBsaW5lLiIsCisgICAgICAgIHR5cGU9ImFyZ3MiLCBkZWZh
dWx0PVtdKQorICAgICNwYXJzZXIuYWRkaW5pKCJkaXJwYXR0ZXJucyIsCisgICAgIyAgICAicGF0
dGVybnMgc3BlY2lmeWluZyBwb3NzaWJsZSBsb2NhdGlvbnMgb2YgdGVzdCBmaWxlcyIsCisgICAg
IyAgICB0eXBlPSJsaW5lbGlzdCIsIGRlZmF1bHQ9WyIqKi90ZXN0XyoudHh0IiwKKyAgICAjICAg
ICAgICAgICAgIioqL3Rlc3RfKi5weSIsICIqKi8qX3Rlc3QucHkiXQorICAgICMpCisgICAgZ3Jv
dXAgPSBwYXJzZXIuZ2V0Z3JvdXAoImdlbmVyYWwiLCAicnVubmluZyBhbmQgc2VsZWN0aW9uIG9w
dGlvbnMiKQorICAgIGdyb3VwLl9hZGRvcHRpb24oJy14JywgJy0tZXhpdGZpcnN0JywgYWN0aW9u
PSJzdG9yZV90cnVlIiwgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgIGRlc3Q9ImV4aXRm
aXJzdCIsCisgICAgICAgICAgICAgICBoZWxwPSJleGl0IGluc3RhbnRseSBvbiBmaXJzdCBlcnJv
ciBvciBmYWlsZWQgdGVzdC4iKSwKKyAgICBncm91cC5fYWRkb3B0aW9uKCctLW1heGZhaWwnLCBt
ZXRhdmFyPSJudW0iLAorICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZSIsIHR5cGU9aW50LCBk
ZXN0PSJtYXhmYWlsIiwgZGVmYXVsdD0wLAorICAgICAgICAgICAgICAgaGVscD0iZXhpdCBhZnRl
ciBmaXJzdCBudW0gZmFpbHVyZXMgb3IgZXJyb3JzLiIpCisgICAgZ3JvdXAuX2FkZG9wdGlvbign
LS1zdHJpY3QnLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgaGVscD0icnVu
IHB5dGVzdCBpbiBzdHJpY3QgbW9kZSwgd2FybmluZ3MgYmVjb21lIGVycm9ycy4iKQorICAgIGdy
b3VwLl9hZGRvcHRpb24oIi1jIiwgbWV0YXZhcj0iZmlsZSIsIHR5cGU9c3RyLCBkZXN0PSJpbmlm
aWxlbmFtZSIsCisgICAgICAgICAgICAgICBoZWxwPSJsb2FkIGNvbmZpZ3VyYXRpb24gZnJvbSBg
ZmlsZWAgaW5zdGVhZCBvZiB0cnlpbmcgdG8gbG9jYXRlIG9uZSBvZiB0aGUgaW1wbGljaXQgY29u
ZmlndXJhdGlvbiBmaWxlcy4iKQorCisgICAgZ3JvdXAgPSBwYXJzZXIuZ2V0Z3JvdXAoImNvbGxl
Y3QiLCAiY29sbGVjdGlvbiIpCisgICAgZ3JvdXAuYWRkb3B0aW9uKCctLWNvbGxlY3Rvbmx5Jywg
Jy0tY29sbGVjdC1vbmx5JywgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgaGVscD0ib25s
eSBjb2xsZWN0IHRlc3RzLCBkb24ndCBleGVjdXRlIHRoZW0uIiksCisgICAgZ3JvdXAuYWRkb3B0
aW9uKCctLXB5YXJncycsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgIGhlbHA9InRyeSB0
byBpbnRlcnByZXQgYWxsIGFyZ3VtZW50cyBhcyBweXRob24gcGFja2FnZXMuIikKKyAgICBncm91
cC5hZGRvcHRpb24oIi0taWdub3JlIiwgYWN0aW9uPSJhcHBlbmQiLCBtZXRhdmFyPSJwYXRoIiwK
KyAgICAgICAgaGVscD0iaWdub3JlIHBhdGggZHVyaW5nIGNvbGxlY3Rpb24gKG11bHRpLWFsbG93
ZWQpLiIpCisgICAgIyB3aGVuIGNoYW5naW5nIHRoaXMgdG8gLS1jb25mLWN1dC1kaXIsIGNvbmZp
Zy5weSBDb25mdGVzdC5zZXRpbml0aWFsCisgICAgIyBuZWVkcyB1cGdyYWRpbmcgYXMgd2VsbAor
ICAgIGdyb3VwLmFkZG9wdGlvbignLS1jb25mY3V0ZGlyJywgZGVzdD0iY29uZmN1dGRpciIsIGRl
ZmF1bHQ9Tm9uZSwKKyAgICAgICAgbWV0YXZhcj0iZGlyIiwKKyAgICAgICAgaGVscD0ib25seSBs
b2FkIGNvbmZ0ZXN0LnB5J3MgcmVsYXRpdmUgdG8gc3BlY2lmaWVkIGRpci4iKQorICAgIGdyb3Vw
LmFkZG9wdGlvbignLS1ub2NvbmZ0ZXN0JywgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAg
ZGVzdD0ibm9jb25mdGVzdCIsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgIGhlbHA9IkRvbid0IGxv
YWQgYW55IGNvbmZ0ZXN0LnB5IGZpbGVzLiIpCisKKyAgICBncm91cCA9IHBhcnNlci5nZXRncm91
cCgiZGVidWdjb25maWciLAorICAgICAgICAidGVzdCBzZXNzaW9uIGRlYnVnZ2luZyBhbmQgY29u
ZmlndXJhdGlvbiIpCisgICAgZ3JvdXAuYWRkb3B0aW9uKCctLWJhc2V0ZW1wJywgZGVzdD0iYmFz
ZXRlbXAiLCBkZWZhdWx0PU5vbmUsIG1ldGF2YXI9ImRpciIsCisgICAgICAgICAgICAgICBoZWxw
PSJiYXNlIHRlbXBvcmFyeSBkaXJlY3RvcnkgZm9yIHRoaXMgdGVzdCBydW4uIikKKworCitkZWYg
cHl0ZXN0X25hbWVzcGFjZSgpOgorICAgIGNvbGxlY3QgPSBkaWN0KEl0ZW09SXRlbSwgQ29sbGVj
dG9yPUNvbGxlY3RvciwgRmlsZT1GaWxlLCBTZXNzaW9uPVNlc3Npb24pCisgICAgcmV0dXJuIGRp
Y3QoY29sbGVjdD1jb2xsZWN0KQorCitkZWYgcHl0ZXN0X2NvbmZpZ3VyZShjb25maWcpOgorICAg
IHB5dGVzdC5jb25maWcgPSBjb25maWcgIyBjb21wYXRpYmlsdGl5CisgICAgaWYgY29uZmlnLm9w
dGlvbi5leGl0Zmlyc3Q6CisgICAgICAgIGNvbmZpZy5vcHRpb24ubWF4ZmFpbCA9IDEKKworZGVm
IHdyYXBfc2Vzc2lvbihjb25maWcsIGRvaXQpOgorICAgICIiIlNrZWxldG9uIGNvbW1hbmQgbGlu
ZSBwcm9ncmFtIiIiCisgICAgc2Vzc2lvbiA9IFNlc3Npb24oY29uZmlnKQorICAgIHNlc3Npb24u
ZXhpdHN0YXR1cyA9IEVYSVRfT0sKKyAgICBpbml0c3RhdGUgPSAwCisgICAgdHJ5OgorICAgICAg
ICB0cnk6CisgICAgICAgICAgICBjb25maWcuX2RvX2NvbmZpZ3VyZSgpCisgICAgICAgICAgICBp
bml0c3RhdGUgPSAxCisgICAgICAgICAgICBjb25maWcuaG9vay5weXRlc3Rfc2Vzc2lvbnN0YXJ0
KHNlc3Npb249c2Vzc2lvbikKKyAgICAgICAgICAgIGluaXRzdGF0ZSA9IDIKKyAgICAgICAgICAg
IHNlc3Npb24uZXhpdHN0YXR1cyA9IGRvaXQoY29uZmlnLCBzZXNzaW9uKSBvciAwCisgICAgICAg
IGV4Y2VwdCBweXRlc3QuVXNhZ2VFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGV4
Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgIGV4Y2luZm8gPSBfcHl0ZXN0Ll9j
b2RlLkV4Y2VwdGlvbkluZm8oKQorICAgICAgICAgICAgY29uZmlnLmhvb2sucHl0ZXN0X2tleWJv
YXJkX2ludGVycnVwdChleGNpbmZvPWV4Y2luZm8pCisgICAgICAgICAgICBzZXNzaW9uLmV4aXRz
dGF0dXMgPSBFWElUX0lOVEVSUlVQVEVECisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGV4
Y2luZm8gPSBfcHl0ZXN0Ll9jb2RlLkV4Y2VwdGlvbkluZm8oKQorICAgICAgICAgICAgY29uZmln
Lm5vdGlmeV9leGNlcHRpb24oZXhjaW5mbywgY29uZmlnLm9wdGlvbikKKyAgICAgICAgICAgIHNl
c3Npb24uZXhpdHN0YXR1cyA9IEVYSVRfSU5URVJOQUxFUlJPUgorICAgICAgICAgICAgaWYgZXhj
aW5mby5lcnJpc2luc3RhbmNlKFN5c3RlbUV4aXQpOgorICAgICAgICAgICAgICAgIHN5cy5zdGRl
cnIud3JpdGUoIm1haW5sb29wOiBjYXVnaHQgU3B1cmlvdXMgU3lzdGVtRXhpdCFcbiIpCisKKyAg
ICBmaW5hbGx5OgorICAgICAgICBleGNpbmZvID0gTm9uZSAgIyBFeHBsaWNpdGx5IGJyZWFrIHJl
ZmVyZW5jZSBjeWNsZS4KKyAgICAgICAgc2Vzc2lvbi5zdGFydGRpci5jaGRpcigpCisgICAgICAg
IGlmIGluaXRzdGF0ZSA+PSAyOgorICAgICAgICAgICAgY29uZmlnLmhvb2sucHl0ZXN0X3Nlc3Np
b25maW5pc2goCisgICAgICAgICAgICAgICAgc2Vzc2lvbj1zZXNzaW9uLAorICAgICAgICAgICAg
ICAgIGV4aXRzdGF0dXM9c2Vzc2lvbi5leGl0c3RhdHVzKQorICAgICAgICBjb25maWcuX2Vuc3Vy
ZV91bmNvbmZpZ3VyZSgpCisgICAgcmV0dXJuIHNlc3Npb24uZXhpdHN0YXR1cworCitkZWYgcHl0
ZXN0X2NtZGxpbmVfbWFpbihjb25maWcpOgorICAgIHJldHVybiB3cmFwX3Nlc3Npb24oY29uZmln
LCBfbWFpbikKKworZGVmIF9tYWluKGNvbmZpZywgc2Vzc2lvbik6CisgICAgIiIiIGRlZmF1bHQg
Y29tbWFuZCBsaW5lIHByb3RvY29sIGZvciBpbml0aWFsaXphdGlvbiwgc2Vzc2lvbiwKKyAgICBy
dW5uaW5nIHRlc3RzIGFuZCByZXBvcnRpbmcuICIiIgorICAgIGNvbmZpZy5ob29rLnB5dGVzdF9j
b2xsZWN0aW9uKHNlc3Npb249c2Vzc2lvbikKKyAgICBjb25maWcuaG9vay5weXRlc3RfcnVudGVz
dGxvb3Aoc2Vzc2lvbj1zZXNzaW9uKQorCisgICAgaWYgc2Vzc2lvbi50ZXN0c2ZhaWxlZDoKKyAg
ICAgICAgcmV0dXJuIEVYSVRfVEVTVFNGQUlMRUQKKyAgICBlbGlmIHNlc3Npb24udGVzdHNjb2xs
ZWN0ZWQgPT0gMDoKKyAgICAgICAgcmV0dXJuIEVYSVRfTk9URVNUU0NPTExFQ1RFRAorCitkZWYg
cHl0ZXN0X2NvbGxlY3Rpb24oc2Vzc2lvbik6CisgICAgcmV0dXJuIHNlc3Npb24ucGVyZm9ybV9j
b2xsZWN0KCkKKworZGVmIHB5dGVzdF9ydW50ZXN0bG9vcChzZXNzaW9uKToKKyAgICBpZiBzZXNz
aW9uLmNvbmZpZy5vcHRpb24uY29sbGVjdG9ubHk6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAg
ICBkZWYgZ2V0bmV4dGl0ZW0oaSk6CisgICAgICAgICMgdGhpcyBpcyBhIGZ1bmN0aW9uIHRvIGF2
b2lkIHB5dGhvbjIKKyAgICAgICAgIyBrZWVwaW5nIHN5cy5leGNfaW5mbyBzZXQgd2hlbiBjYWxs
aW5nIGludG8gYSB0ZXN0CisgICAgICAgICMgcHl0aG9uMiBrZWVwcyBzeXMuZXhjX2luZm8gdGls
bCB0aGUgZnJhbWUgaXMgbGVmdAorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2Vz
c2lvbi5pdGVtc1tpKzFdCisgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAg
cmV0dXJuIE5vbmUKKworICAgIGZvciBpLCBpdGVtIGluIGVudW1lcmF0ZShzZXNzaW9uLml0ZW1z
KToKKyAgICAgICAgbmV4dGl0ZW0gPSBnZXRuZXh0aXRlbShpKQorICAgICAgICBpdGVtLmNvbmZp
Zy5ob29rLnB5dGVzdF9ydW50ZXN0X3Byb3RvY29sKGl0ZW09aXRlbSwgbmV4dGl0ZW09bmV4dGl0
ZW0pCisgICAgICAgIGlmIHNlc3Npb24uc2hvdWxkc3RvcDoKKyAgICAgICAgICAgIHJhaXNlIHNl
c3Npb24uSW50ZXJydXB0ZWQoc2Vzc2lvbi5zaG91bGRzdG9wKQorICAgIHJldHVybiBUcnVlCisK
K2RlZiBweXRlc3RfaWdub3JlX2NvbGxlY3QocGF0aCwgY29uZmlnKToKKyAgICBwID0gcGF0aC5k
aXJwYXRoKCkKKyAgICBpZ25vcmVfcGF0aHMgPSBjb25maWcuX2dldGNvbmZ0ZXN0X3BhdGhsaXN0
KCJjb2xsZWN0X2lnbm9yZSIsIHBhdGg9cCkKKyAgICBpZ25vcmVfcGF0aHMgPSBpZ25vcmVfcGF0
aHMgb3IgW10KKyAgICBleGNsdWRlb3B0ID0gY29uZmlnLmdldG9wdGlvbigiaWdub3JlIikKKyAg
ICBpZiBleGNsdWRlb3B0OgorICAgICAgICBpZ25vcmVfcGF0aHMuZXh0ZW5kKFtweS5wYXRoLmxv
Y2FsKHgpIGZvciB4IGluIGV4Y2x1ZGVvcHRdKQorICAgIHJldHVybiBwYXRoIGluIGlnbm9yZV9w
YXRocworCitjbGFzcyBGU0hvb2tQcm94eToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZnNwYXRo
LCBwbSwgcmVtb3ZlX21vZHMpOgorICAgICAgICBzZWxmLmZzcGF0aCA9IGZzcGF0aAorICAgICAg
ICBzZWxmLnBtID0gcG0KKyAgICAgICAgc2VsZi5yZW1vdmVfbW9kcyA9IHJlbW92ZV9tb2RzCisK
KyAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFtZSk6CisgICAgICAgIHggPSBzZWxmLnBtLnN1
YnNldF9ob29rX2NhbGxlcihuYW1lLCByZW1vdmVfcGx1Z2lucz1zZWxmLnJlbW92ZV9tb2RzKQor
ICAgICAgICBzZWxmLl9fZGljdF9fW25hbWVdID0geAorICAgICAgICByZXR1cm4geAorCitkZWYg
Y29tcGF0cHJvcGVydHkobmFtZSk6CisgICAgZGVmIGZnZXQoc2VsZik6CisgICAgICAgICMgZGVw
cmVjYXRlZCAtIHVzZSBweXRlc3QubmFtZQorICAgICAgICByZXR1cm4gZ2V0YXR0cihweXRlc3Qs
IG5hbWUpCisKKyAgICByZXR1cm4gcHJvcGVydHkoZmdldCkKKworY2xhc3MgTm9kZUtleXdvcmRz
KE1hcHBpbmdNaXhpbik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5vZGUpOgorICAgICAgICBz
ZWxmLm5vZGUgPSBub2RlCisgICAgICAgIHNlbGYucGFyZW50ID0gbm9kZS5wYXJlbnQKKyAgICAg
ICAgc2VsZi5fbWFya2VycyA9IHtub2RlLm5hbWU6IFRydWV9CisKKyAgICBkZWYgX19nZXRpdGVt
X18oc2VsZiwga2V5KToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX21h
cmtlcnNba2V5XQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBpZiBzZWxm
LnBhcmVudCBpcyBOb25lOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICByZXR1
cm4gc2VsZi5wYXJlbnQua2V5d29yZHNba2V5XQorCisgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYs
IGtleSwgdmFsdWUpOgorICAgICAgICBzZWxmLl9tYXJrZXJzW2tleV0gPSB2YWx1ZQorCisgICAg
ZGVmIF9fZGVsaXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImNh
bm5vdCBkZWxldGUga2V5IGluIGtleXdvcmRzIGRpY3QiKQorCisgICAgZGVmIF9faXRlcl9fKHNl
bGYpOgorICAgICAgICBzZWVuID0gc2V0KHNlbGYuX21hcmtlcnMpCisgICAgICAgIGlmIHNlbGYu
cGFyZW50IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2Vlbi51cGRhdGUoc2VsZi5wYXJlbnQu
a2V5d29yZHMpCisgICAgICAgIHJldHVybiBpdGVyKHNlZW4pCisKKyAgICBkZWYgX19sZW5fXyhz
ZWxmKToKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9faXRlcl9fKCkpCisKKyAgICBkZWYga2V5
cyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGxpc3Qoc2VsZikKKworICAgIGRlZiBfX3JlcHJfXyhz
ZWxmKToKKyAgICAgICAgcmV0dXJuICI8Tm9kZUtleXdvcmRzIGZvciBub2RlICVzPiIgJSAoc2Vs
Zi5ub2RlLCApCisKKworY2xhc3MgTm9kZShvYmplY3QpOgorICAgICIiIiBiYXNlIGNsYXNzIGZv
ciBDb2xsZWN0b3IgYW5kIEl0ZW0gdGhlIHRlc3QgY29sbGVjdGlvbiB0cmVlLgorICAgIENvbGxl
Y3RvciBzdWJjbGFzc2VzIGhhdmUgY2hpbGRyZW4sIEl0ZW1zIGFyZSB0ZXJtaW5hbCBub2Rlcy4i
IiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBwYXJlbnQ9Tm9uZSwgY29uZmlnPU5v
bmUsIHNlc3Npb249Tm9uZSk6CisgICAgICAgICM6IGEgdW5pcXVlIG5hbWUgd2l0aGluIHRoZSBz
Y29wZSBvZiB0aGUgcGFyZW50IG5vZGUKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorCisgICAg
ICAgICM6IHRoZSBwYXJlbnQgY29sbGVjdG9yIG5vZGUuCisgICAgICAgIHNlbGYucGFyZW50ID0g
cGFyZW50CisKKyAgICAgICAgIzogdGhlIHB5dGVzdCBjb25maWcgb2JqZWN0CisgICAgICAgIHNl
bGYuY29uZmlnID0gY29uZmlnIG9yIHBhcmVudC5jb25maWcKKworICAgICAgICAjOiB0aGUgc2Vz
c2lvbiB0aGlzIG5vZGUgaXMgcGFydCBvZgorICAgICAgICBzZWxmLnNlc3Npb24gPSBzZXNzaW9u
IG9yIHBhcmVudC5zZXNzaW9uCisKKyAgICAgICAgIzogZmlsZXN5c3RlbSBwYXRoIHdoZXJlIHRo
aXMgbm9kZSB3YXMgY29sbGVjdGVkIGZyb20gKGNhbiBiZSBOb25lKQorICAgICAgICBzZWxmLmZz
cGF0aCA9IGdldGF0dHIocGFyZW50LCAnZnNwYXRoJywgTm9uZSkKKworICAgICAgICAjOiBrZXl3
b3Jkcy9tYXJrZXJzIGNvbGxlY3RlZCBmcm9tIGFsbCBzY29wZXMKKyAgICAgICAgc2VsZi5rZXl3
b3JkcyA9IE5vZGVLZXl3b3JkcyhzZWxmKQorCisgICAgICAgICM6IGFsbG93IGFkZGluZyBvZiBl
eHRyYSBrZXl3b3JkcyB0byB1c2UgZm9yIG1hdGNoaW5nCisgICAgICAgIHNlbGYuZXh0cmFfa2V5
d29yZF9tYXRjaGVzID0gc2V0KCkKKworICAgICAgICAjIHVzZWQgZm9yIHN0b3JpbmcgYXJ0aWZp
Y2lhbCBmaXh0dXJlZGVmcyBmb3IgZGlyZWN0IHBhcmFtZXRyaXphdGlvbgorICAgICAgICBzZWxm
Ll9uYW1lMnBzZXVkb2ZpeHR1cmVkZWYgPSB7fQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGlo
b29rKHNlbGYpOgorICAgICAgICAiIiIgZnNwYXRoIHNlbnNpdGl2ZSBob29rIHByb3h5IHVzZWQg
dG8gY2FsbCBweXRlc3QgaG9va3MiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuc2Vzc2lvbi5nZXRo
b29rcHJveHkoc2VsZi5mc3BhdGgpCisKKyAgICBNb2R1bGUgPSBjb21wYXRwcm9wZXJ0eSgiTW9k
dWxlIikKKyAgICBDbGFzcyA9IGNvbXBhdHByb3BlcnR5KCJDbGFzcyIpCisgICAgSW5zdGFuY2Ug
PSBjb21wYXRwcm9wZXJ0eSgiSW5zdGFuY2UiKQorICAgIEZ1bmN0aW9uID0gY29tcGF0cHJvcGVy
dHkoIkZ1bmN0aW9uIikKKyAgICBGaWxlID0gY29tcGF0cHJvcGVydHkoIkZpbGUiKQorICAgIEl0
ZW0gPSBjb21wYXRwcm9wZXJ0eSgiSXRlbSIpCisKKyAgICBkZWYgX2dldGN1c3RvbWNsYXNzKHNl
bGYsIG5hbWUpOgorICAgICAgICBjbHMgPSBnZXRhdHRyKHNlbGYsIG5hbWUpCisgICAgICAgIGlm
IGNscyAhPSBnZXRhdHRyKHB5dGVzdCwgbmFtZSk6CisgICAgICAgICAgICBweS5sb2cuX2FwaXdh
cm4oIjIuMCIsICJ1c2Ugb2Ygbm9kZS4lcyBpcyBkZXByZWNhdGVkLCAiCisgICAgICAgICAgICAg
ICAgInVzZSBweXRlc3RfcHljb2xsZWN0X21ha2VpdGVtKC4uLikgdG8gY3JlYXRlIGN1c3RvbSAi
CisgICAgICAgICAgICAgICAgImNvbGxlY3Rpb24gbm9kZXMiICUgbmFtZSkKKyAgICAgICAgcmV0
dXJuIGNscworCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIjwlcyAl
cj4iICUoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnZXRhdHRyKHNlbGYsICduYW1lJywgTm9uZSkpCisKKyAgICBkZWYgd2FybihzZWxmLCBjb2Rl
LCBtZXNzYWdlKToKKyAgICAgICAgIiIiIGdlbmVyYXRlIGEgd2FybmluZyB3aXRoIHRoZSBnaXZl
biBjb2RlIGFuZCBtZXNzYWdlIGZvciB0aGlzCisgICAgICAgIGl0ZW0uICIiIgorICAgICAgICBh
c3NlcnQgaXNpbnN0YW5jZShjb2RlLCBzdHIpCisgICAgICAgIGZzbG9jYXRpb24gPSBnZXRhdHRy
KHNlbGYsICJsb2NhdGlvbiIsIE5vbmUpCisgICAgICAgIGlmIGZzbG9jYXRpb24gaXMgTm9uZToK
KyAgICAgICAgICAgIGZzbG9jYXRpb24gPSBnZXRhdHRyKHNlbGYsICJmc3BhdGgiLCBOb25lKQor
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgZnNsb2NhdGlvbiA9ICIlczolcyIgJSBmc2xvY2F0
aW9uWzoyXQorCisgICAgICAgIHNlbGYuaWhvb2sucHl0ZXN0X2xvZ3dhcm5pbmcuY2FsbF9oaXN0
b3JpYyhrd2FyZ3M9ZGljdCgKKyAgICAgICAgICAgIGNvZGU9Y29kZSwgbWVzc2FnZT1tZXNzYWdl
LAorICAgICAgICAgICAgbm9kZWlkPXNlbGYubm9kZWlkLCBmc2xvY2F0aW9uPWZzbG9jYXRpb24p
KQorCisgICAgIyBtZXRob2RzIGZvciBvcmRlcmluZyBub2RlcworICAgIEBwcm9wZXJ0eQorICAg
IGRlZiBub2RlaWQoc2VsZik6CisgICAgICAgICIiIiBhIDo6LXNlcGFyYXRlZCBzdHJpbmcgZGVu
b3RpbmcgaXRzIGNvbGxlY3Rpb24gdHJlZSBhZGRyZXNzLiAiIiIKKyAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgcmV0dXJuIHNlbGYuX25vZGVpZAorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJy
b3I6CisgICAgICAgICAgICBzZWxmLl9ub2RlaWQgPSB4ID0gc2VsZi5fbWFrZWlkKCkKKyAgICAg
ICAgICAgIHJldHVybiB4CisKKyAgICBkZWYgX21ha2VpZChzZWxmKToKKyAgICAgICAgcmV0dXJu
IHNlbGYucGFyZW50Lm5vZGVpZCArICI6OiIgKyBzZWxmLm5hbWUKKworICAgIGRlZiBfX2hhc2hf
XyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGhhc2goc2VsZi5ub2RlaWQpCisKKyAgICBkZWYgc2V0
dXAoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZWFyZG93bihzZWxmKToKKyAgICAg
ICAgcGFzcworCisgICAgZGVmIF9tZW1vaXplZGNhbGwoc2VsZiwgYXR0cm5hbWUsIGZ1bmN0aW9u
KToKKyAgICAgICAgZXhhdHRybmFtZSA9ICJfZXhfIiArIGF0dHJuYW1lCisgICAgICAgIGZhaWx1
cmUgPSBnZXRhdHRyKHNlbGYsIGV4YXR0cm5hbWUsIE5vbmUpCisgICAgICAgIGlmIGZhaWx1cmUg
aXMgbm90IE5vbmU6CisgICAgICAgICAgICBweS5idWlsdGluLl9yZXJhaXNlKGZhaWx1cmVbMF0s
IGZhaWx1cmVbMV0sIGZhaWx1cmVbMl0pCisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgYXR0cm5h
bWUpOgorICAgICAgICAgICAgcmV0dXJuIGdldGF0dHIoc2VsZiwgYXR0cm5hbWUpCisgICAgICAg
IHRyeToKKyAgICAgICAgICAgIHJlcyA9IGZ1bmN0aW9uKCkKKyAgICAgICAgZXhjZXB0IHB5LmJ1
aWx0aW4uX3N5c2V4OgorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZXhjZXB0OgorICAgICAg
ICAgICAgZmFpbHVyZSA9IHN5cy5leGNfaW5mbygpCisgICAgICAgICAgICBzZXRhdHRyKHNlbGYs
IGV4YXR0cm5hbWUsIGZhaWx1cmUpCisgICAgICAgICAgICByYWlzZQorICAgICAgICBzZXRhdHRy
KHNlbGYsIGF0dHJuYW1lLCByZXMpCisgICAgICAgIHJldHVybiByZXMKKworICAgIGRlZiBsaXN0
Y2hhaW4oc2VsZik6CisgICAgICAgICIiIiByZXR1cm4gbGlzdCBvZiBhbGwgcGFyZW50IGNvbGxl
Y3RvcnMgdXAgdG8gc2VsZiwKKyAgICAgICAgICAgIHN0YXJ0aW5nIGZyb20gcm9vdCBvZiBjb2xs
ZWN0aW9uIHRyZWUuICIiIgorICAgICAgICBjaGFpbiA9IFtdCisgICAgICAgIGl0ZW0gPSBzZWxm
CisgICAgICAgIHdoaWxlIGl0ZW0gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBjaGFpbi5hcHBl
bmQoaXRlbSkKKyAgICAgICAgICAgIGl0ZW0gPSBpdGVtLnBhcmVudAorICAgICAgICBjaGFpbi5y
ZXZlcnNlKCkKKyAgICAgICAgcmV0dXJuIGNoYWluCisKKyAgICBkZWYgYWRkX21hcmtlcihzZWxm
LCBtYXJrZXIpOgorICAgICAgICAiIiIgZHluYW1pY2FsbHkgYWRkIGEgbWFya2VyIG9iamVjdCB0
byB0aGUgbm9kZS4KKworICAgICAgICBgYG1hcmtlcmBgIGNhbiBiZSBhIHN0cmluZyBvciBweXRl
c3QubWFyay4qIGluc3RhbmNlLgorICAgICAgICAiIiIKKyAgICAgICAgZnJvbSBfcHl0ZXN0Lm1h
cmsgaW1wb3J0IE1hcmtEZWNvcmF0b3IKKyAgICAgICAgaWYgaXNpbnN0YW5jZShtYXJrZXIsIHB5
LmJ1aWx0aW4uX2Jhc2VzdHJpbmcpOgorICAgICAgICAgICAgbWFya2VyID0gTWFya0RlY29yYXRv
cihtYXJrZXIpCisgICAgICAgIGVsaWYgbm90IGlzaW5zdGFuY2UobWFya2VyLCBNYXJrRGVjb3Jh
dG9yKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImlzIG5vdCBhIHN0cmluZyBvciBw
eXRlc3QubWFyay4qIE1hcmtlciIpCisgICAgICAgIHNlbGYua2V5d29yZHNbbWFya2VyLm5hbWVd
ID0gbWFya2VyCisKKyAgICBkZWYgZ2V0X21hcmtlcihzZWxmLCBuYW1lKToKKyAgICAgICAgIiIi
IGdldCBhIG1hcmtlciBvYmplY3QgZnJvbSB0aGlzIG5vZGUgb3IgTm9uZSBpZgorICAgICAgICB0
aGUgbm9kZSBkb2Vzbid0IGhhdmUgYSBtYXJrZXIgd2l0aCB0aGF0IG5hbWUuICIiIgorICAgICAg
ICB2YWwgPSBzZWxmLmtleXdvcmRzLmdldChuYW1lLCBOb25lKQorICAgICAgICBpZiB2YWwgaXMg
bm90IE5vbmU6CisgICAgICAgICAgICBmcm9tIF9weXRlc3QubWFyayBpbXBvcnQgTWFya0luZm8s
IE1hcmtEZWNvcmF0b3IKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsLCAoTWFya0RlY29y
YXRvciwgTWFya0luZm8pKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsCisKKyAgICBkZWYg
bGlzdGV4dHJha2V5d29yZHMoc2VsZik6CisgICAgICAgICIiIiBSZXR1cm4gYSBzZXQgb2YgYWxs
IGV4dHJhIGtleXdvcmRzIGluIHNlbGYgYW5kIGFueSBwYXJlbnRzLiIiIgorICAgICAgICBleHRy
YV9rZXl3b3JkcyA9IHNldCgpCisgICAgICAgIGl0ZW0gPSBzZWxmCisgICAgICAgIGZvciBpdGVt
IGluIHNlbGYubGlzdGNoYWluKCk6CisgICAgICAgICAgICBleHRyYV9rZXl3b3Jkcy51cGRhdGUo
aXRlbS5leHRyYV9rZXl3b3JkX21hdGNoZXMpCisgICAgICAgIHJldHVybiBleHRyYV9rZXl3b3Jk
cworCisgICAgZGVmIGxpc3RuYW1lcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIFt4Lm5hbWUgZm9y
IHggaW4gc2VsZi5saXN0Y2hhaW4oKV0KKworICAgIGRlZiBhZGRmaW5hbGl6ZXIoc2VsZiwgZmlu
KToKKyAgICAgICAgIiIiIHJlZ2lzdGVyIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhp
cyBub2RlIGlzIGZpbmFsaXplZC4KKworICAgICAgICBUaGlzIG1ldGhvZCBjYW4gb25seSBiZSBj
YWxsZWQgd2hlbiB0aGlzIG5vZGUgaXMgYWN0aXZlCisgICAgICAgIGluIGEgc2V0dXAgY2hhaW4s
IGZvciBleGFtcGxlIGR1cmluZyBzZWxmLnNldHVwKCkuCisgICAgICAgICIiIgorICAgICAgICBz
ZWxmLnNlc3Npb24uX3NldHVwc3RhdGUuYWRkZmluYWxpemVyKGZpbiwgc2VsZikKKworICAgIGRl
ZiBnZXRwYXJlbnQoc2VsZiwgY2xzKToKKyAgICAgICAgIiIiIGdldCB0aGUgbmV4dCBwYXJlbnQg
bm9kZSAoaW5jbHVkaW5nIG91cnNlbGYpCisgICAgICAgIHdoaWNoIGlzIGFuIGluc3RhbmNlIG9m
IHRoZSBnaXZlbiBjbGFzcyIiIgorICAgICAgICBjdXJyZW50ID0gc2VsZgorICAgICAgICB3aGls
ZSBjdXJyZW50IGFuZCBub3QgaXNpbnN0YW5jZShjdXJyZW50LCBjbHMpOgorICAgICAgICAgICAg
Y3VycmVudCA9IGN1cnJlbnQucGFyZW50CisgICAgICAgIHJldHVybiBjdXJyZW50CisKKyAgICBk
ZWYgX3BydW5ldHJhY2ViYWNrKHNlbGYsIGV4Y2luZm8pOgorICAgICAgICBwYXNzCisKKyAgICBk
ZWYgX3JlcHJfZmFpbHVyZV9weShzZWxmLCBleGNpbmZvLCBzdHlsZT1Ob25lKToKKyAgICAgICAg
Zm0gPSBzZWxmLnNlc3Npb24uX2ZpeHR1cmVtYW5hZ2VyCisgICAgICAgIGlmIGV4Y2luZm8uZXJy
aXNpbnN0YW5jZShmbS5GaXh0dXJlTG9va3VwRXJyb3IpOgorICAgICAgICAgICAgcmV0dXJuIGV4
Y2luZm8udmFsdWUuZm9ybWF0cmVwcigpCisgICAgICAgIHRiZmlsdGVyID0gVHJ1ZQorICAgICAg
ICBpZiBzZWxmLmNvbmZpZy5vcHRpb24uZnVsbHRyYWNlOgorICAgICAgICAgICAgc3R5bGU9Imxv
bmciCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9wcnVuZXRyYWNlYmFjayhleGNp
bmZvKQorICAgICAgICAgICAgdGJmaWx0ZXIgPSBGYWxzZSAgIyBwcnVuZXRyYWNlYmFjayBhbHJl
YWR5IGRvZXMgaXQKKyAgICAgICAgICAgIGlmIHN0eWxlID09ICJhdXRvIjoKKyAgICAgICAgICAg
ICAgICBzdHlsZSA9ICJsb25nIgorICAgICAgICAjIFhYWCBzaG91bGQgZXhjaW5mby5nZXRyZXBy
IHJlY29yZCBhbGwgZGF0YSBhbmQgdG90ZXJtaW5hbCgpIHByb2Nlc3MgaXQ/CisgICAgICAgIGlm
IHN0eWxlIGlzIE5vbmU6CisgICAgICAgICAgICBpZiBzZWxmLmNvbmZpZy5vcHRpb24udGJzdHls
ZSA9PSAic2hvcnQiOgorICAgICAgICAgICAgICAgIHN0eWxlID0gInNob3J0IgorICAgICAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgICAgICBzdHlsZSA9ICJsb25nIgorCisgICAgICAgIHJldHVy
biBleGNpbmZvLmdldHJlcHIoZnVuY2FyZ3M9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaG93bG9jYWxzPXNlbGYuY29uZmlnLm9wdGlvbi5zaG93bG9jYWxzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXN0eWxlLCB0YmZpbHRlcj10YmZpbHRlcikK
KworICAgIHJlcHJfZmFpbHVyZSA9IF9yZXByX2ZhaWx1cmVfcHkKKworY2xhc3MgQ29sbGVjdG9y
KE5vZGUpOgorICAgICIiIiBDb2xsZWN0b3IgaW5zdGFuY2VzIGNyZWF0ZSBjaGlsZHJlbiB0aHJv
dWdoIGNvbGxlY3QoKQorICAgICAgICBhbmQgdGh1cyBpdGVyYXRpdmVseSBidWlsZCBhIHRyZWUu
CisgICAgIiIiCisKKyAgICBjbGFzcyBDb2xsZWN0RXJyb3IoRXhjZXB0aW9uKToKKyAgICAgICAg
IiIiIGFuIGVycm9yIGR1cmluZyBjb2xsZWN0aW9uLCBjb250YWlucyBhIGN1c3RvbSBtZXNzYWdl
LiAiIiIKKworICAgIGRlZiBjb2xsZWN0KHNlbGYpOgorICAgICAgICAiIiIgcmV0dXJucyBhIGxp
c3Qgb2YgY2hpbGRyZW4gKGl0ZW1zIGFuZCBjb2xsZWN0b3JzKQorICAgICAgICAgICAgZm9yIHRo
aXMgY29sbGVjdGlvbiBub2RlLgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVt
ZW50ZWRFcnJvcigiYWJzdHJhY3QiKQorCisgICAgZGVmIHJlcHJfZmFpbHVyZShzZWxmLCBleGNp
bmZvKToKKyAgICAgICAgIiIiIHJlcHJlc2VudCBhIGNvbGxlY3Rpb24gZmFpbHVyZS4gIiIiCisg
ICAgICAgIGlmIGV4Y2luZm8uZXJyaXNpbnN0YW5jZShzZWxmLkNvbGxlY3RFcnJvcik6CisgICAg
ICAgICAgICBleGMgPSBleGNpbmZvLnZhbHVlCisgICAgICAgICAgICByZXR1cm4gc3RyKGV4Yy5h
cmdzWzBdKQorICAgICAgICByZXR1cm4gc2VsZi5fcmVwcl9mYWlsdXJlX3B5KGV4Y2luZm8sIHN0
eWxlPSJzaG9ydCIpCisKKyAgICBkZWYgX21lbW9jb2xsZWN0KHNlbGYpOgorICAgICAgICAiIiIg
aW50ZXJuYWwgaGVscGVyIG1ldGhvZCB0byBjYWNoZSByZXN1bHRzIG9mIGNhbGxpbmcgY29sbGVj
dCgpLiAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX21lbW9pemVkY2FsbCgnX2NvbGxlY3RlZCcs
IGxhbWJkYTogbGlzdChzZWxmLmNvbGxlY3QoKSkpCisKKyAgICBkZWYgX3BydW5ldHJhY2ViYWNr
KHNlbGYsIGV4Y2luZm8pOgorICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICdmc3BhdGgnKToKKyAg
ICAgICAgICAgIHRyYWNlYmFjayA9IGV4Y2luZm8udHJhY2ViYWNrCisgICAgICAgICAgICBudHJh
Y2ViYWNrID0gdHJhY2ViYWNrLmN1dChwYXRoPXNlbGYuZnNwYXRoKQorICAgICAgICAgICAgaWYg
bnRyYWNlYmFjayA9PSB0cmFjZWJhY2s6CisgICAgICAgICAgICAgICAgbnRyYWNlYmFjayA9IG50
cmFjZWJhY2suY3V0KGV4Y2x1ZGVwYXRoPXRyYWNlYmFja2N1dGRpcikKKyAgICAgICAgICAgIGV4
Y2luZm8udHJhY2ViYWNrID0gbnRyYWNlYmFjay5maWx0ZXIoKQorCitjbGFzcyBGU0NvbGxlY3Rv
cihDb2xsZWN0b3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmc3BhdGgsIHBhcmVudD1Ob25l
LCBjb25maWc9Tm9uZSwgc2Vzc2lvbj1Ob25lKToKKyAgICAgICAgZnNwYXRoID0gcHkucGF0aC5s
b2NhbChmc3BhdGgpICMgeHh4IG9ubHkgZm9yIHRlc3RfcmVzdWx0bG9nLnB5PworICAgICAgICBu
YW1lID0gZnNwYXRoLmJhc2VuYW1lCisgICAgICAgIGlmIHBhcmVudCBpcyBub3QgTm9uZToKKyAg
ICAgICAgICAgIHJlbCA9IGZzcGF0aC5yZWx0byhwYXJlbnQuZnNwYXRoKQorICAgICAgICAgICAg
aWYgcmVsOgorICAgICAgICAgICAgICAgIG5hbWUgPSByZWwKKyAgICAgICAgICAgIG5hbWUgPSBu
YW1lLnJlcGxhY2Uob3Muc2VwLCAiLyIpCisgICAgICAgIHN1cGVyKEZTQ29sbGVjdG9yLCBzZWxm
KS5fX2luaXRfXyhuYW1lLCBwYXJlbnQsIGNvbmZpZywgc2Vzc2lvbikKKyAgICAgICAgc2VsZi5m
c3BhdGggPSBmc3BhdGgKKworICAgIGRlZiBfbWFrZWlkKHNlbGYpOgorICAgICAgICByZWxwYXRo
ID0gc2VsZi5mc3BhdGgucmVsdG8oc2VsZi5jb25maWcucm9vdGRpcikKKyAgICAgICAgaWYgb3Mu
c2VwICE9ICIvIjoKKyAgICAgICAgICAgIHJlbHBhdGggPSByZWxwYXRoLnJlcGxhY2Uob3Muc2Vw
LCAiLyIpCisgICAgICAgIHJldHVybiByZWxwYXRoCisKK2NsYXNzIEZpbGUoRlNDb2xsZWN0b3Ip
OgorICAgICIiIiBiYXNlIGNsYXNzIGZvciBjb2xsZWN0aW5nIHRlc3RzIGZyb20gYSBmaWxlLiAi
IiIKKworY2xhc3MgSXRlbShOb2RlKToKKyAgICAiIiIgYSBiYXNpYyB0ZXN0IGludm9jYXRpb24g
aXRlbS4gTm90ZSB0aGF0IGZvciBhIHNpbmdsZSBmdW5jdGlvbgorICAgIHRoZXJlIG1pZ2h0IGJl
IG11bHRpcGxlIHRlc3QgaW52b2NhdGlvbiBpdGVtcy4KKyAgICAiIiIKKyAgICBuZXh0aXRlbSA9
IE5vbmUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBwYXJlbnQ9Tm9uZSwgY29uZmln
PU5vbmUsIHNlc3Npb249Tm9uZSk6CisgICAgICAgIHN1cGVyKEl0ZW0sIHNlbGYpLl9faW5pdF9f
KG5hbWUsIHBhcmVudCwgY29uZmlnLCBzZXNzaW9uKQorICAgICAgICBzZWxmLl9yZXBvcnRfc2Vj
dGlvbnMgPSBbXQorCisgICAgZGVmIGFkZF9yZXBvcnRfc2VjdGlvbihzZWxmLCB3aGVuLCBrZXks
IGNvbnRlbnQpOgorICAgICAgICBpZiBjb250ZW50OgorICAgICAgICAgICAgc2VsZi5fcmVwb3J0
X3NlY3Rpb25zLmFwcGVuZCgod2hlbiwga2V5LCBjb250ZW50KSkKKworICAgIGRlZiByZXBvcnRp
bmZvKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5mc3BhdGgsIE5vbmUsICIiCisKKyAgICBA
cHJvcGVydHkKKyAgICBkZWYgbG9jYXRpb24oc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAg
ICAgIHJldHVybiBzZWxmLl9sb2NhdGlvbgorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6
CisgICAgICAgICAgICBsb2NhdGlvbiA9IHNlbGYucmVwb3J0aW5mbygpCisgICAgICAgICAgICAj
IGJlc3RyZWxwYXRoIGlzIGEgcXVpdGUgc2xvdyBmdW5jdGlvbgorICAgICAgICAgICAgY2FjaGUg
PSBzZWxmLmNvbmZpZy5fX2RpY3RfXy5zZXRkZWZhdWx0KCJfYmVzdHJlbHBhdGhjYWNoZSIsIHt9
KQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZzcGF0aCA9IGNhY2hlW2xvY2F0
aW9uWzBdXQorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgIGZz
cGF0aCA9IHNlbGYuc2Vzc2lvbi5mc3BhdGguYmVzdHJlbHBhdGgobG9jYXRpb25bMF0pCisgICAg
ICAgICAgICAgICAgY2FjaGVbbG9jYXRpb25bMF1dID0gZnNwYXRoCisgICAgICAgICAgICBsb2Nh
dGlvbiA9IChmc3BhdGgsIGxvY2F0aW9uWzFdLCBzdHIobG9jYXRpb25bMl0pKQorICAgICAgICAg
ICAgc2VsZi5fbG9jYXRpb24gPSBsb2NhdGlvbgorICAgICAgICAgICAgcmV0dXJuIGxvY2F0aW9u
CisKK2NsYXNzIE5vTWF0Y2goRXhjZXB0aW9uKToKKyAgICAiIiIgcmFpc2VkIGlmIG1hdGNoaW5n
IGNhbm5vdCBsb2NhdGUgYSBtYXRjaGluZyBuYW1lcy4gIiIiCisKK2NsYXNzIEludGVycnVwdGVk
KEtleWJvYXJkSW50ZXJydXB0KToKKyAgICAiIiIgc2lnbmFscyBhbiBpbnRlcnJ1cHRlZCB0ZXN0
IHJ1bi4gIiIiCisgICAgX19tb2R1bGVfXyA9ICdidWlsdGlucycgIyBmb3IgcHkzCisKK2NsYXNz
IFNlc3Npb24oRlNDb2xsZWN0b3IpOgorICAgIEludGVycnVwdGVkID0gSW50ZXJydXB0ZWQKKwor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25maWcpOgorICAgICAgICBGU0NvbGxlY3Rvci5fX2lu
aXRfXyhzZWxmLCBjb25maWcucm9vdGRpciwgcGFyZW50PU5vbmUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbmZpZz1jb25maWcsIHNlc3Npb249c2VsZikKKyAgICAgICAgc2VsZi5f
ZnMyaG9va3Byb3h5ID0ge30KKyAgICAgICAgc2VsZi50ZXN0c2ZhaWxlZCA9IDAKKyAgICAgICAg
c2VsZi50ZXN0c2NvbGxlY3RlZCA9IDAKKyAgICAgICAgc2VsZi5zaG91bGRzdG9wID0gRmFsc2UK
KyAgICAgICAgc2VsZi50cmFjZSA9IGNvbmZpZy50cmFjZS5yb290LmdldCgiY29sbGVjdGlvbiIp
CisgICAgICAgIHNlbGYuX25vcmVjdXJzZXBhdHRlcm5zID0gY29uZmlnLmdldGluaSgibm9yZWN1
cnNlZGlycyIpCisgICAgICAgIHNlbGYuc3RhcnRkaXIgPSBweS5wYXRoLmxvY2FsKCkKKyAgICAg
ICAgc2VsZi5jb25maWcucGx1Z2lubWFuYWdlci5yZWdpc3RlcihzZWxmLCBuYW1lPSJzZXNzaW9u
IikKKworICAgIGRlZiBfbWFrZWlkKHNlbGYpOgorICAgICAgICByZXR1cm4gIiIKKworICAgIEBw
eXRlc3QuaG9va2ltcGwodHJ5Zmlyc3Q9VHJ1ZSkKKyAgICBkZWYgcHl0ZXN0X2NvbGxlY3RzdGFy
dChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5zaG91bGRzdG9wOgorICAgICAgICAgICAgcmFpc2Ug
c2VsZi5JbnRlcnJ1cHRlZChzZWxmLnNob3VsZHN0b3ApCisKKyAgICBAcHl0ZXN0Lmhvb2tpbXBs
KHRyeWZpcnN0PVRydWUpCisgICAgZGVmIHB5dGVzdF9ydW50ZXN0X2xvZ3JlcG9ydChzZWxmLCBy
ZXBvcnQpOgorICAgICAgICBpZiByZXBvcnQuZmFpbGVkIGFuZCBub3QgaGFzYXR0cihyZXBvcnQs
ICd3YXN4ZmFpbCcpOgorICAgICAgICAgICAgc2VsZi50ZXN0c2ZhaWxlZCArPSAxCisgICAgICAg
ICAgICBtYXhmYWlsID0gc2VsZi5jb25maWcuZ2V0dmFsdWUoIm1heGZhaWwiKQorICAgICAgICAg
ICAgaWYgbWF4ZmFpbCBhbmQgc2VsZi50ZXN0c2ZhaWxlZCA+PSBtYXhmYWlsOgorICAgICAgICAg
ICAgICAgIHNlbGYuc2hvdWxkc3RvcCA9ICJzdG9wcGluZyBhZnRlciAlZCBmYWlsdXJlcyIgJSAo
CisgICAgICAgICAgICAgICAgICAgIHNlbGYudGVzdHNmYWlsZWQpCisgICAgcHl0ZXN0X2NvbGxl
Y3RyZXBvcnQgPSBweXRlc3RfcnVudGVzdF9sb2dyZXBvcnQKKworICAgIGRlZiBpc2luaXRwYXRo
KHNlbGYsIHBhdGgpOgorICAgICAgICByZXR1cm4gcGF0aCBpbiBzZWxmLl9pbml0aWFscGF0aHMK
KworICAgIGRlZiBnZXRob29rcHJveHkoc2VsZiwgZnNwYXRoKToKKyAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgcmV0dXJuIHNlbGYuX2ZzMmhvb2twcm94eVtmc3BhdGhdCisgICAgICAgIGV4Y2Vw
dCBLZXlFcnJvcjoKKyAgICAgICAgICAgICMgY2hlY2sgaWYgd2UgaGF2ZSB0aGUgY29tbW9uIGNh
c2Ugb2YgcnVubmluZworICAgICAgICAgICAgIyBob29rcyB3aXRoIGFsbCBjb25mdGVzdC5weSBm
aWxlc2FsbCBjb25mdGVzdC5weQorICAgICAgICAgICAgcG0gPSBzZWxmLmNvbmZpZy5wbHVnaW5t
YW5hZ2VyCisgICAgICAgICAgICBteV9jb25mdGVzdG1vZHVsZXMgPSBwbS5fZ2V0Y29uZnRlc3Rt
b2R1bGVzKGZzcGF0aCkKKyAgICAgICAgICAgIHJlbW92ZV9tb2RzID0gcG0uX2NvbmZ0ZXN0X3Bs
dWdpbnMuZGlmZmVyZW5jZShteV9jb25mdGVzdG1vZHVsZXMpCisgICAgICAgICAgICBpZiByZW1v
dmVfbW9kczoKKyAgICAgICAgICAgICAgICAjIG9uZSBvciBtb3JlIGNvbmZ0ZXN0cyBhcmUgbm90
IGluIHVzZSBhdCB0aGlzIGZzcGF0aAorICAgICAgICAgICAgICAgIHByb3h5ID0gRlNIb29rUHJv
eHkoZnNwYXRoLCBwbSwgcmVtb3ZlX21vZHMpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgICAgICMgYWxsIHBsdWdpcyBhcmUgYWN0aXZlIGZvciB0aGlzIGZzcGF0aAorICAgICAgICAg
ICAgICAgIHByb3h5ID0gc2VsZi5jb25maWcuaG9vaworCisgICAgICAgICAgICBzZWxmLl9mczJo
b29rcHJveHlbZnNwYXRoXSA9IHByb3h5CisgICAgICAgICAgICByZXR1cm4gcHJveHkKKworICAg
IGRlZiBwZXJmb3JtX2NvbGxlY3Qoc2VsZiwgYXJncz1Ob25lLCBnZW5pdGVtcz1UcnVlKToKKyAg
ICAgICAgaG9vayA9IHNlbGYuY29uZmlnLmhvb2sKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAg
aXRlbXMgPSBzZWxmLl9wZXJmb3JtX2NvbGxlY3QoYXJncywgZ2VuaXRlbXMpCisgICAgICAgICAg
ICBob29rLnB5dGVzdF9jb2xsZWN0aW9uX21vZGlmeWl0ZW1zKHNlc3Npb249c2VsZiwKKyAgICAg
ICAgICAgICAgICBjb25maWc9c2VsZi5jb25maWcsIGl0ZW1zPWl0ZW1zKQorICAgICAgICBmaW5h
bGx5OgorICAgICAgICAgICAgaG9vay5weXRlc3RfY29sbGVjdGlvbl9maW5pc2goc2Vzc2lvbj1z
ZWxmKQorICAgICAgICBzZWxmLnRlc3RzY29sbGVjdGVkID0gbGVuKGl0ZW1zKQorICAgICAgICBy
ZXR1cm4gaXRlbXMKKworICAgIGRlZiBfcGVyZm9ybV9jb2xsZWN0KHNlbGYsIGFyZ3MsIGdlbml0
ZW1zKToKKyAgICAgICAgaWYgYXJncyBpcyBOb25lOgorICAgICAgICAgICAgYXJncyA9IHNlbGYu
Y29uZmlnLmFyZ3MKKyAgICAgICAgc2VsZi50cmFjZSgicGVyZm9ybV9jb2xsZWN0Iiwgc2VsZiwg
YXJncykKKyAgICAgICAgc2VsZi50cmFjZS5yb290LmluZGVudCArPSAxCisgICAgICAgIHNlbGYu
X25vdGZvdW5kID0gW10KKyAgICAgICAgc2VsZi5faW5pdGlhbHBhdGhzID0gc2V0KCkKKyAgICAg
ICAgc2VsZi5faW5pdGlhbHBhcnRzID0gW10KKyAgICAgICAgc2VsZi5pdGVtcyA9IGl0ZW1zID0g
W10KKyAgICAgICAgZm9yIGFyZyBpbiBhcmdzOgorICAgICAgICAgICAgcGFydHMgPSBzZWxmLl9w
YXJzZWFyZyhhcmcpCisgICAgICAgICAgICBzZWxmLl9pbml0aWFscGFydHMuYXBwZW5kKHBhcnRz
KQorICAgICAgICAgICAgc2VsZi5faW5pdGlhbHBhdGhzLmFkZChwYXJ0c1swXSkKKyAgICAgICAg
cmVwID0gY29sbGVjdF9vbmVfbm9kZShzZWxmKQorICAgICAgICBzZWxmLmlob29rLnB5dGVzdF9j
b2xsZWN0cmVwb3J0KHJlcG9ydD1yZXApCisgICAgICAgIHNlbGYudHJhY2Uucm9vdC5pbmRlbnQg
LT0gMQorICAgICAgICBpZiBzZWxmLl9ub3Rmb3VuZDoKKyAgICAgICAgICAgIGVycm9ycyA9IFtd
CisgICAgICAgICAgICBmb3IgYXJnLCBleGMgaW4gc2VsZi5fbm90Zm91bmQ6CisgICAgICAgICAg
ICAgICAgbGluZSA9ICIobm8gbmFtZSAlciBpbiBhbnkgb2YgJXIpIiAlIChhcmcsIGV4Yy5hcmdz
WzBdKQorICAgICAgICAgICAgICAgIGVycm9ycy5hcHBlbmQoIm5vdCBmb3VuZDogJXNcbiVzIiAl
IChhcmcsIGxpbmUpKQorICAgICAgICAgICAgICAgICNYWFg6IHRlc3QgdGhpcworICAgICAgICAg
ICAgcmFpc2UgcHl0ZXN0LlVzYWdlRXJyb3IoKmVycm9ycykKKyAgICAgICAgaWYgbm90IGdlbml0
ZW1zOgorICAgICAgICAgICAgcmV0dXJuIHJlcC5yZXN1bHQKKyAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgIGlmIHJlcC5wYXNzZWQ6CisgICAgICAgICAgICAgICAgZm9yIG5vZGUgaW4gcmVwLnJl
c3VsdDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5pdGVtcy5leHRlbmQoc2VsZi5nZW5pdGVt
cyhub2RlKSkKKyAgICAgICAgICAgIHJldHVybiBpdGVtcworCisgICAgZGVmIGNvbGxlY3Qoc2Vs
Zik6CisgICAgICAgIGZvciBwYXJ0cyBpbiBzZWxmLl9pbml0aWFscGFydHM6CisgICAgICAgICAg
ICBhcmcgPSAiOjoiLmpvaW4obWFwKHN0ciwgcGFydHMpKQorICAgICAgICAgICAgc2VsZi50cmFj
ZSgicHJvY2Vzc2luZyBhcmd1bWVudCIsIGFyZykKKyAgICAgICAgICAgIHNlbGYudHJhY2Uucm9v
dC5pbmRlbnQgKz0gMQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZvciB4IGlu
IHNlbGYuX2NvbGxlY3QoYXJnKToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgeAorICAgICAg
ICAgICAgZXhjZXB0IE5vTWF0Y2g6CisgICAgICAgICAgICAgICAgIyB3ZSBhcmUgaW5zaWRlIGEg
bWFrZV9yZXBvcnQgaG9vayBzbworICAgICAgICAgICAgICAgICMgd2UgY2Fubm90IGRpcmVjdGx5
IHBhc3MgdGhyb3VnaCB0aGUgZXhjZXB0aW9uCisgICAgICAgICAgICAgICAgc2VsZi5fbm90Zm91
bmQuYXBwZW5kKChhcmcsIHN5cy5leGNfaW5mbygpWzFdKSkKKworICAgICAgICAgICAgc2VsZi50
cmFjZS5yb290LmluZGVudCAtPSAxCisKKyAgICBkZWYgX2NvbGxlY3Qoc2VsZiwgYXJnKToKKyAg
ICAgICAgbmFtZXMgPSBzZWxmLl9wYXJzZWFyZyhhcmcpCisgICAgICAgIHBhdGggPSBuYW1lcy5w
b3AoMCkKKyAgICAgICAgaWYgcGF0aC5jaGVjayhkaXI9MSk6CisgICAgICAgICAgICBhc3NlcnQg
bm90IG5hbWVzLCAiaW52YWxpZCBhcmcgJXIiICUoYXJnLCkKKyAgICAgICAgICAgIGZvciBwYXRo
IGluIHBhdGgudmlzaXQoZmlsPWxhbWJkYSB4OiB4LmNoZWNrKGZpbGU9MSksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlYz1zZWxmLl9yZWN1cnNlLCBiZj1UcnVlLCBzb3J0
PVRydWUpOgorICAgICAgICAgICAgICAgIGZvciB4IGluIHNlbGYuX2NvbGxlY3RmaWxlKHBhdGgp
OgorICAgICAgICAgICAgICAgICAgICB5aWVsZCB4CisgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICBhc3NlcnQgcGF0aC5jaGVjayhmaWxlPTEpCisgICAgICAgICAgICBmb3IgeCBpbiBzZWxmLm1h
dGNobm9kZXMoc2VsZi5fY29sbGVjdGZpbGUocGF0aCksIG5hbWVzKToKKyAgICAgICAgICAgICAg
ICB5aWVsZCB4CisKKyAgICBkZWYgX2NvbGxlY3RmaWxlKHNlbGYsIHBhdGgpOgorICAgICAgICBp
aG9vayA9IHNlbGYuZ2V0aG9va3Byb3h5KHBhdGgpCisgICAgICAgIGlmIG5vdCBzZWxmLmlzaW5p
dHBhdGgocGF0aCk6CisgICAgICAgICAgICBpZiBpaG9vay5weXRlc3RfaWdub3JlX2NvbGxlY3Qo
cGF0aD1wYXRoLCBjb25maWc9c2VsZi5jb25maWcpOgorICAgICAgICAgICAgICAgIHJldHVybiAo
KQorICAgICAgICByZXR1cm4gaWhvb2sucHl0ZXN0X2NvbGxlY3RfZmlsZShwYXRoPXBhdGgsIHBh
cmVudD1zZWxmKQorCisgICAgZGVmIF9yZWN1cnNlKHNlbGYsIHBhdGgpOgorICAgICAgICBpaG9v
ayA9IHNlbGYuZ2V0aG9va3Byb3h5KHBhdGguZGlycGF0aCgpKQorICAgICAgICBpZiBpaG9vay5w
eXRlc3RfaWdub3JlX2NvbGxlY3QocGF0aD1wYXRoLCBjb25maWc9c2VsZi5jb25maWcpOgorICAg
ICAgICAgICAgcmV0dXJuCisgICAgICAgIGZvciBwYXQgaW4gc2VsZi5fbm9yZWN1cnNlcGF0dGVy
bnM6CisgICAgICAgICAgICBpZiBwYXRoLmNoZWNrKGZubWF0Y2g9cGF0KToKKyAgICAgICAgICAg
ICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgaWhvb2sgPSBzZWxmLmdldGhvb2twcm94eShwYXRo
KQorICAgICAgICBpaG9vay5weXRlc3RfY29sbGVjdF9kaXJlY3RvcnkocGF0aD1wYXRoLCBwYXJl
bnQ9c2VsZikKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfdHJ5Y29udmVydHB5YXJn
KHNlbGYsIHgpOgorICAgICAgICBtb2QgPSBOb25lCisgICAgICAgIHBhdGggPSBbb3MucGF0aC5h
YnNwYXRoKCcuJyldICsgc3lzLnBhdGgKKyAgICAgICAgZm9yIG5hbWUgaW4geC5zcGxpdCgnLicp
OgorICAgICAgICAgICAgIyBpZ25vcmUgYW55dGhpbmcgdGhhdCdzIG5vdCBhIHByb3BlciBuYW1l
IGhlcmUKKyAgICAgICAgICAgICMgZWxzZSBzb21ldGhpbmcgbGlrZSAtLXB5YXJncyB3aWxsIG1l
c3MgdXAgJy4nCisgICAgICAgICAgICAjIHNpbmNlIGltcC5maW5kX21vZHVsZSB3aWxsIGFjdHVh
bGx5IHNvbWV0aW1lcyB3b3JrIGZvciBpdAorICAgICAgICAgICAgIyBidXQgaXQncyBzdXBwb3Nl
ZCB0byBiZSBjb25zaWRlcmVkIGEgZmlsZXN5c3RlbSBwYXRoCisgICAgICAgICAgICAjIG5vdCBh
IHBhY2thZ2UKKyAgICAgICAgICAgIGlmIG5hbWVfcmUubWF0Y2gobmFtZSkgaXMgTm9uZToKKyAg
ICAgICAgICAgICAgICByZXR1cm4geAorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAg
IGZkLCBtb2QsIHR5cGVfID0gaW1wLmZpbmRfbW9kdWxlKG5hbWUsIHBhdGgpCisgICAgICAgICAg
ICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICAgICAgcmV0dXJuIHgKKyAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgZmQgaXMgbm90IE5vbmU6CisgICAgICAgICAg
ICAgICAgICAgIGZkLmNsb3NlKCkKKworICAgICAgICAgICAgaWYgdHlwZV9bMl0gIT0gaW1wLlBL
R19ESVJFQ1RPUlk6CisgICAgICAgICAgICAgICAgcGF0aCA9IFtvcy5wYXRoLmRpcm5hbWUobW9k
KV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGF0aCA9IFttb2RdCisgICAg
ICAgIHJldHVybiBtb2QKKworICAgIGRlZiBfcGFyc2Vhcmcoc2VsZiwgYXJnKToKKyAgICAgICAg
IiIiIHJldHVybiAoZnNwYXRoLCBuYW1lcykgdHVwbGUgYWZ0ZXIgY2hlY2tpbmcgdGhlIGZpbGUg
ZXhpc3RzLiAiIiIKKyAgICAgICAgYXJnID0gc3RyKGFyZykKKyAgICAgICAgaWYgc2VsZi5jb25m
aWcub3B0aW9uLnB5YXJnczoKKyAgICAgICAgICAgIGFyZyA9IHNlbGYuX3RyeWNvbnZlcnRweWFy
ZyhhcmcpCisgICAgICAgIHBhcnRzID0gc3RyKGFyZykuc3BsaXQoIjo6IikKKyAgICAgICAgcmVs
cGF0aCA9IHBhcnRzWzBdLnJlcGxhY2UoIi8iLCBvcy5zZXApCisgICAgICAgIHBhdGggPSBzZWxm
LmNvbmZpZy5pbnZvY2F0aW9uX2Rpci5qb2luKHJlbHBhdGgsIGFicz1UcnVlKQorICAgICAgICBp
ZiBub3QgcGF0aC5jaGVjaygpOgorICAgICAgICAgICAgaWYgc2VsZi5jb25maWcub3B0aW9uLnB5
YXJnczoKKyAgICAgICAgICAgICAgICBtc2cgPSAiZmlsZSBvciBwYWNrYWdlIG5vdCBmb3VuZDog
IgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtc2cgPSAiZmlsZSBub3QgZm91
bmQ6ICIKKyAgICAgICAgICAgIHJhaXNlIHB5dGVzdC5Vc2FnZUVycm9yKG1zZyArIGFyZykKKyAg
ICAgICAgcGFydHNbMF0gPSBwYXRoCisgICAgICAgIHJldHVybiBwYXJ0cworCisgICAgZGVmIG1h
dGNobm9kZXMoc2VsZiwgbWF0Y2hpbmcsIG5hbWVzKToKKyAgICAgICAgc2VsZi50cmFjZSgibWF0
Y2hub2RlcyIsIG1hdGNoaW5nLCBuYW1lcykKKyAgICAgICAgc2VsZi50cmFjZS5yb290LmluZGVu
dCArPSAxCisgICAgICAgIG5vZGVzID0gc2VsZi5fbWF0Y2hub2RlcyhtYXRjaGluZywgbmFtZXMp
CisgICAgICAgIG51bSA9IGxlbihub2RlcykKKyAgICAgICAgc2VsZi50cmFjZSgibWF0Y2hub2Rl
cyBmaW5pc2hlZCAtPiAiLCBudW0sICJub2RlcyIpCisgICAgICAgIHNlbGYudHJhY2Uucm9vdC5p
bmRlbnQgLT0gMQorICAgICAgICBpZiBudW0gPT0gMDoKKyAgICAgICAgICAgIHJhaXNlIE5vTWF0
Y2gobWF0Y2hpbmcsIG5hbWVzWzoxXSkKKyAgICAgICAgcmV0dXJuIG5vZGVzCisKKyAgICBkZWYg
X21hdGNobm9kZXMoc2VsZiwgbWF0Y2hpbmcsIG5hbWVzKToKKyAgICAgICAgaWYgbm90IG1hdGNo
aW5nIG9yIG5vdCBuYW1lczoKKyAgICAgICAgICAgIHJldHVybiBtYXRjaGluZworICAgICAgICBu
YW1lID0gbmFtZXNbMF0KKyAgICAgICAgYXNzZXJ0IG5hbWUKKyAgICAgICAgbmV4dG5hbWVzID0g
bmFtZXNbMTpdCisgICAgICAgIHJlc3VsdG5vZGVzID0gW10KKyAgICAgICAgZm9yIG5vZGUgaW4g
bWF0Y2hpbmc6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG5vZGUsIHB5dGVzdC5JdGVtKToK
KyAgICAgICAgICAgICAgICBpZiBub3QgbmFtZXM6CisgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dG5vZGVzLmFwcGVuZChub2RlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAg
ICBhc3NlcnQgaXNpbnN0YW5jZShub2RlLCBweXRlc3QuQ29sbGVjdG9yKQorICAgICAgICAgICAg
cmVwID0gY29sbGVjdF9vbmVfbm9kZShub2RlKQorICAgICAgICAgICAgaWYgcmVwLnBhc3NlZDoK
KyAgICAgICAgICAgICAgICBoYXNfbWF0Y2hlZCA9IEZhbHNlCisgICAgICAgICAgICAgICAgZm9y
IHggaW4gcmVwLnJlc3VsdDoKKyAgICAgICAgICAgICAgICAgICAgIyBUT0RPOiByZW1vdmUgcGFy
YW1ldHJpemVkIHdvcmthcm91bmQgb25jZSBjb2xsZWN0aW9uIHN0cnVjdHVyZSBjb250YWlucyBw
YXJhbWV0cml6YXRpb24KKyAgICAgICAgICAgICAgICAgICAgaWYgeC5uYW1lID09IG5hbWUgb3Ig
eC5uYW1lLnNwbGl0KCJbIilbMF0gPT0gbmFtZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdG5vZGVzLmV4dGVuZChzZWxmLm1hdGNobm9kZXMoW3hdLCBuZXh0bmFtZXMpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgaGFzX21hdGNoZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgIyBY
WFggYWNjZXB0IElEcyB0aGF0IGRvbid0IGhhdmUgIigpIiBmb3IgY2xhc3MgaW5zdGFuY2VzCisg
ICAgICAgICAgICAgICAgaWYgbm90IGhhc19tYXRjaGVkIGFuZCBsZW4ocmVwLnJlc3VsdCkgPT0g
MSBhbmQgeC5uYW1lID09ICIoKSI6CisgICAgICAgICAgICAgICAgICAgIG5leHRuYW1lcy5pbnNl
cnQoMCwgbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0bm9kZXMuZXh0ZW5kKHNlbGYu
bWF0Y2hub2RlcyhbeF0sIG5leHRuYW1lcykpCisgICAgICAgICAgICBub2RlLmlob29rLnB5dGVz
dF9jb2xsZWN0cmVwb3J0KHJlcG9ydD1yZXApCisgICAgICAgIHJldHVybiByZXN1bHRub2Rlcwor
CisgICAgZGVmIGdlbml0ZW1zKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLnRyYWNlKCJnZW5p
dGVtcyIsIG5vZGUpCisgICAgICAgIGlmIGlzaW5zdGFuY2Uobm9kZSwgcHl0ZXN0Lkl0ZW0pOgor
ICAgICAgICAgICAgbm9kZS5paG9vay5weXRlc3RfaXRlbWNvbGxlY3RlZChpdGVtPW5vZGUpCisg
ICAgICAgICAgICB5aWVsZCBub2RlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhc3NlcnQg
aXNpbnN0YW5jZShub2RlLCBweXRlc3QuQ29sbGVjdG9yKQorICAgICAgICAgICAgcmVwID0gY29s
bGVjdF9vbmVfbm9kZShub2RlKQorICAgICAgICAgICAgaWYgcmVwLnBhc3NlZDoKKyAgICAgICAg
ICAgICAgICBmb3Igc3Vibm9kZSBpbiByZXAucmVzdWx0OgorICAgICAgICAgICAgICAgICAgICBm
b3IgeCBpbiBzZWxmLmdlbml0ZW1zKHN1Ym5vZGUpOgorICAgICAgICAgICAgICAgICAgICAgICAg
eWllbGQgeAorICAgICAgICAgICAgbm9kZS5paG9vay5weXRlc3RfY29sbGVjdHJlcG9ydChyZXBv
cnQ9cmVwKQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5
dGVzdC9fcHl0ZXN0L21hcmsucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMv
cHl0ZXN0L19weXRlc3QvbWFyay5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uMWE3NjM1NDAyNDAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBv
cnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvbWFyay5weQpAQCAtMCwwICsxLDMxMSBAQAor
IiIiIGdlbmVyaWMgbWVjaGFuaXNtIGZvciBtYXJraW5nIGFuZCBzZWxlY3RpbmcgcHl0aG9uIGZ1
bmN0aW9ucy4gIiIiCitpbXBvcnQgaW5zcGVjdAorCisKK2NsYXNzIE1hcmtlckVycm9yKEV4Y2Vw
dGlvbik6CisKKyAgICAiIiJFcnJvciBpbiB1c2Ugb2YgYSBweXRlc3QgbWFya2VyL2F0dHJpYnV0
ZS4iIiIKKworCitkZWYgcHl0ZXN0X25hbWVzcGFjZSgpOgorICAgIHJldHVybiB7J21hcmsnOiBN
YXJrR2VuZXJhdG9yKCl9CisKKworZGVmIHB5dGVzdF9hZGRvcHRpb24ocGFyc2VyKToKKyAgICBn
cm91cCA9IHBhcnNlci5nZXRncm91cCgiZ2VuZXJhbCIpCisgICAgZ3JvdXAuX2FkZG9wdGlvbigK
KyAgICAgICAgJy1rJywKKyAgICAgICAgYWN0aW9uPSJzdG9yZSIsIGRlc3Q9ImtleXdvcmQiLCBk
ZWZhdWx0PScnLCBtZXRhdmFyPSJFWFBSRVNTSU9OIiwKKyAgICAgICAgaGVscD0ib25seSBydW4g
dGVzdHMgd2hpY2ggbWF0Y2ggdGhlIGdpdmVuIHN1YnN0cmluZyBleHByZXNzaW9uLiAiCisgICAg
ICAgICAgICAgIkFuIGV4cHJlc3Npb24gaXMgYSBweXRob24gZXZhbHVhdGFibGUgZXhwcmVzc2lv
biAiCisgICAgICAgICAgICAgIndoZXJlIGFsbCBuYW1lcyBhcmUgc3Vic3RyaW5nLW1hdGNoZWQg
YWdhaW5zdCB0ZXN0IG5hbWVzICIKKyAgICAgICAgICAgICAiYW5kIHRoZWlyIHBhcmVudCBjbGFz
c2VzLiBFeGFtcGxlOiAtayAndGVzdF9tZXRob2Qgb3IgdGVzdCAiCisgICAgICAgICAgICAgIm90
aGVyJyBtYXRjaGVzIGFsbCB0ZXN0IGZ1bmN0aW9ucyBhbmQgY2xhc3NlcyB3aG9zZSBuYW1lICIK
KyAgICAgICAgICAgICAiY29udGFpbnMgJ3Rlc3RfbWV0aG9kJyBvciAndGVzdF9vdGhlcicuICIK
KyAgICAgICAgICAgICAiQWRkaXRpb25hbGx5IGtleXdvcmRzIGFyZSBtYXRjaGVkIHRvIGNsYXNz
ZXMgYW5kIGZ1bmN0aW9ucyAiCisgICAgICAgICAgICAgImNvbnRhaW5pbmcgZXh0cmEgbmFtZXMg
aW4gdGhlaXIgJ2V4dHJhX2tleXdvcmRfbWF0Y2hlcycgc2V0LCAiCisgICAgICAgICAgICAgImFz
IHdlbGwgYXMgZnVuY3Rpb25zIHdoaWNoIGhhdmUgbmFtZXMgYXNzaWduZWQgZGlyZWN0bHkgdG8g
dGhlbS4iCisgICAgKQorCisgICAgZ3JvdXAuX2FkZG9wdGlvbigKKyAgICAgICAgIi1tIiwKKyAg
ICAgICAgYWN0aW9uPSJzdG9yZSIsIGRlc3Q9Im1hcmtleHByIiwgZGVmYXVsdD0iIiwgbWV0YXZh
cj0iTUFSS0VYUFIiLAorICAgICAgICBoZWxwPSJvbmx5IHJ1biB0ZXN0cyBtYXRjaGluZyBnaXZl
biBtYXJrIGV4cHJlc3Npb24uICAiCisgICAgICAgICAgICAgImV4YW1wbGU6IC1tICdtYXJrMSBh
bmQgbm90IG1hcmsyJy4iCisgICAgKQorCisgICAgZ3JvdXAuYWRkb3B0aW9uKAorICAgICAgICAi
LS1tYXJrZXJzIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgaGVscD0ic2hvdyBtYXJr
ZXJzIChidWlsdGluLCBwbHVnaW4gYW5kIHBlci1wcm9qZWN0IG9uZXMpLiIKKyAgICApCisKKyAg
ICBwYXJzZXIuYWRkaW5pKCJtYXJrZXJzIiwgIm1hcmtlcnMgZm9yIHRlc3QgZnVuY3Rpb25zIiwg
J2xpbmVsaXN0JykKKworCitkZWYgcHl0ZXN0X2NtZGxpbmVfbWFpbihjb25maWcpOgorICAgIGlt
cG9ydCBfcHl0ZXN0LmNvbmZpZworICAgIGlmIGNvbmZpZy5vcHRpb24ubWFya2VyczoKKyAgICAg
ICAgY29uZmlnLl9kb19jb25maWd1cmUoKQorICAgICAgICB0dyA9IF9weXRlc3QuY29uZmlnLmNy
ZWF0ZV90ZXJtaW5hbF93cml0ZXIoY29uZmlnKQorICAgICAgICBmb3IgbGluZSBpbiBjb25maWcu
Z2V0aW5pKCJtYXJrZXJzIik6CisgICAgICAgICAgICBuYW1lLCByZXN0ID0gbGluZS5zcGxpdCgi
OiIsIDEpCisgICAgICAgICAgICB0dy53cml0ZSgiQHB5dGVzdC5tYXJrLiVzOiIgJSBuYW1lLCBi
b2xkPVRydWUpCisgICAgICAgICAgICB0dy5saW5lKHJlc3QpCisgICAgICAgICAgICB0dy5saW5l
KCkKKyAgICAgICAgY29uZmlnLl9lbnN1cmVfdW5jb25maWd1cmUoKQorICAgICAgICByZXR1cm4g
MAorcHl0ZXN0X2NtZGxpbmVfbWFpbi50cnlmaXJzdCA9IFRydWUKKworCitkZWYgcHl0ZXN0X2Nv
bGxlY3Rpb25fbW9kaWZ5aXRlbXMoaXRlbXMsIGNvbmZpZyk6CisgICAga2V5d29yZGV4cHIgPSBj
b25maWcub3B0aW9uLmtleXdvcmQKKyAgICBtYXRjaGV4cHIgPSBjb25maWcub3B0aW9uLm1hcmtl
eHByCisgICAgaWYgbm90IGtleXdvcmRleHByIGFuZCBub3QgbWF0Y2hleHByOgorICAgICAgICBy
ZXR1cm4KKyAgICAjIHB5dGVzdCB1c2VkIHRvIGFsbG93ICItIiBmb3IgbmVnYXRpbmcKKyAgICAj
IGJ1dCB0b2RheSB3ZSBqdXN0IGFsbG93ICItIiBhdCB0aGUgYmVnaW5uaW5nLCB1c2UgIm5vdCIg
aW5zdGVhZAorICAgICMgd2UgcHJvYmFibHkgcmVtb3ZlICItIiBhbGx0b2dldGhlciBzb29uCisg
ICAgaWYga2V5d29yZGV4cHIuc3RhcnRzd2l0aCgiLSIpOgorICAgICAgICBrZXl3b3JkZXhwciA9
ICJub3QgIiArIGtleXdvcmRleHByWzE6XQorICAgIHNlbGVjdHVudGlsID0gRmFsc2UKKyAgICBp
ZiBrZXl3b3JkZXhwclstMTpdID09ICI6IjoKKyAgICAgICAgc2VsZWN0dW50aWwgPSBUcnVlCisg
ICAgICAgIGtleXdvcmRleHByID0ga2V5d29yZGV4cHJbOi0xXQorCisgICAgcmVtYWluaW5nID0g
W10KKyAgICBkZXNlbGVjdGVkID0gW10KKyAgICBmb3IgY29saXRlbSBpbiBpdGVtczoKKyAgICAg
ICAgaWYga2V5d29yZGV4cHIgYW5kIG5vdCBtYXRjaGtleXdvcmQoY29saXRlbSwga2V5d29yZGV4
cHIpOgorICAgICAgICAgICAgZGVzZWxlY3RlZC5hcHBlbmQoY29saXRlbSkKKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIGlmIHNlbGVjdHVudGlsOgorICAgICAgICAgICAgICAgIGtleXdvcmRl
eHByID0gTm9uZQorICAgICAgICAgICAgaWYgbWF0Y2hleHByOgorICAgICAgICAgICAgICAgIGlm
IG5vdCBtYXRjaG1hcmsoY29saXRlbSwgbWF0Y2hleHByKToKKyAgICAgICAgICAgICAgICAgICAg
ZGVzZWxlY3RlZC5hcHBlbmQoY29saXRlbSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUK
KyAgICAgICAgICAgIHJlbWFpbmluZy5hcHBlbmQoY29saXRlbSkKKworICAgIGlmIGRlc2VsZWN0
ZWQ6CisgICAgICAgIGNvbmZpZy5ob29rLnB5dGVzdF9kZXNlbGVjdGVkKGl0ZW1zPWRlc2VsZWN0
ZWQpCisgICAgICAgIGl0ZW1zWzpdID0gcmVtYWluaW5nCisKKworY2xhc3MgTWFya01hcHBpbmc6
CisgICAgIiIiUHJvdmlkZXMgYSBsb2NhbCBtYXBwaW5nIGZvciBtYXJrZXJzIHdoZXJlIGl0ZW0g
YWNjZXNzCisgICAgcmVzb2x2ZXMgdG8gVHJ1ZSBpZiB0aGUgbWFya2VyIGlzIHByZXNlbnQuICIi
IgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBrZXl3b3Jkcyk6CisgICAgICAgIG15bWFya3MgPSBz
ZXQoKQorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBrZXl3b3Jkcy5pdGVtcygpOgorICAgICAg
ICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgTWFya0luZm8pIG9yIGlzaW5zdGFuY2UodmFsdWUs
IE1hcmtEZWNvcmF0b3IpOgorICAgICAgICAgICAgICAgIG15bWFya3MuYWRkKGtleSkKKyAgICAg
ICAgc2VsZi5fbXltYXJrcyA9IG15bWFya3MKKworICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBu
YW1lKToKKyAgICAgICAgcmV0dXJuIG5hbWUgaW4gc2VsZi5fbXltYXJrcworCisKK2NsYXNzIEtl
eXdvcmRNYXBwaW5nOgorICAgICIiIlByb3ZpZGVzIGEgbG9jYWwgbWFwcGluZyBmb3Iga2V5d29y
ZHMuCisgICAgR2l2ZW4gYSBsaXN0IG9mIG5hbWVzLCBtYXAgYW55IHN1YnN0cmluZyBvZiBvbmUg
b2YgdGhlc2UgbmFtZXMgdG8gVHJ1ZS4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
bmFtZXMpOgorICAgICAgICBzZWxmLl9uYW1lcyA9IG5hbWVzCisKKyAgICBkZWYgX19nZXRpdGVt
X18oc2VsZiwgc3VibmFtZSk6CisgICAgICAgIGZvciBuYW1lIGluIHNlbGYuX25hbWVzOgorICAg
ICAgICAgICAgaWYgc3VibmFtZSBpbiBuYW1lOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVl
CisgICAgICAgIHJldHVybiBGYWxzZQorCisKK2RlZiBtYXRjaG1hcmsoY29saXRlbSwgbWFya2V4
cHIpOgorICAgICIiIlRyaWVzIHRvIG1hdGNoIG9uIGFueSBtYXJrZXIgbmFtZXMsIGF0dGFjaGVk
IHRvIHRoZSBnaXZlbiBjb2xpdGVtLiIiIgorICAgIHJldHVybiBldmFsKG1hcmtleHByLCB7fSwg
TWFya01hcHBpbmcoY29saXRlbS5rZXl3b3JkcykpCisKKworZGVmIG1hdGNoa2V5d29yZChjb2xp
dGVtLCBrZXl3b3JkZXhwcik6CisgICAgIiIiVHJpZXMgdG8gbWF0Y2ggZ2l2ZW4ga2V5d29yZCBl
eHByZXNzaW9uIHRvIGdpdmVuIGNvbGxlY3RvciBpdGVtLgorCisgICAgV2lsbCBtYXRjaCBvbiB0
aGUgbmFtZSBvZiBjb2xpdGVtLCBpbmNsdWRpbmcgdGhlIG5hbWVzIG9mIGl0cyBwYXJlbnRzLgor
ICAgIE9ubHkgbWF0Y2hlcyBuYW1lcyBvZiBpdGVtcyB3aGljaCBhcmUgZWl0aGVyIGEgOmNsYXNz
OmBDbGFzc2Agb3IgYQorICAgIDpjbGFzczpgRnVuY3Rpb25gLgorICAgIEFkZGl0aW9uYWxseSwg
bWF0Y2hlcyBvbiBuYW1lcyBpbiB0aGUgJ2V4dHJhX2tleXdvcmRfbWF0Y2hlcycgc2V0IG9mCisg
ICAgYW55IGl0ZW0sIGFzIHdlbGwgYXMgbmFtZXMgZGlyZWN0bHkgYXNzaWduZWQgdG8gdGVzdCBm
dW5jdGlvbnMuCisgICAgIiIiCisgICAgbWFwcGVkX25hbWVzID0gc2V0KCkKKworICAgICMgQWRk
IHRoZSBuYW1lcyBvZiB0aGUgY3VycmVudCBpdGVtIGFuZCBhbnkgcGFyZW50IGl0ZW1zCisgICAg
aW1wb3J0IHB5dGVzdAorICAgIGZvciBpdGVtIGluIGNvbGl0ZW0ubGlzdGNoYWluKCk6CisgICAg
ICAgIGlmIG5vdCBpc2luc3RhbmNlKGl0ZW0sIHB5dGVzdC5JbnN0YW5jZSk6CisgICAgICAgICAg
ICBtYXBwZWRfbmFtZXMuYWRkKGl0ZW0ubmFtZSkKKworICAgICMgQWRkIHRoZSBuYW1lcyBhZGRl
ZCBhcyBleHRyYSBrZXl3b3JkcyB0byBjdXJyZW50IG9yIHBhcmVudCBpdGVtcworICAgIGZvciBu
YW1lIGluIGNvbGl0ZW0ubGlzdGV4dHJha2V5d29yZHMoKToKKyAgICAgICAgbWFwcGVkX25hbWVz
LmFkZChuYW1lKQorCisgICAgIyBBZGQgdGhlIG5hbWVzIGF0dGFjaGVkIHRvIHRoZSBjdXJyZW50
IGZ1bmN0aW9uIHRocm91Z2ggZGlyZWN0IGFzc2lnbm1lbnQKKyAgICBpZiBoYXNhdHRyKGNvbGl0
ZW0sICdmdW5jdGlvbicpOgorICAgICAgICBmb3IgbmFtZSBpbiBjb2xpdGVtLmZ1bmN0aW9uLl9f
ZGljdF9fOgorICAgICAgICAgICAgbWFwcGVkX25hbWVzLmFkZChuYW1lKQorCisgICAgbWFwcGlu
ZyA9IEtleXdvcmRNYXBwaW5nKG1hcHBlZF9uYW1lcykKKyAgICBpZiAiICIgbm90IGluIGtleXdv
cmRleHByOgorICAgICAgICAjIHNwZWNpYWwgY2FzZSB0byBhbGxvdyBmb3Igc2ltcGxlICItayBw
YXNzIiBhbmQgIi1rIDEuMyIKKyAgICAgICAgcmV0dXJuIG1hcHBpbmdba2V5d29yZGV4cHJdCisg
ICAgZWxpZiBrZXl3b3JkZXhwci5zdGFydHN3aXRoKCJub3QgIikgYW5kICIgIiBub3QgaW4ga2V5
d29yZGV4cHJbNDpdOgorICAgICAgICByZXR1cm4gbm90IG1hcHBpbmdba2V5d29yZGV4cHJbNDpd
XQorICAgIHJldHVybiBldmFsKGtleXdvcmRleHByLCB7fSwgbWFwcGluZykKKworCitkZWYgcHl0
ZXN0X2NvbmZpZ3VyZShjb25maWcpOgorICAgIGltcG9ydCBweXRlc3QKKyAgICBpZiBjb25maWcu
b3B0aW9uLnN0cmljdDoKKyAgICAgICAgcHl0ZXN0Lm1hcmsuX2NvbmZpZyA9IGNvbmZpZworCisK
K2NsYXNzIE1hcmtHZW5lcmF0b3I6CisgICAgIiIiIEZhY3RvcnkgZm9yIDpjbGFzczpgTWFya0Rl
Y29yYXRvcmAgb2JqZWN0cyAtIGV4cG9zZWQgYXMKKyAgICBhIGBgcHl0ZXN0Lm1hcmtgYCBzaW5n
bGV0b24gaW5zdGFuY2UuICBFeGFtcGxlOjoKKworICAgICAgICAgaW1wb3J0IHB5dGVzdAorICAg
ICAgICAgQHB5dGVzdC5tYXJrLnNsb3d0ZXN0CisgICAgICAgICBkZWYgdGVzdF9mdW5jdGlvbigp
OgorICAgICAgICAgICAgcGFzcworCisgICAgd2lsbCBzZXQgYSAnc2xvd3Rlc3QnIDpjbGFzczpg
TWFya0luZm9gIG9iamVjdAorICAgIG9uIHRoZSBgYHRlc3RfZnVuY3Rpb25gYCBvYmplY3QuICIi
IgorCisgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgorICAgICAgICBpZiBuYW1lWzBd
ID09ICJfIjoKKyAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCJNYXJrZXIgbmFtZSBt
dXN0IE5PVCBzdGFydCB3aXRoIHVuZGVyc2NvcmUiKQorICAgICAgICBpZiBoYXNhdHRyKHNlbGYs
ICdfY29uZmlnJyk6CisgICAgICAgICAgICBzZWxmLl9jaGVjayhuYW1lKQorICAgICAgICByZXR1
cm4gTWFya0RlY29yYXRvcihuYW1lKQorCisgICAgZGVmIF9jaGVjayhzZWxmLCBuYW1lKToKKyAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgbmFtZSBpbiBzZWxmLl9tYXJrZXJzOgorICAgICAg
ICAgICAgICAgIHJldHVybgorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAg
ICAgICBwYXNzCisgICAgICAgIHNlbGYuX21hcmtlcnMgPSBsID0gc2V0KCkKKyAgICAgICAgZm9y
IGxpbmUgaW4gc2VsZi5fY29uZmlnLmdldGluaSgibWFya2VycyIpOgorICAgICAgICAgICAgYmVn
aW5uaW5nID0gbGluZS5zcGxpdCgiOiIsIDEpCisgICAgICAgICAgICB4ID0gYmVnaW5uaW5nWzBd
LnNwbGl0KCIoIiwgMSlbMF0KKyAgICAgICAgICAgIGwuYWRkKHgpCisgICAgICAgIGlmIG5hbWUg
bm90IGluIHNlbGYuX21hcmtlcnM6CisgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigi
JXIgbm90IGEgcmVnaXN0ZXJlZCBtYXJrZXIiICUgKG5hbWUsKSkKKworZGVmIGlzdGVzdGZ1bmMo
ZnVuYyk6CisgICAgcmV0dXJuIGhhc2F0dHIoZnVuYywgIl9fY2FsbF9fIikgYW5kIFwKKyAgICAg
ICAgZ2V0YXR0cihmdW5jLCAiX19uYW1lX18iLCAiPGxhbWJkYT4iKSAhPSAiPGxhbWJkYT4iCisK
K2NsYXNzIE1hcmtEZWNvcmF0b3I6CisgICAgIiIiIEEgZGVjb3JhdG9yIGZvciB0ZXN0IGZ1bmN0
aW9ucyBhbmQgdGVzdCBjbGFzc2VzLiAgV2hlbiBhcHBsaWVkCisgICAgaXQgd2lsbCBjcmVhdGUg
OmNsYXNzOmBNYXJrSW5mb2Agb2JqZWN0cyB3aGljaCBtYXkgYmUKKyAgICA6cmVmOmByZXRyaWV2
ZWQgYnkgaG9va3MgYXMgaXRlbSBrZXl3b3JkcyA8ZXhjb250cm9sc2tpcD5gLgorICAgIE1hcmtE
ZWNvcmF0b3IgaW5zdGFuY2VzIGFyZSBvZnRlbiBjcmVhdGVkIGxpa2UgdGhpczo6CisKKyAgICAg
ICAgbWFyazEgPSBweXRlc3QubWFyay5OQU1FICAgICAgICAgICAgICAjIHNpbXBsZSBNYXJrRGVj
b3JhdG9yCisgICAgICAgIG1hcmsyID0gcHl0ZXN0Lm1hcmsuTkFNRShuYW1lMT12YWx1ZSkgIyBw
YXJhbWV0cml6ZWQgTWFya0RlY29yYXRvcgorCisgICAgYW5kIGNhbiB0aGVuIGJlIGFwcGxpZWQg
YXMgZGVjb3JhdG9ycyB0byB0ZXN0IGZ1bmN0aW9uczo6CisKKyAgICAgICAgQG1hcmsyCisgICAg
ICAgIGRlZiB0ZXN0X2Z1bmN0aW9uKCk6CisgICAgICAgICAgICBwYXNzCisKKyAgICBXaGVuIGEg
TWFya0RlY29yYXRvciBpbnN0YW5jZSBpcyBjYWxsZWQgaXQgZG9lcyB0aGUgZm9sbG93aW5nOgor
ICAgICAgMS4gSWYgY2FsbGVkIHdpdGggYSBzaW5nbGUgY2xhc3MgYXMgaXRzIG9ubHkgcG9zaXRp
b25hbCBhcmd1bWVudCBhbmQgbm8KKyAgICAgICAgIGFkZGl0aW9uYWwga2V5d29yZCBhcmd1bWVu
dHMsIGl0IGF0dGFjaGVzIGl0c2VsZiB0byB0aGUgY2xhc3Mgc28gaXQKKyAgICAgICAgIGdldHMg
YXBwbGllZCBhdXRvbWF0aWNhbGx5IHRvIGFsbCB0ZXN0IGNhc2VzIGZvdW5kIGluIHRoYXQgY2xh
c3MuCisgICAgICAyLiBJZiBjYWxsZWQgd2l0aCBhIHNpbmdsZSBmdW5jdGlvbiBhcyBpdHMgb25s
eSBwb3NpdGlvbmFsIGFyZ3VtZW50IGFuZAorICAgICAgICAgbm8gYWRkaXRpb25hbCBrZXl3b3Jk
IGFyZ3VtZW50cywgaXQgYXR0YWNoZXMgYSBNYXJrSW5mbyBvYmplY3QgdG8gdGhlCisgICAgICAg
ICBmdW5jdGlvbiwgY29udGFpbmluZyBhbGwgdGhlIGFyZ3VtZW50cyBhbHJlYWR5IHN0b3JlZCBp
bnRlcm5hbGx5IGluCisgICAgICAgICB0aGUgTWFya0RlY29yYXRvci4KKyAgICAgIDMuIFdoZW4g
Y2FsbGVkIGluIGFueSBvdGhlciBjYXNlLCBpdCBwZXJmb3JtcyBhICdmYWtlIGNvbnN0cnVjdGlv
bicgY2FsbCwKKyAgICAgICAgIGkuZS4gaXQgcmV0dXJucyBhIG5ldyBNYXJrRGVjb3JhdG9yIGlu
c3RhbmNlIHdpdGggdGhlIG9yaWdpbmFsCisgICAgICAgICBNYXJrRGVjb3JhdG9yJ3MgY29udGVu
dCB1cGRhdGVkIHdpdGggdGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhpcworICAgICAgICAgY2Fs
bC4KKworICAgIE5vdGU6IFRoZSBydWxlcyBhYm92ZSBwcmV2ZW50IE1hcmtEZWNvcmF0b3Igb2Jq
ZWN0cyBmcm9tIHN0b3Jpbmcgb25seSBhCisgICAgc2luZ2xlIGZ1bmN0aW9uIG9yIGNsYXNzIHJl
ZmVyZW5jZSBhcyB0aGVpciBwb3NpdGlvbmFsIGFyZ3VtZW50IHdpdGggbm8KKyAgICBhZGRpdGlv
bmFsIGtleXdvcmQgb3IgcG9zaXRpb25hbCBhcmd1bWVudHMuCisKKyAgICAiIiIKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgbmFtZSwgYXJncz1Ob25lLCBrd2FyZ3M9Tm9uZSk6CisgICAgICAgIHNl
bGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5hcmdzID0gYXJncyBvciAoKQorICAgICAgICBz
ZWxmLmt3YXJncyA9IGt3YXJncyBvciB7fQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIG1hcmtu
YW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5uYW1lICMgZm9yIGJhY2t3YXJkLWNvbXBh
dCAoMi40LjEgaGFkIHRoaXMgYXR0cikKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAg
ICAgZCA9IHNlbGYuX19kaWN0X18uY29weSgpCisgICAgICAgIG5hbWUgPSBkLnBvcCgnbmFtZScp
CisgICAgICAgIHJldHVybiAiPE1hcmtEZWNvcmF0b3IgJXIgJXI+IiAlIChuYW1lLCBkKQorCisg
ICAgZGVmIF9fY2FsbF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICIiIiBpZiBw
YXNzZWQgYSBzaW5nbGUgY2FsbGFibGUgYXJndW1lbnQ6IGRlY29yYXRlIGl0IHdpdGggbWFyayBp
bmZvLgorICAgICAgICAgICAgb3RoZXJ3aXNlIGFkZCAqYXJncy8qKmt3YXJncyBpbi1wbGFjZSB0
byBtYXJrIGluZm9ybWF0aW9uLiAiIiIKKyAgICAgICAgaWYgYXJncyBhbmQgbm90IGt3YXJnczoK
KyAgICAgICAgICAgIGZ1bmMgPSBhcmdzWzBdCisgICAgICAgICAgICBpc19jbGFzcyA9IGluc3Bl
Y3QuaXNjbGFzcyhmdW5jKQorICAgICAgICAgICAgaWYgbGVuKGFyZ3MpID09IDEgYW5kIChpc3Rl
c3RmdW5jKGZ1bmMpIG9yIGlzX2NsYXNzKToKKyAgICAgICAgICAgICAgICBpZiBpc19jbGFzczoK
KyAgICAgICAgICAgICAgICAgICAgaWYgaGFzYXR0cihmdW5jLCAncHl0ZXN0bWFyaycpOgorICAg
ICAgICAgICAgICAgICAgICAgICAgbWFya19saXN0ID0gZnVuYy5weXRlc3RtYXJrCisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShtYXJrX2xpc3QsIGxpc3QpOgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtfbGlzdCA9IFttYXJrX2xpc3RdCisgICAgICAg
ICAgICAgICAgICAgICAgICAjIGFsd2F5cyB3b3JrIG9uIGEgY29weSB0byBhdm9pZCB1cGRhdGlu
ZyBweXRlc3RtYXJrCisgICAgICAgICAgICAgICAgICAgICAgICAjIGZyb20gYSBzdXBlcmNsYXNz
IGJ5IGFjY2lkZW50CisgICAgICAgICAgICAgICAgICAgICAgICBtYXJrX2xpc3QgPSBtYXJrX2xp
c3QgKyBbc2VsZl0KKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmMucHl0ZXN0bWFyayA9IG1h
cmtfbGlzdAorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAg
ICAgZnVuYy5weXRlc3RtYXJrID0gW3NlbGZdCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgICAgICAgICAgaG9sZGVyID0gZ2V0YXR0cihmdW5jLCBzZWxmLm5hbWUsIE5vbmUpCisg
ICAgICAgICAgICAgICAgICAgIGlmIGhvbGRlciBpcyBOb25lOgorICAgICAgICAgICAgICAgICAg
ICAgICAgaG9sZGVyID0gTWFya0luZm8oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5uYW1lLCBzZWxmLmFyZ3MsIHNlbGYua3dhcmdzCisgICAgICAgICAgICAgICAgICAgICAgICAp
CisgICAgICAgICAgICAgICAgICAgICAgICBzZXRhdHRyKGZ1bmMsIHNlbGYubmFtZSwgaG9sZGVy
KQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgaG9s
ZGVyLmFkZChzZWxmLmFyZ3MsIHNlbGYua3dhcmdzKQorICAgICAgICAgICAgICAgIHJldHVybiBm
dW5jCisgICAgICAgIGt3ID0gc2VsZi5rd2FyZ3MuY29weSgpCisgICAgICAgIGt3LnVwZGF0ZShr
d2FyZ3MpCisgICAgICAgIGFyZ3MgPSBzZWxmLmFyZ3MgKyBhcmdzCisgICAgICAgIHJldHVybiBz
ZWxmLl9fY2xhc3NfXyhzZWxmLm5hbWUsIGFyZ3M9YXJncywga3dhcmdzPWt3KQorCisKK2NsYXNz
IE1hcmtJbmZvOgorICAgICIiIiBNYXJraW5nIG9iamVjdCBjcmVhdGVkIGJ5IDpjbGFzczpgTWFy
a0RlY29yYXRvcmAgaW5zdGFuY2VzLiAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwg
YXJncywga3dhcmdzKToKKyAgICAgICAgIzogbmFtZSBvZiBhdHRyaWJ1dGUKKyAgICAgICAgc2Vs
Zi5uYW1lID0gbmFtZQorICAgICAgICAjOiBwb3NpdGlvbmFsIGFyZ3VtZW50IGxpc3QsIGVtcHR5
IGlmIG5vbmUgc3BlY2lmaWVkCisgICAgICAgIHNlbGYuYXJncyA9IGFyZ3MKKyAgICAgICAgIzog
a2V5d29yZCBhcmd1bWVudCBkaWN0aW9uYXJ5LCBlbXB0eSBpZiBub3RoaW5nIHNwZWNpZmllZAor
ICAgICAgICBzZWxmLmt3YXJncyA9IGt3YXJncy5jb3B5KCkKKyAgICAgICAgc2VsZi5fYXJnbGlz
dCA9IFsoYXJncywga3dhcmdzLmNvcHkoKSldCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6Cisg
ICAgICAgIHJldHVybiAiPE1hcmtJbmZvICVyIGFyZ3M9JXIga3dhcmdzPSVyPiIgJSAoCisgICAg
ICAgICAgICBzZWxmLm5hbWUsIHNlbGYuYXJncywgc2VsZi5rd2FyZ3MKKyAgICAgICAgKQorCisg
ICAgZGVmIGFkZChzZWxmLCBhcmdzLCBrd2FyZ3MpOgorICAgICAgICAiIiIgYWRkIGEgTWFya0lu
Zm8gd2l0aCB0aGUgZ2l2ZW4gYXJncyBhbmQga3dhcmdzLiAiIiIKKyAgICAgICAgc2VsZi5fYXJn
bGlzdC5hcHBlbmQoKGFyZ3MsIGt3YXJncykpCisgICAgICAgIHNlbGYuYXJncyArPSBhcmdzCisg
ICAgICAgIHNlbGYua3dhcmdzLnVwZGF0ZShrd2FyZ3MpCisKKyAgICBkZWYgX19pdGVyX18oc2Vs
Zik6CisgICAgICAgICIiIiB5aWVsZCBNYXJrSW5mbyBvYmplY3RzIGVhY2ggcmVsYXRpbmcgdG8g
YSBtYXJraW5nLWNhbGwuICIiIgorICAgICAgICBmb3IgYXJncywga3dhcmdzIGluIHNlbGYuX2Fy
Z2xpc3Q6CisgICAgICAgICAgICB5aWVsZCBNYXJrSW5mbyhzZWxmLm5hbWUsIGFyZ3MsIGt3YXJn
cykKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3Qv
X3B5dGVzdC9tb25rZXlwYXRjaC5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29s
cy9weXRlc3QvX3B5dGVzdC9tb25rZXlwYXRjaC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uZDRjMTY5ZDM3YTkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJU
ZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvbW9ua2V5cGF0Y2gucHkKQEAg
LTAsMCArMSwyNTQgQEAKKyIiIiBtb25rZXlwYXRjaGluZyBhbmQgbW9ja2luZyBmdW5jdGlvbmFs
aXR5LiAgIiIiCisKK2ltcG9ydCBvcywgc3lzCitpbXBvcnQgcmUKKworZnJvbSBweS5idWlsdGlu
IGltcG9ydCBfYmFzZXN0cmluZworCitSRV9JTVBPUlRfRVJST1JfTkFNRSA9IHJlLmNvbXBpbGUo
Il5ObyBtb2R1bGUgbmFtZWQgKC4qKSQiKQorCisKK2RlZiBweXRlc3RfZnVuY2FyZ19fbW9ua2V5
cGF0Y2gocmVxdWVzdCk6CisgICAgIiIiVGhlIHJldHVybmVkIGBgbW9ua2V5cGF0Y2hgYCBmdW5j
YXJnIHByb3ZpZGVzIHRoZXNlCisgICAgaGVscGVyIG1ldGhvZHMgdG8gbW9kaWZ5IG9iamVjdHMs
IGRpY3Rpb25hcmllcyBvciBvcy5lbnZpcm9uOjoKKworICAgICAgICBtb25rZXlwYXRjaC5zZXRh
dHRyKG9iaiwgbmFtZSwgdmFsdWUsIHJhaXNpbmc9VHJ1ZSkKKyAgICAgICAgbW9ua2V5cGF0Y2gu
ZGVsYXR0cihvYmosIG5hbWUsIHJhaXNpbmc9VHJ1ZSkKKyAgICAgICAgbW9ua2V5cGF0Y2guc2V0
aXRlbShtYXBwaW5nLCBuYW1lLCB2YWx1ZSkKKyAgICAgICAgbW9ua2V5cGF0Y2guZGVsaXRlbShv
YmosIG5hbWUsIHJhaXNpbmc9VHJ1ZSkKKyAgICAgICAgbW9ua2V5cGF0Y2guc2V0ZW52KG5hbWUs
IHZhbHVlLCBwcmVwZW5kPUZhbHNlKQorICAgICAgICBtb25rZXlwYXRjaC5kZWxlbnYobmFtZSwg
dmFsdWUsIHJhaXNpbmc9VHJ1ZSkKKyAgICAgICAgbW9ua2V5cGF0Y2guc3lzcGF0aF9wcmVwZW5k
KHBhdGgpCisgICAgICAgIG1vbmtleXBhdGNoLmNoZGlyKHBhdGgpCisKKyAgICBBbGwgbW9kaWZp
Y2F0aW9ucyB3aWxsIGJlIHVuZG9uZSBhZnRlciB0aGUgcmVxdWVzdGluZworICAgIHRlc3QgZnVu
Y3Rpb24gaGFzIGZpbmlzaGVkLiBUaGUgYGByYWlzaW5nYGAKKyAgICBwYXJhbWV0ZXIgZGV0ZXJt
aW5lcyBpZiBhIEtleUVycm9yIG9yIEF0dHJpYnV0ZUVycm9yCisgICAgd2lsbCBiZSByYWlzZWQg
aWYgdGhlIHNldC9kZWxldGlvbiBvcGVyYXRpb24gaGFzIG5vIHRhcmdldC4KKyAgICAiIiIKKyAg
ICBtcGF0Y2ggPSBtb25rZXlwYXRjaCgpCisgICAgcmVxdWVzdC5hZGRmaW5hbGl6ZXIobXBhdGNo
LnVuZG8pCisgICAgcmV0dXJuIG1wYXRjaAorCisKK2RlZiByZXNvbHZlKG5hbWUpOgorICAgICMg
c2ltcGxpZmllZCBmcm9tIHpvcGUuZG90dGVkbmFtZQorICAgIHBhcnRzID0gbmFtZS5zcGxpdCgn
LicpCisKKyAgICB1c2VkID0gcGFydHMucG9wKDApCisgICAgZm91bmQgPSBfX2ltcG9ydF9fKHVz
ZWQpCisgICAgZm9yIHBhcnQgaW4gcGFydHM6CisgICAgICAgIHVzZWQgKz0gJy4nICsgcGFydAor
ICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3VuZCA9IGdldGF0dHIoZm91bmQsIHBhcnQpCisg
ICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICMgd2UgdXNlIGV4cGxpY2l0IHVu
LW5lc3Rpbmcgb2YgdGhlIGhhbmRsaW5nIGJsb2NrIGluIG9yZGVyCisgICAgICAgICMgdG8gYXZv
aWQgbmVzdGVkIGV4Y2VwdGlvbnMgb24gcHl0aG9uIDMKKyAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgX19pbXBvcnRfXyh1c2VkKQorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IgYXMgZXg6Cisg
ICAgICAgICAgICAjIHN0ciBpcyB1c2VkIGZvciBweTIgdnMgcHkzCisgICAgICAgICAgICBleHBl
Y3RlZCA9IHN0cihleCkuc3BsaXQoKVstMV0KKyAgICAgICAgICAgIGlmIGV4cGVjdGVkID09IHVz
ZWQ6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoCisgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgZXJy
b3IgaW4gJXM6ICVzJyAlICh1c2VkLCBleCkKKyAgICAgICAgICAgICAgICApCisgICAgICAgIGZv
dW5kID0gYW5ub3RhdGVkX2dldGF0dHIoZm91bmQsIHBhcnQsIHVzZWQpCisgICAgcmV0dXJuIGZv
dW5kCisKKworZGVmIGFubm90YXRlZF9nZXRhdHRyKG9iaiwgbmFtZSwgYW5uKToKKyAgICB0cnk6
CisgICAgICAgIG9iaiA9IGdldGF0dHIob2JqLCBuYW1lKQorICAgIGV4Y2VwdCBBdHRyaWJ1dGVF
cnJvcjoKKyAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoCisgICAgICAgICAgICAgICAgJyVy
IG9iamVjdCBhdCAlcyBoYXMgbm8gYXR0cmlidXRlICVyJyAlICgKKyAgICAgICAgICAgICAgICAg
ICAgdHlwZShvYmopLl9fbmFtZV9fLCBhbm4sIG5hbWUKKyAgICAgICAgICAgICAgICApCisgICAg
ICAgICkKKyAgICByZXR1cm4gb2JqCisKKworZGVmIGRlcml2ZV9pbXBvcnRwYXRoKGltcG9ydF9w
YXRoLCByYWlzaW5nKToKKyAgICBpZiBub3QgaXNpbnN0YW5jZShpbXBvcnRfcGF0aCwgX2Jhc2Vz
dHJpbmcpIG9yICIuIiBub3QgaW4gaW1wb3J0X3BhdGg6CisgICAgICAgIHJhaXNlIFR5cGVFcnJv
cigibXVzdCBiZSBhYnNvbHV0ZSBpbXBvcnQgcGF0aCBzdHJpbmcsIG5vdCAlciIgJQorICAgICAg
ICAgICAgICAgICAgICAgICAgKGltcG9ydF9wYXRoLCkpCisgICAgbW9kdWxlLCBhdHRyID0gaW1w
b3J0X3BhdGgucnNwbGl0KCcuJywgMSkKKyAgICB0YXJnZXQgPSByZXNvbHZlKG1vZHVsZSkKKyAg
ICBpZiByYWlzaW5nOgorICAgICAgICBhbm5vdGF0ZWRfZ2V0YXR0cih0YXJnZXQsIGF0dHIsIGFu
bj1tb2R1bGUpCisgICAgcmV0dXJuIGF0dHIsIHRhcmdldAorCisKK2NsYXNzIE5vdHNldDoKKyAg
ICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiPG5vdHNldD4iCisKKworbm90
c2V0ID0gTm90c2V0KCkKKworCitjbGFzcyBtb25rZXlwYXRjaDoKKyAgICAiIiIgT2JqZWN0IGtl
ZXBpbmcgYSByZWNvcmQgb2Ygc2V0YXR0ci9pdGVtL2Vudi9zeXNwYXRoIGNoYW5nZXMuICIiIgor
CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9zZXRhdHRyID0gW10KKyAg
ICAgICAgc2VsZi5fc2V0aXRlbSA9IFtdCisgICAgICAgIHNlbGYuX2N3ZCA9IE5vbmUKKyAgICAg
ICAgc2VsZi5fc2F2ZXN5c3BhdGggPSBOb25lCisKKyAgICBkZWYgc2V0YXR0cihzZWxmLCB0YXJn
ZXQsIG5hbWUsIHZhbHVlPW5vdHNldCwgcmFpc2luZz1UcnVlKToKKyAgICAgICAgIiIiIFNldCBh
dHRyaWJ1dGUgdmFsdWUgb24gdGFyZ2V0LCBtZW1vcml6aW5nIHRoZSBvbGQgdmFsdWUuCisgICAg
ICAgIEJ5IGRlZmF1bHQgcmFpc2UgQXR0cmlidXRlRXJyb3IgaWYgdGhlIGF0dHJpYnV0ZSBkaWQg
bm90IGV4aXN0LgorCisgICAgICAgIEZvciBjb252ZW5pZW5jZSB5b3UgY2FuIHNwZWNpZnkgYSBz
dHJpbmcgYXMgYGB0YXJnZXRgYCB3aGljaAorICAgICAgICB3aWxsIGJlIGludGVycHJldGVkIGFz
IGEgZG90dGVkIGltcG9ydCBwYXRoLCB3aXRoIHRoZSBsYXN0IHBhcnQKKyAgICAgICAgYmVpbmcg
dGhlIGF0dHJpYnV0ZSBuYW1lLiAgRXhhbXBsZToKKyAgICAgICAgYGBtb25rZXlwYXRjaC5zZXRh
dHRyKCJvcy5nZXRjd2QiLCBsYW1iZGEgeDogIi8iKWBgCisgICAgICAgIHdvdWxkIHNldCB0aGUg
YGBnZXRjd2RgYCBmdW5jdGlvbiBvZiB0aGUgYGBvc2BgIG1vZHVsZS4KKworICAgICAgICBUaGUg
YGByYWlzaW5nYGAgdmFsdWUgZGV0ZXJtaW5lcyBpZiB0aGUgc2V0YXR0ciBzaG91bGQgZmFpbAor
ICAgICAgICBpZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBhbHJlYWR5IHByZXNlbnQgKGRlZmF1bHRz
IHRvIFRydWUKKyAgICAgICAgd2hpY2ggbWVhbnMgaXQgd2lsbCByYWlzZSkuCisgICAgICAgICIi
IgorICAgICAgICBfX3RyYWNlYmFja2hpZGVfXyA9IFRydWUKKyAgICAgICAgaW1wb3J0IGluc3Bl
Y3QKKworICAgICAgICBpZiB2YWx1ZSBpcyBub3RzZXQ6CisgICAgICAgICAgICBpZiBub3QgaXNp
bnN0YW5jZSh0YXJnZXQsIF9iYXNlc3RyaW5nKToKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBl
RXJyb3IoInVzZSBzZXRhdHRyKHRhcmdldCwgbmFtZSwgdmFsdWUpIG9yICIKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgInNldGF0dHIodGFyZ2V0LCB2YWx1ZSkgd2l0aCB0YXJnZXQg
YmVpbmcgYSBkb3R0ZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1wb3J0
IHN0cmluZyIpCisgICAgICAgICAgICB2YWx1ZSA9IG5hbWUKKyAgICAgICAgICAgIG5hbWUsIHRh
cmdldCA9IGRlcml2ZV9pbXBvcnRwYXRoKHRhcmdldCwgcmFpc2luZykKKworICAgICAgICBvbGR2
YWwgPSBnZXRhdHRyKHRhcmdldCwgbmFtZSwgbm90c2V0KQorICAgICAgICBpZiByYWlzaW5nIGFu
ZCBvbGR2YWwgaXMgbm90c2V0OgorICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoIiVy
IGhhcyBubyBhdHRyaWJ1dGUgJXIiICUgKHRhcmdldCwgbmFtZSkpCisKKyAgICAgICAgIyBhdm9p
ZCBjbGFzcyBkZXNjcmlwdG9ycyBsaWtlIHN0YXRpY21ldGhvZC9jbGFzc21ldGhvZAorICAgICAg
ICBpZiBpbnNwZWN0LmlzY2xhc3ModGFyZ2V0KToKKyAgICAgICAgICAgIG9sZHZhbCA9IHRhcmdl
dC5fX2RpY3RfXy5nZXQobmFtZSwgbm90c2V0KQorICAgICAgICBzZWxmLl9zZXRhdHRyLmFwcGVu
ZCgodGFyZ2V0LCBuYW1lLCBvbGR2YWwpKQorICAgICAgICBzZXRhdHRyKHRhcmdldCwgbmFtZSwg
dmFsdWUpCisKKyAgICBkZWYgZGVsYXR0cihzZWxmLCB0YXJnZXQsIG5hbWU9bm90c2V0LCByYWlz
aW5nPVRydWUpOgorICAgICAgICAiIiIgRGVsZXRlIGF0dHJpYnV0ZSBgYG5hbWVgYCBmcm9tIGBg
dGFyZ2V0YGAsIGJ5IGRlZmF1bHQgcmFpc2UKKyAgICAgICAgQXR0cmlidXRlRXJyb3IgaXQgdGhl
IGF0dHJpYnV0ZSBkaWQgbm90IHByZXZpb3VzbHkgZXhpc3QuCisKKyAgICAgICAgSWYgbm8gYGBu
YW1lYGAgaXMgc3BlY2lmaWVkIGFuZCBgYHRhcmdldGBgIGlzIGEgc3RyaW5nCisgICAgICAgIGl0
IHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgYSBkb3R0ZWQgaW1wb3J0IHBhdGggd2l0aCB0aGUKKyAg
ICAgICAgbGFzdCBwYXJ0IGJlaW5nIHRoZSBhdHRyaWJ1dGUgbmFtZS4KKworICAgICAgICBJZiBg
YHJhaXNpbmdgYCBpcyBzZXQgdG8gRmFsc2UsIG5vIGV4Y2VwdGlvbiB3aWxsIGJlIHJhaXNlZCBp
ZiB0aGUKKyAgICAgICAgYXR0cmlidXRlIGlzIG1pc3NpbmcuCisgICAgICAgICIiIgorICAgICAg
ICBfX3RyYWNlYmFja2hpZGVfXyA9IFRydWUKKyAgICAgICAgaWYgbmFtZSBpcyBub3RzZXQ6Cisg
ICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh0YXJnZXQsIF9iYXNlc3RyaW5nKToKKyAgICAg
ICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInVzZSBkZWxhdHRyKHRhcmdldCwgbmFtZSkgb3Ig
IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVsYXR0cih0YXJnZXQpIHdpdGgg
dGFyZ2V0IGJlaW5nIGEgZG90dGVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ImltcG9ydCBzdHJpbmciKQorICAgICAgICAgICAgbmFtZSwgdGFyZ2V0ID0gZGVyaXZlX2ltcG9y
dHBhdGgodGFyZ2V0LCByYWlzaW5nKQorCisgICAgICAgIGlmIG5vdCBoYXNhdHRyKHRhcmdldCwg
bmFtZSk6CisgICAgICAgICAgICBpZiByYWlzaW5nOgorICAgICAgICAgICAgICAgIHJhaXNlIEF0
dHJpYnV0ZUVycm9yKG5hbWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9zZXRh
dHRyLmFwcGVuZCgodGFyZ2V0LCBuYW1lLCBnZXRhdHRyKHRhcmdldCwgbmFtZSwgbm90c2V0KSkp
CisgICAgICAgICAgICBkZWxhdHRyKHRhcmdldCwgbmFtZSkKKworICAgIGRlZiBzZXRpdGVtKHNl
bGYsIGRpYywgbmFtZSwgdmFsdWUpOgorICAgICAgICAiIiIgU2V0IGRpY3Rpb25hcnkgZW50cnkg
YGBuYW1lYGAgdG8gdmFsdWUuICIiIgorICAgICAgICBzZWxmLl9zZXRpdGVtLmFwcGVuZCgoZGlj
LCBuYW1lLCBkaWMuZ2V0KG5hbWUsIG5vdHNldCkpKQorICAgICAgICBkaWNbbmFtZV0gPSB2YWx1
ZQorCisgICAgZGVmIGRlbGl0ZW0oc2VsZiwgZGljLCBuYW1lLCByYWlzaW5nPVRydWUpOgorICAg
ICAgICAiIiIgRGVsZXRlIGBgbmFtZWBgIGZyb20gZGljdC4gUmFpc2UgS2V5RXJyb3IgaWYgaXQg
ZG9lc24ndCBleGlzdC4KKworICAgICAgICBJZiBgYHJhaXNpbmdgYCBpcyBzZXQgdG8gRmFsc2Us
IG5vIGV4Y2VwdGlvbiB3aWxsIGJlIHJhaXNlZCBpZiB0aGUKKyAgICAgICAga2V5IGlzIG1pc3Np
bmcuCisgICAgICAgICIiIgorICAgICAgICBpZiBuYW1lIG5vdCBpbiBkaWM6CisgICAgICAgICAg
ICBpZiByYWlzaW5nOgorICAgICAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKG5hbWUpCisgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9zZXRpdGVtLmFwcGVuZCgoZGljLCBuYW1lLCBk
aWMuZ2V0KG5hbWUsIG5vdHNldCkpKQorICAgICAgICAgICAgZGVsIGRpY1tuYW1lXQorCisgICAg
ZGVmIHNldGVudihzZWxmLCBuYW1lLCB2YWx1ZSwgcHJlcGVuZD1Ob25lKToKKyAgICAgICAgIiIi
IFNldCBlbnZpcm9ubWVudCB2YXJpYWJsZSBgYG5hbWVgYCB0byBgYHZhbHVlYGAuICBJZiBgYHBy
ZXBlbmRgYAorICAgICAgICBpcyBhIGNoYXJhY3RlciwgcmVhZCB0aGUgY3VycmVudCBlbnZpcm9u
bWVudCB2YXJpYWJsZSB2YWx1ZQorICAgICAgICBhbmQgcHJlcGVuZCB0aGUgYGB2YWx1ZWBgIGFk
am9pbmVkIHdpdGggdGhlIGBgcHJlcGVuZGBgIGNoYXJhY3Rlci4iIiIKKyAgICAgICAgdmFsdWUg
PSBzdHIodmFsdWUpCisgICAgICAgIGlmIHByZXBlbmQgYW5kIG5hbWUgaW4gb3MuZW52aXJvbjoK
KyAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgKyBwcmVwZW5kICsgb3MuZW52aXJvbltuYW1lXQor
ICAgICAgICBzZWxmLnNldGl0ZW0ob3MuZW52aXJvbiwgbmFtZSwgdmFsdWUpCisKKyAgICBkZWYg
ZGVsZW52KHNlbGYsIG5hbWUsIHJhaXNpbmc9VHJ1ZSk6CisgICAgICAgICIiIiBEZWxldGUgYGBu
YW1lYGAgZnJvbSB0aGUgZW52aXJvbm1lbnQuIFJhaXNlIEtleUVycm9yIGl0IGRvZXMgbm90Cisg
ICAgICAgIGV4aXN0LgorCisgICAgICAgIElmIGBgcmFpc2luZ2BgIGlzIHNldCB0byBGYWxzZSwg
bm8gZXhjZXB0aW9uIHdpbGwgYmUgcmFpc2VkIGlmIHRoZQorICAgICAgICBlbnZpcm9ubWVudCB2
YXJpYWJsZSBpcyBtaXNzaW5nLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5kZWxpdGVtKG9z
LmVudmlyb24sIG5hbWUsIHJhaXNpbmc9cmFpc2luZykKKworICAgIGRlZiBzeXNwYXRoX3ByZXBl
bmQoc2VsZiwgcGF0aCk6CisgICAgICAgICIiIiBQcmVwZW5kIGBgcGF0aGBgIHRvIGBgc3lzLnBh
dGhgYCBsaXN0IG9mIGltcG9ydCBsb2NhdGlvbnMuICIiIgorICAgICAgICBpZiBzZWxmLl9zYXZl
c3lzcGF0aCBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5fc2F2ZXN5c3BhdGggPSBzeXMucGF0
aFs6XQorICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgc3RyKHBhdGgpKQorCisgICAgZGVmIGNo
ZGlyKHNlbGYsIHBhdGgpOgorICAgICAgICAiIiIgQ2hhbmdlIHRoZSBjdXJyZW50IHdvcmtpbmcg
ZGlyZWN0b3J5IHRvIHRoZSBzcGVjaWZpZWQgcGF0aC4KKyAgICAgICAgUGF0aCBjYW4gYmUgYSBz
dHJpbmcgb3IgYSBweS5wYXRoLmxvY2FsIG9iamVjdC4KKyAgICAgICAgIiIiCisgICAgICAgIGlm
IHNlbGYuX2N3ZCBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5fY3dkID0gb3MuZ2V0Y3dkKCkK
KyAgICAgICAgaWYgaGFzYXR0cihwYXRoLCAiY2hkaXIiKToKKyAgICAgICAgICAgIHBhdGguY2hk
aXIoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3MuY2hkaXIocGF0aCkKKworICAgIGRl
ZiB1bmRvKHNlbGYpOgorICAgICAgICAiIiIgVW5kbyBwcmV2aW91cyBjaGFuZ2VzLiAgVGhpcyBj
YWxsIGNvbnN1bWVzIHRoZQorICAgICAgICB1bmRvIHN0YWNrLiBDYWxsaW5nIGl0IGEgc2Vjb25k
IHRpbWUgaGFzIG5vIGVmZmVjdCB1bmxlc3MKKyAgICAgICAgeW91IGRvIG1vcmUgbW9ua2V5cGF0
Y2hpbmcgYWZ0ZXIgdGhlIHVuZG8gY2FsbC4KKyAgICAgICAgCisgICAgICAgIFRoZXJlIGlzIGdl
bmVyYWxseSBubyBuZWVkIHRvIGNhbGwgYHVuZG8oKWAsIHNpbmNlIGl0IGlzCisgICAgICAgIGNh
bGxlZCBhdXRvbWF0aWNhbGx5IGR1cmluZyB0ZWFyLWRvd24uCisgICAgICAgIAorICAgICAgICBO
b3RlIHRoYXQgdGhlIHNhbWUgYG1vbmtleXBhdGNoYCBmaXh0dXJlIGlzIHVzZWQgYWNyb3NzIGEK
KyAgICAgICAgc2luZ2xlIHRlc3QgZnVuY3Rpb24gaW52b2NhdGlvbi4gSWYgYG1vbmtleXBhdGNo
YCBpcyB1c2VkIGJvdGggYnkKKyAgICAgICAgdGhlIHRlc3QgZnVuY3Rpb24gaXRzZWxmIGFuZCBv
bmUgb2YgdGhlIHRlc3QgZml4dHVyZXMsCisgICAgICAgIGNhbGxpbmcgYHVuZG8oKWAgd2lsbCB1
bmRvIGFsbCBvZiB0aGUgY2hhbmdlcyBtYWRlIGluCisgICAgICAgIGJvdGggZnVuY3Rpb25zLgor
ICAgICAgICAiIiIKKyAgICAgICAgZm9yIG9iaiwgbmFtZSwgdmFsdWUgaW4gcmV2ZXJzZWQoc2Vs
Zi5fc2V0YXR0cik6CisgICAgICAgICAgICBpZiB2YWx1ZSBpcyBub3Qgbm90c2V0OgorICAgICAg
ICAgICAgICAgIHNldGF0dHIob2JqLCBuYW1lLCB2YWx1ZSkKKyAgICAgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICAgICAgZGVsYXR0cihvYmosIG5hbWUpCisgICAgICAgIHNlbGYuX3NldGF0dHJb
Ol0gPSBbXQorICAgICAgICBmb3IgZGljdGlvbmFyeSwgbmFtZSwgdmFsdWUgaW4gcmV2ZXJzZWQo
c2VsZi5fc2V0aXRlbSk6CisgICAgICAgICAgICBpZiB2YWx1ZSBpcyBub3RzZXQ6CisgICAgICAg
ICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBkZWwgZGljdGlvbmFyeVtuYW1lXQor
ICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFz
cyAgIyB3YXMgYWxyZWFkeSBkZWxldGVkLCBzbyB3ZSBoYXZlIHRoZSBkZXNpcmVkIHN0YXRlCisg
ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRpY3Rpb25hcnlbbmFtZV0gPSB2YWx1
ZQorICAgICAgICBzZWxmLl9zZXRpdGVtWzpdID0gW10KKyAgICAgICAgaWYgc2VsZi5fc2F2ZXN5
c3BhdGggaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzeXMucGF0aFs6XSA9IHNlbGYuX3NhdmVz
eXNwYXRoCisgICAgICAgICAgICBzZWxmLl9zYXZlc3lzcGF0aCA9IE5vbmUKKworICAgICAgICBp
ZiBzZWxmLl9jd2QgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBvcy5jaGRpcihzZWxmLl9jd2Qp
CisgICAgICAgICAgICBzZWxmLl9jd2QgPSBOb25lCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0
cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3Qvbm9zZS5weSBiL1dlYkRyaXZlclRl
c3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9ub3NlLnB5Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wMzg3NDY4Njg2MAotLS0gL2Rldi9udWxsCisr
KyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9ub3Nl
LnB5CkBAIC0wLDAgKzEsNzEgQEAKKyIiIiBydW4gdGVzdCBzdWl0ZXMgd3JpdHRlbiBmb3Igbm9z
ZS4gIiIiCisKK2ltcG9ydCBzeXMKKworaW1wb3J0IHB5CitpbXBvcnQgcHl0ZXN0Citmcm9tIF9w
eXRlc3QgaW1wb3J0IHVuaXR0ZXN0CisKKworZGVmIGdldF9za2lwX2V4Y2VwdGlvbnMoKToKKyAg
ICBza2lwX2NsYXNzZXMgPSBzZXQoKQorICAgIGZvciBtb2R1bGVfbmFtZSBpbiAoJ3VuaXR0ZXN0
JywgJ3VuaXR0ZXN0MicsICdub3NlJyk6CisgICAgICAgIG1vZCA9IHN5cy5tb2R1bGVzLmdldCht
b2R1bGVfbmFtZSkKKyAgICAgICAgaWYgaGFzYXR0cihtb2QsICdTa2lwVGVzdCcpOgorICAgICAg
ICAgICAgc2tpcF9jbGFzc2VzLmFkZChtb2QuU2tpcFRlc3QpCisgICAgcmV0dXJuIHR1cGxlKHNr
aXBfY2xhc3NlcykKKworCitkZWYgcHl0ZXN0X3J1bnRlc3RfbWFrZXJlcG9ydChpdGVtLCBjYWxs
KToKKyAgICBpZiBjYWxsLmV4Y2luZm8gYW5kIGNhbGwuZXhjaW5mby5lcnJpc2luc3RhbmNlKGdl
dF9za2lwX2V4Y2VwdGlvbnMoKSk6CisgICAgICAgICMgbGV0J3Mgc3Vic3RpdHV0ZSB0aGUgZXhj
aW5mbyB3aXRoIGEgcHl0ZXN0LnNraXAgb25lCisgICAgICAgIGNhbGwyID0gY2FsbC5fX2NsYXNz
X18obGFtYmRhOgorICAgICAgICAgICAgICAgICAgICBweXRlc3Quc2tpcChzdHIoY2FsbC5leGNp
bmZvLnZhbHVlKSksIGNhbGwud2hlbikKKyAgICAgICAgY2FsbC5leGNpbmZvID0gY2FsbDIuZXhj
aW5mbworCisKK0BweXRlc3QuaG9va2ltcGwodHJ5bGFzdD1UcnVlKQorZGVmIHB5dGVzdF9ydW50
ZXN0X3NldHVwKGl0ZW0pOgorICAgIGlmIGlzX3BvdGVudGlhbF9ub3NldGVzdChpdGVtKToKKyAg
ICAgICAgaWYgaXNpbnN0YW5jZShpdGVtLnBhcmVudCwgcHl0ZXN0LkdlbmVyYXRvcik6CisgICAg
ICAgICAgICBnZW4gPSBpdGVtLnBhcmVudAorICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIoZ2Vu
LCAnX25vc2VnZW5zZXR1cCcpOgorICAgICAgICAgICAgICAgIGNhbGxfb3B0aW9uYWwoZ2VuLm9i
aiwgJ3NldHVwJykKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGdlbi5wYXJlbnQsIHB5
dGVzdC5JbnN0YW5jZSk6CisgICAgICAgICAgICAgICAgICAgIGNhbGxfb3B0aW9uYWwoZ2VuLnBh
cmVudC5vYmosICdzZXR1cCcpCisgICAgICAgICAgICAgICAgZ2VuLl9ub3NlZ2Vuc2V0dXAgPSBU
cnVlCisgICAgICAgIGlmIG5vdCBjYWxsX29wdGlvbmFsKGl0ZW0ub2JqLCAnc2V0dXAnKToKKyAg
ICAgICAgICAgICMgY2FsbCBtb2R1bGUgbGV2ZWwgc2V0dXAgaWYgdGhlcmUgaXMgbm8gb2JqZWN0
IGxldmVsIG9uZQorICAgICAgICAgICAgY2FsbF9vcHRpb25hbChpdGVtLnBhcmVudC5vYmosICdz
ZXR1cCcpCisgICAgICAgICNYWFggdGhpcyBpbXBsaWVzIHdlIG9ubHkgY2FsbCB0ZWFyZG93biB3
aGVuIHNldHVwIHdvcmtlZAorICAgICAgICBpdGVtLnNlc3Npb24uX3NldHVwc3RhdGUuYWRkZmlu
YWxpemVyKChsYW1iZGE6IHRlYXJkb3duX25vc2UoaXRlbSkpLCBpdGVtKQorCitkZWYgdGVhcmRv
d25fbm9zZShpdGVtKToKKyAgICBpZiBpc19wb3RlbnRpYWxfbm9zZXRlc3QoaXRlbSk6CisgICAg
ICAgIGlmIG5vdCBjYWxsX29wdGlvbmFsKGl0ZW0ub2JqLCAndGVhcmRvd24nKToKKyAgICAgICAg
ICAgIGNhbGxfb3B0aW9uYWwoaXRlbS5wYXJlbnQub2JqLCAndGVhcmRvd24nKQorICAgICAgICAj
aWYgaGFzYXR0cihpdGVtLnBhcmVudCwgJ19ub3NlZ2Vuc2V0dXAnKToKKyAgICAgICAgIyAgICAj
Y2FsbF9vcHRpb25hbChpdGVtLl9ub3NlZ2Vuc2V0dXAsICd0ZWFyZG93bicpCisgICAgICAgICMg
ICAgZGVsIGl0ZW0ucGFyZW50Ll9ub3NlZ2Vuc2V0dXAKKworCitkZWYgcHl0ZXN0X21ha2VfY29s
bGVjdF9yZXBvcnQoY29sbGVjdG9yKToKKyAgICBpZiBpc2luc3RhbmNlKGNvbGxlY3RvciwgcHl0
ZXN0LkdlbmVyYXRvcik6CisgICAgICAgIGNhbGxfb3B0aW9uYWwoY29sbGVjdG9yLm9iaiwgJ3Nl
dHVwJykKKworCitkZWYgaXNfcG90ZW50aWFsX25vc2V0ZXN0KGl0ZW0pOgorICAgICMgZXh0cmEg
Y2hlY2sgbmVlZGVkIHNpbmNlIHdlIGRvIG5vdCBkbyBub3NlIHN0eWxlIHNldHVwL3RlYXJkb3du
CisgICAgIyBvbiBkaXJlY3QgdW5pdHRlc3Qgc3R5bGUgY2xhc3NlcworICAgIHJldHVybiBpc2lu
c3RhbmNlKGl0ZW0sIHB5dGVzdC5GdW5jdGlvbikgYW5kIFwKKyAgICAgICAgbm90IGlzaW5zdGFu
Y2UoaXRlbSwgdW5pdHRlc3QuVGVzdENhc2VGdW5jdGlvbikKKworCitkZWYgY2FsbF9vcHRpb25h
bChvYmosIG5hbWUpOgorICAgIG1ldGhvZCA9IGdldGF0dHIob2JqLCBuYW1lLCBOb25lKQorICAg
IGlzZml4dHVyZSA9IGhhc2F0dHIobWV0aG9kLCAiX3B5dGVzdGZpeHR1cmVmdW5jdGlvbiIpCisg
ICAgaWYgbWV0aG9kIGlzIG5vdCBOb25lIGFuZCBub3QgaXNmaXh0dXJlIGFuZCBweS5idWlsdGlu
LmNhbGxhYmxlKG1ldGhvZCk6CisgICAgICAgICMgSWYgdGhlcmUncyBhbnkgcHJvYmxlbXMgYWxs
b3cgdGhlIGV4Y2VwdGlvbiB0byByYWlzZSByYXRoZXIgdGhhbgorICAgICAgICAjIHNpbGVudGx5
IGlnbm9yaW5nIHRoZW0KKyAgICAgICAgbWV0aG9kKCkKKyAgICAgICAgcmV0dXJuIFRydWUKZGlm
ZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVz
dC9wYXN0ZWJpbi5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3Qv
X3B5dGVzdC9wYXN0ZWJpbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MC4uNGVjNjJkMDIyODAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRl
ZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvcGFzdGViaW4ucHkKQEAgLTAsMCArMSw5MiBAQAor
IiIiIHN1Ym1pdCBmYWlsdXJlIG9yIHRlc3Qgc2Vzc2lvbiBpbmZvcm1hdGlvbiB0byBhIHBhc3Rl
YmluIHNlcnZpY2UuICIiIgoraW1wb3J0IHB5dGVzdAoraW1wb3J0IHN5cworaW1wb3J0IHRlbXBm
aWxlCisKKworZGVmIHB5dGVzdF9hZGRvcHRpb24ocGFyc2VyKToKKyAgICBncm91cCA9IHBhcnNl
ci5nZXRncm91cCgidGVybWluYWwgcmVwb3J0aW5nIikKKyAgICBncm91cC5fYWRkb3B0aW9uKCct
LXBhc3RlYmluJywgbWV0YXZhcj0ibW9kZSIsCisgICAgICAgIGFjdGlvbj0nc3RvcmUnLCBkZXN0
PSJwYXN0ZWJpbiIsIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgY2hvaWNlcz1bJ2ZhaWxlZCcsICdh
bGwnXSwKKyAgICAgICAgaGVscD0ic2VuZCBmYWlsZWR8YWxsIGluZm8gdG8gYnBhc3RlLm5ldCBw
YXN0ZWJpbiBzZXJ2aWNlLiIpCisKK0BweXRlc3QuaG9va2ltcGwodHJ5bGFzdD1UcnVlKQorZGVm
IHB5dGVzdF9jb25maWd1cmUoY29uZmlnKToKKyAgICBpbXBvcnQgcHkKKyAgICBpZiBjb25maWcu
b3B0aW9uLnBhc3RlYmluID09ICJhbGwiOgorICAgICAgICB0ciA9IGNvbmZpZy5wbHVnaW5tYW5h
Z2VyLmdldHBsdWdpbigndGVybWluYWxyZXBvcnRlcicpCisgICAgICAgICMgaWYgbm8gdGVybWlu
YWwgcmVwb3J0ZXIgcGx1Z2luIGlzIHByZXNlbnQsIG5vdGhpbmcgd2UgY2FuIGRvIGhlcmU7Cisg
ICAgICAgICMgdGhpcyBjYW4gaGFwcGVuIHdoZW4gdGhpcyBmdW5jdGlvbiBleGVjdXRlcyBpbiBh
IHNsYXZlIG5vZGUKKyAgICAgICAgIyB3aGVuIHVzaW5nIHB5dGVzdC14ZGlzdCwgZm9yIGV4YW1w
bGUKKyAgICAgICAgaWYgdHIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjIHBhc3RlYmluIGZp
bGUgd2lsbCBiZSB1dGYtOCBlbmNvZGVkIGJpbmFyeSBmaWxlCisgICAgICAgICAgICBjb25maWcu
X3Bhc3RlYmluZmlsZSA9IHRlbXBmaWxlLlRlbXBvcmFyeUZpbGUoJ3crYicpCisgICAgICAgICAg
ICBvbGR3cml0ZSA9IHRyLl90dy53cml0ZQorICAgICAgICAgICAgZGVmIHRlZV93cml0ZShzLCAq
Kmt3YXJncyk6CisgICAgICAgICAgICAgICAgb2xkd3JpdGUocywgKiprd2FyZ3MpCisgICAgICAg
ICAgICAgICAgaWYgcHkuYnVpbHRpbi5faXN0ZXh0KHMpOgorICAgICAgICAgICAgICAgICAgICBz
ID0gcy5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgICAgICAgICBjb25maWcuX3Bhc3RlYmluZmls
ZS53cml0ZShzKQorICAgICAgICAgICAgdHIuX3R3LndyaXRlID0gdGVlX3dyaXRlCisKK2RlZiBw
eXRlc3RfdW5jb25maWd1cmUoY29uZmlnKToKKyAgICBpZiBoYXNhdHRyKGNvbmZpZywgJ19wYXN0
ZWJpbmZpbGUnKToKKyAgICAgICAgIyBnZXQgdGVybWluYWwgY29udGVudHMgYW5kIGRlbGV0ZSBm
aWxlCisgICAgICAgIGNvbmZpZy5fcGFzdGViaW5maWxlLnNlZWsoMCkKKyAgICAgICAgc2Vzc2lv
bmxvZyA9IGNvbmZpZy5fcGFzdGViaW5maWxlLnJlYWQoKQorICAgICAgICBjb25maWcuX3Bhc3Rl
YmluZmlsZS5jbG9zZSgpCisgICAgICAgIGRlbCBjb25maWcuX3Bhc3RlYmluZmlsZQorICAgICAg
ICAjIHVuZG8gb3VyIHBhdGNoaW5nIGluIHRoZSB0ZXJtaW5hbCByZXBvcnRlcgorICAgICAgICB0
ciA9IGNvbmZpZy5wbHVnaW5tYW5hZ2VyLmdldHBsdWdpbigndGVybWluYWxyZXBvcnRlcicpCisg
ICAgICAgIGRlbCB0ci5fdHcuX19kaWN0X19bJ3dyaXRlJ10KKyAgICAgICAgIyB3cml0ZSBzdW1t
YXJ5CisgICAgICAgIHRyLndyaXRlX3NlcCgiPSIsICJTZW5kaW5nIGluZm9ybWF0aW9uIHRvIFBh
c3RlIFNlcnZpY2UiKQorICAgICAgICBwYXN0ZWJpbnVybCA9IGNyZWF0ZV9uZXdfcGFzdGUoc2Vz
c2lvbmxvZykKKyAgICAgICAgdHIud3JpdGVfbGluZSgicGFzdGViaW4gc2Vzc2lvbi1sb2c6ICVz
XG4iICUgcGFzdGViaW51cmwpCisKK2RlZiBjcmVhdGVfbmV3X3Bhc3RlKGNvbnRlbnRzKToKKyAg
ICAiIiIKKyAgICBDcmVhdGVzIGEgbmV3IHBhc3RlIHVzaW5nIGJwYXN0ZS5uZXQgc2VydmljZS4K
KworICAgIDpjb250ZW50czogcGFzdGUgY29udGVudHMgYXMgdXRmLTggZW5jb2RlZCBieXRlcwor
ICAgIDpyZXR1cm5zOiB1cmwgdG8gdGhlIHBhc3RlZCBjb250ZW50cworICAgICIiIgorICAgIGlt
cG9ydCByZQorICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMywgMCk6CisgICAgICAgIGZyb20g
dXJsbGliIGltcG9ydCB1cmxvcGVuLCB1cmxlbmNvZGUKKyAgICBlbHNlOgorICAgICAgICBmcm9t
IHVybGxpYi5yZXF1ZXN0IGltcG9ydCB1cmxvcGVuCisgICAgICAgIGZyb20gdXJsbGliLnBhcnNl
IGltcG9ydCB1cmxlbmNvZGUKKworICAgIHBhcmFtcyA9IHsKKyAgICAgICAgJ2NvZGUnOiBjb250
ZW50cywKKyAgICAgICAgJ2xleGVyJzogJ3B5dGhvbjMnIGlmIHN5cy52ZXJzaW9uX2luZm9bMF0g
PT0gMyBlbHNlICdweXRob24nLAorICAgICAgICAnZXhwaXJ5JzogJzF3ZWVrJywKKyAgICB9Cisg
ICAgdXJsID0gJ2h0dHBzOi8vYnBhc3RlLm5ldCcKKyAgICByZXNwb25zZSA9IHVybG9wZW4odXJs
LCBkYXRhPXVybGVuY29kZShwYXJhbXMpLmVuY29kZSgnYXNjaWknKSkucmVhZCgpCisgICAgbSA9
IHJlLnNlYXJjaChyJ2hyZWY9Ii9yYXcvKFx3KykiJywgcmVzcG9uc2UuZGVjb2RlKCd1dGYtOCcp
KQorICAgIGlmIG06CisgICAgICAgIHJldHVybiAnJXMvc2hvdy8lcycgJSAodXJsLCBtLmdyb3Vw
KDEpKQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiAnYmFkIHJlc3BvbnNlOiAnICsgcmVzcG9u
c2UKKworZGVmIHB5dGVzdF90ZXJtaW5hbF9zdW1tYXJ5KHRlcm1pbmFscmVwb3J0ZXIpOgorICAg
IGltcG9ydCBfcHl0ZXN0LmNvbmZpZworICAgIGlmIHRlcm1pbmFscmVwb3J0ZXIuY29uZmlnLm9w
dGlvbi5wYXN0ZWJpbiAhPSAiZmFpbGVkIjoKKyAgICAgICAgcmV0dXJuCisgICAgdHIgPSB0ZXJt
aW5hbHJlcG9ydGVyCisgICAgaWYgJ2ZhaWxlZCcgaW4gdHIuc3RhdHM6CisgICAgICAgIHRlcm1p
bmFscmVwb3J0ZXIud3JpdGVfc2VwKCI9IiwgIlNlbmRpbmcgaW5mb3JtYXRpb24gdG8gUGFzdGUg
U2VydmljZSIpCisgICAgICAgIGZvciByZXAgaW4gdGVybWluYWxyZXBvcnRlci5zdGF0cy5nZXQo
J2ZhaWxlZCcpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG1zZyA9IHJlcC5s
b25ncmVwci5yZXBydHJhY2ViYWNrLnJlcHJlbnRyaWVzWy0xXS5yZXByZmlsZWxvYworICAgICAg
ICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgIG1zZyA9IHRyLl9n
ZXRmYWlsdXJlaGVhZGxpbmUocmVwKQorICAgICAgICAgICAgdHcgPSBfcHl0ZXN0LmNvbmZpZy5j
cmVhdGVfdGVybWluYWxfd3JpdGVyKHRlcm1pbmFscmVwb3J0ZXIuY29uZmlnLCBzdHJpbmdpbz1U
cnVlKQorICAgICAgICAgICAgcmVwLnRvdGVybWluYWwodHcpCisgICAgICAgICAgICBzID0gdHcu
c3RyaW5naW8uZ2V0dmFsdWUoKQorICAgICAgICAgICAgYXNzZXJ0IGxlbihzKQorICAgICAgICAg
ICAgcGFzdGViaW51cmwgPSBjcmVhdGVfbmV3X3Bhc3RlKHMpCisgICAgICAgICAgICB0ci53cml0
ZV9saW5lKCIlcyAtLT4gJXMiICUobXNnLCBwYXN0ZWJpbnVybCkpCmRpZmYgLS1naXQgYS9XZWJE
cml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvcGRiLnB5IGIvV2Vi
RHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L3BkYi5weQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uODRjOTIwZDE3MmMKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRl
c3QvcGRiLnB5CkBAIC0wLDAgKzEsMTA5IEBACisiIiIgaW50ZXJhY3RpdmUgZGVidWdnaW5nIHdp
dGggUERCLCB0aGUgUHl0aG9uIERlYnVnZ2VyLiAiIiIKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQg
YWJzb2x1dGVfaW1wb3J0CitpbXBvcnQgcGRiCitpbXBvcnQgc3lzCisKK2ltcG9ydCBweXRlc3QK
KworCitkZWYgcHl0ZXN0X2FkZG9wdGlvbihwYXJzZXIpOgorICAgIGdyb3VwID0gcGFyc2VyLmdl
dGdyb3VwKCJnZW5lcmFsIikKKyAgICBncm91cC5fYWRkb3B0aW9uKCctLXBkYicsCisgICAgICAg
ICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJ1c2VwZGIiLCBkZWZhdWx0PUZhbHNl
LAorICAgICAgICAgICAgICAgaGVscD0ic3RhcnQgdGhlIGludGVyYWN0aXZlIFB5dGhvbiBkZWJ1
Z2dlciBvbiBlcnJvcnMuIikKKworZGVmIHB5dGVzdF9uYW1lc3BhY2UoKToKKyAgICByZXR1cm4g
eydzZXRfdHJhY2UnOiBweXRlc3RQREIoKS5zZXRfdHJhY2V9CisKK2RlZiBweXRlc3RfY29uZmln
dXJlKGNvbmZpZyk6CisgICAgaWYgY29uZmlnLmdldHZhbHVlKCJ1c2VwZGIiKToKKyAgICAgICAg
Y29uZmlnLnBsdWdpbm1hbmFnZXIucmVnaXN0ZXIoUGRiSW52b2tlKCksICdwZGJpbnZva2UnKQor
CisgICAgb2xkID0gKHBkYi5zZXRfdHJhY2UsIHB5dGVzdFBEQi5fcGx1Z2lubWFuYWdlcikKKyAg
ICBkZWYgZmluKCk6CisgICAgICAgIHBkYi5zZXRfdHJhY2UsIHB5dGVzdFBEQi5fcGx1Z2lubWFu
YWdlciA9IG9sZAorICAgICAgICBweXRlc3RQREIuX2NvbmZpZyA9IE5vbmUKKyAgICBwZGIuc2V0
X3RyYWNlID0gcHl0ZXN0LnNldF90cmFjZQorICAgIHB5dGVzdFBEQi5fcGx1Z2lubWFuYWdlciA9
IGNvbmZpZy5wbHVnaW5tYW5hZ2VyCisgICAgcHl0ZXN0UERCLl9jb25maWcgPSBjb25maWcKKyAg
ICBjb25maWcuX2NsZWFudXAuYXBwZW5kKGZpbikKKworY2xhc3MgcHl0ZXN0UERCOgorICAgICIi
IiBQc2V1ZG8gUERCIHRoYXQgZGVmZXJzIHRvIHRoZSByZWFsIHBkYi4gIiIiCisgICAgX3BsdWdp
bm1hbmFnZXIgPSBOb25lCisgICAgX2NvbmZpZyA9IE5vbmUKKworICAgIGRlZiBzZXRfdHJhY2Uo
c2VsZik6CisgICAgICAgICIiIiBpbnZva2UgUERCIHNldF90cmFjZSBkZWJ1Z2dpbmcsIGRyb3Bw
aW5nIGFueSBJTyBjYXB0dXJpbmcuICIiIgorICAgICAgICBpbXBvcnQgX3B5dGVzdC5jb25maWcK
KyAgICAgICAgZnJhbWUgPSBzeXMuX2dldGZyYW1lKCkuZl9iYWNrCisgICAgICAgIGlmIHNlbGYu
X3BsdWdpbm1hbmFnZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBjYXBtYW4gPSBzZWxmLl9w
bHVnaW5tYW5hZ2VyLmdldHBsdWdpbigiY2FwdHVyZW1hbmFnZXIiKQorICAgICAgICAgICAgaWYg
Y2FwbWFuOgorICAgICAgICAgICAgICAgIGNhcG1hbi5zdXNwZW5kY2FwdHVyZShpbl89VHJ1ZSkK
KyAgICAgICAgICAgIHR3ID0gX3B5dGVzdC5jb25maWcuY3JlYXRlX3Rlcm1pbmFsX3dyaXRlcihz
ZWxmLl9jb25maWcpCisgICAgICAgICAgICB0dy5saW5lKCkKKyAgICAgICAgICAgIHR3LnNlcCgi
PiIsICJQREIgc2V0X3RyYWNlIChJTy1jYXB0dXJpbmcgdHVybmVkIG9mZikiKQorICAgICAgICAg
ICAgc2VsZi5fcGx1Z2lubWFuYWdlci5ob29rLnB5dGVzdF9lbnRlcl9wZGIoY29uZmlnPXNlbGYu
X2NvbmZpZykKKyAgICAgICAgcGRiLlBkYigpLnNldF90cmFjZShmcmFtZSkKKworCitjbGFzcyBQ
ZGJJbnZva2U6CisgICAgZGVmIHB5dGVzdF9leGNlcHRpb25faW50ZXJhY3Qoc2VsZiwgbm9kZSwg
Y2FsbCwgcmVwb3J0KToKKyAgICAgICAgY2FwbWFuID0gbm9kZS5jb25maWcucGx1Z2lubWFuYWdl
ci5nZXRwbHVnaW4oImNhcHR1cmVtYW5hZ2VyIikKKyAgICAgICAgaWYgY2FwbWFuOgorICAgICAg
ICAgICAgb3V0LCBlcnIgPSBjYXBtYW4uc3VzcGVuZGNhcHR1cmUoaW5fPVRydWUpCisgICAgICAg
ICAgICBzeXMuc3Rkb3V0LndyaXRlKG91dCkKKyAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUo
ZXJyKQorICAgICAgICBfZW50ZXJfcGRiKG5vZGUsIGNhbGwuZXhjaW5mbywgcmVwb3J0KQorCisg
ICAgZGVmIHB5dGVzdF9pbnRlcm5hbGVycm9yKHNlbGYsIGV4Y3JlcHIsIGV4Y2luZm8pOgorICAg
ICAgICBmb3IgbGluZSBpbiBzdHIoZXhjcmVwcikuc3BsaXQoIlxuIik6CisgICAgICAgICAgICBz
eXMuc3RkZXJyLndyaXRlKCJJTlRFUk5BTEVSUk9SPiAlc1xuIiAlbGluZSkKKyAgICAgICAgICAg
IHN5cy5zdGRlcnIuZmx1c2goKQorICAgICAgICB0YiA9IF9wb3N0bW9ydGVtX3RyYWNlYmFjayhl
eGNpbmZvKQorICAgICAgICBwb3N0X21vcnRlbSh0YikKKworCitkZWYgX2VudGVyX3BkYihub2Rl
LCBleGNpbmZvLCByZXApOgorICAgICMgWFhYIHdlIHJlLXVzZSB0aGUgVGVybWluYWxSZXBvcnRl
cidzIHRlcm1pbmFsd3JpdGVyCisgICAgIyBiZWNhdXNlIHRoaXMgc2VlbXMgdG8gYXZvaWQgc29t
ZSBlbmNvZGluZyByZWxhdGVkIHRyb3VibGVzCisgICAgIyBmb3Igbm90IGNvbXBsZXRlbHkgY2xl
YXIgcmVhc29ucy4KKyAgICB0dyA9IG5vZGUuY29uZmlnLnBsdWdpbm1hbmFnZXIuZ2V0cGx1Z2lu
KCJ0ZXJtaW5hbHJlcG9ydGVyIikuX3R3CisgICAgdHcubGluZSgpCisgICAgdHcuc2VwKCI+Iiwg
InRyYWNlYmFjayIpCisgICAgcmVwLnRvdGVybWluYWwodHcpCisgICAgdHcuc2VwKCI+IiwgImVu
dGVyaW5nIFBEQiIpCisgICAgdGIgPSBfcG9zdG1vcnRlbV90cmFjZWJhY2soZXhjaW5mbykKKyAg
ICBwb3N0X21vcnRlbSh0YikKKyAgICByZXAuX3BkYnNob3duID0gVHJ1ZQorICAgIHJldHVybiBy
ZXAKKworCitkZWYgX3Bvc3Rtb3J0ZW1fdHJhY2ViYWNrKGV4Y2luZm8pOgorICAgICMgQSBkb2N0
ZXN0LlVuZXhwZWN0ZWRFeGNlcHRpb24gaXMgbm90IHVzZWZ1bCBmb3IgcG9zdF9tb3J0ZW0uCisg
ICAgIyBVc2UgdGhlIHVuZGVybHlpbmcgZXhjZXB0aW9uIGluc3RlYWQ6CisgICAgZnJvbSBkb2N0
ZXN0IGltcG9ydCBVbmV4cGVjdGVkRXhjZXB0aW9uCisgICAgaWYgaXNpbnN0YW5jZShleGNpbmZv
LnZhbHVlLCBVbmV4cGVjdGVkRXhjZXB0aW9uKToKKyAgICAgICAgcmV0dXJuIGV4Y2luZm8udmFs
dWUuZXhjX2luZm9bMl0KKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gZXhjaW5mby5fZXhjaW5m
b1syXQorCisKK2RlZiBfZmluZF9sYXN0X25vbl9oaWRkZW5fZnJhbWUoc3RhY2spOgorICAgIGkg
PSBtYXgoMCwgbGVuKHN0YWNrKSAtIDEpCisgICAgd2hpbGUgaSBhbmQgc3RhY2tbaV1bMF0uZl9s
b2NhbHMuZ2V0KCJfX3RyYWNlYmFja2hpZGVfXyIsIEZhbHNlKToKKyAgICAgICAgaSAtPSAxCisg
ICAgcmV0dXJuIGkKKworCitkZWYgcG9zdF9tb3J0ZW0odCk6CisgICAgY2xhc3MgUGRiKHBkYi5Q
ZGIpOgorICAgICAgICBkZWYgZ2V0X3N0YWNrKHNlbGYsIGYsIHQpOgorICAgICAgICAgICAgc3Rh
Y2ssIGkgPSBwZGIuUGRiLmdldF9zdGFjayhzZWxmLCBmLCB0KQorICAgICAgICAgICAgaWYgZiBp
cyBOb25lOgorICAgICAgICAgICAgICAgIGkgPSBfZmluZF9sYXN0X25vbl9oaWRkZW5fZnJhbWUo
c3RhY2spCisgICAgICAgICAgICByZXR1cm4gc3RhY2ssIGkKKyAgICBwID0gUGRiKCkKKyAgICBw
LnJlc2V0KCkKKyAgICBwLmludGVyYWN0aW9uKE5vbmUsIHQpCmRpZmYgLS1naXQgYS9XZWJEcml2
ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvcHl0ZXN0ZXIucHkgYi9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvcHl0ZXN0ZXIu
cHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmZhZWQ3ZjU4MWM5Ci0t
LSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVz
dC9fcHl0ZXN0L3B5dGVzdGVyLnB5CkBAIC0wLDAgKzEsMTExMCBAQAorIiIiIChkaXNhYmxlZCBi
eSBkZWZhdWx0KSBzdXBwb3J0IGZvciB0ZXN0aW5nIHB5dGVzdCBhbmQgcHl0ZXN0IHBsdWdpbnMu
ICIiIgoraW1wb3J0IGNvZGVjcworaW1wb3J0IGdjCitpbXBvcnQgb3MKK2ltcG9ydCBwbGF0Zm9y
bQoraW1wb3J0IHJlCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5cworaW1wb3J0IHRpbWUK
K2ltcG9ydCB0cmFjZWJhY2sKK2Zyb20gZm5tYXRjaCBpbXBvcnQgZm5tYXRjaAorCitmcm9tIHB5
LmJ1aWx0aW4gaW1wb3J0IHByaW50XworCitmcm9tIF9weXRlc3QuX2NvZGUgaW1wb3J0IFNvdXJj
ZQoraW1wb3J0IHB5CitpbXBvcnQgcHl0ZXN0Citmcm9tIF9weXRlc3QubWFpbiBpbXBvcnQgU2Vz
c2lvbiwgRVhJVF9PSworCisKK2RlZiBweXRlc3RfYWRkb3B0aW9uKHBhcnNlcik6CisgICAgIyBn
cm91cCA9IHBhcnNlci5nZXRncm91cCgicHl0ZXN0ZXIiLCAicHl0ZXN0ZXIgKHNlbGYtdGVzdHMp
IG9wdGlvbnMiKQorICAgIHBhcnNlci5hZGRvcHRpb24oJy0tbHNvZicsCisgICAgICAgICAgIGFj
dGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9Imxzb2YiLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAg
ICBoZWxwPSgicnVuIEZEIGNoZWNrcyBpZiBsc29mIGlzIGF2YWlsYWJsZSIpKQorCisgICAgcGFy
c2VyLmFkZG9wdGlvbignLS1ydW5weXRlc3QnLCBkZWZhdWx0PSJpbnByb2Nlc3MiLCBkZXN0PSJy
dW5weXRlc3QiLAorICAgICAgICAgICBjaG9pY2VzPSgiaW5wcm9jZXNzIiwgInN1YnByb2Nlc3Mi
LCApLAorICAgICAgICAgICBoZWxwPSgicnVuIHB5dGVzdCBzdWIgcnVucyBpbiB0ZXN0cyB1c2lu
ZyBhbiAnaW5wcm9jZXNzJyAiCisgICAgICAgICAgICAgICAgICJvciAnc3VicHJvY2VzcycgKHB5
dGhvbiAtbSBtYWluKSBtZXRob2QiKSkKKworCitkZWYgcHl0ZXN0X2NvbmZpZ3VyZShjb25maWcp
OgorICAgICMgVGhpcyBtaWdodCBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMuIE9ubHkgdGFrZSB0
aGUgZmlyc3QuCisgICAgZ2xvYmFsIF9weXRlc3RfZnVsbHBhdGgKKyAgICB0cnk6CisgICAgICAg
IF9weXRlc3RfZnVsbHBhdGgKKyAgICBleGNlcHQgTmFtZUVycm9yOgorICAgICAgICBfcHl0ZXN0
X2Z1bGxwYXRoID0gb3MucGF0aC5hYnNwYXRoKHB5dGVzdC5fX2ZpbGVfXy5yc3RyaXAoIm9jIikp
CisgICAgICAgIF9weXRlc3RfZnVsbHBhdGggPSBfcHl0ZXN0X2Z1bGxwYXRoLnJlcGxhY2UoIiRw
eS5jbGFzcyIsICIucHkiKQorCisgICAgaWYgY29uZmlnLmdldHZhbHVlKCJsc29mIik6CisgICAg
ICAgIGNoZWNrZXIgPSBMc29mRmRMZWFrQ2hlY2tlcigpCisgICAgICAgIGlmIGNoZWNrZXIubWF0
Y2hpbmdfcGxhdGZvcm0oKToKKyAgICAgICAgICAgIGNvbmZpZy5wbHVnaW5tYW5hZ2VyLnJlZ2lz
dGVyKGNoZWNrZXIpCisKKworY2xhc3MgTHNvZkZkTGVha0NoZWNrZXIob2JqZWN0KToKKyAgICBk
ZWYgZ2V0X29wZW5fZmlsZXMoc2VsZik6CisgICAgICAgIG91dCA9IHNlbGYuX2V4ZWNfbHNvZigp
CisgICAgICAgIG9wZW5fZmlsZXMgPSBzZWxmLl9wYXJzZV9sc29mX291dHB1dChvdXQpCisgICAg
ICAgIHJldHVybiBvcGVuX2ZpbGVzCisKKyAgICBkZWYgX2V4ZWNfbHNvZihzZWxmKToKKyAgICAg
ICAgcGlkID0gb3MuZ2V0cGlkKCkKKyAgICAgICAgcmV0dXJuIHB5LnByb2Nlc3MuY21kZXhlYygi
bHNvZiAtRmZuMCAtcCAlZCIgJSBwaWQpCisKKyAgICBkZWYgX3BhcnNlX2xzb2Zfb3V0cHV0KHNl
bGYsIG91dCk6CisgICAgICAgIGRlZiBpc29wZW4obGluZSk6CisgICAgICAgICAgICByZXR1cm4g
bGluZS5zdGFydHN3aXRoKCdmJykgYW5kICgiZGVsZXRlZCIgbm90IGluIGxpbmUgYW5kCisgICAg
ICAgICAgICAgICAgJ21lbScgbm90IGluIGxpbmUgYW5kICJ0eHQiIG5vdCBpbiBsaW5lIGFuZCAn
Y3dkJyBub3QgaW4gbGluZSkKKworICAgICAgICBvcGVuX2ZpbGVzID0gW10KKworICAgICAgICBm
b3IgbGluZSBpbiBvdXQuc3BsaXQoIlxuIik6CisgICAgICAgICAgICBpZiBpc29wZW4obGluZSk6
CisgICAgICAgICAgICAgICAgZmllbGRzID0gbGluZS5zcGxpdCgnXDAnKQorICAgICAgICAgICAg
ICAgIGZkID0gZmllbGRzWzBdWzE6XQorICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gZmllbGRz
WzFdWzE6XQorICAgICAgICAgICAgICAgIGlmIGZpbGVuYW1lLnN0YXJ0c3dpdGgoJy8nKToKKyAg
ICAgICAgICAgICAgICAgICAgb3Blbl9maWxlcy5hcHBlbmQoKGZkLCBmaWxlbmFtZSkpCisKKyAg
ICAgICAgcmV0dXJuIG9wZW5fZmlsZXMKKworICAgIGRlZiBtYXRjaGluZ19wbGF0Zm9ybShzZWxm
KToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcHkucHJvY2Vzcy5jbWRleGVjKCJsc29mIC12
IikKKyAgICAgICAgZXhjZXB0IChweS5wcm9jZXNzLmNtZGV4ZWMuRXJyb3IsIFVuaWNvZGVEZWNv
ZGVFcnJvcik6CisgICAgICAgICAgICAjIGNtZGV4ZWMgbWF5IHJhaXNlIFVuaWNvZGVEZWNvZGVF
cnJvciBvbiBXaW5kb3dzIHN5c3RlbXMKKyAgICAgICAgICAgICMgd2l0aCBsb2NhbGUgb3RoZXIg
dGhhbiBlbmdsaXNoOgorICAgICAgICAgICAgIyBodHRwczovL2JpdGJ1Y2tldC5vcmcvcHl0ZXN0
LWRldi9weS9pc3N1ZXMvNjYKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBlbHNl
OgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgIEBweXRlc3QuaG9va2ltcGwoaG9va3dy
YXBwZXI9VHJ1ZSwgdHJ5Zmlyc3Q9VHJ1ZSkKKyAgICBkZWYgcHl0ZXN0X3J1bnRlc3RfaXRlbShz
ZWxmLCBpdGVtKToKKyAgICAgICAgbGluZXMxID0gc2VsZi5nZXRfb3Blbl9maWxlcygpCisgICAg
ICAgIHlpZWxkCisgICAgICAgIGlmIGhhc2F0dHIoc3lzLCAicHlweV92ZXJzaW9uX2luZm8iKToK
KyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBsaW5lczIgPSBzZWxmLmdldF9vcGVu
X2ZpbGVzKCkKKworICAgICAgICBuZXdfZmRzID0gc2V0KFt0WzBdIGZvciB0IGluIGxpbmVzMl0p
IC0gc2V0KFt0WzBdIGZvciB0IGluIGxpbmVzMV0pCisgICAgICAgIGxlYWtlZF9maWxlcyA9IFt0
IGZvciB0IGluIGxpbmVzMiBpZiB0WzBdIGluIG5ld19mZHNdCisgICAgICAgIGlmIGxlYWtlZF9m
aWxlczoKKyAgICAgICAgICAgIGVycm9yID0gW10KKyAgICAgICAgICAgIGVycm9yLmFwcGVuZCgi
KioqKiogJXMgRkQgbGVha2FnZSBkZXRlY3RlZCIgJSBsZW4obGVha2VkX2ZpbGVzKSkKKyAgICAg
ICAgICAgIGVycm9yLmV4dGVuZChbc3RyKGYpIGZvciBmIGluIGxlYWtlZF9maWxlc10pCisgICAg
ICAgICAgICBlcnJvci5hcHBlbmQoIioqKiBCZWZvcmU6IikKKyAgICAgICAgICAgIGVycm9yLmV4
dGVuZChbc3RyKGYpIGZvciBmIGluIGxpbmVzMV0pCisgICAgICAgICAgICBlcnJvci5hcHBlbmQo
IioqKiBBZnRlcjoiKQorICAgICAgICAgICAgZXJyb3IuZXh0ZW5kKFtzdHIoZikgZm9yIGYgaW4g
bGluZXMyXSkKKyAgICAgICAgICAgIGVycm9yLmFwcGVuZChlcnJvclswXSkKKyAgICAgICAgICAg
IGVycm9yLmFwcGVuZCgiKioqIGZ1bmN0aW9uICVzOiVzOiAlcyAiICUgaXRlbS5sb2NhdGlvbikK
KyAgICAgICAgICAgIHB5dGVzdC5mYWlsKCJcbiIuam9pbihlcnJvciksIHB5dHJhY2U9RmFsc2Up
CisKKworIyBYWFggY29waWVkIGZyb20gZXhlY25ldCdzIGNvbmZ0ZXN0LnB5IC0gbmVlZHMgdG8g
YmUgbWVyZ2VkCit3aW5weW1hcCA9IHsKKyAgICAncHl0aG9uMi43JzogcidDOlxQeXRob24yN1xw
eXRob24uZXhlJywKKyAgICAncHl0aG9uMi42JzogcidDOlxQeXRob24yNlxweXRob24uZXhlJywK
KyAgICAncHl0aG9uMy4xJzogcidDOlxQeXRob24zMVxweXRob24uZXhlJywKKyAgICAncHl0aG9u
My4yJzogcidDOlxQeXRob24zMlxweXRob24uZXhlJywKKyAgICAncHl0aG9uMy4zJzogcidDOlxQ
eXRob24zM1xweXRob24uZXhlJywKKyAgICAncHl0aG9uMy40JzogcidDOlxQeXRob24zNFxweXRo
b24uZXhlJywKKyAgICAncHl0aG9uMy41JzogcidDOlxQeXRob24zNVxweXRob24uZXhlJywKK30K
KworZGVmIGdldGV4ZWN1dGFibGUobmFtZSwgY2FjaGU9e30pOgorICAgIHRyeToKKyAgICAgICAg
cmV0dXJuIGNhY2hlW25hbWVdCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICBleGVjdXRh
YmxlID0gcHkucGF0aC5sb2NhbC5zeXNmaW5kKG5hbWUpCisgICAgICAgIGlmIGV4ZWN1dGFibGU6
CisgICAgICAgICAgICBpZiBuYW1lID09ICJqeXRob24iOgorICAgICAgICAgICAgICAgIGltcG9y
dCBzdWJwcm9jZXNzCisgICAgICAgICAgICAgICAgcG9wZW4gPSBzdWJwcm9jZXNzLlBvcGVuKFtz
dHIoZXhlY3V0YWJsZSksICItLXZlcnNpb24iXSwKKyAgICAgICAgICAgICAgICAgICAgdW5pdmVy
c2FsX25ld2xpbmVzPVRydWUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgICAgICAg
ICAgb3V0LCBlcnIgPSBwb3Blbi5jb21tdW5pY2F0ZSgpCisgICAgICAgICAgICAgICAgaWYgbm90
IGVyciBvciAiMi41IiBub3QgaW4gZXJyOgorICAgICAgICAgICAgICAgICAgICBleGVjdXRhYmxl
ID0gTm9uZQorICAgICAgICAgICAgICAgIGlmICIyLjUuMiIgaW4gZXJyOgorICAgICAgICAgICAg
ICAgICAgICBleGVjdXRhYmxlID0gTm9uZSAjIGh0dHA6Ly9idWdzLmp5dGhvbi5vcmcvaXNzdWUx
NzkwCisgICAgICAgIGNhY2hlW25hbWVdID0gZXhlY3V0YWJsZQorICAgICAgICByZXR1cm4gZXhl
Y3V0YWJsZQorCitAcHl0ZXN0LmZpeHR1cmUocGFyYW1zPVsncHl0aG9uMi42JywgJ3B5dGhvbjIu
NycsICdweXRob24zLjMnLCAicHl0aG9uMy40IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICdw
eXB5JywgJ3B5cHkzJ10pCitkZWYgYW55cHl0aG9uKHJlcXVlc3QpOgorICAgIG5hbWUgPSByZXF1
ZXN0LnBhcmFtCisgICAgZXhlY3V0YWJsZSA9IGdldGV4ZWN1dGFibGUobmFtZSkKKyAgICBpZiBl
eGVjdXRhYmxlIGlzIE5vbmU6CisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgor
ICAgICAgICAgICAgZXhlY3V0YWJsZSA9IHdpbnB5bWFwLmdldChuYW1lLCBOb25lKQorICAgICAg
ICAgICAgaWYgZXhlY3V0YWJsZToKKyAgICAgICAgICAgICAgICBleGVjdXRhYmxlID0gcHkucGF0
aC5sb2NhbChleGVjdXRhYmxlKQorICAgICAgICAgICAgICAgIGlmIGV4ZWN1dGFibGUuY2hlY2so
KToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4ZWN1dGFibGUKKyAgICAgICAgcHl0ZXN0
LnNraXAoIm5vIHN1aXRhYmxlICVzIGZvdW5kIiAlIChuYW1lLCkpCisgICAgcmV0dXJuIGV4ZWN1
dGFibGUKKworIyB1c2VkIGF0IGxlYXN0IGJ5IHB5dGVzdC14ZGlzdCBwbHVnaW4KK0BweXRlc3Qu
Zml4dHVyZQorZGVmIF9weXRlc3QocmVxdWVzdCk6CisgICAgIiIiIFJldHVybiBhIGhlbHBlciB3
aGljaCBvZmZlcnMgYSBnZXRob29rcmVjb3JkZXIoaG9vaykKKyAgICBtZXRob2Qgd2hpY2ggcmV0
dXJucyBhIEhvb2tSZWNvcmRlciBpbnN0YW5jZSB3aGljaCBoZWxwcworICAgIHRvIG1ha2UgYXNz
ZXJ0aW9ucyBhYm91dCBjYWxsZWQgaG9va3MuCisgICAgIiIiCisgICAgcmV0dXJuIFB5dGVzdEFy
ZyhyZXF1ZXN0KQorCitjbGFzcyBQeXRlc3RBcmc6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJl
cXVlc3QpOgorICAgICAgICBzZWxmLnJlcXVlc3QgPSByZXF1ZXN0CisKKyAgICBkZWYgZ2V0aG9v
a3JlY29yZGVyKHNlbGYsIGhvb2spOgorICAgICAgICBob29rcmVjb3JkZXIgPSBIb29rUmVjb3Jk
ZXIoaG9vay5fcG0pCisgICAgICAgIHNlbGYucmVxdWVzdC5hZGRmaW5hbGl6ZXIoaG9va3JlY29y
ZGVyLmZpbmlzaF9yZWNvcmRpbmcpCisgICAgICAgIHJldHVybiBob29rcmVjb3JkZXIKKworCitk
ZWYgZ2V0X3B1YmxpY19uYW1lcyhsKToKKyAgICAiIiJPbmx5IHJldHVybiBuYW1lcyBmcm9tIGl0
ZXJhdG9yIGwgd2l0aG91dCBhIGxlYWRpbmcgdW5kZXJzY29yZS4iIiIKKyAgICByZXR1cm4gW3gg
Zm9yIHggaW4gbCBpZiB4WzBdICE9ICJfIl0KKworCitjbGFzcyBQYXJzZWRDYWxsOgorICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBrd2FyZ3MpOgorICAgICAgICBzZWxmLl9fZGljdF9fLnVw
ZGF0ZShrd2FyZ3MpCisgICAgICAgIHNlbGYuX25hbWUgPSBuYW1lCisKKyAgICBkZWYgX19yZXBy
X18oc2VsZik6CisgICAgICAgIGQgPSBzZWxmLl9fZGljdF9fLmNvcHkoKQorICAgICAgICBkZWwg
ZFsnX25hbWUnXQorICAgICAgICByZXR1cm4gIjxQYXJzZWRDYWxsICVyKCoqJXIpPiIgJShzZWxm
Ll9uYW1lLCBkKQorCisKK2NsYXNzIEhvb2tSZWNvcmRlcjoKKyAgICAiIiJSZWNvcmQgYWxsIGhv
b2tzIGNhbGxlZCBpbiBhIHBsdWdpbiBtYW5hZ2VyLgorCisgICAgVGhpcyB3cmFwcyBhbGwgdGhl
IGhvb2sgY2FsbHMgaW4gdGhlIHBsdWdpbiBtYW5hZ2VyLCByZWNvcmRpbmcKKyAgICBlYWNoIGNh
bGwgYmVmb3JlIHByb3BhZ2F0aW5nIHRoZSBub3JtYWwgY2FsbHMuCisKKyAgICAiIiIKKworICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBwbHVnaW5tYW5hZ2VyKToKKyAgICAgICAgc2VsZi5fcGx1Z2lu
bWFuYWdlciA9IHBsdWdpbm1hbmFnZXIKKyAgICAgICAgc2VsZi5jYWxscyA9IFtdCisKKyAgICAg
ICAgZGVmIGJlZm9yZShob29rX25hbWUsIGhvb2tfaW1wbHMsIGt3YXJncyk6CisgICAgICAgICAg
ICBzZWxmLmNhbGxzLmFwcGVuZChQYXJzZWRDYWxsKGhvb2tfbmFtZSwga3dhcmdzKSkKKworICAg
ICAgICBkZWYgYWZ0ZXIob3V0Y29tZSwgaG9va19uYW1lLCBob29rX2ltcGxzLCBrd2FyZ3MpOgor
ICAgICAgICAgICAgcGFzcworCisgICAgICAgIHNlbGYuX3VuZG9fd3JhcHBpbmcgPSBwbHVnaW5t
YW5hZ2VyLmFkZF9ob29rY2FsbF9tb25pdG9yaW5nKGJlZm9yZSwgYWZ0ZXIpCisKKyAgICBkZWYg
ZmluaXNoX3JlY29yZGluZyhzZWxmKToKKyAgICAgICAgc2VsZi5fdW5kb193cmFwcGluZygpCisK
KyAgICBkZWYgZ2V0Y2FsbHMoc2VsZiwgbmFtZXMpOgorICAgICAgICBpZiBpc2luc3RhbmNlKG5h
bWVzLCBzdHIpOgorICAgICAgICAgICAgbmFtZXMgPSBuYW1lcy5zcGxpdCgpCisgICAgICAgIHJl
dHVybiBbY2FsbCBmb3IgY2FsbCBpbiBzZWxmLmNhbGxzIGlmIGNhbGwuX25hbWUgaW4gbmFtZXNd
CisKKyAgICBkZWYgYXNzZXJ0X2NvbnRhaW5zKHNlbGYsIGVudHJpZXMpOgorICAgICAgICBfX3Ry
YWNlYmFja2hpZGVfXyA9IFRydWUKKyAgICAgICAgaSA9IDAKKyAgICAgICAgZW50cmllcyA9IGxp
c3QoZW50cmllcykKKyAgICAgICAgYmFja2xvY2FscyA9IHN5cy5fZ2V0ZnJhbWUoMSkuZl9sb2Nh
bHMKKyAgICAgICAgd2hpbGUgZW50cmllczoKKyAgICAgICAgICAgIG5hbWUsIGNoZWNrID0gZW50
cmllcy5wb3AoMCkKKyAgICAgICAgICAgIGZvciBpbmQsIGNhbGwgaW4gZW51bWVyYXRlKHNlbGYu
Y2FsbHNbaTpdKToKKyAgICAgICAgICAgICAgICBpZiBjYWxsLl9uYW1lID09IG5hbWU6CisgICAg
ICAgICAgICAgICAgICAgIHByaW50XygiTkFNRU1BVENIIiwgbmFtZSwgY2FsbCkKKyAgICAgICAg
ICAgICAgICAgICAgaWYgZXZhbChjaGVjaywgYmFja2xvY2FscywgY2FsbC5fX2RpY3RfXyk6Cisg
ICAgICAgICAgICAgICAgICAgICAgICBwcmludF8oIkNIRUNLRVJNQVRDSCIsIHJlcHIoY2hlY2sp
LCAiLT4iLCBjYWxsKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg
ICAgICAgICAgcHJpbnRfKCJOT0NIRUNLRVJNQVRDSCIsIHJlcHIoY2hlY2spLCAiLSIsIGNhbGwp
CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBp
ICs9IGluZCArIDEKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBw
cmludF8oIk5PTkFNRU1BVENIIiwgbmFtZSwgIndpdGgiLCBjYWxsKQorICAgICAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgICAgICBweXRlc3QuZmFpbCgiY291bGQgbm90IGZpbmQgJXIgY2hlY2sg
JXIiICUgKG5hbWUsIGNoZWNrKSkKKworICAgIGRlZiBwb3BjYWxsKHNlbGYsIG5hbWUpOgorICAg
ICAgICBfX3RyYWNlYmFja2hpZGVfXyA9IFRydWUKKyAgICAgICAgZm9yIGksIGNhbGwgaW4gZW51
bWVyYXRlKHNlbGYuY2FsbHMpOgorICAgICAgICAgICAgaWYgY2FsbC5fbmFtZSA9PSBuYW1lOgor
ICAgICAgICAgICAgICAgIGRlbCBzZWxmLmNhbGxzW2ldCisgICAgICAgICAgICAgICAgcmV0dXJu
IGNhbGwKKyAgICAgICAgbGluZXMgPSBbImNvdWxkIG5vdCBmaW5kIGNhbGwgJXIsIGluOiIgJSAo
bmFtZSwpXQorICAgICAgICBsaW5lcy5leHRlbmQoWyIgICVzIiAlIHN0cih4KSBmb3IgeCBpbiBz
ZWxmLmNhbGxzXSkKKyAgICAgICAgcHl0ZXN0LmZhaWwoIlxuIi5qb2luKGxpbmVzKSkKKworICAg
IGRlZiBnZXRjYWxsKHNlbGYsIG5hbWUpOgorICAgICAgICBsID0gc2VsZi5nZXRjYWxscyhuYW1l
KQorICAgICAgICBhc3NlcnQgbGVuKGwpID09IDEsIChuYW1lLCBsKQorICAgICAgICByZXR1cm4g
bFswXQorCisgICAgIyBmdW5jdGlvbmFsaXR5IGZvciB0ZXN0IHJlcG9ydHMKKworICAgIGRlZiBn
ZXRyZXBvcnRzKHNlbGYsCisgICAgICAgICAgICAgICAgICAgbmFtZXM9InB5dGVzdF9ydW50ZXN0
X2xvZ3JlcG9ydCBweXRlc3RfY29sbGVjdHJlcG9ydCIpOgorICAgICAgICByZXR1cm4gW3gucmVw
b3J0IGZvciB4IGluIHNlbGYuZ2V0Y2FsbHMobmFtZXMpXQorCisgICAgZGVmIG1hdGNocmVwb3J0
KHNlbGYsIGluYW1lcGFydD0iIiwKKyAgICAgICAgbmFtZXM9InB5dGVzdF9ydW50ZXN0X2xvZ3Jl
cG9ydCBweXRlc3RfY29sbGVjdHJlcG9ydCIsIHdoZW49Tm9uZSk6CisgICAgICAgICIiIiByZXR1
cm4gYSB0ZXN0cmVwb3J0IHdob3NlIGRvdHRlZCBpbXBvcnQgcGF0aCBtYXRjaGVzICIiIgorICAg
ICAgICBsID0gW10KKyAgICAgICAgZm9yIHJlcCBpbiBzZWxmLmdldHJlcG9ydHMobmFtZXM9bmFt
ZXMpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIG5vdCB3aGVuIGFuZCBy
ZXAud2hlbiAhPSAiY2FsbCIgYW5kIHJlcC5wYXNzZWQ6CisgICAgICAgICAgICAgICAgICAgICMg
c2V0dXAvdGVhcmRvd24gcGFzc2luZyByZXBvcnRzIC0gbGV0J3MgaWdub3JlIHRob3NlCisgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJy
b3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgaWYgd2hlbiBhbmQgZ2V0YXR0
cihyZXAsICd3aGVuJywgTm9uZSkgIT0gd2hlbjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQor
ICAgICAgICAgICAgaWYgbm90IGluYW1lcGFydCBvciBpbmFtZXBhcnQgaW4gcmVwLm5vZGVpZC5z
cGxpdCgiOjoiKToKKyAgICAgICAgICAgICAgICBsLmFwcGVuZChyZXApCisgICAgICAgIGlmIG5v
dCBsOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiY291bGQgbm90IGZpbmQgdGVzdCBy
ZXBvcnQgbWF0Y2hpbmcgJXI6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vIHRl
c3QgcmVwb3J0cyBhdCBhbGwhIiAlIChpbmFtZXBhcnQsKSkKKyAgICAgICAgaWYgbGVuKGwpID4g
MToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgImZvdW5k
IDIgb3IgbW9yZSB0ZXN0cmVwb3J0cyBtYXRjaGluZyAlcjogJXMiICUoaW5hbWVwYXJ0LCBsKSkK
KyAgICAgICAgcmV0dXJuIGxbMF0KKworICAgIGRlZiBnZXRmYWlsdXJlcyhzZWxmLAorICAgICAg
ICAgICAgICAgICAgICBuYW1lcz0ncHl0ZXN0X3J1bnRlc3RfbG9ncmVwb3J0IHB5dGVzdF9jb2xs
ZWN0cmVwb3J0Jyk6CisgICAgICAgIHJldHVybiBbcmVwIGZvciByZXAgaW4gc2VsZi5nZXRyZXBv
cnRzKG5hbWVzKSBpZiByZXAuZmFpbGVkXQorCisgICAgZGVmIGdldGZhaWxlZGNvbGxlY3Rpb25z
KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5nZXRmYWlsdXJlcygncHl0ZXN0X2NvbGxlY3Ry
ZXBvcnQnKQorCisgICAgZGVmIGxpc3RvdXRjb21lcyhzZWxmKToKKyAgICAgICAgcGFzc2VkID0g
W10KKyAgICAgICAgc2tpcHBlZCA9IFtdCisgICAgICAgIGZhaWxlZCA9IFtdCisgICAgICAgIGZv
ciByZXAgaW4gc2VsZi5nZXRyZXBvcnRzKAorICAgICAgICAgICAgInB5dGVzdF9jb2xsZWN0cmVw
b3J0IHB5dGVzdF9ydW50ZXN0X2xvZ3JlcG9ydCIpOgorICAgICAgICAgICAgaWYgcmVwLnBhc3Nl
ZDoKKyAgICAgICAgICAgICAgICBpZiBnZXRhdHRyKHJlcCwgIndoZW4iLCBOb25lKSA9PSAiY2Fs
bCI6CisgICAgICAgICAgICAgICAgICAgIHBhc3NlZC5hcHBlbmQocmVwKQorICAgICAgICAgICAg
ZWxpZiByZXAuc2tpcHBlZDoKKyAgICAgICAgICAgICAgICBza2lwcGVkLmFwcGVuZChyZXApCisg
ICAgICAgICAgICBlbGlmIHJlcC5mYWlsZWQ6CisgICAgICAgICAgICAgICAgZmFpbGVkLmFwcGVu
ZChyZXApCisgICAgICAgIHJldHVybiBwYXNzZWQsIHNraXBwZWQsIGZhaWxlZAorCisgICAgZGVm
IGNvdW50b3V0Y29tZXMoc2VsZik6CisgICAgICAgIHJldHVybiBbbGVuKHgpIGZvciB4IGluIHNl
bGYubGlzdG91dGNvbWVzKCldCisKKyAgICBkZWYgYXNzZXJ0b3V0Y29tZShzZWxmLCBwYXNzZWQ9
MCwgc2tpcHBlZD0wLCBmYWlsZWQ9MCk6CisgICAgICAgIHJlYWxwYXNzZWQsIHJlYWxza2lwcGVk
LCByZWFsZmFpbGVkID0gc2VsZi5saXN0b3V0Y29tZXMoKQorICAgICAgICBhc3NlcnQgcGFzc2Vk
ID09IGxlbihyZWFscGFzc2VkKQorICAgICAgICBhc3NlcnQgc2tpcHBlZCA9PSBsZW4ocmVhbHNr
aXBwZWQpCisgICAgICAgIGFzc2VydCBmYWlsZWQgPT0gbGVuKHJlYWxmYWlsZWQpCisKKyAgICBk
ZWYgY2xlYXIoc2VsZik6CisgICAgICAgIHNlbGYuY2FsbHNbOl0gPSBbXQorCisKK0BweXRlc3Qu
Zml4dHVyZQorZGVmIGxpbmVjb21wKHJlcXVlc3QpOgorICAgIHJldHVybiBMaW5lQ29tcCgpCisK
KworZGVmIHB5dGVzdF9mdW5jYXJnX19MaW5lTWF0Y2hlcihyZXF1ZXN0KToKKyAgICByZXR1cm4g
TGluZU1hdGNoZXIKKworCitAcHl0ZXN0LmZpeHR1cmUKK2RlZiB0ZXN0ZGlyKHJlcXVlc3QsIHRt
cGRpcl9mYWN0b3J5KToKKyAgICByZXR1cm4gVGVzdGRpcihyZXF1ZXN0LCB0bXBkaXJfZmFjdG9y
eSkKKworCityZXhfb3V0Y29tZSA9IHJlLmNvbXBpbGUoIihcZCspIChbXHctXSspIikKK2NsYXNz
IFJ1blJlc3VsdDoKKyAgICAiIiJUaGUgcmVzdWx0IG9mIHJ1bm5pbmcgYSBjb21tYW5kLgorCisg
ICAgQXR0cmlidXRlczoKKworICAgIDpyZXQ6IFRoZSByZXR1cm4gdmFsdWUuCisgICAgOm91dGxp
bmVzOiBMaXN0IG9mIGxpbmVzIGNhcHR1cmVkIGZyb20gc3Rkb3V0LgorICAgIDplcnJsaW5lczog
TGlzdCBvZiBsaW5lcyBjYXB0dXJlcyBmcm9tIHN0ZGVyci4KKyAgICA6c3Rkb3V0OiA6cHk6Y2xh
c3M6YExpbmVNYXRjaGVyYCBvZiBzdGRvdXQsIHVzZSBgYHN0ZG91dC5zdHIoKWBgIHRvCisgICAg
ICAgcmVjb25zdHJ1Y3Qgc3Rkb3V0IG9yIHRoZSBjb21tb25seSB1c2VkCisgICAgICAgYGBzdGRv
dXQuZm5tYXRjaF9saW5lcygpYGAgbWV0aG9kLgorICAgIDpzdGRlcnJyOiA6cHk6Y2xhc3M6YExp
bmVNYXRjaGVyYCBvZiBzdGRlcnIuCisgICAgOmR1cmF0aW9uOiBEdXJhdGlvbiBpbiBzZWNvbmRz
LgorCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJldCwgb3V0bGluZXMsIGVycmxp
bmVzLCBkdXJhdGlvbik6CisgICAgICAgIHNlbGYucmV0ID0gcmV0CisgICAgICAgIHNlbGYub3V0
bGluZXMgPSBvdXRsaW5lcworICAgICAgICBzZWxmLmVycmxpbmVzID0gZXJybGluZXMKKyAgICAg
ICAgc2VsZi5zdGRvdXQgPSBMaW5lTWF0Y2hlcihvdXRsaW5lcykKKyAgICAgICAgc2VsZi5zdGRl
cnIgPSBMaW5lTWF0Y2hlcihlcnJsaW5lcykKKyAgICAgICAgc2VsZi5kdXJhdGlvbiA9IGR1cmF0
aW9uCisKKyAgICBkZWYgcGFyc2VvdXRjb21lcyhzZWxmKToKKyAgICAgICAgIiIiIFJldHVybiBh
IGRpY3Rpb25hcnkgb2Ygb3V0Y29tZXN0cmluZy0+bnVtIGZyb20gcGFyc2luZworICAgICAgICB0
aGUgdGVybWluYWwgb3V0cHV0IHRoYXQgdGhlIHRlc3QgcHJvY2VzcyBwcm9kdWNlZC4iIiIKKyAg
ICAgICAgZm9yIGxpbmUgaW4gcmV2ZXJzZWQoc2VsZi5vdXRsaW5lcyk6CisgICAgICAgICAgICBp
ZiAnc2Vjb25kcycgaW4gbGluZToKKyAgICAgICAgICAgICAgICBvdXRjb21lcyA9IHJleF9vdXRj
b21lLmZpbmRhbGwobGluZSkKKyAgICAgICAgICAgICAgICBpZiBvdXRjb21lczoKKyAgICAgICAg
ICAgICAgICAgICAgZCA9IHt9CisgICAgICAgICAgICAgICAgICAgIGZvciBudW0sIGNhdCBpbiBv
dXRjb21lczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRbY2F0XSA9IGludChudW0pCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBkCisKKyAgICBkZWYgYXNzZXJ0X291dGNvbWVzKHNlbGYs
IHBhc3NlZD0wLCBza2lwcGVkPTAsIGZhaWxlZD0wKToKKyAgICAgICAgIiIiIGFzc2VydCB0aGF0
IHRoZSBzcGVjaWZpZWQgb3V0Y29tZXMgYXBwZWFyIHdpdGggdGhlIHJlc3BlY3RpdmUKKyAgICAg
ICAgbnVtYmVycyAoMCBtZWFucyBpdCBkaWRuJ3Qgb2NjdXIpIGluIHRoZSB0ZXh0IG91dHB1dCBm
cm9tIGEgdGVzdCBydW4uIiIiCisgICAgICAgIGQgPSBzZWxmLnBhcnNlb3V0Y29tZXMoKQorICAg
ICAgICBhc3NlcnQgcGFzc2VkID09IGQuZ2V0KCJwYXNzZWQiLCAwKQorICAgICAgICBhc3NlcnQg
c2tpcHBlZCA9PSBkLmdldCgic2tpcHBlZCIsIDApCisgICAgICAgIGFzc2VydCBmYWlsZWQgPT0g
ZC5nZXQoImZhaWxlZCIsIDApCisKKworCitjbGFzcyBUZXN0ZGlyOgorICAgICIiIlRlbXBvcmFy
eSB0ZXN0IGRpcmVjdG9yeSB3aXRoIHRvb2xzIHRvIHRlc3QvcnVuIHB5LnRlc3QgaXRzZWxmLgor
CisgICAgVGhpcyBpcyBiYXNlZCBvbiB0aGUgYGB0bXBkaXJgYCBmaXh0dXJlIGJ1dCBwcm92aWRl
cyBhIG51bWJlciBvZgorICAgIG1ldGhvZHMgd2hpY2ggYWlkIHdpdGggdGVzdGluZyBweS50ZXN0
IGl0c2VsZi4gIFVubGVzcworICAgIDpweTptZXRoOmBjaGRpcmAgaXMgdXNlZCBhbGwgbWV0aG9k
cyB3aWxsIHVzZSA6cHk6YXR0cjpgdG1wZGlyYCBhcworICAgIGN1cnJlbnQgd29ya2luZyBkaXJl
Y3RvcnkuCisKKyAgICBBdHRyaWJ1dGVzOgorCisgICAgOnRtcGRpcjogVGhlIDpweTpjbGFzczpg
cHkucGF0aC5sb2NhbGAgaW5zdGFuY2Ugb2YgdGhlIHRlbXBvcmFyeQorICAgICAgIGRpcmVjdG9y
eS4KKworICAgIDpwbHVnaW5zOiBBIGxpc3Qgb2YgcGx1Z2lucyB0byB1c2Ugd2l0aCA6cHk6bWV0
aDpgcGFyc2Vjb25maWdgIGFuZAorICAgICAgIDpweTptZXRoOmBydW5weXRlc3RgLiAgSW5pdGlh
bGx5IHRoaXMgaXMgYW4gZW1wdHkgbGlzdCBidXQKKyAgICAgICBwbHVnaW5zIGNhbiBiZSBhZGRl
ZCB0byB0aGUgbGlzdC4gIFRoZSB0eXBlIG9mIGl0ZW1zIHRvIGFkZCB0bworICAgICAgIHRoZSBs
aXN0IGRlcGVuZCBvbiB0aGUgbWV0aG9kIHdoaWNoIHVzZXMgdGhlbSBzbyByZWZlciB0byB0aGVt
CisgICAgICAgZm9yIGRldGFpbHMuCisKKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxm
LCByZXF1ZXN0LCB0bXBkaXJfZmFjdG9yeSk6CisgICAgICAgIHNlbGYucmVxdWVzdCA9IHJlcXVl
c3QKKyAgICAgICAgIyBYWFggcmVtb3ZlIGR1cGxpY2F0aW9uIHdpdGggdG1wZGlyIHBsdWdpbgor
ICAgICAgICBiYXNldG1wID0gdG1wZGlyX2ZhY3RvcnkuZW5zdXJldGVtcCgidGVzdGRpciIpCisg
ICAgICAgIG5hbWUgPSByZXF1ZXN0LmZ1bmN0aW9uLl9fbmFtZV9fCisgICAgICAgIGZvciBpIGlu
IHJhbmdlKDEwMCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdG1wZGlyID0g
YmFzZXRtcC5ta2RpcihuYW1lICsgc3RyKGkpKQorICAgICAgICAgICAgZXhjZXB0IHB5LmVycm9y
LkVFWElTVDoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgYnJlYWsKKyAg
ICAgICAgc2VsZi50bXBkaXIgPSB0bXBkaXIKKyAgICAgICAgc2VsZi5wbHVnaW5zID0gW10KKyAg
ICAgICAgc2VsZi5fc2F2ZXN5c3BhdGggPSAobGlzdChzeXMucGF0aCksIGxpc3Qoc3lzLm1ldGFf
cGF0aCkpCisgICAgICAgIHNlbGYuX3NhdmVtb2R1bGVrZXlzID0gc2V0KHN5cy5tb2R1bGVzKQor
ICAgICAgICBzZWxmLmNoZGlyKCkgIyBhbHdheXMgY2hkaXIKKyAgICAgICAgc2VsZi5yZXF1ZXN0
LmFkZGZpbmFsaXplcihzZWxmLmZpbmFsaXplKQorICAgICAgICBtZXRob2QgPSBzZWxmLnJlcXVl
c3QuY29uZmlnLmdldG9wdGlvbigiLS1ydW5weXRlc3QiKQorICAgICAgICBpZiBtZXRob2QgPT0g
ImlucHJvY2VzcyI6CisgICAgICAgICAgICBzZWxmLl9ydW5weXRlc3RfbWV0aG9kID0gc2VsZi5y
dW5weXRlc3RfaW5wcm9jZXNzCisgICAgICAgIGVsaWYgbWV0aG9kID09ICJzdWJwcm9jZXNzIjoK
KyAgICAgICAgICAgIHNlbGYuX3J1bnB5dGVzdF9tZXRob2QgPSBzZWxmLnJ1bnB5dGVzdF9zdWJw
cm9jZXNzCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiPFRlc3Rk
aXIgJXI+IiAlIChzZWxmLnRtcGRpciwpCisKKyAgICBkZWYgZmluYWxpemUoc2VsZik6CisgICAg
ICAgICIiIkNsZWFuIHVwIGdsb2JhbCBzdGF0ZSBhcnRpZmFjdHMuCisKKyAgICAgICAgU29tZSBt
ZXRob2RzIG1vZGlmeSB0aGUgZ2xvYmFsIGludGVycHJldGVyIHN0YXRlIGFuZCB0aGlzCisgICAg
ICAgIHRyaWVzIHRvIGNsZWFuIHRoaXMgdXAuICBJdCBkb2VzIG5vdCByZW1vdmUgdGhlIHRlbXBv
cmFyeQorICAgICAgICBkaXJlY3RvcnkgaG93ZXZlciBzbyBpdCBjYW4gYmUgbG9va2VkIGF0IGFm
dGVyIHRoZSB0ZXN0IHJ1bgorICAgICAgICBoYXMgZmluaXNoZWQuCisKKyAgICAgICAgIiIiCisg
ICAgICAgIHN5cy5wYXRoWzpdLCBzeXMubWV0YV9wYXRoWzpdID0gc2VsZi5fc2F2ZXN5c3BhdGgK
KyAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAnX29sZGRpcicpOgorICAgICAgICAgICAgc2VsZi5f
b2xkZGlyLmNoZGlyKCkKKyAgICAgICAgc2VsZi5kZWxldGVfbG9hZGVkX21vZHVsZXMoKQorCisg
ICAgZGVmIGRlbGV0ZV9sb2FkZWRfbW9kdWxlcyhzZWxmKToKKyAgICAgICAgIiIiRGVsZXRlIG1v
ZHVsZXMgdGhhdCBoYXZlIGJlZW4gbG9hZGVkIGR1cmluZyBhIHRlc3QuCisKKyAgICAgICAgVGhp
cyBhbGxvd3MgdGhlIGludGVycHJldGVyIHRvIGNhdGNoIG1vZHVsZSBjaGFuZ2VzIGluIGNhc2UK
KyAgICAgICAgdGhlIG1vZHVsZSBpcyByZS1pbXBvcnRlZC4KKyAgICAgICAgIiIiCisgICAgICAg
IGZvciBuYW1lIGluIHNldChzeXMubW9kdWxlcykuZGlmZmVyZW5jZShzZWxmLl9zYXZlbW9kdWxl
a2V5cyk6CisgICAgICAgICAgICAjIGl0IHNlZW1zIHpvcGUuaW50ZXJmYWNlcyBpcyBrZWVwaW5n
IHNvbWUgc3RhdGUKKyAgICAgICAgICAgICMgKHVzZWQgYnkgdHdpc3RlZCByZWxhdGVkIHRlc3Rz
KQorICAgICAgICAgICAgaWYgbmFtZSAhPSAiem9wZS5pbnRlcmZhY2UiOgorICAgICAgICAgICAg
ICAgIGRlbCBzeXMubW9kdWxlc1tuYW1lXQorCisgICAgZGVmIG1ha2VfaG9va19yZWNvcmRlcihz
ZWxmLCBwbHVnaW5tYW5hZ2VyKToKKyAgICAgICAgIiIiQ3JlYXRlIGEgbmV3IDpweTpjbGFzczpg
SG9va1JlY29yZGVyYCBmb3IgYSBQbHVnaW5NYW5hZ2VyLiIiIgorICAgICAgICBhc3NlcnQgbm90
IGhhc2F0dHIocGx1Z2lubWFuYWdlciwgInJlcHJlYyIpCisgICAgICAgIHBsdWdpbm1hbmFnZXIu
cmVwcmVjID0gcmVwcmVjID0gSG9va1JlY29yZGVyKHBsdWdpbm1hbmFnZXIpCisgICAgICAgIHNl
bGYucmVxdWVzdC5hZGRmaW5hbGl6ZXIocmVwcmVjLmZpbmlzaF9yZWNvcmRpbmcpCisgICAgICAg
IHJldHVybiByZXByZWMKKworICAgIGRlZiBjaGRpcihzZWxmKToKKyAgICAgICAgIiIiQ2QgaW50
byB0aGUgdGVtcG9yYXJ5IGRpcmVjdG9yeS4KKworICAgICAgICBUaGlzIGlzIGRvbmUgYXV0b21h
dGljYWxseSB1cG9uIGluc3RhbnRpYXRpb24uCisKKyAgICAgICAgIiIiCisgICAgICAgIG9sZCA9
IHNlbGYudG1wZGlyLmNoZGlyKCkKKyAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgJ19vbGRk
aXInKToKKyAgICAgICAgICAgIHNlbGYuX29sZGRpciA9IG9sZAorCisgICAgZGVmIF9tYWtlZmls
ZShzZWxmLCBleHQsIGFyZ3MsIGt3YXJncyk6CisgICAgICAgIGl0ZW1zID0gbGlzdChrd2FyZ3Mu
aXRlbXMoKSkKKyAgICAgICAgaWYgYXJnczoKKyAgICAgICAgICAgIHNvdXJjZSA9IHB5LmJ1aWx0
aW4uX3RvdGV4dCgiXG4iKS5qb2luKAorICAgICAgICAgICAgICAgIG1hcChweS5idWlsdGluLl90
b3RleHQsIGFyZ3MpKSArIHB5LmJ1aWx0aW4uX3RvdGV4dCgiXG4iKQorICAgICAgICAgICAgYmFz
ZW5hbWUgPSBzZWxmLnJlcXVlc3QuZnVuY3Rpb24uX19uYW1lX18KKyAgICAgICAgICAgIGl0ZW1z
Lmluc2VydCgwLCAoYmFzZW5hbWUsIHNvdXJjZSkpCisgICAgICAgIHJldCA9IE5vbmUKKyAgICAg
ICAgZm9yIG5hbWUsIHZhbHVlIGluIGl0ZW1zOgorICAgICAgICAgICAgcCA9IHNlbGYudG1wZGly
LmpvaW4obmFtZSkubmV3KGV4dD1leHQpCisgICAgICAgICAgICBzb3VyY2UgPSBTb3VyY2UodmFs
dWUpCisgICAgICAgICAgICBkZWYgbXlfdG90ZXh0KHMsIGVuY29kaW5nPSJ1dGYtOCIpOgorICAg
ICAgICAgICAgICAgIGlmIHB5LmJ1aWx0aW4uX2lzYnl0ZXMocyk6CisgICAgICAgICAgICAgICAg
ICAgIHMgPSBweS5idWlsdGluLl90b3RleHQocywgZW5jb2Rpbmc9ZW5jb2RpbmcpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHMKKyAgICAgICAgICAgIHNvdXJjZV91bmljb2RlID0gIlxuIi5qb2lu
KFtteV90b3RleHQobGluZSkgZm9yIGxpbmUgaW4gc291cmNlLmxpbmVzXSkKKyAgICAgICAgICAg
IHNvdXJjZSA9IHB5LmJ1aWx0aW4uX3RvdGV4dChzb3VyY2VfdW5pY29kZSkKKyAgICAgICAgICAg
IGNvbnRlbnQgPSBzb3VyY2Uuc3RyaXAoKS5lbmNvZGUoInV0Zi04IikgIyArICJcbiIKKyAgICAg
ICAgICAgICNjb250ZW50ID0gY29udGVudC5yc3RyaXAoKSArICJcbiIKKyAgICAgICAgICAgIHAu
d3JpdGUoY29udGVudCwgIndiIikKKyAgICAgICAgICAgIGlmIHJldCBpcyBOb25lOgorICAgICAg
ICAgICAgICAgIHJldCA9IHAKKyAgICAgICAgcmV0dXJuIHJldAorCisgICAgZGVmIG1ha2VmaWxl
KHNlbGYsIGV4dCwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgIiIiQ3JlYXRlIGEgbmV3IGZp
bGUgaW4gdGhlIHRlc3RkaXIuCisKKyAgICAgICAgZXh0OiBUaGUgZXh0ZW5zaW9uIHRoZSBmaWxl
IHNob3VsZCB1c2UsIGluY2x1ZGluZyB0aGUgZG90LgorICAgICAgICAgICBFLmcuICIucHkiLgor
CisgICAgICAgIGFyZ3M6IEFsbCBhcmdzIHdpbGwgYmUgdHJlYXRlZCBhcyBzdHJpbmdzIGFuZCBq
b2luZWQgdXNpbmcKKyAgICAgICAgICAgbmV3bGluZXMuICBUaGUgcmVzdWx0IHdpbGwgYmUgd3Jp
dHRlbiBhcyBjb250ZW50cyB0byB0aGUKKyAgICAgICAgICAgZmlsZS4gIFRoZSBuYW1lIG9mIHRo
ZSBmaWxlIHdpbGwgYmUgYmFzZWQgb24gdGhlIHRlc3QKKyAgICAgICAgICAgZnVuY3Rpb24gcmVx
dWVzdGluZyB0aGlzIGZpeHR1cmUuCisgICAgICAgICAgIEUuZy4gInRlc3RkaXIubWFrZWZpbGUo
Jy50eHQnLCAnbGluZTEnLCAnbGluZTInKSIKKworICAgICAgICBrd2FyZ3M6IEVhY2gga2V5d29y
ZCBpcyB0aGUgbmFtZSBvZiBhIGZpbGUsIHdoaWxlIHRoZSB2YWx1ZSBvZgorICAgICAgICAgICBp
dCB3aWxsIGJlIHdyaXR0ZW4gYXMgY29udGVudHMgb2YgdGhlIGZpbGUuCisgICAgICAgICAgIEUu
Zy4gInRlc3RkaXIubWFrZWZpbGUoJy5pbmknLCBweXRlc3Q9J1tweXRlc3RdXG5hZGRvcHRzPS1y
c1xuJykiCisKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9tYWtlZmlsZShleHQs
IGFyZ3MsIGt3YXJncykKKworICAgIGRlZiBtYWtlY29uZnRlc3Qoc2VsZiwgc291cmNlKToKKyAg
ICAgICAgIiIiV3JpdGUgYSBjb250ZXN0LnB5IGZpbGUgd2l0aCAnc291cmNlJyBhcyBjb250ZW50
cy4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYubWFrZXB5ZmlsZShjb25mdGVzdD1zb3VyY2UpCisK
KyAgICBkZWYgbWFrZWluaShzZWxmLCBzb3VyY2UpOgorICAgICAgICAiIiJXcml0ZSBhIHRveC5p
bmkgZmlsZSB3aXRoICdzb3VyY2UnIGFzIGNvbnRlbnRzLiIiIgorICAgICAgICByZXR1cm4gc2Vs
Zi5tYWtlZmlsZSgnLmluaScsIHRveD1zb3VyY2UpCisKKyAgICBkZWYgZ2V0aW5pY2ZnKHNlbGYs
IHNvdXJjZSk6CisgICAgICAgICIiIlJldHVybiB0aGUgcHl0ZXN0IHNlY3Rpb24gZnJvbSB0aGUg
dG94LmluaSBjb25maWcgZmlsZS4iIiIKKyAgICAgICAgcCA9IHNlbGYubWFrZWluaShzb3VyY2Up
CisgICAgICAgIHJldHVybiBweS5pbmljb25maWcuSW5pQ29uZmlnKHApWydweXRlc3QnXQorCisg
ICAgZGVmIG1ha2VweWZpbGUoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgIiIiU2hv
cnRjdXQgZm9yIC5tYWtlZmlsZSgpIHdpdGggYSAucHkgZXh0ZW5zaW9uLiIiIgorICAgICAgICBy
ZXR1cm4gc2VsZi5fbWFrZWZpbGUoJy5weScsIGFyZ3MsIGt3YXJncykKKworICAgIGRlZiBtYWtl
dHh0ZmlsZShzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAiIiJTaG9ydGN1dCBmb3Ig
Lm1ha2VmaWxlKCkgd2l0aCBhIC50eHQgZXh0ZW5zaW9uLiIiIgorICAgICAgICByZXR1cm4gc2Vs
Zi5fbWFrZWZpbGUoJy50eHQnLCBhcmdzLCBrd2FyZ3MpCisKKyAgICBkZWYgc3lzcGF0aGluc2Vy
dChzZWxmLCBwYXRoPU5vbmUpOgorICAgICAgICAiIiJQcmVwZW5kIGEgZGlyZWN0b3J5IHRvIHN5
cy5wYXRoLCBkZWZhdWx0cyB0byA6cHk6YXR0cjpgdG1wZGlyYC4KKworICAgICAgICBUaGlzIGlz
IHVuZG9uZSBhdXRvbWF0aWNhbGx5IGFmdGVyIHRoZSB0ZXN0LgorICAgICAgICAiIiIKKyAgICAg
ICAgaWYgcGF0aCBpcyBOb25lOgorICAgICAgICAgICAgcGF0aCA9IHNlbGYudG1wZGlyCisgICAg
ICAgIHN5cy5wYXRoLmluc2VydCgwLCBzdHIocGF0aCkpCisgICAgICAgICMgYSBjYWxsIHRvIHN5
c3BhdGhpbnNlcnQoKSB1c3VhbGx5IG1lYW5zIHRoYXQgdGhlIGNhbGxlcgorICAgICAgICAjIHdh
bnRzIHRvIGltcG9ydCBzb21lIGR5bmFtaWNhbGx5IGNyZWF0ZWQgZmlsZXMuCisgICAgICAgICMg
d2l0aCBweXRob24zIHdlIHRodXMgaW52YWxpZGF0ZSBpbXBvcnQgY2FjaGVzLgorICAgICAgICBz
ZWxmLl9wb3NzaWJseV9pbnZhbGlkYXRlX2ltcG9ydF9jYWNoZXMoKQorCisgICAgZGVmIF9wb3Nz
aWJseV9pbnZhbGlkYXRlX2ltcG9ydF9jYWNoZXMoc2VsZik6CisgICAgICAgICMgaW52YWxpZGF0
ZSBjYWNoZXMgaWYgd2UgY2FuIChweTMzIGFuZCBhYm92ZSkKKyAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgaW1wb3J0IGltcG9ydGxpYgorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAg
ICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBoYXNhdHRyKGltcG9y
dGxpYiwgImludmFsaWRhdGVfY2FjaGVzIik6CisgICAgICAgICAgICAgICAgaW1wb3J0bGliLmlu
dmFsaWRhdGVfY2FjaGVzKCkKKworICAgIGRlZiBta2RpcihzZWxmLCBuYW1lKToKKyAgICAgICAg
IiIiQ3JlYXRlIGEgbmV3IChzdWIpZGlyZWN0b3J5LiIiIgorICAgICAgICByZXR1cm4gc2VsZi50
bXBkaXIubWtkaXIobmFtZSkKKworICAgIGRlZiBta3B5ZGlyKHNlbGYsIG5hbWUpOgorICAgICAg
ICAiIiJDcmVhdGUgYSBuZXcgcHl0aG9uIHBhY2thZ2UuCisKKyAgICAgICAgVGhpcyBjcmVhdGVz
IGEgKHN1YilkaXJlY290cnkgd2l0aCBhbiBlbXB0eSBgYF9faW5pdF9fLnB5YGAKKyAgICAgICAg
ZmlsZSBzbyB0aGF0IGlzIHJlY29nbmlzZWQgYXMgYSBweXRob24gcGFja2FnZS4KKworICAgICAg
ICAiIiIKKyAgICAgICAgcCA9IHNlbGYubWtkaXIobmFtZSkKKyAgICAgICAgcC5lbnN1cmUoIl9f
aW5pdF9fLnB5IikKKyAgICAgICAgcmV0dXJuIHAKKworICAgIFNlc3Npb24gPSBTZXNzaW9uCisg
ICAgZGVmIGdldG5vZGUoc2VsZiwgY29uZmlnLCBhcmcpOgorICAgICAgICAiIiJSZXR1cm4gdGhl
IGNvbGxlY3Rpb24gbm9kZSBvZiBhIGZpbGUuCisKKyAgICAgICAgOnBhcmFtIGNvbmZpZzogOnB5
OmNsYXNzOmBfcHl0ZXN0LmNvbmZpZy5Db25maWdgIGluc3RhbmNlLCBzZWUKKyAgICAgICAgICAg
OnB5Om1ldGg6YHBhcnNlY29uZmlnYCBhbmQgOnB5Om1ldGg6YHBhcnNlY29uZmlndXJlYCB0bwor
ICAgICAgICAgICBjcmVhdGUgdGhlIGNvbmZpZ3VyYXRpb24uCisKKyAgICAgICAgOnBhcmFtIGFy
ZzogQSA6cHk6Y2xhc3M6YHB5LnBhdGgubG9jYWxgIGluc3RhbmNlIG9mIHRoZSBmaWxlLgorCisg
ICAgICAgICIiIgorICAgICAgICBzZXNzaW9uID0gU2Vzc2lvbihjb25maWcpCisgICAgICAgIGFz
c2VydCAnOjonIG5vdCBpbiBzdHIoYXJnKQorICAgICAgICBwID0gcHkucGF0aC5sb2NhbChhcmcp
CisgICAgICAgIGNvbmZpZy5ob29rLnB5dGVzdF9zZXNzaW9uc3RhcnQoc2Vzc2lvbj1zZXNzaW9u
KQorICAgICAgICByZXMgPSBzZXNzaW9uLnBlcmZvcm1fY29sbGVjdChbc3RyKHApXSwgZ2VuaXRl
bXM9RmFsc2UpWzBdCisgICAgICAgIGNvbmZpZy5ob29rLnB5dGVzdF9zZXNzaW9uZmluaXNoKHNl
c3Npb249c2Vzc2lvbiwgZXhpdHN0YXR1cz1FWElUX09LKQorICAgICAgICByZXR1cm4gcmVzCisK
KyAgICBkZWYgZ2V0cGF0aG5vZGUoc2VsZiwgcGF0aCk6CisgICAgICAgICIiIlJldHVybiB0aGUg
Y29sbGVjdGlvbiBub2RlIG9mIGEgZmlsZS4KKworICAgICAgICBUaGlzIGlzIGxpa2UgOnB5Om1l
dGg6YGdldG5vZGVgIGJ1dCB1c2VzCisgICAgICAgIDpweTptZXRoOmBwYXJzZWNvbmZpZ3VyZWAg
dG8gY3JlYXRlIHRoZSAoY29uZmlndXJlZCkgcHkudGVzdAorICAgICAgICBDb25maWcgaW5zdGFu
Y2UuCisKKyAgICAgICAgOnBhcmFtIHBhdGg6IEEgOnB5OmNsYXNzOmBweS5wYXRoLmxvY2FsYCBp
bnN0YW5jZSBvZiB0aGUgZmlsZS4KKworICAgICAgICAiIiIKKyAgICAgICAgY29uZmlnID0gc2Vs
Zi5wYXJzZWNvbmZpZ3VyZShwYXRoKQorICAgICAgICBzZXNzaW9uID0gU2Vzc2lvbihjb25maWcp
CisgICAgICAgIHggPSBzZXNzaW9uLmZzcGF0aC5iZXN0cmVscGF0aChwYXRoKQorICAgICAgICBj
b25maWcuaG9vay5weXRlc3Rfc2Vzc2lvbnN0YXJ0KHNlc3Npb249c2Vzc2lvbikKKyAgICAgICAg
cmVzID0gc2Vzc2lvbi5wZXJmb3JtX2NvbGxlY3QoW3hdLCBnZW5pdGVtcz1GYWxzZSlbMF0KKyAg
ICAgICAgY29uZmlnLmhvb2sucHl0ZXN0X3Nlc3Npb25maW5pc2goc2Vzc2lvbj1zZXNzaW9uLCBl
eGl0c3RhdHVzPUVYSVRfT0spCisgICAgICAgIHJldHVybiByZXMKKworICAgIGRlZiBnZW5pdGVt
cyhzZWxmLCBjb2xpdGVtcyk6CisgICAgICAgICIiIkdlbmVyYXRlIGFsbCB0ZXN0IGl0ZW1zIGZy
b20gYSBjb2xsZWN0aW9uIG5vZGUuCisKKyAgICAgICAgVGhpcyByZWN1cnNlcyBpbnRvIHRoZSBj
b2xsZWN0aW9uIG5vZGUgYW5kIHJldHVybnMgYSBsaXN0IG9mCisgICAgICAgIGFsbCB0aGUgdGVz
dCBpdGVtcyBjb250YWluZWQgd2l0aGluLgorCisgICAgICAgICIiIgorICAgICAgICBzZXNzaW9u
ID0gY29saXRlbXNbMF0uc2Vzc2lvbgorICAgICAgICByZXN1bHQgPSBbXQorICAgICAgICBmb3Ig
Y29saXRlbSBpbiBjb2xpdGVtczoKKyAgICAgICAgICAgIHJlc3VsdC5leHRlbmQoc2Vzc2lvbi5n
ZW5pdGVtcyhjb2xpdGVtKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIHJ1bml0
ZW0oc2VsZiwgc291cmNlKToKKyAgICAgICAgIiIiUnVuIHRoZSAidGVzdF9mdW5jIiBJdGVtLgor
CisgICAgICAgIFRoZSBjYWxsaW5nIHRlc3QgaW5zdGFuY2UgKHRoZSBjbGFzcyB3aGljaCBjb250
YWlucyB0aGUgdGVzdAorICAgICAgICBtZXRob2QpIG11c3QgcHJvdmlkZSBhIGBgLmdldHJ1bm5l
cigpYGAgbWV0aG9kIHdoaWNoIHNob3VsZAorICAgICAgICByZXR1cm4gYSBydW5uZXIgd2hpY2gg
Y2FuIHJ1biB0aGUgdGVzdCBwcm90b2NvbCBmb3IgYSBzaW5nbGUKKyAgICAgICAgaXRlbSwgbGlr
ZSBlLmcuIDpweTpmdW5jOmBfcHl0ZXN0LnJ1bm5lci5ydW50ZXN0cHJvdG9jb2xgLgorCisgICAg
ICAgICIiIgorICAgICAgICAjIHVzZWQgZnJvbSBydW5uZXIgZnVuY3Rpb25hbCB0ZXN0cworICAg
ICAgICBpdGVtID0gc2VsZi5nZXRpdGVtKHNvdXJjZSkKKyAgICAgICAgIyB0aGUgdGVzdCBjbGFz
cyB3aGVyZSB3ZSBhcmUgY2FsbGVkIGZyb20gd2FudHMgdG8gcHJvdmlkZSB0aGUgcnVubmVyCisg
ICAgICAgIHRlc3RjbGFzc2luc3RhbmNlID0gc2VsZi5yZXF1ZXN0Lmluc3RhbmNlCisgICAgICAg
IHJ1bm5lciA9IHRlc3RjbGFzc2luc3RhbmNlLmdldHJ1bm5lcigpCisgICAgICAgIHJldHVybiBy
dW5uZXIoaXRlbSkKKworICAgIGRlZiBpbmxpbmVfcnVuc291cmNlKHNlbGYsIHNvdXJjZSwgKmNt
ZGxpbmVhcmdzKToKKyAgICAgICAgIiIiUnVuIGEgdGVzdCBtb2R1bGUgaW4gcHJvY2VzcyB1c2lu
ZyBgYHB5dGVzdC5tYWluKClgYC4KKworICAgICAgICBUaGlzIHJ1biB3cml0ZXMgInNvdXJjZSIg
aW50byBhIHRlbXBvcmFyeSBmaWxlIGFuZCBydW5zCisgICAgICAgIGBgcHl0ZXN0Lm1haW4oKWBg
IG9uIGl0LCByZXR1cm5pbmcgYSA6cHk6Y2xhc3M6YEhvb2tSZWNvcmRlcmAKKyAgICAgICAgaW5z
dGFuY2UgZm9yIHRoZSByZXN1bHQuCisKKyAgICAgICAgOnBhcmFtIHNvdXJjZTogVGhlIHNvdXJj
ZSBjb2RlIG9mIHRoZSB0ZXN0IG1vZHVsZS4KKworICAgICAgICA6cGFyYW0gY21kbGluZWFyZ3M6
IEFueSBleHRyYSBjb21tYW5kIGxpbmUgYXJndW1lbnRzIHRvIHVzZS4KKworICAgICAgICA6cmV0
dXJuOiA6cHk6Y2xhc3M6YEhvb2tSZWNvcmRlcmAgaW5zdGFuY2Ugb2YgdGhlIHJlc3VsdC4KKwor
ICAgICAgICAiIiIKKyAgICAgICAgcCA9IHNlbGYubWFrZXB5ZmlsZShzb3VyY2UpCisgICAgICAg
IGwgPSBsaXN0KGNtZGxpbmVhcmdzKSArIFtwXQorICAgICAgICByZXR1cm4gc2VsZi5pbmxpbmVf
cnVuKCpsKQorCisgICAgZGVmIGlubGluZV9nZW5pdGVtcyhzZWxmLCAqYXJncyk6CisgICAgICAg
ICIiIlJ1biBgYHB5dGVzdC5tYWluKFsnLS1jb2xsZWN0b25seSddKWBgIGluLXByb2Nlc3MuCisK
KyAgICAgICAgUmV0dW5zIGEgdHVwbGUgb2YgdGhlIGNvbGxlY3RlZCBpdGVtcyBhbmQgYQorICAg
ICAgICA6cHk6Y2xhc3M6YEhvb2tSZWNvcmRlcmAgaW5zdGFuY2UuCisKKyAgICAgICAgVGhpcyBy
dW5zIHRoZSA6cHk6ZnVuYzpgcHl0ZXN0Lm1haW5gIGZ1bmN0aW9uIHRvIHJ1biBhbGwgb2YKKyAg
ICAgICAgcHkudGVzdCBpbnNpZGUgdGhlIHRlc3QgcHJvY2VzcyBpdHNlbGYgbGlrZQorICAgICAg
ICA6cHk6bWV0aDpgaW5saW5lX3J1bmAuICBIb3dldmVyIHRoZSByZXR1cm4gdmFsdWUgaXMgYSB0
dXBsZSBvZgorICAgICAgICB0aGUgY29sbGVjdGlvbiBpdGVtcyBhbmQgYSA6cHk6Y2xhc3M6YEhv
b2tSZWNvcmRlcmAgaW5zdGFuY2UuCisKKyAgICAgICAgIiIiCisgICAgICAgIHJlYyA9IHNlbGYu
aW5saW5lX3J1bigiLS1jb2xsZWN0LW9ubHkiLCAqYXJncykKKyAgICAgICAgaXRlbXMgPSBbeC5p
dGVtIGZvciB4IGluIHJlYy5nZXRjYWxscygicHl0ZXN0X2l0ZW1jb2xsZWN0ZWQiKV0KKyAgICAg
ICAgcmV0dXJuIGl0ZW1zLCByZWMKKworICAgIGRlZiBpbmxpbmVfcnVuKHNlbGYsICphcmdzLCAq
Kmt3YXJncyk6CisgICAgICAgICIiIlJ1biBgYHB5dGVzdC5tYWluKClgYCBpbi1wcm9jZXNzLCBy
ZXR1cm5pbmcgYSBIb29rUmVjb3JkZXIuCisKKyAgICAgICAgVGhpcyBydW5zIHRoZSA6cHk6ZnVu
YzpgcHl0ZXN0Lm1haW5gIGZ1bmN0aW9uIHRvIHJ1biBhbGwgb2YKKyAgICAgICAgcHkudGVzdCBp
bnNpZGUgdGhlIHRlc3QgcHJvY2VzcyBpdHNlbGYuICBUaGlzIG1lYW5zIGl0IGNhbgorICAgICAg
ICByZXR1cm4gYSA6cHk6Y2xhc3M6YEhvb2tSZWNvcmRlcmAgaW5zdGFuY2Ugd2hpY2ggZ2l2ZXMg
bW9yZQorICAgICAgICBkZXRhaWxlZCByZXN1bHRzIGZyb20gdGhlbiBydW4gdGhlbiBjYW4gYmUg
ZG9uZSBieSBtYXRjaGluZworICAgICAgICBzdGRvdXQvc3RkZXJyIGZyb20gOnB5Om1ldGg6YHJ1
bnB5dGVzdGAuCisKKyAgICAgICAgOnBhcmFtIGFyZ3M6IEFueSBjb21tYW5kIGxpbmUgYXJndW1l
bnRzIHRvIHBhc3MgdG8KKyAgICAgICAgICAgOnB5OmZ1bmM6YHB5dGVzdC5tYWluYC4KKworICAg
ICAgICA6cGFyYW0gcGx1Z2luOiAoa2V5d29yZC1vbmx5KSBFeHRyYSBwbHVnaW4gaW5zdGFuY2Vz
IHRoZQorICAgICAgICAgICBgYHB5dGVzdC5tYWluKClgYCBpbnN0YW5jZSBzaG91bGQgdXNlLgor
CisgICAgICAgIDpyZXR1cm46IEEgOnB5OmNsYXNzOmBIb29rUmVjb3JkZXJgIGluc3RhbmNlLgor
CisgICAgICAgICIiIgorICAgICAgICByZWMgPSBbXQorICAgICAgICBjbGFzcyBDb2xsZWN0Ogor
ICAgICAgICAgICAgZGVmIHB5dGVzdF9jb25maWd1cmUoeCwgY29uZmlnKToKKyAgICAgICAgICAg
ICAgICByZWMuYXBwZW5kKHNlbGYubWFrZV9ob29rX3JlY29yZGVyKGNvbmZpZy5wbHVnaW5tYW5h
Z2VyKSkKKworICAgICAgICBwbHVnaW5zID0ga3dhcmdzLmdldCgicGx1Z2lucyIpIG9yIFtdCisg
ICAgICAgIHBsdWdpbnMuYXBwZW5kKENvbGxlY3QoKSkKKyAgICAgICAgcmV0ID0gcHl0ZXN0Lm1h
aW4obGlzdChhcmdzKSwgcGx1Z2lucz1wbHVnaW5zKQorICAgICAgICBzZWxmLmRlbGV0ZV9sb2Fk
ZWRfbW9kdWxlcygpCisgICAgICAgIGlmIGxlbihyZWMpID09IDE6CisgICAgICAgICAgICByZXBy
ZWMgPSByZWMucG9wKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNsYXNzIHJlcHJlYzoK
KyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHJlcHJlYy5yZXQgPSByZXQKKworICAgICAg
ICAjIHR5cGljYWxseSB3ZSByZXJhaXNlIGtleWJvYXJkIGludGVycnVwdHMgZnJvbSB0aGUgY2hp
bGQgcnVuCisgICAgICAgICMgYmVjYXVzZSBpdCdzIG91ciB1c2VyIHJlcXVlc3RpbmcgaW50ZXJy
dXB0aW9uIG9mIHRoZSB0ZXN0aW5nCisgICAgICAgIGlmIHJldCA9PSAyIGFuZCBub3Qga3dhcmdz
LmdldCgibm9fcmVyYWlzZV9jdHJsYyIpOgorICAgICAgICAgICAgY2FsbHMgPSByZXByZWMuZ2V0
Y2FsbHMoInB5dGVzdF9rZXlib2FyZF9pbnRlcnJ1cHQiKQorICAgICAgICAgICAgaWYgY2FsbHMg
YW5kIGNhbGxzWy0xXS5leGNpbmZvLnR5cGUgPT0gS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAg
ICAgICAgICAgcmFpc2UgS2V5Ym9hcmRJbnRlcnJ1cHQoKQorICAgICAgICByZXR1cm4gcmVwcmVj
CisKKyAgICBkZWYgcnVucHl0ZXN0X2lucHJvY2VzcyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgor
ICAgICAgICAiIiIgUmV0dXJuIHJlc3VsdCBvZiBydW5uaW5nIHB5dGVzdCBpbi1wcm9jZXNzLCBw
cm92aWRpbmcgYSBzaW1pbGFyCisgICAgICAgIGludGVyZmFjZSB0byB3aGF0IHNlbGYucnVucHl0
ZXN0KCkgcHJvdmlkZXMuICIiIgorICAgICAgICBpZiBrd2FyZ3MuZ2V0KCJzeXNwYXRoaW5zZXJ0
Iik6CisgICAgICAgICAgICBzZWxmLnN5c3BhdGhpbnNlcnQoKQorICAgICAgICBub3cgPSB0aW1l
LnRpbWUoKQorICAgICAgICBjYXB0dXJlID0gcHkuaW8uU3RkQ2FwdHVyZSgpCisgICAgICAgIHRy
eToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXByZWMgPSBzZWxmLmlubGlu
ZV9ydW4oKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICAgICAgZXhjZXB0IFN5c3RlbUV4aXQgYXMg
ZToKKyAgICAgICAgICAgICAgICBjbGFzcyByZXByZWM6CisgICAgICAgICAgICAgICAgICAgIHJl
dCA9IGUuYXJnc1swXQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAg
ICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKCkKKyAgICAgICAgICAgICAgICBjbGFzcyByZXByZWM6
CisgICAgICAgICAgICAgICAgICAgIHJldCA9IDMKKyAgICAgICAgZmluYWxseToKKyAgICAgICAg
ICAgIG91dCwgZXJyID0gY2FwdHVyZS5yZXNldCgpCisgICAgICAgICAgICBzeXMuc3Rkb3V0Lndy
aXRlKG91dCkKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoZXJyKQorCisgICAgICAgIHJl
cyA9IFJ1blJlc3VsdChyZXByZWMucmV0LAorICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnNw
bGl0KCJcbiIpLCBlcnIuc3BsaXQoIlxuIiksCisgICAgICAgICAgICAgICAgICAgICAgICB0aW1l
LnRpbWUoKS1ub3cpCisgICAgICAgIHJlcy5yZXByZWMgPSByZXByZWMKKyAgICAgICAgcmV0dXJu
IHJlcworCisgICAgZGVmIHJ1bnB5dGVzdChzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAg
ICAiIiIgUnVuIHB5dGVzdCBpbmxpbmUgb3IgaW4gYSBzdWJwcm9jZXNzLCBkZXBlbmRpbmcgb24g
dGhlIGNvbW1hbmQgbGluZQorICAgICAgICBvcHRpb24gIi0tcnVucHl0ZXN0IiBhbmQgcmV0dXJu
IGEgOnB5OmNsYXNzOmBSdW5SZXN1bHRgLgorCisgICAgICAgICIiIgorICAgICAgICBhcmdzID0g
c2VsZi5fZW5zdXJlX2Jhc2V0ZW1wKGFyZ3MpCisgICAgICAgIHJldHVybiBzZWxmLl9ydW5weXRl
c3RfbWV0aG9kKCphcmdzLCAqKmt3YXJncykKKworICAgIGRlZiBfZW5zdXJlX2Jhc2V0ZW1wKHNl
bGYsIGFyZ3MpOgorICAgICAgICBhcmdzID0gW3N0cih4KSBmb3IgeCBpbiBhcmdzXQorICAgICAg
ICBmb3IgeCBpbiBhcmdzOgorICAgICAgICAgICAgaWYgc3RyKHgpLnN0YXJ0c3dpdGgoJy0tYmFz
ZXRlbXAnKToKKyAgICAgICAgICAgICAgICAjcHJpbnQgKCJiYXNlZHRlbXAgZXhpc3RzOiAlcyIg
JShhcmdzLCkpCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgIGFyZ3MuYXBwZW5kKCItLWJhc2V0ZW1wPSVzIiAlIHNlbGYudG1wZGlyLmRpcnBhdGgoJ2Jh
c2V0ZW1wJykpCisgICAgICAgICAgICAjcHJpbnQgKCJhZGRlZCBiYXNldGVtcDogJXMiICUoYXJn
cywpKQorICAgICAgICByZXR1cm4gYXJncworCisgICAgZGVmIHBhcnNlY29uZmlnKHNlbGYsICph
cmdzKToKKyAgICAgICAgIiIiUmV0dXJuIGEgbmV3IHB5LnRlc3QgQ29uZmlnIGluc3RhbmNlIGZy
b20gZ2l2ZW4gY29tbWFuZGxpbmUgYXJncy4KKworICAgICAgICBUaGlzIGludm9rZXMgdGhlIHB5
LnRlc3QgYm9vdHN0cmFwcGluZyBjb2RlIGluIF9weXRlc3QuY29uZmlnCisgICAgICAgIHRvIGNy
ZWF0ZSBhIG5ldyA6cHk6Y2xhc3M6YF9weXRlc3QuY29yZS5QbHVnaW5NYW5hZ2VyYCBhbmQKKyAg
ICAgICAgY2FsbCB0aGUgcHl0ZXN0X2NtZGxpbmVfcGFyc2UgaG9vayB0byBjcmVhdGUgbmV3Cisg
ICAgICAgIDpweTpjbGFzczpgX3B5dGVzdC5jb25maWcuQ29uZmlnYCBpbnN0YW5jZS4KKworICAg
ICAgICBJZiA6cHk6YXR0cjpgcGx1Z2luc2AgaGFzIGJlZW4gcG9wdWxhdGVkIHRoZXkgc2hvdWxk
IGJlIHBsdWdpbgorICAgICAgICBtb2R1bGVzIHdoaWNoIHdpbGwgYmUgcmVnaXN0ZXJlZCB3aXRo
IHRoZSBQbHVnaW5NYW5hZ2VyLgorCisgICAgICAgICIiIgorICAgICAgICBhcmdzID0gc2VsZi5f
ZW5zdXJlX2Jhc2V0ZW1wKGFyZ3MpCisKKyAgICAgICAgaW1wb3J0IF9weXRlc3QuY29uZmlnCisg
ICAgICAgIGNvbmZpZyA9IF9weXRlc3QuY29uZmlnLl9wcmVwYXJlY29uZmlnKGFyZ3MsIHNlbGYu
cGx1Z2lucykKKyAgICAgICAgIyB3ZSBkb24ndCBrbm93IHdoYXQgdGhlIHRlc3Qgd2lsbCBkbyB3
aXRoIHRoaXMgaGFsZi1zZXR1cCBjb25maWcKKyAgICAgICAgIyBvYmplY3QgYW5kIHRodXMgd2Ug
bWFrZSBzdXJlIGl0IGdldHMgdW5jb25maWd1cmVkIHByb3Blcmx5IGluIGFueQorICAgICAgICAj
IGNhc2UgKG90aGVyd2lzZSBjYXB0dXJpbmcgY291bGQgc3RpbGwgYmUgYWN0aXZlLCBmb3IgZXhh
bXBsZSkKKyAgICAgICAgc2VsZi5yZXF1ZXN0LmFkZGZpbmFsaXplcihjb25maWcuX2Vuc3VyZV91
bmNvbmZpZ3VyZSkKKyAgICAgICAgcmV0dXJuIGNvbmZpZworCisgICAgZGVmIHBhcnNlY29uZmln
dXJlKHNlbGYsICphcmdzKToKKyAgICAgICAgIiIiUmV0dXJuIGEgbmV3IHB5LnRlc3QgY29uZmln
dXJlZCBDb25maWcgaW5zdGFuY2UuCisKKyAgICAgICAgVGhpcyByZXR1cm5zIGEgbmV3IDpweTpj
bGFzczpgX3B5dGVzdC5jb25maWcuQ29uZmlnYCBpbnN0YW5jZQorICAgICAgICBsaWtlIDpweTpt
ZXRoOmBwYXJzZWNvbmZpZ2AsIGJ1dCBhbHNvIGNhbGxzIHRoZQorICAgICAgICBweXRlc3RfY29u
ZmlndXJlIGhvb2suCisKKyAgICAgICAgIiIiCisgICAgICAgIGNvbmZpZyA9IHNlbGYucGFyc2Vj
b25maWcoKmFyZ3MpCisgICAgICAgIGNvbmZpZy5fZG9fY29uZmlndXJlKCkKKyAgICAgICAgc2Vs
Zi5yZXF1ZXN0LmFkZGZpbmFsaXplcihjb25maWcuX2Vuc3VyZV91bmNvbmZpZ3VyZSkKKyAgICAg
ICAgcmV0dXJuIGNvbmZpZworCisgICAgZGVmIGdldGl0ZW0oc2VsZiwgIHNvdXJjZSwgZnVuY25h
bWU9InRlc3RfZnVuYyIpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIHRlc3QgaXRlbSBmb3IgYSB0
ZXN0IGZ1bmN0aW9uLgorCisgICAgICAgIFRoaXMgd3JpdGVzIHRoZSBzb3VyY2UgdG8gYSBweXRo
b24gZmlsZSBhbmQgcnVucyBweS50ZXN0J3MKKyAgICAgICAgY29sbGVjdGlvbiBvbiB0aGUgcmVz
dWx0aW5nIG1vZHVsZSwgcmV0dXJuaW5nIHRoZSB0ZXN0IGl0ZW0KKyAgICAgICAgZm9yIHRoZSBy
ZXF1ZXN0ZWQgZnVuY3Rpb24gbmFtZS4KKworICAgICAgICA6cGFyYW0gc291cmNlOiBUaGUgbW9k
dWxlIHNvdXJjZS4KKworICAgICAgICA6cGFyYW0gZnVuY25hbWU6IFRoZSBuYW1lIG9mIHRoZSB0
ZXN0IGZ1bmN0aW9uIGZvciB3aGljaCB0aGUKKyAgICAgICAgICAgSXRlbSBtdXN0IGJlIHJldHVy
bmVkLgorCisgICAgICAgICIiIgorICAgICAgICBpdGVtcyA9IHNlbGYuZ2V0aXRlbXMoc291cmNl
KQorICAgICAgICBmb3IgaXRlbSBpbiBpdGVtczoKKyAgICAgICAgICAgIGlmIGl0ZW0ubmFtZSA9
PSBmdW5jbmFtZToKKyAgICAgICAgICAgICAgICByZXR1cm4gaXRlbQorICAgICAgICBhc3NlcnQg
MCwgIiVyIGl0ZW0gbm90IGZvdW5kIGluIG1vZHVsZTpcbiVzXG5pdGVtczogJXMiICUoCisgICAg
ICAgICAgICAgICAgICBmdW5jbmFtZSwgc291cmNlLCBpdGVtcykKKworICAgIGRlZiBnZXRpdGVt
cyhzZWxmLCAgc291cmNlKToKKyAgICAgICAgIiIiUmV0dXJuIGFsbCB0ZXN0IGl0ZW1zIGNvbGxl
Y3RlZCBmcm9tIHRoZSBtb2R1bGUuCisKKyAgICAgICAgVGhpcyB3cml0ZXMgdGhlIHNvdXJjZSB0
byBhIHB5dGhvbiBmaWxlIGFuZCBydW5zIHB5LnRlc3QncworICAgICAgICBjb2xsZWN0aW9uIG9u
IHRoZSByZXN1bHRpbmcgbW9kdWxlLCByZXR1cm5pbmcgYWxsIHRlc3QgaXRlbXMKKyAgICAgICAg
Y29udGFpbmVkIHdpdGhpbi4KKworICAgICAgICAiIiIKKyAgICAgICAgbW9kY29sID0gc2VsZi5n
ZXRtb2R1bGVjb2woc291cmNlKQorICAgICAgICByZXR1cm4gc2VsZi5nZW5pdGVtcyhbbW9kY29s
XSkKKworICAgIGRlZiBnZXRtb2R1bGVjb2woc2VsZiwgIHNvdXJjZSwgY29uZmlnYXJncz0oKSwg
d2l0aGluaXQ9RmFsc2UpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIG1vZHVsZSBjb2xsZWN0aW9u
IG5vZGUgZm9yIGBgc291cmNlYGAuCisKKyAgICAgICAgVGhpcyB3cml0ZXMgYGBzb3VyY2VgYCB0
byBhIGZpbGUgdXNpbmcgOnB5Om1ldGg6YG1ha2VweWZpbGVgCisgICAgICAgIGFuZCB0aGVuIHJ1
bnMgdGhlIHB5LnRlc3QgY29sbGVjdGlvbiBvbiBpdCwgcmV0dXJuaW5nIHRoZQorICAgICAgICBj
b2xsZWN0aW9uIG5vZGUgZm9yIHRoZSB0ZXN0IG1vZHVsZS4KKworICAgICAgICA6cGFyYW0gc291
cmNlOiBUaGUgc291cmNlIGNvZGUgb2YgdGhlIG1vZHVsZSB0byBjb2xsZWN0LgorCisgICAgICAg
IDpwYXJhbSBjb25maWdhcmdzOiBBbnkgZXh0cmEgYXJndW1lbnRzIHRvIHBhc3MgdG8KKyAgICAg
ICAgICAgOnB5Om1ldGg6YHBhcnNlY29uZmlndXJlYC4KKworICAgICAgICA6cGFyYW0gd2l0aGlu
aXQ6IFdoZXRoZXIgdG8gYWxzbyB3cml0ZSBhIGBgX19pbml0X18ucHlgYCBmaWxlCisgICAgICAg
ICAgIHRvIHRoZSB0ZW1wb3Jhcmx5IGRpcmVjdG9yeSB0byBlbnN1cmUgaXQgaXMgYSBwYWNrYWdl
LgorCisgICAgICAgICIiIgorICAgICAgICBrdyA9IHtzZWxmLnJlcXVlc3QuZnVuY3Rpb24uX19u
YW1lX186IFNvdXJjZShzb3VyY2UpLnN0cmlwKCl9CisgICAgICAgIHBhdGggPSBzZWxmLm1ha2Vw
eWZpbGUoKiprdykKKyAgICAgICAgaWYgd2l0aGluaXQ6CisgICAgICAgICAgICBzZWxmLm1ha2Vw
eWZpbGUoX19pbml0X18gPSAiIyIpCisgICAgICAgIHNlbGYuY29uZmlnID0gY29uZmlnID0gc2Vs
Zi5wYXJzZWNvbmZpZ3VyZShwYXRoLCAqY29uZmlnYXJncykKKyAgICAgICAgbm9kZSA9IHNlbGYu
Z2V0bm9kZShjb25maWcsIHBhdGgpCisgICAgICAgIHJldHVybiBub2RlCisKKyAgICBkZWYgY29s
bGVjdF9ieV9uYW1lKHNlbGYsIG1vZGNvbCwgbmFtZSk6CisgICAgICAgICIiIlJldHVybiB0aGUg
Y29sbGVjdGlvbiBub2RlIGZvciBuYW1lIGZyb20gdGhlIG1vZHVsZSBjb2xsZWN0aW9uLgorCisg
ICAgICAgIFRoaXMgd2lsbCBzZWFyY2ggYSBtb2R1bGUgY29sbGVjdGlvbiBub2RlIGZvciBhIGNv
bGxlY3Rpb24KKyAgICAgICAgbm9kZSBtYXRjaGluZyB0aGUgZ2l2ZW4gbmFtZS4KKworICAgICAg
ICA6cGFyYW0gbW9kY29sOiBBIG1vZHVsZSBjb2xsZWN0aW9uIG5vZGUsIHNlZQorICAgICAgICAg
ICA6cHk6bWV0aDpgZ2V0bW9kdWxlY29sYC4KKworICAgICAgICA6cGFyYW0gbmFtZTogVGhlIG5h
bWUgb2YgdGhlIG5vZGUgdG8gcmV0dXJuLgorCisgICAgICAgICIiIgorICAgICAgICBmb3IgY29s
aXRlbSBpbiBtb2Rjb2wuX21lbW9jb2xsZWN0KCk6CisgICAgICAgICAgICBpZiBjb2xpdGVtLm5h
bWUgPT0gbmFtZToKKyAgICAgICAgICAgICAgICByZXR1cm4gY29saXRlbQorCisgICAgZGVmIHBv
cGVuKHNlbGYsIGNtZGFyZ3MsIHN0ZG91dCwgc3RkZXJyLCAqKmt3KToKKyAgICAgICAgIiIiSW52
b2tlIHN1YnByb2Nlc3MuUG9wZW4uCisKKyAgICAgICAgVGhpcyBjYWxscyBzdWJwcm9jZXNzLlBv
cGVuIG1ha2luZyBzdXJlIHRoZSBjdXJyZW50IHdvcmtpbmcKKyAgICAgICAgZGlyZWN0b3J5IGlz
IHRoZSBQWVRIT05QQVRILgorCisgICAgICAgIFlvdSBwcm9iYWJseSB3YW50IHRvIHVzZSA6cHk6
bWV0aDpgcnVuYCBpbnN0ZWFkLgorCisgICAgICAgICIiIgorICAgICAgICBlbnYgPSBvcy5lbnZp
cm9uLmNvcHkoKQorICAgICAgICBlbnZbJ1BZVEhPTlBBVEgnXSA9IG9zLnBhdGhzZXAuam9pbihm
aWx0ZXIoTm9uZSwgWworICAgICAgICAgICAgc3RyKG9zLmdldGN3ZCgpKSwgZW52LmdldCgnUFlU
SE9OUEFUSCcsICcnKV0pKQorICAgICAgICBrd1snZW52J10gPSBlbnYKKyAgICAgICAgcmV0dXJu
IHN1YnByb2Nlc3MuUG9wZW4oY21kYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3Rkb3V0PXN0ZG91dCwgc3RkZXJyPXN0ZGVyciwgKiprdykKKworICAgIGRlZiBydW4oc2Vs
ZiwgKmNtZGFyZ3MpOgorICAgICAgICAiIiJSdW4gYSBjb21tYW5kIHdpdGggYXJndW1lbnRzLgor
CisgICAgICAgIFJ1biBhIHByb2Nlc3MgdXNpbmcgc3VicHJvY2Vzcy5Qb3BlbiBzYXZpbmcgdGhl
IHN0ZG91dCBhbmQKKyAgICAgICAgc3RkZXJyLgorCisgICAgICAgIFJldHVybnMgYSA6cHk6Y2xh
c3M6YFJ1blJlc3VsdGAuCisKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9ydW4o
KmNtZGFyZ3MpCisKKyAgICBkZWYgX3J1bihzZWxmLCAqY21kYXJncyk6CisgICAgICAgIGNtZGFy
Z3MgPSBbc3RyKHgpIGZvciB4IGluIGNtZGFyZ3NdCisgICAgICAgIHAxID0gc2VsZi50bXBkaXIu
am9pbigic3Rkb3V0IikKKyAgICAgICAgcDIgPSBzZWxmLnRtcGRpci5qb2luKCJzdGRlcnIiKQor
ICAgICAgICBwcmludF8oInJ1bm5pbmc6IiwgJyAnLmpvaW4oY21kYXJncykpCisgICAgICAgIHBy
aW50XygiICAgICBpbjoiLCBzdHIocHkucGF0aC5sb2NhbCgpKSkKKyAgICAgICAgZjEgPSBjb2Rl
Y3Mub3BlbihzdHIocDEpLCAidyIsIGVuY29kaW5nPSJ1dGY4IikKKyAgICAgICAgZjIgPSBjb2Rl
Y3Mub3BlbihzdHIocDIpLCAidyIsIGVuY29kaW5nPSJ1dGY4IikKKyAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgbm93ID0gdGltZS50aW1lKCkKKyAgICAgICAgICAgIHBvcGVuID0gc2VsZi5wb3Bl
bihjbWRhcmdzLCBzdGRvdXQ9ZjEsIHN0ZGVycj1mMiwKKyAgICAgICAgICAgICAgICBjbG9zZV9m
ZHM9KHN5cy5wbGF0Zm9ybSAhPSAid2luMzIiKSkKKyAgICAgICAgICAgIHJldCA9IHBvcGVuLndh
aXQoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZjEuY2xvc2UoKQorICAgICAgICAg
ICAgZjIuY2xvc2UoKQorICAgICAgICBmMSA9IGNvZGVjcy5vcGVuKHN0cihwMSksICJyIiwgZW5j
b2Rpbmc9InV0ZjgiKQorICAgICAgICBmMiA9IGNvZGVjcy5vcGVuKHN0cihwMiksICJyIiwgZW5j
b2Rpbmc9InV0ZjgiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvdXQgPSBmMS5yZWFkKCku
c3BsaXRsaW5lcygpCisgICAgICAgICAgICBlcnIgPSBmMi5yZWFkKCkuc3BsaXRsaW5lcygpCisg
ICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmMS5jbG9zZSgpCisgICAgICAgICAgICBmMi5j
bG9zZSgpCisgICAgICAgIHNlbGYuX2R1bXBfbGluZXMob3V0LCBzeXMuc3Rkb3V0KQorICAgICAg
ICBzZWxmLl9kdW1wX2xpbmVzKGVyciwgc3lzLnN0ZGVycikKKyAgICAgICAgcmV0dXJuIFJ1blJl
c3VsdChyZXQsIG91dCwgZXJyLCB0aW1lLnRpbWUoKS1ub3cpCisKKyAgICBkZWYgX2R1bXBfbGlu
ZXMoc2VsZiwgbGluZXMsIGZwKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIGxpbmUg
aW4gbGluZXM6CisgICAgICAgICAgICAgICAgcHkuYnVpbHRpbi5wcmludF8obGluZSwgZmlsZT1m
cCkKKyAgICAgICAgZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvcjoKKyAgICAgICAgICAgIHByaW50
KCJjb3VsZG4ndCBwcmludCB0byAlcyBiZWNhdXNlIG9mIGVuY29kaW5nIiAlIChmcCwpKQorCisg
ICAgZGVmIF9nZXRweXRlc3RhcmdzKHNlbGYpOgorICAgICAgICAjIHdlIGNhbm5vdCB1c2UgIihz
eXMuZXhlY3V0YWJsZSxzY3JpcHQpIgorICAgICAgICAjIGJlY2F1c2Ugb24gd2luZG93cyB0aGUg
c2NyaXB0IGlzIGUuZy4gYSBweS50ZXN0LmV4ZQorICAgICAgICByZXR1cm4gKHN5cy5leGVjdXRh
YmxlLCBfcHl0ZXN0X2Z1bGxwYXRoLCkgIyBub3FhCisKKyAgICBkZWYgcnVucHl0aG9uKHNlbGYs
IHNjcmlwdCk6CisgICAgICAgICIiIlJ1biBhIHB5dGhvbiBzY3JpcHQgdXNpbmcgc3lzLmV4ZWN1
dGFibGUgYXMgaW50ZXJwcmV0ZXIuCisKKyAgICAgICAgUmV0dXJucyBhIDpweTpjbGFzczpgUnVu
UmVzdWx0YC4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLnJ1bihzeXMuZXhlY3V0
YWJsZSwgc2NyaXB0KQorCisgICAgZGVmIHJ1bnB5dGhvbl9jKHNlbGYsIGNvbW1hbmQpOgorICAg
ICAgICAiIiJSdW4gcHl0aG9uIC1jICJjb21tYW5kIiwgcmV0dXJuIGEgOnB5OmNsYXNzOmBSdW5S
ZXN1bHRgLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5ydW4oc3lzLmV4ZWN1dGFibGUsICItYyIs
IGNvbW1hbmQpCisKKyAgICBkZWYgcnVucHl0ZXN0X3N1YnByb2Nlc3Moc2VsZiwgKmFyZ3MsICoq
a3dhcmdzKToKKyAgICAgICAgIiIiUnVuIHB5LnRlc3QgYXMgYSBzdWJwcm9jZXNzIHdpdGggZ2l2
ZW4gYXJndW1lbnRzLgorCisgICAgICAgIEFueSBwbHVnaW5zIGFkZGVkIHRvIHRoZSA6cHk6YXR0
cjpgcGx1Z2luc2AgbGlzdCB3aWxsIGFkZGVkCisgICAgICAgIHVzaW5nIHRoZSBgYC1wYGAgY29t
bWFuZCBsaW5lIG9wdGlvbi4gIEFkZHRpb25hbGx5CisgICAgICAgIGBgLS1iYXNldGVtcGBgIGlz
IHVzZWQgcHV0IGFueSB0ZW1wb3JhcnkgZmlsZXMgYW5kIGRpcmVjdG9yaWVzCisgICAgICAgIGlu
IGEgbnVtYmVyZWQgZGlyZWN0b3J5IHByZWZpeGVkIHdpdGggInJ1bnB5dGVzdC0iIHNvIHRoZXkg
ZG8KKyAgICAgICAgbm90IGNvbmZsaWN0IHdpdGggdGhlIG5vcm1hbCBudW1iZXJkIHB5dGVzdCBs
b2NhdGlvbiBmb3IKKyAgICAgICAgdGVtcG9yYXJ5IGZpbGVzIGFuZCBkaXJlY3Rvcmllcy4KKwor
ICAgICAgICBSZXR1cm5zIGEgOnB5OmNsYXNzOmBSdW5SZXN1bHRgLgorCisgICAgICAgICIiIgor
ICAgICAgICBwID0gcHkucGF0aC5sb2NhbC5tYWtlX251bWJlcmVkX2RpcihwcmVmaXg9InJ1bnB5
dGVzdC0iLAorICAgICAgICAgICAga2VlcD1Ob25lLCByb290ZGlyPXNlbGYudG1wZGlyKQorICAg
ICAgICBhcmdzID0gKCctLWJhc2V0ZW1wPSVzJyAlIHAsICkgKyBhcmdzCisgICAgICAgICNmb3Ig
eCBpbiBhcmdzOgorICAgICAgICAjICAgIGlmICctLWNvbmZjdXRkaXInIGluIHN0cih4KToKKyAg
ICAgICAgIyAgICAgICAgYnJlYWsKKyAgICAgICAgI2Vsc2U6CisgICAgICAgICMgICAgcGFzcwor
ICAgICAgICAjICAgIGFyZ3MgPSAoJy0tY29uZmN1dGRpcj0uJywpICsgYXJncworICAgICAgICBw
bHVnaW5zID0gW3ggZm9yIHggaW4gc2VsZi5wbHVnaW5zIGlmIGlzaW5zdGFuY2UoeCwgc3RyKV0K
KyAgICAgICAgaWYgcGx1Z2luczoKKyAgICAgICAgICAgIGFyZ3MgPSAoJy1wJywgcGx1Z2luc1sw
XSkgKyBhcmdzCisgICAgICAgIGFyZ3MgPSBzZWxmLl9nZXRweXRlc3RhcmdzKCkgKyBhcmdzCisg
ICAgICAgIHJldHVybiBzZWxmLnJ1bigqYXJncykKKworICAgIGRlZiBzcGF3bl9weXRlc3Qoc2Vs
Ziwgc3RyaW5nLCBleHBlY3RfdGltZW91dD0xMC4wKToKKyAgICAgICAgIiIiUnVuIHB5LnRlc3Qg
dXNpbmcgcGV4cGVjdC4KKworICAgICAgICBUaGlzIG1ha2VzIHN1cmUgdG8gdXNlIHRoZSByaWdo
dCBweS50ZXN0IGFuZCBzZXRzIHVwIHRoZQorICAgICAgICB0ZW1wb3JhcnkgZGlyZWN0b3J5IGxv
Y2F0aW9ucy4KKworICAgICAgICBUaGUgcGV4cGVjdCBjaGlsZCBpcyByZXR1cm5lZC4KKworICAg
ICAgICAiIiIKKyAgICAgICAgYmFzZXRlbXAgPSBzZWxmLnRtcGRpci5ta2RpcigicGV4cGVjdCIp
CisgICAgICAgIGludm9rZSA9ICIgIi5qb2luKG1hcChzdHIsIHNlbGYuX2dldHB5dGVzdGFyZ3Mo
KSkpCisgICAgICAgIGNtZCA9ICIlcyAtLWJhc2V0ZW1wPSVzICVzIiAlIChpbnZva2UsIGJhc2V0
ZW1wLCBzdHJpbmcpCisgICAgICAgIHJldHVybiBzZWxmLnNwYXduKGNtZCwgZXhwZWN0X3RpbWVv
dXQ9ZXhwZWN0X3RpbWVvdXQpCisKKyAgICBkZWYgc3Bhd24oc2VsZiwgY21kLCBleHBlY3RfdGlt
ZW91dD0xMC4wKToKKyAgICAgICAgIiIiUnVuIGEgY29tbWFuZCB1c2luZyBwZXhwZWN0LgorCisg
ICAgICAgIFRoZSBwZXhwZWN0IGNoaWxkIGlzIHJldHVybmVkLgorICAgICAgICAiIiIKKyAgICAg
ICAgcGV4cGVjdCA9IHB5dGVzdC5pbXBvcnRvcnNraXAoInBleHBlY3QiLCAiMy4wIikKKyAgICAg
ICAgaWYgaGFzYXR0cihzeXMsICdweXB5X3ZlcnNpb25faW5mbycpIGFuZCAnNjQnIGluIHBsYXRm
b3JtLm1hY2hpbmUoKToKKyAgICAgICAgICAgIHB5dGVzdC5za2lwKCJweXB5LTY0IGJpdCBub3Qg
c3VwcG9ydGVkIikKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICJkYXJ3aW4iOgorICAgICAg
ICAgICAgcHl0ZXN0LnhmYWlsKCJwZXhwZWN0IGRvZXMgbm90IHdvcmsgcmVsaWFibHkgb24gZGFy
d2luPyEiKQorICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgiZnJlZWJzZCIpOgor
ICAgICAgICAgICAgcHl0ZXN0LnhmYWlsKCJwZXhwZWN0IGRvZXMgbm90IHdvcmsgcmVsaWFibHkg
b24gZnJlZWJzZCIpCisgICAgICAgIGxvZ2ZpbGUgPSBzZWxmLnRtcGRpci5qb2luKCJzcGF3bi5v
dXQiKS5vcGVuKCJ3YiIpCisgICAgICAgIGNoaWxkID0gcGV4cGVjdC5zcGF3bihjbWQsIGxvZ2Zp
bGU9bG9nZmlsZSkKKyAgICAgICAgc2VsZi5yZXF1ZXN0LmFkZGZpbmFsaXplcihsb2dmaWxlLmNs
b3NlKQorICAgICAgICBjaGlsZC50aW1lb3V0ID0gZXhwZWN0X3RpbWVvdXQKKyAgICAgICAgcmV0
dXJuIGNoaWxkCisKK2RlZiBnZXRkZWNvZGVkKG91dCk6CisgICAgICAgIHRyeToKKyAgICAgICAg
ICAgIHJldHVybiBvdXQuZGVjb2RlKCJ1dGYtOCIpCisgICAgICAgIGV4Y2VwdCBVbmljb2RlRGVj
b2RlRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gIklOVEVSTkFMIG5vdC11dGY4LWRlY29kZWFi
bGUsIHRydW5jYXRlZCBzdHJpbmc6XG4lcyIgJSAoCisgICAgICAgICAgICAgICAgICAgIHB5Lmlv
LnNhZmVyZXByKG91dCksKQorCisKK2NsYXNzIExpbmVDb21wOgorICAgIGRlZiBfX2luaXRfXyhz
ZWxmKToKKyAgICAgICAgc2VsZi5zdHJpbmdpbyA9IHB5LmlvLlRleHRJTygpCisKKyAgICBkZWYg
YXNzZXJ0X2NvbnRhaW5zX2xpbmVzKHNlbGYsIGxpbmVzMik6CisgICAgICAgICIiIiBhc3NlcnQg
dGhhdCBsaW5lczIgYXJlIGNvbnRhaW5lZCAobGluZWFybHkpIGluIGxpbmVzMS4KKyAgICAgICAg
ICAgIHJldHVybiBhIGxpc3Qgb2YgZXh0cmFsaW5lcyBmb3VuZC4KKyAgICAgICAgIiIiCisgICAg
ICAgIF9fdHJhY2ViYWNraGlkZV9fID0gVHJ1ZQorICAgICAgICB2YWwgPSBzZWxmLnN0cmluZ2lv
LmdldHZhbHVlKCkKKyAgICAgICAgc2VsZi5zdHJpbmdpby50cnVuY2F0ZSgwKQorICAgICAgICBz
ZWxmLnN0cmluZ2lvLnNlZWsoMCkKKyAgICAgICAgbGluZXMxID0gdmFsLnNwbGl0KCJcbiIpCisg
ICAgICAgIHJldHVybiBMaW5lTWF0Y2hlcihsaW5lczEpLmZubWF0Y2hfbGluZXMobGluZXMyKQor
CisKK2NsYXNzIExpbmVNYXRjaGVyOgorICAgICIiIkZsZXhpYmxlIG1hdGNoaW5nIG9mIHRleHQu
CisKKyAgICBUaGlzIGlzIGEgY29udmVuaWVuY2UgY2xhc3MgdG8gdGVzdCBsYXJnZSB0ZXh0cyBs
aWtlIHRoZSBvdXRwdXQgb2YKKyAgICBjb21tYW5kcy4KKworICAgIFRoZSBjb25zdHJ1Y3RvciB0
YWtlcyBhIGxpc3Qgb2YgbGluZXMgd2l0aG91dCB0aGVpciB0cmFpbGluZworICAgIG5ld2xpbmVz
LCBpLmUuIGBgdGV4dC5zcGxpdGxpbmVzKClgYC4KKworICAgICIiIgorCisgICAgZGVmIF9faW5p
dF9fKHNlbGYsICBsaW5lcyk6CisgICAgICAgIHNlbGYubGluZXMgPSBsaW5lcworCisgICAgZGVm
IHN0cihzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBlbnRpcmUgb3JpZ2luYWwgdGV4dC4i
IiIKKyAgICAgICAgcmV0dXJuICJcbiIuam9pbihzZWxmLmxpbmVzKQorCisgICAgZGVmIF9nZXRs
aW5lcyhzZWxmLCBsaW5lczIpOgorICAgICAgICBpZiBpc2luc3RhbmNlKGxpbmVzMiwgc3RyKToK
KyAgICAgICAgICAgIGxpbmVzMiA9IFNvdXJjZShsaW5lczIpCisgICAgICAgIGlmIGlzaW5zdGFu
Y2UobGluZXMyLCBTb3VyY2UpOgorICAgICAgICAgICAgbGluZXMyID0gbGluZXMyLnN0cmlwKCku
bGluZXMKKyAgICAgICAgcmV0dXJuIGxpbmVzMgorCisgICAgZGVmIGZubWF0Y2hfbGluZXNfcmFu
ZG9tKHNlbGYsIGxpbmVzMik6CisgICAgICAgICIiIkNoZWNrIGxpbmVzIGV4aXN0IGluIHRoZSBv
dXRwdXQuCisKKyAgICAgICAgVGhlIGFyZ3VtZW50IGlzIGEgbGlzdCBvZiBsaW5lcyB3aGljaCBo
YXZlIHRvIG9jY3VyIGluIHRoZQorICAgICAgICBvdXRwdXQsIGluIGFueSBvcmRlci4gIEVhY2gg
bGluZSBjYW4gY29udGFpbiBnbG9iIHdoaWxkY2FyZHMuCisKKyAgICAgICAgIiIiCisgICAgICAg
IGxpbmVzMiA9IHNlbGYuX2dldGxpbmVzKGxpbmVzMikKKyAgICAgICAgZm9yIGxpbmUgaW4gbGlu
ZXMyOgorICAgICAgICAgICAgZm9yIHggaW4gc2VsZi5saW5lczoKKyAgICAgICAgICAgICAgICBp
ZiBsaW5lID09IHggb3IgZm5tYXRjaCh4LCBsaW5lKToKKyAgICAgICAgICAgICAgICAgICAgcHJp
bnRfKCJtYXRjaGVkOiAiLCByZXByKGxpbmUpKQorICAgICAgICAgICAgICAgICAgICBicmVhawor
ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJsaW5l
ICVyIG5vdCBmb3VuZCBpbiBvdXRwdXQiICUgbGluZSkKKworICAgIGRlZiBnZXRfbGluZXNfYWZ0
ZXIoc2VsZiwgZm5saW5lKToKKyAgICAgICAgIiIiUmV0dXJuIGFsbCBsaW5lcyBmb2xsb3dpbmcg
dGhlIGdpdmVuIGxpbmUgaW4gdGhlIHRleHQuCisKKyAgICAgICAgVGhlIGdpdmVuIGxpbmUgY2Fu
IGNvbnRhaW4gZ2xvYiB3aWxkY2FyZHMuCisgICAgICAgICIiIgorICAgICAgICBmb3IgaSwgbGlu
ZSBpbiBlbnVtZXJhdGUoc2VsZi5saW5lcyk6CisgICAgICAgICAgICBpZiBmbmxpbmUgPT0gbGlu
ZSBvciBmbm1hdGNoKGxpbmUsIGZubGluZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYu
bGluZXNbaSsxOl0KKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibGluZSAlciBub3QgZm91bmQg
aW4gb3V0cHV0IiAlIGZubGluZSkKKworICAgIGRlZiBmbm1hdGNoX2xpbmVzKHNlbGYsIGxpbmVz
Mik6CisgICAgICAgICIiIlNlYXJjaCB0aGUgdGV4dCBmb3IgbWF0Y2hpbmcgbGluZXMuCisKKyAg
ICAgICAgVGhlIGFyZ3VtZW50IGlzIGEgbGlzdCBvZiBsaW5lcyB3aGljaCBoYXZlIHRvIG1hdGNo
IGFuZCBjYW4KKyAgICAgICAgdXNlIGdsb2Igd2lsZGNhcmRzLiAgSWYgdGhleSBkbyBub3QgbWF0
Y2ggYW4gcHl0ZXN0LmZhaWwoKSBpcworICAgICAgICBjYWxsZWQuICBUaGUgbWF0Y2hlcyBhbmQg
bm9uLW1hdGNoZXMgYXJlIGFsc28gcHJpbnRlZCBvbgorICAgICAgICBzdGRvdXQuCisKKyAgICAg
ICAgIiIiCisgICAgICAgIGRlZiBzaG93KGFyZzEsIGFyZzIpOgorICAgICAgICAgICAgcHkuYnVp
bHRpbi5wcmludF8oYXJnMSwgYXJnMiwgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICBsaW5lczIg
PSBzZWxmLl9nZXRsaW5lcyhsaW5lczIpCisgICAgICAgIGxpbmVzMSA9IHNlbGYubGluZXNbOl0K
KyAgICAgICAgbmV4dGxpbmUgPSBOb25lCisgICAgICAgIGV4dHJhbGluZXMgPSBbXQorICAgICAg
ICBfX3RyYWNlYmFja2hpZGVfXyA9IFRydWUKKyAgICAgICAgZm9yIGxpbmUgaW4gbGluZXMyOgor
ICAgICAgICAgICAgbm9tYXRjaHByaW50ZWQgPSBGYWxzZQorICAgICAgICAgICAgd2hpbGUgbGlu
ZXMxOgorICAgICAgICAgICAgICAgIG5leHRsaW5lID0gbGluZXMxLnBvcCgwKQorICAgICAgICAg
ICAgICAgIGlmIGxpbmUgPT0gbmV4dGxpbmU6CisgICAgICAgICAgICAgICAgICAgIHNob3coImV4
YWN0IG1hdGNoOiIsIHJlcHIobGluZSkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAg
ICAgICAgICAgICAgZWxpZiBmbm1hdGNoKG5leHRsaW5lLCBsaW5lKToKKyAgICAgICAgICAgICAg
ICAgICAgc2hvdygiZm5tYXRjaDoiLCByZXByKGxpbmUpKQorICAgICAgICAgICAgICAgICAgICBz
aG93KCIgICB3aXRoOiIsIHJlcHIobmV4dGxpbmUpKQorICAgICAgICAgICAgICAgICAgICBicmVh
aworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBub21h
dGNocHJpbnRlZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNob3coIm5vbWF0Y2g6IiwgcmVw
cihsaW5lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vbWF0Y2hwcmludGVkID0gVHJ1ZQor
ICAgICAgICAgICAgICAgICAgICBzaG93KCIgICAgYW5kOiIsIHJlcHIobmV4dGxpbmUpKQorICAg
ICAgICAgICAgICAgIGV4dHJhbGluZXMuYXBwZW5kKG5leHRsaW5lKQorICAgICAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgICAgICBweXRlc3QuZmFpbCgicmVtYWlucyB1bm1hdGNoZWQ6ICVyLCBz
ZWUgc3RkZXJyIiAlIChsaW5lLCkpCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRl
ZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvcHl0aG9uLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1w
b3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L3B5dGhvbi5weQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMzU4MGVhZTA3NGYKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvcHl0aG9uLnB5
CkBAIC0wLDAgKzEsMjMwMiBAQAorIiIiIFB5dGhvbiB0ZXN0IGRpc2NvdmVyeSwgc2V0dXAgYW5k
IHJ1biBvZiB0ZXN0IGZ1bmN0aW9ucy4gIiIiCitpbXBvcnQgZm5tYXRjaAoraW1wb3J0IGZ1bmN0
b29scworaW1wb3J0IGluc3BlY3QKK2ltcG9ydCByZQoraW1wb3J0IHR5cGVzCitpbXBvcnQgc3lz
CisKK2ltcG9ydCBweQoraW1wb3J0IHB5dGVzdAorZnJvbSBfcHl0ZXN0Ll9jb2RlLmNvZGUgaW1w
b3J0IFRlcm1pbmFsUmVwcgorZnJvbSBfcHl0ZXN0Lm1hcmsgaW1wb3J0IE1hcmtEZWNvcmF0b3Is
IE1hcmtlckVycm9yCisKK3RyeToKKyAgICBpbXBvcnQgZW51bQorZXhjZXB0IEltcG9ydEVycm9y
OiAgIyBwcmFnbWE6IG5vIGNvdmVyCisgICAgIyBPbmx5IGF2YWlsYWJsZSBpbiBQeXRob24gMy40
KyBvciBhcyBhIGJhY2twb3J0CisgICAgZW51bSA9IE5vbmUKKworaW1wb3J0IF9weXRlc3QKK2lt
cG9ydCBfcHl0ZXN0Ll9wbHVnZ3kgYXMgcGx1Z2d5CisKK2N1dGRpcjIgPSBweS5wYXRoLmxvY2Fs
KF9weXRlc3QuX19maWxlX18pLmRpcnBhdGgoKQorY3V0ZGlyMSA9IHB5LnBhdGgubG9jYWwocGx1
Z2d5Ll9fZmlsZV9fLnJzdHJpcCgib2MiKSkKKworCitOb25lVHlwZSA9IHR5cGUoTm9uZSkKK05P
VFNFVCA9IG9iamVjdCgpCitpc2Z1bmN0aW9uID0gaW5zcGVjdC5pc2Z1bmN0aW9uCitpc2NsYXNz
ID0gaW5zcGVjdC5pc2NsYXNzCitjYWxsYWJsZSA9IHB5LmJ1aWx0aW4uY2FsbGFibGUKKyMgdXNl
ZCB0byB3b3JrIGFyb3VuZCBhIHB5dGhvbjIgZXhjZXB0aW9uIGluZm8gbGVhaworZXhjX2NsZWFy
ID0gZ2V0YXR0cihzeXMsICdleGNfY2xlYXInLCBsYW1iZGE6IE5vbmUpCisjIFRoZSB0eXBlIG9m
IHJlLmNvbXBpbGUgb2JqZWN0cyBpcyBub3QgZXhwb3NlZCBpbiBQeXRob24uCitSRUdFWF9UWVBF
ID0gdHlwZShyZS5jb21waWxlKCcnKSkKKworX1BZMyA9IHN5cy52ZXJzaW9uX2luZm8gPiAoMywg
MCkKK19QWTIgPSBub3QgX1BZMworCisKK2lmIGhhc2F0dHIoaW5zcGVjdCwgJ3NpZ25hdHVyZScp
OgorICAgIGRlZiBfZm9ybWF0X2FyZ3MoZnVuYyk6CisgICAgICAgIHJldHVybiBzdHIoaW5zcGVj
dC5zaWduYXR1cmUoZnVuYykpCitlbHNlOgorICAgIGRlZiBfZm9ybWF0X2FyZ3MoZnVuYyk6Cisg
ICAgICAgIHJldHVybiBpbnNwZWN0LmZvcm1hdGFyZ3NwZWMoKmluc3BlY3QuZ2V0YXJnc3BlYyhm
dW5jKSkKKworaWYgIHN5cy52ZXJzaW9uX2luZm9bOjJdID09ICgyLCA2KToKKyAgICBkZWYgaXNj
bGFzcyhvYmplY3QpOgorICAgICAgICAiIiIgUmV0dXJuIHRydWUgaWYgdGhlIG9iamVjdCBpcyBh
IGNsYXNzLiBPdmVycmlkZXMgaW5zcGVjdC5pc2NsYXNzIGZvcgorICAgICAgICBweXRob24gMi42
IGJlY2F1c2UgaXQgd2lsbCByZXR1cm4gVHJ1ZSBmb3Igb2JqZWN0cyB3aGljaCBhbHdheXMgcmV0
dXJuCisgICAgICAgIHNvbWV0aGluZyBvbiBfX2dldGF0dHJfXyBjYWxscyAoc2VlICMxMDM1KS4K
KyAgICAgICAgQmFja3BvcnQgb2YgaHR0cHM6Ly9oZy5weXRob24ub3JnL2NweXRob24vcmV2LzM1
YmY4ZjdhOGVkYworICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIGlzaW5zdGFuY2Uob2JqZWN0
LCAodHlwZSwgdHlwZXMuQ2xhc3NUeXBlKSkKKworZGVmIF9oYXNfcG9zaXRpb25hbF9hcmcoZnVu
Yyk6CisgICAgcmV0dXJuIGZ1bmMuX19jb2RlX18uY29fYXJnY291bnQKKworCitkZWYgZmlsdGVy
X3RyYWNlYmFjayhlbnRyeSk6CisgICAgIyBlbnRyeS5wYXRoIG1pZ2h0IHNvbWV0aW1lcyByZXR1
cm4gYSBzdHIgb2JqZWN0IHdoZW4gdGhlIGVudHJ5CisgICAgIyBwb2ludHMgdG8gZHluYW1pY2Fs
bHkgZ2VuZXJhdGVkIGNvZGUKKyAgICAjIHNlZSBodHRwczovL2JpdGJ1Y2tldC5vcmcvcHl0ZXN0
LWRldi9weS9pc3N1ZXMvNzEKKyAgICByYXdfZmlsZW5hbWUgPSBlbnRyeS5mcmFtZS5jb2RlLnJh
dy5jb19maWxlbmFtZQorICAgIGlzX2dlbmVyYXRlZCA9ICc8JyBpbiByYXdfZmlsZW5hbWUgYW5k
ICc+JyBpbiByYXdfZmlsZW5hbWUKKyAgICBpZiBpc19nZW5lcmF0ZWQ6CisgICAgICAgIHJldHVy
biBGYWxzZQorICAgICMgZW50cnkucGF0aCBtaWdodCBwb2ludCB0byBhbiBpbmV4aXN0aW5nIGZp
bGUsIGluIHdoaWNoIGNhc2UgaXQgd2lsbAorICAgICMgYWxzc28gcmV0dXJuIGEgc3RyIG9iamVj
dC4gc2VlICMxMTMzCisgICAgcCA9IHB5LnBhdGgubG9jYWwoZW50cnkucGF0aCkKKyAgICByZXR1
cm4gcCAhPSBjdXRkaXIxIGFuZCBub3QgcC5yZWx0byhjdXRkaXIyKQorCisKK2RlZiBnZXRfcmVh
bF9mdW5jKG9iaik6CisgICAgIiIiIGdldHMgdGhlIHJlYWwgZnVuY3Rpb24gb2JqZWN0IG9mIHRo
ZSAocG9zc2libHkpIHdyYXBwZWQgb2JqZWN0IGJ5CisgICAgZnVuY3Rvb2xzLndyYXBzIG9yIGZ1
bmN0b29scy5wYXJ0aWFsLgorICAgICIiIgorICAgIHdoaWxlIGhhc2F0dHIob2JqLCAiX193cmFw
cGVkX18iKToKKyAgICAgICAgb2JqID0gb2JqLl9fd3JhcHBlZF9fCisgICAgaWYgaXNpbnN0YW5j
ZShvYmosIGZ1bmN0b29scy5wYXJ0aWFsKToKKyAgICAgICAgb2JqID0gb2JqLmZ1bmMKKyAgICBy
ZXR1cm4gb2JqCisKK2RlZiBnZXRmc2xpbmVubyhvYmopOgorICAgICMgeHh4IGxldCBkZWNvcmF0
b3JzIGV0YyBzcGVjaWZ5IGEgc2FuZSBvcmRlcmluZworICAgIG9iaiA9IGdldF9yZWFsX2Z1bmMo
b2JqKQorICAgIGlmIGhhc2F0dHIob2JqLCAncGxhY2VfYXMnKToKKyAgICAgICAgb2JqID0gb2Jq
LnBsYWNlX2FzCisgICAgZnNsaW5lbm8gPSBfcHl0ZXN0Ll9jb2RlLmdldGZzbGluZW5vKG9iaikK
KyAgICBhc3NlcnQgaXNpbnN0YW5jZShmc2xpbmVub1sxXSwgaW50KSwgb2JqCisgICAgcmV0dXJu
IGZzbGluZW5vCisKK2RlZiBnZXRpbWZ1bmMoZnVuYyk6CisgICAgdHJ5OgorICAgICAgICByZXR1
cm4gZnVuYy5fX2Z1bmNfXworICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgdHJ5
OgorICAgICAgICAgICAgcmV0dXJuIGZ1bmMuaW1fZnVuYworICAgICAgICBleGNlcHQgQXR0cmli
dXRlRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gZnVuYworCitkZWYgc2FmZV9nZXRhdHRyKG9i
amVjdCwgbmFtZSwgZGVmYXVsdCk6CisgICAgIiIiIExpa2UgZ2V0YXR0ciBidXQgcmV0dXJuIGRl
ZmF1bHQgdXBvbiBhbnkgRXhjZXB0aW9uLgorCisgICAgQXR0cmlidXRlIGFjY2VzcyBjYW4gcG90
ZW50aWFsbHkgZmFpbCBmb3IgJ2V2aWwnIFB5dGhvbiBvYmplY3RzLgorICAgIFNlZSBpc3N1ZTIx
NAorICAgICIiIgorICAgIHRyeToKKyAgICAgICAgcmV0dXJuIGdldGF0dHIob2JqZWN0LCBuYW1l
LCBkZWZhdWx0KQorICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgIHJldHVybiBkZWZhdWx0
CisKKworY2xhc3MgRml4dHVyZUZ1bmN0aW9uTWFya2VyOgorICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBzY29wZSwgcGFyYW1zLAorICAgICAgICAgICAgICAgICBhdXRvdXNlPUZhbHNlLCB5aWVsZGN0
eD1GYWxzZSwgaWRzPU5vbmUpOgorICAgICAgICBzZWxmLnNjb3BlID0gc2NvcGUKKyAgICAgICAg
c2VsZi5wYXJhbXMgPSBwYXJhbXMKKyAgICAgICAgc2VsZi5hdXRvdXNlID0gYXV0b3VzZQorICAg
ICAgICBzZWxmLnlpZWxkY3R4ID0geWllbGRjdHgKKyAgICAgICAgc2VsZi5pZHMgPSBpZHMKKwor
ICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBmdW5jdGlvbik6CisgICAgICAgIGlmIGlzY2xhc3MoZnVu
Y3Rpb24pOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICAg
ICAgImNsYXNzIGZpeHR1cmVzIG5vdCBzdXBwb3J0ZWQgKG1heSBiZSBpbiB0aGUgZnV0dXJlKSIp
CisgICAgICAgIGZ1bmN0aW9uLl9weXRlc3RmaXh0dXJlZnVuY3Rpb24gPSBzZWxmCisgICAgICAg
IHJldHVybiBmdW5jdGlvbgorCisKK2RlZiBmaXh0dXJlKHNjb3BlPSJmdW5jdGlvbiIsIHBhcmFt
cz1Ob25lLCBhdXRvdXNlPUZhbHNlLCBpZHM9Tm9uZSk6CisgICAgIiIiIChyZXR1cm4gYSkgZGVj
b3JhdG9yIHRvIG1hcmsgYSBmaXh0dXJlIGZhY3RvcnkgZnVuY3Rpb24uCisKKyAgICBUaGlzIGRl
Y29yYXRvciBjYW4gYmUgdXNlZCAod2l0aCBvciBvciB3aXRob3V0IHBhcmFtZXRlcnMpIHRvIGRl
ZmluZQorICAgIGEgZml4dHVyZSBmdW5jdGlvbi4gIFRoZSBuYW1lIG9mIHRoZSBmaXh0dXJlIGZ1
bmN0aW9uIGNhbiBsYXRlciBiZQorICAgIHJlZmVyZW5jZWQgdG8gY2F1c2UgaXRzIGludm9jYXRp
b24gYWhlYWQgb2YgcnVubmluZyB0ZXN0czogdGVzdAorICAgIG1vZHVsZXMgb3IgY2xhc3NlcyBj
YW4gdXNlIHRoZSBweXRlc3QubWFyay51c2VmaXh0dXJlcyhmaXh0dXJlbmFtZSkKKyAgICBtYXJr
ZXIuICBUZXN0IGZ1bmN0aW9ucyBjYW4gZGlyZWN0bHkgdXNlIGZpeHR1cmUgbmFtZXMgYXMgaW5w
dXQKKyAgICBhcmd1bWVudHMgaW4gd2hpY2ggY2FzZSB0aGUgZml4dHVyZSBpbnN0YW5jZSByZXR1
cm5lZCBmcm9tIHRoZSBmaXh0dXJlCisgICAgZnVuY3Rpb24gd2lsbCBiZSBpbmplY3RlZC4KKwor
ICAgIDphcmcgc2NvcGU6IHRoZSBzY29wZSBmb3Igd2hpY2ggdGhpcyBmaXh0dXJlIGlzIHNoYXJl
ZCwgb25lIG9mCisgICAgICAgICAgICAgICAgImZ1bmN0aW9uIiAoZGVmYXVsdCksICJjbGFzcyIs
ICJtb2R1bGUiLCAic2Vzc2lvbiIuCisKKyAgICA6YXJnIHBhcmFtczogYW4gb3B0aW9uYWwgbGlz
dCBvZiBwYXJhbWV0ZXJzIHdoaWNoIHdpbGwgY2F1c2UgbXVsdGlwbGUKKyAgICAgICAgICAgICAg
ICBpbnZvY2F0aW9ucyBvZiB0aGUgZml4dHVyZSBmdW5jdGlvbiBhbmQgYWxsIG9mIHRoZSB0ZXN0
cworICAgICAgICAgICAgICAgIHVzaW5nIGl0LgorCisgICAgOmFyZyBhdXRvdXNlOiBpZiBUcnVl
LCB0aGUgZml4dHVyZSBmdW5jIGlzIGFjdGl2YXRlZCBmb3IgYWxsIHRlc3RzIHRoYXQKKyAgICAg
ICAgICAgICAgICBjYW4gc2VlIGl0LiAgSWYgRmFsc2UgKHRoZSBkZWZhdWx0KSB0aGVuIGFuIGV4
cGxpY2l0CisgICAgICAgICAgICAgICAgcmVmZXJlbmNlIGlzIG5lZWRlZCB0byBhY3RpdmF0ZSB0
aGUgZml4dHVyZS4KKworICAgIDphcmcgaWRzOiBsaXN0IG9mIHN0cmluZyBpZHMgZWFjaCBjb3Jy
ZXNwb25kaW5nIHRvIHRoZSBwYXJhbXMKKyAgICAgICBzbyB0aGF0IHRoZXkgYXJlIHBhcnQgb2Yg
dGhlIHRlc3QgaWQuIElmIG5vIGlkcyBhcmUgcHJvdmlkZWQKKyAgICAgICB0aGV5IHdpbGwgYmUg
Z2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgZnJvbSB0aGUgcGFyYW1zLgorCisgICAgIiIiCisgICAg
aWYgY2FsbGFibGUoc2NvcGUpIGFuZCBwYXJhbXMgaXMgTm9uZSBhbmQgYXV0b3VzZSA9PSBGYWxz
ZToKKyAgICAgICAgIyBkaXJlY3QgZGVjb3JhdGlvbgorICAgICAgICByZXR1cm4gRml4dHVyZUZ1
bmN0aW9uTWFya2VyKAorICAgICAgICAgICAgICAgICJmdW5jdGlvbiIsIHBhcmFtcywgYXV0b3Vz
ZSkoc2NvcGUpCisgICAgaWYgcGFyYW1zIGlzIG5vdCBOb25lIGFuZCBub3QgaXNpbnN0YW5jZShw
YXJhbXMsIChsaXN0LCB0dXBsZSkpOgorICAgICAgICBwYXJhbXMgPSBsaXN0KHBhcmFtcykKKyAg
ICByZXR1cm4gRml4dHVyZUZ1bmN0aW9uTWFya2VyKHNjb3BlLCBwYXJhbXMsIGF1dG91c2UsIGlk
cz1pZHMpCisKK2RlZiB5aWVsZF9maXh0dXJlKHNjb3BlPSJmdW5jdGlvbiIsIHBhcmFtcz1Ob25l
LCBhdXRvdXNlPUZhbHNlLCBpZHM9Tm9uZSk6CisgICAgIiIiIChyZXR1cm4gYSkgZGVjb3JhdG9y
IHRvIG1hcmsgYSB5aWVsZC1maXh0dXJlIGZhY3RvcnkgZnVuY3Rpb24KKyAgICAoRVhQRVJJTUVO
VEFMKS4KKworICAgIFRoaXMgdGFrZXMgdGhlIHNhbWUgYXJndW1lbnRzIGFzIDpweTpmdW5jOmBw
eXRlc3QuZml4dHVyZWAgYnV0CisgICAgZXhwZWN0cyBhIGZpeHR1cmUgZnVuY3Rpb24gdG8gdXNl
IGEgYGB5aWVsZGBgIGluc3RlYWQgb2YgYSBgYHJldHVybmBgCisgICAgc3RhdGVtZW50IHRvIHBy
b3ZpZGUgYSBmaXh0dXJlLiAgU2VlCisgICAgaHR0cDovL3B5dGVzdC5vcmcvZW4vbGF0ZXN0L3lp
ZWxkZml4dHVyZS5odG1sIGZvciBtb3JlIGluZm8uCisgICAgIiIiCisgICAgaWYgY2FsbGFibGUo
c2NvcGUpIGFuZCBwYXJhbXMgaXMgTm9uZSBhbmQgYXV0b3VzZSA9PSBGYWxzZToKKyAgICAgICAg
IyBkaXJlY3QgZGVjb3JhdGlvbgorICAgICAgICByZXR1cm4gRml4dHVyZUZ1bmN0aW9uTWFya2Vy
KAorICAgICAgICAgICAgICAgICJmdW5jdGlvbiIsIHBhcmFtcywgYXV0b3VzZSwgeWllbGRjdHg9
VHJ1ZSkoc2NvcGUpCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIEZpeHR1cmVGdW5jdGlvbk1h
cmtlcihzY29wZSwgcGFyYW1zLCBhdXRvdXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHlpZWxkY3R4PVRydWUsIGlkcz1pZHMpCisKK2RlZmF1bHRmdW5jYXJncHJlZml4
bWFya2VyID0gZml4dHVyZSgpCisKK2RlZiBweW9ial9wcm9wZXJ0eShuYW1lKToKKyAgICBkZWYg
Z2V0KHNlbGYpOgorICAgICAgICBub2RlID0gc2VsZi5nZXRwYXJlbnQoZ2V0YXR0cihweXRlc3Qs
IG5hbWUpKQorICAgICAgICBpZiBub2RlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJu
IG5vZGUub2JqCisgICAgZG9jID0gInB5dGhvbiAlcyBvYmplY3QgdGhpcyBub2RlIHdhcyBjb2xs
ZWN0ZWQgZnJvbSAoY2FuIGJlIE5vbmUpLiIgJSAoCisgICAgICAgICAgbmFtZS5sb3dlcigpLCkK
KyAgICByZXR1cm4gcHJvcGVydHkoZ2V0LCBOb25lLCBOb25lLCBkb2MpCisKKworZGVmIHB5dGVz
dF9hZGRvcHRpb24ocGFyc2VyKToKKyAgICBncm91cCA9IHBhcnNlci5nZXRncm91cCgiZ2VuZXJh
bCIpCisgICAgZ3JvdXAuYWRkb3B0aW9uKCctLWZpeHR1cmVzJywgJy0tZnVuY2FyZ3MnLAorICAg
ICAgICAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0ic2hvd2ZpeHR1cmVzIiwgZGVm
YXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgIGhlbHA9InNob3cgYXZhaWxhYmxlIGZpeHR1cmVz
LCBzb3J0ZWQgYnkgcGx1Z2luIGFwcGVhcmFuY2UiKQorICAgIHBhcnNlci5hZGRpbmkoInVzZWZp
eHR1cmVzIiwgdHlwZT0iYXJncyIsIGRlZmF1bHQ9W10sCisgICAgICAgIGhlbHA9Imxpc3Qgb2Yg
ZGVmYXVsdCBmaXh0dXJlcyB0byBiZSB1c2VkIHdpdGggdGhpcyBwcm9qZWN0IikKKyAgICBwYXJz
ZXIuYWRkaW5pKCJweXRob25fZmlsZXMiLCB0eXBlPSJhcmdzIiwKKyAgICAgICAgZGVmYXVsdD1b
J3Rlc3RfKi5weScsICcqX3Rlc3QucHknXSwKKyAgICAgICAgaGVscD0iZ2xvYi1zdHlsZSBmaWxl
IHBhdHRlcm5zIGZvciBQeXRob24gdGVzdCBtb2R1bGUgZGlzY292ZXJ5IikKKyAgICBwYXJzZXIu
YWRkaW5pKCJweXRob25fY2xhc3NlcyIsIHR5cGU9ImFyZ3MiLCBkZWZhdWx0PVsiVGVzdCIsXSwK
KyAgICAgICAgaGVscD0icHJlZml4ZXMgb3IgZ2xvYiBuYW1lcyBmb3IgUHl0aG9uIHRlc3QgY2xh
c3MgZGlzY292ZXJ5IikKKyAgICBwYXJzZXIuYWRkaW5pKCJweXRob25fZnVuY3Rpb25zIiwgdHlw
ZT0iYXJncyIsIGRlZmF1bHQ9WyJ0ZXN0IixdLAorICAgICAgICBoZWxwPSJwcmVmaXhlcyBvciBn
bG9iIG5hbWVzIGZvciBQeXRob24gdGVzdCBmdW5jdGlvbiBhbmQgIgorICAgICAgICAgICAgICJt
ZXRob2QgZGlzY292ZXJ5IikKKworICAgIGdyb3VwLmFkZG9wdGlvbigiLS1pbXBvcnQtbW9kZSIs
IGRlZmF1bHQ9InByZXBlbmQiLAorICAgICAgICBjaG9pY2VzPVsicHJlcGVuZCIsICJhcHBlbmQi
XSwgZGVzdD0iaW1wb3J0bW9kZSIsCisgICAgICAgIGhlbHA9InByZXBlbmQvYXBwZW5kIHRvIHN5
cy5wYXRoIHdoZW4gaW1wb3J0aW5nIHRlc3QgbW9kdWxlcywgIgorICAgICAgICAgICAgICJkZWZh
dWx0IGlzIHRvIHByZXBlbmQuIikKKworCitkZWYgcHl0ZXN0X2NtZGxpbmVfbWFpbihjb25maWcp
OgorICAgIGlmIGNvbmZpZy5vcHRpb24uc2hvd2ZpeHR1cmVzOgorICAgICAgICBzaG93Zml4dHVy
ZXMoY29uZmlnKQorICAgICAgICByZXR1cm4gMAorCisKK2RlZiBweXRlc3RfZ2VuZXJhdGVfdGVz
dHMobWV0YWZ1bmMpOgorICAgICMgdGhvc2UgYWx0ZXJuYXRpdmUgc3BlbGxpbmdzIGFyZSBjb21t
b24gLSByYWlzZSBhIHNwZWNpZmljIGVycm9yIHRvIGFsZXJ0CisgICAgIyB0aGUgdXNlcgorICAg
IGFsdF9zcGVsbGluZ3MgPSBbJ3BhcmFtZXRlcml6ZScsICdwYXJhbWV0cmlzZScsICdwYXJhbWV0
ZXJpc2UnXQorICAgIGZvciBhdHRyIGluIGFsdF9zcGVsbGluZ3M6CisgICAgICAgIGlmIGhhc2F0
dHIobWV0YWZ1bmMuZnVuY3Rpb24sIGF0dHIpOgorICAgICAgICAgICAgbXNnID0gInswfSBoYXMg
J3sxfScsIHNwZWxsaW5nIHNob3VsZCBiZSAncGFyYW1ldHJpemUnIgorICAgICAgICAgICAgcmFp
c2UgTWFya2VyRXJyb3IobXNnLmZvcm1hdChtZXRhZnVuYy5mdW5jdGlvbi5fX25hbWVfXywgYXR0
cikpCisgICAgdHJ5OgorICAgICAgICBtYXJrZXJzID0gbWV0YWZ1bmMuZnVuY3Rpb24ucGFyYW1l
dHJpemUKKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIHJldHVybgorICAgIGZv
ciBtYXJrZXIgaW4gbWFya2VyczoKKyAgICAgICAgbWV0YWZ1bmMucGFyYW1ldHJpemUoKm1hcmtl
ci5hcmdzLCAqKm1hcmtlci5rd2FyZ3MpCisKK2RlZiBweXRlc3RfY29uZmlndXJlKGNvbmZpZyk6
CisgICAgY29uZmlnLmFkZGluaXZhbHVlX2xpbmUoIm1hcmtlcnMiLAorICAgICAgICAicGFyYW1l
dHJpemUoYXJnbmFtZXMsIGFyZ3ZhbHVlcyk6IGNhbGwgYSB0ZXN0IGZ1bmN0aW9uIG11bHRpcGxl
ICIKKyAgICAgICAgInRpbWVzIHBhc3NpbmcgaW4gZGlmZmVyZW50IGFyZ3VtZW50cyBpbiB0dXJu
LiBhcmd2YWx1ZXMgZ2VuZXJhbGx5ICIKKyAgICAgICAgIm5lZWRzIHRvIGJlIGEgbGlzdCBvZiB2
YWx1ZXMgaWYgYXJnbmFtZXMgc3BlY2lmaWVzIG9ubHkgb25lIG5hbWUgIgorICAgICAgICAib3Ig
YSBsaXN0IG9mIHR1cGxlcyBvZiB2YWx1ZXMgaWYgYXJnbmFtZXMgc3BlY2lmaWVzIG11bHRpcGxl
IG5hbWVzLiAiCisgICAgICAgICJFeGFtcGxlOiBAcGFyYW1ldHJpemUoJ2FyZzEnLCBbMSwyXSkg
d291bGQgbGVhZCB0byB0d28gY2FsbHMgb2YgdGhlICIKKyAgICAgICAgImRlY29yYXRlZCB0ZXN0
IGZ1bmN0aW9uLCBvbmUgd2l0aCBhcmcxPTEgYW5kIGFub3RoZXIgd2l0aCBhcmcxPTIuIgorICAg
ICAgICAic2VlIGh0dHA6Ly9weXRlc3Qub3JnL2xhdGVzdC9wYXJhbWV0cml6ZS5odG1sIGZvciBt
b3JlIGluZm8gYW5kICIKKyAgICAgICAgImV4YW1wbGVzLiIKKyAgICApCisgICAgY29uZmlnLmFk
ZGluaXZhbHVlX2xpbmUoIm1hcmtlcnMiLAorICAgICAgICAidXNlZml4dHVyZXMoZml4dHVyZW5h
bWUxLCBmaXh0dXJlbmFtZTIsIC4uLik6IG1hcmsgdGVzdHMgYXMgbmVlZGluZyAiCisgICAgICAg
ICJhbGwgb2YgdGhlIHNwZWNpZmllZCBmaXh0dXJlcy4gc2VlIGh0dHA6Ly9weXRlc3Qub3JnL2xh
dGVzdC9maXh0dXJlLmh0bWwjdXNlZml4dHVyZXMgIgorICAgICkKKworZGVmIHB5dGVzdF9zZXNz
aW9uc3RhcnQoc2Vzc2lvbik6CisgICAgc2Vzc2lvbi5fZml4dHVyZW1hbmFnZXIgPSBGaXh0dXJl
TWFuYWdlcihzZXNzaW9uKQorCitAcHl0ZXN0Lmhvb2tpbXBsKHRyeWxhc3Q9VHJ1ZSkKK2RlZiBw
eXRlc3RfbmFtZXNwYWNlKCk6CisgICAgcmFpc2VzLkV4Y2VwdGlvbiA9IHB5dGVzdC5mYWlsLkV4
Y2VwdGlvbgorICAgIHJldHVybiB7CisgICAgICAgICdmaXh0dXJlJzogZml4dHVyZSwKKyAgICAg
ICAgJ3lpZWxkX2ZpeHR1cmUnOiB5aWVsZF9maXh0dXJlLAorICAgICAgICAncmFpc2VzJyA6IHJh
aXNlcywKKyAgICAgICAgJ2NvbGxlY3QnOiB7CisgICAgICAgICdNb2R1bGUnOiBNb2R1bGUsICdD
bGFzcyc6IENsYXNzLCAnSW5zdGFuY2UnOiBJbnN0YW5jZSwKKyAgICAgICAgJ0Z1bmN0aW9uJzog
RnVuY3Rpb24sICdHZW5lcmF0b3InOiBHZW5lcmF0b3IsCisgICAgICAgICdfZmlsbGZ1bmNhcmdz
JzogZmlsbGZpeHR1cmVzfQorICAgIH0KKworQGZpeHR1cmUoc2NvcGU9InNlc3Npb24iKQorZGVm
IHB5dGVzdGNvbmZpZyhyZXF1ZXN0KToKKyAgICAiIiIgdGhlIHB5dGVzdCBjb25maWcgb2JqZWN0
IHdpdGggYWNjZXNzIHRvIGNvbW1hbmQgbGluZSBvcHRzLiIiIgorICAgIHJldHVybiByZXF1ZXN0
LmNvbmZpZworCisKK0BweXRlc3QuaG9va2ltcGwodHJ5bGFzdD1UcnVlKQorZGVmIHB5dGVzdF9w
eWZ1bmNfY2FsbChweWZ1bmNpdGVtKToKKyAgICB0ZXN0ZnVuY3Rpb24gPSBweWZ1bmNpdGVtLm9i
agorICAgIGlmIHB5ZnVuY2l0ZW0uX2lzeWllbGRlZGZ1bmN0aW9uKCk6CisgICAgICAgIHRlc3Rm
dW5jdGlvbigqcHlmdW5jaXRlbS5fYXJncykKKyAgICBlbHNlOgorICAgICAgICBmdW5jYXJncyA9
IHB5ZnVuY2l0ZW0uZnVuY2FyZ3MKKyAgICAgICAgdGVzdGFyZ3MgPSB7fQorICAgICAgICBmb3Ig
YXJnIGluIHB5ZnVuY2l0ZW0uX2ZpeHR1cmVpbmZvLmFyZ25hbWVzOgorICAgICAgICAgICAgdGVz
dGFyZ3NbYXJnXSA9IGZ1bmNhcmdzW2FyZ10KKyAgICAgICAgdGVzdGZ1bmN0aW9uKCoqdGVzdGFy
Z3MpCisgICAgcmV0dXJuIFRydWUKKworZGVmIHB5dGVzdF9jb2xsZWN0X2ZpbGUocGF0aCwgcGFy
ZW50KToKKyAgICBleHQgPSBwYXRoLmV4dAorICAgIGlmIGV4dCA9PSAiLnB5IjoKKyAgICAgICAg
aWYgbm90IHBhcmVudC5zZXNzaW9uLmlzaW5pdHBhdGgocGF0aCk6CisgICAgICAgICAgICBmb3Ig
cGF0IGluIHBhcmVudC5jb25maWcuZ2V0aW5pKCdweXRob25fZmlsZXMnKToKKyAgICAgICAgICAg
ICAgICBpZiBwYXRoLmZubWF0Y2gocGF0KToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAg
ICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWhvb2sgPSBw
YXJlbnQuc2Vzc2lvbi5nZXRob29rcHJveHkocGF0aCkKKyAgICAgICAgcmV0dXJuIGlob29rLnB5
dGVzdF9weWNvbGxlY3RfbWFrZW1vZHVsZShwYXRoPXBhdGgsIHBhcmVudD1wYXJlbnQpCisKK2Rl
ZiBweXRlc3RfcHljb2xsZWN0X21ha2Vtb2R1bGUocGF0aCwgcGFyZW50KToKKyAgICByZXR1cm4g
TW9kdWxlKHBhdGgsIHBhcmVudCkKKworQHB5dGVzdC5ob29raW1wbChob29rd3JhcHBlcj1UcnVl
KQorZGVmIHB5dGVzdF9weWNvbGxlY3RfbWFrZWl0ZW0oY29sbGVjdG9yLCBuYW1lLCBvYmopOgor
ICAgIG91dGNvbWUgPSB5aWVsZAorICAgIHJlcyA9IG91dGNvbWUuZ2V0X3Jlc3VsdCgpCisgICAg
aWYgcmVzIGlzIG5vdCBOb25lOgorICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCisgICAgIyBu
b3RoaW5nIHdhcyBjb2xsZWN0ZWQgZWxzZXdoZXJlLCBsZXQncyBkbyBpdCBoZXJlCisgICAgaWYg
aXNjbGFzcyhvYmopOgorICAgICAgICBpZiBjb2xsZWN0b3IuaXN0ZXN0Y2xhc3Mob2JqLCBuYW1l
KToKKyAgICAgICAgICAgIENsYXNzID0gY29sbGVjdG9yLl9nZXRjdXN0b21jbGFzcygiQ2xhc3Mi
KQorICAgICAgICAgICAgb3V0Y29tZS5mb3JjZV9yZXN1bHQoQ2xhc3MobmFtZSwgcGFyZW50PWNv
bGxlY3RvcikpCisgICAgZWxpZiBjb2xsZWN0b3IuaXN0ZXN0ZnVuY3Rpb24ob2JqLCBuYW1lKToK
KyAgICAgICAgIyBtb2NrIHNlZW1zIHRvIHN0b3JlIHVuYm91bmQgbWV0aG9kcyAoaXNzdWU0NzMp
LCBub3JtYWxpemUgaXQKKyAgICAgICAgb2JqID0gZ2V0YXR0cihvYmosICJfX2Z1bmNfXyIsIG9i
aikKKyAgICAgICAgIyBXZSBuZWVkIHRvIHRyeSBhbmQgdW53cmFwIHRoZSBmdW5jdGlvbiBpZiBp
dCdzIGEgZnVuY3Rvb2xzLnBhcnRpYWwKKyAgICAgICAgIyBvciBhIGZ1bnRvb2xzLndyYXBwZWQu
CisgICAgICAgICMgV2UgbXVzbid0IGlmIGl0J3MgYmVlbiB3cmFwcGVkIHdpdGggbW9jay5wYXRj
aCAocHl0aG9uIDIgb25seSkKKyAgICAgICAgaWYgbm90IChpc2Z1bmN0aW9uKG9iaikgb3IgaXNm
dW5jdGlvbihnZXRfcmVhbF9mdW5jKG9iaikpKToKKyAgICAgICAgICAgIGNvbGxlY3Rvci53YXJu
KGNvZGU9IkMyIiwgbWVzc2FnZT0KKyAgICAgICAgICAgICAgICAiY2Fubm90IGNvbGxlY3QgJXIg
YmVjYXVzZSBpdCBpcyBub3QgYSBmdW5jdGlvbi4iCisgICAgICAgICAgICAgICAgJSBuYW1lLCAp
CisgICAgICAgIGVsaWYgZ2V0YXR0cihvYmosICJfX3Rlc3RfXyIsIFRydWUpOgorICAgICAgICAg
ICAgaWYgaXNfZ2VuZXJhdG9yKG9iaik6CisgICAgICAgICAgICAgICAgcmVzID0gR2VuZXJhdG9y
KG5hbWUsIHBhcmVudD1jb2xsZWN0b3IpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAg
ICAgIHJlcyA9IGxpc3QoY29sbGVjdG9yLl9nZW5mdW5jdGlvbnMobmFtZSwgb2JqKSkKKyAgICAg
ICAgICAgIG91dGNvbWUuZm9yY2VfcmVzdWx0KHJlcykKKworZGVmIGlzX2dlbmVyYXRvcihmdW5j
KToKKyAgICB0cnk6CisgICAgICAgIHJldHVybiBfcHl0ZXN0Ll9jb2RlLmdldHJhd2NvZGUoZnVu
YykuY29fZmxhZ3MgJiAzMiAjIGdlbmVyYXRvciBmdW5jdGlvbgorICAgIGV4Y2VwdCBBdHRyaWJ1
dGVFcnJvcjogIyBidWlsdGluIGZ1bmN0aW9ucyBoYXZlIG5vIGJ5dGVjb2RlCisgICAgICAgICMg
YXNzdW1lIHRoZW0gdG8gbm90IGJlIGdlbmVyYXRvcnMKKyAgICAgICAgcmV0dXJuIEZhbHNlCisK
K2NsYXNzIFB5b2JqQ29udGV4dChvYmplY3QpOgorICAgIG1vZHVsZSA9IHB5b2JqX3Byb3BlcnR5
KCJNb2R1bGUiKQorICAgIGNscyA9IHB5b2JqX3Byb3BlcnR5KCJDbGFzcyIpCisgICAgaW5zdGFu
Y2UgPSBweW9ial9wcm9wZXJ0eSgiSW5zdGFuY2UiKQorCitjbGFzcyBQeW9iak1peGluKFB5b2Jq
Q29udGV4dCk6CisgICAgZGVmIG9iaigpOgorICAgICAgICBkZWYgZmdldChzZWxmKToKKyAgICAg
ICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fb2JqCisgICAgICAgICAg
ICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgc2VsZi5fb2JqID0gb2Jq
ID0gc2VsZi5fZ2V0b2JqKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gb2JqCisgICAgICAgIGRl
ZiBmc2V0KHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgIHNlbGYuX29iaiA9IHZhbHVlCisgICAg
ICAgIHJldHVybiBwcm9wZXJ0eShmZ2V0LCBmc2V0LCBOb25lLCAidW5kZXJseWluZyBweXRob24g
b2JqZWN0IikKKyAgICBvYmogPSBvYmooKQorCisgICAgZGVmIF9nZXRvYmooc2VsZik6CisgICAg
ICAgIHJldHVybiBnZXRhdHRyKHNlbGYucGFyZW50Lm9iaiwgc2VsZi5uYW1lKQorCisgICAgZGVm
IGdldG1vZHBhdGgoc2VsZiwgc3RvcGF0bW9kdWxlPVRydWUsIGluY2x1ZGVtb2R1bGU9RmFsc2Up
OgorICAgICAgICAiIiIgcmV0dXJuIHB5dGhvbiBwYXRoIHJlbGF0aXZlIHRvIHRoZSBjb250YWlu
aW5nIG1vZHVsZS4gIiIiCisgICAgICAgIGNoYWluID0gc2VsZi5saXN0Y2hhaW4oKQorICAgICAg
ICBjaGFpbi5yZXZlcnNlKCkKKyAgICAgICAgcGFydHMgPSBbXQorICAgICAgICBmb3Igbm9kZSBp
biBjaGFpbjoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uobm9kZSwgSW5zdGFuY2UpOgorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBuYW1lID0gbm9kZS5uYW1lCisgICAg
ICAgICAgICBpZiBpc2luc3RhbmNlKG5vZGUsIE1vZHVsZSk6CisgICAgICAgICAgICAgICAgYXNz
ZXJ0IG5hbWUuZW5kc3dpdGgoIi5weSIpCisgICAgICAgICAgICAgICAgbmFtZSA9IG5hbWVbOi0z
XQorICAgICAgICAgICAgICAgIGlmIHN0b3BhdG1vZHVsZToKKyAgICAgICAgICAgICAgICAgICAg
aWYgaW5jbHVkZW1vZHVsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRzLmFwcGVuZChu
YW1lKQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgcGFydHMuYXBwZW5k
KG5hbWUpCisgICAgICAgIHBhcnRzLnJldmVyc2UoKQorICAgICAgICBzID0gIi4iLmpvaW4ocGFy
dHMpCisgICAgICAgIHJldHVybiBzLnJlcGxhY2UoIi5bIiwgIlsiKQorCisgICAgZGVmIF9nZXRm
c2xpbmVubyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGdldGZzbGluZW5vKHNlbGYub2JqKQorCisg
ICAgZGVmIHJlcG9ydGluZm8oc2VsZik6CisgICAgICAgICMgWFhYIGNhY2hpbmc/CisgICAgICAg
IG9iaiA9IHNlbGYub2JqCisgICAgICAgIGNvbXBhdF9jb19maXJzdGxpbmVubyA9IGdldGF0dHIo
b2JqLCAnY29tcGF0X2NvX2ZpcnN0bGluZW5vJywgTm9uZSkKKyAgICAgICAgaWYgaXNpbnN0YW5j
ZShjb21wYXRfY29fZmlyc3RsaW5lbm8sIGludCk6CisgICAgICAgICAgICAjIG5vc2UgY29tcGF0
aWJpbGl0eQorICAgICAgICAgICAgZnNwYXRoID0gc3lzLm1vZHVsZXNbb2JqLl9fbW9kdWxlX19d
Ll9fZmlsZV9fCisgICAgICAgICAgICBpZiBmc3BhdGguZW5kc3dpdGgoIi5weWMiKToKKyAgICAg
ICAgICAgICAgICBmc3BhdGggPSBmc3BhdGhbOi0xXQorICAgICAgICAgICAgbGluZW5vID0gY29t
cGF0X2NvX2ZpcnN0bGluZW5vCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmc3BhdGgsIGxp
bmVubyA9IGdldGZzbGluZW5vKG9iaikKKyAgICAgICAgbW9kcGF0aCA9IHNlbGYuZ2V0bW9kcGF0
aCgpCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGxpbmVubywgaW50KQorICAgICAgICByZXR1
cm4gZnNwYXRoLCBsaW5lbm8sIG1vZHBhdGgKKworY2xhc3MgUHlDb2xsZWN0b3IoUHlvYmpNaXhp
biwgcHl0ZXN0LkNvbGxlY3Rvcik6CisKKyAgICBkZWYgZnVuY25hbWVmaWx0ZXIoc2VsZiwgbmFt
ZSk6CisgICAgICAgIHJldHVybiBzZWxmLl9tYXRjaGVzX3ByZWZpeF9vcl9nbG9iX29wdGlvbign
cHl0aG9uX2Z1bmN0aW9ucycsIG5hbWUpCisKKyAgICBkZWYgaXNub3NldGVzdChzZWxmLCBvYmop
OgorICAgICAgICAiIiIgTG9vayBmb3IgdGhlIF9fdGVzdF9fIGF0dHJpYnV0ZSwgd2hpY2ggaXMg
YXBwbGllZCBieSB0aGUKKyAgICAgICAgQG5vc2UudG9vbHMuaXN0ZXN0IGRlY29yYXRvcgorICAg
ICAgICAiIiIKKyAgICAgICAgIyBXZSBleHBsaWNpdGx5IGNoZWNrIGZvciAiaXMgVHJ1ZSIgaGVy
ZSB0byBub3QgbWlzdGFrZW5seSB0cmVhdAorICAgICAgICAjIGNsYXNzZXMgd2l0aCBhIGN1c3Rv
bSBfX2dldGF0dHJfXyByZXR1cm5pbmcgc29tZXRoaW5nIHRydXRoeSAobGlrZSBhCisgICAgICAg
ICMgZnVuY3Rpb24pIGFzIHRlc3QgY2xhc3Nlcy4KKyAgICAgICAgcmV0dXJuIHNhZmVfZ2V0YXR0
cihvYmosICdfX3Rlc3RfXycsIEZhbHNlKSBpcyBUcnVlCisKKyAgICBkZWYgY2xhc3NuYW1lZmls
dGVyKHNlbGYsIG5hbWUpOgorICAgICAgICByZXR1cm4gc2VsZi5fbWF0Y2hlc19wcmVmaXhfb3Jf
Z2xvYl9vcHRpb24oJ3B5dGhvbl9jbGFzc2VzJywgbmFtZSkKKworICAgIGRlZiBpc3Rlc3RmdW5j
dGlvbihzZWxmLCBvYmosIG5hbWUpOgorICAgICAgICByZXR1cm4gKAorICAgICAgICAgICAgKHNl
bGYuZnVuY25hbWVmaWx0ZXIobmFtZSkgb3Igc2VsZi5pc25vc2V0ZXN0KG9iaikpIGFuZAorICAg
ICAgICAgICAgc2FmZV9nZXRhdHRyKG9iaiwgIl9fY2FsbF9fIiwgRmFsc2UpIGFuZCBnZXRmaXh0
dXJlbWFya2VyKG9iaikgaXMgTm9uZQorICAgICAgICApCisKKyAgICBkZWYgaXN0ZXN0Y2xhc3Mo
c2VsZiwgb2JqLCBuYW1lKToKKyAgICAgICAgcmV0dXJuIHNlbGYuY2xhc3NuYW1lZmlsdGVyKG5h
bWUpIG9yIHNlbGYuaXNub3NldGVzdChvYmopCisKKyAgICBkZWYgX21hdGNoZXNfcHJlZml4X29y
X2dsb2Jfb3B0aW9uKHNlbGYsIG9wdGlvbl9uYW1lLCBuYW1lKToKKyAgICAgICAgIiIiCisgICAg
ICAgIGNoZWNrcyBpZiB0aGUgZ2l2ZW4gbmFtZSBtYXRjaGVzIHRoZSBwcmVmaXggb3IgZ2xvYi1w
YXR0ZXJuIGRlZmluZWQKKyAgICAgICAgaW4gaW5pIGNvbmZpZ3VyYXRpb24uCisgICAgICAgICIi
IgorICAgICAgICBmb3Igb3B0aW9uIGluIHNlbGYuY29uZmlnLmdldGluaShvcHRpb25fbmFtZSk6
CisgICAgICAgICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgob3B0aW9uKToKKyAgICAgICAgICAgICAg
ICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgIyBjaGVjayB0aGF0IG5hbWUgbG9va3MgbGlrZSBh
IGdsb2Itc3RyaW5nIGJlZm9yZSBjYWxsaW5nIGZubWF0Y2gKKyAgICAgICAgICAgICMgYmVjYXVz
ZSB0aGlzIGlzIGNhbGxlZCBmb3IgZXZlcnkgbmFtZSBpbiBlYWNoIGNvbGxlY3RlZCBtb2R1bGUs
CisgICAgICAgICAgICAjIGFuZCBmbm1hdGNoIGlzIHNvbWV3aGF0IGV4cGVuc2l2ZSB0byBjYWxs
CisgICAgICAgICAgICBlbGlmICgnKicgaW4gb3B0aW9uIG9yICc/JyBpbiBvcHRpb24gb3IgJ1sn
IGluIG9wdGlvbikgYW5kIFwKKyAgICAgICAgICAgICAgICAgICAgZm5tYXRjaC5mbm1hdGNoKG5h
bWUsIG9wdGlvbik6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJu
IEZhbHNlCisKKyAgICBkZWYgY29sbGVjdChzZWxmKToKKyAgICAgICAgaWYgbm90IGdldGF0dHIo
c2VsZi5vYmosICJfX3Rlc3RfXyIsIFRydWUpOgorICAgICAgICAgICAgcmV0dXJuIFtdCisKKyAg
ICAgICAgIyBOQi4gd2UgYXZvaWQgcmFuZG9tIGdldGF0dHJzIGFuZCBwZWVrIGluIHRoZSBfX2Rp
Y3RfXyBpbnN0ZWFkCisgICAgICAgICMgKFhYWCBvcmlnaW5hbGx5IGludHJvZHVjZWQgZnJvbSBh
IFB5UHkgbmVlZCwgc3RpbGwgdHJ1ZT8pCisgICAgICAgIGRpY3RzID0gW2dldGF0dHIoc2VsZi5v
YmosICdfX2RpY3RfXycsIHt9KV0KKyAgICAgICAgZm9yIGJhc2VjbHMgaW4gaW5zcGVjdC5nZXRt
cm8oc2VsZi5vYmouX19jbGFzc19fKToKKyAgICAgICAgICAgIGRpY3RzLmFwcGVuZChiYXNlY2xz
Ll9fZGljdF9fKQorICAgICAgICBzZWVuID0ge30KKyAgICAgICAgbCA9IFtdCisgICAgICAgIGZv
ciBkaWMgaW4gZGljdHM6CisgICAgICAgICAgICBmb3IgbmFtZSwgb2JqIGluIGxpc3QoZGljLml0
ZW1zKCkpOgorICAgICAgICAgICAgICAgIGlmIG5hbWUgaW4gc2VlbjoKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBzZWVuW25hbWVdID0gVHJ1ZQorICAgICAg
ICAgICAgICAgIHJlcyA9IHNlbGYubWFrZWl0ZW0obmFtZSwgb2JqKQorICAgICAgICAgICAgICAg
IGlmIHJlcyBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAg
ICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHJlcywgbGlzdCk6CisgICAgICAgICAgICAgICAgICAg
IHJlcyA9IFtyZXNdCisgICAgICAgICAgICAgICAgbC5leHRlbmQocmVzKQorICAgICAgICBsLnNv
cnQoa2V5PWxhbWJkYSBpdGVtOiBpdGVtLnJlcG9ydGluZm8oKVs6Ml0pCisgICAgICAgIHJldHVy
biBsCisKKyAgICBkZWYgbWFrZWl0ZW0oc2VsZiwgbmFtZSwgb2JqKToKKyAgICAgICAgI2Fzc2Vy
dCBzZWxmLmlob29rLmZzcGF0aCA9PSBzZWxmLmZzcGF0aCwgc2VsZgorICAgICAgICByZXR1cm4g
c2VsZi5paG9vay5weXRlc3RfcHljb2xsZWN0X21ha2VpdGVtKAorICAgICAgICAgICAgY29sbGVj
dG9yPXNlbGYsIG5hbWU9bmFtZSwgb2JqPW9iaikKKworICAgIGRlZiBfZ2VuZnVuY3Rpb25zKHNl
bGYsIG5hbWUsIGZ1bmNvYmopOgorICAgICAgICBtb2R1bGUgPSBzZWxmLmdldHBhcmVudChNb2R1
bGUpLm9iagorICAgICAgICBjbHNjb2wgPSBzZWxmLmdldHBhcmVudChDbGFzcykKKyAgICAgICAg
Y2xzID0gY2xzY29sIGFuZCBjbHNjb2wub2JqIG9yIE5vbmUKKyAgICAgICAgdHJhbnNmZXJfbWFy
a2VycyhmdW5jb2JqLCBjbHMsIG1vZHVsZSkKKyAgICAgICAgZm0gPSBzZWxmLnNlc3Npb24uX2Zp
eHR1cmVtYW5hZ2VyCisgICAgICAgIGZpeHR1cmVpbmZvID0gZm0uZ2V0Zml4dHVyZWluZm8oc2Vs
ZiwgZnVuY29iaiwgY2xzKQorICAgICAgICBtZXRhZnVuYyA9IE1ldGFmdW5jKGZ1bmNvYmosIGZp
eHR1cmVpbmZvLCBzZWxmLmNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHM9
Y2xzLCBtb2R1bGU9bW9kdWxlKQorICAgICAgICBtZXRob2RzID0gW10KKyAgICAgICAgaWYgaGFz
YXR0cihtb2R1bGUsICJweXRlc3RfZ2VuZXJhdGVfdGVzdHMiKToKKyAgICAgICAgICAgIG1ldGhv
ZHMuYXBwZW5kKG1vZHVsZS5weXRlc3RfZ2VuZXJhdGVfdGVzdHMpCisgICAgICAgIGlmIGhhc2F0
dHIoY2xzLCAicHl0ZXN0X2dlbmVyYXRlX3Rlc3RzIik6CisgICAgICAgICAgICBtZXRob2RzLmFw
cGVuZChjbHMoKS5weXRlc3RfZ2VuZXJhdGVfdGVzdHMpCisgICAgICAgIGlmIG1ldGhvZHM6Cisg
ICAgICAgICAgICBzZWxmLmlob29rLnB5dGVzdF9nZW5lcmF0ZV90ZXN0cy5jYWxsX2V4dHJhKG1l
dGhvZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRpY3QobWV0YWZ1bmM9bWV0YWZ1bmMpKQorICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgc2VsZi5paG9vay5weXRlc3RfZ2VuZXJhdGVfdGVzdHMobWV0YWZ1bmM9bWV0YWZ1bmMpCisK
KyAgICAgICAgRnVuY3Rpb24gPSBzZWxmLl9nZXRjdXN0b21jbGFzcygiRnVuY3Rpb24iKQorICAg
ICAgICBpZiBub3QgbWV0YWZ1bmMuX2NhbGxzOgorICAgICAgICAgICAgeWllbGQgRnVuY3Rpb24o
bmFtZSwgcGFyZW50PXNlbGYsIGZpeHR1cmVpbmZvPWZpeHR1cmVpbmZvKQorICAgICAgICBlbHNl
OgorICAgICAgICAgICAgIyBhZGQgZnVuY2FyZ3MoKSBhcyBmaXh0dXJlZGVmcyB0byBmaXh0dXJl
aW5mby5hcmcyZml4dHVyZWRlZnMKKyAgICAgICAgICAgIGFkZF9mdW5jYXJnX3BzZXVkb19maXh0
dXJlX2RlZihzZWxmLCBtZXRhZnVuYywgZm0pCisKKyAgICAgICAgICAgIGZvciBjYWxsc3BlYyBp
biBtZXRhZnVuYy5fY2FsbHM6CisgICAgICAgICAgICAgICAgc3VibmFtZSA9ICIlc1slc10iICUo
bmFtZSwgY2FsbHNwZWMuaWQpCisgICAgICAgICAgICAgICAgeWllbGQgRnVuY3Rpb24obmFtZT1z
dWJuYW1lLCBwYXJlbnQ9c2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxs
c3BlYz1jYWxsc3BlYywgY2FsbG9iaj1mdW5jb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZpeHR1cmVpbmZvPWZpeHR1cmVpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGtleXdvcmRzPXtjYWxsc3BlYy5pZDpUcnVlfSkKKworZGVmIGFkZF9mdW5jYXJnX3Bz
ZXVkb19maXh0dXJlX2RlZihjb2xsZWN0b3IsIG1ldGFmdW5jLCBmaXh0dXJlbWFuYWdlcik6Cisg
ICAgIyB0aGlzIGZ1bmN0aW9uIHdpbGwgdHJhbnNmb3JtIGFsbCBjb2xsZWN0ZWQgY2FsbHMgdG8g
YSBmdW5jdGlvbnMKKyAgICAjIGlmIHRoZXkgdXNlIGRpcmVjdCBmdW5jYXJncyAoaS5lLiBkaXJl
Y3QgcGFyYW1ldHJpemF0aW9uKQorICAgICMgYmVjYXVzZSB3ZSB3YW50IGxhdGVyIHRlc3QgZXhl
Y3V0aW9uIHRvIGJlIGFibGUgdG8gcmVseSBvbgorICAgICMgYW4gZXhpc3RpbmcgRml4dHVyZURl
ZiBzdHJ1Y3R1cmUgZm9yIGFsbCBhcmd1bWVudHMuCisgICAgIyBYWFggd2UgY2FuIHByb2JhYmx5
IGF2b2lkIHRoaXMgYWxnb3JpdGhtICBpZiB3ZSBtb2RpZnkgQ2FsbFNwZWMyCisgICAgIyB0byBk
aXJlY3RseSBjYXJlIGZvciBjcmVhdGluZyB0aGUgZml4dHVyZWRlZnMgd2l0aGluIGl0cyBtZXRo
b2RzLgorICAgIGlmIG5vdCBtZXRhZnVuYy5fY2FsbHNbMF0uZnVuY2FyZ3M6CisgICAgICAgIHJl
dHVybiAjIHRoaXMgZnVuY3Rpb24gY2FsbCBkb2VzIG5vdCBoYXZlIGRpcmVjdCBwYXJhbWV0cml6
YXRpb24KKyAgICAjIGNvbGxlY3QgZnVuY2FyZ3Mgb2YgYWxsIGNhbGxzcGVjcyBpbnRvIGEgbGlz
dCBvZiB2YWx1ZXMKKyAgICBhcmcycGFyYW1zID0ge30KKyAgICBhcmcyc2NvcGUgPSB7fQorICAg
IGZvciBjYWxsc3BlYyBpbiBtZXRhZnVuYy5fY2FsbHM6CisgICAgICAgIGZvciBhcmduYW1lLCBh
cmd2YWx1ZSBpbiBjYWxsc3BlYy5mdW5jYXJncy5pdGVtcygpOgorICAgICAgICAgICAgYXNzZXJ0
IGFyZ25hbWUgbm90IGluIGNhbGxzcGVjLnBhcmFtcworICAgICAgICAgICAgY2FsbHNwZWMucGFy
YW1zW2FyZ25hbWVdID0gYXJndmFsdWUKKyAgICAgICAgICAgIGFyZzJwYXJhbXNfbGlzdCA9IGFy
ZzJwYXJhbXMuc2V0ZGVmYXVsdChhcmduYW1lLCBbXSkKKyAgICAgICAgICAgIGNhbGxzcGVjLmlu
ZGljZXNbYXJnbmFtZV0gPSBsZW4oYXJnMnBhcmFtc19saXN0KQorICAgICAgICAgICAgYXJnMnBh
cmFtc19saXN0LmFwcGVuZChhcmd2YWx1ZSkKKyAgICAgICAgICAgIGlmIGFyZ25hbWUgbm90IGlu
IGFyZzJzY29wZToKKyAgICAgICAgICAgICAgICBzY29wZW51bSA9IGNhbGxzcGVjLl9hcmcyc2Nv
cGVudW0uZ2V0KGFyZ25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzY29wZW51bV9mdW5jdGlvbikKKyAgICAgICAgICAgICAgICBhcmcy
c2NvcGVbYXJnbmFtZV0gPSBzY29wZXNbc2NvcGVudW1dCisgICAgICAgIGNhbGxzcGVjLmZ1bmNh
cmdzLmNsZWFyKCkKKworICAgICMgcmVnaXN0ZXIgYXJ0aWZpY2lhbCBGaXh0dXJlRGVmJ3Mgc28g
dGhhdCBsYXRlciBhdCB0ZXN0IGV4ZWN1dGlvbgorICAgICMgdGltZSB3ZSBjYW4gcmVseSBvbiBh
IHByb3BlciBGaXh0dXJlRGVmIHRvIGV4aXN0IGZvciBmaXh0dXJlIHNldHVwLgorICAgIGFyZzJm
aXh0dXJlZGVmcyA9IG1ldGFmdW5jLl9hcmcyZml4dHVyZWRlZnMKKyAgICBmb3IgYXJnbmFtZSwg
dmFsdWVsaXN0IGluIGFyZzJwYXJhbXMuaXRlbXMoKToKKyAgICAgICAgIyBpZiB3ZSBoYXZlIGEg
c2NvcGUgdGhhdCBpcyBoaWdoZXIgdGhhbiBmdW5jdGlvbiB3ZSBuZWVkCisgICAgICAgICMgdG8g
bWFrZSBzdXJlIHdlIG9ubHkgZXZlciBjcmVhdGUgYW4gYWNjb3JkaW5nIGZpeHR1cmVkZWYgb24K
KyAgICAgICAgIyBhIHBlci1zY29wZSBiYXNpcy4gV2UgdGh1cyBzdG9yZSBhbmQgY2FjaGUgdGhl
IGZpeHR1cmVkZWYgb24gdGhlCisgICAgICAgICMgbm9kZSByZWxhdGVkIHRvIHRoZSBzY29wZS4K
KyAgICAgICAgc2NvcGUgPSBhcmcyc2NvcGVbYXJnbmFtZV0KKyAgICAgICAgbm9kZSA9IE5vbmUK
KyAgICAgICAgaWYgc2NvcGUgIT0gImZ1bmN0aW9uIjoKKyAgICAgICAgICAgIG5vZGUgPSBnZXRf
c2NvcGVfbm9kZShjb2xsZWN0b3IsIHNjb3BlKQorICAgICAgICAgICAgaWYgbm9kZSBpcyBOb25l
OgorICAgICAgICAgICAgICAgIGFzc2VydCBzY29wZSA9PSAiY2xhc3MiIGFuZCBpc2luc3RhbmNl
KGNvbGxlY3RvciwgTW9kdWxlKQorICAgICAgICAgICAgICAgICMgdXNlIG1vZHVsZS1sZXZlbCBj
b2xsZWN0b3IgZm9yIGNsYXNzLXNjb3BlIChmb3Igbm93KQorICAgICAgICAgICAgICAgIG5vZGUg
PSBjb2xsZWN0b3IKKyAgICAgICAgaWYgbm9kZSBhbmQgYXJnbmFtZSBpbiBub2RlLl9uYW1lMnBz
ZXVkb2ZpeHR1cmVkZWY6CisgICAgICAgICAgICBhcmcyZml4dHVyZWRlZnNbYXJnbmFtZV0gPSBb
bm9kZS5fbmFtZTJwc2V1ZG9maXh0dXJlZGVmW2FyZ25hbWVdXQorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgZml4dHVyZWRlZiA9ICBGaXh0dXJlRGVmKGZpeHR1cmVtYW5hZ2VyLCAnJywgYXJn
bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9kaXJlY3RfcGFyYW1fZml4dHVy
ZV9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnMnNjb3BlW2FyZ25hbWVdLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVsaXN0LCBGYWxzZSwgRmFsc2UpCisgICAg
ICAgICAgICBhcmcyZml4dHVyZWRlZnNbYXJnbmFtZV0gPSBbZml4dHVyZWRlZl0KKyAgICAgICAg
ICAgIGlmIG5vZGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgbm9kZS5fbmFtZTJwc2V1
ZG9maXh0dXJlZGVmW2FyZ25hbWVdID0gZml4dHVyZWRlZgorCisKK2RlZiBnZXRfZGlyZWN0X3Bh
cmFtX2ZpeHR1cmVfZnVuYyhyZXF1ZXN0KToKKyAgICByZXR1cm4gcmVxdWVzdC5wYXJhbQorCitj
bGFzcyBGdW5jRml4dHVyZUluZm86CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFyZ25hbWVzLCBu
YW1lc19jbG9zdXJlLCBuYW1lMmZpeHR1cmVkZWZzKToKKyAgICAgICAgc2VsZi5hcmduYW1lcyA9
IGFyZ25hbWVzCisgICAgICAgIHNlbGYubmFtZXNfY2xvc3VyZSA9IG5hbWVzX2Nsb3N1cmUKKyAg
ICAgICAgc2VsZi5uYW1lMmZpeHR1cmVkZWZzID0gbmFtZTJmaXh0dXJlZGVmcworCisKK2RlZiBf
bWFya2VkKGZ1bmMsIG1hcmspOgorICAgICIiIiBSZXR1cm5zIFRydWUgaWYgOmZ1bmM6IGlzIGFs
cmVhZHkgbWFya2VkIHdpdGggOm1hcms6LCBGYWxzZSBvdGhlcndpc2UuCisgICAgVGhpcyBjYW4g
aGFwcGVuIGlmIG1hcmtlciBpcyBhcHBsaWVkIHRvIGNsYXNzIGFuZCB0aGUgdGVzdCBmaWxlIGlz
CisgICAgaW52b2tlZCBtb3JlIHRoYW4gb25jZS4KKyAgICAiIiIKKyAgICB0cnk6CisgICAgICAg
IGZ1bmNfbWFyayA9IGdldGF0dHIoZnVuYywgbWFyay5uYW1lKQorICAgIGV4Y2VwdCBBdHRyaWJ1
dGVFcnJvcjoKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgcmV0dXJuIG1hcmsuYXJncyA9PSBm
dW5jX21hcmsuYXJncyBhbmQgbWFyay5rd2FyZ3MgPT0gZnVuY19tYXJrLmt3YXJncworCisKK2Rl
ZiB0cmFuc2Zlcl9tYXJrZXJzKGZ1bmNvYmosIGNscywgbW9kKToKKyAgICAjIFhYWCB0aGlzIHNo
b3VsZCByYXRoZXIgYmUgY29kZSBpbiB0aGUgbWFyayBwbHVnaW4gb3IgdGhlIG1hcmsKKyAgICAj
IHBsdWdpbiBzaG91bGQgbWVyZ2Ugd2l0aCB0aGUgcHl0aG9uIHBsdWdpbi4KKyAgICBmb3IgaG9s
ZGVyIGluIChjbHMsIG1vZCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHB5dGVzdG1hcmsg
PSBob2xkZXIucHl0ZXN0bWFyaworICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAg
ICAgICAgICBjb250aW51ZQorICAgICAgICBpZiBpc2luc3RhbmNlKHB5dGVzdG1hcmssIGxpc3Qp
OgorICAgICAgICAgICAgZm9yIG1hcmsgaW4gcHl0ZXN0bWFyazoKKyAgICAgICAgICAgICAgICBp
ZiBub3QgX21hcmtlZChmdW5jb2JqLCBtYXJrKToKKyAgICAgICAgICAgICAgICAgICAgbWFyayhm
dW5jb2JqKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgbm90IF9tYXJrZWQoZnVuY29i
aiwgcHl0ZXN0bWFyayk6CisgICAgICAgICAgICAgICAgcHl0ZXN0bWFyayhmdW5jb2JqKQorCitj
bGFzcyBNb2R1bGUocHl0ZXN0LkZpbGUsIFB5Q29sbGVjdG9yKToKKyAgICAiIiIgQ29sbGVjdG9y
IGZvciB0ZXN0IGNsYXNzZXMgYW5kIGZ1bmN0aW9ucy4gIiIiCisgICAgZGVmIF9nZXRvYmooc2Vs
Zik6CisgICAgICAgIHJldHVybiBzZWxmLl9tZW1vaXplZGNhbGwoJ19vYmonLCBzZWxmLl9pbXBv
cnR0ZXN0bW9kdWxlKQorCisgICAgZGVmIGNvbGxlY3Qoc2VsZik6CisgICAgICAgIHNlbGYuc2Vz
c2lvbi5fZml4dHVyZW1hbmFnZXIucGFyc2VmYWN0b3JpZXMoc2VsZikKKyAgICAgICAgcmV0dXJu
IHN1cGVyKE1vZHVsZSwgc2VsZikuY29sbGVjdCgpCisKKyAgICBkZWYgX2ltcG9ydHRlc3Rtb2R1
bGUoc2VsZik6CisgICAgICAgICMgd2UgYXNzdW1lIHdlIGFyZSBvbmx5IGNhbGxlZCBvbmNlIHBl
ciBtb2R1bGUKKyAgICAgICAgaW1wb3J0bW9kZSA9IHNlbGYuY29uZmlnLmdldG9wdGlvbigiLS1p
bXBvcnQtbW9kZSIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG1vZCA9IHNlbGYuZnNwYXRo
LnB5aW1wb3J0KGVuc3VyZXN5c3BhdGg9aW1wb3J0bW9kZSkKKyAgICAgICAgZXhjZXB0IFN5bnRh
eEVycm9yOgorICAgICAgICAgICAgcmFpc2Ugc2VsZi5Db2xsZWN0RXJyb3IoCisgICAgICAgICAg
ICAgICAgX3B5dGVzdC5fY29kZS5FeGNlcHRpb25JbmZvKCkuZ2V0cmVwcihzdHlsZT0ic2hvcnQi
KSkKKyAgICAgICAgZXhjZXB0IHNlbGYuZnNwYXRoLkltcG9ydE1pc21hdGNoRXJyb3I6CisgICAg
ICAgICAgICBlID0gc3lzLmV4Y19pbmZvKClbMV0KKyAgICAgICAgICAgIHJhaXNlIHNlbGYuQ29s
bGVjdEVycm9yKAorICAgICAgICAgICAgICAgICJpbXBvcnQgZmlsZSBtaXNtYXRjaDpcbiIKKyAg
ICAgICAgICAgICAgICAiaW1wb3J0ZWQgbW9kdWxlICVyIGhhcyB0aGlzIF9fZmlsZV9fIGF0dHJp
YnV0ZTpcbiIKKyAgICAgICAgICAgICAgICAiICAlc1xuIgorICAgICAgICAgICAgICAgICJ3aGlj
aCBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIHRlc3QgZmlsZSB3ZSB3YW50IHRvIGNvbGxlY3Q6XG4i
CisgICAgICAgICAgICAgICAgIiAgJXNcbiIKKyAgICAgICAgICAgICAgICAiSElOVDogcmVtb3Zl
IF9fcHljYWNoZV9fIC8gLnB5YyBmaWxlcyBhbmQvb3IgdXNlIGEgIgorICAgICAgICAgICAgICAg
ICJ1bmlxdWUgYmFzZW5hbWUgZm9yIHlvdXIgdGVzdCBmaWxlIG1vZHVsZXMiCisgICAgICAgICAg
ICAgICAgICUgZS5hcmdzCisgICAgICAgICAgICApCisgICAgICAgICNwcmludCAiaW1wb3J0ZWQg
dGVzdCBtb2R1bGUiLCBtb2QKKyAgICAgICAgc2VsZi5jb25maWcucGx1Z2lubWFuYWdlci5jb25z
aWRlcl9tb2R1bGUobW9kKQorICAgICAgICByZXR1cm4gbW9kCisKKyAgICBkZWYgc2V0dXAoc2Vs
Zik6CisgICAgICAgIHNldHVwX21vZHVsZSA9IHh1bml0c2V0dXAoc2VsZi5vYmosICJzZXRVcE1v
ZHVsZSIpCisgICAgICAgIGlmIHNldHVwX21vZHVsZSBpcyBOb25lOgorICAgICAgICAgICAgc2V0
dXBfbW9kdWxlID0geHVuaXRzZXR1cChzZWxmLm9iaiwgInNldHVwX21vZHVsZSIpCisgICAgICAg
IGlmIHNldHVwX21vZHVsZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICNYWFg6IG5vc2UgY29t
cGF0IGhhY2ssIG1vdmUgdG8gbm9zZSBwbHVnaW4KKyAgICAgICAgICAgICMgaWYgaXQgdGFrZXMg
YSBwb3NpdGlvbmFsIGFyZywgaXRzIHByb2JhYmx5IGEgcHl0ZXN0IHN0eWxlIG9uZQorICAgICAg
ICAgICAgIyBzbyB3ZSBwYXNzIHRoZSBjdXJyZW50IG1vZHVsZSBvYmplY3QKKyAgICAgICAgICAg
IGlmIF9oYXNfcG9zaXRpb25hbF9hcmcoc2V0dXBfbW9kdWxlKToKKyAgICAgICAgICAgICAgICBz
ZXR1cF9tb2R1bGUoc2VsZi5vYmopCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg
IHNldHVwX21vZHVsZSgpCisgICAgICAgIGZpbiA9IGdldGF0dHIoc2VsZi5vYmosICd0ZWFyRG93
bk1vZHVsZScsIE5vbmUpCisgICAgICAgIGlmIGZpbiBpcyBOb25lOgorICAgICAgICAgICAgZmlu
ID0gZ2V0YXR0cihzZWxmLm9iaiwgJ3RlYXJkb3duX21vZHVsZScsIE5vbmUpCisgICAgICAgIGlm
IGZpbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICNYWFg6IG5vc2UgY29tcGF0IGhhY2ssIG1v
dmUgdG8gbm9zZSBwbHVnaW4KKyAgICAgICAgICAgICMgaWYgaXQgdGFrZXMgYSBwb3NpdGlvbmFs
IGFyZywgaXQncyBwcm9iYWJseSBhIHB5dGVzdCBzdHlsZSBvbmUKKyAgICAgICAgICAgICMgc28g
d2UgcGFzcyB0aGUgY3VycmVudCBtb2R1bGUgb2JqZWN0CisgICAgICAgICAgICBpZiBfaGFzX3Bv
c2l0aW9uYWxfYXJnKGZpbik6CisgICAgICAgICAgICAgICAgZmluYWxpemVyID0gbGFtYmRhOiBm
aW4oc2VsZi5vYmopCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZpbmFsaXpl
ciA9IGZpbgorICAgICAgICAgICAgc2VsZi5hZGRmaW5hbGl6ZXIoZmluYWxpemVyKQorCisKK2Ns
YXNzIENsYXNzKFB5Q29sbGVjdG9yKToKKyAgICAiIiIgQ29sbGVjdG9yIGZvciB0ZXN0IG1ldGhv
ZHMuICIiIgorICAgIGRlZiBjb2xsZWN0KHNlbGYpOgorICAgICAgICBpZiBoYXNpbml0KHNlbGYu
b2JqKToKKyAgICAgICAgICAgIHNlbGYud2FybigiQzEiLCAiY2Fubm90IGNvbGxlY3QgdGVzdCBj
bGFzcyAlciBiZWNhdXNlIGl0IGhhcyBhICIKKyAgICAgICAgICAgICAgICAiX19pbml0X18gY29u
c3RydWN0b3IiICUgc2VsZi5vYmouX19uYW1lX18pCisgICAgICAgICAgICByZXR1cm4gW10KKyAg
ICAgICAgcmV0dXJuIFtzZWxmLl9nZXRjdXN0b21jbGFzcygiSW5zdGFuY2UiKShuYW1lPSIoKSIs
IHBhcmVudD1zZWxmKV0KKworICAgIGRlZiBzZXR1cChzZWxmKToKKyAgICAgICAgc2V0dXBfY2xh
c3MgPSB4dW5pdHNldHVwKHNlbGYub2JqLCAnc2V0dXBfY2xhc3MnKQorICAgICAgICBpZiBzZXR1
cF9jbGFzcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNldHVwX2NsYXNzID0gZ2V0YXR0cihz
ZXR1cF9jbGFzcywgJ2ltX2Z1bmMnLCBzZXR1cF9jbGFzcykKKyAgICAgICAgICAgIHNldHVwX2Ns
YXNzID0gZ2V0YXR0cihzZXR1cF9jbGFzcywgJ19fZnVuY19fJywgc2V0dXBfY2xhc3MpCisgICAg
ICAgICAgICBzZXR1cF9jbGFzcyhzZWxmLm9iaikKKworICAgICAgICBmaW5fY2xhc3MgPSBnZXRh
dHRyKHNlbGYub2JqLCAndGVhcmRvd25fY2xhc3MnLCBOb25lKQorICAgICAgICBpZiBmaW5fY2xh
c3MgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBmaW5fY2xhc3MgPSBnZXRhdHRyKGZpbl9jbGFz
cywgJ2ltX2Z1bmMnLCBmaW5fY2xhc3MpCisgICAgICAgICAgICBmaW5fY2xhc3MgPSBnZXRhdHRy
KGZpbl9jbGFzcywgJ19fZnVuY19fJywgZmluX2NsYXNzKQorICAgICAgICAgICAgc2VsZi5hZGRm
aW5hbGl6ZXIobGFtYmRhOiBmaW5fY2xhc3Moc2VsZi5vYmopKQorCitjbGFzcyBJbnN0YW5jZShQ
eUNvbGxlY3Rvcik6CisgICAgZGVmIF9nZXRvYmooc2VsZik6CisgICAgICAgIG9iaiA9IHNlbGYu
cGFyZW50Lm9iaigpCisgICAgICAgIHJldHVybiBvYmoKKworICAgIGRlZiBjb2xsZWN0KHNlbGYp
OgorICAgICAgICBzZWxmLnNlc3Npb24uX2ZpeHR1cmVtYW5hZ2VyLnBhcnNlZmFjdG9yaWVzKHNl
bGYpCisgICAgICAgIHJldHVybiBzdXBlcihJbnN0YW5jZSwgc2VsZikuY29sbGVjdCgpCisKKyAg
ICBkZWYgbmV3aW5zdGFuY2Uoc2VsZik6CisgICAgICAgIHNlbGYub2JqID0gc2VsZi5fZ2V0b2Jq
KCkKKyAgICAgICAgcmV0dXJuIHNlbGYub2JqCisKK2NsYXNzIEZ1bmN0aW9uTWl4aW4oUHlvYmpN
aXhpbik6CisgICAgIiIiIG1peGluIGZvciB0aGUgY29kZSBjb21tb24gdG8gRnVuY3Rpb24gYW5k
IEdlbmVyYXRvci4KKyAgICAiIiIKKworICAgIGRlZiBzZXR1cChzZWxmKToKKyAgICAgICAgIiIi
IHBlcmZvcm0gc2V0dXAgZm9yIHRoaXMgdGVzdCBmdW5jdGlvbi4gIiIiCisgICAgICAgIGlmIGhh
c2F0dHIoc2VsZiwgJ19wcmVzZXJ2ZWRwYXJlbnQnKToKKyAgICAgICAgICAgIG9iaiA9IHNlbGYu
X3ByZXNlcnZlZHBhcmVudAorICAgICAgICBlbGlmIGlzaW5zdGFuY2Uoc2VsZi5wYXJlbnQsIElu
c3RhbmNlKToKKyAgICAgICAgICAgIG9iaiA9IHNlbGYucGFyZW50Lm5ld2luc3RhbmNlKCkKKyAg
ICAgICAgICAgIHNlbGYub2JqID0gc2VsZi5fZ2V0b2JqKCkKKyAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgIG9iaiA9IHNlbGYucGFyZW50Lm9iagorICAgICAgICBpZiBpbnNwZWN0LmlzbWV0aG9k
KHNlbGYub2JqKToKKyAgICAgICAgICAgIHNldHVwX25hbWUgPSAnc2V0dXBfbWV0aG9kJworICAg
ICAgICAgICAgdGVhcmRvd25fbmFtZSA9ICd0ZWFyZG93bl9tZXRob2QnCisgICAgICAgIGVsc2U6
CisgICAgICAgICAgICBzZXR1cF9uYW1lID0gJ3NldHVwX2Z1bmN0aW9uJworICAgICAgICAgICAg
dGVhcmRvd25fbmFtZSA9ICd0ZWFyZG93bl9mdW5jdGlvbicKKyAgICAgICAgc2V0dXBfZnVuY19v
cl9tZXRob2QgPSB4dW5pdHNldHVwKG9iaiwgc2V0dXBfbmFtZSkKKyAgICAgICAgaWYgc2V0dXBf
ZnVuY19vcl9tZXRob2QgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZXR1cF9mdW5jX29yX21l
dGhvZChzZWxmLm9iaikKKyAgICAgICAgZmluID0gZ2V0YXR0cihvYmosIHRlYXJkb3duX25hbWUs
IE5vbmUpCisgICAgICAgIGlmIGZpbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuYWRk
ZmluYWxpemVyKGxhbWJkYTogZmluKHNlbGYub2JqKSkKKworICAgIGRlZiBfcHJ1bmV0cmFjZWJh
Y2soc2VsZiwgZXhjaW5mbyk6CisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgJ19vYmonKSBhbmQg
bm90IHNlbGYuY29uZmlnLm9wdGlvbi5mdWxsdHJhY2U6CisgICAgICAgICAgICBjb2RlID0gX3B5
dGVzdC5fY29kZS5Db2RlKGdldF9yZWFsX2Z1bmMoc2VsZi5vYmopKQorICAgICAgICAgICAgcGF0
aCwgZmlyc3RsaW5lbm8gPSBjb2RlLnBhdGgsIGNvZGUuZmlyc3RsaW5lbm8KKyAgICAgICAgICAg
IHRyYWNlYmFjayA9IGV4Y2luZm8udHJhY2ViYWNrCisgICAgICAgICAgICBudHJhY2ViYWNrID0g
dHJhY2ViYWNrLmN1dChwYXRoPXBhdGgsIGZpcnN0bGluZW5vPWZpcnN0bGluZW5vKQorICAgICAg
ICAgICAgaWYgbnRyYWNlYmFjayA9PSB0cmFjZWJhY2s6CisgICAgICAgICAgICAgICAgbnRyYWNl
YmFjayA9IG50cmFjZWJhY2suY3V0KHBhdGg9cGF0aCkKKyAgICAgICAgICAgICAgICBpZiBudHJh
Y2ViYWNrID09IHRyYWNlYmFjazoKKyAgICAgICAgICAgICAgICAgICAgI250cmFjZWJhY2sgPSBu
dHJhY2ViYWNrLmN1dChleGNsdWRlcGF0aD1jdXRkaXIyKQorICAgICAgICAgICAgICAgICAgICBu
dHJhY2ViYWNrID0gbnRyYWNlYmFjay5maWx0ZXIoZmlsdGVyX3RyYWNlYmFjaykKKyAgICAgICAg
ICAgICAgICAgICAgaWYgbm90IG50cmFjZWJhY2s6CisgICAgICAgICAgICAgICAgICAgICAgICBu
dHJhY2ViYWNrID0gdHJhY2ViYWNrCisKKyAgICAgICAgICAgIGV4Y2luZm8udHJhY2ViYWNrID0g
bnRyYWNlYmFjay5maWx0ZXIoKQorICAgICAgICAgICAgIyBpc3N1ZTM2NDogbWFyayBhbGwgYnV0
IGZpcnN0IGFuZCBsYXN0IGZyYW1lcyB0bworICAgICAgICAgICAgIyBvbmx5IHNob3cgYSBzaW5n
bGUtbGluZSBtZXNzYWdlIGZvciBlYWNoIGZyYW1lCisgICAgICAgICAgICBpZiBzZWxmLmNvbmZp
Zy5vcHRpb24udGJzdHlsZSA9PSAiYXV0byI6CisgICAgICAgICAgICAgICAgaWYgbGVuKGV4Y2lu
Zm8udHJhY2ViYWNrKSA+IDI6CisgICAgICAgICAgICAgICAgICAgIGZvciBlbnRyeSBpbiBleGNp
bmZvLnRyYWNlYmFja1sxOi0xXToKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LnNldF9y
ZXByX3N0eWxlKCdzaG9ydCcpCisKKyAgICBkZWYgX3JlcHJfZmFpbHVyZV9weShzZWxmLCBleGNp
bmZvLCBzdHlsZT0ibG9uZyIpOgorICAgICAgICBpZiBleGNpbmZvLmVycmlzaW5zdGFuY2UocHl0
ZXN0LmZhaWwuRXhjZXB0aW9uKToKKyAgICAgICAgICAgIGlmIG5vdCBleGNpbmZvLnZhbHVlLnB5
dHJhY2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIHB5Ll9idWlsdGluLl90b3RleHQoZXhjaW5m
by52YWx1ZSkKKyAgICAgICAgcmV0dXJuIHN1cGVyKEZ1bmN0aW9uTWl4aW4sIHNlbGYpLl9yZXBy
X2ZhaWx1cmVfcHkoZXhjaW5mbywKKyAgICAgICAgICAgIHN0eWxlPXN0eWxlKQorCisgICAgZGVm
IHJlcHJfZmFpbHVyZShzZWxmLCBleGNpbmZvLCBvdXRlcnI9Tm9uZSk6CisgICAgICAgIGFzc2Vy
dCBvdXRlcnIgaXMgTm9uZSwgIlhYWCBvdXRlcnIgdXNhZ2UgaXMgZGVwcmVjYXRlZCIKKyAgICAg
ICAgc3R5bGUgPSBzZWxmLmNvbmZpZy5vcHRpb24udGJzdHlsZQorICAgICAgICBpZiBzdHlsZSA9
PSAiYXV0byI6CisgICAgICAgICAgICBzdHlsZSA9ICJsb25nIgorICAgICAgICByZXR1cm4gc2Vs
Zi5fcmVwcl9mYWlsdXJlX3B5KGV4Y2luZm8sIHN0eWxlPXN0eWxlKQorCisKK2NsYXNzIEdlbmVy
YXRvcihGdW5jdGlvbk1peGluLCBQeUNvbGxlY3Rvcik6CisgICAgZGVmIGNvbGxlY3Qoc2VsZik6
CisgICAgICAgICMgdGVzdCBnZW5lcmF0b3JzIGFyZSBzZWVuIGFzIGNvbGxlY3RvcnMgYnV0IHRo
ZXkgYWxzbworICAgICAgICAjIGludm9rZSBzZXR1cC90ZWFyZG93biBvbiBwb3B1bGFyIHJlcXVl
c3QKKyAgICAgICAgIyAoaW5kdWNlZCBieSB0aGUgY29tbW9uICJ0ZXN0XyoiIG5hbWluZyBzaGFy
ZWQgd2l0aCBub3JtYWwgdGVzdHMpCisgICAgICAgIHNlbGYuc2Vzc2lvbi5fc2V0dXBzdGF0ZS5w
cmVwYXJlKHNlbGYpCisgICAgICAgICMgc2VlIEZ1bmN0aW9uTWl4aW4uc2V0dXAgYW5kIHRlc3Rf
c2V0dXBzdGF0ZV9pc19wcmVzZXJ2ZWRfMTM0CisgICAgICAgIHNlbGYuX3ByZXNlcnZlZHBhcmVu
dCA9IHNlbGYucGFyZW50Lm9iagorICAgICAgICBsID0gW10KKyAgICAgICAgc2VlbiA9IHt9Cisg
ICAgICAgIGZvciBpLCB4IGluIGVudW1lcmF0ZShzZWxmLm9iaigpKToKKyAgICAgICAgICAgIG5h
bWUsIGNhbGwsIGFyZ3MgPSBzZWxmLmdldGNhbGxhcmdzKHgpCisgICAgICAgICAgICBpZiBub3Qg
Y2FsbGFibGUoY2FsbCk6CisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCIlciB5aWVs
ZGVkIG5vbiBjYWxsYWJsZSB0ZXN0ICVyIiAlKHNlbGYub2JqLCBjYWxsLCkpCisgICAgICAgICAg
ICBpZiBuYW1lIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgbmFtZSA9ICJbJWRdIiAlIGkKKyAg
ICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbmFtZSA9ICJbJyVzJ10iICUgbmFtZQor
ICAgICAgICAgICAgaWYgbmFtZSBpbiBzZWVuOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVl
RXJyb3IoIiVyIGdlbmVyYXRlZCB0ZXN0cyB3aXRoIG5vbi11bmlxdWUgbmFtZSAlciIgJShzZWxm
LCBuYW1lKSkKKyAgICAgICAgICAgIHNlZW5bbmFtZV0gPSBUcnVlCisgICAgICAgICAgICBsLmFw
cGVuZChzZWxmLkZ1bmN0aW9uKG5hbWUsIHNlbGYsIGFyZ3M9YXJncywgY2FsbG9iaj1jYWxsKSkK
KyAgICAgICAgcmV0dXJuIGwKKworICAgIGRlZiBnZXRjYWxsYXJncyhzZWxmLCBvYmopOgorICAg
ICAgICBpZiBub3QgaXNpbnN0YW5jZShvYmosICh0dXBsZSwgbGlzdCkpOgorICAgICAgICAgICAg
b2JqID0gKG9iaiwpCisgICAgICAgICMgZXhwbGljdCBuYW1pbmcKKyAgICAgICAgaWYgaXNpbnN0
YW5jZShvYmpbMF0sIHB5LmJ1aWx0aW4uX2Jhc2VzdHJpbmcpOgorICAgICAgICAgICAgbmFtZSA9
IG9ialswXQorICAgICAgICAgICAgb2JqID0gb2JqWzE6XQorICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgbmFtZSA9IE5vbmUKKyAgICAgICAgY2FsbCwgYXJncyA9IG9ialswXSwgb2JqWzE6XQor
ICAgICAgICByZXR1cm4gbmFtZSwgY2FsbCwgYXJncworCisKK2RlZiBoYXNpbml0KG9iaik6Cisg
ICAgaW5pdCA9IGdldGF0dHIob2JqLCAnX19pbml0X18nLCBOb25lKQorICAgIGlmIGluaXQ6Cisg
ICAgICAgIGlmIGluaXQgIT0gb2JqZWN0Ll9faW5pdF9fOgorICAgICAgICAgICAgcmV0dXJuIFRy
dWUKKworCisKK2RlZiBmaWxsZml4dHVyZXMoZnVuY3Rpb24pOgorICAgICIiIiBmaWxsIG1pc3Np
bmcgZnVuY2FyZ3MgZm9yIGEgdGVzdCBmdW5jdGlvbi4gIiIiCisgICAgdHJ5OgorICAgICAgICBy
ZXF1ZXN0ID0gZnVuY3Rpb24uX3JlcXVlc3QKKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Cisg
ICAgICAgICMgWFhYIHRoaXMgc3BlY2lhbCBjb2RlIHBhdGggaXMgb25seSBleHBlY3RlZCB0byBl
eGVjdXRlCisgICAgICAgICMgd2l0aCB0aGUgb2Vqc2tpdCBwbHVnaW4uICBJdCB1c2VzIGNsYXNz
ZXMgd2l0aCBmdW5jYXJncworICAgICAgICAjIGFuZCB3ZSB0aHVzIGhhdmUgdG8gd29yayBhIGJp
dCB0byBhbGxvdyB0aGlzLgorICAgICAgICBmbSA9IGZ1bmN0aW9uLnNlc3Npb24uX2ZpeHR1cmVt
YW5hZ2VyCisgICAgICAgIGZpID0gZm0uZ2V0Zml4dHVyZWluZm8oZnVuY3Rpb24ucGFyZW50LCBm
dW5jdGlvbi5vYmosIE5vbmUpCisgICAgICAgIGZ1bmN0aW9uLl9maXh0dXJlaW5mbyA9IGZpCisg
ICAgICAgIHJlcXVlc3QgPSBmdW5jdGlvbi5fcmVxdWVzdCA9IEZpeHR1cmVSZXF1ZXN0KGZ1bmN0
aW9uKQorICAgICAgICByZXF1ZXN0Ll9maWxsZml4dHVyZXMoKQorICAgICAgICAjIHBydW5lIG91
dCBmdW5jYXJncyBmb3IganN0ZXN0cworICAgICAgICBuZXdmdW5jYXJncyA9IHt9CisgICAgICAg
IGZvciBuYW1lIGluIGZpLmFyZ25hbWVzOgorICAgICAgICAgICAgbmV3ZnVuY2FyZ3NbbmFtZV0g
PSBmdW5jdGlvbi5mdW5jYXJnc1tuYW1lXQorICAgICAgICBmdW5jdGlvbi5mdW5jYXJncyA9IG5l
d2Z1bmNhcmdzCisgICAgZWxzZToKKyAgICAgICAgcmVxdWVzdC5fZmlsbGZpeHR1cmVzKCkKKwor
Citfbm90ZXhpc3RzID0gb2JqZWN0KCkKKworY2xhc3MgQ2FsbFNwZWMyKG9iamVjdCk6CisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIG1ldGFmdW5jKToKKyAgICAgICAgc2VsZi5tZXRhZnVuYyA9IG1l
dGFmdW5jCisgICAgICAgIHNlbGYuZnVuY2FyZ3MgPSB7fQorICAgICAgICBzZWxmLl9pZGxpc3Qg
PSBbXQorICAgICAgICBzZWxmLnBhcmFtcyA9IHt9CisgICAgICAgIHNlbGYuX2dsb2JhbGlkID0g
X25vdGV4aXN0cworICAgICAgICBzZWxmLl9nbG9iYWxpZF9hcmdzID0gc2V0KCkKKyAgICAgICAg
c2VsZi5fZ2xvYmFscGFyYW0gPSBfbm90ZXhpc3RzCisgICAgICAgIHNlbGYuX2FyZzJzY29wZW51
bSA9IHt9ICAjIHVzZWQgZm9yIHNvcnRpbmcgcGFyYW1ldHJpemVkIHJlc291cmNlcworICAgICAg
ICBzZWxmLmtleXdvcmRzID0ge30KKyAgICAgICAgc2VsZi5pbmRpY2VzID0ge30KKworICAgIGRl
ZiBjb3B5KHNlbGYsIG1ldGFmdW5jKToKKyAgICAgICAgY3MgPSBDYWxsU3BlYzIoc2VsZi5tZXRh
ZnVuYykKKyAgICAgICAgY3MuZnVuY2FyZ3MudXBkYXRlKHNlbGYuZnVuY2FyZ3MpCisgICAgICAg
IGNzLnBhcmFtcy51cGRhdGUoc2VsZi5wYXJhbXMpCisgICAgICAgIGNzLmtleXdvcmRzLnVwZGF0
ZShzZWxmLmtleXdvcmRzKQorICAgICAgICBjcy5pbmRpY2VzLnVwZGF0ZShzZWxmLmluZGljZXMp
CisgICAgICAgIGNzLl9hcmcyc2NvcGVudW0udXBkYXRlKHNlbGYuX2FyZzJzY29wZW51bSkKKyAg
ICAgICAgY3MuX2lkbGlzdCA9IGxpc3Qoc2VsZi5faWRsaXN0KQorICAgICAgICBjcy5fZ2xvYmFs
aWQgPSBzZWxmLl9nbG9iYWxpZAorICAgICAgICBjcy5fZ2xvYmFsaWRfYXJncyA9IHNlbGYuX2ds
b2JhbGlkX2FyZ3MKKyAgICAgICAgY3MuX2dsb2JhbHBhcmFtID0gc2VsZi5fZ2xvYmFscGFyYW0K
KyAgICAgICAgcmV0dXJuIGNzCisKKyAgICBkZWYgX2NoZWNrYXJnbm90Y29udGFpbmVkKHNlbGYs
IGFyZyk6CisgICAgICAgIGlmIGFyZyBpbiBzZWxmLnBhcmFtcyBvciBhcmcgaW4gc2VsZi5mdW5j
YXJnczoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImR1cGxpY2F0ZSAlciIgJShhcmcs
KSkKKworICAgIGRlZiBnZXRwYXJhbShzZWxmLCBuYW1lKToKKyAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgcmV0dXJuIHNlbGYucGFyYW1zW25hbWVdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoK
KyAgICAgICAgICAgIGlmIHNlbGYuX2dsb2JhbHBhcmFtIGlzIF9ub3RleGlzdHM6CisgICAgICAg
ICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihuYW1lKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYu
X2dsb2JhbHBhcmFtCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaWQoc2VsZik6CisgICAgICAg
IHJldHVybiAiLSIuam9pbihtYXAoc3RyLCBmaWx0ZXIoTm9uZSwgc2VsZi5faWRsaXN0KSkpCisK
KyAgICBkZWYgc2V0bXVsdGkoc2VsZiwgdmFsdHlwZXMsIGFyZ25hbWVzLCB2YWxzZXQsIGlkLCBr
ZXl3b3Jkcywgc2NvcGVudW0sCisgICAgICAgICAgICAgICAgIHBhcmFtX2luZGV4KToKKyAgICAg
ICAgZm9yIGFyZyx2YWwgaW4gemlwKGFyZ25hbWVzLCB2YWxzZXQpOgorICAgICAgICAgICAgc2Vs
Zi5fY2hlY2thcmdub3Rjb250YWluZWQoYXJnKQorICAgICAgICAgICAgdmFsdHlwZV9mb3JfYXJn
ID0gdmFsdHlwZXNbYXJnXQorICAgICAgICAgICAgZ2V0YXR0cihzZWxmLCB2YWx0eXBlX2Zvcl9h
cmcpW2FyZ10gPSB2YWwKKyAgICAgICAgICAgIHNlbGYuaW5kaWNlc1thcmddID0gcGFyYW1faW5k
ZXgKKyAgICAgICAgICAgIHNlbGYuX2FyZzJzY29wZW51bVthcmddID0gc2NvcGVudW0KKyAgICAg
ICAgICAgIGlmIHZhbCBpcyBfbm90ZXhpc3RzOgorICAgICAgICAgICAgICAgIHNlbGYuX2VtcHR5
cGFyYW1zcGVjaWZpZWQgPSBUcnVlCisgICAgICAgIHNlbGYuX2lkbGlzdC5hcHBlbmQoaWQpCisg
ICAgICAgIHNlbGYua2V5d29yZHMudXBkYXRlKGtleXdvcmRzKQorCisgICAgZGVmIHNldGFsbChz
ZWxmLCBmdW5jYXJncywgaWQsIHBhcmFtKToKKyAgICAgICAgZm9yIHggaW4gZnVuY2FyZ3M6Cisg
ICAgICAgICAgICBzZWxmLl9jaGVja2FyZ25vdGNvbnRhaW5lZCh4KQorICAgICAgICBzZWxmLmZ1
bmNhcmdzLnVwZGF0ZShmdW5jYXJncykKKyAgICAgICAgaWYgaWQgaXMgbm90IF9ub3RleGlzdHM6
CisgICAgICAgICAgICBzZWxmLl9pZGxpc3QuYXBwZW5kKGlkKQorICAgICAgICBpZiBwYXJhbSBp
cyBub3QgX25vdGV4aXN0czoKKyAgICAgICAgICAgIGFzc2VydCBzZWxmLl9nbG9iYWxwYXJhbSBp
cyBfbm90ZXhpc3RzCisgICAgICAgICAgICBzZWxmLl9nbG9iYWxwYXJhbSA9IHBhcmFtCisgICAg
ICAgIGZvciBhcmcgaW4gZnVuY2FyZ3M6CisgICAgICAgICAgICBzZWxmLl9hcmcyc2NvcGVudW1b
YXJnXSA9IHNjb3BlbnVtX2Z1bmN0aW9uCisKKworY2xhc3MgRnVuY2FyZ25hbWVzQ29tcGF0QXR0
cjoKKyAgICAiIiIgaGVscGVyIGNsYXNzIHNvIHRoYXQgTWV0YWZ1bmMsIEZ1bmN0aW9uIGFuZCBG
aXh0dXJlUmVxdWVzdAorICAgIGRvbid0IG5lZWQgdG8gZWFjaCBkZWZpbmUgdGhlICJmdW5jYXJn
bmFtZXMiIGNvbXBhdGliaWxpdHkgYXR0cmlidXRlLgorICAgICIiIgorICAgIEBwcm9wZXJ0eQor
ICAgIGRlZiBmdW5jYXJnbmFtZXMoc2VsZik6CisgICAgICAgICIiIiBhbGlhcyBhdHRyaWJ1dGUg
Zm9yIGBgZml4dHVyZW5hbWVzYGAgZm9yIHByZS0yLjMgY29tcGF0aWJpbGl0eSIiIgorICAgICAg
ICByZXR1cm4gc2VsZi5maXh0dXJlbmFtZXMKKworY2xhc3MgTWV0YWZ1bmMoRnVuY2FyZ25hbWVz
Q29tcGF0QXR0cik6CisgICAgIiIiCisgICAgTWV0YWZ1bmMgb2JqZWN0cyBhcmUgcGFzc2VkIHRv
IHRoZSBgYHB5dGVzdF9nZW5lcmF0ZV90ZXN0c2BgIGhvb2suCisgICAgVGhleSBoZWxwIHRvIGlu
c3BlY3QgYSB0ZXN0IGZ1bmN0aW9uIGFuZCB0byBnZW5lcmF0ZSB0ZXN0cyBhY2NvcmRpbmcgdG8K
KyAgICB0ZXN0IGNvbmZpZ3VyYXRpb24gb3IgdmFsdWVzIHNwZWNpZmllZCBpbiB0aGUgY2xhc3Mg
b3IgbW9kdWxlIHdoZXJlIGEKKyAgICB0ZXN0IGZ1bmN0aW9uIGlzIGRlZmluZWQuCisKKyAgICA6
aXZhciBmaXh0dXJlbmFtZXM6IHNldCBvZiBmaXh0dXJlIG5hbWVzIHJlcXVpcmVkIGJ5IHRoZSB0
ZXN0IGZ1bmN0aW9uCisKKyAgICA6aXZhciBmdW5jdGlvbjogdW5kZXJseWluZyBweXRob24gdGVz
dCBmdW5jdGlvbgorCisgICAgOml2YXIgY2xzOiBjbGFzcyBvYmplY3Qgd2hlcmUgdGhlIHRlc3Qg
ZnVuY3Rpb24gaXMgZGVmaW5lZCBpbiBvciBgYE5vbmVgYC4KKworICAgIDppdmFyIG1vZHVsZTog
dGhlIG1vZHVsZSBvYmplY3Qgd2hlcmUgdGhlIHRlc3QgZnVuY3Rpb24gaXMgZGVmaW5lZCBpbi4K
KworICAgIDppdmFyIGNvbmZpZzogYWNjZXNzIHRvIHRoZSA6Y2xhc3M6YF9weXRlc3QuY29uZmln
LkNvbmZpZ2Agb2JqZWN0IGZvciB0aGUKKyAgICAgICAgdGVzdCBzZXNzaW9uLgorCisgICAgOml2
YXIgZnVuY2FyZ25hbWVzOgorICAgICAgICAuLiBkZXByZWNhdGVkOjogMi4zCisgICAgICAgICAg
ICBVc2UgYGBmaXh0dXJlbmFtZXNgYCBpbnN0ZWFkLgorICAgICIiIgorICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBmdW5jdGlvbiwgZml4dHVyZWluZm8sIGNvbmZpZywgY2xzPU5vbmUsIG1vZHVsZT1O
b25lKToKKyAgICAgICAgc2VsZi5jb25maWcgPSBjb25maWcKKyAgICAgICAgc2VsZi5tb2R1bGUg
PSBtb2R1bGUKKyAgICAgICAgc2VsZi5mdW5jdGlvbiA9IGZ1bmN0aW9uCisgICAgICAgIHNlbGYu
Zml4dHVyZW5hbWVzID0gZml4dHVyZWluZm8ubmFtZXNfY2xvc3VyZQorICAgICAgICBzZWxmLl9h
cmcyZml4dHVyZWRlZnMgPSBmaXh0dXJlaW5mby5uYW1lMmZpeHR1cmVkZWZzCisgICAgICAgIHNl
bGYuY2xzID0gY2xzCisgICAgICAgIHNlbGYuX2NhbGxzID0gW10KKyAgICAgICAgc2VsZi5faWRz
ID0gcHkuYnVpbHRpbi5zZXQoKQorCisgICAgZGVmIHBhcmFtZXRyaXplKHNlbGYsIGFyZ25hbWVz
LCBhcmd2YWx1ZXMsIGluZGlyZWN0PUZhbHNlLCBpZHM9Tm9uZSwKKyAgICAgICAgc2NvcGU9Tm9u
ZSk6CisgICAgICAgICIiIiBBZGQgbmV3IGludm9jYXRpb25zIHRvIHRoZSB1bmRlcmx5aW5nIHRl
c3QgZnVuY3Rpb24gdXNpbmcgdGhlIGxpc3QKKyAgICAgICAgb2YgYXJndmFsdWVzIGZvciB0aGUg
Z2l2ZW4gYXJnbmFtZXMuICBQYXJhbWV0cml6YXRpb24gaXMgcGVyZm9ybWVkCisgICAgICAgIGR1
cmluZyB0aGUgY29sbGVjdGlvbiBwaGFzZS4gIElmIHlvdSBuZWVkIHRvIHNldHVwIGV4cGVuc2l2
ZSByZXNvdXJjZXMKKyAgICAgICAgc2VlIGFib3V0IHNldHRpbmcgaW5kaXJlY3QgdG8gZG8gaXQg
cmF0aGVyIGF0IHRlc3Qgc2V0dXAgdGltZS4KKworICAgICAgICA6YXJnIGFyZ25hbWVzOiBhIGNv
bW1hLXNlcGFyYXRlZCBzdHJpbmcgZGVub3Rpbmcgb25lIG9yIG1vcmUgYXJndW1lbnQKKyAgICAg
ICAgICAgICAgICAgICAgICAgbmFtZXMsIG9yIGEgbGlzdC90dXBsZSBvZiBhcmd1bWVudCBzdHJp
bmdzLgorCisgICAgICAgIDphcmcgYXJndmFsdWVzOiBUaGUgbGlzdCBvZiBhcmd2YWx1ZXMgZGV0
ZXJtaW5lcyBob3cgb2Z0ZW4gYQorICAgICAgICAgICAgdGVzdCBpcyBpbnZva2VkIHdpdGggZGlm
ZmVyZW50IGFyZ3VtZW50IHZhbHVlcy4gIElmIG9ubHkgb25lCisgICAgICAgICAgICBhcmduYW1l
IHdhcyBzcGVjaWZpZWQgYXJndmFsdWVzIGlzIGEgbGlzdCBvZiB2YWx1ZXMuICBJZiBOCisgICAg
ICAgICAgICBhcmduYW1lcyB3ZXJlIHNwZWNpZmllZCwgYXJndmFsdWVzIG11c3QgYmUgYSBsaXN0
IG9mIE4tdHVwbGVzLAorICAgICAgICAgICAgd2hlcmUgZWFjaCB0dXBsZS1lbGVtZW50IHNwZWNp
ZmllcyBhIHZhbHVlIGZvciBpdHMgcmVzcGVjdGl2ZQorICAgICAgICAgICAgYXJnbmFtZS4KKwor
ICAgICAgICA6YXJnIGluZGlyZWN0OiBUaGUgbGlzdCBvZiBhcmduYW1lcyBvciBib29sZWFuLiBB
IGxpc3Qgb2YgYXJndW1lbnRzJworICAgICAgICAgICAgbmFtZXMgKHN1YnNldCBvZiBhcmduYW1l
cykuIElmIFRydWUgdGhlIGxpc3QgY29udGFpbnMgYWxsIG5hbWVzIGZyb20KKyAgICAgICAgICAg
IHRoZSBhcmduYW1lcy4gRWFjaCBhcmd2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIGFuIGFyZ25hbWUg
aW4gdGhpcyBsaXN0IHdpbGwKKyAgICAgICAgICAgIGJlIHBhc3NlZCBhcyByZXF1ZXN0LnBhcmFt
IHRvIGl0cyByZXNwZWN0aXZlIGFyZ25hbWUgZml4dHVyZQorICAgICAgICAgICAgZnVuY3Rpb24g
c28gdGhhdCBpdCBjYW4gcGVyZm9ybSBtb3JlIGV4cGVuc2l2ZSBzZXR1cHMgZHVyaW5nIHRoZQor
ICAgICAgICAgICAgc2V0dXAgcGhhc2Ugb2YgYSB0ZXN0IHJhdGhlciB0aGFuIGF0IGNvbGxlY3Rp
b24gdGltZS4KKworICAgICAgICA6YXJnIGlkczogbGlzdCBvZiBzdHJpbmcgaWRzLCBvciBhIGNh
bGxhYmxlLgorICAgICAgICAgICAgSWYgc3RyaW5ncywgZWFjaCBpcyBjb3JyZXNwb25kaW5nIHRv
IHRoZSBhcmd2YWx1ZXMgc28gdGhhdCB0aGV5IGFyZQorICAgICAgICAgICAgcGFydCBvZiB0aGUg
dGVzdCBpZC4KKyAgICAgICAgICAgIElmIGNhbGxhYmxlLCBpdCBzaG91bGQgdGFrZSBvbmUgYXJn
dW1lbnQgKGEgc2luZ2xlIGFyZ3ZhbHVlKSBhbmQgcmV0dXJuCisgICAgICAgICAgICBhIHN0cmlu
ZyBvciByZXR1cm4gTm9uZS4gSWYgTm9uZSwgdGhlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGlk
IGZvciB0aGF0CisgICAgICAgICAgICBhcmd1bWVudCB3aWxsIGJlIHVzZWQuCisgICAgICAgICAg
ICBJZiBubyBpZHMgYXJlIHByb3ZpZGVkIHRoZXkgd2lsbCBiZSBnZW5lcmF0ZWQgYXV0b21hdGlj
YWxseSBmcm9tCisgICAgICAgICAgICB0aGUgYXJndmFsdWVzLgorCisgICAgICAgIDphcmcgc2Nv
cGU6IGlmIHNwZWNpZmllZCBpdCBkZW5vdGVzIHRoZSBzY29wZSBvZiB0aGUgcGFyYW1ldGVycy4K
KyAgICAgICAgICAgIFRoZSBzY29wZSBpcyB1c2VkIGZvciBncm91cGluZyB0ZXN0cyBieSBwYXJh
bWV0ZXIgaW5zdGFuY2VzLgorICAgICAgICAgICAgSXQgd2lsbCBhbHNvIG92ZXJyaWRlIGFueSBm
aXh0dXJlLWZ1bmN0aW9uIGRlZmluZWQgc2NvcGUsIGFsbG93aW5nCisgICAgICAgICAgICB0byBz
ZXQgYSBkeW5hbWljIHNjb3BlIHVzaW5nIHRlc3QgY29udGV4dCBvciBjb25maWd1cmF0aW9uLgor
ICAgICAgICAiIiIKKworICAgICAgICAjIGluZGl2aWR1YWwgcGFyYW1ldHJpemVkIGFyZ3VtZW50
IHNldHMgY2FuIGJlIHdyYXBwZWQgaW4gYSBzZXJpZXMKKyAgICAgICAgIyBvZiBtYXJrZXJzIGlu
IHdoaWNoIGNhc2Ugd2UgdW53cmFwIHRoZSB2YWx1ZXMgYW5kIGFwcGx5IHRoZSBtYXJrCisgICAg
ICAgICMgYXQgRnVuY3Rpb24gaW5pdAorICAgICAgICBuZXdrZXl3b3JkcyA9IHt9CisgICAgICAg
IHVud3JhcHBlZF9hcmd2YWx1ZXMgPSBbXQorICAgICAgICBmb3IgaSwgYXJndmFsIGluIGVudW1l
cmF0ZShhcmd2YWx1ZXMpOgorICAgICAgICAgICAgd2hpbGUgaXNpbnN0YW5jZShhcmd2YWwsIE1h
cmtEZWNvcmF0b3IpOgorICAgICAgICAgICAgICAgIG5ld21hcmsgPSBNYXJrRGVjb3JhdG9yKGFy
Z3ZhbC5tYXJrbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
cmd2YWwuYXJnc1s6LTFdLCBhcmd2YWwua3dhcmdzKQorICAgICAgICAgICAgICAgIG5ld21hcmtz
ID0gbmV3a2V5d29yZHMuc2V0ZGVmYXVsdChpLCB7fSkKKyAgICAgICAgICAgICAgICBuZXdtYXJr
c1tuZXdtYXJrLm1hcmtuYW1lXSA9IG5ld21hcmsKKyAgICAgICAgICAgICAgICBhcmd2YWwgPSBh
cmd2YWwuYXJnc1stMV0KKyAgICAgICAgICAgIHVud3JhcHBlZF9hcmd2YWx1ZXMuYXBwZW5kKGFy
Z3ZhbCkKKyAgICAgICAgYXJndmFsdWVzID0gdW53cmFwcGVkX2FyZ3ZhbHVlcworCisgICAgICAg
IGlmIG5vdCBpc2luc3RhbmNlKGFyZ25hbWVzLCAodHVwbGUsIGxpc3QpKToKKyAgICAgICAgICAg
IGFyZ25hbWVzID0gW3guc3RyaXAoKSBmb3IgeCBpbiBhcmduYW1lcy5zcGxpdCgiLCIpIGlmIHgu
c3RyaXAoKV0KKyAgICAgICAgICAgIGlmIGxlbihhcmduYW1lcykgPT0gMToKKyAgICAgICAgICAg
ICAgICBhcmd2YWx1ZXMgPSBbKHZhbCwpIGZvciB2YWwgaW4gYXJndmFsdWVzXQorICAgICAgICBp
ZiBub3QgYXJndmFsdWVzOgorICAgICAgICAgICAgYXJndmFsdWVzID0gWyhfbm90ZXhpc3RzLCkg
KiBsZW4oYXJnbmFtZXMpXQorCisgICAgICAgIGlmIHNjb3BlIGlzIE5vbmU6CisgICAgICAgICAg
ICBzY29wZSA9ICJmdW5jdGlvbiIKKyAgICAgICAgc2NvcGVudW0gPSBzY29wZXMuaW5kZXgoc2Nv
cGUpCisgICAgICAgIHZhbHR5cGVzID0ge30KKyAgICAgICAgZm9yIGFyZyBpbiBhcmduYW1lczoK
KyAgICAgICAgICAgIGlmIGFyZyBub3QgaW4gc2VsZi5maXh0dXJlbmFtZXM6CisgICAgICAgICAg
ICAgICAgcmFpc2UgVmFsdWVFcnJvcigiJXIgdXNlcyBubyBmaXh0dXJlICVyIiAlKHNlbGYuZnVu
Y3Rpb24sIGFyZykpCisKKyAgICAgICAgaWYgaW5kaXJlY3QgaXMgVHJ1ZToKKyAgICAgICAgICAg
IHZhbHR5cGVzID0gZGljdC5mcm9ta2V5cyhhcmduYW1lcywgInBhcmFtcyIpCisgICAgICAgIGVs
aWYgaW5kaXJlY3QgaXMgRmFsc2U6CisgICAgICAgICAgICB2YWx0eXBlcyA9IGRpY3QuZnJvbWtl
eXMoYXJnbmFtZXMsICJmdW5jYXJncyIpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShpbmRpcmVj
dCwgKHR1cGxlLCBsaXN0KSk6CisgICAgICAgICAgICB2YWx0eXBlcyA9IGRpY3QuZnJvbWtleXMo
YXJnbmFtZXMsICJmdW5jYXJncyIpCisgICAgICAgICAgICBmb3IgYXJnIGluIGluZGlyZWN0Ogor
ICAgICAgICAgICAgICAgIGlmIGFyZyBub3QgaW4gYXJnbmFtZXM6CisgICAgICAgICAgICAgICAg
ICAgIHJhaXNlIFZhbHVlRXJyb3IoImluZGlyZWN0IGdpdmVuIHRvICVyOiBmaXh0dXJlICVyIGRv
ZXNuJ3QgZXhpc3QiICUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5mdW5jdGlvbiwgYXJnKSkKKyAgICAgICAgICAgICAgICB2YWx0eXBlc1thcmddID0gInBhcmFt
cyIKKyAgICAgICAgaWRmbiA9IE5vbmUKKyAgICAgICAgaWYgY2FsbGFibGUoaWRzKToKKyAgICAg
ICAgICAgIGlkZm4gPSBpZHMKKyAgICAgICAgICAgIGlkcyA9IE5vbmUKKyAgICAgICAgaWYgaWRz
IGFuZCBsZW4oaWRzKSAhPSBsZW4oYXJndmFsdWVzKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVl
RXJyb3IoJyVkIHRlc3RzIHNwZWNpZmllZCB3aXRoICVkIGlkcycgJSgKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbGVuKGFyZ3ZhbHVlcyksIGxlbihpZHMpKSkKKyAgICAgICAgaWYgbm90
IGlkczoKKyAgICAgICAgICAgIGlkcyA9IGlkbWFrZXIoYXJnbmFtZXMsIGFyZ3ZhbHVlcywgaWRm
bikKKyAgICAgICAgbmV3Y2FsbHMgPSBbXQorICAgICAgICBmb3IgY2FsbHNwZWMgaW4gc2VsZi5f
Y2FsbHMgb3IgW0NhbGxTcGVjMihzZWxmKV06CisgICAgICAgICAgICBmb3IgcGFyYW1faW5kZXgs
IHZhbHNldCBpbiBlbnVtZXJhdGUoYXJndmFsdWVzKToKKyAgICAgICAgICAgICAgICBhc3NlcnQg
bGVuKHZhbHNldCkgPT0gbGVuKGFyZ25hbWVzKQorICAgICAgICAgICAgICAgIG5ld2NhbGxzcGVj
ID0gY2FsbHNwZWMuY29weShzZWxmKQorICAgICAgICAgICAgICAgIG5ld2NhbGxzcGVjLnNldG11
bHRpKHZhbHR5cGVzLCBhcmduYW1lcywgdmFsc2V0LCBpZHNbcGFyYW1faW5kZXhdLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld2tleXdvcmRzLmdldChwYXJhbV9pbmRl
eCwge30pLCBzY29wZW51bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YXJhbV9pbmRleCkKKyAgICAgICAgICAgICAgICBuZXdjYWxscy5hcHBlbmQobmV3Y2FsbHNwZWMp
CisgICAgICAgIHNlbGYuX2NhbGxzID0gbmV3Y2FsbHMKKworICAgIGRlZiBhZGRjYWxsKHNlbGYs
IGZ1bmNhcmdzPU5vbmUsIGlkPV9ub3RleGlzdHMsIHBhcmFtPV9ub3RleGlzdHMpOgorICAgICAg
ICAiIiIgKGRlcHJlY2F0ZWQsIHVzZSBwYXJhbWV0cml6ZSkgQWRkIGEgbmV3IGNhbGwgdG8gdGhl
IHVuZGVybHlpbmcKKyAgICAgICAgdGVzdCBmdW5jdGlvbiBkdXJpbmcgdGhlIGNvbGxlY3Rpb24g
cGhhc2Ugb2YgYSB0ZXN0IHJ1bi4gIE5vdGUgdGhhdAorICAgICAgICByZXF1ZXN0LmFkZGNhbGwo
KSBpcyBjYWxsZWQgZHVyaW5nIHRoZSB0ZXN0IGNvbGxlY3Rpb24gcGhhc2UgcHJpb3IgYW5kCisg
ICAgICAgIGluZGVwZW5kZW50bHkgdG8gYWN0dWFsIHRlc3QgZXhlY3V0aW9uLiAgWW91IHNob3Vs
ZCBvbmx5IHVzZSBhZGRjYWxsKCkKKyAgICAgICAgaWYgeW91IG5lZWQgdG8gc3BlY2lmeSBtdWx0
aXBsZSBhcmd1bWVudHMgb2YgYSB0ZXN0IGZ1bmN0aW9uLgorCisgICAgICAgIDphcmcgZnVuY2Fy
Z3M6IGFyZ3VtZW50IGtleXdvcmQgZGljdGlvbmFyeSB1c2VkIHdoZW4gaW52b2tpbmcKKyAgICAg
ICAgICAgIHRoZSB0ZXN0IGZ1bmN0aW9uLgorCisgICAgICAgIDphcmcgaWQ6IHVzZWQgZm9yIHJl
cG9ydGluZyBhbmQgaWRlbnRpZmljYXRpb24gcHVycG9zZXMuICBJZiB5b3UKKyAgICAgICAgICAg
IGRvbid0IHN1cHBseSBhbiBgaWRgIGFuIGF1dG9tYXRpYyB1bmlxdWUgaWQgd2lsbCBiZSBnZW5l
cmF0ZWQuCisKKyAgICAgICAgOmFyZyBwYXJhbTogYSBwYXJhbWV0ZXIgd2hpY2ggd2lsbCBiZSBl
eHBvc2VkIHRvIGEgbGF0ZXIgZml4dHVyZSBmdW5jdGlvbgorICAgICAgICAgICAgaW52b2NhdGlv
biB0aHJvdWdoIHRoZSBgYHJlcXVlc3QucGFyYW1gYCBhdHRyaWJ1dGUuCisgICAgICAgICIiIgor
ICAgICAgICBhc3NlcnQgZnVuY2FyZ3MgaXMgTm9uZSBvciBpc2luc3RhbmNlKGZ1bmNhcmdzLCBk
aWN0KQorICAgICAgICBpZiBmdW5jYXJncyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGZvciBu
YW1lIGluIGZ1bmNhcmdzOgorICAgICAgICAgICAgICAgIGlmIG5hbWUgbm90IGluIHNlbGYuZml4
dHVyZW5hbWVzOgorICAgICAgICAgICAgICAgICAgICBweXRlc3QuZmFpbCgiZnVuY2FyZyAlciBu
b3QgdXNlZCBpbiB0aGlzIGZ1bmN0aW9uLiIgJSBuYW1lKQorICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgZnVuY2FyZ3MgPSB7fQorICAgICAgICBpZiBpZCBpcyBOb25lOgorICAgICAgICAgICAg
cmFpc2UgVmFsdWVFcnJvcigiaWQ9Tm9uZSBub3QgYWxsb3dlZCIpCisgICAgICAgIGlmIGlkIGlz
IF9ub3RleGlzdHM6CisgICAgICAgICAgICBpZCA9IGxlbihzZWxmLl9jYWxscykKKyAgICAgICAg
aWQgPSBzdHIoaWQpCisgICAgICAgIGlmIGlkIGluIHNlbGYuX2lkczoKKyAgICAgICAgICAgIHJh
aXNlIFZhbHVlRXJyb3IoImR1cGxpY2F0ZSBpZCAlciIgJSBpZCkKKyAgICAgICAgc2VsZi5faWRz
LmFkZChpZCkKKworICAgICAgICBjcyA9IENhbGxTcGVjMihzZWxmKQorICAgICAgICBjcy5zZXRh
bGwoZnVuY2FyZ3MsIGlkLCBwYXJhbSkKKyAgICAgICAgc2VsZi5fY2FsbHMuYXBwZW5kKGNzKQor
CisKK2lmIF9QWTM6CisgICAgaW1wb3J0IGNvZGVjcworCisgICAgZGVmIF9lc2NhcGVfYnl0ZXMo
dmFsKToKKyAgICAgICAgIiIiCisgICAgICAgIElmIHZhbCBpcyBwdXJlIGFzY2lpLCByZXR1cm5z
IGl0IGFzIGEgc3RyKCksIG90aGVyd2lzZSBlc2NhcGVzCisgICAgICAgIGludG8gYSBzZXF1ZW5j
ZSBvZiBlc2NhcGVkIGJ5dGVzOgorICAgICAgICBiJ1x4YzNceGI0XHhjNVx4ZDYnIC0+IHUnXFx4
YzNcXHhiNFxceGM1XFx4ZDYnCisKKyAgICAgICAgbm90ZToKKyAgICAgICAgICAgdGhlIG9idmlv
dXMgInYuZGVjb2RlKCd1bmljb2RlLWVzY2FwZScpIiB3aWxsIHJldHVybgorICAgICAgICAgICB2
YWxpZCB1dGYtOCB1bmljb2RlIGlmIGl0IGZpbmRzIHRoZW0gaW4gdGhlIHN0cmluZywgYnV0IHdl
CisgICAgICAgICAgIHdhbnQgdG8gcmV0dXJuIGVzY2FwZWQgYnl0ZXMgZm9yIGFueSBieXRlLCBl
dmVuIGlmIHRoZXkgbWF0Y2gKKyAgICAgICAgICAgYSB1dGYtOCBzdHJpbmcuCisgICAgICAgICIi
IgorICAgICAgICBpZiB2YWw6CisgICAgICAgICAgICAjIHNvdXJjZTogaHR0cDovL2dvby5nbC9i
R3Nud0MKKyAgICAgICAgICAgIGVuY29kZWRfYnl0ZXMsIF8gPSBjb2RlY3MuZXNjYXBlX2VuY29k
ZSh2YWwpCisgICAgICAgICAgICByZXR1cm4gZW5jb2RlZF9ieXRlcy5kZWNvZGUoJ2FzY2lpJykK
KyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgZW1wdHkgYnl0ZXMgY3Jhc2hlcyBjb2RlY3Mu
ZXNjYXBlX2VuY29kZSAoIzEwODcpCisgICAgICAgICAgICByZXR1cm4gJycKK2Vsc2U6CisgICAg
ZGVmIF9lc2NhcGVfYnl0ZXModmFsKToKKyAgICAgICAgIiIiCisgICAgICAgIEluIHB5MiBieXRl
cyBhbmQgc3RyIGFyZSB0aGUgc2FtZSB0eXBlLCBzbyByZXR1cm4gaXQgdW5jaGFuZ2VkIGlmIGl0
CisgICAgICAgIGlzIGEgZnVsbCBhc2NpaSBzdHJpbmcsIG90aGVyd2lzZSBlc2NhcGUgaXQgaW50
byBpdHMgYmluYXJ5IGZvcm0uCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAg
ICByZXR1cm4gdmFsLmRlY29kZSgnYXNjaWknKQorICAgICAgICBleGNlcHQgVW5pY29kZURlY29k
ZUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIHZhbC5lbmNvZGUoJ3N0cmluZy1lc2NhcGUnKQor
CisKK2RlZiBfaWR2YWwodmFsLCBhcmduYW1lLCBpZHgsIGlkZm4pOgorICAgIGlmIGlkZm46Cisg
ICAgICAgIHRyeToKKyAgICAgICAgICAgIHMgPSBpZGZuKHZhbCkKKyAgICAgICAgICAgIGlmIHM6
CisgICAgICAgICAgICAgICAgcmV0dXJuIHMKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAg
ICAgICAgICAgIHBhc3MKKworICAgIGlmIGlzaW5zdGFuY2UodmFsLCBieXRlcyk6CisgICAgICAg
IHJldHVybiBfZXNjYXBlX2J5dGVzKHZhbCkKKyAgICBlbGlmIGlzaW5zdGFuY2UodmFsLCAoZmxv
YXQsIGludCwgc3RyLCBib29sLCBOb25lVHlwZSkpOgorICAgICAgICByZXR1cm4gc3RyKHZhbCkK
KyAgICBlbGlmIGlzaW5zdGFuY2UodmFsLCBSRUdFWF9UWVBFKToKKyAgICAgICAgcmV0dXJuIF9l
c2NhcGVfYnl0ZXModmFsLnBhdHRlcm4pIGlmIGlzaW5zdGFuY2UodmFsLnBhdHRlcm4sIGJ5dGVz
KSBlbHNlIHZhbC5wYXR0ZXJuCisgICAgZWxpZiBlbnVtIGlzIG5vdCBOb25lIGFuZCBpc2luc3Rh
bmNlKHZhbCwgZW51bS5FbnVtKToKKyAgICAgICAgcmV0dXJuIHN0cih2YWwpCisgICAgZWxpZiBp
c2NsYXNzKHZhbCkgYW5kIGhhc2F0dHIodmFsLCAnX19uYW1lX18nKToKKyAgICAgICAgcmV0dXJu
IHZhbC5fX25hbWVfXworICAgIGVsaWYgX1BZMiBhbmQgaXNpbnN0YW5jZSh2YWwsIHVuaWNvZGUp
OgorICAgICAgICAjIHNwZWNpYWwgY2FzZSBmb3IgcHl0aG9uIDI6IGlmIGEgdW5pY29kZSBzdHJp
bmcgaXMKKyAgICAgICAgIyBjb252ZXJ0aWJsZSB0byBhc2NpaSwgcmV0dXJuIGl0IGFzIGFuIHN0
cigpIG9iamVjdCBpbnN0ZWFkCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzdHIo
dmFsKQorICAgICAgICBleGNlcHQgVW5pY29kZUVycm9yOgorICAgICAgICAgICAgIyBmYWxsdGhy
b3VnaAorICAgICAgICAgICAgcGFzcworICAgIHJldHVybiBzdHIoYXJnbmFtZSkrc3RyKGlkeCkK
KworZGVmIF9pZHZhbHNldChpZHgsIHZhbHNldCwgYXJnbmFtZXMsIGlkZm4pOgorICAgIHRoaXNf
aWQgPSBbX2lkdmFsKHZhbCwgYXJnbmFtZSwgaWR4LCBpZGZuKQorICAgICAgICAgICAgICAgZm9y
IHZhbCwgYXJnbmFtZSBpbiB6aXAodmFsc2V0LCBhcmduYW1lcyldCisgICAgcmV0dXJuICItIi5q
b2luKHRoaXNfaWQpCisKK2RlZiBpZG1ha2VyKGFyZ25hbWVzLCBhcmd2YWx1ZXMsIGlkZm49Tm9u
ZSk6CisgICAgaWRzID0gW19pZHZhbHNldCh2YWxpbmRleCwgdmFsc2V0LCBhcmduYW1lcywgaWRm
bikKKyAgICAgICAgICAgZm9yIHZhbGluZGV4LCB2YWxzZXQgaW4gZW51bWVyYXRlKGFyZ3ZhbHVl
cyldCisgICAgaWYgbGVuKHNldChpZHMpKSA8IGxlbihpZHMpOgorICAgICAgICAjIHVzZXIgbWF5
IGhhdmUgcHJvdmlkZWQgYSBiYWQgaWRmbiB3aGljaCBtZWFucyB0aGUgaWRzIGFyZSBub3QgdW5p
cXVlCisgICAgICAgIGlkcyA9IFtzdHIoaSkgKyB0ZXN0aWQgZm9yIGksIHRlc3RpZCBpbiBlbnVt
ZXJhdGUoaWRzKV0KKyAgICByZXR1cm4gaWRzCisKK2RlZiBzaG93Zml4dHVyZXMoY29uZmlnKToK
KyAgICBmcm9tIF9weXRlc3QubWFpbiBpbXBvcnQgd3JhcF9zZXNzaW9uCisgICAgcmV0dXJuIHdy
YXBfc2Vzc2lvbihjb25maWcsIF9zaG93Zml4dHVyZXNfbWFpbikKKworZGVmIF9zaG93Zml4dHVy
ZXNfbWFpbihjb25maWcsIHNlc3Npb24pOgorICAgIGltcG9ydCBfcHl0ZXN0LmNvbmZpZworICAg
IHNlc3Npb24ucGVyZm9ybV9jb2xsZWN0KCkKKyAgICBjdXJkaXIgPSBweS5wYXRoLmxvY2FsKCkK
KyAgICB0dyA9IF9weXRlc3QuY29uZmlnLmNyZWF0ZV90ZXJtaW5hbF93cml0ZXIoY29uZmlnKQor
ICAgIHZlcmJvc2UgPSBjb25maWcuZ2V0dmFsdWUoInZlcmJvc2UiKQorCisgICAgZm0gPSBzZXNz
aW9uLl9maXh0dXJlbWFuYWdlcgorCisgICAgYXZhaWxhYmxlID0gW10KKyAgICBmb3IgYXJnbmFt
ZSwgZml4dHVyZWRlZnMgaW4gZm0uX2FyZzJmaXh0dXJlZGVmcy5pdGVtcygpOgorICAgICAgICBh
c3NlcnQgZml4dHVyZWRlZnMgaXMgbm90IE5vbmUKKyAgICAgICAgaWYgbm90IGZpeHR1cmVkZWZz
OgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZml4dHVyZWRlZiA9IGZpeHR1cmVkZWZz
Wy0xXQorICAgICAgICBsb2MgPSBnZXRsb2NhdGlvbihmaXh0dXJlZGVmLmZ1bmMsIGN1cmRpcikK
KyAgICAgICAgYXZhaWxhYmxlLmFwcGVuZCgobGVuKGZpeHR1cmVkZWYuYmFzZWlkKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgZml4dHVyZWRlZi5mdW5jLl9fbW9kdWxlX18sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIGN1cmRpci5iZXN0cmVscGF0aChsb2MpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICBmaXh0dXJlZGVmLmFyZ25hbWUsIGZpeHR1cmVkZWYpKQorCisgICAgYXZh
aWxhYmxlLnNvcnQoKQorICAgIGN1cnJlbnRtb2R1bGUgPSBOb25lCisgICAgZm9yIGJhc2VpZCwg
bW9kdWxlLCBiZXN0cmVsLCBhcmduYW1lLCBmaXh0dXJlZGVmIGluIGF2YWlsYWJsZToKKyAgICAg
ICAgaWYgY3VycmVudG1vZHVsZSAhPSBtb2R1bGU6CisgICAgICAgICAgICBpZiBub3QgbW9kdWxl
LnN0YXJ0c3dpdGgoIl9weXRlc3QuIik6CisgICAgICAgICAgICAgICAgdHcubGluZSgpCisgICAg
ICAgICAgICAgICAgdHcuc2VwKCItIiwgImZpeHR1cmVzIGRlZmluZWQgZnJvbSAlcyIgJShtb2R1
bGUsKSkKKyAgICAgICAgICAgICAgICBjdXJyZW50bW9kdWxlID0gbW9kdWxlCisgICAgICAgIGlm
IHZlcmJvc2UgPD0gMCBhbmQgYXJnbmFtZVswXSA9PSAiXyI6CisgICAgICAgICAgICBjb250aW51
ZQorICAgICAgICBpZiB2ZXJib3NlID4gMDoKKyAgICAgICAgICAgIGZ1bmNhcmdzcGVjID0gIiVz
IC0tICVzIiAlKGFyZ25hbWUsIGJlc3RyZWwsKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
ZnVuY2FyZ3NwZWMgPSBhcmduYW1lCisgICAgICAgIHR3LmxpbmUoZnVuY2FyZ3NwZWMsIGdyZWVu
PVRydWUpCisgICAgICAgIGxvYyA9IGdldGxvY2F0aW9uKGZpeHR1cmVkZWYuZnVuYywgY3VyZGly
KQorICAgICAgICBkb2MgPSBmaXh0dXJlZGVmLmZ1bmMuX19kb2NfXyBvciAiIgorICAgICAgICBp
ZiBkb2M6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBkb2Muc3RyaXAoKS5zcGxpdCgiXG4iKToK
KyAgICAgICAgICAgICAgICB0dy5saW5lKCIgICAgIiArIGxpbmUuc3RyaXAoKSkKKyAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgIHR3LmxpbmUoIiAgICAlczogbm8gZG9jc3RyaW5nIGF2YWlsYWJs
ZSIgJShsb2MsKSwKKyAgICAgICAgICAgICAgICByZWQ9VHJ1ZSkKKworZGVmIGdldGxvY2F0aW9u
KGZ1bmN0aW9uLCBjdXJkaXIpOgorICAgIGltcG9ydCBpbnNwZWN0CisgICAgZm4gPSBweS5wYXRo
LmxvY2FsKGluc3BlY3QuZ2V0ZmlsZShmdW5jdGlvbikpCisgICAgbGluZW5vID0gcHkuYnVpbHRp
bi5fZ2V0Y29kZShmdW5jdGlvbikuY29fZmlyc3RsaW5lbm8KKyAgICBpZiBmbi5yZWx0byhjdXJk
aXIpOgorICAgICAgICBmbiA9IGZuLnJlbHRvKGN1cmRpcikKKyAgICByZXR1cm4gIiVzOiVkIiAl
KGZuLCBsaW5lbm8rMSkKKworIyBidWlsdGluIHB5dGVzdC5yYWlzZXMgaGVscGVyCisKK2RlZiBy
YWlzZXMoZXhwZWN0ZWRfZXhjZXB0aW9uLCAqYXJncywgKiprd2FyZ3MpOgorICAgICIiIiBhc3Nl
cnQgdGhhdCBhIGNvZGUgYmxvY2svZnVuY3Rpb24gY2FsbCByYWlzZXMgYGBleHBlY3RlZF9leGNl
cHRpb25gYAorICAgIGFuZCByYWlzZSBhIGZhaWx1cmUgZXhjZXB0aW9uIG90aGVyd2lzZS4KKwor
ICAgIFRoaXMgaGVscGVyIHByb2R1Y2VzIGEgYGBFeGNlcHRpb25JbmZvKClgYCBvYmplY3QgKHNl
ZSBiZWxvdykuCisKKyAgICBJZiB1c2luZyBQeXRob24gMi41IG9yIGFib3ZlLCB5b3UgbWF5IHVz
ZSB0aGlzIGZ1bmN0aW9uIGFzIGEKKyAgICBjb250ZXh0IG1hbmFnZXI6OgorCisgICAgICAgID4+
PiB3aXRoIHJhaXNlcyhaZXJvRGl2aXNpb25FcnJvcik6CisgICAgICAgIC4uLiAgICAxLzAKKwor
ICAgIC4uIG5vdGU6OgorCisgICAgICAgV2hlbiB1c2luZyBgYHB5dGVzdC5yYWlzZXNgYCBhcyBh
IGNvbnRleHQgbWFuYWdlciwgaXQncyB3b3J0aHdoaWxlIHRvCisgICAgICAgbm90ZSB0aGF0IG5v
cm1hbCBjb250ZXh0IG1hbmFnZXIgcnVsZXMgYXBwbHkgYW5kIHRoYXQgdGhlIGV4Y2VwdGlvbgor
ICAgICAgIHJhaXNlZCAqbXVzdCogYmUgdGhlIGZpbmFsIGxpbmUgaW4gdGhlIHNjb3BlIG9mIHRo
ZSBjb250ZXh0IG1hbmFnZXIuCisgICAgICAgTGluZXMgb2YgY29kZSBhZnRlciB0aGF0LCB3aXRo
aW4gdGhlIHNjb3BlIG9mIHRoZSBjb250ZXh0IG1hbmFnZXIgd2lsbAorICAgICAgIG5vdCBiZSBl
eGVjdXRlZC4gRm9yIGV4YW1wbGU6OgorCisgICAgICAgICAgID4+PiB3aXRoIHJhaXNlcyhPU0Vy
cm9yKSBhcyBleGNfaW5mbzoKKyAgICAgICAgICAgICAgICAgICBhc3NlcnQgMSA9PSAxICAjIHRo
aXMgd2lsbCBleGVjdXRlIGFzIGV4cGVjdGVkCisgICAgICAgICAgICAgICAgICAgcmFpc2UgT1NF
cnJvcihlcnJuby5FRVhJU1RTLCAnZGlyZWN0b3J5IGV4aXN0cycpCisgICAgICAgICAgICAgICAg
ICAgYXNzZXJ0IGV4Y19pbmZvLnZhbHVlLmVycm5vID09IGVycm5vLkVFWElTVFMgICMgdGhpcyB3
aWxsIG5vdCBleGVjdXRlCisKKyAgICAgICBJbnN0ZWFkLCB0aGUgZm9sbG93aW5nIGFwcHJvYWNo
IG11c3QgYmUgdGFrZW4gKG5vdGUgdGhlIGRpZmZlcmVuY2UgaW4KKyAgICAgICBzY29wZSk6Ogor
CisgICAgICAgICAgID4+PiB3aXRoIHJhaXNlcyhPU0Vycm9yKSBhcyBleGNfaW5mbzoKKyAgICAg
ICAgICAgICAgICAgICBhc3NlcnQgMSA9PSAxICAjIHRoaXMgd2lsbCBleGVjdXRlIGFzIGV4cGVj
dGVkCisgICAgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihlcnJuby5FRVhJU1RTLCAnZGly
ZWN0b3J5IGV4aXN0cycpCisKKyAgICAgICAgICAgICAgIGFzc2VydCBleGNfaW5mby52YWx1ZS5l
cnJubyA9PSBlcnJuby5FRVhJU1RTICAjIHRoaXMgd2lsbCBub3cgZXhlY3V0ZQorCisgICAgT3Ig
eW91IGNhbiBzcGVjaWZ5IGEgY2FsbGFibGUgYnkgcGFzc2luZyBhIHRvLWJlLWNhbGxlZCBsYW1i
ZGE6OgorCisgICAgICAgID4+PiByYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIGxhbWJkYTogMS8w
KQorICAgICAgICA8RXhjZXB0aW9uSW5mbyAuLi4+CisKKyAgICBvciB5b3UgY2FuIHNwZWNpZnkg
YW4gYXJiaXRyYXJ5IGNhbGxhYmxlIHdpdGggYXJndW1lbnRzOjoKKworICAgICAgICA+Pj4gZGVm
IGYoeCk6IHJldHVybiAxL3gKKyAgICAgICAgLi4uCisgICAgICAgID4+PiByYWlzZXMoWmVyb0Rp
dmlzaW9uRXJyb3IsIGYsIDApCisgICAgICAgIDxFeGNlcHRpb25JbmZvIC4uLj4KKyAgICAgICAg
Pj4+IHJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgZiwgeD0wKQorICAgICAgICA8RXhjZXB0aW9u
SW5mbyAuLi4+CisKKyAgICBBIHRoaXJkIHBvc3NpYmlsaXR5IGlzIHRvIHVzZSBhIHN0cmluZyB0
byBiZSBleGVjdXRlZDo6CisKKyAgICAgICAgPj4+IHJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwg
ImYoMCkiKQorICAgICAgICA8RXhjZXB0aW9uSW5mbyAuLi4+CisKKyAgICAuLiBhdXRvY2xhc3M6
OiBfcHl0ZXN0Ll9jb2RlLkV4Y2VwdGlvbkluZm8KKyAgICAgICAgOm1lbWJlcnM6CisKKyAgICAu
LiBub3RlOjoKKyAgICAgICAgU2ltaWxhciB0byBjYXVnaHQgZXhjZXB0aW9uIG9iamVjdHMgaW4g
UHl0aG9uLCBleHBsaWNpdGx5IGNsZWFyaW5nCisgICAgICAgIGxvY2FsIHJlZmVyZW5jZXMgdG8g
cmV0dXJuZWQgYGBFeGNlcHRpb25JbmZvYGAgb2JqZWN0cyBjYW4KKyAgICAgICAgaGVscCB0aGUg
UHl0aG9uIGludGVycHJldGVyIHNwZWVkIHVwIGl0cyBnYXJiYWdlIGNvbGxlY3Rpb24uCisKKyAg
ICAgICAgQ2xlYXJpbmcgdGhvc2UgcmVmZXJlbmNlcyBicmVha3MgYSByZWZlcmVuY2UgY3ljbGUK
KyAgICAgICAgKGBgRXhjZXB0aW9uSW5mb2BgIC0tPiBjYXVnaHQgZXhjZXB0aW9uIC0tPiBmcmFt
ZSBzdGFjayByYWlzaW5nCisgICAgICAgIHRoZSBleGNlcHRpb24gLS0+IGN1cnJlbnQgZnJhbWUg
c3RhY2sgLS0+IGxvY2FsIHZhcmlhYmxlcyAtLT4KKyAgICAgICAgYGBFeGNlcHRpb25JbmZvYGAp
IHdoaWNoIG1ha2VzIFB5dGhvbiBrZWVwIGFsbCBvYmplY3RzIHJlZmVyZW5jZWQKKyAgICAgICAg
ZnJvbSB0aGF0IGN5Y2xlIChpbmNsdWRpbmcgYWxsIGxvY2FsIHZhcmlhYmxlcyBpbiB0aGUgY3Vy
cmVudAorICAgICAgICBmcmFtZSkgYWxpdmUgdW50aWwgdGhlIG5leHQgY3ljbGljIGdhcmJhZ2Ug
Y29sbGVjdGlvbiBydW4uIFNlZSB0aGUKKyAgICAgICAgb2ZmaWNpYWwgUHl0aG9uIGBgdHJ5YGAg
c3RhdGVtZW50IGRvY3VtZW50YXRpb24gZm9yIG1vcmUgZGV0YWlsZWQKKyAgICAgICAgaW5mb3Jt
YXRpb24uCisKKyAgICAiIiIKKyAgICBfX3RyYWNlYmFja2hpZGVfXyA9IFRydWUKKyAgICBpZiBl
eHBlY3RlZF9leGNlcHRpb24gaXMgQXNzZXJ0aW9uRXJyb3I6CisgICAgICAgICMgd2Ugd2FudCB0
byBjYXRjaCBhIEFzc2VydGlvbkVycm9yCisgICAgICAgICMgcmVwbGFjZSBvdXIgc3ViY2xhc3Mg
d2l0aCB0aGUgYnVpbHRpbiBvbmUKKyAgICAgICAgIyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3B5
dGVzdC1kZXYvcHl0ZXN0L2lzc3Vlcy8xNzYKKyAgICAgICAgZnJvbSBfcHl0ZXN0LmFzc2VydGlv
bi51dGlsIGltcG9ydCBCdWlsdGluQXNzZXJ0aW9uRXJyb3IgXAorICAgICAgICAgICAgYXMgZXhw
ZWN0ZWRfZXhjZXB0aW9uCisgICAgbXNnID0gKCJleGNlcHRpb25zIG11c3QgYmUgb2xkLXN0eWxl
IGNsYXNzZXMgb3IiCisgICAgICAgICAgICIgZGVyaXZlZCBmcm9tIEJhc2VFeGNlcHRpb24sIG5v
dCAlcyIpCisgICAgaWYgaXNpbnN0YW5jZShleHBlY3RlZF9leGNlcHRpb24sIHR1cGxlKToKKyAg
ICAgICAgZm9yIGV4YyBpbiBleHBlY3RlZF9leGNlcHRpb246CisgICAgICAgICAgICBpZiBub3Qg
aXNjbGFzcyhleGMpOgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcihtc2cgJSB0eXBl
KGV4YykpCisgICAgZWxpZiBub3QgaXNjbGFzcyhleHBlY3RlZF9leGNlcHRpb24pOgorICAgICAg
ICByYWlzZSBUeXBlRXJyb3IobXNnICUgdHlwZShleHBlY3RlZF9leGNlcHRpb24pKQorCisgICAg
aWYgbm90IGFyZ3M6CisgICAgICAgIHJldHVybiBSYWlzZXNDb250ZXh0KGV4cGVjdGVkX2V4Y2Vw
dGlvbikKKyAgICBlbGlmIGlzaW5zdGFuY2UoYXJnc1swXSwgc3RyKToKKyAgICAgICAgY29kZSwg
PSBhcmdzCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGNvZGUsIHN0cikKKyAgICAgICAgZnJh
bWUgPSBzeXMuX2dldGZyYW1lKDEpCisgICAgICAgIGxvYyA9IGZyYW1lLmZfbG9jYWxzLmNvcHko
KQorICAgICAgICBsb2MudXBkYXRlKGt3YXJncykKKyAgICAgICAgI3ByaW50ICJyYWlzZXMgZnJh
bWUgc2NvcGU6ICVyIiAlIGZyYW1lLmZfbG9jYWxzCisgICAgICAgIHRyeToKKyAgICAgICAgICAg
IGNvZGUgPSBfcHl0ZXN0Ll9jb2RlLlNvdXJjZShjb2RlKS5jb21waWxlKCkKKyAgICAgICAgICAg
IHB5LmJ1aWx0aW4uZXhlY18oY29kZSwgZnJhbWUuZl9nbG9iYWxzLCBsb2MpCisgICAgICAgICAg
ICAjIFhYWCBkaWRuJ1QgbWVhbiBmX2dsb2JhbHMgPT0gZl9sb2NhbHMgc29tZXRoaW5nIHNwZWNp
YWw/CisgICAgICAgICAgICAjICAgICB0aGlzIGlzIGRlc3Ryb3llZCBoZXJlIC4uLgorICAgICAg
ICBleGNlcHQgZXhwZWN0ZWRfZXhjZXB0aW9uOgorICAgICAgICAgICAgcmV0dXJuIF9weXRlc3Qu
X2NvZGUuRXhjZXB0aW9uSW5mbygpCisgICAgZWxzZToKKyAgICAgICAgZnVuYyA9IGFyZ3NbMF0K
KyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZnVuYygqYXJnc1sxOl0sICoqa3dhcmdzKQorICAg
ICAgICBleGNlcHQgZXhwZWN0ZWRfZXhjZXB0aW9uOgorICAgICAgICAgICAgcmV0dXJuIF9weXRl
c3QuX2NvZGUuRXhjZXB0aW9uSW5mbygpCisgICAgcHl0ZXN0LmZhaWwoIkRJRCBOT1QgUkFJU0Ug
ezB9Ii5mb3JtYXQoZXhwZWN0ZWRfZXhjZXB0aW9uKSkKKworY2xhc3MgUmFpc2VzQ29udGV4dChv
YmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleHBlY3RlZF9leGNlcHRpb24pOgorICAg
ICAgICBzZWxmLmV4cGVjdGVkX2V4Y2VwdGlvbiA9IGV4cGVjdGVkX2V4Y2VwdGlvbgorICAgICAg
ICBzZWxmLmV4Y2luZm8gPSBOb25lCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAg
ICBzZWxmLmV4Y2luZm8gPSBvYmplY3QuX19uZXdfXyhfcHl0ZXN0Ll9jb2RlLkV4Y2VwdGlvbklu
Zm8pCisgICAgICAgIHJldHVybiBzZWxmLmV4Y2luZm8KKworICAgIGRlZiBfX2V4aXRfXyhzZWxm
LCAqdHApOgorICAgICAgICBfX3RyYWNlYmFja2hpZGVfXyA9IFRydWUKKyAgICAgICAgaWYgdHBb
MF0gaXMgTm9uZToKKyAgICAgICAgICAgIHB5dGVzdC5mYWlsKCJESUQgTk9UIFJBSVNFIikKKyAg
ICAgICAgaWYgc3lzLnZlcnNpb25faW5mbyA8ICgyLCA3KToKKyAgICAgICAgICAgICMgcHkyNjog
b24gX19leGl0X18oKSBleGNfdmFsdWUgb2Z0ZW4gZG9lcyBub3QgY29udGFpbiB0aGUKKyAgICAg
ICAgICAgICMgZXhjZXB0aW9uIHZhbHVlLgorICAgICAgICAgICAgIyBodHRwOi8vYnVncy5weXRo
b24ub3JnL2lzc3VlNzg1MworICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UodHBbMV0sIEJh
c2VFeGNlcHRpb24pOgorICAgICAgICAgICAgICAgIGV4Y190eXBlLCB2YWx1ZSwgdHJhY2ViYWNr
ID0gdHAKKyAgICAgICAgICAgICAgICB0cCA9IGV4Y190eXBlLCBleGNfdHlwZSh2YWx1ZSksIHRy
YWNlYmFjaworICAgICAgICBzZWxmLmV4Y2luZm8uX19pbml0X18odHApCisgICAgICAgIHJldHVy
biBpc3N1YmNsYXNzKHNlbGYuZXhjaW5mby50eXBlLCBzZWxmLmV4cGVjdGVkX2V4Y2VwdGlvbikK
KworIworIyAgdGhlIGJhc2ljIHB5dGVzdCBGdW5jdGlvbiBpdGVtCisjCisKK2NsYXNzIEZ1bmN0
aW9uKEZ1bmN0aW9uTWl4aW4sIHB5dGVzdC5JdGVtLCBGdW5jYXJnbmFtZXNDb21wYXRBdHRyKToK
KyAgICAiIiIgYSBGdW5jdGlvbiBJdGVtIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIGFu
ZCBleGVjdXRpbmcgYQorICAgIFB5dGhvbiB0ZXN0IGZ1bmN0aW9uLgorICAgICIiIgorICAgIF9n
ZW5pZCA9IE5vbmUKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgcGFyZW50LCBhcmdzPU5v
bmUsIGNvbmZpZz1Ob25lLAorICAgICAgICAgICAgICAgICBjYWxsc3BlYz1Ob25lLCBjYWxsb2Jq
PU5PVFNFVCwga2V5d29yZHM9Tm9uZSwgc2Vzc2lvbj1Ob25lLAorICAgICAgICAgICAgICAgICBm
aXh0dXJlaW5mbz1Ob25lKToKKyAgICAgICAgc3VwZXIoRnVuY3Rpb24sIHNlbGYpLl9faW5pdF9f
KG5hbWUsIHBhcmVudCwgY29uZmlnPWNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNlc3Npb249c2Vzc2lvbikKKyAgICAgICAgc2VsZi5fYXJncyA9IGFyZ3MK
KyAgICAgICAgaWYgY2FsbG9iaiBpcyBub3QgTk9UU0VUOgorICAgICAgICAgICAgc2VsZi5vYmog
PSBjYWxsb2JqCisKKyAgICAgICAgc2VsZi5rZXl3b3Jkcy51cGRhdGUoc2VsZi5vYmouX19kaWN0
X18pCisgICAgICAgIGlmIGNhbGxzcGVjOgorICAgICAgICAgICAgc2VsZi5jYWxsc3BlYyA9IGNh
bGxzcGVjCisgICAgICAgICAgICBzZWxmLmtleXdvcmRzLnVwZGF0ZShjYWxsc3BlYy5rZXl3b3Jk
cykKKyAgICAgICAgaWYga2V5d29yZHM6CisgICAgICAgICAgICBzZWxmLmtleXdvcmRzLnVwZGF0
ZShrZXl3b3JkcykKKworICAgICAgICBpZiBmaXh0dXJlaW5mbyBpcyBOb25lOgorICAgICAgICAg
ICAgZml4dHVyZWluZm8gPSBzZWxmLnNlc3Npb24uX2ZpeHR1cmVtYW5hZ2VyLmdldGZpeHR1cmVp
bmZvKAorICAgICAgICAgICAgICAgIHNlbGYucGFyZW50LCBzZWxmLm9iaiwgc2VsZi5jbHMsCisg
ICAgICAgICAgICAgICAgZnVuY2FyZ3M9bm90IHNlbGYuX2lzeWllbGRlZGZ1bmN0aW9uKCkpCisg
ICAgICAgIHNlbGYuX2ZpeHR1cmVpbmZvID0gZml4dHVyZWluZm8KKyAgICAgICAgc2VsZi5maXh0
dXJlbmFtZXMgPSBmaXh0dXJlaW5mby5uYW1lc19jbG9zdXJlCisgICAgICAgIHNlbGYuX2luaXRy
ZXF1ZXN0KCkKKworICAgIGRlZiBfaW5pdHJlcXVlc3Qoc2VsZik6CisgICAgICAgIHNlbGYuZnVu
Y2FyZ3MgPSB7fQorICAgICAgICBpZiBzZWxmLl9pc3lpZWxkZWRmdW5jdGlvbigpOgorICAgICAg
ICAgICAgYXNzZXJ0IG5vdCBoYXNhdHRyKHNlbGYsICJjYWxsc3BlYyIpLCAoCisgICAgICAgICAg
ICAgICAgInlpZWxkZWQgZnVuY3Rpb25zIChkZXByZWNhdGVkKSBjYW5ub3QgaGF2ZSBmdW5jYXJn
cyIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICJjYWxsc3Bl
YyIpOgorICAgICAgICAgICAgICAgIGNhbGxzcGVjID0gc2VsZi5jYWxsc3BlYworICAgICAgICAg
ICAgICAgIGFzc2VydCBub3QgY2FsbHNwZWMuZnVuY2FyZ3MKKyAgICAgICAgICAgICAgICBzZWxm
Ll9nZW5pZCA9IGNhbGxzcGVjLmlkCisgICAgICAgICAgICAgICAgaWYgaGFzYXR0cihjYWxsc3Bl
YywgInBhcmFtIik6CisgICAgICAgICAgICAgICAgICAgIHNlbGYucGFyYW0gPSBjYWxsc3BlYy5w
YXJhbQorICAgICAgICBzZWxmLl9yZXF1ZXN0ID0gRml4dHVyZVJlcXVlc3Qoc2VsZikKKworICAg
IEBwcm9wZXJ0eQorICAgIGRlZiBmdW5jdGlvbihzZWxmKToKKyAgICAgICAgInVuZGVybHlpbmcg
cHl0aG9uICdmdW5jdGlvbicgb2JqZWN0IgorICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLm9i
aiwgJ2ltX2Z1bmMnLCBzZWxmLm9iaikKKworICAgIGRlZiBfZ2V0b2JqKHNlbGYpOgorICAgICAg
ICBuYW1lID0gc2VsZi5uYW1lCisgICAgICAgIGkgPSBuYW1lLmZpbmQoIlsiKSAjIHBhcmFtZXRy
aXphdGlvbgorICAgICAgICBpZiBpICE9IC0xOgorICAgICAgICAgICAgbmFtZSA9IG5hbWVbOmld
CisgICAgICAgIHJldHVybiBnZXRhdHRyKHNlbGYucGFyZW50Lm9iaiwgbmFtZSkKKworICAgIEBw
cm9wZXJ0eQorICAgIGRlZiBfcHlmdW5jaXRlbShzZWxmKToKKyAgICAgICAgIihjb21wYXRvbmx5
KSBmb3IgY29kZSBleHBlY3RpbmcgcHl0ZXN0LTIuMiBzdHlsZSByZXF1ZXN0IG9iamVjdHMiCisg
ICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX2lzeWllbGRlZGZ1bmN0aW9uKHNlbGYpOgor
ICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLCAiX2FyZ3MiLCBOb25lKSBpcyBub3QgTm9uZQor
CisgICAgZGVmIHJ1bnRlc3Qoc2VsZik6CisgICAgICAgICIiIiBleGVjdXRlIHRoZSB1bmRlcmx5
aW5nIHRlc3QgZnVuY3Rpb24uICIiIgorICAgICAgICBzZWxmLmlob29rLnB5dGVzdF9weWZ1bmNf
Y2FsbChweWZ1bmNpdGVtPXNlbGYpCisKKyAgICBkZWYgc2V0dXAoc2VsZik6CisgICAgICAgICMg
Y2hlY2sgaWYgcGFyYW1ldHJpemF0aW9uIGhhcHBlbmQgd2l0aCBhbiBlbXB0eSBsaXN0CisgICAg
ICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuY2FsbHNwZWMuX2VtcHR5cGFyYW1zcGVjaWZpZWQK
KyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgZnMsIGxpbmVubyA9IHNlbGYuX2dldGZzbGluZW5vKCkKKyAg
ICAgICAgICAgIHB5dGVzdC5za2lwKCJnb3QgZW1wdHkgcGFyYW1ldGVyIHNldCwgZnVuY3Rpb24g
JXMgYXQgJXM6JWQiICUoCisgICAgICAgICAgICAgICAgc2VsZi5mdW5jdGlvbi5fX25hbWVfXywg
ZnMsIGxpbmVubykpCisgICAgICAgIHN1cGVyKEZ1bmN0aW9uLCBzZWxmKS5zZXR1cCgpCisgICAg
ICAgIGZpbGxmaXh0dXJlcyhzZWxmKQorCisKK3Njb3BlMnByb3BzID0gZGljdChzZXNzaW9uPSgp
KQorc2NvcGUycHJvcHNbIm1vZHVsZSJdID0gKCJmc3BhdGgiLCAibW9kdWxlIikKK3Njb3BlMnBy
b3BzWyJjbGFzcyJdID0gc2NvcGUycHJvcHNbIm1vZHVsZSJdICsgKCJjbHMiLCkKK3Njb3BlMnBy
b3BzWyJpbnN0YW5jZSJdID0gc2NvcGUycHJvcHNbImNsYXNzIl0gKyAoImluc3RhbmNlIiwgKQor
c2NvcGUycHJvcHNbImZ1bmN0aW9uIl0gPSBzY29wZTJwcm9wc1siaW5zdGFuY2UiXSArICgiZnVu
Y3Rpb24iLCAia2V5d29yZHMiKQorCitkZWYgc2NvcGVwcm9wZXJ0eShuYW1lPU5vbmUsIGRvYz1O
b25lKToKKyAgICBkZWYgZGVjb3JhdGVzY29wZShmdW5jKToKKyAgICAgICAgc2NvcGVuYW1lID0g
bmFtZSBvciBmdW5jLl9fbmFtZV9fCisgICAgICAgIGRlZiBwcm92aWRlKHNlbGYpOgorICAgICAg
ICAgICAgaWYgZnVuYy5fX25hbWVfXyBpbiBzY29wZTJwcm9wc1tzZWxmLnNjb3BlXToKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZnVuYyhzZWxmKQorICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRl
RXJyb3IoIiVzIG5vdCBhdmFpbGFibGUgaW4gJXMtc2NvcGVkIGNvbnRleHQiICUgKAorICAgICAg
ICAgICAgICAgIHNjb3BlbmFtZSwgc2VsZi5zY29wZSkpCisgICAgICAgIHJldHVybiBwcm9wZXJ0
eShwcm92aWRlLCBOb25lLCBOb25lLCBmdW5jLl9fZG9jX18pCisgICAgcmV0dXJuIGRlY29yYXRl
c2NvcGUKKworCitjbGFzcyBGaXh0dXJlUmVxdWVzdChGdW5jYXJnbmFtZXNDb21wYXRBdHRyKToK
KyAgICAiIiIgQSByZXF1ZXN0IGZvciBhIGZpeHR1cmUgZnJvbSBhIHRlc3Qgb3IgZml4dHVyZSBm
dW5jdGlvbi4KKworICAgIEEgcmVxdWVzdCBvYmplY3QgZ2l2ZXMgYWNjZXNzIHRvIHRoZSByZXF1
ZXN0aW5nIHRlc3QgY29udGV4dAorICAgIGFuZCBoYXMgYW4gb3B0aW9uYWwgYGBwYXJhbWBgIGF0
dHJpYnV0ZSBpbiBjYXNlCisgICAgdGhlIGZpeHR1cmUgaXMgcGFyYW1ldHJpemVkIGluZGlyZWN0
bHkuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHlmdW5jaXRlbSk6CisgICAg
ICAgIHNlbGYuX3B5ZnVuY2l0ZW0gPSBweWZ1bmNpdGVtCisgICAgICAgICM6IGZpeHR1cmUgZm9y
IHdoaWNoIHRoaXMgcmVxdWVzdCBpcyBiZWluZyBwZXJmb3JtZWQKKyAgICAgICAgc2VsZi5maXh0
dXJlbmFtZSA9IE5vbmUKKyAgICAgICAgIzogU2NvcGUgc3RyaW5nLCBvbmUgb2YgImZ1bmN0aW9u
IiwgImNscyIsICJtb2R1bGUiLCAic2Vzc2lvbiIKKyAgICAgICAgc2VsZi5zY29wZSA9ICJmdW5j
dGlvbiIKKyAgICAgICAgc2VsZi5fZnVuY2FyZ3MgID0ge30KKyAgICAgICAgc2VsZi5fZml4dHVy
ZWRlZnMgPSB7fQorICAgICAgICBmaXh0dXJlaW5mbyA9IHB5ZnVuY2l0ZW0uX2ZpeHR1cmVpbmZv
CisgICAgICAgIHNlbGYuX2FyZzJmaXh0dXJlZGVmcyA9IGZpeHR1cmVpbmZvLm5hbWUyZml4dHVy
ZWRlZnMuY29weSgpCisgICAgICAgIHNlbGYuX2FyZzJpbmRleCA9IHt9CisgICAgICAgIHNlbGYu
Zml4dHVyZW5hbWVzID0gZml4dHVyZWluZm8ubmFtZXNfY2xvc3VyZQorICAgICAgICBzZWxmLl9m
aXh0dXJlbWFuYWdlciA9IHB5ZnVuY2l0ZW0uc2Vzc2lvbi5fZml4dHVyZW1hbmFnZXIKKworICAg
IEBwcm9wZXJ0eQorICAgIGRlZiBub2RlKHNlbGYpOgorICAgICAgICAiIiIgdW5kZXJseWluZyBj
b2xsZWN0aW9uIG5vZGUgKGRlcGVuZHMgb24gY3VycmVudCByZXF1ZXN0IHNjb3BlKSIiIgorICAg
ICAgICByZXR1cm4gc2VsZi5fZ2V0c2NvcGVpdGVtKHNlbGYuc2NvcGUpCisKKworICAgIGRlZiBf
Z2V0bmV4dGZpeHR1cmVkZWYoc2VsZiwgYXJnbmFtZSk6CisgICAgICAgIGZpeHR1cmVkZWZzID0g
c2VsZi5fYXJnMmZpeHR1cmVkZWZzLmdldChhcmduYW1lLCBOb25lKQorICAgICAgICBpZiBmaXh0
dXJlZGVmcyBpcyBOb25lOgorICAgICAgICAgICAgIyB3ZSBhcnJpdmUgaGVyZSBiZWNhdXNlIG9m
IGEgIGEgZHluYW1pYyBjYWxsIHRvCisgICAgICAgICAgICAjIGdldGZ1bmNhcmd2YWx1ZShhcmdu
YW1lKSB1c2FnZSB3aGljaCB3YXMgbmF0dXJhbGx5CisgICAgICAgICAgICAjIG5vdCBrbm93biBh
dCBwYXJzaW5nL2NvbGxlY3Rpb24gdGltZQorICAgICAgICAgICAgZml4dHVyZWRlZnMgPSBzZWxm
Ll9maXh0dXJlbWFuYWdlci5nZXRmaXh0dXJlZGVmcygKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhcmduYW1lLCBzZWxmLl9weWZ1bmNpdGVtLnBhcmVudC5ub2RlaWQpCisgICAgICAgICAg
ICBzZWxmLl9hcmcyZml4dHVyZWRlZnNbYXJnbmFtZV0gPSBmaXh0dXJlZGVmcworICAgICAgICAj
IGZpeHR1cmVkZWZzIGxpc3QgaXMgaW1tdXRhYmxlIHNvIHdlIG1haW50YWluIGEgZGVjcmVhc2lu
ZyBpbmRleAorICAgICAgICBpbmRleCA9IHNlbGYuX2FyZzJpbmRleC5nZXQoYXJnbmFtZSwgMCkg
LSAxCisgICAgICAgIGlmIGZpeHR1cmVkZWZzIGlzIE5vbmUgb3IgKC1pbmRleCA+IGxlbihmaXh0
dXJlZGVmcykpOgorICAgICAgICAgICAgcmFpc2UgRml4dHVyZUxvb2t1cEVycm9yKGFyZ25hbWUs
IHNlbGYpCisgICAgICAgIHNlbGYuX2FyZzJpbmRleFthcmduYW1lXSA9IGluZGV4CisgICAgICAg
IHJldHVybiBmaXh0dXJlZGVmc1tpbmRleF0KKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBjb25m
aWcoc2VsZik6CisgICAgICAgICIiIiB0aGUgcHl0ZXN0IGNvbmZpZyBvYmplY3QgYXNzb2NpYXRl
ZCB3aXRoIHRoaXMgcmVxdWVzdC4gIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9weWZ1bmNpdGVt
LmNvbmZpZworCisKKyAgICBAc2NvcGVwcm9wZXJ0eSgpCisgICAgZGVmIGZ1bmN0aW9uKHNlbGYp
OgorICAgICAgICAiIiIgdGVzdCBmdW5jdGlvbiBvYmplY3QgaWYgdGhlIHJlcXVlc3QgaGFzIGEg
cGVyLWZ1bmN0aW9uIHNjb3BlLiAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3B5ZnVuY2l0ZW0u
b2JqCisKKyAgICBAc2NvcGVwcm9wZXJ0eSgiY2xhc3MiKQorICAgIGRlZiBjbHMoc2VsZik6Cisg
ICAgICAgICIiIiBjbGFzcyAoY2FuIGJlIE5vbmUpIHdoZXJlIHRoZSB0ZXN0IGZ1bmN0aW9uIHdh
cyBjb2xsZWN0ZWQuICIiIgorICAgICAgICBjbHNjb2wgPSBzZWxmLl9weWZ1bmNpdGVtLmdldHBh
cmVudChweXRlc3QuQ2xhc3MpCisgICAgICAgIGlmIGNsc2NvbDoKKyAgICAgICAgICAgIHJldHVy
biBjbHNjb2wub2JqCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaW5zdGFuY2Uoc2VsZik6Cisg
ICAgICAgICIiIiBpbnN0YW5jZSAoY2FuIGJlIE5vbmUpIG9uIHdoaWNoIHRlc3QgZnVuY3Rpb24g
d2FzIGNvbGxlY3RlZC4gIiIiCisgICAgICAgICMgdW5pdHRlc3Qgc3VwcG9ydCBoYWNrLCBzZWUg
X3B5dGVzdC51bml0dGVzdC5UZXN0Q2FzZUZ1bmN0aW9uCisgICAgICAgIHRyeToKKyAgICAgICAg
ICAgIHJldHVybiBzZWxmLl9weWZ1bmNpdGVtLl90ZXN0Y2FzZQorICAgICAgICBleGNlcHQgQXR0
cmlidXRlRXJyb3I6CisgICAgICAgICAgICBmdW5jdGlvbiA9IGdldGF0dHIoc2VsZiwgImZ1bmN0
aW9uIiwgTm9uZSkKKyAgICAgICAgICAgIGlmIGZ1bmN0aW9uIGlzIG5vdCBOb25lOgorICAgICAg
ICAgICAgICAgIHJldHVybiBweS5idWlsdGluLl9nZXRpbXNlbGYoZnVuY3Rpb24pCisKKyAgICBA
c2NvcGVwcm9wZXJ0eSgpCisgICAgZGVmIG1vZHVsZShzZWxmKToKKyAgICAgICAgIiIiIHB5dGhv
biBtb2R1bGUgb2JqZWN0IHdoZXJlIHRoZSB0ZXN0IGZ1bmN0aW9uIHdhcyBjb2xsZWN0ZWQuICIi
IgorICAgICAgICByZXR1cm4gc2VsZi5fcHlmdW5jaXRlbS5nZXRwYXJlbnQocHl0ZXN0Lk1vZHVs
ZSkub2JqCisKKyAgICBAc2NvcGVwcm9wZXJ0eSgpCisgICAgZGVmIGZzcGF0aChzZWxmKToKKyAg
ICAgICAgIiIiIHRoZSBmaWxlIHN5c3RlbSBwYXRoIG9mIHRoZSB0ZXN0IG1vZHVsZSB3aGljaCBj
b2xsZWN0ZWQgdGhpcyB0ZXN0LiAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3B5ZnVuY2l0ZW0u
ZnNwYXRoCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYga2V5d29yZHMoc2VsZik6CisgICAgICAg
ICIiIiBrZXl3b3Jkcy9tYXJrZXJzIGRpY3Rpb25hcnkgZm9yIHRoZSB1bmRlcmx5aW5nIG5vZGUu
ICIiIgorICAgICAgICByZXR1cm4gc2VsZi5ub2RlLmtleXdvcmRzCisKKyAgICBAcHJvcGVydHkK
KyAgICBkZWYgc2Vzc2lvbihzZWxmKToKKyAgICAgICAgIiIiIHB5dGVzdCBzZXNzaW9uIG9iamVj
dC4gIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9weWZ1bmNpdGVtLnNlc3Npb24KKworICAgIGRl
ZiBhZGRmaW5hbGl6ZXIoc2VsZiwgZmluYWxpemVyKToKKyAgICAgICAgIiIiIGFkZCBmaW5hbGl6
ZXIvdGVhcmRvd24gZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGFmdGVyIHRoZQorICAgICAgICBsYXN0
IHRlc3Qgd2l0aGluIHRoZSByZXF1ZXN0aW5nIHRlc3QgY29udGV4dCBmaW5pc2hlZAorICAgICAg
ICBleGVjdXRpb24uICIiIgorICAgICAgICAjIFhYWCB1c3VhbGx5IHRoaXMgbWV0aG9kIGlzIHNo
YWRvd2VkIGJ5IGZpeHR1cmVkZWYgc3BlY2lmaWMgb25lcworICAgICAgICBzZWxmLl9hZGRmaW5h
bGl6ZXIoZmluYWxpemVyLCBzY29wZT1zZWxmLnNjb3BlKQorCisgICAgZGVmIF9hZGRmaW5hbGl6
ZXIoc2VsZiwgZmluYWxpemVyLCBzY29wZSk6CisgICAgICAgIGNvbGl0ZW0gPSBzZWxmLl9nZXRz
Y29wZWl0ZW0oc2NvcGUpCisgICAgICAgIHNlbGYuX3B5ZnVuY2l0ZW0uc2Vzc2lvbi5fc2V0dXBz
dGF0ZS5hZGRmaW5hbGl6ZXIoCisgICAgICAgICAgICBmaW5hbGl6ZXI9ZmluYWxpemVyLCBjb2xp
dGVtPWNvbGl0ZW0pCisKKyAgICBkZWYgYXBwbHltYXJrZXIoc2VsZiwgbWFya2VyKToKKyAgICAg
ICAgIiIiIEFwcGx5IGEgbWFya2VyIHRvIGEgc2luZ2xlIHRlc3QgZnVuY3Rpb24gaW52b2NhdGlv
bi4KKyAgICAgICAgVGhpcyBtZXRob2QgaXMgdXNlZnVsIGlmIHlvdSBkb24ndCB3YW50IHRvIGhh
dmUgYSBrZXl3b3JkL21hcmtlcgorICAgICAgICBvbiBhbGwgZnVuY3Rpb24gaW52b2NhdGlvbnMu
CisKKyAgICAgICAgOmFyZyBtYXJrZXI6IGEgOnB5OmNsYXNzOmBfcHl0ZXN0Lm1hcmsuTWFya0Rl
Y29yYXRvcmAgb2JqZWN0CisgICAgICAgICAgICBjcmVhdGVkIGJ5IGEgY2FsbCB0byBgYHB5dGVz
dC5tYXJrLk5BTUUoLi4uKWBgLgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgc2VsZi5ub2RlLmtleXdvcmRzW21hcmtlci5tYXJrbmFtZV0gPSBtYXJrZXIKKyAgICAgICAg
ZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihtYXJr
ZXIpCisKKyAgICBkZWYgcmFpc2VlcnJvcihzZWxmLCBtc2cpOgorICAgICAgICAiIiIgcmFpc2Ug
YSBGaXh0dXJlTG9va3VwRXJyb3Igd2l0aCB0aGUgZ2l2ZW4gbWVzc2FnZS4gIiIiCisgICAgICAg
IHJhaXNlIHNlbGYuX2ZpeHR1cmVtYW5hZ2VyLkZpeHR1cmVMb29rdXBFcnJvcihOb25lLCBzZWxm
LCBtc2cpCisKKyAgICBkZWYgX2ZpbGxmaXh0dXJlcyhzZWxmKToKKyAgICAgICAgaXRlbSA9IHNl
bGYuX3B5ZnVuY2l0ZW0KKyAgICAgICAgZml4dHVyZW5hbWVzID0gZ2V0YXR0cihpdGVtLCAiZml4
dHVyZW5hbWVzIiwgc2VsZi5maXh0dXJlbmFtZXMpCisgICAgICAgIGZvciBhcmduYW1lIGluIGZp
eHR1cmVuYW1lczoKKyAgICAgICAgICAgIGlmIGFyZ25hbWUgbm90IGluIGl0ZW0uZnVuY2FyZ3M6
CisgICAgICAgICAgICAgICAgaXRlbS5mdW5jYXJnc1thcmduYW1lXSA9IHNlbGYuZ2V0ZnVuY2Fy
Z3ZhbHVlKGFyZ25hbWUpCisKKyAgICBkZWYgY2FjaGVkX3NldHVwKHNlbGYsIHNldHVwLCB0ZWFy
ZG93bj1Ob25lLCBzY29wZT0ibW9kdWxlIiwgZXh0cmFrZXk9Tm9uZSk6CisgICAgICAgICIiIiAo
ZGVwcmVjYXRlZCkgUmV0dXJuIGEgdGVzdGluZyByZXNvdXJjZSBtYW5hZ2VkIGJ5IGBgc2V0dXBg
YCAmCisgICAgICAgIGBgdGVhcmRvd25gYCBjYWxscy4gIGBgc2NvcGVgYCBhbmQgYGBleHRyYWtl
eWBgIGRldGVybWluZSB3aGVuIHRoZQorICAgICAgICBgYHRlYXJkb3duYGAgZnVuY3Rpb24gd2ls
bCBiZSBjYWxsZWQgc28gdGhhdCBzdWJzZXF1ZW50IGNhbGxzIHRvCisgICAgICAgIGBgc2V0dXBg
YCB3b3VsZCByZWNyZWF0ZSB0aGUgcmVzb3VyY2UuICBXaXRoIHB5dGVzdC0yLjMgeW91IG9mdGVu
CisgICAgICAgIGRvIG5vdCBuZWVkIGBgY2FjaGVkX3NldHVwKClgYCBhcyB5b3UgY2FuIGRpcmVj
dGx5IGRlY2xhcmUgYSBzY29wZQorICAgICAgICBvbiBhIGZpeHR1cmUgZnVuY3Rpb24gYW5kIHJl
Z2lzdGVyIGEgZmluYWxpemVyIHRocm91Z2gKKyAgICAgICAgYGByZXF1ZXN0LmFkZGZpbmFsaXpl
cigpYGAuCisKKyAgICAgICAgOmFyZyB0ZWFyZG93bjogZnVuY3Rpb24gcmVjZWl2aW5nIGEgcHJl
dmlvdXNseSBzZXR1cCByZXNvdXJjZS4KKyAgICAgICAgOmFyZyBzZXR1cDogYSBuby1hcmd1bWVu
dCBmdW5jdGlvbiBjcmVhdGluZyBhIHJlc291cmNlLgorICAgICAgICA6YXJnIHNjb3BlOiBhIHN0
cmluZyB2YWx1ZSBvdXQgb2YgYGBmdW5jdGlvbmBgLCBgYGNsYXNzYGAsIGBgbW9kdWxlYGAKKyAg
ICAgICAgICAgIG9yIGBgc2Vzc2lvbmBgIGluZGljYXRpbmcgdGhlIGNhY2hpbmcgbGlmZWN5Y2xl
IG9mIHRoZSByZXNvdXJjZS4KKyAgICAgICAgOmFyZyBleHRyYWtleTogYWRkZWQgdG8gaW50ZXJu
YWwgY2FjaGluZyBrZXkgb2YgKGZ1bmNhcmduYW1lLCBzY29wZSkuCisgICAgICAgICIiIgorICAg
ICAgICBpZiBub3QgaGFzYXR0cihzZWxmLmNvbmZpZywgJ19zZXR1cGNhY2hlJyk6CisgICAgICAg
ICAgICBzZWxmLmNvbmZpZy5fc2V0dXBjYWNoZSA9IHt9ICMgWFhYIHdlYWtyZWY/CisgICAgICAg
IGNhY2hla2V5ID0gKHNlbGYuZml4dHVyZW5hbWUsIHNlbGYuX2dldHNjb3BlaXRlbShzY29wZSks
IGV4dHJha2V5KQorICAgICAgICBjYWNoZSA9IHNlbGYuY29uZmlnLl9zZXR1cGNhY2hlCisgICAg
ICAgIHRyeToKKyAgICAgICAgICAgIHZhbCA9IGNhY2hlW2NhY2hla2V5XQorICAgICAgICBleGNl
cHQgS2V5RXJyb3I6CisgICAgICAgICAgICBzZWxmLl9jaGVja19zY29wZShzZWxmLmZpeHR1cmVu
YW1lLCBzZWxmLnNjb3BlLCBzY29wZSkKKyAgICAgICAgICAgIHZhbCA9IHNldHVwKCkKKyAgICAg
ICAgICAgIGNhY2hlW2NhY2hla2V5XSA9IHZhbAorICAgICAgICAgICAgaWYgdGVhcmRvd24gaXMg
bm90IE5vbmU6CisgICAgICAgICAgICAgICAgZGVmIGZpbmFsaXplcigpOgorICAgICAgICAgICAg
ICAgICAgICBkZWwgY2FjaGVbY2FjaGVrZXldCisgICAgICAgICAgICAgICAgICAgIHRlYXJkb3du
KHZhbCkKKyAgICAgICAgICAgICAgICBzZWxmLl9hZGRmaW5hbGl6ZXIoZmluYWxpemVyLCBzY29w
ZT1zY29wZSkKKyAgICAgICAgcmV0dXJuIHZhbAorCisgICAgZGVmIGdldGZ1bmNhcmd2YWx1ZShz
ZWxmLCBhcmduYW1lKToKKyAgICAgICAgIiIiIER5bmFtaWNhbGx5IHJldHJpZXZlIGEgbmFtZWQg
Zml4dHVyZSBmdW5jdGlvbiBhcmd1bWVudC4KKworICAgICAgICBBcyBvZiBweXRlc3QtMi4zLCBp
dCBpcyBlYXNpZXIgYW5kIHVzdWFsbHkgYmV0dGVyIHRvIGFjY2VzcyBvdGhlcgorICAgICAgICBm
aXh0dXJlIHZhbHVlcyBieSBzdGF0aW5nIGl0IGFzIGFuIGlucHV0IGFyZ3VtZW50IGluIHRoZSBm
aXh0dXJlCisgICAgICAgIGZ1bmN0aW9uLiAgSWYgeW91IG9ubHkgY2FuIGRlY2lkZSBhYm91dCB1
c2luZyBhbm90aGVyIGZpeHR1cmUgYXQgdGVzdAorICAgICAgICBzZXR1cCB0aW1lLCB5b3UgbWF5
IHVzZSB0aGlzIGZ1bmN0aW9uIHRvIHJldHJpZXZlIGl0IGluc2lkZSBhIGZpeHR1cmUKKyAgICAg
ICAgZnVuY3Rpb24gYm9keS4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9nZXRf
YWN0aXZlX2ZpeHR1cmVkZWYoYXJnbmFtZSkuY2FjaGVkX3Jlc3VsdFswXQorCisgICAgZGVmIF9n
ZXRfYWN0aXZlX2ZpeHR1cmVkZWYoc2VsZiwgYXJnbmFtZSk6CisgICAgICAgIHRyeToKKyAgICAg
ICAgICAgIHJldHVybiBzZWxmLl9maXh0dXJlZGVmc1thcmduYW1lXQorICAgICAgICBleGNlcHQg
S2V5RXJyb3I6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZml4dHVyZWRlZiA9
IHNlbGYuX2dldG5leHRmaXh0dXJlZGVmKGFyZ25hbWUpCisgICAgICAgICAgICBleGNlcHQgRml4
dHVyZUxvb2t1cEVycm9yOgorICAgICAgICAgICAgICAgIGlmIGFyZ25hbWUgPT0gInJlcXVlc3Qi
OgorICAgICAgICAgICAgICAgICAgICBjbGFzcyBQc2V1ZG9GaXh0dXJlRGVmOgorICAgICAgICAg
ICAgICAgICAgICAgICAgY2FjaGVkX3Jlc3VsdCA9IChzZWxmLCBbMF0sIE5vbmUpCisgICAgICAg
ICAgICAgICAgICAgICAgICBzY29wZSA9ICJmdW5jdGlvbiIKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIFBzZXVkb0ZpeHR1cmVEZWYKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAj
IHJlbW92ZSBpbmRlbnQgdG8gcHJldmVudCB0aGUgcHl0aG9uMyBleGNlcHRpb24KKyAgICAgICAg
IyBmcm9tIGxlYWtpbmcgaW50byB0aGUgY2FsbAorICAgICAgICByZXN1bHQgPSBzZWxmLl9nZXRm
dW5jYXJndmFsdWUoZml4dHVyZWRlZikKKyAgICAgICAgc2VsZi5fZnVuY2FyZ3NbYXJnbmFtZV0g
PSByZXN1bHQKKyAgICAgICAgc2VsZi5fZml4dHVyZWRlZnNbYXJnbmFtZV0gPSBmaXh0dXJlZGVm
CisgICAgICAgIHJldHVybiBmaXh0dXJlZGVmCisKKyAgICBkZWYgX2dldF9maXh0dXJlc3RhY2so
c2VsZik6CisgICAgICAgIGN1cnJlbnQgPSBzZWxmCisgICAgICAgIGwgPSBbXQorICAgICAgICB3
aGlsZSAxOgorICAgICAgICAgICAgZml4dHVyZWRlZiA9IGdldGF0dHIoY3VycmVudCwgIl9maXh0
dXJlZGVmIiwgTm9uZSkKKyAgICAgICAgICAgIGlmIGZpeHR1cmVkZWYgaXMgTm9uZToKKyAgICAg
ICAgICAgICAgICBsLnJldmVyc2UoKQorICAgICAgICAgICAgICAgIHJldHVybiBsCisgICAgICAg
ICAgICBsLmFwcGVuZChmaXh0dXJlZGVmKQorICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQu
X3BhcmVudF9yZXF1ZXN0CisKKyAgICBkZWYgX2dldGZ1bmNhcmd2YWx1ZShzZWxmLCBmaXh0dXJl
ZGVmKToKKyAgICAgICAgIyBwcmVwYXJlIGEgc3VicmVxdWVzdCBvYmplY3QgYmVmb3JlIGNhbGxp
bmcgZml4dHVyZSBmdW5jdGlvbgorICAgICAgICAjIChsYXR0ZXIgbWFuYWdlZCBieSBmaXh0dXJl
ZGVmKQorICAgICAgICBhcmduYW1lID0gZml4dHVyZWRlZi5hcmduYW1lCisgICAgICAgIGZ1bmNp
dGVtID0gc2VsZi5fcHlmdW5jaXRlbQorICAgICAgICBzY29wZSA9IGZpeHR1cmVkZWYuc2NvcGUK
KyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGFyYW0gPSBmdW5jaXRlbS5jYWxsc3BlYy5nZXRw
YXJhbShhcmduYW1lKQorICAgICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBWYWx1ZUVycm9y
KToKKyAgICAgICAgICAgIHBhcmFtID0gTk9UU0VUCisgICAgICAgICAgICBwYXJhbV9pbmRleCA9
IDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgaW5kaWNlcyBtaWdodCBub3QgYmUgc2V0
IGlmIG9sZC1zdHlsZSBtZXRhZnVuYy5hZGRjYWxsKCkgd2FzIHVzZWQKKyAgICAgICAgICAgIHBh
cmFtX2luZGV4ID0gZnVuY2l0ZW0uY2FsbHNwZWMuaW5kaWNlcy5nZXQoYXJnbmFtZSwgMCkKKyAg
ICAgICAgICAgICMgaWYgYSBwYXJhbWV0cml6ZSBpbnZvY2F0aW9uIHNldCBhIHNjb3BlIGl0IHdp
bGwgb3ZlcnJpZGUKKyAgICAgICAgICAgICMgdGhlIHN0YXRpYyBzY29wZSBkZWZpbmVkIHdpdGgg
dGhlIGZpeHR1cmUgZnVuY3Rpb24KKyAgICAgICAgICAgIHBhcmFtc2NvcGVudW0gPSBmdW5jaXRl
bS5jYWxsc3BlYy5fYXJnMnNjb3BlbnVtLmdldChhcmduYW1lKQorICAgICAgICAgICAgaWYgcGFy
YW1zY29wZW51bSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzY29wZSA9IHNjb3Blc1tw
YXJhbXNjb3BlbnVtXQorCisgICAgICAgIHN1YnJlcXVlc3QgPSBTdWJSZXF1ZXN0KHNlbGYsIHNj
b3BlLCBwYXJhbSwgcGFyYW1faW5kZXgsIGZpeHR1cmVkZWYpCisKKyAgICAgICAgIyBjaGVjayBp
ZiBhIGhpZ2hlci1sZXZlbCBzY29wZWQgZml4dHVyZSBhY2Nlc3NlcyBhIGxvd2VyIGxldmVsIG9u
ZQorICAgICAgICBzdWJyZXF1ZXN0Ll9jaGVja19zY29wZShhcmduYW1lLCBzZWxmLnNjb3BlLCBz
Y29wZSkKKworICAgICAgICAjIGNsZWFyIHN5cy5leGNfaW5mbyBiZWZvcmUgaW52b2tpbmcgdGhl
IGZpeHR1cmUgKHB5dGhvbiBidWc/KQorICAgICAgICAjIGlmIGl0cyBub3QgZXhwbGljaXRseSBj
bGVhcmVkIGl0IHdpbGwgbGVhayBpbnRvIHRoZSBjYWxsCisgICAgICAgIGV4Y19jbGVhcigpCisg
ICAgICAgIHRyeToKKyAgICAgICAgICAgICMgY2FsbCB0aGUgZml4dHVyZSBmdW5jdGlvbgorICAg
ICAgICAgICAgdmFsID0gZml4dHVyZWRlZi5leGVjdXRlKHJlcXVlc3Q9c3VicmVxdWVzdCkKKyAg
ICAgICAgZmluYWxseToKKyAgICAgICAgICAgICMgaWYgZml4dHVyZSBmdW5jdGlvbiBmYWlsZWQg
aXQgbWlnaHQgaGF2ZSByZWdpc3RlcmVkIGZpbmFsaXplcnMKKyAgICAgICAgICAgIHNlbGYuc2Vz
c2lvbi5fc2V0dXBzdGF0ZS5hZGRmaW5hbGl6ZXIoZml4dHVyZWRlZi5maW5pc2gsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJlcXVlc3Qubm9k
ZSkKKyAgICAgICAgcmV0dXJuIHZhbAorCisgICAgZGVmIF9jaGVja19zY29wZShzZWxmLCBhcmdu
YW1lLCBpbnZva2luZ19zY29wZSwgcmVxdWVzdGVkX3Njb3BlKToKKyAgICAgICAgaWYgYXJnbmFt
ZSA9PSAicmVxdWVzdCI6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgc2NvcGVtaXNt
YXRjaChpbnZva2luZ19zY29wZSwgcmVxdWVzdGVkX3Njb3BlKToKKyAgICAgICAgICAgICMgdHJ5
IHRvIHJlcG9ydCBzb21ldGhpbmcgaGVscGZ1bAorICAgICAgICAgICAgbGluZXMgPSBzZWxmLl9m
YWN0b3J5dHJhY2ViYWNrKCkKKyAgICAgICAgICAgIHB5dGVzdC5mYWlsKCJTY29wZU1pc21hdGNo
OiBZb3UgdHJpZWQgdG8gYWNjZXNzIHRoZSAlciBzY29wZWQgIgorICAgICAgICAgICAgICAgICJm
aXh0dXJlICVyIHdpdGggYSAlciBzY29wZWQgcmVxdWVzdCBvYmplY3QsICIKKyAgICAgICAgICAg
ICAgICAiaW52b2x2ZWQgZmFjdG9yaWVzXG4lcyIgJSgKKyAgICAgICAgICAgICAgICAocmVxdWVz
dGVkX3Njb3BlLCBhcmduYW1lLCBpbnZva2luZ19zY29wZSwgIlxuIi5qb2luKGxpbmVzKSkpLAor
ICAgICAgICAgICAgICAgIHB5dHJhY2U9RmFsc2UpCisKKyAgICBkZWYgX2ZhY3Rvcnl0cmFjZWJh
Y2soc2VsZik6CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgZm9yIGZpeHR1cmVkZWYgaW4g
c2VsZi5fZ2V0X2ZpeHR1cmVzdGFjaygpOgorICAgICAgICAgICAgZmFjdG9yeSA9IGZpeHR1cmVk
ZWYuZnVuYworICAgICAgICAgICAgZnMsIGxpbmVubyA9IGdldGZzbGluZW5vKGZhY3RvcnkpCisg
ICAgICAgICAgICBwID0gc2VsZi5fcHlmdW5jaXRlbS5zZXNzaW9uLmZzcGF0aC5iZXN0cmVscGF0
aChmcykKKyAgICAgICAgICAgIGFyZ3MgPSBfZm9ybWF0X2FyZ3MoZmFjdG9yeSkKKyAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgiJXM6JWQ6ICBkZWYgJXMlcyIgJSgKKyAgICAgICAgICAgICAgICBw
LCBsaW5lbm8sIGZhY3RvcnkuX19uYW1lX18sIGFyZ3MpKQorICAgICAgICByZXR1cm4gbGluZXMK
KworICAgIGRlZiBfZ2V0c2NvcGVpdGVtKHNlbGYsIHNjb3BlKToKKyAgICAgICAgaWYgc2NvcGUg
PT0gImZ1bmN0aW9uIjoKKyAgICAgICAgICAgICMgdGhpcyBtaWdodCBhbHNvIGJlIGEgbm9uLWZ1
bmN0aW9uIEl0ZW0gZGVzcGl0ZSBpdHMgYXR0cmlidXRlIG5hbWUKKyAgICAgICAgICAgIHJldHVy
biBzZWxmLl9weWZ1bmNpdGVtCisgICAgICAgIG5vZGUgPSBnZXRfc2NvcGVfbm9kZShzZWxmLl9w
eWZ1bmNpdGVtLCBzY29wZSkKKyAgICAgICAgaWYgbm9kZSBpcyBOb25lIGFuZCBzY29wZSA9PSAi
Y2xhc3MiOgorICAgICAgICAgICAgIyBmYWxsYmFjayB0byBmdW5jdGlvbiBpdGVtIGl0c2VsZgor
ICAgICAgICAgICAgbm9kZSA9IHNlbGYuX3B5ZnVuY2l0ZW0KKyAgICAgICAgYXNzZXJ0IG5vZGUK
KyAgICAgICAgcmV0dXJuIG5vZGUKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAg
cmV0dXJuICI8Rml4dHVyZVJlcXVlc3QgZm9yICVyPiIgJShzZWxmLm5vZGUpCisKKworY2xhc3Mg
U3ViUmVxdWVzdChGaXh0dXJlUmVxdWVzdCk6CisgICAgIiIiIGEgc3ViIHJlcXVlc3QgZm9yIGhh
bmRsaW5nIGdldHRpbmcgYSBmaXh0dXJlIGZyb20gYQorICAgIHRlc3QgZnVuY3Rpb24vZml4dHVy
ZS4gIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlcXVlc3QsIHNjb3BlLCBwYXJhbSwgcGFy
YW1faW5kZXgsIGZpeHR1cmVkZWYpOgorICAgICAgICBzZWxmLl9wYXJlbnRfcmVxdWVzdCA9IHJl
cXVlc3QKKyAgICAgICAgc2VsZi5maXh0dXJlbmFtZSA9IGZpeHR1cmVkZWYuYXJnbmFtZQorICAg
ICAgICBpZiBwYXJhbSBpcyBub3QgTk9UU0VUOgorICAgICAgICAgICAgc2VsZi5wYXJhbSA9IHBh
cmFtCisgICAgICAgIHNlbGYucGFyYW1faW5kZXggPSBwYXJhbV9pbmRleAorICAgICAgICBzZWxm
LnNjb3BlID0gc2NvcGUKKyAgICAgICAgc2VsZi5fZml4dHVyZWRlZiA9IGZpeHR1cmVkZWYKKyAg
ICAgICAgc2VsZi5hZGRmaW5hbGl6ZXIgPSBmaXh0dXJlZGVmLmFkZGZpbmFsaXplcgorICAgICAg
ICBzZWxmLl9weWZ1bmNpdGVtID0gcmVxdWVzdC5fcHlmdW5jaXRlbQorICAgICAgICBzZWxmLl9m
dW5jYXJncyAgPSByZXF1ZXN0Ll9mdW5jYXJncworICAgICAgICBzZWxmLl9maXh0dXJlZGVmcyA9
IHJlcXVlc3QuX2ZpeHR1cmVkZWZzCisgICAgICAgIHNlbGYuX2FyZzJmaXh0dXJlZGVmcyA9IHJl
cXVlc3QuX2FyZzJmaXh0dXJlZGVmcworICAgICAgICBzZWxmLl9hcmcyaW5kZXggPSByZXF1ZXN0
Ll9hcmcyaW5kZXgKKyAgICAgICAgc2VsZi5maXh0dXJlbmFtZXMgPSByZXF1ZXN0LmZpeHR1cmVu
YW1lcworICAgICAgICBzZWxmLl9maXh0dXJlbWFuYWdlciA9IHJlcXVlc3QuX2ZpeHR1cmVtYW5h
Z2VyCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiPFN1YlJlcXVl
c3QgJXIgZm9yICVyPiIgJSAoc2VsZi5maXh0dXJlbmFtZSwgc2VsZi5fcHlmdW5jaXRlbSkKKwor
CitjbGFzcyBTY29wZU1pc21hdGNoRXJyb3IoRXhjZXB0aW9uKToKKyAgICAiIiIgQSBmaXh0dXJl
IGZ1bmN0aW9uIHRyaWVzIHRvIHVzZSBhIGRpZmZlcmVudCBmaXh0dXJlIGZ1bmN0aW9uIHdoaWNo
CisgICAgd2hpY2ggaGFzIGEgbG93ZXIgc2NvcGUgKGUuZy4gYSBTZXNzaW9uIG9uZSBjYWxscyBh
IGZ1bmN0aW9uIG9uZSkKKyAgICAiIiIKKworc2NvcGVzID0gInNlc3Npb24gbW9kdWxlIGNsYXNz
IGZ1bmN0aW9uIi5zcGxpdCgpCitzY29wZW51bV9mdW5jdGlvbiA9IHNjb3Blcy5pbmRleCgiZnVu
Y3Rpb24iKQorZGVmIHNjb3BlbWlzbWF0Y2goY3VycmVudHNjb3BlLCBuZXdzY29wZSk6CisgICAg
cmV0dXJuIHNjb3Blcy5pbmRleChuZXdzY29wZSkgPiBzY29wZXMuaW5kZXgoY3VycmVudHNjb3Bl
KQorCisKK2NsYXNzIEZpeHR1cmVMb29rdXBFcnJvcihMb29rdXBFcnJvcik6CisgICAgIiIiIGNv
dWxkIG5vdCByZXR1cm4gYSByZXF1ZXN0ZWQgRml4dHVyZSAobWlzc2luZyBvciBpbnZhbGlkKS4g
IiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFyZ25hbWUsIHJlcXVlc3QsIG1zZz1Ob25lKToK
KyAgICAgICAgc2VsZi5hcmduYW1lID0gYXJnbmFtZQorICAgICAgICBzZWxmLnJlcXVlc3QgPSBy
ZXF1ZXN0CisgICAgICAgIHNlbGYuZml4dHVyZXN0YWNrID0gcmVxdWVzdC5fZ2V0X2ZpeHR1cmVz
dGFjaygpCisgICAgICAgIHNlbGYubXNnID0gbXNnCisKKyAgICBkZWYgZm9ybWF0cmVwcihzZWxm
KToKKyAgICAgICAgdGJsaW5lcyA9IFtdCisgICAgICAgIGFkZGxpbmUgPSB0YmxpbmVzLmFwcGVu
ZAorICAgICAgICBzdGFjayA9IFtzZWxmLnJlcXVlc3QuX3B5ZnVuY2l0ZW0ub2JqXQorICAgICAg
ICBzdGFjay5leHRlbmQobWFwKGxhbWJkYSB4OiB4LmZ1bmMsIHNlbGYuZml4dHVyZXN0YWNrKSkK
KyAgICAgICAgbXNnID0gc2VsZi5tc2cKKyAgICAgICAgaWYgbXNnIGlzIG5vdCBOb25lOgorICAg
ICAgICAgICAgIyB0aGUgbGFzdCBmaXh0dXJlIHJhaXNlIGFuIGVycm9yLCBsZXQncyBwcmVzZW50
CisgICAgICAgICAgICAjIGl0IGF0IHRoZSByZXF1ZXN0aW5nIHNpZGUKKyAgICAgICAgICAgIHN0
YWNrID0gc3RhY2tbOi0xXQorICAgICAgICBmb3IgZnVuY3Rpb24gaW4gc3RhY2s6CisgICAgICAg
ICAgICBmc3BhdGgsIGxpbmVubyA9IGdldGZzbGluZW5vKGZ1bmN0aW9uKQorICAgICAgICAgICAg
dHJ5OgorICAgICAgICAgICAgICAgIGxpbmVzLCBfID0gaW5zcGVjdC5nZXRzb3VyY2VsaW5lcyhn
ZXRfcmVhbF9mdW5jKGZ1bmN0aW9uKSkKKyAgICAgICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgSW5k
ZXhFcnJvcik6CisgICAgICAgICAgICAgICAgZXJyb3JfbXNnID0gImZpbGUgJXMsIGxpbmUgJXM6
IHNvdXJjZSBjb2RlIG5vdCBhdmFpbGFibGUiCisgICAgICAgICAgICAgICAgYWRkbGluZShlcnJv
cl9tc2cgJSAoZnNwYXRoLCBsaW5lbm8rMSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgICAgIGFkZGxpbmUoImZpbGUgJXMsIGxpbmUgJXMiICUgKGZzcGF0aCwgbGluZW5vKzEpKQor
ICAgICAgICAgICAgICAgIGZvciBpLCBsaW5lIGluIGVudW1lcmF0ZShsaW5lcyk6CisgICAgICAg
ICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJzdHJpcCgpCisgICAgICAgICAgICAgICAgICAgIGFk
ZGxpbmUoIiAgIiArIGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUubHN0cmlwKCku
c3RhcnRzd2l0aCgnZGVmJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAg
ICAgIGlmIG1zZyBpcyBOb25lOgorICAgICAgICAgICAgZm0gPSBzZWxmLnJlcXVlc3QuX2ZpeHR1
cmVtYW5hZ2VyCisgICAgICAgICAgICBhdmFpbGFibGUgPSBbXQorICAgICAgICAgICAgZm9yIG5h
bWUsIGZpeHR1cmVkZWYgaW4gZm0uX2FyZzJmaXh0dXJlZGVmcy5pdGVtcygpOgorICAgICAgICAg
ICAgICAgIHBhcmVudGlkID0gc2VsZi5yZXF1ZXN0Ll9weWZ1bmNpdGVtLnBhcmVudC5ub2RlaWQK
KyAgICAgICAgICAgICAgICBmYWNsaXN0ID0gbGlzdChmbS5fbWF0Y2hmYWN0b3JpZXMoZml4dHVy
ZWRlZiwgcGFyZW50aWQpKQorICAgICAgICAgICAgICAgIGlmIGZhY2xpc3Q6CisgICAgICAgICAg
ICAgICAgICAgIGF2YWlsYWJsZS5hcHBlbmQobmFtZSkKKyAgICAgICAgICAgIG1zZyA9ICJmaXh0
dXJlICVyIG5vdCBmb3VuZCIgJSAoc2VsZi5hcmduYW1lLCkKKyAgICAgICAgICAgIG1zZyArPSAi
XG4gYXZhaWxhYmxlIGZpeHR1cmVzOiAlcyIgJSgiLCAiLmpvaW4oYXZhaWxhYmxlKSwpCisgICAg
ICAgICAgICBtc2cgKz0gIlxuIHVzZSAncHkudGVzdCAtLWZpeHR1cmVzIFt0ZXN0cGF0aF0nIGZv
ciBoZWxwIG9uIHRoZW0uIgorCisgICAgICAgIHJldHVybiBGaXh0dXJlTG9va3VwRXJyb3JSZXBy
KGZzcGF0aCwgbGluZW5vLCB0YmxpbmVzLCBtc2csIHNlbGYuYXJnbmFtZSkKKworY2xhc3MgRml4
dHVyZUxvb2t1cEVycm9yUmVwcihUZXJtaW5hbFJlcHIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBmaWxlbmFtZSwgZmlyc3RsaW5lbm8sIHRibGluZXMsIGVycm9yc3RyaW5nLCBhcmduYW1lKToK
KyAgICAgICAgc2VsZi50YmxpbmVzID0gdGJsaW5lcworICAgICAgICBzZWxmLmVycm9yc3RyaW5n
ID0gZXJyb3JzdHJpbmcKKyAgICAgICAgc2VsZi5maWxlbmFtZSA9IGZpbGVuYW1lCisgICAgICAg
IHNlbGYuZmlyc3RsaW5lbm8gPSBmaXJzdGxpbmVubworICAgICAgICBzZWxmLmFyZ25hbWUgPSBh
cmduYW1lCisKKyAgICBkZWYgdG90ZXJtaW5hbChzZWxmLCB0dyk6CisgICAgICAgICN0dy5saW5l
KCJGaXh0dXJlTG9va3VwRXJyb3I6ICVzIiAlKHNlbGYuYXJnbmFtZSksIHJlZD1UcnVlKQorICAg
ICAgICBmb3IgdGJsaW5lIGluIHNlbGYudGJsaW5lczoKKyAgICAgICAgICAgIHR3LmxpbmUodGJs
aW5lLnJzdHJpcCgpKQorICAgICAgICBmb3IgbGluZSBpbiBzZWxmLmVycm9yc3RyaW5nLnNwbGl0
KCJcbiIpOgorICAgICAgICAgICAgdHcubGluZSgiICAgICAgICAiICsgbGluZS5zdHJpcCgpLCBy
ZWQ9VHJ1ZSkKKyAgICAgICAgdHcubGluZSgpCisgICAgICAgIHR3LmxpbmUoIiVzOiVkIiAlIChz
ZWxmLmZpbGVuYW1lLCBzZWxmLmZpcnN0bGluZW5vKzEpKQorCitjbGFzcyBGaXh0dXJlTWFuYWdl
cjoKKyAgICAiIiIKKyAgICBweXRlc3QgZml4dHVyZXMgZGVmaW5pdGlvbnMgYW5kIGluZm9ybWF0
aW9uIGlzIHN0b3JlZCBhbmQgbWFuYWdlZAorICAgIGZyb20gdGhpcyBjbGFzcy4KKworICAgIER1
cmluZyBjb2xsZWN0aW9uIGZtLnBhcnNlZmFjdG9yaWVzKCkgaXMgY2FsbGVkIG11bHRpcGxlIHRp
bWVzIHRvIHBhcnNlCisgICAgZml4dHVyZSBmdW5jdGlvbiBkZWZpbml0aW9ucyBpbnRvIEZpeHR1
cmVEZWYgb2JqZWN0cyBhbmQgaW50ZXJuYWwKKyAgICBkYXRhIHN0cnVjdHVyZXMuCisKKyAgICBE
dXJpbmcgY29sbGVjdGlvbiBvZiB0ZXN0IGZ1bmN0aW9ucywgbWV0YWZ1bmMtbWVjaGFuaWNzIGlu
c3RhbnRpYXRlCisgICAgYSBGdW5jRml4dHVyZUluZm8gb2JqZWN0IHdoaWNoIGlzIGNhY2hlZCBw
ZXIgbm9kZS9mdW5jLW5hbWUuCisgICAgVGhpcyBGdW5jRml4dHVyZUluZm8gb2JqZWN0IGlzIGxh
dGVyIHJldHJpZXZlZCBieSBGdW5jdGlvbiBub2RlcworICAgIHdoaWNoIHRoZW1zZWx2ZXMgb2Zm
ZXIgYSBmaXh0dXJlbmFtZXMgYXR0cmlidXRlLgorCisgICAgVGhlIEZ1bmNGaXh0dXJlSW5mbyBv
YmplY3QgaG9sZHMgaW5mb3JtYXRpb24gYWJvdXQgZml4dHVyZXMgYW5kIEZpeHR1cmVEZWZzCisg
ICAgcmVsZXZhbnQgZm9yIGEgcGFydGljdWxhciBmdW5jdGlvbi4gIEFuIGluaXRpYWwgbGlzdCBv
ZiBmaXh0dXJlcyBpcworICAgIGFzc2VtYmxlZCBsaWtlIHRoaXM6CisKKyAgICAtIGluaS1kZWZp
bmVkIHVzZWZpeHR1cmVzCisgICAgLSBhdXRvdXNlLW1hcmtlZCBmaXh0dXJlcyBhbG9uZyB0aGUg
Y29sbGVjdGlvbiBjaGFpbiB1cCBmcm9tIHRoZSBmdW5jdGlvbgorICAgIC0gdXNlZml4dHVyZXMg
bWFya2VycyBhdCBtb2R1bGUvY2xhc3MvZnVuY3Rpb24gbGV2ZWwKKyAgICAtIHRlc3QgZnVuY3Rp
b24gZnVuY2FyZ3MKKworICAgIFN1YnNlcXVlbnRseSB0aGUgZnVuY2ZpeHR1cmVpbmZvLmZpeHR1
cmVuYW1lcyBhdHRyaWJ1dGUgaXMgY29tcHV0ZWQKKyAgICBhcyB0aGUgY2xvc3VyZSBvZiB0aGUg
Zml4dHVyZXMgbmVlZGVkIHRvIHNldHVwIHRoZSBpbml0aWFsIGZpeHR1cmVzLAorICAgIGkuIGUu
IGZpeHR1cmVzIG5lZWRlZCBieSBmaXh0dXJlIGZ1bmN0aW9ucyB0aGVtc2VsdmVzIGFyZSBhcHBl
bmRlZAorICAgIHRvIHRoZSBmaXh0dXJlbmFtZXMgbGlzdC4KKworICAgIFVwb24gdGhlIHRlc3Qt
c2V0dXAgcGhhc2VzIGFsbCBmaXh0dXJlbmFtZXMgYXJlIGluc3RhbnRpYXRlZCwgcmV0cmlldmVk
CisgICAgYnkgYSBsb29rdXAgb2YgdGhlaXIgRnVuY0ZpeHR1cmVJbmZvLgorICAgICIiIgorCisg
ICAgX2FyZ3ByZWZpeCA9ICJweXRlc3RfZnVuY2FyZ19fIgorICAgIEZpeHR1cmVMb29rdXBFcnJv
ciA9IEZpeHR1cmVMb29rdXBFcnJvcgorICAgIEZpeHR1cmVMb29rdXBFcnJvclJlcHIgPSBGaXh0
dXJlTG9va3VwRXJyb3JSZXByCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2Vzc2lvbik6Cisg
ICAgICAgIHNlbGYuc2Vzc2lvbiA9IHNlc3Npb24KKyAgICAgICAgc2VsZi5jb25maWcgPSBzZXNz
aW9uLmNvbmZpZworICAgICAgICBzZWxmLl9hcmcyZml4dHVyZWRlZnMgPSB7fQorICAgICAgICBz
ZWxmLl9ob2xkZXJvYmpzZWVuID0gc2V0KCkKKyAgICAgICAgc2VsZi5fYXJnMmZpbmlzaCA9IHt9
CisgICAgICAgIHNlbGYuX25vZGVpZF9hbmRfYXV0b3VzZW5hbWVzID0gWygiIiwgc2VsZi5jb25m
aWcuZ2V0aW5pKCJ1c2VmaXh0dXJlcyIpKV0KKyAgICAgICAgc2Vzc2lvbi5jb25maWcucGx1Z2lu
bWFuYWdlci5yZWdpc3RlcihzZWxmLCAiZnVuY21hbmFnZSIpCisKKworICAgIGRlZiBnZXRmaXh0
dXJlaW5mbyhzZWxmLCBub2RlLCBmdW5jLCBjbHMsIGZ1bmNhcmdzPVRydWUpOgorICAgICAgICBp
ZiBmdW5jYXJncyBhbmQgbm90IGhhc2F0dHIobm9kZSwgIm5vZnVuY2FyZ3MiKToKKyAgICAgICAg
ICAgIGlmIGNscyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzdGFydGluZGV4ID0gMQor
ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzdGFydGluZGV4ID0gTm9uZQorICAg
ICAgICAgICAgYXJnbmFtZXMgPSBnZXRmdW5jYXJnbmFtZXMoZnVuYywgc3RhcnRpbmRleCkKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIGFyZ25hbWVzID0gKCkKKyAgICAgICAgdXNlZml4dHVy
ZXMgPSBnZXRhdHRyKGZ1bmMsICJ1c2VmaXh0dXJlcyIsIE5vbmUpCisgICAgICAgIGluaXRpYWxu
YW1lcyA9IGFyZ25hbWVzCisgICAgICAgIGlmIHVzZWZpeHR1cmVzIGlzIG5vdCBOb25lOgorICAg
ICAgICAgICAgaW5pdGlhbG5hbWVzID0gdXNlZml4dHVyZXMuYXJncyArIGluaXRpYWxuYW1lcwor
ICAgICAgICBmbSA9IG5vZGUuc2Vzc2lvbi5fZml4dHVyZW1hbmFnZXIKKyAgICAgICAgbmFtZXNf
Y2xvc3VyZSwgYXJnMmZpeHR1cmVkZWZzID0gZm0uZ2V0Zml4dHVyZWNsb3N1cmUoaW5pdGlhbG5h
bWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBub2RlKQorICAgICAgICByZXR1cm4gRnVuY0ZpeHR1cmVJbmZvKGFyZ25hbWVz
LCBuYW1lc19jbG9zdXJlLCBhcmcyZml4dHVyZWRlZnMpCisKKyAgICBkZWYgcHl0ZXN0X3BsdWdp
bl9yZWdpc3RlcmVkKHNlbGYsIHBsdWdpbik6CisgICAgICAgIG5vZGVpZCA9IE5vbmUKKyAgICAg
ICAgdHJ5OgorICAgICAgICAgICAgcCA9IHB5LnBhdGgubG9jYWwocGx1Z2luLl9fZmlsZV9fKQor
ICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAg
IGVsc2U6CisgICAgICAgICAgICAjIGNvbnN0cnVjdCB0aGUgYmFzZSBub2RlaWQgd2hpY2ggaXMg
bGF0ZXIgdXNlZCB0byBjaGVjaworICAgICAgICAgICAgIyB3aGF0IGZpeHR1cmVzIGFyZSB2aXNp
YmxlIGZvciBwYXJ0aWN1bGFyIHRlc3RzIChhcyBkZW5vdGVkCisgICAgICAgICAgICAjIGJ5IHRo
ZWlyIHRlc3QgaWQpCisgICAgICAgICAgICBpZiBwLmJhc2VuYW1lLnN0YXJ0c3dpdGgoImNvbmZ0
ZXN0LnB5Iik6CisgICAgICAgICAgICAgICAgbm9kZWlkID0gcC5kaXJwYXRoKCkucmVsdG8oc2Vs
Zi5jb25maWcucm9vdGRpcikKKyAgICAgICAgICAgICAgICBpZiBwLnNlcCAhPSAiLyI6CisgICAg
ICAgICAgICAgICAgICAgIG5vZGVpZCA9IG5vZGVpZC5yZXBsYWNlKHAuc2VwLCAiLyIpCisgICAg
ICAgIHNlbGYucGFyc2VmYWN0b3JpZXMocGx1Z2luLCBub2RlaWQpCisKKyAgICBkZWYgX2dldGF1
dG91c2VuYW1lcyhzZWxmLCBub2RlaWQpOgorICAgICAgICAiIiIgcmV0dXJuIGEgdHVwbGUgb2Yg
Zml4dHVyZSBuYW1lcyB0byBiZSB1c2VkLiAiIiIKKyAgICAgICAgYXV0b3VzZW5hbWVzID0gW10K
KyAgICAgICAgZm9yIGJhc2VpZCwgYmFzZW5hbWVzIGluIHNlbGYuX25vZGVpZF9hbmRfYXV0b3Vz
ZW5hbWVzOgorICAgICAgICAgICAgaWYgbm9kZWlkLnN0YXJ0c3dpdGgoYmFzZWlkKToKKyAgICAg
ICAgICAgICAgICBpZiBiYXNlaWQ6CisgICAgICAgICAgICAgICAgICAgIGkgPSBsZW4oYmFzZWlk
KQorICAgICAgICAgICAgICAgICAgICBuZXh0Y2hhciA9IG5vZGVpZFtpOmkrMV0KKyAgICAgICAg
ICAgICAgICAgICAgaWYgbmV4dGNoYXIgYW5kIG5leHRjaGFyIG5vdCBpbiAiOi8iOgorICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBhdXRvdXNlbmFtZXMu
ZXh0ZW5kKGJhc2VuYW1lcykKKyAgICAgICAgIyBtYWtlIHN1cmUgYXV0b3VzZW5hbWVzIGFyZSBz
b3J0ZWQgYnkgc2NvcGUsIHNjb3BlbnVtIDAgaXMgc2Vzc2lvbgorICAgICAgICBhdXRvdXNlbmFt
ZXMuc29ydCgKKyAgICAgICAgICAgIGtleT1sYW1iZGEgeDogc2VsZi5fYXJnMmZpeHR1cmVkZWZz
W3hdWy0xXS5zY29wZW51bSkKKyAgICAgICAgcmV0dXJuIGF1dG91c2VuYW1lcworCisgICAgZGVm
IGdldGZpeHR1cmVjbG9zdXJlKHNlbGYsIGZpeHR1cmVuYW1lcywgcGFyZW50bm9kZSk6CisgICAg
ICAgICMgY29sbGVjdCB0aGUgY2xvc3VyZSBvZiBhbGwgZml4dHVyZXMgLCBzdGFydGluZyB3aXRo
IHRoZSBnaXZlbgorICAgICAgICAjIGZpeHR1cmVuYW1lcyBhcyB0aGUgaW5pdGlhbCBzZXQuICBB
cyB3ZSBoYXZlIHRvIHZpc2l0IGFsbAorICAgICAgICAjIGZhY3RvcnkgZGVmaW5pdGlvbnMgYW55
d2F5LCB3ZSBhbHNvIHJldHVybiBhIGFyZzJmaXh0dXJlZGVmcworICAgICAgICAjIG1hcHBpbmcg
c28gdGhhdCB0aGUgY2FsbGVyIGNhbiByZXVzZSBpdCBhbmQgZG9lcyBub3QgaGF2ZQorICAgICAg
ICAjIHRvIHJlLWRpc2NvdmVyIGZpeHR1cmVkZWZzIGFnYWluIGZvciBlYWNoIGZpeHR1cmVuYW1l
CisgICAgICAgICMgKGRpc2NvdmVyaW5nIG1hdGNoaW5nIGZpeHR1cmVzIGZvciBhIGdpdmVuIG5h
bWUvbm9kZSBpcyBleHBlbnNpdmUpCisKKyAgICAgICAgcGFyZW50aWQgPSBwYXJlbnRub2RlLm5v
ZGVpZAorICAgICAgICBmaXh0dXJlbmFtZXNfY2xvc3VyZSA9IHNlbGYuX2dldGF1dG91c2VuYW1l
cyhwYXJlbnRpZCkKKyAgICAgICAgZGVmIG1lcmdlKG90aGVybGlzdCk6CisgICAgICAgICAgICBm
b3IgYXJnIGluIG90aGVybGlzdDoKKyAgICAgICAgICAgICAgICBpZiBhcmcgbm90IGluIGZpeHR1
cmVuYW1lc19jbG9zdXJlOgorICAgICAgICAgICAgICAgICAgICBmaXh0dXJlbmFtZXNfY2xvc3Vy
ZS5hcHBlbmQoYXJnKQorICAgICAgICBtZXJnZShmaXh0dXJlbmFtZXMpCisgICAgICAgIGFyZzJm
aXh0dXJlZGVmcyA9IHt9CisgICAgICAgIGxhc3RsZW4gPSAtMQorICAgICAgICB3aGlsZSBsYXN0
bGVuICE9IGxlbihmaXh0dXJlbmFtZXNfY2xvc3VyZSk6CisgICAgICAgICAgICBsYXN0bGVuID0g
bGVuKGZpeHR1cmVuYW1lc19jbG9zdXJlKQorICAgICAgICAgICAgZm9yIGFyZ25hbWUgaW4gZml4
dHVyZW5hbWVzX2Nsb3N1cmU6CisgICAgICAgICAgICAgICAgaWYgYXJnbmFtZSBpbiBhcmcyZml4
dHVyZWRlZnM6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAg
Zml4dHVyZWRlZnMgPSBzZWxmLmdldGZpeHR1cmVkZWZzKGFyZ25hbWUsIHBhcmVudGlkKQorICAg
ICAgICAgICAgICAgIGlmIGZpeHR1cmVkZWZzOgorICAgICAgICAgICAgICAgICAgICBhcmcyZml4
dHVyZWRlZnNbYXJnbmFtZV0gPSBmaXh0dXJlZGVmcworICAgICAgICAgICAgICAgICAgICBtZXJn
ZShmaXh0dXJlZGVmc1stMV0uYXJnbmFtZXMpCisgICAgICAgIHJldHVybiBmaXh0dXJlbmFtZXNf
Y2xvc3VyZSwgYXJnMmZpeHR1cmVkZWZzCisKKyAgICBkZWYgcHl0ZXN0X2dlbmVyYXRlX3Rlc3Rz
KHNlbGYsIG1ldGFmdW5jKToKKyAgICAgICAgZm9yIGFyZ25hbWUgaW4gbWV0YWZ1bmMuZml4dHVy
ZW5hbWVzOgorICAgICAgICAgICAgZmFjbGlzdCA9IG1ldGFmdW5jLl9hcmcyZml4dHVyZWRlZnMu
Z2V0KGFyZ25hbWUpCisgICAgICAgICAgICBpZiBmYWNsaXN0OgorICAgICAgICAgICAgICAgIGZp
eHR1cmVkZWYgPSBmYWNsaXN0Wy0xXQorICAgICAgICAgICAgICAgIGlmIGZpeHR1cmVkZWYucGFy
YW1zIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBmdW5jX3BhcmFtcyA9IGdldGF0
dHIoZ2V0YXR0cihtZXRhZnVuYy5mdW5jdGlvbiwgJ3BhcmFtZXRyaXplJywgTm9uZSksICdhcmdz
JywgW1tOb25lXV0pCisgICAgICAgICAgICAgICAgICAgICMgc2tpcCBkaXJlY3RseSBwYXJhbWV0
cml6ZWQgYXJndW1lbnRzCisgICAgICAgICAgICAgICAgICAgIGFyZ25hbWVzID0gZnVuY19wYXJh
bXNbMF0KKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoYXJnbmFtZXMsICh0
dXBsZSwgbGlzdCkpOgorICAgICAgICAgICAgICAgICAgICAgICAgYXJnbmFtZXMgPSBbeC5zdHJp
cCgpIGZvciB4IGluIGFyZ25hbWVzLnNwbGl0KCIsIikgaWYgeC5zdHJpcCgpXQorICAgICAgICAg
ICAgICAgICAgICBpZiBhcmduYW1lIG5vdCBpbiBmdW5jX3BhcmFtcyBhbmQgYXJnbmFtZSBub3Qg
aW4gYXJnbmFtZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBtZXRhZnVuYy5wYXJhbWV0cml6
ZShhcmduYW1lLCBmaXh0dXJlZGVmLnBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGluZGlyZWN0PVRydWUsIHNjb3BlPWZpeHR1cmVkZWYuc2NvcGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHM9Zml4dHVy
ZWRlZi5pZHMpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlICMg
d2lsbCByYWlzZSBGaXh0dXJlTG9va3VwRXJyb3IgYXQgc2V0dXAgdGltZQorCisgICAgZGVmIHB5
dGVzdF9jb2xsZWN0aW9uX21vZGlmeWl0ZW1zKHNlbGYsIGl0ZW1zKToKKyAgICAgICAgIyBzZXBh
cmF0ZSBwYXJhbWV0cml6ZWQgc2V0dXBzCisgICAgICAgIGl0ZW1zWzpdID0gcmVvcmRlcl9pdGVt
cyhpdGVtcykKKworICAgIGRlZiBwYXJzZWZhY3RvcmllcyhzZWxmLCBub2RlX29yX29iaiwgbm9k
ZWlkPU5PVFNFVCwgdW5pdHRlc3Q9RmFsc2UpOgorICAgICAgICBpZiBub2RlaWQgaXMgbm90IE5P
VFNFVDoKKyAgICAgICAgICAgIGhvbGRlcm9iaiA9IG5vZGVfb3Jfb2JqCisgICAgICAgIGVsc2U6
CisgICAgICAgICAgICBob2xkZXJvYmogPSBub2RlX29yX29iai5vYmoKKyAgICAgICAgICAgIG5v
ZGVpZCA9IG5vZGVfb3Jfb2JqLm5vZGVpZAorICAgICAgICBpZiBob2xkZXJvYmogaW4gc2VsZi5f
aG9sZGVyb2Jqc2VlbjoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl9ob2xkZXJv
YmpzZWVuLmFkZChob2xkZXJvYmopCisgICAgICAgIGF1dG91c2VuYW1lcyA9IFtdCisgICAgICAg
IGZvciBuYW1lIGluIGRpcihob2xkZXJvYmopOgorICAgICAgICAgICAgb2JqID0gZ2V0YXR0ciho
b2xkZXJvYmosIG5hbWUsIE5vbmUpCisgICAgICAgICAgICAjIGZpeHR1cmUgZnVuY3Rpb25zIGhh
dmUgYSBweXRlc3RfZnVuY2FyZ19fIHByZWZpeCAocHJlLTIuMyBzdHlsZSkKKyAgICAgICAgICAg
ICMgb3IgYXJlICJAcHl0ZXN0LmZpeHR1cmUiIG1hcmtlZAorICAgICAgICAgICAgbWFya2VyID0g
Z2V0Zml4dHVyZW1hcmtlcihvYmopCisgICAgICAgICAgICBpZiBtYXJrZXIgaXMgTm9uZToKKyAg
ICAgICAgICAgICAgICBpZiBub3QgbmFtZS5zdGFydHN3aXRoKHNlbGYuX2FyZ3ByZWZpeCk6Cisg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgbm90IGNhbGxh
YmxlKG9iaik6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAg
bWFya2VyID0gZGVmYXVsdGZ1bmNhcmdwcmVmaXhtYXJrZXIKKyAgICAgICAgICAgICAgICBuYW1l
ID0gbmFtZVtsZW4oc2VsZi5fYXJncHJlZml4KTpdCisgICAgICAgICAgICBlbGlmIG5vdCBpc2lu
c3RhbmNlKG1hcmtlciwgRml4dHVyZUZ1bmN0aW9uTWFya2VyKToKKyAgICAgICAgICAgICAgICAj
IG1hZ2ljIGdsb2JhbHMgIHdpdGggX19nZXRhdHRyX18gbWlnaHQgaGF2ZSBnb3QgdXMgYSB3cm9u
ZworICAgICAgICAgICAgICAgICMgZml4dHVyZSBhdHRyaWJ1dGUKKyAgICAgICAgICAgICAgICBj
b250aW51ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBhc3NlcnQgbm90IG5h
bWUuc3RhcnRzd2l0aChzZWxmLl9hcmdwcmVmaXgpCisgICAgICAgICAgICBmaXh0dXJlZGVmID0g
Rml4dHVyZURlZihzZWxmLCBub2RlaWQsIG5hbWUsIG9iaiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1hcmtlci5zY29wZSwgbWFya2VyLnBhcmFtcywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkY3R4PW1hcmtlci55aWVsZGN0eCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0PXVuaXR0ZXN0LCBpZHM9bWFy
a2VyLmlkcykKKyAgICAgICAgICAgIGZhY2xpc3QgPSBzZWxmLl9hcmcyZml4dHVyZWRlZnMuc2V0
ZGVmYXVsdChuYW1lLCBbXSkKKyAgICAgICAgICAgIGlmIGZpeHR1cmVkZWYuaGFzX2xvY2F0aW9u
OgorICAgICAgICAgICAgICAgIGZhY2xpc3QuYXBwZW5kKGZpeHR1cmVkZWYpCisgICAgICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgICAgICMgZml4dHVyZWRlZnMgd2l0aCBubyBsb2NhdGlvbiBh
cmUgYXQgdGhlIGZyb250CisgICAgICAgICAgICAgICAgIyBzbyB0aGlzIGluc2VydHMgdGhlIGN1
cnJlbnQgZml4dHVyZWRlZiBhZnRlciB0aGUKKyAgICAgICAgICAgICAgICAjIGV4aXN0aW5nIGZp
eHR1cmVkZWZzIGZyb20gZXh0ZXJuYWwgcGx1Z2lucyBidXQKKyAgICAgICAgICAgICAgICAjIGJl
Zm9yZSB0aGUgZml4dHVyZWRlZnMgcHJvdmlkZWQgaW4gY29uZnRlc3RzLgorICAgICAgICAgICAg
ICAgIGkgPSBsZW4oW2YgZm9yIGYgaW4gZmFjbGlzdCBpZiBub3QgZi5oYXNfbG9jYXRpb25dKQor
ICAgICAgICAgICAgICAgIGZhY2xpc3QuaW5zZXJ0KGksIGZpeHR1cmVkZWYpCisgICAgICAgICAg
ICBpZiBtYXJrZXIuYXV0b3VzZToKKyAgICAgICAgICAgICAgICBhdXRvdXNlbmFtZXMuYXBwZW5k
KG5hbWUpCisgICAgICAgIGlmIGF1dG91c2VuYW1lczoKKyAgICAgICAgICAgIHNlbGYuX25vZGVp
ZF9hbmRfYXV0b3VzZW5hbWVzLmFwcGVuZCgobm9kZWlkIG9yICcnLCBhdXRvdXNlbmFtZXMpKQor
CisgICAgZGVmIGdldGZpeHR1cmVkZWZzKHNlbGYsIGFyZ25hbWUsIG5vZGVpZCk6CisgICAgICAg
IHRyeToKKyAgICAgICAgICAgIGZpeHR1cmVkZWZzID0gc2VsZi5fYXJnMmZpeHR1cmVkZWZzW2Fy
Z25hbWVdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBOb25l
CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gdHVwbGUoc2VsZi5fbWF0Y2hmYWN0
b3JpZXMoZml4dHVyZWRlZnMsIG5vZGVpZCkpCisKKyAgICBkZWYgX21hdGNoZmFjdG9yaWVzKHNl
bGYsIGZpeHR1cmVkZWZzLCBub2RlaWQpOgorICAgICAgICBmb3IgZml4dHVyZWRlZiBpbiBmaXh0
dXJlZGVmczoKKyAgICAgICAgICAgIGlmIG5vZGVpZC5zdGFydHN3aXRoKGZpeHR1cmVkZWYuYmFz
ZWlkKToKKyAgICAgICAgICAgICAgICB5aWVsZCBmaXh0dXJlZGVmCisKKworZGVmIGZhaWxfZml4
dHVyZWZ1bmMoZml4dHVyZWZ1bmMsIG1zZyk6CisgICAgZnMsIGxpbmVubyA9IGdldGZzbGluZW5v
KGZpeHR1cmVmdW5jKQorICAgIGxvY2F0aW9uID0gIiVzOiVzIiAlIChmcywgbGluZW5vKzEpCisg
ICAgc291cmNlID0gX3B5dGVzdC5fY29kZS5Tb3VyY2UoZml4dHVyZWZ1bmMpCisgICAgcHl0ZXN0
LmZhaWwobXNnICsgIjpcblxuIiArIHN0cihzb3VyY2UuaW5kZW50KCkpICsgIlxuIiArIGxvY2F0
aW9uLAorICAgICAgICAgICAgICAgIHB5dHJhY2U9RmFsc2UpCisKK2RlZiBjYWxsX2ZpeHR1cmVf
ZnVuYyhmaXh0dXJlZnVuYywgcmVxdWVzdCwga3dhcmdzLCB5aWVsZGN0eCk6CisgICAgaWYgeWll
bGRjdHg6CisgICAgICAgIGlmIG5vdCBpc19nZW5lcmF0b3IoZml4dHVyZWZ1bmMpOgorICAgICAg
ICAgICAgZmFpbF9maXh0dXJlZnVuYyhmaXh0dXJlZnVuYywKKyAgICAgICAgICAgICAgICBtc2c9
InlpZWxkX2ZpeHR1cmUgcmVxdWlyZXMgeWllbGQgc3RhdGVtZW50IGluIGZ1bmN0aW9uIikKKyAg
ICAgICAgaXRlciA9IGZpeHR1cmVmdW5jKCoqa3dhcmdzKQorICAgICAgICBuZXh0ID0gZ2V0YXR0
cihpdGVyLCAiX19uZXh0X18iLCBOb25lKQorICAgICAgICBpZiBuZXh0IGlzIE5vbmU6CisgICAg
ICAgICAgICBuZXh0ID0gZ2V0YXR0cihpdGVyLCAibmV4dCIpCisgICAgICAgIHJlcyA9IG5leHQo
KQorICAgICAgICBkZWYgdGVhcmRvd24oKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAg
ICAgICBuZXh0KCkKKyAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAg
ICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZmFpbF9maXh0
dXJlZnVuYyhmaXh0dXJlZnVuYywKKyAgICAgICAgICAgICAgICAgICAgInlpZWxkX2ZpeHR1cmUg
ZnVuY3Rpb24gaGFzIG1vcmUgdGhhbiBvbmUgJ3lpZWxkJyIpCisgICAgICAgIHJlcXVlc3QuYWRk
ZmluYWxpemVyKHRlYXJkb3duKQorICAgIGVsc2U6CisgICAgICAgIGlmIGlzX2dlbmVyYXRvcihm
aXh0dXJlZnVuYyk6CisgICAgICAgICAgICBmYWlsX2ZpeHR1cmVmdW5jKGZpeHR1cmVmdW5jLAor
ICAgICAgICAgICAgICAgIG1zZz0icHl0ZXN0LmZpeHR1cmUgZnVuY3Rpb25zIGNhbm5vdCB1c2Ug
YGB5aWVsZGBgLiAiCisgICAgICAgICAgICAgICAgICAgICJJbnN0ZWFkIHdyaXRlIGFuZCByZXR1
cm4gYW4gaW5uZXIgZnVuY3Rpb24vZ2VuZXJhdG9yICIKKyAgICAgICAgICAgICAgICAgICAgImFu
ZCBsZXQgdGhlIGNvbnN1bWVyIGNhbGwgYW5kIGl0ZXJhdGUgb3ZlciBpdC4iKQorICAgICAgICBy
ZXMgPSBmaXh0dXJlZnVuYygqKmt3YXJncykKKyAgICByZXR1cm4gcmVzCisKK2NsYXNzIEZpeHR1
cmVEZWY6CisgICAgIiIiIEEgY29udGFpbmVyIGZvciBhIGZhY3RvcnkgZGVmaW5pdGlvbi4gIiIi
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpeHR1cmVtYW5hZ2VyLCBiYXNlaWQsIGFyZ25hbWUs
IGZ1bmMsIHNjb3BlLCBwYXJhbXMsCisgICAgICAgICAgICAgICAgIHlpZWxkY3R4LCB1bml0dGVz
dD1GYWxzZSwgaWRzPU5vbmUpOgorICAgICAgICBzZWxmLl9maXh0dXJlbWFuYWdlciA9IGZpeHR1
cmVtYW5hZ2VyCisgICAgICAgIHNlbGYuYmFzZWlkID0gYmFzZWlkIG9yICcnCisgICAgICAgIHNl
bGYuaGFzX2xvY2F0aW9uID0gYmFzZWlkIGlzIG5vdCBOb25lCisgICAgICAgIHNlbGYuZnVuYyA9
IGZ1bmMKKyAgICAgICAgc2VsZi5hcmduYW1lID0gYXJnbmFtZQorICAgICAgICBzZWxmLnNjb3Bl
ID0gc2NvcGUKKyAgICAgICAgc2VsZi5zY29wZW51bSA9IHNjb3Blcy5pbmRleChzY29wZSBvciAi
ZnVuY3Rpb24iKQorICAgICAgICBzZWxmLnBhcmFtcyA9IHBhcmFtcworICAgICAgICBzdGFydGlu
ZGV4ID0gdW5pdHRlc3QgYW5kIDEgb3IgTm9uZQorICAgICAgICBzZWxmLmFyZ25hbWVzID0gZ2V0
ZnVuY2FyZ25hbWVzKGZ1bmMsIHN0YXJ0aW5kZXg9c3RhcnRpbmRleCkKKyAgICAgICAgc2VsZi55
aWVsZGN0eCA9IHlpZWxkY3R4CisgICAgICAgIHNlbGYudW5pdHRlc3QgPSB1bml0dGVzdAorICAg
ICAgICBzZWxmLmlkcyA9IGlkcworICAgICAgICBzZWxmLl9maW5hbGl6ZXIgPSBbXQorCisgICAg
ZGVmIGFkZGZpbmFsaXplcihzZWxmLCBmaW5hbGl6ZXIpOgorICAgICAgICBzZWxmLl9maW5hbGl6
ZXIuYXBwZW5kKGZpbmFsaXplcikKKworICAgIGRlZiBmaW5pc2goc2VsZik6CisgICAgICAgIHRy
eToKKyAgICAgICAgICAgIHdoaWxlIHNlbGYuX2ZpbmFsaXplcjoKKyAgICAgICAgICAgICAgICBm
dW5jID0gc2VsZi5fZmluYWxpemVyLnBvcCgpCisgICAgICAgICAgICAgICAgZnVuYygpCisgICAg
ICAgIGZpbmFsbHk6CisgICAgICAgICAgICAjIGV2ZW4gaWYgZmluYWxpemF0aW9uIGZhaWxzLCB3
ZSBpbnZhbGlkYXRlCisgICAgICAgICAgICAjIHRoZSBjYWNoZWQgZml4dHVyZSB2YWx1ZQorICAg
ICAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAiY2FjaGVkX3Jlc3VsdCIpOgorICAgICAgICAgICAg
ICAgIGRlbCBzZWxmLmNhY2hlZF9yZXN1bHQKKworICAgIGRlZiBleGVjdXRlKHNlbGYsIHJlcXVl
c3QpOgorICAgICAgICAjIGdldCByZXF1aXJlZCBhcmd1bWVudHMgYW5kIHJlZ2lzdGVyIG91ciBv
d24gZmluaXNoKCkKKyAgICAgICAgIyB3aXRoIHRoZWlyIGZpbmFsaXphdGlvbgorICAgICAgICBr
d2FyZ3MgPSB7fQorICAgICAgICBmb3IgYXJnbmFtZSBpbiBzZWxmLmFyZ25hbWVzOgorICAgICAg
ICAgICAgZml4dHVyZWRlZiA9IHJlcXVlc3QuX2dldF9hY3RpdmVfZml4dHVyZWRlZihhcmduYW1l
KQorICAgICAgICAgICAgcmVzdWx0LCBhcmdfY2FjaGVfa2V5LCBleGMgPSBmaXh0dXJlZGVmLmNh
Y2hlZF9yZXN1bHQKKyAgICAgICAgICAgIHJlcXVlc3QuX2NoZWNrX3Njb3BlKGFyZ25hbWUsIHJl
cXVlc3Quc2NvcGUsIGZpeHR1cmVkZWYuc2NvcGUpCisgICAgICAgICAgICBrd2FyZ3NbYXJnbmFt
ZV0gPSByZXN1bHQKKyAgICAgICAgICAgIGlmIGFyZ25hbWUgIT0gInJlcXVlc3QiOgorICAgICAg
ICAgICAgICAgIGZpeHR1cmVkZWYuYWRkZmluYWxpemVyKHNlbGYuZmluaXNoKQorCisgICAgICAg
IG15X2NhY2hlX2tleSA9IHJlcXVlc3QucGFyYW1faW5kZXgKKyAgICAgICAgY2FjaGVkX3Jlc3Vs
dCA9IGdldGF0dHIoc2VsZiwgImNhY2hlZF9yZXN1bHQiLCBOb25lKQorICAgICAgICBpZiBjYWNo
ZWRfcmVzdWx0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmVzdWx0LCBjYWNoZV9rZXksIGVy
ciA9IGNhY2hlZF9yZXN1bHQKKyAgICAgICAgICAgIGlmIG15X2NhY2hlX2tleSA9PSBjYWNoZV9r
ZXk6CisgICAgICAgICAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAg
ICAgICBweS5idWlsdGluLl9yZXJhaXNlKCplcnIpCisgICAgICAgICAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgICAgICAgICAgIyB3ZSBoYXZlIGEg
cHJldmlvdXMgYnV0IGRpZmZlcmVudGx5IHBhcmFtZXRyaXplZCBmaXh0dXJlIGluc3RhbmNlCisg
ICAgICAgICAgICAjIHNvIHdlIG5lZWQgdG8gdGVhciBpdCBkb3duIGJlZm9yZSBjcmVhdGluZyBh
IG5ldyBvbmUKKyAgICAgICAgICAgIHNlbGYuZmluaXNoKCkKKyAgICAgICAgICAgIGFzc2VydCBu
b3QgaGFzYXR0cihzZWxmLCAiY2FjaGVkX3Jlc3VsdCIpCisKKyAgICAgICAgZml4dHVyZWZ1bmMg
PSBzZWxmLmZ1bmMKKworICAgICAgICBpZiBzZWxmLnVuaXR0ZXN0OgorICAgICAgICAgICAgaWYg
cmVxdWVzdC5pbnN0YW5jZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAjIGJpbmQgdGhl
IHVuYm91bmQgbWV0aG9kIHRvIHRoZSBUZXN0Q2FzZSBpbnN0YW5jZQorICAgICAgICAgICAgICAg
IGZpeHR1cmVmdW5jID0gc2VsZi5mdW5jLl9fZ2V0X18ocmVxdWVzdC5pbnN0YW5jZSkKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgICMgdGhlIGZpeHR1cmUgZnVuY3Rpb24gbmVlZHMgdG8gYmUg
Ym91bmQgdG8gdGhlIGFjdHVhbAorICAgICAgICAgICAgIyByZXF1ZXN0Lmluc3RhbmNlIHNvIHRo
YXQgY29kZSB3b3JraW5nIHdpdGggInNlbGYiIGJlaGF2ZXMKKyAgICAgICAgICAgICMgYXMgZXhw
ZWN0ZWQuCisgICAgICAgICAgICBpZiByZXF1ZXN0Lmluc3RhbmNlIGlzIG5vdCBOb25lOgorICAg
ICAgICAgICAgICAgIGZpeHR1cmVmdW5jID0gZ2V0aW1mdW5jKHNlbGYuZnVuYykKKyAgICAgICAg
ICAgICAgICBpZiBmaXh0dXJlZnVuYyAhPSBzZWxmLmZ1bmM6CisgICAgICAgICAgICAgICAgICAg
IGZpeHR1cmVmdW5jID0gZml4dHVyZWZ1bmMuX19nZXRfXyhyZXF1ZXN0Lmluc3RhbmNlKQorCisg
ICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc3VsdCA9IGNhbGxfZml4dHVyZV9mdW5jKGZpeHR1
cmVmdW5jLCByZXF1ZXN0LCBrd2FyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzZWxmLnlpZWxkY3R4KQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAg
ICAgICAgc2VsZi5jYWNoZWRfcmVzdWx0ID0gKE5vbmUsIG15X2NhY2hlX2tleSwgc3lzLmV4Y19p
bmZvKCkpCisgICAgICAgICAgICByYWlzZQorICAgICAgICBzZWxmLmNhY2hlZF9yZXN1bHQgPSAo
cmVzdWx0LCBteV9jYWNoZV9rZXksIE5vbmUpCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAg
IGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICgiPEZpeHR1cmVEZWYgbmFtZT0l
ciBzY29wZT0lciBiYXNlaWQ9JXIgPiIgJQorICAgICAgICAgICAgICAgIChzZWxmLmFyZ25hbWUs
IHNlbGYuc2NvcGUsIHNlbGYuYmFzZWlkKSkKKworZGVmIG51bV9tb2NrX3BhdGNoX2FyZ3MoZnVu
Y3Rpb24pOgorICAgICIiIiByZXR1cm4gbnVtYmVyIG9mIGFyZ3VtZW50cyB1c2VkIHVwIGJ5IG1v
Y2sgYXJndW1lbnRzIChpZiBhbnkpICIiIgorICAgIHBhdGNoaW5ncyA9IGdldGF0dHIoZnVuY3Rp
b24sICJwYXRjaGluZ3MiLCBOb25lKQorICAgIGlmIG5vdCBwYXRjaGluZ3M6CisgICAgICAgIHJl
dHVybiAwCisgICAgbW9jayA9IHN5cy5tb2R1bGVzLmdldCgibW9jayIsIHN5cy5tb2R1bGVzLmdl
dCgidW5pdHRlc3QubW9jayIsIE5vbmUpKQorICAgIGlmIG1vY2sgaXMgbm90IE5vbmU6CisgICAg
ICAgIHJldHVybiBsZW4oW3AgZm9yIHAgaW4gcGF0Y2hpbmdzCisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiBub3QgcC5hdHRyaWJ1dGVfbmFtZSBhbmQgcC5uZXcgaXMgbW9jay5ERUZBVUxUXSkK
KyAgICByZXR1cm4gbGVuKHBhdGNoaW5ncykKKworCitkZWYgZ2V0ZnVuY2FyZ25hbWVzKGZ1bmN0
aW9uLCBzdGFydGluZGV4PU5vbmUpOgorICAgICMgWFhYIG1lcmdlIHdpdGggbWFpbi5weSdzIHZh
cm5hbWVzCisgICAgI2Fzc2VydCBub3QgaXNjbGFzcyhmdW5jdGlvbikKKyAgICByZWFsZnVuY3Rp
b24gPSBmdW5jdGlvbgorICAgIHdoaWxlIGhhc2F0dHIocmVhbGZ1bmN0aW9uLCAiX193cmFwcGVk
X18iKToKKyAgICAgICAgcmVhbGZ1bmN0aW9uID0gcmVhbGZ1bmN0aW9uLl9fd3JhcHBlZF9fCisg
ICAgaWYgc3RhcnRpbmRleCBpcyBOb25lOgorICAgICAgICBzdGFydGluZGV4ID0gaW5zcGVjdC5p
c21ldGhvZChmdW5jdGlvbikgYW5kIDEgb3IgMAorICAgIGlmIHJlYWxmdW5jdGlvbiAhPSBmdW5j
dGlvbjoKKyAgICAgICAgc3RhcnRpbmRleCArPSBudW1fbW9ja19wYXRjaF9hcmdzKGZ1bmN0aW9u
KQorICAgICAgICBmdW5jdGlvbiA9IHJlYWxmdW5jdGlvbgorICAgIGlmIGlzaW5zdGFuY2UoZnVu
Y3Rpb24sIGZ1bmN0b29scy5wYXJ0aWFsKToKKyAgICAgICAgYXJnbmFtZXMgPSBpbnNwZWN0Lmdl
dGFyZ3MoX3B5dGVzdC5fY29kZS5nZXRyYXdjb2RlKGZ1bmN0aW9uLmZ1bmMpKVswXQorICAgICAg
ICBwYXJ0aWFsID0gZnVuY3Rpb24KKyAgICAgICAgYXJnbmFtZXMgPSBhcmduYW1lc1tsZW4ocGFy
dGlhbC5hcmdzKTpdCisgICAgICAgIGlmIHBhcnRpYWwua2V5d29yZHM6CisgICAgICAgICAgICBm
b3Iga3cgaW4gcGFydGlhbC5rZXl3b3JkczoKKyAgICAgICAgICAgICAgICBhcmduYW1lcy5yZW1v
dmUoa3cpCisgICAgZWxzZToKKyAgICAgICAgYXJnbmFtZXMgPSBpbnNwZWN0LmdldGFyZ3MoX3B5
dGVzdC5fY29kZS5nZXRyYXdjb2RlKGZ1bmN0aW9uKSlbMF0KKyAgICBkZWZhdWx0cyA9IGdldGF0
dHIoZnVuY3Rpb24sICdmdW5jX2RlZmF1bHRzJywKKyAgICAgICAgICAgICAgICAgICAgICAgZ2V0
YXR0cihmdW5jdGlvbiwgJ19fZGVmYXVsdHNfXycsIE5vbmUpKSBvciAoKQorICAgIG51bWRlZmF1
bHRzID0gbGVuKGRlZmF1bHRzKQorICAgIGlmIG51bWRlZmF1bHRzOgorICAgICAgICByZXR1cm4g
dHVwbGUoYXJnbmFtZXNbc3RhcnRpbmRleDotbnVtZGVmYXVsdHNdKQorICAgIHJldHVybiB0dXBs
ZShhcmduYW1lc1tzdGFydGluZGV4Ol0pCisKKyMgYWxnb3JpdGhtIGZvciBzb3J0aW5nIG9uIGEg
cGVyLXBhcmFtZXRyaXplZCByZXNvdXJjZSBzZXR1cCBiYXNpcworIyBpdCBpcyBjYWxsZWQgZm9y
IHNjb3BlbnVtPT0wIChzZXNzaW9uKSBmaXJzdCBhbmQgcGVyZm9ybXMgc29ydGluZworIyBkb3du
IHRvIHRoZSBsb3dlciBzY29wZXMgc3VjaCBhcyB0byBtaW5pbWl6ZSBudW1iZXIgb2YgImhpZ2gg
c2NvcGUiCisjIHNldHVwcyBhbmQgdGVhcmRvd25zCisKK2RlZiByZW9yZGVyX2l0ZW1zKGl0ZW1z
KToKKyAgICBhcmdrZXlzX2NhY2hlID0ge30KKyAgICBmb3Igc2NvcGVudW0gaW4gcmFuZ2UoMCwg
c2NvcGVudW1fZnVuY3Rpb24pOgorICAgICAgICBhcmdrZXlzX2NhY2hlW3Njb3BlbnVtXSA9IGQg
PSB7fQorICAgICAgICBmb3IgaXRlbSBpbiBpdGVtczoKKyAgICAgICAgICAgIGtleXMgPSBzZXQo
Z2V0X3BhcmFtZXRyaXplZF9maXh0dXJlX2tleXMoaXRlbSwgc2NvcGVudW0pKQorICAgICAgICAg
ICAgaWYga2V5czoKKyAgICAgICAgICAgICAgICBkW2l0ZW1dID0ga2V5cworICAgIHJldHVybiBy
ZW9yZGVyX2l0ZW1zX2F0c2NvcGUoaXRlbXMsIHNldCgpLCBhcmdrZXlzX2NhY2hlLCAwKQorCitk
ZWYgcmVvcmRlcl9pdGVtc19hdHNjb3BlKGl0ZW1zLCBpZ25vcmUsIGFyZ2tleXNfY2FjaGUsIHNj
b3BlbnVtKToKKyAgICBpZiBzY29wZW51bSA+PSBzY29wZW51bV9mdW5jdGlvbiBvciBsZW4oaXRl
bXMpIDwgMzoKKyAgICAgICAgcmV0dXJuIGl0ZW1zCisgICAgaXRlbXNfZG9uZSA9IFtdCisgICAg
d2hpbGUgMToKKyAgICAgICAgaXRlbXNfYmVmb3JlLCBpdGVtc19zYW1lLCBpdGVtc19vdGhlciwg
bmV3aWdub3JlID0gXAorICAgICAgICAgICAgICAgIHNsaWNlX2l0ZW1zKGl0ZW1zLCBpZ25vcmUs
IGFyZ2tleXNfY2FjaGVbc2NvcGVudW1dKQorICAgICAgICBpdGVtc19iZWZvcmUgPSByZW9yZGVy
X2l0ZW1zX2F0c2NvcGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXNfYmVmb3Jl
LCBpZ25vcmUsIGFyZ2tleXNfY2FjaGUsc2NvcGVudW0rMSkKKyAgICAgICAgaWYgaXRlbXNfc2Ft
ZSBpcyBOb25lOgorICAgICAgICAgICAgIyBub3RoaW5nIHRvIHJlb3JkZXIgaW4gdGhpcyBzY29w
ZQorICAgICAgICAgICAgYXNzZXJ0IGl0ZW1zX290aGVyIGlzIE5vbmUKKyAgICAgICAgICAgIHJl
dHVybiBpdGVtc19kb25lICsgaXRlbXNfYmVmb3JlCisgICAgICAgIGl0ZW1zX2RvbmUuZXh0ZW5k
KGl0ZW1zX2JlZm9yZSkKKyAgICAgICAgaXRlbXMgPSBpdGVtc19zYW1lICsgaXRlbXNfb3RoZXIK
KyAgICAgICAgaWdub3JlID0gbmV3aWdub3JlCisKKworZGVmIHNsaWNlX2l0ZW1zKGl0ZW1zLCBp
Z25vcmUsIHNjb3BlZF9hcmdrZXlzX2NhY2hlKToKKyAgICAjIHdlIHBpY2sgdGhlIGZpcnN0IGl0
ZW0gd2hpY2ggdXNlcyBhIGZpeHR1cmUgaW5zdGFuY2UgaW4gdGhlCisgICAgIyByZXF1ZXN0ZWQg
c2NvcGUgYW5kIHdoaWNoIHdlIGhhdmVuJ3Qgc2VlbiB5ZXQuICBXZSBzbGljZSB0aGUgaW5wdXQK
KyAgICAjIGl0ZW1zIGxpc3QgaW50byBhIGxpc3Qgb2YgaXRlbXNfbm9tYXRjaCwgaXRlbXNfc2Ft
ZSBhbmQKKyAgICAjIGl0ZW1zX290aGVyCisgICAgaWYgc2NvcGVkX2FyZ2tleXNfY2FjaGU6ICAj
IGRvIHdlIG5lZWQgdG8gZG8gd29yayBhdCBhbGw/CisgICAgICAgIGl0ID0gaXRlcihpdGVtcykK
KyAgICAgICAgIyBmaXJzdCBmaW5kIGEgc2xpY2luZyBrZXkKKyAgICAgICAgZm9yIGksIGl0ZW0g
aW4gZW51bWVyYXRlKGl0KToKKyAgICAgICAgICAgIGFyZ2tleXMgPSBzY29wZWRfYXJna2V5c19j
YWNoZS5nZXQoaXRlbSkKKyAgICAgICAgICAgIGlmIGFyZ2tleXMgaXMgbm90IE5vbmU6CisgICAg
ICAgICAgICAgICAgYXJna2V5cyA9IGFyZ2tleXMuZGlmZmVyZW5jZShpZ25vcmUpCisgICAgICAg
ICAgICAgICAgaWYgYXJna2V5czogICMgZm91bmQgYSBzbGljaW5nIGtleQorICAgICAgICAgICAg
ICAgICAgICBzbGljaW5nX2FyZ2tleSA9IGFyZ2tleXMucG9wKCkKKyAgICAgICAgICAgICAgICAg
ICAgaXRlbXNfYmVmb3JlID0gaXRlbXNbOmldCisgICAgICAgICAgICAgICAgICAgIGl0ZW1zX3Nh
bWUgPSBbaXRlbV0KKyAgICAgICAgICAgICAgICAgICAgaXRlbXNfb3RoZXIgPSBbXQorICAgICAg
ICAgICAgICAgICAgICAjIG5vdyBzbGljZSB0aGUgcmVtYWluZGVyIG9mIHRoZSBsaXN0CisgICAg
ICAgICAgICAgICAgICAgIGZvciBpdGVtIGluIGl0OgorICAgICAgICAgICAgICAgICAgICAgICAg
YXJna2V5cyA9IHNjb3BlZF9hcmdrZXlzX2NhY2hlLmdldChpdGVtKQorICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgYXJna2V5cyBhbmQgc2xpY2luZ19hcmdrZXkgaW4gYXJna2V5cyBhbmQgXAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsaWNpbmdfYXJna2V5IG5vdCBpbiBpZ25vcmU6
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXNfc2FtZS5hcHBlbmQoaXRlbSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aXRlbXNfb3RoZXIuYXBwZW5kKGl0ZW0pCisgICAgICAgICAgICAgICAgICAgIG5ld2lnbm9yZSA9
IGlnbm9yZS5jb3B5KCkKKyAgICAgICAgICAgICAgICAgICAgbmV3aWdub3JlLmFkZChzbGljaW5n
X2FyZ2tleSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChpdGVtc19iZWZvcmUsIGl0ZW1z
X3NhbWUsIGl0ZW1zX290aGVyLCBuZXdpZ25vcmUpCisgICAgcmV0dXJuIGl0ZW1zLCBOb25lLCBO
b25lLCBOb25lCisKK2RlZiBnZXRfcGFyYW1ldHJpemVkX2ZpeHR1cmVfa2V5cyhpdGVtLCBzY29w
ZW51bSk6CisgICAgIiIiIHJldHVybiBsaXN0IG9mIGtleXMgZm9yIGFsbCBwYXJhbWV0cml6ZWQg
YXJndW1lbnRzIHdoaWNoIG1hdGNoCisgICAgdGhlIHNwZWNpZmllZCBzY29wZS4gIiIiCisgICAg
YXNzZXJ0IHNjb3BlbnVtIDwgc2NvcGVudW1fZnVuY3Rpb24gICMgZnVuY3Rpb24KKyAgICB0cnk6
CisgICAgICAgIGNzID0gaXRlbS5jYWxsc3BlYworICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoK
KyAgICAgICAgcGFzcworICAgIGVsc2U6CisgICAgICAgICMgY3MuaW5kaWN0ZXMuaXRlbXMoKSBp
cyByYW5kb20gb3JkZXIgb2YgYXJnbmFtZXMgYnV0CisgICAgICAgICMgdGhlbiBhZ2FpbiBkaWZm
ZXJlbnQgZnVuY3Rpb25zIChpdGVtcykgY2FuIGNoYW5nZSBvcmRlciBvZgorICAgICAgICAjIGFy
Z3VtZW50cyBzbyBpdCBkb2Vzbid0IG1hdHRlciBtdWNoIHByb2JhYmx5CisgICAgICAgIGZvciBh
cmduYW1lLCBwYXJhbV9pbmRleCBpbiBjcy5pbmRpY2VzLml0ZW1zKCk6CisgICAgICAgICAgICBp
ZiBjcy5fYXJnMnNjb3BlbnVtW2FyZ25hbWVdICE9IHNjb3BlbnVtOgorICAgICAgICAgICAgICAg
IGNvbnRpbnVlCisgICAgICAgICAgICBpZiBzY29wZW51bSA9PSAwOiAgICAjIHNlc3Npb24KKyAg
ICAgICAgICAgICAgICBrZXkgPSAoYXJnbmFtZSwgcGFyYW1faW5kZXgpCisgICAgICAgICAgICBl
bGlmIHNjb3BlbnVtID09IDE6ICAjIG1vZHVsZQorICAgICAgICAgICAgICAgIGtleSA9IChhcmdu
YW1lLCBwYXJhbV9pbmRleCwgaXRlbS5mc3BhdGgpCisgICAgICAgICAgICBlbGlmIHNjb3BlbnVt
ID09IDI6ICAjIGNsYXNzCisgICAgICAgICAgICAgICAga2V5ID0gKGFyZ25hbWUsIHBhcmFtX2lu
ZGV4LCBpdGVtLmZzcGF0aCwgaXRlbS5jbHMpCisgICAgICAgICAgICB5aWVsZCBrZXkKKworCitk
ZWYgeHVuaXRzZXR1cChvYmosIG5hbWUpOgorICAgIG1ldGggPSBnZXRhdHRyKG9iaiwgbmFtZSwg
Tm9uZSkKKyAgICBpZiBnZXRmaXh0dXJlbWFya2VyKG1ldGgpIGlzIE5vbmU6CisgICAgICAgIHJl
dHVybiBtZXRoCisKK2RlZiBnZXRmaXh0dXJlbWFya2VyKG9iaik6CisgICAgIiIiIHJldHVybiBm
aXh0dXJlbWFya2VyIG9yIE5vbmUgaWYgaXQgZG9lc24ndCBleGlzdCBvciByYWlzZWQKKyAgICBl
eGNlcHRpb25zLiIiIgorICAgIHRyeToKKyAgICAgICAgcmV0dXJuIGdldGF0dHIob2JqLCAiX3B5
dGVzdGZpeHR1cmVmdW5jdGlvbiIsIE5vbmUpCisgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0
OgorICAgICAgICByYWlzZQorICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICMgc29tZSBv
YmplY3RzIHJhaXNlIGVycm9ycyBsaWtlIHJlcXVlc3QgKGZyb20gZmxhc2sgaW1wb3J0IHJlcXVl
c3QpCisgICAgICAgICMgd2UgZG9uJ3QgZXhwZWN0IHRoZW0gdG8gYmUgZml4dHVyZSBmdW5jdGlv
bnMKKyAgICAgICAgcmV0dXJuIE5vbmUKKworc2NvcGVuYW1lMmNsYXNzID0geworICAgICdjbGFz
cyc6IENsYXNzLAorICAgICdtb2R1bGUnOiBNb2R1bGUsCisgICAgJ2Z1bmN0aW9uJzogcHl0ZXN0
Lkl0ZW0sCit9CitkZWYgZ2V0X3Njb3BlX25vZGUobm9kZSwgc2NvcGUpOgorICAgIGNscyA9IHNj
b3BlbmFtZTJjbGFzcy5nZXQoc2NvcGUpCisgICAgaWYgY2xzIGlzIE5vbmU6CisgICAgICAgIGlm
IHNjb3BlID09ICJzZXNzaW9uIjoKKyAgICAgICAgICAgIHJldHVybiBub2RlLnNlc3Npb24KKyAg
ICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5rbm93biBzY29wZSIpCisgICAgcmV0dXJuIG5vZGUu
Z2V0cGFyZW50KGNscykKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90
b29scy9weXRlc3QvX3B5dGVzdC9yZWN3YXJuLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQv
dzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L3JlY3dhcm4ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAuLmE4OTQ3NGMwMzZhCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJp
dmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L3JlY3dhcm4ucHkKQEAg
LTAsMCArMSwyMjEgQEAKKyIiIiByZWNvcmRpbmcgd2FybmluZ3MgZHVyaW5nIHRlc3QgZnVuY3Rp
b24gZXhlY3V0aW9uLiAiIiIKKworaW1wb3J0IGluc3BlY3QKKworaW1wb3J0IF9weXRlc3QuX2Nv
ZGUKK2ltcG9ydCBweQoraW1wb3J0IHN5cworaW1wb3J0IHdhcm5pbmdzCitpbXBvcnQgcHl0ZXN0
CisKKworQHB5dGVzdC55aWVsZF9maXh0dXJlCitkZWYgcmVjd2FybihyZXF1ZXN0KToKKyAgICAi
IiJSZXR1cm4gYSBXYXJuaW5nc1JlY29yZGVyIGluc3RhbmNlIHRoYXQgcHJvdmlkZXMgdGhlc2Ug
bWV0aG9kczoKKworICAgICogYGBwb3AoY2F0ZWdvcnk9Tm9uZSlgYDogcmV0dXJuIGxhc3Qgd2Fy
bmluZyBtYXRjaGluZyB0aGUgY2F0ZWdvcnkuCisgICAgKiBgYGNsZWFyKClgYDogY2xlYXIgbGlz
dCBvZiB3YXJuaW5ncworCisgICAgU2VlIGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeS93
YXJuaW5ncy5odG1sIGZvciBpbmZvcm1hdGlvbgorICAgIG9uIHdhcm5pbmcgY2F0ZWdvcmllcy4K
KyAgICAiIiIKKyAgICB3cmVjID0gV2FybmluZ3NSZWNvcmRlcigpCisgICAgd2l0aCB3cmVjOgor
ICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2RlZmF1bHQnKQorICAgICAgICB5aWVsZCB3
cmVjCisKKworZGVmIHB5dGVzdF9uYW1lc3BhY2UoKToKKyAgICByZXR1cm4geydkZXByZWNhdGVk
X2NhbGwnOiBkZXByZWNhdGVkX2NhbGwsCisgICAgICAgICAgICAnd2FybnMnOiB3YXJuc30KKwor
CitkZWYgZGVwcmVjYXRlZF9jYWxsKGZ1bmM9Tm9uZSwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAi
IiIgYXNzZXJ0IHRoYXQgY2FsbGluZyBgYGZ1bmMoKmFyZ3MsICoqa3dhcmdzKWBgIHRyaWdnZXJz
IGEKKyAgICBgYERlcHJlY2F0aW9uV2FybmluZ2BgIG9yIGBgUGVuZGluZ0RlcHJlY2F0aW9uV2Fy
bmluZ2BgLgorCisgICAgVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCBhcyBhIGNvbnRleHQgbWFu
YWdlcjo6CisKKyAgICAgICAgPj4+IHdpdGggZGVwcmVjYXRlZF9jYWxsKCk6CisgICAgICAgIC4u
LiAgICBteW9iamVjdC5kZXByZWNhdGVkX21ldGhvZCgpCisKKyAgICBOb3RlOiB3ZSBjYW5ub3Qg
dXNlIFdhcm5pbmdzUmVjb3JkZXIgaGVyZSBiZWNhdXNlIGl0IGlzIHN0aWxsIHN1YmplY3QKKyAg
ICB0byB0aGUgbWVjaGFuaXNtIHRoYXQgcHJldmVudHMgd2FybmluZ3Mgb2YgdGhlIHNhbWUgdHlw
ZSBmcm9tIGJlaW5nCisgICAgdHJpZ2dlcmVkIHR3aWNlIGZvciB0aGUgc2FtZSBtb2R1bGUuIFNl
ZSAjMTE5MC4KKyAgICAiIiIKKyAgICBpZiBub3QgZnVuYzoKKyAgICAgICAgcmV0dXJuIFdhcm5p
bmdzQ2hlY2tlcihleHBlY3RlZF93YXJuaW5nPURlcHJlY2F0aW9uV2FybmluZykKKworICAgIGNh
dGVnb3JpZXMgPSBbXQorCisgICAgZGVmIHdhcm5fZXhwbGljaXQobWVzc2FnZSwgY2F0ZWdvcnks
ICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGNhdGVnb3JpZXMuYXBwZW5kKGNhdGVnb3J5KQor
ICAgICAgICBvbGRfd2Fybl9leHBsaWNpdChtZXNzYWdlLCBjYXRlZ29yeSwgKmFyZ3MsICoqa3dh
cmdzKQorCisgICAgZGVmIHdhcm4obWVzc2FnZSwgY2F0ZWdvcnk9Tm9uZSwgKmFyZ3MsICoqa3dh
cmdzKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShtZXNzYWdlLCBXYXJuaW5nKToKKyAgICAgICAg
ICAgIGNhdGVnb3JpZXMuYXBwZW5kKG1lc3NhZ2UuX19jbGFzc19fKQorICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgY2F0ZWdvcmllcy5hcHBlbmQoY2F0ZWdvcnkpCisgICAgICAgIG9sZF93YXJu
KG1lc3NhZ2UsIGNhdGVnb3J5LCAqYXJncywgKiprd2FyZ3MpCisKKyAgICBvbGRfd2FybiA9IHdh
cm5pbmdzLndhcm4KKyAgICBvbGRfd2Fybl9leHBsaWNpdCA9IHdhcm5pbmdzLndhcm5fZXhwbGlj
aXQKKyAgICB3YXJuaW5ncy53YXJuX2V4cGxpY2l0ID0gd2Fybl9leHBsaWNpdAorICAgIHdhcm5p
bmdzLndhcm4gPSB3YXJuCisgICAgdHJ5OgorICAgICAgICByZXQgPSBmdW5jKCphcmdzLCAqKmt3
YXJncykKKyAgICBmaW5hbGx5OgorICAgICAgICB3YXJuaW5ncy53YXJuX2V4cGxpY2l0ID0gb2xk
X3dhcm5fZXhwbGljaXQKKyAgICAgICAgd2FybmluZ3Mud2FybiA9IG9sZF93YXJuCisgICAgZGVw
cmVjYXRpb25fY2F0ZWdvcmllcyA9IChEZXByZWNhdGlvbldhcm5pbmcsIFBlbmRpbmdEZXByZWNh
dGlvbldhcm5pbmcpCisgICAgaWYgbm90IGFueShpc3N1YmNsYXNzKGMsIGRlcHJlY2F0aW9uX2Nh
dGVnb3JpZXMpIGZvciBjIGluIGNhdGVnb3JpZXMpOgorICAgICAgICBfX3RyYWNlYmFja2hpZGVf
XyA9IFRydWUKKyAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoIiVyIGRpZCBub3QgcHJvZHVj
ZSBEZXByZWNhdGlvbldhcm5pbmciICUgKGZ1bmMsKSkKKyAgICByZXR1cm4gcmV0CisKKworZGVm
IHdhcm5zKGV4cGVjdGVkX3dhcm5pbmcsICphcmdzLCAqKmt3YXJncyk6CisgICAgIiIiQXNzZXJ0
IHRoYXQgY29kZSByYWlzZXMgYSBwYXJ0aWN1bGFyIGNsYXNzIG9mIHdhcm5pbmcuCisKKyAgICBT
cGVjaWZpY2FsbHksIHRoZSBpbnB1dCBAZXhwZWN0ZWRfd2FybmluZyBjYW4gYmUgYSB3YXJuaW5n
IGNsYXNzIG9yCisgICAgdHVwbGUgb2Ygd2FybmluZyBjbGFzc2VzLCBhbmQgdGhlIGNvZGUgbXVz
dCByZXR1cm4gdGhhdCB3YXJuaW5nCisgICAgKGlmIGEgc2luZ2xlIGNsYXNzKSBvciBvbmUgb2Yg
dGhvc2Ugd2FybmluZ3MgKGlmIGEgdHVwbGUpLgorCisgICAgVGhpcyBoZWxwZXIgcHJvZHVjZXMg
YSBsaXN0IG9mIGBgd2FybmluZ3MuV2FybmluZ01lc3NhZ2VgYCBvYmplY3RzLAorICAgIG9uZSBm
b3IgZWFjaCB3YXJuaW5nIHJhaXNlZC4KKworICAgIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQg
YXMgYSBjb250ZXh0IG1hbmFnZXIsIG9yIGFueSBvZiB0aGUgb3RoZXIgd2F5cworICAgIGBgcHl0
ZXN0LnJhaXNlc2BgIGNhbiBiZSB1c2VkOjoKKworICAgICAgICA+Pj4gd2l0aCB3YXJucyhSdW50
aW1lV2FybmluZyk6CisgICAgICAgIC4uLiAgICB3YXJuaW5ncy53YXJuKCJteSB3YXJuaW5nIiwg
UnVudGltZVdhcm5pbmcpCisgICAgIiIiCisgICAgd2NoZWNrID0gV2FybmluZ3NDaGVja2VyKGV4
cGVjdGVkX3dhcm5pbmcpCisgICAgaWYgbm90IGFyZ3M6CisgICAgICAgIHJldHVybiB3Y2hlY2sK
KyAgICBlbGlmIGlzaW5zdGFuY2UoYXJnc1swXSwgc3RyKToKKyAgICAgICAgY29kZSwgPSBhcmdz
CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGNvZGUsIHN0cikKKyAgICAgICAgZnJhbWUgPSBz
eXMuX2dldGZyYW1lKDEpCisgICAgICAgIGxvYyA9IGZyYW1lLmZfbG9jYWxzLmNvcHkoKQorICAg
ICAgICBsb2MudXBkYXRlKGt3YXJncykKKworICAgICAgICB3aXRoIHdjaGVjazoKKyAgICAgICAg
ICAgIGNvZGUgPSBfcHl0ZXN0Ll9jb2RlLlNvdXJjZShjb2RlKS5jb21waWxlKCkKKyAgICAgICAg
ICAgIHB5LmJ1aWx0aW4uZXhlY18oY29kZSwgZnJhbWUuZl9nbG9iYWxzLCBsb2MpCisgICAgZWxz
ZToKKyAgICAgICAgZnVuYyA9IGFyZ3NbMF0KKyAgICAgICAgd2l0aCB3Y2hlY2s6CisgICAgICAg
ICAgICByZXR1cm4gZnVuYygqYXJnc1sxOl0sICoqa3dhcmdzKQorCisKK2NsYXNzIFJlY29yZGVk
V2FybmluZyhvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXNzYWdlLCBjYXRlZ29y
eSwgZmlsZW5hbWUsIGxpbmVubywgZmlsZSwgbGluZSk6CisgICAgICAgIHNlbGYubWVzc2FnZSA9
IG1lc3NhZ2UKKyAgICAgICAgc2VsZi5jYXRlZ29yeSA9IGNhdGVnb3J5CisgICAgICAgIHNlbGYu
ZmlsZW5hbWUgPSBmaWxlbmFtZQorICAgICAgICBzZWxmLmxpbmVubyA9IGxpbmVubworICAgICAg
ICBzZWxmLmZpbGUgPSBmaWxlCisgICAgICAgIHNlbGYubGluZSA9IGxpbmUKKworCitjbGFzcyBX
YXJuaW5nc1JlY29yZGVyKG9iamVjdCk6CisgICAgIiIiQSBjb250ZXh0IG1hbmFnZXIgdG8gcmVj
b3JkIHJhaXNlZCB3YXJuaW5ncy4KKworICAgIEFkYXB0ZWQgZnJvbSBgd2FybmluZ3MuY2F0Y2hf
d2FybmluZ3NgLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZHVsZT1Ob25l
KToKKyAgICAgICAgc2VsZi5fbW9kdWxlID0gc3lzLm1vZHVsZXNbJ3dhcm5pbmdzJ10gaWYgbW9k
dWxlIGlzIE5vbmUgZWxzZSBtb2R1bGUKKyAgICAgICAgc2VsZi5fZW50ZXJlZCA9IEZhbHNlCisg
ICAgICAgIHNlbGYuX2xpc3QgPSBbXQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGxpc3Qoc2Vs
Zik6CisgICAgICAgICIiIlRoZSBsaXN0IG9mIHJlY29yZGVkIHdhcm5pbmdzLiIiIgorICAgICAg
ICByZXR1cm4gc2VsZi5fbGlzdAorCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGkpOgorICAg
ICAgICAiIiJHZXQgYSByZWNvcmRlZCB3YXJuaW5nIGJ5IGluZGV4LiIiIgorICAgICAgICByZXR1
cm4gc2VsZi5fbGlzdFtpXQorCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICAiIiJJ
dGVyYXRlIHRocm91Z2ggdGhlIHJlY29yZGVkIHdhcm5pbmdzLiIiIgorICAgICAgICByZXR1cm4g
aXRlcihzZWxmLl9saXN0KQorCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgICIiIlRo
ZSBudW1iZXIgb2YgcmVjb3JkZWQgd2FybmluZ3MuIiIiCisgICAgICAgIHJldHVybiBsZW4oc2Vs
Zi5fbGlzdCkKKworICAgIGRlZiBwb3Aoc2VsZiwgY2xzPVdhcm5pbmcpOgorICAgICAgICAiIiJQ
b3AgdGhlIGZpcnN0IHJlY29yZGVkIHdhcm5pbmcsIHJhaXNlIGV4Y2VwdGlvbiBpZiBub3QgZXhp
c3RzLiIiIgorICAgICAgICBmb3IgaSwgdyBpbiBlbnVtZXJhdGUoc2VsZi5fbGlzdCk6CisgICAg
ICAgICAgICBpZiBpc3N1YmNsYXNzKHcuY2F0ZWdvcnksIGNscyk6CisgICAgICAgICAgICAgICAg
cmV0dXJuIHNlbGYuX2xpc3QucG9wKGkpCisgICAgICAgIF9fdHJhY2ViYWNraGlkZV9fID0gVHJ1
ZQorICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigiJXIgbm90IGZvdW5kIGluIHdhcm5pbmcg
bGlzdCIgJSBjbHMpCisKKyAgICBkZWYgY2xlYXIoc2VsZik6CisgICAgICAgICIiIkNsZWFyIHRo
ZSBsaXN0IG9mIHJlY29yZGVkIHdhcm5pbmdzLiIiIgorICAgICAgICBzZWxmLl9saXN0WzpdID0g
W10KKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2VudGVyZWQ6
CisgICAgICAgICAgICBfX3RyYWNlYmFja2hpZGVfXyA9IFRydWUKKyAgICAgICAgICAgIHJhaXNl
IFJ1bnRpbWVFcnJvcigiQ2Fubm90IGVudGVyICVyIHR3aWNlIiAlIHNlbGYpCisgICAgICAgIHNl
bGYuX2VudGVyZWQgPSBUcnVlCisgICAgICAgIHNlbGYuX2ZpbHRlcnMgPSBzZWxmLl9tb2R1bGUu
ZmlsdGVycworICAgICAgICBzZWxmLl9tb2R1bGUuZmlsdGVycyA9IHNlbGYuX2ZpbHRlcnNbOl0K
KyAgICAgICAgc2VsZi5fc2hvd3dhcm5pbmcgPSBzZWxmLl9tb2R1bGUuc2hvd3dhcm5pbmcKKwor
ICAgICAgICBkZWYgc2hvd3dhcm5pbmcobWVzc2FnZSwgY2F0ZWdvcnksIGZpbGVuYW1lLCBsaW5l
bm8sCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlPU5vbmUsIGxpbmU9Tm9uZSk6CisgICAg
ICAgICAgICBzZWxmLl9saXN0LmFwcGVuZChSZWNvcmRlZFdhcm5pbmcoCisgICAgICAgICAgICAg
ICAgbWVzc2FnZSwgY2F0ZWdvcnksIGZpbGVuYW1lLCBsaW5lbm8sIGZpbGUsIGxpbmUpKQorCisg
ICAgICAgICAgICAjIHN0aWxsIHBlcmZvcm0gb2xkIHNob3d3YXJuaW5nIGZ1bmN0aW9uYWxpdHkK
KyAgICAgICAgICAgIHNlbGYuX3Nob3d3YXJuaW5nKAorICAgICAgICAgICAgICAgIG1lc3NhZ2Us
IGNhdGVnb3J5LCBmaWxlbmFtZSwgbGluZW5vLCBmaWxlPWZpbGUsIGxpbmU9bGluZSkKKworICAg
ICAgICBzZWxmLl9tb2R1bGUuc2hvd3dhcm5pbmcgPSBzaG93d2FybmluZworCisgICAgICAgICMg
YWxsb3cgdGhlIHNhbWUgd2FybmluZyB0byBiZSByYWlzZWQgbW9yZSB0aGFuIG9uY2UKKworICAg
ICAgICBzZWxmLl9tb2R1bGUuc2ltcGxlZmlsdGVyKCdhbHdheXMnKQorICAgICAgICByZXR1cm4g
c2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICpleGNfaW5mbyk6CisgICAgICAgIGlmIG5v
dCBzZWxmLl9lbnRlcmVkOgorICAgICAgICAgICAgX190cmFjZWJhY2toaWRlX18gPSBUcnVlCisg
ICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkNhbm5vdCBleGl0ICVyIHdpdGhvdXQgZW50
ZXJpbmcgZmlyc3QiICUgc2VsZikKKyAgICAgICAgc2VsZi5fbW9kdWxlLmZpbHRlcnMgPSBzZWxm
Ll9maWx0ZXJzCisgICAgICAgIHNlbGYuX21vZHVsZS5zaG93d2FybmluZyA9IHNlbGYuX3Nob3d3
YXJuaW5nCisKKworY2xhc3MgV2FybmluZ3NDaGVja2VyKFdhcm5pbmdzUmVjb3JkZXIpOgorICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBleHBlY3RlZF93YXJuaW5nPU5vbmUsIG1vZHVsZT1Ob25lKToK
KyAgICAgICAgc3VwZXIoV2FybmluZ3NDaGVja2VyLCBzZWxmKS5fX2luaXRfXyhtb2R1bGU9bW9k
dWxlKQorCisgICAgICAgIG1zZyA9ICgiZXhjZXB0aW9ucyBtdXN0IGJlIG9sZC1zdHlsZSBjbGFz
c2VzIG9yICIKKyAgICAgICAgICAgICAgICJkZXJpdmVkIGZyb20gV2FybmluZywgbm90ICVzIikK
KyAgICAgICAgaWYgaXNpbnN0YW5jZShleHBlY3RlZF93YXJuaW5nLCB0dXBsZSk6CisgICAgICAg
ICAgICBmb3IgZXhjIGluIGV4cGVjdGVkX3dhcm5pbmc6CisgICAgICAgICAgICAgICAgaWYgbm90
IGluc3BlY3QuaXNjbGFzcyhleGMpOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJy
b3IobXNnICUgdHlwZShleGMpKQorICAgICAgICBlbGlmIGluc3BlY3QuaXNjbGFzcyhleHBlY3Rl
ZF93YXJuaW5nKToKKyAgICAgICAgICAgIGV4cGVjdGVkX3dhcm5pbmcgPSAoZXhwZWN0ZWRfd2Fy
bmluZywpCisgICAgICAgIGVsaWYgZXhwZWN0ZWRfd2FybmluZyBpcyBub3QgTm9uZToKKyAgICAg
ICAgICAgIHJhaXNlIFR5cGVFcnJvcihtc2cgJSB0eXBlKGV4cGVjdGVkX3dhcm5pbmcpKQorCisg
ICAgICAgIHNlbGYuZXhwZWN0ZWRfd2FybmluZyA9IGV4cGVjdGVkX3dhcm5pbmcKKworICAgIGRl
ZiBfX2V4aXRfXyhzZWxmLCAqZXhjX2luZm8pOgorICAgICAgICBzdXBlcihXYXJuaW5nc0NoZWNr
ZXIsIHNlbGYpLl9fZXhpdF9fKCpleGNfaW5mbykKKworICAgICAgICAjIG9ubHkgY2hlY2sgaWYg
d2UncmUgbm90IGN1cnJlbnRseSBoYW5kbGluZyBhbiBleGNlcHRpb24KKyAgICAgICAgaWYgYWxs
KGEgaXMgTm9uZSBmb3IgYSBpbiBleGNfaW5mbyk6CisgICAgICAgICAgICBpZiBzZWxmLmV4cGVj
dGVkX3dhcm5pbmcgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgaWYgbm90IGFueShyLmNh
dGVnb3J5IGluIHNlbGYuZXhwZWN0ZWRfd2FybmluZyBmb3IgciBpbiBzZWxmKToKKyAgICAgICAg
ICAgICAgICAgICAgX190cmFjZWJhY2toaWRlX18gPSBUcnVlCisgICAgICAgICAgICAgICAgICAg
IHB5dGVzdC5mYWlsKCJESUQgTk9UIFdBUk4iKQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMv
aW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L3Jlc3VsdGxvZy5weSBiL1dlYkRyaXZl
clRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9yZXN1bHRsb2cucHkKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjM2NzBmMDIxNGM5Ci0tLSAvZGV2
L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0
ZXN0L3Jlc3VsdGxvZy5weQpAQCAtMCwwICsxLDEwNCBAQAorIiIiIGxvZyBtYWNoaW5lLXBhcnNl
YWJsZSB0ZXN0IHNlc3Npb24gcmVzdWx0IGluZm9ybWF0aW9uIGluIGEgcGxhaW4KK3RleHQgZmls
ZS4KKyIiIgorCitpbXBvcnQgcHkKK2ltcG9ydCBvcworCitkZWYgcHl0ZXN0X2FkZG9wdGlvbihw
YXJzZXIpOgorICAgIGdyb3VwID0gcGFyc2VyLmdldGdyb3VwKCJ0ZXJtaW5hbCByZXBvcnRpbmci
LCAicmVzdWx0bG9nIHBsdWdpbiBvcHRpb25zIikKKyAgICBncm91cC5hZGRvcHRpb24oJy0tcmVz
dWx0bG9nJywgJy0tcmVzdWx0LWxvZycsIGFjdGlvbj0ic3RvcmUiLAorICAgICAgICBtZXRhdmFy
PSJwYXRoIiwgZGVmYXVsdD1Ob25lLAorICAgICAgICBoZWxwPSJwYXRoIGZvciBtYWNoaW5lLXJl
YWRhYmxlIHJlc3VsdCBsb2cuIikKKworZGVmIHB5dGVzdF9jb25maWd1cmUoY29uZmlnKToKKyAg
ICByZXN1bHRsb2cgPSBjb25maWcub3B0aW9uLnJlc3VsdGxvZworICAgICMgcHJldmVudCBvcGVu
aW5nIHJlc3VsdGxvZyBvbiBzbGF2ZSBub2RlcyAoeGRpc3QpCisgICAgaWYgcmVzdWx0bG9nIGFu
ZCBub3QgaGFzYXR0cihjb25maWcsICdzbGF2ZWlucHV0Jyk6CisgICAgICAgIGRpcm5hbWUgPSBv
cy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKHJlc3VsdGxvZykpCisgICAgICAgIGlmIG5v
dCBvcy5wYXRoLmlzZGlyKGRpcm5hbWUpOgorICAgICAgICAgICAgb3MubWFrZWRpcnMoZGlybmFt
ZSkKKyAgICAgICAgbG9nZmlsZSA9IG9wZW4ocmVzdWx0bG9nLCAndycsIDEpICMgbGluZSBidWZm
ZXJlZAorICAgICAgICBjb25maWcuX3Jlc3VsdGxvZyA9IFJlc3VsdExvZyhjb25maWcsIGxvZ2Zp
bGUpCisgICAgICAgIGNvbmZpZy5wbHVnaW5tYW5hZ2VyLnJlZ2lzdGVyKGNvbmZpZy5fcmVzdWx0
bG9nKQorCitkZWYgcHl0ZXN0X3VuY29uZmlndXJlKGNvbmZpZyk6CisgICAgcmVzdWx0bG9nID0g
Z2V0YXR0cihjb25maWcsICdfcmVzdWx0bG9nJywgTm9uZSkKKyAgICBpZiByZXN1bHRsb2c6Cisg
ICAgICAgIHJlc3VsdGxvZy5sb2dmaWxlLmNsb3NlKCkKKyAgICAgICAgZGVsIGNvbmZpZy5fcmVz
dWx0bG9nCisgICAgICAgIGNvbmZpZy5wbHVnaW5tYW5hZ2VyLnVucmVnaXN0ZXIocmVzdWx0bG9n
KQorCitkZWYgZ2VuZXJpY19wYXRoKGl0ZW0pOgorICAgIGNoYWluID0gaXRlbS5saXN0Y2hhaW4o
KQorICAgIGdwYXRoID0gW2NoYWluWzBdLm5hbWVdCisgICAgZnNwYXRoID0gY2hhaW5bMF0uZnNw
YXRoCisgICAgZnNwYXJ0ID0gRmFsc2UKKyAgICBmb3Igbm9kZSBpbiBjaGFpblsxOl06CisgICAg
ICAgIG5ld2ZzcGF0aCA9IG5vZGUuZnNwYXRoCisgICAgICAgIGlmIG5ld2ZzcGF0aCA9PSBmc3Bh
dGg6CisgICAgICAgICAgICBpZiBmc3BhcnQ6CisgICAgICAgICAgICAgICAgZ3BhdGguYXBwZW5k
KCc6JykKKyAgICAgICAgICAgICAgICBmc3BhcnQgPSBGYWxzZQorICAgICAgICAgICAgZWxzZToK
KyAgICAgICAgICAgICAgICBncGF0aC5hcHBlbmQoJy4nKQorICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgZ3BhdGguYXBwZW5kKCcvJykKKyAgICAgICAgICAgIGZzcGFydCA9IFRydWUKKyAgICAg
ICAgbmFtZSA9IG5vZGUubmFtZQorICAgICAgICBpZiBuYW1lWzBdIGluICcoWyc6CisgICAgICAg
ICAgICBncGF0aC5wb3AoKQorICAgICAgICBncGF0aC5hcHBlbmQobmFtZSkKKyAgICAgICAgZnNw
YXRoID0gbmV3ZnNwYXRoCisgICAgcmV0dXJuICcnLmpvaW4oZ3BhdGgpCisKK2NsYXNzIFJlc3Vs
dExvZyhvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25maWcsIGxvZ2ZpbGUpOgor
ICAgICAgICBzZWxmLmNvbmZpZyA9IGNvbmZpZworICAgICAgICBzZWxmLmxvZ2ZpbGUgPSBsb2dm
aWxlICMgcHJlZmVyYWJseSBsaW5lIGJ1ZmZlcmVkCisKKyAgICBkZWYgd3JpdGVfbG9nX2VudHJ5
KHNlbGYsIHRlc3RwYXRoLCBsZXR0ZXJjb2RlLCBsb25ncmVwcik6CisgICAgICAgIHB5LmJ1aWx0
aW4ucHJpbnRfKCIlcyAlcyIgJSAobGV0dGVyY29kZSwgdGVzdHBhdGgpLCBmaWxlPXNlbGYubG9n
ZmlsZSkKKyAgICAgICAgZm9yIGxpbmUgaW4gbG9uZ3JlcHIuc3BsaXRsaW5lcygpOgorICAgICAg
ICAgICAgcHkuYnVpbHRpbi5wcmludF8oIiAlcyIgJSBsaW5lLCBmaWxlPXNlbGYubG9nZmlsZSkK
KworICAgIGRlZiBsb2dfb3V0Y29tZShzZWxmLCByZXBvcnQsIGxldHRlcmNvZGUsIGxvbmdyZXBy
KToKKyAgICAgICAgdGVzdHBhdGggPSBnZXRhdHRyKHJlcG9ydCwgJ25vZGVpZCcsIE5vbmUpCisg
ICAgICAgIGlmIHRlc3RwYXRoIGlzIE5vbmU6CisgICAgICAgICAgICB0ZXN0cGF0aCA9IHJlcG9y
dC5mc3BhdGgKKyAgICAgICAgc2VsZi53cml0ZV9sb2dfZW50cnkodGVzdHBhdGgsIGxldHRlcmNv
ZGUsIGxvbmdyZXByKQorCisgICAgZGVmIHB5dGVzdF9ydW50ZXN0X2xvZ3JlcG9ydChzZWxmLCBy
ZXBvcnQpOgorICAgICAgICBpZiByZXBvcnQud2hlbiAhPSAiY2FsbCIgYW5kIHJlcG9ydC5wYXNz
ZWQ6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgcmVzID0gc2VsZi5jb25maWcuaG9vay5w
eXRlc3RfcmVwb3J0X3Rlc3RzdGF0dXMocmVwb3J0PXJlcG9ydCkKKyAgICAgICAgY29kZSA9IHJl
c1sxXQorICAgICAgICBpZiBjb2RlID09ICd4JzoKKyAgICAgICAgICAgIGxvbmdyZXByID0gc3Ry
KHJlcG9ydC5sb25ncmVwcikKKyAgICAgICAgZWxpZiBjb2RlID09ICdYJzoKKyAgICAgICAgICAg
IGxvbmdyZXByID0gJycKKyAgICAgICAgZWxpZiByZXBvcnQucGFzc2VkOgorICAgICAgICAgICAg
bG9uZ3JlcHIgPSAiIgorICAgICAgICBlbGlmIHJlcG9ydC5mYWlsZWQ6CisgICAgICAgICAgICBs
b25ncmVwciA9IHN0cihyZXBvcnQubG9uZ3JlcHIpCisgICAgICAgIGVsaWYgcmVwb3J0LnNraXBw
ZWQ6CisgICAgICAgICAgICBsb25ncmVwciA9IHN0cihyZXBvcnQubG9uZ3JlcHJbMl0pCisgICAg
ICAgIHNlbGYubG9nX291dGNvbWUocmVwb3J0LCBjb2RlLCBsb25ncmVwcikKKworICAgIGRlZiBw
eXRlc3RfY29sbGVjdHJlcG9ydChzZWxmLCByZXBvcnQpOgorICAgICAgICBpZiBub3QgcmVwb3J0
LnBhc3NlZDoKKyAgICAgICAgICAgIGlmIHJlcG9ydC5mYWlsZWQ6CisgICAgICAgICAgICAgICAg
Y29kZSA9ICJGIgorICAgICAgICAgICAgICAgIGxvbmdyZXByID0gc3RyKHJlcG9ydC5sb25ncmVw
cikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYXNzZXJ0IHJlcG9ydC5za2lw
cGVkCisgICAgICAgICAgICAgICAgY29kZSA9ICJTIgorICAgICAgICAgICAgICAgIGxvbmdyZXBy
ID0gIiVzOiVkOiAlcyIgJSByZXBvcnQubG9uZ3JlcHIKKyAgICAgICAgICAgIHNlbGYubG9nX291
dGNvbWUocmVwb3J0LCBjb2RlLCBsb25ncmVwcikKKworICAgIGRlZiBweXRlc3RfaW50ZXJuYWxl
cnJvcihzZWxmLCBleGNyZXByKToKKyAgICAgICAgcmVwcmNyYXNoID0gZ2V0YXR0cihleGNyZXBy
LCAncmVwcmNyYXNoJywgTm9uZSkKKyAgICAgICAgcGF0aCA9IGdldGF0dHIocmVwcmNyYXNoLCAi
cGF0aCIsIE5vbmUpCisgICAgICAgIGlmIHBhdGggaXMgTm9uZToKKyAgICAgICAgICAgIHBhdGgg
PSAiY3dkOiVzIiAlIHB5LnBhdGgubG9jYWwoKQorICAgICAgICBzZWxmLndyaXRlX2xvZ19lbnRy
eShwYXRoLCAnIScsIHN0cihleGNyZXByKSkKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2lt
cG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9ydW5uZXIucHkgYi9XZWJEcml2ZXJUZXN0
cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvcnVubmVyLnB5Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jZGU5NGM4Yzg5ZQotLS0gL2Rldi9udWxsCisr
KyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9ydW5u
ZXIucHkKQEAgLTAsMCArMSw1MTUgQEAKKyIiIiBiYXNpYyBjb2xsZWN0IGFuZCBydW50ZXN0IHBy
b3RvY29sIGltcGxlbWVudGF0aW9ucyAiIiIKK2ltcG9ydCBiZGIKK2ltcG9ydCBzeXMKK2Zyb20g
dGltZSBpbXBvcnQgdGltZQorCitpbXBvcnQgcHkKK2ltcG9ydCBweXRlc3QKK2Zyb20gX3B5dGVz
dC5fY29kZS5jb2RlIGltcG9ydCBUZXJtaW5hbFJlcHIsIEV4Y2VwdGlvbkluZm8KKworCitkZWYg
cHl0ZXN0X25hbWVzcGFjZSgpOgorICAgIHJldHVybiB7CisgICAgICAgICdmYWlsJyAgICAgICAg
IDogZmFpbCwKKyAgICAgICAgJ3NraXAnICAgICAgICAgOiBza2lwLAorICAgICAgICAnaW1wb3J0
b3Jza2lwJyA6IGltcG9ydG9yc2tpcCwKKyAgICAgICAgJ2V4aXQnICAgICAgICAgOiBleGl0LAor
ICAgIH0KKworIworIyBweXRlc3QgcGx1Z2luIGhvb2tzCisKK2RlZiBweXRlc3RfYWRkb3B0aW9u
KHBhcnNlcik6CisgICAgZ3JvdXAgPSBwYXJzZXIuZ2V0Z3JvdXAoInRlcm1pbmFsIHJlcG9ydGlu
ZyIsICJyZXBvcnRpbmciLCBhZnRlcj0iZ2VuZXJhbCIpCisgICAgZ3JvdXAuYWRkb3B0aW9uKCct
LWR1cmF0aW9ucycsCisgICAgICAgICBhY3Rpb249InN0b3JlIiwgdHlwZT1pbnQsIGRlZmF1bHQ9
Tm9uZSwgbWV0YXZhcj0iTiIsCisgICAgICAgICBoZWxwPSJzaG93IE4gc2xvd2VzdCBzZXR1cC90
ZXN0IGR1cmF0aW9ucyAoTj0wIGZvciBhbGwpLiIpLAorCitkZWYgcHl0ZXN0X3Rlcm1pbmFsX3N1
bW1hcnkodGVybWluYWxyZXBvcnRlcik6CisgICAgZHVyYXRpb25zID0gdGVybWluYWxyZXBvcnRl
ci5jb25maWcub3B0aW9uLmR1cmF0aW9ucworICAgIGlmIGR1cmF0aW9ucyBpcyBOb25lOgorICAg
ICAgICByZXR1cm4KKyAgICB0ciA9IHRlcm1pbmFscmVwb3J0ZXIKKyAgICBkbGlzdCA9IFtdCisg
ICAgZm9yIHJlcGxpc3QgaW4gdHIuc3RhdHMudmFsdWVzKCk6CisgICAgICAgIGZvciByZXAgaW4g
cmVwbGlzdDoKKyAgICAgICAgICAgIGlmIGhhc2F0dHIocmVwLCAnZHVyYXRpb24nKToKKyAgICAg
ICAgICAgICAgICBkbGlzdC5hcHBlbmQocmVwKQorICAgIGlmIG5vdCBkbGlzdDoKKyAgICAgICAg
cmV0dXJuCisgICAgZGxpc3Quc29ydChrZXk9bGFtYmRhIHg6IHguZHVyYXRpb24pCisgICAgZGxp
c3QucmV2ZXJzZSgpCisgICAgaWYgbm90IGR1cmF0aW9uczoKKyAgICAgICAgdHIud3JpdGVfc2Vw
KCI9IiwgInNsb3dlc3QgdGVzdCBkdXJhdGlvbnMiKQorICAgIGVsc2U6CisgICAgICAgIHRyLndy
aXRlX3NlcCgiPSIsICJzbG93ZXN0ICVzIHRlc3QgZHVyYXRpb25zIiAlIGR1cmF0aW9ucykKKyAg
ICAgICAgZGxpc3QgPSBkbGlzdFs6ZHVyYXRpb25zXQorCisgICAgZm9yIHJlcCBpbiBkbGlzdDoK
KyAgICAgICAgbm9kZWlkID0gcmVwLm5vZGVpZC5yZXBsYWNlKCI6OigpOjoiLCAiOjoiKQorICAg
ICAgICB0ci53cml0ZV9saW5lKCIlMDIuMmZzICUtOHMgJXMiICUKKyAgICAgICAgICAgIChyZXAu
ZHVyYXRpb24sIHJlcC53aGVuLCBub2RlaWQpKQorCitkZWYgcHl0ZXN0X3Nlc3Npb25zdGFydChz
ZXNzaW9uKToKKyAgICBzZXNzaW9uLl9zZXR1cHN0YXRlID0gU2V0dXBTdGF0ZSgpCitkZWYgcHl0
ZXN0X3Nlc3Npb25maW5pc2goc2Vzc2lvbik6CisgICAgc2Vzc2lvbi5fc2V0dXBzdGF0ZS50ZWFy
ZG93bl9hbGwoKQorCitjbGFzcyBOb2RlSW5mbzoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9j
YXRpb24pOgorICAgICAgICBzZWxmLmxvY2F0aW9uID0gbG9jYXRpb24KKworZGVmIHB5dGVzdF9y
dW50ZXN0X3Byb3RvY29sKGl0ZW0sIG5leHRpdGVtKToKKyAgICBpdGVtLmlob29rLnB5dGVzdF9y
dW50ZXN0X2xvZ3N0YXJ0KAorICAgICAgICBub2RlaWQ9aXRlbS5ub2RlaWQsIGxvY2F0aW9uPWl0
ZW0ubG9jYXRpb24sCisgICAgKQorICAgIHJ1bnRlc3Rwcm90b2NvbChpdGVtLCBuZXh0aXRlbT1u
ZXh0aXRlbSkKKyAgICByZXR1cm4gVHJ1ZQorCitkZWYgcnVudGVzdHByb3RvY29sKGl0ZW0sIGxv
Zz1UcnVlLCBuZXh0aXRlbT1Ob25lKToKKyAgICBoYXNyZXF1ZXN0ID0gaGFzYXR0cihpdGVtLCAi
X3JlcXVlc3QiKQorICAgIGlmIGhhc3JlcXVlc3QgYW5kIG5vdCBpdGVtLl9yZXF1ZXN0OgorICAg
ICAgICBpdGVtLl9pbml0cmVxdWVzdCgpCisgICAgcmVwID0gY2FsbF9hbmRfcmVwb3J0KGl0ZW0s
ICJzZXR1cCIsIGxvZykKKyAgICByZXBvcnRzID0gW3JlcF0KKyAgICBpZiByZXAucGFzc2VkOgor
ICAgICAgICByZXBvcnRzLmFwcGVuZChjYWxsX2FuZF9yZXBvcnQoaXRlbSwgImNhbGwiLCBsb2cp
KQorICAgIHJlcG9ydHMuYXBwZW5kKGNhbGxfYW5kX3JlcG9ydChpdGVtLCAidGVhcmRvd24iLCBs
b2csCisgICAgICAgIG5leHRpdGVtPW5leHRpdGVtKSkKKyAgICAjIGFmdGVyIGFsbCB0ZWFyZG93
biBob29rcyBoYXZlIGJlZW4gY2FsbGVkCisgICAgIyB3YW50IGZ1bmNhcmdzIGFuZCByZXF1ZXN0
IGluZm8gdG8gZ28gYXdheQorICAgIGlmIGhhc3JlcXVlc3Q6CisgICAgICAgIGl0ZW0uX3JlcXVl
c3QgPSBGYWxzZQorICAgICAgICBpdGVtLmZ1bmNhcmdzID0gTm9uZQorICAgIHJldHVybiByZXBv
cnRzCisKK2RlZiBweXRlc3RfcnVudGVzdF9zZXR1cChpdGVtKToKKyAgICBpdGVtLnNlc3Npb24u
X3NldHVwc3RhdGUucHJlcGFyZShpdGVtKQorCitkZWYgcHl0ZXN0X3J1bnRlc3RfY2FsbChpdGVt
KToKKyAgICB0cnk6CisgICAgICAgIGl0ZW0ucnVudGVzdCgpCisgICAgZXhjZXB0IEV4Y2VwdGlv
bjoKKyAgICAgICAgIyBTdG9yZSB0cmFjZSBpbmZvIHRvIGFsbG93IHBvc3Rtb3J0ZW0gZGVidWdn
aW5nCisgICAgICAgIHR5cGUsIHZhbHVlLCB0YiA9IHN5cy5leGNfaW5mbygpCisgICAgICAgIHRi
ID0gdGIudGJfbmV4dCAgIyBTa2lwICp0aGlzKiBmcmFtZQorICAgICAgICBzeXMubGFzdF90eXBl
ID0gdHlwZQorICAgICAgICBzeXMubGFzdF92YWx1ZSA9IHZhbHVlCisgICAgICAgIHN5cy5sYXN0
X3RyYWNlYmFjayA9IHRiCisgICAgICAgIGRlbCB0YiAgIyBHZXQgcmlkIG9mIGl0IGluIHRoaXMg
bmFtZXNwYWNlCisgICAgICAgIHJhaXNlCisKK2RlZiBweXRlc3RfcnVudGVzdF90ZWFyZG93bihp
dGVtLCBuZXh0aXRlbSk6CisgICAgaXRlbS5zZXNzaW9uLl9zZXR1cHN0YXRlLnRlYXJkb3duX2V4
YWN0KGl0ZW0sIG5leHRpdGVtKQorCitkZWYgcHl0ZXN0X3JlcG9ydF90ZXN0c3RhdHVzKHJlcG9y
dCk6CisgICAgaWYgcmVwb3J0LndoZW4gaW4gKCJzZXR1cCIsICJ0ZWFyZG93biIpOgorICAgICAg
ICBpZiByZXBvcnQuZmFpbGVkOgorICAgICAgICAgICAgIyAgICAgIGNhdGVnb3J5LCBzaG9ydGxl
dHRlciwgdmVyYm9zZS13b3JkCisgICAgICAgICAgICByZXR1cm4gImVycm9yIiwgIkUiLCAiRVJS
T1IiCisgICAgICAgIGVsaWYgcmVwb3J0LnNraXBwZWQ6CisgICAgICAgICAgICByZXR1cm4gInNr
aXBwZWQiLCAicyIsICJTS0lQUEVEIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJu
ICIiLCAiIiwgIiIKKworCisjCisjIEltcGxlbWVudGF0aW9uCisKK2RlZiBjYWxsX2FuZF9yZXBv
cnQoaXRlbSwgd2hlbiwgbG9nPVRydWUsICoqa3dkcyk6CisgICAgY2FsbCA9IGNhbGxfcnVudGVz
dF9ob29rKGl0ZW0sIHdoZW4sICoqa3dkcykKKyAgICBob29rID0gaXRlbS5paG9vaworICAgIHJl
cG9ydCA9IGhvb2sucHl0ZXN0X3J1bnRlc3RfbWFrZXJlcG9ydChpdGVtPWl0ZW0sIGNhbGw9Y2Fs
bCkKKyAgICBpZiBsb2c6CisgICAgICAgIGhvb2sucHl0ZXN0X3J1bnRlc3RfbG9ncmVwb3J0KHJl
cG9ydD1yZXBvcnQpCisgICAgaWYgY2hlY2tfaW50ZXJhY3RpdmVfZXhjZXB0aW9uKGNhbGwsIHJl
cG9ydCk6CisgICAgICAgIGhvb2sucHl0ZXN0X2V4Y2VwdGlvbl9pbnRlcmFjdChub2RlPWl0ZW0s
IGNhbGw9Y2FsbCwgcmVwb3J0PXJlcG9ydCkKKyAgICByZXR1cm4gcmVwb3J0CisKK2RlZiBjaGVj
a19pbnRlcmFjdGl2ZV9leGNlcHRpb24oY2FsbCwgcmVwb3J0KToKKyAgICByZXR1cm4gY2FsbC5l
eGNpbmZvIGFuZCBub3QgKAorICAgICAgICAgICAgICAgIGhhc2F0dHIocmVwb3J0LCAid2FzeGZh
aWwiKSBvcgorICAgICAgICAgICAgICAgIGNhbGwuZXhjaW5mby5lcnJpc2luc3RhbmNlKHNraXAu
RXhjZXB0aW9uKSBvcgorICAgICAgICAgICAgICAgIGNhbGwuZXhjaW5mby5lcnJpc2luc3RhbmNl
KGJkYi5CZGJRdWl0KSkKKworZGVmIGNhbGxfcnVudGVzdF9ob29rKGl0ZW0sIHdoZW4sICoqa3dk
cyk6CisgICAgaG9va25hbWUgPSAicHl0ZXN0X3J1bnRlc3RfIiArIHdoZW4KKyAgICBpaG9vayA9
IGdldGF0dHIoaXRlbS5paG9vaywgaG9va25hbWUpCisgICAgcmV0dXJuIENhbGxJbmZvKGxhbWJk
YTogaWhvb2soaXRlbT1pdGVtLCAqKmt3ZHMpLCB3aGVuPXdoZW4pCisKK2NsYXNzIENhbGxJbmZv
OgorICAgICIiIiBSZXN1bHQvRXhjZXB0aW9uIGluZm8gYSBmdW5jdGlvbiBpbnZvY2F0aW9uLiAi
IiIKKyAgICAjOiBOb25lIG9yIEV4Y2VwdGlvbkluZm8gb2JqZWN0LgorICAgIGV4Y2luZm8gPSBO
b25lCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZ1bmMsIHdoZW4pOgorICAgICAgICAjOiBjb250
ZXh0IG9mIGludm9jYXRpb246IG9uZSBvZiAic2V0dXAiLCAiY2FsbCIsCisgICAgICAgICM6ICJ0
ZWFyZG93biIsICJtZW1vY29sbGVjdCIKKyAgICAgICAgc2VsZi53aGVuID0gd2hlbgorICAgICAg
ICBzZWxmLnN0YXJ0ID0gdGltZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYucmVz
dWx0ID0gZnVuYygpCisgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAg
ICAgIHNlbGYuc3RvcCA9IHRpbWUoKQorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZXhjZXB0
OgorICAgICAgICAgICAgc2VsZi5leGNpbmZvID0gRXhjZXB0aW9uSW5mbygpCisgICAgICAgIHNl
bGYuc3RvcCA9IHRpbWUoKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICBpZiBz
ZWxmLmV4Y2luZm86CisgICAgICAgICAgICBzdGF0dXMgPSAiZXhjZXB0aW9uOiAlcyIgJSBzdHIo
c2VsZi5leGNpbmZvLnZhbHVlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3RhdHVzID0g
InJlc3VsdDogJXIiICUgKHNlbGYucmVzdWx0LCkKKyAgICAgICAgcmV0dXJuICI8Q2FsbEluZm8g
d2hlbj0lciAlcz4iICUgKHNlbGYud2hlbiwgc3RhdHVzKQorCitkZWYgZ2V0c2xhdmVpbmZvbGlu
ZShub2RlKToKKyAgICB0cnk6CisgICAgICAgIHJldHVybiBub2RlLl9zbGF2ZWluZm9jYWNoZQor
ICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgZCA9IG5vZGUuc2xhdmVpbmZvCisg
ICAgICAgIHZlciA9ICIlcy4lcy4lcyIgJSBkWyd2ZXJzaW9uX2luZm8nXVs6M10KKyAgICAgICAg
bm9kZS5fc2xhdmVpbmZvY2FjaGUgPSBzID0gIlslc10gJXMgLS0gUHl0aG9uICVzICVzIiAlICgK
KyAgICAgICAgICAgIGRbJ2lkJ10sIGRbJ3N5c3BsYXRmb3JtJ10sIHZlciwgZFsnZXhlY3V0YWJs
ZSddKQorICAgICAgICByZXR1cm4gcworCitjbGFzcyBCYXNlUmVwb3J0KG9iamVjdCk6CisKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgKiprdyk6CisgICAgICAgIHNlbGYuX19kaWN0X18udXBkYXRl
KGt3KQorCisgICAgZGVmIHRvdGVybWluYWwoc2VsZiwgb3V0KToKKyAgICAgICAgaWYgaGFzYXR0
cihzZWxmLCAnbm9kZScpOgorICAgICAgICAgICAgb3V0LmxpbmUoZ2V0c2xhdmVpbmZvbGluZShz
ZWxmLm5vZGUpKQorCisgICAgICAgIGxvbmdyZXByID0gc2VsZi5sb25ncmVwcgorICAgICAgICBp
ZiBsb25ncmVwciBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgaGFz
YXR0cihsb25ncmVwciwgJ3RvdGVybWluYWwnKToKKyAgICAgICAgICAgIGxvbmdyZXByLnRvdGVy
bWluYWwob3V0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAg
ICAgIG91dC5saW5lKGxvbmdyZXByKQorICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVFbmNvZGVF
cnJvcjoKKyAgICAgICAgICAgICAgICBvdXQubGluZSgiPHVucHJpbnRhYmxlIGxvbmdyZXByPiIp
CisKKyAgICBkZWYgZ2V0X3NlY3Rpb25zKHNlbGYsIHByZWZpeCk6CisgICAgICAgIGZvciBuYW1l
LCBjb250ZW50IGluIHNlbGYuc2VjdGlvbnM6CisgICAgICAgICAgICBpZiBuYW1lLnN0YXJ0c3dp
dGgocHJlZml4KToKKyAgICAgICAgICAgICAgICB5aWVsZCBwcmVmaXgsIGNvbnRlbnQKKworICAg
IHBhc3NlZCA9IHByb3BlcnR5KGxhbWJkYSB4OiB4Lm91dGNvbWUgPT0gInBhc3NlZCIpCisgICAg
ZmFpbGVkID0gcHJvcGVydHkobGFtYmRhIHg6IHgub3V0Y29tZSA9PSAiZmFpbGVkIikKKyAgICBz
a2lwcGVkID0gcHJvcGVydHkobGFtYmRhIHg6IHgub3V0Y29tZSA9PSAic2tpcHBlZCIpCisKKyAg
ICBAcHJvcGVydHkKKyAgICBkZWYgZnNwYXRoKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5u
b2RlaWQuc3BsaXQoIjo6IilbMF0KKworZGVmIHB5dGVzdF9ydW50ZXN0X21ha2VyZXBvcnQoaXRl
bSwgY2FsbCk6CisgICAgd2hlbiA9IGNhbGwud2hlbgorICAgIGR1cmF0aW9uID0gY2FsbC5zdG9w
LWNhbGwuc3RhcnQKKyAgICBrZXl3b3JkcyA9IGRpY3QoWyh4LDEpIGZvciB4IGluIGl0ZW0ua2V5
d29yZHNdKQorICAgIGV4Y2luZm8gPSBjYWxsLmV4Y2luZm8KKyAgICBzZWN0aW9ucyA9IFtdCisg
ICAgaWYgbm90IGNhbGwuZXhjaW5mbzoKKyAgICAgICAgb3V0Y29tZSA9ICJwYXNzZWQiCisgICAg
ICAgIGxvbmdyZXByID0gTm9uZQorICAgIGVsc2U6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNl
KGV4Y2luZm8sIEV4Y2VwdGlvbkluZm8pOgorICAgICAgICAgICAgb3V0Y29tZSA9ICJmYWlsZWQi
CisgICAgICAgICAgICBsb25ncmVwciA9IGV4Y2luZm8KKyAgICAgICAgZWxpZiBleGNpbmZvLmVy
cmlzaW5zdGFuY2UocHl0ZXN0LnNraXAuRXhjZXB0aW9uKToKKyAgICAgICAgICAgIG91dGNvbWUg
PSAic2tpcHBlZCIKKyAgICAgICAgICAgIHIgPSBleGNpbmZvLl9nZXRyZXByY3Jhc2goKQorICAg
ICAgICAgICAgbG9uZ3JlcHIgPSAoc3RyKHIucGF0aCksIHIubGluZW5vLCByLm1lc3NhZ2UpCisg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICBvdXRjb21lID0gImZhaWxlZCIKKyAgICAgICAgICAg
IGlmIGNhbGwud2hlbiA9PSAiY2FsbCI6CisgICAgICAgICAgICAgICAgbG9uZ3JlcHIgPSBpdGVt
LnJlcHJfZmFpbHVyZShleGNpbmZvKQorICAgICAgICAgICAgZWxzZTogIyBleGNlcHRpb24gaW4g
c2V0dXAgb3IgdGVhcmRvd24KKyAgICAgICAgICAgICAgICBsb25ncmVwciA9IGl0ZW0uX3JlcHJf
ZmFpbHVyZV9weShleGNpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHlsZT1pdGVtLmNvbmZpZy5vcHRpb24udGJzdHlsZSkKKyAgICBmb3IgcndoZW4s
IGtleSwgY29udGVudCBpbiBpdGVtLl9yZXBvcnRfc2VjdGlvbnM6CisgICAgICAgIHNlY3Rpb25z
LmFwcGVuZCgoIkNhcHR1cmVkICVzICVzIiAlKGtleSwgcndoZW4pLCBjb250ZW50KSkKKyAgICBy
ZXR1cm4gVGVzdFJlcG9ydChpdGVtLm5vZGVpZCwgaXRlbS5sb2NhdGlvbiwKKyAgICAgICAgICAg
ICAgICAgICAgICBrZXl3b3Jkcywgb3V0Y29tZSwgbG9uZ3JlcHIsIHdoZW4sCisgICAgICAgICAg
ICAgICAgICAgICAgc2VjdGlvbnMsIGR1cmF0aW9uKQorCitjbGFzcyBUZXN0UmVwb3J0KEJhc2VS
ZXBvcnQpOgorICAgICIiIiBCYXNpYyB0ZXN0IHJlcG9ydCBvYmplY3QgKGFsc28gdXNlZCBmb3Ig
c2V0dXAgYW5kIHRlYXJkb3duIGNhbGxzIGlmCisgICAgdGhleSBmYWlsKS4KKyAgICAiIiIKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgbm9kZWlkLCBsb2NhdGlvbiwga2V5d29yZHMsIG91dGNvbWUs
CisgICAgICAgICAgICAgICAgIGxvbmdyZXByLCB3aGVuLCBzZWN0aW9ucz0oKSwgZHVyYXRpb249
MCwgKipleHRyYSk6CisgICAgICAgICM6IG5vcm1hbGl6ZWQgY29sbGVjdGlvbiBub2RlIGlkCisg
ICAgICAgIHNlbGYubm9kZWlkID0gbm9kZWlkCisKKyAgICAgICAgIzogYSAoZmlsZXN5c3RlbXBh
dGgsIGxpbmVubywgZG9tYWluaW5mbykgdHVwbGUgaW5kaWNhdGluZyB0aGUKKyAgICAgICAgIzog
YWN0dWFsIGxvY2F0aW9uIG9mIGEgdGVzdCBpdGVtIC0gaXQgbWlnaHQgYmUgZGlmZmVyZW50IGZy
b20gdGhlCisgICAgICAgICM6IGNvbGxlY3RlZCBvbmUgZS5nLiBpZiBhIG1ldGhvZCBpcyBpbmhl
cml0ZWQgZnJvbSBhIGRpZmZlcmVudCBtb2R1bGUuCisgICAgICAgIHNlbGYubG9jYXRpb24gPSBs
b2NhdGlvbgorCisgICAgICAgICM6IGEgbmFtZSAtPiB2YWx1ZSBkaWN0aW9uYXJ5IGNvbnRhaW5p
bmcgYWxsIGtleXdvcmRzIGFuZAorICAgICAgICAjOiBtYXJrZXJzIGFzc29jaWF0ZWQgd2l0aCBh
IHRlc3QgaW52b2NhdGlvbi4KKyAgICAgICAgc2VsZi5rZXl3b3JkcyA9IGtleXdvcmRzCisKKyAg
ICAgICAgIzogdGVzdCBvdXRjb21lLCBhbHdheXMgb25lIG9mICJwYXNzZWQiLCAiZmFpbGVkIiwg
InNraXBwZWQiLgorICAgICAgICBzZWxmLm91dGNvbWUgPSBvdXRjb21lCisKKyAgICAgICAgIzog
Tm9uZSBvciBhIGZhaWx1cmUgcmVwcmVzZW50YXRpb24uCisgICAgICAgIHNlbGYubG9uZ3JlcHIg
PSBsb25ncmVwcgorCisgICAgICAgICM6IG9uZSBvZiAnc2V0dXAnLCAnY2FsbCcsICd0ZWFyZG93
bicgdG8gaW5kaWNhdGUgcnVudGVzdCBwaGFzZS4KKyAgICAgICAgc2VsZi53aGVuID0gd2hlbgor
CisgICAgICAgICM6IGxpc3Qgb2YgKHNlY25hbWUsIGRhdGEpIGV4dHJhIGluZm9ybWF0aW9uIHdo
aWNoIG5lZWRzIHRvCisgICAgICAgICM6IG1hcnNoYWxsYWJsZQorICAgICAgICBzZWxmLnNlY3Rp
b25zID0gbGlzdChzZWN0aW9ucykKKworICAgICAgICAjOiB0aW1lIGl0IHRvb2sgdG8gcnVuIGp1
c3QgdGhlIHRlc3QKKyAgICAgICAgc2VsZi5kdXJhdGlvbiA9IGR1cmF0aW9uCisKKyAgICAgICAg
c2VsZi5fX2RpY3RfXy51cGRhdGUoZXh0cmEpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6Cisg
ICAgICAgIHJldHVybiAiPFRlc3RSZXBvcnQgJXIgd2hlbj0lciBvdXRjb21lPSVyPiIgJSAoCisg
ICAgICAgICAgICBzZWxmLm5vZGVpZCwgc2VsZi53aGVuLCBzZWxmLm91dGNvbWUpCisKK2NsYXNz
IFRlYXJkb3duRXJyb3JSZXBvcnQoQmFzZVJlcG9ydCk6CisgICAgb3V0Y29tZSA9ICJmYWlsZWQi
CisgICAgd2hlbiA9ICJ0ZWFyZG93biIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9uZ3JlcHIs
ICoqZXh0cmEpOgorICAgICAgICBzZWxmLmxvbmdyZXByID0gbG9uZ3JlcHIKKyAgICAgICAgc2Vs
Zi5zZWN0aW9ucyA9IFtdCisgICAgICAgIHNlbGYuX19kaWN0X18udXBkYXRlKGV4dHJhKQorCitk
ZWYgcHl0ZXN0X21ha2VfY29sbGVjdF9yZXBvcnQoY29sbGVjdG9yKToKKyAgICBjYWxsID0gQ2Fs
bEluZm8oY29sbGVjdG9yLl9tZW1vY29sbGVjdCwgIm1lbW9jb2xsZWN0IikKKyAgICBsb25ncmVw
ciA9IE5vbmUKKyAgICBpZiBub3QgY2FsbC5leGNpbmZvOgorICAgICAgICBvdXRjb21lID0gInBh
c3NlZCIKKyAgICBlbHNlOgorICAgICAgICBmcm9tIF9weXRlc3QgaW1wb3J0IG5vc2UKKyAgICAg
ICAgc2tpcF9leGNlcHRpb25zID0gKFNraXBwZWQsKSArIG5vc2UuZ2V0X3NraXBfZXhjZXB0aW9u
cygpCisgICAgICAgIGlmIGNhbGwuZXhjaW5mby5lcnJpc2luc3RhbmNlKHNraXBfZXhjZXB0aW9u
cyk6CisgICAgICAgICAgICBvdXRjb21lID0gInNraXBwZWQiCisgICAgICAgICAgICByID0gY29s
bGVjdG9yLl9yZXByX2ZhaWx1cmVfcHkoY2FsbC5leGNpbmZvLCAibGluZSIpLnJlcHJjcmFzaAor
ICAgICAgICAgICAgbG9uZ3JlcHIgPSAoc3RyKHIucGF0aCksIHIubGluZW5vLCByLm1lc3NhZ2Up
CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvdXRjb21lID0gImZhaWxlZCIKKyAgICAgICAg
ICAgIGVycm9yaW5mbyA9IGNvbGxlY3Rvci5yZXByX2ZhaWx1cmUoY2FsbC5leGNpbmZvKQorICAg
ICAgICAgICAgaWYgbm90IGhhc2F0dHIoZXJyb3JpbmZvLCAidG90ZXJtaW5hbCIpOgorICAgICAg
ICAgICAgICAgIGVycm9yaW5mbyA9IENvbGxlY3RFcnJvclJlcHIoZXJyb3JpbmZvKQorICAgICAg
ICAgICAgbG9uZ3JlcHIgPSBlcnJvcmluZm8KKyAgICByZXAgPSBDb2xsZWN0UmVwb3J0KGNvbGxl
Y3Rvci5ub2RlaWQsIG91dGNvbWUsIGxvbmdyZXByLAorICAgICAgICBnZXRhdHRyKGNhbGwsICdy
ZXN1bHQnLCBOb25lKSkKKyAgICByZXAuY2FsbCA9IGNhbGwgICMgc2VlIGNvbGxlY3Rfb25lX25v
ZGUKKyAgICByZXR1cm4gcmVwCisKKworY2xhc3MgQ29sbGVjdFJlcG9ydChCYXNlUmVwb3J0KToK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgbm9kZWlkLCBvdXRjb21lLCBsb25ncmVwciwgcmVzdWx0
LAorICAgICAgICAgICAgICAgICBzZWN0aW9ucz0oKSwgKipleHRyYSk6CisgICAgICAgIHNlbGYu
bm9kZWlkID0gbm9kZWlkCisgICAgICAgIHNlbGYub3V0Y29tZSA9IG91dGNvbWUKKyAgICAgICAg
c2VsZi5sb25ncmVwciA9IGxvbmdyZXByCisgICAgICAgIHNlbGYucmVzdWx0ID0gcmVzdWx0IG9y
IFtdCisgICAgICAgIHNlbGYuc2VjdGlvbnMgPSBsaXN0KHNlY3Rpb25zKQorICAgICAgICBzZWxm
Ll9fZGljdF9fLnVwZGF0ZShleHRyYSkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBsb2NhdGlv
bihzZWxmKToKKyAgICAgICAgcmV0dXJuIChzZWxmLmZzcGF0aCwgTm9uZSwgc2VsZi5mc3BhdGgp
CisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiPENvbGxlY3RSZXBv
cnQgJXIgbGVucmVzdWx0PSVzIG91dGNvbWU9JXI+IiAlICgKKyAgICAgICAgICAgICAgICBzZWxm
Lm5vZGVpZCwgbGVuKHNlbGYucmVzdWx0KSwgc2VsZi5vdXRjb21lKQorCitjbGFzcyBDb2xsZWN0
RXJyb3JSZXByKFRlcm1pbmFsUmVwcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1zZyk6Cisg
ICAgICAgIHNlbGYubG9uZ3JlcHIgPSBtc2cKKyAgICBkZWYgdG90ZXJtaW5hbChzZWxmLCBvdXQp
OgorICAgICAgICBvdXQubGluZShzZWxmLmxvbmdyZXByLCByZWQ9VHJ1ZSkKKworY2xhc3MgU2V0
dXBTdGF0ZShvYmplY3QpOgorICAgICIiIiBzaGFyZWQgc3RhdGUgZm9yIHNldHRpbmcgdXAvdGVh
cmluZyBkb3duIHRlc3QgaXRlbXMgb3IgY29sbGVjdG9ycy4gIiIiCisgICAgZGVmIF9faW5pdF9f
KHNlbGYpOgorICAgICAgICBzZWxmLnN0YWNrID0gW10KKyAgICAgICAgc2VsZi5fZmluYWxpemVy
cyA9IHt9CisKKyAgICBkZWYgYWRkZmluYWxpemVyKHNlbGYsIGZpbmFsaXplciwgY29saXRlbSk6
CisgICAgICAgICIiIiBhdHRhY2ggYSBmaW5hbGl6ZXIgdG8gdGhlIGdpdmVuIGNvbGl0ZW0uCisg
ICAgICAgIGlmIGNvbGl0ZW0gaXMgTm9uZSwgdGhpcyB3aWxsIGFkZCBhIGZpbmFsaXplciB0aGF0
CisgICAgICAgIGlzIGNhbGxlZCBhdCB0aGUgZW5kIG9mIHRlYXJkb3duX2FsbCgpLgorICAgICAg
ICAiIiIKKyAgICAgICAgYXNzZXJ0IGNvbGl0ZW0gYW5kIG5vdCBpc2luc3RhbmNlKGNvbGl0ZW0s
IHR1cGxlKQorICAgICAgICBhc3NlcnQgcHkuYnVpbHRpbi5jYWxsYWJsZShmaW5hbGl6ZXIpCisg
ICAgICAgICNhc3NlcnQgY29saXRlbSBpbiBzZWxmLnN0YWNrICAjIHNvbWUgdW5pdCB0ZXN0cyBk
b24ndCBzZXR1cCBzdGFjayA6LworICAgICAgICBzZWxmLl9maW5hbGl6ZXJzLnNldGRlZmF1bHQo
Y29saXRlbSwgW10pLmFwcGVuZChmaW5hbGl6ZXIpCisKKyAgICBkZWYgX3BvcF9hbmRfdGVhcmRv
d24oc2VsZik6CisgICAgICAgIGNvbGl0ZW0gPSBzZWxmLnN0YWNrLnBvcCgpCisgICAgICAgIHNl
bGYuX3RlYXJkb3duX3dpdGhfZmluYWxpemF0aW9uKGNvbGl0ZW0pCisKKyAgICBkZWYgX2NhbGxm
aW5hbGl6ZXJzKHNlbGYsIGNvbGl0ZW0pOgorICAgICAgICBmaW5hbGl6ZXJzID0gc2VsZi5fZmlu
YWxpemVycy5wb3AoY29saXRlbSwgTm9uZSkKKyAgICAgICAgZXhjID0gTm9uZQorICAgICAgICB3
aGlsZSBmaW5hbGl6ZXJzOgorICAgICAgICAgICAgZmluID0gZmluYWxpemVycy5wb3AoKQorICAg
ICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZpbigpCisgICAgICAgICAgICBleGNlcHQg
RXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICMgWFhYIE9ubHkgZmlyc3QgZXhjZXB0aW9uIHdp
bGwgYmUgc2VlbiBieSB1c2VyLAorICAgICAgICAgICAgICAgICMgICAgIGlkZWFsbHkgYWxsIHNo
b3VsZCBiZSByZXBvcnRlZC4KKyAgICAgICAgICAgICAgICBpZiBleGMgaXMgTm9uZToKKyAgICAg
ICAgICAgICAgICAgICAgZXhjID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgaWYgZXhjOgorICAg
ICAgICAgICAgcHkuYnVpbHRpbi5fcmVyYWlzZSgqZXhjKQorCisgICAgZGVmIF90ZWFyZG93bl93
aXRoX2ZpbmFsaXphdGlvbihzZWxmLCBjb2xpdGVtKToKKyAgICAgICAgc2VsZi5fY2FsbGZpbmFs
aXplcnMoY29saXRlbSkKKyAgICAgICAgaWYgaGFzYXR0cihjb2xpdGVtLCAidGVhcmRvd24iKToK
KyAgICAgICAgICAgIGNvbGl0ZW0udGVhcmRvd24oKQorICAgICAgICBmb3IgY29saXRlbSBpbiBz
ZWxmLl9maW5hbGl6ZXJzOgorICAgICAgICAgICAgYXNzZXJ0IGNvbGl0ZW0gaXMgTm9uZSBvciBj
b2xpdGVtIGluIHNlbGYuc3RhY2sgXAorICAgICAgICAgICAgIG9yIGlzaW5zdGFuY2UoY29saXRl
bSwgdHVwbGUpCisKKyAgICBkZWYgdGVhcmRvd25fYWxsKHNlbGYpOgorICAgICAgICB3aGlsZSBz
ZWxmLnN0YWNrOgorICAgICAgICAgICAgc2VsZi5fcG9wX2FuZF90ZWFyZG93bigpCisgICAgICAg
IGZvciBrZXkgaW4gbGlzdChzZWxmLl9maW5hbGl6ZXJzKToKKyAgICAgICAgICAgIHNlbGYuX3Rl
YXJkb3duX3dpdGhfZmluYWxpemF0aW9uKGtleSkKKyAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLl9m
aW5hbGl6ZXJzCisKKyAgICBkZWYgdGVhcmRvd25fZXhhY3Qoc2VsZiwgaXRlbSwgbmV4dGl0ZW0p
OgorICAgICAgICBuZWVkZWRfY29sbGVjdG9ycyA9IG5leHRpdGVtIGFuZCBuZXh0aXRlbS5saXN0
Y2hhaW4oKSBvciBbXQorICAgICAgICBzZWxmLl90ZWFyZG93bl90b3dhcmRzKG5lZWRlZF9jb2xs
ZWN0b3JzKQorCisgICAgZGVmIF90ZWFyZG93bl90b3dhcmRzKHNlbGYsIG5lZWRlZF9jb2xsZWN0
b3JzKToKKyAgICAgICAgd2hpbGUgc2VsZi5zdGFjazoKKyAgICAgICAgICAgIGlmIHNlbGYuc3Rh
Y2sgPT0gbmVlZGVkX2NvbGxlY3RvcnNbOmxlbihzZWxmLnN0YWNrKV06CisgICAgICAgICAgICAg
ICAgYnJlYWsKKyAgICAgICAgICAgIHNlbGYuX3BvcF9hbmRfdGVhcmRvd24oKQorCisgICAgZGVm
IHByZXBhcmUoc2VsZiwgY29saXRlbSk6CisgICAgICAgICIiIiBzZXR1cCBvYmplY3RzIGFsb25n
IHRoZSBjb2xsZWN0b3IgY2hhaW4gdG8gdGhlIHRlc3QtbWV0aG9kCisgICAgICAgICAgICBhbmQg
dGVhcmRvd24gcHJldmlvdXNseSBzZXR1cCBvYmplY3RzLiIiIgorICAgICAgICBuZWVkZWRfY29s
bGVjdG9ycyA9IGNvbGl0ZW0ubGlzdGNoYWluKCkKKyAgICAgICAgc2VsZi5fdGVhcmRvd25fdG93
YXJkcyhuZWVkZWRfY29sbGVjdG9ycykKKworICAgICAgICAjIGNoZWNrIGlmIHRoZSBsYXN0IGNv
bGxlY3Rpb24gbm9kZSBoYXMgcmFpc2VkIGFuIGVycm9yCisgICAgICAgIGZvciBjb2wgaW4gc2Vs
Zi5zdGFjazoKKyAgICAgICAgICAgIGlmIGhhc2F0dHIoY29sLCAnX3ByZXBhcmVfZXhjJyk6Cisg
ICAgICAgICAgICAgICAgcHkuYnVpbHRpbi5fcmVyYWlzZSgqY29sLl9wcmVwYXJlX2V4YykKKyAg
ICAgICAgZm9yIGNvbCBpbiBuZWVkZWRfY29sbGVjdG9yc1tsZW4oc2VsZi5zdGFjayk6XToKKyAg
ICAgICAgICAgIHNlbGYuc3RhY2suYXBwZW5kKGNvbCkKKyAgICAgICAgICAgIHRyeToKKyAgICAg
ICAgICAgICAgICBjb2wuc2V0dXAoKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAg
ICAgICAgICAgICAgICBjb2wuX3ByZXBhcmVfZXhjID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAg
ICAgICAgICByYWlzZQorCitkZWYgY29sbGVjdF9vbmVfbm9kZShjb2xsZWN0b3IpOgorICAgIGlo
b29rID0gY29sbGVjdG9yLmlob29rCisgICAgaWhvb2sucHl0ZXN0X2NvbGxlY3RzdGFydChjb2xs
ZWN0b3I9Y29sbGVjdG9yKQorICAgIHJlcCA9IGlob29rLnB5dGVzdF9tYWtlX2NvbGxlY3RfcmVw
b3J0KGNvbGxlY3Rvcj1jb2xsZWN0b3IpCisgICAgY2FsbCA9IHJlcC5fX2RpY3RfXy5wb3AoImNh
bGwiLCBOb25lKQorICAgIGlmIGNhbGwgYW5kIGNoZWNrX2ludGVyYWN0aXZlX2V4Y2VwdGlvbihj
YWxsLCByZXApOgorICAgICAgICBpaG9vay5weXRlc3RfZXhjZXB0aW9uX2ludGVyYWN0KG5vZGU9
Y29sbGVjdG9yLCBjYWxsPWNhbGwsIHJlcG9ydD1yZXApCisgICAgcmV0dXJuIHJlcAorCisKKyMg
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQorIyBUZXN0IE91dGNvbWVFeGNlcHRpb25zIGFuZCBoZWxwZXJzIGZvciBjcmVhdGluZyB0
aGVtLgorCisKK2NsYXNzIE91dGNvbWVFeGNlcHRpb24oRXhjZXB0aW9uKToKKyAgICAiIiIgT3V0
Y29tZUV4Y2VwdGlvbiBhbmQgaXRzIHN1YmNsYXNzIGluc3RhbmNlcyBpbmRpY2F0ZSBhbmQKKyAg
ICAgICAgY29udGFpbiBpbmZvIGFib3V0IHRlc3QgYW5kIGNvbGxlY3Rpb24gb3V0Y29tZXMuCisg
ICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1zZz1Ob25lLCBweXRyYWNlPVRydWUpOgor
ICAgICAgICBFeGNlcHRpb24uX19pbml0X18oc2VsZiwgbXNnKQorICAgICAgICBzZWxmLm1zZyA9
IG1zZworICAgICAgICBzZWxmLnB5dHJhY2UgPSBweXRyYWNlCisKKyAgICBkZWYgX19yZXByX18o
c2VsZik6CisgICAgICAgIGlmIHNlbGYubXNnOgorICAgICAgICAgICAgdmFsID0gc2VsZi5tc2cK
KyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsLCBieXRlcyk6CisgICAgICAgICAgICAgICAg
dmFsID0gcHkuX2J1aWx0aW4uX3RvdGV4dCh2YWwsIGVycm9ycz0ncmVwbGFjZScpCisgICAgICAg
ICAgICByZXR1cm4gdmFsCisgICAgICAgIHJldHVybiAiPCVzIGluc3RhbmNlPiIgJShzZWxmLl9f
Y2xhc3NfXy5fX25hbWVfXywpCisgICAgX19zdHJfXyA9IF9fcmVwcl9fCisKK2NsYXNzIFNraXBw
ZWQoT3V0Y29tZUV4Y2VwdGlvbik6CisgICAgIyBYWFggaGFja2lzaDogb24gM2sgd2UgZmFrZSB0
byBsaXZlIGluIHRoZSBidWlsdGlucworICAgICMgaW4gb3JkZXIgdG8gaGF2ZSBTa2lwcGVkIGV4
Y2VwdGlvbiBwcmludGluZyBzaG9ydGVyL25pY2VyCisgICAgX19tb2R1bGVfXyA9ICdidWlsdGlu
cycKKworY2xhc3MgRmFpbGVkKE91dGNvbWVFeGNlcHRpb24pOgorICAgICIiIiByYWlzZWQgZnJv
bSBhbiBleHBsaWNpdCBjYWxsIHRvIHB5dGVzdC5mYWlsKCkgIiIiCisgICAgX19tb2R1bGVfXyA9
ICdidWlsdGlucycKKworY2xhc3MgRXhpdChLZXlib2FyZEludGVycnVwdCk6CisgICAgIiIiIHJh
aXNlZCBmb3IgaW1tZWRpYXRlIHByb2dyYW0gZXhpdHMgKG5vIHRyYWNlYmFja3Mvc3VtbWFyaWVz
KSIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtc2c9InVua25vd24gcmVhc29uIik6CisgICAg
ICAgIHNlbGYubXNnID0gbXNnCisgICAgICAgIEtleWJvYXJkSW50ZXJydXB0Ll9faW5pdF9fKHNl
bGYsIG1zZykKKworIyBleHBvc2VkIGhlbHBlciBtZXRob2RzCisKK2RlZiBleGl0KG1zZyk6Cisg
ICAgIiIiIGV4aXQgdGVzdGluZyBwcm9jZXNzIGFzIGlmIEtleWJvYXJkSW50ZXJydXB0IHdhcyB0
cmlnZ2VyZWQuICIiIgorICAgIF9fdHJhY2ViYWNraGlkZV9fID0gVHJ1ZQorICAgIHJhaXNlIEV4
aXQobXNnKQorCitleGl0LkV4Y2VwdGlvbiA9IEV4aXQKKworZGVmIHNraXAobXNnPSIiKToKKyAg
ICAiIiIgc2tpcCBhbiBleGVjdXRpbmcgdGVzdCB3aXRoIHRoZSBnaXZlbiBtZXNzYWdlLiAgTm90
ZTogaXQncyB1c3VhbGx5CisgICAgYmV0dGVyIHRvIHVzZSB0aGUgcHl0ZXN0Lm1hcmsuc2tpcGlm
IG1hcmtlciB0byBkZWNsYXJlIGEgdGVzdCB0byBiZQorICAgIHNraXBwZWQgdW5kZXIgY2VydGFp
biBjb25kaXRpb25zIGxpa2UgbWlzbWF0Y2hpbmcgcGxhdGZvcm1zIG9yCisgICAgZGVwZW5kZW5j
aWVzLiAgU2VlIHRoZSBweXRlc3Rfc2tpcHBpbmcgcGx1Z2luIGZvciBkZXRhaWxzLgorICAgICIi
IgorICAgIF9fdHJhY2ViYWNraGlkZV9fID0gVHJ1ZQorICAgIHJhaXNlIFNraXBwZWQobXNnPW1z
ZykKK3NraXAuRXhjZXB0aW9uID0gU2tpcHBlZAorCitkZWYgZmFpbChtc2c9IiIsIHB5dHJhY2U9
VHJ1ZSk6CisgICAgIiIiIGV4cGxpY2l0bHkgZmFpbCBhbiBjdXJyZW50bHktZXhlY3V0aW5nIHRl
c3Qgd2l0aCB0aGUgZ2l2ZW4gTWVzc2FnZS4KKworICAgIDphcmcgcHl0cmFjZTogaWYgZmFsc2Ug
dGhlIG1zZyByZXByZXNlbnRzIHRoZSBmdWxsIGZhaWx1cmUgaW5mb3JtYXRpb24KKyAgICAgICAg
ICAgICAgICAgIGFuZCBubyBweXRob24gdHJhY2ViYWNrIHdpbGwgYmUgcmVwb3J0ZWQuCisgICAg
IiIiCisgICAgX190cmFjZWJhY2toaWRlX18gPSBUcnVlCisgICAgcmFpc2UgRmFpbGVkKG1zZz1t
c2csIHB5dHJhY2U9cHl0cmFjZSkKK2ZhaWwuRXhjZXB0aW9uID0gRmFpbGVkCisKKworZGVmIGlt
cG9ydG9yc2tpcChtb2RuYW1lLCBtaW52ZXJzaW9uPU5vbmUpOgorICAgICIiIiByZXR1cm4gaW1w
b3J0ZWQgbW9kdWxlIGlmIGl0IGhhcyBhdCBsZWFzdCAibWludmVyc2lvbiIgYXMgaXRzCisgICAg
X192ZXJzaW9uX18gYXR0cmlidXRlLiAgSWYgbm8gbWludmVyc2lvbiBpcyBzcGVjaWZpZWQgdGhl
IGEgc2tpcAorICAgIGlzIG9ubHkgdHJpZ2dlcmVkIGlmIHRoZSBtb2R1bGUgY2FuIG5vdCBiZSBp
bXBvcnRlZC4KKyAgICAiIiIKKyAgICBfX3RyYWNlYmFja2hpZGVfXyA9IFRydWUKKyAgICBjb21w
aWxlKG1vZG5hbWUsICcnLCAnZXZhbCcpICMgdG8gY2F0Y2ggc3ludGF4ZXJyb3JzCisgICAgdHJ5
OgorICAgICAgICBfX2ltcG9ydF9fKG1vZG5hbWUpCisgICAgZXhjZXB0IEltcG9ydEVycm9yOgor
ICAgICAgICBza2lwKCJjb3VsZCBub3QgaW1wb3J0ICVyIiAlKG1vZG5hbWUsKSkKKyAgICBtb2Qg
PSBzeXMubW9kdWxlc1ttb2RuYW1lXQorICAgIGlmIG1pbnZlcnNpb24gaXMgTm9uZToKKyAgICAg
ICAgcmV0dXJuIG1vZAorICAgIHZlcmF0dHIgPSBnZXRhdHRyKG1vZCwgJ19fdmVyc2lvbl9fJywg
Tm9uZSkKKyAgICBpZiBtaW52ZXJzaW9uIGlzIG5vdCBOb25lOgorICAgICAgICB0cnk6CisgICAg
ICAgICAgICBmcm9tIHBrZ19yZXNvdXJjZXMgaW1wb3J0IHBhcnNlX3ZlcnNpb24gYXMgcHYKKyAg
ICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgc2tpcCgid2UgaGF2ZSBhIHJl
cXVpcmVkIHZlcnNpb24gZm9yICVyIGJ1dCBjYW4gbm90IGltcG9ydCAiCisgICAgICAgICAgICAg
ICAgICJubyBwa2dfcmVzb3VyY2VzIHRvIHBhcnNlIHZlcnNpb24gc3RyaW5ncy4iICUobW9kbmFt
ZSwpKQorICAgICAgICBpZiB2ZXJhdHRyIGlzIE5vbmUgb3IgcHYodmVyYXR0cikgPCBwdihtaW52
ZXJzaW9uKToKKyAgICAgICAgICAgIHNraXAoIm1vZHVsZSAlciBoYXMgX192ZXJzaW9uX18gJXIs
IHJlcXVpcmVkIGlzOiAlciIgJSgKKyAgICAgICAgICAgICAgICAgbW9kbmFtZSwgdmVyYXR0ciwg
bWludmVyc2lvbikpCisgICAgcmV0dXJuIG1vZAorCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0
cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3Qvc2tpcHBpbmcucHkgYi9XZWJEcml2
ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3Qvc2tpcHBpbmcucHkKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjY5MTU3ZjQ4NWEwCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0
ZXN0L3NraXBwaW5nLnB5CkBAIC0wLDAgKzEsMzU0IEBACisiIiIgc3VwcG9ydCBmb3Igc2tpcC94
ZmFpbCBmdW5jdGlvbnMgYW5kIG1hcmtlcnMuICIiIgoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitp
bXBvcnQgdHJhY2ViYWNrCisKK2ltcG9ydCBweQoraW1wb3J0IHB5dGVzdAorZnJvbSBfcHl0ZXN0
Lm1hcmsgaW1wb3J0IE1hcmtJbmZvLCBNYXJrRGVjb3JhdG9yCisKKworZGVmIHB5dGVzdF9hZGRv
cHRpb24ocGFyc2VyKToKKyAgICBncm91cCA9IHBhcnNlci5nZXRncm91cCgiZ2VuZXJhbCIpCisg
ICAgZ3JvdXAuYWRkb3B0aW9uKCctLXJ1bnhmYWlsJywKKyAgICAgICAgICAgYWN0aW9uPSJzdG9y
ZV90cnVlIiwgZGVzdD0icnVueGZhaWwiLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICBoZWxw
PSJydW4gdGVzdHMgZXZlbiBpZiB0aGV5IGFyZSBtYXJrZWQgeGZhaWwiKQorCisgICAgcGFyc2Vy
LmFkZGluaSgieGZhaWxfc3RyaWN0IiwgImRlZmF1bHQgZm9yIHRoZSBzdHJpY3QgcGFyYW1ldGVy
IG9mIHhmYWlsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWFya2VycyB3
aGVuIG5vdCBnaXZlbiBleHBsaWNpdGx5IChkZWZhdWx0OiAiCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIkZhbHNlKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBl
PSJib29sIikKKworCitkZWYgcHl0ZXN0X2NvbmZpZ3VyZShjb25maWcpOgorICAgIGlmIGNvbmZp
Zy5vcHRpb24ucnVueGZhaWw6CisgICAgICAgIG9sZCA9IHB5dGVzdC54ZmFpbAorICAgICAgICBj
b25maWcuX2NsZWFudXAuYXBwZW5kKGxhbWJkYTogc2V0YXR0cihweXRlc3QsICJ4ZmFpbCIsIG9s
ZCkpCisgICAgICAgIGRlZiBub3AoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgIHBhc3MK
KyAgICAgICAgbm9wLkV4Y2VwdGlvbiA9IFhGYWlsZWQKKyAgICAgICAgc2V0YXR0cihweXRlc3Qs
ICJ4ZmFpbCIsIG5vcCkKKworICAgIGNvbmZpZy5hZGRpbml2YWx1ZV9saW5lKCJtYXJrZXJzIiwK
KyAgICAgICAgInNraXBpZihjb25kaXRpb24pOiBza2lwIHRoZSBnaXZlbiB0ZXN0IGZ1bmN0aW9u
IGlmIGV2YWwoY29uZGl0aW9uKSAiCisgICAgICAgICJyZXN1bHRzIGluIGEgVHJ1ZSB2YWx1ZS4g
IEV2YWx1YXRpb24gaGFwcGVucyB3aXRoaW4gdGhlICIKKyAgICAgICAgIm1vZHVsZSBnbG9iYWwg
Y29udGV4dC4gRXhhbXBsZTogc2tpcGlmKCdzeXMucGxhdGZvcm0gPT0gXCJ3aW4zMlwiJykgIgor
ICAgICAgICAic2tpcHMgdGhlIHRlc3QgaWYgd2UgYXJlIG9uIHRoZSB3aW4zMiBwbGF0Zm9ybS4g
c2VlICIKKyAgICAgICAgImh0dHA6Ly9weXRlc3Qub3JnL2xhdGVzdC9za2lwcGluZy5odG1sIgor
ICAgICkKKyAgICBjb25maWcuYWRkaW5pdmFsdWVfbGluZSgibWFya2VycyIsCisgICAgICAgICJ4
ZmFpbChjb25kaXRpb24sIHJlYXNvbj1Ob25lLCBydW49VHJ1ZSwgcmFpc2VzPU5vbmUpOiBtYXJr
IHRoZSB0aGUgdGVzdCBmdW5jdGlvbiAiCisgICAgICAgICJhcyBhbiBleHBlY3RlZCBmYWlsdXJl
IGlmIGV2YWwoY29uZGl0aW9uKSBoYXMgYSBUcnVlIHZhbHVlLiAiCisgICAgICAgICJPcHRpb25h
bGx5IHNwZWNpZnkgYSByZWFzb24gZm9yIGJldHRlciByZXBvcnRpbmcgYW5kIHJ1bj1GYWxzZSBp
ZiAiCisgICAgICAgICJ5b3UgZG9uJ3QgZXZlbiB3YW50IHRvIGV4ZWN1dGUgdGhlIHRlc3QgZnVu
Y3Rpb24uIElmIG9ubHkgc3BlY2lmaWMgIgorICAgICAgICAiZXhjZXB0aW9uKHMpIGFyZSBleHBl
Y3RlZCwgeW91IGNhbiBsaXN0IHRoZW0gaW4gcmFpc2VzLCBhbmQgaWYgdGhlIHRlc3QgZmFpbHMg
IgorICAgICAgICAiaW4gb3RoZXIgd2F5cywgaXQgd2lsbCBiZSByZXBvcnRlZCBhcyBhIHRydWUg
ZmFpbHVyZS4gIgorICAgICAgICAiU2VlIGh0dHA6Ly9weXRlc3Qub3JnL2xhdGVzdC9za2lwcGlu
Zy5odG1sIgorICAgICkKKworCitkZWYgcHl0ZXN0X25hbWVzcGFjZSgpOgorICAgIHJldHVybiBk
aWN0KHhmYWlsPXhmYWlsKQorCisKK2NsYXNzIFhGYWlsZWQocHl0ZXN0LmZhaWwuRXhjZXB0aW9u
KToKKyAgICAiIiIgcmFpc2VkIGZyb20gYW4gZXhwbGljaXQgY2FsbCB0byBweXRlc3QueGZhaWwo
KSAiIiIKKworCitkZWYgeGZhaWwocmVhc29uPSIiKToKKyAgICAiIiIgeGZhaWwgYW4gZXhlY3V0
aW5nIHRlc3Qgb3Igc2V0dXAgZnVuY3Rpb25zIHdpdGggdGhlIGdpdmVuIHJlYXNvbi4iIiIKKyAg
ICBfX3RyYWNlYmFja2hpZGVfXyA9IFRydWUKKyAgICByYWlzZSBYRmFpbGVkKHJlYXNvbikKK3hm
YWlsLkV4Y2VwdGlvbiA9IFhGYWlsZWQKKworCitjbGFzcyBNYXJrRXZhbHVhdG9yOgorICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBpdGVtLCBuYW1lKToKKyAgICAgICAgc2VsZi5pdGVtID0gaXRlbQor
ICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaG9sZGVy
KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5pdGVtLmtleXdvcmRzLmdldChzZWxmLm5hbWUp
CisKKyAgICBkZWYgX19ib29sX18oc2VsZik6CisgICAgICAgIHJldHVybiBib29sKHNlbGYuaG9s
ZGVyKQorICAgIF9fbm9uemVyb19fID0gX19ib29sX18KKworICAgIGRlZiB3YXN2YWxpZChzZWxm
KToKKyAgICAgICAgcmV0dXJuIG5vdCBoYXNhdHRyKHNlbGYsICdleGMnKQorCisgICAgZGVmIGlu
dmFsaWRyYWlzZShzZWxmLCBleGMpOgorICAgICAgICByYWlzZXMgPSBzZWxmLmdldCgncmFpc2Vz
JykKKyAgICAgICAgaWYgbm90IHJhaXNlczoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBy
ZXR1cm4gbm90IGlzaW5zdGFuY2UoZXhjLCByYWlzZXMpCisKKyAgICBkZWYgaXN0cnVlKHNlbGYp
OgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5faXN0cnVlKCkKKyAgICAg
ICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHNlbGYuZXhjID0gc3lzLmV4Y19pbmZv
KCkKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi5leGNbMV0sIFN5bnRheEVycm9yKToK
KyAgICAgICAgICAgICAgICBtc2cgPSBbIiAiICogKHNlbGYuZXhjWzFdLm9mZnNldCArIDQpICsg
Il4iLF0KKyAgICAgICAgICAgICAgICBtc2cuYXBwZW5kKCJTeW50YXhFcnJvcjogaW52YWxpZCBz
eW50YXgiKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtc2cgPSB0cmFjZWJh
Y2suZm9ybWF0X2V4Y2VwdGlvbl9vbmx5KCpzZWxmLmV4Y1s6Ml0pCisgICAgICAgICAgICBweXRl
c3QuZmFpbCgiRXJyb3IgZXZhbHVhdGluZyAlciBleHByZXNzaW9uXG4iCisgICAgICAgICAgICAg
ICAgICAgICAgICAiICAgICVzXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAiJXMiCisgICAg
ICAgICAgICAgICAgICAgICAgICAlKHNlbGYubmFtZSwgc2VsZi5leHByLCAiXG4iLmpvaW4obXNn
KSksCisgICAgICAgICAgICAgICAgICAgICAgICBweXRyYWNlPUZhbHNlKQorCisgICAgZGVmIF9n
ZXRnbG9iYWxzKHNlbGYpOgorICAgICAgICBkID0geydvcyc6IG9zLCAnc3lzJzogc3lzLCAnY29u
ZmlnJzogc2VsZi5pdGVtLmNvbmZpZ30KKyAgICAgICAgZnVuYyA9IHNlbGYuaXRlbS5vYmoKKyAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgZC51cGRhdGUoZnVuYy5fX2dsb2JhbHNfXykKKyAgICAg
ICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgZC51cGRhdGUoZnVuYy5mdW5j
X2dsb2JhbHMpCisgICAgICAgIHJldHVybiBkCisKKyAgICBkZWYgX2lzdHJ1ZShzZWxmKToKKyAg
ICAgICAgaWYgaGFzYXR0cihzZWxmLCAncmVzdWx0Jyk6CisgICAgICAgICAgICByZXR1cm4gc2Vs
Zi5yZXN1bHQKKyAgICAgICAgaWYgc2VsZi5ob2xkZXI6CisgICAgICAgICAgICBkID0gc2VsZi5f
Z2V0Z2xvYmFscygpCisgICAgICAgICAgICBpZiBzZWxmLmhvbGRlci5hcmdzOgorICAgICAgICAg
ICAgICAgIHNlbGYucmVzdWx0ID0gRmFsc2UKKyAgICAgICAgICAgICAgICAjICJob2xkZXIiIG1p
Z2h0IGJlIGEgTWFya0luZm8gb3IgYSBNYXJrRGVjb3JhdG9yOyBvbmx5CisgICAgICAgICAgICAg
ICAgIyBNYXJrSW5mbyBrZWVwcyB0cmFjayBvZiBhbGwgcGFyYW1ldGVycyBpdCByZWNlaXZlZCBp
biBhbgorICAgICAgICAgICAgICAgICMgX2FyZ2xpc3QgYXR0cmlidXRlCisgICAgICAgICAgICAg
ICAgaWYgaGFzYXR0cihzZWxmLmhvbGRlciwgJ19hcmdsaXN0Jyk6CisgICAgICAgICAgICAgICAg
ICAgIGFyZ2xpc3QgPSBzZWxmLmhvbGRlci5fYXJnbGlzdAorICAgICAgICAgICAgICAgIGVsc2U6
CisgICAgICAgICAgICAgICAgICAgIGFyZ2xpc3QgPSBbKHNlbGYuaG9sZGVyLmFyZ3MsIHNlbGYu
aG9sZGVyLmt3YXJncyldCisgICAgICAgICAgICAgICAgZm9yIGFyZ3MsIGt3YXJncyBpbiBhcmds
aXN0OgorICAgICAgICAgICAgICAgICAgICBmb3IgZXhwciBpbiBhcmdzOgorICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZi5leHByID0gZXhwcgorICAgICAgICAgICAgICAgICAgICAgICAgaWYg
aXNpbnN0YW5jZShleHByLCBweS5idWlsdGluLl9iYXNlc3RyaW5nKToKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHQgPSBjYWNoZWRfZXZhbChzZWxmLml0ZW0uY29uZmlnLCBleHBy
LCBkKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAicmVhc29uIiBub3QgaW4ga3dhcmdzOgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAjIFhYWCBiZXR0ZXIgYmUgY2hlY2tlZCBhdCBjb2xsZWN0aW9uIHRpbWUKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gInlvdSBuZWVkIHRvIHNwZWNpZnkg
cmVhc29uPVNUUklORyAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IndoZW4gdXNpbmcgYm9vbGVhbnMgYXMgY29uZGl0aW9ucy4iCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHB5dGVzdC5mYWlsKG1zZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXN1bHQgPSBib29sKGV4cHIpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiByZXN1bHQ6
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSBUcnVlCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZWFzb24gPSBrd2FyZ3MuZ2V0KCdyZWFzb24nLCBO
b25lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXhwciA9IGV4cHIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5yZXN1bHQKKyAgICAgICAgICAgIGVs
c2U6CisgICAgICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSBUcnVlCisgICAgICAgIHJldHVybiBn
ZXRhdHRyKHNlbGYsICdyZXN1bHQnLCBGYWxzZSkKKworICAgIGRlZiBnZXQoc2VsZiwgYXR0ciwg
ZGVmYXVsdD1Ob25lKToKKyAgICAgICAgcmV0dXJuIHNlbGYuaG9sZGVyLmt3YXJncy5nZXQoYXR0
ciwgZGVmYXVsdCkKKworICAgIGRlZiBnZXRleHBsYW5hdGlvbihzZWxmKToKKyAgICAgICAgZXhw
bCA9IGdldGF0dHIoc2VsZiwgJ3JlYXNvbicsIE5vbmUpIG9yIHNlbGYuZ2V0KCdyZWFzb24nLCBO
b25lKQorICAgICAgICBpZiBub3QgZXhwbDoKKyAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNl
bGYsICdleHByJyk6CisgICAgICAgICAgICAgICAgcmV0dXJuICIiCisgICAgICAgICAgICBlbHNl
OgorICAgICAgICAgICAgICAgIHJldHVybiAiY29uZGl0aW9uOiAiICsgc3RyKHNlbGYuZXhwcikK
KyAgICAgICAgcmV0dXJuIGV4cGwKKworCitAcHl0ZXN0Lmhvb2tpbXBsKHRyeWZpcnN0PVRydWUp
CitkZWYgcHl0ZXN0X3J1bnRlc3Rfc2V0dXAoaXRlbSk6CisgICAgIyBDaGVjayBpZiBza2lwIG9y
IHNraXBpZiBhcmUgc3BlY2lmaWVkIGFzIHB5dGVzdCBtYXJrcworCisgICAgc2tpcGlmX2luZm8g
PSBpdGVtLmtleXdvcmRzLmdldCgnc2tpcGlmJykKKyAgICBpZiBpc2luc3RhbmNlKHNraXBpZl9p
bmZvLCAoTWFya0luZm8sIE1hcmtEZWNvcmF0b3IpKToKKyAgICAgICAgZXZhbF9za2lwaWYgPSBN
YXJrRXZhbHVhdG9yKGl0ZW0sICdza2lwaWYnKQorICAgICAgICBpZiBldmFsX3NraXBpZi5pc3Ry
dWUoKToKKyAgICAgICAgICAgIGl0ZW0uX2V2YWxza2lwID0gZXZhbF9za2lwaWYKKyAgICAgICAg
ICAgIHB5dGVzdC5za2lwKGV2YWxfc2tpcGlmLmdldGV4cGxhbmF0aW9uKCkpCisKKyAgICBza2lw
X2luZm8gPSBpdGVtLmtleXdvcmRzLmdldCgnc2tpcCcpCisgICAgaWYgaXNpbnN0YW5jZShza2lw
X2luZm8sIChNYXJrSW5mbywgTWFya0RlY29yYXRvcikpOgorICAgICAgICBpdGVtLl9ldmFsc2tp
cCA9IFRydWUKKyAgICAgICAgaWYgJ3JlYXNvbicgaW4gc2tpcF9pbmZvLmt3YXJnczoKKyAgICAg
ICAgICAgIHB5dGVzdC5za2lwKHNraXBfaW5mby5rd2FyZ3NbJ3JlYXNvbiddKQorICAgICAgICBl
bGlmIHNraXBfaW5mby5hcmdzOgorICAgICAgICAgICAgcHl0ZXN0LnNraXAoc2tpcF9pbmZvLmFy
Z3NbMF0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBweXRlc3Quc2tpcCgidW5jb25kaXRp
b25hbCBza2lwIikKKworICAgIGl0ZW0uX2V2YWx4ZmFpbCA9IE1hcmtFdmFsdWF0b3IoaXRlbSwg
J3hmYWlsJykKKyAgICBjaGVja194ZmFpbF9ub19ydW4oaXRlbSkKKworCitAcHl0ZXN0Lm1hcmsu
aG9va3dyYXBwZXIKK2RlZiBweXRlc3RfcHlmdW5jX2NhbGwocHlmdW5jaXRlbSk6CisgICAgY2hl
Y2tfeGZhaWxfbm9fcnVuKHB5ZnVuY2l0ZW0pCisgICAgb3V0Y29tZSA9IHlpZWxkCisgICAgcGFz
c2VkID0gb3V0Y29tZS5leGNpbmZvIGlzIE5vbmUKKyAgICBpZiBwYXNzZWQ6CisgICAgICAgIGNo
ZWNrX3N0cmljdF94ZmFpbChweWZ1bmNpdGVtKQorCisKK2RlZiBjaGVja194ZmFpbF9ub19ydW4o
aXRlbSk6CisgICAgIiIiY2hlY2sgeGZhaWwocnVuPUZhbHNlKSIiIgorICAgIGlmIG5vdCBpdGVt
LmNvbmZpZy5vcHRpb24ucnVueGZhaWw6CisgICAgICAgIGV2YWx4ZmFpbCA9IGl0ZW0uX2V2YWx4
ZmFpbAorICAgICAgICBpZiBldmFseGZhaWwuaXN0cnVlKCk6CisgICAgICAgICAgICBpZiBub3Qg
ZXZhbHhmYWlsLmdldCgncnVuJywgVHJ1ZSk6CisgICAgICAgICAgICAgICAgcHl0ZXN0LnhmYWls
KCJbTk9UUlVOXSAiICsgZXZhbHhmYWlsLmdldGV4cGxhbmF0aW9uKCkpCisKKworZGVmIGNoZWNr
X3N0cmljdF94ZmFpbChweWZ1bmNpdGVtKToKKyAgICAiIiJjaGVjayB4ZmFpbChzdHJpY3Q9VHJ1
ZSkgZm9yIHRoZSBnaXZlbiBQQVNTSU5HIHRlc3QiIiIKKyAgICBldmFseGZhaWwgPSBweWZ1bmNp
dGVtLl9ldmFseGZhaWwKKyAgICBpZiBldmFseGZhaWwuaXN0cnVlKCk6CisgICAgICAgIHN0cmlj
dF9kZWZhdWx0ID0gcHlmdW5jaXRlbS5jb25maWcuZ2V0aW5pKCd4ZmFpbF9zdHJpY3QnKQorICAg
ICAgICBpc19zdHJpY3RfeGZhaWwgPSBldmFseGZhaWwuZ2V0KCdzdHJpY3QnLCBzdHJpY3RfZGVm
YXVsdCkKKyAgICAgICAgaWYgaXNfc3RyaWN0X3hmYWlsOgorICAgICAgICAgICAgZGVsIHB5ZnVu
Y2l0ZW0uX2V2YWx4ZmFpbAorICAgICAgICAgICAgZXhwbGFuYXRpb24gPSBldmFseGZhaWwuZ2V0
ZXhwbGFuYXRpb24oKQorICAgICAgICAgICAgcHl0ZXN0LmZhaWwoJ1tYUEFTUyhzdHJpY3QpXSAn
ICsgZXhwbGFuYXRpb24sIHB5dHJhY2U9RmFsc2UpCisKKworQHB5dGVzdC5ob29raW1wbChob29r
d3JhcHBlcj1UcnVlKQorZGVmIHB5dGVzdF9ydW50ZXN0X21ha2VyZXBvcnQoaXRlbSwgY2FsbCk6
CisgICAgb3V0Y29tZSA9IHlpZWxkCisgICAgcmVwID0gb3V0Y29tZS5nZXRfcmVzdWx0KCkKKyAg
ICBldmFseGZhaWwgPSBnZXRhdHRyKGl0ZW0sICdfZXZhbHhmYWlsJywgTm9uZSkKKyAgICBldmFs
c2tpcCA9IGdldGF0dHIoaXRlbSwgJ19ldmFsc2tpcCcsIE5vbmUpCisgICAgIyB1bml0dHRlc3Qg
c3BlY2lhbCBjYXNlLCBzZWUgc2V0dGluZyBvZiBfdW5leHBlY3RlZHN1Y2Nlc3MKKyAgICBpZiBo
YXNhdHRyKGl0ZW0sICdfdW5leHBlY3RlZHN1Y2Nlc3MnKSBhbmQgcmVwLndoZW4gPT0gImNhbGwi
OgorICAgICAgICAjIHdlIG5lZWQgdG8gdHJhbnNsYXRlIGludG8gaG93IHB5dGVzdCBlbmNvZGVz
IHhwYXNzCisgICAgICAgIHJlcC53YXN4ZmFpbCA9ICJyZWFzb246ICIgKyByZXByKGl0ZW0uX3Vu
ZXhwZWN0ZWRzdWNjZXNzKQorICAgICAgICByZXAub3V0Y29tZSA9ICJmYWlsZWQiCisgICAgZWxp
ZiBpdGVtLmNvbmZpZy5vcHRpb24ucnVueGZhaWw6CisgICAgICAgIHBhc3MgICAjIGRvbid0IGlu
dGVyZWZlcmUKKyAgICBlbGlmIGNhbGwuZXhjaW5mbyBhbmQgY2FsbC5leGNpbmZvLmVycmlzaW5z
dGFuY2UocHl0ZXN0LnhmYWlsLkV4Y2VwdGlvbik6CisgICAgICAgIHJlcC53YXN4ZmFpbCA9ICJy
ZWFzb246ICIgKyBjYWxsLmV4Y2luZm8udmFsdWUubXNnCisgICAgICAgIHJlcC5vdXRjb21lID0g
InNraXBwZWQiCisgICAgZWxpZiBldmFseGZhaWwgYW5kIG5vdCByZXAuc2tpcHBlZCBhbmQgZXZh
bHhmYWlsLndhc3ZhbGlkKCkgYW5kIFwKKyAgICAgICAgZXZhbHhmYWlsLmlzdHJ1ZSgpOgorICAg
ICAgICBpZiBjYWxsLmV4Y2luZm86CisgICAgICAgICAgICBpZiBldmFseGZhaWwuaW52YWxpZHJh
aXNlKGNhbGwuZXhjaW5mby52YWx1ZSk6CisgICAgICAgICAgICAgICAgcmVwLm91dGNvbWUgPSAi
ZmFpbGVkIgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXAub3V0Y29tZSA9
ICJza2lwcGVkIgorICAgICAgICAgICAgICAgIHJlcC53YXN4ZmFpbCA9IGV2YWx4ZmFpbC5nZXRl
eHBsYW5hdGlvbigpCisgICAgICAgIGVsaWYgY2FsbC53aGVuID09ICJjYWxsIjoKKyAgICAgICAg
ICAgIHJlcC5vdXRjb21lID0gImZhaWxlZCIgICMgeHBhc3Mgb3V0Y29tZQorICAgICAgICAgICAg
cmVwLndhc3hmYWlsID0gZXZhbHhmYWlsLmdldGV4cGxhbmF0aW9uKCkKKyAgICBlbGlmIGV2YWxz
a2lwIGlzIG5vdCBOb25lIGFuZCByZXAuc2tpcHBlZCBhbmQgdHlwZShyZXAubG9uZ3JlcHIpIGlz
IHR1cGxlOgorICAgICAgICAjIHNraXBwZWQgYnkgbWFyay5za2lwaWY7IGNoYW5nZSB0aGUgbG9j
YXRpb24gb2YgdGhlIGZhaWx1cmUKKyAgICAgICAgIyB0byBwb2ludCB0byB0aGUgaXRlbSBkZWZp
bml0aW9uLCBvdGhlcndpc2UgaXQgd2lsbCBkaXNwbGF5CisgICAgICAgICMgdGhlIGxvY2F0aW9u
IG9mIHdoZXJlIHRoZSBza2lwIGV4Y2VwdGlvbiB3YXMgcmFpc2VkIHdpdGhpbiBweXRlc3QKKyAg
ICAgICAgZmlsZW5hbWUsIGxpbmUsIHJlYXNvbiA9IHJlcC5sb25ncmVwcgorICAgICAgICBmaWxl
bmFtZSwgbGluZSA9IGl0ZW0ubG9jYXRpb25bOjJdCisgICAgICAgIHJlcC5sb25ncmVwciA9IGZp
bGVuYW1lLCBsaW5lLCByZWFzb24KKworIyBjYWxsZWQgYnkgdGVybWluYWxyZXBvcnRlciBwcm9n
cmVzcyByZXBvcnRpbmcKK2RlZiBweXRlc3RfcmVwb3J0X3Rlc3RzdGF0dXMocmVwb3J0KToKKyAg
ICBpZiBoYXNhdHRyKHJlcG9ydCwgIndhc3hmYWlsIik6CisgICAgICAgIGlmIHJlcG9ydC5za2lw
cGVkOgorICAgICAgICAgICAgcmV0dXJuICJ4ZmFpbGVkIiwgIngiLCAieGZhaWwiCisgICAgICAg
IGVsaWYgcmVwb3J0LmZhaWxlZDoKKyAgICAgICAgICAgIHJldHVybiAieHBhc3NlZCIsICJYIiwg
KCJYUEFTUyIsIHsneWVsbG93JzogVHJ1ZX0pCisKKyMgY2FsbGVkIGJ5IHRoZSB0ZXJtaW5hbHJl
cG9ydGVyIGluc3RhbmNlL3BsdWdpbgorZGVmIHB5dGVzdF90ZXJtaW5hbF9zdW1tYXJ5KHRlcm1p
bmFscmVwb3J0ZXIpOgorICAgIHRyID0gdGVybWluYWxyZXBvcnRlcgorICAgIGlmIG5vdCB0ci5y
ZXBvcnRjaGFyczoKKyAgICAgICAgI2ZvciBuYW1lIGluICJ4ZmFpbGVkIHNraXBwZWQgZmFpbGVk
IHhwYXNzZWQiOgorICAgICAgICAjICAgIGlmIG5vdCB0ci5zdGF0cy5nZXQobmFtZSwgMCk6Cisg
ICAgICAgICMgICAgICAgIHRyLndyaXRlX2xpbmUoIkhJTlQ6IHVzZSAnLXInIG9wdGlvbiB0byBz
ZWUgZXh0cmEgIgorICAgICAgICAjICAgICAgICAgICAgICAic3VtbWFyeSBpbmZvIGFib3V0IHRl
c3RzIikKKyAgICAgICAgIyAgICAgICAgYnJlYWsKKyAgICAgICAgcmV0dXJuCisKKyAgICBsaW5l
cyA9IFtdCisgICAgZm9yIGNoYXIgaW4gdHIucmVwb3J0Y2hhcnM6CisgICAgICAgIGlmIGNoYXIg
PT0gIngiOgorICAgICAgICAgICAgc2hvd194ZmFpbGVkKHRlcm1pbmFscmVwb3J0ZXIsIGxpbmVz
KQorICAgICAgICBlbGlmIGNoYXIgPT0gIlgiOgorICAgICAgICAgICAgc2hvd194cGFzc2VkKHRl
cm1pbmFscmVwb3J0ZXIsIGxpbmVzKQorICAgICAgICBlbGlmIGNoYXIgaW4gImZGIjoKKyAgICAg
ICAgICAgIHNob3dfc2ltcGxlKHRlcm1pbmFscmVwb3J0ZXIsIGxpbmVzLCAnZmFpbGVkJywgIkZB
SUwgJXMiKQorICAgICAgICBlbGlmIGNoYXIgaW4gInNTIjoKKyAgICAgICAgICAgIHNob3dfc2tp
cHBlZCh0ZXJtaW5hbHJlcG9ydGVyLCBsaW5lcykKKyAgICAgICAgZWxpZiBjaGFyID09ICJFIjoK
KyAgICAgICAgICAgIHNob3dfc2ltcGxlKHRlcm1pbmFscmVwb3J0ZXIsIGxpbmVzLCAnZXJyb3In
LCAiRVJST1IgJXMiKQorICAgICAgICBlbGlmIGNoYXIgPT0gJ3AnOgorICAgICAgICAgICAgc2hv
d19zaW1wbGUodGVybWluYWxyZXBvcnRlciwgbGluZXMsICdwYXNzZWQnLCAiUEFTU0VEICVzIikK
KworICAgIGlmIGxpbmVzOgorICAgICAgICB0ci5fdHcuc2VwKCI9IiwgInNob3J0IHRlc3Qgc3Vt
bWFyeSBpbmZvIikKKyAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAgICAgICB0ci5f
dHcubGluZShsaW5lKQorCitkZWYgc2hvd19zaW1wbGUodGVybWluYWxyZXBvcnRlciwgbGluZXMs
IHN0YXQsIGZvcm1hdCk6CisgICAgZmFpbGVkID0gdGVybWluYWxyZXBvcnRlci5zdGF0cy5nZXQo
c3RhdCkKKyAgICBpZiBmYWlsZWQ6CisgICAgICAgIGZvciByZXAgaW4gZmFpbGVkOgorICAgICAg
ICAgICAgcG9zID0gdGVybWluYWxyZXBvcnRlci5jb25maWcuY3dkX3JlbGF0aXZlX25vZGVpZChy
ZXAubm9kZWlkKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKGZvcm1hdCAlKHBvcywpKQorCitk
ZWYgc2hvd194ZmFpbGVkKHRlcm1pbmFscmVwb3J0ZXIsIGxpbmVzKToKKyAgICB4ZmFpbGVkID0g
dGVybWluYWxyZXBvcnRlci5zdGF0cy5nZXQoInhmYWlsZWQiKQorICAgIGlmIHhmYWlsZWQ6Cisg
ICAgICAgIGZvciByZXAgaW4geGZhaWxlZDoKKyAgICAgICAgICAgIHBvcyA9IHRlcm1pbmFscmVw
b3J0ZXIuY29uZmlnLmN3ZF9yZWxhdGl2ZV9ub2RlaWQocmVwLm5vZGVpZCkKKyAgICAgICAgICAg
IHJlYXNvbiA9IHJlcC53YXN4ZmFpbAorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCJYRkFJTCAl
cyIgJSAocG9zLCkpCisgICAgICAgICAgICBpZiByZWFzb246CisgICAgICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKCIgICIgKyBzdHIocmVhc29uKSkKKworZGVmIHNob3dfeHBhc3NlZCh0ZXJtaW5h
bHJlcG9ydGVyLCBsaW5lcyk6CisgICAgeHBhc3NlZCA9IHRlcm1pbmFscmVwb3J0ZXIuc3RhdHMu
Z2V0KCJ4cGFzc2VkIikKKyAgICBpZiB4cGFzc2VkOgorICAgICAgICBmb3IgcmVwIGluIHhwYXNz
ZWQ6CisgICAgICAgICAgICBwb3MgPSB0ZXJtaW5hbHJlcG9ydGVyLmNvbmZpZy5jd2RfcmVsYXRp
dmVfbm9kZWlkKHJlcC5ub2RlaWQpCisgICAgICAgICAgICByZWFzb24gPSByZXAud2FzeGZhaWwK
KyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgiWFBBU1MgJXMgJXMiICUocG9zLCByZWFzb24pKQor
CitkZWYgY2FjaGVkX2V2YWwoY29uZmlnLCBleHByLCBkKToKKyAgICBpZiBub3QgaGFzYXR0cihj
b25maWcsICdfZXZhbGNhY2hlJyk6CisgICAgICAgIGNvbmZpZy5fZXZhbGNhY2hlID0ge30KKyAg
ICB0cnk6CisgICAgICAgIHJldHVybiBjb25maWcuX2V2YWxjYWNoZVtleHByXQorICAgIGV4Y2Vw
dCBLZXlFcnJvcjoKKyAgICAgICAgaW1wb3J0IF9weXRlc3QuX2NvZGUKKyAgICAgICAgZXhwcmNv
ZGUgPSBfcHl0ZXN0Ll9jb2RlLmNvbXBpbGUoZXhwciwgbW9kZT0iZXZhbCIpCisgICAgICAgIGNv
bmZpZy5fZXZhbGNhY2hlW2V4cHJdID0geCA9IGV2YWwoZXhwcmNvZGUsIGQpCisgICAgICAgIHJl
dHVybiB4CisKKworZGVmIGZvbGRlZF9za2lwcyhza2lwcGVkKToKKyAgICBkID0ge30KKyAgICBm
b3IgZXZlbnQgaW4gc2tpcHBlZDoKKyAgICAgICAga2V5ID0gZXZlbnQubG9uZ3JlcHIKKyAgICAg
ICAgYXNzZXJ0IGxlbihrZXkpID09IDMsIChldmVudCwga2V5KQorICAgICAgICBkLnNldGRlZmF1
bHQoa2V5LCBbXSkuYXBwZW5kKGV2ZW50KQorICAgIGwgPSBbXQorICAgIGZvciBrZXksIGV2ZW50
cyBpbiBkLml0ZW1zKCk6CisgICAgICAgIGwuYXBwZW5kKChsZW4oZXZlbnRzKSwpICsga2V5KQor
ICAgIHJldHVybiBsCisKK2RlZiBzaG93X3NraXBwZWQodGVybWluYWxyZXBvcnRlciwgbGluZXMp
OgorICAgIHRyID0gdGVybWluYWxyZXBvcnRlcgorICAgIHNraXBwZWQgPSB0ci5zdGF0cy5nZXQo
J3NraXBwZWQnLCBbXSkKKyAgICBpZiBza2lwcGVkOgorICAgICAgICAjaWYgbm90IHRyLmhhc29w
dCgnc2tpcHBlZCcpOgorICAgICAgICAjICAgIHRyLndyaXRlX2xpbmUoCisgICAgICAgICMgICAg
ICAgICIlZCBza2lwcGVkIHRlc3RzLCBzcGVjaWZ5IC1ycyBmb3IgbW9yZSBpbmZvIiAlCisgICAg
ICAgICMgICAgICAgIGxlbihza2lwcGVkKSkKKyAgICAgICAgIyAgICByZXR1cm4KKyAgICAgICAg
ZnNraXBzID0gZm9sZGVkX3NraXBzKHNraXBwZWQpCisgICAgICAgIGlmIGZza2lwczoKKyAgICAg
ICAgICAgICN0ci53cml0ZV9zZXAoIl8iLCAic2tpcHBlZCB0ZXN0IHN1bW1hcnkiKQorICAgICAg
ICAgICAgZm9yIG51bSwgZnNwYXRoLCBsaW5lbm8sIHJlYXNvbiBpbiBmc2tpcHM6CisgICAgICAg
ICAgICAgICAgaWYgcmVhc29uLnN0YXJ0c3dpdGgoIlNraXBwZWQ6ICIpOgorICAgICAgICAgICAg
ICAgICAgICByZWFzb24gPSByZWFzb25bOTpdCisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCJTS0lQIFslZF0gJXM6JWQ6ICVzIiAlCisgICAgICAgICAgICAgICAgICAgIChudW0sIGZzcGF0
aCwgbGluZW5vLCByZWFzb24pKQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQv
dzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L3N0YW5kYWxvbmV0ZW1wbGF0ZS5weSBiL1dlYkRyaXZl
clRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9zdGFuZGFsb25ldGVtcGxh
dGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQ4NGQ1ZDFiMjVm
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5
dGVzdC9fcHl0ZXN0L3N0YW5kYWxvbmV0ZW1wbGF0ZS5weQpAQCAtMCwwICsxLDg5IEBACisjISAv
dXNyL2Jpbi9lbnYgcHl0aG9uCisKKyMgSGkgVGhlcmUhCisjIFlvdSBtYXkgYmUgd29uZGVyaW5n
IHdoYXQgdGhpcyBnaWFudCBibG9iIG9mIGJpbmFyeSBkYXRhIGhlcmUgaXMsIHlvdSBtaWdodAor
IyBldmVuIGJlIHdvcnJpZWQgdGhhdCB3ZSdyZSB1cCB0byBzb21ldGhpbmcgbmVmYXJpb3VzIChn
b29kIGZvciB5b3UgZm9yIGJlaW5nCisjIHBhcmFub2lkISkuIFRoaXMgaXMgYSBiYXNlNjQgZW5j
b2Rpbmcgb2YgYSB6aXAgZmlsZSwgdGhpcyB6aXAgZmlsZSBjb250YWlucworIyBhIGZ1bGx5IGZ1
bmN0aW9uYWwgYmFzaWMgcHl0ZXN0IHNjcmlwdC4KKyMKKyMgUHl0ZXN0IGlzIGEgdGhpbmcgdGhh
dCB0ZXN0cyBwYWNrYWdlcywgcHl0ZXN0IGl0c2VsZiBpcyBhIHBhY2thZ2UgdGhhdCBzb21lLQor
IyBvbmUgbWlnaHQgd2FudCB0byBpbnN0YWxsLCBlc3BlY2lhbGx5IGlmIHRoZXkncmUgbG9va2lu
ZyB0byBydW4gdGVzdHMgaW5zaWRlCisjIHNvbWUgcGFja2FnZSB0aGV5IHdhbnQgdG8gaW5zdGFs
bC4gUHl0ZXN0IGhhcyBhIGxvdCBvZiBjb2RlIHRvIGNvbGxlY3QgYW5kCisjIGV4ZWN1dGUgdGVz
dHMsIGFuZCBvdGhlciBzdWNoIHNvcnQgb2YgInRyaWJhbCBrbm93bGVkZ2UiIHRoYXQgaGFzIGJl
ZW4gZW4tCisjIGNvZGVkIGluIGl0cyBjb2RlIGJhc2UuIEJlY2F1c2Ugb2YgdGhpcyB3ZSBiYXNp
Y2FsbHkgaW5jbHVkZSBhIGJhc2ljIGNvcHkKKyMgb2YgcHl0ZXN0IGluc2lkZSB0aGlzIGJsb2Iu
IFdlIGRvIHRoaXMgIGJlY2F1c2UgaXQgbGV0J3MgeW91IGFzIGEgbWFpbnRhaW5lcgorIyBvciBh
cHBsaWNhdGlvbiBkZXZlbG9wZXIgd2hvIHdhbnRzIHBlb3BsZSB3aG8gZG9uJ3QgZGVhbCB3aXRo
IHB5dGhvbiBtdWNoIHRvCisjIGVhc2lseSBydW4gdGVzdHMgd2l0aG91dCBpbnN0YWxsaW5nIHRo
ZSBjb21wbGV0ZSBweXRlc3QgcGFja2FnZS4KKyMKKyMgSWYgeW91J3JlIHdvbmRlcmluZyBob3cg
dGhpcyBpcyBjcmVhdGVkOiB5b3UgY2FuIGNyZWF0ZSBpdCB5b3Vyc2VsZiBpZiB5b3UKKyMgaGF2
ZSBhIGNvbXBsZXRlIHB5dGVzdCBpbnN0YWxsYXRpb24gYnkgdXNpbmcgdGhpcyBjb21tYW5kIG9u
IHRoZSBjb21tYW5kLQorIyBsaW5lOiBgYHB5LnRlc3QgLS1nZW5zY3JpcHQ9cnVudGVzdHMucHlg
YC4KKworc291cmNlcyA9ICIiIgorQFNPVVJDRVNAIiIiCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBi
YXNlNjQKK2ltcG9ydCB6bGliCisKK2NsYXNzIERpY3RJbXBvcnRlcihvYmplY3QpOgorICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBzb3VyY2VzKToKKyAgICAgICAgc2VsZi5zb3VyY2VzID0gc291cmNl
cworCisgICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lLCBwYXRoPU5vbmUpOgorICAg
ICAgICBpZiBmdWxsbmFtZSA9PSAiYXJncGFyc2UiIGFuZCBzeXMudmVyc2lvbl9pbmZvID49ICgy
LDcpOgorICAgICAgICAgICAgIyB3ZSB3ZXJlIGdlbmVyYXRlZCB3aXRoIDxweXRob24yLjcgKHdo
aWNoIHB1bGxzIGluIGFyZ3BhcnNlKQorICAgICAgICAgICAgIyBidXQgd2UgYXJlIHJ1bm5pbmcg
bm93IG9uIGEgc3RkbGliIHdoaWNoIGhhcyBpdCwgc28gdXNlIHRoYXQuCisgICAgICAgICAgICBy
ZXR1cm4gTm9uZQorICAgICAgICBpZiBmdWxsbmFtZSBpbiBzZWxmLnNvdXJjZXM6CisgICAgICAg
ICAgICByZXR1cm4gc2VsZgorICAgICAgICBpZiBmdWxsbmFtZSArICcuX19pbml0X18nIGluIHNl
bGYuc291cmNlczoKKyAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgIHJldHVybiBOb25l
CisKKyAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgorICAgICAgICAjIHByaW50
ICJsb2FkX21vZHVsZToiLCAgZnVsbG5hbWUKKyAgICAgICAgZnJvbSB0eXBlcyBpbXBvcnQgTW9k
dWxlVHlwZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzID0gc2VsZi5zb3VyY2VzW2Z1bGxu
YW1lXQorICAgICAgICAgICAgaXNfcGtnID0gRmFsc2UKKyAgICAgICAgZXhjZXB0IEtleUVycm9y
OgorICAgICAgICAgICAgcyA9IHNlbGYuc291cmNlc1tmdWxsbmFtZSArICcuX19pbml0X18nXQor
ICAgICAgICAgICAgaXNfcGtnID0gVHJ1ZQorCisgICAgICAgIGNvID0gY29tcGlsZShzLCBmdWxs
bmFtZSwgJ2V4ZWMnKQorICAgICAgICBtb2R1bGUgPSBzeXMubW9kdWxlcy5zZXRkZWZhdWx0KGZ1
bGxuYW1lLCBNb2R1bGVUeXBlKGZ1bGxuYW1lKSkKKyAgICAgICAgbW9kdWxlLl9fZmlsZV9fID0g
IiVzLyVzIiAlIChfX2ZpbGVfXywgZnVsbG5hbWUpCisgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9f
ID0gc2VsZgorICAgICAgICBpZiBpc19wa2c6CisgICAgICAgICAgICBtb2R1bGUuX19wYXRoX18g
PSBbZnVsbG5hbWVdCisKKyAgICAgICAgZG9fZXhlYyhjbywgbW9kdWxlLl9fZGljdF9fKSAjIG5v
cWEKKyAgICAgICAgcmV0dXJuIHN5cy5tb2R1bGVzW2Z1bGxuYW1lXQorCisgICAgZGVmIGdldF9z
b3VyY2Uoc2VsZiwgbmFtZSk6CisgICAgICAgIHJlcyA9IHNlbGYuc291cmNlcy5nZXQobmFtZSkK
KyAgICAgICAgaWYgcmVzIGlzIE5vbmU6CisgICAgICAgICAgICByZXMgPSBzZWxmLnNvdXJjZXMu
Z2V0KG5hbWUgKyAnLl9faW5pdF9fJykKKyAgICAgICAgcmV0dXJuIHJlcworCitpZiBfX25hbWVf
XyA9PSAiX19tYWluX18iOgorICAgIHRyeToKKyAgICAgICAgaW1wb3J0IHBrZ19yZXNvdXJjZXMg
ICMgbm9xYQorICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgc3lzLnN0ZGVyci53cml0
ZSgiRVJST1I6IHNldHVwdG9vbHMgbm90IGluc3RhbGxlZFxuIikKKyAgICAgICAgc3lzLmV4aXQo
MikKKyAgICBpZiBzeXMudmVyc2lvbl9pbmZvID49ICgzLCAwKToKKyAgICAgICAgZXhlYygiZGVm
IGRvX2V4ZWMoY28sIGxvYyk6IGV4ZWMoY28sIGxvYylcbiIpCisgICAgICAgIGltcG9ydCBwaWNr
bGUKKyAgICAgICAgc291cmNlcyA9IHNvdXJjZXMuZW5jb2RlKCJhc2NpaSIpICMgZW5zdXJlIGJ5
dGVzCisgICAgICAgIHNvdXJjZXMgPSBwaWNrbGUubG9hZHMoemxpYi5kZWNvbXByZXNzKGJhc2U2
NC5kZWNvZGVieXRlcyhzb3VyY2VzKSkpCisgICAgZWxzZToKKyAgICAgICAgaW1wb3J0IGNQaWNr
bGUgYXMgcGlja2xlCisgICAgICAgIGV4ZWMoImRlZiBkb19leGVjKGNvLCBsb2MpOiBleGVjIGNv
IGluIGxvY1xuIikKKyAgICAgICAgc291cmNlcyA9IHBpY2tsZS5sb2Fkcyh6bGliLmRlY29tcHJl
c3MoYmFzZTY0LmRlY29kZXN0cmluZyhzb3VyY2VzKSkpCisKKyAgICBpbXBvcnRlciA9IERpY3RJ
bXBvcnRlcihzb3VyY2VzKQorICAgIHN5cy5tZXRhX3BhdGguaW5zZXJ0KDAsIGltcG9ydGVyKQor
ICAgIGVudHJ5ID0gIkBFTlRSWUAiCisgICAgZG9fZXhlYyhlbnRyeSwgbG9jYWxzKCkpICMgbm9x
YQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9f
cHl0ZXN0L3Rlcm1pbmFsLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5
dGVzdC9fcHl0ZXN0L3Rlcm1pbmFsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi44MjVmNTUzZWYyYwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2lt
cG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC90ZXJtaW5hbC5weQpAQCAtMCwwICsxLDU5
MyBAQAorIiIiIHRlcm1pbmFsIHJlcG9ydGluZyBvZiB0aGUgZnVsbCB0ZXN0aW5nIHByb2Nlc3Mu
CisKK1RoaXMgaXMgYSBnb29kIHNvdXJjZSBmb3IgbG9va2luZyBhdCB0aGUgdmFyaW91cyByZXBv
cnRpbmcgaG9va3MuCisiIiIKK2Zyb20gX3B5dGVzdC5tYWluIGltcG9ydCBFWElUX09LLCBFWElU
X1RFU1RTRkFJTEVELCBFWElUX0lOVEVSUlVQVEVELCBcCisgICAgRVhJVF9VU0FHRUVSUk9SLCBF
WElUX05PVEVTVFNDT0xMRUNURUQKK2ltcG9ydCBweXRlc3QKK2ltcG9ydCBweQoraW1wb3J0IHN5
cworaW1wb3J0IHRpbWUKK2ltcG9ydCBwbGF0Zm9ybQorCitpbXBvcnQgX3B5dGVzdC5fcGx1Z2d5
IGFzIHBsdWdneQorCisKK2RlZiBweXRlc3RfYWRkb3B0aW9uKHBhcnNlcik6CisgICAgZ3JvdXAg
PSBwYXJzZXIuZ2V0Z3JvdXAoInRlcm1pbmFsIHJlcG9ydGluZyIsICJyZXBvcnRpbmciLCBhZnRl
cj0iZ2VuZXJhbCIpCisgICAgZ3JvdXAuX2FkZG9wdGlvbignLXYnLCAnLS12ZXJib3NlJywgYWN0
aW9uPSJjb3VudCIsCisgICAgICAgICAgICAgICBkZXN0PSJ2ZXJib3NlIiwgZGVmYXVsdD0wLCBo
ZWxwPSJpbmNyZWFzZSB2ZXJib3NpdHkuIiksCisgICAgZ3JvdXAuX2FkZG9wdGlvbignLXEnLCAn
LS1xdWlldCcsIGFjdGlvbj0iY291bnQiLAorICAgICAgICAgICAgICAgZGVzdD0icXVpZXQiLCBk
ZWZhdWx0PTAsIGhlbHA9ImRlY3JlYXNlIHZlcmJvc2l0eS4iKSwKKyAgICBncm91cC5fYWRkb3B0
aW9uKCctcicsCisgICAgICAgICBhY3Rpb249InN0b3JlIiwgZGVzdD0icmVwb3J0Y2hhcnMiLCBk
ZWZhdWx0PU5vbmUsIG1ldGF2YXI9ImNoYXJzIiwKKyAgICAgICAgIGhlbHA9InNob3cgZXh0cmEg
dGVzdCBzdW1tYXJ5IGluZm8gYXMgc3BlY2lmaWVkIGJ5IGNoYXJzIChmKWFpbGVkLCAiCisgICAg
ICAgICAgICAgICIoRSllcnJvciwgKHMpc2tpcHBlZCwgKHgpZmFpbGVkLCAoWClwYXNzZWQgKHcp
cHl0ZXN0LXdhcm5pbmdzICIKKyAgICAgICAgICAgICAgIihwKXBhc3NlZCwgKFApcGFzc2VkIHdp
dGggb3V0cHV0LCAoYSlhbGwgZXhjZXB0IHBQLiIpCisgICAgZ3JvdXAuX2FkZG9wdGlvbignLWwn
LCAnLS1zaG93bG9jYWxzJywKKyAgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9InNo
b3dsb2NhbHMiLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgaGVscD0ic2hvdyBsb2NhbHMgaW4g
dHJhY2ViYWNrcyAoZGlzYWJsZWQgYnkgZGVmYXVsdCkuIikKKyAgICBncm91cC5fYWRkb3B0aW9u
KCctLXJlcG9ydCcsCisgICAgICAgICBhY3Rpb249InN0b3JlIiwgZGVzdD0icmVwb3J0IiwgZGVm
YXVsdD1Ob25lLCBtZXRhdmFyPSJvcHRzIiwKKyAgICAgICAgIGhlbHA9IihkZXByZWNhdGVkLCB1
c2UgLXIpIikKKyAgICBncm91cC5fYWRkb3B0aW9uKCctLXRiJywgbWV0YXZhcj0ic3R5bGUiLAor
ICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZSIsIGRlc3Q9InRic3R5bGUiLCBkZWZhdWx0PSdh
dXRvJywKKyAgICAgICAgICAgICAgIGNob2ljZXM9WydhdXRvJywgJ2xvbmcnLCAnc2hvcnQnLCAn
bm8nLCAnbGluZScsICduYXRpdmUnXSwKKyAgICAgICAgICAgICAgIGhlbHA9InRyYWNlYmFjayBw
cmludCBtb2RlIChhdXRvL2xvbmcvc2hvcnQvbGluZS9uYXRpdmUvbm8pLiIpCisgICAgZ3JvdXAu
X2FkZG9wdGlvbignLS1mdWxsdHJhY2UnLCAnLS1mdWxsLXRyYWNlJywKKyAgICAgICAgICAgICAg
IGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICBoZWxw
PSJkb24ndCBjdXQgYW55IHRyYWNlYmFja3MgKGRlZmF1bHQgaXMgdG8gY3V0KS4iKQorICAgIGdy
b3VwLl9hZGRvcHRpb24oJy0tY29sb3InLCBtZXRhdmFyPSJjb2xvciIsCisgICAgICAgICAgICAg
ICBhY3Rpb249InN0b3JlIiwgZGVzdD0iY29sb3IiLCBkZWZhdWx0PSdhdXRvJywKKyAgICAgICAg
ICAgICAgIGNob2ljZXM9Wyd5ZXMnLCAnbm8nLCAnYXV0byddLAorICAgICAgICAgICAgICAgaGVs
cD0iY29sb3IgdGVybWluYWwgb3V0cHV0ICh5ZXMvbm8vYXV0bykuIikKKworZGVmIHB5dGVzdF9j
b25maWd1cmUoY29uZmlnKToKKyAgICBjb25maWcub3B0aW9uLnZlcmJvc2UgLT0gY29uZmlnLm9w
dGlvbi5xdWlldAorICAgIHJlcG9ydGVyID0gVGVybWluYWxSZXBvcnRlcihjb25maWcsIHN5cy5z
dGRvdXQpCisgICAgY29uZmlnLnBsdWdpbm1hbmFnZXIucmVnaXN0ZXIocmVwb3J0ZXIsICd0ZXJt
aW5hbHJlcG9ydGVyJykKKyAgICBpZiBjb25maWcub3B0aW9uLmRlYnVnIG9yIGNvbmZpZy5vcHRp
b24udHJhY2Vjb25maWc6CisgICAgICAgIGRlZiBteXdyaXRlcih0YWdzLCBhcmdzKToKKyAgICAg
ICAgICAgIG1zZyA9ICIgIi5qb2luKG1hcChzdHIsIGFyZ3MpKQorICAgICAgICAgICAgcmVwb3J0
ZXIud3JpdGVfbGluZSgiW3RyYWNlY29uZmlnXSAiICsgbXNnKQorICAgICAgICBjb25maWcudHJh
Y2Uucm9vdC5zZXRwcm9jZXNzb3IoInB5dGVzdDpjb25maWciLCBteXdyaXRlcikKKworZGVmIGdl
dHJlcG9ydG9wdChjb25maWcpOgorICAgIHJlcG9ydG9wdHMgPSAiIgorICAgIG9wdHZhbHVlID0g
Y29uZmlnLm9wdGlvbi5yZXBvcnQKKyAgICBpZiBvcHR2YWx1ZToKKyAgICAgICAgcHkuYnVpbHRp
bi5wcmludF8oIkRFUFJFQ0FURUQ6IHVzZSAtciBpbnN0ZWFkIG9mIC0tcmVwb3J0IG9wdGlvbi4i
LAorICAgICAgICAgICAgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICBpZiBvcHR2YWx1ZToKKyAg
ICAgICAgICAgIGZvciBzZXR0aW5nIGluIG9wdHZhbHVlLnNwbGl0KCIsIik6CisgICAgICAgICAg
ICAgICAgc2V0dGluZyA9IHNldHRpbmcuc3RyaXAoKQorICAgICAgICAgICAgICAgIGlmIHNldHRp
bmcgPT0gInNraXBwZWQiOgorICAgICAgICAgICAgICAgICAgICByZXBvcnRvcHRzICs9ICJzIgor
ICAgICAgICAgICAgICAgIGVsaWYgc2V0dGluZyA9PSAieGZhaWxlZCI6CisgICAgICAgICAgICAg
ICAgICAgIHJlcG9ydG9wdHMgKz0gIngiCisgICAgcmVwb3J0Y2hhcnMgPSBjb25maWcub3B0aW9u
LnJlcG9ydGNoYXJzCisgICAgaWYgcmVwb3J0Y2hhcnM6CisgICAgICAgIGZvciBjaGFyIGluIHJl
cG9ydGNoYXJzOgorICAgICAgICAgICAgaWYgY2hhciBub3QgaW4gcmVwb3J0b3B0cyBhbmQgY2hh
ciAhPSAnYSc6CisgICAgICAgICAgICAgICAgcmVwb3J0b3B0cyArPSBjaGFyCisgICAgICAgICAg
ICBlbGlmIGNoYXIgPT0gJ2EnOgorICAgICAgICAgICAgICAgIHJlcG9ydG9wdHMgPSAnZkVzeFh3
JworICAgIHJldHVybiByZXBvcnRvcHRzCisKK2RlZiBweXRlc3RfcmVwb3J0X3Rlc3RzdGF0dXMo
cmVwb3J0KToKKyAgICBpZiByZXBvcnQucGFzc2VkOgorICAgICAgICBsZXR0ZXIgPSAiLiIKKyAg
ICBlbGlmIHJlcG9ydC5za2lwcGVkOgorICAgICAgICBsZXR0ZXIgPSAicyIKKyAgICBlbGlmIHJl
cG9ydC5mYWlsZWQ6CisgICAgICAgIGxldHRlciA9ICJGIgorICAgICAgICBpZiByZXBvcnQud2hl
biAhPSAiY2FsbCI6CisgICAgICAgICAgICBsZXR0ZXIgPSAiZiIKKyAgICByZXR1cm4gcmVwb3J0
Lm91dGNvbWUsIGxldHRlciwgcmVwb3J0Lm91dGNvbWUudXBwZXIoKQorCitjbGFzcyBXYXJuaW5n
UmVwb3J0OgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb2RlLCBtZXNzYWdlLCBub2RlaWQ9Tm9u
ZSwgZnNsb2NhdGlvbj1Ob25lKToKKyAgICAgICAgc2VsZi5jb2RlID0gY29kZQorICAgICAgICBz
ZWxmLm1lc3NhZ2UgPSBtZXNzYWdlCisgICAgICAgIHNlbGYubm9kZWlkID0gbm9kZWlkCisgICAg
ICAgIHNlbGYuZnNsb2NhdGlvbiA9IGZzbG9jYXRpb24KKworCitjbGFzcyBUZXJtaW5hbFJlcG9y
dGVyOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25maWcsIGZpbGU9Tm9uZSk6CisgICAgICAg
IGltcG9ydCBfcHl0ZXN0LmNvbmZpZworICAgICAgICBzZWxmLmNvbmZpZyA9IGNvbmZpZworICAg
ICAgICBzZWxmLnZlcmJvc2l0eSA9IHNlbGYuY29uZmlnLm9wdGlvbi52ZXJib3NlCisgICAgICAg
IHNlbGYuc2hvd2hlYWRlciA9IHNlbGYudmVyYm9zaXR5ID49IDAKKyAgICAgICAgc2VsZi5zaG93
ZnNwYXRoID0gc2VsZi52ZXJib3NpdHkgPj0gMAorICAgICAgICBzZWxmLnNob3dsb25ndGVzdGlu
Zm8gPSBzZWxmLnZlcmJvc2l0eSA+IDAKKyAgICAgICAgc2VsZi5fbnVtY29sbGVjdGVkID0gMAor
CisgICAgICAgIHNlbGYuc3RhdHMgPSB7fQorICAgICAgICBzZWxmLnN0YXJ0ZGlyID0gcHkucGF0
aC5sb2NhbCgpCisgICAgICAgIGlmIGZpbGUgaXMgTm9uZToKKyAgICAgICAgICAgIGZpbGUgPSBz
eXMuc3Rkb3V0CisgICAgICAgIHNlbGYuX3R3ID0gc2VsZi53cml0ZXIgPSBfcHl0ZXN0LmNvbmZp
Zy5jcmVhdGVfdGVybWluYWxfd3JpdGVyKGNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSkKKyAg
ICAgICAgc2VsZi5jdXJyZW50ZnNwYXRoID0gTm9uZQorICAgICAgICBzZWxmLnJlcG9ydGNoYXJz
ID0gZ2V0cmVwb3J0b3B0KGNvbmZpZykKKyAgICAgICAgc2VsZi5oYXNtYXJrdXAgPSBzZWxmLl90
dy5oYXNtYXJrdXAKKyAgICAgICAgc2VsZi5pc2F0dHkgPSBmaWxlLmlzYXR0eSgpCisKKyAgICBk
ZWYgaGFzb3B0KHNlbGYsIGNoYXIpOgorICAgICAgICBjaGFyID0geyd4ZmFpbGVkJzogJ3gnLCAn
c2tpcHBlZCc6ICdzJ30uZ2V0KGNoYXIsIGNoYXIpCisgICAgICAgIHJldHVybiBjaGFyIGluIHNl
bGYucmVwb3J0Y2hhcnMKKworICAgIGRlZiB3cml0ZV9mc3BhdGhfcmVzdWx0KHNlbGYsIG5vZGVp
ZCwgcmVzKToKKyAgICAgICAgZnNwYXRoID0gc2VsZi5jb25maWcucm9vdGRpci5qb2luKG5vZGVp
ZC5zcGxpdCgiOjoiKVswXSkKKyAgICAgICAgaWYgZnNwYXRoICE9IHNlbGYuY3VycmVudGZzcGF0
aDoKKyAgICAgICAgICAgIHNlbGYuY3VycmVudGZzcGF0aCA9IGZzcGF0aAorICAgICAgICAgICAg
ZnNwYXRoID0gc2VsZi5zdGFydGRpci5iZXN0cmVscGF0aChmc3BhdGgpCisgICAgICAgICAgICBz
ZWxmLl90dy5saW5lKCkKKyAgICAgICAgICAgIHNlbGYuX3R3LndyaXRlKGZzcGF0aCArICIgIikK
KyAgICAgICAgc2VsZi5fdHcud3JpdGUocmVzKQorCisgICAgZGVmIHdyaXRlX2Vuc3VyZV9wcmVm
aXgoc2VsZiwgcHJlZml4LCBleHRyYT0iIiwgKiprd2FyZ3MpOgorICAgICAgICBpZiBzZWxmLmN1
cnJlbnRmc3BhdGggIT0gcHJlZml4OgorICAgICAgICAgICAgc2VsZi5fdHcubGluZSgpCisgICAg
ICAgICAgICBzZWxmLmN1cnJlbnRmc3BhdGggPSBwcmVmaXgKKyAgICAgICAgICAgIHNlbGYuX3R3
LndyaXRlKHByZWZpeCkKKyAgICAgICAgaWYgZXh0cmE6CisgICAgICAgICAgICBzZWxmLl90dy53
cml0ZShleHRyYSwgKiprd2FyZ3MpCisgICAgICAgICAgICBzZWxmLmN1cnJlbnRmc3BhdGggPSAt
MgorCisgICAgZGVmIGVuc3VyZV9uZXdsaW5lKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmN1cnJl
bnRmc3BhdGg6CisgICAgICAgICAgICBzZWxmLl90dy5saW5lKCkKKyAgICAgICAgICAgIHNlbGYu
Y3VycmVudGZzcGF0aCA9IE5vbmUKKworICAgIGRlZiB3cml0ZShzZWxmLCBjb250ZW50LCAqKm1h
cmt1cCk6CisgICAgICAgIHNlbGYuX3R3LndyaXRlKGNvbnRlbnQsICoqbWFya3VwKQorCisgICAg
ZGVmIHdyaXRlX2xpbmUoc2VsZiwgbGluZSwgKiptYXJrdXApOgorICAgICAgICBpZiBub3QgcHku
YnVpbHRpbi5faXN0ZXh0KGxpbmUpOgorICAgICAgICAgICAgbGluZSA9IHB5LmJ1aWx0aW4udGV4
dChsaW5lLCBlcnJvcnM9InJlcGxhY2UiKQorICAgICAgICBzZWxmLmVuc3VyZV9uZXdsaW5lKCkK
KyAgICAgICAgc2VsZi5fdHcubGluZShsaW5lLCAqKm1hcmt1cCkKKworICAgIGRlZiByZXdyaXRl
KHNlbGYsIGxpbmUsICoqbWFya3VwKToKKyAgICAgICAgbGluZSA9IHN0cihsaW5lKQorICAgICAg
ICBzZWxmLl90dy53cml0ZSgiXHIiICsgbGluZSwgKiptYXJrdXApCisKKyAgICBkZWYgd3JpdGVf
c2VwKHNlbGYsIHNlcCwgdGl0bGU9Tm9uZSwgKiptYXJrdXApOgorICAgICAgICBzZWxmLmVuc3Vy
ZV9uZXdsaW5lKCkKKyAgICAgICAgc2VsZi5fdHcuc2VwKHNlcCwgdGl0bGUsICoqbWFya3VwKQor
CisgICAgZGVmIHNlY3Rpb24oc2VsZiwgdGl0bGUsIHNlcD0iPSIsICoqa3cpOgorICAgICAgICBz
ZWxmLl90dy5zZXAoc2VwLCB0aXRsZSwgKiprdykKKworICAgIGRlZiBsaW5lKHNlbGYsIG1zZywg
Kiprdyk6CisgICAgICAgIHNlbGYuX3R3LmxpbmUobXNnLCAqKmt3KQorCisgICAgZGVmIHB5dGVz
dF9pbnRlcm5hbGVycm9yKHNlbGYsIGV4Y3JlcHIpOgorICAgICAgICBmb3IgbGluZSBpbiBweS5i
dWlsdGluLnRleHQoZXhjcmVwcikuc3BsaXQoIlxuIik6CisgICAgICAgICAgICBzZWxmLndyaXRl
X2xpbmUoIklOVEVSTkFMRVJST1I+ICIgKyBsaW5lKQorICAgICAgICByZXR1cm4gMQorCisgICAg
ZGVmIHB5dGVzdF9sb2d3YXJuaW5nKHNlbGYsIGNvZGUsIGZzbG9jYXRpb24sIG1lc3NhZ2UsIG5v
ZGVpZCk6CisgICAgICAgIHdhcm5pbmdzID0gc2VsZi5zdGF0cy5zZXRkZWZhdWx0KCJ3YXJuaW5n
cyIsIFtdKQorICAgICAgICBpZiBpc2luc3RhbmNlKGZzbG9jYXRpb24sIHR1cGxlKToKKyAgICAg
ICAgICAgIGZzbG9jYXRpb24gPSAiJXM6JWQiICUgZnNsb2NhdGlvbgorICAgICAgICB3YXJuaW5n
ID0gV2FybmluZ1JlcG9ydChjb2RlPWNvZGUsIGZzbG9jYXRpb249ZnNsb2NhdGlvbiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT1tZXNzYWdlLCBub2RlaWQ9bm9kZWlk
KQorICAgICAgICB3YXJuaW5ncy5hcHBlbmQod2FybmluZykKKworICAgIGRlZiBweXRlc3RfcGx1
Z2luX3JlZ2lzdGVyZWQoc2VsZiwgcGx1Z2luKToKKyAgICAgICAgaWYgc2VsZi5jb25maWcub3B0
aW9uLnRyYWNlY29uZmlnOgorICAgICAgICAgICAgbXNnID0gIlBMVUdJTiByZWdpc3RlcmVkOiAl
cyIgJSAocGx1Z2luLCkKKyAgICAgICAgICAgICMgWFhYIHRoaXMgZXZlbnQgbWF5IGhhcHBlbiBk
dXJpbmcgc2V0dXAvdGVhcmRvd24gdGltZQorICAgICAgICAgICAgIyAgICAgd2hpY2ggdW5mb3J0
dW5hdGVseSBjYXB0dXJlcyBvdXIgb3V0cHV0IGhlcmUKKyAgICAgICAgICAgICMgICAgIHdoaWNo
IGdhcmJsZXMgb3VyIG91dHB1dCBpZiB3ZSB1c2Ugc2VsZi53cml0ZV9saW5lCisgICAgICAgICAg
ICBzZWxmLndyaXRlX2xpbmUobXNnKQorCisgICAgZGVmIHB5dGVzdF9kZXNlbGVjdGVkKHNlbGYs
IGl0ZW1zKToKKyAgICAgICAgc2VsZi5zdGF0cy5zZXRkZWZhdWx0KCdkZXNlbGVjdGVkJywgW10p
LmV4dGVuZChpdGVtcykKKworICAgIGRlZiBweXRlc3RfcnVudGVzdF9sb2dzdGFydChzZWxmLCBu
b2RlaWQsIGxvY2F0aW9uKToKKyAgICAgICAgIyBlbnN1cmUgdGhhdCB0aGUgcGF0aCBpcyBwcmlu
dGVkIGJlZm9yZSB0aGUKKyAgICAgICAgIyAxc3QgdGVzdCBvZiBhIG1vZHVsZSBzdGFydHMgcnVu
bmluZworICAgICAgICBpZiBzZWxmLnNob3dsb25ndGVzdGluZm86CisgICAgICAgICAgICBsaW5l
ID0gc2VsZi5fbG9jYXRpb25saW5lKG5vZGVpZCwgKmxvY2F0aW9uKQorICAgICAgICAgICAgc2Vs
Zi53cml0ZV9lbnN1cmVfcHJlZml4KGxpbmUsICIiKQorICAgICAgICBlbGlmIHNlbGYuc2hvd2Zz
cGF0aDoKKyAgICAgICAgICAgIGZzaWQgPSBub2RlaWQuc3BsaXQoIjo6IilbMF0KKyAgICAgICAg
ICAgIHNlbGYud3JpdGVfZnNwYXRoX3Jlc3VsdChmc2lkLCAiIikKKworICAgIGRlZiBweXRlc3Rf
cnVudGVzdF9sb2dyZXBvcnQoc2VsZiwgcmVwb3J0KToKKyAgICAgICAgcmVwID0gcmVwb3J0Cisg
ICAgICAgIHJlcyA9IHNlbGYuY29uZmlnLmhvb2sucHl0ZXN0X3JlcG9ydF90ZXN0c3RhdHVzKHJl
cG9ydD1yZXApCisgICAgICAgIGNhdCwgbGV0dGVyLCB3b3JkID0gcmVzCisgICAgICAgIHNlbGYu
c3RhdHMuc2V0ZGVmYXVsdChjYXQsIFtdKS5hcHBlbmQocmVwKQorICAgICAgICBzZWxmLl90ZXN0
c19yYW4gPSBUcnVlCisgICAgICAgIGlmIG5vdCBsZXR0ZXIgYW5kIG5vdCB3b3JkOgorICAgICAg
ICAgICAgIyBwcm9iYWJseSBwYXNzZWQgc2V0dXAvdGVhcmRvd24KKyAgICAgICAgICAgIHJldHVy
bgorICAgICAgICBpZiBzZWxmLnZlcmJvc2l0eSA8PSAwOgorICAgICAgICAgICAgaWYgbm90IGhh
c2F0dHIocmVwLCAnbm9kZScpIGFuZCBzZWxmLnNob3dmc3BhdGg6CisgICAgICAgICAgICAgICAg
c2VsZi53cml0ZV9mc3BhdGhfcmVzdWx0KHJlcC5ub2RlaWQsIGxldHRlcikKKyAgICAgICAgICAg
IGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fdHcud3JpdGUobGV0dGVyKQorICAgICAgICBl
bHNlOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh3b3JkLCB0dXBsZSk6CisgICAgICAgICAg
ICAgICAgd29yZCwgbWFya3VwID0gd29yZAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAg
ICAgICBpZiByZXAucGFzc2VkOgorICAgICAgICAgICAgICAgICAgICBtYXJrdXAgPSB7J2dyZWVu
JzpUcnVlfQorICAgICAgICAgICAgICAgIGVsaWYgcmVwLmZhaWxlZDoKKyAgICAgICAgICAgICAg
ICAgICAgbWFya3VwID0geydyZWQnOlRydWV9CisgICAgICAgICAgICAgICAgZWxpZiByZXAuc2tp
cHBlZDoKKyAgICAgICAgICAgICAgICAgICAgbWFya3VwID0geyd5ZWxsb3cnOlRydWV9CisgICAg
ICAgICAgICBsaW5lID0gc2VsZi5fbG9jYXRpb25saW5lKHJlcC5ub2RlaWQsICpyZXAubG9jYXRp
b24pCisgICAgICAgICAgICBpZiBub3QgaGFzYXR0cihyZXAsICdub2RlJyk6CisgICAgICAgICAg
ICAgICAgc2VsZi53cml0ZV9lbnN1cmVfcHJlZml4KGxpbmUsIHdvcmQsICoqbWFya3VwKQorICAg
ICAgICAgICAgICAgICNzZWxmLl90dy53cml0ZSh3b3JkLCAqKm1hcmt1cCkKKyAgICAgICAgICAg
IGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5lbnN1cmVfbmV3bGluZSgpCisgICAgICAgICAg
ICAgICAgaWYgaGFzYXR0cihyZXAsICdub2RlJyk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYu
X3R3LndyaXRlKCJbJXNdICIgJSByZXAubm9kZS5nYXRld2F5LmlkKQorICAgICAgICAgICAgICAg
IHNlbGYuX3R3LndyaXRlKHdvcmQsICoqbWFya3VwKQorICAgICAgICAgICAgICAgIHNlbGYuX3R3
LndyaXRlKCIgIiArIGxpbmUpCisgICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50ZnNwYXRoID0g
LTIKKworICAgIGRlZiBweXRlc3RfY29sbGVjdGlvbihzZWxmKToKKyAgICAgICAgaWYgbm90IHNl
bGYuaXNhdHR5IGFuZCBzZWxmLmNvbmZpZy5vcHRpb24udmVyYm9zZSA+PSAxOgorICAgICAgICAg
ICAgc2VsZi53cml0ZSgiY29sbGVjdGluZyAuLi4gIiwgYm9sZD1UcnVlKQorCisgICAgZGVmIHB5
dGVzdF9jb2xsZWN0cmVwb3J0KHNlbGYsIHJlcG9ydCk6CisgICAgICAgIGlmIHJlcG9ydC5mYWls
ZWQ6CisgICAgICAgICAgICBzZWxmLnN0YXRzLnNldGRlZmF1bHQoImVycm9yIiwgW10pLmFwcGVu
ZChyZXBvcnQpCisgICAgICAgIGVsaWYgcmVwb3J0LnNraXBwZWQ6CisgICAgICAgICAgICBzZWxm
LnN0YXRzLnNldGRlZmF1bHQoInNraXBwZWQiLCBbXSkuYXBwZW5kKHJlcG9ydCkKKyAgICAgICAg
aXRlbXMgPSBbeCBmb3IgeCBpbiByZXBvcnQucmVzdWx0IGlmIGlzaW5zdGFuY2UoeCwgcHl0ZXN0
Lkl0ZW0pXQorICAgICAgICBzZWxmLl9udW1jb2xsZWN0ZWQgKz0gbGVuKGl0ZW1zKQorICAgICAg
ICBpZiBzZWxmLmlzYXR0eToKKyAgICAgICAgICAgICNzZWxmLndyaXRlX2ZzcGF0aF9yZXN1bHQo
cmVwb3J0Lm5vZGVpZCwgJ0UnKQorICAgICAgICAgICAgc2VsZi5yZXBvcnRfY29sbGVjdCgpCisK
KyAgICBkZWYgcmVwb3J0X2NvbGxlY3Qoc2VsZiwgZmluYWw9RmFsc2UpOgorICAgICAgICBpZiBz
ZWxmLmNvbmZpZy5vcHRpb24udmVyYm9zZSA8IDA6CisgICAgICAgICAgICByZXR1cm4KKworICAg
ICAgICBlcnJvcnMgPSBsZW4oc2VsZi5zdGF0cy5nZXQoJ2Vycm9yJywgW10pKQorICAgICAgICBz
a2lwcGVkID0gbGVuKHNlbGYuc3RhdHMuZ2V0KCdza2lwcGVkJywgW10pKQorICAgICAgICBpZiBm
aW5hbDoKKyAgICAgICAgICAgIGxpbmUgPSAiY29sbGVjdGVkICIKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIGxpbmUgPSAiY29sbGVjdGluZyAiCisgICAgICAgIGxpbmUgKz0gc3RyKHNlbGYu
X251bWNvbGxlY3RlZCkgKyAiIGl0ZW1zIgorICAgICAgICBpZiBlcnJvcnM6CisgICAgICAgICAg
ICBsaW5lICs9ICIgLyAlZCBlcnJvcnMiICUgZXJyb3JzCisgICAgICAgIGlmIHNraXBwZWQ6Cisg
ICAgICAgICAgICBsaW5lICs9ICIgLyAlZCBza2lwcGVkIiAlIHNraXBwZWQKKyAgICAgICAgaWYg
c2VsZi5pc2F0dHk6CisgICAgICAgICAgICBpZiBmaW5hbDoKKyAgICAgICAgICAgICAgICBsaW5l
ICs9ICIgXG4iCisgICAgICAgICAgICBzZWxmLnJld3JpdGUobGluZSwgYm9sZD1UcnVlKQorICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi53cml0ZV9saW5lKGxpbmUpCisKKyAgICBkZWYg
cHl0ZXN0X2NvbGxlY3Rpb25fbW9kaWZ5aXRlbXMoc2VsZik6CisgICAgICAgIHNlbGYucmVwb3J0
X2NvbGxlY3QoVHJ1ZSkKKworICAgIEBweXRlc3QuaG9va2ltcGwodHJ5bGFzdD1UcnVlKQorICAg
IGRlZiBweXRlc3Rfc2Vzc2lvbnN0YXJ0KHNlbGYsIHNlc3Npb24pOgorICAgICAgICBzZWxmLl9z
ZXNzaW9uc3RhcnR0aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgaWYgbm90IHNlbGYuc2hvd2hl
YWRlcjoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLndyaXRlX3NlcCgiPSIsICJ0
ZXN0IHNlc3Npb24gc3RhcnRzIiwgYm9sZD1UcnVlKQorICAgICAgICB2ZXJpbmZvID0gcGxhdGZv
cm0ucHl0aG9uX3ZlcnNpb24oKQorICAgICAgICBtc2cgPSAicGxhdGZvcm0gJXMgLS0gUHl0aG9u
ICVzIiAlIChzeXMucGxhdGZvcm0sIHZlcmluZm8pCisgICAgICAgIGlmIGhhc2F0dHIoc3lzLCAn
cHlweV92ZXJzaW9uX2luZm8nKToKKyAgICAgICAgICAgIHZlcmluZm8gPSAiLiIuam9pbihtYXAo
c3RyLCBzeXMucHlweV92ZXJzaW9uX2luZm9bOjNdKSkKKyAgICAgICAgICAgIG1zZyArPSAiW3B5
cHktJXMtJXNdIiAlICh2ZXJpbmZvLCBzeXMucHlweV92ZXJzaW9uX2luZm9bM10pCisgICAgICAg
IG1zZyArPSAiLCBweXRlc3QtJXMsIHB5LSVzLCBwbHVnZ3ktJXMiICUgKAorICAgICAgICAgICAg
ICAgcHl0ZXN0Ll9fdmVyc2lvbl9fLCBweS5fX3ZlcnNpb25fXywgcGx1Z2d5Ll9fdmVyc2lvbl9f
KQorICAgICAgICBpZiBzZWxmLnZlcmJvc2l0eSA+IDAgb3Igc2VsZi5jb25maWcub3B0aW9uLmRl
YnVnIG9yIFwKKyAgICAgICAgICAgZ2V0YXR0cihzZWxmLmNvbmZpZy5vcHRpb24sICdwYXN0ZWJp
bicsIE5vbmUpOgorICAgICAgICAgICAgbXNnICs9ICIgLS0gIiArIHN0cihzeXMuZXhlY3V0YWJs
ZSkKKyAgICAgICAgc2VsZi53cml0ZV9saW5lKG1zZykKKyAgICAgICAgbGluZXMgPSBzZWxmLmNv
bmZpZy5ob29rLnB5dGVzdF9yZXBvcnRfaGVhZGVyKAorICAgICAgICAgICAgY29uZmlnPXNlbGYu
Y29uZmlnLCBzdGFydGRpcj1zZWxmLnN0YXJ0ZGlyKQorICAgICAgICBsaW5lcy5yZXZlcnNlKCkK
KyAgICAgICAgZm9yIGxpbmUgaW4gZmxhdHRlbihsaW5lcyk6CisgICAgICAgICAgICBzZWxmLndy
aXRlX2xpbmUobGluZSkKKworICAgIGRlZiBweXRlc3RfcmVwb3J0X2hlYWRlcihzZWxmLCBjb25m
aWcpOgorICAgICAgICBpbmlmaWxlID0gIiIKKyAgICAgICAgaWYgY29uZmlnLmluaWZpbGU6Cisg
ICAgICAgICAgICBpbmlmaWxlID0gY29uZmlnLnJvb3RkaXIuYmVzdHJlbHBhdGgoY29uZmlnLmlu
aWZpbGUpCisgICAgICAgIGxpbmVzID0gWyJyb290ZGlyOiAlcywgaW5pZmlsZTogJXMiICUoY29u
ZmlnLnJvb3RkaXIsIGluaWZpbGUpXQorCisgICAgICAgIHBsdWdpbmluZm8gPSBjb25maWcucGx1
Z2lubWFuYWdlci5saXN0X3BsdWdpbl9kaXN0aW5mbygpCisgICAgICAgIGlmIHBsdWdpbmluZm86
CisKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAicGx1Z2luczog
JXMiICUgIiwgIi5qb2luKF9wbHVnaW5fbmFtZXZlcnNpb25zKHBsdWdpbmluZm8pKSkKKyAgICAg
ICAgcmV0dXJuIGxpbmVzCisKKyAgICBkZWYgcHl0ZXN0X2NvbGxlY3Rpb25fZmluaXNoKHNlbGYs
IHNlc3Npb24pOgorICAgICAgICBpZiBzZWxmLmNvbmZpZy5vcHRpb24uY29sbGVjdG9ubHk6Cisg
ICAgICAgICAgICBzZWxmLl9wcmludGNvbGxlY3RlZGl0ZW1zKHNlc3Npb24uaXRlbXMpCisgICAg
ICAgICAgICBpZiBzZWxmLnN0YXRzLmdldCgnZmFpbGVkJyk6CisgICAgICAgICAgICAgICAgc2Vs
Zi5fdHcuc2VwKCIhIiwgImNvbGxlY3Rpb24gZmFpbHVyZXMiKQorICAgICAgICAgICAgICAgIGZv
ciByZXAgaW4gc2VsZi5zdGF0cy5nZXQoJ2ZhaWxlZCcpOgorICAgICAgICAgICAgICAgICAgICBy
ZXAudG90ZXJtaW5hbChzZWxmLl90dykKKyAgICAgICAgICAgICAgICByZXR1cm4gMQorICAgICAg
ICAgICAgcmV0dXJuIDAKKyAgICAgICAgaWYgbm90IHNlbGYuc2hvd2hlYWRlcjoKKyAgICAgICAg
ICAgIHJldHVybgorICAgICAgICAjZm9yIGksIHRlc3RhcmcgaW4gZW51bWVyYXRlKHNlbGYuY29u
ZmlnLmFyZ3MpOgorICAgICAgICAjICAgIHNlbGYud3JpdGVfbGluZSgidGVzdCBwYXRoICVkOiAl
cyIgJShpKzEsIHRlc3RhcmcpKQorCisgICAgZGVmIF9wcmludGNvbGxlY3RlZGl0ZW1zKHNlbGYs
IGl0ZW1zKToKKyAgICAgICAgIyB0byBwcmludCBvdXQgaXRlbXMgYW5kIHRoZWlyIHBhcmVudCBj
b2xsZWN0b3JzCisgICAgICAgICMgd2UgdGFrZSBjYXJlIHRvIGxlYXZlIG91dCBJbnN0YW5jZXMg
YWthICgpCisgICAgICAgICMgYmVjYXVzZSBsYXRlciB2ZXJzaW9ucyBhcmUgZ29pbmcgdG8gZ2V0
IHJpZCBvZiB0aGVtIGFueXdheQorICAgICAgICBpZiBzZWxmLmNvbmZpZy5vcHRpb24udmVyYm9z
ZSA8IDA6CisgICAgICAgICAgICBpZiBzZWxmLmNvbmZpZy5vcHRpb24udmVyYm9zZSA8IC0xOgor
ICAgICAgICAgICAgICAgIGNvdW50cyA9IHt9CisgICAgICAgICAgICAgICAgZm9yIGl0ZW0gaW4g
aXRlbXM6CisgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBpdGVtLm5vZGVpZC5zcGxpdCgnOjon
LCAxKVswXQorICAgICAgICAgICAgICAgICAgICBjb3VudHNbbmFtZV0gPSBjb3VudHMuZ2V0KG5h
bWUsIDApICsgMQorICAgICAgICAgICAgICAgIGZvciBuYW1lLCBjb3VudCBpbiBzb3J0ZWQoY291
bnRzLml0ZW1zKCkpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl90dy5saW5lKCIlczogJWQi
ICUgKG5hbWUsIGNvdW50KSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZm9y
IGl0ZW0gaW4gaXRlbXM6CisgICAgICAgICAgICAgICAgICAgIG5vZGVpZCA9IGl0ZW0ubm9kZWlk
CisgICAgICAgICAgICAgICAgICAgIG5vZGVpZCA9IG5vZGVpZC5yZXBsYWNlKCI6OigpOjoiLCAi
OjoiKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl90dy5saW5lKG5vZGVpZCkKKyAgICAgICAg
ICAgIHJldHVybgorICAgICAgICBzdGFjayA9IFtdCisgICAgICAgIGluZGVudCA9ICIiCisgICAg
ICAgIGZvciBpdGVtIGluIGl0ZW1zOgorICAgICAgICAgICAgbmVlZGVkX2NvbGxlY3RvcnMgPSBp
dGVtLmxpc3RjaGFpbigpWzE6XSAjIHN0cmlwIHJvb3Qgbm9kZQorICAgICAgICAgICAgd2hpbGUg
c3RhY2s6CisgICAgICAgICAgICAgICAgaWYgc3RhY2sgPT0gbmVlZGVkX2NvbGxlY3RvcnNbOmxl
bihzdGFjayldOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIHN0
YWNrLnBvcCgpCisgICAgICAgICAgICBmb3IgY29sIGluIG5lZWRlZF9jb2xsZWN0b3JzW2xlbihz
dGFjayk6XToKKyAgICAgICAgICAgICAgICBzdGFjay5hcHBlbmQoY29sKQorICAgICAgICAgICAg
ICAgICNpZiBjb2wubmFtZSA9PSAiKCkiOgorICAgICAgICAgICAgICAgICMgICAgY29udGludWUK
KyAgICAgICAgICAgICAgICBpbmRlbnQgPSAobGVuKHN0YWNrKSAtIDEpICogIiAgIgorICAgICAg
ICAgICAgICAgIHNlbGYuX3R3LmxpbmUoIiVzJXMiICUgKGluZGVudCwgY29sKSkKKworICAgIEBw
eXRlc3QuaG9va2ltcGwoaG9va3dyYXBwZXI9VHJ1ZSkKKyAgICBkZWYgcHl0ZXN0X3Nlc3Npb25m
aW5pc2goc2VsZiwgZXhpdHN0YXR1cyk6CisgICAgICAgIG91dGNvbWUgPSB5aWVsZAorICAgICAg
ICBvdXRjb21lLmdldF9yZXN1bHQoKQorICAgICAgICBzZWxmLl90dy5saW5lKCIiKQorICAgICAg
ICBzdW1tYXJ5X2V4aXRfY29kZXMgPSAoCisgICAgICAgICAgICBFWElUX09LLCBFWElUX1RFU1RT
RkFJTEVELCBFWElUX0lOVEVSUlVQVEVELCBFWElUX1VTQUdFRVJST1IsCisgICAgICAgICAgICBF
WElUX05PVEVTVFNDT0xMRUNURUQpCisgICAgICAgIGlmIGV4aXRzdGF0dXMgaW4gc3VtbWFyeV9l
eGl0X2NvZGVzOgorICAgICAgICAgICAgc2VsZi5jb25maWcuaG9vay5weXRlc3RfdGVybWluYWxf
c3VtbWFyeSh0ZXJtaW5hbHJlcG9ydGVyPXNlbGYpCisgICAgICAgICAgICBzZWxmLnN1bW1hcnlf
ZXJyb3JzKCkKKyAgICAgICAgICAgIHNlbGYuc3VtbWFyeV9mYWlsdXJlcygpCisgICAgICAgICAg
ICBzZWxmLnN1bW1hcnlfd2FybmluZ3MoKQorICAgICAgICAgICAgc2VsZi5zdW1tYXJ5X3Bhc3Nl
cygpCisgICAgICAgIGlmIGV4aXRzdGF0dXMgPT0gRVhJVF9JTlRFUlJVUFRFRDoKKyAgICAgICAg
ICAgIHNlbGYuX3JlcG9ydF9rZXlib2FyZGludGVycnVwdCgpCisgICAgICAgICAgICBkZWwgc2Vs
Zi5fa2V5Ym9hcmRpbnRlcnJ1cHRfbWVtbworICAgICAgICBzZWxmLnN1bW1hcnlfZGVzZWxlY3Rl
ZCgpCisgICAgICAgIHNlbGYuc3VtbWFyeV9zdGF0cygpCisKKyAgICBkZWYgcHl0ZXN0X2tleWJv
YXJkX2ludGVycnVwdChzZWxmLCBleGNpbmZvKToKKyAgICAgICAgc2VsZi5fa2V5Ym9hcmRpbnRl
cnJ1cHRfbWVtbyA9IGV4Y2luZm8uZ2V0cmVwcihmdW5jYXJncz1UcnVlKQorCisgICAgZGVmIHB5
dGVzdF91bmNvbmZpZ3VyZShzZWxmKToKKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAnX2tleWJv
YXJkaW50ZXJydXB0X21lbW8nKToKKyAgICAgICAgICAgIHNlbGYuX3JlcG9ydF9rZXlib2FyZGlu
dGVycnVwdCgpCisKKyAgICBkZWYgX3JlcG9ydF9rZXlib2FyZGludGVycnVwdChzZWxmKToKKyAg
ICAgICAgZXhjcmVwciA9IHNlbGYuX2tleWJvYXJkaW50ZXJydXB0X21lbW8KKyAgICAgICAgbXNn
ID0gZXhjcmVwci5yZXByY3Jhc2gubWVzc2FnZQorICAgICAgICBzZWxmLndyaXRlX3NlcCgiISIs
IG1zZykKKyAgICAgICAgaWYgIktleWJvYXJkSW50ZXJydXB0IiBpbiBtc2c6CisgICAgICAgICAg
ICBpZiBzZWxmLmNvbmZpZy5vcHRpb24uZnVsbHRyYWNlOgorICAgICAgICAgICAgICAgIGV4Y3Jl
cHIudG90ZXJtaW5hbChzZWxmLl90dykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAg
ICAgc2VsZi5fdHcubGluZSgidG8gc2hvdyBhIGZ1bGwgdHJhY2ViYWNrIG9uIEtleWJvYXJkSW50
ZXJydXB0IHVzZSAtLWZ1bGx0cmFjZSIsIHllbGxvdz1UcnVlKQorICAgICAgICAgICAgICAgIGV4
Y3JlcHIucmVwcmNyYXNoLnRvdGVybWluYWwoc2VsZi5fdHcpCisKKyAgICBkZWYgX2xvY2F0aW9u
bGluZShzZWxmLCBub2RlaWQsIGZzcGF0aCwgbGluZW5vLCBkb21haW4pOgorICAgICAgICBkZWYg
bWtyZWwobm9kZWlkKToKKyAgICAgICAgICAgIGxpbmUgPSBzZWxmLmNvbmZpZy5jd2RfcmVsYXRp
dmVfbm9kZWlkKG5vZGVpZCkKKyAgICAgICAgICAgIGlmIGRvbWFpbiBhbmQgbGluZS5lbmRzd2l0
aChkb21haW4pOgorICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lWzotbGVuKGRvbWFpbildCisg
ICAgICAgICAgICAgICAgbCA9IGRvbWFpbi5zcGxpdCgiWyIpCisgICAgICAgICAgICAgICAgbFsw
XSA9IGxbMF0ucmVwbGFjZSgnLicsICc6OicpICAjIGRvbid0IHJlcGxhY2UgJy4nIGluIHBhcmFt
cworICAgICAgICAgICAgICAgIGxpbmUgKz0gIlsiLmpvaW4obCkKKyAgICAgICAgICAgIHJldHVy
biBsaW5lCisgICAgICAgICMgY29sbGVjdF9mc3BhdGggY29tZXMgZnJvbSB0ZXN0aWQgd2hpY2gg
aGFzIGEgIi8iLW5vcm1hbGl6ZWQgcGF0aAorCisgICAgICAgIGlmIGZzcGF0aDoKKyAgICAgICAg
ICAgIHJlcyA9IG1rcmVsKG5vZGVpZCkucmVwbGFjZSgiOjooKSIsICIiKSAgIyBwYXJlbnMtbm9y
bWFsaXphdGlvbgorICAgICAgICAgICAgaWYgbm9kZWlkLnNwbGl0KCI6OiIpWzBdICE9IGZzcGF0
aC5yZXBsYWNlKCJcXCIsICIvIik6CisgICAgICAgICAgICAgICAgcmVzICs9ICIgPC0gIiArIHNl
bGYuc3RhcnRkaXIuYmVzdHJlbHBhdGgoZnNwYXRoKQorICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgcmVzID0gIltsb2NhdGlvbl0iCisgICAgICAgIHJldHVybiByZXMgKyAiICIKKworICAgIGRl
ZiBfZ2V0ZmFpbHVyZWhlYWRsaW5lKHNlbGYsIHJlcCk6CisgICAgICAgIGlmIGhhc2F0dHIocmVw
LCAnbG9jYXRpb24nKToKKyAgICAgICAgICAgIGZzcGF0aCwgbGluZW5vLCBkb21haW4gPSByZXAu
bG9jYXRpb24KKyAgICAgICAgICAgIHJldHVybiBkb21haW4KKyAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgIHJldHVybiAidGVzdCBzZXNzaW9uIiAjIFhYWD8KKworICAgIGRlZiBfZ2V0Y3Jhc2hs
aW5lKHNlbGYsIHJlcCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzdHIocmVw
LmxvbmdyZXByLnJlcHJjcmFzaCkKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAg
ICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybiBzdHIocmVwLmxvbmdyZXByKVs6
NTBdCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAg
cmV0dXJuICIiCisKKyAgICAjCisgICAgIyBzdW1tYXJpZXMgZm9yIHNlc3Npb25maW5pc2gKKyAg
ICAjCisgICAgZGVmIGdldHJlcG9ydHMoc2VsZiwgbmFtZSk6CisgICAgICAgIGwgPSBbXQorICAg
ICAgICBmb3IgeCBpbiBzZWxmLnN0YXRzLmdldChuYW1lLCBbXSk6CisgICAgICAgICAgICBpZiBu
b3QgaGFzYXR0cih4LCAnX3BkYnNob3duJyk6CisgICAgICAgICAgICAgICAgbC5hcHBlbmQoeCkK
KyAgICAgICAgcmV0dXJuIGwKKworICAgIGRlZiBzdW1tYXJ5X3dhcm5pbmdzKHNlbGYpOgorICAg
ICAgICBpZiBzZWxmLmhhc29wdCgidyIpOgorICAgICAgICAgICAgd2FybmluZ3MgPSBzZWxmLnN0
YXRzLmdldCgid2FybmluZ3MiKQorICAgICAgICAgICAgaWYgbm90IHdhcm5pbmdzOgorICAgICAg
ICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgc2VsZi53cml0ZV9zZXAoIj0iLCAicHl0ZXN0
LXdhcm5pbmcgc3VtbWFyeSIpCisgICAgICAgICAgICBmb3IgdyBpbiB3YXJuaW5nczoKKyAgICAg
ICAgICAgICAgICBzZWxmLl90dy5saW5lKCJXJXMgJXMgJXMiICUgKHcuY29kZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHcuZnNsb2NhdGlvbiwgdy5tZXNzYWdlKSkKKworICAgIGRl
ZiBzdW1tYXJ5X3Bhc3NlcyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5jb25maWcub3B0aW9uLnRi
c3R5bGUgIT0gIm5vIjoKKyAgICAgICAgICAgIGlmIHNlbGYuaGFzb3B0KCJQIik6CisgICAgICAg
ICAgICAgICAgcmVwb3J0cyA9IHNlbGYuZ2V0cmVwb3J0cygncGFzc2VkJykKKyAgICAgICAgICAg
ICAgICBpZiBub3QgcmVwb3J0czoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAg
ICAgICAgICAgc2VsZi53cml0ZV9zZXAoIj0iLCAiUEFTU0VTIikKKyAgICAgICAgICAgICAgICBm
b3IgcmVwIGluIHJlcG9ydHM6CisgICAgICAgICAgICAgICAgICAgIG1zZyA9IHNlbGYuX2dldGZh
aWx1cmVoZWFkbGluZShyZXApCisgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGVfc2VwKCJf
IiwgbXNnKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9vdXRyZXBfc3VtbWFyeShyZXApCisK
KyAgICBkZWYgc3VtbWFyeV9mYWlsdXJlcyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5jb25maWcu
b3B0aW9uLnRic3R5bGUgIT0gIm5vIjoKKyAgICAgICAgICAgIHJlcG9ydHMgPSBzZWxmLmdldHJl
cG9ydHMoJ2ZhaWxlZCcpCisgICAgICAgICAgICBpZiBub3QgcmVwb3J0czoKKyAgICAgICAgICAg
ICAgICByZXR1cm4KKyAgICAgICAgICAgIHNlbGYud3JpdGVfc2VwKCI9IiwgIkZBSUxVUkVTIikK
KyAgICAgICAgICAgIGZvciByZXAgaW4gcmVwb3J0czoKKyAgICAgICAgICAgICAgICBpZiBzZWxm
LmNvbmZpZy5vcHRpb24udGJzdHlsZSA9PSAibGluZSI6CisgICAgICAgICAgICAgICAgICAgIGxp
bmUgPSBzZWxmLl9nZXRjcmFzaGxpbmUocmVwKQorICAgICAgICAgICAgICAgICAgICBzZWxmLndy
aXRlX2xpbmUobGluZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAg
ICBtc2cgPSBzZWxmLl9nZXRmYWlsdXJlaGVhZGxpbmUocmVwKQorICAgICAgICAgICAgICAgICAg
ICBtYXJrdXAgPSB7J3JlZCc6IFRydWUsICdib2xkJzogVHJ1ZX0KKyAgICAgICAgICAgICAgICAg
ICAgc2VsZi53cml0ZV9zZXAoIl8iLCBtc2csICoqbWFya3VwKQorICAgICAgICAgICAgICAgICAg
ICBzZWxmLl9vdXRyZXBfc3VtbWFyeShyZXApCisKKyAgICBkZWYgc3VtbWFyeV9lcnJvcnMoc2Vs
Zik6CisgICAgICAgIGlmIHNlbGYuY29uZmlnLm9wdGlvbi50YnN0eWxlICE9ICJubyI6CisgICAg
ICAgICAgICByZXBvcnRzID0gc2VsZi5nZXRyZXBvcnRzKCdlcnJvcicpCisgICAgICAgICAgICBp
ZiBub3QgcmVwb3J0czoKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHNlbGYu
d3JpdGVfc2VwKCI9IiwgIkVSUk9SUyIpCisgICAgICAgICAgICBmb3IgcmVwIGluIHNlbGYuc3Rh
dHNbJ2Vycm9yJ106CisgICAgICAgICAgICAgICAgbXNnID0gc2VsZi5fZ2V0ZmFpbHVyZWhlYWRs
aW5lKHJlcCkKKyAgICAgICAgICAgICAgICBpZiBub3QgaGFzYXR0cihyZXAsICd3aGVuJyk6Cisg
ICAgICAgICAgICAgICAgICAgICMgY29sbGVjdAorICAgICAgICAgICAgICAgICAgICBtc2cgPSAi
RVJST1IgY29sbGVjdGluZyAiICsgbXNnCisgICAgICAgICAgICAgICAgZWxpZiByZXAud2hlbiA9
PSAic2V0dXAiOgorICAgICAgICAgICAgICAgICAgICBtc2cgPSAiRVJST1IgYXQgc2V0dXAgb2Yg
IiArIG1zZworICAgICAgICAgICAgICAgIGVsaWYgcmVwLndoZW4gPT0gInRlYXJkb3duIjoKKyAg
ICAgICAgICAgICAgICAgICAgbXNnID0gIkVSUk9SIGF0IHRlYXJkb3duIG9mICIgKyBtc2cKKyAg
ICAgICAgICAgICAgICBzZWxmLndyaXRlX3NlcCgiXyIsIG1zZykKKyAgICAgICAgICAgICAgICBz
ZWxmLl9vdXRyZXBfc3VtbWFyeShyZXApCisKKyAgICBkZWYgX291dHJlcF9zdW1tYXJ5KHNlbGYs
IHJlcCk6CisgICAgICAgIHJlcC50b3Rlcm1pbmFsKHNlbGYuX3R3KQorICAgICAgICBmb3Igc2Vj
bmFtZSwgY29udGVudCBpbiByZXAuc2VjdGlvbnM6CisgICAgICAgICAgICBzZWxmLl90dy5zZXAo
Ii0iLCBzZWNuYW1lKQorICAgICAgICAgICAgaWYgY29udGVudFstMTpdID09ICJcbiI6CisgICAg
ICAgICAgICAgICAgY29udGVudCA9IGNvbnRlbnRbOi0xXQorICAgICAgICAgICAgc2VsZi5fdHcu
bGluZShjb250ZW50KQorCisgICAgZGVmIHN1bW1hcnlfc3RhdHMoc2VsZik6CisgICAgICAgIHNl
c3Npb25fZHVyYXRpb24gPSB0aW1lLnRpbWUoKSAtIHNlbGYuX3Nlc3Npb25zdGFydHRpbWUKKyAg
ICAgICAgKGxpbmUsIGNvbG9yKSA9IGJ1aWxkX3N1bW1hcnlfc3RhdHNfbGluZShzZWxmLnN0YXRz
KQorICAgICAgICBtc2cgPSAiJXMgaW4gJS4yZiBzZWNvbmRzIiAlIChsaW5lLCBzZXNzaW9uX2R1
cmF0aW9uKQorICAgICAgICBtYXJrdXAgPSB7Y29sb3I6IFRydWUsICdib2xkJzogVHJ1ZX0KKwor
ICAgICAgICBpZiBzZWxmLnZlcmJvc2l0eSA+PSAwOgorICAgICAgICAgICAgc2VsZi53cml0ZV9z
ZXAoIj0iLCBtc2csICoqbWFya3VwKQorICAgICAgICBpZiBzZWxmLnZlcmJvc2l0eSA9PSAtMToK
KyAgICAgICAgICAgIHNlbGYud3JpdGVfbGluZShtc2csICoqbWFya3VwKQorCisgICAgZGVmIHN1
bW1hcnlfZGVzZWxlY3RlZChzZWxmKToKKyAgICAgICAgaWYgJ2Rlc2VsZWN0ZWQnIGluIHNlbGYu
c3RhdHM6CisgICAgICAgICAgICBsID0gW10KKyAgICAgICAgICAgIGsgPSBzZWxmLmNvbmZpZy5v
cHRpb24ua2V5d29yZAorICAgICAgICAgICAgaWYgazoKKyAgICAgICAgICAgICAgICBsLmFwcGVu
ZCgiLWslcyIgJSBrKQorICAgICAgICAgICAgbSA9IHNlbGYuY29uZmlnLm9wdGlvbi5tYXJrZXhw
cgorICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICBsLmFwcGVuZCgiLW0gJXIiICUg
bSkKKyAgICAgICAgICAgIGlmIGw6CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZV9zZXAoIj0i
LCAiJWQgdGVzdHMgZGVzZWxlY3RlZCBieSAlciIgJSAoCisgICAgICAgICAgICAgICAgICAgIGxl
bihzZWxmLnN0YXRzWydkZXNlbGVjdGVkJ10pLCAiICIuam9pbihsKSksIGJvbGQ9VHJ1ZSkKKwor
ZGVmIHJlcHJfcHl0aG9udmVyc2lvbih2PU5vbmUpOgorICAgIGlmIHYgaXMgTm9uZToKKyAgICAg
ICAgdiA9IHN5cy52ZXJzaW9uX2luZm8KKyAgICB0cnk6CisgICAgICAgIHJldHVybiAiJXMuJXMu
JXMtJXMtJXMiICUgdgorICAgIGV4Y2VwdCAoVHlwZUVycm9yLCBWYWx1ZUVycm9yKToKKyAgICAg
ICAgcmV0dXJuIHN0cih2KQorCitkZWYgZmxhdHRlbihsKToKKyAgICBmb3IgeCBpbiBsOgorICAg
ICAgICBpZiBpc2luc3RhbmNlKHgsIChsaXN0LCB0dXBsZSkpOgorICAgICAgICAgICAgZm9yIHkg
aW4gZmxhdHRlbih4KToKKyAgICAgICAgICAgICAgICB5aWVsZCB5CisgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICB5aWVsZCB4CisKK2RlZiBidWlsZF9zdW1tYXJ5X3N0YXRzX2xpbmUoc3RhdHMp
OgorICAgIGtleXMgPSAoImZhaWxlZCBwYXNzZWQgc2tpcHBlZCBkZXNlbGVjdGVkICIKKyAgICAg
ICAgICAgInhmYWlsZWQgeHBhc3NlZCB3YXJuaW5ncyBlcnJvciIpLnNwbGl0KCkKKyAgICBrZXlf
dHJhbnNsYXRpb24gPSB7J3dhcm5pbmdzJzogJ3B5dGVzdC13YXJuaW5ncyd9CisgICAgdW5rbm93
bl9rZXlfc2VlbiA9IEZhbHNlCisgICAgZm9yIGtleSBpbiBzdGF0cy5rZXlzKCk6CisgICAgICAg
IGlmIGtleSBub3QgaW4ga2V5czoKKyAgICAgICAgICAgIGlmIGtleTogIyBzZXR1cC90ZWFyZG93
biByZXBvcnRzIGhhdmUgYW4gZW1wdHkga2V5LCBpZ25vcmUgdGhlbQorICAgICAgICAgICAgICAg
IGtleXMuYXBwZW5kKGtleSkKKyAgICAgICAgICAgICAgICB1bmtub3duX2tleV9zZWVuID0gVHJ1
ZQorICAgIHBhcnRzID0gW10KKyAgICBmb3Iga2V5IGluIGtleXM6CisgICAgICAgIHZhbCA9IHN0
YXRzLmdldChrZXksIE5vbmUpCisgICAgICAgIGlmIHZhbDoKKyAgICAgICAgICAgIGtleV9uYW1l
ID0ga2V5X3RyYW5zbGF0aW9uLmdldChrZXksIGtleSkKKyAgICAgICAgICAgIHBhcnRzLmFwcGVu
ZCgiJWQgJXMiICUgKGxlbih2YWwpLCBrZXlfbmFtZSkpCisKKyAgICBpZiBwYXJ0czoKKyAgICAg
ICAgbGluZSA9ICIsICIuam9pbihwYXJ0cykKKyAgICBlbHNlOgorICAgICAgICBsaW5lID0gIm5v
IHRlc3RzIHJhbiIKKworICAgIGlmICdmYWlsZWQnIGluIHN0YXRzIG9yICdlcnJvcicgaW4gc3Rh
dHM6CisgICAgICAgIGNvbG9yID0gJ3JlZCcKKyAgICBlbGlmICd3YXJuaW5ncycgaW4gc3RhdHMg
b3IgdW5rbm93bl9rZXlfc2VlbjoKKyAgICAgICAgY29sb3IgPSAneWVsbG93JworICAgIGVsaWYg
J3Bhc3NlZCcgaW4gc3RhdHM6CisgICAgICAgIGNvbG9yID0gJ2dyZWVuJworICAgIGVsc2U6Cisg
ICAgICAgIGNvbG9yID0gJ3llbGxvdycKKworICAgIHJldHVybiAobGluZSwgY29sb3IpCisKKwor
ZGVmIF9wbHVnaW5fbmFtZXZlcnNpb25zKHBsdWdpbmluZm8pOgorICAgIGwgPSBbXQorICAgIGZv
ciBwbHVnaW4sIGRpc3QgaW4gcGx1Z2luaW5mbzoKKyAgICAgICAgIyBnZXRzIHVzIG5hbWUgYW5k
IHZlcnNpb24hCisgICAgICAgIG5hbWUgPSAne2Rpc3QucHJvamVjdF9uYW1lfS17ZGlzdC52ZXJz
aW9ufScuZm9ybWF0KGRpc3Q9ZGlzdCkKKyAgICAgICAgIyBxdWVzdGlvbmFibGUgY29udmVuaWVu
Y2UsIGJ1dCBpdCBrZWVwcyB0aGluZ3Mgc2hvcnQKKyAgICAgICAgaWYgbmFtZS5zdGFydHN3aXRo
KCJweXRlc3QtIik6CisgICAgICAgICAgICBuYW1lID0gbmFtZVs3Ol0KKyAgICAgICAgIyB3ZSBk
ZWNpZGVkIHRvIHByaW50IHB5dGhvbiBwYWNrYWdlIG5hbWVzCisgICAgICAgICMgdGhleSBjYW4g
aGF2ZSBtb3JlIHRoYW4gb25lIHBsdWdpbgorICAgICAgICBpZiBuYW1lIG5vdCBpbiBsOgorICAg
ICAgICAgICAgbC5hcHBlbmQobmFtZSkKKyAgICByZXR1cm4gbApkaWZmIC0tZ2l0IGEvV2ViRHJp
dmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L3RtcGRpci5weSBiL1dl
YkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC90bXBkaXIucHkK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmViYzQ4ZGJlNWIyCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9f
cHl0ZXN0L3RtcGRpci5weQpAQCAtMCwwICsxLDEyMyBAQAorIiIiIHN1cHBvcnQgZm9yIHByb3Zp
ZGluZyB0ZW1wb3JhcnkgZGlyZWN0b3JpZXMgdG8gdGVzdCBmdW5jdGlvbnMuICAiIiIKK2ltcG9y
dCByZQorCitpbXBvcnQgcHl0ZXN0CitpbXBvcnQgcHkKK2Zyb20gX3B5dGVzdC5tb25rZXlwYXRj
aCBpbXBvcnQgbW9ua2V5cGF0Y2gKKworCitjbGFzcyBUZW1wZGlyRmFjdG9yeToKKyAgICAiIiJG
YWN0b3J5IGZvciB0ZW1wb3JhcnkgZGlyZWN0b3JpZXMgdW5kZXIgdGhlIGNvbW1vbiBiYXNlIHRl
bXAgZGlyZWN0b3J5LgorCisgICAgVGhlIGJhc2UgZGlyZWN0b3J5IGNhbiBiZSBjb25maWd1cmVk
IHVzaW5nIHRoZSBgYC0tYmFzZXRlbXBgYCBvcHRpb24uCisgICAgIiIiCisKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgY29uZmlnKToKKyAgICAgICAgc2VsZi5jb25maWcgPSBjb25maWcKKyAgICAg
ICAgc2VsZi50cmFjZSA9IGNvbmZpZy50cmFjZS5nZXQoInRtcGRpciIpCisKKyAgICBkZWYgZW5z
dXJldGVtcChzZWxmLCBzdHJpbmcsIGRpcj0xKToKKyAgICAgICAgIiIiIChkZXByZWNhdGVkKSBy
ZXR1cm4gdGVtcG9yYXJ5IGRpcmVjdG9yeSBwYXRoIHdpdGgKKyAgICAgICAgICAgIHRoZSBnaXZl
biBzdHJpbmcgYXMgdGhlIHRyYWlsaW5nIHBhcnQuICBJdCBpcyB1c3VhbGx5CisgICAgICAgICAg
ICBiZXR0ZXIgdG8gdXNlIHRoZSAndG1wZGlyJyBmdW5jdGlvbiBhcmd1bWVudCB3aGljaAorICAg
ICAgICAgICAgcHJvdmlkZXMgYW4gZW1wdHkgdW5pcXVlLXBlci10ZXN0LWludm9jYXRpb24gZGly
ZWN0b3J5CisgICAgICAgICAgICBhbmQgaXMgZ3VhcmFudGVlZCB0byBiZSBlbXB0eS4KKyAgICAg
ICAgIiIiCisgICAgICAgICNweS5sb2cuX2FwaXdhcm4oIj4xLjEiLCAidXNlIHRtcGRpciBmdW5j
dGlvbiBhcmd1bWVudCIpCisgICAgICAgIHJldHVybiBzZWxmLmdldGJhc2V0ZW1wKCkuZW5zdXJl
KHN0cmluZywgZGlyPWRpcikKKworICAgIGRlZiBta3RlbXAoc2VsZiwgYmFzZW5hbWUsIG51bWJl
cmVkPVRydWUpOgorICAgICAgICAiIiJDcmVhdGUgYSBzdWJkaXJlY3Rvcnkgb2YgdGhlIGJhc2Ug
dGVtcG9yYXJ5IGRpcmVjdG9yeSBhbmQgcmV0dXJuIGl0LgorICAgICAgICBJZiBgYG51bWJlcmVk
YGAsIGVuc3VyZSB0aGUgZGlyZWN0b3J5IGlzIHVuaXF1ZSBieSBhZGRpbmcgYSBudW1iZXIKKyAg
ICAgICAgcHJlZml4IGdyZWF0ZXIgdGhhbiBhbnkgZXhpc3Rpbmcgb25lLgorICAgICAgICAiIiIK
KyAgICAgICAgYmFzZXRlbXAgPSBzZWxmLmdldGJhc2V0ZW1wKCkKKyAgICAgICAgaWYgbm90IG51
bWJlcmVkOgorICAgICAgICAgICAgcCA9IGJhc2V0ZW1wLm1rZGlyKGJhc2VuYW1lKQorICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgcCA9IHB5LnBhdGgubG9jYWwubWFrZV9udW1iZXJlZF9kaXIo
cHJlZml4PWJhc2VuYW1lLAorICAgICAgICAgICAgICAgIGtlZXA9MCwgcm9vdGRpcj1iYXNldGVt
cCwgbG9ja190aW1lb3V0PU5vbmUpCisgICAgICAgIHNlbGYudHJhY2UoIm1rdGVtcCIsIHApCisg
ICAgICAgIHJldHVybiBwCisKKyAgICBkZWYgZ2V0YmFzZXRlbXAoc2VsZik6CisgICAgICAgICIi
IiByZXR1cm4gYmFzZSB0ZW1wb3JhcnkgZGlyZWN0b3J5LiAiIiIKKyAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgcmV0dXJuIHNlbGYuX2Jhc2V0ZW1wCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVF
cnJvcjoKKyAgICAgICAgICAgIGJhc2V0ZW1wID0gc2VsZi5jb25maWcub3B0aW9uLmJhc2V0ZW1w
CisgICAgICAgICAgICBpZiBiYXNldGVtcDoKKyAgICAgICAgICAgICAgICBiYXNldGVtcCA9IHB5
LnBhdGgubG9jYWwoYmFzZXRlbXApCisgICAgICAgICAgICAgICAgaWYgYmFzZXRlbXAuY2hlY2so
KToKKyAgICAgICAgICAgICAgICAgICAgYmFzZXRlbXAucmVtb3ZlKCkKKyAgICAgICAgICAgICAg
ICBiYXNldGVtcC5ta2RpcigpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHRl
bXByb290ID0gcHkucGF0aC5sb2NhbC5nZXRfdGVtcHJvb3QoKQorICAgICAgICAgICAgICAgIHVz
ZXIgPSBnZXRfdXNlcigpCisgICAgICAgICAgICAgICAgaWYgdXNlcjoKKyAgICAgICAgICAgICAg
ICAgICAgIyB1c2UgYSBzdWItZGlyZWN0b3J5IGluIHRoZSB0ZW1wcm9vdCB0byBzcGVlZC11cAor
ICAgICAgICAgICAgICAgICAgICAjIG1ha2VfbnVtYmVyZWRfZGlyKCkgY2FsbAorICAgICAgICAg
ICAgICAgICAgICByb290ZGlyID0gdGVtcHJvb3Quam9pbigncHl0ZXN0LW9mLSVzJyAlIHVzZXIp
CisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcm9vdGRpciA9IHRl
bXByb290CisgICAgICAgICAgICAgICAgcm9vdGRpci5lbnN1cmUoZGlyPTEpCisgICAgICAgICAg
ICAgICAgYmFzZXRlbXAgPSBweS5wYXRoLmxvY2FsLm1ha2VfbnVtYmVyZWRfZGlyKHByZWZpeD0n
cHl0ZXN0LScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJvb3RkaXI9cm9vdGRpcikKKyAgICAgICAgICAgIHNlbGYuX2Jhc2V0ZW1w
ID0gdCA9IGJhc2V0ZW1wLnJlYWxwYXRoKCkKKyAgICAgICAgICAgIHNlbGYudHJhY2UoIm5ldyBi
YXNldGVtcCIsIHQpCisgICAgICAgICAgICByZXR1cm4gdAorCisgICAgZGVmIGZpbmlzaChzZWxm
KToKKyAgICAgICAgc2VsZi50cmFjZSgiZmluaXNoIikKKworCitkZWYgZ2V0X3VzZXIoKToKKyAg
ICAiIiJSZXR1cm4gdGhlIGN1cnJlbnQgdXNlciBuYW1lLCBvciBOb25lIGlmIGdldHVzZXIoKSBk
b2VzIG5vdCB3b3JrCisgICAgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgKHNlZSAjMTAxMCku
CisgICAgIiIiCisgICAgaW1wb3J0IGdldHBhc3MKKyAgICB0cnk6CisgICAgICAgIHJldHVybiBn
ZXRwYXNzLmdldHVzZXIoKQorICAgIGV4Y2VwdCAoSW1wb3J0RXJyb3IsIEtleUVycm9yKToKKyAg
ICAgICAgcmV0dXJuIE5vbmUKKworIyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5CitUZW1wZGlySGFu
ZGxlciA9IFRlbXBkaXJGYWN0b3J5CisKKworZGVmIHB5dGVzdF9jb25maWd1cmUoY29uZmlnKToK
KyAgICAiIiJDcmVhdGUgYSBUZW1wZGlyRmFjdG9yeSBhbmQgYXR0YWNoIGl0IHRvIHRoZSBjb25m
aWcgb2JqZWN0LgorCisgICAgVGhpcyBpcyB0byBjb21wbHkgd2l0aCBleGlzdGluZyBwbHVnaW5z
IHdoaWNoIGV4cGVjdCB0aGUgaGFuZGxlciB0byBiZQorICAgIGF2YWlsYWJsZSBhdCBweXRlc3Rf
Y29uZmlndXJlIHRpbWUsIGJ1dCBpZGVhbGx5IHNob3VsZCBiZSBtb3ZlZCBlbnRpcmVseQorICAg
IHRvIHRoZSB0bXBkaXJfZmFjdG9yeSBzZXNzaW9uIGZpeHR1cmUuCisgICAgIiIiCisgICAgbXAg
PSBtb25rZXlwYXRjaCgpCisgICAgdCA9IFRlbXBkaXJGYWN0b3J5KGNvbmZpZykKKyAgICBjb25m
aWcuX2NsZWFudXAuZXh0ZW5kKFttcC51bmRvLCB0LmZpbmlzaF0pCisgICAgbXAuc2V0YXR0cihj
b25maWcsICdfdG1wZGlyaGFuZGxlcicsIHQsIHJhaXNpbmc9RmFsc2UpCisgICAgbXAuc2V0YXR0
cihweXRlc3QsICdlbnN1cmV0ZW1wJywgdC5lbnN1cmV0ZW1wLCByYWlzaW5nPUZhbHNlKQorCisK
K0BweXRlc3QuZml4dHVyZShzY29wZT0nc2Vzc2lvbicpCitkZWYgdG1wZGlyX2ZhY3RvcnkocmVx
dWVzdCk6CisgICAgIiIiUmV0dXJuIGEgVGVtcGRpckZhY3RvcnkgaW5zdGFuY2UgZm9yIHRoZSB0
ZXN0IHNlc3Npb24uCisgICAgIiIiCisgICAgcmV0dXJuIHJlcXVlc3QuY29uZmlnLl90bXBkaXJo
YW5kbGVyCisKKworQHB5dGVzdC5maXh0dXJlCitkZWYgdG1wZGlyKHJlcXVlc3QsIHRtcGRpcl9m
YWN0b3J5KToKKyAgICAiIiJyZXR1cm4gYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IHBhdGggb2JqZWN0
CisgICAgd2hpY2ggaXMgdW5pcXVlIHRvIGVhY2ggdGVzdCBmdW5jdGlvbiBpbnZvY2F0aW9uLAor
ICAgIGNyZWF0ZWQgYXMgYSBzdWIgZGlyZWN0b3J5IG9mIHRoZSBiYXNlIHRlbXBvcmFyeQorICAg
IGRpcmVjdG9yeS4gIFRoZSByZXR1cm5lZCBvYmplY3QgaXMgYSBgcHkucGF0aC5sb2NhbGBfCisg
ICAgcGF0aCBvYmplY3QuCisgICAgIiIiCisgICAgbmFtZSA9IHJlcXVlc3Qubm9kZS5uYW1lCisg
ICAgbmFtZSA9IHJlLnN1YigiW1xXXSIsICJfIiwgbmFtZSkKKyAgICBNQVhWQUwgPSAzMAorICAg
IGlmIGxlbihuYW1lKSA+IE1BWFZBTDoKKyAgICAgICAgbmFtZSA9IG5hbWVbOk1BWFZBTF0KKyAg
ICB4ID0gdG1wZGlyX2ZhY3RvcnkubWt0ZW1wKG5hbWUsIG51bWJlcmVkPVRydWUpCisgICAgcmV0
dXJuIHgKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRl
c3QvX3B5dGVzdC91bml0dGVzdC5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29s
cy9weXRlc3QvX3B5dGVzdC91bml0dGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMC4uODEyMGU5NGZiZjQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0
cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvdW5pdHRlc3QucHkKQEAgLTAsMCAr
MSwyMDUgQEAKKyIiIiBkaXNjb3ZlcnkgYW5kIHJ1bm5pbmcgb2Ygc3RkLWxpYnJhcnkgInVuaXR0
ZXN0IiBzdHlsZSB0ZXN0cy4gIiIiCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2lt
cG9ydAorCitpbXBvcnQgc3lzCitpbXBvcnQgdHJhY2ViYWNrCisKK2ltcG9ydCBweXRlc3QKKyMg
Zm9yIHRyYW5zZmVyaW5nIG1hcmtlcnMKK2ltcG9ydCBfcHl0ZXN0Ll9jb2RlCitmcm9tIF9weXRl
c3QucHl0aG9uIGltcG9ydCB0cmFuc2Zlcl9tYXJrZXJzCitmcm9tIF9weXRlc3Quc2tpcHBpbmcg
aW1wb3J0IE1hcmtFdmFsdWF0b3IKKworCitkZWYgcHl0ZXN0X3B5Y29sbGVjdF9tYWtlaXRlbShj
b2xsZWN0b3IsIG5hbWUsIG9iaik6CisgICAgIyBoYXMgdW5pdHRlc3QgYmVlbiBpbXBvcnRlZCBh
bmQgaXMgb2JqIGEgc3ViY2xhc3Mgb2YgaXRzIFRlc3RDYXNlPworICAgIHRyeToKKyAgICAgICAg
aWYgbm90IGlzc3ViY2xhc3Mob2JqLCBzeXMubW9kdWxlc1sidW5pdHRlc3QiXS5UZXN0Q2FzZSk6
CisgICAgICAgICAgICByZXR1cm4KKyAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICByZXR1
cm4KKyAgICAjIHllcywgc28gbGV0J3MgY29sbGVjdCBpdAorICAgIHJldHVybiBVbml0VGVzdENh
c2UobmFtZSwgcGFyZW50PWNvbGxlY3RvcikKKworCitjbGFzcyBVbml0VGVzdENhc2UocHl0ZXN0
LkNsYXNzKToKKyAgICAjIG1hcmtlciBmb3IgZml4dHVyZW1hbmdlci5nZXRmaXh0dXJlaW5mbygp
CisgICAgIyB0byBkZWNsYXJlIHRoYXQgb3VyIGNoaWxkcmVuIGRvIG5vdCBzdXBwb3J0IGZ1bmNh
cmdzCisgICAgbm9mdW5jYXJncyA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAKKyAgICBkZWYgc2V0dXAoc2VsZik6CisgICAgICAgIGNscyA9IHNl
bGYub2JqCisgICAgICAgIGlmIGdldGF0dHIoY2xzLCAnX191bml0dGVzdF9za2lwX18nLCBGYWxz
ZSk6CisgICAgICAgICAgICByZXR1cm4gICMgc2tpcHBlZAorICAgICAgICBzZXR1cCA9IGdldGF0
dHIoY2xzLCAnc2V0VXBDbGFzcycsIE5vbmUpCisgICAgICAgIGlmIHNldHVwIGlzIG5vdCBOb25l
OgorICAgICAgICAgICAgc2V0dXAoKQorICAgICAgICB0ZWFyZG93biA9IGdldGF0dHIoY2xzLCAn
dGVhckRvd25DbGFzcycsIE5vbmUpCisgICAgICAgIGlmIHRlYXJkb3duIGlzIG5vdCBOb25lOgor
ICAgICAgICAgICAgc2VsZi5hZGRmaW5hbGl6ZXIodGVhcmRvd24pCisgICAgICAgIHN1cGVyKFVu
aXRUZXN0Q2FzZSwgc2VsZikuc2V0dXAoKQorCisgICAgZGVmIGNvbGxlY3Qoc2VsZik6CisgICAg
ICAgIGZyb20gdW5pdHRlc3QgaW1wb3J0IFRlc3RMb2FkZXIKKyAgICAgICAgY2xzID0gc2VsZi5v
YmoKKyAgICAgICAgaWYgbm90IGdldGF0dHIoY2xzLCAiX190ZXN0X18iLCBUcnVlKToKKyAgICAg
ICAgICAgIHJldHVybgorICAgICAgICBzZWxmLnNlc3Npb24uX2ZpeHR1cmVtYW5hZ2VyLnBhcnNl
ZmFjdG9yaWVzKHNlbGYsIHVuaXR0ZXN0PVRydWUpCisgICAgICAgIGxvYWRlciA9IFRlc3RMb2Fk
ZXIoKQorICAgICAgICBtb2R1bGUgPSBzZWxmLmdldHBhcmVudChweXRlc3QuTW9kdWxlKS5vYmoK
KyAgICAgICAgZm91bmRzb21ldGhpbmcgPSBGYWxzZQorICAgICAgICBmb3IgbmFtZSBpbiBsb2Fk
ZXIuZ2V0VGVzdENhc2VOYW1lcyhzZWxmLm9iaik6CisgICAgICAgICAgICB4ID0gZ2V0YXR0cihz
ZWxmLm9iaiwgbmFtZSkKKyAgICAgICAgICAgIGZ1bmNvYmogPSBnZXRhdHRyKHgsICdpbV9mdW5j
JywgeCkKKyAgICAgICAgICAgIHRyYW5zZmVyX21hcmtlcnMoZnVuY29iaiwgY2xzLCBtb2R1bGUp
CisgICAgICAgICAgICB5aWVsZCBUZXN0Q2FzZUZ1bmN0aW9uKG5hbWUsIHBhcmVudD1zZWxmKQor
ICAgICAgICAgICAgZm91bmRzb21ldGhpbmcgPSBUcnVlCisKKyAgICAgICAgaWYgbm90IGZvdW5k
c29tZXRoaW5nOgorICAgICAgICAgICAgcnVudGVzdCA9IGdldGF0dHIoc2VsZi5vYmosICdydW5U
ZXN0JywgTm9uZSkKKyAgICAgICAgICAgIGlmIHJ1bnRlc3QgaXMgbm90IE5vbmU6CisgICAgICAg
ICAgICAgICAgdXQgPSBzeXMubW9kdWxlcy5nZXQoInR3aXN0ZWQudHJpYWwudW5pdHRlc3QiLCBO
b25lKQorICAgICAgICAgICAgICAgIGlmIHV0IGlzIE5vbmUgb3IgcnVudGVzdCAhPSB1dC5UZXN0
Q2FzZS5ydW5UZXN0OgorICAgICAgICAgICAgICAgICAgICB5aWVsZCBUZXN0Q2FzZUZ1bmN0aW9u
KCdydW5UZXN0JywgcGFyZW50PXNlbGYpCisKKworCitjbGFzcyBUZXN0Q2FzZUZ1bmN0aW9uKHB5
dGVzdC5GdW5jdGlvbik6CisgICAgX2V4Y2luZm8gPSBOb25lCisKKyAgICBkZWYgc2V0dXAoc2Vs
Zik6CisgICAgICAgIHNlbGYuX3Rlc3RjYXNlID0gc2VsZi5wYXJlbnQub2JqKHNlbGYubmFtZSkK
KyAgICAgICAgc2VsZi5fZml4X3VuaXR0ZXN0X3NraXBfZGVjb3JhdG9yKCkKKyAgICAgICAgc2Vs
Zi5fb2JqID0gZ2V0YXR0cihzZWxmLl90ZXN0Y2FzZSwgc2VsZi5uYW1lKQorICAgICAgICBpZiBo
YXNhdHRyKHNlbGYuX3Rlc3RjYXNlLCAnc2V0dXBfbWV0aG9kJyk6CisgICAgICAgICAgICBzZWxm
Ll90ZXN0Y2FzZS5zZXR1cF9tZXRob2Qoc2VsZi5fb2JqKQorICAgICAgICBpZiBoYXNhdHRyKHNl
bGYsICJfcmVxdWVzdCIpOgorICAgICAgICAgICAgc2VsZi5fcmVxdWVzdC5fZmlsbGZpeHR1cmVz
KCkKKworICAgIGRlZiBfZml4X3VuaXR0ZXN0X3NraXBfZGVjb3JhdG9yKHNlbGYpOgorICAgICAg
ICAiIiIKKyAgICAgICAgVGhlIEB1bml0dGVzdC5za2lwIGRlY29yYXRvciBjYWxscyBmdW5jdG9v
bHMud3JhcHMoc2VsZi5fdGVzdGNhc2UpCisgICAgICAgIFRoZSBjYWxsIHRvIGZ1bmN0b29scy53
cmFwcygpIGZhaWxzIHVubGVzcyBzZWxmLl90ZXN0Y2FzZQorICAgICAgICBoYXMgYSBfX25hbWVf
XyBhdHRyaWJ1dGUuIFRoaXMgaXMgdXN1YWxseSBhdXRvbWF0aWNhbGx5IHN1cHBsaWVkCisgICAg
ICAgIGlmIHRoZSB0ZXN0IGlzIGEgZnVuY3Rpb24gb3IgbWV0aG9kLCBidXQgd2UgbmVlZCB0byBh
ZGQgbWFudWFsbHkKKyAgICAgICAgaGVyZS4KKworICAgICAgICBTZWUgaXNzdWUgIzExNjkKKyAg
ICAgICAgIiIiCisgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bMF0gPT0gMjoKKyAgICAgICAg
ICAgIHNldGF0dHIoc2VsZi5fdGVzdGNhc2UsICJfX25hbWVfXyIsIHNlbGYubmFtZSkKKworICAg
IGRlZiB0ZWFyZG93bihzZWxmKToKKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLl90ZXN0Y2FzZSwg
J3RlYXJkb3duX21ldGhvZCcpOgorICAgICAgICAgICAgc2VsZi5fdGVzdGNhc2UudGVhcmRvd25f
bWV0aG9kKHNlbGYuX29iaikKKworICAgIGRlZiBzdGFydFRlc3Qoc2VsZiwgdGVzdGNhc2UpOgor
ICAgICAgICBwYXNzCisKKyAgICBkZWYgX2FkZGV4Y2luZm8oc2VsZiwgcmF3ZXhjaW5mbyk6Cisg
ICAgICAgICMgdW53cmFwIHBvdGVudGlhbCBleGNlcHRpb24gaW5mbyAoc2VlIHR3aXN0ZWQgdHJp
YWwgc3VwcG9ydCBiZWxvdykKKyAgICAgICAgcmF3ZXhjaW5mbyA9IGdldGF0dHIocmF3ZXhjaW5m
bywgJ19yYXdleGNpbmZvJywgcmF3ZXhjaW5mbykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAg
ZXhjaW5mbyA9IF9weXRlc3QuX2NvZGUuRXhjZXB0aW9uSW5mbyhyYXdleGNpbmZvKQorICAgICAg
ICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHRy
eToKKyAgICAgICAgICAgICAgICAgICAgbCA9IHRyYWNlYmFjay5mb3JtYXRfZXhjZXB0aW9uKCpy
YXdleGNpbmZvKQorICAgICAgICAgICAgICAgICAgICBsLmluc2VydCgwLCAiTk9URTogSW5jb21w
YXRpYmxlIEV4Y2VwdGlvbiBSZXByZXNlbnRhdGlvbiwgIgorICAgICAgICAgICAgICAgICAgICAg
ICAgImRpc3BsYXlpbmcgbmF0aXZlbHk6XG5cbiIpCisgICAgICAgICAgICAgICAgICAgIHB5dGVz
dC5mYWlsKCIiLmpvaW4obCksIHB5dHJhY2U9RmFsc2UpCisgICAgICAgICAgICAgICAgZXhjZXB0
IChweXRlc3QuZmFpbC5FeGNlcHRpb24sIEtleWJvYXJkSW50ZXJydXB0KToKKyAgICAgICAgICAg
ICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAg
ICAgIHB5dGVzdC5mYWlsKCJFUlJPUjogVW5rbm93biBJbmNvbXBhdGlibGUgRXhjZXB0aW9uICIK
KyAgICAgICAgICAgICAgICAgICAgICAgICJyZXByZXNlbnRhdGlvbjpcbiVyIiAlKHJhd2V4Y2lu
Zm8sKSwgcHl0cmFjZT1GYWxzZSkKKyAgICAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVw
dDoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZXhjZXB0IHB5dGVzdC5mYWls
LkV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICBleGNpbmZvID0gX3B5dGVzdC5fY29kZS5FeGNl
cHRpb25JbmZvKCkKKyAgICAgICAgc2VsZi5fX2RpY3RfXy5zZXRkZWZhdWx0KCdfZXhjaW5mbycs
IFtdKS5hcHBlbmQoZXhjaW5mbykKKworICAgIGRlZiBhZGRFcnJvcihzZWxmLCB0ZXN0Y2FzZSwg
cmF3ZXhjaW5mbyk6CisgICAgICAgIHNlbGYuX2FkZGV4Y2luZm8ocmF3ZXhjaW5mbykKKyAgICBk
ZWYgYWRkRmFpbHVyZShzZWxmLCB0ZXN0Y2FzZSwgcmF3ZXhjaW5mbyk6CisgICAgICAgIHNlbGYu
X2FkZGV4Y2luZm8ocmF3ZXhjaW5mbykKKworICAgIGRlZiBhZGRTa2lwKHNlbGYsIHRlc3RjYXNl
LCByZWFzb24pOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBweXRlc3Quc2tpcChyZWFzb24p
CisgICAgICAgIGV4Y2VwdCBweXRlc3Quc2tpcC5FeGNlcHRpb246CisgICAgICAgICAgICBzZWxm
Ll9ldmFsc2tpcCA9IE1hcmtFdmFsdWF0b3Ioc2VsZiwgJ1NraXBUZXN0JykKKyAgICAgICAgICAg
IHNlbGYuX2V2YWxza2lwLnJlc3VsdCA9IFRydWUKKyAgICAgICAgICAgIHNlbGYuX2FkZGV4Y2lu
Zm8oc3lzLmV4Y19pbmZvKCkpCisKKyAgICBkZWYgYWRkRXhwZWN0ZWRGYWlsdXJlKHNlbGYsIHRl
c3RjYXNlLCByYXdleGNpbmZvLCByZWFzb249IiIpOgorICAgICAgICB0cnk6CisgICAgICAgICAg
ICBweXRlc3QueGZhaWwoc3RyKHJlYXNvbikpCisgICAgICAgIGV4Y2VwdCBweXRlc3QueGZhaWwu
RXhjZXB0aW9uOgorICAgICAgICAgICAgc2VsZi5fYWRkZXhjaW5mbyhzeXMuZXhjX2luZm8oKSkK
KworICAgIGRlZiBhZGRVbmV4cGVjdGVkU3VjY2VzcyhzZWxmLCB0ZXN0Y2FzZSwgcmVhc29uPSIi
KToKKyAgICAgICAgc2VsZi5fdW5leHBlY3RlZHN1Y2Nlc3MgPSByZWFzb24KKworICAgIGRlZiBh
ZGRTdWNjZXNzKHNlbGYsIHRlc3RjYXNlKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHN0b3BU
ZXN0KHNlbGYsIHRlc3RjYXNlKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHJ1bnRlc3Qoc2Vs
Zik6CisgICAgICAgIHNlbGYuX3Rlc3RjYXNlKHJlc3VsdD1zZWxmKQorCisgICAgZGVmIF9wcnVu
ZXRyYWNlYmFjayhzZWxmLCBleGNpbmZvKToKKyAgICAgICAgcHl0ZXN0LkZ1bmN0aW9uLl9wcnVu
ZXRyYWNlYmFjayhzZWxmLCBleGNpbmZvKQorICAgICAgICB0cmFjZWJhY2sgPSBleGNpbmZvLnRy
YWNlYmFjay5maWx0ZXIoCisgICAgICAgICAgICBsYW1iZGEgeDpub3QgeC5mcmFtZS5mX2dsb2Jh
bHMuZ2V0KCdfX3VuaXR0ZXN0JykpCisgICAgICAgIGlmIHRyYWNlYmFjazoKKyAgICAgICAgICAg
IGV4Y2luZm8udHJhY2ViYWNrID0gdHJhY2ViYWNrCisKK0BweXRlc3QuaG9va2ltcGwodHJ5Zmly
c3Q9VHJ1ZSkKK2RlZiBweXRlc3RfcnVudGVzdF9tYWtlcmVwb3J0KGl0ZW0sIGNhbGwpOgorICAg
IGlmIGlzaW5zdGFuY2UoaXRlbSwgVGVzdENhc2VGdW5jdGlvbik6CisgICAgICAgIGlmIGl0ZW0u
X2V4Y2luZm86CisgICAgICAgICAgICBjYWxsLmV4Y2luZm8gPSBpdGVtLl9leGNpbmZvLnBvcCgw
KQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRlbCBjYWxsLnJlc3VsdAorICAg
ICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKwor
IyB0d2lzdGVkIHRyaWFsIHN1cHBvcnQKKworQHB5dGVzdC5ob29raW1wbChob29rd3JhcHBlcj1U
cnVlKQorZGVmIHB5dGVzdF9ydW50ZXN0X3Byb3RvY29sKGl0ZW0pOgorICAgIGlmIGlzaW5zdGFu
Y2UoaXRlbSwgVGVzdENhc2VGdW5jdGlvbikgYW5kIFwKKyAgICAgICAndHdpc3RlZC50cmlhbC51
bml0dGVzdCcgaW4gc3lzLm1vZHVsZXM6CisgICAgICAgIHV0ID0gc3lzLm1vZHVsZXNbJ3R3aXN0
ZWQucHl0aG9uLmZhaWx1cmUnXQorICAgICAgICBGYWlsdXJlX19pbml0X18gPSB1dC5GYWlsdXJl
Ll9faW5pdF9fCisgICAgICAgIGNoZWNrX3Rlc3RjYXNlX2ltcGxlbWVudHNfdHJpYWxfcmVwb3J0
ZXIoKQorICAgICAgICBkZWYgZXhjc3RvcmUoc2VsZiwgZXhjX3ZhbHVlPU5vbmUsIGV4Y190eXBl
PU5vbmUsIGV4Y190Yj1Ob25lLAorICAgICAgICAgICAgY2FwdHVyZVZhcnM9Tm9uZSk6CisgICAg
ICAgICAgICBpZiBleGNfdmFsdWUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLl9yYXdl
eGNpbmZvID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAg
ICAgaWYgZXhjX3R5cGUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgZXhjX3R5cGUgPSB0
eXBlKGV4Y192YWx1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLl9yYXdleGNpbmZvID0gKGV4Y190
eXBlLCBleGNfdmFsdWUsIGV4Y190YikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAg
ICBGYWlsdXJlX19pbml0X18oc2VsZiwgZXhjX3ZhbHVlLCBleGNfdHlwZSwgZXhjX3RiLAorICAg
ICAgICAgICAgICAgICAgICBjYXB0dXJlVmFycz1jYXB0dXJlVmFycykKKyAgICAgICAgICAgIGV4
Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAgICAgRmFpbHVyZV9faW5pdF9fKHNlbGYsIGV4
Y192YWx1ZSwgZXhjX3R5cGUsIGV4Y190YikKKyAgICAgICAgdXQuRmFpbHVyZS5fX2luaXRfXyA9
IGV4Y3N0b3JlCisgICAgICAgIHlpZWxkCisgICAgICAgIHV0LkZhaWx1cmUuX19pbml0X18gPSBG
YWlsdXJlX19pbml0X18KKyAgICBlbHNlOgorICAgICAgICB5aWVsZAorCisKK2RlZiBjaGVja190
ZXN0Y2FzZV9pbXBsZW1lbnRzX3RyaWFsX3JlcG9ydGVyKGRvbmU9W10pOgorICAgIGlmIGRvbmU6
CisgICAgICAgIHJldHVybgorICAgIGZyb20gem9wZS5pbnRlcmZhY2UgaW1wb3J0IGNsYXNzSW1w
bGVtZW50cworICAgIGZyb20gdHdpc3RlZC50cmlhbC5pdHJpYWwgaW1wb3J0IElSZXBvcnRlcgor
ICAgIGNsYXNzSW1wbGVtZW50cyhUZXN0Q2FzZUZ1bmN0aW9uLCBJUmVwb3J0ZXIpCisgICAgZG9u
ZS5hcHBlbmQoMSkKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29s
cy9weXRlc3QvX3B5dGVzdC92ZW5kb3JlZF9wYWNrYWdlcy9SRUFETUUubWQgYi9XZWJEcml2ZXJU
ZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvdmVuZG9yZWRfcGFja2FnZXMv
UkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lYWI3Yzcx
NGZiMAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29s
cy9weXRlc3QvX3B5dGVzdC92ZW5kb3JlZF9wYWNrYWdlcy9SRUFETUUubWQKQEAgLTAsMCArMSwx
MyBAQAorVGhpcyBkaXJlY3RvcnkgdmVuZG9ycyB0aGUgYHBsdWdneWAgbW9kdWxlLgorCitGb3Ig
YSBtb3JlIGRldGFpbGVkIGRpc2N1c3Npb24gZm9yIHRoZSByZWFzb25zIHRvIHZlbmRvcmluZyB0
aGlzIAorcGFja2FnZSwgcGxlYXNlIHNlZSBbdGhpcyBpc3N1ZV0oaHR0cHM6Ly9naXRodWIuY29t
L3B5dGVzdC1kZXYvcHl0ZXN0L2lzc3Vlcy85NDQpLgorCitUbyB1cGRhdGUgdGhlIGN1cnJlbnQg
dmVyc2lvbiwgZXhlY3V0ZToKKworYGBgCiskIHBpcCBpbnN0YWxsIC1VIHBsdWdneT09PHZlcnNp
b24+IC0tbm8tY29tcGlsZSAtLXRhcmdldD1fcHl0ZXN0L3ZlbmRvcmVkX3BhY2thZ2VzCitgYGAK
KworQW5kIGNvbW1pdCB0aGUgbW9kaWZpZWQgZmlsZXMuIFRoZSBgcGx1Z2d5LTx2ZXJzaW9uPi5k
aXN0LWluZm9gIGRpcmVjdG9yeSAKK2NyZWF0ZWQgYnkgYHBpcGAgc2hvdWxkIGJlIGlnbm9yZWQu
CmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19w
eXRlc3QvdmVuZG9yZWRfcGFja2FnZXMvX19pbml0X18ucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBv
cnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvdmVuZG9yZWRfcGFja2FnZXMvX19pbml0X18u
cHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmU2OWRlMjliYjJkCmRp
ZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRl
c3QvdmVuZG9yZWRfcGFja2FnZXMvcGx1Z2d5LTAuMy4xLmRpc3QtaW5mby9ERVNDUklQVElPTi5y
c3QgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvdmVu
ZG9yZWRfcGFja2FnZXMvcGx1Z2d5LTAuMy4xLmRpc3QtaW5mby9ERVNDUklQVElPTi5yc3QKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmFhM2JiZjgxMjk3Ci0tLSAvZGV2
L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0
ZXN0L3ZlbmRvcmVkX3BhY2thZ2VzL3BsdWdneS0wLjMuMS5kaXN0LWluZm8vREVTQ1JJUFRJT04u
cnN0CkBAIC0wLDAgKzEsMTAgQEAKK1BsdWdpbiByZWdpc3RyYXRpb24gYW5kIGhvb2sgY2FsbGlu
ZyBmb3IgUHl0aG9uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQorCitUaGlzIGlzIHRoZSBwbHVnaW4gbWFuYWdlciBhcyB1c2VkIGJ5IHB5dGVzdCBidXQg
c3RyaXBwZWQKK29mIHB5dGVzdCBzcGVjaWZpYyBkZXRhaWxzLgorCitEdXJpbmcgdGhlIDAueCBz
ZXJpZXMgdGhpcyBwbHVnaW4gZG9lcyBub3QgaGF2ZSBtdWNoIGRvY3VtZW50YXRpb24KK2V4Y2Vw
dCBleHRlbnNpdmUgZG9jc3RyaW5ncyBpbiB0aGUgcGx1Z2d5LnB5IG1vZHVsZS4KKworCmRpZmYg
LS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3Qv
dmVuZG9yZWRfcGFja2FnZXMvcGx1Z2d5LTAuMy4xLmRpc3QtaW5mby9NRVRBREFUQSBiL1dlYkRy
aXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC92ZW5kb3JlZF9wYWNr
YWdlcy9wbHVnZ3ktMC4zLjEuZGlzdC1pbmZvL01FVEFEQVRBCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwLi5lYzgxZjBhNmJlMAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRy
aXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC92ZW5kb3JlZF9wYWNr
YWdlcy9wbHVnZ3ktMC4zLjEuZGlzdC1pbmZvL01FVEFEQVRBCkBAIC0wLDAgKzEsMzkgQEAKK01l
dGFkYXRhLVZlcnNpb246IDIuMAorTmFtZTogcGx1Z2d5CitWZXJzaW9uOiAwLjMuMQorU3VtbWFy
eTogcGx1Z2luIGFuZCBob29rIGNhbGxpbmcgbWVjaGFuaXNtcyBmb3IgcHl0aG9uCitIb21lLXBh
Z2U6IFVOS05PV04KK0F1dGhvcjogSG9sZ2VyIEtyZWtlbAorQXV0aG9yLWVtYWlsOiBob2xnZXIg
YXQgbWVybGludXguZXUKK0xpY2Vuc2U6IE1JVCBsaWNlbnNlCitQbGF0Zm9ybTogdW5peAorUGxh
dGZvcm06IGxpbnV4CitQbGF0Zm9ybTogb3N4CitQbGF0Zm9ybTogd2luMzIKK0NsYXNzaWZpZXI6
IERldmVsb3BtZW50IFN0YXR1cyA6OiA0IC0gQmV0YQorQ2xhc3NpZmllcjogSW50ZW5kZWQgQXVk
aWVuY2UgOjogRGV2ZWxvcGVycworQ2xhc3NpZmllcjogTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQg
OjogTUlUIExpY2Vuc2UKK0NsYXNzaWZpZXI6IE9wZXJhdGluZyBTeXN0ZW0gOjogUE9TSVgKK0Ns
YXNzaWZpZXI6IE9wZXJhdGluZyBTeXN0ZW0gOjogTWljcm9zb2Z0IDo6IFdpbmRvd3MKK0NsYXNz
aWZpZXI6IE9wZXJhdGluZyBTeXN0ZW0gOjogTWFjT1MgOjogTWFjT1MgWAorQ2xhc3NpZmllcjog
VG9waWMgOjogU29mdHdhcmUgRGV2ZWxvcG1lbnQgOjogVGVzdGluZworQ2xhc3NpZmllcjogVG9w
aWMgOjogU29mdHdhcmUgRGV2ZWxvcG1lbnQgOjogTGlicmFyaWVzCitDbGFzc2lmaWVyOiBUb3Bp
YyA6OiBVdGlsaXRpZXMKK0NsYXNzaWZpZXI6IFByb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhv
biA6OiAyCitDbGFzc2lmaWVyOiBQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMi42
CitDbGFzc2lmaWVyOiBQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMi43CitDbGFz
c2lmaWVyOiBQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMworQ2xhc3NpZmllcjog
UHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDMuMworQ2xhc3NpZmllcjogUHJvZ3Jh
bW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDMuNAorQ2xhc3NpZmllcjogUHJvZ3JhbW1pbmcg
TGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDMuNQorCitQbHVnaW4gcmVnaXN0cmF0aW9uIGFuZCBob29r
IGNhbGxpbmcgZm9yIFB5dGhvbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KKworVGhpcyBpcyB0aGUgcGx1Z2luIG1hbmFnZXIgYXMgdXNlZCBieSBweXRl
c3QgYnV0IHN0cmlwcGVkCitvZiBweXRlc3Qgc3BlY2lmaWMgZGV0YWlscy4KKworRHVyaW5nIHRo
ZSAwLnggc2VyaWVzIHRoaXMgcGx1Z2luIGRvZXMgbm90IGhhdmUgbXVjaCBkb2N1bWVudGF0aW9u
CitleGNlcHQgZXh0ZW5zaXZlIGRvY3N0cmluZ3MgaW4gdGhlIHBsdWdneS5weSBtb2R1bGUuCisK
KwpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9f
cHl0ZXN0L3ZlbmRvcmVkX3BhY2thZ2VzL3BsdWdneS0wLjMuMS5kaXN0LWluZm8vUkVDT1JEIGIv
V2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L3ZlbmRvcmVk
X3BhY2thZ2VzL3BsdWdneS0wLjMuMS5kaXN0LWluZm8vUkVDT1JECm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45NjI2NjczYzQzYwotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC92ZW5kb3JlZF9w
YWNrYWdlcy9wbHVnZ3ktMC4zLjEuZGlzdC1pbmZvL1JFQ09SRApAQCAtMCwwICsxLDggQEAKK3Bs
dWdneS5weSxzaGEyNTY9dl9SZld6eVc2RFBVMWNKdV9FRm9MX09IcTN0MTNxbG9WZFI2VWFNQ1hR
QSwyOTg2MgorcGx1Z2d5LTAuMy4xLmRpc3QtaW5mby90b3BfbGV2ZWwudHh0LHNoYTI1Nj14S1ND
UmhhaS12OU1ja3ZNdVdxTnoxNmMxdGJzbU9nZ29NU3dUZ2NwWUhFLDcKK3BsdWdneS0wLjMuMS5k
aXN0LWluZm8vcGJyLmpzb24sc2hhMjU2PXhYM3M2X193T2NBeUYtQVpKWDFzZFp5VzZQVVhULUZr
ZkJsTTY5RUVVQ2csNDcKK3BsdWdneS0wLjMuMS5kaXN0LWluZm8vUkVDT1JELCwKK3BsdWdneS0w
LjMuMS5kaXN0LWluZm8vbWV0YWRhdGEuanNvbixzaGEyNTY9bkxLbHRPVDc4ZE1WLTAwdVhENkFl
ZW1wNHhOc3oycTU5ajZPUlNEZUxqdywxMDI3CitwbHVnZ3ktMC4zLjEuZGlzdC1pbmZvL01FVEFE
QVRBLHNoYTI1Nj0xYjg1SG8ydTRpSzMwTTA5OWs3YXhNemNERGhMY0lNYi1BODJKVUpablNvLDEz
MzQKK3BsdWdneS0wLjMuMS5kaXN0LWluZm8vV0hFRUwsc2hhMjU2PUF2UjBXZVRwRGF4VDY0NWJs
NUZReFVLNk5Qc1RsczJ0dHBjR0pnM2oxWGcsMTEwCitwbHVnZ3ktMC4zLjEuZGlzdC1pbmZvL0RF
U0NSSVBUSU9OLnJzdCxzaGEyNTY9UDVBa2gxRWRJQlI2Q2VxdFYyUDhad3BHU3BaaVRLUHcwTnlT
N2pFaUQtZywzMDYKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29s
cy9weXRlc3QvX3B5dGVzdC92ZW5kb3JlZF9wYWNrYWdlcy9wbHVnZ3ktMC4zLjEuZGlzdC1pbmZv
L1dIRUVMIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0
L3ZlbmRvcmVkX3BhY2thZ2VzL3BsdWdneS0wLjMuMS5kaXN0LWluZm8vV0hFRUwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjlkZmY2OWQ4NjEwCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L3Zl
bmRvcmVkX3BhY2thZ2VzL3BsdWdneS0wLjMuMS5kaXN0LWluZm8vV0hFRUwKQEAgLTAsMCArMSw2
IEBACitXaGVlbC1WZXJzaW9uOiAxLjAKK0dlbmVyYXRvcjogYmRpc3Rfd2hlZWwgKDAuMjQuMCkK
K1Jvb3QtSXMtUHVyZWxpYjogdHJ1ZQorVGFnOiBweTItbm9uZS1hbnkKK1RhZzogcHkzLW5vbmUt
YW55CisKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRl
c3QvX3B5dGVzdC92ZW5kb3JlZF9wYWNrYWdlcy9wbHVnZ3ktMC4zLjEuZGlzdC1pbmZvL21ldGFk
YXRhLmpzb24gYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRl
c3QvdmVuZG9yZWRfcGFja2FnZXMvcGx1Z2d5LTAuMy4xLmRpc3QtaW5mby9tZXRhZGF0YS5qc29u
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40MjZhM2E3YWRlMQotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3Qv
X3B5dGVzdC92ZW5kb3JlZF9wYWNrYWdlcy9wbHVnZ3ktMC4zLjEuZGlzdC1pbmZvL21ldGFkYXRh
Lmpzb24KQEAgLTAsMCArMSBAQAoreyJsaWNlbnNlIjogIk1JVCBsaWNlbnNlIiwgIm5hbWUiOiAi
cGx1Z2d5IiwgIm1ldGFkYXRhX3ZlcnNpb24iOiAiMi4wIiwgImdlbmVyYXRvciI6ICJiZGlzdF93
aGVlbCAoMC4yNC4wKSIsICJzdW1tYXJ5IjogInBsdWdpbiBhbmQgaG9vayBjYWxsaW5nIG1lY2hh
bmlzbXMgZm9yIHB5dGhvbiIsICJwbGF0Zm9ybSI6ICJ1bml4IiwgInZlcnNpb24iOiAiMC4zLjEi
LCAiZXh0ZW5zaW9ucyI6IHsicHl0aG9uLmRldGFpbHMiOiB7ImRvY3VtZW50X25hbWVzIjogeyJk
ZXNjcmlwdGlvbiI6ICJERVNDUklQVElPTi5yc3QifSwgImNvbnRhY3RzIjogW3sicm9sZSI6ICJh
dXRob3IiLCAiZW1haWwiOiAiaG9sZ2VyIGF0IG1lcmxpbnV4LmV1IiwgIm5hbWUiOiAiSG9sZ2Vy
IEtyZWtlbCJ9XX19LCAiY2xhc3NpZmllcnMiOiBbIkRldmVsb3BtZW50IFN0YXR1cyA6OiA0IC0g
QmV0YSIsICJJbnRlbmRlZCBBdWRpZW5jZSA6OiBEZXZlbG9wZXJzIiwgIkxpY2Vuc2UgOjogT1NJ
IEFwcHJvdmVkIDo6IE1JVCBMaWNlbnNlIiwgIk9wZXJhdGluZyBTeXN0ZW0gOjogUE9TSVgiLCAi
T3BlcmF0aW5nIFN5c3RlbSA6OiBNaWNyb3NvZnQgOjogV2luZG93cyIsICJPcGVyYXRpbmcgU3lz
dGVtIDo6IE1hY09TIDo6IE1hY09TIFgiLCAiVG9waWMgOjogU29mdHdhcmUgRGV2ZWxvcG1lbnQg
OjogVGVzdGluZyIsICJUb3BpYyA6OiBTb2Z0d2FyZSBEZXZlbG9wbWVudCA6OiBMaWJyYXJpZXMi
LCAiVG9waWMgOjogVXRpbGl0aWVzIiwgIlByb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6
OiAyIiwgIlByb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAyLjYiLCAiUHJvZ3JhbW1p
bmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDIuNyIsICJQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQ
eXRob24gOjogMyIsICJQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMy4zIiwgIlBy
b2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAzLjQiLCAiUHJvZ3JhbW1pbmcgTGFuZ3Vh
Z2UgOjogUHl0aG9uIDo6IDMuNSJdfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAt
LWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC92
ZW5kb3JlZF9wYWNrYWdlcy9wbHVnZ3ktMC4zLjEuZGlzdC1pbmZvL3Bici5qc29uIGIvV2ViRHJp
dmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L3ZlbmRvcmVkX3BhY2th
Z2VzL3BsdWdneS0wLjMuMS5kaXN0LWluZm8vcGJyLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAuLmQ2Yjc5ODY0MDE5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJp
dmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L3ZlbmRvcmVkX3BhY2th
Z2VzL3BsdWdneS0wLjMuMS5kaXN0LWluZm8vcGJyLmpzb24KQEAgLTAsMCArMSBAQAoreyJpc19y
ZWxlYXNlIjogZmFsc2UsICJnaXRfdmVyc2lvbiI6ICI3ZDRjOWNkIn0KXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9v
bHMvcHl0ZXN0L19weXRlc3QvdmVuZG9yZWRfcGFja2FnZXMvcGx1Z2d5LTAuMy4xLmRpc3QtaW5m
by90b3BfbGV2ZWwudHh0IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVz
dC9fcHl0ZXN0L3ZlbmRvcmVkX3BhY2thZ2VzL3BsdWdneS0wLjMuMS5kaXN0LWluZm8vdG9wX2xl
dmVsLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMTFiZGI1YzFm
NWYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMv
cHl0ZXN0L19weXRlc3QvdmVuZG9yZWRfcGFja2FnZXMvcGx1Z2d5LTAuMy4xLmRpc3QtaW5mby90
b3BfbGV2ZWwudHh0CkBAIC0wLDAgKzEgQEAKK3BsdWdneQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVy
VGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L3ZlbmRvcmVkX3BhY2thZ2Vz
L3BsdWdneS5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5
dGVzdC92ZW5kb3JlZF9wYWNrYWdlcy9wbHVnZ3kucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLjJmODQ4YjIzZDM1Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVy
VGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L3ZlbmRvcmVkX3BhY2thZ2Vz
L3BsdWdneS5weQpAQCAtMCwwICsxLDc3NyBAQAorIiIiCitQbHVnaW5NYW5hZ2VyLCBiYXNpYyBp
bml0aWFsaXphdGlvbiBhbmQgdHJhY2luZy4KKworcGx1Z2d5IGlzIHRoZSBjcmlzdGFsbGl6ZWQg
Y29yZSBvZiBwbHVnaW4gbWFuYWdlbWVudCBhcyB1c2VkCitieSBzb21lIDE1MCBwbHVnaW5zIGZv
ciBweXRlc3QuCisKK1BsdWdneSB1c2VzIHNlbWFudGljIHZlcnNpb25pbmcuIEJyZWFraW5nIGNo
YW5nZXMgYXJlIG9ubHkgZm9yZXNlZW4gZm9yCitNYWpvciByZWxlYXNlcyAoaW5jcmVtZW50ZWQg
WCBpbiAiWC5ZLloiKS4gIElmIHlvdSB3YW50IHRvIHVzZSBwbHVnZ3kgaW4KK3lvdXIgcHJvamVj
dCB5b3Ugc2hvdWxkIHRodXMgdXNlIGEgZGVwZW5kZW5jeSByZXN0cmljdGlvbiBsaWtlCisicGx1
Z2d5Pj0wLjEuMCw8MS4wIiB0byBhdm9pZCBzdXJwcmlzZXMuCisKK3BsdWdneSBpcyBjb25jZXJu
ZWQgd2l0aCBob29rIHNwZWNpZmljYXRpb24sIGhvb2sgaW1wbGVtZW50YXRpb25zIGFuZCBob29r
CitjYWxsaW5nLiAgRm9yIGFueSBnaXZlbiBob29rIHNwZWNpZmljYXRpb24gYSBob29rIGNhbGwg
aW52b2tlcyB1cCB0byBOIGltcGxlbWVudGF0aW9ucy4KK0EgaG9vayBpbXBsZW1lbnRhdGlvbiBj
YW4gaW5mbHVlbmNlIGl0cyBwb3NpdGlvbiBhbmQgdHlwZSBvZiBleGVjdXRpb246CitpZiBhdHRy
aWJ1dGVkICJ0cnlmaXJzdCIgb3IgInRyeWxhc3QiIGl0IHdpbGwgYmUgdHJpZWQgdG8gZXhlY3V0
ZQorZmlyc3Qgb3IgbGFzdC4gIEhvd2V2ZXIsIGlmIGF0dHJpYnV0ZWQgImhvb2t3cmFwcGVyIiBh
biBpbXBsZW1lbnRhdGlvbgorY2FuIHdyYXAgYWxsIGNhbGxzIHRvIG5vbi1ob29rd3JhcHBlciBp
bXBsZW1lbnRhdGlvbnMuICBBIGhvb2t3cmFwcGVyCitjYW4gdGh1cyBleGVjdXRlIHNvbWUgY29k
ZSBhaGVhZCBhbmQgYWZ0ZXIgdGhlIGV4ZWN1dGlvbiBvZiBvdGhlciBob29rcy4KKworSG9vayBz
cGVjaWZpY2F0aW9uIGlzIGRvbmUgYnkgd2F5IG9mIGEgcmVndWxhciBweXRob24gZnVuY3Rpb24g
d2hlcmUKK2JvdGggdGhlIGZ1bmN0aW9uIG5hbWUgYW5kIHRoZSBuYW1lcyBvZiBhbGwgaXRzIGFy
Z3VtZW50cyBhcmUgc2lnbmlmaWNhbnQuCitFYWNoIGhvb2sgaW1wbGVtZW50YXRpb24gZnVuY3Rp
b24gaXMgdmVyaWZpZWQgYWdhaW5zdCB0aGUgb3JpZ2luYWwgc3BlY2lmaWNhdGlvbgorZnVuY3Rp
b24sIGluY2x1ZGluZyB0aGUgbmFtZXMgb2YgYWxsIGl0cyBhcmd1bWVudHMuICBUbyBhbGxvdyBm
b3IgaG9vayBzcGVjaWZpY2F0aW9ucwordG8gZXZvbHZlIG92ZXIgdGhlIGxpdmV0aW1lIG9mIGEg
cHJvamVjdCwgaG9vayBpbXBsZW1lbnRhdGlvbnMgY2FuCithY2NlcHQgbGVzcyBhcmd1bWVudHMu
ICBPbmUgY2FuIHRodXMgYWRkIG5ldyBhcmd1bWVudHMgYW5kIHNlbWFudGljcyB0bworYSBob29r
IHNwZWNpZmljYXRpb24gYnkgYWRkaW5nIGFub3RoZXIgYXJndW1lbnQgdHlwaWNhbGx5IHdpdGhv
dXQgYnJlYWtpbmcKK2V4aXN0aW5nIGhvb2sgaW1wbGVtZW50YXRpb25zLgorCitUaGUgY2hvc2Vu
IGFwcHJvYWNoIGlzIG1lYW50IHRvIGxldCBhIGhvb2sgZGVzaWduZXIgdGhpbmsgY2FyZWZ1bHkg
YWJvdXQKK3doaWNoIG9iamVjdHMgYXJlIG5lZWRlZCBieSBhbiBleHRlbnNpb24gd3JpdGVyLiAg
QnkgY29udHJhc3QsIHN1YmNsYXNzLWJhc2VkCitleHRlbnNpb24gbWVjaGFuaXNtcyBvZnRlbiBl
eHBvc2UgYSBsb3QgbW9yZSBzdGF0ZSBhbmQgYmVoYXZpb3VyIHRoYW4gbmVlZGVkLAordGh1cyBy
ZXN0cmljdGluZyBmdXR1cmUgZGV2ZWxvcG1lbnRzLgorCitQbHVnZ3kgY3VycmVudGx5IGNvbnNp
c3RzIG9mIGZ1bmN0aW9uYWxpdHkgZm9yOgorCistIGEgd2F5IHRvIHJlZ2lzdGVyIG5ldyBob29r
IHNwZWNpZmljYXRpb25zLiAgV2l0aG91dCBhIGhvb2sKKyAgc3BlY2lmaWNhdGlvbiBubyBob29r
IGNhbGxpbmcgY2FuIGJlIHBlcmZvcm1lZC4KKworLSBhIHJlZ2lzdHJ5IG9mIHBsdWdpbnMgd2hp
Y2ggY29udGFpbiBob29rIGltcGxlbWVudGF0aW9uIGZ1bmN0aW9ucy4gIEl0CisgIGlzIHBvc3Np
YmxlIHRvIHJlZ2lzdGVyIHBsdWdpbnMgZm9yIHdoaWNoIGEgaG9vayBzcGVjaWZpY2F0aW9uIGlz
IG5vdCB5ZXQKKyAga25vd24gYW5kIHZhbGlkYXRlIGFsbCBob29rcyB3aGVuIHRoZSBzeXN0ZW0g
aXMgaW4gYSBtb3JlIHJlZmVyZW50aWFsbHkKKyAgY29uc2lzdGVudCBzdGF0ZS4gIFNldHRpbmcg
YW4gIm9wdGlvbmFsaG9vayIgYXR0cmlidXRpb24gdG8gYSBob29rCisgIGltcGxlbWVudGF0aW9u
IHdpbGwgYXZvaWQgUGx1Z2luVmFsaWRhdGlvbkVycm9yJ3MgaWYgYSBzcGVjaWZpY2F0aW9uCisg
IGlzIG1pc3NpbmcuICBUaGlzIGFsbG93cyB0byBoYXZlIG9wdGlvbmFsIGludGVncmF0aW9uIGJl
dHdlZW4gcGx1Z2lucy4KKworLSBhICJob29rIiByZWxheSBvYmplY3QgZnJvbSB3aGljaCB5b3Ug
Y2FuIGxhdW5jaCAxOk4gY2FsbHMgdG8KKyAgcmVnaXN0ZXJlZCBob29rIGltcGxlbWVudGF0aW9u
IGZ1bmN0aW9ucworCistIGEgbWVjaGFuaXNtIGZvciBvcmRlcmluZyBob29rIGltcGxlbWVudGF0
aW9uIGZ1bmN0aW9ucworCistIG1lY2hhbmlzbXMgZm9yIHR3byBkaWZmZXJlbnQgdHlwZSBvZiAx
Ok4gY2FsbHM6ICJmaXJzdHJlc3VsdCIgZm9yIHdoZW4KKyAgdGhlIGNhbGwgc2hvdWxkIHN0b3Ag
d2hlbiB0aGUgZmlyc3QgaW1wbGVtZW50YXRpb24gcmV0dXJucyBhIG5vbi1Ob25lIHJlc3VsdC4K
KyAgQW5kIHRoZSBvdGhlciAoZGVmYXVsdCkgd2F5IG9mIGd1YXJhbnRlZWluZyB0aGF0IGFsbCBo
b29rIGltcGxlbWVudGF0aW9ucworICB3aWxsIGJlIGNhbGxlZCBhbmQgdGhlaXIgbm9uLU5vbmUg
cmVzdWx0IGNvbGxlY3RlZC4KKworLSBtZWNoYW5pc21zIGZvciAiaGlzdG9yaWMiIGV4dGVuc2lv
biBwb2ludHMgc3VjaCB0aGF0IGFsbCBuZXdseQorICByZWdpc3RlcmVkIGZ1bmN0aW9ucyB3aWxs
IHJlY2VpdmUgYWxsIGhvb2sgY2FsbHMgdGhhdCBoYXBwZW5lZAorICBiZWZvcmUgdGhlaXIgcmVn
aXN0cmF0aW9uLgorCistIGEgbWVjaGFuaXNtIGZvciBkaXNjb3ZlcmluZyBwbHVnaW4gb2JqZWN0
cyB3aGljaCBhcmUgYmFzZWQgb24KKyAgc2V0dXB0b29scyBiYXNlZCBlbnRyeSBwb2ludHMuCisK
Ky0gYSBzaW1wbGUgdHJhY2luZyBtZWNoYW5pc20sIGluY2x1ZGluZyB0cmFjaW5nIG9mIHBsdWdp
biBjYWxscyBhbmQKKyAgdGhlaXIgYXJndW1lbnRzLgorCisiIiIKK2ltcG9ydCBzeXMKK2ltcG9y
dCBpbnNwZWN0CisKK19fdmVyc2lvbl9fID0gJzAuMy4xJworX19hbGxfXyA9IFsiUGx1Z2luTWFu
YWdlciIsICJQbHVnaW5WYWxpZGF0aW9uRXJyb3IiLAorICAgICAgICAgICAiSG9va3NwZWNNYXJr
ZXIiLCAiSG9va2ltcGxNYXJrZXIiXQorCitfcHkzID0gc3lzLnZlcnNpb25faW5mbyA+ICgzLCAw
KQorCisKK2NsYXNzIEhvb2tzcGVjTWFya2VyOgorICAgICIiIiBEZWNvcmF0b3IgaGVscGVyIGNs
YXNzIGZvciBtYXJraW5nIGZ1bmN0aW9ucyBhcyBob29rIHNwZWNpZmljYXRpb25zLgorCisgICAg
WW91IGNhbiBpbnN0YW50aWF0ZSBpdCB3aXRoIGEgcHJvamVjdF9uYW1lIHRvIGdldCBhIGRlY29y
YXRvci4KKyAgICBDYWxsaW5nIFBsdWdpbk1hbmFnZXIuYWRkX2hvb2tzcGVjcyBsYXRlciB3aWxs
IGRpc2NvdmVyIGFsbCBtYXJrZWQgZnVuY3Rpb25zCisgICAgaWYgdGhlIFBsdWdpbk1hbmFnZXIg
dXNlcyB0aGUgc2FtZSBwcm9qZWN0X25hbWUuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18o
c2VsZiwgcHJvamVjdF9uYW1lKToKKyAgICAgICAgc2VsZi5wcm9qZWN0X25hbWUgPSBwcm9qZWN0
X25hbWUKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBmdW5jdGlvbj1Ob25lLCBmaXJzdHJlc3Vs
dD1GYWxzZSwgaGlzdG9yaWM9RmFsc2UpOgorICAgICAgICAiIiIgaWYgcGFzc2VkIGEgZnVuY3Rp
b24sIGRpcmVjdGx5IHNldHMgYXR0cmlidXRlcyBvbiB0aGUgZnVuY3Rpb24KKyAgICAgICAgd2hp
Y2ggd2lsbCBtYWtlIGl0IGRpc2NvdmVyYWJsZSB0byBhZGRfaG9va3NwZWNzKCkuICBJZiBwYXNz
ZWQgbm8KKyAgICAgICAgZnVuY3Rpb24sIHJldHVybnMgYSBkZWNvcmF0b3Igd2hpY2ggY2FuIGJl
IGFwcGxpZWQgdG8gYSBmdW5jdGlvbgorICAgICAgICBsYXRlciB1c2luZyB0aGUgYXR0cmlidXRl
cyBzdXBwbGllZC4KKworICAgICAgICBJZiBmaXJzdHJlc3VsdCBpcyBUcnVlIHRoZSAxOk4gaG9v
ayBjYWxsIChOIGJlaW5nIHRoZSBudW1iZXIgb2YgcmVnaXN0ZXJlZAorICAgICAgICBob29rIGlt
cGxlbWVudGF0aW9uIGZ1bmN0aW9ucykgd2lsbCBzdG9wIGF0IEk8PU4gd2hlbiB0aGUgSSd0aCBm
dW5jdGlvbgorICAgICAgICByZXR1cm5zIGEgbm9uLU5vbmUgcmVzdWx0LgorCisgICAgICAgIElm
IGhpc3RvcmljIGlzIFRydWUgY2FsbHMgdG8gYSBob29rIHdpbGwgYmUgbWVtb3JpemVkIGFuZCBy
ZXBsYXllZAorICAgICAgICBvbiBsYXRlciByZWdpc3RlcmVkIHBsdWdpbnMuCisKKyAgICAgICAg
IiIiCisgICAgICAgIGRlZiBzZXRhdHRyX2hvb2tzcGVjX29wdHMoZnVuYyk6CisgICAgICAgICAg
ICBpZiBoaXN0b3JpYyBhbmQgZmlyc3RyZXN1bHQ6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFs
dWVFcnJvcigiY2Fubm90IGhhdmUgYSBoaXN0b3JpYyBmaXJzdHJlc3VsdCBob29rIikKKyAgICAg
ICAgICAgIHNldGF0dHIoZnVuYywgc2VsZi5wcm9qZWN0X25hbWUgKyAiX3NwZWMiLAorICAgICAg
ICAgICAgICAgICAgIGRpY3QoZmlyc3RyZXN1bHQ9Zmlyc3RyZXN1bHQsIGhpc3RvcmljPWhpc3Rv
cmljKSkKKyAgICAgICAgICAgIHJldHVybiBmdW5jCisKKyAgICAgICAgaWYgZnVuY3Rpb24gaXMg
bm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gc2V0YXR0cl9ob29rc3BlY19vcHRzKGZ1bmN0
aW9uKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNldGF0dHJfaG9va3NwZWNf
b3B0cworCisKK2NsYXNzIEhvb2tpbXBsTWFya2VyOgorICAgICIiIiBEZWNvcmF0b3IgaGVscGVy
IGNsYXNzIGZvciBtYXJraW5nIGZ1bmN0aW9ucyBhcyBob29rIGltcGxlbWVudGF0aW9ucy4KKwor
ICAgIFlvdSBjYW4gaW5zdGFudGlhdGUgd2l0aCBhIHByb2plY3RfbmFtZSB0byBnZXQgYSBkZWNv
cmF0b3IuCisgICAgQ2FsbGluZyBQbHVnaW5NYW5hZ2VyLnJlZ2lzdGVyIGxhdGVyIHdpbGwgZGlz
Y292ZXIgYWxsIG1hcmtlZCBmdW5jdGlvbnMKKyAgICBpZiB0aGUgUGx1Z2luTWFuYWdlciB1c2Vz
IHRoZSBzYW1lIHByb2plY3RfbmFtZS4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
cHJvamVjdF9uYW1lKToKKyAgICAgICAgc2VsZi5wcm9qZWN0X25hbWUgPSBwcm9qZWN0X25hbWUK
KworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBmdW5jdGlvbj1Ob25lLCBob29rd3JhcHBlcj1GYWxz
ZSwgb3B0aW9uYWxob29rPUZhbHNlLAorICAgICAgICAgICAgICAgICB0cnlmaXJzdD1GYWxzZSwg
dHJ5bGFzdD1GYWxzZSk6CisKKyAgICAgICAgIiIiIGlmIHBhc3NlZCBhIGZ1bmN0aW9uLCBkaXJl
Y3RseSBzZXRzIGF0dHJpYnV0ZXMgb24gdGhlIGZ1bmN0aW9uCisgICAgICAgIHdoaWNoIHdpbGwg
bWFrZSBpdCBkaXNjb3ZlcmFibGUgdG8gcmVnaXN0ZXIoKS4gIElmIHBhc3NlZCBubyBmdW5jdGlv
biwKKyAgICAgICAgcmV0dXJucyBhIGRlY29yYXRvciB3aGljaCBjYW4gYmUgYXBwbGllZCB0byBh
IGZ1bmN0aW9uIGxhdGVyIHVzaW5nCisgICAgICAgIHRoZSBhdHRyaWJ1dGVzIHN1cHBsaWVkLgor
CisgICAgICAgIElmIG9wdGlvbmFsaG9vayBpcyBUcnVlIGEgbWlzc2luZyBtYXRjaGluZyBob29r
IHNwZWNpZmljYXRpb24gd2lsbCBub3QgcmVzdWx0CisgICAgICAgIGluIGFuIGVycm9yIChieSBk
ZWZhdWx0IGl0IGlzIGFuIGVycm9yIGlmIG5vIG1hdGNoaW5nIHNwZWMgaXMgZm91bmQpLgorCisg
ICAgICAgIElmIHRyeWZpcnN0IGlzIFRydWUgdGhpcyBob29rIGltcGxlbWVudGF0aW9uIHdpbGwg
cnVuIGFzIGVhcmx5IGFzIHBvc3NpYmxlCisgICAgICAgIGluIHRoZSBjaGFpbiBvZiBOIGhvb2sg
aW1wbGVtZW50YXRpb25zIGZvciBhIHNwZWNmaWNhdGlvbi4KKworICAgICAgICBJZiB0cnlsYXN0
IGlzIFRydWUgdGhpcyBob29rIGltcGxlbWVudGF0aW9uIHdpbGwgcnVuIGFzIGxhdGUgYXMgcG9z
c2libGUKKyAgICAgICAgaW4gdGhlIGNoYWluIG9mIE4gaG9vayBpbXBsZW1lbnRhdGlvbnMuCisK
KyAgICAgICAgSWYgaG9va3dyYXBwZXIgaXMgVHJ1ZSB0aGUgaG9vayBpbXBsZW1lbnRhdGlvbnMg
bmVlZHMgdG8gZXhlY3V0ZSBleGFjdGx5CisgICAgICAgIG9uZSAieWllbGQiLiAgVGhlIGNvZGUg
YmVmb3JlIHRoZSB5aWVsZCBpcyBydW4gZWFybHkgYmVmb3JlIGFueSBub24taG9va3dyYXBwZXIK
KyAgICAgICAgZnVuY3Rpb24gaXMgcnVuLiAgVGhlIGNvZGUgYWZ0ZXIgdGhlIHlpZWxkIGlzIHJ1
biBhZnRlciBhbGwgbm9uLWhvb2t3cmFwcGVyCisgICAgICAgIGZ1bmN0aW9uIGhhdmUgcnVuLiAg
VGhlIHlpZWxkIHJlY2VpdmVzIGFuIGBgX0NhbGxPdXRjb21lYGAgb2JqZWN0IHJlcHJlc2VudGlu
ZworICAgICAgICB0aGUgZXhjZXB0aW9uIG9yIHJlc3VsdCBvdXRjb21lIG9mIHRoZSBpbm5lciBj
YWxscyAoaW5jbHVkaW5nIG90aGVyIGhvb2t3cmFwcGVyCisgICAgICAgIGNhbGxzKS4KKworICAg
ICAgICAiIiIKKyAgICAgICAgZGVmIHNldGF0dHJfaG9va2ltcGxfb3B0cyhmdW5jKToKKyAgICAg
ICAgICAgIHNldGF0dHIoZnVuYywgc2VsZi5wcm9qZWN0X25hbWUgKyAiX2ltcGwiLAorICAgICAg
ICAgICAgICAgICAgIGRpY3QoaG9va3dyYXBwZXI9aG9va3dyYXBwZXIsIG9wdGlvbmFsaG9vaz1v
cHRpb25hbGhvb2ssCisgICAgICAgICAgICAgICAgICAgICAgICB0cnlmaXJzdD10cnlmaXJzdCwg
dHJ5bGFzdD10cnlsYXN0KSkKKyAgICAgICAgICAgIHJldHVybiBmdW5jCisKKyAgICAgICAgaWYg
ZnVuY3Rpb24gaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBzZXRhdHRyX2hvb2tpbXBsX29w
dHMKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZXRhdHRyX2hvb2tpbXBsX29w
dHMoZnVuY3Rpb24pCisKKworZGVmIG5vcm1hbGl6ZV9ob29raW1wbF9vcHRzKG9wdHMpOgorICAg
IG9wdHMuc2V0ZGVmYXVsdCgidHJ5Zmlyc3QiLCBGYWxzZSkKKyAgICBvcHRzLnNldGRlZmF1bHQo
InRyeWxhc3QiLCBGYWxzZSkKKyAgICBvcHRzLnNldGRlZmF1bHQoImhvb2t3cmFwcGVyIiwgRmFs
c2UpCisgICAgb3B0cy5zZXRkZWZhdWx0KCJvcHRpb25hbGhvb2siLCBGYWxzZSkKKworCitjbGFz
cyBfVGFnVHJhY2VyOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fdGFn
MnByb2MgPSB7fQorICAgICAgICBzZWxmLndyaXRlciA9IE5vbmUKKyAgICAgICAgc2VsZi5pbmRl
bnQgPSAwCisKKyAgICBkZWYgZ2V0KHNlbGYsIG5hbWUpOgorICAgICAgICByZXR1cm4gX1RhZ1Ry
YWNlclN1YihzZWxmLCAobmFtZSwpKQorCisgICAgZGVmIGZvcm1hdF9tZXNzYWdlKHNlbGYsIHRh
Z3MsIGFyZ3MpOgorICAgICAgICBpZiBpc2luc3RhbmNlKGFyZ3NbLTFdLCBkaWN0KToKKyAgICAg
ICAgICAgIGV4dHJhID0gYXJnc1stMV0KKyAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzotMV0KKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIGV4dHJhID0ge30KKworICAgICAgICBjb250ZW50ID0g
IiAiLmpvaW4obWFwKHN0ciwgYXJncykpCisgICAgICAgIGluZGVudCA9ICIgICIgKiBzZWxmLmlu
ZGVudAorCisgICAgICAgIGxpbmVzID0gWworICAgICAgICAgICAgIiVzJXMgWyVzXVxuIiAlIChp
bmRlbnQsIGNvbnRlbnQsICI6Ii5qb2luKHRhZ3MpKQorICAgICAgICBdCisKKyAgICAgICAgZm9y
IG5hbWUsIHZhbHVlIGluIGV4dHJhLml0ZW1zKCk6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQo
IiVzICAgICVzOiAlc1xuIiAlIChpbmRlbnQsIG5hbWUsIHZhbHVlKSkKKyAgICAgICAgcmV0dXJu
IGxpbmVzCisKKyAgICBkZWYgcHJvY2Vzc21lc3NhZ2Uoc2VsZiwgdGFncywgYXJncyk6CisgICAg
ICAgIGlmIHNlbGYud3JpdGVyIGlzIG5vdCBOb25lIGFuZCBhcmdzOgorICAgICAgICAgICAgbGlu
ZXMgPSBzZWxmLmZvcm1hdF9tZXNzYWdlKHRhZ3MsIGFyZ3MpCisgICAgICAgICAgICBzZWxmLndy
aXRlcignJy5qb2luKGxpbmVzKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fdGFn
MnByb2NbdGFnc10odGFncywgYXJncykKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAg
ICAgICAgcGFzcworCisgICAgZGVmIHNldHdyaXRlcihzZWxmLCB3cml0ZXIpOgorICAgICAgICBz
ZWxmLndyaXRlciA9IHdyaXRlcgorCisgICAgZGVmIHNldHByb2Nlc3NvcihzZWxmLCB0YWdzLCBw
cm9jZXNzb3IpOgorICAgICAgICBpZiBpc2luc3RhbmNlKHRhZ3MsIHN0cik6CisgICAgICAgICAg
ICB0YWdzID0gdHVwbGUodGFncy5zcGxpdCgiOiIpKQorICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgYXNzZXJ0IGlzaW5zdGFuY2UodGFncywgdHVwbGUpCisgICAgICAgIHNlbGYuX3RhZzJwcm9j
W3RhZ3NdID0gcHJvY2Vzc29yCisKKworY2xhc3MgX1RhZ1RyYWNlclN1YjoKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgcm9vdCwgdGFncyk6CisgICAgICAgIHNlbGYucm9vdCA9IHJvb3QKKyAgICAg
ICAgc2VsZi50YWdzID0gdGFncworCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsICphcmdzKToKKyAg
ICAgICAgc2VsZi5yb290LnByb2Nlc3NtZXNzYWdlKHNlbGYudGFncywgYXJncykKKworICAgIGRl
ZiBzZXRteXByb2Nlc3NvcihzZWxmLCBwcm9jZXNzb3IpOgorICAgICAgICBzZWxmLnJvb3Quc2V0
cHJvY2Vzc29yKHNlbGYudGFncywgcHJvY2Vzc29yKQorCisgICAgZGVmIGdldChzZWxmLCBuYW1l
KToKKyAgICAgICAgcmV0dXJuIHNlbGYuX19jbGFzc19fKHNlbGYucm9vdCwgc2VsZi50YWdzICsg
KG5hbWUsKSkKKworCitkZWYgX3JhaXNlX3dyYXBmYWlsKHdyYXBfY29udHJvbGxlciwgbXNnKToK
KyAgICBjbyA9IHdyYXBfY29udHJvbGxlci5naV9jb2RlCisgICAgcmFpc2UgUnVudGltZUVycm9y
KCJ3cmFwX2NvbnRyb2xsZXIgYXQgJXIgJXM6JWQgJXMiICUKKyAgICAgICAgICAgICAgICAgICAo
Y28uY29fbmFtZSwgY28uY29fZmlsZW5hbWUsIGNvLmNvX2ZpcnN0bGluZW5vLCBtc2cpKQorCisK
K2RlZiBfd3JhcHBlZF9jYWxsKHdyYXBfY29udHJvbGxlciwgZnVuYyk6CisgICAgIiIiIFdyYXAg
Y2FsbGluZyB0byBhIGZ1bmN0aW9uIHdpdGggYSBnZW5lcmF0b3Igd2hpY2ggbmVlZHMgdG8geWll
bGQKKyAgICBleGFjdGx5IG9uY2UuICBUaGUgeWllbGQgcG9pbnQgd2lsbCB0cmlnZ2VyIGNhbGxp
bmcgdGhlIHdyYXBwZWQgZnVuY3Rpb24KKyAgICBhbmQgcmV0dXJuIGl0cyBfQ2FsbE91dGNvbWUg
dG8gdGhlIHlpZWxkIHBvaW50LiAgVGhlIGdlbmVyYXRvciB0aGVuIG5lZWRzCisgICAgdG8gZmlu
aXNoIChyYWlzZSBTdG9wSXRlcmF0aW9uKSBpbiBvcmRlciBmb3IgdGhlIHdyYXBwZWQgY2FsbCB0
byBjb21wbGV0ZS4KKyAgICAiIiIKKyAgICB0cnk6CisgICAgICAgIG5leHQod3JhcF9jb250cm9s
bGVyKSAgICMgZmlyc3QgeWllbGQKKyAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAg
X3JhaXNlX3dyYXBmYWlsKHdyYXBfY29udHJvbGxlciwgImRpZCBub3QgeWllbGQiKQorICAgIGNh
bGxfb3V0Y29tZSA9IF9DYWxsT3V0Y29tZShmdW5jKQorICAgIHRyeToKKyAgICAgICAgd3JhcF9j
b250cm9sbGVyLnNlbmQoY2FsbF9vdXRjb21lKQorICAgICAgICBfcmFpc2Vfd3JhcGZhaWwod3Jh
cF9jb250cm9sbGVyLCAiaGFzIHNlY29uZCB5aWVsZCIpCisgICAgZXhjZXB0IFN0b3BJdGVyYXRp
b246CisgICAgICAgIHBhc3MKKyAgICByZXR1cm4gY2FsbF9vdXRjb21lLmdldF9yZXN1bHQoKQor
CisKK2NsYXNzIF9DYWxsT3V0Y29tZToKKyAgICAiIiIgT3V0Y29tZSBvZiBhIGZ1bmN0aW9uIGNh
bGwsIGVpdGhlciBhbiBleGNlcHRpb24gb3IgYSBwcm9wZXIgcmVzdWx0LgorICAgIENhbGxpbmcg
dGhlIGBgZ2V0X3Jlc3VsdGBgIG1ldGhvZCB3aWxsIHJldHVybiB0aGUgcmVzdWx0IG9yIHJlcmFp
c2UKKyAgICB0aGUgZXhjZXB0aW9uIHJhaXNlZCB3aGVuIHRoZSBmdW5jdGlvbiB3YXMgY2FsbGVk
LiAiIiIKKyAgICBleGNpbmZvID0gTm9uZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZ1bmMp
OgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnJlc3VsdCA9IGZ1bmMoKQorICAgICAg
ICBleGNlcHQgQmFzZUV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHNlbGYuZXhjaW5mbyA9IHN5cy5l
eGNfaW5mbygpCisKKyAgICBkZWYgZm9yY2VfcmVzdWx0KHNlbGYsIHJlc3VsdCk6CisgICAgICAg
IHNlbGYucmVzdWx0ID0gcmVzdWx0CisgICAgICAgIHNlbGYuZXhjaW5mbyA9IE5vbmUKKworICAg
IGRlZiBnZXRfcmVzdWx0KHNlbGYpOgorICAgICAgICBpZiBzZWxmLmV4Y2luZm8gaXMgTm9uZToK
KyAgICAgICAgICAgIHJldHVybiBzZWxmLnJlc3VsdAorICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgZXggPSBzZWxmLmV4Y2luZm8KKyAgICAgICAgICAgIGlmIF9weTM6CisgICAgICAgICAgICAg
ICAgcmFpc2UgZXhbMV0ud2l0aF90cmFjZWJhY2soZXhbMl0pCisgICAgICAgICAgICBfcmVyYWlz
ZSgqZXgpICAjIG5vcWEKKworaWYgbm90IF9weTM6CisgICAgZXhlYygiIiIKK2RlZiBfcmVyYWlz
ZShjbHMsIHZhbCwgdGIpOgorICAgIHJhaXNlIGNscywgdmFsLCB0YgorIiIiKQorCisKK2NsYXNz
IF9UcmFjZWRIb29rRXhlY3V0aW9uOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwbHVnaW5tYW5h
Z2VyLCBiZWZvcmUsIGFmdGVyKToKKyAgICAgICAgc2VsZi5wbHVnaW5tYW5hZ2VyID0gcGx1Z2lu
bWFuYWdlcgorICAgICAgICBzZWxmLmJlZm9yZSA9IGJlZm9yZQorICAgICAgICBzZWxmLmFmdGVy
ID0gYWZ0ZXIKKyAgICAgICAgc2VsZi5vbGRjYWxsID0gcGx1Z2lubWFuYWdlci5faW5uZXJfaG9v
a2V4ZWMKKyAgICAgICAgYXNzZXJ0IG5vdCBpc2luc3RhbmNlKHNlbGYub2xkY2FsbCwgX1RyYWNl
ZEhvb2tFeGVjdXRpb24pCisgICAgICAgIHNlbGYucGx1Z2lubWFuYWdlci5faW5uZXJfaG9va2V4
ZWMgPSBzZWxmCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgaG9vaywgaG9va19pbXBscywga3dh
cmdzKToKKyAgICAgICAgc2VsZi5iZWZvcmUoaG9vay5uYW1lLCBob29rX2ltcGxzLCBrd2FyZ3Mp
CisgICAgICAgIG91dGNvbWUgPSBfQ2FsbE91dGNvbWUobGFtYmRhOiBzZWxmLm9sZGNhbGwoaG9v
aywgaG9va19pbXBscywga3dhcmdzKSkKKyAgICAgICAgc2VsZi5hZnRlcihvdXRjb21lLCBob29r
Lm5hbWUsIGhvb2tfaW1wbHMsIGt3YXJncykKKyAgICAgICAgcmV0dXJuIG91dGNvbWUuZ2V0X3Jl
c3VsdCgpCisKKyAgICBkZWYgdW5kbyhzZWxmKToKKyAgICAgICAgc2VsZi5wbHVnaW5tYW5hZ2Vy
Ll9pbm5lcl9ob29rZXhlYyA9IHNlbGYub2xkY2FsbAorCisKK2NsYXNzIFBsdWdpbk1hbmFnZXIo
b2JqZWN0KToKKyAgICAiIiIgQ29yZSBQbHVnaW5tYW5hZ2VyIGNsYXNzIHdoaWNoIG1hbmFnZXMg
cmVnaXN0cmF0aW9uCisgICAgb2YgcGx1Z2luIG9iamVjdHMgYW5kIDE6TiBob29rIGNhbGxpbmcu
CisKKyAgICBZb3UgY2FuIHJlZ2lzdGVyIG5ldyBob29rcyBieSBjYWxsaW5nIGBgYWRkaG9va3Mo
bW9kdWxlX29yX2NsYXNzKWBgLgorICAgIFlvdSBjYW4gcmVnaXN0ZXIgcGx1Z2luIG9iamVjdHMg
KHdoaWNoIGNvbnRhaW4gaG9va3MpIGJ5IGNhbGxpbmcKKyAgICBgYHJlZ2lzdGVyKHBsdWdpbilg
YC4gIFRoZSBQbHVnaW5tYW5hZ2VyIGlzIGluaXRpYWxpemVkIHdpdGggYQorICAgIHByZWZpeCB0
aGF0IGlzIHNlYXJjaGVkIGZvciBpbiB0aGUgbmFtZXMgb2YgdGhlIGRpY3Qgb2YgcmVnaXN0ZXJl
ZAorICAgIHBsdWdpbiBvYmplY3RzLiAgQW4gb3B0aW9uYWwgZXhjbHVkZWZ1bmMgYWxsb3dzIHRv
IGJsYWNrbGlzdCBuYW1lcyB3aGljaAorICAgIGFyZSBub3QgY29uc2lkZXJlZCBhcyBob29rcyBk
ZXNwaXRlIGEgbWF0Y2hpbmcgcHJlZml4LgorCisgICAgRm9yIGRlYnVnZ2luZyBwdXJwb3NlcyB5
b3UgY2FuIGNhbGwgYGBlbmFibGVfdHJhY2luZygpYGAKKyAgICB3aGljaCB3aWxsIHN1YnNlcXVl
bnRseSBzZW5kIGRlYnVnIGluZm9ybWF0aW9uIHRvIHRoZSB0cmFjZSBoZWxwZXIuCisgICAgIiIi
CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvamVjdF9uYW1lLCBpbXBscHJlZml4PU5vbmUp
OgorICAgICAgICAiIiIgaWYgaW1wbHByZWZpeCBpcyBnaXZlbiBpbXBsZW1lbnRhdGlvbiBmdW5j
dGlvbnMKKyAgICAgICAgd2lsbCBiZSByZWNvZ25pemVkIGlmIHRoZWlyIG5hbWUgbWF0Y2hlcyB0
aGUgaW1wbHByZWZpeC4gIiIiCisgICAgICAgIHNlbGYucHJvamVjdF9uYW1lID0gcHJvamVjdF9u
YW1lCisgICAgICAgIHNlbGYuX25hbWUycGx1Z2luID0ge30KKyAgICAgICAgc2VsZi5fcGx1Z2lu
Mmhvb2tjYWxsZXJzID0ge30KKyAgICAgICAgc2VsZi5fcGx1Z2luX2Rpc3RpbmZvID0gW10KKyAg
ICAgICAgc2VsZi50cmFjZSA9IF9UYWdUcmFjZXIoKS5nZXQoInBsdWdpbm1hbmFnZSIpCisgICAg
ICAgIHNlbGYuaG9vayA9IF9Ib29rUmVsYXkoc2VsZi50cmFjZS5yb290LmdldCgiaG9vayIpKQor
ICAgICAgICBzZWxmLl9pbXBscHJlZml4ID0gaW1wbHByZWZpeAorICAgICAgICBzZWxmLl9pbm5l
cl9ob29rZXhlYyA9IGxhbWJkYSBob29rLCBtZXRob2RzLCBrd2FyZ3M6IFwKKyAgICAgICAgICAg
IF9NdWx0aUNhbGwobWV0aG9kcywga3dhcmdzLCBob29rLnNwZWNfb3B0cykuZXhlY3V0ZSgpCisK
KyAgICBkZWYgX2hvb2tleGVjKHNlbGYsIGhvb2ssIG1ldGhvZHMsIGt3YXJncyk6CisgICAgICAg
ICMgY2FsbGVkIGZyb20gYWxsIGhvb2tjYWxsZXIgaW5zdGFuY2VzLgorICAgICAgICAjIGVuYWJs
ZV90cmFjaW5nIHdpbGwgc2V0IGl0cyBvd24gd3JhcHBpbmcgZnVuY3Rpb24gYXQgc2VsZi5faW5u
ZXJfaG9va2V4ZWMKKyAgICAgICAgcmV0dXJuIHNlbGYuX2lubmVyX2hvb2tleGVjKGhvb2ssIG1l
dGhvZHMsIGt3YXJncykKKworICAgIGRlZiByZWdpc3RlcihzZWxmLCBwbHVnaW4sIG5hbWU9Tm9u
ZSk6CisgICAgICAgICIiIiBSZWdpc3RlciBhIHBsdWdpbiBhbmQgcmV0dXJuIGl0cyBjYW5vbmlj
YWwgbmFtZSBvciBOb25lIGlmIHRoZSBuYW1lCisgICAgICAgIGlzIGJsb2NrZWQgZnJvbSByZWdp
c3RlcmluZy4gIFJhaXNlIGEgVmFsdWVFcnJvciBpZiB0aGUgcGx1Z2luIGlzIGFscmVhZHkKKyAg
ICAgICAgcmVnaXN0ZXJlZC4gIiIiCisgICAgICAgIHBsdWdpbl9uYW1lID0gbmFtZSBvciBzZWxm
LmdldF9jYW5vbmljYWxfbmFtZShwbHVnaW4pCisKKyAgICAgICAgaWYgcGx1Z2luX25hbWUgaW4g
c2VsZi5fbmFtZTJwbHVnaW4gb3IgcGx1Z2luIGluIHNlbGYuX3BsdWdpbjJob29rY2FsbGVyczoK
KyAgICAgICAgICAgIGlmIHNlbGYuX25hbWUycGx1Z2luLmdldChwbHVnaW5fbmFtZSwgLTEpIGlz
IE5vbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuICAjIGJsb2NrZWQgcGx1Z2luLCByZXR1cm4g
Tm9uZSB0byBpbmRpY2F0ZSBubyByZWdpc3RyYXRpb24KKyAgICAgICAgICAgIHJhaXNlIFZhbHVl
RXJyb3IoIlBsdWdpbiBhbHJlYWR5IHJlZ2lzdGVyZWQ6ICVzPSVzXG4lcyIgJQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChwbHVnaW5fbmFtZSwgcGx1Z2luLCBzZWxmLl9uYW1lMnBsdWdp
bikpCisKKyAgICAgICAgIyBYWFggaWYgYW4gZXJyb3IgaGFwcGVucyB3ZSBzaG91bGQgbWFrZSBz
dXJlIG5vIHN0YXRlIGhhcyBiZWVuCisgICAgICAgICMgY2hhbmdlZCBhdCBwb2ludCBvZiByZXR1
cm4KKyAgICAgICAgc2VsZi5fbmFtZTJwbHVnaW5bcGx1Z2luX25hbWVdID0gcGx1Z2luCisKKyAg
ICAgICAgIyByZWdpc3RlciBtYXRjaGluZyBob29rIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgcGx1
Z2luCisgICAgICAgIHNlbGYuX3BsdWdpbjJob29rY2FsbGVyc1twbHVnaW5dID0gaG9va2NhbGxl
cnMgPSBbXQorICAgICAgICBmb3IgbmFtZSBpbiBkaXIocGx1Z2luKToKKyAgICAgICAgICAgIGhv
b2tpbXBsX29wdHMgPSBzZWxmLnBhcnNlX2hvb2tpbXBsX29wdHMocGx1Z2luLCBuYW1lKQorICAg
ICAgICAgICAgaWYgaG9va2ltcGxfb3B0cyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBu
b3JtYWxpemVfaG9va2ltcGxfb3B0cyhob29raW1wbF9vcHRzKQorICAgICAgICAgICAgICAgIG1l
dGhvZCA9IGdldGF0dHIocGx1Z2luLCBuYW1lKQorICAgICAgICAgICAgICAgIGhvb2tpbXBsID0g
SG9va0ltcGwocGx1Z2luLCBwbHVnaW5fbmFtZSwgbWV0aG9kLCBob29raW1wbF9vcHRzKQorICAg
ICAgICAgICAgICAgIGhvb2sgPSBnZXRhdHRyKHNlbGYuaG9vaywgbmFtZSwgTm9uZSkKKyAgICAg
ICAgICAgICAgICBpZiBob29rIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGhvb2sgPSBf
SG9va0NhbGxlcihuYW1lLCBzZWxmLl9ob29rZXhlYykKKyAgICAgICAgICAgICAgICAgICAgc2V0
YXR0cihzZWxmLmhvb2ssIG5hbWUsIGhvb2spCisgICAgICAgICAgICAgICAgZWxpZiBob29rLmhh
c19zcGVjKCk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3ZlcmlmeV9ob29rKGhvb2ssIGhv
b2tpbXBsKQorICAgICAgICAgICAgICAgICAgICBob29rLl9tYXliZV9hcHBseV9oaXN0b3J5KGhv
b2tpbXBsKQorICAgICAgICAgICAgICAgIGhvb2suX2FkZF9ob29raW1wbChob29raW1wbCkKKyAg
ICAgICAgICAgICAgICBob29rY2FsbGVycy5hcHBlbmQoaG9vaykKKyAgICAgICAgcmV0dXJuIHBs
dWdpbl9uYW1lCisKKyAgICBkZWYgcGFyc2VfaG9va2ltcGxfb3B0cyhzZWxmLCBwbHVnaW4sIG5h
bWUpOgorICAgICAgICBtZXRob2QgPSBnZXRhdHRyKHBsdWdpbiwgbmFtZSkKKyAgICAgICAgcmVz
ID0gZ2V0YXR0cihtZXRob2QsIHNlbGYucHJvamVjdF9uYW1lICsgIl9pbXBsIiwgTm9uZSkKKyAg
ICAgICAgaWYgcmVzIGlzIG5vdCBOb25lIGFuZCBub3QgaXNpbnN0YW5jZShyZXMsIGRpY3QpOgor
ICAgICAgICAgICAgIyBmYWxzZSBwb3NpdGl2ZQorICAgICAgICAgICAgcmVzID0gTm9uZQorICAg
ICAgICBlbGlmIHJlcyBpcyBOb25lIGFuZCBzZWxmLl9pbXBscHJlZml4IGFuZCBuYW1lLnN0YXJ0
c3dpdGgoc2VsZi5faW1wbHByZWZpeCk6CisgICAgICAgICAgICByZXMgPSB7fQorICAgICAgICBy
ZXR1cm4gcmVzCisKKyAgICBkZWYgdW5yZWdpc3RlcihzZWxmLCBwbHVnaW49Tm9uZSwgbmFtZT1O
b25lKToKKyAgICAgICAgIiIiIHVucmVnaXN0ZXIgYSBwbHVnaW4gb2JqZWN0IGFuZCBhbGwgaXRz
IGNvbnRhaW5lZCBob29rIGltcGxlbWVudGF0aW9ucworICAgICAgICBmcm9tIGludGVybmFsIGRh
dGEgc3RydWN0dXJlcy4gIiIiCisgICAgICAgIGlmIG5hbWUgaXMgTm9uZToKKyAgICAgICAgICAg
IGFzc2VydCBwbHVnaW4gaXMgbm90IE5vbmUsICJvbmUgb2YgbmFtZSBvciBwbHVnaW4gbmVlZHMg
dG8gYmUgc3BlY2lmaWVkIgorICAgICAgICAgICAgbmFtZSA9IHNlbGYuZ2V0X25hbWUocGx1Z2lu
KQorCisgICAgICAgIGlmIHBsdWdpbiBpcyBOb25lOgorICAgICAgICAgICAgcGx1Z2luID0gc2Vs
Zi5nZXRfcGx1Z2luKG5hbWUpCisKKyAgICAgICAgIyBpZiBzZWxmLl9uYW1lMnBsdWdpbltuYW1l
XSA9PSBOb25lIHJlZ2lzdHJhdGlvbiB3YXMgYmxvY2tlZDogaWdub3JlCisgICAgICAgIGlmIHNl
bGYuX25hbWUycGx1Z2luLmdldChuYW1lKToKKyAgICAgICAgICAgIGRlbCBzZWxmLl9uYW1lMnBs
dWdpbltuYW1lXQorCisgICAgICAgIGZvciBob29rY2FsbGVyIGluIHNlbGYuX3BsdWdpbjJob29r
Y2FsbGVycy5wb3AocGx1Z2luLCBbXSk6CisgICAgICAgICAgICBob29rY2FsbGVyLl9yZW1vdmVf
cGx1Z2luKHBsdWdpbikKKworICAgICAgICByZXR1cm4gcGx1Z2luCisKKyAgICBkZWYgc2V0X2Js
b2NrZWQoc2VsZiwgbmFtZSk6CisgICAgICAgICIiIiBibG9jayByZWdpc3RyYXRpb25zIG9mIHRo
ZSBnaXZlbiBuYW1lLCB1bnJlZ2lzdGVyIGlmIGFscmVhZHkgcmVnaXN0ZXJlZC4gIiIiCisgICAg
ICAgIHNlbGYudW5yZWdpc3RlcihuYW1lPW5hbWUpCisgICAgICAgIHNlbGYuX25hbWUycGx1Z2lu
W25hbWVdID0gTm9uZQorCisgICAgZGVmIGlzX2Jsb2NrZWQoc2VsZiwgbmFtZSk6CisgICAgICAg
ICIiIiByZXR1cm4gVHJ1ZSBpZiB0aGUgbmFtZSBibG9ncyByZWdpc3RlcmluZyBwbHVnaW5zIG9m
IHRoYXQgbmFtZS4gIiIiCisgICAgICAgIHJldHVybiBuYW1lIGluIHNlbGYuX25hbWUycGx1Z2lu
IGFuZCBzZWxmLl9uYW1lMnBsdWdpbltuYW1lXSBpcyBOb25lCisKKyAgICBkZWYgYWRkX2hvb2tz
cGVjcyhzZWxmLCBtb2R1bGVfb3JfY2xhc3MpOgorICAgICAgICAiIiIgYWRkIG5ldyBob29rIHNw
ZWNpZmljYXRpb25zIGRlZmluZWQgaW4gdGhlIGdpdmVuIG1vZHVsZV9vcl9jbGFzcy4KKyAgICAg
ICAgRnVuY3Rpb25zIGFyZSByZWNvZ25pemVkIGlmIHRoZXkgaGF2ZSBiZWVuIGRlY29yYXRlZCBh
Y2NvcmRpbmdseS4gIiIiCisgICAgICAgIG5hbWVzID0gW10KKyAgICAgICAgZm9yIG5hbWUgaW4g
ZGlyKG1vZHVsZV9vcl9jbGFzcyk6CisgICAgICAgICAgICBzcGVjX29wdHMgPSBzZWxmLnBhcnNl
X2hvb2tzcGVjX29wdHMobW9kdWxlX29yX2NsYXNzLCBuYW1lKQorICAgICAgICAgICAgaWYgc3Bl
Y19vcHRzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGhjID0gZ2V0YXR0cihzZWxmLmhv
b2ssIG5hbWUsIE5vbmUpCisgICAgICAgICAgICAgICAgaWYgaGMgaXMgTm9uZToKKyAgICAgICAg
ICAgICAgICAgICAgaGMgPSBfSG9va0NhbGxlcihuYW1lLCBzZWxmLl9ob29rZXhlYywgbW9kdWxl
X29yX2NsYXNzLCBzcGVjX29wdHMpCisgICAgICAgICAgICAgICAgICAgIHNldGF0dHIoc2VsZi5o
b29rLCBuYW1lLCBoYykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAg
ICAjIHBsdWdpbnMgcmVnaXN0ZXJlZCB0aGlzIGhvb2sgd2l0aG91dCBrbm93aW5nIHRoZSBzcGVj
CisgICAgICAgICAgICAgICAgICAgIGhjLnNldF9zcGVjaWZpY2F0aW9uKG1vZHVsZV9vcl9jbGFz
cywgc3BlY19vcHRzKQorICAgICAgICAgICAgICAgICAgICBmb3IgaG9va2Z1bmN0aW9uIGluICho
Yy5fd3JhcHBlcnMgKyBoYy5fbm9ud3JhcHBlcnMpOgorICAgICAgICAgICAgICAgICAgICAgICAg
c2VsZi5fdmVyaWZ5X2hvb2soaGMsIGhvb2tmdW5jdGlvbikKKyAgICAgICAgICAgICAgICBuYW1l
cy5hcHBlbmQobmFtZSkKKworICAgICAgICBpZiBub3QgbmFtZXM6CisgICAgICAgICAgICByYWlz
ZSBWYWx1ZUVycm9yKCJkaWQgbm90IGZpbmQgYW55ICVyIGhvb2tzIGluICVyIiAlCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChzZWxmLnByb2plY3RfbmFtZSwgbW9kdWxlX29yX2NsYXNz
KSkKKworICAgIGRlZiBwYXJzZV9ob29rc3BlY19vcHRzKHNlbGYsIG1vZHVsZV9vcl9jbGFzcywg
bmFtZSk6CisgICAgICAgIG1ldGhvZCA9IGdldGF0dHIobW9kdWxlX29yX2NsYXNzLCBuYW1lKQor
ICAgICAgICByZXR1cm4gZ2V0YXR0cihtZXRob2QsIHNlbGYucHJvamVjdF9uYW1lICsgIl9zcGVj
IiwgTm9uZSkKKworICAgIGRlZiBnZXRfcGx1Z2lucyhzZWxmKToKKyAgICAgICAgIiIiIHJldHVy
biB0aGUgc2V0IG9mIHJlZ2lzdGVyZWQgcGx1Z2lucy4gIiIiCisgICAgICAgIHJldHVybiBzZXQo
c2VsZi5fcGx1Z2luMmhvb2tjYWxsZXJzKQorCisgICAgZGVmIGlzX3JlZ2lzdGVyZWQoc2VsZiwg
cGx1Z2luKToKKyAgICAgICAgIiIiIFJldHVybiBUcnVlIGlmIHRoZSBwbHVnaW4gaXMgYWxyZWFk
eSByZWdpc3RlcmVkLiAiIiIKKyAgICAgICAgcmV0dXJuIHBsdWdpbiBpbiBzZWxmLl9wbHVnaW4y
aG9va2NhbGxlcnMKKworICAgIGRlZiBnZXRfY2Fub25pY2FsX25hbWUoc2VsZiwgcGx1Z2luKToK
KyAgICAgICAgIiIiIFJldHVybiBjYW5vbmljYWwgbmFtZSBmb3IgYSBwbHVnaW4gb2JqZWN0LiBO
b3RlIHRoYXQgYSBwbHVnaW4KKyAgICAgICAgbWF5IGJlIHJlZ2lzdGVyZWQgdW5kZXIgYSBkaWZm
ZXJlbnQgbmFtZSB3aGljaCB3YXMgc3BlY2lmaWVkCisgICAgICAgIGJ5IHRoZSBjYWxsZXIgb2Yg
cmVnaXN0ZXIocGx1Z2luLCBuYW1lKS4gVG8gb2J0YWluIHRoZSBuYW1lCisgICAgICAgIG9mIGFu
IHJlZ2lzdGVyZWQgcGx1Z2luIHVzZSBgYGdldF9uYW1lKHBsdWdpbilgYCBpbnN0ZWFkLiIiIgor
ICAgICAgICByZXR1cm4gZ2V0YXR0cihwbHVnaW4sICJfX25hbWVfXyIsIE5vbmUpIG9yIHN0cihp
ZChwbHVnaW4pKQorCisgICAgZGVmIGdldF9wbHVnaW4oc2VsZiwgbmFtZSk6CisgICAgICAgICIi
IiBSZXR1cm4gYSBwbHVnaW4gb3IgTm9uZSBmb3IgdGhlIGdpdmVuIG5hbWUuICIiIgorICAgICAg
ICByZXR1cm4gc2VsZi5fbmFtZTJwbHVnaW4uZ2V0KG5hbWUpCisKKyAgICBkZWYgZ2V0X25hbWUo
c2VsZiwgcGx1Z2luKToKKyAgICAgICAgIiIiIFJldHVybiBuYW1lIGZvciByZWdpc3RlcmVkIHBs
dWdpbiBvciBOb25lIGlmIG5vdCByZWdpc3RlcmVkLiAiIiIKKyAgICAgICAgZm9yIG5hbWUsIHZh
bCBpbiBzZWxmLl9uYW1lMnBsdWdpbi5pdGVtcygpOgorICAgICAgICAgICAgaWYgcGx1Z2luID09
IHZhbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gbmFtZQorCisgICAgZGVmIF92ZXJpZnlfaG9v
ayhzZWxmLCBob29rLCBob29raW1wbCk6CisgICAgICAgIGlmIGhvb2suaXNfaGlzdG9yaWMoKSBh
bmQgaG9va2ltcGwuaG9va3dyYXBwZXI6CisgICAgICAgICAgICByYWlzZSBQbHVnaW5WYWxpZGF0
aW9uRXJyb3IoCisgICAgICAgICAgICAgICAgIlBsdWdpbiAlclxuaG9vayAlclxuaGlzdG9yaWMg
aW5jb21wYXRpYmxlIHRvIGhvb2t3cmFwcGVyIiAlCisgICAgICAgICAgICAgICAgKGhvb2tpbXBs
LnBsdWdpbl9uYW1lLCBob29rLm5hbWUpKQorCisgICAgICAgIGZvciBhcmcgaW4gaG9va2ltcGwu
YXJnbmFtZXM6CisgICAgICAgICAgICBpZiBhcmcgbm90IGluIGhvb2suYXJnbmFtZXM6CisgICAg
ICAgICAgICAgICAgcmFpc2UgUGx1Z2luVmFsaWRhdGlvbkVycm9yKAorICAgICAgICAgICAgICAg
ICAgICAiUGx1Z2luICVyXG5ob29rICVyXG5hcmd1bWVudCAlciBub3QgYXZhaWxhYmxlXG4iCisg
ICAgICAgICAgICAgICAgICAgICJwbHVnaW4gZGVmaW5pdGlvbjogJXNcbiIKKyAgICAgICAgICAg
ICAgICAgICAgImF2YWlsYWJsZSBob29rYXJnczogJXMiICUKKyAgICAgICAgICAgICAgICAgICAg
KGhvb2tpbXBsLnBsdWdpbl9uYW1lLCBob29rLm5hbWUsIGFyZywKKyAgICAgICAgICAgICAgICAg
ICAgX2Zvcm1hdGRlZihob29raW1wbC5mdW5jdGlvbiksICIsICIuam9pbihob29rLmFyZ25hbWVz
KSkpCisKKyAgICBkZWYgY2hlY2tfcGVuZGluZyhzZWxmKToKKyAgICAgICAgIiIiIFZlcmlmeSB0
aGF0IGFsbCBob29rcyB3aGljaCBoYXZlIG5vdCBiZWVuIHZlcmlmaWVkIGFnYWluc3QKKyAgICAg
ICAgYSBob29rIHNwZWNpZmljYXRpb24gYXJlIG9wdGlvbmFsLCBvdGhlcndpc2UgcmFpc2UgUGx1
Z2luVmFsaWRhdGlvbkVycm9yIiIiCisgICAgICAgIGZvciBuYW1lIGluIHNlbGYuaG9vay5fX2Rp
Y3RfXzoKKyAgICAgICAgICAgIGlmIG5hbWVbMF0gIT0gIl8iOgorICAgICAgICAgICAgICAgIGhv
b2sgPSBnZXRhdHRyKHNlbGYuaG9vaywgbmFtZSkKKyAgICAgICAgICAgICAgICBpZiBub3QgaG9v
ay5oYXNfc3BlYygpOgorICAgICAgICAgICAgICAgICAgICBmb3IgaG9va2ltcGwgaW4gKGhvb2su
X3dyYXBwZXJzICsgaG9vay5fbm9ud3JhcHBlcnMpOgorICAgICAgICAgICAgICAgICAgICAgICAg
aWYgbm90IGhvb2tpbXBsLm9wdGlvbmFsaG9vazoKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByYWlzZSBQbHVnaW5WYWxpZGF0aW9uRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJ1bmtub3duIGhvb2sgJXIgaW4gcGx1Z2luICVyIiAlCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChuYW1lLCBob29raW1wbC5wbHVnaW4pKQorCisgICAgZGVmIGxvYWRf
c2V0dXB0b29sc19lbnRyeXBvaW50cyhzZWxmLCBlbnRyeXBvaW50X25hbWUpOgorICAgICAgICAi
IiIgTG9hZCBtb2R1bGVzIGZyb20gcXVlcnlpbmcgdGhlIHNwZWNpZmllZCBzZXR1cHRvb2xzIGVu
dHJ5cG9pbnQgbmFtZS4KKyAgICAgICAgUmV0dXJuIHRoZSBudW1iZXIgb2YgbG9hZGVkIHBsdWdp
bnMuICIiIgorICAgICAgICBmcm9tIHBrZ19yZXNvdXJjZXMgaW1wb3J0IGl0ZXJfZW50cnlfcG9p
bnRzLCBEaXN0cmlidXRpb25Ob3RGb3VuZAorICAgICAgICBmb3IgZXAgaW4gaXRlcl9lbnRyeV9w
b2ludHMoZW50cnlwb2ludF9uYW1lKToKKyAgICAgICAgICAgICMgaXMgdGhlIHBsdWdpbiByZWdp
c3RlcmVkIG9yIGJsb2NrZWQ/CisgICAgICAgICAgICBpZiBzZWxmLmdldF9wbHVnaW4oZXAubmFt
ZSkgb3Igc2VsZi5pc19ibG9ja2VkKGVwLm5hbWUpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVl
CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcGx1Z2luID0gZXAubG9hZCgpCisg
ICAgICAgICAgICBleGNlcHQgRGlzdHJpYnV0aW9uTm90Rm91bmQ6CisgICAgICAgICAgICAgICAg
Y29udGludWUKKyAgICAgICAgICAgIHNlbGYucmVnaXN0ZXIocGx1Z2luLCBuYW1lPWVwLm5hbWUp
CisgICAgICAgICAgICBzZWxmLl9wbHVnaW5fZGlzdGluZm8uYXBwZW5kKChwbHVnaW4sIGVwLmRp
c3QpKQorICAgICAgICByZXR1cm4gbGVuKHNlbGYuX3BsdWdpbl9kaXN0aW5mbykKKworICAgIGRl
ZiBsaXN0X3BsdWdpbl9kaXN0aW5mbyhzZWxmKToKKyAgICAgICAgIiIiIHJldHVybiBsaXN0IG9m
IGRpc3RpbmZvL3BsdWdpbiB0dXBsZXMgZm9yIGFsbCBzZXR1cHRvb2xzIHJlZ2lzdGVyZWQKKyAg
ICAgICAgcGx1Z2lucy4gIiIiCisgICAgICAgIHJldHVybiBsaXN0KHNlbGYuX3BsdWdpbl9kaXN0
aW5mbykKKworICAgIGRlZiBsaXN0X25hbWVfcGx1Z2luKHNlbGYpOgorICAgICAgICAiIiIgcmV0
dXJuIGxpc3Qgb2YgbmFtZS9wbHVnaW4gcGFpcnMuICIiIgorICAgICAgICByZXR1cm4gbGlzdChz
ZWxmLl9uYW1lMnBsdWdpbi5pdGVtcygpKQorCisgICAgZGVmIGdldF9ob29rY2FsbGVycyhzZWxm
LCBwbHVnaW4pOgorICAgICAgICAiIiIgZ2V0IGFsbCBob29rIGNhbGxlcnMgZm9yIHRoZSBzcGVj
aWZpZWQgcGx1Z2luLiAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3BsdWdpbjJob29rY2FsbGVy
cy5nZXQocGx1Z2luKQorCisgICAgZGVmIGFkZF9ob29rY2FsbF9tb25pdG9yaW5nKHNlbGYsIGJl
Zm9yZSwgYWZ0ZXIpOgorICAgICAgICAiIiIgYWRkIGJlZm9yZS9hZnRlciB0cmFjaW5nIGZ1bmN0
aW9ucyBmb3IgYWxsIGhvb2tzCisgICAgICAgIGFuZCByZXR1cm4gYW4gdW5kbyBmdW5jdGlvbiB3
aGljaCwgd2hlbiBjYWxsZWQsCisgICAgICAgIHdpbGwgcmVtb3ZlIHRoZSBhZGRlZCB0cmFjZXJz
LgorCisgICAgICAgIGBgYmVmb3JlKGhvb2tfbmFtZSwgaG9va19pbXBscywga3dhcmdzKWBgIHdp
bGwgYmUgY2FsbGVkIGFoZWFkCisgICAgICAgIG9mIGFsbCBob29rIGNhbGxzIGFuZCByZWNlaXZl
IGEgaG9va2NhbGxlciBpbnN0YW5jZSwgYSBsaXN0CisgICAgICAgIG9mIEhvb2tJbXBsIGluc3Rh
bmNlcyBhbmQgdGhlIGtleXdvcmQgYXJndW1lbnRzIGZvciB0aGUgaG9vayBjYWxsLgorCisgICAg
ICAgIGBgYWZ0ZXIob3V0Y29tZSwgaG9va19uYW1lLCBob29rX2ltcGxzLCBrd2FyZ3MpYGAgcmVj
ZWl2ZXMgdGhlCisgICAgICAgIHNhbWUgYXJndW1lbnRzIGFzIGBgYmVmb3JlYGAgYnV0IGFsc28g
YSA6cHk6Y2xhc3M6YF9DYWxsT3V0Y29tZWBgIG9iamVjdAorICAgICAgICB3aGljaCByZXByZXNl
bnRzIHRoZSByZXN1bHQgb2YgdGhlIG92ZXJhbGwgaG9vayBjYWxsLgorICAgICAgICAiIiIKKyAg
ICAgICAgcmV0dXJuIF9UcmFjZWRIb29rRXhlY3V0aW9uKHNlbGYsIGJlZm9yZSwgYWZ0ZXIpLnVu
ZG8KKworICAgIGRlZiBlbmFibGVfdHJhY2luZyhzZWxmKToKKyAgICAgICAgIiIiIGVuYWJsZSB0
cmFjaW5nIG9mIGhvb2sgY2FsbHMgYW5kIHJldHVybiBhbiB1bmRvIGZ1bmN0aW9uLiAiIiIKKyAg
ICAgICAgaG9va3RyYWNlID0gc2VsZi5ob29rLl90cmFjZQorCisgICAgICAgIGRlZiBiZWZvcmUo
aG9va19uYW1lLCBtZXRob2RzLCBrd2FyZ3MpOgorICAgICAgICAgICAgaG9va3RyYWNlLnJvb3Qu
aW5kZW50ICs9IDEKKyAgICAgICAgICAgIGhvb2t0cmFjZShob29rX25hbWUsIGt3YXJncykKKwor
ICAgICAgICBkZWYgYWZ0ZXIob3V0Y29tZSwgaG9va19uYW1lLCBtZXRob2RzLCBrd2FyZ3MpOgor
ICAgICAgICAgICAgaWYgb3V0Y29tZS5leGNpbmZvIGlzIE5vbmU6CisgICAgICAgICAgICAgICAg
aG9va3RyYWNlKCJmaW5pc2giLCBob29rX25hbWUsICItLT4iLCBvdXRjb21lLnJlc3VsdCkKKyAg
ICAgICAgICAgIGhvb2t0cmFjZS5yb290LmluZGVudCAtPSAxCisKKyAgICAgICAgcmV0dXJuIHNl
bGYuYWRkX2hvb2tjYWxsX21vbml0b3JpbmcoYmVmb3JlLCBhZnRlcikKKworICAgIGRlZiBzdWJz
ZXRfaG9va19jYWxsZXIoc2VsZiwgbmFtZSwgcmVtb3ZlX3BsdWdpbnMpOgorICAgICAgICAiIiIg
UmV0dXJuIGEgbmV3IF9Ib29rQ2FsbGVyIGluc3RhbmNlIGZvciB0aGUgbmFtZWQgbWV0aG9kCisg
ICAgICAgIHdoaWNoIG1hbmFnZXMgY2FsbHMgdG8gYWxsIHJlZ2lzdGVyZWQgcGx1Z2lucyBleGNl
cHQgdGhlCisgICAgICAgIG9uZXMgZnJvbSByZW1vdmVfcGx1Z2lucy4gIiIiCisgICAgICAgIG9y
aWcgPSBnZXRhdHRyKHNlbGYuaG9vaywgbmFtZSkKKyAgICAgICAgcGx1Z2luc190b19yZW1vdmUg
PSBbcGx1ZyBmb3IgcGx1ZyBpbiByZW1vdmVfcGx1Z2lucyBpZiBoYXNhdHRyKHBsdWcsIG5hbWUp
XQorICAgICAgICBpZiBwbHVnaW5zX3RvX3JlbW92ZToKKyAgICAgICAgICAgIGhjID0gX0hvb2tD
YWxsZXIob3JpZy5uYW1lLCBvcmlnLl9ob29rZXhlYywgb3JpZy5fc3BlY21vZHVsZV9vcl9jbGFz
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZy5zcGVjX29wdHMpCisgICAgICAg
ICAgICBmb3IgaG9va2ltcGwgaW4gKG9yaWcuX3dyYXBwZXJzICsgb3JpZy5fbm9ud3JhcHBlcnMp
OgorICAgICAgICAgICAgICAgIHBsdWdpbiA9IGhvb2tpbXBsLnBsdWdpbgorICAgICAgICAgICAg
ICAgIGlmIHBsdWdpbiBub3QgaW4gcGx1Z2luc190b19yZW1vdmU6CisgICAgICAgICAgICAgICAg
ICAgIGhjLl9hZGRfaG9va2ltcGwoaG9va2ltcGwpCisgICAgICAgICAgICAgICAgICAgICMgd2Ug
YWxzbyBrZWVwIHRyYWNrIG9mIHRoaXMgaG9vayBjYWxsZXIgc28gaXQKKyAgICAgICAgICAgICAg
ICAgICAgIyBnZXRzIHByb3Blcmx5IHJlbW92ZWQgb24gcGx1Z2luIHVucmVnaXN0cmF0aW9uCisg
ICAgICAgICAgICAgICAgICAgIHNlbGYuX3BsdWdpbjJob29rY2FsbGVycy5zZXRkZWZhdWx0KHBs
dWdpbiwgW10pLmFwcGVuZChoYykKKyAgICAgICAgICAgIHJldHVybiBoYworICAgICAgICByZXR1
cm4gb3JpZworCisKK2NsYXNzIF9NdWx0aUNhbGw6CisgICAgIiIiIGV4ZWN1dGUgYSBjYWxsIGlu
dG8gbXVsdGlwbGUgcHl0aG9uIGZ1bmN0aW9ucy9tZXRob2RzLiAiIiIKKworICAgICMgWFhYIG5v
dGUgdGhhdCB0aGUgX19tdWx0aWNhbGxfXyBhcmd1bWVudCBpcyBzdXBwb3J0ZWQgb25seQorICAg
ICMgZm9yIHB5dGVzdCBjb21wYXRpYmlsaXR5IHJlYXNvbnMuICBJdCB3YXMgbmV2ZXIgb2ZmaWNp
YWxseQorICAgICMgc3VwcG9ydGVkIHRoZXJlIGFuZCBpcyBleHBsaWNpdGx5IGRlcHJlY2F0ZWQg
c2luY2UgMi44CisgICAgIyBzbyB3ZSBjYW4gcmVtb3ZlIGl0IHNvb24sIGFsbG93aW5nIHRvIGF2
b2lkIHRoZSBiZWxvdyByZWN1cnNpb24KKyAgICAjIGluIGV4ZWN1dGUoKSBhbmQgc2ltcGxpZnkv
c3BlZWQgdXAgdGhlIGV4ZWN1dGUgbG9vcC4KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob29r
X2ltcGxzLCBrd2FyZ3MsIHNwZWNvcHRzPXt9KToKKyAgICAgICAgc2VsZi5ob29rX2ltcGxzID0g
aG9va19pbXBscworICAgICAgICBzZWxmLmt3YXJncyA9IGt3YXJncworICAgICAgICBzZWxmLmt3
YXJnc1siX19tdWx0aWNhbGxfXyJdID0gc2VsZgorICAgICAgICBzZWxmLnNwZWNvcHRzID0gc3Bl
Y29wdHMKKworICAgIGRlZiBleGVjdXRlKHNlbGYpOgorICAgICAgICBhbGxfa3dhcmdzID0gc2Vs
Zi5rd2FyZ3MKKyAgICAgICAgc2VsZi5yZXN1bHRzID0gcmVzdWx0cyA9IFtdCisgICAgICAgIGZp
cnN0cmVzdWx0ID0gc2VsZi5zcGVjb3B0cy5nZXQoImZpcnN0cmVzdWx0IikKKworICAgICAgICB3
aGlsZSBzZWxmLmhvb2tfaW1wbHM6CisgICAgICAgICAgICBob29rX2ltcGwgPSBzZWxmLmhvb2tf
aW1wbHMucG9wKCkKKyAgICAgICAgICAgIGFyZ3MgPSBbYWxsX2t3YXJnc1thcmduYW1lXSBmb3Ig
YXJnbmFtZSBpbiBob29rX2ltcGwuYXJnbmFtZXNdCisgICAgICAgICAgICBpZiBob29rX2ltcGwu
aG9va3dyYXBwZXI6CisgICAgICAgICAgICAgICAgcmV0dXJuIF93cmFwcGVkX2NhbGwoaG9va19p
bXBsLmZ1bmN0aW9uKCphcmdzKSwgc2VsZi5leGVjdXRlKQorICAgICAgICAgICAgcmVzID0gaG9v
a19pbXBsLmZ1bmN0aW9uKCphcmdzKQorICAgICAgICAgICAgaWYgcmVzIGlzIG5vdCBOb25lOgor
ICAgICAgICAgICAgICAgIGlmIGZpcnN0cmVzdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gcmVzCisgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocmVzKQorCisgICAgICAgIGlm
IG5vdCBmaXJzdHJlc3VsdDoKKyAgICAgICAgICAgIHJldHVybiByZXN1bHRzCisKKyAgICBkZWYg
X19yZXByX18oc2VsZik6CisgICAgICAgIHN0YXR1cyA9ICIlZCBtZXRocyIgJSAobGVuKHNlbGYu
aG9va19pbXBscyksKQorICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICJyZXN1bHRzIik6CisgICAg
ICAgICAgICBzdGF0dXMgPSAoIiVkIHJlc3VsdHMsICIgJSBsZW4oc2VsZi5yZXN1bHRzKSkgKyBz
dGF0dXMKKyAgICAgICAgcmV0dXJuICI8X011bHRpQ2FsbCAlcywga3dhcmdzPSVyPiIgJSAoc3Rh
dHVzLCBzZWxmLmt3YXJncykKKworCitkZWYgdmFybmFtZXMoZnVuYywgc3RhcnRpbmRleD1Ob25l
KToKKyAgICAiIiIgcmV0dXJuIGFyZ3VtZW50IG5hbWUgdHVwbGUgZm9yIGEgZnVuY3Rpb24sIG1l
dGhvZCwgY2xhc3Mgb3IgY2FsbGFibGUuCisKKyAgICBJbiBjYXNlIG9mIGEgY2xhc3MsIGl0cyAi
X19pbml0X18iIG1ldGhvZCBpcyBjb25zaWRlcmVkLgorICAgIEZvciBtZXRob2RzIHRoZSAic2Vs
ZiIgcGFyYW1ldGVyIGlzIG5vdCBpbmNsdWRlZCB1bmxlc3MgeW91IGFyZSBwYXNzaW5nCisgICAg
YW4gdW5ib3VuZCBtZXRob2Qgd2l0aCBQeXRob24zICh3aGljaCBoYXMgbm8gc3VwcG9ydHMgZm9y
IHVuYm91bmQgbWV0aG9kcykKKyAgICAiIiIKKyAgICBjYWNoZSA9IGdldGF0dHIoZnVuYywgIl9f
ZGljdF9fIiwge30pCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gY2FjaGVbIl92YXJuYW1lcyJd
CisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICBwYXNzCisgICAgaWYgaW5zcGVjdC5pc2Ns
YXNzKGZ1bmMpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmdW5jID0gZnVuYy5fX2luaXRf
XworICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gKCkK
KyAgICAgICAgc3RhcnRpbmRleCA9IDEKKyAgICBlbHNlOgorICAgICAgICBpZiBub3QgaW5zcGVj
dC5pc2Z1bmN0aW9uKGZ1bmMpIGFuZCBub3QgaW5zcGVjdC5pc21ldGhvZChmdW5jKToKKyAgICAg
ICAgICAgIGZ1bmMgPSBnZXRhdHRyKGZ1bmMsICdfX2NhbGxfXycsIGZ1bmMpCisgICAgICAgIGlm
IHN0YXJ0aW5kZXggaXMgTm9uZToKKyAgICAgICAgICAgIHN0YXJ0aW5kZXggPSBpbnQoaW5zcGVj
dC5pc21ldGhvZChmdW5jKSkKKworICAgIHRyeToKKyAgICAgICAgcmF3Y29kZSA9IGZ1bmMuX19j
b2RlX18KKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIHJldHVybiAoKQorICAg
IHRyeToKKyAgICAgICAgeCA9IHJhd2NvZGUuY29fdmFybmFtZXNbc3RhcnRpbmRleDpyYXdjb2Rl
LmNvX2FyZ2NvdW50XQorICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgeCA9ICgp
CisgICAgZWxzZToKKyAgICAgICAgZGVmYXVsdHMgPSBmdW5jLl9fZGVmYXVsdHNfXworICAgICAg
ICBpZiBkZWZhdWx0czoKKyAgICAgICAgICAgIHggPSB4WzotbGVuKGRlZmF1bHRzKV0KKyAgICB0
cnk6CisgICAgICAgIGNhY2hlWyJfdmFybmFtZXMiXSA9IHgKKyAgICBleGNlcHQgVHlwZUVycm9y
OgorICAgICAgICBwYXNzCisgICAgcmV0dXJuIHgKKworCitjbGFzcyBfSG9va1JlbGF5OgorICAg
ICIiIiBob29rIGhvbGRlciBvYmplY3QgZm9yIHBlcmZvcm1pbmcgMTpOIGhvb2sgY2FsbHMgd2hl
cmUgTiBpcyB0aGUgbnVtYmVyCisgICAgb2YgcmVnaXN0ZXJlZCBwbHVnaW5zLgorCisgICAgIiIi
CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdHJhY2UpOgorICAgICAgICBzZWxmLl90cmFjZSA9
IHRyYWNlCisKKworY2xhc3MgX0hvb2tDYWxsZXIob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18o
c2VsZiwgbmFtZSwgaG9va19leGVjdXRlLCBzcGVjbW9kdWxlX29yX2NsYXNzPU5vbmUsIHNwZWNf
b3B0cz1Ob25lKToKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICBzZWxmLl93cmFw
cGVycyA9IFtdCisgICAgICAgIHNlbGYuX25vbndyYXBwZXJzID0gW10KKyAgICAgICAgc2VsZi5f
aG9va2V4ZWMgPSBob29rX2V4ZWN1dGUKKyAgICAgICAgaWYgc3BlY21vZHVsZV9vcl9jbGFzcyBp
cyBub3QgTm9uZToKKyAgICAgICAgICAgIGFzc2VydCBzcGVjX29wdHMgaXMgbm90IE5vbmUKKyAg
ICAgICAgICAgIHNlbGYuc2V0X3NwZWNpZmljYXRpb24oc3BlY21vZHVsZV9vcl9jbGFzcywgc3Bl
Y19vcHRzKQorCisgICAgZGVmIGhhc19zcGVjKHNlbGYpOgorICAgICAgICByZXR1cm4gaGFzYXR0
cihzZWxmLCAiX3NwZWNtb2R1bGVfb3JfY2xhc3MiKQorCisgICAgZGVmIHNldF9zcGVjaWZpY2F0
aW9uKHNlbGYsIHNwZWNtb2R1bGVfb3JfY2xhc3MsIHNwZWNfb3B0cyk6CisgICAgICAgIGFzc2Vy
dCBub3Qgc2VsZi5oYXNfc3BlYygpCisgICAgICAgIHNlbGYuX3NwZWNtb2R1bGVfb3JfY2xhc3Mg
PSBzcGVjbW9kdWxlX29yX2NsYXNzCisgICAgICAgIHNwZWNmdW5jID0gZ2V0YXR0cihzcGVjbW9k
dWxlX29yX2NsYXNzLCBzZWxmLm5hbWUpCisgICAgICAgIGFyZ25hbWVzID0gdmFybmFtZXMoc3Bl
Y2Z1bmMsIHN0YXJ0aW5kZXg9aW5zcGVjdC5pc2NsYXNzKHNwZWNtb2R1bGVfb3JfY2xhc3MpKQor
ICAgICAgICBhc3NlcnQgInNlbGYiIG5vdCBpbiBhcmduYW1lcyAgIyBzYW5pdHkgY2hlY2sKKyAg
ICAgICAgc2VsZi5hcmduYW1lcyA9IFsiX19tdWx0aWNhbGxfXyJdICsgbGlzdChhcmduYW1lcykK
KyAgICAgICAgc2VsZi5zcGVjX29wdHMgPSBzcGVjX29wdHMKKyAgICAgICAgaWYgc3BlY19vcHRz
LmdldCgiaGlzdG9yaWMiKToKKyAgICAgICAgICAgIHNlbGYuX2NhbGxfaGlzdG9yeSA9IFtdCisK
KyAgICBkZWYgaXNfaGlzdG9yaWMoc2VsZik6CisgICAgICAgIHJldHVybiBoYXNhdHRyKHNlbGYs
ICJfY2FsbF9oaXN0b3J5IikKKworICAgIGRlZiBfcmVtb3ZlX3BsdWdpbihzZWxmLCBwbHVnaW4p
OgorICAgICAgICBkZWYgcmVtb3ZlKHdyYXBwZXJzKToKKyAgICAgICAgICAgIGZvciBpLCBtZXRo
b2QgaW4gZW51bWVyYXRlKHdyYXBwZXJzKToKKyAgICAgICAgICAgICAgICBpZiBtZXRob2QucGx1
Z2luID09IHBsdWdpbjoKKyAgICAgICAgICAgICAgICAgICAgZGVsIHdyYXBwZXJzW2ldCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGlmIHJlbW92ZShzZWxmLl93cmFw
cGVycykgaXMgTm9uZToKKyAgICAgICAgICAgIGlmIHJlbW92ZShzZWxmLl9ub253cmFwcGVycykg
aXMgTm9uZToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJwbHVnaW4gJXIgbm90
IGZvdW5kIiAlIChwbHVnaW4sKSkKKworICAgIGRlZiBfYWRkX2hvb2tpbXBsKHNlbGYsIGhvb2tp
bXBsKToKKyAgICAgICAgaWYgaG9va2ltcGwuaG9va3dyYXBwZXI6CisgICAgICAgICAgICBtZXRo
b2RzID0gc2VsZi5fd3JhcHBlcnMKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1ldGhvZHMg
PSBzZWxmLl9ub253cmFwcGVycworCisgICAgICAgIGlmIGhvb2tpbXBsLnRyeWxhc3Q6CisgICAg
ICAgICAgICBtZXRob2RzLmluc2VydCgwLCBob29raW1wbCkKKyAgICAgICAgZWxpZiBob29raW1w
bC50cnlmaXJzdDoKKyAgICAgICAgICAgIG1ldGhvZHMuYXBwZW5kKGhvb2tpbXBsKQorICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgIyBmaW5kIGxhc3Qgbm9uLXRyeWZpcnN0IG1ldGhvZAorICAg
ICAgICAgICAgaSA9IGxlbihtZXRob2RzKSAtIDEKKyAgICAgICAgICAgIHdoaWxlIGkgPj0gMCBh
bmQgbWV0aG9kc1tpXS50cnlmaXJzdDoKKyAgICAgICAgICAgICAgICBpIC09IDEKKyAgICAgICAg
ICAgIG1ldGhvZHMuaW5zZXJ0KGkgKyAxLCBob29raW1wbCkKKworICAgIGRlZiBfX3JlcHJfXyhz
ZWxmKToKKyAgICAgICAgcmV0dXJuICI8X0hvb2tDYWxsZXIgJXI+IiAlIChzZWxmLm5hbWUsKQor
CisgICAgZGVmIF9fY2FsbF9fKHNlbGYsICoqa3dhcmdzKToKKyAgICAgICAgYXNzZXJ0IG5vdCBz
ZWxmLmlzX2hpc3RvcmljKCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2hvb2tleGVjKHNlbGYsIHNl
bGYuX25vbndyYXBwZXJzICsgc2VsZi5fd3JhcHBlcnMsIGt3YXJncykKKworICAgIGRlZiBjYWxs
X2hpc3RvcmljKHNlbGYsIHByb2M9Tm9uZSwga3dhcmdzPU5vbmUpOgorICAgICAgICBzZWxmLl9j
YWxsX2hpc3RvcnkuYXBwZW5kKChrd2FyZ3Mgb3Ige30sIHByb2MpKQorICAgICAgICAjIGhpc3Rv
cml6aW5nIGhvb2tzIGRvbid0IHJldHVybiByZXN1bHRzCisgICAgICAgIHNlbGYuX2hvb2tleGVj
KHNlbGYsIHNlbGYuX25vbndyYXBwZXJzICsgc2VsZi5fd3JhcHBlcnMsIGt3YXJncykKKworICAg
IGRlZiBjYWxsX2V4dHJhKHNlbGYsIG1ldGhvZHMsIGt3YXJncyk6CisgICAgICAgICIiIiBDYWxs
IHRoZSBob29rIHdpdGggc29tZSBhZGRpdGlvbmFsIHRlbXBvcmFyaWx5IHBhcnRpY2lwYXRpbmcK
KyAgICAgICAgbWV0aG9kcyB1c2luZyB0aGUgc3BlY2lmaWVkIGt3YXJncyBhcyBjYWxsIHBhcmFt
ZXRlcnMuICIiIgorICAgICAgICBvbGQgPSBsaXN0KHNlbGYuX25vbndyYXBwZXJzKSwgbGlzdChz
ZWxmLl93cmFwcGVycykKKyAgICAgICAgZm9yIG1ldGhvZCBpbiBtZXRob2RzOgorICAgICAgICAg
ICAgb3B0cyA9IGRpY3QoaG9va3dyYXBwZXI9RmFsc2UsIHRyeWxhc3Q9RmFsc2UsIHRyeWZpcnN0
PUZhbHNlKQorICAgICAgICAgICAgaG9va2ltcGwgPSBIb29rSW1wbChOb25lLCAiPHRlbXA+Iiwg
bWV0aG9kLCBvcHRzKQorICAgICAgICAgICAgc2VsZi5fYWRkX2hvb2tpbXBsKGhvb2tpbXBsKQor
ICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZigqKmt3YXJncykKKyAgICAgICAg
ZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuX25vbndyYXBwZXJzLCBzZWxmLl93cmFwcGVycyA9
IG9sZAorCisgICAgZGVmIF9tYXliZV9hcHBseV9oaXN0b3J5KHNlbGYsIG1ldGhvZCk6CisgICAg
ICAgIGlmIHNlbGYuaXNfaGlzdG9yaWMoKToKKyAgICAgICAgICAgIGZvciBrd2FyZ3MsIHByb2Mg
aW4gc2VsZi5fY2FsbF9oaXN0b3J5OgorICAgICAgICAgICAgICAgIHJlcyA9IHNlbGYuX2hvb2tl
eGVjKHNlbGYsIFttZXRob2RdLCBrd2FyZ3MpCisgICAgICAgICAgICAgICAgaWYgcmVzIGFuZCBw
cm9jIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBwcm9jKHJlc1swXSkKKworCitj
bGFzcyBIb29rSW1wbDoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGx1Z2luLCBwbHVnaW5fbmFt
ZSwgZnVuY3Rpb24sIGhvb2tfaW1wbF9vcHRzKToKKyAgICAgICAgc2VsZi5mdW5jdGlvbiA9IGZ1
bmN0aW9uCisgICAgICAgIHNlbGYuYXJnbmFtZXMgPSB2YXJuYW1lcyhzZWxmLmZ1bmN0aW9uKQor
ICAgICAgICBzZWxmLnBsdWdpbiA9IHBsdWdpbgorICAgICAgICBzZWxmLm9wdHMgPSBob29rX2lt
cGxfb3B0cworICAgICAgICBzZWxmLnBsdWdpbl9uYW1lID0gcGx1Z2luX25hbWUKKyAgICAgICAg
c2VsZi5fX2RpY3RfXy51cGRhdGUoaG9va19pbXBsX29wdHMpCisKKworY2xhc3MgUGx1Z2luVmFs
aWRhdGlvbkVycm9yKEV4Y2VwdGlvbik6CisgICAgIiIiIHBsdWdpbiBmYWlsZWQgdmFsaWRhdGlv
bi4gIiIiCisKKworaWYgaGFzYXR0cihpbnNwZWN0LCAnc2lnbmF0dXJlJyk6CisgICAgZGVmIF9m
b3JtYXRkZWYoZnVuYyk6CisgICAgICAgIHJldHVybiAiJXMlcyIgJSAoCisgICAgICAgICAgICBm
dW5jLl9fbmFtZV9fLAorICAgICAgICAgICAgc3RyKGluc3BlY3Quc2lnbmF0dXJlKGZ1bmMpKQor
ICAgICAgICApCitlbHNlOgorICAgIGRlZiBfZm9ybWF0ZGVmKGZ1bmMpOgorICAgICAgICByZXR1
cm4gIiVzJXMiICUgKAorICAgICAgICAgICAgZnVuYy5fX25hbWVfXywKKyAgICAgICAgICAgIGlu
c3BlY3QuZm9ybWF0YXJnc3BlYygqaW5zcGVjdC5nZXRhcmdzcGVjKGZ1bmMpKQorICAgICAgICAp
CmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L2Fw
cHZleW9yLnltbCBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvYXBw
dmV5b3IueW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40YjczNjQ1
ZjczNQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29s
cy9weXRlc3QvYXBwdmV5b3IueW1sCkBAIC0wLDAgKzEsMjggQEAKK2Vudmlyb25tZW50OgorICBD
T1ZFUkFMTFNfUkVQT19UT0tFTjoKKyAgICBzZWN1cmU6IDJOSjVDdDU1Y0hKOVdFZzN4YlNxQ3V2
MHJkZ3p6YjZwbnpPSUc1T2tNYlRuZHczd09CclhudFdGb1FyWGlNRmkKKyAgICAjIHRoaXMgaXMg
cHl0ZXN0J3MgdG9rZW4gaW4gY292ZXJhbGxzLmlvLCBlbmNyeXB0ZWQKKyAgICAjIHVzaW5nIHB5
dGVzdGJvdCBhY2NvdW50IGFzIGRldGFpbGVkIGhlcmU6CisgICAgIyBodHRwczovL3d3dy5hcHB2
ZXlvci5jb20vZG9jcy9idWlsZC1jb25maWd1cmF0aW9uI3NlY3VyZS12YXJpYWJsZXMKKworaW5z
dGFsbDoKKyAgLSBlY2hvIEluc3RhbGxlZCBQeXRob25zCisgIC0gZGlyIGM6XFB5dGhvbioKKwor
ICAjIGluc3RhbGwgcHlweSB1c2luZyBjaG9jbyAocmVkaXJlY3QgdG8gYSBmaWxlIGFuZCB3cml0
ZSB0byBjb25zb2xlIGluIGNhc2UKKyAgIyBjaG9jbyBpbnN0YWxsIHJldHVybnMgbm9uLXplcm8s
IGJlY2F1c2UgY2hvY28gaW5zdGFsbCBweXRob24ucHlweSBpcyB0b28KKyAgIyBub2lzeSkKKyAg
LSBjaG9jbyBpbnN0YWxsIHB5dGhvbi5weXB5ID4gcHlweS1pbnN0LmxvZyAyPiYxIHx8ICh0eXBl
IHB5cHktaW5zdC5sb2cgJiBleGl0IC9iIDEpCisgIC0gc2V0IFBBVEg9QzpcdG9vbHNccHlweVxw
eXB5OyVQQVRIJSAjIHNvIHRveCBjYW4gZmluZCBweXB5CisgIC0gZWNobyBQeVB5IGluc3RhbGxl
ZAorICAtIHB5cHkgLS12ZXJzaW9uCisKKyAgLSBDOlxQeXRob24zNVxweXRob24gLW0gcGlwIGlu
c3RhbGwgdG94CisKK2J1aWxkOiBmYWxzZSAgIyBOb3QgYSBDIyBwcm9qZWN0LCBidWlsZCBzdHVm
ZiBhdCB0aGUgdGVzdCBzdGVwIGluc3RlYWQuCisKK3Rlc3Rfc2NyaXB0OgorICAtIEM6XFB5dGhv
bjM1XHB5dGhvbiAtbSB0b3gKKyAgIyBjb3ZlcmFsbHMgaXMgbm90IGluIHRveCdzIGVudmxpc3Qs
IHBsdXMgZm9yIFBScyB0aGUgc2VjdXJlIHZhcmlhYmxlCisgICMgaXMgbm90IGRlZmluZWQgc28g
d2UgaGF2ZSB0byBjaGVjayBmb3IgaXQKKyAgLSBpZiBkZWZpbmVkIENPVkVSQUxMU19SRVBPX1RP
S0VOIEM6XFB5dGhvbjM1XHB5dGhvbiAtbSB0b3ggLWUgY292ZXJhbGxzCmRpZmYgLS1naXQgYS9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L2JlbmNoL2JlbmNoLnB5IGIv
V2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9iZW5jaC9iZW5jaC5weQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uY2U5NDk2NDE3MmYKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L2Jl
bmNoL2JlbmNoLnB5CkBAIC0wLDAgKzEsMTIgQEAKK2ltcG9ydCBzeXMKKworaWYgX19uYW1lX18g
PT0gJ19fbWFpbl9fJzoKKyAgICBpbXBvcnQgY1Byb2ZpbGUKKyAgICBpbXBvcnQgcHl0ZXN0Cisg
ICAgaW1wb3J0IHBzdGF0cworICAgIHNjcmlwdCA9IHN5cy5hcmd2WzE6XSBpZiBsZW4oc3lzLmFy
Z3YpID4gMSBlbHNlICJlbXB0eS5weSIKKyAgICBzdGF0cyA9IGNQcm9maWxlLnJ1bigncHl0ZXN0
LmNtZGxpbmUubWFpbiglciknICUgc2NyaXB0LCAncHJvZicpCisgICAgcCA9IHBzdGF0cy5TdGF0
cygicHJvZiIpCisgICAgcC5zdHJpcF9kaXJzKCkKKyAgICBwLnNvcnRfc3RhdHMoJ2N1bXVsYXRp
dmUnKQorICAgIHByaW50KHAucHJpbnRfc3RhdHMoNTAwKSkKZGlmZiAtLWdpdCBhL1dlYkRyaXZl
clRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvYmVuY2gvYmVuY2hfYXJnY29tcGxldGUu
cHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L2JlbmNoL2JlbmNo
X2FyZ2NvbXBsZXRlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5k
NjZjNjY0ZjM0NgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3cz
Yy90b29scy9weXRlc3QvYmVuY2gvYmVuY2hfYXJnY29tcGxldGUucHkKQEAgLTAsMCArMSwxOSBA
QAorCisKKyMgMTAwMDAgaXRlcmF0aW9ucywganVzdCBmb3IgcmVsYXRpdmUgY29tcGFyaXNvbgor
IyAgICAgICAgICAgICAgICAgICAgICAyLjcuNSAgICAgMy4zLjIKKyMgRmlsZXNDb21wbGV0ZXIg
ICAgICAgNzUuMTEwOSAgIDY5LjIxMTYKKyMgRmFzdEZpbGVzQ29tcGxldGVyICAgIDAuNzM4MyAg
ICAxLjA3NjAKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIGltcG9ydCBzeXMK
KyAgICBpbXBvcnQgdGltZWl0CisgICAgZnJvbSBhcmdjb21wbGV0ZS5jb21wbGV0ZXJzIGltcG9y
dCBGaWxlc0NvbXBsZXRlcgorICAgIGZyb20gX3B5dGVzdC5fYXJnY29tcGxldGUgaW1wb3J0IEZh
c3RGaWxlc0NvbXBsZXRlcgorICAgIGNvdW50ID0gMTAwMCAjIG9ubHkgYSBmZXcgc2Vjb25kcwor
ICAgIHNldHVwID0gJ2Zyb20gX19tYWluX18gaW1wb3J0IEZhc3RGaWxlc0NvbXBsZXRlclxuZmMg
PSBGYXN0RmlsZXNDb21wbGV0ZXIoKScKKyAgICBydW4gPSAnZmMoIi9kIiknCisgICAgc3lzLnN0
ZG91dC53cml0ZSgnJXNcbicgJSAodGltZWl0LnRpbWVpdChydW4sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNldHVwPXNldHVwLnJlcGxhY2UoJ0Zhc3QnLCAnJyksIG51bWJlcj1j
b3VudCkpKQorICAgIHN5cy5zdGRvdXQud3JpdGUoJyVzXG4nICUgKHRpbWVpdC50aW1laXQocnVu
LCBzZXR1cD1zZXR1cCwgbnVtYmVyPWNvdW50KSkpCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0
cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L2JlbmNoL2VtcHR5LnB5IGIvV2ViRHJpdmVyVGVz
dHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9iZW5jaC9lbXB0eS5weQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYWM1ZTI1NzAxZGEKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L2JlbmNoL2VtcHR5LnB5
CkBAIC0wLDAgKzEsMyBAQAoraW1wb3J0IHB5Citmb3IgaSBpbiByYW5nZSgxMDAwKToKKyAgICBw
eS5idWlsdGluLmV4ZWNfKCJkZWYgdGVzdF9mdW5jXyVkKCk6IHBhc3MiICUgaSkKZGlmZiAtLWdp
dCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvYmVuY2gvbWFueXBh
cmFtLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9iZW5jaC9t
YW55cGFyYW0ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmQyYmNh
MGU4YWNkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rv
b2xzL3B5dGVzdC9iZW5jaC9tYW55cGFyYW0ucHkKQEAgLTAsMCArMSwxMiBAQAorCitpbXBvcnQg
cHl0ZXN0CisKK0BweXRlc3QuZml4dHVyZShzY29wZT0nbW9kdWxlJywgcGFyYW1zPXJhbmdlKDk2
NikpCitkZWYgZm9vKHJlcXVlc3QpOgorICAgIHJldHVybiByZXF1ZXN0LnBhcmFtCisKK2RlZiB0
ZXN0X2l0KGZvbyk6CisgICAgcGFzcworZGVmIHRlc3RfaXQyKGZvbyk6CisgICAgcGFzcworCmRp
ZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L2JlbmNo
L3NraXAucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L2JlbmNo
L3NraXAucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjk2MGIzMDg2
NDVhCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xz
L3B5dGVzdC9iZW5jaC9za2lwLnB5CkBAIC0wLDAgKzEsMTAgQEAKKworaW1wb3J0IHB5dGVzdAor
CisKK1NLSVAgPSBUcnVlCisKK0BweXRlc3QubWFyay5wYXJhbWV0cml6ZSgieCIsIHhyYW5nZSg1
MDAwKSkKK2RlZiB0ZXN0X2Zvbyh4KToKKyAgICBpZiBTS0lQOgorICAgICAgICBweXRlc3Quc2tp
cCgiaGVoIikKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9w
eXRlc3QvZXh0cmEvZ2V0X2lzc3Vlcy5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90
b29scy9weXRlc3QvZXh0cmEvZ2V0X2lzc3Vlcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uNjQzN2JhNGMzNGUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJU
ZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L2V4dHJhL2dldF9pc3N1ZXMucHkKQEAgLTAs
MCArMSw3NCBAQAoraW1wb3J0IGpzb24KK2ltcG9ydCBweQoraW1wb3J0IHRleHR3cmFwCisKK2lz
c3Vlc191cmwgPSAiaHR0cDovL2JpdGJ1Y2tldC5vcmcvYXBpLzEuMC9yZXBvc2l0b3JpZXMvcHl0
ZXN0LWRldi9weXRlc3QvaXNzdWVzIgorCitpbXBvcnQgcmVxdWVzdHMKKworZGVmIGdldF9pc3N1
ZXMoKToKKyAgICBjaHVua3NpemUgPSA1MAorICAgIHN0YXJ0ID0gMAorICAgIGlzc3VlcyA9IFtd
CisgICAgd2hpbGUgMToKKyAgICAgICAgcG9zdF9kYXRhID0geyJhY2NvdW50bmFtZSI6ICJweXRl
c3QtZGV2IiwKKyAgICAgICAgICAgICAgICAgICAgICJyZXBvX3NsdWciOiAicHl0ZXN0IiwKKyAg
ICAgICAgICAgICAgICAgICAgICJzdGFydCI6IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAg
ImxpbWl0IjogY2h1bmtzaXplfQorICAgICAgICBwcmludCAoImdldHRpbmcgZnJvbSIsIHN0YXJ0
KQorICAgICAgICByID0gcmVxdWVzdHMuZ2V0KGlzc3Vlc191cmwsIHBhcmFtcz1wb3N0X2RhdGEp
CisgICAgICAgIGRhdGEgPSByLmpzb24oKQorICAgICAgICBpc3N1ZXMuZXh0ZW5kKGRhdGFbImlz
c3VlcyJdKQorICAgICAgICBpZiBzdGFydCArIGNodW5rc2l6ZSA+PSBkYXRhWyJjb3VudCJdOgor
ICAgICAgICAgICAgcmV0dXJuIGlzc3VlcworICAgICAgICBzdGFydCArPSBjaHVua3NpemUKKwor
a2luZDJudW0gPSAiYnVnIGVuaGFuY2VtZW50IHRhc2sgcHJvcG9zYWwiLnNwbGl0KCkKKworc3Rh
dHVzMm51bSA9ICJuZXcgb3BlbiByZXNvbHZlZCBkdXBsaWNhdGUgaW52YWxpZCB3b250Zml4Ii5z
cGxpdCgpCisKK2RlZiBtYWluKGFyZ3MpOgorICAgIGNhY2hlZmlsZSA9IHB5LnBhdGgubG9jYWwo
YXJncy5jYWNoZSkKKyAgICBpZiBub3QgY2FjaGVmaWxlLmV4aXN0cygpIG9yIGFyZ3MucmVmcmVz
aDoKKyAgICAgICAgaXNzdWVzID0gZ2V0X2lzc3VlcygpCisgICAgICAgIGNhY2hlZmlsZS53cml0
ZShqc29uLmR1bXBzKGlzc3VlcykpCisgICAgZWxzZToKKyAgICAgICAgaXNzdWVzID0ganNvbi5s
b2FkcyhjYWNoZWZpbGUucmVhZCgpKQorCisgICAgb3Blbl9pc3N1ZXMgPSBbeCBmb3IgeCBpbiBp
c3N1ZXMKKyAgICAgICAgICAgICAgICAgICAgaWYgeFsic3RhdHVzIl0gaW4gKCJuZXciLCAib3Bl
biIpXQorCisgICAgZGVmIGtpbmRfYW5kX2lkKHgpOgorICAgICAgICBraW5kID0geFsibWV0YWRh
dGEiXVsia2luZCJdCisgICAgICAgIHJldHVybiBraW5kMm51bS5pbmRleChraW5kKSwgbGVuKGlz
c3VlcyktaW50KHhbImxvY2FsX2lkIl0pCisgICAgb3Blbl9pc3N1ZXMuc29ydChrZXk9a2luZF9h
bmRfaWQpCisgICAgcmVwb3J0KG9wZW5faXNzdWVzKQorCitkZWYgcmVwb3J0KGlzc3Vlcyk6Cisg
ICAgZm9yIGlzc3VlIGluIGlzc3VlczoKKyAgICAgICAgbWV0YWRhdGEgPSBpc3N1ZVsibWV0YWRh
dGEiXQorICAgICAgICBwcmlvcml0eSA9IGlzc3VlWyJwcmlvcml0eSJdCisgICAgICAgIHRpdGxl
ID0gaXNzdWVbInRpdGxlIl0KKyAgICAgICAgY29udGVudCA9IGlzc3VlWyJjb250ZW50Il0KKyAg
ICAgICAga2luZCA9IG1ldGFkYXRhWyJraW5kIl0KKyAgICAgICAgc3RhdHVzID0gaXNzdWVbInN0
YXR1cyJdCisgICAgICAgIGlkID0gaXNzdWVbImxvY2FsX2lkIl0KKyAgICAgICAgbGluayA9ICJo
dHRwczovL2JpdGJ1Y2tldC5vcmcvcHl0ZXN0LWRldi9weXRlc3QvaXNzdWUvJXMvIiAlIGlkCisg
ICAgICAgIHByaW50KCItLS0tIikKKyAgICAgICAgcHJpbnQoc3RhdHVzLCBraW5kLCBsaW5rKQor
ICAgICAgICBwcmludCh0aXRsZSkKKyAgICAgICAgI3ByaW50KCkKKyAgICAgICAgI2xpbmVzID0g
Y29udGVudC5zcGxpdCgiXG4iKQorICAgICAgICAjcHJpbnQgKCJcbiIuam9pbihsaW5lc1s6M10p
KQorICAgICAgICAjaWYgbGVuKGxpbmVzKSA+IDMgb3IgbGVuKGNvbnRlbnQpID4gMjQwOgorICAg
ICAgICAjICAgIHByaW50ICgiLi4uIikKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAg
ICBpbXBvcnQgYXJncGFyc2UKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigi
cHJvY2VzcyBiaXRidWNrZXQgaXNzdWVzIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItLXJl
ZnJlc2giLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVs
cD0iaW52YWxpZGF0ZSBjYWNoZSwgcmVmcmVzaCBpc3N1ZXMiKQorICAgIHBhcnNlci5hZGRfYXJn
dW1lbnQoIi0tY2FjaGUiLCBhY3Rpb249InN0b3JlIiwgZGVmYXVsdD0iaXNzdWVzLmpzb24iLAor
ICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iY2FjaGUgZmlsZSIpCisgICAgYXJncyA9IHBh
cnNlci5wYXJzZV9hcmdzKCkKKyAgICBtYWluKGFyZ3MpCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJU
ZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L2V4dHJhL3NldHVwLXB5LnRlc3Qvc2V0dXAu
cHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L2V4dHJhL3NldHVw
LXB5LnRlc3Qvc2V0dXAucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LmQwNTYwY2UxZjVmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQv
dzNjL3Rvb2xzL3B5dGVzdC9leHRyYS9zZXR1cC1weS50ZXN0L3NldHVwLnB5CkBAIC0wLDAgKzEs
MTEgQEAKK2ltcG9ydCBzeXMKK2Zyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IHNldHVwCisKK2lm
IF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgaWYgInNkaXN0IiBub3QgaW4gc3lzLmFyZ3Zb
MTpdOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJwbGVhc2UgdXNlICdweXRlc3QnIHB5cGkg
cGFja2FnZSBpbnN0ZWFkIG9mICdweS50ZXN0JyIpCisgICAgc2V0dXAoCisgICAgICAgIG5hbWU9
InB5LnRlc3QiLAorICAgICAgICB2ZXJzaW9uPSIwLjAiLAorICAgICAgICBkZXNjcmlwdGlvbj0i
cGxlYXNlIHVzZSAncHl0ZXN0JyBmb3IgaW5zdGFsbGF0aW9uIiwKKyAgICApCmRpZmYgLS1naXQg
YS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L3BsdWdpbi10ZXN0LnNo
IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9wbHVnaW4tdGVzdC5z
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOWM2MWI1MDUzNmUKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0
L3BsdWdpbi10ZXN0LnNoCkBAIC0wLDAgKzEsMjAgQEAKKyMhL2Jpbi9iYXNoCisKKyMgdGhpcyBh
c3N1bWVzIHBsdWdpbnMgYXJlIGluc3RhbGxlZCBhcyBzaXN0ZXIgZGlyZWN0b3JpZXMKKworc2V0
IC1lCitjZCAuLi9weXRlc3QtcGVwOAorcHkudGVzdAorY2QgLi4vcHl0ZXN0LWluc3RhZmFpbAor
cHkudGVzdCAKK2NkIC4uL3B5dGVzdC1jYWNoZQorcHkudGVzdAorY2QgLi4vcHl0ZXN0LXhwcm9j
ZXNzCitweS50ZXN0CisjY2QgLi4vcHl0ZXN0LWNvdgorI3B5LnRlc3QKK2NkIC4uL3B5dGVzdC1j
YXB0dXJlbG9nCitweS50ZXN0CitjZCAuLi9weXRlc3QteGRpc3QKK3B5LnRlc3QKKwpkaWZmIC0t
Z2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9weXRlc3QucHkg
Yi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L3B5dGVzdC5weQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZTM3NmU0MTdlOGEKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L3B5dGVz
dC5weQpAQCAtMCwwICsxLDI4IEBACisjIFBZVEhPTl9BUkdDT01QTEVURV9PSworIiIiCitweXRl
c3Q6IHVuaXQgYW5kIGZ1bmN0aW9uYWwgdGVzdGluZyB3aXRoIFB5dGhvbi4KKyIiIgorX19hbGxf
XyA9IFsKKyAgICAnbWFpbicsCisgICAgJ1VzYWdlRXJyb3InLAorICAgICdjbWRsaW5lJywKKyAg
ICAnaG9va3NwZWMnLAorICAgICdob29raW1wbCcsCisgICAgJ19fdmVyc2lvbl9fJywKK10KKwor
aWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzogIyBpZiBydW4gYXMgYSBzY3JpcHQgb3IgYnkgJ3B5
dGhvbiAtbSBweXRlc3QnCisgICAgIyB3ZSB0cmlnZ2VyIHRoZSBiZWxvdyAiZWxzZSIgY29uZGl0
aW9uIGJ5IHRoZSBmb2xsb3dpbmcgaW1wb3J0CisgICAgaW1wb3J0IHB5dGVzdAorICAgIHJhaXNl
IFN5c3RlbUV4aXQocHl0ZXN0Lm1haW4oKSkKKworIyBlbHNlIHdlIGFyZSBpbXBvcnRlZAorCitm
cm9tIF9weXRlc3QuY29uZmlnIGltcG9ydCAoCisgICAgbWFpbiwgVXNhZ2VFcnJvciwgX3ByZWxv
YWRwbHVnaW5zLCBjbWRsaW5lLAorICAgIGhvb2tzcGVjLCBob29raW1wbAorKQorZnJvbSBfcHl0
ZXN0IGltcG9ydCBfX3ZlcnNpb25fXworCitfcHJlbG9hZHBsdWdpbnMoKSAjIHRvIHBvcHVsYXRl
IHB5dGVzdC4qIG5hbWVzcGFjZSBzbyBoZWxwKHB5dGVzdCkgd29ya3MKKwpkaWZmIC0tZ2l0IGEv
V2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9yZXF1aXJlbWVudHMtZG9j
cy50eHQgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L3JlcXVpcmVt
ZW50cy1kb2NzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYmUz
YTIzMmU1N2IKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mv
dG9vbHMvcHl0ZXN0L3JlcXVpcmVtZW50cy1kb2NzLnR4dApAQCAtMCwwICsxLDMgQEAKK3NwaGlu
eD09MS4yLjMKK3JlZ2VuZG9jCitweXlhbWwKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2lt
cG9ydGVkL3czYy90b29scy9weXRlc3QvcnVudG94LnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0
ZWQvdzNjL3Rvb2xzL3B5dGVzdC9ydW50b3gucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLjhjMTNjNTNlMWM0Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVz
dHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9ydW50b3gucHkKQEAgLTAsMCArMSw4IEBACisj
IS91c3IvYmluL2VudiBweXRob24KKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBp
bXBvcnQgc3VicHJvY2VzcworICAgIGltcG9ydCBzeXMKKyAgICBzdWJwcm9jZXNzLmNhbGwoW3N5
cy5leGVjdXRhYmxlLCAiLW0iLCAidG94IiwKKyAgICAgICAgICAgICAgICAgICAgICItaSIsICJB
TEw9aHR0cHM6Ly9kZXZwaS5uZXQvaHBrL2Rldi8iLAorICAgICAgICAgICAgICAgICAgICAgIi0t
ZGV2ZWxvcCJdICsgc3lzLmFyZ3ZbMTpdKQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1w
b3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9zZXR1cC5jZmcgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRl
ZC93M2MvdG9vbHMvcHl0ZXN0L3NldHVwLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMC4uMWFiNGZkMDU5YjIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0
cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L3NldHVwLmNmZwpAQCAtMCwwICsxLDEzIEBACitb
YnVpbGRfc3BoaW54XQorc291cmNlLWRpciA9IGRvYy9lbi8KK2J1aWxkLWRpciA9IGRvYy9idWls
ZAorYWxsX2ZpbGVzID0gMQorCitbdXBsb2FkX3NwaGlueF0KK3VwbG9hZC1kaXIgPSBkb2MvZW4v
YnVpbGQvaHRtbAorCitbYmRpc3Rfd2hlZWxdCit1bml2ZXJzYWwgPSAxCisKK1tkZXZwaTp1cGxv
YWRdCitmb3JtYXRzID0gc2Rpc3QudGd6LGJkaXN0X3doZWVsCmRpZmYgLS1naXQgYS9XZWJEcml2
ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L3NldHVwLnB5IGIvV2ViRHJpdmVyVGVz
dHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9zZXR1cC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uNjY2MGYyMTYwNGQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJE
cml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L3NldHVwLnB5CkBAIC0wLDAgKzEs
MTIyIEBACitpbXBvcnQgb3MsIHN5cworaW1wb3J0IHNldHVwdG9vbHMKK2ltcG9ydCBwa2dfcmVz
b3VyY2VzCitmcm9tIHNldHVwdG9vbHMgaW1wb3J0IHNldHVwLCBDb21tYW5kCisKK2NsYXNzaWZp
ZXJzID0gWydEZXZlbG9wbWVudCBTdGF0dXMgOjogNiAtIE1hdHVyZScsCisgICAgICAgICAgICAg
ICAnSW50ZW5kZWQgQXVkaWVuY2UgOjogRGV2ZWxvcGVycycsCisgICAgICAgICAgICAgICAnTGlj
ZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogTUlUIExpY2Vuc2UnLAorICAgICAgICAgICAgICAgJ09w
ZXJhdGluZyBTeXN0ZW0gOjogUE9TSVgnLAorICAgICAgICAgICAgICAgJ09wZXJhdGluZyBTeXN0
ZW0gOjogTWljcm9zb2Z0IDo6IFdpbmRvd3MnLAorICAgICAgICAgICAgICAgJ09wZXJhdGluZyBT
eXN0ZW0gOjogTWFjT1MgOjogTWFjT1MgWCcsCisgICAgICAgICAgICAgICAnVG9waWMgOjogU29m
dHdhcmUgRGV2ZWxvcG1lbnQgOjogVGVzdGluZycsCisgICAgICAgICAgICAgICAnVG9waWMgOjog
U29mdHdhcmUgRGV2ZWxvcG1lbnQgOjogTGlicmFyaWVzJywKKyAgICAgICAgICAgICAgICdUb3Bp
YyA6OiBVdGlsaXRpZXMnXSArIFsKKyAgICAgICAgICAgICAgKCdQcm9ncmFtbWluZyBMYW5ndWFn
ZSA6OiBQeXRob24gOjogJXMnICUgeCkgZm9yIHggaW4KKyAgICAgICAgICAgICAgICAgICcyIDIu
NiAyLjcgMyAzLjIgMy4zIDMuNCAzLjUnLnNwbGl0KCldCisKK3dpdGggb3BlbignUkVBRE1FLnJz
dCcpIGFzIGZkOgorICAgIGxvbmdfZGVzY3JpcHRpb24gPSBmZC5yZWFkKCkKKworZGVmIGdldF92
ZXJzaW9uKCk6CisgICAgcCA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoCisgICAgICAg
ICAgICAgICAgICAgICBvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSwgIl9weXRlc3QiLCAiX19p
bml0X18ucHkiKQorICAgIHdpdGggb3BlbihwKSBhcyBmOgorICAgICAgICBmb3IgbGluZSBpbiBm
LnJlYWRsaW5lcygpOgorICAgICAgICAgICAgaWYgIl9fdmVyc2lvbl9fIiBpbiBsaW5lOgorICAg
ICAgICAgICAgICAgIHJldHVybiBsaW5lLnN0cmlwKCkuc3BsaXQoIj0iKVstMV0uc3RyaXAoIiAn
IikKKyAgICByYWlzZSBWYWx1ZUVycm9yKCJjb3VsZCBub3QgcmVhZCB2ZXJzaW9uIikKKworCitk
ZWYgaGFzX2Vudmlyb25tZW50X21hcmtlcl9zdXBwb3J0KCk6CisgICAgIiIiCisgICAgVGVzdHMg
dGhhdCBzZXR1cHRvb2xzIGhhcyBzdXBwb3J0IGZvciBQRVAtNDI2IGVudmlyb25tZW50IG1hcmtl
ciBzdXBwb3J0LgorCisgICAgVGhlIGZpcnN0IGtub3duIHJlbGVhc2UgdG8gc3VwcG9ydCBpdCBp
cyAwLjcgKGFuZCB0aGUgZWFybGllc3Qgb24gUHlQSSBzZWVtcyB0byBiZSAwLjcuMgorICAgIHNv
IHdlJ3JlIHVzaW5nIHRoYXQpLCBzZWU6IGh0dHA6Ly9weXRob25ob3N0ZWQub3JnL3NldHVwdG9v
bHMvaGlzdG9yeS5odG1sI2lkMTQyCisKKyAgICBSZWZlcmVuY2VzOgorCisgICAgKiBodHRwczov
L3doZWVsLnJlYWR0aGVkb2NzLm9yZy9lbi9sYXRlc3QvaW5kZXguaHRtbCNkZWZpbmluZy1jb25k
aXRpb25hbC1kZXBlbmRlbmNpZXMKKyAgICAqIGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZGV2L3Bl
cHMvcGVwLTA0MjYvI2Vudmlyb25tZW50LW1hcmtlcnMKKyAgICAiIiIKKyAgICB0cnk6CisgICAg
ICAgIHJldHVybiBwa2dfcmVzb3VyY2VzLnBhcnNlX3ZlcnNpb24oc2V0dXB0b29scy5fX3ZlcnNp
b25fXykgPj0gcGtnX3Jlc291cmNlcy5wYXJzZV92ZXJzaW9uKCcwLjcuMicpCisgICAgZXhjZXB0
IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkNvdWxkIG5vdCB0
ZXN0IHNldHVwdG9vbCdzIHZlcnNpb246ICVzXG4iICUgZXhjKQorICAgICAgICByZXR1cm4gRmFs
c2UKKworCitkZWYgbWFpbigpOgorICAgIGluc3RhbGxfcmVxdWlyZXMgPSBbJ3B5Pj0xLjQuMjkn
XSAgIyBwbHVnZ3kgaXMgdmVuZG9yZWQgaW4gX3B5dGVzdC52ZW5kb3JlZF9wYWNrYWdlcworICAg
IGV4dHJhc19yZXF1aXJlID0ge30KKyAgICBpZiBoYXNfZW52aXJvbm1lbnRfbWFya2VyX3N1cHBv
cnQoKToKKyAgICAgICAgZXh0cmFzX3JlcXVpcmVbJzpweXRob25fdmVyc2lvbj09IjIuNiIgb3Ig
cHl0aG9uX3ZlcnNpb249PSIzLjAiIG9yIHB5dGhvbl92ZXJzaW9uPT0iMy4xIiddID0gWydhcmdw
YXJzZSddCisgICAgICAgIGV4dHJhc19yZXF1aXJlWyc6c3lzX3BsYXRmb3JtPT0id2luMzIiJ10g
PSBbJ2NvbG9yYW1hJ10KKyAgICBlbHNlOgorICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvIDwg
KDIsIDcpIG9yICgzLCkgPD0gc3lzLnZlcnNpb25faW5mbyA8ICgzLCAyKToKKyAgICAgICAgICAg
IGluc3RhbGxfcmVxdWlyZXMuYXBwZW5kKCdhcmdwYXJzZScpCisgICAgICAgIGlmIHN5cy5wbGF0
Zm9ybSA9PSAnd2luMzInOgorICAgICAgICAgICAgaW5zdGFsbF9yZXF1aXJlcy5hcHBlbmQoJ2Nv
bG9yYW1hJykKKworICAgIHNldHVwKAorICAgICAgICBuYW1lPSdweXRlc3QnLAorICAgICAgICBk
ZXNjcmlwdGlvbj0ncHl0ZXN0OiBzaW1wbGUgcG93ZXJmdWwgdGVzdGluZyB3aXRoIFB5dGhvbics
CisgICAgICAgIGxvbmdfZGVzY3JpcHRpb249bG9uZ19kZXNjcmlwdGlvbiwKKyAgICAgICAgdmVy
c2lvbj1nZXRfdmVyc2lvbigpLAorICAgICAgICB1cmw9J2h0dHA6Ly9weXRlc3Qub3JnJywKKyAg
ICAgICAgbGljZW5zZT0nTUlUIGxpY2Vuc2UnLAorICAgICAgICBwbGF0Zm9ybXM9Wyd1bml4Jywg
J2xpbnV4JywgJ29zeCcsICdjeWd3aW4nLCAnd2luMzInXSwKKyAgICAgICAgYXV0aG9yPSdIb2xn
ZXIgS3Jla2VsLCBCcnVubyBPbGl2ZWlyYSwgUm9ubnkgUGZhbm5zY2htaWR0LCBGbG9yaXMgQnJ1
eW5vb2doZSwgQnJpYW5uYSBMYXVnaGVyLCBGbG9yaWFuIEJydWhpbiBhbmQgb3RoZXJzJywKKyAg
ICAgICAgYXV0aG9yX2VtYWlsPSdob2xnZXIgYXQgbWVybGludXguZXUnLAorICAgICAgICBlbnRy
eV9wb2ludHM9bWFrZV9lbnRyeV9wb2ludHMoKSwKKyAgICAgICAgY2xhc3NpZmllcnM9Y2xhc3Np
ZmllcnMsCisgICAgICAgIGNtZGNsYXNzPXsndGVzdCc6IFB5VGVzdH0sCisgICAgICAgICMgdGhl
IGZvbGxvd2luZyBzaG91bGQgYmUgZW5hYmxlZCBmb3IgcmVsZWFzZQorICAgICAgICBpbnN0YWxs
X3JlcXVpcmVzPWluc3RhbGxfcmVxdWlyZXMsCisgICAgICAgIGV4dHJhc19yZXF1aXJlPWV4dHJh
c19yZXF1aXJlLAorICAgICAgICBwYWNrYWdlcz1bJ19weXRlc3QnLCAnX3B5dGVzdC5hc3NlcnRp
b24nLCAnX3B5dGVzdC5fY29kZScsICdfcHl0ZXN0LnZlbmRvcmVkX3BhY2thZ2VzJ10sCisgICAg
ICAgIHB5X21vZHVsZXM9WydweXRlc3QnXSwKKyAgICAgICAgemlwX3NhZmU9RmFsc2UsCisgICAg
KQorCisKK2RlZiBjbWRsaW5lX2VudHJ5cG9pbnRzKHZlcnNpb25pbmZvLCBwbGF0Zm9ybSwgYmFz
ZW5hbWUpOgorICAgIHRhcmdldCA9ICdweXRlc3Q6bWFpbicKKyAgICBpZiBwbGF0Zm9ybS5zdGFy
dHN3aXRoKCdqYXZhJyk6CisgICAgICAgIHBvaW50cyA9IHsncHkudGVzdC1qeXRob24nOiB0YXJn
ZXR9CisgICAgZWxzZToKKyAgICAgICAgaWYgYmFzZW5hbWUuc3RhcnRzd2l0aCgncHlweScpOgor
ICAgICAgICAgICAgcG9pbnRzID0geydweS50ZXN0LSVzJyAlIGJhc2VuYW1lOiB0YXJnZXR9Cisg
ICAgICAgIGVsc2U6ICMgY3B5dGhvbgorICAgICAgICAgICAgcG9pbnRzID0geydweS50ZXN0LSVz
LiVzJyAlIHZlcnNpb25pbmZvWzoyXSA6IHRhcmdldH0KKyAgICAgICAgcG9pbnRzWydweS50ZXN0
J10gPSB0YXJnZXQKKyAgICByZXR1cm4gcG9pbnRzCisKKworZGVmIG1ha2VfZW50cnlfcG9pbnRz
KCk6CisgICAgYmFzZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHN5cy5leGVjdXRhYmxlKQorICAg
IHBvaW50cyA9IGNtZGxpbmVfZW50cnlwb2ludHMoc3lzLnZlcnNpb25faW5mbywgc3lzLnBsYXRm
b3JtLCBiYXNlbmFtZSkKKyAgICBrZXlzID0gbGlzdChwb2ludHMua2V5cygpKQorICAgIGtleXMu
c29ydCgpCisgICAgbCA9IFsnJXMgPSAlcycgJSAoeCwgcG9pbnRzW3hdKSBmb3IgeCBpbiBrZXlz
XQorICAgIHJldHVybiB7J2NvbnNvbGVfc2NyaXB0cyc6IGx9CisKKworY2xhc3MgUHlUZXN0KENv
bW1hbmQpOgorICAgIHVzZXJfb3B0aW9ucyA9IFtdCisgICAgZGVmIGluaXRpYWxpemVfb3B0aW9u
cyhzZWxmKToKKyAgICAgICAgcGFzcworICAgIGRlZiBmaW5hbGl6ZV9vcHRpb25zKHNlbGYpOgor
ICAgICAgICBwYXNzCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgaW1wb3J0IHN1YnByb2Nl
c3MKKyAgICAgICAgUFBBVEggPSBbeCBmb3IgeCBpbiBvcy5lbnZpcm9uLmdldCgnUFlUSE9OUEFU
SCcsICcnKS5zcGxpdCgnOicpIGlmIHhdCisgICAgICAgIFBQQVRILmluc2VydCgwLCBvcy5nZXRj
d2QoKSkKKyAgICAgICAgb3MuZW52aXJvblsnUFlUSE9OUEFUSCddID0gJzonLmpvaW4oUFBBVEgp
CisgICAgICAgIGVycm5vID0gc3VicHJvY2Vzcy5jYWxsKFtzeXMuZXhlY3V0YWJsZSwgJ3B5dGVz
dC5weScsICctLWlnbm9yZT1kb2MnXSkKKyAgICAgICAgcmFpc2UgU3lzdGVtRXhpdChlcnJubykK
KworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEv
V2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC90b3guaW5pIGIvV2ViRHJp
dmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC90b3guaW5pCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41ZjY1NDQ2ZTQyYgotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvdG94LmluaQpAQCAtMCww
ICsxLDE2MCBAQAorW3RveF0KK21pbnZlcnNpb249Mi4wCitkaXN0c2hhcmU9e2hvbWVkaXJ9Ly50
b3gvZGlzdHNoYXJlCitlbnZsaXN0PQorICAgICBsaW50aW5nLHB5MjYscHkyNyxweTMzLHB5MzQs
cHkzNSxweXB5LAorICAgICB7cHkyNyxweTM1fS17cGV4cGVjdCx4ZGlzdCx0cmlhbH0sCisgICAg
IHB5Mjctbm9ieXRlLGRvY3Rlc3RpbmcscHkyNy1jeGZyZWV6ZQorCitbdGVzdGVudl0KK2NvbW1h
bmRzPSBweS50ZXN0IC0tbHNvZiAtcmZzeFgge3Bvc2FyZ3M6dGVzdGluZ30KK3Bhc3NlbnYgPSBV
U0VSIFVTRVJOQU1FCitkZXBzPQorICAgIG5vc2UKKyAgICBtb2NrCisgICAgcmVxdWVzdHMKKwor
W3Rlc3RlbnY6cHkyNl0KK2NvbW1hbmRzPSBweS50ZXN0IC0tbHNvZiAtcmZzeFgge3Bvc2FyZ3M6
dGVzdGluZ30KK2RlcHM9CisgICAgbm9zZQorICAgIG1vY2s8MS4xICAjIGxhc3Qgc3VwcG9ydGVk
IHZlcnNpb24gZm9yIHB5MjYKKworW3Rlc3RlbnY6cHkyNy1zdWJwcm9jZXNzXQorY2hhbmdlZGly
PS4KK2Jhc2VweXRob249cHl0aG9uMi43CitkZXBzPXB5dGVzdC14ZGlzdD49MS4xMworICAgIG1v
Y2sKKyAgICBub3NlCitjb21tYW5kcz0KKyAgcHkudGVzdCAtbjMgLXJmc3hYIC0tcnVucHl0ZXN0
PXN1YnByb2Nlc3Mge3Bvc2FyZ3M6dGVzdGluZ30KKworW3Rlc3RlbnY6Z2Vuc2NyaXB0XQorY29t
bWFuZHM9IHB5LnRlc3QgLS1nZW5zY3JpcHQ9cHl0ZXN0MQorCitbdGVzdGVudjpsaW50aW5nXQor
YmFzZXB5dGhvbiA9IHB5dGhvbjIuNworZGVwcyA9IGZsYWtlOAorICAgIHJlc3RydWN0dXJlZHRl
eHRfbGludAorY29tbWFuZHMgPSBmbGFrZTggcHl0ZXN0LnB5IF9weXRlc3QgdGVzdGluZworICAg
IHJzdC1saW50IENIQU5HRUxPRy5yc3QKKworW3Rlc3RlbnY6cHkyNy14ZGlzdF0KK2RlcHM9cHl0
ZXN0LXhkaXN0Pj0xLjEzCisgICAgbW9jaworICAgIG5vc2UKK2NvbW1hbmRzPQorICBweS50ZXN0
IC1uMSAtcmZzeFgge3Bvc2FyZ3M6dGVzdGluZ30KKworW3Rlc3RlbnY6cHkzNS14ZGlzdF0KK2Rl
cHM9e1t0ZXN0ZW52OnB5MjcteGRpc3RdZGVwc30KK2NvbW1hbmRzPQorICBweS50ZXN0IC1uMyAt
cmZzeFgge3Bvc2FyZ3M6dGVzdGluZ30KKworW3Rlc3RlbnY6cHkyNy1wZXhwZWN0XQorY2hhbmdl
ZGlyPXRlc3RpbmcKK3BsYXRmb3JtPWxpbnV4fGRhcndpbgorZGVwcz1wZXhwZWN0Citjb21tYW5k
cz0KKyAgcHkudGVzdCAtcmZzeFggdGVzdF9wZGIucHkgdGVzdF90ZXJtaW5hbC5weSB0ZXN0X3Vu
aXR0ZXN0LnB5CisKK1t0ZXN0ZW52OnB5MzUtcGV4cGVjdF0KK2NoYW5nZWRpcj10ZXN0aW5nCitw
bGF0Zm9ybT1saW51eHxkYXJ3aW4KK2RlcHM9e1t0ZXN0ZW52OnB5MjctcGV4cGVjdF1kZXBzfQor
Y29tbWFuZHM9CisgIHB5LnRlc3QgLXJmc3hYIHRlc3RfcGRiLnB5IHRlc3RfdGVybWluYWwucHkg
dGVzdF91bml0dGVzdC5weQorCitbdGVzdGVudjpweTI3LW5vYnl0ZV0KK2RlcHM9cHl0ZXN0LXhk
aXN0Pj0xLjEzCitkaXN0cmlidXRlPXRydWUKK3NldGVudj0KKyAgICBQWVRIT05ET05UV1JJVEVC
WVRFQ09ERT0xCitjb21tYW5kcz0KKyAgcHkudGVzdCAtbjMgLXJmc3hYIHtwb3NhcmdzOnRlc3Rp
bmd9CisKK1t0ZXN0ZW52OnB5MjctdHJpYWxdCitkZXBzPXR3aXN0ZWQKK2NvbW1hbmRzPQorICBw
eS50ZXN0IC1yc3hmIHtwb3NhcmdzOnRlc3RpbmcvdGVzdF91bml0dGVzdC5weX0KKworW3Rlc3Rl
bnY6cHkzNS10cmlhbF0KK3BsYXRmb3JtPWxpbnV4fGRhcndpbgorZGVwcz17W3Rlc3RlbnY6cHky
Ny10cmlhbF1kZXBzfQorY29tbWFuZHM9CisgIHB5LnRlc3QgLXJzeGYge3Bvc2FyZ3M6dGVzdGlu
Zy90ZXN0X3VuaXR0ZXN0LnB5fQorCitbdGVzdGVudjpkb2N0ZXN0XQorY29tbWFuZHM9cHkudGVz
dCAtLWRvY3Rlc3QtbW9kdWxlcyBfcHl0ZXN0CitkZXBzPQorCitbdGVzdGVudjpkb2NdCitiYXNl
cHl0aG9uPXB5dGhvbgorY2hhbmdlZGlyPWRvYy9lbgorZGVwcz1zcGhpbngKKyAgICAgUHlZQU1M
CisKK2NvbW1hbmRzPQorICAgIG1ha2UgY2xlYW4KKyAgICBtYWtlIGh0bWwKKworW3Rlc3RlbnY6
ZG9jdGVzdGluZ10KK2Jhc2VweXRob24gPSBweXRob24zLjQKK2NoYW5nZWRpcj1kb2MvZW4KK2Rl
cHM9UHlZQU1MCitjb21tYW5kcz0gcHkudGVzdCAtcmZzeFgge3Bvc2FyZ3N9CisKK1t0ZXN0ZW52
OnJlZ2VuXQorY2hhbmdlZGlyPWRvYy9lbgorYmFzZXB5dGhvbiA9IHB5dGhvbjMuNAorZGVwcz1z
cGhpbngKKyAgICAgUHlZQU1MCisgICAgIHJlZ2VuZG9jPj0wLjYuMQord2hpdGVsaXN0X2V4dGVy
bmFscz0KKyAgICBybQorICAgIG1ha2UKK2NvbW1hbmRzPQorICAgIHJtIC1yZiAvdG1wL2RvYy1l
eGVjKgorICAgIG1ha2UgcmVnZW4KKworW3Rlc3RlbnY6anl0aG9uXQorY2hhbmdlZGlyPXRlc3Rp
bmcKK2NvbW1hbmRzPQorICAgIHtlbnZweXRob259IHtlbnZiaW5kaXJ9L3B5LnRlc3Qtanl0aG9u
IC1yZnN4WCB7cG9zYXJnc30KKworW3Rlc3RlbnY6cHkyNy1jeGZyZWV6ZV0KK2NoYW5nZWRpcj10
ZXN0aW5nL2N4X2ZyZWV6ZQorcGxhdGZvcm09bGludXh8ZGFyd2luCitjb21tYW5kcz0KKyAgICB7
ZW52cHl0aG9ufSBpbnN0YWxsX2N4X2ZyZWV6ZS5weQorICAgIHtlbnZweXRob259IHJ1bnRlc3Rz
X3NldHVwLnB5IGJ1aWxkIC0tYnVpbGQtZXhlIGJ1aWxkCisgICAge2VudnB5dGhvbn0gdG94X3J1
bi5weQorCisKK1t0ZXN0ZW52OmNvdmVyYWxsc10KK3Bhc3NlbnYgPSBUUkFWSVMgVFJBVklTX0pP
Ql9JRCBUUkFWSVNfQlJBTkNIIENPVkVSQUxMU19SRVBPX1RPS0VOCit1c2VkZXZlbG9wPVRydWUK
K2Jhc2VweXRob249cHl0aG9uMy40CitjaGFuZ2VkaXI9LgorZGVwcyA9CisgICAge1t0ZXN0ZW52
XWRlcHN9CisgICAgY292ZXJhbGxzCitjb21tYW5kcz0KKyAgICBjb3ZlcmFnZSBydW4gLS1zb3Vy
Y2U9X3B5dGVzdCAtbSBweXRlc3QgdGVzdGluZworICAgIGNvdmVyYWdlIHJlcG9ydCAtbQorICAg
IGNvdmVyYWxscworCitbcHl0ZXN0XQorbWludmVyc2lvbj0yLjAKK3BsdWdpbnM9cHl0ZXN0ZXIK
KyMtLXB5YXJncyAtLWRvY3Rlc3QtbW9kdWxlcyAtLWlnbm9yZT0udG94CithZGRvcHRzPSAtcnhz
WCAtcCBweXRlc3RlciAtLWlnbm9yZT10ZXN0aW5nL2N4X2ZyZWV6ZQorcnN5bmNkaXJzPXRveC5p
bmkgcHl0ZXN0LnB5IF9weXRlc3QgdGVzdGluZworcHl0aG9uX2ZpbGVzPXRlc3RfKi5weSAqX3Rl
c3QucHkgdGVzdGluZy8qLyoucHkKK3B5dGhvbl9jbGFzc2VzPVRlc3QgQWNjZXB0YW5jZQorcHl0
aG9uX2Z1bmN0aW9ucz10ZXN0Citub3JlY3Vyc2VkaXJzID0gLnRveCBqYSAuaGcgY3hfZnJlZXpl
X3NvdXJjZQorCisKK1tmbGFrZThdCitpZ25vcmUgPUU0MDEsRTIyNSxFMjYxLEUxMjgsRTEyNCxF
MzAxLEUzMDIsRTEyMSxFMzAzLFczOTEsRTUwMSxFMjMxLEUxMjYsRTcwMSxFMjY1LEUyNDEsRTI1
MSxFMjI2LEUxMDEsVzE5MSxFMTMxLEUyMDMsRTEyMixFMTIzLEUyNzEsRTcxMixFMjIyLEUxMjcs
RTEyNSxFMjIxLFcyOTIsRTExMSxFMTEzLEUyOTMsRTI2MixXMjkzLEUxMjksRTcwMixFMjAxLEUy
NzIsRTIwMixFNzA0LEU3MzEsRTQwMgpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0
ZWQvdzNjL3Rvb2xzL3dlYmRyaXZlci8uZ2l0aWdub3JlIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0
ZWQvdzNjL3Rvb2xzL3dlYmRyaXZlci8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi5lODQxM2UwZWU0NQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZl
clRlc3RzL2ltcG9ydGVkL3czYy90b29scy93ZWJkcml2ZXIvLmdpdGlnbm9yZQpAQCAtMCwwICsx
LDIgQEAKK3dlYmRyaXZlci5lZ2ctaW5mby8KKyoucHljCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJU
ZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd2ViZHJpdmVyL1JFQURNRS5tZCBiL1dlYkRyaXZlclRl
c3RzL2ltcG9ydGVkL3czYy90b29scy93ZWJkcml2ZXIvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wMTViMzFiMjU0YwotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93ZWJkcml2ZXIvUkVBRE1FLm1kCkBA
IC0wLDAgKzEsNzMgQEAKKyMgV2ViRHJpdmVyIGNsaWVudCBmb3IgUHl0aG9uCisKK1RoaXMgcGFj
a2FnZSBwcm92aWRlcyBQeXRob24gYmluZGluZ3MKK3RoYXQgY29uZm9ybSB0byB0aGUgW1czQyBX
ZWJEcml2ZXIgc3RhbmRhcmRdKGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJkcml2ZXIvd2ViZHJp
dmVyLXNwZWMuaHRtbCksCit3aGljaCBzcGVjaWZpZXMgYSByZW1vdGUgY29udHJvbCBwcm90b2Nv
bCBmb3Igd2ViIGJyb3dzZXJzLgorCitUaGVzZSBiaW5kaW5ncyBhcmUgd3JpdHRlbiB3aXRoIGRl
dGVybWluaW5nCitpbXBsZW1lbnRhdGlvbiBjb21wbGlhbmNlIHRvIHRoZSBzcGVjaWZpY2F0aW9u
IGluIG1pbmQsCitzbyB0aGF0IGRpZmZlcmVudCByZW1vdGUgZW5kIGRyaXZlcnMKK2NhbiBkZXRl
cm1pbmUgd2hldGhlciB0aGV5IG1lZXQgdGhlIHJlY29nbmlzZWQgc3RhbmRhcmQuCitUaGUgY2xp
ZW50IGlzIHVzZWQgZm9yIHRoZSBXZWJEcml2ZXIgc3BlY2lmaWNhdGlvbiB0ZXN0cworaW4gdGhl
IFtXZWIgUGxhdGZvcm0gVGVzdHNdKGh0dHBzOi8vZ2l0aHViLmNvbS93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzKS4KKworIyMgSW5zdGFsbGF0aW9uCisKK1RvIGluc3RhbGwgdGhlIHBhY2thZ2UgaW5k
aXZpZHVhbGx5CitpbiB5b3VyIHZpcnR1YWxlbnYgb3Igc3lzdGVtLXdpZGU6CisKKyAgICAlIHB5
dGhvbiBzZXR1cC5weSBpbnN0YWxsCisKK1NpbmNlIHRoaXMgcGFja2FnZSBkb2VzIG5vdCBoYXZl
IGFueSBleHRlcm5hbCBkZXBlbmRlbmNpZXMsCit5b3UgY2FuIGFsc28gdXNlIHRoZSBjbGllbnQg
ZGlyZWN0bHkgZnJvbSB0aGUgY2hlY2tvdXQgZGlyZWN0b3J5LAord2hpY2ggaXMgdXNlZnVsIGlm
IHlvdSB3YW50IHRvIGNvbnRyaWJ1dGUgcGF0Y2hlcyBiYWNrOgorCisgICAgJSBjZCAvcGF0aC90
by93ZGNsaWVudAorICAgICUgcHl0aG9uCisgICAgUHl0aG9uIDIuNy4xMisgKGRlZmF1bHQsIEF1
ZyAgNCAyMDE2LCAyMDowNDozNCkgCisgICAgW0dDQyA2LjEuMSAyMDE2MDcyNF0gb24gbGludXgy
CisgICAgVHlwZSAiaGVscCIsICJjb3B5cmlnaHQiLCAiY3JlZGl0cyIgb3IgImxpY2Vuc2UiIGZv
ciBtb3JlIGluZm9ybWF0aW9uLgorICAgID4+PiBpbXBvcnQgd2ViZHJpdmVyCisgICAgPj4+IAor
CitJZiB5b3UgYXJlIHdyaXRpbmcgV2ViRHJpdmVyIHNwZWNpZmljYXRpb24gdGVzdHMgZm9yCitb
V1BUXShodHRwczovL2dpdGh1Yi5jb20vdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cyksCit0aGVyZSBp
cyBubyBuZWVkIHRvIGluc3RhbGwgdGhlIGNsaWVudCBtYW51YWxseQorYXMgaXQgaXMgaW5jbHVk
ZWQgaW4gdGhlIGB0b29scy93ZWJkcml2ZXJgIGRpcmVjdG9yeS4KKworIyMgVXNhZ2UKKworWW91
IGNhbiB1c2UgdGhlIGJ1aWx0LWluCitbY29udGV4dCBtYW5hZ2VyXShodHRwczovL2RvY3MucHl0
aG9uLm9yZy8yL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5odG1sI3RoZS13aXRoLXN0YXRlbWVu
dCkKK3RvIG1hbmFnZSB0aGUgbGlmZXRpbWUgb2YgdGhlIHNlc3Npb24uCitUaGUgc2Vzc2lvbiBp
cyBzdGFydGVkIGltcGxpY2l0bHkKK2F0IHRoZSBmaXJzdCBjYWxsIHRvIGEgY29tbWFuZCBpZiBp
dCBoYXMgbm90IGFscmVhZHkgYmVlbiBzdGFydGVkLAorYW5kIHdpbGwgaW1wbGljaXRseSBiZSBl
bmRlZCB3aGVuIGV4aXRpbmcgdGhlIGNvbnRleHQ6CisKK2BgYHB5CitpbXBvcnQgd2ViZHJpdmVy
CisKK3dpdGggd2ViZHJpdmVyLlNlc3Npb24oIjEyNy4wLjAuMSIsIDQ0NDQpIGFzIHNlc3Npb246
CisgICAgc2Vzc2lvbi51cmwgPSAiaHR0cHM6Ly9tb3ppbGxhLm9yZyIKKyAgICBwcmludCAiVGhl
IGN1cnJlbnQgVVJMIGlzICVzIiAlIHNlc3Npb24udXJsCitgYGAKKworVGhlIGZvbGxvd2luZyBp
cyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCB0byB0aGUgYWJvdmUsCitidXQgZ2l2aW5nIHlvdSBt
YW51YWwgY29udHJvbCBvZiB0aGUgc2Vzc2lvbjoKKworYGBgcHkKK2ltcG9ydCB3ZWJkcml2ZXIK
Kworc2Vzc2lvbiA9IHdlYmRyaXZlci5TZXNzaW9uKCIxMjcuMC4wLjEiLCA0NDQ0KQorc2Vzc2lv
bi5zdGFydCgpCisKK3Nlc3Npb24udXJsID0gImh0dHBzOi8vbW96aWxsYS5vcmciCitwcmludCAi
VGhlIGN1cnJlbnQgVVJMIGlzICVzIiAlIHNlc3Npb24udXJsCisKK3Nlc3Npb24uZW5kKCkKK2Bg
YAorCisjIyBEZXBlbmRlbmNpZXMKKworVGhpcyBjbGllbnQgaGFzIHRoZSBiZW5lZml0IG9mIG9u
bHkgdXNpbmcgc3RhbmRhcmQgbGlicmFyeSBkZXBlbmRlbmNpZXMuCitObyBleHRlcm5hbCBQeVBJ
IGRlcGVuZGVuY2llcyBhcmUgbmVlZGVkLgpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1w
b3J0ZWQvdzNjL3Rvb2xzL3dlYmRyaXZlci9zZXR1cC5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9y
dGVkL3czYy90b29scy93ZWJkcml2ZXIvc2V0dXAucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLmM0NzM5NjFjYjY0Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVy
VGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dlYmRyaXZlci9zZXR1cC5weQpAQCAtMCwwICsxLDE0
IEBACitmcm9tIHNldHVwdG9vbHMgaW1wb3J0IHNldHVwLCBmaW5kX3BhY2thZ2VzCisKK3NldHVw
KG5hbWU9IndlYmRyaXZlciIsCisgICAgICB2ZXJzaW9uPSIxLjAiLAorICAgICAgZGVzY3JpcHRp
b249IldlYkRyaXZlciBjbGllbnQgY29tcGF0aWJsZSB3aXRoICIKKyAgICAgICAgICAgICAgICAg
ICJ0aGUgVzNDIGJyb3dzZXIgYXV0b21hdGlvbiBzcGVjaWZpY2F0aW9uLiIsCisgICAgICBhdXRo
b3I9Ik1vemlsbGEgRW5naW5lZXJpbmcgUHJvZHVjdGl2aXR5IiwKKyAgICAgIGF1dGhvcl9lbWFp
bD0idG9vbHNAbGlzdHMubW96aWxsYS5vcmciLAorICAgICAgbGljZW5zZT0iQlNEIiwKKyAgICAg
IHBhY2thZ2VzPWZpbmRfcGFja2FnZXMoKSwKKyAgICAgIGNsYXNzaWZpZXJzPVsiRGV2ZWxvcG1l
bnQgU3RhdHVzIDo6IDQgLSBCZXRhIiwKKyAgICAgICAgICAgICAgICAgICAiSW50ZW5kZWQgQXVk
aWVuY2UgOjogRGV2ZWxvcGVycyIsCisgICAgICAgICAgICAgICAgICAgIkxpY2Vuc2UgOjogT1NJ
IEFwcHJvdmVkIDo6IE1vemlsbGEgUHVibGljIExpY2Vuc2UgMi4wIChNUEwgMi4wKSIsCisgICAg
ICAgICAgICAgICAgICAgIk9wZXJhdGluZyBTeXN0ZW0gOjogT1MgSW5kZXBlbmRlbnQiXSkKZGlm
ZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93ZWJkcml2ZXIvd2Vi
ZHJpdmVyL19faW5pdF9fLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dl
YmRyaXZlci93ZWJkcml2ZXIvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLjMwMjQzZjcyMDVkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVz
dHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dlYmRyaXZlci93ZWJkcml2ZXIvX19pbml0X18ucHkKQEAg
LTAsMCArMSwyNyBAQAorZnJvbSBjbGllbnQgaW1wb3J0IENvb2tpZXMsIEVsZW1lbnQsIEZpbmQs
IFNlc3Npb24sIFRpbWVvdXRzLCBXaW5kb3cKK2Zyb20gZXJyb3IgaW1wb3J0ICgKKyAgICBFbGVt
ZW50Tm90U2VsZWN0YWJsZUV4Y2VwdGlvbiwKKyAgICBFbGVtZW50Tm90VmlzaWJsZUV4Y2VwdGlv
biwKKyAgICBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24sCisgICAgSW52YWxpZENvb2tpZURvbWFp
bkV4Y2VwdGlvbiwKKyAgICBJbnZhbGlkRWxlbWVudENvb3JkaW5hdGVzRXhjZXB0aW9uLAorICAg
IEludmFsaWRFbGVtZW50U3RhdGVFeGNlcHRpb24sCisgICAgSW52YWxpZFNlbGVjdG9yRXhjZXB0
aW9uLAorICAgIEludmFsaWRTZXNzaW9uSWRFeGNlcHRpb24sCisgICAgSmF2YXNjcmlwdEVycm9y
RXhjZXB0aW9uLAorICAgIE1vdmVUYXJnZXRPdXRPZkJvdW5kc0V4Y2VwdGlvbiwKKyAgICBOb1N1
Y2hBbGVydEV4Y2VwdGlvbiwKKyAgICBOb1N1Y2hFbGVtZW50RXhjZXB0aW9uLAorICAgIE5vU3Vj
aEZyYW1lRXhjZXB0aW9uLAorICAgIE5vU3VjaFdpbmRvd0V4Y2VwdGlvbiwKKyAgICBTY3JpcHRU
aW1lb3V0RXhjZXB0aW9uLAorICAgIFNlc3Npb25Ob3RDcmVhdGVkRXhjZXB0aW9uLAorICAgIFN0
YWxlRWxlbWVudFJlZmVyZW5jZUV4Y2VwdGlvbiwKKyAgICBUaW1lb3V0RXhjZXB0aW9uLAorICAg
IFVuYWJsZVRvU2V0Q29va2llRXhjZXB0aW9uLAorICAgIFVuZXhwZWN0ZWRBbGVydE9wZW5FeGNl
cHRpb24sCisgICAgVW5rbm93bkNvbW1hbmRFeGNlcHRpb24sCisgICAgVW5rbm93bkVycm9yRXhj
ZXB0aW9uLAorICAgIFVua25vd25NZXRob2RFeGNlcHRpb24sCisgICAgVW5zdXBwb3J0ZWRPcGVy
YXRpb25FeGNlcHRpb24sCisgICAgV2ViRHJpdmVyRXhjZXB0aW9uKQpkaWZmIC0tZ2l0IGEvV2Vi
RHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dlYmRyaXZlci93ZWJkcml2ZXIvY2xpZW50
LnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dlYmRyaXZlci93ZWJkcml2
ZXIvY2xpZW50LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40NTM0
YWIzY2Q0MQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90
b29scy93ZWJkcml2ZXIvd2ViZHJpdmVyL2NsaWVudC5weQpAQCAtMCwwICsxLDY4MCBAQAoraW1w
b3J0IGpzb24KK2ltcG9ydCB1cmxwYXJzZQorCitpbXBvcnQgZXJyb3IKK2ltcG9ydCB0cmFuc3Bv
cnQKKworZnJvbSBtb3psb2cgaW1wb3J0IGdldF9kZWZhdWx0X2xvZ2dlcgorCitsb2dnZXIgPSBn
ZXRfZGVmYXVsdF9sb2dnZXIoKQorCitlbGVtZW50X2tleSA9ICJlbGVtZW50LTYwNjYtMTFlNC1h
NTJlLTRmNzM1NDY2Y2VjZiIKKworCitkZWYgY29tbWFuZChmdW5jKToKKyAgICBkZWYgaW5uZXIo
c2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAic2Vzc2lv
biIpOgorICAgICAgICAgICAgc2Vzc2lvbiA9IHNlbGYuc2Vzc2lvbgorICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgc2Vzc2lvbiA9IHNlbGYKKworICAgICAgICBpZiBzZXNzaW9uLnNlc3Npb25f
aWQgaXMgTm9uZToKKyAgICAgICAgICAgIHNlc3Npb24uc3RhcnQoKQorICAgICAgICBhc3NlcnQg
c2Vzc2lvbi5zZXNzaW9uX2lkIGlzIG5vdCBOb25lCisKKyAgICAgICAgcmV0dXJuIGZ1bmMoc2Vs
ZiwgKmFyZ3MsICoqa3dhcmdzKQorCisgICAgaW5uZXIuX19uYW1lX18gPSBmdW5jLl9fbmFtZV9f
CisgICAgaW5uZXIuX19kb2NfXyA9IGZ1bmMuX19kb2NfXworCisgICAgcmV0dXJuIGlubmVyCisK
KworY2xhc3MgVGltZW91dHMob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXNz
aW9uKToKKyAgICAgICAgc2VsZi5zZXNzaW9uID0gc2Vzc2lvbgorCisgICAgZGVmIF9nZXQoc2Vs
Ziwga2V5PU5vbmUpOgorICAgICAgICB0aW1lb3V0cyA9IHNlbGYuc2Vzc2lvbi5zZW5kX3Nlc3Np
b25fY29tbWFuZCgiR0VUIiwgInRpbWVvdXRzIikKKyAgICAgICAgaWYga2V5IGlzIG5vdCBOb25l
OgorICAgICAgICAgICAgcmV0dXJuIHRpbWVvdXRzW2tleV0KKyAgICAgICAgcmV0dXJuIHRpbWVv
dXRzCisKKyAgICBkZWYgX3NldChzZWxmLCBrZXksIHNlY3MpOgorICAgICAgICBib2R5ID0ge2tl
eTogc2VjcyAqIDEwMDB9CisgICAgICAgIHRpbWVvdXRzID0gc2VsZi5zZXNzaW9uLnNlbmRfc2Vz
c2lvbl9jb21tYW5kKCJQT1NUIiwgInRpbWVvdXRzIiwgYm9keSkKKyAgICAgICAgcmV0dXJuIHRp
bWVvdXRzW2tleV0KKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBzY3JpcHQoc2VsZik6CisgICAg
ICAgIHJldHVybiBzZWxmLl9nZXQoInNjcmlwdCIpCisKKyAgICBAc2NyaXB0LnNldHRlcgorICAg
IGRlZiBzY3JpcHQoc2VsZiwgc2Vjcyk6CisgICAgICAgIHJldHVybiBzZWxmLl9zZXQoInNjcmlw
dCIsIHNlY3MpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcGFnZV9sb2FkKHNlbGYpOgorICAg
ICAgICByZXR1cm4gc2VsZi5fZ2V0KCJwYWdlTG9hZCIpCisKKyAgICBAcGFnZV9sb2FkLnNldHRl
cgorICAgIGRlZiBwYWdlX2xvYWQoc2VsZiwgc2Vjcyk6CisgICAgICAgIHJldHVybiBzZWxmLl9z
ZXQoInBhZ2VMb2FkIiwgc2VjcykKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBpbXBsaWNpdChz
ZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2dldCgiaW1wbGljaXQiKQorCisgICAgQGltcGxp
Y2l0LnNldHRlcgorICAgIGRlZiBpbXBsaWNpdChzZWxmLCBzZWNzKToKKyAgICAgICAgcmV0dXJu
IHNlbGYuX3NldCgiaW1wbGljaXQiLCBzZWNzKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6Cisg
ICAgICAgIG5hbWUgPSAiJXMuJXMiICUgKHNlbGYuX19tb2R1bGVfXywgc2VsZi5fX2NsYXNzX18u
X19uYW1lX18pCisgICAgICAgIHJldHVybiAiPCVzIHNjcmlwdD0lZCwgbG9hZD0lZCwgaW1wbGlj
aXQ9JWQ+IiAlIFwKKyAgICAgICAgICAgIChuYW1lLCBzZWxmLnNjcmlwdCwgc2VsZi5wYWdlX2xv
YWQsIHNlbGYuaW1wbGljaXQpCisKKworY2xhc3MgQWN0aW9uU2VxdWVuY2Uob2JqZWN0KToKKyAg
ICAiIiJBUEkgZm9yIGNyZWF0aW5nIGFuZCBwZXJmb3JtaW5nIGFjdGlvbiBzZXF1ZW5jZXMuCisK
KyAgICBFYWNoIGFjdGlvbiBtZXRob2QgYWRkcyBvbmUgb3IgbW9yZSBhY3Rpb25zIHRvIGEgcXVl
dWUuIFdoZW4gcGVyZm9ybSgpCisgICAgaXMgY2FsbGVkLCB0aGUgcXVldWVkIGFjdGlvbnMgZmly
ZSBpbiBvcmRlci4KKworICAgIE1heSBiZSBjaGFpbmVkIHRvZ2V0aGVyIGFzIGluOjoKKworICAg
ICAgICAgQWN0aW9uU2VxdWVuY2Uoc2Vzc2lvbiwgImtleSIsIGlkKSBcCisgICAgICAgICAgICAu
a2V5X2Rvd24oImEiKSBcCisgICAgICAgICAgICAua2V5X3VwKCJhIikgXAorICAgICAgICAgICAg
LnBlcmZvcm0oKQorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXNzaW9uLCBhY3Rp
b25fdHlwZSwgaW5wdXRfaWQsIHBvaW50ZXJfcGFyYW1zPU5vbmUpOgorICAgICAgICAiIiJSZXBy
ZXNlbnRzIGEgc2VxdWVuY2Ugb2YgYWN0aW9ucyBvZiBvbmUgdHlwZSBmb3Igb25lIGlucHV0IHNv
dXJjZS4KKworICAgICAgICA6cGFyYW0gc2Vzc2lvbjogV2ViRHJpdmVyIHNlc3Npb24uCisgICAg
ICAgIDpwYXJhbSBhY3Rpb25fdHlwZTogQWN0aW9uIHR5cGU7IG1heSBiZSAibm9uZSIsICJrZXki
LCBvciAicG9pbnRlciIuCisgICAgICAgIDpwYXJhbSBpbnB1dF9pZDogSUQgb2YgaW5wdXQgc291
cmNlLgorICAgICAgICA6cGFyYW0gcG9pbnRlcl9wYXJhbXM6IE9wdGlvbmFsIGRpY3Rpb25hcnkg
b2YgcG9pbnRlciBwYXJhbWV0ZXJzLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5zZXNzaW9u
ID0gc2Vzc2lvbgorICAgICAgICBzZWxmLl9pZCA9IGlucHV0X2lkCisgICAgICAgIHNlbGYuX3R5
cGUgPSBhY3Rpb25fdHlwZQorICAgICAgICBzZWxmLl9hY3Rpb25zID0gW10KKyAgICAgICAgc2Vs
Zi5fcG9pbnRlcl9wYXJhbXMgPSBwb2ludGVyX3BhcmFtcworCisgICAgQHByb3BlcnR5CisgICAg
ZGVmIGRpY3Qoc2VsZik6CisgICAgICAgIGQgPSB7CisgICAgICAgICAgICAidHlwZSI6IHNlbGYu
X3R5cGUsCisgICAgICAgICAgICAiaWQiOiBzZWxmLl9pZCwKKyAgICAgICAgICAgICJhY3Rpb25z
Ijogc2VsZi5fYWN0aW9ucywKKyAgICAgICAgfQorICAgICAgICBpZiBzZWxmLl9wb2ludGVyX3Bh
cmFtcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGRbInBhcmFtZXRlcnMiXSA9IHNlbGYuX3Bv
aW50ZXJfcGFyYW1zCisgICAgICAgIHJldHVybiBkCisKKyAgICBAY29tbWFuZAorICAgIGRlZiBw
ZXJmb3JtKHNlbGYpOgorICAgICAgICAiIiJQZXJmb3JtIGFsbCBxdWV1ZWQgYWN0aW9ucy4iIiIK
KyAgICAgICAgc2VsZi5zZXNzaW9uLmFjdGlvbnMucGVyZm9ybShbc2VsZi5kaWN0XSkKKworICAg
IGRlZiBfa2V5X2FjdGlvbihzZWxmLCBzdWJ0eXBlLCB2YWx1ZSk6CisgICAgICAgIHNlbGYuX2Fj
dGlvbnMuYXBwZW5kKHsidHlwZSI6IHN1YnR5cGUsICJ2YWx1ZSI6IHZhbHVlfSkKKworICAgIGRl
ZiBfcG9pbnRlcl9hY3Rpb24oc2VsZiwgc3VidHlwZSwgYnV0dG9uKToKKyAgICAgICAgc2VsZi5f
YWN0aW9ucy5hcHBlbmQoeyJ0eXBlIjogc3VidHlwZSwgImJ1dHRvbiI6IGJ1dHRvbn0pCisKKyAg
ICBkZWYgcGF1c2Uoc2VsZiwgZHVyYXRpb24pOgorICAgICAgICBzZWxmLl9hY3Rpb25zLmFwcGVu
ZCh7InR5cGUiOiAicGF1c2UiLCAiZHVyYXRpb24iOiBkdXJhdGlvbn0pCisgICAgICAgIHJldHVy
biBzZWxmCisKKyAgICBkZWYgcG9pbnRlcl9tb3ZlKHNlbGYsIHgsIHksIGR1cmF0aW9uPU5vbmUs
IG9yaWdpbj1Ob25lKToKKyAgICAgICAgIiIiUXVldWUgYSBwb2ludGVyTW92ZSBhY3Rpb24uCisK
KyAgICAgICAgOnBhcmFtIHg6IERlc3RpbmF0aW9uIHgtYXhpcyBjb29yZGluYXRlIG9mIHBvaW50
ZXIgaW4gQ1NTIHBpeGVscy4KKyAgICAgICAgOnBhcmFtIHk6IERlc3RpbmF0aW9uIHktYXhpcyBj
b29yZGluYXRlIG9mIHBvaW50ZXIgaW4gQ1NTIHBpeGVscy4KKyAgICAgICAgOnBhcmFtIGR1cmF0
aW9uOiBOdW1iZXIgb2YgbWlsbGlzZWNvbmRzIG92ZXIgd2hpY2ggdG8gZGlzdHJpYnV0ZSB0aGUK
KyAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZlLiBJZiBOb25lLCByZW1vdGUgZW5kIGRlZmF1
bHRzIHRvIDAuCisgICAgICAgIDpwYXJhbSBvcmlnaW46IE9yaWdpbiBvZiBjb29yZGluYXRlcywg
ZWl0aGVyICJ2aWV3cG9ydCIsICJwb2ludGVyIiBvcgorICAgICAgICAgICAgICAgICAgICAgICBh
biBFbGVtZW50LiBJZiBOb25lLCByZW1vdGUgZW5kIGRlZmF1bHRzIHRvICJ2aWV3cG9ydCIuCisg
ICAgICAgICIiIgorICAgICAgICBhY3Rpb24gPSB7CisgICAgICAgICAgICAidHlwZSI6ICJwb2lu
dGVyTW92ZSIsCisgICAgICAgICAgICAieCI6IHgsCisgICAgICAgICAgICAieSI6IHkKKyAgICAg
ICAgfQorICAgICAgICBpZiBkdXJhdGlvbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGFjdGlv
blsiZHVyYXRpb24iXSA9IGR1cmF0aW9uCisgICAgICAgIGlmIG9yaWdpbiBpcyBub3QgTm9uZToK
KyAgICAgICAgICAgIGFjdGlvblsib3JpZ2luIl0gPSBvcmlnaW4gaWYgaXNpbnN0YW5jZShvcmln
aW4sIGJhc2VzdHJpbmcpIGVsc2Ugb3JpZ2luLmpzb24oKQorICAgICAgICBzZWxmLl9hY3Rpb25z
LmFwcGVuZChhY3Rpb24pCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgcG9pbnRlcl91
cChzZWxmLCBidXR0b249MCk6CisgICAgICAgICIiIlF1ZXVlIGEgcG9pbnRlclVwIGFjdGlvbiBm
b3IgYGJ1dHRvbmAuCisKKyAgICAgICAgOnBhcmFtIGJ1dHRvbjogUG9pbnRlciBidXR0b24gdG8g
cGVyZm9ybSBhY3Rpb24gd2l0aC4KKyAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdDogMCwg
d2hpY2ggcmVwcmVzZW50cyBtYWluIGRldmljZSBidXR0b24uCisgICAgICAgICIiIgorICAgICAg
ICBzZWxmLl9wb2ludGVyX2FjdGlvbigicG9pbnRlclVwIiwgYnV0dG9uKQorICAgICAgICByZXR1
cm4gc2VsZgorCisgICAgZGVmIHBvaW50ZXJfZG93bihzZWxmLCBidXR0b249MCk6CisgICAgICAg
ICIiIlF1ZXVlIGEgcG9pbnRlckRvd24gYWN0aW9uIGZvciBgYnV0dG9uYC4KKworICAgICAgICA6
cGFyYW0gYnV0dG9uOiBQb2ludGVyIGJ1dHRvbiB0byBwZXJmb3JtIGFjdGlvbiB3aXRoLgorICAg
ICAgICAgICAgICAgICAgICAgICBEZWZhdWx0OiAwLCB3aGljaCByZXByZXNlbnRzIG1haW4gZGV2
aWNlIGJ1dHRvbi4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX3BvaW50ZXJfYWN0aW9uKCJw
b2ludGVyRG93biIsIGJ1dHRvbikKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBjbGlj
ayhzZWxmLCBlbGVtZW50PU5vbmUsIGJ1dHRvbj0wKToKKyAgICAgICAgIiIiUXVldWUgYSBjbGlj
ayB3aXRoIHRoZSBzcGVjaWZpZWQgYnV0dG9uLgorCisgICAgICAgIElmIGFuIGVsZW1lbnQgaXMg
Z2l2ZW4sIG1vdmUgdGhlIHBvaW50ZXIgdG8gdGhhdCBlbGVtZW50IGZpcnN0LAorICAgICAgICBv
dGhlcndpc2UgY2xpY2sgY3VycmVudCBwb2ludGVyIGNvb3JkaW5hdGVzLgorCisgICAgICAgIDpw
YXJhbSBlbGVtZW50OiBPcHRpb25hbCBlbGVtZW50IHRvIGNsaWNrLgorICAgICAgICA6cGFyYW0g
YnV0dG9uOiBJbnRlZ2VyIHJlcHJlc2VudGluZyBwb2ludGVyIGJ1dHRvbiB0byBwZXJmb3JtIGFj
dGlvbgorICAgICAgICAgICAgICAgICAgICAgICB3aXRoLiBEZWZhdWx0OiAwLCB3aGljaCByZXBy
ZXNlbnRzIG1haW4gZGV2aWNlIGJ1dHRvbi4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGVsZW1l
bnQ6CisgICAgICAgICAgICBzZWxmLnBvaW50ZXJfbW92ZSgwLCAwLCBvcmlnaW49ZWxlbWVudCkK
KyAgICAgICAgcmV0dXJuIHNlbGYucG9pbnRlcl9kb3duKGJ1dHRvbikucG9pbnRlcl91cChidXR0
b24pCisKKyAgICBkZWYga2V5X3VwKHNlbGYsIHZhbHVlKToKKyAgICAgICAgIiIiUXVldWUgYSBr
ZXlVcCBhY3Rpb24gZm9yIGB2YWx1ZWAuCisKKyAgICAgICAgOnBhcmFtIHZhbHVlOiBDaGFyYWN0
ZXIgdG8gcGVyZm9ybSBrZXkgYWN0aW9uIHdpdGguCisgICAgICAgICIiIgorICAgICAgICBzZWxm
Ll9rZXlfYWN0aW9uKCJrZXlVcCIsIHZhbHVlKQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAg
ZGVmIGtleV9kb3duKHNlbGYsIHZhbHVlKToKKyAgICAgICAgIiIiUXVldWUgYSBrZXlEb3duIGFj
dGlvbiBmb3IgYHZhbHVlYC4KKworICAgICAgICA6cGFyYW0gdmFsdWU6IENoYXJhY3RlciB0byBw
ZXJmb3JtIGtleSBhY3Rpb24gd2l0aC4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2tleV9h
Y3Rpb24oImtleURvd24iLCB2YWx1ZSkKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBz
ZW5kX2tleXMoc2VsZiwga2V5cyk6CisgICAgICAgICIiIlF1ZXVlIGEga2V5RG93biBhbmQga2V5
VXAgYWN0aW9uIGZvciBlYWNoIGNoYXJhY3RlciBpbiBga2V5c2AuCisKKyAgICAgICAgOnBhcmFt
IGtleXM6IFN0cmluZyBvZiBrZXlzIHRvIHBlcmZvcm0ga2V5IGFjdGlvbnMgd2l0aC4KKyAgICAg
ICAgIiIiCisgICAgICAgIGZvciBjIGluIGtleXM6CisgICAgICAgICAgICBzZWxmLmtleV9kb3du
KGMpCisgICAgICAgICAgICBzZWxmLmtleV91cChjKQorICAgICAgICByZXR1cm4gc2VsZgorCisK
K2NsYXNzIEFjdGlvbnMob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2Vzc2lvbik6
CisgICAgICAgIHNlbGYuc2Vzc2lvbiA9IHNlc3Npb24KKworICAgIEBjb21tYW5kCisgICAgZGVm
IHBlcmZvcm0oc2VsZiwgYWN0aW9ucz1Ob25lKToKKyAgICAgICAgIiIiUGVyZm9ybXMgYWN0aW9u
cyBieSB0aWNrIGZyb20gZWFjaCBhY3Rpb24gc2VxdWVuY2UgaW4gYGFjdGlvbnNgLgorCisgICAg
ICAgIDpwYXJhbSBhY3Rpb25zOiBMaXN0IG9mIGlucHV0IHNvdXJjZSBhY3Rpb24gc2VxdWVuY2Vz
LiBBIHNpbmdsZSBhY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIHNlcXVlbmNlIG1heSBi
ZSBjcmVhdGVkIHdpdGggdGhlIGhlbHAgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgIGBgQWN0
aW9uU2VxdWVuY2UuZGljdGBgLgorICAgICAgICAiIiIKKyAgICAgICAgYm9keSA9IHsiYWN0aW9u
cyI6IFtdIGlmIGFjdGlvbnMgaXMgTm9uZSBlbHNlIGFjdGlvbnN9CisgICAgICAgIHJldHVybiBz
ZWxmLnNlc3Npb24uc2VuZF9zZXNzaW9uX2NvbW1hbmQoIlBPU1QiLCAiYWN0aW9ucyIsIGJvZHkp
CisKKyAgICBAY29tbWFuZAorICAgIGRlZiByZWxlYXNlKHNlbGYpOgorICAgICAgICByZXR1cm4g
c2VsZi5zZXNzaW9uLnNlbmRfc2Vzc2lvbl9jb21tYW5kKCJERUxFVEUiLCAiYWN0aW9ucyIpCisK
KyAgICBkZWYgc2VxdWVuY2Uoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgIiIiUmV0
dXJuIGFuIGVtcHR5IEFjdGlvblNlcXVlbmNlIG9mIHRoZSBkZXNpZ25hdGVkIHR5cGUuCisKKyAg
ICAgICAgU2VlIEFjdGlvblNlcXVlbmNlIGZvciBwYXJhbWV0ZXIgbGlzdC4KKyAgICAgICAgIiIi
CisgICAgICAgIHJldHVybiBBY3Rpb25TZXF1ZW5jZShzZWxmLnNlc3Npb24sICphcmdzLCAqKmt3
YXJncykKKworCitjbGFzcyBXaW5kb3cob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
c2Vzc2lvbik6CisgICAgICAgIHNlbGYuc2Vzc2lvbiA9IHNlc3Npb24KKworICAgIEBwcm9wZXJ0
eQorICAgIEBjb21tYW5kCisgICAgZGVmIHJlY3Qoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxm
LnNlc3Npb24uc2VuZF9zZXNzaW9uX2NvbW1hbmQoIkdFVCIsICJ3aW5kb3cvcmVjdCIpCisKKyAg
ICBAcHJvcGVydHkKKyAgICBAY29tbWFuZAorICAgIGRlZiBzaXplKHNlbGYpOgorICAgICAgICAi
IiJHZXRzIHRoZSB3aW5kb3cgc2l6ZSBhcyBhIHR1cGxlIG9mIGAod2lkdGgsIGhlaWdodClgLiIi
IgorICAgICAgICByZWN0ID0gc2VsZi5yZWN0CisgICAgICAgIHJldHVybiAocmVjdFsid2lkdGgi
XSwgcmVjdFsiaGVpZ2h0Il0pCisKKyAgICBAc2l6ZS5zZXR0ZXIKKyAgICBAY29tbWFuZAorICAg
IGRlZiBzaXplKHNlbGYsIG5ld19zaXplKToKKyAgICAgICAgIiIiU2V0IHdpbmRvdyBzaXplIGJ5
IHBhc3NpbmcgYSB0dXBsZSBvZiBgKHdpZHRoLCBoZWlnaHQpYC4iIiIKKyAgICAgICAgd2lkdGgs
IGhlaWdodCA9IG5ld19zaXplCisgICAgICAgIGJvZHkgPSB7IndpZHRoIjogd2lkdGgsICJoZWln
aHQiOiBoZWlnaHR9CisgICAgICAgIHNlbGYuc2Vzc2lvbi5zZW5kX3Nlc3Npb25fY29tbWFuZCgi
UE9TVCIsICJ3aW5kb3cvcmVjdCIsIGJvZHkpCisKKyAgICBAcHJvcGVydHkKKyAgICBAY29tbWFu
ZAorICAgIGRlZiBwb3NpdGlvbihzZWxmKToKKyAgICAgICAgIiIiR2V0cyB0aGUgd2luZG93IHBv
c2l0aW9uIGFzIGEgdHVwbGUgb2YgYCh4LCB5KWAuIiIiCisgICAgICAgIHJlY3QgPSBzZWxmLnJl
Y3QKKyAgICAgICAgcmV0dXJuIChyZWN0WyJ4Il0sIHJlY3RbInkiXSkKKworICAgIEBwb3NpdGlv
bi5zZXR0ZXIKKyAgICBAY29tbWFuZAorICAgIGRlZiBwb3NpdGlvbihzZWxmLCBuZXdfcG9zaXRp
b24pOgorICAgICAgICAiIiJTZXQgd2luZG93IHBvc2l0aW9uIGJ5IHBhc3NpbmcgYSB0dXBsZSBv
ZiBgKHgsIHkpYC4iIiIKKyAgICAgICAgeCwgeSA9IG5ld19wb3NpdGlvbgorICAgICAgICBib2R5
ID0geyJ4IjogeCwgInkiOiB5fQorICAgICAgICBzZWxmLnNlc3Npb24uc2VuZF9zZXNzaW9uX2Nv
bW1hbmQoIlBPU1QiLCAid2luZG93L3JlY3QiLCBib2R5KQorCisgICAgQHByb3BlcnR5CisgICAg
QGNvbW1hbmQKKyAgICBkZWYgc3RhdGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnJlY3Rb
InN0YXRlIl0KKworICAgIEBjb21tYW5kCisgICAgZGVmIG1heGltaXplKHNlbGYpOgorICAgICAg
ICByZXR1cm4gc2VsZi5zZXNzaW9uLnNlbmRfc2Vzc2lvbl9jb21tYW5kKCJQT1NUIiwgIndpbmRv
dy9tYXhpbWl6ZSIpCisKKyAgICBAY29tbWFuZAorICAgIGRlZiBtaW5pbWl6ZShzZWxmKToKKyAg
ICAgICAgcmV0dXJuIHNlbGYuc2Vzc2lvbi5zZW5kX3Nlc3Npb25fY29tbWFuZCgiUE9TVCIsICJ3
aW5kb3cvbWluaW1pemUiKQorCisgICAgQGNvbW1hbmQKKyAgICBkZWYgZnVsbHNjcmVlbihzZWxm
KToKKyAgICAgICAgcmV0dXJuIHNlbGYuc2Vzc2lvbi5zZW5kX3Nlc3Npb25fY29tbWFuZCgiUE9T
VCIsICJ3aW5kb3cvZnVsbHNjcmVlbiIpCisKKworY2xhc3MgRmluZChvYmplY3QpOgorICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBzZXNzaW9uKToKKyAgICAgICAgc2VsZi5zZXNzaW9uID0gc2Vzc2lv
bgorCisgICAgQGNvbW1hbmQKKyAgICBkZWYgY3NzKHNlbGYsIHNlbGVjdG9yLCBhbGw9VHJ1ZSk6
CisgICAgICAgIHJldHVybiBzZWxmLl9maW5kX2VsZW1lbnQoImNzcyBzZWxlY3RvciIsIHNlbGVj
dG9yLCBhbGwpCisKKyAgICBkZWYgX2ZpbmRfZWxlbWVudChzZWxmLCBzdHJhdGVneSwgc2VsZWN0
b3IsIGFsbCk6CisgICAgICAgIHJvdXRlID0gImVsZW1lbnRzIiBpZiBhbGwgZWxzZSAiZWxlbWVu
dCIKKworICAgICAgICBib2R5ID0geyJ1c2luZyI6IHN0cmF0ZWd5LAorICAgICAgICAgICAgICAg
ICJ2YWx1ZSI6IHNlbGVjdG9yfQorCisgICAgICAgIGRhdGEgPSBzZWxmLnNlc3Npb24uc2VuZF9z
ZXNzaW9uX2NvbW1hbmQoIlBPU1QiLCByb3V0ZSwgYm9keSkKKworICAgICAgICBpZiBhbGw6Cisg
ICAgICAgICAgICBydiA9IFtzZWxmLnNlc3Npb24uX2VsZW1lbnQoaXRlbSkgZm9yIGl0ZW0gaW4g
ZGF0YV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJ2ID0gc2VsZi5zZXNzaW9uLl9lbGVt
ZW50KGRhdGEpCisKKyAgICAgICAgcmV0dXJuIHJ2CisKKworY2xhc3MgQ29va2llcyhvYmplY3Qp
OgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXNzaW9uKToKKyAgICAgICAgc2VsZi5zZXNzaW9u
ID0gc2Vzc2lvbgorCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIG5hbWUpOgorICAgICAgICBz
ZWxmLnNlc3Npb24uc2VuZF9zZXNzaW9uX2NvbW1hbmQoIkdFVCIsICJjb29raWUvJXMiICUgbmFt
ZSwge30pCisKKyAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwgbmFtZSwgdmFsdWUpOgorICAgICAg
ICBjb29raWUgPSB7Im5hbWUiOiBuYW1lLAorICAgICAgICAgICAgICAgICAgInZhbHVlIjogTm9u
ZX0KKworICAgICAgICBpZiBpc2luc3RhbmNlKG5hbWUsIChzdHIsIHVuaWNvZGUpKToKKyAgICAg
ICAgICAgIGNvb2tpZVsidmFsdWUiXSA9IHZhbHVlCisgICAgICAgIGVsaWYgaGFzYXR0cih2YWx1
ZSwgInZhbHVlIik6CisgICAgICAgICAgICBjb29raWVbInZhbHVlIl0gPSB2YWx1ZS52YWx1ZQor
ICAgICAgICBzZWxmLnNlc3Npb24uc2VuZF9zZXNzaW9uX2NvbW1hbmQoIlBPU1QiLCAiY29va2ll
LyVzIiAlIG5hbWUsIHt9KQorCisKK2NsYXNzIFVzZXJQcm9tcHQob2JqZWN0KToKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgc2Vzc2lvbik6CisgICAgICAgIHNlbGYuc2Vzc2lvbiA9IHNlc3Npb24K
KworICAgIEBjb21tYW5kCisgICAgZGVmIGRpc21pc3Moc2VsZik6CisgICAgICAgIHNlbGYuc2Vz
c2lvbi5zZW5kX3Nlc3Npb25fY29tbWFuZCgiUE9TVCIsICJhbGVydC9kaXNtaXNzIikKKworICAg
IEBjb21tYW5kCisgICAgZGVmIGFjY2VwdChzZWxmKToKKyAgICAgICAgc2VsZi5zZXNzaW9uLnNl
bmRfc2Vzc2lvbl9jb21tYW5kKCJQT1NUIiwgImFsZXJ0L2FjY2VwdCIpCisKKyAgICBAcHJvcGVy
dHkKKyAgICBAY29tbWFuZAorICAgIGRlZiB0ZXh0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2Vs
Zi5zZXNzaW9uLnNlbmRfc2Vzc2lvbl9jb21tYW5kKCJHRVQiLCAiYWxlcnQvdGV4dCIpCisKKyAg
ICBAdGV4dC5zZXR0ZXIKKyAgICBAY29tbWFuZAorICAgIGRlZiB0ZXh0KHNlbGYsIHZhbHVlKToK
KyAgICAgICAgYm9keSA9IHsidmFsdWUiOiBsaXN0KHZhbHVlKX0KKyAgICAgICAgc2VsZi5zZXNz
aW9uLnNlbmRfc2Vzc2lvbl9jb21tYW5kKCJQT1NUIiwgImFsZXJ0L3RleHQiLCBib2R5PWJvZHkp
CisKKworY2xhc3MgU2Vzc2lvbihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0
LCBwb3J0LCB1cmxfcHJlZml4PSIvIiwgY2FwYWJpbGl0aWVzPU5vbmUsCisgICAgICAgICAgICAg
ICAgIHRpbWVvdXQ9Tm9uZSwgZXh0ZW5zaW9uPU5vbmUpOgorICAgICAgICBzZWxmLnRyYW5zcG9y
dCA9IHRyYW5zcG9ydC5IVFRQV2lyZVByb3RvY29sKAorICAgICAgICAgICAgaG9zdCwgcG9ydCwg
dXJsX3ByZWZpeCwgdGltZW91dD10aW1lb3V0KQorICAgICAgICBzZWxmLmNhcGFiaWxpdGllcyA9
IGNhcGFiaWxpdGllcworICAgICAgICBzZWxmLnNlc3Npb25faWQgPSBOb25lCisgICAgICAgIHNl
bGYudGltZW91dHMgPSBOb25lCisgICAgICAgIHNlbGYud2luZG93ID0gTm9uZQorICAgICAgICBz
ZWxmLmZpbmQgPSBOb25lCisgICAgICAgIHNlbGYuX2VsZW1lbnRfY2FjaGUgPSB7fQorICAgICAg
ICBzZWxmLmV4dGVuc2lvbiA9IE5vbmUKKyAgICAgICAgc2VsZi5leHRlbnNpb25fY2xzID0gZXh0
ZW5zaW9uCisKKyAgICAgICAgc2VsZi50aW1lb3V0cyA9IFRpbWVvdXRzKHNlbGYpCisgICAgICAg
IHNlbGYud2luZG93ID0gV2luZG93KHNlbGYpCisgICAgICAgIHNlbGYuZmluZCA9IEZpbmQoc2Vs
ZikKKyAgICAgICAgc2VsZi5hbGVydCA9IFVzZXJQcm9tcHQoc2VsZikKKyAgICAgICAgc2VsZi5h
Y3Rpb25zID0gQWN0aW9ucyhzZWxmKQorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAg
ICAgc2VsZi5zdGFydCgpCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18o
c2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5lbmQoKQorCisgICAgZGVmIF9f
ZGVsX18oc2VsZik6CisgICAgICAgIHNlbGYuZW5kKCkKKworICAgIGRlZiBzdGFydChzZWxmKToK
KyAgICAgICAgaWYgc2VsZi5zZXNzaW9uX2lkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0
dXJuCisKKyAgICAgICAgYm9keSA9IHt9CisKKyAgICAgICAgaWYgc2VsZi5jYXBhYmlsaXRpZXMg
aXMgbm90IE5vbmU6CisgICAgICAgICAgICBib2R5WyJjYXBhYmlsaXRpZXMiXSA9IHNlbGYuY2Fw
YWJpbGl0aWVzCisKKyAgICAgICAgdmFsdWUgPSBzZWxmLnNlbmRfY29tbWFuZCgiUE9TVCIsICJz
ZXNzaW9uIiwgYm9keT1ib2R5KQorICAgICAgICBzZWxmLnNlc3Npb25faWQgPSB2YWx1ZVsic2Vz
c2lvbklkIl0KKyAgICAgICAgc2VsZi5jYXBhYmlsaXRpZXMgPSB2YWx1ZVsiY2FwYWJpbGl0aWVz
Il0KKworICAgICAgICBpZiBzZWxmLmV4dGVuc2lvbl9jbHM6CisgICAgICAgICAgICBzZWxmLmV4
dGVuc2lvbiA9IHNlbGYuZXh0ZW5zaW9uX2NscyhzZWxmKQorCisgICAgICAgIHJldHVybiB2YWx1
ZQorCisgICAgZGVmIGVuZChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5zZXNzaW9uX2lkIGlzIE5v
bmU6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICB1cmwgPSAic2Vzc2lvbi8lcyIgJSBz
ZWxmLnNlc3Npb25faWQKKyAgICAgICAgc2VsZi5zZW5kX2NvbW1hbmQoIkRFTEVURSIsIHVybCkK
KworICAgICAgICBzZWxmLnNlc3Npb25faWQgPSBOb25lCisKKyAgICBkZWYgc2VuZF9jb21tYW5k
KHNlbGYsIG1ldGhvZCwgdXJsLCBib2R5PU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgU2Vu
ZCBhIGNvbW1hbmQgdG8gdGhlIHJlbW90ZSBlbmQgYW5kIHZhbGlkYXRlIGl0cyBzdWNjZXNzLgor
CisgICAgICAgIDpwYXJhbSBtZXRob2Q6IEhUVFAgbWV0aG9kIHRvIHVzZSBpbiByZXF1ZXN0Lgor
ICAgICAgICA6cGFyYW0gdXJpOiAiQ29tbWFuZCBwYXJ0IiBvZiB0aGUgSFRUUCByZXF1ZXN0IFVS
TCwKKyAgICAgICAgICAgIGUuZy4gYHdpbmRvdy9yZWN0YC4KKyAgICAgICAgOnBhcmFtIGJvZHk6
IE9wdGlvbmFsIGJvZHkgb2YgdGhlIEhUVFAgcmVxdWVzdC4KKworICAgICAgICA6cmV0dXJuOiBg
Tm9uZWAgaWYgdGhlIEhUVFAgcmVzcG9uc2UgYm9keSB3YXMgZW1wdHksIG90aGVyd2lzZQorICAg
ICAgICAgICAgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIHRoZSBib2R5IGFzIEpTT04uCisKKyAgICAg
ICAgOnJhaXNlcyBlcnJvci5XZWJEcml2ZXJFeGNlcHRpb246IElmIHRoZSByZW1vdGUgZW5kIHJl
dHVybnMKKyAgICAgICAgICAgIGFuIGVycm9yLgorICAgICAgICAiIiIKKyAgICAgICAgcmVzcG9u
c2UgPSBzZWxmLnRyYW5zcG9ydC5zZW5kKG1ldGhvZCwgdXJsLCBib2R5KQorCisgICAgICAgIGlm
ICJ2YWx1ZSIgaW4gcmVzcG9uc2UuYm9keToKKyAgICAgICAgICAgIHZhbHVlID0gcmVzcG9uc2Uu
Ym9keVsidmFsdWUiXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgZXJyb3IuVW5r
bm93bkVycm9yRXhjZXB0aW9uKCJObyAndmFsdWUnIGtleSBpbiByZXNwb25zZSBib2R5OlxuJXMi
ICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uLmR1
bXBzKHJlc3BvbnNlLmJvZHkpKQorCisgICAgICAgIGlmIHJlc3BvbnNlLnN0YXR1cyAhPSAyMDA6
CisgICAgICAgICAgICBjbHMgPSBlcnJvci5nZXQodmFsdWUuZ2V0KCJlcnJvciIpKQorICAgICAg
ICAgICAgcmFpc2UgY2xzKHZhbHVlLmdldCgibWVzc2FnZSIpKQorCisgICAgICAgIHJldHVybiB2
YWx1ZQorCisgICAgZGVmIHNlbmRfc2Vzc2lvbl9jb21tYW5kKHNlbGYsIG1ldGhvZCwgdXJpLCBi
b2R5PU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgU2VuZCBhIGNvbW1hbmQgdG8gYW4gZXN0
YWJsaXNoZWQgc2Vzc2lvbiBhbmQgdmFsaWRhdGUgaXRzIHN1Y2Nlc3MuCisKKyAgICAgICAgOnBh
cmFtIG1ldGhvZDogSFRUUCBtZXRob2QgdG8gdXNlIGluIHJlcXVlc3QuCisgICAgICAgIDpwYXJh
bSB1cmw6ICJDb21tYW5kIHBhcnQiIG9mIHRoZSBIVFRQIHJlcXVlc3QgVVJMLAorICAgICAgICAg
ICAgZS5nLiBgd2luZG93L3JlY3RgLgorICAgICAgICA6cGFyYW0gYm9keTogT3B0aW9uYWwgYm9k
eSBvZiB0aGUgSFRUUCByZXF1ZXN0LiAgTXVzdCBiZSBKU09OCisgICAgICAgICAgICBzZXJpYWxp
c2FibGUuCisKKyAgICAgICAgOnJldHVybjogYE5vbmVgIGlmIHRoZSBIVFRQIHJlc3BvbnNlIGJv
ZHkgd2FzIGVtcHR5LCBvdGhlcndpc2UKKyAgICAgICAgICAgIHRoZSByZXN1bHQgb2YgcGFyc2lu
ZyB0aGUgYm9keSBhcyBKU09OLgorCisgICAgICAgIDpyYWlzZXMgZXJyb3IuU2Vzc2lvbk5vdENy
ZWF0ZWRFeGNlcHRpb246IElmIHRoZXJlIGlzIG5vIGFjdGl2ZQorICAgICAgICAgICAgc2Vzc2lv
bi4KKyAgICAgICAgOnJhaXNlcyBlcnJvci5XZWJEcml2ZXJFeGNlcHRpb246IElmIHRoZSByZW1v
dGUgZW5kIHJldHVybnMKKyAgICAgICAgICAgIGFuIGVycm9yLgorICAgICAgICAiIiIKKyAgICAg
ICAgaWYgc2VsZi5zZXNzaW9uX2lkIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBlcnJvci5T
ZXNzaW9uTm90Q3JlYXRlZEV4Y2VwdGlvbigpCisKKyAgICAgICAgdXJsID0gdXJscGFyc2UudXJs
am9pbigic2Vzc2lvbi8lcy8iICUgc2VsZi5zZXNzaW9uX2lkLCB1cmkpCisgICAgICAgIHJldHVy
biBzZWxmLnNlbmRfY29tbWFuZChtZXRob2QsIHVybCwgYm9keSkKKworICAgIEBwcm9wZXJ0eQor
ICAgIEBjb21tYW5kCisgICAgZGVmIHVybChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuc2Vu
ZF9zZXNzaW9uX2NvbW1hbmQoIkdFVCIsICJ1cmwiKQorCisgICAgQHVybC5zZXR0ZXIKKyAgICBA
Y29tbWFuZAorICAgIGRlZiB1cmwoc2VsZiwgdXJsKToKKyAgICAgICAgaWYgdXJscGFyc2UudXJs
c3BsaXQodXJsKS5uZXRsb2MgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnVybCh1
cmwpCisgICAgICAgIGJvZHkgPSB7InVybCI6IHVybH0KKyAgICAgICAgcmV0dXJuIHNlbGYuc2Vu
ZF9zZXNzaW9uX2NvbW1hbmQoIlBPU1QiLCAidXJsIiwgYm9keSkKKworICAgIEBjb21tYW5kCisg
ICAgZGVmIGJhY2soc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnNlbmRfc2Vzc2lvbl9jb21t
YW5kKCJQT1NUIiwgImJhY2siKQorCisgICAgQGNvbW1hbmQKKyAgICBkZWYgZm9yd2FyZChzZWxm
KToKKyAgICAgICAgcmV0dXJuIHNlbGYuc2VuZF9zZXNzaW9uX2NvbW1hbmQoIlBPU1QiLCAiZm9y
d2FyZCIpCisKKyAgICBAY29tbWFuZAorICAgIGRlZiByZWZyZXNoKHNlbGYpOgorICAgICAgICBy
ZXR1cm4gc2VsZi5zZW5kX3Nlc3Npb25fY29tbWFuZCgiUE9TVCIsICJyZWZyZXNoIikKKworICAg
IEBwcm9wZXJ0eQorICAgIEBjb21tYW5kCisgICAgZGVmIHRpdGxlKHNlbGYpOgorICAgICAgICBy
ZXR1cm4gc2VsZi5zZW5kX3Nlc3Npb25fY29tbWFuZCgiR0VUIiwgInRpdGxlIikKKworICAgIEBw
cm9wZXJ0eQorICAgIEBjb21tYW5kCisgICAgZGVmIHdpbmRvd19oYW5kbGUoc2VsZik6CisgICAg
ICAgIHJldHVybiBzZWxmLnNlbmRfc2Vzc2lvbl9jb21tYW5kKCJHRVQiLCAid2luZG93IikKKwor
ICAgIEB3aW5kb3dfaGFuZGxlLnNldHRlcgorICAgIEBjb21tYW5kCisgICAgZGVmIHdpbmRvd19o
YW5kbGUoc2VsZiwgaGFuZGxlKToKKyAgICAgICAgYm9keSA9IHsiaGFuZGxlIjogaGFuZGxlfQor
ICAgICAgICByZXR1cm4gc2VsZi5zZW5kX3Nlc3Npb25fY29tbWFuZCgiUE9TVCIsICJ3aW5kb3ci
LCBib2R5PWJvZHkpCisKKyAgICBkZWYgc3dpdGNoX2ZyYW1lKHNlbGYsIGZyYW1lKToKKyAgICAg
ICAgaWYgZnJhbWUgPT0gInBhcmVudCI6CisgICAgICAgICAgICB1cmwgPSAiZnJhbWUvcGFyZW50
IgorICAgICAgICAgICAgYm9keSA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHVy
bCA9ICJmcmFtZSIKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZnJhbWUsIEVsZW1lbnQpOgor
ICAgICAgICAgICAgICAgIGJvZHkgPSB7ImlkIjogZnJhbWUuanNvbigpfQorICAgICAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgICAgICBib2R5ID0geyJpZCI6IGZyYW1lfQorCisgICAgICAgIHJl
dHVybiBzZWxmLnNlbmRfc2Vzc2lvbl9jb21tYW5kKCJQT1NUIiwgdXJsLCBib2R5KQorCisgICAg
QGNvbW1hbmQKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnNlbmRf
c2Vzc2lvbl9jb21tYW5kKCJERUxFVEUiLCAid2luZG93IikKKworICAgIEBwcm9wZXJ0eQorICAg
IEBjb21tYW5kCisgICAgZGVmIGhhbmRsZXMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnNl
bmRfc2Vzc2lvbl9jb21tYW5kKCJHRVQiLCAid2luZG93L2hhbmRsZXMiKQorCisgICAgQHByb3Bl
cnR5CisgICAgQGNvbW1hbmQKKyAgICBkZWYgYWN0aXZlX2VsZW1lbnQoc2VsZik6CisgICAgICAg
IGRhdGEgPSBzZWxmLnNlbmRfc2Vzc2lvbl9jb21tYW5kKCJHRVQiLCAiZWxlbWVudC9hY3RpdmUi
KQorICAgICAgICBpZiBkYXRhIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYu
X2VsZW1lbnQoZGF0YSkKKworICAgIGRlZiBfZWxlbWVudChzZWxmLCBkYXRhKToKKyAgICAgICAg
ZWxlbV9pZCA9IGRhdGFbZWxlbWVudF9rZXldCisgICAgICAgIGFzc2VydCBlbGVtX2lkCisgICAg
ICAgIGlmIGVsZW1faWQgaW4gc2VsZi5fZWxlbWVudF9jYWNoZToKKyAgICAgICAgICAgIHJldHVy
biBzZWxmLl9lbGVtZW50X2NhY2hlW2VsZW1faWRdCisgICAgICAgIHJldHVybiBFbGVtZW50KHNl
bGYsIGVsZW1faWQpCisKKyAgICBAY29tbWFuZAorICAgIGRlZiBjb29raWVzKHNlbGYsIG5hbWU9
Tm9uZSk6CisgICAgICAgIGlmIG5hbWUgaXMgTm9uZToKKyAgICAgICAgICAgIHVybCA9ICJjb29r
aWUiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB1cmwgPSAiY29va2llLyVzIiAlIG5hbWUK
KyAgICAgICAgcmV0dXJuIHNlbGYuc2VuZF9zZXNzaW9uX2NvbW1hbmQoIkdFVCIsIHVybCwge30p
CisKKyAgICBAY29tbWFuZAorICAgIGRlZiBzZXRfY29va2llKHNlbGYsIG5hbWUsIHZhbHVlLCBw
YXRoPU5vbmUsIGRvbWFpbj1Ob25lLCBzZWN1cmU9Tm9uZSwgZXhwaXJ5PU5vbmUpOgorICAgICAg
ICBib2R5ID0geyJuYW1lIjogbmFtZSwKKyAgICAgICAgICAgICAgICAidmFsdWUiOiB2YWx1ZX0K
KyAgICAgICAgaWYgcGF0aCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGJvZHlbInBhdGgiXSA9
IHBhdGgKKyAgICAgICAgaWYgZG9tYWluIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgYm9keVsi
ZG9tYWluIl0gPSBkb21haW4KKyAgICAgICAgaWYgc2VjdXJlIGlzIG5vdCBOb25lOgorICAgICAg
ICAgICAgYm9keVsic2VjdXJlIl0gPSBzZWN1cmUKKyAgICAgICAgaWYgZXhwaXJ5IGlzIG5vdCBO
b25lOgorICAgICAgICAgICAgYm9keVsiZXhwaXJ5Il0gPSBleHBpcnkKKyAgICAgICAgc2VsZi5z
ZW5kX3Nlc3Npb25fY29tbWFuZCgiUE9TVCIsICJjb29raWUiLCB7ImNvb2tpZSI6IGJvZHl9KQor
CisgICAgZGVmIGRlbGV0ZV9jb29raWUoc2VsZiwgbmFtZT1Ob25lKToKKyAgICAgICAgaWYgbmFt
ZSBpcyBOb25lOgorICAgICAgICAgICAgdXJsID0gImNvb2tpZSIKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIHVybCA9ICJjb29raWUvJXMiICUgbmFtZQorICAgICAgICBzZWxmLnNlbmRfc2Vz
c2lvbl9jb21tYW5kKCJERUxFVEUiLCB1cmwsIHt9KQorCisgICAgI1suLi5dCisKKyAgICBAY29t
bWFuZAorICAgIGRlZiBleGVjdXRlX3NjcmlwdChzZWxmLCBzY3JpcHQsIGFyZ3M9Tm9uZSk6Cisg
ICAgICAgIGlmIGFyZ3MgaXMgTm9uZToKKyAgICAgICAgICAgIGFyZ3MgPSBbXQorCisgICAgICAg
IGJvZHkgPSB7CisgICAgICAgICAgICAic2NyaXB0Ijogc2NyaXB0LAorICAgICAgICAgICAgImFy
Z3MiOiBhcmdzCisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHNlbGYuc2VuZF9zZXNzaW9uX2Nv
bW1hbmQoIlBPU1QiLCAiZXhlY3V0ZS9zeW5jIiwgYm9keSkKKworICAgIEBjb21tYW5kCisgICAg
ZGVmIGV4ZWN1dGVfYXN5bmNfc2NyaXB0KHNlbGYsIHNjcmlwdCwgYXJncz1Ob25lKToKKyAgICAg
ICAgaWYgYXJncyBpcyBOb25lOgorICAgICAgICAgICAgYXJncyA9IFtdCisKKyAgICAgICAgYm9k
eSA9IHsKKyAgICAgICAgICAgICJzY3JpcHQiOiBzY3JpcHQsCisgICAgICAgICAgICAiYXJncyI6
IGFyZ3MKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc2VsZi5zZW5kX3Nlc3Npb25fY29tbWFu
ZCgiUE9TVCIsICJleGVjdXRlL2FzeW5jIiwgYm9keSkKKworICAgICNbLi4uXQorCisgICAgQGNv
bW1hbmQKKyAgICBkZWYgc2NyZWVuc2hvdChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuc2Vu
ZF9zZXNzaW9uX2NvbW1hbmQoIkdFVCIsICJzY3JlZW5zaG90IikKKworCitjbGFzcyBFbGVtZW50
KG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlc3Npb24sIGlkKToKKyAgICAgICAg
c2VsZi5zZXNzaW9uID0gc2Vzc2lvbgorICAgICAgICBzZWxmLmlkID0gaWQKKyAgICAgICAgYXNz
ZXJ0IGlkIG5vdCBpbiBzZWxmLnNlc3Npb24uX2VsZW1lbnRfY2FjaGUKKyAgICAgICAgc2VsZi5z
ZXNzaW9uLl9lbGVtZW50X2NhY2hlW3NlbGYuaWRdID0gc2VsZgorCisgICAgZGVmIHNlbmRfZWxl
bWVudF9jb21tYW5kKHNlbGYsIG1ldGhvZCwgdXJpLCBib2R5PU5vbmUpOgorICAgICAgICB1cmwg
PSAiZWxlbWVudC8lcy8lcyIgJSAoc2VsZi5pZCwgdXJpKQorICAgICAgICByZXR1cm4gc2VsZi5z
ZXNzaW9uLnNlbmRfc2Vzc2lvbl9jb21tYW5kKG1ldGhvZCwgdXJsLCBib2R5KQorCisgICAgZGVm
IGpzb24oc2VsZik6CisgICAgICAgIHJldHVybiB7ZWxlbWVudF9rZXk6IHNlbGYuaWR9CisKKyAg
ICBAY29tbWFuZAorICAgIGRlZiBmaW5kX2VsZW1lbnQoc2VsZiwgc3RyYXRlZ3ksIHNlbGVjdG9y
KToKKyAgICAgICAgYm9keSA9IHsidXNpbmciOiBzdHJhdGVneSwKKyAgICAgICAgICAgICAgICAi
dmFsdWUiOiBzZWxlY3Rvcn0KKworICAgICAgICBlbGVtID0gc2VsZi5zZW5kX2VsZW1lbnRfY29t
bWFuZCgiUE9TVCIsICJlbGVtZW50IiwgYm9keSkKKyAgICAgICAgcmV0dXJuIHNlbGYuc2Vzc2lv
bi5fZWxlbWVudChlbGVtKQorCisgICAgQGNvbW1hbmQKKyAgICBkZWYgY2xpY2soc2VsZik6Cisg
ICAgICAgIHNlbGYuc2VuZF9lbGVtZW50X2NvbW1hbmQoIlBPU1QiLCAiY2xpY2siLCB7fSkKKwor
ICAgIEBjb21tYW5kCisgICAgZGVmIHRhcChzZWxmKToKKyAgICAgICAgc2VsZi5zZW5kX2VsZW1l
bnRfY29tbWFuZCgiUE9TVCIsICJ0YXAiLCB7fSkKKworICAgIEBjb21tYW5kCisgICAgZGVmIGNs
ZWFyKHNlbGYpOgorICAgICAgICBzZWxmLnNlbmRfZWxlbWVudF9jb21tYW5kKCJQT1NUIiwgc2Vs
Zi51cmwoImNsZWFyIiksIHt9KQorCisgICAgQGNvbW1hbmQKKyAgICBkZWYgc2VuZF9rZXlzKHNl
bGYsIHRleHQpOgorICAgICAgICByZXR1cm4gc2VsZi5zZW5kX2VsZW1lbnRfY29tbWFuZCgiUE9T
VCIsICJ2YWx1ZSIsIHsidGV4dCI6IHRleHR9KQorCisgICAgQHByb3BlcnR5CisgICAgQGNvbW1h
bmQKKyAgICBkZWYgdGV4dChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuc2VuZF9lbGVtZW50
X2NvbW1hbmQoIkdFVCIsICJ0ZXh0IikKKworICAgIEBwcm9wZXJ0eQorICAgIEBjb21tYW5kCisg
ICAgZGVmIG5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnNlbmRfZWxlbWVudF9jb21t
YW5kKCJHRVQiLCAibmFtZSIpCisKKyAgICBAY29tbWFuZAorICAgIGRlZiBzdHlsZShzZWxmLCBw
cm9wZXJ0eV9uYW1lKToKKyAgICAgICAgcmV0dXJuIHNlbGYuc2VuZF9lbGVtZW50X2NvbW1hbmQo
IkdFVCIsICJjc3MvJXMiICUgcHJvcGVydHlfbmFtZSkKKworICAgIEBwcm9wZXJ0eQorICAgIEBj
b21tYW5kCisgICAgZGVmIHJlY3Qoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnNlbmRfZWxl
bWVudF9jb21tYW5kKCJHRVQiLCAicmVjdCIpCisKKyAgICBAcHJvcGVydHkKKyAgICBAY29tbWFu
ZAorICAgIGRlZiBzZWxlY3RlZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuc2VuZF9lbGVt
ZW50X2NvbW1hbmQoIkdFVCIsICJzZWxlY3RlZCIpCisKKyAgICBAY29tbWFuZAorICAgIGRlZiBh
dHRyaWJ1dGUoc2VsZiwgbmFtZSk6CisgICAgICAgIHJldHVybiBzZWxmLnNlbmRfZWxlbWVudF9j
b21tYW5kKCJHRVQiLCAiYXR0cmlidXRlLyVzIiAlIG5hbWUpCisKKyAgICAjIFRoaXMgTVVTVCBj
b21lIGxhc3QgYmVjYXVzZSBvdGhlcndpc2UgQHByb3BlcnR5IGRlY29yYXRvcnMgYWJvdmUKKyAg
ICAjIHdpbGwgYmUgb3ZlcnJpZGRlbiBieSB0aGlzLgorICAgIEBjb21tYW5kCisgICAgZGVmIHBy
b3BlcnR5KHNlbGYsIG5hbWUpOgorICAgICAgICByZXR1cm4gc2VsZi5zZW5kX2VsZW1lbnRfY29t
bWFuZCgiR0VUIiwgInByb3BlcnR5LyVzIiAlIG5hbWUpCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJU
ZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd2ViZHJpdmVyL3dlYmRyaXZlci9lcnJvci5weSBiL1dl
YkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93ZWJkcml2ZXIvd2ViZHJpdmVyL2Vycm9y
LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wNTMwZmY5YzVkYQot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93ZWJk
cml2ZXIvd2ViZHJpdmVyL2Vycm9yLnB5CkBAIC0wLDAgKzEsMTQ0IEBACitpbXBvcnQgY29sbGVj
dGlvbnMKKworCitjbGFzcyBXZWJEcml2ZXJFeGNlcHRpb24oRXhjZXB0aW9uKToKKyAgICBodHRw
X3N0YXR1cyA9IE5vbmUKKyAgICBzdGF0dXNfY29kZSA9IE5vbmUKKworCitjbGFzcyBFbGVtZW50
Tm90U2VsZWN0YWJsZUV4Y2VwdGlvbihXZWJEcml2ZXJFeGNlcHRpb24pOgorICAgIGh0dHBfc3Rh
dHVzID0gNDAwCisgICAgc3RhdHVzX2NvZGUgPSAiZWxlbWVudCBub3Qgc2VsZWN0YWJsZSIKKwor
CitjbGFzcyBFbGVtZW50Tm90VmlzaWJsZUV4Y2VwdGlvbihXZWJEcml2ZXJFeGNlcHRpb24pOgor
ICAgIGh0dHBfc3RhdHVzID0gNDAwCisgICAgc3RhdHVzX2NvZGUgPSAiZWxlbWVudCBub3Qgdmlz
aWJsZSIKKworCitjbGFzcyBJbnNlY3VyZUNlcnRpZmljYXRlRXhjZXB0aW9uKFdlYkRyaXZlckV4
Y2VwdGlvbik6CisgICAgaHR0cF9zdGF0dXMgPSA0MDAKKyAgICBzdGF0dXNfY29kZSA9ICJpbnNl
Y3VyZSBjZXJ0aWZpY2F0ZSIKKworCitjbGFzcyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oV2Vi
RHJpdmVyRXhjZXB0aW9uKToKKyAgICBodHRwX3N0YXR1cyA9IDQwMAorICAgIHN0YXR1c19jb2Rl
ID0gImludmFsaWQgYXJndW1lbnQiCisKKworY2xhc3MgSW52YWxpZENvb2tpZURvbWFpbkV4Y2Vw
dGlvbihXZWJEcml2ZXJFeGNlcHRpb24pOgorICAgIGh0dHBfc3RhdHVzID0gNDAwCisgICAgc3Rh
dHVzX2NvZGUgPSAiaW52YWxpZCBjb29raWUgZG9tYWluIgorCisKK2NsYXNzIEludmFsaWRFbGVt
ZW50Q29vcmRpbmF0ZXNFeGNlcHRpb24oV2ViRHJpdmVyRXhjZXB0aW9uKToKKyAgICBodHRwX3N0
YXR1cyA9IDQwMAorICAgIHN0YXR1c19jb2RlID0gImludmFsaWQgZWxlbWVudCBjb29yZGluYXRl
cyIKKworCitjbGFzcyBJbnZhbGlkRWxlbWVudFN0YXRlRXhjZXB0aW9uKFdlYkRyaXZlckV4Y2Vw
dGlvbik6CisgICAgaHR0cF9zdGF0dXMgPSA0MDAKKyAgICBzdGF0dXNfY29kZSA9ICJpbnZhbGlk
IGNvb2tpZSBkb21haW4iCisKKworY2xhc3MgSW52YWxpZFNlbGVjdG9yRXhjZXB0aW9uKFdlYkRy
aXZlckV4Y2VwdGlvbik6CisgICAgaHR0cF9zdGF0dXMgPSA0MDAKKyAgICBzdGF0dXNfY29kZSA9
ICJpbnZhbGlkIHNlbGVjdG9yIgorCisKK2NsYXNzIEludmFsaWRTZXNzaW9uSWRFeGNlcHRpb24o
V2ViRHJpdmVyRXhjZXB0aW9uKToKKyAgICBodHRwX3N0YXR1cyA9IDQwNAorICAgIHN0YXR1c19j
b2RlID0gImludmFsaWQgc2Vzc2lvbiBpZCIKKworCitjbGFzcyBKYXZhc2NyaXB0RXJyb3JFeGNl
cHRpb24oV2ViRHJpdmVyRXhjZXB0aW9uKToKKyAgICBodHRwX3N0YXR1cyA9IDUwMAorICAgIHN0
YXR1c19jb2RlID0gImphdmFzY3JpcHQgZXJyb3IiCisKKworY2xhc3MgTW92ZVRhcmdldE91dE9m
Qm91bmRzRXhjZXB0aW9uKFdlYkRyaXZlckV4Y2VwdGlvbik6CisgICAgaHR0cF9zdGF0dXMgPSA1
MDAKKyAgICBzdGF0dXNfY29kZSA9ICJtb3ZlIHRhcmdldCBvdXQgb2YgYm91bmRzIgorCisKK2Ns
YXNzIE5vU3VjaEFsZXJ0RXhjZXB0aW9uKFdlYkRyaXZlckV4Y2VwdGlvbik6CisgICAgaHR0cF9z
dGF0dXMgPSA0MDAKKyAgICBzdGF0dXNfY29kZSA9ICJubyBzdWNoIGFsZXJ0IgorCisKK2NsYXNz
IE5vU3VjaEVsZW1lbnRFeGNlcHRpb24oV2ViRHJpdmVyRXhjZXB0aW9uKToKKyAgICBodHRwX3N0
YXR1cyA9IDQwNAorICAgIHN0YXR1c19jb2RlID0gIm5vIHN1Y2ggZWxlbWVudCIKKworCitjbGFz
cyBOb1N1Y2hGcmFtZUV4Y2VwdGlvbihXZWJEcml2ZXJFeGNlcHRpb24pOgorICAgIGh0dHBfc3Rh
dHVzID0gNDAwCisgICAgc3RhdHVzX2NvZGUgPSAibm8gc3VjaCBmcmFtZSIKKworCitjbGFzcyBO
b1N1Y2hXaW5kb3dFeGNlcHRpb24oV2ViRHJpdmVyRXhjZXB0aW9uKToKKyAgICBodHRwX3N0YXR1
cyA9IDQwMAorICAgIHN0YXR1c19jb2RlID0gIm5vIHN1Y2ggd2luZG93IgorCisKK2NsYXNzIFNj
cmlwdFRpbWVvdXRFeGNlcHRpb24oV2ViRHJpdmVyRXhjZXB0aW9uKToKKyAgICBodHRwX3N0YXR1
cyA9IDQwOAorICAgIHN0YXR1c19jb2RlID0gInNjcmlwdCB0aW1lb3V0IgorCisKK2NsYXNzIFNl
c3Npb25Ob3RDcmVhdGVkRXhjZXB0aW9uKFdlYkRyaXZlckV4Y2VwdGlvbik6CisgICAgaHR0cF9z
dGF0dXMgPSA1MDAKKyAgICBzdGF0dXNfY29kZSA9ICJzZXNzaW9uIG5vdCBjcmVhdGVkIgorCisK
K2NsYXNzIFN0YWxlRWxlbWVudFJlZmVyZW5jZUV4Y2VwdGlvbihXZWJEcml2ZXJFeGNlcHRpb24p
OgorICAgIGh0dHBfc3RhdHVzID0gNDAwCisgICAgc3RhdHVzX2NvZGUgPSAic3RhbGUgZWxlbWVu
dCByZWZlcmVuY2UiCisKKworY2xhc3MgVGltZW91dEV4Y2VwdGlvbihXZWJEcml2ZXJFeGNlcHRp
b24pOgorICAgIGh0dHBfc3RhdHVzID0gNDA4CisgICAgc3RhdHVzX2NvZGUgPSAidGltZW91dCIK
KworCitjbGFzcyBVbmFibGVUb1NldENvb2tpZUV4Y2VwdGlvbihXZWJEcml2ZXJFeGNlcHRpb24p
OgorICAgIGh0dHBfc3RhdHVzID0gNTAwCisgICAgc3RhdHVzX2NvZGUgPSAidW5hYmxlIHRvIHNl
dCBjb29raWUiCisKKworY2xhc3MgVW5leHBlY3RlZEFsZXJ0T3BlbkV4Y2VwdGlvbihXZWJEcml2
ZXJFeGNlcHRpb24pOgorICAgIGh0dHBfc3RhdHVzID0gNTAwCisgICAgc3RhdHVzX2NvZGUgPSAi
dW5leHBlY3RlZCBhbGVydCBvcGVuIgorCisKK2NsYXNzIFVua25vd25FcnJvckV4Y2VwdGlvbihX
ZWJEcml2ZXJFeGNlcHRpb24pOgorICAgIGh0dHBfc3RhdHVzID0gNTAwCisgICAgc3RhdHVzX2Nv
ZGUgPSAidW5rbm93biBlcnJvciIKKworCitjbGFzcyBVbmtub3duQ29tbWFuZEV4Y2VwdGlvbihX
ZWJEcml2ZXJFeGNlcHRpb24pOgorICAgIGh0dHBfc3RhdHVzID0gNDA0CisgICAgc3RhdHVzX2Nv
ZGUgPSAidW5rbm93biBjb21tYW5kIgorCisKK2NsYXNzIFVua25vd25NZXRob2RFeGNlcHRpb24o
V2ViRHJpdmVyRXhjZXB0aW9uKToKKyAgICBodHRwX3N0YXR1cyA9IDQwNQorICAgIHN0YXR1c19j
b2RlID0gInVua25vd24gbWV0aG9kIgorCisKK2NsYXNzIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhj
ZXB0aW9uKFdlYkRyaXZlckV4Y2VwdGlvbik6CisgICAgaHR0cF9zdGF0dXMgPSA1MDAKKyAgICBz
dGF0dXNfY29kZSA9ICJ1bnN1cHBvcnRlZCBvcGVyYXRpb24iCisKKworZGVmIGdldChzdGF0dXNf
Y29kZSk6CisgICAgIiIiR2V0cyBleGNlcHRpb24gZnJvbSBgc3RhdHVzX2NvZGVgLCBmYWxsaW5n
IGJhY2sgdG8KKyAgICBgYFdlYkRyaXZlckV4Y2VwdGlvbmBgIGlmIGl0IGlzIG5vdCBmb3VuZC4K
KyAgICAiIiIKKyAgICByZXR1cm4gX2Vycm9ycy5nZXQoc3RhdHVzX2NvZGUsIFdlYkRyaXZlckV4
Y2VwdGlvbikKKworCitfZXJyb3JzID0gY29sbGVjdGlvbnMuZGVmYXVsdGRpY3QoKQorZm9yIGl0
ZW0gaW4gbG9jYWxzKCkudmFsdWVzKCk6CisgICAgaWYgdHlwZShpdGVtKSA9PSB0eXBlIGFuZCBp
c3N1YmNsYXNzKGl0ZW0sIFdlYkRyaXZlckV4Y2VwdGlvbik6CisgICAgICAgIF9lcnJvcnNbaXRl
bS5zdGF0dXNfY29kZV0gPSBpdGVtCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRl
ZC93M2MvdG9vbHMvd2ViZHJpdmVyL3dlYmRyaXZlci9zZXJ2by5weSBiL1dlYkRyaXZlclRlc3Rz
L2ltcG9ydGVkL3czYy90b29scy93ZWJkcml2ZXIvd2ViZHJpdmVyL3NlcnZvLnB5Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yZTBiNzIyYWJhYgotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93ZWJkcml2ZXIvd2ViZHJp
dmVyL3NlcnZvLnB5CkBAIC0wLDAgKzEsMTggQEAKK2NsYXNzIFNlcnZvRXh0ZW5zaW9uQ29tbWFu
ZHMob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2Vzc2lvbik6CisgICAgICAgIHNl
bGYuc2Vzc2lvbiA9IHNlc3Npb24KKworICAgIEBjb21tYW5kCisgICAgZGVmIGdldF9wcmVmcyhz
ZWxmLCAqcHJlZnMpOgorICAgICAgICBib2R5ID0geyJwcmVmcyI6IGxpc3QocHJlZnMpfQorICAg
ICAgICByZXR1cm4gc2VsZi5zZXNzaW9uLnNlbmRfY29tbWFuZCgiUE9TVCIsICJzZXJ2by9wcmVm
cy9nZXQiLCBib2R5KQorCisgICAgQGNvbW1hbmQKKyAgICBkZWYgc2V0X3ByZWZzKHNlbGYsIHBy
ZWZzKToKKyAgICAgICAgYm9keSA9IHsicHJlZnMiOiBwcmVmc30KKyAgICAgICAgcmV0dXJuIHNl
bGYuc2Vzc2lvbi5zZW5kX2NvbW1hbmQoIlBPU1QiLCAic2Vydm8vcHJlZnMvc2V0IiwgYm9keSkK
KworICAgIEBjb21tYW5kCisgICAgZGVmIHJlc2V0X3ByZWZzKHNlbGYsICpwcmVmcyk6CisgICAg
ICAgIGJvZHkgPSB7InByZWZzIjogbGlzdChwcmVmcyl9CisgICAgICAgIHJldHVybiBzZWxmLnNl
c3Npb24uc2VuZF9jb21tYW5kKCJQT1NUIiwgInNlcnZvL3ByZWZzL3Jlc2V0IiwgYm9keSkKZGlm
ZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93ZWJkcml2ZXIvd2Vi
ZHJpdmVyL3RyYW5zcG9ydC5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93
ZWJkcml2ZXIvd2ViZHJpdmVyL3RyYW5zcG9ydC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uMjA2ZmQzY2E3YTAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJU
ZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd2ViZHJpdmVyL3dlYmRyaXZlci90cmFuc3BvcnQucHkK
QEAgLTAsMCArMSwxMDcgQEAKK2ltcG9ydCBodHRwbGliCitpbXBvcnQganNvbgoraW1wb3J0IHVy
bHBhcnNlCisKK2ltcG9ydCBlcnJvcgorCitjbGFzcyBSZXNwb25zZShvYmplY3QpOgorICAgICIi
IkRlc2NyaWJlcyBhbiBIVFRQIHJlc3BvbnNlIHJlY2VpdmVkIGZyb20gYSByZW1vdGUgZW4iRGVz
Y3JpYmVzIGFuIEhUVFAKKyAgICByZXNwb25zZSByZWNlaXZlZCBmcm9tIGEgcmVtb3RlIGVuZCB3
aG9zZSBib2R5IGhhcyBiZWVuIHJlYWQgYW5kIHBhcnNlZCBhcworICAgIGFwcHJvcHJpYXRlLiIi
IgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdGF0dXMsIGJvZHkpOgorICAgICAgICBzZWxmLnN0
YXR1cyA9IHN0YXR1cworICAgICAgICBzZWxmLmJvZHkgPSBib2R5CisKKyAgICBkZWYgX19yZXBy
X18oc2VsZik6CisgICAgICAgIHJldHVybiAid2RjbGllbnQuUmVzcG9uc2Uoc3RhdHVzPSVkLCBi
b2R5PSVzKSIgJSAoc2VsZi5zdGF0dXMsIHNlbGYuYm9keSkKKworICAgIEBjbGFzc21ldGhvZAor
ICAgIGRlZiBmcm9tX2h0dHBfcmVzcG9uc2UoY2xzLCBodHRwX3Jlc3BvbnNlKToKKyAgICAgICAg
c3RhdHVzID0gaHR0cF9yZXNwb25zZS5zdGF0dXMKKyAgICAgICAgYm9keSA9IGh0dHBfcmVzcG9u
c2UucmVhZCgpCisKKyAgICAgICAgIyBTcGVjSUQ6IGRmbi1zZW5kLWEtcmVzcG9uc2UKKyAgICAg
ICAgIworICAgICAgICAjID4gMy4gU2V0IHRoZSByZXNwb25zZSdzIGhlYWRlciB3aXRoIG5hbWUg
YW5kIHZhbHVlIHdpdGggdGhlIGZvbGxvd2luZworICAgICAgICAjID4gICAgdmFsdWVzOgorICAg
ICAgICAjID4KKyAgICAgICAgIyA+ICAgICJDb250ZW50LVR5cGUiCisgICAgICAgICMgPiAgICAg
ICAiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCIKKyAgICAgICAgIyA+ICAgICJjYWNo
ZS1jb250cm9sIgorICAgICAgICAjID4gICAgICAgIm5vLWNhY2hlIgorCisgICAgICAgIGlmIGJv
ZHk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgYm9keSA9IGpzb24ubG9hZHMo
Ym9keSkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICByYWlzZSBlcnJvci5V
bmtub3duRXJyb3JFeGNlcHRpb24oIkZhaWxlZCB0byBkZWNvZGUgYm9keSBhcyBqc29uOlxuJXMi
ICUgYm9keSkKKworICAgICAgICByZXR1cm4gY2xzKHN0YXR1cywgYm9keSkKKworCitjbGFzcyBU
b0pzb25FbmNvZGVyKGpzb24uSlNPTkVuY29kZXIpOgorICAgIGRlZiBkZWZhdWx0KHNlbGYsIG9i
aik6CisgICAgICAgIHJldHVybiBnZXRhdHRyKG9iai5fX2NsYXNzX18sICJqc29uIiwganNvbi5K
U09ORW5jb2RlcigpLmRlZmF1bHQpKG9iaikKKworCitjbGFzcyBIVFRQV2lyZVByb3RvY29sKG9i
amVjdCk6CisgICAgIiIiVHJhbnNwb3J0cyBtZXNzYWdlcyAoY29tbWFuZHMgYW5kIHJlc3BvbnNl
cykgb3ZlciB0aGUgV2ViRHJpdmVyCisgICAgd2lyZSBwcm90b2NvbC4KKyAgICAiIiIKKworICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0LCB1cmxfcHJlZml4PSIvIiwgdGltZW91dD1O
b25lKToKKyAgICAgICAgIiIiQ29uc3RydWN0IGludGVyZmFjZSBmb3IgY29tbXVuaWNhdGluZyB3
aXRoIHRoZSByZW1vdGUgc2VydmVyLgorCisgICAgICAgIDpwYXJhbSB1cmw6IFVSTCBvZiByZW1v
dGUgV2ViRHJpdmVyIHNlcnZlci4KKyAgICAgICAgOnBhcmFtIHdhaXQ6IER1cmF0aW9uIHRvIHdh
aXQgZm9yIHJlbW90ZSB0byBhcHBlYXIuCisgICAgICAgICIiIgorCisgICAgICAgIHNlbGYuaG9z
dCA9IGhvc3QKKyAgICAgICAgc2VsZi5wb3J0ID0gcG9ydAorICAgICAgICBzZWxmLnVybF9wcmVm
aXggPSB1cmxfcHJlZml4CisKKyAgICAgICAgc2VsZi5fdGltZW91dCA9IHRpbWVvdXQKKworICAg
IGRlZiB1cmwoc2VsZiwgc3VmZml4KToKKyAgICAgICAgcmV0dXJuIHVybHBhcnNlLnVybGpvaW4o
c2VsZi5wYXRoX3ByZWZpeCwgc3VmZml4KQorCisgICAgZGVmIHNlbmQoc2VsZiwgbWV0aG9kLCB1
cmwsIGJvZHk9Tm9uZSwgaGVhZGVycz1Ob25lKToKKyAgICAgICAgIiIiU2VuZCBhIGNvbW1hbmQg
dG8gdGhlIHJlbW90ZS4KKworICAgICAgICA6cGFyYW0gbWV0aG9kOiAiUE9TVCIgb3IgIkdFVCIu
CisgICAgICAgIDpwYXJhbSB1cmw6ICJjb21tYW5kIHBhcnQiIG9mIHRoZSByZXF1ZXN0cyBVUkwg
cGF0aAorICAgICAgICA6cGFyYW0gYm9keTogQm9keSBvZiB0aGUgcmVxdWVzdC4gIERlZmF1bHRz
IHRvIGFuIGVtcHR5IGRpY3Rpb25hcnkKKyAgICAgICAgICAgIGlmIGBgbWV0aG9kYGAgaXMgIlBP
U1QiLgorICAgICAgICA6cGFyYW0gaGVhZGVyczogQWRkaXRpb25hbCBoZWFkZXJzIHRvIGluY2x1
ZGUgaW4gdGhlIHJlcXVlc3QuCisgICAgICAgIDpyZXR1cm46IGFuIGluc3RhbmNlIG9mIHdkY2xp
ZW50LlJlc3BvbnNlIGRlc2NyaWJpbmcgdGhlIEhUVFAgcmVzcG9uc2UKKyAgICAgICAgICAgIHJl
Y2VpdmVkIGZyb20gdGhlIHJlbW90ZSBlbmQuCisgICAgICAgICIiIgorCisgICAgICAgIGlmIGJv
ZHkgaXMgTm9uZSBhbmQgbWV0aG9kID09ICJQT1NUIjoKKyAgICAgICAgICAgIGJvZHkgPSB7fQor
CisgICAgICAgIGlmIGlzaW5zdGFuY2UoYm9keSwgZGljdCk6CisgICAgICAgICAgICBib2R5ID0g
anNvbi5kdW1wcyhib2R5LCBjbHM9VG9Kc29uRW5jb2RlcikKKworICAgICAgICBpZiBpc2luc3Rh
bmNlKGJvZHksIHVuaWNvZGUpOgorICAgICAgICAgICAgYm9keSA9IGJvZHkuZW5jb2RlKCJ1dGYt
OCIpCisKKyAgICAgICAgaWYgaGVhZGVycyBpcyBOb25lOgorICAgICAgICAgICAgaGVhZGVycyA9
IHt9CisKKyAgICAgICAgdXJsID0gc2VsZi51cmxfcHJlZml4ICsgdXJsCisKKyAgICAgICAga3dh
cmdzID0ge30KKyAgICAgICAgaWYgc2VsZi5fdGltZW91dCBpcyBub3QgTm9uZToKKyAgICAgICAg
ICAgIGt3YXJnc1sidGltZW91dCJdID0gc2VsZi5fdGltZW91dAorCisgICAgICAgIGNvbm4gPSBo
dHRwbGliLkhUVFBDb25uZWN0aW9uKAorICAgICAgICAgICAgc2VsZi5ob3N0LCBzZWxmLnBvcnQs
IHN0cmljdD1UcnVlLCAqKmt3YXJncykKKyAgICAgICAgY29ubi5yZXF1ZXN0KG1ldGhvZCwgdXJs
LCBib2R5LCBoZWFkZXJzKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc3BvbnNlID0g
UmVzcG9uc2UuZnJvbV9odHRwX3Jlc3BvbnNlKGNvbm4uZ2V0cmVzcG9uc2UoKSkKKyAgICAgICAg
ZmluYWxseToKKyAgICAgICAgICAgIGNvbm4uY2xvc2UoKQorCisgICAgICAgIHJldHVybiByZXNw
b25zZQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1
bm5lci8uZ2l0aWdub3JlIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1
bm5lci8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40
OTU2MTZlZjFkMQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3cz
Yy90b29scy93cHRydW5uZXIvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDggQEAKKyoucHlbY29dCisq
fgorKiMKK1wjKgorX3ZpcnR1YWxlbnYKK3Rlc3QvdGVzdC5jZmcKK3Rlc3QvbWV0YWRhdGEvTUFO
SUZFU1QuanNvbgord3B0cnVubmVyLmVnZy1pbmZvCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0
cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL0xJQ0VOU0UgYi9XZWJEcml2ZXJUZXN0cy9p
bXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL0xJQ0VOU0UKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAuLjQ1ODk2ZTZiZTJiCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJp
dmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci9MSUNFTlNFCkBAIC0wLDAgKzEs
MzAgQEAKK1czQyAzLWNsYXVzZSBCU0QgTGljZW5zZQorCitodHRwOi8vd3d3LnczLm9yZy9Db25z
b3J0aXVtL0xlZ2FsLzIwMDgvMDMtYnNkLWxpY2Vuc2UuaHRtbAorCitSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKK21ldDoKKworKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygd29ya3MgbXVzdCByZXRhaW4g
dGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UsCisgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQKKyAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorCisqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFczQyBub3Ig
dGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlCisgIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHdvcmsgd2l0aG91dAorICBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCitM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKK0EgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCitPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKK1NQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCitUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKK09GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVy
L01BTklGRVNULmluIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5l
ci9NQU5JRkVTVC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMGM1
ZTM4YmYyNjUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mv
dG9vbHMvd3B0cnVubmVyL01BTklGRVNULmluCkBAIC0wLDAgKzEsMTcgQEAKK2V4Y2x1ZGUgTUFO
SUZFU1QuaW4KK2luY2x1ZGUgcmVxdWlyZW1lbnRzLnR4dAoraW5jbHVkZSB3cHRydW5uZXIvYnJv
d3NlcnMvYjJnX3NldHVwLyoKK2luY2x1ZGUgd3B0cnVubmVyLmRlZmF1bHQuaW5pCitpbmNsdWRl
IHdwdHJ1bm5lci90ZXN0aGFybmVzc19ydW5uZXIuaHRtbAoraW5jbHVkZSB3cHRydW5uZXIvdGVz
dGhhcm5lc3NyZXBvcnQuanMKK2luY2x1ZGUgd3B0cnVubmVyL3Rlc3RoYXJuZXNzcmVwb3J0LXNl
cnZvLmpzCitpbmNsdWRlIHdwdHJ1bm5lci90ZXN0aGFybmVzc3JlcG9ydC1zZXJ2b2RyaXZlci5q
cworaW5jbHVkZSB3cHRydW5uZXIvZXhlY3V0b3JzL3Rlc3RoYXJuZXNzX21hcmlvbmV0dGUuanMK
K2luY2x1ZGUgd3B0cnVubmVyL2V4ZWN1dG9ycy90ZXN0aGFybmVzc19zZXJ2b2RyaXZlci5qcwor
aW5jbHVkZSB3cHRydW5uZXIvZXhlY3V0b3JzL3Rlc3RoYXJuZXNzX3dlYmRyaXZlci5qcworaW5j
bHVkZSB3cHRydW5uZXIvZXhlY3V0b3JzL3JlZnRlc3QuanMKK2luY2x1ZGUgd3B0cnVubmVyL2V4
ZWN1dG9ycy9yZWZ0ZXN0LXdhaXQuanMKK2luY2x1ZGUgd3B0cnVubmVyL2V4ZWN1dG9ycy9yZWZ0
ZXN0LXdhaXRfc2Vydm9kcml2ZXIuanMKK2luY2x1ZGUgd3B0cnVubmVyL2V4ZWN1dG9ycy9yZWZ0
ZXN0LXdhaXRfd2ViZHJpdmVyLmpzCitpbmNsdWRlIHdwdHJ1bm5lci9jb25maWcuanNvbgoraW5j
bHVkZSB3cHRydW5uZXIvYnJvd3NlcnMvc2VydmVyLWxvY2F0aW9ucy50eHQKXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mv
dG9vbHMvd3B0cnVubmVyL09XTkVSUyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29s
cy93cHRydW5uZXIvT1dORVJTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li40YmY0OGFkNzZlNQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVk
L3czYy90b29scy93cHRydW5uZXIvT1dORVJTCkBAIC0wLDAgKzEgQEAKK0Bib2Job2x0CmRpZmYg
LS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL1JFQURN
RS5yc3QgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL1JFQURN
RS5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmZjNjUwZWVjNDVh
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dw
dHJ1bm5lci9SRUFETUUucnN0CkBAIC0wLDAgKzEsMjQyIEBACit3cHRydW5uZXI6IEEgd2ViLXBs
YXRmb3JtLXRlc3RzIGhhcm5lc3MKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQorCit3cHRydW5uZXIgaXMgYSBoYXJuZXNzIGZvciBydW5uaW5nIHRoZSBXM0MgYHdlYi1w
bGF0Zm9ybS10ZXN0cyB0ZXN0c3VpdGVgXy4KKworLi4gY29udGVudHM6OgorCitJbnN0YWxsYXRp
b24KK35+fn5+fn5+fn5+fgorCit3cHRydW5uZXIgaXMgZXhwZWN0ZWQgdG8gYmUgaW5zdGFsbGVk
IGludG8gYSB2aXJ0dWFsZW52IHVzaW5nIHBpcC4gRm9yCitkZXZlbG9wbWVudCwgaXQgY2FuIGJl
IGluc3RhbGxlZCB1c2luZyB0aGUgYC1lYCBvcHRpb246OgorCisgIHBpcCBpbnN0YWxsIC1lIC4v
CisKK1J1bm5pbmcgdGhlIFRlc3RzCit+fn5+fn5+fn5+fn5+fn5+fgorCitBZnRlciBpbnN0YWxs
YXRpb24sIHRoZSBjb21tYW5kIGBgd3B0cnVubmVyYGAgc2hvdWxkIGJlIGF2YWlsYWJsZSB0byBy
dW4KK3RoZSB0ZXN0cy4KKworVGhlIGBgd3B0cnVubmVyYGAgY29tbWFuZCAgdGFrZXMgbXVsdGlw
bGUgb3B0aW9ucywgb2Ygd2hpY2ggdGhlCitmb2xsb3dpbmcgYXJlIG1vc3Qgc2lnbmlmaWNhbnQ6
CisKK2BgLS1wcm9kdWN0YGAgKGRlZmF1bHRzIHRvIGBmaXJlZm94YCkKKyAgVGhlIHByb2R1Y3Qg
dG8gdGVzdCBhZ2FpbnN0OiBgYjJnYCwgYGNocm9tZWAsIGBmaXJlZm94YCwgb3IgYHNlcnZvYC4K
KworYGAtLWJpbmFyeWBgIChyZXF1aXJlZCBpZiBwcm9kdWN0IGlzIGBmaXJlZm94YCBvciBgc2Vy
dm9gKQorICBUaGUgcGF0aCB0byBhIGJpbmFyeSBmaWxlIGZvciB0aGUgcHJvZHVjdCAoYnJvd3Nl
cikgdG8gdGVzdCBhZ2FpbnN0LgorCitgYC0td2ViZHJpdmVyLWJpbmFyeWBgIChyZXF1aXJlZCBp
ZiBwcm9kdWN0IGlzIGBjaHJvbWVgKQorICBUaGUgcGF0aCB0byBhIGBkcml2ZXJgIGJpbmFyeTsg
ZS5nLiwgYSBgY2hyb21lZHJpdmVyYCBiaW5hcnkuCisKK2BgLS1jZXJ0dXRpbC1iaW5hcnlgYCAo
cmVxdWlyZWQgaWYgcHJvZHVjdCBpcyBgZmlyZWZveGAgWyNdXykKKyAgVGhlIHBhdGggdG8gYSBg
Y2VydHV0aWxgIGJpbmFyeSAoZm9yIHRlc3RzIHRoYXQgbXVzdCBiZSBydW4gb3ZlciBodHRwcyku
CisKK2BgLS1tZXRhZGF0YWBgIChyZXF1aXJlZCkKKyAgVGhlIHBhdGggdG8gYSBkaXJlY3Rvcnkg
Y29udGFpbmluZyB0ZXN0IG1ldGFkYXRhLiBbI11fCisKK2BgLS10ZXN0c2BgIChyZXF1aXJlZCkK
KyAgVGhlIHBhdGggdG8gYSBkaXJlY3RvcnkgY29udGFpbmluZyBhIHdlYi1wbGF0Zm9ybS10ZXN0
cyBjaGVja291dC4KKworYGAtLXByZWZzLXJvb3RgYCAocmVxdWlyZWQgb25seSB3aGVuIHRlc3Rp
bmcgYSBGaXJlZm94IGJpbmFyeSkKKyAgVGhlIHBhdGggdG8gYSBkaXJlY3RvcnkgY29udGFpbmlu
ZyBGaXJlZm94IHRlc3QtaGFybmVzcyBwcmVmZXJlbmNlcy4gWyNdXworCitgYC0tY29uZmlnYGAg
KHNob3VsZCBkZWZhdWx0IHRvIGB3cHRydW5uZXIuZGVmYXVsdC5pbmlgKQorICBUaGUgcGF0aCB0
byB0aGUgY29uZmlnIChpbmkpIGZpbGUuCisKKy4uIFsjXSBUaGUgYGAtLWNlcnR1dGlsLWJpbmFy
eWBgIG9wdGlvbiBpcyByZXF1aXJlZCB3aGVuIHRoZSBwcm9kdWN0IGlzCisgICBgYGZpcmVmb3hg
YCB1bmxlc3MgYGAtLXNzbC10eXBlPW5vbmVgYCBpcyBzcGVjaWZpZWQuCisKKy4uIFsjXSBUaGUg
YGAtLW1ldGFkYXRhYGAgcGF0aCBpcyB0byBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zOgorCisg
ICogYSBgYE1BTklGRVNULmpzb25gYCBmaWxlIChpbnN0cnVjdGlvbnMgb24gZ2VuZXJhdGluZyB0
aGlzIGZpbGUgYXJlCisgICAgYXZhaWxhYmxlIGluIHRoZSBgZGV0YWlsZWQgZG9jdW1lbnRhdGlv
bgorICAgIDxodHRwOi8vd3B0cnVubmVyLnJlYWR0aGVkb2NzLm9yZy9lbi9sYXRlc3QvdXNhZ2Uu
aHRtbCNpbnN0YWxsaW5nLXdwdHJ1bm5lcj5gXyk7CisgICAgYW5kCisgICogKG9wdGlvbmFsbHkp
IGFueSBleHBlY3RhdGlvbiBmaWxlcyAoc2VlIGJlbG93KQorCisuLiBbI10gRXhhbXBsZSBgYC0t
cHJlZnMtcm9vdGBgIHZhbHVlOiBgYH4vbW96aWxsYS1jZW50cmFsL3Rlc3RpbmcvcHJvZmlsZXNg
YC4KKworVGhlcmUgYXJlIGFsc28gYSB2YXJpZXR5IG9mIG90aGVyIG9wdGlvbnMgYXZhaWxhYmxl
OyB1c2UgYGAtLWhlbHBgYCB0bworbGlzdCB0aGVtLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCitFeGFtcGxlOiBIb3cgdG8gc3RhcnQgd3B0cnVubmVyCistLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKK1RvIHRlc3QgYSBGaXJlZm94IE5pZ2h0bHkgYnVpbGQgaW4g
YW4gT1MgWCBlbnZpcm9ubWVudCwgeW91IG1pZ2h0IHN0YXJ0Cit3cHRydW5uZXIgdXNpbmcgc29t
ZXRoaW5nIHNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZyBleGFtcGxlOjoKKworICB3cHRydW5uZXIg
LS1tZXRhZGF0YT1+L3dlYi1wbGF0Zm9ybS10ZXN0cy8gLS10ZXN0cz1+L3dlYi1wbGF0Zm9ybS10
ZXN0cy8gXAorICAgIC0tYmluYXJ5PX4vbW96aWxsYS1jZW50cmFsL29iai14ODZfNjQtYXBwbGUt
ZGFyd2luMTQuMy4wL2Rpc3QvTmlnaHRseS5hcHAvQ29udGVudHMvTWFjT1MvZmlyZWZveCBcCisg
ICAgLS1jZXJ0dXRpbC1iaW5hcnk9fi9tb3ppbGxhLWNlbnRyYWwvb2JqLXg4Nl82NC1hcHBsZS1k
YXJ3aW4xNC4zLjAvc2VjdXJpdHkvbnNzL2NtZC9jZXJ0dXRpbC9jZXJ0dXRpbCBcCisgICAgLS1w
cmVmcy1yb290PX4vbW96aWxsYS1jZW50cmFsL3Rlc3RpbmcvcHJvZmlsZXMKKworQW5kIHRvIHRl
c3QgYSBDaHJvbWl1bSBidWlsZCBpbiBhbiBPUyBYIGVudmlyb25tZW50LCB5b3UgbWlnaHQgc3Rh
cnQKK3dwdHJ1bm5lciB1c2luZyBzb21ldGhpbmcgc2ltaWxhciB0byB0aGUgZm9sbG93aW5nIGV4
YW1wbGU6OgorCisgIHdwdHJ1bm5lciAtLW1ldGFkYXRhPX4vd2ViLXBsYXRmb3JtLXRlc3RzLyAt
LXRlc3RzPX4vd2ViLXBsYXRmb3JtLXRlc3RzLyBcCisgICAgLS1iaW5hcnk9fi9jaHJvbWl1bS9z
cmMvb3V0L1JlbGVhc2UvQ2hyb21pdW0uYXBwL0NvbnRlbnRzL01hY09TL0Nocm9taXVtIFwKKyAg
ICAtLXdlYmRyaXZlci1iaW5hcnk9L3Vzci9sb2NhbC9iaW4vY2hyb21lZHJpdmVyIC0tcHJvZHVj
dD1jaHJvbWUKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRXhhbXBs
ZTogSG93IHRvIHJ1biBhIHN1YnNldCBvZiB0ZXN0cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCitUbyByZXN0cmljdCBhIHRlc3QgcnVuIGp1c3QgdG8gdGVzdHMgaW4g
YSBwYXJ0aWN1bGFyIHdlYi1wbGF0Zm9ybS10ZXN0cworc3ViZGlyZWN0b3J5LCBzcGVjaWZ5IHRo
ZSBkaXJlY3RvcnkgbmFtZSBpbiB0aGUgcG9zaXRpb25hbCBhcmd1bWVudHMgYWZ0ZXIKK3RoZSBv
cHRpb25zOyBmb3IgZXhhbXBsZSwgcnVuIGp1c3QgdGhlIHRlc3RzIGluIHRoZSBgZG9tYCBzdWJk
aXJlY3Rvcnk6OgorCisgIHdwdHJ1bm5lciAtLW1ldGFkYXRhPX4vd2ViLXBsYXRmb3JtLXRlc3Rz
LyAtLXRlc3RzPX4vd2ViLXBsYXRmb3JtLXRlc3RzLyBcCisgICAgLS1iaW5hcnk9L3BhdGgvdG8v
ZmlyZWZveCAtLWNlcnR1dGlsLWJpbmFyeT0vcGF0aC90by9jZXJ0dXRpbCBcCisgICAgLS1wcmVm
cy1yb290PS9wYXRoL3RvL3Rlc3RpbmcvcHJvZmlsZXMgXAorICAgIGRvbQorCitPdXRwdXQKK35+
fn5+fgorCitCeSBkZWZhdWx0IHdwdHJ1bm5lciBqdXN0IGR1bXBzIGl0cyBlbnRpcmUgb3V0cHV0
IGFzIHJhdyBKU09OIG1lc3NhZ2VzCit0byBzdGRvdXQuIFRoaXMgaXMgY29udmVuaWVudCBmb3Ig
cGlwaW5nIGludG8gb3RoZXIgdG9vbHMsIGJ1dCBub3QgaWRlYWwKK2ZvciBodW1hbnMgcmVhZGlu
ZyB0aGUgb3V0cHV0LgorCitBcyBhbiBhbHRlcm5hdGl2ZSwgeW91IGNhbiB1c2UgdGhlIGBgLS1s
b2ctbWFjaGBgIG9wdGlvbiwgd2hpY2ggcHJvdmlkZXMKK291dHB1dCBpbiBhIHJlYXNvbmFibGUg
Zm9ybWF0IGZvciBodW1hbnMuIFRoZSBvcHRpb24gcmVxdWlyZXMgYSB2YWx1ZToKK2VpdGhlciB0
aGUgcGF0aCBmb3IgYSBmaWxlIHRvIHdyaXRlIHRoZSBgbWFjaGAtZm9ybWF0dGVkIG91dHB1dCB0
bywgb3IKKyJgLWAiIChhIGh5cGhlbikgdG8gd3JpdGUgdGhlIGBtYWNoYC1mb3JtYXR0ZWQgb3V0
cHV0IHRvIHN0ZG91dC4KKworV2hlbiB1c2luZyBgYC0tbG9nLW1hY2hgYCwgb3V0cHV0IG9mIHRo
ZSBmdWxsIHJhdyBKU09OIGxvZyBpcyBzdGlsbAorYXZhaWxhYmxlLCBmcm9tIHRoZSBgYC0tbG9n
LXJhd2BgIG9wdGlvbi4gU28gdG8gb3V0cHV0IHRoZSBmdWxsIHJhdyBKU09OCitsb2cgdG8gYSBm
aWxlIGFuZCBhIGh1bWFuLXJlYWRhYmxlIHN1bW1hcnkgdG8gc3Rkb3V0LCB5b3UgbWlnaHQgc3Rh
cnQKK3dwdHJ1bm5lciB1c2luZyBzb21ldGhpbmcgc2ltaWxhciB0byB0aGUgZm9sbG93aW5nIGV4
YW1wbGU6OgorCisgIHdwdHJ1bm5lciAtLW1ldGFkYXRhPX4vd2ViLXBsYXRmb3JtLXRlc3RzLyAt
LXRlc3RzPX4vd2ViLXBsYXRmb3JtLXRlc3RzLyBcCisgICAgLS1iaW5hcnk9L3BhdGgvdG8vZmly
ZWZveCAtLWNlcnR1dGlsLWJpbmFyeT0vcGF0aC90by9jZXJ0dXRpbCBcCisgICAgLS1wcmVmcy1y
b290PS9wYXRoL3RvL3Rlc3RpbmcvcHJvZmlsZXMgXAorICAgIC0tbG9nLXJhdz1vdXRwdXQubG9n
IC0tbG9nLW1hY2g9LQorCitFeHBlY3RhdGlvbiBEYXRhCit+fn5+fn5+fn5+fn5+fn5+CisKK3dw
dHJ1bm5lciBpcyBkZXNpZ25lZCB0byBiZSB1c2VkIGluIGFuIGVudmlyb25tZW50IHdoZXJlIGl0
IGlzIG5vdAoranVzdCBuZWNlc3NhcnkgdG8ga25vdyB3aGljaCB0ZXN0cyBwYXNzZWQsIGJ1dCB0
byBjb21wYXJlIHRoZSByZXN1bHRzCitiZXR3ZWVuIHJ1bnMuIEZvciB0aGlzIHJlYXNvbiBpdCBp
cyBwb3NzaWJsZSB0byBzdG9yZSB0aGUgcmVzdWx0cyBvZiBhCitwcmV2aW91cyBydW4gaW4gYSBz
ZXQgb2YgaW5pLWxpa2UgImV4cGVjdGF0aW9uIGZpbGVzIi4gVGhpcyBmb3JtYXQgaXMKK2RvY3Vt
ZW50ZWQgYmVsb3cuIFRvIGdlbmVyYXRlIHRoZSBleHBlY3RhdGlvbiBmaWxlcyB1c2UgYHdwdHJ1
bm5lcmAgd2l0aAordGhlIGAtLWxvZy1yYXc9L3BhdGgvdG8vbG9nL2ZpbGVgIG9wdGlvbi4gVGhp
cyBjYW4gdGhlbiBiZSB1c2VkIGFzCitpbnB1dCB0byB0aGUgYHdwdHVwZGF0ZWAgdG9vbC4KKwor
RXhwZWN0YXRpb24gRmlsZSBGb3JtYXQKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK01ldGFk
YXRhIGFib3V0IHRlc3RzLCBub3RhYmx5IGluY2x1ZGluZyB0aGVpciBleHBlY3RlZCByZXN1bHRz
LCBpcworc3RvcmVkIGluIGEgbW9kaWZpZWQgaW5pLWxpa2UgZm9ybWF0IHRoYXQgaXMgZGVzaWdu
ZWQgdG8gYmUgaHVtYW4KK2VkaXRhYmxlLCBidXQgYWxzbyB0byBiZSBtYWNoaW5lIHVwZGF0YWJs
ZS4KKworRWFjaCB0ZXN0IGZpbGUgdGhhdCByZXF1aXJlcyBtZXRhZGF0YSB0byBiZSBzcGVjaWZp
ZWQgKGJlY2F1c2UgaXQgaGFzCithIG5vbi1kZWZhdWx0IGV4cGVjdGF0aW9uIG9yIGJlY2F1c2Ug
aXQgaXMgZGlzYWJsZWQsIGZvciBleGFtcGxlKSBoYXMKK2EgY29ycmVzcG9uZGluZyBleHBlY3Rh
dGlvbiBmaWxlIGluIHRoZSBgbWV0YWRhdGFgIGRpcmVjdG9yeS4gRm9yCitleGFtcGxlIGEgdGVz
dCBmaWxlIGBodG1sL3Rlc3QxLmh0bWxgIGNvbnRhaW5pbmcgYSBmYWlsaW5nIHRlc3Qgd291bGQK
K2hhdmUgYW4gZXhwZWN0YXRpb24gZmlsZSBjYWxsZWQgYGh0bWwvdGVzdDEuaHRtbC5pbmlgIGlu
IHRoZQorYG1ldGFkYXRhYCBkaXJlY3RvcnkuCisKK0FuIGV4YW1wbGUgb2YgYW4gZXhwZWN0YXRp
b24gZmlsZSBpczo6CisKKyAgZXhhbXBsZV9kZWZhdWx0X2tleTogZXhhbXBsZV92YWx1ZQorCisg
IFtmaWxlbmFtZS5odG1sXQorICAgIHR5cGU6IHRlc3RoYXJuZXNzCisKKyAgICBbc3VidGVzdDFd
CisgICAgICBleHBlY3RlZDogRkFJTAorCisgICAgW3N1YnRlc3QyXQorICAgICAgZXhwZWN0ZWQ6
CisgICAgICAgIGlmIHBsYXRmb3JtID09ICd3aW4nOiBUSU1FT1VUCisgICAgICAgIGlmIHBsYXRm
b3JtID09ICdvc3gnOiBFUlJPUgorICAgICAgICBGQUlMCisKKyAgW2ZpbGVuYW1lLmh0bWw/cXVl
cnk9c29tZXRoaW5nXQorICAgIHR5cGU6IHRlc3RoYXJuZXNzCisgICAgZGlzYWJsZWQ6IGJ1ZzEy
MzQ1CisKK1RoZSBmaWxlIGNvbnNpc3RzIG9mIHR3byBlbGVtZW50cywga2V5LXZhbHVlIHBhaXJz
IGFuZAorc2VjdGlvbnMuCisKK1NlY3Rpb25zIGFyZSBkZWxpbWl0ZWQgYnkgaGVhZGluZ3MgZW5j
bG9zZWQgaW4gc3F1YXJlIGJyYWNrZXRzLiBBbnkKK2Nsb3Npbmcgc3F1YXJlIGJyYWNrZXQgaW4g
dGhlIGhlYWRpbmcgaXRzZWxmIG15IGJlIGVzY2FwZWQgd2l0aCBhCitiYWNrc2xhc2guIEVhY2gg
c2VjdGlvbiBtYXkgdGhlbiBjb250YWluIGFueSBudW1iZXIgb2Yga2V5LXZhbHVlIHBhaXJzCitm
b2xsb3dlZCBieSBhbnkgbnVtYmVyIG9mIHN1YnNlY3Rpb25zLiBTbyB0aGF0IGl0IGlzIGNsZWFy
IHdoaWNoIGRhdGEKK2JlbG9uZ3MgdG8gZWFjaCBzZWN0aW9uIHdpdGhvdXQgdGhlIHVzZSBvZiBl
bmQtc2VjdGlvbiBtYXJrZXJzLCB0aGUKK2RhdGEgZm9yIGVhY2ggc2VjdGlvbiAoaS5lLiB0aGUg
a2V5LXZhbHVlIHBhaXJzIGFuZCBzdWJzZWN0aW9ucykgbXVzdAorYmUgaW5kZW50ZWQgdXNpbmcg
c3BhY2VzLiBJbmRlbnRhdGlvbiBuZWVkIG9ubHkgYmUgY29uc2lzdGVudCwgYnV0Cit1c2luZyB0
d28gc3BhY2VzIHBlciBsZXZlbCBpcyByZWNvbW1lbmRlZC4KKworSW4gYSB0ZXN0IGV4cGVjdGF0
aW9uIGZpbGUsIGVhY2ggcmVzb3VyY2UgcHJvdmlkZWQgYnkgdGhlIGZpbGUgaGFzIGEKK3Npbmds
ZSBzZWN0aW9uLCB3aXRoIHRoZSBzZWN0aW9uIGhlYWRpbmcgYmVpbmcgdGhlIHBhcnQgYWZ0ZXIg
dGhlIGxhc3QKK2AvYCBpbiB0aGUgdGVzdCB1cmwuIFRlc3RzIHRoYXQgaGF2ZSBzdWJzZWN0aW9u
cyBtYXkgaGF2ZSBzdWJzZWN0aW9ucworZm9yIHRob3NlIHN1YnRlc3RzIGluIHdoaWNoIHRoZSBo
ZWFkaW5nIGlzIHRoZSBuYW1lIG9mIHRoZSBzdWJ0ZXN0LgorCitTaW1wbGUga2V5LXZhbHVlIHBh
aXJzIGFyZSBvZiB0aGUgZm9ybTo6CisKKyAga2V5OiB2YWx1ZQorCitOb3RlIHRoYXQgdW5saWtl
IGluaSBmaWxlcywgb25seSBgOmAgaXMgYSB2YWxpZCBzZXBlcmF0b3I7IGA9YCB3aWxsCitub3Qg
d29yayBhcyBleHBlY3RlZC4gS2V5LXZhbHVlIHBhaXJzIG1heSBhbHNvIGhhdmUgY29uZGl0aW9u
YWwKK3ZhbHVlcyBvZiB0aGUgZm9ybTo6CisKKyAga2V5OgorICAgIGlmIGNvbmRpdGlvbjE6IHZh
bHVlMQorICAgIGlmIGNvbmRpdGlvbjI6IHZhbHVlMgorICAgIGRlZmF1bHQKKworSW4gdGhpcyBj
YXNlIGVhY2ggY29uZGl0aW9uYWwgaXMgZXZhbHVhdGVkIGluIHR1cm4gYW5kIHRoZSB2YWx1ZSBp
cwordGhhdCBvbiB0aGUgcmlnaHQgaGFuZCBzaWRlIG9mIHRoZSBmaXJzdCBtYXRjaGluZyBjb25k
aXRpb25hbC4gSW4gdGhlCitjYXNlIHRoYXQgbm8gY29uZGl0aW9uIG1hdGNoZXMsIHRoZSB1bmNv
bmRpdGlvbmFsIGRlZmF1bHQgaXMgdXNlZC4gSWYKK25vIGNvbmRpdGlvbiBtYXRjaGVzIGFuZCBu
byBkZWZhdWx0IGlzIHByb3ZpZGVkIGl0IGlzIGVxdWl2YWxlbnQgdG8KK3RoZSBrZXkgbm90IGJl
aW5nIHByZXNlbnQuIENvbmRpdGlvbmFscyB1c2UgYSBzaW1wbGUgcHl0aG9uLWxpa2UgZXhwcmVz
c2lvbgorbGFuZ3VhZ2UgZS5nLjo6CisKKyAgaWYgZGVidWcgYW5kIChwbGF0Zm9ybSA9PSAibGlu
dXgiIG9yIHBsYXRmb3JtID09ICJvc3giKTogRkFJTAorCitGb3IgdGVzdCBleHBlY3RhdGlvbnMg
dGhlIGF2YWxpYWJsZSB2YXJpYWJsZXMgYXJlIHRob3NlIGluIHRoZQorYHJ1bl9pbmZvYCB3aGlj
aCBmb3IgZGVza3RvcCBhcmUgYHZlcnNpb25gLCBgb3NgLCBgYml0c2AsIGBwcm9jZXNzb3JgLAor
YGRlYnVnYCBhbmQgYHByb2R1Y3RgLgorCitLZXktdmFsdWUgcGFpcnMgc3BlY2lmaWVkIGF0IHRo
ZSB0b3AgbGV2ZWwgb2YgdGhlIGZpbGUgYmVmb3JlIGFueQorc2VjdGlvbnMgYXJlIHNwZWNpYWwg
YXMgdGhleSBwcm92aWRlIGRlZmF1bHRzIGZvciB0aGUgcmVzdCBvZiB0aGUgZmlsZQorZS5nLjo6
CisKKyAga2V5MTogdmFsdWUxCisKKyAgW3NlY3Rpb24gMV0KKyAgICBrZXkyOiB2YWx1ZTIKKwor
ICBbc2VjdGlvbiAyXQorICAgIGtleTE6IHZhbHVlMworCitJbiB0aGlzIGNhc2UsIGluc2lkZSBz
ZWN0aW9uIDEsIGBrZXkxYCB3b3VsZCBoYXZlIHRoZSB2YWx1ZSBgdmFsdWUxYAorYW5kIGBrZXky
YCB0aGUgdmFsdWUgYHZhbHVlMmAgd2hlcmVhcyBpbiBzZWN0aW9uIDIgYGtleTFgIHdvdWxkIGhh
dmUKK3RoZSB2YWx1ZSBgdmFsdWUzYCBhbmQgYGtleTJgIHdvdWxkIGJlIHVuZGVmaW5lZC4KKwor
VGhlIHdlYi1wbGF0Zm9ybS10ZXN0IGhhcm5lc3Mga25vd3MgYWJvdXQgc2V2ZXJhbCBrZXlzOgor
CitgZXhwZWN0ZWRgCisgIE11c3QgZXZhbHVhdGUgdG8gYSBwb3NzaWJsZSB0ZXN0IHN0YXR1cyBp
bmRpY2F0aW5nIHRoZSBleHBlY3RlZAorICByZXN1bHQgb2YgdGhlIHRlc3QuIFRoZSBpbXBsaWNp
dCBkZWZhdWx0IGlzIFBBU1Mgb3IgT0sgd2hlbiB0aGUKKyAgZmllbGQgaXNuJ3QgcHJlc2VudC4K
KworYGRpc2FibGVkYAorICBBbnkgdmFsdWUgaW5kaWNhdGVzIHRoYXQgdGhlIHRlc3QgaXMgZGlz
YWJsZWQuCisKK2B0eXBlYAorICBUaGUgdGVzdCB0eXBlIGUuZy4gYHRlc3RoYXJuZXNzYCwgYHJl
ZnRlc3RgLCBvciBgd2RzcGVjYC4KKworYHJlZnR5cGVgCisgIFRoZSB0eXBlIG9mIGNvbXBhcmlz
b24gZm9yIHJlZnRlc3RzOyBlaXRoZXIgYD09YCBvciBgIT1gLgorCitgcmVmdXJsYAorICBUaGUg
cmVmZXJlbmNlIHVybCBmb3IgcmVmdGVzdHMuCisKKy4uIF9gd2ViLXBsYXRmb3JtLXRlc3RzIHRl
c3RzdWl0ZWA6IGh0dHBzOi8vZ2l0aHViLmNvbS93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzCmRpZmYg
LS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL2RvY3Mv
TWFrZWZpbGUgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL2Rv
Y3MvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmQwMmI2
YzVlN2M0Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rv
b2xzL3dwdHJ1bm5lci9kb2NzL01ha2VmaWxlCkBAIC0wLDAgKzEsMTc3IEBACisjIE1ha2VmaWxl
IGZvciBTcGhpbnggZG9jdW1lbnRhdGlvbgorIworCisjIFlvdSBjYW4gc2V0IHRoZXNlIHZhcmlh
YmxlcyBmcm9tIHRoZSBjb21tYW5kIGxpbmUuCitTUEhJTlhPUFRTICAgID0KK1NQSElOWEJVSUxE
ICAgPSBzcGhpbngtYnVpbGQKK1BBUEVSICAgICAgICAgPQorQlVJTERESVIgICAgICA9IF9idWls
ZAorCisjIFVzZXItZnJpZW5kbHkgY2hlY2sgZm9yIHNwaGlueC1idWlsZAoraWZlcSAoJChzaGVs
bCB3aGljaCAkKFNQSElOWEJVSUxEKSA+L2Rldi9udWxsIDI+JjE7IGVjaG8gJCQ/KSwgMSkKKyQo
ZXJyb3IgVGhlICckKFNQSElOWEJVSUxEKScgY29tbWFuZCB3YXMgbm90IGZvdW5kLiBNYWtlIHN1
cmUgeW91IGhhdmUgU3BoaW54IGluc3RhbGxlZCwgdGhlbiBzZXQgdGhlIFNQSElOWEJVSUxEIGVu
dmlyb25tZW50IHZhcmlhYmxlIHRvIHBvaW50IHRvIHRoZSBmdWxsIHBhdGggb2YgdGhlICckKFNQ
SElOWEJVSUxEKScgZXhlY3V0YWJsZS4gQWx0ZXJuYXRpdmVseSB5b3UgY2FuIGFkZCB0aGUgZGly
ZWN0b3J5IHdpdGggdGhlIGV4ZWN1dGFibGUgdG8geW91ciBQQVRILiBJZiB5b3UgZG9uJ3QgaGF2
ZSBTcGhpbnggaW5zdGFsbGVkLCBncmFiIGl0IGZyb20gaHR0cDovL3NwaGlueC1kb2Mub3JnLykK
K2VuZGlmCisKKyMgSW50ZXJuYWwgdmFyaWFibGVzLgorUEFQRVJPUFRfYTQgICAgID0gLUQgbGF0
ZXhfcGFwZXJfc2l6ZT1hNAorUEFQRVJPUFRfbGV0dGVyID0gLUQgbGF0ZXhfcGFwZXJfc2l6ZT1s
ZXR0ZXIKK0FMTFNQSElOWE9QVFMgICA9IC1kICQoQlVJTERESVIpL2RvY3RyZWVzICQoUEFQRVJP
UFRfJChQQVBFUikpICQoU1BISU5YT1BUUykgLgorIyB0aGUgaTE4biBidWlsZGVyIGNhbm5vdCBz
aGFyZSB0aGUgZW52aXJvbm1lbnQgYW5kIGRvY3RyZWVzIHdpdGggdGhlIG90aGVycworSTE4TlNQ
SElOWE9QVFMgID0gJChQQVBFUk9QVF8kKFBBUEVSKSkgJChTUEhJTlhPUFRTKSAuCisKKy5QSE9O
WTogaGVscCBjbGVhbiBodG1sIGRpcmh0bWwgc2luZ2xlaHRtbCBwaWNrbGUganNvbiBodG1saGVs
cCBxdGhlbHAgZGV2aGVscCBlcHViIGxhdGV4IGxhdGV4cGRmIHRleHQgbWFuIGNoYW5nZXMgbGlu
a2NoZWNrIGRvY3Rlc3QgZ2V0dGV4dAorCitoZWxwOgorCUBlY2hvICJQbGVhc2UgdXNlIFxgbWFr
ZSA8dGFyZ2V0Picgd2hlcmUgPHRhcmdldD4gaXMgb25lIG9mIgorCUBlY2hvICIgIGh0bWwgICAg
ICAgdG8gbWFrZSBzdGFuZGFsb25lIEhUTUwgZmlsZXMiCisJQGVjaG8gIiAgZGlyaHRtbCAgICB0
byBtYWtlIEhUTUwgZmlsZXMgbmFtZWQgaW5kZXguaHRtbCBpbiBkaXJlY3RvcmllcyIKKwlAZWNo
byAiICBzaW5nbGVodG1sIHRvIG1ha2UgYSBzaW5nbGUgbGFyZ2UgSFRNTCBmaWxlIgorCUBlY2hv
ICIgIHBpY2tsZSAgICAgdG8gbWFrZSBwaWNrbGUgZmlsZXMiCisJQGVjaG8gIiAganNvbiAgICAg
ICB0byBtYWtlIEpTT04gZmlsZXMiCisJQGVjaG8gIiAgaHRtbGhlbHAgICB0byBtYWtlIEhUTUwg
ZmlsZXMgYW5kIGEgSFRNTCBoZWxwIHByb2plY3QiCisJQGVjaG8gIiAgcXRoZWxwICAgICB0byBt
YWtlIEhUTUwgZmlsZXMgYW5kIGEgcXRoZWxwIHByb2plY3QiCisJQGVjaG8gIiAgZGV2aGVscCAg
ICB0byBtYWtlIEhUTUwgZmlsZXMgYW5kIGEgRGV2aGVscCBwcm9qZWN0IgorCUBlY2hvICIgIGVw
dWIgICAgICAgdG8gbWFrZSBhbiBlcHViIgorCUBlY2hvICIgIGxhdGV4ICAgICAgdG8gbWFrZSBM
YVRlWCBmaWxlcywgeW91IGNhbiBzZXQgUEFQRVI9YTQgb3IgUEFQRVI9bGV0dGVyIgorCUBlY2hv
ICIgIGxhdGV4cGRmICAgdG8gbWFrZSBMYVRlWCBmaWxlcyBhbmQgcnVuIHRoZW0gdGhyb3VnaCBw
ZGZsYXRleCIKKwlAZWNobyAiICBsYXRleHBkZmphIHRvIG1ha2UgTGFUZVggZmlsZXMgYW5kIHJ1
biB0aGVtIHRocm91Z2ggcGxhdGV4L2R2aXBkZm14IgorCUBlY2hvICIgIHRleHQgICAgICAgdG8g
bWFrZSB0ZXh0IGZpbGVzIgorCUBlY2hvICIgIG1hbiAgICAgICAgdG8gbWFrZSBtYW51YWwgcGFn
ZXMiCisJQGVjaG8gIiAgdGV4aW5mbyAgICB0byBtYWtlIFRleGluZm8gZmlsZXMiCisJQGVjaG8g
IiAgaW5mbyAgICAgICB0byBtYWtlIFRleGluZm8gZmlsZXMgYW5kIHJ1biB0aGVtIHRocm91Z2gg
bWFrZWluZm8iCisJQGVjaG8gIiAgZ2V0dGV4dCAgICB0byBtYWtlIFBPIG1lc3NhZ2UgY2F0YWxv
Z3MiCisJQGVjaG8gIiAgY2hhbmdlcyAgICB0byBtYWtlIGFuIG92ZXJ2aWV3IG9mIGFsbCBjaGFu
Z2VkL2FkZGVkL2RlcHJlY2F0ZWQgaXRlbXMiCisJQGVjaG8gIiAgeG1sICAgICAgICB0byBtYWtl
IERvY3V0aWxzLW5hdGl2ZSBYTUwgZmlsZXMiCisJQGVjaG8gIiAgcHNldWRveG1sICB0byBtYWtl
IHBzZXVkb3htbC1YTUwgZmlsZXMgZm9yIGRpc3BsYXkgcHVycG9zZXMiCisJQGVjaG8gIiAgbGlu
a2NoZWNrICB0byBjaGVjayBhbGwgZXh0ZXJuYWwgbGlua3MgZm9yIGludGVncml0eSIKKwlAZWNo
byAiICBkb2N0ZXN0ICAgIHRvIHJ1biBhbGwgZG9jdGVzdHMgZW1iZWRkZWQgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gKGlmIGVuYWJsZWQpIgorCitjbGVhbjoKKwlybSAtcmYgJChCVUlMRERJUikvKgor
CitodG1sOgorCSQoU1BISU5YQlVJTEQpIC1iIGh0bWwgJChBTExTUEhJTlhPUFRTKSAkKEJVSUxE
RElSKS9odG1sCisJQGVjaG8KKwlAZWNobyAiQnVpbGQgZmluaXNoZWQuIFRoZSBIVE1MIHBhZ2Vz
IGFyZSBpbiAkKEJVSUxERElSKS9odG1sLiIKKworZGlyaHRtbDoKKwkkKFNQSElOWEJVSUxEKSAt
YiBkaXJodG1sICQoQUxMU1BISU5YT1BUUykgJChCVUlMRERJUikvZGlyaHRtbAorCUBlY2hvCisJ
QGVjaG8gIkJ1aWxkIGZpbmlzaGVkLiBUaGUgSFRNTCBwYWdlcyBhcmUgaW4gJChCVUlMRERJUikv
ZGlyaHRtbC4iCisKK3NpbmdsZWh0bWw6CisJJChTUEhJTlhCVUlMRCkgLWIgc2luZ2xlaHRtbCAk
KEFMTFNQSElOWE9QVFMpICQoQlVJTERESVIpL3NpbmdsZWh0bWwKKwlAZWNobworCUBlY2hvICJC
dWlsZCBmaW5pc2hlZC4gVGhlIEhUTUwgcGFnZSBpcyBpbiAkKEJVSUxERElSKS9zaW5nbGVodG1s
LiIKKworcGlja2xlOgorCSQoU1BISU5YQlVJTEQpIC1iIHBpY2tsZSAkKEFMTFNQSElOWE9QVFMp
ICQoQlVJTERESVIpL3BpY2tsZQorCUBlY2hvCisJQGVjaG8gIkJ1aWxkIGZpbmlzaGVkOyBub3cg
eW91IGNhbiBwcm9jZXNzIHRoZSBwaWNrbGUgZmlsZXMuIgorCitqc29uOgorCSQoU1BISU5YQlVJ
TEQpIC1iIGpzb24gJChBTExTUEhJTlhPUFRTKSAkKEJVSUxERElSKS9qc29uCisJQGVjaG8KKwlA
ZWNobyAiQnVpbGQgZmluaXNoZWQ7IG5vdyB5b3UgY2FuIHByb2Nlc3MgdGhlIEpTT04gZmlsZXMu
IgorCitodG1saGVscDoKKwkkKFNQSElOWEJVSUxEKSAtYiBodG1saGVscCAkKEFMTFNQSElOWE9Q
VFMpICQoQlVJTERESVIpL2h0bWxoZWxwCisJQGVjaG8KKwlAZWNobyAiQnVpbGQgZmluaXNoZWQ7
IG5vdyB5b3UgY2FuIHJ1biBIVE1MIEhlbHAgV29ya3Nob3Agd2l0aCB0aGUiIFwKKwkgICAgICAi
LmhocCBwcm9qZWN0IGZpbGUgaW4gJChCVUlMRERJUikvaHRtbGhlbHAuIgorCitxdGhlbHA6CisJ
JChTUEhJTlhCVUlMRCkgLWIgcXRoZWxwICQoQUxMU1BISU5YT1BUUykgJChCVUlMRERJUikvcXRo
ZWxwCisJQGVjaG8KKwlAZWNobyAiQnVpbGQgZmluaXNoZWQ7IG5vdyB5b3UgY2FuIHJ1biAicWNv
bGxlY3Rpb25nZW5lcmF0b3IiIHdpdGggdGhlIiBcCisJICAgICAgIi5xaGNwIHByb2plY3QgZmls
ZSBpbiAkKEJVSUxERElSKS9xdGhlbHAsIGxpa2UgdGhpczoiCisJQGVjaG8gIiMgcWNvbGxlY3Rp
b25nZW5lcmF0b3IgJChCVUlMRERJUikvcXRoZWxwL3dwdHJ1bm5lci5xaGNwIgorCUBlY2hvICJU
byB2aWV3IHRoZSBoZWxwIGZpbGU6IgorCUBlY2hvICIjIGFzc2lzdGFudCAtY29sbGVjdGlvbkZp
bGUgJChCVUlMRERJUikvcXRoZWxwL3dwdHJ1bm5lci5xaGMiCisKK2RldmhlbHA6CisJJChTUEhJ
TlhCVUlMRCkgLWIgZGV2aGVscCAkKEFMTFNQSElOWE9QVFMpICQoQlVJTERESVIpL2RldmhlbHAK
KwlAZWNobworCUBlY2hvICJCdWlsZCBmaW5pc2hlZC4iCisJQGVjaG8gIlRvIHZpZXcgdGhlIGhl
bHAgZmlsZToiCisJQGVjaG8gIiMgbWtkaXIgLXAgJCRIT01FLy5sb2NhbC9zaGFyZS9kZXZoZWxw
L3dwdHJ1bm5lciIKKwlAZWNobyAiIyBsbiAtcyAkKEJVSUxERElSKS9kZXZoZWxwICQkSE9NRS8u
bG9jYWwvc2hhcmUvZGV2aGVscC93cHRydW5uZXIiCisJQGVjaG8gIiMgZGV2aGVscCIKKworZXB1
YjoKKwkkKFNQSElOWEJVSUxEKSAtYiBlcHViICQoQUxMU1BISU5YT1BUUykgJChCVUlMRERJUikv
ZXB1YgorCUBlY2hvCisJQGVjaG8gIkJ1aWxkIGZpbmlzaGVkLiBUaGUgZXB1YiBmaWxlIGlzIGlu
ICQoQlVJTERESVIpL2VwdWIuIgorCitsYXRleDoKKwkkKFNQSElOWEJVSUxEKSAtYiBsYXRleCAk
KEFMTFNQSElOWE9QVFMpICQoQlVJTERESVIpL2xhdGV4CisJQGVjaG8KKwlAZWNobyAiQnVpbGQg
ZmluaXNoZWQ7IHRoZSBMYVRlWCBmaWxlcyBhcmUgaW4gJChCVUlMRERJUikvbGF0ZXguIgorCUBl
Y2hvICJSdW4gXGBtYWtlJyBpbiB0aGF0IGRpcmVjdG9yeSB0byBydW4gdGhlc2UgdGhyb3VnaCAo
cGRmKWxhdGV4IiBcCisJICAgICAgIih1c2UgXGBtYWtlIGxhdGV4cGRmJyBoZXJlIHRvIGRvIHRo
YXQgYXV0b21hdGljYWxseSkuIgorCitsYXRleHBkZjoKKwkkKFNQSElOWEJVSUxEKSAtYiBsYXRl
eCAkKEFMTFNQSElOWE9QVFMpICQoQlVJTERESVIpL2xhdGV4CisJQGVjaG8gIlJ1bm5pbmcgTGFU
ZVggZmlsZXMgdGhyb3VnaCBwZGZsYXRleC4uLiIKKwkkKE1BS0UpIC1DICQoQlVJTERESVIpL2xh
dGV4IGFsbC1wZGYKKwlAZWNobyAicGRmbGF0ZXggZmluaXNoZWQ7IHRoZSBQREYgZmlsZXMgYXJl
IGluICQoQlVJTERESVIpL2xhdGV4LiIKKworbGF0ZXhwZGZqYToKKwkkKFNQSElOWEJVSUxEKSAt
YiBsYXRleCAkKEFMTFNQSElOWE9QVFMpICQoQlVJTERESVIpL2xhdGV4CisJQGVjaG8gIlJ1bm5p
bmcgTGFUZVggZmlsZXMgdGhyb3VnaCBwbGF0ZXggYW5kIGR2aXBkZm14Li4uIgorCSQoTUFLRSkg
LUMgJChCVUlMRERJUikvbGF0ZXggYWxsLXBkZi1qYQorCUBlY2hvICJwZGZsYXRleCBmaW5pc2hl
ZDsgdGhlIFBERiBmaWxlcyBhcmUgaW4gJChCVUlMRERJUikvbGF0ZXguIgorCit0ZXh0OgorCSQo
U1BISU5YQlVJTEQpIC1iIHRleHQgJChBTExTUEhJTlhPUFRTKSAkKEJVSUxERElSKS90ZXh0CisJ
QGVjaG8KKwlAZWNobyAiQnVpbGQgZmluaXNoZWQuIFRoZSB0ZXh0IGZpbGVzIGFyZSBpbiAkKEJV
SUxERElSKS90ZXh0LiIKKworbWFuOgorCSQoU1BISU5YQlVJTEQpIC1iIG1hbiAkKEFMTFNQSElO
WE9QVFMpICQoQlVJTERESVIpL21hbgorCUBlY2hvCisJQGVjaG8gIkJ1aWxkIGZpbmlzaGVkLiBU
aGUgbWFudWFsIHBhZ2VzIGFyZSBpbiAkKEJVSUxERElSKS9tYW4uIgorCit0ZXhpbmZvOgorCSQo
U1BISU5YQlVJTEQpIC1iIHRleGluZm8gJChBTExTUEhJTlhPUFRTKSAkKEJVSUxERElSKS90ZXhp
bmZvCisJQGVjaG8KKwlAZWNobyAiQnVpbGQgZmluaXNoZWQuIFRoZSBUZXhpbmZvIGZpbGVzIGFy
ZSBpbiAkKEJVSUxERElSKS90ZXhpbmZvLiIKKwlAZWNobyAiUnVuIFxgbWFrZScgaW4gdGhhdCBk
aXJlY3RvcnkgdG8gcnVuIHRoZXNlIHRocm91Z2ggbWFrZWluZm8iIFwKKwkgICAgICAiKHVzZSBc
YG1ha2UgaW5mbycgaGVyZSB0byBkbyB0aGF0IGF1dG9tYXRpY2FsbHkpLiIKKworaW5mbzoKKwkk
KFNQSElOWEJVSUxEKSAtYiB0ZXhpbmZvICQoQUxMU1BISU5YT1BUUykgJChCVUlMRERJUikvdGV4
aW5mbworCUBlY2hvICJSdW5uaW5nIFRleGluZm8gZmlsZXMgdGhyb3VnaCBtYWtlaW5mby4uLiIK
KwltYWtlIC1DICQoQlVJTERESVIpL3RleGluZm8gaW5mbworCUBlY2hvICJtYWtlaW5mbyBmaW5p
c2hlZDsgdGhlIEluZm8gZmlsZXMgYXJlIGluICQoQlVJTERESVIpL3RleGluZm8uIgorCitnZXR0
ZXh0OgorCSQoU1BISU5YQlVJTEQpIC1iIGdldHRleHQgJChJMThOU1BISU5YT1BUUykgJChCVUlM
RERJUikvbG9jYWxlCisJQGVjaG8KKwlAZWNobyAiQnVpbGQgZmluaXNoZWQuIFRoZSBtZXNzYWdl
IGNhdGFsb2dzIGFyZSBpbiAkKEJVSUxERElSKS9sb2NhbGUuIgorCitjaGFuZ2VzOgorCSQoU1BI
SU5YQlVJTEQpIC1iIGNoYW5nZXMgJChBTExTUEhJTlhPUFRTKSAkKEJVSUxERElSKS9jaGFuZ2Vz
CisJQGVjaG8KKwlAZWNobyAiVGhlIG92ZXJ2aWV3IGZpbGUgaXMgaW4gJChCVUlMRERJUikvY2hh
bmdlcy4iCisKK2xpbmtjaGVjazoKKwkkKFNQSElOWEJVSUxEKSAtYiBsaW5rY2hlY2sgJChBTExT
UEhJTlhPUFRTKSAkKEJVSUxERElSKS9saW5rY2hlY2sKKwlAZWNobworCUBlY2hvICJMaW5rIGNo
ZWNrIGNvbXBsZXRlOyBsb29rIGZvciBhbnkgZXJyb3JzIGluIHRoZSBhYm92ZSBvdXRwdXQgIiBc
CisJICAgICAgIm9yIGluICQoQlVJTERESVIpL2xpbmtjaGVjay9vdXRwdXQudHh0LiIKKworZG9j
dGVzdDoKKwkkKFNQSElOWEJVSUxEKSAtYiBkb2N0ZXN0ICQoQUxMU1BISU5YT1BUUykgJChCVUlM
RERJUikvZG9jdGVzdAorCUBlY2hvICJUZXN0aW5nIG9mIGRvY3Rlc3RzIGluIHRoZSBzb3VyY2Vz
IGZpbmlzaGVkLCBsb29rIGF0IHRoZSAiIFwKKwkgICAgICAicmVzdWx0cyBpbiAkKEJVSUxERElS
KS9kb2N0ZXN0L291dHB1dC50eHQuIgorCit4bWw6CisJJChTUEhJTlhCVUlMRCkgLWIgeG1sICQo
QUxMU1BISU5YT1BUUykgJChCVUlMRERJUikveG1sCisJQGVjaG8KKwlAZWNobyAiQnVpbGQgZmlu
aXNoZWQuIFRoZSBYTUwgZmlsZXMgYXJlIGluICQoQlVJTERESVIpL3htbC4iCisKK3BzZXVkb3ht
bDoKKwkkKFNQSElOWEJVSUxEKSAtYiBwc2V1ZG94bWwgJChBTExTUEhJTlhPUFRTKSAkKEJVSUxE
RElSKS9wc2V1ZG94bWwKKwlAZWNobworCUBlY2hvICJCdWlsZCBmaW5pc2hlZC4gVGhlIHBzZXVk
by1YTUwgZmlsZXMgYXJlIGluICQoQlVJTERESVIpL3BzZXVkb3htbC4iCmRpZmYgLS1naXQgYS9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL2RvY3MvYXJjaGl0ZWN0
dXJlLnN2ZyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvZG9j
cy9hcmNoaXRlY3R1cmUuc3ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li5iOGQ1YWEyMWMxOQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVk
L3czYy90b29scy93cHRydW5uZXIvZG9jcy9hcmNoaXRlY3R1cmUuc3ZnCkBAIC0wLDAgKzEgQEAK
KzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0
cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgd2lkdGg9Ijc4MHB4IiBoZWlnaHQ9IjEwODdweCIg
dmVyc2lvbj0iMS4xIj48ZGVmcz48bGluZWFyR3JhZGllbnQgeDE9IjAlIiB5MT0iMCUiIHgyPSIw
JSIgeTI9IjEwMCUiIGlkPSJteC1ncmFkaWVudC1hOWM0ZWItMS1hOWM0ZWItMS1zLTAiPjxzdG9w
IG9mZnNldD0iMCUiIHN0eWxlPSJzdG9wLWNvbG9yOiNBOUM0RUIiLz48c3RvcCBvZmZzZXQ9IjEw
MCUiIHN0eWxlPSJzdG9wLWNvbG9yOiNBOUM0RUIiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48
ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjUsMC41KSI+PHJlY3QgeD0iNDk4IiB5PSI0OTgiIHdp
ZHRoPSIxMjAiIGhlaWdodD0iNjAiIGZpbGw9IiNlNmQwZGUiIHN0cm9rZT0iIzAwMDAwMCIgcG9p
bnRlci1ldmVudHM9Im5vbmUiLz48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1MDAsNTIxKSI+PHN3
aXRjaD48Zm9yZWlnbk9iamVjdCBwb2ludGVyLWV2ZW50cz0iYWxsIiB3aWR0aD0iMTE2IiBoZWln
aHQ9IjE1IiByZXF1aXJlZEZlYXR1cmVzPSJodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9mZWF0
dXJlI0V4dGVuc2liaWxpdHkiPjxkaXYgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0
bWwiIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGZvbnQtc2l6ZTogMTJweDsgZm9udC1m
YW1pbHk6IEhlbHZldGljYTsgY29sb3I6IHJnYigwLCAwLCAwKTsgbGluZS1oZWlnaHQ6IDEuMjY7
IHZlcnRpY2FsLWFsaWduOiB0b3A7IHdpZHRoOiAxMTZweDsgd2hpdGUtc3BhY2U6IG5vcm1hbDsg
dGV4dC1hbGlnbjogY2VudGVyOyI+VGVzdFJ1bm5lcjwvZGl2PjwvZm9yZWlnbk9iamVjdD48dGV4
dCB4PSI1OCIgeT0iMTQiIGZpbGw9IiMwMDAwMDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQt
c2l6ZT0iMTJweCIgZm9udC1mYW1pbHk9IkhlbHZldGljYSI+W05vdCBzdXBwb3J0ZWQgYnkgdmll
d2VyXTwvdGV4dD48L3N3aXRjaD48L2c+PHJlY3QgeD0iMzM4IiB5PSI3NzgiIHdpZHRoPSIxMjAi
IGhlaWdodD0iNjAiIGZpbGw9IiNmMTljOTkiIHN0cm9rZT0iIzAwMDAwMCIgcG9pbnRlci1ldmVu
dHM9Im5vbmUiLz48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzNDAsODAxKSI+PHN3aXRjaD48Zm9y
ZWlnbk9iamVjdCBwb2ludGVyLWV2ZW50cz0iYWxsIiB3aWR0aD0iMTE2IiBoZWlnaHQ9IjE1IiBy
ZXF1aXJlZEZlYXR1cmVzPSJodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9mZWF0dXJlI0V4dGVu
c2liaWxpdHkiPjxkaXYgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHN0eWxl
PSJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGZvbnQtc2l6ZTogMTJweDsgZm9udC1mYW1pbHk6IEhl
bHZldGljYTsgY29sb3I6IHJnYigwLCAwLCAwKTsgbGluZS1oZWlnaHQ6IDEuMjY7IHZlcnRpY2Fs
LWFsaWduOiB0b3A7IHdpZHRoOiAxMTZweDsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgdGV4dC1hbGln
bjogY2VudGVyOyI+UHJvZHVjdCB1bmRlciB0ZXN0PC9kaXY+PC9mb3JlaWduT2JqZWN0Pjx0ZXh0
IHg9IjU4IiB5PSIxNCIgZmlsbD0iIzAwMDAwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1z
aXplPSIxMnB4IiBmb250LWZhbWlseT0iSGVsdmV0aWNhIj5bTm90IHN1cHBvcnRlZCBieSB2aWV3
ZXJdPC90ZXh0Pjwvc3dpdGNoPjwvZz48cmVjdCB4PSIzMzgiIHk9IjM4OCIgd2lkdGg9IjEyMCIg
aGVpZ2h0PSI2MCIgZmlsbD0iI2U2ZDBkZSIgc3Ryb2tlPSIjMDAwMDAwIiBwb2ludGVyLWV2ZW50
cz0ibm9uZSIvPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDM0MCw0MTEpIj48c3dpdGNoPjxmb3Jl
aWduT2JqZWN0IHBvaW50ZXItZXZlbnRzPSJhbGwiIHdpZHRoPSIxMTYiIGhlaWdodD0iMTUiIHJl
cXVpcmVkRmVhdHVyZXM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZlYXR1cmUjRXh0ZW5z
aWJpbGl0eSI+PGRpdiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3R5bGU9
ImRpc3BsYXk6IGlubGluZS1ibG9jazsgZm9udC1zaXplOiAxMnB4OyBmb250LWZhbWlseTogSGVs
dmV0aWNhOyBjb2xvcjogcmdiKDAsIDAsIDApOyBsaW5lLWhlaWdodDogMS4yNjsgdmVydGljYWwt
YWxpZ246IHRvcDsgd2lkdGg6IDExNnB4OyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB0ZXh0LWFsaWdu
OiBjZW50ZXI7Ij5UZXN0UnVubmVyTWFuYWdlcjwvZGl2PjwvZm9yZWlnbk9iamVjdD48dGV4dCB4
PSI1OCIgeT0iMTQiIGZpbGw9IiMwMDAwMDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6
ZT0iMTJweCIgZm9udC1mYW1pbHk9IkhlbHZldGljYSI+W05vdCBzdXBwb3J0ZWQgYnkgdmlld2Vy
XTwvdGV4dD48L3N3aXRjaD48L2c+PHJlY3QgeD0iMzM4IiB5PSIyMjgiIHdpZHRoPSIxMjAiIGhl
aWdodD0iNjAiIGZpbGw9IiNlNmQwZGUiIHN0cm9rZT0iIzAwMDAwMCIgcG9pbnRlci1ldmVudHM9
Im5vbmUiLz48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzNDAsMjUxKSI+PHN3aXRjaD48Zm9yZWln
bk9iamVjdCBwb2ludGVyLWV2ZW50cz0iYWxsIiB3aWR0aD0iMTE2IiBoZWlnaHQ9IjE1IiByZXF1
aXJlZEZlYXR1cmVzPSJodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9mZWF0dXJlI0V4dGVuc2li
aWxpdHkiPjxkaXYgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHN0eWxlPSJk
aXNwbGF5OiBpbmxpbmUtYmxvY2s7IGZvbnQtc2l6ZTogMTJweDsgZm9udC1mYW1pbHk6IEhlbHZl
dGljYTsgY29sb3I6IHJnYigwLCAwLCAwKTsgbGluZS1oZWlnaHQ6IDEuMjY7IHZlcnRpY2FsLWFs
aWduOiB0b3A7IHdpZHRoOiAxMTZweDsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgdGV4dC1hbGlnbjog
Y2VudGVyOyI+TWFuYWdlckdyb3VwPC9kaXY+PC9mb3JlaWduT2JqZWN0Pjx0ZXh0IHg9IjU4IiB5
PSIxNCIgZmlsbD0iIzAwMDAwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMnB4
IiBmb250LWZhbWlseT0iSGVsdmV0aWNhIj5bTm90IHN1cHBvcnRlZCBieSB2aWV3ZXJdPC90ZXh0
Pjwvc3dpdGNoPjwvZz48cmVjdCB4PSI2NTgiIHk9IjYwOCIgd2lkdGg9IjEyMCIgaGVpZ2h0PSI2
MCIgZmlsbD0iI2ZmY2U5ZiIgc3Ryb2tlPSIjMDAwMDAwIiBwb2ludGVyLWV2ZW50cz0ibm9uZSIv
PjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDY2MCw2MzEpIj48c3dpdGNoPjxmb3JlaWduT2JqZWN0
IHBvaW50ZXItZXZlbnRzPSJhbGwiIHdpZHRoPSIxMTYiIGhlaWdodD0iMTUiIHJlcXVpcmVkRmVh
dHVyZXM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZlYXR1cmUjRXh0ZW5zaWJpbGl0eSI+
PGRpdiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3R5bGU9ImRpc3BsYXk6
IGlubGluZS1ibG9jazsgZm9udC1zaXplOiAxMnB4OyBmb250LWZhbWlseTogSGVsdmV0aWNhOyBj
b2xvcjogcmdiKDAsIDAsIDApOyBsaW5lLWhlaWdodDogMS4yNjsgdmVydGljYWwtYWxpZ246IHRv
cDsgd2lkdGg6IDExNnB4OyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB0ZXh0LWFsaWduOiBjZW50ZXI7
Ij5FeGVjdXRvcjwvZGl2PjwvZm9yZWlnbk9iamVjdD48dGV4dCB4PSI1OCIgeT0iMTQiIGZpbGw9
IiMwMDAwMDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTJweCIgZm9udC1mYW1p
bHk9IkhlbHZldGljYSI+W05vdCBzdXBwb3J0ZWQgYnkgdmlld2VyXTwvdGV4dD48L3N3aXRjaD48
L2c+PHJlY3QgeD0iMzM4IiB5PSI0OTgiIHdpZHRoPSIxMjAiIGhlaWdodD0iNjAiIGZpbGw9InVy
bCgjbXgtZ3JhZGllbnQtYTljNGViLTEtYTljNGViLTEtcy0wKSIgc3Ryb2tlPSIjMDAwMDAwIiBw
b2ludGVyLWV2ZW50cz0ibm9uZSIvPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDM0MCw1MjEpIj48
c3dpdGNoPjxmb3JlaWduT2JqZWN0IHBvaW50ZXItZXZlbnRzPSJhbGwiIHdpZHRoPSIxMTYiIGhl
aWdodD0iMTUiIHJlcXVpcmVkRmVhdHVyZXM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2Zl
YXR1cmUjRXh0ZW5zaWJpbGl0eSI+PGRpdiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94
aHRtbCIgc3R5bGU9ImRpc3BsYXk6IGlubGluZS1ibG9jazsgZm9udC1zaXplOiAxMnB4OyBmb250
LWZhbWlseTogSGVsdmV0aWNhOyBjb2xvcjogcmdiKDAsIDAsIDApOyBsaW5lLWhlaWdodDogMS4y
NjsgdmVydGljYWwtYWxpZ246IHRvcDsgd2lkdGg6IDExNnB4OyB3aGl0ZS1zcGFjZTogbm9ybWFs
OyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij5Ccm93c2VyPC9kaXY+PC9mb3JlaWduT2JqZWN0Pjx0ZXh0
IHg9IjU4IiB5PSIxNCIgZmlsbD0iIzAwMDAwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1z
aXplPSIxMnB4IiBmb250LWZhbWlseT0iSGVsdmV0aWNhIj5bTm90IHN1cHBvcnRlZCBieSB2aWV3
ZXJdPC90ZXh0Pjwvc3dpdGNoPjwvZz48cGF0aCBkPSJNIDM5OCAyODggTCAzOTggMzgyIiBmaWxs
PSJub25lIiBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgcG9pbnRlci1l
dmVudHM9Im5vbmUiLz48cGF0aCBkPSJNIDM5OCAzODcgTCAzOTUgMzgwIEwgMzk4IDM4MiBMIDQw
MiAzODAgWiIgZmlsbD0iIzAwMDAwMCIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2UtbWl0ZXJsaW1p
dD0iMTAiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+PHBhdGggZD0iTSAzOTggNDQ4IEwgMzk4IDQ5
MiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHBv
aW50ZXItZXZlbnRzPSJub25lIi8+PHBhdGggZD0iTSAzOTggNDk3IEwgMzk1IDQ5MCBMIDM5OCA0
OTIgTCA0MDIgNDkwIFoiIGZpbGw9IiMwMDAwMDAiIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLW1p
dGVybGltaXQ9IjEwIiBwb2ludGVyLWV2ZW50cz0ibm9uZSIvPjxwYXRoIGQ9Ik0gNjE4IDUyOCBM
IDY4NCA2MDMiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLW1pdGVybGltaXQ9
IjEwIiBwb2ludGVyLWV2ZW50cz0ibm9uZSIvPjxwYXRoIGQ9Ik0gNjg3IDYwNyBMIDY4MCA2MDQg
TCA2ODQgNjAzIEwgNjg1IDYwMCBaIiBmaWxsPSIjMDAwMDAwIiBzdHJva2U9IiMwMDAwMDAiIHN0
cm9rZS1taXRlcmxpbWl0PSIxMCIgcG9pbnRlci1ldmVudHM9Im5vbmUiLz48cmVjdCB4PSI0OTgi
IHk9IjYwOCIgd2lkdGg9IjEyMCIgaGVpZ2h0PSI2MCIgZmlsbD0iI2E5YzRlYiIgc3Ryb2tlPSIj
MDAwMDAwIiBwb2ludGVyLWV2ZW50cz0ibm9uZSIvPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDUw
MCw2MzEpIj48c3dpdGNoPjxmb3JlaWduT2JqZWN0IHBvaW50ZXItZXZlbnRzPSJhbGwiIHdpZHRo
PSIxMTYiIGhlaWdodD0iMTUiIHJlcXVpcmVkRmVhdHVyZXM9Imh0dHA6Ly93d3cudzMub3JnL1RS
L1NWRzExL2ZlYXR1cmUjRXh0ZW5zaWJpbGl0eSI+PGRpdiB4bWxucz0iaHR0cDovL3d3dy53My5v
cmcvMTk5OS94aHRtbCIgc3R5bGU9ImRpc3BsYXk6IGlubGluZS1ibG9jazsgZm9udC1zaXplOiAx
MnB4OyBmb250LWZhbWlseTogSGVsdmV0aWNhOyBjb2xvcjogcmdiKDAsIDAsIDApOyBsaW5lLWhl
aWdodDogMS4yNjsgdmVydGljYWwtYWxpZ246IHRvcDsgd2lkdGg6IDExNnB4OyB3aGl0ZS1zcGFj
ZTogbm9ybWFsOyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij5FeGVjdXRvckJyb3dzZXI8L2Rpdj48L2Zv
cmVpZ25PYmplY3Q+PHRleHQgeD0iNTgiIHk9IjE0IiBmaWxsPSIjMDAwMDAwIiB0ZXh0LWFuY2hv
cj0ibWlkZGxlIiBmb250LXNpemU9IjEycHgiIGZvbnQtZmFtaWx5PSJIZWx2ZXRpY2EiPltOb3Qg
c3VwcG9ydGVkIGJ5IHZpZXdlcl08L3RleHQ+PC9zd2l0Y2g+PC9nPjxwYXRoIGQ9Ik0gNjI0IDYz
OCBMIDY1OCA2MzgiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLW1pdGVybGlt
aXQ9IjEwIiBwb2ludGVyLWV2ZW50cz0ibm9uZSIvPjxwYXRoIGQ9Ik0gNjE5IDYzOCBMIDYyNiA2
MzUgTCA2MjQgNjM4IEwgNjI2IDY0MiBaIiBmaWxsPSIjMDAwMDAwIiBzdHJva2U9IiMwMDAwMDAi
IHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgcG9pbnRlci1ldmVudHM9Im5vbmUiLz48cGF0aCBkPSJN
IDQyOCA0NDggTCA1NTIgNDk2IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS1t
aXRlcmxpbWl0PSIxMCIgc3Ryb2tlLWRhc2hhcnJheT0iMyAzIiBwb2ludGVyLWV2ZW50cz0ibm9u
ZSIvPjxwYXRoIGQ9Ik0gNTU3IDQ5OCBMIDU0OSA0OTggTCA1NTIgNDk2IEwgNTUyIDQ5MiBaIiBm
aWxsPSIjMDAwMDAwIiBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgcG9p
bnRlci1ldmVudHM9Im5vbmUiLz48cGF0aCBkPSJNIDM5OCA1NTggTCAzOTggNzcyIiBmaWxsPSJu
b25lIiBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLWRhc2hh
cnJheT0iMyAzIiBwb2ludGVyLWV2ZW50cz0ibm9uZSIvPjxwYXRoIGQ9Ik0gMzk4IDc3NyBMIDM5
NSA3NzAgTCAzOTggNzcyIEwgNDAyIDc3MCBaIiBmaWxsPSIjMDAwMDAwIiBzdHJva2U9IiMwMDAw
MDAiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgcG9pbnRlci1ldmVudHM9Im5vbmUiLz48cmVjdCB4
PSIzMzgiIHk9IjQ4IiB3aWR0aD0iMTIwIiBoZWlnaHQ9IjYwIiBmaWxsPSIjZTZkMGRlIiBzdHJv
a2U9IiMwMDAwMDAiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+PGcgdHJhbnNmb3JtPSJ0cmFuc2xh
dGUoMzQwLDcxKSI+PHN3aXRjaD48Zm9yZWlnbk9iamVjdCBwb2ludGVyLWV2ZW50cz0iYWxsIiB3
aWR0aD0iMTE2IiBoZWlnaHQ9IjE1IiByZXF1aXJlZEZlYXR1cmVzPSJodHRwOi8vd3d3LnczLm9y
Zy9UUi9TVkcxMS9mZWF0dXJlI0V4dGVuc2liaWxpdHkiPjxkaXYgeG1sbnM9Imh0dHA6Ly93d3cu
dzMub3JnLzE5OTkveGh0bWwiIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGZvbnQtc2l6
ZTogMTJweDsgZm9udC1mYW1pbHk6IEhlbHZldGljYTsgY29sb3I6IHJnYigwLCAwLCAwKTsgbGlu
ZS1oZWlnaHQ6IDEuMjY7IHZlcnRpY2FsLWFsaWduOiB0b3A7IHdpZHRoOiAxMTZweDsgd2hpdGUt
c3BhY2U6IG5vcm1hbDsgdGV4dC1hbGlnbjogY2VudGVyOyI+cnVuX3Rlc3RzPC9kaXY+PC9mb3Jl
aWduT2JqZWN0Pjx0ZXh0IHg9IjU4IiB5PSIxNCIgZmlsbD0iIzAwMDAwMCIgdGV4dC1hbmNob3I9
Im1pZGRsZSIgZm9udC1zaXplPSIxMnB4IiBmb250LWZhbWlseT0iSGVsdmV0aWNhIj5bTm90IHN1
cHBvcnRlZCBieSB2aWV3ZXJdPC90ZXh0Pjwvc3dpdGNoPjwvZz48cGF0aCBkPSJNIDQ1OCA3OCBM
IDY1MiA3OCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2UtbWl0ZXJsaW1pdD0i
MTAiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+PHBhdGggZD0iTSA2NTcgNzggTCA2NTAgODIgTCA2
NTIgNzggTCA2NTAgNzUgWiIgZmlsbD0iIzAwMDAwMCIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2Ut
bWl0ZXJsaW1pdD0iMTAiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+PHJlY3QgeD0iNjU4IiB5PSI0
OCIgd2lkdGg9IjEyMCIgaGVpZ2h0PSI2MCIgZmlsbD0iI2U2ZDBkZSIgc3Ryb2tlPSIjMDAwMDAw
IiBwb2ludGVyLWV2ZW50cz0ibm9uZSIvPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDY2MCw3MSki
Pjxzd2l0Y2g+PGZvcmVpZ25PYmplY3QgcG9pbnRlci1ldmVudHM9ImFsbCIgd2lkdGg9IjExNiIg
aGVpZ2h0PSIxNSIgcmVxdWlyZWRGZWF0dXJlcz0iaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEv
ZmVhdHVyZSNFeHRlbnNpYmlsaXR5Ij48ZGl2IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5
L3hodG1sIiBzdHlsZT0iZGlzcGxheTogaW5saW5lLWJsb2NrOyBmb250LXNpemU6IDEycHg7IGZv
bnQtZmFtaWx5OiBIZWx2ZXRpY2E7IGNvbG9yOiByZ2IoMCwgMCwgMCk7IGxpbmUtaGVpZ2h0OiAx
LjI2OyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyB3aWR0aDogMTE2cHg7IHdoaXRlLXNwYWNlOiBub3Jt
YWw7IHRleHQtYWxpZ246IGNlbnRlcjsiPlRlc3RMb2FkZXI8L2Rpdj48L2ZvcmVpZ25PYmplY3Q+
PHRleHQgeD0iNTgiIHk9IjE0IiBmaWxsPSIjMDAwMDAwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBm
b250LXNpemU9IjEycHgiIGZvbnQtZmFtaWx5PSJIZWx2ZXRpY2EiPltOb3Qgc3VwcG9ydGVkIGJ5
IHZpZXdlcl08L3RleHQ+PC9zd2l0Y2g+PC9nPjxyZWN0IHg9IjcxIiB5PSI0OCIgd2lkdGg9IjEy
MCIgaGVpZ2h0PSI2MCIgZmlsbD0iI2U2ZDBkZSIgc3Ryb2tlPSIjMDAwMDAwIiBwb2ludGVyLWV2
ZW50cz0ibm9uZSIvPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDczLDcxKSI+PHN3aXRjaD48Zm9y
ZWlnbk9iamVjdCBwb2ludGVyLWV2ZW50cz0iYWxsIiB3aWR0aD0iMTE2IiBoZWlnaHQ9IjE1IiBy
ZXF1aXJlZEZlYXR1cmVzPSJodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9mZWF0dXJlI0V4dGVu
c2liaWxpdHkiPjxkaXYgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHN0eWxl
PSJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGZvbnQtc2l6ZTogMTJweDsgZm9udC1mYW1pbHk6IEhl
bHZldGljYTsgY29sb3I6IHJnYigwLCAwLCAwKTsgbGluZS1oZWlnaHQ6IDEuMjY7IHZlcnRpY2Fs
LWFsaWduOiB0b3A7IHdpZHRoOiAxMTZweDsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgdGV4dC1hbGln
bjogY2VudGVyOyI+VGVzdEVudmlyb25tZW50PC9kaXY+PC9mb3JlaWduT2JqZWN0Pjx0ZXh0IHg9
IjU4IiB5PSIxNCIgZmlsbD0iIzAwMDAwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXpl
PSIxMnB4IiBmb250LWZhbWlseT0iSGVsdmV0aWNhIj5bTm90IHN1cHBvcnRlZCBieSB2aWV3ZXJd
PC90ZXh0Pjwvc3dpdGNoPjwvZz48cmVjdCB4PSIxNTEiIHk9IjYxOCIgd2lkdGg9IjEyMCIgaGVp
Z2h0PSI2MCIgZmlsbD0iI2I5ZTBhNSIgc3Ryb2tlPSIjMDAwMDAwIiBwb2ludGVyLWV2ZW50cz0i
bm9uZSIvPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE1Myw2NDEpIj48c3dpdGNoPjxmb3JlaWdu
T2JqZWN0IHBvaW50ZXItZXZlbnRzPSJhbGwiIHdpZHRoPSIxMTYiIGhlaWdodD0iMTUiIHJlcXVp
cmVkRmVhdHVyZXM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZlYXR1cmUjRXh0ZW5zaWJp
bGl0eSI+PGRpdiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3R5bGU9ImRp
c3BsYXk6IGlubGluZS1ibG9jazsgZm9udC1zaXplOiAxMnB4OyBmb250LWZhbWlseTogSGVsdmV0
aWNhOyBjb2xvcjogcmdiKDAsIDAsIDApOyBsaW5lLWhlaWdodDogMS4yNjsgdmVydGljYWwtYWxp
Z246IHRvcDsgd2lkdGg6IDExNnB4OyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB0ZXh0LWFsaWduOiBj
ZW50ZXI7Ij53cHRzZXJ2ZTwvZGl2PjwvZm9yZWlnbk9iamVjdD48dGV4dCB4PSI1OCIgeT0iMTQi
IGZpbGw9IiMwMDAwMDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTJweCIgZm9u
dC1mYW1pbHk9IkhlbHZldGljYSI+W05vdCBzdXBwb3J0ZWQgYnkgdmlld2VyXTwvdGV4dD48L3N3
aXRjaD48L2c+PHJlY3QgeD0iMSIgeT0iNjE4IiB3aWR0aD0iMTIwIiBoZWlnaHQ9IjYwIiBmaWxs
PSIjYjllMGE1IiBzdHJva2U9IiMwMDAwMDAiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+PGcgdHJh
bnNmb3JtPSJ0cmFuc2xhdGUoMyw2NDEpIj48c3dpdGNoPjxmb3JlaWduT2JqZWN0IHBvaW50ZXIt
ZXZlbnRzPSJhbGwiIHdpZHRoPSIxMTYiIGhlaWdodD0iMTUiIHJlcXVpcmVkRmVhdHVyZXM9Imh0
dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZlYXR1cmUjRXh0ZW5zaWJpbGl0eSI+PGRpdiB4bWxu
cz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3R5bGU9ImRpc3BsYXk6IGlubGluZS1i
bG9jazsgZm9udC1zaXplOiAxMnB4OyBmb250LWZhbWlseTogSGVsdmV0aWNhOyBjb2xvcjogcmdi
KDAsIDAsIDApOyBsaW5lLWhlaWdodDogMS4yNjsgdmVydGljYWwtYWxpZ246IHRvcDsgd2lkdGg6
IDExNnB4OyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij5weXdlYnNv
Y2tldDwvZGl2PjwvZm9yZWlnbk9iamVjdD48dGV4dCB4PSI1OCIgeT0iMTQiIGZpbGw9IiMwMDAw
MDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTJweCIgZm9udC1mYW1pbHk9Ikhl
bHZldGljYSI+W05vdCBzdXBwb3J0ZWQgYnkgdmlld2VyXTwvdGV4dD48L3N3aXRjaD48L2c+PHBh
dGggZD0iTSAzMzggNzggTCAxOTcgNzgiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMDAwMCIgc3Ry
b2tlLW1pdGVybGltaXQ9IjEwIiBwb2ludGVyLWV2ZW50cz0ibm9uZSIvPjxwYXRoIGQ9Ik0gMTky
IDc4IEwgMTk5IDc1IEwgMTk3IDc4IEwgMTk5IDgyIFoiIGZpbGw9IiMwMDAwMDAiIHN0cm9rZT0i
IzAwMDAwMCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBwb2ludGVyLWV2ZW50cz0ibm9uZSIvPjxw
YXRoIGQ9Ik0gMTAxIDMwOCBMIDYyIDYxMiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwMDAwIiBz
dHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS1kYXNoYXJyYXk9IjMgMyIgcG9pbnRlci1ldmVu
dHM9Im5vbmUiLz48cGF0aCBkPSJNIDYxIDYxNyBMIDU5IDYxMCBMIDYyIDYxMiBMIDY2IDYxMCBa
IiBmaWxsPSIjMDAwMDAwIiBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIg
cG9pbnRlci1ldmVudHM9Im5vbmUiLz48cGF0aCBkPSJNIDE2MSAzMDggTCAyMDQgNjEyIiBmaWxs
PSJub25lIiBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLWRh
c2hhcnJheT0iMyAzIiBwb2ludGVyLWV2ZW50cz0ibm9uZSIvPjxwYXRoIGQ9Ik0gMjA0IDYxNyBM
IDIwMCA2MTAgTCAyMDQgNjEyIEwgMjA3IDYwOSBaIiBmaWxsPSIjMDAwMDAwIiBzdHJva2U9IiMw
MDAwMDAiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgcG9pbnRlci1ldmVudHM9Im5vbmUiLz48cGF0
aCBkPSJNIDMzOCA4MjMgTCA2MSA2NzgiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMDAwMCIgc3Ry
b2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2UtZGFzaGFycmF5PSIzIDMiIHBvaW50ZXItZXZlbnRz
PSJub25lIi8+PHBhdGggZD0iTSAyMTEgNjc4IEwgMzM4IDc5MyIgZmlsbD0ibm9uZSIgc3Ryb2tl
PSIjMDAwMDAwIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS1kYXNoYXJyYXk9IjMgMyIg
cG9pbnRlci1ldmVudHM9Im5vbmUiLz48cGF0aCBkPSJNIDM5OCAxMDggTCAzOTggMjIyIiBmaWxs
PSJub25lIiBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgcG9pbnRlci1l
dmVudHM9Im5vbmUiLz48cGF0aCBkPSJNIDM5OCAyMjcgTCAzOTUgMjIwIEwgMzk4IDIyMiBMIDQw
MiAyMjAgWiIgZmlsbD0iIzAwMDAwMCIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2UtbWl0ZXJsaW1p
dD0iMTAiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+PHBhdGggZD0iTSA3MDYgMjg4IEwgNjE4IDUx
MyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0
cm9rZS1kYXNoYXJyYXk9IjMgMyIgcG9pbnRlci1ldmVudHM9Im5vbmUiLz48cmVjdCB4PSI2NTgi
IHk9IjM4OCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjQwIiBmaWxsPSJub25lIiBzdHJva2U9Im5vbmUi
IHBvaW50ZXItZXZlbnRzPSJub25lIi8+PGcgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9Ikhl
bHZldGljYSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMnB4Ij48dGV4dCB4PSI2
OTMiIHk9IjQxMiI+UXVldWUuZ2V0PC90ZXh0PjwvZz48cGF0aCBkPSJNIDQ1OCA4MDggTCA3MTgg
NjY4IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIg
c3Ryb2tlLWRhc2hhcnJheT0iMyAzIiBwb2ludGVyLWV2ZW50cz0ibm9uZSIvPjxyZWN0IHg9Ijcx
IiB5PSIyNDgiIHdpZHRoPSIxMjAiIGhlaWdodD0iNjAiIGZpbGw9IiNiOWUwYTUiIHN0cm9rZT0i
IzAwMDAwMCIgcG9pbnRlci1ldmVudHM9Im5vbmUiLz48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg3
MywyNzEpIj48c3dpdGNoPjxmb3JlaWduT2JqZWN0IHBvaW50ZXItZXZlbnRzPSJhbGwiIHdpZHRo
PSIxMTYiIGhlaWdodD0iMTUiIHJlcXVpcmVkRmVhdHVyZXM9Imh0dHA6Ly93d3cudzMub3JnL1RS
L1NWRzExL2ZlYXR1cmUjRXh0ZW5zaWJpbGl0eSI+PGRpdiB4bWxucz0iaHR0cDovL3d3dy53My5v
cmcvMTk5OS94aHRtbCIgc3R5bGU9ImRpc3BsYXk6IGlubGluZS1ibG9jazsgZm9udC1zaXplOiAx
MnB4OyBmb250LWZhbWlseTogSGVsdmV0aWNhOyBjb2xvcjogcmdiKDAsIDAsIDApOyBsaW5lLWhl
aWdodDogMS4yNjsgdmVydGljYWwtYWxpZ246IHRvcDsgd2lkdGg6IDExNnB4OyB3aGl0ZS1zcGFj
ZTogbm9ybWFsOyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij5zZXJ2ZS5weTwvZGl2PjwvZm9yZWlnbk9i
amVjdD48dGV4dCB4PSI1OCIgeT0iMTQiIGZpbGw9IiMwMDAwMDAiIHRleHQtYW5jaG9yPSJtaWRk
bGUiIGZvbnQtc2l6ZT0iMTJweCIgZm9udC1mYW1pbHk9IkhlbHZldGljYSI+W05vdCBzdXBwb3J0
ZWQgYnkgdmlld2VyXTwvdGV4dD48L3N3aXRjaD48L2c+PHBhdGggZD0iTSAxMzEgMTA4IEwgMTMx
IDI0MiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAi
IHN0cm9rZS1kYXNoYXJyYXk9IjMgMyIgcG9pbnRlci1ldmVudHM9Im5vbmUiLz48cGF0aCBkPSJN
IDEzMSAyNDcgTCAxMjggMjQwIEwgMTMxIDI0MiBMIDEzNSAyNDAgWiIgZmlsbD0iIzAwMDAwMCIg
c3Ryb2tlPSIjMDAwMDAwIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHBvaW50ZXItZXZlbnRzPSJu
b25lIi8+PHBhdGggZD0iTSA4OCA5NzMgTCAxMzIgOTczIiBmaWxsPSJub25lIiBzdHJva2U9IiMw
MDAwMDAiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgcG9pbnRlci1ldmVudHM9Im5vbmUiLz48cGF0
aCBkPSJNIDEzNyA5NzMgTCAxMzAgOTc3IEwgMTMyIDk3MyBMIDEzMCA5NzAgWiIgZmlsbD0iIzAw
MDAwMCIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHBvaW50ZXItZXZl
bnRzPSJub25lIi8+PHJlY3QgeD0iMTM4IiB5PSIxMDE4IiB3aWR0aD0iMTgwIiBoZWlnaHQ9IjMw
IiBmaWxsPSJub25lIiBzdHJva2U9Im5vbmUiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+PGcgZmls
bD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9IkhlbHZldGljYSIgdGV4dC1hbmNob3I9Im1pZGRsZSIg
Zm9udC1zaXplPSIxMnB4Ij48dGV4dCB4PSIyMjgiIHk9IjEwMzciPkNvbW11bmljYXRpb24gKGNy
b3NzIHByb2Nlc3MpPC90ZXh0PjwvZz48cGF0aCBkPSJNIDg4IDEwMDIgTCAxMzIgMTAwMiIgZmls
bD0ibm9uZSIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS1k
YXNoYXJyYXk9IjMgMyIgcG9pbnRlci1ldmVudHM9Im5vbmUiLz48cGF0aCBkPSJNIDEzNyAxMDAy
IEwgMTMwIDEwMDYgTCAxMzIgMTAwMiBMIDEzMCA5OTkgWiIgZmlsbD0iIzAwMDAwMCIgc3Ryb2tl
PSIjMDAwMDAwIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+
PHJlY3QgeD0iMTM4IiB5PSI5NTgiIHdpZHRoPSIxODAiIGhlaWdodD0iMzAiIGZpbGw9Im5vbmUi
IHN0cm9rZT0ibm9uZSIgcG9pbnRlci1ldmVudHM9Im5vbmUiLz48ZyBmaWxsPSIjMDAwMDAwIiBm
b250LWZhbWlseT0iSGVsdmV0aWNhIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEy
cHgiPjx0ZXh0IHg9IjIyOCIgeT0iOTc3Ij5Pd25lcnNoaXAgKHNhbWUgcHJvY2Vzcyk8L3RleHQ+
PC9nPjxwYXRoIGQ9Ik0gODggMTAzMyBMIDEzOCAxMDMzIiBmaWxsPSJub25lIiBzdHJva2U9IiMw
MDAwMDAiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLWRhc2hhcnJheT0iMyAzIiBwb2lu
dGVyLWV2ZW50cz0ibm9uZSIvPjxyZWN0IHg9IjE0MyIgeT0iOTg4IiB3aWR0aD0iMTgwIiBoZWln
aHQ9IjMwIiBmaWxsPSJub25lIiBzdHJva2U9Im5vbmUiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+
PGcgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9IkhlbHZldGljYSIgdGV4dC1hbmNob3I9Im1p
ZGRsZSIgZm9udC1zaXplPSIxMnB4Ij48dGV4dCB4PSIyMzMiIHk9IjEwMDciPk93bmVyc2hpcCAo
Y3Jvc3MgcHJvY2Vzcyk8L3RleHQ+PC9nPjxyZWN0IHg9IjQyOCIgeT0iOTY2IiB3aWR0aD0iNTAi
IGhlaWdodD0iMTUiIGZpbGw9IiNlNmQwZGUiIHN0cm9rZT0iIzAwMDAwMCIgcG9pbnRlci1ldmVu
dHM9Im5vbmUiLz48cmVjdCB4PSI0MjgiIHk9Ijk5MCIgd2lkdGg9IjUwIiBoZWlnaHQ9IjE1IiBm
aWxsPSIjYTljNGViIiBzdHJva2U9IiMwMDAwMDAiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+PHJl
Y3QgeD0iNDI4IiB5PSIxMDE1IiB3aWR0aD0iNTAiIGhlaWdodD0iMTUiIGZpbGw9IiNmZmNlOWYi
IHN0cm9rZT0iIzAwMDAwMCIgcG9pbnRlci1ldmVudHM9Im5vbmUiLz48cmVjdCB4PSI0MjgiIHk9
IjEwNjMiIHdpZHRoPSI1MCIgaGVpZ2h0PSIxNSIgZmlsbD0iI2YxOWM5OSIgc3Ryb2tlPSIjMDAw
MDAwIiBwb2ludGVyLWV2ZW50cz0ibm9uZSIvPjxyZWN0IHg9IjQyOCIgeT0iMTAzOCIgd2lkdGg9
IjUwIiBoZWlnaHQ9IjE1IiBmaWxsPSIjYjllMGE1IiBzdHJva2U9IiMwMDAwMDAiIHBvaW50ZXIt
ZXZlbnRzPSJub25lIi8+PHJlY3QgeD0iNDg1IiB5PSI5NTgiIHdpZHRoPSI5MCIgaGVpZ2h0PSIz
MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJub25lIiBwb2ludGVyLWV2ZW50cz0ibm9uZSIvPjxnIGZp
bGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJIZWx2ZXRpY2EiIHRleHQtYW5jaG9yPSJtaWRkbGUi
IGZvbnQtc2l6ZT0iMTJweCI+PHRleHQgeD0iNTMwIiB5PSI5NzciPndwdHJ1bm5lciBjbGFzczwv
dGV4dD48L2c+PHJlY3QgeD0iNDg2IiB5PSI5ODMiIHdpZHRoPSIxNTAiIGhlaWdodD0iMzAiIGZp
bGw9Im5vbmUiIHN0cm9rZT0ibm9uZSIgcG9pbnRlci1ldmVudHM9Im5vbmUiLz48ZyBmaWxsPSIj
MDAwMDAwIiBmb250LWZhbWlseT0iSGVsdmV0aWNhIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250
LXNpemU9IjEycHgiPjx0ZXh0IHg9IjU2MSIgeT0iMTAwMiI+UGVyLXByb2R1Y3Qgd3B0cnVubmVy
IGNsYXNzPC90ZXh0PjwvZz48cmVjdCB4PSI0ODYiIHk9IjEwMDgiIHdpZHRoPSIxNTAiIGhlaWdo
dD0iMzAiIGZpbGw9Im5vbmUiIHN0cm9rZT0ibm9uZSIgcG9pbnRlci1ldmVudHM9Im5vbmUiLz48
ZyBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0iSGVsdmV0aWNhIiB0ZXh0LWFuY2hvcj0ibWlk
ZGxlIiBmb250LXNpemU9IjEycHgiPjx0ZXh0IHg9IjU2MSIgeT0iMTAyNyI+UGVyLXByb3RvY29s
IHdwdHJ1bm5lciBjbGFzczwvdGV4dD48L2c+PHJlY3QgeD0iNDkxIiB5PSIxMDMxIiB3aWR0aD0i
MTUwIiBoZWlnaHQ9IjMwIiBmaWxsPSJub25lIiBzdHJva2U9Im5vbmUiIHBvaW50ZXItZXZlbnRz
PSJub25lIi8+PGcgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9IkhlbHZldGljYSIgdGV4dC1h
bmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMnB4Ij48dGV4dCB4PSI1NjYiIHk9IjEwNTAiPldl
Yi1wbGF0Zm9ybS10ZXN0cyBjb21wb25lbnQ8L3RleHQ+PC9nPjxyZWN0IHg9IjQ4NiIgeT0iMTA1
NSIgd2lkdGg9IjkwIiBoZWlnaHQ9IjMwIiBmaWxsPSJub25lIiBzdHJva2U9Im5vbmUiIHBvaW50
ZXItZXZlbnRzPSJub25lIi8+PGcgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9IkhlbHZldGlj
YSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMnB4Ij48dGV4dCB4PSI1MzEiIHk9
IjEwNzQiPkJyb3dzZXIgcHJvY2VzczwvdGV4dD48L2c+PHBhdGggZD0iTSAzOTggOCBMIDM5OCA0
MiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHBv
aW50ZXItZXZlbnRzPSJub25lIi8+PHBhdGggZD0iTSAzOTggNDcgTCAzOTUgNDAgTCAzOTggNDIg
TCA0MDIgNDAgWiIgZmlsbD0iIzAwMDAwMCIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2UtbWl0ZXJs
aW1pdD0iMTAiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+PHJlY3QgeD0iNDc4IiB5PSIzODgiIHdp
ZHRoPSIxMjAiIGhlaWdodD0iNjAiIGZpbGwtb3BhY2l0eT0iMC41IiBmaWxsPSIjZTZkMGRlIiBz
dHJva2U9IiMwMDAwMDAiIHN0cm9rZS1vcGFjaXR5PSIwLjUiIHBvaW50ZXItZXZlbnRzPSJub25l
Ii8+PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNDgwLDQxMSkiPjxzd2l0Y2g+PGZvcmVpZ25PYmpl
Y3QgcG9pbnRlci1ldmVudHM9ImFsbCIgd2lkdGg9IjExNiIgaGVpZ2h0PSIxNSIgcmVxdWlyZWRG
ZWF0dXJlcz0iaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmVhdHVyZSNFeHRlbnNpYmlsaXR5
Ij48ZGl2IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzdHlsZT0iZGlzcGxh
eTogaW5saW5lLWJsb2NrOyBmb250LXNpemU6IDEycHg7IGZvbnQtZmFtaWx5OiBIZWx2ZXRpY2E7
IGNvbG9yOiByZ2IoMCwgMCwgMCk7IGxpbmUtaGVpZ2h0OiAxLjI2OyB2ZXJ0aWNhbC1hbGlnbjog
dG9wOyB3aWR0aDogMTE2cHg7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHRleHQtYWxpZ246IGNlbnRl
cjsiPlRlc3RSdW5uZXJNYW5hZ2VyPC9kaXY+PC9mb3JlaWduT2JqZWN0Pjx0ZXh0IHg9IjU4IiB5
PSIxNCIgZmlsbD0iIzAwMDAwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMnB4
IiBmb250LWZhbWlseT0iSGVsdmV0aWNhIj5bTm90IHN1cHBvcnRlZCBieSB2aWV3ZXJdPC90ZXh0
Pjwvc3dpdGNoPjwvZz48cGF0aCBkPSJNIDM5OCAyODggTCA1MzMgMzg0IiBmaWxsPSJub25lIiBz
dHJva2U9IiMwMDAwMDAiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgcG9pbnRlci1ldmVudHM9Im5v
bmUiLz48cGF0aCBkPSJNIDUzNyAzODcgTCA1MjkgMzg2IEwgNTMzIDM4NCBMIDUzMyAzODAgWiIg
ZmlsbD0iIzAwMDAwMCIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHBv
aW50ZXItZXZlbnRzPSJub25lIi8+PHJlY3QgeD0iMTk4IiB5PSIzODgiIHdpZHRoPSIxMjAiIGhl
aWdodD0iNjAiIGZpbGwtb3BhY2l0eT0iMC41IiBmaWxsPSIjZTZkMGRlIiBzdHJva2U9IiMwMDAw
MDAiIHN0cm9rZS1vcGFjaXR5PSIwLjUiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+PGcgdHJhbnNm
b3JtPSJ0cmFuc2xhdGUoMjAwLDQxMSkiPjxzd2l0Y2g+PGZvcmVpZ25PYmplY3QgcG9pbnRlci1l
dmVudHM9ImFsbCIgd2lkdGg9IjExNiIgaGVpZ2h0PSIxNSIgcmVxdWlyZWRGZWF0dXJlcz0iaHR0
cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmVhdHVyZSNFeHRlbnNpYmlsaXR5Ij48ZGl2IHhtbG5z
PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzdHlsZT0iZGlzcGxheTogaW5saW5lLWJs
b2NrOyBmb250LXNpemU6IDEycHg7IGZvbnQtZmFtaWx5OiBIZWx2ZXRpY2E7IGNvbG9yOiByZ2Io
MCwgMCwgMCk7IGxpbmUtaGVpZ2h0OiAxLjI2OyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyB3aWR0aDog
MTE2cHg7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHRleHQtYWxpZ246IGNlbnRlcjsiPlRlc3RSdW5u
ZXJNYW5hZ2VyPC9kaXY+PC9mb3JlaWduT2JqZWN0Pjx0ZXh0IHg9IjU4IiB5PSIxNCIgZmlsbD0i
IzAwMDAwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMnB4IiBmb250LWZhbWls
eT0iSGVsdmV0aWNhIj5bTm90IHN1cHBvcnRlZCBieSB2aWV3ZXJdPC90ZXh0Pjwvc3dpdGNoPjwv
Zz48cGF0aCBkPSJNIDM5OCAyODggTCAyNjMgMzg0IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAw
MDAiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgcG9pbnRlci1ldmVudHM9Im5vbmUiLz48cGF0aCBk
PSJNIDI1OSAzODcgTCAyNjMgMzgwIEwgMjYzIDM4NCBMIDI2NyAzODYgWiIgZmlsbD0iIzAwMDAw
MCIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHBvaW50ZXItZXZlbnRz
PSJub25lIi8+PHJlY3QgeD0iNTc1IiB5PSI3NDgiIHdpZHRoPSIxMTAiIGhlaWdodD0iNDAiIGZp
bGw9Im5vbmUiIHN0cm9rZT0ibm9uZSIgcG9pbnRlci1ldmVudHM9Im5vbmUiLz48ZyBmaWxsPSIj
MDAwMDAwIiBmb250LWZhbWlseT0iSGVsdmV0aWNhIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250
LXNpemU9IjEycHgiPjx0ZXh0IHg9IjYzMCIgeT0iNzU4Ij5Ccm93c2VyIGNvbnRyb2w8L3RleHQ+
PHRleHQgeD0iNjMwIiB5PSI3NzIiPnByb3RvY29sPC90ZXh0Pjx0ZXh0IHg9IjYzMCIgeT0iNzg2
Ij4oZS5nLiBXZWJEcml2ZXIpPC90ZXh0PjwvZz48cmVjdCB4PSIyNTgiIHk9IjcwOCIgd2lkdGg9
IjgwIiBoZWlnaHQ9IjQwIiBmaWxsPSJub25lIiBzdHJva2U9Im5vbmUiIHBvaW50ZXItZXZlbnRz
PSJub25lIi8+PGcgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9IkhlbHZldGljYSIgdGV4dC1h
bmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMnB4Ij48dGV4dCB4PSIyOTgiIHk9IjczMiI+SFRU
UDwvdGV4dD48L2c+PHJlY3QgeD0iMTExIiB5PSI3MjgiIHdpZHRoPSI4MCIgaGVpZ2h0PSI0MCIg
ZmlsbD0ibm9uZSIgc3Ryb2tlPSJub25lIiBwb2ludGVyLWV2ZW50cz0ibm9uZSIvPjxnIGZpbGw9
IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJIZWx2ZXRpY2EiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZv
bnQtc2l6ZT0iMTJweCI+PHRleHQgeD0iMTUxIiB5PSI3NTIiPndlYnNvY2tldHM8L3RleHQ+PC9n
PjxyZWN0IHg9IjY1OCIgeT0iMjI4IiB3aWR0aD0iMTIwIiBoZWlnaHQ9IjYwIiBmaWxsPSIjZTZk
MGRlIiBzdHJva2U9IiMwMDAwMDAiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+PGcgdHJhbnNmb3Jt
PSJ0cmFuc2xhdGUoNjYwLDI1MSkiPjxzd2l0Y2g+PGZvcmVpZ25PYmplY3QgcG9pbnRlci1ldmVu
dHM9ImFsbCIgd2lkdGg9IjExNiIgaGVpZ2h0PSIxNSIgcmVxdWlyZWRGZWF0dXJlcz0iaHR0cDov
L3d3dy53My5vcmcvVFIvU1ZHMTEvZmVhdHVyZSNFeHRlbnNpYmlsaXR5Ij48ZGl2IHhtbG5zPSJo
dHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzdHlsZT0iZGlzcGxheTogaW5saW5lLWJsb2Nr
OyBmb250LXNpemU6IDEycHg7IGZvbnQtZmFtaWx5OiBIZWx2ZXRpY2E7IGNvbG9yOiByZ2IoMCwg
MCwgMCk7IGxpbmUtaGVpZ2h0OiAxLjI2OyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyB3aWR0aDogMTE2
cHg7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHRleHQtYWxpZ246IGNlbnRlcjsiPlRlc3RzIFF1ZXVl
PC9kaXY+PC9mb3JlaWduT2JqZWN0Pjx0ZXh0IHg9IjU4IiB5PSIxNCIgZmlsbD0iIzAwMDAwMCIg
dGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMnB4IiBmb250LWZhbWlseT0iSGVsdmV0
aWNhIj5bTm90IHN1cHBvcnRlZCBieSB2aWV3ZXJdPC90ZXh0Pjwvc3dpdGNoPjwvZz48cGF0aCBk
PSJNIDcxOCAxMDggTCA3MTggMjIyIiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAwMDAiIHN0cm9r
ZS1taXRlcmxpbWl0PSIxMCIgcG9pbnRlci1ldmVudHM9Im5vbmUiLz48cGF0aCBkPSJNIDcxOCAy
MjcgTCA3MTUgMjIwIEwgNzE4IDIyMiBMIDcyMiAyMjAgWiIgZmlsbD0iIzAwMDAwMCIgc3Ryb2tl
PSIjMDAwMDAwIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+
PHBhdGggZD0iTSA0MjggOTcwIEwgNDI4IDk3MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwMDAw
IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+PC9nPjwvc3Zn
PgpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5l
ci9kb2NzL2NvbmYucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVu
bmVyL2RvY3MvY29uZi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u
MzllNWNjNGYwZDIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93
M2MvdG9vbHMvd3B0cnVubmVyL2RvY3MvY29uZi5weQpAQCAtMCwwICsxLDI2NyBAQAorIyAtKi0g
Y29kaW5nOiB1dGYtOCAtKi0KKyMKKyMgd3B0cnVubmVyIGRvY3VtZW50YXRpb24gYnVpbGQgY29u
ZmlndXJhdGlvbiBmaWxlLCBjcmVhdGVkIGJ5CisjIHNwaGlueC1xdWlja3N0YXJ0IG9uIE1vbiBN
YXkgMTkgMTg6MTQ6MjAgMjAxNC4KKyMKKyMgVGhpcyBmaWxlIGlzIGV4ZWNmaWxlKClkIHdpdGgg
dGhlIGN1cnJlbnQgZGlyZWN0b3J5IHNldCB0byBpdHMKKyMgY29udGFpbmluZyBkaXIuCisjCisj
IE5vdGUgdGhhdCBub3QgYWxsIHBvc3NpYmxlIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGFyZSBwcmVz
ZW50IGluIHRoaXMKKyMgYXV0b2dlbmVyYXRlZCBmaWxlLgorIworIyBBbGwgY29uZmlndXJhdGlv
biB2YWx1ZXMgaGF2ZSBhIGRlZmF1bHQ7IHZhbHVlcyB0aGF0IGFyZSBjb21tZW50ZWQgb3V0Cisj
IHNlcnZlIHRvIHNob3cgdGhlIGRlZmF1bHQuCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworCisj
IElmIGV4dGVuc2lvbnMgKG9yIG1vZHVsZXMgdG8gZG9jdW1lbnQgd2l0aCBhdXRvZG9jKSBhcmUg
aW4gYW5vdGhlciBkaXJlY3RvcnksCisjIGFkZCB0aGVzZSBkaXJlY3RvcmllcyB0byBzeXMucGF0
aCBoZXJlLiBJZiB0aGUgZGlyZWN0b3J5IGlzIHJlbGF0aXZlIHRvIHRoZQorIyBkb2N1bWVudGF0
aW9uIHJvb3QsIHVzZSBvcy5wYXRoLmFic3BhdGggdG8gbWFrZSBpdCBhYnNvbHV0ZSwgbGlrZSBz
aG93biBoZXJlLgorI3N5cy5wYXRoLmluc2VydCgwLCBvcy5wYXRoLmFic3BhdGgoJy4nKSkKKwor
IyAtLSBHZW5lcmFsIGNvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgSWYgeW91ciBkb2N1bWVudGF0aW9uIG5lZWRzIGEgbWlu
aW1hbCBTcGhpbnggdmVyc2lvbiwgc3RhdGUgaXQgaGVyZS4KKyNuZWVkc19zcGhpbnggPSAnMS4w
JworCisjIEFkZCBhbnkgU3BoaW54IGV4dGVuc2lvbiBtb2R1bGUgbmFtZXMgaGVyZSwgYXMgc3Ry
aW5ncy4gVGhleSBjYW4gYmUKKyMgZXh0ZW5zaW9ucyBjb21pbmcgd2l0aCBTcGhpbnggKG5hbWVk
ICdzcGhpbnguZXh0LionKSBvciB5b3VyIGN1c3RvbQorIyBvbmVzLgorZXh0ZW5zaW9ucyA9IFsK
KyAgICAnc3BoaW54LmV4dC5hdXRvZG9jJywKKyAgICAnc3BoaW54LmV4dC5pbnRlcnNwaGlueCcs
CisgICAgJ3NwaGlueC5leHQudmlld2NvZGUnLAorXQorCisjIEFkZCBhbnkgcGF0aHMgdGhhdCBj
b250YWluIHRlbXBsYXRlcyBoZXJlLCByZWxhdGl2ZSB0byB0aGlzIGRpcmVjdG9yeS4KK3RlbXBs
YXRlc19wYXRoID0gWydfdGVtcGxhdGVzJ10KKworIyBUaGUgc3VmZml4IG9mIHNvdXJjZSBmaWxl
bmFtZXMuCitzb3VyY2Vfc3VmZml4ID0gJy5yc3QnCisKKyMgVGhlIGVuY29kaW5nIG9mIHNvdXJj
ZSBmaWxlcy4KKyNzb3VyY2VfZW5jb2RpbmcgPSAndXRmLTgtc2lnJworCisjIFRoZSBtYXN0ZXIg
dG9jdHJlZSBkb2N1bWVudC4KK21hc3Rlcl9kb2MgPSAnaW5kZXgnCisKKyMgR2VuZXJhbCBpbmZv
cm1hdGlvbiBhYm91dCB0aGUgcHJvamVjdC4KK3Byb2plY3QgPSB1J3dwdHJ1bm5lcicKK2NvcHly
aWdodCA9IHUnJworCisjIFRoZSB2ZXJzaW9uIGluZm8gZm9yIHRoZSBwcm9qZWN0IHlvdSdyZSBk
b2N1bWVudGluZywgYWN0cyBhcyByZXBsYWNlbWVudCBmb3IKKyMgfHZlcnNpb258IGFuZCB8cmVs
ZWFzZXwsIGFsc28gdXNlZCBpbiB2YXJpb3VzIG90aGVyIHBsYWNlcyB0aHJvdWdob3V0IHRoZQor
IyBidWlsdCBkb2N1bWVudHMuCisjCisjIFRoZSBzaG9ydCBYLlkgdmVyc2lvbi4KK3ZlcnNpb24g
PSAnMC4zJworIyBUaGUgZnVsbCB2ZXJzaW9uLCBpbmNsdWRpbmcgYWxwaGEvYmV0YS9yYyB0YWdz
LgorcmVsZWFzZSA9ICcwLjMnCisKKyMgVGhlIGxhbmd1YWdlIGZvciBjb250ZW50IGF1dG9nZW5l
cmF0ZWQgYnkgU3BoaW54LiBSZWZlciB0byBkb2N1bWVudGF0aW9uCisjIGZvciBhIGxpc3Qgb2Yg
c3VwcG9ydGVkIGxhbmd1YWdlcy4KKyNsYW5ndWFnZSA9IE5vbmUKKworIyBUaGVyZSBhcmUgdHdv
IG9wdGlvbnMgZm9yIHJlcGxhY2luZyB8dG9kYXl8OiBlaXRoZXIsIHlvdSBzZXQgdG9kYXkgdG8g
c29tZQorIyBub24tZmFsc2UgdmFsdWUsIHRoZW4gaXQgaXMgdXNlZDoKKyN0b2RheSA9ICcnCisj
IEVsc2UsIHRvZGF5X2ZtdCBpcyB1c2VkIGFzIHRoZSBmb3JtYXQgZm9yIGEgc3RyZnRpbWUgY2Fs
bC4KKyN0b2RheV9mbXQgPSAnJUIgJWQsICVZJworCisjIExpc3Qgb2YgcGF0dGVybnMsIHJlbGF0
aXZlIHRvIHNvdXJjZSBkaXJlY3RvcnksIHRoYXQgbWF0Y2ggZmlsZXMgYW5kCisjIGRpcmVjdG9y
aWVzIHRvIGlnbm9yZSB3aGVuIGxvb2tpbmcgZm9yIHNvdXJjZSBmaWxlcy4KK2V4Y2x1ZGVfcGF0
dGVybnMgPSBbJ19idWlsZCddCisKKyMgVGhlIHJlU1QgZGVmYXVsdCByb2xlICh1c2VkIGZvciB0
aGlzIG1hcmt1cDogYHRleHRgKSB0byB1c2UgZm9yIGFsbAorIyBkb2N1bWVudHMuCisjZGVmYXVs
dF9yb2xlID0gTm9uZQorCisjIElmIHRydWUsICcoKScgd2lsbCBiZSBhcHBlbmRlZCB0byA6ZnVu
YzogZXRjLiBjcm9zcy1yZWZlcmVuY2UgdGV4dC4KKyNhZGRfZnVuY3Rpb25fcGFyZW50aGVzZXMg
PSBUcnVlCisKKyMgSWYgdHJ1ZSwgdGhlIGN1cnJlbnQgbW9kdWxlIG5hbWUgd2lsbCBiZSBwcmVw
ZW5kZWQgdG8gYWxsIGRlc2NyaXB0aW9uCisjIHVuaXQgdGl0bGVzIChzdWNoIGFzIC4uIGZ1bmN0
aW9uOjopLgorI2FkZF9tb2R1bGVfbmFtZXMgPSBUcnVlCisKKyMgSWYgdHJ1ZSwgc2VjdGlvbmF1
dGhvciBhbmQgbW9kdWxlYXV0aG9yIGRpcmVjdGl2ZXMgd2lsbCBiZSBzaG93biBpbiB0aGUKKyMg
b3V0cHV0LiBUaGV5IGFyZSBpZ25vcmVkIGJ5IGRlZmF1bHQuCisjc2hvd19hdXRob3JzID0gRmFs
c2UKKworIyBUaGUgbmFtZSBvZiB0aGUgUHlnbWVudHMgKHN5bnRheCBoaWdobGlnaHRpbmcpIHN0
eWxlIHRvIHVzZS4KK3B5Z21lbnRzX3N0eWxlID0gJ3NwaGlueCcKKworIyBBIGxpc3Qgb2YgaWdu
b3JlZCBwcmVmaXhlcyBmb3IgbW9kdWxlIGluZGV4IHNvcnRpbmcuCisjbW9kaW5kZXhfY29tbW9u
X3ByZWZpeCA9IFtdCisKKyMgSWYgdHJ1ZSwga2VlcCB3YXJuaW5ncyBhcyAic3lzdGVtIG1lc3Nh
Z2UiIHBhcmFncmFwaHMgaW4gdGhlIGJ1aWx0IGRvY3VtZW50cy4KKyNrZWVwX3dhcm5pbmdzID0g
RmFsc2UKKworCisjIC0tIE9wdGlvbnMgZm9yIEhUTUwgb3V0cHV0IC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBUaGUgdGhlbWUgdG8gdXNlIGZvciBI
VE1MIGFuZCBIVE1MIEhlbHAgcGFnZXMuICBTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yCisjIGEg
bGlzdCBvZiBidWlsdGluIHRoZW1lcy4KK2h0bWxfdGhlbWUgPSAnZGVmYXVsdCcKKworIyBUaGVt
ZSBvcHRpb25zIGFyZSB0aGVtZS1zcGVjaWZpYyBhbmQgY3VzdG9taXplIHRoZSBsb29rIGFuZCBm
ZWVsIG9mIGEgdGhlbWUKKyMgZnVydGhlci4gIEZvciBhIGxpc3Qgb2Ygb3B0aW9ucyBhdmFpbGFi
bGUgZm9yIGVhY2ggdGhlbWUsIHNlZSB0aGUKKyMgZG9jdW1lbnRhdGlvbi4KKyNodG1sX3RoZW1l
X29wdGlvbnMgPSB7fQorCisjIEFkZCBhbnkgcGF0aHMgdGhhdCBjb250YWluIGN1c3RvbSB0aGVt
ZXMgaGVyZSwgcmVsYXRpdmUgdG8gdGhpcyBkaXJlY3RvcnkuCisjaHRtbF90aGVtZV9wYXRoID0g
W10KKworIyBUaGUgbmFtZSBmb3IgdGhpcyBzZXQgb2YgU3BoaW54IGRvY3VtZW50cy4gIElmIE5v
bmUsIGl0IGRlZmF1bHRzIHRvCisjICI8cHJvamVjdD4gdjxyZWxlYXNlPiBkb2N1bWVudGF0aW9u
Ii4KKyNodG1sX3RpdGxlID0gTm9uZQorCisjIEEgc2hvcnRlciB0aXRsZSBmb3IgdGhlIG5hdmln
YXRpb24gYmFyLiAgRGVmYXVsdCBpcyB0aGUgc2FtZSBhcyBodG1sX3RpdGxlLgorI2h0bWxfc2hv
cnRfdGl0bGUgPSBOb25lCisKKyMgVGhlIG5hbWUgb2YgYW4gaW1hZ2UgZmlsZSAocmVsYXRpdmUg
dG8gdGhpcyBkaXJlY3RvcnkpIHRvIHBsYWNlIGF0IHRoZSB0b3AKKyMgb2YgdGhlIHNpZGViYXIu
CisjaHRtbF9sb2dvID0gTm9uZQorCisjIFRoZSBuYW1lIG9mIGFuIGltYWdlIGZpbGUgKHdpdGhp
biB0aGUgc3RhdGljIHBhdGgpIHRvIHVzZSBhcyBmYXZpY29uIG9mIHRoZQorIyBkb2NzLiAgVGhp
cyBmaWxlIHNob3VsZCBiZSBhIFdpbmRvd3MgaWNvbiBmaWxlICguaWNvKSBiZWluZyAxNngxNiBv
ciAzMngzMgorIyBwaXhlbHMgbGFyZ2UuCisjaHRtbF9mYXZpY29uID0gTm9uZQorCisjIEFkZCBh
bnkgcGF0aHMgdGhhdCBjb250YWluIGN1c3RvbSBzdGF0aWMgZmlsZXMgKHN1Y2ggYXMgc3R5bGUg
c2hlZXRzKSBoZXJlLAorIyByZWxhdGl2ZSB0byB0aGlzIGRpcmVjdG9yeS4gVGhleSBhcmUgY29w
aWVkIGFmdGVyIHRoZSBidWlsdGluIHN0YXRpYyBmaWxlcywKKyMgc28gYSBmaWxlIG5hbWVkICJk
ZWZhdWx0LmNzcyIgd2lsbCBvdmVyd3JpdGUgdGhlIGJ1aWx0aW4gImRlZmF1bHQuY3NzIi4KK2h0
bWxfc3RhdGljX3BhdGggPSBbJ19zdGF0aWMnXQorCisjIEFkZCBhbnkgZXh0cmEgcGF0aHMgdGhh
dCBjb250YWluIGN1c3RvbSBmaWxlcyAoc3VjaCBhcyByb2JvdHMudHh0IG9yCisjIC5odGFjY2Vz
cykgaGVyZSwgcmVsYXRpdmUgdG8gdGhpcyBkaXJlY3RvcnkuIFRoZXNlIGZpbGVzIGFyZSBjb3Bp
ZWQKKyMgZGlyZWN0bHkgdG8gdGhlIHJvb3Qgb2YgdGhlIGRvY3VtZW50YXRpb24uCisjaHRtbF9l
eHRyYV9wYXRoID0gW10KKworIyBJZiBub3QgJycsIGEgJ0xhc3QgdXBkYXRlZCBvbjonIHRpbWVz
dGFtcCBpcyBpbnNlcnRlZCBhdCBldmVyeSBwYWdlIGJvdHRvbSwKKyMgdXNpbmcgdGhlIGdpdmVu
IHN0cmZ0aW1lIGZvcm1hdC4KKyNodG1sX2xhc3RfdXBkYXRlZF9mbXQgPSAnJWIgJWQsICVZJwor
CisjIElmIHRydWUsIFNtYXJ0eVBhbnRzIHdpbGwgYmUgdXNlZCB0byBjb252ZXJ0IHF1b3RlcyBh
bmQgZGFzaGVzIHRvCisjIHR5cG9ncmFwaGljYWxseSBjb3JyZWN0IGVudGl0aWVzLgorI2h0bWxf
dXNlX3NtYXJ0eXBhbnRzID0gVHJ1ZQorCisjIEN1c3RvbSBzaWRlYmFyIHRlbXBsYXRlcywgbWFw
cyBkb2N1bWVudCBuYW1lcyB0byB0ZW1wbGF0ZSBuYW1lcy4KKyNodG1sX3NpZGViYXJzID0ge30K
KworIyBBZGRpdGlvbmFsIHRlbXBsYXRlcyB0aGF0IHNob3VsZCBiZSByZW5kZXJlZCB0byBwYWdl
cywgbWFwcyBwYWdlIG5hbWVzIHRvCisjIHRlbXBsYXRlIG5hbWVzLgorI2h0bWxfYWRkaXRpb25h
bF9wYWdlcyA9IHt9CisKKyMgSWYgZmFsc2UsIG5vIG1vZHVsZSBpbmRleCBpcyBnZW5lcmF0ZWQu
CisjaHRtbF9kb21haW5faW5kaWNlcyA9IFRydWUKKworIyBJZiBmYWxzZSwgbm8gaW5kZXggaXMg
Z2VuZXJhdGVkLgorI2h0bWxfdXNlX2luZGV4ID0gVHJ1ZQorCisjIElmIHRydWUsIHRoZSBpbmRl
eCBpcyBzcGxpdCBpbnRvIGluZGl2aWR1YWwgcGFnZXMgZm9yIGVhY2ggbGV0dGVyLgorI2h0bWxf
c3BsaXRfaW5kZXggPSBGYWxzZQorCisjIElmIHRydWUsIGxpbmtzIHRvIHRoZSByZVNUIHNvdXJj
ZXMgYXJlIGFkZGVkIHRvIHRoZSBwYWdlcy4KKyNodG1sX3Nob3dfc291cmNlbGluayA9IFRydWUK
KworIyBJZiB0cnVlLCAiQ3JlYXRlZCB1c2luZyBTcGhpbngiIGlzIHNob3duIGluIHRoZSBIVE1M
IGZvb3Rlci4gRGVmYXVsdCBpcyBUcnVlLgorI2h0bWxfc2hvd19zcGhpbnggPSBUcnVlCisKKyMg
SWYgdHJ1ZSwgIihDKSBDb3B5cmlnaHQgLi4uIiBpcyBzaG93biBpbiB0aGUgSFRNTCBmb290ZXIu
IERlZmF1bHQgaXMgVHJ1ZS4KKyNodG1sX3Nob3dfY29weXJpZ2h0ID0gVHJ1ZQorCisjIElmIHRy
dWUsIGFuIE9wZW5TZWFyY2ggZGVzY3JpcHRpb24gZmlsZSB3aWxsIGJlIG91dHB1dCwgYW5kIGFs
bCBwYWdlcyB3aWxsCisjIGNvbnRhaW4gYSA8bGluaz4gdGFnIHJlZmVycmluZyB0byBpdC4gIFRo
ZSB2YWx1ZSBvZiB0aGlzIG9wdGlvbiBtdXN0IGJlIHRoZQorIyBiYXNlIFVSTCBmcm9tIHdoaWNo
IHRoZSBmaW5pc2hlZCBIVE1MIGlzIHNlcnZlZC4KKyNodG1sX3VzZV9vcGVuc2VhcmNoID0gJycK
KworIyBUaGlzIGlzIHRoZSBmaWxlIG5hbWUgc3VmZml4IGZvciBIVE1MIGZpbGVzIChlLmcuICIu
eGh0bWwiKS4KKyNodG1sX2ZpbGVfc3VmZml4ID0gTm9uZQorCisjIE91dHB1dCBmaWxlIGJhc2Ug
bmFtZSBmb3IgSFRNTCBoZWxwIGJ1aWxkZXIuCitodG1saGVscF9iYXNlbmFtZSA9ICd3cHRydW5u
ZXJkb2MnCisKKworIyAtLSBPcHRpb25zIGZvciBMYVRlWCBvdXRwdXQgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2xhdGV4X2VsZW1lbnRzID0geworIyBU
aGUgcGFwZXIgc2l6ZSAoJ2xldHRlcnBhcGVyJyBvciAnYTRwYXBlcicpLgorIydwYXBlcnNpemUn
OiAnbGV0dGVycGFwZXInLAorCisjIFRoZSBmb250IHNpemUgKCcxMHB0JywgJzExcHQnIG9yICcx
MnB0JykuCisjJ3BvaW50c2l6ZSc6ICcxMHB0JywKKworIyBBZGRpdGlvbmFsIHN0dWZmIGZvciB0
aGUgTGFUZVggcHJlYW1ibGUuCisjJ3ByZWFtYmxlJzogJycsCit9CisKKyMgR3JvdXBpbmcgdGhl
IGRvY3VtZW50IHRyZWUgaW50byBMYVRlWCBmaWxlcy4gTGlzdCBvZiB0dXBsZXMKKyMgKHNvdXJj
ZSBzdGFydCBmaWxlLCB0YXJnZXQgbmFtZSwgdGl0bGUsCisjICBhdXRob3IsIGRvY3VtZW50Y2xh
c3MgW2hvd3RvLCBtYW51YWwsIG9yIG93biBjbGFzc10pLgorbGF0ZXhfZG9jdW1lbnRzID0gWwor
ICAoJ2luZGV4JywgJ3dwdHJ1bm5lci50ZXgnLCB1J3dwdHJ1bm5lciBEb2N1bWVudGF0aW9uJywK
KyAgIHUnSmFtZXMgR3JhaGFtJywgJ21hbnVhbCcpLAorXQorCisjIFRoZSBuYW1lIG9mIGFuIGlt
YWdlIGZpbGUgKHJlbGF0aXZlIHRvIHRoaXMgZGlyZWN0b3J5KSB0byBwbGFjZSBhdCB0aGUgdG9w
IG9mCisjIHRoZSB0aXRsZSBwYWdlLgorI2xhdGV4X2xvZ28gPSBOb25lCisKKyMgRm9yICJtYW51
YWwiIGRvY3VtZW50cywgaWYgdGhpcyBpcyB0cnVlLCB0aGVuIHRvcGxldmVsIGhlYWRpbmdzIGFy
ZSBwYXJ0cywKKyMgbm90IGNoYXB0ZXJzLgorI2xhdGV4X3VzZV9wYXJ0cyA9IEZhbHNlCisKKyMg
SWYgdHJ1ZSwgc2hvdyBwYWdlIHJlZmVyZW5jZXMgYWZ0ZXIgaW50ZXJuYWwgbGlua3MuCisjbGF0
ZXhfc2hvd19wYWdlcmVmcyA9IEZhbHNlCisKKyMgSWYgdHJ1ZSwgc2hvdyBVUkwgYWRkcmVzc2Vz
IGFmdGVyIGV4dGVybmFsIGxpbmtzLgorI2xhdGV4X3Nob3dfdXJscyA9IEZhbHNlCisKKyMgRG9j
dW1lbnRzIHRvIGFwcGVuZCBhcyBhbiBhcHBlbmRpeCB0byBhbGwgbWFudWFscy4KKyNsYXRleF9h
cHBlbmRpY2VzID0gW10KKworIyBJZiBmYWxzZSwgbm8gbW9kdWxlIGluZGV4IGlzIGdlbmVyYXRl
ZC4KKyNsYXRleF9kb21haW5faW5kaWNlcyA9IFRydWUKKworCisjIC0tIE9wdGlvbnMgZm9yIG1h
bnVhbCBwYWdlIG91dHB1dCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KworIyBPbmUgZW50cnkgcGVyIG1hbnVhbCBwYWdlLiBMaXN0IG9mIHR1cGxlcworIyAoc291cmNl
IHN0YXJ0IGZpbGUsIG5hbWUsIGRlc2NyaXB0aW9uLCBhdXRob3JzLCBtYW51YWwgc2VjdGlvbiku
CittYW5fcGFnZXMgPSBbCisgICAgKCdpbmRleCcsICd3cHRydW5uZXInLCB1J3dwdHJ1bm5lciBE
b2N1bWVudGF0aW9uJywKKyAgICAgW3UnSmFtZXMgR3JhaGFtJ10sIDEpCitdCisKKyMgSWYgdHJ1
ZSwgc2hvdyBVUkwgYWRkcmVzc2VzIGFmdGVyIGV4dGVybmFsIGxpbmtzLgorI21hbl9zaG93X3Vy
bHMgPSBGYWxzZQorCisKKyMgLS0gT3B0aW9ucyBmb3IgVGV4aW5mbyBvdXRwdXQgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIEdyb3VwaW5nIHRoZSBkb2N1
bWVudCB0cmVlIGludG8gVGV4aW5mbyBmaWxlcy4gTGlzdCBvZiB0dXBsZXMKKyMgKHNvdXJjZSBz
dGFydCBmaWxlLCB0YXJnZXQgbmFtZSwgdGl0bGUsIGF1dGhvciwKKyMgIGRpciBtZW51IGVudHJ5
LCBkZXNjcmlwdGlvbiwgY2F0ZWdvcnkpCit0ZXhpbmZvX2RvY3VtZW50cyA9IFsKKyAgKCdpbmRl
eCcsICd3cHRydW5uZXInLCB1J3dwdHJ1bm5lciBEb2N1bWVudGF0aW9uJywKKyAgIHUnSmFtZXMg
R3JhaGFtJywgJ3dwdHJ1bm5lcicsICdPbmUgbGluZSBkZXNjcmlwdGlvbiBvZiBwcm9qZWN0Lics
CisgICAnTWlzY2VsbGFuZW91cycpLAorXQorCisjIERvY3VtZW50cyB0byBhcHBlbmQgYXMgYW4g
YXBwZW5kaXggdG8gYWxsIG1hbnVhbHMuCisjdGV4aW5mb19hcHBlbmRpY2VzID0gW10KKworIyBJ
ZiBmYWxzZSwgbm8gbW9kdWxlIGluZGV4IGlzIGdlbmVyYXRlZC4KKyN0ZXhpbmZvX2RvbWFpbl9p
bmRpY2VzID0gVHJ1ZQorCisjIEhvdyB0byBkaXNwbGF5IFVSTCBhZGRyZXNzZXM6ICdmb290bm90
ZScsICdubycsIG9yICdpbmxpbmUnLgorI3RleGluZm9fc2hvd191cmxzID0gJ2Zvb3Rub3RlJwor
CisjIElmIHRydWUsIGRvIG5vdCBnZW5lcmF0ZSBhIEBkZXRhaWxtZW51IGluIHRoZSAiVG9wIiBu
b2RlJ3MgbWVudS4KKyN0ZXhpbmZvX25vX2RldGFpbG1lbnUgPSBGYWxzZQorCisKKyMgRXhhbXBs
ZSBjb25maWd1cmF0aW9uIGZvciBpbnRlcnNwaGlueDogcmVmZXIgdG8gdGhlIFB5dGhvbiBzdGFu
ZGFyZCBsaWJyYXJ5LgoraW50ZXJzcGhpbnhfbWFwcGluZyA9IHsncHl0aG9uJzogKCdodHRwOi8v
ZG9jcy5weXRob24ub3JnLycsIE5vbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAnbW96bG9n
JzogKCdodHRwOi8vbW96YmFzZS5yZWFkdGhlZG9jcy5vcmcvZW4vbGF0ZXN0LycsIE5vbmUpfQpk
aWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci9k
b2NzL2Rlc2lnbi5yc3QgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVu
bmVyL2RvY3MvZGVzaWduLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MC4uYmYxMDhhMDA4N2QKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRl
ZC93M2MvdG9vbHMvd3B0cnVubmVyL2RvY3MvZGVzaWduLnJzdApAQCAtMCwwICsxLDEwNiBAQAor
d3B0cnVubmVyIERlc2lnbgorPT09PT09PT09PT09PT09PQorCitUaGUgZGVzaWduIG9mIHdwdHJ1
bm5lciBpcyBpbnRlbmRlZCB0byBtZWV0IHRoZSBmb2xsb3dpbmcKK3JlcXVpcmVtZW50czoKKwor
ICogUG9zc2libGUgdG8gcnVuIHRlc3RzIGZyb20gVzNDIHdlYi1wbGF0Zm9ybS10ZXN0cy4KKwor
ICogVGVzdHMgc2hvdWxkIGJlIHJ1biBhcyBmYXN0IGFzIHBvc3NpYmxlLiBJbiBwYXJ0aWN1bGFy
IGl0IHNob3VsZAorICAgbm90IGJlIG5lY2Vzc2FyeSB0byByZXN0YXJ0IHRoZSBicm93c2VyIGJl
dHdlZW4gdGVzdHMsIG9yIHNpbWlsYXIuCisKKyAqIEFzIGZhciBhcyBwb3NzaWJsZSwgdGhlIHRl
c3RzIHNob3VsZCBydW4gaW4gYSAibm9ybWFsIiBicm93c2VyIGFuZAorICAgYnJvd3NpbmcgY29u
dGV4dC4gSW4gcGFydGljdWxhciBtYW55IHRlc3RzIGFzc3VtZSB0aGF0IHRoZXkgYXJlCisgICBy
dW5uaW5nIGluIGEgdG9wLWxldmVsIGJyb3dzaW5nIGNvbnRleHQsIHNvIHdlIG11c3QgYXZvaWQg
dGhlIHVzZQorICAgb2YgYW4gYGBpZnJhbWVgYCB0ZXN0IGNvbnRhaW5lci4KKworICogSXQgbXVz
dCBiZSBwb3NzaWJsZSB0byBkZWFsIHdpdGggYWxsIGtpbmRzIG9mIGJlaGF2aW91ciBvZiB0aGUK
KyAgIGJyb3dzZXIgcnVuZGVyIHRlc3QsIGZvciBleGFtcGxlLCBjcmFzaGluZywgaGFuZ2luZywg
ZXRjLgorCisgKiBJdCBzaG91bGQgYmUgcG9zc2libGUgdG8gYWRkIHN1cHBvcnQgZm9yIG5ldyBw
bGF0Zm9ybXMgYW5kIGJyb3dzZXJzCisgICB3aXRoIG1pbmltYWwgY29kZSBjaGFuZ2VzLgorCisg
KiBJdCBtdXN0IGJlIHBvc3NpYmxlIHRvIHJ1biB0ZXN0cyBpbiBwYXJhbGxlbCB0byBmdXJ0aGVy
IGltcHJvdmUKKyAgIHBlcmZvcm1hbmNlLgorCisgKiBUZXN0IG91dHB1dCBtdXN0IGJlIGluIGEg
bWFjaGluZSByZWFkYWJsZSBmb3JtLgorCitBcmNoaXRlY3R1cmUKKy0tLS0tLS0tLS0tLQorCitJ
biBvcmRlciB0byBtZWV0IHRoZSBhYm92ZSByZXF1aXJlbWVudHMsIHdwdHJ1bm5lciBpcyBkZXNp
Z25lZCB0bworcHVzaCBhcyBtdWNoIG9mIHRoZSB0ZXN0IHNjaGVkdWxpbmcgYXMgcG9zc2libGUg
aW50byB0aGUgaGFybmVzcy4gVGhpcworYWxsb3dzIHRoZSBoYXJuZXNzIHRvIG1vbml0b3IgdGhl
IHN0YXRlIG9mIHRoZSBicm93c2VyIGFuZCBwZXJmb3JtCithcHByb3ByaWF0ZSBhY3Rpb24gaWYg
aXQgZ2V0cyBpbnRvIGFuIHVud2FudGVkIHN0YXRlIGUuZy4ga2lsbCB0aGUKK2Jyb3dzZXIgaWYg
aXQgYXBwZWFycyB0byBiZSBodW5nLgorCitUaGUgaGFybmVzcyB3aWxsIHR5cGljYWxseSBjb21t
dW5pY2F0ZSB3aXRoIHRoZSBicm93c2VyIHZpYSBzb21lIHJlbW90ZQorY29udHJvbCBwcm90b2Nv
bCBzdWNoIGFzIFdlYkRyaXZlci4gSG93ZXZlciBmb3IgYnJvd3NlcnMgd2hlcmUgbm8gc3VjaAor
cHJvdG9jb2wgaXMgc3VwcG9ydGVkLCBvdGhlciBpbXBsZW1lbnRhdGlvbiBzdHJhdGVnaWVzIGFy
ZSBwb3NzaWJsZSwKK3R5cGljYWxseSBhdCB0aGUgZXhwZW5zZSBvZiBzcGVlZC4KKworVGhlIG92
ZXJhbGwgYXJjaGl0ZWN0dXJlIG9mIHdwdHJ1bm5lciBpcyBzaG93biBpbiB0aGUgZGlhZ3JhbSBi
ZWxvdzoKKworLi4gaW1hZ2U6OiBhcmNoaXRlY3R1cmUuc3ZnCisKK1RoZSBtYWluIGVudHJ5IHBv
aW50IHRvIHRoZSBjb2RlIGlzIDpweTpmdW5jOmBydW5fdGVzdHNgIGluCitgYHdwdHJ1bm5lci5w
eWBgLiBUaGlzIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIHRoZSB0ZXN0CitlbnZpcm9u
bWVudCwgbG9hZGluZyB0aGUgbGlzdCBvZiB0ZXN0cyB0byBiZSBleGVjdXRlZCwgYW5kIGludm9r
aW5nCit0aGUgcmVtYWluZGVyIG9mIHRoZSBjb2RlIHRvIGFjdHVhbGx5IGV4ZWN1dGUgc29tZSB0
ZXN0cy4KKworVGhlIHRlc3QgZW52aXJvbm1lbnQgaXMgZW5jYXBzdWxhdGVkIGluIHRoZQorOnB5
OmNsYXNzOmBUZXN0RW52aXJvbm1lbnRgIGNsYXNzLiBUaGlzIGRlZmVycyB0byBjb2RlIGluCitg
YHdlYi1wbGF0Zm9ybS10ZXN0c2BgIHdoaWNoIGFjdHVhbGx5IHN0YXJ0cyB0aGUgcmVxdWlyZWQg
c2VydmVycyB0bworcnVuIHRoZSB0ZXN0cy4KKworVGhlIHNldCBvZiB0ZXN0cyB0byBydW4gaXMg
ZGVmaW5lZCBieSB0aGUKKzpweTpjbGFzczpgVGVzdExvYWRlcmAuIFRoaXMgaXMgY29uc3RydWN0
ZWQgd2l0aCBhCis6cHk6Y2xhc3M6YFRlc3RGaWx0ZXJgIChub3Qgc2hvd24pLCB3aGljaCB0YWtl
cyBhbnkgZmlsdGVyIGFyZ3VtZW50cworZnJvbSB0aGUgY29tbWFuZCBsaW5lIHRvIHJlc3RyaWN0
IHRoZSBzZXQgb2YgdGVzdHMgdGhhdCB3aWxsIGJlCitydW4uIFRoZSA6cHk6Y2xhc3M6YFRlc3RM
b2FkZXJgIHJlYWRzIGJvdGggdGhlIGBgd2ViLXBsYXRmb3JtLXRlc3RzYGAKK0pTT04gbWFuaWZl
c3QgYW5kIHRoZSBleHBlY3RhdGlvbiBkYXRhIHN0b3JlZCBpbiBpbmkgZmlsZXMgYW5kCitwcm9k
dWNlcyBhIDpweTpjbGFzczpgbXVsdGlwcm9jZXNzaW5nLlF1ZXVlYCBvZiB0ZXN0cyB0byBydW4s
IGFuZAordGhlaXIgZXhwZWN0ZWQgcmVzdWx0cy4KKworQWN0dWFsbHkgcnVubmluZyB0aGUgdGVz
dHMgaGFwcGVucyB0aHJvdWdoIHRoZQorOnB5OmNsYXNzOmBNYW5hZ2VyR3JvdXBgIG9iamVjdC4g
VGhpcyB0YWtlcyB0aGUgOnB5OmNsYXNzOmBRdWV1ZWAgb2YKK3Rlc3RzIHRvIGJlIHJ1biBhbmQg
c3RhcnRzIGEgOnB5OmNsYXNzOmB0ZXN0cnVubmVyLlRlc3RSdW5uZXJNYW5hZ2VyYCBmb3IgZWFj
aAoraW5zdGFuY2Ugb2YgdGhlIGJyb3dzZXIgdW5kZXIgdGVzdCB0aGF0IHdpbGwgYmUgc3RhcnRl
ZC4gVGhlc2UKKzpweTpjbGFzczpgVGVzdFJ1bm5lck1hbmFnZXJgIGluc3RhbmNlcyBhcmUgZWFj
aCBzdGFydGVkIGluIHRoZWlyIG93bgordGhyZWFkLgorCitBIDpweTpjbGFzczpgVGVzdFJ1bm5l
ck1hbmFnZXJgIGNvb3JkaW5hdGVzIHN0YXJ0aW5nIHRoZSBwcm9kdWN0IHVuZGVyCit0ZXN0LCBh
bmQgb3V0cHV0dGluZyByZXN1bHRzIGZyb20gdGhlIHRlc3QuIEluIHRoZSBjYXNlIHRoYXQgdGhl
IHRlc3QKK2hhcyB0aW1lZCBvdXQgb3IgdGhlIGJyb3dzZXIgaGFzIGNyYXNoZWQsIGl0IGhhcyB0
byByZXN0YXJ0IHRoZQorYnJvd3NlciB0byBlbnN1cmUgdGhlIHRlc3QgcnVuIGNhbiBjb250aW51
ZS4gVGhlIGZ1bmN0aW9uYWxpdHkgZm9yCitpbml0aWFsaXNpbmcgdGhlIGJyb3dzZXIgdW5kZXIg
dGVzdCwgYW5kIHByb2JpbmcgaXRzIHN0YXRlCisoZS5nLiB3aGV0aGVyIHRoZSBwcm9jZXNzIGlz
IHN0aWxsIGFsaXZlKSBpcyBpbXBsZW1lbnRlZCB0aHJvdWdoIGEKKzpweTpjbGFzczpgQnJvd3Nl
cmAgb2JqZWN0LiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGNsYXNzIG11c3QgYmUKK3Byb3Zp
ZGVkIGZvciBlYWNoIHByb2R1Y3QgdGhhdCBpcyBzdXBwb3J0ZWQuCisKK1RoZSBmdW5jdGlvbmFs
aXR5IGZvciBhY3R1YWxseSBydW5uaW5nIHRoZSB0ZXN0cyBpcyBwcm92aWRlZCBieSBhCis6cHk6
Y2xhc3M6YFRlc3RSdW5uZXJgIG9iamVjdC4gOnB5OmNsYXNzOmBUZXN0UnVubmVyYCBpbnN0YW5j
ZXMgYXJlCitydW4gaW4gdGhlaXIgb3duIGNoaWxkIHByb2Nlc3MgY3JlYXRlZCB3aXRoIHRoZQor
OnB5Om1vZDpgbXVsdGlwcm9jZXNzaW5nYCBtb2R1bGUuIFRoaXMgYWxsb3dzIHRoZW0gdG8gcnVu
IGNvbmN1cnJlbnRseQorYW5kIHRvIGJlIGtpbGxlZCBhbmQgcmVzdGFydGVkIGFzIHJlcXVpcmVk
LiBDb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlCis6cHk6Y2xhc3M6YFRlc3RSdW5uZXJNYW5hZ2Vy
YCBhbmQgdGhlIDpweTpjbGFzczpgVGVzdFJ1bm5lcmAgaXMKK3Byb3ZpZGVkIGJ5IGEgcGFpciBv
ZiBxdWV1ZXMsIG9uZSBmb3Igc2VuZGluZyBtZXNzYWdlcyBpbiBlYWNoCitkaXJlY3Rpb24uIElu
IHBhcnRpY3VsYXIgdGVzdCByZXN1bHRzIGFyZSBzZW50IGZyb20gdGhlCis6cHk6Y2xhc3M6YFRl
c3RSdW5uZXJgIHRvIHRoZSA6cHk6Y2xhc3M6YFRlc3RSdW5uZXJNYW5hZ2VyYCB1c2luZyBvbmUK
K29mIHRoZXNlIHF1ZXVlcy4KKworVGhlIDpweTpjbGFzczpgVGVzdFJ1bm5lcmAgb2JqZWN0IGlz
IGdlbmVyaWMgaW4gdGhhdCB0aGUgc2FtZQorOnB5OmNsYXNzOmBUZXN0UnVubmVyYCBpcyB1c2Vk
IHJlZ2FyZGxlc3Mgb2YgdGhlIHByb2R1Y3QgdW5kZXIKK3Rlc3QuIEhvd2V2ZXIgdGhlIGRldGFp
bHMgb2YgaG93IHRvIHJ1biB0aGUgdGVzdCBtYXkgdmFyeSBncmVhdGx5IHdpdGgKK3RoZSBwcm9k
dWN0IHNpbmNlIGRpZmZlcmVudCBwcm9kdWN0cyBzdXBwb3J0IGRpZmZlcmVudCByZW1vdGUgY29u
dHJvbAorcHJvdG9jb2xzIChvciBub25lIGF0IGFsbCkuIFRoZXNlIHByb3RvY29sLXNwZWNpZmlj
IHBhcnRzIGFyZSBwbGFjZWQKK2luIHRoZSA6cHk6Y2xhc3M6YEV4ZWN1dG9yYCBvYmplY3QuIFRo
ZXJlIGlzIHR5cGljYWxseSBhIGRpZmZlcmVudAorOnB5OmNsYXNzOmBFeGVjdXRvcmAgY2xhc3Mg
Zm9yIGVhY2ggY29tYmluYXRpb24gb2YgY29udHJvbCBwcm90b2NvbAorYW5kIHRlc3QgdHlwZS4g
VGhlIDpweTpjbGFzczpgVGVzdFJ1bm5lcmAgaXMgcmVzcG9uc2libGUgZm9yIHB1bGxpbmcKK2Vh
Y2ggdGVzdCBvZmYgdGhlIDpweTpjbGFzczpgUXVldWVgIG9mIHRlc3RzIGFuZCBwYXNzaW5nIGl0
IGRvd24gdG8KK3RoZSA6cHk6Y2xhc3M6YEV4ZWN1dG9yYC4KKworVGhlIGV4ZWN1dG9yIG9mdGVu
IHJlcXVpcmVzIGFjY2VzcyB0byBkZXRhaWxzIG9mIHRoZSBwYXJ0aWN1bGFyCiticm93c2VyIGlu
c3RhbmNlIHRoYXQgaXQgaXMgdGVzdGluZyBzbyB0aGF0IGl0IGtub3dzIGUuZy4gd2hpY2ggcG9y
dAordG8gY29ubmVjdCB0byB0byBzZW5kIGNvbW1hbmRzIHRvIHRoZSBicm93c2VyLiBUaGVzZSBk
ZXRhaWxzIGFyZQorZW5jYXBzdWxhdGVkIGluIHRoZSA6cHk6Y2xhc3M6YEV4ZWN1dG9yQnJvd3Nl
cmAgY2xhc3MuCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMv
d3B0cnVubmVyL2RvY3MvZXhwZWN0YXRpb24ucnN0IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQv
dzNjL3Rvb2xzL3dwdHJ1bm5lci9kb2NzL2V4cGVjdGF0aW9uLnJzdApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNmEwYzc3Njg0YTMKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL2RvY3MvZXhwZWN0YXRp
b24ucnN0CkBAIC0wLDAgKzEsMjQ4IEBACitFeHBlY3RhdGlvbiBEYXRhCis9PT09PT09PT09PT09
PT09CisKK0ludHJvZHVjdGlvbgorLS0tLS0tLS0tLS0tCisKK0ZvciB1c2UgaW4gY29udGludW91
cyBpbnRlZ3JhdGlvbiBzeXN0ZW1zLCBhbmQgb3RoZXIgc2NlbmFyaW9zIHdoZXJlCityZWdyZXNz
aW9uIHRyYWNraW5nIGlzIHJlcXVpcmVkLCB3cHRydW5uZXIgc3VwcG9ydHMgc3RvcmluZyBhbmQK
K2xvYWRpbmcgdGhlIGV4cGVjdGVkIHJlc3VsdCBvZiBlYWNoIHRlc3QgaW4gYSB0ZXN0IHJ1bi4g
VHlwaWNhbGx5Cit0aGVzZSBleHBlY3RlZCByZXN1bHRzIHdpbGwgaW5pdGlhbGx5IGJlIGdlbmVy
YXRlZCBieSBydW5uaW5nIHRoZQordGVzdHN1aXRlIGluIGEgYmFzZWxpbmUgYnVpbGQuIFRoZXkg
bWF5IHRoZW4gYmUgZWRpdGVkIGJ5IGh1bWFucyBhcworbmV3IGZlYXR1cmVzIGFyZSBhZGRlZCB0
byB0aGUgcHJvZHVjdCB0aGF0IGNoYW5nZSB0aGUgZXhwZWN0ZWQKK3Jlc3VsdHMuIFRoZSBleHBl
Y3RlZCByZXN1bHRzIG1heSBhbHNvIHZhcnkgZm9yIGEgc2luZ2xlIHByb2R1Y3QKK2RlcGVuZGlu
ZyBvbiB0aGUgcGxhdGZvcm0gb24gd2hpY2ggaXQgaXMgcnVuLiBUaGVyZWZvcmUsIHRoZSByYXcK
K3N0cnVjdHVyZWQgbG9nIGRhdGEgaXMgbm90IGEgc3VpdGFibGUgZm9ybWF0IGZvciBzdG9yaW5n
IHRoZXNlCitmaWxlcy4gSW5zdGVhZCBzb21ldGhpbmcgaXMgcmVxdWlyZWQgdGhhdCBpczoKKwor
ICogSHVtYW4gcmVhZGFibGUKKworICogSHVtYW4gZWRpdGFibGUKKworICogTWFjaGluZSByZWFk
YWJsZSAvIHdyaXRhYmxlCisKKyAqIENhcGFibGUgb2Ygc3RvcmluZyB0ZXN0IGlkIC8gcmVzdWx0
IHBhaXJzCisKKyAqIFN1aXRhYmxlIGZvciBzdG9yaW5nIGluIGEgdmVyc2lvbiBjb250cm9sIHN5
c3RlbSAoaS5lLiB0ZXh0LWJhc2VkKQorCitUaGUgbmVlZCBmb3IgZGlmZmVyZW50IHJlc3VsdHMg
cGVyIHBsYXRmb3JtIG1lYW5zIGVpdGhlciBoYXZpbmcKK211bHRpcGxlIGV4cGVjdGF0aW9uIGZp
bGVzIGZvciBlYWNoIHBsYXRmb3JtLCBvciBoYXZpbmcgYSB3YXkgdG8KK2V4cHJlc3MgY29uZGl0
aW9uYWwgdmFsdWVzIHdpdGhpbiBhIGNlcnRhaW4gZmlsZS4gVGhlIGZvcm1lciB3b3VsZCBiZQor
cmF0aGVyIGN1bWJlcnNvbWUgZm9yIGh1bWFucyB1cGRhdGluZyB0aGUgZXhwZWN0YXRpb24gZmls
ZXMsIHNvIHRoZQorbGF0dGVyIGFwcHJvYWNoIGhhcyBiZWVuIGFkb3B0ZWQsIGxlYWRpbmcgdG8g
dGhlIHJlcXVpcmVtZW50OgorCisgKiBDYXBhYmxlIG9mIHN0b3JpbmcgcmVzdWx0IHZhbHVlcyB0
aGF0IGFyZSBjb25kaXRpb25hbCBvbiB0aGUgcGxhdGZvcm0uCisKK1RoZXJlIGFyZSBmZXcgZXh0
YW50IGZvcm1hdHMgdGhhdCBtZWV0IHRoZXNlIHJlcXVpcmVtZW50cywgc28KK3dwdHJ1bm5lciB1
c2VzIGEgYmVzcG9rZSBgYGV4cGVjdGF0aW9uIG1hbmlmZXN0YGAgZm9ybWF0LCB3aGljaCBpcwor
Y2xvc2VseSBiYXNlZCBvbiB0aGUgc3RhbmRhcmQgYGBpbmlgYCBmb3JtYXQuCisKK0RpcmVjdG9y
eSBMYXlvdXQKKy0tLS0tLS0tLS0tLS0tLS0KKworRXhwZWN0YXRpb24gbWFuaWZlc3QgZmlsZXMg
bXVzdCBiZSBzdG9yZWQgdW5kZXIgdGhlIGBgbWV0YWRhdGFgYAorZGlyZWN0b3J5IHBhc3NlZCB0
byB0aGUgdGVzdCBydW5uZXIuIFRoZSBkaXJlY3RvcnkgbGF5b3V0IGZvbGxvd3MgdGhhdAorb2Yg
d2ViLXBsYXRmb3JtLXRlc3RzIHdpdGggZWFjaCB0ZXN0IHBhdGggaGF2aW5nIGEgY29ycmVzcG9u
ZGluZworbWFuaWZlc3QgZmlsZS4gVGVzdHMgdGhhdCBkaWZmZXIgb25seSBieSBxdWVyeSBzdHJp
bmcsIG9yIHJlZnRlc3RzCit3aXRoIHRoZSBzYW1lIHRlc3QgcGF0aCBidXQgZGlmZmVyZW50IHJl
ZiBwYXRocyBzaGFyZSB0aGUgc2FtZQorcmVmZXJlbmNlIGZpbGUuIFRoZSBmaWxlIG5hbWUgaXMg
dGFrZW4gZnJvbSB0aGUgbGFzdCAvLXNlcGFyYXRlZCBwYXJ0CitvZiB0aGUgcGF0aCwgc3VmZml4
ZWQgd2l0aCBgYC5pbmlgYC4KKworQXMgYW4gb3B0aW1pc2F0aW9uLCBmaWxlcyB3aGljaCBwcm9k
dWNlIG9ubHkgZGVmYXVsdCByZXN1bHRzCisoaS5lLiBgYFBBU1NgYCBvciBgYE9LYGApIGRvbid0
IHJlcXVpcmUgYSBjb3JyZXNwb25kaW5nIG1hbmlmZXN0IGZpbGUuCisKK0ZvciBleGFtcGxlIGEg
dGVzdCB3aXRoIHVybDo6CisKKyAgL3NwZWMvc2VjdGlvbi9maWxlLmh0bWw/cXVlcnk9cGFyYW0K
Kword291bGQgaGF2ZSBhbiBleHBlY3RhdGlvbiBmaWxlIDo6CisKKyAgbWV0YWRhdGEvc3BlYy9z
ZWN0aW9uL2ZpbGUuaHRtbC5pbmkKKworCisuLiBfd3B0dXBkYXRlLWxhYmVsOgorCitHZW5lcmF0
aW5nIEV4cGVjdGF0aW9uIEZpbGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3dw
dHJ1bm5lciBwcm92aWRlcyB0aGUgdG9vbCBgYHdwdHVwZGF0ZWBgIHRvIGdlbmVyYXRlIGV4cGVj
dGF0aW9uCitmaWxlcyBmcm9tIHRoZSByZXN1bHRzIG9mIGEgc2V0IG9mIGJhc2VsaW5lIHRlc3Qg
cnVucy4gVGhlIGJhc2ljCitzeW50YXggZm9yIHRoaXMgaXM6OgorCisgIHdwdHVwZGF0ZSBbb3B0
aW9uc10gW2xvZ2ZpbGVdLi4uCisKK0VhY2ggYGBsb2dmaWxlYGAgaXMgYSBzdHJ1Y3R1cmVkIGxv
ZyBmaWxlIGZyb20gYSBwcmV2aW91cyBydW4uIFRoZXNlCitjYW4gYmUgZ2VuZXJhdGVkIGZyb20g
d3B0cnVubmVyIHVzaW5nIHRoZSBgYC0tbG9nLXJhd2BgIG9wdGlvbgorZS5nLiBgYC0tbG9nLXJh
dz1zdHJ1Y3R1cmVkLmxvZ2BgLiBUaGUgZGVmYXVsdCBiZWhhdmlvdXIgaXMgdG8gdXBkYXRlCith
bGwgdGhlIHRlc3QgZGF0YSBmb3IgdGhlIHBhcnRpY3VsYXIgY29tYmluYXRpb24gb2YgaGFyZHdh
cmUgYW5kIE9TCit1c2VkIGluIHRoZSBydW4gY29ycmVzcG9uZGluZyB0byB0aGUgbG9nIGRhdGEs
IHdoaWxzdCBsZWF2aW5nIGFueQorb3RoZXIgZXhwZWN0YXRpb25zIHVudG91Y2hlZC4KKword3B0
dXBkYXRlIHRha2VzIHNldmVyYWwgdXNlZnVsIG9wdGlvbnM6CisKK2BgLS1zeW5jYGAKKyAgUHVs
bCB0aGUgbGF0ZXN0IHZlcnNpb24gb2Ygd2ViLXBsYXRmb3JtLXRlc3RzIGZyb20gdGhlCisgIHVw
c3RyZWFtIHNwZWNpZmllZCBpbiB0aGUgY29uZmlnIGZpbGUuIElmIHRoaXMgaXMgc3BlY2lmaWVk
IGluCisgIGNvbWJpbmF0aW9uIHdpdGggbG9nZmlsZXMsIGl0IGlzIGFzc3VtZWQgdGhhdCB0aGUg
cmVzdWx0cyBpbiB0aGUgbG9nCisgIGZpbGVzIGFwcGx5IHRvIHRoZSBwb3N0LXVwZGF0ZSB0ZXN0
cy4KKworYGAtLW5vLWNoZWNrLWNsZWFuYGAKKyAgRG9uJ3QgYXR0ZW1wdCB0byBjaGVjayBpZiB0
aGUgd29ya2luZyBkaXJlY3RvcnkgaXMgY2xlYW4gYmVmb3JlCisgIGRvaW5nIHRoZSB1cGRhdGUg
KGFzc3VtaW5nIHRoYXQgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGlzIGEgZ2l0IG9yCisgIG1lcmN1
cmlhbCB0cmVlKS4KKworYGAtLXBhdGNoYGAKKyAgQ3JlYXRlIGEgYSBnaXQgY29tbWl0LCBvciBh
IG1xIHBhdGNoLCB3aXRoIHRoZSBjaGFuZ2VzIG1hZGUgYnkgd3B0dXBkYXRlLgorCitgYC0taWdu
b3JlLWV4aXN0aW5nYGAKKyAgT3ZlcndyaXRlIGFsbCB0aGUgZXhwZWN0YXRpb24gZGF0YSBmb3Ig
YW55IHRlc3RzIHRoYXQgaGF2ZSBhIHJlc3VsdAorICBpbiB0aGUgcGFzc2VkIGxvZyBmaWxlcywg
bm90IGp1c3QgZGF0YSBmb3IgdGhlIHNhbWUgcGxhdGZvcm0uCisKK0V4YW1wbGVzCit+fn5+fn5+
fgorCitVcGRhdGUgdGhlIGxvY2FsIGNvcHkgb2Ygd2ViLXBsYXRmb3JtLXRlc3RzIHdpdGhvdXQg
Y2hhbmdpbmcgdGhlCitleHBlY3RhdGlvbiBkYXRhIGFuZCBjb21taXQgKG9yIGNyZWF0ZSBhIG1x
IHBhdGNoIGZvcikgdGhlIHJlc3VsdDo6CisKKyAgd3B0dXBkYXRlIC0tcGF0Y2ggLS1zeW5jCisK
K1VwZGF0ZSBhbGwgdGhlIGV4cGVjdGF0aW9ucyBmcm9tIGEgc2V0IG9mIGNyb3NzLXBsYXRmb3Jt
IHRlc3QgcnVuczo6CisKKyAgd3B0dXBkYXRlIC0tbm8tY2hlY2stY2xlYW4gLS1wYXRjaCBvc3gu
bG9nIGxpbnV4LmxvZyB3aW5kb3dzLmxvZworCitBZGQgZXhwZWN0YXRpb24gZGF0YSBmb3Igc29t
ZSBuZXcgdGVzdHMgdGhhdCBhcmUgZXhwZWN0ZWQgdG8gYmUKK3BsYXRmb3JtLWluZGVwZW5kZW50
OjoKKworICB3cHR1cGRhdGUgLS1uby1jaGVjay1jbGVhbiAtLXBhdGNoIC0taWdub3JlLWV4aXN0
aW5nIHRlc3RzLmxvZworCitNYW5pZmVzdCBGb3JtYXQKKy0tLS0tLS0tLS0tLS0tLQorVGhlIGZv
cm1hdCBvZiB0aGUgbWFuaWZlc3QgZmlsZXMgaXMgYmFzZWQgb24gdGhlIGluaSBmb3JtYXQuIEZp
bGVzIGFyZQorZGl2aWRlZCBpbnRvIHNlY3Rpb25zLCBlYWNoIChhcGFydCBmcm9tIHRoZSByb290
IHNlY3Rpb24pIGhhdmluZyBhCitoZWFkaW5nIGVuY2xvc2VkIGluIHNxdWFyZSBicmFjZXMuIFdp
dGhpbiBlYWNoIHNlY3Rpb24gYXJlIGtleS12YWx1ZQorcGFpcnMuIFRoZXJlIGFyZSBzZXZlcmFs
IG5vdGFibGUgZGlmZmVyZW5jZXMgZnJvbSBzdGFuZGFyZCAuaW5pIGZpbGVzLAoraG93ZXZlcjoK
KworICogU2VjdGlvbnMgbWF5IGJlIGhpZXJhcmNoaWNhbGx5IG5lc3RlZCwgd2l0aCBzaWduaWZp
Y2FudCB3aGl0ZXNwYWNlCisgICBpbmRpY2F0aW5nIG5lc3RpbmcgZGVwdGguCisKKyAqIE9ubHkg
YGA6YGAgaXMgdmFsaWQgYXMgYSBrZXkvdmFsdWUgc2VwYXJhdG9yCisKK0Egc2ltcGxlIGV4YW1w
bGUgb2YgYSBtYW5pZmVzdCBmaWxlIGlzOjoKKworICByb290X2tleTogcm9vdF92YWx1ZQorCisg
IFtzZWN0aW9uXQorICAgIHNlY3Rpb25fa2V5OiBzZWN0aW9uX3ZhbHVlCisKKyAgICBbc3Vic2Vj
dGlvbl0KKyAgICAgICBzdWJzZWN0aW9uX2tleTogc3Vic2VjdGlvbl92YWx1ZQorCisgIFthbm90
aGVyX3NlY3Rpb25dCisgICAgYW5vdGhlcl9rZXk6IGFub3RoZXJfdmFsdWUKKworQ29uZGl0aW9u
YWwgVmFsdWVzCit+fn5+fn5+fn5+fn5+fn5+fn4KKworSW4gb3JkZXIgdG8gc3VwcG9ydCB2YWx1
ZXMgdGhhdCBkZXBlbmQgb24gc29tZSBleHRlcm5hbCBkYXRhLCB0aGUKK3JpZ2h0IGhhbmQgc2lk
ZSBvZiBhIGtleS92YWx1ZSBwYWlyIGNhbiB0YWtlIGEgc2V0IG9mIGNvbmRpdGlvbmFscworcmF0
aGVyIHRoYW4gYSBwbGFpbiB2YWx1ZS4gVGhlc2UgdmFsdWVzIGFyZSBwbGFjZWQgb24gYSBuZXcg
bGluZQorZm9sbG93aW5nIHRoZSBrZXksIHdpdGggc2lnbmlmaWNhbnQgaW5kZW50YXRpb24uIENv
bmRpdGlvbmFsIHZhbHVlcworYXJlIHByZWZpeGVkIHdpdGggYGBpZmBgIGFuZCB0ZXJtaW5hdGVk
IHdpdGggYSBjb2xvbiwgZm9yIGV4YW1wbGU6OgorCisgIGtleToKKyAgICBpZiBjb25kMTogdmFs
dWUxCisgICAgaWYgY29uZDI6IHZhbHVlMgorICAgIHZhbHVlMworCitJbiB0aGlzIGV4YW1wbGUs
IHRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggYGBrZXlgYCBpcyBkZXRlcm1pbmVkIGJ5CitmaXJz
dCBldmFsdWF0aW5nIGBgY29uZDFgYCBhZ2FpbnN0IGV4dGVybmFsIGRhdGEuIElmIHRoYXQgaXMg
dHJ1ZSwKK2Bga2V5YGAgaXMgYXNzaWduZWQgdGhlIHZhbHVlIGBgdmFsdWUxYGAsIG90aGVyd2lz
ZSBgYGNvbmQyYGAgaXMKK2V2YWx1YXRlZCBpbiB0aGUgc2FtZSB3YXkuIElmIGJvdGggYGBjb25k
MWBgIGFuZCBgYGNvbmQyYGAgYXJlIGZhbHNlLAordGhlIHVuY29uZGl0aW9uYWwgYGB2YWx1ZTNg
YCBpcyB1c2VkLgorCitDb25kaXRpb25zIHRoZW1zZWx2ZXMgdXNlIGEgUHl0aG9uLWxpa2UgZXhw
cmVzc2lvbiBzeW50YXguIE9wZXJhbmRzCitjYW4gZWl0aGVyIGJlIHZhcmlhYmxlcywgY29ycmVz
cG9uZGluZyB0byBkYXRhIHBhc3NlZCBpbiwgbnVtYmVycworKGludGVnZXIgb3IgZmxvYXRpbmcg
cG9pbnQ7IGV4cG9uZW50aWFsIG5vdGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQpIG9yCitxdW90ZS1k
ZWxpbWl0ZWQgc3RyaW5ncy4gRXF1YWxpdHkgaXMgdGVzdGVkIHVzaW5nIGBgPT1gYCBhbmQKK2lu
ZXF1YWxpdHkgYnkgYGAhPWBgLiBUaGUgb3BlcmF0b3JzIGBgYW5kYGAsIGBgb3JgYCBhbmQgYGBu
b3RgYCBhcmUKK3VzZWQgaW4gdGhlIGV4cGVjdGVkIHdheS4gUGFyZW50aGVzZXMgY2FuIGFsc28g
YmUgdXNlZCBmb3IKK2dyb3VwaW5nLiBGb3IgZXhhbXBsZTo6CisKKyAga2V5OgorICAgIGlmIChh
ID09IDIgb3IgYSA9PSAzKSBhbmQgYiA9PSAiYWJjIjogdmFsdWUxCisgICAgaWYgYSA9PSAxIG9y
IGIgIT0gImFiYyI6IHZhbHVlMgorICAgIHZhbHVlMworCitIZXJlIGBgYWBgIGFuZCBgYGJgYCBh
cmUgdmFyaWFibGVzLCB0aGUgdmFsdWUgb2Ygd2hpY2ggd2lsbCBiZQorc3VwcGxpZWQgd2hlbiB0
aGUgbWFuaWZlc3QgaXMgdXNlZC4KKworRXhwZWN0YXRpb24gTWFuaWZlc3RzCistLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworV2hlbiB1c2VkIGZvciBleHBlY3RhdGlvbiBkYXRhLCBtYW5pZmVzdHMg
aGF2ZSB0aGUgZm9sbG93aW5nIGZvcm1hdDoKKworICogQSBzZWN0aW9uIHBlciB0ZXN0IFVSTCBk
ZXNjcmliZWQgYnkgdGhlIG1hbmlmZXN0LCB3aXRoIHRoZSBzZWN0aW9uCisgICBoZWFkaW5nIGJl
aW5nIHRoZSBwYXJ0IG9mIHRoZSB0ZXN0IFVSTCBmb2xsb3dpbmcgdGhlIGxhc3QgYGAvYGAgaW4K
KyAgIHRoZSBwYXRoICh0aGlzIGFsbG93cyBtdWx0aXBsZSB0ZXN0cyBpbiBhIHNpbmdsZSBtYW5p
ZmVzdCBmaWxlIHdpdGgKKyAgIHRoZSBzYW1lIHBhdGggcGFydCBvZiB0aGUgVVJMLCBidXQgZGlm
ZmVyZW50IHF1ZXJ5IHBhcnRzKS4KKworICogQSBzdWJzZWN0aW9uIHBlciBzdWJ0ZXN0LCB3aXRo
IHRoZSBoZWFkaW5nIGJlaW5nIHRoZSB0aXRsZSBvZiB0aGUKKyAgIHN1YnRlc3QuCisKKyAqIEEg
a2V5IGBgdHlwZWBgIGluZGljYXRpbmcgdGhlIHRlc3QgdHlwZS4gVGhpcyB0YWtlcyB0aGUgdmFs
dWVzCisgICBgYHRlc3RoYXJuZXNzYGAgYW5kIGBgcmVmdGVzdGBgLgorCisgKiBGb3IgcmVmdGVz
dHMsIGtleXMgYGByZWZ0eXBlYGAgaW5kaWNhdGluZyB0aGUgcmVmZXJlbmNlIHR5cGUKKyAgIChg
YD09YGAgb3IgYGAhPWBgKSBhbmQgYGByZWZ1cmxgYCBpbmRpY2F0aW5nIHRoZSBVUkwgb2YgdGhl
CisgICByZWZlcmVuY2UuCisKKyAqIEEga2V5IGBgZXhwZWN0ZWRgYCBnaXZpbmcgdGhlIGV4cGVj
dGF0aW9uIHZhbHVlIG9mIGVhY2ggKHN1Yil0ZXN0LgorCisgKiBBIGtleSBgYGRpc2FibGVkYGAg
d2hpY2ggY2FuIGJlIHNldCB0byBhbnkgdmFsdWUgdG8gaW5kaWNhdGUgdGhhdAorICAgdGhlIChz
dWIpdGVzdCBpcyBkaXNhYmxlZCBhbmQgc2hvdWxkIGVpdGhlciBub3QgYmUgcnVuIChmb3IgdGVz
dHMpCisgICBvciB0aGF0IGl0cyByZXN1bHRzIHNob3VsZCBiZSBpZ25vcmVkIChzdWJ0ZXN0cyku
CisKKyAqIEEga2V5IGBgcmVzdGFydC1hZnRlcmBgIHdoaWNoIGNhbiBiZSBzZXQgdG8gYW55IHZh
bHVlIHRvIGluZGljYXRlIHRoYXQKKyAgIHRoZSBydW5uZXIgc2hvdWxkIHJlc3RhcnQgdGhlIGJy
b3dzZXIgYWZ0ZXIgcnVubmluZyB0aGlzIHRlc3QgKGUuZy4gdG8KKyAgIGNsZWFyIG91dCB1bndh
bnRlZCBzdGF0ZSkuCisKKyAqIFZhcmlhYmxlcyBgYGRlYnVnYGAsIGBgb3NgYCwgYGB2ZXJzaW9u
YGAsIGBgcHJvY2Vzc29yYGAgYW5kCisgICBgYGJpdHNgYCB0aGF0IGRlc2NyaWJlIHRoZSBjb25m
aWd1cmF0aW9uIG9mIHRoZSBicm93c2VyIHVuZGVyCisgICB0ZXN0LiBgYGRlYnVnYGAgaXMgYSBi
b29sZWFuIGluZGljYXRpbmcgd2hldGhlciBhIGJ1aWxkIGlzIGEgZGVidWcKKyAgIGJ1aWxkLiBg
YG9zYGAgaXMgYSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgb3BlcmF0aW5nIHN5c3RlbSwgYW5kCisg
ICBgYHZlcnNpb25gYCBhIHN0cmluZyBpbmRpY2F0aW5nIHRoZSBwYXJ0aWN1bGFyIHZlcnNpb24g
b2YgdGhhdAorICAgb3BlcmF0aW5nIHN5c3RlbS4gYGBwcm9jZXNzb3JgYCBpcyBhIHN0cmluZyBp
bmRpY2F0aW5nIHRoZQorICAgcHJvY2Vzc29yIGFyY2hpdGVjdHVyZSBhbmQgYGBiaXRzYGAgYW4g
aW50ZWdlciBpbmRpY2F0aW5nIHRoZQorICAgbnVtYmVyIG9mIGJpdHMuIFRoaXMgaW5mb3JtYXRp
b24gaXMgdHlwaWNhbGx5IHByb3ZpZGVkIGJ5CisgICA6cHk6bW9kOmBtb3ppbmZvYC4KKworICog
VG9wIGxldmVsIGtleXMgYXJlIHRha2VuIGFzIGRlZmF1bHRzIGZvciB0aGUgd2hvbGUgZmlsZS4g
U28sIGZvcgorICAgZXhhbXBsZSwgYSB0b3AgbGV2ZWwga2V5IHdpdGggYGBleHBlY3RlZDogRkFJ
TGBgIHdvdWxkIGluZGljYXRlCisgICB0aGF0IGFsbCB0ZXN0cyBhbmQgc3VidGVzdHMgaW4gdGhl
IGZpbGUgYXJlIGV4cGVjdGVkIHRvIGZhaWwsCisgICB1bmxlc3MgdGhleSBoYXZlIGFuIGBgZXhw
ZWN0ZWRgYCBrZXkgb2YgdGhlaXIgb3duLgorCitBbiBzaW1wbGUgZXhhbXBsZSBtYW5pZmVzdCBt
aWdodCBsb29rIGxpa2U6OgorCisgIFt0ZXN0Lmh0bWw/dmFyaWFudD1iYXNpY10KKyAgICB0eXBl
OiB0ZXN0aGFybmVzcworCisgICAgW1Rlc3Qgc29tZXRoaW5nIHVuc3VwcG9ydGVkXQorICAgICAg
IGV4cGVjdGVkOiBGQUlMCisKKyAgW3Rlc3QuaHRtbD92YXJpYW50PWJyb2tlbl0KKyAgICBleHBl
Y3RlZDogRVJST1IKKworICBbdGVzdC5odG1sP3ZhcmlhbnQ9dW5zdGFibGVdCisgICAgZGlzYWJs
ZWQ6IGh0dHA6Ly90ZXN0LmJ1Z3MuZXhhbXBsZS5vcmcvYnVncy8xMjM0NQorCitBIG1vcmUgY29t
cGxleCBtYW5pZmVzdCB3aXRoIGNvbmRpdGlvbmFsIHByb3BlcnRpZXMgbWlnaHQgYmU6OgorCisg
IFtjYW52YXNfdGVzdC5odG1sXQorICAgIGV4cGVjdGVkOgorICAgICAgaWYgb3MgPT0gIm9zeCI6
IEZBSUwKKyAgICAgIGlmIG9zID09ICJ3aW5kb3dzIiBhbmQgdmVyc2lvbiA9PSAiWFAiOiBGQUlM
CisgICAgICBQQVNTCisKK05vdGUgdGhhdCBgYFBBU1NgYCBpbiB0aGUgYWJvdmUgd29ya3MsIGJ1
dCBpcyB1bm5lY2Vzc2FyeTsgYGBQQVNTYGAKKyhvciBgYE9LYGApIGlzIGFsd2F5cyB0aGUgZGVm
YXVsdCBleHBlY3RhdGlvbiBmb3IgKHN1Yil0ZXN0cy4KZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRl
c3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvZG9jcy9pbmRleC5yc3QgYi9XZWJEcml2
ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL2RvY3MvaW5kZXgucnN0Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41MTQ3ZDNlMzFjMwotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvZG9j
cy9pbmRleC5yc3QKQEAgLTAsMCArMSwyNCBAQAorLi4gd3B0cnVubmVyIGRvY3VtZW50YXRpb24g
bWFzdGVyIGZpbGUsIGNyZWF0ZWQgYnkKKyAgIHNwaGlueC1xdWlja3N0YXJ0IG9uIE1vbiBNYXkg
MTkgMTg6MTQ6MjAgMjAxNC4KKyAgIFlvdSBjYW4gYWRhcHQgdGhpcyBmaWxlIGNvbXBsZXRlbHkg
dG8geW91ciBsaWtpbmcsIGJ1dCBpdCBzaG91bGQgYXQgbGVhc3QKKyAgIGNvbnRhaW4gdGhlIHJv
b3QgYHRvY3RyZWVgIGRpcmVjdGl2ZS4KKworV2VsY29tZSB0byB3cHRydW5uZXIncyBkb2N1bWVu
dGF0aW9uIQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDb250ZW50
czoKKworLi4gdG9jdHJlZTo6CisgICA6bWF4ZGVwdGg6IDIKKworICAgdXNhZ2UKKyAgIGV4cGVj
dGF0aW9uCisgICBkZXNpZ24KKworSW5kaWNlcyBhbmQgdGFibGVzCis9PT09PT09PT09PT09PT09
PT0KKworKiA6cmVmOmBnZW5pbmRleGAKKyogOnJlZjpgbW9kaW5kZXhgCisqIDpyZWY6YHNlYXJj
aGAKKwpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1
bm5lci9kb2NzL21ha2UuYmF0IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dw
dHJ1bm5lci9kb2NzL21ha2UuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi45NTljMTYxNWEyOAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9y
dGVkL3czYy90b29scy93cHRydW5uZXIvZG9jcy9tYWtlLmJhdApAQCAtMCwwICsxLDI0MiBAQAor
QEVDSE8gT0ZGDQorDQorUkVNIENvbW1hbmQgZmlsZSBmb3IgU3BoaW54IGRvY3VtZW50YXRpb24N
CisNCitpZiAiJVNQSElOWEJVSUxEJSIgPT0gIiIgKA0KKwlzZXQgU1BISU5YQlVJTEQ9c3BoaW54
LWJ1aWxkDQorKQ0KK3NldCBCVUlMRERJUj1fYnVpbGQNCitzZXQgQUxMU1BISU5YT1BUUz0tZCAl
QlVJTERESVIlL2RvY3RyZWVzICVTUEhJTlhPUFRTJSAuDQorc2V0IEkxOE5TUEhJTlhPUFRTPSVT
UEhJTlhPUFRTJSAuDQoraWYgTk9UICIlUEFQRVIlIiA9PSAiIiAoDQorCXNldCBBTExTUEhJTlhP
UFRTPS1EIGxhdGV4X3BhcGVyX3NpemU9JVBBUEVSJSAlQUxMU1BISU5YT1BUUyUNCisJc2V0IEkx
OE5TUEhJTlhPUFRTPS1EIGxhdGV4X3BhcGVyX3NpemU9JVBBUEVSJSAlSTE4TlNQSElOWE9QVFMl
DQorKQ0KKw0KK2lmICIlMSIgPT0gIiIgZ290byBoZWxwDQorDQoraWYgIiUxIiA9PSAiaGVscCIg
KA0KKwk6aGVscA0KKwllY2hvLlBsZWFzZSB1c2UgYG1ha2UgXjx0YXJnZXRePmAgd2hlcmUgXjx0
YXJnZXRePiBpcyBvbmUgb2YNCisJZWNoby4gIGh0bWwgICAgICAgdG8gbWFrZSBzdGFuZGFsb25l
IEhUTUwgZmlsZXMNCisJZWNoby4gIGRpcmh0bWwgICAgdG8gbWFrZSBIVE1MIGZpbGVzIG5hbWVk
IGluZGV4Lmh0bWwgaW4gZGlyZWN0b3JpZXMNCisJZWNoby4gIHNpbmdsZWh0bWwgdG8gbWFrZSBh
IHNpbmdsZSBsYXJnZSBIVE1MIGZpbGUNCisJZWNoby4gIHBpY2tsZSAgICAgdG8gbWFrZSBwaWNr
bGUgZmlsZXMNCisJZWNoby4gIGpzb24gICAgICAgdG8gbWFrZSBKU09OIGZpbGVzDQorCWVjaG8u
ICBodG1saGVscCAgIHRvIG1ha2UgSFRNTCBmaWxlcyBhbmQgYSBIVE1MIGhlbHAgcHJvamVjdA0K
KwllY2hvLiAgcXRoZWxwICAgICB0byBtYWtlIEhUTUwgZmlsZXMgYW5kIGEgcXRoZWxwIHByb2pl
Y3QNCisJZWNoby4gIGRldmhlbHAgICAgdG8gbWFrZSBIVE1MIGZpbGVzIGFuZCBhIERldmhlbHAg
cHJvamVjdA0KKwllY2hvLiAgZXB1YiAgICAgICB0byBtYWtlIGFuIGVwdWINCisJZWNoby4gIGxh
dGV4ICAgICAgdG8gbWFrZSBMYVRlWCBmaWxlcywgeW91IGNhbiBzZXQgUEFQRVI9YTQgb3IgUEFQ
RVI9bGV0dGVyDQorCWVjaG8uICB0ZXh0ICAgICAgIHRvIG1ha2UgdGV4dCBmaWxlcw0KKwllY2hv
LiAgbWFuICAgICAgICB0byBtYWtlIG1hbnVhbCBwYWdlcw0KKwllY2hvLiAgdGV4aW5mbyAgICB0
byBtYWtlIFRleGluZm8gZmlsZXMNCisJZWNoby4gIGdldHRleHQgICAgdG8gbWFrZSBQTyBtZXNz
YWdlIGNhdGFsb2dzDQorCWVjaG8uICBjaGFuZ2VzICAgIHRvIG1ha2UgYW4gb3ZlcnZpZXcgb3Zl
ciBhbGwgY2hhbmdlZC9hZGRlZC9kZXByZWNhdGVkIGl0ZW1zDQorCWVjaG8uICB4bWwgICAgICAg
IHRvIG1ha2UgRG9jdXRpbHMtbmF0aXZlIFhNTCBmaWxlcw0KKwllY2hvLiAgcHNldWRveG1sICB0
byBtYWtlIHBzZXVkb3htbC1YTUwgZmlsZXMgZm9yIGRpc3BsYXkgcHVycG9zZXMNCisJZWNoby4g
IGxpbmtjaGVjayAgdG8gY2hlY2sgYWxsIGV4dGVybmFsIGxpbmtzIGZvciBpbnRlZ3JpdHkNCisJ
ZWNoby4gIGRvY3Rlc3QgICAgdG8gcnVuIGFsbCBkb2N0ZXN0cyBlbWJlZGRlZCBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBpZiBlbmFibGVkDQorCWdvdG8gZW5kDQorKQ0KKw0KK2lmICIlMSIgPT0gImNs
ZWFuIiAoDQorCWZvciAvZCAlJWkgaW4gKCVCVUlMRERJUiVcKikgZG8gcm1kaXIgL3EgL3MgJSVp
DQorCWRlbCAvcSAvcyAlQlVJTERESVIlXCoNCisJZ290byBlbmQNCispDQorDQorDQorJVNQSElO
WEJVSUxEJSAyPiBudWwNCitpZiBlcnJvcmxldmVsIDkwMDkgKA0KKwllY2hvLg0KKwllY2hvLlRo
ZSAnc3BoaW54LWJ1aWxkJyBjb21tYW5kIHdhcyBub3QgZm91bmQuIE1ha2Ugc3VyZSB5b3UgaGF2
ZSBTcGhpbngNCisJZWNoby5pbnN0YWxsZWQsIHRoZW4gc2V0IHRoZSBTUEhJTlhCVUlMRCBlbnZp
cm9ubWVudCB2YXJpYWJsZSB0byBwb2ludA0KKwllY2hvLnRvIHRoZSBmdWxsIHBhdGggb2YgdGhl
ICdzcGhpbngtYnVpbGQnIGV4ZWN1dGFibGUuIEFsdGVybmF0aXZlbHkgeW91DQorCWVjaG8ubWF5
IGFkZCB0aGUgU3BoaW54IGRpcmVjdG9yeSB0byBQQVRILg0KKwllY2hvLg0KKwllY2hvLklmIHlv
dSBkb24ndCBoYXZlIFNwaGlueCBpbnN0YWxsZWQsIGdyYWIgaXQgZnJvbQ0KKwllY2hvLmh0dHA6
Ly9zcGhpbngtZG9jLm9yZy8NCisJZXhpdCAvYiAxDQorKQ0KKw0KK2lmICIlMSIgPT0gImh0bWwi
ICgNCisJJVNQSElOWEJVSUxEJSAtYiBodG1sICVBTExTUEhJTlhPUFRTJSAlQlVJTERESVIlL2h0
bWwNCisJaWYgZXJyb3JsZXZlbCAxIGV4aXQgL2IgMQ0KKwllY2hvLg0KKwllY2hvLkJ1aWxkIGZp
bmlzaGVkLiBUaGUgSFRNTCBwYWdlcyBhcmUgaW4gJUJVSUxERElSJS9odG1sLg0KKwlnb3RvIGVu
ZA0KKykNCisNCitpZiAiJTEiID09ICJkaXJodG1sIiAoDQorCSVTUEhJTlhCVUlMRCUgLWIgZGly
aHRtbCAlQUxMU1BISU5YT1BUUyUgJUJVSUxERElSJS9kaXJodG1sDQorCWlmIGVycm9ybGV2ZWwg
MSBleGl0IC9iIDENCisJZWNoby4NCisJZWNoby5CdWlsZCBmaW5pc2hlZC4gVGhlIEhUTUwgcGFn
ZXMgYXJlIGluICVCVUlMRERJUiUvZGlyaHRtbC4NCisJZ290byBlbmQNCispDQorDQoraWYgIiUx
IiA9PSAic2luZ2xlaHRtbCIgKA0KKwklU1BISU5YQlVJTEQlIC1iIHNpbmdsZWh0bWwgJUFMTFNQ
SElOWE9QVFMlICVCVUlMRERJUiUvc2luZ2xlaHRtbA0KKwlpZiBlcnJvcmxldmVsIDEgZXhpdCAv
YiAxDQorCWVjaG8uDQorCWVjaG8uQnVpbGQgZmluaXNoZWQuIFRoZSBIVE1MIHBhZ2VzIGFyZSBp
biAlQlVJTERESVIlL3NpbmdsZWh0bWwuDQorCWdvdG8gZW5kDQorKQ0KKw0KK2lmICIlMSIgPT0g
InBpY2tsZSIgKA0KKwklU1BISU5YQlVJTEQlIC1iIHBpY2tsZSAlQUxMU1BISU5YT1BUUyUgJUJV
SUxERElSJS9waWNrbGUNCisJaWYgZXJyb3JsZXZlbCAxIGV4aXQgL2IgMQ0KKwllY2hvLg0KKwll
Y2hvLkJ1aWxkIGZpbmlzaGVkOyBub3cgeW91IGNhbiBwcm9jZXNzIHRoZSBwaWNrbGUgZmlsZXMu
DQorCWdvdG8gZW5kDQorKQ0KKw0KK2lmICIlMSIgPT0gImpzb24iICgNCisJJVNQSElOWEJVSUxE
JSAtYiBqc29uICVBTExTUEhJTlhPUFRTJSAlQlVJTERESVIlL2pzb24NCisJaWYgZXJyb3JsZXZl
bCAxIGV4aXQgL2IgMQ0KKwllY2hvLg0KKwllY2hvLkJ1aWxkIGZpbmlzaGVkOyBub3cgeW91IGNh
biBwcm9jZXNzIHRoZSBKU09OIGZpbGVzLg0KKwlnb3RvIGVuZA0KKykNCisNCitpZiAiJTEiID09
ICJodG1saGVscCIgKA0KKwklU1BISU5YQlVJTEQlIC1iIGh0bWxoZWxwICVBTExTUEhJTlhPUFRT
JSAlQlVJTERESVIlL2h0bWxoZWxwDQorCWlmIGVycm9ybGV2ZWwgMSBleGl0IC9iIDENCisJZWNo
by4NCisJZWNoby5CdWlsZCBmaW5pc2hlZDsgbm93IHlvdSBjYW4gcnVuIEhUTUwgSGVscCBXb3Jr
c2hvcCB3aXRoIHRoZSBeDQorLmhocCBwcm9qZWN0IGZpbGUgaW4gJUJVSUxERElSJS9odG1saGVs
cC4NCisJZ290byBlbmQNCispDQorDQoraWYgIiUxIiA9PSAicXRoZWxwIiAoDQorCSVTUEhJTlhC
VUlMRCUgLWIgcXRoZWxwICVBTExTUEhJTlhPUFRTJSAlQlVJTERESVIlL3F0aGVscA0KKwlpZiBl
cnJvcmxldmVsIDEgZXhpdCAvYiAxDQorCWVjaG8uDQorCWVjaG8uQnVpbGQgZmluaXNoZWQ7IG5v
dyB5b3UgY2FuIHJ1biAicWNvbGxlY3Rpb25nZW5lcmF0b3IiIHdpdGggdGhlIF4NCisucWhjcCBw
cm9qZWN0IGZpbGUgaW4gJUJVSUxERElSJS9xdGhlbHAsIGxpa2UgdGhpczoNCisJZWNoby5ePiBx
Y29sbGVjdGlvbmdlbmVyYXRvciAlQlVJTERESVIlXHF0aGVscFx3cHRydW5uZXIucWhjcA0KKwll
Y2hvLlRvIHZpZXcgdGhlIGhlbHAgZmlsZToNCisJZWNoby5ePiBhc3Npc3RhbnQgLWNvbGxlY3Rp
b25GaWxlICVCVUlMRERJUiVccXRoZWxwXHdwdHJ1bm5lci5naGMNCisJZ290byBlbmQNCispDQor
DQoraWYgIiUxIiA9PSAiZGV2aGVscCIgKA0KKwklU1BISU5YQlVJTEQlIC1iIGRldmhlbHAgJUFM
TFNQSElOWE9QVFMlICVCVUlMRERJUiUvZGV2aGVscA0KKwlpZiBlcnJvcmxldmVsIDEgZXhpdCAv
YiAxDQorCWVjaG8uDQorCWVjaG8uQnVpbGQgZmluaXNoZWQuDQorCWdvdG8gZW5kDQorKQ0KKw0K
K2lmICIlMSIgPT0gImVwdWIiICgNCisJJVNQSElOWEJVSUxEJSAtYiBlcHViICVBTExTUEhJTlhP
UFRTJSAlQlVJTERESVIlL2VwdWINCisJaWYgZXJyb3JsZXZlbCAxIGV4aXQgL2IgMQ0KKwllY2hv
Lg0KKwllY2hvLkJ1aWxkIGZpbmlzaGVkLiBUaGUgZXB1YiBmaWxlIGlzIGluICVCVUlMRERJUiUv
ZXB1Yi4NCisJZ290byBlbmQNCispDQorDQoraWYgIiUxIiA9PSAibGF0ZXgiICgNCisJJVNQSElO
WEJVSUxEJSAtYiBsYXRleCAlQUxMU1BISU5YT1BUUyUgJUJVSUxERElSJS9sYXRleA0KKwlpZiBl
cnJvcmxldmVsIDEgZXhpdCAvYiAxDQorCWVjaG8uDQorCWVjaG8uQnVpbGQgZmluaXNoZWQ7IHRo
ZSBMYVRlWCBmaWxlcyBhcmUgaW4gJUJVSUxERElSJS9sYXRleC4NCisJZ290byBlbmQNCispDQor
DQoraWYgIiUxIiA9PSAibGF0ZXhwZGYiICgNCisJJVNQSElOWEJVSUxEJSAtYiBsYXRleCAlQUxM
U1BISU5YT1BUUyUgJUJVSUxERElSJS9sYXRleA0KKwljZCAlQlVJTERESVIlL2xhdGV4DQorCW1h
a2UgYWxsLXBkZg0KKwljZCAlQlVJTERESVIlLy4uDQorCWVjaG8uDQorCWVjaG8uQnVpbGQgZmlu
aXNoZWQ7IHRoZSBQREYgZmlsZXMgYXJlIGluICVCVUlMRERJUiUvbGF0ZXguDQorCWdvdG8gZW5k
DQorKQ0KKw0KK2lmICIlMSIgPT0gImxhdGV4cGRmamEiICgNCisJJVNQSElOWEJVSUxEJSAtYiBs
YXRleCAlQUxMU1BISU5YT1BUUyUgJUJVSUxERElSJS9sYXRleA0KKwljZCAlQlVJTERESVIlL2xh
dGV4DQorCW1ha2UgYWxsLXBkZi1qYQ0KKwljZCAlQlVJTERESVIlLy4uDQorCWVjaG8uDQorCWVj
aG8uQnVpbGQgZmluaXNoZWQ7IHRoZSBQREYgZmlsZXMgYXJlIGluICVCVUlMRERJUiUvbGF0ZXgu
DQorCWdvdG8gZW5kDQorKQ0KKw0KK2lmICIlMSIgPT0gInRleHQiICgNCisJJVNQSElOWEJVSUxE
JSAtYiB0ZXh0ICVBTExTUEhJTlhPUFRTJSAlQlVJTERESVIlL3RleHQNCisJaWYgZXJyb3JsZXZl
bCAxIGV4aXQgL2IgMQ0KKwllY2hvLg0KKwllY2hvLkJ1aWxkIGZpbmlzaGVkLiBUaGUgdGV4dCBm
aWxlcyBhcmUgaW4gJUJVSUxERElSJS90ZXh0Lg0KKwlnb3RvIGVuZA0KKykNCisNCitpZiAiJTEi
ID09ICJtYW4iICgNCisJJVNQSElOWEJVSUxEJSAtYiBtYW4gJUFMTFNQSElOWE9QVFMlICVCVUlM
RERJUiUvbWFuDQorCWlmIGVycm9ybGV2ZWwgMSBleGl0IC9iIDENCisJZWNoby4NCisJZWNoby5C
dWlsZCBmaW5pc2hlZC4gVGhlIG1hbnVhbCBwYWdlcyBhcmUgaW4gJUJVSUxERElSJS9tYW4uDQor
CWdvdG8gZW5kDQorKQ0KKw0KK2lmICIlMSIgPT0gInRleGluZm8iICgNCisJJVNQSElOWEJVSUxE
JSAtYiB0ZXhpbmZvICVBTExTUEhJTlhPUFRTJSAlQlVJTERESVIlL3RleGluZm8NCisJaWYgZXJy
b3JsZXZlbCAxIGV4aXQgL2IgMQ0KKwllY2hvLg0KKwllY2hvLkJ1aWxkIGZpbmlzaGVkLiBUaGUg
VGV4aW5mbyBmaWxlcyBhcmUgaW4gJUJVSUxERElSJS90ZXhpbmZvLg0KKwlnb3RvIGVuZA0KKykN
CisNCitpZiAiJTEiID09ICJnZXR0ZXh0IiAoDQorCSVTUEhJTlhCVUlMRCUgLWIgZ2V0dGV4dCAl
STE4TlNQSElOWE9QVFMlICVCVUlMRERJUiUvbG9jYWxlDQorCWlmIGVycm9ybGV2ZWwgMSBleGl0
IC9iIDENCisJZWNoby4NCisJZWNoby5CdWlsZCBmaW5pc2hlZC4gVGhlIG1lc3NhZ2UgY2F0YWxv
Z3MgYXJlIGluICVCVUlMRERJUiUvbG9jYWxlLg0KKwlnb3RvIGVuZA0KKykNCisNCitpZiAiJTEi
ID09ICJjaGFuZ2VzIiAoDQorCSVTUEhJTlhCVUlMRCUgLWIgY2hhbmdlcyAlQUxMU1BISU5YT1BU
UyUgJUJVSUxERElSJS9jaGFuZ2VzDQorCWlmIGVycm9ybGV2ZWwgMSBleGl0IC9iIDENCisJZWNo
by4NCisJZWNoby5UaGUgb3ZlcnZpZXcgZmlsZSBpcyBpbiAlQlVJTERESVIlL2NoYW5nZXMuDQor
CWdvdG8gZW5kDQorKQ0KKw0KK2lmICIlMSIgPT0gImxpbmtjaGVjayIgKA0KKwklU1BISU5YQlVJ
TEQlIC1iIGxpbmtjaGVjayAlQUxMU1BISU5YT1BUUyUgJUJVSUxERElSJS9saW5rY2hlY2sNCisJ
aWYgZXJyb3JsZXZlbCAxIGV4aXQgL2IgMQ0KKwllY2hvLg0KKwllY2hvLkxpbmsgY2hlY2sgY29t
cGxldGU7IGxvb2sgZm9yIGFueSBlcnJvcnMgaW4gdGhlIGFib3ZlIG91dHB1dCBeDQorb3IgaW4g
JUJVSUxERElSJS9saW5rY2hlY2svb3V0cHV0LnR4dC4NCisJZ290byBlbmQNCispDQorDQoraWYg
IiUxIiA9PSAiZG9jdGVzdCIgKA0KKwklU1BISU5YQlVJTEQlIC1iIGRvY3Rlc3QgJUFMTFNQSElO
WE9QVFMlICVCVUlMRERJUiUvZG9jdGVzdA0KKwlpZiBlcnJvcmxldmVsIDEgZXhpdCAvYiAxDQor
CWVjaG8uDQorCWVjaG8uVGVzdGluZyBvZiBkb2N0ZXN0cyBpbiB0aGUgc291cmNlcyBmaW5pc2hl
ZCwgbG9vayBhdCB0aGUgXg0KK3Jlc3VsdHMgaW4gJUJVSUxERElSJS9kb2N0ZXN0L291dHB1dC50
eHQuDQorCWdvdG8gZW5kDQorKQ0KKw0KK2lmICIlMSIgPT0gInhtbCIgKA0KKwklU1BISU5YQlVJ
TEQlIC1iIHhtbCAlQUxMU1BISU5YT1BUUyUgJUJVSUxERElSJS94bWwNCisJaWYgZXJyb3JsZXZl
bCAxIGV4aXQgL2IgMQ0KKwllY2hvLg0KKwllY2hvLkJ1aWxkIGZpbmlzaGVkLiBUaGUgWE1MIGZp
bGVzIGFyZSBpbiAlQlVJTERESVIlL3htbC4NCisJZ290byBlbmQNCispDQorDQoraWYgIiUxIiA9
PSAicHNldWRveG1sIiAoDQorCSVTUEhJTlhCVUlMRCUgLWIgcHNldWRveG1sICVBTExTUEhJTlhP
UFRTJSAlQlVJTERESVIlL3BzZXVkb3htbA0KKwlpZiBlcnJvcmxldmVsIDEgZXhpdCAvYiAxDQor
CWVjaG8uDQorCWVjaG8uQnVpbGQgZmluaXNoZWQuIFRoZSBwc2V1ZG8tWE1MIGZpbGVzIGFyZSBp
biAlQlVJTERESVIlL3BzZXVkb3htbC4NCisJZ290byBlbmQNCispDQorDQorOmVuZA0KZGlmZiAt
LWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvZG9jcy91
c2FnZS5yc3QgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL2Rv
Y3MvdXNhZ2UucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44ZTc0
YTQzMjBjOAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90
b29scy93cHRydW5uZXIvZG9jcy91c2FnZS5yc3QKQEAgLTAsMCArMSwyMzggQEAKK0dldHRpbmcg
U3RhcnRlZAorPT09PT09PT09PT09PT09CisKK0luc3RhbGxpbmcgd3B0cnVubmVyCistLS0tLS0t
LS0tLS0tLS0tLS0tLQorCitUaGUgZWFzaWVzdCB3YXkgdG8gaW5zdGFsbCB3cHRydW5uZXIgaXMg
aW50byBhIHZpcnR1YWxlbnYsIHVzaW5nIHBpcDo6CisKKyAgdmlydHVhbGVudiB3cHRydW5uZXIK
KyAgY2Qgd3B0cnVubmVyCisgIHNvdXJjZSBiaW4vYWN0aXZhdGUKKyAgcGlwIGluc3RhbGwgd3B0
cnVubmVyCisKK1RoaXMgd2lsbCBpbnN0YWxsIHRoZSBiYXNlIGRlcGVuZGVuY2llcyBmb3Igd3B0
cnVubmVyLCBidXQgbm90IGFueQorZXh0cmEgZGVwZW5kZW5jaWVzIHJlcXVpcmVkIHRvIHRlc3Qg
YWdhaW5zdCBzcGVjaWZpYyBicm93c2Vycy4gSW4KK29yZGVyIHRvIGRvIHRoaXMgeW91IG11c3Qg
dXNlIHVzZSB0aGUgZXh0cmEgcmVxdWlyZW1lbnRzIGZpbGVzIGluCitgYCRWSVJUVUFMX0VOVi9y
ZXF1aXJlbWVudHMvcmVxdWlyZW1lbnRzX2Jyb3dzZXIudHh0YGAuIEZvciBleGFtcGxlLAoraW4g
b3JkZXIgdG8gdGVzdCBhZ2FpbnN0IEZpcmVmb3ggeW91IHdvdWxkIGhhdmUgdG8gcnVuOjoKKwor
ICBwaXAgaW5zdGFsbCAtciByZXF1aXJlbWVudHMvcmVxdWlyZW1lbnRzX2ZpcmVmb3gudHh0CisK
K0lmIHlvdSBpbnRlbmQgdG8gd29yayBvbiB0aGUgY29kZSwgdGhlIGBgLWVgYCBvcHRpb24gdG8g
cGlwIHNob3VsZCBiZQordXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIGEgc291cmNlIGNoZWNrb3V0
IGkuZS4gaW5zaWRlIGEgdmlydHVhbAorZW52aXJvbm1lbnQgY3JlYXRlZCBhcyBhYm92ZTo6CisK
KyAgZ2l0IGNsb25lIGh0dHBzOi8vZ2l0aHViLmNvbS93M2Mvd3B0cnVubmVyLmdpdAorICBjZCB3
cHRydW5uZXIKKyAgcGlwIGluc3RhbGwgLWUgLi8KKworSW4gYWRkaXRpb24gdG8gdGhlIGRlcGVu
ZGVuY2llcyBpbnN0YWxsZWQgYnkgcGlwLCB3cHRydW5uZXIgcmVxdWlyZXMKK2EgY29weSBvZiB0
aGUgd2ViLXBsYXRmb3JtLXRlc3RzIHJlcG9zaXRvcnkuIFRoaXMgY2FuIGJlIGxvY2F0ZWQKK2Fu
eXdoZXJlIG9uIHRoZSBmaWxlc3lzdGVtLCBidXQgdGhlIGVhc2llc3Qgb3B0aW9uIGlzIHRvIHB1
dCBpdAordW5kZXIgdGhlIHNhbWUgcGFyZW50IGRpcmVjdG9yeSBhcyB0aGUgd3B0cnVubmVyIGNo
ZWNrb3V0OjoKKworICBnaXQgY2xvbmUgaHR0cHM6Ly9naXRodWIuY29tL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMuZ2l0CisKK0l0IGlzIGFsc28gbmVjZXNzYXJ5IHRvIGdlbmVyYXRlIGEgd2ViLXBs
YXRmb3JtLXRlc3RzIGBgTUFOSUZFU1QuanNvbmBgCitmaWxlLiBJdCdzIHJlY29tbWVuZGVkIHRv
IGFsc28gcHV0IHRoYXQgdW5kZXIgdGhlIHNhbWUgcGFyZW50IGRpcmVjdG9yeSBhcwordGhlIHdw
dHJ1bm5lciBjaGVja291dCwgaW4gYSBkaXJlY3RvcnkgbmFtZWQgYGBtZXRhYGA6OgorCisgIG1r
ZGlyIG1ldGEKKyAgY2Qgd2ViLXBsYXRmb3JtLXRlc3RzCisgIHB5dGhvbiBtYW5pZmVzdCAtLXBh
dGggLi4vbWV0YS9NQU5JRkVTVC5qc29uCisKK1RoZSBgYE1BTklGRVNULmpzb25gYCBmaWxlIG5l
ZWRzIHRvIGJlIHJlZ2VuZXJhdGVkIGVhY2ggdGltZSB0aGUKK3dlYi1wbGF0Zm9ybS10ZXN0cyBj
aGVja291dCBpcyB1cGRhdGVkLiBUbyBhaWQgd2l0aCB0aGUgdXBkYXRlIHByb2Nlc3MKK3RoZXJl
IGlzIGEgdG9vbCBjYWxsZWQgYGB3cHR1cGRhdGVgYCwgd2hpY2ggaXMgZGVzY3JpYmVkIGluCis6
cmVmOmB3cHR1cGRhdGUtbGFiZWxgLgorCitSdW5uaW5nIHRoZSBUZXN0cworLS0tLS0tLS0tLS0t
LS0tLS0KKworQSB0ZXN0IHJ1biBpcyBzdGFydGVkIHVzaW5nIHRoZSBgYHdwdHJ1bm5lcmBgIGNv
bW1hbmQuICBUaGUgY29tbWFuZAordGFrZXMgbXVsdGlwbGUgb3B0aW9ucywgb2Ygd2hpY2ggdGhl
IGZvbGxvd2luZyBhcmUgbW9zdCBzaWduaWZpY2FudDoKKworYGAtLXByb2R1Y3RgYCAoZGVmYXVs
dHMgdG8gYGZpcmVmb3hgKQorICBUaGUgcHJvZHVjdCB0byB0ZXN0IGFnYWluc3Q6IGBiMmdgLCBg
Y2hyb21lYCwgYGZpcmVmb3hgLCBvciBgc2Vydm9gLgorCitgYC0tYmluYXJ5YGAgKHJlcXVpcmVk
IGlmIHByb2R1Y3QgaXMgYGZpcmVmb3hgIG9yIGBzZXJ2b2ApCisgIFRoZSBwYXRoIHRvIGEgYmlu
YXJ5IGZpbGUgZm9yIHRoZSBwcm9kdWN0IChicm93c2VyKSB0byB0ZXN0IGFnYWluc3QuCisKK2Bg
LS13ZWJkcml2ZXItYmluYXJ5YGAgKHJlcXVpcmVkIGlmIHByb2R1Y3QgaXMgYGNocm9tZWApCisg
IFRoZSBwYXRoIHRvIGEgYCpkcml2ZXJgIGJpbmFyeTsgZS5nLiwgYSBgY2hyb21lZHJpdmVyYCBi
aW5hcnkuCisKK2BgLS1jZXJ0dXRpbC1iaW5hcnlgYCAocmVxdWlyZWQgaWYgcHJvZHVjdCBpcyBg
ZmlyZWZveGAgWyNdXykKKyAgVGhlIHBhdGggdG8gYSBgY2VydHV0aWxgIGJpbmFyeSAoZm9yIHRl
c3RzIHRoYXQgbXVzdCBiZSBydW4gb3ZlciBodHRwcykuCisKK2BgLS1tZXRhZGF0YWBgIChyZXF1
aXJlZCBvbmx5IHdoZW4gbm90IGB1c2luZyBkZWZhdWx0IHBhdGhzYF8pCisgIFRoZSBwYXRoIHRv
IGEgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGVzdCBtZXRhZGF0YS4gWyNdXworCitgYC0tdGVzdHNg
YCAocmVxdWlyZWQgb25seSB3aGVuIG5vdCBgdXNpbmcgZGVmYXVsdCBwYXRoc2BfKQorICBUaGUg
cGF0aCB0byBhIGRpcmVjdG9yeSBjb250YWluaW5nIGEgd2ViLXBsYXRmb3JtLXRlc3RzIGNoZWNr
b3V0LgorCitgYC0tcHJlZnMtcm9vdGBgIChyZXF1aXJlZCBvbmx5IHdoZW4gdGVzdGluZyBhIEZp
cmVmb3ggYmluYXJ5KQorICBUaGUgcGF0aCB0byBhIGRpcmVjdG9yeSBjb250YWluaW5nIEZpcmVm
b3ggdGVzdC1oYXJuZXNzIHByZWZlcmVuY2VzLiBbI11fCisKK2BgLS1jb25maWdgYCAoc2hvdWxk
IGRlZmF1bHQgdG8gYHdwdHJ1bm5lci5kZWZhdWx0LmluaWApCisgIFRoZSBwYXRoIHRvIHRoZSBj
b25maWcgKGluaSkgZmlsZS4KKworLi4gWyNdIFRoZSBgYC0tY2VydHV0aWwtYmluYXJ5YGAgb3B0
aW9uIGlzIHJlcXVpcmVkIHdoZW4gdGhlIHByb2R1Y3QgaXMKKyAgIGBgZmlyZWZveGBgIHVubGVz
cyBgYC0tc3NsLXR5cGU9bm9uZWBgIGlzIHNwZWNpZmllZC4KKworLi4gWyNdIFRoZSBgYC0tbWV0
YWRhdGFgYCBwYXRoIGlzIHRvIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnM6CisKKyAgKiBhIGBg
TUFOSUZFU1QuanNvbmBgIGZpbGUgKHRoZSB3ZWItcGxhdGZvcm0tdGVzdHMgZG9jdW1lbnRhdGlv
biBoYXMKKyAgICBpbnN0cnVjdGlvbnMgb24gZ2VuZXJhdGluZyB0aGlzIGZpbGUpCisgICogKG9w
dGlvbmFsbHkpIGFueSBleHBlY3RhdGlvbiBmaWxlcyAoc2VlIDpyZWY6YHdwdHVwZGF0ZS1sYWJl
bGApCisKKy4uIFsjXSBFeGFtcGxlIGBgLS1wcmVmcy1yb290YGAgdmFsdWU6IGBgfi9tb3ppbGxh
LWNlbnRyYWwvdGVzdGluZy9wcm9maWxlc2BgLgorCitUaGVyZSBhcmUgYWxzbyBhIHZhcmlldHkg
b2Ygb3RoZXIgY29tbWFuZC1saW5lIG9wdGlvbnMgYXZhaWxhYmxlOyB1c2UKK2BgLS1oZWxwYGAg
dG8gbGlzdCB0aGVtLgorCitUaGUgZm9sbG93aW5nIGV4YW1wbGVzIHNob3cgaG93IHRvIHN0YXJ0
IHdwdHJ1bm5lciB3aXRoIHZhcmlvdXMgb3B0aW9ucy4KKworLS0tLS0tLS0tLS0tLS0tLS0tCitT
dGFydGluZyB3cHRydW5uZXIKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZXhhbXBsZXMgYmVs
b3cgYXNzdW1lIHRoZSBmb2xsb3dpbmcgZGlyZWN0b3J5IGxheW91dCwKK3Rob3VnaCBubyBzcGVj
aWZpYyBmb2xkZXIgc3RydWN0dXJlIGlzIHJlcXVpcmVkOjoKKworICB+L3Rlc3R0d2Yvd3B0cnVu
bmVyICAgICAgICAgICMgd3B0cnVubmVyIGNoZWNrb3V0CisgIH4vdGVzdHR3Zi93ZWItcGxhdGZv
cm0tdGVzdHMgIyB3ZWItcGxhdGZvcm0tdGVzdHMgY2hlY2tvdXQKKyAgfi90ZXN0dHdmL21ldGEg
ICAgICAgICAgICAgICAjIG1ldGFkYXRhCisKK1RvIHRlc3QgYSBGaXJlZm94IE5pZ2h0bHkgYnVp
bGQgaW4gYW4gT1MgWCBlbnZpcm9ubWVudCwgeW91IG1pZ2h0IHN0YXJ0Cit3cHRydW5uZXIgdXNp
bmcgc29tZXRoaW5nIHNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZyBleGFtcGxlOjoKKworICB3cHRy
dW5uZXIgLS1tZXRhZGF0YT1+L3Rlc3R0d2YvbWV0YS8gLS10ZXN0cz1+L3Rlc3R0d2Yvd2ViLXBs
YXRmb3JtLXRlc3RzLyBcCisgICAgLS1iaW5hcnk9fi9tb3ppbGxhLWNlbnRyYWwvb2JqLXg4Nl82
NC1hcHBsZS1kYXJ3aW4xNC4zLjAvZGlzdC9OaWdodGx5LmFwcC9Db250ZW50cy9NYWNPUy9maXJl
Zm94IFwKKyAgICAtLWNlcnR1dGlsLWJpbmFyeT1+L21vemlsbGEtY2VudHJhbC9vYmoteDg2XzY0
LWFwcGxlLWRhcndpbjE0LjMuMC9zZWN1cml0eS9uc3MvY21kL2NlcnR1dGlsL2NlcnR1dGlsIFwK
KyAgICAtLXByZWZzLXJvb3Q9fi9tb3ppbGxhLWNlbnRyYWwvdGVzdGluZy9wcm9maWxlcworCisK
K0FuZCB0byB0ZXN0IGEgQ2hyb21pdW0gYnVpbGQgaW4gYW4gT1MgWCBlbnZpcm9ubWVudCwgeW91
IG1pZ2h0IHN0YXJ0Cit3cHRydW5uZXIgdXNpbmcgc29tZXRoaW5nIHNpbWlsYXIgdG8gdGhlIGZv
bGxvd2luZyBleGFtcGxlOjoKKworICB3cHRydW5uZXIgLS1tZXRhZGF0YT1+L3Rlc3R0d2YvbWV0
YS8gLS10ZXN0cz1+L3Rlc3R0d2Yvd2ViLXBsYXRmb3JtLXRlc3RzLyBcCisgICAgLS1iaW5hcnk9
fi9jaHJvbWl1bS9zcmMvb3V0L1JlbGVhc2UvQ2hyb21pdW0uYXBwL0NvbnRlbnRzL01hY09TL0No
cm9taXVtIFwKKyAgICAtLXdlYmRyaXZlci1iaW5hcnk9L3Vzci9sb2NhbC9iaW4vY2hyb21lZHJp
dmVyIC0tcHJvZHVjdD1jaHJvbWUKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1J1bm5pbmcgdGVz
dCBzdWJzZXRzCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyByZXN0cmljdCBhIHRlc3QgcnVu
IGp1c3QgdG8gdGVzdHMgaW4gYSBwYXJ0aWN1bGFyIHdlYi1wbGF0Zm9ybS10ZXN0cworc3ViZGly
ZWN0b3J5LCBzcGVjaWZ5IHRoZSBkaXJlY3RvcnkgbmFtZSBpbiB0aGUgcG9zaXRpb25hbCBhcmd1
bWVudHMgYWZ0ZXIKK3RoZSBvcHRpb25zOyBmb3IgZXhhbXBsZSwgcnVuIGp1c3QgdGhlIHRlc3Rz
IGluIHRoZSBgZG9tYCBzdWJkaXJlY3Rvcnk6OgorCisgIHdwdHJ1bm5lciAtLW1ldGFkYXRhPX4v
dGVzdHR3Zi9tZXRhIC0tdGVzdHM9fi90ZXN0dHdmL3dlYi1wbGF0Zm9ybS10ZXN0cy8gXAorICAg
IC0tYmluYXJ5PS9wYXRoL3RvL2ZpcmVmb3ggLS1jZXJ0dXRpbC1iaW5hcnk9L3BhdGgvdG8vY2Vy
dHV0aWwgXAorICAgIC0tcHJlZnMtcm9vdD0vcGF0aC90by90ZXN0aW5nL3Byb2ZpbGVzIFwKKyAg
ICBkb20KKworLS0tLS0tLS0tLS0tLS0tLS0tLQorUnVubmluZyBpbiBwYXJhbGxlbAorLS0tLS0t
LS0tLS0tLS0tLS0tLQorCitUbyBzcGVlZCB1cCB0aGUgdGVzdGluZyBwcm9jZXNzLCB1c2UgdGhl
IGBgLS1wcm9jZXNzZXNgYCBvcHRpb24gdG8gaGF2ZQord3B0cnVubmVyIHJ1biBtdWx0aXBsZSBi
cm93c2VyIGluc3RhbmNlcyBpbiBwYXJhbGxlbC4gRm9yIGV4YW1wbGUsIHRvCitoYXZlIHdwdHJ1
bm5lciBhdHRlbXB0IHRvIHJ1biB0ZXN0cyBhZ2FpbnN0IHdpdGggc2l4IGJyb3dzZXIgaW5zdGFu
Y2VzCitpbiBwYXJhbGxlbCwgc3BlY2lmeSBgYC0tcHJvY2Vzc2VzPTZgYC4gQnV0IG5vdGUgdGhh
dCBiZWhhdmlvdXIgaW4gdGhpcworbW9kZSBpcyBuZWNlc3NhcmlseSBsZXNzIGRldGVybWluaXN0
aWMgdGhhbiB3aXRoIGBgLS1wcm9jZXNzZXM9MWBgICh0aGUKK2RlZmF1bHQpLCBzbyB0aGVyZSBt
YXkgYmUgbW9yZSBub2lzZSBpbiB0aGUgdGVzdCByZXN1bHRzLgorCistLS0tLS0tLS0tLS0tLS0t
LS0tCitVc2luZyBkZWZhdWx0IHBhdGhzCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSAob3Ro
ZXJ3aXNlLXJlcXVpcmVkKSBgYC0tdGVzdHNgYCBhbmQgYGAtLW1ldGFkYXRhYGAgY29tbWFuZC1s
aW5lCitvcHRpb25zL2ZsYWdzIGJlIG9taXR0ZWQgaWYgYW55IGNvbmZpZ3VyYXRpb24gZmlsZSBp
cyBmb3VuZCB0aGF0Citjb250YWlucyBhIHNlY3Rpb24gc3BlY2lmeWluZyB0aGUgYGB0ZXN0c2Bg
IGFuZCBgYG1ldGFkYXRhYGAga2V5cy4KKworU2VlIHRoZSBgQ29uZmlndXJhdGlvbiBGaWxlYF8g
c2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dAorY29uZmlndXJhdGlvbiBmaWxlcywg
aW5jbHVkaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZWlyIGV4cGVjdGVkCitsb2NhdGlvbnMuCisK
K1RoZSBjb250ZW50IG9mIHRoZSBgYHdwdHJ1bm5lci5kZWZhdWx0LmluaWBgIGRlZmF1bHQgY29u
ZmlndXJhdGlvbiBmaWxlCittYWtlcyB3cHRydW5uZXIgbG9vayBmb3IgdGVzdHMgKHRoYXQgaXMs
IGEgd2ViLXBsYXRmb3JtLXRlc3RzIGNoZWNrb3V0KQorYXMgYSBzdWJkaXJlY3Rvcnkgb2YgdGhl
IGN1cnJlbnQgZGlyZWN0b3J5IG5hbWVkIGBgdGVzdHNgYCwgYW5kIGZvcgorbWV0YWRhdGEgZmls
ZXMgaW4gYSBzdWJkaXJlY3Rvcnkgb2YgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IG5hbWVkIGBgbWV0
YWBgLgorCitPdXRwdXQKKy0tLS0tLQorCit3cHRydW5uZXIgdXNlcyB0aGUgOnB5Om1vZDpgbW96
bG9nYCBwYWNrYWdlIGZvciBvdXRwdXQuIFRoaXMKK3N0cnVjdHVyZXMgZXZlbnRzIHN1Y2ggYXMg
dGVzdCByZXN1bHRzIG9yIGxvZyBtZXNzYWdlcyBhcyBKU09OIG9iamVjdHMKK3RoYXQgY2FuIHRo
ZW4gYmUgZmVkIHRvIG90aGVyIHRvb2xzIGZvciBpbnRlcnByZXRhdGlvbi4gTW9yZSBkZXRhaWxz
CithYm91dCB0aGUgbWVzc2FnZSBmb3JtYXQgYXJlIGdpdmVuIGluIHRoZQorOnB5Om1vZDpgbW96
bG9nYCBkb2N1bWVudGF0aW9uLgorCitCeSBkZWZhdWx0IHRoZSByYXcgSlNPTiBtZXNzYWdlcyBh
cmUgZHVtcGVkIHRvIHN0ZG91dC4gVGhpcyBpcworY29udmVuaWVudCBmb3IgcGlwaW5nIGludG8g
b3RoZXIgdG9vbHMsIGJ1dCBub3QgaWRlYWwgZm9yIGh1bWFucworcmVhZGluZyB0aGUgb3V0cHV0
LiA6cHk6bW9kOmBtb3psb2dgIGNvbWVzIHdpdGggc2V2ZXJhbCBvdGhlcgorZm9ybWF0dGVycywg
d2hpY2ggYXJlIGFjY2Vzc2libGUgdGhyb3VnaCBjb21tYW5kIGxpbmUgb3B0aW9ucy4gVGhlCitn
ZW5lcmFsIGZvcm1hdCBvZiB0aGVzZSBvcHRpb25zIGlzIGBgLS1sb2ctbmFtZT1kZXN0YGAsIHdo
ZXJlIGBgbmFtZWBgCitpcyB0aGUgbmFtZSBvZiB0aGUgZm9ybWF0IGFuZCBgYGRlc3RgYCBpcyBh
IHBhdGggdG8gYSBkZXN0aW5hdGlvbgorZmlsZSwgb3IgYGAtYGAgZm9yIHN0ZG91dC4gVGhlIHJh
dyBKU09OIGRhdGEgaXMgd3JpdHRlbiBieSB0aGUgYGByYXdgYAorZm9ybWF0dGVyIHNvLCB0aGUg
ZGVmYXVsdCBzZXR1cCBjb3JyZXNwb25kcyB0byBgYC0tbG9nLXJhdz0tYGAuCisKK0EgcmVhc29u
YWJsZSBvdXRwdXQgZm9ybWF0IGZvciBodW1hbnMgaXMgcHJvdmlkZWQgYXMgYGBtYWNoYGAuIFNv
IGluCitvcmRlciB0byBvdXRwdXQgdGhlIGZ1bGwgcmF3IGxvZyB0byBhIGZpbGUgYW5kIGEgaHVt
YW4tcmVhZGFibGUKK3N1bW1hcnkgdG8gc3Rkb3V0LCBvbmUgbWlnaHQgcGFzcyB0aGUgb3B0aW9u
czo6CisKKyAgLS1sb2ctcmF3PW91dHB1dC5sb2cgLS1sb2ctbWFjaD0tCisKK0NvbmZpZ3VyYXRp
b24gRmlsZQorLS0tLS0tLS0tLS0tLS0tLS0tCisKK3dwdHJ1bm5lciB1c2VzIGEgYGAuaW5pYGAg
ZmlsZSB0byBjb250cm9sIHNvbWUgY29uZmlndXJhdGlvbgorc2VjdGlvbnMuIFRoZSBmaWxlIGhh
cyB0aHJlZSBzZWN0aW9uczsgYGBbcHJvZHVjdHNdYGAsCitgYFttYW5pZmVzdDpkZWZhdWx0XWBg
IGFuZCBgYFt3ZWItcGxhdGZvcm0tdGVzdHNdYGAuCisKK2BgW3Byb2R1Y3RzXWBgIGlzIHVzZWQg
dG8KK2RlZmluZSB0aGUgc2V0IG9mIGF2YWlsYWJsZSBwcm9kdWN0cy4gQnkgZGVmYXVsdCB0aGlz
IHNlY3Rpb24gaXMgZW1wdHkKK3doaWNoIG1lYW5zIHRoYXQgYWxsIHRoZSBwcm9kdWN0cyBkaXN0
cmlidXRlZCB3aXRoIHdwdHJ1bm5lciBhcmUKK2VuYWJsZWQgKGFsdGhvdWdoIHRoZWlyIGRlcGVu
ZGVuY2llcyBtYXkgbm90IGJlIGluc3RhbGxlZCkuIFRoZSBzZXQKK29mIGVuYWJsZWQgcHJvZHVj
dHMgY2FuIGJlIHNldCBieSB1c2luZyB0aGUgcHJvZHVjdCBuYW1lIGFzIHRoZQora2V5LiBGb3Ig
YnVpbHQgaW4gcHJvZHVjdHMgdGhlIHZhbHVlIGlzIGVtcHR5LiBJdCBpcyBhbHNvIHBvc3NpYmxl
IHRvCitwcm92aWRlIHRoZSBwYXRoIHRvIGEgc2NyaXB0IGltcGxlbWVudGluZyB0aGUgYnJvd3Nl
ciBmdW5jdGlvbmFsaXR5CitlLmcuOjoKKworICBbcHJvZHVjdHNdCisgIGNocm9tZSA9CisgIG5l
dHNjYXBlNCA9IHBhdGgvdG8vbmV0c2NhcGUucHkKKworYGBbbWFuaWZlc3Q6ZGVmYXVsdF1gYCBz
cGVjaWZpZXMgdGhlIGRlZmF1bHQgcGF0aHMgZm9yIHRoZSB0ZXN0cyBhbmQgbWV0YWRhdGEsCity
ZWxhdGl2ZSB0byB0aGUgY29uZmlnIGZpbGUuIEZvciBleGFtcGxlOjoKKworICBbbWFuaWZlc3Q6
ZGVmYXVsdF0KKyAgdGVzdHMgPSB+L3Rlc3R0d2Yvd2ViLXBsYXRmb3JtLXRlc3RzCisgIG1ldGFk
YXRhID0gfi90ZXN0dHdmL21ldGEKKworCitgYFt3ZWItcGxhdGZvcm0tdGVzdHNdYGAgaXMgdXNl
ZCB0byBzZXQgdGhlIHByb3BlcnRpZXMgb2YgdGhlIHVwc3RyZWFtCityZXBvc2l0b3J5IHdoZW4g
dXBkYXRpbmcgdGhlIHBhdGhzLiBgYHJlbW90ZV91cmxgYCBzcGVjaWZpZXMgdGhlIGdpdAordXJs
IHRvIHB1bGwgZnJvbTsgYGBicmFuY2hgYCB0aGUgYnJhbmNoIHRvIHN5bmMgYWdhaW5zdCBhbmQK
K2Bgc3luY19wYXRoYGAgdGhlIGxvY2FsIHBhdGgsIHJlbGF0aXZlIHRvIHRoZSBjb25maWd1cmF0
aW9uIGZpbGUsIHRvCit1c2Ugd2hlbiBjaGVja2luZyBvdXQgdGhlIHRlc3RzIGUuZy46OgorCisg
IFt3ZWItcGxhdGZvcm0tdGVzdHNdCisgIHJlbW90ZV91cmwgPSBodHRwczovL2dpdGh1Yi5jb20v
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy5naXQKKyAgYnJhbmNoID0gbWFzdGVyCisgIHN5bmNfcGF0
aCA9IHN5bmMKKworQSBjb25maWd1cmF0aW9uIGZpbGUgbXVzdCBjb250YWluIGFsbCB0aGUgYWJv
dmUgZmllbGRzOyBmYWxsaW5nIGJhY2sKK3RvIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgdW5zcGVj
aWZpZWQgZmllbGRzIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLgorCitUaGUgYGB3cHRydW5uZXJgYCBh
bmQgYGB3cHR1cGRhdGVgYCBjb21tYW5kcyB3aWxsIHVzZSBjb25maWd1cmF0aW9uCitmaWxlcyBp
biB0aGUgZm9sbG93aW5nIG9yZGVyOgorCisgKiBBbnkgcGF0aCBzdXBwbGllZCB3aXRoIGEgYGAt
LWNvbmZpZ2BgIGZsYWcgdG8gdGhlIGNvbW1hbmQuCisKKyAqIEEgZmlsZSBjYWxsZWQgYGB3cHRy
dW5uZXIuaW5pYGAgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5CisKKyAqIFRoZSBkZWZhdWx0IGNv
bmZpZ3VyYXRpb24gZmlsZSAoYGB3cHRydW5uZXIuZGVmYXVsdC5pbmlgYCBpbiB0aGUKKyAgIHNv
dXJjZSBkaXJlY3RvcnkpCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mv
dG9vbHMvd3B0cnVubmVyL3JlcXVpcmVtZW50cy50eHQgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRl
ZC93M2MvdG9vbHMvd3B0cnVubmVyL3JlcXVpcmVtZW50cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAuLmU5ZDJhMzUwODBhCi0tLSAvZGV2L251bGwKKysrIGIvV2Vi
RHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci9yZXF1aXJlbWVudHMudHh0
CkBAIC0wLDAgKzEsNCBAQAoraHRtbDVsaWIgPj0gMC45OQorbW96aW5mbyA+PSAwLjcKK21vemxv
ZyA+PSAzLjUKK21vemRlYnVnID49IDAuMQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1w
b3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci9yZXF1aXJlbWVudHNfY2hyb21lLnR4dCBiL1dlYkRy
aXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvcmVxdWlyZW1lbnRzX2Nocm9t
ZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmEyZjU0NDI1ZjNl
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dw
dHJ1bm5lci9yZXF1aXJlbWVudHNfY2hyb21lLnR4dApAQCAtMCwwICsxLDIgQEAKK21venByb2Nl
c3MgPj0gMC4xOQorc2VsZW5pdW0gPj0gMi40MS4wCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0
cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3JlcXVpcmVtZW50c19lZGdlLnR4dCBiL1dl
YkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvcmVxdWlyZW1lbnRzX2Vk
Z2UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hMmY1NDQyNWYz
ZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93
cHRydW5uZXIvcmVxdWlyZW1lbnRzX2VkZ2UudHh0CkBAIC0wLDAgKzEsMiBAQAorbW96cHJvY2Vz
cyA+PSAwLjE5CitzZWxlbml1bSA+PSAyLjQxLjAKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3Rz
L2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvcmVxdWlyZW1lbnRzX2ZpcmVmb3gudHh0IGIv
V2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci9yZXF1aXJlbWVudHNf
ZmlyZWZveC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmQ4ZDI2
OGYxMjdiCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rv
b2xzL3dwdHJ1bm5lci9yZXF1aXJlbWVudHNfZmlyZWZveC50eHQKQEAgLTAsMCArMSw2IEBACitt
YXJpb25ldHRlX2RyaXZlciA+PSAwLjQKK21venByb2ZpbGUgPj0gMC4yMQorbW96cHJvY2VzcyA+
PSAwLjE5Cittb3pjcmFzaCA+PSAwLjEzCittb3pydW5uZXIgPj0gNi43Cittb3psZWFrID49IDAu
MQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5l
ci9yZXF1aXJlbWVudHNfaWUudHh0IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xz
L3dwdHJ1bm5lci9yZXF1aXJlbWVudHNfaWUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi5hMmY1NDQyNWYzZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRl
c3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvcmVxdWlyZW1lbnRzX2llLnR4dApAQCAt
MCwwICsxLDIgQEAKK21venByb2Nlc3MgPj0gMC4xOQorc2VsZW5pdW0gPj0gMi40MS4wCmRpZmYg
LS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3JlcXVp
cmVtZW50c19zYXVjZS50eHQgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0
cnVubmVyL3JlcXVpcmVtZW50c19zYXVjZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLjdiODI4Zjg0YjA4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVz
dHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci9yZXF1aXJlbWVudHNfc2F1Y2UudHh0CkBA
IC0wLDAgKzEsMiBAQAorbW96cHJvY2VzcyA+PSAwLjE5CitzZWxlbml1bSA+PSAzLjMuMApkaWZm
IC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci9yZXF1
aXJlbWVudHNfc2Vydm8udHh0IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dw
dHJ1bm5lci9yZXF1aXJlbWVudHNfc2Vydm8udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi4yMmJjZmExMjNhNQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRl
c3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvcmVxdWlyZW1lbnRzX3NlcnZvLnR4dApA
QCAtMCwwICsxIEBACittb3pwcm9jZXNzID49IDAuMTkKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRl
c3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvc2V0dXAucHkgYi9XZWJEcml2ZXJUZXN0
cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3NldHVwLnB5Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43ZWMxODlmZWZkOQotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvc2V0dXAucHkKQEAgLTAs
MCArMSw3NCBAQAorIyBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVy
bXMgb2YgdGhlIE1vemlsbGEgUHVibGljCisjIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9m
IHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMgZmlsZSwKKyMgWW91IGNhbiBv
YnRhaW4gb25lIGF0IGh0dHA6Ly9tb3ppbGxhLm9yZy9NUEwvMi4wLy4KKworaW1wb3J0IGdsb2IK
K2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHRleHR3cmFwCisKK2Zyb20gc2V0dXB0b29s
cyBpbXBvcnQgc2V0dXAsIGZpbmRfcGFja2FnZXMKKworaGVyZSA9IG9zLnBhdGguc3BsaXQoX19m
aWxlX18pWzBdCisKK1BBQ0tBR0VfTkFNRSA9ICd3cHRydW5uZXInCitQQUNLQUdFX1ZFUlNJT04g
PSAnMS4xNCcKKworIyBEZXBlbmRlbmNpZXMKK3dpdGggb3Blbihvcy5wYXRoLmpvaW4oaGVyZSwg
InJlcXVpcmVtZW50cy50eHQiKSkgYXMgZjoKKyAgICBkZXBzID0gZi5yZWFkKCkuc3BsaXRsaW5l
cygpCisKKyMgQnJvd3Nlci1zcGVjaWZpYyByZXF1aXJlbWVudHMKK3JlcXVpcmVtZW50c19maWxl
cyA9IGdsb2IuZ2xvYigicmVxdWlyZW1lbnRzXyoudHh0IikKKworcHJvZmlsZV9kZXN0ID0gTm9u
ZQorZGVzdF9leGlzdHMgPSBGYWxzZQorCitzZXR1cChuYW1lPVBBQ0tBR0VfTkFNRSwKKyAgICAg
IHZlcnNpb249UEFDS0FHRV9WRVJTSU9OLAorICAgICAgZGVzY3JpcHRpb249Ikhhcm5lc3MgZm9y
IHJ1bm5pbmcgdGhlIFczQyB3ZWItcGxhdGZvcm0tdGVzdHMgYWdhaW5zdCB2YXJpb3VzIHByb2R1
Y3RzIiwKKyAgICAgIGF1dGhvcj0nTW96aWxsYSBBdXRvbWF0aW9uIGFuZCBUZXN0aW5nIFRlYW0n
LAorICAgICAgYXV0aG9yX2VtYWlsPSd0b29sc0BsaXN0cy5tb3ppbGxhLm9yZycsCisgICAgICBs
aWNlbnNlPSdNUEwgMi4wJywKKyAgICAgIHBhY2thZ2VzPWZpbmRfcGFja2FnZXMoZXhjbHVkZT1b
InRlc3RzIiwgIm1ldGFkYXRhIiwgInByZWZzIl0pLAorICAgICAgZW50cnlfcG9pbnRzPXsKKyAg
ICAgICAgICAnY29uc29sZV9zY3JpcHRzJzogWworICAgICAgICAgICAgICAnd3B0cnVubmVyID0g
d3B0cnVubmVyLndwdHJ1bm5lcjptYWluJywKKyAgICAgICAgICAgICAgJ3dwdHVwZGF0ZSA9IHdw
dHJ1bm5lci51cGRhdGU6bWFpbicsCisgICAgICAgICAgXQorICAgICAgfSwKKyAgICAgIHppcF9z
YWZlPUZhbHNlLAorICAgICAgcGxhdGZvcm1zPVsnQW55J10sCisgICAgICBjbGFzc2lmaWVycz1b
J0RldmVsb3BtZW50IFN0YXR1cyA6OiA0IC0gQmV0YScsCisgICAgICAgICAgICAgICAgICAgJ0Vu
dmlyb25tZW50IDo6IENvbnNvbGUnLAorICAgICAgICAgICAgICAgICAgICdJbnRlbmRlZCBBdWRp
ZW5jZSA6OiBEZXZlbG9wZXJzJywKKyAgICAgICAgICAgICAgICAgICAnTGljZW5zZSA6OiBPU0kg
QXBwcm92ZWQgOjogQlNEIExpY2Vuc2UnLAorICAgICAgICAgICAgICAgICAgICdPcGVyYXRpbmcg
U3lzdGVtIDo6IE9TIEluZGVwZW5kZW50J10sCisgICAgICBwYWNrYWdlX2RhdGE9eyJ3cHRydW5u
ZXIiOiBbImV4ZWN1dG9ycy90ZXN0aGFybmVzc19tYXJpb25ldHRlLmpzIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiZXhlY3V0b3JzL3Rlc3RoYXJuZXNzX3dlYmRyaXZlci5q
cyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4ZWN1dG9ycy9yZWZ0ZXN0
LmpzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhlY3V0b3JzL3JlZnRl
c3Qtd2FpdC5qcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3RoYXJu
ZXNzcmVwb3J0LmpzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdGhh
cm5lc3NfcnVubmVyLmh0bWwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJj
b25maWcuanNvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndwdHJ1bm5l
ci5kZWZhdWx0LmluaSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJyb3dz
ZXJzL3NlcnZlci1sb2NhdGlvbnMudHh0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiYnJvd3NlcnMvYjJnX3NldHVwLyoiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJicm93c2Vycy9zYXVjZV9zZXR1cC8qIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAicHJlZnMvKiJdfSwKKyAgICAgIGluY2x1ZGVfcGFja2FnZV9kYXRhPVRydWUs
CisgICAgICBkYXRhX2ZpbGVzPVsoInJlcXVpcmVtZW50cyIsIHJlcXVpcmVtZW50c19maWxlcyld
LAorICAgICAgaW5zdGFsbF9yZXF1aXJlcz1kZXBzCisgICAgICkKKworaWYgImluc3RhbGwiIGlu
IHN5cy5hcmd2OgorICAgIHBhdGggPSBvcy5wYXRoLnJlbHBhdGgob3MucGF0aC5qb2luKHN5cy5w
cmVmaXgsICJyZXF1aXJlbWVudHMiKSwgb3MuY3VyZGlyKQorICAgIHByaW50IHRleHR3cmFwLmZp
bGwoIiIiSW4gb3JkZXIgdG8gdXNlIHdpdGggb25lIG9mIHRoZSBidWlsdC1pbiBicm93c2VyCitw
cm9kdWN0cywgeW91IHdpbGwgbmVlZCB0byBpbnN0YWxsIHRoZSBleHRyYSBkZXBlbmRlbmNpZXMu
IFRoZXNlIGFyZSBwcm92aWRlZAorYXMgcmVxdWlyZW1lbnRzX1tuYW1lXS50eHQgaW4gdGhlICVz
IGRpcmVjdG9yeSBhbmQgY2FuIGJlIGluc3RhbGxlZCB1c2luZworZS5nLiIiIiAlIHBhdGgsIDgw
KQorCisgICAgcHJpbnQgIiIiCisKK3BpcCBpbnN0YWxsIC1yICVzL3JlcXVpcmVtZW50c19maXJl
Zm94LnR4dAorIiIiICUgcGF0aApkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQv
dzNjL3Rvb2xzL3dwdHJ1bm5lci90b3guaW5pIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNj
L3Rvb2xzL3dwdHJ1bm5lci90b3guaW5pCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi43OTA5NzA0MDlmMwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2lt
cG9ydGVkL3czYy90b29scy93cHRydW5uZXIvdG94LmluaQpAQCAtMCwwICsxLDE3IEBACitbcHl0
ZXN0XQoreGZhaWxfc3RyaWN0PXRydWUKKworW3RveF0KK2Vudmxpc3QgPSB7cHkyNyxweXB5fS17
YmFzZSxiMmcsY2hyb21lLGZpcmVmb3gsc2Vydm99CisKK1t0ZXN0ZW52XQorZGVwcyA9CisgICAg
IHB5dGVzdD49Mi45CisgICAgIHB5dGVzdC1jb3YKKyAgICAgcHl0ZXN0LXhkaXN0CisgICAgIC1y
e3RveGluaWRpcn0vcmVxdWlyZW1lbnRzLnR4dAorICAgICBjaHJvbWU6IC1ye3RveGluaWRpcn0v
cmVxdWlyZW1lbnRzX2Nocm9tZS50eHQKKyAgICAgZmlyZWZveDogLXJ7dG94aW5pZGlyfS9yZXF1
aXJlbWVudHNfZmlyZWZveC50eHQKKyAgICAgc2Vydm86IC1ye3RveGluaWRpcn0vcmVxdWlyZW1l
bnRzX3NlcnZvLnR4dAorCitjb21tYW5kcyA9IHB5dGVzdCAtLWNvdgpkaWZmIC0tZ2l0IGEvV2Vi
RHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIuZGVmYXVs
dC5pbmkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1
bm5lci5kZWZhdWx0LmluaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u
MzRkMjVmODA1NmIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93
M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci5kZWZhdWx0LmluaQpAQCAtMCwwICsxLDExIEBA
CitbcHJvZHVjdHNdCisKK1t3ZWItcGxhdGZvcm0tdGVzdHNdCityZW1vdGVfdXJsID0gaHR0cHM6
Ly9naXRodWIuY29tL3czYy93ZWItcGxhdGZvcm0tdGVzdHMuZ2l0CiticmFuY2ggPSBtYXN0ZXIK
K3N5bmNfcGF0aCA9ICUocHdkKXMvc3luYworCitbbWFuaWZlc3Q6ZGVmYXVsdF0KK3Rlc3RzID0g
JShwd2Qpcy90ZXN0cworbWV0YWRhdGEgPSAlKHB3ZClzL21ldGEKK3VybF9iYXNlID0gLwpcIE5v
IG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9y
dGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL19faW5pdF9fLnB5IGIvV2ViRHJpdmVy
VGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvX19pbml0X18ucHkK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmU2OWRlMjliYjJkCmRpZmYg
LS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1
bm5lci9icm93c2Vycy9fX2luaXRfXy5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90
b29scy93cHRydW5uZXIvd3B0cnVubmVyL2Jyb3dzZXJzL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jNGVhOTcxZmI2ZgotLS0gL2Rldi9udWxsCisr
KyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVy
L2Jyb3dzZXJzL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMzEgQEAKKyIiIlN1YnBhY2thZ2Ugd2hl
cmUgZWFjaCBwcm9kdWN0IGlzIGRlZmluZWQuIEVhY2ggcHJvZHVjdCBpcyBjcmVhdGVkIGJ5IGFk
ZGluZyBhCithIC5weSBmaWxlIGNvbnRhaW5pbmcgYSBfX3dwdHJ1bm5lcl9fIHZhcmlhYmxlIGlu
IHRoZSBnbG9iYWwgc2NvcGUuIFRoaXMgbXVzdCBiZQorYSBkaWN0aW9uYXJ5IHdpdGggdGhlIGZp
ZWxkcworCisicHJvZHVjdCI6IE5hbWUgb2YgdGhlIHByb2R1Y3QsIGFzc3VtZWQgdG8gYmUgdW5p
cXVlLgorImJyb3dzZXIiOiBTdHJpbmcgaW5kaWNhdGluZyB0aGUgQnJvd3NlciBpbXBsZW1lbnRh
dGlvbiB1c2VkIHRvIGxhdW5jaCB0aGF0CisgICAgICAgICAgIHByb2R1Y3QuCisiZXhlY3V0b3Ii
OiBEaWN0aW9uYXJ5IHdpdGgga2V5cyBhcyBzdXBwb3J0ZWQgdGVzdCB0eXBlcyBhbmQgdmFsdWVz
IGFzIHRoZSBuYW1lCisgICAgICAgICAgICBvZiB0aGUgRXhlY3V0b3IgaW1wbGVtYW50YXRpb24g
dGhhdCB3aWxsIGJlIHVzZWQgdG8gcnVuIHRoYXQgdGVzdAorICAgICAgICAgICAgdHlwZS4KKyJi
cm93c2VyX2t3YXJncyI6IFN0cmluZyBuYW1pbmcgZnVuY3Rpb24gdGhhdCB0YWtlcyBwcm9kdWN0
LCBiaW5hcnksCisgICAgICAgICAgICAgICAgICBwcmVmc19yb290IGFuZCB0aGUgd3B0cnVubmVy
LnJ1bl90ZXN0cyBrd2FyZ3MgZGljdCBhcyBhcmd1bWVudHMKKyAgICAgICAgICAgICAgICAgIGFu
ZCByZXR1cm5zIGEgZGljdGlvbmFyeSBvZiBrd2FyZ3MgdG8gdXNlIHdoZW4gY3JlYXRpbmcgdGhl
CisgICAgICAgICAgICAgICAgICBCcm93c2VyIGNsYXNzLgorImV4ZWN1dG9yX2t3YXJncyI6IFN0
cmluZyBuYW1pbmcgYSBmdW5jdGlvbiB0aGF0IHRha2VzIGh0dHAgc2VydmVyIHVybCBhbmQKKyAg
ICAgICAgICAgICAgICAgICB0aW1lb3V0IG11bHRpcGxpZXIgYW5kIHJldHVybnMga3dhcmdzIHRv
IHVzZSB3aGVuIGNyZWF0aW5nCisgICAgICAgICAgICAgICAgICAgdGhlIGV4ZWN1dG9yIGNsYXNz
LgorImVudl9vcHRpb25zIjogU3RyaW5nIG5hbWluZyBhIGZ1bnRpb24gb2Ygbm8gYXJndW1lbnRz
IHRoYXQgcmV0dXJucyB0aGUKKyAgICAgICAgICAgICAgIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhl
IFRlc3RFbnZpcm9ubWVudC4KKworQWxsIGNsYXNzZXMgYW5kIGZ1bmN0aW9ucyBuYW1lZCBpbiB0
aGUgYWJvdmUgZGljdCBtdXN0IGJlIGltcG9ydGVkIGludG8gdGhlCittb2R1bGUgZ2xvYmFsIHNj
b3BlLgorIiIiCisKK3Byb2R1Y3RfbGlzdCA9IFsiY2hyb21lIiwKKyAgICAgICAgICAgICAgICAi
ZWRnZSIsCisgICAgICAgICAgICAgICAgImZpcmVmb3giLAorICAgICAgICAgICAgICAgICJpZSIs
CisgICAgICAgICAgICAgICAgInNhdWNlIiwKKyAgICAgICAgICAgICAgICAic2Vydm8iLAorICAg
ICAgICAgICAgICAgICJzZXJ2b2RyaXZlciJdCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9p
bXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9icm93c2Vycy9iMmdfc2V0dXAv
Y2VydHRlc3RfYXBwLnppcCBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRy
dW5uZXIvd3B0cnVubmVyL2Jyb3dzZXJzL2IyZ19zZXR1cC9jZXJ0dGVzdF9hcHAuemlwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmY5Y2JkNTMwMGFkNjUwZjgzNjlhYjAyYTRhZGM4ODY2YTVmMGRlYTEKR0lUIGJpbmFy
eSBwYXRjaApsaXRlcmFsIDEyMzcKemNtV0lXV0BacyNVfGBeMkZqdldPRGZ6VH10cVlKQjE7a3Rv
RzdPbntEWEE1RDg2fitucCZeX00lJG1qVyFLT0Q5CnpnRygjODg1bWk8R0JQbExePT1PSUlxOSNy
UXBZM29ndlFDVTh5fDBLM3whZiVTIVNqPlFgS14xbmJ8SmBEVjxaUAp6bGMmck4kfj9ZdyFHayRi
QXdyWClWaXJBITJzbl9zbXx1YD42X1llMExqYz96VmlvbW5Wam4pbmNgYEZGP0JaZnoKejswTC1S
SCEmfFdFdyM4cnVSSnY9djdpOSM3I1RPSVA8YkZtYklqWkAtfjdpR0piUy1+YjZFRHpzP0stU3Vm
QTgtCnokU1Qme3NDMDNvZlR4SXgpalhlenxNeUxLZCEqPWIqYD1LPDF9RHwpWTtCKUBfM1E4cmtU
Y14/YHBuVzlyIWN2cQp6cnx8UklpV2VnNntifktWSXh7WmpENztRbGpeeUV2bmZ6bWsrLTFpTW8r
VVhBQ1FOZilIUmFYMnhhS25FPFFqYlYKenlpZkswSWQteyZpQkNTVGU+fk47WVE9UTFCYTJsNj5O
cnlVcl5nZy1hV1M7ZCp9bThJTXNAJUdITn4md0Y0ejZPCnpBP1cyKVFoQiZ4eUNTM2YrdVU8ODFA
blM2bVFSeDNjWW9QcFFOZm10WWowa1k+PChKKDUhPllZO1lDSSQkQWMjWQp6SCV4T3JPe0BISFF2
TWdTK1dJQHs/fkxsIVVofCZhRz5QfU8oTHckQEVQUDRiND98cXZPdEVfLVR6MnBUazdEd3YKeikj
ckYjV3wmXkZ5VXk2WlZAPmZrKWk8OVBGYFR2YlMhTEV4RVZIYTlZXlU1WTJYUzlqPio7R3ZwS099
dSVhcjtuCnpoMTJZaiUqaVgoMD59RSprYCZZdXY/WHFTYkkpY0ZLWDxBMU9wRTgraGw8NmJDKVhe
d0BATW16b2Q7WjNiQnBGXwp6bGArYl5gZX04aHtOXmtEI1VWWX1ELUN2Qj8jWmtQSXh7aUx0PWdl
SUpiQ019dEdCbCttVk5tYlRfdEshbX0rKyoKenY7QT8kZDl7QSkqQTNUWTlybTkjK3tGfGlJTl85
Q3E+OHU4Znx8RHttVDFKUV5QanpTWDQ+MjBHYzBRJlBne3drCnpGIWklK04/Jj90VXkpdSolQz04
P249YnM2VTItfmhXfiktdGVoLTEmRzUyVGx4WVUmOUU0WTB0eShIcih0SDY2fQp6KGd2fnFQVWZ2
b3IqUXQrVTtqN3VyaWM1P0s9fW82UGlKe2VffVgzOWNZP1BuXzRPM3k/Ymt5I3I3UTlNNE82PXoK
elN7Qzx5JjIjUDhOY35yXzUtJTQ3PDs3akZLUl5CYVJgb1pUOX50SEBlZiVzdWBAazdpaUh3bHZG
T0VsZUlRRVAzCnpfP19vfCt+cjtRemp0VGNeNmdMbU13aUU+YVBIN3BhWVJCQFJrWC1oPWR3Rkgl
WGE3ODg0K3QhZTBLTj9tKnoyVgp6M1RVITVga1pvRGVFbyRMOH48PzRlZzY2QXBgVEp9emopSE9L
M2wrU2VuUSU4ekg4UndzYXFCdjQwO3J6UkAxZFkKeiZ1RCt+dUJwZTtkZmgkWlRQKTlMK1pPISFv
X0trNFVURG1oZ2Yme1JQaUlZZGZBWktySilpZWVVKzhYNEk/ITFwCno9K2YtVF4yVzh+KXNmITxP
VFcrRHpIO2BDfDdNIyR0K3sqVT9tVz5XZU9IQVBJQVgmbVpMakhpUH09ZF9RSzRAMwp6bXJafUJY
VEduJEBaKUxFJmRQdEU2VEtke2NLa0dkSktla1RkKWFzVTBCPVNuSWM4akNnOU5hSVV8O34yMDFR
aFMKd0tgaTh3ZikhRnlwaysqQ15EeSVgdlV3ZHFeRHVIZSZgP20wJDFzJFk0UC1xTjVIMURNUVk7
YEkwTDY5ITNJRzVBCgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS9XZWJEcml2
ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9icm93c2Vycy9i
YXNlLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRy
dW5uZXIvYnJvd3NlcnMvYmFzZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uZTRjOWMzMDFiZDUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBv
cnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9icm93c2Vycy9iYXNlLnB5CkBAIC0w
LDAgKzEsMTY2IEBACitpbXBvcnQgb3MKK2ltcG9ydCBwbGF0Zm9ybQoraW1wb3J0IHNvY2tldAor
ZnJvbSBhYmMgaW1wb3J0IEFCQ01ldGEsIGFic3RyYWN0bWV0aG9kCisKK2Zyb20gLi53cHRjb21t
YW5kbGluZSBpbXBvcnQgcmVxdWlyZV9hcmcKKworaGVyZSA9IG9zLnBhdGguc3BsaXQoX19maWxl
X18pWzBdCisKKworZGVmIGNtZF9hcmcobmFtZSwgdmFsdWU9Tm9uZSk6CisgICAgcHJlZml4ID0g
Ii0iIGlmIHBsYXRmb3JtLnN5c3RlbSgpID09ICJXaW5kb3dzIiBlbHNlICItLSIKKyAgICBydiA9
IHByZWZpeCArIG5hbWUKKyAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAgICAgcnYgKz0g
Ij0iICsgdmFsdWUKKyAgICByZXR1cm4gcnYKKworCitkZWYgZ2V0X2ZyZWVfcG9ydChzdGFydF9w
b3J0LCBleGNsdWRlPU5vbmUpOgorICAgICIiIkdldCB0aGUgZmlyc3QgcG9ydCBudW1iZXIgYWZ0
ZXIgc3RhcnRfcG9ydCAoaW5jbHVzaXZlKSB0aGF0IGlzCisgICAgbm90IGN1cnJlbnRseSBib3Vu
ZC4KKworICAgIDpwYXJhbSBzdGFydF9wb3J0OiBJbnRlZ2VyIHBvcnQgbnVtYmVyIGF0IHdoaWNo
IHRvIHN0YXJ0IHRlc3RpbmcuCisgICAgOnBhcmFtIGV4Y2x1ZGU6IFNldCBvZiBwb3J0IG51bWJl
cnMgdG8gc2tpcCIiIgorICAgIHBvcnQgPSBzdGFydF9wb3J0CisgICAgd2hpbGUgVHJ1ZToKKyAg
ICAgICAgaWYgZXhjbHVkZSBhbmQgcG9ydCBpbiBleGNsdWRlOgorICAgICAgICAgICAgcG9ydCAr
PSAxCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBzID0gc29ja2V0LnNvY2tldCgpCisg
ICAgICAgIHRyeToKKyAgICAgICAgICAgIHMuYmluZCgoIjEyNy4wLjAuMSIsIHBvcnQpKQorICAg
ICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgcG9ydCArPSAxCisgICAgICAg
IGVsc2U6CisgICAgICAgICAgICByZXR1cm4gcG9ydAorICAgICAgICBmaW5hbGx5OgorICAgICAg
ICAgICAgcy5jbG9zZSgpCisKK2RlZiBicm93c2VyX2NvbW1hbmQoYmluYXJ5LCBhcmdzLCBkZWJ1
Z19pbmZvKToKKyAgICBpZiBkZWJ1Z19pbmZvOgorICAgICAgICBpZiBkZWJ1Z19pbmZvLnJlcXVp
cmVzRXNjYXBlZEFyZ3M6CisgICAgICAgICAgICBhcmdzID0gW2l0ZW0ucmVwbGFjZSgiJiIsICJc
XCYiKSBmb3IgaXRlbSBpbiBhcmdzXQorICAgICAgICBkZWJ1Z19hcmdzID0gW2RlYnVnX2luZm8u
cGF0aF0gKyBkZWJ1Z19pbmZvLmFyZ3MKKyAgICBlbHNlOgorICAgICAgICBkZWJ1Z19hcmdzID0g
W10KKworICAgIGNvbW1hbmQgPSBbYmluYXJ5XSArIGFyZ3MKKworICAgIHJldHVybiBkZWJ1Z19h
cmdzLCBjb21tYW5kCisKKworY2xhc3MgQnJvd3NlckVycm9yKEV4Y2VwdGlvbik6CisgICAgcGFz
cworCisKK2NsYXNzIEJyb3dzZXIob2JqZWN0KToKKyAgICBfX21ldGFjbGFzc19fID0gQUJDTWV0
YQorCisgICAgcHJvY2Vzc19jbHMgPSBOb25lCisgICAgaW5pdF90aW1lb3V0ID0gMzAKKworICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBsb2dnZXIpOgorICAgICAgICAiIiJBYnN0cmFjdCBjbGFzcyBz
ZXJ2aW5nIGFzIHRoZSBiYXNpcyBmb3IgQnJvd3NlciBpbXBsZW1lbnRhdGlvbnMuCisKKyAgICAg
ICAgVGhlIEJyb3dzZXIgaXMgdXNlZCBpbiB0aGUgVGVzdFJ1bm5lck1hbmFnZXIgdG8gc3RhcnQg
YW5kIHN0b3AgdGhlIGJyb3dzZXIKKyAgICAgICAgcHJvY2VzcywgYW5kIHRvIGNoZWNrIHRoZSBz
dGF0ZSBvZiB0aGF0IHByb2Nlc3MuIFRoaXMgY2xhc3MgYWxzbyBhY3RzIGFzIGEKKyAgICAgICAg
Y29udGV4dCBtYW5hZ2VyLCBlbmFibGluZyBpdCB0byBkbyBicm93c2VyLXNwZWNpZmljIHNldHVw
IGF0IHRoZSBzdGFydCBvZgorICAgICAgICB0aGUgdGVzdHJ1biBhbmQgY2xlYW51cCBhZnRlciB0
aGUgcnVuIGlzIGNvbXBsZXRlLgorCisgICAgICAgIDpwYXJhbSBsb2dnZXI6IFN0cnVjdHVyZWQg
bG9nZ2VyIHRvIHVzZSBmb3Igb3V0cHV0LgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5sb2dn
ZXIgPSBsb2dnZXIKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHNlbGYuc2V0
dXAoKQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdz
LCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYuY2xlYW51cCgpCisKKyAgICBkZWYgc2V0dXAoc2Vs
Zik6CisgICAgICAgICIiIlVzZWQgZm9yIGJyb3dzZXItc3BlY2lmaWMgc2V0dXAgdGhhdCBoYXBw
ZW5zIGF0IHRoZSBzdGFydCBvZiBhIHRlc3QgcnVuIiIiCisgICAgICAgIHBhc3MKKworICAgIGRl
ZiBzZXR0aW5ncyhzZWxmLCB0ZXN0KToKKyAgICAgICAgcmV0dXJuIHt9CisKKyAgICBAYWJzdHJh
Y3RtZXRob2QKKyAgICBkZWYgc3RhcnQoc2VsZiwgKiprd2FyZ3MpOgorICAgICAgICAiIiJMYXVu
Y2ggdGhlIGJyb3dzZXIgb2JqZWN0IGFuZCBnZXQgaXQgaW50byBhIHN0YXRlIHdoZXJlIGlzIGlz
IHJlYWR5IHRvIHJ1biB0ZXN0cyIiIgorICAgICAgICBwYXNzCisKKyAgICBAYWJzdHJhY3RtZXRo
b2QKKyAgICBkZWYgc3RvcChzZWxmLCBmb3JjZT1GYWxzZSk6CisgICAgICAgICIiIlN0b3AgdGhl
IHJ1bm5pbmcgYnJvd3NlciBwcm9jZXNzLiIiIgorICAgICAgICBwYXNzCisKKyAgICBAYWJzdHJh
Y3RtZXRob2QKKyAgICBkZWYgcGlkKHNlbGYpOgorICAgICAgICAiIiJwaWQgb2YgdGhlIGJyb3dz
ZXIgcHJvY2VzcyBvciBOb25lIGlmIHRoZXJlIGlzIG5vIHBpZCIiIgorICAgICAgICBwYXNzCisK
KyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgaXNfYWxpdmUoc2VsZik6CisgICAgICAgICIi
IkJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBicm93c2VyIHByb2Nlc3MgaXMgc3RpbGwg
cnVubmluZyIiIgorICAgICAgICBwYXNzCisKKyAgICBkZWYgc2V0dXBfc3NsKHNlbGYsIGhvc3Rz
KToKKyAgICAgICAgIiIiUmV0dXJuIGEgY2VydGlmaWNhdGUgdG8gdXNlIGZvciB0ZXN0cyByZXF1
aXJpbmcgc3NsIHRoYXQgd2lsbCBiZSB0cnVzdGVkIGJ5IHRoZSBicm93c2VyIiIiCisgICAgICAg
IHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoInNzbCB0ZXN0aW5nIG5vdCBzdXBwb3J0ZWQiKQor
CisgICAgZGVmIGNsZWFudXAoc2VsZik6CisgICAgICAgICIiIkJyb3dzZXItc3BlY2lmaWMgY2xl
YW51cCB0aGF0IGlzIHJ1biBhZnRlciB0aGUgdGVzdHJ1biBpcyBmaW5pc2hlZCIiIgorICAgICAg
ICBwYXNzCisKKyAgICBkZWYgZXhlY3V0b3JfYnJvd3NlcihzZWxmKToKKyAgICAgICAgIiIiUmV0
dXJucyB0aGUgRXhlY3V0b3JCcm93c2VyIHN1YmNsYXNzIGZvciB0aGlzIEJyb3dzZXIgc3ViY2xh
c3MgYW5kIHRoZSBrZXl3b3JkIGFyZ3VtZW50cworICAgICAgICB3aXRoIHdoaWNoIGl0IHNob3Vs
ZCBiZSBpbnN0YW50aWF0ZWQiIiIKKyAgICAgICAgcmV0dXJuIEV4ZWN1dG9yQnJvd3Nlciwge30K
KworICAgIGRlZiBjaGVja19mb3JfY3Jhc2hlcyhzZWxmKToKKyAgICAgICAgIiIiQ2hlY2sgZm9y
IGNyYXNoZXMgdGhhdCBkaWRuJ3QgY2F1c2UgdGhlIGJyb3dzZXIgcHJvY2VzcyB0byB0ZXJtaW5h
dGUiIiIKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgbG9nX2NyYXNoKHNlbGYsIHBy
b2Nlc3MsIHRlc3QpOgorICAgICAgICAiIiJSZXR1cm4gYSBsaXN0IG9mIGRpY3Rpb25hcmllcyBj
b250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IGNyYXNoZXMgdGhhdCBoYXBwZW5kCisgICAgICAg
IGluIHRoZSBicm93c2VyLCBvciBhbiBlbXB0eSBsaXN0IGlmIG5vIGNyYXNoZXMgb2NjdXJyZWQi
IiIKKyAgICAgICAgc2VsZi5sb2dnZXIuY3Jhc2gocHJvY2VzcywgdGVzdCkKKworCitjbGFzcyBO
dWxsQnJvd3NlcihCcm93c2VyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9nZ2VyLCAqKmt3
YXJncyk6CisgICAgICAgIHN1cGVyKE51bGxCcm93c2VyLCBzZWxmKS5fX2luaXRfXyhsb2dnZXIp
CisKKyAgICBkZWYgc3RhcnQoc2VsZiwgKiprd2FyZ3MpOgorICAgICAgICAiIiJOby1vcCBicm93
c2VyIHRvIHVzZSBpbiBzY2VuYXJpb3Mgd2hlcmUgdGhlIFRlc3RSdW5uZXJNYW5hZ2VyIHNob3Vs
ZG4ndAorICAgICAgICBhY3R1YWxseSBvd24gdGhlIGJyb3dzZXIgcHJvY2VzcyAoZS5nLiBTZXJ2
byB3aGVyZSB3ZSBzdGFydCBvbmUgYnJvd3NlcgorICAgICAgICBwZXIgdGVzdCkiIiIKKyAgICAg
ICAgcGFzcworCisgICAgZGVmIHN0b3Aoc2VsZiwgZm9yY2U9RmFsc2UpOgorICAgICAgICBwYXNz
CisKKyAgICBkZWYgcGlkKHNlbGYpOgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIGlz
X2FsaXZlKHNlbGYpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIG9uX291dHB1dChz
ZWxmLCBsaW5lKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisKK2NsYXNz
IEV4ZWN1dG9yQnJvd3NlcihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqKmt3YXJn
cyk6CisgICAgICAgICIiIlZpZXcgb2YgdGhlIEJyb3dzZXIgdXNlZCBieSB0aGUgRXhlY3V0b3Ig
b2JqZWN0LgorICAgICAgICBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHRoZSBFeGVjdXRvciBydW5z
IGluIGEgY2hpbGQgcHJvY2VzcyBhbmQKKyAgICAgICAgd2UgY2FuJ3Qgc2hpcCBCcm93c2VyIGlu
c3RhbmNlcyBiZXR3ZWVuIHByb2Nlc3NlcyBvbiBXaW5kb3dzLgorCisgICAgICAgIFR5cGljYWxs
eSB0aGlzIHdpbGwgaGF2ZSBhIGZldyBwcm9kdWN0LXNwZWNpZmljIHByb3BlcnRpZXMgc2V0LAor
ICAgICAgICBidXQgaW4gc29tZSBjYXNlcyBpdCBtYXkgaGF2ZSBtb3JlIGVsYWJvcmF0ZSBtZXRo
b2RzIGZvciBzZXR0aW5nCisgICAgICAgIHVwIHRoZSBicm93c2VyIGZyb20gdGhlIHJ1bm5lciBw
cm9jZXNzLgorICAgICAgICAiIiIKKyAgICAgICAgZm9yIGssIHYgaW4ga3dhcmdzLml0ZXJpdGVt
cygpOgorICAgICAgICAgICAgc2V0YXR0cihzZWxmLCBrLCB2KQpkaWZmIC0tZ2l0IGEvV2ViRHJp
dmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvYnJvd3NlcnMv
Y2hyb21lLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93
cHRydW5uZXIvYnJvd3NlcnMvY2hyb21lLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi4yMTVmY2NmZmUyYQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3Rz
L2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2Jyb3dzZXJzL2Nocm9tZS5w
eQpAQCAtMCwwICsxLDEwMSBAQAorZnJvbSAuYmFzZSBpbXBvcnQgQnJvd3NlciwgRXhlY3V0b3JC
cm93c2VyLCByZXF1aXJlX2FyZworZnJvbSAuLndlYmRyaXZlcl9zZXJ2ZXIgaW1wb3J0IENocm9t
ZURyaXZlclNlcnZlcgorZnJvbSAuLmV4ZWN1dG9ycyBpbXBvcnQgZXhlY3V0b3Jfa3dhcmdzIGFz
IGJhc2VfZXhlY3V0b3Jfa3dhcmdzCitmcm9tIC4uZXhlY3V0b3JzLmV4ZWN1dG9yc2VsZW5pdW0g
aW1wb3J0IChTZWxlbml1bVRlc3RoYXJuZXNzRXhlY3V0b3IsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTZWxlbml1bVJlZlRlc3RFeGVjdXRvcikKK2Zyb20gLi5l
eGVjdXRvcnMuZXhlY3V0b3JjaHJvbWUgaW1wb3J0IENocm9tZURyaXZlcldkc3BlY0V4ZWN1dG9y
CisKKworX193cHRydW5uZXJfXyA9IHsicHJvZHVjdCI6ICJjaHJvbWUiLAorICAgICAgICAgICAg
ICAgICAiY2hlY2tfYXJncyI6ICJjaGVja19hcmdzIiwKKyAgICAgICAgICAgICAgICAgImJyb3dz
ZXIiOiAiQ2hyb21lQnJvd3NlciIsCisgICAgICAgICAgICAgICAgICJleGVjdXRvciI6IHsidGVz
dGhhcm5lc3MiOiAiU2VsZW5pdW1UZXN0aGFybmVzc0V4ZWN1dG9yIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJyZWZ0ZXN0IjogIlNlbGVuaXVtUmVmVGVzdEV4ZWN1dG9yIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3ZHNwZWMiOiAiQ2hyb21lRHJpdmVyV2RzcGVj
RXhlY3V0b3IifSwKKyAgICAgICAgICAgICAgICAgImJyb3dzZXJfa3dhcmdzIjogImJyb3dzZXJf
a3dhcmdzIiwKKyAgICAgICAgICAgICAgICAgImV4ZWN1dG9yX2t3YXJncyI6ICJleGVjdXRvcl9r
d2FyZ3MiLAorICAgICAgICAgICAgICAgICAiZW52X2V4dHJhcyI6ICJlbnZfZXh0cmFzIiwKKyAg
ICAgICAgICAgICAgICAgImVudl9vcHRpb25zIjogImVudl9vcHRpb25zIn0KKworCitkZWYgY2hl
Y2tfYXJncygqKmt3YXJncyk6CisgICAgcmVxdWlyZV9hcmcoa3dhcmdzLCAid2ViZHJpdmVyX2Jp
bmFyeSIpCisKKworZGVmIGJyb3dzZXJfa3dhcmdzKHRlc3RfdHlwZSwgcnVuX2luZm9fZGF0YSwg
Kiprd2FyZ3MpOgorICAgIHJldHVybiB7ImJpbmFyeSI6IGt3YXJnc1siYmluYXJ5Il0sCisgICAg
ICAgICAgICAid2ViZHJpdmVyX2JpbmFyeSI6IGt3YXJnc1sid2ViZHJpdmVyX2JpbmFyeSJdLAor
ICAgICAgICAgICAgIndlYmRyaXZlcl9hcmdzIjoga3dhcmdzLmdldCgid2ViZHJpdmVyX2FyZ3Mi
KX0KKworCitkZWYgZXhlY3V0b3Jfa3dhcmdzKHRlc3RfdHlwZSwgc2VydmVyX2NvbmZpZywgY2Fj
aGVfbWFuYWdlciwgcnVuX2luZm9fZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3Mp
OgorICAgIGZyb20gc2VsZW5pdW0ud2ViZHJpdmVyIGltcG9ydCBEZXNpcmVkQ2FwYWJpbGl0aWVz
CisKKyAgICBleGVjdXRvcl9rd2FyZ3MgPSBiYXNlX2V4ZWN1dG9yX2t3YXJncyh0ZXN0X3R5cGUs
IHNlcnZlcl9jb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2FjaGVfbWFuYWdlciwgKiprd2FyZ3MpCisgICAgZXhlY3V0b3Jfa3dhcmdzWyJjbG9zZV9h
ZnRlcl9kb25lIl0gPSBUcnVlCisgICAgY2FwYWJpbGl0aWVzID0gZGljdChEZXNpcmVkQ2FwYWJp
bGl0aWVzLkNIUk9NRS5pdGVtcygpKQorICAgIGNhcGFiaWxpdGllcy5zZXRkZWZhdWx0KCJjaHJv
bWVPcHRpb25zIiwge30pWyJwcmVmcyJdID0geworICAgICAgICAicHJvZmlsZSI6IHsKKyAgICAg
ICAgICAgICJkZWZhdWx0X2NvbnRlbnRfc2V0dGluZ192YWx1ZXMiOiB7CisgICAgICAgICAgICAg
ICAgInBvcHVwcyI6IDEKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBmb3Ig
KGt3YXJnLCBjYXBhYmlsaXR5KSBpbiBbKCJiaW5hcnkiLCAiYmluYXJ5IiksICgiYmluYXJ5X2Fy
Z3MiLCAiYXJncyIpXToKKyAgICAgICAgaWYga3dhcmdzW2t3YXJnXSBpcyBub3QgTm9uZToKKyAg
ICAgICAgICAgIGNhcGFiaWxpdGllc1siY2hyb21lT3B0aW9ucyJdW2NhcGFiaWxpdHldID0ga3dh
cmdzW2t3YXJnXQorICAgIGlmIHRlc3RfdHlwZSA9PSAidGVzdGhhcm5lc3MiOgorICAgICAgICBj
YXBhYmlsaXRpZXNbImNocm9tZU9wdGlvbnMiXVsidXNlQXV0b21hdGlvbkV4dGVuc2lvbiJdID0g
RmFsc2UKKyAgICAgICAgY2FwYWJpbGl0aWVzWyJjaHJvbWVPcHRpb25zIl1bImV4Y2x1ZGVTd2l0
Y2hlcyJdID0gWyJlbmFibGUtYXV0b21hdGlvbiJdCisgICAgaWYgdGVzdF90eXBlID09ICJ3ZHNw
ZWMiOgorICAgICAgICBjYXBhYmlsaXRpZXNbImNocm9tZU9wdGlvbnMiXVsidzNjIl0gPSBUcnVl
CisgICAgZXhlY3V0b3Jfa3dhcmdzWyJjYXBhYmlsaXRpZXMiXSA9IGNhcGFiaWxpdGllcworICAg
IHJldHVybiBleGVjdXRvcl9rd2FyZ3MKKworCitkZWYgZW52X2V4dHJhcygqKmt3YXJncyk6Cisg
ICAgcmV0dXJuIFtdCisKKworZGVmIGVudl9vcHRpb25zKCk6CisgICAgcmV0dXJuIHsiaG9zdCI6
ICJ3ZWItcGxhdGZvcm0udGVzdCIsCisgICAgICAgICAgICAiYmluZF9ob3N0bmFtZSI6ICJ0cnVl
In0KKworCitjbGFzcyBDaHJvbWVCcm93c2VyKEJyb3dzZXIpOgorICAgICIiIkNocm9tZSBpcyBi
YWNrZWQgYnkgY2hyb21lZHJpdmVyLCB3aGljaCBpcyBzdXBwbGllZCB0aHJvdWdoCisgICAgYGB3
cHRydW5uZXIud2ViZHJpdmVyLkNocm9tZURyaXZlclNlcnZlcmBgLgorICAgICIiIgorCisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIGxvZ2dlciwgYmluYXJ5LCB3ZWJkcml2ZXJfYmluYXJ5PSJjaHJv
bWVkcml2ZXIiLAorICAgICAgICAgICAgICAgICB3ZWJkcml2ZXJfYXJncz1Ob25lKToKKyAgICAg
ICAgIiIiQ3JlYXRlcyBhIG5ldyByZXByZXNlbnRhdGlvbiBvZiBDaHJvbWUuICBUaGUgYGJpbmFy
eWAgYXJndW1lbnQgZ2l2ZXMKKyAgICAgICAgdGhlIGJyb3dzZXIgYmluYXJ5IHRvIHVzZSBmb3Ig
dGVzdGluZy4iIiIKKyAgICAgICAgQnJvd3Nlci5fX2luaXRfXyhzZWxmLCBsb2dnZXIpCisgICAg
ICAgIHNlbGYuYmluYXJ5ID0gYmluYXJ5CisgICAgICAgIHNlbGYuc2VydmVyID0gQ2hyb21lRHJp
dmVyU2VydmVyKHNlbGYubG9nZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBiaW5hcnk9d2ViZHJpdmVyX2JpbmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXJncz13ZWJkcml2ZXJfYXJncykKKworICAgIGRlZiBzdGFydChz
ZWxmLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYuc2VydmVyLnN0YXJ0KGJsb2NrPUZhbHNlKQor
CisgICAgZGVmIHN0b3Aoc2VsZiwgZm9yY2U9RmFsc2UpOgorICAgICAgICBzZWxmLnNlcnZlci5z
dG9wKGZvcmNlPWZvcmNlKQorCisgICAgZGVmIHBpZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNl
bGYuc2VydmVyLnBpZAorCisgICAgZGVmIGlzX2FsaXZlKHNlbGYpOgorICAgICAgICAjIFRPRE8o
YXRvKTogVGhpcyBvbmx5IGluZGljYXRlcyB0aGUgZHJpdmVyIGlzIGFsaXZlLAorICAgICAgICAj
IGFuZCBkb2Vzbid0IHNheSBhbnl0aGluZyBhYm91dCB3aGV0aGVyIGEgYnJvd3NlciBzZXNzaW9u
CisgICAgICAgICMgaXMgYWN0aXZlLgorICAgICAgICByZXR1cm4gc2VsZi5zZXJ2ZXIuaXNfYWxp
dmUoKQorCisgICAgZGVmIGNsZWFudXAoc2VsZik6CisgICAgICAgIHNlbGYuc3RvcCgpCisKKyAg
ICBkZWYgZXhlY3V0b3JfYnJvd3NlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIEV4ZWN1dG9yQnJv
d3NlciwgeyJ3ZWJkcml2ZXJfdXJsIjogc2VsZi5zZXJ2ZXIudXJsfQpkaWZmIC0tZ2l0IGEvV2Vi
RHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvYnJvd3Nl
cnMvZWRnZS5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIv
d3B0cnVubmVyL2Jyb3dzZXJzL2VkZ2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAuLmZkYzdhNzcyMWFkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMv
aW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvYnJvd3NlcnMvZWRnZS5weQpA
QCAtMCwwICsxLDc0IEBACitmcm9tIC5iYXNlIGltcG9ydCBCcm93c2VyLCBFeGVjdXRvckJyb3dz
ZXIsIHJlcXVpcmVfYXJnCitmcm9tIC4ud2ViZHJpdmVyX3NlcnZlciBpbXBvcnQgRWRnZURyaXZl
clNlcnZlcgorZnJvbSAuLmV4ZWN1dG9ycyBpbXBvcnQgZXhlY3V0b3Jfa3dhcmdzIGFzIGJhc2Vf
ZXhlY3V0b3Jfa3dhcmdzCitmcm9tIC4uZXhlY3V0b3JzLmV4ZWN1dG9yc2VsZW5pdW0gaW1wb3J0
IChTZWxlbml1bVRlc3RoYXJuZXNzRXhlY3V0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTZWxlbml1bVJlZlRlc3RFeGVjdXRvcikKKworX193cHRydW5uZXJf
XyA9IHsicHJvZHVjdCI6ICJlZGdlIiwKKyAgICAgICAgICAgICAgICAgImNoZWNrX2FyZ3MiOiAi
Y2hlY2tfYXJncyIsCisgICAgICAgICAgICAgICAgICJicm93c2VyIjogIkVkZ2VCcm93c2VyIiwK
KyAgICAgICAgICAgICAgICAgImV4ZWN1dG9yIjogeyJ0ZXN0aGFybmVzcyI6ICJTZWxlbml1bVRl
c3RoYXJuZXNzRXhlY3V0b3IiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlZnRl
c3QiOiAiU2VsZW5pdW1SZWZUZXN0RXhlY3V0b3IifSwKKyAgICAgICAgICAgICAgICAgImJyb3dz
ZXJfa3dhcmdzIjogImJyb3dzZXJfa3dhcmdzIiwKKyAgICAgICAgICAgICAgICAgImV4ZWN1dG9y
X2t3YXJncyI6ICJleGVjdXRvcl9rd2FyZ3MiLAorICAgICAgICAgICAgICAgICAiZW52X2V4dHJh
cyI6ICJlbnZfZXh0cmFzIiwKKyAgICAgICAgICAgICAgICAgImVudl9vcHRpb25zIjogImVudl9v
cHRpb25zIn0KKworCitkZWYgY2hlY2tfYXJncygqKmt3YXJncyk6CisgICAgcmVxdWlyZV9hcmco
a3dhcmdzLCAid2ViZHJpdmVyX2JpbmFyeSIpCisKK2RlZiBicm93c2VyX2t3YXJncyh0ZXN0X3R5
cGUsIHJ1bl9pbmZvX2RhdGEsICoqa3dhcmdzKToKKyAgICByZXR1cm4geyJ3ZWJkcml2ZXJfYmlu
YXJ5Ijoga3dhcmdzWyJ3ZWJkcml2ZXJfYmluYXJ5Il0sCisgICAgICAgICAgICAid2ViZHJpdmVy
X2FyZ3MiOiBrd2FyZ3MuZ2V0KCJ3ZWJkcml2ZXJfYXJncyIpfQorCitkZWYgZXhlY3V0b3Jfa3dh
cmdzKHRlc3RfdHlwZSwgc2VydmVyX2NvbmZpZywgY2FjaGVfbWFuYWdlciwgcnVuX2luZm9fZGF0
YSwKKyAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpOgorICAgIGZyb20gc2VsZW5pdW0ud2Vi
ZHJpdmVyIGltcG9ydCBEZXNpcmVkQ2FwYWJpbGl0aWVzCisKKyAgICBleGVjdXRvcl9rd2FyZ3Mg
PSBiYXNlX2V4ZWN1dG9yX2t3YXJncyh0ZXN0X3R5cGUsIHNlcnZlcl9jb25maWcsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVfbWFuYWdlciwgKiprd2Fy
Z3MpCisgICAgZXhlY3V0b3Jfa3dhcmdzWyJjbG9zZV9hZnRlcl9kb25lIl0gPSBUcnVlCisgICAg
ZXhlY3V0b3Jfa3dhcmdzWyJjYXBhYmlsaXRpZXMiXSA9IGRpY3QoRGVzaXJlZENhcGFiaWxpdGll
cy5FREdFLml0ZW1zKCkpCisgICAgcmV0dXJuIGV4ZWN1dG9yX2t3YXJncworCitkZWYgZW52X2V4
dHJhcygqKmt3YXJncyk6CisgICAgcmV0dXJuIFtdCisKK2RlZiBlbnZfb3B0aW9ucygpOgorICAg
IHJldHVybiB7Imhvc3QiOiAid2ViLXBsYXRmb3JtLnRlc3QiLAorICAgICAgICAgICAgImJpbmRf
aG9zdG5hbWUiOiAidHJ1ZSIsCisgICAgICAgICAgICAic3VwcG9ydHNfZGVidWdnZXIiOiBGYWxz
ZX0KKworY2xhc3MgRWRnZUJyb3dzZXIoQnJvd3Nlcik6CisgICAgdXNlZF9wb3J0cyA9IHNldCgp
CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9nZ2VyLCB3ZWJkcml2ZXJfYmluYXJ5LCB3ZWJk
cml2ZXJfYXJncz1Ob25lKToKKyAgICAgICAgQnJvd3Nlci5fX2luaXRfXyhzZWxmLCBsb2dnZXIp
CisgICAgICAgIHNlbGYuc2VydmVyID0gRWRnZURyaXZlclNlcnZlcihzZWxmLmxvZ2dlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmFyeT13ZWJkcml2ZXJfYmlu
YXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncz13ZWJkcml2
ZXJfYXJncykKKyAgICAgICAgc2VsZi53ZWJkcml2ZXJfaG9zdCA9ICJsb2NhbGhvc3QiCisgICAg
ICAgIHNlbGYud2ViZHJpdmVyX3BvcnQgPSBzZWxmLnNlcnZlci5wb3J0CisKKyAgICBkZWYgc3Rh
cnQoc2VsZiwgKiprd2FyZ3MpOgorICAgICAgICBwcmludCBzZWxmLnNlcnZlci51cmwKKyAgICAg
ICAgc2VsZi5zZXJ2ZXIuc3RhcnQoKQorCisgICAgZGVmIHN0b3Aoc2VsZiwgZm9yY2U9RmFsc2Up
OgorICAgICAgICBzZWxmLnNlcnZlci5zdG9wKGZvcmNlPWZvcmNlKQorCisgICAgZGVmIHBpZChz
ZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuc2VydmVyLnBpZAorCisgICAgZGVmIGlzX2FsaXZl
KHNlbGYpOgorICAgICAgICAjIFRPRE8oYXRvKTogVGhpcyBvbmx5IGluZGljYXRlcyB0aGUgc2Vy
dmVyIGlzIGFsaXZlLAorICAgICAgICAjIGFuZCBkb2Vzbid0IHNheSBhbnl0aGluZyBhYm91dCB3
aGV0aGVyIGEgYnJvd3NlciBzZXNzaW9uCisgICAgICAgICMgaXMgYWN0aXZlLgorICAgICAgICBy
ZXR1cm4gc2VsZi5zZXJ2ZXIuaXNfYWxpdmUoKQorCisgICAgZGVmIGNsZWFudXAoc2VsZik6Cisg
ICAgICAgIHNlbGYuc3RvcCgpCisKKyAgICBkZWYgZXhlY3V0b3JfYnJvd3NlcihzZWxmKToKKyAg
ICAgICAgcmV0dXJuIEV4ZWN1dG9yQnJvd3NlciwgeyJ3ZWJkcml2ZXJfdXJsIjogc2VsZi5zZXJ2
ZXIudXJsfQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dw
dHJ1bm5lci93cHRydW5uZXIvYnJvd3NlcnMvZmlyZWZveC5weSBiL1dlYkRyaXZlclRlc3RzL2lt
cG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2Jyb3dzZXJzL2ZpcmVmb3gucHkK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjFlZDJjNzNkNDk0Ci0tLSAv
ZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5l
ci93cHRydW5uZXIvYnJvd3NlcnMvZmlyZWZveC5weQpAQCAtMCwwICsxLDM3OCBAQAoraW1wb3J0
IG9zCitpbXBvcnQgcGxhdGZvcm0KK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzdWJwcm9jZXNzCitp
bXBvcnQgc3lzCisKK2ltcG9ydCBtb3ppbmZvCitpbXBvcnQgbW96bGVhaworZnJvbSBtb3pwcm9j
ZXNzIGltcG9ydCBQcm9jZXNzSGFuZGxlcgorZnJvbSBtb3pwcm9maWxlIGltcG9ydCBGaXJlZm94
UHJvZmlsZSwgUHJlZmVyZW5jZXMKK2Zyb20gbW96cHJvZmlsZS5wZXJtaXNzaW9ucyBpbXBvcnQg
U2VydmVyTG9jYXRpb25zCitmcm9tIG1venJ1bm5lciBpbXBvcnQgRmlyZWZveFJ1bm5lcgorZnJv
bSBtb3pydW5uZXIudXRpbHMgaW1wb3J0IGdldF9zdGFja19maXhlcl9mdW5jdGlvbgorZnJvbSBt
b3pjcmFzaCBpbXBvcnQgbW96Y3Jhc2gKKworZnJvbSAuYmFzZSBpbXBvcnQgKGdldF9mcmVlX3Bv
cnQsCisgICAgICAgICAgICAgICAgICAgQnJvd3NlciwKKyAgICAgICAgICAgICAgICAgICBFeGVj
dXRvckJyb3dzZXIsCisgICAgICAgICAgICAgICAgICAgcmVxdWlyZV9hcmcsCisgICAgICAgICAg
ICAgICAgICAgY21kX2FyZywKKyAgICAgICAgICAgICAgICAgICBicm93c2VyX2NvbW1hbmQpCitm
cm9tIC4uZXhlY3V0b3JzIGltcG9ydCBleGVjdXRvcl9rd2FyZ3MgYXMgYmFzZV9leGVjdXRvcl9r
d2FyZ3MKK2Zyb20gLi5leGVjdXRvcnMuZXhlY3V0b3JtYXJpb25ldHRlIGltcG9ydCAoTWFyaW9u
ZXR0ZVRlc3RoYXJuZXNzRXhlY3V0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE1hcmlvbmV0dGVSZWZUZXN0RXhlY3V0b3IsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hcmlvbmV0dGVXZHNwZWNFeGVjdXRvcikKK2Zy
b20gLi5lbnZpcm9ubWVudCBpbXBvcnQgaG9zdG5hbWVzCisKKworaGVyZSA9IG9zLnBhdGguam9p
bihvcy5wYXRoLnNwbGl0KF9fZmlsZV9fKVswXSkKKworX193cHRydW5uZXJfXyA9IHsicHJvZHVj
dCI6ICJmaXJlZm94IiwKKyAgICAgICAgICAgICAgICAgImNoZWNrX2FyZ3MiOiAiY2hlY2tfYXJn
cyIsCisgICAgICAgICAgICAgICAgICJicm93c2VyIjogIkZpcmVmb3hCcm93c2VyIiwKKyAgICAg
ICAgICAgICAgICAgImV4ZWN1dG9yIjogeyJ0ZXN0aGFybmVzcyI6ICJNYXJpb25ldHRlVGVzdGhh
cm5lc3NFeGVjdXRvciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVmdGVzdCI6
ICJNYXJpb25ldHRlUmVmVGVzdEV4ZWN1dG9yIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJ3ZHNwZWMiOiAiTWFyaW9uZXR0ZVdkc3BlY0V4ZWN1dG9yIn0sCisgICAgICAgICAgICAg
ICAgICJicm93c2VyX2t3YXJncyI6ICJicm93c2VyX2t3YXJncyIsCisgICAgICAgICAgICAgICAg
ICJleGVjdXRvcl9rd2FyZ3MiOiAiZXhlY3V0b3Jfa3dhcmdzIiwKKyAgICAgICAgICAgICAgICAg
ImVudl9leHRyYXMiOiAiZW52X2V4dHJhcyIsCisgICAgICAgICAgICAgICAgICJlbnZfb3B0aW9u
cyI6ICJlbnZfb3B0aW9ucyIsCisgICAgICAgICAgICAgICAgICJydW5faW5mb19leHRyYXMiOiAi
cnVuX2luZm9fZXh0cmFzIiwKKyAgICAgICAgICAgICAgICAgInVwZGF0ZV9wcm9wZXJ0aWVzIjog
InVwZGF0ZV9wcm9wZXJ0aWVzIn0KKworCitkZWYgZ2V0X3RpbWVvdXRfbXVsdGlwbGllcih0ZXN0
X3R5cGUsIHJ1bl9pbmZvX2RhdGEsICoqa3dhcmdzKToKKyAgICBpZiBrd2FyZ3NbInRpbWVvdXRf
bXVsdGlwbGllciJdIGlzIG5vdCBOb25lOgorICAgICAgICByZXR1cm4ga3dhcmdzWyJ0aW1lb3V0
X211bHRpcGxpZXIiXQorICAgIGlmIHRlc3RfdHlwZSA9PSAicmVmdGVzdCI6CisgICAgICAgIGlm
IHJ1bl9pbmZvX2RhdGFbImRlYnVnIl0gb3IgcnVuX2luZm9fZGF0YS5nZXQoImFzYW4iKToKKyAg
ICAgICAgICAgIHJldHVybiA0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gMgor
ICAgIGVsaWYgcnVuX2luZm9fZGF0YVsiZGVidWciXSBvciBydW5faW5mb19kYXRhLmdldCgiYXNh
biIpOgorICAgICAgICByZXR1cm4gMworICAgIHJldHVybiAxCisKKworZGVmIGNoZWNrX2FyZ3Mo
Kiprd2FyZ3MpOgorICAgIHJlcXVpcmVfYXJnKGt3YXJncywgImJpbmFyeSIpCisgICAgaWYga3dh
cmdzWyJzc2xfdHlwZSJdICE9ICJub25lIjoKKyAgICAgICAgcmVxdWlyZV9hcmcoa3dhcmdzLCAi
Y2VydHV0aWxfYmluYXJ5IikKKworCitkZWYgYnJvd3Nlcl9rd2FyZ3ModGVzdF90eXBlLCBydW5f
aW5mb19kYXRhLCAqKmt3YXJncyk6CisgICAgcmV0dXJuIHsiYmluYXJ5Ijoga3dhcmdzWyJiaW5h
cnkiXSwKKyAgICAgICAgICAgICJwcmVmc19yb290Ijoga3dhcmdzWyJwcmVmc19yb290Il0sCisg
ICAgICAgICAgICAiZXh0cmFfcHJlZnMiOiBrd2FyZ3NbImV4dHJhX3ByZWZzIl0sCisgICAgICAg
ICAgICAidGVzdF90eXBlIjogdGVzdF90eXBlLAorICAgICAgICAgICAgImRlYnVnX2luZm8iOiBr
d2FyZ3NbImRlYnVnX2luZm8iXSwKKyAgICAgICAgICAgICJzeW1ib2xzX3BhdGgiOiBrd2FyZ3Nb
InN5bWJvbHNfcGF0aCJdLAorICAgICAgICAgICAgInN0YWNrd2Fsa19iaW5hcnkiOiBrd2FyZ3Nb
InN0YWNrd2Fsa19iaW5hcnkiXSwKKyAgICAgICAgICAgICJjZXJ0dXRpbF9iaW5hcnkiOiBrd2Fy
Z3NbImNlcnR1dGlsX2JpbmFyeSJdLAorICAgICAgICAgICAgImNhX2NlcnRpZmljYXRlX3BhdGgi
OiBrd2FyZ3NbInNzbF9lbnYiXS5jYV9jZXJ0X3BhdGgoKSwKKyAgICAgICAgICAgICJlMTBzIjog
a3dhcmdzWyJnZWNrb19lMTBzIl0sCisgICAgICAgICAgICAic3RhY2tmaXhfZGlyIjoga3dhcmdz
WyJzdGFja2ZpeF9kaXIiXSwKKyAgICAgICAgICAgICJiaW5hcnlfYXJncyI6IGt3YXJnc1siYmlu
YXJ5X2FyZ3MiXSwKKyAgICAgICAgICAgICJ0aW1lb3V0X211bHRpcGxpZXIiOiBnZXRfdGltZW91
dF9tdWx0aXBsaWVyKHRlc3RfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bl9pbmZvX2RhdGEsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKmt3YXJncyksCisgICAg
ICAgICAgICAibGVha19jaGVjayI6IGt3YXJnc1sibGVha19jaGVjayJdLAorICAgICAgICAgICAg
InN0eWxvX3RocmVhZHMiOiBrd2FyZ3NbInN0eWxvX3RocmVhZHMiXX0KKworCitkZWYgZXhlY3V0
b3Jfa3dhcmdzKHRlc3RfdHlwZSwgc2VydmVyX2NvbmZpZywgY2FjaGVfbWFuYWdlciwgcnVuX2lu
Zm9fZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpOgorICAgIGV4ZWN1dG9yX2t3
YXJncyA9IGJhc2VfZXhlY3V0b3Jfa3dhcmdzKHRlc3RfdHlwZSwgc2VydmVyX2NvbmZpZywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZV9tYW5hZ2VyLCAq
Kmt3YXJncykKKyAgICBleGVjdXRvcl9rd2FyZ3NbImNsb3NlX2FmdGVyX2RvbmUiXSA9IHRlc3Rf
dHlwZSAhPSAicmVmdGVzdCIKKyAgICBleGVjdXRvcl9rd2FyZ3NbInRpbWVvdXRfbXVsdGlwbGll
ciJdID0gZ2V0X3RpbWVvdXRfbXVsdGlwbGllcih0ZXN0X3R5cGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuX2lu
Zm9fZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAqKmt3YXJncykKKyAgICBpZiB0ZXN0X3R5cGUgPT0gInJlZnRl
c3QiOgorICAgICAgICBleGVjdXRvcl9rd2FyZ3NbInJlZnRlc3RfaW50ZXJuYWwiXSA9IGt3YXJn
c1sicmVmdGVzdF9pbnRlcm5hbCJdCisgICAgICAgIGV4ZWN1dG9yX2t3YXJnc1sicmVmdGVzdF9z
Y3JlZW5zaG90Il0gPSBrd2FyZ3NbInJlZnRlc3Rfc2NyZWVuc2hvdCJdCisgICAgaWYgdGVzdF90
eXBlID09ICJ3ZHNwZWMiOgorICAgICAgICBmeE9wdGlvbnMgPSB7fQorICAgICAgICBpZiBrd2Fy
Z3NbImJpbmFyeSJdOgorICAgICAgICAgICAgZnhPcHRpb25zWyJiaW5hcnkiXSA9IGt3YXJnc1si
YmluYXJ5Il0KKyAgICAgICAgaWYga3dhcmdzWyJiaW5hcnlfYXJncyJdOgorICAgICAgICAgICAg
ZnhPcHRpb25zWyJhcmdzIl0gPSBrd2FyZ3NbImJpbmFyeV9hcmdzIl0KKyAgICAgICAgZnhPcHRp
b25zWyJwcmVmcyJdID0geworICAgICAgICAgICAgIm5ldHdvcmsuZG5zLmxvY2FsRG9tYWlucyI6
ICIsIi5qb2luKGhvc3RuYW1lcykKKyAgICAgICAgfQorICAgICAgICBjYXBhYmlsaXRpZXMgPSB7
Im1vejpmaXJlZm94T3B0aW9ucyI6IGZ4T3B0aW9uc30KKyAgICAgICAgZXhlY3V0b3Jfa3dhcmdz
WyJjYXBhYmlsaXRpZXMiXSA9IGNhcGFiaWxpdGllcworICAgIHJldHVybiBleGVjdXRvcl9rd2Fy
Z3MKKworCitkZWYgZW52X2V4dHJhcygqKmt3YXJncyk6CisgICAgcmV0dXJuIFtdCisKKworZGVm
IGVudl9vcHRpb25zKCk6CisgICAgcmV0dXJuIHsiaG9zdCI6ICIxMjcuMC4wLjEiLAorICAgICAg
ICAgICAgImV4dGVybmFsX2hvc3QiOiAid2ViLXBsYXRmb3JtLnRlc3QiLAorICAgICAgICAgICAg
ImJpbmRfaG9zdG5hbWUiOiAiZmFsc2UiLAorICAgICAgICAgICAgImNlcnRpZmljYXRlX2RvbWFp
biI6ICJ3ZWItcGxhdGZvcm0udGVzdCIsCisgICAgICAgICAgICAic3VwcG9ydHNfZGVidWdnZXIi
OiBUcnVlfQorCisKK2RlZiBydW5faW5mb19leHRyYXMoKiprd2FyZ3MpOgorICAgIHJldHVybiB7
ImUxMHMiOiBrd2FyZ3NbImdlY2tvX2UxMHMiXSwKKyAgICAgICAgICAgICJoZWFkbGVzcyI6ICJN
T1pfSEVBRExFU1MiIGluIG9zLmVudmlyb259CisKKworZGVmIHVwZGF0ZV9wcm9wZXJ0aWVzKCk6
CisgICAgcmV0dXJuIChbImRlYnVnIiwgInN0eWxvIiwgImUxMHMiLCAib3MiLCAidmVyc2lvbiIs
ICJwcm9jZXNzb3IiLCAiYml0cyJdLAorICAgICAgICAgICAgeyJkZWJ1ZyIsICJlMTBzIiwgInN0
eWxvIn0pCisKKworY2xhc3MgRmlyZWZveEJyb3dzZXIoQnJvd3Nlcik6CisgICAgdXNlZF9wb3J0
cyA9IHNldCgpCisgICAgaW5pdF90aW1lb3V0ID0gNjAKKyAgICBzaHV0ZG93bl90aW1lb3V0ID0g
NjAKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2dnZXIsIGJpbmFyeSwgcHJlZnNfcm9vdCwg
dGVzdF90eXBlLCBleHRyYV9wcmVmcz1Ob25lLCBkZWJ1Z19pbmZvPU5vbmUsCisgICAgICAgICAg
ICAgICAgIHN5bWJvbHNfcGF0aD1Ob25lLCBzdGFja3dhbGtfYmluYXJ5PU5vbmUsIGNlcnR1dGls
X2JpbmFyeT1Ob25lLAorICAgICAgICAgICAgICAgICBjYV9jZXJ0aWZpY2F0ZV9wYXRoPU5vbmUs
IGUxMHM9RmFsc2UsIHN0YWNrZml4X2Rpcj1Ob25lLAorICAgICAgICAgICAgICAgICBiaW5hcnlf
YXJncz1Ob25lLCB0aW1lb3V0X211bHRpcGxpZXI9Tm9uZSwgbGVha19jaGVjaz1GYWxzZSwgc3R5
bG9fdGhyZWFkcz0xKToKKyAgICAgICAgQnJvd3Nlci5fX2luaXRfXyhzZWxmLCBsb2dnZXIpCisg
ICAgICAgIHNlbGYuYmluYXJ5ID0gYmluYXJ5CisgICAgICAgIHNlbGYucHJlZnNfcm9vdCA9IHBy
ZWZzX3Jvb3QKKyAgICAgICAgc2VsZi50ZXN0X3R5cGUgPSB0ZXN0X3R5cGUKKyAgICAgICAgc2Vs
Zi5leHRyYV9wcmVmcyA9IGV4dHJhX3ByZWZzCisgICAgICAgIHNlbGYubWFyaW9uZXR0ZV9wb3J0
ID0gTm9uZQorICAgICAgICBzZWxmLnJ1bm5lciA9IE5vbmUKKyAgICAgICAgc2VsZi5kZWJ1Z19p
bmZvID0gZGVidWdfaW5mbworICAgICAgICBzZWxmLnByb2ZpbGUgPSBOb25lCisgICAgICAgIHNl
bGYuc3ltYm9sc19wYXRoID0gc3ltYm9sc19wYXRoCisgICAgICAgIHNlbGYuc3RhY2t3YWxrX2Jp
bmFyeSA9IHN0YWNrd2Fsa19iaW5hcnkKKyAgICAgICAgc2VsZi5jYV9jZXJ0aWZpY2F0ZV9wYXRo
ID0gY2FfY2VydGlmaWNhdGVfcGF0aAorICAgICAgICBzZWxmLmNlcnR1dGlsX2JpbmFyeSA9IGNl
cnR1dGlsX2JpbmFyeQorICAgICAgICBzZWxmLmUxMHMgPSBlMTBzCisgICAgICAgIHNlbGYuYmlu
YXJ5X2FyZ3MgPSBiaW5hcnlfYXJncworICAgICAgICBpZiBzZWxmLnN5bWJvbHNfcGF0aCBhbmQg
c3RhY2tmaXhfZGlyOgorICAgICAgICAgICAgc2VsZi5zdGFja19maXhlciA9IGdldF9zdGFja19m
aXhlcl9mdW5jdGlvbihzdGFja2ZpeF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3ltYm9sc19wYXRoKQorICAgICAgICBl
bHNlOgorICAgICAgICAgICAgc2VsZi5zdGFja19maXhlciA9IE5vbmUKKworICAgICAgICBpZiB0
aW1lb3V0X211bHRpcGxpZXI6CisgICAgICAgICAgICBzZWxmLmluaXRfdGltZW91dCA9IHNlbGYu
aW5pdF90aW1lb3V0ICogdGltZW91dF9tdWx0aXBsaWVyCisKKyAgICAgICAgc2VsZi5sZWFrX3Jl
cG9ydF9maWxlID0gTm9uZQorICAgICAgICBzZWxmLmxlYWtfY2hlY2sgPSBsZWFrX2NoZWNrCisg
ICAgICAgIHNlbGYuc3R5bG9fdGhyZWFkcyA9IHN0eWxvX3RocmVhZHMKKworICAgIGRlZiBzZXR0
aW5ncyhzZWxmLCB0ZXN0KToKKyAgICAgICAgcmV0dXJuIHsiY2hlY2tfbGVha3MiOiBzZWxmLmxl
YWtfY2hlY2sgYW5kIG5vdCB0ZXN0LmxlYWtzfQorCisgICAgZGVmIHN0YXJ0KHNlbGYsICoqa3dh
cmdzKToKKyAgICAgICAgaWYgc2VsZi5tYXJpb25ldHRlX3BvcnQgaXMgTm9uZToKKyAgICAgICAg
ICAgIHNlbGYubWFyaW9uZXR0ZV9wb3J0ID0gZ2V0X2ZyZWVfcG9ydCgyODI4LCBleGNsdWRlPXNl
bGYudXNlZF9wb3J0cykKKyAgICAgICAgICAgIHNlbGYudXNlZF9wb3J0cy5hZGQoc2VsZi5tYXJp
b25ldHRlX3BvcnQpCisKKyAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAg
ZW52WyJNT1pfQ1JBU0hSRVBPUlRFUiJdID0gIjEiCisgICAgICAgIGVudlsiTU9aX0NSQVNIUkVQ
T1JURVJfU0hVVERPV04iXSA9ICIxIgorICAgICAgICBlbnZbIk1PWl9ESVNBQkxFX05PTkxPQ0FM
X0NPTk5FQ1RJT05TIl0gPSAiMSIKKyAgICAgICAgZW52WyJTVFlMT19USFJFQURTIl0gPSBzdHIo
c2VsZi5zdHlsb190aHJlYWRzKQorCisgICAgICAgIGxvY2F0aW9ucyA9IFNlcnZlckxvY2F0aW9u
cyhmaWxlbmFtZT1vcy5wYXRoLmpvaW4oaGVyZSwgInNlcnZlci1sb2NhdGlvbnMudHh0IikpCisK
KyAgICAgICAgcHJlZmVyZW5jZXMgPSBzZWxmLmxvYWRfcHJlZnMoKQorCisgICAgICAgIHNlbGYu
cHJvZmlsZSA9IEZpcmVmb3hQcm9maWxlKGxvY2F0aW9ucz1sb2NhdGlvbnMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZlcmVuY2VzPXByZWZlcmVuY2VzKQorICAg
ICAgICBzZWxmLnByb2ZpbGUuc2V0X3ByZWZlcmVuY2VzKHsibWFyaW9uZXR0ZS5wb3J0Ijogc2Vs
Zi5tYXJpb25ldHRlX3BvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJkb20uZGlzYWJsZV9vcGVuX2R1cmluZ19sb2FkIjogRmFsc2UsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJuZXR3b3JrLmRucy5sb2NhbERvbWFpbnMiOiAiLCIuam9p
bihob3N0bmFtZXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmV0
d29yay5wcm94eS50eXBlIjogMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgInBsYWNlcy5oaXN0b3J5LmVuYWJsZWQiOiBGYWxzZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImRvbS5zZW5kX2FmdGVyX3BhaW50X3RvX2NvbnRlbnQiOiBUcnVl
fSkKKyAgICAgICAgaWYgc2VsZi5lMTBzOgorICAgICAgICAgICAgc2VsZi5wcm9maWxlLnNldF9w
cmVmZXJlbmNlcyh7ImJyb3dzZXIudGFicy5yZW1vdGUuYXV0b3N0YXJ0IjogVHJ1ZX0pCisKKyAg
ICAgICAgaWYgc2VsZi50ZXN0X3R5cGUgPT0gInJlZnRlc3QiOgorICAgICAgICAgICAgc2VsZi5w
cm9maWxlLnNldF9wcmVmZXJlbmNlcyh7ImxheW91dC5pbnRlcnJ1cHRpYmxlLXJlZmxvdy5lbmFi
bGVkIjogRmFsc2V9KQorCisgICAgICAgIGlmIHNlbGYubGVha19jaGVjayBhbmQga3dhcmdzLmdl
dCgiY2hlY2tfbGVha3MiLCBUcnVlKToKKyAgICAgICAgICAgIHNlbGYubGVha19yZXBvcnRfZmls
ZSA9IG9zLnBhdGguam9pbihzZWxmLnByb2ZpbGUucHJvZmlsZSwgInJ1bnRlc3RzX2xlYWtzLmxv
ZyIpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLmxlYWtfcmVwb3J0X2ZpbGUp
OgorICAgICAgICAgICAgICAgIG9zLnJlbW92ZShzZWxmLmxlYWtfcmVwb3J0X2ZpbGUpCisgICAg
ICAgICAgICBlbnZbIlhQQ09NX01FTV9CTE9BVF9MT0ciXSA9IHNlbGYubGVha19yZXBvcnRfZmls
ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5sZWFrX3JlcG9ydF9maWxlID0gTm9u
ZQorCisgICAgICAgICMgQnVnIDEyNjI5NTQ6IHdpbnhwICsgZTEwcywgZGlzYWJsZSBod2FjY2Vs
CisgICAgICAgIGlmIChzZWxmLmUxMHMgYW5kIHBsYXRmb3JtLnN5c3RlbSgpIGluICgiV2luZG93
cyIsICJNaWNyb3NvZnQiKSBhbmQKKyAgICAgICAgICAgICc1LjEnIGluIHBsYXRmb3JtLnZlcnNp
b24oKSk6CisgICAgICAgICAgICBzZWxmLnByb2ZpbGUuc2V0X3ByZWZlcmVuY2VzKHsibGF5ZXJz
LmFjY2VsZXJhdGlvbi5kaXNhYmxlZCI6IFRydWV9KQorCisgICAgICAgIGlmIHNlbGYuY2FfY2Vy
dGlmaWNhdGVfcGF0aCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuc2V0dXBfc3NsKCkK
KworICAgICAgICBkZWJ1Z19hcmdzLCBjbWQgPSBicm93c2VyX2NvbW1hbmQoc2VsZi5iaW5hcnks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJpbmFyeV9h
cmdzIGlmIHNlbGYuYmluYXJ5X2FyZ3MgZWxzZSBbXSArCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBbY21kX2FyZygibWFyaW9uZXR0ZSIpLCAiYWJvdXQ6Ymxhbmsi
XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGVidWdf
aW5mbykKKworICAgICAgICBzZWxmLnJ1bm5lciA9IEZpcmVmb3hSdW5uZXIocHJvZmlsZT1zZWxm
LnByb2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5hcnk9Y21k
WzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kYXJncz1jbWRbMTpd
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52PWVudiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NfY2xhc3M9UHJvY2Vzc0hhbmRsZXIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzX2FyZ3M9eyJwcm9j
ZXNzT3V0cHV0TGluZSI6IFtzZWxmLm9uX291dHB1dF19KQorCisgICAgICAgIHNlbGYubG9nZ2Vy
LmRlYnVnKCJTdGFydGluZyBGaXJlZm94IikKKworICAgICAgICBzZWxmLnJ1bm5lci5zdGFydChk
ZWJ1Z19hcmdzPWRlYnVnX2FyZ3MsIGludGVyYWN0aXZlPXNlbGYuZGVidWdfaW5mbyBhbmQgc2Vs
Zi5kZWJ1Z19pbmZvLmludGVyYWN0aXZlKQorICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1ZygiRmly
ZWZveCBTdGFydGVkIikKKworICAgIGRlZiBsb2FkX3ByZWZzKHNlbGYpOgorICAgICAgICBwcmVm
cyA9IFByZWZlcmVuY2VzKCkKKworICAgICAgICBwcmVmc19wYXRoID0gb3MucGF0aC5qb2luKHNl
bGYucHJlZnNfcm9vdCwgInByZWZzX2dlbmVyYWwuanMiKQorICAgICAgICBpZiBvcy5wYXRoLmV4
aXN0cyhwcmVmc19wYXRoKToKKyAgICAgICAgICAgIHByZWZzLmFkZChQcmVmZXJlbmNlcy5yZWFk
X3ByZWZzKHByZWZzX3BhdGgpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5sb2dn
ZXIud2FybmluZygiRmFpbGVkIHRvIGZpbmQgYmFzZSBwcmVmcyBmaWxlIGluICVzIiAlIHByZWZz
X3BhdGgpCisKKyAgICAgICAgIyBBZGQgYW55IGN1c3RvbSBwcmVmZXJlbmNlcworICAgICAgICBw
cmVmcy5hZGQoc2VsZi5leHRyYV9wcmVmcywgY2FzdD1UcnVlKQorCisgICAgICAgIHJldHVybiBw
cmVmcygpCisKKyAgICBkZWYgc3RvcChzZWxmLCBmb3JjZT1GYWxzZSk6CisgICAgICAgIGlmIHNl
bGYucnVubmVyIGlzIG5vdCBOb25lIGFuZCBzZWxmLnJ1bm5lci5pc19ydW5uaW5nKCk6CisgICAg
ICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgIyBGb3IgRmlyZWZveCB3ZSBhc3N1bWUgdGhh
dCBzdG9wcGluZyB0aGUgcnVubmVyIHByb21wdHMgdGhlCisgICAgICAgICAgICAgICAgIyBicm93
c2VyIHRvIHNodXQgZG93bi4gVGhpcyBhbGxvd3MgdGhlIGxlYWsgbG9nIHRvIGJlIHdyaXR0ZW4K
KyAgICAgICAgICAgICAgICBmb3IgY2xlYW4sIHN0b3BfZiBpbiBbKFRydWUsIGxhbWJkYTogc2Vs
Zi5ydW5uZXIud2FpdChzZWxmLnNodXRkb3duX3RpbWVvdXQpKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKEZhbHNlLCBsYW1iZGE6IHNlbGYucnVubmVyLnN0b3Aoc2ln
bmFsLlNJR1RFUk0pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZh
bHNlLCBsYW1iZGE6IHNlbGYucnVubmVyLnN0b3Aoc2lnbmFsLlNJR0tJTEwpKV06CisgICAgICAg
ICAgICAgICAgICAgIGlmIG5vdCBmb3JjZSBvciBub3QgY2xlYW46CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXRjb2RlID0gc3RvcF9mKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJl
dGNvZGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dn
ZXIuaW5mbygiQnJvd3NlciBleGl0ZWQgd2l0aCByZXR1cm4gY29kZSAlcyIgJSByZXRjb2RlKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBleGNlcHQgT1NF
cnJvcjoKKyAgICAgICAgICAgICAgICAjIFRoaXMgY2FuIGhhcHBlbiBvbiBXaW5kb3dzIGlmIHRo
ZSBwcm9jZXNzIGlzIGFscmVhZHkgZGVhZAorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAg
c2VsZi5sb2dnZXIuZGVidWcoInN0b3BwZWQiKQorCisgICAgZGVmIHByb2Nlc3NfbGVha3Moc2Vs
Zik6CisgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJQUk9DRVNTIExFQUtTICVzIiAlIHNlbGYu
bGVha19yZXBvcnRfZmlsZSkKKyAgICAgICAgaWYgc2VsZi5sZWFrX3JlcG9ydF9maWxlIGlzIE5v
bmU6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgbW96bGVhay5wcm9jZXNzX2xlYWtfbG9n
KAorICAgICAgICAgICAgc2VsZi5sZWFrX3JlcG9ydF9maWxlLAorICAgICAgICAgICAgbGVha190
aHJlc2hvbGRzPXsKKyAgICAgICAgICAgICAgICAiZGVmYXVsdCI6IDAsCisgICAgICAgICAgICAg
ICAgInRhYiI6IDEwMDAwLCAgIyBTZWUgZGVwZW5kZW5jaWVzIG9mIGJ1ZyAxMDUxMjMwLgorICAg
ICAgICAgICAgICAgICMgR01QIHJhcmVseSBnZXRzIGEgbG9nLCBidXQgd2hlbiBpdCBkb2VzLCBp
dCBsZWFrcyBhIGxpdHRsZS4KKyAgICAgICAgICAgICAgICAiZ2Vja29tZWRpYXBsdWdpbiI6IDIw
MDAwLAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGlnbm9yZV9taXNzaW5nX2xlYWtzPVsi
Z2Vja29tZWRpYXBsdWdpbiJdLAorICAgICAgICAgICAgbG9nPXNlbGYubG9nZ2VyLAorICAgICAg
ICAgICAgc3RhY2tfZml4ZXI9c2VsZi5zdGFja19maXhlcgorICAgICAgICApCisKKyAgICBkZWYg
cGlkKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnJ1bm5lci5wcm9jZXNzX2hhbmRsZXIgaXMgTm9u
ZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAg
cmV0dXJuIHNlbGYucnVubmVyLnByb2Nlc3NfaGFuZGxlci5waWQKKyAgICAgICAgZXhjZXB0IEF0
dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBvbl9vdXRw
dXQoc2VsZiwgbGluZSk6CisgICAgICAgICIiIldyaXRlIGEgbGluZSBvZiBvdXRwdXQgZnJvbSB0
aGUgZmlyZWZveCBwcm9jZXNzIHRvIHRoZSBsb2ciIiIKKyAgICAgICAgZGF0YSA9IGxpbmUuZGVj
b2RlKCJ1dGY4IiwgInJlcGxhY2UiKQorICAgICAgICBpZiBzZWxmLnN0YWNrX2ZpeGVyOgorICAg
ICAgICAgICAgZGF0YSA9IHNlbGYuc3RhY2tfZml4ZXIoZGF0YSkKKyAgICAgICAgc2VsZi5sb2dn
ZXIucHJvY2Vzc19vdXRwdXQoc2VsZi5waWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFu
ZD0iICIuam9pbihzZWxmLnJ1bm5lci5jb21tYW5kKSkKKworICAgIGRlZiBpc19hbGl2ZShzZWxm
KToKKyAgICAgICAgaWYgc2VsZi5ydW5uZXI6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5ydW5u
ZXIuaXNfcnVubmluZygpCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGNsZWFudXAo
c2VsZik6CisgICAgICAgIHNlbGYuc3RvcCgpCisgICAgICAgIHNlbGYucHJvY2Vzc19sZWFrcygp
CisKKyAgICBkZWYgZXhlY3V0b3JfYnJvd3NlcihzZWxmKToKKyAgICAgICAgYXNzZXJ0IHNlbGYu
bWFyaW9uZXR0ZV9wb3J0IGlzIG5vdCBOb25lCisgICAgICAgIHJldHVybiBFeGVjdXRvckJyb3dz
ZXIsIHsibWFyaW9uZXR0ZV9wb3J0Ijogc2VsZi5tYXJpb25ldHRlX3BvcnR9CisKKyAgICBkZWYg
Y2hlY2tfZm9yX2NyYXNoZXMoc2VsZik6CisgICAgICAgIGR1bXBfZGlyID0gb3MucGF0aC5qb2lu
KHNlbGYucHJvZmlsZS5wcm9maWxlLCAibWluaWR1bXBzIikKKworICAgICAgICByZXR1cm4gYm9v
bChtb3pjcmFzaC5jaGVja19mb3JfY3Jhc2hlcyhkdW1wX2RpciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sc19wYXRoPXNlbGYuc3ltYm9sc19w
YXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFj
a3dhbGtfYmluYXJ5PXNlbGYuc3RhY2t3YWxrX2JpbmFyeSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVpZXQ9VHJ1ZSkpCisKKyAgICBkZWYgbG9nX2Ny
YXNoKHNlbGYsIHByb2Nlc3MsIHRlc3QpOgorICAgICAgICBkdW1wX2RpciA9IG9zLnBhdGguam9p
bihzZWxmLnByb2ZpbGUucHJvZmlsZSwgIm1pbmlkdW1wcyIpCisKKyAgICAgICAgbW96Y3Jhc2gu
bG9nX2NyYXNoZXMoc2VsZi5sb2dnZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1
bXBfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2xzX3BhdGg9c2VsZi5z
eW1ib2xzX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrd2Fsa19iaW5h
cnk9c2VsZi5zdGFja3dhbGtfYmluYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
cm9jZXNzPXByb2Nlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Q9dGVzdCkK
KworICAgIGRlZiBzZXR1cF9zc2woc2VsZik6CisgICAgICAgICIiIkNyZWF0ZSBhIGNlcnRpZmlj
YXRlIGRhdGFiYXNlIHRvIHVzZSBpbiB0aGUgdGVzdCBwcm9maWxlLiBUaGlzIGlzIGNvbmZpZ3Vy
ZWQKKyAgICAgICAgdG8gdHJ1c3QgdGhlIENBIENlcnRpZmljYXRlIHRoYXQgaGFzIHNpZ25lZCB0
aGUgd2ViLXBsYXRmb3JtLnRlc3Qgc2VydmVyCisgICAgICAgIGNlcnRpZmljYXRlLiIiIgorCisg
ICAgICAgIHNlbGYubG9nZ2VyLmluZm8oIlNldHRpbmcgdXAgc3NsIikKKworICAgICAgICAjIE1h
a2Ugc3VyZSB0aGUgY2VydHV0aWwgbGlicmFyaWVzIGZyb20gdGhlIHNvdXJjZSB0cmVlIGFyZSBs
b2FkZWQgd2hlbiB1c2luZyBhCisgICAgICAgICMgbG9jYWwgY29weSBvZiBjZXJ0dXRpbAorICAg
ICAgICAjIFRPRE86IE1heWJlIG9ubHkgc2V0IHRoaXMgaWYgY2VydHV0aWwgd29uJ3QgbGF1bmNo
PworICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICBjZXJ0dXRpbF9kaXIg
PSBvcy5wYXRoLmRpcm5hbWUoc2VsZi5iaW5hcnkpCisgICAgICAgIGlmIG1vemluZm8uaXNNYWM6
CisgICAgICAgICAgICBlbnZfdmFyID0gIkRZTERfTElCUkFSWV9QQVRIIgorICAgICAgICBlbGlm
IG1vemluZm8uaXNVbml4OgorICAgICAgICAgICAgZW52X3ZhciA9ICJMRF9MSUJSQVJZX1BBVEgi
CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBlbnZfdmFyID0gIlBBVEgiCisKKworICAgICAg
ICBlbnZbZW52X3Zhcl0gPSAob3MucGF0aC5wYXRoc2VwLmpvaW4oW2NlcnR1dGlsX2RpciwgZW52
W2Vudl92YXJdXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGVudl92YXIgaW4gZW52IGVs
c2UgY2VydHV0aWxfZGlyKS5lbmNvZGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmcoKSBvciAndXRmLTgnLCAncmVwbGFjZScpCisKKyAg
ICAgICAgZGVmIGNlcnR1dGlsKCphcmdzKToKKyAgICAgICAgICAgIGNtZCA9IFtzZWxmLmNlcnR1
dGlsX2JpbmFyeV0gKyBsaXN0KGFyZ3MpCisgICAgICAgICAgICBzZWxmLmxvZ2dlci5wcm9jZXNz
X291dHB1dCgiY2VydHV0aWwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52PWVudiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
ZGVycj1zdWJwcm9jZXNzLlNURE9VVCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiICIuam9pbihjbWQpKQorCisgICAgICAgIHB3X3BhdGggPSBvcy5wYXRoLmpvaW4o
c2VsZi5wcm9maWxlLnByb2ZpbGUsICIuY3J0ZGJwdyIpCisgICAgICAgIHdpdGggb3Blbihwd19w
YXRoLCAidyIpIGFzIGY6CisgICAgICAgICAgICAjIFVzZSBlbXB0eSBwYXNzd29yZCBmb3IgY2Vy
dGlmaWNhdGUgZGIKKyAgICAgICAgICAgIGYud3JpdGUoIlxuIikKKworICAgICAgICBjZXJ0X2Ri
X3BhdGggPSBzZWxmLnByb2ZpbGUucHJvZmlsZQorCisgICAgICAgICMgQ3JlYXRlIGEgbmV3IGNl
cnRpZmljYXRlIGRiCisgICAgICAgIGNlcnR1dGlsKCItTiIsICItZCIsIGNlcnRfZGJfcGF0aCwg
Ii1mIiwgcHdfcGF0aCkKKworICAgICAgICAjIEFkZCB0aGUgQ0EgY2VydGlmaWNhdGUgdG8gdGhl
IGRhdGFiYXNlIGFuZCBtYXJrIGFzIHRydXN0ZWQgdG8gaXNzdWUgc2VydmVyIGNlcnRzCisgICAg
ICAgIGNlcnR1dGlsKCItQSIsICItZCIsIGNlcnRfZGJfcGF0aCwgIi1mIiwgcHdfcGF0aCwgIi10
IiwgIkNULCwiLAorICAgICAgICAgICAgICAgICAiLW4iLCAid2ViLXBsYXRmb3JtLXRlc3RzIiwg
Ii1pIiwgc2VsZi5jYV9jZXJ0aWZpY2F0ZV9wYXRoKQorCisgICAgICAgICMgTGlzdCBhbGwgY2Vy
dHMgaW4gdGhlIGRhdGFiYXNlCisgICAgICAgIGNlcnR1dGlsKCItTCIsICItZCIsIGNlcnRfZGJf
cGF0aCkKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRy
dW5uZXIvd3B0cnVubmVyL2Jyb3dzZXJzL2llLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQv
dzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvYnJvd3NlcnMvaWUucHkKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmM5ODEwMjRmMjJiCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIv
YnJvd3NlcnMvaWUucHkKQEAgLTAsMCArMSw4MSBAQAorZnJvbSAuYmFzZSBpbXBvcnQgQnJvd3Nl
ciwgRXhlY3V0b3JCcm93c2VyLCByZXF1aXJlX2FyZworZnJvbSAuLndlYmRyaXZlcl9zZXJ2ZXIg
aW1wb3J0IEludGVybmV0RXhwbG9yZXJEcml2ZXJTZXJ2ZXIKK2Zyb20gLi5leGVjdXRvcnMgaW1w
b3J0IGV4ZWN1dG9yX2t3YXJncyBhcyBiYXNlX2V4ZWN1dG9yX2t3YXJncworZnJvbSAuLmV4ZWN1
dG9ycy5leGVjdXRvcnNlbGVuaXVtIGltcG9ydCAoU2VsZW5pdW1UZXN0aGFybmVzc0V4ZWN1dG9y
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZW5pdW1SZWZU
ZXN0RXhlY3V0b3IpCitmcm9tIC4uZXhlY3V0b3JzLmV4ZWN1dG9yaW50ZXJuZXRleHBsb3JlciBp
bXBvcnQgSW50ZXJuZXRFeHBsb3JlckRyaXZlcldkc3BlY0V4ZWN1dG9yCisKK19fd3B0cnVubmVy
X18gPSB7InByb2R1Y3QiOiAiaWUiLAorICAgICAgICAgICAgICAgICAiY2hlY2tfYXJncyI6ICJj
aGVja19hcmdzIiwKKyAgICAgICAgICAgICAgICAgImJyb3dzZXIiOiAiSW50ZXJuZXRFeHBsb3Jl
ckJyb3dzZXIiLAorICAgICAgICAgICAgICAgICAiZXhlY3V0b3IiOiB7InRlc3RoYXJuZXNzIjog
IlNlbGVuaXVtVGVzdGhhcm5lc3NFeGVjdXRvciIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAicmVmdGVzdCI6ICJTZWxlbml1bVJlZlRlc3RFeGVjdXRvciIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAid2RzcGVjIjogIkludGVybmV0RXhwbG9yZXJEcml2ZXJXZHNwZWNF
eGVjdXRvciJ9LAorICAgICAgICAgICAgICAgICAiYnJvd3Nlcl9rd2FyZ3MiOiAiYnJvd3Nlcl9r
d2FyZ3MiLAorICAgICAgICAgICAgICAgICAiZXhlY3V0b3Jfa3dhcmdzIjogImV4ZWN1dG9yX2t3
YXJncyIsCisgICAgICAgICAgICAgICAgICJlbnZfZXh0cmFzIjogImVudl9leHRyYXMiLAorICAg
ICAgICAgICAgICAgICAiZW52X29wdGlvbnMiOiAiZW52X29wdGlvbnMifQorCisKK2RlZiBjaGVj
a19hcmdzKCoqa3dhcmdzKToKKyAgICByZXF1aXJlX2FyZyhrd2FyZ3MsICJ3ZWJkcml2ZXJfYmlu
YXJ5IikKKworZGVmIGJyb3dzZXJfa3dhcmdzKHRlc3RfdHlwZSwgcnVuX2luZm9fZGF0YSwgKipr
d2FyZ3MpOgorICAgIHJldHVybiB7IndlYmRyaXZlcl9iaW5hcnkiOiBrd2FyZ3NbIndlYmRyaXZl
cl9iaW5hcnkiXSwKKyAgICAgICAgICAgICJ3ZWJkcml2ZXJfYXJncyI6IGt3YXJncy5nZXQoIndl
YmRyaXZlcl9hcmdzIil9CisKK2RlZiBleGVjdXRvcl9rd2FyZ3ModGVzdF90eXBlLCBzZXJ2ZXJf
Y29uZmlnLCBjYWNoZV9tYW5hZ2VyLCBydW5faW5mb19kYXRhLAorICAgICAgICAgICAgICAgICAg
ICAqKmt3YXJncyk6CisgICAgZnJvbSBzZWxlbml1bS53ZWJkcml2ZXIgaW1wb3J0IERlc2lyZWRD
YXBhYmlsaXRpZXMKKworICAgIGllT3B0aW9ucyA9IHt9CisgICAgaWVPcHRpb25zWyJyZXF1aXJl
V2luZG93Rm9jdXMiXSA9IFRydWUKKyAgICBjYXBhYmlsaXRpZXMgPSB7fQorICAgIGNhcGFiaWxp
dGllc1siYnJvd3Nlck5hbWUiXSA9ICJpbnRlcm5ldCBleHBsb3JlciIKKyAgICBjYXBhYmlsaXRp
ZXNbInBsYXRmb3JtTmFtZSJdID0gIndpbmRvd3MiCisgICAgY2FwYWJpbGl0aWVzWyJzZTppZU9w
dGlvbnMiXSA9IGllT3B0aW9ucworICAgIGV4ZWN1dG9yX2t3YXJncyA9IGJhc2VfZXhlY3V0b3Jf
a3dhcmdzKHRlc3RfdHlwZSwgc2VydmVyX2NvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjYWNoZV9tYW5hZ2VyLCAqKmt3YXJncykKKyAgICBleGVjdXRv
cl9rd2FyZ3NbImNsb3NlX2FmdGVyX2RvbmUiXSA9IFRydWUKKyAgICBleGVjdXRvcl9rd2FyZ3Nb
ImNhcGFiaWxpdGllcyJdID0gY2FwYWJpbGl0aWVzCisgICAgcmV0dXJuIGV4ZWN1dG9yX2t3YXJn
cworCitkZWYgZW52X2V4dHJhcygqKmt3YXJncyk6CisgICAgcmV0dXJuIFtdCisKK2RlZiBlbnZf
b3B0aW9ucygpOgorICAgIHJldHVybiB7Imhvc3QiOiAid2ViLXBsYXRmb3JtLnRlc3QiLAorICAg
ICAgICAgICAgImJpbmRfaG9zdG5hbWUiOiAidHJ1ZSIsCisgICAgICAgICAgICAic3VwcG9ydHNf
ZGVidWdnZXIiOiBGYWxzZX0KKworY2xhc3MgSW50ZXJuZXRFeHBsb3JlckJyb3dzZXIoQnJvd3Nl
cik6CisgICAgdXNlZF9wb3J0cyA9IHNldCgpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9n
Z2VyLCB3ZWJkcml2ZXJfYmluYXJ5LCB3ZWJkcml2ZXJfYXJncz1Ob25lKToKKyAgICAgICAgQnJv
d3Nlci5fX2luaXRfXyhzZWxmLCBsb2dnZXIpCisgICAgICAgIHNlbGYuc2VydmVyID0gSW50ZXJl
bnRFeHBsb3JlckRyaXZlclNlcnZlcihzZWxmLmxvZ2dlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmFyeT13ZWJkcml2ZXJfYmluYXJ5LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncz13
ZWJkcml2ZXJfYXJncykKKyAgICAgICAgc2VsZi53ZWJkcml2ZXJfaG9zdCA9ICJsb2NhbGhvc3Qi
CisgICAgICAgIHNlbGYud2ViZHJpdmVyX3BvcnQgPSBzZWxmLnNlcnZlci5wb3J0CisKKyAgICBk
ZWYgc3RhcnQoc2VsZiwgKiprd2FyZ3MpOgorICAgICAgICBzZWxmLnNlcnZlci5zdGFydCgpCisK
KyAgICBkZWYgc3RvcChzZWxmLCBmb3JjZT1GYWxzZSk6CisgICAgICAgIHNlbGYuc2VydmVyLnN0
b3AoZm9yY2U9Zm9yY2UpCisKKyAgICBkZWYgcGlkKHNlbGYpOgorICAgICAgICByZXR1cm4gc2Vs
Zi5zZXJ2ZXIucGlkCisKKyAgICBkZWYgaXNfYWxpdmUoc2VsZik6CisgICAgICAgICMgVE9ETyhh
dG8pOiBUaGlzIG9ubHkgaW5kaWNhdGVzIHRoZSBzZXJ2ZXIgaXMgYWxpdmUsCisgICAgICAgICMg
YW5kIGRvZXNuJ3Qgc2F5IGFueXRoaW5nIGFib3V0IHdoZXRoZXIgYSBicm93c2VyIHNlc3Npb24K
KyAgICAgICAgIyBpcyBhY3RpdmUuCisgICAgICAgIHJldHVybiBzZWxmLnNlcnZlci5pc19hbGl2
ZSgpCisKKyAgICBkZWYgY2xlYW51cChzZWxmKToKKyAgICAgICAgc2VsZi5zdG9wKCkKKworICAg
IGRlZiBleGVjdXRvcl9icm93c2VyKHNlbGYpOgorICAgICAgICByZXR1cm4gRXhlY3V0b3JCcm93
c2VyLCB7IndlYmRyaXZlcl91cmwiOiBzZWxmLnNlcnZlci51cmx9CmRpZmYgLS1naXQgYS9XZWJE
cml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9icm93c2Vy
cy9zYXVjZS5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIv
d3B0cnVubmVyL2Jyb3dzZXJzL3NhdWNlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi5hMmYyOWE0YzU0ZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3Rz
L2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2Jyb3dzZXJzL3NhdWNlLnB5
CkBAIC0wLDAgKzEsMjA4IEBACisjIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRv
IHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMKKyMgTGljZW5zZSwgdi4gMi4wLiBJZiBh
IGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBmaWxlLAorIyBZ
b3UgY2FuIG9idGFpbiBvbmUgYXQgaHR0cDovL21vemlsbGEub3JnL01QTC8yLjAvLgorCitpbXBv
cnQgZ2xvYgoraW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc3VicHJvY2VzcworaW1w
b3J0IHRhcmZpbGUKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHRpbWUKK2Zyb20gY1N0cmluZ0lP
IGltcG9ydCBTdHJpbmdJTyBhcyBDU3RyaW5nSU8KKworaW1wb3J0IHJlcXVlc3RzCisKK2Zyb20g
LmJhc2UgaW1wb3J0IEJyb3dzZXIsIEV4ZWN1dG9yQnJvd3NlciwgcmVxdWlyZV9hcmcKK2Zyb20g
Li5leGVjdXRvcnMgaW1wb3J0IGV4ZWN1dG9yX2t3YXJncyBhcyBiYXNlX2V4ZWN1dG9yX2t3YXJn
cworZnJvbSAuLmV4ZWN1dG9ycy5leGVjdXRvcnNlbGVuaXVtIGltcG9ydCAoU2VsZW5pdW1UZXN0
aGFybmVzc0V4ZWN1dG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgU2VsZW5pdW1SZWZUZXN0RXhlY3V0b3IpCisKK2hlcmUgPSBvcy5wYXRoLnNwbGl0KF9fZmls
ZV9fKVswXQorCisKK19fd3B0cnVubmVyX18gPSB7InByb2R1Y3QiOiAic2F1Y2UiLAorICAgICAg
ICAgICAgICAgICAiY2hlY2tfYXJncyI6ICJjaGVja19hcmdzIiwKKyAgICAgICAgICAgICAgICAg
ImJyb3dzZXIiOiAiU2F1Y2VCcm93c2VyIiwKKyAgICAgICAgICAgICAgICAgImV4ZWN1dG9yIjog
eyJ0ZXN0aGFybmVzcyI6ICJTZWxlbml1bVRlc3RoYXJuZXNzRXhlY3V0b3IiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgInJlZnRlc3QiOiAiU2VsZW5pdW1SZWZUZXN0RXhlY3V0b3Ii
fSwKKyAgICAgICAgICAgICAgICAgImJyb3dzZXJfa3dhcmdzIjogImJyb3dzZXJfa3dhcmdzIiwK
KyAgICAgICAgICAgICAgICAgImV4ZWN1dG9yX2t3YXJncyI6ICJleGVjdXRvcl9rd2FyZ3MiLAor
ICAgICAgICAgICAgICAgICAiZW52X2V4dHJhcyI6ICJlbnZfZXh0cmFzIiwKKyAgICAgICAgICAg
ICAgICAgImVudl9vcHRpb25zIjogImVudl9vcHRpb25zIn0KKworCitkZWYgZ2V0X2NhcGFiaWxp
dGllcygqKmt3YXJncyk6CisgICAgYnJvd3Nlcl9uYW1lID0ga3dhcmdzWyJzYXVjZV9icm93c2Vy
Il0KKyAgICBwbGF0Zm9ybSA9IGt3YXJnc1sic2F1Y2VfcGxhdGZvcm0iXQorICAgIHZlcnNpb24g
PSBrd2FyZ3NbInNhdWNlX3ZlcnNpb24iXQorICAgIGJ1aWxkID0ga3dhcmdzWyJzYXVjZV9idWls
ZCJdCisgICAgdGFncyA9IGt3YXJnc1sic2F1Y2VfdGFncyJdCisgICAgdHVubmVsX2lkID0ga3dh
cmdzWyJzYXVjZV90dW5uZWxfaWQiXQorICAgIHByZXJ1bl9zY3JpcHQgPSB7CisgICAgICAgICJN
aWNyb3NvZnRFZGdlIjogeworICAgICAgICAgICAgImV4ZWN1dGFibGUiOiAic2F1Y2Utc3RvcmFn
ZTplZGdlLXByZXJ1bi5iYXQiLAorICAgICAgICAgICAgImJhY2tncm91bmQiOiBGYWxzZSwKKyAg
ICAgICAgfSwKKyAgICAgICAgInNhZmFyaSI6IHsKKyAgICAgICAgICAgICJleGVjdXRhYmxlIjog
InNhdWNlLXN0b3JhZ2U6c2FmYXJpLXByZXJ1bi5zaCIsCisgICAgICAgICAgICAiYmFja2dyb3Vu
ZCI6IEZhbHNlLAorICAgICAgICB9CisgICAgfQorICAgIGNhcGFiaWxpdGllcyA9IHsKKyAgICAg
ICAgImJyb3dzZXJOYW1lIjogYnJvd3Nlcl9uYW1lLAorICAgICAgICAiYnVpbGQiOiBidWlsZCwK
KyAgICAgICAgImRpc2FibGVQb3B1cEhhbmRsZXIiOiBUcnVlLAorICAgICAgICAibmFtZSI6ICIl
cyAlcyBvbiAlcyIgJSAoYnJvd3Nlcl9uYW1lLCB2ZXJzaW9uLCBwbGF0Zm9ybSksCisgICAgICAg
ICJwbGF0Zm9ybSI6IHBsYXRmb3JtLAorICAgICAgICAicHVibGljIjogInB1YmxpYyIsCisgICAg
ICAgICJzZWxlbml1bS12ZXJzaW9uIjogIjMuMy4xIiwKKyAgICAgICAgInRhZ3MiOiB0YWdzLAor
ICAgICAgICAidHVubmVsLWlkZW50aWZpZXIiOiB0dW5uZWxfaWQsCisgICAgICAgICJ2ZXJzaW9u
IjogdmVyc2lvbiwKKyAgICAgICAgInByZXJ1biI6IHByZXJ1bl9zY3JpcHQuZ2V0KGJyb3dzZXJf
bmFtZSkKKyAgICB9CisKKyAgICBpZiBicm93c2VyX25hbWUgPT0gJ01pY3Jvc29mdEVkZ2UnOgor
ICAgICAgICBjYXBhYmlsaXRpZXNbJ3NlbGVuaXVtLXZlcnNpb24nXSA9ICcyLjQuOCcKKworICAg
IHJldHVybiBjYXBhYmlsaXRpZXMKKworCitkZWYgZ2V0X3NhdWNlX2NvbmZpZygqKmt3YXJncyk6
CisgICAgYnJvd3Nlcl9uYW1lID0ga3dhcmdzWyJzYXVjZV9icm93c2VyIl0KKyAgICBzYXVjZV91
c2VyID0ga3dhcmdzWyJzYXVjZV91c2VyIl0KKyAgICBzYXVjZV9rZXkgPSBrd2FyZ3NbInNhdWNl
X2tleSJdCisKKyAgICBodWJfdXJsID0gIiVzOiVzQGxvY2FsaG9zdDo0NDQ1IiAlIChzYXVjZV91
c2VyLCBzYXVjZV9rZXkpCisgICAgZGF0YSA9IHsKKyAgICAgICAgInVybCI6ICJodHRwOi8vJXMv
d2QvaHViIiAlIGh1Yl91cmwsCisgICAgICAgICJicm93c2VyTmFtZSI6IGJyb3dzZXJfbmFtZSwK
KyAgICAgICAgImNhcGFiaWxpdGllcyI6IGdldF9jYXBhYmlsaXRpZXMoKiprd2FyZ3MpCisgICAg
fQorCisgICAgcmV0dXJuIGRhdGEKKworCitkZWYgY2hlY2tfYXJncygqKmt3YXJncyk6CisgICAg
cmVxdWlyZV9hcmcoa3dhcmdzLCAic2F1Y2VfYnJvd3NlciIpCisgICAgcmVxdWlyZV9hcmcoa3dh
cmdzLCAic2F1Y2VfcGxhdGZvcm0iKQorICAgIHJlcXVpcmVfYXJnKGt3YXJncywgInNhdWNlX3Zl
cnNpb24iKQorICAgIHJlcXVpcmVfYXJnKGt3YXJncywgInNhdWNlX3VzZXIiKQorICAgIHJlcXVp
cmVfYXJnKGt3YXJncywgInNhdWNlX2tleSIpCisKKworZGVmIGJyb3dzZXJfa3dhcmdzKHRlc3Rf
dHlwZSwgcnVuX2luZm9fZGF0YSwgKiprd2FyZ3MpOgorICAgIHNhdWNlX2NvbmZpZyA9IGdldF9z
YXVjZV9jb25maWcoKiprd2FyZ3MpCisKKyAgICByZXR1cm4geyJzYXVjZV9jb25maWciOiBzYXVj
ZV9jb25maWd9CisKKworZGVmIGV4ZWN1dG9yX2t3YXJncyh0ZXN0X3R5cGUsIHNlcnZlcl9jb25m
aWcsIGNhY2hlX21hbmFnZXIsIHJ1bl9pbmZvX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICoq
a3dhcmdzKToKKyAgICBleGVjdXRvcl9rd2FyZ3MgPSBiYXNlX2V4ZWN1dG9yX2t3YXJncyh0ZXN0
X3R5cGUsIHNlcnZlcl9jb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2FjaGVfbWFuYWdlciwgKiprd2FyZ3MpCisKKyAgICBleGVjdXRvcl9rd2FyZ3Nb
ImNhcGFiaWxpdGllcyJdID0gZ2V0X2NhcGFiaWxpdGllcygqKmt3YXJncykKKworICAgIHJldHVy
biBleGVjdXRvcl9rd2FyZ3MKKworCitkZWYgZW52X2V4dHJhcygqKmt3YXJncyk6CisgICAgcmV0
dXJuIFtTYXVjZUNvbm5lY3QoKiprd2FyZ3MpXQorCisKK2RlZiBlbnZfb3B0aW9ucygpOgorICAg
IHJldHVybiB7Imhvc3QiOiAid2ViLXBsYXRmb3JtLnRlc3QiLAorICAgICAgICAgICAgImJpbmRf
aG9zdG5hbWUiOiAidHJ1ZSIsCisgICAgICAgICAgICAic3VwcG9ydHNfZGVidWdnZXIiOiBGYWxz
ZX0KKworCitkZWYgZ2V0X3Rhcih1cmwsIGRlc3QpOgorICAgIHJlc3AgPSByZXF1ZXN0cy5nZXQo
dXJsLCBzdHJlYW09VHJ1ZSkKKyAgICByZXNwLnJhaXNlX2Zvcl9zdGF0dXMoKQorICAgIHdpdGgg
dGFyZmlsZS5vcGVuKGZpbGVvYmo9Q1N0cmluZ0lPKHJlc3AucmF3LnJlYWQoKSkpIGFzIGY6Cisg
ICAgICAgIGYuZXh0cmFjdGFsbChwYXRoPWRlc3QpCisKKworY2xhc3MgU2F1Y2VDb25uZWN0KCk6
CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKiprd2FyZ3MpOgorICAgICAgICBzZWxmLnNhdWNl
X3VzZXIgPSBrd2FyZ3NbInNhdWNlX3VzZXIiXQorICAgICAgICBzZWxmLnNhdWNlX2tleSA9IGt3
YXJnc1sic2F1Y2Vfa2V5Il0KKyAgICAgICAgc2VsZi5zYXVjZV90dW5uZWxfaWQgPSBrd2FyZ3Nb
InNhdWNlX3R1bm5lbF9pZCJdCisgICAgICAgIHNlbGYuc2F1Y2VfY29ubmVjdF9iaW5hcnkgPSBr
d2FyZ3MuZ2V0KCJzYXVjZV9jb25uZWN0X2JpbmFyeSIpCisgICAgICAgIHNlbGYuc2NfcHJvY2Vz
cyA9IE5vbmUKKyAgICAgICAgc2VsZi50ZW1wX2RpciA9IE5vbmUKKworICAgIGRlZiBfX2VudGVy
X18oc2VsZiwgb3B0aW9ucyk6CisgICAgICAgIGlmIG5vdCBzZWxmLnNhdWNlX2Nvbm5lY3RfYmlu
YXJ5OgorICAgICAgICAgICAgc2VsZi50ZW1wX2RpciA9IHRlbXBmaWxlLm1rZHRlbXAoKQorICAg
ICAgICAgICAgZ2V0X3RhcigiaHR0cHM6Ly9zYXVjZWxhYnMuY29tL2Rvd25sb2Fkcy9zYy1sYXRl
c3QtbGludXgudGFyLmd6Iiwgc2VsZi50ZW1wX2RpcikKKyAgICAgICAgICAgIHNlbGYuc2F1Y2Vf
Y29ubmVjdF9iaW5hcnkgPSBnbG9iLmdsb2Iob3MucGF0aC5qb2luKHNlbGYudGVtcF9kaXIsICJz
Yy0qLWxpbnV4L2Jpbi9zYyIpKVswXQorCisgICAgICAgIHNlbGYudXBsb2FkX3ByZXJ1bl9leGVj
KCdlZGdlLXByZXJ1bi5iYXQnKQorICAgICAgICBzZWxmLnVwbG9hZF9wcmVydW5fZXhlYygnc2Fm
YXJpLXByZXJ1bi5zaCcpCisKKyAgICAgICAgc2VsZi5zY19wcm9jZXNzID0gc3VicHJvY2Vzcy5Q
b3BlbihbCisgICAgICAgICAgICBzZWxmLnNhdWNlX2Nvbm5lY3RfYmluYXJ5LAorICAgICAgICAg
ICAgIi0tdXNlcj0lcyIgJSBzZWxmLnNhdWNlX3VzZXIsCisgICAgICAgICAgICAiLS1hcGkta2V5
PSVzIiAlIHNlbGYuc2F1Y2Vfa2V5LAorICAgICAgICAgICAgIi0tbm8tcmVtb3ZlLWNvbGxpZGlu
Zy10dW5uZWxzIiwKKyAgICAgICAgICAgICItLXR1bm5lbC1pZGVudGlmaWVyPSVzIiAlIHNlbGYu
c2F1Y2VfdHVubmVsX2lkLAorICAgICAgICAgICAgIi0tcmVhZHlmaWxlPS4vc2F1Y2VfaXNfcmVh
ZHkiLAorICAgICAgICAgICAgIi0tdHVubmVsLWRvbWFpbnMiLAorICAgICAgICAgICAgIndlYi1w
bGF0Zm9ybS50ZXN0IiwKKyAgICAgICAgICAgICIqLndlYi1wbGF0Zm9ybS50ZXN0IgorICAgICAg
ICBdKQorICAgICAgICB3aGlsZSBub3Qgb3MucGF0aC5leGlzdHMoJy4vc2F1Y2VfaXNfcmVhZHkn
KSBhbmQgbm90IHNlbGYuc2NfcHJvY2Vzcy5wb2xsKCk6CisgICAgICAgICAgICB0aW1lLnNsZWVw
KDUpCisKKyAgICAgICAgaWYgc2VsZi5zY19wcm9jZXNzLnJldHVybmNvZGUgaXMgbm90IE5vbmUg
YW5kIHNlbGYuc2NfcHJvY2Vzcy5yZXR1cm5jb2RlID4gMDoKKyAgICAgICAgICAgIHJhaXNlIFNh
dWNlRXhjZXB0aW9uKCJVbmFibGUgdG8gc3RhcnQgU2F1Y2UgQ29ubmVjdCBQcm94eS4gUHJvY2Vz
cyBleGl0ZWQgd2l0aCBjb2RlICVzIiwgc2VsZi5zY19wcm9jZXNzLnJldHVybmNvZGUpCisKKyAg
ICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLnNjX3Byb2Nlc3MudGVy
bWluYXRlKCkKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi50ZW1wX2Rpcik6CisgICAg
ICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLnRlbXBfZGly
KQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisg
ICAgZGVmIHVwbG9hZF9wcmVydW5fZXhlYyhzZWxmLCBmaWxlX25hbWUpOgorICAgICAgICBhdXRo
ID0gKHNlbGYuc2F1Y2VfdXNlciwgc2VsZi5zYXVjZV9rZXkpCisgICAgICAgIHVybCA9ICJodHRw
czovL3NhdWNlbGFicy5jb20vcmVzdC92MS9zdG9yYWdlLyVzLyVzP292ZXJ3cml0ZT10cnVlIiAl
IChzZWxmLnNhdWNlX3VzZXIsIGZpbGVfbmFtZSkKKworICAgICAgICB3aXRoIG9wZW4ob3MucGF0
aC5qb2luKGhlcmUsICdzYXVjZV9zZXR1cCcsIGZpbGVfbmFtZSksICdyYicpIGFzIGY6CisgICAg
ICAgICAgICByZXF1ZXN0cy5wb3N0KHVybCwgZGF0YT1mLCBhdXRoPWF1dGgpCisKKworY2xhc3Mg
U2F1Y2VFeGNlcHRpb24oRXhjZXB0aW9uKToKKyAgICBwYXNzCisKKworY2xhc3MgU2F1Y2VCcm93
c2VyKEJyb3dzZXIpOgorICAgIGluaXRfdGltZW91dCA9IDMwMAorCisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIGxvZ2dlciwgc2F1Y2VfY29uZmlnKToKKyAgICAgICAgQnJvd3Nlci5fX2luaXRfXyhz
ZWxmLCBsb2dnZXIpCisgICAgICAgIHNlbGYuc2F1Y2VfY29uZmlnID0gc2F1Y2VfY29uZmlnCisK
KyAgICBkZWYgc3RhcnQoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBzdG9wKHNlbGYs
IGZvcmNlPUZhbHNlKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHBpZChzZWxmKToKKyAgICAg
ICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBpc19hbGl2ZShzZWxmKToKKyAgICAgICAgIyBUT0RP
OiBTaG91bGQgdGhpcyBjaGVjayBzb21ldGhpbmcgYWJvdXQgdGhlIGNvbm5lY3Rpb24/CisgICAg
ICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgY2xlYW51cChzZWxmKToKKyAgICAgICAgcGFzcwor
CisgICAgZGVmIGV4ZWN1dG9yX2Jyb3dzZXIoc2VsZik6CisgICAgICAgIHJldHVybiBFeGVjdXRv
ckJyb3dzZXIsIHsid2ViZHJpdmVyX3VybCI6IHNlbGYuc2F1Y2VfY29uZmlnWyJ1cmwiXX0KZGlm
ZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0
cnVubmVyL2Jyb3dzZXJzL3NhdWNlX3NldHVwL2VkZ2UtcHJlcnVuLmJhdCBiL1dlYkRyaXZlclRl
c3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2Jyb3dzZXJzL3NhdWNl
X3NldHVwL2VkZ2UtcHJlcnVuLmJhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uNDU1NDg5NDg5NmIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBv
cnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9icm93c2Vycy9zYXVjZV9zZXR1cC9l
ZGdlLXByZXJ1bi5iYXQKQEAgLTAsMCArMSwyIEBACitAZWNobyBvZmYKK3JlZyBhZGQgIkhLQ1Vc
U29mdHdhcmVcQ2xhc3Nlc1xMb2NhbCBTZXR0aW5nc1xTb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93
c1xDdXJyZW50VmVyc2lvblxBcHBDb250YWluZXJcU3RvcmFnZVxtaWNyb3NvZnQubWljcm9zb2Z0
ZWRnZV84d2VreWIzZDhiYndlXE1pY3Jvc29mdEVkZ2VcTmV3IFdpbmRvd3MiIC92ICJQb3B1cE1n
ciIgL3QgUkVHX1NaIC9kIG5vCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93
M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9icm93c2Vycy9zYXVjZV9zZXR1cC9zYWZhcmkt
cHJlcnVuLnNoIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93
cHRydW5uZXIvYnJvd3NlcnMvc2F1Y2Vfc2V0dXAvc2FmYXJpLXByZXJ1bi5zaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uODVjNzJlNmJlNmEKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5l
ci9icm93c2Vycy9zYXVjZV9zZXR1cC9zYWZhcmktcHJlcnVuLnNoCkBAIC0wLDAgKzEsMiBAQAor
IyEvYmluL2Jhc2gKK2RlZmF1bHRzIHdyaXRlIGNvbS5hcHBsZS5TYWZhcmkgY29tLmFwcGxlLlNh
ZmFyaS5Db250ZW50UGFnZUdyb3VwSWRlbnRpZmllci5XZWJLaXQySmF2YVNjcmlwdENhbk9wZW5X
aW5kb3dzQXV0b21hdGljYWxseSAtYm9vbCB0cnVlCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0
cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9icm93c2Vycy9zZXJ2ZXIt
bG9jYXRpb25zLnR4dCBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5u
ZXIvd3B0cnVubmVyL2Jyb3dzZXJzL3NlcnZlci1sb2NhdGlvbnMudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41ZGNhZjRiYjZhNAotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2Jy
b3dzZXJzL3NlcnZlci1sb2NhdGlvbnMudHh0CkBAIC0wLDAgKzEsMzEgQEAKK2h0dHA6Ly9sb2Nh
bGhvc3Q6ODAwMCAgICBwcmltYXJ5CisKK2h0dHA6Ly93ZWItcGxhdGZvcm0udGVzdDo4MDAwCito
dHRwOi8vd3d3LndlYi1wbGF0Zm9ybS50ZXN0OjgwMDAKK2h0dHA6Ly93d3cxLndlYi1wbGF0Zm9y
bS50ZXN0OjgwMDAKK2h0dHA6Ly93d3cyLndlYi1wbGF0Zm9ybS50ZXN0OjgwMDAKK2h0dHA6Ly94
bi0tbjhqNmRzNTNsd3drcnFodjI4YS53ZWItcGxhdGZvcm0udGVzdDo4MDAwCitodHRwOi8veG4t
LWx2ZS02bGFkLndlYi1wbGF0Zm9ybS50ZXN0OjgwMDAKKworaHR0cDovL3dlYi1wbGF0Zm9ybS50
ZXN0OjgwMDEKK2h0dHA6Ly93d3cud2ViLXBsYXRmb3JtLnRlc3Q6ODAwMQoraHR0cDovL3d3dzEu
d2ViLXBsYXRmb3JtLnRlc3Q6ODAwMQoraHR0cDovL3d3dzIud2ViLXBsYXRmb3JtLnRlc3Q6ODAw
MQoraHR0cDovL3huLS1uOGo2ZHM1M2x3d2tycWh2MjhhLndlYi1wbGF0Zm9ybS50ZXN0OjgwMDEK
K2h0dHA6Ly94bi0tbHZlLTZsYWQud2ViLXBsYXRmb3JtLnRlc3Q6ODAwMQorCitodHRwczovL3dl
Yi1wbGF0Zm9ybS50ZXN0Ojg0NDMKK2h0dHBzOi8vd3d3LndlYi1wbGF0Zm9ybS50ZXN0Ojg0NDMK
K2h0dHBzOi8vd3d3MS53ZWItcGxhdGZvcm0udGVzdDo4NDQzCitodHRwczovL3d3dzIud2ViLXBs
YXRmb3JtLnRlc3Q6ODQ0MworaHR0cHM6Ly94bi0tbjhqNmRzNTNsd3drcnFodjI4YS53ZWItcGxh
dGZvcm0udGVzdDo4NDQzCitodHRwczovL3huLS1sdmUtNmxhZC53ZWItcGxhdGZvcm0udGVzdDo4
NDQzCisKKyMgVGhlc2UgYXJlIGFjdHVhbGx5IHdzIHNlcnZlcnMsIGJ1dCB1bnRpbCBtb3pwcm9m
aWxlIGlzCisjIGZpeGVkIHdlIGhhdmUgdG8gcHJldGVuZCB0aGF0IHRoZXkgYXJlIGh0dHAgc2Vy
dmVycworaHR0cDovL3dlYi1wbGF0Zm9ybS50ZXN0Ojg4ODgKK2h0dHA6Ly93d3cud2ViLXBsYXRm
b3JtLnRlc3Q6ODg4OAoraHR0cDovL3d3dzEud2ViLXBsYXRmb3JtLnRlc3Q6ODg4OAoraHR0cDov
L3d3dzIud2ViLXBsYXRmb3JtLnRlc3Q6ODg4OAoraHR0cDovL3huLS1uOGo2ZHM1M2x3d2tycWh2
MjhhLndlYi1wbGF0Zm9ybS50ZXN0Ojg4ODgKK2h0dHA6Ly94bi0tbHZlLTZsYWQud2ViLXBsYXRm
b3JtLnRlc3Q6ODg4OApkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rv
b2xzL3dwdHJ1bm5lci93cHRydW5uZXIvYnJvd3NlcnMvc2Vydm8ucHkgYi9XZWJEcml2ZXJUZXN0
cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9icm93c2Vycy9zZXJ2by5w
eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uODlkNjlhYjllNTQKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVu
bmVyL3dwdHJ1bm5lci9icm93c2Vycy9zZXJ2by5weQpAQCAtMCwwICsxLDgxIEBACitpbXBvcnQg
b3MKKworZnJvbSAuYmFzZSBpbXBvcnQgTnVsbEJyb3dzZXIsIEV4ZWN1dG9yQnJvd3NlciwgcmVx
dWlyZV9hcmcKK2Zyb20gLi5leGVjdXRvcnMgaW1wb3J0IGV4ZWN1dG9yX2t3YXJncyBhcyBiYXNl
X2V4ZWN1dG9yX2t3YXJncworZnJvbSAuLmV4ZWN1dG9ycy5leGVjdXRvcnNlcnZvIGltcG9ydCBT
ZXJ2b1Rlc3RoYXJuZXNzRXhlY3V0b3IsIFNlcnZvUmVmVGVzdEV4ZWN1dG9yLCBTZXJ2b1dkc3Bl
Y0V4ZWN1dG9yCisKK2hlcmUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5zcGxpdChfX2ZpbGVfXylb
MF0pCisKK19fd3B0cnVubmVyX18gPSB7CisgICAgInByb2R1Y3QiOiAic2Vydm8iLAorICAgICJj
aGVja19hcmdzIjogImNoZWNrX2FyZ3MiLAorICAgICJicm93c2VyIjogIlNlcnZvQnJvd3NlciIs
CisgICAgImV4ZWN1dG9yIjogeworICAgICAgICAidGVzdGhhcm5lc3MiOiAiU2Vydm9UZXN0aGFy
bmVzc0V4ZWN1dG9yIiwKKyAgICAgICAgInJlZnRlc3QiOiAiU2Vydm9SZWZUZXN0RXhlY3V0b3Ii
LAorICAgICAgICAid2RzcGVjIjogIlNlcnZvV2RzcGVjRXhlY3V0b3IiLAorICAgIH0sCisgICAg
ImJyb3dzZXJfa3dhcmdzIjogImJyb3dzZXJfa3dhcmdzIiwKKyAgICAiZXhlY3V0b3Jfa3dhcmdz
IjogImV4ZWN1dG9yX2t3YXJncyIsCisgICAgImVudl9leHRyYXMiOiAiZW52X2V4dHJhcyIsCisg
ICAgImVudl9vcHRpb25zIjogImVudl9vcHRpb25zIiwKKyAgICAidXBkYXRlX3Byb3BlcnRpZXMi
OiAidXBkYXRlX3Byb3BlcnRpZXMiLAorfQorCisKK2RlZiBjaGVja19hcmdzKCoqa3dhcmdzKToK
KyAgICByZXF1aXJlX2FyZyhrd2FyZ3MsICJiaW5hcnkiKQorCisKK2RlZiBicm93c2VyX2t3YXJn
cyh0ZXN0X3R5cGUsIHJ1bl9pbmZvX2RhdGEsICoqa3dhcmdzKToKKyAgICByZXR1cm4geworICAg
ICAgICAiYmluYXJ5Ijoga3dhcmdzWyJiaW5hcnkiXSwKKyAgICAgICAgImRlYnVnX2luZm8iOiBr
d2FyZ3NbImRlYnVnX2luZm8iXSwKKyAgICAgICAgImJpbmFyeV9hcmdzIjoga3dhcmdzWyJiaW5h
cnlfYXJncyJdLAorICAgICAgICAidXNlcl9zdHlsZXNoZWV0cyI6IGt3YXJncy5nZXQoInVzZXJf
c3R5bGVzaGVldHMiKSwKKyAgICAgICAgImNhX2NlcnRpZmljYXRlX3BhdGgiOiBrd2FyZ3NbInNz
bF9lbnYiXS5jYV9jZXJ0X3BhdGgoKSwKKyAgICB9CisKKworZGVmIGV4ZWN1dG9yX2t3YXJncyh0
ZXN0X3R5cGUsIHNlcnZlcl9jb25maWcsIGNhY2hlX21hbmFnZXIsIHJ1bl9pbmZvX2RhdGEsCisg
ICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKToKKyAgICBydiA9IGJhc2VfZXhlY3V0b3Jfa3dh
cmdzKHRlc3RfdHlwZSwgc2VydmVyX2NvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNhY2hlX21hbmFnZXIsICoqa3dhcmdzKQorICAgIHJ2WyJwYXVzZV9hZnRlcl90ZXN0Il0g
PSBrd2FyZ3NbInBhdXNlX2FmdGVyX3Rlc3QiXQorICAgIHJldHVybiBydgorCisKK2RlZiBlbnZf
ZXh0cmFzKCoqa3dhcmdzKToKKyAgICByZXR1cm4gW10KKworCitkZWYgZW52X29wdGlvbnMoKToK
KyAgICByZXR1cm4geyJob3N0IjogIjEyNy4wLjAuMSIsCisgICAgICAgICAgICAiZXh0ZXJuYWxf
aG9zdCI6ICJ3ZWItcGxhdGZvcm0udGVzdCIsCisgICAgICAgICAgICAiYmluZF9ob3N0bmFtZSI6
ICJ0cnVlIiwKKyAgICAgICAgICAgICJ0ZXN0aGFybmVzc3JlcG9ydCI6ICJ0ZXN0aGFybmVzc3Jl
cG9ydC1zZXJ2by5qcyIsCisgICAgICAgICAgICAic3VwcG9ydHNfZGVidWdnZXIiOiBUcnVlfQor
CisKK2RlZiB1cGRhdGVfcHJvcGVydGllcygpOgorICAgIHJldHVybiBbImRlYnVnIiwgIm9zIiwg
InZlcnNpb24iLCAicHJvY2Vzc29yIiwgImJpdHMiXSwgTm9uZQorCisKK2NsYXNzIFNlcnZvQnJv
d3NlcihOdWxsQnJvd3Nlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvZ2dlciwgYmluYXJ5
LCBkZWJ1Z19pbmZvPU5vbmUsIGJpbmFyeV9hcmdzPU5vbmUsCisgICAgICAgICAgICAgICAgIHVz
ZXJfc3R5bGVzaGVldHM9Tm9uZSwgY2FfY2VydGlmaWNhdGVfcGF0aD1Ob25lKToKKyAgICAgICAg
TnVsbEJyb3dzZXIuX19pbml0X18oc2VsZiwgbG9nZ2VyKQorICAgICAgICBzZWxmLmJpbmFyeSA9
IGJpbmFyeQorICAgICAgICBzZWxmLmRlYnVnX2luZm8gPSBkZWJ1Z19pbmZvCisgICAgICAgIHNl
bGYuYmluYXJ5X2FyZ3MgPSBiaW5hcnlfYXJncyBvciBbXQorICAgICAgICBzZWxmLnVzZXJfc3R5
bGVzaGVldHMgPSB1c2VyX3N0eWxlc2hlZXRzIG9yIFtdCisgICAgICAgIHNlbGYuY2FfY2VydGlm
aWNhdGVfcGF0aCA9IGNhX2NlcnRpZmljYXRlX3BhdGgKKworICAgIGRlZiBleGVjdXRvcl9icm93
c2VyKHNlbGYpOgorICAgICAgICByZXR1cm4gRXhlY3V0b3JCcm93c2VyLCB7CisgICAgICAgICAg
ICAiYmluYXJ5Ijogc2VsZi5iaW5hcnksCisgICAgICAgICAgICAiZGVidWdfaW5mbyI6IHNlbGYu
ZGVidWdfaW5mbywKKyAgICAgICAgICAgICJiaW5hcnlfYXJncyI6IHNlbGYuYmluYXJ5X2FyZ3Ms
CisgICAgICAgICAgICAidXNlcl9zdHlsZXNoZWV0cyI6IHNlbGYudXNlcl9zdHlsZXNoZWV0cywK
KyAgICAgICAgICAgICJjYV9jZXJ0aWZpY2F0ZV9wYXRoIjogc2VsZi5jYV9jZXJ0aWZpY2F0ZV9w
YXRoLAorICAgICAgICB9CmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mv
dG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9icm93c2Vycy9zZXJ2b2RyaXZlci5weSBiL1dlYkRy
aXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2Jyb3dzZXJz
L3NlcnZvZHJpdmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5j
MjUxZGU4NGQxNgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3cz
Yy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2Jyb3dzZXJzL3NlcnZvZHJpdmVyLnB5CkBAIC0w
LDAgKzEsMTY1IEBACitpbXBvcnQgb3MKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgdGVtcGZp
bGUKKworZnJvbSBtb3pwcm9jZXNzIGltcG9ydCBQcm9jZXNzSGFuZGxlcgorCitmcm9tIC5iYXNl
IGltcG9ydCBCcm93c2VyLCByZXF1aXJlX2FyZywgZ2V0X2ZyZWVfcG9ydCwgYnJvd3Nlcl9jb21t
YW5kLCBFeGVjdXRvckJyb3dzZXIKK2Zyb20gLi5leGVjdXRvcnMgaW1wb3J0IGV4ZWN1dG9yX2t3
YXJncyBhcyBiYXNlX2V4ZWN1dG9yX2t3YXJncworZnJvbSAuLmV4ZWN1dG9ycy5leGVjdXRvcnNl
cnZvZHJpdmVyIGltcG9ydCAoU2Vydm9XZWJEcml2ZXJUZXN0aGFybmVzc0V4ZWN1dG9yLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2Vydm9XZWJEcml2ZXJS
ZWZUZXN0RXhlY3V0b3IpCisKK2hlcmUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5zcGxpdChfX2Zp
bGVfXylbMF0pCisKK19fd3B0cnVubmVyX18gPSB7CisgICAgInByb2R1Y3QiOiAic2Vydm9kcml2
ZXIiLAorICAgICJjaGVja19hcmdzIjogImNoZWNrX2FyZ3MiLAorICAgICJicm93c2VyIjogIlNl
cnZvV2ViRHJpdmVyQnJvd3NlciIsCisgICAgImV4ZWN1dG9yIjogeworICAgICAgICAidGVzdGhh
cm5lc3MiOiAiU2Vydm9XZWJEcml2ZXJUZXN0aGFybmVzc0V4ZWN1dG9yIiwKKyAgICAgICAgInJl
ZnRlc3QiOiAiU2Vydm9XZWJEcml2ZXJSZWZUZXN0RXhlY3V0b3IiLAorICAgIH0sCisgICAgImJy
b3dzZXJfa3dhcmdzIjogImJyb3dzZXJfa3dhcmdzIiwKKyAgICAiZXhlY3V0b3Jfa3dhcmdzIjog
ImV4ZWN1dG9yX2t3YXJncyIsCisgICAgImVudl9leHRyYXMiOiAiZW52X2V4dHJhcyIsCisgICAg
ImVudl9vcHRpb25zIjogImVudl9vcHRpb25zIiwKKyAgICAidXBkYXRlX3Byb3BlcnRpZXMiOiAi
dXBkYXRlX3Byb3BlcnRpZXMiLAorfQorCitob3N0c190ZXh0ID0gIiIiMTI3LjAuMC4xIHdlYi1w
bGF0Zm9ybS50ZXN0CisxMjcuMC4wLjEgd3d3LndlYi1wbGF0Zm9ybS50ZXN0CisxMjcuMC4wLjEg
d3d3MS53ZWItcGxhdGZvcm0udGVzdAorMTI3LjAuMC4xIHd3dzIud2ViLXBsYXRmb3JtLnRlc3QK
KzEyNy4wLjAuMSB4bi0tbjhqNmRzNTNsd3drcnFodjI4YS53ZWItcGxhdGZvcm0udGVzdAorMTI3
LjAuMC4xIHhuLS1sdmUtNmxhZC53ZWItcGxhdGZvcm0udGVzdAorIiIiCisKKworZGVmIGNoZWNr
X2FyZ3MoKiprd2FyZ3MpOgorICAgIHJlcXVpcmVfYXJnKGt3YXJncywgImJpbmFyeSIpCisKKwor
ZGVmIGJyb3dzZXJfa3dhcmdzKHRlc3RfdHlwZSwgcnVuX2luZm9fZGF0YSwgKiprd2FyZ3MpOgor
ICAgIHJldHVybiB7CisgICAgICAgICJiaW5hcnkiOiBrd2FyZ3NbImJpbmFyeSJdLAorICAgICAg
ICAiZGVidWdfaW5mbyI6IGt3YXJnc1siZGVidWdfaW5mbyJdLAorICAgICAgICAidXNlcl9zdHls
ZXNoZWV0cyI6IGt3YXJncy5nZXQoInVzZXJfc3R5bGVzaGVldHMiKSwKKyAgICB9CisKKworZGVm
IGV4ZWN1dG9yX2t3YXJncyh0ZXN0X3R5cGUsIHNlcnZlcl9jb25maWcsIGNhY2hlX21hbmFnZXIs
IHJ1bl9pbmZvX2RhdGEsICoqa3dhcmdzKToKKyAgICBydiA9IGJhc2VfZXhlY3V0b3Jfa3dhcmdz
KHRlc3RfdHlwZSwgc2VydmVyX2NvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNhY2hlX21hbmFnZXIsICoqa3dhcmdzKQorICAgIHJldHVybiBydgorCisKK2RlZiBlbnZfZXh0
cmFzKCoqa3dhcmdzKToKKyAgICByZXR1cm4gW10KKworCitkZWYgZW52X29wdGlvbnMoKToKKyAg
ICByZXR1cm4geyJob3N0IjogIjEyNy4wLjAuMSIsCisgICAgICAgICAgICAiZXh0ZXJuYWxfaG9z
dCI6ICJ3ZWItcGxhdGZvcm0udGVzdCIsCisgICAgICAgICAgICAiYmluZF9ob3N0bmFtZSI6ICJ0
cnVlIiwKKyAgICAgICAgICAgICJ0ZXN0aGFybmVzc3JlcG9ydCI6ICJ0ZXN0aGFybmVzc3JlcG9y
dC1zZXJ2b2RyaXZlci5qcyIsCisgICAgICAgICAgICAic3VwcG9ydHNfZGVidWdnZXIiOiBUcnVl
fQorCisKK2RlZiB1cGRhdGVfcHJvcGVydGllcygpOgorICAgIHJldHVybiBbImRlYnVnIiwgIm9z
IiwgInZlcnNpb24iLCAicHJvY2Vzc29yIiwgImJpdHMiXSwgTm9uZQorCisKK2RlZiBtYWtlX2hv
c3RzX2ZpbGUoKToKKyAgICBob3N0c19mZCwgaG9zdHNfcGF0aCA9IHRlbXBmaWxlLm1rc3RlbXAo
KQorICAgIHdpdGggb3MuZmRvcGVuKGhvc3RzX2ZkLCAidyIpIGFzIGY6CisgICAgICAgIGYud3Jp
dGUoaG9zdHNfdGV4dCkKKyAgICByZXR1cm4gaG9zdHNfcGF0aAorCisKK2NsYXNzIFNlcnZvV2Vi
RHJpdmVyQnJvd3NlcihCcm93c2VyKToKKyAgICB1c2VkX3BvcnRzID0gc2V0KCkKKworICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBsb2dnZXIsIGJpbmFyeSwgZGVidWdfaW5mbz1Ob25lLCB3ZWJkcml2
ZXJfaG9zdD0iMTI3LjAuMC4xIiwKKyAgICAgICAgICAgICAgICAgdXNlcl9zdHlsZXNoZWV0cz1O
b25lKToKKyAgICAgICAgQnJvd3Nlci5fX2luaXRfXyhzZWxmLCBsb2dnZXIpCisgICAgICAgIHNl
bGYuYmluYXJ5ID0gYmluYXJ5CisgICAgICAgIHNlbGYud2ViZHJpdmVyX2hvc3QgPSB3ZWJkcml2
ZXJfaG9zdAorICAgICAgICBzZWxmLndlYmRyaXZlcl9wb3J0ID0gTm9uZQorICAgICAgICBzZWxm
LnByb2MgPSBOb25lCisgICAgICAgIHNlbGYuZGVidWdfaW5mbyA9IGRlYnVnX2luZm8KKyAgICAg
ICAgc2VsZi5ob3N0c19wYXRoID0gbWFrZV9ob3N0c19maWxlKCkKKyAgICAgICAgc2VsZi5jb21t
YW5kID0gTm9uZQorICAgICAgICBzZWxmLnVzZXJfc3R5bGVzaGVldHMgPSB1c2VyX3N0eWxlc2hl
ZXRzIGlmIHVzZXJfc3R5bGVzaGVldHMgZWxzZSBbXQorCisgICAgZGVmIHN0YXJ0KHNlbGYsICoq
a3dhcmdzKToKKyAgICAgICAgc2VsZi53ZWJkcml2ZXJfcG9ydCA9IGdldF9mcmVlX3BvcnQoNDQ0
NCwgZXhjbHVkZT1zZWxmLnVzZWRfcG9ydHMpCisgICAgICAgIHNlbGYudXNlZF9wb3J0cy5hZGQo
c2VsZi53ZWJkcml2ZXJfcG9ydCkKKworICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQor
ICAgICAgICBlbnZbIkhPU1RfRklMRSJdID0gc2VsZi5ob3N0c19wYXRoCisgICAgICAgIGVudlsi
UlVTVF9CQUNLVFJBQ0UiXSA9ICIxIgorCisgICAgICAgIGRlYnVnX2FyZ3MsIGNvbW1hbmQgPSBi
cm93c2VyX2NvbW1hbmQoCisgICAgICAgICAgICBzZWxmLmJpbmFyeSwKKyAgICAgICAgICAgIFsK
KyAgICAgICAgICAgICAgICAiLS1oYXJkLWZhaWwiLAorICAgICAgICAgICAgICAgICItLXdlYmRy
aXZlciIsIHN0cihzZWxmLndlYmRyaXZlcl9wb3J0KSwKKyAgICAgICAgICAgICAgICAiYWJvdXQ6
YmxhbmsiLAorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgIHNlbGYuZGVidWdfaW5mbworICAg
ICAgICApCisKKyAgICAgICAgZm9yIHN0eWxlc2hlZXQgaW4gc2VsZi51c2VyX3N0eWxlc2hlZXRz
OgorICAgICAgICAgICAgY29tbWFuZCArPSBbIi0tdXNlci1zdHlsZXNoZWV0Iiwgc3R5bGVzaGVl
dF0KKworICAgICAgICBzZWxmLmNvbW1hbmQgPSBjb21tYW5kCisKKyAgICAgICAgc2VsZi5jb21t
YW5kID0gZGVidWdfYXJncyArIHNlbGYuY29tbWFuZAorCisgICAgICAgIGlmIG5vdCBzZWxmLmRl
YnVnX2luZm8gb3Igbm90IHNlbGYuZGVidWdfaW5mby5pbnRlcmFjdGl2ZToKKyAgICAgICAgICAg
IHNlbGYucHJvYyA9IFByb2Nlc3NIYW5kbGVyKHNlbGYuY29tbWFuZCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NPdXRwdXRMaW5lPVtzZWxmLm9uX291dHB1
dF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnY9ZW52LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVPdXRwdXQ9RmFsc2UpCisg
ICAgICAgICAgICBzZWxmLnByb2MucnVuKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNl
bGYucHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oc2VsZi5jb21tYW5kLCBlbnY9ZW52KQorCisgICAg
ICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJTZXJ2byBTdGFydGVkIikKKworICAgIGRlZiBzdG9wKHNl
bGYsIGZvcmNlPUZhbHNlKToKKyAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcoIlN0b3BwaW5nIGJy
b3dzZXIiKQorICAgICAgICBpZiBzZWxmLnByb2MgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB0
cnk6CisgICAgICAgICAgICAgICAgc2VsZi5wcm9jLmtpbGwoKQorICAgICAgICAgICAgZXhjZXB0
IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgIyBUaGlzIGNhbiBoYXBwZW4gb24gV2luZG93cyBp
ZiB0aGUgcHJvY2VzcyBpcyBhbHJlYWR5IGRlYWQKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAg
ICBkZWYgcGlkKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnByb2MgaXMgTm9uZToKKyAgICAgICAg
ICAgIHJldHVybiBOb25lCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYu
cHJvYy5waWQKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcmV0
dXJuIE5vbmUKKworICAgIGRlZiBvbl9vdXRwdXQoc2VsZiwgbGluZSk6CisgICAgICAgICIiIldy
aXRlIGEgbGluZSBvZiBvdXRwdXQgZnJvbSB0aGUgcHJvY2VzcyB0byB0aGUgbG9nIiIiCisgICAg
ICAgIHNlbGYubG9nZ2VyLnByb2Nlc3Nfb3V0cHV0KHNlbGYucGlkKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxpbmUuZGVjb2RlKCJ1dGY4IiwgInJlcGxhY2UiKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZD0iICIuam9pbihzZWxmLmNv
bW1hbmQpKQorCisgICAgZGVmIGlzX2FsaXZlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnJ1bm5l
cjoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnJ1bm5lci5pc19ydW5uaW5nKCkKKyAgICAgICAg
cmV0dXJuIEZhbHNlCisKKyAgICBkZWYgY2xlYW51cChzZWxmKToKKyAgICAgICAgc2VsZi5zdG9w
KCkKKworICAgIGRlZiBleGVjdXRvcl9icm93c2VyKHNlbGYpOgorICAgICAgICBhc3NlcnQgc2Vs
Zi53ZWJkcml2ZXJfcG9ydCBpcyBub3QgTm9uZQorICAgICAgICByZXR1cm4gRXhlY3V0b3JCcm93
c2VyLCB7IndlYmRyaXZlcl9ob3N0Ijogc2VsZi53ZWJkcml2ZXJfaG9zdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJ3ZWJkcml2ZXJfcG9ydCI6IHNlbGYud2ViZHJpdmVyX3Bv
cnR9CmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVu
bmVyL3dwdHJ1bm5lci9jb25maWcuanNvbiBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90
b29scy93cHRydW5uZXIvd3B0cnVubmVyL2NvbmZpZy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwLi5kMTQ2NDI0YTBmMAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRy
aXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2NvbmZpZy5q
c29uCkBAIC0wLDAgKzEsNyBAQAoreyJob3N0IjogIiUoaG9zdClzIiwKKyAicG9ydHMiOnsiaHR0
cCI6WzgwMDAsIDgwMDFdLAorICAgICAgICAgICJodHRwcyI6Wzg0NDNdLAorICAgICAgICAgICJ3
cyI6Wzg4ODhdfSwKKyAiY2hlY2tfc3ViZG9tYWlucyI6ZmFsc2UsCisgImJpbmRfaG9zdG5hbWUi
OiUoYmluZF9ob3N0bmFtZSlzLAorICJzc2wiOnt9fQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVz
dHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvY29uZmlnLnB5IGIvV2Vi
RHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvY29uZmln
LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41YmQzZjQ2N2YzZQot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRy
dW5uZXIvd3B0cnVubmVyL2NvbmZpZy5weQpAQCAtMCwwICsxLDYwIEBACitpbXBvcnQgQ29uZmln
UGFyc2VyCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IE9y
ZGVyZWREaWN0CisKK2hlcmUgPSBvcy5wYXRoLnNwbGl0KF9fZmlsZV9fKVswXQorCitjbGFzcyBD
b25maWdEaWN0KGRpY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBiYXNlX3BhdGgsICphcmdz
LCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYuYmFzZV9wYXRoID0gYmFzZV9wYXRoCisgICAgICAg
IGRpY3QuX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQorCisgICAgZGVmIGdldF9wYXRo
KHNlbGYsIGtleSwgZGVmYXVsdD1Ob25lKToKKyAgICAgICAgaWYga2V5IG5vdCBpbiBzZWxmOgor
ICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHQKKyAgICAgICAgcGF0aCA9IHNlbGZba2V5XQorICAg
ICAgICBvcy5wYXRoLmV4cGFuZHVzZXIocGF0aCkKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguYWJz
cGF0aChvcy5wYXRoLmpvaW4oc2VsZi5iYXNlX3BhdGgsIHBhdGgpKQorCitkZWYgcmVhZChjb25m
aWdfcGF0aCk6CisgICAgY29uZmlnX3BhdGggPSBvcy5wYXRoLmFic3BhdGgoY29uZmlnX3BhdGgp
CisgICAgY29uZmlnX3Jvb3QgPSBvcy5wYXRoLnNwbGl0KGNvbmZpZ19wYXRoKVswXQorICAgIHBh
cnNlciA9IENvbmZpZ1BhcnNlci5TYWZlQ29uZmlnUGFyc2VyKCkKKyAgICBzdWNjZXNzID0gcGFy
c2VyLnJlYWQoY29uZmlnX3BhdGgpCisgICAgYXNzZXJ0IGNvbmZpZ19wYXRoIGluIHN1Y2Nlc3Ms
IHN1Y2Nlc3MKKworICAgIHN1Ym5zID0geyJwd2QiOiBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5j
dXJkaXIpfQorCisgICAgcnYgPSBPcmRlcmVkRGljdCgpCisgICAgZm9yIHNlY3Rpb24gaW4gcGFy
c2VyLnNlY3Rpb25zKCk6CisgICAgICAgIHJ2W3NlY3Rpb25dID0gQ29uZmlnRGljdChjb25maWdf
cm9vdCkKKyAgICAgICAgZm9yIGtleSBpbiBwYXJzZXIub3B0aW9ucyhzZWN0aW9uKToKKyAgICAg
ICAgICAgIHJ2W3NlY3Rpb25dW2tleV0gPSBwYXJzZXIuZ2V0KHNlY3Rpb24sIGtleSwgRmFsc2Us
IHN1Ym5zKQorCisgICAgcmV0dXJuIHJ2CisKK2RlZiBwYXRoKGFyZ3Y9Tm9uZSk6CisgICAgaWYg
YXJndiBpcyBOb25lOgorICAgICAgICBhcmd2ID0gW10KKyAgICBwYXRoID0gTm9uZQorCisgICAg
Zm9yIGksIGFyZyBpbiBlbnVtZXJhdGUoYXJndik6CisgICAgICAgIGlmIGFyZyA9PSAiLS1jb25m
aWciOgorICAgICAgICAgICAgaWYgaSArIDEgPCBsZW4oYXJndik6CisgICAgICAgICAgICAgICAg
cGF0aCA9IGFyZ3ZbaSArIDFdCisgICAgICAgIGVsaWYgYXJnLnN0YXJ0c3dpdGgoIi0tY29uZmln
PSIpOgorICAgICAgICAgICAgcGF0aCA9IGFyZy5zcGxpdCgiPSIsIDEpWzFdCisgICAgICAgIGlm
IHBhdGggaXMgbm90IE5vbmU6CisgICAgICAgICAgICBicmVhaworCisgICAgaWYgcGF0aCBpcyBO
b25lOgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cygid3B0cnVubmVyLmluaSIpOgorICAgICAg
ICAgICAgcGF0aCA9IG9zLnBhdGguYWJzcGF0aCgid3B0cnVubmVyLmluaSIpCisgICAgICAgIGVs
c2U6CisgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKGhlcmUsICIuLiIsICJ3cHRydW5u
ZXIuZGVmYXVsdC5pbmkiKQorCisgICAgcmV0dXJuIG9zLnBhdGguYWJzcGF0aChwYXRoKQorCitk
ZWYgbG9hZCgpOgorICAgIHJldHVybiByZWFkKHBhdGgoc3lzLmFyZ3YpKQpkaWZmIC0tZ2l0IGEv
V2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvZW52
aXJvbm1lbnQucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVy
L3dwdHJ1bm5lci9lbnZpcm9ubWVudC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMC4uMTY3ZGE5NTE1OWYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9p
bXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9lbnZpcm9ubWVudC5weQpAQCAt
MCwwICsxLDIyNSBAQAoraW1wb3J0IGpzb24KK2ltcG9ydCBvcworaW1wb3J0IG11bHRpcHJvY2Vz
c2luZworaW1wb3J0IHNpZ25hbAoraW1wb3J0IHNvY2tldAoraW1wb3J0IHN5cworaW1wb3J0IHRp
bWUKKworZnJvbSBtb3psb2cgaW1wb3J0IGdldF9kZWZhdWx0X2xvZ2dlciwgaGFuZGxlcnMsIHBy
b3h5CisKK2Zyb20gd3B0bG9nZ2luZyBpbXBvcnQgTG9nTGV2ZWxSZXdyaXRlcgorCitoZXJlID0g
b3MucGF0aC5zcGxpdChfX2ZpbGVfXylbMF0KKworc2VydmUgPSBOb25lCitzc2x1dGlscyA9IE5v
bmUKKworCitob3N0bmFtZXMgPSBbIndlYi1wbGF0Zm9ybS50ZXN0IiwKKyAgICAgICAgICAgICAi
d3d3LndlYi1wbGF0Zm9ybS50ZXN0IiwKKyAgICAgICAgICAgICAid3d3MS53ZWItcGxhdGZvcm0u
dGVzdCIsCisgICAgICAgICAgICAgInd3dzIud2ViLXBsYXRmb3JtLnRlc3QiLAorICAgICAgICAg
ICAgICJ4bi0tbjhqNmRzNTNsd3drcnFodjI4YS53ZWItcGxhdGZvcm0udGVzdCIsCisgICAgICAg
ICAgICAgInhuLS1sdmUtNmxhZC53ZWItcGxhdGZvcm0udGVzdCJdCisKKworZGVmIGRvX2RlbGF5
ZWRfaW1wb3J0cyhsb2dnZXIsIHRlc3RfcGF0aHMpOgorICAgIGdsb2JhbCBzZXJ2ZSwgc3NsdXRp
bHMKKworICAgIHNlcnZlX3Jvb3QgPSBzZXJ2ZV9wYXRoKHRlc3RfcGF0aHMpCisgICAgc3lzLnBh
dGguaW5zZXJ0KDAsIHNlcnZlX3Jvb3QpCisKKyAgICBmYWlsZWQgPSBbXQorCisgICAgdHJ5Ogor
ICAgICAgICBmcm9tIHRvb2xzLnNlcnZlIGltcG9ydCBzZXJ2ZQorICAgIGV4Y2VwdCBJbXBvcnRF
cnJvcjoKKyAgICAgICAgZnJvbSB3cHRfdG9vbHMuc2VydmUgaW1wb3J0IHNlcnZlCisgICAgZXhj
ZXB0IEltcG9ydEVycm9yOgorICAgICAgICBmYWlsZWQuYXBwZW5kKCJzZXJ2ZSIpCisKKyAgICB0
cnk6CisgICAgICAgIGltcG9ydCBzc2x1dGlscworICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAg
ICAgICAgZmFpbGVkLmFwcGVuZCgic3NsdXRpbHMiKQorCisgICAgaWYgZmFpbGVkOgorICAgICAg
ICBsb2dnZXIuY3JpdGljYWwoCisgICAgICAgICAgICAiRmFpbGVkIHRvIGltcG9ydCAlcy4gRW5z
dXJlIHRoYXQgdGVzdHMgcGF0aCAlcyBjb250YWlucyB3ZWItcGxhdGZvcm0tdGVzdHMiICUKKyAg
ICAgICAgICAgICgiLCAiLmpvaW4oZmFpbGVkKSwgc2VydmVfcm9vdCkpCisgICAgICAgIHN5cy5l
eGl0KDEpCisKKworZGVmIHNlcnZlX3BhdGgodGVzdF9wYXRocyk6CisgICAgcmV0dXJuIHRlc3Rf
cGF0aHNbIi8iXVsidGVzdHNfcGF0aCJdCisKKworZGVmIGdldF9zc2xfa3dhcmdzKCoqa3dhcmdz
KToKKyAgICBpZiBrd2FyZ3NbInNzbF90eXBlIl0gPT0gIm9wZW5zc2wiOgorICAgICAgICBhcmdz
ID0geyJvcGVuc3NsX2JpbmFyeSI6IGt3YXJnc1sib3BlbnNzbF9iaW5hcnkiXX0KKyAgICBlbGlm
IGt3YXJnc1sic3NsX3R5cGUiXSA9PSAicHJlZ2VuZXJhdGVkIjoKKyAgICAgICAgYXJncyA9IHsi
aG9zdF9rZXlfcGF0aCI6IGt3YXJnc1siaG9zdF9rZXlfcGF0aCJdLAorICAgICAgICAgICAgICAg
ICJob3N0X2NlcnRfcGF0aCI6IGt3YXJnc1siaG9zdF9jZXJ0X3BhdGgiXSwKKyAgICAgICAgICAg
ICAgICAgImNhX2NlcnRfcGF0aCI6IGt3YXJnc1siY2FfY2VydF9wYXRoIl19CisgICAgZWxzZToK
KyAgICAgICAgYXJncyA9IHt9CisgICAgcmV0dXJuIGFyZ3MKKworCitkZWYgc3NsX2Vudihsb2dn
ZXIsICoqa3dhcmdzKToKKyAgICBzc2xfZW52X2NscyA9IHNzbHV0aWxzLmVudmlyb25tZW50c1tr
d2FyZ3NbInNzbF90eXBlIl1dCisgICAgcmV0dXJuIHNzbF9lbnZfY2xzKGxvZ2dlciwgKipnZXRf
c3NsX2t3YXJncygqKmt3YXJncykpCisKKworY2xhc3MgVGVzdEVudmlyb25tZW50RXJyb3IoRXhj
ZXB0aW9uKToKKyAgICBwYXNzCisKKworY2xhc3MgVGVzdEVudmlyb25tZW50KG9iamVjdCk6Cisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RfcGF0aHMsIHNzbF9lbnYsIHBhdXNlX2FmdGVyX3Rl
c3QsIGRlYnVnX2luZm8sIG9wdGlvbnMsIGVudl9leHRyYXMpOgorICAgICAgICAiIiJDb250ZXh0
IG1hbmFnZXIgdGhhdCBvd25zIHRoZSB0ZXN0IGVudmlyb25tZW50IGkuZS4gdGhlIGh0dHAgYW5k
CisgICAgICAgIHdlYnNvY2tldHMgc2VydmVycyIiIgorICAgICAgICBzZWxmLnRlc3RfcGF0aHMg
PSB0ZXN0X3BhdGhzCisgICAgICAgIHNlbGYuc3NsX2VudiA9IHNzbF9lbnYKKyAgICAgICAgc2Vs
Zi5zZXJ2ZXIgPSBOb25lCisgICAgICAgIHNlbGYuY29uZmlnID0gTm9uZQorICAgICAgICBzZWxm
LmV4dGVybmFsX2NvbmZpZyA9IE5vbmUKKyAgICAgICAgc2VsZi5wYXVzZV9hZnRlcl90ZXN0ID0g
cGF1c2VfYWZ0ZXJfdGVzdAorICAgICAgICBzZWxmLnRlc3Rfc2VydmVyX3BvcnQgPSBvcHRpb25z
LnBvcCgidGVzdF9zZXJ2ZXJfcG9ydCIsIFRydWUpCisgICAgICAgIHNlbGYuZGVidWdfaW5mbyA9
IGRlYnVnX2luZm8KKyAgICAgICAgc2VsZi5vcHRpb25zID0gb3B0aW9ucyBpZiBvcHRpb25zIGlz
IG5vdCBOb25lIGVsc2Uge30KKworICAgICAgICBzZWxmLmNhY2hlX21hbmFnZXIgPSBtdWx0aXBy
b2Nlc3NpbmcuTWFuYWdlcigpCisgICAgICAgIHNlbGYuc3Rhc2ggPSBzZXJ2ZS5zdGFzaC5TdGFz
aFNlcnZlcigpCisgICAgICAgIHNlbGYuZW52X2V4dHJhcyA9IGVudl9leHRyYXMKKworCisgICAg
ZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgc2VsZi5zdGFzaC5fX2VudGVyX18oKQorICAg
ICAgICBzZWxmLnNzbF9lbnYuX19lbnRlcl9fKCkKKyAgICAgICAgc2VsZi5jYWNoZV9tYW5hZ2Vy
Ll9fZW50ZXJfXygpCisgICAgICAgIGZvciBjbSBpbiBzZWxmLmVudl9leHRyYXM6CisgICAgICAg
ICAgICBjbS5fX2VudGVyX18oc2VsZi5vcHRpb25zKQorICAgICAgICBzZWxmLnNldHVwX3NlcnZl
cl9sb2dnaW5nKCkKKyAgICAgICAgc2VsZi5jb25maWcgPSBzZWxmLmxvYWRfY29uZmlnKCkKKyAg
ICAgICAgc2VydmUuc2V0X2NvbXB1dGVkX2RlZmF1bHRzKHNlbGYuY29uZmlnKQorICAgICAgICBz
ZWxmLmV4dGVybmFsX2NvbmZpZywgc2VsZi5zZXJ2ZXJzID0gc2VydmUuc3RhcnQoc2VsZi5jb25m
aWcsIHNlbGYuc3NsX2VudiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0X3JvdXRlcygpKQorICAgICAgICBpZiBzZWxmLm9w
dGlvbnMuZ2V0KCJzdXBwb3J0c19kZWJ1Z2dlciIpIGFuZCBzZWxmLmRlYnVnX2luZm8gYW5kIHNl
bGYuZGVidWdfaW5mby5pbnRlcmFjdGl2ZToKKyAgICAgICAgICAgIHNlbGYuaWdub3JlX2ludGVy
cnVwdHMoKQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsIGV4
Y190eXBlLCBleGNfdmFsLCBleGNfdGIpOgorICAgICAgICBzZWxmLnByb2Nlc3NfaW50ZXJydXB0
cygpCisKKyAgICAgICAgZm9yIHNjaGVtZSwgc2VydmVycyBpbiBzZWxmLnNlcnZlcnMuaXRlcml0
ZW1zKCk6CisgICAgICAgICAgICBmb3IgcG9ydCwgc2VydmVyIGluIHNlcnZlcnM6CisgICAgICAg
ICAgICAgICAgc2VydmVyLmtpbGwoKQorICAgICAgICBmb3IgY20gaW4gc2VsZi5lbnZfZXh0cmFz
OgorICAgICAgICAgICAgY20uX19leGl0X18oKQorICAgICAgICBzZWxmLmNhY2hlX21hbmFnZXIu
X19leGl0X18oZXhjX3R5cGUsIGV4Y192YWwsIGV4Y190YikKKyAgICAgICAgc2VsZi5zc2xfZW52
Ll9fZXhpdF9fKGV4Y190eXBlLCBleGNfdmFsLCBleGNfdGIpCisgICAgICAgIHNlbGYuc3Rhc2gu
X19leGl0X18oKQorCisgICAgZGVmIGlnbm9yZV9pbnRlcnJ1cHRzKHNlbGYpOgorICAgICAgICBz
aWduYWwuc2lnbmFsKHNpZ25hbC5TSUdJTlQsIHNpZ25hbC5TSUdfSUdOKQorCisgICAgZGVmIHBy
b2Nlc3NfaW50ZXJydXB0cyhzZWxmKToKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lH
SU5ULCBzaWduYWwuU0lHX0RGTCkKKworICAgIGRlZiBsb2FkX2NvbmZpZyhzZWxmKToKKyAgICAg
ICAgZGVmYXVsdF9jb25maWdfcGF0aCA9IG9zLnBhdGguam9pbihzZXJ2ZV9wYXRoKHNlbGYudGVz
dF9wYXRocyksICJjb25maWcuZGVmYXVsdC5qc29uIikKKyAgICAgICAgbG9jYWxfY29uZmlnX3Bh
dGggPSBvcy5wYXRoLmpvaW4oaGVyZSwgImNvbmZpZy5qc29uIikKKworICAgICAgICB3aXRoIG9w
ZW4oZGVmYXVsdF9jb25maWdfcGF0aCkgYXMgZjoKKyAgICAgICAgICAgIGRlZmF1bHRfY29uZmln
ID0ganNvbi5sb2FkKGYpCisKKyAgICAgICAgd2l0aCBvcGVuKGxvY2FsX2NvbmZpZ19wYXRoKSBh
cyBmOgorICAgICAgICAgICAgZGF0YSA9IGYucmVhZCgpCisgICAgICAgICAgICBsb2NhbF9jb25m
aWcgPSBqc29uLmxvYWRzKGRhdGEgJSBzZWxmLm9wdGlvbnMpCisKKyAgICAgICAgI1RPRE86IGFs
bG93IG5vbi1kZWZhdWx0IGNvbmZpZ3VyYXRpb24gZm9yIHNzbAorCisgICAgICAgIGxvY2FsX2Nv
bmZpZ1siZXh0ZXJuYWxfaG9zdCJdID0gc2VsZi5vcHRpb25zLmdldCgiZXh0ZXJuYWxfaG9zdCIs
IE5vbmUpCisgICAgICAgIGxvY2FsX2NvbmZpZ1sic3NsIl1bImVuY3J5cHRfYWZ0ZXJfY29ubmVj
dCJdID0gc2VsZi5vcHRpb25zLmdldCgiZW5jcnlwdF9hZnRlcl9jb25uZWN0IiwgRmFsc2UpCisK
KyAgICAgICAgY29uZmlnID0gc2VydmUubWVyZ2VfanNvbihkZWZhdWx0X2NvbmZpZywgbG9jYWxf
Y29uZmlnKQorICAgICAgICBjb25maWdbImRvY19yb290Il0gPSBzZXJ2ZV9wYXRoKHNlbGYudGVz
dF9wYXRocykKKworICAgICAgICBpZiBub3Qgc2VsZi5zc2xfZW52LnNzbF9lbmFibGVkOgorICAg
ICAgICAgICAgY29uZmlnWyJwb3J0cyJdWyJodHRwcyJdID0gW05vbmVdCisKKyAgICAgICAgaG9z
dCA9IHNlbGYub3B0aW9ucy5nZXQoImNlcnRpZmljYXRlX2RvbWFpbiIsIGNvbmZpZ1siaG9zdCJd
KQorICAgICAgICBob3N0cyA9IFtob3N0XQorICAgICAgICBob3N0cy5leHRlbmQoIiVzLiVzIiAl
IChpdGVtWzBdLCBob3N0KSBmb3IgaXRlbSBpbiBzZXJ2ZS5nZXRfc3ViZG9tYWlucyhob3N0KS52
YWx1ZXMoKSkKKyAgICAgICAga2V5X2ZpbGUsIGNlcnRpZmljYXRlID0gc2VsZi5zc2xfZW52Lmhv
c3RfY2VydF9wYXRoKGhvc3RzKQorCisgICAgICAgIGNvbmZpZ1sia2V5X2ZpbGUiXSA9IGtleV9m
aWxlCisgICAgICAgIGNvbmZpZ1siY2VydGlmaWNhdGUiXSA9IGNlcnRpZmljYXRlCisKKyAgICAg
ICAgcmV0dXJuIGNvbmZpZworCisgICAgZGVmIHNldHVwX3NlcnZlcl9sb2dnaW5nKHNlbGYpOgor
ICAgICAgICBzZXJ2ZXJfbG9nZ2VyID0gZ2V0X2RlZmF1bHRfbG9nZ2VyKGNvbXBvbmVudD0id3B0
c2VydmUiKQorICAgICAgICBhc3NlcnQgc2VydmVyX2xvZ2dlciBpcyBub3QgTm9uZQorICAgICAg
ICBsb2dfZmlsdGVyID0gaGFuZGxlcnMuTG9nTGV2ZWxGaWx0ZXIobGFtYmRhIHg6eCwgImluZm8i
KQorICAgICAgICAjIERvd25ncmFkZSBlcnJvcnMgdG8gd2FybmluZ3MgZm9yIHRoZSBzZXJ2ZXIK
KyAgICAgICAgbG9nX2ZpbHRlciA9IExvZ0xldmVsUmV3cml0ZXIobG9nX2ZpbHRlciwgWyJlcnJv
ciJdLCAid2FybmluZyIpCisgICAgICAgIHNlcnZlcl9sb2dnZXIuY29tcG9uZW50X2ZpbHRlciA9
IGxvZ19maWx0ZXIKKworICAgICAgICBzZXJ2ZXJfbG9nZ2VyID0gcHJveHkuUXVldWVkUHJveHlM
b2dnZXIoc2VydmVyX2xvZ2dlcikKKworICAgICAgICB0cnk6CisgICAgICAgICAgICAjU2V0IGFz
IHRoZSBkZWZhdWx0IGxvZ2dlciBmb3Igd3B0c2VydmUKKyAgICAgICAgICAgIHNlcnZlLnNldF9s
b2dnZXIoc2VydmVyX2xvZ2dlcikKKyAgICAgICAgICAgIHNlcnZlLmxvZ2dlciA9IHNlcnZlcl9s
b2dnZXIKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICMgVGhpcyBoYXBw
ZW5zIGlmIGxvZ2dpbmcgaGFzIGFscmVhZHkgYmVlbiBzZXQgdXAgZm9yIHdwdHNlcnZlCisgICAg
ICAgICAgICBwYXNzCisKKyAgICBkZWYgZ2V0X3JvdXRlcyhzZWxmKToKKyAgICAgICAgcm91dGVf
YnVpbGRlciA9IHNlcnZlLlJvdXRlc0J1aWxkZXIoKQorCisgICAgICAgIGZvciBwYXRoLCBmb3Jt
YXRfYXJncywgY29udGVudF90eXBlLCByb3V0ZSBpbiBbCisgICAgICAgICAgICAgICAgKCJ0ZXN0
aGFybmVzc19ydW5uZXIuaHRtbCIsIHt9LCAidGV4dC9odG1sIiwgIi90ZXN0aGFybmVzc19ydW5u
ZXIuaHRtbCIpLAorICAgICAgICAgICAgICAgIChzZWxmLm9wdGlvbnMuZ2V0KCJ0ZXN0aGFybmVz
c3JlcG9ydCIsICJ0ZXN0aGFybmVzc3JlcG9ydC5qcyIpLAorICAgICAgICAgICAgICAgICB7Im91
dHB1dCI6IHNlbGYucGF1c2VfYWZ0ZXJfdGVzdH0sICJ0ZXh0L2phdmFzY3JpcHQiLAorICAgICAg
ICAgICAgICAgICAiL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyIpXToKKyAgICAgICAg
ICAgIHBhdGggPSBvcy5wYXRoLm5vcm1wYXRoKG9zLnBhdGguam9pbihoZXJlLCBwYXRoKSkKKyAg
ICAgICAgICAgIHJvdXRlX2J1aWxkZXIuYWRkX3N0YXRpYyhwYXRoLCBmb3JtYXRfYXJncywgY29u
dGVudF90eXBlLCByb3V0ZSkKKworICAgICAgICBmb3IgdXJsX2Jhc2UsIHBhdGhzIGluIHNlbGYu
dGVzdF9wYXRocy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGlmIHVybF9iYXNlID09ICIvIjoK
KyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgcm91dGVfYnVpbGRlci5hZGRf
bW91bnRfcG9pbnQodXJsX2Jhc2UsIHBhdGhzWyJ0ZXN0c19wYXRoIl0pCisKKyAgICAgICAgaWYg
Ii8iIG5vdCBpbiBzZWxmLnRlc3RfcGF0aHM6CisgICAgICAgICAgICBkZWwgcm91dGVfYnVpbGRl
ci5tb3VudHBvaW50X3JvdXRlc1siLyJdCisKKyAgICAgICAgcmV0dXJuIHJvdXRlX2J1aWxkZXIu
Z2V0X3JvdXRlcygpCisKKyAgICBkZWYgZW5zdXJlX3N0YXJ0ZWQoc2VsZik6CisgICAgICAgICMg
UGF1c2UgZm9yIGEgd2hpbGUgdG8gZW5zdXJlIHRoYXQgdGhlIHNlcnZlciBoYXMgYSBjaGFuY2Ug
dG8gc3RhcnQKKyAgICAgICAgZm9yIF8gaW4geHJhbmdlKDIwKToKKyAgICAgICAgICAgIGZhaWxl
ZCA9IHNlbGYudGVzdF9zZXJ2ZXJzKCkKKyAgICAgICAgICAgIGlmIG5vdCBmYWlsZWQ6CisgICAg
ICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICB0aW1lLnNsZWVwKDAuNSkKKyAgICAgICAg
cmFpc2UgRW52aXJvbm1lbnRFcnJvcigiU2VydmVycyBmYWlsZWQgdG8gc3RhcnQgKHNjaGVtZTpw
b3J0KTogJXMiICUgKCIlczolcyIgZm9yIGl0ZW0gaW4gZmFpbGVkKSkKKworICAgIGRlZiB0ZXN0
X3NlcnZlcnMoc2VsZik6CisgICAgICAgIGZhaWxlZCA9IFtdCisgICAgICAgIGZvciBzY2hlbWUs
IHNlcnZlcnMgaW4gc2VsZi5zZXJ2ZXJzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgZm9yIHBv
cnQsIHNlcnZlciBpbiBzZXJ2ZXJzOgorICAgICAgICAgICAgICAgIGlmIHNlbGYudGVzdF9zZXJ2
ZXJfcG9ydDoKKyAgICAgICAgICAgICAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoKQorICAgICAg
ICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBzLmNvbm5lY3QoKHNl
bGYuY29uZmlnWyJob3N0Il0sIHBvcnQpKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgc29j
a2V0LmVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgZmFpbGVkLmFwcGVuZCgoc2NoZW1l
LCBwb3J0KSkKKyAgICAgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHMuY2xvc2UoKQorCisgICAgICAgICAgICAgICAgaWYgbm90IHNlcnZlci5pc19hbGl2
ZSgpOgorICAgICAgICAgICAgICAgICAgICBmYWlsZWQuYXBwZW5kKChzY2hlbWUsIHBvcnQpKQpk
aWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93
cHRydW5uZXIvZXhlY3V0b3JzL19faW5pdF9fLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQv
dzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvZXhlY3V0b3JzL19faW5pdF9fLnB5Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yNDc2MWI4MzgzMAotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0
cnVubmVyL2V4ZWN1dG9ycy9fX2luaXRfXy5weQpAQCAtMCwwICsxLDQgQEAKK2Zyb20gYmFzZSBp
bXBvcnQgKGV4ZWN1dG9yX2t3YXJncywKKyAgICAgICAgICAgICAgICAgIHRlc3RoYXJuZXNzX3Jl
c3VsdF9jb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICByZWZ0ZXN0X3Jlc3VsdF9jb252ZXJ0
ZXIsCisgICAgICAgICAgICAgICAgICBUZXN0RXhlY3V0b3IpCmRpZmYgLS1naXQgYS9XZWJEcml2
ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9leGVjdXRvcnMv
YmFzZS5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0
cnVubmVyL2V4ZWN1dG9ycy9iYXNlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi4yN2JlMGM1NGI3OAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2lt
cG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2V4ZWN1dG9ycy9iYXNlLnB5CkBA
IC0wLDAgKzEsNDc5IEBACitpbXBvcnQgaGFzaGxpYgoraW1wb3J0IGh0dHBsaWIKK2ltcG9ydCBv
cworaW1wb3J0IHRocmVhZGluZworaW1wb3J0IHRyYWNlYmFjaworaW1wb3J0IHNvY2tldAoraW1w
b3J0IHVybHBhcnNlCitmcm9tIGFiYyBpbXBvcnQgQUJDTWV0YSwgYWJzdHJhY3RtZXRob2QKKwor
ZnJvbSAuLnRlc3RydW5uZXIgaW1wb3J0IFN0b3AKKworaGVyZSA9IG9zLnBhdGguc3BsaXQoX19m
aWxlX18pWzBdCisKKyMgRXh0cmEgdGltZW91dCB0byB1c2UgYWZ0ZXIgaW50ZXJuYWwgdGVzdCB0
aW1lb3V0IGF0IHdoaWNoIHRoZSBoYXJuZXNzCisjIHNob3VsZCBmb3JjZSBhIHRpbWVvdXQKK2V4
dHJhX3RpbWVvdXQgPSA1ICMgc2Vjb25kcworCisKK2RlZiBleGVjdXRvcl9rd2FyZ3ModGVzdF90
eXBlLCBzZXJ2ZXJfY29uZmlnLCBjYWNoZV9tYW5hZ2VyLCAqKmt3YXJncyk6CisgICAgdGltZW91
dF9tdWx0aXBsaWVyID0ga3dhcmdzWyJ0aW1lb3V0X211bHRpcGxpZXIiXQorICAgIGlmIHRpbWVv
dXRfbXVsdGlwbGllciBpcyBOb25lOgorICAgICAgICB0aW1lb3V0X211bHRpcGxpZXIgPSAxCisK
KyAgICBleGVjdXRvcl9rd2FyZ3MgPSB7InNlcnZlcl9jb25maWciOiBzZXJ2ZXJfY29uZmlnLAor
ICAgICAgICAgICAgICAgICAgICAgICAidGltZW91dF9tdWx0aXBsaWVyIjogdGltZW91dF9tdWx0
aXBsaWVyLAorICAgICAgICAgICAgICAgICAgICAgICAiZGVidWdfaW5mbyI6IGt3YXJnc1siZGVi
dWdfaW5mbyJdfQorCisgICAgaWYgdGVzdF90eXBlID09ICJyZWZ0ZXN0IjoKKyAgICAgICAgZXhl
Y3V0b3Jfa3dhcmdzWyJzY3JlZW5zaG90X2NhY2hlIl0gPSBjYWNoZV9tYW5hZ2VyLmRpY3QoKQor
CisgICAgaWYgdGVzdF90eXBlID09ICJ3ZHNwZWMiOgorICAgICAgICBleGVjdXRvcl9rd2FyZ3Nb
ImJpbmFyeSJdID0ga3dhcmdzLmdldCgiYmluYXJ5IikKKyAgICAgICAgZXhlY3V0b3Jfa3dhcmdz
WyJ3ZWJkcml2ZXJfYmluYXJ5Il0gPSBrd2FyZ3MuZ2V0KCJ3ZWJkcml2ZXJfYmluYXJ5IikKKyAg
ICAgICAgZXhlY3V0b3Jfa3dhcmdzWyJ3ZWJkcml2ZXJfYXJncyJdID0ga3dhcmdzLmdldCgid2Vi
ZHJpdmVyX2FyZ3MiKQorCisgICAgcmV0dXJuIGV4ZWN1dG9yX2t3YXJncworCisKK2RlZiBzdHJp
cF9zZXJ2ZXIodXJsKToKKyAgICAiIiJSZW1vdmUgdGhlIHNjaGVtZSBhbmQgbmV0bG9jIGZyb20g
YSB1cmwsIGxlYXZpbmcgb25seSB0aGUgcGF0aCBhbmQgYW55IHF1ZXJ5CisgICAgb3IgZnJhZ21l
bnQuCisKKyAgICB1cmwgLSB0aGUgdXJsIHRvIHN0cmlwCisKKyAgICBlLmcuIGh0dHA6Ly9leGFt
cGxlLm9yZzo4MDAwL3Rlc3RzP2lkPTEjMiBiZWNvbWVzIC90ZXN0cz9pZD0xIzIiIiIKKworICAg
IHVybF9wYXJ0cyA9IGxpc3QodXJscGFyc2UudXJsc3BsaXQodXJsKSkKKyAgICB1cmxfcGFydHNb
MF0gPSAiIgorICAgIHVybF9wYXJ0c1sxXSA9ICIiCisgICAgcmV0dXJuIHVybHBhcnNlLnVybHVu
c3BsaXQodXJsX3BhcnRzKQorCisKK2NsYXNzIFRlc3RoYXJuZXNzUmVzdWx0Q29udmVydGVyKG9i
amVjdCk6CisgICAgaGFybmVzc19jb2RlcyA9IHswOiAiT0siLAorICAgICAgICAgICAgICAgICAg
ICAgMTogIkVSUk9SIiwKKyAgICAgICAgICAgICAgICAgICAgIDI6ICJUSU1FT1VUIn0KKworICAg
IHRlc3RfY29kZXMgPSB7MDogIlBBU1MiLAorICAgICAgICAgICAgICAgICAgMTogIkZBSUwiLAor
ICAgICAgICAgICAgICAgICAgMjogIlRJTUVPVVQiLAorICAgICAgICAgICAgICAgICAgMzogIk5P
VFJVTiJ9CisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgdGVzdCwgcmVzdWx0KToKKyAgICAgICAg
IiIiQ29udmVydCBhIEpTT04gcmVzdWx0IGludG8gYSAoVGVzdFJlc3VsdCwgW1N1YnRlc3RSZXN1
bHRdKSB0dXBsZSIiIgorICAgICAgICByZXN1bHRfdXJsLCBzdGF0dXMsIG1lc3NhZ2UsIHN0YWNr
LCBzdWJ0ZXN0X3Jlc3VsdHMgPSByZXN1bHQKKyAgICAgICAgYXNzZXJ0IHJlc3VsdF91cmwgPT0g
dGVzdC51cmwsICgiR290IHJlc3VsdHMgZnJvbSAlcywgZXhwZWN0ZWQgJXMiICUKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlc3VsdF91cmwsIHRlc3QudXJsKSkKKyAg
ICAgICAgaGFybmVzc19yZXN1bHQgPSB0ZXN0LnJlc3VsdF9jbHMoc2VsZi5oYXJuZXNzX2NvZGVz
W3N0YXR1c10sIG1lc3NhZ2UpCisgICAgICAgIHJldHVybiAoaGFybmVzc19yZXN1bHQsCisgICAg
ICAgICAgICAgICAgW3Rlc3Quc3VidGVzdF9yZXN1bHRfY2xzKG5hbWUsIHNlbGYudGVzdF9jb2Rl
c1tzdGF0dXNdLCBtZXNzYWdlLCBzdGFjaykKKyAgICAgICAgICAgICAgICAgZm9yIG5hbWUsIHN0
YXR1cywgbWVzc2FnZSwgc3RhY2sgaW4gc3VidGVzdF9yZXN1bHRzXSkKKworCit0ZXN0aGFybmVz
c19yZXN1bHRfY29udmVydGVyID0gVGVzdGhhcm5lc3NSZXN1bHRDb252ZXJ0ZXIoKQorCisKK2Rl
ZiByZWZ0ZXN0X3Jlc3VsdF9jb252ZXJ0ZXIoc2VsZiwgdGVzdCwgcmVzdWx0KToKKyAgICByZXR1
cm4gKHRlc3QucmVzdWx0X2NscyhyZXN1bHRbInN0YXR1cyJdLCByZXN1bHRbIm1lc3NhZ2UiXSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT1yZXN1bHQuZ2V0KCJleHRyYSIpKSwg
W10pCisKKworZGVmIHB5dGVzdF9yZXN1bHRfY29udmVydGVyKHNlbGYsIHRlc3QsIGRhdGEpOgor
ICAgIGhhcm5lc3NfZGF0YSwgc3VidGVzdF9kYXRhID0gZGF0YQorCisgICAgaWYgc3VidGVzdF9k
YXRhIGlzIE5vbmU6CisgICAgICAgIHN1YnRlc3RfZGF0YSA9IFtdCisKKyAgICBoYXJuZXNzX3Jl
c3VsdCA9IHRlc3QucmVzdWx0X2NscygqaGFybmVzc19kYXRhKQorICAgIHN1YnRlc3RfcmVzdWx0
cyA9IFt0ZXN0LnN1YnRlc3RfcmVzdWx0X2NscygqaXRlbSkgZm9yIGl0ZW0gaW4gc3VidGVzdF9k
YXRhXQorCisgICAgcmV0dXJuIChoYXJuZXNzX3Jlc3VsdCwgc3VidGVzdF9yZXN1bHRzKQorCisK
K2NsYXNzIEV4ZWN1dG9yRXhjZXB0aW9uKEV4Y2VwdGlvbik6CisgICAgZGVmIF9faW5pdF9fKHNl
bGYsIHN0YXR1cywgbWVzc2FnZSk6CisgICAgICAgIHNlbGYuc3RhdHVzID0gc3RhdHVzCisgICAg
ICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2UKKworCitjbGFzcyBUZXN0RXhlY3V0b3Iob2JqZWN0
KToKKyAgICBfX21ldGFjbGFzc19fID0gQUJDTWV0YQorCisgICAgdGVzdF90eXBlID0gTm9uZQor
ICAgIGNvbnZlcnRfcmVzdWx0ID0gTm9uZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb3dz
ZXIsIHNlcnZlcl9jb25maWcsIHRpbWVvdXRfbXVsdGlwbGllcj0xLAorICAgICAgICAgICAgICAg
ICBkZWJ1Z19pbmZvPU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgIiIiQWJzdHJhY3QgQmFzZSBj
bGFzcyBmb3Igb2JqZWN0IHRoYXQgYWN0dWFsbHkgZXhlY3V0ZXMgdGhlIHRlc3RzIGluIGEKKyAg
ICAgICAgc3BlY2lmaWMgYnJvd3Nlci4gVHlwaWNhbGx5IHRoZXJlIHdpbGwgYmUgYSBkaWZmZXJl
bnQgVGVzdEV4ZWN1dG9yCisgICAgICAgIHN1YmNsYXNzIGZvciBlYWNoIHRlc3QgdHlwZSBhbmQg
bWV0aG9kIG9mIGV4ZWN1dGluZyB0ZXN0cy4KKworICAgICAgICA6cGFyYW0gYnJvd3NlcjogRXhl
Y3V0b3JCcm93c2VyIGluc3RhbmNlIHByb3ZpZGluZyBwcm9wZXJ0aWVzIG9mIHRoZQorICAgICAg
ICAgICAgICAgICAgICAgICAgYnJvd3NlciB0aGF0IHdpbGwgYmUgdGVzdGVkLgorICAgICAgICA6
cGFyYW0gc2VydmVyX2NvbmZpZzogRGljdGlvbmFyeSBvZiB3cHRzZXJ2ZSBzZXJ2ZXIgY29uZmln
dXJhdGlvbiBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0gc3RvcmVk
IGluIFRlc3RFbnZpcm9ubWVudC5leHRlcm5hbF9jb25maWcKKyAgICAgICAgOnBhcmFtIHRpbWVv
dXRfbXVsdGlwbGllcjogTXVsdGlwbGllciByZWxhdGl2ZSB0byBiYXNlIHRpbWVvdXQgdG8gdXNl
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gc2V0dGluZyB0ZXN0IHRp
bWVvdXQuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnJ1bm5lciA9IE5vbmUKKyAgICAgICAg
c2VsZi5icm93c2VyID0gYnJvd3NlcgorICAgICAgICBzZWxmLnNlcnZlcl9jb25maWcgPSBzZXJ2
ZXJfY29uZmlnCisgICAgICAgIHNlbGYudGltZW91dF9tdWx0aXBsaWVyID0gdGltZW91dF9tdWx0
aXBsaWVyCisgICAgICAgIHNlbGYuZGVidWdfaW5mbyA9IGRlYnVnX2luZm8KKyAgICAgICAgc2Vs
Zi5sYXN0X2Vudmlyb25tZW50ID0geyJwcm90b2NvbCI6ICJodHRwIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJwcmVmcyI6IHt9fQorICAgICAgICBzZWxmLnByb3RvY29sID0g
Tm9uZSAjIFRoaXMgbXVzdCBiZSBzZXQgaW4gc3ViY2xhc3NlcworCisgICAgQHByb3BlcnR5Cisg
ICAgZGVmIGxvZ2dlcihzZWxmKToKKyAgICAgICAgIiIiU3RydWN0dXJlZExvZ2dlciBmb3IgdGhp
cyBleGVjdXRvciIiIgorICAgICAgICBpZiBzZWxmLnJ1bm5lciBpcyBub3QgTm9uZToKKyAgICAg
ICAgICAgIHJldHVybiBzZWxmLnJ1bm5lci5sb2dnZXIKKworICAgIGRlZiBzZXR1cChzZWxmLCBy
dW5uZXIpOgorICAgICAgICAiIiJSdW4gc3RlcHMgbmVlZGVkIGJlZm9yZSB0ZXN0cyBjYW4gYmUg
c3RhcnRlZCBlLmcuIGNvbm5lY3RpbmcgdG8KKyAgICAgICAgYnJvd3NlciBpbnN0YW5jZQorCisg
ICAgICAgIDpwYXJhbSBydW5uZXI6IFRlc3RSdW5uZXIgaW5zdGFuY2UgdGhhdCBpcyBnb2luZyB0
byBydW4gdGhlIHRlc3RzIiIiCisgICAgICAgIHNlbGYucnVubmVyID0gcnVubmVyCisgICAgICAg
IGlmIHNlbGYucHJvdG9jb2wgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLnByb3RvY29s
LnNldHVwKHJ1bm5lcikKKworICAgIGRlZiB0ZWFyZG93bihzZWxmKToKKyAgICAgICAgIiIiUnVu
IGNsZWFudXAgc3RlcHMgYWZ0ZXIgdGVzdHMgaGF2ZSBmaW5pc2hlZCIiIgorICAgICAgICBpZiBz
ZWxmLnByb3RvY29sIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5wcm90b2NvbC50ZWFy
ZG93bigpCisKKyAgICBkZWYgcnVuX3Rlc3Qoc2VsZiwgdGVzdCk6CisgICAgICAgICIiIlJ1biBh
IHBhcnRpY3VsYXIgdGVzdC4KKworICAgICAgICA6cGFyYW0gdGVzdDogVGhlIHRlc3QgdG8gcnVu
IiIiCisgICAgICAgIGlmIHRlc3QuZW52aXJvbm1lbnQgIT0gc2VsZi5sYXN0X2Vudmlyb25tZW50
OgorICAgICAgICAgICAgc2VsZi5vbl9lbnZpcm9ubWVudF9jaGFuZ2UodGVzdC5lbnZpcm9ubWVu
dCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICByZXN1bHQgPSBzZWxmLmRvX3Rlc3QodGVz
dCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgcmVzdWx0ID0g
c2VsZi5yZXN1bHRfZnJvbV9leGNlcHRpb24odGVzdCwgZSkKKworICAgICAgICBpZiByZXN1bHQg
aXMgU3RvcDoKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQKKworICAgICAgICAjIGxvZyByZXN1
bHQgb2YgcGFyZW50IHRlc3QKKyAgICAgICAgaWYgcmVzdWx0WzBdLnN0YXR1cyA9PSAiRVJST1Ii
OgorICAgICAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcocmVzdWx0WzBdLm1lc3NhZ2UpCisKKyAg
ICAgICAgc2VsZi5sYXN0X2Vudmlyb25tZW50ID0gdGVzdC5lbnZpcm9ubWVudAorCisgICAgICAg
IHNlbGYucnVubmVyLnNlbmRfbWVzc2FnZSgidGVzdF9lbmRlZCIsIHRlc3QsIHJlc3VsdCkKKwor
ICAgIGRlZiBzZXJ2ZXJfdXJsKHNlbGYsIHByb3RvY29sKToKKyAgICAgICAgcmV0dXJuICIlczov
LyVzOiVzIiAlIChwcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxm
LnNlcnZlcl9jb25maWdbImhvc3QiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLnNlcnZlcl9jb25maWdbInBvcnRzIl1bcHJvdG9jb2xdWzBdKQorCisgICAgZGVmIHRlc3Rf
dXJsKHNlbGYsIHRlc3QpOgorICAgICAgICByZXR1cm4gdXJscGFyc2UudXJsam9pbihzZWxmLnNl
cnZlcl91cmwodGVzdC5lbnZpcm9ubWVudFsicHJvdG9jb2wiXSksIHRlc3QudXJsKQorCisgICAg
QGFic3RyYWN0bWV0aG9kCisgICAgZGVmIGRvX3Rlc3Qoc2VsZiwgdGVzdCk6CisgICAgICAgICIi
IlRlc3QtdHlwZSBhbmQgcHJvdG9jb2wgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgcnVubmlu
ZyBhCisgICAgICAgIHNwZWNpZmljIHRlc3QuCisKKyAgICAgICAgOnBhcmFtIHRlc3Q6IFRoZSB0
ZXN0IHRvIHJ1bi4iIiIKKyAgICAgICAgcGFzcworCisgICAgZGVmIG9uX2Vudmlyb25tZW50X2No
YW5nZShzZWxmLCBuZXdfZW52aXJvbm1lbnQpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgcmVz
dWx0X2Zyb21fZXhjZXB0aW9uKHNlbGYsIHRlc3QsIGUpOgorICAgICAgICBpZiBoYXNhdHRyKGUs
ICJzdGF0dXMiKSBhbmQgZS5zdGF0dXMgaW4gdGVzdC5yZXN1bHRfY2xzLnN0YXR1c2VzOgorICAg
ICAgICAgICAgc3RhdHVzID0gZS5zdGF0dXMKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN0
YXR1cyA9ICJFUlJPUiIKKyAgICAgICAgbWVzc2FnZSA9IHVuaWNvZGUoZ2V0YXR0cihlLCAibWVz
c2FnZSIsICIiKSkKKyAgICAgICAgaWYgbWVzc2FnZToKKyAgICAgICAgICAgIG1lc3NhZ2UgKz0g
IlxuIgorICAgICAgICBtZXNzYWdlICs9IHRyYWNlYmFjay5mb3JtYXRfZXhjKGUpCisgICAgICAg
IHJldHVybiB0ZXN0LnJlc3VsdF9jbHMoc3RhdHVzLCBtZXNzYWdlKSwgW10KKworCitjbGFzcyBU
ZXN0aGFybmVzc0V4ZWN1dG9yKFRlc3RFeGVjdXRvcik6CisgICAgY29udmVydF9yZXN1bHQgPSB0
ZXN0aGFybmVzc19yZXN1bHRfY29udmVydGVyCisKKworY2xhc3MgUmVmVGVzdEV4ZWN1dG9yKFRl
c3RFeGVjdXRvcik6CisgICAgY29udmVydF9yZXN1bHQgPSByZWZ0ZXN0X3Jlc3VsdF9jb252ZXJ0
ZXIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm93c2VyLCBzZXJ2ZXJfY29uZmlnLCB0aW1l
b3V0X211bHRpcGxpZXI9MSwgc2NyZWVuc2hvdF9jYWNoZT1Ob25lLAorICAgICAgICAgICAgICAg
ICBkZWJ1Z19pbmZvPU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgVGVzdEV4ZWN1dG9yLl9faW5p
dF9fKHNlbGYsIGJyb3dzZXIsIHNlcnZlcl9jb25maWcsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0aW1lb3V0X211bHRpcGxpZXI9dGltZW91dF9tdWx0aXBsaWVyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGVidWdfaW5mbz1kZWJ1Z19pbmZvKQorCisgICAgICAgIHNl
bGYuc2NyZWVuc2hvdF9jYWNoZSA9IHNjcmVlbnNob3RfY2FjaGUKKworCitjbGFzcyBSZWZUZXN0
SW1wbGVtZW50YXRpb24ob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZXhlY3V0b3Ip
OgorICAgICAgICBzZWxmLnRpbWVvdXRfbXVsdGlwbGllciA9IGV4ZWN1dG9yLnRpbWVvdXRfbXVs
dGlwbGllcgorICAgICAgICBzZWxmLmV4ZWN1dG9yID0gZXhlY3V0b3IKKyAgICAgICAgIyBDYWNo
ZSBvZiB1cmw6KHNjcmVlbnNob3QgaGFzaCwgc2NyZWVuc2hvdCkuIFR5cGljYWxseSB0aGUKKyAg
ICAgICAgIyBzY3JlZW5zaG90IGlzIE5vbmUsIGJ1dCB3ZSBzZXQgdGhpcyB2YWx1ZSBpZiBhIHRl
c3QgZmFpbHMKKyAgICAgICAgIyBhbmQgdGhlIHNjcmVlbnNob3Qgd2FzIHRha2VuIGZyb20gdGhl
IGNhY2hlIHNvIHRoYXQgd2UgbWF5CisgICAgICAgICMgcmV0cmlldmUgdGhlIHNjcmVlbnNob3Qg
ZnJvbSB0aGUgY2FjaGUgZGlyZWN0bHkgaW4gdGhlIGZ1dHVyZQorICAgICAgICBzZWxmLnNjcmVl
bnNob3RfY2FjaGUgPSBzZWxmLmV4ZWN1dG9yLnNjcmVlbnNob3RfY2FjaGUKKyAgICAgICAgc2Vs
Zi5tZXNzYWdlID0gTm9uZQorCisgICAgZGVmIHNldHVwKHNlbGYpOgorICAgICAgICBwYXNzCisK
KyAgICBkZWYgdGVhcmRvd24oc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIEBwcm9wZXJ0eQor
ICAgIGRlZiBsb2dnZXIoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmV4ZWN1dG9yLmxvZ2dl
cgorCisgICAgZGVmIGdldF9oYXNoKHNlbGYsIHRlc3QsIHZpZXdwb3J0X3NpemUsIGRwaSk6Cisg
ICAgICAgIHRpbWVvdXQgPSB0ZXN0LnRpbWVvdXQgKiBzZWxmLnRpbWVvdXRfbXVsdGlwbGllcgor
ICAgICAgICBrZXkgPSAodGVzdC51cmwsIHZpZXdwb3J0X3NpemUsIGRwaSkKKworICAgICAgICBp
ZiBrZXkgbm90IGluIHNlbGYuc2NyZWVuc2hvdF9jYWNoZToKKyAgICAgICAgICAgIHN1Y2Nlc3Ms
IGRhdGEgPSBzZWxmLmV4ZWN1dG9yLnNjcmVlbnNob3QodGVzdCwgdmlld3BvcnRfc2l6ZSwgZHBp
KQorCisgICAgICAgICAgICBpZiBub3Qgc3VjY2VzczoKKyAgICAgICAgICAgICAgICByZXR1cm4g
RmFsc2UsIGRhdGEKKworICAgICAgICAgICAgc2NyZWVuc2hvdCA9IGRhdGEKKyAgICAgICAgICAg
IGhhc2hfdmFsdWUgPSBoYXNobGliLnNoYTEoc2NyZWVuc2hvdCkuaGV4ZGlnZXN0KCkKKworICAg
ICAgICAgICAgc2VsZi5zY3JlZW5zaG90X2NhY2hlW2tleV0gPSAoaGFzaF92YWx1ZSwgTm9uZSkK
KworICAgICAgICAgICAgcnYgPSAoaGFzaF92YWx1ZSwgc2NyZWVuc2hvdCkKKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIHJ2ID0gc2VsZi5zY3JlZW5zaG90X2NhY2hlW2tleV0KKworICAgICAg
ICBzZWxmLm1lc3NhZ2UuYXBwZW5kKCIlcyAlcyIgJSAodGVzdC51cmwsIHJ2WzBdKSkKKyAgICAg
ICAgcmV0dXJuIFRydWUsIHJ2CisKKyAgICBkZWYgaXNfcGFzcyhzZWxmLCBsaHNfaGFzaCwgcmhz
X2hhc2gsIHJlbGF0aW9uKToKKyAgICAgICAgYXNzZXJ0IHJlbGF0aW9uIGluICgiPT0iLCAiIT0i
KQorICAgICAgICBzZWxmLm1lc3NhZ2UuYXBwZW5kKCJUZXN0aW5nICVzICVzICVzIiAlIChsaHNf
aGFzaCwgcmVsYXRpb24sIHJoc19oYXNoKSkKKyAgICAgICAgcmV0dXJuICgocmVsYXRpb24gPT0g
Ij09IiBhbmQgbGhzX2hhc2ggPT0gcmhzX2hhc2gpIG9yCisgICAgICAgICAgICAgICAgKHJlbGF0
aW9uID09ICIhPSIgYW5kIGxoc19oYXNoICE9IHJoc19oYXNoKSkKKworICAgIGRlZiBydW5fdGVz
dChzZWxmLCB0ZXN0KToKKyAgICAgICAgdmlld3BvcnRfc2l6ZSA9IHRlc3Qudmlld3BvcnRfc2l6
ZQorICAgICAgICBkcGkgPSB0ZXN0LmRwaQorICAgICAgICBzZWxmLm1lc3NhZ2UgPSBbXQorCisg
ICAgICAgICMgRGVwdGgtZmlyc3Qgc2VhcmNoIG9mIHJlZmVyZW5jZSB0cmVlLCB3aXRoIHRoZSBn
b2FsCisgICAgICAgICMgb2YgcmVhY2hpbmdzIGEgbGVhZiBub2RlIHdpdGggb25seSBwYXNzIHJl
c3VsdHMKKworICAgICAgICBzdGFjayA9IGxpc3QoKCh0ZXN0LCBpdGVtWzBdKSwgaXRlbVsxXSkg
Zm9yIGl0ZW0gaW4gcmV2ZXJzZWQodGVzdC5yZWZlcmVuY2VzKSkKKyAgICAgICAgd2hpbGUgc3Rh
Y2s6CisgICAgICAgICAgICBoYXNoZXMgPSBbTm9uZSwgTm9uZV0KKyAgICAgICAgICAgIHNjcmVl
bnNob3RzID0gW05vbmUsIE5vbmVdCisKKyAgICAgICAgICAgIG5vZGVzLCByZWxhdGlvbiA9IHN0
YWNrLnBvcCgpCisKKyAgICAgICAgICAgIGZvciBpLCBub2RlIGluIGVudW1lcmF0ZShub2Rlcyk6
CisgICAgICAgICAgICAgICAgc3VjY2VzcywgZGF0YSA9IHNlbGYuZ2V0X2hhc2gobm9kZSwgdmll
d3BvcnRfc2l6ZSwgZHBpKQorICAgICAgICAgICAgICAgIGlmIHN1Y2Nlc3MgaXMgRmFsc2U6Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB7InN0YXR1cyI6IGRhdGFbMF0sICJtZXNzYWdlIjog
ZGF0YVsxXX0KKworICAgICAgICAgICAgICAgIGhhc2hlc1tpXSwgc2NyZWVuc2hvdHNbaV0gPSBk
YXRhCisKKyAgICAgICAgICAgIGlmIHNlbGYuaXNfcGFzcyhoYXNoZXNbMF0sIGhhc2hlc1sxXSwg
cmVsYXRpb24pOgorICAgICAgICAgICAgICAgIGlmIG5vZGVzWzFdLnJlZmVyZW5jZXM6CisgICAg
ICAgICAgICAgICAgICAgIHN0YWNrLmV4dGVuZChsaXN0KCgobm9kZXNbMV0sIGl0ZW1bMF0pLCBp
dGVtWzFdKSBmb3IgaXRlbSBpbiByZXZlcnNlZChub2Rlc1sxXS5yZWZlcmVuY2VzKSkpCisgICAg
ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBXZSBwYXNzZWQKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHsic3RhdHVzIjoiUEFTUyIsICJtZXNzYWdlIjogTm9uZX0K
KworICAgICAgICAjIFdlIGZhaWxlZCwgc28gY29uc3RydWN0IGEgZmFpbHVyZSBtZXNzYWdlCisK
KyAgICAgICAgZm9yIGksIChub2RlLCBzY3JlZW5zaG90KSBpbiBlbnVtZXJhdGUoemlwKG5vZGVz
LCBzY3JlZW5zaG90cykpOgorICAgICAgICAgICAgaWYgc2NyZWVuc2hvdCBpcyBOb25lOgorICAg
ICAgICAgICAgICAgIHN1Y2Nlc3MsIHNjcmVlbnNob3QgPSBzZWxmLnJldGFrZV9zY3JlZW5zaG90
KG5vZGUsIHZpZXdwb3J0X3NpemUsIGRwaSkKKyAgICAgICAgICAgICAgICBpZiBzdWNjZXNzOgor
ICAgICAgICAgICAgICAgICAgICBzY3JlZW5zaG90c1tpXSA9IHNjcmVlbnNob3QKKworICAgICAg
ICBsb2dfZGF0YSA9IFt7InVybCI6IG5vZGVzWzBdLnVybCwgInNjcmVlbnNob3QiOiBzY3JlZW5z
aG90c1swXX0sIHJlbGF0aW9uLAorICAgICAgICAgICAgICAgICAgICB7InVybCI6IG5vZGVzWzFd
LnVybCwgInNjcmVlbnNob3QiOiBzY3JlZW5zaG90c1sxXX1dCisKKyAgICAgICAgcmV0dXJuIHsi
c3RhdHVzIjogIkZBSUwiLAorICAgICAgICAgICAgICAgICJtZXNzYWdlIjogIlxuIi5qb2luKHNl
bGYubWVzc2FnZSksCisgICAgICAgICAgICAgICAgImV4dHJhIjogeyJyZWZ0ZXN0X3NjcmVlbnNo
b3RzIjogbG9nX2RhdGF9fQorCisgICAgZGVmIHJldGFrZV9zY3JlZW5zaG90KHNlbGYsIG5vZGUs
IHZpZXdwb3J0X3NpemUsIGRwaSk6CisgICAgICAgIHN1Y2Nlc3MsIGRhdGEgPSBzZWxmLmV4ZWN1
dG9yLnNjcmVlbnNob3Qobm9kZSwgdmlld3BvcnRfc2l6ZSwgZHBpKQorICAgICAgICBpZiBub3Qg
c3VjY2VzczoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZSwgZGF0YQorCisgICAgICAgIGtleSA9
IChub2RlLnVybCwgdmlld3BvcnRfc2l6ZSwgZHBpKQorICAgICAgICBoYXNoX3ZhbCwgXyA9IHNl
bGYuc2NyZWVuc2hvdF9jYWNoZVtrZXldCisgICAgICAgIHNlbGYuc2NyZWVuc2hvdF9jYWNoZVtr
ZXldID0gaGFzaF92YWwsIGRhdGEKKyAgICAgICAgcmV0dXJuIFRydWUsIGRhdGEKKworCitjbGFz
cyBXZHNwZWNFeGVjdXRvcihUZXN0RXhlY3V0b3IpOgorICAgIGNvbnZlcnRfcmVzdWx0ID0gcHl0
ZXN0X3Jlc3VsdF9jb252ZXJ0ZXIKKyAgICBwcm90b2NvbF9jbHMgPSBOb25lCisKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgYnJvd3Nlciwgc2VydmVyX2NvbmZpZywgd2ViZHJpdmVyX2JpbmFyeSwK
KyAgICAgICAgICAgICAgICAgd2ViZHJpdmVyX2FyZ3MsIHRpbWVvdXRfbXVsdGlwbGllcj0xLCBj
YXBhYmlsaXRpZXM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgZGVidWdfaW5mbz1Ob25lLCAqKmt3
YXJncyk6CisgICAgICAgIHNlbGYuZG9fZGVsYXllZF9pbXBvcnRzKCkKKyAgICAgICAgVGVzdEV4
ZWN1dG9yLl9faW5pdF9fKHNlbGYsIGJyb3dzZXIsIHNlcnZlcl9jb25maWcsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aW1lb3V0X211bHRpcGxpZXI9dGltZW91dF9tdWx0aXBsaWVy
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdfaW5mbz1kZWJ1Z19pbmZvKQor
ICAgICAgICBzZWxmLndlYmRyaXZlcl9iaW5hcnkgPSB3ZWJkcml2ZXJfYmluYXJ5CisgICAgICAg
IHNlbGYud2ViZHJpdmVyX2FyZ3MgPSB3ZWJkcml2ZXJfYXJncworICAgICAgICBzZWxmLnRpbWVv
dXRfbXVsdGlwbGllciA9IHRpbWVvdXRfbXVsdGlwbGllcgorICAgICAgICBzZWxmLmNhcGFiaWxp
dGllcyA9IGNhcGFiaWxpdGllcworICAgICAgICBzZWxmLnByb3RvY29sID0gc2VsZi5wcm90b2Nv
bF9jbHMoc2VsZiwgYnJvd3NlcikKKworICAgIGRlZiBpc19hbGl2ZShzZWxmKToKKyAgICAgICAg
cmV0dXJuIHNlbGYucHJvdG9jb2wuaXNfYWxpdmUKKworICAgIGRlZiBvbl9lbnZpcm9ubWVudF9j
aGFuZ2Uoc2VsZiwgbmV3X2Vudmlyb25tZW50KToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGRv
X3Rlc3Qoc2VsZiwgdGVzdCk6CisgICAgICAgIHRpbWVvdXQgPSB0ZXN0LnRpbWVvdXQgKiBzZWxm
LnRpbWVvdXRfbXVsdGlwbGllciArIGV4dHJhX3RpbWVvdXQKKworICAgICAgICBzdWNjZXNzLCBk
YXRhID0gV2RzcGVjUnVuKHNlbGYuZG9fd2RzcGVjLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbGYucHJvdG9jb2wuc2Vzc2lvbl9jb25maWcsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGVzdC5hYnNfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0aW1lb3V0KS5ydW4oKQorCisgICAgICAgIGlmIHN1Y2Nlc3M6CisgICAgICAg
ICAgICByZXR1cm4gc2VsZi5jb252ZXJ0X3Jlc3VsdCh0ZXN0LCBkYXRhKQorCisgICAgICAgIHJl
dHVybiAodGVzdC5yZXN1bHRfY2xzKCpkYXRhKSwgW10pCisKKyAgICBkZWYgZG9fd2RzcGVjKHNl
bGYsIHNlc3Npb25fY29uZmlnLCBwYXRoLCB0aW1lb3V0KToKKyAgICAgICAgaGFybmVzc19yZXN1
bHQgPSAoIk9LIiwgTm9uZSkKKyAgICAgICAgc3VidGVzdF9yZXN1bHRzID0gcHl0ZXN0cnVubmVy
LnJ1bihwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNl
bGYuc2VydmVyX2NvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZXNzaW9uX2NvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0aW1lb3V0PXRpbWVvdXQpCisgICAgICAgIHJldHVybiAoaGFybmVzc19yZXN1bHQs
IHN1YnRlc3RfcmVzdWx0cykKKworICAgIGRlZiBkb19kZWxheWVkX2ltcG9ydHMoc2VsZik6Cisg
ICAgICAgIGdsb2JhbCBweXRlc3RydW5uZXIKKyAgICAgICAgZnJvbSAuIGltcG9ydCBweXRlc3Ry
dW5uZXIKKworCitjbGFzcyBQcm90b2NvbChvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBleGVjdXRvciwgYnJvd3Nlcik6CisgICAgICAgIHNlbGYuZXhlY3V0b3IgPSBleGVjdXRvcgor
ICAgICAgICBzZWxmLmJyb3dzZXIgPSBicm93c2VyCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYg
bG9nZ2VyKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5leGVjdXRvci5sb2dnZXIKKworICAg
IGRlZiBzZXR1cChzZWxmLCBydW5uZXIpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVhcmRv
d24oc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiB3YWl0KHNlbGYpOgorICAgICAgICBw
YXNzCisKKworY2xhc3MgV2RzcGVjUnVuKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYs
IGZ1bmMsIHNlc3Npb24sIHBhdGgsIHRpbWVvdXQpOgorICAgICAgICBzZWxmLmZ1bmMgPSBmdW5j
CisgICAgICAgIHNlbGYucmVzdWx0ID0gKE5vbmUsIE5vbmUpCisgICAgICAgIHNlbGYuc2Vzc2lv
biA9IHNlc3Npb24KKyAgICAgICAgc2VsZi5wYXRoID0gcGF0aAorICAgICAgICBzZWxmLnRpbWVv
dXQgPSB0aW1lb3V0CisgICAgICAgIHNlbGYucmVzdWx0X2ZsYWcgPSB0aHJlYWRpbmcuRXZlbnQo
KQorCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgIiIiUnVucyBmdW5jdGlvbiBpbiBhIHRo
cmVhZCBhbmQgaW50ZXJydXB0cyBpdCBpZiBpdCBleGNlZWRzIHRoZQorICAgICAgICBnaXZlbiB0
aW1lb3V0LiAgUmV0dXJucyAoVHJ1ZSwgKFJlc3VsdCwgW1N1YnRlc3RSZXN1bHQgLi4uXSkpIGlu
CisgICAgICAgIGNhc2Ugb2Ygc3VjY2Vzcywgb3IgKEZhbHNlLCAoc3RhdHVzLCBleHRyYSBpbmZv
cm1hdGlvbikpIGluIHRoZQorICAgICAgICBldmVudCBvZiBmYWlsdXJlLgorICAgICAgICAiIiIK
KworICAgICAgICBleGVjdXRvciA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXNlbGYuX3J1bikK
KyAgICAgICAgZXhlY3V0b3Iuc3RhcnQoKQorCisgICAgICAgIGZsYWcgPSBzZWxmLnJlc3VsdF9m
bGFnLndhaXQoc2VsZi50aW1lb3V0KQorICAgICAgICBpZiBzZWxmLnJlc3VsdFsxXSBpcyBOb25l
OgorICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSBGYWxzZSwgKCJFWFRFUk5BTC1USU1FT1VUIiwg
Tm9uZSkKKworICAgICAgICByZXR1cm4gc2VsZi5yZXN1bHQKKworICAgIGRlZiBfcnVuKHNlbGYp
OgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnJlc3VsdCA9IFRydWUsIHNlbGYuZnVu
YyhzZWxmLnNlc3Npb24sIHNlbGYucGF0aCwgc2VsZi50aW1lb3V0KQorICAgICAgICBleGNlcHQg
KHNvY2tldC50aW1lb3V0LCBJT0Vycm9yKToKKyAgICAgICAgICAgIHNlbGYucmVzdWx0ID0gRmFs
c2UsICgiQ1JBU0giLCBOb25lKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAg
ICAgICAgICBtZXNzYWdlID0gZ2V0YXR0cihlLCAibWVzc2FnZSIpCisgICAgICAgICAgICBpZiBt
ZXNzYWdlOgorICAgICAgICAgICAgICAgIG1lc3NhZ2UgKz0gIlxuIgorICAgICAgICAgICAgbWVz
c2FnZSArPSB0cmFjZWJhY2suZm9ybWF0X2V4YyhlKQorICAgICAgICAgICAgc2VsZi5yZXN1bHQg
PSBGYWxzZSwgKCJFUlJPUiIsIG1lc3NhZ2UpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAg
ICBzZWxmLnJlc3VsdF9mbGFnLnNldCgpCisKKworY2xhc3MgV2ViRHJpdmVyUHJvdG9jb2woUHJv
dG9jb2wpOgorICAgIHNlcnZlcl9jbHMgPSBOb25lCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
ZXhlY3V0b3IsIGJyb3dzZXIpOgorICAgICAgICBQcm90b2NvbC5fX2luaXRfXyhzZWxmLCBleGVj
dXRvciwgYnJvd3NlcikKKyAgICAgICAgc2VsZi53ZWJkcml2ZXJfYmluYXJ5ID0gZXhlY3V0b3Iu
d2ViZHJpdmVyX2JpbmFyeQorICAgICAgICBzZWxmLndlYmRyaXZlcl9hcmdzID0gZXhlY3V0b3Iu
d2ViZHJpdmVyX2FyZ3MKKyAgICAgICAgc2VsZi5jYXBhYmlsaXRpZXMgPSBzZWxmLmV4ZWN1dG9y
LmNhcGFiaWxpdGllcworICAgICAgICBzZWxmLnNlc3Npb25fY29uZmlnID0gTm9uZQorICAgICAg
ICBzZWxmLnNlcnZlciA9IE5vbmUKKworICAgIGRlZiBzZXR1cChzZWxmLCBydW5uZXIpOgorICAg
ICAgICAiIiJDb25uZWN0IHRvIGJyb3dzZXIgdmlhIHRoZSBIVFRQIHNlcnZlci4iIiIKKyAgICAg
ICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5zZXJ2ZXIgPSBzZWxmLnNlcnZlcl9jbHMoCisgICAg
ICAgICAgICAgICAgc2VsZi5sb2dnZXIsCisgICAgICAgICAgICAgICAgYmluYXJ5PXNlbGYud2Vi
ZHJpdmVyX2JpbmFyeSwKKyAgICAgICAgICAgICAgICBhcmdzPXNlbGYud2ViZHJpdmVyX2FyZ3Mp
CisgICAgICAgICAgICBzZWxmLnNlcnZlci5zdGFydChibG9jaz1GYWxzZSkKKyAgICAgICAgICAg
IHNlbGYubG9nZ2VyLmluZm8oCisgICAgICAgICAgICAgICAgIldlYkRyaXZlciBIVFRQIHNlcnZl
ciBsaXN0ZW5pbmcgYXQgJXMiICUgc2VsZi5zZXJ2ZXIudXJsKQorICAgICAgICAgICAgc2VsZi5z
ZXNzaW9uX2NvbmZpZyA9IHsiaG9zdCI6IHNlbGYuc2VydmVyLmhvc3QsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJwb3J0Ijogc2VsZi5zZXJ2ZXIucG9ydCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhcGFiaWxpdGllcyI6IHNlbGYuY2FwYWJpbGl0
aWVzfQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgc2VsZi5sb2dnZXIu
ZXJyb3IodHJhY2ViYWNrLmZvcm1hdF9leGMoKSkKKyAgICAgICAgICAgIHNlbGYuZXhlY3V0b3Iu
cnVubmVyLnNlbmRfbWVzc2FnZSgiaW5pdF9mYWlsZWQiKQorICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgc2VsZi5leGVjdXRvci5ydW5uZXIuc2VuZF9tZXNzYWdlKCJpbml0X3N1Y2NlZWRlZCIp
CisKKyAgICBkZWYgdGVhcmRvd24oc2VsZik6CisgICAgICAgIGlmIHNlbGYuc2VydmVyIGlzIG5v
dCBOb25lIGFuZCBzZWxmLnNlcnZlci5pc19hbGl2ZToKKyAgICAgICAgICAgIHNlbGYuc2VydmVy
LnN0b3AoKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGlzX2FsaXZlKHNlbGYpOgorICAgICAg
ICAiIiJUZXN0IHRoYXQgdGhlIGNvbm5lY3Rpb24gaXMgc3RpbGwgYWxpdmUuCisKKyAgICAgICAg
QmVjYXVzZSB0aGUgcmVtb3RlIGNvbW11bmljYXRpb24gaGFwcGVucyBvdmVyIEhUVFAgd2UgbmVl
ZCB0bworICAgICAgICBtYWtlIGFuIGV4cGxpY2l0IHJlcXVlc3QgdG8gdGhlIHJlbW90ZS4gIEl0
IGlzIGFsbG93ZWQgZm9yCisgICAgICAgIFdlYkRyaXZlciBzcGVjIHRlc3RzIHRvIG5vdCBoYXZl
IGEgV2ViRHJpdmVyIHNlc3Npb24sIHNpbmNlIHRoaXMKKyAgICAgICAgbWF5IGJlIHdoYXQgaXMg
dGVzdGVkLgorCisgICAgICAgIEFuIEhUVFAgcmVxdWVzdCB0byBhbiBpbnZhbGlkIHBhdGggdGhh
dCByZXN1bHRzIGluIGEgNDA0IGlzCisgICAgICAgIHByb29mIGVub3VnaCB0byB1cyB0aGF0IHRo
ZSBzZXJ2ZXIgaXMgYWxpdmUgYW5kIGtpY2tpbmcuCisgICAgICAgICIiIgorICAgICAgICBjb25u
ID0gaHR0cGxpYi5IVFRQQ29ubmVjdGlvbihzZWxmLnNlcnZlci5ob3N0LCBzZWxmLnNlcnZlci5w
b3J0KQorICAgICAgICBjb25uLnJlcXVlc3QoIkhFQUQiLCBzZWxmLnNlcnZlci5iYXNlX3BhdGgg
KyAiaW52YWxpZCIpCisgICAgICAgIHJlcyA9IGNvbm4uZ2V0cmVzcG9uc2UoKQorICAgICAgICBy
ZXR1cm4gcmVzLnN0YXR1cyA9PSA0MDQKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9y
dGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2V4ZWN1dG9ycy9leGVjdXRvcmNocm9t
ZS5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVu
bmVyL2V4ZWN1dG9ycy9leGVjdXRvcmNocm9tZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uM2UwNDAwZGUxMWMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJU
ZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9leGVjdXRvcnMvZXhl
Y3V0b3JjaHJvbWUucHkKQEAgLTAsMCArMSwxMCBAQAorZnJvbSAuLndlYmRyaXZlcl9zZXJ2ZXIg
aW1wb3J0IENocm9tZURyaXZlclNlcnZlcgorZnJvbSAuYmFzZSBpbXBvcnQgV2RzcGVjRXhlY3V0
b3IsIFdlYkRyaXZlclByb3RvY29sCisKKworY2xhc3MgQ2hyb21lRHJpdmVyUHJvdG9jb2woV2Vi
RHJpdmVyUHJvdG9jb2wpOgorICAgIHNlcnZlcl9jbHMgPSBDaHJvbWVEcml2ZXJTZXJ2ZXIKKwor
CitjbGFzcyBDaHJvbWVEcml2ZXJXZHNwZWNFeGVjdXRvcihXZHNwZWNFeGVjdXRvcik6CisgICAg
cHJvdG9jb2xfY2xzID0gQ2hyb21lRHJpdmVyUHJvdG9jb2wKZGlmZiAtLWdpdCBhL1dlYkRyaXZl
clRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2V4ZWN1dG9ycy9l
eGVjdXRvcmludGVybmV0ZXhwbG9yZXIucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mv
dG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9leGVjdXRvcnMvZXhlY3V0b3JpbnRlcm5ldGV4cGxv
cmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44OThmZjE0NDU5
MwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93
cHRydW5uZXIvd3B0cnVubmVyL2V4ZWN1dG9ycy9leGVjdXRvcmludGVybmV0ZXhwbG9yZXIucHkK
QEAgLTAsMCArMSwxMCBAQAorZnJvbSAuLndlYmRyaXZlcl9zZXJ2ZXIgaW1wb3J0IEludGVybmV0
RXhwbG9yZXJEcml2ZXJTZXJ2ZXIKK2Zyb20gLmJhc2UgaW1wb3J0IFdkc3BlY0V4ZWN1dG9yLCBX
ZWJEcml2ZXJQcm90b2NvbAorCisKK2NsYXNzIEludGVybmV0RXhwbG9yZXJEcml2ZXJQcm90b2Nv
bChXZWJEcml2ZXJQcm90b2NvbCk6CisgICAgc2VydmVyX2NscyA9IEludGVybmV0RXhwbG9yZXJE
cml2ZXJTZXJ2ZXIKKworCitjbGFzcyBJbnRlcm5ldEV4cGxvcmVyRHJpdmVyV2RzcGVjRXhlY3V0
b3IoV2RzcGVjRXhlY3V0b3IpOgorICAgIHByb3RvY29sX2NscyA9IEludGVybmV0RXhwbG9yZXJE
cml2ZXJQcm90b2NvbApkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rv
b2xzL3dwdHJ1bm5lci93cHRydW5uZXIvZXhlY3V0b3JzL2V4ZWN1dG9ybWFyaW9uZXR0ZS5weSBi
L1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2V4
ZWN1dG9ycy9leGVjdXRvcm1hcmlvbmV0dGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLjNlNmZiMjgyYjNmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVz
dHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvZXhlY3V0b3JzL2V4ZWN1
dG9ybWFyaW9uZXR0ZS5weQpAQCAtMCwwICsxLDU1OSBAQAoraW1wb3J0IG9zCitpbXBvcnQgc29j
a2V0CitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgdHJhY2ViYWNrCitpbXBvcnQgdXJscGFyc2UK
K2ltcG9ydCB1dWlkCisKK2Vycm9ycyA9IE5vbmUKK21hcmlvbmV0dGUgPSBOb25lCitweXRlc3Ry
dW5uZXIgPSBOb25lCisKK2hlcmUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5zcGxpdChfX2ZpbGVf
XylbMF0pCisKK2Zyb20gLmJhc2UgaW1wb3J0IChFeGVjdXRvckV4Y2VwdGlvbiwKKyAgICAgICAg
ICAgICAgICAgICBQcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICBSZWZUZXN0RXhlY3V0b3Is
CisgICAgICAgICAgICAgICAgICAgUmVmVGVzdEltcGxlbWVudGF0aW9uLAorICAgICAgICAgICAg
ICAgICAgIFRlc3RFeGVjdXRvciwKKyAgICAgICAgICAgICAgICAgICBUZXN0aGFybmVzc0V4ZWN1
dG9yLAorICAgICAgICAgICAgICAgICAgIFdkc3BlY0V4ZWN1dG9yLAorICAgICAgICAgICAgICAg
ICAgIFdkc3BlY1J1biwKKyAgICAgICAgICAgICAgICAgICBXZWJEcml2ZXJQcm90b2NvbCwKKyAg
ICAgICAgICAgICAgICAgICBleHRyYV90aW1lb3V0LAorICAgICAgICAgICAgICAgICAgIHRlc3Ro
YXJuZXNzX3Jlc3VsdF9jb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICAgcmVmdGVzdF9yZXN1
bHRfY29udmVydGVyLAorICAgICAgICAgICAgICAgICAgIHN0cmlwX3NlcnZlcikKKworZnJvbSAu
LnRlc3RydW5uZXIgaW1wb3J0IFN0b3AKK2Zyb20gLi53ZWJkcml2ZXJfc2VydmVyIGltcG9ydCBH
ZWNrb0RyaXZlclNlcnZlcgorCisKKworZGVmIGRvX2RlbGF5ZWRfaW1wb3J0cygpOgorICAgIGds
b2JhbCBlcnJvcnMsIG1hcmlvbmV0dGUKKworICAgICMgTWFyaW9uZXR0ZSBjbGllbnQgdXNlZCB0
byBiZSBjYWxsZWQgbWFyaW9uZXR0ZSwgcmVjZW50bHkgaXQgY2hhbmdlZAorICAgICMgdG8gbWFy
aW9uZXR0ZV9kcml2ZXIgZm9yIHVuZmF0aG9tYWJsZSByZWFzb25zCisgICAgdHJ5OgorICAgICAg
ICBpbXBvcnQgbWFyaW9uZXR0ZQorICAgICAgICBmcm9tIG1hcmlvbmV0dGUgaW1wb3J0IGVycm9y
cworICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgZnJvbSBtYXJpb25ldHRlX2RyaXZl
ciBpbXBvcnQgbWFyaW9uZXR0ZSwgZXJyb3JzCisKKworY2xhc3MgTWFyaW9uZXR0ZVByb3RvY29s
KFByb3RvY29sKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZXhlY3V0b3IsIGJyb3dzZXIsIHRp
bWVvdXRfbXVsdGlwbGllcj0xKToKKyAgICAgICAgZG9fZGVsYXllZF9pbXBvcnRzKCkKKworICAg
ICAgICBQcm90b2NvbC5fX2luaXRfXyhzZWxmLCBleGVjdXRvciwgYnJvd3NlcikKKyAgICAgICAg
c2VsZi5tYXJpb25ldHRlID0gTm9uZQorICAgICAgICBzZWxmLm1hcmlvbmV0dGVfcG9ydCA9IGJy
b3dzZXIubWFyaW9uZXR0ZV9wb3J0CisgICAgICAgIHNlbGYudGltZW91dF9tdWx0aXBsaWVyID0g
dGltZW91dF9tdWx0aXBsaWVyCisgICAgICAgIHNlbGYudGltZW91dCA9IE5vbmUKKyAgICAgICAg
c2VsZi5ydW5uZXJfaGFuZGxlID0gTm9uZQorCisgICAgZGVmIHNldHVwKHNlbGYsIHJ1bm5lcik6
CisgICAgICAgICIiIkNvbm5lY3QgdG8gYnJvd3NlciB2aWEgTWFyaW9uZXR0ZS4iIiIKKyAgICAg
ICAgUHJvdG9jb2wuc2V0dXAoc2VsZiwgcnVubmVyKQorCisgICAgICAgIHNlbGYubG9nZ2VyLmRl
YnVnKCJDb25uZWN0aW5nIHRvIE1hcmlvbmV0dGUgb24gcG9ydCAlaSIgJSBzZWxmLm1hcmlvbmV0
dGVfcG9ydCkKKyAgICAgICAgc3RhcnR1cF90aW1lb3V0ID0gbWFyaW9uZXR0ZS5NYXJpb25ldHRl
LkRFRkFVTFRfU1RBUlRVUF9USU1FT1VUICogc2VsZi50aW1lb3V0X211bHRpcGxpZXIKKyAgICAg
ICAgc2VsZi5tYXJpb25ldHRlID0gbWFyaW9uZXR0ZS5NYXJpb25ldHRlKGhvc3Q9J2xvY2FsaG9z
dCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0
PXNlbGYubWFyaW9uZXR0ZV9wb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc29ja2V0X3RpbWVvdXQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0dXBfdGltZW91dD1zdGFydHVwX3RpbWVv
dXQpCisKKyAgICAgICAgIyBYWFggTW92ZSB0aGlzIHRpbWVvdXQgc29tZXdoZXJlCisgICAgICAg
IHNlbGYubG9nZ2VyLmRlYnVnKCJXYWl0aW5nIGZvciBNYXJpb25ldHRlIGNvbm5lY3Rpb24iKQor
ICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgc3VjY2VzcyA9IHNlbGYubWFyaW9uZXR0
ZS53YWl0X2Zvcl9wb3J0KDYwICogc2VsZi50aW1lb3V0X211bHRpcGxpZXIpCisgICAgICAgICAg
ICAjV2hlbiBydW5uaW5nIGluIGEgZGVidWdnZXIgd2FpdCBpbmRlZmluaXRlbHkgZm9yIGZpcmVm
b3ggdG8gc3RhcnQKKyAgICAgICAgICAgIGlmIHN1Y2Nlc3Mgb3Igc2VsZi5leGVjdXRvci5kZWJ1
Z19pbmZvIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICBzZXNzaW9u
X3N0YXJ0ZWQgPSBGYWxzZQorICAgICAgICBpZiBzdWNjZXNzOgorICAgICAgICAgICAgdHJ5Ogor
ICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJTdGFydGluZyBNYXJpb25ldHRlIHNl
c3Npb24iKQorICAgICAgICAgICAgICAgIHNlbGYubWFyaW9uZXR0ZS5zdGFydF9zZXNzaW9uKCkK
KyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICBzZWxm
LmxvZ2dlci53YXJuaW5nKCJTdGFydGluZyBtYXJpb25ldHRlIHNlc3Npb24gZmFpbGVkOiAlcyIg
JSBlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1
ZygiTWFyaW9uZXR0ZSBzZXNzaW9uIHN0YXJ0ZWQiKQorICAgICAgICAgICAgICAgIHNlc3Npb25f
c3RhcnRlZCA9IFRydWUKKworICAgICAgICBpZiBub3Qgc3VjY2VzcyBvciBub3Qgc2Vzc2lvbl9z
dGFydGVkOgorICAgICAgICAgICAgc2VsZi5sb2dnZXIud2FybmluZygiRmFpbGVkIHRvIGNvbm5l
Y3QgdG8gTWFyaW9uZXR0ZSIpCisgICAgICAgICAgICBzZWxmLmV4ZWN1dG9yLnJ1bm5lci5zZW5k
X21lc3NhZ2UoImluaXRfZmFpbGVkIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRyeToK
KyAgICAgICAgICAgICAgICBzZWxmLmFmdGVyX2Nvbm5lY3QoKQorICAgICAgICAgICAgZXhjZXB0
IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci53YXJuaW5nKCJQb3N0LWNv
bm5lY3Rpb24gc3RlcHMgZmFpbGVkIikKKyAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5lcnJv
cih0cmFjZWJhY2suZm9ybWF0X2V4YygpKQorICAgICAgICAgICAgICAgIHNlbGYuZXhlY3V0b3Iu
cnVubmVyLnNlbmRfbWVzc2FnZSgiaW5pdF9mYWlsZWQiKQorICAgICAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgICAgICBzZWxmLmV4ZWN1dG9yLnJ1bm5lci5zZW5kX21lc3NhZ2UoImluaXRfc3Vj
Y2VlZGVkIikKKworICAgIGRlZiB0ZWFyZG93bihzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgc2VsZi5tYXJpb25ldHRlLl9yZXF1ZXN0X2luX2FwcF9zaHV0ZG93bigpCisgICAgICAg
ICAgICBzZWxmLm1hcmlvbmV0dGUuZGVsZXRlX3Nlc3Npb24oc2VuZF9yZXF1ZXN0PUZhbHNlLCBy
ZXNldF9zZXNzaW9uX2lkPVRydWUpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAg
ICAgICAjIFRoaXMgaXMgdHlwaWNhbGx5IGJlY2F1c2UgdGhlIHNlc3Npb24gbmV2ZXIgc3RhcnRl
ZAorICAgICAgICAgICAgcGFzcworICAgICAgICBpZiBzZWxmLm1hcmlvbmV0dGUgaXMgbm90IE5v
bmU6CisgICAgICAgICAgICBkZWwgc2VsZi5tYXJpb25ldHRlCisKKyAgICBAcHJvcGVydHkKKyAg
ICBkZWYgaXNfYWxpdmUoc2VsZik6CisgICAgICAgICIiIkNoZWNrIGlmIHRoZSBNYXJpb25ldHRl
IGNvbm5lY3Rpb24gaXMgc3RpbGwgYWN0aXZlLiIiIgorICAgICAgICB0cnk6CisgICAgICAgICAg
ICBzZWxmLm1hcmlvbmV0dGUuY3VycmVudF93aW5kb3dfaGFuZGxlCisgICAgICAgIGV4Y2VwdCBF
eGNlcHRpb246CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUK
KworICAgIGRlZiBhZnRlcl9jb25uZWN0KHNlbGYpOgorICAgICAgICBzZWxmLmxvYWRfcnVubmVy
KHNlbGYuZXhlY3V0b3IubGFzdF9lbnZpcm9ubWVudFsicHJvdG9jb2wiXSkKKworICAgIGRlZiBz
ZXRfdGltZW91dChzZWxmLCB0aW1lb3V0KToKKyAgICAgICAgIiIiU2V0IHRoZSBNYXJpb25ldHRl
IHNjcmlwdCB0aW1lb3V0LgorCisgICAgICAgIDpwYXJhbSB0aW1lb3V0OiBTY3JpcHQgdGltZW91
dCBpbiBzZWNvbmRzCisKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYubWFyaW9uZXR0ZS50aW1l
b3V0LnNjcmlwdCA9IHRpbWVvdXQKKyAgICAgICAgc2VsZi50aW1lb3V0ID0gdGltZW91dAorCisg
ICAgZGVmIGxvYWRfcnVubmVyKHNlbGYsIHByb3RvY29sKToKKyAgICAgICAgIyBDaGVjayBpZiB3
ZSBwcmV2aW91c2x5IGhhZCBhIHRlc3Qgd2luZG93IG9wZW4sIGFuZCBpZiB3ZSBkaWQgbWFrZSBz
dXJlIGl0J3MgY2xvc2VkCisgICAgICAgIHNlbGYubWFyaW9uZXR0ZS5leGVjdXRlX3NjcmlwdCgi
aWYgKHdpbmRvdy53cmFwcGVkSlNPYmplY3Qud2luKSB7d2luZG93LndyYXBwZWRKU09iamVjdC53
aW4uY2xvc2UoKX0iKQorICAgICAgICB1cmwgPSB1cmxwYXJzZS51cmxqb2luKHNlbGYuZXhlY3V0
b3Iuc2VydmVyX3VybChwcm90b2NvbCksICIvdGVzdGhhcm5lc3NfcnVubmVyLmh0bWwiKQorICAg
ICAgICBzZWxmLmxvZ2dlci5kZWJ1ZygiTG9hZGluZyAlcyIgJSB1cmwpCisgICAgICAgIHNlbGYu
cnVubmVyX2hhbmRsZSA9IHNlbGYubWFyaW9uZXR0ZS5jdXJyZW50X3dpbmRvd19oYW5kbGUKKyAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5tYXJpb25ldHRlLm5hdmlnYXRlKHVybCkKKyAg
ICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgc2VsZi5sb2dnZXIuY3Jp
dGljYWwoCisgICAgICAgICAgICAgICAgIkxvYWRpbmcgaW5pdGlhbCBwYWdlICVzIGZhaWxlZC4g
RW5zdXJlIHRoYXQgdGhlICIKKyAgICAgICAgICAgICAgICAidGhlcmUgYXJlIG5vIG90aGVyIHBy
b2dyYW1zIGJvdW5kIHRvIHRoaXMgcG9ydCBhbmQgIgorICAgICAgICAgICAgICAgICJ0aGF0IHlv
dXIgZmlyZXdhbGwgcnVsZXMgb3IgbmV0d29yayBzZXR1cCBkb2VzIG5vdCAiCisgICAgICAgICAg
ICAgICAgInByZXZlbnQgYWNjZXNzLlxlJXMiICUgKHVybCwgdHJhY2ViYWNrLmZvcm1hdF9leGMo
ZSkpKQorICAgICAgICBzZWxmLm1hcmlvbmV0dGUuZXhlY3V0ZV9zY3JpcHQoCisgICAgICAgICAg
ICAiZG9jdW1lbnQudGl0bGUgPSAnJXMnIiAlIHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpLm5h
bWUucmVwbGFjZSgiJyIsICciJykpCisKKyAgICBkZWYgY2xvc2Vfb2xkX3dpbmRvd3Moc2VsZiwg
cHJvdG9jb2wpOgorICAgICAgICBoYW5kbGVzID0gc2VsZi5tYXJpb25ldHRlLndpbmRvd19oYW5k
bGVzCisgICAgICAgIHJ1bm5lcl9oYW5kbGUgPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAg
ICAgIGhhbmRsZXMucmVtb3ZlKHNlbGYucnVubmVyX2hhbmRsZSkKKyAgICAgICAgICAgIHJ1bm5l
cl9oYW5kbGUgPSBzZWxmLnJ1bm5lcl9oYW5kbGUKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6
CisgICAgICAgICAgICAjIFRoZSBydW5uZXIgd2luZG93IHByb2JhYmx5IGNoYW5nZWQgaWQgYnV0
IHdlIGNhbiByZXN0b3JlIGl0CisgICAgICAgICAgICAjIFRoaXMgaXNuJ3Qgc3VwcG9zZWQgdG8g
aGFwcGVuLCBidXQgbWFyaW9uZXR0ZSBpZHMgYXJlIG5vdCB5ZXQgc3RhYmxlCisgICAgICAgICAg
ICAjIFdlIGFzc3VtZSB0aGF0IHRoZSBmaXJzdCBoYW5kbGUgcmV0dXJuZWQgY29ycmVzcG9uZHMg
dG8gdGhlIHJ1bm5lciwKKyAgICAgICAgICAgICMgYnV0IGl0IGhvcGVmdWxseSBkb2Vzbid0IG1h
dHRlciB0b28gbXVjaCBpZiB0aGF0IGFzc3VtcHRpb24gaXMKKyAgICAgICAgICAgICMgd3Jvbmcg
c2luY2Ugd2UgcmVsb2FkIHRoZSBydW5uZXIgaW4gdGhhdCB0YWIgYW55d2F5LgorICAgICAgICAg
ICAgcnVubmVyX2hhbmRsZSA9IGhhbmRsZXMucG9wKDApCisKKyAgICAgICAgZm9yIGhhbmRsZSBp
biBoYW5kbGVzOgorICAgICAgICAgICAgc2VsZi5tYXJpb25ldHRlLnN3aXRjaF90b193aW5kb3co
aGFuZGxlKQorICAgICAgICAgICAgc2VsZi5tYXJpb25ldHRlLmNsb3NlKCkKKworICAgICAgICBz
ZWxmLm1hcmlvbmV0dGUuc3dpdGNoX3RvX3dpbmRvdyhydW5uZXJfaGFuZGxlKQorICAgICAgICBp
ZiBydW5uZXJfaGFuZGxlICE9IHNlbGYucnVubmVyX2hhbmRsZToKKyAgICAgICAgICAgIHNlbGYu
bG9hZF9ydW5uZXIocHJvdG9jb2wpCisKKyAgICBkZWYgd2FpdChzZWxmKToKKyAgICAgICAgc29j
a2V0X3RpbWVvdXQgPSBzZWxmLm1hcmlvbmV0dGUuY2xpZW50LnNvY2suZ2V0dGltZW91dCgpCisg
ICAgICAgIGlmIHNvY2tldF90aW1lb3V0OgorICAgICAgICAgICAgc2VsZi5tYXJpb25ldHRlLnRp
bWVvdXQuc2NyaXB0ID0gc29ja2V0X3RpbWVvdXQgLyAyCisKKyAgICAgICAgc2VsZi5tYXJpb25l
dHRlLnN3aXRjaF90b193aW5kb3coc2VsZi5ydW5uZXJfaGFuZGxlKQorICAgICAgICB3aGlsZSBU
cnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYubWFyaW9uZXR0ZS5l
eGVjdXRlX2FzeW5jX3NjcmlwdCgiIikKKyAgICAgICAgICAgIGV4Y2VwdCBlcnJvcnMuU2NyaXB0
VGltZW91dEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1ZygiU2Ny
aXB0IHRpbWVkIG91dCIpCisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZXhjZXB0
IChzb2NrZXQudGltZW91dCwgSU9FcnJvcik6CisgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIu
ZGVidWcoIlNvY2tldCBjbG9zZWQiKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAg
ICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIuZXJy
b3IodHJhY2ViYWNrLmZvcm1hdF9leGMoZSkpCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAg
IGRlZiBvbl9lbnZpcm9ubWVudF9jaGFuZ2Uoc2VsZiwgb2xkX2Vudmlyb25tZW50LCBuZXdfZW52
aXJvbm1lbnQpOgorICAgICAgICAjVW5zZXQgYWxsIHRoZSBvbGQgcHJlZnMKKyAgICAgICAgZm9y
IG5hbWUgaW4gb2xkX2Vudmlyb25tZW50LmdldCgicHJlZnMiLCB7fSkuaXRlcmtleXMoKToKKyAg
ICAgICAgICAgIHZhbHVlID0gc2VsZi5leGVjdXRvci5vcmlnaW5hbF9wcmVmX3ZhbHVlc1tuYW1l
XQorICAgICAgICAgICAgaWYgdmFsdWUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLmNs
ZWFyX3VzZXJfcHJlZihuYW1lKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBz
ZWxmLnNldF9wcmVmKG5hbWUsIHZhbHVlKQorCisgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBu
ZXdfZW52aXJvbm1lbnQuZ2V0KCJwcmVmcyIsIHt9KS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAg
IHNlbGYuZXhlY3V0b3Iub3JpZ2luYWxfcHJlZl92YWx1ZXNbbmFtZV0gPSBzZWxmLmdldF9wcmVm
KG5hbWUpCisgICAgICAgICAgICBzZWxmLnNldF9wcmVmKG5hbWUsIHZhbHVlKQorCisgICAgZGVm
IHNldF9wcmVmKHNlbGYsIG5hbWUsIHZhbHVlKToKKyAgICAgICAgaWYgdmFsdWUubG93ZXIoKSBu
b3QgaW4gKCJ0cnVlIiwgImZhbHNlIik6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAg
ICAgaW50KHZhbHVlKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAg
ICAgICAgdmFsdWUgPSAiJyVzJyIgJSB2YWx1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
dmFsdWUgPSB2YWx1ZS5sb3dlcigpCisKKyAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygiU2V0dGlu
ZyBwcmVmICVzICglcykiICUgKG5hbWUsIHZhbHVlKSkKKworICAgICAgICBzY3JpcHQgPSAiIiIK
KyAgICAgICAgICAgIGxldCBwcmVmSW50ZXJmYWNlID0gQ29tcG9uZW50cy5jbGFzc2VzWyJAbW96
aWxsYS5vcmcvcHJlZmVyZW5jZXMtc2VydmljZTsxIl0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC5nZXRTZXJ2aWNlKENvbXBvbmVudHMuaW50ZXJmYWNlcy5uc0lQ
cmVmQnJhbmNoKTsKKyAgICAgICAgICAgIGxldCBwcmVmID0gJyVzJzsKKyAgICAgICAgICAgIGxl
dCB0eXBlID0gcHJlZkludGVyZmFjZS5nZXRQcmVmVHlwZShwcmVmKTsKKyAgICAgICAgICAgIGxl
dCB2YWx1ZSA9ICVzOworICAgICAgICAgICAgc3dpdGNoKHR5cGUpIHsKKyAgICAgICAgICAgICAg
ICBjYXNlIHByZWZJbnRlcmZhY2UuUFJFRl9TVFJJTkc6CisgICAgICAgICAgICAgICAgICAgIHBy
ZWZJbnRlcmZhY2Uuc2V0Q2hhclByZWYocHJlZiwgdmFsdWUpOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIHByZWZJbnRlcmZhY2UuUFJFRl9CT09MOgor
ICAgICAgICAgICAgICAgICAgICBwcmVmSW50ZXJmYWNlLnNldEJvb2xQcmVmKHByZWYsIHZhbHVl
KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBwcmVm
SW50ZXJmYWNlLlBSRUZfSU5UOgorICAgICAgICAgICAgICAgICAgICBwcmVmSW50ZXJmYWNlLnNl
dEludFByZWYocHJlZiwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICIiIiAlIChuYW1lLCB2YWx1ZSkKKyAgICAgICAgd2l0aCBz
ZWxmLm1hcmlvbmV0dGUudXNpbmdfY29udGV4dChzZWxmLm1hcmlvbmV0dGUuQ09OVEVYVF9DSFJP
TUUpOgorICAgICAgICAgICAgc2VsZi5tYXJpb25ldHRlLmV4ZWN1dGVfc2NyaXB0KHNjcmlwdCkK
KworICAgIGRlZiBjbGVhcl91c2VyX3ByZWYoc2VsZiwgbmFtZSk6CisgICAgICAgIHNlbGYubG9n
Z2VyLmluZm8oIkNsZWFyaW5nIHByZWYgJXMiICUgKG5hbWUpKQorICAgICAgICBzY3JpcHQgPSAi
IiIKKyAgICAgICAgICAgIGxldCBwcmVmSW50ZXJmYWNlID0gQ29tcG9uZW50cy5jbGFzc2VzWyJA
bW96aWxsYS5vcmcvcHJlZmVyZW5jZXMtc2VydmljZTsxIl0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC5nZXRTZXJ2aWNlKENvbXBvbmVudHMuaW50ZXJmYWNlcy5u
c0lQcmVmQnJhbmNoKTsKKyAgICAgICAgICAgIGxldCBwcmVmID0gJyVzJzsKKyAgICAgICAgICAg
IHByZWZJbnRlcmZhY2UuY2xlYXJVc2VyUHJlZihwcmVmKTsKKyAgICAgICAgICAgICIiIiAlIG5h
bWUKKyAgICAgICAgd2l0aCBzZWxmLm1hcmlvbmV0dGUudXNpbmdfY29udGV4dChzZWxmLm1hcmlv
bmV0dGUuQ09OVEVYVF9DSFJPTUUpOgorICAgICAgICAgICAgc2VsZi5tYXJpb25ldHRlLmV4ZWN1
dGVfc2NyaXB0KHNjcmlwdCkKKworICAgIGRlZiBnZXRfcHJlZihzZWxmLCBuYW1lKToKKyAgICAg
ICAgc2NyaXB0ID0gIiIiCisgICAgICAgICAgICBsZXQgcHJlZkludGVyZmFjZSA9IENvbXBvbmVu
dHMuY2xhc3Nlc1siQG1vemlsbGEub3JnL3ByZWZlcmVuY2VzLXNlcnZpY2U7MSJdCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0U2VydmljZShDb21wb25lbnRz
LmludGVyZmFjZXMubnNJUHJlZkJyYW5jaCk7CisgICAgICAgICAgICBsZXQgcHJlZiA9ICclcyc7
CisgICAgICAgICAgICBsZXQgdHlwZSA9IHByZWZJbnRlcmZhY2UuZ2V0UHJlZlR5cGUocHJlZik7
CisgICAgICAgICAgICBzd2l0Y2godHlwZSkgeworICAgICAgICAgICAgICAgIGNhc2UgcHJlZklu
dGVyZmFjZS5QUkVGX1NUUklORzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZWZJbnRl
cmZhY2UuZ2V0Q2hhclByZWYocHJlZik7CisgICAgICAgICAgICAgICAgY2FzZSBwcmVmSW50ZXJm
YWNlLlBSRUZfQk9PTDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZWZJbnRlcmZhY2Uu
Z2V0Qm9vbFByZWYocHJlZik7CisgICAgICAgICAgICAgICAgY2FzZSBwcmVmSW50ZXJmYWNlLlBS
RUZfSU5UOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJlZkludGVyZmFjZS5nZXRJbnRQ
cmVmKHByZWYpOworICAgICAgICAgICAgICAgIGNhc2UgcHJlZkludGVyZmFjZS5QUkVGX0lOVkFM
SUQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgIiIiICUgbmFtZQorICAgICAgICB3aXRoIHNlbGYubWFyaW9uZXR0ZS51c2luZ19j
b250ZXh0KHNlbGYubWFyaW9uZXR0ZS5DT05URVhUX0NIUk9NRSk6CisgICAgICAgICAgICBzZWxm
Lm1hcmlvbmV0dGUuZXhlY3V0ZV9zY3JpcHQoc2NyaXB0KQorCisgICAgZGVmIGNsZWFyX29yaWdp
bihzZWxmLCB1cmwpOgorICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKCJDbGVhcmluZyBvcmlnaW4g
JXMiICUgKHVybCkpCisgICAgICAgIHNjcmlwdCA9ICIiIgorICAgICAgICAgICAgbGV0IHVybCA9
ICclcyc7CisgICAgICAgICAgICBsZXQgdXJpID0gQ29tcG9uZW50cy5jbGFzc2VzWyJAbW96aWxs
YS5vcmcvbmV0d29yay9pby1zZXJ2aWNlOzEiXQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAuZ2V0U2VydmljZShDaS5uc0lJT1NlcnZpY2UpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC5uZXdVUkkodXJsKTsKKyAgICAgICAgICAgIGxldCBzc20gPSBDb21wb25lbnRz
LmNsYXNzZXNbIkBtb3ppbGxhLm9yZy9zY3JpcHRzZWN1cml0eW1hbmFnZXI7MSJdCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRTZXJ2aWNlKENpLm5zSVNjcmlwdFNlY3VyaXR5
TWFuYWdlcik7CisgICAgICAgICAgICBsZXQgcHJpbmNpcGFsID0gc3NtLmNyZWF0ZUNvZGViYXNl
UHJpbmNpcGFsKHVyaSwge30pOworICAgICAgICAgICAgbGV0IHFtcyA9IENvbXBvbmVudHMuY2xh
c3Nlc1siQG1vemlsbGEub3JnL2RvbS9xdW90YS1tYW5hZ2VyLXNlcnZpY2U7MSJdCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRTZXJ2aWNlKENvbXBvbmVudHMuaW50ZXJmYWNl
cy5uc0lRdW90YU1hbmFnZXJTZXJ2aWNlKTsKKyAgICAgICAgICAgIHFtcy5jbGVhclN0b3JhZ2Vz
Rm9yUHJpbmNpcGFsKHByaW5jaXBhbCwgImRlZmF1bHQiLCB0cnVlKTsKKyAgICAgICAgICAgICIi
IiAlIHVybAorICAgICAgICB3aXRoIHNlbGYubWFyaW9uZXR0ZS51c2luZ19jb250ZXh0KHNlbGYu
bWFyaW9uZXR0ZS5DT05URVhUX0NIUk9NRSk6CisgICAgICAgICAgICBzZWxmLm1hcmlvbmV0dGUu
ZXhlY3V0ZV9zY3JpcHQoc2NyaXB0KQorCisKK2NsYXNzIEV4ZWN1dGVBc3luY1NjcmlwdFJ1bihv
YmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2dnZXIsIGZ1bmMsIHByb3RvY29sLCB1
cmwsIHRpbWVvdXQpOgorICAgICAgICBzZWxmLmxvZ2dlciA9IGxvZ2dlcgorICAgICAgICBzZWxm
LnJlc3VsdCA9IChOb25lLCBOb25lKQorICAgICAgICBzZWxmLnByb3RvY29sID0gcHJvdG9jb2wK
KyAgICAgICAgc2VsZi5tYXJpb25ldHRlID0gcHJvdG9jb2wubWFyaW9uZXR0ZQorICAgICAgICBz
ZWxmLmZ1bmMgPSBmdW5jCisgICAgICAgIHNlbGYudXJsID0gdXJsCisgICAgICAgIHNlbGYudGlt
ZW91dCA9IHRpbWVvdXQKKyAgICAgICAgc2VsZi5yZXN1bHRfZmxhZyA9IHRocmVhZGluZy5FdmVu
dCgpCisKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICBpbmRleCA9IHNlbGYudXJsLnJmaW5k
KCIvc3RvcmFnZS8iKTsKKyAgICAgICAgaWYgaW5kZXggIT0gLTE6CisgICAgICAgICAgICAjIENs
ZWFyIHN0b3JhZ2UKKyAgICAgICAgICAgIHNlbGYucHJvdG9jb2wuY2xlYXJfb3JpZ2luKHNlbGYu
dXJsKQorCisgICAgICAgIHRpbWVvdXQgPSBzZWxmLnRpbWVvdXQKKworICAgICAgICB0cnk6Cisg
ICAgICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGlmIHRp
bWVvdXQgKyBleHRyYV90aW1lb3V0ICE9IHNlbGYucHJvdG9jb2wudGltZW91dDoKKyAgICAgICAg
ICAgICAgICAgICAgc2VsZi5wcm90b2NvbC5zZXRfdGltZW91dCh0aW1lb3V0ICsgZXh0cmFfdGlt
ZW91dCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBXZSBqdXN0IHdhbnQg
aXQgdG8gbmV2ZXIgdGltZSBvdXQsIHJlYWxseSwgYnV0IG1hcmlvbmV0dGUgZG9lc24ndAorICAg
ICAgICAgICAgICAgICMgbWFrZSB0aGF0IHBvc3NpYmxlLiBJdCBhbHNvIHNlZW1zIHRvIHRpbWUg
b3V0IGltbWVkaWF0ZWx5IGlmIHRoZQorICAgICAgICAgICAgICAgICMgdGltZW91dCBpcyBzZXQg
dG9vIGhpZ2guIFRoaXMgd29ya3MgYXQgbGVhc3QuCisgICAgICAgICAgICAgICAgc2VsZi5wcm90
b2NvbC5zZXRfdGltZW91dCgyKioyOCAtIDEpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAg
ICAgICAgICAgc2VsZi5sb2dnZXIuZXJyb3IoIkxvc3QgbWFyaW9uZXR0ZSBjb25uZWN0aW9uIGJl
Zm9yZSBzdGFydGluZyB0ZXN0IikKKyAgICAgICAgICAgIHJldHVybiBTdG9wCisKKyAgICAgICAg
ZXhlY3V0b3IgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldCA9IHNlbGYuX3J1bikKKyAgICAgICAg
ZXhlY3V0b3Iuc3RhcnQoKQorCisgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6CisgICAg
ICAgICAgICB3YWl0X3RpbWVvdXQgPSB0aW1lb3V0ICsgMiAqIGV4dHJhX3RpbWVvdXQKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIHdhaXRfdGltZW91dCA9IE5vbmUKKworICAgICAgICBmbGFn
ID0gc2VsZi5yZXN1bHRfZmxhZy53YWl0KHdhaXRfdGltZW91dCkKKworICAgICAgICBpZiBzZWxm
LnJlc3VsdCA9PSAoTm9uZSwgTm9uZSk6CisgICAgICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1Zygi
VGltZWQgb3V0IHdhaXRpbmcgZm9yIGEgcmVzdWx0IikKKyAgICAgICAgICAgIHNlbGYucmVzdWx0
ID0gRmFsc2UsICgiRVhURVJOQUwtVElNRU9VVCIsIE5vbmUpCisgICAgICAgIGVsaWYgc2VsZi5y
ZXN1bHRbMV0gaXMgTm9uZToKKyAgICAgICAgICAgICMgV2UgZGlkbid0IGdldCBhbnkgZGF0YSBi
YWNrIGZyb20gdGhlIHRlc3QsIHNvIGNoZWNrIGlmIHRoZQorICAgICAgICAgICAgIyBicm93c2Vy
IGlzIHN0aWxsIHJlc3BvbnNpdmUKKyAgICAgICAgICAgIGlmIHNlbGYucHJvdG9jb2wuaXNfYWxp
dmU6CisgICAgICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSBGYWxzZSwgKCJFUlJPUiIsIE5vbmUp
CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYucmVzdWx0ID0gRmFsc2Us
ICgiQ1JBU0giLCBOb25lKQorICAgICAgICByZXR1cm4gc2VsZi5yZXN1bHQKKworICAgIGRlZiBf
cnVuKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnJlc3VsdCA9IFRydWUs
IHNlbGYuZnVuYyhzZWxmLm1hcmlvbmV0dGUsIHNlbGYudXJsLCBzZWxmLnRpbWVvdXQpCisgICAg
ICAgIGV4Y2VwdCBlcnJvcnMuU2NyaXB0VGltZW91dEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHNl
bGYubG9nZ2VyLmRlYnVnKCJHb3QgYSBtYXJpb25ldHRlIHRpbWVvdXQiKQorICAgICAgICAgICAg
c2VsZi5yZXN1bHQgPSBGYWxzZSwgKCJFWFRFUk5BTC1USU1FT1VUIiwgTm9uZSkKKyAgICAgICAg
ZXhjZXB0IChzb2NrZXQudGltZW91dCwgSU9FcnJvcik6CisgICAgICAgICAgICAjIFRoaXMgY2Fu
IGhhcHBlbiBvbiBhIGNyYXNoCisgICAgICAgICAgICAjIEFsc28sIHNob3VsZCBjaGVjayBhZnRl
ciB0aGUgdGVzdCBpZiB0aGUgZmlyZWZveCBwcm9jZXNzIGlzIHN0aWxsIHJ1bm5pbmcKKyAgICAg
ICAgICAgICMgYW5kIG90aGVyd2lzZSBpZ25vcmUgYW55IG90aGVyIHJlc3VsdCBhbmQgc2V0IGl0
IHRvIGNyYXNoCisgICAgICAgICAgICBzZWxmLnJlc3VsdCA9IEZhbHNlLCAoIkNSQVNIIiwgTm9u
ZSkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgbWVzc2FnZSA9
IGdldGF0dHIoZSwgIm1lc3NhZ2UiLCAiIikKKyAgICAgICAgICAgIGlmIG1lc3NhZ2U6CisgICAg
ICAgICAgICAgICAgbWVzc2FnZSArPSAiXG4iCisgICAgICAgICAgICBtZXNzYWdlICs9IHRyYWNl
YmFjay5mb3JtYXRfZXhjKGUpCisgICAgICAgICAgICBzZWxmLnJlc3VsdCA9IEZhbHNlLCAoIkVS
Uk9SIiwgZSkKKworICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5yZXN1bHRfZmxh
Zy5zZXQoKQorCisKK2NsYXNzIE1hcmlvbmV0dGVUZXN0aGFybmVzc0V4ZWN1dG9yKFRlc3RoYXJu
ZXNzRXhlY3V0b3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm93c2VyLCBzZXJ2ZXJfY29u
ZmlnLCB0aW1lb3V0X211bHRpcGxpZXI9MSwKKyAgICAgICAgICAgICAgICAgY2xvc2VfYWZ0ZXJf
ZG9uZT1UcnVlLCBkZWJ1Z19pbmZvPU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgIiIiTWFyaW9u
ZXR0ZS1iYXNlZCBleGVjdXRvciBmb3IgdGVzdGhhcm5lc3MuanMgdGVzdHMiIiIKKyAgICAgICAg
VGVzdGhhcm5lc3NFeGVjdXRvci5fX2luaXRfXyhzZWxmLCBicm93c2VyLCBzZXJ2ZXJfY29uZmln
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXRfbXVsdGlwbGll
cj10aW1lb3V0X211bHRpcGxpZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGVidWdfaW5mbz1kZWJ1Z19pbmZvKQorCisgICAgICAgIHNlbGYucHJvdG9jb2wgPSBNYXJp
b25ldHRlUHJvdG9jb2woc2VsZiwgYnJvd3NlciwgdGltZW91dF9tdWx0aXBsaWVyKQorICAgICAg
ICBzZWxmLnNjcmlwdCA9IG9wZW4ob3MucGF0aC5qb2luKGhlcmUsICJ0ZXN0aGFybmVzc19tYXJp
b25ldHRlLmpzIikpLnJlYWQoKQorICAgICAgICBzZWxmLmNsb3NlX2FmdGVyX2RvbmUgPSBjbG9z
ZV9hZnRlcl9kb25lCisgICAgICAgIHNlbGYud2luZG93X2lkID0gc3RyKHV1aWQudXVpZDQoKSkK
KworICAgICAgICBzZWxmLm9yaWdpbmFsX3ByZWZfdmFsdWVzID0ge30KKworICAgICAgICBpZiBt
YXJpb25ldHRlIGlzIE5vbmU6CisgICAgICAgICAgICBkb19kZWxheWVkX2ltcG9ydHMoKQorCisg
ICAgZGVmIGlzX2FsaXZlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5wcm90b2NvbC5pc19h
bGl2ZQorCisgICAgZGVmIG9uX2Vudmlyb25tZW50X2NoYW5nZShzZWxmLCBuZXdfZW52aXJvbm1l
bnQpOgorICAgICAgICBzZWxmLnByb3RvY29sLm9uX2Vudmlyb25tZW50X2NoYW5nZShzZWxmLmxh
c3RfZW52aXJvbm1lbnQsIG5ld19lbnZpcm9ubWVudCkKKworICAgICAgICBpZiBuZXdfZW52aXJv
bm1lbnRbInByb3RvY29sIl0gIT0gc2VsZi5sYXN0X2Vudmlyb25tZW50WyJwcm90b2NvbCJdOgor
ICAgICAgICAgICAgc2VsZi5wcm90b2NvbC5sb2FkX3J1bm5lcihuZXdfZW52aXJvbm1lbnRbInBy
b3RvY29sIl0pCisKKyAgICBkZWYgZG9fdGVzdChzZWxmLCB0ZXN0KToKKyAgICAgICAgdGltZW91
dCA9ICh0ZXN0LnRpbWVvdXQgKiBzZWxmLnRpbWVvdXRfbXVsdGlwbGllciBpZiBzZWxmLmRlYnVn
X2luZm8gaXMgTm9uZQorICAgICAgICAgICAgICAgICAgIGVsc2UgTm9uZSkKKworICAgICAgICBz
dWNjZXNzLCBkYXRhID0gRXhlY3V0ZUFzeW5jU2NyaXB0UnVuKHNlbGYubG9nZ2VyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZG9fdGVzdGhhcm5l
c3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5w
cm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLnRlc3RfdXJsKHRlc3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRpbWVvdXQpLnJ1bigpCisgICAgICAgIGlmIHN1Y2Nlc3M6CisgICAgICAgICAg
ICByZXR1cm4gc2VsZi5jb252ZXJ0X3Jlc3VsdCh0ZXN0LCBkYXRhKQorCisgICAgICAgIHJldHVy
biAodGVzdC5yZXN1bHRfY2xzKCpkYXRhKSwgW10pCisKKyAgICBkZWYgZG9fdGVzdGhhcm5lc3Mo
c2VsZiwgbWFyaW9uZXR0ZSwgdXJsLCB0aW1lb3V0KToKKyAgICAgICAgaWYgc2VsZi5jbG9zZV9h
ZnRlcl9kb25lOgorICAgICAgICAgICAgbWFyaW9uZXR0ZS5leGVjdXRlX3NjcmlwdCgiaWYgKHdp
bmRvdy53cmFwcGVkSlNPYmplY3Qud2luKSB7d2luZG93LndyYXBwZWRKU09iamVjdC53aW4uY2xv
c2UoKX0iKQorICAgICAgICAgICAgc2VsZi5wcm90b2NvbC5jbG9zZV9vbGRfd2luZG93cyhzZWxm
LnByb3RvY29sKQorCisgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6CisgICAgICAgICAg
ICB0aW1lb3V0X21zID0gc3RyKHRpbWVvdXQgKiAxMDAwKQorICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgdGltZW91dF9tcyA9ICJudWxsIgorCisgICAgICAgIHNjcmlwdCA9IHNlbGYuc2NyaXB0
ICUgeyJhYnNfdXJsIjogdXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXJs
Ijogc3RyaXBfc2VydmVyKHVybCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3
aW5kb3dfaWQiOiBzZWxmLndpbmRvd19pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgInRpbWVvdXRfbXVsdGlwbGllciI6IHNlbGYudGltZW91dF9tdWx0aXBsaWVyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAidGltZW91dCI6IHRpbWVvdXRfbXMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJleHBsaWNpdF90aW1lb3V0IjogdGltZW91dCBpcyBO
b25lfQorCisgICAgICAgIHJ2ID0gbWFyaW9uZXR0ZS5leGVjdXRlX2FzeW5jX3NjcmlwdChzY3Jp
cHQsIG5ld19zYW5kYm94PUZhbHNlKQorICAgICAgICByZXR1cm4gcnYKKworCitjbGFzcyBNYXJp
b25ldHRlUmVmVGVzdEV4ZWN1dG9yKFJlZlRlc3RFeGVjdXRvcik6CisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIGJyb3dzZXIsIHNlcnZlcl9jb25maWcsIHRpbWVvdXRfbXVsdGlwbGllcj0xLAorICAg
ICAgICAgICAgICAgICBzY3JlZW5zaG90X2NhY2hlPU5vbmUsIGNsb3NlX2FmdGVyX2RvbmU9VHJ1
ZSwKKyAgICAgICAgICAgICAgICAgZGVidWdfaW5mbz1Ob25lLCByZWZ0ZXN0X2ludGVybmFsPUZh
bHNlLAorICAgICAgICAgICAgICAgICByZWZ0ZXN0X3NjcmVlbnNob3Q9InVuZXhwZWN0ZWQiLAor
ICAgICAgICAgICAgICAgICBncm91cF9tZXRhZGF0YT1Ob25lLCAqKmt3YXJncyk6CisgICAgICAg
ICIiIk1hcmlvbmV0dGUtYmFzZWQgZXhlY3V0b3IgZm9yIHJlZnRlc3RzIiIiCisgICAgICAgIFJl
ZlRlc3RFeGVjdXRvci5fX2luaXRfXyhzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJvd3NlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9j
b25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JlZW5zaG90X2NhY2hl
PXNjcmVlbnNob3RfY2FjaGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1l
b3V0X211bHRpcGxpZXI9dGltZW91dF9tdWx0aXBsaWVyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGVidWdfaW5mbz1kZWJ1Z19pbmZvKQorICAgICAgICBzZWxmLnByb3RvY29s
ID0gTWFyaW9uZXR0ZVByb3RvY29sKHNlbGYsIGJyb3dzZXIpCisgICAgICAgIHNlbGYuaW1wbGVt
ZW50YXRpb24gPSAoSW50ZXJuYWxSZWZUZXN0SW1wbGVtZW50YXRpb24KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiByZWZ0ZXN0X2ludGVybmFsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWxzZSBSZWZUZXN0SW1wbGVtZW50YXRpb24pKHNlbGYpCisgICAgICAgIHNl
bGYuaW1wbGVtZW50YXRpb25fa3dhcmdzID0gKHsic2NyZWVuc2hvdCI6IHJlZnRlc3Rfc2NyZWVu
c2hvdH0gaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmdGVzdF9p
bnRlcm5hbCBlbHNlIHt9KQorCisgICAgICAgIHNlbGYuY2xvc2VfYWZ0ZXJfZG9uZSA9IGNsb3Nl
X2FmdGVyX2RvbmUKKyAgICAgICAgc2VsZi5oYXNfd2luZG93ID0gRmFsc2UKKyAgICAgICAgc2Vs
Zi5vcmlnaW5hbF9wcmVmX3ZhbHVlcyA9IHt9CisgICAgICAgIHNlbGYuZ3JvdXBfbWV0YWRhdGEg
PSBncm91cF9tZXRhZGF0YQorCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oaGVyZSwg
InJlZnRlc3QuanMiKSkgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuc2NyaXB0ID0gZi5yZWFkKCkK
KyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihoZXJlLCAicmVmdGVzdC13YWl0X21hcmlv
bmV0dGUuanMiKSkgYXMgZjoKKyAgICAgICAgICAgIHNlbGYud2FpdF9zY3JpcHQgPSBmLnJlYWQo
KQorCisgICAgZGVmIHNldHVwKHNlbGYsIHJ1bm5lcik6CisgICAgICAgIHN1cGVyKHNlbGYuX19j
bGFzc19fLCBzZWxmKS5zZXR1cChydW5uZXIpCisgICAgICAgIHNlbGYuaW1wbGVtZW50YXRpb24u
c2V0dXAoKipzZWxmLmltcGxlbWVudGF0aW9uX2t3YXJncykKKworICAgIGRlZiB0ZWFyZG93bihz
ZWxmKToKKyAgICAgICAgc2VsZi5pbXBsZW1lbnRhdGlvbi50ZWFyZG93bigpCisgICAgICAgIGhh
bmRsZSA9IHNlbGYucHJvdG9jb2wubWFyaW9uZXR0ZS53aW5kb3dfaGFuZGxlc1swXQorICAgICAg
ICBzZWxmLnByb3RvY29sLm1hcmlvbmV0dGUuc3dpdGNoX3RvX3dpbmRvdyhoYW5kbGUpCisgICAg
ICAgIHN1cGVyKHNlbGYuX19jbGFzc19fLCBzZWxmKS50ZWFyZG93bigpCisKKyAgICBkZWYgaXNf
YWxpdmUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnByb3RvY29sLmlzX2FsaXZlCisKKyAg
ICBkZWYgb25fZW52aXJvbm1lbnRfY2hhbmdlKHNlbGYsIG5ld19lbnZpcm9ubWVudCk6CisgICAg
ICAgIHNlbGYucHJvdG9jb2wub25fZW52aXJvbm1lbnRfY2hhbmdlKHNlbGYubGFzdF9lbnZpcm9u
bWVudCwgbmV3X2Vudmlyb25tZW50KQorCisgICAgZGVmIGRvX3Rlc3Qoc2VsZiwgdGVzdCk6Cisg
ICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHNlbGYuaW1wbGVtZW50YXRpb24sIEludGVybmFsUmVm
VGVzdEltcGxlbWVudGF0aW9uKToKKyAgICAgICAgICAgIGlmIHNlbGYuY2xvc2VfYWZ0ZXJfZG9u
ZSBhbmQgc2VsZi5oYXNfd2luZG93OgorICAgICAgICAgICAgICAgIHNlbGYucHJvdG9jb2wubWFy
aW9uZXR0ZS5jbG9zZSgpCisgICAgICAgICAgICAgICAgc2VsZi5wcm90b2NvbC5tYXJpb25ldHRl
LnN3aXRjaF90b193aW5kb3coCisgICAgICAgICAgICAgICAgICAgIHNlbGYucHJvdG9jb2wubWFy
aW9uZXR0ZS53aW5kb3dfaGFuZGxlc1stMV0pCisgICAgICAgICAgICAgICAgc2VsZi5oYXNfd2lu
ZG93ID0gRmFsc2UKKworICAgICAgICAgICAgaWYgbm90IHNlbGYuaGFzX3dpbmRvdzoKKyAgICAg
ICAgICAgICAgICBzZWxmLnByb3RvY29sLm1hcmlvbmV0dGUuZXhlY3V0ZV9zY3JpcHQoc2VsZi5z
Y3JpcHQpCisgICAgICAgICAgICAgICAgc2VsZi5wcm90b2NvbC5tYXJpb25ldHRlLnN3aXRjaF90
b193aW5kb3coc2VsZi5wcm90b2NvbC5tYXJpb25ldHRlLndpbmRvd19oYW5kbGVzWy0xXSkKKyAg
ICAgICAgICAgICAgICBzZWxmLmhhc193aW5kb3cgPSBUcnVlCisKKyAgICAgICAgcmVzdWx0ID0g
c2VsZi5pbXBsZW1lbnRhdGlvbi5ydW5fdGVzdCh0ZXN0KQorICAgICAgICByZXR1cm4gc2VsZi5j
b252ZXJ0X3Jlc3VsdCh0ZXN0LCByZXN1bHQpCisKKyAgICBkZWYgc2NyZWVuc2hvdChzZWxmLCB0
ZXN0LCB2aWV3cG9ydF9zaXplLCBkcGkpOgorICAgICAgICAjIGh0dHBzOi8vZ2l0aHViLmNvbS93
M2Mvd3B0cnVubmVyL2lzc3Vlcy8xNjYKKyAgICAgICAgYXNzZXJ0IHZpZXdwb3J0X3NpemUgaXMg
Tm9uZQorICAgICAgICBhc3NlcnQgZHBpIGlzIE5vbmUKKworICAgICAgICB0aW1lb3V0ID0gIHNl
bGYudGltZW91dF9tdWx0aXBsaWVyICogdGVzdC50aW1lb3V0IGlmIHNlbGYuZGVidWdfaW5mbyBp
cyBOb25lIGVsc2UgTm9uZQorCisgICAgICAgIHRlc3RfdXJsID0gc2VsZi50ZXN0X3VybCh0ZXN0
KQorCisgICAgICAgIHJldHVybiBFeGVjdXRlQXN5bmNTY3JpcHRSdW4oc2VsZi5sb2dnZXIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NjcmVlbnNob3QsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNlbGYucHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRlc3RfdXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0KS5y
dW4oKQorCisgICAgZGVmIF9zY3JlZW5zaG90KHNlbGYsIG1hcmlvbmV0dGUsIHVybCwgdGltZW91
dCk6CisgICAgICAgIG1hcmlvbmV0dGUubmF2aWdhdGUodXJsKQorCisgICAgICAgIG1hcmlvbmV0
dGUuZXhlY3V0ZV9hc3luY19zY3JpcHQoc2VsZi53YWl0X3NjcmlwdCkKKworICAgICAgICBzY3Jl
ZW5zaG90ID0gbWFyaW9uZXR0ZS5zY3JlZW5zaG90KGZ1bGw9RmFsc2UpCisgICAgICAgICMgc3Ry
aXAgb2ZmIHRoZSBkYXRhOmltZy9wbmcsIHBhcnQgb2YgdGhlIHVybAorICAgICAgICBpZiBzY3Jl
ZW5zaG90LnN0YXJ0c3dpdGgoImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwiKToKKyAgICAgICAgICAg
IHNjcmVlbnNob3QgPSBzY3JlZW5zaG90LnNwbGl0KCIsIiwgMSlbMV0KKworICAgICAgICByZXR1
cm4gc2NyZWVuc2hvdAorCisKK2NsYXNzIEludGVybmFsUmVmVGVzdEltcGxlbWVudGF0aW9uKG9i
amVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4ZWN1dG9yKToKKyAgICAgICAgc2VsZi50
aW1lb3V0X211bHRpcGxpZXIgPSBleGVjdXRvci50aW1lb3V0X211bHRpcGxpZXIKKyAgICAgICAg
c2VsZi5leGVjdXRvciA9IGV4ZWN1dG9yCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbG9nZ2Vy
KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5leGVjdXRvci5sb2dnZXIKKworICAgIGRlZiBz
ZXR1cChzZWxmLCBzY3JlZW5zaG90PSJ1bmV4cGVjdGVkIik6CisgICAgICAgIGRhdGEgPSB7InNj
cmVlbnNob3QiOiBzY3JlZW5zaG90fQorICAgICAgICBpZiBzZWxmLmV4ZWN1dG9yLmdyb3VwX21l
dGFkYXRhIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZGF0YVsidXJsQ291bnQiXSA9IHt1cmxw
YXJzZS51cmxqb2luKHNlbGYuZXhlY3V0b3Iuc2VydmVyX3VybChrZXlbMF0pLCBrZXlbMV0pOnZh
bHVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIHNl
bGYuZXhlY3V0b3IuZ3JvdXBfbWV0YWRhdGEuZ2V0KCJ1cmxfY291bnQiLCB7fSkuaXRlcml0ZW1z
KCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdmFsdWUgPiAxfQorICAgICAg
ICBzZWxmLmV4ZWN1dG9yLnByb3RvY29sLm1hcmlvbmV0dGUuc2V0X2NvbnRleHQoc2VsZi5leGVj
dXRvci5wcm90b2NvbC5tYXJpb25ldHRlLkNPTlRFWFRfQ0hST01FKQorICAgICAgICBzZWxmLmV4
ZWN1dG9yLnByb3RvY29sLm1hcmlvbmV0dGUuX3NlbmRfbWVzc2FnZSgicmVmdGVzdDpzZXR1cCIs
IGRhdGEpCisKKyAgICBkZWYgcnVuX3Rlc3Qoc2VsZiwgdGVzdCk6CisgICAgICAgIHZpZXdwb3J0
X3NpemUgPSB0ZXN0LnZpZXdwb3J0X3NpemUKKyAgICAgICAgZHBpID0gdGVzdC5kcGkKKworICAg
ICAgICByZWZlcmVuY2VzID0gc2VsZi5nZXRfcmVmZXJlbmNlcyh0ZXN0KQorICAgICAgICBydiA9
IHNlbGYuZXhlY3V0b3IucHJvdG9jb2wubWFyaW9uZXR0ZS5fc2VuZF9tZXNzYWdlKCJyZWZ0ZXN0
OnJ1biIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeyJ0ZXN0Ijogc2VsZi5leGVjdXRvci50ZXN0X3VybCh0ZXN0KSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
InJlZmVyZW5jZXMiOiByZWZlcmVuY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQiOiB0ZXN0LmV4cGVjdGVk
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJ0aW1lb3V0IjogdGVzdC50aW1lb3V0ICogMTAwMH0pWyJ2YWx1ZSJdCisgICAg
ICAgIHJldHVybiBydgorCisgICAgZGVmIGdldF9yZWZlcmVuY2VzKHNlbGYsIG5vZGUpOgorICAg
ICAgICBydiA9IFtdCisgICAgICAgIGZvciBpdGVtLCByZWxhdGlvbiBpbiBub2RlLnJlZmVyZW5j
ZXM6CisgICAgICAgICAgICBydi5hcHBlbmQoW3NlbGYuZXhlY3V0b3IudGVzdF91cmwoaXRlbSks
IHNlbGYuZ2V0X3JlZmVyZW5jZXMoaXRlbSksIHJlbGF0aW9uXSkKKyAgICAgICAgcmV0dXJuIHJ2
CisKKyAgICBkZWYgdGVhcmRvd24oc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNl
bGYuZXhlY3V0b3IucHJvdG9jb2wubWFyaW9uZXR0ZS5fc2VuZF9tZXNzYWdlKCJyZWZ0ZXN0OnRl
YXJkb3duIiwge30pCisgICAgICAgICAgICBzZWxmLmV4ZWN1dG9yLnByb3RvY29sLm1hcmlvbmV0
dGUuc2V0X2NvbnRleHQoc2VsZi5leGVjdXRvci5wcm90b2NvbC5tYXJpb25ldHRlLkNPTlRFWFRf
Q09OVEVOVCkKKyAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgIHBhc3MK
KworCitjbGFzcyBHZWNrb0RyaXZlclByb3RvY29sKFdlYkRyaXZlclByb3RvY29sKToKKyAgICBz
ZXJ2ZXJfY2xzID0gR2Vja29Ecml2ZXJTZXJ2ZXIKKworCitjbGFzcyBNYXJpb25ldHRlV2RzcGVj
RXhlY3V0b3IoV2RzcGVjRXhlY3V0b3IpOgorICAgIHByb3RvY29sX2NscyA9IEdlY2tvRHJpdmVy
UHJvdG9jb2wKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93
cHRydW5uZXIvd3B0cnVubmVyL2V4ZWN1dG9ycy9leGVjdXRvcnNlbGVuaXVtLnB5IGIvV2ViRHJp
dmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvZXhlY3V0b3Jz
L2V4ZWN1dG9yc2VsZW5pdW0ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLjcyOGQzYzY4MjIyCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0
ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvZXhlY3V0b3JzL2V4ZWN1dG9yc2VsZW5p
dW0ucHkKQEAgLTAsMCArMSwyNTkgQEAKK2ltcG9ydCBvcworaW1wb3J0IHNvY2tldAoraW1wb3J0
IHN5cworaW1wb3J0IHRocmVhZGluZworaW1wb3J0IHRpbWUKK2ltcG9ydCB0cmFjZWJhY2sKK2lt
cG9ydCB1cmxwYXJzZQoraW1wb3J0IHV1aWQKKworZnJvbSAuYmFzZSBpbXBvcnQgKFByb3RvY29s
LAorICAgICAgICAgICAgICAgICAgIFJlZlRlc3RFeGVjdXRvciwKKyAgICAgICAgICAgICAgICAg
ICBSZWZUZXN0SW1wbGVtZW50YXRpb24sCisgICAgICAgICAgICAgICAgICAgVGVzdGhhcm5lc3NF
eGVjdXRvciwKKyAgICAgICAgICAgICAgICAgICBleHRyYV90aW1lb3V0LAorICAgICAgICAgICAg
ICAgICAgIHN0cmlwX3NlcnZlcikKK2Zyb20gLi50ZXN0cnVubmVyIGltcG9ydCBTdG9wCisKK2hl
cmUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5zcGxpdChfX2ZpbGVfXylbMF0pCisKK3dlYmRyaXZl
ciA9IE5vbmUKK2V4Y2VwdGlvbnMgPSBOb25lCitSZW1vdGVDb25uZWN0aW9uID0gTm9uZQorCisK
K2RlZiBkb19kZWxheWVkX2ltcG9ydHMoKToKKyAgICBnbG9iYWwgd2ViZHJpdmVyCisgICAgZ2xv
YmFsIGV4Y2VwdGlvbnMKKyAgICBnbG9iYWwgUmVtb3RlQ29ubmVjdGlvbgorICAgIGZyb20gc2Vs
ZW5pdW0gaW1wb3J0IHdlYmRyaXZlcgorICAgIGZyb20gc2VsZW5pdW0uY29tbW9uIGltcG9ydCBl
eGNlcHRpb25zCisgICAgZnJvbSBzZWxlbml1bS53ZWJkcml2ZXIucmVtb3RlLnJlbW90ZV9jb25u
ZWN0aW9uIGltcG9ydCBSZW1vdGVDb25uZWN0aW9uCisKKworY2xhc3MgU2VsZW5pdW1Qcm90b2Nv
bChQcm90b2NvbCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4ZWN1dG9yLCBicm93c2VyLCBj
YXBhYmlsaXRpZXMsICoqa3dhcmdzKToKKyAgICAgICAgZG9fZGVsYXllZF9pbXBvcnRzKCkKKwor
ICAgICAgICBQcm90b2NvbC5fX2luaXRfXyhzZWxmLCBleGVjdXRvciwgYnJvd3NlcikKKyAgICAg
ICAgc2VsZi5jYXBhYmlsaXRpZXMgPSBjYXBhYmlsaXRpZXMKKyAgICAgICAgc2VsZi51cmwgPSBi
cm93c2VyLndlYmRyaXZlcl91cmwKKyAgICAgICAgc2VsZi53ZWJkcml2ZXIgPSBOb25lCisKKyAg
ICBkZWYgc2V0dXAoc2VsZiwgcnVubmVyKToKKyAgICAgICAgIiIiQ29ubmVjdCB0byBicm93c2Vy
IHZpYSBTZWxlbml1bSdzIFdlYkRyaXZlciBpbXBsZW1lbnRhdGlvbi4iIiIKKyAgICAgICAgc2Vs
Zi5ydW5uZXIgPSBydW5uZXIKKyAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcoIkNvbm5lY3Rpbmcg
dG8gU2VsZW5pdW0gb24gVVJMOiAlcyIgJSBzZWxmLnVybCkKKworICAgICAgICBzZXNzaW9uX3N0
YXJ0ZWQgPSBGYWxzZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLndlYmRyaXZlciA9
IHdlYmRyaXZlci5SZW1vdGUoY29tbWFuZF9leGVjdXRvcj1SZW1vdGVDb25uZWN0aW9uKHNlbGYu
dXJsLnN0cmlwKCIvIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVfaXA9RmFsc2Up
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2lyZWRf
Y2FwYWJpbGl0aWVzPXNlbGYuY2FwYWJpbGl0aWVzKQorICAgICAgICBleGNlcHQ6CisgICAgICAg
ICAgICBzZWxmLmxvZ2dlci53YXJuaW5nKAorICAgICAgICAgICAgICAgICJDb25uZWN0aW5nIHRv
IFNlbGVuaXVtIGZhaWxlZDpcbiVzIiAlIHRyYWNlYmFjay5mb3JtYXRfZXhjKCkpCisgICAgICAg
IGVsc2U6CisgICAgICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1ZygiU2VsZW5pdW0gc2Vzc2lvbiBz
dGFydGVkIikKKyAgICAgICAgICAgIHNlc3Npb25fc3RhcnRlZCA9IFRydWUKKworICAgICAgICBp
ZiBub3Qgc2Vzc2lvbl9zdGFydGVkOgorICAgICAgICAgICAgc2VsZi5sb2dnZXIud2FybmluZygi
RmFpbGVkIHRvIGNvbm5lY3QgdG8gU2VsZW5pdW0iKQorICAgICAgICAgICAgc2VsZi5leGVjdXRv
ci5ydW5uZXIuc2VuZF9tZXNzYWdlKCJpbml0X2ZhaWxlZCIpCisgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5hZnRlcl9jb25uZWN0KCkKKyAgICAg
ICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBwcmludCA+PiBzeXMuc3RkZXJyLCB0cmFj
ZWJhY2suZm9ybWF0X2V4YygpCisgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIud2FybmluZygK
KyAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBjb25uZWN0IHRvIG5hdmlnYXRlIGluaXRp
YWwgcGFnZSIpCisgICAgICAgICAgICAgICAgc2VsZi5leGVjdXRvci5ydW5uZXIuc2VuZF9tZXNz
YWdlKCJpbml0X2ZhaWxlZCIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNl
bGYuZXhlY3V0b3IucnVubmVyLnNlbmRfbWVzc2FnZSgiaW5pdF9zdWNjZWVkZWQiKQorCisgICAg
ZGVmIHRlYXJkb3duKHNlbGYpOgorICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1ZygiSGFuZ2luZyB1
cCBvbiBTZWxlbml1bSBzZXNzaW9uIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi53
ZWJkcml2ZXIucXVpdCgpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAg
ICAgZGVsIHNlbGYud2ViZHJpdmVyCisKKyAgICBkZWYgaXNfYWxpdmUoc2VsZik6CisgICAgICAg
IHRyeToKKyAgICAgICAgICAgICMgR2V0IGEgc2ltcGxlIHByb3BlcnR5IG92ZXIgdGhlIGNvbm5l
Y3Rpb24KKyAgICAgICAgICAgIHNlbGYud2ViZHJpdmVyLmN1cnJlbnRfd2luZG93X2hhbmRsZQor
ICAgICAgICAjIFRPRE8gd2hhdCBleGNlcHRpb24/CisgICAgICAgIGV4Y2VwdCAoc29ja2V0LnRp
bWVvdXQsIGV4Y2VwdGlvbnMuRXJyb3JJblJlc3BvbnNlRXhjZXB0aW9uKToKKyAgICAgICAgICAg
IHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIGFmdGVyX2Nvbm5l
Y3Qoc2VsZik6CisgICAgICAgIHNlbGYubG9hZF9ydW5uZXIoImh0dHAiKQorCisgICAgZGVmIGxv
YWRfcnVubmVyKHNlbGYsIHByb3RvY29sKToKKyAgICAgICAgdXJsID0gdXJscGFyc2UudXJsam9p
bihzZWxmLmV4ZWN1dG9yLnNlcnZlcl91cmwocHJvdG9jb2wpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICIvdGVzdGhhcm5lc3NfcnVubmVyLmh0bWwiKQorICAgICAgICBzZWxmLmxv
Z2dlci5kZWJ1ZygiTG9hZGluZyAlcyIgJSB1cmwpCisgICAgICAgIHNlbGYud2ViZHJpdmVyLmdl
dCh1cmwpCisgICAgICAgIHNlbGYud2ViZHJpdmVyLmV4ZWN1dGVfc2NyaXB0KCJkb2N1bWVudC50
aXRsZSA9ICclcyciICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhy
ZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkubmFtZS5yZXBsYWNlKCInIiwgJyInKSkKKworICAgIGRl
ZiB3YWl0KHNlbGYpOgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgICAgIHNlbGYud2ViZHJpdmVyLmV4ZWN1dGVfYXN5bmNfc2NyaXB0KCIiKTsKKyAg
ICAgICAgICAgIGV4Y2VwdCBleGNlcHRpb25zLlRpbWVvdXRFeGNlcHRpb246CisgICAgICAgICAg
ICAgICAgcGFzcworICAgICAgICAgICAgZXhjZXB0IChzb2NrZXQudGltZW91dCwgZXhjZXB0aW9u
cy5Ob1N1Y2hXaW5kb3dFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMu
RXJyb3JJblJlc3BvbnNlRXhjZXB0aW9uLCBJT0Vycm9yKToKKyAgICAgICAgICAgICAgICBicmVh
aworICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgIHNl
bGYubG9nZ2VyLmVycm9yKHRyYWNlYmFjay5mb3JtYXRfZXhjKGUpKQorICAgICAgICAgICAgICAg
IGJyZWFrCisKKworY2xhc3MgU2VsZW5pdW1SdW4ob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18o
c2VsZiwgZnVuYywgd2ViZHJpdmVyLCB1cmwsIHRpbWVvdXQpOgorICAgICAgICBzZWxmLmZ1bmMg
PSBmdW5jCisgICAgICAgIHNlbGYucmVzdWx0ID0gTm9uZQorICAgICAgICBzZWxmLndlYmRyaXZl
ciA9IHdlYmRyaXZlcgorICAgICAgICBzZWxmLnVybCA9IHVybAorICAgICAgICBzZWxmLnRpbWVv
dXQgPSB0aW1lb3V0CisgICAgICAgIHNlbGYucmVzdWx0X2ZsYWcgPSB0aHJlYWRpbmcuRXZlbnQo
KQorCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgdGltZW91dCA9IHNlbGYudGltZW91dAor
CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYud2ViZHJpdmVyLnNldF9zY3JpcHRfdGlt
ZW91dCgodGltZW91dCArIGV4dHJhX3RpbWVvdXQpICogMTAwMCkKKyAgICAgICAgZXhjZXB0IGV4
Y2VwdGlvbnMuRXJyb3JJblJlc3BvbnNlRXhjZXB0aW9uOgorICAgICAgICAgICAgc2VsZi5sb2dn
ZXIuZXJyb3IoIkxvc3QgV2ViRHJpdmVyIGNvbm5lY3Rpb24iKQorICAgICAgICAgICAgcmV0dXJu
IFN0b3AKKworICAgICAgICBleGVjdXRvciA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXNlbGYu
X3J1bikKKyAgICAgICAgZXhlY3V0b3Iuc3RhcnQoKQorCisgICAgICAgIGZsYWcgPSBzZWxmLnJl
c3VsdF9mbGFnLndhaXQodGltZW91dCArIDIgKiBleHRyYV90aW1lb3V0KQorICAgICAgICBpZiBz
ZWxmLnJlc3VsdCBpcyBOb25lOgorICAgICAgICAgICAgYXNzZXJ0IG5vdCBmbGFnCisgICAgICAg
ICAgICBzZWxmLnJlc3VsdCA9IEZhbHNlLCAoIkVYVEVSTkFMLVRJTUVPVVQiLCBOb25lKQorCisg
ICAgICAgIHJldHVybiBzZWxmLnJlc3VsdAorCisgICAgZGVmIF9ydW4oc2VsZik6CisgICAgICAg
IHRyeToKKyAgICAgICAgICAgIHNlbGYucmVzdWx0ID0gVHJ1ZSwgc2VsZi5mdW5jKHNlbGYud2Vi
ZHJpdmVyLCBzZWxmLnVybCwgc2VsZi50aW1lb3V0KQorICAgICAgICBleGNlcHQgZXhjZXB0aW9u
cy5UaW1lb3V0RXhjZXB0aW9uOgorICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSBGYWxzZSwgKCJF
WFRFUk5BTC1USU1FT1VUIiwgTm9uZSkKKyAgICAgICAgZXhjZXB0IChzb2NrZXQudGltZW91dCwg
ZXhjZXB0aW9ucy5FcnJvckluUmVzcG9uc2VFeGNlcHRpb24pOgorICAgICAgICAgICAgc2VsZi5y
ZXN1bHQgPSBGYWxzZSwgKCJDUkFTSCIsIE5vbmUpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24g
YXMgZToKKyAgICAgICAgICAgIG1lc3NhZ2UgPSBnZXRhdHRyKGUsICJtZXNzYWdlIiwgIiIpCisg
ICAgICAgICAgICBpZiBtZXNzYWdlOgorICAgICAgICAgICAgICAgIG1lc3NhZ2UgKz0gIlxuIgor
ICAgICAgICAgICAgbWVzc2FnZSArPSB0cmFjZWJhY2suZm9ybWF0X2V4YyhlKQorICAgICAgICAg
ICAgc2VsZi5yZXN1bHQgPSBGYWxzZSwgKCJFUlJPUiIsIGUpCisgICAgICAgIGZpbmFsbHk6Cisg
ICAgICAgICAgICBzZWxmLnJlc3VsdF9mbGFnLnNldCgpCisKKworY2xhc3MgU2VsZW5pdW1UZXN0
aGFybmVzc0V4ZWN1dG9yKFRlc3RoYXJuZXNzRXhlY3V0b3IpOgorICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBicm93c2VyLCBzZXJ2ZXJfY29uZmlnLCB0aW1lb3V0X211bHRpcGxpZXI9MSwKKyAgICAg
ICAgICAgICAgICAgY2xvc2VfYWZ0ZXJfZG9uZT1UcnVlLCBjYXBhYmlsaXRpZXM9Tm9uZSwgZGVi
dWdfaW5mbz1Ob25lLAorICAgICAgICAgICAgICAgICAqKmt3YXJncyk6CisgICAgICAgICIiIlNl
bGVuaXVtLWJhc2VkIGV4ZWN1dG9yIGZvciB0ZXN0aGFybmVzcy5qcyB0ZXN0cyIiIgorICAgICAg
ICBUZXN0aGFybmVzc0V4ZWN1dG9yLl9faW5pdF9fKHNlbGYsIGJyb3dzZXIsIHNlcnZlcl9jb25m
aWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dF9tdWx0aXBs
aWVyPXRpbWVvdXRfbXVsdGlwbGllciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWJ1Z19pbmZvPWRlYnVnX2luZm8pCisgICAgICAgIHNlbGYucHJvdG9jb2wgPSBTZWxl
bml1bVByb3RvY29sKHNlbGYsIGJyb3dzZXIsIGNhcGFiaWxpdGllcykKKyAgICAgICAgd2l0aCBv
cGVuKG9zLnBhdGguam9pbihoZXJlLCAidGVzdGhhcm5lc3Nfd2ViZHJpdmVyLmpzIikpIGFzIGY6
CisgICAgICAgICAgICBzZWxmLnNjcmlwdCA9IGYucmVhZCgpCisgICAgICAgIHNlbGYuY2xvc2Vf
YWZ0ZXJfZG9uZSA9IGNsb3NlX2FmdGVyX2RvbmUKKyAgICAgICAgc2VsZi53aW5kb3dfaWQgPSBz
dHIodXVpZC51dWlkNCgpKQorCisgICAgZGVmIGlzX2FsaXZlKHNlbGYpOgorICAgICAgICByZXR1
cm4gc2VsZi5wcm90b2NvbC5pc19hbGl2ZSgpCisKKyAgICBkZWYgb25fZW52aXJvbm1lbnRfY2hh
bmdlKHNlbGYsIG5ld19lbnZpcm9ubWVudCk6CisgICAgICAgIGlmIG5ld19lbnZpcm9ubWVudFsi
cHJvdG9jb2wiXSAhPSBzZWxmLmxhc3RfZW52aXJvbm1lbnRbInByb3RvY29sIl06CisgICAgICAg
ICAgICBzZWxmLnByb3RvY29sLmxvYWRfcnVubmVyKG5ld19lbnZpcm9ubWVudFsicHJvdG9jb2wi
XSkKKworICAgIGRlZiBkb190ZXN0KHNlbGYsIHRlc3QpOgorICAgICAgICB1cmwgPSBzZWxmLnRl
c3RfdXJsKHRlc3QpCisKKyAgICAgICAgc3VjY2VzcywgZGF0YSA9IFNlbGVuaXVtUnVuKHNlbGYu
ZG9fdGVzdGhhcm5lc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxm
LnByb3RvY29sLndlYmRyaXZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3QudGltZW91dCAq
IHNlbGYudGltZW91dF9tdWx0aXBsaWVyKS5ydW4oKQorCisgICAgICAgIGlmIHN1Y2Nlc3M6Cisg
ICAgICAgICAgICByZXR1cm4gc2VsZi5jb252ZXJ0X3Jlc3VsdCh0ZXN0LCBkYXRhKQorCisgICAg
ICAgIHJldHVybiAodGVzdC5yZXN1bHRfY2xzKCpkYXRhKSwgW10pCisKKyAgICBkZWYgZG9fdGVz
dGhhcm5lc3Moc2VsZiwgd2ViZHJpdmVyLCB1cmwsIHRpbWVvdXQpOgorICAgICAgICByZXR1cm4g
d2ViZHJpdmVyLmV4ZWN1dGVfYXN5bmNfc2NyaXB0KAorICAgICAgICAgICAgc2VsZi5zY3JpcHQg
JSB7ImFic191cmwiOiB1cmwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAidXJsIjogc3Ry
aXBfc2VydmVyKHVybCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAid2luZG93X2lkIjog
c2VsZi53aW5kb3dfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAidGltZW91dF9tdWx0
aXBsaWVyIjogc2VsZi50aW1lb3V0X211bHRpcGxpZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAidGltZW91dCI6IHRpbWVvdXQgKiAxMDAwfSkKKworCitjbGFzcyBTZWxlbml1bVJlZlRl
c3RFeGVjdXRvcihSZWZUZXN0RXhlY3V0b3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm93
c2VyLCBzZXJ2ZXJfY29uZmlnLCB0aW1lb3V0X211bHRpcGxpZXI9MSwKKyAgICAgICAgICAgICAg
ICAgc2NyZWVuc2hvdF9jYWNoZT1Ob25lLCBjbG9zZV9hZnRlcl9kb25lPVRydWUsCisgICAgICAg
ICAgICAgICAgIGRlYnVnX2luZm89Tm9uZSwgY2FwYWJpbGl0aWVzPU5vbmUsICoqa3dhcmdzKToK
KyAgICAgICAgIiIiU2VsZW5pdW0gV2ViRHJpdmVyLWJhc2VkIGV4ZWN1dG9yIGZvciByZWZ0ZXN0
cyIiIgorICAgICAgICBSZWZUZXN0RXhlY3V0b3IuX19pbml0X18oc2VsZiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyb3dzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzZXJ2ZXJfY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2NyZWVuc2hvdF9jYWNoZT1zY3JlZW5zaG90X2NhY2hlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGltZW91dF9tdWx0aXBsaWVyPXRpbWVvdXRfbXVsdGlwbGllciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX2luZm89ZGVidWdfaW5mbykKKyAgICAg
ICAgc2VsZi5wcm90b2NvbCA9IFNlbGVuaXVtUHJvdG9jb2woc2VsZiwgYnJvd3NlciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwYWJpbGl0aWVzPWNhcGFiaWxp
dGllcykKKyAgICAgICAgc2VsZi5pbXBsZW1lbnRhdGlvbiA9IFJlZlRlc3RJbXBsZW1lbnRhdGlv
bihzZWxmKQorICAgICAgICBzZWxmLmNsb3NlX2FmdGVyX2RvbmUgPSBjbG9zZV9hZnRlcl9kb25l
CisgICAgICAgIHNlbGYuaGFzX3dpbmRvdyA9IEZhbHNlCisKKyAgICAgICAgd2l0aCBvcGVuKG9z
LnBhdGguam9pbihoZXJlLCAicmVmdGVzdC5qcyIpKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5z
Y3JpcHQgPSBmLnJlYWQoKQorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKGhlcmUsICJy
ZWZ0ZXN0LXdhaXRfd2ViZHJpdmVyLmpzIikpIGFzIGY6CisgICAgICAgICAgICBzZWxmLndhaXRf
c2NyaXB0ID0gZi5yZWFkKCkKKworICAgIGRlZiBpc19hbGl2ZShzZWxmKToKKyAgICAgICAgcmV0
dXJuIHNlbGYucHJvdG9jb2wuaXNfYWxpdmUoKQorCisgICAgZGVmIGRvX3Rlc3Qoc2VsZiwgdGVz
dCk6CisgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oIlRlc3QgcmVxdWlyZXMgT1MtbGV2ZWwgd2lu
ZG93IGZvY3VzIikKKworICAgICAgICBzZWxmLnByb3RvY29sLndlYmRyaXZlci5zZXRfd2luZG93
X3NpemUoNjAwLCA2MDApCisKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5pbXBsZW1lbnRhdGlvbi5y
dW5fdGVzdCh0ZXN0KQorCisgICAgICAgIHJldHVybiBzZWxmLmNvbnZlcnRfcmVzdWx0KHRlc3Qs
IHJlc3VsdCkKKworICAgIGRlZiBzY3JlZW5zaG90KHNlbGYsIHRlc3QsIHZpZXdwb3J0X3NpemUs
IGRwaSk6CisgICAgICAgICMgaHR0cHM6Ly9naXRodWIuY29tL3czYy93cHRydW5uZXIvaXNzdWVz
LzE2NgorICAgICAgICBhc3NlcnQgdmlld3BvcnRfc2l6ZSBpcyBOb25lCisgICAgICAgIGFzc2Vy
dCBkcGkgaXMgTm9uZQorCisgICAgICAgIHJldHVybiBTZWxlbml1bVJ1bihzZWxmLl9zY3JlZW5z
aG90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wcm90b2NvbC53ZWJkcml2ZXIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRlc3RfdXJsKHRlc3QpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGVzdC50aW1lb3V0KS5ydW4oKQorCisgICAgZGVmIF9zY3Jl
ZW5zaG90KHNlbGYsIHdlYmRyaXZlciwgdXJsLCB0aW1lb3V0KToKKyAgICAgICAgd2ViZHJpdmVy
LmdldCh1cmwpCisKKyAgICAgICAgd2ViZHJpdmVyLmV4ZWN1dGVfYXN5bmNfc2NyaXB0KHNlbGYu
d2FpdF9zY3JpcHQpCisKKyAgICAgICAgc2NyZWVuc2hvdCA9IHdlYmRyaXZlci5nZXRfc2NyZWVu
c2hvdF9hc19iYXNlNjQoKQorCisgICAgICAgICMgc3RyaXAgb2ZmIHRoZSBkYXRhOmltZy9wbmcs
IHBhcnQgb2YgdGhlIHVybAorICAgICAgICBpZiBzY3JlZW5zaG90LnN0YXJ0c3dpdGgoImRhdGE6
aW1hZ2UvcG5nO2Jhc2U2NCwiKToKKyAgICAgICAgICAgIHNjcmVlbnNob3QgPSBzY3JlZW5zaG90
LnNwbGl0KCIsIiwgMSlbMV0KKworICAgICAgICByZXR1cm4gc2NyZWVuc2hvdApkaWZmIC0tZ2l0
IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIv
ZXhlY3V0b3JzL2V4ZWN1dG9yc2Vydm8ucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mv
dG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9leGVjdXRvcnMvZXhlY3V0b3JzZXJ2by5weQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMjE2ZDY4N2ZjZGEKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dw
dHJ1bm5lci9leGVjdXRvcnMvZXhlY3V0b3JzZXJ2by5weQpAQCAtMCwwICsxLDM2OCBAQAoraW1w
b3J0IGJhc2U2NAoraW1wb3J0IGhhc2hsaWIKK2ltcG9ydCBodHRwbGliCitpbXBvcnQganNvbgor
aW1wb3J0IG9zCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdGhy
ZWFkaW5nCitpbXBvcnQgdHJhY2ViYWNrCitpbXBvcnQgdXJscGFyc2UKK2ltcG9ydCB1dWlkCitm
cm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZWZhdWx0ZGljdAorCitmcm9tIG1venByb2Nlc3MgaW1w
b3J0IFByb2Nlc3NIYW5kbGVyCisKK2Zyb20gLmJhc2UgaW1wb3J0IChFeGVjdXRvckV4Y2VwdGlv
biwKKyAgICAgICAgICAgICAgICAgICBQcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICBSZWZU
ZXN0SW1wbGVtZW50YXRpb24sCisgICAgICAgICAgICAgICAgICAgdGVzdGhhcm5lc3NfcmVzdWx0
X2NvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICByZWZ0ZXN0X3Jlc3VsdF9jb252ZXJ0ZXIs
CisgICAgICAgICAgICAgICAgICAgV2RzcGVjRXhlY3V0b3IpCitmcm9tIC5wcm9jZXNzIGltcG9y
dCBQcm9jZXNzVGVzdEV4ZWN1dG9yCitmcm9tIC4uYnJvd3NlcnMuYmFzZSBpbXBvcnQgYnJvd3Nl
cl9jb21tYW5kCitmcm9tIC4ud3B0dGVzdCBpbXBvcnQgV2RzcGVjUmVzdWx0LCBXZHNwZWNTdWJ0
ZXN0UmVzdWx0Citmcm9tIC4ud2ViZHJpdmVyX3NlcnZlciBpbXBvcnQgU2Vydm9Ecml2ZXJTZXJ2
ZXIKK2Zyb20gLmV4ZWN1dG9ybWFyaW9uZXR0ZSBpbXBvcnQgV2RzcGVjUnVuCisKK3B5dGVzdHJ1
bm5lciA9IE5vbmUKK3dlYmRyaXZlciA9IE5vbmUKKworZXh0cmFfdGltZW91dCA9IDUgIyBzZWNv
bmRzCisKK2hvc3RzX3RleHQgPSAiIiIxMjcuMC4wLjEgd2ViLXBsYXRmb3JtLnRlc3QKKzEyNy4w
LjAuMSB3d3cud2ViLXBsYXRmb3JtLnRlc3QKKzEyNy4wLjAuMSB3d3cxLndlYi1wbGF0Zm9ybS50
ZXN0CisxMjcuMC4wLjEgd3d3Mi53ZWItcGxhdGZvcm0udGVzdAorMTI3LjAuMC4xIHhuLS1uOGo2
ZHM1M2x3d2tycWh2MjhhLndlYi1wbGF0Zm9ybS50ZXN0CisxMjcuMC4wLjEgeG4tLWx2ZS02bGFk
LndlYi1wbGF0Zm9ybS50ZXN0CisiIiIKKworZGVmIG1ha2VfaG9zdHNfZmlsZSgpOgorICAgIGhv
c3RzX2ZkLCBob3N0c19wYXRoID0gdGVtcGZpbGUubWtzdGVtcCgpCisgICAgd2l0aCBvcy5mZG9w
ZW4oaG9zdHNfZmQsICJ3IikgYXMgZjoKKyAgICAgICAgZi53cml0ZShob3N0c190ZXh0KQorICAg
IHJldHVybiBob3N0c19wYXRoCisKKworY2xhc3MgU2Vydm9UZXN0aGFybmVzc0V4ZWN1dG9yKFBy
b2Nlc3NUZXN0RXhlY3V0b3IpOgorICAgIGNvbnZlcnRfcmVzdWx0ID0gdGVzdGhhcm5lc3NfcmVz
dWx0X2NvbnZlcnRlcgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb3dzZXIsIHNlcnZlcl9j
b25maWcsIHRpbWVvdXRfbXVsdGlwbGllcj0xLCBkZWJ1Z19pbmZvPU5vbmUsCisgICAgICAgICAg
ICAgICAgIHBhdXNlX2FmdGVyX3Rlc3Q9RmFsc2UsICoqa3dhcmdzKToKKyAgICAgICAgUHJvY2Vz
c1Rlc3RFeGVjdXRvci5fX2luaXRfXyhzZWxmLCBicm93c2VyLCBzZXJ2ZXJfY29uZmlnLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXRfbXVsdGlwbGllcj10aW1l
b3V0X211bHRpcGxpZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVi
dWdfaW5mbz1kZWJ1Z19pbmZvKQorICAgICAgICBzZWxmLnBhdXNlX2FmdGVyX3Rlc3QgPSBwYXVz
ZV9hZnRlcl90ZXN0CisgICAgICAgIHNlbGYucmVzdWx0X2RhdGEgPSBOb25lCisgICAgICAgIHNl
bGYucmVzdWx0X2ZsYWcgPSBOb25lCisgICAgICAgIHNlbGYucHJvdG9jb2wgPSBQcm90b2NvbChz
ZWxmLCBicm93c2VyKQorICAgICAgICBzZWxmLmhvc3RzX3BhdGggPSBtYWtlX2hvc3RzX2ZpbGUo
KQorCisgICAgZGVmIHRlYXJkb3duKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBv
cy51bmxpbmsoc2VsZi5ob3N0c19wYXRoKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAg
ICAgICAgIHBhc3MKKyAgICAgICAgUHJvY2Vzc1Rlc3RFeGVjdXRvci50ZWFyZG93bihzZWxmKQor
CisgICAgZGVmIGRvX3Rlc3Qoc2VsZiwgdGVzdCk6CisgICAgICAgIHNlbGYucmVzdWx0X2RhdGEg
PSBOb25lCisgICAgICAgIHNlbGYucmVzdWx0X2ZsYWcgPSB0aHJlYWRpbmcuRXZlbnQoKQorCisg
ICAgICAgIGFyZ3MgPSBbCisgICAgICAgICAgICAiLS1oYXJkLWZhaWwiLCAiLXUiLCAiU2Vydm8v
d3B0cnVubmVyIiwKKyAgICAgICAgICAgICItWiIsICJyZXBsYWNlLXN1cnJvZ2F0ZXMiLCAiLXoi
LCBzZWxmLnRlc3RfdXJsKHRlc3QpLAorICAgICAgICBdCisgICAgICAgIGZvciBzdHlsZXNoZWV0
IGluIHNlbGYuYnJvd3Nlci51c2VyX3N0eWxlc2hlZXRzOgorICAgICAgICAgICAgYXJncyArPSBb
Ii0tdXNlci1zdHlsZXNoZWV0Iiwgc3R5bGVzaGVldF0KKyAgICAgICAgZm9yIHByZWYsIHZhbHVl
IGluIHRlc3QuZW52aXJvbm1lbnQuZ2V0KCdwcmVmcycsIHt9KS5pdGVyaXRlbXMoKToKKyAgICAg
ICAgICAgIGFyZ3MgKz0gWyItLXByZWYiLCAiJXM9JXMiICUgKHByZWYsIHZhbHVlKV0KKyAgICAg
ICAgaWYgc2VsZi5icm93c2VyLmNhX2NlcnRpZmljYXRlX3BhdGg6CisgICAgICAgICAgICBhcmdz
ICs9IFsiLS1jZXJ0aWZpY2F0ZS1wYXRoIiwgc2VsZi5icm93c2VyLmNhX2NlcnRpZmljYXRlX3Bh
dGhdCisgICAgICAgIGFyZ3MgKz0gc2VsZi5icm93c2VyLmJpbmFyeV9hcmdzCisgICAgICAgIGRl
YnVnX2FyZ3MsIGNvbW1hbmQgPSBicm93c2VyX2NvbW1hbmQoc2VsZi5iaW5hcnksIGFyZ3MsIHNl
bGYuZGVidWdfaW5mbykKKworICAgICAgICBzZWxmLmNvbW1hbmQgPSBjb21tYW5kCisKKyAgICAg
ICAgaWYgc2VsZi5wYXVzZV9hZnRlcl90ZXN0OgorICAgICAgICAgICAgc2VsZi5jb21tYW5kLnJl
bW92ZSgiLXoiKQorCisgICAgICAgIHNlbGYuY29tbWFuZCA9IGRlYnVnX2FyZ3MgKyBzZWxmLmNv
bW1hbmQKKworICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICBlbnZbIkhP
U1RfRklMRSJdID0gc2VsZi5ob3N0c19wYXRoCisgICAgICAgIGVudlsiUlVTVF9CQUNLVFJBQ0Ui
XSA9ICIxIgorCisKKyAgICAgICAgaWYgbm90IHNlbGYuaW50ZXJhY3RpdmU6CisgICAgICAgICAg
ICBzZWxmLnByb2MgPSBQcm9jZXNzSGFuZGxlcihzZWxmLmNvbW1hbmQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzT3V0cHV0TGluZT1bc2VsZi5vbl9vdXRw
dXRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25GaW5pc2g9c2Vs
Zi5vbl9maW5pc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnY9
ZW52LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVPdXRwdXQ9
RmFsc2UpCisgICAgICAgICAgICBzZWxmLnByb2MucnVuKCkKKyAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgIHNlbGYucHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oc2VsZi5jb21tYW5kLCBlbnY9ZW52
KQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRpbWVvdXQgPSB0ZXN0LnRpbWVvdXQgKiBz
ZWxmLnRpbWVvdXRfbXVsdGlwbGllcgorCisgICAgICAgICAgICAjIE5vdyB3YWl0IHRvIGdldCB0
aGUgb3V0cHV0IHdlIGV4cGVjdCwgb3IgdW50aWwgd2UgcmVhY2ggdGhlIHRpbWVvdXQKKyAgICAg
ICAgICAgIGlmIG5vdCBzZWxmLmludGVyYWN0aXZlIGFuZCBub3Qgc2VsZi5wYXVzZV9hZnRlcl90
ZXN0OgorICAgICAgICAgICAgICAgIHdhaXRfdGltZW91dCA9IHRpbWVvdXQgKyA1CisgICAgICAg
ICAgICAgICAgc2VsZi5yZXN1bHRfZmxhZy53YWl0KHdhaXRfdGltZW91dCkKKyAgICAgICAgICAg
IGVsc2U6CisgICAgICAgICAgICAgICAgd2FpdF90aW1lb3V0ID0gTm9uZQorICAgICAgICAgICAg
ICAgIHNlbGYucHJvYy53YWl0KCkKKworICAgICAgICAgICAgcHJvY19pc19ydW5uaW5nID0gVHJ1
ZQorCisgICAgICAgICAgICBpZiBzZWxmLnJlc3VsdF9mbGFnLmlzX3NldCgpOgorICAgICAgICAg
ICAgICAgIGlmIHNlbGYucmVzdWx0X2RhdGEgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IHNlbGYuY29udmVydF9yZXN1bHQodGVzdCwgc2VsZi5yZXN1bHRfZGF0YSkK
KyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnByb2Mud2Fp
dCgpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICh0ZXN0LnJlc3VsdF9jbHMoIkNSQVNI
IiwgTm9uZSksIFtdKQorICAgICAgICAgICAgICAgICAgICBwcm9jX2lzX3J1bm5pbmcgPSBGYWxz
ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXN1bHQgPSAodGVzdC5yZXN1
bHRfY2xzKCJUSU1FT1VUIiwgTm9uZSksIFtdKQorCisKKyAgICAgICAgICAgIGlmIHByb2NfaXNf
cnVubmluZzoKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnBhdXNlX2FmdGVyX3Rlc3Q6CisgICAg
ICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oIlBhdXNpbmcgdW50aWwgdGhlIGJyb3dz
ZXIgZXhpdHMiKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnByb2Mud2FpdCgpCisgICAgICAg
ICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5wcm9jLmtpbGwoKQorICAg
ICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICBzZWxmLnByb2Mua2ls
bCgpCisgICAgICAgICAgICByYWlzZQorCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRl
ZiBvbl9vdXRwdXQoc2VsZiwgbGluZSk6CisgICAgICAgIHByZWZpeCA9ICJBTEVSVDogUkVTVUxU
OiAiCisgICAgICAgIGxpbmUgPSBsaW5lLmRlY29kZSgidXRmOCIsICJyZXBsYWNlIikKKyAgICAg
ICAgaWYgbGluZS5zdGFydHN3aXRoKHByZWZpeCk6CisgICAgICAgICAgICBzZWxmLnJlc3VsdF9k
YXRhID0ganNvbi5sb2FkcyhsaW5lW2xlbihwcmVmaXgpOl0pCisgICAgICAgICAgICBzZWxmLnJl
c3VsdF9mbGFnLnNldCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBzZWxmLmludGVy
YWN0aXZlOgorICAgICAgICAgICAgICAgIHByaW50IGxpbmUKKyAgICAgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIucHJvY2Vzc19vdXRwdXQoc2VsZi5wcm9jLnBpZCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIi5qb2luKHNlbGYuY29tbWFu
ZCkpCisKKyAgICBkZWYgb25fZmluaXNoKHNlbGYpOgorICAgICAgICBzZWxmLnJlc3VsdF9mbGFn
LnNldCgpCisKKworY2xhc3MgVGVtcEZpbGVuYW1lKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIGRpcmVjdG9yeSk6CisgICAgICAgIHNlbGYuZGlyZWN0b3J5ID0gZGlyZWN0b3J5Cisg
ICAgICAgIHNlbGYucGF0aCA9IE5vbmUKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAg
ICAgIHNlbGYucGF0aCA9IG9zLnBhdGguam9pbihzZWxmLmRpcmVjdG9yeSwgc3RyKHV1aWQudXVp
ZDQoKSkpCisgICAgICAgIHJldHVybiBzZWxmLnBhdGgKKworICAgIGRlZiBfX2V4aXRfXyhzZWxm
LCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy51bmxpbmso
c2VsZi5wYXRoKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKwor
CitjbGFzcyBTZXJ2b1JlZlRlc3RFeGVjdXRvcihQcm9jZXNzVGVzdEV4ZWN1dG9yKToKKyAgICBj
b252ZXJ0X3Jlc3VsdCA9IHJlZnRlc3RfcmVzdWx0X2NvbnZlcnRlcgorCisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIGJyb3dzZXIsIHNlcnZlcl9jb25maWcsIGJpbmFyeT1Ob25lLCB0aW1lb3V0X211
bHRpcGxpZXI9MSwKKyAgICAgICAgICAgICAgICAgc2NyZWVuc2hvdF9jYWNoZT1Ob25lLCBkZWJ1
Z19pbmZvPU5vbmUsIHBhdXNlX2FmdGVyX3Rlc3Q9RmFsc2UsCisgICAgICAgICAgICAgICAgICoq
a3dhcmdzKToKKyAgICAgICAgZG9fZGVsYXllZF9pbXBvcnRzKCkKKyAgICAgICAgUHJvY2Vzc1Rl
c3RFeGVjdXRvci5fX2luaXRfXyhzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyb3dzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vy
dmVyX2NvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0
X211bHRpcGxpZXI9dGltZW91dF9tdWx0aXBsaWVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlYnVnX2luZm89ZGVidWdfaW5mbykKKworICAgICAgICBzZWxmLnByb3Rv
Y29sID0gUHJvdG9jb2woc2VsZiwgYnJvd3NlcikKKyAgICAgICAgc2VsZi5zY3JlZW5zaG90X2Nh
Y2hlID0gc2NyZWVuc2hvdF9jYWNoZQorICAgICAgICBzZWxmLmltcGxlbWVudGF0aW9uID0gUmVm
VGVzdEltcGxlbWVudGF0aW9uKHNlbGYpCisgICAgICAgIHNlbGYudGVtcGRpciA9IHRlbXBmaWxl
Lm1rZHRlbXAoKQorICAgICAgICBzZWxmLmhvc3RzX3BhdGggPSBtYWtlX2hvc3RzX2ZpbGUoKQor
CisgICAgZGVmIHRlYXJkb3duKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy51
bmxpbmsoc2VsZi5ob3N0c19wYXRoKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAg
ICAgIHBhc3MKKyAgICAgICAgb3Mucm1kaXIoc2VsZi50ZW1wZGlyKQorICAgICAgICBQcm9jZXNz
VGVzdEV4ZWN1dG9yLnRlYXJkb3duKHNlbGYpCisKKyAgICBkZWYgc2NyZWVuc2hvdChzZWxmLCB0
ZXN0LCB2aWV3cG9ydF9zaXplLCBkcGkpOgorICAgICAgICBmdWxsX3VybCA9IHNlbGYudGVzdF91
cmwodGVzdCkKKworICAgICAgICB3aXRoIFRlbXBGaWxlbmFtZShzZWxmLnRlbXBkaXIpIGFzIG91
dHB1dF9wYXRoOgorICAgICAgICAgICAgZGVidWdfYXJncywgY29tbWFuZCA9IGJyb3dzZXJfY29t
bWFuZCgKKyAgICAgICAgICAgICAgICBzZWxmLmJpbmFyeSwKKyAgICAgICAgICAgICAgICBbCisg
ICAgICAgICAgICAgICAgICAgICItLWhhcmQtZmFpbCIsICItLWV4aXQiLAorICAgICAgICAgICAg
ICAgICAgICAiLXUiLCAiU2Vydm8vd3B0cnVubmVyIiwKKyAgICAgICAgICAgICAgICAgICAgIi1a
IiwgImRpc2FibGUtdGV4dC1hYSxsb2FkLXdlYmZvbnRzLXN5bmNocm9ub3VzbHkscmVwbGFjZS1z
dXJyb2dhdGVzIiwKKyAgICAgICAgICAgICAgICAgICAgIi0tb3V0cHV0PSVzIiAlIG91dHB1dF9w
YXRoLCBmdWxsX3VybAorICAgICAgICAgICAgICAgIF0gKyBzZWxmLmJyb3dzZXIuYmluYXJ5X2Fy
Z3MsCisgICAgICAgICAgICAgICAgc2VsZi5kZWJ1Z19pbmZvKQorCisgICAgICAgICAgICBmb3Ig
c3R5bGVzaGVldCBpbiBzZWxmLmJyb3dzZXIudXNlcl9zdHlsZXNoZWV0czoKKyAgICAgICAgICAg
ICAgICBjb21tYW5kICs9IFsiLS11c2VyLXN0eWxlc2hlZXQiLCBzdHlsZXNoZWV0XQorCisgICAg
ICAgICAgICBmb3IgcHJlZiwgdmFsdWUgaW4gdGVzdC5lbnZpcm9ubWVudC5nZXQoJ3ByZWZzJywg
e30pLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgIGNvbW1hbmQgKz0gWyItLXByZWYiLCAi
JXM9JXMiICUgKHByZWYsIHZhbHVlKV0KKworICAgICAgICAgICAgY29tbWFuZCArPSBbIi0tcmVz
b2x1dGlvbiIsIHZpZXdwb3J0X3NpemUgb3IgIjgwMHg2MDAiXQorCisgICAgICAgICAgICBpZiBz
ZWxmLmJyb3dzZXIuY2FfY2VydGlmaWNhdGVfcGF0aDoKKyAgICAgICAgICAgICAgICBjb21tYW5k
ICs9IFsiLS1jZXJ0aWZpY2F0ZS1wYXRoIiwgc2VsZi5icm93c2VyLmNhX2NlcnRpZmljYXRlX3Bh
dGhdCisKKyAgICAgICAgICAgIGlmIGRwaToKKyAgICAgICAgICAgICAgICBjb21tYW5kICs9IFsi
LS1kZXZpY2UtcGl4ZWwtcmF0aW8iLCBkcGldCisKKyAgICAgICAgICAgICMgUnVuIHJlZiB0ZXN0
cyBpbiBoZWFkbGVzcyBtb2RlCisgICAgICAgICAgICBjb21tYW5kICs9IFsiLXoiXQorCisgICAg
ICAgICAgICBzZWxmLmNvbW1hbmQgPSBkZWJ1Z19hcmdzICsgY29tbWFuZAorCisgICAgICAgICAg
ICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICAgICAgZW52WyJIT1NUX0ZJTEUiXSA9
IHNlbGYuaG9zdHNfcGF0aAorICAgICAgICAgICAgZW52WyJSVVNUX0JBQ0tUUkFDRSJdID0gIjEi
CisKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmludGVyYWN0aXZlOgorICAgICAgICAgICAgICAg
IHNlbGYucHJvYyA9IFByb2Nlc3NIYW5kbGVyKHNlbGYuY29tbWFuZCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzT3V0cHV0TGluZT1bc2VsZi5vbl9v
dXRwdXRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudj1l
bnYpCisKKworICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5w
cm9jLnJ1bigpCisgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSB0ZXN0LnRpbWVvdXQgKiBz
ZWxmLnRpbWVvdXRfbXVsdGlwbGllciArIDUKKyAgICAgICAgICAgICAgICAgICAgcnYgPSBzZWxm
LnByb2Mud2FpdCh0aW1lb3V0PXRpbWVvdXQpCisgICAgICAgICAgICAgICAgZXhjZXB0IEtleWJv
YXJkSW50ZXJydXB0OgorICAgICAgICAgICAgICAgICAgICBzZWxmLnByb2Mua2lsbCgpCisgICAg
ICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg
IHNlbGYucHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oc2VsZi5jb21tYW5kLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52PWVudikKKyAgICAgICAgICAgICAg
ICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHJ2ID0gc2VsZi5wcm9jLndhaXQoKQorICAgICAg
ICAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgICAgICAgICAg
c2VsZi5wcm9jLmtpbGwoKQorICAgICAgICAgICAgICAgICAgICByYWlzZQorCisgICAgICAgICAg
ICBpZiBydiBpcyBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYucHJvYy5raWxsKCkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gRmFsc2UsICgiRVhURVJOQUwtVElNRU9VVCIsIE5vbmUpCisKKyAg
ICAgICAgICAgIGlmIHJ2ICE9IDAgb3Igbm90IG9zLnBhdGguZXhpc3RzKG91dHB1dF9wYXRoKToK
KyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UsICgiQ1JBU0giLCBOb25lKQorCisgICAgICAg
ICAgICB3aXRoIG9wZW4ob3V0cHV0X3BhdGgpIGFzIGY6CisgICAgICAgICAgICAgICAgIyBNaWdo
dCBuZWVkIHRvIHN0cmlwIHZhcmlhYmxlIGhlYWRlcnMgb3Igc29tZXRoaW5nIGhlcmUKKyAgICAg
ICAgICAgICAgICBkYXRhID0gZi5yZWFkKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZSwg
YmFzZTY0LmI2NGVuY29kZShkYXRhKQorCisgICAgZGVmIGRvX3Rlc3Qoc2VsZiwgdGVzdCk6Cisg
ICAgICAgIHJlc3VsdCA9IHNlbGYuaW1wbGVtZW50YXRpb24ucnVuX3Rlc3QodGVzdCkKKworICAg
ICAgICByZXR1cm4gc2VsZi5jb252ZXJ0X3Jlc3VsdCh0ZXN0LCByZXN1bHQpCisKKyAgICBkZWYg
b25fb3V0cHV0KHNlbGYsIGxpbmUpOgorICAgICAgICBsaW5lID0gbGluZS5kZWNvZGUoInV0Zjgi
LCAicmVwbGFjZSIpCisgICAgICAgIGlmIHNlbGYuaW50ZXJhY3RpdmU6CisgICAgICAgICAgICBw
cmludCBsaW5lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmxvZ2dlci5wcm9jZXNz
X291dHB1dChzZWxmLnByb2MucGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIi5q
b2luKHNlbGYuY29tbWFuZCkpCisKK2NsYXNzIFNlcnZvV2RzcGVjUHJvdG9jb2woUHJvdG9jb2wp
OgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleGVjdXRvciwgYnJvd3Nlcik6CisgICAgICAgIHNl
bGYuZG9fZGVsYXllZF9pbXBvcnRzKCkKKyAgICAgICAgUHJvdG9jb2wuX19pbml0X18oc2VsZiwg
ZXhlY3V0b3IsIGJyb3dzZXIpCisgICAgICAgIHNlbGYuc2Vzc2lvbiA9IE5vbmUKKyAgICAgICAg
c2VsZi5zZXJ2ZXIgPSBOb25lCisKKyAgICBkZWYgc2V0dXAoc2VsZiwgcnVubmVyKToKKyAgICAg
ICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5zZXJ2ZXIgPSBTZXJ2b0RyaXZlclNlcnZlcihzZWxm
LmxvZ2dlciwgYmluYXJ5PXNlbGYuYnJvd3Nlci5iaW5hcnksIGJpbmFyeV9hcmdzPXNlbGYuYnJv
d3Nlci5iaW5hcnlfYXJncykKKyAgICAgICAgICAgIHNlbGYuc2VydmVyLnN0YXJ0KGJsb2NrPUZh
bHNlKQorICAgICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygKKyAgICAgICAgICAgICAgICAiV2Vi
RHJpdmVyIEhUVFAgc2VydmVyIGxpc3RlbmluZyBhdCAlcyIgJSBzZWxmLnNlcnZlci51cmwpCisK
KyAgICAgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oCisgICAgICAgICAgICAgICAgIkVzdGFibGlz
aGluZyBuZXcgV2ViRHJpdmVyIHNlc3Npb24gd2l0aCAlcyIgJSBzZWxmLnNlcnZlci51cmwpCisg
ICAgICAgICAgICBzZWxmLnNlc3Npb24gPSB3ZWJkcml2ZXIuU2Vzc2lvbigKKyAgICAgICAgICAg
ICAgICBzZWxmLnNlcnZlci5ob3N0LCBzZWxmLnNlcnZlci5wb3J0LCBzZWxmLnNlcnZlci5iYXNl
X3BhdGgpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICBzZWxmLmxvZ2dl
ci5lcnJvcih0cmFjZWJhY2suZm9ybWF0X2V4YygpKQorICAgICAgICAgICAgc2VsZi5leGVjdXRv
ci5ydW5uZXIuc2VuZF9tZXNzYWdlKCJpbml0X2ZhaWxlZCIpCisgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICBzZWxmLmV4ZWN1dG9yLnJ1bm5lci5zZW5kX21lc3NhZ2UoImluaXRfc3VjY2VlZGVk
IikKKworICAgIGRlZiB0ZWFyZG93bihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5zZXJ2ZXIgaXMg
bm90IE5vbmU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5zZXNz
aW9uLnNlc3Npb25faWQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuc2Vz
c2lvbi5lbmQoKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAg
ICBwYXNzCisgICAgICAgICAgICBpZiBzZWxmLnNlcnZlci5pc19hbGl2ZToKKyAgICAgICAgICAg
ICAgICBzZWxmLnNlcnZlci5zdG9wKCkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBpc19hbGl2
ZShzZWxmKToKKyAgICAgICAgY29ubiA9IGh0dHBsaWIuSFRUUENvbm5lY3Rpb24oc2VsZi5zZXJ2
ZXIuaG9zdCwgc2VsZi5zZXJ2ZXIucG9ydCkKKyAgICAgICAgY29ubi5yZXF1ZXN0KCJIRUFEIiwg
c2VsZi5zZXJ2ZXIuYmFzZV9wYXRoICsgImludmFsaWQiKQorICAgICAgICByZXMgPSBjb25uLmdl
dHJlc3BvbnNlKCkKKyAgICAgICAgcmV0dXJuIHJlcy5zdGF0dXMgPT0gNDA0CisKKyAgICBkZWYg
ZG9fZGVsYXllZF9pbXBvcnRzKHNlbGYpOgorICAgICAgICBnbG9iYWwgcHl0ZXN0cnVubmVyLCB3
ZWJkcml2ZXIKKyAgICAgICAgZnJvbSAuIGltcG9ydCBweXRlc3RydW5uZXIKKyAgICAgICAgaW1w
b3J0IHdlYmRyaXZlcgorCisKK2NsYXNzIFNlcnZvV2RzcGVjRXhlY3V0b3IoV2RzcGVjRXhlY3V0
b3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm93c2VyLCBzZXJ2ZXJfY29uZmlnLAorICAg
ICAgICAgICAgICAgICB0aW1lb3V0X211bHRpcGxpZXI9MSwgY2xvc2VfYWZ0ZXJfZG9uZT1UcnVl
LCBkZWJ1Z19pbmZvPU5vbmUsCisgICAgICAgICAgICAgICAgICoqa3dhcmdzKToKKyAgICAgICAg
V2RzcGVjRXhlY3V0b3IuX19pbml0X18oc2VsZiwgYnJvd3Nlciwgc2VydmVyX2NvbmZpZywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dF9tdWx0aXBsaWVyPXRpbWVvdXRf
bXVsdGlwbGllciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdfaW5mbz1k
ZWJ1Z19pbmZvKQorICAgICAgICBzZWxmLnByb3RvY29sID0gU2Vydm9XZHNwZWNQcm90b2NvbChz
ZWxmLCBicm93c2VyKQorCisgICAgZGVmIGlzX2FsaXZlKHNlbGYpOgorICAgICAgICByZXR1cm4g
c2VsZi5wcm90b2NvbC5pc19hbGl2ZQorCisgICAgZGVmIG9uX2Vudmlyb25tZW50X2NoYW5nZShz
ZWxmLCBuZXdfZW52aXJvbm1lbnQpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgZG9fdGVzdChz
ZWxmLCB0ZXN0KToKKyAgICAgICAgdGltZW91dCA9IHRlc3QudGltZW91dCAqIHNlbGYudGltZW91
dF9tdWx0aXBsaWVyICsgZXh0cmFfdGltZW91dAorCisgICAgICAgIHN1Y2Nlc3MsIGRhdGEgPSBX
ZHNwZWNSdW4oc2VsZi5kb193ZHNwZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZi5wcm90b2NvbC5zZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRlc3QucGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0
KS5ydW4oKQorCisgICAgICAgIGlmIHN1Y2Nlc3M6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5j
b252ZXJ0X3Jlc3VsdCh0ZXN0LCBkYXRhKQorCisgICAgICAgIHJldHVybiAodGVzdC5yZXN1bHRf
Y2xzKCpkYXRhKSwgW10pCisKKyAgICBkZWYgZG9fd2RzcGVjKHNlbGYsIHNlc3Npb24sIHBhdGgs
IHRpbWVvdXQpOgorICAgICAgICBoYXJuZXNzX3Jlc3VsdCA9ICgiT0siLCBOb25lKQorICAgICAg
ICBzdWJ0ZXN0X3Jlc3VsdHMgPSBweXRlc3RydW5uZXIucnVuKHBhdGgsIHNlc3Npb24sIHRpbWVv
dXQ9dGltZW91dCkKKyAgICAgICAgcmV0dXJuIChoYXJuZXNzX3Jlc3VsdCwgc3VidGVzdF9yZXN1
bHRzKQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1
bm5lci93cHRydW5uZXIvZXhlY3V0b3JzL2V4ZWN1dG9yc2Vydm9kcml2ZXIucHkgYi9XZWJEcml2
ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9leGVjdXRvcnMv
ZXhlY3V0b3JzZXJ2b2RyaXZlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uYWYwOWRhNmYxNzgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBv
cnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9leGVjdXRvcnMvZXhlY3V0b3JzZXJ2
b2RyaXZlci5weQpAQCAtMCwwICsxLDI1OSBAQAoraW1wb3J0IGpzb24KK2ltcG9ydCBvcworaW1w
b3J0IHNvY2tldAoraW1wb3J0IHRocmVhZGluZworaW1wb3J0IHRpbWUKK2ltcG9ydCB0cmFjZWJh
Y2sKKworZnJvbSAuYmFzZSBpbXBvcnQgKFByb3RvY29sLAorICAgICAgICAgICAgICAgICAgIFJl
ZlRlc3RFeGVjdXRvciwKKyAgICAgICAgICAgICAgICAgICBSZWZUZXN0SW1wbGVtZW50YXRpb24s
CisgICAgICAgICAgICAgICAgICAgVGVzdGhhcm5lc3NFeGVjdXRvciwKKyAgICAgICAgICAgICAg
ICAgICBzdHJpcF9zZXJ2ZXIpCitmcm9tIC4udGVzdHJ1bm5lciBpbXBvcnQgU3RvcAorCit3ZWJk
cml2ZXIgPSBOb25lCisKK2hlcmUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5zcGxpdChfX2ZpbGVf
XylbMF0pCisKK2V4dHJhX3RpbWVvdXQgPSA1CisKKworZGVmIGRvX2RlbGF5ZWRfaW1wb3J0cygp
OgorICAgIGdsb2JhbCB3ZWJkcml2ZXIKKyAgICBpbXBvcnQgd2ViZHJpdmVyCisKKworY2xhc3Mg
U2Vydm9XZWJEcml2ZXJQcm90b2NvbChQcm90b2NvbCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYs
IGV4ZWN1dG9yLCBicm93c2VyLCBjYXBhYmlsaXRpZXMsICoqa3dhcmdzKToKKyAgICAgICAgZG9f
ZGVsYXllZF9pbXBvcnRzKCkKKyAgICAgICAgUHJvdG9jb2wuX19pbml0X18oc2VsZiwgZXhlY3V0
b3IsIGJyb3dzZXIpCisgICAgICAgIHNlbGYuY2FwYWJpbGl0aWVzID0gY2FwYWJpbGl0aWVzCisg
ICAgICAgIHNlbGYuaG9zdCA9IGJyb3dzZXIud2ViZHJpdmVyX2hvc3QKKyAgICAgICAgc2VsZi5w
b3J0ID0gYnJvd3Nlci53ZWJkcml2ZXJfcG9ydAorICAgICAgICBzZWxmLnNlc3Npb24gPSBOb25l
CisKKyAgICBkZWYgc2V0dXAoc2VsZiwgcnVubmVyKToKKyAgICAgICAgIiIiQ29ubmVjdCB0byBi
cm93c2VyIHZpYSBXZWJEcml2ZXIuIiIiCisgICAgICAgIHNlbGYucnVubmVyID0gcnVubmVyCisK
KyAgICAgICAgdXJsID0gImh0dHA6Ly8lczolZCIgJSAoc2VsZi5ob3N0LCBzZWxmLnBvcnQpCisg
ICAgICAgIHNlc3Npb25fc3RhcnRlZCA9IEZhbHNlCisgICAgICAgIHRyeToKKyAgICAgICAgICAg
IHNlbGYuc2Vzc2lvbiA9IHdlYmRyaXZlci5TZXNzaW9uKHNlbGYuaG9zdCwgc2VsZi5wb3J0LAor
ICAgICAgICAgICAgICAgIGV4dGVuc2lvbj13ZWJkcml2ZXIuc2Vydm8uU2Vydm9Db21tYW5kRXh0
ZW5zaW9ucykKKyAgICAgICAgICAgIHNlbGYuc2Vzc2lvbi5zdGFydCgpCisgICAgICAgIGV4Y2Vw
dDoKKyAgICAgICAgICAgIHNlbGYubG9nZ2VyLndhcm5pbmcoCisgICAgICAgICAgICAgICAgIkNv
bm5lY3Rpbmcgd2l0aCBXZWJEcml2ZXIgZmFpbGVkOlxuJXMiICUgdHJhY2ViYWNrLmZvcm1hdF9l
eGMoKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJzZXNz
aW9uIHN0YXJ0ZWQiKQorICAgICAgICAgICAgc2Vzc2lvbl9zdGFydGVkID0gVHJ1ZQorCisgICAg
ICAgIGlmIG5vdCBzZXNzaW9uX3N0YXJ0ZWQ6CisgICAgICAgICAgICBzZWxmLmxvZ2dlci53YXJu
aW5nKCJGYWlsZWQgdG8gY29ubmVjdCB2aWEgV2ViRHJpdmVyIikKKyAgICAgICAgICAgIHNlbGYu
ZXhlY3V0b3IucnVubmVyLnNlbmRfbWVzc2FnZSgiaW5pdF9mYWlsZWQiKQorICAgICAgICBlbHNl
OgorICAgICAgICAgICAgc2VsZi5leGVjdXRvci5ydW5uZXIuc2VuZF9tZXNzYWdlKCJpbml0X3N1
Y2NlZWRlZCIpCisKKyAgICBkZWYgdGVhcmRvd24oc2VsZik6CisgICAgICAgIHNlbGYubG9nZ2Vy
LmRlYnVnKCJIYW5naW5nIHVwIG9uIFdlYkRyaXZlciBzZXNzaW9uIikKKyAgICAgICAgdHJ5Ogor
ICAgICAgICAgICAgc2VsZi5zZXNzaW9uLmVuZCgpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAg
ICAgIHBhc3MKKworICAgIGRlZiBpc19hbGl2ZShzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgIyBHZXQgYSBzaW1wbGUgcHJvcGVydHkgb3ZlciB0aGUgY29ubmVjdGlvbgorICAgICAg
ICAgICAgc2VsZi5zZXNzaW9uLndpbmRvd19oYW5kbGUKKyAgICAgICAgIyBUT0RPIHdoYXQgZXhj
ZXB0aW9uPworICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgcmV0dXJuIEZh
bHNlCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgYWZ0ZXJfY29ubmVjdChzZWxmKToK
KyAgICAgICAgcGFzcworCisgICAgZGVmIHdhaXQoc2VsZik6CisgICAgICAgIHdoaWxlIFRydWU6
CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5zZXNzaW9uLmV4ZWN1dGVf
YXN5bmNfc2NyaXB0KCIiKQorICAgICAgICAgICAgZXhjZXB0IHdlYmRyaXZlci5UaW1lb3V0RXhj
ZXB0aW9uOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGV4Y2VwdCAoc29ja2V0
LnRpbWVvdXQsIElPRXJyb3IpOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBl
eGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIuZXJyb3Io
dHJhY2ViYWNrLmZvcm1hdF9leGMoZSkpCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgIGRl
ZiBvbl9lbnZpcm9ubWVudF9jaGFuZ2Uoc2VsZiwgb2xkX2Vudmlyb25tZW50LCBuZXdfZW52aXJv
bm1lbnQpOgorICAgICAgICAjVW5zZXQgYWxsIHRoZSBvbGQgcHJlZnMKKyAgICAgICAgc2VsZi5z
ZXNzaW9uLmV4dGVuc2lvbi5yZXNldF9wcmVmcygqb2xkX2Vudmlyb25tZW50LmdldCgicHJlZnMi
LCB7fSkua2V5cygpKQorICAgICAgICBzZWxmLnNlc3Npb24uZXh0ZW5zaW9uLnNldF9wcmVmcyhu
ZXdfZW52aXJvbm1lbnQuZ2V0KCJwcmVmcyIsIHt9KSkKKworCitjbGFzcyBTZXJ2b1dlYkRyaXZl
clJ1bihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmdW5jLCBzZXNzaW9uLCB1cmws
IHRpbWVvdXQsIGN1cnJlbnRfdGltZW91dD1Ob25lKToKKyAgICAgICAgc2VsZi5mdW5jID0gZnVu
YworICAgICAgICBzZWxmLnJlc3VsdCA9IE5vbmUKKyAgICAgICAgc2VsZi5zZXNzaW9uID0gc2Vz
c2lvbgorICAgICAgICBzZWxmLnVybCA9IHVybAorICAgICAgICBzZWxmLnRpbWVvdXQgPSB0aW1l
b3V0CisgICAgICAgIHNlbGYucmVzdWx0X2ZsYWcgPSB0aHJlYWRpbmcuRXZlbnQoKQorCisgICAg
ZGVmIHJ1bihzZWxmKToKKyAgICAgICAgZXhlY3V0b3IgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdl
dD1zZWxmLl9ydW4pCisgICAgICAgIGV4ZWN1dG9yLnN0YXJ0KCkKKworICAgICAgICBmbGFnID0g
c2VsZi5yZXN1bHRfZmxhZy53YWl0KHNlbGYudGltZW91dCArIGV4dHJhX3RpbWVvdXQpCisgICAg
ICAgIGlmIHNlbGYucmVzdWx0IGlzIE5vbmU6CisgICAgICAgICAgICBhc3NlcnQgbm90IGZsYWcK
KyAgICAgICAgICAgIHNlbGYucmVzdWx0ID0gRmFsc2UsICgiRVhURVJOQUwtVElNRU9VVCIsIE5v
bmUpCisKKyAgICAgICAgcmV0dXJuIHNlbGYucmVzdWx0CisKKyAgICBkZWYgX3J1bihzZWxmKToK
KyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSBUcnVlLCBzZWxmLmZ1bmMo
c2VsZi5zZXNzaW9uLCBzZWxmLnVybCwgc2VsZi50aW1lb3V0KQorICAgICAgICBleGNlcHQgd2Vi
ZHJpdmVyLlRpbWVvdXRFeGNlcHRpb246CisgICAgICAgICAgICBzZWxmLnJlc3VsdCA9IEZhbHNl
LCAoIkVYVEVSTkFMLVRJTUVPVVQiLCBOb25lKQorICAgICAgICBleGNlcHQgKHNvY2tldC50aW1l
b3V0LCBJT0Vycm9yKToKKyAgICAgICAgICAgIHNlbGYucmVzdWx0ID0gRmFsc2UsICgiQ1JBU0gi
LCBOb25lKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBtZXNz
YWdlID0gZ2V0YXR0cihlLCAibWVzc2FnZSIsICIiKQorICAgICAgICAgICAgaWYgbWVzc2FnZToK
KyAgICAgICAgICAgICAgICBtZXNzYWdlICs9ICJcbiIKKyAgICAgICAgICAgIG1lc3NhZ2UgKz0g
dHJhY2ViYWNrLmZvcm1hdF9leGMoZSkKKyAgICAgICAgICAgIHNlbGYucmVzdWx0ID0gRmFsc2Us
ICgiRVJST1IiLCBlKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5yZXN1bHRf
ZmxhZy5zZXQoKQorCisKK2RlZiB0aW1lb3V0X2Z1bmModGltZW91dCk6CisgICAgaWYgdGltZW91
dDoKKyAgICAgICAgdDAgPSB0aW1lLnRpbWUoKQorICAgICAgICByZXR1cm4gbGFtYmRhOiB0aW1l
LnRpbWUoKSAtIHQwID4gdGltZW91dCArIGV4dHJhX3RpbWVvdXQKKyAgICBlbHNlOgorICAgICAg
ICByZXR1cm4gbGFtYmRhOiBGYWxzZQorCisKK2NsYXNzIFNlcnZvV2ViRHJpdmVyVGVzdGhhcm5l
c3NFeGVjdXRvcihUZXN0aGFybmVzc0V4ZWN1dG9yKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
YnJvd3Nlciwgc2VydmVyX2NvbmZpZywgdGltZW91dF9tdWx0aXBsaWVyPTEsCisgICAgICAgICAg
ICAgICAgIGNsb3NlX2FmdGVyX2RvbmU9VHJ1ZSwgY2FwYWJpbGl0aWVzPU5vbmUsIGRlYnVnX2lu
Zm89Tm9uZSwKKyAgICAgICAgICAgICAgICAgKiprd2FyZ3MpOgorICAgICAgICBUZXN0aGFybmVz
c0V4ZWN1dG9yLl9faW5pdF9fKHNlbGYsIGJyb3dzZXIsIHNlcnZlcl9jb25maWcsIHRpbWVvdXRf
bXVsdGlwbGllcj0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVn
X2luZm89Tm9uZSkKKyAgICAgICAgc2VsZi5wcm90b2NvbCA9IFNlcnZvV2ViRHJpdmVyUHJvdG9j
b2woc2VsZiwgYnJvd3NlciwgY2FwYWJpbGl0aWVzPWNhcGFiaWxpdGllcykKKyAgICAgICAgd2l0
aCBvcGVuKG9zLnBhdGguam9pbihoZXJlLCAidGVzdGhhcm5lc3Nfc2Vydm9kcml2ZXIuanMiKSkg
YXMgZjoKKyAgICAgICAgICAgIHNlbGYuc2NyaXB0ID0gZi5yZWFkKCkKKyAgICAgICAgc2VsZi50
aW1lb3V0ID0gTm9uZQorCisgICAgZGVmIG9uX3Byb3RvY29sX2NoYW5nZShzZWxmLCBuZXdfcHJv
dG9jb2wpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgaXNfYWxpdmUoc2VsZik6CisgICAgICAg
IHJldHVybiBzZWxmLnByb3RvY29sLmlzX2FsaXZlKCkKKworICAgIGRlZiBkb190ZXN0KHNlbGYs
IHRlc3QpOgorICAgICAgICB1cmwgPSBzZWxmLnRlc3RfdXJsKHRlc3QpCisKKyAgICAgICAgdGlt
ZW91dCA9IHRlc3QudGltZW91dCAqIHNlbGYudGltZW91dF9tdWx0aXBsaWVyICsgZXh0cmFfdGlt
ZW91dAorCisgICAgICAgIGlmIHRpbWVvdXQgIT0gc2VsZi50aW1lb3V0OgorICAgICAgICAgICAg
dHJ5OgorICAgICAgICAgICAgICAgIHNlbGYucHJvdG9jb2wuc2Vzc2lvbi50aW1lb3V0cy5zY3Jp
cHQgPSB0aW1lb3V0CisgICAgICAgICAgICAgICAgc2VsZi50aW1lb3V0ID0gdGltZW91dAorICAg
ICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIuZXJy
b3IoIkxvc3Qgd2ViZHJpdmVyIGNvbm5lY3Rpb24iKQorICAgICAgICAgICAgICAgIHJldHVybiBT
dG9wCisKKyAgICAgICAgc3VjY2VzcywgZGF0YSA9IFNlcnZvV2ViRHJpdmVyUnVuKHNlbGYuZG9f
dGVzdGhhcm5lc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLnByb3RvY29sLnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1cmwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
aW1lb3V0KS5ydW4oKQorCisgICAgICAgIGlmIHN1Y2Nlc3M6CisgICAgICAgICAgICByZXR1cm4g
c2VsZi5jb252ZXJ0X3Jlc3VsdCh0ZXN0LCBkYXRhKQorCisgICAgICAgIHJldHVybiAodGVzdC5y
ZXN1bHRfY2xzKCpkYXRhKSwgW10pCisKKyAgICBkZWYgZG9fdGVzdGhhcm5lc3Moc2VsZiwgc2Vz
c2lvbiwgdXJsLCB0aW1lb3V0KToKKyAgICAgICAgc2Vzc2lvbi51cmwgPSB1cmwKKyAgICAgICAg
cmVzdWx0ID0ganNvbi5sb2FkcygKKyAgICAgICAgICAgIHNlc3Npb24uZXhlY3V0ZV9hc3luY19z
Y3JpcHQoCisgICAgICAgICAgICAgICAgc2VsZi5zY3JpcHQgJSB7ImFic191cmwiOiB1cmwsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVybCI6IHN0cmlwX3NlcnZlcih1cmwpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aW1lb3V0X211bHRpcGxpZXIiOiBzZWxm
LnRpbWVvdXRfbXVsdGlwbGllciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGlt
ZW91dCI6IHRpbWVvdXQgKiAxMDAwfSkpCisgICAgICAgICMgUHJldmVudCBsZWFraW5nIGV2ZXJ5
IHBhZ2UgaW4gaGlzdG9yeSB1bnRpbCBTZXJ2byBkZXZlbG9wcyBhIG1vcmUgc2FuZQorICAgICAg
ICAjIHBhZ2UgY2FjaGUKKyAgICAgICAgc2Vzc2lvbi5iYWNrKCkKKyAgICAgICAgcmV0dXJuIHJl
c3VsdAorCisKK2NsYXNzIFRpbWVvdXRFcnJvcihFeGNlcHRpb24pOgorICAgIHBhc3MKKworCitj
bGFzcyBTZXJ2b1dlYkRyaXZlclJlZlRlc3RFeGVjdXRvcihSZWZUZXN0RXhlY3V0b3IpOgorICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBicm93c2VyLCBzZXJ2ZXJfY29uZmlnLCB0aW1lb3V0X211bHRp
cGxpZXI9MSwKKyAgICAgICAgICAgICAgICAgc2NyZWVuc2hvdF9jYWNoZT1Ob25lLCBjYXBhYmls
aXRpZXM9Tm9uZSwgZGVidWdfaW5mbz1Ob25lLAorICAgICAgICAgICAgICAgICAqKmt3YXJncyk6
CisgICAgICAgICIiIlNlbGVuaXVtIFdlYkRyaXZlci1iYXNlZCBleGVjdXRvciBmb3IgcmVmdGVz
dHMiIiIKKyAgICAgICAgUmVmVGVzdEV4ZWN1dG9yLl9faW5pdF9fKHNlbGYsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicm93c2VyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2VydmVyX2NvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNjcmVlbnNob3RfY2FjaGU9c2NyZWVuc2hvdF9jYWNoZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRpbWVvdXRfbXVsdGlwbGllcj10aW1lb3V0X211bHRpcGxpZXIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19pbmZvPWRlYnVnX2luZm8pCisgICAg
ICAgIHNlbGYucHJvdG9jb2wgPSBTZXJ2b1dlYkRyaXZlclByb3RvY29sKHNlbGYsIGJyb3dzZXIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcGFiaWxp
dGllcz1jYXBhYmlsaXRpZXMpCisgICAgICAgIHNlbGYuaW1wbGVtZW50YXRpb24gPSBSZWZUZXN0
SW1wbGVtZW50YXRpb24oc2VsZikKKyAgICAgICAgc2VsZi50aW1lb3V0ID0gTm9uZQorICAgICAg
ICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKGhlcmUsICJyZWZ0ZXN0LXdhaXRfd2ViZHJpdmVyLmpz
IikpIGFzIGY6CisgICAgICAgICAgICBzZWxmLndhaXRfc2NyaXB0ID0gZi5yZWFkKCkKKworICAg
IGRlZiBpc19hbGl2ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYucHJvdG9jb2wuaXNfYWxp
dmUoKQorCisgICAgZGVmIGRvX3Rlc3Qoc2VsZiwgdGVzdCk6CisgICAgICAgIHRyeToKKyAgICAg
ICAgICAgIHJlc3VsdCA9IHNlbGYuaW1wbGVtZW50YXRpb24ucnVuX3Rlc3QodGVzdCkKKyAgICAg
ICAgICAgIHJldHVybiBzZWxmLmNvbnZlcnRfcmVzdWx0KHRlc3QsIHJlc3VsdCkKKyAgICAgICAg
ZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gdGVzdC5yZXN1bHRfY2xzKCJDUkFT
SCIsIE5vbmUpLCBbXQorICAgICAgICBleGNlcHQgVGltZW91dEVycm9yOgorICAgICAgICAgICAg
cmV0dXJuIHRlc3QucmVzdWx0X2NscygiVElNRU9VVCIsIE5vbmUpLCBbXQorICAgICAgICBleGNl
cHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBtZXNzYWdlID0gZ2V0YXR0cihlLCAibWVz
c2FnZSIsICIiKQorICAgICAgICAgICAgaWYgbWVzc2FnZToKKyAgICAgICAgICAgICAgICBtZXNz
YWdlICs9ICJcbiIKKyAgICAgICAgICAgIG1lc3NhZ2UgKz0gdHJhY2ViYWNrLmZvcm1hdF9leGMo
ZSkKKyAgICAgICAgICAgIHJldHVybiB0ZXN0LnJlc3VsdF9jbHMoIkVSUk9SIiwgbWVzc2FnZSks
IFtdCisKKyAgICBkZWYgc2NyZWVuc2hvdChzZWxmLCB0ZXN0LCB2aWV3cG9ydF9zaXplLCBkcGkp
OgorICAgICAgICAjIGh0dHBzOi8vZ2l0aHViLmNvbS93M2Mvd3B0cnVubmVyL2lzc3Vlcy8xNjYK
KyAgICAgICAgYXNzZXJ0IHZpZXdwb3J0X3NpemUgaXMgTm9uZQorICAgICAgICBhc3NlcnQgZHBp
IGlzIE5vbmUKKworICAgICAgICB0aW1lb3V0ID0gKHRlc3QudGltZW91dCAqIHNlbGYudGltZW91
dF9tdWx0aXBsaWVyICsgZXh0cmFfdGltZW91dAorICAgICAgICAgICAgICAgICAgIGlmIHNlbGYu
ZGVidWdfaW5mbyBpcyBOb25lIGVsc2UgTm9uZSkKKworICAgICAgICBpZiBzZWxmLnRpbWVvdXQg
IT0gdGltZW91dDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLnByb3Rv
Y29sLnNlc3Npb24udGltZW91dHMuc2NyaXB0ID0gdGltZW91dAorICAgICAgICAgICAgICAgIHNl
bGYudGltZW91dCA9IHRpbWVvdXQKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAg
ICAgICAgICAgIHNlbGYubG9nZ2VyLmVycm9yKCJMb3N0IHdlYmRyaXZlciBjb25uZWN0aW9uIikK
KyAgICAgICAgICAgICAgICByZXR1cm4gU3RvcAorCisgICAgICAgIHJldHVybiBTZXJ2b1dlYkRy
aXZlclJ1bihzZWxmLl9zY3JlZW5zaG90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZi5wcm90b2NvbC5zZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZi50ZXN0X3VybCh0ZXN0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRpbWVvdXQpLnJ1bigpCisKKyAgICBkZWYgX3NjcmVlbnNob3Qoc2VsZiwgc2Vzc2lvbiwgdXJs
LCB0aW1lb3V0KToKKyAgICAgICAgc2Vzc2lvbi51cmwgPSB1cmwKKyAgICAgICAgc2Vzc2lvbi5l
eGVjdXRlX2FzeW5jX3NjcmlwdChzZWxmLndhaXRfc2NyaXB0KQorICAgICAgICByZXR1cm4gc2Vz
c2lvbi5zY3JlZW5zaG90KCkKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3cz
Yy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2V4ZWN1dG9ycy9wcm9jZXNzLnB5IGIvV2ViRHJp
dmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvZXhlY3V0b3Jz
L3Byb2Nlc3MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmZiOGMx
N2E5NmJhCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rv
b2xzL3dwdHJ1bm5lci93cHRydW5uZXIvZXhlY3V0b3JzL3Byb2Nlc3MucHkKQEAgLTAsMCArMSwy
MCBAQAorZnJvbSAuYmFzZSBpbXBvcnQgVGVzdEV4ZWN1dG9yCisKKworY2xhc3MgUHJvY2Vzc1Rl
c3RFeGVjdXRvcihUZXN0RXhlY3V0b3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywg
Kiprd2FyZ3MpOgorICAgICAgICBUZXN0RXhlY3V0b3IuX19pbml0X18oc2VsZiwgKmFyZ3MsICoq
a3dhcmdzKQorICAgICAgICBzZWxmLmJpbmFyeSA9IHNlbGYuYnJvd3Nlci5iaW5hcnkKKyAgICAg
ICAgc2VsZi5pbnRlcmFjdGl2ZSA9IChGYWxzZSBpZiBzZWxmLmRlYnVnX2luZm8gaXMgTm9uZQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ugc2VsZi5kZWJ1Z19pbmZvLmludGVyYWN0
aXZlKQorCisgICAgZGVmIHNldHVwKHNlbGYsIHJ1bm5lcik6CisgICAgICAgIHNlbGYucnVubmVy
ID0gcnVubmVyCisgICAgICAgIHNlbGYucnVubmVyLnNlbmRfbWVzc2FnZSgiaW5pdF9zdWNjZWVk
ZWQiKQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIGlzX2FsaXZlKHNlbGYpOgorICAg
ICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIGRvX3Rlc3Qoc2VsZiwgdGVzdCk6CisgICAgICAg
IHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2lt
cG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2V4ZWN1dG9ycy9weXRlc3RydW5u
ZXIvX19pbml0X18ucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVu
bmVyL3dwdHJ1bm5lci9leGVjdXRvcnMvcHl0ZXN0cnVubmVyL19faW5pdF9fLnB5Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hOTJiM2E4MTUxZAotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVu
bmVyL2V4ZWN1dG9ycy9weXRlc3RydW5uZXIvX19pbml0X18ucHkKQEAgLTAsMCArMSBAQAorZnJv
bSAucnVubmVyIGltcG9ydCBydW4KZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVk
L3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2V4ZWN1dG9ycy9weXRlc3RydW5uZXIvcnVu
bmVyLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRy
dW5uZXIvZXhlY3V0b3JzL3B5dGVzdHJ1bm5lci9ydW5uZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAuLjA0M2ZjY2IxZmVkCi0tLSAvZGV2L251bGwKKysrIGIvV2Vi
RHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvZXhlY3V0
b3JzL3B5dGVzdHJ1bm5lci9ydW5uZXIucHkKQEAgLTAsMCArMSwxMTcgQEAKKyIiIlByb3ZpZGVz
IGludGVyZmFjZSB0byBkZWFsIHdpdGggcHl0ZXN0LgorCitVc2FnZTo6CisKKyAgICBzZXNzaW9u
ID0gd2ViZHJpdmVyLmNsaWVudC5TZXNzaW9uKCIxMjcuMC4wLjEiLCAiNDQ0NCIsICIvIikKKyAg
ICBoYXJuZXNzX3Jlc3VsdCA9ICgiT0siLCBOb25lKQorICAgIHN1YnRlc3RfcmVzdWx0cyA9IHB5
dGVzdHJ1bm5lci5ydW4oIi9wYXRoL3RvL3Rlc3QiLCBzZXNzaW9uLnVybCkKKyAgICByZXR1cm4g
KGhhcm5lc3NfcmVzdWx0LCBzdWJ0ZXN0X3Jlc3VsdHMpCisiIiIKKworaW1wb3J0IGVycm5vCitp
bXBvcnQganNvbgoraW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgdGVtcGZpbGUKKwor
CitweXRlc3QgPSBOb25lCisKKworZGVmIGRvX2RlbGF5ZWRfaW1wb3J0cygpOgorICAgIGdsb2Jh
bCBweXRlc3QKKyAgICBpbXBvcnQgcHl0ZXN0CisKKworZGVmIHJ1bihwYXRoLCBzZXJ2ZXJfY29u
ZmlnLCBzZXNzaW9uX2NvbmZpZywgdGltZW91dD0wKToKKyAgICAiIiJSdW4gUHl0aG9uIHRlc3Qg
YXQgYGBwYXRoYGAgaW4gcHl0ZXN0LiAgVGhlIHByb3ZpZGVkIGBgc2Vzc2lvbmBgCisgICAgaXMg
ZXhwb3NlZCBhcyBhIGZpeHR1cmUgYXZhaWxhYmxlIGluIHRoZSBzY29wZSBvZiB0aGUgdGVzdCBm
dW5jdGlvbnMuCisKKyAgICA6cGFyYW0gcGF0aDogUGF0aCB0byB0aGUgdGVzdCBmaWxlLgorICAg
IDpwYXJhbSBzZXNzaW9uX2NvbmZpZzogZGljdGlvbmFyeSBvZiBob3N0LCBwb3J0LGNhcGFiaWxp
dGllcyBwYXJhbWV0ZXJzCisgICAgdG8gcGFzcyB0aHJvdWdoIHRvIHRoZSB3ZWJkcml2ZXIgc2Vz
c2lvbgorICAgIDpwYXJhbSB0aW1lb3V0OiBEdXJhdGlvbiBiZWZvcmUgaW50ZXJydXB0aW5nIHBv
dGVudGlhbGx5IGhhbmdpbmcKKyAgICAgICAgdGVzdHMuICBJZiAwLCB0aGVyZSBpcyBubyB0aW1l
b3V0LgorCisgICAgOnJldHVybnM6IExpc3Qgb2Ygc3VidGVzdCByZXN1bHRzLCB3aGljaCBhcmUg
dHVwbGVzIG9mICh0ZXN0IGlkLAorICAgICAgICBzdGF0dXMsIG1lc3NhZ2UsIHN0YWNrdHJhY2Up
LgorICAgICIiIgorCisgICAgaWYgcHl0ZXN0IGlzIE5vbmU6CisgICAgICAgIGRvX2RlbGF5ZWRf
aW1wb3J0cygpCisKKyAgICByZWNvcmRlciA9IFN1YnRlc3RSZXN1bHRSZWNvcmRlcigpCisKKyAg
ICBvcy5lbnZpcm9uWyJXRF9IT1NUIl0gPSBzZXNzaW9uX2NvbmZpZ1siaG9zdCJdCisgICAgb3Mu
ZW52aXJvblsiV0RfUE9SVCJdID0gc3RyKHNlc3Npb25fY29uZmlnWyJwb3J0Il0pCisgICAgb3Mu
ZW52aXJvblsiV0RfQ0FQQUJJTElUSUVTIl0gPSBqc29uLmR1bXBzKHNlc3Npb25fY29uZmlnWyJj
YXBhYmlsaXRpZXMiXSkKKyAgICBvcy5lbnZpcm9uWyJXRF9TRVJWRVJfQ09ORklHIl0gPSBqc29u
LmR1bXBzKHNlcnZlcl9jb25maWcpCisKKyAgICBwbHVnaW5zID0gW3JlY29yZGVyXQorCisgICAg
IyBUT0RPKGF0byk6IERlYWwgd2l0aCB0aW1lb3V0cworCisgICAgd2l0aCBUZW1wb3JhcnlEaXJl
Y3RvcnkoKSBhcyBjYWNoZToKKyAgICAgICAgcHl0ZXN0Lm1haW4oWyItLXN0cmljdCIsICAjIHR1
cm4gd2FybmluZ3MgaW50byBlcnJvcnMKKyAgICAgICAgICAgICAgICAgICAgICItLXZlcmJvc2Ui
LCAgIyBzaG93IGVhY2ggaW5kaXZpZHVhbCBzdWJ0ZXN0CisgICAgICAgICAgICAgICAgICAgICAi
LS1jYXB0dXJlIiwgIm5vIiwgICMgZW5hYmxlIHN0ZG91dC9zdGRlcnIgZnJvbSB0ZXN0cworICAg
ICAgICAgICAgICAgICAgICAgIi0tYmFzZXRlbXAiLCBjYWNoZSwgICMgdGVtcG9yYXJ5IGRpcmVj
dG9yeQorICAgICAgICAgICAgICAgICAgICAgIi1wIiwgIm5vOm1vemxvZyIsICAjIHVzZSB0aGUg
V1BUIHJlc3VsdCByZWNvcmRlcgorICAgICAgICAgICAgICAgICAgICAgIi1wIiwgIm5vOmNhY2hl
cHJvdmlkZXIiLCAgIyBkaXNhYmxlIHN0YXRlIHByZXNlcnZhdGlvbiBhY3Jvc3MgaW52b2NhdGlv
bnMKKyAgICAgICAgICAgICAgICAgICAgIHBhdGhdLAorICAgICAgICAgICAgICAgICAgICBwbHVn
aW5zPXBsdWdpbnMpCisKKyAgICByZXR1cm4gcmVjb3JkZXIucmVzdWx0cworCisKK2NsYXNzIFN1
YnRlc3RSZXN1bHRSZWNvcmRlcihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAg
ICAgICAgc2VsZi5yZXN1bHRzID0gW10KKworICAgIGRlZiBweXRlc3RfcnVudGVzdF9sb2dyZXBv
cnQoc2VsZiwgcmVwb3J0KToKKyAgICAgICAgaWYgcmVwb3J0LnBhc3NlZCBhbmQgcmVwb3J0Lndo
ZW4gPT0gImNhbGwiOgorICAgICAgICAgICAgc2VsZi5yZWNvcmRfcGFzcyhyZXBvcnQpCisgICAg
ICAgIGVsaWYgcmVwb3J0LmZhaWxlZDoKKyAgICAgICAgICAgIGlmIHJlcG9ydC53aGVuICE9ICJj
YWxsIjoKKyAgICAgICAgICAgICAgICBzZWxmLnJlY29yZF9lcnJvcihyZXBvcnQpCisgICAgICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYucmVjb3JkX2ZhaWwocmVwb3J0KQorICAg
ICAgICBlbGlmIHJlcG9ydC5za2lwcGVkOgorICAgICAgICAgICAgc2VsZi5yZWNvcmRfc2tpcChy
ZXBvcnQpCisKKyAgICBkZWYgcmVjb3JkX3Bhc3Moc2VsZiwgcmVwb3J0KToKKyAgICAgICAgc2Vs
Zi5yZWNvcmQocmVwb3J0Lm5vZGVpZCwgIlBBU1MiKQorCisgICAgZGVmIHJlY29yZF9mYWlsKHNl
bGYsIHJlcG9ydCk6CisgICAgICAgIHNlbGYucmVjb3JkKHJlcG9ydC5ub2RlaWQsICJGQUlMIiwg
c3RhY2s9cmVwb3J0LmxvbmdyZXByKQorCisgICAgZGVmIHJlY29yZF9lcnJvcihzZWxmLCByZXBv
cnQpOgorICAgICAgICAjIGVycm9yIGluIHNldHVwL3RlYXJkb3duCisgICAgICAgIGlmIHJlcG9y
dC53aGVuICE9ICJjYWxsIjoKKyAgICAgICAgICAgIG1lc3NhZ2UgPSAiJXMgZXJyb3IiICUgcmVw
b3J0LndoZW4KKyAgICAgICAgc2VsZi5yZWNvcmQocmVwb3J0Lm5vZGVpZCwgIkVSUk9SIiwgbWVz
c2FnZSwgcmVwb3J0LmxvbmdyZXByKQorCisgICAgZGVmIHJlY29yZF9za2lwKHNlbGYsIHJlcG9y
dCk6CisgICAgICAgIHNlbGYucmVjb3JkKHJlcG9ydC5ub2RlaWQsICJFUlJPUiIsCisgICAgICAg
ICAgICAgICAgICAgICJJbi10ZXN0IHNraXAgZGVjb3JhdG9ycyBhcmUgZGlzYWxsb3dlZCwgIgor
ICAgICAgICAgICAgICAgICAgICAicGxlYXNlIHVzZSBXUFQgbWV0YWRhdGEgdG8gaWdub3JlIHRl
c3RzLiIpCisKKyAgICBkZWYgcmVjb3JkKHNlbGYsIHRlc3QsIHN0YXR1cywgbWVzc2FnZT1Ob25l
LCBzdGFjaz1Ob25lKToKKyAgICAgICAgaWYgc3RhY2sgaXMgbm90IE5vbmU6CisgICAgICAgICAg
ICBzdGFjayA9IHN0cihzdGFjaykKKyAgICAgICAgbmV3X3Jlc3VsdCA9ICh0ZXN0LCBzdGF0dXMs
IG1lc3NhZ2UsIHN0YWNrKQorICAgICAgICBzZWxmLnJlc3VsdHMuYXBwZW5kKG5ld19yZXN1bHQp
CisKKworY2xhc3MgVGVtcG9yYXJ5RGlyZWN0b3J5KG9iamVjdCk6CisgICAgZGVmIF9fZW50ZXJf
XyhzZWxmKToKKyAgICAgICAgc2VsZi5wYXRoID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9InB5
dGVzdC0iKQorICAgICAgICByZXR1cm4gc2VsZi5wYXRoCisKKyAgICBkZWYgX19leGl0X18oc2Vs
ZiwgKmFyZ3MpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYu
cGF0aCkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICMgbm8gc3Vj
aCBmaWxlIG9yIGRpcmVjdG9yeQorICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FTk9F
TlQ6CisgICAgICAgICAgICAgICAgcmFpc2UKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2lt
cG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2V4ZWN1dG9ycy9yZWZ0ZXN0LXdh
aXRfbWFyaW9uZXR0ZS5qcyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRy
dW5uZXIvd3B0cnVubmVyL2V4ZWN1dG9ycy9yZWZ0ZXN0LXdhaXRfbWFyaW9uZXR0ZS5qcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYzIyNjAyNzI4MWUKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dw
dHJ1bm5lci9leGVjdXRvcnMvcmVmdGVzdC13YWl0X21hcmlvbmV0dGUuanMKQEAgLTAsMCArMSwx
NyBAQAorZnVuY3Rpb24gdGVzdCh4KSB7CisgIGlmICghcm9vdC5jbGFzc0xpc3QuY29udGFpbnMo
InJlZnRlc3Qtd2FpdCIpKSB7CisgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOworICAgIG1hcmlv
bmV0dGVTY3JpcHRGaW5pc2hlZCgpOworICB9Cit9CisKK3ZhciByb290ID0gZG9jdW1lbnQuZG9j
dW1lbnRFbGVtZW50OwordmFyIG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIodGVzdCk7
CisKK29ic2VydmVyLm9ic2VydmUocm9vdCwge2F0dHJpYnV0ZXM6IHRydWV9KTsKKworaWYgKGRv
Y3VtZW50LnJlYWR5U3RhdGUgIT0gImNvbXBsZXRlIikgeworICBvbmxvYWQgPSB0ZXN0Cit9IGVs
c2UgeworICB0ZXN0KCk7Cit9CmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93
M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9leGVjdXRvcnMvcmVmdGVzdC13YWl0X3dlYmRy
aXZlci5qcyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0
cnVubmVyL2V4ZWN1dG9ycy9yZWZ0ZXN0LXdhaXRfd2ViZHJpdmVyLmpzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jMWNjNjQ5ZTMyMwotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2V4
ZWN1dG9ycy9yZWZ0ZXN0LXdhaXRfd2ViZHJpdmVyLmpzCkBAIC0wLDAgKzEsNDQgQEAKK3ZhciBj
YWxsYmFjayA9IGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV07CisKK2Z1bmN0aW9uIHJv
b3Rfd2FpdCgpIHsKKyAgaWYgKCFyb290LmNsYXNzTGlzdC5jb250YWlucygicmVmdGVzdC13YWl0
IikpIHsKKyAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CisKKyAgICBpZiAoRG9jdW1lbnQucHJv
dG90eXBlLmhhc093blByb3BlcnR5KCJmb250cyIpKSB7CisgICAgICBkb2N1bWVudC5mb250cy5y
ZWFkeS50aGVuKHJlYWR5X2Zvcl9zY3JlZW5zaG90KTsKKyAgICB9IGVsc2UgeworICAgICAgLy8g
VGhpcyBtaWdodCB0YWtlIHRoZSBzY3JlZW5zaG90IHRvbyBlYXJseSwgZGVwZW5kaW5nIG9uIHdo
ZXRoZXIgdGhlCisgICAgICAvLyBsb2FkIGV2ZW50IGlzIGJsb2NrZWQgb24gZm9udHMgYmVpbmcg
bG9hZGVkLiBTZWU6CisgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdzNjL2Nzc3dnLWRyYWZ0
cy9pc3N1ZXMvMTA4OAorICAgICAgcmVhZHlfZm9yX3NjcmVlbnNob3QoKTsKKyAgICB9CisgIH0K
K30KKworZnVuY3Rpb24gcmVhZHlfZm9yX3NjcmVlbnNob3QoKSB7CisgIC8vIEFzIG9mIDIwMTct
MDQtMDUsIHRoZSBDaHJvbWl1bSB3ZWIgYnJvd3NlciBleGhpYml0cyBhIHJlbmRlcmluZyBidWcK
KyAgLy8gKGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWls
P2lkPTcwODc1NykgdGhhdAorICAvLyBwcm9kdWNlcyBpbnN0YWJpbGl0eSBkdXJpbmcgc2NyZWVu
IGNhcHR1cmUuIFRoZSBmb2xsb3dpbmcgdXNlIG9mCisgIC8vIGByZXF1ZXN0QW5pbWF0aW9uRnJh
bWVgIGlzIGludGVuZGVkIGFzIGEgc2hvcnQtdGVybSB3b3JrYXJvdW5kLCB0aG91Z2gKKyAgLy8g
aXQgaXMgbm90IGd1YXJhbnRlZWQgdG8gcmVzb2x2ZSB0aGUgaXNzdWUuCisgIC8vCisgIC8vIEZv
ciBmdXJ0aGVyIGRldGFpbCwgc2VlOgorICAvLyBodHRwczovL2dpdGh1Yi5jb20vanVnZ2xpbm1p
a2UvY2hyb21lLXNjcmVlbnNob3QtcmFjZS9pc3N1ZXMvMQorCisgIHJlcXVlc3RBbmltYXRpb25G
cmFtZShmdW5jdGlvbigpIHsKKyAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKSB7
CisgICAgICBjYWxsYmFjaygpOworICAgIH0pOworICB9KTsKK30KKwordmFyIHJvb3QgPSBkb2N1
bWVudC5kb2N1bWVudEVsZW1lbnQ7Cit2YXIgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZl
cihyb290X3dhaXQpOworCitvYnNlcnZlci5vYnNlcnZlKHJvb3QsIHthdHRyaWJ1dGVzOiB0cnVl
fSk7CisKK2lmIChkb2N1bWVudC5yZWFkeVN0YXRlICE9ICJjb21wbGV0ZSIpIHsKKyAgICBvbmxv
YWQgPSByb290X3dhaXQ7Cit9IGVsc2UgeworICAgIHJvb3Rfd2FpdCgpOworfQpkaWZmIC0tZ2l0
IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIv
ZXhlY3V0b3JzL3JlZnRlc3QuanMgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMv
d3B0cnVubmVyL3dwdHJ1bm5lci9leGVjdXRvcnMvcmVmdGVzdC5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNWJkNWM2MDljYmQKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9leGVj
dXRvcnMvcmVmdGVzdC5qcwpAQCAtMCwwICsxIEBACit2YXIgd2luID0gd2luZG93Lm9wZW4oImFi
b3V0OmJsYW5rIiwgInRlc3QiLCAid2lkdGg9NjAwLGhlaWdodD02MDAiKTsKZGlmZiAtLWdpdCBh
L1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2V4
ZWN1dG9ycy90ZXN0aGFybmVzc19tYXJpb25ldHRlLmpzIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0
ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvZXhlY3V0b3JzL3Rlc3RoYXJuZXNzX21h
cmlvbmV0dGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmUyYjcw
YTBhZDhmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rv
b2xzL3dwdHJ1bm5lci93cHRydW5uZXIvZXhlY3V0b3JzL3Rlc3RoYXJuZXNzX21hcmlvbmV0dGUu
anMKQEAgLTAsMCArMSwzMSBAQAord2luZG93LndyYXBwZWRKU09iamVjdC50aW1lb3V0X211bHRp
cGxpZXIgPSAlKHRpbWVvdXRfbXVsdGlwbGllcilkOword2luZG93LndyYXBwZWRKU09iamVjdC5l
eHBsaWNpdF90aW1lb3V0ID0gJShleHBsaWNpdF90aW1lb3V0KWQ7CisKK3dpbmRvdy53cmFwcGVk
SlNPYmplY3QuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIGZ1bmN0aW9uIGxpc3RlbmVyKGV2
ZW50KSB7CisgICAgaWYgKGV2ZW50LmRhdGEudHlwZSAhPSAiY29tcGxldGUiKSB7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgd2luZG93LndyYXBwZWRKU09iamVjdC5yZW1vdmVFdmVudExp
c3RlbmVyKCJtZXNzYWdlIiwgbGlzdGVuZXIpOworICAgIGNsZWFyVGltZW91dCh0aW1lcik7Cisg
ICAgdmFyIHRlc3RzID0gZXZlbnQuZGF0YS50ZXN0czsKKyAgICB2YXIgc3RhdHVzID0gZXZlbnQu
ZGF0YS5zdGF0dXM7CisKKyAgICB2YXIgc3VidGVzdF9yZXN1bHRzID0gdGVzdHMubWFwKGZ1bmN0
aW9uICh4KSB7CisgICAgICAgIHJldHVybiBbeC5uYW1lLCB4LnN0YXR1cywgeC5tZXNzYWdlLCB4
LnN0YWNrXQorICAgIH0pOworCisgICAgbWFyaW9uZXR0ZVNjcmlwdEZpbmlzaGVkKFsiJSh1cmwp
cyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMuc3RhdHVzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLm1lc3NhZ2UsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGF0dXMuc3RhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdWJ0ZXN0X3Jlc3VsdHNdKTsKK30sIGZhbHNlKTsKKword2luZG93LndyYXBwZWRKU09iamVj
dC53aW4gPSB3aW5kb3cub3BlbigiJShhYnNfdXJsKXMiLCAiJSh3aW5kb3dfaWQpcyIpOworCit2
YXIgdGltZXIgPSBudWxsOworaWYgKCUodGltZW91dClzKSB7CisgICAgdGltZXIgPSBzZXRUaW1l
b3V0KGZ1bmN0aW9uKCkgeworICAgICAgICB3aW5kb3cud3JhcHBlZEpTT2JqZWN0Lndpbi50aW1l
b3V0KCk7CisgICAgfSwgJSh0aW1lb3V0KXMpOworfQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVz
dHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvZXhlY3V0b3JzL3Rlc3Ro
YXJuZXNzX3NlcnZvZHJpdmVyLmpzIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xz
L3dwdHJ1bm5lci93cHRydW5uZXIvZXhlY3V0b3JzL3Rlc3RoYXJuZXNzX3NlcnZvZHJpdmVyLmpz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kNzMxY2MwNGQ3MAotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5u
ZXIvd3B0cnVubmVyL2V4ZWN1dG9ycy90ZXN0aGFybmVzc19zZXJ2b2RyaXZlci5qcwpAQCAtMCww
ICsxLDIgQEAKK3dpbmRvdy5fX3dkX3Jlc3VsdHNfY2FsbGJhY2tfXyA9IGFyZ3VtZW50c1thcmd1
bWVudHMubGVuZ3RoIC0gMV07Cit3aW5kb3cuX193ZF9yZXN1bHRzX3RpbWVyX18gPSBzZXRUaW1l
b3V0KHRpbWVvdXQsICUodGltZW91dClzKTsKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2lt
cG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2V4ZWN1dG9ycy90ZXN0aGFybmVz
c193ZWJkcml2ZXIuanMgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVu
bmVyL3dwdHJ1bm5lci9leGVjdXRvcnMvdGVzdGhhcm5lc3Nfd2ViZHJpdmVyLmpzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mNWNiZmY5ZWY3NwotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVu
bmVyL2V4ZWN1dG9ycy90ZXN0aGFybmVzc193ZWJkcml2ZXIuanMKQEAgLTAsMCArMSwyOSBAQAor
dmFyIGNhbGxiYWNrID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXTsKK3dpbmRvdy50
aW1lb3V0X211bHRpcGxpZXIgPSAlKHRpbWVvdXRfbXVsdGlwbGllcilkOworCit3aW5kb3cuYWRk
RXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIGZ1bmN0aW9uIGYoZXZlbnQpIHsKKyAgaWYgKGV2ZW50
LmRhdGEudHlwZSAhPSAiY29tcGxldGUiKSB7CisgICAgcmV0dXJuOworICB9CisgIHdpbmRvdy5y
ZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgZik7CisKKyAgdmFyIHRlc3RzID0gZXZlbnQu
ZGF0YS50ZXN0czsKKyAgdmFyIHN0YXR1cyA9IGV2ZW50LmRhdGEuc3RhdHVzOworCisgIHZhciBz
dWJ0ZXN0X3Jlc3VsdHMgPSB0ZXN0cy5tYXAoZnVuY3Rpb24oeCkgeworICAgIHJldHVybiBbeC5u
YW1lLCB4LnN0YXR1cywgeC5tZXNzYWdlLCB4LnN0YWNrXQorICB9KTsKKyAgY2xlYXJUaW1lb3V0
KHRpbWVyKTsKKyAgY2FsbGJhY2soWyIlKHVybClzIiwKKyAgICAgICAgICAgIHN0YXR1cy5zdGF0
dXMsCisgICAgICAgICAgICBzdGF0dXMubWVzc2FnZSwKKyAgICAgICAgICAgIHN0YXR1cy5zdGFj
aywKKyAgICAgICAgICAgIHN1YnRlc3RfcmVzdWx0c10pOworfSwgZmFsc2UpOworCit3aW5kb3cu
d2luID0gd2luZG93Lm9wZW4oIiUoYWJzX3VybClzIiwgIiUod2luZG93X2lkKXMiKTsKKwordmFy
IHRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgd2luZG93Lndpbi50aW1lb3V0KCk7
CisgIHdpbmRvdy53aW4uY2xvc2UoKTsKK30sICUodGltZW91dClzKTsKZGlmZiAtLWdpdCBhL1dl
YkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2V4cGVj
dGVkLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRy
dW5uZXIvZXhwZWN0ZWQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LmYwNmFiYjk0NmFmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQv
dzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvZXhwZWN0ZWQucHkKQEAgLTAsMCArMSwxNCBA
QAoraW1wb3J0IG9zCisKKworZGVmIGV4cGVjdGVkX3BhdGgobWV0YWRhdGFfcGF0aCwgdGVzdF9w
YXRoKToKKyAgICAiIiJQYXRoIHRvIHRoZSBleHBlY3RhdGlvbiBkYXRhIGZpbGUgZm9yIGEgZ2l2
ZW4gdGVzdCBwYXRoLgorCisgICAgVGhpcyBpcyBkZWZpbmVkIGFzIG1ldGFkYXRhX3BhdGggKyBy
ZWxhdGl2ZV90ZXN0X3BhdGggKyAuaW5pCisKKyAgICA6cGFyYW0gbWV0YWRhdGFfcGF0aDogUGF0
aCB0byB0aGUgcm9vdCBvZiB0aGUgbWV0YWRhdGEgZGlyZWN0b3J5CisgICAgOnBhcmFtIHRlc3Rf
cGF0aDogUmVsYXRpdmUgcGF0aCB0byB0aGUgdGVzdCBmaWxlIGZyb20gdGhlIHRlc3Qgcm9vdAor
ICAgICIiIgorICAgIGFyZ3MgPSBsaXN0KHRlc3RfcGF0aC5zcGxpdCgiLyIpKQorICAgIGFyZ3Nb
LTFdICs9ICIuaW5pIgorICAgIHJldHVybiBvcy5wYXRoLmpvaW4obWV0YWRhdGFfcGF0aCwgKmFy
Z3MpCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVu
bmVyL3dwdHJ1bm5lci9mb3JtYXR0ZXJzLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNj
L3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvZm9ybWF0dGVycy5weQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMGU4ODhjZTI2OWQKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9mb3Jt
YXR0ZXJzLnB5CkBAIC0wLDAgKzEsNTQgQEAKK2ltcG9ydCBqc29uCisKK2Zyb20gbW96bG9nLnN0
cnVjdHVyZWQuZm9ybWF0dGVycy5iYXNlIGltcG9ydCBCYXNlRm9ybWF0dGVyCisKKworY2xhc3Mg
V3B0cmVwb3J0Rm9ybWF0dGVyKEJhc2VGb3JtYXR0ZXIpOgorICAgICIiIkZvcm1hdHRlciB0aGF0
IHByb2R1Y2VzIHJlc3VsdHMgaW4gdGhlIGZvcm1hdCB0aGF0IHdwcmVwb3J0IGV4cGVjdHMuIiIi
CisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYucmF3X3Jlc3VsdHMgPSB7
fQorCisgICAgZGVmIHN1aXRlX2VuZChzZWxmLCBkYXRhKToKKyAgICAgICAgcmVzdWx0cyA9IHt9
CisgICAgICAgIHJlc3VsdHNbInJlc3VsdHMiXSA9IFtdCisgICAgICAgIGZvciB0ZXN0X25hbWUg
aW4gc2VsZi5yYXdfcmVzdWx0czoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsidGVzdCI6IHRlc3Rf
bmFtZX0KKyAgICAgICAgICAgIHJlc3VsdC51cGRhdGUoc2VsZi5yYXdfcmVzdWx0c1t0ZXN0X25h
bWVdKQorICAgICAgICAgICAgcmVzdWx0c1sicmVzdWx0cyJdLmFwcGVuZChyZXN1bHQpCisgICAg
ICAgIHJldHVybiBqc29uLmR1bXBzKHJlc3VsdHMpCisKKyAgICBkZWYgZmluZF9vcl9jcmVhdGVf
dGVzdChzZWxmLCBkYXRhKToKKyAgICAgICAgdGVzdF9uYW1lID0gZGF0YVsidGVzdCJdCisgICAg
ICAgIGlmIHRlc3RfbmFtZSBub3QgaW4gc2VsZi5yYXdfcmVzdWx0czoKKyAgICAgICAgICAgIHNl
bGYucmF3X3Jlc3VsdHNbdGVzdF9uYW1lXSA9IHsKKyAgICAgICAgICAgICAgICAic3VidGVzdHMi
OiBbXSwKKyAgICAgICAgICAgICAgICAic3RhdHVzIjogIiIsCisgICAgICAgICAgICAgICAgIm1l
c3NhZ2UiOiBOb25lCisgICAgICAgICAgICB9CisgICAgICAgIHJldHVybiBzZWxmLnJhd19yZXN1
bHRzW3Rlc3RfbmFtZV0KKworICAgIGRlZiBjcmVhdGVfc3VidGVzdChzZWxmLCBkYXRhKToKKyAg
ICAgICAgdGVzdCA9IHNlbGYuZmluZF9vcl9jcmVhdGVfdGVzdChkYXRhKQorICAgICAgICBzdWJ0
ZXN0X25hbWUgPSBkYXRhWyJzdWJ0ZXN0Il0KKworICAgICAgICBzdWJ0ZXN0ID0geworICAgICAg
ICAgICAgIm5hbWUiOiBzdWJ0ZXN0X25hbWUsCisgICAgICAgICAgICAic3RhdHVzIjogIiIsCisg
ICAgICAgICAgICAibWVzc2FnZSI6IE5vbmUKKyAgICAgICAgfQorICAgICAgICB0ZXN0WyJzdWJ0
ZXN0cyJdLmFwcGVuZChzdWJ0ZXN0KQorCisgICAgICAgIHJldHVybiBzdWJ0ZXN0CisKKyAgICBk
ZWYgdGVzdF9zdGF0dXMoc2VsZiwgZGF0YSk6CisgICAgICAgIHN1YnRlc3QgPSBzZWxmLmNyZWF0
ZV9zdWJ0ZXN0KGRhdGEpCisgICAgICAgIHN1YnRlc3RbInN0YXR1cyJdID0gZGF0YVsic3RhdHVz
Il0KKyAgICAgICAgaWYgIm1lc3NhZ2UiIGluIGRhdGE6CisgICAgICAgICAgICBzdWJ0ZXN0WyJt
ZXNzYWdlIl0gPSBkYXRhWyJtZXNzYWdlIl0KKworICAgIGRlZiB0ZXN0X2VuZChzZWxmLCBkYXRh
KToKKyAgICAgICAgdGVzdCA9IHNlbGYuZmluZF9vcl9jcmVhdGVfdGVzdChkYXRhKQorICAgICAg
ICB0ZXN0WyJzdGF0dXMiXSA9IGRhdGFbInN0YXR1cyJdCisgICAgICAgIGlmICJtZXNzYWdlIiBp
biBkYXRhOgorICAgICAgICAgICAgdGVzdFsibWVzc2FnZSJdID0gZGF0YVsibWVzc2FnZSJdCmRp
ZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dw
dHJ1bm5lci9ob3N0cy5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRy
dW5uZXIvd3B0cnVubmVyL2hvc3RzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi45MTVjMTdmMWIzMQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2lt
cG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2hvc3RzLnB5CkBAIC0wLDAgKzEs
MTAwIEBACitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHVuaWNvZGVfbGl0ZXJhbHMKKworCitjbGFz
cyBIb3N0c0xpbmUob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaXBfYWRkcmVzcywg
Y2Fub25pY2FsX2hvc3RuYW1lLCBhbGlhc2VzPU5vbmUsIGNvbW1lbnQ9Tm9uZSk6CisgICAgICAg
IHNlbGYuaXBfYWRkcmVzcyA9IGlwX2FkZHJlc3MKKyAgICAgICAgc2VsZi5jYW5vbmljYWxfaG9z
dG5hbWUgPSBjYW5vbmljYWxfaG9zdG5hbWUKKyAgICAgICAgc2VsZi5hbGlhc2VzID0gYWxpYXNl
cyBpZiBhbGlhc2VzIGlzIG5vdCBOb25lIGVsc2UgW10KKyAgICAgICAgc2VsZi5jb21tZW50ID0g
Y29tbWVudAorICAgICAgICBpZiBzZWxmLmlwX2FkZHJlc3MgaXMgTm9uZToKKyAgICAgICAgICAg
IGFzc2VydCBzZWxmLmNhbm9uaWNhbF9ob3N0bmFtZSBpcyBOb25lCisgICAgICAgICAgICBhc3Nl
cnQgbm90IHNlbGYuYWxpYXNlcworICAgICAgICAgICAgYXNzZXJ0IHNlbGYuY29tbWVudCBpcyBu
b3QgTm9uZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZyb21fc3RyaW5nKGNscywgbGlu
ZSk6CisgICAgICAgIGlmIG5vdCBsaW5lLnN0cmlwKCk6CisgICAgICAgICAgICByZXR1cm4KKwor
ICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCisKKyAgICAgICAgaXBfYWRkcmVzcyA9IE5vbmUK
KyAgICAgICAgY2Fub25pY2FsX2hvc3RuYW1lID0gTm9uZQorICAgICAgICBhbGlhc2VzID0gW10K
KyAgICAgICAgY29tbWVudCA9IE5vbmUKKworICAgICAgICBjb21tZW50X3BhcnRzID0gbGluZS5z
cGxpdCgiIyIsIDEpCisgICAgICAgIGlmIGxlbihjb21tZW50X3BhcnRzKSA+IDE6CisgICAgICAg
ICAgICBjb21tZW50ID0gY29tbWVudF9wYXJ0c1sxXQorCisgICAgICAgIGRhdGEgPSBjb21tZW50
X3BhcnRzWzBdLnN0cmlwKCkKKworICAgICAgICBpZiBkYXRhOgorICAgICAgICAgICAgZmllbGRz
ID0gZGF0YS5zcGxpdCgpCisgICAgICAgICAgICBpZiBsZW4oZmllbGRzKSA8IDI6CisgICAgICAg
ICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCBob3N0cyBsaW5lIikKKworICAgICAg
ICAgICAgaXBfYWRkcmVzcyA9IGZpZWxkc1swXQorICAgICAgICAgICAgY2Fub25pY2FsX2hvc3Ru
YW1lID0gZmllbGRzWzFdCisgICAgICAgICAgICBhbGlhc2VzID0gZmllbGRzWzI6XQorCisgICAg
ICAgIHJldHVybiBjbHMoaXBfYWRkcmVzcywgY2Fub25pY2FsX2hvc3RuYW1lLCBhbGlhc2VzLCBj
b21tZW50KQorCisKK2NsYXNzIEhvc3RzRmlsZShvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhz
ZWxmKToKKyAgICAgICAgc2VsZi5kYXRhID0gW10KKyAgICAgICAgc2VsZi5ieV9ob3N0bmFtZSA9
IHt9CisKKyAgICBkZWYgc2V0X2hvc3Qoc2VsZiwgaG9zdCk6CisgICAgICAgIGlmIGhvc3QuY2Fu
b25pY2FsX2hvc3RuYW1lIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLmRhdGEuYXBwZW5kKGhv
c3QpCisgICAgICAgIGVsaWYgaG9zdC5jYW5vbmljYWxfaG9zdG5hbWUgaW4gc2VsZi5ieV9ob3N0
bmFtZToKKyAgICAgICAgICAgIG9sZF9ob3N0ID0gc2VsZi5ieV9ob3N0bmFtZVtob3N0LmNhbm9u
aWNhbF9ob3N0bmFtZV0KKyAgICAgICAgICAgIG9sZF9ob3N0LmlwX2FkZHJlc3MgPSBob3N0Lmlw
X2FkZHJlc3MKKyAgICAgICAgICAgIG9sZF9ob3N0LmFsaWFzZXMgPSBob3N0LmFsaWFzZXMKKyAg
ICAgICAgICAgIG9sZF9ob3N0LmNvbW1lbnQgPSBob3N0LmNvbW1lbnQKKyAgICAgICAgZWxzZToK
KyAgICAgICAgICAgIHNlbGYuZGF0YS5hcHBlbmQoaG9zdCkKKyAgICAgICAgICAgIHNlbGYuYnlf
aG9zdG5hbWVbaG9zdC5jYW5vbmljYWxfaG9zdG5hbWVdID0gaG9zdAorCisgICAgQGNsYXNzbWV0
aG9kCisgICAgZGVmIGZyb21fZmlsZShjbHMsIGYpOgorICAgICAgICBydiA9IGNscygpCisgICAg
ICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICBob3N0ID0gSG9zdHNMaW5lLmZyb21fc3Ry
aW5nKGxpbmUpCisgICAgICAgICAgICBpZiBob3N0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAg
ICAgIHJ2LnNldF9ob3N0KGhvc3QpCisgICAgICAgIHJldHVybiBydgorCisgICAgZGVmIHRvX3N0
cmluZyhzZWxmKToKKyAgICAgICAgZmllbGRfd2lkdGhzID0gWzAsIDBdCisgICAgICAgIGZvciBs
aW5lIGluIHNlbGYuZGF0YToKKyAgICAgICAgICAgIGlmIGxpbmUuaXBfYWRkcmVzcyBpcyBub3Qg
Tm9uZToKKyAgICAgICAgICAgICAgICBmaWVsZF93aWR0aHNbMF0gPSBtYXgoZmllbGRfd2lkdGhz
WzBdLCBsZW4obGluZS5pcF9hZGRyZXNzKSkKKyAgICAgICAgICAgICAgICBmaWVsZF93aWR0aHNb
MV0gPSBtYXgoZmllbGRfd2lkdGhzWzFdLCBsZW4obGluZS5jYW5vbmljYWxfaG9zdG5hbWUpKQor
CisgICAgICAgIGxpbmVzID0gW10KKworICAgICAgICBmb3IgaG9zdCBpbiBzZWxmLmRhdGE6Cisg
ICAgICAgICAgICBsaW5lID0gIiIKKyAgICAgICAgICAgIGlmIGhvc3QuaXBfYWRkcmVzcyBpcyBu
b3QgTm9uZToKKyAgICAgICAgICAgICAgICBpcF9zdHJpbmcgPSBob3N0LmlwX2FkZHJlc3MubGp1
c3QoZmllbGRfd2lkdGhzWzBdKQorICAgICAgICAgICAgICAgIGhvc3RuYW1lX3N0ciA9IGhvc3Qu
Y2Fub25pY2FsX2hvc3RuYW1lCisgICAgICAgICAgICAgICAgaWYgaG9zdC5hbGlhc2VzOgorICAg
ICAgICAgICAgICAgICAgICBob3N0bmFtZV9zdHIgPSAiJXMgJXMiICUgKGhvc3RuYW1lX3N0ci5s
anVzdChmaWVsZF93aWR0aHNbMV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICIgIi5qb2luKGhvc3QuYWxpYXNlcykpCisgICAgICAgICAgICAgICAgbGlu
ZSA9ICIlcyAlcyIgJSAoaXBfc3RyaW5nLCBob3N0bmFtZV9zdHIpCisgICAgICAgICAgICBpZiBo
b3N0LmNvbW1lbnQ6CisgICAgICAgICAgICAgICAgaWYgbGluZToKKyAgICAgICAgICAgICAgICAg
ICAgbGluZSArPSAiICIKKyAgICAgICAgICAgICAgICBsaW5lICs9ICIjJXMiICUgaG9zdC5jb21t
ZW50CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQobGluZSkKKworICAgICAgICBsaW5lcy5hcHBl
bmQoIiIpCisKKyAgICAgICAgcmV0dXJuICJcbiIuam9pbihsaW5lcykKKworICAgIGRlZiB0b19m
aWxlKHNlbGYsIGYpOgorICAgICAgICBmLndyaXRlKHNlbGYudG9fc3RyaW5nKCkuZW5jb2RlKCJ1
dGY4IikpCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0
cnVubmVyL3dwdHJ1bm5lci9tYW5pZmVzdGV4cGVjdGVkLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1w
b3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvbWFuaWZlc3RleHBlY3RlZC5weQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNWQ1N2I3MGU1MTcKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVy
L3dwdHJ1bm5lci9tYW5pZmVzdGV4cGVjdGVkLnB5CkBAIC0wLDAgKzEsMjYyIEBACitpbXBvcnQg
b3MKK2ltcG9ydCB1cmxwYXJzZQorCitmcm9tIHdwdG1hbmlmZXN0LmJhY2tlbmRzIGltcG9ydCBz
dGF0aWMKK2Zyb20gd3B0bWFuaWZlc3QuYmFja2VuZHMuc3RhdGljIGltcG9ydCBNYW5pZmVzdEl0
ZW0KKworaW1wb3J0IGV4cGVjdGVkCisKKyIiIk1hbmlmZXN0IHN0cnVjdHVyZSB1c2VkIHRvIHN0
b3JlIGV4cGVjdGVkIHJlc3VsdHMgb2YgYSB0ZXN0LgorCitFYWNoIG1hbmlmZXN0IGZpbGUgaXMg
cmVwcmVzZW50ZWQgYnkgYW4gRXhwZWN0ZWRNYW5pZmVzdCB0aGF0CitoYXMgb25lIG9yIG1vcmUg
VGVzdE5vZGUgY2hpbGRyZW4sIG9uZSBwZXIgdGVzdCBpbiB0aGUgbWFuaWZlc3QuCitFYWNoIFRl
c3ROb2RlIGhhcyB6ZXJvIG9yIG1vcmUgU3VidGVzdE5vZGUgY2hpbGRyZW4sIG9uZSBmb3IgZWFj
aAora25vd24gc3VidGVzdCBvZiB0aGUgdGVzdC4KKyIiIgorCitkZWYgZGF0YV9jbHNfZ2V0dGVy
KG91dHB1dF9ub2RlLCB2aXNpdGVkX25vZGUpOgorICAgICMgdmlzaXRlZF9ub2RlIGlzIGludGVu
dGlvbmFsbHkgdW51c2VkCisgICAgaWYgb3V0cHV0X25vZGUgaXMgTm9uZToKKyAgICAgICAgcmV0
dXJuIEV4cGVjdGVkTWFuaWZlc3QKKyAgICBpZiBpc2luc3RhbmNlKG91dHB1dF9ub2RlLCBFeHBl
Y3RlZE1hbmlmZXN0KToKKyAgICAgICAgcmV0dXJuIFRlc3ROb2RlCisgICAgaWYgaXNpbnN0YW5j
ZShvdXRwdXRfbm9kZSwgVGVzdE5vZGUpOgorICAgICAgICByZXR1cm4gU3VidGVzdE5vZGUKKyAg
ICByYWlzZSBWYWx1ZUVycm9yCisKKworZGVmIGJvb2xfcHJvcChuYW1lLCBub2RlKToKKyAgICAi
IiJCb29sZWFuIHByb3BlcnR5IiIiCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gbm9kZS5nZXQo
bmFtZSkKKyAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgIHJldHVybiBOb25lCisKKworZGVm
IHRhZ3Mobm9kZSk6CisgICAgIiIiU2V0IG9mIHRhZ3MgdGhhdCBoYXZlIGJlZW4gYXBwbGllZCB0
byB0aGUgdGVzdCIiIgorICAgIHRyeToKKyAgICAgICAgdmFsdWUgPSBub2RlLmdldCgidGFncyIp
CisgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIChzdHIsIHVuaWNvZGUpKToKKyAgICAgICAg
ICAgIHJldHVybiB7dmFsdWV9CisgICAgICAgIHJldHVybiBzZXQodmFsdWUpCisgICAgZXhjZXB0
IEtleUVycm9yOgorICAgICAgICByZXR1cm4gc2V0KCkKKworCitkZWYgcHJlZnMobm9kZSk6Cisg
ICAgZGVmIHZhbHVlKGluaV92YWx1ZSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoaW5pX3ZhbHVl
LCAoc3RyLCB1bmljb2RlKSk6CisgICAgICAgICAgICByZXR1cm4gdHVwbGUoaW5pX3ZhbHVlLnNw
bGl0KCI6IiwgMSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gKGluaV92YWx1
ZSwgTm9uZSkKKworICAgIHRyeToKKyAgICAgICAgbm9kZV9wcmVmcyA9IG5vZGUuZ2V0KCJwcmVm
cyIpCisgICAgICAgIGlmIHR5cGUobm9kZV9wcmVmcykgaW4gKHN0ciwgdW5pY29kZSk6CisgICAg
ICAgICAgICBwcmVmcyA9IHt2YWx1ZShub2RlX3ByZWZzKX0KKyAgICAgICAgcnYgPSBkaWN0KHZh
bHVlKGl0ZW0pIGZvciBpdGVtIGluIG5vZGVfcHJlZnMpCisgICAgZXhjZXB0IEtleUVycm9yOgor
ICAgICAgICBydiA9IHt9CisgICAgcmV0dXJuIHJ2CisKKworY2xhc3MgRXhwZWN0ZWRNYW5pZmVz
dChNYW5pZmVzdEl0ZW0pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCB0ZXN0X3BhdGgs
IHVybF9iYXNlKToKKyAgICAgICAgIiIiT2JqZWN0IHJlcHJlc2VudGluZyBhbGwgdGhlIHRlc3Rz
IGluIGEgcGFydGljdWxhciBtYW5pZmVzdAorCisgICAgICAgIDpwYXJhbSBuYW1lOiBOYW1lIG9m
IHRoZSBBU1QgTm9kZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBvYmplY3QuCisgICAgICAgICAgICAg
ICAgICAgICBTaG91bGQgYWx3YXlzIGJlIE5vbmUgc2luY2UgdGhpcyBzaG91bGQgYWx3YXlzIGJl
IGFzc29jaWF0ZWQgd2l0aAorICAgICAgICAgICAgICAgICAgICAgdGhlIHJvb3Qgbm9kZSBvZiB0
aGUgQVNULgorICAgICAgICA6cGFyYW0gdGVzdF9wYXRoOiBQYXRoIG9mIHRoZSB0ZXN0IGZpbGUg
YXNzb2NpYXRlZCB3aXRoIHRoaXMgbWFuaWZlc3QuCisgICAgICAgIDpwYXJhbSB1cmxfYmFzZTog
QmFzZSB1cmwgZm9yIHNlcnZpbmcgdGhlIHRlc3RzIGluIHRoaXMgbWFuaWZlc3QKKyAgICAgICAg
IiIiCisgICAgICAgIGlmIG5hbWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByYWlzZSBWYWx1
ZUVycm9yKCJFeHBlY3RlZE1hbmlmZXN0IHNob3VsZCByZXByZXNlbnQgdGhlIHJvb3Qgbm9kZSIp
CisgICAgICAgIGlmIHRlc3RfcGF0aCBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVF
cnJvcigiRXhwZWN0ZWRNYW5pZmVzdCByZXF1aXJlcyBhIHRlc3QgcGF0aCIpCisgICAgICAgIGlm
IHVybF9iYXNlIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJFeHBlY3Rl
ZE1hbmlmZXN0IHJlcXVpcmVzIGEgYmFzZSB1cmwiKQorICAgICAgICBNYW5pZmVzdEl0ZW0uX19p
bml0X18oc2VsZiwgbmFtZSkKKyAgICAgICAgc2VsZi5jaGlsZF9tYXAgPSB7fQorICAgICAgICBz
ZWxmLnRlc3RfcGF0aCA9IHRlc3RfcGF0aAorICAgICAgICBzZWxmLnVybF9iYXNlID0gdXJsX2Jh
c2UKKworICAgIGRlZiBhcHBlbmQoc2VsZiwgY2hpbGQpOgorICAgICAgICAiIiJBZGQgYSB0ZXN0
IHRvIHRoZSBtYW5pZmVzdCIiIgorICAgICAgICBNYW5pZmVzdEl0ZW0uYXBwZW5kKHNlbGYsIGNo
aWxkKQorICAgICAgICBzZWxmLmNoaWxkX21hcFtjaGlsZC5pZF0gPSBjaGlsZAorCisgICAgZGVm
IF9yZW1vdmVfY2hpbGQoc2VsZiwgY2hpbGQpOgorICAgICAgICBkZWwgc2VsZi5jaGlsZF9tYXBb
Y2hpbGQuaWRdCisgICAgICAgIE1hbmlmZXN0SXRlbS5yZW1vdmVfY2hpbGQoc2VsZiwgY2hpbGQp
CisgICAgICAgIGFzc2VydCBsZW4oc2VsZi5jaGlsZF9tYXApID09IGxlbihzZWxmLmNoaWxkcmVu
KQorCisgICAgZGVmIGdldF90ZXN0KHNlbGYsIHRlc3RfaWQpOgorICAgICAgICAiIiJHZXQgYSB0
ZXN0IGZyb20gdGhlIG1hbmlmZXN0IGJ5IElECisKKyAgICAgICAgOnBhcmFtIHRlc3RfaWQ6IElE
IG9mIHRoZSB0ZXN0IHRvIHJldHVybi4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuY2hpbGRfbWFw
LmdldCh0ZXN0X2lkKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHVybChzZWxmKToKKyAgICAg
ICAgcmV0dXJuIHVybHBhcnNlLnVybGpvaW4oc2VsZi51cmxfYmFzZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIi8iLmpvaW4oc2VsZi50ZXN0X3BhdGguc3BsaXQob3MucGF0aC5z
ZXApKSkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBkaXNhYmxlZChzZWxmKToKKyAgICAgICAg
cmV0dXJuIGJvb2xfcHJvcCgiZGlzYWJsZWQiLCBzZWxmKQorCisgICAgQHByb3BlcnR5CisgICAg
ZGVmIHJlc3RhcnRfYWZ0ZXIoc2VsZik6CisgICAgICAgIHJldHVybiBib29sX3Byb3AoInJlc3Rh
cnQtYWZ0ZXIiLCBzZWxmKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGxlYWtzKHNlbGYpOgor
ICAgICAgICByZXR1cm4gYm9vbF9wcm9wKCJsZWFrcyIsIHNlbGYpCisKKyAgICBAcHJvcGVydHkK
KyAgICBkZWYgdGFncyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHRhZ3Moc2VsZikKKworICAgIEBw
cm9wZXJ0eQorICAgIGRlZiBwcmVmcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHByZWZzKHNlbGYp
CisKKworY2xhc3MgRGlyZWN0b3J5TWFuaWZlc3QoTWFuaWZlc3RJdGVtKToKKyAgICBAcHJvcGVy
dHkKKyAgICBkZWYgZGlzYWJsZWQoc2VsZik6CisgICAgICAgIHJldHVybiBib29sX3Byb3AoImRp
c2FibGVkIiwgc2VsZikKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiByZXN0YXJ0X2FmdGVyKHNl
bGYpOgorICAgICAgICByZXR1cm4gYm9vbF9wcm9wKCJyZXN0YXJ0LWFmdGVyIiwgc2VsZikKKwor
ICAgIEBwcm9wZXJ0eQorICAgIGRlZiBsZWFrcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGJvb2xf
cHJvcCgibGVha3MiLCBzZWxmKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHRhZ3Moc2VsZik6
CisgICAgICAgIHJldHVybiB0YWdzKHNlbGYpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcHJl
ZnMoc2VsZik6CisgICAgICAgIHJldHVybiBwcmVmcyhzZWxmKQorCisKK2NsYXNzIFRlc3ROb2Rl
KE1hbmlmZXN0SXRlbSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAgICAi
IiJUcmVlIG5vZGUgYXNzb2NpYXRlZCB3aXRoIGEgcGFydGljdWxhciB0ZXN0IGluIGEgbWFuaWZl
c3QKKworICAgICAgICA6cGFyYW0gbmFtZTogbmFtZSBvZiB0aGUgdGVzdCIiIgorICAgICAgICBh
c3NlcnQgbmFtZSBpcyBub3QgTm9uZQorICAgICAgICBNYW5pZmVzdEl0ZW0uX19pbml0X18oc2Vs
ZiwgbmFtZSkKKyAgICAgICAgc2VsZi51cGRhdGVkX2V4cGVjdGVkID0gW10KKyAgICAgICAgc2Vs
Zi5uZXdfZXhwZWN0ZWQgPSBbXQorICAgICAgICBzZWxmLnN1YnRlc3RzID0ge30KKyAgICAgICAg
c2VsZi5kZWZhdWx0X3N0YXR1cyA9IE5vbmUKKyAgICAgICAgc2VsZi5fZnJvbV9maWxlID0gVHJ1
ZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGlzX2VtcHR5KHNlbGYpOgorICAgICAgICByZXF1
aXJlZF9rZXlzID0gc2V0KFsidHlwZSJdKQorICAgICAgICBpZiBzZXQoc2VsZi5fZGF0YS5rZXlz
KCkpICE9IHJlcXVpcmVkX2tleXM6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAg
cmV0dXJuIGFsbChjaGlsZC5pc19lbXB0eSBmb3IgY2hpbGQgaW4gc2VsZi5jaGlsZHJlbikKKwor
ICAgIEBwcm9wZXJ0eQorICAgIGRlZiB0ZXN0X3R5cGUoc2VsZik6CisgICAgICAgIHJldHVybiBz
ZWxmLmdldCgidHlwZSIpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaWQoc2VsZik6CisgICAg
ICAgIHJldHVybiB1cmxwYXJzZS51cmxqb2luKHNlbGYucGFyZW50LnVybCwgc2VsZi5uYW1lKQor
CisgICAgQHByb3BlcnR5CisgICAgZGVmIGRpc2FibGVkKHNlbGYpOgorICAgICAgICByZXR1cm4g
Ym9vbF9wcm9wKCJkaXNhYmxlZCIsIHNlbGYpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcmVz
dGFydF9hZnRlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIGJvb2xfcHJvcCgicmVzdGFydC1hZnRl
ciIsIHNlbGYpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbGVha3Moc2VsZik6CisgICAgICAg
IHJldHVybiBib29sX3Byb3AoImxlYWtzIiwgc2VsZikKKworICAgIEBwcm9wZXJ0eQorICAgIGRl
ZiB0YWdzKHNlbGYpOgorICAgICAgICByZXR1cm4gdGFncyhzZWxmKQorCisgICAgQHByb3BlcnR5
CisgICAgZGVmIHByZWZzKHNlbGYpOgorICAgICAgICByZXR1cm4gcHJlZnMoc2VsZikKKworICAg
IGRlZiBhcHBlbmQoc2VsZiwgbm9kZSk6CisgICAgICAgICIiIkFkZCBhIHN1YnRlc3QgdG8gdGhl
IGN1cnJlbnQgdGVzdAorCisgICAgICAgIDpwYXJhbSBub2RlOiBBU1QgTm9kZSBhc3NvY2lhdGVk
IHdpdGggdGhlIHN1YnRlc3QiIiIKKyAgICAgICAgY2hpbGQgPSBNYW5pZmVzdEl0ZW0uYXBwZW5k
KHNlbGYsIG5vZGUpCisgICAgICAgIHNlbGYuc3VidGVzdHNbY2hpbGQubmFtZV0gPSBjaGlsZAor
CisgICAgZGVmIGdldF9zdWJ0ZXN0KHNlbGYsIG5hbWUpOgorICAgICAgICAiIiJHZXQgdGhlIFN1
YnRlc3ROb2RlIGNvcnJlc3BvbmRpbmcgdG8gYSBwYXJ0aWN1bGFyIHN1YnRlc3QsIGJ5IG5hbWUK
KworICAgICAgICA6cGFyYW0gbmFtZTogTmFtZSBvZiB0aGUgbm9kZSB0byByZXR1cm4iIiIKKyAg
ICAgICAgaWYgbmFtZSBpbiBzZWxmLnN1YnRlc3RzOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYu
c3VidGVzdHNbbmFtZV0KKyAgICAgICAgcmV0dXJuIE5vbmUKKworCitjbGFzcyBTdWJ0ZXN0Tm9k
ZShUZXN0Tm9kZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAgICAiIiJU
cmVlIG5vZGUgYXNzb2NpYXRlZCB3aXRoIGEgcGFydGljdWxhciBzdWJ0ZXN0IGluIGEgbWFuaWZl
c3QKKworICAgICAgICA6cGFyYW0gbmFtZTogbmFtZSBvZiB0aGUgc3VidGVzdCIiIgorICAgICAg
ICBUZXN0Tm9kZS5fX2luaXRfXyhzZWxmLCBuYW1lKQorCisgICAgQHByb3BlcnR5CisgICAgZGVm
IGlzX2VtcHR5KHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9kYXRhOgorICAgICAgICAgICAgcmV0
dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCisKKworZGVmIGdldF9tYW5pZmVzdChtZXRh
ZGF0YV9yb290LCB0ZXN0X3BhdGgsIHVybF9iYXNlLCBydW5faW5mbyk6CisgICAgIiIiR2V0IHRo
ZSBFeHBlY3RlZE1hbmlmZXN0IGZvciBhIHBhcnRpY3VsYXIgdGVzdCBwYXRoLCBvciBOb25lIGlm
IHRoZXJlIGlzIG5vCisgICAgbWV0YWRhdGEgc3RvcmVkIGZvciB0aGF0IHRlc3QgcGF0aC4KKwor
ICAgIDpwYXJhbSBtZXRhZGF0YV9yb290OiBBYnNvbHV0ZSBwYXRoIHRvIHRoZSByb290IG9mIHRo
ZSBtZXRhZGF0YSBkaXJlY3RvcnkKKyAgICA6cGFyYW0gdGVzdF9wYXRoOiBQYXRoIHRvIHRoZSB0
ZXN0KHMpIHJlbGF0aXZlIHRvIHRoZSB0ZXN0IHJvb3QKKyAgICA6cGFyYW0gdXJsX2Jhc2U6IEJh
c2UgdXJsIGZvciBzZXJ2aW5nIHRoZSB0ZXN0cyBpbiB0aGlzIG1hbmlmZXN0CisgICAgOnBhcmFt
IHJ1bl9pbmZvOiBEaWN0aW9uYXJ5IG9mIHByb3BlcnRpZXMgb2YgdGhlIHRlc3QgcnVuIGZvciB3
aGljaCB0aGUgZXhwZWN0YXRpb24KKyAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyBzaG91bGQg
YmUgY29tcHV0ZWQuCisgICAgIiIiCisgICAgbWFuaWZlc3RfcGF0aCA9IGV4cGVjdGVkLmV4cGVj
dGVkX3BhdGgobWV0YWRhdGFfcm9vdCwgdGVzdF9wYXRoKQorICAgIHRyeToKKyAgICAgICAgd2l0
aCBvcGVuKG1hbmlmZXN0X3BhdGgpIGFzIGY6CisgICAgICAgICAgICByZXR1cm4gc3RhdGljLmNv
bXBpbGUoZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW5faW5mbywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX2Nsc19nZXR0ZXI9ZGF0YV9jbHNf
Z2V0dGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfcGF0aD10ZXN0
X3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsX2Jhc2U9dXJsX2Jh
c2UpCisgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIHJldHVybiBOb25lCisKK2RlZiBnZXRf
ZGlyX21hbmlmZXN0KHBhdGgsIHJ1bl9pbmZvKToKKyAgICAiIiJHZXQgdGhlIEV4cGVjdGVkTWFu
aWZlc3QgZm9yIGEgcGFydGljdWxhciB0ZXN0IHBhdGgsIG9yIE5vbmUgaWYgdGhlcmUgaXMgbm8K
KyAgICBtZXRhZGF0YSBzdG9yZWQgZm9yIHRoYXQgdGVzdCBwYXRoLgorCisgICAgOnBhcmFtIHBh
dGg6IEZ1bGwgcGF0aCB0byB0aGUgaW5pIGZpbGUKKyAgICA6cGFyYW0gcnVuX2luZm86IERpY3Rp
b25hcnkgb2YgcHJvcGVydGllcyBvZiB0aGUgdGVzdCBydW4gZm9yIHdoaWNoIHRoZSBleHBlY3Rh
dGlvbgorICAgICAgICAgICAgICAgICAgICAgdmFsdWVzIHNob3VsZCBiZSBjb21wdXRlZC4KKyAg
ICAiIiIKKyAgICB0cnk6CisgICAgICAgIHdpdGggb3BlbihwYXRoKSBhcyBmOgorICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpYy5jb21waWxlKGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcnVuX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9j
bHNfZ2V0dGVyPWxhbWJkYSB4LHk6IERpcmVjdG9yeU1hbmlmZXN0KQorICAgIGV4Y2VwdCBJT0Vy
cm9yOgorICAgICAgICByZXR1cm4gTm9uZQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1w
b3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvbWFuaWZlc3RpbmNsdWRlLnB5IGIv
V2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvbWFu
aWZlc3RpbmNsdWRlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5h
NjhmZGViMzliYwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3cz
Yy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL21hbmlmZXN0aW5jbHVkZS5weQpAQCAtMCwwICsx
LDE1NCBAQAorIiIiTWFuaWZlc3Qgc3RydWN0dXJlIHVzZWQgdG8gc3RvcmUgcGF0aHMgdGhhdCBz
aG91bGQgYmUgaW5jbHVkZWQgaW4gYSB0ZXN0IHJ1bi4KKworVGhlIG1hbmlmZXN0IGlzIHJlcHJl
c2VudGVkIGJ5IGEgdHJlZSBvZiBJbmNsdWRlTWFuaWZlc3Qgb2JqZWN0cywgdGhlIHJvb3QKK3Jl
cHJlc2VudGluZyB0aGUgZmlsZSBhbmQgZWFjaCBzdWJub2RlIHJlcHJlc2VudGluZyBhIHN1YmRp
cmVjdG9yeSB0aGF0IHNob3VsZAorYmUgaW5jbHVkZWQgb3IgZXhjbHVkZWQuCisiIiIKK2ltcG9y
dCBnbG9iCitpbXBvcnQgb3MKK2ltcG9ydCB1cmxwYXJzZQorCitmcm9tIHdwdG1hbmlmZXN0Lm5v
ZGUgaW1wb3J0IERhdGFOb2RlCitmcm9tIHdwdG1hbmlmZXN0LmJhY2tlbmRzIGltcG9ydCBjb25k
aXRpb25hbAorZnJvbSB3cHRtYW5pZmVzdC5iYWNrZW5kcy5jb25kaXRpb25hbCBpbXBvcnQgTWFu
aWZlc3RJdGVtCisKKworY2xhc3MgSW5jbHVkZU1hbmlmZXN0KE1hbmlmZXN0SXRlbSk6CisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIG5vZGUpOgorICAgICAgICAiIiJOb2RlIGluIGEgdHJlZSBzdHJ1
Y3R1cmUgcmVwcmVzZW50aW5nIHRoZSBwYXRocworICAgICAgICB0aGF0IHNob3VsZCBiZSBpbmNs
dWRlZCBvciBleGNsdWRlZCBmcm9tIHRoZSB0ZXN0IHJ1bi4KKworICAgICAgICA6cGFyYW0gbm9k
ZTogQVNUIE5vZGUgY29ycmVzcG9uZGluZyB0byB0aGlzIE5vZGUuCisgICAgICAgICIiIgorICAg
ICAgICBNYW5pZmVzdEl0ZW0uX19pbml0X18oc2VsZiwgbm9kZSkKKyAgICAgICAgc2VsZi5jaGls
ZF9tYXAgPSB7fQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGNyZWF0ZShjbHMpOgorICAg
ICAgICAiIiJDcmVhdGUgYW4gZW1wdHkgSW5jbHVkZU1hbmlmZXN0IHRyZWUiIiIKKyAgICAgICAg
bm9kZSA9IERhdGFOb2RlKE5vbmUpCisgICAgICAgIHJldHVybiBjbHMobm9kZSkKKworICAgIGRl
ZiBzZXRfZGVmYXVsdHMoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLmhhc19rZXkoInNraXAi
KToKKyAgICAgICAgICAgIHNlbGYuc2V0KCJza2lwIiwgIkZhbHNlIikKKworICAgIGRlZiBhcHBl
bmQoc2VsZiwgY2hpbGQpOgorICAgICAgICBNYW5pZmVzdEl0ZW0uYXBwZW5kKHNlbGYsIGNoaWxk
KQorICAgICAgICBzZWxmLmNoaWxkX21hcFtjaGlsZC5uYW1lXSA9IGNoaWxkCisgICAgICAgIGFz
c2VydCBsZW4oc2VsZi5jaGlsZF9tYXApID09IGxlbihzZWxmLmNoaWxkcmVuKQorCisgICAgZGVm
IGluY2x1ZGUoc2VsZiwgdGVzdCk6CisgICAgICAgICIiIlJldHVybiBhIGJvb2xlYW4gaW5kaWNh
dGluZyB3aGV0aGVyIGEgcGFydGljdWxhciB0ZXN0IHNob3VsZCBiZQorICAgICAgICBpbmNsdWRl
ZCBpbiBhIHRlc3QgcnVuLCBiYXNlZCBvbiB0aGUgSW5jbHVkZU1hbmlmZXN0IHRyZWUgcm9vdGVk
IG9uCisgICAgICAgIHRoaXMgb2JqZWN0LgorCisgICAgICAgIDpwYXJhbSB0ZXN0OiBUaGUgdGVz
dCBvYmplY3QiIiIKKyAgICAgICAgcGF0aF9jb21wb25lbnRzID0gc2VsZi5fZ2V0X2NvbXBvbmVu
dHModGVzdC51cmwpCisgICAgICAgIHJldHVybiBzZWxmLl9pbmNsdWRlKHRlc3QsIHBhdGhfY29t
cG9uZW50cykKKworICAgIGRlZiBfaW5jbHVkZShzZWxmLCB0ZXN0LCBwYXRoX2NvbXBvbmVudHMp
OgorICAgICAgICBpZiBwYXRoX2NvbXBvbmVudHM6CisgICAgICAgICAgICBuZXh0X3BhdGhfcGFy
dCA9IHBhdGhfY29tcG9uZW50cy5wb3AoKQorICAgICAgICAgICAgaWYgbmV4dF9wYXRoX3BhcnQg
aW4gc2VsZi5jaGlsZF9tYXA6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuY2hpbGRfbWFw
W25leHRfcGF0aF9wYXJ0XS5faW5jbHVkZSh0ZXN0LCBwYXRoX2NvbXBvbmVudHMpCisKKyAgICAg
ICAgbm9kZSA9IHNlbGYKKyAgICAgICAgd2hpbGUgbm9kZToKKyAgICAgICAgICAgIHRyeToKKyAg
ICAgICAgICAgICAgICBza2lwX3ZhbHVlID0gc2VsZi5nZXQoInNraXAiLCB7InRlc3RfdHlwZSI6
IHRlc3QuaXRlbV90eXBlfSkubG93ZXIoKQorICAgICAgICAgICAgICAgIGFzc2VydCBza2lwX3Zh
bHVlIGluICgidHJ1ZSIsICJmYWxzZSIpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNraXBfdmFs
dWUgIT0gInRydWUiCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAg
ICAgaWYgbm9kZS5wYXJlbnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIG5vZGUg
PSBub2RlLnBhcmVudAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAg
ICMgSW5jbHVkZSBieSBkZWZhdWx0CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisK
KyAgICBkZWYgX2dldF9jb21wb25lbnRzKHNlbGYsIHVybCk6CisgICAgICAgIHJ2ID0gW10KKyAg
ICAgICAgdXJsX3BhcnRzID0gdXJscGFyc2UudXJsc3BsaXQodXJsKQorICAgICAgICB2YXJpYW50
ID0gIiIKKyAgICAgICAgaWYgdXJsX3BhcnRzLnF1ZXJ5OgorICAgICAgICAgICAgdmFyaWFudCAr
PSAiPyIgKyB1cmxfcGFydHMucXVlcnkKKyAgICAgICAgaWYgdXJsX3BhcnRzLmZyYWdtZW50Ogor
ICAgICAgICAgICAgdmFyaWFudCArPSAiIyIgKyB1cmxfcGFydHMuZnJhZ21lbnQKKyAgICAgICAg
aWYgdmFyaWFudDoKKyAgICAgICAgICAgIHJ2LmFwcGVuZCh2YXJpYW50KQorICAgICAgICBydi5l
eHRlbmQoW2l0ZW0gZm9yIGl0ZW0gaW4gcmV2ZXJzZWQodXJsX3BhcnRzLnBhdGguc3BsaXQoIi8i
KSkgaWYgaXRlbV0pCisgICAgICAgIHJldHVybiBydgorCisgICAgZGVmIF9hZGRfcnVsZShzZWxm
LCB0ZXN0X21hbmlmZXN0cywgdXJsLCBkaXJlY3Rpb24pOgorICAgICAgICBtYXliZV9wYXRoID0g
b3MucGF0aC5qb2luKG9zLnBhdGguYWJzcGF0aChvcy5jdXJkaXIpLCB1cmwpCisgICAgICAgIHJl
c3QsIGxhc3QgPSBvcy5wYXRoLnNwbGl0KG1heWJlX3BhdGgpCisgICAgICAgIGZyYWdtZW50ID0g
cXVlcnkgPSBOb25lCisgICAgICAgIGlmICIjIiBpbiBsYXN0OgorICAgICAgICAgICAgbGFzdCwg
ZnJhZ21lbnQgPSBsYXN0LnJzcGxpdCgiIyIsIDEpCisgICAgICAgIGlmICI/IiBpbiBsYXN0Ogor
ICAgICAgICAgICAgbGFzdCwgcXVlcnkgPSBsYXN0LnJzcGxpdCgiPyIsIDEpCisKKyAgICAgICAg
bWF5YmVfcGF0aCA9IG9zLnBhdGguam9pbihyZXN0LCBsYXN0KQorICAgICAgICBwYXRocyA9IGds
b2IuZ2xvYihtYXliZV9wYXRoKQorCisgICAgICAgIGlmIHBhdGhzOgorICAgICAgICAgICAgdXJs
cyA9IFtdCisgICAgICAgICAgICBmb3IgcGF0aCBpbiBwYXRoczoKKyAgICAgICAgICAgICAgICBm
b3IgbWFuaWZlc3QsIGRhdGEgaW4gdGVzdF9tYW5pZmVzdHMuaXRlcml0ZW1zKCk6CisgICAgICAg
ICAgICAgICAgICAgIGZvdW5kID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgcmVsX3BhdGgg
PSBvcy5wYXRoLnJlbHBhdGgocGF0aCwgZGF0YVsidGVzdHNfcGF0aCJdKQorICAgICAgICAgICAg
ICAgICAgICBpdGVyYXRvciA9IG1hbmlmZXN0Lml0ZXJwYXRoIGlmIG9zLnBhdGguaXNmaWxlKHBh
dGgpIGVsc2UgbWFuaWZlc3QuaXRlcmRpcgorICAgICAgICAgICAgICAgICAgICBmb3IgdGVzdCBp
biBpdGVyYXRvcihyZWxfcGF0aCk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgaGFz
YXR0cih0ZXN0LCAidXJsIik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUK
KyAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IHRlc3QudXJsCisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiBxdWVyeSBvciBmcmFnbWVudDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwYXJzZWQgPSB1cmxwYXJzZS51cmxwYXJzZSh1cmwpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKChxdWVyeSBhbmQgcXVlcnkgIT0gcGFyc2VkLnF1ZXJ5KSBvcgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoZnJhZ21lbnQgYW5kIGZyYWdtZW50ICE9IHBhcnNlZC5m
cmFnbWVudCkpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAg
ICAgICAgICAgICAgICAgICAgICAgdXJscy5hcHBlbmQodXJsKQorICAgICAgICAgICAgICAgICAg
ICAgICAgZm91bmQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGlmIGZvdW5kOgorICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHVybHMg
PSBbdXJsXQorCisgICAgICAgIGFzc2VydCBkaXJlY3Rpb24gaW4gKCJpbmNsdWRlIiwgImV4Y2x1
ZGUiKQorCisgICAgICAgIGZvciB1cmwgaW4gdXJsczoKKyAgICAgICAgICAgIGNvbXBvbmVudHMg
PSBzZWxmLl9nZXRfY29tcG9uZW50cyh1cmwpCisKKyAgICAgICAgICAgIG5vZGUgPSBzZWxmCisg
ICAgICAgICAgICB3aGlsZSBjb21wb25lbnRzOgorICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9
IGNvbXBvbmVudHMucG9wKCkKKyAgICAgICAgICAgICAgICBpZiBjb21wb25lbnQgbm90IGluIG5v
ZGUuY2hpbGRfbWFwOgorICAgICAgICAgICAgICAgICAgICBuZXdfbm9kZSA9IEluY2x1ZGVNYW5p
ZmVzdChEYXRhTm9kZShjb21wb25lbnQpKQorICAgICAgICAgICAgICAgICAgICBub2RlLmFwcGVu
ZChuZXdfbm9kZSkKKyAgICAgICAgICAgICAgICAgICAgbmV3X25vZGUuc2V0KCJza2lwIiwgbm9k
ZS5nZXQoInNraXAiLCB7fSkpCisKKyAgICAgICAgICAgICAgICBub2RlID0gbm9kZS5jaGlsZF9t
YXBbY29tcG9uZW50XQorCisgICAgICAgICAgICBza2lwID0gRmFsc2UgaWYgZGlyZWN0aW9uID09
ICJpbmNsdWRlIiBlbHNlIFRydWUKKyAgICAgICAgICAgIG5vZGUuc2V0KCJza2lwIiwgc3RyKHNr
aXApKQorCisgICAgZGVmIGFkZF9pbmNsdWRlKHNlbGYsIHRlc3RfbWFuaWZlc3RzLCB1cmxfcHJl
Zml4KToKKyAgICAgICAgIiIiQWRkIGEgcnVsZSBpbmRpY2F0aW5nIHRoYXQgdGVzdHMgdW5kZXIg
YSB1cmwgcGF0aAorICAgICAgICBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGVzdCBydW5zCisKKyAg
ICAgICAgOnBhcmFtIHVybF9wcmVmaXg6IFRoZSB1cmwgcHJlZml4IHRvIGluY2x1ZGUKKyAgICAg
ICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9hZGRfcnVsZSh0ZXN0X21hbmlmZXN0cywgdXJs
X3ByZWZpeCwgImluY2x1ZGUiKQorCisgICAgZGVmIGFkZF9leGNsdWRlKHNlbGYsIHRlc3RfbWFu
aWZlc3RzLCB1cmxfcHJlZml4KToKKyAgICAgICAgIiIiQWRkIGEgcnVsZSBpbmRpY2F0aW5nIHRo
YXQgdGVzdHMgdW5kZXIgYSB1cmwgcGF0aAorICAgICAgICBzaG91bGQgYmUgZXhjbHVkZWQgZnJv
bSB0ZXN0IHJ1bnMKKworICAgICAgICA6cGFyYW0gdXJsX3ByZWZpeDogVGhlIHVybCBwcmVmaXgg
dG8gZXhjbHVkZQorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2FkZF9ydWxlKHRl
c3RfbWFuaWZlc3RzLCB1cmxfcHJlZml4LCAiZXhjbHVkZSIpCisKKworZGVmIGdldF9tYW5pZmVz
dChtYW5pZmVzdF9wYXRoKToKKyAgICB3aXRoIG9wZW4obWFuaWZlc3RfcGF0aCkgYXMgZjoKKyAg
ICAgICAgcmV0dXJuIGNvbmRpdGlvbmFsLmNvbXBpbGUoZiwgZGF0YV9jbHNfZ2V0dGVyPWxhbWJk
YSB4LCB5OiBJbmNsdWRlTWFuaWZlc3QpCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBv
cnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9tYW5pZmVzdHVwZGF0ZS5weSBiL1dl
YkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL21hbmlm
ZXN0dXBkYXRlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wN2U2
MjNjNWQxYgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90
b29scy93cHRydW5uZXIvd3B0cnVubmVyL21hbmlmZXN0dXBkYXRlLnB5CkBAIC0wLDAgKzEsNDYw
IEBACitpbXBvcnQgb3MKK2ltcG9ydCB1cmxwYXJzZQorZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQg
bmFtZWR0dXBsZSwgZGVmYXVsdGRpY3QKKworZnJvbSB3cHRtYW5pZmVzdC5ub2RlIGltcG9ydCAo
RGF0YU5vZGUsIENvbmRpdGlvbmFsTm9kZSwgQmluYXJ5RXhwcmVzc2lvbk5vZGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBCaW5hcnlPcGVyYXRvck5vZGUsIFZhcmlhYmxlTm9kZSwg
U3RyaW5nTm9kZSwgTnVtYmVyTm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVu
YXJ5RXhwcmVzc2lvbk5vZGUsIFVuYXJ5T3BlcmF0b3JOb2RlLCBLZXlWYWx1ZU5vZGUpCitmcm9t
IHdwdG1hbmlmZXN0LmJhY2tlbmRzIGltcG9ydCBjb25kaXRpb25hbAorZnJvbSB3cHRtYW5pZmVz
dC5iYWNrZW5kcy5jb25kaXRpb25hbCBpbXBvcnQgTWFuaWZlc3RJdGVtCisKK2ltcG9ydCBleHBl
Y3RlZAorCisiIiJNYW5pZmVzdCBzdHJ1Y3R1cmUgdXNlZCB0byB1cGRhdGUgdGhlIGV4cGVjdGVk
IHJlc3VsdHMgb2YgYSB0ZXN0CisKK0VhY2ggbWFuaWZlc3QgZmlsZSBpcyByZXByZXNlbnRlZCBi
eSBhbiBFeHBlY3RlZE1hbmlmZXN0IHRoYXQgaGFzIG9uZQorb3IgbW9yZSBUZXN0Tm9kZSBjaGls
ZHJlbiwgb25lIHBlciB0ZXN0IGluIHRoZSBtYW5pZmVzdC4gIEVhY2gKK1Rlc3ROb2RlIGhhcyB6
ZXJvIG9yIG1vcmUgU3VidGVzdE5vZGUgY2hpbGRyZW4sIG9uZSBmb3IgZWFjaCBrbm93bgorc3Vi
dGVzdCBvZiB0aGUgdGVzdC4KKworSW4gdGhlc2UgcmVwcmVzZW50YXRpb25zLCBjb25kaXRpb25h
bHMgZXhwcmVzc2lvbnMgaW4gdGhlIG1hbmlmZXN0IGFyZQorbm90IGV2YWx1YXRlZCB1cGZyb250
IGJ1dCBzdG9yZWQgYXMgcHl0aG9uIGZ1bmN0aW9ucyB0byBiZSBldmFsdWF0ZWQKK2F0IHJ1bnRp
bWUuCisKK1doZW4gYSByZXN1bHQgZm9yIGEgdGVzdCBpcyB0byBiZSB1cGRhdGVkIHNldF9yZXN1
bHQgb24gdGhlCitbU3ViXVRlc3ROb2RlIGlzIGNhbGxlZCB0byBzdG9yZSB0aGUgbmV3IHJlc3Vs
dCwgYWxvbmdzaWRlIHRoZQorZXhpc3RpbmcgY29uZGl0aW9uYWwgdGhhdCByZXN1bHQncyBydW4g
aW5mbyBtYXRjaGVkLCBpZiBhbnkuIE9uY2UgYWxsCituZXcgcmVzdWx0cyBhcmUga25vd24sIGNv
YWxlc2NlX2V4cGVjdGVkIGlzIGNhbGxlZCB0byBjb21wdXRlIHRoZSBuZXcKK3NldCBvZiByZXN1
bHRzIGFuZCBjb25kaXRpb25hbHMuIFRoZSBBU1Qgb2YgdGhlIHVuZGVybHlpbmcgcGFyc2VkIG1h
bmlmZXN0CitpcyB1cGRhdGVkIHdpdGggdGhlIGNoYW5nZXMsIGFuZCB0aGUgcmVzdWx0IGlzIHNl
cmlhbGlzZWQgdG8gYSBmaWxlLgorIiIiCisKK2NsYXNzIENvbmRpdGlvbkVycm9yKEV4Y2VwdGlv
bik6CisgICAgcGFzcworCitSZXN1bHQgPSBuYW1lZHR1cGxlKCJSZXN1bHQiLCBbInJ1bl9pbmZv
IiwgInN0YXR1cyJdKQorCisKK2RlZiBkYXRhX2Nsc19nZXR0ZXIob3V0cHV0X25vZGUsIHZpc2l0
ZWRfbm9kZSk6CisgICAgIyB2aXNpdGVkX25vZGUgaXMgaW50ZW50aW9uYWxseSB1bnVzZWQKKyAg
ICBpZiBvdXRwdXRfbm9kZSBpcyBOb25lOgorICAgICAgICByZXR1cm4gRXhwZWN0ZWRNYW5pZmVz
dAorICAgIGVsaWYgaXNpbnN0YW5jZShvdXRwdXRfbm9kZSwgRXhwZWN0ZWRNYW5pZmVzdCk6Cisg
ICAgICAgIHJldHVybiBUZXN0Tm9kZQorICAgIGVsaWYgaXNpbnN0YW5jZShvdXRwdXRfbm9kZSwg
VGVzdE5vZGUpOgorICAgICAgICByZXR1cm4gU3VidGVzdE5vZGUKKyAgICBlbHNlOgorICAgICAg
ICByYWlzZSBWYWx1ZUVycm9yCisKKworY2xhc3MgRXhwZWN0ZWRNYW5pZmVzdChNYW5pZmVzdEl0
ZW0pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBub2RlLCB0ZXN0X3BhdGg9Tm9uZSwgdXJsX2Jh
c2U9Tm9uZSwgcHJvcGVydHlfb3JkZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgYm9vbGVhbl9w
cm9wZXJ0aWVzPU5vbmUpOgorICAgICAgICAiIiJPYmplY3QgcmVwcmVzZW50aW5nIGFsbCB0aGUg
dGVzdHMgaW4gYSBwYXJ0aWN1bGFyIG1hbmlmZXN0CisKKyAgICAgICAgOnBhcmFtIG5vZGU6IEFT
VCBOb2RlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG9iamVjdC4gSWYgdGhpcyBpcyBOb25lLAorICAg
ICAgICAgICAgICAgICAgICAgYSBuZXcgQVNUIGlzIGNyZWF0ZWQgdG8gYXNzb2NpYXRlIHdpdGgg
dGhpcyBtYW5pZmVzdC4KKyAgICAgICAgOnBhcmFtIHRlc3RfcGF0aDogUGF0aCBvZiB0aGUgdGVz
dCBmaWxlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1hbmlmZXN0LgorICAgICAgICA6cGFyYW0gdXJs
X2Jhc2U6IEJhc2UgdXJsIGZvciBzZXJ2aW5nIHRoZSB0ZXN0cyBpbiB0aGlzIG1hbmlmZXN0Lgor
ICAgICAgICA6cGFyYW0gcHJvcGVydHlfb3JkZXI6IExpc3Qgb2YgcHJvcGVydGllcyB0byB1c2Ug
aW4gZXhwZWN0YXRpb24gbWV0YWRhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
cm9tIG1vc3QgdG8gbGVhc3Qgc2lnbmlmaWNhbnQuCisgICAgICAgIDpwYXJhbSBib29sZWFuX3By
b3BlcnRpZXM6IFNldCBvZiBwcm9wZXJ0aWVzIGluIHByb3BlcnR5X29yZGVyIHRoYXQgc2hvdWxk
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIHRyZWF0ZWQgYXMgYm9vbGVh
bi4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vZGUgaXMgTm9uZToKKyAgICAgICAgICAgIG5v
ZGUgPSBEYXRhTm9kZShOb25lKQorICAgICAgICBNYW5pZmVzdEl0ZW0uX19pbml0X18oc2VsZiwg
bm9kZSkKKyAgICAgICAgc2VsZi5jaGlsZF9tYXAgPSB7fQorICAgICAgICBzZWxmLnRlc3RfcGF0
aCA9IHRlc3RfcGF0aAorICAgICAgICBzZWxmLnVybF9iYXNlID0gdXJsX2Jhc2UKKyAgICAgICAg
YXNzZXJ0IHNlbGYudXJsX2Jhc2UgaXMgbm90IE5vbmUKKyAgICAgICAgc2VsZi5tb2RpZmllZCA9
IEZhbHNlCisgICAgICAgIHNlbGYuYm9vbGVhbl9wcm9wZXJ0aWVzID0gYm9vbGVhbl9wcm9wZXJ0
aWVzCisgICAgICAgIHNlbGYucHJvcGVydHlfb3JkZXIgPSBwcm9wZXJ0eV9vcmRlcgorCisgICAg
ZGVmIGFwcGVuZChzZWxmLCBjaGlsZCk6CisgICAgICAgIE1hbmlmZXN0SXRlbS5hcHBlbmQoc2Vs
ZiwgY2hpbGQpCisgICAgICAgIGlmIGNoaWxkLmlkIGluIHNlbGYuY2hpbGRfbWFwOgorICAgICAg
ICAgICAgcHJpbnQgIldhcm5pbmc6IER1cGxpY2F0ZSBoZWFkaW5nICVzIiAlIGNoaWxkLmlkCisg
ICAgICAgIHNlbGYuY2hpbGRfbWFwW2NoaWxkLmlkXSA9IGNoaWxkCisKKyAgICBkZWYgX3JlbW92
ZV9jaGlsZChzZWxmLCBjaGlsZCk6CisgICAgICAgIGRlbCBzZWxmLmNoaWxkX21hcFtjaGlsZC5p
ZF0KKyAgICAgICAgTWFuaWZlc3RJdGVtLl9yZW1vdmVfY2hpbGQoc2VsZiwgY2hpbGQpCisKKyAg
ICBkZWYgZ2V0X3Rlc3Qoc2VsZiwgdGVzdF9pZCk6CisgICAgICAgICIiIlJldHVybiBhIFRlc3RO
b2RlIGJ5IHRlc3QgaWQsIG9yIE5vbmUgaWYgbm8gdGVzdCBtYXRjaGVzCisKKyAgICAgICAgOnBh
cmFtIHRlc3RfaWQ6IFRoZSBpZCBvZiB0aGUgdGVzdCB0byBsb29rIHVwIiIiCisKKyAgICAgICAg
cmV0dXJuIHNlbGYuY2hpbGRfbWFwW3Rlc3RfaWRdCisKKyAgICBkZWYgaGFzX3Rlc3Qoc2VsZiwg
dGVzdF9pZCk6CisgICAgICAgICIiIkJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBjdXJy
ZW50IHRlc3QgaGFzIGEga25vd24gY2hpbGQgdGVzdAorICAgICAgICB3aXRoIGlkIHRlc3QgaWQK
KworICAgICAgICA6cGFyYW0gdGVzdF9pZDogVGhlIGlkIG9mIHRoZSB0ZXN0IHRvIGxvb2sgdXAi
IiIKKworICAgICAgICByZXR1cm4gdGVzdF9pZCBpbiBzZWxmLmNoaWxkX21hcAorCisgICAgQHBy
b3BlcnR5CisgICAgZGVmIHVybChzZWxmKToKKyAgICAgICAgcmV0dXJuIHVybHBhcnNlLnVybGpv
aW4oc2VsZi51cmxfYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi8iLmpv
aW4oc2VsZi50ZXN0X3BhdGguc3BsaXQob3MucGF0aC5zZXApKSkKKworY2xhc3MgVGVzdE5vZGUo
TWFuaWZlc3RJdGVtKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbm9kZSk6CisgICAgICAgICIi
IlRyZWUgbm9kZSBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1bGFyIHRlc3QgaW4gYSBtYW5pZmVz
dAorCisgICAgICAgIDpwYXJhbSBub2RlOiBBU1Qgbm9kZSBhc3NvY2lhdGVkIHdpdGggdGhlIHRl
c3QiIiIKKworICAgICAgICBNYW5pZmVzdEl0ZW0uX19pbml0X18oc2VsZiwgbm9kZSkKKyAgICAg
ICAgc2VsZi51cGRhdGVkX2V4cGVjdGVkID0gW10KKyAgICAgICAgc2VsZi5uZXdfZXhwZWN0ZWQg
PSBbXQorICAgICAgICBzZWxmLnN1YnRlc3RzID0ge30KKyAgICAgICAgc2VsZi5kZWZhdWx0X3N0
YXR1cyA9IE5vbmUKKyAgICAgICAgc2VsZi5fZnJvbV9maWxlID0gVHJ1ZQorCisgICAgQGNsYXNz
bWV0aG9kCisgICAgZGVmIGNyZWF0ZShjbHMsIHRlc3RfdHlwZSwgdGVzdF9pZCk6CisgICAgICAg
ICIiIkNyZWF0ZSBhIFRlc3ROb2RlIGNvcnJlc3BvbmRpbmcgdG8gYSBnaXZlbiB0ZXN0CisKKyAg
ICAgICAgOnBhcmFtIHRlc3RfdHlwZTogVGhlIHR5cGUgb2YgdGhlIHRlc3QKKyAgICAgICAgOnBh
cmFtIHRlc3RfaWQ6IFRoZSBpZCBvZiB0aGUgdGVzdCIiIgorCisgICAgICAgIHVybCA9IHRlc3Rf
aWQKKyAgICAgICAgbmFtZSA9IHVybC5zcGxpdCgiLyIpWy0xXQorICAgICAgICBub2RlID0gRGF0
YU5vZGUobmFtZSkKKyAgICAgICAgc2VsZiA9IGNscyhub2RlKQorCisgICAgICAgIHNlbGYuc2V0
KCJ0eXBlIiwgdGVzdF90eXBlKQorICAgICAgICBzZWxmLl9mcm9tX2ZpbGUgPSBGYWxzZQorICAg
ICAgICByZXR1cm4gc2VsZgorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGlzX2VtcHR5KHNlbGYp
OgorICAgICAgICByZXF1aXJlZF9rZXlzID0gc2V0KFsidHlwZSJdKQorICAgICAgICBpZiBzZXQo
c2VsZi5fZGF0YS5rZXlzKCkpICE9IHJlcXVpcmVkX2tleXM6CisgICAgICAgICAgICByZXR1cm4g
RmFsc2UKKyAgICAgICAgcmV0dXJuIGFsbChjaGlsZC5pc19lbXB0eSBmb3IgY2hpbGQgaW4gc2Vs
Zi5jaGlsZHJlbikKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB0ZXN0X3R5cGUoc2VsZik6Cisg
ICAgICAgICIiIlRoZSB0eXBlIG9mIHRoZSB0ZXN0IHJlcHJlc2VudGVkIGJ5IHRoaXMgVGVzdE5v
ZGUiIiIKKworICAgICAgICByZXR1cm4gc2VsZi5nZXQoInR5cGUiLCBOb25lKQorCisgICAgQHBy
b3BlcnR5CisgICAgZGVmIGlkKHNlbGYpOgorICAgICAgICAiIiJUaGUgaWQgb2YgdGhlIHRlc3Qg
cmVwcmVzZW50ZWQgYnkgdGhpcyBUZXN0Tm9kZSIiIgorICAgICAgICByZXR1cm4gdXJscGFyc2Uu
dXJsam9pbihzZWxmLnBhcmVudC51cmwsIHNlbGYubmFtZSkKKworICAgIGRlZiBkaXNhYmxlZChz
ZWxmLCBydW5faW5mbyk6CisgICAgICAgICIiIkJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRo
aXMgdGVzdCBpcyBkaXNhYmxlZCB3aGVuIHJ1biBpbiBhbgorICAgICAgICBlbnZpcm9ubWVudCB3
aXRoIHRoZSBnaXZlbiBydW5faW5mbworCisgICAgICAgIDpwYXJhbSBydW5faW5mbzogRGljdGlv
bmFyeSBvZiBydW5faW5mbyBwYXJhbWV0ZXJzIiIiCisKKyAgICAgICAgcmV0dXJuIHNlbGYuZ2V0
KCJkaXNhYmxlZCIsIHJ1bl9pbmZvKSBpcyBub3QgTm9uZQorCisgICAgZGVmIHNldF9yZXN1bHQo
c2VsZiwgcnVuX2luZm8sIHJlc3VsdCk6CisgICAgICAgICIiIlNldCB0aGUgcmVzdWx0IG9mIHRo
ZSB0ZXN0IGluIGEgcGFydGljdWxhciBydW4KKworICAgICAgICA6cGFyYW0gcnVuX2luZm86IERp
Y3Rpb25hcnkgb2YgcnVuX2luZm8gcGFyYW1ldGVycyBjb3JyZXNwb25kaW5nCisgICAgICAgICAg
ICAgICAgICAgICAgICAgdG8gdGhpcyBydW4KKyAgICAgICAgOnBhcmFtIHJlc3VsdDogU3RhdHVz
IG9mIHRoZSB0ZXN0IGluIHRoaXMgcnVuIiIiCisKKyAgICAgICAgaWYgc2VsZi5kZWZhdWx0X3N0
YXR1cyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGFzc2VydCBzZWxmLmRlZmF1bHRfc3RhdHVz
ID09IHJlc3VsdC5kZWZhdWx0X2V4cGVjdGVkCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBz
ZWxmLmRlZmF1bHRfc3RhdHVzID0gcmVzdWx0LmRlZmF1bHRfZXhwZWN0ZWQKKworICAgICAgICAj
IEFkZCB0aGlzIHJlc3VsdCB0byB0aGUgbGlzdCBvZiByZXN1bHRzIHNhdGlzZnlpbmcKKyAgICAg
ICAgIyBhbnkgY29uZGl0aW9uIGluIHRoZSBsaXN0IG9mIHVwZGF0ZWQgcmVzdWx0cyBpdCBtYXRj
aGVzCisgICAgICAgIGZvciAoY29uZCwgdmFsdWVzKSBpbiBzZWxmLnVwZGF0ZWRfZXhwZWN0ZWQ6
CisgICAgICAgICAgICBpZiBjb25kKHJ1bl9pbmZvKToKKyAgICAgICAgICAgICAgICB2YWx1ZXMu
YXBwZW5kKFJlc3VsdChydW5faW5mbywgcmVzdWx0LnN0YXR1cykpCisgICAgICAgICAgICAgICAg
aWYgcmVzdWx0LnN0YXR1cyAhPSBjb25kLnZhbHVlOgorICAgICAgICAgICAgICAgICAgICBzZWxm
LnJvb3QubW9kaWZpZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgICMgV2UgZGlkbid0IGZpbmQgYSBwcmV2aW91cyB2YWx1ZSBmb3IgdGhp
cworICAgICAgICAgICAgc2VsZi5uZXdfZXhwZWN0ZWQuYXBwZW5kKFJlc3VsdChydW5faW5mbywg
cmVzdWx0LnN0YXR1cykpCisgICAgICAgICAgICBzZWxmLnJvb3QubW9kaWZpZWQgPSBUcnVlCisK
KyAgICBkZWYgY29hbGVzY2VfZXhwZWN0ZWQoc2VsZik6CisgICAgICAgICIiIlVwZGF0ZSB0aGUg
dW5kZXJseWluZyBtYW5pZmVzdCBBU1QgZm9yIHRoaXMgdGVzdCBiYXNlZCBvbiBhbGwgdGhlCisg
ICAgICAgIGFkZGVkIHJlc3VsdHMuCisKKyAgICAgICAgVGhpcyB3aWxsIHVwZGF0ZSBleGlzdGlu
ZyBjb25kaXRpb25hbHMgaWYgdGhleSBnb3QgdGhlIHNhbWUgcmVzdWx0IGluCisgICAgICAgIGFs
bCBtYXRjaGluZyBydW5zIGluIHRoZSB1cGRhdGVkIHJlc3VsdHMsIHdpbGwgZGVsZXRlIGV4aXN0
aW5nIGNvbmRpdGlvbmFscworICAgICAgICB0aGF0IGdldCBtb3JlIHRoYW4gb25lIGRpZmZlcmVu
dCByZXN1bHQgaW4gdGhlIHVwZGF0ZWQgcnVuLCBhbmQgYWRkIG5ldworICAgICAgICBjb25kaXRp
b25hbHMgZm9yIGFueXRoaW5nIHRoYXQgZG9lc24ndCBtYXRjaCBhbiBleGlzdGluZyBjb25kaXRp
b25hbC4KKworICAgICAgICBDb25kaXRpb25hbHMgbm90IG1hdGNoZWQgYnkgYW55IGFkZGVkIHJl
c3VsdCBhcmUgbm90IGNoYW5nZWQuIiIiCisKKyAgICAgICAgZmluYWxfY29uZGl0aW9uYWxzID0g
W10KKworICAgICAgICB0cnk6CisgICAgICAgICAgICB1bmNvbmRpdGlvbmFsX3N0YXR1cyA9IHNl
bGYuZ2V0KCJleHBlY3RlZCIpCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAg
IHVuY29uZGl0aW9uYWxfc3RhdHVzID0gc2VsZi5kZWZhdWx0X3N0YXR1cworCisgICAgICAgIGZv
ciBjb25kaXRpb25hbF92YWx1ZSwgcmVzdWx0cyBpbiBzZWxmLnVwZGF0ZWRfZXhwZWN0ZWQ6Cisg
ICAgICAgICAgICBpZiBub3QgcmVzdWx0czoKKyAgICAgICAgICAgICAgICAjIFRoZSBjb25kaXRp
b25hbCBkaWRuJ3QgbWF0Y2ggYW55dGhpbmcgaW4gdGhlc2UgcnVucyBzbyBsZWF2ZSBpdCBhbG9u
ZQorICAgICAgICAgICAgICAgIGZpbmFsX2NvbmRpdGlvbmFscy5hcHBlbmQoY29uZGl0aW9uYWxf
dmFsdWUpCisgICAgICAgICAgICBlbGlmIGFsbChyZXN1bHRzWzBdLnN0YXR1cyA9PSByZXN1bHQu
c3RhdHVzIGZvciByZXN1bHQgaW4gcmVzdWx0cyk6CisgICAgICAgICAgICAgICAgIyBBbGwgdGhl
IG5ldyB2YWx1ZXMgZm9yIHRoaXMgY29uZGl0aW9uYWwgbWF0Y2hlZCwgc28gdXBkYXRlIHRoZSBu
b2RlCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0c1swXQorICAgICAgICAgICAgICAg
IGlmIChyZXN1bHQuc3RhdHVzID09IHVuY29uZGl0aW9uYWxfc3RhdHVzIGFuZAorICAgICAgICAg
ICAgICAgICAgICBjb25kaXRpb25hbF92YWx1ZS5jb25kaXRpb25fbm9kZSBpcyBub3QgTm9uZSk6
CisgICAgICAgICAgICAgICAgICAgIGlmICJleHBlY3RlZCIgaW4gc2VsZjoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHNlbGYucmVtb3ZlX3ZhbHVlKCJleHBlY3RlZCIsIGNvbmRpdGlvbmFsX3Zh
bHVlKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlv
bmFsX3ZhbHVlLnZhbHVlID0gcmVzdWx0LnN0YXR1cworICAgICAgICAgICAgICAgICAgICBmaW5h
bF9jb25kaXRpb25hbHMuYXBwZW5kKGNvbmRpdGlvbmFsX3ZhbHVlKQorICAgICAgICAgICAgZWxp
ZiBjb25kaXRpb25hbF92YWx1ZS5jb25kaXRpb25fbm9kZSBpcyBub3QgTm9uZToKKyAgICAgICAg
ICAgICAgICAjIEJsb3cgYXdheSB0aGUgZXhpc3RpbmcgY29uZGl0aW9uIGFuZCByZWJ1aWxkIGZy
b20gc2NyYXRjaAorICAgICAgICAgICAgICAgICMgVGhpcyBpc24ndCBzdXJlIHRvIHdvcmsgaWYg
d2UgaGF2ZSBhIGNvbmRpdGlvbmFsIGxhdGVyIHRoYXQgbWF0Y2hlcworICAgICAgICAgICAgICAg
ICMgdGhlc2UgdmFsdWVzIHRvbywgYnV0IHdlIGNhbiBob3BlLCB2ZXJpZnkgdGhhdCB3ZSBnZXQg
dGhlIHJlc3VsdHMKKyAgICAgICAgICAgICAgICAjIHdlIGV4cGVjdCwgYW5kIGlmIG5vdCBsZXQg
YSBodW1hbiBzb3J0IGl0IG91dAorICAgICAgICAgICAgICAgIHNlbGYucmVtb3ZlX3ZhbHVlKCJl
eHBlY3RlZCIsIGNvbmRpdGlvbmFsX3ZhbHVlKQorICAgICAgICAgICAgICAgIHNlbGYubmV3X2V4
cGVjdGVkLmV4dGVuZChyZXN1bHRzKQorICAgICAgICAgICAgZWxpZiBjb25kaXRpb25hbF92YWx1
ZS5jb25kaXRpb25fbm9kZSBpcyBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYubmV3X2V4cGVj
dGVkLmV4dGVuZChyZXN1bHQgZm9yIHJlc3VsdCBpbiByZXN1bHRzCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlc3VsdC5zdGF0dXMgIT0gdW5jb25kaXRpb25h
bF9zdGF0dXMpCisKKyAgICAgICAgIyBJdCBpcyBhbiBpbnZhcmlhbnQgdGhhdCBub3RoaW5nIGlu
IG5ld19leHBlY3RlZCBtYXRjaGVzIGFuIGV4aXN0aW5nCisgICAgICAgICMgY29uZGl0aW9uIGV4
Y2VwdCBmb3IgdGhlIGRlZmF1bHQgY29uZGl0aW9uCisKKyAgICAgICAgaWYgc2VsZi5uZXdfZXhw
ZWN0ZWQ6CisgICAgICAgICAgICBpZiBhbGwoc2VsZi5uZXdfZXhwZWN0ZWRbMF0uc3RhdHVzID09
IHJlc3VsdC5zdGF0dXMKKyAgICAgICAgICAgICAgICAgICBmb3IgcmVzdWx0IGluIHNlbGYubmV3
X2V4cGVjdGVkKSBhbmQgbm90IHNlbGYudXBkYXRlZF9leHBlY3RlZDoKKyAgICAgICAgICAgICAg
ICBzdGF0dXMgPSBzZWxmLm5ld19leHBlY3RlZFswXS5zdGF0dXMKKyAgICAgICAgICAgICAgICBp
ZiBzdGF0dXMgIT0gc2VsZi5kZWZhdWx0X3N0YXR1czoKKyAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5zZXQoImV4cGVjdGVkIiwgc3RhdHVzLCBjb25kaXRpb249Tm9uZSkKKyAgICAgICAgICAgICAg
ICAgICAgZmluYWxfY29uZGl0aW9uYWxzLmFwcGVuZChzZWxmLl9kYXRhWyJleHBlY3RlZCJdWy0x
XSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAg
ICAgICAgICBjb25kaXRpb25hbHMgPSBncm91cF9jb25kaXRpb25hbHMoCisgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxmLm5ld19leHBlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBy
b3BlcnR5X29yZGVyPXNlbGYucm9vdC5wcm9wZXJ0eV9vcmRlciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2xlYW5fcHJvcGVydGllcz1zZWxmLnJvb3QuYm9vbGVhbl9wcm9wZXJ0aWVzKQor
ICAgICAgICAgICAgICAgIGV4Y2VwdCBDb25kaXRpb25FcnJvcjoKKyAgICAgICAgICAgICAgICAg
ICAgcHJpbnQgIkNvbmZsaWN0aW5nIHRlc3QgcmVzdWx0cyBmb3IgJXMsIGNhbm5vdCB1cGRhdGUi
ICUgc2VsZi5yb290LnRlc3RfcGF0aAorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAg
ICAgICAgICAgICBmb3IgY29uZGl0aW9uYWxfbm9kZSwgc3RhdHVzIGluIGNvbmRpdGlvbmFsczoK
KyAgICAgICAgICAgICAgICAgICAgaWYgc3RhdHVzICE9IHVuY29uZGl0aW9uYWxfc3RhdHVzOgor
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXQoImV4cGVjdGVkIiwgc3RhdHVzLCBjb25k
aXRpb249Y29uZGl0aW9uYWxfbm9kZS5jaGlsZHJlblswXSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGZpbmFsX2NvbmRpdGlvbmFscy5hcHBlbmQoc2VsZi5fZGF0YVsiZXhwZWN0ZWQiXVstMV0p
CisKKyAgICAgICAgaWYgKCJleHBlY3RlZCIgaW4gc2VsZi5fZGF0YSBhbmQKKyAgICAgICAgICAg
IGxlbihzZWxmLl9kYXRhWyJleHBlY3RlZCJdKSA+IDAgYW5kCisgICAgICAgICAgICBzZWxmLl9k
YXRhWyJleHBlY3RlZCJdWy0xXS5jb25kaXRpb25fbm9kZSBpcyBOb25lIGFuZAorICAgICAgICAg
ICAgc2VsZi5fZGF0YVsiZXhwZWN0ZWQiXVstMV0udmFsdWUgPT0gc2VsZi5kZWZhdWx0X3N0YXR1
cyk6CisKKyAgICAgICAgICAgIHNlbGYucmVtb3ZlX3ZhbHVlKCJleHBlY3RlZCIsIHNlbGYuX2Rh
dGFbImV4cGVjdGVkIl1bLTFdKQorCisgICAgICAgIGlmICgiZXhwZWN0ZWQiIGluIHNlbGYuX2Rh
dGEgYW5kCisgICAgICAgICAgICBsZW4oc2VsZi5fZGF0YVsiZXhwZWN0ZWQiXSkgPT0gMCk6Cisg
ICAgICAgICAgICBmb3IgY2hpbGQgaW4gc2VsZi5ub2RlLmNoaWxkcmVuOgorICAgICAgICAgICAg
ICAgIGlmIChpc2luc3RhbmNlKGNoaWxkLCBLZXlWYWx1ZU5vZGUpIGFuZAorICAgICAgICAgICAg
ICAgICAgICBjaGlsZC5kYXRhID09ICJleHBlY3RlZCIpOgorICAgICAgICAgICAgICAgICAgICBj
aGlsZC5yZW1vdmUoKQorICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgZGVmIF9hZGRf
a2V5X3ZhbHVlKHNlbGYsIG5vZGUsIHZhbHVlcyk6CisgICAgICAgIE1hbmlmZXN0SXRlbS5fYWRk
X2tleV92YWx1ZShzZWxmLCBub2RlLCB2YWx1ZXMpCisgICAgICAgIGlmIG5vZGUuZGF0YSA9PSAi
ZXhwZWN0ZWQiOgorICAgICAgICAgICAgc2VsZi51cGRhdGVkX2V4cGVjdGVkID0gW10KKyAgICAg
ICAgICAgIGZvciB2YWx1ZSBpbiB2YWx1ZXM6CisgICAgICAgICAgICAgICAgc2VsZi51cGRhdGVk
X2V4cGVjdGVkLmFwcGVuZCgodmFsdWUsIFtdKSkKKworICAgIGRlZiBjbGVhcl9leHBlY3RlZChz
ZWxmKToKKyAgICAgICAgIiIiQ2xlYXIgYWxsIHRoZSBleHBlY3RlZCBkYXRhIGZvciB0aGlzIHRl
c3QgYW5kIGFsbCBvZiBpdHMgc3VidGVzdHMiIiIKKworICAgICAgICBzZWxmLnVwZGF0ZWRfZXhw
ZWN0ZWQgPSBbXQorICAgICAgICBpZiAiZXhwZWN0ZWQiIGluIHNlbGYuX2RhdGE6CisgICAgICAg
ICAgICBmb3IgY2hpbGQgaW4gc2VsZi5ub2RlLmNoaWxkcmVuOgorICAgICAgICAgICAgICAgIGlm
IChpc2luc3RhbmNlKGNoaWxkLCBLZXlWYWx1ZU5vZGUpIGFuZAorICAgICAgICAgICAgICAgICAg
ICBjaGlsZC5kYXRhID09ICJleHBlY3RlZCIpOgorICAgICAgICAgICAgICAgICAgICBjaGlsZC5y
ZW1vdmUoKQorICAgICAgICAgICAgICAgICAgICBkZWwgc2VsZi5fZGF0YVsiZXhwZWN0ZWQiXQor
ICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIGZvciBzdWJ0ZXN0IGluIHNlbGYu
c3VidGVzdHMuaXRlcnZhbHVlcygpOgorICAgICAgICAgICAgc3VidGVzdC5jbGVhcl9leHBlY3Rl
ZCgpCisKKyAgICBkZWYgYXBwZW5kKHNlbGYsIG5vZGUpOgorICAgICAgICBjaGlsZCA9IE1hbmlm
ZXN0SXRlbS5hcHBlbmQoc2VsZiwgbm9kZSkKKyAgICAgICAgc2VsZi5zdWJ0ZXN0c1tjaGlsZC5u
YW1lXSA9IGNoaWxkCisKKyAgICBkZWYgZ2V0X3N1YnRlc3Qoc2VsZiwgbmFtZSk6CisgICAgICAg
ICIiIlJldHVybiBhIFN1YnRlc3ROb2RlIGNvcnJlc3BvbmRpbmcgdG8gYSBwYXJ0aWN1bGFyIHN1
YnRlc3Qgb2YKKyAgICAgICAgdGhlIGN1cnJlbnQgdGVzdCwgY3JlYXRpbmcgYSBuZXcgb25lIGlm
IG5vIHN1YnRlc3Qgd2l0aCB0aGF0IG5hbWUKKyAgICAgICAgYWxyZWFkeSBleGlzdHMuCisKKyAg
ICAgICAgOnBhcmFtIG5hbWU6IE5hbWUgb2YgdGhlIHN1YnRlc3QiIiIKKworICAgICAgICBpZiBu
YW1lIGluIHNlbGYuc3VidGVzdHM6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5zdWJ0ZXN0c1tu
YW1lXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3VidGVzdCA9IFN1YnRlc3ROb2RlLmNy
ZWF0ZShuYW1lKQorICAgICAgICAgICAgc2VsZi5hcHBlbmQoc3VidGVzdCkKKyAgICAgICAgICAg
IHJldHVybiBzdWJ0ZXN0CisKKworY2xhc3MgU3VidGVzdE5vZGUoVGVzdE5vZGUpOgorICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBub2RlKToKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2Uobm9kZSwg
RGF0YU5vZGUpCisgICAgICAgIFRlc3ROb2RlLl9faW5pdF9fKHNlbGYsIG5vZGUpCisKKyAgICBA
Y2xhc3NtZXRob2QKKyAgICBkZWYgY3JlYXRlKGNscywgbmFtZSk6CisgICAgICAgIG5vZGUgPSBE
YXRhTm9kZShuYW1lKQorICAgICAgICBzZWxmID0gY2xzKG5vZGUpCisgICAgICAgIHJldHVybiBz
ZWxmCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaXNfZW1wdHkoc2VsZik6CisgICAgICAgIGlm
IHNlbGYuX2RhdGE6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRy
dWUKKworCitkZWYgZ3JvdXBfY29uZGl0aW9uYWxzKHZhbHVlcywgcHJvcGVydHlfb3JkZXI9Tm9u
ZSwgYm9vbGVhbl9wcm9wZXJ0aWVzPU5vbmUpOgorICAgICIiIkdpdmVuIGEgbGlzdCBvZiBSZXN1
bHQgb2JqZWN0cywgcmV0dXJuIGEgbGlzdCBvZgorICAgIChjb25kaXRpb25hbF9ub2RlLCBzdGF0
dXMpIHBhaXJzIHJlcHJlc2VudGluZyB0aGUgY29uZGl0aW9uYWwKKyAgICBleHByZXNzaW9ucyB0
aGF0IGFyZSByZXF1aXJlZCB0byBtYXRjaCBlYWNoIHN0YXR1cworCisgICAgOnBhcmFtIHZhbHVl
czogTGlzdCBvZiBSZXN1bHRzCisgICAgOnBhcmFtIHByb3BlcnR5X29yZGVyOiBMaXN0IG9mIHBy
b3BlcnRpZXMgdG8gdXNlIGluIGV4cGVjdGF0aW9uIG1ldGFkYXRhCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmcm9tIG1vc3QgdG8gbGVhc3Qgc2lnbmlmaWNhbnQuCisgICAgOnBhcmFtIGJv
b2xlYW5fcHJvcGVydGllczogU2V0IG9mIHByb3BlcnRpZXMgaW4gcHJvcGVydHlfb3JkZXIgdGhh
dCBzaG91bGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSB0cmVhdGVkIGFzIGJv
b2xlYW4uIiIiCisKKyAgICBieV9wcm9wZXJ0eSA9IGRlZmF1bHRkaWN0KHNldCkKKyAgICBmb3Ig
cnVuX2luZm8sIHN0YXR1cyBpbiB2YWx1ZXM6CisgICAgICAgIGZvciBwcm9wX25hbWUsIHByb3Bf
dmFsdWUgaW4gcnVuX2luZm8uaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBieV9wcm9wZXJ0eVso
cHJvcF9uYW1lLCBwcm9wX3ZhbHVlKV0uYWRkKHN0YXR1cykKKworICAgIGlmIHByb3BlcnR5X29y
ZGVyIGlzIE5vbmU6CisgICAgICAgIHByb3BlcnR5X29yZGVyID0gWyJkZWJ1ZyIsICJvcyIsICJ2
ZXJzaW9uIiwgInByb2Nlc3NvciIsICJiaXRzIl0KKworICAgIGlmIGJvb2xlYW5fcHJvcGVydGll
cyBpcyBOb25lOgorICAgICAgICBib29sZWFuX3Byb3BlcnRpZXMgPSBzZXQoWyJkZWJ1ZyJdKQor
ICAgIGVsc2U6CisgICAgICAgIGJvb2xlYW5fcHJvcGVydGllcyA9IHNldChib29sZWFuX3Byb3Bl
cnRpZXMpCisKKyAgICAjIElmIHdlIGhhdmUgbW9yZSB0aGFuIG9uZSB2YWx1ZSwgcmVtb3ZlIGFu
eSBwcm9wZXJ0aWVzIHRoYXQgYXJlIGNvbW1vbgorICAgICMgZm9yIGFsbCB0aGUgdmFsdWVzCisg
ICAgaWYgbGVuKHZhbHVlcykgPiAxOgorICAgICAgICBmb3Iga2V5LCBzdGF0dXNlcyBpbiBieV9w
cm9wZXJ0eS5jb3B5KCkuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBpZiBsZW4oc3RhdHVzZXMp
ID09IGxlbih2YWx1ZXMpOgorICAgICAgICAgICAgICAgIGRlbCBieV9wcm9wZXJ0eVtrZXldCisg
ICAgICAgIGlmIG5vdCBieV9wcm9wZXJ0eToKKyAgICAgICAgICAgIHJhaXNlIENvbmRpdGlvbkVy
cm9yCisKKyAgICBwcm9wZXJ0aWVzID0gc2V0KGl0ZW1bMF0gZm9yIGl0ZW0gaW4gYnlfcHJvcGVy
dHkuaXRlcmtleXMoKSkKKyAgICBpbmNsdWRlX3Byb3BzID0gW10KKworICAgIGZvciBwcm9wIGlu
IHByb3BlcnR5X29yZGVyOgorICAgICAgICBpZiBwcm9wIGluIHByb3BlcnRpZXM6CisgICAgICAg
ICAgICBpbmNsdWRlX3Byb3BzLmFwcGVuZChwcm9wKQorCisgICAgY29uZGl0aW9ucyA9IHt9CisK
KyAgICBmb3IgcnVuX2luZm8sIHN0YXR1cyBpbiB2YWx1ZXM6CisgICAgICAgIHByb3Bfc2V0ID0g
dHVwbGUoKHByb3AsIHJ1bl9pbmZvW3Byb3BdKSBmb3IgcHJvcCBpbiBpbmNsdWRlX3Byb3BzKQor
ICAgICAgICBpZiBwcm9wX3NldCBpbiBjb25kaXRpb25zOgorICAgICAgICAgICAgY29udGludWUK
KworICAgICAgICBleHByID0gbWFrZV9leHByKHByb3Bfc2V0LCBzdGF0dXMsIGJvb2xlYW5fcHJv
cGVydGllcz1ib29sZWFuX3Byb3BlcnRpZXMpCisgICAgICAgIGNvbmRpdGlvbnNbcHJvcF9zZXRd
ID0gKGV4cHIsIHN0YXR1cykKKworICAgIHJldHVybiBjb25kaXRpb25zLnZhbHVlcygpCisKKwor
ZGVmIG1ha2VfZXhwcihwcm9wX3NldCwgc3RhdHVzLCBib29sZWFuX3Byb3BlcnRpZXM9Tm9uZSk6
CisgICAgIiIiQ3JlYXRlIGFuIEFTVCB0aGF0IHJldHVybnMgdGhlIHZhbHVlIGBgc3RhdHVzYGAg
Z2l2ZW4gYWxsIHRoZQorICAgIHByb3BlcnRpZXMgaW4gcHJvcF9zZXQgbWF0Y2guCisKKyAgICA6
cGFyYW0gcHJvcF9zZXQ6IHR1cGxlIG9mIChwcm9wZXJ0eSBuYW1lLCB2YWx1ZSkgcGFpcnMgZm9y
IGVhY2gKKyAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5IGluIHRoaXMgZXhwcmVzc2lvbiBh
bmQgdGhlIHZhbHVlIGl0IG11c3QgbWF0Y2gKKyAgICA6cGFyYW0gc3RhdHVzOiBTdGF0dXMgb24g
UkhTIHdoZW4gYWxsIHRoZSBnaXZlbiBwcm9wZXJ0aWVzIG1hdGNoCisgICAgOnBhcmFtIGJvb2xl
YW5fcHJvcGVydGllczogU2V0IG9mIHByb3BlcnRpZXMgaW4gcHJvcGVydHlfb3JkZXIgdGhhdCBz
aG91bGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSB0cmVhdGVkIGFzIGJvb2xl
YW4uCisgICAgIiIiCisgICAgcm9vdCA9IENvbmRpdGlvbmFsTm9kZSgpCisKKyAgICBhc3NlcnQg
bGVuKHByb3Bfc2V0KSA+IDAKKworICAgIGV4cHJlc3Npb25zID0gW10KKyAgICBmb3IgcHJvcCwg
dmFsdWUgaW4gcHJvcF9zZXQ6CisgICAgICAgIG51bWJlcl90eXBlcyA9IChpbnQsIGZsb2F0LCBs
b25nKQorICAgICAgICB2YWx1ZV9jbHMgPSAoTnVtYmVyTm9kZQorICAgICAgICAgICAgICAgICAg
ICAgaWYgdHlwZSh2YWx1ZSkgaW4gbnVtYmVyX3R5cGVzCisgICAgICAgICAgICAgICAgICAgICBl
bHNlIFN0cmluZ05vZGUpCisgICAgICAgIGlmIHByb3Agbm90IGluIGJvb2xlYW5fcHJvcGVydGll
czoKKyAgICAgICAgICAgIGV4cHJlc3Npb25zLmFwcGVuZCgKKyAgICAgICAgICAgICAgICBCaW5h
cnlFeHByZXNzaW9uTm9kZSgKKyAgICAgICAgICAgICAgICAgICAgQmluYXJ5T3BlcmF0b3JOb2Rl
KCI9PSIpLAorICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZU5vZGUocHJvcCksCisgICAgICAg
ICAgICAgICAgICAgIHZhbHVlX2Nscyh1bmljb2RlKHZhbHVlKSkKKyAgICAgICAgICAgICAgICAp
KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgdmFsdWU6CisgICAgICAgICAgICAgICAg
ZXhwcmVzc2lvbnMuYXBwZW5kKFZhcmlhYmxlTm9kZShwcm9wKSkKKyAgICAgICAgICAgIGVsc2U6
CisgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnMuYXBwZW5kKAorICAgICAgICAgICAgICAgICAg
ICBVbmFyeUV4cHJlc3Npb25Ob2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgVW5hcnlPcGVy
YXRvck5vZGUoIm5vdCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVOb2RlKHBy
b3ApCisgICAgICAgICAgICAgICAgICAgICkpCisgICAgaWYgbGVuKGV4cHJlc3Npb25zKSA+IDE6
CisgICAgICAgIHByZXYgPSBleHByZXNzaW9uc1stMV0KKyAgICAgICAgZm9yIGN1cnIgaW4gcmV2
ZXJzZWQoZXhwcmVzc2lvbnNbOi0xXSk6CisgICAgICAgICAgICBub2RlID0gQmluYXJ5RXhwcmVz
c2lvbk5vZGUoCisgICAgICAgICAgICAgICAgQmluYXJ5T3BlcmF0b3JOb2RlKCJhbmQiKSwKKyAg
ICAgICAgICAgICAgICBjdXJyLAorICAgICAgICAgICAgICAgIHByZXYpCisgICAgICAgICAgICBw
cmV2ID0gbm9kZQorICAgIGVsc2U6CisgICAgICAgIG5vZGUgPSBleHByZXNzaW9uc1swXQorCisg
ICAgcm9vdC5hcHBlbmQobm9kZSkKKyAgICByb290LmFwcGVuZChTdHJpbmdOb2RlKHN0YXR1cykp
CisKKyAgICByZXR1cm4gcm9vdAorCisKK2RlZiBnZXRfbWFuaWZlc3QobWV0YWRhdGFfcm9vdCwg
dGVzdF9wYXRoLCB1cmxfYmFzZSwgcHJvcGVydHlfb3JkZXI9Tm9uZSwKKyAgICAgICAgICAgICAg
ICAgYm9vbGVhbl9wcm9wZXJ0aWVzPU5vbmUpOgorICAgICIiIkdldCB0aGUgRXhwZWN0ZWRNYW5p
ZmVzdCBmb3IgYSBwYXJ0aWN1bGFyIHRlc3QgcGF0aCwgb3IgTm9uZSBpZiB0aGVyZSBpcyBubwor
ICAgIG1ldGFkYXRhIHN0b3JlZCBmb3IgdGhhdCB0ZXN0IHBhdGguCisKKyAgICA6cGFyYW0gbWV0
YWRhdGFfcm9vdDogQWJzb2x1dGUgcGF0aCB0byB0aGUgcm9vdCBvZiB0aGUgbWV0YWRhdGEgZGly
ZWN0b3J5CisgICAgOnBhcmFtIHRlc3RfcGF0aDogUGF0aCB0byB0aGUgdGVzdChzKSByZWxhdGl2
ZSB0byB0aGUgdGVzdCByb290CisgICAgOnBhcmFtIHVybF9iYXNlOiBCYXNlIHVybCBmb3Igc2Vy
dmluZyB0aGUgdGVzdHMgaW4gdGhpcyBtYW5pZmVzdAorICAgIDpwYXJhbSBwcm9wZXJ0eV9vcmRl
cjogTGlzdCBvZiBwcm9wZXJ0aWVzIHRvIHVzZSBpbiBleHBlY3RhdGlvbiBtZXRhZGF0YQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBtb3N0IHRvIGxlYXN0IHNpZ25pZmljYW50Lgor
ICAgIDpwYXJhbSBib29sZWFuX3Byb3BlcnRpZXM6IFNldCBvZiBwcm9wZXJ0aWVzIGluIHByb3Bl
cnR5X29yZGVyIHRoYXQgc2hvdWxkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUg
dHJlYXRlZCBhcyBib29sZWFuLiIiIgorICAgIG1hbmlmZXN0X3BhdGggPSBleHBlY3RlZC5leHBl
Y3RlZF9wYXRoKG1ldGFkYXRhX3Jvb3QsIHRlc3RfcGF0aCkKKyAgICB0cnk6CisgICAgICAgIHdp
dGggb3BlbihtYW5pZmVzdF9wYXRoKSBhcyBmOgorICAgICAgICAgICAgcmV0dXJuIGNvbXBpbGUo
ZiwgdGVzdF9wYXRoLCB1cmxfYmFzZSwgcHJvcGVydHlfb3JkZXI9cHJvcGVydHlfb3JkZXIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuX3Byb3BlcnRpZXM9Ym9vbGVhbl9wcm9w
ZXJ0aWVzKQorICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICByZXR1cm4gTm9uZQorCisKK2Rl
ZiBjb21waWxlKG1hbmlmZXN0X2ZpbGUsIHRlc3RfcGF0aCwgdXJsX2Jhc2UsIHByb3BlcnR5X29y
ZGVyPU5vbmUsCisgICAgICAgICAgICBib29sZWFuX3Byb3BlcnRpZXM9Tm9uZSk6CisgICAgcmV0
dXJuIGNvbmRpdGlvbmFsLmNvbXBpbGUobWFuaWZlc3RfZmlsZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhX2Nsc19nZXR0ZXI9ZGF0YV9jbHNfZ2V0dGVyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRlc3RfcGF0aD10ZXN0X3BhdGgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdXJsX2Jhc2U9dXJsX2Jhc2UsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHJvcGVydHlfb3JkZXI9cHJvcGVydHlfb3JkZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbGVhbl9wcm9wZXJ0aWVzPWJvb2xlYW5fcHJvcGVydGllcykK
ZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIv
d3B0cnVubmVyL21ldGFkYXRhLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xz
L3dwdHJ1bm5lci93cHRydW5uZXIvbWV0YWRhdGEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLjczZjI2NmZiOTI4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVy
VGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvbWV0YWRhdGEucHkK
QEAgLTAsMCArMSwzNTEgQEAKK2ltcG9ydCBvcworaW1wb3J0IHNodXRpbAoraW1wb3J0IHN5cwor
aW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdHlwZXMKK2ltcG9ydCB1dWlkCitmcm9tIGNvbGxlY3Rp
b25zIGltcG9ydCBkZWZhdWx0ZGljdAorCitmcm9tIG1vemxvZyBpbXBvcnQgcmVhZGVyCitmcm9t
IG1vemxvZyBpbXBvcnQgc3RydWN0dXJlZGxvZworCitpbXBvcnQgZXhwZWN0ZWQKK2ltcG9ydCBt
YW5pZmVzdHVwZGF0ZQoraW1wb3J0IHRlc3Rsb2FkZXIKK2ltcG9ydCB3cHRtYW5pZmVzdAoraW1w
b3J0IHdwdHRlc3QKK2Zyb20gdmNzIGltcG9ydCBnaXQKK21hbmlmZXN0ID0gTm9uZSAgIyBNb2R1
bGUgdGhhdCB3aWxsIGJlIGltcG9ydGVkIHJlbGF0aXZlIHRvIHRlc3Rfcm9vdAorbWFuaWZlc3Rp
dGVtID0gTm9uZQorCitsb2dnZXIgPSBzdHJ1Y3R1cmVkbG9nLlN0cnVjdHVyZWRMb2dnZXIoIndl
Yi1wbGF0Zm9ybS10ZXN0cyIpCisKKworZGVmIGxvYWRfdGVzdF9tYW5pZmVzdHMoc2VydmVfcm9v
dCwgdGVzdF9wYXRocyk6CisgICAgZG9fZGVsYXllZF9pbXBvcnRzKHNlcnZlX3Jvb3QpCisgICAg
bWFuaWZlc3RfbG9hZGVyID0gdGVzdGxvYWRlci5NYW5pZmVzdExvYWRlcih0ZXN0X3BhdGhzLCBG
YWxzZSkKKyAgICByZXR1cm4gbWFuaWZlc3RfbG9hZGVyLmxvYWQoKQorCisKK2RlZiB1cGRhdGVf
ZXhwZWN0ZWQodGVzdF9wYXRocywgc2VydmVfcm9vdCwgbG9nX2ZpbGVfbmFtZXMsCisgICAgICAg
ICAgICAgICAgICAgIHJldl9vbGQ9Tm9uZSwgcmV2X25ldz0iSEVBRCIsIGlnbm9yZV9leGlzdGlu
Zz1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgc3luY19yb290PU5vbmUsIHByb3BlcnR5X29y
ZGVyPU5vbmUsIGJvb2xlYW5fcHJvcGVydGllcz1Ob25lKToKKyAgICAiIiJVcGRhdGUgdGhlIG1l
dGFkYXRhIGZpbGVzIGZvciB3ZWItcGxhdGZvcm0tdGVzdHMgYmFzZWQgb24KKyAgICB0aGUgcmVz
dWx0cyBvYnRhaW5lZCBpbiBhIHByZXZpb3VzIHJ1biIiIgorCisgICAgbWFuaWZlc3RzID0gbG9h
ZF90ZXN0X21hbmlmZXN0cyhzZXJ2ZV9yb290LCB0ZXN0X3BhdGhzKQorCisgICAgY2hhbmdlX2Rh
dGEgPSB7fQorCisgICAgaWYgc3luY19yb290IGlzIG5vdCBOb25lOgorICAgICAgICBpZiByZXZf
b2xkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV2X29sZCA9IGdpdCgicmV2LXBhcnNlIiwg
cmV2X29sZCwgcmVwbz1zeW5jX3Jvb3QpLnN0cmlwKCkKKyAgICAgICAgcmV2X25ldyA9IGdpdCgi
cmV2LXBhcnNlIiwgcmV2X25ldywgcmVwbz1zeW5jX3Jvb3QpLnN0cmlwKCkKKworICAgICAgICBp
ZiByZXZfb2xkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgY2hhbmdlX2RhdGEgPSBsb2FkX2No
YW5nZV9kYXRhKHJldl9vbGQsIHJldl9uZXcsIHJlcG89c3luY19yb290KQorCisKKyAgICBleHBl
Y3RlZF9tYXBfYnlfbWFuaWZlc3QgPSB1cGRhdGVfZnJvbV9sb2dzKG1hbmlmZXN0cywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpsb2dfZmlsZV9uYW1l
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9y
ZV9leGlzdGluZz1pZ25vcmVfZXhpc3RpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eV9vcmRlcj1wcm9wZXJ0eV9vcmRlciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW5fcHJvcGVy
dGllcz1ib29sZWFuX3Byb3BlcnRpZXMpCisKKyAgICBmb3IgdGVzdF9tYW5pZmVzdCwgZXhwZWN0
ZWRfbWFwIGluIGV4cGVjdGVkX21hcF9ieV9tYW5pZmVzdC5pdGVyaXRlbXMoKToKKyAgICAgICAg
dXJsX2Jhc2UgPSBtYW5pZmVzdHNbdGVzdF9tYW5pZmVzdF1bInVybF9iYXNlIl0KKyAgICAgICAg
bWV0YWRhdGFfcGF0aCA9IHRlc3RfcGF0aHNbdXJsX2Jhc2VdWyJtZXRhZGF0YV9wYXRoIl0KKyAg
ICAgICAgd3JpdGVfY2hhbmdlcyhtZXRhZGF0YV9wYXRoLCBleHBlY3RlZF9tYXApCisKKyAgICBy
ZXN1bHRzX2NoYW5nZWQgPSBbaXRlbS50ZXN0X3BhdGggZm9yIGl0ZW0gaW4gZXhwZWN0ZWRfbWFw
Lml0ZXJ2YWx1ZXMoKSBpZiBpdGVtLm1vZGlmaWVkXQorCisgICAgcmV0dXJuIHVuZXhwZWN0ZWRf
Y2hhbmdlcyhtYW5pZmVzdHMsIGNoYW5nZV9kYXRhLCByZXN1bHRzX2NoYW5nZWQpCisKKworZGVm
IGRvX2RlbGF5ZWRfaW1wb3J0cyhzZXJ2ZV9yb290KToKKyAgICBnbG9iYWwgbWFuaWZlc3QsIG1h
bmlmZXN0aXRlbQorICAgIGZyb20gbWFuaWZlc3QgaW1wb3J0IG1hbmlmZXN0LCBpdGVtIGFzIG1h
bmlmZXN0aXRlbQorCisKK2RlZiBmaWxlc19pbl9yZXBvKHJlcG9fcm9vdCk6CisgICAgcmV0dXJu
IGdpdCgibHMtdHJlZSIsICItciIsICItLW5hbWUtb25seSIsICJIRUFEIikuc3BsaXQoIlxuIikK
KworCitkZWYgcmV2X3JhbmdlKHJldl9vbGQsIHJldl9uZXcsIHN5bW1ldHJpYz1GYWxzZSk6Cisg
ICAgam9pbmVyID0gIi4uIiBpZiBub3Qgc3ltbWV0cmljIGVsc2UgIi4uLiIKKyAgICByZXR1cm4g
IiIuam9pbihbcmV2X29sZCwgam9pbmVyLCByZXZfbmV3XSkKKworCitkZWYgcGF0aHNfY2hhbmdl
ZChyZXZfb2xkLCByZXZfbmV3LCByZXBvKToKKyAgICBkYXRhID0gZ2l0KCJkaWZmIiwgIi0tbmFt
ZS1zdGF0dXMiLCByZXZfcmFuZ2UocmV2X29sZCwgcmV2X25ldyksIHJlcG89cmVwbykKKyAgICBs
aW5lcyA9IFt0dXBsZShpdGVtLnN0cmlwKCkgZm9yIGl0ZW0gaW4gbGluZS5zdHJpcCgpLnNwbGl0
KCJcdCIsIDEpKQorICAgICAgICAgICAgIGZvciBsaW5lIGluIGRhdGEuc3BsaXQoIlxuIikgaWYg
bGluZS5zdHJpcCgpXQorICAgIG91dHB1dCA9IHNldChsaW5lcykKKyAgICByZXR1cm4gb3V0cHV0
CisKKworZGVmIGxvYWRfY2hhbmdlX2RhdGEocmV2X29sZCwgcmV2X25ldywgcmVwbyk6CisgICAg
Y2hhbmdlcyA9IHBhdGhzX2NoYW5nZWQocmV2X29sZCwgcmV2X25ldywgcmVwbykKKyAgICBydiA9
IHt9CisgICAgc3RhdHVzX2tleXMgPSB7Ik0iOiAibW9kaWZpZWQiLAorICAgICAgICAgICAgICAg
ICAgICJBIjogIm5ldyIsCisgICAgICAgICAgICAgICAgICAgIkQiOiAiZGVsZXRlZCJ9CisgICAg
IyBUT0RPOiBkZWFsIHdpdGggcmVuYW1lcworICAgIGZvciBpdGVtIGluIGNoYW5nZXM6CisgICAg
ICAgIHJ2W2l0ZW1bMV1dID0gc3RhdHVzX2tleXNbaXRlbVswXV0KKyAgICByZXR1cm4gcnYKKwor
CitkZWYgdW5leHBlY3RlZF9jaGFuZ2VzKG1hbmlmZXN0cywgY2hhbmdlX2RhdGEsIGZpbGVzX2No
YW5nZWQpOgorICAgIGZpbGVzX2NoYW5nZWQgPSBzZXQoZmlsZXNfY2hhbmdlZCkKKworICAgIHJv
b3RfbWFuaWZlc3QgPSBOb25lCisgICAgZm9yIG1hbmlmZXN0LCBwYXRocyBpbiBtYW5pZmVzdHMu
aXRlcml0ZW1zKCk6CisgICAgICAgIGlmIHBhdGhzWyJ1cmxfYmFzZSJdID09ICIvIjoKKyAgICAg
ICAgICAgIHJvb3RfbWFuaWZlc3QgPSBtYW5pZmVzdAorICAgICAgICAgICAgYnJlYWsKKyAgICBl
bHNlOgorICAgICAgICByZXR1cm4gW10KKworICAgIHJ2ID0gW10KKworICAgIHJldHVybiBbZm4g
Zm9yIF8sIGZuLCBfIGluIHJvb3RfbWFuaWZlc3QgaWYgZm4gaW4gZmlsZXNfY2hhbmdlZCBhbmQg
Y2hhbmdlX2RhdGEuZ2V0KGZuKSAhPSAiTSJdCisKKyMgRm9yIGVhY2ggdGVzdHJ1bgorIyBMb2Fk
IGFsbCBmaWxlcyBhbmQgc2NhbiBmb3IgdGhlIHN1aXRlX3N0YXJ0IGVudHJ5CisjIEJ1aWxkIGEg
aGFzaCBvZiBmaWxlbmFtZTogcHJvcGVydGllcworIyBGb3IgZWFjaCBkaWZmZXJlbnQgc2V0IG9m
IHByb3BlcnRpZXMsIGdhdGhlciBhbGwgY2h1bmtzCisjIEZvciBlYWNoIGNodW5rIGluIHRoZSBz
ZXQgb2YgY2h1bmtzLCBnbyB0aHJvdWdoIGFsbCB0ZXN0cworIyBmb3IgZWFjaCB0ZXN0LCBtYWtl
IGEgbWFwIG9mIHtjb25kaXRpb25hbHM6IFsocGxhdGZvcm0sIG5ld192YWx1ZSldfQorIyBSZXBl
YXQgZm9yIGVhY2ggcGxhdGZvcm0KKyMgRm9yIGVhY2ggdGVzdCBpbiB0aGUgbGlzdCBvZiB0ZXN0
czoKKyMgICBmb3IgZWFjaCBjb25kaXRpb25hbDoKKyMgICAgICBJZiBhbGwgdGhlIG5ldyB2YWx1
ZXMgbWF0Y2ggKG9yIHRoZXJlIGFyZW4ndCBhbnkpIHJldGFpbiB0aGF0IGNvbmRpdGlvbmFsCisj
ICAgICAgSWYgYW55IG5ldyB2YWx1ZXMgbWlzbWF0Y2ggbWFyayB0aGUgdGVzdCBhcyBuZWVkaW5n
IGh1bWFuIGF0dGVudGlvbgorIyAgIENoZWNrIGlmIGFsbCB0aGUgUkhTIHZhbHVlcyBhcmUgdGhl
IHNhbWU7IGlmIHNvIGNvbGxhcHNlIHRoZSBjb25kaXRpb25hbHMKKworCitkZWYgdXBkYXRlX2Zy
b21fbG9ncyhtYW5pZmVzdHMsICpsb2dfZmlsZW5hbWVzLCAqKmt3YXJncyk6CisgICAgaWdub3Jl
X2V4aXN0aW5nID0ga3dhcmdzLmdldCgiaWdub3JlX2V4aXN0aW5nIiwgRmFsc2UpCisgICAgcHJv
cGVydHlfb3JkZXIgPSBrd2FyZ3MuZ2V0KCJwcm9wZXJ0eV9vcmRlciIpCisgICAgYm9vbGVhbl9w
cm9wZXJ0aWVzID0ga3dhcmdzLmdldCgiYm9vbGVhbl9wcm9wZXJ0aWVzIikKKworICAgIGV4cGVj
dGVkX21hcCA9IHt9CisgICAgaWRfdGVzdF9tYXAgPSB7fQorCisgICAgZm9yIHRlc3RfbWFuaWZl
c3QsIHBhdGhzIGluIG1hbmlmZXN0cy5pdGVyaXRlbXMoKToKKyAgICAgICAgZXhwZWN0ZWRfbWFw
X21hbmlmZXN0LCBpZF9wYXRoX21hcF9tYW5pZmVzdCA9IGNyZWF0ZV90ZXN0X3RyZWUoCisgICAg
ICAgICAgICBwYXRoc1sibWV0YWRhdGFfcGF0aCJdLAorICAgICAgICAgICAgdGVzdF9tYW5pZmVz
dCwKKyAgICAgICAgICAgIHByb3BlcnR5X29yZGVyPXByb3BlcnR5X29yZGVyLAorICAgICAgICAg
ICAgYm9vbGVhbl9wcm9wZXJ0aWVzPWJvb2xlYW5fcHJvcGVydGllcykKKyAgICAgICAgZXhwZWN0
ZWRfbWFwW3Rlc3RfbWFuaWZlc3RdID0gZXhwZWN0ZWRfbWFwX21hbmlmZXN0CisgICAgICAgIGlk
X3Rlc3RfbWFwLnVwZGF0ZShpZF9wYXRoX21hcF9tYW5pZmVzdCkKKworICAgIHVwZGF0ZXIgPSBF
eHBlY3RlZFVwZGF0ZXIobWFuaWZlc3RzLCBleHBlY3RlZF9tYXAsIGlkX3Rlc3RfbWFwLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlX2V4aXN0aW5nPWlnbm9yZV9leGlzdGlu
ZykKKyAgICBmb3IgbG9nX2ZpbGVuYW1lIGluIGxvZ19maWxlbmFtZXM6CisgICAgICAgIHdpdGgg
b3Blbihsb2dfZmlsZW5hbWUpIGFzIGY6CisgICAgICAgICAgICB1cGRhdGVyLnVwZGF0ZV9mcm9t
X2xvZyhmKQorCisgICAgZm9yIG1hbmlmZXN0X2V4cGVjdGVkIGluIGV4cGVjdGVkX21hcC5pdGVy
dmFsdWVzKCk6CisgICAgICAgIGZvciB0cmVlIGluIG1hbmlmZXN0X2V4cGVjdGVkLml0ZXJ2YWx1
ZXMoKToKKyAgICAgICAgICAgIGZvciB0ZXN0IGluIHRyZWUuaXRlcmNoaWxkcmVuKCk6CisgICAg
ICAgICAgICAgICAgZm9yIHN1YnRlc3QgaW4gdGVzdC5pdGVyY2hpbGRyZW4oKToKKyAgICAgICAg
ICAgICAgICAgICAgc3VidGVzdC5jb2FsZXNjZV9leHBlY3RlZCgpCisgICAgICAgICAgICAgICAg
dGVzdC5jb2FsZXNjZV9leHBlY3RlZCgpCisKKyAgICByZXR1cm4gZXhwZWN0ZWRfbWFwCisKK2Rl
ZiBkaXJlY3RvcnlfbWFuaWZlc3RzKG1ldGFkYXRhX3BhdGgpOgorICAgIHJ2ID0gW10KKyAgICBm
b3IgZGlycGF0aCwgZGlybmFtZSwgZmlsZW5hbWVzIGluIG9zLndhbGsobWV0YWRhdGFfcGF0aCk6
CisgICAgICAgIGlmICJfX2Rpcl9fLmluaSIgaW4gZmlsZW5hbWVzOgorICAgICAgICAgICAgcmVs
X3BhdGggPSBvcy5wYXRoLnJlbHBhdGgoZGlycGF0aCwgbWV0YWRhdGFfcGF0aCkKKyAgICAgICAg
ICAgIHJ2LmFwcGVuZChvcy5wYXRoLmpvaW4ocmVsX3BhdGgsICJfX2Rpcl9fLmluaSIpKQorICAg
IHJldHVybiBydgorCitkZWYgd3JpdGVfY2hhbmdlcyhtZXRhZGF0YV9wYXRoLCBleHBlY3RlZF9t
YXApOgorICAgICMgRmlyc3Qgd3JpdGUgdGhlIG5ldyBtYW5pZmVzdCBmaWxlcyB0byBhIHRlbXBv
cmFyeSBkaXJlY3RvcnkKKyAgICB0ZW1wX3BhdGggPSB0ZW1wZmlsZS5ta2R0ZW1wKGRpcj1vcy5w
YXRoLnNwbGl0KG1ldGFkYXRhX3BhdGgpWzBdKQorICAgIHdyaXRlX25ld19leHBlY3RlZCh0ZW1w
X3BhdGgsIGV4cGVjdGVkX21hcCkKKworICAgICMgS2VlcCBhbGwgX19kaXJfXy5pbmkgZmlsZXMg
KHRoZXNlIGFyZSBub3QgaW4gZXhwZWN0ZWRfbWFwIGJlY2F1c2UgdGhleQorICAgICMgYXJlbid0
IGFzc29jaWF0ZWQgd2l0aCBhIHNwZWNpZmljIHRlc3QpCisgICAga2VlcF9maWxlcyA9IGRpcmVj
dG9yeV9tYW5pZmVzdHMobWV0YWRhdGFfcGF0aCkKKworICAgICMgQ29weSBhbGwgZmlsZXMgaW4g
dGhlIHJvb3QgdG8gdGhlIHRlbXBvcmFyeSBsb2NhdGlvbiBzaW5jZQorICAgICMgdGhlc2UgY2Fu
bm90IGJlIGluaSBmaWxlcworICAgIGtlZXBfZmlsZXMuZXh0ZW5kKGl0ZW0gZm9yIGl0ZW0gaW4g
b3MubGlzdGRpcihtZXRhZGF0YV9wYXRoKSBpZgorICAgICAgICAgICAgICAgICAgICAgIG5vdCBv
cy5wYXRoLmlzZGlyKG9zLnBhdGguam9pbihtZXRhZGF0YV9wYXRoLCBpdGVtKSkpCisKKyAgICBm
b3IgaXRlbSBpbiBrZWVwX2ZpbGVzOgorICAgICAgICBkZXN0X2RpciA9IG9zLnBhdGguZGlybmFt
ZShvcy5wYXRoLmpvaW4odGVtcF9wYXRoLCBpdGVtKSkKKyAgICAgICAgaWYgbm90IG9zLnBhdGgu
ZXhpc3RzKGRlc3RfZGlyKToKKyAgICAgICAgICAgIG9zLm1ha2VkaXJzKGRlc3RfZGlyKQorICAg
ICAgICBzaHV0aWwuY29weWZpbGUob3MucGF0aC5qb2luKG1ldGFkYXRhX3BhdGgsIGl0ZW0pLAor
ICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHRlbXBfcGF0aCwgaXRlbSkpCisK
KyAgICAjIFRoZW4gbW92ZSB0aGUgb2xkIG1hbmlmZXN0IGZpbGVzIHRvIGEgbmV3IGxvY2F0aW9u
CisgICAgdGVtcF9wYXRoXzIgPSBtZXRhZGF0YV9wYXRoICsgc3RyKHV1aWQudXVpZDQoKSkKKyAg
ICBvcy5yZW5hbWUobWV0YWRhdGFfcGF0aCwgdGVtcF9wYXRoXzIpCisgICAgIyBNb3ZlIHRoZSBu
ZXcgZmlsZXMgdG8gdGhlIGRlc3RpbmF0aW9uIGxvY2F0aW9uIGFuZCByZW1vdmUgdGhlIG9sZCBm
aWxlcworICAgIG9zLnJlbmFtZSh0ZW1wX3BhdGgsIG1ldGFkYXRhX3BhdGgpCisgICAgc2h1dGls
LnJtdHJlZSh0ZW1wX3BhdGhfMikKKworCitkZWYgd3JpdGVfbmV3X2V4cGVjdGVkKG1ldGFkYXRh
X3BhdGgsIGV4cGVjdGVkX21hcCk6CisgICAgIyBTZXJpYWxpemUgdGhlIGRhdGEgYmFjayB0byBh
IGZpbGUKKyAgICBmb3IgdHJlZSBpbiBleHBlY3RlZF9tYXAuaXRlcnZhbHVlcygpOgorICAgICAg
ICBpZiBub3QgdHJlZS5pc19lbXB0eToKKyAgICAgICAgICAgIG1hbmlmZXN0X3N0ciA9IHdwdG1h
bmlmZXN0LnNlcmlhbGl6ZSh0cmVlLm5vZGUsIHNraXBfZW1wdHlfZGF0YT1UcnVlKQorICAgICAg
ICAgICAgYXNzZXJ0IG1hbmlmZXN0X3N0ciAhPSAiIgorICAgICAgICAgICAgcGF0aCA9IGV4cGVj
dGVkLmV4cGVjdGVkX3BhdGgobWV0YWRhdGFfcGF0aCwgdHJlZS50ZXN0X3BhdGgpCisgICAgICAg
ICAgICBkaXIgPSBvcy5wYXRoLnNwbGl0KHBhdGgpWzBdCisgICAgICAgICAgICBpZiBub3Qgb3Mu
cGF0aC5leGlzdHMoZGlyKToKKyAgICAgICAgICAgICAgICBvcy5tYWtlZGlycyhkaXIpCisgICAg
ICAgICAgICB3aXRoIG9wZW4ocGF0aCwgIndiIikgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndy
aXRlKG1hbmlmZXN0X3N0cikKKworCitjbGFzcyBFeHBlY3RlZFVwZGF0ZXIob2JqZWN0KToKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgdGVzdF9tYW5pZmVzdHMsIGV4cGVjdGVkX3RyZWUsIGlkX3Bh
dGhfbWFwLCBpZ25vcmVfZXhpc3Rpbmc9RmFsc2UpOgorICAgICAgICBzZWxmLnRlc3RfbWFuaWZl
c3RzID0gdGVzdF9tYW5pZmVzdHMKKyAgICAgICAgc2VsZi5leHBlY3RlZF90cmVlID0gZXhwZWN0
ZWRfdHJlZQorICAgICAgICBzZWxmLmlkX3BhdGhfbWFwID0gaWRfcGF0aF9tYXAKKyAgICAgICAg
c2VsZi5pZ25vcmVfZXhpc3RpbmcgPSBpZ25vcmVfZXhpc3RpbmcKKyAgICAgICAgc2VsZi5ydW5f
aW5mbyA9IE5vbmUKKyAgICAgICAgc2VsZi5hY3Rpb25fbWFwID0geyJzdWl0ZV9zdGFydCI6IHNl
bGYuc3VpdGVfc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9zdGFydCI6
IHNlbGYudGVzdF9zdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0X3N0YXR1
cyI6IHNlbGYudGVzdF9zdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9l
bmQiOiBzZWxmLnRlc3RfZW5kfQorICAgICAgICBzZWxmLnRlc3RzX3Zpc2l0ZWQgPSB7fQorCisg
ICAgICAgIHNlbGYudGVzdF9jYWNoZSA9IHt9CisKKyAgICBkZWYgdXBkYXRlX2Zyb21fbG9nKHNl
bGYsIGxvZ19maWxlKToKKyAgICAgICAgc2VsZi5ydW5faW5mbyA9IE5vbmUKKyAgICAgICAgbG9n
X3JlYWRlciA9IHJlYWRlci5yZWFkKGxvZ19maWxlKQorICAgICAgICByZWFkZXIuZWFjaF9sb2co
bG9nX3JlYWRlciwgc2VsZi5hY3Rpb25fbWFwKQorCisgICAgZGVmIHN1aXRlX3N0YXJ0KHNlbGYs
IGRhdGEpOgorICAgICAgICBzZWxmLnJ1bl9pbmZvID0gZGF0YVsicnVuX2luZm8iXQorCisgICAg
ZGVmIHRlc3RfaWQoc2VsZiwgaWQpOgorICAgICAgICBpZiB0eXBlKGlkKSBpbiB0eXBlcy5TdHJp
bmdUeXBlczoKKyAgICAgICAgICAgIHJldHVybiBpZAorICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgcmV0dXJuIHR1cGxlKGlkKQorCisgICAgZGVmIHRlc3Rfc3RhcnQoc2VsZiwgZGF0YSk6Cisg
ICAgICAgIHRlc3RfaWQgPSBzZWxmLnRlc3RfaWQoZGF0YVsidGVzdCJdKQorICAgICAgICB0cnk6
CisgICAgICAgICAgICB0ZXN0X21hbmlmZXN0LCB0ZXN0ID0gc2VsZi5pZF9wYXRoX21hcFt0ZXN0
X2lkXQorICAgICAgICAgICAgZXhwZWN0ZWRfbm9kZSA9IHNlbGYuZXhwZWN0ZWRfdHJlZVt0ZXN0
X21hbmlmZXN0XVt0ZXN0XS5nZXRfdGVzdCh0ZXN0X2lkKQorICAgICAgICBleGNlcHQgS2V5RXJy
b3I6CisgICAgICAgICAgICBwcmludCAiVGVzdCBub3QgZm91bmQgJXMsIHNraXBwaW5nIiAlIHRl
c3RfaWQKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLnRlc3RfY2FjaGVbdGVzdF9p
ZF0gPSBleHBlY3RlZF9ub2RlCisKKyAgICAgICAgaWYgdGVzdF9pZCBub3QgaW4gc2VsZi50ZXN0
c192aXNpdGVkOgorICAgICAgICAgICAgaWYgc2VsZi5pZ25vcmVfZXhpc3Rpbmc6CisgICAgICAg
ICAgICAgICAgZXhwZWN0ZWRfbm9kZS5jbGVhcl9leHBlY3RlZCgpCisgICAgICAgICAgICBzZWxm
LnRlc3RzX3Zpc2l0ZWRbdGVzdF9pZF0gPSBzZXQoKQorCisgICAgZGVmIHRlc3Rfc3RhdHVzKHNl
bGYsIGRhdGEpOgorICAgICAgICB0ZXN0X2lkID0gc2VsZi50ZXN0X2lkKGRhdGFbInRlc3QiXSkK
KyAgICAgICAgdGVzdCA9IHNlbGYudGVzdF9jYWNoZS5nZXQodGVzdF9pZCkKKyAgICAgICAgaWYg
dGVzdCBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHRlc3RfY2xzID0gd3B0
dGVzdC5tYW5pZmVzdF90ZXN0X2Nsc1t0ZXN0LnRlc3RfdHlwZV0KKworICAgICAgICBzdWJ0ZXN0
ID0gdGVzdC5nZXRfc3VidGVzdChkYXRhWyJzdWJ0ZXN0Il0pCisKKyAgICAgICAgc2VsZi50ZXN0
c192aXNpdGVkW3Rlc3QuaWRdLmFkZChkYXRhWyJzdWJ0ZXN0Il0pCisKKyAgICAgICAgcmVzdWx0
ID0gdGVzdF9jbHMuc3VidGVzdF9yZXN1bHRfY2xzKAorICAgICAgICAgICAgZGF0YVsic3VidGVz
dCJdLAorICAgICAgICAgICAgZGF0YVsic3RhdHVzIl0sCisgICAgICAgICAgICBkYXRhLmdldCgi
bWVzc2FnZSIpKQorCisgICAgICAgIHN1YnRlc3Quc2V0X3Jlc3VsdChzZWxmLnJ1bl9pbmZvLCBy
ZXN1bHQpCisKKyAgICBkZWYgdGVzdF9lbmQoc2VsZiwgZGF0YSk6CisgICAgICAgIHRlc3RfaWQg
PSBzZWxmLnRlc3RfaWQoZGF0YVsidGVzdCJdKQorICAgICAgICB0ZXN0ID0gc2VsZi50ZXN0X2Nh
Y2hlLmdldCh0ZXN0X2lkKQorICAgICAgICBpZiB0ZXN0IGlzIE5vbmU6CisgICAgICAgICAgICBy
ZXR1cm4KKyAgICAgICAgdGVzdF9jbHMgPSB3cHR0ZXN0Lm1hbmlmZXN0X3Rlc3RfY2xzW3Rlc3Qu
dGVzdF90eXBlXQorCisgICAgICAgIGlmIGRhdGFbInN0YXR1cyJdID09ICJTS0lQIjoKKyAgICAg
ICAgICAgIHJldHVybgorCisgICAgICAgIHJlc3VsdCA9IHRlc3RfY2xzLnJlc3VsdF9jbHMoCisg
ICAgICAgICAgICBkYXRhWyJzdGF0dXMiXSwKKyAgICAgICAgICAgIGRhdGEuZ2V0KCJtZXNzYWdl
IikpCisKKyAgICAgICAgdGVzdC5zZXRfcmVzdWx0KHNlbGYucnVuX2luZm8sIHJlc3VsdCkKKyAg
ICAgICAgZGVsIHNlbGYudGVzdF9jYWNoZVt0ZXN0X2lkXQorCisKK2RlZiBjcmVhdGVfdGVzdF90
cmVlKG1ldGFkYXRhX3BhdGgsIHRlc3RfbWFuaWZlc3QsIHByb3BlcnR5X29yZGVyPU5vbmUsCisg
ICAgICAgICAgICAgICAgICAgICBib29sZWFuX3Byb3BlcnRpZXM9Tm9uZSk6CisgICAgZXhwZWN0
ZWRfbWFwID0ge30KKyAgICBpZF90ZXN0X21hcCA9IHt9CisgICAgZXhjbHVkZV90eXBlcyA9IGZy
b3plbnNldChbInN0dWIiLCAiaGVscGVyIiwgIm1hbnVhbCIsICJzdXBwb3J0IiwgImNvbmZvcm1h
bmNlY2hlY2tlciJdKQorICAgIGFsbF90eXBlcyA9IFtpdGVtLml0ZW1fdHlwZSBmb3IgaXRlbSBp
biBtYW5pZmVzdGl0ZW0uX19kaWN0X18uaXRlcnZhbHVlcygpCisgICAgICAgICAgICAgICAgIGlm
IHR5cGUoaXRlbSkgPT0gdHlwZSBhbmQKKyAgICAgICAgICAgICAgICAgaXNzdWJjbGFzcyhpdGVt
LCBtYW5pZmVzdGl0ZW0uTWFuaWZlc3RJdGVtKSBhbmQKKyAgICAgICAgICAgICAgICAgaXRlbS5p
dGVtX3R5cGUgaXMgbm90IE5vbmVdCisgICAgaW5jbHVkZV90eXBlcyA9IHNldChhbGxfdHlwZXMp
IC0gZXhjbHVkZV90eXBlcworICAgIGZvciBfLCB0ZXN0X3BhdGgsIHRlc3RzIGluIHRlc3RfbWFu
aWZlc3QuaXRlcnR5cGVzKCppbmNsdWRlX3R5cGVzKToKKyAgICAgICAgZXhwZWN0ZWRfZGF0YSA9
IGxvYWRfZXhwZWN0ZWQodGVzdF9tYW5pZmVzdCwgbWV0YWRhdGFfcGF0aCwgdGVzdF9wYXRoLCB0
ZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlfb3Jk
ZXI9cHJvcGVydHlfb3JkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2xlYW5fcHJvcGVydGllcz1ib29sZWFuX3Byb3BlcnRpZXMpCisgICAgICAgIGlmIGV4cGVj
dGVkX2RhdGEgaXMgTm9uZToKKyAgICAgICAgICAgIGV4cGVjdGVkX2RhdGEgPSBjcmVhdGVfZXhw
ZWN0ZWQodGVzdF9tYW5pZmVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGVzdF9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0ZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHJvcGVydHlfb3JkZXI9cHJvcGVydHlfb3JkZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW5fcHJvcGVydGllcz1ib29sZWFuX3Byb3BlcnRp
ZXMpCisKKyAgICAgICAgZm9yIHRlc3QgaW4gdGVzdHM6CisgICAgICAgICAgICBpZF90ZXN0X21h
cFt0ZXN0LmlkXSA9ICh0ZXN0X21hbmlmZXN0LCB0ZXN0KQorICAgICAgICAgICAgZXhwZWN0ZWRf
bWFwW3Rlc3RdID0gZXhwZWN0ZWRfZGF0YQorCisgICAgcmV0dXJuIGV4cGVjdGVkX21hcCwgaWRf
dGVzdF9tYXAKKworCitkZWYgY3JlYXRlX2V4cGVjdGVkKHRlc3RfbWFuaWZlc3QsIHRlc3RfcGF0
aCwgdGVzdHMsIHByb3BlcnR5X29yZGVyPU5vbmUsCisgICAgICAgICAgICAgICAgICAgIGJvb2xl
YW5fcHJvcGVydGllcz1Ob25lKToKKyAgICBleHBlY3RlZCA9IG1hbmlmZXN0dXBkYXRlLkV4cGVj
dGVkTWFuaWZlc3QoTm9uZSwgdGVzdF9wYXRoLCB0ZXN0X21hbmlmZXN0LnVybF9iYXNlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eV9vcmRl
cj1wcm9wZXJ0eV9vcmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbGVhbl9wcm9wZXJ0aWVzPWJvb2xlYW5fcHJvcGVydGllcykKKyAgICBmb3Ig
dGVzdCBpbiB0ZXN0czoKKyAgICAgICAgZXhwZWN0ZWQuYXBwZW5kKG1hbmlmZXN0dXBkYXRlLlRl
c3ROb2RlLmNyZWF0ZSh0ZXN0Lml0ZW1fdHlwZSwgdGVzdC5pZCkpCisgICAgcmV0dXJuIGV4cGVj
dGVkCisKKworZGVmIGxvYWRfZXhwZWN0ZWQodGVzdF9tYW5pZmVzdCwgbWV0YWRhdGFfcGF0aCwg
dGVzdF9wYXRoLCB0ZXN0cywgcHJvcGVydHlfb3JkZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAg
IGJvb2xlYW5fcHJvcGVydGllcz1Ob25lKToKKyAgICBleHBlY3RlZF9tYW5pZmVzdCA9IG1hbmlm
ZXN0dXBkYXRlLmdldF9tYW5pZmVzdChtZXRhZGF0YV9wYXRoLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfcGF0aCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X21hbmlmZXN0LnVy
bF9iYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHByb3BlcnR5X29yZGVyPXByb3BlcnR5X29yZGVyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW5fcHJvcGVydGllcz1ib29sZWFu
X3Byb3BlcnRpZXMpCisgICAgaWYgZXhwZWN0ZWRfbWFuaWZlc3QgaXMgTm9uZToKKyAgICAgICAg
cmV0dXJuCisKKyAgICB0ZXN0c19ieV9pZCA9IHtpdGVtLmlkOiBpdGVtIGZvciBpdGVtIGluIHRl
c3RzfQorCisgICAgIyBSZW1vdmUgZXhwZWN0ZWQgZGF0YSBmb3IgdGVzdHMgdGhhdCBubyBsb25n
ZXIgZXhpc3QKKyAgICBmb3IgdGVzdCBpbiBleHBlY3RlZF9tYW5pZmVzdC5pdGVyY2hpbGRyZW4o
KToKKyAgICAgICAgaWYgbm90IHRlc3QuaWQgaW4gdGVzdHNfYnlfaWQ6CisgICAgICAgICAgICB0
ZXN0LnJlbW92ZSgpCisKKyAgICAjIEFkZCB0ZXN0cyB0aGF0IGRvbid0IGhhdmUgZXhwZWN0ZWQg
ZGF0YQorICAgIGZvciB0ZXN0IGluIHRlc3RzOgorICAgICAgICBpZiBub3QgZXhwZWN0ZWRfbWFu
aWZlc3QuaGFzX3Rlc3QodGVzdC5pZCk6CisgICAgICAgICAgICBleHBlY3RlZF9tYW5pZmVzdC5h
cHBlbmQobWFuaWZlc3R1cGRhdGUuVGVzdE5vZGUuY3JlYXRlKHRlc3QuaXRlbV90eXBlLCB0ZXN0
LmlkKSkKKworICAgIHJldHVybiBleHBlY3RlZF9tYW5pZmVzdApkaWZmIC0tZ2l0IGEvV2ViRHJp
dmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvcHJvZHVjdHMu
cHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5l
ci9wcm9kdWN0cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYzA3
N2Y5NWRmZDkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mv
dG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9wcm9kdWN0cy5weQpAQCAtMCwwICsxLDY5IEBACitp
bXBvcnQgb3MKK2ltcG9ydCBpbXBvcnRsaWIKK2ltcG9ydCBpbXAKKworZnJvbSAuYnJvd3NlcnMg
aW1wb3J0IHByb2R1Y3RfbGlzdAorCitkZWYgcHJvZHVjdHNfZW5hYmxlZChjb25maWcpOgorICAg
IG5hbWVzID0gY29uZmlnLmdldCgicHJvZHVjdHMiLCB7fSkua2V5cygpCisgICAgaWYgbm90IG5h
bWVzOgorICAgICAgICByZXR1cm4gcHJvZHVjdF9saXN0CisgICAgZWxzZToKKyAgICAgICAgcmV0
dXJuIG5hbWVzCisKK2RlZiBwcm9kdWN0X21vZHVsZShjb25maWcsIHByb2R1Y3QpOgorICAgIGhl
cmUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5zcGxpdChfX2ZpbGVfXylbMF0pCisgICAgcHJvZHVj
dF9kaXIgPSBvcy5wYXRoLmpvaW4oaGVyZSwgImJyb3dzZXJzIikKKworICAgIGlmIHByb2R1Y3Qg
bm90IGluIHByb2R1Y3RzX2VuYWJsZWQoY29uZmlnKToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJv
cigiVW5rbm93biBwcm9kdWN0ICVzIiAlIHByb2R1Y3QpCisKKyAgICBwYXRoID0gY29uZmlnLmdl
dCgicHJvZHVjdHMiLCB7fSkuZ2V0KHByb2R1Y3QsIE5vbmUpCisgICAgaWYgcGF0aDoKKyAgICAg
ICAgbW9kdWxlID0gaW1wLmxvYWRfc291cmNlKCd3cHRydW5uZXIuYnJvd3NlcnMuJyArIHByb2R1
Y3QsIHBhdGgpCisgICAgZWxzZToKKyAgICAgICAgbW9kdWxlID0gaW1wb3J0bGliLmltcG9ydF9t
b2R1bGUoIndwdHJ1bm5lci5icm93c2Vycy4iICsgcHJvZHVjdCkKKworICAgIGlmIG5vdCBoYXNh
dHRyKG1vZHVsZSwgIl9fd3B0cnVubmVyX18iKToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigi
UHJvZHVjdCBtb2R1bGUgZG9lcyBub3QgZGVmaW5lIF9fd3B0cnVubmVyX18gdmFyaWFibGUiKQor
CisgICAgcmV0dXJuIG1vZHVsZQorCisKK2RlZiBsb2FkX3Byb2R1Y3QoY29uZmlnLCBwcm9kdWN0
KToKKyAgICBtb2R1bGUgPSBwcm9kdWN0X21vZHVsZShjb25maWcsIHByb2R1Y3QpCisgICAgZGF0
YSA9IG1vZHVsZS5fX3dwdHJ1bm5lcl9fCisKKyAgICBjaGVja19hcmdzID0gZ2V0YXR0cihtb2R1
bGUsIGRhdGFbImNoZWNrX2FyZ3MiXSkKKyAgICBicm93c2VyX2NscyA9IGdldGF0dHIobW9kdWxl
LCBkYXRhWyJicm93c2VyIl0pCisgICAgYnJvd3Nlcl9rd2FyZ3MgPSBnZXRhdHRyKG1vZHVsZSwg
ZGF0YVsiYnJvd3Nlcl9rd2FyZ3MiXSkKKyAgICBleGVjdXRvcl9rd2FyZ3MgPSBnZXRhdHRyKG1v
ZHVsZSwgZGF0YVsiZXhlY3V0b3Jfa3dhcmdzIl0pCisgICAgZW52X29wdGlvbnMgPSBnZXRhdHRy
KG1vZHVsZSwgZGF0YVsiZW52X29wdGlvbnMiXSkoKQorICAgIGVudl9leHRyYXMgPSBnZXRhdHRy
KG1vZHVsZSwgZGF0YVsiZW52X2V4dHJhcyJdKQorICAgIHJ1bl9pbmZvX2V4dHJhcyA9IChnZXRh
dHRyKG1vZHVsZSwgZGF0YVsicnVuX2luZm9fZXh0cmFzIl0pCisgICAgICAgICAgICAgICAgICAg
ICAgIGlmICJydW5faW5mb19leHRyYXMiIGluIGRhdGEgZWxzZSBsYW1iZGEgKiprd2FyZ3M6e30p
CisKKyAgICBleGVjdXRvcl9jbGFzc2VzID0ge30KKyAgICBmb3IgdGVzdF90eXBlLCBjbHNfbmFt
ZSBpbiBkYXRhWyJleGVjdXRvciJdLml0ZXJpdGVtcygpOgorICAgICAgICBjbHMgPSBnZXRhdHRy
KG1vZHVsZSwgY2xzX25hbWUpCisgICAgICAgIGV4ZWN1dG9yX2NsYXNzZXNbdGVzdF90eXBlXSA9
IGNscworCisgICAgcmV0dXJuIChjaGVja19hcmdzLAorICAgICAgICAgICAgYnJvd3Nlcl9jbHMs
IGJyb3dzZXJfa3dhcmdzLAorICAgICAgICAgICAgZXhlY3V0b3JfY2xhc3NlcywgZXhlY3V0b3Jf
a3dhcmdzLAorICAgICAgICAgICAgZW52X29wdGlvbnMsIGVudl9leHRyYXMsIHJ1bl9pbmZvX2V4
dHJhcykKKworCitkZWYgbG9hZF9wcm9kdWN0X3VwZGF0ZShjb25maWcsIHByb2R1Y3QpOgorICAg
ICIiIlJldHVybiB0dXBsZSBvZiAocHJvcGVydHlfb3JkZXIsIGJvb2xlYW5fcHJvcGVydGllcykg
aW5kaWNhdGluZyB0aGUKKyAgICBydW5faW5mbyBwcm9wZXJ0aWVzIHRvIHVzZSB3aGVuIGNvbnN0
cnVjdGluZyB0aGUgZXhwZWN0YXRpb24gZGF0YSBmb3IKKyAgICB0aGlzIHByb2R1Y3QuIE5vbmUg
Zm9yIGVpdGhlciBrZXkgaW5kaWNhdGVzIHRoYXQgdGhlIGRlZmF1bHQga2V5cworICAgIGFwcHJv
cHJpYXRlIGZvciBkaXN0aW5ndWlzaGluZyBiYXNlZCBvbiBwbGF0Zm9ybSB3aWxsIGJlIHVzZWQu
IiIiCisKKyAgICBtb2R1bGUgPSBwcm9kdWN0X21vZHVsZShjb25maWcsIHByb2R1Y3QpCisgICAg
ZGF0YSA9IG1vZHVsZS5fX3dwdHJ1bm5lcl9fCisKKyAgICB1cGRhdGVfcHJvcGVydGllcyA9IChn
ZXRhdHRyKG1vZHVsZSwgZGF0YVsidXBkYXRlX3Byb3BlcnRpZXMiXSkoKQorICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICJ1cGRhdGVfcHJvcGVydGllcyIgaW4gZGF0YSBlbHNlIChOb25lLCBO
b25lKSkKKworICAgIHJldHVybiB1cGRhdGVfcHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvV2ViRHJp
dmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvcmVkdWNlLnB5
IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIv
cmVkdWNlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kMjQ1ZWUz
NjAyYgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29s
cy93cHRydW5uZXIvd3B0cnVubmVyL3JlZHVjZS5weQpAQCAtMCwwICsxLDE5MyBAQAoraW1wb3J0
IHN5cworaW1wb3J0IHRlbXBmaWxlCitmcm9tIGNTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KK2Zy
b20gY29sbGVjdGlvbnMgaW1wb3J0IGRlZmF1bHRkaWN0CisKK2ltcG9ydCB3cHRydW5uZXIKK2lt
cG9ydCB3cHR0ZXN0CisKK2Zyb20gbW96bG9nIGltcG9ydCBjb21tYW5kbGluZSwgcmVhZGVyCisK
K2xvZ2dlciA9IE5vbmUKKworCitkZWYgc2V0dXBfbG9nZ2luZyhhcmdzLCBkZWZhdWx0cyk6Cisg
ICAgZ2xvYmFsIGxvZ2dlcgorICAgIGxvZ2dlciA9IGNvbW1hbmRsaW5lLnNldHVwX2xvZ2dpbmco
IndlYi1wbGF0Zm9ybS10ZXN0cy11bnN0YWJsZSIsIGFyZ3MsIGRlZmF1bHRzKQorICAgIHdwdHJ1
bm5lci5zZXR1cF9zdGRsaWJfbG9nZ2VyKCkKKworICAgIGZvciBuYW1lIGluIGFyZ3Mua2V5cygp
OgorICAgICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoImxvZ18iKToKKyAgICAgICAgICAgIGFyZ3Mu
cG9wKG5hbWUpCisKKyAgICByZXR1cm4gbG9nZ2VyCisKKworZGVmIGdyb3VwKGl0ZW1zLCBzaXpl
KToKKyAgICBydiA9IFtdCisgICAgaSA9IDAKKyAgICB3aGlsZSBpIDwgbGVuKGl0ZW1zKToKKyAg
ICAgICAgcnYuYXBwZW5kKGl0ZW1zW2k6aSArIHNpemVdKQorICAgICAgICBpICs9IHNpemUKKwor
ICAgIHJldHVybiBydgorCisKK2RlZiBuZXh0X3Bvd2VyX29mX3R3byhudW0pOgorICAgIHJ2ID0g
MQorICAgIHdoaWxlIHJ2IDwgbnVtOgorICAgICAgICBydiA9IHJ2IDw8IDEKKyAgICByZXR1cm4g
cnYKKworCitjbGFzcyBSZWR1Y2VyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRh
cmdldCwgKiprd2FyZ3MpOgorICAgICAgICBzZWxmLnRhcmdldCA9IHRhcmdldAorCisgICAgICAg
IHNlbGYudGVzdF90eXBlID0ga3dhcmdzWyJ0ZXN0X3R5cGVzIl1bMF0KKyAgICAgICAgcnVuX2lu
Zm8gPSB3cHR0ZXN0LmdldF9ydW5faW5mbyhrd2FyZ3NbIm1ldGFkYXRhX3Jvb3QiXSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2FyZ3NbInByb2R1Y3QiXSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Zz1GYWxzZSkKKyAgICAg
ICAgdGVzdF9maWx0ZXIgPSB3cHRydW5uZXIuVGVzdEZpbHRlcihpbmNsdWRlPWt3YXJnc1siaW5j
bHVkZSJdKQorICAgICAgICBzZWxmLnRlc3RfbG9hZGVyID0gd3B0cnVubmVyLlRlc3RMb2FkZXIo
a3dhcmdzWyJ0ZXN0c19yb290Il0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBrd2FyZ3NbIm1ldGFkYXRhX3Jvb3QiXSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxmLnRlc3RfdHlwZV0sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW5faW5mbywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hbmlmZXN0X2ZpbGVy
PXRlc3RfZmlsdGVyKQorICAgICAgICBpZiBrd2FyZ3NbInJlcGVhdCJdID09IDE6CisgICAgICAg
ICAgICBsb2dnZXIuY3JpdGljYWwoIk5lZWQgdG8gc3BlY2lmeSAtLXJlcGVhdCB3aXRoIG1vcmUg
dGhhbiBvbmUgcmVwZXRpdGlvbiIpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICBz
ZWxmLmt3YXJncyA9IGt3YXJncworCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgYWxsX3Rl
c3RzID0gc2VsZi5nZXRfaW5pdGlhbF90ZXN0cygpCisKKyAgICAgICAgdGVzdHMgPSBhbGxfdGVz
dHNbOi0xXQorICAgICAgICB0YXJnZXRfdGVzdCA9IFthbGxfdGVzdHNbLTFdXQorCisgICAgICAg
IGlmIHNlbGYudW5zdGFibGUodGFyZ2V0X3Rlc3QpOgorICAgICAgICAgICAgcmV0dXJuIHRhcmdl
dF90ZXN0CisKKyAgICAgICAgaWYgbm90IHNlbGYudW5zdGFibGUoYWxsX3Rlc3RzKToKKyAgICAg
ICAgICAgIHJldHVybiBbXQorCisgICAgICAgIGNodW5rX3NpemUgPSBuZXh0X3Bvd2VyX29mX3R3
byhpbnQobGVuKHRlc3RzKSAvIDIpKQorICAgICAgICBsb2dnZXIuZGVidWcoIlVzaW5nIGNodW5r
IHNpemUgJWkiICUgY2h1bmtfc2l6ZSkKKworICAgICAgICB3aGlsZSBjaHVua19zaXplID49IDE6
CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoIiVpIHRlc3RzIHJlbWFpbiIgJSBsZW4odGVzdHMp
KQorICAgICAgICAgICAgY2h1bmtzID0gZ3JvdXAodGVzdHMsIGNodW5rX3NpemUpCisgICAgICAg
ICAgICBjaHVua19yZXN1bHRzID0gW05vbmVdICogbGVuKGNodW5rcykKKworICAgICAgICAgICAg
Zm9yIGksIGNodW5rIGluIGVudW1lcmF0ZShjaHVua3MpOgorICAgICAgICAgICAgICAgIGxvZ2dl
ci5kZWJ1ZygiUnVubmluZyBjaHVuayAlaS8laSBvZiBzaXplICVpIiAlIChpICsgMSwgbGVuKGNo
dW5rcyksIGNodW5rX3NpemUpKQorICAgICAgICAgICAgICAgIHRyaWFsX3Rlc3RzID0gW10KKyAg
ICAgICAgICAgICAgICBjaHVua19zdHIgPSAiIgorICAgICAgICAgICAgICAgIGZvciBqLCBpbmNf
Y2h1bmsgaW4gZW51bWVyYXRlKGNodW5rcyk6CisgICAgICAgICAgICAgICAgICAgIGlmIGkgIT0g
aiBhbmQgY2h1bmtfcmVzdWx0c1tqXSBpbiAoTm9uZSwgRmFsc2UpOgorICAgICAgICAgICAgICAg
ICAgICAgICAgY2h1bmtfc3RyICs9ICIrIgorICAgICAgICAgICAgICAgICAgICAgICAgdHJpYWxf
dGVzdHMuZXh0ZW5kKGluY19jaHVuaykKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNodW5rX3N0ciArPSAiLSIKKyAgICAgICAgICAgICAgICBsb2dn
ZXIuZGVidWcoIlVzaW5nIGNodW5rcyAlcyIgJSBjaHVua19zdHIpCisgICAgICAgICAgICAgICAg
dHJpYWxfdGVzdHMuZXh0ZW5kKHRhcmdldF90ZXN0KQorCisgICAgICAgICAgICAgICAgY2h1bmtf
cmVzdWx0c1tpXSA9IHNlbGYudW5zdGFibGUodHJpYWxfdGVzdHMpCisKKyAgICAgICAgICAgICAg
ICAjIGlmIGkgPT0gbGVuKGNodW5rcykgLSAyIGFuZCBhbGwoaXRlbSBpcyBGYWxzZSBmb3IgaXRl
bSBpbiBjaHVua19yZXN1bHRzWzotMV0pOgorICAgICAgICAgICAgICAgICMgRGFuZ2Vyb3VzPyBv
cHRpbWlzYXRpb24gdGhhdCBpZiB5b3UgZ290IHN0YWJpbGl0eSBmb3IgMC4uTi0xIGNodW5rcwor
ICAgICAgICAgICAgICAgICMgaXQgbXVzdCBiZSB1bnN0YWJsZSB3aXRoIHRoZSBOdGggY2h1bmsK
KyAgICAgICAgICAgICAgICAjICAgICBjaHVua19yZXN1bHRzW2krMV0gPSBUcnVlCisgICAgICAg
ICAgICAgICAgIyAgICAgY29udGludWUKKworICAgICAgICAgICAgbmV3X3Rlc3RzID0gW10KKyAg
ICAgICAgICAgIGtlZXBfc3RyID0gIiIKKyAgICAgICAgICAgIGZvciByZXN1bHQsIGNodW5rIGlu
IHppcChjaHVua19yZXN1bHRzLCBjaHVua3MpOgorICAgICAgICAgICAgICAgIGlmIG5vdCByZXN1
bHQ6CisgICAgICAgICAgICAgICAgICAgIGtlZXBfc3RyICs9ICIrIgorICAgICAgICAgICAgICAg
ICAgICBuZXdfdGVzdHMuZXh0ZW5kKGNodW5rKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICAgICAgICAgIGtlZXBfc3RyICs9ICItIgorCisgICAgICAgICAgICBsb2dnZXIuZGVi
dWcoIktlZXBpbmcgY2h1bmtzICVzIiAlIGtlZXBfc3RyKQorCisgICAgICAgICAgICB0ZXN0cyA9
IG5ld190ZXN0cworCisgICAgICAgICAgICBjaHVua19zaXplID0gaW50KGNodW5rX3NpemUgLyAy
KQorCisgICAgICAgIHJldHVybiB0ZXN0cyArIHRhcmdldF90ZXN0CisKKyAgICBkZWYgdW5zdGFi
bGUoc2VsZiwgdGVzdHMpOgorICAgICAgICBsb2dnZXIuZGVidWcoIlJ1bm5pbmcgd2l0aCAlaSB0
ZXN0cyIgJSBsZW4odGVzdHMpKQorCisgICAgICAgIHNlbGYudGVzdF9sb2FkZXIudGVzdHMgPSB7
c2VsZi50ZXN0X3R5cGU6IHRlc3RzfQorCisgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gc3lzLnN0
ZG91dCwgc3lzLnN0ZGVycgorICAgICAgICBzeXMuc3Rkb3V0ID0gU3RyaW5nSU8oKQorICAgICAg
ICBzeXMuc3RkZXJyID0gU3RyaW5nSU8oKQorCisgICAgICAgIHdpdGggdGVtcGZpbGUuTmFtZWRU
ZW1wb3JhcnlGaWxlKCkgYXMgZjoKKyAgICAgICAgICAgIGFyZ3MgPSBzZWxmLmt3YXJncy5jb3B5
KCkKKyAgICAgICAgICAgIGFyZ3NbImxvZ19yYXciXSA9IFtmXQorICAgICAgICAgICAgYXJnc1si
Y2FwdHVyZV9zdGRpbyJdID0gRmFsc2UKKyAgICAgICAgICAgIHdwdHJ1bm5lci5zZXR1cF9sb2dn
aW5nKGFyZ3MsIHt9KQorICAgICAgICAgICAgd3B0cnVubmVyLnJ1bl90ZXN0cyh0ZXN0X2xvYWRl
cj1zZWxmLnRlc3RfbG9hZGVyLCAqKmFyZ3MpCisgICAgICAgICAgICB3cHRydW5uZXIubG9nZ2Vy
LnJlbW92ZV9oYW5kbGVyKHdwdHJ1bm5lci5sb2dnZXIuaGFuZGxlcnNbMF0pCisgICAgICAgICAg
ICBpc191bnN0YWJsZSA9IHNlbGYubG9nX2lzX3Vuc3RhYmxlKGYpCisKKyAgICAgICAgICAgIHN5
cy5zdGRvdXQsIHN5cy5zdGRlcnIgPSBzdGRvdXQsIHN0ZGVycgorCisgICAgICAgIGxvZ2dlci5k
ZWJ1ZygiUmVzdWx0IHdhcyB1bnN0YWJsZSB3aXRoIGNodW5rIHJlbW92ZWQiCisgICAgICAgICAg
ICAgICAgICAgICBpZiBpc191bnN0YWJsZSBlbHNlICJzdGFibGUiKQorCisgICAgICAgIHJldHVy
biBpc191bnN0YWJsZQorCisgICAgZGVmIGxvZ19pc191bnN0YWJsZShzZWxmLCBsb2dfZik6Cisg
ICAgICAgIGxvZ19mLnNlZWsoMCkKKworICAgICAgICBzdGF0dXNlcyA9IGRlZmF1bHRkaWN0KHNl
dCkKKworICAgICAgICBkZWYgaGFuZGxlX3N0YXR1cyhpdGVtKToKKyAgICAgICAgICAgIGlmIGl0
ZW1bInRlc3QiXSA9PSBzZWxmLnRhcmdldDoKKyAgICAgICAgICAgICAgICBzdGF0dXNlc1tpdGVt
WyJzdWJ0ZXN0Il1dLmFkZChpdGVtWyJzdGF0dXMiXSkKKworICAgICAgICBkZWYgaGFuZGxlX2Vu
ZChpdGVtKToKKyAgICAgICAgICAgIGlmIGl0ZW1bInRlc3QiXSA9PSBzZWxmLnRhcmdldDoKKyAg
ICAgICAgICAgICAgICBzdGF0dXNlc1tOb25lXS5hZGQoaXRlbVsic3RhdHVzIl0pCisKKyAgICAg
ICAgcmVhZGVyLmVhY2hfbG9nKHJlYWRlci5yZWFkKGxvZ19mKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHsidGVzdF9zdGF0dXMiOiBoYW5kbGVfc3RhdHVzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICJ0ZXN0X2VuZCI6IGhhbmRsZV9lbmR9KQorCisgICAgICAgIGxvZ2dlci5kZWJ1Zyhz
dHIoc3RhdHVzZXMpKQorCisgICAgICAgIGlmIG5vdCBzdGF0dXNlczoKKyAgICAgICAgICAgIGxv
Z2dlci5lcnJvcigiRGlkbid0IGdldCBhbnkgdXNlZnVsIG91dHB1dCBmcm9tIHdwdHJ1bm5lciIp
CisgICAgICAgICAgICBsb2dfZi5zZWVrKDApCisgICAgICAgICAgICBmb3IgaXRlbSBpbiByZWFk
ZXIucmVhZChsb2dfZik6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKGl0ZW0pCisgICAg
ICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIHJldHVybiBhbnkobGVuKGl0ZW0pID4gMSBm
b3IgaXRlbSBpbiBzdGF0dXNlcy5pdGVydmFsdWVzKCkpCisKKyAgICBkZWYgZ2V0X2luaXRpYWxf
dGVzdHMoc2VsZik6CisgICAgICAgICMgTmVlZCB0byBwYXNzIGluIGFyZ3VtZW50cworCisgICAg
ICAgIGFsbF90ZXN0cyA9IHNlbGYudGVzdF9sb2FkZXIudGVzdHNbc2VsZi50ZXN0X3R5cGVdCisg
ICAgICAgIHRlc3RzID0gW10KKyAgICAgICAgZm9yIGl0ZW0gaW4gYWxsX3Rlc3RzOgorICAgICAg
ICAgICAgdGVzdHMuYXBwZW5kKGl0ZW0pCisgICAgICAgICAgICBpZiBpdGVtLnVybCA9PSBzZWxm
LnRhcmdldDoKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIGxvZ2dlci5kZWJ1Zygi
U3RhcnRpbmcgd2l0aCB0ZXN0czogJXMiICUgKCJcbiIuam9pbihpdGVtLmlkIGZvciBpdGVtIGlu
IHRlc3RzKSkpCisKKyAgICAgICAgcmV0dXJuIHRlc3RzCisKKworZGVmIGRvX3JlZHVjZSgqKmt3
YXJncyk6CisgICAgdGFyZ2V0ID0ga3dhcmdzLnBvcCgidGFyZ2V0IikKKyAgICByZWR1Y2VyID0g
UmVkdWNlcih0YXJnZXQsICoqa3dhcmdzKQorCisgICAgdW5zdGFibGVfc2V0ID0gcmVkdWNlci5y
dW4oKQorICAgIHJldHVybiB1bnN0YWJsZV9zZXQKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3Rz
L2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3Rlc3RoYXJuZXNzX3J1bm5l
ci5odG1sIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRy
dW5uZXIvdGVzdGhhcm5lc3NfcnVubmVyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLjFjYzgwYTI3MGUyCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVz
dHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvdGVzdGhhcm5lc3NfcnVu
bmVyLmh0bWwKQEAgLTAsMCArMSw2IEBACis8IWRvY3R5cGUgaHRtbD4KKzx0aXRsZT48L3RpdGxl
PgorPHNjcmlwdD4KK3ZhciB0aW1lb3V0X211bHRpcGxpZXIgPSAxOwordmFyIHdpbiA9IG51bGw7
Cis8L3NjcmlwdD4KZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29s
cy93cHRydW5uZXIvd3B0cnVubmVyL3Rlc3RoYXJuZXNzcmVwb3J0LXNlcnZvLmpzIGIvV2ViRHJp
dmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvdGVzdGhhcm5l
c3NyZXBvcnQtc2Vydm8uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LmI2NzJhZWE5YTI1Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQv
dzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvdGVzdGhhcm5lc3NyZXBvcnQtc2Vydm8uanMK
QEAgLTAsMCArMSwxNyBAQAordmFyIHByb3BzID0ge291dHB1dDolKG91dHB1dClkfTsKK3ZhciBz
dGFydF9sb2MgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7CitzdGFydF9sb2MuaHJlZiA9
IGxvY2F0aW9uLmhyZWY7CitzZXR1cChwcm9wcyk7CisKK2FkZF9jb21wbGV0aW9uX2NhbGxiYWNr
KGZ1bmN0aW9uICh0ZXN0cywgaGFybmVzc19zdGF0dXMpIHsKKyAgICB2YXIgaWQgPSBzdGFydF9s
b2MucGF0aG5hbWUgKyBzdGFydF9sb2Muc2VhcmNoICsgc3RhcnRfbG9jLmhhc2g7CisgICAgY29u
c29sZS5sb2coIkFMRVJUOiBSRVNVTFQ6ICIgKyBKU09OLnN0cmluZ2lmeShbCisgICAgICAgIGlk
LAorICAgICAgICBoYXJuZXNzX3N0YXR1cy5zdGF0dXMsCisgICAgICAgIGhhcm5lc3Nfc3RhdHVz
Lm1lc3NhZ2UsCisgICAgICAgIGhhcm5lc3Nfc3RhdHVzLnN0YWNrLAorICAgICAgICB0ZXN0cy5t
YXAoZnVuY3Rpb24odCkgeworICAgICAgICAgICAgcmV0dXJuIFt0Lm5hbWUsIHQuc3RhdHVzLCB0
Lm1lc3NhZ2UsIHQuc3RhY2tdCisgICAgICAgIH0pLAorICAgIF0pKTsKK30pOwpkaWZmIC0tZ2l0
IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIv
dGVzdGhhcm5lc3NyZXBvcnQtc2Vydm9kcml2ZXIuanMgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRl
ZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci90ZXN0aGFybmVzc3JlcG9ydC1zZXJ2b2Ry
aXZlci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYzg4ODQxMzYw
NDcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMv
d3B0cnVubmVyL3dwdHJ1bm5lci90ZXN0aGFybmVzc3JlcG9ydC1zZXJ2b2RyaXZlci5qcwpAQCAt
MCwwICsxLDIzIEBACitzZXR1cCh7b3V0cHV0OiUob3V0cHV0KWR9KTsKKworYWRkX2NvbXBsZXRp
b25fY2FsbGJhY2soZnVuY3Rpb24oKSB7CisgICAgYWRkX2NvbXBsZXRpb25fY2FsbGJhY2soZnVu
Y3Rpb24gKHRlc3RzLCBzdGF0dXMpIHsKKyAgICAgICAgdmFyIHN1YnRlc3RfcmVzdWx0cyA9IHRl
c3RzLm1hcChmdW5jdGlvbih4KSB7CisgICAgICAgICAgICByZXR1cm4gW3gubmFtZSwgeC5zdGF0
dXMsIHgubWVzc2FnZSwgeC5zdGFja10KKyAgICAgICAgfSk7CisgICAgICAgIHZhciBpZCA9IGxv
Y2F0aW9uLnBhdGhuYW1lICsgbG9jYXRpb24uc2VhcmNoICsgbG9jYXRpb24uaGFzaDsKKyAgICAg
ICAgdmFyIHJlc3VsdHMgPSBKU09OLnN0cmluZ2lmeShbaWQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXR1cy5zdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXR1cy5tZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGF0dXMuc3RhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN1YnRlc3RfcmVzdWx0c10pOworICAgICAgICAoZnVuY3Rpb24gZG9uZSgpIHsK
KyAgICAgICAgICAgIGlmICh3aW5kb3cuX193ZF9yZXN1bHRzX2NhbGxiYWNrX18pIHsKKyAgICAg
ICAgICAgICAgICBjbGVhclRpbWVvdXQoX193ZF9yZXN1bHRzX3RpbWVyX18pOworICAgICAgICAg
ICAgICAgIF9fd2RfcmVzdWx0c19jYWxsYmFja19fKHJlc3VsdHMpCisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZG9uZSwgMjApOworICAgICAgICAgICAg
fQorICAgICAgICB9KSgpCisgICAgfSkKK30pOwpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMv
aW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvdGVzdGhhcm5lc3NyZXBvcnQu
anMgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5l
ci90ZXN0aGFybmVzc3JlcG9ydC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uNjJkZGFmZmI0NDMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBv
cnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci90ZXN0aGFybmVzc3JlcG9ydC5qcwpA
QCAtMCwwICsxLDEzIEBACit2YXIgcHJvcHMgPSB7b3V0cHV0OiUob3V0cHV0KWQsCisgICAgICAg
ICAgICAgZXhwbGljaXRfdGltZW91dDogdHJ1ZSwKKyAgICAgICAgICAgICBtZXNzYWdlX2V2ZW50
czogWyJjb21wbGV0aW9uIl19OworCitpZiAod2luZG93Lm9wZW5lciAmJiAidGltZW91dF9tdWx0
aXBsaWVyIiBpbiB3aW5kb3cub3BlbmVyKSB7CisgICAgcHJvcHNbInRpbWVvdXRfbXVsdGlwbGll
ciJdID0gd2luZG93Lm9wZW5lci50aW1lb3V0X211bHRpcGxpZXI7Cit9CisKK2lmICh3aW5kb3cu
b3BlbmVyICYmIHdpbmRvdy5vcGVuZXIuZXhwbGljaXRfdGltZW91dCkgeworICAgIHByb3BzWyJl
eHBsaWNpdF90aW1lb3V0Il0gPSB3aW5kb3cub3BlbmVyLmV4cGxpY2l0X3RpbWVvdXQ7Cit9CisK
K3NldHVwKHByb3BzKTsKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90
b29scy93cHRydW5uZXIvd3B0cnVubmVyL3Rlc3Rsb2FkZXIucHkgYi9XZWJEcml2ZXJUZXN0cy9p
bXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci90ZXN0bG9hZGVyLnB5Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45MTM5MmZlZjc3OAotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0
cnVubmVyL3Rlc3Rsb2FkZXIucHkKQEAgLTAsMCArMSw2NDAgQEAKK2ltcG9ydCBoYXNobGliCitp
bXBvcnQganNvbgoraW1wb3J0IG9zCitpbXBvcnQgdXJscGFyc2UKK2Zyb20gYWJjIGltcG9ydCBB
QkNNZXRhLCBhYnN0cmFjdG1ldGhvZAorZnJvbSBRdWV1ZSBpbXBvcnQgRW1wdHkKK2Zyb20gY29s
bGVjdGlvbnMgaW1wb3J0IGRlZmF1bHRkaWN0LCBPcmRlcmVkRGljdCwgZGVxdWUKK2Zyb20gbXVs
dGlwcm9jZXNzaW5nIGltcG9ydCBRdWV1ZQorCitpbXBvcnQgbWFuaWZlc3RpbmNsdWRlCitpbXBv
cnQgbWFuaWZlc3RleHBlY3RlZAoraW1wb3J0IHdwdHRlc3QKK2Zyb20gbW96bG9nIGltcG9ydCBz
dHJ1Y3R1cmVkCisKK21hbmlmZXN0ID0gTm9uZQorbWFuaWZlc3RfdXBkYXRlID0gTm9uZQorCitk
ZWYgZG9fZGVsYXllZF9pbXBvcnRzKCk6CisgICAgIyBUaGlzIHJlbGllcyBvbiBhbiBhbHJlYWR5
IGxvYWRlZCBtb2R1bGUgaGF2aW5nIHNldCB0aGUgc3lzLnBhdGggY29ycmVjdGx5IDooCisgICAg
Z2xvYmFsIG1hbmlmZXN0LCBtYW5pZmVzdF91cGRhdGUKKyAgICBmcm9tIG1hbmlmZXN0IGltcG9y
dCBtYW5pZmVzdAorICAgIGZyb20gbWFuaWZlc3QgaW1wb3J0IHVwZGF0ZSBhcyBtYW5pZmVzdF91
cGRhdGUKKworY2xhc3MgVGVzdENodW5rZXIob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgdG90YWxfY2h1bmtzLCBjaHVua19udW1iZXIpOgorICAgICAgICBzZWxmLnRvdGFsX2NodW5r
cyA9IHRvdGFsX2NodW5rcworICAgICAgICBzZWxmLmNodW5rX251bWJlciA9IGNodW5rX251bWJl
cgorICAgICAgICBhc3NlcnQgc2VsZi5jaHVua19udW1iZXIgPD0gc2VsZi50b3RhbF9jaHVua3MK
KyAgICAgICAgc2VsZi5sb2dnZXIgPSBzdHJ1Y3R1cmVkLmdldF9kZWZhdWx0X2xvZ2dlcigpCisg
ICAgICAgIGFzc2VydCBzZWxmLmxvZ2dlcgorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIG1hbmlm
ZXN0KToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisKK2NsYXNzIFVuY2h1
bmtlZChUZXN0Q2h1bmtlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJn
cyk6CisgICAgICAgIFRlc3RDaHVua2VyLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncykK
KyAgICAgICAgYXNzZXJ0IHNlbGYudG90YWxfY2h1bmtzID09IDEKKworICAgIGRlZiBfX2NhbGxf
XyhzZWxmLCBtYW5pZmVzdCk6CisgICAgICAgIGZvciBpdGVtIGluIG1hbmlmZXN0OgorICAgICAg
ICAgICAgeWllbGQgaXRlbQorCisKK2NsYXNzIEhhc2hDaHVua2VyKFRlc3RDaHVua2VyKToKKyAg
ICBkZWYgX19jYWxsX18oc2VsZiwgbWFuaWZlc3QpOgorICAgICAgICBjaHVua19pbmRleCA9IHNl
bGYuY2h1bmtfbnVtYmVyIC0gMQorICAgICAgICBmb3IgdGVzdF90eXBlLCB0ZXN0X3BhdGgsIHRl
c3RzIGluIG1hbmlmZXN0OgorICAgICAgICAgICAgaCA9IGludChoYXNobGliLm1kNSh0ZXN0X3Bh
dGgpLmhleGRpZ2VzdCgpLCAxNikKKyAgICAgICAgICAgIGlmIGggJSBzZWxmLnRvdGFsX2NodW5r
cyA9PSBjaHVua19pbmRleDoKKyAgICAgICAgICAgICAgICB5aWVsZCB0ZXN0X3R5cGUsIHRlc3Rf
cGF0aCwgdGVzdHMKKworCitjbGFzcyBEaXJlY3RvcnlIYXNoQ2h1bmtlcihUZXN0Q2h1bmtlcik6
CisgICAgIiIiTGlrZSBIYXNoQ2h1bmtlciBleGNlcHQgdGhlIGRpcmVjdG9yeSBpcyBoYXNoZWQu
CisKKyAgICBUaGlzIGVuc3VyZXMgdGhhdCBhbGwgdGVzdHMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5
IGVuZCB1cCBpbiB0aGUgc2FtZQorICAgIGNodW5rLgorICAgICIiIgorICAgIGRlZiBfX2NhbGxf
XyhzZWxmLCBtYW5pZmVzdCk6CisgICAgICAgIGNodW5rX2luZGV4ID0gc2VsZi5jaHVua19udW1i
ZXIgLSAxCisgICAgICAgIGZvciB0ZXN0X3R5cGUsIHRlc3RfcGF0aCwgdGVzdHMgaW4gbWFuaWZl
c3Q6CisgICAgICAgICAgICBoID0gaW50KGhhc2hsaWIubWQ1KG9zLnBhdGguZGlybmFtZSh0ZXN0
X3BhdGgpKS5oZXhkaWdlc3QoKSwgMTYpCisgICAgICAgICAgICBpZiBoICUgc2VsZi50b3RhbF9j
aHVua3MgPT0gY2h1bmtfaW5kZXg6CisgICAgICAgICAgICAgICAgeWllbGQgdGVzdF90eXBlLCB0
ZXN0X3BhdGgsIHRlc3RzCisKKworY2xhc3MgRXF1YWxUaW1lQ2h1bmtlcihUZXN0Q2h1bmtlcik6
CisgICAgZGVmIF9ncm91cF9ieV9kaXJlY3Rvcnkoc2VsZiwgbWFuaWZlc3RfaXRlbXMpOgorICAg
ICAgICAiIiJTcGxpdCB0aGUgbGlzdCBvZiBtYW5pZmVzdCBpdGVtcyBpbnRvIGEgb3JkZXJlZCBk
aWN0IHRoYXQgZ3JvdXBzIHRlc3RzIGluCisgICAgICAgIHNvIHRoYXQgYW55dGhpbmcgaW4gdGhl
IHNhbWUgc3ViZGlyZWN0b3J5IGJleW9uZCBhIGRlcHRoIG9mIDMgaXMgaW4gdGhlIHNhbWUKKyAg
ICAgICAgZ3JvdXAuIFNvIGFsbCB0ZXN0cyBpbiBhL2IvYywgYS9iL2MvZCBhbmQgYS9iL2MvZSB3
aWxsIGJlIGdyb3VwZWQgdG9nZXRoZXIKKyAgICAgICAgYW5kIHNlcGFyYXRlIHRvIHRlc3RzIGlu
IGEvYi9mCisKKyAgICAgICAgUmV0dXJuczogdHVwbGUgKG9yZGVyZWQgZGljdCBvZiB7dGVzdF9k
aXI6IFBhdGhEYXRhfSwgdG90YWwgZXN0aW1hdGVkIHJ1bnRpbWUpCisgICAgICAgICIiIgorCisg
ICAgICAgIGNsYXNzIFBhdGhEYXRhKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18o
c2VsZiwgcGF0aCk6CisgICAgICAgICAgICAgICAgc2VsZi5wYXRoID0gcGF0aAorICAgICAgICAg
ICAgICAgIHNlbGYudGltZSA9IDAKKyAgICAgICAgICAgICAgICBzZWxmLnRlc3RzID0gW10KKwor
ICAgICAgICBieV9kaXIgPSBPcmRlcmVkRGljdCgpCisgICAgICAgIHRvdGFsX3RpbWUgPSAwCisK
KyAgICAgICAgZm9yIGksICh0ZXN0X3R5cGUsIHRlc3RfcGF0aCwgdGVzdHMpIGluIGVudW1lcmF0
ZShtYW5pZmVzdF9pdGVtcyk6CisgICAgICAgICAgICB0ZXN0X2RpciA9IHR1cGxlKG9zLnBhdGgu
c3BsaXQodGVzdF9wYXRoKVswXS5zcGxpdChvcy5wYXRoLnNlcClbOjNdKQorCisgICAgICAgICAg
ICBpZiBub3QgdGVzdF9kaXIgaW4gYnlfZGlyOgorICAgICAgICAgICAgICAgIGJ5X2Rpclt0ZXN0
X2Rpcl0gPSBQYXRoRGF0YSh0ZXN0X2RpcikKKworICAgICAgICAgICAgZGF0YSA9IGJ5X2Rpclt0
ZXN0X2Rpcl0KKyAgICAgICAgICAgIHRpbWUgPSBzdW0odGVzdC5kZWZhdWx0X3RpbWVvdXQgaWYg
dGVzdC50aW1lb3V0ICE9CisgICAgICAgICAgICAgICAgICAgICAgICJsb25nIiBlbHNlIHRlc3Qu
bG9uZ190aW1lb3V0IGZvciB0ZXN0IGluIHRlc3RzKQorICAgICAgICAgICAgZGF0YS50aW1lICs9
IHRpbWUKKyAgICAgICAgICAgIHRvdGFsX3RpbWUgKz0gdGltZQorICAgICAgICAgICAgZGF0YS50
ZXN0cy5hcHBlbmQoKHRlc3RfdHlwZSwgdGVzdF9wYXRoLCB0ZXN0cykpCisKKyAgICAgICAgcmV0
dXJuIGJ5X2RpciwgdG90YWxfdGltZQorCisgICAgZGVmIF9tYXliZV9yZW1vdmUoc2VsZiwgY2h1
bmtzLCBpLCBkaXJlY3Rpb24pOgorICAgICAgICAiIiJUcmlhbCByZW1vdmluZyBhIGNodW5rIGZy
b20gb25lIGNodW5rIHRvIGFuIGFkamFjZW50IG9uZS4KKworICAgICAgICA6cGFyYW0gY2h1bmtz
OiAtIHRoZSBsaXN0IG9mIGFsbCBjaHVua3MKKyAgICAgICAgOnBhcmFtIGk6IC0gdGhlIGNodW5r
IGluZGV4IGluIHRoZSBsaXN0IG9mIGNodW5rcyB0byB0cnkgcmVtb3ZpbmcgZnJvbQorICAgICAg
ICA6cGFyYW0gZGlyZWN0aW9uOiBlaXRoZXIgIm5leHQiIGlmIHdlIGFyZSBnb2luZyB0byBtb3Zl
IGZyb20gdGhlIGVuZCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc3Vic2VxdWVu
dCBjaHVuaywgb3IgInByZXYiIGlmIHdlIGFyZSBnb2luZyB0byBtb3ZlCisgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZyb20gdGhlIHN0YXJ0IGludG8gdGhlIHByZXZpb3VzIGNodW5rLgorCisg
ICAgICAgIDpyZXR1cm5zIGJvb2w6IERpZCBhIGNodW5rIGdldCBtb3ZlZD8iIiIKKyAgICAgICAg
c291cmNlX2NodW5rID0gY2h1bmtzW2ldCisgICAgICAgIGlmIGRpcmVjdGlvbiA9PSAibmV4dCI6
CisgICAgICAgICAgICB0YXJnZXRfY2h1bmsgPSBjaHVua3NbaSsxXQorICAgICAgICAgICAgcGF0
aF9pbmRleCA9IC0xCisgICAgICAgICAgICBtb3ZlX2Z1bmMgPSBsYW1iZGE6IHRhcmdldF9jaHVu
ay5hcHBlbmRsZWZ0KHNvdXJjZV9jaHVuay5wb3AoKSkKKyAgICAgICAgZWxpZiBkaXJlY3Rpb24g
PT0gInByZXYiOgorICAgICAgICAgICAgdGFyZ2V0X2NodW5rID0gY2h1bmtzW2ktMV0KKyAgICAg
ICAgICAgIHBhdGhfaW5kZXggPSAwCisgICAgICAgICAgICBtb3ZlX2Z1bmMgPSBsYW1iZGE6IHRh
cmdldF9jaHVuay5hcHBlbmQoc291cmNlX2NodW5rLnBvcGxlZnQoKSkKKyAgICAgICAgZWxzZToK
KyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlVuZXhwZWN0ZWQgbW92ZSBkaXJlY3Rpb24g
JXMiICUgZGlyZWN0aW9uKQorCisgICAgICAgIHJldHVybiBzZWxmLl9tYXliZV9tb3ZlKHNvdXJj
ZV9jaHVuaywgdGFyZ2V0X2NodW5rLCBwYXRoX2luZGV4LCBtb3ZlX2Z1bmMpCisKKyAgICBkZWYg
X21heWJlX2FkZChzZWxmLCBjaHVua3MsIGksIGRpcmVjdGlvbik6CisgICAgICAgICIiIlRyaWFs
IGFkZGluZyBhIGNodW5rIGZyb20gb25lIGNodW5rIHRvIGFuIGFkamFjZW50IG9uZS4KKworICAg
ICAgICA6cGFyYW0gY2h1bmtzOiAtIHRoZSBsaXN0IG9mIGFsbCBjaHVua3MKKyAgICAgICAgOnBh
cmFtIGk6IC0gdGhlIGNodW5rIGluZGV4IGluIHRoZSBsaXN0IG9mIGNodW5rcyB0byB0cnkgYWRk
aW5nIHRvCisgICAgICAgIDpwYXJhbSBkaXJlY3Rpb246IGVpdGhlciAibmV4dCIgaWYgd2UgYXJl
IGdvaW5nIHRvIHJlbW92ZSBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUg
c3Vic2VxdWVudCBjaHVuaywgb3IgInByZXYiIGlmIHdlIGFyZSBnb2luZyB0byByZW1vdmUKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgdGhlIHByZXZpb3VzIGNodW5rLgorCisg
ICAgICAgIDpyZXR1cm5zIGJvb2w6IERpZCBhIGNodW5rIGdldCBtb3ZlZD8iIiIKKyAgICAgICAg
dGFyZ2V0X2NodW5rID0gY2h1bmtzW2ldCisgICAgICAgIGlmIGRpcmVjdGlvbiA9PSAibmV4dCI6
CisgICAgICAgICAgICBzb3VyY2VfY2h1bmsgPSBjaHVua3NbaSsxXQorICAgICAgICAgICAgcGF0
aF9pbmRleCA9IDAKKyAgICAgICAgICAgIG1vdmVfZnVuYyA9IGxhbWJkYTogdGFyZ2V0X2NodW5r
LmFwcGVuZChzb3VyY2VfY2h1bmsucG9wbGVmdCgpKQorICAgICAgICBlbGlmIGRpcmVjdGlvbiA9
PSAicHJldiI6CisgICAgICAgICAgICBzb3VyY2VfY2h1bmsgPSBjaHVua3NbaS0xXQorICAgICAg
ICAgICAgcGF0aF9pbmRleCA9IC0xCisgICAgICAgICAgICBtb3ZlX2Z1bmMgPSBsYW1iZGE6IHRh
cmdldF9jaHVuay5hcHBlbmRsZWZ0KHNvdXJjZV9jaHVuay5wb3AoKSkKKyAgICAgICAgZWxzZToK
KyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlVuZXhwZWN0ZWQgbW92ZSBkaXJlY3Rpb24g
JXMiICUgZGlyZWN0aW9uKQorCisgICAgICAgIHJldHVybiBzZWxmLl9tYXliZV9tb3ZlKHNvdXJj
ZV9jaHVuaywgdGFyZ2V0X2NodW5rLCBwYXRoX2luZGV4LCBtb3ZlX2Z1bmMpCisKKyAgICBkZWYg
X21heWJlX21vdmUoc2VsZiwgc291cmNlX2NodW5rLCB0YXJnZXRfY2h1bmssIHBhdGhfaW5kZXgs
IG1vdmVfZnVuYyk6CisgICAgICAgICIiIk1vdmUgZnJvbSBvbmUgY2h1bmsgdG8gYW5vdGhlciwg
YXNzZXNzIHRoZSBjaGFuZ2UgaW4gYmFkbmVzcywKKyAgICAgICAgYW5kIGtlZXAgdGhlIG1vdmUg
aWZmIGl0IGRlY3JlYXNlcyB0aGUgYmFkbmVzcyBzY29yZS4KKworICAgICAgICA6cGFyYW0gc291
cmNlX2NodW5rOiBjaHVuayB0byBtb3ZlIGZyb20KKyAgICAgICAgOnBhcmFtIHRhcmdldF9jaHVu
azogY2h1bmsgdG8gbW92ZSB0bworICAgICAgICA6cGFyYW0gcGF0aF9pbmRleDogMCBpZiB3ZSBh
cmUgbW92aW5nIGZyb20gdGhlIHN0YXJ0IG9yIC0xIGlmIHdlIGFyZSBtb3ZpbmcgZnJvbSB0aGUK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICA6cGFyYW0gbW92ZV9mdW5j
OiBGdW5jdGlvbiB0aGF0IGFjdHVhbGx5IG1vdmVzIGJldHdlZW4gY2h1bmtzIiIiCisgICAgICAg
IGlmIGxlbihzb3VyY2VfY2h1bmsucGF0aHMpIDw9IDE6CisgICAgICAgICAgICByZXR1cm4gRmFs
c2UKKworICAgICAgICBtb3ZlX3RpbWUgPSBzb3VyY2VfY2h1bmsucGF0aHNbcGF0aF9pbmRleF0u
dGltZQorCisgICAgICAgIG5ld19zb3VyY2VfYmFkbmVzcyA9IHNlbGYuX2JhZG5lc3Moc291cmNl
X2NodW5rLnRpbWUgLSBtb3ZlX3RpbWUpCisgICAgICAgIG5ld190YXJnZXRfYmFkbmVzcyA9IHNl
bGYuX2JhZG5lc3ModGFyZ2V0X2NodW5rLnRpbWUgKyBtb3ZlX3RpbWUpCisKKyAgICAgICAgZGVs
dGFfYmFkbmVzcyA9ICgobmV3X3NvdXJjZV9iYWRuZXNzICsgbmV3X3RhcmdldF9iYWRuZXNzKSAt
CisgICAgICAgICAgICAgICAgICAgICAgICAgKHNvdXJjZV9jaHVuay5iYWRuZXNzICsgdGFyZ2V0
X2NodW5rLmJhZG5lc3MpKQorICAgICAgICBpZiBkZWx0YV9iYWRuZXNzIDwgMDoKKyAgICAgICAg
ICAgIG1vdmVfZnVuYygpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIHJldHVy
biBGYWxzZQorCisgICAgZGVmIF9iYWRuZXNzKHNlbGYsIHRpbWUpOgorICAgICAgICAiIiJNZXRy
aWMgb2YgYmFkbmVzcyBmb3IgYSBzcGVjaWZpYyBjaHVuaworCisgICAgICAgIDpwYXJhbSB0aW1l
OiB0aGUgdGltZSBmb3IgYSBzcGVjaWZpYyBjaHVuayIiIgorICAgICAgICByZXR1cm4gKHRpbWUg
LSBzZWxmLmV4cGVjdGVkX3RpbWUpKioyCisKKyAgICBkZWYgX2dldF9jaHVuayhzZWxmLCBtYW5p
ZmVzdF9pdGVtcyk6CisgICAgICAgIGJ5X2RpciwgdG90YWxfdGltZSA9IHNlbGYuX2dyb3VwX2J5
X2RpcmVjdG9yeShtYW5pZmVzdF9pdGVtcykKKworICAgICAgICBpZiBsZW4oYnlfZGlyKSA8IHNl
bGYudG90YWxfY2h1bmtzOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiVHJpZWQgdG8g
c3BsaXQgaW50byAlaSBjaHVua3MsIGJ1dCBvbmx5ICVpIHN1YmRpcmVjdG9yaWVzIGluY2x1ZGVk
IiAlICgKKyAgICAgICAgICAgICAgICBzZWxmLnRvdGFsX2NodW5rcywgbGVuKGJ5X2RpcikpKQor
CisgICAgICAgIHNlbGYuZXhwZWN0ZWRfdGltZSA9IGZsb2F0KHRvdGFsX3RpbWUpIC8gc2VsZi50
b3RhbF9jaHVua3MKKworICAgICAgICBjaHVua3MgPSBzZWxmLl9jcmVhdGVfaW5pdGlhbF9jaHVu
a3MoYnlfZGlyKQorCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAjIE1vdmUgYSB0
ZXN0IGZyb20gb25lIGNodW5rIHRvIHRoZSBuZXh0IHVudGlsIGRvaW5nIHNvIG5vIGxvbmdlcgor
ICAgICAgICAgICAgIyByZWR1Y2VzIHRoZSBiYWRuZXNzCisgICAgICAgICAgICBnb3RfaW1wcm92
ZW1lbnQgPSBzZWxmLl91cGRhdGVfY2h1bmtzKGNodW5rcykKKyAgICAgICAgICAgIGlmIG5vdCBn
b3RfaW1wcm92ZW1lbnQ6CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICBzZWxmLmxv
Z2dlci5kZWJ1ZyhzZWxmLmV4cGVjdGVkX3RpbWUpCisgICAgICAgIGZvciBpLCBjaHVuayBpbiBj
aHVua3MuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1ZygiJWk6ICVp
LCAlaSIgJSAoaSArIDEsIGNodW5rLnRpbWUsIGNodW5rLmJhZG5lc3MpKQorCisgICAgICAgIGFz
c2VydCBzZWxmLl9hbGxfdGVzdHMoYnlfZGlyKSA9PSBzZWxmLl9jaHVua2VkX3Rlc3RzKGNodW5r
cykKKworICAgICAgICByZXR1cm4gc2VsZi5fZ2V0X3Rlc3RzKGNodW5rcykKKworICAgIEBzdGF0
aWNtZXRob2QKKyAgICBkZWYgX2FsbF90ZXN0cyhieV9kaXIpOgorICAgICAgICAiIiJSZXR1cm4g
YSBzZXQgb2YgYWxsIHRlc3RzIGluIHRoZSBtYW5pZmVzdCBmcm9tIGEgZ3JvdXBpbmcgYnkgZGly
ZWN0b3J5IiIiCisgICAgICAgIHJldHVybiBzZXQoeFswXSBmb3IgaXRlbSBpbiBieV9kaXIuaXRl
cnZhbHVlcygpCisgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gaXRlbS50ZXN0cykKKworICAg
IEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX2NodW5rZWRfdGVzdHMoY2h1bmtzKToKKyAgICAgICAg
IiIiUmV0dXJuIGEgc2V0IG9mIGFsbCB0ZXN0cyBpbiB0aGUgbWFuaWZlc3QgZnJvbSB0aGUgY2h1
bmsgbGlzdCIiIgorICAgICAgICByZXR1cm4gc2V0KHhbMF0gZm9yIGNodW5rIGluIGNodW5rcy5p
dGVydmFsdWVzKCkKKyAgICAgICAgICAgICAgICAgICBmb3IgcGF0aCBpbiBjaHVuay5wYXRocwor
ICAgICAgICAgICAgICAgICAgIGZvciB4IGluIHBhdGgudGVzdHMpCisKKworICAgIGRlZiBfY3Jl
YXRlX2luaXRpYWxfY2h1bmtzKHNlbGYsIGJ5X2Rpcik6CisgICAgICAgICIiIkNyZWF0ZSBhbiBp
bml0aWFsIHVuYmFsYW5jZWQgbGlzdCBvZiBjaHVua3MuCisKKyAgICAgICAgOnBhcmFtIGJ5X2Rp
cjogQWxsIHRlc3RzIGluIHRoZSBtYW5pZmVzdCBncm91cGVkIGJ5IHN1YmRpcmVjdG9yeQorICAg
ICAgICA6cmV0dXJucyBsaXN0OiBBIGxpc3Qgb2YgQ2h1bmsgb2JqZWN0cyIiIgorCisgICAgICAg
IGNsYXNzIENodW5rKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0
aHMsIGluZGV4KToKKyAgICAgICAgICAgICAgICAiIiJMaXN0IG9mIFBhdGhEYXRhIG9iamVjdHMg
dGhhdCB0b2dldGhlciBmb3JtIGEgc2luZ2xlIGNodW5rIG9mCisgICAgICAgICAgICAgICAgdGVz
dHMiIiIKKyAgICAgICAgICAgICAgICBzZWxmLnBhdGhzID0gZGVxdWUocGF0aHMpCisgICAgICAg
ICAgICAgICAgc2VsZi50aW1lID0gc3VtKGl0ZW0udGltZSBmb3IgaXRlbSBpbiBwYXRocykKKyAg
ICAgICAgICAgICAgICBzZWxmLmluZGV4ID0gaW5kZXgKKworICAgICAgICAgICAgZGVmIGFwcGVu
ZGxlZnQoc2VsZiwgcGF0aCk6CisgICAgICAgICAgICAgICAgIiIiQWRkIGEgUGF0aERhdGEgb2Jq
ZWN0IHRvIHRoZSBzdGFydCBvZiB0aGUgY2h1bmsiIiIKKyAgICAgICAgICAgICAgICBzZWxmLnBh
dGhzLmFwcGVuZGxlZnQocGF0aCkKKyAgICAgICAgICAgICAgICBzZWxmLnRpbWUgKz0gcGF0aC50
aW1lCisKKyAgICAgICAgICAgIGRlZiBhcHBlbmQoc2VsZiwgcGF0aCk6CisgICAgICAgICAgICAg
ICAgIiIiQWRkIGEgUGF0aERhdGEgb2JqZWN0IHRvIHRoZSBlbmQgb2YgdGhlIGNodW5rIiIiCisg
ICAgICAgICAgICAgICAgc2VsZi5wYXRocy5hcHBlbmQocGF0aCkKKyAgICAgICAgICAgICAgICBz
ZWxmLnRpbWUgKz0gcGF0aC50aW1lCisKKyAgICAgICAgICAgIGRlZiBwb3Aoc2VsZik6CisgICAg
ICAgICAgICAgICAgIiIiUmVtb3ZlIFBhdGhEYXRhIG9iamVjdCBmcm9tIHRoZSBlbmQgb2YgdGhl
IGNodW5rIiIiCisgICAgICAgICAgICAgICAgYXNzZXJ0IGxlbihzZWxmLnBhdGhzKSA+IDEKKyAg
ICAgICAgICAgICAgICBzZWxmLnRpbWUgLT0gc2VsZi5wYXRoc1stMV0udGltZQorICAgICAgICAg
ICAgICAgIHJldHVybiBzZWxmLnBhdGhzLnBvcCgpCisKKyAgICAgICAgICAgIGRlZiBwb3BsZWZ0
KHNlbGYpOgorICAgICAgICAgICAgICAgICIiIlJlbW92ZSBQYXRoRGF0YSBvYmplY3QgZnJvbSB0
aGUgc3RhcnQgb2YgdGhlIGNodW5rIiIiCisgICAgICAgICAgICAgICAgYXNzZXJ0IGxlbihzZWxm
LnBhdGhzKSA+IDEKKyAgICAgICAgICAgICAgICBzZWxmLnRpbWUgLT0gc2VsZi5wYXRoc1swXS50
aW1lCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYucGF0aHMucG9wbGVmdCgpCisKKyAgICAg
ICAgICAgIEBwcm9wZXJ0eQorICAgICAgICAgICAgZGVmIGJhZG5lc3Moc2VsZl8pOgorICAgICAg
ICAgICAgICAgICIiIkJhZG5lc3MgbWV0cmljIGZvciB0aGlzIGNodW5rIiIiCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHNlbGYuX2JhZG5lc3Moc2VsZl8udGltZSkKKworICAgICAgICBpbml0aWFs
X3NpemUgPSBsZW4oYnlfZGlyKSAvIHNlbGYudG90YWxfY2h1bmtzCisgICAgICAgIGNodW5rX2Jv
dW5kYXJpZXMgPSBbaW5pdGlhbF9zaXplICogaQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvciBpIGluIHhyYW5nZShzZWxmLnRvdGFsX2NodW5rcyldICsgW2xlbihieV9kaXIpXQorCisg
ICAgICAgIGNodW5rcyA9IE9yZGVyZWREaWN0KCkKKyAgICAgICAgZm9yIGksIGxvd2VyIGluIGVu
dW1lcmF0ZShjaHVua19ib3VuZGFyaWVzWzotMV0pOgorICAgICAgICAgICAgdXBwZXIgPSBjaHVu
a19ib3VuZGFyaWVzW2kgKyAxXQorICAgICAgICAgICAgcGF0aHMgPSBieV9kaXIudmFsdWVzKClb
bG93ZXI6dXBwZXJdCisgICAgICAgICAgICBjaHVua3NbaV0gPSBDaHVuayhwYXRocywgaSkKKwor
ICAgICAgICBhc3NlcnQgc2VsZi5fYWxsX3Rlc3RzKGJ5X2RpcikgPT0gc2VsZi5fY2h1bmtlZF90
ZXN0cyhjaHVua3MpCisKKyAgICAgICAgcmV0dXJuIGNodW5rcworCisgICAgZGVmIF91cGRhdGVf
Y2h1bmtzKHNlbGYsIGNodW5rcyk6CisgICAgICAgICIiIlJ1biBhIHNpbmdsZSBpdGVyYXRpb24g
b2YgdGhlIGNodW5rIHVwZGF0ZSBhbGdvcml0aG0uCisKKyAgICAgICAgOnBhcmFtIGNodW5rczog
LSBMaXN0IG9mIGNodW5rcworICAgICAgICAiIiIKKyAgICAgICAgI1RPRE86IGNvbnNpZGVyIHJl
cGxhY2luZyB0aGlzIHdpdGggYSBoZWFwCisgICAgICAgIHNvcnRlZF9jaHVua3MgPSBzb3J0ZWQo
Y2h1bmtzLnZhbHVlcygpLCBrZXk9bGFtYmRhIHg6LXguYmFkbmVzcykKKyAgICAgICAgZ290X2lt
cHJvdmVtZW50ID0gRmFsc2UKKyAgICAgICAgZm9yIGNodW5rIGluIHNvcnRlZF9jaHVua3M6Cisg
ICAgICAgICAgICBpZiBjaHVuay50aW1lIDwgc2VsZi5leHBlY3RlZF90aW1lOgorICAgICAgICAg
ICAgICAgIGYgPSBzZWxmLl9tYXliZV9hZGQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICAgICAgZiA9IHNlbGYuX21heWJlX3JlbW92ZQorCisgICAgICAgICAgICBpZiBjaHVuay5pbmRl
eCA9PSAwOgorICAgICAgICAgICAgICAgIG9yZGVyID0gWyJuZXh0Il0KKyAgICAgICAgICAgIGVs
aWYgY2h1bmsuaW5kZXggPT0gc2VsZi50b3RhbF9jaHVua3MgLSAxOgorICAgICAgICAgICAgICAg
IG9yZGVyID0gWyJwcmV2Il0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYg
Y2h1bmsudGltZSA8IHNlbGYuZXhwZWN0ZWRfdGltZToKKyAgICAgICAgICAgICAgICAgICAgIyBG
aXJzdCB0cnkgdG8gYWRkIGEgdGVzdCBmcm9tIHRoZSBuZWlnaGJvcmluZyBjaHVuayB3aXRoIHRo
ZQorICAgICAgICAgICAgICAgICAgICAjIGdyZWF0ZXN0IHRvdGFsIHRpbWUKKyAgICAgICAgICAg
ICAgICAgICAgaWYgY2h1bmtzW2NodW5rLmluZGV4ICsgMV0udGltZSA+IGNodW5rc1tjaHVuay5p
bmRleCAtIDFdLnRpbWU6CisgICAgICAgICAgICAgICAgICAgICAgICBvcmRlciA9IFsibmV4dCIs
ICJwcmV2Il0KKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG9yZGVyID0gWyJwcmV2IiwgIm5leHQiXQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICAgICAgICAgICMgRmlyc3QgdHJ5IHRvIHJlbW92ZSBhIHRlc3QgYW5kIGFkZCB0byB0
aGUgbmVpZ2hib3JpbmcgY2h1bmsgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgIyBsb3dl
c3QgdG90YWwgdGltZQorICAgICAgICAgICAgICAgICAgICBpZiBjaHVua3NbY2h1bmsuaW5kZXgg
KyAxXS50aW1lID4gY2h1bmtzW2NodW5rLmluZGV4IC0gMV0udGltZToKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG9yZGVyID0gWyJwcmV2IiwgIm5leHQiXQorICAgICAgICAgICAgICAgICAgICBl
bHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXIgPSBbIm5leHQiLCAicHJldiJdCisK
KyAgICAgICAgICAgIGZvciBkaXJlY3Rpb24gaW4gb3JkZXI6CisgICAgICAgICAgICAgICAgaWYg
ZihjaHVua3MsIGNodW5rLmluZGV4LCBkaXJlY3Rpb24pOgorICAgICAgICAgICAgICAgICAgICBn
b3RfaW1wcm92ZW1lbnQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAg
ICAgICAgIGlmIGdvdF9pbXByb3ZlbWVudDoKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAg
ICAgIHJldHVybiBnb3RfaW1wcm92ZW1lbnQKKworICAgIGRlZiBfZ2V0X3Rlc3RzKHNlbGYsIGNo
dW5rcyk6CisgICAgICAgICIiIlJldHVybiB0aGUgbGlzdCBvZiB0ZXN0cyBjb3JyZXNwb25kaW5n
IHRvIHRoZSBjaHVuayBudW1iZXIgd2UgYXJlIHJ1bm5pbmcuCisKKyAgICAgICAgOnBhcmFtIGNo
dW5rczogTGlzdCBvZiBjaHVua3MiIiIKKyAgICAgICAgdGVzdHMgPSBbXQorICAgICAgICBmb3Ig
cGF0aCBpbiBjaHVua3Nbc2VsZi5jaHVua19udW1iZXIgLSAxXS5wYXRoczoKKyAgICAgICAgICAg
IHRlc3RzLmV4dGVuZChwYXRoLnRlc3RzKQorCisgICAgICAgIHJldHVybiB0ZXN0cworCisgICAg
ZGVmIF9fY2FsbF9fKHNlbGYsIG1hbmlmZXN0X2l0ZXIpOgorICAgICAgICBtYW5pZmVzdCA9IGxp
c3QobWFuaWZlc3RfaXRlcikKKyAgICAgICAgdGVzdHMgPSBzZWxmLl9nZXRfY2h1bmsobWFuaWZl
c3QpCisgICAgICAgIGZvciBpdGVtIGluIHRlc3RzOgorICAgICAgICAgICAgeWllbGQgaXRlbQor
CisKK2NsYXNzIFRlc3RGaWx0ZXIob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGVz
dF9tYW5pZmVzdHMsIGluY2x1ZGU9Tm9uZSwgZXhjbHVkZT1Ob25lLCBtYW5pZmVzdF9wYXRoPU5v
bmUpOgorICAgICAgICBpZiBtYW5pZmVzdF9wYXRoIGlzIG5vdCBOb25lIGFuZCBpbmNsdWRlIGlz
IE5vbmU6CisgICAgICAgICAgICBzZWxmLm1hbmlmZXN0ID0gbWFuaWZlc3RpbmNsdWRlLmdldF9t
YW5pZmVzdChtYW5pZmVzdF9wYXRoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5t
YW5pZmVzdCA9IG1hbmlmZXN0aW5jbHVkZS5JbmNsdWRlTWFuaWZlc3QuY3JlYXRlKCkKKworICAg
ICAgICBpZiBpbmNsdWRlOgorICAgICAgICAgICAgc2VsZi5tYW5pZmVzdC5zZXQoInNraXAiLCAi
dHJ1ZSIpCisgICAgICAgICAgICBmb3IgaXRlbSBpbiBpbmNsdWRlOgorICAgICAgICAgICAgICAg
IHNlbGYubWFuaWZlc3QuYWRkX2luY2x1ZGUodGVzdF9tYW5pZmVzdHMsIGl0ZW0pCisKKyAgICAg
ICAgaWYgZXhjbHVkZToKKyAgICAgICAgICAgIGZvciBpdGVtIGluIGV4Y2x1ZGU6CisgICAgICAg
ICAgICAgICAgc2VsZi5tYW5pZmVzdC5hZGRfZXhjbHVkZSh0ZXN0X21hbmlmZXN0cywgaXRlbSkK
KworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBtYW5pZmVzdF9pdGVyKToKKyAgICAgICAgZm9yIHRl
c3RfdHlwZSwgdGVzdF9wYXRoLCB0ZXN0cyBpbiBtYW5pZmVzdF9pdGVyOgorICAgICAgICAgICAg
aW5jbHVkZV90ZXN0cyA9IHNldCgpCisgICAgICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0czoKKyAg
ICAgICAgICAgICAgICBpZiBzZWxmLm1hbmlmZXN0LmluY2x1ZGUodGVzdCk6CisgICAgICAgICAg
ICAgICAgICAgIGluY2x1ZGVfdGVzdHMuYWRkKHRlc3QpCisKKyAgICAgICAgICAgIGlmIGluY2x1
ZGVfdGVzdHM6CisgICAgICAgICAgICAgICAgeWllbGQgdGVzdF90eXBlLCB0ZXN0X3BhdGgsIGlu
Y2x1ZGVfdGVzdHMKKworY2xhc3MgVGFnRmlsdGVyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIHRhZ3MpOgorICAgICAgICBzZWxmLnRhZ3MgPSBzZXQodGFncykKKworICAgIGRlZiBf
X2NhbGxfXyhzZWxmLCB0ZXN0X2l0ZXIpOgorICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0X2l0ZXI6
CisgICAgICAgICAgICBpZiB0ZXN0LnRhZ3MgJiBzZWxmLnRhZ3M6CisgICAgICAgICAgICAgICAg
eWllbGQgdGVzdAorCitjbGFzcyBNYW5pZmVzdExvYWRlcihvYmplY3QpOgorICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCB0ZXN0X3BhdGhzLCBmb3JjZV9tYW5pZmVzdF91cGRhdGU9RmFsc2UpOgorICAg
ICAgICBkb19kZWxheWVkX2ltcG9ydHMoKQorICAgICAgICBzZWxmLnRlc3RfcGF0aHMgPSB0ZXN0
X3BhdGhzCisgICAgICAgIHNlbGYuZm9yY2VfbWFuaWZlc3RfdXBkYXRlID0gZm9yY2VfbWFuaWZl
c3RfdXBkYXRlCisgICAgICAgIHNlbGYubG9nZ2VyID0gc3RydWN0dXJlZC5nZXRfZGVmYXVsdF9s
b2dnZXIoKQorICAgICAgICBpZiBzZWxmLmxvZ2dlciBpcyBOb25lOgorICAgICAgICAgICAgc2Vs
Zi5sb2dnZXIgPSBzdHJ1Y3R1cmVkLnN0cnVjdHVyZWRsb2cuU3RydWN0dXJlZExvZ2dlcigiTWFu
aWZlc3RMb2FkZXIiKQorCisgICAgZGVmIGxvYWQoc2VsZik6CisgICAgICAgIHJ2ID0ge30KKyAg
ICAgICAgZm9yIHVybF9iYXNlLCBwYXRocyBpbiBzZWxmLnRlc3RfcGF0aHMuaXRlcml0ZW1zKCk6
CisgICAgICAgICAgICBtYW5pZmVzdF9maWxlID0gc2VsZi5sb2FkX21hbmlmZXN0KHVybF9iYXNl
PXVybF9iYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAqKnBhdGhzKQorICAgICAgICAgICAgcGF0aF9kYXRhID0geyJ1cmxfYmFzZSI6IHVybF9iYXNl
fQorICAgICAgICAgICAgcGF0aF9kYXRhLnVwZGF0ZShwYXRocykKKyAgICAgICAgICAgIHJ2W21h
bmlmZXN0X2ZpbGVdID0gcGF0aF9kYXRhCisgICAgICAgIHJldHVybiBydgorCisgICAgZGVmIGNy
ZWF0ZV9tYW5pZmVzdChzZWxmLCBtYW5pZmVzdF9wYXRoLCB0ZXN0c19wYXRoLCB1cmxfYmFzZT0i
LyIpOgorICAgICAgICBzZWxmLnVwZGF0ZV9tYW5pZmVzdChtYW5pZmVzdF9wYXRoLCB0ZXN0c19w
YXRoLCB1cmxfYmFzZSwgcmVjcmVhdGU9VHJ1ZSkKKworICAgIGRlZiB1cGRhdGVfbWFuaWZlc3Qo
c2VsZiwgbWFuaWZlc3RfcGF0aCwgdGVzdHNfcGF0aCwgdXJsX2Jhc2U9Ii8iLAorICAgICAgICAg
ICAgICAgICAgICAgICAgcmVjcmVhdGU9RmFsc2UpOgorICAgICAgICBzZWxmLmxvZ2dlci5pbmZv
KCJVcGRhdGluZyB0ZXN0IG1hbmlmZXN0ICVzIiAlIG1hbmlmZXN0X3BhdGgpCisKKyAgICAgICAg
anNvbl9kYXRhID0gTm9uZQorICAgICAgICBpZiBub3QgcmVjcmVhdGU6CisgICAgICAgICAgICB0
cnk6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKG1hbmlmZXN0X3BhdGgpIGFzIGY6CisgICAg
ICAgICAgICAgICAgICAgIGpzb25fZGF0YSA9IGpzb24ubG9hZChmKQorICAgICAgICAgICAgZXhj
ZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgI0lmIHRoZSBleGlzdGluZyBmaWxlIGRvZXNu
J3QgZXhpc3QganVzdCBjcmVhdGUgb25lIGZyb20gc2NyYXRjaAorICAgICAgICAgICAgICAgIHBh
c3MKKworICAgICAgICBpZiBub3QganNvbl9kYXRhOgorICAgICAgICAgICAgbWFuaWZlc3RfZmls
ZSA9IG1hbmlmZXN0Lk1hbmlmZXN0KHVybF9iYXNlKQorICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgdHJ5OgorICAgICAgICAgICAgICAgIG1hbmlmZXN0X2ZpbGUgPSBtYW5pZmVzdC5NYW5pZmVz
dC5mcm9tX2pzb24odGVzdHNfcGF0aCwganNvbl9kYXRhKQorICAgICAgICAgICAgZXhjZXB0IG1h
bmlmZXN0Lk1hbmlmZXN0VmVyc2lvbk1pc21hdGNoOgorICAgICAgICAgICAgICAgIG1hbmlmZXN0
X2ZpbGUgPSBtYW5pZmVzdC5NYW5pZmVzdCh1cmxfYmFzZSkKKworICAgICAgICBtYW5pZmVzdF91
cGRhdGUudXBkYXRlKHRlc3RzX3BhdGgsIG1hbmlmZXN0X2ZpbGUsIFRydWUpCisKKyAgICAgICAg
bWFuaWZlc3Qud3JpdGUobWFuaWZlc3RfZmlsZSwgbWFuaWZlc3RfcGF0aCkKKworICAgIGRlZiBs
b2FkX21hbmlmZXN0KHNlbGYsIHRlc3RzX3BhdGgsIG1ldGFkYXRhX3BhdGgsIHVybF9iYXNlPSIv
Iik6CisgICAgICAgIG1hbmlmZXN0X3BhdGggPSBvcy5wYXRoLmpvaW4obWV0YWRhdGFfcGF0aCwg
Ik1BTklGRVNULmpzb24iKQorICAgICAgICBpZiAobm90IG9zLnBhdGguZXhpc3RzKG1hbmlmZXN0
X3BhdGgpIG9yCisgICAgICAgICAgICBzZWxmLmZvcmNlX21hbmlmZXN0X3VwZGF0ZSk6CisgICAg
ICAgICAgICBzZWxmLnVwZGF0ZV9tYW5pZmVzdChtYW5pZmVzdF9wYXRoLCB0ZXN0c19wYXRoLCB1
cmxfYmFzZSkKKyAgICAgICAgbWFuaWZlc3RfZmlsZSA9IG1hbmlmZXN0LmxvYWQodGVzdHNfcGF0
aCwgbWFuaWZlc3RfcGF0aCkKKyAgICAgICAgaWYgbWFuaWZlc3RfZmlsZS51cmxfYmFzZSAhPSB1
cmxfYmFzZToKKyAgICAgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oIlVwZGF0aW5nIHVybF9iYXNl
IGluIG1hbmlmZXN0IGZyb20gJXMgdG8gJXMiICUgKG1hbmlmZXN0X2ZpbGUudXJsX2Jhc2UsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1cmxfYmFzZSkpCisgICAgICAgICAgICBtYW5pZmVzdF9maWxl
LnVybF9iYXNlID0gdXJsX2Jhc2UKKyAgICAgICAgICAgIG1hbmlmZXN0LndyaXRlKG1hbmlmZXN0
X2ZpbGUsIG1hbmlmZXN0X3BhdGgpCisKKyAgICAgICAgcmV0dXJuIG1hbmlmZXN0X2ZpbGUKKwor
ZGVmIGl0ZXJmaWx0ZXIoZmlsdGVycywgaXRlcik6CisgICAgZm9yIGYgaW4gZmlsdGVyczoKKyAg
ICAgICAgaXRlciA9IGYoaXRlcikKKyAgICBmb3IgaXRlbSBpbiBpdGVyOgorICAgICAgICB5aWVs
ZCBpdGVtCisKK2NsYXNzIFRlc3RMb2FkZXIob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwKKyAgICAgICAgICAgICAgICAgdGVzdF9tYW5pZmVzdHMsCisgICAgICAgICAgICAgICAgIHRl
c3RfdHlwZXMsCisgICAgICAgICAgICAgICAgIHJ1bl9pbmZvLAorICAgICAgICAgICAgICAgICBt
YW5pZmVzdF9maWx0ZXJzPU5vbmUsCisgICAgICAgICAgICAgICAgIG1ldGFfZmlsdGVycz1Ob25l
LAorICAgICAgICAgICAgICAgICBjaHVua190eXBlPSJub25lIiwKKyAgICAgICAgICAgICAgICAg
dG90YWxfY2h1bmtzPTEsCisgICAgICAgICAgICAgICAgIGNodW5rX251bWJlcj0xLAorICAgICAg
ICAgICAgICAgICBpbmNsdWRlX2h0dHBzPVRydWUpOgorCisgICAgICAgIHNlbGYudGVzdF90eXBl
cyA9IHRlc3RfdHlwZXMKKyAgICAgICAgc2VsZi5ydW5faW5mbyA9IHJ1bl9pbmZvCisKKyAgICAg
ICAgc2VsZi5tYW5pZmVzdF9maWx0ZXJzID0gbWFuaWZlc3RfZmlsdGVycyBpZiBtYW5pZmVzdF9m
aWx0ZXJzIGlzIG5vdCBOb25lIGVsc2UgW10KKyAgICAgICAgc2VsZi5tZXRhX2ZpbHRlcnMgPSBt
ZXRhX2ZpbHRlcnMgaWYgbWV0YV9maWx0ZXJzIGlzIG5vdCBOb25lIGVsc2UgW10KKworICAgICAg
ICBzZWxmLm1hbmlmZXN0cyA9IHRlc3RfbWFuaWZlc3RzCisgICAgICAgIHNlbGYudGVzdHMgPSBO
b25lCisgICAgICAgIHNlbGYuZGlzYWJsZWRfdGVzdHMgPSBOb25lCisgICAgICAgIHNlbGYuaW5j
bHVkZV9odHRwcyA9IGluY2x1ZGVfaHR0cHMKKworICAgICAgICBzZWxmLmNodW5rX3R5cGUgPSBj
aHVua190eXBlCisgICAgICAgIHNlbGYudG90YWxfY2h1bmtzID0gdG90YWxfY2h1bmtzCisgICAg
ICAgIHNlbGYuY2h1bmtfbnVtYmVyID0gY2h1bmtfbnVtYmVyCisKKyAgICAgICAgc2VsZi5jaHVu
a2VyID0geyJub25lIjogVW5jaHVua2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgImhhc2gi
OiBIYXNoQ2h1bmtlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJkaXJfaGFzaCI6IERpcmVj
dG9yeUhhc2hDaHVua2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgImVxdWFsX3RpbWUiOiBF
cXVhbFRpbWVDaHVua2VyfVtjaHVua190eXBlXSh0b3RhbF9jaHVua3MsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo
dW5rX251bWJlcikKKworICAgICAgICBzZWxmLl90ZXN0X2lkcyA9IE5vbmUKKworICAgICAgICBz
ZWxmLmRpcmVjdG9yeV9tYW5pZmVzdHMgPSB7fQorCisgICAgICAgIHNlbGYuX2xvYWRfdGVzdHMo
KQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHRlc3RfaWRzKHNlbGYpOgorICAgICAgICBpZiBz
ZWxmLl90ZXN0X2lkcyBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5fdGVzdF9pZHMgPSBbXQor
ICAgICAgICAgICAgZm9yIHRlc3RfZGljdCBpbiBbc2VsZi5kaXNhYmxlZF90ZXN0cywgc2VsZi50
ZXN0c106CisgICAgICAgICAgICAgICAgZm9yIHRlc3RfdHlwZSBpbiBzZWxmLnRlc3RfdHlwZXM6
CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RfaWRzICs9IFtpdGVtLmlkIGZvciBpdGVt
IGluIHRlc3RfZGljdFt0ZXN0X3R5cGVdXQorICAgICAgICByZXR1cm4gc2VsZi5fdGVzdF9pZHMK
KworICAgIGRlZiBnZXRfdGVzdChzZWxmLCBtYW5pZmVzdF90ZXN0LCBpbmhlcml0X21ldGFkYXRh
LCB0ZXN0X21ldGFkYXRhKToKKyAgICAgICAgaWYgdGVzdF9tZXRhZGF0YSBpcyBub3QgTm9uZToK
KyAgICAgICAgICAgIGluaGVyaXRfbWV0YWRhdGEuYXBwZW5kKHRlc3RfbWV0YWRhdGEpCisgICAg
ICAgICAgICB0ZXN0X21ldGFkYXRhID0gdGVzdF9tZXRhZGF0YS5nZXRfdGVzdChtYW5pZmVzdF90
ZXN0LmlkKQorCisgICAgICAgIHJldHVybiB3cHR0ZXN0LmZyb21fbWFuaWZlc3QobWFuaWZlc3Rf
dGVzdCwgaW5oZXJpdF9tZXRhZGF0YSwgdGVzdF9tZXRhZGF0YSkKKworICAgIGRlZiBsb2FkX2Rp
cl9tZXRhZGF0YShzZWxmLCB0ZXN0X21hbmlmZXN0LCBtZXRhZGF0YV9wYXRoLCB0ZXN0X3BhdGgp
OgorICAgICAgICBydiA9IFtdCisgICAgICAgIHBhdGhfcGFydHMgPSBvcy5wYXRoLmRpcm5hbWUo
dGVzdF9wYXRoKS5zcGxpdChvcy5wYXRoLnNlcCkKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKDEs
bGVuKHBhdGhfcGFydHMpICsgMSk6CisgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKG1l
dGFkYXRhX3BhdGgsIG9zLnBhdGguc2VwLmpvaW4ocGF0aF9wYXJ0c1s6aV0pLCAiX19kaXJfXy5p
bmkiKQorICAgICAgICAgICAgaWYgcGF0aCBub3QgaW4gc2VsZi5kaXJlY3RvcnlfbWFuaWZlc3Rz
OgorICAgICAgICAgICAgICAgIHNlbGYuZGlyZWN0b3J5X21hbmlmZXN0c1twYXRoXSA9IG1hbmlm
ZXN0ZXhwZWN0ZWQuZ2V0X2Rpcl9tYW5pZmVzdChwYXRoLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxmLnJ1bl9pbmZvKQorICAgICAgICAgICAgbWFuaWZlc3QgPSBzZWxmLmRpcmVjdG9y
eV9tYW5pZmVzdHNbcGF0aF0KKyAgICAgICAgICAgIGlmIG1hbmlmZXN0IGlzIG5vdCBOb25lOgor
ICAgICAgICAgICAgICAgIHJ2LmFwcGVuZChtYW5pZmVzdCkKKyAgICAgICAgcmV0dXJuIHJ2CisK
KyAgICBkZWYgbG9hZF9tZXRhZGF0YShzZWxmLCB0ZXN0X21hbmlmZXN0LCBtZXRhZGF0YV9wYXRo
LCB0ZXN0X3BhdGgpOgorICAgICAgICBpbmhlcml0X21ldGFkYXRhID0gc2VsZi5sb2FkX2Rpcl9t
ZXRhZGF0YSh0ZXN0X21hbmlmZXN0LCBtZXRhZGF0YV9wYXRoLCB0ZXN0X3BhdGgpCisgICAgICAg
IHRlc3RfbWV0YWRhdGEgPSBtYW5pZmVzdGV4cGVjdGVkLmdldF9tYW5pZmVzdCgKKyAgICAgICAg
ICAgIG1ldGFkYXRhX3BhdGgsIHRlc3RfcGF0aCwgdGVzdF9tYW5pZmVzdC51cmxfYmFzZSwgc2Vs
Zi5ydW5faW5mbykKKyAgICAgICAgcmV0dXJuIGluaGVyaXRfbWV0YWRhdGEsIHRlc3RfbWV0YWRh
dGEKKworICAgIGRlZiBpdGVyX3Rlc3RzKHNlbGYpOgorICAgICAgICBtYW5pZmVzdF9pdGVtcyA9
IFtdCisKKyAgICAgICAgZm9yIG1hbmlmZXN0IGluIHNvcnRlZChzZWxmLm1hbmlmZXN0cy5rZXlz
KCksIGtleT1sYW1iZGEgeDp4LnVybF9iYXNlKToKKyAgICAgICAgICAgIG1hbmlmZXN0X2l0ZXIg
PSBpdGVyZmlsdGVyKHNlbGYubWFuaWZlc3RfZmlsdGVycywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1hbmlmZXN0Lml0ZXJ0eXBlcygqc2VsZi50ZXN0X3R5cGVzKSkK
KyAgICAgICAgICAgIG1hbmlmZXN0X2l0ZW1zLmV4dGVuZChtYW5pZmVzdF9pdGVyKQorCisgICAg
ICAgIGlmIHNlbGYuY2h1bmtlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIG1hbmlmZXN0X2l0
ZW1zID0gc2VsZi5jaHVua2VyKG1hbmlmZXN0X2l0ZW1zKQorCisgICAgICAgIGZvciB0ZXN0X3R5
cGUsIHRlc3RfcGF0aCwgdGVzdHMgaW4gbWFuaWZlc3RfaXRlbXM6CisgICAgICAgICAgICBtYW5p
ZmVzdF9maWxlID0gaXRlcih0ZXN0cykubmV4dCgpLm1hbmlmZXN0CisgICAgICAgICAgICBtZXRh
ZGF0YV9wYXRoID0gc2VsZi5tYW5pZmVzdHNbbWFuaWZlc3RfZmlsZV1bIm1ldGFkYXRhX3BhdGgi
XQorICAgICAgICAgICAgaW5oZXJpdF9tZXRhZGF0YSwgdGVzdF9tZXRhZGF0YSA9IHNlbGYubG9h
ZF9tZXRhZGF0YShtYW5pZmVzdF9maWxlLCBtZXRhZGF0YV9wYXRoLCB0ZXN0X3BhdGgpCisKKyAg
ICAgICAgICAgIGZvciB0ZXN0IGluIGl0ZXJmaWx0ZXIoc2VsZi5tZXRhX2ZpbHRlcnMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaXRlcl93cHR0ZXN0KGluaGVyaXRf
bWV0YWRhdGEsIHRlc3RfbWV0YWRhdGEsIHRlc3RzKSk6CisgICAgICAgICAgICAgICAgeWllbGQg
dGVzdF9wYXRoLCB0ZXN0X3R5cGUsIHRlc3QKKworICAgIGRlZiBpdGVyX3dwdHRlc3Qoc2VsZiwg
aW5oZXJpdF9tZXRhZGF0YSwgdGVzdF9tZXRhZGF0YSwgdGVzdHMpOgorICAgICAgICBmb3IgbWFu
aWZlc3RfdGVzdCBpbiB0ZXN0czoKKyAgICAgICAgICAgIHlpZWxkIHNlbGYuZ2V0X3Rlc3QobWFu
aWZlc3RfdGVzdCwgaW5oZXJpdF9tZXRhZGF0YSwgdGVzdF9tZXRhZGF0YSkKKworICAgIGRlZiBf
bG9hZF90ZXN0cyhzZWxmKToKKyAgICAgICAgIiIiUmVhZCBpbiB0aGUgdGVzdHMgZnJvbSB0aGUg
bWFuaWZlc3QgZmlsZSBhbmQgYWRkIHRoZW0gdG8gYSBxdWV1ZSIiIgorICAgICAgICB0ZXN0cyA9
IHsiZW5hYmxlZCI6ZGVmYXVsdGRpY3QobGlzdCksCisgICAgICAgICAgICAgICAgICJkaXNhYmxl
ZCI6ZGVmYXVsdGRpY3QobGlzdCl9CisKKyAgICAgICAgZm9yIHRlc3RfcGF0aCwgdGVzdF90eXBl
LCB0ZXN0IGluIHNlbGYuaXRlcl90ZXN0cygpOgorICAgICAgICAgICAgZW5hYmxlZCA9IG5vdCB0
ZXN0LmRpc2FibGVkKCkKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmluY2x1ZGVfaHR0cHMgYW5k
IHRlc3QuZW52aXJvbm1lbnRbInByb3RvY29sIl0gPT0gImh0dHBzIjoKKyAgICAgICAgICAgICAg
ICBlbmFibGVkID0gRmFsc2UKKyAgICAgICAgICAgIGtleSA9ICJlbmFibGVkIiBpZiBlbmFibGVk
IGVsc2UgImRpc2FibGVkIgorICAgICAgICAgICAgdGVzdHNba2V5XVt0ZXN0X3R5cGVdLmFwcGVu
ZCh0ZXN0KQorCisgICAgICAgIHNlbGYudGVzdHMgPSB0ZXN0c1siZW5hYmxlZCJdCisgICAgICAg
IHNlbGYuZGlzYWJsZWRfdGVzdHMgPSB0ZXN0c1siZGlzYWJsZWQiXQorCisgICAgZGVmIGdyb3Vw
cyhzZWxmLCB0ZXN0X3R5cGVzLCBjaHVua190eXBlPSJub25lIiwgdG90YWxfY2h1bmtzPTEsIGNo
dW5rX251bWJlcj0xKToKKyAgICAgICAgZ3JvdXBzID0gc2V0KCkKKworICAgICAgICBmb3IgdGVz
dF90eXBlIGluIHRlc3RfdHlwZXM6CisgICAgICAgICAgICBmb3IgdGVzdCBpbiBzZWxmLnRlc3Rz
W3Rlc3RfdHlwZV06CisgICAgICAgICAgICAgICAgZ3JvdXAgPSB0ZXN0LnVybC5zcGxpdCgiLyIp
WzFdCisgICAgICAgICAgICAgICAgZ3JvdXBzLmFkZChncm91cCkKKworICAgICAgICByZXR1cm4g
Z3JvdXBzCisKKworY2xhc3MgVGVzdFNvdXJjZShvYmplY3QpOgorICAgIF9fbWV0YWNsYXNzX18g
PSBBQkNNZXRhCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGVzdF9xdWV1ZSk6CisgICAgICAg
IHNlbGYudGVzdF9xdWV1ZSA9IHRlc3RfcXVldWUKKyAgICAgICAgc2VsZi5jdXJyZW50X2dyb3Vw
ID0gTm9uZQorICAgICAgICBzZWxmLmN1cnJlbnRfbWV0YWRhdGEgPSBOb25lCisKKyAgICBAYWJz
dHJhY3RtZXRob2QKKyAgICAjQGNsYXNzbWV0aG9kIChkb2Vzbid0IGNvbXBvc2Ugd2l0aCBAYWJz
dHJhY3RtZXRob2QpCisgICAgZGVmIG1ha2VfcXVldWUoY2xzLCB0ZXN0cywgKiprd2FyZ3MpOgor
ICAgICAgICBwYXNzCisKKyAgICBkZWYgZ3JvdXAoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxm
LmN1cnJlbnRfZ3JvdXAgb3IgbGVuKHNlbGYuY3VycmVudF9ncm91cCkgPT0gMDoKKyAgICAgICAg
ICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRfZ3JvdXAsIHNlbGYuY3VycmVu
dF9tZXRhZGF0YSA9IHNlbGYudGVzdF9xdWV1ZS5nZXQoYmxvY2s9RmFsc2UpCisgICAgICAgICAg
ICBleGNlcHQgRW1wdHk6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUsIE5vbmUKKyAgICAg
ICAgcmV0dXJuIHNlbGYuY3VycmVudF9ncm91cCwgc2VsZi5jdXJyZW50X21ldGFkYXRhCisKKwor
Y2xhc3MgR3JvdXBlZFNvdXJjZShUZXN0U291cmNlKToKKyAgICBAY2xhc3NtZXRob2QKKyAgICBk
ZWYgbmV3X2dyb3VwKGNscywgc3RhdGUsIHRlc3QsICoqa3dhcmdzKToKKyAgICAgICAgcmFpc2Ug
Tm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIG1ha2VfcXVl
dWUoY2xzLCB0ZXN0cywgKiprd2FyZ3MpOgorICAgICAgICB0ZXN0X3F1ZXVlID0gUXVldWUoKQor
ICAgICAgICBncm91cHMgPSBbXQorCisgICAgICAgIHN0YXRlID0ge30KKworICAgICAgICBmb3Ig
dGVzdCBpbiB0ZXN0czoKKyAgICAgICAgICAgIGlmIGNscy5uZXdfZ3JvdXAoc3RhdGUsIHRlc3Qs
ICoqa3dhcmdzKToKKyAgICAgICAgICAgICAgICBncm91cHMuYXBwZW5kKChkZXF1ZSgpLCB7fSkp
CisKKyAgICAgICAgICAgIGdyb3VwLCBtZXRhZGF0YSA9IGdyb3Vwc1stMV0KKyAgICAgICAgICAg
IGdyb3VwLmFwcGVuZCh0ZXN0KQorICAgICAgICAgICAgdGVzdC51cGRhdGVfbWV0YWRhdGEobWV0
YWRhdGEpCisKKyAgICAgICAgZm9yIGl0ZW0gaW4gZ3JvdXBzOgorICAgICAgICAgICAgdGVzdF9x
dWV1ZS5wdXQoaXRlbSkKKyAgICAgICAgcmV0dXJuIHRlc3RfcXVldWUKKworCitjbGFzcyBTaW5n
bGVUZXN0U291cmNlKFRlc3RTb3VyY2UpOgorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBtYWtl
X3F1ZXVlKGNscywgdGVzdHMsICoqa3dhcmdzKToKKyAgICAgICAgdGVzdF9xdWV1ZSA9IFF1ZXVl
KCkKKyAgICAgICAgcHJvY2Vzc2VzID0ga3dhcmdzWyJwcm9jZXNzZXMiXQorICAgICAgICBxdWV1
ZXMgPSBbZGVxdWUoW10pIGZvciBfIGluIHhyYW5nZShwcm9jZXNzZXMpXQorICAgICAgICBtZXRh
ZGF0YXMgPSBbe30gZm9yIF8gaW4geHJhbmdlKHByb2Nlc3NlcyldCisgICAgICAgIGZvciB0ZXN0
IGluIHRlc3RzOgorICAgICAgICAgICAgaWR4ID0gaGFzaCh0ZXN0LmlkKSAlIHByb2Nlc3Nlcwor
ICAgICAgICAgICAgZ3JvdXAgPSBxdWV1ZXNbaWR4XQorICAgICAgICAgICAgbWV0YWRhdGEgPSBt
ZXRhZGF0YXNbaWR4XQorICAgICAgICAgICAgZ3JvdXAuYXBwZW5kKHRlc3QpCisgICAgICAgICAg
ICB0ZXN0LnVwZGF0ZV9tZXRhZGF0YShtZXRhZGF0YSkKKworICAgICAgICBmb3IgaXRlbSBpbiB6
aXAocXVldWVzLCBtZXRhZGF0YXMpOgorICAgICAgICAgICAgdGVzdF9xdWV1ZS5wdXQoaXRlbSkK
KworICAgICAgICByZXR1cm4gdGVzdF9xdWV1ZQorCisKK2NsYXNzIFBhdGhHcm91cGVkU291cmNl
KEdyb3VwZWRTb3VyY2UpOgorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBuZXdfZ3JvdXAoY2xz
LCBzdGF0ZSwgdGVzdCwgKiprd2FyZ3MpOgorICAgICAgICBkZXB0aCA9IGt3YXJncy5nZXQoImRl
cHRoIikKKyAgICAgICAgaWYgZGVwdGggaXMgVHJ1ZToKKyAgICAgICAgICAgIGRlcHRoID0gTm9u
ZQorICAgICAgICBwYXRoID0gdXJscGFyc2UudXJsc3BsaXQodGVzdC51cmwpLnBhdGguc3BsaXQo
Ii8iKVsxOi0xXVs6ZGVwdGhdCisgICAgICAgIHJ2ID0gcGF0aCAhPSBzdGF0ZS5nZXQoInByZXZf
cGF0aCIpCisgICAgICAgIHN0YXRlWyJwcmV2X3BhdGgiXSA9IHBhdGgKKyAgICAgICAgcmV0dXJu
IHJ2CmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVu
bmVyL3dwdHJ1bm5lci90ZXN0cnVubmVyLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNj
L3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvdGVzdHJ1bm5lci5weQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYzQ2NTViN2ZhZTMKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci90ZXN0
cnVubmVyLnB5CkBAIC0wLDAgKzEsNzYxIEBACitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHVuaWNv
ZGVfbGl0ZXJhbHMKKworaW1wb3J0IG11bHRpcHJvY2Vzc2luZworaW1wb3J0IHN5cworaW1wb3J0
IHRocmVhZGluZworaW1wb3J0IHRyYWNlYmFjaworZnJvbSBRdWV1ZSBpbXBvcnQgRW1wdHkKK2Zy
b20gY29sbGVjdGlvbnMgaW1wb3J0IG5hbWVkdHVwbGUKK2Zyb20gbXVsdGlwcm9jZXNzaW5nIGlt
cG9ydCBQcm9jZXNzLCBjdXJyZW50X3Byb2Nlc3MsIFF1ZXVlCisKK2Zyb20gbW96bG9nIGltcG9y
dCBzdHJ1Y3R1cmVkbG9nCisKKyMgU3BlY2lhbCB2YWx1ZSB1c2VkIGFzIGEgc2VudGluYWwgaW4g
dmFyaW91cyBjb21tYW5kcworU3RvcCA9IG9iamVjdCgpCisKKworY2xhc3MgTWVzc2FnZUxvZ2dl
cihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXNzYWdlX2Z1bmMpOgorICAgICAg
ICBzZWxmLnNlbmRfbWVzc2FnZSA9IG1lc3NhZ2VfZnVuYworCisgICAgZGVmIF9sb2dfZGF0YShz
ZWxmLCBhY3Rpb24sICoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5zZW5kX21lc3NhZ2UoImxvZyIs
IGFjdGlvbiwga3dhcmdzKQorCisgICAgZGVmIHByb2Nlc3Nfb3V0cHV0KHNlbGYsIHByb2Nlc3Ms
IGRhdGEsIGNvbW1hbmQpOgorICAgICAgICBzZWxmLl9sb2dfZGF0YSgicHJvY2Vzc19vdXRwdXQi
LCBwcm9jZXNzPXByb2Nlc3MsIGRhdGE9ZGF0YSwgY29tbWFuZD1jb21tYW5kKQorCisKK2RlZiBf
bG9nX2Z1bmMobGV2ZWxfbmFtZSk6CisgICAgZGVmIGxvZyhzZWxmLCBtZXNzYWdlKToKKyAgICAg
ICAgc2VsZi5fbG9nX2RhdGEobGV2ZWxfbmFtZS5sb3dlcigpLCBtZXNzYWdlPW1lc3NhZ2UpCisg
ICAgbG9nLl9fZG9jX18gPSAiIiJMb2cgYSBtZXNzYWdlIHdpdGggbGV2ZWwgJXMKKworOnBhcmFt
IG1lc3NhZ2U6IFRoZSBzdHJpbmcgbWVzc2FnZSB0byBsb2cKKyIiIiAlIGxldmVsX25hbWUKKyAg
ICBsb2cuX19uYW1lX18gPSBzdHIobGV2ZWxfbmFtZSkubG93ZXIoKQorICAgIHJldHVybiBsb2cK
KworIyBDcmVhdGUgYWxsIHRoZSBtZXRob2RzIG9uIFN0cnVjdHVyZWRMb2cgZm9yIGRlYnVnIGxl
dmVscworZm9yIGxldmVsX25hbWUgaW4gc3RydWN0dXJlZGxvZy5sb2dfbGV2ZWxzOgorICAgIHNl
dGF0dHIoTWVzc2FnZUxvZ2dlciwgbGV2ZWxfbmFtZS5sb3dlcigpLCBfbG9nX2Z1bmMobGV2ZWxf
bmFtZSkpCisKKworY2xhc3MgVGVzdFJ1bm5lcihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBjb21tYW5kX3F1ZXVlLCByZXN1bHRfcXVldWUsIGV4ZWN1dG9yKToKKyAgICAgICAgIiIi
Q2xhc3MgaW1wbGVtZW50aW5nIHRoZSBtYWluIGxvb3AgZm9yIHJ1bm5pbmcgdGVzdHMuCisKKyAg
ICAgICAgVGhpcyBjbGFzcyBkZWxlZ2F0ZXMgdGhlIGpvYiBvZiBhY3R1YWxseSBydW5uaW5nIGEg
dGVzdCB0byB0aGUgZXhlY3V0b3IKKyAgICAgICAgdGhhdCBpcyBwYXNzZWQgaW4uCisKKyAgICAg
ICAgOnBhcmFtIGNvbW1hbmRfcXVldWU6IHN1YnByb2Nlc3MuUXVldWUgdXNlZCB0byBzZW5kIGNv
bW1hbmRzIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2VzcworICAg
ICAgICA6cGFyYW0gcmVzdWx0X3F1ZXVlOiBzdWJwcm9jZXNzLlF1ZXVlIHVzZWQgdG8gc2VuZCBy
ZXN1bHRzIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgVGVzdE1h
bmFnZXIgcHJvY2VzcworICAgICAgICA6cGFyYW0gZXhlY3V0b3I6IFRlc3RFeGVjdXRvciBvYmpl
Y3QgdGhhdCB3aWxsIGFjdHVhbGx5IHJ1biBhIHRlc3QuCisgICAgICAgICIiIgorICAgICAgICBz
ZWxmLmNvbW1hbmRfcXVldWUgPSBjb21tYW5kX3F1ZXVlCisgICAgICAgIHNlbGYucmVzdWx0X3F1
ZXVlID0gcmVzdWx0X3F1ZXVlCisKKyAgICAgICAgc2VsZi5leGVjdXRvciA9IGV4ZWN1dG9yCisg
ICAgICAgIHNlbGYubmFtZSA9IGN1cnJlbnRfcHJvY2VzcygpLm5hbWUKKyAgICAgICAgc2VsZi5s
b2dnZXIgPSBNZXNzYWdlTG9nZ2VyKHNlbGYuc2VuZF9tZXNzYWdlKQorCisgICAgZGVmIF9fZW50
ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxm
LCBleGNfdHlwZSwgZXhjX3ZhbHVlLCB0cmFjZWJhY2spOgorICAgICAgICBzZWxmLnRlYXJkb3du
KCkKKworICAgIGRlZiBzZXR1cChzZWxmKToKKyAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcoIkV4
ZWN1dG9yIHNldHVwIikKKyAgICAgICAgc2VsZi5leGVjdXRvci5zZXR1cChzZWxmKQorICAgICAg
ICBzZWxmLmxvZ2dlci5kZWJ1ZygiRXhlY3V0b3Igc2V0dXAgZG9uZSIpCisKKyAgICBkZWYgdGVh
cmRvd24oc2VsZik6CisgICAgICAgIHNlbGYuZXhlY3V0b3IudGVhcmRvd24oKQorICAgICAgICBz
ZWxmLnNlbmRfbWVzc2FnZSgicnVubmVyX3RlYXJkb3duIikKKyAgICAgICAgc2VsZi5yZXN1bHRf
cXVldWUgPSBOb25lCisgICAgICAgIHNlbGYuY29tbWFuZF9xdWV1ZSA9IE5vbmUKKyAgICAgICAg
c2VsZi5icm93c2VyID0gTm9uZQorCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgIiIiTWFp
biBsb29wIGFjY2VwdGluZyBjb21tYW5kcyBvdmVyIHRoZSBwaXBlIGFuZCB0cmlnZ2VyaW5nCisg
ICAgICAgIHRoZSBhc3NvY2lhdGVkIG1ldGhvZHMiIiIKKyAgICAgICAgc2VsZi5zZXR1cCgpCisg
ICAgICAgIGNvbW1hbmRzID0geyJydW5fdGVzdCI6IHNlbGYucnVuX3Rlc3QsCisgICAgICAgICAg
ICAgICAgICAgICJzdG9wIjogc2VsZi5zdG9wLAorICAgICAgICAgICAgICAgICAgICAid2FpdCI6
IHNlbGYud2FpdH0KKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGNvbW1hbmQsIGFy
Z3MgPSBzZWxmLmNvbW1hbmRfcXVldWUuZ2V0KCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAg
ICAgICAgICBydiA9IGNvbW1hbmRzW2NvbW1hbmRdKCphcmdzKQorICAgICAgICAgICAgZXhjZXB0
IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICBzZWxmLnNlbmRfbWVzc2FnZSgiZXJyb3IiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciBydW5uaW5nIGNvbW1hbmQg
JXMgd2l0aCBhcmd1bWVudHMgJXI6XG4lcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChjb21tYW5kLCBhcmdzLCB0cmFjZWJhY2suZm9ybWF0X2V4YygpKSkKKyAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgcnYgaXMgU3RvcDoKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWsKKworICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICByZXR1cm4gU3RvcAor
CisgICAgZGVmIHJ1bl90ZXN0KHNlbGYsIHRlc3QpOgorICAgICAgICB0cnk6CisgICAgICAgICAg
ICByZXR1cm4gc2VsZi5leGVjdXRvci5ydW5fdGVzdCh0ZXN0KQorICAgICAgICBleGNlcHQgRXhj
ZXB0aW9uOgorICAgICAgICAgICAgc2VsZi5sb2dnZXIuY3JpdGljYWwodHJhY2ViYWNrLmZvcm1h
dF9leGMoKSkKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICBkZWYgd2FpdChzZWxmKToKKyAgICAg
ICAgc2VsZi5leGVjdXRvci5wcm90b2NvbC53YWl0KCkKKyAgICAgICAgc2VsZi5zZW5kX21lc3Nh
Z2UoIndhaXRfZmluaXNoZWQiKQorCisgICAgZGVmIHNlbmRfbWVzc2FnZShzZWxmLCBjb21tYW5k
LCAqYXJncyk6CisgICAgICAgIHNlbGYucmVzdWx0X3F1ZXVlLnB1dCgoY29tbWFuZCwgYXJncykp
CisKKworZGVmIHN0YXJ0X3J1bm5lcihydW5uZXJfY29tbWFuZF9xdWV1ZSwgcnVubmVyX3Jlc3Vs
dF9xdWV1ZSwKKyAgICAgICAgICAgICAgICAgZXhlY3V0b3JfY2xzLCBleGVjdXRvcl9rd2FyZ3Ms
CisgICAgICAgICAgICAgICAgIGV4ZWN1dG9yX2Jyb3dzZXJfY2xzLCBleGVjdXRvcl9icm93c2Vy
X2t3YXJncywKKyAgICAgICAgICAgICAgICAgc3RvcF9mbGFnKToKKyAgICAiIiJMYXVuY2ggYSBU
ZXN0UnVubmVyIGluIGEgbmV3IHByb2Nlc3MiIiIKKyAgICB0cnk6CisgICAgICAgIGJyb3dzZXIg
PSBleGVjdXRvcl9icm93c2VyX2NscygqKmV4ZWN1dG9yX2Jyb3dzZXJfa3dhcmdzKQorICAgICAg
ICBleGVjdXRvciA9IGV4ZWN1dG9yX2Nscyhicm93c2VyLCAqKmV4ZWN1dG9yX2t3YXJncykKKyAg
ICAgICAgd2l0aCBUZXN0UnVubmVyKHJ1bm5lcl9jb21tYW5kX3F1ZXVlLCBydW5uZXJfcmVzdWx0
X3F1ZXVlLCBleGVjdXRvcikgYXMgcnVubmVyOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgICAgIHJ1bm5lci5ydW4oKQorICAgICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0
OgorICAgICAgICAgICAgICAgIHN0b3BfZmxhZy5zZXQoKQorICAgIGV4Y2VwdCBFeGNlcHRpb246
CisgICAgICAgIHJ1bm5lcl9yZXN1bHRfcXVldWUucHV0KCgibG9nIiwgKCJjcml0aWNhbCIsIHsi
bWVzc2FnZSI6IHRyYWNlYmFjay5mb3JtYXRfZXhjKCl9KSkpCisgICAgICAgIHByaW50ID4+IHN5
cy5zdGRlcnIsIHRyYWNlYmFjay5mb3JtYXRfZXhjKCkKKyAgICAgICAgc3RvcF9mbGFnLnNldCgp
CisgICAgZmluYWxseToKKyAgICAgICAgcnVubmVyX2NvbW1hbmRfcXVldWUgPSBOb25lCisgICAg
ICAgIHJ1bm5lcl9yZXN1bHRfcXVldWUgPSBOb25lCisKKworbWFuYWdlcl9jb3VudCA9IDAKKwor
CitkZWYgbmV4dF9tYW5hZ2VyX251bWJlcigpOgorICAgIGdsb2JhbCBtYW5hZ2VyX2NvdW50Cisg
ICAgbG9jYWwgPSBtYW5hZ2VyX2NvdW50ID0gbWFuYWdlcl9jb3VudCArIDEKKyAgICByZXR1cm4g
bG9jYWwKKworCitjbGFzcyBCcm93c2VyTWFuYWdlcihvYmplY3QpOgorICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBsb2dnZXIsIGJyb3dzZXIsIGNvbW1hbmRfcXVldWUsIG5vX3RpbWVvdXQ9RmFsc2Up
OgorICAgICAgICBzZWxmLmxvZ2dlciA9IGxvZ2dlcgorICAgICAgICBzZWxmLmJyb3dzZXIgPSBi
cm93c2VyCisgICAgICAgIHNlbGYubm9fdGltZW91dCA9IG5vX3RpbWVvdXQKKyAgICAgICAgc2Vs
Zi5icm93c2VyX3NldHRpbmdzID0gTm9uZQorICAgICAgICBzZWxmLmxhc3RfdGVzdCA9IE5vbmUK
KworICAgICAgICBzZWxmLnN0YXJ0ZWQgPSBGYWxzZQorCisgICAgICAgIHNlbGYuaW5pdF90aW1l
ciA9IE5vbmUKKworICAgIGRlZiB1cGRhdGVfc2V0dGluZ3Moc2VsZiwgdGVzdCk6CisgICAgICAg
IGJyb3dzZXJfc2V0dGluZ3MgPSBzZWxmLmJyb3dzZXIuc2V0dGluZ3ModGVzdCkKKyAgICAgICAg
cmVzdGFydF9yZXF1aXJlZCA9ICgoc2VsZi5icm93c2VyX3NldHRpbmdzIGlzIG5vdCBOb25lIGFu
ZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJyb3dzZXJfc2V0dGluZ3MgIT0g
YnJvd3Nlcl9zZXR0aW5ncykgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5s
YXN0X3Rlc3QgIT0gdGVzdCBhbmQgdGVzdC5leHBlY3RlZCgpID09ICJDUkFTSCIpKQorICAgICAg
ICBzZWxmLmJyb3dzZXJfc2V0dGluZ3MgPSBicm93c2VyX3NldHRpbmdzCisgICAgICAgIHNlbGYu
bGFzdF90ZXN0ID0gdGVzdAorICAgICAgICByZXR1cm4gcmVzdGFydF9yZXF1aXJlZAorCisgICAg
ZGVmIGluaXQoc2VsZik6CisgICAgICAgICIiIkxhdW5jaCB0aGUgYnJvd3NlciB0aGF0IGlzIGJl
aW5nIHRlc3RlZCwKKyAgICAgICAgYW5kIHRoZSBUZXN0UnVubmVyIHByb2Nlc3MgdGhhdCB3aWxs
IHJ1biB0aGUgdGVzdHMuIiIiCisgICAgICAgICMgSXQgc2VlbXMgdGhhdCB0aGlzIGxvY2sgaXMg
aGVscGZ1bCB0byBwcmV2ZW50IHNvbWUgcmFjZSB0aGF0IG90aGVyd2lzZQorICAgICAgICAjIHNv
bWV0aW1lcyBzdG9wcyB0aGUgc3Bhd25lZCBwcm9jZXNzZXMgaW5pdGlhbGlzaW5nIGNvcnJlY3Rs
eSwgYW5kCisgICAgICAgICMgbGVhdmVzIHRoaXMgdGhyZWFkIGh1bmcKKyAgICAgICAgaWYgc2Vs
Zi5pbml0X3RpbWVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5pbml0X3RpbWVyLmNh
bmNlbCgpCisKKyAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcoIkluaXQgY2FsbGVkLCBzdGFydGlu
ZyBicm93c2VyIGFuZCBydW5uZXIiKQorCisgICAgICAgIGlmIG5vdCBzZWxmLm5vX3RpbWVvdXQ6
CisgICAgICAgICAgICBzZWxmLmluaXRfdGltZXIgPSB0aHJlYWRpbmcuVGltZXIoc2VsZi5icm93
c2VyLmluaXRfdGltZW91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzZWxmLmluaXRfdGltZW91dCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYg
c2VsZi5pbml0X3RpbWVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuaW5pdF90
aW1lci5zdGFydCgpCisgICAgICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1ZygiU3RhcnRpbmcgYnJv
d3NlciB3aXRoIHNldHRpbmdzICVyIiAlIHNlbGYuYnJvd3Nlcl9zZXR0aW5ncykKKyAgICAgICAg
ICAgIHNlbGYuYnJvd3Nlci5zdGFydCgqKnNlbGYuYnJvd3Nlcl9zZXR0aW5ncykKKyAgICAgICAg
ICAgIHNlbGYuYnJvd3Nlcl9waWQgPSBzZWxmLmJyb3dzZXIucGlkKCkKKyAgICAgICAgZXhjZXB0
OgorICAgICAgICAgICAgc2VsZi5sb2dnZXIud2FybmluZygiRmFpbHVyZSBkdXJpbmcgaW5pdCAl
cyIgJSB0cmFjZWJhY2suZm9ybWF0X2V4YygpKQorICAgICAgICAgICAgaWYgc2VsZi5pbml0X3Rp
bWVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuaW5pdF90aW1lci5jYW5jZWwo
KQorICAgICAgICAgICAgc2VsZi5sb2dnZXIuZXJyb3IodHJhY2ViYWNrLmZvcm1hdF9leGMoKSkK
KyAgICAgICAgICAgIHN1Y2NlZWRlZCA9IEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICBzdWNjZWVkZWQgPSBUcnVlCisgICAgICAgICAgICBzZWxmLnN0YXJ0ZWQgPSBUcnVlCisKKyAg
ICAgICAgcmV0dXJuIHN1Y2NlZWRlZAorCisgICAgZGVmIHNlbmRfbWVzc2FnZShzZWxmLCBjb21t
YW5kLCAqYXJncyk6CisgICAgICAgIHNlbGYuY29tbWFuZF9xdWV1ZS5wdXQoKGNvbW1hbmQsIGFy
Z3MpKQorCisgICAgZGVmIGluaXRfdGltZW91dChzZWxmKToKKyAgICAgICAgIyBUaGlzIGlzIGNh
bGxlZCBmcm9tIGEgc2VwZXJhdGUgdGhyZWFkLCBzbyB3ZSBzZW5kIGEgbWVzc2FnZSB0byB0aGUK
KyAgICAgICAgIyBtYWluIGxvb3Agc28gd2UgZ2V0IGJhY2sgb250byB0aGUgbWFuYWdlciB0aHJl
YWQKKyAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcoImluaXRfZmFpbGVkIGNhbGxlZCBmcm9tIHRp
bWVyIikKKyAgICAgICAgc2VsZi5zZW5kX21lc3NhZ2UoImluaXRfZmFpbGVkIikKKworICAgIGRl
ZiBhZnRlcl9pbml0KHNlbGYpOgorICAgICAgICAiIiJDYWxsYmFjayB3aGVuIHdlIGhhdmUgc3Rh
cnRlZCB0aGUgYnJvd3Nlciwgc3RhcnRlZCB0aGUgcmVtb3RlCisgICAgICAgIGNvbnRyb2wgY29u
bmVjdGlvbiwgYW5kIHdlIGFyZSByZWFkeSB0byBzdGFydCB0ZXN0aW5nLiIiIgorICAgICAgICBp
ZiBzZWxmLmluaXRfdGltZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmluaXRfdGlt
ZXIuY2FuY2VsKCkKKworICAgIGRlZiBzdG9wKHNlbGYsIGZvcmNlPUZhbHNlKToKKyAgICAgICAg
c2VsZi5icm93c2VyLnN0b3AoZm9yY2U9Zm9yY2UpCisgICAgICAgIHNlbGYuc3RhcnRlZCA9IEZh
bHNlCisKKyAgICBkZWYgY2xlYW51cChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5pbml0X3RpbWVy
IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5pbml0X3RpbWVyLmNhbmNlbCgpCisgICAg
ICAgIHNlbGYuYnJvd3Nlci5jbGVhbnVwKCkKKworICAgIGRlZiBjaGVja19mb3JfY3Jhc2hlcyhz
ZWxmKToKKyAgICAgICAgc2VsZi5icm93c2VyLmNoZWNrX2Zvcl9jcmFzaGVzKCkKKworICAgIGRl
ZiBsb2dfY3Jhc2goc2VsZiwgdGVzdF9pZCk6CisgICAgICAgIHNlbGYuYnJvd3Nlci5sb2dfY3Jh
c2gocHJvY2Vzcz1zZWxmLmJyb3dzZXJfcGlkLCB0ZXN0PXRlc3RfaWQpCisKKyAgICBkZWYgaXNf
YWxpdmUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmJyb3dzZXIuaXNfYWxpdmUoKQorCisK
K2NsYXNzIF9SdW5uZXJNYW5hZ2VyU3RhdGUob2JqZWN0KToKKyAgICBiZWZvcmVfaW5pdCA9IG5h
bWVkdHVwbGUoImJlZm9yZV9pbml0IiwgW10pCisgICAgaW5pdGlhbGl6aW5nID0gbmFtZWR0dXBs
ZSgiaW5pdGlhbGl6aW5nX2Jyb3dzZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
WyJ0ZXN0IiwgInRlc3RfZ3JvdXAiLCAiZ3JvdXBfbWV0YWRhdGEiLCAiZmFpbHVyZV9jb3VudCJd
KQorICAgIHJ1bm5pbmcgPSBuYW1lZHR1cGxlKCJydW5uaW5nIiwgWyJ0ZXN0IiwgInRlc3RfZ3Jv
dXAiLCAiZ3JvdXBfbWV0YWRhdGEiXSkKKyAgICByZXN0YXJ0aW5nID0gbmFtZWR0dXBsZSgicmVz
dGFydGluZyIsIFsidGVzdCIsICJ0ZXN0X2dyb3VwIiwgImdyb3VwX21ldGFkYXRhIl0pCisgICAg
ZXJyb3IgPSBuYW1lZHR1cGxlKCJlcnJvciIsIFtdKQorICAgIHN0b3AgPSBuYW1lZHR1cGxlKCJz
dG9wIiwgW10pCisKKworUnVubmVyTWFuYWdlclN0YXRlID0gX1J1bm5lck1hbmFnZXJTdGF0ZSgp
CisKKworY2xhc3MgVGVzdFJ1bm5lck1hbmFnZXIodGhyZWFkaW5nLlRocmVhZCk6CisgICAgZGVm
IF9faW5pdF9fKHNlbGYsIHN1aXRlX25hbWUsIHRlc3RfcXVldWUsIHRlc3Rfc291cmNlX2Nscywg
YnJvd3Nlcl9jbHMsIGJyb3dzZXJfa3dhcmdzLAorICAgICAgICAgICAgICAgICBleGVjdXRvcl9j
bHMsIGV4ZWN1dG9yX2t3YXJncywgc3RvcF9mbGFnLCBwYXVzZV9hZnRlcl90ZXN0PUZhbHNlLAor
ICAgICAgICAgICAgICAgICBwYXVzZV9vbl91bmV4cGVjdGVkPUZhbHNlLCByZXN0YXJ0X29uX3Vu
ZXhwZWN0ZWQ9VHJ1ZSwgZGVidWdfaW5mbz1Ob25lKToKKyAgICAgICAgIiIiVGhyZWFkIHRoYXQg
b3ducyBhIHNpbmdsZSBUZXN0UnVubmVyIHByb2Nlc3MgYW5kIGFueSBwcm9jZXNzZXMgcmVxdWly
ZWQKKyAgICAgICAgYnkgdGhlIFRlc3RSdW5uZXIgKGUuZy4gdGhlIEZpcmVmb3ggYmluYXJ5KS4K
KworICAgICAgICBUZXN0UnVubmVyTWFuYWdlcnMgYXJlIHJlc3BvbnNpYmxlIGZvciBsYXVuY2hp
bmcgdGhlIGJyb3dzZXIgcHJvY2VzcyBhbmQgdGhlCisgICAgICAgIHJ1bm5lciBwcm9jZXNzLCBh
bmQgZm9yIGxvZ2dpbmcgdGhlIHRlc3QgcHJvZ3Jlc3MuIFRoZSBhY3R1YWwgdGVzdCBydW5uaW5n
CisgICAgICAgIGlzIGRvbmUgYnkgdGhlIFRlc3RSdW5uZXIuIEluIHBhcnRpY3VsYXIgdGhleToK
KworICAgICAgICAqIFN0YXJ0IHRoZSBiaW5hcnkgb2YgdGhlIHByb2dyYW0gdW5kZXIgdGVzdAor
ICAgICAgICAqIFN0YXJ0IHRoZSBUZXN0UnVubmVyCisgICAgICAgICogVGVsbCB0aGUgVGVzdFJ1
bm5lciB0byBzdGFydCBhIHRlc3QsIGlmIGFueQorICAgICAgICAqIExvZyB0aGF0IHRoZSB0ZXN0
IHN0YXJ0ZWQKKyAgICAgICAgKiBMb2cgdGhlIHRlc3QgcmVzdWx0cworICAgICAgICAqIFRha2Ug
YW55IHJlbWVkaWFsIGFjdGlvbiByZXF1aXJlZCBlLmcuIHJlc3RhcnQgY3Jhc2hlZCBvciBodW5n
CisgICAgICAgICAgcHJvY2Vzc2VzCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnN1aXRlX25h
bWUgPSBzdWl0ZV9uYW1lCisKKyAgICAgICAgc2VsZi50ZXN0X3NvdXJjZSA9IHRlc3Rfc291cmNl
X2Nscyh0ZXN0X3F1ZXVlKQorCisgICAgICAgIHNlbGYuYnJvd3Nlcl9jbHMgPSBicm93c2VyX2Ns
cworICAgICAgICBzZWxmLmJyb3dzZXJfa3dhcmdzID0gYnJvd3Nlcl9rd2FyZ3MKKworICAgICAg
ICBzZWxmLmV4ZWN1dG9yX2NscyA9IGV4ZWN1dG9yX2NscworICAgICAgICBzZWxmLmV4ZWN1dG9y
X2t3YXJncyA9IGV4ZWN1dG9yX2t3YXJncworCisgICAgICAgICMgRmxhZ3MgdXNlZCB0byBzaHV0
IGRvd24gdGhpcyB0aHJlYWQgaWYgd2UgZ2V0IGEgc2lnaW50CisgICAgICAgIHNlbGYucGFyZW50
X3N0b3BfZmxhZyA9IHN0b3BfZmxhZworICAgICAgICBzZWxmLmNoaWxkX3N0b3BfZmxhZyA9IG11
bHRpcHJvY2Vzc2luZy5FdmVudCgpCisKKyAgICAgICAgc2VsZi5wYXVzZV9hZnRlcl90ZXN0ID0g
cGF1c2VfYWZ0ZXJfdGVzdAorICAgICAgICBzZWxmLnBhdXNlX29uX3VuZXhwZWN0ZWQgPSBwYXVz
ZV9vbl91bmV4cGVjdGVkCisgICAgICAgIHNlbGYucmVzdGFydF9vbl91bmV4cGVjdGVkID0gcmVz
dGFydF9vbl91bmV4cGVjdGVkCisgICAgICAgIHNlbGYuZGVidWdfaW5mbyA9IGRlYnVnX2luZm8K
KworICAgICAgICBzZWxmLm1hbmFnZXJfbnVtYmVyID0gbmV4dF9tYW5hZ2VyX251bWJlcigpCisK
KyAgICAgICAgc2VsZi5jb21tYW5kX3F1ZXVlID0gUXVldWUoKQorICAgICAgICBzZWxmLnJlbW90
ZV9xdWV1ZSA9IFF1ZXVlKCkKKworICAgICAgICBzZWxmLnRlc3RfcnVubmVyX3Byb2MgPSBOb25l
CisKKyAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyhzZWxmLCBuYW1lPSJUaHJlYWQt
VGVzdHJ1bm5lck1hbmFnZXItJWkiICUgc2VsZi5tYW5hZ2VyX251bWJlcikKKyAgICAgICAgIyBU
aGlzIGlzIHN0YXJ0ZWQgaW4gdGhlIGFjdHVhbCBuZXcgdGhyZWFkCisgICAgICAgIHNlbGYubG9n
Z2VyID0gTm9uZQorCisgICAgICAgIHNlbGYudW5leHBlY3RlZF9jb3VudCA9IDAKKworICAgICAg
ICAjIFRoaXMgbWF5IG5vdCByZWFsbHkgYmUgd2hhdCB3ZSB3YW50CisgICAgICAgIHNlbGYuZGFl
bW9uID0gVHJ1ZQorCisgICAgICAgIHNlbGYubWF4X3Jlc3RhcnRzID0gNQorCisgICAgICAgIHNl
bGYuYnJvd3NlciA9IE5vbmUKKworICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgICIiIk1haW4g
bG9vcCBmb3IgdGhlIFRlc3RNYW5hZ2VyLgorCisgICAgICAgIFRlc3RNYW5hZ2VycyBnZW5lcmFs
bHkgcmVjZWl2ZSBjb21tYW5kcyBmcm9tIHRoZWlyCisgICAgICAgIFRlc3RSdW5uZXIgdXBkYXRp
bmcgdGhlbSBvbiB0aGUgc3RhdHVzIG9mIGEgdGVzdC4gVGhleQorICAgICAgICBtYXkgYWxzbyBo
YXZlIGEgc3RvcCBmbGFnIHNldCBieSB0aGUgbWFpbiB0aHJlYWQgaW5kaWNhdGluZworICAgICAg
ICB0aGF0IHRoZSBtYW5hZ2VyIHNob3VsZCBzaHV0IGRvd24gdGhlIG5leHQgdGltZSB0aGUgZXZl
bnQgbG9vcAorICAgICAgICBzcGlucy4iIiIKKyAgICAgICAgc2VsZi5sb2dnZXIgPSBzdHJ1Y3R1
cmVkbG9nLlN0cnVjdHVyZWRMb2dnZXIoc2VsZi5zdWl0ZV9uYW1lKQorICAgICAgICB3aXRoIHNl
bGYuYnJvd3Nlcl9jbHMoc2VsZi5sb2dnZXIsICoqc2VsZi5icm93c2VyX2t3YXJncykgYXMgYnJv
d3NlcjoKKyAgICAgICAgICAgIHNlbGYuYnJvd3NlciA9IEJyb3dzZXJNYW5hZ2VyKHNlbGYubG9n
Z2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJvd3NlciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29tbWFuZF9x
dWV1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vX3RpbWVv
dXQ9c2VsZi5kZWJ1Z19pbmZvIGlzIG5vdCBOb25lKQorICAgICAgICAgICAgZGlzcGF0Y2ggPSB7
CisgICAgICAgICAgICAgICAgUnVubmVyTWFuYWdlclN0YXRlLmJlZm9yZV9pbml0OiBzZWxmLnN0
YXJ0X2luaXQsCisgICAgICAgICAgICAgICAgUnVubmVyTWFuYWdlclN0YXRlLmluaXRpYWxpemlu
Zzogc2VsZi5pbml0LAorICAgICAgICAgICAgICAgIFJ1bm5lck1hbmFnZXJTdGF0ZS5ydW5uaW5n
OiBzZWxmLnJ1bl90ZXN0LAorICAgICAgICAgICAgICAgIFJ1bm5lck1hbmFnZXJTdGF0ZS5yZXN0
YXJ0aW5nOiBzZWxmLnJlc3RhcnRfcnVubmVyCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHNlbGYuc3RhdGUgPSBSdW5uZXJNYW5hZ2VyU3RhdGUuYmVmb3JlX2luaXQoKQorICAgICAgICAg
ICAgZW5kX3N0YXRlcyA9IChSdW5uZXJNYW5hZ2VyU3RhdGUuc3RvcCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgUnVubmVyTWFuYWdlclN0YXRlLmVycm9yKQorCisgICAgICAgICAgICB0cnk6
CisgICAgICAgICAgICAgICAgd2hpbGUgbm90IGlzaW5zdGFuY2Uoc2VsZi5zdGF0ZSwgZW5kX3N0
YXRlcyk6CisgICAgICAgICAgICAgICAgICAgIGYgPSBkaXNwYXRjaC5nZXQoc2VsZi5zdGF0ZS5f
X2NsYXNzX18pCisgICAgICAgICAgICAgICAgICAgIHdoaWxlIGY6CisgICAgICAgICAgICAgICAg
ICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1ZygiRGlzcGF0Y2ggJXMiICUgZi5fX25hbWVfXykKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuc2hvdWxkX3N0b3AoKToKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld19zdGF0
ZSA9IGYoKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbmV3X3N0YXRlIGlzIE5vbmU6Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGYuc3RhdGUgPSBuZXdfc3RhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9n
Z2VyLmRlYnVnKCJuZXcgc3RhdGU6ICVzIiAlIHNlbGYuc3RhdGUuX19jbGFzc19fLl9fbmFtZV9f
KQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLnN0YXRlLCBlbmRf
c3RhdGVzKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAg
ICAgICAgICAgICAgIGYgPSBkaXNwYXRjaC5nZXQoc2VsZi5zdGF0ZS5fX2NsYXNzX18pCisKKyAg
ICAgICAgICAgICAgICAgICAgbmV3X3N0YXRlID0gTm9uZQorICAgICAgICAgICAgICAgICAgICB3
aGlsZSBuZXdfc3RhdGUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld19zdGF0
ZSA9IHNlbGYud2FpdF9ldmVudCgpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnNo
b3VsZF9zdG9wKCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAg
ICAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBuZXdfc3RhdGUKKyAgICAgICAgICAgICAgICAgICAg
c2VsZi5sb2dnZXIuZGVidWcoIm5ldyBzdGF0ZTogJXMiICUgc2VsZi5zdGF0ZS5fX2NsYXNzX18u
X19uYW1lX18pCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAg
ICAgICAgc2VsZi5sb2dnZXIuZXJyb3IodHJhY2ViYWNrLmZvcm1hdF9leGMoZSkpCisgICAgICAg
ICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc2Vs
Zi5sb2dnZXIuZGVidWcoIlRlc3RSdW5uZXJNYW5hZ2VyIG1haW4gbG9vcCB0ZXJtaW5hdGluZywg
c3RhcnRpbmcgY2xlYW51cCIpCisgICAgICAgICAgICAgICAgY2xlYW4gPSBpc2luc3RhbmNlKHNl
bGYuc3RhdGUsIFJ1bm5lck1hbmFnZXJTdGF0ZS5zdG9wKQorICAgICAgICAgICAgICAgIHNlbGYu
c3RvcF9ydW5uZXIoZm9yY2U9bm90IGNsZWFuKQorICAgICAgICAgICAgICAgIHNlbGYudGVhcmRv
d24oKQorICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1ZygiVGVzdFJ1bm5lck1hbmFnZXIgbWFpbiBs
b29wIHRlcm1pbmF0ZWQiKQorCisgICAgZGVmIHdhaXRfZXZlbnQoc2VsZik6CisgICAgICAgIGRp
c3BhdGNoID0geworICAgICAgICAgICAgUnVubmVyTWFuYWdlclN0YXRlLmJlZm9yZV9pbml0OiB7
fSwKKyAgICAgICAgICAgIFJ1bm5lck1hbmFnZXJTdGF0ZS5pbml0aWFsaXppbmc6CisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgImluaXRfc3VjY2VlZGVkIjogc2VsZi5pbml0X3N1Y2Nl
ZWRlZCwKKyAgICAgICAgICAgICAgICAiaW5pdF9mYWlsZWQiOiBzZWxmLmluaXRfZmFpbGVkLAor
ICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIFJ1bm5lck1hbmFnZXJTdGF0ZS5ydW5uaW5nOgor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJ0ZXN0X2VuZGVkIjogc2VsZi50ZXN0X2Vu
ZGVkLAorICAgICAgICAgICAgICAgICJ3YWl0X2ZpbmlzaGVkIjogc2VsZi53YWl0X2ZpbmlzaGVk
LAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIFJ1bm5lck1hbmFnZXJTdGF0ZS5yZXN0YXJ0
aW5nOiB7fSwKKyAgICAgICAgICAgIFJ1bm5lck1hbmFnZXJTdGF0ZS5lcnJvcjoge30sCisgICAg
ICAgICAgICBSdW5uZXJNYW5hZ2VyU3RhdGUuc3RvcDoge30sCisgICAgICAgICAgICBOb25lOiB7
CisgICAgICAgICAgICAgICAgInJ1bm5lcl90ZWFyZG93biI6IHNlbGYucnVubmVyX3RlYXJkb3du
LAorICAgICAgICAgICAgICAgICJsb2ciOiBzZWxmLmxvZywKKyAgICAgICAgICAgICAgICAiZXJy
b3IiOiBzZWxmLmVycm9yCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdHJ5Ogor
ICAgICAgICAgICAgY29tbWFuZCwgZGF0YSA9IHNlbGYuY29tbWFuZF9xdWV1ZS5nZXQoVHJ1ZSwg
MSkKKyAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICBzZWxmLmxvZ2dlci5lcnJv
cigiR290IElPRXJyb3IgZnJvbSBwb2xsIikKKyAgICAgICAgICAgIHJldHVybiBSdW5uZXJNYW5h
Z2VyU3RhdGUucmVzdGFydGluZygwKQorICAgICAgICBleGNlcHQgRW1wdHk6CisgICAgICAgICAg
ICBpZiAoc2VsZi5kZWJ1Z19pbmZvIGFuZCBzZWxmLmRlYnVnX2luZm8uaW50ZXJhY3RpdmUgYW5k
CisgICAgICAgICAgICAgICAgc2VsZi5icm93c2VyLnN0YXJ0ZWQgYW5kIG5vdCBzZWxmLmJyb3dz
ZXIuaXNfYWxpdmUoKSk6CisgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcoIkRlYnVn
Z2VyIGV4aXRlZCIpCisgICAgICAgICAgICAgICAgcmV0dXJuIFJ1bm5lck1hbmFnZXJTdGF0ZS5z
dG9wKCkKKworICAgICAgICAgICAgaWYgKGlzaW5zdGFuY2Uoc2VsZi5zdGF0ZSwgUnVubmVyTWFu
YWdlclN0YXRlLnJ1bm5pbmcpIGFuZAorICAgICAgICAgICAgICAgIG5vdCBzZWxmLnRlc3RfcnVu
bmVyX3Byb2MuaXNfYWxpdmUoKSk6CisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuY29tbWFu
ZF9xdWV1ZS5lbXB0eSgpOgorICAgICAgICAgICAgICAgICAgICAjIFdlIGdvdCBhIG5ldyBtZXNz
YWdlIHNvIHByb2Nlc3MgdGhhdAorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAg
ICAgICAgICAgICMgSWYgd2UgZ290IHRvIGhlcmUgdGhlIHJ1bm5lciBwcmVzdW1hYmx5IHNodXQg
ZG93bgorICAgICAgICAgICAgICAgICMgdW5leHBlY3RlZGx5CisgICAgICAgICAgICAgICAgc2Vs
Zi5sb2dnZXIuaW5mbygiVGVzdCBydW5uZXIgcHJvY2VzcyBzaHV0IGRvd24iKQorCisgICAgICAg
ICAgICAgICAgaWYgc2VsZi5zdGF0ZS50ZXN0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAg
ICAgICAjIFRoaXMgY291bGQgaGFwcGVuIGlmIHRoZSB0ZXN0IHJ1bm5lciBjcmFzaGVkIGZvciBz
b21lIG90aGVyCisgICAgICAgICAgICAgICAgICAgICMgcmVhc29uCisgICAgICAgICAgICAgICAg
ICAgICMgTmVlZCB0byBjb25zaWRlciB0aGUgdW5saWtlbHkgY2FzZSB3aGVyZSBvbmUgdGVzdCBj
YXVzZXMgdGhlCisgICAgICAgICAgICAgICAgICAgICMgcnVubmVyIHByb2Nlc3MgdG8gcmVwZWF0
ZWRseSBkaWUKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIuY3JpdGljYWwoIkxhc3Qg
dGVzdCBkaWQgbm90IGNvbXBsZXRlIikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJ1bm5l
ck1hbmFnZXJTdGF0ZS5lcnJvcigpCisgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIud2Fybmlu
ZygiTW9yZSB0ZXN0cyBmb3VuZCwgYnV0IHJ1bm5lciBwcm9jZXNzIGRpZWQsIHJlc3RhcnRpbmci
KQorICAgICAgICAgICAgICAgIHJldHVybiBSdW5uZXJNYW5hZ2VyU3RhdGUucmVzdGFydGluZygw
KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZiA9IChkaXNwYXRjaC5nZXQoc2VsZi5zdGF0
ZS5fX2NsYXNzX18sIHt9KS5nZXQoY29tbWFuZCkgb3IKKyAgICAgICAgICAgICAgICAgZGlzcGF0
Y2guZ2V0KE5vbmUsIHt9KS5nZXQoY29tbWFuZCkpCisgICAgICAgICAgICBpZiBub3QgZjoKKyAg
ICAgICAgICAgICAgICBzZWxmLmxvZ2dlci53YXJuaW5nKCJHb3QgY29tbWFuZCAlcyBpbiBzdGF0
ZSAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbW1hbmQsIHNl
bGYuc3RhdGUuX19jbGFzc19fLl9fbmFtZV9fKSkKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAg
ICAgICAgICAgIHJldHVybiBmKCpkYXRhKQorCisgICAgZGVmIHNob3VsZF9zdG9wKHNlbGYpOgor
ICAgICAgICByZXR1cm4gc2VsZi5jaGlsZF9zdG9wX2ZsYWcuaXNfc2V0KCkgb3Igc2VsZi5wYXJl
bnRfc3RvcF9mbGFnLmlzX3NldCgpCisKKyAgICBkZWYgc3RhcnRfaW5pdChzZWxmKToKKyAgICAg
ICAgdGVzdCwgdGVzdF9ncm91cCwgZ3JvdXBfbWV0YWRhdGEgPSBzZWxmLmdldF9uZXh0X3Rlc3Qo
KQorICAgICAgICBpZiB0ZXN0IGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gUnVubmVyTWFu
YWdlclN0YXRlLnN0b3AoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIFJ1bm5l
ck1hbmFnZXJTdGF0ZS5pbml0aWFsaXppbmcodGVzdCwgdGVzdF9ncm91cCwgZ3JvdXBfbWV0YWRh
dGEsIDApCisKKyAgICBkZWYgaW5pdChzZWxmKToKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2Uo
c2VsZi5zdGF0ZSwgUnVubmVyTWFuYWdlclN0YXRlLmluaXRpYWxpemluZykKKyAgICAgICAgaWYg
c2VsZi5zdGF0ZS5mYWlsdXJlX2NvdW50ID4gc2VsZi5tYXhfcmVzdGFydHM6CisgICAgICAgICAg
ICBzZWxmLmxvZ2dlci5lcnJvcigiTWF4IHJlc3RhcnRzIGV4Y2VlZGVkIikKKyAgICAgICAgICAg
IHJldHVybiBSdW5uZXJNYW5hZ2VyU3RhdGUuZXJyb3IoKQorCisgICAgICAgIHNlbGYuYnJvd3Nl
ci51cGRhdGVfc2V0dGluZ3Moc2VsZi5zdGF0ZS50ZXN0KQorCisgICAgICAgIHJlc3VsdCA9IHNl
bGYuYnJvd3Nlci5pbml0KCkKKyAgICAgICAgaWYgcmVzdWx0IGlzIFN0b3A6CisgICAgICAgICAg
ICByZXR1cm4gUnVubmVyTWFuYWdlclN0YXRlLmVycm9yKCkKKyAgICAgICAgZWxpZiBub3QgcmVz
dWx0OgorICAgICAgICAgICAgcmV0dXJuIFJ1bm5lck1hbmFnZXJTdGF0ZS5pbml0aWFsaXppbmco
c2VsZi5zdGF0ZS50ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZi5zdGF0ZS50ZXN0X2dyb3VwLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGF0ZS5ncm91cF9tZXRhZGF0YSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYu
c3RhdGUuZmFpbHVyZV9jb3VudCArIDEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxm
LmV4ZWN1dG9yX2t3YXJnc1siZ3JvdXBfbWV0YWRhdGEiXSA9IHNlbGYuc3RhdGUuZ3JvdXBfbWV0
YWRhdGEKKyAgICAgICAgICAgIHNlbGYuc3RhcnRfdGVzdF9ydW5uZXIoKQorCisgICAgZGVmIHN0
YXJ0X3Rlc3RfcnVubmVyKHNlbGYpOgorICAgICAgICAjIE5vdGUgdGhhdCB3ZSBuZWVkIHRvIGJl
IGNhcmVmdWwgdG8gc3RhcnQgdGhlIGJyb3dzZXIgYmVmb3JlIHRoZQorICAgICAgICAjIHRlc3Qg
cnVubmVyIHRvIGVuc3VyZSB0aGF0IGFueSBzdGF0ZSBzZXQgd2hlbiB0aGUgYnJvd3NlciBpcyBz
dGFydGVkCisgICAgICAgICMgY2FuIGJlIHBhc3NlZCBpbiB0byB0aGUgdGVzdCBydW5uZXIuCisg
ICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHNlbGYuc3RhdGUsIFJ1bm5lck1hbmFnZXJTdGF0ZS5p
bml0aWFsaXppbmcpCisgICAgICAgIGFzc2VydCBzZWxmLmNvbW1hbmRfcXVldWUgaXMgbm90IE5v
bmUKKyAgICAgICAgYXNzZXJ0IHNlbGYucmVtb3RlX3F1ZXVlIGlzIG5vdCBOb25lCisgICAgICAg
IHNlbGYubG9nZ2VyLmluZm8oIlN0YXJ0aW5nIHJ1bm5lciIpCisgICAgICAgIGV4ZWN1dG9yX2Jy
b3dzZXJfY2xzLCBleGVjdXRvcl9icm93c2VyX2t3YXJncyA9IHNlbGYuYnJvd3Nlci5icm93c2Vy
LmV4ZWN1dG9yX2Jyb3dzZXIoKQorCisgICAgICAgIGFyZ3MgPSAoc2VsZi5yZW1vdGVfcXVldWUs
CisgICAgICAgICAgICAgICAgc2VsZi5jb21tYW5kX3F1ZXVlLAorICAgICAgICAgICAgICAgIHNl
bGYuZXhlY3V0b3JfY2xzLAorICAgICAgICAgICAgICAgIHNlbGYuZXhlY3V0b3Jfa3dhcmdzLAor
ICAgICAgICAgICAgICAgIGV4ZWN1dG9yX2Jyb3dzZXJfY2xzLAorICAgICAgICAgICAgICAgIGV4
ZWN1dG9yX2Jyb3dzZXJfa3dhcmdzLAorICAgICAgICAgICAgICAgIHNlbGYuY2hpbGRfc3RvcF9m
bGFnKQorICAgICAgICBzZWxmLnRlc3RfcnVubmVyX3Byb2MgPSBQcm9jZXNzKHRhcmdldD1zdGFy
dF9ydW5uZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncz1h
cmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9IlRocmVh
ZC1UZXN0UnVubmVyLSVpIiAlIHNlbGYubWFuYWdlcl9udW1iZXIpCisgICAgICAgIHNlbGYudGVz
dF9ydW5uZXJfcHJvYy5zdGFydCgpCisgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJUZXN0IHJ1
bm5lciBzdGFydGVkIikKKyAgICAgICAgIyBOb3cgd2Ugd2FpdCBmb3IgZWl0aGVyIGFuIGluaXRf
c3VjY2VlZGVkIGV2ZW50IG9yIGFuIGluaXRfZmFpbGVkIGV2ZW50CisKKyAgICBkZWYgaW5pdF9z
dWNjZWVkZWQoc2VsZik6CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHNlbGYuc3RhdGUsIFJ1
bm5lck1hbmFnZXJTdGF0ZS5pbml0aWFsaXppbmcpCisgICAgICAgIHNlbGYuYnJvd3Nlci5hZnRl
cl9pbml0KCkKKyAgICAgICAgcmV0dXJuIFJ1bm5lck1hbmFnZXJTdGF0ZS5ydW5uaW5nKHNlbGYu
c3RhdGUudGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNl
bGYuc3RhdGUudGVzdF9ncm91cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGYuc3RhdGUuZ3JvdXBfbWV0YWRhdGEpCisKKyAgICBkZWYgaW5pdF9mYWlsZWQo
c2VsZik6CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHNlbGYuc3RhdGUsIFJ1bm5lck1hbmFn
ZXJTdGF0ZS5pbml0aWFsaXppbmcpCisgICAgICAgIHNlbGYuYnJvd3Nlci5hZnRlcl9pbml0KCkK
KyAgICAgICAgc2VsZi5zdG9wX3J1bm5lcihmb3JjZT1UcnVlKQorICAgICAgICByZXR1cm4gUnVu
bmVyTWFuYWdlclN0YXRlLmluaXRpYWxpemluZyhzZWxmLnN0YXRlLnRlc3QsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RhdGUudGVzdF9ncm91
cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5z
dGF0ZS5ncm91cF9tZXRhZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZi5zdGF0ZS5mYWlsdXJlX2NvdW50ICsgMSkKKworICAgIGRlZiBnZXRf
bmV4dF90ZXN0KHNlbGYsIHRlc3RfZ3JvdXA9Tm9uZSk6CisgICAgICAgIHRlc3QgPSBOb25lCisg
ICAgICAgIHdoaWxlIHRlc3QgaXMgTm9uZToKKyAgICAgICAgICAgIHdoaWxlIHRlc3RfZ3JvdXAg
aXMgTm9uZSBvciBsZW4odGVzdF9ncm91cCkgPT0gMDoKKyAgICAgICAgICAgICAgICB0ZXN0X2dy
b3VwLCBncm91cF9tZXRhZGF0YSA9IHNlbGYudGVzdF9zb3VyY2UuZ3JvdXAoKQorICAgICAgICAg
ICAgICAgIGlmIHRlc3RfZ3JvdXAgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5s
b2dnZXIuaW5mbygiTm8gbW9yZSB0ZXN0cyIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBO
b25lLCBOb25lLCBOb25lCisgICAgICAgICAgICB0ZXN0ID0gdGVzdF9ncm91cC5wb3BsZWZ0KCkK
KyAgICAgICAgcmV0dXJuIHRlc3QsIHRlc3RfZ3JvdXAsIGdyb3VwX21ldGFkYXRhCisKKworICAg
IGRlZiBydW5fdGVzdChzZWxmKToKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2Uoc2VsZi5zdGF0
ZSwgUnVubmVyTWFuYWdlclN0YXRlLnJ1bm5pbmcpCisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRl
LnRlc3QgaXMgbm90IE5vbmUKKworICAgICAgICBpZiBzZWxmLmJyb3dzZXIudXBkYXRlX3NldHRp
bmdzKHNlbGYuc3RhdGUudGVzdCk6CisgICAgICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKCJSZXN0
YXJ0aW5nIGJyb3dzZXIgZm9yIG5ldyB0ZXN0IGVudmlyb25tZW50IikKKyAgICAgICAgICAgIHJl
dHVybiBSdW5uZXJNYW5hZ2VyU3RhdGUucmVzdGFydGluZyhzZWxmLnN0YXRlLnRlc3QsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGF0ZS50
ZXN0X2dyb3VwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGYuc3RhdGUuZ3JvdXBfbWV0YWRhdGEpCisKKyAgICAgICAgc2VsZi5sb2dnZXIudGVz
dF9zdGFydChzZWxmLnN0YXRlLnRlc3QuaWQpCisgICAgICAgIHNlbGYuc2VuZF9tZXNzYWdlKCJy
dW5fdGVzdCIsIHNlbGYuc3RhdGUudGVzdCkKKworICAgIGRlZiB0ZXN0X2VuZGVkKHNlbGYsIHRl
c3QsIHJlc3VsdHMpOgorICAgICAgICAiIiJIYW5kbGUgdGhlIGVuZCBvZiBhIHRlc3QuCisKKyAg
ICAgICAgT3V0cHV0IHRoZSByZXN1bHQgb2YgZWFjaCBzdWJ0ZXN0LCBhbmQgdGhlIHJlc3VsdCBv
ZiB0aGUgb3ZlcmFsbAorICAgICAgICBoYXJuZXNzIHRvIHRoZSBsb2dzLgorICAgICAgICAiIiIK
KyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2Uoc2VsZi5zdGF0ZSwgUnVubmVyTWFuYWdlclN0YXRl
LnJ1bm5pbmcpCisgICAgICAgIGFzc2VydCB0ZXN0ID09IHNlbGYuc3RhdGUudGVzdAorICAgICAg
ICAjIFdyaXRlIHRoZSByZXN1bHQgb2YgZWFjaCBzdWJ0ZXN0CisgICAgICAgIGZpbGVfcmVzdWx0
LCB0ZXN0X3Jlc3VsdHMgPSByZXN1bHRzCisgICAgICAgIHN1YnRlc3RfdW5leHBlY3RlZCA9IEZh
bHNlCisgICAgICAgIGZvciByZXN1bHQgaW4gdGVzdF9yZXN1bHRzOgorICAgICAgICAgICAgaWYg
dGVzdC5kaXNhYmxlZChyZXN1bHQubmFtZSk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAg
ICAgICAgICAgIGV4cGVjdGVkID0gdGVzdC5leHBlY3RlZChyZXN1bHQubmFtZSkKKyAgICAgICAg
ICAgIGlzX3VuZXhwZWN0ZWQgPSBleHBlY3RlZCAhPSByZXN1bHQuc3RhdHVzCisKKyAgICAgICAg
ICAgIGlmIGlzX3VuZXhwZWN0ZWQ6CisgICAgICAgICAgICAgICAgc2VsZi51bmV4cGVjdGVkX2Nv
dW50ICs9IDEKKyAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1ZygiVW5leHBlY3RlZCBj
b3VudCBpbiB0aGlzIHRocmVhZCAlaSIgJSBzZWxmLnVuZXhwZWN0ZWRfY291bnQpCisgICAgICAg
ICAgICAgICAgc3VidGVzdF91bmV4cGVjdGVkID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi5sb2dn
ZXIudGVzdF9zdGF0dXModGVzdC5pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdC5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0LnN0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9
cmVzdWx0Lm1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBl
Y3RlZD1leHBlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNr
PXJlc3VsdC5zdGFjaykKKworICAgICAgICAjIFRPRE86IGNvbnNpZGVyIGNoYW5naW5nIHJlc3Vs
dCBpZiB0aGVyZSBpcyBhIGNyYXNoIGR1bXAgZmlsZQorCisgICAgICAgICMgV3JpdGUgdGhlIHJl
c3VsdCBvZiB0aGUgdGVzdCBoYXJuZXNzCisgICAgICAgIGV4cGVjdGVkID0gdGVzdC5leHBlY3Rl
ZCgpCisgICAgICAgIHN0YXR1cyA9IGZpbGVfcmVzdWx0LnN0YXR1cyBpZiBmaWxlX3Jlc3VsdC5z
dGF0dXMgIT0gIkVYVEVSTkFMLVRJTUVPVVQiIGVsc2UgIlRJTUVPVVQiCisKKyAgICAgICAgaWYg
ZmlsZV9yZXN1bHQuc3RhdHVzIGluICAoIlRJTUVPVVQiLCAiRVhURVJOQUwtVElNRU9VVCIpOgor
ICAgICAgICAgICAgaWYgc2VsZi5icm93c2VyLmNoZWNrX2Zvcl9jcmFzaGVzKCk6CisgICAgICAg
ICAgICAgICAgc3RhdHVzID0gIkNSQVNIIgorCisgICAgICAgIGlzX3VuZXhwZWN0ZWQgPSBleHBl
Y3RlZCAhPSBzdGF0dXMKKyAgICAgICAgaWYgaXNfdW5leHBlY3RlZDoKKyAgICAgICAgICAgIHNl
bGYudW5leHBlY3RlZF9jb3VudCArPSAxCisgICAgICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1Zygi
VW5leHBlY3RlZCBjb3VudCBpbiB0aGlzIHRocmVhZCAlaSIgJSBzZWxmLnVuZXhwZWN0ZWRfY291
bnQpCisgICAgICAgIGlmIHN0YXR1cyA9PSAiQ1JBU0giOgorICAgICAgICAgICAgc2VsZi5icm93
c2VyLmxvZ19jcmFzaCh0ZXN0LmlkKQorCisgICAgICAgIHNlbGYubG9nZ2VyLnRlc3RfZW5kKHRl
c3QuaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbWVzc2FnZT1maWxlX3Jlc3VsdC5tZXNzYWdlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBleHBlY3RlZD1leHBlY3RlZCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZXh0cmE9ZmlsZV9yZXN1bHQuZXh0cmEpCisKKyAgICAgICAgcmVzdGFydF9i
ZWZvcmVfbmV4dCA9ICh0ZXN0LnJlc3RhcnRfYWZ0ZXIgb3IKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmaWxlX3Jlc3VsdC5zdGF0dXMgaW4gKCJDUkFTSCIsICJFWFRFUk5BTC1USU1F
T1VUIikgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHN1YnRlc3RfdW5leHBl
Y3RlZCBvciBpc191bmV4cGVjdGVkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
bmQgc2VsZi5yZXN0YXJ0X29uX3VuZXhwZWN0ZWQpKQorCisgICAgICAgIGlmIChzZWxmLnBhdXNl
X2FmdGVyX3Rlc3Qgb3IKKyAgICAgICAgICAgIChzZWxmLnBhdXNlX29uX3VuZXhwZWN0ZWQgYW5k
IChzdWJ0ZXN0X3VuZXhwZWN0ZWQgb3IgaXNfdW5leHBlY3RlZCkpKToKKyAgICAgICAgICAgIHNl
bGYubG9nZ2VyLmluZm8oIlBhdXNpbmcgdW50aWwgdGhlIGJyb3dzZXIgZXhpdHMiKQorICAgICAg
ICAgICAgc2VsZi5zZW5kX21lc3NhZ2UoIndhaXQiKQorICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgcmV0dXJuIHNlbGYuYWZ0ZXJfdGVzdF9lbmQocmVzdGFydF9iZWZvcmVfbmV4dCkKKworICAg
IGRlZiB3YWl0X2ZpbmlzaGVkKHNlbGYpOgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShzZWxm
LnN0YXRlLCBSdW5uZXJNYW5hZ2VyU3RhdGUucnVubmluZykKKyAgICAgICAgIyBUaGUgYnJvd3Nl
ciBzaG91bGQgYmUgc3RvcHBlZCBhbHJlYWR5LCBidXQgdGhpcyBlbnN1cmVzIHdlIGRvIGFueSBw
b3N0LXN0b3AKKyAgICAgICAgIyBwcm9jZXNzaW5nCisgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVn
KCJXYWl0IGZpbmlzaGVkIikKKworICAgICAgICByZXR1cm4gc2VsZi5hZnRlcl90ZXN0X2VuZChU
cnVlKQorCisgICAgZGVmIGFmdGVyX3Rlc3RfZW5kKHNlbGYsIHJlc3RhcnQpOgorICAgICAgICBh
c3NlcnQgaXNpbnN0YW5jZShzZWxmLnN0YXRlLCBSdW5uZXJNYW5hZ2VyU3RhdGUucnVubmluZykK
KyAgICAgICAgdGVzdCwgdGVzdF9ncm91cCwgZ3JvdXBfbWV0YWRhdGEgPSBzZWxmLmdldF9uZXh0
X3Rlc3QoKQorICAgICAgICBpZiB0ZXN0IGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gUnVu
bmVyTWFuYWdlclN0YXRlLnN0b3AoKQorICAgICAgICBpZiB0ZXN0X2dyb3VwICE9IHNlbGYuc3Rh
dGUudGVzdF9ncm91cDoKKyAgICAgICAgICAgICMgV2UgYXJlIHN0YXJ0aW5nIGEgbmV3IGdyb3Vw
IG9mIHRlc3RzLCBzbyBmb3JjZSBhIHJlc3RhcnQKKyAgICAgICAgICAgIHJlc3RhcnQgPSBUcnVl
CisgICAgICAgIGlmIHJlc3RhcnQ6CisgICAgICAgICAgICByZXR1cm4gUnVubmVyTWFuYWdlclN0
YXRlLnJlc3RhcnRpbmcodGVzdCwgdGVzdF9ncm91cCwgZ3JvdXBfbWV0YWRhdGEpCisgICAgICAg
IGVsc2U6CisgICAgICAgICAgICByZXR1cm4gUnVubmVyTWFuYWdlclN0YXRlLnJ1bm5pbmcodGVz
dCwgdGVzdF9ncm91cCwgZ3JvdXBfbWV0YWRhdGEpCisKKyAgICBkZWYgcmVzdGFydF9ydW5uZXIo
c2VsZik6CisgICAgICAgICIiIlN0b3AgYW5kIHJlc3RhcnQgdGhlIFRlc3RSdW5uZXIiIiIKKyAg
ICAgICAgYXNzZXJ0IGlzaW5zdGFuY2Uoc2VsZi5zdGF0ZSwgUnVubmVyTWFuYWdlclN0YXRlLnJl
c3RhcnRpbmcpCisgICAgICAgIHNlbGYuc3RvcF9ydW5uZXIoKQorICAgICAgICByZXR1cm4gUnVu
bmVyTWFuYWdlclN0YXRlLmluaXRpYWxpemluZyhzZWxmLnN0YXRlLnRlc3QsIHNlbGYuc3RhdGUu
dGVzdF9ncm91cCwgc2VsZi5zdGF0ZS5ncm91cF9tZXRhZGF0YSwgMCkKKworICAgIGRlZiBsb2co
c2VsZiwgYWN0aW9uLCBrd2FyZ3MpOgorICAgICAgICBnZXRhdHRyKHNlbGYubG9nZ2VyLCBhY3Rp
b24pKCoqa3dhcmdzKQorCisgICAgZGVmIGVycm9yKHNlbGYsIG1lc3NhZ2UpOgorICAgICAgICBz
ZWxmLmxvZ2dlci5lcnJvcihtZXNzYWdlKQorICAgICAgICBzZWxmLnJlc3RhcnRfcnVubmVyKCkK
KworICAgIGRlZiBzdG9wX3J1bm5lcihzZWxmLCBmb3JjZT1GYWxzZSk6CisgICAgICAgICIiIlN0
b3AgdGhlIFRlc3RSdW5uZXIgYW5kIHRoZSBicm93c2VyIGJpbmFyeS4iIiIKKyAgICAgICAgaWYg
c2VsZi50ZXN0X3J1bm5lcl9wcm9jIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKworICAg
ICAgICBpZiBzZWxmLnRlc3RfcnVubmVyX3Byb2MuaXNfYWxpdmUoKToKKyAgICAgICAgICAgIHNl
bGYuc2VuZF9tZXNzYWdlKCJzdG9wIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5i
cm93c2VyLnN0b3AoZm9yY2U9Zm9yY2UpCisgICAgICAgICAgICBzZWxmLmVuc3VyZV9ydW5uZXJf
c3RvcHBlZCgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLmNsZWFudXAoKQor
CisgICAgZGVmIHRlYXJkb3duKHNlbGYpOgorICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1ZygidGVh
cmRvd24gaW4gdGVzdHJ1bm5lcm1hbmFnZXIiKQorICAgICAgICBzZWxmLnRlc3RfcnVubmVyX3By
b2MgPSBOb25lCisgICAgICAgIHNlbGYuY29tbWFuZF9xdWV1ZS5jbG9zZSgpCisgICAgICAgIHNl
bGYucmVtb3RlX3F1ZXVlLmNsb3NlKCkKKyAgICAgICAgc2VsZi5jb21tYW5kX3F1ZXVlID0gTm9u
ZQorICAgICAgICBzZWxmLnJlbW90ZV9xdWV1ZSA9IE5vbmUKKworICAgIGRlZiBlbnN1cmVfcnVu
bmVyX3N0b3BwZWQoc2VsZik6CisgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJlbnN1cmVfcnVu
bmVyX3N0b3BwZWQiKQorICAgICAgICBpZiBzZWxmLnRlc3RfcnVubmVyX3Byb2MgaXMgTm9uZToK
KyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJ3YWl0aW5n
IGZvciBydW5uZXIgcHJvY2VzcyB0byBlbmQiKQorICAgICAgICBzZWxmLnRlc3RfcnVubmVyX3By
b2Muam9pbigxMCkKKyAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcoIkFmdGVyIGpvaW4iKQorICAg
ICAgICBpZiBzZWxmLnRlc3RfcnVubmVyX3Byb2MuaXNfYWxpdmUoKToKKyAgICAgICAgICAgICMg
VGhpcyBtaWdodCBsZWFrIGEgZmlsZSBoYW5kbGUgZnJvbSB0aGUgcXVldWUKKyAgICAgICAgICAg
IHNlbGYubG9nZ2VyLndhcm5pbmcoIkZvcmNpYmx5IHRlcm1pbmF0aW5nIHJ1bm5lciBwcm9jZXNz
IikKKyAgICAgICAgICAgIHNlbGYudGVzdF9ydW5uZXJfcHJvYy50ZXJtaW5hdGUoKQorICAgICAg
ICAgICAgc2VsZi50ZXN0X3J1bm5lcl9wcm9jLmpvaW4oMTApCisgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1ZygiVGVzdHJ1bm5lciBleGl0ZWQgd2l0aCBjb2RlICVp
IiAlIHNlbGYudGVzdF9ydW5uZXJfcHJvYy5leGl0Y29kZSkKKworICAgIGRlZiBydW5uZXJfdGVh
cmRvd24oc2VsZik6CisgICAgICAgIHNlbGYuZW5zdXJlX3J1bm5lcl9zdG9wcGVkKCkKKyAgICAg
ICAgcmV0dXJuIFJ1bm5lck1hbmFnZXJTdGF0ZS5zdG9wKCkKKworICAgIGRlZiBzZW5kX21lc3Nh
Z2Uoc2VsZiwgY29tbWFuZCwgKmFyZ3MpOgorICAgICAgICBzZWxmLnJlbW90ZV9xdWV1ZS5wdXQo
KGNvbW1hbmQsIGFyZ3MpKQorCisgICAgZGVmIGNsZWFudXAoc2VsZik6CisgICAgICAgIHNlbGYu
bG9nZ2VyLmRlYnVnKCJUZXN0TWFuYWdlciBjbGVhbnVwIikKKyAgICAgICAgaWYgc2VsZi5icm93
c2VyOgorICAgICAgICAgICAgc2VsZi5icm93c2VyLmNsZWFudXAoKQorICAgICAgICB3aGlsZSBU
cnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLndhcm5p
bmcoIiAiLmpvaW4obWFwKHJlcHIsIHNlbGYuY29tbWFuZF9xdWV1ZS5nZXRfbm93YWl0KCkpKSkK
KyAgICAgICAgICAgIGV4Y2VwdCBFbXB0eToKKyAgICAgICAgICAgICAgICBicmVhaworCisKK2Rl
ZiBtYWtlX3Rlc3RfcXVldWUodGVzdHMsIHRlc3Rfc291cmNlX2NscywgKip0ZXN0X3NvdXJjZV9r
d2FyZ3MpOgorICAgIHF1ZXVlID0gdGVzdF9zb3VyY2VfY2xzLm1ha2VfcXVldWUodGVzdHMsICoq
dGVzdF9zb3VyY2Vfa3dhcmdzKQorCisgICAgIyBUaGVyZSBpcyBhIHJhY2UgY29uZGl0aW9uIHRo
YXQgbWVhbnMgc29tZXRpbWVzIHdlIGNvbnRpbnVlCisgICAgIyBiZWZvcmUgdGhlIHRlc3RzIGhh
dmUgYmVlbiB3cml0dGVuIHRvIHRoZSB1bmRlcmx5aW5nIHBpcGUuCisgICAgIyBQb2xsaW5nIHRo
ZSBwaXBlIGZvciBkYXRhIGhlcmUgYXZvaWRzIHRoYXQKKyAgICBxdWV1ZS5fcmVhZGVyLnBvbGwo
MTApCisgICAgYXNzZXJ0IG5vdCBxdWV1ZS5lbXB0eSgpCisgICAgcmV0dXJuIHF1ZXVlCisKKwor
Y2xhc3MgTWFuYWdlckdyb3VwKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN1aXRl
X25hbWUsIHNpemUsIHRlc3Rfc291cmNlX2NscywgdGVzdF9zb3VyY2Vfa3dhcmdzLAorICAgICAg
ICAgICAgICAgICBicm93c2VyX2NscywgYnJvd3Nlcl9rd2FyZ3MsCisgICAgICAgICAgICAgICAg
IGV4ZWN1dG9yX2NscywgZXhlY3V0b3Jfa3dhcmdzLAorICAgICAgICAgICAgICAgICBwYXVzZV9h
ZnRlcl90ZXN0PUZhbHNlLAorICAgICAgICAgICAgICAgICBwYXVzZV9vbl91bmV4cGVjdGVkPUZh
bHNlLAorICAgICAgICAgICAgICAgICByZXN0YXJ0X29uX3VuZXhwZWN0ZWQ9VHJ1ZSwKKyAgICAg
ICAgICAgICAgICAgZGVidWdfaW5mbz1Ob25lKToKKyAgICAgICAgIiIiTWFpbiB0aHJlYWQgb2Jq
ZWN0IHRoYXQgb3ducyBhbGwgdGhlIFRlc3RNYW5hZ2VyIHRocmVhZHMuIiIiCisgICAgICAgIHNl
bGYuc3VpdGVfbmFtZSA9IHN1aXRlX25hbWUKKyAgICAgICAgc2VsZi5zaXplID0gc2l6ZQorICAg
ICAgICBzZWxmLnRlc3Rfc291cmNlX2NscyA9IHRlc3Rfc291cmNlX2NscworICAgICAgICBzZWxm
LnRlc3Rfc291cmNlX2t3YXJncyA9IHRlc3Rfc291cmNlX2t3YXJncworICAgICAgICBzZWxmLmJy
b3dzZXJfY2xzID0gYnJvd3Nlcl9jbHMKKyAgICAgICAgc2VsZi5icm93c2VyX2t3YXJncyA9IGJy
b3dzZXJfa3dhcmdzCisgICAgICAgIHNlbGYuZXhlY3V0b3JfY2xzID0gZXhlY3V0b3JfY2xzCisg
ICAgICAgIHNlbGYuZXhlY3V0b3Jfa3dhcmdzID0gZXhlY3V0b3Jfa3dhcmdzCisgICAgICAgIHNl
bGYucGF1c2VfYWZ0ZXJfdGVzdCA9IHBhdXNlX2FmdGVyX3Rlc3QKKyAgICAgICAgc2VsZi5wYXVz
ZV9vbl91bmV4cGVjdGVkID0gcGF1c2Vfb25fdW5leHBlY3RlZAorICAgICAgICBzZWxmLnJlc3Rh
cnRfb25fdW5leHBlY3RlZCA9IHJlc3RhcnRfb25fdW5leHBlY3RlZAorICAgICAgICBzZWxmLmRl
YnVnX2luZm8gPSBkZWJ1Z19pbmZvCisKKyAgICAgICAgc2VsZi5wb29sID0gc2V0KCkKKyAgICAg
ICAgIyBFdmVudCB0aGF0IGlzIHBvbGxlZCBieSB0aHJlYWRzIHNvIHRoYXQgdGhleSBjYW4gZ3Jh
Y2VmdWxseSBleGl0IGluIHRoZSBmYWNlCisgICAgICAgICMgb2Ygc2lnaW50CisgICAgICAgIHNl
bGYuc3RvcF9mbGFnID0gdGhyZWFkaW5nLkV2ZW50KCkKKyAgICAgICAgc2VsZi5sb2dnZXIgPSBz
dHJ1Y3R1cmVkbG9nLlN0cnVjdHVyZWRMb2dnZXIoc3VpdGVfbmFtZSkKKworICAgIGRlZiBfX2Vu
dGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2Vs
ZiwgZXhjX3R5cGUsIGV4Y192YWwsIGV4Y190Yik6CisgICAgICAgIHNlbGYuc3RvcCgpCisKKyAg
ICBkZWYgcnVuKHNlbGYsIHRlc3RfdHlwZSwgdGVzdHMpOgorICAgICAgICAiIiJTdGFydCBhbGwg
bWFuYWdlcnMgaW4gdGhlIGdyb3VwIiIiCisgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJVc2lu
ZyAlaSBwcm9jZXNzZXMiICUgc2VsZi5zaXplKQorICAgICAgICB0eXBlX3Rlc3RzID0gdGVzdHNb
dGVzdF90eXBlXQorICAgICAgICBpZiBub3QgdHlwZV90ZXN0czoKKyAgICAgICAgICAgIHNlbGYu
bG9nZ2VyLmluZm8oIk5vICVzIHRlc3RzIHRvIHJ1biIgJSB0ZXN0X3R5cGUpCisgICAgICAgICAg
ICByZXR1cm4KKworICAgICAgICB0ZXN0X3F1ZXVlID0gbWFrZV90ZXN0X3F1ZXVlKHR5cGVfdGVz
dHMsIHNlbGYudGVzdF9zb3VyY2VfY2xzLCAqKnNlbGYudGVzdF9zb3VyY2Vfa3dhcmdzKQorCisg
ICAgICAgIGZvciBfIGluIHJhbmdlKHNlbGYuc2l6ZSk6CisgICAgICAgICAgICBtYW5hZ2VyID0g
VGVzdFJ1bm5lck1hbmFnZXIoc2VsZi5zdWl0ZV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRlc3RfcXVldWUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZi50ZXN0X3NvdXJjZV9jbHMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5icm93c2VyX2NscywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJyb3dzZXJfa3dhcmdzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXhlY3V0b3JfY2xzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXhlY3V0b3Jfa3dhcmdzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RvcF9mbGFnLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGF1c2VfYWZ0ZXJfdGVz
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBhdXNlX29u
X3VuZXhwZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5yZXN0YXJ0X29uX3VuZXhwZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2VsZi5kZWJ1Z19pbmZvKQorICAgICAgICAgICAgbWFuYWdlci5zdGFydCgpCisg
ICAgICAgICAgICBzZWxmLnBvb2wuYWRkKG1hbmFnZXIpCisgICAgICAgIHNlbGYud2FpdCgpCisK
KyAgICBkZWYgaXNfYWxpdmUoc2VsZik6CisgICAgICAgICIiIkJvb2xlYW4gaW5kaWNhdGluZyB3
aGV0aGVyIGFueSBtYW5hZ2VyIGluIHRoZSBncm91cCBpcyBzdGlsbCBhbGl2ZSIiIgorICAgICAg
ICByZXR1cm4gYW55KG1hbmFnZXIuaXNfYWxpdmUoKSBmb3IgbWFuYWdlciBpbiBzZWxmLnBvb2wp
CisKKyAgICBkZWYgd2FpdChzZWxmKToKKyAgICAgICAgIiIiV2FpdCBmb3IgYWxsIHRoZSBtYW5h
Z2VycyBpbiB0aGUgZ3JvdXAgdG8gZmluaXNoIiIiCisgICAgICAgIGZvciBpdGVtIGluIHNlbGYu
cG9vbDoKKyAgICAgICAgICAgIGl0ZW0uam9pbigpCisKKyAgICBkZWYgc3RvcChzZWxmKToKKyAg
ICAgICAgIiIiU2V0IHRoZSBzdG9wIGZsYWcgc28gdGhhdCBhbGwgbWFuYWdlcnMgaW4gdGhlIGdy
b3VwIHN0b3AgYXMgc29vbgorICAgICAgICBhcyBwb3NzaWJsZSIiIgorICAgICAgICBzZWxmLnN0
b3BfZmxhZy5zZXQoKQorICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1ZygiU3RvcCBmbGFnIHNldCBp
biBNYW5hZ2VyR3JvdXAiKQorCisgICAgZGVmIHVuZXhwZWN0ZWRfY291bnQoc2VsZik6CisgICAg
ICAgIHJldHVybiBzdW0oaXRlbS51bmV4cGVjdGVkX2NvdW50IGZvciBpdGVtIGluIHNlbGYucG9v
bCkKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5u
ZXIvd3B0cnVubmVyL3Rlc3RzL19faW5pdF9fLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQv
dzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvdGVzdHMvX19pbml0X18ucHkKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmU2OWRlMjliYjJkCmRpZmYgLS1naXQgYS9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci90ZXN0
cy90ZXN0X2NodW5rZXIucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0
cnVubmVyL3dwdHJ1bm5lci90ZXN0cy90ZXN0X2NodW5rZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAuLjA2MmI2ODdmYWI5Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vi
RHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvdGVzdHMv
dGVzdF9jaHVua2VyLnB5CkBAIC0wLDAgKzEsOTEgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0
IHN5cworZnJvbSBvcy5wYXRoIGltcG9ydCBqb2luLCBkaXJuYW1lCitmcm9tIG1vemxvZyBpbXBv
cnQgc3RydWN0dXJlZAorCitpbXBvcnQgcHl0ZXN0CisKK3N5cy5wYXRoLmluc2VydCgwLCBqb2lu
KGRpcm5hbWUoX19maWxlX18pLCAiLi4iLCAiLi4iKSkKKworZnJvbSB3cHRydW5uZXIudGVzdGxv
YWRlciBpbXBvcnQgRXF1YWxUaW1lQ2h1bmtlcgorCitzdHJ1Y3R1cmVkLnNldF9kZWZhdWx0X2xv
Z2dlcihzdHJ1Y3R1cmVkLnN0cnVjdHVyZWRsb2cuU3RydWN0dXJlZExvZ2dlcigiVGVzdENodW5r
ZXIiKSkKKworY2xhc3MgTW9ja1Rlc3Qob2JqZWN0KToKKyAgICBkZWZhdWx0X3RpbWVvdXQgPSAx
MAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGlkLCB0aW1lb3V0PTEwKToKKyAgICAgICAgc2Vs
Zi5pZCA9IGlkCisgICAgICAgIHNlbGYuaXRlbV90eXBlID0gInRlc3RoYXJuZXNzIgorICAgICAg
ICBzZWxmLnRpbWVvdXQgPSB0aW1lb3V0CisKKworZGVmIG1ha2VfbW9ja19tYW5pZmVzdCgqaXRl
bXMpOgorICAgIHJ2ID0gW10KKyAgICBmb3IgdGVzdF90eXBlLCBkaXJfcGF0aCwgbnVtX3Rlc3Rz
IGluIGl0ZW1zOgorICAgICAgICBmb3IgaSBpbiByYW5nZShudW1fdGVzdHMpOgorICAgICAgICAg
ICAgcnYuYXBwZW5kKCh0ZXN0X3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgIGRpcl9wYXRo
ICsgIi8laS50ZXN0IiAlIGksCisgICAgICAgICAgICAgICAgICAgICAgIHNldChbTW9ja1Rlc3Qo
aSldKSkpCisgICAgcmV0dXJuIHJ2CisKKworY2xhc3MgVGVzdEVxdWFsVGltZUNodW5rZXIodW5p
dHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfaW5jbHVkZV9hbGwoc2VsZik6CisgICAg
ICAgIHRlc3RzID0gbWFrZV9tb2NrX21hbmlmZXN0KCgidGVzdCIsICJhIiwgMTApLCAoInRlc3Qi
LCAiYS9iIiwgMTApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoInRlc3Qi
LCAiYyIsIDEwKSkKKworICAgICAgICBjaHVua18xID0gbGlzdChFcXVhbFRpbWVDaHVua2VyKDMs
IDEpKHRlc3RzKSkKKyAgICAgICAgY2h1bmtfMiA9IGxpc3QoRXF1YWxUaW1lQ2h1bmtlcigzLCAy
KSh0ZXN0cykpCisgICAgICAgIGNodW5rXzMgPSBsaXN0KEVxdWFsVGltZUNodW5rZXIoMywgMyko
dGVzdHMpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHRlc3RzWzoxMF0sIGNodW5rXzEp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHRlc3RzWzEwOjIwXSwgY2h1bmtfMikKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbHModGVzdHNbMjA6XSwgY2h1bmtfMykKKworICAgIGRlZiB0ZXN0
X2luY2x1ZGVfYWxsXzEoc2VsZik6CisgICAgICAgIHRlc3RzID0gbWFrZV9tb2NrX21hbmlmZXN0
KCgidGVzdCIsICJhIiwgNSksICgidGVzdCIsICJhL2IiLCA1KSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKCJ0ZXN0IiwgImMiLCAxMCksICgidGVzdCIsICJkIiwgMTApKQor
CisgICAgICAgIGNodW5rXzEgPSBsaXN0KEVxdWFsVGltZUNodW5rZXIoMywgMSkodGVzdHMpKQor
ICAgICAgICBjaHVua18yID0gbGlzdChFcXVhbFRpbWVDaHVua2VyKDMsIDIpKHRlc3RzKSkKKyAg
ICAgICAgY2h1bmtfMyA9IGxpc3QoRXF1YWxUaW1lQ2h1bmtlcigzLCAzKSh0ZXN0cykpCisKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbHModGVzdHNbOjEwXSwgY2h1bmtfMSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbHModGVzdHNbMTA6MjBdLCBjaHVua18yKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFscyh0ZXN0c1syMDpdLCBjaHVua18zKQorCisgICAgZGVmIHRlc3RfbG9uZyhzZWxmKToK
KyAgICAgICAgdGVzdHMgPSBtYWtlX21vY2tfbWFuaWZlc3QoKCJ0ZXN0IiwgImEiLCAxMDApLCAo
InRlc3QiLCAiYS9iIiwgMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgi
dGVzdCIsICJjIiwgMSkpCisKKyAgICAgICAgY2h1bmtfMSA9IGxpc3QoRXF1YWxUaW1lQ2h1bmtl
cigzLCAxKSh0ZXN0cykpCisgICAgICAgIGNodW5rXzIgPSBsaXN0KEVxdWFsVGltZUNodW5rZXIo
MywgMikodGVzdHMpKQorICAgICAgICBjaHVua18zID0gbGlzdChFcXVhbFRpbWVDaHVua2VyKDMs
IDMpKHRlc3RzKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0ZXN0c1s6MTAwXSwgY2h1
bmtfMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModGVzdHNbMTAwOjEwMV0sIGNodW5rXzIp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHRlc3RzWzEwMToxMDJdLCBjaHVua18zKQorCisg
ICAgZGVmIHRlc3RfbG9uZ18xKHNlbGYpOgorICAgICAgICB0ZXN0cyA9IG1ha2VfbW9ja19tYW5p
ZmVzdCgoInRlc3QiLCAiYSIsIDEpLCAoInRlc3QiLCAiYS9iIiwgMTAwKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKCJ0ZXN0IiwgImMiLCAxKSkKKworICAgICAgICBjaHVu
a18xID0gbGlzdChFcXVhbFRpbWVDaHVua2VyKDMsIDEpKHRlc3RzKSkKKyAgICAgICAgY2h1bmtf
MiA9IGxpc3QoRXF1YWxUaW1lQ2h1bmtlcigzLCAyKSh0ZXN0cykpCisgICAgICAgIGNodW5rXzMg
PSBsaXN0KEVxdWFsVGltZUNodW5rZXIoMywgMykodGVzdHMpKQorCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKHRlc3RzWzoxXSwgY2h1bmtfMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMo
dGVzdHNbMToxMDFdLCBjaHVua18yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0ZXN0c1sx
MDE6MTAyXSwgY2h1bmtfMykKKworICAgIGRlZiB0ZXN0X3Rvb19mZXdfZGlycyhzZWxmKToKKyAg
ICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHRl
c3RzID0gbWFrZV9tb2NrX21hbmlmZXN0KCgidGVzdCIsICJhIiwgMSksICgidGVzdCIsICJhL2Ii
LCAxMDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJ0ZXN0Iiwg
ImMiLCAxKSkKKyAgICAgICAgICAgIGxpc3QoRXF1YWxUaW1lQ2h1bmtlcig0LCAxKSh0ZXN0cykp
CisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlm
ZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0
cnVubmVyL3Rlc3RzL3Rlc3RfaG9zdHMucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mv
dG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci90ZXN0cy90ZXN0X2hvc3RzLnB5Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44MDhiODE2MDZhZQotLS0gL2Rldi9udWxsCisr
KyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVy
L3Rlc3RzL3Rlc3RfaG9zdHMucHkKQEAgLTAsMCArMSw1NiBAQAoraW1wb3J0IHVuaXR0ZXN0Citp
bXBvcnQgc3lzCitmcm9tIG9zLnBhdGggaW1wb3J0IGpvaW4sIGRpcm5hbWUKK2Zyb20gY1N0cmlu
Z0lPIGltcG9ydCBTdHJpbmdJTworCitzeXMucGF0aC5pbnNlcnQoMCwgam9pbihkaXJuYW1lKF9f
ZmlsZV9fKSwgIi4uIiwgIi4uIikpCisKK2Zyb20gd3B0cnVubmVyIGltcG9ydCBob3N0cworCisK
K2NsYXNzIEhvc3RzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIGRvX3Rlc3Qoc2Vs
ZiwgaW5wdXQsIGV4cGVjdGVkKToKKyAgICAgICAgaG9zdF9maWxlID0gaG9zdHMuSG9zdHNGaWxl
LmZyb21fZmlsZShTdHJpbmdJTyhpbnB1dCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGhv
c3RfZmlsZS50b19zdHJpbmcoKSwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9zaW1wbGUoc2Vs
Zik6CisgICAgICAgIHNlbGYuZG9fdGVzdCgiIiIxMjcuMC4wLjEgICAgXHRsb2NhbGhvc3QgIGFs
aWFzICMgY29tbWVudAorIyBBbm90aGVyIGNvbW1lbnQiIiIsCisgICAgICAgICAgICAgICAgICAg
ICAiIiIxMjcuMC4wLjEgbG9jYWxob3N0IGFsaWFzICMgY29tbWVudAorIyBBbm90aGVyIGNvbW1l
bnQKKyIiIikKKworICAgIGRlZiB0ZXN0X2JsYW5rX2xpbmVzKHNlbGYpOgorICAgICAgICBzZWxm
LmRvX3Rlc3QoIiIiMTI3LjAuMC4xICAgIFx0bG9jYWxob3N0ICBhbGlhcyAjIGNvbW1lbnQKKwor
XHIKKyAgICBcdAorIyBBbm90aGVyIGNvbW1lbnQiIiIsCisgICAgICAgICAgICAgICAgICAgICAi
IiIxMjcuMC4wLjEgbG9jYWxob3N0IGFsaWFzICMgY29tbWVudAorIyBBbm90aGVyIGNvbW1lbnQK
KyIiIikKKworICAgIGRlZiB0ZXN0X3doaXRlc3BhY2Uoc2VsZik6CisgICAgICAgIHNlbGYuZG9f
dGVzdCgiIiIgICAgXHQxMjcuMC4wLjEgICAgXHRsb2NhbGhvc3QgIGFsaWFzICMgY29tbWVudCAg
ICAgXHIKKyAgICBcdCMgQW5vdGhlciBjb21tZW50IiIiLAorICAgICAgICAgICAgICAgICAgICAg
IiIiMTI3LjAuMC4xIGxvY2FsaG9zdCBhbGlhcyAjIGNvbW1lbnQKKyMgQW5vdGhlciBjb21tZW50
CisiIiIpCisKKyAgICBkZWYgdGVzdF9hbGlnbm1lbnQoc2VsZik6CisgICAgICAgIHNlbGYuZG9f
dGVzdCgiIiIxMjcuMC4wLjEgICAgXHRsb2NhbGhvc3QgIGFsaWFzCisxOTIuMTY4LjEuMSBhbm90
aGVyX2hvc3QgICAgYW5vdGhlcl9hbGlhcworIiIiLCIiIjEyNy4wLjAuMSAgIGxvY2FsaG9zdCAg
ICBhbGlhcworMTkyLjE2OC4xLjEgYW5vdGhlcl9ob3N0IGFub3RoZXJfYWxpYXMKKyIiIgorKQor
CisgICAgZGVmIHRlc3RfbXVsdGlwbGVfc2FtZV9uYW1lKHNlbGYpOgorICAgICAgICAjIFRoZSBz
ZW1hbnRpY3MgYXJlIHRoYXQgd2Ugb3ZlcndyaXRlIGVhcmxpZXIgZW50cmllcyB3aXRoIHRoZSBz
YW1lIG5hbWUKKyAgICAgICAgc2VsZi5kb190ZXN0KCIiIjEyNy4wLjAuMSAgICBcdGxvY2FsaG9z
dCAgYWxpYXMKKzE5Mi4xNjguMS4xIGxvY2FsaG9zdCAgICBhbm90aGVyX2FsaWFzIiIiLCIiIjE5
Mi4xNjguMS4xIGxvY2FsaG9zdCBhbm90aGVyX2FsaWFzCisiIiIKKykKKworaWYgX19uYW1lX18g
PT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL1dlYkRyaXZl
clRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3Rlc3RzL3Rlc3Rf
dGVzdGxvYWRlci5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5u
ZXIvd3B0cnVubmVyL3Rlc3RzL3Rlc3RfdGVzdGxvYWRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uNTU2YjJiN2YzZmEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJE
cml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci90ZXN0cy90
ZXN0X3Rlc3Rsb2FkZXIucHkKQEAgLTAsMCArMSwzMCBAQAorZnJvbSBfX2Z1dHVyZV9fIGltcG9y
dCB1bmljb2RlX2xpdGVyYWxzCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHRlbXBm
aWxlCisKK3N5cy5wYXRoLmluc2VydCgwLCBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9f
ZmlsZV9fKSwgIi4uIiwgIi4uIikpCisKK2Zyb20gbW96bG9nIGltcG9ydCBzdHJ1Y3R1cmVkCitm
cm9tIHdwdHJ1bm5lci50ZXN0bG9hZGVyIGltcG9ydCBUZXN0RmlsdGVyIGFzIEZpbHRlcgorZnJv
bSAudGVzdF9jaHVua2VyIGltcG9ydCBtYWtlX21vY2tfbWFuaWZlc3QKKworc3RydWN0dXJlZC5z
ZXRfZGVmYXVsdF9sb2dnZXIoc3RydWN0dXJlZC5zdHJ1Y3R1cmVkbG9nLlN0cnVjdHVyZWRMb2dn
ZXIoIlRlc3RMb2FkZXIiKSkKKworaW5jbHVkZV9pbmkgPSAiIiJcCitza2lwOiB0cnVlCitbdGVz
dF9cdTUzRjBdCisgIHNraXA6IGZhbHNlCisiIiIKKworCitkZWYgdGVzdF9maWx0ZXJfdW5pY29k
ZSgpOgorICAgIHRlc3RzID0gbWFrZV9tb2NrX21hbmlmZXN0KCgidGVzdCIsICJhIiwgMTApLCAo
InRlc3QiLCAiYS9iIiwgMTApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgidGVz
dCIsICJjIiwgMTApKQorCisgICAgd2l0aCB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoIndi
Iiwgc3VmZml4PSIuaW5pIikgYXMgZjoKKyAgICAgICAgZi53cml0ZShpbmNsdWRlX2luaS5lbmNv
ZGUoJ3V0Zi04JykpCisgICAgICAgIGYuZmx1c2goKQorCisgICAgICAgIEZpbHRlcihtYW5pZmVz
dF9wYXRoPWYubmFtZSwgdGVzdF9tYW5pZmVzdHM9dGVzdHMpCmRpZmYgLS1naXQgYS9XZWJEcml2
ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci90ZXN0cy90ZXN0
X3VwZGF0ZS5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIv
d3B0cnVubmVyL3Rlc3RzL3Rlc3RfdXBkYXRlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi5lNWViNGNmNDljNwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRl
c3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3Rlc3RzL3Rlc3RfdXBk
YXRlLnB5CkBAIC0wLDAgKzEsMzI4IEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBTdHJpbmdJ
TworCitpbXBvcnQgcHl0ZXN0CisKK2Zyb20gLi4gaW1wb3J0IG1ldGFkYXRhLCBtYW5pZmVzdHVw
ZGF0ZQorZnJvbSBtb3psb2cgaW1wb3J0IHN0cnVjdHVyZWRsb2csIGhhbmRsZXJzLCBmb3JtYXR0
ZXJzCisKKworY2xhc3MgVGVzdEV4cGVjdGVkVXBkYXRlcih1bml0dGVzdC5UZXN0Q2FzZSk6Cisg
ICAgZGVmIGNyZWF0ZV9tYW5pZmVzdChzZWxmLCBkYXRhLCB0ZXN0X3BhdGg9InBhdGgvdG8vdGVz
dC5pbmkiKToKKyAgICAgICAgZiA9IFN0cmluZ0lPLlN0cmluZ0lPKGRhdGEpCisgICAgICAgIHJl
dHVybiBtYW5pZmVzdHVwZGF0ZS5jb21waWxlKGYsIHRlc3RfcGF0aCkKKworICAgIGRlZiBjcmVh
dGVfdXBkYXRlcihzZWxmLCBkYXRhLCAqKmt3YXJncyk6CisgICAgICAgIGV4cGVjdGVkX3RyZWUg
PSB7fQorICAgICAgICBpZF9wYXRoX21hcCA9IHt9CisgICAgICAgIGZvciB0ZXN0X3BhdGgsIHRl
c3RfaWRzLCBtYW5pZmVzdF9zdHIgaW4gZGF0YToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uo
dGVzdF9pZHMsIChzdHIsIHVuaWNvZGUpKToKKyAgICAgICAgICAgICAgICB0ZXN0X2lkcyA9IFt0
ZXN0X2lkc10KKyAgICAgICAgICAgIGV4cGVjdGVkX3RyZWVbdGVzdF9wYXRoXSA9IHNlbGYuY3Jl
YXRlX21hbmlmZXN0KG1hbmlmZXN0X3N0ciwgdGVzdF9wYXRoKQorICAgICAgICAgICAgZm9yIHRl
c3RfaWQgaW4gdGVzdF9pZHM6CisgICAgICAgICAgICAgICAgaWRfcGF0aF9tYXBbdGVzdF9pZF0g
PSB0ZXN0X3BhdGgKKworICAgICAgICByZXR1cm4gbWV0YWRhdGEuRXhwZWN0ZWRVcGRhdGVyKGV4
cGVjdGVkX3RyZWUsIGlkX3BhdGhfbWFwLCAqKmt3YXJncykKKworICAgIGRlZiBjcmVhdGVfbG9n
KHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGxvZ2dlciA9IHN0cnVjdHVyZWRsb2cu
U3RydWN0dXJlZExvZ2dlcigiZXhwZWN0ZWRfdGVzdCIpCisgICAgICAgIGRhdGEgPSBTdHJpbmdJ
Ty5TdHJpbmdJTygpCisgICAgICAgIGhhbmRsZXIgPSBoYW5kbGVycy5TdHJlYW1IYW5kbGVyKGRh
dGEsIGZvcm1hdHRlcnMuSlNPTkZvcm1hdHRlcigpKQorICAgICAgICBsb2dnZXIuYWRkX2hhbmRs
ZXIoaGFuZGxlcikKKworICAgICAgICBsb2dfZW50cmllcyA9IChbKCJzdWl0ZV9zdGFydCIsIHsi
dGVzdHMiOiBbXSwgInJ1bl9pbmZvIjoga3dhcmdzLmdldCgicnVuX2luZm8iLCB7fSl9KV0gKwor
ICAgICAgICAgICAgICAgICAgICAgICBsaXN0KGFyZ3MpICsKKyAgICAgICAgICAgICAgICAgICAg
ICAgWygic3VpdGVfZW5kIiwge30pXSkKKworICAgICAgICBmb3IgaXRlbSBpbiBsb2dfZW50cmll
czoKKyAgICAgICAgICAgIGFjdGlvbiwga3dhcmdzID0gaXRlbQorICAgICAgICAgICAgZ2V0YXR0
cihsb2dnZXIsIGFjdGlvbikoKiprd2FyZ3MpCisgICAgICAgIGxvZ2dlci5yZW1vdmVfaGFuZGxl
cihoYW5kbGVyKQorICAgICAgICBkYXRhLnNlZWsoMCkKKyAgICAgICAgcmV0dXJuIGRhdGEKKwor
CisgICAgZGVmIGNvYWxlc2NlX3Jlc3VsdHMoc2VsZiwgdHJlZXMpOgorICAgICAgICBmb3IgdHJl
ZSBpbiB0cmVlczoKKyAgICAgICAgICAgIGZvciB0ZXN0IGluIHRyZWUuaXRlcmNoaWxkcmVuKCk6
CisgICAgICAgICAgICAgICAgZm9yIHN1YnRlc3QgaW4gdGVzdC5pdGVyY2hpbGRyZW4oKToKKyAg
ICAgICAgICAgICAgICAgICAgc3VidGVzdC5jb2FsZXNjZV9leHBlY3RlZCgpCisgICAgICAgICAg
ICAgICAgdGVzdC5jb2FsZXNjZV9leHBlY3RlZCgpCisKKyAgICBAcHl0ZXN0Lm1hcmsueGZhaWwK
KyAgICBkZWYgdGVzdF91cGRhdGVfMChzZWxmKToKKyAgICAgICAgcHJldl9kYXRhID0gWygicGF0
aC90by90ZXN0Lmh0bS5pbmkiLCBbIi9wYXRoL3RvL3Rlc3QuaHRtIl0sICIiIlt0ZXN0Lmh0bV0K
KyAgdHlwZTogdGVzdGhhcm5lc3MKKyAgW3Rlc3QxXQorICAgIGV4cGVjdGVkOiBGQUlMIiIiKV0K
KworICAgICAgICBuZXdfZGF0YSA9IHNlbGYuY3JlYXRlX2xvZygoInRlc3Rfc3RhcnQiLCB7InRl
c3QiOiAiL3BhdGgvdG8vdGVzdC5odG0ifSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICgidGVzdF9zdGF0dXMiLCB7InRlc3QiOiAiL3BhdGgvdG8vdGVzdC5odG0iLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJ0ZXN0
IjogInRlc3QxIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAic3RhdHVzIjogIlBBU1MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCI6ICJGQUlMIn0pLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoInRlc3RfZW5kIiwgeyJ0ZXN0IjogIi9wYXRoL3RvL3Rl
c3QuaHRtIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAic3RhdHVzIjogIk9LIn0pKQorICAgICAgICB1cGRhdGVyID0gc2VsZi5jcmVhdGVfdXBkYXRl
cihwcmV2X2RhdGEpCisgICAgICAgIHVwZGF0ZXIudXBkYXRlX2Zyb21fbG9nKG5ld19kYXRhKQor
CisgICAgICAgIG5ld19tYW5pZmVzdCA9IHVwZGF0ZXIuZXhwZWN0ZWRfdHJlZVsicGF0aC90by90
ZXN0Lmh0bS5pbmkiXQorICAgICAgICBzZWxmLmNvYWxlc2NlX3Jlc3VsdHMoW25ld19tYW5pZmVz
dF0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShuZXdfbWFuaWZlc3QuaXNfZW1wdHkpCisKKyAg
ICBAcHl0ZXN0Lm1hcmsueGZhaWwKKyAgICBkZWYgdGVzdF91cGRhdGVfMShzZWxmKToKKyAgICAg
ICAgdGVzdF9pZCA9ICIvcGF0aC90by90ZXN0Lmh0bSIKKyAgICAgICAgcHJldl9kYXRhID0gWygi
cGF0aC90by90ZXN0Lmh0bS5pbmkiLCBbdGVzdF9pZF0sICIiIlt0ZXN0Lmh0bV0KKyAgdHlwZTog
dGVzdGhhcm5lc3MKKyAgW3Rlc3QxXQorICAgIGV4cGVjdGVkOiBFUlJPUiIiIildCisKKyAgICAg
ICAgbmV3X2RhdGEgPSBzZWxmLmNyZWF0ZV9sb2coKCJ0ZXN0X3N0YXJ0IiwgeyJ0ZXN0IjogdGVz
dF9pZH0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoInRlc3Rfc3RhdHVz
IiwgeyJ0ZXN0IjogdGVzdF9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAic3VidGVzdCI6ICJ0ZXN0MSIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0YXR1cyI6ICJGQUlMIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQi
OiAiRVJST1IifSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgidGVzdF9l
bmQiLCB7InRlc3QiOiB0ZXN0X2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJzdGF0dXMiOiAiT0sifSkpCisgICAgICAgIHVwZGF0ZXIgPSBzZWxm
LmNyZWF0ZV91cGRhdGVyKHByZXZfZGF0YSkKKyAgICAgICAgdXBkYXRlci51cGRhdGVfZnJvbV9s
b2cobmV3X2RhdGEpCisKKyAgICAgICAgbmV3X21hbmlmZXN0ID0gdXBkYXRlci5leHBlY3RlZF90
cmVlWyJwYXRoL3RvL3Rlc3QuaHRtLmluaSJdCisgICAgICAgIHNlbGYuY29hbGVzY2VfcmVzdWx0
cyhbbmV3X21hbmlmZXN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShuZXdfbWFuaWZlc3Qu
aXNfZW1wdHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG5ld19tYW5pZmVzdC5nZXRfdGVz
dCh0ZXN0X2lkKS5jaGlsZHJlblswXS5nZXQoImV4cGVjdGVkIiksICJGQUlMIikKKworICAgIEBw
eXRlc3QubWFyay54ZmFpbAorICAgIGRlZiB0ZXN0X25ld19zdWJ0ZXN0KHNlbGYpOgorICAgICAg
ICB0ZXN0X2lkID0gIi9wYXRoL3RvL3Rlc3QuaHRtIgorICAgICAgICBwcmV2X2RhdGEgPSBbKCJw
YXRoL3RvL3Rlc3QuaHRtLmluaSIsIFt0ZXN0X2lkXSwgIiIiW3Rlc3QuaHRtXQorICB0eXBlOiB0
ZXN0aGFybmVzcworICBbdGVzdDFdCisgICAgZXhwZWN0ZWQ6IEZBSUwiIiIpXQorCisgICAgICAg
IG5ld19kYXRhID0gc2VsZi5jcmVhdGVfbG9nKCgidGVzdF9zdGFydCIsIHsidGVzdCI6IHRlc3Rf
aWR9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJ0ZXN0X3N0YXR1cyIs
IHsidGVzdCI6IHRlc3RfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgInN1YnRlc3QiOiAidGVzdDEiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdGF0dXMiOiAiRkFJTCIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIjog
IkZBSUwifSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgidGVzdF9zdGF0
dXMiLCB7InRlc3QiOiB0ZXN0X2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJzdWJ0ZXN0IjogInRlc3QyIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3RhdHVzIjogIkZBSUwiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3Rl
ZCI6ICJQQVNTIn0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoInRlc3Rf
ZW5kIiwgeyJ0ZXN0IjogdGVzdF9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAic3RhdHVzIjogIk9LIn0pKQorICAgICAgICB1cGRhdGVyID0gc2Vs
Zi5jcmVhdGVfdXBkYXRlcihwcmV2X2RhdGEpCisgICAgICAgIHVwZGF0ZXIudXBkYXRlX2Zyb21f
bG9nKG5ld19kYXRhKQorCisgICAgICAgIG5ld19tYW5pZmVzdCA9IHVwZGF0ZXIuZXhwZWN0ZWRf
dHJlZVsicGF0aC90by90ZXN0Lmh0bS5pbmkiXQorICAgICAgICBzZWxmLmNvYWxlc2NlX3Jlc3Vs
dHMoW25ld19tYW5pZmVzdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobmV3X21hbmlmZXN0
LmlzX2VtcHR5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhuZXdfbWFuaWZlc3QuZ2V0X3Rl
c3QodGVzdF9pZCkuY2hpbGRyZW5bMF0uZ2V0KCJleHBlY3RlZCIpLCAiRkFJTCIpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWxzKG5ld19tYW5pZmVzdC5nZXRfdGVzdCh0ZXN0X2lkKS5jaGlsZHJl
blsxXS5nZXQoImV4cGVjdGVkIiksICJGQUlMIikKKworICAgIEBweXRlc3QubWFyay54ZmFpbAor
ICAgIGRlZiB0ZXN0X3VwZGF0ZV9tdWx0aXBsZV8wKHNlbGYpOgorICAgICAgICB0ZXN0X2lkID0g
Ii9wYXRoL3RvL3Rlc3QuaHRtIgorICAgICAgICBwcmV2X2RhdGEgPSBbKCJwYXRoL3RvL3Rlc3Qu
aHRtLmluaSIsIFt0ZXN0X2lkXSwgIiIiW3Rlc3QuaHRtXQorICB0eXBlOiB0ZXN0aGFybmVzcwor
ICBbdGVzdDFdCisgICAgZXhwZWN0ZWQ6IEZBSUwiIiIpXQorCisgICAgICAgIG5ld19kYXRhXzAg
PSBzZWxmLmNyZWF0ZV9sb2coKCJ0ZXN0X3N0YXJ0IiwgeyJ0ZXN0IjogdGVzdF9pZH0pLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgidGVzdF9zdGF0dXMiLCB7InRlc3Qi
OiB0ZXN0X2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgInN1YnRlc3QiOiAidGVzdDEiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0YXR1cyI6ICJGQUlMIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCI6ICJG
QUlMIn0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgidGVzdF9lbmQi
LCB7InRlc3QiOiB0ZXN0X2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgInN0YXR1cyI6ICJPSyJ9KSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBydW5faW5mbz17ImRlYnVnIjogRmFsc2UsICJvcyI6ICJvc3gifSkKKwor
ICAgICAgICBuZXdfZGF0YV8xID0gc2VsZi5jcmVhdGVfbG9nKCgidGVzdF9zdGFydCIsIHsidGVz
dCI6IHRlc3RfaWR9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoInRl
c3Rfc3RhdHVzIiwgeyJ0ZXN0IjogdGVzdF9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJ0ZXN0IjogInRlc3QxIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdGF0dXMiOiAi
VElNRU9VVCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiZXhwZWN0ZWQiOiAiRkFJTCJ9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoInRlc3RfZW5kIiwgeyJ0ZXN0IjogdGVzdF9pZCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdGF0dXMiOiAiT0sifSksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuX2luZm89eyJkZWJ1ZyI6IEZh
bHNlLCAib3MiOiAibGludXgifSkKKyAgICAgICAgdXBkYXRlciA9IHNlbGYuY3JlYXRlX3VwZGF0
ZXIocHJldl9kYXRhKQorCisgICAgICAgIHVwZGF0ZXIudXBkYXRlX2Zyb21fbG9nKG5ld19kYXRh
XzApCisgICAgICAgIHVwZGF0ZXIudXBkYXRlX2Zyb21fbG9nKG5ld19kYXRhXzEpCisKKyAgICAg
ICAgbmV3X21hbmlmZXN0ID0gdXBkYXRlci5leHBlY3RlZF90cmVlWyJwYXRoL3RvL3Rlc3QuaHRt
LmluaSJdCisKKyAgICAgICAgc2VsZi5jb2FsZXNjZV9yZXN1bHRzKFtuZXdfbWFuaWZlc3RdKQor
CisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobmV3X21hbmlmZXN0LmlzX2VtcHR5KQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFscyhuZXdfbWFuaWZlc3QuZ2V0X3Rlc3QodGVzdF9pZCkuY2hpbGRy
ZW5bMF0uZ2V0KAorICAgICAgICAgICAgImV4cGVjdGVkIiwgeyJkZWJ1ZyI6IEZhbHNlLCAib3Mi
OiAib3N4In0pLCAiRkFJTCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG5ld19tYW5pZmVz
dC5nZXRfdGVzdCh0ZXN0X2lkKS5jaGlsZHJlblswXS5nZXQoCisgICAgICAgICAgICAiZXhwZWN0
ZWQiLCB7ImRlYnVnIjogRmFsc2UsICJvcyI6ICJsaW51eCJ9KSwgIlRJTUVPVVQiKQorCisgICAg
QHB5dGVzdC5tYXJrLnhmYWlsCisgICAgZGVmIHRlc3RfdXBkYXRlX211bHRpcGxlXzEoc2VsZik6
CisgICAgICAgIHRlc3RfaWQgPSAiL3BhdGgvdG8vdGVzdC5odG0iCisgICAgICAgIHByZXZfZGF0
YSA9IFsoInBhdGgvdG8vdGVzdC5odG0uaW5pIiwgW3Rlc3RfaWRdLCAiIiJbdGVzdC5odG1dCisg
IHR5cGU6IHRlc3RoYXJuZXNzCisgIFt0ZXN0MV0KKyAgICBleHBlY3RlZDogRkFJTCIiIildCisK
KyAgICAgICAgbmV3X2RhdGFfMCA9IHNlbGYuY3JlYXRlX2xvZygoInRlc3Rfc3RhcnQiLCB7InRl
c3QiOiB0ZXN0X2lkfSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJ0
ZXN0X3N0YXR1cyIsIHsidGVzdCI6IHRlc3RfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3VidGVzdCI6ICJ0ZXN0MSIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3RhdHVzIjog
IkZBSUwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImV4cGVjdGVkIjogIkZBSUwifSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKCJ0ZXN0X2VuZCIsIHsidGVzdCI6IHRlc3RfaWQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3RhdHVzIjogIk9LIn0pLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bl9pbmZvPXsiZGVidWciOiBGYWxz
ZSwgIm9zIjogIm9zeCJ9KQorCisgICAgICAgIG5ld19kYXRhXzEgPSBzZWxmLmNyZWF0ZV9sb2co
KCJ0ZXN0X3N0YXJ0IiwgeyJ0ZXN0IjogdGVzdF9pZH0pLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICgidGVzdF9zdGF0dXMiLCB7InRlc3QiOiB0ZXN0X2lkLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YnRlc3Qi
OiAidGVzdDEiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgInN0YXR1cyI6ICJUSU1FT1VUIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCI6ICJGQUlMIn0pLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgidGVzdF9lbmQiLCB7InRlc3QiOiB0ZXN0
X2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
InN0YXR1cyI6ICJPSyJ9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
dW5faW5mbz17ImRlYnVnIjogRmFsc2UsICJvcyI6ICJsaW51eCJ9KQorICAgICAgICB1cGRhdGVy
ID0gc2VsZi5jcmVhdGVfdXBkYXRlcihwcmV2X2RhdGEpCisKKyAgICAgICAgdXBkYXRlci51cGRh
dGVfZnJvbV9sb2cobmV3X2RhdGFfMCkKKyAgICAgICAgdXBkYXRlci51cGRhdGVfZnJvbV9sb2co
bmV3X2RhdGFfMSkKKworICAgICAgICBuZXdfbWFuaWZlc3QgPSB1cGRhdGVyLmV4cGVjdGVkX3Ry
ZWVbInBhdGgvdG8vdGVzdC5odG0uaW5pIl0KKworICAgICAgICBzZWxmLmNvYWxlc2NlX3Jlc3Vs
dHMoW25ld19tYW5pZmVzdF0pCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShuZXdfbWFuaWZl
c3QuaXNfZW1wdHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG5ld19tYW5pZmVzdC5nZXRf
dGVzdCh0ZXN0X2lkKS5jaGlsZHJlblswXS5nZXQoCisgICAgICAgICAgICAiZXhwZWN0ZWQiLCB7
ImRlYnVnIjogRmFsc2UsICJvcyI6ICJvc3gifSksICJGQUlMIikKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbHMobmV3X21hbmlmZXN0LmdldF90ZXN0KHRlc3RfaWQpLmNoaWxkcmVuWzBdLmdldCgK
KyAgICAgICAgICAgICJleHBlY3RlZCIsIHsiZGVidWciOiBGYWxzZSwgIm9zIjogImxpbnV4In0p
LCAiVElNRU9VVCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG5ld19tYW5pZmVzdC5nZXRf
dGVzdCh0ZXN0X2lkKS5jaGlsZHJlblswXS5nZXQoCisgICAgICAgICAgICAiZXhwZWN0ZWQiLCB7
ImRlYnVnIjogRmFsc2UsICJvcyI6ICJ3aW5kb3dzIn0pLCAiRkFJTCIpCisKKyAgICBAcHl0ZXN0
Lm1hcmsueGZhaWwKKyAgICBkZWYgdGVzdF91cGRhdGVfbXVsdGlwbGVfMihzZWxmKToKKyAgICAg
ICAgdGVzdF9pZCA9ICIvcGF0aC90by90ZXN0Lmh0bSIKKyAgICAgICAgcHJldl9kYXRhID0gWygi
cGF0aC90by90ZXN0Lmh0bS5pbmkiLCBbdGVzdF9pZF0sICIiIlt0ZXN0Lmh0bV0KKyAgdHlwZTog
dGVzdGhhcm5lc3MKKyAgW3Rlc3QxXQorICAgIGV4cGVjdGVkOiBGQUlMIiIiKV0KKworICAgICAg
ICBuZXdfZGF0YV8wID0gc2VsZi5jcmVhdGVfbG9nKCgidGVzdF9zdGFydCIsIHsidGVzdCI6IHRl
c3RfaWR9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoInRlc3Rfc3Rh
dHVzIiwgeyJ0ZXN0IjogdGVzdF9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJzdWJ0ZXN0IjogInRlc3QxIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdGF0dXMiOiAiRkFJTCIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
ZXhwZWN0ZWQiOiAiRkFJTCJ9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoInRlc3RfZW5kIiwgeyJ0ZXN0IjogdGVzdF9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdGF0dXMiOiAiT0sifSksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuX2luZm89eyJkZWJ1ZyI6IEZhbHNlLCAib3Mi
OiAib3N4In0pCisKKyAgICAgICAgbmV3X2RhdGFfMSA9IHNlbGYuY3JlYXRlX2xvZygoInRlc3Rf
c3RhcnQiLCB7InRlc3QiOiB0ZXN0X2lkfSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKCJ0ZXN0X3N0YXR1cyIsIHsidGVzdCI6IHRlc3RfaWQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3VidGVzdCI6ICJ0ZXN0
MSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAic3RhdHVzIjogIlRJTUVPVVQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIjogIkZBSUwifSksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKCJ0ZXN0X2VuZCIsIHsidGVzdCI6IHRlc3RfaWQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3RhdHVz
IjogIk9LIn0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bl9pbmZv
PXsiZGVidWciOiBUcnVlLCAib3MiOiAib3N4In0pCisgICAgICAgIHVwZGF0ZXIgPSBzZWxmLmNy
ZWF0ZV91cGRhdGVyKHByZXZfZGF0YSkKKworICAgICAgICB1cGRhdGVyLnVwZGF0ZV9mcm9tX2xv
ZyhuZXdfZGF0YV8wKQorICAgICAgICB1cGRhdGVyLnVwZGF0ZV9mcm9tX2xvZyhuZXdfZGF0YV8x
KQorCisgICAgICAgIG5ld19tYW5pZmVzdCA9IHVwZGF0ZXIuZXhwZWN0ZWRfdHJlZVsicGF0aC90
by90ZXN0Lmh0bS5pbmkiXQorCisgICAgICAgIHNlbGYuY29hbGVzY2VfcmVzdWx0cyhbbmV3X21h
bmlmZXN0XSkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG5ld19tYW5pZmVzdC5pc19lbXB0
eSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobmV3X21hbmlmZXN0LmdldF90ZXN0KHRlc3Rf
aWQpLmNoaWxkcmVuWzBdLmdldCgKKyAgICAgICAgICAgICJleHBlY3RlZCIsIHsiZGVidWciOiBG
YWxzZSwgIm9zIjogIm9zeCJ9KSwgIkZBSUwiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhu
ZXdfbWFuaWZlc3QuZ2V0X3Rlc3QodGVzdF9pZCkuY2hpbGRyZW5bMF0uZ2V0KAorICAgICAgICAg
ICAgImV4cGVjdGVkIiwgeyJkZWJ1ZyI6IFRydWUsICJvcyI6ICJvc3gifSksICJUSU1FT1VUIikK
KworICAgIEBweXRlc3QubWFyay54ZmFpbAorICAgIGRlZiB0ZXN0X3VwZGF0ZV9tdWx0aXBsZV8z
KHNlbGYpOgorICAgICAgICB0ZXN0X2lkID0gIi9wYXRoL3RvL3Rlc3QuaHRtIgorICAgICAgICBw
cmV2X2RhdGEgPSBbKCJwYXRoL3RvL3Rlc3QuaHRtLmluaSIsIFt0ZXN0X2lkXSwgIiIiW3Rlc3Qu
aHRtXQorICB0eXBlOiB0ZXN0aGFybmVzcworICBbdGVzdDFdCisgICAgZXhwZWN0ZWQ6CisgICAg
ICBpZiBkZWJ1ZzogRkFJTAorICAgICAgaWYgbm90IGRlYnVnIGFuZCBvcyA9PSAib3N4IjogVElN
RU9VVCIiIildCisKKyAgICAgICAgbmV3X2RhdGFfMCA9IHNlbGYuY3JlYXRlX2xvZygoInRlc3Rf
c3RhcnQiLCB7InRlc3QiOiB0ZXN0X2lkfSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKCJ0ZXN0X3N0YXR1cyIsIHsidGVzdCI6IHRlc3RfaWQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3VidGVzdCI6ICJ0ZXN0
MSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAic3RhdHVzIjogIkZBSUwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIjogIkZBSUwifSksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKCJ0ZXN0X2VuZCIsIHsidGVzdCI6IHRlc3RfaWQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3RhdHVzIjog
Ik9LIn0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bl9pbmZvPXsi
ZGVidWciOiBGYWxzZSwgIm9zIjogIm9zeCJ9KQorCisgICAgICAgIG5ld19kYXRhXzEgPSBzZWxm
LmNyZWF0ZV9sb2coKCJ0ZXN0X3N0YXJ0IiwgeyJ0ZXN0IjogdGVzdF9pZH0pLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICgidGVzdF9zdGF0dXMiLCB7InRlc3QiOiB0ZXN0
X2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgInN1YnRlc3QiOiAidGVzdDEiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgInN0YXR1cyI6ICJUSU1FT1VUIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCI6ICJGQUlM
In0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgidGVzdF9lbmQiLCB7
InRlc3QiOiB0ZXN0X2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgInN0YXR1cyI6ICJPSyJ9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBydW5faW5mbz17ImRlYnVnIjogVHJ1ZSwgIm9zIjogIm9zeCJ9KQorICAgICAg
ICB1cGRhdGVyID0gc2VsZi5jcmVhdGVfdXBkYXRlcihwcmV2X2RhdGEpCisKKyAgICAgICAgdXBk
YXRlci51cGRhdGVfZnJvbV9sb2cobmV3X2RhdGFfMCkKKyAgICAgICAgdXBkYXRlci51cGRhdGVf
ZnJvbV9sb2cobmV3X2RhdGFfMSkKKworICAgICAgICBuZXdfbWFuaWZlc3QgPSB1cGRhdGVyLmV4
cGVjdGVkX3RyZWVbInBhdGgvdG8vdGVzdC5odG0uaW5pIl0KKworICAgICAgICBzZWxmLmNvYWxl
c2NlX3Jlc3VsdHMoW25ld19tYW5pZmVzdF0pCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShu
ZXdfbWFuaWZlc3QuaXNfZW1wdHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG5ld19tYW5p
ZmVzdC5nZXRfdGVzdCh0ZXN0X2lkKS5jaGlsZHJlblswXS5nZXQoCisgICAgICAgICAgICAiZXhw
ZWN0ZWQiLCB7ImRlYnVnIjogRmFsc2UsICJvcyI6ICJvc3gifSksICJGQUlMIikKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbHMobmV3X21hbmlmZXN0LmdldF90ZXN0KHRlc3RfaWQpLmNoaWxkcmVu
WzBdLmdldCgKKyAgICAgICAgICAgICJleHBlY3RlZCIsIHsiZGVidWciOiBUcnVlLCAib3MiOiAi
b3N4In0pLCAiVElNRU9VVCIpCisKKyAgICBAcHl0ZXN0Lm1hcmsueGZhaWwKKyAgICBkZWYgdGVz
dF91cGRhdGVfaWdub3JlX2V4aXN0aW5nKHNlbGYpOgorICAgICAgICB0ZXN0X2lkID0gIi9wYXRo
L3RvL3Rlc3QuaHRtIgorICAgICAgICBwcmV2X2RhdGEgPSBbKCJwYXRoL3RvL3Rlc3QuaHRtLmlu
aSIsIFt0ZXN0X2lkXSwgIiIiW3Rlc3QuaHRtXQorICB0eXBlOiB0ZXN0aGFybmVzcworICBbdGVz
dDFdCisgICAgZXhwZWN0ZWQ6CisgICAgICBpZiBkZWJ1ZzogVElNRU9VVAorICAgICAgaWYgbm90
IGRlYnVnIGFuZCBvcyA9PSAib3N4IjogTk9UUlVOIiIiKV0KKworICAgICAgICBuZXdfZGF0YV8w
ID0gc2VsZi5jcmVhdGVfbG9nKCgidGVzdF9zdGFydCIsIHsidGVzdCI6IHRlc3RfaWR9KSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoInRlc3Rfc3RhdHVzIiwgeyJ0ZXN0
IjogdGVzdF9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJzdWJ0ZXN0IjogInRlc3QxIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdGF0dXMiOiAiRkFJTCIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQiOiAi
UEFTUyJ9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoInRlc3RfZW5k
IiwgeyJ0ZXN0IjogdGVzdF9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJzdGF0dXMiOiAiT0sifSksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcnVuX2luZm89eyJkZWJ1ZyI6IEZhbHNlLCAib3MiOiAibGludXgifSkK
KworICAgICAgICBuZXdfZGF0YV8xID0gc2VsZi5jcmVhdGVfbG9nKCgidGVzdF9zdGFydCIsIHsi
dGVzdCI6IHRlc3RfaWR9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
InRlc3Rfc3RhdHVzIiwgeyJ0ZXN0IjogdGVzdF9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJ0ZXN0IjogInRlc3QxIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdGF0dXMi
OiAiRkFJTCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiZXhwZWN0ZWQiOiAiUEFTUyJ9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoInRlc3RfZW5kIiwgeyJ0ZXN0IjogdGVzdF9pZCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdGF0dXMiOiAiT0sifSksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuX2luZm89eyJkZWJ1ZyI6IFRy
dWUsICJvcyI6ICJ3aW5kb3dzIn0pCisgICAgICAgIHVwZGF0ZXIgPSBzZWxmLmNyZWF0ZV91cGRh
dGVyKHByZXZfZGF0YSwgaWdub3JlX2V4aXN0aW5nPVRydWUpCisKKyAgICAgICAgdXBkYXRlci51
cGRhdGVfZnJvbV9sb2cobmV3X2RhdGFfMCkKKyAgICAgICAgdXBkYXRlci51cGRhdGVfZnJvbV9s
b2cobmV3X2RhdGFfMSkKKworICAgICAgICBuZXdfbWFuaWZlc3QgPSB1cGRhdGVyLmV4cGVjdGVk
X3RyZWVbInBhdGgvdG8vdGVzdC5odG0uaW5pIl0KKworICAgICAgICBzZWxmLmNvYWxlc2NlX3Jl
c3VsdHMoW25ld19tYW5pZmVzdF0pCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShuZXdfbWFu
aWZlc3QuaXNfZW1wdHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG5ld19tYW5pZmVzdC5n
ZXRfdGVzdCh0ZXN0X2lkKS5jaGlsZHJlblswXS5nZXQoCisgICAgICAgICAgICAiZXhwZWN0ZWQi
LCB7ImRlYnVnIjogVHJ1ZSwgIm9zIjogIm9zeCJ9KSwgIkZBSUwiKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFscyhuZXdfbWFuaWZlc3QuZ2V0X3Rlc3QodGVzdF9pZCkuY2hpbGRyZW5bMF0uZ2V0
KAorICAgICAgICAgICAgImV4cGVjdGVkIiwgeyJkZWJ1ZyI6IEZhbHNlLCAib3MiOiAib3N4In0p
LCAiRkFJTCIpCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMv
d3B0cnVubmVyL3dwdHJ1bm5lci91cGRhdGUvX19pbml0X18ucHkgYi9XZWJEcml2ZXJUZXN0cy9p
bXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci91cGRhdGUvX19pbml0X18ucHkK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQ5N2NiMzRhZDBjCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5l
ci93cHRydW5uZXIvdXBkYXRlL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsNDcgQEAKK2ltcG9ydCBv
cworaW1wb3J0IHN5cworCitmcm9tIG1vemxvZy5zdHJ1Y3R1cmVkIGltcG9ydCBzdHJ1Y3R1cmVk
bG9nLCBjb21tYW5kbGluZQorCitmcm9tIC4uIGltcG9ydCB3cHRjb21tYW5kbGluZQorCitmcm9t
IHVwZGF0ZSBpbXBvcnQgV1BUVXBkYXRlCisKK2RlZiByZW1vdmVfbG9nZ2luZ19hcmdzKGFyZ3Mp
OgorICAgICIiIlRha2UgbG9nZ2luZyBhcmdzIG91dCBvZiB0aGUgZGljdGlvbmFyeSBvZiBjb21t
YW5kIGxpbmUgYXJndW1lbnRzIHNvCisgICAgdGhleSBhcmUgbm90IHBhc3NlZCBpbiBhcyBrd2Fy
Z3MgdG8gdGhlIHVwZGF0ZSBjb2RlLiBUaGlzIGlzIHBhcnRpY3VsYXJseQorICAgIG5lY2Vzc2Fy
eSBoZXJlIGJlY2F1c2UgdGhlIGFyZ3VtZW50cyBhcmUgb2Z0ZW4gb2YgdHlwZSBmaWxlLCB3aGlj
aCBjYW5ub3QKKyAgICBiZSBzZXJpYWxpemVkLgorCisgICAgOnBhcmFtIGFyZ3M6IERpY3Rpb25h
cnkgb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KKyAgICAiIiIKKyAgICBmb3IgbmFtZSBpbiBh
cmdzLmtleXMoKToKKyAgICAgICAgaWYgbmFtZS5zdGFydHN3aXRoKCJsb2dfIik6CisgICAgICAg
ICAgICBhcmdzLnBvcChuYW1lKQorCisKK2RlZiBzZXR1cF9sb2dnaW5nKGFyZ3MsIGRlZmF1bHRz
KToKKyAgICAiIiJVc2UgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgdG8gc2V0IHVwIHRoZSBs
b2dnZXIuCisKKyAgICA6cGFyYW0gYXJnczogRGljdGlvbmFyeSBvZiBjb21tYW5kIGxpbmUgYXJn
dW1lbnRzLgorICAgIDpwYXJhbSBkZWZhdWx0czogRGljdGlvbmFyeSBvZiB7Zm9ybWF0dGVyX25h
bWU6IHN0cmVhbX0gdG8gdXNlIGlmCisgICAgICAgICAgICAgICAgICAgICBubyBjb21tYW5kIGxp
bmUgbG9nZ2luZyBpcyBzcGVjaWZpZWQiIiIKKyAgICBsb2dnZXIgPSBjb21tYW5kbGluZS5zZXR1
cF9sb2dnaW5nKCJ3ZWItcGxhdGZvcm0tdGVzdHMtdXBkYXRlIiwgYXJncywgZGVmYXVsdHMpCisK
KyAgICByZW1vdmVfbG9nZ2luZ19hcmdzKGFyZ3MpCisKKyAgICByZXR1cm4gbG9nZ2VyCisKKwor
ZGVmIHJ1bl91cGRhdGUobG9nZ2VyLCAqKmt3YXJncyk6CisgICAgdXBkYXRlciA9IFdQVFVwZGF0
ZShsb2dnZXIsICoqa3dhcmdzKQorICAgIHJldHVybiB1cGRhdGVyLnJ1bigpCisKKworZGVmIG1h
aW4oKToKKyAgICBhcmdzID0gd3B0Y29tbWFuZGxpbmUucGFyc2VfYXJnc191cGRhdGUoKQorICAg
IGxvZ2dlciA9IHNldHVwX2xvZ2dpbmcoYXJncywgeyJtYWNoIjogc3lzLnN0ZG91dH0pCisgICAg
YXNzZXJ0IHN0cnVjdHVyZWRsb2cuZ2V0X2RlZmF1bHRfbG9nZ2VyKCkgaXMgbm90IE5vbmUKKyAg
ICBzdWNjZXNzID0gcnVuX3VwZGF0ZShsb2dnZXIsICoqYXJncykKKyAgICBzeXMuZXhpdCgwIGlm
IHN1Y2Nlc3MgZWxzZSAxKQorCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93
M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci91cGRhdGUvYmFzZS5weSBiL1dlYkRyaXZlclRl
c3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3VwZGF0ZS9iYXNlLnB5
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41NDc4MDhlNTI5MwotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5u
ZXIvd3B0cnVubmVyL3VwZGF0ZS9iYXNlLnB5CkBAIC0wLDAgKzEsNjUgQEAKK2V4aXRfdW5jbGVh
biA9IG9iamVjdCgpCitleGl0X2NsZWFuID0gb2JqZWN0KCkKKworCitjbGFzcyBTdGVwKG9iamVj
dCk6CisgICAgcHJvdmlkZXMgPSBbXQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvZ2dlcik6
CisgICAgICAgIHNlbGYubG9nZ2VyID0gbG9nZ2VyCisKKyAgICBkZWYgcnVuKHNlbGYsIHN0ZXBf
aW5kZXgsIHN0YXRlKToKKyAgICAgICAgIiIiQmFzZSBjbGFzcyBmb3Igc3RhdGUtY3JlYXRpbmcg
c3RlcHMuCisKKyAgICAgICAgV2hlbiBhIFN0ZXAgaXMgcnVuKCkgdGhlIGN1cnJlbnQgc3RhdGUg
aXMgY2hlY2tlZCB0byBzZWUKKyAgICAgICAgaWYgdGhlIHN0YXRlIGZyb20gdGhpcyBzdGVwIGhh
cyBhbHJlYWR5IGJlZW4gY3JlYXRlZC4gSWYgaXQKKyAgICAgICAgaGFzIHRoZSByZXN0b3JlKCkg
bWV0aG9kIGlzIGludm9rZWQuIE90aGVyd2lzZSB0aGUgY3JlYXRlKCkKKyAgICAgICAgbWV0aG9k
IGlzIGludm9rZWQgd2l0aCB0aGUgc3RhdGUgb2JqZWN0LiBUaGlzIGlzIGV4cGVjdGVkIHRvCisg
ICAgICAgIGFkZCBpdGVtcyB3aXRoIGFsbCB0aGUga2V5cyBpbiBfX2NsYXNzX18ucHJvdmlkZXMg
dG8gdGhlIHN0YXRlCisgICAgICAgIG9iamVjdC4KKyAgICAgICAgIiIiCisKKyAgICAgICAgbmFt
ZSA9IHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAg
c3RvcmVkX3N0ZXAgPSBzdGF0ZS5zdGVwc1tzdGVwX2luZGV4XQorICAgICAgICBleGNlcHQgSW5k
ZXhFcnJvcjoKKyAgICAgICAgICAgIHN0b3JlZF9zdGVwID0gTm9uZQorCisgICAgICAgIGlmIHN0
b3JlZF9zdGVwID09IG5hbWU6CisgICAgICAgICAgICBzZWxmLnJlc3RvcmUoc3RhdGUpCisgICAg
ICAgIGVsaWYgc3RvcmVkX3N0ZXAgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuY3JlYXRlKHN0
YXRlKQorICAgICAgICAgICAgYXNzZXJ0IHNldChzZWxmLnByb3ZpZGVzKS5pc3N1YnNldChzZXQo
c3RhdGUua2V5cygpKSkKKyAgICAgICAgICAgIHN0YXRlLnN0ZXBzID0gc3RhdGUuc3RlcHMgKyBb
bmFtZV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkV4cGVj
dGVkIGEgJXMgc3RlcCwgZ290IGEgJXMgc3RlcCIgJSAobmFtZSwgc3RvcmVkX3N0ZXApKQorCisg
ICAgZGVmIGNyZWF0ZShzZWxmLCBkYXRhKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRF
cnJvcgorCisgICAgZGVmIHJlc3RvcmUoc2VsZiwgc3RhdGUpOgorICAgICAgICBzZWxmLmxvZ2dl
ci5kZWJ1ZygiU3RlcCAlcyB1c2luZyBzdG9yZWQgc3RhdGUiICUgKHNlbGYuX19jbGFzc19fLl9f
bmFtZV9fLCkpCisgICAgICAgIGZvciBrZXkgaW4gc2VsZi5wcm92aWRlczoKKyAgICAgICAgICAg
IGFzc2VydCBrZXkgaW4gc3RhdGUKKworCitjbGFzcyBTdGVwUnVubmVyKG9iamVjdCk6CisgICAg
c3RlcHMgPSBbXQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvZ2dlciwgc3RhdGUpOgorICAg
ICAgICAiIiJDbGFzcyB0aGF0IHJ1bnMgYSBzcGVjaWZpZWQgc2VyaWVzIG9mIFN0ZXBzIHdpdGgg
YSBjb21tb24gU3RhdGUiIiIKKyAgICAgICAgc2VsZi5zdGF0ZSA9IHN0YXRlCisgICAgICAgIHNl
bGYubG9nZ2VyID0gbG9nZ2VyCisgICAgICAgIGlmICJzdGVwcyIgbm90IGluIHN0YXRlOgorICAg
ICAgICAgICAgc3RhdGUuc3RlcHMgPSBbXQorCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAg
cnYgPSBOb25lCisgICAgICAgIGZvciBzdGVwX2luZGV4LCBzdGVwIGluIGVudW1lcmF0ZShzZWxm
LnN0ZXBzKToKKyAgICAgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJTdGFydGluZyBzdGVwICVz
IiAlIHN0ZXAuX19uYW1lX18pCisgICAgICAgICAgICBydiA9IHN0ZXAoc2VsZi5sb2dnZXIpLnJ1
bihzdGVwX2luZGV4LCBzZWxmLnN0YXRlKQorICAgICAgICAgICAgaWYgcnYgaW4gKGV4aXRfY2xl
YW4sIGV4aXRfdW5jbGVhbik6CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICByZXR1
cm4gcnYKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRy
dW5uZXIvd3B0cnVubmVyL3VwZGF0ZS9tZXRhZGF0YS5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9y
dGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3VwZGF0ZS9tZXRhZGF0YS5weQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNWY2OTI1ZTdmYTkKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dw
dHJ1bm5lci91cGRhdGUvbWV0YWRhdGEucHkKQEAgLTAsMCArMSw3MSBAQAoraW1wb3J0IG9zCisK
K2Zyb20gLi4gaW1wb3J0IG1ldGFkYXRhLCBwcm9kdWN0cworCitmcm9tIGJhc2UgaW1wb3J0IFN0
ZXAsIFN0ZXBSdW5uZXIKKworY2xhc3MgR2V0VXBkYXRlUHJvcGVydHlMaXN0KFN0ZXApOgorICAg
IHByb3ZpZGVzID0gWyJwcm9wZXJ0eV9vcmRlciIsICJib29sZWFuX3Byb3BlcnRpZXMiXQorCisK
KyAgICBkZWYgY3JlYXRlKHNlbGYsIHN0YXRlKToKKyAgICAgICAgcHJvcGVydHlfb3JkZXIsIGJv
b2xlYW5fcHJvcGVydGllcyA9IHByb2R1Y3RzLmxvYWRfcHJvZHVjdF91cGRhdGUoCisgICAgICAg
ICAgICBzdGF0ZS5jb25maWcsIHN0YXRlLnByb2R1Y3QpCisgICAgICAgIHN0YXRlLnByb3BlcnR5
X29yZGVyID0gcHJvcGVydHlfb3JkZXIKKyAgICAgICAgc3RhdGUuYm9vbGVhbl9wcm9wZXJ0aWVz
ID0gYm9vbGVhbl9wcm9wZXJ0aWVzCisKKworY2xhc3MgVXBkYXRlRXhwZWN0ZWQoU3RlcCk6Cisg
ICAgIiIiRG8gdGhlIG1ldGFkYXRhIHVwZGF0ZSBvbiB0aGUgbG9jYWwgY2hlY2tvdXQiIiIKKwor
ICAgIHByb3ZpZGVzID0gWyJuZWVkc19odW1hbiJdCisKKyAgICBkZWYgY3JlYXRlKHNlbGYsIHN0
YXRlKToKKyAgICAgICAgaWYgc3RhdGUuc3luY190cmVlIGlzIG5vdCBOb25lOgorICAgICAgICAg
ICAgc3luY19yb290ID0gc3RhdGUuc3luY190cmVlLnJvb3QKKyAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgIHN5bmNfcm9vdCA9IE5vbmUKKworICAgICAgICBzdGF0ZS5uZWVkc19odW1hbiA9IG1l
dGFkYXRhLnVwZGF0ZV9leHBlY3RlZChzdGF0ZS5wYXRocywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc2VydmVfcm9vdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUucnVu
X2xvZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV2X29sZD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZ25vcmVfZXhpc3Rpbmc9c3RhdGUuaWdub3JlX2V4aXN0aW5nLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jX3Jv
b3Q9c3luY19yb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwcm9wZXJ0eV9vcmRlcj1zdGF0ZS5wcm9wZXJ0eV9vcmRlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbl9wcm9w
ZXJ0aWVzPXN0YXRlLmJvb2xlYW5fcHJvcGVydGllcykKKworCitjbGFzcyBDcmVhdGVNZXRhZGF0
YVBhdGNoKFN0ZXApOgorICAgICIiIkNyZWF0ZSBhIHBhdGNoL2NvbW1pdCBmb3IgdGhlIG1ldGFk
YXRhIGNoZWNrb3V0IiIiCisKKyAgICBkZWYgY3JlYXRlKHNlbGYsIHN0YXRlKToKKyAgICAgICAg
aWYgbm90IHN0YXRlLnBhdGNoOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgbG9jYWxf
dHJlZSA9IHN0YXRlLmxvY2FsX3RyZWUKKyAgICAgICAgc3luY190cmVlID0gc3RhdGUuc3luY190
cmVlCisKKyAgICAgICAgaWYgc3luY190cmVlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgbmFt
ZSA9ICJ3ZWItcGxhdGZvcm0tdGVzdHNfdXBkYXRlXyVzX21ldGFkYXRhIiAlIHN5bmNfdHJlZS5y
ZXYKKyAgICAgICAgICAgIG1lc3NhZ2UgPSAiVXBkYXRlICVzIGV4cGVjdGVkIGRhdGEgdG8gcmV2
aXNpb24gJXMiICUgKHN0YXRlLnN1aXRlX25hbWUsIHN5bmNfdHJlZS5yZXYpCisgICAgICAgIGVs
c2U6CisgICAgICAgICAgICBuYW1lID0gIndlYi1wbGF0Zm9ybS10ZXN0c191cGRhdGVfbWV0YWRh
dGEiCisgICAgICAgICAgICBtZXNzYWdlID0gIlVwZGF0ZSAlcyBleHBlY3RlZCBkYXRhIiAlIHN0
YXRlLnN1aXRlX25hbWUKKworICAgICAgICBsb2NhbF90cmVlLmNyZWF0ZV9wYXRjaChuYW1lLCBt
ZXNzYWdlKQorCisgICAgICAgIGlmIG5vdCBsb2NhbF90cmVlLmlzX2NsZWFuOgorICAgICAgICAg
ICAgbWV0YWRhdGFfcGF0aHMgPSBbbWFuaWZlc3RfcGF0aFsibWV0YWRhdGFfcGF0aCJdCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbWFuaWZlc3RfcGF0aCBpbiBzdGF0ZS5wYXRo
cy5pdGVydmFsdWVzKCldCisgICAgICAgICAgICBmb3IgcGF0aCBpbiBtZXRhZGF0YV9wYXRoczoK
KyAgICAgICAgICAgICAgICBsb2NhbF90cmVlLmFkZF9uZXcob3MucGF0aC5yZWxwYXRoKHBhdGgs
IGxvY2FsX3RyZWUucm9vdCkpCisgICAgICAgICAgICBsb2NhbF90cmVlLnVwZGF0ZV9wYXRjaChp
bmNsdWRlPW1ldGFkYXRhX3BhdGhzKQorICAgICAgICAgICAgbG9jYWxfdHJlZS5jb21taXRfcGF0
Y2goKQorCisKK2NsYXNzIE1ldGFkYXRhVXBkYXRlUnVubmVyKFN0ZXBSdW5uZXIpOgorICAgICIi
IihTdWIpUnVubmVyIGZvciB1cGRhdGluZyBtZXRhZGF0YSIiIgorICAgIHN0ZXBzID0gW0dldFVw
ZGF0ZVByb3BlcnR5TGlzdCwKKyAgICAgICAgICAgICBVcGRhdGVFeHBlY3RlZCwKKyAgICAgICAg
ICAgICBDcmVhdGVNZXRhZGF0YVBhdGNoXQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1w
b3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvdXBkYXRlL3N0YXRlLnB5IGIvV2Vi
RHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvdXBkYXRl
L3N0YXRlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45NDU0NDE0
ZTY0MAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29s
cy93cHRydW5uZXIvd3B0cnVubmVyL3VwZGF0ZS9zdGF0ZS5weQpAQCAtMCwwICsxLDEzMyBAQAor
aW1wb3J0IG9zCitpbXBvcnQgY1BpY2tsZSBhcyBwaWNrbGUKKworaGVyZSA9IG9zLnBhdGguYWJz
cGF0aChvcy5wYXRoLnNwbGl0KF9fZmlsZV9fKVswXSkKKworY2xhc3MgU3RhdGUob2JqZWN0KToK
KyAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihoZXJlLCAiLndwdC11cGRhdGUubG9jayIpCisK
KyAgICBkZWYgX19uZXdfXyhjbHMsIGxvZ2dlcik6CisgICAgICAgIHJ2ID0gY2xzLmxvYWQobG9n
Z2VyKQorICAgICAgICBpZiBydiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1
ZygiRXhpc3Rpbmcgc3RhdGUgZm91bmQiKQorICAgICAgICAgICAgcmV0dXJuIHJ2CisKKyAgICAg
ICAgbG9nZ2VyLmRlYnVnKCJObyBleGlzdGluZyBzdGF0ZSBmb3VuZCIpCisgICAgICAgIHJldHVy
biBvYmplY3QuX19uZXdfXyhjbHMsIGxvZ2dlcikKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBs
b2dnZXIpOgorICAgICAgICAiIiJPYmplY3QgY29udGFpbmluZyBzdGF0ZSB2YXJpYWJsZXMgY3Jl
YXRlZCB3aGVuIHJ1bm5pbmcgU3RlcHMuCisKKyAgICAgICAgT24gd3JpdGUgdGhlIHN0YXRlIGlz
IHNlcmlhbGl6ZWQgdG8gZGlzaywgc3VjaCB0aGF0IGl0IGNhbiBiZSByZXN0b3JlZCBpbgorICAg
ICAgICB0aGUgZXZlbnQgdGhhdCB0aGUgcHJvZ3JhbSBpcyBpbnRlcnJ1cHRlZCBiZWZvcmUgYWxs
IHN0ZXBzIGFyZSBjb21wbGV0ZS4KKyAgICAgICAgTm90ZSB0aGF0IHRoaXMgb25seSB3b3JrcyB3
ZWxsIGlmIHRoZSB2YWx1ZXMgYXJlIGltbXV0YWJsZTsgbXV0YXRpbmcgYW4KKyAgICAgICAgZXhp
c3RpbmcgdmFsdWUgd2lsbCBub3QgY2F1c2UgdGhlIGRhdGEgdG8gYmUgc2VyaWFsaXplZC4KKwor
ICAgICAgICBWYXJpYWJsZXMgYXJlIHNldCBhbmQgZ2V0IGFzIGF0dHJpYnV0ZXMgZS5nLiBzdGF0
ZV9vYmouc3BhbSA9ICJlZ2dzIi4KKworICAgICAgICA6cGFyYW0gcGFyZW50OiBQYXJlbnQgU3Rh
dGUgb2JqZWN0IG9yIE5vbmUgaWYgdGhpcyBpcyB0aGUgcm9vdCBvYmplY3QuCisgICAgICAgICIi
IgorCisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgIl9kYXRhIik6CisgICAgICAgICAgICByZXR1
cm4KKworICAgICAgICBzZWxmLl9kYXRhID0gW3t9XQorICAgICAgICBzZWxmLl9sb2dnZXIgPSBs
b2dnZXIKKyAgICAgICAgc2VsZi5faW5kZXggPSAwCisKKyAgICBkZWYgX19nZXRzdGF0ZV9fKHNl
bGYpOgorICAgICAgICBydiA9IHNlbGYuX19kaWN0X18uY29weSgpCisgICAgICAgIGRlbCBydlsi
X2xvZ2dlciJdCisgICAgICAgIHJldHVybiBydgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVm
IGxvYWQoY2xzLCBsb2dnZXIpOgorICAgICAgICAiIiJMb2FkIHNhdmVkIHN0YXRlIGZyb20gYSBm
aWxlIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggb3BlbihjbHMuZmlsZW5hbWUp
IGFzIGY6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBydiA9IHBp
Y2tsZS5sb2FkKGYpCisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiTG9hZGluZyBk
YXRhICVyIiAlIChydi5fZGF0YSwpKQorICAgICAgICAgICAgICAgICAgICBydi5fbG9nZ2VyID0g
bG9nZ2VyCisgICAgICAgICAgICAgICAgICAgIHJ2Ll9pbmRleCA9IDAKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHJ2CisgICAgICAgICAgICAgICAgZXhjZXB0IEVPRkVycm9yOgorICAgICAg
ICAgICAgICAgICAgICBsb2dnZXIud2FybmluZygiRm91bmQgZW1wdHkgc3RhdGUgZmlsZSIpCisg
ICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJJT0Vycm9y
IGxvYWRpbmcgc3RvcmVkIHN0YXRlIikKKworICAgIGRlZiBwdXNoKHNlbGYsIGluaXRfdmFsdWVz
KToKKyAgICAgICAgIiIiUHVzaCBhIG5ldyBjbGVhbiBzdGF0ZSBkaWN0aW9uYXJ5CisKKyAgICAg
ICAgOnBhcmFtIGluaXRfdmFsdWVzOiBMaXN0IG9mIHZhcmlhYmxlIG5hbWVzIGluIHRoZSBjdXJy
ZW50IHN0YXRlIGRpY3QgdG8gY29weQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludG8g
dGhlIG5ldyBzdGF0ZSBkaWN0LiIiIgorCisgICAgICAgIHJldHVybiBTdGF0ZUNvbnRleHQoc2Vs
ZiwgaW5pdF92YWx1ZXMpCisKKyAgICBkZWYgc2F2ZShzZWxmKToKKyAgICAgICAgIiIiV3JpdGUg
dGhlIHN0YXRlIHRvIGRpc2siIiIKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJ3
IikgYXMgZjoKKyAgICAgICAgICAgIHBpY2tsZS5kdW1wKHNlbGYsIGYpCisKKyAgICBkZWYgaXNf
ZW1wdHkoc2VsZik6CisgICAgICAgIHJldHVybiBsZW4oc2VsZi5fZGF0YSkgPT0gMSBhbmQgc2Vs
Zi5fZGF0YVswXSA9PSB7fQorCisgICAgZGVmIGNsZWFyKHNlbGYpOgorICAgICAgICAiIiJSZW1v
dmUgYWxsIHN0YXRlIGFuZCBkZWxldGUgdGhlIHN0b3JlZCBjb3B5LiIiIgorICAgICAgICB0cnk6
CisgICAgICAgICAgICBvcy51bmxpbmsoc2VsZi5maWxlbmFtZSkKKyAgICAgICAgZXhjZXB0IE9T
RXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuX2RhdGEgPSBbe31dCisKKwor
ICAgIGRlZiBfX3NldGF0dHJfXyhzZWxmLCBrZXksIHZhbHVlKToKKyAgICAgICAgaWYga2V5LnN0
YXJ0c3dpdGgoIl8iKToKKyAgICAgICAgICAgIG9iamVjdC5fX3NldGF0dHJfXyhzZWxmLCBrZXks
IHZhbHVlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fZGF0YVtzZWxmLl9pbmRl
eF1ba2V5XSA9IHZhbHVlCisgICAgICAgICAgICBzZWxmLnNhdmUoKQorCisgICAgZGVmIF9fZ2V0
YXR0cl9fKHNlbGYsIGtleSk6CisgICAgICAgIGlmIGtleS5zdGFydHN3aXRoKCJfIik6CisgICAg
ICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcgorICAgICAgICB0cnk6CisgICAgICAgICAgICBy
ZXR1cm4gc2VsZi5fZGF0YVtzZWxmLl9pbmRleF1ba2V5XQorICAgICAgICBleGNlcHQgS2V5RXJy
b3I6CisgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcgorCisgICAgZGVmIF9fY29udGFp
bnNfXyhzZWxmLCBrZXkpOgorICAgICAgICByZXR1cm4ga2V5IGluIHNlbGYuX2RhdGFbc2VsZi5f
aW5kZXhdCisKKyAgICBkZWYgdXBkYXRlKHNlbGYsIGl0ZW1zKToKKyAgICAgICAgIiIiQWRkIGEg
ZGljdGlvbmFyeSBvZiB7bmFtZTogdmFsdWV9IHBhaXJzIHRvIHRoZSBzdGF0ZSIiIgorICAgICAg
ICBzZWxmLl9kYXRhW3NlbGYuX2luZGV4XS51cGRhdGUoaXRlbXMpCisgICAgICAgIHNlbGYuc2F2
ZSgpCisKKyAgICBkZWYga2V5cyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2RhdGFbc2Vs
Zi5faW5kZXhdLmtleXMoKQorCitjbGFzcyBTdGF0ZUNvbnRleHQob2JqZWN0KToKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgc3RhdGUsIGluaXRfdmFsdWVzKToKKyAgICAgICAgc2VsZi5zdGF0ZSA9
IHN0YXRlCisgICAgICAgIHNlbGYuaW5pdF92YWx1ZXMgPSBpbml0X3ZhbHVlcworCisgICAgZGVm
IF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgaWYgbGVuKHNlbGYuc3RhdGUuX2RhdGEpID09IHNl
bGYuc3RhdGUuX2luZGV4ICsgMToKKyAgICAgICAgICAgICMgVGhpcyBpcyB0aGUgY2FzZSB3aGVy
ZSB0aGVyZSBpcyBubyBzdG9yZWQgc3RhdGUKKyAgICAgICAgICAgIG5ld19zdGF0ZSA9IHt9Cisg
ICAgICAgICAgICBmb3Iga2V5IGluIHNlbGYuaW5pdF92YWx1ZXM6CisgICAgICAgICAgICAgICAg
bmV3X3N0YXRlW2tleV0gPSBzZWxmLnN0YXRlLl9kYXRhW3NlbGYuc3RhdGUuX2luZGV4XVtrZXld
CisgICAgICAgICAgICBzZWxmLnN0YXRlLl9kYXRhLmFwcGVuZChuZXdfc3RhdGUpCisgICAgICAg
IHNlbGYuc3RhdGUuX2luZGV4ICs9IDEKKyAgICAgICAgc2VsZi5zdGF0ZS5fbG9nZ2VyLmRlYnVn
KCJJbmNyZW1lbnRlZCBpbmRleCB0byAlcyIgJSBzZWxmLnN0YXRlLl9pbmRleCkKKworICAgIGRl
ZiBfX2V4aXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBpZiBsZW4oc2VsZi5z
dGF0ZS5fZGF0YSkgPiAxOgorICAgICAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUuX2luZGV4ID09
IGxlbihzZWxmLnN0YXRlLl9kYXRhKSAtIDEKKyAgICAgICAgICAgIHNlbGYuc3RhdGUuX2RhdGEu
cG9wKCkKKyAgICAgICAgICAgIHNlbGYuc3RhdGUuX2luZGV4IC09IDEKKyAgICAgICAgICAgIHNl
bGYuc3RhdGUuX2xvZ2dlci5kZWJ1ZygiRGVjcmVtZW50ZWQgaW5kZXggdG8gJXMiICUgc2VsZi5z
dGF0ZS5faW5kZXgpCisgICAgICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZS5faW5kZXggPj0gMAor
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiVHJpZWQgdG8gcG9w
IHRoZSB0b3Agc3RhdGUiKQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNj
L3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvdXBkYXRlL3N5bmMucHkgYi9XZWJEcml2ZXJUZXN0
cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci91cGRhdGUvc3luYy5weQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYjIwMWZlN2YxNjcKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVy
L3dwdHJ1bm5lci91cGRhdGUvc3luYy5weQpAQCAtMCwwICsxLDE5NyBAQAoraW1wb3J0IGZubWF0
Y2gKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc3lzCitpbXBv
cnQgdXVpZAorCitmcm9tIC4uIGltcG9ydCB0ZXN0bG9hZGVyCisKK2Zyb20gYmFzZSBpbXBvcnQg
U3RlcCwgU3RlcFJ1bm5lcgorZnJvbSB0cmVlIGltcG9ydCBDb21taXQKKworaGVyZSA9IG9zLnBh
dGguYWJzcGF0aChvcy5wYXRoLnNwbGl0KF9fZmlsZV9fKVswXSkKKworYnNkX2xpY2Vuc2UgPSAi
IiJXM0MgMy1jbGF1c2UgQlNEIExpY2Vuc2UKKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCitt
ZXQ6CisKKyogUmVkaXN0cmlidXRpb25zIG9mIHdvcmtzIG11c3QgcmV0YWluIHRoZSBvcmlnaW5h
bCBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorCisqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgb3JpZ2luYWwgY29weXJpZ2h0CisgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKworKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBXM0Mgbm9yIHRoZSBuYW1lcyBv
ZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZQorICB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyB3b3JrIHdpdGhvdXQKKyAgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTCitJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQorTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKK1NVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KK0NPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CitBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisiIiIKKwor
CitkZWYgY29weV93cHRfdHJlZSh0cmVlLCBkZXN0LCBleGNsdWRlcz1Ob25lLCBpbmNsdWRlcz1O
b25lKToKKyAgICAiIiJDb3B5IHRoZSB3b3JraW5nIGNvcHkgb2YgYSBUcmVlIHRvIGEgZGVzdGlu
YXRpb24gZGlyZWN0b3J5LgorCisgICAgOnBhcmFtIHRyZWU6IFRoZSBUcmVlIHRvIGNvcHkuCisg
ICAgOnBhcmFtIGRlc3Q6IFRoZSBkZXN0aW5hdGlvbiBkaXJlY3RvcnkiIiIKKyAgICBpZiBvcy5w
YXRoLmV4aXN0cyhkZXN0KToKKyAgICAgICAgYXNzZXJ0IG9zLnBhdGguaXNkaXIoZGVzdCkKKwor
ICAgIHNodXRpbC5ybXRyZWUoZGVzdCkKKworICAgIG9zLm1rZGlyKGRlc3QpCisKKyAgICBpZiBl
eGNsdWRlcyBpcyBOb25lOgorICAgICAgICBleGNsdWRlcyA9IFtdCisKKyAgICBleGNsdWRlcyA9
IFtyZS5jb21waWxlKGZubWF0Y2gudHJhbnNsYXRlKGl0ZW0pKSBmb3IgaXRlbSBpbiBleGNsdWRl
c10KKworICAgIGlmIGluY2x1ZGVzIGlzIE5vbmU6CisgICAgICAgIGluY2x1ZGVzID0gW10KKwor
ICAgIGluY2x1ZGVzID0gW3JlLmNvbXBpbGUoZm5tYXRjaC50cmFuc2xhdGUoaXRlbSkpIGZvciBp
dGVtIGluIGluY2x1ZGVzXQorCisgICAgZm9yIHRyZWVfcGF0aCBpbiB0cmVlLnBhdGhzKCk6Cisg
ICAgICAgIGlmIChhbnkoaXRlbS5tYXRjaCh0cmVlX3BhdGgpIGZvciBpdGVtIGluIGV4Y2x1ZGVz
KSBhbmQKKyAgICAgICAgICAgIG5vdCBhbnkoaXRlbS5tYXRjaCh0cmVlX3BhdGgpIGZvciBpdGVt
IGluIGluY2x1ZGVzKSk6CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIHNvdXJjZV9w
YXRoID0gb3MucGF0aC5qb2luKHRyZWUucm9vdCwgdHJlZV9wYXRoKQorICAgICAgICBkZXN0X3Bh
dGggPSBvcy5wYXRoLmpvaW4oZGVzdCwgdHJlZV9wYXRoKQorCisgICAgICAgIGRlc3RfZGlyID0g
b3MucGF0aC5zcGxpdChkZXN0X3BhdGgpWzBdCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGly
KHNvdXJjZV9wYXRoKToKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkZXN0X2Rp
cik6CisgICAgICAgICAgICAgICAgb3MubWFrZWRpcnMoZGVzdF9kaXIpCisgICAgICAgICAgICBz
aHV0aWwuY29weTIoc291cmNlX3BhdGgsIGRlc3RfcGF0aCkKKworICAgIGZvciBzb3VyY2UsIGRl
c3RpbmF0aW9uIGluIFsoInRlc3RoYXJuZXNzX3J1bm5lci5odG1sIiwgIiIpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoInRlc3RoYXJuZXNzcmVwb3J0LmpzIiwgInJlc291cmNl
cy8iKV06CisgICAgICAgIHNvdXJjZV9wYXRoID0gb3MucGF0aC5qb2luKGhlcmUsIG9zLnBhcmRp
ciwgc291cmNlKQorICAgICAgICBkZXN0X3BhdGggPSBvcy5wYXRoLmpvaW4oZGVzdCwgZGVzdGlu
YXRpb24sIG9zLnBhdGguc3BsaXQoc291cmNlKVsxXSkKKyAgICAgICAgc2h1dGlsLmNvcHkyKHNv
dXJjZV9wYXRoLCBkZXN0X3BhdGgpCisKKyAgICBhZGRfbGljZW5zZShkZXN0KQorCisKK2RlZiBh
ZGRfbGljZW5zZShkZXN0KToKKyAgICAiIiJXcml0ZSB0aGUgYnNkIGxpY2Vuc2Ugc3RyaW5nIHRv
IGEgTElDRU5TRSBmaWxlLgorCisgICAgOnBhcmFtIGRlc3Q6IERpcmVjdG9yeSBpbiB3aGljaCB0
byBwbGFjZSB0aGUgTElDRU5TRSBmaWxlLiIiIgorICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4o
ZGVzdCwgIkxJQ0VOU0UiKSwgInciKSBhcyBmOgorICAgICAgICBmLndyaXRlKGJzZF9saWNlbnNl
KQorCisKK2NsYXNzIFVwZGF0ZUNoZWNrb3V0KFN0ZXApOgorICAgICIiIlB1bGwgY2hhbmdlcyBm
cm9tIHVwc3RyZWFtIGludG8gdGhlIGxvY2FsIHN5bmMgdHJlZS4iIiIKKworICAgIHByb3ZpZGVz
ID0gWyJsb2NhbF9icmFuY2giXQorCisgICAgZGVmIGNyZWF0ZShzZWxmLCBzdGF0ZSk6CisgICAg
ICAgIHN5bmNfdHJlZSA9IHN0YXRlLnN5bmNfdHJlZQorICAgICAgICBzdGF0ZS5sb2NhbF9icmFu
Y2ggPSB1dWlkLnV1aWQ0KCkuaGV4CisgICAgICAgIHN5bmNfdHJlZS51cGRhdGUoc3RhdGUuc3lu
Y1sicmVtb3RlX3VybCJdLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN5bmNbImJy
YW5jaCJdLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmxvY2FsX2JyYW5jaCkKKyAg
ICAgICAgc3luY19wYXRoID0gb3MucGF0aC5hYnNwYXRoKHN5bmNfdHJlZS5yb290KQorICAgICAg
ICBpZiBub3Qgc3luY19wYXRoIGluIHN5cy5wYXRoOgorICAgICAgICAgICAgZnJvbSB1cGRhdGUg
aW1wb3J0IHNldHVwX3BhdGhzCisgICAgICAgICAgICBzZXR1cF9wYXRocyhzeW5jX3BhdGgpCisK
KyAgICBkZWYgcmVzdG9yZShzZWxmLCBzdGF0ZSk6CisgICAgICAgIGFzc2VydCBvcy5wYXRoLmFi
c3BhdGgoc3RhdGUuc3luY190cmVlLnJvb3QpIGluIHN5cy5wYXRoCisgICAgICAgIFN0ZXAucmVz
dG9yZShzZWxmLCBzdGF0ZSkKKworCitjbGFzcyBHZXRTeW5jVGFyZ2V0Q29tbWl0KFN0ZXApOgor
ICAgICIiIkZpbmQgdGhlIGNvbW1pdCB0aGF0IHdlIHdpbGwgc3luYyB0by4iIiIKKworICAgIHBy
b3ZpZGVzID0gWyJzeW5jX2NvbW1pdCJdCisKKyAgICBkZWYgY3JlYXRlKHNlbGYsIHN0YXRlKToK
KyAgICAgICAgaWYgc3RhdGUudGFyZ2V0X3JldiBpcyBOb25lOgorICAgICAgICAgICAgI1VzZSB1
cHN0cmVhbSBicmFuY2ggSEVBRCBhcyB0aGUgYmFzZSBjb21taXQKKyAgICAgICAgICAgIHN0YXRl
LnN5bmNfY29tbWl0ID0gc3RhdGUuc3luY190cmVlLmdldF9yZW1vdGVfc2hhMShzdGF0ZS5zeW5j
WyJyZW1vdGVfdXJsIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3luY1siYnJhbmNoIl0pCisgICAgICAgIGVs
c2U6CisgICAgICAgICAgICBzdGF0ZS5zeW5jX2NvbW1pdCA9IENvbW1pdChzdGF0ZS5zeW5jX3Ry
ZWUsIHN0YXRlLnJldikKKworICAgICAgICBzdGF0ZS5zeW5jX3RyZWUuY2hlY2tvdXQoc3RhdGUu
c3luY19jb21taXQuc2hhMSwgc3RhdGUubG9jYWxfYnJhbmNoLCBmb3JjZT1UcnVlKQorICAgICAg
ICBzZWxmLmxvZ2dlci5kZWJ1ZygiTmV3IGJhc2UgY29tbWl0IGlzICVzIiAlIHN0YXRlLnN5bmNf
Y29tbWl0LnNoYTEpCisKKworY2xhc3MgTG9hZE1hbmlmZXN0KFN0ZXApOgorICAgICIiIkxvYWQg
dGhlIHRlc3QgbWFuaWZlc3QiIiIKKworICAgIHByb3ZpZGVzID0gWyJtYW5pZmVzdF9wYXRoIiwg
InRlc3RfbWFuaWZlc3QiXQorCisgICAgZGVmIGNyZWF0ZShzZWxmLCBzdGF0ZSk6CisgICAgICAg
IGZyb20gbWFuaWZlc3QgaW1wb3J0IG1hbmlmZXN0CisgICAgICAgIHN0YXRlLm1hbmlmZXN0X3Bh
dGggPSBvcy5wYXRoLmpvaW4oc3RhdGUubWV0YWRhdGFfcGF0aCwgIk1BTklGRVNULmpzb24iKQor
ICAgICAgICBzdGF0ZS50ZXN0X21hbmlmZXN0ID0gbWFuaWZlc3QuTWFuaWZlc3QoIi8iKQorCisK
K2NsYXNzIFVwZGF0ZU1hbmlmZXN0KFN0ZXApOgorICAgICIiIlVwZGF0ZSB0aGUgbWFuaWZlc3Qg
dG8gbWF0Y2ggdGhlIHRlc3RzIGluIHRoZSBzeW5jIHRyZWUgY2hlY2tvdXQiIiIKKworICAgIGRl
ZiBjcmVhdGUoc2VsZiwgc3RhdGUpOgorICAgICAgICBmcm9tIG1hbmlmZXN0IGltcG9ydCBtYW5p
ZmVzdCwgdXBkYXRlCisgICAgICAgIHVwZGF0ZS51cGRhdGUoc3RhdGUuc3luY1sicGF0aCJdLCBz
dGF0ZS50ZXN0X21hbmlmZXN0KQorICAgICAgICBtYW5pZmVzdC53cml0ZShzdGF0ZS50ZXN0X21h
bmlmZXN0LCBzdGF0ZS5tYW5pZmVzdF9wYXRoKQorCisKK2NsYXNzIENvcHlXb3JrVHJlZShTdGVw
KToKKyAgICAiIiJDb3B5IHRoZSBzeW5jIHRyZWUgb3ZlciB0byB0aGUgZGVzdGluYXRpb24gaW4g
dGhlIGxvY2FsIHRyZWUiIiIKKworICAgIGRlZiBjcmVhdGUoc2VsZiwgc3RhdGUpOgorICAgICAg
ICBjb3B5X3dwdF90cmVlKHN0YXRlLnN5bmNfdHJlZSwKKyAgICAgICAgICAgICAgICAgICAgICBz
dGF0ZS50ZXN0c19wYXRoLAorICAgICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVzPXN0YXRlLnBh
dGhfZXhjbHVkZXMsCisgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZXM9c3RhdGUucGF0aF9p
bmNsdWRlcykKKworCitjbGFzcyBDcmVhdGVTeW5jUGF0Y2goU3RlcCk6CisgICAgIiIiQWRkIHRo
ZSB1cGRhdGVkIHRlc3QgZmlsZXMgdG8gYSBjb21taXQvcGF0Y2ggaW4gdGhlIGxvY2FsIHRyZWUu
IiIiCisKKyAgICBkZWYgY3JlYXRlKHNlbGYsIHN0YXRlKToKKyAgICAgICAgaWYgbm90IHN0YXRl
LnBhdGNoOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgbG9jYWxfdHJlZSA9IHN0YXRl
LmxvY2FsX3RyZWUKKyAgICAgICAgc3luY190cmVlID0gc3RhdGUuc3luY190cmVlCisKKyAgICAg
ICAgbG9jYWxfdHJlZS5jcmVhdGVfcGF0Y2goIndlYi1wbGF0Zm9ybS10ZXN0c191cGRhdGVfJXMi
ICUgc3luY190cmVlLnJldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVwZGF0
ZSAlcyB0byByZXZpc2lvbiAlcyIgJSAoc3RhdGUuc3VpdGVfbmFtZSwgc3luY190cmVlLnJldikp
CisgICAgICAgIGxvY2FsX3RyZWUuYWRkX25ldyhvcy5wYXRoLnJlbHBhdGgoc3RhdGUudGVzdHNf
cGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbF90
cmVlLnJvb3QpKQorICAgICAgICB1cGRhdGVkID0gbG9jYWxfdHJlZS51cGRhdGVfcGF0Y2goaW5j
bHVkZT1bc3RhdGUudGVzdHNfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRlLm1ldGFkYXRhX3BhdGhdKQorICAgICAgICBsb2NhbF90
cmVlLmNvbW1pdF9wYXRjaCgpCisKKyAgICAgICAgaWYgbm90IHVwZGF0ZWQ6CisgICAgICAgICAg
ICBzZWxmLmxvZ2dlci5pbmZvKCJOb3RoaW5nIHRvIHN5bmMiKQorCisKK2NsYXNzIFN5bmNGcm9t
VXBzdHJlYW1SdW5uZXIoU3RlcFJ1bm5lcik6CisgICAgIiIiKFN1YilSdW5uZXIgZm9yIGRvaW5n
IGFuIHVwc3RyZWFtIHN5bmMiIiIKKyAgICBzdGVwcyA9IFtVcGRhdGVDaGVja291dCwKKyAgICAg
ICAgICAgICBHZXRTeW5jVGFyZ2V0Q29tbWl0LAorICAgICAgICAgICAgIExvYWRNYW5pZmVzdCwK
KyAgICAgICAgICAgICBVcGRhdGVNYW5pZmVzdCwKKyAgICAgICAgICAgICBDb3B5V29ya1RyZWUs
CisgICAgICAgICAgICAgQ3JlYXRlU3luY1BhdGNoXQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVz
dHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvdXBkYXRlL3RyZWUucHkg
Yi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci91
cGRhdGUvdHJlZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDFk
ZjBiNGY5NGEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mv
dG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci91cGRhdGUvdHJlZS5weQpAQCAtMCwwICsxLDM4MiBA
QAoraW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBzdWJwcm9jZXNzCisKK2Zyb20gLi4gaW1w
b3J0IHZjcworZnJvbSAuLnZjcyBpbXBvcnQgYmluZF90b19yZXBvLCBnaXQsIGhnCisKKworZGVm
IGdldF91bmlxdWVfbmFtZShleGlzdGluZywgaW5pdGlhbCk6CisgICAgIiIiR2V0IGEgbmFtZSBl
aXRoZXIgZXF1YWwgdG8gaW5pdGlhbCBvciBvZiB0aGUgZm9ybSBpbml0aWFsX04sIGZvciBzb21l
CisgICAgaW50ZWdlciBOLCB0aGF0IGlzIG5vdCBpbiB0aGUgc2V0IGV4aXN0aW5nLgorCisKKyAg
ICA6cGFyYW0gZXhpc3Rpbmc6IFNldCBvZiBuYW1lcyB0aGF0IG11c3Qgbm90IGJlIGNob3Nlbi4K
KyAgICA6cGFyYW0gaW5pdGlhbDogTmFtZSwgb3IgbmFtZSBwcmVmaXgsIHRvIHVzZSIiIgorICAg
IGlmIGluaXRpYWwgbm90IGluIGV4aXN0aW5nOgorICAgICAgICByZXR1cm4gaW5pdGlhbAorICAg
IGZvciBpIGluIHhyYW5nZShsZW4oZXhpc3RpbmcpICsgMSk6CisgICAgICAgIHRlc3QgPSAiJXNf
JXMiICUgKGluaXRpYWwsIGkgKyAxKQorICAgICAgICBpZiB0ZXN0IG5vdCBpbiBleGlzdGluZzoK
KyAgICAgICAgICAgIHJldHVybiB0ZXN0CisgICAgYXNzZXJ0IEZhbHNlCisKK2NsYXNzIE5vVkNT
VHJlZShvYmplY3QpOgorICAgIG5hbWUgPSAibm9uLXZjcyIKKworICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCByb290PU5vbmUpOgorICAgICAgICBpZiByb290IGlzIE5vbmU6CisgICAgICAgICAgICBy
b290ID0gb3MucGF0aC5hYnNwYXRoKG9zLmN1cmRpcikKKyAgICAgICAgc2VsZi5yb290ID0gcm9v
dAorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGlzX3R5cGUoY2xzLCBwYXRoPU5vbmUpOgor
ICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGlzX2NsZWFuKHNl
bGYpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIGFkZF9uZXcoc2VsZiwgcHJlZml4
PU5vbmUpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgY3JlYXRlX3BhdGNoKHNlbGYsIHBhdGNo
X25hbWUsIG1lc3NhZ2UpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgdXBkYXRlX3BhdGNoKHNl
bGYsIGluY2x1ZGU9Tm9uZSk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBjb21taXRfcGF0Y2go
c2VsZik6CisgICAgICAgIHBhc3MKKworCitjbGFzcyBIZ1RyZWUob2JqZWN0KToKKyAgICBuYW1l
ID0gIm1lcmN1cmlhbCIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCByb290PU5vbmUpOgorICAg
ICAgICBpZiByb290IGlzIE5vbmU6CisgICAgICAgICAgICByb290ID0gaGcoInJvb3QiKS5zdHJp
cCgpCisgICAgICAgIHNlbGYucm9vdCA9IHJvb3QKKyAgICAgICAgc2VsZi5oZyA9IHZjcy5iaW5k
X3RvX3JlcG8oaGcsIHNlbGYucm9vdCkKKworICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6Cisg
ICAgICAgIHJ2ID0gc2VsZi5fX2RpY3RfXy5jb3B5KCkKKyAgICAgICAgZGVsIHJ2WydoZyddCisg
ICAgICAgIHJldHVybiBydgorCisgICAgZGVmIF9fc2V0c3RhdGVfXyhzZWxmLCBkaWN0KToKKyAg
ICAgICAgc2VsZi5fX2RpY3RfXy51cGRhdGUoZGljdCkKKyAgICAgICAgc2VsZi5oZyA9IHZjcy5i
aW5kX3RvX3JlcG8odmNzLmhnLCBzZWxmLnJvb3QpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBk
ZWYgaXNfdHlwZShjbHMsIHBhdGg9Tm9uZSk6CisgICAgICAgIGt3YXJncyA9IHsibG9nX2Vycm9y
IjogRmFsc2V9CisgICAgICAgIGlmIHBhdGggaXMgbm90IE5vbmU6CisgICAgICAgICAgICBrd2Fy
Z3NbInJlcG8iXSA9IHBhdGgKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaGcoInJvb3QiLCAq
Kmt3YXJncykKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAg
ICAgIHJldHVybiBUcnVlCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaXNfY2xlYW4oc2VsZik6
CisgICAgICAgIHJldHVybiBzZWxmLmhnKCJzdGF0dXMiKS5zdHJpcCgpID09ICIiCisKKyAgICBk
ZWYgYWRkX25ldyhzZWxmLCBwcmVmaXg9Tm9uZSk6CisgICAgICAgIGlmIHByZWZpeCBpcyBub3Qg
Tm9uZToKKyAgICAgICAgICAgIGFyZ3MgPSAoIi1JIiwgcHJlZml4KQorICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgYXJncyA9ICgpCisgICAgICAgIHNlbGYuaGcoImFkZCIsICphcmdzKQorCisg
ICAgZGVmIGNyZWF0ZV9wYXRjaChzZWxmLCBwYXRjaF9uYW1lLCBtZXNzYWdlKToKKyAgICAgICAg
dHJ5OgorICAgICAgICAgICAgc2VsZi5oZygicWluaXQiLCBsb2dfZXJyb3I9RmFsc2UpCisgICAg
ICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcjoKKyAgICAgICAgICAgIHBh
c3MKKworICAgICAgICBwYXRjaF9uYW1lcyA9IFtpdGVtLnN0cmlwKCkgZm9yIGl0ZW0gaW4gc2Vs
Zi5oZygicXNlcmllcyIpLnNwbGl0KCJcbiIpIGlmIGl0ZW0uc3RyaXAoKV0KKworICAgICAgICBz
dWZmaXggPSAwCisgICAgICAgIHRlc3RfbmFtZSA9IHBhdGNoX25hbWUKKyAgICAgICAgd2hpbGUg
dGVzdF9uYW1lIGluIHBhdGNoX25hbWVzOgorICAgICAgICAgICAgc3VmZml4ICs9IDEKKyAgICAg
ICAgICAgIHRlc3RfbmFtZSA9ICIlcy0laSIgJSAocGF0Y2hfbmFtZSwgc3VmZml4KQorCisgICAg
ICAgIHNlbGYuaGcoInFuZXciLCB0ZXN0X25hbWUsICItWCIsIHNlbGYucm9vdCwgIi1tIiwgbWVz
c2FnZSkKKworICAgIGRlZiB1cGRhdGVfcGF0Y2goc2VsZiwgaW5jbHVkZT1Ob25lKToKKyAgICAg
ICAgaWYgaW5jbHVkZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGFyZ3MgPSBbXQorICAgICAg
ICAgICAgZm9yIGl0ZW0gaW4gaW5jbHVkZToKKyAgICAgICAgICAgICAgICBhcmdzLmV4dGVuZChb
Ii1JIiwgaXRlbV0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhcmdzID0gKCkKKworICAg
ICAgICBzZWxmLmhnKCJxcmVmcmVzaCIsICphcmdzKQorICAgICAgICByZXR1cm4gVHJ1ZQorCisg
ICAgZGVmIGNvbW1pdF9wYXRjaChzZWxmKToKKyAgICAgICAgc2VsZi5oZygicWZpbmlzaCIpCisK
KyAgICBkZWYgY29udGFpbnNfY29tbWl0KHNlbGYsIGNvbW1pdCk6CisgICAgICAgIHRyeToKKyAg
ICAgICAgICAgIHNlbGYuaGcoImlkZW50aWZ5IiwgIi1yIiwgY29tbWl0LnNoYTEpCisgICAgICAg
ICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNz
RXJyb3I6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworCitjbGFzcyBHaXRUcmVlKG9iamVj
dCk6CisgICAgbmFtZSA9ICJnaXQiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcm9vdD1Ob25l
KToKKyAgICAgICAgaWYgcm9vdCBpcyBOb25lOgorICAgICAgICAgICAgcm9vdCA9IGdpdCgicmV2
LXBhcnNlIiwgIi0tc2hvdy10b3BsZXZlbCIpLnN0cmlwKCkKKyAgICAgICAgc2VsZi5yb290ID0g
cm9vdAorICAgICAgICBzZWxmLmdpdCA9IHZjcy5iaW5kX3RvX3JlcG8oZ2l0LCBzZWxmLnJvb3Qp
CisgICAgICAgIHNlbGYubWVzc2FnZSA9IE5vbmUKKyAgICAgICAgc2VsZi5jb21taXRfY2xzID0g
Q29tbWl0CisKKyAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgorICAgICAgICBydiA9IHNlbGYu
X19kaWN0X18uY29weSgpCisgICAgICAgIGRlbCBydlsnZ2l0J10KKyAgICAgICAgcmV0dXJuIHJ2
CisKKyAgICBkZWYgX19zZXRzdGF0ZV9fKHNlbGYsIGRpY3QpOgorICAgICAgICBzZWxmLl9fZGlj
dF9fLnVwZGF0ZShkaWN0KQorICAgICAgICBzZWxmLmdpdCA9IHZjcy5iaW5kX3RvX3JlcG8odmNz
LmdpdCwgc2VsZi5yb290KQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGlzX3R5cGUoY2xz
LCBwYXRoPU5vbmUpOgorICAgICAgICBrd2FyZ3MgPSB7ImxvZ19lcnJvciI6IEZhbHNlfQorICAg
ICAgICBpZiBwYXRoIGlzIG5vdCBOb25lOgorICAgICAgICAgICAga3dhcmdzWyJyZXBvIl0gPSBw
YXRoCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGdpdCgicmV2LXBhcnNlIiwgIi0tc2hvdy10
b3BsZXZlbCIsICoqa3dhcmdzKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICByZXR1cm4g
RmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiByZXYo
c2VsZik6CisgICAgICAgICIiIkN1cnJlbnQgSEVBRCByZXZpc2lvbiIiIgorICAgICAgICBpZiB2
Y3MuaXNfZ2l0X3Jvb3Qoc2VsZi5yb290KToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmdpdCgi
cmV2LXBhcnNlIiwgIkhFQUQiKS5zdHJpcCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBy
ZXR1cm4gTm9uZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGlzX2NsZWFuKHNlbGYpOgorICAg
ICAgICByZXR1cm4gc2VsZi5naXQoInN0YXR1cyIpLnN0cmlwKCkgPT0gIiIKKworICAgIGRlZiBh
ZGRfbmV3KHNlbGYsIHByZWZpeD1Ob25lKToKKyAgICAgICAgIiIiQWRkIGZpbGVzIHRvIHRoZSBz
dGFnaW5nIGFyZWEuCisKKyAgICAgICAgOnBhcmFtIHByZWZpeDogTm9uZSB0byBpbmNsdWRlIGFs
bCBmaWxlcyBvciBhIHBhdGggcHJlZml4IHRvCisgICAgICAgICAgICAgICAgICAgICAgIGFkZCBh
bGwgZmlsZXMgdW5kZXIgdGhhdCBwYXRoLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgcHJlZml4
IGlzIE5vbmU6CisgICAgICAgICAgICBhcmdzID0gKCItYSIsKQorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgYXJncyA9ICgiLS1uby1pZ25vcmUtcmVtb3ZhbCIsIHByZWZpeCkKKyAgICAgICAg
c2VsZi5naXQoImFkZCIsICphcmdzKQorCisgICAgZGVmIGxpc3RfcmVmcyhzZWxmLCByZWZfZmls
dGVyPU5vbmUpOgorICAgICAgICAiIiJHZXQgYSBsaXN0IG9mIHNoYTEsIG5hbWUgdHVwbGVzIGZv
ciByZWZlcmVuY2VzIGluIGEgcmVwb3NpdG9yeS4KKworICAgICAgICA6cGFyYW0gcmVmX2ZpbHRl
cjogUGF0dGVybiB0aGF0IHJlZmVyZW5jZSBuYW1lIG11c3QgbWF0Y2ggKGZyb20gdGhlIGVuZCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoaW5nIHdob2xlIC8tZGVsaW1pdGVkIHNl
Z21lbnRzIG9ubHkKKyAgICAgICAgIiIiCisgICAgICAgIGFyZ3MgPSBbXQorICAgICAgICBpZiBy
ZWZfZmlsdGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgYXJncy5hcHBlbmQocmVmX2ZpbHRl
cikKKyAgICAgICAgZGF0YSA9IHNlbGYuZ2l0KCJzaG93LXJlZiIsICphcmdzKQorICAgICAgICBy
diA9IFtdCisgICAgICAgIGZvciBsaW5lIGluIGRhdGEuc3BsaXQoIlxuIik6CisgICAgICAgICAg
ICBpZiBub3QgbGluZS5zdHJpcCgpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAg
ICAgICBzaGExLCByZWYgPSBsaW5lLnNwbGl0KCkKKyAgICAgICAgICAgIHJ2LmFwcGVuZCgoc2hh
MSwgcmVmKSkKKyAgICAgICAgcmV0dXJuIHJ2CisKKyAgICBkZWYgbGlzdF9yZW1vdGUoc2VsZiwg
cmVtb3RlLCByZWZfZmlsdGVyPU5vbmUpOgorICAgICAgICAiIiJSZXR1cm4gYSBsaXN0IG9mIChz
aGExLCBuYW1lKSB0dXBlcyBmb3IgcmVmZXJlbmNlcyBpbiBhIHJlbW90ZS4KKworICAgICAgICA6
cGFyYW0gcmVtb3RlOiBVUkwgb2YgdGhlIHJlbW90ZSB0byBsaXN0LgorICAgICAgICA6cGFyYW0g
cmVmX2ZpbHRlcjogUGF0dGVybiB0aGF0IHRoZSByZWZlcmVuY2UgbmFtZSBtdXN0IG1hdGNoLgor
ICAgICAgICAiIiIKKyAgICAgICAgYXJncyA9IFtdCisgICAgICAgIGlmIHJlZl9maWx0ZXIgaXMg
bm90IE5vbmU6CisgICAgICAgICAgICBhcmdzLmFwcGVuZChyZWZfZmlsdGVyKQorICAgICAgICBk
YXRhID0gc2VsZi5naXQoImxzLXJlbW90ZSIsIHJlbW90ZSwgKmFyZ3MpCisgICAgICAgIHJ2ID0g
W10KKyAgICAgICAgZm9yIGxpbmUgaW4gZGF0YS5zcGxpdCgiXG4iKToKKyAgICAgICAgICAgIGlm
IG5vdCBsaW5lLnN0cmlwKCk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAg
IHNoYTEsIHJlZiA9IGxpbmUuc3BsaXQoKQorICAgICAgICAgICAgcnYuYXBwZW5kKChzaGExLCBy
ZWYpKQorICAgICAgICByZXR1cm4gcnYKKworICAgIGRlZiBnZXRfcmVtb3RlX3NoYTEoc2VsZiwg
cmVtb3RlLCBicmFuY2gpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIFNIQTEgb2YgYSBwYXJ0aWN1
bGFyIGJyYW5jaCBpbiBhIHJlbW90ZS4KKworICAgICAgICA6cGFyYW0gcmVtb3RlOiB0aGUgcmVt
b3RlIFVSTAorICAgICAgICA6cGFyYW0gYnJhbmNoOiB0aGUgYnJhbmNoIG5hbWUiIiIKKyAgICAg
ICAgZm9yIHNoYTEsIHJlZiBpbiBzZWxmLmxpc3RfcmVtb3RlKHJlbW90ZSwgYnJhbmNoKToKKyAg
ICAgICAgICAgIGlmIHJlZiA9PSAicmVmcy9oZWFkcy8lcyIgJSBicmFuY2g6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHNlbGYuY29tbWl0X2NscyhzZWxmLCBzaGExKQorICAgICAgICBhc3NlcnQg
RmFsc2UKKworICAgIGRlZiBjcmVhdGVfcGF0Y2goc2VsZiwgcGF0Y2hfbmFtZSwgbWVzc2FnZSk6
CisgICAgICAgICMgSW4gZ2l0IGEgcGF0Y2ggaXMgYWN0dWFsbHkgYSBjb21taXQKKyAgICAgICAg
c2VsZi5tZXNzYWdlID0gbWVzc2FnZQorCisgICAgZGVmIHVwZGF0ZV9wYXRjaChzZWxmLCBpbmNs
dWRlPU5vbmUpOgorICAgICAgICAiIiJDb21taXQgdGhlIHN0YWdlZCBjaGFuZ2VzLCBvciBjaGFu
Z2VzIHRvIGxpc3RlZCBmaWxlcy4KKworICAgICAgICA6cGFyYW0gaW5jbHVkZTogRWl0aGVyIE5v
bmUsIHRvIGNvbW1pdCBzdGFnZWQgY2hhbmdlcywgb3IgYSBsaXN0CisgICAgICAgICAgICAgICAg
ICAgICAgICBvZiBmaWxlbmFtZXMgKHdoaWNoIG11c3QgYWxyZWFkeSBiZSBpbiB0aGUgcmVwbykK
KyAgICAgICAgICAgICAgICAgICAgICAgIHRvIGNvbW1pdAorICAgICAgICAiIiIKKyAgICAgICAg
aWYgaW5jbHVkZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGFyZ3MgPSB0dXBsZShpbmNsdWRl
KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYXJncyA9ICgpCisKKyAgICAgICAgaWYgc2Vs
Zi5naXQoInN0YXR1cyIsICItdW5vIiwgIi16IiwgKmFyZ3MpLnN0cmlwKCk6CisgICAgICAgICAg
ICBzZWxmLmdpdCgiYWRkIiwgKmFyZ3MpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAg
ICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBjb21taXRfcGF0Y2goc2VsZik6CisgICAgICAgIGFz
c2VydCBzZWxmLm1lc3NhZ2UgaXMgbm90IE5vbmUKKworICAgICAgICBpZiBzZWxmLmdpdCgiZGlm
ZiIsICItLW5hbWUtb25seSIsICItLXN0YWdlZCIsICIteiIpLnN0cmlwKCk6CisgICAgICAgICAg
ICBzZWxmLmdpdCgiY29tbWl0IiwgIi1tIiwgc2VsZi5tZXNzYWdlKQorICAgICAgICAgICAgcmV0
dXJuIFRydWUKKworICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBpbml0KHNlbGYpOgor
ICAgICAgICBzZWxmLmdpdCgiaW5pdCIpCisgICAgICAgIGFzc2VydCB2Y3MuaXNfZ2l0X3Jvb3Qo
c2VsZi5yb290KQorCisgICAgZGVmIGNoZWNrb3V0KHNlbGYsIHJldiwgYnJhbmNoPU5vbmUsIGZv
cmNlPUZhbHNlKToKKyAgICAgICAgIiIiQ2hlY2tvdXQgYSBwYXJ0aWN1bGFyIHJldmlzaW9uLCBv
cHRpb25hbGx5IGludG8gYSBuYW1lZCBicmFuY2guCisKKyAgICAgICAgOnBhcmFtIHJldjogUmV2
aXNpb24gaWRlbnRpZmllciAoZS5nLiBTSEExKSB0byBjaGVja291dAorICAgICAgICA6cGFyYW0g
YnJhbmNoOiBCcmFuY2ggbmFtZSB0byB1c2UKKyAgICAgICAgOnBhcmFtIGZvcmNlOiBGb3JjZS1j
aGVja291dAorICAgICAgICAiIiIKKyAgICAgICAgYXNzZXJ0IHJldiBpcyBub3QgTm9uZQorCisg
ICAgICAgIGFyZ3MgPSBbXQorICAgICAgICBpZiBicmFuY2g6CisgICAgICAgICAgICBicmFuY2hl
cyA9IFtyZWZbbGVuKCJyZWZzL2hlYWRzLyIpOl0gZm9yIHNoYTEsIHJlZiBpbiBzZWxmLmxpc3Rf
cmVmcygpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiByZWYuc3RhcnRzd2l0aCgicmVmcy9o
ZWFkcy8iKV0KKyAgICAgICAgICAgIGJyYW5jaCA9IGdldF91bmlxdWVfbmFtZShicmFuY2hlcywg
YnJhbmNoKQorCisgICAgICAgICAgICBhcmdzICs9IFsiLWIiLCBicmFuY2hdCisKKyAgICAgICAg
aWYgZm9yY2U6CisgICAgICAgICAgICBhcmdzLmFwcGVuZCgiLWYiKQorICAgICAgICBhcmdzLmFw
cGVuZChyZXYpCisgICAgICAgIHNlbGYuZ2l0KCJjaGVja291dCIsICphcmdzKQorCisgICAgZGVm
IHVwZGF0ZShzZWxmLCByZW1vdGUsIHJlbW90ZV9icmFuY2gsIGxvY2FsX2JyYW5jaCk6CisgICAg
ICAgICIiIkZldGNoIGZyb20gdGhlIHJlbW90ZSBhbmQgY2hlY2tvdXQgaW50byBhIGxvY2FsIGJy
YW5jaC4KKworICAgICAgICA6cGFyYW0gcmVtb3RlOiBVUkwgdG8gdGhlIHJlbW90ZSByZXBvc2l0
b3J5CisgICAgICAgIDpwYXJhbSByZW1vdGVfYnJhbmNoOiBCcmFuY2ggb24gdGhlIHJlbW90ZSBy
ZXBvc2l0b3J5IHRvIGNoZWNrIG91dAorICAgICAgICA6cGFyYW0gbG9jYWxfYnJhbmNoOiBMb2Nh
bCBicmFuY2ggbmFtZSB0byBjaGVjayBvdXQgaW50bworICAgICAgICAiIiIKKyAgICAgICAgaWYg
bm90IHZjcy5pc19naXRfcm9vdChzZWxmLnJvb3QpOgorICAgICAgICAgICAgc2VsZi5pbml0KCkK
KyAgICAgICAgc2VsZi5naXQoImNsZWFuIiwgIi14ZGYiKQorICAgICAgICBzZWxmLmdpdCgiZmV0
Y2giLCByZW1vdGUsICIlczolcyIgJSAocmVtb3RlX2JyYW5jaCwgbG9jYWxfYnJhbmNoKSkKKyAg
ICAgICAgc2VsZi5jaGVja291dChsb2NhbF9icmFuY2gpCisgICAgICAgIHNlbGYuZ2l0KCJzdWJt
b2R1bGUiLCAidXBkYXRlIiwgIi0taW5pdCIsICItLXJlY3Vyc2l2ZSIpCisKKyAgICBkZWYgY2xl
YW4oc2VsZik6CisgICAgICAgIHNlbGYuZ2l0KCJjaGVja291dCIsIHNlbGYucmV2KQorICAgICAg
ICBzZWxmLmdpdCgiYnJhbmNoIiwgIi1EIiwgc2VsZi5sb2NhbF9icmFuY2gpCisKKyAgICBkZWYg
cGF0aHMoc2VsZik6CisgICAgICAgICIiIkxpc3QgcGF0aHMgaW4gdGhlIHRyZWUiIiIKKyAgICAg
ICAgcmVwb19wYXRocyA9IFtzZWxmLnJvb3RdICsgIFtvcy5wYXRoLmpvaW4oc2VsZi5yb290LCBw
YXRoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwYXRoIGluIHNl
bGYuc3VibW9kdWxlcygpXQorCisgICAgICAgIHJ2ID0gW10KKworICAgICAgICBmb3IgcmVwb19w
YXRoIGluIHJlcG9fcGF0aHM6CisgICAgICAgICAgICBwYXRocyA9IHZjcy5naXQoImxzLXRyZWUi
LCAiLXIiLCAiLS1uYW1lLW9ubHkiLCAiSEVBRCIsIHJlcG89cmVwb19wYXRoKS5zcGxpdCgiXG4i
KQorICAgICAgICAgICAgcnYuZXh0ZW5kKG9zLnBhdGgucmVscGF0aChvcy5wYXRoLmpvaW4ocmVw
b19wYXRoLCBpdGVtKSwgc2VsZi5yb290KSBmb3IgaXRlbSBpbiBwYXRocworICAgICAgICAgICAg
ICAgICAgICAgIGlmIGl0ZW0uc3RyaXAoKSkKKyAgICAgICAgcmV0dXJuIHJ2CisKKyAgICBkZWYg
c3VibW9kdWxlcyhzZWxmKToKKyAgICAgICAgIiIiTGlzdCBzdWJtb2R1bGUgZGlyZWN0b3JpZXMi
IiIKKyAgICAgICAgb3V0cHV0ID0gc2VsZi5naXQoInN1Ym1vZHVsZSIsICJzdGF0dXMiLCAiLS1y
ZWN1cnNpdmUiKQorICAgICAgICBydiA9IFtdCisgICAgICAgIGZvciBsaW5lIGluIG91dHB1dC5z
cGxpdCgiXG4iKToKKyAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKKyAgICAgICAgICAg
IGlmIG5vdCBsaW5lOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBwYXJ0
cyA9IGxpbmUuc3BsaXQoIiAiKQorICAgICAgICAgICAgcnYuYXBwZW5kKHBhcnRzWzFdKQorICAg
ICAgICByZXR1cm4gcnYKKworICAgIGRlZiBjb250YWluc19jb21taXQoc2VsZiwgY29tbWl0KToK
KyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5naXQoInJldi1wYXJzZSIsICItLXZlcmlm
eSIsIGNvbW1pdC5zaGExKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZXhjZXB0
IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNl
CisKKworY2xhc3MgQ29tbWl0TWVzc2FnZShvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxm
LCB0ZXh0KToKKyAgICAgICAgc2VsZi50ZXh0ID0gdGV4dAorICAgICAgICBzZWxmLl9wYXJzZV9t
ZXNzYWdlKCkKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi50
ZXh0CisKKyAgICBkZWYgX3BhcnNlX21lc3NhZ2Uoc2VsZik6CisgICAgICAgIGxpbmVzID0gc2Vs
Zi50ZXh0LnNwbGl0bGluZXMoKQorICAgICAgICBzZWxmLmZ1bGxfc3VtbWFyeSA9IGxpbmVzWzBd
CisgICAgICAgIHNlbGYuYm9keSA9ICJcbiIuam9pbihsaW5lc1sxOl0pCisKKworY2xhc3MgQ29t
bWl0KG9iamVjdCk6CisgICAgbXNnX2NscyA9IENvbW1pdE1lc3NhZ2UKKworICAgIF9zaGExX3Jl
ID0gcmUuY29tcGlsZSgiXlswLTlhLWZdezQwfSQiKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYs
IHRyZWUsIHNoYTEpOgorICAgICAgICAiIiJPYmplY3QgcmVwcmVzZW50aW5nIGEgY29tbWl0IGlu
IGEgc3BlY2lmaWMgR2l0VHJlZS4KKworICAgICAgICA6cGFyYW0gdHJlZTogR2l0VHJlZSB0byB3
aGljaCB0aGlzIGNvbW1pdCBiZWxvbmdzLgorICAgICAgICA6cGFyYW0gc2hhMTogRnVsbCBzaGEx
IHN0cmluZyBmb3IgdGhlIGNvbW1pdAorICAgICAgICAiIiIKKyAgICAgICAgYXNzZXJ0IHNlbGYu
X3NoYTFfcmUubWF0Y2goc2hhMSkKKworICAgICAgICBzZWxmLnRyZWUgPSB0cmVlCisgICAgICAg
IHNlbGYuZ2l0ID0gdHJlZS5naXQKKyAgICAgICAgc2VsZi5zaGExID0gc2hhMQorICAgICAgICBz
ZWxmLmF1dGhvciwgc2VsZi5lbWFpbCwgc2VsZi5tZXNzYWdlID0gc2VsZi5fZ2V0X21ldGEoKQor
CisgICAgZGVmIF9fZ2V0c3RhdGVfXyhzZWxmKToKKyAgICAgICAgcnYgPSBzZWxmLl9fZGljdF9f
LmNvcHkoKQorICAgICAgICBkZWwgcnZbJ2dpdCddCisgICAgICAgIHJldHVybiBydgorCisgICAg
ZGVmIF9fc2V0c3RhdGVfXyhzZWxmLCBkaWN0KToKKyAgICAgICAgc2VsZi5fX2RpY3RfXy51cGRh
dGUoZGljdCkKKyAgICAgICAgc2VsZi5naXQgPSBzZWxmLnRyZWUuZ2l0CisKKyAgICBkZWYgX2dl
dF9tZXRhKHNlbGYpOgorICAgICAgICBhdXRob3IsIGVtYWlsLCBtZXNzYWdlID0gc2VsZi5naXQo
InNob3ciLCAiLXMiLCAiLS1mb3JtYXQ9Zm9ybWF0OiVhblxuJWFlXG4lQiIsIHNlbGYuc2hhMSku
c3BsaXQoIlxuIiwgMikKKyAgICAgICAgcmV0dXJuIGF1dGhvciwgZW1haWwsIHNlbGYubXNnX2Ns
cyhtZXNzYWdlKQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xz
L3dwdHJ1bm5lci93cHRydW5uZXIvdXBkYXRlL3VwZGF0ZS5weSBiL1dlYkRyaXZlclRlc3RzL2lt
cG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3VwZGF0ZS91cGRhdGUucHkKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjNkN2Q3NzIwODRiCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93
cHRydW5uZXIvdXBkYXRlL3VwZGF0ZS5weQpAQCAtMCwwICsxLDE1OSBAQAoraW1wb3J0IG9zCitp
bXBvcnQgc3lzCisKK2Zyb20gbWV0YWRhdGEgaW1wb3J0IE1ldGFkYXRhVXBkYXRlUnVubmVyCitm
cm9tIHN5bmMgaW1wb3J0IFN5bmNGcm9tVXBzdHJlYW1SdW5uZXIKK2Zyb20gdHJlZSBpbXBvcnQg
R2l0VHJlZSwgSGdUcmVlLCBOb1ZDU1RyZWUKKworZnJvbSAuLiBpbXBvcnQgZW52aXJvbm1lbnQg
YXMgZW52Citmcm9tIGJhc2UgaW1wb3J0IFN0ZXAsIFN0ZXBSdW5uZXIsIGV4aXRfY2xlYW4sIGV4
aXRfdW5jbGVhbgorZnJvbSBzdGF0ZSBpbXBvcnQgU3RhdGUKKworZGVmIHNldHVwX3BhdGhzKHN5
bmNfcGF0aCk6CisgICAgc3lzLnBhdGguaW5zZXJ0KDAsIG9zLnBhdGguYWJzcGF0aChzeW5jX3Bh
dGgpKQorICAgIHRyeToKKyAgICAgICAgZnJvbSB0b29scyBpbXBvcnQgbG9jYWxwYXRocworICAg
IGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgZnJvbSB3cHRfdG9vbHMgaW1wb3J0IGxvY2Fs
cGF0aHMKKworY2xhc3MgTG9hZENvbmZpZyhTdGVwKToKKyAgICAiIiJTdGVwIGZvciBsb2FkaW5n
IGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgaW5pIGZpbGUgYW5kIGt3YXJncy4iIiIKKworICAgIHBy
b3ZpZGVzID0gWyJzeW5jIiwgInBhdGhzIiwgIm1ldGFkYXRhX3BhdGgiLCAidGVzdHNfcGF0aCJd
CisKKyAgICBkZWYgY3JlYXRlKHNlbGYsIHN0YXRlKToKKyAgICAgICAgc3RhdGUuc3luYyA9IHsi
cmVtb3RlX3VybCI6IHN0YXRlLmt3YXJnc1sicmVtb3RlX3VybCJdLAorICAgICAgICAgICAgICAg
ICAgICAgICJicmFuY2giOiBzdGF0ZS5rd2FyZ3NbImJyYW5jaCJdLAorICAgICAgICAgICAgICAg
ICAgICAgICJwYXRoIjogc3RhdGUua3dhcmdzWyJzeW5jX3BhdGgiXX0KKworICAgICAgICBzdGF0
ZS5wYXRocyA9IHN0YXRlLmt3YXJnc1sidGVzdF9wYXRocyJdCisgICAgICAgIHN0YXRlLnRlc3Rz
X3BhdGggPSBzdGF0ZS5wYXRoc1siLyJdWyJ0ZXN0c19wYXRoIl0KKyAgICAgICAgc3RhdGUubWV0
YWRhdGFfcGF0aCA9IHN0YXRlLnBhdGhzWyIvIl1bIm1ldGFkYXRhX3BhdGgiXQorCisgICAgICAg
IGFzc2VydCBvcy5wYXRoLmlzYWJzKHN0YXRlLnRlc3RzX3BhdGgpCisKKworY2xhc3MgTG9hZFRy
ZWVzKFN0ZXApOgorICAgICIiIlN0ZXAgZm9yIGNyZWF0aW5nIGEgVHJlZSBmb3IgdGhlIGxvY2Fs
IGNvcHkgYW5kIGEgR2l0VHJlZSBmb3IgdGhlCisgICAgdXBzdHJlYW0gc3luYy4iIiIKKworICAg
IHByb3ZpZGVzID0gWyJsb2NhbF90cmVlIiwgInN5bmNfdHJlZSJdCisKKyAgICBkZWYgY3JlYXRl
KHNlbGYsIHN0YXRlKToKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc3RhdGUuc3luY1sicGF0
aCJdKToKKyAgICAgICAgICAgIHN5bmNfdHJlZSA9IEdpdFRyZWUocm9vdD1zdGF0ZS5zeW5jWyJw
YXRoIl0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzeW5jX3RyZWUgPSBOb25lCisKKyAg
ICAgICAgaWYgR2l0VHJlZS5pc190eXBlKCk6CisgICAgICAgICAgICBsb2NhbF90cmVlID0gR2l0
VHJlZSgpCisgICAgICAgIGVsaWYgSGdUcmVlLmlzX3R5cGUoKToKKyAgICAgICAgICAgIGxvY2Fs
X3RyZWUgPSBIZ1RyZWUoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9jYWxfdHJlZSA9
IE5vVkNTVHJlZSgpCisKKyAgICAgICAgc3RhdGUudXBkYXRlKHsibG9jYWxfdHJlZSI6IGxvY2Fs
X3RyZWUsCisgICAgICAgICAgICAgICAgICAgICAgInN5bmNfdHJlZSI6IHN5bmNfdHJlZX0pCisK
KworY2xhc3MgU3luY0Zyb21VcHN0cmVhbShTdGVwKToKKyAgICAiIiJTdGVwIHRoYXQgc3luY2hy
b25pc2VzIGEgbG9jYWwgY29weSBvZiB0aGUgY29kZSB3aXRoIHVwc3RyZWFtLiIiIgorCisgICAg
ZGVmIGNyZWF0ZShzZWxmLCBzdGF0ZSk6CisgICAgICAgIGlmIG5vdCBzdGF0ZS5rd2FyZ3NbInN5
bmMiXToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIG5vdCBzdGF0ZS5zeW5jX3Ry
ZWU6CisgICAgICAgICAgICBvcy5ta2RpcihzdGF0ZS5zeW5jWyJwYXRoIl0pCisgICAgICAgICAg
ICBzdGF0ZS5zeW5jX3RyZWUgPSBHaXRUcmVlKHJvb3Q9c3RhdGUuc3luY1sicGF0aCJdKQorCisg
ICAgICAgIGt3YXJncyA9IHN0YXRlLmt3YXJncworICAgICAgICB3aXRoIHN0YXRlLnB1c2goWyJz
eW5jIiwgInBhdGhzIiwgIm1ldGFkYXRhX3BhdGgiLCAidGVzdHNfcGF0aCIsICJsb2NhbF90cmVl
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAic3luY190cmVlIl0pOgorICAgICAgICAgICAg
c3RhdGUudGFyZ2V0X3JldiA9IGt3YXJnc1sicmV2Il0KKyAgICAgICAgICAgIHN0YXRlLnBhdGNo
ID0ga3dhcmdzWyJwYXRjaCJdCisgICAgICAgICAgICBzdGF0ZS5zdWl0ZV9uYW1lID0ga3dhcmdz
WyJzdWl0ZV9uYW1lIl0KKyAgICAgICAgICAgIHN0YXRlLnBhdGhfZXhjbHVkZXMgPSBrd2FyZ3Nb
ImV4Y2x1ZGUiXQorICAgICAgICAgICAgc3RhdGUucGF0aF9pbmNsdWRlcyA9IGt3YXJnc1siaW5j
bHVkZSJdCisgICAgICAgICAgICBydW5uZXIgPSBTeW5jRnJvbVVwc3RyZWFtUnVubmVyKHNlbGYu
bG9nZ2VyLCBzdGF0ZSkKKyAgICAgICAgICAgIHJ1bm5lci5ydW4oKQorCisKK2NsYXNzIFVwZGF0
ZU1ldGFkYXRhKFN0ZXApOgorICAgICIiIlVwZGF0ZSB0aGUgZXhwZWN0YXRpb24gbWV0YWRhdGEg
ZnJvbSBhIHNldCBvZiBydW4gbG9ncyIiIgorCisgICAgZGVmIGNyZWF0ZShzZWxmLCBzdGF0ZSk6
CisgICAgICAgIGlmIG5vdCBzdGF0ZS5rd2FyZ3NbInJ1bl9sb2ciXToKKyAgICAgICAgICAgIHJl
dHVybgorCisgICAgICAgIGt3YXJncyA9IHN0YXRlLmt3YXJncworICAgICAgICB3aXRoIHN0YXRl
LnB1c2goWyJsb2NhbF90cmVlIiwgInN5bmNfdHJlZSIsICJwYXRocyIsICJzZXJ2ZV9yb290Il0p
OgorICAgICAgICAgICAgc3RhdGUucnVuX2xvZyA9IGt3YXJnc1sicnVuX2xvZyJdCisgICAgICAg
ICAgICBzdGF0ZS5pZ25vcmVfZXhpc3RpbmcgPSBrd2FyZ3NbImlnbm9yZV9leGlzdGluZyJdCisg
ICAgICAgICAgICBzdGF0ZS5wYXRjaCA9IGt3YXJnc1sicGF0Y2giXQorICAgICAgICAgICAgc3Rh
dGUuc3VpdGVfbmFtZSA9IGt3YXJnc1sic3VpdGVfbmFtZSJdCisgICAgICAgICAgICBzdGF0ZS5w
cm9kdWN0ID0ga3dhcmdzWyJwcm9kdWN0Il0KKyAgICAgICAgICAgIHN0YXRlLmNvbmZpZyA9IGt3
YXJnc1siY29uZmlnIl0KKyAgICAgICAgICAgIHJ1bm5lciA9IE1ldGFkYXRhVXBkYXRlUnVubmVy
KHNlbGYubG9nZ2VyLCBzdGF0ZSkKKyAgICAgICAgICAgIHJ1bm5lci5ydW4oKQorCisKK2NsYXNz
IFVwZGF0ZVJ1bm5lcihTdGVwUnVubmVyKToKKyAgICAiIiJSdW5uZXIgZm9yIGRvaW5nIGFuIG92
ZXJhbGwgdXBkYXRlLiIiIgorICAgIHN0ZXBzID0gW0xvYWRDb25maWcsCisgICAgICAgICAgICAg
TG9hZFRyZWVzLAorICAgICAgICAgICAgIFN5bmNGcm9tVXBzdHJlYW0sCisgICAgICAgICAgICAg
VXBkYXRlTWV0YWRhdGFdCisKKworY2xhc3MgV1BUVXBkYXRlKG9iamVjdCk6CisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIGxvZ2dlciwgcnVubmVyX2Nscz1VcGRhdGVSdW5uZXIsICoqa3dhcmdzKToK
KyAgICAgICAgIiIiT2JqZWN0IHRoYXQgY29udHJvbHMgdGhlIHJ1bm5pbmcgb2YgYSB3aG9sZSB3
cHR1cGRhdGUuCisKKyAgICAgICAgOnBhcmFtIHJ1bm5lcl9jbHM6IFJ1bm5lciBzdWJjbGFzcyBo
b2xkaW5nIHRoZSBvdmVyYWxsIGxpc3Qgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
ZXBzIHRvIHJ1bi4KKyAgICAgICAgOnBhcmFtIGt3YXJnczogQ29tbWFuZCBsaW5lIGFyZ3VtZW50
cworICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5ydW5uZXJfY2xzID0gcnVubmVyX2NscworICAg
ICAgICBzZWxmLnNlcnZlX3Jvb3QgPSBrd2FyZ3NbInRlc3RfcGF0aHMiXVsiLyJdWyJ0ZXN0c19w
YXRoIl0KKworICAgICAgICBpZiBub3Qga3dhcmdzWyJzeW5jIl06CisgICAgICAgICAgICBzZXR1
cF9wYXRocyhzZWxmLnNlcnZlX3Jvb3QpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBv
cy5wYXRoLmV4aXN0cyhrd2FyZ3NbInN5bmNfcGF0aCJdKToKKyAgICAgICAgICAgICAgICAjIElm
IHRoZSBzeW5jIHBhdGggZG9lc24ndCBleGlzdCB3ZSBkZWZlciB0aGlzIHVudGlsIGl0IGRvZXMK
KyAgICAgICAgICAgICAgICBzZXR1cF9wYXRocyhrd2FyZ3NbInN5bmNfcGF0aCJdKQorCisgICAg
ICAgIHNlbGYuc3RhdGUgPSBTdGF0ZShsb2dnZXIpCisgICAgICAgIHNlbGYua3dhcmdzID0ga3dh
cmdzCisgICAgICAgIHNlbGYubG9nZ2VyID0gbG9nZ2VyCisKKyAgICBkZWYgcnVuKHNlbGYsICoq
a3dhcmdzKToKKyAgICAgICAgaWYgc2VsZi5rd2FyZ3NbImFib3J0Il06CisgICAgICAgICAgICBz
ZWxmLmFib3J0KCkKKyAgICAgICAgICAgIHJldHVybiBleGl0X2NsZWFuCisKKyAgICAgICAgaWYg
bm90IHNlbGYua3dhcmdzWyJjb250aW51ZSJdIGFuZCBub3Qgc2VsZi5zdGF0ZS5pc19lbXB0eSgp
OgorICAgICAgICAgICAgc2VsZi5sb2dnZXIuZXJyb3IoIkZvdW5kIGV4aXN0aW5nIHN0YXRlLiBS
dW4gd2l0aCAtLWNvbnRpbnVlIHRvIHJlc3VtZSBvciAtLWFib3J0IHRvIGNsZWFyIHN0YXRlIikK
KyAgICAgICAgICAgIHJldHVybiBleGl0X3VuY2xlYW4KKworICAgICAgICBpZiBzZWxmLmt3YXJn
c1siY29udGludWUiXToKKyAgICAgICAgICAgIGlmIHNlbGYuc3RhdGUuaXNfZW1wdHkoKToKKyAg
ICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5lcnJvcigiTm8gc3luYyBpbiBwcm9ncmVzcz8iKQor
ICAgICAgICAgICAgICAgIHJldHVybiBleGl0X2NsZWFuCisKKyAgICAgICAgICAgIHNlbGYua3dh
cmdzID0gc2VsZi5zdGF0ZS5rd2FyZ3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYu
c3RhdGUua3dhcmdzID0gc2VsZi5rd2FyZ3MKKworICAgICAgICBzZWxmLnN0YXRlLnNlcnZlX3Jv
b3QgPSBzZWxmLnNlcnZlX3Jvb3QKKworICAgICAgICB1cGRhdGVfcnVubmVyID0gc2VsZi5ydW5u
ZXJfY2xzKHNlbGYubG9nZ2VyLCBzZWxmLnN0YXRlKQorICAgICAgICBydiA9IHVwZGF0ZV9ydW5u
ZXIucnVuKCkKKyAgICAgICAgaWYgcnYgaW4gKGV4aXRfY2xlYW4sIE5vbmUpOgorICAgICAgICAg
ICAgc2VsZi5zdGF0ZS5jbGVhcigpCisKKyAgICAgICAgcmV0dXJuIHJ2CisKKyAgICBkZWYgYWJv
cnQoc2VsZik6CisgICAgICAgIHNlbGYuc3RhdGUuY2xlYXIoKQpkaWZmIC0tZ2l0IGEvV2ViRHJp
dmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvdmNzLnB5IGIv
V2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvdmNz
LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xNmQ1M2FmYzhiZQot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRy
dW5uZXIvd3B0cnVubmVyL3Zjcy5weQpAQCAtMCwwICsxLDQ5IEBACitpbXBvcnQgc3VicHJvY2Vz
cworZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHBhcnRpYWwKKworZnJvbSBtb3psb2cgaW1wb3J0IGdl
dF9kZWZhdWx0X2xvZ2dlcgorCitsb2dnZXIgPSBOb25lCisKK2RlZiB2Y3MoYmluX25hbWUpOgor
ICAgIGRlZiBpbm5lcihjb21tYW5kLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBnbG9iYWwg
bG9nZ2VyCisKKyAgICAgICAgaWYgbG9nZ2VyIGlzIE5vbmU6CisgICAgICAgICAgICBsb2dnZXIg
PSBnZXRfZGVmYXVsdF9sb2dnZXIoInZjcyIpCisKKyAgICAgICAgcmVwbyA9IGt3YXJncy5wb3Ao
InJlcG8iLCBOb25lKQorICAgICAgICBsb2dfZXJyb3IgPSBrd2FyZ3MucG9wKCJsb2dfZXJyb3Ii
LCBUcnVlKQorICAgICAgICBpZiBrd2FyZ3M6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3Is
IGt3YXJncworCisgICAgICAgIGFyZ3MgPSBsaXN0KGFyZ3MpCisKKyAgICAgICAgcHJvY19rd2Fy
Z3MgPSB7fQorICAgICAgICBpZiByZXBvIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcHJvY19r
d2FyZ3NbImN3ZCJdID0gcmVwbworCisgICAgICAgIGNvbW1hbmRfbGluZSA9IFtiaW5fbmFtZSwg
Y29tbWFuZF0gKyBhcmdzCisgICAgICAgIGxvZ2dlci5kZWJ1ZygiICIuam9pbihjb21tYW5kX2xp
bmUpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc3VicHJvY2Vzcy5jaGVja19v
dXRwdXQoY29tbWFuZF9saW5lLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsICoqcHJvY19rd2Fy
Z3MpCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgor
ICAgICAgICAgICAgaWYgbG9nX2Vycm9yOgorICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihl
Lm91dHB1dCkKKyAgICAgICAgICAgIHJhaXNlCisgICAgcmV0dXJuIGlubmVyCisKK2dpdCA9IHZj
cygiZ2l0IikKK2hnID0gdmNzKCJoZyIpCisKKworZGVmIGJpbmRfdG9fcmVwbyh2Y3NfZnVuYywg
cmVwbyk6CisgICAgcmV0dXJuIHBhcnRpYWwodmNzX2Z1bmMsIHJlcG89cmVwbykKKworCitkZWYg
aXNfZ2l0X3Jvb3QocGF0aCk6CisgICAgdHJ5OgorICAgICAgICBydiA9IGdpdCgicmV2LXBhcnNl
IiwgIi0tc2hvdy1jZHVwIiwgcmVwbz1wYXRoKQorICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxl
ZFByb2Nlc3NFcnJvcjoKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgcmV0dXJuIHJ2ID09ICJc
biIKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5u
ZXIvd3B0cnVubmVyL3dlYmRyaXZlcl9zZXJ2ZXIucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRl
ZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci93ZWJkcml2ZXJfc2VydmVyLnB5Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mNzg1OTNlNGU1OQotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0
cnVubmVyL3dlYmRyaXZlcl9zZXJ2ZXIucHkKQEAgLTAsMCArMSwyNDQgQEAKK2ltcG9ydCBhYmMK
K2ltcG9ydCBlcnJubworaW1wb3J0IG9zCitpbXBvcnQgcGxhdGZvcm0KK2ltcG9ydCBzb2NrZXQK
K2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCB0aW1lCitpbXBvcnQgdHJhY2ViYWNrCitpbXBvcnQg
dXJscGFyc2UKKworaW1wb3J0IG1venByb2Nlc3MKKworCitfX2FsbF9fID0gWyJTZWxlbml1bVNl
cnZlciIsICJDaHJvbWVEcml2ZXJTZXJ2ZXIiLAorICAgICAgICAgICAiR2Vja29Ecml2ZXJTZXJ2
ZXIiLCAiSW50ZXJuZXRFeHBsb3JlckRyaXZlclNlcnZlciIsCisgICAgICAgICAgICJTZXJ2b0Ry
aXZlclNlcnZlciIsICJXZWJEcml2ZXJTZXJ2ZXIiXQorCisKK2NsYXNzIFdlYkRyaXZlclNlcnZl
cihvYmplY3QpOgorICAgIF9fbWV0YWNsYXNzX18gPSBhYmMuQUJDTWV0YQorCisgICAgZGVmYXVs
dF9iYXNlX3BhdGggPSAiLyIKKyAgICBfdXNlZF9wb3J0cyA9IHNldCgpCisKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgbG9nZ2VyLCBiaW5hcnksIGhvc3Q9IjEyNy4wLjAuMSIsIHBvcnQ9Tm9uZSwK
KyAgICAgICAgICAgICAgICAgYmFzZV9wYXRoPSIiLCBlbnY9Tm9uZSwgYXJncz1Ob25lKToKKyAg
ICAgICAgaWYgYmluYXJ5IGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJX
ZWJEcml2ZXIgc2VydmVyIGJpbmFyeSBtdXN0IGJlIGdpdmVuICIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgInRvIC0td2ViZHJpdmVyLWJpbmFyeSBhcmd1bWVudCIpCisKKyAgICAgICAg
c2VsZi5sb2dnZXIgPSBsb2dnZXIKKyAgICAgICAgc2VsZi5iaW5hcnkgPSBiaW5hcnkKKyAgICAg
ICAgc2VsZi5ob3N0ID0gaG9zdAorICAgICAgICBpZiBiYXNlX3BhdGggPT0gIiI6CisgICAgICAg
ICAgICBzZWxmLmJhc2VfcGF0aCA9IHNlbGYuZGVmYXVsdF9iYXNlX3BhdGgKKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIHNlbGYuYmFzZV9wYXRoID0gYmFzZV9wYXRoCisgICAgICAgIHNlbGYu
ZW52ID0gb3MuZW52aXJvbi5jb3B5KCkgaWYgZW52IGlzIE5vbmUgZWxzZSBlbnYKKworICAgICAg
ICBzZWxmLl9wb3J0ID0gcG9ydAorICAgICAgICBzZWxmLl9jbWQgPSBOb25lCisgICAgICAgIHNl
bGYuX2FyZ3MgPSBhcmdzIGlmIGFyZ3MgaXMgbm90IE5vbmUgZWxzZSBbXQorICAgICAgICBzZWxm
Ll9wcm9jID0gTm9uZQorCisgICAgQGFiYy5hYnN0cmFjdG1ldGhvZAorICAgIGRlZiBtYWtlX2Nv
bW1hbmQoc2VsZik6CisgICAgICAgICIiIlJldHVybnMgdGhlIGZ1bGwgY29tbWFuZCBmb3Igc3Rh
cnRpbmcgdGhlIHNlcnZlciBwcm9jZXNzIGFzIGEgbGlzdC4iIiIKKworICAgIGRlZiBzdGFydChz
ZWxmLCBibG9jaz1GYWxzZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3J1bihi
bG9jaykKKyAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgc2Vs
Zi5zdG9wKCkKKworICAgIGRlZiBfcnVuKHNlbGYsIGJsb2NrKToKKyAgICAgICAgc2VsZi5fY21k
ID0gc2VsZi5tYWtlX2NvbW1hbmQoKQorICAgICAgICBzZWxmLl9wcm9jID0gbW96cHJvY2Vzcy5Q
cm9jZXNzSGFuZGxlcigKKyAgICAgICAgICAgIHNlbGYuX2NtZCwKKyAgICAgICAgICAgIHByb2Nl
c3NPdXRwdXRMaW5lPXNlbGYub25fb3V0cHV0LAorICAgICAgICAgICAgZW52PXNlbGYuZW52LAor
ICAgICAgICAgICAgc3RvcmVPdXRwdXQ9RmFsc2UpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgc2VsZi5fcHJvYy5ydW4oKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAg
ICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9FTlQ6CisgICAgICAgICAgICAgICAgcmFpc2Ug
SU9FcnJvcigKKyAgICAgICAgICAgICAgICAgICAgIldlYkRyaXZlciBIVFRQIHNlcnZlciBleGVj
dXRhYmxlIG5vdCBmb3VuZDogJXMiICUgc2VsZi5iaW5hcnkpCisgICAgICAgICAgICByYWlzZQor
CisgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKAorICAgICAgICAgICAgIldhaXRpbmcgZm9yIHNl
cnZlciB0byBiZWNvbWUgYWNjZXNzaWJsZTogJXMiICUgc2VsZi51cmwpCisgICAgICAgIHRyeToK
KyAgICAgICAgICAgIHdhaXRfZm9yX3NlcnZpY2UoKHNlbGYuaG9zdCwgc2VsZi5wb3J0KSkKKyAg
ICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2VsZi5sb2dnZXIuZXJyb3IoCisgICAgICAgICAg
ICAgICAgIldlYkRyaXZlciBIVFRQIHNlcnZlciB3YXMgbm90IGFjY2Vzc2libGUgIgorICAgICAg
ICAgICAgICAgICJ3aXRoaW4gdGhlIHRpbWVvdXQ6XG4lcyIgJSB0cmFjZWJhY2suZm9ybWF0X2V4
YygpKQorICAgICAgICAgICAgcmFpc2UKKworICAgICAgICBpZiBibG9jazoKKyAgICAgICAgICAg
IHNlbGYuX3Byb2Mud2FpdCgpCisKKyAgICBkZWYgc3RvcChzZWxmLCBmb3JjZT1GYWxzZSk6Cisg
ICAgICAgIGlmIHNlbGYuaXNfYWxpdmU6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fcHJvYy5r
aWxsKCkKKyAgICAgICAgcmV0dXJuIG5vdCBzZWxmLmlzX2FsaXZlCisKKyAgICBAcHJvcGVydHkK
KyAgICBkZWYgaXNfYWxpdmUoc2VsZik6CisgICAgICAgIHJldHVybiBoYXNhdHRyKHNlbGYuX3By
b2MsICJwcm9jIikgYW5kIHNlbGYuX3Byb2MucG9sbCgpIGlzIE5vbmUKKworICAgIGRlZiBvbl9v
dXRwdXQoc2VsZiwgbGluZSk6CisgICAgICAgIHNlbGYubG9nZ2VyLnByb2Nlc3Nfb3V0cHV0KHNl
bGYucGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lLmRlY29kZSgi
dXRmOCIsICJyZXBsYWNlIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bW1hbmQ9IiAiLmpvaW4oc2VsZi5fY21kKSkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBwaWQo
c2VsZik6CisgICAgICAgIGlmIHNlbGYuX3Byb2MgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBy
ZXR1cm4gc2VsZi5fcHJvYy5waWQKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB1cmwoc2VsZik6
CisgICAgICAgIHJldHVybiAiaHR0cDovLyVzOiVpJXMiICUgKHNlbGYuaG9zdCwgc2VsZi5wb3J0
LCBzZWxmLmJhc2VfcGF0aCkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBwb3J0KHNlbGYpOgor
ICAgICAgICBpZiBzZWxmLl9wb3J0IGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLl9wb3J0ID0g
c2VsZi5fZmluZF9uZXh0X2ZyZWVfcG9ydCgpCisgICAgICAgIHJldHVybiBzZWxmLl9wb3J0CisK
KyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9maW5kX25leHRfZnJlZV9wb3J0KCk6CisgICAg
ICAgIHBvcnQgPSBnZXRfZnJlZV9wb3J0KDQ0NDQsIGV4Y2x1ZGU9V2ViRHJpdmVyU2VydmVyLl91
c2VkX3BvcnRzKQorICAgICAgICBXZWJEcml2ZXJTZXJ2ZXIuX3VzZWRfcG9ydHMuYWRkKHBvcnQp
CisgICAgICAgIHJldHVybiBwb3J0CisKKworY2xhc3MgU2VsZW5pdW1TZXJ2ZXIoV2ViRHJpdmVy
U2VydmVyKToKKyAgICBkZWZhdWx0X2Jhc2VfcGF0aCA9ICIvd2QvaHViIgorCisgICAgZGVmIG1h
a2VfY29tbWFuZChzZWxmKToKKyAgICAgICAgcmV0dXJuIFsiamF2YSIsICItamFyIiwgc2VsZi5i
aW5hcnksICItcG9ydCIsIHN0cihzZWxmLnBvcnQpXSArIHNlbGYuX2FyZ3MKKworCitjbGFzcyBD
aHJvbWVEcml2ZXJTZXJ2ZXIoV2ViRHJpdmVyU2VydmVyKToKKyAgICBkZWZhdWx0X2Jhc2VfcGF0
aCA9ICIvIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvZ2dlciwgYmluYXJ5PSJjaHJvbWVk
cml2ZXIiLCBwb3J0PU5vbmUsCisgICAgICAgICAgICAgICAgIGJhc2VfcGF0aD0iIiwgYXJncz1O
b25lKToKKyAgICAgICAgV2ViRHJpdmVyU2VydmVyLl9faW5pdF9fKAorICAgICAgICAgICAgc2Vs
ZiwgbG9nZ2VyLCBiaW5hcnksIHBvcnQ9cG9ydCwgYmFzZV9wYXRoPWJhc2VfcGF0aCwgYXJncz1h
cmdzKQorCisgICAgZGVmIG1ha2VfY29tbWFuZChzZWxmKToKKyAgICAgICAgcmV0dXJuIFtzZWxm
LmJpbmFyeSwKKyAgICAgICAgICAgICAgICBjbWRfYXJnKCJwb3J0Iiwgc3RyKHNlbGYucG9ydCkp
LAorICAgICAgICAgICAgICAgIGNtZF9hcmcoInVybC1iYXNlIiwgc2VsZi5iYXNlX3BhdGgpIGlm
IHNlbGYuYmFzZV9wYXRoIGVsc2UgIiJdICsgc2VsZi5fYXJncworCisKK2NsYXNzIEVkZ2VEcml2
ZXJTZXJ2ZXIoV2ViRHJpdmVyU2VydmVyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9nZ2Vy
LCBiaW5hcnk9Ik1pY3Jvc29mdFdlYkRyaXZlci5leGUiLCBwb3J0PU5vbmUsCisgICAgICAgICAg
ICAgICAgIGJhc2VfcGF0aD0iIiwgaG9zdD0ibG9jYWxob3N0IiwgYXJncz1Ob25lKToKKyAgICAg
ICAgV2ViRHJpdmVyU2VydmVyLl9faW5pdF9fKAorICAgICAgICAgICAgc2VsZiwgbG9nZ2VyLCBi
aW5hcnksIGhvc3Q9aG9zdCwgcG9ydD1wb3J0LCBhcmdzPWFyZ3MpCisKKyAgICBkZWYgbWFrZV9j
b21tYW5kKHNlbGYpOgorICAgICAgICByZXR1cm4gW3NlbGYuYmluYXJ5LAorICAgICAgICAgICAg
ICAgICItLXBvcnQ9JXMiICUgc3RyKHNlbGYucG9ydCldICsgc2VsZi5fYXJncworCisKK2NsYXNz
IEludGVybmV0RXhwbG9yZXJEcml2ZXJTZXJ2ZXIoV2ViRHJpdmVyU2VydmVyKToKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgbG9nZ2VyLCBiaW5hcnk9IklFRHJpdmVyU2VydmVyLmV4ZSIsIHBvcnQ9
Tm9uZSwKKyAgICAgICAgICAgICAgICAgYmFzZV9wYXRoPSIiLCBob3N0PSJsb2NhbGhvc3QiLCBh
cmdzPU5vbmUpOgorICAgICAgICBXZWJEcml2ZXJTZXJ2ZXIuX19pbml0X18oCisgICAgICAgICAg
ICBzZWxmLCBsb2dnZXIsIGJpbmFyeSwgaG9zdD1ob3N0LCBwb3J0PXBvcnQsIGFyZ3M9YXJncykK
KworICAgIGRlZiBtYWtlX2NvbW1hbmQoc2VsZik6CisgICAgICAgIHJldHVybiBbc2VsZi5iaW5h
cnksCisgICAgICAgICAgICAgICAgIi0tcG9ydD0lcyIgJSBzdHIoc2VsZi5wb3J0KV0gKyBzZWxm
Ll9hcmdzCisKKworY2xhc3MgR2Vja29Ecml2ZXJTZXJ2ZXIoV2ViRHJpdmVyU2VydmVyKToKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgbG9nZ2VyLCBtYXJpb25ldHRlX3BvcnQ9MjgyOCwgYmluYXJ5
PSJnZWNrb2RyaXZlciIsCisgICAgICAgICAgICAgICAgIGhvc3Q9IjEyNy4wLjAuMSIsIHBvcnQ9
Tm9uZSwgYXJncz1Ob25lKToKKyAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAg
ICAgZW52WyJSVVNUX0JBQ0tUUkFDRSJdID0gIjEiCisgICAgICAgIFdlYkRyaXZlclNlcnZlci5f
X2luaXRfXyhzZWxmLCBsb2dnZXIsIGJpbmFyeSwgaG9zdD1ob3N0LCBwb3J0PXBvcnQsIGVudj1l
bnYsIGFyZ3M9YXJncykKKyAgICAgICAgc2VsZi5tYXJpb25ldHRlX3BvcnQgPSBtYXJpb25ldHRl
X3BvcnQKKworICAgIGRlZiBtYWtlX2NvbW1hbmQoc2VsZik6CisgICAgICAgIHJldHVybiBbc2Vs
Zi5iaW5hcnksCisgICAgICAgICAgICAgICAgIi0tbWFyaW9uZXR0ZS1wb3J0Iiwgc3RyKHNlbGYu
bWFyaW9uZXR0ZV9wb3J0KSwKKyAgICAgICAgICAgICAgICAiLS1ob3N0Iiwgc2VsZi5ob3N0LAor
ICAgICAgICAgICAgICAgICItLXBvcnQiLCBzdHIoc2VsZi5wb3J0KV0gKyBzZWxmLl9hcmdzCisK
KworY2xhc3MgU2Vydm9Ecml2ZXJTZXJ2ZXIoV2ViRHJpdmVyU2VydmVyKToKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgbG9nZ2VyLCBiaW5hcnk9InNlcnZvIiwgYmluYXJ5X2FyZ3M9Tm9uZSwgaG9z
dD0iMTI3LjAuMC4xIiwgcG9ydD1Ob25lKToKKyAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5
KCkKKyAgICAgICAgZW52WyJSVVNUX0JBQ0tUUkFDRSJdID0gIjEiCisgICAgICAgIFdlYkRyaXZl
clNlcnZlci5fX2luaXRfXyhzZWxmLCBsb2dnZXIsIGJpbmFyeSwgaG9zdD1ob3N0LCBwb3J0PXBv
cnQsIGVudj1lbnYpCisgICAgICAgIHNlbGYuYmluYXJ5X2FyZ3MgPSBiaW5hcnlfYXJncworCisg
ICAgZGVmIG1ha2VfY29tbWFuZChzZWxmKToKKyAgICAgICAgY29tbWFuZCA9IFtzZWxmLmJpbmFy
eSwKKyAgICAgICAgICAgICAgICAgICAiLS13ZWJkcml2ZXIiLCBzdHIoc2VsZi5wb3J0KSwKKyAg
ICAgICAgICAgICAgICAgICAiLS1oYXJkLWZhaWwiLAorICAgICAgICAgICAgICAgICAgICItLWhl
YWRsZXNzIl0gKyBzZWxmLl9hcmdzCisgICAgICAgIGlmIHNlbGYuYmluYXJ5X2FyZ3M6CisgICAg
ICAgICAgICBjb21tYW5kICs9IHNlbGYuYmluYXJ5X2FyZ3MKKyAgICAgICAgcmV0dXJuIGNvbW1h
bmQKKworCitkZWYgY21kX2FyZyhuYW1lLCB2YWx1ZT1Ob25lKToKKyAgICBwcmVmaXggPSAiLSIg
aWYgcGxhdGZvcm0uc3lzdGVtKCkgPT0gIldpbmRvd3MiIGVsc2UgIi0tIgorICAgIHJ2ID0gcHJl
Zml4ICsgbmFtZQorICAgIGlmIHZhbHVlIGlzIG5vdCBOb25lOgorICAgICAgICBydiArPSAiPSIg
KyB2YWx1ZQorICAgIHJldHVybiBydgorCisKK2RlZiBnZXRfZnJlZV9wb3J0KHN0YXJ0X3BvcnQs
IGV4Y2x1ZGU9Tm9uZSk6CisgICAgIiIiR2V0IHRoZSBmaXJzdCBwb3J0IG51bWJlciBhZnRlciBz
dGFydF9wb3J0IChpbmNsdXNpdmUpIHRoYXQgaXMKKyAgICBub3QgY3VycmVudGx5IGJvdW5kLgor
CisgICAgOnBhcmFtIHN0YXJ0X3BvcnQ6IEludGVnZXIgcG9ydCBudW1iZXIgYXQgd2hpY2ggdG8g
c3RhcnQgdGVzdGluZy4KKyAgICA6cGFyYW0gZXhjbHVkZTogU2V0IG9mIHBvcnQgbnVtYmVycyB0
byBza2lwIiIiCisgICAgcG9ydCA9IHN0YXJ0X3BvcnQKKyAgICB3aGlsZSBUcnVlOgorICAgICAg
ICBpZiBleGNsdWRlIGFuZCBwb3J0IGluIGV4Y2x1ZGU6CisgICAgICAgICAgICBwb3J0ICs9IDEK
KyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAg
ICAgdHJ5OgorICAgICAgICAgICAgcy5iaW5kKCgiMTI3LjAuMC4xIiwgcG9ydCkpCisgICAgICAg
IGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICBwb3J0ICs9IDEKKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIHJldHVybiBwb3J0CisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAg
ICBzLmNsb3NlKCkKKworCitkZWYgd2FpdF9mb3Jfc2VydmljZShhZGRyLCB0aW1lb3V0PTE1KToK
KyAgICAiIiJXYWl0cyB1bnRpbCBuZXR3b3JrIHNlcnZpY2UgZ2l2ZW4gYXMgYSB0dXBsZSBvZiAo
aG9zdCwgcG9ydCkgYmVjb21lcworICAgIGF2YWlsYWJsZSBvciB0aGUgYHRpbWVvdXRgIGR1cmF0
aW9uIGlzIHJlYWNoZWQsIGF0IHdoaWNoIHBvaW50CisgICAgYGBzb2NrZXQuZXJyb3JgYCBpcyBy
YWlzZWQuIiIiCisgICAgZW5kID0gdGltZS50aW1lKCkgKyB0aW1lb3V0CisgICAgd2hpbGUgZW5k
ID4gdGltZS50aW1lKCk6CisgICAgICAgIHNvID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIHRy
eToKKyAgICAgICAgICAgIHNvLmNvbm5lY3QoYWRkcikKKyAgICAgICAgZXhjZXB0IHNvY2tldC50
aW1lb3V0OgorICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFz
IGU6CisgICAgICAgICAgICBpZiBlWzBdICE9IGVycm5vLkVDT05OUkVGVVNFRDoKKyAgICAgICAg
ICAgICAgICByYWlzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAg
ICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNvLmNsb3NlKCkKKyAgICAgICAgdGltZS5zbGVl
cCgwLjUpCisgICAgcmFpc2Ugc29ja2V0LmVycm9yKCJTZXJ2aWNlIGlzIHVuYXZhaWxhYmxlOiAl
czolaSIgJSBhZGRyKQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rv
b2xzL3dwdHJ1bm5lci93cHRydW5uZXIvd3B0Y29tbWFuZGxpbmUucHkgYi9XZWJEcml2ZXJUZXN0
cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci93cHRjb21tYW5kbGluZS5w
eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYjNkYzhiOTM3MjIKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVu
bmVyL3dwdHJ1bm5lci93cHRjb21tYW5kbGluZS5weQpAQCAtMCwwICsxLDQ5NiBAQAoraW1wb3J0
IGFyZ3BhcnNlCitpbXBvcnQgYXN0CitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2Zyb20gY29sbGVj
dGlvbnMgaW1wb3J0IE9yZGVyZWREaWN0Citmcm9tIGRpc3R1dGlscy5zcGF3biBpbXBvcnQgZmlu
ZF9leGVjdXRhYmxlCisKK2ltcG9ydCBjb25maWcKK2ltcG9ydCB3cHR0ZXN0CitpbXBvcnQgZm9y
bWF0dGVycworCisKK2RlZiBhYnNfcGF0aChwYXRoKToKKyAgICByZXR1cm4gb3MucGF0aC5hYnNw
YXRoKG9zLnBhdGguZXhwYW5kdXNlcihwYXRoKSkKKworCitkZWYgdXJsX29yX3BhdGgocGF0aCk6
CisgICAgaW1wb3J0IHVybHBhcnNlCisKKyAgICBwYXJzZWQgPSB1cmxwYXJzZS51cmxwYXJzZShw
YXRoKQorICAgIGlmIGxlbihwYXJzZWQuc2NoZW1lKSA+IDI6CisgICAgICAgIHJldHVybiBwYXRo
CisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIGFic19wYXRoKHBhdGgpCisKKworZGVmIHJlcXVp
cmVfYXJnKGt3YXJncywgbmFtZSwgdmFsdWVfZnVuYz1Ob25lKToKKyAgICBpZiB2YWx1ZV9mdW5j
IGlzIE5vbmU6CisgICAgICAgIHZhbHVlX2Z1bmMgPSBsYW1iZGEgeDogeCBpcyBub3QgTm9uZQor
CisgICAgaWYgbm90IG5hbWUgaW4ga3dhcmdzIG9yIG5vdCB2YWx1ZV9mdW5jKGt3YXJnc1tuYW1l
XSk6CisgICAgICAgIHByaW50ID4+IHN5cy5zdGRlcnIsICJNaXNzaW5nIHJlcXVpcmVkIGFyZ3Vt
ZW50ICVzIiAlIG5hbWUKKyAgICAgICAgc3lzLmV4aXQoMSkKKworCitkZWYgY3JlYXRlX3BhcnNl
cihwcm9kdWN0X2Nob2ljZXM9Tm9uZSk6CisgICAgZnJvbSBtb3psb2cgaW1wb3J0IGNvbW1hbmRs
aW5lCisKKyAgICBpbXBvcnQgcHJvZHVjdHMKKworICAgIGlmIHByb2R1Y3RfY2hvaWNlcyBpcyBO
b25lOgorICAgICAgICBjb25maWdfZGF0YSA9IGNvbmZpZy5sb2FkKCkKKyAgICAgICAgcHJvZHVj
dF9jaG9pY2VzID0gcHJvZHVjdHMucHJvZHVjdHNfZW5hYmxlZChjb25maWdfZGF0YSkKKworICAg
IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPSIiIlJ1bm5lciBm
b3Igd2ViLXBsYXRmb3JtLXRlc3RzIHRlc3RzLiIiIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1c2FnZT0iIiIlKHByb2cpcyBbT1BUSU9OXS4uLiBbVEVTVF0uLi4KKwor
VEVTVCBpcyBlaXRoZXIgdGhlIGZ1bGwgcGF0aCB0byBhIHRlc3QgZmlsZSB0byBydW4sIG9yIHRo
ZSBVUkwgb2YgYSB0ZXN0IGV4Y2x1ZGluZworc2NoZW1lIGhvc3QgYW5kIHBvcnQuIiIiKQorICAg
IHBhcnNlci5hZGRfYXJndW1lbnQoIi0tbWFuaWZlc3QtdXBkYXRlIiwgYWN0aW9uPSJzdG9yZV90
cnVlIiwgZGVmYXVsdD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iUmVnZW5l
cmF0ZSB0aGUgdGVzdCBtYW5pZmVzdC4iKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi0tbm8t
bWFuaWZlc3QtdXBkYXRlIiwgYWN0aW9uPSJzdG9yZV9mYWxzZSIsIGRlc3Q9Im1hbmlmZXN0X3Vw
ZGF0ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJQcmV2ZW50IHJlZ2VuZXJhdGlv
biBvZiB0aGUgdGVzdCBtYW5pZmVzdC4iKQorCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLS10
aW1lb3V0LW11bHRpcGxpZXIiLCBhY3Rpb249InN0b3JlIiwgdHlwZT1mbG9hdCwgZGVmYXVsdD1O
b25lLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iTXVsdGlwbGllciByZWxhdGl2ZSB0
byBzdGFuZGFyZCB0ZXN0IHRpbWVvdXQgdG8gdXNlIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50
KCItLXJ1bi1ieS1kaXIiLCB0eXBlPWludCwgbmFyZ3M9Ij8iLCBkZWZhdWx0PUZhbHNlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgaGVscD0iU3BsaXQgcnVuIGludG8gZ3JvdXBzIGJ5IGRpcmVj
dG9yaWVzLiBXaXRoIGEgcGFyYW1ldGVyLCIKKyAgICAgICAgICAgICAgICAgICAgICAgICJsaW1p
dCB0aGUgZGVwdGggb2Ygc3BsaXRzIGUuZy4gLS1ydW4tYnktZGlyPTEgdG8gc3BsaXQgYnkgdG9w
LWxldmVsIgorICAgICAgICAgICAgICAgICAgICAgICAgImRpcmVjdG9yeSIpCisgICAgcGFyc2Vy
LmFkZF9hcmd1bWVudCgiLS1wcm9jZXNzZXMiLCBhY3Rpb249InN0b3JlIiwgdHlwZT1pbnQsIGRl
ZmF1bHQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9Ik51bWJlciBvZiBzaW11
bHRhbmVvdXMgcHJvY2Vzc2VzIHRvIHVzZSIpCisKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCIt
LW5vLWNhcHR1cmUtc3RkaW8iLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZWZhdWx0PUZhbHNlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iRG9uJ3QgY2FwdHVyZSBzdGRpbyBhbmQgd3Jp
dGUgdG8gbG9nZ2luZyIpCisKKyAgICBtb2RlX2dyb3VwID0gcGFyc2VyLmFkZF9hcmd1bWVudF9n
cm91cCgiTW9kZSIpCisgICAgbW9kZV9ncm91cC5hZGRfYXJndW1lbnQoIi0tbGlzdC10ZXN0LWdy
b3VwcyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJMaXN0IHRo
ZSB0b3AgbGV2ZWwgZGlyZWN0b3JpZXMgY29udGFpbmluZyB0ZXN0cyB0aGF0IHdpbGwgcnVuLiIp
CisgICAgbW9kZV9ncm91cC5hZGRfYXJndW1lbnQoIi0tbGlzdC1kaXNhYmxlZCIsIGFjdGlvbj0i
c3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJMaXN0IHRoZSB0ZXN0cyB0aGF0IGFy
ZSBkaXNhYmxlZCBvbiB0aGUgY3VycmVudCBwbGF0Zm9ybSIpCisgICAgbW9kZV9ncm91cC5hZGRf
YXJndW1lbnQoIi0tbGlzdC10ZXN0cyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBoZWxwPSJMaXN0IGFsbCB0ZXN0cyB0aGF0IHdpbGwgcnVuIikKKworICAgIHRlc3Rfc2Vs
ZWN0aW9uX2dyb3VwID0gcGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cCgiVGVzdCBTZWxlY3Rpb24i
KQorICAgIHRlc3Rfc2VsZWN0aW9uX2dyb3VwLmFkZF9hcmd1bWVudCgiLS10ZXN0LXR5cGVzIiwg
YWN0aW9uPSJzdG9yZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5h
cmdzPSIqIiwgZGVmYXVsdD13cHR0ZXN0LmVuYWJsZWRfdGVzdHMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNob2ljZXM9d3B0dGVzdC5lbmFibGVkX3Rlc3RzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJUZXN0IHR5cGVzIHRvIHJ1
biIpCisgICAgdGVzdF9zZWxlY3Rpb25fZ3JvdXAuYWRkX2FyZ3VtZW50KCItLWluY2x1ZGUiLCBh
Y3Rpb249ImFwcGVuZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhl
bHA9IlVSTCBwcmVmaXggdG8gaW5jbHVkZSIpCisgICAgdGVzdF9zZWxlY3Rpb25fZ3JvdXAuYWRk
X2FyZ3VtZW50KCItLWV4Y2x1ZGUiLCBhY3Rpb249ImFwcGVuZCIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlVSTCBwcmVmaXggdG8gZXhjbHVkZSIpCisgICAg
dGVzdF9zZWxlY3Rpb25fZ3JvdXAuYWRkX2FyZ3VtZW50KCItLWluY2x1ZGUtbWFuaWZlc3QiLCB0
eXBlPWFic19wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxw
PSJQYXRoIHRvIG1hbmlmZXN0IGxpc3RpbmcgdGVzdHMgdG8gaW5jbHVkZSIpCisgICAgdGVzdF9z
ZWxlY3Rpb25fZ3JvdXAuYWRkX2FyZ3VtZW50KCItLXRhZyIsIGFjdGlvbj0iYXBwZW5kIiwgZGVz
dD0idGFncyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9Ikxh
YmVscyBhcHBsaWVkIHRvIHRlc3RzIHRvIGluY2x1ZGUgaW4gdGhlIHJ1bi4gTGFiZWxzIHN0YXJ0
aW5nIGRpcjogYXJlIGVxdWl2YWxlbnQgdG8gdG9wLWxldmVsIGRpcmVjdG9yaWVzLiIpCisKKyAg
ICBkZWJ1Z2dpbmdfZ3JvdXAgPSBwYXJzZXIuYWRkX2FyZ3VtZW50X2dyb3VwKCJEZWJ1Z2dpbmci
KQorICAgIGRlYnVnZ2luZ19ncm91cC5hZGRfYXJndW1lbnQoJy0tZGVidWdnZXInLCBjb25zdD0i
X19kZWZhdWx0X18iLCBuYXJncz0iPyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBoZWxwPSJydW4gdW5kZXIgYSBkZWJ1Z2dlciwgZS5nLiBnZGIgb3IgdmFsZ3JpbmQiKQorICAg
IGRlYnVnZ2luZ19ncm91cC5hZGRfYXJndW1lbnQoJy0tZGVidWdnZXItYXJncycsIGhlbHA9ImFy
Z3VtZW50cyB0byB0aGUgZGVidWdnZXIiKQorICAgIGRlYnVnZ2luZ19ncm91cC5hZGRfYXJndW1l
bnQoIi0tcmVwZWF0IiwgYWN0aW9uPSJzdG9yZSIsIHR5cGU9aW50LCBkZWZhdWx0PTEsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJOdW1iZXIgb2YgdGltZXMgdG8gcnVu
IHRoZSB0ZXN0cyIpCisgICAgZGVidWdnaW5nX2dyb3VwLmFkZF9hcmd1bWVudCgiLS1yZXBlYXQt
dW50aWwtdW5leHBlY3RlZCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlZmF1bHQ9Tm9uZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlJ1biB0ZXN0cyBpbiBhIGxvb3Ag
dW50aWwgb25lIHJldHVybnMgYW4gdW5leHBlY3RlZCByZXN1bHQiKQorICAgIGRlYnVnZ2luZ19n
cm91cC5hZGRfYXJndW1lbnQoJy0tcGF1c2UtYWZ0ZXItdGVzdCcsIGFjdGlvbj0ic3RvcmVfdHJ1
ZSIsIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9
IkhhbHQgdGhlIHRlc3QgcnVubmVyIGFmdGVyIGVhY2ggdGVzdCAodGhpcyBoYXBwZW5zIGJ5IGRl
ZmF1bHQgaWYgb25seSBhIHNpbmdsZSB0ZXN0IGlzIHJ1bikiKQorICAgIGRlYnVnZ2luZ19ncm91
cC5hZGRfYXJndW1lbnQoJy0tbm8tcGF1c2UtYWZ0ZXItdGVzdCcsIGRlc3Q9InBhdXNlX2FmdGVy
X3Rlc3QiLCBhY3Rpb249InN0b3JlX2ZhbHNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGhlbHA9IkRvbid0IGhhbHQgdGhlIHRlc3QgcnVubmVyIGlycmVzcGVjdGl2ZSBvZiB0
aGUgbnVtYmVyIG9mIHRlc3RzIHJ1biIpCisKKyAgICBkZWJ1Z2dpbmdfZ3JvdXAuYWRkX2FyZ3Vt
ZW50KCctLXBhdXNlLW9uLXVuZXhwZWN0ZWQnLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iSGFsdCB0aGUgdGVzdCBydW5uZXIgd2hl
biBhbiB1bmV4cGVjdGVkIHJlc3VsdCBpcyBlbmNvdW50ZXJlZCIpCisgICAgZGVidWdnaW5nX2dy
b3VwLmFkZF9hcmd1bWVudCgnLS1uby1yZXN0YXJ0LW9uLXVuZXhwZWN0ZWQnLCBkZXN0PSJyZXN0
YXJ0X29uX3VuZXhwZWN0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdD1UcnVlLCBhY3Rpb249InN0b3JlX2ZhbHNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGhlbHA9IkRvbid0IHJlc3RhcnQgb24gYW4gdW5leHBlY3RlZCByZXN1bHQiKQor
CisgICAgZGVidWdnaW5nX2dyb3VwLmFkZF9hcmd1bWVudCgiLS1zeW1ib2xzLXBhdGgiLCBhY3Rp
b249InN0b3JlIiwgdHlwZT11cmxfb3JfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGhlbHA9IlBhdGggb3IgdXJsIHRvIHN5bWJvbHMgZmlsZSB1c2VkIHRvIGFuYWx5c2Ug
Y3Jhc2ggbWluaWR1bXBzLiIpCisgICAgZGVidWdnaW5nX2dyb3VwLmFkZF9hcmd1bWVudCgiLS1z
dGFja3dhbGstYmluYXJ5IiwgYWN0aW9uPSJzdG9yZSIsIHR5cGU9YWJzX3BhdGgsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJQYXRoIHRvIHN0YWNrd2Fsa2VyIHByb2dy
YW0gdXNlZCB0byBhbmFseXNlIG1pbmlkdW1wcy4iKQorCisgICAgZGVidWdnaW5nX2dyb3VwLmFk
ZF9hcmd1bWVudCgiLS1wZGIiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaGVscD0iRHJvcCBpbnRvIHBkYiBvbiBweXRob24gZXhjZXB0aW9u
IikKKworICAgIGNvbmZpZ19ncm91cCA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoIkNvbmZp
Z3VyYXRpb24iKQorICAgIGNvbmZpZ19ncm91cC5hZGRfYXJndW1lbnQoIi0tYmluYXJ5IiwgYWN0
aW9uPSJzdG9yZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPWFic19wYXRo
LCBoZWxwPSJCaW5hcnkgdG8gcnVuIHRlc3RzIGFnYWluc3QiKQorICAgIGNvbmZpZ19ncm91cC5h
ZGRfYXJndW1lbnQoJy0tYmluYXJ5LWFyZycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZWZhdWx0PVtdLCBhY3Rpb249ImFwcGVuZCIsIGRlc3Q9ImJpbmFyeV9hcmdzIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkV4dHJhIGFyZ3VtZW50IGZvciB0aGUgYmlu
YXJ5IikKKyAgICBjb25maWdfZ3JvdXAuYWRkX2FyZ3VtZW50KCItLXdlYmRyaXZlci1iaW5hcnki
LCBhY3Rpb249InN0b3JlIiwgbWV0YXZhcj0iQklOQVJZIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHR5cGU9YWJzX3BhdGgsIGhlbHA9IldlYkRyaXZlciBzZXJ2ZXIgYmluYXJ5IHRv
IHVzZSIpCisgICAgY29uZmlnX2dyb3VwLmFkZF9hcmd1bWVudCgnLS13ZWJkcml2ZXItYXJnJywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9W10sIGFjdGlvbj0iYXBwZW5k
IiwgZGVzdD0id2ViZHJpdmVyX2FyZ3MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aGVscD0iRXh0cmEgYXJndW1lbnQgZm9yIHRoZSBXZWJEcml2ZXIgYmluYXJ5IikKKworICAgIGNv
bmZpZ19ncm91cC5hZGRfYXJndW1lbnQoIi0tbWV0YWRhdGEiLCBhY3Rpb249InN0b3JlIiwgdHlw
ZT1hYnNfcGF0aCwgZGVzdD0ibWV0YWRhdGFfcm9vdCIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBoZWxwPSJQYXRoIHRvIHJvb3QgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGVzdCBtZXRh
ZGF0YSIpLAorICAgIGNvbmZpZ19ncm91cC5hZGRfYXJndW1lbnQoIi0tdGVzdHMiLCBhY3Rpb249
InN0b3JlIiwgdHlwZT1hYnNfcGF0aCwgZGVzdD0idGVzdHNfcm9vdCIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBoZWxwPSJQYXRoIHRvIHJvb3QgZGlyZWN0b3J5IGNvbnRhaW5pbmcg
dGVzdCBmaWxlcyIpLAorICAgIGNvbmZpZ19ncm91cC5hZGRfYXJndW1lbnQoIi0tcnVuLWluZm8i
LCBhY3Rpb249InN0b3JlIiwgdHlwZT1hYnNfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGhlbHA9IlBhdGggdG8gZGlyZWN0b3J5IGNvbnRhaW5pbmcgZXh0cmEganNvbiBmaWxl
cyB0byBhZGQgdG8gcnVuIGluZm8iKQorICAgIGNvbmZpZ19ncm91cC5hZGRfYXJndW1lbnQoIi0t
cHJvZHVjdCIsIGFjdGlvbj0ic3RvcmUiLCBjaG9pY2VzPXByb2R1Y3RfY2hvaWNlcywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Tm9uZSwgaGVscD0iQnJvd3NlciBhZ2Fp
bnN0IHdoaWNoIHRvIHJ1biB0ZXN0cyIpCisgICAgY29uZmlnX2dyb3VwLmFkZF9hcmd1bWVudCgi
LS1jb25maWciLCBhY3Rpb249InN0b3JlIiwgdHlwZT1hYnNfcGF0aCwgZGVzdD0iY29uZmlnIiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlBhdGggdG8gY29uZmlnIGZpbGUi
KQorCisgICAgYnVpbGRfdHlwZSA9IHBhcnNlci5hZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3Vw
KCkKKyAgICBidWlsZF90eXBlLmFkZF9hcmd1bWVudCgiLS1kZWJ1Zy1idWlsZCIsIGRlc3Q9ImRl
YnVnIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
ZWZhdWx0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iQnVpbGQgaXMg
YSBkZWJ1ZyBidWlsZCAob3ZlcnJpZGVzIGFueSBtb3ppbmZvIGZpbGUpIikKKyAgICBidWlsZF90
eXBlLmFkZF9hcmd1bWVudCgiLS1yZWxlYXNlLWJ1aWxkIiwgZGVzdD0iZGVidWciLCBhY3Rpb249
InN0b3JlX2ZhbHNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PU5vbmUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iQnVpbGQgaXMgYSByZWxlYXNlIChv
dmVycmlkZXMgYW55IG1vemluZm8gZmlsZSkiKQorCisKKyAgICBjaHVua2luZ19ncm91cCA9IHBh
cnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoIlRlc3QgQ2h1bmtpbmciKQorICAgIGNodW5raW5nX2dy
b3VwLmFkZF9hcmd1bWVudCgiLS10b3RhbC1jaHVua3MiLCBhY3Rpb249InN0b3JlIiwgdHlwZT1p
bnQsIGRlZmF1bHQ9MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iVG90
YWwgbnVtYmVyIG9mIGNodW5rcyB0byB1c2UiKQorICAgIGNodW5raW5nX2dyb3VwLmFkZF9hcmd1
bWVudCgiLS10aGlzLWNodW5rIiwgYWN0aW9uPSJzdG9yZSIsIHR5cGU9aW50LCBkZWZhdWx0PTEs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkNodW5rIG51bWJlciB0byBy
dW4iKQorICAgIGNodW5raW5nX2dyb3VwLmFkZF9hcmd1bWVudCgiLS1jaHVuay10eXBlIiwgYWN0
aW9uPSJzdG9yZSIsIGNob2ljZXM9WyJub25lIiwgImVxdWFsX3RpbWUiLCAiaGFzaCIsICJkaXJf
aGFzaCJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PU5vbmUsIGhl
bHA9IkNodW5raW5nIHR5cGUgdG8gdXNlIikKKworICAgIHNzbF9ncm91cCA9IHBhcnNlci5hZGRf
YXJndW1lbnRfZ3JvdXAoIlNTTC9UTFMiKQorICAgIHNzbF9ncm91cC5hZGRfYXJndW1lbnQoIi0t
c3NsLXR5cGUiLCBhY3Rpb249InN0b3JlIiwgZGVmYXVsdD1Ob25lLAorICAgICAgICAgICAgICAg
ICAgICAgICAgY2hvaWNlcz1bIm9wZW5zc2wiLCAicHJlZ2VuZXJhdGVkIiwgIm5vbmUiXSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlR5cGUgb2Ygc3NsIHN1cHBvcnQgdG8gZW5hYmxl
IChydW5uaW5nIHdpdGhvdXQgc3NsIG1heSBsZWFkIHRvIHNwdXJpb3VzIGVycm9ycykiKQorCisg
ICAgc3NsX2dyb3VwLmFkZF9hcmd1bWVudCgiLS1vcGVuc3NsLWJpbmFyeSIsIGFjdGlvbj0ic3Rv
cmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iUGF0aCB0byBvcGVuc3NsIGJpbmFy
eSIsIGRlZmF1bHQ9Im9wZW5zc2wiKQorICAgIHNzbF9ncm91cC5hZGRfYXJndW1lbnQoIi0tY2Vy
dHV0aWwtYmluYXJ5IiwgYWN0aW9uPSJzdG9yZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBo
ZWxwPSJQYXRoIHRvIGNlcnR1dGlsIGJpbmFyeSBmb3IgdXNlIHdpdGggRmlyZWZveCArIHNzbCIp
CisKKyAgICBzc2xfZ3JvdXAuYWRkX2FyZ3VtZW50KCItLWNhLWNlcnQtcGF0aCIsIGFjdGlvbj0i
c3RvcmUiLCB0eXBlPWFic19wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iUGF0
aCB0byBjYSBjZXJ0aWZpY2F0ZSB3aGVuIHVzaW5nIHByZWdlbmVyYXRlZCBzc2wgY2VydGlmaWNh
dGVzIikKKyAgICBzc2xfZ3JvdXAuYWRkX2FyZ3VtZW50KCItLWhvc3Qta2V5LXBhdGgiLCBhY3Rp
b249InN0b3JlIiwgdHlwZT1hYnNfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9
IlBhdGggdG8gaG9zdCBwcml2YXRlIGtleSB3aGVuIHVzaW5nIHByZWdlbmVyYXRlZCBzc2wgY2Vy
dGlmaWNhdGVzIikKKyAgICBzc2xfZ3JvdXAuYWRkX2FyZ3VtZW50KCItLWhvc3QtY2VydC1wYXRo
IiwgYWN0aW9uPSJzdG9yZSIsIHR5cGU9YWJzX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAg
ICBoZWxwPSJQYXRoIHRvIGhvc3QgY2VydGlmaWNhdGUgd2hlbiB1c2luZyBwcmVnZW5lcmF0ZWQg
c3NsIGNlcnRpZmljYXRlcyIpCisKKyAgICBnZWNrb19ncm91cCA9IHBhcnNlci5hZGRfYXJndW1l
bnRfZ3JvdXAoIkdlY2tvLXNwZWNpZmljIikKKyAgICBnZWNrb19ncm91cC5hZGRfYXJndW1lbnQo
Ii0tcHJlZnMtcm9vdCIsIGRlc3Q9InByZWZzX3Jvb3QiLCBhY3Rpb249InN0b3JlIiwgdHlwZT1h
YnNfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iUGF0aCB0byB0aGUg
Zm9sZGVyIGNvbnRhaW5pbmcgYnJvd3NlciBwcmVmcyIpCisgICAgZ2Vja29fZ3JvdXAuYWRkX2Fy
Z3VtZW50KCItLWRpc2FibGUtZTEwcyIsIGRlc3Q9ImdlY2tvX2UxMHMiLCBhY3Rpb249InN0b3Jl
X2ZhbHNlIiwgZGVmYXVsdD1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxw
PSJSdW4gdGVzdHMgd2l0aG91dCBlbGVjdHJvbHlzaXMgcHJlZmVyZW5jZXMiKQorICAgIGdlY2tv
X2dyb3VwLmFkZF9hcmd1bWVudCgiLS1zdGFja2ZpeC1kaXIiLCBkZXN0PSJzdGFja2ZpeF9kaXIi
LCBhY3Rpb249InN0b3JlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iUGF0
aCB0byBkaXJlY3RvcnkgY29udGFpbmluZyBhc3NlcnRpb24gc3RhY2sgZml4aW5nIHNjcmlwdHMi
KQorICAgIGdlY2tvX2dyb3VwLmFkZF9hcmd1bWVudCgiLS1zZXRwcmVmIiwgZGVzdD0iZXh0cmFf
cHJlZnMiLCBhY3Rpb249J2FwcGVuZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ9W10sIG1ldGF2YXI9IlBSRUY9VkFMVUUiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBoZWxwPSJEZWZpbmVzIGFuIGV4dHJhIHVzZXIgcHJlZmVyZW5jZSAob3ZlcnJpZGVzIHRo
b3NlIGluIHByZWZzX3Jvb3QpIikKKyAgICBnZWNrb19ncm91cC5hZGRfYXJndW1lbnQoIi0tbGVh
ay1jaGVjayIsIGRlc3Q9ImxlYWtfY2hlY2siLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJFbmFibGUgbGVhayBjaGVja2luZyIpCisgICAg
Z2Vja29fZ3JvdXAuYWRkX2FyZ3VtZW50KCItLXN0eWxvLXRocmVhZHMiLCBhY3Rpb249InN0b3Jl
IiwgdHlwZT1pbnQsIGRlZmF1bHQ9MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVs
cD0iTnVtYmVyIG9mIHBhcmFsbGVsIHRocmVhZHMgdG8gdXNlIGZvciBzdHlsbyIpCisgICAgZ2Vj
a29fZ3JvdXAuYWRkX2FyZ3VtZW50KCItLXJlZnRlc3QtaW50ZXJuYWwiLCBkZXN0PSJyZWZ0ZXN0
X2ludGVybmFsIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGVmYXVsdD1Ob25lLCBoZWxwPSJFbmFibGUgcmVmdGVzdCBydW5uZXIgaW1wbGVtZW50
ZWQgaW5zaWRlIE1hcmlvbmV0dGUiKQorICAgIGdlY2tvX2dyb3VwLmFkZF9hcmd1bWVudCgiLS1y
ZWZ0ZXN0LWV4dGVybmFsIiwgZGVzdD0icmVmdGVzdF9pbnRlcm5hbCIsIGFjdGlvbj0ic3RvcmVf
ZmFsc2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJEaXNhYmxlIHJlZnRl
c3QgcnVubmVyIGltcGxlbWVudGVkIGluc2lkZSBNYXJpb25ldHRlIikKKyAgICBnZWNrb19ncm91
cC5hZGRfYXJndW1lbnQoIi0tcmVmdGVzdC1zY3JlZW5zaG90IiwgZGVzdD0icmVmdGVzdF9zY3Jl
ZW5zaG90IiwgYWN0aW9uPSJzdG9yZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo
b2ljZXM9WyJhbHdheXMiLCAiZmFpbCIsICJ1bmV4cGVjdGVkIl0sIGRlZmF1bHQ9InVuZXhwZWN0
ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJXaXRoIC0tcmVmdGVzdC1p
bnRlcm5hbCwgd2hlbiB0byB0YWtlIGEgc2NyZWVuc2hvdCIpCisKKyAgICBzZXJ2b19ncm91cCA9
IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoIlNlcnZvLXNwZWNpZmljIikKKyAgICBzZXJ2b19n
cm91cC5hZGRfYXJndW1lbnQoIi0tdXNlci1zdHlsZXNoZWV0IiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGVmYXVsdD1bXSwgYWN0aW9uPSJhcHBlbmQiLCBkZXN0PSJ1c2VyX3N0eWxl
c2hlZXRzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iSW5qZWN0IGEgdXNl
ciBDU1Mgc3R5bGVzaGVldCBpbnRvIGV2ZXJ5IHRlc3QuIikKKworICAgIHNhdWNlX2dyb3VwID0g
cGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cCgiU2F1Y2UgTGFicy1zcGVjaWZpYyIpCisgICAgc2F1
Y2VfZ3JvdXAuYWRkX2FyZ3VtZW50KCItLXNhdWNlLWJyb3dzZXIiLCBkZXN0PSJzYXVjZV9icm93
c2VyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iU2F1Y2UgTGFicyBicm93
c2VyIG5hbWUiKQorICAgIHNhdWNlX2dyb3VwLmFkZF9hcmd1bWVudCgiLS1zYXVjZS1wbGF0Zm9y
bSIsIGRlc3Q9InNhdWNlX3BsYXRmb3JtIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aGVscD0iU2F1Y2UgTGFicyBPUyBwbGF0Zm9ybSIpCisgICAgc2F1Y2VfZ3JvdXAuYWRkX2FyZ3Vt
ZW50KCItLXNhdWNlLXZlcnNpb24iLCBkZXN0PSJzYXVjZV92ZXJzaW9uIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaGVscD0iU2F1Y2UgTGFicyBicm93c2VyIHZlcnNpb24iKQorICAg
IHNhdWNlX2dyb3VwLmFkZF9hcmd1bWVudCgiLS1zYXVjZS1idWlsZCIsIGRlc3Q9InNhdWNlX2J1
aWxkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iU2F1Y2UgTGFicyBidWls
ZCBpZGVudGlmaWVyIikKKyAgICBzYXVjZV9ncm91cC5hZGRfYXJndW1lbnQoIi0tc2F1Y2UtdGFn
cyIsIGRlc3Q9InNhdWNlX3RhZ3MiLCBuYXJncz0iKiIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGhlbHA9IlNhdWNlIExhYnMgaWRlbnRpZnlpbmcgdGFnIiwgZGVmYXVsdD1bXSkKKyAg
ICBzYXVjZV9ncm91cC5hZGRfYXJndW1lbnQoIi0tc2F1Y2UtdHVubmVsLWlkIiwgZGVzdD0ic2F1
Y2VfdHVubmVsX2lkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iU2F1Y2Ug
Q29ubmVjdCB0dW5uZWwgaWRlbnRpZmllciIpCisgICAgc2F1Y2VfZ3JvdXAuYWRkX2FyZ3VtZW50
KCItLXNhdWNlLXVzZXIiLCBkZXN0PSJzYXVjZV91c2VyIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaGVscD0iU2F1Y2UgTGFicyB1c2VyIG5hbWUiKQorICAgIHNhdWNlX2dyb3VwLmFk
ZF9hcmd1bWVudCgiLS1zYXVjZS1rZXkiLCBkZXN0PSJzYXVjZV9rZXkiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkZWZhdWx0PW9zLmVudmlyb24uZ2V0KCJTQVVDRV9BQ0NFU1NfS0VZ
IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlNhdWNlIExhYnMgYWNjZXNz
IGtleSIpCisgICAgc2F1Y2VfZ3JvdXAuYWRkX2FyZ3VtZW50KCItLXNhdWNlLWNvbm5lY3QtYmlu
YXJ5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdD0ic2F1Y2VfY29ubmVjdF9i
aW5hcnkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJQYXRoIHRvIFNhdWNl
IENvbm5lY3QgYmluYXJ5IikKKworICAgIHBhcnNlci5hZGRfYXJndW1lbnQoInRlc3RfbGlzdCIs
IG5hcmdzPSIqIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9Ikxpc3Qgb2YgVVJMcyBm
b3IgdGVzdHMgdG8gcnVuLCBvciBwYXRocyBpbmNsdWRpbmcgdGVzdHMgdG8gcnVuLiAiCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICIoZXF1aXZhbGVudCB0byAtLWluY2x1ZGUpIikKKwor
ICAgIGNvbW1hbmRsaW5lLmxvZ19mb3JtYXR0ZXJzWyJ3cHRyZXBvcnQiXSA9IChmb3JtYXR0ZXJz
LldwdHJlcG9ydEZvcm1hdHRlciwgIndwdHJlcG9ydCBmb3JtYXQiKQorCisgICAgY29tbWFuZGxp
bmUuYWRkX2xvZ2dpbmdfZ3JvdXAocGFyc2VyKQorICAgIHJldHVybiBwYXJzZXIKKworCitkZWYg
c2V0X2Zyb21fY29uZmlnKGt3YXJncyk6CisgICAgaWYga3dhcmdzWyJjb25maWciXSBpcyBOb25l
OgorICAgICAgICBjb25maWdfcGF0aCA9IGNvbmZpZy5wYXRoKCkKKyAgICBlbHNlOgorICAgICAg
ICBjb25maWdfcGF0aCA9IGt3YXJnc1siY29uZmlnIl0KKworICAgIGt3YXJnc1siY29uZmlnX3Bh
dGgiXSA9IGNvbmZpZ19wYXRoCisKKyAgICBrd2FyZ3NbImNvbmZpZyJdID0gY29uZmlnLnJlYWQo
a3dhcmdzWyJjb25maWdfcGF0aCJdKQorCisgICAga2V5cyA9IHsicGF0aHMiOiBbKCJwcmVmcyIs
ICJwcmVmc19yb290IiwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgKCJydW5faW5mbyIs
ICJydW5faW5mbyIsIFRydWUpXSwKKyAgICAgICAgICAgICJ3ZWItcGxhdGZvcm0tdGVzdHMiOiBb
KCJyZW1vdGVfdXJsIiwgInJlbW90ZV91cmwiLCBGYWxzZSksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICgiYnJhbmNoIiwgImJyYW5jaCIsIEZhbHNlKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKCJzeW5jX3BhdGgiLCAic3luY19wYXRoIiwgVHJ1ZSld
LAorICAgICAgICAgICAgIlNTTCI6IFsoIm9wZW5zc2xfYmluYXJ5IiwgIm9wZW5zc2xfYmluYXJ5
IiwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICgiY2VydHV0aWxfYmluYXJ5IiwgImNlcnR1
dGlsX2JpbmFyeSIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAoImNhX2NlcnRfcGF0aCIs
ICJjYV9jZXJ0X3BhdGgiLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgKCJob3N0X2NlcnRf
cGF0aCIsICJob3N0X2NlcnRfcGF0aCIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAoImhv
c3Rfa2V5X3BhdGgiLCAiaG9zdF9rZXlfcGF0aCIsIFRydWUpXX0KKworICAgIGZvciBzZWN0aW9u
LCB2YWx1ZXMgaW4ga2V5cy5pdGVyaXRlbXMoKToKKyAgICAgICAgZm9yIGNvbmZpZ192YWx1ZSwg
a3dfdmFsdWUsIGlzX3BhdGggaW4gdmFsdWVzOgorICAgICAgICAgICAgaWYga3dfdmFsdWUgaW4g
a3dhcmdzIGFuZCBrd2FyZ3Nba3dfdmFsdWVdIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgaWYg
bm90IGlzX3BhdGg6CisgICAgICAgICAgICAgICAgICAgIG5ld192YWx1ZSA9IGt3YXJnc1siY29u
ZmlnIl0uZ2V0KHNlY3Rpb24sIGNvbmZpZy5Db25maWdEaWN0KHt9KSkuZ2V0KGNvbmZpZ192YWx1
ZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBuZXdfdmFsdWUg
PSBrd2FyZ3NbImNvbmZpZyJdLmdldChzZWN0aW9uLCBjb25maWcuQ29uZmlnRGljdCh7fSkpLmdl
dF9wYXRoKGNvbmZpZ192YWx1ZSkKKyAgICAgICAgICAgICAgICBrd2FyZ3Nba3dfdmFsdWVdID0g
bmV3X3ZhbHVlCisKKyAgICBrd2FyZ3NbInRlc3RfcGF0aHMiXSA9IGdldF90ZXN0X3BhdGhzKGt3
YXJnc1siY29uZmlnIl0pCisKKyAgICBpZiBrd2FyZ3NbInRlc3RzX3Jvb3QiXToKKyAgICAgICAg
aWYgIi8iIG5vdCBpbiBrd2FyZ3NbInRlc3RfcGF0aHMiXToKKyAgICAgICAgICAgIGt3YXJnc1si
dGVzdF9wYXRocyJdWyIvIl0gPSB7fQorICAgICAgICBrd2FyZ3NbInRlc3RfcGF0aHMiXVsiLyJd
WyJ0ZXN0c19wYXRoIl0gPSBrd2FyZ3NbInRlc3RzX3Jvb3QiXQorCisgICAgaWYga3dhcmdzWyJt
ZXRhZGF0YV9yb290Il06CisgICAgICAgIGlmICIvIiBub3QgaW4ga3dhcmdzWyJ0ZXN0X3BhdGhz
Il06CisgICAgICAgICAgICBrd2FyZ3NbInRlc3RfcGF0aHMiXVsiLyJdID0ge30KKyAgICAgICAg
a3dhcmdzWyJ0ZXN0X3BhdGhzIl1bIi8iXVsibWV0YWRhdGFfcGF0aCJdID0ga3dhcmdzWyJtZXRh
ZGF0YV9yb290Il0KKworICAgIGt3YXJnc1sic3VpdGVfbmFtZSJdID0ga3dhcmdzWyJjb25maWci
XS5nZXQoIndlYi1wbGF0Zm9ybS10ZXN0cyIsIHt9KS5nZXQoIm5hbWUiLCAid2ViLXBsYXRmb3Jt
LXRlc3RzIikKKworCitkZWYgZ2V0X3Rlc3RfcGF0aHMoY29uZmlnKToKKyAgICAjIFNldCB1cCB0
ZXN0X3BhdGhzCisgICAgdGVzdF9wYXRocyA9IE9yZGVyZWREaWN0KCkKKworICAgIGZvciBzZWN0
aW9uIGluIGNvbmZpZy5pdGVya2V5cygpOgorICAgICAgICBpZiBzZWN0aW9uLnN0YXJ0c3dpdGgo
Im1hbmlmZXN0OiIpOgorICAgICAgICAgICAgbWFuaWZlc3Rfb3B0cyA9IGNvbmZpZy5nZXQoc2Vj
dGlvbikKKyAgICAgICAgICAgIHVybF9iYXNlID0gbWFuaWZlc3Rfb3B0cy5nZXQoInVybF9iYXNl
IiwgIi8iKQorICAgICAgICAgICAgdGVzdF9wYXRoc1t1cmxfYmFzZV0gPSB7CisgICAgICAgICAg
ICAgICAgInRlc3RzX3BhdGgiOiBtYW5pZmVzdF9vcHRzLmdldF9wYXRoKCJ0ZXN0cyIpLAorICAg
ICAgICAgICAgICAgICJtZXRhZGF0YV9wYXRoIjogbWFuaWZlc3Rfb3B0cy5nZXRfcGF0aCgibWV0
YWRhdGEiKX0KKworICAgIHJldHVybiB0ZXN0X3BhdGhzCisKKworZGVmIGV4ZV9wYXRoKG5hbWUp
OgorICAgIGlmIG5hbWUgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuCisKKyAgICBwYXRoID0gZmlu
ZF9leGVjdXRhYmxlKG5hbWUpCisgICAgaWYgb3MuYWNjZXNzKHBhdGgsIG9zLlhfT0spOgorICAg
ICAgICByZXR1cm4gcGF0aAorCisKK2RlZiBjaGVja19hcmdzKGt3YXJncyk6CisgICAgc2V0X2Zy
b21fY29uZmlnKGt3YXJncykKKworICAgIGZvciB0ZXN0X3BhdGhzIGluIGt3YXJnc1sidGVzdF9w
YXRocyJdLml0ZXJ2YWx1ZXMoKToKKyAgICAgICAgaWYgbm90ICgidGVzdHNfcGF0aCIgaW4gdGVz
dF9wYXRocyBhbmQKKyAgICAgICAgICAgICAgICAibWV0YWRhdGFfcGF0aCIgaW4gdGVzdF9wYXRo
cyk6CisgICAgICAgICAgICBwcmludCAiRmF0YWw6IG11c3Qgc3BlY2lmeSBib3RoIGEgdGVzdCBw
YXRoIGFuZCBtZXRhZGF0YSBwYXRoIgorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAg
Zm9yIGtleSwgcGF0aCBpbiB0ZXN0X3BhdGhzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgbmFt
ZSA9IGtleS5zcGxpdCgiXyIsIDEpWzBdCisKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4
aXN0cyhwYXRoKToKKyAgICAgICAgICAgICAgICBwcmludCAiRmF0YWw6ICVzIHBhdGggJXMgZG9l
cyBub3QgZXhpc3QiICUgKG5hbWUsIHBhdGgpCisgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkK
KworICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIocGF0aCk6CisgICAgICAgICAgICAg
ICAgcHJpbnQgIkZhdGFsOiAlcyBwYXRoICVzIGlzIG5vdCBhIGRpcmVjdG9yeSIgJSAobmFtZSwg
cGF0aCkKKyAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgaWYga3dhcmdzWyJwcm9k
dWN0Il0gaXMgTm9uZToKKyAgICAgICAga3dhcmdzWyJwcm9kdWN0Il0gPSAiZmlyZWZveCIKKwor
ICAgIGlmICJzYXVjZSIgaW4ga3dhcmdzWyJwcm9kdWN0Il06CisgICAgICAgIGt3YXJnc1sicGF1
c2VfYWZ0ZXJfdGVzdCJdID0gRmFsc2UKKworICAgIGlmIGt3YXJnc1sidGVzdF9saXN0Il06Cisg
ICAgICAgIGlmIGt3YXJnc1siaW5jbHVkZSJdIGlzIG5vdCBOb25lOgorICAgICAgICAgICAga3dh
cmdzWyJpbmNsdWRlIl0uZXh0ZW5kKGt3YXJnc1sidGVzdF9saXN0Il0pCisgICAgICAgIGVsc2U6
CisgICAgICAgICAgICBrd2FyZ3NbImluY2x1ZGUiXSA9IGt3YXJnc1sidGVzdF9saXN0Il0KKwor
ICAgIGlmIGt3YXJnc1sicnVuX2luZm8iXSBpcyBOb25lOgorICAgICAgICBrd2FyZ3NbInJ1bl9p
bmZvIl0gPSBrd2FyZ3NbImNvbmZpZ19wYXRoIl0KKworICAgIGlmIGt3YXJnc1sidGhpc19jaHVu
ayJdID4gMToKKyAgICAgICAgcmVxdWlyZV9hcmcoa3dhcmdzLCAidG90YWxfY2h1bmtzIiwgbGFt
YmRhIHg6IHggPj0ga3dhcmdzWyJ0aGlzX2NodW5rIl0pCisKKyAgICBpZiBrd2FyZ3NbImNodW5r
X3R5cGUiXSBpcyBOb25lOgorICAgICAgICBpZiBrd2FyZ3NbInRvdGFsX2NodW5rcyJdID4gMToK
KyAgICAgICAgICAgIGt3YXJnc1siY2h1bmtfdHlwZSJdID0gImRpcl9oYXNoIgorICAgICAgICBl
bHNlOgorICAgICAgICAgICAga3dhcmdzWyJjaHVua190eXBlIl0gPSAibm9uZSIKKworICAgIGlm
IGt3YXJnc1sicHJvY2Vzc2VzIl0gaXMgTm9uZToKKyAgICAgICAga3dhcmdzWyJwcm9jZXNzZXMi
XSA9IDEKKworICAgIGlmIGt3YXJnc1siZGVidWdnZXIiXSBpcyBub3QgTm9uZToKKyAgICAgICAg
aW1wb3J0IG1vemRlYnVnCisgICAgICAgIGlmIGt3YXJnc1siZGVidWdnZXIiXSA9PSAiX19kZWZh
dWx0X18iOgorICAgICAgICAgICAga3dhcmdzWyJkZWJ1Z2dlciJdID0gbW96ZGVidWcuZ2V0X2Rl
ZmF1bHRfZGVidWdnZXJfbmFtZSgpCisgICAgICAgIGRlYnVnX2luZm8gPSBtb3pkZWJ1Zy5nZXRf
ZGVidWdnZXJfaW5mbyhrd2FyZ3NbImRlYnVnZ2VyIl0sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBrd2FyZ3NbImRlYnVnZ2VyX2FyZ3MiXSkKKyAgICAg
ICAgaWYgZGVidWdfaW5mbyBhbmQgZGVidWdfaW5mby5pbnRlcmFjdGl2ZToKKyAgICAgICAgICAg
IGlmIGt3YXJnc1sicHJvY2Vzc2VzIl0gIT0gMToKKyAgICAgICAgICAgICAgICBrd2FyZ3NbInBy
b2Nlc3NlcyJdID0gMQorICAgICAgICAgICAga3dhcmdzWyJub19jYXB0dXJlX3N0ZGlvIl0gPSBU
cnVlCisgICAgICAgIGt3YXJnc1siZGVidWdfaW5mbyJdID0gZGVidWdfaW5mbworICAgIGVsc2U6
CisgICAgICAgIGt3YXJnc1siZGVidWdfaW5mbyJdID0gTm9uZQorCisgICAgaWYga3dhcmdzWyJi
aW5hcnkiXSBpcyBub3QgTm9uZToKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGt3YXJn
c1siYmluYXJ5Il0pOgorICAgICAgICAgICAgcHJpbnQgPj4gc3lzLnN0ZGVyciwgIkJpbmFyeSBw
YXRoICVzIGRvZXMgbm90IGV4aXN0IiAlIGt3YXJnc1siYmluYXJ5Il0KKyAgICAgICAgICAgIHN5
cy5leGl0KDEpCisKKyAgICBpZiBrd2FyZ3NbInNzbF90eXBlIl0gaXMgTm9uZToKKyAgICAgICAg
aWYgTm9uZSBub3QgaW4gKGt3YXJnc1siY2FfY2VydF9wYXRoIl0sIGt3YXJnc1siaG9zdF9jZXJ0
X3BhdGgiXSwga3dhcmdzWyJob3N0X2tleV9wYXRoIl0pOgorICAgICAgICAgICAga3dhcmdzWyJz
c2xfdHlwZSJdID0gInByZWdlbmVyYXRlZCIKKyAgICAgICAgZWxpZiBleGVfcGF0aChrd2FyZ3Nb
Im9wZW5zc2xfYmluYXJ5Il0pIGlzIG5vdCBOb25lOgorICAgICAgICAgICAga3dhcmdzWyJzc2xf
dHlwZSJdID0gIm9wZW5zc2wiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBrd2FyZ3NbInNz
bF90eXBlIl0gPSAibm9uZSIKKworICAgIGlmIGt3YXJnc1sic3NsX3R5cGUiXSA9PSAicHJlZ2Vu
ZXJhdGVkIjoKKyAgICAgICAgcmVxdWlyZV9hcmcoa3dhcmdzLCAiY2FfY2VydF9wYXRoIiwgbGFt
YmRhIHg6b3MucGF0aC5leGlzdHMoeCkpCisgICAgICAgIHJlcXVpcmVfYXJnKGt3YXJncywgImhv
c3RfY2VydF9wYXRoIiwgbGFtYmRhIHg6b3MucGF0aC5leGlzdHMoeCkpCisgICAgICAgIHJlcXVp
cmVfYXJnKGt3YXJncywgImhvc3Rfa2V5X3BhdGgiLCBsYW1iZGEgeDpvcy5wYXRoLmV4aXN0cyh4
KSkKKworICAgIGVsaWYga3dhcmdzWyJzc2xfdHlwZSJdID09ICJvcGVuc3NsIjoKKyAgICAgICAg
cGF0aCA9IGV4ZV9wYXRoKGt3YXJnc1sib3BlbnNzbF9iaW5hcnkiXSkKKyAgICAgICAgaWYgcGF0
aCBpcyBOb25lOgorICAgICAgICAgICAgcHJpbnQgPj4gc3lzLnN0ZGVyciwgIm9wZW5zc2wtYmlu
YXJ5IGFyZ3VtZW50IG1pc3Npbmcgb3Igbm90IGEgdmFsaWQgZXhlY3V0YWJsZSIKKyAgICAgICAg
ICAgIHN5cy5leGl0KDEpCisgICAgICAgIGt3YXJnc1sib3BlbnNzbF9iaW5hcnkiXSA9IHBhdGgK
KworICAgIGlmIGt3YXJnc1sic3NsX3R5cGUiXSAhPSAibm9uZSIgYW5kIGt3YXJnc1sicHJvZHVj
dCJdID09ICJmaXJlZm94IjoKKyAgICAgICAgcGF0aCA9IGV4ZV9wYXRoKGt3YXJnc1siY2VydHV0
aWxfYmluYXJ5Il0pCisgICAgICAgIGlmIHBhdGggaXMgTm9uZToKKyAgICAgICAgICAgIHByaW50
ID4+IHN5cy5zdGRlcnIsICJjZXJ0dXRpbC1iaW5hcnkgYXJndW1lbnQgbWlzc2luZyBvciBub3Qg
YSB2YWxpZCBleGVjdXRhYmxlIgorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAga3dh
cmdzWyJjZXJ0dXRpbF9iaW5hcnkiXSA9IHBhdGgKKworICAgIGlmIGt3YXJnc1snZXh0cmFfcHJl
ZnMnXToKKyAgICAgICAgbWlzc2luZyA9IGFueSgnPScgbm90IGluIHByZWZhcmcgZm9yIHByZWZh
cmcgaW4ga3dhcmdzWydleHRyYV9wcmVmcyddKQorICAgICAgICBpZiBtaXNzaW5nOgorICAgICAg
ICAgICAgcHJpbnQgPj4gc3lzLnN0ZGVyciwgIlByZWZlcmVuY2VzIHZpYSAtLXNldHByZWYgbXVz
dCBiZSBpbiBrZXk9dmFsdWUgZm9ybWF0IgorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAg
ICAga3dhcmdzWydleHRyYV9wcmVmcyddID0gW3R1cGxlKHByZWZhcmcuc3BsaXQoJz0nLCAxKSkg
Zm9yIHByZWZhcmcgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3YXJnc1sn
ZXh0cmFfcHJlZnMnXV0KKworICAgIGlmIGt3YXJnc1sicmVmdGVzdF9pbnRlcm5hbCJdIGlzIE5v
bmU6CisgICAgICAgICMgRGVmYXVsdCB0byB0aGUgaW50ZXJuYWwgcmVmdGVzdCBpbXBsZW1lbnRh
dGlvbiBvbiBMaW51eCBhbmQgT1NYCisgICAgICAgIGt3YXJnc1sicmVmdGVzdF9pbnRlcm5hbCJd
ID0gc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoImxpbnV4Iikgb3Igc3lzLnBsYXRmb3JtLnN0YXJ0
c3dpdGgoImRhcndpbiIpCisKKyAgICByZXR1cm4ga3dhcmdzCisKKworZGVmIGNoZWNrX2FyZ3Nf
dXBkYXRlKGt3YXJncyk6CisgICAgc2V0X2Zyb21fY29uZmlnKGt3YXJncykKKworICAgIGlmIGt3
YXJnc1sicHJvZHVjdCJdIGlzIE5vbmU6CisgICAgICAgIGt3YXJnc1sicHJvZHVjdCJdID0gImZp
cmVmb3giCisgICAgaWYga3dhcmdzWyJwYXRjaCJdIGlzIE5vbmU6CisgICAgICAgIGt3YXJnc1si
cGF0Y2giXSA9IGt3YXJnc1sic3luYyJdCisKKyAgICBmb3IgaXRlbSBpbiBrd2FyZ3NbInJ1bl9s
b2ciXToKKyAgICAgICAgaWYgb3MucGF0aC5pc2RpcihpdGVtKToKKyAgICAgICAgICAgIHByaW50
ID4+IHN5cy5zdGRlcnIsICJMb2cgZmlsZSAlcyBpcyBhIGRpcmVjdG9yeSIgJSBpdGVtCisgICAg
ICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgcmV0dXJuIGt3YXJncworCisKK2RlZiBjcmVhdGVf
cGFyc2VyX3VwZGF0ZShwcm9kdWN0X2Nob2ljZXM9Tm9uZSk6CisgICAgZnJvbSBtb3psb2cuc3Ry
dWN0dXJlZCBpbXBvcnQgY29tbWFuZGxpbmUKKworICAgIGltcG9ydCBwcm9kdWN0cworCisgICAg
aWYgcHJvZHVjdF9jaG9pY2VzIGlzIE5vbmU6CisgICAgICAgIGNvbmZpZ19kYXRhID0gY29uZmln
LmxvYWQoKQorICAgICAgICBwcm9kdWN0X2Nob2ljZXMgPSBwcm9kdWN0cy5wcm9kdWN0c19lbmFi
bGVkKGNvbmZpZ19kYXRhKQorCisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIo
IndlYi1wbGF0Zm9ybS10ZXN0cy11cGRhdGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlc2NyaXB0aW9uPSJVcGRhdGUgc2NyaXB0IGZvciB3ZWItcGxhdGZvcm0tdGVz
dHMgdGVzdHMuIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItLXByb2R1Y3QiLCBhY3Rpb249
InN0b3JlIiwgY2hvaWNlcz1wcm9kdWN0X2Nob2ljZXMsCisgICAgICAgICAgICAgICAgICAgICAg
ICBkZWZhdWx0PU5vbmUsIGhlbHA9IkJyb3dzZXIgZm9yIHdoaWNoIG1ldGFkYXRhIGlzIGJlaW5n
IHVwZGF0ZWQiKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi0tY29uZmlnIiwgYWN0aW9uPSJz
dG9yZSIsIHR5cGU9YWJzX3BhdGgsIGhlbHA9IlBhdGggdG8gY29uZmlnIGZpbGUiKQorICAgIHBh
cnNlci5hZGRfYXJndW1lbnQoIi0tbWV0YWRhdGEiLCBhY3Rpb249InN0b3JlIiwgdHlwZT1hYnNf
cGF0aCwgZGVzdD0ibWV0YWRhdGFfcm9vdCIsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxw
PSJQYXRoIHRvIHRoZSBmb2xkZXIgY29udGFpbmluZyB0ZXN0IG1ldGFkYXRhIiksCisgICAgcGFy
c2VyLmFkZF9hcmd1bWVudCgiLS10ZXN0cyIsIGFjdGlvbj0ic3RvcmUiLCB0eXBlPWFic19wYXRo
LCBkZXN0PSJ0ZXN0c19yb290IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlBhdGgg
dG8gd2ViLXBsYXRmb3JtLXRlc3RzIiksCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLS1zeW5j
LXBhdGgiLCBhY3Rpb249InN0b3JlIiwgdHlwZT1hYnNfcGF0aCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGhlbHA9IlBhdGggdG8gc3RvcmUgZ2l0IGNoZWNrb3V0IG9mIHdlYi1wbGF0Zm9ybS10
ZXN0cyBkdXJpbmcgdXBkYXRlIiksCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLS1yZW1vdGVf
dXJsIiwgYWN0aW9uPSJzdG9yZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJVUkwg
b2Ygd2ViLXBsYXRmcm9tLXRlc3RzIHJlcG9zaXRvcnkgdG8gc3luYyBhZ2FpbnN0IiksCisgICAg
cGFyc2VyLmFkZF9hcmd1bWVudCgiLS1icmFuY2giLCBhY3Rpb249InN0b3JlIiwgdHlwZT1hYnNf
cGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlJlbW90ZSBicmFuY2ggdG8gc3lu
YyBhZ2FpbnN0IikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItLXJldiIsIGFjdGlvbj0ic3Rv
cmUiLCBoZWxwPSJSZXZpc2lvbiB0byBzeW5jIHRvIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50
KCItLXBhdGNoIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0icGF0Y2giLCBkZWZhdWx0PU5v
bmUsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJDcmVhdGUgYSBWQ1MgY29tbWl0IGNv
bnRhaW5pbmcgdGhlIGNoYW5nZXMuIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItLW5vLXBh
dGNoIiwgYWN0aW9uPSJzdG9yZV9mYWxzZSIsIGRlc3Q9InBhdGNoIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGhlbHA9IkRvbid0IGNyZWF0ZSBhIFZDUyBjb21taXQgY29udGFpbmluZyB0aGUg
Y2hhbmdlcy4iKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi0tc3luYyIsIGRlc3Q9InN5bmMi
LCBhY3Rpb249InN0b3JlX3RydWUiLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgaGVscD0iU3luYyB0aGUgdGVzdHMgd2l0aCB0aGUgbGF0ZXN0IGZyb20gdXBzdHJlYW0g
KGltcGxpZXMgLS1wYXRjaCkiKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi0taWdub3JlLWV4
aXN0aW5nIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgaGVscD0iV2hlbiB1cGRhdGluZyB0ZXN0IHJl
c3VsdHMgb25seSBjb25zaWRlciByZXN1bHRzIGZyb20gdGhlIGxvZ2ZpbGVzIHByb3ZpZGVkLCBu
b3QgZXhpc3RpbmcgZXhwZWN0YXRpb25zLiIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLS1j
b250aW51ZSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9IkNvbnRpbnVlIGEgcHJldmlvdXNs
eSBzdGFydGVkIHJ1biBvZiB0aGUgdXBkYXRlIHNjcmlwdCIpCisgICAgcGFyc2VyLmFkZF9hcmd1
bWVudCgiLS1hYm9ydCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9IkNsZWFyIHN0YXRlIGZy
b20gYSBwcmV2aW91cyBpbmNvbXBsZXRlIHJ1biBvZiB0aGUgdXBkYXRlIHNjcmlwdCIpCisgICAg
cGFyc2VyLmFkZF9hcmd1bWVudCgiLS1leGNsdWRlIiwgYWN0aW9uPSJzdG9yZSIsIG5hcmdzPSIq
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9Ikxpc3Qgb2YgZ2xvYi1zdHlsZSBwYXRo
cyB0byBleGNsdWRlIHdoZW4gc3luY2luZyB0ZXN0cyIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVu
dCgiLS1pbmNsdWRlIiwgYWN0aW9uPSJzdG9yZSIsIG5hcmdzPSIqIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGhlbHA9Ikxpc3Qgb2YgZ2xvYi1zdHlsZSBwYXRocyB0byBpbmNsdWRlIHdoaWNo
IHdvdWxkIG90aGVyd2lzZSBiZSBleGNsdWRlZCB3aGVuIHN5bmNpbmcgdGVzdHMiKQorICAgICMg
U2hvdWxkIG1ha2UgdGhpcyByZXF1aXJlZCBpZmYgcnVuPWxvZ2ZpbGUKKyAgICBwYXJzZXIuYWRk
X2FyZ3VtZW50KCJydW5fbG9nIiwgbmFyZ3M9IioiLCB0eXBlPWFic19wYXRoLAorICAgICAgICAg
ICAgICAgICAgICAgICAgaGVscD0iTG9nIGZpbGUgZnJvbSBydW4gb2YgdGVzdHMiKQorICAgIGNv
bW1hbmRsaW5lLmFkZF9sb2dnaW5nX2dyb3VwKHBhcnNlcikKKyAgICByZXR1cm4gcGFyc2VyCisK
KworZGVmIGNyZWF0ZV9wYXJzZXJfcmVkdWNlKHByb2R1Y3RfY2hvaWNlcz1Ob25lKToKKyAgICBw
YXJzZXIgPSBjcmVhdGVfcGFyc2VyKHByb2R1Y3RfY2hvaWNlcykKKyAgICBwYXJzZXIuYWRkX2Fy
Z3VtZW50KCJ0YXJnZXQiLCBhY3Rpb249InN0b3JlIiwgaGVscD0iVGVzdCBpZCB0aGF0IGlzIHVu
c3RhYmxlIikKKyAgICByZXR1cm4gcGFyc2VyCisKKworZGVmIHBhcnNlX2FyZ3MoKToKKyAgICBw
YXJzZXIgPSBjcmVhdGVfcGFyc2VyKCkKKyAgICBydiA9IHZhcnMocGFyc2VyLnBhcnNlX2FyZ3Mo
KSkKKyAgICBjaGVja19hcmdzKHJ2KQorICAgIHJldHVybiBydgorCisKK2RlZiBwYXJzZV9hcmdz
X3VwZGF0ZSgpOgorICAgIHBhcnNlciA9IGNyZWF0ZV9wYXJzZXJfdXBkYXRlKCkKKyAgICBydiA9
IHZhcnMocGFyc2VyLnBhcnNlX2FyZ3MoKSkKKyAgICBjaGVja19hcmdzX3VwZGF0ZShydikKKyAg
ICByZXR1cm4gcnYKKworCitkZWYgcGFyc2VfYXJnc19yZWR1Y2UoKToKKyAgICBwYXJzZXIgPSBj
cmVhdGVfcGFyc2VyX3JlZHVjZSgpCisgICAgcnYgPSB2YXJzKHBhcnNlci5wYXJzZV9hcmdzKCkp
CisgICAgY2hlY2tfYXJncyhydikKKyAgICByZXR1cm4gcnYKZGlmZiAtLWdpdCBhL1dlYkRyaXZl
clRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3dwdGxvZ2dpbmcu
cHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5l
ci93cHRsb2dnaW5nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4x
YWI2NzU1YzQzNQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3cz
Yy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3dwdGxvZ2dpbmcucHkKQEAgLTAsMCArMSwxMjEg
QEAKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgc3lzCitpbXBvcnQgdGhyZWFkaW5nCitmcm9tIFN0
cmluZ0lPIGltcG9ydCBTdHJpbmdJTworZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFF1ZXVl
CisKK2Zyb20gbW96bG9nIGltcG9ydCBjb21tYW5kbGluZSwgc3RkYWRhcHRlcgorCitkZWYgc2V0
dXAoYXJncywgZGVmYXVsdHMpOgorICAgIGxvZ2dlciA9IGNvbW1hbmRsaW5lLnNldHVwX2xvZ2dp
bmcoIndlYi1wbGF0Zm9ybS10ZXN0cyIsIGFyZ3MsIGRlZmF1bHRzKQorICAgIHNldHVwX3N0ZGxp
Yl9sb2dnZXIoKQorCisgICAgZm9yIG5hbWUgaW4gYXJncy5rZXlzKCk6CisgICAgICAgIGlmIG5h
bWUuc3RhcnRzd2l0aCgibG9nXyIpOgorICAgICAgICAgICAgYXJncy5wb3AobmFtZSkKKworICAg
IHJldHVybiBsb2dnZXIKKworCitkZWYgc2V0dXBfc3RkbGliX2xvZ2dlcigpOgorICAgIGxvZ2dp
bmcucm9vdC5oYW5kbGVycyA9IFtdCisgICAgbG9nZ2luZy5yb290ID0gc3RkYWRhcHRlci5zdGRf
bG9nZ2luZ19hZGFwdGVyKGxvZ2dpbmcucm9vdCkKKworCitjbGFzcyBMb2dMZXZlbFJld3JpdGVy
KG9iamVjdCk6CisgICAgIiIiRmlsdGVyIHRoYXQgcmVwbGFjZXMgbG9nIG1lc3NhZ2VzIGF0IHNw
ZWNpZmllZCBsZXZlbHMgd2l0aCBtZXNzYWdlcworICAgIGF0IGEgZGlmZmVyZW50IGxldmVsLgor
CisgICAgVGhpcyBjYW4gYmUgdXNlZCB0byBlLmcuIGRvd25ncmFkZSBsb2cgbWVzc2FnZXMgZnJv
bSBFUlJPUiB0byBXQVJOSU5HCisgICAgaW4gc29tZSBjb21wb25lbnQgd2hlcmUgRVJST1JzIGFy
ZSBub3QgY3JpdGljYWwuCisKKyAgICA6cGFyYW0gaW5uZXI6IEhhbmRsZXIgdG8gdXNlIGZvciBt
ZXNzYWdlcyB0aGF0IHBhc3MgdGhpcyBmaWx0ZXIKKyAgICA6cGFyYW0gZnJvbV9sZXZlbHM6IExp
c3Qgb2YgbGV2ZWxzIHdoaWNoIHNob3VsZCBiZSBhZmZlY3RlZAorICAgIDpwYXJhbSB0b19sZXZl
bDogTG9nIGxldmVsIHRvIHNldCBmb3IgdGhlIGFmZmVjdGVkIG1lc3NhZ2VzCisgICAgIiIiCisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIGlubmVyLCBmcm9tX2xldmVscywgdG9fbGV2ZWwpOgorICAg
ICAgICBzZWxmLmlubmVyID0gaW5uZXIKKyAgICAgICAgc2VsZi5mcm9tX2xldmVscyA9IFtpdGVt
LnVwcGVyKCkgZm9yIGl0ZW0gaW4gZnJvbV9sZXZlbHNdCisgICAgICAgIHNlbGYudG9fbGV2ZWwg
PSB0b19sZXZlbC51cHBlcigpCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgZGF0YSk6CisgICAg
ICAgIGlmIGRhdGFbImFjdGlvbiJdID09ICJsb2ciIGFuZCBkYXRhWyJsZXZlbCJdLnVwcGVyKCkg
aW4gc2VsZi5mcm9tX2xldmVsczoKKyAgICAgICAgICAgIGRhdGEgPSBkYXRhLmNvcHkoKQorICAg
ICAgICAgICAgZGF0YVsibGV2ZWwiXSA9IHNlbGYudG9fbGV2ZWwKKyAgICAgICAgcmV0dXJuIHNl
bGYuaW5uZXIoZGF0YSkKKworCisKK2NsYXNzIExvZ1RocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgcXVldWUsIGxvZ2dlciwgbGV2ZWwpOgorICAgICAgICBz
ZWxmLnF1ZXVlID0gcXVldWUKKyAgICAgICAgc2VsZi5sb2dfZnVuYyA9IGdldGF0dHIobG9nZ2Vy
LCBsZXZlbCkKKyAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyhzZWxmLCBuYW1lPSJU
aHJlYWQtTG9nIikKKyAgICAgICAgc2VsZi5kYWVtb24gPSBUcnVlCisKKyAgICBkZWYgcnVuKHNl
bGYpOgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAg
ICAgIG1zZyA9IHNlbGYucXVldWUuZ2V0KCkKKyAgICAgICAgICAgIGV4Y2VwdCAoRU9GRXJyb3Is
IElPRXJyb3IpOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBtc2cgaXMg
Tm9uZToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgICAgICBzZWxmLmxvZ19mdW5jKG1zZykKKworCitjbGFzcyBMb2dnaW5nV3JhcHBlcihTdHJp
bmdJTyk6CisgICAgIiIiV3JhcHBlciBmb3IgZmlsZSBsaWtlIG9iamVjdHMgdG8gcmVkaXJlY3Qg
b3V0cHV0IHRvIGxvZ2dlcgorICAgIGluc3RlYWQiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBxdWV1ZSwgcHJlZml4PU5vbmUpOgorICAgICAgICBTdHJpbmdJTy5fX2luaXRfXyhzZWxmKQor
ICAgICAgICBzZWxmLnF1ZXVlID0gcXVldWUKKyAgICAgICAgc2VsZi5wcmVmaXggPSBwcmVmaXgK
KworICAgIGRlZiB3cml0ZShzZWxmLCBkYXRhKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShkYXRh
LCBzdHIpOgorICAgICAgICAgICAgZGF0YSA9IGRhdGEuZGVjb2RlKCJ1dGY4IikKKworICAgICAg
ICBpZiBkYXRhLmVuZHN3aXRoKCJcbiIpOgorICAgICAgICAgICAgZGF0YSA9IGRhdGFbOi0xXQor
ICAgICAgICBpZiBkYXRhLmVuZHN3aXRoKCJcciIpOgorICAgICAgICAgICAgZGF0YSA9IGRhdGFb
Oi0xXQorICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBp
ZiBzZWxmLnByZWZpeCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGRhdGEgPSAiJXM6ICVzIiAl
IChzZWxmLnByZWZpeCwgZGF0YSkKKyAgICAgICAgc2VsZi5xdWV1ZS5wdXQoZGF0YSkKKworICAg
IGRlZiBmbHVzaChzZWxmKToKKyAgICAgICAgcGFzcworCisKK2NsYXNzIENhcHR1cmVJTyhvYmpl
Y3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2dnZXIsIGRvX2NhcHR1cmUpOgorICAgICAg
ICBzZWxmLmxvZ2dlciA9IGxvZ2dlcgorICAgICAgICBzZWxmLmRvX2NhcHR1cmUgPSBkb19jYXB0
dXJlCisgICAgICAgIHNlbGYubG9nZ2luZ19xdWV1ZSA9IE5vbmUKKyAgICAgICAgc2VsZi5sb2dn
aW5nX3RocmVhZCA9IE5vbmUKKyAgICAgICAgc2VsZi5vcmlnaW5hbF9zdGRpbyA9IE5vbmUKKwor
ICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIGlmIHNlbGYuZG9fY2FwdHVyZToKKyAg
ICAgICAgICAgIHNlbGYub3JpZ2luYWxfc3RkaW8gPSAoc3lzLnN0ZG91dCwgc3lzLnN0ZGVycikK
KyAgICAgICAgICAgIHNlbGYubG9nZ2luZ19xdWV1ZSA9IFF1ZXVlKCkKKyAgICAgICAgICAgIHNl
bGYubG9nZ2luZ190aHJlYWQgPSBMb2dUaHJlYWQoc2VsZi5sb2dnaW5nX3F1ZXVlLCBzZWxmLmxv
Z2dlciwgImluZm8iKQorICAgICAgICAgICAgc3lzLnN0ZG91dCA9IExvZ2dpbmdXcmFwcGVyKHNl
bGYubG9nZ2luZ19xdWV1ZSwgcHJlZml4PSJTVERPVVQiKQorICAgICAgICAgICAgc3lzLnN0ZGVy
ciA9IExvZ2dpbmdXcmFwcGVyKHNlbGYubG9nZ2luZ19xdWV1ZSwgcHJlZml4PSJTVERFUlIiKQor
ICAgICAgICAgICAgc2VsZi5sb2dnaW5nX3RocmVhZC5zdGFydCgpCisKKyAgICBkZWYgX19leGl0
X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgaWYgc2VsZi5kb19jYXB0dXJlOgor
ICAgICAgICAgICAgc3lzLnN0ZG91dCwgc3lzLnN0ZGVyciA9IHNlbGYub3JpZ2luYWxfc3RkaW8K
KyAgICAgICAgICAgIGlmIHNlbGYubG9nZ2luZ19xdWV1ZSBpcyBub3QgTm9uZToKKyAgICAgICAg
ICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKCJDbG9zaW5nIGxvZ2dpbmcgcXVldWUiKQorICAgICAg
ICAgICAgICAgIHNlbGYubG9nZ2luZ19xdWV1ZS5wdXQoTm9uZSkKKyAgICAgICAgICAgICAgICBp
ZiBzZWxmLmxvZ2dpbmdfdGhyZWFkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBz
ZWxmLmxvZ2dpbmdfdGhyZWFkLmpvaW4oMTApCisgICAgICAgICAgICAgICAgc2VsZi5sb2dnaW5n
X3F1ZXVlLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKCJxdWV1ZSBj
bG9zZWQiKQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dw
dHJ1bm5lci93cHRydW5uZXIvd3B0bWFuaWZlc3QvX19pbml0X18ucHkgYi9XZWJEcml2ZXJUZXN0
cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci93cHRtYW5pZmVzdC9fX2lu
aXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNmI2NDc4NGM3
ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMv
d3B0cnVubmVyL3dwdHJ1bm5lci93cHRtYW5pZmVzdC9fX2luaXRfXy5weQpAQCAtMCwwICsxLDQg
QEAKK2Zyb20gc2VyaWFsaXplciBpbXBvcnQgc2VyaWFsaXplCitmcm9tIHBhcnNlciBpbXBvcnQg
cGFyc2UKK2Zyb20gYmFja2VuZHMuc3RhdGljIGltcG9ydCBjb21waWxlIGFzIGNvbXBpbGVfc3Rh
dGljCitmcm9tIGJhY2tlbmRzLmNvbmRpdGlvbmFsIGltcG9ydCBjb21waWxlIGFzIGNvbXBpbGVf
Y29uZGl0aW9uCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMv
d3B0cnVubmVyL3dwdHJ1bm5lci93cHRtYW5pZmVzdC9iYWNrZW5kcy9fX2luaXRfXy5weSBiL1dl
YkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3dwdG1h
bmlmZXN0L2JhY2tlbmRzL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi5lNjlkZTI5YmIyZApkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0
ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvd3B0bWFuaWZlc3QvYmFja2VuZHMvY29u
ZGl0aW9uYWwucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVy
L3dwdHJ1bm5lci93cHRtYW5pZmVzdC9iYWNrZW5kcy9jb25kaXRpb25hbC5weQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNjI5ZDAxZDcxNTgKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5l
ci93cHRtYW5pZmVzdC9iYWNrZW5kcy9jb25kaXRpb25hbC5weQpAQCAtMCwwICsxLDMzMiBAQAor
aW1wb3J0IG9wZXJhdG9yCisKK2Zyb20gLi5ub2RlIGltcG9ydCBOb2RlVmlzaXRvciwgRGF0YU5v
ZGUsIENvbmRpdGlvbmFsTm9kZSwgS2V5VmFsdWVOb2RlLCBMaXN0Tm9kZSwgVmFsdWVOb2RlCitm
cm9tIC4ucGFyc2VyIGltcG9ydCBwYXJzZQorCisKK2NsYXNzIENvbmRpdGlvbmFsVmFsdWUob2Jq
ZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbm9kZSwgY29uZGl0aW9uX2Z1bmMpOgorICAg
ICAgICBzZWxmLm5vZGUgPSBub2RlCisgICAgICAgIHNlbGYuY29uZGl0aW9uX2Z1bmMgPSBjb25k
aXRpb25fZnVuYworICAgICAgICBpZiBpc2luc3RhbmNlKG5vZGUsIENvbmRpdGlvbmFsTm9kZSk6
CisgICAgICAgICAgICBhc3NlcnQgbGVuKG5vZGUuY2hpbGRyZW4pID09IDIKKyAgICAgICAgICAg
IHNlbGYuY29uZGl0aW9uX25vZGUgPSBzZWxmLm5vZGUuY2hpbGRyZW5bMF0KKyAgICAgICAgICAg
IHNlbGYudmFsdWVfbm9kZSA9IHNlbGYubm9kZS5jaGlsZHJlblsxXQorICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2Uobm9kZSwgKFZhbHVlTm9kZSwgTGlzdE5vZGUp
KQorICAgICAgICAgICAgc2VsZi5jb25kaXRpb25fbm9kZSA9IE5vbmUKKyAgICAgICAgICAgIHNl
bGYudmFsdWVfbm9kZSA9IHNlbGYubm9kZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHZhbHVl
KHNlbGYpOgorICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYudmFsdWVfbm9kZSwgVmFsdWVOb2Rl
KToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlX25vZGUuZGF0YQorICAgICAgICBlbHNl
OgorICAgICAgICAgICAgcmV0dXJuIFtpdGVtLmRhdGEgZm9yIGl0ZW0gaW4gc2VsZi52YWx1ZV9u
b2RlLmNoaWxkcmVuXQorCisgICAgQHZhbHVlLnNldHRlcgorICAgIGRlZiB2YWx1ZShzZWxmLCB2
YWx1ZSk6CisgICAgICAgIHNlbGYudmFsdWVfbm9kZS5kYXRhID0gdmFsdWUKKworICAgIGRlZiBf
X2NhbGxfXyhzZWxmLCBydW5faW5mbyk6CisgICAgICAgIHJldHVybiBzZWxmLmNvbmRpdGlvbl9m
dW5jKHJ1bl9pbmZvKQorCisgICAgZGVmIHNldF92YWx1ZShzZWxmLCB2YWx1ZSk6CisgICAgICAg
IHNlbGYudmFsdWUgPSB2YWx1ZQorCisgICAgZGVmIHJlbW92ZShzZWxmKToKKyAgICAgICAgaWYg
bGVuKHNlbGYubm9kZS5wYXJlbnQuY2hpbGRyZW4pID09IDE6CisgICAgICAgICAgICBzZWxmLm5v
ZGUucGFyZW50LnJlbW92ZSgpCisgICAgICAgIHNlbGYubm9kZS5yZW1vdmUoKQorCisKK2NsYXNz
IENvbXBpbGVyKE5vZGVWaXNpdG9yKToKKyAgICBkZWYgY29tcGlsZShzZWxmLCB0cmVlLCBkYXRh
X2Nsc19nZXR0ZXI9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICAiIiJDb21waWxlIGEgcmF3IEFT
VCBpbnRvIGEgZm9ybSB3aGVyZSBjb25kaXRpb25hbCBleHByZXNzaW9ucworICAgICAgICBhcmUg
cmVwcmVzZW50ZWQgYnkgQ29uZGl0aW9uYWxWYWx1ZSBvYmplY3RzIHRoYXQgY2FuIGJlIGV2YWx1
YXRlZAorICAgICAgICBhdCBydW50aW1lLgorCisgICAgICAgIHRyZWUgLSBUaGUgcm9vdCBub2Rl
IG9mIHRoZSB3cHRtYW5pZmVzdCBBU1QgdG8gY29tcGlsZQorCisgICAgICAgIGRhdGFfY2xzX2dl
dHRlciAtIEEgZnVuY3Rpb24gdGFraW5nIHR3byBwYXJhbWV0ZXJzOyB0aGUgcHJldmlvdXMKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IG5vZGUgYW5kIHRoZSBjdXJyZW50IGFzdCBu
b2RlIGFuZCByZXR1cm5pbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNsYXNzIG9m
IHRoZSBvdXRwdXQgbm9kZSB0byB1c2UgZm9yIHRoZSBjdXJyZW50CisgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFzdCBub2RlCisgICAgICAgICIiIgorICAgICAgICBpZiBkYXRhX2Nsc19nZXR0
ZXIgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuZGF0YV9jbHNfZ2V0dGVyID0gbGFtYmRhIHgs
IHk6IE1hbmlmZXN0SXRlbQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5kYXRhX2Ns
c19nZXR0ZXIgPSBkYXRhX2Nsc19nZXR0ZXIKKworICAgICAgICBzZWxmLnRyZWUgPSB0cmVlCisg
ICAgICAgIHNlbGYub3V0cHV0X25vZGUgPSBzZWxmLl9pbml0aWFsX291dHB1dF9ub2RlKHRyZWUs
ICoqa3dhcmdzKQorICAgICAgICBzZWxmLnZpc2l0KHRyZWUpCisgICAgICAgIGlmIGhhc2F0dHIo
c2VsZi5vdXRwdXRfbm9kZSwgInNldF9kZWZhdWx0cyIpOgorICAgICAgICAgICAgc2VsZi5vdXRw
dXRfbm9kZS5zZXRfZGVmYXVsdHMoKQorICAgICAgICBhc3NlcnQgc2VsZi5vdXRwdXRfbm9kZSBp
cyBub3QgTm9uZQorICAgICAgICByZXR1cm4gc2VsZi5vdXRwdXRfbm9kZQorCisgICAgZGVmIGNv
bXBpbGVfY29uZGl0aW9uKHNlbGYsIGNvbmRpdGlvbik6CisgICAgICAgICIiIkNvbXBpbGUgYSBD
b25kaXRpb25hbE5vZGUgaW50byBhIENvbmRpdGlvbmFsVmFsdWUuCisKKyAgICAgICAgY29uZGl0
aW9uOiBBIENvbmRpdGlvbmFsTm9kZSIiIgorICAgICAgICBkYXRhX25vZGUgPSBEYXRhTm9kZSgp
CisgICAgICAgIGtleV92YWx1ZV9ub2RlID0gS2V5VmFsdWVOb2RlKCkKKyAgICAgICAga2V5X3Zh
bHVlX25vZGUuYXBwZW5kKGNvbmRpdGlvbi5jb3B5KCkpCisgICAgICAgIGRhdGFfbm9kZS5hcHBl
bmQoa2V5X3ZhbHVlX25vZGUpCisgICAgICAgIG1hbmlmZXN0X2l0ZW0gPSBzZWxmLmNvbXBpbGUo
ZGF0YV9ub2RlKQorICAgICAgICByZXR1cm4gbWFuaWZlc3RfaXRlbS5fZGF0YVtOb25lXVswXQor
CisgICAgZGVmIF9pbml0aWFsX291dHB1dF9ub2RlKHNlbGYsIG5vZGUsICoqa3dhcmdzKToKKyAg
ICAgICAgcmV0dXJuIHNlbGYuZGF0YV9jbHNfZ2V0dGVyKE5vbmUsIE5vbmUpKG5vZGUsICoqa3dh
cmdzKQorCisgICAgZGVmIHZpc2l0X0RhdGFOb2RlKHNlbGYsIG5vZGUpOgorICAgICAgICBpZiBu
b2RlICE9IHNlbGYudHJlZToKKyAgICAgICAgICAgIG91dHB1dF9wYXJlbnQgPSBzZWxmLm91dHB1
dF9ub2RlCisgICAgICAgICAgICBzZWxmLm91dHB1dF9ub2RlID0gc2VsZi5kYXRhX2Nsc19nZXR0
ZXIoc2VsZi5vdXRwdXRfbm9kZSwgbm9kZSkobm9kZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgIG91dHB1dF9wYXJlbnQgPSBOb25lCisKKyAgICAgICAgYXNzZXJ0IHNlbGYub3V0cHV0X25v
ZGUgaXMgbm90IE5vbmUKKworICAgICAgICBmb3IgY2hpbGQgaW4gbm9kZS5jaGlsZHJlbjoKKyAg
ICAgICAgICAgIHNlbGYudmlzaXQoY2hpbGQpCisKKyAgICAgICAgaWYgb3V0cHV0X3BhcmVudCBp
cyBub3QgTm9uZToKKyAgICAgICAgICAgICMgQXBwZW5kIHRvIHRoZSBwYXJlbnQgKmFmdGVyKiBw
cm9jZXNzaW5nIGFsbCB0aGUgbm9kZSBkYXRhCisgICAgICAgICAgICBvdXRwdXRfcGFyZW50LmFw
cGVuZChzZWxmLm91dHB1dF9ub2RlKQorICAgICAgICAgICAgc2VsZi5vdXRwdXRfbm9kZSA9IHNl
bGYub3V0cHV0X25vZGUucGFyZW50CisKKyAgICAgICAgYXNzZXJ0IHNlbGYub3V0cHV0X25vZGUg
aXMgbm90IE5vbmUKKworICAgIGRlZiB2aXNpdF9LZXlWYWx1ZU5vZGUoc2VsZiwgbm9kZSk6Cisg
ICAgICAgIGtleV92YWx1ZXMgPSBbXQorICAgICAgICBmb3IgY2hpbGQgaW4gbm9kZS5jaGlsZHJl
bjoKKyAgICAgICAgICAgIGNvbmRpdGlvbiwgdmFsdWUgPSBzZWxmLnZpc2l0KGNoaWxkKQorICAg
ICAgICAgICAga2V5X3ZhbHVlcy5hcHBlbmQoQ29uZGl0aW9uYWxWYWx1ZShjaGlsZCwgY29uZGl0
aW9uKSkKKworICAgICAgICBzZWxmLm91dHB1dF9ub2RlLl9hZGRfa2V5X3ZhbHVlKG5vZGUsIGtl
eV92YWx1ZXMpCisKKyAgICBkZWYgdmlzaXRfTGlzdE5vZGUoc2VsZiwgbm9kZSk6CisgICAgICAg
IHJldHVybiAobGFtYmRhIHg6VHJ1ZSwgW3NlbGYudmlzaXQoY2hpbGQpIGZvciBjaGlsZCBpbiBu
b2RlLmNoaWxkcmVuXSkKKworICAgIGRlZiB2aXNpdF9WYWx1ZU5vZGUoc2VsZiwgbm9kZSk6Cisg
ICAgICAgIHJldHVybiAobGFtYmRhIHg6IFRydWUsIG5vZGUuZGF0YSkKKworICAgIGRlZiB2aXNp
dF9BdG9tTm9kZShzZWxmLCBub2RlKToKKyAgICAgICAgcmV0dXJuIChsYW1iZGEgeDogVHJ1ZSwg
bm9kZS5kYXRhKQorCisgICAgZGVmIHZpc2l0X0NvbmRpdGlvbmFsTm9kZShzZWxmLCBub2RlKToK
KyAgICAgICAgcmV0dXJuIHNlbGYudmlzaXQobm9kZS5jaGlsZHJlblswXSksIHNlbGYudmlzaXQo
bm9kZS5jaGlsZHJlblsxXSkKKworICAgIGRlZiB2aXNpdF9TdHJpbmdOb2RlKHNlbGYsIG5vZGUp
OgorICAgICAgICBpbmRleGVzID0gW3NlbGYudmlzaXQoY2hpbGQpIGZvciBjaGlsZCBpbiBub2Rl
LmNoaWxkcmVuXQorCisgICAgICAgIGRlZiB2YWx1ZSh4KToKKyAgICAgICAgICAgIHJ2ID0gbm9k
ZS5kYXRhCisgICAgICAgICAgICBmb3IgaW5kZXggaW4gaW5kZXhlczoKKyAgICAgICAgICAgICAg
ICBydiA9IHJ2W2luZGV4KHgpXQorICAgICAgICAgICAgcmV0dXJuIHJ2CisgICAgICAgIHJldHVy
biB2YWx1ZQorCisgICAgZGVmIHZpc2l0X051bWJlck5vZGUoc2VsZiwgbm9kZSk6CisgICAgICAg
IGlmICIuIiBpbiBub2RlLmRhdGE6CisgICAgICAgICAgICByZXR1cm4gbGFtYmRhIHg6IGZsb2F0
KG5vZGUuZGF0YSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBsYW1iZGEgeDog
aW50KG5vZGUuZGF0YSkKKworICAgIGRlZiB2aXNpdF9WYXJpYWJsZU5vZGUoc2VsZiwgbm9kZSk6
CisgICAgICAgIGluZGV4ZXMgPSBbc2VsZi52aXNpdChjaGlsZCkgZm9yIGNoaWxkIGluIG5vZGUu
Y2hpbGRyZW5dCisKKyAgICAgICAgZGVmIHZhbHVlKHgpOgorICAgICAgICAgICAgZGF0YSA9IHhb
bm9kZS5kYXRhXQorICAgICAgICAgICAgZm9yIGluZGV4IGluIGluZGV4ZXM6CisgICAgICAgICAg
ICAgICAgZGF0YSA9IGRhdGFbaW5kZXgoeCldCisgICAgICAgICAgICByZXR1cm4gZGF0YQorICAg
ICAgICByZXR1cm4gdmFsdWUKKworICAgIGRlZiB2aXNpdF9JbmRleE5vZGUoc2VsZiwgbm9kZSk6
CisgICAgICAgIGFzc2VydCBsZW4obm9kZS5jaGlsZHJlbikgPT0gMQorICAgICAgICByZXR1cm4g
c2VsZi52aXNpdChub2RlLmNoaWxkcmVuWzBdKQorCisgICAgZGVmIHZpc2l0X1VuYXJ5RXhwcmVz
c2lvbk5vZGUoc2VsZiwgbm9kZSk6CisgICAgICAgIGFzc2VydCBsZW4obm9kZS5jaGlsZHJlbikg
PT0gMgorICAgICAgICBvcGVyYXRvciA9IHNlbGYudmlzaXQobm9kZS5jaGlsZHJlblswXSkKKyAg
ICAgICAgb3BlcmFuZCA9IHNlbGYudmlzaXQobm9kZS5jaGlsZHJlblsxXSkKKworICAgICAgICBy
ZXR1cm4gbGFtYmRhIHg6IG9wZXJhdG9yKG9wZXJhbmQoeCkpCisKKyAgICBkZWYgdmlzaXRfQmlu
YXJ5RXhwcmVzc2lvbk5vZGUoc2VsZiwgbm9kZSk6CisgICAgICAgIGFzc2VydCBsZW4obm9kZS5j
aGlsZHJlbikgPT0gMworICAgICAgICBvcGVyYXRvciA9IHNlbGYudmlzaXQobm9kZS5jaGlsZHJl
blswXSkKKyAgICAgICAgb3BlcmFuZF8wID0gc2VsZi52aXNpdChub2RlLmNoaWxkcmVuWzFdKQor
ICAgICAgICBvcGVyYW5kXzEgPSBzZWxmLnZpc2l0KG5vZGUuY2hpbGRyZW5bMl0pCisKKyAgICAg
ICAgYXNzZXJ0IG9wZXJhbmRfMCBpcyBub3QgTm9uZQorICAgICAgICBhc3NlcnQgb3BlcmFuZF8x
IGlzIG5vdCBOb25lCisKKyAgICAgICAgcmV0dXJuIGxhbWJkYSB4OiBvcGVyYXRvcihvcGVyYW5k
XzAoeCksIG9wZXJhbmRfMSh4KSkKKworICAgIGRlZiB2aXNpdF9VbmFyeU9wZXJhdG9yTm9kZShz
ZWxmLCBub2RlKToKKyAgICAgICAgcmV0dXJuIHsibm90Ijogb3BlcmF0b3Iubm90X31bbm9kZS5k
YXRhXQorCisgICAgZGVmIHZpc2l0X0JpbmFyeU9wZXJhdG9yTm9kZShzZWxmLCBub2RlKToKKyAg
ICAgICAgcmV0dXJuIHsiYW5kIjogb3BlcmF0b3IuYW5kXywKKyAgICAgICAgICAgICAgICAib3Ii
OiBvcGVyYXRvci5vcl8sCisgICAgICAgICAgICAgICAgIj09Ijogb3BlcmF0b3IuZXEsCisgICAg
ICAgICAgICAgICAgIiE9Ijogb3BlcmF0b3IubmV9W25vZGUuZGF0YV0KKworCitjbGFzcyBNYW5p
ZmVzdEl0ZW0ob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbm9kZT1Ob25lLCAqKmt3
YXJncyk6CisgICAgICAgIHNlbGYubm9kZSA9IG5vZGUKKyAgICAgICAgc2VsZi5wYXJlbnQgPSBO
b25lCisgICAgICAgIHNlbGYuY2hpbGRyZW4gPSBbXQorICAgICAgICBzZWxmLl9kYXRhID0ge30K
KworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICI8TWFuaWZlc3RJdGVt
ICVzPiIgJSAoc2VsZi5ub2RlLmRhdGEpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAg
ICAgcnYgPSBbcmVwcihzZWxmKV0KKyAgICAgICAgZm9yIGl0ZW0gaW4gc2VsZi5jaGlsZHJlbjoK
KyAgICAgICAgICAgIHJ2LmV4dGVuZCgiICAlcyIgJSBsaW5lIGZvciBsaW5lIGluIHN0cihpdGVt
KS5zcGxpdCgiXG4iKSkKKyAgICAgICAgcmV0dXJuICJcbiIuam9pbihydikKKworICAgIGRlZiBf
X2NvbnRhaW5zX18oc2VsZiwga2V5KToKKyAgICAgICAgcmV0dXJuIGtleSBpbiBzZWxmLl9kYXRh
CisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaXNfZW1wdHkoc2VsZik6CisgICAgICAgIGlmIHNl
bGYuX2RhdGE6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIGFsbChj
aGlsZC5pc19lbXB0eSBmb3IgY2hpbGQgaW4gc2VsZi5jaGlsZHJlbikKKworICAgIEBwcm9wZXJ0
eQorICAgIGRlZiByb290KHNlbGYpOgorICAgICAgICBub2RlID0gc2VsZgorICAgICAgICB3aGls
ZSBub2RlLnBhcmVudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIG5vZGUgPSBub2RlLnBhcmVu
dAorICAgICAgICByZXR1cm4gbm9kZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIG5hbWUoc2Vs
Zik6CisgICAgICAgIHJldHVybiBzZWxmLm5vZGUuZGF0YQorCisgICAgZGVmIGhhc19rZXkoc2Vs
Ziwga2V5KToKKyAgICAgICAgZm9yIG5vZGUgaW4gW3NlbGYsIHNlbGYucm9vdF06CisgICAgICAg
ICAgICBpZiBrZXkgaW4gbm9kZS5fZGF0YToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQor
ICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBnZXQoc2VsZiwga2V5LCBydW5faW5mbz1O
b25lKToKKyAgICAgICAgaWYgcnVuX2luZm8gaXMgTm9uZToKKyAgICAgICAgICAgIHJ1bl9pbmZv
ID0ge30KKworICAgICAgICBmb3Igbm9kZSBpbiBbc2VsZiwgc2VsZi5yb290XToKKyAgICAgICAg
ICAgIGlmIGtleSBpbiBub2RlLl9kYXRhOgorICAgICAgICAgICAgICAgIGZvciBjb25kX3ZhbHVl
IGluIG5vZGUuX2RhdGFba2V5XToKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgICAgICAgICAgICAgbWF0Y2hlcyA9IGNvbmRfdmFsdWUocnVuX2luZm8pCisgICAgICAgICAg
ICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNo
ZXMgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICBpZiBtYXRjaGVzOgorICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGNvbmRfdmFsdWUudmFsdWUKKyAgICAgICAgcmFpc2UgS2V5RXJy
b3IKKworICAgIGRlZiBzZXQoc2VsZiwga2V5LCB2YWx1ZSwgY29uZGl0aW9uPU5vbmUpOgorICAg
ICAgICAjIEZpcnN0IHRyeSB0byB1cGRhdGUgdGhlIGV4aXN0aW5nIHZhbHVlCisgICAgICAgIGlm
IGtleSBpbiBzZWxmLl9kYXRhOgorICAgICAgICAgICAgY29uZF92YWx1ZXMgPSBzZWxmLl9kYXRh
W2tleV0KKyAgICAgICAgICAgIGZvciBjb25kX3ZhbHVlIGluIGNvbmRfdmFsdWVzOgorICAgICAg
ICAgICAgICAgIGlmIGNvbmRfdmFsdWUuY29uZGl0aW9uX25vZGUgPT0gY29uZGl0aW9uOgorICAg
ICAgICAgICAgICAgICAgICBjb25kX3ZhbHVlLnZhbHVlID0gdmFsdWUKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuCisgICAgICAgICAgICAjIElmIHRoZXJlIGlzbid0IGEgY29uZGl0aW9uYWwg
bWF0Y2ggcmV1c2UgdGhlIGV4aXN0aW5nIEtleVZhbHVlTm9kZSBhcyB0aGUKKyAgICAgICAgICAg
ICMgcGFyZW50CisgICAgICAgICAgICBub2RlID0gTm9uZQorICAgICAgICAgICAgZm9yIGNoaWxk
IGluIHNlbGYubm9kZS5jaGlsZHJlbjoKKyAgICAgICAgICAgICAgICBpZiBjaGlsZC5kYXRhID09
IGtleToKKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9IGNoaWxkCisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrCisgICAgICAgICAgICBhc3NlcnQgbm9kZSBpcyBub3QgTm9uZQorCisgICAgICAg
IGVsc2U6CisgICAgICAgICAgICBub2RlID0gS2V5VmFsdWVOb2RlKGtleSkKKyAgICAgICAgICAg
IHNlbGYubm9kZS5hcHBlbmQobm9kZSkKKworICAgICAgICB2YWx1ZV9ub2RlID0gVmFsdWVOb2Rl
KHZhbHVlKQorICAgICAgICBpZiBjb25kaXRpb24gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBj
b25kaXRpb25hbF9ub2RlID0gQ29uZGl0aW9uYWxOb2RlKCkKKyAgICAgICAgICAgIGNvbmRpdGlv
bmFsX25vZGUuYXBwZW5kKGNvbmRpdGlvbikKKyAgICAgICAgICAgIGNvbmRpdGlvbmFsX25vZGUu
YXBwZW5kKHZhbHVlX25vZGUpCisgICAgICAgICAgICBub2RlLmFwcGVuZChjb25kaXRpb25hbF9u
b2RlKQorICAgICAgICAgICAgY29uZF92YWx1ZSA9IENvbXBpbGVyKCkuY29tcGlsZV9jb25kaXRp
b24oY29uZGl0aW9uYWxfbm9kZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG5vZGUuYXBw
ZW5kKHZhbHVlX25vZGUpCisgICAgICAgICAgICBjb25kX3ZhbHVlID0gQ29uZGl0aW9uYWxWYWx1
ZSh2YWx1ZV9ub2RlLCBsYW1iZGEgeDogVHJ1ZSkKKworICAgICAgICAjIFVwZGF0ZSB0aGUgY2Fj
aGUgb2YgY2hpbGQgdmFsdWVzLiBUaGlzIGlzIHByZXR0eSBhbm5veWluZyBhbmQgbWF5YmUKKyAg
ICAgICAgIyBpdCBzaG91bGQganVzdCB3b3JrIGRpcmVjdGx5IG9uIHRoZSB0cmVlCisgICAgICAg
IGlmIGtleSBub3QgaW4gc2VsZi5fZGF0YToKKyAgICAgICAgICAgIHNlbGYuX2RhdGFba2V5XSA9
IFtdCisgICAgICAgIGlmIHNlbGYuX2RhdGFba2V5XSBhbmQgc2VsZi5fZGF0YVtrZXldWy0xXS5j
b25kaXRpb25fbm9kZSBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5fZGF0YVtrZXldLmluc2Vy
dChsZW4oc2VsZi5fZGF0YVtrZXldKSAtIDEsIGNvbmRfdmFsdWUpCisgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICBzZWxmLl9kYXRhW2tleV0uYXBwZW5kKGNvbmRfdmFsdWUpCisKKyAgICBkZWYg
X2FkZF9rZXlfdmFsdWUoc2VsZiwgbm9kZSwgdmFsdWVzKToKKyAgICAgICAgIiIiQ2FsbGVkIGR1
cmluZyBjb25zdHJ1Y3Rpb24gdG8gc2V0IGEga2V5LXZhbHVlIG5vZGUiIiIKKyAgICAgICAgc2Vs
Zi5fZGF0YVtub2RlLmRhdGFdID0gdmFsdWVzCisKKyAgICBkZWYgYXBwZW5kKHNlbGYsIGNoaWxk
KToKKyAgICAgICAgc2VsZi5jaGlsZHJlbi5hcHBlbmQoY2hpbGQpCisgICAgICAgIGNoaWxkLnBh
cmVudCA9IHNlbGYKKyAgICAgICAgaWYgY2hpbGQubm9kZS5wYXJlbnQgIT0gc2VsZi5ub2RlOgor
ICAgICAgICAgICAgc2VsZi5ub2RlLmFwcGVuZChjaGlsZC5ub2RlKQorICAgICAgICByZXR1cm4g
Y2hpbGQKKworICAgIGRlZiByZW1vdmUoc2VsZik6CisgICAgICAgIGlmIHNlbGYucGFyZW50Ogor
ICAgICAgICAgICAgc2VsZi5wYXJlbnQuX3JlbW92ZV9jaGlsZChzZWxmKQorCisgICAgZGVmIF9y
ZW1vdmVfY2hpbGQoc2VsZiwgY2hpbGQpOgorICAgICAgICBzZWxmLmNoaWxkcmVuLnJlbW92ZShj
aGlsZCkKKyAgICAgICAgY2hpbGQucGFyZW50ID0gTm9uZQorCisgICAgZGVmIGl0ZXJjaGlsZHJl
bihzZWxmLCBuYW1lPU5vbmUpOgorICAgICAgICBmb3IgaXRlbSBpbiBzZWxmLmNoaWxkcmVuOgor
ICAgICAgICAgICAgaWYgaXRlbS5uYW1lID09IG5hbWUgb3IgbmFtZSBpcyBOb25lOgorICAgICAg
ICAgICAgICAgIHlpZWxkIGl0ZW0KKworICAgIGRlZiBfZmxhdHRlbihzZWxmKToKKyAgICAgICAg
cnYgPSB7fQorICAgICAgICBmb3Igbm9kZSBpbiBbc2VsZiwgc2VsZi5yb290XToKKyAgICAgICAg
ICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBub2RlLl9kYXRhLml0ZXJpdGVtcygpOgorICAgICAgICAg
ICAgICAgIGlmIG5hbWUgbm90IGluIHJ2OgorICAgICAgICAgICAgICAgICAgICBydltuYW1lXSA9
IHZhbHVlCisgICAgICAgIHJldHVybiBydgorCisgICAgZGVmIGl0ZXJpdGVtcyhzZWxmKToKKyAg
ICAgICAgZm9yIGl0ZW0gaW4gc2VsZi5fZmxhdHRlbigpLml0ZXJpdGVtcygpOgorICAgICAgICAg
ICAgeWllbGQgaXRlbQorCisgICAgZGVmIGl0ZXJrZXlzKHNlbGYpOgorICAgICAgICBmb3IgaXRl
bSBpbiBzZWxmLl9mbGF0dGVuKCkuaXRlcmtleXMoKToKKyAgICAgICAgICAgIHlpZWxkIGl0ZW0K
KworICAgIGRlZiByZW1vdmVfdmFsdWUoc2VsZiwga2V5LCB2YWx1ZSk6CisgICAgICAgIHNlbGYu
X2RhdGFba2V5XS5yZW1vdmUodmFsdWUpCisgICAgICAgIGlmIG5vdCBzZWxmLl9kYXRhW2tleV06
CisgICAgICAgICAgICBkZWwgc2VsZi5fZGF0YVtrZXldCisgICAgICAgIHZhbHVlLnJlbW92ZSgp
CisKKworZGVmIGNvbXBpbGVfYXN0KGFzdCwgZGF0YV9jbHNfZ2V0dGVyPU5vbmUsICoqa3dhcmdz
KToKKyAgICByZXR1cm4gQ29tcGlsZXIoKS5jb21waWxlKGFzdCwgZGF0YV9jbHNfZ2V0dGVyPWRh
dGFfY2xzX2dldHRlciwgKiprd2FyZ3MpCisKKworZGVmIGNvbXBpbGUoc3RyZWFtLCBkYXRhX2Ns
c19nZXR0ZXI9Tm9uZSwgKiprd2FyZ3MpOgorICAgIHJldHVybiBjb21waWxlX2FzdChwYXJzZShz
dHJlYW0pLAorICAgICAgICAgICAgICAgICAgICAgICBkYXRhX2Nsc19nZXR0ZXI9ZGF0YV9jbHNf
Z2V0dGVyLAorICAgICAgICAgICAgICAgICAgICAgICAqKmt3YXJncykKZGlmZiAtLWdpdCBhL1dl
YkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3dwdG1h
bmlmZXN0L2JhY2tlbmRzL3N0YXRpYy5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90
b29scy93cHRydW5uZXIvd3B0cnVubmVyL3dwdG1hbmlmZXN0L2JhY2tlbmRzL3N0YXRpYy5weQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYjNjYmVkYzM4MTgKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVy
L3dwdHJ1bm5lci93cHRtYW5pZmVzdC9iYWNrZW5kcy9zdGF0aWMucHkKQEAgLTAsMCArMSwyMjMg
QEAKK2ltcG9ydCBvcGVyYXRvcgorCitmcm9tIC4ubm9kZSBpbXBvcnQgTm9kZVZpc2l0b3IKK2Zy
b20gLi5wYXJzZXIgaW1wb3J0IHBhcnNlCisKKworY2xhc3MgQ29tcGlsZXIoTm9kZVZpc2l0b3Ip
OgorICAgICIiIkNvbXBpbGVyIGJhY2tlbmQgdGhhdCBldmFsdWF0ZXMgY29uZGl0aW9uYWwgZXhw
cmVzc2lvbnMKKyAgICB0byBnaXZlIHN0YXRpYyBvdXRwdXQiIiIKKworICAgIGRlZiBjb21waWxl
KHNlbGYsIHRyZWUsIGV4cHJfZGF0YSwgZGF0YV9jbHNfZ2V0dGVyPU5vbmUsICoqa3dhcmdzKToK
KyAgICAgICAgIiIiQ29tcGlsZSBhIHJhdyBBU1QgaW50byBhIGZvcm0gd2l0aCBjb25kaXRpb25h
bCBleHByZXNzaW9ucworICAgICAgICBldmFsdWF0ZWQuCisKKyAgICAgICAgdHJlZSAtIFRoZSBy
b290IG5vZGUgb2YgdGhlIHdwdG1hbmlmZXN0IEFTVCB0byBjb21waWxlCisKKyAgICAgICAgZXhw
cl9kYXRhIC0gQSBkaWN0aW9uYXJ5IG9mIGtleSAvIHZhbHVlIHBhaXJzIHRvIHVzZSB3aGVuCisg
ICAgICAgICAgICAgICAgICAgIGV2YWx1YXRpbmcgY29uZGl0aW9uYWwgZXhwcmVzc2lvbnMKKwor
ICAgICAgICBkYXRhX2Nsc19nZXR0ZXIgLSBBIGZ1bmN0aW9uIHRha2luZyB0d28gcGFyYW1ldGVy
czsgdGhlIHByZXZpb3VzCisgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCBub2RlIGFu
ZCB0aGUgY3VycmVudCBhc3Qgbm9kZSBhbmQgcmV0dXJuaW5nCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRoZSBjbGFzcyBvZiB0aGUgb3V0cHV0IG5vZGUgdG8gdXNlIGZvciB0aGUgY3VycmVu
dAorICAgICAgICAgICAgICAgICAgICAgICAgICBhc3Qgbm9kZQorICAgICAgICAiIiIKKworICAg
ICAgICBzZWxmLl9rd2FyZ3MgPSBrd2FyZ3MKKyAgICAgICAgc2VsZi5leHByX2RhdGEgPSBleHBy
X2RhdGEKKworICAgICAgICBpZiBkYXRhX2Nsc19nZXR0ZXIgaXMgTm9uZToKKyAgICAgICAgICAg
IHNlbGYuZGF0YV9jbHNfZ2V0dGVyID0gbGFtYmRhIHgsIHk6IE1hbmlmZXN0SXRlbQorICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgc2VsZi5kYXRhX2Nsc19nZXR0ZXIgPSBkYXRhX2Nsc19nZXR0
ZXIKKworICAgICAgICBzZWxmLm91dHB1dF9ub2RlID0gTm9uZQorICAgICAgICBzZWxmLnZpc2l0
KHRyZWUpCisgICAgICAgIHJldHVybiBzZWxmLm91dHB1dF9ub2RlCisKKyAgICBkZWYgdmlzaXRf
RGF0YU5vZGUoc2VsZiwgbm9kZSk6CisgICAgICAgIG91dHB1dF9wYXJlbnQgPSBzZWxmLm91dHB1
dF9ub2RlCisgICAgICAgIGlmIHNlbGYub3V0cHV0X25vZGUgaXMgTm9uZToKKyAgICAgICAgICAg
IGFzc2VydCBub2RlLnBhcmVudCBpcyBOb25lCisgICAgICAgICAgICBzZWxmLm91dHB1dF9ub2Rl
ID0gc2VsZi5kYXRhX2Nsc19nZXR0ZXIoTm9uZSwgTm9uZSkoTm9uZSwgKipzZWxmLl9rd2FyZ3Mp
CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLm91dHB1dF9ub2RlID0gc2VsZi5kYXRh
X2Nsc19nZXR0ZXIoc2VsZi5vdXRwdXRfbm9kZSwgbm9kZSkobm9kZS5kYXRhKQorCisgICAgICAg
IGZvciBjaGlsZCBpbiBub2RlLmNoaWxkcmVuOgorICAgICAgICAgICAgc2VsZi52aXNpdChjaGls
ZCkKKworICAgICAgICBpZiBvdXRwdXRfcGFyZW50IGlzIG5vdCBOb25lOgorICAgICAgICAgICAg
b3V0cHV0X3BhcmVudC5hcHBlbmQoc2VsZi5vdXRwdXRfbm9kZSkKKyAgICAgICAgICAgIHNlbGYu
b3V0cHV0X25vZGUgPSBzZWxmLm91dHB1dF9ub2RlLnBhcmVudAorCisgICAgZGVmIHZpc2l0X0tl
eVZhbHVlTm9kZShzZWxmLCBub2RlKToKKyAgICAgICAga2V5X25hbWUgPSBub2RlLmRhdGEKKyAg
ICAgICAga2V5X3ZhbHVlID0gTm9uZQorICAgICAgICBmb3IgY2hpbGQgaW4gbm9kZS5jaGlsZHJl
bjoKKyAgICAgICAgICAgIHZhbHVlID0gc2VsZi52aXNpdChjaGlsZCkKKyAgICAgICAgICAgIGlm
IHZhbHVlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGtleV92YWx1ZSA9IHZhbHVlCisg
ICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYga2V5X3ZhbHVlIGlzIG5vdCBOb25lOgor
ICAgICAgICAgICAgc2VsZi5vdXRwdXRfbm9kZS5zZXQoa2V5X25hbWUsIGtleV92YWx1ZSkKKwor
ICAgIGRlZiB2aXNpdF9WYWx1ZU5vZGUoc2VsZiwgbm9kZSk6CisgICAgICAgIHJldHVybiBub2Rl
LmRhdGEKKworICAgIGRlZiB2aXNpdF9BdG9tTm9kZShzZWxmLCBub2RlKToKKyAgICAgICAgcmV0
dXJuIG5vZGUuZGF0YQorCisgICAgZGVmIHZpc2l0X0xpc3ROb2RlKHNlbGYsIG5vZGUpOgorICAg
ICAgICByZXR1cm4gW3NlbGYudmlzaXQoY2hpbGQpIGZvciBjaGlsZCBpbiBub2RlLmNoaWxkcmVu
XQorCisgICAgZGVmIHZpc2l0X0NvbmRpdGlvbmFsTm9kZShzZWxmLCBub2RlKToKKyAgICAgICAg
YXNzZXJ0IGxlbihub2RlLmNoaWxkcmVuKSA9PSAyCisgICAgICAgIGlmIHNlbGYudmlzaXQobm9k
ZS5jaGlsZHJlblswXSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi52aXNpdChub2RlLmNoaWxk
cmVuWzFdKQorCisgICAgZGVmIHZpc2l0X1N0cmluZ05vZGUoc2VsZiwgbm9kZSk6CisgICAgICAg
IHZhbHVlID0gbm9kZS5kYXRhCisgICAgICAgIGZvciBjaGlsZCBpbiBub2RlLmNoaWxkcmVuOgor
ICAgICAgICAgICAgdmFsdWUgPSBzZWxmLnZpc2l0KGNoaWxkKSh2YWx1ZSkKKyAgICAgICAgcmV0
dXJuIHZhbHVlCisKKyAgICBkZWYgdmlzaXRfTnVtYmVyTm9kZShzZWxmLCBub2RlKToKKyAgICAg
ICAgaWYgIi4iIGluIG5vZGUuZGF0YToKKyAgICAgICAgICAgIHJldHVybiBmbG9hdChub2RlLmRh
dGEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gaW50KG5vZGUuZGF0YSkKKwor
ICAgIGRlZiB2aXNpdF9WYXJpYWJsZU5vZGUoc2VsZiwgbm9kZSk6CisgICAgICAgIHZhbHVlID0g
c2VsZi5leHByX2RhdGFbbm9kZS5kYXRhXQorICAgICAgICBmb3IgY2hpbGQgaW4gbm9kZS5jaGls
ZHJlbjoKKyAgICAgICAgICAgIHZhbHVlID0gc2VsZi52aXNpdChjaGlsZCkodmFsdWUpCisgICAg
ICAgIHJldHVybiB2YWx1ZQorCisgICAgZGVmIHZpc2l0X0luZGV4Tm9kZShzZWxmLCBub2RlKToK
KyAgICAgICAgYXNzZXJ0IGxlbihub2RlLmNoaWxkcmVuKSA9PSAxCisgICAgICAgIGluZGV4ID0g
c2VsZi52aXNpdChub2RlLmNoaWxkcmVuWzBdKQorICAgICAgICByZXR1cm4gbGFtYmRhIHg6IHhb
aW5kZXhdCisKKyAgICBkZWYgdmlzaXRfVW5hcnlFeHByZXNzaW9uTm9kZShzZWxmLCBub2RlKToK
KyAgICAgICAgYXNzZXJ0IGxlbihub2RlLmNoaWxkcmVuKSA9PSAyCisgICAgICAgIG9wZXJhdG9y
ID0gc2VsZi52aXNpdChub2RlLmNoaWxkcmVuWzBdKQorICAgICAgICBvcGVyYW5kID0gc2VsZi52
aXNpdChub2RlLmNoaWxkcmVuWzFdKQorCisgICAgICAgIHJldHVybiBvcGVyYXRvcihvcGVyYW5k
KQorCisgICAgZGVmIHZpc2l0X0JpbmFyeUV4cHJlc3Npb25Ob2RlKHNlbGYsIG5vZGUpOgorICAg
ICAgICBhc3NlcnQgbGVuKG5vZGUuY2hpbGRyZW4pID09IDMKKyAgICAgICAgb3BlcmF0b3IgPSBz
ZWxmLnZpc2l0KG5vZGUuY2hpbGRyZW5bMF0pCisgICAgICAgIG9wZXJhbmRfMCA9IHNlbGYudmlz
aXQobm9kZS5jaGlsZHJlblsxXSkKKyAgICAgICAgb3BlcmFuZF8xID0gc2VsZi52aXNpdChub2Rl
LmNoaWxkcmVuWzJdKQorCisgICAgICAgIHJldHVybiBvcGVyYXRvcihvcGVyYW5kXzAsIG9wZXJh
bmRfMSkKKworICAgIGRlZiB2aXNpdF9VbmFyeU9wZXJhdG9yTm9kZShzZWxmLCBub2RlKToKKyAg
ICAgICAgcmV0dXJuIHsibm90Ijogb3BlcmF0b3Iubm90X31bbm9kZS5kYXRhXQorCisgICAgZGVm
IHZpc2l0X0JpbmFyeU9wZXJhdG9yTm9kZShzZWxmLCBub2RlKToKKyAgICAgICAgcmV0dXJuIHsi
YW5kIjogb3BlcmF0b3IuYW5kXywKKyAgICAgICAgICAgICAgICAib3IiOiBvcGVyYXRvci5vcl8s
CisgICAgICAgICAgICAgICAgIj09Ijogb3BlcmF0b3IuZXEsCisgICAgICAgICAgICAgICAgIiE9
Ijogb3BlcmF0b3IubmV9W25vZGUuZGF0YV0KKworCitjbGFzcyBNYW5pZmVzdEl0ZW0ob2JqZWN0
KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgKiprd2FyZ3MpOgorICAgICAgICBzZWxm
LnBhcmVudCA9IE5vbmUKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICBzZWxmLmNo
aWxkcmVuID0gW10KKyAgICAgICAgc2VsZi5fZGF0YSA9IHt9CisKKyAgICBkZWYgX19yZXByX18o
c2VsZik6CisgICAgICAgIHJldHVybiAiPE1hbmlmZXN0SXRlbSAlcz4iICUgKHNlbGYubmFtZSkK
KworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICBydiA9IFtyZXByKHNlbGYpXQorICAg
ICAgICBmb3IgaXRlbSBpbiBzZWxmLmNoaWxkcmVuOgorICAgICAgICAgICAgcnYuZXh0ZW5kKCIg
ICVzIiAlIGxpbmUgZm9yIGxpbmUgaW4gc3RyKGl0ZW0pLnNwbGl0KCJcbiIpKQorICAgICAgICBy
ZXR1cm4gIlxuIi5qb2luKHJ2KQorCisgICAgZGVmIHNldF9kZWZhdWx0cyhzZWxmKToKKyAgICAg
ICAgcGFzcworCisgICAgQHByb3BlcnR5CisgICAgZGVmIGlzX2VtcHR5KHNlbGYpOgorICAgICAg
ICBpZiBzZWxmLl9kYXRhOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVy
biBhbGwoY2hpbGQuaXNfZW1wdHkgZm9yIGNoaWxkIGluIHNlbGYuY2hpbGRyZW4pCisKKyAgICBA
cHJvcGVydHkKKyAgICBkZWYgcm9vdChzZWxmKToKKyAgICAgICAgbm9kZSA9IHNlbGYKKyAgICAg
ICAgd2hpbGUgbm9kZS5wYXJlbnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBub2RlID0gbm9k
ZS5wYXJlbnQKKyAgICAgICAgcmV0dXJuIG5vZGUKKworICAgIGRlZiBoYXNfa2V5KHNlbGYsIGtl
eSk6CisgICAgICAgIGZvciBub2RlIGluIFtzZWxmLCBzZWxmLnJvb3RdOgorICAgICAgICAgICAg
aWYga2V5IGluIG5vZGUuX2RhdGE6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAg
ICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgZ2V0KHNlbGYsIGtleSk6CisgICAgICAgIGZvciBu
b2RlIGluIFtzZWxmLCBzZWxmLnJvb3RdOgorICAgICAgICAgICAgaWYga2V5IGluIG5vZGUuX2Rh
dGE6CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuX2RhdGFba2V5XQorICAgICAgICByYWlz
ZSBLZXlFcnJvcgorCisgICAgZGVmIHNldChzZWxmLCBuYW1lLCB2YWx1ZSk6CisgICAgICAgIHNl
bGYuX2RhdGFbbmFtZV0gPSB2YWx1ZQorCisgICAgZGVmIHJlbW92ZShzZWxmKToKKyAgICAgICAg
aWYgc2VsZi5wYXJlbnQ6CisgICAgICAgICAgICBzZWxmLnBhcmVudC5fcmVtb3ZlX2NoaWxkKHNl
bGYpCisKKyAgICBkZWYgX3JlbW92ZV9jaGlsZChzZWxmLCBjaGlsZCk6CisgICAgICAgIHNlbGYu
Y2hpbGRyZW4ucmVtb3ZlKGNoaWxkKQorICAgICAgICBjaGlsZC5wYXJlbnQgPSBOb25lCisKKyAg
ICBkZWYgaXRlcmNoaWxkcmVuKHNlbGYsIG5hbWU9Tm9uZSk6CisgICAgICAgIGZvciBpdGVtIGlu
IHNlbGYuY2hpbGRyZW46CisgICAgICAgICAgICBpZiBpdGVtLm5hbWUgPT0gbmFtZSBvciBuYW1l
IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgeWllbGQgaXRlbQorCisgICAgZGVmIF9mbGF0dGVu
KHNlbGYpOgorICAgICAgICBydiA9IHt9CisgICAgICAgIGZvciBub2RlIGluIFtzZWxmLCBzZWxm
LnJvb3RdOgorICAgICAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIG5vZGUuX2RhdGEuaXRlcml0
ZW1zKCk6CisgICAgICAgICAgICAgICAgaWYgbmFtZSBub3QgaW4gcnY6CisgICAgICAgICAgICAg
ICAgICAgIHJ2W25hbWVdID0gdmFsdWUKKyAgICAgICAgcmV0dXJuIHJ2CisKKyAgICBkZWYgaXRl
cml0ZW1zKHNlbGYpOgorICAgICAgICBmb3IgaXRlbSBpbiBzZWxmLl9mbGF0dGVuKCkuaXRlcml0
ZW1zKCk6CisgICAgICAgICAgICB5aWVsZCBpdGVtCisKKyAgICBkZWYgaXRlcmtleXMoc2VsZik6
CisgICAgICAgIGZvciBpdGVtIGluIHNlbGYuX2ZsYXR0ZW4oKS5pdGVya2V5cygpOgorICAgICAg
ICAgICAgeWllbGQgaXRlbQorCisgICAgZGVmIGl0ZXJ2YWx1ZXMoc2VsZik6CisgICAgICAgIGZv
ciBpdGVtIGluIHNlbGYuX2ZsYXR0ZW4oKS5pdGVydmFsdWVzKCk6CisgICAgICAgICAgICB5aWVs
ZCBpdGVtCisKKyAgICBkZWYgYXBwZW5kKHNlbGYsIGNoaWxkKToKKyAgICAgICAgY2hpbGQucGFy
ZW50ID0gc2VsZgorICAgICAgICBzZWxmLmNoaWxkcmVuLmFwcGVuZChjaGlsZCkKKyAgICAgICAg
cmV0dXJuIGNoaWxkCisKKworZGVmIGNvbXBpbGVfYXN0KGFzdCwgZXhwcl9kYXRhLCBkYXRhX2Ns
c19nZXR0ZXI9Tm9uZSwgKiprd2FyZ3MpOgorICAgIHJldHVybiBDb21waWxlcigpLmNvbXBpbGUo
YXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcl9kYXRhLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YV9jbHNfZ2V0dGVyPWRhdGFfY2xzX2dldHRlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKQorCisKK2RlZiBjb21waWxlKHN0
cmVhbSwgZXhwcl9kYXRhLCBkYXRhX2Nsc19nZXR0ZXI9Tm9uZSwgKiprd2FyZ3MpOgorICAgIHJl
dHVybiBjb21waWxlX2FzdChwYXJzZShzdHJlYW0pLAorICAgICAgICAgICAgICAgICAgICAgICBl
eHByX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfY2xzX2dldHRlcj1kYXRhX2Ns
c19nZXR0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKQpkaWZmIC0tZ2l0IGEv
V2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvd3B0
bWFuaWZlc3Qvbm9kZS5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRy
dW5uZXIvd3B0cnVubmVyL3dwdG1hbmlmZXN0L25vZGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAuLjMzZTk3OTZjNDMwCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJp
dmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvd3B0bWFuaWZl
c3Qvbm9kZS5weQpAQCAtMCwwICsxLDE1NyBAQAorY2xhc3MgTm9kZVZpc2l0b3Iob2JqZWN0KToK
KyAgICBkZWYgdmlzaXQoc2VsZiwgbm9kZSk6CisgICAgICAgICMgVGhpcyBpcyB1Z2x5IGFzIGhl
bGwsIGJ1dCB3ZSBkb24ndCBoYXZlIG11bHRpbWV0aG9kcyBhbmQKKyAgICAgICAgIyB0aGV5IGFy
ZW4ndCB0cml2aWFsIHRvIGZha2Ugd2l0aG91dCBhY2Nlc3MgdG8gdGhlIGNsYXNzCisgICAgICAg
ICMgb2JqZWN0IGZyb20gdGhlIGNsYXNzIGJvZHkKKyAgICAgICAgZnVuYyA9IGdldGF0dHIoc2Vs
ZiwgInZpc2l0XyVzIiAlIChub2RlLl9fY2xhc3NfXy5fX25hbWVfXykpCisgICAgICAgIHJldHVy
biBmdW5jKG5vZGUpCisKKworY2xhc3MgTm9kZShvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBkYXRhPU5vbmUpOgorICAgICAgICBzZWxmLmRhdGEgPSBkYXRhCisgICAgICAgIHNlbGYu
cGFyZW50ID0gTm9uZQorICAgICAgICBzZWxmLmNoaWxkcmVuID0gW10KKworICAgIGRlZiBhcHBl
bmQoc2VsZiwgb3RoZXIpOgorICAgICAgICBvdGhlci5wYXJlbnQgPSBzZWxmCisgICAgICAgIHNl
bGYuY2hpbGRyZW4uYXBwZW5kKG90aGVyKQorCisgICAgZGVmIHJlbW92ZShzZWxmKToKKyAgICAg
ICAgc2VsZi5wYXJlbnQuY2hpbGRyZW4ucmVtb3ZlKHNlbGYpCisKKyAgICBkZWYgX19yZXByX18o
c2VsZik6CisgICAgICAgIHJldHVybiAiPCVzICVzPiIgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1l
X18sIHNlbGYuZGF0YSkKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICBydiA9IFty
ZXByKHNlbGYpXQorICAgICAgICBmb3IgaXRlbSBpbiBzZWxmLmNoaWxkcmVuOgorICAgICAgICAg
ICAgcnYuZXh0ZW5kKCIgICVzIiAlIGxpbmUgZm9yIGxpbmUgaW4gc3RyKGl0ZW0pLnNwbGl0KCJc
biIpKQorICAgICAgICByZXR1cm4gIlxuIi5qb2luKHJ2KQorCisgICAgZGVmIF9fZXFfXyhzZWxm
LCBvdGhlcik6CisgICAgICAgIGlmIG5vdCAoc2VsZi5fX2NsYXNzX18gPT0gb3RoZXIuX19jbGFz
c19fIGFuZAorICAgICAgICAgICAgICAgIHNlbGYuZGF0YSA9PSBvdGhlci5kYXRhIGFuZAorICAg
ICAgICAgICAgICAgIGxlbihzZWxmLmNoaWxkcmVuKSA9PSBsZW4ob3RoZXIuY2hpbGRyZW4pKToK
KyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBmb3IgY2hpbGQsIG90aGVyX2NoaWxk
IGluIHppcChzZWxmLmNoaWxkcmVuLCBvdGhlci5jaGlsZHJlbik6CisgICAgICAgICAgICBpZiBu
b3QgY2hpbGQgPT0gb3RoZXJfY2hpbGQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisg
ICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgY29weShzZWxmKToKKyAgICAgICAgbmV3ID0g
c2VsZi5fX2NsYXNzX18oc2VsZi5kYXRhKQorICAgICAgICBmb3IgaXRlbSBpbiBzZWxmLmNoaWxk
cmVuOgorICAgICAgICAgICAgbmV3LmFwcGVuZChpdGVtLmNvcHkoKSkKKyAgICAgICAgcmV0dXJu
IG5ldworCisKK2NsYXNzIERhdGFOb2RlKE5vZGUpOgorICAgIGRlZiBhcHBlbmQoc2VsZiwgb3Ro
ZXIpOgorICAgICAgICAjIEFwcGVuZCB0aGF0IHJldGFpbnMgdGhlIGludmFyaWFudCB0aGF0IGNo
aWxkIGRhdGEgbm9kZXMKKyAgICAgICAgIyBjb21lIGFmdGVyIGNoaWxkIG5vZGVzIG9mIG90aGVy
IHR5cGVzCisgICAgICAgIG90aGVyLnBhcmVudCA9IHNlbGYKKyAgICAgICAgaWYgaXNpbnN0YW5j
ZShvdGhlciwgRGF0YU5vZGUpOgorICAgICAgICAgICAgc2VsZi5jaGlsZHJlbi5hcHBlbmQob3Ro
ZXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpbmRleCA9IGxlbihzZWxmLmNoaWxkcmVu
KQorICAgICAgICAgICAgd2hpbGUgaW5kZXggPiAwIGFuZCBpc2luc3RhbmNlKHNlbGYuY2hpbGRy
ZW5baW5kZXggLSAxXSwgRGF0YU5vZGUpOgorICAgICAgICAgICAgICAgIGluZGV4IC09IDEKKyAg
ICAgICAgICAgIGZvciBpIGluIHhyYW5nZShpbmRleCk6CisgICAgICAgICAgICAgICAgYXNzZXJ0
IG90aGVyLmRhdGEgIT0gc2VsZi5jaGlsZHJlbltpXS5kYXRhCisgICAgICAgICAgICBzZWxmLmNo
aWxkcmVuLmluc2VydChpbmRleCwgb3RoZXIpCisKKworY2xhc3MgS2V5VmFsdWVOb2RlKE5vZGUp
OgorICAgIGRlZiBhcHBlbmQoc2VsZiwgb3RoZXIpOgorICAgICAgICAjIEFwcGVuZCB0aGF0IHJl
dGFpbnMgdGhlIGludmFyaWFudCB0aGF0IGNvbmRpdGlvbmFsIG5vZGVzCisgICAgICAgICMgY29t
ZSBiZWZvcmUgdW5jb25kaXRpb25hbCBub2RlcworICAgICAgICBvdGhlci5wYXJlbnQgPSBzZWxm
CisgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIFZhbHVlTm9kZSk6CisgICAgICAgICAgICBp
ZiBzZWxmLmNoaWxkcmVuOgorICAgICAgICAgICAgICAgIGFzc2VydCBub3QgaXNpbnN0YW5jZShz
ZWxmLmNoaWxkcmVuWy0xXSwgVmFsdWVOb2RlKQorICAgICAgICAgICAgc2VsZi5jaGlsZHJlbi5h
cHBlbmQob3RoZXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBzZWxmLmNoaWxkcmVu
IGFuZCBpc2luc3RhbmNlKHNlbGYuY2hpbGRyZW5bLTFdLCBWYWx1ZU5vZGUpOgorICAgICAgICAg
ICAgICAgIHNlbGYuY2hpbGRyZW4uaW5zZXJ0KGxlbihzZWxmLmNoaWxkcmVuKSAtIDEsIG90aGVy
KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmNoaWxkcmVuLmFwcGVu
ZChvdGhlcikKKworCitjbGFzcyBMaXN0Tm9kZShOb2RlKToKKyAgICBkZWYgYXBwZW5kKHNlbGYs
IG90aGVyKToKKyAgICAgICAgb3RoZXIucGFyZW50ID0gc2VsZgorICAgICAgICBzZWxmLmNoaWxk
cmVuLmFwcGVuZChvdGhlcikKKworCitjbGFzcyBWYWx1ZU5vZGUoTm9kZSk6CisgICAgZGVmIGFw
cGVuZChzZWxmLCBvdGhlcik6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcgorCisKK2NsYXNzIEF0
b21Ob2RlKFZhbHVlTm9kZSk6CisgICAgcGFzcworCisKK2NsYXNzIENvbmRpdGlvbmFsTm9kZShO
b2RlKToKKyAgICBwYXNzCisKKworY2xhc3MgVW5hcnlFeHByZXNzaW9uTm9kZShOb2RlKToKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgb3BlcmF0b3IsIG9wZXJhbmQpOgorICAgICAgICBOb2RlLl9f
aW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuYXBwZW5kKG9wZXJhdG9yKQorICAgICAgICBzZWxm
LmFwcGVuZChvcGVyYW5kKQorCisgICAgZGVmIGFwcGVuZChzZWxmLCBvdGhlcik6CisgICAgICAg
IE5vZGUuYXBwZW5kKHNlbGYsIG90aGVyKQorICAgICAgICBhc3NlcnQgbGVuKHNlbGYuY2hpbGRy
ZW4pIDw9IDIKKworICAgIGRlZiBjb3B5KHNlbGYpOgorICAgICAgICBuZXcgPSBzZWxmLl9fY2xh
c3NfXyhzZWxmLmNoaWxkcmVuWzBdLmNvcHkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZi5jaGlsZHJlblsxXS5jb3B5KCkpCisgICAgICAgIHJldHVybiBuZXcKKworCitjbGFz
cyBCaW5hcnlFeHByZXNzaW9uTm9kZShOb2RlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb3Bl
cmF0b3IsIG9wZXJhbmRfMCwgb3BlcmFuZF8xKToKKyAgICAgICAgTm9kZS5fX2luaXRfXyhzZWxm
KQorICAgICAgICBzZWxmLmFwcGVuZChvcGVyYXRvcikKKyAgICAgICAgc2VsZi5hcHBlbmQob3Bl
cmFuZF8wKQorICAgICAgICBzZWxmLmFwcGVuZChvcGVyYW5kXzEpCisKKyAgICBkZWYgYXBwZW5k
KHNlbGYsIG90aGVyKToKKyAgICAgICAgTm9kZS5hcHBlbmQoc2VsZiwgb3RoZXIpCisgICAgICAg
IGFzc2VydCBsZW4oc2VsZi5jaGlsZHJlbikgPD0gMworCisgICAgZGVmIGNvcHkoc2VsZik6Cisg
ICAgICAgIG5ldyA9IHNlbGYuX19jbGFzc19fKHNlbGYuY2hpbGRyZW5bMF0uY29weSgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNoaWxkcmVuWzFdLmNvcHkoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGlsZHJlblsyXS5jb3B5KCkpCisgICAgICAg
IHJldHVybiBuZXcKKworCitjbGFzcyBVbmFyeU9wZXJhdG9yTm9kZShOb2RlKToKKyAgICBkZWYg
YXBwZW5kKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yCisKKworY2xhc3Mg
QmluYXJ5T3BlcmF0b3JOb2RlKE5vZGUpOgorICAgIGRlZiBhcHBlbmQoc2VsZiwgb3RoZXIpOgor
ICAgICAgICByYWlzZSBUeXBlRXJyb3IKKworCitjbGFzcyBJbmRleE5vZGUoTm9kZSk6CisgICAg
cGFzcworCisKK2NsYXNzIFZhcmlhYmxlTm9kZShOb2RlKToKKyAgICBwYXNzCisKKworY2xhc3Mg
U3RyaW5nTm9kZShOb2RlKToKKyAgICBwYXNzCisKKworY2xhc3MgTnVtYmVyTm9kZShWYWx1ZU5v
ZGUpOgorICAgIHBhc3MKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90
b29scy93cHRydW5uZXIvd3B0cnVubmVyL3dwdG1hbmlmZXN0L3BhcnNlci5weSBiL1dlYkRyaXZl
clRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3dwdG1hbmlmZXN0
L3BhcnNlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZDg0YTkx
NDNmYTYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9v
bHMvd3B0cnVubmVyL3dwdHJ1bm5lci93cHRtYW5pZmVzdC9wYXJzZXIucHkKQEAgLTAsMCArMSw3
NDYgQEAKKyNkZWZhdWx0X3ZhbHVlOmZvbworI2luY2x1ZGU6IG90aGVyLm1hbmlmZXN0CisjCisj
W3Rlc3RfbmFtZS5qc10KKyMgIGV4cGVjdGVkOiBFUlJPUgorIworIyAgW3N1YnRlc3QgMV0KKyMg
ICAgZXhwZWN0ZWQ6CisjICAgICAgb3MgPT0gd2luOiBGQUlMICNUaGlzIGlzIGEgY29tbWVudAor
IyAgICAgIFBBU1MKKyMKKworIyBUT0RPOiBrZWVwIGNvbW1lbnRzIGluIHRoZSB0cmVlCisKK2Zy
b20gX19mdXR1cmVfXyBpbXBvcnQgdW5pY29kZV9saXRlcmFscworCitpbXBvcnQgdHlwZXMKK2Zy
b20gY1N0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworCitmcm9tIG5vZGUgaW1wb3J0ICoKKworCitj
bGFzcyBQYXJzZUVycm9yKEV4Y2VwdGlvbik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVu
YW1lLCBsaW5lLCBkZXRhaWwpOgorICAgICAgICBzZWxmLmxpbmUgPSBsaW5lCisgICAgICAgIHNl
bGYuZmlsZW5hbWUgPSBmaWxlbmFtZQorICAgICAgICBzZWxmLmRldGFpbCA9IGRldGFpbAorICAg
ICAgICBzZWxmLm1lc3NhZ2UgPSAiJXM6ICVzIGxpbmUgJXMiICUgKHNlbGYuZGV0YWlsLCBzZWxm
LmZpbGVuYW1lLCBzZWxmLmxpbmUpCisgICAgICAgIEV4Y2VwdGlvbi5fX2luaXRfXyhzZWxmLCBz
ZWxmLm1lc3NhZ2UpCisKK2VvbCA9IG9iamVjdAorZ3JvdXBfc3RhcnQgPSBvYmplY3QKK2dyb3Vw
X2VuZCA9IG9iamVjdAorZGlnaXRzID0gIjAxMjM0NTY3ODkiCitvcGVuX3BhcmVucyA9ICJbKCIK
K2Nsb3NlX3BhcmVucyA9ICJdKSIKK3BhcmVucyA9IG9wZW5fcGFyZW5zICsgY2xvc2VfcGFyZW5z
CitvcGVyYXRvcl9jaGFycyA9ICI9ISIKKwordW5hcnlfb3BlcmF0b3JzID0gWyJub3QiXQorYmlu
YXJ5X29wZXJhdG9ycyA9IFsiPT0iLCAiIT0iLCAiYW5kIiwgIm9yIl0KKworb3BlcmF0b3JzID0g
WyI9PSIsICIhPSIsICJub3QiLCAiYW5kIiwgIm9yIl0KKworYXRvbXMgPSB7IlRydWUiOiBUcnVl
LAorICAgICAgICAgIkZhbHNlIjogRmFsc2UsCisgICAgICAgICAiUmVzZXQiOiBvYmplY3QoKX0K
KworZGVmIGRlY29kZShzKToKKyAgICBhc3NlcnQgaXNpbnN0YW5jZShzLCB1bmljb2RlKQorICAg
IHJldHVybiBzCisKKworZGVmIHByZWNlZGVuY2Uob3BlcmF0b3Jfbm9kZSk6CisgICAgcmV0dXJu
IGxlbihvcGVyYXRvcnMpIC0gb3BlcmF0b3JzLmluZGV4KG9wZXJhdG9yX25vZGUuZGF0YSkKKwor
CitjbGFzcyBUb2tlblR5cGVzKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAg
ICAgICBmb3IgdHlwZSBpbiBbImdyb3VwX3N0YXJ0IiwgImdyb3VwX2VuZCIsICJwYXJlbiIsICJs
aXN0X3N0YXJ0IiwgImxpc3RfZW5kIiwgInNlcGFyYXRvciIsICJpZGVudCIsICJzdHJpbmciLCAi
bnVtYmVyIiwgImF0b20iLCAiZW9mIl06CisgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIHR5cGUs
IHR5cGUpCisKK3Rva2VuX3R5cGVzID0gVG9rZW5UeXBlcygpCisKKworY2xhc3MgVG9rZW5pemVy
KG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLnJlc2V0KCkK
KworICAgIGRlZiByZXNldChzZWxmKToKKyAgICAgICAgc2VsZi5pbmRlbnRfbGV2ZWxzID0gWzBd
CisgICAgICAgIHNlbGYuc3RhdGUgPSBzZWxmLmxpbmVfc3RhcnRfc3RhdGUKKyAgICAgICAgc2Vs
Zi5uZXh0X3N0YXRlID0gc2VsZi5kYXRhX2xpbmVfc3RhdGUKKyAgICAgICAgc2VsZi5saW5lX251
bWJlciA9IDAKKworICAgIGRlZiB0b2tlbml6ZShzZWxmLCBzdHJlYW0pOgorICAgICAgICBzZWxm
LnJlc2V0KCkKKyAgICAgICAgYXNzZXJ0IG5vdCBpc2luc3RhbmNlKHN0cmVhbSwgdW5pY29kZSkK
KyAgICAgICAgaWYgaXNpbnN0YW5jZShzdHJlYW0sIHN0cik6CisgICAgICAgICAgICBzdHJlYW0g
PSBTdHJpbmdJTyhzdHJlYW0pCisgICAgICAgIGlmIG5vdCBoYXNhdHRyKHN0cmVhbSwgIm5hbWUi
KToKKyAgICAgICAgICAgIHNlbGYuZmlsZW5hbWUgPSAiIgorICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgc2VsZi5maWxlbmFtZSA9IHN0cmVhbS5uYW1lCisKKyAgICAgICAgc2VsZi5uZXh0X2xp
bmVfc3RhdGUgPSBzZWxmLmxpbmVfc3RhcnRfc3RhdGUKKyAgICAgICAgZm9yIGksIGxpbmUgaW4g
ZW51bWVyYXRlKHN0cmVhbSk6CisgICAgICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShsaW5lLCBz
dHIpCisgICAgICAgICAgICBzZWxmLnN0YXRlID0gc2VsZi5uZXh0X2xpbmVfc3RhdGUKKyAgICAg
ICAgICAgIGFzc2VydCBzZWxmLnN0YXRlIGlzIG5vdCBOb25lCisgICAgICAgICAgICBzdGF0ZXMg
PSBbXQorICAgICAgICAgICAgc2VsZi5uZXh0X2xpbmVfc3RhdGUgPSBOb25lCisgICAgICAgICAg
ICBzZWxmLmxpbmVfbnVtYmVyID0gaSArIDEKKyAgICAgICAgICAgIHNlbGYuaW5kZXggPSAwCisg
ICAgICAgICAgICBzZWxmLmxpbmUgPSBsaW5lLmRlY29kZSgndXRmLTgnKS5yc3RyaXAoKQorICAg
ICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2Uoc2VsZi5saW5lLCB1bmljb2RlKQorICAgICAgICAg
ICAgd2hpbGUgc2VsZi5zdGF0ZSAhPSBzZWxmLmVvbF9zdGF0ZToKKyAgICAgICAgICAgICAgICBz
dGF0ZXMuYXBwZW5kKHNlbGYuc3RhdGUpCisgICAgICAgICAgICAgICAgdG9rZW5zID0gc2VsZi5z
dGF0ZSgpCisgICAgICAgICAgICAgICAgaWYgdG9rZW5zOgorICAgICAgICAgICAgICAgICAgICBm
b3IgdG9rZW4gaW4gdG9rZW5zOgorICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgdG9rZW4K
KyAgICAgICAgICAgIHNlbGYuc3RhdGUoKQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAg
ICAgeWllbGQgKHRva2VuX3R5cGVzLmVvZiwgTm9uZSkKKworICAgIGRlZiBjaGFyKHNlbGYpOgor
ICAgICAgICBpZiBzZWxmLmluZGV4ID09IGxlbihzZWxmLmxpbmUpOgorICAgICAgICAgICAgcmV0
dXJuIGVvbAorICAgICAgICByZXR1cm4gc2VsZi5saW5lW3NlbGYuaW5kZXhdCisKKyAgICBkZWYg
Y29uc3VtZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5pbmRleCA8IGxlbihzZWxmLmxpbmUpOgor
ICAgICAgICAgICAgc2VsZi5pbmRleCArPSAxCisKKyAgICBkZWYgcGVlayhzZWxmLCBsZW5ndGgp
OgorICAgICAgICByZXR1cm4gc2VsZi5saW5lW3NlbGYuaW5kZXg6c2VsZi5pbmRleCArIGxlbmd0
aF0KKworICAgIGRlZiBza2lwX3doaXRlc3BhY2Uoc2VsZik6CisgICAgICAgIHdoaWxlIHNlbGYu
Y2hhcigpID09ICIgIjoKKyAgICAgICAgICAgIHNlbGYuY29uc3VtZSgpCisKKyAgICBkZWYgZW9s
X3N0YXRlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLm5leHRfbGluZV9zdGF0ZSBpcyBOb25lOgor
ICAgICAgICAgICAgc2VsZi5uZXh0X2xpbmVfc3RhdGUgPSBzZWxmLmxpbmVfc3RhcnRfc3RhdGUK
KworICAgIGRlZiBsaW5lX3N0YXJ0X3N0YXRlKHNlbGYpOgorICAgICAgICBzZWxmLnNraXBfd2hp
dGVzcGFjZSgpCisgICAgICAgIGlmIHNlbGYuY2hhcigpID09IGVvbDoKKyAgICAgICAgICAgIHNl
bGYuc3RhdGUgPSBzZWxmLmVvbF9zdGF0ZQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlm
IHNlbGYuaW5kZXggPiBzZWxmLmluZGVudF9sZXZlbHNbLTFdOgorICAgICAgICAgICAgc2VsZi5p
bmRlbnRfbGV2ZWxzLmFwcGVuZChzZWxmLmluZGV4KQorICAgICAgICAgICAgeWllbGQgKHRva2Vu
X3R5cGVzLmdyb3VwX3N0YXJ0LCBOb25lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgd2hp
bGUgc2VsZi5pbmRleCA8IHNlbGYuaW5kZW50X2xldmVsc1stMV06CisgICAgICAgICAgICAgICAg
c2VsZi5pbmRlbnRfbGV2ZWxzLnBvcCgpCisgICAgICAgICAgICAgICAgeWllbGQgKHRva2VuX3R5
cGVzLmdyb3VwX2VuZCwgTm9uZSkKKyAgICAgICAgICAgICAgICAjIFRoaXMgaXMgdGVycmlibGU7
IGlmIHdlIHdlcmUgcGFyc2luZyBhbiBleHByZXNzaW9uCisgICAgICAgICAgICAgICAgIyB0aGVu
IHRoZSBuZXh0X3N0YXRlIHdpbGwgYmUgZXhwcl9vcl92YWx1ZSBidXQgd2hlbiB3ZSBkZWluZGVu
dAorICAgICAgICAgICAgICAgICMgaXQgbXVzdCBhbHdheXMgYmUgYSBoZWFkaW5nIG9yIGtleSBu
ZXh0IHNvIHdlIGdvIGJhY2sgdG8gZGF0YV9saW5lX3N0YXRlCisgICAgICAgICAgICAgICAgc2Vs
Zi5uZXh0X3N0YXRlID0gc2VsZi5kYXRhX2xpbmVfc3RhdGUKKyAgICAgICAgICAgIGlmIHNlbGYu
aW5kZXggIT0gc2VsZi5pbmRlbnRfbGV2ZWxzWy0xXToKKyAgICAgICAgICAgICAgICByYWlzZSBQ
YXJzZUVycm9yKHNlbGYuZmlsZW5hbWUsIHNlbGYubGluZV9udW1iZXIsICJVbmV4cGVjdGVkIGlu
ZGVudCIpCisKKyAgICAgICAgc2VsZi5zdGF0ZSA9IHNlbGYubmV4dF9zdGF0ZQorCisgICAgZGVm
IGRhdGFfbGluZV9zdGF0ZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5jaGFyKCkgPT0gIlsiOgor
ICAgICAgICAgICAgeWllbGQgKHRva2VuX3R5cGVzLnBhcmVuLCBzZWxmLmNoYXIoKSkKKyAgICAg
ICAgICAgIHNlbGYuY29uc3VtZSgpCisgICAgICAgICAgICBzZWxmLnN0YXRlID0gc2VsZi5oZWFk
aW5nX3N0YXRlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnN0YXRlID0gc2VsZi5r
ZXlfc3RhdGUKKworICAgIGRlZiBoZWFkaW5nX3N0YXRlKHNlbGYpOgorICAgICAgICBydiA9ICIi
CisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBjID0gc2VsZi5jaGFyKCkKKyAgICAg
ICAgICAgIGlmIGMgPT0gIlxcIjoKKyAgICAgICAgICAgICAgICBydiArPSBzZWxmLmNvbnN1bWVf
ZXNjYXBlKCkKKyAgICAgICAgICAgIGVsaWYgYyA9PSAiXSI6CisgICAgICAgICAgICAgICAgYnJl
YWsKKyAgICAgICAgICAgIGVsaWYgYyA9PSBlb2w6CisgICAgICAgICAgICAgICAgcmFpc2UgUGFy
c2VFcnJvcihzZWxmLmZpbGVuYW1lLCBzZWxmLmxpbmVfbnVtYmVyLCAiRU9MIGluIGhlYWRpbmci
KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBydiArPSBjCisgICAgICAgICAg
ICAgICAgc2VsZi5jb25zdW1lKCkKKworICAgICAgICB5aWVsZCAodG9rZW5fdHlwZXMuc3RyaW5n
LCBkZWNvZGUocnYpKQorICAgICAgICB5aWVsZCAodG9rZW5fdHlwZXMucGFyZW4sICJdIikKKyAg
ICAgICAgc2VsZi5jb25zdW1lKCkKKyAgICAgICAgc2VsZi5zdGF0ZSA9IHNlbGYubGluZV9lbmRf
c3RhdGUKKyAgICAgICAgc2VsZi5uZXh0X3N0YXRlID0gc2VsZi5kYXRhX2xpbmVfc3RhdGUKKwor
ICAgIGRlZiBrZXlfc3RhdGUoc2VsZik6CisgICAgICAgIHJ2ID0gIiIKKyAgICAgICAgd2hpbGUg
VHJ1ZToKKyAgICAgICAgICAgIGMgPSBzZWxmLmNoYXIoKQorICAgICAgICAgICAgaWYgYyA9PSAi
ICI6CisgICAgICAgICAgICAgICAgc2VsZi5za2lwX3doaXRlc3BhY2UoKQorICAgICAgICAgICAg
ICAgIGlmIHNlbGYuY2hhcigpICE9ICI6IjoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgUGFy
c2VFcnJvcihzZWxmLmZpbGVuYW1lLCBzZWxmLmxpbmVfbnVtYmVyLCAiU3BhY2UgaW4ga2V5IG5h
bWUiKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbGlmIGMgPT0gIjoiOgor
ICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbGlmIGMgPT0gZW9sOgorICAgICAg
ICAgICAgICAgIHJhaXNlIFBhcnNlRXJyb3Ioc2VsZi5maWxlbmFtZSwgc2VsZi5saW5lX251bWJl
ciwgIkVPTCBpbiBrZXkgbmFtZSAobWlzc2luZyAnOic/KSIpCisgICAgICAgICAgICBlbGlmIGMg
PT0gIlxcIjoKKyAgICAgICAgICAgICAgICBydiArPSBzZWxmLmNvbnN1bWVfZXNjYXBlKCkKKyAg
ICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcnYgKz0gYworICAgICAgICAgICAgICAg
IHNlbGYuY29uc3VtZSgpCisgICAgICAgIHlpZWxkICh0b2tlbl90eXBlcy5zdHJpbmcsIGRlY29k
ZShydikpCisgICAgICAgIHlpZWxkICh0b2tlbl90eXBlcy5zZXBhcmF0b3IsICI6IikKKyAgICAg
ICAgc2VsZi5jb25zdW1lKCkKKyAgICAgICAgc2VsZi5zdGF0ZSA9IHNlbGYuYWZ0ZXJfa2V5X3N0
YXRlCisKKyAgICBkZWYgYWZ0ZXJfa2V5X3N0YXRlKHNlbGYpOgorICAgICAgICBzZWxmLnNraXBf
d2hpdGVzcGFjZSgpCisgICAgICAgIGMgPSBzZWxmLmNoYXIoKQorICAgICAgICBpZiBjID09ICIj
IjoKKyAgICAgICAgICAgIHNlbGYubmV4dF9zdGF0ZSA9IHNlbGYuZXhwcl9vcl92YWx1ZV9zdGF0
ZQorICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IHNlbGYuY29tbWVudF9zdGF0ZQorICAgICAgICBl
bGlmIGMgPT0gZW9sOgorICAgICAgICAgICAgc2VsZi5uZXh0X3N0YXRlID0gc2VsZi5leHByX29y
X3ZhbHVlX3N0YXRlCisgICAgICAgICAgICBzZWxmLnN0YXRlID0gc2VsZi5lb2xfc3RhdGUKKyAg
ICAgICAgZWxpZiBjID09ICJbIjoKKyAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBzZWxmLmxpc3Rf
c3RhcnRfc3RhdGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBzZWxm
LnZhbHVlX3N0YXRlCisKKyAgICBkZWYgbGlzdF9zdGFydF9zdGF0ZShzZWxmKToKKyAgICAgICAg
eWllbGQgKHRva2VuX3R5cGVzLmxpc3Rfc3RhcnQsICJbIikKKyAgICAgICAgc2VsZi5jb25zdW1l
KCkKKyAgICAgICAgc2VsZi5zdGF0ZSA9IHNlbGYubGlzdF92YWx1ZV9zdGFydF9zdGF0ZQorCisg
ICAgZGVmIGxpc3RfdmFsdWVfc3RhcnRfc3RhdGUoc2VsZik6CisgICAgICAgIHNlbGYuc2tpcF93
aGl0ZXNwYWNlKCkKKyAgICAgICAgaWYgc2VsZi5jaGFyKCkgPT0gIl0iOgorICAgICAgICAgICAg
c2VsZi5zdGF0ZSA9IHNlbGYubGlzdF9lbmRfc3RhdGUKKyAgICAgICAgZWxpZiBzZWxmLmNoYXIo
KSBpbiAoIiciLCAnIicpOgorICAgICAgICAgICAgcXVvdGVfY2hhciA9IHNlbGYuY2hhcigpCisg
ICAgICAgICAgICBzZWxmLmNvbnN1bWUoKQorICAgICAgICAgICAgeWllbGQgKHRva2VuX3R5cGVz
LnN0cmluZywgc2VsZi5jb25zdW1lX3N0cmluZyhxdW90ZV9jaGFyKSkKKyAgICAgICAgICAgIHNl
bGYuc2tpcF93aGl0ZXNwYWNlKCkKKyAgICAgICAgICAgIGlmIHNlbGYuY2hhcigpID09ICJdIjoK
KyAgICAgICAgICAgICAgICBzZWxmLnN0YXRlID0gc2VsZi5saXN0X2VuZF9zdGF0ZQorICAgICAg
ICAgICAgZWxpZiBzZWxmLmNoYXIoKSAhPSAiLCI6CisgICAgICAgICAgICAgICAgcmFpc2UgUGFy
c2VFcnJvcihzZWxmLmZpbGVuYW1lLCBzZWxmLmxpbmVfbnVtYmVyLCAiSnVuayBhZnRlciBxdW90
ZWQgc3RyaW5nIikKKyAgICAgICAgICAgIHNlbGYuY29uc3VtZSgpCisgICAgICAgIGVsaWYgc2Vs
Zi5jaGFyKCkgPT0gIiMiOgorICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IHNlbGYuY29tbWVudF9z
dGF0ZQorICAgICAgICAgICAgc2VsZi5uZXh0X2xpbmVfc3RhdGUgPSBzZWxmLmxpc3RfdmFsdWVf
c3RhcnRfc3RhdGUKKyAgICAgICAgZWxpZiBzZWxmLmNoYXIoKSA9PSBlb2w6CisgICAgICAgICAg
ICBzZWxmLm5leHRfbGluZV9zdGF0ZSA9IHNlbGYubGlzdF92YWx1ZV9zdGFydF9zdGF0ZQorICAg
ICAgICAgICAgc2VsZi5zdGF0ZSA9IHNlbGYuZW9sX3N0YXRlCisgICAgICAgIGVsaWYgc2VsZi5j
aGFyKCkgPT0gIiwiOgorICAgICAgICAgICAgcmFpc2UgUGFyc2VFcnJvcihzZWxmLmZpbGVuYW1l
LCBzZWxmLmxpbmVfbnVtYmVyLCAiTGlzdCBpdGVtIHN0YXJ0ZWQgd2l0aCBzZXBhcmF0b3IiKQor
ICAgICAgICBlbGlmIHNlbGYuY2hhcigpID09ICJAIjoKKyAgICAgICAgICAgIHNlbGYuc3RhdGUg
PSBzZWxmLmxpc3RfdmFsdWVfYXRvbV9zdGF0ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
c2VsZi5zdGF0ZSA9IHNlbGYubGlzdF92YWx1ZV9zdGF0ZQorCisgICAgZGVmIGxpc3RfdmFsdWVf
c3RhdGUoc2VsZik6CisgICAgICAgIHJ2ID0gIiIKKyAgICAgICAgc3BhY2VzID0gMAorICAgICAg
ICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgYyA9IHNlbGYuY2hhcigpCisgICAgICAgICAgICBp
ZiBjID09ICJcXCI6CisgICAgICAgICAgICAgICAgZXNjYXBlID0gc2VsZi5jb25zdW1lX2VzY2Fw
ZSgpCisgICAgICAgICAgICAgICAgcnYgKz0gZXNjYXBlCisgICAgICAgICAgICBlbGlmIGMgPT0g
ZW9sOgorICAgICAgICAgICAgICAgIHJhaXNlIFBhcnNlRXJyb3Ioc2VsZi5maWxlbmFtZSwgc2Vs
Zi5saW5lX251bWJlciwgIkVPTCBpbiBsaXN0IHZhbHVlIikKKyAgICAgICAgICAgIGVsaWYgYyA9
PSAiIyI6CisgICAgICAgICAgICAgICAgcmFpc2UgUGFyc2VFcnJvcihzZWxmLmZpbGVuYW1lLCBz
ZWxmLmxpbmVfbnVtYmVyLCAiRU9MIGluIGxpc3QgdmFsdWUgKGNvbW1lbnQpIikKKyAgICAgICAg
ICAgIGVsaWYgYyA9PSAiLCI6CisgICAgICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IHNlbGYubGlz
dF92YWx1ZV9zdGFydF9zdGF0ZQorICAgICAgICAgICAgICAgIHNlbGYuY29uc3VtZSgpCisgICAg
ICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsaWYgYyA9PSAiICI6CisgICAgICAgICAg
ICAgICAgc3BhY2VzICs9IDEKKyAgICAgICAgICAgICAgICBzZWxmLmNvbnN1bWUoKQorICAgICAg
ICAgICAgZWxpZiBjID09ICJdIjoKKyAgICAgICAgICAgICAgICBzZWxmLnN0YXRlID0gc2VsZi5s
aXN0X2VuZF9zdGF0ZQorICAgICAgICAgICAgICAgIHNlbGYuY29uc3VtZSgpCisgICAgICAgICAg
ICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcnYgKz0gIiAi
ICogc3BhY2VzCisgICAgICAgICAgICAgICAgc3BhY2VzID0gMAorICAgICAgICAgICAgICAgIHJ2
ICs9IGMKKyAgICAgICAgICAgICAgICBzZWxmLmNvbnN1bWUoKQorCisgICAgICAgIGlmIHJ2Ogor
ICAgICAgICAgICAgeWllbGQgKHRva2VuX3R5cGVzLnN0cmluZywgZGVjb2RlKHJ2KSkKKworICAg
IGRlZiBsaXN0X3ZhbHVlX2F0b21fc3RhdGUoc2VsZik6CisgICAgICAgIHNlbGYuY29uc3VtZSgp
CisgICAgICAgIGZvciBfLCB2YWx1ZSBpbiBzZWxmLmxpc3RfdmFsdWVfc3RhdGUoKToKKyAgICAg
ICAgICAgIHlpZWxkIHRva2VuX3R5cGVzLmF0b20sIHZhbHVlCisKKyAgICBkZWYgbGlzdF9lbmRf
c3RhdGUoc2VsZik6CisgICAgICAgIHNlbGYuY29uc3VtZSgpCisgICAgICAgIHlpZWxkICh0b2tl
bl90eXBlcy5saXN0X2VuZCwgIl0iKQorICAgICAgICBzZWxmLnN0YXRlID0gc2VsZi5saW5lX2Vu
ZF9zdGF0ZQorCisgICAgZGVmIHZhbHVlX3N0YXRlKHNlbGYpOgorICAgICAgICBzZWxmLnNraXBf
d2hpdGVzcGFjZSgpCisgICAgICAgIGlmIHNlbGYuY2hhcigpIGluICgiJyIsICciJyk6CisgICAg
ICAgICAgICBxdW90ZV9jaGFyID0gc2VsZi5jaGFyKCkKKyAgICAgICAgICAgIHNlbGYuY29uc3Vt
ZSgpCisgICAgICAgICAgICB5aWVsZCAodG9rZW5fdHlwZXMuc3RyaW5nLCBzZWxmLmNvbnN1bWVf
c3RyaW5nKHF1b3RlX2NoYXIpKQorICAgICAgICAgICAgaWYgc2VsZi5jaGFyKCkgPT0gIiMiOgor
ICAgICAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBzZWxmLmNvbW1lbnRfc3RhdGUKKyAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IHNlbGYubGluZV9lbmRfc3Rh
dGUKKyAgICAgICAgZWxpZiBzZWxmLmNoYXIoKSA9PSAiQCI6CisgICAgICAgICAgICBzZWxmLmNv
bnN1bWUoKQorICAgICAgICAgICAgZm9yIF8sIHZhbHVlIGluIHNlbGYudmFsdWVfaW5uZXJfc3Rh
dGUoKToKKyAgICAgICAgICAgICAgICB5aWVsZCB0b2tlbl90eXBlcy5hdG9tLCB2YWx1ZQorICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IHNlbGYudmFsdWVfaW5uZXJfc3Rh
dGUKKworICAgIGRlZiB2YWx1ZV9pbm5lcl9zdGF0ZShzZWxmKToKKyAgICAgICAgcnYgPSAiIgor
ICAgICAgICBzcGFjZXMgPSAwCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBjID0g
c2VsZi5jaGFyKCkKKyAgICAgICAgICAgIGlmIGMgPT0gIlxcIjoKKyAgICAgICAgICAgICAgICBy
diArPSBzZWxmLmNvbnN1bWVfZXNjYXBlKCkKKyAgICAgICAgICAgIGVsaWYgYyA9PSAiIyI6Cisg
ICAgICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IHNlbGYuY29tbWVudF9zdGF0ZQorICAgICAgICAg
ICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbGlmIGMgPT0gIiAiOgorICAgICAgICAgICAgICAg
ICMgcHJldmVudCB3aGl0ZXNwYWNlIGJlZm9yZSBjb21tZW50cyBmcm9tIGJlaW5nIGluY2x1ZGVk
IGluIHRoZSB2YWx1ZQorICAgICAgICAgICAgICAgIHNwYWNlcyArPSAxCisgICAgICAgICAgICAg
ICAgc2VsZi5jb25zdW1lKCkKKyAgICAgICAgICAgIGVsaWYgYyA9PSBlb2w6CisgICAgICAgICAg
ICAgICAgc2VsZi5zdGF0ZSA9IHNlbGYubGluZV9lbmRfc3RhdGUKKyAgICAgICAgICAgICAgICBi
cmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBydiArPSAiICIgKiBzcGFj
ZXMKKyAgICAgICAgICAgICAgICBzcGFjZXMgPSAwCisgICAgICAgICAgICAgICAgcnYgKz0gYwor
ICAgICAgICAgICAgICAgIHNlbGYuY29uc3VtZSgpCisgICAgICAgIHlpZWxkICh0b2tlbl90eXBl
cy5zdHJpbmcsIGRlY29kZShydikpCisKKyAgICBkZWYgY29tbWVudF9zdGF0ZShzZWxmKToKKyAg
ICAgICAgd2hpbGUgc2VsZi5jaGFyKCkgaXMgbm90IGVvbDoKKyAgICAgICAgICAgIHNlbGYuY29u
c3VtZSgpCisgICAgICAgIHNlbGYuc3RhdGUgPSBzZWxmLmVvbF9zdGF0ZQorCisgICAgZGVmIGxp
bmVfZW5kX3N0YXRlKHNlbGYpOgorICAgICAgICBzZWxmLnNraXBfd2hpdGVzcGFjZSgpCisgICAg
ICAgIGMgPSBzZWxmLmNoYXIoKQorICAgICAgICBpZiBjID09ICIjIjoKKyAgICAgICAgICAgIHNl
bGYuc3RhdGUgPSBzZWxmLmNvbW1lbnRfc3RhdGUKKyAgICAgICAgZWxpZiBjID09IGVvbDoKKyAg
ICAgICAgICAgIHNlbGYuc3RhdGUgPSBzZWxmLmVvbF9zdGF0ZQorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgcmFpc2UgUGFyc2VFcnJvcihzZWxmLmZpbGVuYW1lLCBzZWxmLmxpbmVfbnVtYmVy
LCAiSnVuayBiZWZvcmUgRU9MICVzIiAlIGMpCisKKyAgICBkZWYgY29uc3VtZV9zdHJpbmcoc2Vs
ZiwgcXVvdGVfY2hhcik6CisgICAgICAgIHJ2ID0gIiIKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAg
ICAgICAgICAgIGMgPSBzZWxmLmNoYXIoKQorICAgICAgICAgICAgaWYgYyA9PSAiXFwiOgorICAg
ICAgICAgICAgICAgIHJ2ICs9IHNlbGYuY29uc3VtZV9lc2NhcGUoKQorICAgICAgICAgICAgZWxp
ZiBjID09IHF1b3RlX2NoYXI6CisgICAgICAgICAgICAgICAgc2VsZi5jb25zdW1lKCkKKyAgICAg
ICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxpZiBjID09IGVvbDoKKyAgICAgICAgICAg
ICAgICByYWlzZSBQYXJzZUVycm9yKHNlbGYuZmlsZW5hbWUsIHNlbGYubGluZV9udW1iZXIsICJF
T0wgaW4gcXVvdGVkIHN0cmluZyIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg
IHJ2ICs9IGMKKyAgICAgICAgICAgICAgICBzZWxmLmNvbnN1bWUoKQorCisgICAgICAgIHJldHVy
biBkZWNvZGUocnYpCisKKyAgICBkZWYgZXhwcl9vcl92YWx1ZV9zdGF0ZShzZWxmKToKKyAgICAg
ICAgaWYgc2VsZi5wZWVrKDMpID09ICJpZiAiOgorICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IHNl
bGYuZXhwcl9zdGF0ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IHNl
bGYudmFsdWVfc3RhdGUKKworICAgIGRlZiBleHByX3N0YXRlKHNlbGYpOgorICAgICAgICBzZWxm
LnNraXBfd2hpdGVzcGFjZSgpCisgICAgICAgIGMgPSBzZWxmLmNoYXIoKQorICAgICAgICBpZiBj
ID09IGVvbDoKKyAgICAgICAgICAgIHJhaXNlIFBhcnNlRXJyb3Ioc2VsZi5maWxlbmFtZSwgc2Vs
Zi5saW5lX251bWJlciwgIkVPTCBpbiBleHByZXNzaW9uIikKKyAgICAgICAgZWxpZiBjIGluICIn
XCIiOgorICAgICAgICAgICAgc2VsZi5jb25zdW1lKCkKKyAgICAgICAgICAgIHlpZWxkICh0b2tl
bl90eXBlcy5zdHJpbmcsIHNlbGYuY29uc3VtZV9zdHJpbmcoYykpCisgICAgICAgIGVsaWYgYyA9
PSAiIyI6CisgICAgICAgICAgICByYWlzZSBQYXJzZUVycm9yKHNlbGYuZmlsZW5hbWUsIHNlbGYu
bGluZV9udW1iZXIsICJDb21tZW50IGJlZm9yZSBlbmQgb2YgZXhwcmVzc2lvbiIpCisgICAgICAg
IGVsaWYgYyA9PSAiOiI6CisgICAgICAgICAgICB5aWVsZCAodG9rZW5fdHlwZXMuc2VwYXJhdG9y
LCBjKQorICAgICAgICAgICAgc2VsZi5jb25zdW1lKCkKKyAgICAgICAgICAgIHNlbGYuc3RhdGUg
PSBzZWxmLnZhbHVlX3N0YXRlCisgICAgICAgIGVsaWYgYyBpbiBwYXJlbnM6CisgICAgICAgICAg
ICBzZWxmLmNvbnN1bWUoKQorICAgICAgICAgICAgeWllbGQgKHRva2VuX3R5cGVzLnBhcmVuLCBj
KQorICAgICAgICBlbGlmIGMgaW4gKCIhIiwgIj0iKToKKyAgICAgICAgICAgIHNlbGYuc3RhdGUg
PSBzZWxmLm9wZXJhdG9yX3N0YXRlCisgICAgICAgIGVsaWYgYyBpbiBkaWdpdHM6CisgICAgICAg
ICAgICBzZWxmLnN0YXRlID0gc2VsZi5kaWdpdF9zdGF0ZQorICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgc2VsZi5zdGF0ZSA9IHNlbGYuaWRlbnRfc3RhdGUKKworICAgIGRlZiBvcGVyYXRvcl9z
dGF0ZShzZWxmKToKKyAgICAgICAgIyBPbmx5IHN5bWJvbGljIG9wZXJhdG9ycworICAgICAgICBp
bmRleF8wID0gc2VsZi5pbmRleAorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgYyA9
IHNlbGYuY2hhcigpCisgICAgICAgICAgICBpZiBjID09IGVvbDoKKyAgICAgICAgICAgICAgICBi
cmVhaworICAgICAgICAgICAgZWxpZiBjIGluIG9wZXJhdG9yX2NoYXJzOgorICAgICAgICAgICAg
ICAgIHNlbGYuY29uc3VtZSgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNl
bGYuc3RhdGUgPSBzZWxmLmV4cHJfc3RhdGUKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAg
ICB5aWVsZCAodG9rZW5fdHlwZXMuaWRlbnQsIHNlbGYubGluZVtpbmRleF8wOnNlbGYuaW5kZXhd
KQorCisgICAgZGVmIGRpZ2l0X3N0YXRlKHNlbGYpOgorICAgICAgICBpbmRleF8wID0gc2VsZi5p
bmRleAorICAgICAgICBzZWVuX2RvdCA9IEZhbHNlCisgICAgICAgIHdoaWxlIFRydWU6CisgICAg
ICAgICAgICBjID0gc2VsZi5jaGFyKCkKKyAgICAgICAgICAgIGlmIGMgPT0gZW9sOgorICAgICAg
ICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbGlmIGMgaW4gZGlnaXRzOgorICAgICAgICAg
ICAgICAgIHNlbGYuY29uc3VtZSgpCisgICAgICAgICAgICBlbGlmIGMgPT0gIi4iOgorICAgICAg
ICAgICAgICAgIGlmIHNlZW5fZG90OgorICAgICAgICAgICAgICAgICAgICByYWlzZSBQYXJzZUVy
cm9yKHNlbGYuZmlsZW5hbWUsIHNlbGYubGluZV9udW1iZXIsICJJbnZhbGlkIG51bWJlciIpCisg
ICAgICAgICAgICAgICAgc2VsZi5jb25zdW1lKCkKKyAgICAgICAgICAgICAgICBzZWVuX2RvdCA9
IFRydWUKKyAgICAgICAgICAgIGVsaWYgYyBpbiBwYXJlbnM6CisgICAgICAgICAgICAgICAgYnJl
YWsKKyAgICAgICAgICAgIGVsaWYgYyBpbiBvcGVyYXRvcl9jaGFyczoKKyAgICAgICAgICAgICAg
ICBicmVhaworICAgICAgICAgICAgZWxpZiBjID09ICIgIjoKKyAgICAgICAgICAgICAgICBicmVh
aworICAgICAgICAgICAgZWxpZiBjID09ICI6IjoKKyAgICAgICAgICAgICAgICBicmVhaworICAg
ICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBQYXJzZUVycm9yKHNlbGYuZmls
ZW5hbWUsIHNlbGYubGluZV9udW1iZXIsICJJbnZhbGlkIGNoYXJhY3RlciBpbiBudW1iZXIiKQor
CisgICAgICAgIHNlbGYuc3RhdGUgPSBzZWxmLmV4cHJfc3RhdGUKKyAgICAgICAgeWllbGQgKHRv
a2VuX3R5cGVzLm51bWJlciwgc2VsZi5saW5lW2luZGV4XzA6c2VsZi5pbmRleF0pCisKKyAgICBk
ZWYgaWRlbnRfc3RhdGUoc2VsZik6CisgICAgICAgIGluZGV4XzAgPSBzZWxmLmluZGV4CisgICAg
ICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBjID0gc2VsZi5jaGFyKCkKKyAgICAgICAgICAg
IGlmIGMgPT0gZW9sOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbGlmIGMg
PT0gIi4iOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbGlmIGMgaW4gcGFy
ZW5zOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbGlmIGMgaW4gb3BlcmF0
b3JfY2hhcnM6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsaWYgYyA9PSAi
ICI6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsaWYgYyA9PSAiOiI6Cisg
ICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAg
c2VsZi5jb25zdW1lKCkKKyAgICAgICAgc2VsZi5zdGF0ZSA9IHNlbGYuZXhwcl9zdGF0ZQorICAg
ICAgICB5aWVsZCAodG9rZW5fdHlwZXMuaWRlbnQsIHNlbGYubGluZVtpbmRleF8wOnNlbGYuaW5k
ZXhdKQorCisgICAgZGVmIGNvbnN1bWVfZXNjYXBlKHNlbGYpOgorICAgICAgICBhc3NlcnQgc2Vs
Zi5jaGFyKCkgPT0gIlxcIgorICAgICAgICBzZWxmLmNvbnN1bWUoKQorICAgICAgICBjID0gc2Vs
Zi5jaGFyKCkKKyAgICAgICAgc2VsZi5jb25zdW1lKCkKKyAgICAgICAgaWYgYyA9PSAieCI6Cisg
ICAgICAgICAgICByZXR1cm4gc2VsZi5kZWNvZGVfZXNjYXBlKDIpCisgICAgICAgIGVsaWYgYyA9
PSAidSI6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5kZWNvZGVfZXNjYXBlKDQpCisgICAgICAg
IGVsaWYgYyA9PSAiVSI6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5kZWNvZGVfZXNjYXBlKDYp
CisgICAgICAgIGVsaWYgYyBpbiBbImEiLCAiYiIsICJmIiwgIm4iLCAiciIsICJ0IiwgInYiXToK
KyAgICAgICAgICAgIHJldHVybiBldmFsKCInXCVzJyIgJSBjKQorICAgICAgICBlbGlmIGMgaXMg
ZW9sOgorICAgICAgICAgICAgcmFpc2UgUGFyc2VFcnJvcihzZWxmLmZpbGVuYW1lLCBzZWxmLmxp
bmVfbnVtYmVyLCAiRU9MIGluIGVzY2FwZSIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBy
ZXR1cm4gYworCisgICAgZGVmIGRlY29kZV9lc2NhcGUoc2VsZiwgbGVuZ3RoKToKKyAgICAgICAg
dmFsdWUgPSAwCisgICAgICAgIGZvciBpIGluIHhyYW5nZShsZW5ndGgpOgorICAgICAgICAgICAg
YyA9IHNlbGYuY2hhcigpCisgICAgICAgICAgICB2YWx1ZSAqPSAxNgorICAgICAgICAgICAgdmFs
dWUgKz0gc2VsZi5lc2NhcGVfdmFsdWUoYykKKyAgICAgICAgICAgIHNlbGYuY29uc3VtZSgpCisK
KyAgICAgICAgcmV0dXJuIHVuaWNocih2YWx1ZSkKKworICAgIGRlZiBlc2NhcGVfdmFsdWUoc2Vs
ZiwgYyk6CisgICAgICAgIGlmICcwJyA8PSBjIDw9ICc5JzoKKyAgICAgICAgICAgIHJldHVybiBv
cmQoYykgLSBvcmQoJzAnKQorICAgICAgICBlbGlmICdhJyA8PSBjIDw9ICdmJzoKKyAgICAgICAg
ICAgIHJldHVybiBvcmQoYykgLSBvcmQoJ2EnKSArIDEwCisgICAgICAgIGVsaWYgJ0EnIDw9IGMg
PD0gJ0YnOgorICAgICAgICAgICAgcmV0dXJuIG9yZChjKSAtIG9yZCgnQScpICsgMTAKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFBhcnNlRXJyb3Ioc2VsZi5maWxlbmFtZSwgc2Vs
Zi5saW5lX251bWJlciwgIkludmFsaWQgY2hhcmFjdGVyIGVzY2FwZSIpCisKKworY2xhc3MgUGFy
c2VyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLnJlc2V0
KCkKKworICAgIGRlZiByZXNldChzZWxmKToKKyAgICAgICAgc2VsZi50b2tlbiA9IE5vbmUKKyAg
ICAgICAgc2VsZi51bmFyeV9vcGVyYXRvcnMgPSAiISIKKyAgICAgICAgc2VsZi5iaW5hcnlfb3Bl
cmF0b3JzID0gZnJvemVuc2V0KFsiJiYiLCAifHwiLCAiPT0iXSkKKyAgICAgICAgc2VsZi50b2tl
bml6ZXIgPSBUb2tlbml6ZXIoKQorICAgICAgICBzZWxmLnRva2VuX2dlbmVyYXRvciA9IE5vbmUK
KyAgICAgICAgc2VsZi50cmVlID0gVHJlZWJ1aWxkZXIoRGF0YU5vZGUoTm9uZSkpCisgICAgICAg
IHNlbGYuZXhwcl9idWlsZGVyID0gTm9uZQorICAgICAgICBzZWxmLmV4cHJfYnVpbGRlcnMgPSBb
XQorCisgICAgZGVmIHBhcnNlKHNlbGYsIGlucHV0KToKKyAgICAgICAgc2VsZi5yZXNldCgpCisg
ICAgICAgIHNlbGYudG9rZW5fZ2VuZXJhdG9yID0gc2VsZi50b2tlbml6ZXIudG9rZW5pemUoaW5w
dXQpCisgICAgICAgIHNlbGYuY29uc3VtZSgpCisgICAgICAgIHNlbGYubWFuaWZlc3QoKQorICAg
ICAgICByZXR1cm4gc2VsZi50cmVlLm5vZGUKKworICAgIGRlZiBjb25zdW1lKHNlbGYpOgorICAg
ICAgICBzZWxmLnRva2VuID0gc2VsZi50b2tlbl9nZW5lcmF0b3IubmV4dCgpCisKKyAgICBkZWYg
ZXhwZWN0KHNlbGYsIHR5cGUsIHZhbHVlPU5vbmUpOgorICAgICAgICBpZiBzZWxmLnRva2VuWzBd
ICE9IHR5cGU6CisgICAgICAgICAgICByYWlzZSBQYXJzZUVycm9yCisgICAgICAgIGlmIHZhbHVl
IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaWYgc2VsZi50b2tlblsxXSAhPSB2YWx1ZToKKyAg
ICAgICAgICAgICAgICByYWlzZSBQYXJzZUVycm9yCisKKyAgICAgICAgc2VsZi5jb25zdW1lKCkK
KworICAgIGRlZiBtYW5pZmVzdChzZWxmKToKKyAgICAgICAgc2VsZi5kYXRhX2Jsb2NrKCkKKyAg
ICAgICAgc2VsZi5leHBlY3QodG9rZW5fdHlwZXMuZW9mKQorCisgICAgZGVmIGRhdGFfYmxvY2so
c2VsZik6CisgICAgICAgIHdoaWxlIHNlbGYudG9rZW5bMF0gPT0gdG9rZW5fdHlwZXMuc3RyaW5n
OgorICAgICAgICAgICAgc2VsZi50cmVlLmFwcGVuZChLZXlWYWx1ZU5vZGUoc2VsZi50b2tlblsx
XSkpCisgICAgICAgICAgICBzZWxmLmNvbnN1bWUoKQorICAgICAgICAgICAgc2VsZi5leHBlY3Qo
dG9rZW5fdHlwZXMuc2VwYXJhdG9yKQorICAgICAgICAgICAgc2VsZi52YWx1ZV9ibG9jaygpCisg
ICAgICAgICAgICBzZWxmLnRyZWUucG9wKCkKKworICAgICAgICB3aGlsZSBzZWxmLnRva2VuID09
ICh0b2tlbl90eXBlcy5wYXJlbiwgIlsiKToKKyAgICAgICAgICAgIHNlbGYuY29uc3VtZSgpCisg
ICAgICAgICAgICBpZiBzZWxmLnRva2VuWzBdICE9IHRva2VuX3R5cGVzLnN0cmluZzoKKyAgICAg
ICAgICAgICAgICByYWlzZSBQYXJzZUVycm9yCisgICAgICAgICAgICBzZWxmLnRyZWUuYXBwZW5k
KERhdGFOb2RlKHNlbGYudG9rZW5bMV0pKQorICAgICAgICAgICAgc2VsZi5jb25zdW1lKCkKKyAg
ICAgICAgICAgIHNlbGYuZXhwZWN0KHRva2VuX3R5cGVzLnBhcmVuLCAiXSIpCisgICAgICAgICAg
ICBpZiBzZWxmLnRva2VuWzBdID09IHRva2VuX3R5cGVzLmdyb3VwX3N0YXJ0OgorICAgICAgICAg
ICAgICAgIHNlbGYuY29uc3VtZSgpCisgICAgICAgICAgICAgICAgc2VsZi5kYXRhX2Jsb2NrKCkK
KyAgICAgICAgICAgICAgICBzZWxmLmVvZl9vcl9lbmRfZ3JvdXAoKQorICAgICAgICAgICAgc2Vs
Zi50cmVlLnBvcCgpCisKKyAgICBkZWYgZW9mX29yX2VuZF9ncm91cChzZWxmKToKKyAgICAgICAg
aWYgc2VsZi50b2tlblswXSAhPSB0b2tlbl90eXBlcy5lb2Y6CisgICAgICAgICAgICBzZWxmLmV4
cGVjdCh0b2tlbl90eXBlcy5ncm91cF9lbmQpCisKKyAgICBkZWYgdmFsdWVfYmxvY2soc2VsZik6
CisgICAgICAgIGlmIHNlbGYudG9rZW5bMF0gPT0gdG9rZW5fdHlwZXMubGlzdF9zdGFydDoKKyAg
ICAgICAgICAgIHNlbGYuY29uc3VtZSgpCisgICAgICAgICAgICBzZWxmLmxpc3RfdmFsdWUoKQor
ICAgICAgICBlbGlmIHNlbGYudG9rZW5bMF0gPT0gdG9rZW5fdHlwZXMuc3RyaW5nOgorICAgICAg
ICAgICAgc2VsZi52YWx1ZSgpCisgICAgICAgIGVsaWYgc2VsZi50b2tlblswXSA9PSB0b2tlbl90
eXBlcy5ncm91cF9zdGFydDoKKyAgICAgICAgICAgIHNlbGYuY29uc3VtZSgpCisgICAgICAgICAg
ICBzZWxmLmV4cHJlc3Npb25fdmFsdWVzKCkKKyAgICAgICAgICAgIGlmIHNlbGYudG9rZW5bMF0g
PT0gdG9rZW5fdHlwZXMuc3RyaW5nOgorICAgICAgICAgICAgICAgIHNlbGYudmFsdWUoKQorICAg
ICAgICAgICAgc2VsZi5lb2Zfb3JfZW5kX2dyb3VwKCkKKyAgICAgICAgZWxpZiBzZWxmLnRva2Vu
WzBdID09IHRva2VuX3R5cGVzLmF0b206CisgICAgICAgICAgICBzZWxmLmF0b20oKQorICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgUGFyc2VFcnJvcgorCisgICAgZGVmIGxpc3RfdmFs
dWUoc2VsZik6CisgICAgICAgIHNlbGYudHJlZS5hcHBlbmQoTGlzdE5vZGUoKSkKKyAgICAgICAg
d2hpbGUgc2VsZi50b2tlblswXSBpbiAodG9rZW5fdHlwZXMuYXRvbSwgdG9rZW5fdHlwZXMuc3Ry
aW5nKToKKyAgICAgICAgICAgIGlmIHNlbGYudG9rZW5bMF0gPT0gdG9rZW5fdHlwZXMuYXRvbToK
KyAgICAgICAgICAgICAgICBzZWxmLmF0b20oKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgICAgICBzZWxmLnZhbHVlKCkKKyAgICAgICAgc2VsZi5leHBlY3QodG9rZW5fdHlwZXMubGlz
dF9lbmQpCisgICAgICAgIHNlbGYudHJlZS5wb3AoKQorCisgICAgZGVmIGV4cHJlc3Npb25fdmFs
dWVzKHNlbGYpOgorICAgICAgICB3aGlsZSBzZWxmLnRva2VuID09ICh0b2tlbl90eXBlcy5pZGVu
dCwgImlmIik6CisgICAgICAgICAgICBzZWxmLmNvbnN1bWUoKQorICAgICAgICAgICAgc2VsZi50
cmVlLmFwcGVuZChDb25kaXRpb25hbE5vZGUoKSkKKyAgICAgICAgICAgIHNlbGYuZXhwcl9zdGFy
dCgpCisgICAgICAgICAgICBzZWxmLmV4cGVjdCh0b2tlbl90eXBlcy5zZXBhcmF0b3IpCisgICAg
ICAgICAgICBpZiBzZWxmLnRva2VuWzBdID09IHRva2VuX3R5cGVzLnN0cmluZzoKKyAgICAgICAg
ICAgICAgICBzZWxmLnZhbHVlKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAg
cmFpc2UgUGFyc2VFcnJvcgorICAgICAgICAgICAgc2VsZi50cmVlLnBvcCgpCisKKyAgICBkZWYg
dmFsdWUoc2VsZik6CisgICAgICAgIHNlbGYudHJlZS5hcHBlbmQoVmFsdWVOb2RlKHNlbGYudG9r
ZW5bMV0pKQorICAgICAgICBzZWxmLmNvbnN1bWUoKQorICAgICAgICBzZWxmLnRyZWUucG9wKCkK
KworICAgIGRlZiBhdG9tKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnRva2VuWzFdIG5vdCBpbiBh
dG9tczoKKyAgICAgICAgICAgIHJhaXNlIFBhcnNlRXJyb3Ioc2VsZi50b2tlbml6ZXIuZmlsZW5h
bWUsIHNlbGYudG9rZW5pemVyLmxpbmVfbnVtYmVyLCAiVW5yZWNvZ25pc2VkIHN5bWJvbCBAJXMi
ICUgc2VsZi50b2tlblsxXSkKKyAgICAgICAgc2VsZi50cmVlLmFwcGVuZChBdG9tTm9kZShhdG9t
c1tzZWxmLnRva2VuWzFdXSkpCisgICAgICAgIHNlbGYuY29uc3VtZSgpCisgICAgICAgIHNlbGYu
dHJlZS5wb3AoKQorCisgICAgZGVmIGV4cHJfc3RhcnQoc2VsZik6CisgICAgICAgIHNlbGYuZXhw
cl9idWlsZGVyID0gRXhwcmVzc2lvbkJ1aWxkZXIoc2VsZi50b2tlbml6ZXIpCisgICAgICAgIHNl
bGYuZXhwcl9idWlsZGVycy5hcHBlbmQoc2VsZi5leHByX2J1aWxkZXIpCisgICAgICAgIHNlbGYu
ZXhwcigpCisgICAgICAgIGV4cHJlc3Npb24gPSBzZWxmLmV4cHJfYnVpbGRlci5maW5pc2goKQor
ICAgICAgICBzZWxmLmV4cHJfYnVpbGRlcnMucG9wKCkKKyAgICAgICAgc2VsZi5leHByX2J1aWxk
ZXIgPSBzZWxmLmV4cHJfYnVpbGRlcnNbLTFdIGlmIHNlbGYuZXhwcl9idWlsZGVycyBlbHNlIE5v
bmUKKyAgICAgICAgaWYgc2VsZi5leHByX2J1aWxkZXI6CisgICAgICAgICAgICBzZWxmLmV4cHJf
YnVpbGRlci5vcGVyYW5kc1stMV0uY2hpbGRyZW5bLTFdLmFwcGVuZChleHByZXNzaW9uKQorICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi50cmVlLmFwcGVuZChleHByZXNzaW9uKQorICAg
ICAgICAgICAgc2VsZi50cmVlLnBvcCgpCisKKyAgICBkZWYgZXhwcihzZWxmKToKKyAgICAgICAg
c2VsZi5leHByX29wZXJhbmQoKQorICAgICAgICB3aGlsZSAoc2VsZi50b2tlblswXSA9PSB0b2tl
bl90eXBlcy5pZGVudCBhbmQgc2VsZi50b2tlblsxXSBpbiBiaW5hcnlfb3BlcmF0b3JzKToKKyAg
ICAgICAgICAgIHNlbGYuZXhwcl9iaW5fb3AoKQorICAgICAgICAgICAgc2VsZi5leHByX29wZXJh
bmQoKQorCisgICAgZGVmIGV4cHJfb3BlcmFuZChzZWxmKToKKyAgICAgICAgaWYgc2VsZi50b2tl
biA9PSAodG9rZW5fdHlwZXMucGFyZW4sICIoIik6CisgICAgICAgICAgICBzZWxmLmNvbnN1bWUo
KQorICAgICAgICAgICAgc2VsZi5leHByX2J1aWxkZXIubGVmdF9wYXJlbigpCisgICAgICAgICAg
ICBzZWxmLmV4cHIoKQorICAgICAgICAgICAgc2VsZi5leHBlY3QodG9rZW5fdHlwZXMucGFyZW4s
ICIpIikKKyAgICAgICAgICAgIHNlbGYuZXhwcl9idWlsZGVyLnJpZ2h0X3BhcmVuKCkKKyAgICAg
ICAgZWxpZiBzZWxmLnRva2VuWzBdID09IHRva2VuX3R5cGVzLmlkZW50IGFuZCBzZWxmLnRva2Vu
WzFdIGluIHVuYXJ5X29wZXJhdG9yczoKKyAgICAgICAgICAgIHNlbGYuZXhwcl91bmFyeV9vcCgp
CisgICAgICAgICAgICBzZWxmLmV4cHJfb3BlcmFuZCgpCisgICAgICAgIGVsaWYgc2VsZi50b2tl
blswXSBpbiBbdG9rZW5fdHlwZXMuc3RyaW5nLCB0b2tlbl90eXBlcy5pZGVudF06CisgICAgICAg
ICAgICBzZWxmLmV4cHJfdmFsdWUoKQorICAgICAgICBlbGlmIHNlbGYudG9rZW5bMF0gPT0gdG9r
ZW5fdHlwZXMubnVtYmVyOgorICAgICAgICAgICAgc2VsZi5leHByX251bWJlcigpCisgICAgICAg
IGVsc2U6CisgICAgICAgICAgICByYWlzZSBQYXJzZUVycm9yKHNlbGYudG9rZW5pemVyLmZpbGVu
YW1lLCBzZWxmLnRva2VuaXplci5saW5lX251bWJlciwgIlVucmVjb2duaXNlZCBvcGVyYW5kIikK
KworICAgIGRlZiBleHByX3VuYXJ5X29wKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnRva2VuWzFd
IGluIHVuYXJ5X29wZXJhdG9yczoKKyAgICAgICAgICAgIHNlbGYuZXhwcl9idWlsZGVyLnB1c2hf
b3BlcmF0b3IoVW5hcnlPcGVyYXRvck5vZGUoc2VsZi50b2tlblsxXSkpCisgICAgICAgICAgICBz
ZWxmLmNvbnN1bWUoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgUGFyc2VFcnJv
cihzZWxmLnRva2VuaXplci5maWxlbmFtZSwgc2VsZi50b2tlbml6ZXIubGluZV9udW1iZXIsICJF
eHBlY3RlZCB1bmFyeSBvcGVyYXRvciIpCisKKyAgICBkZWYgZXhwcl9iaW5fb3Aoc2VsZik6Cisg
ICAgICAgIGlmIHNlbGYudG9rZW5bMV0gaW4gYmluYXJ5X29wZXJhdG9yczoKKyAgICAgICAgICAg
IHNlbGYuZXhwcl9idWlsZGVyLnB1c2hfb3BlcmF0b3IoQmluYXJ5T3BlcmF0b3JOb2RlKHNlbGYu
dG9rZW5bMV0pKQorICAgICAgICAgICAgc2VsZi5jb25zdW1lKCkKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIHJhaXNlIFBhcnNlRXJyb3Ioc2VsZi50b2tlbml6ZXIuZmlsZW5hbWUsIHNlbGYu
dG9rZW5pemVyLmxpbmVfbnVtYmVyLCAiRXhwZWN0ZWQgYmluYXJ5IG9wZXJhdG9yIikKKworICAg
IGRlZiBleHByX3ZhbHVlKHNlbGYpOgorICAgICAgICBub2RlX3R5cGUgPSB7dG9rZW5fdHlwZXMu
c3RyaW5nOiBTdHJpbmdOb2RlLAorICAgICAgICAgICAgICAgICAgICAgdG9rZW5fdHlwZXMuaWRl
bnQ6IFZhcmlhYmxlTm9kZX1bc2VsZi50b2tlblswXV0KKyAgICAgICAgc2VsZi5leHByX2J1aWxk
ZXIucHVzaF9vcGVyYW5kKG5vZGVfdHlwZShzZWxmLnRva2VuWzFdKSkKKyAgICAgICAgc2VsZi5j
b25zdW1lKCkKKyAgICAgICAgaWYgc2VsZi50b2tlbiA9PSAodG9rZW5fdHlwZXMucGFyZW4sICJb
Iik6CisgICAgICAgICAgICBzZWxmLmNvbnN1bWUoKQorICAgICAgICAgICAgc2VsZi5leHByX2J1
aWxkZXIub3BlcmFuZHNbLTFdLmFwcGVuZChJbmRleE5vZGUoKSkKKyAgICAgICAgICAgIHNlbGYu
ZXhwcl9zdGFydCgpCisgICAgICAgICAgICBzZWxmLmV4cGVjdCh0b2tlbl90eXBlcy5wYXJlbiwg
Il0iKQorCisgICAgZGVmIGV4cHJfbnVtYmVyKHNlbGYpOgorICAgICAgICBzZWxmLmV4cHJfYnVp
bGRlci5wdXNoX29wZXJhbmQoTnVtYmVyTm9kZShzZWxmLnRva2VuWzFdKSkKKyAgICAgICAgc2Vs
Zi5jb25zdW1lKCkKKworCitjbGFzcyBUcmVlYnVpbGRlcihvYmplY3QpOgorICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCByb290KToKKyAgICAgICAgc2VsZi5yb290ID0gcm9vdAorICAgICAgICBzZWxm
Lm5vZGUgPSByb290CisKKyAgICBkZWYgYXBwZW5kKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxm
Lm5vZGUuYXBwZW5kKG5vZGUpCisgICAgICAgIHNlbGYubm9kZSA9IG5vZGUKKyAgICAgICAgcmV0
dXJuIG5vZGUKKworICAgIGRlZiBwb3Aoc2VsZik6CisgICAgICAgIG5vZGUgPSBzZWxmLm5vZGUK
KyAgICAgICAgc2VsZi5ub2RlID0gc2VsZi5ub2RlLnBhcmVudAorICAgICAgICByZXR1cm4gbm9k
ZQorCisKK2NsYXNzIEV4cHJlc3Npb25CdWlsZGVyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIHRva2VuaXplcik6CisgICAgICAgIHNlbGYub3BlcmFuZHMgPSBbXQorICAgICAgICBz
ZWxmLm9wZXJhdG9ycyA9IFtOb25lXQorICAgICAgICBzZWxmLnRva2VuaXplciA9IHRva2VuaXpl
cgorCisgICAgZGVmIGZpbmlzaChzZWxmKToKKyAgICAgICAgd2hpbGUgc2VsZi5vcGVyYXRvcnNb
LTFdIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5wb3Bfb3BlcmF0b3IoKQorICAgICAg
ICBydiA9IHNlbGYucG9wX29wZXJhbmQoKQorICAgICAgICBhc3NlcnQgc2VsZi5pc19lbXB0eSgp
CisgICAgICAgIHJldHVybiBydgorCisgICAgZGVmIGxlZnRfcGFyZW4oc2VsZik6CisgICAgICAg
IHNlbGYub3BlcmF0b3JzLmFwcGVuZChOb25lKQorCisgICAgZGVmIHJpZ2h0X3BhcmVuKHNlbGYp
OgorICAgICAgICB3aGlsZSBzZWxmLm9wZXJhdG9yc1stMV0gaXMgbm90IE5vbmU6CisgICAgICAg
ICAgICBzZWxmLnBvcF9vcGVyYXRvcigpCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5vcGVyYXRv
cnM6CisgICAgICAgICAgICAgICAgcmFpc2UgUGFyc2VFcnJvcihzZWxmLnRva2VuaXplci5maWxl
bmFtZSwgc2VsZi50b2tlbml6ZXIubGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJVbmJhbGFuY2VkIHBhcmVucyIpCisKKyAgICAgICAgYXNzZXJ0IHNlbGYub3BlcmF0b3Jz
LnBvcCgpIGlzIE5vbmUKKworICAgIGRlZiBwdXNoX29wZXJhdG9yKHNlbGYsIG9wZXJhdG9yKToK
KyAgICAgICAgYXNzZXJ0IG9wZXJhdG9yIGlzIG5vdCBOb25lCisgICAgICAgIHdoaWxlIHNlbGYu
cHJlY2VkZW5jZShzZWxmLm9wZXJhdG9yc1stMV0pID4gc2VsZi5wcmVjZWRlbmNlKG9wZXJhdG9y
KToKKyAgICAgICAgICAgIHNlbGYucG9wX29wZXJhdG9yKCkKKworICAgICAgICBzZWxmLm9wZXJh
dG9ycy5hcHBlbmQob3BlcmF0b3IpCisKKyAgICBkZWYgcG9wX29wZXJhdG9yKHNlbGYpOgorICAg
ICAgICBvcGVyYXRvciA9IHNlbGYub3BlcmF0b3JzLnBvcCgpCisgICAgICAgIGlmIGlzaW5zdGFu
Y2Uob3BlcmF0b3IsIEJpbmFyeU9wZXJhdG9yTm9kZSk6CisgICAgICAgICAgICBvcGVyYW5kXzEg
PSBzZWxmLm9wZXJhbmRzLnBvcCgpCisgICAgICAgICAgICBvcGVyYW5kXzAgPSBzZWxmLm9wZXJh
bmRzLnBvcCgpCisgICAgICAgICAgICBzZWxmLm9wZXJhbmRzLmFwcGVuZChCaW5hcnlFeHByZXNz
aW9uTm9kZShvcGVyYXRvciwgb3BlcmFuZF8wLCBvcGVyYW5kXzEpKQorICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgb3BlcmFuZF8wID0gc2VsZi5vcGVyYW5kcy5wb3AoKQorICAgICAgICAgICAg
c2VsZi5vcGVyYW5kcy5hcHBlbmQoVW5hcnlFeHByZXNzaW9uTm9kZShvcGVyYXRvciwgb3BlcmFu
ZF8wKSkKKworICAgIGRlZiBwdXNoX29wZXJhbmQoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYu
b3BlcmFuZHMuYXBwZW5kKG5vZGUpCisKKyAgICBkZWYgcG9wX29wZXJhbmQoc2VsZik6CisgICAg
ICAgIHJldHVybiBzZWxmLm9wZXJhbmRzLnBvcCgpCisKKyAgICBkZWYgaXNfZW1wdHkoc2VsZik6
CisgICAgICAgIHJldHVybiBsZW4oc2VsZi5vcGVyYW5kcykgPT0gMCBhbmQgYWxsKGl0ZW0gaXMg
Tm9uZSBmb3IgaXRlbSBpbiBzZWxmLm9wZXJhdG9ycykKKworICAgIGRlZiBwcmVjZWRlbmNlKHNl
bGYsIG9wZXJhdG9yKToKKyAgICAgICAgaWYgb3BlcmF0b3IgaXMgTm9uZToKKyAgICAgICAgICAg
IHJldHVybiAwCisgICAgICAgIHJldHVybiBwcmVjZWRlbmNlKG9wZXJhdG9yKQorCisKK2RlZiBw
YXJzZShzdHJlYW0pOgorICAgIHAgPSBQYXJzZXIoKQorICAgIHJldHVybiBwLnBhcnNlKHN0cmVh
bSkKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5u
ZXIvd3B0cnVubmVyL3dwdG1hbmlmZXN0L3NlcmlhbGl6ZXIucHkgYi9XZWJEcml2ZXJUZXN0cy9p
bXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci93cHRtYW5pZmVzdC9zZXJpYWxp
emVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41MjIwM2FiMjQw
YQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93
cHRydW5uZXIvd3B0cnVubmVyL3dwdG1hbmlmZXN0L3NlcmlhbGl6ZXIucHkKQEAgLTAsMCArMSwx
MzYgQEAKK2Zyb20gbm9kZSBpbXBvcnQgTm9kZVZpc2l0b3IsIFZhbHVlTm9kZSwgTGlzdE5vZGUs
IEJpbmFyeUV4cHJlc3Npb25Ob2RlCitmcm9tIHBhcnNlciBpbXBvcnQgYXRvbXMsIHByZWNlZGVu
Y2UKKworYXRvbV9uYW1lcyA9IHt2OiJAJXMiICUgayBmb3IgKGssdikgaW4gYXRvbXMuaXRlcml0
ZW1zKCl9CisKK25hbWVkX2VzY2FwZXMgPSBzZXQoWyJcYSIsICJcYiIsICJcZiIsICJcbiIsICJc
ciIsICJcdCIsICJcdiJdKQorCitkZWYgZXNjYXBlKHN0cmluZywgZXh0cmFzPSIiKToKKyAgICBy
diA9ICIiCisgICAgZm9yIGMgaW4gc3RyaW5nOgorICAgICAgICBpZiBjIGluIG5hbWVkX2VzY2Fw
ZXM6CisgICAgICAgICAgICBydiArPSBjLmVuY29kZSgidW5pY29kZV9lc2NhcGUiKQorICAgICAg
ICBlbGlmIGMgPT0gIlxcIjoKKyAgICAgICAgICAgIHJ2ICs9ICJcXFxcIgorICAgICAgICBlbGlm
IGMgPCAnXHgyMCc6CisgICAgICAgICAgICBydiArPSAiXFx4JTAyeCIgJSBvcmQoYykKKyAgICAg
ICAgZWxpZiBjIGluIGV4dHJhczoKKyAgICAgICAgICAgIHJ2ICs9ICJcXCIgKyBjCisgICAgICAg
IGVsc2U6CisgICAgICAgICAgICBydiArPSBjCisgICAgcmV0dXJuIHJ2LmVuY29kZSgidXRmOCIp
CisKKworY2xhc3MgTWFuaWZlc3RTZXJpYWxpemVyKE5vZGVWaXNpdG9yKToKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgc2tpcF9lbXB0eV9kYXRhPUZhbHNlKToKKyAgICAgICAgc2VsZi5za2lwX2Vt
cHR5X2RhdGEgPSBza2lwX2VtcHR5X2RhdGEKKworICAgIGRlZiBzZXJpYWxpemUoc2VsZiwgcm9v
dCk6CisgICAgICAgIHNlbGYuaW5kZW50ID0gMgorICAgICAgICBydiA9ICJcbiIuam9pbihzZWxm
LnZpc2l0KHJvb3QpKQorICAgICAgICBpZiBydlstMV0gIT0gIlxuIjoKKyAgICAgICAgICAgIHJ2
ID0gcnYgKyAiXG4iCisgICAgICAgIHJldHVybiBydgorCisgICAgZGVmIHZpc2l0X0RhdGFOb2Rl
KHNlbGYsIG5vZGUpOgorICAgICAgICBydiA9IFtdCisgICAgICAgIGlmIG5vdCBzZWxmLnNraXBf
ZW1wdHlfZGF0YSBvciBub2RlLmNoaWxkcmVuOgorICAgICAgICAgICAgaWYgbm9kZS5kYXRhOgor
ICAgICAgICAgICAgICAgIHJ2LmFwcGVuZCgiWyVzXSIgJSBlc2NhcGUobm9kZS5kYXRhLCBleHRy
YXM9Il0iKSkKKyAgICAgICAgICAgICAgICBpbmRlbnQgPSBzZWxmLmluZGVudCAqICIgIgorICAg
ICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpbmRlbnQgPSAiIgorCisgICAgICAgICAg
ICBmb3IgY2hpbGQgaW4gbm9kZS5jaGlsZHJlbjoKKyAgICAgICAgICAgICAgICBydi5leHRlbmQo
IiVzJXMiICUgKGluZGVudCBpZiBpdGVtIGVsc2UgIiIsIGl0ZW0pIGZvciBpdGVtIGluIHNlbGYu
dmlzaXQoY2hpbGQpKQorCisgICAgICAgICAgICBpZiBub2RlLnBhcmVudDoKKyAgICAgICAgICAg
ICAgICBydi5hcHBlbmQoIiIpCisKKyAgICAgICAgcmV0dXJuIHJ2CisKKyAgICBkZWYgdmlzaXRf
S2V5VmFsdWVOb2RlKHNlbGYsIG5vZGUpOgorICAgICAgICBydiA9IFtlc2NhcGUobm9kZS5kYXRh
LCAiOiIpICsgIjoiXQorICAgICAgICBpbmRlbnQgPSAiICIgKiBzZWxmLmluZGVudAorCisgICAg
ICAgIGlmIGxlbihub2RlLmNoaWxkcmVuKSA9PSAxIGFuZCBpc2luc3RhbmNlKG5vZGUuY2hpbGRy
ZW5bMF0sIChWYWx1ZU5vZGUsIExpc3ROb2RlKSk6CisgICAgICAgICAgICBydlswXSArPSAiICVz
IiAlIHNlbGYudmlzaXQobm9kZS5jaGlsZHJlblswXSlbMF0KKyAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgIGZvciBjaGlsZCBpbiBub2RlLmNoaWxkcmVuOgorICAgICAgICAgICAgICAgIHJ2LmFw
cGVuZChpbmRlbnQgKyBzZWxmLnZpc2l0KGNoaWxkKVswXSkKKworICAgICAgICByZXR1cm4gcnYK
KworICAgIGRlZiB2aXNpdF9MaXN0Tm9kZShzZWxmLCBub2RlKToKKyAgICAgICAgcnYgPSBbIlsi
XQorICAgICAgICBydi5leHRlbmQoIiwgIi5qb2luKHNlbGYudmlzaXQoY2hpbGQpWzBdIGZvciBj
aGlsZCBpbiBub2RlLmNoaWxkcmVuKSkKKyAgICAgICAgcnYuYXBwZW5kKCJdIikKKyAgICAgICAg
cmV0dXJuIFsiIi5qb2luKHJ2KV0KKworICAgIGRlZiB2aXNpdF9WYWx1ZU5vZGUoc2VsZiwgbm9k
ZSk6CisgICAgICAgIGlmICIjIiBpbiBub2RlLmRhdGEgb3IgKGlzaW5zdGFuY2Uobm9kZS5wYXJl
bnQsIExpc3ROb2RlKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCIsIiBp
biBub2RlLmRhdGEgb3IgIl0iIGluIG5vZGUuZGF0YSkpOgorICAgICAgICAgICAgaWYgIlwiIiBp
biBub2RlLmRhdGE6CisgICAgICAgICAgICAgICAgcXVvdGUgPSAiJyIKKyAgICAgICAgICAgIGVs
c2U6CisgICAgICAgICAgICAgICAgcXVvdGUgPSAiXCIiCisgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICBxdW90ZSA9ICIiCisgICAgICAgIHJldHVybiBbcXVvdGUgKyBlc2NhcGUobm9kZS5kYXRh
LCBleHRyYXM9cXVvdGUpICsgcXVvdGVdCisKKyAgICBkZWYgdmlzaXRfQXRvbU5vZGUoc2VsZiwg
bm9kZSk6CisgICAgICAgIHJldHVybiBbYXRvbV9uYW1lc1tub2RlLmRhdGFdXQorCisgICAgZGVm
IHZpc2l0X0NvbmRpdGlvbmFsTm9kZShzZWxmLCBub2RlKToKKyAgICAgICAgcmV0dXJuIFsiaWYg
JXM6ICVzIiAlIHR1cGxlKHNlbGYudmlzaXQoaXRlbSlbMF0gZm9yIGl0ZW0gaW4gbm9kZS5jaGls
ZHJlbildCisKKyAgICBkZWYgdmlzaXRfU3RyaW5nTm9kZShzZWxmLCBub2RlKToKKyAgICAgICAg
cnYgPSBbIlwiJXNcIiIgJSBlc2NhcGUobm9kZS5kYXRhLCBleHRyYXM9IlwiIildCisgICAgICAg
IGZvciBjaGlsZCBpbiBub2RlLmNoaWxkcmVuOgorICAgICAgICAgICAgcnZbMF0gKz0gc2VsZi52
aXNpdChjaGlsZClbMF0KKyAgICAgICAgcmV0dXJuIHJ2CisKKyAgICBkZWYgdmlzaXRfTnVtYmVy
Tm9kZShzZWxmLCBub2RlKToKKyAgICAgICAgcmV0dXJuIFtzdHIobm9kZS5kYXRhKV0KKworICAg
IGRlZiB2aXNpdF9WYXJpYWJsZU5vZGUoc2VsZiwgbm9kZSk6CisgICAgICAgIHJ2ID0gZXNjYXBl
KG5vZGUuZGF0YSkKKyAgICAgICAgZm9yIGNoaWxkIGluIG5vZGUuY2hpbGRyZW46CisgICAgICAg
ICAgICBydiArPSBzZWxmLnZpc2l0KGNoaWxkKQorICAgICAgICByZXR1cm4gW3J2XQorCisgICAg
ZGVmIHZpc2l0X0luZGV4Tm9kZShzZWxmLCBub2RlKToKKyAgICAgICAgYXNzZXJ0IGxlbihub2Rl
LmNoaWxkcmVuKSA9PSAxCisgICAgICAgIHJldHVybiBbIlslc10iICUgc2VsZi52aXNpdChub2Rl
LmNoaWxkcmVuWzBdKVswXV0KKworICAgIGRlZiB2aXNpdF9VbmFyeUV4cHJlc3Npb25Ob2RlKHNl
bGYsIG5vZGUpOgorICAgICAgICBjaGlsZHJlbiA9IFtdCisgICAgICAgIGZvciBjaGlsZCBpbiBu
b2RlLmNoaWxkcmVuOgorICAgICAgICAgICAgY2hpbGRfc3RyID0gc2VsZi52aXNpdChjaGlsZClb
MF0KKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoY2hpbGQsIEJpbmFyeUV4cHJlc3Npb25Ob2Rl
KToKKyAgICAgICAgICAgICAgICBjaGlsZF9zdHIgPSAiKCVzKSIgJSBjaGlsZF9zdHIKKyAgICAg
ICAgICAgIGNoaWxkcmVuLmFwcGVuZChjaGlsZF9zdHIpCisgICAgICAgIHJldHVybiBbIiAiLmpv
aW4oY2hpbGRyZW4pXQorCisgICAgZGVmIHZpc2l0X0JpbmFyeUV4cHJlc3Npb25Ob2RlKHNlbGYs
IG5vZGUpOgorICAgICAgICBhc3NlcnQgbGVuKG5vZGUuY2hpbGRyZW4pID09IDMKKyAgICAgICAg
Y2hpbGRyZW4gPSBbXQorICAgICAgICBmb3IgY2hpbGRfaW5kZXggaW4gWzEsIDAsIDJdOgorICAg
ICAgICAgICAgY2hpbGQgPSBub2RlLmNoaWxkcmVuW2NoaWxkX2luZGV4XQorICAgICAgICAgICAg
Y2hpbGRfc3RyID0gc2VsZi52aXNpdChjaGlsZClbMF0KKyAgICAgICAgICAgIGlmIChpc2luc3Rh
bmNlKGNoaWxkLCBCaW5hcnlFeHByZXNzaW9uTm9kZSkgYW5kCisgICAgICAgICAgICAgICAgcHJl
Y2VkZW5jZShub2RlLmNoaWxkcmVuWzBdKSA8IHByZWNlZGVuY2UoY2hpbGQuY2hpbGRyZW5bMF0p
KToKKyAgICAgICAgICAgICAgICBjaGlsZF9zdHIgPSAiKCVzKSIgJSBjaGlsZF9zdHIKKyAgICAg
ICAgICAgIGNoaWxkcmVuLmFwcGVuZChjaGlsZF9zdHIpCisgICAgICAgIHJldHVybiBbIiAiLmpv
aW4oY2hpbGRyZW4pXQorCisgICAgZGVmIHZpc2l0X1VuYXJ5T3BlcmF0b3JOb2RlKHNlbGYsIG5v
ZGUpOgorICAgICAgICByZXR1cm4gW3N0cihub2RlLmRhdGEpXQorCisgICAgZGVmIHZpc2l0X0Jp
bmFyeU9wZXJhdG9yTm9kZShzZWxmLCBub2RlKToKKyAgICAgICAgcmV0dXJuIFtzdHIobm9kZS5k
YXRhKV0KKworCitkZWYgc2VyaWFsaXplKHRyZWUsICphcmdzLCAqKmt3YXJncyk6CisgICAgcyA9
IE1hbmlmZXN0U2VyaWFsaXplcigqYXJncywgKiprd2FyZ3MpCisgICAgcmV0dXJuIHMuc2VyaWFs
aXplKHRyZWUpCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMv
d3B0cnVubmVyL3dwdHJ1bm5lci93cHRtYW5pZmVzdC90ZXN0cy9fX2luaXRfXy5weSBiL1dlYkRy
aXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3dwdG1hbmlm
ZXN0L3Rlc3RzL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi5lNjlkZTI5YmIyZApkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNj
L3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvd3B0bWFuaWZlc3QvdGVzdHMvdGVzdF9jb25kaXRp
b25hbC5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0
cnVubmVyL3dwdG1hbmlmZXN0L3Rlc3RzL3Rlc3RfY29uZGl0aW9uYWwucHkKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmQ5ZmZkZjI1NTA3Ci0tLSAvZGV2L251bGwKKysr
IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIv
d3B0bWFuaWZlc3QvdGVzdHMvdGVzdF9jb25kaXRpb25hbC5weQpAQCAtMCwwICsxLDE0MyBAQAor
aW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gY1N0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworCitmcm9t
IC4uYmFja2VuZHMgaW1wb3J0IGNvbmRpdGlvbmFsCitmcm9tIC4ubm9kZSBpbXBvcnQgQmluYXJ5
RXhwcmVzc2lvbk5vZGUsIEJpbmFyeU9wZXJhdG9yTm9kZSwgVmFyaWFibGVOb2RlLCBOdW1iZXJO
b2RlCisKKworY2xhc3MgVGVzdENvbmRpdGlvbmFsKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBk
ZWYgY29tcGlsZShzZWxmLCBpbnB1dF90ZXh0KToKKyAgICAgICAgcmV0dXJuIGNvbmRpdGlvbmFs
LmNvbXBpbGUoaW5wdXRfdGV4dCkKKworICAgIGRlZiB0ZXN0X2dldF8wKHNlbGYpOgorICAgICAg
ICBkYXRhID0gIiIiCitrZXk6IHZhbHVlCisKK1tIZWFkaW5nIDFdCisgIG90aGVyX2tleToKKyAg
ICBpZiBhID09IDE6IHZhbHVlXzEKKyAgICBpZiBhID09IDI6IHZhbHVlXzIKKyAgICB2YWx1ZV8z
CisiIiIKKworICAgICAgICBtYW5pZmVzdCA9IHNlbGYuY29tcGlsZShkYXRhKQorCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWxzKG1hbmlmZXN0LmdldCgia2V5IiksICJ2YWx1ZSIpCisgICAgICAg
IGNoaWxkcmVuID0gbGlzdChpdGVtIGZvciBpdGVtIGluIG1hbmlmZXN0Lml0ZXJjaGlsZHJlbigp
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oY2hpbGRyZW4pLCAxKQorICAgICAgICBz
ZWN0aW9uID0gY2hpbGRyZW5bMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VjdGlvbi5u
YW1lLCAiSGVhZGluZyAxIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWN0aW9uLmdl
dCgib3RoZXJfa2V5IiwgeyJhIjogMX0pLCAidmFsdWVfMSIpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWxzKHNlY3Rpb24uZ2V0KCJvdGhlcl9rZXkiLCB7ImEiOiAyfSksICJ2YWx1ZV8yIikKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VjdGlvbi5nZXQoIm90aGVyX2tleSIsIHsiYSI6IDd9
KSwgInZhbHVlXzMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWN0aW9uLmdldCgia2V5
IiksICJ2YWx1ZSIpCisKKyAgICBkZWYgdGVzdF9nZXRfMShzZWxmKToKKyAgICAgICAgZGF0YSA9
ICIiIgora2V5OiB2YWx1ZQorCitbSGVhZGluZyAxXQorICBvdGhlcl9rZXk6CisgICAgaWYgYSA9
PSAiMSI6IHZhbHVlXzEKKyAgICBpZiBhID09IDI6IHZhbHVlXzIKKyAgICB2YWx1ZV8zCisiIiIK
KworICAgICAgICBtYW5pZmVzdCA9IHNlbGYuY29tcGlsZShkYXRhKQorCisgICAgICAgIGNoaWxk
cmVuID0gbGlzdChpdGVtIGZvciBpdGVtIGluIG1hbmlmZXN0Lml0ZXJjaGlsZHJlbigpKQorICAg
ICAgICBzZWN0aW9uID0gY2hpbGRyZW5bMF0KKworICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhz
ZWN0aW9uLmdldCgib3RoZXJfa2V5IiwgeyJhIjogIjEifSksICJ2YWx1ZV8xIikKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbHMoc2VjdGlvbi5nZXQoIm90aGVyX2tleSIsIHsiYSI6IDF9KSwgInZh
bHVlXzMiKQorCisgICAgZGVmIHRlc3RfZ2V0XzIoc2VsZik6CisgICAgICAgIGRhdGEgPSAiIiIK
K2tleToKKyAgaWYgYVsxXSA9PSAiYiI6IHZhbHVlXzEKKyAgaWYgYVsxXSA9PSAyOiB2YWx1ZV8y
CisgIHZhbHVlXzMKKyIiIgorCisgICAgICAgIG1hbmlmZXN0ID0gc2VsZi5jb21waWxlKGRhdGEp
CisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWFuaWZlc3QuZ2V0KCJrZXkiLCB7ImEiOiAi
YWIifSksICJ2YWx1ZV8xIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWFuaWZlc3QuZ2V0
KCJrZXkiLCB7ImEiOiBbMSwgMl19KSwgInZhbHVlXzIiKQorCisgICAgZGVmIHRlc3RfZ2V0XzMo
c2VsZik6CisgICAgICAgIGRhdGEgPSAiIiIKK2tleToKKyAgaWYgYVsxXSA9PSAiYWIiWzFdOiB2
YWx1ZV8xCisgIGlmIGFbMV0gPT0gMjogdmFsdWVfMgorICB2YWx1ZV8zCisiIiIKKworICAgICAg
ICBtYW5pZmVzdCA9IHNlbGYuY29tcGlsZShkYXRhKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWxzKG1hbmlmZXN0LmdldCgia2V5IiwgeyJhIjogImFiIn0pLCAidmFsdWVfMSIpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWxzKG1hbmlmZXN0LmdldCgia2V5IiwgeyJhIjogWzEsIDJdfSksICJ2
YWx1ZV8yIikKKworICAgIGRlZiB0ZXN0X3NldF8wKHNlbGYpOgorICAgICAgICBkYXRhID0gIiIi
CitrZXk6CisgIGlmIGEgPT0gImEiOiB2YWx1ZV8xCisgIGlmIGEgPT0gImIiOiB2YWx1ZV8yCisg
IHZhbHVlXzMKKyIiIgorICAgICAgICBtYW5pZmVzdCA9IHNlbGYuY29tcGlsZShkYXRhKQorCisg
ICAgICAgIG1hbmlmZXN0LnNldCgibmV3X2tleSIsICJ2YWx1ZV9uZXciKQorCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWxzKG1hbmlmZXN0LmdldCgibmV3X2tleSIpLCAidmFsdWVfbmV3IikKKwor
ICAgIGRlZiB0ZXN0X3NldF8xKHNlbGYpOgorICAgICAgICBkYXRhID0gIiIiCitrZXk6CisgIGlm
IGEgPT0gImEiOiB2YWx1ZV8xCisgIGlmIGEgPT0gImIiOiB2YWx1ZV8yCisgIHZhbHVlXzMKKyIi
IgorCisgICAgICAgIG1hbmlmZXN0ID0gc2VsZi5jb21waWxlKGRhdGEpCisKKyAgICAgICAgbWFu
aWZlc3Quc2V0KCJrZXkiLCAidmFsdWVfbmV3IikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFs
cyhtYW5pZmVzdC5nZXQoImtleSIpLCAidmFsdWVfbmV3IikKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbHMobWFuaWZlc3QuZ2V0KCJrZXkiLCB7ImEiOiAiYSJ9KSwgInZhbHVlXzEiKQorCisgICAg
ZGVmIHRlc3Rfc2V0XzIoc2VsZik6CisgICAgICAgIGRhdGEgPSAiIiIKK2tleToKKyAgaWYgYSA9
PSAiYSI6IHZhbHVlXzEKKyAgaWYgYSA9PSAiYiI6IHZhbHVlXzIKKyAgdmFsdWVfMworIiIiCisK
KyAgICAgICAgbWFuaWZlc3QgPSBzZWxmLmNvbXBpbGUoZGF0YSkKKworICAgICAgICBleHByID0g
QmluYXJ5RXhwcmVzc2lvbk5vZGUoQmluYXJ5T3BlcmF0b3JOb2RlKCI9PSIpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVOb2RlKCJhIiksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXJOb2RlKCIxIikpCisKKyAgICAgICAgbWFu
aWZlc3Quc2V0KCJrZXkiLCAidmFsdWVfbmV3IiwgZXhwcikKKworICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFscyhtYW5pZmVzdC5nZXQoImtleSIsIHsiYSI6IDF9KSwgInZhbHVlX25ldyIpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1hbmlmZXN0LmdldCgia2V5IiwgeyJhIjogImEifSksICJ2
YWx1ZV8xIikKKworICAgIGRlZiB0ZXN0X2FwaV8wKHNlbGYpOgorICAgICAgICBkYXRhID0gIiIi
CitrZXk6CisgIGlmIGEgPT0gMS41OiB2YWx1ZV8xCisgIHZhbHVlXzIKK2tleV8xOiBvdGhlcl92
YWx1ZQorIiIiCisgICAgICAgIG1hbmlmZXN0ID0gc2VsZi5jb21waWxlKGRhdGEpCisKKyAgICAg
ICAgc2VsZi5hc3NlcnRGYWxzZShtYW5pZmVzdC5pc19lbXB0eSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbHMobWFuaWZlc3Qucm9vdCwgbWFuaWZlc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZShtYW5pZmVzdC5oYXNfa2V5KCJrZXlfMSIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1h
bmlmZXN0Lmhhc19rZXkoImtleV8yIikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2V0
KG1hbmlmZXN0Lml0ZXJrZXlzKCkpLCBzZXQoWyJrZXkiLCAia2V5XzEiXSkpCmRpZmYgLS1naXQg
YS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci93
cHRtYW5pZmVzdC90ZXN0cy90ZXN0X3BhcnNlci5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVk
L3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3dwdG1hbmlmZXN0L3Rlc3RzL3Rlc3RfcGFy
c2VyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43NjVjOTg0ZjQy
ZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93
cHRydW5uZXIvd3B0cnVubmVyL3dwdG1hbmlmZXN0L3Rlc3RzL3Rlc3RfcGFyc2VyLnB5CkBAIC0w
LDAgKzEsNzUgQEAKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGNTdHJpbmdJTyBpbXBvcnQgU3Ry
aW5nSU8KKworZnJvbSAuLiBpbXBvcnQgcGFyc2VyCisKKyMgVGhlcmUgYXJlbid0IG1hbnkgdGVz
dHMgaGVyZSBiZWNhdXNlIGl0IHR1cm5zIG91dCB0byBiZSB3YXkgbW9yZSBjb252ZW5pZW50IHRv
CisjIHVzZSB0ZXN0X3NlcmlhbGl6ZXIgZm9yIHRoZSBtYWpvcml0eSBvZiBjYXNlcworCisKK2Ns
YXNzIFRlc3RFeHByZXNzaW9uKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2Vs
Zik6CisgICAgICAgIHNlbGYucGFyc2VyID0gcGFyc2VyLlBhcnNlcigpCisKKyAgICBkZWYgcGFy
c2Uoc2VsZiwgaW5wdXRfc3RyKToKKyAgICAgICAgcmV0dXJuIHNlbGYucGFyc2VyLnBhcnNlKFN0
cmluZ0lPKGlucHV0X3N0cikpCisKKyAgICBkZWYgY29tcGFyZShzZWxmLCBpbnB1dF90ZXh0LCBl
eHBlY3RlZCk6CisgICAgICAgIGFjdHVhbCA9IHNlbGYucGFyc2UoaW5wdXRfdGV4dCkKKyAgICAg
ICAgc2VsZi5tYXRjaChleHBlY3RlZCwgYWN0dWFsKQorCisgICAgZGVmIG1hdGNoKHNlbGYsIGV4
cGVjdGVkX25vZGUsIGFjdHVhbF9ub2RlKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXhw
ZWN0ZWRfbm9kZVswXSwgYWN0dWFsX25vZGUuX19jbGFzc19fLl9fbmFtZV9fKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFscyhleHBlY3RlZF9ub2RlWzFdLCBhY3R1YWxfbm9kZS5kYXRhKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oZXhwZWN0ZWRfbm9kZVsyXSksIGxlbihhY3R1YWxf
bm9kZS5jaGlsZHJlbikpCisgICAgICAgIGZvciBleHBlY3RlZF9jaGlsZCwgYWN0dWFsX2NoaWxk
IGluIHppcChleHBlY3RlZF9ub2RlWzJdLCBhY3R1YWxfbm9kZS5jaGlsZHJlbik6CisgICAgICAg
ICAgICBzZWxmLm1hdGNoKGV4cGVjdGVkX2NoaWxkLCBhY3R1YWxfY2hpbGQpCisKKyAgICBkZWYg
dGVzdF9leHByXzAoc2VsZik6CisgICAgICAgIHNlbGYuY29tcGFyZSgKKyAgICAgICAgICAgICIi
Igora2V5OgorICBpZiB4ID09IDEgOiB2YWx1ZSIiIiwKKyAgICAgICAgICAgIFsiRGF0YU5vZGUi
LCBOb25lLAorICAgICAgICAgICAgIFtbIktleVZhbHVlTm9kZSIsICJrZXkiLAorICAgICAgICAg
ICAgICAgW1siQ29uZGl0aW9uYWxOb2RlIiwgTm9uZSwKKyAgICAgICAgICAgICAgICAgW1siQmlu
YXJ5RXhwcmVzc2lvbk5vZGUiLCBOb25lLAorICAgICAgICAgICAgICAgICAgIFtbIkJpbmFyeU9w
ZXJhdG9yTm9kZSIsICI9PSIsIFtdXSwKKyAgICAgICAgICAgICAgICAgICAgWyJWYXJpYWJsZU5v
ZGUiLCAieCIsIFtdXSwKKyAgICAgICAgICAgICAgICAgICAgICAgWyJOdW1iZXJOb2RlIiwgIjEi
LCBbXV0KKyAgICAgICAgICAgICAgICAgICAgXV0sCisgICAgICAgICAgICAgICAgICAgICBbIlZh
bHVlTm9kZSIsICJ2YWx1ZSIsIFtdXSwKKyAgICAgICAgICAgICAgICAgIF1dXV1dXQorICAgICAg
ICApCisKKyAgICBkZWYgdGVzdF9leHByXzEoc2VsZik6CisgICAgICAgIHNlbGYuY29tcGFyZSgK
KyAgICAgICAgICAgICIiIgora2V5OgorICBpZiBub3QgeCBhbmQgeSA6IHZhbHVlIiIiLAorICAg
ICAgICAgICAgWyJEYXRhTm9kZSIsIE5vbmUsCisgICAgICAgICAgICAgW1siS2V5VmFsdWVOb2Rl
IiwgImtleSIsCisgICAgICAgICAgICAgICBbWyJDb25kaXRpb25hbE5vZGUiLCBOb25lLAorICAg
ICAgICAgICAgICAgICBbWyJCaW5hcnlFeHByZXNzaW9uTm9kZSIsIE5vbmUsCisgICAgICAgICAg
ICAgICAgICAgW1siQmluYXJ5T3BlcmF0b3JOb2RlIiwgImFuZCIsIFtdXSwKKyAgICAgICAgICAg
ICAgICAgICAgWyJVbmFyeUV4cHJlc3Npb25Ob2RlIiwgTm9uZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgW1siVW5hcnlPcGVyYXRvck5vZGUiLCAibm90IiwgW11dLAorICAgICAgICAgICAgICAg
ICAgICAgICAgWyJWYXJpYWJsZU5vZGUiLCAieCIsIFtdXQorICAgICAgICAgICAgICAgICAgICAg
ICAgXV0sCisgICAgICAgICAgICAgICAgICAgICAgIFsiVmFyaWFibGVOb2RlIiwgInkiLCBbXV0K
KyAgICAgICAgICAgICAgICAgICAgXV0sCisgICAgICAgICAgICAgICAgICAgICBbIlZhbHVlTm9k
ZSIsICJ2YWx1ZSIsIFtdXSwKKyAgICAgICAgICAgICAgICAgIF1dXV1dXQorICAgICAgICApCisK
KyAgICBkZWYgdGVzdF9hdG9tXzAoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlz
ZXMocGFyc2VyLlBhcnNlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5wYXJzZSgia2V5OiBAVW5r
bm93biIpCisKKyAgICBkZWYgdGVzdF9hdG9tXzEoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5h
c3NlcnRSYWlzZXMocGFyc2VyLlBhcnNlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5wYXJzZSgi
a2V5OiBAdHJ1ZSIpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3Qu
bWFpbigpCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0
cnVubmVyL3dwdHJ1bm5lci93cHRtYW5pZmVzdC90ZXN0cy90ZXN0X3NlcmlhbGl6ZXIucHkgYi9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci93cHRt
YW5pZmVzdC90ZXN0cy90ZXN0X3NlcmlhbGl6ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLjZkYjJjYmJiYjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVy
VGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvd3B0bWFuaWZlc3Qv
dGVzdHMvdGVzdF9zZXJpYWxpemVyLnB5CkBAIC0wLDAgKzEsMjI3IEBACitpbXBvcnQgc3lzCitp
bXBvcnQgdW5pdHRlc3QKKworZnJvbSBjU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCisKK2ltcG9y
dCBweXRlc3QKKworZnJvbSAuLiBpbXBvcnQgcGFyc2VyLCBzZXJpYWxpemVyCisKKworY2xhc3Mg
VG9rZW5pemVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgor
ICAgICAgICBzZWxmLnNlcmlhbGl6ZXIgPSBzZXJpYWxpemVyLk1hbmlmZXN0U2VyaWFsaXplcigp
CisgICAgICAgIHNlbGYucGFyc2VyID0gcGFyc2VyLlBhcnNlcigpCisKKyAgICBkZWYgc2VyaWFs
aXplKHNlbGYsIGlucHV0X3N0cik6CisgICAgICAgIHJldHVybiBzZWxmLnNlcmlhbGl6ZXIuc2Vy
aWFsaXplKHNlbGYucGFyc2VyLnBhcnNlKGlucHV0X3N0cikpCisKKyAgICBkZWYgY29tcGFyZShz
ZWxmLCBpbnB1dF9zdHIsIGV4cGVjdGVkPU5vbmUpOgorICAgICAgICBpZiBleHBlY3RlZCBpcyBO
b25lOgorICAgICAgICAgICAgZXhwZWN0ZWQgPSBpbnB1dF9zdHIKKyAgICAgICAgZXhwZWN0ZWQg
PSBleHBlY3RlZC5lbmNvZGUoInV0ZjgiKQorICAgICAgICBhY3R1YWwgPSBzZWxmLnNlcmlhbGl6
ZShpbnB1dF9zdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGFjdHVhbCwgZXhwZWN0ZWQp
CisKKyAgICBkZWYgdGVzdF8wKHNlbGYpOgorICAgICAgICBzZWxmLmNvbXBhcmUoIiIia2V5OiB2
YWx1ZQorW0hlYWRpbmcgMV0KKyAgb3RoZXJfa2V5OiBvdGhlcl92YWx1ZQorIiIiKQorCisgICAg
ZGVmIHRlc3RfMShzZWxmKToKKyAgICAgICAgc2VsZi5jb21wYXJlKCIiImtleTogdmFsdWUKK1tI
ZWFkaW5nIDFdCisgIG90aGVyX2tleToKKyAgICBpZiBhIG9yIGI6IG90aGVyX3ZhbHVlCisiIiIp
CisKKyAgICBkZWYgdGVzdF8yKHNlbGYpOgorICAgICAgICBzZWxmLmNvbXBhcmUoIiIia2V5OiB2
YWx1ZQorW0hlYWRpbmcgMV0KKyAgb3RoZXJfa2V5OgorICAgIGlmIGEgb3IgYjogb3RoZXJfdmFs
dWUKKyAgICBmYWxsYmFja192YWx1ZQorIiIiKQorCisgICAgZGVmIHRlc3RfMyhzZWxmKToKKyAg
ICAgICAgc2VsZi5jb21wYXJlKCIiImtleTogdmFsdWUKK1tIZWFkaW5nIDFdCisgIG90aGVyX2tl
eToKKyAgICBpZiBhID09IDE6IG90aGVyX3ZhbHVlCisgICAgZmFsbGJhY2tfdmFsdWUKKyIiIikK
KworICAgIGRlZiB0ZXN0XzQoc2VsZik6CisgICAgICAgIHNlbGYuY29tcGFyZSgiIiJrZXk6IHZh
bHVlCitbSGVhZGluZyAxXQorICBvdGhlcl9rZXk6CisgICAgaWYgYSA9PSAiMSI6IG90aGVyX3Zh
bHVlCisgICAgZmFsbGJhY2tfdmFsdWUKKyIiIikKKworICAgIGRlZiB0ZXN0XzUoc2VsZik6Cisg
ICAgICAgIHNlbGYuY29tcGFyZSgiIiJrZXk6IHZhbHVlCitbSGVhZGluZyAxXQorICBvdGhlcl9r
ZXk6CisgICAgaWYgYSA9PSAiYWJjIlsxXTogb3RoZXJfdmFsdWUKKyAgICBmYWxsYmFja192YWx1
ZQorIiIiKQorCisgICAgZGVmIHRlc3RfNihzZWxmKToKKyAgICAgICAgc2VsZi5jb21wYXJlKCIi
ImtleTogdmFsdWUKK1tIZWFkaW5nIDFdCisgIG90aGVyX2tleToKKyAgICBpZiBhID09ICJhYmMi
W2NdOiBvdGhlcl92YWx1ZQorICAgIGZhbGxiYWNrX3ZhbHVlCisiIiIpCisKKyAgICBkZWYgdGVz
dF83KHNlbGYpOgorICAgICAgICBzZWxmLmNvbXBhcmUoIiIia2V5OiB2YWx1ZQorW0hlYWRpbmcg
MV0KKyAgb3RoZXJfa2V5OgorICAgIGlmIChhIG9yIGIpIGFuZCBjOiBvdGhlcl92YWx1ZQorICAg
IGZhbGxiYWNrX3ZhbHVlCisiIiIsCisiIiJrZXk6IHZhbHVlCitbSGVhZGluZyAxXQorICBvdGhl
cl9rZXk6CisgICAgaWYgYSBvciBiIGFuZCBjOiBvdGhlcl92YWx1ZQorICAgIGZhbGxiYWNrX3Zh
bHVlCisiIiIpCisKKyAgICBkZWYgdGVzdF84KHNlbGYpOgorICAgICAgICBzZWxmLmNvbXBhcmUo
IiIia2V5OiB2YWx1ZQorW0hlYWRpbmcgMV0KKyAgb3RoZXJfa2V5OgorICAgIGlmIGEgb3IgKGIg
YW5kIGMpOiBvdGhlcl92YWx1ZQorICAgIGZhbGxiYWNrX3ZhbHVlCisiIiIpCisKKyAgICBkZWYg
dGVzdF85KHNlbGYpOgorICAgICAgICBzZWxmLmNvbXBhcmUoIiIia2V5OiB2YWx1ZQorW0hlYWRp
bmcgMV0KKyAgb3RoZXJfa2V5OgorICAgIGlmIG5vdCAoYSBhbmQgYik6IG90aGVyX3ZhbHVlCisg
ICAgZmFsbGJhY2tfdmFsdWUKKyIiIikKKworICAgIGRlZiB0ZXN0XzEwKHNlbGYpOgorICAgICAg
ICBzZWxmLmNvbXBhcmUoIiIia2V5OiB2YWx1ZQorW0hlYWRpbmcgMV0KKyAgc29tZV9rZXk6IHNv
bWVfdmFsdWUKKworW0hlYWRpbmcgMl0KKyAgb3RoZXJfa2V5OiBvdGhlcl92YWx1ZQorIiIiKQor
CisgICAgZGVmIHRlc3RfMTEoc2VsZik6CisgICAgICAgIHNlbGYuY29tcGFyZSgiIiJrZXk6Cisg
IGlmIG5vdCBhIGFuZCBiIGFuZCBjIGFuZCBkOiB0cnVlCisiIiIpCisKKyAgICBkZWYgdGVzdF8x
MihzZWxmKToKKyAgICAgICAgc2VsZi5jb21wYXJlKCIiIltIZWFkaW5nIDFdCisgIGtleTogW2E6
MSwgYjoyXQorIiIiKQorCisgICAgZGVmIHRlc3RfMTMoc2VsZik6CisgICAgICAgIHNlbGYuY29t
cGFyZSgiIiJrZXk6IFthOjEsICJiOiMiXQorIiIiKQorCisgICAgZGVmIHRlc3RfMTQoc2VsZik6
CisgICAgICAgIHNlbGYuY29tcGFyZSgiIiJrZXk6IFsiLCJdCisiIiIpCisKKyAgICBkZWYgdGVz
dF8xNShzZWxmKToKKyAgICAgICAgc2VsZi5jb21wYXJlKCIiImtleTogLAorIiIiKQorCisgICAg
ZGVmIHRlc3RfMTYoc2VsZik6CisgICAgICAgIHNlbGYuY29tcGFyZSgiIiJrZXk6IFsiXSIsIGJd
CisiIiIpCisKKyAgICBkZWYgdGVzdF8xNyhzZWxmKToKKyAgICAgICAgc2VsZi5jb21wYXJlKCIi
ImtleTogXQorIiIiKQorCisgICAgZGVmIHRlc3RfMTgoc2VsZik6CisgICAgICAgIHNlbGYuY29t
cGFyZSgiIiJrZXk6IFxdCisgICAgICAgICIiIiwgIiIia2V5OiBdCisiIiIpCisKKyAgICBkZWYg
dGVzdF9lc2NhcGVfMChzZWxmKToKKyAgICAgICAgc2VsZi5jb21wYXJlKHIiIiJrXHRcOnk6IFxh
XGJcZlxuXHJcdFx2IiIiLAorICAgICAgICAgICAgICAgICAgICAgciIiImtcdFw6eTogXHgwN1x4
MDhceDBjXG5cclx0XHgwYgorIiIiKQorCisgICAgZGVmIHRlc3RfZXNjYXBlXzEoc2VsZik6Cisg
ICAgICAgIHNlbGYuY29tcGFyZShyIiIia1x4MDA6IFx4MTJBXHg0NSIiIiwKKyAgICAgICAgICAg
ICAgICAgICAgIHIiIiJrXHgwMDogXHgxMkFFCisiIiIpCisKKyAgICBkZWYgdGVzdF9lc2NhcGVf
MihzZWxmKToKKyAgICAgICAgc2VsZi5jb21wYXJlKHIiIiJrXHUwMDQ1eTogXHUxMjM0QVx1QUJj
NiIiIiwKKyAgICAgICAgICAgICAgICAgICAgIHUiIiJrRXk6IFx1MTIzNEFcdWFiYzYKKyIiIikK
KworICAgIGRlZiB0ZXN0X2VzY2FwZV8zKHNlbGYpOgorICAgICAgICBzZWxmLmNvbXBhcmUociIi
ImtcdTAwNDV5OiBcdTEyMzRBXHVBQmM2IiIiLAorICAgICAgICAgICAgICAgICAgICAgdSIiImtF
eTogXHUxMjM0QVx1YWJjNgorIiIiKQorCisgICAgZGVmIHRlc3RfZXNjYXBlXzQoc2VsZik6Cisg
ICAgICAgIHNlbGYuY29tcGFyZShyIiIia2V5OiAnXHUxMjM0QVx1QUJjNiciIiIsCisgICAgICAg
ICAgICAgICAgICAgICB1IiIia2V5OiBcdTEyMzRBXHVhYmM2CisiIiIpCisKKyAgICBkZWYgdGVz
dF9lc2NhcGVfNShzZWxmKToKKyAgICAgICAgc2VsZi5jb21wYXJlKHIiIiJrZXk6IFtcdTEyMzRB
XHVBQmM2XSIiIiwKKyAgICAgICAgICAgICAgICAgICAgIHUiIiJrZXk6IFtcdTEyMzRBXHVhYmM2
XQorIiIiKQorCisgICAgZGVmIHRlc3RfZXNjYXBlXzYoc2VsZik6CisgICAgICAgIHNlbGYuY29t
cGFyZShyIiIia2V5OiBbXHUxMjM0QVx1QUJjNlwsXSIiIiwKKyAgICAgICAgICAgICAgICAgICAg
IHUiIiJrZXk6IFsiXHUxMjM0QVx1YWJjNiwiXQorIiIiKQorCisgICAgZGVmIHRlc3RfZXNjYXBl
Xzcoc2VsZik6CisgICAgICAgIHNlbGYuY29tcGFyZShyIiIia2V5OiBbXCxcXVwjXSIiIiwKKyAg
ICAgICAgICAgICAgICAgICAgIHIiIiJrZXk6IFsiLF0jIl0KKyIiIikKKworICAgIGRlZiB0ZXN0
X2VzY2FwZV84KHNlbGYpOgorICAgICAgICBzZWxmLmNvbXBhcmUociIiImtleTogXCMiIiIsCisg
ICAgICAgICAgICAgICAgICAgICByIiIia2V5OiAiIyIKKyIiIikKKworICAgIEBweXRlc3QubWFy
ay54ZmFpbChzeXMubWF4dW5pY29kZSA9PSAweEZGRkYsIHJlYXNvbj0ibmFycm93IHVuaWNvZGUi
KQorICAgIGRlZiB0ZXN0X2VzY2FwZV85KHNlbGYpOgorICAgICAgICBzZWxmLmNvbXBhcmUociIi
ImtleTogXFUxMEZGRkZhYmMiIiIsCisgICAgICAgICAgICAgICAgICAgICB1IiIia2V5OiBcVTAw
MTBGRkZGYWJjCisiIiIpCisKKyAgICBkZWYgdGVzdF9lc2NhcGVfMTAoc2VsZik6CisgICAgICAg
IHNlbGYuY29tcGFyZShyIiIia2V5OiBcdTEwRkZhYiIiIiwKKyAgICAgICAgICAgICAgICAgICAg
IHUiIiJrZXk6IFx1MTBGRmFiCisiIiIpCisKKyAgICBkZWYgdGVzdF9lc2NhcGVfMTEoc2VsZik6
CisgICAgICAgIHNlbGYuY29tcGFyZShyIiIia2V5OiBcXGFiCisiIiIpCisKKyAgICBkZWYgdGVz
dF9hdG9tXzEoc2VsZik6CisgICAgICAgICAgICBzZWxmLmNvbXBhcmUociIiImtleTogQFRydWUK
KyIiIikKKworICAgIGRlZiB0ZXN0X2F0b21fMihzZWxmKToKKyAgICAgICAgICAgIHNlbGYuY29t
cGFyZShyIiIia2V5OiBARmFsc2UKKyIiIikKKworICAgIGRlZiB0ZXN0X2F0b21fMyhzZWxmKToK
KyAgICAgICAgICAgIHNlbGYuY29tcGFyZShyIiIia2V5OiBAUmVzZXQKKyIiIikKKworICAgIGRl
ZiB0ZXN0X2F0b21fNChzZWxmKToKKyAgICAgICAgc2VsZi5jb21wYXJlKHIiIiJrZXk6IFthLCBA
UmVzZXQsIGJdCisiIiIpCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mv
dG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci93cHRtYW5pZmVzdC90ZXN0cy90ZXN0X3N0YXRpYy5w
eSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVy
L3dwdG1hbmlmZXN0L3Rlc3RzL3Rlc3Rfc3RhdGljLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi5lZDI4NTc4ZDNiZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZl
clRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3dwdG1hbmlmZXN0
L3Rlc3RzL3Rlc3Rfc3RhdGljLnB5CkBAIC0wLDAgKzEsOTggQEAKK2ltcG9ydCB1bml0dGVzdAor
Citmcm9tIGNTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KKworZnJvbSAuLmJhY2tlbmRzIGltcG9y
dCBzdGF0aWMKKworIyBUaGVyZSBhcmVuJ3QgbWFueSB0ZXN0cyBoZXJlIGJlY2F1c2UgaXQgdHVy
bnMgb3V0IHRvIGJlIHdheSBtb3JlIGNvbnZlbmllbnQgdG8KKyMgdXNlIHRlc3Rfc2VyaWFsaXpl
ciBmb3IgdGhlIG1ham9yaXR5IG9mIGNhc2VzCisKKworY2xhc3MgVGVzdFN0YXRpYyh1bml0dGVz
dC5UZXN0Q2FzZSk6CisgICAgZGVmIGNvbXBpbGUoc2VsZiwgaW5wdXRfdGV4dCwgaW5wdXRfZGF0
YSk6CisgICAgICAgIHJldHVybiBzdGF0aWMuY29tcGlsZShpbnB1dF90ZXh0LCBpbnB1dF9kYXRh
KQorCisgICAgZGVmIHRlc3RfZ2V0XzAoc2VsZik6CisgICAgICAgIGRhdGEgPSAiIiIKK2tleTog
dmFsdWUKKworW0hlYWRpbmcgMV0KKyAgb3RoZXJfa2V5OgorICAgIGlmIGEgPT0gMTogdmFsdWVf
MQorICAgIGlmIGEgPT0gMjogdmFsdWVfMgorICAgIHZhbHVlXzMKKyIiIgorCisgICAgICAgIG1h
bmlmZXN0ID0gc2VsZi5jb21waWxlKGRhdGEsIHsiYSI6IDJ9KQorCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKG1hbmlmZXN0LmdldCgia2V5IiksICJ2YWx1ZSIpCisgICAgICAgIGNoaWxkcmVu
ID0gbGlzdChpdGVtIGZvciBpdGVtIGluIG1hbmlmZXN0Lml0ZXJjaGlsZHJlbigpKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFscyhsZW4oY2hpbGRyZW4pLCAxKQorICAgICAgICBzZWN0aW9uID0g
Y2hpbGRyZW5bMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VjdGlvbi5uYW1lLCAiSGVh
ZGluZyAxIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWN0aW9uLmdldCgib3RoZXJf
a2V5IiksICJ2YWx1ZV8yIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VjdGlvbi5nZXQo
ImtleSIpLCAidmFsdWUiKQorCisgICAgZGVmIHRlc3RfZ2V0XzEoc2VsZik6CisgICAgICAgIGRh
dGEgPSAiIiIKK2tleTogdmFsdWUKKworW0hlYWRpbmcgMV0KKyAgb3RoZXJfa2V5OgorICAgIGlm
IGEgPT0gMTogdmFsdWVfMQorICAgIGlmIGEgPT0gMjogdmFsdWVfMgorICAgIHZhbHVlXzMKKyIi
IgorICAgICAgICBtYW5pZmVzdCA9IHNlbGYuY29tcGlsZShkYXRhLCB7ImEiOiAzfSkKKworICAg
ICAgICBjaGlsZHJlbiA9IGxpc3QoaXRlbSBmb3IgaXRlbSBpbiBtYW5pZmVzdC5pdGVyY2hpbGRy
ZW4oKSkKKyAgICAgICAgc2VjdGlvbiA9IGNoaWxkcmVuWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWxzKHNlY3Rpb24uZ2V0KCJvdGhlcl9rZXkiKSwgInZhbHVlXzMiKQorCisgICAgZGVmIHRl
c3RfZ2V0XzMoc2VsZik6CisgICAgICAgIGRhdGEgPSAiIiJrZXk6CisgIGlmIGEgPT0gIjEiOiB2
YWx1ZV8xCisgIGlmIGFbMF0gPT0gImFiIlswXTogdmFsdWVfMgorIiIiCisgICAgICAgIG1hbmlm
ZXN0ID0gc2VsZi5jb21waWxlKGRhdGEsIHsiYSI6ICIxIn0pCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWxzKG1hbmlmZXN0LmdldCgia2V5IiksICJ2YWx1ZV8xIikKKworICAgICAgICBtYW5pZmVz
dCA9IHNlbGYuY29tcGlsZShkYXRhLCB7ImEiOiAiYWMifSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbHMobWFuaWZlc3QuZ2V0KCJrZXkiKSwgInZhbHVlXzIiKQorCisgICAgZGVmIHRlc3RfZ2V0
XzQoc2VsZik6CisgICAgICAgIGRhdGEgPSAiIiJrZXk6CisgIGlmIG5vdCBhOiB2YWx1ZV8xCisg
IHZhbHVlXzIKKyIiIgorICAgICAgICBtYW5pZmVzdCA9IHNlbGYuY29tcGlsZShkYXRhLCB7ImEi
OiBUcnVlfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWFuaWZlc3QuZ2V0KCJrZXkiKSwg
InZhbHVlXzIiKQorCisgICAgICAgIG1hbmlmZXN0ID0gc2VsZi5jb21waWxlKGRhdGEsIHsiYSI6
IEZhbHNlfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWFuaWZlc3QuZ2V0KCJrZXkiKSwg
InZhbHVlXzEiKQorCisgICAgZGVmIHRlc3RfYXBpKHNlbGYpOgorICAgICAgICBkYXRhID0gIiIi
a2V5OgorICBpZiBhID09IDEuNTogdmFsdWVfMQorICB2YWx1ZV8yCitrZXlfMTogb3RoZXJfdmFs
dWUKKyIiIgorICAgICAgICBtYW5pZmVzdCA9IHNlbGYuY29tcGlsZShkYXRhLCB7ImEiOiAxLjV9
KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWFuaWZlc3QuaXNfZW1wdHkpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWxzKG1hbmlmZXN0LnJvb3QsIG1hbmlmZXN0KQorICAgICAgICBzZWxm
LmFzc2VydFRydWUobWFuaWZlc3QuaGFzX2tleSgia2V5XzEiKSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRGYWxzZShtYW5pZmVzdC5oYXNfa2V5KCJrZXlfMiIpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWxzKHNldChtYW5pZmVzdC5pdGVya2V5cygpKSwgc2V0KFsia2V5IiwgImtleV8xIl0pKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZXQobWFuaWZlc3QuaXRlcnZhbHVlcygpKSwgc2V0
KFsidmFsdWVfMSIsICJvdGhlcl92YWx1ZSJdKSkKKworICAgIGRlZiB0ZXN0X2lzX2VtcHR5XzEo
c2VsZik6CisgICAgICAgIGRhdGEgPSAiIiIKK1tTZWN0aW9uXQorICBbU3Vic2VjdGlvbl0KKyIi
IgorICAgICAgICBtYW5pZmVzdCA9IHNlbGYuY29tcGlsZShkYXRhLCB7fSkKKworICAgICAgICBz
ZWxmLmFzc2VydFRydWUobWFuaWZlc3QuaXNfZW1wdHkpCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJU
ZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci93cHRtYW5pZmVzdC90
ZXN0cy90ZXN0X3Rva2VuaXplci5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29s
cy93cHRydW5uZXIvd3B0cnVubmVyL3dwdG1hbmlmZXN0L3Rlc3RzL3Rlc3RfdG9rZW5pemVyLnB5
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44ODE3NmM1YTE2OQotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5u
ZXIvd3B0cnVubmVyL3dwdG1hbmlmZXN0L3Rlc3RzL3Rlc3RfdG9rZW5pemVyLnB5CkBAIC0wLDAg
KzEsMzU3IEBACitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCB1bml0dGVzdAorCitzeXMu
cGF0aC5pbnNlcnQoMCwgb3MucGF0aC5hYnNwYXRoKCIuLiIpKQorZnJvbSBjU3RyaW5nSU8gaW1w
b3J0IFN0cmluZ0lPCisKK2Zyb20gLi4gaW1wb3J0IHBhcnNlcgorZnJvbSAuLnBhcnNlciBpbXBv
cnQgdG9rZW5fdHlwZXMKKworCitjbGFzcyBUb2tlbml6ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNl
KToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYudG9rZW5pemVyID0gcGFyc2Vy
LlRva2VuaXplcigpCisKKyAgICBkZWYgdG9rZW5pemUoc2VsZiwgaW5wdXRfc3RyKToKKyAgICAg
ICAgcnYgPSBbXQorICAgICAgICBmb3IgaXRlbSBpbiBzZWxmLnRva2VuaXplci50b2tlbml6ZShT
dHJpbmdJTyhpbnB1dF9zdHIpKToKKyAgICAgICAgICAgIHJ2LmFwcGVuZChpdGVtKQorICAgICAg
ICAgICAgaWYgaXRlbVswXSA9PSB0b2tlbl90eXBlcy5lb2Y6CisgICAgICAgICAgICAgICAgYnJl
YWsKKyAgICAgICAgcmV0dXJuIHJ2CisKKyAgICBkZWYgY29tcGFyZShzZWxmLCBpbnB1dF90ZXh0
LCBleHBlY3RlZCk6CisgICAgICAgIGV4cGVjdGVkID0gZXhwZWN0ZWQgKyBbKHRva2VuX3R5cGVz
LmVvZiwgTm9uZSldCisgICAgICAgIGFjdHVhbCA9IHNlbGYudG9rZW5pemUoaW5wdXRfdGV4dCkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYWN0dWFsLCBleHBlY3RlZCkKKworICAgIGRlZiB0
ZXN0X2hlYWRpbmdfMChzZWxmKToKKyAgICAgICAgc2VsZi5jb21wYXJlKCIiIltIZWFkaW5nIHRl
eHRdIiIiLAorICAgICAgICAgICAgICAgICAgICAgWyh0b2tlbl90eXBlcy5wYXJlbiwgIlsiKSwK
KyAgICAgICAgICAgICAgICAgICAgICAodG9rZW5fdHlwZXMuc3RyaW5nLCAiSGVhZGluZyB0ZXh0
IiksCisgICAgICAgICAgICAgICAgICAgICAgKHRva2VuX3R5cGVzLnBhcmVuLCAiXSIpXSkKKwor
ICAgIGRlZiB0ZXN0X2hlYWRpbmdfMShzZWxmKToKKyAgICAgICAgc2VsZi5jb21wYXJlKCIiIltI
ZWFkaW5nIFt0ZXh0XF1dIiIiLAorICAgICAgICAgICAgICAgICAgICAgWyh0b2tlbl90eXBlcy5w
YXJlbiwgIlsiKSwKKyAgICAgICAgICAgICAgICAgICAgICAodG9rZW5fdHlwZXMuc3RyaW5nLCAi
SGVhZGluZyBbdGV4dF0iKSwKKyAgICAgICAgICAgICAgICAgICAgICAodG9rZW5fdHlwZXMucGFy
ZW4sICJdIildKQorCisgICAgZGVmIHRlc3RfaGVhZGluZ18yKHNlbGYpOgorICAgICAgICBzZWxm
LmNvbXBhcmUoIiIiW0hlYWRpbmcgI3RleHRdIiIiLAorICAgICAgICAgICAgICAgICAgICAgWyh0
b2tlbl90eXBlcy5wYXJlbiwgIlsiKSwKKyAgICAgICAgICAgICAgICAgICAgICAodG9rZW5fdHlw
ZXMuc3RyaW5nLCAiSGVhZGluZyAjdGV4dCIpLAorICAgICAgICAgICAgICAgICAgICAgICh0b2tl
bl90eXBlcy5wYXJlbiwgIl0iKV0pCisKKyAgICBkZWYgdGVzdF9oZWFkaW5nXzMoc2VsZik6Cisg
ICAgICAgIHNlbGYuY29tcGFyZSgiIiJbSGVhZGluZyBbXF10ZXh0XSIiIiwKKyAgICAgICAgICAg
ICAgICAgICAgIFsodG9rZW5fdHlwZXMucGFyZW4sICJbIiksCisgICAgICAgICAgICAgICAgICAg
ICAgKHRva2VuX3R5cGVzLnN0cmluZywgIkhlYWRpbmcgW110ZXh0IiksCisgICAgICAgICAgICAg
ICAgICAgICAgKHRva2VuX3R5cGVzLnBhcmVuLCAiXSIpXSkKKworICAgIGRlZiB0ZXN0X2hlYWRp
bmdfNChzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhwYXJzZXIuUGFyc2VF
cnJvcik6CisgICAgICAgICAgICBzZWxmLnRva2VuaXplKCJbSGVhZGluZyIpCisKKyAgICBkZWYg
dGVzdF9oZWFkaW5nXzUoc2VsZik6CisgICAgICAgIHNlbGYuY29tcGFyZSgiIiJbSGVhZGluZyBb
XF10ZXh0XSAjY29tbWVudCIiIiwKKyAgICAgICAgICAgICAgICAgICAgIFsodG9rZW5fdHlwZXMu
cGFyZW4sICJbIiksCisgICAgICAgICAgICAgICAgICAgICAgKHRva2VuX3R5cGVzLnN0cmluZywg
IkhlYWRpbmcgW110ZXh0IiksCisgICAgICAgICAgICAgICAgICAgICAgKHRva2VuX3R5cGVzLnBh
cmVuLCAiXSIpXSkKKworICAgIGRlZiB0ZXN0X2hlYWRpbmdfNihzZWxmKToKKyAgICAgICAgc2Vs
Zi5jb21wYXJlKHIiIiJbSGVhZGluZyBcdHRleHRdIiIiLAorICAgICAgICAgICAgICAgICAgICAg
Wyh0b2tlbl90eXBlcy5wYXJlbiwgIlsiKSwKKyAgICAgICAgICAgICAgICAgICAgICAodG9rZW5f
dHlwZXMuc3RyaW5nLCAiSGVhZGluZyBcdHRleHQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAo
dG9rZW5fdHlwZXMucGFyZW4sICJdIildKQorCisgICAgZGVmIHRlc3Rfa2V5XzAoc2VsZik6Cisg
ICAgICAgIHNlbGYuY29tcGFyZSgiIiJrZXk6dmFsdWUiIiIsCisgICAgICAgICAgICAgICAgICAg
ICBbKHRva2VuX3R5cGVzLnN0cmluZywgImtleSIpLAorICAgICAgICAgICAgICAgICAgICAgICh0
b2tlbl90eXBlcy5zZXBhcmF0b3IsICI6IiksCisgICAgICAgICAgICAgICAgICAgICAgKHRva2Vu
X3R5cGVzLnN0cmluZywgInZhbHVlIildKQorCisgICAgZGVmIHRlc3Rfa2V5XzEoc2VsZik6Cisg
ICAgICAgIHNlbGYuY29tcGFyZSgiIiJrZXkgIDogIHZhbHVlIiIiLAorICAgICAgICAgICAgICAg
ICAgICAgWyh0b2tlbl90eXBlcy5zdHJpbmcsICJrZXkiKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAodG9rZW5fdHlwZXMuc2VwYXJhdG9yLCAiOiIpLAorICAgICAgICAgICAgICAgICAgICAgICh0
b2tlbl90eXBlcy5zdHJpbmcsICJ2YWx1ZSIpXSkKKworICAgIGRlZiB0ZXN0X2tleV8yKHNlbGYp
OgorICAgICAgICBzZWxmLmNvbXBhcmUoIiIia2V5ICA6ICB2YWwgdWUiIiIsCisgICAgICAgICAg
ICAgICAgICAgICBbKHRva2VuX3R5cGVzLnN0cmluZywgImtleSIpLAorICAgICAgICAgICAgICAg
ICAgICAgICh0b2tlbl90eXBlcy5zZXBhcmF0b3IsICI6IiksCisgICAgICAgICAgICAgICAgICAg
ICAgKHRva2VuX3R5cGVzLnN0cmluZywgInZhbCB1ZSIpXSkKKworICAgIGRlZiB0ZXN0X2tleV8z
KHNlbGYpOgorICAgICAgICBzZWxmLmNvbXBhcmUoIiIia2V5OiB2YWx1ZSNjb21tZW50IiIiLAor
ICAgICAgICAgICAgICAgICAgICAgWyh0b2tlbl90eXBlcy5zdHJpbmcsICJrZXkiKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAodG9rZW5fdHlwZXMuc2VwYXJhdG9yLCAiOiIpLAorICAgICAgICAg
ICAgICAgICAgICAgICh0b2tlbl90eXBlcy5zdHJpbmcsICJ2YWx1ZSIpXSkKKworICAgIGRlZiB0
ZXN0X2tleV80KHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHBhcnNlci5Q
YXJzZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYudG9rZW5pemUoIiIia2UgeTogdmFsdWUiIiIp
CisKKyAgICBkZWYgdGVzdF9rZXlfNShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJh
aXNlcyhwYXJzZXIuUGFyc2VFcnJvcik6CisgICAgICAgICAgICBzZWxmLnRva2VuaXplKCIiImtl
eSIiIikKKworICAgIGRlZiB0ZXN0X2tleV82KHNlbGYpOgorICAgICAgICBzZWxmLmNvbXBhcmUo
IiIia2V5OiAidmFsdWVcIiIiIiwKKyAgICAgICAgICAgICAgICAgICAgIFsodG9rZW5fdHlwZXMu
c3RyaW5nLCAia2V5IiksCisgICAgICAgICAgICAgICAgICAgICAgKHRva2VuX3R5cGVzLnNlcGFy
YXRvciwgIjoiKSwKKyAgICAgICAgICAgICAgICAgICAgICAodG9rZW5fdHlwZXMuc3RyaW5nLCAi
dmFsdWUiKV0pCisKKyAgICBkZWYgdGVzdF9rZXlfNyhzZWxmKToKKyAgICAgICAgc2VsZi5jb21w
YXJlKCIiImtleTogJ3ZhbHVlJyIiIiwKKyAgICAgICAgICAgICAgICAgICAgIFsodG9rZW5fdHlw
ZXMuc3RyaW5nLCAia2V5IiksCisgICAgICAgICAgICAgICAgICAgICAgKHRva2VuX3R5cGVzLnNl
cGFyYXRvciwgIjoiKSwKKyAgICAgICAgICAgICAgICAgICAgICAodG9rZW5fdHlwZXMuc3RyaW5n
LCAidmFsdWUiKV0pCisKKyAgICBkZWYgdGVzdF9rZXlfOChzZWxmKToKKyAgICAgICAgc2VsZi5j
b21wYXJlKCIiImtleTogIiN2YWx1ZVwiIiIiLAorICAgICAgICAgICAgICAgICAgICAgWyh0b2tl
bl90eXBlcy5zdHJpbmcsICJrZXkiKSwKKyAgICAgICAgICAgICAgICAgICAgICAodG9rZW5fdHlw
ZXMuc2VwYXJhdG9yLCAiOiIpLAorICAgICAgICAgICAgICAgICAgICAgICh0b2tlbl90eXBlcy5z
dHJpbmcsICIjdmFsdWUiKV0pCisKKyAgICBkZWYgdGVzdF9rZXlfOShzZWxmKToKKyAgICAgICAg
c2VsZi5jb21wYXJlKCIiImtleTogJyN2YWx1ZVwnIiIiLAorICAgICAgICAgICAgICAgICAgICAg
Wyh0b2tlbl90eXBlcy5zdHJpbmcsICJrZXkiKSwKKyAgICAgICAgICAgICAgICAgICAgICAodG9r
ZW5fdHlwZXMuc2VwYXJhdG9yLCAiOiIpLAorICAgICAgICAgICAgICAgICAgICAgICh0b2tlbl90
eXBlcy5zdHJpbmcsICIjdmFsdWUiKV0pCisKKyAgICBkZWYgdGVzdF9rZXlfMTAoc2VsZik6Cisg
ICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMocGFyc2VyLlBhcnNlRXJyb3IpOgorICAgICAg
ICAgICAgc2VsZi50b2tlbml6ZSgiIiJrZXk6ICJ2YWx1ZSIiIikKKworICAgIGRlZiB0ZXN0X2tl
eV8xMShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhwYXJzZXIuUGFyc2VF
cnJvcik6CisgICAgICAgICAgICBzZWxmLnRva2VuaXplKCIiImtleTogJ3ZhbHVlIiIiKQorCisg
ICAgZGVmIHRlc3Rfa2V5XzEyKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2Vz
KHBhcnNlci5QYXJzZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYudG9rZW5pemUoIiIia2V5OiAn
dmFsdWUiIiIpCisKKyAgICBkZWYgdGVzdF9rZXlfMTMoc2VsZik6CisgICAgICAgIHdpdGggc2Vs
Zi5hc3NlcnRSYWlzZXMocGFyc2VyLlBhcnNlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi50b2tl
bml6ZSgiIiJrZXk6ICd2YWx1ZScgYWJjIiIiKQorCisgICAgZGVmIHRlc3Rfa2V5XzE0KHNlbGYp
OgorICAgICAgICBzZWxmLmNvbXBhcmUociIiImtleTogXFxuYiIiIiwKKyAgICAgICAgICAgICAg
ICAgICAgIFsodG9rZW5fdHlwZXMuc3RyaW5nLCAia2V5IiksCisgICAgICAgICAgICAgICAgICAg
ICAgKHRva2VuX3R5cGVzLnNlcGFyYXRvciwgIjoiKSwKKyAgICAgICAgICAgICAgICAgICAgICAo
dG9rZW5fdHlwZXMuc3RyaW5nLCByIlxuYiIpXSkKKworICAgIGRlZiB0ZXN0X2xpc3RfMChzZWxm
KToKKyAgICAgICAgc2VsZi5jb21wYXJlKAorIiIiCitrZXk6IFtdIiIiLAorICAgICAgICAgICAg
Wyh0b2tlbl90eXBlcy5zdHJpbmcsICJrZXkiKSwKKyAgICAgICAgICAgICAodG9rZW5fdHlwZXMu
c2VwYXJhdG9yLCAiOiIpLAorICAgICAgICAgICAgICh0b2tlbl90eXBlcy5saXN0X3N0YXJ0LCAi
WyIpLAorICAgICAgICAgICAgICh0b2tlbl90eXBlcy5saXN0X2VuZCwgIl0iKV0pCisKKyAgICBk
ZWYgdGVzdF9saXN0XzEoc2VsZik6CisgICAgICAgIHNlbGYuY29tcGFyZSgKKyIiIgora2V5OiBb
YSwgImIiXSIiIiwKKyAgICAgICAgICAgIFsodG9rZW5fdHlwZXMuc3RyaW5nLCAia2V5IiksCisg
ICAgICAgICAgICAgKHRva2VuX3R5cGVzLnNlcGFyYXRvciwgIjoiKSwKKyAgICAgICAgICAgICAo
dG9rZW5fdHlwZXMubGlzdF9zdGFydCwgIlsiKSwKKyAgICAgICAgICAgICAodG9rZW5fdHlwZXMu
c3RyaW5nLCAiYSIpLAorICAgICAgICAgICAgICh0b2tlbl90eXBlcy5zdHJpbmcsICJiIiksCisg
ICAgICAgICAgICAgKHRva2VuX3R5cGVzLmxpc3RfZW5kLCAiXSIpXSkKKworICAgIGRlZiB0ZXN0
X2xpc3RfMihzZWxmKToKKyAgICAgICAgc2VsZi5jb21wYXJlKAorIiIiCitrZXk6IFthLAorICAg
ICAgYl0iIiIsCisgICAgICAgICAgICBbKHRva2VuX3R5cGVzLnN0cmluZywgImtleSIpLAorICAg
ICAgICAgICAgICh0b2tlbl90eXBlcy5zZXBhcmF0b3IsICI6IiksCisgICAgICAgICAgICAgKHRv
a2VuX3R5cGVzLmxpc3Rfc3RhcnQsICJbIiksCisgICAgICAgICAgICAgKHRva2VuX3R5cGVzLnN0
cmluZywgImEiKSwKKyAgICAgICAgICAgICAodG9rZW5fdHlwZXMuc3RyaW5nLCAiYiIpLAorICAg
ICAgICAgICAgICh0b2tlbl90eXBlcy5saXN0X2VuZCwgIl0iKV0pCisKKyAgICBkZWYgdGVzdF9s
aXN0XzMoc2VsZik6CisgICAgICAgIHNlbGYuY29tcGFyZSgKKyIiIgora2V5OiBbYSwgI2JdCisg
ICAgICBjXSIiIiwKKyAgICAgICAgICAgIFsodG9rZW5fdHlwZXMuc3RyaW5nLCAia2V5IiksCisg
ICAgICAgICAgICAgKHRva2VuX3R5cGVzLnNlcGFyYXRvciwgIjoiKSwKKyAgICAgICAgICAgICAo
dG9rZW5fdHlwZXMubGlzdF9zdGFydCwgIlsiKSwKKyAgICAgICAgICAgICAodG9rZW5fdHlwZXMu
c3RyaW5nLCAiYSIpLAorICAgICAgICAgICAgICh0b2tlbl90eXBlcy5zdHJpbmcsICJjIiksCisg
ICAgICAgICAgICAgKHRva2VuX3R5cGVzLmxpc3RfZW5kLCAiXSIpXSkKKworICAgIGRlZiB0ZXN0
X2xpc3RfNChzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhwYXJzZXIuUGFy
c2VFcnJvcik6CisgICAgICAgICAgICBzZWxmLnRva2VuaXplKCIiImtleTogW2EgI2JdCisgICAg
ICAgICAgICBjXSIiIikKKworICAgIGRlZiB0ZXN0X2xpc3RfNShzZWxmKToKKyAgICAgICAgd2l0
aCBzZWxmLmFzc2VydFJhaXNlcyhwYXJzZXIuUGFyc2VFcnJvcik6CisgICAgICAgICAgICBzZWxm
LnRva2VuaXplKCIiImtleTogW2EgXFwKKyAgICAgICAgICAgIGNdIiIiKQorCisgICAgZGVmIHRl
c3RfbGlzdF82KHNlbGYpOgorICAgICAgICBzZWxmLmNvbXBhcmUoCisiIiJrZXk6IFthICwgYl0i
IiIsCisgICAgICAgIFsodG9rZW5fdHlwZXMuc3RyaW5nLCAia2V5IiksCisgICAgICAgICAodG9r
ZW5fdHlwZXMuc2VwYXJhdG9yLCAiOiIpLAorICAgICAgICAgKHRva2VuX3R5cGVzLmxpc3Rfc3Rh
cnQsICJbIiksCisgICAgICAgICAodG9rZW5fdHlwZXMuc3RyaW5nLCAiYSIpLAorICAgICAgICAg
KHRva2VuX3R5cGVzLnN0cmluZywgImIiKSwKKyAgICAgICAgICh0b2tlbl90eXBlcy5saXN0X2Vu
ZCwgIl0iKV0pCisKKyAgICBkZWYgdGVzdF9leHByXzAoc2VsZik6CisgICAgICAgIHNlbGYuY29t
cGFyZSgKKyIiIgora2V5OgorICBpZiBjb25kID09IDE6IHZhbHVlIiIiLAorICAgICAgICAgICAg
Wyh0b2tlbl90eXBlcy5zdHJpbmcsICJrZXkiKSwKKyAgICAgICAgICAgICAodG9rZW5fdHlwZXMu
c2VwYXJhdG9yLCAiOiIpLAorICAgICAgICAgICAgICh0b2tlbl90eXBlcy5ncm91cF9zdGFydCwg
Tm9uZSksCisgICAgICAgICAgICAgKHRva2VuX3R5cGVzLmlkZW50LCAiaWYiKSwKKyAgICAgICAg
ICAgICAodG9rZW5fdHlwZXMuaWRlbnQsICJjb25kIiksCisgICAgICAgICAgICAgKHRva2VuX3R5
cGVzLmlkZW50LCAiPT0iKSwKKyAgICAgICAgICAgICAodG9rZW5fdHlwZXMubnVtYmVyLCAiMSIp
LAorICAgICAgICAgICAgICh0b2tlbl90eXBlcy5zZXBhcmF0b3IsICI6IiksCisgICAgICAgICAg
ICAgKHRva2VuX3R5cGVzLnN0cmluZywgInZhbHVlIildKQorCisgICAgZGVmIHRlc3RfZXhwcl8x
KHNlbGYpOgorICAgICAgICBzZWxmLmNvbXBhcmUoCisiIiIKK2tleToKKyAgaWYgY29uZCA9PSAx
OiB2YWx1ZTEKKyAgdmFsdWUyIiIiLAorICAgICAgICAgICAgWyh0b2tlbl90eXBlcy5zdHJpbmcs
ICJrZXkiKSwKKyAgICAgICAgICAgICAodG9rZW5fdHlwZXMuc2VwYXJhdG9yLCAiOiIpLAorICAg
ICAgICAgICAgICh0b2tlbl90eXBlcy5ncm91cF9zdGFydCwgTm9uZSksCisgICAgICAgICAgICAg
KHRva2VuX3R5cGVzLmlkZW50LCAiaWYiKSwKKyAgICAgICAgICAgICAodG9rZW5fdHlwZXMuaWRl
bnQsICJjb25kIiksCisgICAgICAgICAgICAgKHRva2VuX3R5cGVzLmlkZW50LCAiPT0iKSwKKyAg
ICAgICAgICAgICAodG9rZW5fdHlwZXMubnVtYmVyLCAiMSIpLAorICAgICAgICAgICAgICh0b2tl
bl90eXBlcy5zZXBhcmF0b3IsICI6IiksCisgICAgICAgICAgICAgKHRva2VuX3R5cGVzLnN0cmlu
ZywgInZhbHVlMSIpLAorICAgICAgICAgICAgICh0b2tlbl90eXBlcy5zdHJpbmcsICJ2YWx1ZTIi
KV0pCisKKyAgICBkZWYgdGVzdF9leHByXzIoc2VsZik6CisgICAgICAgIHNlbGYuY29tcGFyZSgK
KyIiIgora2V5OgorICBpZiBjb25kPT0iMSI6IHZhbHVlIiIiLAorICAgICAgICAgICAgWyh0b2tl
bl90eXBlcy5zdHJpbmcsICJrZXkiKSwKKyAgICAgICAgICAgICAodG9rZW5fdHlwZXMuc2VwYXJh
dG9yLCAiOiIpLAorICAgICAgICAgICAgICh0b2tlbl90eXBlcy5ncm91cF9zdGFydCwgTm9uZSks
CisgICAgICAgICAgICAgKHRva2VuX3R5cGVzLmlkZW50LCAiaWYiKSwKKyAgICAgICAgICAgICAo
dG9rZW5fdHlwZXMuaWRlbnQsICJjb25kIiksCisgICAgICAgICAgICAgKHRva2VuX3R5cGVzLmlk
ZW50LCAiPT0iKSwKKyAgICAgICAgICAgICAodG9rZW5fdHlwZXMuc3RyaW5nLCAiMSIpLAorICAg
ICAgICAgICAgICh0b2tlbl90eXBlcy5zZXBhcmF0b3IsICI6IiksCisgICAgICAgICAgICAgKHRv
a2VuX3R5cGVzLnN0cmluZywgInZhbHVlIildKQorCisgICAgZGVmIHRlc3RfZXhwcl8zKHNlbGYp
OgorICAgICAgICBzZWxmLmNvbXBhcmUoCisiIiIKK2tleToKKyAgaWYgY29uZD09MS4xOiB2YWx1
ZSIiIiwKKyAgICAgICAgICAgIFsodG9rZW5fdHlwZXMuc3RyaW5nLCAia2V5IiksCisgICAgICAg
ICAgICAgKHRva2VuX3R5cGVzLnNlcGFyYXRvciwgIjoiKSwKKyAgICAgICAgICAgICAodG9rZW5f
dHlwZXMuZ3JvdXBfc3RhcnQsIE5vbmUpLAorICAgICAgICAgICAgICh0b2tlbl90eXBlcy5pZGVu
dCwgImlmIiksCisgICAgICAgICAgICAgKHRva2VuX3R5cGVzLmlkZW50LCAiY29uZCIpLAorICAg
ICAgICAgICAgICh0b2tlbl90eXBlcy5pZGVudCwgIj09IiksCisgICAgICAgICAgICAgKHRva2Vu
X3R5cGVzLm51bWJlciwgIjEuMSIpLAorICAgICAgICAgICAgICh0b2tlbl90eXBlcy5zZXBhcmF0
b3IsICI6IiksCisgICAgICAgICAgICAgKHRva2VuX3R5cGVzLnN0cmluZywgInZhbHVlIildKQor
CisgICAgZGVmIHRlc3RfZXhwcl80KHNlbGYpOgorICAgICAgICBzZWxmLmNvbXBhcmUoCisgICAg
ICAgICAgICAiIiIKK2tleToKKyAgaWYgY29uZD09MS4xIGFuZCBjb25kMiA9PSAiYSI6IHZhbHVl
IiIiLAorICAgICAgICAgICAgWyh0b2tlbl90eXBlcy5zdHJpbmcsICJrZXkiKSwKKyAgICAgICAg
ICAgICAodG9rZW5fdHlwZXMuc2VwYXJhdG9yLCAiOiIpLAorICAgICAgICAgICAgICh0b2tlbl90
eXBlcy5ncm91cF9zdGFydCwgTm9uZSksCisgICAgICAgICAgICAgKHRva2VuX3R5cGVzLmlkZW50
LCAiaWYiKSwKKyAgICAgICAgICAgICAodG9rZW5fdHlwZXMuaWRlbnQsICJjb25kIiksCisgICAg
ICAgICAgICAgKHRva2VuX3R5cGVzLmlkZW50LCAiPT0iKSwKKyAgICAgICAgICAgICAodG9rZW5f
dHlwZXMubnVtYmVyLCAiMS4xIiksCisgICAgICAgICAgICAgKHRva2VuX3R5cGVzLmlkZW50LCAi
YW5kIiksCisgICAgICAgICAgICAgKHRva2VuX3R5cGVzLmlkZW50LCAiY29uZDIiKSwKKyAgICAg
ICAgICAgICAodG9rZW5fdHlwZXMuaWRlbnQsICI9PSIpLAorICAgICAgICAgICAgICh0b2tlbl90
eXBlcy5zdHJpbmcsICJhIiksCisgICAgICAgICAgICAgKHRva2VuX3R5cGVzLnNlcGFyYXRvciwg
IjoiKSwKKyAgICAgICAgICAgICAodG9rZW5fdHlwZXMuc3RyaW5nLCAidmFsdWUiKV0pCisKKyAg
ICBkZWYgdGVzdF9leHByXzUoc2VsZik6CisgICAgICAgIHNlbGYuY29tcGFyZSgKKyIiIgora2V5
OgorICBpZiAoY29uZD09MS4xICk6IHZhbHVlIiIiLAorICAgICAgICAgICAgWyh0b2tlbl90eXBl
cy5zdHJpbmcsICJrZXkiKSwKKyAgICAgICAgICAgICAodG9rZW5fdHlwZXMuc2VwYXJhdG9yLCAi
OiIpLAorICAgICAgICAgICAgICh0b2tlbl90eXBlcy5ncm91cF9zdGFydCwgTm9uZSksCisgICAg
ICAgICAgICAgKHRva2VuX3R5cGVzLmlkZW50LCAiaWYiKSwKKyAgICAgICAgICAgICAodG9rZW5f
dHlwZXMucGFyZW4sICIoIiksCisgICAgICAgICAgICAgKHRva2VuX3R5cGVzLmlkZW50LCAiY29u
ZCIpLAorICAgICAgICAgICAgICh0b2tlbl90eXBlcy5pZGVudCwgIj09IiksCisgICAgICAgICAg
ICAgKHRva2VuX3R5cGVzLm51bWJlciwgIjEuMSIpLAorICAgICAgICAgICAgICh0b2tlbl90eXBl
cy5wYXJlbiwgIikiKSwKKyAgICAgICAgICAgICAodG9rZW5fdHlwZXMuc2VwYXJhdG9yLCAiOiIp
LAorICAgICAgICAgICAgICh0b2tlbl90eXBlcy5zdHJpbmcsICJ2YWx1ZSIpXSkKKworICAgIGRl
ZiB0ZXN0X2V4cHJfNihzZWxmKToKKyAgICAgICAgc2VsZi5jb21wYXJlKAorIiIiCitrZXk6Cisg
IGlmICJcXHR0ZXN0IjogdmFsdWUiIiIsCisgICAgICAgICAgICBbKHRva2VuX3R5cGVzLnN0cmlu
ZywgImtleSIpLAorICAgICAgICAgICAgICh0b2tlbl90eXBlcy5zZXBhcmF0b3IsICI6IiksCisg
ICAgICAgICAgICAgKHRva2VuX3R5cGVzLmdyb3VwX3N0YXJ0LCBOb25lKSwKKyAgICAgICAgICAg
ICAodG9rZW5fdHlwZXMuaWRlbnQsICJpZiIpLAorICAgICAgICAgICAgICh0b2tlbl90eXBlcy5z
dHJpbmcsICJcdHRlc3QiKSwKKyAgICAgICAgICAgICAodG9rZW5fdHlwZXMuc2VwYXJhdG9yLCAi
OiIpLAorICAgICAgICAgICAgICh0b2tlbl90eXBlcy5zdHJpbmcsICJ2YWx1ZSIpXSkKKworICAg
IGRlZiB0ZXN0X2V4cHJfNyhzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhw
YXJzZXIuUGFyc2VFcnJvcik6CisgICAgICAgICAgICBzZWxmLnRva2VuaXplKAorIiIiCitrZXk6
CisgIGlmIDFBOiB2YWx1ZSIiIikKKworICAgIGRlZiB0ZXN0X2V4cHJfOChzZWxmKToKKyAgICAg
ICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhwYXJzZXIuUGFyc2VFcnJvcik6CisgICAgICAgICAg
ICBzZWxmLnRva2VuaXplKAorIiIiCitrZXk6CisgIGlmIDFhOiB2YWx1ZSIiIikKKworICAgIGRl
ZiB0ZXN0X2V4cHJfOShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhwYXJz
ZXIuUGFyc2VFcnJvcik6CisgICAgICAgICAgICBzZWxmLnRva2VuaXplKAorIiIiCitrZXk6Cisg
IGlmIDEuMS4xOiB2YWx1ZSIiIikKKworICAgIGRlZiB0ZXN0X2V4cHJfMTAoc2VsZik6CisgICAg
ICAgIHNlbGYuY29tcGFyZSgKKyIiIgora2V5OgorICBpZiAxLjogdmFsdWUiIiIsCisgICAgICAg
ICAgICBbKHRva2VuX3R5cGVzLnN0cmluZywgImtleSIpLAorICAgICAgICAgICAgICh0b2tlbl90
eXBlcy5zZXBhcmF0b3IsICI6IiksCisgICAgICAgICAgICAgKHRva2VuX3R5cGVzLmdyb3VwX3N0
YXJ0LCBOb25lKSwKKyAgICAgICAgICAgICAodG9rZW5fdHlwZXMuaWRlbnQsICJpZiIpLAorICAg
ICAgICAgICAgICh0b2tlbl90eXBlcy5udW1iZXIsICIxLiIpLAorICAgICAgICAgICAgICh0b2tl
bl90eXBlcy5zZXBhcmF0b3IsICI6IiksCisgICAgICAgICAgICAgKHRva2VuX3R5cGVzLnN0cmlu
ZywgInZhbHVlIildKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0
Lm1haW4oKQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dw
dHJ1bm5lci93cHRydW5uZXIvd3B0cnVubmVyLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQv
dzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvd3B0cnVubmVyLnB5Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jOGUzZTU0NWQ5NQotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3dw
dHJ1bm5lci5weQpAQCAtMCwwICsxLDI4NCBAQAorZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB1bmlj
b2RlX2xpdGVyYWxzCisKK2ltcG9ydCBqc29uCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKKworaW1w
b3J0IGVudmlyb25tZW50IGFzIGVudgoraW1wb3J0IHByb2R1Y3RzCitpbXBvcnQgdGVzdGxvYWRl
cgoraW1wb3J0IHdwdGNvbW1hbmRsaW5lCitpbXBvcnQgd3B0bG9nZ2luZworaW1wb3J0IHdwdHRl
c3QKK2Zyb20gdGVzdHJ1bm5lciBpbXBvcnQgTWFuYWdlckdyb3VwCitmcm9tIGJyb3dzZXJzLmJh
c2UgaW1wb3J0IE51bGxCcm93c2VyCisKK2hlcmUgPSBvcy5wYXRoLnNwbGl0KF9fZmlsZV9fKVsw
XQorCitsb2dnZXIgPSBOb25lCisKKyIiIlJ1bm5lciBmb3Igd2ViLXBsYXRmb3JtLXRlc3RzCisK
K1RoZSBydW5uZXIgaGFzIHNldmVyYWwgZGVzaWduIGdvYWxzOgorCisqIFRlc3RzIHNob3VsZCBy
dW4gd2l0aCBubyBtb2RpZmljYXRpb24gZnJvbSB1cHN0cmVhbS4KKworKiBUZXN0cyBzaG91bGQg
YmUgcmVnYXJkZWQgYXMgInVudHJ1c3RlZCIgc28gdGhhdCBlcnJvcnMsIHRpbWVvdXRzIGFuZCBl
dmVuCisgIGNyYXNoZXMgaW4gdGhlIHRlc3RzIGNhbiBiZSBoYW5kbGVkIHdpdGhvdXQgZmFpbGlu
ZyB0aGUgZW50aXJlIHRlc3QgcnVuLgorCisqIEZvciBwZXJmb3JtYW5jZSB0ZXN0cyBjYW4gYmUg
cnVuIGluIG11bHRpcGxlIGJyb3dzZXJzIGluIHBhcmFsbGVsLgorCitUaGUgdXBzdHJlYW0gcmVw
b3NpdG9yeSBoYXMgdGhlIGZhY2lsaXR5IGZvciBjcmVhdGluZyBhIHRlc3QgbWFuaWZlc3QgaW4g
SlNPTgorZm9ybWF0LiBUaGlzIG1hbmlmZXN0IGlzIHVzZWQgZGlyZWN0bHkgdG8gZGV0ZXJtaW5l
IHdoaWNoIHRlc3RzIGV4aXN0LiBMb2NhbAorbWV0YWRhdGEgZmlsZXMgYXJlIHVzZWQgdG8gc3Rv
cmUgdGhlIGV4cGVjdGVkIHRlc3QgcmVzdWx0cy4KKyIiIgorCitkZWYgc2V0dXBfbG9nZ2luZygq
YXJncywgKiprd2FyZ3MpOgorICAgIGdsb2JhbCBsb2dnZXIKKyAgICBsb2dnZXIgPSB3cHRsb2dn
aW5nLnNldHVwKCphcmdzLCAqKmt3YXJncykKKworZGVmIGdldF9sb2FkZXIodGVzdF9wYXRocywg
cHJvZHVjdCwgc3NsX2VudiwgZGVidWc9Tm9uZSwgcnVuX2luZm9fZXh0cmFzPU5vbmUsICoqa3dh
cmdzKToKKyAgICBpZiBydW5faW5mb19leHRyYXMgaXMgTm9uZToKKyAgICAgICAgcnVuX2luZm9f
ZXh0cmFzID0ge30KKworICAgIHJ1bl9pbmZvID0gd3B0dGVzdC5nZXRfcnVuX2luZm8oa3dhcmdz
WyJydW5faW5mbyJdLCBwcm9kdWN0LCBkZWJ1Zz1kZWJ1ZywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGV4dHJhcz1ydW5faW5mb19leHRyYXMpCisKKyAgICB0ZXN0X21hbmlm
ZXN0cyA9IHRlc3Rsb2FkZXIuTWFuaWZlc3RMb2FkZXIodGVzdF9wYXRocywgZm9yY2VfbWFuaWZl
c3RfdXBkYXRlPWt3YXJnc1sibWFuaWZlc3RfdXBkYXRlIl0pLmxvYWQoKQorCisgICAgbWFuaWZl
c3RfZmlsdGVycyA9IFtdCisgICAgbWV0YV9maWx0ZXJzID0gW10KKworICAgIGlmIGt3YXJnc1si
aW5jbHVkZSJdIG9yIGt3YXJnc1siZXhjbHVkZSJdIG9yIGt3YXJnc1siaW5jbHVkZV9tYW5pZmVz
dCJdOgorICAgICAgICBtYW5pZmVzdF9maWx0ZXJzLmFwcGVuZCh0ZXN0bG9hZGVyLlRlc3RGaWx0
ZXIoaW5jbHVkZT1rd2FyZ3NbImluY2x1ZGUiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGU9a3dhcmdzWyJleGNsdWRlIl0sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYW5p
ZmVzdF9wYXRoPWt3YXJnc1siaW5jbHVkZV9tYW5pZmVzdCJdLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9tYW5pZmVzdHM9dGVzdF9t
YW5pZmVzdHMpKQorICAgIGlmIGt3YXJnc1sidGFncyJdOgorICAgICAgICBtZXRhX2ZpbHRlcnMu
YXBwZW5kKHRlc3Rsb2FkZXIuVGFnRmlsdGVyKHRhZ3M9a3dhcmdzWyJ0YWdzIl0pKQorCisgICAg
dGVzdF9sb2FkZXIgPSB0ZXN0bG9hZGVyLlRlc3RMb2FkZXIodGVzdF9tYW5pZmVzdHMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dhcmdzWyJ0ZXN0X3R5cGVzIl0s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuX2luZm8sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFuaWZlc3RfZmlsdGVycz1tYW5p
ZmVzdF9maWx0ZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1l
dGFfZmlsdGVycz1tZXRhX2ZpbHRlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2h1bmtfdHlwZT1rd2FyZ3NbImNodW5rX3R5cGUiXSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbF9jaHVua3M9a3dhcmdzWyJ0b3RhbF9jaHVu
a3MiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHVua19udW1i
ZXI9a3dhcmdzWyJ0aGlzX2NodW5rIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW5jbHVkZV9odHRwcz1zc2xfZW52LnNzbF9lbmFibGVkKQorICAgIHJldHVybiBy
dW5faW5mbywgdGVzdF9sb2FkZXIKKworZGVmIGxpc3RfdGVzdF9ncm91cHModGVzdF9wYXRocywg
cHJvZHVjdCwgKiprd2FyZ3MpOgorICAgIGVudi5kb19kZWxheWVkX2ltcG9ydHMobG9nZ2VyLCB0
ZXN0X3BhdGhzKQorCisgICAgc3NsX2VudiA9IGVudi5zc2xfZW52KGxvZ2dlciwgKiprd2FyZ3Mp
CisKKyAgICBydW5faW5mb19leHRyYXMgPSBwcm9kdWN0cy5sb2FkX3Byb2R1Y3Qoa3dhcmdzWyJj
b25maWciXSwgcHJvZHVjdClbLTFdKCoqa3dhcmdzKQorCisgICAgcnVuX2luZm8sIHRlc3RfbG9h
ZGVyID0gZ2V0X2xvYWRlcih0ZXN0X3BhdGhzLCBwcm9kdWN0LCBzc2xfZW52LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuX2luZm9fZXh0cmFzPXJ1bl9pbmZvX2V4
dHJhcywgKiprd2FyZ3MpCisKKyAgICBmb3IgaXRlbSBpbiBzb3J0ZWQodGVzdF9sb2FkZXIuZ3Jv
dXBzKGt3YXJnc1sidGVzdF90eXBlcyJdKSk6CisgICAgICAgIHByaW50IGl0ZW0KKworCitkZWYg
bGlzdF9kaXNhYmxlZCh0ZXN0X3BhdGhzLCBwcm9kdWN0LCAqKmt3YXJncyk6CisgICAgZW52LmRv
X2RlbGF5ZWRfaW1wb3J0cyhsb2dnZXIsIHRlc3RfcGF0aHMpCisKKyAgICBydiA9IFtdCisKKyAg
ICBydW5faW5mb19leHRyYXMgPSBwcm9kdWN0cy5sb2FkX3Byb2R1Y3Qoa3dhcmdzWyJjb25maWci
XSwgcHJvZHVjdClbLTFdKCoqa3dhcmdzKQorCisgICAgc3NsX2VudiA9IGVudi5zc2xfZW52KGxv
Z2dlciwgKiprd2FyZ3MpCisKKyAgICBydW5faW5mbywgdGVzdF9sb2FkZXIgPSBnZXRfbG9hZGVy
KHRlc3RfcGF0aHMsIHByb2R1Y3QsIHNzbF9lbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBydW5faW5mb19leHRyYXM9cnVuX2luZm9fZXh0cmFzLCAqKmt3YXJncykK
KworICAgIGZvciB0ZXN0X3R5cGUsIHRlc3RzIGluIHRlc3RfbG9hZGVyLmRpc2FibGVkX3Rlc3Rz
Lml0ZXJpdGVtcygpOgorICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0czoKKyAgICAgICAgICAgIHJ2
LmFwcGVuZCh7InRlc3QiOiB0ZXN0LmlkLCAicmVhc29uIjogdGVzdC5kaXNhYmxlZCgpfSkKKyAg
ICBwcmludCBqc29uLmR1bXBzKHJ2LCBpbmRlbnQ9MikKKworCitkZWYgbGlzdF90ZXN0cyh0ZXN0
X3BhdGhzLCBwcm9kdWN0LCAqKmt3YXJncyk6CisgICAgZW52LmRvX2RlbGF5ZWRfaW1wb3J0cyhs
b2dnZXIsIHRlc3RfcGF0aHMpCisKKyAgICBydiA9IFtdCisKKyAgICBzc2xfZW52ID0gZW52LnNz
bF9lbnYobG9nZ2VyLCAqKmt3YXJncykKKworICAgIHJ1bl9pbmZvX2V4dHJhcyA9IHByb2R1Y3Rz
LmxvYWRfcHJvZHVjdChrd2FyZ3NbImNvbmZpZyJdLCBwcm9kdWN0KVstMV0oKiprd2FyZ3MpCisK
KyAgICBydW5faW5mbywgdGVzdF9sb2FkZXIgPSBnZXRfbG9hZGVyKHRlc3RfcGF0aHMsIHByb2R1
Y3QsIHNzbF9lbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW5f
aW5mb19leHRyYXM9cnVuX2luZm9fZXh0cmFzLCAqKmt3YXJncykKKworICAgIGZvciB0ZXN0IGlu
IHRlc3RfbG9hZGVyLnRlc3RfaWRzOgorICAgICAgICBwcmludCB0ZXN0CisKKworZGVmIGdldF9w
YXVzZV9hZnRlcl90ZXN0KHRlc3RfbG9hZGVyLCAqKmt3YXJncyk6CisgICAgdG90YWxfdGVzdHMg
PSBzdW0obGVuKGl0ZW0pIGZvciBpdGVtIGluIHRlc3RfbG9hZGVyLnRlc3RzLml0ZXJ2YWx1ZXMo
KSkKKyAgICBpZiBrd2FyZ3NbInBhdXNlX2FmdGVyX3Rlc3QiXSBpcyBOb25lOgorICAgICAgICBp
ZiBrd2FyZ3NbInJlcGVhdF91bnRpbF91bmV4cGVjdGVkIl06CisgICAgICAgICAgICByZXR1cm4g
RmFsc2UKKyAgICAgICAgaWYga3dhcmdzWyJyZXBlYXQiXSA9PSAxIGFuZCB0b3RhbF90ZXN0cyA9
PSAxOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAg
cmV0dXJuIGt3YXJnc1sicGF1c2VfYWZ0ZXJfdGVzdCJdCisKKworZGVmIHJ1bl90ZXN0cyhjb25m
aWcsIHRlc3RfcGF0aHMsIHByb2R1Y3QsICoqa3dhcmdzKToKKyAgICB3aXRoIHdwdGxvZ2dpbmcu
Q2FwdHVyZUlPKGxvZ2dlciwgbm90IGt3YXJnc1sibm9fY2FwdHVyZV9zdGRpbyJdKToKKyAgICAg
ICAgZW52LmRvX2RlbGF5ZWRfaW1wb3J0cyhsb2dnZXIsIHRlc3RfcGF0aHMpCisKKyAgICAgICAg
KGNoZWNrX2FyZ3MsCisgICAgICAgICB0YXJnZXRfYnJvd3Nlcl9jbHMsIGdldF9icm93c2VyX2t3
YXJncywKKyAgICAgICAgIGV4ZWN1dG9yX2NsYXNzZXMsIGdldF9leGVjdXRvcl9rd2FyZ3MsCisg
ICAgICAgICBlbnZfb3B0aW9ucywgZ2V0X2Vudl9leHRyYXMsIHJ1bl9pbmZvX2V4dHJhcykgPSBw
cm9kdWN0cy5sb2FkX3Byb2R1Y3QoY29uZmlnLCBwcm9kdWN0KQorCisgICAgICAgIHNzbF9lbnYg
PSBlbnYuc3NsX2Vudihsb2dnZXIsICoqa3dhcmdzKQorICAgICAgICBlbnZfZXh0cmFzID0gZ2V0
X2Vudl9leHRyYXMoKiprd2FyZ3MpCisKKyAgICAgICAgY2hlY2tfYXJncygqKmt3YXJncykKKwor
ICAgICAgICBpZiAidGVzdF9sb2FkZXIiIGluIGt3YXJnczoKKyAgICAgICAgICAgIHJ1bl9pbmZv
ID0gd3B0dGVzdC5nZXRfcnVuX2luZm8oa3dhcmdzWyJydW5faW5mbyJdLCBwcm9kdWN0LCBkZWJ1
Zz1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRy
YXM9cnVuX2luZm9fZXh0cmFzKCoqa3dhcmdzKSkKKyAgICAgICAgICAgIHRlc3RfbG9hZGVyID0g
a3dhcmdzWyJ0ZXN0X2xvYWRlciJdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBydW5faW5m
bywgdGVzdF9sb2FkZXIgPSBnZXRfbG9hZGVyKHRlc3RfcGF0aHMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3QsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF9lbnYsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bl9pbmZvX2V4dHJhcz1ydW5faW5mb19l
eHRyYXMoKiprd2FyZ3MpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAqKmt3YXJncykKKworICAgICAgICB0ZXN0X3NvdXJjZV9rd2FyZ3MgPSB7InByb2Nl
c3NlcyI6IGt3YXJnc1sicHJvY2Vzc2VzIl19CisgICAgICAgIGlmIGt3YXJnc1sicnVuX2J5X2Rp
ciJdIGlzIEZhbHNlOgorICAgICAgICAgICAgdGVzdF9zb3VyY2VfY2xzID0gdGVzdGxvYWRlci5T
aW5nbGVUZXN0U291cmNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIEEgdmFsdWUgb2Yg
Tm9uZSBpbmRpY2F0ZXMgaW5maW5pdGUgZGVwdGgKKyAgICAgICAgICAgIHRlc3Rfc291cmNlX2Ns
cyA9IHRlc3Rsb2FkZXIuUGF0aEdyb3VwZWRTb3VyY2UKKyAgICAgICAgICAgIHRlc3Rfc291cmNl
X2t3YXJnc1siZGVwdGgiXSA9IGt3YXJnc1sicnVuX2J5X2RpciJdCisKKyAgICAgICAgbG9nZ2Vy
LmluZm8oIlVzaW5nICVpIGNsaWVudCBwcm9jZXNzZXMiICUga3dhcmdzWyJwcm9jZXNzZXMiXSkK
KworICAgICAgICB1bmV4cGVjdGVkX3RvdGFsID0gMAorCisgICAgICAgIGt3YXJnc1sicGF1c2Vf
YWZ0ZXJfdGVzdCJdID0gZ2V0X3BhdXNlX2FmdGVyX3Rlc3QodGVzdF9sb2FkZXIsICoqa3dhcmdz
KQorCisgICAgICAgIHdpdGggZW52LlRlc3RFbnZpcm9ubWVudCh0ZXN0X3BhdGhzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX2VudiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGt3YXJnc1sicGF1c2VfYWZ0ZXJfdGVzdCJdLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAga3dhcmdzWyJkZWJ1Z19pbmZvIl0sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbnZfb3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVudl9leHRyYXMpIGFzIHRlc3RfZW52aXJvbm1lbnQ6CisgICAgICAgICAgICB0cnk6
CisgICAgICAgICAgICAgICAgdGVzdF9lbnZpcm9ubWVudC5lbnN1cmVfc3RhcnRlZCgpCisgICAg
ICAgICAgICBleGNlcHQgZW52LlRlc3RFbnZpcm9ubWVudEVycm9yIGFzIGU6CisgICAgICAgICAg
ICAgICAgbG9nZ2VyLmNyaXRpY2FsKCJFcnJvciBzdGFydGluZyB0ZXN0IGVudmlyb25tZW50OiAl
cyIgJSBlLm1lc3NhZ2UpCisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICAgICAgcmVw
ZWF0ID0ga3dhcmdzWyJyZXBlYXQiXQorICAgICAgICAgICAgcmVwZWF0X2NvdW50ID0gMAorICAg
ICAgICAgICAgcmVwZWF0X3VudGlsX3VuZXhwZWN0ZWQgPSBrd2FyZ3NbInJlcGVhdF91bnRpbF91
bmV4cGVjdGVkIl0KKworICAgICAgICAgICAgd2hpbGUgcmVwZWF0X2NvdW50IDwgcmVwZWF0IG9y
IHJlcGVhdF91bnRpbF91bmV4cGVjdGVkOgorICAgICAgICAgICAgICAgIHJlcGVhdF9jb3VudCAr
PSAxCisgICAgICAgICAgICAgICAgaWYgcmVwZWF0X3VudGlsX3VuZXhwZWN0ZWQ6CisgICAgICAg
ICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJSZXBldGl0aW9uICVpIiAlIChyZXBlYXRfY291bnQp
KQorICAgICAgICAgICAgICAgIGVsaWYgcmVwZWF0ID4gMToKKyAgICAgICAgICAgICAgICAgICAg
bG9nZ2VyLmluZm8oIlJlcGV0aXRpb24gJWkgLyAlaSIgJSAocmVwZWF0X2NvdW50LCByZXBlYXQp
KQorCisgICAgICAgICAgICAgICAgdW5leHBlY3RlZF9jb3VudCA9IDAKKyAgICAgICAgICAgICAg
ICBsb2dnZXIuc3VpdGVfc3RhcnQodGVzdF9sb2FkZXIudGVzdF9pZHMsIHJ1bl9pbmZvKQorICAg
ICAgICAgICAgICAgIGZvciB0ZXN0X3R5cGUgaW4ga3dhcmdzWyJ0ZXN0X3R5cGVzIl06CisgICAg
ICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJSdW5uaW5nICVzIHRlc3RzIiAlIHRlc3RfdHlw
ZSkKKworICAgICAgICAgICAgICAgICAgICAjIFdlYkRyaXZlciB0ZXN0cyBtYXkgY3JlYXRlIGFu
ZCBkZXN0cm95IG11bHRpcGxlIGJyb3dzZXIKKyAgICAgICAgICAgICAgICAgICAgIyBwcm9jZXNz
ZXMgYXMgcGFydCBvZiB0aGVpciBleHBlY3RlZCBiZWhhdmlvci4gVGhlc2UKKyAgICAgICAgICAg
ICAgICAgICAgIyBwcm9jZXNzZXMgYXJlIG1hbmFnZWQgYnkgYSBXZWJEcml2ZXIgc2VydmVyIGJp
bmFyeS4gVGhpcworICAgICAgICAgICAgICAgICAgICAjIG9idmlhdGVzIHRoZSBuZWVkIGZvciB3
cHRydW5uZXIgdG8gcHJvdmlkZSBhIGJyb3dzZXIsIHNvCisgICAgICAgICAgICAgICAgICAgICMg
dGhlIE51bGxCcm93c2VyIGlzIHVzZWQgaW4gcGxhY2Ugb2YgdGhlICJ0YXJnZXQiIGJyb3dzZXIK
KyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdF90eXBlID09ICJ3ZHNwZWMiOgorICAgICAgICAg
ICAgICAgICAgICAgICAgYnJvd3Nlcl9jbHMgPSBOdWxsQnJvd3NlcgorICAgICAgICAgICAgICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJvd3Nlcl9jbHMgPSB0YXJnZXRf
YnJvd3Nlcl9jbHMKKworICAgICAgICAgICAgICAgICAgICBicm93c2VyX2t3YXJncyA9IGdldF9i
cm93c2VyX2t3YXJncyh0ZXN0X3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bl9pbmZvLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfZW52PXNzbF9lbnYsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqa3dh
cmdzKQorCisKKyAgICAgICAgICAgICAgICAgICAgZXhlY3V0b3JfY2xzID0gZXhlY3V0b3JfY2xh
c3Nlcy5nZXQodGVzdF90eXBlKQorICAgICAgICAgICAgICAgICAgICBleGVjdXRvcl9rd2FyZ3Mg
PSBnZXRfZXhlY3V0b3Jfa3dhcmdzKHRlc3RfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2Vudmlyb25tZW50LmV4dGVy
bmFsX2NvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0ZXN0X2Vudmlyb25tZW50LmNhY2hlX21hbmFnZXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuX2luZm8s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKiprd2FyZ3MpCisKKyAgICAgICAgICAgICAgICAgICAgaWYgZXhlY3V0b3JfY2xzIGlzIE5v
bmU6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlVuc3VwcG9ydGVkIHRl
c3QgdHlwZSAlcyBmb3IgcHJvZHVjdCAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICh0ZXN0X3R5cGUsIHByb2R1Y3QpKQorICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWUKKworICAgICAgICAgICAgICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0X2xvYWRlci5k
aXNhYmxlZF90ZXN0c1t0ZXN0X3R5cGVdOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2Vy
LnRlc3Rfc3RhcnQodGVzdC5pZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci50ZXN0
X2VuZCh0ZXN0LmlkLCBzdGF0dXM9IlNLSVAiKQorCisgICAgICAgICAgICAgICAgICAgIHdpdGgg
TWFuYWdlckdyb3VwKCJ3ZWItcGxhdGZvcm0tdGVzdHMiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBrd2FyZ3NbInByb2Nlc3NlcyJdLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0ZXN0X3NvdXJjZV9jbHMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRlc3Rfc291cmNlX2t3YXJncywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJvd3Nlcl9jbHMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyb3dzZXJfa3dhcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBleGVjdXRvcl9jbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGV4ZWN1dG9yX2t3YXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAga3dhcmdzWyJwYXVzZV9hZnRlcl90ZXN0Il0sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGt3YXJnc1sicGF1c2Vfb25fdW5leHBlY3RlZCJdLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2FyZ3NbInJlc3RhcnRfb25fdW5leHBl
Y3RlZCJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2FyZ3NbImRl
YnVnX2luZm8iXSkgYXMgbWFuYWdlcl9ncm91cDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRy
eToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYW5hZ2VyX2dyb3VwLnJ1bih0ZXN0X3R5
cGUsIHRlc3RfbG9hZGVyLnRlc3RzKQorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEtl
eWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5jcml0
aWNhbCgiTWFpbiB0aHJlYWQgZ290IHNpZ25hbCIpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbWFuYWdlcl9ncm91cC5zdG9wKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlz
ZQorICAgICAgICAgICAgICAgICAgICB1bmV4cGVjdGVkX2NvdW50ICs9IG1hbmFnZXJfZ3JvdXAu
dW5leHBlY3RlZF9jb3VudCgpCisKKyAgICAgICAgICAgICAgICB1bmV4cGVjdGVkX3RvdGFsICs9
IHVuZXhwZWN0ZWRfY291bnQKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiR290ICVpIHVu
ZXhwZWN0ZWQgcmVzdWx0cyIgJSB1bmV4cGVjdGVkX2NvdW50KQorICAgICAgICAgICAgICAgIGlm
IHJlcGVhdF91bnRpbF91bmV4cGVjdGVkIGFuZCB1bmV4cGVjdGVkX3RvdGFsID4gMDoKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBsb2dnZXIuc3VpdGVfZW5kKCkK
KworICAgIHJldHVybiB1bmV4cGVjdGVkX3RvdGFsID09IDAKKworZGVmIHN0YXJ0KCoqa3dhcmdz
KToKKyAgICBpZiBrd2FyZ3NbImxpc3RfdGVzdF9ncm91cHMiXToKKyAgICAgICAgbGlzdF90ZXN0
X2dyb3VwcygqKmt3YXJncykKKyAgICBlbGlmIGt3YXJnc1sibGlzdF9kaXNhYmxlZCJdOgorICAg
ICAgICBsaXN0X2Rpc2FibGVkKCoqa3dhcmdzKQorICAgIGVsaWYga3dhcmdzWyJsaXN0X3Rlc3Rz
Il06CisgICAgICAgIGxpc3RfdGVzdHMoKiprd2FyZ3MpCisgICAgZWxzZToKKyAgICAgICAgcmV0
dXJuIG5vdCBydW5fdGVzdHMoKiprd2FyZ3MpCisKK2RlZiBtYWluKCk6CisgICAgIiIiTWFpbiBl
bnRyeSBwb2ludCB3aGVuIGNhbGxpbmcgZnJvbSB0aGUgY29tbWFuZCBsaW5lIiIiCisgICAga3dh
cmdzID0gd3B0Y29tbWFuZGxpbmUucGFyc2VfYXJncygpCisKKyAgICB0cnk6CisgICAgICAgIGlm
IGt3YXJnc1sicHJlZnNfcm9vdCJdIGlzIE5vbmU6CisgICAgICAgICAgICBrd2FyZ3NbInByZWZz
X3Jvb3QiXSA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4oaGVyZSwgInByZWZzIikpCisK
KyAgICAgICAgc2V0dXBfbG9nZ2luZyhrd2FyZ3MsIHsicmF3Ijogc3lzLnN0ZG91dH0pCisKKyAg
ICAgICAgcmV0dXJuIHN0YXJ0KCoqa3dhcmdzKQorICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAg
ICAgIGlmIGt3YXJnc1sicGRiIl06CisgICAgICAgICAgICBpbXBvcnQgcGRiLCB0cmFjZWJhY2sK
KyAgICAgICAgICAgIHByaW50IHRyYWNlYmFjay5mb3JtYXRfZXhjKCkKKyAgICAgICAgICAgIHBk
Yi5wb3N0X21vcnRlbSgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZQpkaWZmIC0t
Z2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5u
ZXIvd3B0dGVzdC5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5u
ZXIvd3B0cnVubmVyL3dwdHRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLjg2MzIwZjhmZjg0Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1w
b3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvd3B0dGVzdC5weQpAQCAtMCwwICsx
LDM3NSBAQAoraW1wb3J0IG9zCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZWZhdWx0ZGljdAor
Citmcm9tIHdwdG1hbmlmZXN0LnBhcnNlciBpbXBvcnQgYXRvbXMKKworYXRvbV9yZXNldCA9IGF0
b21zWyJSZXNldCJdCitlbmFibGVkX3Rlc3RzID0gc2V0KFsidGVzdGhhcm5lc3MiLCAicmVmdGVz
dCIsICJ3ZHNwZWMiXSkKKworCitjbGFzcyBSZXN1bHQob2JqZWN0KToKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgc3RhdHVzLCBtZXNzYWdlLCBleHBlY3RlZD1Ob25lLCBleHRyYT1Ob25lKToKKyAg
ICAgICAgaWYgc3RhdHVzIG5vdCBpbiBzZWxmLnN0YXR1c2VzOgorICAgICAgICAgICAgcmFpc2Ug
VmFsdWVFcnJvcigiVW5yZWNvZ25pc2VkIHN0YXR1cyAlcyIgJSBzdGF0dXMpCisgICAgICAgIHNl
bGYuc3RhdHVzID0gc3RhdHVzCisgICAgICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2UKKyAgICAg
ICAgc2VsZi5leHBlY3RlZCA9IGV4cGVjdGVkCisgICAgICAgIHNlbGYuZXh0cmEgPSBleHRyYQor
CisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIjwlcy4lcyAlcz4iICUg
KHNlbGYuX19tb2R1bGVfXywgc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIHNlbGYuc3RhdHVzKQor
CisKK2NsYXNzIFN1YnRlc3RSZXN1bHQob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
bmFtZSwgc3RhdHVzLCBtZXNzYWdlLCBzdGFjaz1Ob25lLCBleHBlY3RlZD1Ob25lKToKKyAgICAg
ICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICBpZiBzdGF0dXMgbm90IGluIHNlbGYuc3RhdHVz
ZXM6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJVbnJlY29nbmlzZWQgc3RhdHVzICVz
IiAlIHN0YXR1cykKKyAgICAgICAgc2VsZi5zdGF0dXMgPSBzdGF0dXMKKyAgICAgICAgc2VsZi5t
ZXNzYWdlID0gbWVzc2FnZQorICAgICAgICBzZWxmLnN0YWNrID0gc3RhY2sKKyAgICAgICAgc2Vs
Zi5leHBlY3RlZCA9IGV4cGVjdGVkCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAg
IHJldHVybiAiPCVzLiVzICVzICVzPiIgJSAoc2VsZi5fX21vZHVsZV9fLCBzZWxmLl9fY2xhc3Nf
Xy5fX25hbWVfXywgc2VsZi5uYW1lLCBzZWxmLnN0YXR1cykKKworCitjbGFzcyBUZXN0aGFybmVz
c1Jlc3VsdChSZXN1bHQpOgorICAgIGRlZmF1bHRfZXhwZWN0ZWQgPSAiT0siCisgICAgc3RhdHVz
ZXMgPSBzZXQoWyJPSyIsICJFUlJPUiIsICJUSU1FT1VUIiwgIkVYVEVSTkFMLVRJTUVPVVQiLCAi
Q1JBU0giXSkKKworCitjbGFzcyBUZXN0aGFybmVzc1N1YnRlc3RSZXN1bHQoU3VidGVzdFJlc3Vs
dCk6CisgICAgZGVmYXVsdF9leHBlY3RlZCA9ICJQQVNTIgorICAgIHN0YXR1c2VzID0gc2V0KFsi
UEFTUyIsICJGQUlMIiwgIlRJTUVPVVQiLCAiTk9UUlVOIl0pCisKKworY2xhc3MgUmVmdGVzdFJl
c3VsdChSZXN1bHQpOgorICAgIGRlZmF1bHRfZXhwZWN0ZWQgPSAiUEFTUyIKKyAgICBzdGF0dXNl
cyA9IHNldChbIlBBU1MiLCAiRkFJTCIsICJFUlJPUiIsICJUSU1FT1VUIiwgIkVYVEVSTkFMLVRJ
TUVPVVQiLCAiQ1JBU0giXSkKKworCitjbGFzcyBXZHNwZWNSZXN1bHQoUmVzdWx0KToKKyAgICBk
ZWZhdWx0X2V4cGVjdGVkID0gIk9LIgorICAgIHN0YXR1c2VzID0gc2V0KFsiT0siLCAiRVJST1Ii
LCAiVElNRU9VVCIsICJFWFRFUk5BTC1USU1FT1VUIiwgIkNSQVNIIl0pCisKKworY2xhc3MgV2Rz
cGVjU3VidGVzdFJlc3VsdChTdWJ0ZXN0UmVzdWx0KToKKyAgICBkZWZhdWx0X2V4cGVjdGVkID0g
IlBBU1MiCisgICAgc3RhdHVzZXMgPSBzZXQoWyJQQVNTIiwgIkZBSUwiLCAiRVJST1IiXSkKKwor
CitkZWYgZ2V0X3J1bl9pbmZvKG1ldGFkYXRhX3Jvb3QsIHByb2R1Y3QsICoqa3dhcmdzKToKKyAg
ICByZXR1cm4gUnVuSW5mbyhtZXRhZGF0YV9yb290LCBwcm9kdWN0LCAqKmt3YXJncykKKworCitj
bGFzcyBSdW5JbmZvKGRpY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXRhZGF0YV9yb290
LCBwcm9kdWN0LCBkZWJ1ZywgZXh0cmFzPU5vbmUpOgorICAgICAgICBpbXBvcnQgbW96aW5mbwor
CisgICAgICAgIHNlbGYuX3VwZGF0ZV9tb3ppbmZvKG1ldGFkYXRhX3Jvb3QpCisgICAgICAgIHNl
bGYudXBkYXRlKG1vemluZm8uaW5mbykKKyAgICAgICAgc2VsZlsicHJvZHVjdCJdID0gcHJvZHVj
dAorICAgICAgICBpZiBkZWJ1ZyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGZbImRlYnVn
Il0gPSBkZWJ1ZworICAgICAgICBlbGlmICJkZWJ1ZyIgbm90IGluIHNlbGY6CisgICAgICAgICAg
ICAjIERlZmF1bHQgdG8gcmVsZWFzZQorICAgICAgICAgICAgc2VsZlsiZGVidWciXSA9IEZhbHNl
CisgICAgICAgIGlmIHByb2R1Y3QgPT0gImZpcmVmb3giIGFuZCAic3R5bG8iIG5vdCBpbiBzZWxm
OgorICAgICAgICAgICAgc2VsZlsic3R5bG8iXSA9IEZhbHNlCisgICAgICAgIGlmICJTVFlMT19G
T1JDRV9FTkFCTEVEIiBpbiBvcy5lbnZpcm9uOgorICAgICAgICAgICAgc2VsZlsic3R5bG8iXSA9
IFRydWUKKyAgICAgICAgaWYgIlNUWUxPX0ZPUkNFX0RJU0FCTEVEIiBpbiBvcy5lbnZpcm9uOgor
ICAgICAgICAgICAgc2VsZlsic3R5bG8iXSA9IEZhbHNlCisgICAgICAgIGlmIGV4dHJhcyBpcyBu
b3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYudXBkYXRlKGV4dHJhcykKKworICAgIGRlZiBfdXBk
YXRlX21vemluZm8oc2VsZiwgbWV0YWRhdGFfcm9vdCk6CisgICAgICAgICIiIkFkZCBleHRyYSBi
dWlsZCBpbmZvcm1hdGlvbiBmcm9tIGEgbW96aW5mby5qc29uIGZpbGUgaW4gYSBwYXJlbnQKKyAg
ICAgICAgZGlyZWN0b3J5IiIiCisgICAgICAgIGltcG9ydCBtb3ppbmZvCisKKyAgICAgICAgcGF0
aCA9IG1ldGFkYXRhX3Jvb3QKKyAgICAgICAgZGlycyA9IHNldCgpCisgICAgICAgIHdoaWxlIHBh
dGggIT0gb3MucGF0aC5leHBhbmR1c2VyKCd+Jyk6CisgICAgICAgICAgICBpZiBwYXRoIGluIGRp
cnM6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGRpcnMuYWRkKHN0cihwYXRo
KSkKKyAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLnNwbGl0KHBhdGgpWzBdCisKKyAgICAgICAg
bW96aW5mby5maW5kX2FuZF91cGRhdGVfZnJvbV9qc29uKCpkaXJzKQorCisKK2NsYXNzIFRlc3Qo
b2JqZWN0KToKKworICAgIHJlc3VsdF9jbHMgPSBOb25lCisgICAgc3VidGVzdF9yZXN1bHRfY2xz
ID0gTm9uZQorICAgIHRlc3RfdHlwZSA9IE5vbmUKKworICAgIGRlZmF1bHRfdGltZW91dCA9IDEw
ICAjIHNlY29uZHMKKyAgICBsb25nX3RpbWVvdXQgPSA2MCAgIyBzZWNvbmRzCisKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgdGVzdHNfcm9vdCwgdXJsLCBpbmhlcml0X21ldGFkYXRhLCB0ZXN0X21l
dGFkYXRhLAorICAgICAgICAgICAgICAgICB0aW1lb3V0PU5vbmUsIHBhdGg9Tm9uZSwgcHJvdG9j
b2w9Imh0dHAiKToKKyAgICAgICAgc2VsZi50ZXN0c19yb290ID0gdGVzdHNfcm9vdAorICAgICAg
ICBzZWxmLnVybCA9IHVybAorICAgICAgICBzZWxmLl9pbmhlcml0X21ldGFkYXRhID0gaW5oZXJp
dF9tZXRhZGF0YQorICAgICAgICBzZWxmLl90ZXN0X21ldGFkYXRhID0gdGVzdF9tZXRhZGF0YQor
ICAgICAgICBzZWxmLnRpbWVvdXQgPSB0aW1lb3V0IGlmIHRpbWVvdXQgaXMgbm90IE5vbmUgZWxz
ZSBzZWxmLmRlZmF1bHRfdGltZW91dAorICAgICAgICBzZWxmLnBhdGggPSBwYXRoCisgICAgICAg
IHNlbGYuZW52aXJvbm1lbnQgPSB7InByb3RvY29sIjogcHJvdG9jb2wsICJwcmVmcyI6IHNlbGYu
cHJlZnN9CisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNl
bGYuaWQgPT0gb3RoZXIuaWQKKworICAgIGRlZiB1cGRhdGVfbWV0YWRhdGEoc2VsZiwgbWV0YWRh
dGE9Tm9uZSk6CisgICAgICAgIGlmIG1ldGFkYXRhIGlzIE5vbmU6CisgICAgICAgICAgICBtZXRh
ZGF0YSA9IHt9CisgICAgICAgIHJldHVybiBtZXRhZGF0YQorCisgICAgQGNsYXNzbWV0aG9kCisg
ICAgZGVmIGZyb21fbWFuaWZlc3QoY2xzLCBtYW5pZmVzdF9pdGVtLCBpbmhlcml0X21ldGFkYXRh
LCB0ZXN0X21ldGFkYXRhKToKKyAgICAgICAgdGltZW91dCA9IGNscy5sb25nX3RpbWVvdXQgaWYg
bWFuaWZlc3RfaXRlbS50aW1lb3V0ID09ICJsb25nIiBlbHNlIGNscy5kZWZhdWx0X3RpbWVvdXQK
KyAgICAgICAgcHJvdG9jb2wgPSAiaHR0cHMiIGlmIGhhc2F0dHIobWFuaWZlc3RfaXRlbSwgImh0
dHBzIikgYW5kIG1hbmlmZXN0X2l0ZW0uaHR0cHMgZWxzZSAiaHR0cCIKKyAgICAgICAgcmV0dXJu
IGNscyhtYW5pZmVzdF9pdGVtLnNvdXJjZV9maWxlLnRlc3RzX3Jvb3QsCisgICAgICAgICAgICAg
ICAgICAgbWFuaWZlc3RfaXRlbS51cmwsCisgICAgICAgICAgICAgICAgICAgaW5oZXJpdF9tZXRh
ZGF0YSwKKyAgICAgICAgICAgICAgICAgICB0ZXN0X21ldGFkYXRhLAorICAgICAgICAgICAgICAg
ICAgIHRpbWVvdXQ9dGltZW91dCwKKyAgICAgICAgICAgICAgICAgICBwYXRoPW1hbmlmZXN0X2l0
ZW0uc291cmNlX2ZpbGUucGF0aCwKKyAgICAgICAgICAgICAgICAgICBwcm90b2NvbD1wcm90b2Nv
bCkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBpZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNl
bGYudXJsCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYga2V5cyhzZWxmKToKKyAgICAgICAgcmV0
dXJuIHR1cGxlKCkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBhYnNfcGF0aChzZWxmKToKKyAg
ICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLnRlc3RzX3Jvb3QsIHNlbGYucGF0aCkKKwor
ICAgIGRlZiBfZ2V0X21ldGFkYXRhKHNlbGYsIHN1YnRlc3Q9Tm9uZSk6CisgICAgICAgIGlmIHNl
bGYuX3Rlc3RfbWV0YWRhdGEgaXMgbm90IE5vbmUgYW5kIHN1YnRlc3QgaXMgbm90IE5vbmU6Cisg
ICAgICAgICAgICByZXR1cm4gc2VsZi5fdGVzdF9tZXRhZGF0YS5nZXRfc3VidGVzdChzdWJ0ZXN0
KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3Rlc3RfbWV0YWRhdGEK
KworICAgIGRlZiBpdGVybWV0YShzZWxmLCBzdWJ0ZXN0PU5vbmUpOgorICAgICAgICBmb3IgbWV0
YWRhdGEgaW4gc2VsZi5faW5oZXJpdF9tZXRhZGF0YToKKyAgICAgICAgICAgIHlpZWxkIG1ldGFk
YXRhCisKKyAgICAgICAgaWYgc2VsZi5fdGVzdF9tZXRhZGF0YSBpcyBub3QgTm9uZToKKyAgICAg
ICAgICAgIHlpZWxkIHNlbGYuX2dldF9tZXRhZGF0YSgpCisgICAgICAgICAgICBpZiBzdWJ0ZXN0
IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHN1YnRlc3RfbWV0YSA9IHNlbGYuX2dldF9t
ZXRhZGF0YShzdWJ0ZXN0KQorICAgICAgICAgICAgICAgIGlmIHN1YnRlc3RfbWV0YSBpcyBub3Qg
Tm9uZToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgc3VidGVzdF9tZXRhCisKKyAgICBkZWYg
ZGlzYWJsZWQoc2VsZiwgc3VidGVzdD1Ob25lKToKKyAgICAgICAgZm9yIG1ldGEgaW4gc2VsZi5p
dGVybWV0YShzdWJ0ZXN0KToKKyAgICAgICAgICAgIGRpc2FibGVkID0gbWV0YS5kaXNhYmxlZAor
ICAgICAgICAgICAgaWYgZGlzYWJsZWQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmV0
dXJuIGRpc2FibGVkCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBAcHJvcGVydHkKKyAgICBk
ZWYgcmVzdGFydF9hZnRlcihzZWxmKToKKyAgICAgICAgZm9yIG1ldGEgaW4gc2VsZi5pdGVybWV0
YShOb25lKToKKyAgICAgICAgICAgIHJlc3RhcnRfYWZ0ZXIgPSBtZXRhLnJlc3RhcnRfYWZ0ZXIK
KyAgICAgICAgICAgIGlmIHJlc3RhcnRfYWZ0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBAcHJvcGVydHkKKyAg
ICBkZWYgbGVha3Moc2VsZik6CisgICAgICAgIGZvciBtZXRhIGluIHNlbGYuaXRlcm1ldGEoTm9u
ZSk6CisgICAgICAgICAgICBsZWFrcyA9IG1ldGEubGVha3MKKyAgICAgICAgICAgIGlmIGxlYWtz
IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJldHVybiBsZWFrcworICAgICAgICByZXR1
cm4gRmFsc2UKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB0YWdzKHNlbGYpOgorICAgICAgICB0
YWdzID0gc2V0KCkKKyAgICAgICAgZm9yIG1ldGEgaW4gc2VsZi5pdGVybWV0YSgpOgorICAgICAg
ICAgICAgbWV0YV90YWdzID0gbWV0YS50YWdzCisgICAgICAgICAgICBpZiBhdG9tX3Jlc2V0IGlu
IG1ldGFfdGFnczoKKyAgICAgICAgICAgICAgICB0YWdzID0gbWV0YV90YWdzLmNvcHkoKQorICAg
ICAgICAgICAgICAgIHRhZ3MucmVtb3ZlKGF0b21fcmVzZXQpCisgICAgICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgICAgIHRhZ3MgfD0gbWV0YV90YWdzCisKKyAgICAgICAgdGFncy5hZGQoImRp
cjolcyIgJSBzZWxmLmlkLmxzdHJpcCgiLyIpLnNwbGl0KCIvIilbMF0pCisKKyAgICAgICAgcmV0
dXJuIHRhZ3MKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBwcmVmcyhzZWxmKToKKyAgICAgICAg
cHJlZnMgPSB7fQorICAgICAgICBmb3IgbWV0YSBpbiBzZWxmLml0ZXJtZXRhKCk6CisgICAgICAg
ICAgICBtZXRhX3ByZWZzID0gbWV0YS5wcmVmcworICAgICAgICAgICAgaWYgYXRvbV9yZXNldCBp
biBwcmVmczoKKyAgICAgICAgICAgICAgICBwcmVmcyA9IG1ldGFfcHJlZnMuY29weSgpCisgICAg
ICAgICAgICAgICAgZGVsIHByZWZzW2F0b21fcmVzZXRdCisgICAgICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgICAgIHByZWZzLnVwZGF0ZShtZXRhX3ByZWZzKQorICAgICAgICByZXR1cm4gcHJl
ZnMKKworICAgIGRlZiBleHBlY3RlZChzZWxmLCBzdWJ0ZXN0PU5vbmUpOgorICAgICAgICBpZiBz
dWJ0ZXN0IGlzIE5vbmU6CisgICAgICAgICAgICBkZWZhdWx0ID0gc2VsZi5yZXN1bHRfY2xzLmRl
ZmF1bHRfZXhwZWN0ZWQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRlZmF1bHQgPSBzZWxm
LnN1YnRlc3RfcmVzdWx0X2Nscy5kZWZhdWx0X2V4cGVjdGVkCisKKyAgICAgICAgbWV0YWRhdGEg
PSBzZWxmLl9nZXRfbWV0YWRhdGEoc3VidGVzdCkKKyAgICAgICAgaWYgbWV0YWRhdGEgaXMgTm9u
ZToKKyAgICAgICAgICAgIHJldHVybiBkZWZhdWx0CisKKyAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgcmV0dXJuIG1ldGFkYXRhLmdldCgiZXhwZWN0ZWQiKQorICAgICAgICBleGNlcHQgS2V5RXJy
b3I6CisgICAgICAgICAgICByZXR1cm4gZGVmYXVsdAorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYp
OgorICAgICAgICByZXR1cm4gIjwlcy4lcyAlcz4iICUgKHNlbGYuX19tb2R1bGVfXywgc2VsZi5f
X2NsYXNzX18uX19uYW1lX18sIHNlbGYuaWQpCisKKworY2xhc3MgVGVzdGhhcm5lc3NUZXN0KFRl
c3QpOgorICAgIHJlc3VsdF9jbHMgPSBUZXN0aGFybmVzc1Jlc3VsdAorICAgIHN1YnRlc3RfcmVz
dWx0X2NscyA9IFRlc3RoYXJuZXNzU3VidGVzdFJlc3VsdAorICAgIHRlc3RfdHlwZSA9ICJ0ZXN0
aGFybmVzcyIKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBpZChzZWxmKToKKyAgICAgICAgcmV0
dXJuIHNlbGYudXJsCisKKworY2xhc3MgTWFudWFsVGVzdChUZXN0KToKKyAgICB0ZXN0X3R5cGUg
PSAibWFudWFsIgorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGlkKHNlbGYpOgorICAgICAgICBy
ZXR1cm4gc2VsZi51cmwKKworCitjbGFzcyBSZWZ0ZXN0VGVzdChUZXN0KToKKyAgICByZXN1bHRf
Y2xzID0gUmVmdGVzdFJlc3VsdAorICAgIHRlc3RfdHlwZSA9ICJyZWZ0ZXN0IgorCisgICAgZGVm
IF9faW5pdF9fKHNlbGYsIHRlc3RzX3Jvb3QsIHVybCwgaW5oZXJpdF9tZXRhZGF0YSwgdGVzdF9t
ZXRhZGF0YSwgcmVmZXJlbmNlcywKKyAgICAgICAgICAgICAgICAgdGltZW91dD1Ob25lLCBwYXRo
PU5vbmUsIHZpZXdwb3J0X3NpemU9Tm9uZSwgZHBpPU5vbmUsIHByb3RvY29sPSJodHRwIik6Cisg
ICAgICAgIFRlc3QuX19pbml0X18oc2VsZiwgdGVzdHNfcm9vdCwgdXJsLCBpbmhlcml0X21ldGFk
YXRhLCB0ZXN0X21ldGFkYXRhLCB0aW1lb3V0LAorICAgICAgICAgICAgICAgICAgICAgIHBhdGgs
IHByb3RvY29sKQorCisgICAgICAgIGZvciBfLCByZWZfdHlwZSBpbiByZWZlcmVuY2VzOgorICAg
ICAgICAgICAgaWYgcmVmX3R5cGUgbm90IGluICgiPT0iLCAiIT0iKToKKyAgICAgICAgICAgICAg
ICByYWlzZSBWYWx1ZUVycm9yCisKKyAgICAgICAgc2VsZi5yZWZlcmVuY2VzID0gcmVmZXJlbmNl
cworICAgICAgICBzZWxmLnZpZXdwb3J0X3NpemUgPSB2aWV3cG9ydF9zaXplCisgICAgICAgIHNl
bGYuZHBpID0gZHBpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZnJvbV9tYW5pZmVzdChj
bHMsCisgICAgICAgICAgICAgICAgICAgICAgbWFuaWZlc3RfdGVzdCwKKyAgICAgICAgICAgICAg
ICAgICAgICBpbmhlcml0X21ldGFkYXRhLAorICAgICAgICAgICAgICAgICAgICAgIHRlc3RfbWV0
YWRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgbm9kZXM9Tm9uZSwKKyAgICAgICAgICAgICAg
ICAgICAgICByZWZlcmVuY2VzX3NlZW49Tm9uZSk6CisKKyAgICAgICAgdGltZW91dCA9IGNscy5s
b25nX3RpbWVvdXQgaWYgbWFuaWZlc3RfdGVzdC50aW1lb3V0ID09ICJsb25nIiBlbHNlIGNscy5k
ZWZhdWx0X3RpbWVvdXQKKworICAgICAgICBpZiBub2RlcyBpcyBOb25lOgorICAgICAgICAgICAg
bm9kZXMgPSB7fQorICAgICAgICBpZiByZWZlcmVuY2VzX3NlZW4gaXMgTm9uZToKKyAgICAgICAg
ICAgIHJlZmVyZW5jZXNfc2VlbiA9IHNldCgpCisKKyAgICAgICAgdXJsID0gbWFuaWZlc3RfdGVz
dC51cmwKKworICAgICAgICBub2RlID0gY2xzKG1hbmlmZXN0X3Rlc3Quc291cmNlX2ZpbGUudGVz
dHNfcm9vdCwKKyAgICAgICAgICAgICAgICAgICBtYW5pZmVzdF90ZXN0LnVybCwKKyAgICAgICAg
ICAgICAgICAgICBpbmhlcml0X21ldGFkYXRhLAorICAgICAgICAgICAgICAgICAgIHRlc3RfbWV0
YWRhdGEsCisgICAgICAgICAgICAgICAgICAgW10sCisgICAgICAgICAgICAgICAgICAgdGltZW91
dD10aW1lb3V0LAorICAgICAgICAgICAgICAgICAgIHBhdGg9bWFuaWZlc3RfdGVzdC5wYXRoLAor
ICAgICAgICAgICAgICAgICAgIHZpZXdwb3J0X3NpemU9bWFuaWZlc3RfdGVzdC52aWV3cG9ydF9z
aXplLAorICAgICAgICAgICAgICAgICAgIGRwaT1tYW5pZmVzdF90ZXN0LmRwaSwKKyAgICAgICAg
ICAgICAgICAgICBwcm90b2NvbD0iaHR0cHMiIGlmIGhhc2F0dHIobWFuaWZlc3RfdGVzdCwgImh0
dHBzIikgYW5kIG1hbmlmZXN0X3Rlc3QuaHR0cHMgZWxzZSAiaHR0cCIpCisKKyAgICAgICAgbm9k
ZXNbdXJsXSA9IG5vZGUKKworICAgICAgICBmb3IgcmVmX3VybCwgcmVmX3R5cGUgaW4gbWFuaWZl
c3RfdGVzdC5yZWZlcmVuY2VzOgorICAgICAgICAgICAgY29tcGFyaXNvbl9rZXkgPSAocmVmX3R5
cGUsKSArIHR1cGxlKHNvcnRlZChbdXJsLCByZWZfdXJsXSkpCisgICAgICAgICAgICBpZiByZWZf
dXJsIGluIG5vZGVzOgorICAgICAgICAgICAgICAgIG1hbmlmZXN0X25vZGUgPSByZWZfdXJsCisg
ICAgICAgICAgICAgICAgaWYgY29tcGFyaXNvbl9rZXkgaW4gcmVmZXJlbmNlc19zZWVuOgorICAg
ICAgICAgICAgICAgICAgICAjIFdlIGhhdmUgcmVhY2hlZCBhIGN5Y2xlIHNvIHN0b3AgaGVyZQor
ICAgICAgICAgICAgICAgICAgICAjIE5vdGUgdGhhdCBqdXN0IHNlZWluZyBhIG5vZGUgZm9yIHRo
ZSBzZWNvbmQgdGltZSBpcyBub3QKKyAgICAgICAgICAgICAgICAgICAgIyBlbm91Z2ggdG8gZGV0
ZWN0IGEgY3ljbGUgYmVjYXVzZQorICAgICAgICAgICAgICAgICAgICAjIEEgIT0gQiAhPSBDICE9
IEEgbXVzdCBpbmNsdWRlIEMgIT0gQQorICAgICAgICAgICAgICAgICAgICAjIGJ1dCBBID09IEIg
PT0gQSBzaG91bGQgbm90IGluY2x1ZGUgdGhlIHJlZHVuZGFudCBCID09IEEuCisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIHJlZmVyZW5jZXNfc2Vlbi5hZGQoY29t
cGFyaXNvbl9rZXkpCisKKyAgICAgICAgICAgIG1hbmlmZXN0X25vZGUgPSBtYW5pZmVzdF90ZXN0
Lm1hbmlmZXN0LmdldF9yZWZlcmVuY2UocmVmX3VybCkKKyAgICAgICAgICAgIGlmIG1hbmlmZXN0
X25vZGU6CisgICAgICAgICAgICAgICAgcmVmZXJlbmNlID0gUmVmdGVzdFRlc3QuZnJvbV9tYW5p
ZmVzdChtYW5pZmVzdF9ub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgW10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VzX3NlZW4pCisgICAgICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgICAgIHJlZmVyZW5jZSA9IFJlZnRlc3RUZXN0KG1hbmlmZXN0
X3Rlc3Quc291cmNlX2ZpbGUudGVzdHNfcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZWZfdXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFtdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10pCisKKyAgICAgICAg
ICAgIG5vZGUucmVmZXJlbmNlcy5hcHBlbmQoKHJlZmVyZW5jZSwgcmVmX3R5cGUpKQorCisgICAg
ICAgIHJldHVybiBub2RlCisKKyAgICBkZWYgdXBkYXRlX21ldGFkYXRhKHNlbGYsIG1ldGFkYXRh
KToKKyAgICAgICAgaWYgbm90ICJ1cmxfY291bnQiIGluIG1ldGFkYXRhOgorICAgICAgICAgICAg
bWV0YWRhdGFbInVybF9jb3VudCJdID0gZGVmYXVsdGRpY3QoaW50KQorICAgICAgICBmb3IgcmVm
ZXJlbmNlLCBfIGluIHNlbGYucmVmZXJlbmNlczoKKyAgICAgICAgICAgICMgV2UgYXNzdW1lIGEg
bmFpdmUgaW1wbGVtZW50YXRpb24gaW4gd2hpY2ggYSB1cmwgd2l0aCBtdWx0aXBsZQorICAgICAg
ICAgICAgIyBwb3NzaWJsZSBzY3JlZW5zaG90cyB3aWxsIG5lZWQgdG8gdGFrZSBib3RoIHRoZSBs
aHMgYW5kIHJocyBzY3JlZW5zaG90cworICAgICAgICAgICAgIyBmb3IgZWFjaCBwb3NzaWJsZSBt
YXRjaAorICAgICAgICAgICAgbWV0YWRhdGFbInVybF9jb3VudCJdWyhzZWxmLmVudmlyb25tZW50
WyJwcm90b2NvbCJdLCByZWZlcmVuY2UudXJsKV0gKz0gMQorICAgICAgICAgICAgcmVmZXJlbmNl
LnVwZGF0ZV9tZXRhZGF0YShtZXRhZGF0YSkKKyAgICAgICAgcmV0dXJuIG1ldGFkYXRhCisKKyAg
ICBAcHJvcGVydHkKKyAgICBkZWYgaWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnVybAor
CisgICAgQHByb3BlcnR5CisgICAgZGVmIGtleXMoc2VsZik6CisgICAgICAgIHJldHVybiAoInJl
ZnR5cGUiLCAicmVmdXJsIikKKworCitjbGFzcyBXZHNwZWNUZXN0KFRlc3QpOgorCisgICAgcmVz
dWx0X2NscyA9IFdkc3BlY1Jlc3VsdAorICAgIHN1YnRlc3RfcmVzdWx0X2NscyA9IFdkc3BlY1N1
YnRlc3RSZXN1bHQKKyAgICB0ZXN0X3R5cGUgPSAid2RzcGVjIgorCisgICAgZGVmYXVsdF90aW1l
b3V0ID0gMjUKKyAgICBsb25nX3RpbWVvdXQgPSAxMjAKKworCittYW5pZmVzdF90ZXN0X2NscyA9
IHsicmVmdGVzdCI6IFJlZnRlc3RUZXN0LAorICAgICAgICAgICAgICAgICAgICAgInRlc3RoYXJu
ZXNzIjogVGVzdGhhcm5lc3NUZXN0LAorICAgICAgICAgICAgICAgICAgICAgIm1hbnVhbCI6IE1h
bnVhbFRlc3QsCisgICAgICAgICAgICAgICAgICAgICAid2RzcGVjIjogV2RzcGVjVGVzdH0KKwor
CitkZWYgZnJvbV9tYW5pZmVzdChtYW5pZmVzdF90ZXN0LCBpbmhlcml0X21ldGFkYXRhLCB0ZXN0
X21ldGFkYXRhKToKKyAgICB0ZXN0X2NscyA9IG1hbmlmZXN0X3Rlc3RfY2xzW21hbmlmZXN0X3Rl
c3QuaXRlbV90eXBlXQorICAgIHJldHVybiB0ZXN0X2Nscy5mcm9tX21hbmlmZXN0KG1hbmlmZXN0
X3Rlc3QsIGluaGVyaXRfbWV0YWRhdGEsIHRlc3RfbWV0YWRhdGEpCmRpZmYgLS1naXQgYS9XZWJE
cml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL09XTkVSUyBiL1dlYkRyaXZlclRlc3Rz
L2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvT1dORVJTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi5hOTk3MjYzNWY5OAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRl
c3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvT1dORVJTCkBAIC0wLDAgKzEsNSBAQAorQGFuZHJl
YXN0dAorQGx1a2VpcworQEF1dG9tYXRlZFRlc3RlcgorQHNoczk2YworQG1qemZmcgpkaWZmIC0t
Z2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci9SRUFETUUubWQgYi9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL1JFQURNRS5tZApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNzhkOWFiYTdiOWIKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL1JFQURNRS5tZApAQCAt
MCwwICsxLDE3IEBACisjIFdlYkRyaXZlciBzcGVjaWZpY2F0aW9uIHRlc3RzCisKK0hlcmVpbiBs
aWVzIGEgc2V0IG9mIGNvbmZvcm1hbmNlIHRlc3RzCitmb3IgdGhlIFczQyB3ZWIgYnJvd3NlciBh
dXRvbWF0aW9uIHNwZWNpZmljYXRpb24KK2tub3duIGFzIFtXZWJEcml2ZXJdKGh0dHA6Ly93M2Mu
Z2l0aHViLmlvL3dlYmRyaXZlci93ZWJkcml2ZXItc3BlYy5odG1sKS4KK1RoZSBwdXJwb3NlIG9m
IHRoZXNlIHRlc3RzIGlzIGRldGVybWluZSBpbXBsZW1lbnRhdGlvbiBjb21wbGlhbmNlCitzbyB0
aGF0IGRpZmZlcmVudCBkcml2ZXIgaW1wbGVtZW50YXRpb25zIGNhbiBkZXRlcm1pbmUKK3doZXRo
ZXIgdGhleSBtZWV0IHRoZSByZWNvZ25pemVkIHN0YW5kYXJkLgorCisjIyBDaGFwdGVycyBvZiB0
aGUgU3BlYyB0aGF0IHN0aWxsIG5lZWQgdGVzdHMKKworV2UgYXJlIHVzaW5nIGEgW3RyYWNraW5n
IHNwcmVhZHNoZWV0XShodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9zcHJlYWRzaGVldHMvZC8xR1VL
X3NkWTJjdjU5VkFKTkR4WlFJZnlwbk9wYXBTUWhNamZjSjlXYzQyVS9lZGl0I2dpZD0wKQordG8g
Y29vcmRpbmF0ZSB3b3JrIG9uIHRoZXNlIHRlc3RzLiBQbGVhc2UgbG9vayB0aGVyZSB0byBzZWUg
d2hvCitpcyB3b3JraW5nIG9uIHdoYXQsIGFuZCB3aGljaCBhcmVhcyBhcmUgY3VycmVudGx5IHVu
ZGVyLXRlc3RlZC4KKworVGhlIHNwZWMgY29udHJpYnV0b3JzIGFuZCBlZGl0b3JzIGNhbiBmcmVx
dWVudGx5IGJlIGZvdW5kIG9uIHRoZSBXM0MKKyN3ZWJkcml2ZXIgSVJDIGNoYW5uZWwuCmRpZmYg
LS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL2VsZW1lbnRzL2Fj
dGl2ZS5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvZWxlbWVudHMv
YWN0aXZlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mNjM5NzI1
ZmUyMgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJk
cml2ZXIvZWxlbWVudHMvYWN0aXZlLnB5CkBAIC0wLDAgKzEsMjUyIEBACitpbXBvcnQgcHl0ZXN0
CisKK2Zyb20gc3VwcG9ydC5hc3NlcnRzIGltcG9ydCBhc3NlcnRfZXJyb3IsIGFzc2VydF9zdWNj
ZXNzLCBhc3NlcnRfZGlhbG9nX2hhbmRsZWQsIGFzc2VydF9zYW1lX2VsZW1lbnQKK2Zyb20gc3Vw
cG9ydC5maXh0dXJlcyBpbXBvcnQgY3JlYXRlX2RpYWxvZworZnJvbSBzdXBwb3J0LmlubGluZSBp
bXBvcnQgaW5saW5lCisKK2RlZiBhc3NlcnRfcmVzdWx0X2lzX2FjdGl2ZV9lbGVtZW50KHNlc3Np
b24sIHJlc3VsdCk6CisgICAgIiIiRW5zdXJlIHRoYXQgdGhlIHByb3ZpZGVkIG9iamVjdCBpcyBh
IHN1Y2Nlc3NmdWwgV2ViRHJpdmVyIHJlc3BvbnNlCisgICAgZGVzY3JpYmluZyBhbiBlbGVtZW50
IHJlZmVyZW5jZSBhbmQgdGhhdCB0aGUgcmVmZXJlbmNlZCBlbGVtZW50IG1hdGNoZXMgdGhlCisg
ICAgZWxlbWVudCByZXR1cm5lZCBieSB0aGUgYGFjdGl2ZUVsZW1lbnRgIGF0dHJpYnV0ZSBvZiB0
aGUgY3VycmVudCBicm93c2luZworICAgIGNvbnRleHQncyBhY3RpdmUgZG9jdW1lbnQuIiIiCisg
ICAgYXNzZXJ0IHJlc3VsdC5zdGF0dXMgPT0gMjAwCisKKyAgICBmcm9tX2pzID0gc2Vzc2lvbi5l
eGVjdXRlX3NjcmlwdCgicmV0dXJuIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7IikKKworICAgIGlm
IHJlc3VsdC5ib2R5WyJ2YWx1ZSJdIGlzIE5vbmU6CisgICAgICAgIGFzc2VydCBmcm9tX2pzID09
IE5vbmUKKyAgICBlbHNlOgorICAgICAgICBhc3NlcnRfc2FtZV9lbGVtZW50KHNlc3Npb24sIHJl
c3VsdC5ib2R5WyJ2YWx1ZSJdLCBmcm9tX2pzKQorCisjID4gMS4gSWYgdGhlIGN1cnJlbnQgYnJv
d3NpbmcgY29udGV4dCBpcyBubyBsb25nZXIgb3BlbiwgcmV0dXJuIGVycm9yIHdpdGgKKyMgPiAg
ICBlcnJvciBjb2RlIG5vIHN1Y2ggd2luZG93LgorZGVmIHRlc3RfY2xvc2VkX2NvbnRleHQoc2Vz
c2lvbiwgY3JlYXRlX3dpbmRvdyk6CisgICAgbmV3X3dpbmRvdyA9IGNyZWF0ZV93aW5kb3coKQor
ICAgIHNlc3Npb24ud2luZG93X2hhbmRsZSA9IG5ld193aW5kb3cKKyAgICBzZXNzaW9uLmNsb3Nl
KCkKKworICAgIHJlc3VsdCA9IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIkdFVCIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2Vzc2lvbi8lcy9lbGVtZW50L2FjdGl2ZSIg
JSBzZXNzaW9uLnNlc3Npb25faWQpCisKKyAgICBhc3NlcnRfZXJyb3IocmVzdWx0LCAibm8gc3Vj
aCB3aW5kb3ciKQorCisjIFsuLi5dCisjIDIuIEhhbmRsZSBhbnkgdXNlciBwcm9tcHRzIGFuZCBy
ZXR1cm4gaXRzIHZhbHVlIGlmIGl0IGlzIGFuIGVycm9yLgorIyBbLi4uXQorIyBJbiBvcmRlciB0
byBoYW5kbGUgYW55IHVzZXIgcHJvbXB0cyBhIHJlbW90ZSBlbmQgbXVzdCB0YWtlIHRoZSBmb2xs
b3dpbmcKKyMgc3RlcHM6CisjIDIuIFJ1biB0aGUgc3Vic3RlcHMgb2YgdGhlIGZpcnN0IG1hdGNo
aW5nIHVzZXIgcHJvbXB0IGhhbmRsZXI6CisjCisjICAgIFsuLi5dCisjICAgIC0gZGlzbWlzcyBz
dGF0ZQorIyAgICAgIDEuIERpc21pc3MgdGhlIGN1cnJlbnQgdXNlciBwcm9tcHQuCisjICAgIFsu
Li5dCisjCisjIDMuIFJldHVybiBzdWNjZXNzLgorZGVmIHRlc3RfaGFuZGxlX3Byb21wdF9kaXNt
aXNzKG5ld19zZXNzaW9uKToKKyAgICBfLCBzZXNzaW9uID0gbmV3X3Nlc3Npb24oeyJhbHdheXNN
YXRjaCI6IHsidW5oYW5kbGVkUHJvbXB0QmVoYXZpb3IiOiAiZGlzbWlzcyJ9fSkKKyAgICBzZXNz
aW9uLnVybCA9IGlubGluZSgiPGJvZHk+PHA+SGVsbG8sIFdvcmxkITwvcD48L2JvZHk+IikKKwor
ICAgIGNyZWF0ZV9kaWFsb2coc2Vzc2lvbikoImFsZXJ0IiwgdGV4dD0iZGlzbWlzcyAjMSIsIHJl
c3VsdF92YXI9ImRpc21pc3MxIikKKworICAgIHJlc3VsdCA9IHNlc3Npb24udHJhbnNwb3J0LnNl
bmQoIkdFVCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2Vzc2lvbi8l
cy9lbGVtZW50L2FjdGl2ZSIgJSBzZXNzaW9uLnNlc3Npb25faWQpCisKKyAgICBhc3NlcnRfcmVz
dWx0X2lzX2FjdGl2ZV9lbGVtZW50KHNlc3Npb24sIHJlc3VsdCkKKyAgICBhc3NlcnRfZGlhbG9n
X2hhbmRsZWQoc2Vzc2lvbiwgImRpc21pc3MgIzEiKQorICAgIGFzc2VydCBzZXNzaW9uLmV4ZWN1
dGVfc2NyaXB0KCJyZXR1cm4gZGlzbWlzczE7IikgPT0gTm9uZQorCisgICAgY3JlYXRlX2RpYWxv
ZyhzZXNzaW9uKSgiY29uZmlybSIsIHRleHQ9ImRpc21pc3MgIzIiLCByZXN1bHRfdmFyPSJkaXNt
aXNzMiIpCisKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlc3Npb24vJXMvZWxlbWVudC9hY3Rp
dmUiICUgc2Vzc2lvbi5zZXNzaW9uX2lkKQorCisgICAgYXNzZXJ0X3Jlc3VsdF9pc19hY3RpdmVf
ZWxlbWVudChzZXNzaW9uLCByZXN1bHQpCisgICAgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNlc3Np
b24sICJkaXNtaXNzICMyIikKKyAgICBhc3NlcnQgcmVhZF9nbG9iYWwoc2Vzc2lvbiwgImRpc21p
c3MyIikgPT0gTm9uZQorCisgICAgY3JlYXRlX2RpYWxvZyhzZXNzaW9uKSgicHJvbXB0IiwgdGV4
dD0iZGlzbWlzcyAjMyIsIHJlc3VsdF92YXI9ImRpc21pc3MzIikKKworICAgIHJlc3VsdCA9IHNl
c3Npb24udHJhbnNwb3J0LnNlbmQoIkdFVCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAic2Vzc2lvbi8lcy9lbGVtZW50L2FjdGl2ZSIgJSBzZXNzaW9uLnNlc3Npb25faWQp
CisKKyAgICBhc3NlcnRfcmVzdWx0X2lzX2FjdGl2ZV9lbGVtZW50KHNlc3Npb24sIHJlc3VsdCkK
KyAgICBhc3NlcnRfZGlhbG9nX2hhbmRsZWQoc2Vzc2lvbiwgImRpc21pc3MgIzMiKQorICAgIGFz
c2VydCByZWFkX2dsb2JhbChzZXNzaW9uLCAiZGlzbWlzczMiKSA9PSBOb25lCisKKyMgWy4uLl0K
KyMgMi4gSGFuZGxlIGFueSB1c2VyIHByb21wdHMgYW5kIHJldHVybiBpdHMgdmFsdWUgaWYgaXQg
aXMgYW4gZXJyb3IuCisjIFsuLi5dCisjIEluIG9yZGVyIHRvIGhhbmRsZSBhbnkgdXNlciBwcm9t
cHRzIGEgcmVtb3RlIGVuZCBtdXN0IHRha2UgdGhlIGZvbGxvd2luZworIyBzdGVwczoKKyMgMi4g
UnVuIHRoZSBzdWJzdGVwcyBvZiB0aGUgZmlyc3QgbWF0Y2hpbmcgdXNlciBwcm9tcHQgaGFuZGxl
cjoKKyMKKyMgICAgWy4uLl0KKyMgICAgLSBhY2NlcHQgc3RhdGUKKyMgICAgICAxLiBBY2NlcHQg
dGhlIGN1cnJlbnQgdXNlciBwcm9tcHQuCisjICAgIFsuLi5dCisjCisjIDMuIFJldHVybiBzdWNj
ZXNzLgorZGVmIHRlc3RfaGFuZGxlX3Byb21wdF9hY2NlcHQobmV3X3Nlc3Npb24pOgorICAgIF8s
IHNlc3Npb24gPSBuZXdfc2Vzc2lvbih7ImFsd2F5c01hdGNoIjogeyJ1bmhhbmRsZWRQcm9tcHRC
ZWhhdmlvciI6ICJhY2NlcHQifX0pCisgICAgc2Vzc2lvbi51cmwgPSBpbmxpbmUoIjxib2R5Pjxw
PkhlbGxvLCBXb3JsZCE8L3A+PC9ib2R5PiIpCisgICAgY3JlYXRlX2RpYWxvZyhzZXNzaW9uKSgi
YWxlcnQiLCB0ZXh0PSJhY2NlcHQgIzEiLCByZXN1bHRfdmFyPSJhY2NlcHQxIikKKworICAgIHJl
c3VsdCA9IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIkdFVCIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAic2Vzc2lvbi8lcy9lbGVtZW50L2FjdGl2ZSIgJSBzZXNzaW9uLnNl
c3Npb25faWQpCisKKyAgICBhc3NlcnRfcmVzdWx0X2lzX2FjdGl2ZV9lbGVtZW50KHNlc3Npb24s
IHJlc3VsdCkKKyAgICBhc3NlcnRfZGlhbG9nX2hhbmRsZWQoc2Vzc2lvbiwgImFjY2VwdCAjMSIp
CisgICAgYXNzZXJ0IHJlYWRfZ2xvYmFsKHNlc3Npb24sICJhY2NlcHQxIikgPT0gTm9uZQorCisg
ICAgY3JlYXRlX2RpYWxvZyhzZXNzaW9uKSgiY29uZmlybSIsIHRleHQ9ImFjY2VwdCAjMiIsIHJl
c3VsdF92YXI9ImFjY2VwdDIiKQorCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2Vu
ZCgiR0VUIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXNzaW9uLyVz
L2VsZW1lbnQvYWN0aXZlIiAlIHNlc3Npb24uc2Vzc2lvbl9pZCkKKworICAgIGFzc2VydF9yZXN1
bHRfaXNfYWN0aXZlX2VsZW1lbnQoc2Vzc2lvbiwgcmVzdWx0KQorICAgIGFzc2VydF9kaWFsb2df
aGFuZGxlZChzZXNzaW9uLCAiYWNjZXB0ICMyIikKKyAgICBhc3NlcnQgcmVhZF9nbG9iYWwoc2Vz
c2lvbiwgImFjY2VwdDIiKSwgVHJ1ZQorCisgICAgY3JlYXRlX2RpYWxvZyhzZXNzaW9uKSgicHJv
bXB0IiwgdGV4dD0iYWNjZXB0ICMzIiwgcmVzdWx0X3Zhcj0iYWNjZXB0MyIpCisKKyAgICByZXN1
bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgInNlc3Npb24vJXMvZWxlbWVudC9hY3RpdmUiICUgc2Vzc2lvbi5zZXNz
aW9uX2lkKQorCisgICAgYXNzZXJ0X3Jlc3VsdF9pc19hY3RpdmVfZWxlbWVudChzZXNzaW9uLCBy
ZXN1bHQpCisgICAgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNlc3Npb24sICJhY2NlcHQgIzMiKQor
ICAgIGFzc2VydCByZWFkX2dsb2JhbChzZXNzaW9uLCAiYWNjZXB0MyIpID09ICIiCisKKyMgWy4u
Ll0KKyMgMi4gSGFuZGxlIGFueSB1c2VyIHByb21wdHMgYW5kIHJldHVybiBpdHMgdmFsdWUgaWYg
aXQgaXMgYW4gZXJyb3IuCisjIFsuLi5dCisjIEluIG9yZGVyIHRvIGhhbmRsZSBhbnkgdXNlciBw
cm9tcHRzIGEgcmVtb3RlIGVuZCBtdXN0IHRha2UgdGhlIGZvbGxvd2luZworIyBzdGVwczoKKyMg
Mi4gUnVuIHRoZSBzdWJzdGVwcyBvZiB0aGUgZmlyc3QgbWF0Y2hpbmcgdXNlciBwcm9tcHQgaGFu
ZGxlcjoKKyMKKyMgICAgWy4uLl0KKyMgICAgLSBtaXNzaW5nIHZhbHVlIGRlZmF1bHQgc3RhdGUK
KyMgICAgLSBub3QgaW4gdGhlIHRhYmxlIG9mIHNpbXBsZSBkaWFsb2dzCisjICAgICAgMS4gRGlz
bWlzcyB0aGUgY3VycmVudCB1c2VyIHByb21wdC4KKyMgICAgICAyLiBSZXR1cm4gZXJyb3Igd2l0
aCBlcnJvciBjb2RlIHVuZXhwZWN0ZWQgYWxlcnQgb3Blbi4KK2RlZiB0ZXN0X2hhbmRsZV9wcm9t
cHRfbWlzc2luZ192YWx1ZShzZXNzaW9uLCBjcmVhdGVfZGlhbG9nKToKKyAgICBzZXNzaW9uLnVy
bCA9IGlubGluZSgiPGJvZHk+PHA+SGVsbG8sIFdvcmxkITwvcD48L2JvZHk+IikKKworICAgIGNy
ZWF0ZV9kaWFsb2coImFsZXJ0IiwgdGV4dD0iZGlzbWlzcyAjMSIsIHJlc3VsdF92YXI9ImRpc21p
c3MxIikKKworICAgIHJlc3VsdCA9IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIkdFVCIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2Vzc2lvbi8lcy9lbGVtZW50L2FjdGl2
ZSIgJSBzZXNzaW9uLnNlc3Npb25faWQpCisKKyAgICBhc3NlcnRfZXJyb3IocmVzdWx0LCAidW5l
eHBlY3RlZCBhbGVydCBvcGVuIikKKyAgICBhc3NlcnRfZGlhbG9nX2hhbmRsZWQoc2Vzc2lvbiwg
ImRpc21pc3MgIzEiKQorICAgIGFzc2VydCBzZXNzaW9uLmV4ZWN1dGVfc2NyaXB0KCJyZXR1cm4g
YWNjZXB0MTsiKSA9PSBOb25lCisKKyAgICBjcmVhdGVfZGlhbG9nKCJjb25maXJtIiwgdGV4dD0i
ZGlzbWlzcyAjMiIsIHJlc3VsdF92YXI9ImRpc21pc3MyIikKKworICAgIHJlc3VsdCA9IHNlc3Np
b24udHJhbnNwb3J0LnNlbmQoIkdFVCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAic2Vzc2lvbi8lcy9lbGVtZW50L2FjdGl2ZSIgJSBzZXNzaW9uLnNlc3Npb25faWQpCisK
KyAgICBhc3NlcnRfZXJyb3IocmVzdWx0LCAidW5leHBlY3RlZCBhbGVydCBvcGVuIikKKyAgICBh
c3NlcnRfZGlhbG9nX2hhbmRsZWQoc2Vzc2lvbiwgImRpc21pc3MgIzIiKQorICAgIGFzc2VydCBz
ZXNzaW9uLmV4ZWN1dGVfc2NyaXB0KCJyZXR1cm4gZGlzbWlzczI7IikgPT0gRmFsc2UKKworICAg
IGNyZWF0ZV9kaWFsb2coInByb21wdCIsIHRleHQ9ImRpc21pc3MgIzMiLCByZXN1bHRfdmFyPSJk
aXNtaXNzMyIpCisKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlc3Npb24vJXMvZWxlbWVudC9h
Y3RpdmUiICUgc2Vzc2lvbi5zZXNzaW9uX2lkKQorCisgICAgYXNzZXJ0X2Vycm9yKHJlc3VsdCwg
InVuZXhwZWN0ZWQgYWxlcnQgb3BlbiIpCisgICAgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNlc3Np
b24sICJkaXNtaXNzICMzIikKKyAgICBhc3NlcnQgc2Vzc2lvbi5leGVjdXRlX3NjcmlwdCgicmV0
dXJuIGRpc21pc3MzOyIpID09IE5vbmUKKworIyA+IFsuLi5dCisjID4gMy4gTGV0IGFjdGl2ZSBl
bGVtZW50IGJlIHRoZSBhY3RpdmUgZWxlbWVudCBvZiB0aGUgY3VycmVudCBicm93c2luZworIyA+
ICAgIGNvbnRleHQncyBkb2N1bWVudCBlbGVtZW50LgorIyA+IDQuIExldCBhY3RpdmUgd2ViIGVs
ZW1lbnQgYmUgdGhlIEpTT04gU2VyaWFsaXphdGlvbiBvZiBhY3RpdmUgZWxlbWVudC4KKyMgPiA1
LiBSZXR1cm4gc3VjY2VzcyB3aXRoIGRhdGEgYWN0aXZlIHdlYiBlbGVtZW50LgorZGVmIHRlc3Rf
c3VjY2Vzc19kb2N1bWVudChzZXNzaW9uKToKKyAgICBzZXNzaW9uLnVybCA9IGlubGluZSgiIiIK
KyAgICAgICAgPGJvZHk+CisgICAgICAgICAgICA8aDE+SGVhZGluZzwvaDE+CisgICAgICAgICAg
ICA8aW5wdXQgLz4KKyAgICAgICAgICAgIDxpbnB1dCAvPgorICAgICAgICAgICAgPGlucHV0IHN0
eWxlPSJvcGFjaXR5OiAwOyIgLz4KKyAgICAgICAgICAgIDxwPkFub3RoZXIgZWxlbWVudDwvcD4K
KyAgICAgICAgPC9ib2R5PiIiIikKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5k
KCJHRVQiLCAic2Vzc2lvbi8lcy9lbGVtZW50L2FjdGl2ZSIgJSBzZXNzaW9uLnNlc3Npb25faWQp
CisKKyAgICBhc3NlcnRfcmVzdWx0X2lzX2FjdGl2ZV9lbGVtZW50KHNlc3Npb24sIHJlc3VsdCkK
KworZGVmIHRlc3Rfc3VjZXNzX2lucHV0KHNlc3Npb24pOgorICAgIHNlc3Npb24udXJsID0gaW5s
aW5lKCIiIgorICAgICAgICA8Ym9keT4KKyAgICAgICAgICAgIDxoMT5IZWFkaW5nPC9oMT4KKyAg
ICAgICAgICAgIDxpbnB1dCBhdXRvZm9jdXMgLz4KKyAgICAgICAgICAgIDxpbnB1dCBzdHlsZT0i
b3BhY2l0eTogMDsiIC8+CisgICAgICAgICAgICA8cD5Bbm90aGVyIGVsZW1lbnQ8L3A+CisgICAg
ICAgIDwvYm9keT4iIiIpCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VU
IiwgInNlc3Npb24vJXMvZWxlbWVudC9hY3RpdmUiICUgc2Vzc2lvbi5zZXNzaW9uX2lkKQorCisg
ICAgYXNzZXJ0X3Jlc3VsdF9pc19hY3RpdmVfZWxlbWVudChzZXNzaW9uLCByZXN1bHQpCisKK2Rl
ZiB0ZXN0X3N1Y2Vzc19pbnB1dF9ub25faW50ZXJhY3RhYmxlKHNlc3Npb24pOgorICAgIHNlc3Np
b24udXJsID0gaW5saW5lKCIiIgorICAgICAgICA8Ym9keT4KKyAgICAgICAgICAgIDxoMT5IZWFk
aW5nPC9oMT4KKyAgICAgICAgICAgIDxpbnB1dCAvPgorICAgICAgICAgICAgPGlucHV0IHN0eWxl
PSJvcGFjaXR5OiAwOyIgYXV0b2ZvY3VzIC8+CisgICAgICAgICAgICA8cD5Bbm90aGVyIGVsZW1l
bnQ8L3A+CisgICAgICAgIDwvYm9keT4iIiIpCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3Bv
cnQuc2VuZCgiR0VUIiwgInNlc3Npb24vJXMvZWxlbWVudC9hY3RpdmUiICUgc2Vzc2lvbi5zZXNz
aW9uX2lkKQorCisgICAgYXNzZXJ0X3Jlc3VsdF9pc19hY3RpdmVfZWxlbWVudChzZXNzaW9uLCBy
ZXN1bHQpCisKK2RlZiB0ZXN0X3N1Y2Nlc3NfZXhwbGljaXRfZm9jdXMoc2Vzc2lvbik6CisgICAg
c2Vzc2lvbi51cmwgPSBpbmxpbmUoIiIiCisgICAgICAgIDxib2R5PgorICAgICAgICAgICAgPGgx
PkhlYWRpbmc8L2gxPgorICAgICAgICAgICAgPGlucHV0IC8+CisgICAgICAgICAgICA8aWZyYW1l
PjwvaWZyYW1lPgorICAgICAgICA8L2JvZHk+IiIiKQorCisgICAgc2Vzc2lvbi5leGVjdXRlX3Nj
cmlwdCgiZG9jdW1lbnQuYm9keS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaDEnKVswXS5mb2N1cygp
OyIpCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwgInNlc3Npb24v
JXMvZWxlbWVudC9hY3RpdmUiICUgc2Vzc2lvbi5zZXNzaW9uX2lkKQorICAgIGFzc2VydF9yZXN1
bHRfaXNfYWN0aXZlX2VsZW1lbnQoc2Vzc2lvbiwgcmVzdWx0KQorCisgICAgc2Vzc2lvbi5leGVj
dXRlX3NjcmlwdCgiZG9jdW1lbnQuYm9keS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKVsw
XS5mb2N1cygpOyIpCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwg
InNlc3Npb24vJXMvZWxlbWVudC9hY3RpdmUiICUgc2Vzc2lvbi5zZXNzaW9uX2lkKQorICAgIGFz
c2VydF9yZXN1bHRfaXNfYWN0aXZlX2VsZW1lbnQoc2Vzc2lvbiwgcmVzdWx0KQorCisgICAgc2Vz
c2lvbi5leGVjdXRlX3NjcmlwdCgiZG9jdW1lbnQuYm9keS5nZXRFbGVtZW50c0J5VGFnTmFtZSgn
aWZyYW1lJylbMF0uZm9jdXMoKTsiKQorICAgIHJlc3VsdCA9IHNlc3Npb24udHJhbnNwb3J0LnNl
bmQoIkdFVCIsICJzZXNzaW9uLyVzL2VsZW1lbnQvYWN0aXZlIiAlIHNlc3Npb24uc2Vzc2lvbl9p
ZCkKKyAgICBhc3NlcnRfcmVzdWx0X2lzX2FjdGl2ZV9lbGVtZW50KHNlc3Npb24sIHJlc3VsdCkK
KworICAgIHNlc3Npb24uZXhlY3V0ZV9zY3JpcHQoImRvY3VtZW50LmJvZHkuZ2V0RWxlbWVudHNC
eVRhZ05hbWUoJ2lmcmFtZScpWzBdLmZvY3VzKCk7IikKKyAgICBzZXNzaW9uLmV4ZWN1dGVfc2Ny
aXB0KCJkb2N1bWVudC5ib2R5LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpZnJhbWUnKVswXS5yZW1v
dmUoKTsiKQorICAgIHJlc3VsdCA9IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIkdFVCIsICJzZXNz
aW9uLyVzL2VsZW1lbnQvYWN0aXZlIiAlIHNlc3Npb24uc2Vzc2lvbl9pZCkKKyAgICBhc3NlcnRf
cmVzdWx0X2lzX2FjdGl2ZV9lbGVtZW50KHNlc3Npb24sIHJlc3VsdCkKKworICAgIHNlc3Npb24u
ZXhlY3V0ZV9zY3JpcHQoImRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgndGV4dGFyZWEnKSk7IikKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5z
ZW5kKCJHRVQiLCAic2Vzc2lvbi8lcy9lbGVtZW50L2FjdGl2ZSIgJSBzZXNzaW9uLnNlc3Npb25f
aWQpCisgICAgYXNzZXJ0X3Jlc3VsdF9pc19hY3RpdmVfZWxlbWVudChzZXNzaW9uLCByZXN1bHQp
CisKK2RlZiB0ZXN0X3N1Y2Nlc3NfaWZyYW1lX2NvbnRlbnQoc2Vzc2lvbik6CisgICAgc2Vzc2lv
bi51cmwgPSBpbmxpbmUoIjxib2R5PjwvYm9keT4iKQorICAgIHNlc3Npb24uZXhlY3V0ZV9zY3Jp
cHQoIiIiCisgICAgICAgIHZhciBpZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJh
bWUnKTsKKyAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpZnJhbWUpOworICAgICAg
ICB2YXIgaW5wdXQgPSBpZnJhbWUuY29udGVudERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0
Jyk7CisgICAgICAgIGlmcmFtZS5jb250ZW50RG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpbnB1
dCk7CisgICAgICAgIGlucHV0LmZvY3VzKCk7IiIiKQorCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50
cmFuc3BvcnQuc2VuZCgiR0VUIiwgInNlc3Npb24vJXMvZWxlbWVudC9hY3RpdmUiICUgc2Vzc2lv
bi5zZXNzaW9uX2lkKQorCisgICAgYXNzZXJ0X3Jlc3VsdF9pc19hY3RpdmVfZWxlbWVudChzZXNz
aW9uLCByZXN1bHQpCisKK2RlZiB0ZXN0X3N1Y2Vzc193aXRob3V0X2JvZHkoc2Vzc2lvbik6Cisg
ICAgc2Vzc2lvbi51cmwgPSBpbmxpbmUoIjxib2R5PjwvYm9keT4iKQorICAgIHNlc3Npb24uZXhl
Y3V0ZV9zY3JpcHQoImRvY3VtZW50LmJvZHkucmVtb3ZlKCk7IikKKworICAgIHJlc3VsdCA9IHNl
c3Npb24udHJhbnNwb3J0LnNlbmQoIkdFVCIsICJzZXNzaW9uLyVzL2VsZW1lbnQvYWN0aXZlIiUg
c2Vzc2lvbi5zZXNzaW9uX2lkKQorCisgICAgYXNzZXJ0X3Jlc3VsdF9pc19hY3RpdmVfZWxlbWVu
dChzZXNzaW9uLCByZXN1bHQpCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViZHJpdmVyL3Rlc3RzL19faW5pdF9fLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYmRyaXZlci90ZXN0cy9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uZTY5ZGUyOWJiMmQKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2lt
cG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvYWN0aW9ucy9fX2luaXRfXy5weSBiL1dlYkRyaXZl
clRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvYWN0aW9ucy9fX2luaXRfXy5weQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZTY5ZGUyOWJiMmQKZGlmZiAt
LWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvYWN0aW9u
cy9jb25mdGVzdC5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVz
dHMvYWN0aW9ucy9jb25mdGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uNzUyMDkzODNlYWIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL2FjdGlvbnMvY29uZnRlc3QucHkKQEAgLTAsMCArMSwz
NCBAQAoraW1wb3J0IHB5dGVzdAorCisKK0BweXRlc3QuZml4dHVyZQorZGVmIGtleV9jaGFpbihz
ZXNzaW9uKToKKyAgICByZXR1cm4gc2Vzc2lvbi5hY3Rpb25zLnNlcXVlbmNlKCJrZXkiLCAia2V5
Ym9hcmRfaWQiKQorCisKK0BweXRlc3QuZml4dHVyZQorZGVmIG1vdXNlX2NoYWluKHNlc3Npb24p
OgorICAgIHJldHVybiBzZXNzaW9uLmFjdGlvbnMuc2VxdWVuY2UoCisgICAgICAgICJwb2ludGVy
IiwKKyAgICAgICAgInBvaW50ZXJfaWQiLAorICAgICAgICB7InBvaW50ZXJUeXBlIjogIm1vdXNl
In0pCisKKworQHB5dGVzdC5maXh0dXJlKGF1dG91c2U9VHJ1ZSkKK2RlZiByZWxlYXNlX2FjdGlv
bnMoc2Vzc2lvbiwgcmVxdWVzdCk6CisgICAgIyByZWxlYXNlIGFsbCBhY3Rpb25zIGFmdGVyIGVh
Y2ggdGVzdAorICAgICMgZXF1aXZhbGVudCB0byBhIHRlYXJkb3duX2Z1bmN0aW9uLCBidXQgd2l0
aCBhY2Nlc3MgdG8gc2Vzc2lvbiBmaXh0dXJlCisgICAgcmVxdWVzdC5hZGRmaW5hbGl6ZXIoc2Vz
c2lvbi5hY3Rpb25zLnJlbGVhc2UpCisKKworQHB5dGVzdC5maXh0dXJlCitkZWYga2V5X3JlcG9y
dGVyKHNlc3Npb24sIHRlc3RfYWN0aW9uc19wYWdlLCByZXF1ZXN0KToKKyAgICAiIiJSZXByZXNl
bnRzIGZvY3VzZWQgaW5wdXQgZWxlbWVudCBmcm9tIGB0ZXN0X2tleXNfcGFnZWAgZml4dHVyZS4i
IiIKKyAgICBpbnB1dF9lbCA9IHNlc3Npb24uZmluZC5jc3MoIiNrZXlzIiwgYWxsPUZhbHNlKQor
ICAgIGlucHV0X2VsLmNsaWNrKCkKKyAgICByZXR1cm4gaW5wdXRfZWwKKworCitAcHl0ZXN0LmZp
eHR1cmUKK2RlZiB0ZXN0X2FjdGlvbnNfcGFnZShzZXNzaW9uLCB1cmwpOgorICAgIHNlc3Npb24u
dXJsID0gdXJsKCIvd2ViZHJpdmVyL3Rlc3RzL2FjdGlvbnMvc3VwcG9ydC90ZXN0X2FjdGlvbnNf
d2RzcGVjLmh0bWwiKQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dl
YmRyaXZlci90ZXN0cy9hY3Rpb25zL2tleS5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWJkcml2ZXIvdGVzdHMvYWN0aW9ucy9rZXkucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLjQzODg3ZWQ0MzJhCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVy
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9hY3Rpb25zL2tleS5weQpAQCAtMCww
ICsxLDE1NCBAQAoraW1wb3J0IHB5dGVzdAorCitmcm9tIHRlc3RzLmFjdGlvbnMuc3VwcG9ydC5r
ZXlzIGltcG9ydCBLZXlzCitmcm9tIHRlc3RzLmFjdGlvbnMuc3VwcG9ydC5yZWZpbmUgaW1wb3J0
IGZpbHRlcl9kaWN0LCBnZXRfa2V5cywgZ2V0X2V2ZW50cworCisKK2RlZiB0ZXN0X2xvbmVfa2V5
dXBfc2VuZHNfbm9fZXZlbnRzKHNlc3Npb24sIGtleV9yZXBvcnRlciwga2V5X2NoYWluKToKKyAg
ICBrZXlfY2hhaW4ua2V5X3VwKCJhIikucGVyZm9ybSgpCisgICAgYXNzZXJ0IGxlbihnZXRfa2V5
cyhrZXlfcmVwb3J0ZXIpKSA9PSAwCisgICAgYXNzZXJ0IGxlbihnZXRfZXZlbnRzKHNlc3Npb24p
KSA9PSAwCisgICAgc2Vzc2lvbi5hY3Rpb25zLnJlbGVhc2UoKQorICAgIGFzc2VydCBsZW4oZ2V0
X2tleXMoa2V5X3JlcG9ydGVyKSkgPT0gMAorICAgIGFzc2VydCBsZW4oZ2V0X2V2ZW50cyhzZXNz
aW9uKSkgPT0gMAorCisKK0BweXRlc3QubWFyay5wYXJhbWV0cml6ZSgidmFsdWUsY29kZSIsIFsK
KyAgICAodSJhIiwgIktleUEiLCksCisgICAgKCJhIiwgIktleUEiLCksCisgICAgKHUiXCIiLCAi
UXVvdGUiKSwKKyAgICAodSIsIiwgIkNvbW1hIiksCisgICAgKHUiXHUwMEUwIiwgIiIpLAorICAg
ICh1Ilx1MDQxNiIsICIiKSwKKyAgICAodSJAIiwgIkRpZ2l0MiIpLAorICAgICh1Ilx1MjYwMyIs
ICIiKSwKKyAgICAodSJcdUY2QzIiLCAiIiksICAjIFBVQQorXSkKK2RlZiB0ZXN0X3NpbmdsZV9w
cmludGFibGVfa2V5X3NlbmRzX2NvcnJlY3RfZXZlbnRzKHNlc3Npb24sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfcmVwb3J0ZXIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfY2hhaW4s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
ZGUpOgorICAgIGtleV9jaGFpbiBcCisgICAgICAgIC5rZXlfZG93bih2YWx1ZSkgXAorICAgICAg
ICAua2V5X3VwKHZhbHVlKSBcCisgICAgICAgIC5wZXJmb3JtKCkKKyAgICBleHBlY3RlZCA9IFsK
KyAgICAgICAgeyJjb2RlIjogY29kZSwgImtleSI6IHZhbHVlLCAidHlwZSI6ICJrZXlkb3duIn0s
CisgICAgICAgIHsiY29kZSI6IGNvZGUsICJrZXkiOiB2YWx1ZSwgInR5cGUiOiAia2V5cHJlc3Mi
fSwKKyAgICAgICAgeyJjb2RlIjogY29kZSwgImtleSI6IHZhbHVlLCAidHlwZSI6ICJrZXl1cCJ9
LAorICAgIF0KKyAgICBldmVudHMgPSBbZmlsdGVyX2RpY3QoZSwgZXhwZWN0ZWRbMF0pIGZvciBl
IGluIGdldF9ldmVudHMoc2Vzc2lvbildCisgICAgYXNzZXJ0IGV2ZW50cyA9PSBleHBlY3RlZAor
ICAgIGFzc2VydCBnZXRfa2V5cyhrZXlfcmVwb3J0ZXIpID09IHZhbHVlCisKKworQHB5dGVzdC5t
YXJrLnBhcmFtZXRyaXplKCJ2YWx1ZSIsIFsKKyAgICAodSJcVTAwMDFGNjA0IiksCisgICAgKHUi
XFUwMDAxRjYwRCIpLAorXSkKK2RlZiB0ZXN0X3NpbmdsZV9lbW9qaV9yZWNvcmRzX2NvcnJlY3Rf
a2V5KHNlc3Npb24sIGtleV9yZXBvcnRlciwga2V5X2NoYWluLCB2YWx1ZSk6CisgICAgIyBOb3Qg
dXNpbmcga2V5X2NoYWluLnNlbmRfa2V5cygpIGJlY2F1c2Ugd2UgYWx3YXlzIHdhbnQgdG8gdHJl
YXQgdmFsdWUgYXMKKyAgICAjIG9uZSBjaGFyYWN0ZXIgaGVyZS4gYGxlbih2YWx1ZSlgIHZhcmll
cyBieSBwbGF0Zm9ybSBmb3Igbm9uLUJNUCBjaGFyYWN0ZXJzLAorICAgICMgc28gd2UgZG9uJ3Qg
d2FudCB0byBpdGVyYXRlIG92ZXIgdmFsdWUuCisgICAga2V5X2NoYWluIFwKKyAgICAgICAgLmtl
eV9kb3duKHZhbHVlKSBcCisgICAgICAgIC5rZXlfdXAodmFsdWUpIFwKKyAgICAgICAgLnBlcmZv
cm0oKQorICAgICMgZXZlbnRzIHNlbnQgYnkgbWFqb3IgYnJvd3NlcnMgYXJlIGluY29uc2lzdGVu
dCBzbyBvbmx5IGNoZWNrIGtleSB2YWx1ZQorICAgIGFzc2VydCBnZXRfa2V5cyhrZXlfcmVwb3J0
ZXIpID09IHZhbHVlCisKKworQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKCJ2YWx1ZSxjb2RlLGtl
eSIsIFsKKyAgICAodSJcdUUwNTAiLCAiU2hpZnRSaWdodCIsICJTaGlmdCIpLAorICAgICh1Ilx1
RTA1MyIsICJPU1JpZ2h0IiwgIk1ldGEiKSwKKyAgICAoS2V5cy5DT05UUk9MLCAiQ29udHJvbExl
ZnQiLCAiQ29udHJvbCIpLAorXSkKK2RlZiB0ZXN0X3NpbmdsZV9tb2RpZmllcl9rZXlfc2VuZHNf
Y29ycmVjdF9ldmVudHMoc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAga2V5X3JlcG9ydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfY2hhaW4sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkpOgorICAgIGtleV9jaGFpbiBcCisg
ICAgICAgIC5rZXlfZG93bih2YWx1ZSkgXAorICAgICAgICAua2V5X3VwKHZhbHVlKSBcCisgICAg
ICAgIC5wZXJmb3JtKCkKKyAgICBhbGxfZXZlbnRzID0gZ2V0X2V2ZW50cyhzZXNzaW9uKQorICAg
IGV4cGVjdGVkID0gWworICAgICAgICB7ImNvZGUiOiBjb2RlLCAia2V5Ijoga2V5LCAidHlwZSI6
ICJrZXlkb3duIn0sCisgICAgICAgIHsiY29kZSI6IGNvZGUsICJrZXkiOiBrZXksICJ0eXBlIjog
ImtleXVwIn0sCisgICAgXQorICAgIGV2ZW50cyA9IFtmaWx0ZXJfZGljdChlLCBleHBlY3RlZFsw
XSkgZm9yIGUgaW4gYWxsX2V2ZW50c10KKyAgICBhc3NlcnQgZXZlbnRzID09IGV4cGVjdGVkCisg
ICAgYXNzZXJ0IGxlbihnZXRfa2V5cyhrZXlfcmVwb3J0ZXIpKSA9PSAwCisKKworQHB5dGVzdC5t
YXJrLnBhcmFtZXRyaXplKCJ2YWx1ZSxjb2RlLGtleSIsIFsKKyAgICAoS2V5cy5FU0NBUEUsICJF
c2NhcGUiLCAiRXNjYXBlIiksCisgICAgKEtleXMuUklHSFQsICJBcnJvd1JpZ2h0IiwgIkFycm93
UmlnaHQiKSwKK10pCitkZWYgdGVzdF9zaW5nbGVfbm9ucHJpbnRhYmxlX2tleV9zZW5kc19ldmVu
dHMoc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBrZXlfcmVwb3J0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAga2V5X2NoYWluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
a2V5KToKKyAgICBrZXlfY2hhaW4gXAorICAgICAgICAua2V5X2Rvd24odmFsdWUpIFwKKyAgICAg
ICAgLmtleV91cCh2YWx1ZSkgXAorICAgICAgICAucGVyZm9ybSgpCisgICAgZXhwZWN0ZWQgPSBb
CisgICAgICAgIHsiY29kZSI6IGNvZGUsICJrZXkiOiBrZXksICJ0eXBlIjogImtleWRvd24ifSwK
KyAgICAgICAgeyJjb2RlIjogY29kZSwgImtleSI6IGtleSwgInR5cGUiOiAia2V5cHJlc3MifSwK
KyAgICAgICAgeyJjb2RlIjogY29kZSwgImtleSI6IGtleSwgInR5cGUiOiAia2V5dXAifSwKKyAg
ICBdCisgICAgZXZlbnRzID0gW2ZpbHRlcl9kaWN0KGUsIGV4cGVjdGVkWzBdKSBmb3IgZSBpbiBn
ZXRfZXZlbnRzKHNlc3Npb24pXQorICAgIGlmIGxlbihldmVudHMpID09IDI6CisgICAgICAgICMg
bW9zdCBicm93c2VycyBkb24ndCBzZW5kIGEga2V5cHJlc3MgZm9yIG5vbi1wcmludGFibGUga2V5
cworICAgICAgICBhc3NlcnQgZXZlbnRzID09IFtleHBlY3RlZFswXSwgZXhwZWN0ZWRbMl1dCisg
ICAgZWxzZToKKyAgICAgICAgYXNzZXJ0IGV2ZW50cyA9PSBleHBlY3RlZAorICAgIGFzc2VydCBs
ZW4oZ2V0X2tleXMoa2V5X3JlcG9ydGVyKSkgPT0gMAorCisKK2RlZiB0ZXN0X3NlcXVlbmNlX29m
X2tleWRvd25fcHJpbnRhYmxlX2tleXNfc2VuZHNfZXZlbnRzKHNlc3Npb24sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfcmVwb3J0
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBrZXlfY2hhaW4pOgorICAgIGtleV9jaGFpbiBcCisgICAgICAgIC5rZXlfZG93bigiYSIp
IFwKKyAgICAgICAgLmtleV9kb3duKCJiIikgXAorICAgICAgICAucGVyZm9ybSgpCisgICAgZXhw
ZWN0ZWQgPSBbCisgICAgICAgIHsiY29kZSI6ICJLZXlBIiwgImtleSI6ICJhIiwgInR5cGUiOiAi
a2V5ZG93biJ9LAorICAgICAgICB7ImNvZGUiOiAiS2V5QSIsICJrZXkiOiAiYSIsICJ0eXBlIjog
ImtleXByZXNzIn0sCisgICAgICAgIHsiY29kZSI6ICJLZXlCIiwgImtleSI6ICJiIiwgInR5cGUi
OiAia2V5ZG93biJ9LAorICAgICAgICB7ImNvZGUiOiAiS2V5QiIsICJrZXkiOiAiYiIsICJ0eXBl
IjogImtleXByZXNzIn0sCisgICAgXQorICAgIGV2ZW50cyA9IFtmaWx0ZXJfZGljdChlLCBleHBl
Y3RlZFswXSkgZm9yIGUgaW4gZ2V0X2V2ZW50cyhzZXNzaW9uKV0KKyAgICBhc3NlcnQgZXZlbnRz
ID09IGV4cGVjdGVkCisgICAgYXNzZXJ0IGdldF9rZXlzKGtleV9yZXBvcnRlcikgPT0gImFiIgor
CisKK2RlZiB0ZXN0X3NlcXVlbmNlX29mX2tleWRvd25fY2hhcmFjdGVyX2tleXMoc2Vzc2lvbiwg
a2V5X3JlcG9ydGVyLCBrZXlfY2hhaW4pOgorICAgIGtleV9jaGFpbi5zZW5kX2tleXMoImVmIiku
cGVyZm9ybSgpCisgICAgZXhwZWN0ZWQgPSBbCisgICAgICAgIHsiY29kZSI6ICJLZXlFIiwgImtl
eSI6ICJlIiwgInR5cGUiOiAia2V5ZG93biJ9LAorICAgICAgICB7ImNvZGUiOiAiS2V5RSIsICJr
ZXkiOiAiZSIsICJ0eXBlIjogImtleXByZXNzIn0sCisgICAgICAgIHsiY29kZSI6ICJLZXlFIiwg
ImtleSI6ICJlIiwgInR5cGUiOiAia2V5dXAifSwKKyAgICAgICAgeyJjb2RlIjogIktleUYiLCAi
a2V5IjogImYiLCAidHlwZSI6ICJrZXlkb3duIn0sCisgICAgICAgIHsiY29kZSI6ICJLZXlGIiwg
ImtleSI6ICJmIiwgInR5cGUiOiAia2V5cHJlc3MifSwKKyAgICAgICAgeyJjb2RlIjogIktleUYi
LCAia2V5IjogImYiLCAidHlwZSI6ICJrZXl1cCJ9LAorICAgIF0KKyAgICBldmVudHMgPSBbZmls
dGVyX2RpY3QoZSwgZXhwZWN0ZWRbMF0pIGZvciBlIGluIGdldF9ldmVudHMoc2Vzc2lvbildCisg
ICAgYXNzZXJ0IGV2ZW50cyA9PSBleHBlY3RlZAorICAgIGFzc2VydCBnZXRfa2V5cyhrZXlfcmVw
b3J0ZXIpID09ICJlZiIKKworCitkZWYgdGVzdF9iYWNrc3BhY2VfZXJhc2VzX2tleXMoc2Vzc2lv
biwga2V5X3JlcG9ydGVyLCBrZXlfY2hhaW4pOgorICAgIGtleV9jaGFpbiBcCisgICAgICAgIC5z
ZW5kX2tleXMoImVmY2QiKSBcCisgICAgICAgIC5zZW5kX2tleXMoW0tleXMuQkFDS1NQQUNFLCBL
ZXlzLkJBQ0tTUEFDRV0pIFwKKyAgICAgICAgLnBlcmZvcm0oKQorICAgIGFzc2VydCBnZXRfa2V5
cyhrZXlfcmVwb3J0ZXIpID09ICJlZiIKKwpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9hY3Rpb25zL21vdXNlLnB5IGIvV2ViRHJpdmVyVGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9hY3Rpb25zL21vdXNlLnB5Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zZmYxZTNlYjVhNwotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvYWN0aW9u
cy9tb3VzZS5weQpAQCAtMCwwICsxLDEzNiBAQAoraW1wb3J0IHB5dGVzdAorCitmcm9tIHRlc3Rz
LnN1cHBvcnQuaW5saW5lIGltcG9ydCBpbmxpbmUKK2Zyb20gdGVzdHMuYWN0aW9ucy5zdXBwb3J0
LnJlZmluZSBpbXBvcnQgZ2V0X2V2ZW50cywgZmlsdGVyX2RpY3QKK2Zyb20gdGVzdHMuc3VwcG9y
dC53YWl0IGltcG9ydCB3YWl0CisKKworZGVmIGxpbmtfZG9jKGRlc3QpOgorICAgIGNvbnRlbnQg
PSAiPGEgaHJlZj1cInt9XCIgaWQ9XCJsaW5rXCI+ZGVzdGluYXRpb248L2E+Ii5mb3JtYXQoZGVz
dCkKKyAgICByZXR1cm4gaW5saW5lKGNvbnRlbnQpCisKKworZGVmIGdldF9jZW50ZXIocmVjdCk6
CisgICAgcmV0dXJuIHsKKyAgICAgICAgIngiOiByZWN0WyJ3aWR0aCJdIC8gMiArIHJlY3RbIngi
XSwKKyAgICAgICAgInkiOiByZWN0WyJoZWlnaHQiXSAvIDIgKyByZWN0WyJ5Il0sCisgICAgfQor
CisKKyMgVE9ETyB1c2UgcHl0ZXN0LmFwcHJveCBvbmNlIHdlIHVwZ3JhZGUgdG8gcHl0ZXN0ID4g
My4wCitkZWYgYXBwcm94KG4sIG0sIHRvbGVyYW5jZT0xKToKKyAgICByZXR1cm4gYWJzKG4gLSBt
KSA8IHRvbGVyYW5jZQorCisKK2RlZiB0ZXN0X2NsaWNrX2F0X2Nvb3JkaW5hdGVzKHNlc3Npb24s
IHRlc3RfYWN0aW9uc19wYWdlLCBtb3VzZV9jaGFpbik6CisgICAgZGl2X3BvaW50ID0geworICAg
ICAgICAieCI6IDgyLAorICAgICAgICAieSI6IDE4NywKKyAgICB9CisgICAgbW91c2VfY2hhaW4g
XAorICAgICAgICAucG9pbnRlcl9tb3ZlKGRpdl9wb2ludFsieCJdLCBkaXZfcG9pbnRbInkiXSwg
ZHVyYXRpb249MTAwMCkgXAorICAgICAgICAuY2xpY2soKSBcCisgICAgICAgIC5wZXJmb3JtKCkK
KyAgICBldmVudHMgPSBnZXRfZXZlbnRzKHNlc3Npb24pCisgICAgYXNzZXJ0IGxlbihldmVudHMp
ID09IDQKKyAgICBmb3IgZSBpbiBldmVudHM6CisgICAgICAgIGlmIGVbInR5cGUiXSAhPSAibW91
c2Vtb3ZlIjoKKyAgICAgICAgICAgIGFzc2VydCBlWyJwYWdlWCJdID09IGRpdl9wb2ludFsieCJd
CisgICAgICAgICAgICBhc3NlcnQgZVsicGFnZVkiXSA9PSBkaXZfcG9pbnRbInkiXQorICAgICAg
ICAgICAgYXNzZXJ0IGVbInRhcmdldCJdID09ICJvdXRlciIKKyAgICAgICAgaWYgZVsidHlwZSJd
ICE9ICJtb3VzZWRvd24iOgorICAgICAgICAgICAgYXNzZXJ0IGVbImJ1dHRvbnMiXSA9PSAwCisg
ICAgICAgIGFzc2VydCBlWyJidXR0b24iXSA9PSAwCisgICAgZXhwZWN0ZWQgPSBbCisgICAgICAg
IHsidHlwZSI6ICJtb3VzZWRvd24iLCAiYnV0dG9ucyI6IDF9LAorICAgICAgICB7InR5cGUiOiAi
bW91c2V1cCIsICAiYnV0dG9ucyI6IDB9LAorICAgICAgICB7InR5cGUiOiAiY2xpY2siLCAiYnV0
dG9ucyI6IDB9LAorICAgIF0KKyAgICBmaWx0ZXJlZF9ldmVudHMgPSBbZmlsdGVyX2RpY3QoZSwg
ZXhwZWN0ZWRbMF0pIGZvciBlIGluIGV2ZW50c10KKyAgICBhc3NlcnQgZXhwZWN0ZWQgPT0gZmls
dGVyZWRfZXZlbnRzWzE6XQorCisKK2RlZiB0ZXN0X2NvbnRleHRfbWVudV9hdF9jb29yZGluYXRl
cyhzZXNzaW9uLCB0ZXN0X2FjdGlvbnNfcGFnZSwgbW91c2VfY2hhaW4pOgorICAgIGRpdl9wb2lu
dCA9IHsKKyAgICAgICAgIngiOiA4MiwKKyAgICAgICAgInkiOiAxODcsCisgICAgfQorICAgIG1v
dXNlX2NoYWluIFwKKyAgICAgICAgLnBvaW50ZXJfbW92ZShkaXZfcG9pbnRbIngiXSwgZGl2X3Bv
aW50WyJ5Il0pIFwKKyAgICAgICAgLnBvaW50ZXJfZG93bihidXR0b249MikgXAorICAgICAgICAu
cG9pbnRlcl91cChidXR0b249MikgXAorICAgICAgICAucGVyZm9ybSgpCisgICAgZXZlbnRzID0g
Z2V0X2V2ZW50cyhzZXNzaW9uKQorICAgIGV4cGVjdGVkID0gWworICAgICAgICB7InR5cGUiOiAi
bW91c2Vkb3duIiwgImJ1dHRvbiI6IDJ9LAorICAgICAgICB7InR5cGUiOiAiY29udGV4dG1lbnUi
LCAgImJ1dHRvbiI6IDJ9LAorICAgIF0KKyAgICBhc3NlcnQgbGVuKGV2ZW50cykgPT0gNAorICAg
IGZpbHRlcmVkX2V2ZW50cyA9IFtmaWx0ZXJfZGljdChlLCBleHBlY3RlZFswXSkgZm9yIGUgaW4g
ZXZlbnRzXQorICAgIG1vdXNlZG93bl9jb250ZXh0bWVudV9ldmVudHMgPSBbCisgICAgICAgIHgg
Zm9yIHggaW4gZmlsdGVyZWRfZXZlbnRzCisgICAgICAgIGlmIHhbInR5cGUiXSBpbiBbIm1vdXNl
ZG93biIsICJjb250ZXh0bWVudSJdCisgICAgXQorICAgIGFzc2VydCBleHBlY3RlZCA9PSBtb3Vz
ZWRvd25fY29udGV4dG1lbnVfZXZlbnRzCisKKworZGVmIHRlc3RfY2xpY2tfZWxlbWVudF9jZW50
ZXIoc2Vzc2lvbiwgdGVzdF9hY3Rpb25zX3BhZ2UsIG1vdXNlX2NoYWluKToKKyAgICBvdXRlciA9
IHNlc3Npb24uZmluZC5jc3MoIiNvdXRlciIsIGFsbD1GYWxzZSkKKyAgICBjZW50ZXIgPSBnZXRf
Y2VudGVyKG91dGVyLnJlY3QpCisgICAgbW91c2VfY2hhaW4uY2xpY2soZWxlbWVudD1vdXRlciku
cGVyZm9ybSgpCisgICAgZXZlbnRzID0gZ2V0X2V2ZW50cyhzZXNzaW9uKQorICAgIGFzc2VydCBs
ZW4oZXZlbnRzKSA9PSA0CisgICAgZXZlbnRfdHlwZXMgPSBbZVsidHlwZSJdIGZvciBlIGluIGV2
ZW50c10KKyAgICBhc3NlcnQgWyJtb3VzZW1vdmUiLCAibW91c2Vkb3duIiwgIm1vdXNldXAiLCAi
Y2xpY2siXSA9PSBldmVudF90eXBlcworICAgIGZvciBlIGluIGV2ZW50czoKKyAgICAgICAgaWYg
ZVsidHlwZSJdICE9ICJtb3VzZW1vdmUiOgorICAgICAgICAgICAgYXNzZXJ0IGFwcHJveChlWyJw
YWdlWCJdLCBjZW50ZXJbIngiXSkKKyAgICAgICAgICAgIGFzc2VydCBhcHByb3goZVsicGFnZVki
XSwgY2VudGVyWyJ5Il0pCisgICAgICAgICAgICBhc3NlcnQgZVsidGFyZ2V0Il0gPT0gIm91dGVy
IgorCisKK2RlZiB0ZXN0X2NsaWNrX25hdmlnYXRpb24oc2Vzc2lvbiwgdXJsKToKKyAgICBkZXN0
aW5hdGlvbiA9IHVybCgiL3dlYmRyaXZlci90ZXN0cy9hY3Rpb25zL3N1cHBvcnQvdGVzdF9hY3Rp
b25zX3dkc3BlYy5odG1sIikKKyAgICBzdGFydCA9IGxpbmtfZG9jKGRlc3RpbmF0aW9uKQorCisg
ICAgZGVmIGNsaWNrKGxpbmspOgorICAgICAgICBtb3VzZV9jaGFpbiA9IHNlc3Npb24uYWN0aW9u
cy5zZXF1ZW5jZSgKKyAgICAgICAgICAgICJwb2ludGVyIiwgInBvaW50ZXJfaWQiLCB7InBvaW50
ZXJUeXBlIjogIm1vdXNlIn0pCisgICAgICAgIG1vdXNlX2NoYWluLmNsaWNrKGVsZW1lbnQ9bGlu
aykucGVyZm9ybSgpCisKKyAgICBzZXNzaW9uLnVybCA9IHN0YXJ0CisgICAgZXJyb3JfbWVzc2Fn
ZSA9ICJEaWQgbm90IG5hdmlnYXRlIHRvICVzIiAlIGRlc3RpbmF0aW9uCisKKyAgICBjbGljayhz
ZXNzaW9uLmZpbmQuY3NzKCIjbGluayIsIGFsbD1GYWxzZSkpCisgICAgd2FpdChzZXNzaW9uLCBs
YW1iZGEgczogcy51cmwgPT0gZGVzdGluYXRpb24sIGVycm9yX21lc3NhZ2UpCisgICAgIyByZXBl
YXQgc3RlcHMgdG8gY2hlY2sgYmVoYXZpb3VyIGFmdGVyIGRvY3VtZW50IHVubG9hZAorICAgIHNl
c3Npb24udXJsID0gc3RhcnQKKyAgICBjbGljayhzZXNzaW9uLmZpbmQuY3NzKCIjbGluayIsIGFs
bD1GYWxzZSkpCisgICAgd2FpdChzZXNzaW9uLCBsYW1iZGEgczogcy51cmwgPT0gZGVzdGluYXRp
b24sIGVycm9yX21lc3NhZ2UpCisKKworQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKCJkcmFnX2R1
cmF0aW9uIiwgWzAsIDMwMCwgODAwXSkKK0BweXRlc3QubWFyay5wYXJhbWV0cml6ZSgiZHgsIGR5
IiwKKyAgICBbKDIwLCAwKSwgKDAsIDE1KSwgKDEwLCAxNSksICgtMjAsIDApLCAoMTAsIC0xNSks
ICgtMTAsIC0xNSldKQorZGVmIHRlc3RfZHJhZ19hbmRfZHJvcChzZXNzaW9uLCB0ZXN0X2FjdGlv
bnNfcGFnZSwgbW91c2VfY2hhaW4sIGR4LCBkeSwgZHJhZ19kdXJhdGlvbik6CisgICAgZHJhZ190
YXJnZXQgPSBzZXNzaW9uLmZpbmQuY3NzKCIjZHJhZ1RhcmdldCIsIGFsbD1GYWxzZSkKKyAgICBp
bml0aWFsX3JlY3QgPSBkcmFnX3RhcmdldC5yZWN0CisgICAgaW5pdGlhbF9jZW50ZXIgPSBnZXRf
Y2VudGVyKGluaXRpYWxfcmVjdCkKKyAgICAjIENvbmNsdWRlIGNoYWluIHdpdGggZXh0cmEgbW92
ZSB0byBhbGxvdyB0aW1lIGZvciBsYXN0IHF1ZXVlZAorICAgICMgY29vcmRpbmF0ZS11cGRhdGUg
b2YgZHJhZ190YXJnZXQgYW5kIHRvIHRlc3QgdGhhdCBkcmFnX3RhcmdldCBpcyAiZHJvcHBlZCIu
CisgICAgbW91c2VfY2hhaW4gXAorICAgICAgICAucG9pbnRlcl9tb3ZlKDAsIDAsIG9yaWdpbj1k
cmFnX3RhcmdldCkgXAorICAgICAgICAucG9pbnRlcl9kb3duKCkgXAorICAgICAgICAucG9pbnRl
cl9tb3ZlKGR4LCBkeSwgZHVyYXRpb249ZHJhZ19kdXJhdGlvbiwgb3JpZ2luPSJwb2ludGVyIikg
XAorICAgICAgICAucG9pbnRlcl91cCgpIFwKKyAgICAgICAgLnBvaW50ZXJfbW92ZSg4MCwgNTAs
IGR1cmF0aW9uPTEwMCwgb3JpZ2luPSJwb2ludGVyIikgXAorICAgICAgICAucGVyZm9ybSgpCisg
ICAgIyBtb3VzZXVwIHRoYXQgZW5kcyB0aGUgZHJhZyBpcyBhdCB0aGUgZXhwZWN0ZWQgZGVzdGlu
YXRpb24KKyAgICBlID0gZ2V0X2V2ZW50cyhzZXNzaW9uKVsxXQorICAgIGFzc2VydCBlWyJ0eXBl
Il0gPT0gIm1vdXNldXAiCisgICAgYXNzZXJ0IGFwcHJveChlWyJwYWdlWCJdLCBpbml0aWFsX2Nl
bnRlclsieCJdICsgZHgpCisgICAgYXNzZXJ0IGFwcHJveChlWyJwYWdlWSJdLCBpbml0aWFsX2Nl
bnRlclsieSJdICsgZHkpCisgICAgIyBjaGVjayByZXN1bHRpbmcgbG9jYXRpb24gb2YgdGhlIGRy
YWdnZWQgZWxlbWVudAorICAgIGZpbmFsX3JlY3QgPSBkcmFnX3RhcmdldC5yZWN0CisgICAgYXNz
ZXJ0IGluaXRpYWxfcmVjdFsieCJdICsgZHggPT0gZmluYWxfcmVjdFsieCJdCisgICAgYXNzZXJ0
IGluaXRpYWxfcmVjdFsieSJdICsgZHkgPT0gZmluYWxfcmVjdFsieSJdCmRpZmYgLS1naXQgYS9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL2FjdGlvbnMvc2VxdWVu
Y2UucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL2FjdGlv
bnMvc2VxdWVuY2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmVh
MTJhOWM3NTEyCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYmRyaXZlci90ZXN0cy9hY3Rpb25zL3NlcXVlbmNlLnB5CkBAIC0wLDAgKzEsMTQ0IEBACitp
bXBvcnQgcHl0ZXN0CisKK2Zyb20gdGVzdHMuYWN0aW9ucy5zdXBwb3J0LnJlZmluZSBpbXBvcnQg
Z2V0X2tleXMsIGZpbHRlcl9kaWN0LCBnZXRfZXZlbnRzCitmcm9tIHRlc3RzLmFjdGlvbnMuc3Vw
cG9ydC5rZXlzIGltcG9ydCBLZXlzCisKKworZGVmIHRlc3Rfbm9fYWN0aW9uc19zZW5kX25vX2V2
ZW50cyhzZXNzaW9uLCBrZXlfcmVwb3J0ZXIsIGtleV9jaGFpbik6CisgICAga2V5X2NoYWluLnBl
cmZvcm0oKQorICAgIGFzc2VydCBsZW4oZ2V0X2tleXMoa2V5X3JlcG9ydGVyKSkgPT0gMAorICAg
IGFzc2VydCBsZW4oZ2V0X2V2ZW50cyhzZXNzaW9uKSkgPT0gMAorCisKK2RlZiB0ZXN0X3JlbGVh
c2VfY2hhcl9zZXF1ZW5jZV9zZW5kc19rZXl1cF9ldmVudHNfaW5fcmV2ZXJzZShzZXNzaW9uLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGtleV9yZXBvcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBrZXlfY2hhaW4pOgorICAgIGtleV9jaGFpbiBcCisgICAg
ICAgIC5rZXlfZG93bigiYSIpIFwKKyAgICAgICAgLmtleV9kb3duKCJiIikgXAorICAgICAgICAu
cGVyZm9ybSgpCisgICAgIyByZXNldCBzbyB3ZSBvbmx5IHNlZSB0aGUgcmVsZWFzZSBldmVudHMK
KyAgICBzZXNzaW9uLmV4ZWN1dGVfc2NyaXB0KCJyZXNldEV2ZW50cygpOyIpCisgICAgc2Vzc2lv
bi5hY3Rpb25zLnJlbGVhc2UoKQorICAgIGV4cGVjdGVkID0gWworICAgICAgICB7ImNvZGUiOiAi
S2V5QiIsICJrZXkiOiAiYiIsICJ0eXBlIjogImtleXVwIn0sCisgICAgICAgIHsiY29kZSI6ICJL
ZXlBIiwgImtleSI6ICJhIiwgInR5cGUiOiAia2V5dXAifSwKKyAgICBdCisgICAgZXZlbnRzID0g
W2ZpbHRlcl9kaWN0KGUsIGV4cGVjdGVkWzBdKSBmb3IgZSBpbiBnZXRfZXZlbnRzKHNlc3Npb24p
XQorICAgIGFzc2VydCBldmVudHMgPT0gZXhwZWN0ZWQKKworCitkZWYgdGVzdF9yZWxlYXNlX25v
X2FjdGlvbnNfc2VuZHNfbm9fZXZlbnRzKHNlc3Npb24sIGtleV9yZXBvcnRlcik6CisgICAgc2Vz
c2lvbi5hY3Rpb25zLnJlbGVhc2UoKQorICAgIGFzc2VydCBsZW4oZ2V0X2tleXMoa2V5X3JlcG9y
dGVyKSkgPT0gMAorICAgIGFzc2VydCBsZW4oZ2V0X2V2ZW50cyhzZXNzaW9uKSkgPT0gMAorCisK
K0BweXRlc3QubWFyay5wYXJhbWV0cml6ZSgibW9kaWZpZXIsIHByb3AiLCBbCisgICAgKEtleXMu
Q09OVFJPTCwgImN0cmxLZXkiKSwKKyAgICAoS2V5cy5BTFQsICJhbHRLZXkiKSwKKyAgICAoS2V5
cy5NRVRBLCAibWV0YUtleSIpLAorICAgIChLZXlzLlNISUZULCAic2hpZnRLZXkiKSwKKyAgICAo
S2V5cy5SX0NPTlRST0wsICJjdHJsS2V5IiksCisgICAgKEtleXMuUl9BTFQsICJhbHRLZXkiKSwK
KyAgICAoS2V5cy5SX01FVEEsICJtZXRhS2V5IiksCisgICAgKEtleXMuUl9TSElGVCwgInNoaWZ0
S2V5IiksCitdKQorZGVmIHRlc3RfY29udHJvbF9jbGljayhzZXNzaW9uLAorICAgICAgICAgICAg
ICAgICAgICAgICB0ZXN0X2FjdGlvbnNfcGFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAga2V5
X2NoYWluLAorICAgICAgICAgICAgICAgICAgICAgICBtb3VzZV9jaGFpbiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgbW9kaWZpZXIsCisgICAgICAgICAgICAgICAgICAgICAgIHByb3ApOgorICAg
IGtleV9jaGFpbiBcCisgICAgICAgIC5wYXVzZSgwKSBcCisgICAgICAgIC5rZXlfZG93bihtb2Rp
ZmllcikgXAorICAgICAgICAucGF1c2UoMjAwKSBcCisgICAgICAgIC5rZXlfdXAobW9kaWZpZXIp
CisgICAgb3V0ZXIgPSBzZXNzaW9uLmZpbmQuY3NzKCIjb3V0ZXIiLCBhbGw9RmFsc2UpCisgICAg
bW91c2VfY2hhaW4uY2xpY2soZWxlbWVudD1vdXRlcikKKyAgICBzZXNzaW9uLmFjdGlvbnMucGVy
Zm9ybShba2V5X2NoYWluLmRpY3QsIG1vdXNlX2NoYWluLmRpY3RdKQorICAgIGV4cGVjdGVkID0g
WworICAgICAgICB7InR5cGUiOiAibW91c2Vtb3ZlIn0sCisgICAgICAgIHsidHlwZSI6ICJtb3Vz
ZWRvd24ifSwKKyAgICAgICAgeyJ0eXBlIjogIm1vdXNldXAifSwKKyAgICAgICAgeyJ0eXBlIjog
ImNsaWNrIn0sCisgICAgXQorICAgIGRlZmF1bHRzID0geworICAgICAgICAiYWx0S2V5IjogRmFs
c2UsCisgICAgICAgICJtZXRhS2V5IjogRmFsc2UsCisgICAgICAgICJzaGlmdEtleSI6IEZhbHNl
LAorICAgICAgICAiY3RybEtleSI6IEZhbHNlCisgICAgfQorICAgIGZvciBlIGluIGV4cGVjdGVk
OgorICAgICAgICBlLnVwZGF0ZShkZWZhdWx0cykKKyAgICAgICAgaWYgZVsidHlwZSJdICE9ICJt
b3VzZW1vdmUiOgorICAgICAgICAgICAgZVtwcm9wXSA9IFRydWUKKyAgICBmaWx0ZXJlZF9ldmVu
dHMgPSBbZmlsdGVyX2RpY3QoZSwgZXhwZWN0ZWRbMF0pIGZvciBlIGluIGdldF9ldmVudHMoc2Vz
c2lvbildCisgICAgYXNzZXJ0IGV4cGVjdGVkID09IGZpbHRlcmVkX2V2ZW50cworCisKK2RlZiB0
ZXN0X3JlbGVhc2VfY29udHJvbF9jbGljayhzZXNzaW9uLCBrZXlfcmVwb3J0ZXIsIGtleV9jaGFp
biwgbW91c2VfY2hhaW4pOgorICAgIGtleV9jaGFpbiBcCisgICAgICAgIC5wYXVzZSgwKSBcCisg
ICAgICAgIC5rZXlfZG93bihLZXlzLkNPTlRST0wpCisgICAgbW91c2VfY2hhaW4gXAorICAgICAg
ICAucG9pbnRlcl9tb3ZlKDAsIDAsIG9yaWdpbj1rZXlfcmVwb3J0ZXIpIFwKKyAgICAgICAgLnBv
aW50ZXJfZG93bigpCisgICAgc2Vzc2lvbi5hY3Rpb25zLnBlcmZvcm0oW2tleV9jaGFpbi5kaWN0
LCBtb3VzZV9jaGFpbi5kaWN0XSkKKyAgICBzZXNzaW9uLmV4ZWN1dGVfc2NyaXB0KCIiIgorICAg
ICAgICB2YXIga2V5UmVwb3J0ZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgia2V5cyIpOwor
ICAgICAgICBbIm1vdXNlZG93biIsICJtb3VzZXVwIl0uZm9yRWFjaCgoZSkgPT4geworICAgICAg
ICAgICAga2V5UmVwb3J0ZXIuYWRkRXZlbnRMaXN0ZW5lcihlLCByZWNvcmRQb2ludGVyRXZlbnQp
OworICAgICAgICAgIH0pOworICAgICAgICByZXNldEV2ZW50cygpOworICAgICIiIikKKyAgICBz
ZXNzaW9uLmFjdGlvbnMucmVsZWFzZSgpCisgICAgZXhwZWN0ZWQgPSBbCisgICAgICAgIHsidHlw
ZSI6ICJtb3VzZXVwIn0sCisgICAgICAgIHsidHlwZSI6ICJrZXl1cCJ9LAorICAgIF0KKyAgICBl
dmVudHMgPSBbZmlsdGVyX2RpY3QoZSwgZXhwZWN0ZWRbMF0pIGZvciBlIGluIGdldF9ldmVudHMo
c2Vzc2lvbildCisgICAgYXNzZXJ0IGV2ZW50cyA9PSBleHBlY3RlZAorCisKK2RlZiB0ZXN0X21h
bnlfbW9kaWZpZXJzX2NsaWNrKHNlc3Npb24sIHRlc3RfYWN0aW9uc19wYWdlLCBrZXlfY2hhaW4s
IG1vdXNlX2NoYWluKToKKyAgICBvdXRlciA9IHNlc3Npb24uZmluZC5jc3MoIiNvdXRlciIsIGFs
bD1GYWxzZSkKKyAgICBrZXlfY2hhaW4gXAorICAgICAgICAucGF1c2UoMCkgXAorICAgICAgICAu
a2V5X2Rvd24oS2V5cy5DT05UUk9MKSBcCisgICAgICAgIC5rZXlfZG93bihLZXlzLlNISUZUKSBc
CisgICAgICAgIC5wYXVzZSgwKSBcCisgICAgICAgIC5rZXlfdXAoS2V5cy5DT05UUk9MKSBcCisg
ICAgICAgIC5rZXlfdXAoS2V5cy5TSElGVCkKKyAgICBtb3VzZV9jaGFpbiBcCisgICAgICAgIC5w
b2ludGVyX21vdmUoMCwgMCwgb3JpZ2luPW91dGVyKSBcCisgICAgICAgIC5wYXVzZSgwKSBcCisg
ICAgICAgIC5wb2ludGVyX2Rvd24oKSBcCisgICAgICAgIC5wb2ludGVyX3VwKCkgXAorICAgICAg
ICAucGF1c2UoMCkgXAorICAgICAgICAucGF1c2UoMCkgXAorICAgICAgICAucG9pbnRlcl9kb3du
KCkKKyAgICBzZXNzaW9uLmFjdGlvbnMucGVyZm9ybShba2V5X2NoYWluLmRpY3QsIG1vdXNlX2No
YWluLmRpY3RdKQorICAgIGV4cGVjdGVkID0gWworICAgICAgICB7InR5cGUiOiAibW91c2Vtb3Zl
In0sCisgICAgICAgICMgc2hpZnQgYW5kIGN0cmwgcHJlc3NlcworICAgICAgICB7InR5cGUiOiAi
bW91c2Vkb3duIn0sCisgICAgICAgIHsidHlwZSI6ICJtb3VzZXVwIn0sCisgICAgICAgIHsidHlw
ZSI6ICJjbGljayJ9LAorICAgICAgICAjIG5vIG1vZGlmaWVycyBwcmVzc2VkCisgICAgICAgIHsi
dHlwZSI6ICJtb3VzZWRvd24ifSwKKyAgICBdCisgICAgZGVmYXVsdHMgPSB7CisgICAgICAgICJh
bHRLZXkiOiBGYWxzZSwKKyAgICAgICAgIm1ldGFLZXkiOiBGYWxzZSwKKyAgICAgICAgInNoaWZ0
S2V5IjogRmFsc2UsCisgICAgICAgICJjdHJsS2V5IjogRmFsc2UKKyAgICB9CisgICAgZm9yIGUg
aW4gZXhwZWN0ZWQ6CisgICAgICAgIGUudXBkYXRlKGRlZmF1bHRzKQorICAgIGZvciBlIGluIGV4
cGVjdGVkWzE6NF06CisgICAgICAgIGVbInNoaWZ0S2V5Il0gPSBUcnVlCisgICAgICAgIGVbImN0
cmxLZXkiXSA9IFRydWUKKyAgICBldmVudHMgPSBbZmlsdGVyX2RpY3QoZSwgZXhwZWN0ZWRbMF0p
IGZvciBlIGluIGdldF9ldmVudHMoc2Vzc2lvbildCisgICAgYXNzZXJ0IGV2ZW50cyA9PSBleHBl
Y3RlZApkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90
ZXN0cy9hY3Rpb25zL3NwZWNpYWxfa2V5cy5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWJkcml2ZXIvdGVzdHMvYWN0aW9ucy9zcGVjaWFsX2tleXMucHkKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmVlMmQxM2ZhZjRlCi0tLSAvZGV2L251bGwKKysrIGIv
V2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9hY3Rpb25zL3NwZWNp
YWxfa2V5cy5weQpAQCAtMCwwICsxLDM5IEBACisjIE1FVEE6IHRpbWVvdXQ9bG9uZworCitpbXBv
cnQgcHl0ZXN0Citmcm9tIHRlc3RzLmFjdGlvbnMuc3VwcG9ydC5rZXlzIGltcG9ydCBBTExfRVZF
TlRTLCBLZXlzCitmcm9tIHRlc3RzLmFjdGlvbnMuc3VwcG9ydC5yZWZpbmUgaW1wb3J0IGZpbHRl
cl9kaWN0LCBnZXRfa2V5cywgZ2V0X2V2ZW50cworCisKK0BweXRlc3QubWFyay5wYXJhbWV0cml6
ZSgibmFtZSxleHBlY3RlZCIsIEFMTF9FVkVOVFMuaXRlbXMoKSkKK2RlZiB0ZXN0X3dlYmRyaXZl
cl9zcGVjaWFsX2tleV9zZW5kc19rZXlkb3duKHNlc3Npb24sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfcmVwb3J0ZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfY2hhaW4sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQpOgorICAgIGlmIG5hbWUuc3RhcnRzd2l0
aCgiRiIpOgorICAgICAgICAjIFByZXZlbnQgZGVmYXVsdCBiZWhhdmlvciBmb3IgRjEsIGV0Yy4s
IGJ1dCBvbmx5IGFmdGVyIGtleWRvd24KKyAgICAgICAgIyBidWJibGVzIHVwIHRvIGJvZHkuIChP
dGhlcndpc2UgYWN0aXZhdGVkIGJyb3dzZXIgbWVudXMvZnVuY3Rpb25zCisgICAgICAgICMgbWF5
IGludGVyZmVyZSB3aXRoIHN1YnNlcXVlbnQgdGVzdHMuKQorICAgICAgICBzZXNzaW9uLmV4ZWN1
dGVfc2NyaXB0KCIiIgorICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVy
KCJrZXlkb3duIiwKKyAgICAgICAgICAgICAgICAgICAgKGUpID0+IGUucHJldmVudERlZmF1bHQo
KSk7CisgICAgICAgICIiIikKKyAgICBrZXlfY2hhaW4ua2V5X2Rvd24oZ2V0YXR0cihLZXlzLCBu
YW1lKSkucGVyZm9ybSgpCisgICAgIyBvbmx5IGludGVyZXN0ZWQgaW4ga2V5ZG93bgorICAgIGZp
cnN0X2V2ZW50ID0gZ2V0X2V2ZW50cyhzZXNzaW9uKVswXQorICAgICMgbWFrZSBhIGNvcHkgc28g
d2UgY2FuIHRocm93IG91dCBpcnJlbGV2YW50IGtleXMgYW5kIGNvbXBhcmUgdG8gZXZlbnRzCisg
ICAgZXhwZWN0ZWQgPSBkaWN0KGV4cGVjdGVkKQorCisgICAgZGVsIGV4cGVjdGVkWyJ2YWx1ZSJd
CisgICAgIyBjaGVjayBhbmQgcmVtb3ZlIGtleXMgdGhhdCBhcmVuJ3QgaW4gZXhwZWN0ZWQKKyAg
ICBhc3NlcnQgZmlyc3RfZXZlbnRbInR5cGUiXSA9PSAia2V5ZG93biIKKyAgICBhc3NlcnQgZmly
c3RfZXZlbnRbInJlcGVhdCJdID09IEZhbHNlCisgICAgZmlyc3RfZXZlbnQgPSBmaWx0ZXJfZGlj
dChmaXJzdF9ldmVudCwgZXhwZWN0ZWQpCisgICAgYXNzZXJ0IGZpcnN0X2V2ZW50ID09IGV4cGVj
dGVkCisgICAgIyBvbmx5IHByaW50YWJsZSBjaGFyYWN0ZXJzIHNob3VsZCBiZSByZWNvcmRlZCBp
biBpbnB1dCBmaWVsZAorICAgIGVudGVyZWRfa2V5cyA9IGdldF9rZXlzKGtleV9yZXBvcnRlcikK
KyAgICBpZiBsZW4oZXhwZWN0ZWRbImtleSJdKSA9PSAxOgorICAgICAgICBhc3NlcnQgZW50ZXJl
ZF9rZXlzID09IGV4cGVjdGVkWyJrZXkiXQorICAgIGVsc2U6CisgICAgICAgIGFzc2VydCBsZW4o
ZW50ZXJlZF9rZXlzKSA9PSAwCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViZHJpdmVyL3Rlc3RzL2FjdGlvbnMvc3VwcG9ydC9fX2luaXRfXy5weSBiL1dlYkRyaXZl
clRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvYWN0aW9ucy9zdXBwb3J0L19faW5p
dF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lNjlkZTI5YmIy
ZApkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0
cy9hY3Rpb25zL3N1cHBvcnQva2V5cy5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93
ZWJkcml2ZXIvdGVzdHMvYWN0aW9ucy9zdXBwb3J0L2tleXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAuLjg1NTE3OTE2Njc4Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vi
RHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9hY3Rpb25zL3N1cHBvcnQv
a2V5cy5weQpAQCAtMCwwICsxLDc0MiBAQAorIyBMaWNlbnNlZCB0byB0aGUgU29mdHdhcmUgRnJl
ZWRvbSBDb25zZXJ2YW5jeSAoU0ZDKSB1bmRlciBvbmUKKyMgb3IgbW9yZSBjb250cmlidXRvciBs
aWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisjIGRpc3RyaWJ1dGVkIHdp
dGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisjIHJlZ2FyZGluZyBjb3B5
cmlnaHQgb3duZXJzaGlwLiAgVGhlIFNGQyBsaWNlbnNlcyB0aGlzIGZpbGUKKyMgdG8geW91IHVu
ZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorIyAiTGljZW5zZSIpOyB5
b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisjIHdpdGggdGhl
IExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMg
ICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNz
IHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorIyBz
b2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBh
bgorIyAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBB
TlkKKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBm
b3IgdGhlCisjIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGlt
aXRhdGlvbnMKKyMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyIiIgorVGhlIEtleXMgaW1wbGVtZW50
YXRpb24uCisiIiIKKworZnJvbSBpbnNwZWN0IGltcG9ydCBnZXRtZW1iZXJzCisKKworY2xhc3Mg
S2V5cyhvYmplY3QpOgorICAgICIiIgorICAgIFNldCBvZiBzcGVjaWFsIGtleXMgY29kZXMuCisK
KyAgICBTZWUgYWxzbyBodHRwczovL3czYy5naXRodWIuaW8vd2ViZHJpdmVyL3dlYmRyaXZlci1z
cGVjLmh0bWwjaC1rZXlib2FyZC1hY3Rpb25zCisgICAgIiIiCisKKyAgICBOVUxMID0gdSJcdWUw
MDAiCisgICAgQ0FOQ0VMID0gdSJcdWUwMDEiICAjIF5icmVhaworICAgIEhFTFAgPSB1Ilx1ZTAw
MiIKKyAgICBCQUNLU1BBQ0UgPSB1Ilx1ZTAwMyIKKyAgICBUQUIgPSB1Ilx1ZTAwNCIKKyAgICBD
TEVBUiA9IHUiXHVlMDA1IgorICAgIFJFVFVSTiA9IHUiXHVlMDA2IgorICAgIEVOVEVSID0gdSJc
dWUwMDciCisgICAgU0hJRlQgPSB1Ilx1ZTAwOCIKKyAgICBDT05UUk9MID0gdSJcdWUwMDkiCisg
ICAgQUxUID0gdSJcdWUwMGEiCisgICAgUEFVU0UgPSB1Ilx1ZTAwYiIKKyAgICBFU0NBUEUgPSB1
Ilx1ZTAwYyIKKyAgICBTUEFDRSA9IHUiXHVlMDBkIgorICAgIFBBR0VfVVAgPSB1Ilx1ZTAwZSIK
KyAgICBQQUdFX0RPV04gPSB1Ilx1ZTAwZiIKKyAgICBFTkQgPSB1Ilx1ZTAxMCIKKyAgICBIT01F
ID0gdSJcdWUwMTEiCisgICAgTEVGVCA9IHUiXHVlMDEyIgorICAgIFVQID0gdSJcdWUwMTMiCisg
ICAgUklHSFQgPSB1Ilx1ZTAxNCIKKyAgICBET1dOID0gdSJcdWUwMTUiCisgICAgSU5TRVJUID0g
dSJcdWUwMTYiCisgICAgREVMRVRFID0gdSJcdWUwMTciCisgICAgU0VNSUNPTE9OID0gdSJcdWUw
MTgiCisgICAgRVFVQUxTID0gdSJcdWUwMTkiCisKKyAgICBOVU1QQUQwID0gdSJcdWUwMWEiICAj
IG51bWJlciBwYWQga2V5cworICAgIE5VTVBBRDEgPSB1Ilx1ZTAxYiIKKyAgICBOVU1QQUQyID0g
dSJcdWUwMWMiCisgICAgTlVNUEFEMyA9IHUiXHVlMDFkIgorICAgIE5VTVBBRDQgPSB1Ilx1ZTAx
ZSIKKyAgICBOVU1QQUQ1ID0gdSJcdWUwMWYiCisgICAgTlVNUEFENiA9IHUiXHVlMDIwIgorICAg
IE5VTVBBRDcgPSB1Ilx1ZTAyMSIKKyAgICBOVU1QQUQ4ID0gdSJcdWUwMjIiCisgICAgTlVNUEFE
OSA9IHUiXHVlMDIzIgorICAgIE1VTFRJUExZID0gdSJcdWUwMjQiCisgICAgQUREID0gdSJcdWUw
MjUiCisgICAgU0VQQVJBVE9SID0gdSJcdWUwMjYiCisgICAgU1VCVFJBQ1QgPSB1Ilx1ZTAyNyIK
KyAgICBERUNJTUFMID0gdSJcdWUwMjgiCisgICAgRElWSURFID0gdSJcdWUwMjkiCisKKyAgICBG
MSA9IHUiXHVlMDMxIiAgIyBmdW5jdGlvbiAga2V5cworICAgIEYyID0gdSJcdWUwMzIiCisgICAg
RjMgPSB1Ilx1ZTAzMyIKKyAgICBGNCA9IHUiXHVlMDM0IgorICAgIEY1ID0gdSJcdWUwMzUiCisg
ICAgRjYgPSB1Ilx1ZTAzNiIKKyAgICBGNyA9IHUiXHVlMDM3IgorICAgIEY4ID0gdSJcdWUwMzgi
CisgICAgRjkgPSB1Ilx1ZTAzOSIKKyAgICBGMTAgPSB1Ilx1ZTAzYSIKKyAgICBGMTEgPSB1Ilx1
ZTAzYiIKKyAgICBGMTIgPSB1Ilx1ZTAzYyIKKworICAgIE1FVEEgPSB1Ilx1ZTAzZCIKKworICAg
ICMgTW9yZSBrZXlzIGZyb20gd2ViZHJpdmVyIHNwZWMKKyAgICBaRU5LQUtVSEFOS0FLVSA9IHUi
XHVFMDQwIgorICAgIFJfU0hJRlQgPSB1Ilx1RTA1MCIKKyAgICBSX0NPTlRST0wgPSB1Ilx1RTA1
MSIKKyAgICBSX0FMVCA9IHUiXHVFMDUyIgorICAgIFJfTUVUQSA9IHUiXHVFMDUzIgorICAgIFJf
UEFHRVVQID0gdSJcdUUwNTQiCisgICAgUl9QQUdFRE9XTiA9IHUiXHVFMDU1IgorICAgIFJfRU5E
ID0gdSJcdUUwNTYiCisgICAgUl9IT01FID0gdSJcdUUwNTciCisgICAgUl9BUlJPV0xFRlQgPSB1
Ilx1RTA1OCIKKyAgICBSX0FSUk9XVVAgPSB1Ilx1RTA1OSIKKyAgICBSX0FSUk9XUklHSFQgPSB1
Ilx1RTA1QSIKKyAgICBSX0FSUk9XRE9XTiA9IHUiXHVFMDVCIgorICAgIFJfSU5TRVJUID0gdSJc
dUUwNUMiCisgICAgUl9ERUxFVEUgPSB1Ilx1RTA1RCIKKworCitBTExfS0VZUyA9IGdldG1lbWJl
cnMoS2V5cywgbGFtYmRhIHg6IHR5cGUoeCkgPT0gdW5pY29kZSkKKworQUxMX0VWRU5UUyA9IHsK
KyAgICAiQUREIjogeworICAgICAgICAiY29kZSI6ICIiLAorICAgICAgICAiY3RybCI6IEZhbHNl
LAorICAgICAgICAia2V5IjogIisiLAorICAgICAgICAibG9jYXRpb24iOiAzLAorICAgICAgICAi
bWV0YSI6IEZhbHNlLAorICAgICAgICAic2hpZnQiOiBGYWxzZSwKKyAgICAgICAgInZhbHVlIjog
dSJcdWUwMjUiLAorICAgIH0sCisgICAgIkFMVCI6IHsKKyAgICAgICAgImNvZGUiOiAiQWx0TGVm
dCIsCisgICAgICAgICJjdHJsIjogRmFsc2UsCisgICAgICAgICJrZXkiOiAiQWx0IiwKKyAgICAg
ICAgImxvY2F0aW9uIjogMSwKKyAgICAgICAgIm1ldGEiOiBGYWxzZSwKKyAgICAgICAgInNoaWZ0
IjogRmFsc2UsCisgICAgICAgICJ2YWx1ZSI6IHUiXHVlMDBhIiwKKyAgICB9LAorICAgICJCQUNL
U1BBQ0UiOiB7CisgICAgICAgICJjb2RlIjogIkJhY2tzcGFjZSIsCisgICAgICAgICJjdHJsIjog
RmFsc2UsCisgICAgICAgICJrZXkiOiAiQmFja3NwYWNlIiwKKyAgICAgICAgImxvY2F0aW9uIjog
MCwKKyAgICAgICAgIm1ldGEiOiBGYWxzZSwKKyAgICAgICAgInNoaWZ0IjogRmFsc2UsCisgICAg
ICAgICJ2YWx1ZSI6IHUiXHVlMDAzIiwKKyAgICB9LAorICAgICJDQU5DRUwiOiB7CisgICAgICAg
ICJjb2RlIjogIiIsCisgICAgICAgICJjdHJsIjogRmFsc2UsCisgICAgICAgICJrZXkiOiAiQ2Fu
Y2VsIiwKKyAgICAgICAgImxvY2F0aW9uIjogMCwKKyAgICAgICAgIm1ldGEiOiBGYWxzZSwKKyAg
ICAgICAgInNoaWZ0IjogRmFsc2UsCisgICAgICAgICJ2YWx1ZSI6IHUiXHVlMDAxIiwKKyAgICB9
LAorICAgICJDTEVBUiI6IHsKKyAgICAgICAgImNvZGUiOiAiIiwKKyAgICAgICAgImN0cmwiOiBG
YWxzZSwKKyAgICAgICAgImtleSI6ICJDbGVhciIsCisgICAgICAgICJsb2NhdGlvbiI6IDAsCisg
ICAgICAgICJtZXRhIjogRmFsc2UsCisgICAgICAgICJzaGlmdCI6IEZhbHNlLAorICAgICAgICAi
dmFsdWUiOiB1Ilx1ZTAwNSIsCisgICAgfSwKKyAgICAiQ09OVFJPTCI6IHsKKyAgICAgICAgImNv
ZGUiOiAiQ29udHJvbExlZnQiLAorICAgICAgICAiY3RybCI6IFRydWUsCisgICAgICAgICJrZXki
OiAiQ29udHJvbCIsCisgICAgICAgICJsb2NhdGlvbiI6IDEsCisgICAgICAgICJtZXRhIjogRmFs
c2UsCisgICAgICAgICJzaGlmdCI6IEZhbHNlLAorICAgICAgICAidmFsdWUiOiB1Ilx1ZTAwOSIs
CisgICAgfSwKKyAgICAiREVDSU1BTCI6IHsKKyAgICAgICAgImNvZGUiOiAiTnVtcGFkRGVjaW1h
bCIsCisgICAgICAgICJjdHJsIjogRmFsc2UsCisgICAgICAgICJrZXkiOiAiLiIsCisgICAgICAg
ICJsb2NhdGlvbiI6IDMsCisgICAgICAgICJtZXRhIjogRmFsc2UsCisgICAgICAgICJzaGlmdCI6
IEZhbHNlLAorICAgICAgICAidmFsdWUiOiB1Ilx1ZTAyOCIsCisgICAgfSwKKyAgICAiREVMRVRF
IjogeworICAgICAgICAiY29kZSI6ICJEZWxldGUiLAorICAgICAgICAiY3RybCI6IEZhbHNlLAor
ICAgICAgICAia2V5IjogIkRlbGV0ZSIsCisgICAgICAgICJsb2NhdGlvbiI6IDAsCisgICAgICAg
ICJtZXRhIjogRmFsc2UsCisgICAgICAgICJzaGlmdCI6IEZhbHNlLAorICAgICAgICAidmFsdWUi
OiB1Ilx1ZTAxNyIsCisgICAgfSwKKyAgICAiRElWSURFIjogeworICAgICAgICAiY29kZSI6ICJO
dW1wYWREaXZpZGUiLAorICAgICAgICAiY3RybCI6IEZhbHNlLAorICAgICAgICAia2V5IjogIi8i
LAorICAgICAgICAibG9jYXRpb24iOiAzLAorICAgICAgICAibWV0YSI6IEZhbHNlLAorICAgICAg
ICAic2hpZnQiOiBGYWxzZSwKKyAgICAgICAgInZhbHVlIjogdSJcdWUwMjkiLAorICAgIH0sCisg
ICAgIkRPV04iOiB7CisgICAgICAgICJjb2RlIjogIkFycm93RG93biIsCisgICAgICAgICJjdHJs
IjogRmFsc2UsCisgICAgICAgICJrZXkiOiAiQXJyb3dEb3duIiwKKyAgICAgICAgImxvY2F0aW9u
IjogMCwKKyAgICAgICAgIm1ldGEiOiBGYWxzZSwKKyAgICAgICAgInNoaWZ0IjogRmFsc2UsCisg
ICAgICAgICJ2YWx1ZSI6IHUiXHVlMDE1IiwKKyAgICB9LAorICAgICJFTkQiOiB7CisgICAgICAg
ICJjb2RlIjogIkVuZCIsCisgICAgICAgICJjdHJsIjogRmFsc2UsCisgICAgICAgICJrZXkiOiAi
RW5kIiwKKyAgICAgICAgImxvY2F0aW9uIjogMCwKKyAgICAgICAgIm1ldGEiOiBGYWxzZSwKKyAg
ICAgICAgInNoaWZ0IjogRmFsc2UsCisgICAgICAgICJ2YWx1ZSI6IHUiXHVlMDEwIiwKKyAgICB9
LAorICAgICJFTlRFUiI6IHsKKyAgICAgICAgImNvZGUiOiAiTnVtcGFkRW50ZXIiLAorICAgICAg
ICAiY3RybCI6IEZhbHNlLAorICAgICAgICAia2V5IjogIkVudGVyIiwKKyAgICAgICAgImxvY2F0
aW9uIjogMSwKKyAgICAgICAgIm1ldGEiOiBGYWxzZSwKKyAgICAgICAgInNoaWZ0IjogRmFsc2Us
CisgICAgICAgICJ2YWx1ZSI6IHUiXHVlMDA3IiwKKyAgICB9LAorICAgICJFUVVBTFMiOiB7Cisg
ICAgICAgICJjb2RlIjogIiIsCisgICAgICAgICJjdHJsIjogRmFsc2UsCisgICAgICAgICJrZXki
OiAiPSIsCisgICAgICAgICJsb2NhdGlvbiI6IDAsCisgICAgICAgICJtZXRhIjogRmFsc2UsCisg
ICAgICAgICJzaGlmdCI6IEZhbHNlLAorICAgICAgICAidmFsdWUiOiB1Ilx1ZTAxOSIsCisgICAg
fSwKKyAgICAiRVNDQVBFIjogeworICAgICAgICAiY29kZSI6ICJFc2NhcGUiLAorICAgICAgICAi
Y3RybCI6IEZhbHNlLAorICAgICAgICAia2V5IjogIkVzY2FwZSIsCisgICAgICAgICJsb2NhdGlv
biI6IDAsCisgICAgICAgICJtZXRhIjogRmFsc2UsCisgICAgICAgICJzaGlmdCI6IEZhbHNlLAor
ICAgICAgICAidmFsdWUiOiB1Ilx1ZTAwYyIsCisgICAgfSwKKyAgICAiRjEiOiB7CisgICAgICAg
ICJjb2RlIjogIkYxIiwKKyAgICAgICAgImN0cmwiOiBGYWxzZSwKKyAgICAgICAgImtleSI6ICJG
MSIsCisgICAgICAgICJsb2NhdGlvbiI6IDAsCisgICAgICAgICJtZXRhIjogRmFsc2UsCisgICAg
ICAgICJzaGlmdCI6IEZhbHNlLAorICAgICAgICAidmFsdWUiOiB1Ilx1ZTAzMSIsCisgICAgfSwK
KyAgICAiRjEwIjogeworICAgICAgICAiY29kZSI6ICJGMTAiLAorICAgICAgICAiY3RybCI6IEZh
bHNlLAorICAgICAgICAia2V5IjogIkYxMCIsCisgICAgICAgICJsb2NhdGlvbiI6IDAsCisgICAg
ICAgICJtZXRhIjogRmFsc2UsCisgICAgICAgICJzaGlmdCI6IEZhbHNlLAorICAgICAgICAidmFs
dWUiOiB1Ilx1ZTAzYSIsCisgICAgfSwKKyAgICAiRjExIjogeworICAgICAgICAiY29kZSI6ICJG
MTEiLAorICAgICAgICAiY3RybCI6IEZhbHNlLAorICAgICAgICAia2V5IjogIkYxMSIsCisgICAg
ICAgICJsb2NhdGlvbiI6IDAsCisgICAgICAgICJtZXRhIjogRmFsc2UsCisgICAgICAgICJzaGlm
dCI6IEZhbHNlLAorICAgICAgICAidmFsdWUiOiB1Ilx1ZTAzYiIsCisgICAgfSwKKyAgICAiRjEy
IjogeworICAgICAgICAiY29kZSI6ICJGMTIiLAorICAgICAgICAiY3RybCI6IEZhbHNlLAorICAg
ICAgICAia2V5IjogIkYxMiIsCisgICAgICAgICJsb2NhdGlvbiI6IDAsCisgICAgICAgICJtZXRh
IjogRmFsc2UsCisgICAgICAgICJzaGlmdCI6IEZhbHNlLAorICAgICAgICAidmFsdWUiOiB1Ilx1
ZTAzYyIsCisgICAgfSwKKyAgICAiRjIiOiB7CisgICAgICAgICJjb2RlIjogIkYyIiwKKyAgICAg
ICAgImN0cmwiOiBGYWxzZSwKKyAgICAgICAgImtleSI6ICJGMiIsCisgICAgICAgICJsb2NhdGlv
biI6IDAsCisgICAgICAgICJtZXRhIjogRmFsc2UsCisgICAgICAgICJzaGlmdCI6IEZhbHNlLAor
ICAgICAgICAidmFsdWUiOiB1Ilx1ZTAzMiIsCisgICAgfSwKKyAgICAiRjMiOiB7CisgICAgICAg
ICJjb2RlIjogIkYzIiwKKyAgICAgICAgImN0cmwiOiBGYWxzZSwKKyAgICAgICAgImtleSI6ICJG
MyIsCisgICAgICAgICJsb2NhdGlvbiI6IDAsCisgICAgICAgICJtZXRhIjogRmFsc2UsCisgICAg
ICAgICJzaGlmdCI6IEZhbHNlLAorICAgICAgICAidmFsdWUiOiB1Ilx1ZTAzMyIsCisgICAgfSwK
KyAgICAiRjQiOiB7CisgICAgICAgICJjb2RlIjogIkY0IiwKKyAgICAgICAgImN0cmwiOiBGYWxz
ZSwKKyAgICAgICAgImtleSI6ICJGNCIsCisgICAgICAgICJsb2NhdGlvbiI6IDAsCisgICAgICAg
ICJtZXRhIjogRmFsc2UsCisgICAgICAgICJzaGlmdCI6IEZhbHNlLAorICAgICAgICAidmFsdWUi
OiB1Ilx1ZTAzNCIsCisgICAgfSwKKyAgICAiRjUiOiB7CisgICAgICAgICJjb2RlIjogIkY1IiwK
KyAgICAgICAgImN0cmwiOiBGYWxzZSwKKyAgICAgICAgImtleSI6ICJGNSIsCisgICAgICAgICJs
b2NhdGlvbiI6IDAsCisgICAgICAgICJtZXRhIjogRmFsc2UsCisgICAgICAgICJzaGlmdCI6IEZh
bHNlLAorICAgICAgICAidmFsdWUiOiB1Ilx1ZTAzNSIsCisgICAgfSwKKyAgICAiRjYiOiB7Cisg
ICAgICAgICJjb2RlIjogIkY2IiwKKyAgICAgICAgImN0cmwiOiBGYWxzZSwKKyAgICAgICAgImtl
eSI6ICJGNiIsCisgICAgICAgICJsb2NhdGlvbiI6IDAsCisgICAgICAgICJtZXRhIjogRmFsc2Us
CisgICAgICAgICJzaGlmdCI6IEZhbHNlLAorICAgICAgICAidmFsdWUiOiB1Ilx1ZTAzNiIsCisg
ICAgfSwKKyAgICAiRjciOiB7CisgICAgICAgICJjb2RlIjogIkY3IiwKKyAgICAgICAgImN0cmwi
OiBGYWxzZSwKKyAgICAgICAgImtleSI6ICJGNyIsCisgICAgICAgICJsb2NhdGlvbiI6IDAsCisg
ICAgICAgICJtZXRhIjogRmFsc2UsCisgICAgICAgICJzaGlmdCI6IEZhbHNlLAorICAgICAgICAi
dmFsdWUiOiB1Ilx1ZTAzNyIsCisgICAgfSwKKyAgICAiRjgiOiB7CisgICAgICAgICJjb2RlIjog
IkY4IiwKKyAgICAgICAgImN0cmwiOiBGYWxzZSwKKyAgICAgICAgImtleSI6ICJGOCIsCisgICAg
ICAgICJsb2NhdGlvbiI6IDAsCisgICAgICAgICJtZXRhIjogRmFsc2UsCisgICAgICAgICJzaGlm
dCI6IEZhbHNlLAorICAgICAgICAidmFsdWUiOiB1Ilx1ZTAzOCIsCisgICAgfSwKKyAgICAiRjki
OiB7CisgICAgICAgICJjb2RlIjogIkY5IiwKKyAgICAgICAgImN0cmwiOiBGYWxzZSwKKyAgICAg
ICAgImtleSI6ICJGOSIsCisgICAgICAgICJsb2NhdGlvbiI6IDAsCisgICAgICAgICJtZXRhIjog
RmFsc2UsCisgICAgICAgICJzaGlmdCI6IEZhbHNlLAorICAgICAgICAidmFsdWUiOiB1Ilx1ZTAz
OSIsCisgICAgfSwKKyAgICAiSEVMUCI6IHsKKyAgICAgICAgImNvZGUiOiAiSGVscCIsCisgICAg
ICAgICJjdHJsIjogRmFsc2UsCisgICAgICAgICJrZXkiOiAiSGVscCIsCisgICAgICAgICJsb2Nh
dGlvbiI6IDAsCisgICAgICAgICJtZXRhIjogRmFsc2UsCisgICAgICAgICJzaGlmdCI6IEZhbHNl
LAorICAgICAgICAidmFsdWUiOiB1Ilx1ZTAwMiIsCisgICAgfSwKKyAgICAiSE9NRSI6IHsKKyAg
ICAgICAgImNvZGUiOiAiSG9tZSIsCisgICAgICAgICJjdHJsIjogRmFsc2UsCisgICAgICAgICJr
ZXkiOiAiSG9tZSIsCisgICAgICAgICJsb2NhdGlvbiI6IDAsCisgICAgICAgICJtZXRhIjogRmFs
c2UsCisgICAgICAgICJzaGlmdCI6IEZhbHNlLAorICAgICAgICAidmFsdWUiOiB1Ilx1ZTAxMSIs
CisgICAgfSwKKyAgICAiSU5TRVJUIjogeworICAgICAgICAiY29kZSI6ICJJbnNlcnQiLAorICAg
ICAgICAiY3RybCI6IEZhbHNlLAorICAgICAgICAia2V5IjogIkluc2VydCIsCisgICAgICAgICJs
b2NhdGlvbiI6IDAsCisgICAgICAgICJtZXRhIjogRmFsc2UsCisgICAgICAgICJzaGlmdCI6IEZh
bHNlLAorICAgICAgICAidmFsdWUiOiB1Ilx1ZTAxNiIsCisgICAgfSwKKyAgICAiTEVGVCI6IHsK
KyAgICAgICAgImNvZGUiOiAiQXJyb3dMZWZ0IiwKKyAgICAgICAgImN0cmwiOiBGYWxzZSwKKyAg
ICAgICAgImtleSI6ICJBcnJvd0xlZnQiLAorICAgICAgICAibG9jYXRpb24iOiAwLAorICAgICAg
ICAibWV0YSI6IEZhbHNlLAorICAgICAgICAic2hpZnQiOiBGYWxzZSwKKyAgICAgICAgInZhbHVl
IjogdSJcdWUwMTIiLAorICAgIH0sCisgICAgIk1FVEEiOiB7CisgICAgICAgICJjb2RlIjogIk9T
TGVmdCIsCisgICAgICAgICJjdHJsIjogRmFsc2UsCisgICAgICAgICJrZXkiOiAiTWV0YSIsCisg
ICAgICAgICJsb2NhdGlvbiI6IDEsCisgICAgICAgICJtZXRhIjogVHJ1ZSwKKyAgICAgICAgInNo
aWZ0IjogRmFsc2UsCisgICAgICAgICJ2YWx1ZSI6IHUiXHVlMDNkIiwKKyAgICB9LAorICAgICJN
VUxUSVBMWSI6IHsKKyAgICAgICAgImNvZGUiOiAiTnVtcGFkTXVsdGlwbHkiLAorICAgICAgICAi
Y3RybCI6IEZhbHNlLAorICAgICAgICAia2V5IjogIioiLAorICAgICAgICAibG9jYXRpb24iOiAz
LAorICAgICAgICAibWV0YSI6IEZhbHNlLAorICAgICAgICAic2hpZnQiOiBGYWxzZSwKKyAgICAg
ICAgInZhbHVlIjogdSJcdWUwMjQiLAorICAgIH0sCisgICAgIk5VTEwiOiB7CisgICAgICAgICJj
b2RlIjogIiIsCisgICAgICAgICJjdHJsIjogRmFsc2UsCisgICAgICAgICJrZXkiOiAiVW5pZGVu
dGlmaWVkIiwKKyAgICAgICAgImxvY2F0aW9uIjogMCwKKyAgICAgICAgIm1ldGEiOiBGYWxzZSwK
KyAgICAgICAgInNoaWZ0IjogRmFsc2UsCisgICAgICAgICJ2YWx1ZSI6IHUiXHVlMDAwIiwKKyAg
ICB9LAorICAgICJOVU1QQUQwIjogeworICAgICAgICAiY29kZSI6ICJOdW1wYWQwIiwKKyAgICAg
ICAgImN0cmwiOiBGYWxzZSwKKyAgICAgICAgImtleSI6ICIwIiwKKyAgICAgICAgImxvY2F0aW9u
IjogMywKKyAgICAgICAgIm1ldGEiOiBGYWxzZSwKKyAgICAgICAgInNoaWZ0IjogRmFsc2UsCisg
ICAgICAgICJ2YWx1ZSI6IHUiXHVlMDFhIiwKKyAgICB9LAorICAgICJOVU1QQUQxIjogeworICAg
ICAgICAiY29kZSI6ICJOdW1wYWQxIiwKKyAgICAgICAgImN0cmwiOiBGYWxzZSwKKyAgICAgICAg
ImtleSI6ICIxIiwKKyAgICAgICAgImxvY2F0aW9uIjogMywKKyAgICAgICAgIm1ldGEiOiBGYWxz
ZSwKKyAgICAgICAgInNoaWZ0IjogRmFsc2UsCisgICAgICAgICJ2YWx1ZSI6IHUiXHVlMDFiIiwK
KyAgICB9LAorICAgICJOVU1QQUQyIjogeworICAgICAgICAiY29kZSI6ICJOdW1wYWQyIiwKKyAg
ICAgICAgImN0cmwiOiBGYWxzZSwKKyAgICAgICAgImtleSI6ICIyIiwKKyAgICAgICAgImxvY2F0
aW9uIjogMywKKyAgICAgICAgIm1ldGEiOiBGYWxzZSwKKyAgICAgICAgInNoaWZ0IjogRmFsc2Us
CisgICAgICAgICJ2YWx1ZSI6IHUiXHVlMDFjIiwKKyAgICB9LAorICAgICJOVU1QQUQzIjogewor
ICAgICAgICAiY29kZSI6ICJOdW1wYWQzIiwKKyAgICAgICAgImN0cmwiOiBGYWxzZSwKKyAgICAg
ICAgImtleSI6ICIzIiwKKyAgICAgICAgImxvY2F0aW9uIjogMywKKyAgICAgICAgIm1ldGEiOiBG
YWxzZSwKKyAgICAgICAgInNoaWZ0IjogRmFsc2UsCisgICAgICAgICJ2YWx1ZSI6IHUiXHVlMDFk
IiwKKyAgICB9LAorICAgICJOVU1QQUQ0IjogeworICAgICAgICAiY29kZSI6ICJQYWdlRG93biIs
CisgICAgICAgICJjdHJsIjogRmFsc2UsCisgICAgICAgICJrZXkiOiAiNCIsCisgICAgICAgICJs
b2NhdGlvbiI6IDMsCisgICAgICAgICJtZXRhIjogRmFsc2UsCisgICAgICAgICJzaGlmdCI6IEZh
bHNlLAorICAgICAgICAidmFsdWUiOiB1Ilx1ZTAxZSIsCisgICAgfSwKKyAgICAiTlVNUEFENSI6
IHsKKyAgICAgICAgImNvZGUiOiAiUGFnZVVwIiwKKyAgICAgICAgImN0cmwiOiBGYWxzZSwKKyAg
ICAgICAgImtleSI6ICI1IiwKKyAgICAgICAgImxvY2F0aW9uIjogMywKKyAgICAgICAgIm1ldGEi
OiBGYWxzZSwKKyAgICAgICAgInNoaWZ0IjogRmFsc2UsCisgICAgICAgICJ2YWx1ZSI6IHUiXHVl
MDFmIiwKKyAgICB9LAorICAgICJOVU1QQUQ2IjogeworICAgICAgICAiY29kZSI6ICJOdW1wYWQ2
IiwKKyAgICAgICAgImN0cmwiOiBGYWxzZSwKKyAgICAgICAgImtleSI6ICI2IiwKKyAgICAgICAg
ImxvY2F0aW9uIjogMywKKyAgICAgICAgIm1ldGEiOiBGYWxzZSwKKyAgICAgICAgInNoaWZ0Ijog
RmFsc2UsCisgICAgICAgICJ2YWx1ZSI6IHUiXHVlMDIwIiwKKyAgICB9LAorICAgICJOVU1QQUQ3
IjogeworICAgICAgICAiY29kZSI6ICJOdW1wYWQ3IiwKKyAgICAgICAgImN0cmwiOiBGYWxzZSwK
KyAgICAgICAgImtleSI6ICI3IiwKKyAgICAgICAgImxvY2F0aW9uIjogMywKKyAgICAgICAgIm1l
dGEiOiBGYWxzZSwKKyAgICAgICAgInNoaWZ0IjogRmFsc2UsCisgICAgICAgICJ2YWx1ZSI6IHUi
XHVlMDIxIiwKKyAgICB9LAorICAgICJOVU1QQUQ4IjogeworICAgICAgICAiY29kZSI6ICJOdW1w
YWQ4IiwKKyAgICAgICAgImN0cmwiOiBGYWxzZSwKKyAgICAgICAgImtleSI6ICI4IiwKKyAgICAg
ICAgImxvY2F0aW9uIjogMywKKyAgICAgICAgIm1ldGEiOiBGYWxzZSwKKyAgICAgICAgInNoaWZ0
IjogRmFsc2UsCisgICAgICAgICJ2YWx1ZSI6IHUiXHVlMDIyIiwKKyAgICB9LAorICAgICJOVU1Q
QUQ5IjogeworICAgICAgICAiY29kZSI6ICJOdW1wYWQ5IiwKKyAgICAgICAgImN0cmwiOiBGYWxz
ZSwKKyAgICAgICAgImtleSI6ICI5IiwKKyAgICAgICAgImxvY2F0aW9uIjogMywKKyAgICAgICAg
Im1ldGEiOiBGYWxzZSwKKyAgICAgICAgInNoaWZ0IjogRmFsc2UsCisgICAgICAgICJ2YWx1ZSI6
IHUiXHVlMDIzIiwKKyAgICB9LAorICAgICJQQUdFX0RPV04iOiB7CisgICAgICAgICJjb2RlIjog
IiIsCisgICAgICAgICJjdHJsIjogRmFsc2UsCisgICAgICAgICJrZXkiOiAiUGFnZURvd24iLAor
ICAgICAgICAibG9jYXRpb24iOiAwLAorICAgICAgICAibWV0YSI6IEZhbHNlLAorICAgICAgICAi
c2hpZnQiOiBGYWxzZSwKKyAgICAgICAgInZhbHVlIjogdSJcdWUwMGYiLAorICAgIH0sCisgICAg
IlBBR0VfVVAiOiB7CisgICAgICAgICJjb2RlIjogIiIsCisgICAgICAgICJjdHJsIjogRmFsc2Us
CisgICAgICAgICJrZXkiOiAiUGFnZVVwIiwKKyAgICAgICAgImxvY2F0aW9uIjogMCwKKyAgICAg
ICAgIm1ldGEiOiBGYWxzZSwKKyAgICAgICAgInNoaWZ0IjogRmFsc2UsCisgICAgICAgICJ2YWx1
ZSI6IHUiXHVlMDBlIiwKKyAgICB9LAorICAgICJQQVVTRSI6IHsKKyAgICAgICAgImNvZGUiOiAi
IiwKKyAgICAgICAgImN0cmwiOiBGYWxzZSwKKyAgICAgICAgImtleSI6ICJQYXVzZSIsCisgICAg
ICAgICJsb2NhdGlvbiI6IDAsCisgICAgICAgICJtZXRhIjogRmFsc2UsCisgICAgICAgICJzaGlm
dCI6IEZhbHNlLAorICAgICAgICAidmFsdWUiOiB1Ilx1ZTAwYiIsCisgICAgfSwKKyAgICAiUkVU
VVJOIjogeworICAgICAgICAiY29kZSI6ICJFbnRlciIsCisgICAgICAgICJjdHJsIjogRmFsc2Us
CisgICAgICAgICJrZXkiOiAiRW50ZXIiLAorICAgICAgICAibG9jYXRpb24iOiAwLAorICAgICAg
ICAibWV0YSI6IEZhbHNlLAorICAgICAgICAic2hpZnQiOiBGYWxzZSwKKyAgICAgICAgInZhbHVl
IjogdSJcdWUwMDYiLAorICAgIH0sCisgICAgIlJJR0hUIjogeworICAgICAgICAiY29kZSI6ICJB
cnJvd1JpZ2h0IiwKKyAgICAgICAgImN0cmwiOiBGYWxzZSwKKyAgICAgICAgImtleSI6ICJBcnJv
d1JpZ2h0IiwKKyAgICAgICAgImxvY2F0aW9uIjogMCwKKyAgICAgICAgIm1ldGEiOiBGYWxzZSwK
KyAgICAgICAgInNoaWZ0IjogRmFsc2UsCisgICAgICAgICJ2YWx1ZSI6IHUiXHVlMDE0IiwKKyAg
ICB9LAorICAgICJSX0FMVCI6IHsKKyAgICAgICAgImNvZGUiOiAiQWx0UmlnaHQiLAorICAgICAg
ICAiY3RybCI6IEZhbHNlLAorICAgICAgICAia2V5IjogIkFsdCIsCisgICAgICAgICJsb2NhdGlv
biI6IDIsCisgICAgICAgICJtZXRhIjogRmFsc2UsCisgICAgICAgICJzaGlmdCI6IEZhbHNlLAor
ICAgICAgICAidmFsdWUiOiB1Ilx1ZTA1MiIsCisgICAgfSwKKyAgICAiUl9BUlJPV0RPV04iOiB7
CisgICAgICAgICJjb2RlIjogIk51bXBhZDIiLAorICAgICAgICAiY3RybCI6IEZhbHNlLAorICAg
ICAgICAia2V5IjogIkFycm93RG93biIsCisgICAgICAgICJsb2NhdGlvbiI6IDMsCisgICAgICAg
ICJtZXRhIjogRmFsc2UsCisgICAgICAgICJzaGlmdCI6IEZhbHNlLAorICAgICAgICAidmFsdWUi
OiB1Ilx1ZTA1YiIsCisgICAgfSwKKyAgICAiUl9BUlJPV0xFRlQiOiB7CisgICAgICAgICJjb2Rl
IjogIk51bXBhZDQiLAorICAgICAgICAiY3RybCI6IEZhbHNlLAorICAgICAgICAia2V5IjogIkFy
cm93TGVmdCIsCisgICAgICAgICJsb2NhdGlvbiI6IDMsCisgICAgICAgICJtZXRhIjogRmFsc2Us
CisgICAgICAgICJzaGlmdCI6IEZhbHNlLAorICAgICAgICAidmFsdWUiOiB1Ilx1ZTA1OCIsCisg
ICAgfSwKKyAgICAiUl9BUlJPV1JJR0hUIjogeworICAgICAgICAiY29kZSI6ICJOdW1wYWQ2IiwK
KyAgICAgICAgImN0cmwiOiBGYWxzZSwKKyAgICAgICAgImtleSI6ICJBcnJvd1JpZ2h0IiwKKyAg
ICAgICAgImxvY2F0aW9uIjogMywKKyAgICAgICAgIm1ldGEiOiBGYWxzZSwKKyAgICAgICAgInNo
aWZ0IjogRmFsc2UsCisgICAgICAgICJ2YWx1ZSI6IHUiXHVlMDVhIiwKKyAgICB9LAorICAgICJS
X0FSUk9XVVAiOiB7CisgICAgICAgICJjb2RlIjogIk51bXBhZDgiLAorICAgICAgICAiY3RybCI6
IEZhbHNlLAorICAgICAgICAia2V5IjogIkFycm93VXAiLAorICAgICAgICAibG9jYXRpb24iOiAz
LAorICAgICAgICAibWV0YSI6IEZhbHNlLAorICAgICAgICAic2hpZnQiOiBGYWxzZSwKKyAgICAg
ICAgInZhbHVlIjogdSJcdWUwNTkiLAorICAgIH0sCisgICAgIlJfQ09OVFJPTCI6IHsKKyAgICAg
ICAgImNvZGUiOiAiQ29udHJvbFJpZ2h0IiwKKyAgICAgICAgImN0cmwiOiBUcnVlLAorICAgICAg
ICAia2V5IjogIkNvbnRyb2wiLAorICAgICAgICAibG9jYXRpb24iOiAyLAorICAgICAgICAibWV0
YSI6IEZhbHNlLAorICAgICAgICAic2hpZnQiOiBGYWxzZSwKKyAgICAgICAgInZhbHVlIjogdSJc
dWUwNTEiLAorICAgIH0sCisgICAgIlJfREVMRVRFIjogeworICAgICAgICAiY29kZSI6ICJOdW1w
YWREZWNpbWFsIiwKKyAgICAgICAgImN0cmwiOiBGYWxzZSwKKyAgICAgICAgImtleSI6ICJEZWxl
dGUiLAorICAgICAgICAibG9jYXRpb24iOiAzLAorICAgICAgICAibWV0YSI6IEZhbHNlLAorICAg
ICAgICAic2hpZnQiOiBGYWxzZSwKKyAgICAgICAgInZhbHVlIjogdSJcdWUwNWQiLAorICAgIH0s
CisgICAgIlJfRU5EIjogeworICAgICAgICAiY29kZSI6ICJOdW1wYWQxIiwKKyAgICAgICAgImN0
cmwiOiBGYWxzZSwKKyAgICAgICAgImtleSI6ICJFbmQiLAorICAgICAgICAibG9jYXRpb24iOiAz
LAorICAgICAgICAibWV0YSI6IEZhbHNlLAorICAgICAgICAic2hpZnQiOiBGYWxzZSwKKyAgICAg
ICAgInZhbHVlIjogdSJcdWUwNTYiLAorICAgIH0sCisgICAgIlJfSE9NRSI6IHsKKyAgICAgICAg
ImNvZGUiOiAiTnVtcGFkNyIsCisgICAgICAgICJjdHJsIjogRmFsc2UsCisgICAgICAgICJrZXki
OiAiSG9tZSIsCisgICAgICAgICJsb2NhdGlvbiI6IDMsCisgICAgICAgICJtZXRhIjogRmFsc2Us
CisgICAgICAgICJzaGlmdCI6IEZhbHNlLAorICAgICAgICAidmFsdWUiOiB1Ilx1ZTA1NyIsCisg
ICAgfSwKKyAgICAiUl9JTlNFUlQiOiB7CisgICAgICAgICJjb2RlIjogIk51bXBhZDAiLAorICAg
ICAgICAiY3RybCI6IEZhbHNlLAorICAgICAgICAia2V5IjogIkluc2VydCIsCisgICAgICAgICJs
b2NhdGlvbiI6IDMsCisgICAgICAgICJtZXRhIjogRmFsc2UsCisgICAgICAgICJzaGlmdCI6IEZh
bHNlLAorICAgICAgICAidmFsdWUiOiB1Ilx1ZTA1YyIsCisgICAgfSwKKyAgICAiUl9NRVRBIjog
eworICAgICAgICAiY29kZSI6ICJPU1JpZ2h0IiwKKyAgICAgICAgImN0cmwiOiBGYWxzZSwKKyAg
ICAgICAgImtleSI6ICJNZXRhIiwKKyAgICAgICAgImxvY2F0aW9uIjogMiwKKyAgICAgICAgIm1l
dGEiOiBUcnVlLAorICAgICAgICAic2hpZnQiOiBGYWxzZSwKKyAgICAgICAgInZhbHVlIjogdSJc
dWUwNTMiLAorICAgIH0sCisgICAgIlJfUEFHRURPV04iOiB7CisgICAgICAgICJjb2RlIjogIk51
bXBhZDMiLAorICAgICAgICAiY3RybCI6IEZhbHNlLAorICAgICAgICAia2V5IjogIlBhZ2VEb3du
IiwKKyAgICAgICAgImxvY2F0aW9uIjogMywKKyAgICAgICAgIm1ldGEiOiBGYWxzZSwKKyAgICAg
ICAgInNoaWZ0IjogRmFsc2UsCisgICAgICAgICJ2YWx1ZSI6IHUiXHVlMDU1IiwKKyAgICB9LAor
ICAgICJSX1BBR0VVUCI6IHsKKyAgICAgICAgImNvZGUiOiAiTnVtcGFkOSIsCisgICAgICAgICJj
dHJsIjogRmFsc2UsCisgICAgICAgICJrZXkiOiAiUGFnZVVwIiwKKyAgICAgICAgImxvY2F0aW9u
IjogMywKKyAgICAgICAgIm1ldGEiOiBGYWxzZSwKKyAgICAgICAgInNoaWZ0IjogRmFsc2UsCisg
ICAgICAgICJ2YWx1ZSI6IHUiXHVlMDU0IiwKKyAgICB9LAorICAgICJSX1NISUZUIjogeworICAg
ICAgICAiY29kZSI6ICJTaGlmdFJpZ2h0IiwKKyAgICAgICAgImN0cmwiOiBGYWxzZSwKKyAgICAg
ICAgImtleSI6ICJTaGlmdCIsCisgICAgICAgICJsb2NhdGlvbiI6IDIsCisgICAgICAgICJtZXRh
IjogRmFsc2UsCisgICAgICAgICJzaGlmdCI6IFRydWUsCisgICAgICAgICJ2YWx1ZSI6IHUiXHVl
MDUwIiwKKyAgICB9LAorICAgICJTRU1JQ09MT04iOiB7CisgICAgICAgICJjb2RlIjogIiIsCisg
ICAgICAgICJjdHJsIjogRmFsc2UsCisgICAgICAgICJrZXkiOiAiOyIsCisgICAgICAgICJsb2Nh
dGlvbiI6IDAsCisgICAgICAgICJtZXRhIjogRmFsc2UsCisgICAgICAgICJzaGlmdCI6IEZhbHNl
LAorICAgICAgICAidmFsdWUiOiB1Ilx1ZTAxOCIsCisgICAgfSwKKyAgICAiU0VQQVJBVE9SIjog
eworICAgICAgICAiY29kZSI6ICJOdW1wYWRTdWJ0cmFjdCIsCisgICAgICAgICJjdHJsIjogRmFs
c2UsCisgICAgICAgICJrZXkiOiAiLCIsCisgICAgICAgICJsb2NhdGlvbiI6IDMsCisgICAgICAg
ICJtZXRhIjogRmFsc2UsCisgICAgICAgICJzaGlmdCI6IEZhbHNlLAorICAgICAgICAidmFsdWUi
OiB1Ilx1ZTAyNiIsCisgICAgfSwKKyAgICAiU0hJRlQiOiB7CisgICAgICAgICJjb2RlIjogIlNo
aWZ0TGVmdCIsCisgICAgICAgICJjdHJsIjogRmFsc2UsCisgICAgICAgICJrZXkiOiAiU2hpZnQi
LAorICAgICAgICAibG9jYXRpb24iOiAxLAorICAgICAgICAibWV0YSI6IEZhbHNlLAorICAgICAg
ICAic2hpZnQiOiBUcnVlLAorICAgICAgICAidmFsdWUiOiB1Ilx1ZTAwOCIsCisgICAgfSwKKyAg
ICAiU1BBQ0UiOiB7CisgICAgICAgICJjb2RlIjogIlNwYWNlIiwKKyAgICAgICAgImN0cmwiOiBG
YWxzZSwKKyAgICAgICAgImtleSI6ICIgIiwKKyAgICAgICAgImxvY2F0aW9uIjogMCwKKyAgICAg
ICAgIm1ldGEiOiBGYWxzZSwKKyAgICAgICAgInNoaWZ0IjogRmFsc2UsCisgICAgICAgICJ2YWx1
ZSI6IHUiXHVlMDBkIiwKKyAgICB9LAorICAgICJTVUJUUkFDVCI6IHsKKyAgICAgICAgImNvZGUi
OiAiIiwKKyAgICAgICAgImN0cmwiOiBGYWxzZSwKKyAgICAgICAgImtleSI6ICItIiwKKyAgICAg
ICAgImxvY2F0aW9uIjogMywKKyAgICAgICAgIm1ldGEiOiBGYWxzZSwKKyAgICAgICAgInNoaWZ0
IjogRmFsc2UsCisgICAgICAgICJ2YWx1ZSI6IHUiXHVlMDI3IiwKKyAgICB9LAorICAgICJUQUIi
OiB7CisgICAgICAgICJjb2RlIjogIlRhYiIsCisgICAgICAgICJjdHJsIjogRmFsc2UsCisgICAg
ICAgICJrZXkiOiAiVGFiIiwKKyAgICAgICAgImxvY2F0aW9uIjogMCwKKyAgICAgICAgIm1ldGEi
OiBGYWxzZSwKKyAgICAgICAgInNoaWZ0IjogRmFsc2UsCisgICAgICAgICJ2YWx1ZSI6IHUiXHVl
MDA0IiwKKyAgICB9LAorICAgICJVUCI6IHsKKyAgICAgICAgImNvZGUiOiAiQXJyb3dVcCIsCisg
ICAgICAgICJjdHJsIjogRmFsc2UsCisgICAgICAgICJrZXkiOiAiQXJyb3dVcCIsCisgICAgICAg
ICJsb2NhdGlvbiI6IDAsCisgICAgICAgICJtZXRhIjogRmFsc2UsCisgICAgICAgICJzaGlmdCI6
IEZhbHNlLAorICAgICAgICAidmFsdWUiOiB1Ilx1ZTAxMyIsCisgICAgfSwKKyAgICAiWkVOS0FL
VUhBTktBS1UiOiB7CisgICAgICAgICJjb2RlIjogIiIsCisgICAgICAgICJjdHJsIjogRmFsc2Us
CisgICAgICAgICJrZXkiOiAiWmVua2FrdUhhbmtha3UiLAorICAgICAgICAibG9jYXRpb24iOiAw
LAorICAgICAgICAibWV0YSI6IEZhbHNlLAorICAgICAgICAic2hpZnQiOiBGYWxzZSwKKyAgICAg
ICAgInZhbHVlIjogdSJcdWUwNDAiLAorICAgIH0KK30KZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRl
c3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvYWN0aW9ucy9zdXBwb3J0L3JlZmluZS5w
eSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvYWN0aW9ucy9z
dXBwb3J0L3JlZmluZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u
M2E2ZDYzZTA0Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViZHJpdmVyL3Rlc3RzL2FjdGlvbnMvc3VwcG9ydC9yZWZpbmUucHkKQEAgLTAsMCArMSwz
MyBAQAorZGVmIGdldF9ldmVudHMoc2Vzc2lvbik6CisgICAgIiIiUmV0dXJuIGxpc3Qgb2Yga2V5
IGV2ZW50cyByZWNvcmRlZCBpbiB0aGUgdGVzdF9rZXlzX3BhZ2UgZml4dHVyZS4iIiIKKyAgICBl
dmVudHMgPSBzZXNzaW9uLmV4ZWN1dGVfc2NyaXB0KCJyZXR1cm4gYWxsRXZlbnRzLmV2ZW50czsi
KSBvciBbXQorICAgICMgYGtleWAgdmFsdWVzIGluIGBhbGxFdmVudHNgIG1heSBiZSBlc2NhcGVk
IChzZWUgYGVzY2FwZVN1cnJvZ2F0ZUhhbGZgIGluCisgICAgIyB0ZXN0X2tleXNfd2RzcGVjLmh0
bWwpLCBzbyB0aGlzIGNvbnZlcnRzIHRoZW0gYmFjayBpbnRvIHVuaWNvZGUgbGl0ZXJhbHMuCisg
ICAgZm9yIGUgaW4gZXZlbnRzOgorICAgICAgICAjIGV4YW1wbGU6IHR1cm4gIlUrZDgzZCIgKDYg
Y2hhcnMpIGludG8gdSJcdWQ4M2QiICgxIGNoYXIpCisgICAgICAgIGlmICJrZXkiIGluIGUgYW5k
IGVbImtleSJdLnN0YXJ0c3dpdGgodSJVKyIpOgorICAgICAgICAgICAga2V5ID0gZVsia2V5Il0K
KyAgICAgICAgICAgIGhleF9zdWZmaXggPSBrZXlba2V5LmluZGV4KCIrIikgKyAxOl0KKyAgICAg
ICAgICAgIGVbImtleSJdID0gdW5pY2hyKGludChoZXhfc3VmZml4LCAxNikpCisgICAgcmV0dXJu
IGV2ZW50cworCisKK2RlZiBnZXRfa2V5cyhpbnB1dF9lbCk6CisgICAgIiIiR2V0IHByaW50YWJs
ZSBjaGFyYWN0ZXJzIGVudGVyZWQgaW50byBgaW5wdXRfZWxgLgorCisgICAgOnBhcmFtIGlucHV0
X2VsOiBIVE1MIGlucHV0IGVsZW1lbnQuCisgICAgIiIiCisgICAgcnYgPSBpbnB1dF9lbC5wcm9w
ZXJ0eSgidmFsdWUiKQorICAgIGlmIHJ2IGlzIE5vbmU6CisgICAgICAgIHJldHVybiAiIgorICAg
IGVsc2U6CisgICAgICAgIHJldHVybiBydgorCisKK2RlZiBmaWx0ZXJfZGljdChzb3VyY2UsIGQp
OgorICAgICIiIkZpbHRlciBgc291cmNlYCBkaWN0IHRvIG9ubHkgY29udGFpbiBzYW1lIGtleXMg
YXMgYGRgIGRpY3QuCisKKyAgICA6cGFyYW0gc291cmNlOiBkaWN0aW9uYXJ5IHRvIGZpbHRlci4K
KyAgICA6cGFyYW0gZDogZGljdGlvbmFyeSB3aG9zZSBrZXlzIGRldGVybWluZSB0aGUgZmlsdGVy
aW5nLgorICAgICIiIgorICAgIHJldHVybiB7azogc291cmNlW2tdIGZvciBrIGluIGQua2V5cygp
fQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0
cy9hY3Rpb25zL3N1cHBvcnQvdGVzdF9hY3Rpb25zX3dkc3BlYy5odG1sIGIvV2ViRHJpdmVyVGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9hY3Rpb25zL3N1cHBvcnQvdGVzdF9hY3Rp
b25zX3dkc3BlYy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5i
ZTI3MzIyOWEzYgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWJkcml2ZXIvdGVzdHMvYWN0aW9ucy9zdXBwb3J0L3Rlc3RfYWN0aW9uc193ZHNwZWMuaHRt
bApAQCAtMCwwICsxLDE4MSBAQAorPCFkb2N0eXBlIGh0bWw+Cis8bWV0YSBjaGFyc2V0PXV0Zi04
PgorPGhlYWQ+CisgICAgPHRpdGxlPlRlc3QgQWN0aW9uczwvdGl0bGU+CisgICAgPHN0eWxlPgor
ICAgICAgZGl2IHsgcGFkZGluZzowcHg7IG1hcmdpbjogMHB4OyB9CisgICAgICAjdHJhY2tQb2lu
dGVyIHsgcG9zaXRpb246IGZpeGVkOyB9CisgICAgICAjcmVzdWx0Q29udGFpbmVyIHsgd2lkdGg6
IDYwMHB4OyBoZWlnaHQ6IDYwcHg7IH0KKyAgICAgIC5hcmVhIHsgd2lkdGg6IDEwMHB4OyBoZWln
aHQ6IDUwcHg7IGJhY2tncm91bmQtY29sb3I6ICNjY2M7IH0KKyAgICAgIC5ibG9jayB7IHdpZHRo
OiA1cHg7IGhlaWdodDogNXB4OyBib3JkZXI6IHNvbGlkIDFweCByZWQ7IH0KKyAgICAgICNkcmFn
QXJlYSB7IHBvc2l0aW9uOiByZWxhdGl2ZTsgfQorICAgICAgI2RyYWdUYXJnZXQgeyBwb3NpdGlv
bjogYWJzb2x1dGU7IHRvcDoyMnB4OyBsZWZ0OjQ3cHg7fQorICAgIDwvc3R5bGU+CisgICAgPHNj
cmlwdD4KKyAgICAgICAgInVzZSBzdHJpY3QiOworICAgICAgICB2YXIgZWxzID0ge307CisgICAg
ICAgIHZhciBhbGxFdmVudHMgPSB7ZXZlbnRzOiBbXX07CisgICAgICAgIGZ1bmN0aW9uIGRpc3Bs
YXlNZXNzYWdlKG1lc3NhZ2UpIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJldmVudHMiKS5pbm5lckhUTUwgPSAiPHA+IiArIG1lc3NhZ2UgKyAiPC9wPiI7CisgICAgICAg
IH0KKworICAgICAgICBmdW5jdGlvbiBhcHBlbmRNZXNzYWdlKG1lc3NhZ2UpIHsKKyAgICAgICAg
ICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJldmVudHMiKS5pbm5lckhUTUwgKz0gIjxwPiIg
KyBtZXNzYWdlICsgIjwvcD4iOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAq
IEVzY2FwZSB8a2V5fCBpZiBpdCdzIGluIGEgc3Vycm9nYXRlLWhhbGYgY2hhcmFjdGVyIHJhbmdl
LgorICAgICAgICAgKgorICAgICAgICAgKiBFeGFtcGxlOiBnaXZlbiAiXHVkODNkIiByZXR1cm4g
IlUrZDgzZCIuCisgICAgICAgICAqCisgICAgICAgICAqIE90aGVyd2lzZSBKU09OLnN0cmluZ2lm
eSB3aWxsIGNvbnZlcnQgaXQgdG8gVStGRkZEIChSRVBMQUNFTUVOVCBDSEFSQUNURVIpCisgICAg
ICAgICAqIHdoZW4gcmV0dXJuaW5nIGEgdmFsdWUgZnJvbSBleGVjdXRlU2NyaXB0LCBmb3IgZXhh
bXBsZS4KKyAgICAgICAgICovCisgICAgICAgIGZ1bmN0aW9uIGVzY2FwZVN1cnJvZ2F0ZUhhbGYo
a2V5KSB7CisgICAgICAgICAgaWYgKHR5cGVvZiBrZXkgIT09ICJ1bmRlZmluZWQiICYmIGtleS5s
ZW5ndGggPT09IDEpIHsKKyAgICAgICAgICAgIHZhciBjaGFyQ29kZSA9IGtleS5jaGFyQ29kZUF0
KDApOworICAgICAgICAgICAgdmFyIGhpZ2hTdXJyb2dhdGUgPSBjaGFyQ29kZSA+PSAweEQ4MDAg
JiYgY2hhckNvZGUgPD0gMHhEQkZGOworICAgICAgICAgICAgdmFyIHN1cnJvZ2F0ZSA9IGhpZ2hT
dXJyb2dhdGUgfHwgKGNoYXJDb2RlID49IDB4REMwMCAmJiBjaGFyQ29kZSA8PSAweERGRkYpOwor
ICAgICAgICAgICAgaWYgKHN1cnJvZ2F0ZSkgeworICAgICAgICAgICAgICBrZXkgPSAiVSsiICsg
Y2hhckNvZGUudG9TdHJpbmcoMTYpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAg
ICAgICByZXR1cm4ga2V5OworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gcmVjb3JkS2V5
Ym9hcmRFdmVudChldmVudCkgeworICAgICAgICAgIHZhciBrZXkgPSBlc2NhcGVTdXJyb2dhdGVI
YWxmKGV2ZW50LmtleSk7CisgICAgICAgICAgYWxsRXZlbnRzLmV2ZW50cy5wdXNoKHsKKyAgICAg
ICAgICAgICJjb2RlIjogZXZlbnQuY29kZSwKKyAgICAgICAgICAgICJrZXkiOiBrZXksCisgICAg
ICAgICAgICAid2hpY2giOiBldmVudC53aGljaCwKKyAgICAgICAgICAgICJsb2NhdGlvbiI6IGV2
ZW50LmxvY2F0aW9uLAorICAgICAgICAgICAgImN0cmwiOiBldmVudC5jdHJsS2V5LAorICAgICAg
ICAgICAgIm1ldGEiOiBldmVudC5tZXRhS2V5LAorICAgICAgICAgICAgInNoaWZ0IjogZXZlbnQu
c2hpZnRLZXksCisgICAgICAgICAgICAicmVwZWF0IjogZXZlbnQucmVwZWF0LAorICAgICAgICAg
ICAgInR5cGUiOiBldmVudC50eXBlCisgICAgICAgICAgfSk7CisgICAgICAgICAgYXBwZW5kTWVz
c2FnZShgJHtldmVudC50eXBlfShgICsKKyAgICAgICAgICAgICAgYGNvZGU6ICR7ZXZlbnQuY29k
ZX0sIGAgKworICAgICAgICAgICAgICBga2V5OiAke2tleX0sIGAgKworICAgICAgICAgICAgICBg
d2hpY2g6ICR7ZXZlbnQud2hpY2h9LCBgICsKKyAgICAgICAgICAgICAgYGtleUNvZGU6ICR7ZXZl
bnQua2V5Q29kZX0pYCk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiByZWNvcmRQb2lu
dGVyRXZlbnQoZXZlbnQpIHsKKyAgICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gImNvbnRleHRt
ZW51IikgeworICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgICB9
CisgICAgICAgICAgYWxsRXZlbnRzLmV2ZW50cy5wdXNoKHsKKyAgICAgICAgICAgICJ0eXBlIjog
ZXZlbnQudHlwZSwKKyAgICAgICAgICAgICJidXR0b24iOiBldmVudC5idXR0b24sCisgICAgICAg
ICAgICAiYnV0dG9ucyI6IGV2ZW50LmJ1dHRvbnMsCisgICAgICAgICAgICAicGFnZVgiOiBldmVu
dC5wYWdlWCwKKyAgICAgICAgICAgICJwYWdlWSI6IGV2ZW50LnBhZ2VZLAorICAgICAgICAgICAg
ImN0cmxLZXkiOiBldmVudC5jdHJsS2V5LAorICAgICAgICAgICAgIm1ldGFLZXkiOiBldmVudC5t
ZXRhS2V5LAorICAgICAgICAgICAgImFsdEtleSI6IGV2ZW50LmFsdEtleSwKKyAgICAgICAgICAg
ICJzaGlmdEtleSI6IGV2ZW50LnNoaWZ0S2V5LAorICAgICAgICAgICAgInRhcmdldCI6IGV2ZW50
LnRhcmdldC5pZAorICAgICAgICAgIH0pOworICAgICAgICAgIGFwcGVuZE1lc3NhZ2UoYCR7ZXZl
bnQudHlwZX0oYCArCisgICAgICAgICAgICAgIGBidXR0b246ICR7ZXZlbnQuYnV0dG9ufSwgYCAr
CisgICAgICAgICAgICAgIGBwYWdlWDogJHtldmVudC5wYWdlWH0sIGAgKworICAgICAgICAgICAg
ICBgcGFnZVk6ICR7ZXZlbnQucGFnZVl9LCBgICsKKyAgICAgICAgICAgICAgYGJ1dHRvbjogJHtl
dmVudC5idXR0b259LCBgICsKKyAgICAgICAgICAgICAgYGJ1dHRvbnM6ICR7ZXZlbnQuYnV0dG9u
c30sIGAgKworICAgICAgICAgICAgICBgY3RybEtleTogJHtldmVudC5jdHJsS2V5fSwgYCArCisg
ICAgICAgICAgICAgIGBhbHRLZXk6ICR7ZXZlbnQuYWx0S2V5fSwgYCArCisgICAgICAgICAgICAg
IGBtZXRhS2V5OiAke2V2ZW50Lm1ldGFLZXl9LCBgICsKKyAgICAgICAgICAgICAgYHNoaWZ0S2V5
OiAke2V2ZW50LnNoaWZ0S2V5fSwgYCArCisgICAgICAgICAgICAgIGB0YXJnZXQgaWQ6ICR7ZXZl
bnQudGFyZ2V0LmlkfSlgKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHJlY29yZEZp
cnN0UG9pbnRlck1vdmUoZXZlbnQpIHsKKyAgICAgICAgICByZWNvcmRQb2ludGVyRXZlbnQoZXZl
bnQpOworICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCBy
ZWNvcmRGaXJzdFBvaW50ZXJNb3ZlKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHJl
c2V0RXZlbnRzKCkgeworICAgICAgICAgICAgYWxsRXZlbnRzLmV2ZW50cy5sZW5ndGggPSAwOwor
ICAgICAgICAgICAgZGlzcGxheU1lc3NhZ2UoIiIpOworICAgICAgICB9CisKKyAgICAgICAgZnVu
Y3Rpb24gZHJvcChtb3ZlSGFuZGxlcikgeworICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoZXZl
bnQpIHsKKyAgICAgICAgICAgIGVscy5kcmFnQXJlYS5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3Vz
ZW1vdmUiLCBtb3ZlSGFuZGxlcik7CisgICAgICAgICAgICBlbHMuZHJhZ1RhcmdldC5zdHlsZS5i
YWNrZ3JvdW5kQ29sb3IgPSAieWVsbG93IjsKKyAgICAgICAgICAgIGVscy5kcmFnVGFyZ2V0LmFk
ZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIGdyYWIpOworICAgICAgICAgICAgcmVjb3JkUG9p
bnRlckV2ZW50KGV2ZW50KTsKKyAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgZnVu
Y3Rpb24gbW92ZShlbCwgb2Zmc2V0WCwgb2Zmc2V0WSwgdGltZW91dCkgeworICAgICAgICAgIHJl
dHVybiAoZXZlbnQpID0+IHsKKyAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geworICAgICAg
ICAgICAgICBlbC5zdHlsZS50b3AgPSBldmVudC5jbGllbnRZICsgb2Zmc2V0WSArICJweCI7Cisg
ICAgICAgICAgICAgIGVsLnN0eWxlLmxlZnQgPSBldmVudC5jbGllbnRYICsgb2Zmc2V0WCArICJw
eCI7CisgICAgICAgICAgICB9LCB0aW1lb3V0KTsKKyAgICAgICAgICB9OworICAgICAgICB9CisK
KyAgICAgICAgZnVuY3Rpb24gZ3JhYihldmVudCkgeworICAgICAgICAgIGV2ZW50LnRhcmdldC5z
dHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAicmVkIjsKKyAgICAgICAgICBsZXQgYm94UmVjdCA9IGV2
ZW50LnRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKyAgICAgICAgICBsZXQgYXJlYVJl
Y3QgPSBldmVudC50YXJnZXQucGFyZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsK
KyAgICAgICAgICBsZXQgbW92ZUhhbmRsZXIgPSBtb3ZlKAorICAgICAgICAgICAgICBldmVudC50
YXJnZXQsCisgICAgICAgICAgICAgIC8vIGNvb3JkaW5hdGVzIG9mIGRyYWdUYXJnZXQgbXVzdCBi
ZSByZWxhdGl2ZSB0byBkcmFnQXJlYSBzdWNoIHRoYXQKKyAgICAgICAgICAgICAgLy8gZHJhZ1Rh
cmdldCByZW1haW5zIHVuZGVyIHRoZSBwb2ludGVyCisgICAgICAgICAgICAgIC0oYXJlYVJlY3Qu
bGVmdCArIChldmVudC5jbGllbnRYIC0gYm94UmVjdC5sZWZ0KSksCisgICAgICAgICAgICAgIC0o
YXJlYVJlY3QudG9wICsgKGV2ZW50LmNsaWVudFkgLSBib3hSZWN0LnRvcCkpLAorICAgICAgICAg
ICAgICAyMCk7CisgICAgICAgICAgZWxzLmRyYWdBcmVhLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNl
bW92ZSIsIG1vdmVIYW5kbGVyKTsKKyAgICAgICAgICBlbHMuZHJhZ0FyZWEuYWRkRXZlbnRMaXN0
ZW5lcigibW91c2V1cCIsIGRyb3AobW92ZUhhbmRsZXIpLCB7b25jZTogdHJ1ZX0pOworICAgICAg
ICB9CisKKyAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRl
ZCIsICgpID0+IHsKKyAgICAgICAgICB2YXIga2V5UmVwb3J0ZXIgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgia2V5cyIpOworICAgICAgICAgIFsia2V5dXAiLCAia2V5cHJlc3MiLCAia2V5ZG93
biJdLmZvckVhY2goKGUpID0+IHsKKyAgICAgICAgICAgIGtleVJlcG9ydGVyLmFkZEV2ZW50TGlz
dGVuZXIoZSwgcmVjb3JkS2V5Ym9hcmRFdmVudCk7CisgICAgICAgICAgfSk7CisgICAgICAgICAg
dmFyIG91dGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm91dGVyIik7CisgICAgICAgICAg
WyJjbGljayIsICJkYmxjbGljayIsICJtb3VzZWRvd24iLAorICAgICAgICAgICAgICAibW91c2V1
cCIsICJjb250ZXh0bWVudSJdLmZvckVhY2goKGUpID0+IHsKKyAgICAgICAgICAgIG91dGVyLmFk
ZEV2ZW50TGlzdGVuZXIoZSwgcmVjb3JkUG9pbnRlckV2ZW50KTsKKyAgICAgICAgICB9KTsKKyAg
ICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgcmVjb3JkUG9pbnRl
ckV2ZW50LCB7b25jZTogdHJ1ZX0pOworICAgICAgICAgIC8vdmlzdWFsIGN1ZSBmb3IgbW91c2Vt
b3ZlCisgICAgICAgICAgdmFyIHBvaW50ZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidHJh
Y2tQb2ludGVyIik7CisgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92
ZSIsIG1vdmUocG9pbnRlciwgMTUsIDE1LCAzMCkpOworICAgICAgICAgIC8vIGRyYWcgYW5kIGRy
b3AKKyAgICAgICAgICBlbHMuZHJhZ0FyZWEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZHJh
Z0FyZWEiKTsKKyAgICAgICAgICBlbHMuZHJhZ1RhcmdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJkcmFnVGFyZ2V0Iik7CisgICAgICAgICAgZWxzLmRyYWdUYXJnZXQuYWRkRXZlbnRMaXN0
ZW5lcigibW91c2Vkb3duIiwgZ3JhYiwge29uY2U6IHRydWV9KTsKKyAgICAgICAgfSk7CisgICAg
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKyAgPGRpdiBpZD0idHJhY2tQb2ludGVyIiBjbGFz
cz0iYmxvY2siPjwvZGl2PgorICA8ZGl2PgorICAgIDxoMj5LZXlSZXBvcnRlcjwvaDI+CisgICAg
PGlucHV0IHR5cGU9InRleHQiIGlkPSJrZXlzIiBzaXplPSI4MCI+CisgIDwvZGl2PgorICA8ZGl2
PgorICAgIDxoMj5DbGlja1JlcG9ydGVyPC9oMj4KKyAgICA8ZGl2IGlkPSJvdXRlciIgY2xhc3M9
ImFyZWEiPgorICAgIDwvZGl2PgorICA8L2Rpdj4KKyAgPGRpdj4KKyAgICA8aDI+RHJhZ1JlcG9y
dGVyPC9oMj4KKyAgICA8ZGl2IGlkPSJkcmFnQXJlYSIgY2xhc3M9ImFyZWEiPgorICAgICAgPGRp
diBpZD0iZHJhZ1RhcmdldCIgY2xhc3M9ImJsb2NrIj48L2Rpdj4KKyAgICA8L2Rpdj4KKyAgPC9k
aXY+CisgIDxkaXYgaWQ9InJlc3VsdENvbnRhaW5lciI+CisgICAgPGgyPkV2ZW50czwvaDI+Cisg
ICAgPGRpdiBpZD0iZXZlbnRzIj48L2Rpdj4KKyAgPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CmRp
ZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL2Nv
bmZ0ZXN0LnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9j
b25mdGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZTE0OTFh
NjgwMjYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
ZHJpdmVyL3Rlc3RzL2NvbmZ0ZXN0LnB5CkBAIC0wLDAgKzEsMTQgQEAKK2ltcG9ydCBweXRlc3QK
K2Zyb20gdGVzdHMuc3VwcG9ydC5maXh0dXJlcyBpbXBvcnQgKAorICAgIGNvbmZpZ3VyYXRpb24s
IGNyZWF0ZV9kaWFsb2csIGNyZWF0ZV9mcmFtZSwgY3JlYXRlX3dpbmRvdywgaHR0cCwKKyAgICBu
ZXdfc2Vzc2lvbiwgc2VydmVyX2NvbmZpZywgc2Vzc2lvbiwgdXJsKQorCitweXRlc3QuZml4dHVy
ZShzY29wZT0ic2Vzc2lvbiIpKGNvbmZpZ3VyYXRpb24pCitweXRlc3QuZml4dHVyZSgpKGNyZWF0
ZV9kaWFsb2cpCitweXRlc3QuZml4dHVyZSgpKGNyZWF0ZV9mcmFtZSkKK3B5dGVzdC5maXh0dXJl
KCkoY3JlYXRlX3dpbmRvdykKK3B5dGVzdC5maXh0dXJlKCkoaHR0cCkKK3B5dGVzdC5maXh0dXJl
KHNjb3BlPSJmdW5jdGlvbiIpKG5ld19zZXNzaW9uKQorcHl0ZXN0LmZpeHR1cmUoKShzZXJ2ZXJf
Y29uZmlnKQorcHl0ZXN0LmZpeHR1cmUoc2NvcGU9ImZ1bmN0aW9uIikoc2Vzc2lvbikKK3B5dGVz
dC5maXh0dXJlKCkodXJsKQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYmRyaXZlci90ZXN0cy9jb250ZXh0cy9tYXhpbWl6ZV93aW5kb3cucHkgYi9XZWJEcml2ZXJU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL2NvbnRleHRzL21heGltaXplX3dpbmRv
dy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYTQ3NjMwYjFhZDMK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVy
L3Rlc3RzL2NvbnRleHRzL21heGltaXplX3dpbmRvdy5weQpAQCAtMCwwICsxLDEwMiBAQAorZnJv
bSB0ZXN0cy5zdXBwb3J0LmlubGluZSBpbXBvcnQgaW5saW5lCitmcm9tIHRlc3RzLnN1cHBvcnQu
YXNzZXJ0cyBpbXBvcnQgYXNzZXJ0X2Vycm9yLCBhc3NlcnRfc3VjY2VzcworCisKK2FsZXJ0X2Rv
YyA9IGlubGluZSgiPHNjcmlwdD53aW5kb3cuYWxlcnQoKTwvc2NyaXB0PiIpCisKKworZGVmIG1h
eGltaXplKHNlc3Npb24pOgorICAgIHJldHVybiBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJQT1NU
IiwgInNlc3Npb24vJXMvd2luZG93L21heGltaXplIiAlIHNlc3Npb24uc2Vzc2lvbl9pZCkKKwor
CisjIDEwLjcuMyBNYXhpbWl6ZSBXaW5kb3cKKworCitkZWYgdGVzdF9ub19icm93c2luZ19jb250
ZXh0KHNlc3Npb24sIGNyZWF0ZV93aW5kb3cpOgorICAgICMgc3RlcCAxCisgICAgc2Vzc2lvbi53
aW5kb3dfaGFuZGxlID0gY3JlYXRlX3dpbmRvdygpCisgICAgc2Vzc2lvbi5jbG9zZSgpCisgICAg
cmVzcG9uc2UgPSBtYXhpbWl6ZShzZXNzaW9uKQorICAgIGFzc2VydF9lcnJvcihyZXNwb25zZSwg
Im5vIHN1Y2ggd2luZG93IikKKworCitkZWYgdGVzdF9oYW5kbGVfdXNlcl9wcm9tcHQoc2Vzc2lv
bik6CisgICAgIyBzdGVwIDIKKyAgICBzZXNzaW9uLnVybCA9IGFsZXJ0X2RvYworICAgIHJlc3Bv
bnNlID0gbWF4aW1pemUoc2Vzc2lvbikKKyAgICBhc3NlcnRfZXJyb3IocmVzcG9uc2UsICJ1bmV4
cGVjdGVkIGFsZXJ0IG9wZW4iKQorCisKK2RlZiB0ZXN0X21heGltaXplKHNlc3Npb24pOgorICAg
IGJlZm9yZV9zaXplID0gc2Vzc2lvbi53aW5kb3cuc2l6ZQorICAgIGFzc2VydCBzZXNzaW9uLndp
bmRvdy5zdGF0ZSA9PSAibm9ybWFsIgorCisgICAgIyBzdGVwIDQKKyAgICByZXNwb25zZSA9IG1h
eGltaXplKHNlc3Npb24pCisgICAgYXNzZXJ0X3N1Y2Nlc3MocmVzcG9uc2UpCisKKyAgICBhc3Nl
cnQgYmVmb3JlX3NpemUgIT0gc2Vzc2lvbi53aW5kb3cuc2l6ZQorICAgIGFzc2VydCBzZXNzaW9u
LndpbmRvdy5zdGF0ZSA9PSAibWF4aW1pemVkIgorCisKK2RlZiB0ZXN0X3BheWxvYWQoc2Vzc2lv
bik6CisgICAgYmVmb3JlX3NpemUgPSBzZXNzaW9uLndpbmRvdy5zaXplCisgICAgYXNzZXJ0IHNl
c3Npb24ud2luZG93LnN0YXRlID09ICJub3JtYWwiCisKKyAgICByZXNwb25zZSA9IG1heGltaXpl
KHNlc3Npb24pCisKKyAgICAjIHN0ZXAgNQorICAgIGFzc2VydCByZXNwb25zZS5zdGF0dXMgPT0g
MjAwCisgICAgYXNzZXJ0IGlzaW5zdGFuY2UocmVzcG9uc2UuYm9keVsidmFsdWUiXSwgZGljdCkK
KworICAgIHZhbHVlID0gcmVzcG9uc2UuYm9keVsidmFsdWUiXQorICAgIGFzc2VydCAid2lkdGgi
IGluIHZhbHVlCisgICAgYXNzZXJ0ICJoZWlnaHQiIGluIHZhbHVlCisgICAgYXNzZXJ0ICJ4IiBp
biB2YWx1ZQorICAgIGFzc2VydCAieSIgaW4gdmFsdWUKKyAgICBhc3NlcnQgInN0YXRlIiBpbiB2
YWx1ZQorICAgIGFzc2VydCBpc2luc3RhbmNlKHZhbHVlWyJ3aWR0aCJdLCAoaW50LCBmbG9hdCkp
CisgICAgYXNzZXJ0IGlzaW5zdGFuY2UodmFsdWVbImhlaWdodCJdLCAoaW50LCBmbG9hdCkpCisg
ICAgYXNzZXJ0IGlzaW5zdGFuY2UodmFsdWVbIngiXSwgKGludCwgZmxvYXQpKQorICAgIGFzc2Vy
dCBpc2luc3RhbmNlKHZhbHVlWyJ5Il0sIChpbnQsIGZsb2F0KSkKKyAgICBhc3NlcnQgaXNpbnN0
YW5jZSh2YWx1ZVsic3RhdGUiXSwgYmFzZXN0cmluZykKKworICAgIGFzc2VydCBiZWZvcmVfc2l6
ZSAhPSBzZXNzaW9uLndpbmRvdy5zaXplCisgICAgYXNzZXJ0IHNlc3Npb24ud2luZG93LnN0YXRl
ID09ICJtYXhpbWl6ZWQiCisKKworZGVmIHRlc3RfbWF4aW1pemVfdHdpY2VfaXNfaWRlbXBvdGVu
dChzZXNzaW9uKToKKyAgICBhc3NlcnQgc2Vzc2lvbi53aW5kb3cuc3RhdGUgPT0gIm5vcm1hbCIK
KworICAgIGZpcnN0X3Jlc3BvbnNlID0gbWF4aW1pemUoc2Vzc2lvbikKKyAgICBhc3NlcnRfc3Vj
Y2VzcyhmaXJzdF9yZXNwb25zZSkKKyAgICBhc3NlcnQgc2Vzc2lvbi53aW5kb3cuc3RhdGUgPT0g
Im1heGltaXplZCIKKworICAgIHNlY29uZF9yZXNwb25zZSA9IG1heGltaXplKHNlc3Npb24pCisg
ICAgYXNzZXJ0X3N1Y2Nlc3Moc2Vjb25kX3Jlc3BvbnNlKQorICAgIGFzc2VydCBzZXNzaW9uLndp
bmRvdy5zdGF0ZSA9PSAibWF4aW1pemVkIgorCisKK2RlZiB0ZXN0X21heGltaXplX3doZW5fcmVz
aXplZF90b19tYXhfc2l6ZShzZXNzaW9uKToKKyAgICAjIERldGVybWluZSB0aGUgbGFyZ2VzdCBh
dmFpbGFibGUgd2luZG93IHNpemUgYnkgZmlyc3QgbWF4aW1pc2luZworICAgICMgdGhlIHdpbmRv
dyBhbmQgZ2V0dGluZyB0aGUgd2luZG93IHJlY3QgZGltZW5zaW9ucy4KKyAgICAjCisgICAgIyBU
aGVuIHJlc2l6ZSB0aGUgd2luZG93IHRvIHRoZSBtYXhpbXVtIGF2YWlsYWJsZSBzaXplLgorICAg
IHNlc3Npb24uZW5kKCkKKyAgICBhc3NlcnQgc2Vzc2lvbi53aW5kb3cuc3RhdGUgPT0gIm5vcm1h
bCIKKyAgICBhdmFpbGFibGUgPSBzZXNzaW9uLndpbmRvdy5tYXhpbWl6ZSgpCisgICAgYXNzZXJ0
IHNlc3Npb24ud2luZG93LnN0YXRlID09ICJtYXhpbWl6ZWQiCisgICAgc2Vzc2lvbi5lbmQoKQor
CisgICAgc2Vzc2lvbi53aW5kb3cuc2l6ZSA9IChpbnQoYXZhaWxhYmxlWyJ3aWR0aCJdKSwgaW50
KGF2YWlsYWJsZVsiaGVpZ2h0Il0pKQorCisgICAgIyBJbiBjZXJ0YWluIHdpbmRvdyBtYW5hZ2Vy
cyBhIHdpbmRvdyBleHRlbmRpbmcgdG8gdGhlIGZ1bGwgYXZhaWxhYmxlCisgICAgIyBkaW1lbnNp
b25zIG9mIHRoZSBzY3JlZW4gbWF5IG5vdCBpbXBseSB0aGF0IHRoZSB3aW5kb3cgaXMgbWF4aW1p
c2VkLAorICAgICMgc2luY2UgdGhpcyBpcyBvZnRlbiBhIHNwZWNpYWwgc3RhdGUuICBJZiBhIHJl
bW90ZSBlbmQgZXhwZWN0cyBhIERPTQorICAgICMgcmVzaXplIGV2ZW50LCB0aGlzIG1heSBub3Qg
ZmlyZSBpZiB0aGUgd2luZG93IGhhcyBhbHJlYWR5IHJlYWNoZWQKKyAgICAjIGl0cyBleHBlY3Rl
ZCBkaW1lbnNpb25zLgorICAgIGFzc2VydCBzZXNzaW9uLndpbmRvdy5zdGF0ZSA9PSAibm9ybWFs
IgorICAgIGJlZm9yZSA9IHNlc3Npb24ud2luZG93LnNpemUKKyAgICBzZXNzaW9uLndpbmRvdy5t
YXhpbWl6ZSgpCisgICAgYXNzZXJ0IHNlc3Npb24ud2luZG93LnNpemUgPT0gYmVmb3JlCisgICAg
YXNzZXJ0IHNlc3Npb24ud2luZG93LnN0YXRlID09ICJtYXhpbWl6ZWQiCmRpZmYgLS1naXQgYS9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL2NvbnRleHRzL3Jlc2l6
aW5nX2FuZF9wb3NpdGlvbmluZy5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJk
cml2ZXIvdGVzdHMvY29udGV4dHMvcmVzaXppbmdfYW5kX3Bvc2l0aW9uaW5nLnB5Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42NjMzMWZhYTIyYgotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvY29udGV4
dHMvcmVzaXppbmdfYW5kX3Bvc2l0aW9uaW5nLnB5CkBAIC0wLDAgKzEsNjEgQEAKK2ltcG9ydCBq
c29uCitpbXBvcnQgcHl0ZXN0CitpbXBvcnQgd2ViZHJpdmVyCisKKworZGVmIHdpbmRvd19zaXpl
X3N1cHBvcnRlZChzZXNzaW9uKToKKyAgICB0cnk6CisgICAgICAgIHNlc3Npb24ud2luZG93LnNp
emUgPSAoImEiLCAiYiIpCisgICAgZXhjZXB0IHdlYmRyaXZlci5VbnN1cHBvcnRlZE9wZXJhdGlv
bkV4Y2VwdGlvbjoKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgZXhjZXB0IHdlYmRyaXZlci5J
bnZhbGlkQXJndW1lbnRFeGNlcHRpb246CisgICAgICAgIHJldHVybiBUcnVlCisKK2RlZiB3aW5k
b3dfcG9zaXRpb25fc3VwcG9ydGVkKHNlc3Npb24pOgorICAgIHRyeToKKyAgICAgICAgc2Vzc2lv
bi53aW5kb3cucG9zaXRpb24gPSAoImEiLCAiYiIpCisgICAgZXhjZXB0IHdlYmRyaXZlci5VbnN1
cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbjoKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgZXhj
ZXB0IHdlYmRyaXZlci5JbnZhbGlkQXJndW1lbnRFeGNlcHRpb246CisgICAgICAgIHJldHVybiBU
cnVlCisKKworZGVmIHRlc3Rfd2luZG93X3Jlc2l6ZShzZXNzaW9uKToKKyAgICBpZiBub3Qgd2lu
ZG93X3NpemVfc3VwcG9ydGVkKHNlc3Npb24pOgorICAgICAgICBweXRlc3Quc2tpcCgpCisKKyAg
ICAjIHNldHRpbmcgdGhlIHdpbmRvdyBzaXplIGJ5IHdlYmRyaXZlciBpcyBzeW5jaHJvbm91cwor
ICAgICMgc28gd2Ugc2hvdWxkIHNlZSB0aGUgcmVzdWx0cyBpbW1lZGlhdGVseQorCisgICAgc2Vz
c2lvbi53aW5kb3cuc2l6ZSA9ICg0MDAsIDUwMCkKKyAgICBhc3NlcnQgc2Vzc2lvbi53aW5kb3cu
c2l6ZSA9PSAoNDAwLCA1MDApCisKKyAgICBzZXNzaW9uLndpbmRvdy5zaXplID0gKDUwMCwgNjAw
KQorICAgIGFzc2VydCBzZXNzaW9uLndpbmRvdy5zaXplID09ICg1MDAsIDYwMCkKKworCisiIiIK
K1RPRE8oYXRvKToKKworICAgIERpc2FibGUgdGVzdCBiZWNhdXNlIHRoZSB3aGlsZSBzdGF0ZW1l
bnRzIGFyZSB3cm9uZy4KKyAgICBUbyBmaXggdGhpcyBwcm9wZXJseSB3ZSBuZWVkIHRvIHdyaXRl
IGFuIGV4cGxpY2l0IHdhaXQgdXRpbGl0eS4KKworZGVmIHRlc3Rfd2luZG93X3Jlc2l6ZV9ieV9z
Y3JpcHQoc2Vzc2lvbik6CisgICAgIyBzZXR0aW5nIHRoZSB3aW5kb3cgc2l6ZSBieSBKUyBpcyBh
c3luY2hyb25vdXMKKyAgICAjIHNvIHdlIHBvbGwgd2FpdGluZyBmb3IgdGhlIHJlc3VsdHMKKwor
ICAgIHNpemUwID0gc2Vzc2lvbi53aW5kb3cuc2l6ZQorCisgICAgc2Vzc2lvbi5leGVjdXRlX3Nj
cmlwdCgid2luZG93LnJlc2l6ZVRvKDcwMCwgODAwKSIpCisgICAgc2l6ZTEgPSBzZXNzaW9uLndp
bmRvdy5zaXplCisgICAgd2hpbGUgc2l6ZTAgPT0gc2l6ZTE6CisgICAgICAgIHNpemUxID0gc2Vz
c2lvbi53aW5kb3cuc2l6ZQorICAgIGFzc2VydCBzaXplMSA9PSAoNzAwLCA4MDApCisKKyAgICBz
ZXNzaW9uLmV4ZWN1dGVfc2NyaXB0KCJ3aW5kb3cucmVzaXplVG8oODAwLCA5MDApIikKKyAgICBz
aXplMiA9IHNlc3Npb24ud2luZG93LnNpemUKKyAgICB3aGlsZSBzaXplMSA9PSBzaXplMjoKKyAg
ICAgICAgc2l6ZTIgPSBzZXNzaW9uLndpbmRvdy5zaXplCisgICAgICAgIGFzc2VydCBzaXplMiA9
PSAoODAwLCA5MDApCisgICAgYXNzZXJ0IHNpemUyID09IHsid2lkdGgiOiAyMDAsICJoZWlnaHQi
OiAxMDB9CisiIiIKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJk
cml2ZXIvdGVzdHMvY29va2llcy9jb29raWVzLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYmRyaXZlci90ZXN0cy9jb29raWVzL2Nvb2tpZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQyYThjNDQ4MGY5Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vi
RHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9jb29raWVzL2Nvb2tpZXMu
cHkKQEAgLTAsMCArMSwyOCBAQAorZGVmIHRlc3RfZ2V0X25hbWVkX2Nvb2tpZShzZXNzaW9uLCB1
cmwpOgorICAgIHNlc3Npb24udXJsID0gdXJsKCIvY29tbW9uL2JsYW5rLmh0bWwiKQorICAgIHNl
c3Npb24uZXhlY3V0ZV9zY3JpcHQoImRvY3VtZW50LmNvb2tpZSA9ICdmb289YmFyJyIpCisKKyAg
ICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLCAic2Vzc2lvbi8lcy9jb29r
aWUvZm9vIiAlIHNlc3Npb24uc2Vzc2lvbl9pZCkKKyAgICBhc3NlcnQgcmVzdWx0LnN0YXR1cyA9
PSAyMDAKKyAgICBhc3NlcnQgaXNpbnN0YW5jZShyZXN1bHQuYm9keVsidmFsdWUiXSwgZGljdCkK
KworICAgICMgdGFibGUgZm9yIGNvb2tpZSBjb252ZXJzaW9uCisgICAgIyBodHRwczovL3czYy5n
aXRodWIuaW8vd2ViZHJpdmVyL3dlYmRyaXZlci1zcGVjLmh0bWwjZGZuLXRhYmxlLWZvci1jb29r
aWUtY29udmVyc2lvbgorICAgIGNvb2tpZSA9IHJlc3VsdC5ib2R5WyJ2YWx1ZSJdCisgICAgYXNz
ZXJ0ICJuYW1lIiBpbiBjb29raWUKKyAgICBhc3NlcnQgaXNpbnN0YW5jZShjb29raWVbIm5hbWUi
XSwgYmFzZXN0cmluZykKKyAgICBhc3NlcnQgInZhbHVlIiBpbiBjb29raWUKKyAgICBhc3NlcnQg
aXNpbnN0YW5jZShjb29raWVbInZhbHVlIl0sIGJhc2VzdHJpbmcpCisgICAgYXNzZXJ0ICJwYXRo
IiBpbiBjb29raWUKKyAgICBhc3NlcnQgaXNpbnN0YW5jZShjb29raWVbInBhdGgiXSwgYmFzZXN0
cmluZykKKyAgICBhc3NlcnQgImRvbWFpbiIgaW4gY29va2llCisgICAgYXNzZXJ0IGlzaW5zdGFu
Y2UoY29va2llWyJkb21haW4iXSwgYmFzZXN0cmluZykKKyAgICBhc3NlcnQgInNlY3VyZSIgaW4g
Y29va2llCisgICAgYXNzZXJ0IGlzaW5zdGFuY2UoY29va2llWyJzZWN1cmUiXSwgYm9vbCkKKyAg
ICBhc3NlcnQgImh0dHBPbmx5IiBpbiBjb29raWUKKyAgICBhc3NlcnQgaXNpbnN0YW5jZShjb29r
aWVbImh0dHBPbmx5Il0sIGJvb2wpCisgICAgYXNzZXJ0ICJleHBpcnkiIGluIGNvb2tpZQorICAg
IGFzc2VydCBpc2luc3RhbmNlKGNvb2tpZVsiZXhwaXJ5Il0sIChpbnQsIGxvbmcpKQorCisgICAg
YXNzZXJ0IGNvb2tpZVsibmFtZSJdID09ICJmb28iCisgICAgYXNzZXJ0IGNvb2tpZVsidmFsdWUi
XSA9PSAiYmFyIgpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRy
aXZlci90ZXN0cy9lbGVtZW50X2NsaWNrL19faW5pdF9fLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9lbGVtZW50X2NsaWNrL19faW5pdF9fLnB5Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lNjlkZTI5YmIyZApkaWZmIC0tZ2l0
IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9lbGVtZW50X2Ns
aWNrL3NlbGVjdC5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVz
dHMvZWxlbWVudF9jbGljay9zZWxlY3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAuLjE1YzM2ZmM0NTRmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9lbGVtZW50X2NsaWNrL3NlbGVjdC5weQpAQCAt
MCwwICsxLDIxMyBAQAorZnJvbSB0ZXN0cy5zdXBwb3J0LmlubGluZSBpbXBvcnQgaW5saW5lCisK
KworZGVmIHRlc3RfY2xpY2tfb3B0aW9uKHNlc3Npb24pOgorICAgIHNlc3Npb24udXJsID0gaW5s
aW5lKCIiIgorICAgICAgPHNlbGVjdD4KKyAgICAgICAgPG9wdGlvbj5maXJzdAorICAgICAgICA8
b3B0aW9uPnNlY29uZAorICAgICAgPC9zZWxlY3Q+IiIiKQorICAgIG9wdGlvbnMgPSBzZXNzaW9u
LmZpbmQuY3NzKCJvcHRpb24iKQorCisgICAgYXNzZXJ0IG9wdGlvbnNbMF0uc2VsZWN0ZWQKKyAg
ICBhc3NlcnQgbm90IG9wdGlvbnNbMV0uc2VsZWN0ZWQKKworICAgIG9wdGlvbnNbMV0uY2xpY2so
KQorICAgIGFzc2VydCBvcHRpb25zWzFdLnNlbGVjdGVkCisgICAgYXNzZXJ0IG5vdCBvcHRpb25z
WzBdLnNlbGVjdGVkCisKKworZGVmIHRlc3RfY2xpY2tfbXVsdGlwbGVfb3B0aW9uKHNlc3Npb24p
OgorICAgIHNlc3Npb24udXJsID0gaW5saW5lKCIiIgorICAgICAgPHNlbGVjdCBtdWx0aXBsZT4K
KyAgICAgICAgPG9wdGlvbj5maXJzdAorICAgICAgICA8b3B0aW9uPnNlY29uZAorICAgICAgPC9z
ZWxlY3Q+IiIiKQorICAgIG9wdGlvbnMgPSBzZXNzaW9uLmZpbmQuY3NzKCJvcHRpb24iKQorCisg
ICAgYXNzZXJ0IG5vdCBvcHRpb25zWzBdLnNlbGVjdGVkCisgICAgYXNzZXJ0IG5vdCBvcHRpb25z
WzFdLnNlbGVjdGVkCisKKyAgICBvcHRpb25zWzBdLmNsaWNrKCkKKyAgICBhc3NlcnQgb3B0aW9u
c1swXS5zZWxlY3RlZAorICAgIGFzc2VydCBub3Qgb3B0aW9uc1sxXS5zZWxlY3RlZAorCisKK2Rl
ZiB0ZXN0X2NsaWNrX3ByZXNlbGVjdGVkX29wdGlvbihzZXNzaW9uKToKKyAgICBzZXNzaW9uLnVy
bCA9IGlubGluZSgiIiIKKyAgICAgIDxzZWxlY3Q+CisgICAgICAgIDxvcHRpb24+Zmlyc3QKKyAg
ICAgICAgPG9wdGlvbiBzZWxlY3RlZD5zZWNvbmQKKyAgICAgIDwvc2VsZWN0PiIiIikKKyAgICBv
cHRpb25zID0gc2Vzc2lvbi5maW5kLmNzcygib3B0aW9uIikKKworICAgIGFzc2VydCBub3Qgb3B0
aW9uc1swXS5zZWxlY3RlZAorICAgIGFzc2VydCBvcHRpb25zWzFdLnNlbGVjdGVkCisKKyAgICBv
cHRpb25zWzFdLmNsaWNrKCkKKyAgICBhc3NlcnQgb3B0aW9uc1sxXS5zZWxlY3RlZAorICAgIGFz
c2VydCBub3Qgb3B0aW9uc1swXS5zZWxlY3RlZAorCisgICAgb3B0aW9uc1swXS5jbGljaygpCisg
ICAgYXNzZXJ0IG9wdGlvbnNbMF0uc2VsZWN0ZWQKKyAgICBhc3NlcnQgbm90IG9wdGlvbnNbMV0u
c2VsZWN0ZWQKKworCitkZWYgdGVzdF9jbGlja19wcmVzZWxlY3RlZF9tdWx0aXBsZV9vcHRpb24o
c2Vzc2lvbik6CisgICAgc2Vzc2lvbi51cmwgPSBpbmxpbmUoIiIiCisgICAgICA8c2VsZWN0IG11
bHRpcGxlPgorICAgICAgICA8b3B0aW9uPmZpcnN0CisgICAgICAgIDxvcHRpb24gc2VsZWN0ZWQ+
c2Vjb25kCisgICAgICA8L3NlbGVjdD4iIiIpCisgICAgb3B0aW9ucyA9IHNlc3Npb24uZmluZC5j
c3MoIm9wdGlvbiIpCisKKyAgICBhc3NlcnQgbm90IG9wdGlvbnNbMF0uc2VsZWN0ZWQKKyAgICBh
c3NlcnQgb3B0aW9uc1sxXS5zZWxlY3RlZAorCisgICAgb3B0aW9uc1sxXS5jbGljaygpCisgICAg
YXNzZXJ0IG5vdCBvcHRpb25zWzFdLnNlbGVjdGVkCisgICAgYXNzZXJ0IG5vdCBvcHRpb25zWzBd
LnNlbGVjdGVkCisKKyAgICBvcHRpb25zWzBdLmNsaWNrKCkKKyAgICBhc3NlcnQgb3B0aW9uc1sw
XS5zZWxlY3RlZAorICAgIGFzc2VydCBub3Qgb3B0aW9uc1sxXS5zZWxlY3RlZAorCisKK2RlZiB0
ZXN0X2NsaWNrX2Rlc2VsZWN0c19vdGhlcnMoc2Vzc2lvbik6CisgICAgc2Vzc2lvbi51cmwgPSBp
bmxpbmUoIiIiCisgICAgICA8c2VsZWN0PgorICAgICAgICA8b3B0aW9uPmZpcnN0CisgICAgICAg
IDxvcHRpb24+c2Vjb25kCisgICAgICAgIDxvcHRpb24+dGhpcmQKKyAgICAgIDwvc2VsZWN0PiIi
IikKKyAgICBvcHRpb25zID0gc2Vzc2lvbi5maW5kLmNzcygib3B0aW9uIikKKworICAgIG9wdGlv
bnNbMF0uY2xpY2soKQorICAgIGFzc2VydCBvcHRpb25zWzBdLnNlbGVjdGVkCisgICAgb3B0aW9u
c1sxXS5jbGljaygpCisgICAgYXNzZXJ0IG9wdGlvbnNbMV0uc2VsZWN0ZWQKKyAgICBvcHRpb25z
WzJdLmNsaWNrKCkKKyAgICBhc3NlcnQgb3B0aW9uc1syXS5zZWxlY3RlZAorICAgIG9wdGlvbnNb
MF0uY2xpY2soKQorICAgIGFzc2VydCBvcHRpb25zWzBdLnNlbGVjdGVkCisKKworZGVmIHRlc3Rf
Y2xpY2tfbXVsdGlwbGVfZG9lc19ub3RfZGVzZWxlY3Rfb3RoZXJzKHNlc3Npb24pOgorICAgIHNl
c3Npb24udXJsID0gaW5saW5lKCIiIgorICAgICAgPHNlbGVjdCBtdWx0aXBsZT4KKyAgICAgICAg
PG9wdGlvbj5maXJzdAorICAgICAgICA8b3B0aW9uPnNlY29uZAorICAgICAgICA8b3B0aW9uPnRo
aXJkCisgICAgICA8L3NlbGVjdD4iIiIpCisgICAgb3B0aW9ucyA9IHNlc3Npb24uZmluZC5jc3Mo
Im9wdGlvbiIpCisKKyAgICBvcHRpb25zWzBdLmNsaWNrKCkKKyAgICBhc3NlcnQgb3B0aW9uc1sw
XS5zZWxlY3RlZAorICAgIG9wdGlvbnNbMV0uY2xpY2soKQorICAgIGFzc2VydCBvcHRpb25zWzBd
LnNlbGVjdGVkCisgICAgYXNzZXJ0IG9wdGlvbnNbMV0uc2VsZWN0ZWQKKyAgICBvcHRpb25zWzJd
LmNsaWNrKCkKKyAgICBhc3NlcnQgb3B0aW9uc1swXS5zZWxlY3RlZAorICAgIGFzc2VydCBvcHRp
b25zWzFdLnNlbGVjdGVkCisgICAgYXNzZXJ0IG9wdGlvbnNbMl0uc2VsZWN0ZWQKKworCitkZWYg
dGVzdF9jbGlja19zZWxlY3RlZF9vcHRpb24oc2Vzc2lvbik6CisgICAgc2Vzc2lvbi51cmwgPSBp
bmxpbmUoIiIiCisgICAgICA8c2VsZWN0PgorICAgICAgICA8b3B0aW9uPmZpcnN0CisgICAgICAg
IDxvcHRpb24+c2Vjb25kCisgICAgICA8L3NlbGVjdD4iIiIpCisgICAgb3B0aW9ucyA9IHNlc3Np
b24uZmluZC5jc3MoIm9wdGlvbiIpCisKKyAgICAjIEZpcnN0IDxvcHRpb24+IGlzIHNlbGVjdGVk
IGluIGRyb3Bkb3duCisgICAgYXNzZXJ0IG9wdGlvbnNbMF0uc2VsZWN0ZWQKKyAgICBhc3NlcnQg
bm90IG9wdGlvbnNbMV0uc2VsZWN0ZWQKKworICAgIG9wdGlvbnNbMV0uY2xpY2soKQorICAgIGFz
c2VydCBvcHRpb25zWzFdLnNlbGVjdGVkCisgICAgb3B0aW9uc1sxXS5jbGljaygpCisgICAgYXNz
ZXJ0IG9wdGlvbnNbMV0uc2VsZWN0ZWQKKworCitkZWYgdGVzdF9jbGlja19zZWxlY3RlZF9tdWx0
aXBsZV9vcHRpb24oc2Vzc2lvbik6CisgICAgc2Vzc2lvbi51cmwgPSBpbmxpbmUoIiIiCisgICAg
ICA8c2VsZWN0IG11bHRpcGxlPgorICAgICAgICA8b3B0aW9uPmZpcnN0CisgICAgICAgIDxvcHRp
b24+c2Vjb25kCisgICAgICA8L3NlbGVjdD4iIiIpCisgICAgb3B0aW9ucyA9IHNlc3Npb24uZmlu
ZC5jc3MoIm9wdGlvbiIpCisKKyAgICAjIE5vIGltcGxpY2l0bHkgc2VsZWN0ZWQgPG9wdGlvbj4g
aW4gPHNlbGVjdCBtdWx0aXBsZT4KKyAgICBhc3NlcnQgbm90IG9wdGlvbnNbMF0uc2VsZWN0ZWQK
KyAgICBhc3NlcnQgbm90IG9wdGlvbnNbMV0uc2VsZWN0ZWQKKworICAgIG9wdGlvbnNbMF0uY2xp
Y2soKQorICAgIGFzc2VydCBvcHRpb25zWzBdLnNlbGVjdGVkCisgICAgYXNzZXJ0IG5vdCBvcHRp
b25zWzFdLnNlbGVjdGVkCisKKyAgICAjIFNlY29uZCBjbGljayBpbiA8c2VsZWN0IG11bHRpcGxl
PiBkZXNlbGVjdHMKKyAgICBvcHRpb25zWzBdLmNsaWNrKCkKKyAgICBhc3NlcnQgbm90IG9wdGlv
bnNbMF0uc2VsZWN0ZWQKKyAgICBhc3NlcnQgbm90IG9wdGlvbnNbMV0uc2VsZWN0ZWQKKworCitk
ZWYgdGVzdF9vdXRfb2Zfdmlld19kcm9wZG93bihzZXNzaW9uKToKKyAgICBzZXNzaW9uLnVybCA9
IGlubGluZSgiIiIKKyAgICAgIDxzZWxlY3Q+CisgICAgICAgIDxvcHRpb24+MQorICAgICAgICA8
b3B0aW9uPjIKKyAgICAgICAgPG9wdGlvbj4zCisgICAgICAgIDxvcHRpb24+NAorICAgICAgICA8
b3B0aW9uPjUKKyAgICAgICAgPG9wdGlvbj42CisgICAgICAgIDxvcHRpb24+NworICAgICAgICA8
b3B0aW9uPjgKKyAgICAgICAgPG9wdGlvbj45CisgICAgICAgIDxvcHRpb24+MTAKKyAgICAgICAg
PG9wdGlvbj4xMQorICAgICAgICA8b3B0aW9uPjEyCisgICAgICAgIDxvcHRpb24+MTMKKyAgICAg
ICAgPG9wdGlvbj4xNAorICAgICAgICA8b3B0aW9uPjE1CisgICAgICAgIDxvcHRpb24+MTYKKyAg
ICAgICAgPG9wdGlvbj4xNworICAgICAgICA8b3B0aW9uPjE4CisgICAgICAgIDxvcHRpb24+MTkK
KyAgICAgICAgPG9wdGlvbj4yMAorICAgICAgPC9zZWxlY3Q+IiIiKQorICAgIG9wdGlvbnMgPSBz
ZXNzaW9uLmZpbmQuY3NzKCJvcHRpb24iKQorCisgICAgb3B0aW9uc1sxNF0uY2xpY2soKQorICAg
IGFzc2VydCBvcHRpb25zWzE0XS5zZWxlY3RlZAorCisKK2RlZiB0ZXN0X291dF9vZl92aWV3X211
bHRpcGxlKHNlc3Npb24pOgorICAgIHNlc3Npb24udXJsID0gaW5saW5lKCIiIgorICAgICAgPHNl
bGVjdCBtdWx0aXBsZT4KKyAgICAgICAgPG9wdGlvbj4xCisgICAgICAgIDxvcHRpb24+MgorICAg
ICAgICA8b3B0aW9uPjMKKyAgICAgICAgPG9wdGlvbj40CisgICAgICAgIDxvcHRpb24+NQorICAg
ICAgICA8b3B0aW9uPjYKKyAgICAgICAgPG9wdGlvbj43CisgICAgICAgIDxvcHRpb24+OAorICAg
ICAgICA8b3B0aW9uPjkKKyAgICAgICAgPG9wdGlvbj4xMAorICAgICAgICA8b3B0aW9uPjExCisg
ICAgICAgIDxvcHRpb24+MTIKKyAgICAgICAgPG9wdGlvbj4xMworICAgICAgICA8b3B0aW9uPjE0
CisgICAgICAgIDxvcHRpb24+MTUKKyAgICAgICAgPG9wdGlvbj4xNgorICAgICAgICA8b3B0aW9u
PjE3CisgICAgICAgIDxvcHRpb24+MTgKKyAgICAgICAgPG9wdGlvbj4xOQorICAgICAgICA8b3B0
aW9uPjIwCisgICAgICA8L3NlbGVjdD4iIiIpCisgICAgb3B0aW9ucyA9IHNlc3Npb24uZmluZC5j
c3MoIm9wdGlvbiIpCisKKyAgICBsYXN0X29wdGlvbiA9IG9wdGlvbnNbLTFdCisgICAgbGFzdF9v
cHRpb24uY2xpY2soKQorICAgIGFzc2VydCBsYXN0X29wdGlvbi5zZWxlY3RlZApkaWZmIC0tZ2l0
IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9mdWxsc2NyZWVu
X3dpbmRvdy5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMv
ZnVsbHNjcmVlbl93aW5kb3cucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLjk5YjE0NGRmMTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9mdWxsc2NyZWVuX3dpbmRvdy5weQpAQCAtMCwwICsxLDIw
MCBAQAorIyBNRVRBOiB0aW1lb3V0PWxvbmcKKworZnJvbSB0ZXN0cy5zdXBwb3J0LmlubGluZSBp
bXBvcnQgaW5saW5lCitmcm9tIHRlc3RzLnN1cHBvcnQuYXNzZXJ0cyBpbXBvcnQgYXNzZXJ0X2Vy
cm9yLCBhc3NlcnRfc3VjY2VzcywgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkCitmcm9tIHRlc3RzLnN1
cHBvcnQuZml4dHVyZXMgaW1wb3J0IGNyZWF0ZV9kaWFsb2cKKworCithbGVydF9kb2MgPSBpbmxp
bmUoIjxzY3JpcHQ+d2luZG93LmFsZXJ0KCk8L3NjcmlwdD4iKQorCisKK2RlZiByZWFkX2dsb2Jh
bChzZXNzaW9uLCBuYW1lKToKKyAgICByZXR1cm4gc2Vzc2lvbi5leGVjdXRlX3NjcmlwdCgicmV0
dXJuICVzOyIgJSBuYW1lKQorCisKK2RlZiBmdWxsc2NyZWVuKHNlc3Npb24pOgorICAgIHJldHVy
biBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJQT1NUIiwgInNlc3Npb24vJXMvd2luZG93L2Z1bGxz
Y3JlZW4iICUgc2Vzc2lvbi5zZXNzaW9uX2lkKQorCisKKyMgMTAuNy41IEZ1bGxzY3JlZW4gV2lu
ZG93CisKKworIyAxLiBJZiB0aGUgY3VycmVudCB0b3AtbGV2ZWwgYnJvd3NpbmcgY29udGV4dCBp
cyBubyBsb25nZXIgb3BlbiwgcmV0dXJuIGVycm9yCisjICAgIHdpdGggZXJyb3IgY29kZSBubyBz
dWNoIHdpbmRvdy4KK2RlZiB0ZXN0X25vX2Jyb3dzaW5nX2NvbnRleHQoc2Vzc2lvbiwgY3JlYXRl
X3dpbmRvdyk6CisgICAgIyBzdGVwIDEKKyAgICBzZXNzaW9uLndpbmRvd19oYW5kbGUgPSBjcmVh
dGVfd2luZG93KCkKKyAgICBzZXNzaW9uLmNsb3NlKCkKKyAgICByZXNwb25zZSA9IGZ1bGxzY3Jl
ZW4oc2Vzc2lvbikKKyAgICBhc3NlcnRfZXJyb3IocmVzcG9uc2UsICJubyBzdWNoIHdpbmRvdyIp
CisKKworIyBbLi4uXQorIyAyLiBIYW5kbGUgYW55IHVzZXIgcHJvbXB0cyBhbmQgcmV0dXJuIGl0
cyB2YWx1ZSBpZiBpdCBpcyBhbiBlcnJvci4KKyMgWy4uLl0KKyMgSW4gb3JkZXIgdG8gaGFuZGxl
IGFueSB1c2VyIHByb21wdHMgYSByZW1vdGUgZW5kIG11c3QgdGFrZSB0aGUgZm9sbG93aW5nCisj
IHN0ZXBzOgorIyAyLiBSdW4gdGhlIHN1YnN0ZXBzIG9mIHRoZSBmaXJzdCBtYXRjaGluZyB1c2Vy
IHByb21wdCBoYW5kbGVyOgorIworIyAgICBbLi4uXQorIyAgICAtIGFjY2VwdCBzdGF0ZQorIyAg
ICAgIDEuIEFjY2VwdCB0aGUgY3VycmVudCB1c2VyIHByb21wdC4KKyMgICAgWy4uLl0KKyMKKyMg
My4gUmV0dXJuIHN1Y2Nlc3MuCitkZWYgdGVzdF9oYW5kbGVfcHJvbXB0X2FjY2VwdChuZXdfc2Vz
c2lvbik6CisgICAgXywgc2Vzc2lvbiA9IG5ld19zZXNzaW9uKHsiYWx3YXlzTWF0Y2giOiB7InVu
aGFuZGxlZFByb21wdEJlaGF2aW9yIjogImFjY2VwdCJ9fSkKKyAgICBzZXNzaW9uLnVybCA9IGlu
bGluZSgiPHRpdGxlPldEIGRvYyB0aXRsZTwvdGl0bGU+IikKKyAgICBjcmVhdGVfZGlhbG9nKHNl
c3Npb24pKCJhbGVydCIsIHRleHQ9ImFjY2VwdCAjMSIsIHJlc3VsdF92YXI9ImFjY2VwdDEiKQor
CisgICAgZXhwZWN0ZWRfdGl0bGUgPSByZWFkX2dsb2JhbChzZXNzaW9uLCAiZG9jdW1lbnQudGl0
bGUiKQorICAgIHJlc3BvbnNlID0gZnVsbHNjcmVlbihzZXNzaW9uKQorCisgICAgYXNzZXJ0X3N1
Y2Nlc3MocmVzcG9uc2UsIGV4cGVjdGVkX3RpdGxlKQorICAgIGFzc2VydF9kaWFsb2dfaGFuZGxl
ZChzZXNzaW9uLCAiYWNjZXB0ICMxIikKKyAgICBhc3NlcnQgcmVhZF9nbG9iYWwoc2Vzc2lvbiwg
ImFjY2VwdDEiKSA9PSBOb25lCisKKyAgICBleHBlY3RlZF90aXRsZSA9IHJlYWRfZ2xvYmFsKHNl
c3Npb24sICJkb2N1bWVudC50aXRsZSIpCisgICAgY3JlYXRlX2RpYWxvZyhzZXNzaW9uKSgiY29u
ZmlybSIsIHRleHQ9ImFjY2VwdCAjMiIsIHJlc3VsdF92YXI9ImFjY2VwdDIiKQorCisgICAgcmVz
cG9uc2UgPSBmdWxsc2NyZWVuKHNlc3Npb24pCisKKyAgICBhc3NlcnRfc3VjY2VzcyhyZXNwb25z
ZSwgZXhwZWN0ZWRfdGl0bGUpCisgICAgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNlc3Npb24sICJh
Y2NlcHQgIzIiKQorICAgIGFzc2VydCByZWFkX2dsb2JhbChzZXNzaW9uLCAiYWNjZXB0MiIpLCBU
cnVlCisKKyAgICBleHBlY3RlZF90aXRsZSA9IHJlYWRfZ2xvYmFsKHNlc3Npb24sICJkb2N1bWVu
dC50aXRsZSIpCisgICAgY3JlYXRlX2RpYWxvZyhzZXNzaW9uKSgicHJvbXB0IiwgdGV4dD0iYWNj
ZXB0ICMzIiwgcmVzdWx0X3Zhcj0iYWNjZXB0MyIpCisKKyAgICByZXNwb25zZSA9IGZ1bGxzY3Jl
ZW4oc2Vzc2lvbikKKworICAgIGFzc2VydF9zdWNjZXNzKHJlc3BvbnNlLCBleHBlY3RlZF90aXRs
ZSkKKyAgICBhc3NlcnRfZGlhbG9nX2hhbmRsZWQoc2Vzc2lvbiwgImFjY2VwdCAjMyIpCisgICAg
YXNzZXJ0IHJlYWRfZ2xvYmFsKHNlc3Npb24sICJhY2NlcHQzIikgPT0gIiIKKworCisjIFsuLi5d
CisjIDIuIEhhbmRsZSBhbnkgdXNlciBwcm9tcHRzIGFuZCByZXR1cm4gaXRzIHZhbHVlIGlmIGl0
IGlzIGFuIGVycm9yLgorIyBbLi4uXQorIyBJbiBvcmRlciB0byBoYW5kbGUgYW55IHVzZXIgcHJv
bXB0cyBhIHJlbW90ZSBlbmQgbXVzdCB0YWtlIHRoZSBmb2xsb3dpbmcKKyMgc3RlcHM6CisjIDIu
IFJ1biB0aGUgc3Vic3RlcHMgb2YgdGhlIGZpcnN0IG1hdGNoaW5nIHVzZXIgcHJvbXB0IGhhbmRs
ZXI6CisjCisjICAgIFsuLi5dCisjICAgIC0gbWlzc2luZyB2YWx1ZSBkZWZhdWx0IHN0YXRlCisj
ICAgIC0gbm90IGluIHRoZSB0YWJsZSBvZiBzaW1wbGUgZGlhbG9ncworIyAgICAgIDEuIERpc21p
c3MgdGhlIGN1cnJlbnQgdXNlciBwcm9tcHQuCisjICAgICAgMi4gUmV0dXJuIGVycm9yIHdpdGgg
ZXJyb3IgY29kZSB1bmV4cGVjdGVkIGFsZXJ0IG9wZW4uCitkZWYgdGVzdF9oYW5kbGVfcHJvbXB0
X21pc3NpbmdfdmFsdWUoc2Vzc2lvbiwgY3JlYXRlX2RpYWxvZyk6CisgICAgc2Vzc2lvbi51cmwg
PSBpbmxpbmUoIjx0aXRsZT5XRCBkb2MgdGl0bGU8L3RpdGxlPiIpCisgICAgY3JlYXRlX2RpYWxv
ZygiYWxlcnQiLCB0ZXh0PSJkaXNtaXNzICMxIiwgcmVzdWx0X3Zhcj0iZGlzbWlzczEiKQorCisg
ICAgcmVzcG9uc2UgPSBmdWxsc2NyZWVuKHNlc3Npb24pCisKKyAgICBhc3NlcnRfZXJyb3IocmVz
cG9uc2UsICJ1bmV4cGVjdGVkIGFsZXJ0IG9wZW4iKQorICAgIGFzc2VydF9kaWFsb2dfaGFuZGxl
ZChzZXNzaW9uLCAiZGlzbWlzcyAjMSIpCisgICAgYXNzZXJ0IHJlYWRfZ2xvYmFsKHNlc3Npb24s
ICJhY2NlcHQxIikgPT0gTm9uZQorCisgICAgY3JlYXRlX2RpYWxvZygiY29uZmlybSIsIHRleHQ9
ImRpc21pc3MgIzIiLCByZXN1bHRfdmFyPSJkaXNtaXNzMiIpCisKKyAgICByZXNwb25zZSA9IGZ1
bGxzY3JlZW4oc2Vzc2lvbikKKworICAgIGFzc2VydF9lcnJvcihyZXNwb25zZSwgInVuZXhwZWN0
ZWQgYWxlcnQgb3BlbiIpCisgICAgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNlc3Npb24sICJkaXNt
aXNzICMyIikKKyAgICBhc3NlcnQgcmVhZF9nbG9iYWwoc2Vzc2lvbiwgImRpc21pc3MyIikgPT0g
RmFsc2UKKworICAgIGNyZWF0ZV9kaWFsb2coInByb21wdCIsIHRleHQ9ImRpc21pc3MgIzMiLCBy
ZXN1bHRfdmFyPSJkaXNtaXNzMyIpCisKKyAgICByZXNwb25zZSA9IGZ1bGxzY3JlZW4oc2Vzc2lv
bikKKworICAgIGFzc2VydF9lcnJvcihyZXNwb25zZSwgInVuZXhwZWN0ZWQgYWxlcnQgb3BlbiIp
CisgICAgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNlc3Npb24sICJkaXNtaXNzICMzIikKKyAgICBh
c3NlcnQgcmVhZF9nbG9iYWwoc2Vzc2lvbiwgImRpc21pc3MzIikgPT0gTm9uZQorCisKKyMgNC4g
Q2FsbCBmdWxsc2NyZWVuIGFuIGVsZW1lbnQgd2l0aCB0aGUgY3VycmVudCB0b3AtbGV2ZWwgYnJv
d3NpbmcKKyMgY29udGV4dCdzIGFjdGl2ZSBkb2N1bWVudCdzIGRvY3VtZW50IGVsZW1lbnQuCitk
ZWYgdGVzdF9mdWxsc2NyZWVuKHNlc3Npb24pOgorICAgICMgc3RlcCA0CisgICAgcmVzcG9uc2Ug
PSBmdWxsc2NyZWVuKHNlc3Npb24pCisgICAgYXNzZXJ0X3N1Y2Nlc3MocmVzcG9uc2UpCisgICAg
YXNzZXJ0IHNlc3Npb24uZXhlY3V0ZV9zY3JpcHQoInJldHVybiB3aW5kb3cuZnVsbFNjcmVlbiIp
ID09IFRydWUKKworCisjIDUuIFJldHVybiBzdWNjZXNzIHdpdGggdGhlIEpTT04gc2VyaWFsaXph
dGlvbiBvZiB0aGUgY3VycmVudCB0b3AtbGV2ZWwKKyMgYnJvd3NpbmcgY29udGV4dCdzIHdpbmRv
dyByZWN0LgorIworIyBbLi4uXQorIworIyBBIHRvcC1sZXZlbCBicm93c2luZyBjb250ZXh0J3Mg
d2luZG93IHJlY3QgaXMgZGVmaW5lZCBhcyBhCisjIGRpY3Rpb25hcnkgb2YgdGhlIHNjcmVlblgs
IHNjcmVlblksIHdpZHRoIGFuZCBoZWlnaHQgYXR0cmlidXRlcyBvZiB0aGUKKyMgV2luZG93UHJv
eHkuIEl0cyBKU09OIHJlcHJlc2VudGF0aW9uIGlzIHRoZSBmb2xsb3dpbmc6CisjCisjICAgeAor
IyAgICAgV2luZG93UHJveHkncyBzY3JlZW5YIGF0dHJpYnV0ZS4KKyMKKyMgICB5CisjICAgICBX
aW5kb3dQcm94eSdzIHNjcmVlblkgYXR0cmlidXRlLgorIworIyAgIHdpZHRoCisjICAgICBXaWR0
aCBvZiB0aGUgdG9wLWxldmVsIGJyb3dzaW5nIGNvbnRleHQncyBvdXRlciBkaW1lbnNpb25zLAor
IyAgICAgaW5jbHVkaW5nIGFueSBicm93c2VyIGNocm9tZSBhbmQgZXh0ZXJuYWxseSBkcmF3biB3
aW5kb3cKKyMgICAgIGRlY29yYXRpb25zIGluIENTUyByZWZlcmVuY2UgcGl4ZWxzLgorIworIyAg
IGhlaWdodAorIyAgICAgSGVpZ2h0IG9mIHRoZSB0b3AtbGV2ZWwgYnJvd3NpbmcgY29udGV4dCdz
IG91dGVyIGRpbWVuc2lvbnMsCisjICAgICBpbmNsdWRpbmcgYW55IGJyb3dzZXIgY2hyb21lIGFu
ZCBleHRlcm5hbGx5IGRyYXduIHdpbmRvdyBkZWNvcmF0aW9ucworIyAgICAgaW4gQ1NTIHJlZmVy
ZW5jZSBwaXhlbHMuCisjCisjICAgc3RhdGUKKyMgICAgIFRoZSB0b3AtbGV2ZWwgYnJvd3Npbmcg
Y29udGV4dCdzIHdpbmRvdyBzdGF0ZS4KKyMKKyMgWy4uLl0KKyMKKyMgVGhlIHRvcC1sZXZlbCBi
cm93c2luZyBjb250ZXh0IGhhcyBhbiBhc3NvY2lhdGVkIHdpbmRvdyBzdGF0ZSB3aGljaAorIyBk
ZXNjcmliZXMgd2hhdCB2aXNpYmlsaXR5IHN0YXRlIGl0cyBPUyB3aWRnZXQgd2luZG93IGlzIGlu
LiBJdCBjYW4gYmUKKyMgaW4gb25lIG9mIHRoZSBmb2xsb3dpbmcgc3RhdGVzOgorIworIyAgICJt
YXhpbWl6ZWQiCisjICAgICBUaGUgd2luZG93IGlzIG1heGltaXplZC4KKyMKKyMgICAibWluaW1p
emVkIgorIyAgICAgVGhlIHdpbmRvdyBpcyBpY29uaWZpZWQuCisjCisjICAgIm5vcm1hbCIKKyMg
ICAgIFRoZSB3aW5kb3cgaXMgc2hvd24gbm9ybWFsbHkuCisjCisjICAgImZ1bGxzY3JlZW4iCisj
ICAgICBUaGUgd2luZG93IGlzIGluIGZ1bGwgc2NyZWVuIG1vZGUuCisjCisjIElmIGZvciB3aGF0
ZXZlciByZWFzb24gdGhlIHRvcC1sZXZlbCBicm93c2luZyBjb250ZXh0J3MgT1Mgd2luZG93Cisj
IGNhbm5vdCBlbnRlciBlaXRoZXIgb2YgdGhlIHdpbmRvdyBzdGF0ZXMsIG9yIGlmIHRoaXMgY29u
Y2VwdCBpcyBub3QKKyMgYXBwbGljYWJsZSBvbiB0aGUgY3VycmVudCBzeXN0ZW0sIHRoZSBkZWZh
dWx0IHN0YXRlIG11c3QgYmUgbm9ybWFsLgorZGVmIHRlc3RfcGF5bG9hZChzZXNzaW9uKToKKyAg
ICByZXNwb25zZSA9IGZ1bGxzY3JlZW4oc2Vzc2lvbikKKworICAgICMgc3RlcCA1CisgICAgYXNz
ZXJ0IHJlc3BvbnNlLnN0YXR1cyA9PSAyMDAKKyAgICBhc3NlcnQgaXNpbnN0YW5jZShyZXNwb25z
ZS5ib2R5WyJ2YWx1ZSJdLCBkaWN0KQorCisgICAgcmVjdCA9IHJlc3BvbnNlLmJvZHlbInZhbHVl
Il0KKyAgICBhc3NlcnQgIndpZHRoIiBpbiByZWN0CisgICAgYXNzZXJ0ICJoZWlnaHQiIGluIHJl
Y3QKKyAgICBhc3NlcnQgIngiIGluIHJlY3QKKyAgICBhc3NlcnQgInkiIGluIHJlY3QKKyAgICBh
c3NlcnQgaXNpbnN0YW5jZShyZWN0WyJ3aWR0aCJdLCAoaW50LCBmbG9hdCkpCisgICAgYXNzZXJ0
IGlzaW5zdGFuY2UocmVjdFsiaGVpZ2h0Il0sIChpbnQsIGZsb2F0KSkKKyAgICBhc3NlcnQgaXNp
bnN0YW5jZShyZWN0WyJ4Il0sIChpbnQsIGZsb2F0KSkKKyAgICBhc3NlcnQgaXNpbnN0YW5jZShy
ZWN0WyJ5Il0sIChpbnQsIGZsb2F0KSkKKworCitkZWYgdGVzdF9mdWxsc2NyZWVuX3R3aWNlX2lz
X2lkZW1wb3RlbnQoc2Vzc2lvbik6CisgICAgYXNzZXJ0IHNlc3Npb24uZXhlY3V0ZV9zY3JpcHQo
InJldHVybiB3aW5kb3cuZnVsbFNjcmVlbiIpIGlzIEZhbHNlCisKKyAgICBmaXJzdF9yZXNwb25z
ZSA9IGZ1bGxzY3JlZW4oc2Vzc2lvbikKKyAgICBhc3NlcnRfc3VjY2VzcyhmaXJzdF9yZXNwb25z
ZSkKKyAgICBhc3NlcnQgc2Vzc2lvbi5leGVjdXRlX3NjcmlwdCgicmV0dXJuIHdpbmRvdy5mdWxs
U2NyZWVuIikgaXMgVHJ1ZQorCisgICAgc2Vjb25kX3Jlc3BvbnNlID0gZnVsbHNjcmVlbihzZXNz
aW9uKQorICAgIGFzc2VydF9zdWNjZXNzKHNlY29uZF9yZXNwb25zZSkKKyAgICBhc3NlcnQgc2Vz
c2lvbi5leGVjdXRlX3NjcmlwdCgicmV0dXJuIHdpbmRvdy5mdWxsU2NyZWVuIikgaXMgVHJ1ZQpk
aWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9n
ZXRfd2luZG93X3JlY3QucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVy
L3Rlc3RzL2dldF93aW5kb3dfcmVjdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMC4uN2EwMWY3M2RjY2IKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL2dldF93aW5kb3dfcmVjdC5weQpAQCAtMCwwICsx
LDg1IEBACitmcm9tIHN1cHBvcnQuYXNzZXJ0cyBpbXBvcnQgYXNzZXJ0X2Vycm9yLCBhc3NlcnRf
ZGlhbG9nX2hhbmRsZWQsIGFzc2VydF9zdWNjZXNzCitmcm9tIHN1cHBvcnQuZml4dHVyZXMgaW1w
b3J0IGNyZWF0ZV9kaWFsb2cKK2Zyb20gc3VwcG9ydC5pbmxpbmUgaW1wb3J0IGlubGluZQorCisK
K2FsZXJ0X2RvYyA9IGlubGluZSgiPHNjcmlwdD53aW5kb3cuYWxlcnQoKTwvc2NyaXB0PiIpCisK
KworIyAxMC43LjEgR2V0IFdpbmRvdyBSZWN0CisKK2RlZiB0ZXN0X2dldF93aW5kb3dfcmVjdF9u
b19icm93c2luZ19jb250ZXh0KHNlc3Npb24sIGNyZWF0ZV93aW5kb3cpOgorICAgICMgU3RlcCAx
CisgICAgc2Vzc2lvbi53aW5kb3dfaGFuZGxlID0gY3JlYXRlX3dpbmRvdygpCisgICAgc2Vzc2lv
bi5jbG9zZSgpCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwgInNl
c3Npb24vJXMvd2luZG93L3JlY3QiICUgc2Vzc2lvbi5zZXNzaW9uX2lkKQorCisgICAgYXNzZXJ0
X2Vycm9yKHJlc3VsdCwgIm5vIHN1Y2ggd2luZG93IikKKworCitkZWYgdGVzdF9nZXRfd2luZG93
X3JlY3RfcHJvbXB0X2FjY2VwdChuZXdfc2Vzc2lvbik6CisgICAgIyBTdGVwIDIKKyAgICBfLCBz
ZXNzaW9uID0gbmV3X3Nlc3Npb24oeyJhbHdheXNNYXRjaCI6IHsidW5oYW5kbGVkUHJvbXB0QmVo
YXZpb3IiOiAiYWNjZXB0In19KQorICAgIHNlc3Npb24udXJsID0gaW5saW5lKCI8dGl0bGU+V0Qg
ZG9jIHRpdGxlPC90aXRsZT4iKQorCisgICAgY3JlYXRlX2RpYWxvZyhzZXNzaW9uKSgiYWxlcnQi
LCB0ZXh0PSJkaXNtaXNzICMxIiwgcmVzdWx0X3Zhcj0iZGlzbWlzczEiKQorICAgIHJlc3VsdCA9
IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIkdFVCIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAic2Vzc2lvbi8lcy93aW5kb3cvcmVjdCIgJSBzZXNzaW9uLnNlc3Npb25faWQp
CisgICAgYXNzZXJ0IHJlc3VsdC5zdGF0dXMgPT0gMjAwCisgICAgYXNzZXJ0X2RpYWxvZ19oYW5k
bGVkKHNlc3Npb24sICJkaXNtaXNzICMxIikKKworICAgIGNyZWF0ZV9kaWFsb2coc2Vzc2lvbiko
ImNvbmZpcm0iLCB0ZXh0PSJkaXNtaXNzICMyIiwgcmVzdWx0X3Zhcj0iZGlzbWlzczIiKQorICAg
IHJlc3VsdCA9IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIkdFVCIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAic2Vzc2lvbi8lcy93aW5kb3cvcmVjdCIgJSBzZXNzaW9uLnNl
c3Npb25faWQpCisgICAgYXNzZXJ0IHJlc3VsdC5zdGF0dXMgPT0gMjAwCisgICAgYXNzZXJ0X2Rp
YWxvZ19oYW5kbGVkKHNlc3Npb24sICJkaXNtaXNzICMyIikKKworICAgIGNyZWF0ZV9kaWFsb2co
c2Vzc2lvbikoInByb21wdCIsIHRleHQ9ImRpc21pc3MgIzMiLCByZXN1bHRfdmFyPSJkaXNtaXNz
MyIpCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXNzaW9uLyVzL3dpbmRvdy9yZWN0IiAlIHNl
c3Npb24uc2Vzc2lvbl9pZCkKKyAgICBhc3NlcnQgcmVzdWx0LnN0YXR1cyA9PSAyMDAKKyAgICBh
c3NlcnRfZGlhbG9nX2hhbmRsZWQoc2Vzc2lvbiwgImRpc21pc3MgIzMiKQorCisKK2RlZiB0ZXN0
X2dldF93aW5kb3dfcmVjdF9oYW5kbGVfcHJvbXB0X21pc3NpbmdfdmFsdWUoc2Vzc2lvbiwgY3Jl
YXRlX2RpYWxvZyk6CisgICAgIyBTdGVwIDIKKyAgICBzZXNzaW9uLnVybCA9IGlubGluZSgiPHRp
dGxlPldEIGRvYyB0aXRsZTwvdGl0bGU+IikKKyAgICBjcmVhdGVfZGlhbG9nKCJhbGVydCIsIHRl
eHQ9ImRpc21pc3MgIzEiLCByZXN1bHRfdmFyPSJkaXNtaXNzMSIpCisKKyAgICByZXN1bHQgPSBz
ZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgInNlc3Npb24vJXMvd2luZG93L3JlY3QiICUgc2Vzc2lvbi5zZXNzaW9uX2lkKQor
CisgICAgYXNzZXJ0X2Vycm9yKHJlc3VsdCwgInVuZXhwZWN0ZWQgYWxlcnQgb3BlbiIpCisgICAg
YXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNlc3Npb24sICJkaXNtaXNzICMxIikKKworICAgIGNyZWF0
ZV9kaWFsb2coImNvbmZpcm0iLCB0ZXh0PSJkaXNtaXNzICMyIiwgcmVzdWx0X3Zhcj0iZGlzbWlz
czIiKQorCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXNzaW9uLyVzL3dpbmRvdy9yZWN0IiAl
IHNlc3Npb24uc2Vzc2lvbl9pZCkKKworICAgIGFzc2VydF9lcnJvcihyZXN1bHQsICJ1bmV4cGVj
dGVkIGFsZXJ0IG9wZW4iKQorICAgIGFzc2VydF9kaWFsb2dfaGFuZGxlZChzZXNzaW9uLCAiZGlz
bWlzcyAjMiIpCisKKyAgICBjcmVhdGVfZGlhbG9nKCJwcm9tcHQiLCB0ZXh0PSJkaXNtaXNzICMz
IiwgcmVzdWx0X3Zhcj0iZGlzbWlzczMiKQorCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3Bv
cnQuc2VuZCgiR0VUIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXNz
aW9uLyVzL3dpbmRvdy9yZWN0IiAlIHNlc3Npb24uc2Vzc2lvbl9pZCkKKworICAgIGFzc2VydF9l
cnJvcihyZXN1bHQsICJ1bmV4cGVjdGVkIGFsZXJ0IG9wZW4iKQorICAgIGFzc2VydF9kaWFsb2df
aGFuZGxlZChzZXNzaW9uLCAiZGlzbWlzcyAjMyIpCisKKworZGVmIHRlc3RfZ2V0X3dpbmRvd19y
ZWN0X3BheWxvYWQoc2Vzc2lvbik6CisgICAgIyBzdGVwIDMKKyAgICByZXN1bHQgPSBzZXNzaW9u
LnRyYW5zcG9ydC5zZW5kKCJHRVQiLCAic2Vzc2lvbi8lcy93aW5kb3cvcmVjdCIgJSBzZXNzaW9u
LnNlc3Npb25faWQpCisKKyAgICBhc3NlcnQgcmVzdWx0LnN0YXR1cyA9PSAyMDAKKyAgICBhc3Nl
cnQgaXNpbnN0YW5jZShyZXN1bHQuYm9keVsidmFsdWUiXSwgZGljdCkKKyAgICBhc3NlcnQgIndp
ZHRoIiBpbiByZXN1bHQuYm9keVsidmFsdWUiXQorICAgIGFzc2VydCAiaGVpZ2h0IiBpbiByZXN1
bHQuYm9keVsidmFsdWUiXQorICAgIGFzc2VydCAieCIgaW4gcmVzdWx0LmJvZHlbInZhbHVlIl0K
KyAgICBhc3NlcnQgInkiIGluIHJlc3VsdC5ib2R5WyJ2YWx1ZSJdCisgICAgYXNzZXJ0IGlzaW5z
dGFuY2UocmVzdWx0LmJvZHlbInZhbHVlIl1bIndpZHRoIl0sIChpbnQsIGZsb2F0KSkKKyAgICBh
c3NlcnQgaXNpbnN0YW5jZShyZXN1bHQuYm9keVsidmFsdWUiXVsiaGVpZ2h0Il0sIChpbnQsIGZs
b2F0KSkKKyAgICBhc3NlcnQgaXNpbnN0YW5jZShyZXN1bHQuYm9keVsidmFsdWUiXVsieCJdLCAo
aW50LCBmbG9hdCkpCisgICAgYXNzZXJ0IGlzaW5zdGFuY2UocmVzdWx0LmJvZHlbInZhbHVlIl1b
InkiXSwgKGludCwgZmxvYXQpKQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYmRyaXZlci90ZXN0cy9pbnRlcmFjdGlvbi9zZW5kX2tleXNfY29udGVudF9lZGl0YWJs
ZS5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvaW50ZXJh
Y3Rpb24vc2VuZF9rZXlzX2NvbnRlbnRfZWRpdGFibGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAuLmE0YmJhOGU1MzRmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJp
dmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9pbnRlcmFjdGlvbi9zZW5kX2tl
eXNfY29udGVudF9lZGl0YWJsZS5weQpAQCAtMCwwICsxLDIzIEBACitpbXBvcnQgcHl0ZXN0CisK
K2Zyb20gdGVzdHMuc3VwcG9ydC5pbmxpbmUgaW1wb3J0IGlubGluZQorCisKK2RlZiB0ZXN0X3Nl
dHNfaW5zZXJ0aW9uX3BvaW50X3RvX2VuZChzZXNzaW9uKToKKyAgICBzZXNzaW9uLnVybCA9IGlu
bGluZSgnPGRpdiBjb250ZW50ZWRpdGFibGU9dHJ1ZT5IZWxsbyw8L2Rpdj4nKQorICAgIGlucHV0
ID0gc2Vzc2lvbi5maW5kLmNzcygiZGl2IiwgYWxsPUZhbHNlKQorICAgIGlucHV0LnNlbmRfa2V5
cygnIHdvcmxkIScpCisgICAgdGV4dCA9IHNlc3Npb24uZXhlY3V0ZV9zY3JpcHQoJ3JldHVybiBh
cmd1bWVudHNbMF0uaW5uZXJUZXh0JywgYXJncz1baW5wdXRdKQorICAgIGFzc2VydCAiSGVsbG8s
IHdvcmxkISIgPT0gdGV4dC5zdHJpcCgpCisKKworIyAxMi4gTGV0IGN1cnJlbnQgdGV4dCBsZW5n
dGggYmUgdGhlIGVsZW1lbnTigJlzIGxlbmd0aC4KKyMKKyMgMTMuIFNldCB0aGUgdGV4dCBpbnNl
cnRpb24gY2FyZXQgdXNpbmcgc2V0IHNlbGVjdGlvbiByYW5nZSB1c2luZyBjdXJyZW50CisjICAg
ICB0ZXh0IGxlbmd0aCBmb3IgYm90aCB0aGUgc3RhcnQgYW5kIGVuZCBwYXJhbWV0ZXJzLgorZGVm
IHRlc3Rfc2V0c19pbnNlcnRpb25fcG9pbnRfdG9fYWZ0ZXJfbGFzdF90ZXh0X25vZGUoc2Vzc2lv
bik6CisgICAgc2Vzc2lvbi51cmwgPSBpbmxpbmUoJzxkaXYgY29udGVudGVkaXRhYmxlPXRydWU+
SGVsPHNwYW4+bG88L3NwYW4+LDwvZGl2PicpCisgICAgaW5wdXQgPSBzZXNzaW9uLmZpbmQuY3Nz
KCJkaXYiLCBhbGw9RmFsc2UpCisgICAgaW5wdXQuc2VuZF9rZXlzKCIgd29ybGQhIikKKyAgICB0
ZXh0ID0gc2Vzc2lvbi5leGVjdXRlX3NjcmlwdCgicmV0dXJuIGFyZ3VtZW50c1swXS5pbm5lclRl
eHQiLCBhcmdzPVtpbnB1dF0pCisgICAgYXNzZXJ0ICJIZWxsbywgd29ybGQhIiA9PSB0ZXh0LnN0
cmlwKCkKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIv
dGVzdHMvaW50ZXJmYWNlLmh0bWwgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJp
dmVyL3Rlc3RzL2ludGVyZmFjZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi4xNDNhODY0M2YzYwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2lt
cG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvaW50ZXJmYWNlLmh0bWwKQEAgLTAsMCArMSwxNSBA
QAorPCFkb2N0eXBlIGh0bWw+Cis8bWV0YSBjaGFyc2V0PXV0Zi04PgorPHRpdGxlPldlYkRyaXZl
ciBpbnRlcmZhY2UgdGVzdDwvdGl0bGU+Cis8c2NyaXB0IHNyYz0vcmVzb3VyY2VzL3Rlc3RoYXJu
ZXNzLmpzPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9L3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9y
dC5qcz48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPS9yZXNvdXJjZXMvV2ViSURMUGFyc2VyLmpzPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9L3Jlc291cmNlcy9pZGxoYXJuZXNzLmpzPjwvc2NyaXB0Pgor
Cis8c2NyaXB0PgordmFyIHQgPSBuZXcgSWRsQXJyYXkoKTsKK3QuYWRkX3VudGVzdGVkX2lkbHMo
ImludGVyZmFjZSBOYXZpZ2F0b3Ige307Iik7Cit0LmFkZF9pZGxzKCJwYXJ0aWFsIGludGVyZmFj
ZSBOYXZpZ2F0b3IgeyByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiB3ZWJkcml2ZXI7IH07Iik7
Cit0LmFkZF9vYmplY3RzKHtOYXZpZ2F0b3I6IFsibmF2aWdhdG9yIl19KTsKK3QudGVzdCgpOwor
PC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJp
dmVyL3Rlc3RzL21pbmltaXplX3dpbmRvdy5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWJkcml2ZXIvdGVzdHMvbWluaW1pemVfd2luZG93LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwLi4zYzdiZDAwNmMwYQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRy
aXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvbWluaW1pemVfd2luZG93LnB5
CkBAIC0wLDAgKzEsNzMgQEAKK2Zyb20gdGVzdHMuc3VwcG9ydC5pbmxpbmUgaW1wb3J0IGlubGlu
ZQorZnJvbSB0ZXN0cy5zdXBwb3J0LmFzc2VydHMgaW1wb3J0IGFzc2VydF9lcnJvciwgYXNzZXJ0
X3N1Y2Nlc3MKKworCithbGVydF9kb2MgPSBpbmxpbmUoIjxzY3JpcHQ+d2luZG93LmFsZXJ0KCk8
L3NjcmlwdD4iKQorCisKK2RlZiBtaW5pbWl6ZShzZXNzaW9uKToKKyAgICByZXR1cm4gc2Vzc2lv
bi50cmFuc3BvcnQuc2VuZCgiUE9TVCIsICJzZXNzaW9uLyVzL3dpbmRvdy9taW5pbWl6ZSIgJSBz
ZXNzaW9uLnNlc3Npb25faWQpCisKKworIyAxMC43LjQgTWluaW1pemUgV2luZG93CisKKworZGVm
IHRlc3RfbWluaW1pemVfbm9fYnJvd3NpbmdfY29udGV4dChzZXNzaW9uLCBjcmVhdGVfd2luZG93
KToKKyAgICAjIHN0ZXAgMQorICAgIHNlc3Npb24ud2luZG93X2hhbmRsZSA9IGNyZWF0ZV93aW5k
b3coKQorICAgIHNlc3Npb24uY2xvc2UoKQorICAgIHJlc3BvbnNlID0gbWluaW1pemUoc2Vzc2lv
bikKKyAgICBhc3NlcnRfZXJyb3IocmVzcG9uc2UsICJubyBzdWNoIHdpbmRvdyIpCisKKworZGVm
IHRlc3RfaGFuZGxlX3VzZXJfcHJvbXB0KHNlc3Npb24pOgorICAgICMgc3RlcCAyCisgICAgc2Vz
c2lvbi51cmwgPSBhbGVydF9kb2MKKyAgICByZXNwb25zZSA9IG1pbmltaXplKHNlc3Npb24pCisg
ICAgYXNzZXJ0X2Vycm9yKHJlc3BvbnNlLCAidW5leHBlY3RlZCBhbGVydCBvcGVuIikKKworCitk
ZWYgdGVzdF9taW5pbWl6ZShzZXNzaW9uKToKKyAgICBhc3NlcnQgc2Vzc2lvbi53aW5kb3cuc3Rh
dGUgPT0gIm5vcm1hbCIKKworICAgICMgc3RlcCA0CisgICAgcmVzcG9uc2UgPSBtaW5pbWl6ZShz
ZXNzaW9uKQorICAgIGFzc2VydF9zdWNjZXNzKHJlc3BvbnNlKQorCisgICAgYXNzZXJ0IHNlc3Np
b24ud2luZG93LnN0YXRlID09ICJtaW5pbWl6ZWQiCisKKworZGVmIHRlc3RfcGF5bG9hZChzZXNz
aW9uKToKKyAgICBhc3NlcnQgc2Vzc2lvbi53aW5kb3cuc3RhdGUgPT0gIm5vcm1hbCIKKworICAg
IHJlc3BvbnNlID0gbWluaW1pemUoc2Vzc2lvbikKKworICAgICMgc3RlcCA1CisgICAgYXNzZXJ0
IHJlc3BvbnNlLnN0YXR1cyA9PSAyMDAKKyAgICBhc3NlcnQgaXNpbnN0YW5jZShyZXNwb25zZS5i
b2R5WyJ2YWx1ZSJdLCBkaWN0KQorCisgICAgdmFsdWUgPSByZXNwb25zZS5ib2R5WyJ2YWx1ZSJd
CisgICAgYXNzZXJ0ICJ3aWR0aCIgaW4gdmFsdWUKKyAgICBhc3NlcnQgImhlaWdodCIgaW4gdmFs
dWUKKyAgICBhc3NlcnQgIngiIGluIHZhbHVlCisgICAgYXNzZXJ0ICJ5IiBpbiB2YWx1ZQorICAg
IGFzc2VydCAic3RhdGUiIGluIHZhbHVlCisgICAgYXNzZXJ0IGlzaW5zdGFuY2UodmFsdWVbIndp
ZHRoIl0sIChpbnQsIGZsb2F0KSkKKyAgICBhc3NlcnQgaXNpbnN0YW5jZSh2YWx1ZVsiaGVpZ2h0
Il0sIChpbnQsIGZsb2F0KSkKKyAgICBhc3NlcnQgaXNpbnN0YW5jZSh2YWx1ZVsieCJdLCAoaW50
LCBmbG9hdCkpCisgICAgYXNzZXJ0IGlzaW5zdGFuY2UodmFsdWVbInkiXSwgKGludCwgZmxvYXQp
KQorICAgIGFzc2VydCBpc2luc3RhbmNlKHZhbHVlWyJzdGF0ZSJdLCBiYXNlc3RyaW5nKQorCisg
ICAgYXNzZXJ0IHNlc3Npb24ud2luZG93LnN0YXRlID09ICJtaW5pbWl6ZWQiCisKKworZGVmIHRl
c3RfbWluaW1pemVfdHdpY2VfaXNfaWRlbXBvdGVudChzZXNzaW9uKToKKyAgICBhc3NlcnQgc2Vz
c2lvbi5leGVjdXRlX3NjcmlwdCgicmV0dXJuIGRvY3VtZW50LmhpZGRlbiIpIGlzIEZhbHNlCisK
KyAgICBmaXJzdF9yZXNwb25zZSA9IG1pbmltaXplKHNlc3Npb24pCisgICAgYXNzZXJ0X3N1Y2Nl
c3MoZmlyc3RfcmVzcG9uc2UpCisgICAgYXNzZXJ0IHNlc3Npb24uZXhlY3V0ZV9zY3JpcHQoInJl
dHVybiBkb2N1bWVudC5oaWRkZW4iKSBpcyBUcnVlCisKKyAgICBzZWNvbmRfcmVzcG9uc2UgPSBt
aW5pbWl6ZShzZXNzaW9uKQorICAgIGFzc2VydF9zdWNjZXNzKHNlY29uZF9yZXNwb25zZSkKKyAg
ICBhc3NlcnQgc2Vzc2lvbi5leGVjdXRlX3NjcmlwdCgicmV0dXJuIGRvY3VtZW50LmhpZGRlbiIp
IGlzIFRydWUKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2
ZXIvdGVzdHMvbmF2aWdhdGlvbi9jdXJyZW50X3VybC5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9y
dGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvbmF2aWdhdGlvbi9jdXJyZW50X3VybC5weQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDVlNDYyZmI4ZTEKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL25hdmln
YXRpb24vY3VycmVudF91cmwucHkKQEAgLTAsMCArMSwxMDIgQEAKK2ltcG9ydCBqc29uCitpbXBv
cnQgcHl0ZXN0CitpbXBvcnQgdHlwZXMKKworZnJvbSB0ZXN0cy5zdXBwb3J0LmlubGluZSBpbXBv
cnQgaW5saW5lCitmcm9tIHRlc3RzLnN1cHBvcnQuYXNzZXJ0cyBpbXBvcnQgYXNzZXJ0X2Vycm9y
LCBhc3NlcnRfc3VjY2VzcworCithbGVydF9kb2MgPSBpbmxpbmUoIjxzY3JpcHQ+d2luZG93LmFs
ZXJ0KCk8L3NjcmlwdD4iKQorZnJhbWVfZG9jID0gaW5saW5lKCI8cD5mcmFtZSIpCitvbmVfZnJh
bWVfZG9jID0gaW5saW5lKCI8aWZyYW1lIHNyYz0nJXMnPjwvaWZyYW1lPiIgJSBmcmFtZV9kb2Mp
Cit0d29fZnJhbWVzX2RvYyA9IGlubGluZSgiPGlmcmFtZSBzcmM9JyVzJz48L2lmcmFtZT4iICUg
b25lX2ZyYW1lX2RvYykKKworCisjIFRPRE8oYXRvKTogNy4xIEdldAorCisKK2RlZiB0ZXN0X2dl
dF9jdXJyZW50X3VybF9ub19icm93c2luZ19jb250ZXh0KHNlc3Npb24sIGNyZWF0ZV93aW5kb3cp
OgorICAgICMgNy4yIHN0ZXAgMQorICAgIHNlc3Npb24ud2luZG93X2hhbmRsZSA9IGNyZWF0ZV93
aW5kb3coKQorICAgIHNlc3Npb24uY2xvc2UoKQorCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFu
c3BvcnQuc2VuZCgiR0VUIiwgInNlc3Npb24vJXMvdXJsIiAlIHNlc3Npb24uc2Vzc2lvbl9pZCkK
KworICAgIGFzc2VydF9lcnJvcihyZXN1bHQsICJubyBzdWNoIHdpbmRvdyIpCisKKworZGVmIHRl
c3RfZ2V0X2N1cnJlbnRfdXJsX2FsZXJ0X3Byb21wdChzZXNzaW9uKToKKyAgICAjIDcuMiBzdGVw
IDIKKyAgICBzZXNzaW9uLnVybCA9IGFsZXJ0X2RvYworCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50
cmFuc3BvcnQuc2VuZCgiR0VUIiwgInNlc3Npb24vJXMvdXJsIiAlIHNlc3Npb24uc2Vzc2lvbl9p
ZCkKKworICAgIGFzc2VydF9lcnJvcihyZXN1bHQsICJ1bmV4cGVjdGVkIGFsZXJ0IG9wZW4iKQor
CitkZWYgdGVzdF9nZXRfY3VycmVudF91cmxfbWF0Y2hlc19sb2NhdGlvbihzZXNzaW9uKToKKyAg
ICAjIDcuMiBzdGVwIDMKKyAgICB1cmwgPSBzZXNzaW9uLmV4ZWN1dGVfc2NyaXB0KCJyZXR1cm4g
d2luZG93LmxvY2F0aW9uLmhyZWYiKQorICAgIGFzc2VydCBzZXNzaW9uLnVybCA9PSB1cmwKKwor
ZGVmIHRlc3RfZ2V0X2N1cnJlbnRfdXJsX3BheWxvYWQoc2Vzc2lvbik6CisgICAgIyA3LjIgc3Rl
cCA0LTUKKyAgICBzZXNzaW9uLnN0YXJ0KCkKKworICAgIHJlc3VsdCA9IHNlc3Npb24udHJhbnNw
b3J0LnNlbmQoIkdFVCIsICJzZXNzaW9uLyVzL3VybCIgJSBzZXNzaW9uLnNlc3Npb25faWQpCisK
KyAgICBhc3NlcnQgcmVzdWx0LnN0YXR1cyA9PSAyMDAKKyAgICBhc3NlcnQgaXNpbnN0YW5jZShy
ZXN1bHQuYm9keVsidmFsdWUiXSwgYmFzZXN0cmluZykKKworZGVmIHRlc3RfZ2V0X2N1cnJlbnRf
dXJsX3NwZWNpYWxfcGFnZXMoc2Vzc2lvbik6CisgICAgc2Vzc2lvbi51cmwgPSAiYWJvdXQ6Ymxh
bmsiCisKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLCAic2Vzc2lv
bi8lcy91cmwiICUgc2Vzc2lvbi5zZXNzaW9uX2lkKQorCisgICAgYXNzZXJ0X3N1Y2Nlc3MocmVz
dWx0LCAiYWJvdXQ6YmxhbmsiKQorCisjIFRPRE8oYXRvKTogVGhpcyB0ZXN0IHJlcXVpcmVzIG1v
ZGlmaWNhdGlvbiB0byBwYXNzIG9uIFdpbmRvd3MKK2RlZiB0ZXN0X2dldF9jdXJyZW50X3VybF9m
aWxlX3Byb3RvY29sKHNlc3Npb24pOgorICAgICMgdGVzdHMgdGhhdCB0aGUgYnJvd3NpbmcgY29u
dGV4dCByZW1haW5zIHRoZSBzYW1lCisgICAgIyB3aGVuIG5hdmlnYXRlZCBwcml2aWxlZ2VkIGRv
Y3VtZW50cworICAgIHNlc3Npb24udXJsID0gImZpbGU6Ly8vIgorCisgICAgcmVzdWx0ID0gc2Vz
c2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwgInNlc3Npb24vJXMvdXJsIiAlIHNlc3Npb24uc2Vz
c2lvbl9pZCkKKworICAgIGFzc2VydF9zdWNjZXNzKHJlc3VsdCwgImZpbGU6Ly8vIikKKworIyBU
T0RPKGF0byk6IFRlc3QgZm9yIGh0dHA6Ly8gYW5kIGh0dHBzOi8vIHByb3RvY29scy4KKyMgV2Ug
bmVlZCB0byBleHBvc2UgYSBmaXh0dXJlIGZvciBhY2Nlc3NpbmcKKyMgZG9jdW1lbnRzIHNlcnZl
ZCBieSB3cHRzZXJ2ZSBpbiBvcmRlciB0byB0ZXN0IHRoaXMuCisKK2RlZiB0ZXN0X3NldF9tYWxm
b3JtZWRfdXJsKHNlc3Npb24pOgorICAgIHJlc3VsdCA9IHNlc3Npb24udHJhbnNwb3J0LnNlbmQo
IlBPU1QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlc3Npb24vJXMv
dXJsIiAlIHNlc3Npb24uc2Vzc2lvbl9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHsidXJsIjogImZvbyJ9KQorCisgICAgYXNzZXJ0X2Vycm9yKHJlc3VsdCwgImludmFs
aWQgYXJndW1lbnQiKQorCitkZWYgdGVzdF9nZXRfY3VycmVudF91cmxfYWZ0ZXJfbW9kaWZpZWRf
bG9jYXRpb24oc2Vzc2lvbik6CisgICAgc2Vzc2lvbi5leGVjdXRlX3NjcmlwdCgid2luZG93Lmxv
Y2F0aW9uLmhyZWYgPSAnYWJvdXQ6Ymxhbmsjd2RfdGVzdF9tb2RpZmljYXRpb24nIikKKworICAg
IHJlc3VsdCA9IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIkdFVCIsICJzZXNzaW9uLyVzL3VybCIg
JSBzZXNzaW9uLnNlc3Npb25faWQpCisKKyAgICBhc3NlcnRfc3VjY2VzcyhyZXN1bHQsICJhYm91
dDpibGFuayN3ZF90ZXN0X21vZGlmaWNhdGlvbiIpCisKK2RlZiB0ZXN0X2dldF9jdXJyZW50X3Vy
bF9uZXN0ZWRfYnJvd3NpbmdfY29udGV4dChzZXNzaW9uLCBjcmVhdGVfZnJhbWUpOgorICAgIHNl
c3Npb24udXJsID0gImFib3V0OmJsYW5rI3dkX2Zyb21fd2l0aGluX2ZyYW1lIgorICAgIHNlc3Np
b24uc3dpdGNoX2ZyYW1lKGNyZWF0ZV9mcmFtZSgpKQorCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50
cmFuc3BvcnQuc2VuZCgiR0VUIiwgInNlc3Npb24vJXMvdXJsIiAlIHNlc3Npb24uc2Vzc2lvbl9p
ZCkKKworICAgIGFzc2VydF9zdWNjZXNzKHJlc3VsdCwgImFib3V0OmJsYW5rI3dkX2Zyb21fd2l0
aGluX2ZyYW1lIikKKworZGVmIHRlc3RfZ2V0X2N1cnJlbnRfdXJsX25lc3RlZF9icm93c2luZ19j
b250ZXh0cyhzZXNzaW9uKToKKyAgICBzZXNzaW9uLnVybCA9IHR3b19mcmFtZXNfZG9jCisgICAg
dG9wX2xldmVsX3VybCA9IHNlc3Npb24udXJsCisKKyAgICBvdXRlcl9mcmFtZSA9IHNlc3Npb24u
ZmluZC5jc3MoImlmcmFtZSIsIGFsbD1GYWxzZSkKKyAgICBzZXNzaW9uLnN3aXRjaF9mcmFtZShv
dXRlcl9mcmFtZSkKKworICAgIGlubmVyX2ZyYW1lID0gc2Vzc2lvbi5maW5kLmNzcygiaWZyYW1l
IiwgYWxsPUZhbHNlKQorICAgIHNlc3Npb24uc3dpdGNoX2ZyYW1lKGlubmVyX2ZyYW1lKQorCisg
ICAgYXNzZXJ0IHNlc3Npb24udXJsID09IHRvcF9sZXZlbF91cmwKZGlmZiAtLWdpdCBhL1dlYkRy
aXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvbmF2aWdhdGlvbi9nZXRfdGl0
bGUucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL25hdmln
YXRpb24vZ2V0X3RpdGxlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li5jNDY1OWY5YjlmNwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVk
L3czYy93ZWJkcml2ZXIvdGVzdHMvbmF2aWdhdGlvbi9nZXRfdGl0bGUucHkKQEAgLTAsMCArMSwy
ODIgQEAKK2ltcG9ydCBweXRlc3QKK2ltcG9ydCB0aW1lCisKK2Zyb20gdGVzdHMuc3VwcG9ydC5h
c3NlcnRzIGltcG9ydCBhc3NlcnRfZXJyb3IsIGFzc2VydF9zdWNjZXNzLCBhc3NlcnRfZGlhbG9n
X2hhbmRsZWQKK2Zyb20gdGVzdHMuc3VwcG9ydC5maXh0dXJlcyBpbXBvcnQgY3JlYXRlX2RpYWxv
ZworZnJvbSB0ZXN0cy5zdXBwb3J0LmlubGluZSBpbXBvcnQgaW5saW5lCisKK2RlZiByZWFkX2ds
b2JhbChzZXNzaW9uLCBuYW1lKToKKyAgICByZXR1cm4gc2Vzc2lvbi5leGVjdXRlX3NjcmlwdCgi
cmV0dXJuICVzOyIgJSBuYW1lKQorCisjIDEuIElmIHRoZSBjdXJyZW50IHRvcC1sZXZlbCBicm93
c2luZyBjb250ZXh0IGlzIG5vIGxvbmdlciBvcGVuLCByZXR1cm4gZXJyb3IKKyMgICAgd2l0aCBl
cnJvciBjb2RlIG5vIHN1Y2ggd2luZG93LgorZGVmIHRlc3RfdGl0bGVfZnJvbV9jbG9zZWRfY29u
dGV4dChzZXNzaW9uLCBjcmVhdGVfd2luZG93KToKKyAgICBuZXdfd2luZG93ID0gY3JlYXRlX3dp
bmRvdygpCisgICAgc2Vzc2lvbi53aW5kb3dfaGFuZGxlID0gbmV3X3dpbmRvdworICAgIHNlc3Np
b24uY2xvc2UoKQorCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXNzaW9uLyVzL3RpdGxlIiAl
IHNlc3Npb24uc2Vzc2lvbl9pZCkKKworICAgIGFzc2VydF9lcnJvcihyZXN1bHQsICJubyBzdWNo
IHdpbmRvdyIpCisKKyMgWy4uLl0KKyMgMi4gSGFuZGxlIGFueSB1c2VyIHByb21wdHMgYW5kIHJl
dHVybiBpdHMgdmFsdWUgaWYgaXQgaXMgYW4gZXJyb3IuCisjIFsuLi5dCisjIEluIG9yZGVyIHRv
IGhhbmRsZSBhbnkgdXNlciBwcm9tcHRzIGEgcmVtb3RlIGVuZCBtdXN0IHRha2UgdGhlIGZvbGxv
d2luZworIyBzdGVwczoKKyMgMi4gUnVuIHRoZSBzdWJzdGVwcyBvZiB0aGUgZmlyc3QgbWF0Y2hp
bmcgdXNlciBwcm9tcHQgaGFuZGxlcjoKKyMKKyMgICAgWy4uLl0KKyMgICAgLSBkaXNtaXNzIHN0
YXRlCisjICAgICAgMS4gRGlzbWlzcyB0aGUgY3VycmVudCB1c2VyIHByb21wdC4KKyMgICAgWy4u
Ll0KKyMKKyMgMy4gUmV0dXJuIHN1Y2Nlc3MuCitkZWYgdGVzdF90aXRsZV9oYW5kbGVfcHJvbXB0
X2Rpc21pc3MobmV3X3Nlc3Npb24pOgorICAgIF8sIHNlc3Npb24gPSBuZXdfc2Vzc2lvbih7ImFs
d2F5c01hdGNoIjogeyJ1bmhhbmRsZWRQcm9tcHRCZWhhdmlvciI6ICJkaXNtaXNzIn19KQorICAg
IHNlc3Npb24udXJsID0gaW5saW5lKCI8dGl0bGU+V0QgZG9jIHRpdGxlPC90aXRsZT4iKQorCisg
ICAgZXhwZWN0ZWRfdGl0bGUgPSByZWFkX2dsb2JhbChzZXNzaW9uLCAiZG9jdW1lbnQudGl0bGUi
KQorICAgIGNyZWF0ZV9kaWFsb2coc2Vzc2lvbikoImFsZXJ0IiwgdGV4dD0iZGlzbWlzcyAjMSIs
IHJlc3VsdF92YXI9ImRpc21pc3MxIikKKworICAgIHJlc3VsdCA9IHNlc3Npb24udHJhbnNwb3J0
LnNlbmQoIkdFVCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2Vzc2lv
bi8lcy90aXRsZSIgJSBzZXNzaW9uLnNlc3Npb25faWQpCisKKyAgICBhc3NlcnRfc3VjY2Vzcyhy
ZXN1bHQsIGV4cGVjdGVkX3RpdGxlKQorICAgIGFzc2VydF9kaWFsb2dfaGFuZGxlZChzZXNzaW9u
LCAiZGlzbWlzcyAjMSIpCisgICAgYXNzZXJ0IHJlYWRfZ2xvYmFsKHNlc3Npb24sICJkaXNtaXNz
MSIpID09IE5vbmUKKworICAgIGV4cGVjdGVkX3RpdGxlID0gcmVhZF9nbG9iYWwoc2Vzc2lvbiwg
ImRvY3VtZW50LnRpdGxlIikKKyAgICBjcmVhdGVfZGlhbG9nKHNlc3Npb24pKCJjb25maXJtIiwg
dGV4dD0iZGlzbWlzcyAjMiIsIHJlc3VsdF92YXI9ImRpc21pc3MyIikKKworICAgIHJlc3VsdCA9
IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIkdFVCIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAic2Vzc2lvbi8lcy90aXRsZSIgJSBzZXNzaW9uLnNlc3Npb25faWQpCisKKyAg
ICBhc3NlcnRfc3VjY2VzcyhyZXN1bHQsIGV4cGVjdGVkX3RpdGxlKQorICAgIGFzc2VydF9kaWFs
b2dfaGFuZGxlZChzZXNzaW9uLCAiZGlzbWlzcyAjMiIpCisgICAgYXNzZXJ0IHJlYWRfZ2xvYmFs
KHNlc3Npb24sICJkaXNtaXNzMiIpID09IE5vbmUKKworICAgIGV4cGVjdGVkX3RpdGxlID0gcmVh
ZF9nbG9iYWwoc2Vzc2lvbiwgImRvY3VtZW50LnRpdGxlIikKKyAgICBjcmVhdGVfZGlhbG9nKHNl
c3Npb24pKCJwcm9tcHQiLCB0ZXh0PSJkaXNtaXNzICMzIiwgcmVzdWx0X3Zhcj0iZGlzbWlzczMi
KQorCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXNzaW9uLyVzL3RpdGxlIiAlIHNlc3Npb24u
c2Vzc2lvbl9pZCkKKworICAgIGFzc2VydF9zdWNjZXNzKHJlc3VsdCwgZXhwZWN0ZWRfdGl0bGUp
CisgICAgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNlc3Npb24sICJkaXNtaXNzICMzIikKKyAgICBh
c3NlcnQgcmVhZF9nbG9iYWwoc2Vzc2lvbiwgImRpc21pc3MzIikgPT0gTm9uZQorCisjIFsuLi5d
CisjIDIuIEhhbmRsZSBhbnkgdXNlciBwcm9tcHRzIGFuZCByZXR1cm4gaXRzIHZhbHVlIGlmIGl0
IGlzIGFuIGVycm9yLgorIyBbLi4uXQorIyBJbiBvcmRlciB0byBoYW5kbGUgYW55IHVzZXIgcHJv
bXB0cyBhIHJlbW90ZSBlbmQgbXVzdCB0YWtlIHRoZSBmb2xsb3dpbmcKKyMgc3RlcHM6CisjIDIu
IFJ1biB0aGUgc3Vic3RlcHMgb2YgdGhlIGZpcnN0IG1hdGNoaW5nIHVzZXIgcHJvbXB0IGhhbmRs
ZXI6CisjCisjICAgIFsuLi5dCisjICAgIC0gYWNjZXB0IHN0YXRlCisjICAgICAgMS4gQWNjZXB0
IHRoZSBjdXJyZW50IHVzZXIgcHJvbXB0LgorIyAgICBbLi4uXQorIworIyAzLiBSZXR1cm4gc3Vj
Y2Vzcy4KK2RlZiB0ZXN0X3RpdGxlX2hhbmRsZV9wcm9tcHRfYWNjZXB0KG5ld19zZXNzaW9uKToK
KyAgICBfLCBzZXNzaW9uID0gbmV3X3Nlc3Npb24oeyJhbHdheXNNYXRjaCI6IHsidW5oYW5kbGVk
UHJvbXB0QmVoYXZpb3IiOiAiYWNjZXB0In19KQorICAgIHNlc3Npb24udXJsID0gaW5saW5lKCI8
dGl0bGU+V0QgZG9jIHRpdGxlPC90aXRsZT4iKQorICAgIGNyZWF0ZV9kaWFsb2coc2Vzc2lvbiko
ImFsZXJ0IiwgdGV4dD0iYWNjZXB0ICMxIiwgcmVzdWx0X3Zhcj0iYWNjZXB0MSIpCisKKyAgICBl
eHBlY3RlZF90aXRsZSA9IHJlYWRfZ2xvYmFsKHNlc3Npb24sICJkb2N1bWVudC50aXRsZSIpCisg
ICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJzZXNzaW9uLyVzL3RpdGxlIiAlIHNlc3Npb24uc2Vzc2lv
bl9pZCkKKworICAgIGFzc2VydF9zdWNjZXNzKHJlc3VsdCwgZXhwZWN0ZWRfdGl0bGUpCisgICAg
YXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNlc3Npb24sICJhY2NlcHQgIzEiKQorICAgIGFzc2VydCBy
ZWFkX2dsb2JhbChzZXNzaW9uLCAiYWNjZXB0MSIpID09IE5vbmUKKworICAgIGV4cGVjdGVkX3Rp
dGxlID0gcmVhZF9nbG9iYWwoc2Vzc2lvbiwgImRvY3VtZW50LnRpdGxlIikKKyAgICBjcmVhdGVf
ZGlhbG9nKHNlc3Npb24pKCJjb25maXJtIiwgdGV4dD0iYWNjZXB0ICMyIiwgcmVzdWx0X3Zhcj0i
YWNjZXB0MiIpCisKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlc3Npb24vJXMvdGl0bGUiICUg
c2Vzc2lvbi5zZXNzaW9uX2lkKQorCisgICAgYXNzZXJ0X3N1Y2Nlc3MocmVzdWx0LCBleHBlY3Rl
ZF90aXRsZSkKKyAgICBhc3NlcnRfZGlhbG9nX2hhbmRsZWQoc2Vzc2lvbiwgImFjY2VwdCAjMiIp
CisgICAgYXNzZXJ0IHJlYWRfZ2xvYmFsKHNlc3Npb24sICJhY2NlcHQyIiksIFRydWUKKworICAg
IGV4cGVjdGVkX3RpdGxlID0gcmVhZF9nbG9iYWwoc2Vzc2lvbiwgImRvY3VtZW50LnRpdGxlIikK
KyAgICBjcmVhdGVfZGlhbG9nKHNlc3Npb24pKCJwcm9tcHQiLCB0ZXh0PSJhY2NlcHQgIzMiLCBy
ZXN1bHRfdmFyPSJhY2NlcHQzIikKKworICAgIHJlc3VsdCA9IHNlc3Npb24udHJhbnNwb3J0LnNl
bmQoIkdFVCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2Vzc2lvbi8l
cy90aXRsZSIgJSBzZXNzaW9uLnNlc3Npb25faWQpCisKKyAgICBhc3NlcnRfc3VjY2VzcyhyZXN1
bHQsIGV4cGVjdGVkX3RpdGxlKQorICAgIGFzc2VydF9kaWFsb2dfaGFuZGxlZChzZXNzaW9uLCAi
YWNjZXB0ICMzIikKKyAgICBhc3NlcnQgcmVhZF9nbG9iYWwoc2Vzc2lvbiwgImFjY2VwdDMiKSA9
PSAiIgorCisjIFsuLi5dCisjIDIuIEhhbmRsZSBhbnkgdXNlciBwcm9tcHRzIGFuZCByZXR1cm4g
aXRzIHZhbHVlIGlmIGl0IGlzIGFuIGVycm9yLgorIyBbLi4uXQorIyBJbiBvcmRlciB0byBoYW5k
bGUgYW55IHVzZXIgcHJvbXB0cyBhIHJlbW90ZSBlbmQgbXVzdCB0YWtlIHRoZSBmb2xsb3dpbmcK
KyMgc3RlcHM6CisjIDIuIFJ1biB0aGUgc3Vic3RlcHMgb2YgdGhlIGZpcnN0IG1hdGNoaW5nIHVz
ZXIgcHJvbXB0IGhhbmRsZXI6CisjCisjICAgIFsuLi5dCisjICAgIC0gbWlzc2luZyB2YWx1ZSBk
ZWZhdWx0IHN0YXRlCisjICAgIC0gbm90IGluIHRoZSB0YWJsZSBvZiBzaW1wbGUgZGlhbG9ncwor
IyAgICAgIDEuIERpc21pc3MgdGhlIGN1cnJlbnQgdXNlciBwcm9tcHQuCisjICAgICAgMi4gUmV0
dXJuIGVycm9yIHdpdGggZXJyb3IgY29kZSB1bmV4cGVjdGVkIGFsZXJ0IG9wZW4uCitkZWYgdGVz
dF90aXRsZV9oYW5kbGVfcHJvbXB0X21pc3NpbmdfdmFsdWUoc2Vzc2lvbiwgY3JlYXRlX2RpYWxv
Zyk6CisgICAgc2Vzc2lvbi51cmwgPSBpbmxpbmUoIjx0aXRsZT5XRCBkb2MgdGl0bGU8L3RpdGxl
PiIpCisgICAgY3JlYXRlX2RpYWxvZygiYWxlcnQiLCB0ZXh0PSJkaXNtaXNzICMxIiwgcmVzdWx0
X3Zhcj0iZGlzbWlzczEiKQorCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgi
R0VUIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXNzaW9uLyVzL3Rp
dGxlIiAlIHNlc3Npb24uc2Vzc2lvbl9pZCkKKworICAgIGFzc2VydF9lcnJvcihyZXN1bHQsICJ1
bmV4cGVjdGVkIGFsZXJ0IG9wZW4iKQorICAgIGFzc2VydF9kaWFsb2dfaGFuZGxlZChzZXNzaW9u
LCAiZGlzbWlzcyAjMSIpCisgICAgYXNzZXJ0IHJlYWRfZ2xvYmFsKHNlc3Npb24sICJhY2NlcHQx
IikgPT0gTm9uZQorCisgICAgY3JlYXRlX2RpYWxvZygiY29uZmlybSIsIHRleHQ9ImRpc21pc3Mg
IzIiLCByZXN1bHRfdmFyPSJkaXNtaXNzMiIpCisKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5z
cG9ydC5zZW5kKCJHRVQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNl
c3Npb24vJXMvdGl0bGUiICUgc2Vzc2lvbi5zZXNzaW9uX2lkKQorCisgICAgYXNzZXJ0X2Vycm9y
KHJlc3VsdCwgInVuZXhwZWN0ZWQgYWxlcnQgb3BlbiIpCisgICAgYXNzZXJ0X2RpYWxvZ19oYW5k
bGVkKHNlc3Npb24sICJkaXNtaXNzICMyIikKKyAgICBhc3NlcnQgcmVhZF9nbG9iYWwoc2Vzc2lv
biwgImRpc21pc3MyIikgPT0gRmFsc2UKKworICAgIGNyZWF0ZV9kaWFsb2coInByb21wdCIsIHRl
eHQ9ImRpc21pc3MgIzMiLCByZXN1bHRfdmFyPSJkaXNtaXNzMyIpCisKKyAgICByZXN1bHQgPSBz
ZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgInNlc3Npb24vJXMvdGl0bGUiICUgc2Vzc2lvbi5zZXNzaW9uX2lkKQorCisgICAg
YXNzZXJ0X2Vycm9yKHJlc3VsdCwgInVuZXhwZWN0ZWQgYWxlcnQgb3BlbiIpCisgICAgYXNzZXJ0
X2RpYWxvZ19oYW5kbGVkKHNlc3Npb24sICJkaXNtaXNzICMzIikKKyAgICBhc3NlcnQgcmVhZF9n
bG9iYWwoc2Vzc2lvbiwgImRpc21pc3MzIikgPT0gTm9uZQorCisjIFRoZSBiZWhhdmlvciBvZiB0
aGUgYHdpbmRvdy5wcmludGAgZnVuY3Rpb24gaXMgcGxhdGZvcm0tZGVwZW5kZW50IGFuZCBtYXkg
bm90CisjIHRyaWdnZXIgdGhlIGNyZWF0aW9uIG9mIGEgZGlhbG9nIGF0IGFsbC4gVGhlcmVmb3Jl
LCB0aGlzIHRlc3Qgc2hvdWxkIG9ubHkgYmUKKyMgcnVuIGluIGNvbnRleHRzIHRoYXQgc3VwcG9y
dCB0aGUgZGlhbG9nIChhIGNvbmRpdGlvbiB0aGF0IG1heSBub3QgYmUKKyMgZGV0ZXJtaW5lZCBh
dXRvbWF0aWNhbGx5KS4KKyNkZWYgdGVzdF90aXRsZV93aXRoX25vbl9zaW1wbGVfZGlhbG9nKHNl
c3Npb24pOgorIyAgICBkb2N1bWVudCA9ICI8dGl0bGU+V2l0aCBub24tc2ltcGxlIGRpYWxvZzwv
dGl0bGU+PGgyPkhlbGxvPC9oMj4iCisjICAgIHNwYXduID0gIiIiCisjICAgICAgICB2YXIgZG9u
ZSA9IGFyZ3VtZW50c1swXTsKKyMgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisjICAg
ICAgICAgICAgZG9uZSgpOworIyAgICAgICAgfSwgMCk7CisjICAgICAgICBzZXRUaW1lb3V0KGZ1
bmN0aW9uKCkgeworIyAgICAgICAgICAgIHdpbmRvd1sncHJpbnQnXSgpOworIyAgICAgICAgfSwg
MCk7CisjICAgICIiIgorIyAgICBzZXNzaW9uLnVybCA9IGlubGluZShkb2N1bWVudCkKKyMgICAg
c2Vzc2lvbi5leGVjdXRlX2FzeW5jX3NjcmlwdChzcGF3bikKKyMKKyMgICAgcmVzdWx0ID0gc2Vz
c2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAic2Vzc2lvbi8lcy90aXRsZSIgJSBzZXNzaW9uLnNlc3Npb25faWQpCisjICAgIGFz
c2VydF9lcnJvcihyZXN1bHQsICJ1bmV4cGVjdGVkIGFsZXJ0IG9wZW4iKQorCisjIFsuLi5dCisj
IDMuIExldCB0aXRsZSBiZSB0aGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgdGl0bGUgSURMIGF0dHJp
YnV0ZSBvZiB0aGUgY3VycmVudAorIyAgICB0b3AtbGV2ZWwgYnJvd3NpbmcgY29udGV4dCdzIGFj
dGl2ZSBkb2N1bWVudC4KKyMgNC4gUmV0dXJuIHN1Y2Nlc3Mgd2l0aCBkYXRhIHRpdGxlLgorIyBb
Li4uXQorIyBUaGUgdGl0bGUgYXR0cmlidXRlIG11c3QsIG9uIGdldHRpbmcsIHJ1biB0aGUgZm9s
bG93aW5nIGFsZ29yaXRobToKKyMgWy4uLl0KKyMgMi4gT3RoZXJ3aXNlLCBsZXQgdmFsdWUgYmUg
dGhlIGNoaWxkIHRleHQgY29udGVudCBvZiB0aGUgdGl0bGUgZWxlbWVudCBbLi4uXQorIyBbLi4u
XQorIyA0LiBSZXR1cm4gdmFsdWUuCitkZWYgdGVzdF90aXRsZV9mcm9tX3RvcF9jb250ZXh0KHNl
c3Npb24pOgorICAgIHNlc3Npb24udXJsID0gaW5saW5lKCI8dGl0bGU+Rm9vYmFyPC90aXRsZT48
aDI+SGVsbG88L2gyPiIpCisKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJH
RVQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlc3Npb24vJXMvdGl0
bGUiICUgc2Vzc2lvbi5zZXNzaW9uX2lkKQorICAgIGFzc2VydF9zdWNjZXNzKHJlc3VsdCwgcmVh
ZF9nbG9iYWwoc2Vzc2lvbiwgImRvY3VtZW50LnRpdGxlIikpCisKKyMgWy4uLl0KKyMgMy4gTGV0
IHRpdGxlIGJlIHRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSB0aXRsZSBJREwgYXR0cmlidXRlIG9m
IHRoZSBjdXJyZW50CisjICAgIHRvcC1sZXZlbCBicm93c2luZyBjb250ZXh0J3MgYWN0aXZlIGRv
Y3VtZW50LgorIyA0LiBSZXR1cm4gc3VjY2VzcyB3aXRoIGRhdGEgdGl0bGUuCisjIFsuLi5dCisj
IFRoZSB0aXRsZSBhdHRyaWJ1dGUgbXVzdCwgb24gZ2V0dGluZywgcnVuIHRoZSBmb2xsb3dpbmcg
YWxnb3JpdGhtOgorIyBbLi4uXQorIyAyLiBPdGhlcndpc2UsIGxldCB2YWx1ZSBiZSB0aGUgY2hp
bGQgdGV4dCBjb250ZW50IG9mIHRoZSB0aXRsZSBlbGVtZW50IFsuLi5dCisjCisjICAgIFRoZSB0
aXRsZSBlbGVtZW50IG9mIGEgZG9jdW1lbnQgaXMgdGhlIGZpcnN0IHRpdGxlIGVsZW1lbnQgaW4g
dGhlIGRvY3VtZW50CisjICAgIChpbiB0cmVlIG9yZGVyKSwgaWYgdGhlcmUgaXMgb25lLCBvciBu
dWxsIG90aGVyd2lzZS4KKyMKKyMgWy4uLl0KKyMgNC4gUmV0dXJuIHZhbHVlLgorZGVmIHRlc3Rf
dGl0bGVfd2l0aF9kdXBsaWNhdGVfZWxlbWVudChzZXNzaW9uKToKKyAgICBzZXNzaW9uLnVybCA9
IGlubGluZSgiPHRpdGxlPkZpcnN0PC90aXRsZT48dGl0bGU+U2Vjb25kPC90aXRsZT4iKQorCisg
ICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJzZXNzaW9uLyVzL3RpdGxlIiAlIHNlc3Npb24uc2Vzc2lv
bl9pZCkKKworICAgIGFzc2VydF9zdWNjZXNzKHJlc3VsdCwgcmVhZF9nbG9iYWwoc2Vzc2lvbiwg
ImRvY3VtZW50LnRpdGxlIikpCisKKyMgWy4uLl0KKyMgMy4gTGV0IHRpdGxlIGJlIHRoZSBpbml0
aWFsIHZhbHVlIG9mIHRoZSB0aXRsZSBJREwgYXR0cmlidXRlIG9mIHRoZSBjdXJyZW50CisjICAg
IHRvcC1sZXZlbCBicm93c2luZyBjb250ZXh0J3MgYWN0aXZlIGRvY3VtZW50LgorIyA0LiBSZXR1
cm4gc3VjY2VzcyB3aXRoIGRhdGEgdGl0bGUuCisjIFsuLi5dCisjIFRoZSB0aXRsZSBhdHRyaWJ1
dGUgbXVzdCwgb24gZ2V0dGluZywgcnVuIHRoZSBmb2xsb3dpbmcgYWxnb3JpdGhtOgorIyBbLi4u
XQorIyAyLiBPdGhlcndpc2UsIGxldCB2YWx1ZSBiZSB0aGUgY2hpbGQgdGV4dCBjb250ZW50IG9m
IHRoZSB0aXRsZSBlbGVtZW50LCBvcgorIyAgICB0aGUgZW1wdHkgc3RyaW5nIGlmIHRoZSB0aXRs
ZSBlbGVtZW50IGlzIG51bGwuCisjIFsuLi5dCisjIDQuIFJldHVybiB2YWx1ZS4KK2RlZiB0ZXN0
X3RpdGxlX3dpdGhvdXRfZWxlbWVudChzZXNzaW9uKToKKyAgICBzZXNzaW9uLnVybCA9IGlubGlu
ZSgiPGgyPkhlbGxvPC9oMj4iKQorCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2Vu
ZCgiR0VUIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXNzaW9uLyVz
L3RpdGxlIiAlIHNlc3Npb24uc2Vzc2lvbl9pZCkKKworICAgIGFzc2VydF9zdWNjZXNzKHJlc3Vs
dCwgcmVhZF9nbG9iYWwoc2Vzc2lvbiwgImRvY3VtZW50LnRpdGxlIikpCisKKyMgWy4uLl0KKyMg
My4gTGV0IHRpdGxlIGJlIHRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSB0aXRsZSBJREwgYXR0cmli
dXRlIG9mIHRoZSBjdXJyZW50CisjICAgIHRvcC1sZXZlbCBicm93c2luZyBjb250ZXh0J3MgYWN0
aXZlIGRvY3VtZW50LgorIyA0LiBSZXR1cm4gc3VjY2VzcyB3aXRoIGRhdGEgdGl0bGUuCitkZWYg
dGVzdF90aXRsZV9hZnRlcl9tb2RpZmljYXRpb24oc2Vzc2lvbik6CisgICAgc2Vzc2lvbi51cmwg
PSBpbmxpbmUoIjx0aXRsZT5Jbml0aWFsPC90aXRsZT48aDI+SGVsbG88L2gyPiIpCisgICAgc2Vz
c2lvbi5leGVjdXRlX3NjcmlwdCgiZG9jdW1lbnQudGl0bGUgPSAndXBkYXRlZCciKQorCisgICAg
cmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJzZXNzaW9uLyVzL3RpdGxlIiAlIHNlc3Npb24uc2Vzc2lvbl9p
ZCkKKworICAgIGFzc2VydF9zdWNjZXNzKHJlc3VsdCwgcmVhZF9nbG9iYWwoc2Vzc2lvbiwgImRv
Y3VtZW50LnRpdGxlIikpCisKKyMgWy4uLl0KKyMgMy4gTGV0IHRpdGxlIGJlIHRoZSBpbml0aWFs
IHZhbHVlIG9mIHRoZSB0aXRsZSBJREwgYXR0cmlidXRlIG9mIHRoZSBjdXJyZW50CisjICAgIHRv
cC1sZXZlbCBicm93c2luZyBjb250ZXh0J3MgYWN0aXZlIGRvY3VtZW50LgorIyA0LiBSZXR1cm4g
c3VjY2VzcyB3aXRoIGRhdGEgdGl0bGUuCisjIFsuLi5dCisjIFRoZSB0aXRsZSBhdHRyaWJ1dGUg
bXVzdCwgb24gZ2V0dGluZywgcnVuIHRoZSBmb2xsb3dpbmcgYWxnb3JpdGhtOgorIyBbLi4uXQor
IyAyLiBPdGhlcndpc2UsIGxldCB2YWx1ZSBiZSB0aGUgY2hpbGQgdGV4dCBjb250ZW50IG9mIHRo
ZSB0aXRsZSBlbGVtZW50IFsuLi5dCisjIDMuIFN0cmlwIGFuZCBjb2xsYXBzZSBBU0NJSSB3aGl0
ZXNwYWNlIGluIHZhbHVlLgorIyA0LiBSZXR1cm4gdmFsdWUuCitkZWYgdGVzdF90aXRsZV9zdHJp
cF9hbmRfY29sbGFwc2Uoc2Vzc2lvbik6CisgICAgZG9jdW1lbnQgPSAiPHRpdGxlPiAgIGEgYlx0
Y1xuZFx0IFxuIGVcdFxuIDwvdGl0bGU+PGgyPkhlbGxvPC9oMj4iCisgICAgc2Vzc2lvbi51cmwg
PSBpbmxpbmUoZG9jdW1lbnQpCisKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5k
KCJHRVQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlc3Npb24vJXMv
dGl0bGUiICUgc2Vzc2lvbi5zZXNzaW9uX2lkKQorCisgICAgYXNzZXJ0X3N1Y2Nlc3MocmVzdWx0
LCByZWFkX2dsb2JhbChzZXNzaW9uLCAiZG9jdW1lbnQudGl0bGUiKSkKKworIyBbLi4uXQorIyAz
LiBMZXQgdGl0bGUgYmUgdGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIHRpdGxlIElETCBhdHRyaWJ1
dGUgb2YgdGhlIGN1cnJlbnQKKyMgICAgdG9wLWxldmVsIGJyb3dzaW5nIGNvbnRleHQncyBhY3Rp
dmUgZG9jdW1lbnQuCisjIDQuIFJldHVybiBzdWNjZXNzIHdpdGggZGF0YSB0aXRsZS4KK2RlZiB0
ZXN0X3RpdGxlX2Zyb21fZnJhbWUoc2Vzc2lvbiwgY3JlYXRlX2ZyYW1lKToKKyAgICBzZXNzaW9u
LnVybCA9IGlubGluZSgiPHRpdGxlPlBhcmVudDwvdGl0bGU+cGFyZW50IikKKworICAgIHNlc3Np
b24uc3dpdGNoX2ZyYW1lKGNyZWF0ZV9mcmFtZSgpKQorICAgIHNlc3Npb24uc3dpdGNoX2ZyYW1l
KGNyZWF0ZV9mcmFtZSgpKQorCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgi
R0VUIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXNzaW9uLyVzL3Rp
dGxlIiAlIHNlc3Npb24uc2Vzc2lvbl9pZCkKKworICAgIGFzc2VydF9zdWNjZXNzKHJlc3VsdCwg
cmVhZF9nbG9iYWwoc2Vzc2lvbiwgImRvY3VtZW50LnRpdGxlIikpCmRpZmYgLS1naXQgYS9XZWJE
cml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL3Nlc3Npb25zL25ld19zZXNz
aW9uL2NvbmZ0ZXN0LnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90
ZXN0cy9zZXNzaW9ucy9uZXdfc2Vzc2lvbi9jb25mdGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uZDNlZTE5OWZiMjgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJE
cml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL3Nlc3Npb25zL25ld19zZXNz
aW9uL2NvbmZ0ZXN0LnB5CkBAIC0wLDAgKzEsMjIgQEAKK2ltcG9ydCBweXRlc3QKK2ltcG9ydCBz
eXMKKworaW1wb3J0IHdlYmRyaXZlcgorCisKK2RlZiBwcm9kdWN0KGEsIGIpOgorICAgIHJldHVy
biBbKGEsIGl0ZW0pIGZvciBpdGVtIGluIGJdCisKKworZGVmIGZsYXR0ZW4obCk6CisgICAgcmV0
dXJuIFtpdGVtIGZvciB4IGluIGwgZm9yIGl0ZW0gaW4geF0KKworQHB5dGVzdC5maXh0dXJlKHNj
b3BlPSJzZXNzaW9uIikKK2RlZiBwbGF0Zm9ybV9uYW1lKCk6CisgICAgcmV0dXJuIHsKKyAgICAg
ICAgImxpbnV4MiI6ICJsaW51eCIsCisgICAgICAgICJ3aW4zMiI6ICJ3aW5kb3dzIiwKKyAgICAg
ICAgImN5Z3dpbiI6ICJ3aW5kb3dzIiwKKyAgICAgICAgImRhcndpbiI6ICJtYWMiCisgICAgfS5n
ZXQoc3lzLnBsYXRmb3JtKQorCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViZHJpdmVyL3Rlc3RzL3Nlc3Npb25zL25ld19zZXNzaW9uL2NyZWF0ZS5weSBiL1dlYkRy
aXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvc2Vzc2lvbnMvbmV3X3Nlc3Np
b24vY3JlYXRlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41NzY2
ZGJkYThmZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93
ZWJkcml2ZXIvdGVzdHMvc2Vzc2lvbnMvbmV3X3Nlc3Npb24vY3JlYXRlLnB5CkBAIC0wLDAgKzEs
MjcgQEAKKyNNRVRBOiB0aW1lb3V0PWxvbmcKKworaW1wb3J0IHB5dGVzdAorCitmcm9tIGNvbmZ0
ZXN0IGltcG9ydCBwcm9kdWN0LCBmbGF0dGVuCisKKworIyBOb3RlIHRoYXQgd2UgY2FuIG9ubHkg
dGVzdCB0aGluZ3MgaGVyZSBhbGwgaW1wbGVtZW50YXRpb25zIG11c3Qgc3VwcG9ydAordmFsaWRf
ZGF0YSA9IFsKKyAgICAoImFjY2VwdEluc2VjdXJlQ2VydHMiLCBbRmFsc2UsIE5vbmVdKSwKKyAg
ICAoImJyb3dzZXJOYW1lIiwgW05vbmVdKSwKKyAgICAoImJyb3dzZXJWZXJzaW9uIiwgW05vbmVd
KSwKKyAgICAoInBsYXRmb3JtTmFtZSIsIFtOb25lXSksCisgICAgKCJwYWdlTG9hZFN0cmF0ZWd5
IiwgWyJub25lIiwgImVhZ2VyIiwgIm5vcm1hbCIsIE5vbmVdKSwKKyAgICAoInByb3h5IiwgW05v
bmVdKSwKKyAgICAoInVuaGFuZGxlZFByb21wdEJlaGF2aW9yIiwgWyJkaXNtaXNzIiwgImFjY2Vw
dCIsIE5vbmVdKSwKKyAgICAoInRlc3Q6ZXh0ZW5zaW9uIiwgW1RydWUsICJhYmMiLCAxMjMsIFtd
LCB7ImtleSI6ICJ2YWx1ZSJ9LCBOb25lXSksCitdCisKKworQHB5dGVzdC5tYXJrLnBhcmFtZXRy
aXplKCJib2R5IiwgW2xhbWJkYSBrZXksIHZhbHVlOiB7ImFsd2F5c01hdGNoIjoge2tleTogdmFs
dWV9fSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGEga2V5LCB2YWx1
ZTogeyJmaXJzdE1hdGNoIjogW3trZXk6IHZhbHVlfV19XSkKK0BweXRlc3QubWFyay5wYXJhbWV0
cml6ZSgia2V5LHZhbHVlIiwgZmxhdHRlbihwcm9kdWN0KCppdGVtKSBmb3IgaXRlbSBpbiB2YWxp
ZF9kYXRhKSkKK2RlZiB0ZXN0X3ZhbGlkKG5ld19zZXNzaW9uLCBib2R5LCBrZXksIHZhbHVlKToK
KyAgICByZXNwID0gbmV3X3Nlc3Npb24oeyJjYXBhYmlsaXRpZXMiOiBib2R5KGtleSwgdmFsdWUp
fSkKKworIyBDb250aW51ZWQgaW4gY3JlYXRlLTEucHkgdG8gYXZvaWQgdGltZW91dHMKZGlmZiAt
LWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvc2Vzc2lv
bnMvbmV3X3Nlc3Npb24vZGVmYXVsdF92YWx1ZXMucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL3Nlc3Npb25zL25ld19zZXNzaW9uL2RlZmF1bHRfdmFsdWVz
LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iZmU0MTQ0ZjVhMwot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIv
dGVzdHMvc2Vzc2lvbnMvbmV3X3Nlc3Npb24vZGVmYXVsdF92YWx1ZXMucHkKQEAgLTAsMCArMSw0
OCBAQAorIyBNRVRBOiB0aW1lb3V0PWxvbmcKKworaW1wb3J0IHV1aWQKKworaW1wb3J0IHB5dGVz
dAorCitmcm9tIHdlYmRyaXZlciBpbXBvcnQgZXJyb3IKKworCitkZWYgdGVzdF9iYXNpYyhuZXdf
c2Vzc2lvbik6CisgICAgcmVzcCwgXyA9IG5ld19zZXNzaW9uKHsiY2FwYWJpbGl0aWVzIjoge319
KQorICAgIGFzc2VydCBzZXQocmVzcC5rZXlzKCkpID09IHsic2Vzc2lvbklkIiwgImNhcGFiaWxp
dGllcyJ9CisKKworZGVmIHRlc3RfcmVwZWF0X25ld19zZXNzaW9uKG5ld19zZXNzaW9uKToKKyAg
ICByZXNwLCBfID0gbmV3X3Nlc3Npb24oeyJjYXBhYmlsaXRpZXMiOiB7fX0pCisgICAgd2l0aCBw
eXRlc3QucmFpc2VzKGVycm9yLlNlc3Npb25Ob3RDcmVhdGVkRXhjZXB0aW9uKToKKyAgICAgICAg
bmV3X3Nlc3Npb24oeyJjYXBhYmlsaXRpZXMiOiB7fX0pCisKKworZGVmIHRlc3Rfbm9fY2FwYWJp
bGl0ZXMobmV3X3Nlc3Npb24pOgorICAgIHdpdGggcHl0ZXN0LnJhaXNlcyhlcnJvci5JbnZhbGlk
QXJndW1lbnRFeGNlcHRpb24pOgorICAgICAgICBuZXdfc2Vzc2lvbih7fSkKKworCitkZWYgdGVz
dF9taXNzaW5nX2ZpcnN0X21hdGNoKG5ld19zZXNzaW9uKToKKyAgICByZXNwLCBfID0gbmV3X3Nl
c3Npb24oeyJjYXBhYmlsaXRpZXMiOiB7ImFsd2F5c01hdGNoIjoge319fSkKKworCitkZWYgdGVz
dF9taXNzaW5nX2Fsd2F5c19tYXRjaChuZXdfc2Vzc2lvbik6CisgICAgcmVzcCwgXyA9IG5ld19z
ZXNzaW9uKHsiY2FwYWJpbGl0aWVzIjogeyJmaXJzdE1hdGNoIjogW3t9XX19KQorCisKK2RlZiB0
ZXN0X2Rlc2lyZWQobmV3X3Nlc3Npb24pOgorICAgIHdpdGggcHl0ZXN0LnJhaXNlcyhlcnJvci5J
bnZhbGlkQXJndW1lbnRFeGNlcHRpb24pOgorICAgICAgICByZXNwLCBfID0gbmV3X3Nlc3Npb24o
eyJkZXNpcmVkQ2FwYmlsaXRpZXMiOiB7fX0pCisKKworZGVmIHRlc3RfaWdub3JlX25vbl9zcGVj
X2ZpZWxkc19pbl9jYXBhYmlsaXRpZXMobmV3X3Nlc3Npb24pOgorICAgIHJlc3AsIF8gPSBuZXdf
c2Vzc2lvbih7ImNhcGFiaWxpdGllcyI6IHsiZGVzaXJlZENhcGJpbGl0aWVzIjogeyJwYWdlTG9h
ZFN0cmF0ZWd5IjogImVhZ2VyIn19fSkKKyAgICBhc3NlcnQgcmVzcFsiY2FwYWJpbGl0aWVzIl1b
InBhZ2VMb2FkU3RyYXRlZ3kiXSA9PSAibm9ybWFsIgorCisKK2RlZiB0ZXN0X3ZhbGlkX2J1dF91
bm1hdGNoYWJsZV9rZXkobmV3X3Nlc3Npb24pOgorICAgIHJlc3AsIF8gPSBuZXdfc2Vzc2lvbih7
ImNhcGFiaWxpdGllcyI6IHsKKyAgICAgICJmaXJzdE1hdGNoIjogW3sicGFnZUxvYWRTdHJhdGVn
eSI6ICJlYWdlciIsICJmb286dW5tYXRjaGFibGUiOiBUcnVlfSwKKyAgICAgICAgICAgICAgICAg
ICAgIHsicGFnZUxvYWRTdHJhdGVneSI6ICJub25lIn1dfX0pCisgICAgYXNzZXJ0IHJlc3BbImNh
cGFiaWxpdGllcyJdWyJwYWdlTG9hZFN0cmF0ZWd5Il0gPT0gIm5vbmUiCmRpZmYgLS1naXQgYS9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL3Nlc3Npb25zL25ld19z
ZXNzaW9uL2ludmFsaWRfY2FwYWJpbGl0aWVzLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYmRyaXZlci90ZXN0cy9zZXNzaW9ucy9uZXdfc2Vzc2lvbi9pbnZhbGlkX2NhcGFiaWxp
dGllcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMzI1YzliMjgx
YWYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJp
dmVyL3Rlc3RzL3Nlc3Npb25zL25ld19zZXNzaW9uL2ludmFsaWRfY2FwYWJpbGl0aWVzLnB5CkBA
IC0wLDAgKzEsODggQEAKKyNNRVRBOiB0aW1lb3V0PWxvbmcKKworaW1wb3J0IHB5dGVzdAorZnJv
bSB3ZWJkcml2ZXIgaW1wb3J0IGVycm9yCisKK2Zyb20gY29uZnRlc3QgaW1wb3J0IHByb2R1Y3Qs
IGZsYXR0ZW4KKworCitAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoInZhbHVlIiwgW05vbmUsIDEs
ICJ7fSIsIFtdXSkKK2RlZiB0ZXN0X2ludmFsaWRfY2FwYWJpbGl0ZXMobmV3X3Nlc3Npb24sIHZh
bHVlKToKKyAgICB3aXRoIHB5dGVzdC5yYWlzZXMoZXJyb3IuSW52YWxpZEFyZ3VtZW50RXhjZXB0
aW9uKToKKyAgICAgICAgbmV3X3Nlc3Npb24oeyJjYXBhYmlsaXRpZXMiOiB2YWx1ZX0pCisKKwor
QHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKCJ2YWx1ZSIsIFtOb25lLCAxLCAie30iLCBbXV0pCitk
ZWYgdGVzdF9pbnZhbGlkX2Fsd2F5c19tYXRjaChuZXdfc2Vzc2lvbiwgdmFsdWUpOgorICAgIHdp
dGggcHl0ZXN0LnJhaXNlcyhlcnJvci5JbnZhbGlkQXJndW1lbnRFeGNlcHRpb24pOgorICAgICAg
ICBuZXdfc2Vzc2lvbih7ImNhcGFiaWxpdGllcyI6IHsiYWx3YXlzTWF0Y2giOiB2YWx1ZX19KQor
CisKK0BweXRlc3QubWFyay5wYXJhbWV0cml6ZSgidmFsdWUiLCBbTm9uZSwgMSwgIltdIiwge31d
KQorZGVmIHRlc3RfaW52YWxpZF9maXJzdF9tYXRjaChuZXdfc2Vzc2lvbiwgdmFsdWUpOgorICAg
IHdpdGggcHl0ZXN0LnJhaXNlcyhlcnJvci5JbnZhbGlkQXJndW1lbnRFeGNlcHRpb24pOgorICAg
ICAgICBuZXdfc2Vzc2lvbih7ImNhcGFiaWxpdGllcyI6IHsiZmlyc3RNYXRjaCI6IHZhbHVlfX0p
CisKKworaW52YWxpZF9kYXRhID0gWworICAgICgiYWNjZXB0SW5zZWN1cmVDZXJ0cyIsIFsxLCBb
XSwge30sICJmYWxzZSJdKSwKKyAgICAoImJyb3dzZXJOYW1lIiwgWzEsIFtdLCB7fSwgRmFsc2Vd
KSwKKyAgICAoImJyb3dzZXJWZXJzaW9uIiwgWzEsIFtdLCB7fSwgRmFsc2VdKSwKKyAgICAoInBs
YXRmb3JtTmFtZSIsIFsxLCBbXSwge30sIEZhbHNlXSksCisgICAgKCJwYWdlTG9hZFN0cmF0ZWd5
IiwgWzEsIFtdLCB7fSwgRmFsc2UsICJpbnZhbGlkIiwgIk5PTkUiLCAiRWFnZXIiLCAiZWFnZXJi
bGFoIiwgImludGVyYWN0aXZlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiBlYWdlciIs
ICJlYWdlciAiXSksCisgICAgKCJwcm94eSIsIFsxLCBbXSwgInt9IiwgeyJwcm94eVR5cGUiOiAi
U1lTVEVNIn0sIHsicHJveHlUeXBlIjogInN5c3RlbVNvbWV0aGluZyJ9LAorICAgICAgICAgICAg
ICAgeyJwcm94eSB0eXBlIjogInBhYyJ9LCB7InByb3h5LVR5cGUiOiAic3lzdGVtIn0sIHsicHJv
eHlfdHlwZSI6ICJzeXN0ZW0ifSwKKyAgICAgICAgICAgICAgIHsicHJveHl0eXBlIjogInN5c3Rl
bSJ9LCB7IlBST1hZVFlQRSI6ICJzeXN0ZW0ifSwgeyJwcm94eVR5cGUiOiBOb25lfSwKKyAgICAg
ICAgICAgICAgIHsicHJveHlUeXBlIjogMX0sIHsicHJveHlUeXBlIjogW119LCB7InByb3h5VHlw
ZSI6IHsidmFsdWUiOiAic3lzdGVtIn19LAorICAgICAgICAgICAgICAgeyIgcHJveHlUeXBlIjog
InN5c3RlbSJ9LCB7InByb3h5VHlwZSAiOiAic3lzdGVtIn0sIHsicHJveHlUeXBlICI6ICIgc3lz
dGVtIn0sCisgICAgICAgICAgICAgICB7InByb3h5VHlwZSI6ICJzeXN0ZW0gIn1dKSwKKyAgICAo
InRpbWVvdXRzIiwgWzEsIFtdLCAie30iLCB7fSwgRmFsc2UsIHsicGFnZUxPQUQiOiAxMH0sIHsi
cGFnZSBsb2FkIjogMTB9LAorICAgICAgICAgICAgICAgICAgeyJwYWdlIGxvYWQiOiAxMH0sIHsi
cGFnZUxvYWQiOiAiMTAifSwgeyJwYWdlTG9hZCI6IHsidmFsdWUiOiAxMH19LAorICAgICAgICAg
ICAgICAgICAgeyJpbnZhbGlkIjogMTB9LCB7InBhZ2VMb2FkIjogLTF9LCB7InBhZ2VMb2FkIjog
MioqNjR9LAorICAgICAgICAgICAgICAgICAgeyJwYWdlTG9hZCI6IE5vbmV9LCB7InBhZ2VMb2Fk
IjogMS4xfSwgeyJwYWdlTG9hZCI6IDEwLCAiaW52YWxpZCI6IDEwfSwKKyAgICAgICAgICAgICAg
ICAgIHsiIHBhZ2VMb2FkIjogMTB9LCB7InBhZ2VMb2FkICI6IDEwfV0pLAorICAgICgidW5oYW5k
bGVkUHJvbXB0QmVoYXZpb3IiLCBbMSwgW10sIHt9LCBGYWxzZSwgIkRJU01JU1MiLCAiZGlzbWlz
c0FCQyIsICJBY2NlcHQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBkaXNt
aXNzIiwgImRpc21pc3MgIl0pCitdCisKK0BweXRlc3QubWFyay5wYXJhbWV0cml6ZSgiYm9keSIs
IFtsYW1iZGEga2V5LCB2YWx1ZTogeyJhbHdheXNNYXRjaCI6IHtrZXk6IHZhbHVlfX0sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhIGtleSwgdmFsdWU6IHsiZmlyc3RN
YXRjaCI6IFt7a2V5OiB2YWx1ZX1dfV0pCitAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoImtleSx2
YWx1ZSIsIGZsYXR0ZW4ocHJvZHVjdCgqaXRlbSkgZm9yIGl0ZW0gaW4gaW52YWxpZF9kYXRhKSkK
K2RlZiB0ZXN0X2ludmFsaWQobmV3X3Nlc3Npb24sIGJvZHksIGtleSwgdmFsdWUpOgorICAgIHdp
dGggcHl0ZXN0LnJhaXNlcyhlcnJvci5JbnZhbGlkQXJndW1lbnRFeGNlcHRpb24pOgorICAgICAg
ICByZXNwID0gbmV3X3Nlc3Npb24oeyJjYXBhYmlsaXRpZXMiOiBib2R5KGtleSwgdmFsdWUpfSkK
KworCitpbnZhbGlkX2V4dGVuc2lvbnMgPSBbCisgICAgImZpcmVmb3giLAorICAgICJmaXJlZm94
X2JpbmFyeSIsCisgICAgImZpcmVmb3hPcHRpb25zIiwKKyAgICAiY2hyb21lT3B0aW9ucyIsCisg
ICAgImF1dG9tYXRpY0luc3BlY3Rpb24iLAorICAgICJhdXRvbWF0aWNQcm9maWxpbmciLAorICAg
ICJwbGF0Zm9ybSIsCisgICAgInZlcnNpb24iLAorICAgICJicm93c2VyIiwKKyAgICAicGxhdGZv
cm1WZXJzaW9uIiwKKyAgICAiamF2YXNjcmlwdEVuYWJsZWQiLAorICAgICJuYXRpdmVFdmVudHMi
LAorICAgICJzZWxlbml1bVByb3RvY29sIiwKKyAgICAicHJvZmlsZSIsCisgICAgInRydXN0QWxs
U1NMQ2VydGlmaWNhdGVzIiwKKyAgICAiaW5pdGlhbEJyb3dzZXJVcmwiLAorICAgICJyZXF1aXJl
V2luZG93Rm9jdXMiLAorICAgICJsb2dGaWxlIiwKKyAgICAibG9nTGV2ZWwiLAorICAgICJzYWZh
cmkub3B0aW9ucyIsCisgICAgImVuc3VyZUNsZWFuU2Vzc2lvbiIsCitdCisKKworQHB5dGVzdC5t
YXJrLnBhcmFtZXRyaXplKCJib2R5IiwgW2xhbWJkYSBrZXksIHZhbHVlOiB7ImFsd2F5c01hdGNo
Ijoge2tleTogdmFsdWV9fSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1i
ZGEga2V5LCB2YWx1ZTogeyJmaXJzdE1hdGNoIjogW3trZXk6IHZhbHVlfV19XSkKK0BweXRlc3Qu
bWFyay5wYXJhbWV0cml6ZSgia2V5IiwgaW52YWxpZF9leHRlbnNpb25zKQorZGVmIHRlc3RfaW52
YWxpZChuZXdfc2Vzc2lvbiwgYm9keSwga2V5KToKKyAgICB3aXRoIHB5dGVzdC5yYWlzZXMoZXJy
b3IuSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKToKKyAgICAgICAgcmVzcCA9IG5ld19zZXNzaW9u
KHsiY2FwYWJpbGl0aWVzIjogYm9keShrZXksIHt9KX0pCisKZGlmZiAtLWdpdCBhL1dlYkRyaXZl
clRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvc2Vzc2lvbnMvbmV3X3Nlc3Npb24v
bWVyZ2UucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL3Nl
c3Npb25zL25ld19zZXNzaW9uL21lcmdlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi4yZTY0NjIwNDU1YwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3Rz
L2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvc2Vzc2lvbnMvbmV3X3Nlc3Npb24vbWVyZ2Uu
cHkKQEAgLTAsMCArMSw3NiBAQAorI01FVEE6IHRpbWVvdXQ9bG9uZworCitpbXBvcnQgcHl0ZXN0
Citmcm9tIHdlYmRyaXZlciBpbXBvcnQgZXJyb3IKKworZnJvbSBjb25mdGVzdCBpbXBvcnQgcGxh
dGZvcm1fbmFtZQorCisKK0BweXRlc3QubWFyay5za2lwaWYocGxhdGZvcm1fbmFtZSgpIGlzIE5v
bmUsIHJlYXNvbj0iVW5zdXBwb3J0ZWQgcGxhdGZvcm0iKQorQHB5dGVzdC5tYXJrLnBhcmFtZXRy
aXplKCJib2R5IiwgW2xhbWJkYSBrZXksIHZhbHVlOiB7ImFsd2F5c01hdGNoIjoge2tleTogdmFs
dWV9fSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGEga2V5LCB2YWx1
ZTogeyJmaXJzdE1hdGNoIjogW3trZXk6IHZhbHVlfV19XSkKK2RlZiB0ZXN0X3BsYXRmb3JtX25h
bWUobmV3X3Nlc3Npb24sIHBsYXRmb3JtX25hbWUsIGJvZHkpOgorICAgIHJlc3AsIF8gPSBuZXdf
c2Vzc2lvbih7ImNhcGFiaWxpdGllcyI6IGJvZHkoInBsYXRmb3JtTmFtZSIsIHBsYXRmb3JtX25h
bWUpfSkKKyAgICBhc3NlcnQgcmVzcFsiY2FwYWJpbGl0aWVzIl1bInBsYXRmb3JtTmFtZSJdID09
IHBsYXRmb3JtX25hbWUKKworCitpbnZhbGlkX21lcmdlID0gWworICAgICgiYWNjZXB0SW5zZWN1
cmVDZXJ0cyIsIChUcnVlLCBUcnVlKSksCisgICAgKCJ1bmhhbmRsZWRQcm9tcHRCZWhhdmlvciIs
ICgiYWNjZXB0IiwgImFjY2VwdCIpKSwKKyAgICAoInVuaGFuZGxlZFByb21wdEJlaGF2aW9yIiwg
KCJhY2NlcHQiLCAiZGlzbWlzcyIpKSwKKyAgICAoInRpbWVvdXRzIiwgKHsic2NyaXB0IjogMTB9
LCB7InNjcmlwdCI6IDEwfSkpLAorICAgICgidGltZW91dHMiLCAoeyJzY3JpcHQiOiAxMH0sIHsi
cGFnZUxvYWQiOiAxMH0pKSwKK10KKworCitAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoImtleSx2
YWx1ZSIsIGludmFsaWRfbWVyZ2UpCitkZWYgdGVzdF9tZXJnZV9pbnZhbGlkKG5ld19zZXNzaW9u
LCBrZXksIHZhbHVlKToKKyAgICB3aXRoIHB5dGVzdC5yYWlzZXMoZXJyb3IuSW52YWxpZEFyZ3Vt
ZW50RXhjZXB0aW9uKToKKyAgICAgICAgIG5ld19zZXNzaW9uKHsiY2FwYWJpbGl0aWVzIjoKKyAg
ICAgICAgICAgICAgICAgICAgICB7ImFsd2F5c01hdGNoIjoge2tleTogdmFsdWVbMF19LAorICAg
ICAgICAgICAgICAgICAgICAgICAiZmlyc3RNYXRjaCI6IFt7fSwge2tleTogdmFsdWVbMV19XX19
KQorCisKK0BweXRlc3QubWFyay5za2lwaWYocGxhdGZvcm1fbmFtZSgpIGlzIE5vbmUsIHJlYXNv
bj0iVW5zdXBwb3J0ZWQgcGxhdGZvcm0iKQorZGVmIHRlc3RfbWVyZ2VfcGxhdGZvcm1OYW1lKG5l
d19zZXNzaW9uLCBwbGF0Zm9ybV9uYW1lKToKKyAgICByZXNwLCBfID0gbmV3X3Nlc3Npb24oeyJj
YXBhYmlsaXRpZXMiOgorICAgICAgICAgICAgICAgICAgICAgICAgeyJhbHdheXNNYXRjaCI6IHsi
dGltZW91dHMiOiB7InNjcmlwdCI6IDEwfX19LAorICAgICAgICAgICAgICAgICAgICAgICAgImZp
cnN0TWF0Y2giOiBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAicGxhdGZvcm1OYW1lIjogcGxhdGZvcm1fbmFtZS51cHBlcigp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFnZUxvYWRTdHJhdGVneSI6ICJu
b25lIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGxhdGZvcm1OYW1l
IjogcGxhdGZvcm1fbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhZ2VM
b2FkU3RyYXRlZ3kiOiAiZWFnZXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgXX0pCisKKyAgICBhc3NlcnQgcmVzcFsiY2FwYWJpbGl0aWVz
Il1bInBsYXRmb3JtTmFtZSJdID09IHBsYXRmb3JtX25hbWUKKyAgICBhc3NlcnQgcmVzcFsiY2Fw
YWJpbGl0aWVzIl1bInBhZ2VMb2FkU3RyYXRlZ3kiXSA9PSAiZWFnZXIiCisKKworZGVmIHRlc3Rf
bWVyZ2VfYnJvd3Nlck5hbWUobmV3X3Nlc3Npb24pOgorICAgIHJlc3AsIHNlc3Npb24gPSBuZXdf
c2Vzc2lvbih7fSkKKyAgICBicm93c2VyX3NldHRpbmdzID0geworICAgICAgICAiYnJvd3Nlck5h
bWUiOiByZXNwWyJjYXBhYmlsaXRpZXMiXVsiYnJvd3Nlck5hbWUiXSwKKyAgICAgICAgImJyb3dz
ZXJWZXJzaW9uIjogcmVzcFsiY2FwYWJpbGl0aWVzIl1bImJyb3dzZXJWZXJzaW9uIl0sCisgICAg
ICAgICJwbGF0Zm9ybU5hbWUiOiByZXNwWyJjYXBhYmlsaXRpZXMiXVsicGxhdGZvcm1OYW1lIl0K
KyAgICB9CisgICAgc2Vzc2lvbi5lbmQoKQorCisgICAgcmVzcCwgXyA9IG5ld19zZXNzaW9uKHsi
Y2FwYWJpbGl0aWVzIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHsiYWx3YXlzTWF0Y2giOiB7
InRpbWVvdXRzIjogeyJzY3JpcHQiOiAxMH19fSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJm
aXJzdE1hdGNoIjogWworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImJyb3dzZXJOYW1lIjogYnJvd3Nlcl9zZXR0aW5nc1siYnJv
d3Nlck5hbWUiXSArICJpbnZhbGlkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
InBhZ2VMb2FkU3RyYXRlZ3kiOiAibm9uZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImJyb3dzZXJOYW1lIjogYnJvd3Nlcl9zZXR0aW5nc1siYnJvd3Nlck5hbWUiXSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhZ2VMb2FkU3RyYXRlZ3kiOiAiZWFn
ZXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgXX0pCisKKyAgICBhc3NlcnQgcmVzcFsiY2FwYWJpbGl0aWVzIl1bImJyb3dzZXJOYW1lIl0g
PT0gYnJvd3Nlcl9zZXR0aW5nc1snYnJvd3Nlck5hbWUnXQorICAgIGFzc2VydCByZXNwWyJjYXBh
YmlsaXRpZXMiXVsicGFnZUxvYWRTdHJhdGVneSJdID09ICJlYWdlciIKZGlmZiAtLWdpdCBhL1dl
YkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvc2Vzc2lvbnMvbmV3X3Nl
c3Npb24vcmVzcG9uc2UucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVy
L3Rlc3RzL3Nlc3Npb25zL25ld19zZXNzaW9uL3Jlc3BvbnNlLnB5Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42NjY5NTczYmEyYwotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvc2Vzc2lvbnMvbmV3X3Nl
c3Npb24vcmVzcG9uc2UucHkKQEAgLTAsMCArMSw1NCBAQAorIyBNRVRBOiB0aW1lb3V0PWxvbmcK
KworaW1wb3J0IHV1aWQKKworZGVmIHRlc3RfcmVzcF9zZXNzaW9uaWQobmV3X3Nlc3Npb24pOgor
ICAgIHJlc3AsIF8gPSBuZXdfc2Vzc2lvbih7ImNhcGFiaWxpdGllcyI6IHt9fSkKKyAgICBhc3Nl
cnQgaXNpbnN0YW5jZShyZXNwWyJzZXNzaW9uSWQiXSwgdW5pY29kZSkKKyAgICB1dWlkLlVVSUQo
aGV4PXJlc3BbInNlc3Npb25JZCJdKQorCisKK2RlZiB0ZXN0X3Jlc3BfY2FwYWJpbGl0ZXMobmV3
X3Nlc3Npb24pOgorICAgIHJlc3AsIF8gPSBuZXdfc2Vzc2lvbih7ImNhcGFiaWxpdGllcyI6IHt9
fSkKKyAgICBhc3NlcnQgaXNpbnN0YW5jZShyZXNwWyJzZXNzaW9uSWQiXSwgdW5pY29kZSkKKyAg
ICBhc3NlcnQgaXNpbnN0YW5jZShyZXNwWyJjYXBhYmlsaXRpZXMiXSwgZGljdCkKKyAgICBhc3Nl
cnQgeyJicm93c2VyTmFtZSIsCisgICAgICAgICAgICAiYnJvd3NlclZlcnNpb24iLAorICAgICAg
ICAgICAgInBsYXRmb3JtTmFtZSIsCisgICAgICAgICAgICAiYWNjZXB0SW5zZWN1cmVDZXJ0cyIs
CisgICAgICAgICAgICAic2V0V2luZG93UmVjdCIsCisgICAgICAgICAgICAidGltZW91dHMiLAor
ICAgICAgICAgICAgInByb3h5IiwKKyAgICAgICAgICAgICJwYWdlTG9hZFN0cmF0ZWd5In0uaXNz
dWJzZXQoCisgICAgICAgICAgICAgICAgc2V0KHJlc3BbImNhcGFiaWxpdGllcyJdLmtleXMoKSkp
CisKKworZGVmIHRlc3RfcmVzcF9kYXRhKG5ld19zZXNzaW9uLCBwbGF0Zm9ybV9uYW1lKToKKyAg
ICByZXNwLCBfID0gbmV3X3Nlc3Npb24oeyJjYXBhYmlsaXRpZXMiOiB7fX0pCisKKyAgICBhc3Nl
cnQgaXNpbnN0YW5jZShyZXNwWyJjYXBhYmlsaXRpZXMiXVsiYnJvd3Nlck5hbWUiXSwgdW5pY29k
ZSkKKyAgICBhc3NlcnQgaXNpbnN0YW5jZShyZXNwWyJjYXBhYmlsaXRpZXMiXVsiYnJvd3NlclZl
cnNpb24iXSwgdW5pY29kZSkKKyAgICBpZiBwbGF0Zm9ybV9uYW1lOgorICAgICAgICBhc3NlcnQg
cmVzcFsiY2FwYWJpbGl0aWVzIl1bInBsYXRmb3JtTmFtZSJdID09IHBsYXRmb3JtX25hbWUKKyAg
ICBlbHNlOgorICAgICAgICBhc3NlcnQgInBsYXRmb3JtTmFtZSIgaW4gcmVzcFsiY2FwYWJpbGl0
aWVzIl0KKyAgICBhc3NlcnQgcmVzcFsiY2FwYWJpbGl0aWVzIl1bImFjY2VwdEluc2VjdXJlQ2Vy
dHMiXSBpcyBGYWxzZQorICAgIGFzc2VydCBpc2luc3RhbmNlKHJlc3BbImNhcGFiaWxpdGllcyJd
WyJzZXRXaW5kb3dSZWN0Il0sIGJvb2wpCisgICAgYXNzZXJ0IHJlc3BbImNhcGFiaWxpdGllcyJd
WyJ0aW1lb3V0cyJdWyJpbXBsaWNpdCJdID09IDAKKyAgICBhc3NlcnQgcmVzcFsiY2FwYWJpbGl0
aWVzIl1bInRpbWVvdXRzIl1bInBhZ2VMb2FkIl0gPT0gMzAwMDAwCisgICAgYXNzZXJ0IHJlc3Bb
ImNhcGFiaWxpdGllcyJdWyJ0aW1lb3V0cyJdWyJzY3JpcHQiXSA9PSAzMDAwMAorICAgIGFzc2Vy
dCByZXNwWyJjYXBhYmlsaXRpZXMiXVsicHJveHkiXSA9PSB7fQorICAgIGFzc2VydCByZXNwWyJj
YXBhYmlsaXRpZXMiXVsicGFnZUxvYWRTdHJhdGVneSJdID09ICJub3JtYWwiCisKKworZGVmIHRl
c3RfdGltZW91dHMobmV3X3Nlc3Npb24sIHBsYXRmb3JtX25hbWUpOgorICAgIHJlc3AsIF8gPSBu
ZXdfc2Vzc2lvbih7ImNhcGFiaWxpdGllcyI6IHsiYWx3YXlzTWF0Y2giOiB7InRpbWVvdXRzIjog
eyJpbXBsaWNpdCI6IDEwMDB9fX19KQorICAgIGFzc2VydCByZXNwWyJjYXBhYmlsaXRpZXMiXVsi
dGltZW91dHMiXSA9PSB7CisgICAgICAgICJpbXBsaWNpdCI6IDEwMDAsCisgICAgICAgICJwYWdl
TG9hZCI6IDMwMDAwMCwKKyAgICAgICAgInNjcmlwdCI6IDMwMDAwCisgICAgfQorCitkZWYgdGVz
dF9wYWdlTG9hZFN0cmF0ZWd5KG5ld19zZXNzaW9uLCBwbGF0Zm9ybV9uYW1lKToKKyAgICByZXNw
LCBfID0gbmV3X3Nlc3Npb24oeyJjYXBhYmlsaXRpZXMiOiB7ImFsd2F5c01hdGNoIjogeyJwYWdl
TG9hZFN0cmF0ZWd5IjogImVhZ2VyIn19fSkKKyAgICBhc3NlcnQgcmVzcFsiY2FwYWJpbGl0aWVz
Il1bInBhZ2VMb2FkU3RyYXRlZ3kiXSA9PSAiZWFnZXIiCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL3NldF93aW5kb3dfcmVjdC5weSBiL1dl
YkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvc2V0X3dpbmRvd19yZWN0
LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kOGRmNDg0NDhkZgot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIv
dGVzdHMvc2V0X3dpbmRvd19yZWN0LnB5CkBAIC0wLDAgKzEsNTE4IEBACitpbXBvcnQgcHl0ZXN0
CisKK2Zyb20gc3VwcG9ydC5pbmxpbmUgaW1wb3J0IGlubGluZQorZnJvbSBzdXBwb3J0LmZpeHR1
cmVzIGltcG9ydCBjcmVhdGVfZGlhbG9nCitmcm9tIHN1cHBvcnQuYXNzZXJ0cyBpbXBvcnQgYXNz
ZXJ0X2Vycm9yLCBhc3NlcnRfZGlhbG9nX2hhbmRsZWQsIGFzc2VydF9zdWNjZXNzCisKKworYWxl
cnRfZG9jID0gaW5saW5lKCI8c2NyaXB0PndpbmRvdy5hbGVydCgpPC9zY3JpcHQ+IikKKworCitk
ZWYgc2V0X3dpbmRvd19yZWN0KHNlc3Npb24sIHJlY3QpOgorICAgIHJldHVybiBzZXNzaW9uLnRy
YW5zcG9ydC5zZW5kKCJQT1NUIiwgInNlc3Npb24vJXMvd2luZG93L3JlY3QiICUgc2Vzc2lvbi5z
ZXNzaW9uX2lkLCByZWN0KQorCisKKyMgMTAuNy4yIFNldCBXaW5kb3cgUmVjdAorCisKK2RlZiB0
ZXN0X2N1cnJlbnRfdG9wX2xldmVsX2Jyb3dzaW5nX2NvbnRleHRfbm9fbG9uZ2VyX29wZW4oc2Vz
c2lvbiwgY3JlYXRlX3dpbmRvdyk6CisgICAgIiIiCisgICAgMS4gSWYgdGhlIGN1cnJlbnQgdG9w
LWxldmVsIGJyb3dzaW5nIGNvbnRleHQgaXMgbm8gbG9uZ2VyIG9wZW4sCisgICAgcmV0dXJuIGVy
cm9yIHdpdGggZXJyb3IgY29kZSBubyBzdWNoIHdpbmRvdy4KKyAgICAiIiIKKworICAgIHNlc3Np
b24ud2luZG93X2hhbmRsZSA9IGNyZWF0ZV93aW5kb3coKQorICAgIHNlc3Npb24uY2xvc2UoKQor
ICAgIHJlc3BvbnNlID0gc2V0X3dpbmRvd19yZWN0KHNlc3Npb24sIHt9KQorICAgIGFzc2VydF9l
cnJvcihyZXNwb25zZSwgIm5vIHN1Y2ggd2luZG93IikKKworCitkZWYgdGVzdF9oYW5kbGVfcHJv
bXB0X2Rpc21pc3MoKToKKyAgICAiIiJUT0RPIiIiCisKKworZGVmIHRlc3RfaGFuZGxlX3Byb21w
dF9hY2NlcHQobmV3X3Nlc3Npb24pOgorICAgICIiIgorICAgIDIuIEhhbmRsZSBhbnkgdXNlciBw
cm9tcHRzIGFuZCByZXR1cm4gaXRzIHZhbHVlIGlmIGl0IGlzIGFuIGVycm9yLgorCisgICAgWy4u
Ll0KKworICAgIEluIG9yZGVyIHRvIGhhbmRsZSBhbnkgdXNlciBwcm9tcHRzIGEgcmVtb3RlIGVu
ZCBtdXN0IHRha2UgdGhlCisgICAgZm9sbG93aW5nIHN0ZXBzOgorCisgICAgICBbLi4uXQorCisg
ICAgICAyLiBQZXJmb3JtIHRoZSBmb2xsb3dpbmcgc3Vic3RlcHMgYmFzZWQgb24gdGhlIGN1cnJl
bnQgc2Vzc2lvbidzCisgICAgICB1c2VyIHByb21wdCBoYW5kbGVyOgorCisgICAgICAgIFsuLi5d
CisKKyAgICAgICAgLSBhY2NlcHQgc3RhdGUKKyAgICAgICAgICAgQWNjZXB0IHRoZSBjdXJyZW50
IHVzZXIgcHJvbXB0LgorCisgICAgIiIiCisKKyAgICBfLCBzZXNzaW9uID0gbmV3X3Nlc3Npb24o
CisgICAgICAgIHsiYWx3YXlzTWF0Y2giOiB7InVuaGFuZGxlZFByb21wdEJlaGF2aW9yIjogImFj
Y2VwdCJ9fSkKKyAgICBvcmlnaW5hbCA9IHNlc3Npb24ud2luZG93LnJlY3QKKworICAgICMgc3Rl
cCAyCisgICAgY3JlYXRlX2RpYWxvZyhzZXNzaW9uKSgiYWxlcnQiLCB0ZXh0PSJkaXNtaXNzICMx
IiwgcmVzdWx0X3Zhcj0iZGlzbWlzczEiKQorICAgIHJlc3VsdCA9IHNldF93aW5kb3dfcmVjdChz
ZXNzaW9uLCB7IngiOiBpbnQob3JpZ2luYWxbIngiXSksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAieSI6IGludChvcmlnaW5hbFsieSJdKX0pCisgICAgYXNzZXJ0IHJl
c3VsdC5zdGF0dXMgPT0gMjAwCisgICAgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNlc3Npb24sICJk
aXNtaXNzICMxIikKKworICAgIGNyZWF0ZV9kaWFsb2coc2Vzc2lvbikoImNvbmZpcm0iLCB0ZXh0
PSJkaXNtaXNzICMyIiwgcmVzdWx0X3Zhcj0iZGlzbWlzczIiKQorICAgIHJlc3VsdCA9IHNldF93
aW5kb3dfcmVjdChzZXNzaW9uLCB7IngiOiBpbnQob3JpZ2luYWxbIngiXSksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieSI6IGludChvcmlnaW5hbFsieSJdKX0pCisg
ICAgYXNzZXJ0IHJlc3VsdC5zdGF0dXMgPT0gMjAwCisgICAgYXNzZXJ0X2RpYWxvZ19oYW5kbGVk
KHNlc3Npb24sICJkaXNtaXNzICMyIikKKworICAgIGNyZWF0ZV9kaWFsb2coc2Vzc2lvbikoInBy
b21wdCIsIHRleHQ9ImRpc21pc3MgIzMiLCByZXN1bHRfdmFyPSJkaXNtaXNzMyIpCisgICAgcmVz
dWx0ID0gc2V0X3dpbmRvd19yZWN0KHNlc3Npb24sIHsieCI6IGludChvcmlnaW5hbFsieCJdKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ5IjogaW50KG9yaWdpbmFs
WyJ5Il0pfSkKKyAgICBhc3NlcnRfc3VjY2VzcyhyZXN1bHQpCisgICAgYXNzZXJ0X2RpYWxvZ19o
YW5kbGVkKHNlc3Npb24sICJkaXNtaXNzICMzIikKKworCitkZWYgdGVzdF9oYW5kbGVfcHJvbXB0
X2Rpc21pc3NfYW5kX25vdGlmeSgpOgorICAgICIiIlRPRE8iIiIKKworCitkZWYgdGVzdF9oYW5k
bGVfcHJvbXB0X2FjY2VwdF9hbmRfbm90aWZ5KCk6CisgICAgIiIiVE9ETyIiIgorCisKK2RlZiB0
ZXN0X2hhbmRsZV9wcm9tcHRfaWdub3JlKCk6CisgICAgIiIiVE9ETyIiIgorCisKK2RlZiB0ZXN0
X2hhbmRsZV9wcm9tcHRfbWlzc2luZ192YWx1ZShzZXNzaW9uLCBjcmVhdGVfZGlhbG9nKToKKyAg
ICAiIiIKKyAgICAyLiBIYW5kbGUgYW55IHVzZXIgcHJvbXB0cyBhbmQgcmV0dXJuIGl0cyB2YWx1
ZSBpZiBpdCBpcyBhbiBlcnJvci4KKworICAgIFsuLi5dCisKKyAgICBJbiBvcmRlciB0byBoYW5k
bGUgYW55IHVzZXIgcHJvbXB0cyBhIHJlbW90ZSBlbmQgbXVzdCB0YWtlIHRoZQorICAgIGZvbGxv
d2luZyBzdGVwczoKKworICAgICAgWy4uLl0KKworICAgICAgMi4gUGVyZm9ybSB0aGUgZm9sbG93
aW5nIHN1YnN0ZXBzIGJhc2VkIG9uIHRoZSBjdXJyZW50IHNlc3Npb24ncworICAgICAgdXNlciBw
cm9tcHQgaGFuZGxlcjoKKworICAgICAgICBbLi4uXQorCisgICAgICAgIC0gbWlzc2luZyB2YWx1
ZSBkZWZhdWx0IHN0YXRlCisgICAgICAgICAgIDEuIERpc21pc3MgdGhlIGN1cnJlbnQgdXNlciBw
cm9tcHQuCisgICAgICAgICAgIDIuIFJldHVybiBlcnJvciB3aXRoIGVycm9yIGNvZGUgdW5leHBl
Y3RlZCBhbGVydCBvcGVuLgorCisgICAgIiIiCisKKyAgICBvcmlnaW5hbCA9IHNlc3Npb24ud2lu
ZG93LnJlY3QKKworICAgICMgc3RlcCAyCisgICAgY3JlYXRlX2RpYWxvZygiYWxlcnQiLCB0ZXh0
PSJkaXNtaXNzICMxIiwgcmVzdWx0X3Zhcj0iZGlzbWlzczEiKQorCisgICAgcmVzdWx0ID0gc2V0
X3dpbmRvd19yZWN0KHNlc3Npb24sIHsieCI6IGludChvcmlnaW5hbFsieCJdKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ5IjogaW50KG9yaWdpbmFsWyJ5Il0pfSkK
KyAgICBhc3NlcnRfZXJyb3IocmVzdWx0LCAidW5leHBlY3RlZCBhbGVydCBvcGVuIikKKyAgICBh
c3NlcnRfZGlhbG9nX2hhbmRsZWQoc2Vzc2lvbiwgImRpc21pc3MgIzEiKQorCisgICAgY3JlYXRl
X2RpYWxvZygiY29uZmlybSIsIHRleHQ9ImRpc21pc3MgIzIiLCByZXN1bHRfdmFyPSJkaXNtaXNz
MiIpCisKKyAgICByZXN1bHQgPSBzZXRfd2luZG93X3JlY3Qoc2Vzc2lvbiwgeyJ4IjogaW50KG9y
aWdpbmFsWyJ4Il0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInki
OiBpbnQob3JpZ2luYWxbInkiXSl9KQorICAgIGFzc2VydF9lcnJvcihyZXN1bHQsICJ1bmV4cGVj
dGVkIGFsZXJ0IG9wZW4iKQorICAgIGFzc2VydF9kaWFsb2dfaGFuZGxlZChzZXNzaW9uLCAiZGlz
bWlzcyAjMiIpCisKKyAgICBjcmVhdGVfZGlhbG9nKCJwcm9tcHQiLCB0ZXh0PSJkaXNtaXNzICMz
IiwgcmVzdWx0X3Zhcj0iZGlzbWlzczMiKQorCisgICAgcmVzdWx0ID0gc2V0X3dpbmRvd19yZWN0
KHNlc3Npb24sIHsieCI6IGludChvcmlnaW5hbFsieCJdKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJ5IjogaW50KG9yaWdpbmFsWyJ5Il0pfSkKKyAgICBhc3NlcnRf
ZXJyb3IocmVzdWx0LCAidW5leHBlY3RlZCBhbGVydCBvcGVuIikKKyAgICBhc3NlcnRfZGlhbG9n
X2hhbmRsZWQoc2Vzc2lvbiwgImRpc21pc3MgIzMiKQorCisKK0BweXRlc3QubWFyay5wYXJhbWV0
cml6ZSgicmVjdCIsIFsKKyAgICB7IndpZHRoIjogImEifSwKKyAgICB7ImhlaWdodCI6ICJiIn0s
CisgICAgeyJ3aWR0aCI6ICJhIiwgImhlaWdodCI6ICJiIn0sCisgICAgeyJ4IjogImEifSwKKyAg
ICB7InkiOiAiYiJ9LAorICAgIHsieCI6ICJhIiwgInkiOiAiYiJ9LAorICAgIHsid2lkdGgiOiAi
YSIsICJoZWlnaHQiOiAiYiIsICJ4IjogImEiLCAieSI6ICJiIn0sCisKKyAgICB7IndpZHRoIjog
VHJ1ZX0sCisgICAgeyJoZWlnaHQiOiBGYWxzZX0sCisgICAgeyJ3aWR0aCI6IFRydWUsICJoZWln
aHQiOiBGYWxzZX0sCisgICAgeyJ4IjogVHJ1ZX0sCisgICAgeyJ5IjogRmFsc2V9LAorICAgIHsi
eCI6IFRydWUsICJ5IjogRmFsc2V9LAorICAgIHsid2lkdGgiOiBUcnVlLCAiaGVpZ2h0IjogRmFs
c2UsICJ4IjogVHJ1ZSwgInkiOiBGYWxzZX0sCisKKyAgICB7IndpZHRoIjogW119LAorICAgIHsi
aGVpZ2h0IjogW119LAorICAgIHsid2lkdGgiOiBbXSwgImhlaWdodCI6IFtdfSwKKyAgICB7Ingi
OiBbXX0sCisgICAgeyJ5IjogW119LAorICAgIHsieCI6IFtdLCAieSI6IFtdfSwKKyAgICB7Indp
ZHRoIjogW10sICJoZWlnaHQiOiBbXSwgIngiOiBbXSwgInkiOiBbXX0sCisKKyAgICB7ImhlaWdo
dCI6IHt9fSwKKyAgICB7IndpZHRoIjoge319LAorICAgIHsiaGVpZ2h0Ijoge30sICJ3aWR0aCI6
IHt9fSwKKyAgICB7IngiOiB7fX0sCisgICAgeyJ5Ijoge319LAorICAgIHsieCI6IHt9LCAieSI6
IHt9fSwKKyAgICB7IndpZHRoIjoge30sICJoZWlnaHQiOiB7fSwgIngiOiB7fSwgInkiOiB7fX0s
CitdKQorZGVmIHRlc3RfaW52YWxpZF90eXBlcyhzZXNzaW9uLCByZWN0KToKKyAgICAiIiIKKyAg
ICA4LiBJZiB3aWR0aCBvciBoZWlnaHQgaXMgbmVpdGhlciBudWxsIG5vciBhIE51bWJlciBmcm9t
IDAgdG8gMl42NCAtCisgICAgMSwgcmV0dXJuIGVycm9yIHdpdGggZXJyb3IgY29kZSBpbnZhbGlk
IGFyZ3VtZW50LgorCisgICAgOS4gSWYgeCBvciB5IGlzIG5laXRoZXIgbnVsbCBub3IgYSBOdW1i
ZXIgZnJvbSAtKDI2MykgdG8gMjYzIC0gMSwKKyAgICByZXR1cm4gZXJyb3Igd2l0aCBlcnJvciBj
b2RlIGludmFsaWQgYXJndW1lbnQuCisgICAgIiIiCisgICAgcmVzcG9uc2UgPSBzZXRfd2luZG93
X3JlY3Qoc2Vzc2lvbiwgcmVjdCkKKyAgICBhc3NlcnRfZXJyb3IocmVzcG9uc2UsICJpbnZhbGlk
IGFyZ3VtZW50IikKKworCitAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoInJlY3QiLCBbCisgICAg
eyJ3aWR0aCI6IC0xfSwKKyAgICB7ImhlaWdodCI6IC0yfSwKKyAgICB7IndpZHRoIjogLTEsICJo
ZWlnaHQiOiAtMn0sCitdKQorZGVmIHRlc3Rfb3V0X29mX2JvdW5kcyhzZXNzaW9uLCByZWN0KToK
KyAgICAiIiIKKyAgICA4LiBJZiB3aWR0aCBvciBoZWlnaHQgaXMgbmVpdGhlciBudWxsIG5vciBh
IE51bWJlciBmcm9tIDAgdG8gMl42NCAtCisgICAgMSwgcmV0dXJuIGVycm9yIHdpdGggZXJyb3Ig
Y29kZSBpbnZhbGlkIGFyZ3VtZW50LgorCisgICAgOS4gSWYgeCBvciB5IGlzIG5laXRoZXIgbnVs
bCBub3IgYSBOdW1iZXIgZnJvbSAtKDI2MykgdG8gMjYzIC0gMSwKKyAgICByZXR1cm4gZXJyb3Ig
d2l0aCBlcnJvciBjb2RlIGludmFsaWQgYXJndW1lbnQuCisgICAgIiIiCisgICAgcmVzcG9uc2Ug
PSBzZXRfd2luZG93X3JlY3Qoc2Vzc2lvbiwgcmVjdCkKKyAgICBhc3NlcnRfZXJyb3IocmVzcG9u
c2UsICJpbnZhbGlkIGFyZ3VtZW50IikKKworCitkZWYgdGVzdF93aWR0aF9oZWlnaHRfZmxvYXRz
KHNlc3Npb24pOgorICAgICIiIgorICAgIDguIElmIHdpZHRoIG9yIGhlaWdodCBpcyBuZWl0aGVy
IG51bGwgbm9yIGEgTnVtYmVyIGZyb20gMCB0byAyXjY0IC0KKyAgICAxLCByZXR1cm4gZXJyb3Ig
d2l0aCBlcnJvciBjb2RlIGludmFsaWQgYXJndW1lbnQuCisgICAgIiIiCisKKyAgICByZXNwb25z
ZSA9IHNldF93aW5kb3dfcmVjdChzZXNzaW9uLCB7IndpZHRoIjogMjAwLjUsICJoZWlnaHQiOiA0
MDB9KQorICAgIHZhbHVlID0gYXNzZXJ0X3N1Y2Nlc3MocmVzcG9uc2UpCisgICAgYXNzZXJ0IHZh
bHVlWyJ3aWR0aCJdID09IDIwMC4yCisgICAgYXNzZXJ0IHZhbHVlWyJoZWlnaHQiXSA9PSA0MDAK
KworICAgIHJlc3BvbnNlID0gc2V0X3dpbmRvd19yZWN0KHNlc3Npb24sIHsid2lkdGgiOiAzMDAs
ICJoZWlnaHQiOiA0NTAuNX0pCisgICAgdmFsdWUgPSBhc3NlcnRfc3VjY2VzcyhyZXNwb25zZSkK
KyAgICBhc3NlcnQgdmFsdWVbIndpZHRoIl0gPT0gMzAwCisgICAgYXNzZXJ0IHZhbHVlWyJoZWln
aHQiXSA9PSA0NTAuNQorCisKK2RlZiB0ZXN0X3hfeV9mbG9hdHMoc2Vzc2lvbik6CisgICAgIiIi
CisgICAgOS4gSWYgeCBvciB5IGlzIG5laXRoZXIgbnVsbCBub3IgYSBOdW1iZXIgZnJvbSAtKDI2
MykgdG8gMjYzIC0gMSwKKyAgICByZXR1cm4gZXJyb3Igd2l0aCBlcnJvciBjb2RlIGludmFsaWQg
YXJndW1lbnQuCisgICAgIiIiCisKKyAgICByZXNwb25zZSA9IHNldF93aW5kb3dfcmVjdChzZXNz
aW9uLCB7IngiOiAyMDAuNSwgInkiOiA0MDB9KQorICAgIHZhbHVlID0gYXNzZXJ0X3N1Y2Nlc3Mo
cmVzcG9uc2UpCisgICAgYXNzZXJ0IHZhbHVlWyJ4Il0gPT0gMjAwLjIKKyAgICBhc3NlcnQgdmFs
dWVbInkiXSA9PSA0MDAKKworICAgIHJlc3BvbnNlID0gc2V0X3dpbmRvd19yZWN0KHNlc3Npb24s
IHsieCI6IDMwMCwgInkiOiA0NTAuNX0pCisgICAgdmFsdWUgPSBhc3NlcnRfc3VjY2VzcyhyZXNw
b25zZSkKKyAgICBhc3NlcnQgdmFsdWVbIngiXSA9PSAzMDAKKyAgICBhc3NlcnQgdmFsdWVbInki
XSA9PSA0NTAuNQorCisKK0BweXRlc3QubWFyay5wYXJhbWV0cml6ZSgicmVjdCIsIFsKKyAgICB7
fSwKKworICAgIHsid2lkdGgiOiBOb25lfSwKKyAgICB7ImhlaWdodCI6IE5vbmV9LAorICAgIHsi
d2lkdGgiOiBOb25lLCAiaGVpZ2h0IjogTm9uZX0sCisKKyAgICB7IngiOiBOb25lfSwKKyAgICB7
InkiOiBOb25lfSwKKyAgICB7IngiOiBOb25lLCAieSI6IE5vbmV9LAorCisgICAgeyJ3aWR0aCI6
IE5vbmUsICJ4IjogTm9uZX0sCisgICAgeyJ3aWR0aCI6IE5vbmUsICJ5IjogTm9uZX0sCisgICAg
eyJoZWlnaHQiOiBOb25lLCAieCI6IE5vbmV9LAorICAgIHsiaGVpZ2h0IjogTm9uZSwgIlkiOiBO
b25lfSwKKworICAgIHsid2lkdGgiOiBOb25lLCAiaGVpZ2h0IjogTm9uZSwgIngiOiBOb25lLCAi
eSI6IE5vbmV9LAorCisgICAgeyJ3aWR0aCI6IDIwMH0sCisgICAgeyJoZWlnaHQiOiAyMDB9LAor
ICAgIHsieCI6IDIwMH0sCisgICAgeyJ5IjogMjAwfSwKKyAgICB7IndpZHRoIjogMjAwLCAieCI6
IDIwMH0sCisgICAgeyJoZWlnaHQiOiAyMDAsICJ4IjogMjAwfSwKKyAgICB7IndpZHRoIjogMjAw
LCAieSI6IDIwMH0sCisgICAgeyJoZWlnaHQiOiAyMDAsICJ5IjogMjAwfSwKK10pCitkZWYgdGVz
dF9ub19jaGFuZ2Uoc2Vzc2lvbiwgcmVjdCk6CisgICAgIiIiCisgICAgMTMuIElmIHdpZHRoIGFu
ZCBoZWlnaHQgYXJlIG5vdCBudWxsOgorCisgICAgWy4uLl0KKworICAgIDE0LiBJZiB4IGFuZCB5
IGFyZSBub3QgbnVsbDoKKworICAgIFsuLi5dCisKKyAgICAxNS4gUmV0dXJuIHN1Y2Nlc3Mgd2l0
aCB0aGUgSlNPTiBzZXJpYWxpemF0aW9uIG9mIHRoZSBjdXJyZW50CisgICAgdG9wLWxldmVsIGJy
b3dzaW5nIGNvbnRleHQncyB3aW5kb3cgcmVjdC4KKyAgICAiIiIKKworICAgIG9yaWdpbmFsID0g
c2Vzc2lvbi53aW5kb3cucmVjdAorICAgIHJlc3BvbnNlID0gc2V0X3dpbmRvd19yZWN0KHNlc3Np
b24sIHJlY3QpCisgICAgYXNzZXJ0X3N1Y2Nlc3MocmVzcG9uc2UsIG9yaWdpbmFsKQorCisKK2Rl
ZiB0ZXN0X2Z1bGx5X2V4aXRfZnVsbHNjcmVlbihzZXNzaW9uKToKKyAgICAiIiIKKyAgICAxMC4g
RnVsbHkgZXhpdCBmdWxsc2NyZWVuLgorCisgICAgWy4uLl0KKworICAgIFRvIGZ1bGx5IGV4aXQg
ZnVsbHNjcmVlbiBhIGRvY3VtZW50IGRvY3VtZW50LCBydW4gdGhlc2Ugc3RlcHM6CisKKyAgICAg
IDEuIElmIGRvY3VtZW50J3MgZnVsbHNjcmVlbiBlbGVtZW50IGlzIG51bGwsIHRlcm1pbmF0ZSB0
aGVzZSBzdGVwcy4KKworICAgICAgMi4gVW5mdWxsc2NyZWVuIGVsZW1lbnRzIHdob3NlIGZ1bGxz
Y3JlZW4gZmxhZyBpcyBzZXQsIHdpdGhpbgorICAgICAgZG9jdW1lbnQncyB0b3AgbGF5ZXIsIGV4
Y2VwdCBmb3IgZG9jdW1lbnQncyBmdWxsc2NyZWVuIGVsZW1lbnQuCisKKyAgICAgIDMuIEV4aXQg
ZnVsbHNjcmVlbiBkb2N1bWVudC4KKyAgICAiIiIKKyAgICBzZXNzaW9uLndpbmRvdy5mdWxsc2Ny
ZWVuKCkKKyAgICBhc3NlcnQgc2Vzc2lvbi5leGVjdXRlX3NjcmlwdCgicmV0dXJuIHdpbmRvdy5m
dWxsU2NyZWVuIikgaXMgVHJ1ZQorCisgICAgcmVzcG9uc2UgPSBzZXRfd2luZG93X3JlY3Qoc2Vz
c2lvbiwgeyJ3aWR0aCI6IDQwMCwgImhlaWdodCI6IDQwMH0pCisgICAgdmFsdWUgPSBhc3NlcnRf
c3VjY2VzcyhyZXNwb25zZSkKKyAgICBhc3NlcnQgdmFsdWVbIndpZHRoIl0gPT0gNDAwCisgICAg
YXNzZXJ0IHZhbHVlWyJoZWlnaHQiXSA9PSA0MDAKKyAgICBhc3NlcnQgdmFsdWVbInN0YXRlIl0g
PT0gIm5vcm1hbCIKKworICAgIGFzc2VydCBzZXNzaW9uLmV4ZWN1dGVfc2NyaXB0KCJyZXR1cm4g
d2luZG93LmZ1bGxTY3JlZW4iKSBpcyBGYWxzZQorCisKK2RlZiB0ZXN0X3Jlc3RvcmVfZnJvbV9t
aW5pbWl6ZWQoc2Vzc2lvbik6CisgICAgIiIiCisgICAgMTIuIElmIHRoZSB2aXNpYmlsaXR5IHN0
YXRlIG9mIHRoZSB0b3AtbGV2ZWwgYnJvd3NpbmcgY29udGV4dCdzCisgICAgYWN0aXZlIGRvY3Vt
ZW50IGlzIGhpZGRlbiwgcmVzdG9yZSB0aGUgd2luZG93LgorCisgICAgWy4uLl0KKworICAgIFRv
IHJlc3RvcmUgdGhlIHdpbmRvdywgZ2l2ZW4gYW4gb3BlcmF0aW5nIHN5c3RlbSBsZXZlbCB3aW5k
b3cgd2l0aAorICAgIGFuIGFzc29jaWF0ZWQgdG9wLWxldmVsIGJyb3dzaW5nIGNvbnRleHQsIHJ1
biBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYworICAgIHN0ZXBzIHRvIHJlc3RvcmUgb3IgdW5oaWRl
IHRoZSB3aW5kb3cgdG8gdGhlIHZpc2libGUgc2NyZWVuLiBEbyBub3QKKyAgICByZXR1cm4gZnJv
bSB0aGlzIG9wZXJhdGlvbiB1bnRpbCB0aGUgdmlzaWJpbGl0eSBzdGF0ZSBvZiB0aGUgdG9wLWxl
dmVsCisgICAgYnJvd3NpbmcgY29udGV4dCdzIGFjdGl2ZSBkb2N1bWVudCBoYXMgcmVhY2hlZCB0
aGUgdmlzaWJsZSBzdGF0ZSwKKyAgICBvciB1bnRpbCB0aGUgb3BlcmF0aW9uIHRpbWVzIG91dC4K
KyAgICAiIiIKKworICAgIHNlc3Npb24ud2luZG93Lm1pbmltaXplKCkKKyAgICBhc3NlcnQgc2Vz
c2lvbi5leGVjdXRlX3NjcmlwdCgicmV0dXJuIGRvY3VtZW50LmhpZGRlbiIpIGlzIFRydWUKKwor
ICAgIHJlc3BvbnNlID0gc2V0X3dpbmRvd19yZWN0KHNlc3Npb24sIHsid2lkdGgiOiA0NTAsICJo
ZWlnaHQiOiA0NTB9KQorICAgIHZhbHVlID0gYXNzZXJ0X3N1Y2Nlc3MocmVzcG9uc2UpCisgICAg
YXNzZXJ0IHZhbHVlWyJ3aWR0aCJdID09IDQ1MAorICAgIGFzc2VydCB2YWx1ZVsiaGVpZ2h0Il0g
PT0gNDUwCisgICAgYXNzZXJ0IHZhbHVlWyJzdGF0ZSJdID09ICJub3JtYWwiCisKKyAgICBhc3Nl
cnQgc2Vzc2lvbi5leGVjdXRlX3NjcmlwdCgicmV0dXJuIGRvY3VtZW50LmhpZGRlbiIpIGlzIEZh
bHNlCisKKworZGVmIHRlc3RfcmVzdG9yZV9mcm9tX21heGltaXplZChzZXNzaW9uKToKKyAgICAi
IiIKKyAgICAxMi4gSWYgdGhlIHZpc2liaWxpdHkgc3RhdGUgb2YgdGhlIHRvcC1sZXZlbCBicm93
c2luZyBjb250ZXh0J3MKKyAgICBhY3RpdmUgZG9jdW1lbnQgaXMgaGlkZGVuLCByZXN0b3JlIHRo
ZSB3aW5kb3cuCisKKyAgICBbLi4uXQorCisgICAgVG8gcmVzdG9yZSB0aGUgd2luZG93LCBnaXZl
biBhbiBvcGVyYXRpbmcgc3lzdGVtIGxldmVsIHdpbmRvdyB3aXRoCisgICAgYW4gYXNzb2NpYXRl
ZCB0b3AtbGV2ZWwgYnJvd3NpbmcgY29udGV4dCwgcnVuIGltcGxlbWVudGF0aW9uLXNwZWNpZmlj
CisgICAgc3RlcHMgdG8gcmVzdG9yZSBvciB1bmhpZGUgdGhlIHdpbmRvdyB0byB0aGUgdmlzaWJs
ZSBzY3JlZW4uIERvIG5vdAorICAgIHJldHVybiBmcm9tIHRoaXMgb3BlcmF0aW9uIHVudGlsIHRo
ZSB2aXNpYmlsaXR5IHN0YXRlIG9mIHRoZSB0b3AtbGV2ZWwKKyAgICBicm93c2luZyBjb250ZXh0
J3MgYWN0aXZlIGRvY3VtZW50IGhhcyByZWFjaGVkIHRoZSB2aXNpYmxlIHN0YXRlLAorICAgIG9y
IHVudGlsIHRoZSBvcGVyYXRpb24gdGltZXMgb3V0LgorICAgICIiIgorCisgICAgb3JpZ2luYWxf
c2l6ZSA9IHNlc3Npb24ud2luZG93LnNpemUKKyAgICBzZXNzaW9uLndpbmRvdy5tYXhpbWl6ZSgp
CisgICAgYXNzZXJ0IHNlc3Npb24ud2luZG93LnNpemUgIT0gb3JpZ2luYWxfc2l6ZQorICAgIGFz
c2VydCBzZXNzaW9uLndpbmRvdy5zdGF0ZSA9PSAibWF4aW1pemVkIgorCisgICAgcmVzcG9uc2Ug
PSBzZXRfd2luZG93X3JlY3Qoc2Vzc2lvbiwgeyJ3aWR0aCI6IDQwMCwgImhlaWdodCI6IDQwMH0p
CisgICAgdmFsdWUgPSBhc3NlcnRfc3VjY2VzcyhyZXNwb25zZSkKKyAgICBhc3NlcnQgdmFsdWVb
IndpZHRoIl0gPT0gNDAwCisgICAgYXNzZXJ0IHZhbHVlWyJoZWlnaHQiXSA9PSA0MDAKKyAgICBh
c3NlcnQgdmFsdWVbInN0YXRlIl0gPT0gIm5vcm1hbCIKKworCitkZWYgdGVzdF9oZWlnaHRfd2lk
dGgoc2Vzc2lvbik6CisgICAgb3JpZ2luYWwgPSBzZXNzaW9uLndpbmRvdy5yZWN0CisgICAgbWF4
ID0gc2Vzc2lvbi5leGVjdXRlX3NjcmlwdCgiIiIKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAg
ICB3aWR0aDogd2luZG93LnNjcmVlbi5hdmFpbFdpZHRoLAorICAgICAgICAgIGhlaWdodDogd2lu
ZG93LnNjcmVlbi5hdmFpbEhlaWdodCwKKyAgICAgICAgfSIiIikKKworICAgICMgc3RlcCAxMgor
ICAgIHJlc3BvbnNlID0gc2V0X3dpbmRvd19yZWN0KHNlc3Npb24sIHsid2lkdGgiOiBtYXhbIndp
ZHRoIl0gLSAxMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJo
ZWlnaHQiOiBtYXhbImhlaWdodCJdIC0gMTAwfSkKKworICAgICMgc3RlcCAxNAorICAgIGFzc2Vy
dF9zdWNjZXNzKHJlc3BvbnNlLCB7IngiOiBvcmlnaW5hbFsieCJdLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgInkiOiBvcmlnaW5hbFsieSJdLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIndpZHRoIjogbWF4WyJ3aWR0aCJdIC0gMTAwLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgImhlaWdodCI6IG1heFsiaGVpZ2h0Il0gLSAxMDAsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAic3RhdGUiOiAibm9ybWFsIn0pCisKKworZGVmIHRlc3RfaGVpZ2h0
X3dpZHRoX2xhcmdlcl90aGFuX21heChzZXNzaW9uKToKKyAgICBtYXggPSBzZXNzaW9uLmV4ZWN1
dGVfc2NyaXB0KCIiIgorICAgICAgICByZXR1cm4geworICAgICAgICAgIHdpZHRoOiB3aW5kb3cu
c2NyZWVuLmF2YWlsV2lkdGgsCisgICAgICAgICAgaGVpZ2h0OiB3aW5kb3cuc2NyZWVuLmF2YWls
SGVpZ2h0LAorICAgICAgICB9IiIiKQorCisgICAgIyBzdGVwIDEyCisgICAgcmVzcG9uc2UgPSBz
ZXRfd2luZG93X3JlY3Qoc2Vzc2lvbiwgeyJ3aWR0aCI6IG1heFsid2lkdGgiXSArIDEwMCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhlaWdodCI6IG1heFsiaGVp
Z2h0Il0gKyAxMDB9KQorCisgICAgIyBzdGVwIDE0CisgICAgcmVjdCA9IGFzc2VydF9zdWNjZXNz
KHJlc3BvbnNlKQorICAgIGFzc2VydCByZWN0WyJ3aWR0aCJdID49IG1heFsid2lkdGgiXQorICAg
IGFzc2VydCByZWN0WyJoZWlnaHQiXSA+PSBtYXhbImhlaWdodCJdCisgICAgYXNzZXJ0IHJlY3Rb
InN0YXRlIl0gPT0gIm5vcm1hbCIKKworCitkZWYgdGVzdF9oZWlnaHRfd2lkdGhfYXNfY3VycmVu
dChzZXNzaW9uKToKKyAgICBvcmlnaW5hbCA9IHNlc3Npb24ud2luZG93LnJlY3QKKworICAgICMg
c3RlcCAxMgorICAgIHJlc3BvbnNlID0gc2V0X3dpbmRvd19yZWN0KHNlc3Npb24sIHsid2lkdGgi
OiBpbnQob3JpZ2luYWxbIndpZHRoIl0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiaGVpZ2h0IjogaW50KG9yaWdpbmFsWyJoZWlnaHQiXSl9KQorCisgICAgIyBz
dGVwIDE0CisgICAgYXNzZXJ0X3N1Y2Nlc3MocmVzcG9uc2UsIHsieCI6IG9yaWdpbmFsWyJ4Il0s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieSI6IG9yaWdpbmFsWyJ5Il0sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAid2lkdGgiOiBvcmlnaW5hbFsid2lkdGgiXSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoZWlnaHQiOiBvcmlnaW5hbFsiaGVpZ2h0Il0s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3RhdGUiOiBvcmlnaW5hbFsic3RhdGUi
XX0pCisKKworZGVmIHRlc3RfeF95KHNlc3Npb24pOgorICAgIG9yaWdpbmFsID0gc2Vzc2lvbi53
aW5kb3cucmVjdAorCisgICAgIyBzdGVwIDEzCisgICAgcmVzcG9uc2UgPSBzZXRfd2luZG93X3Jl
Y3Qoc2Vzc2lvbiwgeyJ4IjogaW50KG9yaWdpbmFsWyJ4Il0pICsgMTAsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ5IjogaW50KG9yaWdpbmFsWyJ5Il0pICsgMTB9
KQorCisgICAgIyBzdGVwIDE0CisgICAgYXNzZXJ0X3N1Y2Nlc3MocmVzcG9uc2UsIHsieCI6IG9y
aWdpbmFsWyJ4Il0gKyAxMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ5Ijogb3Jp
Z2luYWxbInkiXSArIDEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndpZHRoIjog
b3JpZ2luYWxbIndpZHRoIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGVpZ2h0
Ijogb3JpZ2luYWxbImhlaWdodCJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0
YXRlIjogb3JpZ2luYWxbInN0YXRlIl19KQorCisKK2RlZiB0ZXN0X25lZ2F0aXZlX3hfeShzZXNz
aW9uKToKKyAgICBvcmlnaW5hbCA9IHNlc3Npb24ud2luZG93LnJlY3QKKworICAgICMgc3RlcCAx
MworICAgIHJlc3BvbnNlID0gc2V0X3dpbmRvd19yZWN0KHNlc3Npb24sIHsieCI6IC0gOCwgInki
OiAtIDh9KQorCisgICAgIyBzdGVwIDE0CisgICAgb3MgPSBzZXNzaW9uLmNhcGFiaWxpdGllc1si
cGxhdGZvcm1OYW1lIl0KKyAgICAjIGNlcnRhaW4gV01zIHByb2hpYml0IHdpbmRvd3MgZnJvbSBi
ZWluZyBtb3ZlZCBvZmYtc2NyZWVuCisgICAgaWYgb3MgPT0gImxpbnV4IjoKKyAgICAgICAgcmVj
dCA9IGFzc2VydF9zdWNjZXNzKHJlc3BvbnNlKQorICAgICAgICBhc3NlcnQgcmVjdFsieCJdIDw9
IDAKKyAgICAgICAgYXNzZXJ0IHJlY3RbInkiXSA8PSAwCisgICAgICAgIGFzc2VydCByZWN0WyJ3
aWR0aCJdID09IG9yaWdpbmFsWyJ3aWR0aCJdCisgICAgICAgIGFzc2VydCByZWN0WyJoZWlnaHQi
XSA9PSBvcmlnaW5hbFsiaGVpZ2h0Il0KKyAgICAgICAgYXNzZXJ0IHJlY3RbInN0YXRlIl0gPT0g
b3JpZ2luYWxbInN0YXRlIl0KKworICAgICMgT24gbWFjT1MsIHdpbmRvd3MgY2FuIG9ubHkgYmUg
bW92ZWQgb2ZmIHRoZSBzY3JlZW4gb24gdGhlCisgICAgIyBob3Jpem9udGFsIGF4aXMuICBUaGUg
c3lzdGVtIG1lbnUgYmFyIGFsc28gYmxvY2tzIHdpbmRvd3MgZnJvbQorICAgICMgYmVpbmcgbW92
ZWQgdG8gKDAsMCkuCisgICAgZWxpZiBvcyA9PSAiZGFyd2luIjoKKyAgICAgICAgYXNzZXJ0X3N1
Y2Nlc3MocmVzcG9uc2UsIHsieCI6IC04LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJ5IjogMjMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndpZHRoIjog
b3JpZ2luYWxbIndpZHRoIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhl
aWdodCI6IG9yaWdpbmFsWyJoZWlnaHQiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAic3RhdGUiOiBvcmlnaW5hbFsic3RhdGUiXX0pCisKKyAgICAjIEl0IHR1cm5zIG91dCB0
aGF0IFdpbmRvd3MgaXMgdGhlIG9ubHkgcGxhdGZvcm0gb24gd2hpY2ggdGhlCisgICAgIyB3aW5k
b3cgY2FuIGJlIHJlbGlhYmx5IHBvc2l0aW9uZWQgb2ZmLXNjcmVlbi4KKyAgICBlbGlmIG9zID09
ICJ3aW5kb3dzX250IjoKKyAgICAgICAgYXNzZXJ0X3N1Y2Nlc3MocmVzcG9uc2UsIHsieCI6IC04
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ5IjogLTgsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIndpZHRoIjogb3JpZ2luYWxbIndpZHRoIl0sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhlaWdodCI6IG9yaWdpbmFsWyJoZWlnaHQi
XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3RhdGUiOiBvcmlnaW5hbFsi
c3RhdGUiXX0pCisKKworZGVmIHRlc3RfbW92ZV90b19zYW1lX3Bvc2l0aW9uKHNlc3Npb24pOgor
ICAgIG9yaWdpbmFsX3Bvc2l0aW9uID0gc2Vzc2lvbi53aW5kb3cucG9zaXRpb24KKyAgICBwb3Np
dGlvbiA9IHNlc3Npb24ud2luZG93LnBvc2l0aW9uID0gKGludChvcmlnaW5hbF9wb3NpdGlvblsw
XSksIGludChvcmlnaW5hbF9wb3NpdGlvblsxXSkpCisgICAgYXNzZXJ0IHBvc2l0aW9uID09IG9y
aWdpbmFsX3Bvc2l0aW9uCisKKworZGVmIHRlc3RfbW92ZV90b19zYW1lX3goc2Vzc2lvbik6Cisg
ICAgb3JpZ2luYWxfeCA9IHNlc3Npb24ud2luZG93LnBvc2l0aW9uWzBdCisgICAgcG9zaXRpb24g
PSBzZXNzaW9uLndpbmRvdy5wb3NpdGlvbiA9IChpbnQob3JpZ2luYWxfeCksIDM0NSkKKyAgICBh
c3NlcnQgcG9zaXRpb24gPT0gKG9yaWdpbmFsX3gsIDM0NSkKKworCitkZWYgdGVzdF9tb3ZlX3Rv
X3NhbWVfeShzZXNzaW9uKToKKyAgICBvcmlnaW5hbF95ID0gc2Vzc2lvbi53aW5kb3cucG9zaXRp
b25bMV0KKyAgICBwb3NpdGlvbiA9IHNlc3Npb24ud2luZG93LnBvc2l0aW9uID0gKDQ1NiwgaW50
KG9yaWdpbmFsX3kpKQorICAgIGFzc2VydCBwb3NpdGlvbiA9PSAoNDU2LCBvcmlnaW5hbF95KQor
CisKK2RlZiB0ZXN0X3Jlc2l6ZV90b19zYW1lX3NpemUoc2Vzc2lvbik6CisgICAgb3JpZ2luYWxf
c2l6ZSA9IHNlc3Npb24ud2luZG93LnNpemUKKyAgICBzaXplID0gc2Vzc2lvbi53aW5kb3cuc2l6
ZSA9IChpbnQob3JpZ2luYWxfc2l6ZVswXSksIGludChvcmlnaW5hbF9zaXplWzFdKSkKKyAgICBh
c3NlcnQgc2l6ZSA9PSBvcmlnaW5hbF9zaXplCisKKworZGVmIHRlc3RfcmVzaXplX3RvX3NhbWVf
d2lkdGgoc2Vzc2lvbik6CisgICAgb3JpZ2luYWxfd2lkdGggPSBzZXNzaW9uLndpbmRvdy5zaXpl
WzBdCisgICAgc2l6ZSA9IHNlc3Npb24ud2luZG93LnNpemUgPSAoaW50KG9yaWdpbmFsX3dpZHRo
KSwgMzQ1KQorICAgIGFzc2VydCBzaXplID09IChvcmlnaW5hbF93aWR0aCwgMzQ1KQorCisKK2Rl
ZiB0ZXN0X3Jlc2l6ZV90b19zYW1lX2hlaWdodChzZXNzaW9uKToKKyAgICBvcmlnaW5hbF9oZWln
aHQgPSBzZXNzaW9uLndpbmRvdy5zaXplWzFdCisgICAgc2l6ZSA9IHNlc3Npb24ud2luZG93LnNp
emUgPSAoNDU2LCBpbnQob3JpZ2luYWxfaGVpZ2h0KSkKKyAgICBhc3NlcnQgc2l6ZSA9PSAoNDU2
LCBvcmlnaW5hbF9oZWlnaHQpCisKKworZGVmIHRlc3RfcGF5bG9hZChzZXNzaW9uKToKKyAgICAj
IHN0ZXAgMTQKKyAgICByZXNwb25zZSA9IHNldF93aW5kb3dfcmVjdChzZXNzaW9uLCB7IngiOiA0
MDAsICJ5IjogNDAwfSkKKworICAgIGFzc2VydCByZXNwb25zZS5zdGF0dXMgPT0gMjAwCisgICAg
YXNzZXJ0IGlzaW5zdGFuY2UocmVzcG9uc2UuYm9keVsidmFsdWUiXSwgZGljdCkKKyAgICByZWN0
ID0gcmVzcG9uc2UuYm9keVsidmFsdWUiXQorICAgIGFzc2VydCAid2lkdGgiIGluIHJlY3QKKyAg
ICBhc3NlcnQgImhlaWdodCIgaW4gcmVjdAorICAgIGFzc2VydCAieCIgaW4gcmVjdAorICAgIGFz
c2VydCAieSIgaW4gcmVjdAorICAgIGFzc2VydCAic3RhdGUiIGluIHJlY3QKKyAgICBhc3NlcnQg
aXNpbnN0YW5jZShyZWN0WyJ3aWR0aCJdLCAoaW50LCBmbG9hdCkpCisgICAgYXNzZXJ0IGlzaW5z
dGFuY2UocmVjdFsiaGVpZ2h0Il0sIChpbnQsIGZsb2F0KSkKKyAgICBhc3NlcnQgaXNpbnN0YW5j
ZShyZWN0WyJ4Il0sIChpbnQsIGZsb2F0KSkKKyAgICBhc3NlcnQgaXNpbnN0YW5jZShyZWN0WyJ5
Il0sIChpbnQsIGZsb2F0KSkKKyAgICBhc3NlcnQgaXNpbnN0YW5jZShyZWN0WyJzdGF0ZSJdLCBi
YXNlc3RyaW5nKQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRy
aXZlci90ZXN0cy9zdGF0ZS9fX2luaXRfXy5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWJkcml2ZXIvdGVzdHMvc3RhdGUvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAuLmU2OWRlMjliYjJkCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL3N0YXRlL2dldF9lbGVtZW50X2F0dHJpYnV0
ZS5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvc3RhdGUv
Z2V0X2VsZW1lbnRfYXR0cmlidXRlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi5lNjYyZDk1YTljNwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2lt
cG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvc3RhdGUvZ2V0X2VsZW1lbnRfYXR0cmlidXRlLnB5
CkBAIC0wLDAgKzEsMTkyIEBACitpbXBvcnQgcHl0ZXN0CisKK2Zyb20gdGVzdHMuc3VwcG9ydC5h
c3NlcnRzIGltcG9ydCBhc3NlcnRfZXJyb3IsIGFzc2VydF9zdWNjZXNzLCBhc3NlcnRfZGlhbG9n
X2hhbmRsZWQKK2Zyb20gdGVzdHMuc3VwcG9ydC5maXh0dXJlcyBpbXBvcnQgY3JlYXRlX2RpYWxv
ZworZnJvbSB0ZXN0cy5zdXBwb3J0LmlubGluZSBpbXBvcnQgaW5saW5lCisKKworZGVmIGdldF9h
dHRyaWJ1dGUoc2Vzc2lvbiwgZWxlbWVudCwgYXR0cik6CisgICAgcmV0dXJuIHNlc3Npb24udHJh
bnNwb3J0LnNlbmQoIkdFVCIsICJzZXNzaW9uL3tzZXNzaW9uX2lkfS9lbGVtZW50L3tlbGVtZW50
X2lkfS9hdHRyaWJ1dGUve2F0dHJ9IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC5mb3JtYXQoc2Vzc2lvbl9pZD1zZXNzaW9uLnNlc3Npb25faWQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50X2lkPWVsZW1lbnQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyPWF0dHIpKQorCisKKyMgMTMuMiBH
ZXQgRWxlbWVudCBBdHRyaWJ1dGUKKworZGVmIHRlc3Rfbm9fYnJvd3NpbmdfY29udGV4dChzZXNz
aW9uLCBjcmVhdGVfd2luZG93KToKKyAgICAjIDEzLjIgc3RlcCAxCisgICAgc2Vzc2lvbi53aW5k
b3dfaGFuZGxlID0gY3JlYXRlX3dpbmRvdygpCisgICAgc2Vzc2lvbi5jbG9zZSgpCisKKyAgICBy
ZXN1bHQgPSBnZXRfYXR0cmlidXRlKHNlc3Npb24sICJmb28iLCAiaWQiKQorCisgICAgYXNzZXJ0
X2Vycm9yKHJlc3VsdCwgIm5vIHN1Y2ggd2luZG93IikKKworCitkZWYgdGVzdF9oYW5kbGVfcHJv
bXB0X2Rpc21pc3MobmV3X3Nlc3Npb24pOgorICAgICMgMTMuMiBzdGVwIDIKKyAgICBfLCBzZXNz
aW9uID0gbmV3X3Nlc3Npb24oeyJhbHdheXNNYXRjaCI6IHsidW5oYW5kbGVkUHJvbXB0QmVoYXZp
b3IiOiAiZGlzbWlzcyJ9fSkKKyAgICBzZXNzaW9uLnVybCA9IGlubGluZSgiPGlucHV0IGlkPWZv
bz4iKQorCisgICAgY3JlYXRlX2RpYWxvZyhzZXNzaW9uKSgiYWxlcnQiLCB0ZXh0PSJkaXNtaXNz
ICMxIiwgcmVzdWx0X3Zhcj0iZGlzbWlzczEiKQorCisgICAgcmVzdWx0ID0gZ2V0X2F0dHJpYnV0
ZShzZXNzaW9uLCAiZm9vIiwgImlkIikKKworICAgIGFzc2VydF9zdWNjZXNzKHJlc3VsdCwgImZv
byIpCisgICAgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNlc3Npb24sICJkaXNtaXNzICMxIikKKwor
ICAgIGNyZWF0ZV9kaWFsb2coc2Vzc2lvbikoImNvbmZpcm0iLCB0ZXh0PSJkaXNtaXNzICMyIiwg
cmVzdWx0X3Zhcj0iZGlzbWlzczIiKQorCisgICAgcmVzdWx0ID0gZ2V0X2F0dHJpYnV0ZShzZXNz
aW9uLCAiZm9vIiwgImlkIikKKworICAgIGFzc2VydF9zdWNjZXNzKHJlc3VsdCwgImZvbyIpCisg
ICAgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNlc3Npb24sICJkaXNtaXNzICMyIikKKworICAgIGNy
ZWF0ZV9kaWFsb2coc2Vzc2lvbikoInByb21wdCIsIHRleHQ9ImRpc21pc3MgIzMiLCByZXN1bHRf
dmFyPSJkaXNtaXNzMyIpCisKKyAgICByZXN1bHQgPSBnZXRfYXR0cmlidXRlKHNlc3Npb24sICJm
b28iLCAiaWQiKQorCisgICAgYXNzZXJ0X3N1Y2Nlc3MocmVzdWx0LCAiZm9vIikKKyAgICBhc3Nl
cnRfZGlhbG9nX2hhbmRsZWQoc2Vzc2lvbiwgImRpc21pc3MgIzMiKQorCisKK2RlZiB0ZXN0X2hh
bmRsZV9wcm9tcHRfYWNjZXB0KG5ld19zZXNzaW9uKToKKyAgICAjIDEzLjIgc3RlcCAyCisgICAg
Xywgc2Vzc2lvbiA9IG5ld19zZXNzaW9uKHsiYWx3YXlzTWF0Y2giOiB7InVuaGFuZGxlZFByb21w
dEJlaGF2aW9yIjogImFjY2VwdCJ9fSkKKyAgICBzZXNzaW9uLnVybCA9IGlubGluZSgiPGlucHV0
IGlkPWZvbz4iKQorCisgICAgY3JlYXRlX2RpYWxvZyhzZXNzaW9uKSgiYWxlcnQiLCB0ZXh0PSJk
aXNtaXNzICMxIiwgcmVzdWx0X3Zhcj0iZGlzbWlzczEiKQorCisgICAgcmVzdWx0ID0gZ2V0X2F0
dHJpYnV0ZShzZXNzaW9uLCAiZm9vIiwgImlkIikKKworICAgIGFzc2VydF9zdWNjZXNzKHJlc3Vs
dCwgImZvbyIpCisgICAgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNlc3Npb24sICJkaXNtaXNzICMx
IikKKworICAgIGNyZWF0ZV9kaWFsb2coc2Vzc2lvbikoImNvbmZpcm0iLCB0ZXh0PSJkaXNtaXNz
ICMyIiwgcmVzdWx0X3Zhcj0iZGlzbWlzczIiKQorCisgICAgcmVzdWx0ID0gZ2V0X2F0dHJpYnV0
ZShzZXNzaW9uLCAiZm9vIiwgImlkIikKKworICAgIGFzc2VydF9zdWNjZXNzKHJlc3VsdCwgImZv
byIpCisgICAgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNlc3Npb24sICJkaXNtaXNzICMyIikKKwor
ICAgIGNyZWF0ZV9kaWFsb2coc2Vzc2lvbikoInByb21wdCIsIHRleHQ9ImRpc21pc3MgIzMiLCBy
ZXN1bHRfdmFyPSJkaXNtaXNzMyIpCisKKyAgICByZXN1bHQgPSBnZXRfYXR0cmlidXRlKHNlc3Np
b24sICJmb28iLCAiaWQiKQorCisgICAgYXNzZXJ0X3N1Y2Nlc3MocmVzdWx0LCAiZm9vIikKKyAg
ICBhc3NlcnRfZGlhbG9nX2hhbmRsZWQoc2Vzc2lvbiwgImRpc21pc3MgIzMiKQorCisKK2RlZiB0
ZXN0X2hhbmRsZV9wcm9tcHRfbWlzc2luZ192YWx1ZShzZXNzaW9uLCBjcmVhdGVfZGlhbG9nKToK
KyAgICAjIDEzLjIgc3RlcCAyCisgICAgc2Vzc2lvbi51cmwgPSBpbmxpbmUoIjxpbnB1dCBpZD1m
b28+IikKKworICAgIGNyZWF0ZV9kaWFsb2coc2Vzc2lvbikoImFsZXJ0IiwgdGV4dD0iZGlzbWlz
cyAjMSIsIHJlc3VsdF92YXI9ImRpc21pc3MxIikKKworICAgIHJlc3VsdCA9IGdldF9hdHRyaWJ1
dGUoc2Vzc2lvbiwgImZvbyIsICJpZCIpCisKKyAgICBhc3NlcnRfZXJyb3IocmVzdWx0LCAidW5l
eHBlY3RlZCBhbGVydCBvcGVuIikKKyAgICBhc3NlcnRfZGlhbG9nX2hhbmRsZWQoc2Vzc2lvbiwg
ImRpc21pc3MgIzEiKQorCisgICAgY3JlYXRlX2RpYWxvZyhzZXNzaW9uKSgiY29uZmlybSIsIHRl
eHQ9ImRpc21pc3MgIzIiLCByZXN1bHRfdmFyPSJkaXNtaXNzMiIpCisKKyAgICByZXN1bHQgPSBn
ZXRfYXR0cmlidXRlKHNlc3Npb24sICJmb28iLCAiaWQiKQorCisgICAgYXNzZXJ0X2Vycm9yKHJl
c3VsdCwgInVuZXhwZWN0ZWQgYWxlcnQgb3BlbiIpCisgICAgYXNzZXJ0X2RpYWxvZ19oYW5kbGVk
KHNlc3Npb24sICJkaXNtaXNzICMyIikKKworICAgIGNyZWF0ZV9kaWFsb2coc2Vzc2lvbikoInBy
b21wdCIsIHRleHQ9ImRpc21pc3MgIzMiLCByZXN1bHRfdmFyPSJkaXNtaXNzMyIpCisKKyAgICBy
ZXN1bHQgPSBnZXRfYXR0cmlidXRlKHNlc3Npb24sICJmb28iLCAiaWQiKQorCisgICAgYXNzZXJ0
X2Vycm9yKHJlc3VsdCwgInVuZXhwZWN0ZWQgYWxlcnQgb3BlbiIpCisgICAgYXNzZXJ0X2RpYWxv
Z19oYW5kbGVkKHNlc3Npb24sICJkaXNtaXNzICMzIikKKworCitkZWYgdGVzdF9lbGVtZW50X25v
dF9mb3VuZChzZXNzaW9uKToKKyAgICAjIDEzLjIgU3RlcCAzCisgICAgcmVzdWx0ID0gZ2V0X2F0
dHJpYnV0ZShzZXNzaW9uLCAiZm9vIiwgImlkIikKKworICAgIGFzc2VydF9lcnJvcihyZXN1bHQs
ICJubyBzdWNoIGVsZW1lbnQiKQorCisKK2RlZiB0ZXN0X2VsZW1lbnRfc3RhbGUoc2Vzc2lvbik6
CisgICAgIyAxMy4yIHN0ZXAgNAorICAgIHNlc3Npb24udXJsID0gaW5saW5lKCI8aW5wdXQgaWQ9
Zm9vPiIpCisgICAgZWxlbWVudCA9IHNlc3Npb24uZmluZC5jc3MoImlucHV0IiwgYWxsPUZhbHNl
KQorICAgIHNlc3Npb24ucmVmcmVzaCgpCisgICAgcmVzdWx0ID0gZ2V0X2F0dHJpYnV0ZShzZXNz
aW9uLCBlbGVtZW50LmlkLCAiaWQiKQorCisgICAgYXNzZXJ0X2Vycm9yKHJlc3VsdCwgInN0YWxl
IGVsZW1lbnQgcmVmZXJlbmNlIikKKworCitkZWYgdGVzdF9ub3JtYWwoc2Vzc2lvbik6CisgICAg
IyAxMy4yIFN0ZXAgNQorICAgIHNlc3Npb24udXJsID0gaW5saW5lKCI8aW5wdXQgdHlwZT1jaGVj
a2JveD4iKQorICAgIGVsZW1lbnQgPSBzZXNzaW9uLmZpbmQuY3NzKCJpbnB1dCIsIGFsbD1GYWxz
ZSkKKyAgICByZXN1bHQgPSBnZXRfYXR0cmlidXRlKHNlc3Npb24sIGVsZW1lbnQuaWQsICJpbnB1
dCIpCisgICAgYXNzZXJ0X3N1Y2Nlc3MocmVzdWx0LCBOb25lKQorICAgIGFzc2VydCBGYWxzZSA9
PSBzZXNzaW9uLmV4ZWN1dGVfc2NyaXB0KCJyZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcign
aW5wdXQnKS5jaGVja2VkIikKKworICAgICMgQ2hlY2sgd2UgYXJlIG5vdCByZXR1cm5pbmcgdGhl
IHByb3BlcnR5IHdoaWNoIHdpbGwgaGF2ZSBhIGRpZmZlcmVudCB2YWx1ZQorICAgIGVsZW1lbnQu
Y2xpY2soKQorICAgIGFzc2VydCBUcnVlID09IHNlc3Npb24uZXhlY3V0ZV9zY3JpcHQoInJldHVy
biBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpLmNoZWNrZWQiKQorICAgIHJlc3VsdCA9
IGdldF9hdHRyaWJ1dGUoc2Vzc2lvbiwgZWxlbWVudC5pZCwgImlucHV0IikKKyAgICBhc3NlcnRf
c3VjY2VzcyhyZXN1bHQsIE5vbmUpCisKKworQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKCJ0YWcs
YXR0cnMiLCBbCisgICAgKCJhdWRpbyIsIFsiYXV0b3BsYXkiLCAiY29udHJvbHMiLCAibG9vcCIs
ICJtdXRlZCJdKSwKKyAgICAoImJ1dHRvbiIsIFsiYXV0b2ZvY3VzIiwgImRpc2FibGVkIiwgImZv
cm1ub3ZhbGlkYXRlIl0pLAorICAgICgiZGV0YWlscyIsIFsib3BlbiJdKSwKKyAgICAoImRpYWxv
ZyIsIFsib3BlbiJdKSwKKyAgICAoImZpZWxkc2V0IiwgWyJkaXNhYmxlZCJdKSwKKyAgICAoImZv
cm0iLCBbIm5vdmFsaWRhdGUiXSksCisgICAgKCJpZnJhbWUiLCBbImFsbG93ZnVsbHNjcmVlbiJd
KSwKKyAgICAoImltZyIsIFsiaXNtYXAiXSksCisgICAgKCJpbnB1dCIsIFsiYXV0b2ZvY3VzIiwg
ImNoZWNrZWQiLCAiZGlzYWJsZWQiLCAiZm9ybW5vdmFsaWRhdGUiLCAibXVsdGlwbGUiLCAicmVh
ZG9ubHkiLCAicmVxdWlyZWQiXSksCisgICAgKCJtZW51aXRlbSIsIFsiY2hlY2tlZCIsICJkZWZh
dWx0IiwgImRpc2FibGVkIl0pLAorICAgICgib2JqZWN0IiwgWyJ0eXBlbXVzdG1hdGNoIl0pLAor
ICAgICgib2wiLCBbInJldmVyc2VkIl0pLAorICAgICgib3B0Z3JvdXAiLCBbImRpc2FibGVkIl0p
LAorICAgICgib3B0aW9uIiwgWyJkaXNhYmxlZCIsICJzZWxlY3RlZCJdKSwKKyAgICAoInNjcmlw
dCIsIFsiYXN5bmMiLCAiZGVmZXIiXSksCisgICAgKCJzZWxlY3QiLCBbImF1dG9mb2N1cyIsICJk
aXNhYmxlZCIsICJtdWx0aXBsZSIsICJyZXF1aXJlZCJdKSwKKyAgICAoInRleHRhcmVhIiwgWyJh
dXRvZm9jdXMiLCAiZGlzYWJsZWQiLCAicmVhZG9ubHkiLCAicmVxdWlyZWQiXSksCisgICAgKCJ0
cmFjayIsIFsiZGVmYXVsdCJdKSwKKyAgICAoInZpZGVvIiwgWyJhdXRvcGxheSIsICJjb250cm9s
cyIsICJsb29wIiwgIm11dGVkIl0pCitdKQorZGVmIHRlc3RfYm9vbGVhbl9hdHRyaWJ1dGUoc2Vz
c2lvbiwgdGFnLCBhdHRycyk6CisgICAgIyAxMy4yIFN0ZXAgNQorICAgIGZvciBhdHRyIGluIGF0
dHJzOgorICAgICAgICBzZXNzaW9uLnVybCA9IGlubGluZSgiPHswfSB7MX0+Ii5mb3JtYXQodGFn
LCBhdHRyKSkKKworICAgICAgICBlbGVtZW50ID0gc2Vzc2lvbi5maW5kLmNzcyh0YWcsIGFsbD1G
YWxzZSkKKyAgICAgICAgcmVzdWx0ID0gcmVzdWx0ID0gZ2V0X2F0dHJpYnV0ZShzZXNzaW9uLCBl
bGVtZW50LmlkLCBhdHRyKQorICAgICAgICBhc3NlcnRfc3VjY2VzcyhyZXN1bHQsICJ0cnVlIikK
KworCitkZWYgdGVzdF9nbG9iYWxfYm9vbGVhbl9hdHRyaWJ1dGVzKHNlc3Npb24pOgorICAgICMg
MTMuMiBTdGVwIDUKKyAgICBzZXNzaW9uLnVybCA9IGlubGluZSgiPHAgaGlkZGVuPmZvbyIpCisg
ICAgZWxlbWVudCA9IHNlc3Npb24uZmluZC5jc3MoInAiLCBhbGw9RmFsc2UpCisgICAgcmVzdWx0
ID0gcmVzdWx0ID0gZ2V0X2F0dHJpYnV0ZShzZXNzaW9uLCBlbGVtZW50LmlkLCAiaGlkZGVuIikK
KworICAgIGFzc2VydF9zdWNjZXNzKHJlc3VsdCwgInRydWUiKQorCisgICAgc2Vzc2lvbi51cmwg
PSBpbmxpbmUoIjxwPmZvbyIpCisgICAgZWxlbWVudCA9IHNlc3Npb24uZmluZC5jc3MoInAiLCBh
bGw9RmFsc2UpCisgICAgcmVzdWx0ID0gcmVzdWx0ID0gZ2V0X2F0dHJpYnV0ZShzZXNzaW9uLCBl
bGVtZW50LmlkLCAiaGlkZGVuIikKKyAgICBhc3NlcnRfc3VjY2VzcyhyZXN1bHQsIE5vbmUpCisK
KyAgICBzZXNzaW9uLnVybCA9IGlubGluZSgiPHAgaXRlbXNjb3BlPmZvbyIpCisgICAgZWxlbWVu
dCA9IHNlc3Npb24uZmluZC5jc3MoInAiLCBhbGw9RmFsc2UpCisgICAgcmVzdWx0ID0gcmVzdWx0
ID0gZ2V0X2F0dHJpYnV0ZShzZXNzaW9uLCBlbGVtZW50LmlkLCAiaXRlbXNjb3BlIikKKworICAg
IGFzc2VydF9zdWNjZXNzKHJlc3VsdCwgInRydWUiKQorCisgICAgc2Vzc2lvbi51cmwgPSBpbmxp
bmUoIjxwPmZvbyIpCisgICAgZWxlbWVudCA9IHNlc3Npb24uZmluZC5jc3MoInAiLCBhbGw9RmFs
c2UpCisgICAgcmVzdWx0ID0gcmVzdWx0ID0gZ2V0X2F0dHJpYnV0ZShzZXNzaW9uLCBlbGVtZW50
LmlkLCAiaXRlbXNjb3BlIikKKyAgICBhc3NlcnRfc3VjY2VzcyhyZXN1bHQsIE5vbmUpCmRpZmYg
LS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL3N0YXRl
L2dldF9lbGVtZW50X3Byb3BlcnR5LnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dl
YmRyaXZlci90ZXN0cy9zdGF0ZS9nZXRfZWxlbWVudF9wcm9wZXJ0eS5weQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDBhODVhZjY5YjUKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL3N0YXRlL2dldF9l
bGVtZW50X3Byb3BlcnR5LnB5CkBAIC0wLDAgKzEsMTY0IEBACitmcm9tIHRlc3RzLnN1cHBvcnQu
YXNzZXJ0cyBpbXBvcnQgYXNzZXJ0X2Vycm9yLCBhc3NlcnRfZGlhbG9nX2hhbmRsZWQsIGFzc2Vy
dF9zdWNjZXNzCitmcm9tIHRlc3RzLnN1cHBvcnQuaW5saW5lIGltcG9ydCBpbmxpbmUKK2Zyb20g
dGVzdHMuc3VwcG9ydC5maXh0dXJlcyBpbXBvcnQgY3JlYXRlX2RpYWxvZworCitfaW5wdXQgPSBp
bmxpbmUoIjxpbnB1dCBpZD1pMT4iKQorCisKKyMgMTMuMyBHZXQgRWxlbWVudCBQcm9wZXJ0eQor
CitkZWYgdGVzdF9ub19icm93c2luZ19jb250ZXh0KHNlc3Npb24sIGNyZWF0ZV93aW5kb3cpOgor
ICAgICMgMTMuMyBzdGVwIDEKKyAgICBzZXNzaW9uLndpbmRvd19oYW5kbGUgPSBjcmVhdGVfd2lu
ZG93KCkKKyAgICBzZXNzaW9uLmNsb3NlKCkKKworICAgIHJlc3VsdCA9IHNlc3Npb24udHJhbnNw
b3J0LnNlbmQoIkdFVCIsICJzZXNzaW9uL3tzZXNzaW9uX2lkfS9lbGVtZW50L3tlbGVtZW50X2lk
fS9wcm9wZXJ0eS9pZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3Jt
YXQoc2Vzc2lvbl9pZD1zZXNzaW9uLnNlc3Npb25faWQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRfaWQ9ImZvbyIpKQorCisgICAgYXNzZXJ0X2Vy
cm9yKHJlc3VsdCwgIm5vIHN1Y2ggd2luZG93IikKKworCitkZWYgdGVzdF9oYW5kbGVfcHJvbXB0
X2Rpc21pc3MobmV3X3Nlc3Npb24pOgorICAgICMgMTMuMyBzdGVwIDIKKyAgICBfLCBzZXNzaW9u
ID0gbmV3X3Nlc3Npb24oeyJhbHdheXNNYXRjaCI6IHsidW5oYW5kbGVkUHJvbXB0QmVoYXZpb3Ii
OiAiZGlzbWlzcyJ9fSkKKyAgICBzZXNzaW9uLnVybCA9IGlubGluZSgiPGlucHV0IGlkPWZvbz4i
KQorCisgICAgY3JlYXRlX2RpYWxvZyhzZXNzaW9uKSgiYWxlcnQiLCB0ZXh0PSJkaXNtaXNzICMx
IiwgcmVzdWx0X3Zhcj0iZGlzbWlzczEiKQorCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3Bv
cnQuc2VuZCgiR0VUIiwgInNlc3Npb24ve3Nlc3Npb25faWR9L2VsZW1lbnQve2VsZW1lbnRfaWR9
L3Byb3BlcnR5L2lkIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1h
dChzZXNzaW9uX2lkPXNlc3Npb24uc2Vzc2lvbl9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZWxlbWVudF9pZD0iZm9vIikpCisKKyAgICBhc3NlcnRfc3Vj
Y2VzcyhyZXN1bHQsICJmb28iKQorICAgIGFzc2VydF9kaWFsb2dfaGFuZGxlZChzZXNzaW9uLCAi
ZGlzbWlzcyAjMSIpCisKKyAgICBjcmVhdGVfZGlhbG9nKHNlc3Npb24pKCJjb25maXJtIiwgdGV4
dD0iZGlzbWlzcyAjMiIsIHJlc3VsdF92YXI9ImRpc21pc3MyIikKKworICAgIHJlc3VsdCA9IHNl
c3Npb24udHJhbnNwb3J0LnNlbmQoIkdFVCIsICJzZXNzaW9uL3tzZXNzaW9uX2lkfS9lbGVtZW50
L3tlbGVtZW50X2lkfS9wcm9wZXJ0eS9pZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC5mb3JtYXQoc2Vzc2lvbl9pZD1zZXNzaW9uLnNlc3Npb25faWQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRfaWQ9ImZvbyIpKQorCisg
ICAgYXNzZXJ0X3N1Y2Nlc3MocmVzdWx0LCAiZm9vIikKKyAgICBhc3NlcnRfZGlhbG9nX2hhbmRs
ZWQoc2Vzc2lvbiwgImRpc21pc3MgIzIiKQorCisgICAgY3JlYXRlX2RpYWxvZyhzZXNzaW9uKSgi
cHJvbXB0IiwgdGV4dD0iZGlzbWlzcyAjMyIsIHJlc3VsdF92YXI9ImRpc21pc3MzIikKKworICAg
IHJlc3VsdCA9IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIkdFVCIsICJzZXNzaW9uL3tzZXNzaW9u
X2lkfS9lbGVtZW50L3tlbGVtZW50X2lkfS9wcm9wZXJ0eS9pZCIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoc2Vzc2lvbl9pZD1zZXNzaW9uLnNlc3Npb25faWQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRfaWQ9
ImZvbyIpKQorCisgICAgYXNzZXJ0X3N1Y2Nlc3MocmVzdWx0LCAiZm9vIikKKyAgICBhc3NlcnRf
ZGlhbG9nX2hhbmRsZWQoc2Vzc2lvbiwgImRpc21pc3MgIzMiKQorCisKKworZGVmIHRlc3RfaGFu
ZGxlX3Byb21wdF9hY2NlcHQobmV3X3Nlc3Npb24pOgorICAgICMgMTMuMyBzdGVwIDIKKyAgICBf
LCBzZXNzaW9uID0gbmV3X3Nlc3Npb24oeyJhbHdheXNNYXRjaCI6IHsidW5oYW5kbGVkUHJvbXB0
QmVoYXZpb3IiOiAiYWNjZXB0In19KQorICAgIHNlc3Npb24udXJsID0gaW5saW5lKCI8aW5wdXQg
aWQ9Zm9vPiIpCisKKyAgICBjcmVhdGVfZGlhbG9nKHNlc3Npb24pKCJhbGVydCIsIHRleHQ9ImRp
c21pc3MgIzEiLCByZXN1bHRfdmFyPSJkaXNtaXNzMSIpCisKKyAgICByZXN1bHQgPSBzZXNzaW9u
LnRyYW5zcG9ydC5zZW5kKCJHRVQiLCAic2Vzc2lvbi97c2Vzc2lvbl9pZH0vZWxlbWVudC97ZWxl
bWVudF9pZH0vcHJvcGVydHkvaWQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAuZm9ybWF0KHNlc3Npb25faWQ9c2Vzc2lvbi5zZXNzaW9uX2lkLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50X2lkPSJmb28iKSkKKworICAgIGFz
c2VydF9zdWNjZXNzKHJlc3VsdCwgImZvbyIpCisgICAgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNl
c3Npb24sICJkaXNtaXNzICMxIikKKworICAgIGNyZWF0ZV9kaWFsb2coc2Vzc2lvbikoImNvbmZp
cm0iLCB0ZXh0PSJkaXNtaXNzICMyIiwgcmVzdWx0X3Zhcj0iZGlzbWlzczIiKQorCisgICAgcmVz
dWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwgInNlc3Npb24ve3Nlc3Npb25faWR9
L2VsZW1lbnQve2VsZW1lbnRfaWR9L3Byb3BlcnR5L2lkIgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLmZvcm1hdChzZXNzaW9uX2lkPXNlc3Npb24uc2Vzc2lvbl9pZCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudF9pZD0iZm9v
IikpCisKKyAgICBhc3NlcnRfc3VjY2VzcyhyZXN1bHQsICJmb28iKQorICAgIGFzc2VydF9kaWFs
b2dfaGFuZGxlZChzZXNzaW9uLCAiZGlzbWlzcyAjMiIpCisKKyAgICBjcmVhdGVfZGlhbG9nKHNl
c3Npb24pKCJwcm9tcHQiLCB0ZXh0PSJkaXNtaXNzICMzIiwgcmVzdWx0X3Zhcj0iZGlzbWlzczMi
KQorCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwgInNlc3Npb24v
e3Nlc3Npb25faWR9L2VsZW1lbnQve2VsZW1lbnRfaWR9L3Byb3BlcnR5L2lkIgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChzZXNzaW9uX2lkPXNlc3Npb24uc2Vz
c2lvbl9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxl
bWVudF9pZD0iZm9vIikpCisKKyAgICBhc3NlcnRfc3VjY2VzcyhyZXN1bHQsICJmb28iKQorICAg
IGFzc2VydF9kaWFsb2dfaGFuZGxlZChzZXNzaW9uLCAiZGlzbWlzcyAjMyIpCisKKworZGVmIHRl
c3RfaGFuZGxlX3Byb21wdF9taXNzaW5nX3ZhbHVlKHNlc3Npb24sIGNyZWF0ZV9kaWFsb2cpOgor
ICAgICMgMTMuMyBzdGVwIDIKKyAgICBzZXNzaW9uLnVybCA9IGlubGluZSgiPGlucHV0IGlkPWZv
bz4iKQorCisgICAgY3JlYXRlX2RpYWxvZyhzZXNzaW9uKSgiYWxlcnQiLCB0ZXh0PSJkaXNtaXNz
ICMxIiwgcmVzdWx0X3Zhcj0iZGlzbWlzczEiKQorCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFu
c3BvcnQuc2VuZCgiR0VUIiwgInNlc3Npb24ve3Nlc3Npb25faWR9L2VsZW1lbnQve2VsZW1lbnRf
aWR9L3Byb3BlcnR5L2lkIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZv
cm1hdChzZXNzaW9uX2lkPXNlc3Npb24uc2Vzc2lvbl9pZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudF9pZD0iZm9vIikpCisKKyAgICBhc3NlcnRf
ZXJyb3IocmVzdWx0LCAidW5leHBlY3RlZCBhbGVydCBvcGVuIikKKyAgICBhc3NlcnRfZGlhbG9n
X2hhbmRsZWQoc2Vzc2lvbiwgImRpc21pc3MgIzEiKQorCisgICAgY3JlYXRlX2RpYWxvZyhzZXNz
aW9uKSgiY29uZmlybSIsIHRleHQ9ImRpc21pc3MgIzIiLCByZXN1bHRfdmFyPSJkaXNtaXNzMiIp
CisKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLCAic2Vzc2lvbi97
c2Vzc2lvbl9pZH0vZWxlbWVudC97ZWxlbWVudF9pZH0vcHJvcGVydHkvaWQiCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHNlc3Npb25faWQ9c2Vzc2lvbi5zZXNz
aW9uX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVt
ZW50X2lkPSJmb28iKSkKKworICAgIGFzc2VydF9lcnJvcihyZXN1bHQsICJ1bmV4cGVjdGVkIGFs
ZXJ0IG9wZW4iKQorICAgIGFzc2VydF9kaWFsb2dfaGFuZGxlZChzZXNzaW9uLCAiZGlzbWlzcyAj
MiIpCisKKyAgICBjcmVhdGVfZGlhbG9nKHNlc3Npb24pKCJwcm9tcHQiLCB0ZXh0PSJkaXNtaXNz
ICMzIiwgcmVzdWx0X3Zhcj0iZGlzbWlzczMiKQorCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFu
c3BvcnQuc2VuZCgiR0VUIiwgInNlc3Npb24ve3Nlc3Npb25faWR9L2VsZW1lbnQve2VsZW1lbnRf
aWR9L3Byb3BlcnR5L2lkIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZv
cm1hdChzZXNzaW9uX2lkPXNlc3Npb24uc2Vzc2lvbl9pZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudF9pZD0iZm9vIikpCisKKyAgICBhc3NlcnRf
ZXJyb3IocmVzdWx0LCAidW5leHBlY3RlZCBhbGVydCBvcGVuIikKKyAgICBhc3NlcnRfZGlhbG9n
X2hhbmRsZWQoc2Vzc2lvbiwgImRpc21pc3MgIzMiKQorCitkZWYgdGVzdF9lbGVtZW50X25vdF9m
b3VuZChzZXNzaW9uKToKKyAgICAjIDEzLjMgU3RlcCAzCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50
cmFuc3BvcnQuc2VuZCgiR0VUIiwgInNlc3Npb24ve3Nlc3Npb25faWR9L2VsZW1lbnQve2VsZW1l
bnRfaWR9L3Byb3BlcnR5L2lkIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LmZvcm1hdChzZXNzaW9uX2lkPXNlc3Npb24uc2Vzc2lvbl9pZCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudF9pZD0iZm9vIikpCisKKyAgICBhc3Nl
cnRfZXJyb3IocmVzdWx0LCAibm8gc3VjaCBlbGVtZW50IikKKworCitkZWYgdGVzdF9lbGVtZW50
X3N0YWxlKHNlc3Npb24pOgorICAgICMgMTMuMyBzdGVwIDQKKyAgICBzZXNzaW9uLnVybCA9IF9p
bnB1dAorICAgIGVsZW1lbnQgPSBzZXNzaW9uLmZpbmQuY3NzKCJpbnB1dCIsIGFsbD1GYWxzZSkK
KyAgICBzZXNzaW9uLnJlZnJlc2goKQorICAgIHJlc3VsdCA9IHNlc3Npb24udHJhbnNwb3J0LnNl
bmQoIkdFVCIsICJzZXNzaW9uL3tzZXNzaW9uX2lkfS9lbGVtZW50L3tlbGVtZW50X2lkfS9wcm9w
ZXJ0eS9pZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoc2Vz
c2lvbl9pZD1zZXNzaW9uLnNlc3Npb25faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVsZW1lbnRfaWQ9ZWxlbWVudC5pZCkpCisKKyAgICBhc3NlcnRfZXJy
b3IocmVzdWx0LCAic3RhbGUgZWxlbWVudCByZWZlcmVuY2UiKQorCisKK2RlZiB0ZXN0X2VsZW1l
bnRfbm9uX2V4aXN0ZW50KHNlc3Npb24pOgorICAgICMgMTMuMyBzdGVwIDUtNworICAgIHNlc3Np
b24udXJsID0gX2lucHV0CisgICAgZWxlbWVudCA9IHNlc3Npb24uZmluZC5jc3MoImlucHV0Iiwg
YWxsPUZhbHNlKQorICAgIHJlc3VsdCA9IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIkdFVCIsICJz
ZXNzaW9uL3tzZXNzaW9uX2lkfS9lbGVtZW50L3tlbGVtZW50X2lkfS9wcm9wZXJ0eS9mb28iCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHNlc3Npb25faWQ9c2Vz
c2lvbi5zZXNzaW9uX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbGVtZW50X2lkPWVsZW1lbnQuaWQpKQorCisgICAgYXNzZXJ0X3N1Y2Nlc3MocmVzdWx0
LCBOb25lKQorICAgIGFzc2VydCBOb25lID09IHNlc3Npb24uZXhlY3V0ZV9zY3JpcHQoInJldHVy
biBhcmd1bWVudHNbMF0uZm9vIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFyZ3M9W2VsZW1lbnRdKQorCisKK2RlZiB0ZXN0X2VsZW1lbnQoc2Vzc2lvbik6Cisg
ICAgIyAxMy4zIHN0ZXAgNS03CisgICAgc2Vzc2lvbi51cmwgPSBpbmxpbmUoIjxpbnB1dCB0eXBl
PWNoZWNrYm94PiIpCisgICAgZWxlbWVudCA9IHNlc3Npb24uZmluZC5jc3MoImlucHV0IiwgYWxs
PUZhbHNlKQorICAgIGVsZW1lbnQuY2xpY2soKQorICAgIGFzc2VydCBOb25lID09IHNlc3Npb24u
ZXhlY3V0ZV9zY3JpcHQoInJldHVybiBhcmd1bWVudHNbMF0uaGFzQXR0cmlidXRlKCdjaGVja2Vk
JykiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncz1bZWxl
bWVudF0pCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwgInNlc3Np
b24ve3Nlc3Npb25faWR9L2VsZW1lbnQve2VsZW1lbnRfaWR9L3Byb3BlcnR5L2lkIgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChzZXNzaW9uX2lkPXNlc3Npb24u
c2Vzc2lvbl9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZWxlbWVudF9pZD1lbGVtZW50LmlkKSkKKyAgICBhc3NlcnRfc3VjY2VzcyhyZXN1bHQsIFRydWUp
CmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3Rz
L3N0YXRlL2dldF9lbGVtZW50X3RhZ19uYW1lLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYmRyaXZlci90ZXN0cy9zdGF0ZS9nZXRfZWxlbWVudF90YWdfbmFtZS5weQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDEwMGU5YjFlMTcKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL3N0YXRl
L2dldF9lbGVtZW50X3RhZ19uYW1lLnB5CkBAIC0wLDAgKzEsMTQ2IEBACitmcm9tIHRlc3RzLnN1
cHBvcnQuYXNzZXJ0cyBpbXBvcnQgYXNzZXJ0X2Vycm9yLCBhc3NlcnRfZGlhbG9nX2hhbmRsZWQs
IGFzc2VydF9zdWNjZXNzCitmcm9tIHRlc3RzLnN1cHBvcnQuaW5saW5lIGltcG9ydCBpbmxpbmUK
K2Zyb20gdGVzdHMuc3VwcG9ydC5maXh0dXJlcyBpbXBvcnQgY3JlYXRlX2RpYWxvZworCisKKyMg
MTMuNiBHZXQgRWxlbWVudCBUYWcgTmFtZQorCitkZWYgdGVzdF9ub19icm93c2luZ19jb250ZXh0
KHNlc3Npb24sIGNyZWF0ZV93aW5kb3cpOgorICAgICMgMTMuNiBzdGVwIDEKKyAgICBzZXNzaW9u
LndpbmRvd19oYW5kbGUgPSBjcmVhdGVfd2luZG93KCkKKyAgICBzZXNzaW9uLmNsb3NlKCkKKwor
ICAgIHJlc3VsdCA9IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIkdFVCIsICJzZXNzaW9uL3tzZXNz
aW9uX2lkfS9lbGVtZW50L3tlbGVtZW50X2lkfS9uYW1lIgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLmZvcm1hdChzZXNzaW9uX2lkPXNlc3Npb24uc2Vzc2lvbl9pZCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudF9pZD0iZm9v
IikpCisKKyAgICBhc3NlcnRfZXJyb3IocmVzdWx0LCAibm8gc3VjaCB3aW5kb3ciKQorCisKK2Rl
ZiB0ZXN0X2hhbmRsZV9wcm9tcHRfZGlzbWlzcyhuZXdfc2Vzc2lvbik6CisgICAgIyAxMy42IHN0
ZXAgMgorICAgIF8sIHNlc3Npb24gPSBuZXdfc2Vzc2lvbih7ImFsd2F5c01hdGNoIjogeyJ1bmhh
bmRsZWRQcm9tcHRCZWhhdmlvciI6ICJkaXNtaXNzIn19KQorICAgIHNlc3Npb24udXJsID0gaW5s
aW5lKCI8aW5wdXQgaWQ9Zm9vPiIpCisKKyAgICBjcmVhdGVfZGlhbG9nKHNlc3Npb24pKCJhbGVy
dCIsIHRleHQ9ImRpc21pc3MgIzEiLCByZXN1bHRfdmFyPSJkaXNtaXNzMSIpCisKKyAgICByZXN1
bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLCAic2Vzc2lvbi97c2Vzc2lvbl9pZH0v
ZWxlbWVudC97ZWxlbWVudF9pZH0vbmFtZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC5mb3JtYXQoc2Vzc2lvbl9pZD1zZXNzaW9uLnNlc3Npb25faWQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRfaWQ9ImZvbyIpKQorCisg
ICAgYXNzZXJ0X3N1Y2Nlc3MocmVzdWx0LCAiZm9vIikKKyAgICBhc3NlcnRfZGlhbG9nX2hhbmRs
ZWQoc2Vzc2lvbiwgImRpc21pc3MgIzEiKQorCisgICAgY3JlYXRlX2RpYWxvZyhzZXNzaW9uKSgi
Y29uZmlybSIsIHRleHQ9ImRpc21pc3MgIzIiLCByZXN1bHRfdmFyPSJkaXNtaXNzMiIpCisKKyAg
ICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLCAic2Vzc2lvbi97c2Vzc2lv
bl9pZH0vZWxlbWVudC97ZWxlbWVudF9pZH0vbmFtZSIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC5mb3JtYXQoc2Vzc2lvbl9pZD1zZXNzaW9uLnNlc3Npb25faWQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRfaWQ9ImZvbyIp
KQorCisgICAgYXNzZXJ0X3N1Y2Nlc3MocmVzdWx0LCAiZm9vIikKKyAgICBhc3NlcnRfZGlhbG9n
X2hhbmRsZWQoc2Vzc2lvbiwgImRpc21pc3MgIzIiKQorCisgICAgY3JlYXRlX2RpYWxvZyhzZXNz
aW9uKSgicHJvbXB0IiwgdGV4dD0iZGlzbWlzcyAjMyIsIHJlc3VsdF92YXI9ImRpc21pc3MzIikK
KworICAgIHJlc3VsdCA9IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIkdFVCIsICJzZXNzaW9uL3tz
ZXNzaW9uX2lkfS9lbGVtZW50L3tlbGVtZW50X2lkfS9uYW1lIgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLmZvcm1hdChzZXNzaW9uX2lkPXNlc3Npb24uc2Vzc2lvbl9pZCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudF9pZD0i
Zm9vIikpCisKKyAgICBhc3NlcnRfc3VjY2VzcyhyZXN1bHQsICJmb28iKQorICAgIGFzc2VydF9k
aWFsb2dfaGFuZGxlZChzZXNzaW9uLCAiZGlzbWlzcyAjMyIpCisKKworZGVmIHRlc3RfaGFuZGxl
X3Byb21wdF9hY2NlcHQobmV3X3Nlc3Npb24pOgorICAgICMgMTMuNiBzdGVwIDIKKyAgICBfLCBz
ZXNzaW9uID0gbmV3X3Nlc3Npb24oeyJhbHdheXNNYXRjaCI6IHsidW5oYW5kbGVkUHJvbXB0QmVo
YXZpb3IiOiAiYWNjZXB0In19KQorICAgIHNlc3Npb24udXJsID0gaW5saW5lKCI8aW5wdXQgaWQ9
Zm9vPiIpCisKKyAgICBjcmVhdGVfZGlhbG9nKHNlc3Npb24pKCJhbGVydCIsIHRleHQ9ImRpc21p
c3MgIzEiLCByZXN1bHRfdmFyPSJkaXNtaXNzMSIpCisKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRy
YW5zcG9ydC5zZW5kKCJHRVQiLCAic2Vzc2lvbi97c2Vzc2lvbl9pZH0vZWxlbWVudC97ZWxlbWVu
dF9pZH0vbmFtZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQo
c2Vzc2lvbl9pZD1zZXNzaW9uLnNlc3Npb25faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVsZW1lbnRfaWQ9ImZvbyIpKQorCisgICAgYXNzZXJ0X3N1Y2Nl
c3MocmVzdWx0LCAiZm9vIikKKyAgICBhc3NlcnRfZGlhbG9nX2hhbmRsZWQoc2Vzc2lvbiwgImRp
c21pc3MgIzEiKQorCisgICAgY3JlYXRlX2RpYWxvZyhzZXNzaW9uKSgiY29uZmlybSIsIHRleHQ9
ImRpc21pc3MgIzIiLCByZXN1bHRfdmFyPSJkaXNtaXNzMiIpCisKKyAgICByZXN1bHQgPSBzZXNz
aW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLCAic2Vzc2lvbi97c2Vzc2lvbl9pZH0vZWxlbWVudC97
ZWxlbWVudF9pZH0vbmFtZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5m
b3JtYXQoc2Vzc2lvbl9pZD1zZXNzaW9uLnNlc3Npb25faWQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRfaWQ9ImZvbyIpKQorCisgICAgYXNzZXJ0
X3N1Y2Nlc3MocmVzdWx0LCAiZm9vIikKKyAgICBhc3NlcnRfZGlhbG9nX2hhbmRsZWQoc2Vzc2lv
biwgImRpc21pc3MgIzIiKQorCisgICAgY3JlYXRlX2RpYWxvZyhzZXNzaW9uKSgicHJvbXB0Iiwg
dGV4dD0iZGlzbWlzcyAjMyIsIHJlc3VsdF92YXI9ImRpc21pc3MzIikKKworICAgIHJlc3VsdCA9
IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIkdFVCIsICJzZXNzaW9uL3tzZXNzaW9uX2lkfS9lbGVt
ZW50L3tlbGVtZW50X2lkfS9uYW1lIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLmZvcm1hdChzZXNzaW9uX2lkPXNlc3Npb24uc2Vzc2lvbl9pZCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudF9pZD0iZm9vIikpCisKKyAgICBh
c3NlcnRfc3VjY2VzcyhyZXN1bHQsICJmb28iKQorICAgIGFzc2VydF9kaWFsb2dfaGFuZGxlZChz
ZXNzaW9uLCAiZGlzbWlzcyAjMyIpCisKKworZGVmIHRlc3RfaGFuZGxlX3Byb21wdF9taXNzaW5n
X3ZhbHVlKHNlc3Npb24sIGNyZWF0ZV9kaWFsb2cpOgorICAgICMgMTMuNiBzdGVwIDIKKyAgICBz
ZXNzaW9uLnVybCA9IGlubGluZSgiPGlucHV0IGlkPWZvbz4iKQorCisgICAgY3JlYXRlX2RpYWxv
ZyhzZXNzaW9uKSgiYWxlcnQiLCB0ZXh0PSJkaXNtaXNzICMxIiwgcmVzdWx0X3Zhcj0iZGlzbWlz
czEiKQorCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwgInNlc3Np
b24ve3Nlc3Npb25faWR9L2VsZW1lbnQve2VsZW1lbnRfaWR9L25hbWUiCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHNlc3Npb25faWQ9c2Vzc2lvbi5zZXNzaW9u
X2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50
X2lkPSJmb28iKSkKKworICAgIGFzc2VydF9lcnJvcihyZXN1bHQsICJ1bmV4cGVjdGVkIGFsZXJ0
IG9wZW4iKQorICAgIGFzc2VydF9kaWFsb2dfaGFuZGxlZChzZXNzaW9uLCAiZGlzbWlzcyAjMSIp
CisKKyAgICBjcmVhdGVfZGlhbG9nKHNlc3Npb24pKCJjb25maXJtIiwgdGV4dD0iZGlzbWlzcyAj
MiIsIHJlc3VsdF92YXI9ImRpc21pc3MyIikKKworICAgIHJlc3VsdCA9IHNlc3Npb24udHJhbnNw
b3J0LnNlbmQoIkdFVCIsICJzZXNzaW9uL3tzZXNzaW9uX2lkfS9lbGVtZW50L3tlbGVtZW50X2lk
fS9uYW1lIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChzZXNz
aW9uX2lkPXNlc3Npb24uc2Vzc2lvbl9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWxlbWVudF9pZD0iZm9vIikpCisKKyAgICBhc3NlcnRfZXJyb3IocmVz
dWx0LCAidW5leHBlY3RlZCBhbGVydCBvcGVuIikKKyAgICBhc3NlcnRfZGlhbG9nX2hhbmRsZWQo
c2Vzc2lvbiwgImRpc21pc3MgIzIiKQorCisgICAgY3JlYXRlX2RpYWxvZyhzZXNzaW9uKSgicHJv
bXB0IiwgdGV4dD0iZGlzbWlzcyAjMyIsIHJlc3VsdF92YXI9ImRpc21pc3MzIikKKworICAgIHJl
c3VsdCA9IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIkdFVCIsICJzZXNzaW9uL3tzZXNzaW9uX2lk
fS9lbGVtZW50L3tlbGVtZW50X2lkfS9uYW1lIgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLmZvcm1hdChzZXNzaW9uX2lkPXNlc3Npb24uc2Vzc2lvbl9pZCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudF9pZD0iZm9vIikpCisK
KyAgICBhc3NlcnRfZXJyb3IocmVzdWx0LCAidW5leHBlY3RlZCBhbGVydCBvcGVuIikKKyAgICBh
c3NlcnRfZGlhbG9nX2hhbmRsZWQoc2Vzc2lvbiwgImRpc21pc3MgIzMiKQorCisKK2RlZiB0ZXN0
X2VsZW1lbnRfbm90X2ZvdW5kKHNlc3Npb24pOgorICAgICMgMTMuNiBTdGVwIDMKKyAgICByZXN1
bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLCAic2Vzc2lvbi97c2Vzc2lvbl9pZH0v
ZWxlbWVudC97ZWxlbWVudF9pZH0vbmFtZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC5mb3JtYXQoc2Vzc2lvbl9pZD1zZXNzaW9uLnNlc3Npb25faWQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRfaWQ9ImZvbyIpKQorCisg
ICAgYXNzZXJ0X2Vycm9yKHJlc3VsdCwgIm5vIHN1Y2ggZWxlbWVudCIpCisKKworZGVmIHRlc3Rf
ZWxlbWVudF9zdGFsZShzZXNzaW9uKToKKyAgICAjIDEzLjYgc3RlcCA0CisgICAgc2Vzc2lvbi51
cmwgPSBpbmxpbmUoIjxpbnB1dCBpZD1mb28+IikKKyAgICBlbGVtZW50ID0gc2Vzc2lvbi5maW5k
LmNzcygiaW5wdXQiLCBhbGw9RmFsc2UpCisgICAgc2Vzc2lvbi5yZWZyZXNoKCkKKyAgICByZXN1
bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLCAic2Vzc2lvbi97c2Vzc2lvbl9pZH0v
ZWxlbWVudC97ZWxlbWVudF9pZH0vbmFtZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC5mb3JtYXQoc2Vzc2lvbl9pZD1zZXNzaW9uLnNlc3Npb25faWQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRfaWQ9ZWxlbWVudC5pZCkp
CisKKyAgICBhc3NlcnRfZXJyb3IocmVzdWx0LCAic3RhbGUgZWxlbWVudCByZWZlcmVuY2UiKQor
CisKK2RlZiB0ZXN0X2dldF9lbGVtZW50X3RhZ19uYW1lKHNlc3Npb24pOgorICAgICMgMTMuNiBz
dGVwIDYKKyAgICBzZXNzaW9uLnVybCA9IGlubGluZSgiPGlucHV0IGlkPWZvbz4iKQorICAgIGVs
ZW1lbnQgPSBzZXNzaW9uLmZpbmQuY3NzKCJpbnB1dCIsIGFsbD1GYWxzZSkKKyAgICByZXN1bHQg
PSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLCAic2Vzc2lvbi97c2Vzc2lvbl9pZH0vZWxl
bWVudC97ZWxlbWVudF9pZH0vbmFtZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC5mb3JtYXQoc2Vzc2lvbl9pZD1zZXNzaW9uLnNlc3Npb25faWQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRfaWQ9ZWxlbWVudC5pZCkpCisg
ICAgYXNzZXJ0X3N1Y2Nlc3MocmVzdWx0LCAiaW5wdXQiKQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVy
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9zdGF0ZS9pc19lbGVtZW50X3NlbGVj
dGVkLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9zdGF0
ZS9pc19lbGVtZW50X3NlbGVjdGVkLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi5jODJmMjZmYTkxMgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2lt
cG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvc3RhdGUvaXNfZWxlbWVudF9zZWxlY3RlZC5weQpA
QCAtMCwwICsxLDE4MCBAQAorZnJvbSB0ZXN0cy5zdXBwb3J0LmFzc2VydHMgaW1wb3J0IGFzc2Vy
dF9lcnJvciwgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkLCBhc3NlcnRfc3VjY2VzcworZnJvbSB0ZXN0
cy5zdXBwb3J0LmlubGluZSBpbXBvcnQgaW5saW5lCitmcm9tIHRlc3RzLnN1cHBvcnQuZml4dHVy
ZXMgaW1wb3J0IGNyZWF0ZV9kaWFsb2cKKworCithbGVydF9kb2MgPSBpbmxpbmUoIjxzY3JpcHQ+
d2luZG93LmFsZXJ0KCk8L3NjcmlwdD4iKQorY2hlY2tfZG9jID0gaW5saW5lKCI8aW5wdXQgaWQ9
Y2hlY2tlZCB0eXBlPWNoZWNrYm94IGNoZWNrZWQvPjxpbnB1dCBpZD1ub3RDaGVja2VkIHR5cGU9
Y2hlY2tib3gvPiIpCitvcHRpb25fZG9jID0gaW5saW5lKCIiIjxzZWxlY3Q+CisgICAgICAgICAg
ICAgICAgICAgICAgICA8b3B0aW9uIGlkPW5vdFNlbGVjdGVkPnItPC9vcHRpb24+CisgICAgICAg
ICAgICAgICAgICAgICAgICA8b3B0aW9uIGlkPXNlbGVjdGVkIHNlbGVjdGVkPnIrPC9vcHRpb24+
CisgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgorICAgICAgICAgICAgICAgICAgICAi
IiIpCisKKworIyAxMy4xIElzIEVsZW1lbnQgU2VsZWN0ZWQKKworZGVmIHRlc3Rfbm9fYnJvd3Np
bmdfY29udGV4dChzZXNzaW9uLCBjcmVhdGVfd2luZG93KToKKyAgICAjIDEzLjEgc3RlcCAxCisg
ICAgc2Vzc2lvbi53aW5kb3dfaGFuZGxlID0gY3JlYXRlX3dpbmRvdygpCisgICAgc2Vzc2lvbi5j
bG9zZSgpCisKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLCAic2Vz
c2lvbi97c2Vzc2lvbl9pZH0vZWxlbWVudC97ZWxlbWVudF9pZH0vc2VsZWN0ZWQiCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHNlc3Npb25faWQ9c2Vzc2lvbi5z
ZXNzaW9uX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
bGVtZW50X2lkPSJmb28iKSkKKworICAgIGFzc2VydF9lcnJvcihyZXN1bHQsICJubyBzdWNoIHdp
bmRvdyIpCisKKworZGVmIHRlc3RfaGFuZGxlX3Byb21wdF9kaXNtaXNzKG5ld19zZXNzaW9uKToK
KyAgICAjIDEzLjEgc3RlcCAyCisgICAgXywgc2Vzc2lvbiA9IG5ld19zZXNzaW9uKHsiYWx3YXlz
TWF0Y2giOiB7InVuaGFuZGxlZFByb21wdEJlaGF2aW9yIjogImRpc21pc3MifX0pCisgICAgc2Vz
c2lvbi51cmwgPSBpbmxpbmUoIjxpbnB1dCBpZD1mb28+IikKKworICAgIGNyZWF0ZV9kaWFsb2co
c2Vzc2lvbikoImFsZXJ0IiwgdGV4dD0iZGlzbWlzcyAjMSIsIHJlc3VsdF92YXI9ImRpc21pc3Mx
IikKKworICAgIHJlc3VsdCA9IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIkdFVCIsICJzZXNzaW9u
L3tzZXNzaW9uX2lkfS9lbGVtZW50L3tlbGVtZW50X2lkfS9zZWxlY3RlZCIKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoc2Vzc2lvbl9pZD1zZXNzaW9uLnNlc3Np
b25faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1l
bnRfaWQ9ImZvbyIpKQorCisgICAgYXNzZXJ0X3N1Y2Nlc3MocmVzdWx0LCAiZm9vIikKKyAgICBh
c3NlcnRfZGlhbG9nX2hhbmRsZWQoc2Vzc2lvbiwgImRpc21pc3MgIzEiKQorCisgICAgY3JlYXRl
X2RpYWxvZyhzZXNzaW9uKSgiY29uZmlybSIsIHRleHQ9ImRpc21pc3MgIzIiLCByZXN1bHRfdmFy
PSJkaXNtaXNzMiIpCisKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQi
LCAic2Vzc2lvbi97c2Vzc2lvbl9pZH0vZWxlbWVudC97ZWxlbWVudF9pZH0vc2VsZWN0ZWQiCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHNlc3Npb25faWQ9c2Vz
c2lvbi5zZXNzaW9uX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbGVtZW50X2lkPSJmb28iKSkKKworICAgIGFzc2VydF9zdWNjZXNzKHJlc3VsdCwgImZv
byIpCisgICAgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNlc3Npb24sICJkaXNtaXNzICMyIikKKwor
ICAgIGNyZWF0ZV9kaWFsb2coc2Vzc2lvbikoInByb21wdCIsIHRleHQ9ImRpc21pc3MgIzMiLCBy
ZXN1bHRfdmFyPSJkaXNtaXNzMyIpCisKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5z
ZW5kKCJHRVQiLCAic2Vzc2lvbi97c2Vzc2lvbl9pZH0vZWxlbWVudC97ZWxlbWVudF9pZH0vc2Vs
ZWN0ZWQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHNlc3Np
b25faWQ9c2Vzc2lvbi5zZXNzaW9uX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbGVtZW50X2lkPSJmb28iKSkKKworICAgIGFzc2VydF9zdWNjZXNzKHJl
c3VsdCwgImZvbyIpCisgICAgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNlc3Npb24sICJkaXNtaXNz
ICMzIikKKworCitkZWYgdGVzdF9oYW5kbGVfcHJvbXB0X2FjY2VwdChuZXdfc2Vzc2lvbik6Cisg
ICAgIyAxMy4xIHN0ZXAgMgorICAgIF8sIHNlc3Npb24gPSBuZXdfc2Vzc2lvbih7ImFsd2F5c01h
dGNoIjogeyJ1bmhhbmRsZWRQcm9tcHRCZWhhdmlvciI6ICJhY2NlcHQifX0pCisgICAgc2Vzc2lv
bi51cmwgPSBpbmxpbmUoIjxpbnB1dCBpZD1mb28+IikKKworICAgIGNyZWF0ZV9kaWFsb2coc2Vz
c2lvbikoImFsZXJ0IiwgdGV4dD0iZGlzbWlzcyAjMSIsIHJlc3VsdF92YXI9ImRpc21pc3MxIikK
KworICAgIHJlc3VsdCA9IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIkdFVCIsICJzZXNzaW9uL3tz
ZXNzaW9uX2lkfS9lbGVtZW50L3tlbGVtZW50X2lkfS9zZWxlY3RlZCIKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoc2Vzc2lvbl9pZD1zZXNzaW9uLnNlc3Npb25f
aWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRf
aWQ9ImZvbyIpKQorCisgICAgYXNzZXJ0X3N1Y2Nlc3MocmVzdWx0LCAiZm9vIikKKyAgICBhc3Nl
cnRfZGlhbG9nX2hhbmRsZWQoc2Vzc2lvbiwgImRpc21pc3MgIzEiKQorCisgICAgY3JlYXRlX2Rp
YWxvZyhzZXNzaW9uKSgiY29uZmlybSIsIHRleHQ9ImRpc21pc3MgIzIiLCByZXN1bHRfdmFyPSJk
aXNtaXNzMiIpCisKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLCAi
c2Vzc2lvbi97c2Vzc2lvbl9pZH0vZWxlbWVudC97ZWxlbWVudF9pZH0vc2VsZWN0ZWQiCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHNlc3Npb25faWQ9c2Vzc2lv
bi5zZXNzaW9uX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbGVtZW50X2lkPSJmb28iKSkKKworICAgIGFzc2VydF9zdWNjZXNzKHJlc3VsdCwgImZvbyIp
CisgICAgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNlc3Npb24sICJkaXNtaXNzICMyIikKKworICAg
IGNyZWF0ZV9kaWFsb2coc2Vzc2lvbikoInByb21wdCIsIHRleHQ9ImRpc21pc3MgIzMiLCByZXN1
bHRfdmFyPSJkaXNtaXNzMyIpCisKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5k
KCJHRVQiLCAic2Vzc2lvbi97c2Vzc2lvbl9pZH0vZWxlbWVudC97ZWxlbWVudF9pZH0vc2VsZWN0
ZWQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHNlc3Npb25f
aWQ9c2Vzc2lvbi5zZXNzaW9uX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlbGVtZW50X2lkPSJmb28iKSkKKworICAgIGFzc2VydF9zdWNjZXNzKHJlc3Vs
dCwgImZvbyIpCisgICAgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNlc3Npb24sICJkaXNtaXNzICMz
IikKKworCitkZWYgdGVzdF9oYW5kbGVfcHJvbXB0X21pc3NpbmdfdmFsdWUoc2Vzc2lvbiwgY3Jl
YXRlX2RpYWxvZyk6CisgICAgIyAxMy4xIHN0ZXAgMgorICAgIHNlc3Npb24udXJsID0gaW5saW5l
KCI8aW5wdXQgaWQ9Zm9vPiIpCisKKyAgICBjcmVhdGVfZGlhbG9nKHNlc3Npb24pKCJhbGVydCIs
IHRleHQ9ImRpc21pc3MgIzEiLCByZXN1bHRfdmFyPSJkaXNtaXNzMSIpCisKKyAgICByZXN1bHQg
PSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLCAic2Vzc2lvbi97c2Vzc2lvbl9pZH0vZWxl
bWVudC97ZWxlbWVudF9pZH0vc2VsZWN0ZWQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAuZm9ybWF0KHNlc3Npb25faWQ9c2Vzc2lvbi5zZXNzaW9uX2lkLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50X2lkPSJmb28iKSkKKwor
ICAgIGFzc2VydF9lcnJvcihyZXN1bHQsICJ1bmV4cGVjdGVkIGFsZXJ0IG9wZW4iKQorICAgIGFz
c2VydF9kaWFsb2dfaGFuZGxlZChzZXNzaW9uLCAiZGlzbWlzcyAjMSIpCisKKyAgICBjcmVhdGVf
ZGlhbG9nKHNlc3Npb24pKCJjb25maXJtIiwgdGV4dD0iZGlzbWlzcyAjMiIsIHJlc3VsdF92YXI9
ImRpc21pc3MyIikKKworICAgIHJlc3VsdCA9IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIkdFVCIs
ICJzZXNzaW9uL3tzZXNzaW9uX2lkfS9lbGVtZW50L3tlbGVtZW50X2lkfS9zZWxlY3RlZCIKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoc2Vzc2lvbl9pZD1zZXNz
aW9uLnNlc3Npb25faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVsZW1lbnRfaWQ9ImZvbyIpKQorCisgICAgYXNzZXJ0X2Vycm9yKHJlc3VsdCwgInVuZXhw
ZWN0ZWQgYWxlcnQgb3BlbiIpCisgICAgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNlc3Npb24sICJk
aXNtaXNzICMyIikKKworICAgIGNyZWF0ZV9kaWFsb2coc2Vzc2lvbikoInByb21wdCIsIHRleHQ9
ImRpc21pc3MgIzMiLCByZXN1bHRfdmFyPSJkaXNtaXNzMyIpCisKKyAgICByZXN1bHQgPSBzZXNz
aW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLCAic2Vzc2lvbi97c2Vzc2lvbl9pZH0vZWxlbWVudC97
ZWxlbWVudF9pZH0vc2VsZWN0ZWQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAuZm9ybWF0KHNlc3Npb25faWQ9c2Vzc2lvbi5zZXNzaW9uX2lkLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50X2lkPSJmb28iKSkKKworICAgIGFz
c2VydF9lcnJvcihyZXN1bHQsICJ1bmV4cGVjdGVkIGFsZXJ0IG9wZW4iKQorICAgIGFzc2VydF9k
aWFsb2dfaGFuZGxlZChzZXNzaW9uLCAiZGlzbWlzcyAjMyIpCisKKworZGVmIHRlc3RfZWxlbWVu
dF9zdGFsZShzZXNzaW9uKToKKyAgICAjIDEzLjEgc3RlcCA0CisgICAgc2Vzc2lvbi51cmwgPSBj
aGVja19kb2MKKyAgICBlbGVtZW50ID0gc2Vzc2lvbi5maW5kLmNzcygiI2NoZWNrZWQiLCBhbGw9
RmFsc2UpCisgICAgc2Vzc2lvbi5yZWZyZXNoKCkKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5z
cG9ydC5zZW5kKCJHRVQiLCAic2Vzc2lvbi97c2Vzc2lvbl9pZH0vZWxlbWVudC97ZWxlbWVudF9p
ZH0vc2VsZWN0ZWQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0
KHNlc3Npb25faWQ9c2Vzc2lvbi5zZXNzaW9uX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbGVtZW50X2lkPWVsZW1lbnQuaWQpKQorCisgICAgYXNzZXJ0
X2Vycm9yKHJlc3VsdCwgInN0YWxlIGVsZW1lbnQgcmVmZXJlbmNlIikKKworCitkZWYgdGVzdF9l
bGVtZW50X2NoZWNrZWQoc2Vzc2lvbik6CisgICAgIyAxMy4xIHN0ZXAgNQorICAgIHNlc3Npb24u
dXJsID0gY2hlY2tfZG9jCisgICAgZWxlbWVudCA9IHNlc3Npb24uZmluZC5jc3MoIiNjaGVja2Vk
IiwgYWxsPUZhbHNlKQorICAgIHJlc3VsdCA9IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIkdFVCIs
ICJzZXNzaW9uL3tzZXNzaW9uX2lkfS9lbGVtZW50L3tlbGVtZW50X2lkfS9zZWxlY3RlZCIKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoc2Vzc2lvbl9pZD1zZXNz
aW9uLnNlc3Npb25faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVsZW1lbnRfaWQ9ZWxlbWVudC5pZCkpCisKKyAgICBhc3NlcnRfc3VjY2VzcyhyZXN1bHQs
IFRydWUpCisKKworZGVmIHRlc3RfY2hlY2tib3hfbm90X3NlbGVjdGVkKHNlc3Npb24pOgorICAg
ICMgMTMuMSBzdGVwIDUKKyAgICBzZXNzaW9uLnVybCA9IGNoZWNrX2RvYworICAgIGVsZW1lbnQg
PSBzZXNzaW9uLmZpbmQuY3NzKCIjbm90Q2hlY2tlZCIsIGFsbD1GYWxzZSkKKyAgICByZXN1bHQg
PSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLCAic2Vzc2lvbi97c2Vzc2lvbl9pZH0vZWxl
bWVudC97ZWxlbWVudF9pZH0vc2VsZWN0ZWQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAuZm9ybWF0KHNlc3Npb25faWQ9c2Vzc2lvbi5zZXNzaW9uX2lkLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50X2lkPWVsZW1lbnQuaWQp
KQorCisgICAgYXNzZXJ0X3N1Y2Nlc3MocmVzdWx0LCBGYWxzZSkKKworCitkZWYgdGVzdF9lbGVt
ZW50X3NlbGVjdGVkKHNlc3Npb24pOgorICAgICMgMTMuMSBzdGVwIDUKKyAgICBzZXNzaW9uLnVy
bCA9IG9wdGlvbl9kb2MKKyAgICBlbGVtZW50ID0gc2Vzc2lvbi5maW5kLmNzcygiI3NlbGVjdGVk
IiwgYWxsPUZhbHNlKQorICAgIHJlc3VsdCA9IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIkdFVCIs
ICJzZXNzaW9uL3tzZXNzaW9uX2lkfS9lbGVtZW50L3tlbGVtZW50X2lkfS9zZWxlY3RlZCIKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoc2Vzc2lvbl9pZD1zZXNz
aW9uLnNlc3Npb25faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVsZW1lbnRfaWQ9ZWxlbWVudC5pZCkpCisKKyAgICBhc3NlcnRfc3VjY2VzcyhyZXN1bHQs
IFRydWUpCisKKworZGVmIHRlc3RfZWxlbWVudF9ub3Rfc2VsZWN0ZWQoc2Vzc2lvbik6CisgICAg
IyAxMy4xIHN0ZXAgNQorICAgIHNlc3Npb24udXJsID0gb3B0aW9uX2RvYworICAgIGVsZW1lbnQg
PSBzZXNzaW9uLmZpbmQuY3NzKCIjbm90U2VsZWN0ZWQiLCBhbGw9RmFsc2UpCisgICAgcmVzdWx0
ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwgInNlc3Npb24ve3Nlc3Npb25faWR9L2Vs
ZW1lbnQve2VsZW1lbnRfaWR9L3NlbGVjdGVkIgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLmZvcm1hdChzZXNzaW9uX2lkPXNlc3Npb24uc2Vzc2lvbl9pZCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudF9pZD1lbGVtZW50Lmlk
KSkKKworICAgIGFzc2VydF9zdWNjZXNzKHJlc3VsdCwgRmFsc2UpCmRpZmYgLS1naXQgYS9XZWJE
cml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL3N0YXRlL3RleHQvX19pbml0
X18ucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL3N0YXRl
L3RleHQvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LmU2OWRlMjliYjJkCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
ZHJpdmVyL3Rlc3RzL3N0YXRlL3RleHQvZ2V0X3RleHQucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL3N0YXRlL3RleHQvZ2V0X3RleHQucHkKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmFhMDdiOGRjMWY0Ci0tLSAvZGV2L251bGwK
KysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9zdGF0ZS90
ZXh0L2dldF90ZXh0LnB5CkBAIC0wLDAgKzEsMjkgQEAKK2ltcG9ydCBweXRlc3QKK2ltcG9ydCB1
dWlkCisKK2Zyb20gdGVzdHMuc3VwcG9ydC5hc3NlcnRzIGltcG9ydCBhc3NlcnRfZXJyb3IsIGFz
c2VydF9zdWNjZXNzCitmcm9tIHRlc3RzLnN1cHBvcnQuaW5saW5lIGltcG9ydCBpbmxpbmUKKwor
IyBGb3IgZmFpbGluZyB0ZXN0cywgdGhlIEdldCBFbGVtZW50IFRleHQgZW5kLXBvaW50IGlzIHVz
ZWQKKyMgZGlyZWN0bHkuIEluIGFsbCBvdGhlciBjYXNlcywgdGhlIEVsZW1lbnQudGV4dCgpIGZ1
bmN0aW9uIGlzIHVzZWQuCisKK2RlZiB0ZXN0X2dldHRpbmdfdGV4dF9vZl9hX25vbl9leGlzdGFu
dF9lbGVtZW50X2lzX2FuX2Vycm9yKHNlc3Npb24pOgorICAgc2Vzc2lvbi51cmwgPSBpbmxpbmUo
IiIiPGJvZHk+SGVsbG8gd29ybGQ8L2JvZHk+IiIiKQorICAgaWQgPSB1dWlkLnV1aWQ0KCkKKwor
ICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgKKyAgICAgICAiR0VUIiwKKyAgICAg
ICAic2Vzc2lvbi8lcy9lbGVtZW50LyVzL3RleHQiICUgKHNlc3Npb24uc2Vzc2lvbl9pZCwgaWQp
KQorCisgICBhc3NlcnRfZXJyb3IocmVzdWx0LCAibm8gc3VjaCBlbGVtZW50IikKKworCitkZWYg
dGVzdF9yZWFkX2VsZW1lbnRfdGV4dChzZXNzaW9uKToKKyAgICBzZXNzaW9uLnVybCA9IGlubGlu
ZSgiIiIKKyAgICAgICAgPGJvZHk+CisgICAgICAgICAgTm9pc2UgYmVmb3JlIDxzcGFuIGlkPSdp
ZCc+VGhpcyBoYXMgYW4gSUQ8L3NwYW4+LiBOb2lzZSBhZnRlcgorICAgICAgICA8L2JvZHk+IiIi
KQorCisgICAgZWxlbWVudCA9IHNlc3Npb24uZmluZC5jc3MoIiNpZCIsIGFsbD1GYWxzZSkKKwor
ICAgIGFzc2VydCBlbGVtZW50LnRleHQgPT0gIlRoaXMgaGFzIGFuIElEIgpkaWZmIC0tZ2l0IGEv
V2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9zdGF0dXMucHkgYi9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL3N0YXR1cy5weQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOTQ3MmY4YTgwYmIKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL3N0
YXR1cy5weQpAQCAtMCwwICsxLDIxIEBACitpbXBvcnQgcHl0ZXN0CitpbXBvcnQganNvbgorCisK
K2RlZiB0ZXN0X2dldF9zdGF0dXNfbm9fc2Vzc2lvbihodHRwKToKKyAgICB3aXRoIGh0dHAuZ2V0
KCIvc3RhdHVzIikgYXMgcmVzcG9uc2U6CisgICAgICAgICMgR0VUIC9zdGF0dXMgc2hvdWxkIG5l
dmVyIHJldHVybiBhbiBlcnJvcgorICAgICAgICBhc3NlcnQgcmVzcG9uc2Uuc3RhdHVzID09IDIw
MAorCisgICAgICAgICMgcGFyc2UgSlNPTiByZXNwb25zZSBhbmQgdW53cmFwICd2YWx1ZScgcHJv
cGVydHkKKyAgICAgICAgcGFyc2VkX29iaiA9IGpzb24ubG9hZHMocmVzcG9uc2UucmVhZCgpLmRl
Y29kZSgndXRmLTgnKSkKKyAgICAgICAgdmFsdWUgPSBwYXJzZWRfb2JqWyJ2YWx1ZSJdCisKKyAg
ICAgICAgIyBMZXQgYm9keSBiZSBhIG5ldyBKU09OIE9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcg
cHJvcGVydGllczoKKyAgICAgICAgIyAicmVhZHkiCisgICAgICAgICMgICAgICAgVGhlIHJlbW90
ZSBlbmQncyByZWFkaW5lc3Mgc3RhdGUuCisgICAgICAgIGFzc2VydCB2YWx1ZVsicmVhZHkiXSBp
biBbVHJ1ZSwgRmFsc2VdCisgICAgICAgICMgIm1lc3NhZ2UiCisgICAgICAgICMgICAgICAgQW4g
aW1wbGVtZW50YXRpb24tZGVmaW5lZCBzdHJpbmcgZXhwbGFpbmluZyB0aGUgcmVtb3RlIGVuZCdz
CisgICAgICAgICMgICAgICAgcmVhZGluZXNzIHN0YXRlLgorICAgICAgICBhc3NlcnQgaXNpbnN0
YW5jZSh2YWx1ZVsibWVzc2FnZSJdLCBiYXNlc3RyaW5nKQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVy
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9zdXBwb3J0L19faW5pdF9fLnB5IGIv
V2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9zdXBwb3J0L19faW5p
dF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kMzdmYWY2ZGEw
NAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2
ZXIvdGVzdHMvc3VwcG9ydC9fX2luaXRfXy5weQpAQCAtMCwwICsxIEBACitmcm9tIG1lcmdlX2Rp
Y3Rpb25hcmllcyBpbXBvcnQgbWVyZ2VfZGljdGlvbmFyaWVzCmRpZmYgLS1naXQgYS9XZWJEcml2
ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL3N1cHBvcnQvYXNzZXJ0cy5weSBi
L1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvc3VwcG9ydC9hc3Nl
cnRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mMzMxODAxMGFh
MwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2
ZXIvdGVzdHMvc3VwcG9ydC9hc3NlcnRzLnB5CkBAIC0wLDAgKzEsMTIyIEBACitmcm9tIHdlYmRy
aXZlci5jbGllbnQgaW1wb3J0IEVsZW1lbnQsIGVsZW1lbnRfa2V5Citmcm9tIHdlYmRyaXZlci5l
cnJvciBpbXBvcnQgV2ViRHJpdmVyRXhjZXB0aW9uCisKKyMgV2ViRHJpdmVyIHNwZWNpZmljYXRp
b24gSUQ6IGRmbi1lcnJvci1yZXNwb25zZS1kYXRhCitlcnJvcnMgPSB7CisgICAgImVsZW1lbnQg
Y2xpY2sgaW50ZXJjZXB0ZWQiOiA0MDAsCisgICAgImVsZW1lbnQgbm90IHNlbGVjdGFibGUiOiA0
MDAsCisgICAgImVsZW1lbnQgbm90IGludGVyYWN0YWJsZSI6IDQwMCwKKyAgICAiaW5zZWN1cmUg
Y2VydGlmaWNhdGUiOiA0MDAsCisgICAgImludmFsaWQgYXJndW1lbnQiOiA0MDAsCisgICAgImlu
dmFsaWQgY29va2llIGRvbWFpbiI6IDQwMCwKKyAgICAiaW52YWxpZCBjb29yZGluYXRlcyI6IDQw
MCwKKyAgICAiaW52YWxpZCBlbGVtZW50IHN0YXRlIjogNDAwLAorICAgICJpbnZhbGlkIHNlbGVj
dG9yIjogNDAwLAorICAgICJpbnZhbGlkIHNlc3Npb24gaWQiOiA0MDQsCisgICAgImphdmFzY3Jp
cHQgZXJyb3IiOiA1MDAsCisgICAgIm1vdmUgdGFyZ2V0IG91dCBvZiBib3VuZHMiOiA1MDAsCisg
ICAgIm5vIHN1Y2ggYWxlcnQiOiA0MDAsCisgICAgIm5vIHN1Y2ggY29va2llIjogNDA0LAorICAg
ICJubyBzdWNoIGVsZW1lbnQiOiA0MDQsCisgICAgIm5vIHN1Y2ggZnJhbWUiOiA0MDAsCisgICAg
Im5vIHN1Y2ggd2luZG93IjogNDAwLAorICAgICJzY3JpcHQgdGltZW91dCI6IDQwOCwKKyAgICAi
c2Vzc2lvbiBub3QgY3JlYXRlZCI6IDUwMCwKKyAgICAic3RhbGUgZWxlbWVudCByZWZlcmVuY2Ui
OiA0MDAsCisgICAgInRpbWVvdXQiOiA0MDgsCisgICAgInVuYWJsZSB0byBzZXQgY29va2llIjog
NTAwLAorICAgICJ1bmFibGUgdG8gY2FwdHVyZSBzY3JlZW4iOiA1MDAsCisgICAgInVuZXhwZWN0
ZWQgYWxlcnQgb3BlbiI6IDUwMCwKKyAgICAidW5rbm93biBjb21tYW5kIjogNDA0LAorICAgICJ1
bmtub3duIGVycm9yIjogNTAwLAorICAgICJ1bmtub3duIG1ldGhvZCI6IDQwNSwKKyAgICAidW5z
dXBwb3J0ZWQgb3BlcmF0aW9uIjogNTAwLAorfQorCisjIFdlYkRyaXZlciBzcGVjaWZpY2F0aW9u
IElEOiBkZm4tc2VuZC1hbi1lcnJvcgorIworIyA+IFdoZW4gcmVxdWlyZWQgdG8gc2VuZCBhbiBl
cnJvciwgd2l0aCBlcnJvciBjb2RlLCBhIHJlbW90ZSBlbmQgbXVzdCBydW4gdGhlCisjID4gZm9s
bG93aW5nIHN0ZXBzOgorIyA+CisjID4gMS4gTGV0IGh0dHAgc3RhdHVzIGFuZCBuYW1lIGJlIHRo
ZSBlcnJvciByZXNwb25zZSBkYXRhIGZvciBlcnJvciBjb2RlLgorIyA+IDIuIExldCBtZXNzYWdl
IGJlIGFuIGltcGxlbWVudGF0aW9uLWRlZmluZWQgc3RyaW5nIGNvbnRhaW5pbmcgYQorIyA+ICAg
IGh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHRoZSByZWFzb24gZm9yIHRoZSBlcnJvci4K
KyMgPiAzLiBMZXQgc3RhY2t0cmFjZSBiZSBhbiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIHN0cmlu
ZyBjb250YWluaW5nIGEgc3RhY2sKKyMgPiAgICB0cmFjZSByZXBvcnQgb2YgdGhlIGFjdGl2ZSBz
dGFjayBmcmFtZXMgYXQgdGhlIHRpbWUgd2hlbiB0aGUgZXJyb3IKKyMgPiAgICBvY2N1cnJlZC4K
KyMgPiA0LiBMZXQgZGF0YSBiZSBhIG5ldyBKU09OIE9iamVjdCBpbml0aWFsaXNlZCB3aXRoIHRo
ZSBmb2xsb3dpbmcgcHJvcGVydGllczoKKyMgPgorIyA+ICAgICBlcnJvcgorIyA+ICAgICAgICAg
bmFtZQorIyA+ICAgICBtZXNzYWdlCisjID4gICAgICAgICBtZXNzYWdlCisjID4gICAgIHN0YWNr
dHJhY2UKKyMgPiAgICAgICAgIHN0YWNrdHJhY2UKKyMgPgorIyA+IDUuIFNlbmQgYSByZXNwb25z
ZSB3aXRoIHN0YXR1cyBhbmQgZGF0YSBhcyBhcmd1bWVudHMuCitkZWYgYXNzZXJ0X2Vycm9yKHJl
c3BvbnNlLCBlcnJvcl9jb2RlKToKKyAgICAiIiJWZXJpZnkgdGhhdCB0aGUgcHJvdmlkZWQgd2Rj
bGllbnQuUmVzcG9uc2UgaW5zdGFuY2UgZGVzY3JpYmVkIGEgdmFsaWQKKyAgICBlcnJvciByZXNw
b25zZSBhcyBkZWZpbmVkIGJ5IGBkZm4tc2VuZC1hbi1lcnJvcmAgYW5kIHRoZSBwcm92aWRlZCBl
cnJvcgorICAgIGNvZGUuCisKKyAgICA6cGFyYW0gcmVzcG9uc2U6IHdkY2xpZW50LlJlc3BvbnNl
IGluc3RhbmNlCisgICAgOnBhcmFtIGVycm9yX2NvZGU6IHN0cmluZyB2YWx1ZSBvZiB0aGUgZXhw
ZWN0ZWQgImVycm9yIGNvZGUiCisgICAgIiIiCisgICAgYXNzZXJ0IHJlc3BvbnNlLnN0YXR1cyA9
PSBlcnJvcnNbZXJyb3JfY29kZV0KKyAgICBhc3NlcnQgInZhbHVlIiBpbiByZXNwb25zZS5ib2R5
CisgICAgYXNzZXJ0IHJlc3BvbnNlLmJvZHlbInZhbHVlIl1bImVycm9yIl0gPT0gZXJyb3JfY29k
ZQorICAgIGFzc2VydCBpc2luc3RhbmNlKHJlc3BvbnNlLmJvZHlbInZhbHVlIl1bIm1lc3NhZ2Ui
XSwgYmFzZXN0cmluZykKKyAgICBhc3NlcnQgaXNpbnN0YW5jZShyZXNwb25zZS5ib2R5WyJ2YWx1
ZSJdWyJzdGFja3RyYWNlIl0sIGJhc2VzdHJpbmcpCisKK2RlZiBhc3NlcnRfc3VjY2VzcyhyZXNw
b25zZSwgdmFsdWU9Tm9uZSk6CisgICAgIiIiVmVyaWZ5IHRoYXQgdGhlIHByb3ZpZGVkIHdkY2xp
ZW50LlJlc3BvbnNlIGluc3RhbmNlIGRlc2NyaWJlZCBhIHZhbGlkCisgICAgZXJyb3IgcmVzcG9u
c2UgYXMgZGVmaW5lZCBieSBgZGZuLXNlbmQtYW4tZXJyb3JgIGFuZCB0aGUgcHJvdmlkZWQgZXJy
b3IKKyAgICBjb2RlLgorCisgICAgOnBhcmFtIHJlc3BvbnNlOiB3ZGNsaWVudC5SZXNwb25zZSBp
bnN0YW5jZS4KKyAgICA6cGFyYW0gdmFsdWU6IEV4cGVjdGVkIHZhbHVlIG9mIHRoZSByZXNwb25z
ZSBib2R5LCBpZiBhbnkuCisKKyAgICAiIiIKKyAgICBhc3NlcnQgcmVzcG9uc2Uuc3RhdHVzID09
IDIwMAorICAgIGlmIHZhbHVlIGlzIG5vdCBOb25lOgorICAgICAgICBhc3NlcnQgcmVzcG9uc2Uu
Ym9keVsidmFsdWUiXSA9PSB2YWx1ZQorICAgIHJldHVybiByZXNwb25zZS5ib2R5LmdldCgidmFs
dWUiKQorCitkZWYgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNlc3Npb24sIGV4cGVjdGVkX3RleHQp
OgorICAgIHJlc3VsdCA9IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIkdFVCIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAic2Vzc2lvbi8lcy9hbGVydC90ZXh0IiAlIHNlc3Np
b24uc2Vzc2lvbl9pZCkKKworICAgICMgSWYgdGhlcmUgd2VyZSBhbnkgZXhpc3RpbmcgZGlhbG9n
cyBwcmlvciB0byB0aGUgY3JlYXRpb24gb2YgdGhpcworICAgICMgZml4dHVyZSdzIGRpYWxvZywg
dGhlbiB0aGUgIkdldCBBbGVydCBUZXh0IiBjb21tYW5kIHdpbGwgcmV0dXJuCisgICAgIyBzdWNj
ZXNzZnVsbHkuIEluIHRoYXQgY2FzZSwgdGhlIHRleHQgbXVzdCBiZSBkaWZmZXJlbnQgdGhhbiB0
aGF0CisgICAgIyBvZiB0aGlzIGZpeHR1cmUncyBkaWFsb2cuCisgICAgdHJ5OgorICAgICAgICBh
c3NlcnRfZXJyb3IocmVzdWx0LCAibm8gc3VjaCBhbGVydCIpCisgICAgZXhjZXB0OgorICAgICAg
ICBhc3NlcnQgKHJlc3VsdC5zdGF0dXMgPT0gMjAwIGFuZAorICAgICAgICAgICAgICAgIHJlc3Vs
dC5ib2R5WyJ2YWx1ZSJdICE9IGV4cGVjdGVkX3RleHQpLCAoCisgICAgICAgICAgICAgICAiRGlh
bG9nIHdpdGggdGV4dCAnJXMnIHdhcyBub3QgaGFuZGxlZC4iICUgZXhwZWN0ZWRfdGV4dCkKKwor
ZGVmIGFzc2VydF9zYW1lX2VsZW1lbnQoc2Vzc2lvbiwgYSwgYik6CisgICAgIiIiVmVyaWZ5IHRo
YXQgdHdvIGVsZW1lbnQgcmVmZXJlbmNlcyBkZXNjcmliZSB0aGUgc2FtZSBlbGVtZW50LiIiIgor
ICAgIGFzc2VydCBpc2luc3RhbmNlKGEsIGRpY3QpLCAiQWN0dWFsIHZhbHVlIGlzIG5vdCBhIGRp
Y3Rpb25hcnkiCisgICAgYXNzZXJ0IGlzaW5zdGFuY2UoYiwgZGljdCksICJFeHBlY3RlZCB2YWx1
ZSBpcyBub3QgYSBkaWN0aW9uYXJ5IgorICAgIGFzc2VydCBlbGVtZW50X2tleSBpbiBhLCAiQWN0
dWFsIHZhbHVlIGRvZXMgbm90IGRlc2NyaWJlIGFuIGVsZW1lbnQiCisgICAgYXNzZXJ0IGVsZW1l
bnRfa2V5IGluIGIsICJFeHBlY3RlZCB2YWx1ZSBkb2VzIG5vdCBkZXNjcmliZSBhbiBlbGVtZW50
IgorCisgICAgaWYgYVtlbGVtZW50X2tleV0gPT0gYltlbGVtZW50X2tleV06CisgICAgICAgIHJl
dHVybgorCisgICAgbWVzc2FnZSA9ICgiRXhwZWN0ZWQgZWxlbWVudCByZWZlcmVuY2VzIHRvIGRl
c2NyaWJlIHRoZSBzYW1lIGVsZW1lbnQsICIgKworICAgICAgICAiYnV0IHRoZXkgZGlkIG5vdC4i
KQorCisgICAgIyBBdHRlbXB0IHRvIHByb3ZpZGUgbW9yZSBpbmZvcm1hdGlvbiwgYWNjb3VudGlu
ZyBmb3IgcG9zc2libGUgZXJyb3JzIHN1Y2gKKyAgICAjIGFzIHN0YWxlIGVsZW1lbnQgcmVmZXJl
bmNlcyBvciBub3QgdmlzaWJsZSBlbGVtZW50cy4KKyAgICB0cnk6CisgICAgICAgIGFfbWFya3Vw
ID0gc2Vzc2lvbi5leGVjdXRlX3NjcmlwdCgicmV0dXJuIGFyZ3VtZW50c1swXS5vdXRlckhUTUw7
IiwgYXJncz1bYV0pCisgICAgICAgIGJfbWFya3VwID0gc2Vzc2lvbi5leGVjdXRlX3NjcmlwdCgi
cmV0dXJuIGFyZ3VtZW50c1swXS5vdXRlckhUTUw7IiwgYXJncz1bYl0pCisgICAgICAgIG1lc3Nh
Z2UgKz0gIiBBY3R1YWw6IGAlc2AuIEV4cGVjdGVkOiBgJXNgLiIgJSAoYV9tYXJrdXAsIGJfbWFy
a3VwKQorICAgIGV4Y2VwdCBXZWJEcml2ZXJFeGNlcHRpb246CisgICAgICAgIHBhc3MKKworICAg
IHJhaXNlIEFzc2VydGlvbkVycm9yKG1lc3NhZ2UpCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL3N1cHBvcnQvZml4dHVyZXMucHkgYi9XZWJE
cml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL3N1cHBvcnQvZml4dHVyZXMu
cHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmUxNmFjMDYyMzY3Ci0t
LSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90
ZXN0cy9zdXBwb3J0L2ZpeHR1cmVzLnB5CkBAIC0wLDAgKzEsMjUxIEBACitpbXBvcnQganNvbgor
aW1wb3J0IG9zCitpbXBvcnQgdXJscGFyc2UKK2ltcG9ydCByZQorCitpbXBvcnQgd2ViZHJpdmVy
CitpbXBvcnQgbW96bG9nCisKK2Zyb20gdGVzdHMuc3VwcG9ydC5hc3NlcnRzIGltcG9ydCBhc3Nl
cnRfZXJyb3IKK2Zyb20gdGVzdHMuc3VwcG9ydC5odHRwX3JlcXVlc3QgaW1wb3J0IEhUVFBSZXF1
ZXN0Citmcm9tIHRlc3RzLnN1cHBvcnQgaW1wb3J0IG1lcmdlX2RpY3Rpb25hcmllcworCitkZWZh
dWx0X2hvc3QgPSAiaHR0cDovLzEyNy4wLjAuMSIKK2RlZmF1bHRfcG9ydCA9ICI0NDQ0IgorCits
b2dnZXIgPSBtb3psb2cuZ2V0X2RlZmF1bHRfbG9nZ2VyKCkKKworCitkZWYgaWdub3JlX2V4Y2Vw
dGlvbnMoZik6CisgICAgZGVmIGlubmVyKCphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHRyeToK
KyAgICAgICAgICAgIHJldHVybiBmKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgZXhjZXB0IHdl
YmRyaXZlci5lcnJvci5XZWJEcml2ZXJFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIGxvZ2dl
ci53YXJuaW5nKCJJZ25vcmVkIGV4Y2VwdGlvbiAlcyIgJSBlKQorICAgIGlubmVyLl9fbmFtZV9f
ID0gZi5fX25hbWVfXworICAgIHJldHVybiBpbm5lcgorCisKK0BpZ25vcmVfZXhjZXB0aW9ucwor
ZGVmIF9lbnN1cmVfdmFsaWRfd2luZG93KHNlc3Npb24pOgorICAgICIiIklmIGN1cnJlbnQgd2lu
ZG93IGlzIG5vdCBvcGVuIGFueW1vcmUsIGVuc3VyZSB0byBoYXZlIGEgdmFsaWQKKyAgICBvbmUg
c2VsZWN0ZWQuCisKKyAgICAiIiIKKyAgICB0cnk6CisgICAgICAgIHNlc3Npb24ud2luZG93X2hh
bmRsZQorICAgIGV4Y2VwdCB3ZWJkcml2ZXIuTm9TdWNoV2luZG93RXhjZXB0aW9uOgorICAgICAg
ICBzZXNzaW9uLndpbmRvd19oYW5kbGUgPSBzZXNzaW9uLmhhbmRsZXNbMF0KKworCitAaWdub3Jl
X2V4Y2VwdGlvbnMKK2RlZiBfZGlzbWlzc191c2VyX3Byb21wdHMoc2Vzc2lvbik6CisgICAgIiIi
RGlzbWlzc2VzIGFueSBvcGVuIHVzZXIgcHJvbXB0cyBpbiB3aW5kb3dzLiIiIgorICAgIGN1cnJl
bnRfd2luZG93ID0gc2Vzc2lvbi53aW5kb3dfaGFuZGxlCisKKyAgICBmb3Igd2luZG93IGluIF93
aW5kb3dzKHNlc3Npb24pOgorICAgICAgICBzZXNzaW9uLndpbmRvd19oYW5kbGUgPSB3aW5kb3cK
KyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2Vzc2lvbi5hbGVydC5kaXNtaXNzKCkKKyAgICAg
ICAgZXhjZXB0IHdlYmRyaXZlci5Ob1N1Y2hBbGVydEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHBh
c3MKKworICAgIHNlc3Npb24ud2luZG93X2hhbmRsZSA9IGN1cnJlbnRfd2luZG93CisKKworQGln
bm9yZV9leGNlcHRpb25zCitkZWYgX3Jlc3RvcmVfd2luZG93X3N0YXRlKHNlc3Npb24pOgorICAg
ICIiIklmIHRoZSB3aW5kb3cgaXMgbWF4aW1pemVkLCBtaW5pbWl6ZWQsIG9yIGZ1bGxzY3JlZW5l
ZCBpdCB3aWxsCisgICAgYmUgcmV0dXJuZWQgdG8gbm9ybWFsIHN0YXRlLgorCisgICAgIiIiCisg
ICAgaWYgc2Vzc2lvbi53aW5kb3cuc3RhdGUgaW4gKCJtYXhpbWl6ZWQiLCAibWluaW1pemVkIiwg
ImZ1bGxzY3JlZW4iKToKKyAgICAgICAgc2Vzc2lvbi53aW5kb3cuc2l6ZSA9ICg4MDAsIDYwMCkK
KworCitAaWdub3JlX2V4Y2VwdGlvbnMKK2RlZiBfcmVzdG9yZV93aW5kb3dzKHNlc3Npb24pOgor
ICAgICIiIkNsb3NlcyBzdXBlcmZsdW91cyB3aW5kb3dzIG9wZW5lZCBieSB0aGUgdGVzdCB3aXRo
b3V0IGVuZGluZworICAgIHRoZSBzZXNzaW9uIGltcGxpY2l0bHkgYnkgY2xvc2luZyB0aGUgbGFz
dCB3aW5kb3cuCisgICAgIiIiCisgICAgY3VycmVudF93aW5kb3cgPSBzZXNzaW9uLndpbmRvd19o
YW5kbGUKKworICAgIGZvciB3aW5kb3cgaW4gX3dpbmRvd3Moc2Vzc2lvbiwgZXhjbHVkZT1bY3Vy
cmVudF93aW5kb3ddKToKKyAgICAgICAgc2Vzc2lvbi53aW5kb3dfaGFuZGxlID0gd2luZG93Cisg
ICAgICAgIGlmIGxlbihzZXNzaW9uLmhhbmRsZXMpID4gMToKKyAgICAgICAgICAgIHNlc3Npb24u
Y2xvc2UoKQorCisgICAgc2Vzc2lvbi53aW5kb3dfaGFuZGxlID0gY3VycmVudF93aW5kb3cKKwor
CitkZWYgX3N3aXRjaF90b190b3BfbGV2ZWxfYnJvd3NpbmdfY29udGV4dChzZXNzaW9uKToKKyAg
ICAiIiJJZiB0aGUgY3VycmVudCBicm93c2luZyBjb250ZXh0IHNlbGVjdGVkIGJ5IFdlYkRyaXZl
ciBpcyBhCisgICAgYDxmcmFtZT5gIG9yIGFuIGA8aWZyYW1lPmAsIHN3aXRjaCBpdCBiYWNrIHRv
IHRoZSB0b3AtbGV2ZWwKKyAgICBicm93c2luZyBjb250ZXh0LgorICAgICIiIgorICAgIHNlc3Np
b24uc3dpdGNoX2ZyYW1lKE5vbmUpCisKKworZGVmIF93aW5kb3dzKHNlc3Npb24sIGV4Y2x1ZGU9
Tm9uZSk6CisgICAgIiIiU2V0IG9mIHdpbmRvdyBoYW5kbGVzLCBmaWx0ZXJlZCBieSBhbiBgZXhj
bHVkZWAgbGlzdCBpZgorICAgIHByb3ZpZGVkLgorICAgICIiIgorICAgIGlmIGV4Y2x1ZGUgaXMg
Tm9uZToKKyAgICAgICAgZXhjbHVkZSA9IFtdCisgICAgd2lucyA9IFt3IGZvciB3IGluIHNlc3Np
b24uaGFuZGxlcyBpZiB3IG5vdCBpbiBleGNsdWRlXQorICAgIHJldHVybiBzZXQod2lucykKKwor
CitkZWYgY3JlYXRlX2ZyYW1lKHNlc3Npb24pOgorICAgICIiIkNyZWF0ZSBhbiBgaWZyYW1lYCBl
bGVtZW50IGluIHRoZSBjdXJyZW50IGJyb3dzaW5nIGNvbnRleHQgYW5kIGluc2VydCBpdAorICAg
IGludG8gdGhlIGRvY3VtZW50LiBSZXR1cm4gYSByZWZlcmVuY2UgdG8gdGhlIG5ld2x5LWNyZWF0
ZWQgZWxlbWVudC4iIiIKKyAgICBkZWYgY3JlYXRlX2ZyYW1lKCk6CisgICAgICAgIGFwcGVuZCA9
ICIiIgorICAgICAgICAgICAgdmFyIGZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZy
YW1lJyk7CisgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGZyYW1lKTsKKyAg
ICAgICAgICAgIHJldHVybiBmcmFtZTsKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZXNz
aW9uLmV4ZWN1dGVfc2NyaXB0KGFwcGVuZCkKKworICAgIHJldHVybiBjcmVhdGVfZnJhbWUKKwor
CitkZWYgY3JlYXRlX3dpbmRvdyhzZXNzaW9uKToKKyAgICAiIiJPcGVuIG5ldyB3aW5kb3cgYW5k
IHJldHVybiB0aGUgd2luZG93IGhhbmRsZS4iIiIKKyAgICBkZWYgY3JlYXRlX3dpbmRvdygpOgor
ICAgICAgICB3aW5kb3dzX2JlZm9yZSA9IHNlc3Npb24uaGFuZGxlcworICAgICAgICBuYW1lID0g
c2Vzc2lvbi5leGVjdXRlX3NjcmlwdCgid2luZG93Lm9wZW4oKSIpCisgICAgICAgIGFzc2VydCBs
ZW4oc2Vzc2lvbi5oYW5kbGVzKSA9PSBsZW4od2luZG93c19iZWZvcmUpICsgMQorICAgICAgICBu
ZXdfd2luZG93cyA9IGxpc3Qoc2V0KHNlc3Npb24uaGFuZGxlcykgLSBzZXQod2luZG93c19iZWZv
cmUpKQorICAgICAgICByZXR1cm4gbmV3X3dpbmRvd3MucG9wKCkKKyAgICByZXR1cm4gY3JlYXRl
X3dpbmRvdworCisKK2RlZiBodHRwKGNvbmZpZ3VyYXRpb24pOgorICAgIHJldHVybiBIVFRQUmVx
dWVzdChjb25maWd1cmF0aW9uWyJob3N0Il0sIGNvbmZpZ3VyYXRpb25bInBvcnQiXSkKKworCitk
ZWYgc2VydmVyX2NvbmZpZygpOgorICAgIHJldHVybiBqc29uLmxvYWRzKG9zLmVudmlyb24uZ2V0
KCJXRF9TRVJWRVJfQ09ORklHIikpCisKKworZGVmIGNvbmZpZ3VyYXRpb24oKToKKyAgICBob3N0
ID0gb3MuZW52aXJvbi5nZXQoIldEX0hPU1QiLCBkZWZhdWx0X2hvc3QpCisgICAgcG9ydCA9IGlu
dChvcy5lbnZpcm9uLmdldCgiV0RfUE9SVCIsIGRlZmF1bHRfcG9ydCkpCisgICAgY2FwYWJpbGl0
aWVzID0ganNvbi5sb2Fkcyhvcy5lbnZpcm9uLmdldCgiV0RfQ0FQQUJJTElUSUVTIiwgInt9Iikp
CisKKyAgICByZXR1cm4geworICAgICAgICAiaG9zdCI6IGhvc3QsCisgICAgICAgICJwb3J0Ijog
cG9ydCwKKyAgICAgICAgImNhcGFiaWxpdGllcyI6IGNhcGFiaWxpdGllcworICAgIH0KKworCitf
Y3VycmVudF9zZXNzaW9uID0gTm9uZQorCisKK2RlZiBzZXNzaW9uKGNvbmZpZ3VyYXRpb24sIHJl
cXVlc3QpOgorICAgICIiIkNyZWF0ZSBhbmQgc3RhcnQgYSBzZXNzaW9uIGZvciBhIHRlc3QgdGhh
dCBkb2VzIG5vdCBpdHNlbGYgdGVzdCBzZXNzaW9uIGNyZWF0aW9uLgorCisgICAgQnkgZGVmYXVs
dCB0aGUgc2Vzc2lvbiB3aWxsIHN0YXkgb3BlbiBhZnRlciBlYWNoIHRlc3QsIGJ1dCB3ZSBhbHdh
eXMgdHJ5IHRvIHN0YXJ0IGEKKyAgICBuZXcgb25lIGFuZCBhc3N1bWUgdGhhdCBpZiB0aGF0IGZh
aWxzIHRoZXJlIGlzIGFscmVhZHkgYSB2YWxpZCBzZXNzaW9uLiBUaGlzIG1ha2VzIGl0CisgICAg
cG9zc2libGUgdG8gcmVjb3ZlciBmcm9tIHNvbWUgZXJyb3JzIHRoYXQgbWlnaHQgbGVhdmUgdGhl
IHNlc3Npb24gaW4gYSBiYWQgc3RhdGUsIGJ1dAorICAgIGRvZXMgbm90IGRlbWFuZCB0aGF0IHdl
IHN0YXJ0IGEgbmV3IHNlc3Npb24gcGVyIHRlc3QuIiIiCisgICAgZ2xvYmFsIF9jdXJyZW50X3Nl
c3Npb24KKyAgICBpZiBfY3VycmVudF9zZXNzaW9uIGlzIE5vbmU6CisgICAgICAgIF9jdXJyZW50
X3Nlc3Npb24gPSB3ZWJkcml2ZXIuU2Vzc2lvbihjb25maWd1cmF0aW9uWyJob3N0Il0sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uWyJw
b3J0Il0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXBh
YmlsaXRpZXM9eyJhbHdheXNNYXRjaCI6IGNvbmZpZ3VyYXRpb25bImNhcGFiaWxpdGllcyJdfSkK
KyAgICB0cnk6CisgICAgICAgIF9jdXJyZW50X3Nlc3Npb24uc3RhcnQoKQorICAgIGV4Y2VwdCB3
ZWJkcml2ZXIuZXJyb3IuU2Vzc2lvbk5vdENyZWF0ZWRFeGNlcHRpb246CisgICAgICAgIGlmIG5v
dCBfY3VycmVudF9zZXNzaW9uLnNlc3Npb25faWQ6CisgICAgICAgICAgICByYWlzZQorCisgICAg
IyBmaW5hbGlzZXJzIGFyZSBwb3BwZWQgb2ZmIGEgc3RhY2ssCisgICAgIyBtYWtpbmcgdGhlaXIg
b3JkZXJpbmcgcmV2ZXJzZQorICAgIHJlcXVlc3QuYWRkZmluYWxpemVyKGxhbWJkYTogX3N3aXRj
aF90b190b3BfbGV2ZWxfYnJvd3NpbmdfY29udGV4dChfY3VycmVudF9zZXNzaW9uKSkKKyAgICBy
ZXF1ZXN0LmFkZGZpbmFsaXplcihsYW1iZGE6IF9yZXN0b3JlX3dpbmRvd19zdGF0ZShfY3VycmVu
dF9zZXNzaW9uKSkKKyAgICByZXF1ZXN0LmFkZGZpbmFsaXplcihsYW1iZGE6IF9yZXN0b3JlX3dp
bmRvd3MoX2N1cnJlbnRfc2Vzc2lvbikpCisgICAgcmVxdWVzdC5hZGRmaW5hbGl6ZXIobGFtYmRh
OiBfZGlzbWlzc191c2VyX3Byb21wdHMoX2N1cnJlbnRfc2Vzc2lvbikpCisgICAgcmVxdWVzdC5h
ZGRmaW5hbGl6ZXIobGFtYmRhOiBfZW5zdXJlX3ZhbGlkX3dpbmRvdyhfY3VycmVudF9zZXNzaW9u
KSkKKworICAgIHJldHVybiBfY3VycmVudF9zZXNzaW9uCisKKworZGVmIG5ld19zZXNzaW9uKGNv
bmZpZ3VyYXRpb24sIHJlcXVlc3QpOgorICAgICIiIlJldHVybiBhIGZhY3RvcnkgZnVuY3Rpb24g
dGhhdCB3aWxsIGF0dGVtcHQgdG8gc3RhcnQgYSBzZXNzaW9uIHdpdGggYSBnaXZlbiBib2R5Lgor
CisgICAgVGhpcyBpcyBpbnRlbmRlZCBmb3IgdGVzdHMgdGhhdCBhcmUgdGhlbXNlbHZlcyB0ZXN0
aW5nIG5ldyBzZXNzaW9uIGNyZWF0aW9uLCBhbmQgdGhlCisgICAgc2Vzc2lvbiBjcmVhdGVkIGlz
IGNsb3NlZCBhdCB0aGUgZW5kIG9mIHRoZSB0ZXN0LiIiIgorICAgIGRlZiBlbmQoKToKKyAgICAg
ICAgZ2xvYmFsIF9jdXJyZW50X3Nlc3Npb24KKyAgICAgICAgaWYgX2N1cnJlbnRfc2Vzc2lvbiBp
cyBub3QgTm9uZSBhbmQgX2N1cnJlbnRfc2Vzc2lvbi5zZXNzaW9uX2lkOgorICAgICAgICAgICAg
X2N1cnJlbnRfc2Vzc2lvbi5lbmQoKQorICAgICAgICAgICAgX2N1cnJlbnRfc2Vzc2lvbiA9IE5v
bmUKKworICAgIGRlZiBjcmVhdGVfc2Vzc2lvbihib2R5KToKKyAgICAgICAgZ2xvYmFsIF9jdXJy
ZW50X3Nlc3Npb24KKyAgICAgICAgX3Nlc3Npb24gPSB3ZWJkcml2ZXIuU2Vzc2lvbihjb25maWd1
cmF0aW9uWyJob3N0Il0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
ZmlndXJhdGlvblsicG9ydCJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNhcGFiaWxpdGllcz1Ob25lKQorICAgICAgICAjIFRPRE86IG1lcmdlIGluIHNvbWUgY2FwYWJp
bGl0aWVzIGZyb20gdGhlIGNvbmZndXJhdGlvbiBjYXBhYmlsaXRpZXMKKyAgICAgICAgIyBzaW5j
ZSB0aGVzZSBtaWdodCBiZSBuZWVkZWQgdG8gc3RhcnQgdGhlIGJyb3dzZXIKKyAgICAgICAgdmFs
dWUgPSBfc2Vzc2lvbi5zZW5kX2NvbW1hbmQoIlBPU1QiLCAic2Vzc2lvbiIsIGJvZHk9Ym9keSkK
KyAgICAgICAgIyBEb24ndCBzZXQgdGhlIGdsb2JhbCBzZXNzaW9uIHVudGlsIHdlIGFyZSBzdXJl
IHRoaXMgc3VjY2VlZGVkCisgICAgICAgIF9jdXJyZW50X3Nlc3Npb24gPSBfc2Vzc2lvbgorICAg
ICAgICBfc2Vzc2lvbi5zZXNzaW9uX2lkID0gdmFsdWVbInNlc3Npb25JZCJdCisKKyAgICAgICAg
cmV0dXJuIHZhbHVlLCBfY3VycmVudF9zZXNzaW9uCisKKyAgICBlbmQoKQorICAgIHJlcXVlc3Qu
YWRkZmluYWxpemVyKGVuZCkKKworICAgIHJldHVybiBjcmVhdGVfc2Vzc2lvbgorCisKK2RlZiB1
cmwoc2VydmVyX2NvbmZpZyk6CisgICAgZGVmIGlubmVyKHBhdGgsIHByb3RvY29sPSJodHRwIiwg
cXVlcnk9IiIsIGZyYWdtZW50PSIiKToKKyAgICAgICAgcG9ydCA9IHNlcnZlcl9jb25maWdbInBv
cnRzIl1bcHJvdG9jb2xdWzBdCisgICAgICAgIGhvc3QgPSAiJXM6JXMiICUgKHNlcnZlcl9jb25m
aWdbImhvc3QiXSwgcG9ydCkKKyAgICAgICAgcmV0dXJuIHVybHBhcnNlLnVybHVuc3BsaXQoKHBy
b3RvY29sLCBob3N0LCBwYXRoLCBxdWVyeSwgZnJhZ21lbnQpKQorCisgICAgaW5uZXIuX19uYW1l
X18gPSAidXJsIgorICAgIHJldHVybiBpbm5lcgorCitkZWYgY3JlYXRlX2RpYWxvZyhzZXNzaW9u
KToKKyAgICAiIiJDcmVhdGUgYSBkaWFsb2cgKG9uZSBvZiAiYWxlcnQiLCAicHJvbXB0Iiwgb3Ig
ImNvbmZpcm0iKSBhbmQgcHJvdmlkZSBhCisgICAgZnVuY3Rpb24gdG8gdmFsaWRhdGUgdGhhdCB0
aGUgZGlhbG9nIGhhcyBiZWVuICJoYW5kbGVkIiAoZWl0aGVyIGFjY2VwdGVkIG9yCisgICAgZGlz
bWlzc2VkKSBieSByZXR1cm5pbmcgc29tZSB2YWx1ZS4iIiIKKworICAgIGRlZiBjcmVhdGVfZGlh
bG9nKGRpYWxvZ190eXBlLCB0ZXh0PU5vbmUsIHJlc3VsdF92YXI9Tm9uZSk6CisgICAgICAgIGFz
c2VydCBkaWFsb2dfdHlwZSBpbiAoImFsZXJ0IiwgImNvbmZpcm0iLCAicHJvbXB0IiksICgKKyAg
ICAgICAgICAgICAgICJJbnZhbGlkIGRpYWxvZyB0eXBlOiAnJXMnIiAlIGRpYWxvZ190eXBlKQor
CisgICAgICAgIGlmIHRleHQgaXMgTm9uZToKKyAgICAgICAgICAgIHRleHQgPSAiIgorCisgICAg
ICAgIGFzc2VydCBpc2luc3RhbmNlKHRleHQsIGJhc2VzdHJpbmcpLCAiYHRleHRgIHBhcmFtZXRl
ciBtdXN0IGJlIGEgc3RyaW5nIgorCisgICAgICAgIGlmIHJlc3VsdF92YXIgaXMgTm9uZToKKyAg
ICAgICAgICAgIHJlc3VsdF92YXIgPSAiX19XRUJEUklWRVIiCisKKyAgICAgICAgYXNzZXJ0IHJl
LnNlYXJjaChyIl5bXyRhLXokXVtfJGEtejAtOV0qJCIsIHJlc3VsdF92YXIsIHJlLklHTk9SRUNB
U0UpLCAoCisgICAgICAgICAgICAnVGhlIGByZXN1bHRfdmFyYCBtdXN0IGJlIGEgdmFsaWQgSmF2
YVNjcmlwdCBpZGVudGlmaWVyJykKKworICAgICAgICAjIFNjcmlwdCBjb21wbGV0aW9uIGFuZCBt
b2RhbCBzdW1tb25pbmcgYXJlIHNjaGVkdWxlZCBvbiB0d28gc2VwYXJhdGUKKyAgICAgICAgIyB0
dXJucyBvZiB0aGUgZXZlbnQgbG9vcCB0byBlbnN1cmUgdGhhdCBib3RoIG9jY3VyIHJlZ2FyZGxl
c3Mgb2YgaG93CisgICAgICAgICMgdGhlIHVzZXIgYWdlbnQgbWFuYWdlcyBzY3JpcHQgZXhlY3V0
aW9uLgorICAgICAgICBzcGF3biA9ICIiIgorICAgICAgICAgICAgdmFyIGRvbmUgPSBhcmd1bWVu
dHNbMF07CisgICAgICAgICAgICBzZXRUaW1lb3V0KGRvbmUsIDApOworICAgICAgICAgICAgc2V0
VGltZW91dChmdW5jdGlvbigpIHt7CisgICAgICAgICAgICAgICAgd2luZG93LnswfSA9IHdpbmRv
dy57MX0oInsyfSIpOworICAgICAgICAgICAgfX0sIDApOworICAgICAgICAiIiIuZm9ybWF0KHJl
c3VsdF92YXIsIGRpYWxvZ190eXBlLCB0ZXh0KQorCisgICAgICAgIHNlc3Npb24uc2VuZF9zZXNz
aW9uX2NvbW1hbmQoIlBPU1QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJleGVjdXRlL2FzeW5jIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7
InNjcmlwdCI6IHNwYXduLCAiYXJncyI6IFtdfSkKKworICAgIHJldHVybiBjcmVhdGVfZGlhbG9n
CmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3Rz
L3N1cHBvcnQvaHR0cF9yZXF1ZXN0LnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dl
YmRyaXZlci90ZXN0cy9zdXBwb3J0L2h0dHBfcmVxdWVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uYWUyOGE2NDg2YjEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJE
cml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL3N1cHBvcnQvaHR0cF9yZXF1
ZXN0LnB5CkBAIC0wLDAgKzEsMjMgQEAKK2ltcG9ydCBjb250ZXh0bGliCitpbXBvcnQgaHR0cGxp
YgorCisKK2NsYXNzIEhUVFBSZXF1ZXN0KG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYs
IGhvc3QsIHBvcnQpOgorICAgICAgICBzZWxmLmhvc3QgPSBob3N0CisgICAgICAgIHNlbGYucG9y
dCA9IHBvcnQKKworICAgIGRlZiBoZWFkKHNlbGYsIHBhdGgpOgorICAgICAgICByZXR1cm4gc2Vs
Zi5fcmVxdWVzdCgiSEVBRCIsIHBhdGgpCisKKyAgICBkZWYgZ2V0KHNlbGYsIHBhdGgpOgorICAg
ICAgICByZXR1cm4gc2VsZi5fcmVxdWVzdCgiR0VUIiwgcGF0aCkKKworICAgIEBjb250ZXh0bGli
LmNvbnRleHRtYW5hZ2VyCisgICAgZGVmIF9yZXF1ZXN0KHNlbGYsIG1ldGhvZCwgcGF0aCk6Cisg
ICAgICAgIGNvbm4gPSBodHRwbGliLkhUVFBDb25uZWN0aW9uKHNlbGYuaG9zdCwgc2VsZi5wb3J0
KQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjb25uLnJlcXVlc3QobWV0aG9kLCBwYXRoKQor
ICAgICAgICAgICAgeWllbGQgY29ubi5nZXRyZXNwb25zZSgpCisgICAgICAgIGZpbmFsbHk6Cisg
ICAgICAgICAgICBjb25uLmNsb3NlKCkKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9y
dGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvc3VwcG9ydC9pbmxpbmUucHkgYi9XZWJEcml2ZXJUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL3N1cHBvcnQvaW5saW5lLnB5Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45OTQxOGQ5NzRkMwotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvc3VwcG9y
dC9pbmxpbmUucHkKQEAgLTAsMCArMSw0MCBAQAoraW1wb3J0IHVybGxpYgorCisKK2RlZiBpbmxp
bmUoZG9jLCBkb2N0eXBlPSJodG1sIiwgbWltZT0idGV4dC9odG1sO2NoYXJzZXQ9dXRmLTgiLCBw
cm90b2NvbD0iaHR0cCIpOgorICAgIGZyb20gLmZpeHR1cmVzIGltcG9ydCBzZXJ2ZXJfY29uZmln
LCB1cmwKKyAgICBidWlsZF91cmwgPSB1cmwoc2VydmVyX2NvbmZpZygpKQorCisgICAgaWYgZG9j
dHlwZSA9PSAiaHRtbCI6CisgICAgICAgIG1pbWUgPSAidGV4dC9odG1sO2NoYXJzZXQ9dXRmLTgi
CisgICAgZWxpZiBkb2N0eXBlID09ICJ4aHRtbCI6CisgICAgICAgIG1pbWUgPSAiYXBwbGljYXRp
b24veGh0bWwreG1sIgorICAgICAgICBkb2MgPSByIiIiPCFET0NUWVBFIGh0bWwgUFVCTElDICIt
Ly9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIKKyAgICAiaHR0cDovL3d3dy53My5vcmcv
VFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3
dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+CisgIDxoZWFkPgor
ICAgIDx0aXRsZT5YSFRNTCBtaWdodCBiZSB0aGUgZnV0dXJlPC90aXRsZT4KKyAgPC9oZWFkPgor
CisgIDxib2R5PgorICAgIHt9CisgIDwvYm9keT4KKzwvaHRtbD4iIiIuZm9ybWF0KGRvYykKKwor
ICAgIHF1ZXJ5ID0geyJkb2MiOiBkb2N9CisgICAgaWYgbWltZSAhPSAidGV4dC9odG1sO2NoYXJz
ZXQ9dXRmOCI6CisgICAgICAgIHF1ZXJ5WyJjb250ZW50LXR5cGUiXSA9IG1pbWUKKworICAgIHJl
dHVybiBidWlsZF91cmwoIi93ZWJkcml2ZXIvdGVzdHMvc3VwcG9ydC9pbmxpbmUucHkiLAorICAg
ICAgICAgICAgICAgICAgICAgcXVlcnk9dXJsbGliLnVybGVuY29kZShxdWVyeSksCisgICAgICAg
ICAgICAgICAgICAgICBwcm90b2NvbD1wcm90b2NvbCkKKworCitkZWYgbWFpbihyZXF1ZXN0LCBy
ZXNwb25zZSk6CisgICAgZG9jID0gcmVxdWVzdC5HRVQuZmlyc3QoImRvYyIsIE5vbmUpCisgICAg
Y29udGVudF90eXBlID0gcmVxdWVzdC5HRVQuZmlyc3QoImNvbnRlbnQtdHlwZSIsICJ0ZXh0L2h0
bWw7Y2hhcnNldD11dGY4IikKKyAgICBpZiBkb2MgaXMgTm9uZToKKyAgICAgICAgcnYgPSA0MDQs
IFsoIkNvbnRlbnQtVHlwZSIsICJ0ZXh0L3BsYWluIildLCAiTWlzc2luZyBkb2MgcGFyYW1ldGVy
IGluIHF1ZXJ5IgorICAgIGVsc2U6CisgICAgICAgIHJ2ID0gWygiQ29udGVudC1UeXBlIiwgY29u
dGVudF90eXBlKV0sIGRvYworICAgIHJldHVybiBydgpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9zdXBwb3J0L21lcmdlX2RpY3Rpb25hcmll
cy5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvc3VwcG9y
dC9tZXJnZV9kaWN0aW9uYXJpZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLmNmMDZjOWI0MzNjCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9zdXBwb3J0L21lcmdlX2RpY3Rpb25hcmllcy5weQpA
QCAtMCwwICsxLDQ5IEBACitkZWYgaXRlcml0ZW1zKGQpOgorICAgICIiIkNyZWF0ZSBhIGtleS12
YWx1ZSBpdGVyYXRvciBmb3IgdGhlIGdpdmVuIGRpY3QgaW4gYm90aCBQeXRob24gMi54IGFuZAor
ICAgIFB5dGhvbiAzLnggZW52aXJvbm1lbnRzIiIiCisgICAgaWYgaGFzYXR0cihkLCAiaXRlcml0
ZW1zIik6CisgICAgICAgIHJldHVybiBkLml0ZXJpdGVtcygpCisgICAgcmV0dXJuIGQuaXRlbXMo
KQorCitkZWYgbWVyZ2VfZGljdGlvbmFyaWVzKGZpcnN0LCBzZWNvbmQpOgorICAgICIiIkdpdmVu
IHR3byBkaWN0aW9uYXJpZXMsIGNyZWF0ZSBhIHRoaXJkIHRoYXQgZGVmaW5lcyBhbGwgc3BlY2lm
aWVkCisgICAga2V5L3ZhbHVlIHBhaXJzLiBUaGlzIG1lcmdlX2RpY3Rpb25hcmllcyBpcyBwZXJm
b3JtZWQgImRlZXBseSIgb24gYW55IG5lc3RlZAorICAgIGRpY3Rpb25hcmllcy4gSWYgYSB2YWx1
ZSBpcyBkZWZpbmVkIGZvciB0aGUgc2FtZSBrZXkgYnkgYm90aCBkaWN0aW9uYXJpZXMsCisgICAg
YW4gZXhjZXB0aW9uIHdpbGwgYmUgcmFpc2VkLiIiIgorICAgIHJlc3VsdCA9IGRpY3QoZmlyc3Qp
CisKKyAgICBmb3Iga2V5LCB2YWx1ZSBpbiBpdGVyaXRlbXMoc2Vjb25kKToKKyAgICAgICAgaWYg
a2V5IGluIHJlc3VsdCBhbmQgcmVzdWx0W2tleV0gIT0gdmFsdWU6CisgICAgICAgICAgICBpZiBp
c2luc3RhbmNlKHJlc3VsdFtrZXldLCBkaWN0KSBhbmQgaXNpbnN0YW5jZSh2YWx1ZSwgZGljdCk6
CisgICAgICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBtZXJnZV9kaWN0aW9uYXJpZXMocmVzdWx0
W2tleV0sIHZhbHVlKQorICAgICAgICAgICAgZWxpZiByZXN1bHRba2V5XSAhPSB2YWx1ZToKKyAg
ICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIm1lcmdlX2RpY3Rpb25hcmllczogcmVmdXNp
bmcgdG8gb3ZlcndyaXRlICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJh
dHRyaWJ1dGU6IGAlc2AiICUga2V5KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVzdWx0
W2tleV0gPSB2YWx1ZQorCisgICAgcmV0dXJuIHJlc3VsdAorCitpZiBfX25hbWVfXyA9PSAiX19t
YWluX18iOgorICAgIGFzc2VydCBtZXJnZV9kaWN0aW9uYXJpZXMoe30sIHt9KSA9PSB7fQorICAg
IGFzc2VydCBtZXJnZV9kaWN0aW9uYXJpZXMoe30sIHsiYSI6IDIzfSkgPT0geyJhIjogMjN9Cisg
ICAgYXNzZXJ0IG1lcmdlX2RpY3Rpb25hcmllcyh7ImEiOiAyM30sIHsiYiI6IDQ1fSkgPT0geyJh
IjogMjMsICJiIjogNDV9CisKKyAgICBlID0gTm9uZQorICAgIHRyeToKKyAgICAgICAgbWVyZ2Vf
ZGljdGlvbmFyaWVzKHsiYSI6IDIzfSwgeyJhIjogNDV9KQorICAgIGV4Y2VwdCBFeGNlcHRpb24g
YXMgX2U6CisgICAgICAgIGUgPSBfZQorICAgIGFzc2VydCBpc2luc3RhbmNlKGUsIFR5cGVFcnJv
cikKKworICAgIGFzc2VydCBtZXJnZV9kaWN0aW9uYXJpZXMoeyJhIjogMjN9LCB7ImEiOiAyM30p
ID09IHsiYSI6IDIzfQorCisgICAgYXNzZXJ0IG1lcmdlX2RpY3Rpb25hcmllcyh7ImEiOiB7ImIi
OiAyM319LCB7ImEiOiB7ImMiOiA0NX19KSA9PSB7ImEiOiB7ImIiOiAyMywgImMiOiA0NX19Cisg
ICAgYXNzZXJ0IG1lcmdlX2RpY3Rpb25hcmllcyh7ImEiOiB7ImIiOiAyM319LCB7ImEiOiB7ImIi
OiAyM319KSA9PSB7ImEiOiB7ImIiOiAyM319CisKKyAgICBlID0gTm9uZQorICAgIHRyeToKKyAg
ICAgICAgbWVyZ2VfZGljdGlvbmFyaWVzKHsiYSI6IHsiYiI6IDIzfX0sIHsiYSI6IHsiYiI6IDQ1
fX0pCisgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBfZToKKyAgICAgICAgZSA9IF9lCisgICAgYXNz
ZXJ0IGlzaW5zdGFuY2UoZSwgVHlwZUVycm9yKQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9zdXBwb3J0L3dhaXQucHkgYi9XZWJEcml2ZXJU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL3N1cHBvcnQvd2FpdC5weQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZjY0NWFiZTczNjcKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL3N1cHBv
cnQvd2FpdC5weQpAQCAtMCwwICsxLDI4IEBACitpbXBvcnQgdGltZQorCitjbGFzcyBUaW1lb3V0
RXhjZXB0aW9uKEV4Y2VwdGlvbik6CisgICAgcGFzcworCisKK2RlZiB3YWl0KHNlc3Npb24sIGNv
bmRpdGlvbiwgbWVzc2FnZSwgaW50ZXJ2YWw9MC4xLCB0aW1lb3V0PTUpOgorICAgICIiIiBQb2xs
IGEgY29uZGl0aW9uIHVudGlsIGl0J3MgdHJ1ZSBvciB0aGUgdGltZW91dCBlbGxhcHNlcy4KKwor
ICAgIDpwYXJhbSBzZXNzaW9uOiBXZWJEcml2ZXIgc2Vzc2lvbiB0byB1c2Ugd2l0aCBgY29uZGl0
aW9uYAorICAgIDpwYXJhbSBjb25kaXRpb246IGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyBhIFdlYkRy
aXZlciBzZXNzaW9uIGFuZCByZXR1cm5zIGEgYm9vbGVhbgorICAgIDpwYXJhbSBtZXNzYWdlOiBm
YWlsdXJlIGRlc2NyaXB0aW9uIHRvIGRpc3BsYXkgaW4gY2FzZSB0aGUgdGltZW91dCBpcyByZWFj
aGVkCisgICAgOnBhcmFtIGludGVydmFsOiBzZWNvbmRzIGJldHdlZW4gZWFjaCBjYWxsIHRvIGBj
b25kaXRpb25gLiBEZWZhdWx0OiAwLjEKKyAgICA6cGFyYW0gdGltZW91dDogc2Vjb25kcyB1bnRp
bCB3ZSBzdG9wIHBvbGxpbmcuIERlZmF1bHQ6IDUKKyAgICAiIiIKKworICAgIHN0YXJ0ID0gdGlt
ZS50aW1lKCkKKyAgICBlbmQgPSBzdGFydCArIHRpbWVvdXQKKworICAgIHdoaWxlIG5vdCAodGlt
ZS50aW1lKCkgPj0gZW5kKToKKyAgICAgICAgbmV4dF9zdGVwID0gdGltZS50aW1lKCkgKyBpbnRl
cnZhbAorICAgICAgICBzdWNjZXNzID0gY29uZGl0aW9uKHNlc3Npb24pCisgICAgICAgIG5leHRf
aW50ZXJ2YWwgPSBtYXgobmV4dF9zdGVwIC0gdGltZS50aW1lKCksIDApCisgICAgICAgIGlmIG5v
dCBzdWNjZXNzOgorICAgICAgICAgICAgdGltZS5zbGVlcChuZXh0X2ludGVydmFsKQorICAgICAg
ICAgICAgY29udGludWUKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MKKyAgICByYWlzZSBUaW1lb3V0
RXhjZXB0aW9uKCJUaW1lZCBvdXQgYWZ0ZXIgJWQgc2Vjb25kczogJXMiICUgKHRpbWVvdXQsIG1l
c3NhZ2UpKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321562</attachid>
            <date>2017-09-22 10:40:25 -0700</date>
            <delta_ts>2017-09-22 10:42:03 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>wd-w3c-tests.diff</filename>
            <type>text/plain</type>
            <size>1560938</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAyMTUw
Nzg4NDJjYi4uZDg0ODdhOTBlNWIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9U
b29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNSBAQAorMjAxNy0wOS0yMSAgQ2FybG9zIEdhcmNp
YSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgV2ViRHJpdmVyOiBBZGQg
c3VwcG9ydCB0byBpbXBvcnQgYW5kIHJ1biBXM0MgdGVzdHMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzMwNAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdQVCBoYXMgbm93IHNldmVyYWwgV2ViRHJpdmVy
IHRlc3RzLCBhbmQgbmV3IG9uZXMgYXJlIGdvaW5nIHRvIGJlIGFkZGVkIHRvIGNvdmVyIHRoZSB3
aG9sZSBzcGVjLiBUaGlzIHBhdGNoCisgICAgICAgIGFkZHMgdGhlIGluaXRpYWwgc3VwcG9ydCBm
b3IgcnVubmluZyBXM0MgdGVzdHMuIFRoZSBzY3JpcHQgaW1wb3J0LXczYy13ZWJkcml2ZXItdGVz
dHMgcmV1c2VzIHBhcnRzIG9mIHRoZSAgVzNDCisgICAgICAgIHRlc3QgZG93bmxvYWRlciB0byBk
b3dubG9hZCB0aGUgdGVzdHMgYW5kIHJlcXVpcmVkIHRvb2xzIGZyb20gV1BUIHJlcG9zaXRvcnkg
aW50byBXZWJEcml2ZXJUZXN0cworICAgICAgICBkaXJlY3RvcnkuIFRlc3RzIGNhbiBiZSBydW4g
d2l0aCBydW4td2ViZHJpdmVyLXRlc3RzLCBhIG5ldyBzY3JpcHQgdGhhdCB3b3JrcyBzaW1pbGFy
IHRvIG90aGVyIHRlc3QgcnVubmVyCisgICAgICAgIHNjcmlwdHMuIEZvciBub3cgaXQgc2hvd3Mg
YSBzdW1tYXJ5IGF0IHRoZSBlbmQgb2YgdGhlIGV4ZWN1dGlvbiwgdGhlcmUgYXJlbid0IGV4cGVj
dGF0aW9ucyB5ZXQsIHNpbmNlIHdlIGFyZSBub3QKKyAgICAgICAgcmVhZHkgdG8gcnVuIHRob3Nl
IHRlc3RzIGluIHRoZSBib3RzLiBOb3Qgb25seSBiZWNhdXNlIG9mIGJ1Z3MgYW5kIG1pc3Npbmcg
Y29tbWFuZHMgaW4gb3VyIFdlYkRyaXZlcgorICAgICAgICBpbXBsZW1lbnRhdGlvbiwgYnV0IGFs
c28gYmVjYXVzZSB0aGUgdGVzdHMgdGhlbXNldmVzIGFyZSBub3Qgc3BlYyBjb21wbGlhbnQuIEhv
d2V2ZXIsIHRoaXMgaXMgc3RpbGwgdXNlZnVsIHRvCisgICAgICAgIHJ1biB0aGUgdGVzdHMgdG8g
Zml4IHRoZSBidWdzIGFuZCBpbXBsZW1lbnQgdGhlIG1pc3NpbmcgZmVhdHVyZXMuIE9uY2Ugd2Ug
YXJlIHJlYWR5IHRvIHByb3Blcmx5IHJ1biB0aGUgdGVzdHMsCisgICAgICAgIHdlIGNhbiBhZGQg
dGhlIGV4cGVjdGF0aW9ucyBzdXBwb3J0IGFuZCBydW4gdGhlIHRlc3RzIGluIHRoZSBib3RzLgor
CisgICAgICAgICogU2NyaXB0cy9pbXBvcnQtdzNjLXdlYmRyaXZlci10ZXN0czogQWRkZWQuCisg
ICAgICAgICogU2NyaXB0cy9ydW4td2ViZHJpdmVyLXRlc3RzOiBBZGRlZC4KKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHk6IFNraXAgV2ViRHJpdmVyVGVzdHMgZGly
ZWN0b3J5IHNpbmNlIGl0IG9ubHkgY29udGFpbnMgdGhpcmQtcGFydHkgcHl0aG9uCisgICAgICAg
IGNvZGUuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L19faW5pdF9fLnB5
OiBBZGQgc3VwcG9ydCB0byBhdXRvZG93bmxvYWQgbW96bG9nIGFuZCBtb3pwcm9jZXNzIHNpbmNl
IHRoZXkgcmVxdWlyZWQKKyAgICAgICAgYnkgdGhlIFdlYkRyaXZlciB0ZXN0cy4KKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZlcl90ZXN0cy9fX2luaXRfXy5weTogQWRkZWQuCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJfdGVzdHMvd2ViZHJpdmVyX2RyaXZl
ci5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJfdGVzdHMv
d2ViZHJpdmVyX2RyaXZlcl9ndGsucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvd2ViZHJpdmVyX3Rlc3RzL3dlYmRyaXZlcl90ZXN0X3Jlc3VsdC5weTogQWRkZWQuCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJfdGVzdHMvd2ViZHJpdmVyX3Rlc3RfcnVu
bmVyLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZlcl90ZXN0
cy93ZWJkcml2ZXJfdGVzdF9ydW5uZXJfdzNjLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L3dlYmRyaXZlcl90ZXN0cy93ZWJkcml2ZXJfdzNjX2V4ZWN1dG9yLnB5OiBBZGRl
ZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZlcl90ZXN0cy93ZWJkcml2ZXJf
dzNjX3dlYl9zZXJ2ZXIucHk6IEFkZGVkLgorCiAyMDE3LTA5LTIxICBKb3NlcGggUGVjb3Jhcm8g
IDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgYWRkIHRoZSBhYmls
aXR5IHRvIHNraXAgYSB0ZXN0MjYyIHRlc3QuCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL2lt
cG9ydC13M2Mtd2ViZHJpdmVyLXRlc3RzIGIvVG9vbHMvU2NyaXB0cy9pbXBvcnQtdzNjLXdlYmRy
aXZlci10ZXN0cwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMC4uMWZkNzc5
NDYwMjIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL2ltcG9ydC13M2Mtd2ViZHJp
dmVyLXRlc3RzCkBAIC0wLDAgKzEsODAgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisjIENv
cHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisjIGFyZSBtZXQ6CisjCisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUKKyMgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyMgICAgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyAgICBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZworIyAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMKKyMgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSICJBUyBJUyIgQU5EIEFO
WQorIyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUKKyMgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAorIyBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyMgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCisjIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRgorIyBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyMgU1VDSCBE
QU1BR0UuCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQganNvbgoraW1wb3J0IG9zCisKK2Zyb20g
d2Via2l0cHkuY29tbW9uLmhvc3QgaW1wb3J0IEhvc3QKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5
c3RlbS5maWxlc3lzdGVtIGltcG9ydCBGaWxlU3lzdGVtCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5z
eXN0ZW0ubG9ndXRpbHMgaW1wb3J0IGNvbmZpZ3VyZV9sb2dnaW5nCitmcm9tIHdlYmtpdHB5LmNv
bW1vbi53ZWJraXRfZmluZGVyIGltcG9ydCBXZWJLaXRGaW5kZXIKK2Zyb20gd2Via2l0cHkuY29t
bW9uLmNoZWNrb3V0LnNjbS5naXQgaW1wb3J0IEdpdAorZnJvbSB3ZWJraXRweS53M2MudGVzdF9k
b3dubG9hZGVyIGltcG9ydCBUZXN0RG93bmxvYWRlcgorCitfbG9nID0gbG9nZ2luZy5nZXRMb2dn
ZXIoX19uYW1lX18pCisKK2RlZiBkb3dubG9hZF90ZXN0cyhob3N0LCB1cmwsIHJldmlzaW9uLCBk
ZXN0X2RpcmVjdG9yeSk6CisgICAgZG93bmxvYWRlciA9IFRlc3REb3dubG9hZGVyKE5vbmUsIGhv
c3QsIFRlc3REb3dubG9hZGVyLmRlZmF1bHRfb3B0aW9ucygpKQorICAgIGRvd25sb2FkZXIuY2hl
Y2tvdXRfdGVzdF9yZXBvc2l0b3J5KHJldmlzaW9uLCB1cmwsIGRlc3RfZGlyZWN0b3J5KQorICAg
IGRvd25sb2FkZXIuZ2l0KGRlc3RfZGlyZWN0b3J5KS5jaGVja291dChyZXZpc2lvbiwgRmFsc2Up
CisKK2RlZiBzaG91bGRfc2tpcF9maWxlKHNvdXJjZV9wYXRoLCBmdWxsX3BhdGhzX3RvX3NraXAp
OgorICAgIGZvciBwYXRoIGluIGZ1bGxfcGF0aHNfdG9fc2tpcDoKKyAgICAgICAgaWYgc291cmNl
X3BhdGguc3RhcnRzd2l0aChwYXRoKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgcmV0
dXJuIEZhbHNlCisKK2RlZiBpbXBvcnRfdGVzdHMoaG9zdCwgcGF0aHNfdG9faW1wb3J0LCBwYXRo
c190b19za2lwLCBzcmNfZGlyZWN0b3J5LCBkZXN0X2RpcmVjdG9yeSk6CisgICAgX2xvZy5pbmZv
KCdJbXBvcnRpbmcgdGVzdHMnKQorICAgIGZ1bGxfcGF0aHNfdG9fc2tpcCA9IFtob3N0LmZpbGVz
eXN0ZW0uam9pbihzcmNfZGlyZWN0b3J5LCBwYXRoKSBmb3IgcGF0aCBpbiBwYXRoc190b19za2lw
XQorICAgIGZvciBwYXRoIGluIHBhdGhzX3RvX2ltcG9ydDoKKyAgICAgICAgc291cmNlX2RpcmVj
dG9yeSA9IGhvc3QuZmlsZXN5c3RlbS5qb2luKHNyY19kaXJlY3RvcnksIHBhdGgpCisgICAgICAg
IGZvciBzb3VyY2VfcGF0aCBpbiBob3N0LmZpbGVzeXN0ZW0uZmlsZXNfdW5kZXIoc291cmNlX2Rp
cmVjdG9yeSk6CisgICAgICAgICAgICBpZiBzaG91bGRfc2tpcF9maWxlKHNvdXJjZV9wYXRoLCBm
dWxsX3BhdGhzX3RvX3NraXApOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAg
ICBkZXN0aW5hdGlvbl9wYXRoID0gaG9zdC5maWxlc3lzdGVtLmpvaW4oZGVzdF9kaXJlY3Rvcnks
IGhvc3QuZmlsZXN5c3RlbS5yZWxwYXRoKHNvdXJjZV9wYXRoLCBzcmNfZGlyZWN0b3J5KSkKKyAg
ICAgICAgICAgIGhvc3QuZmlsZXN5c3RlbS5tYXliZV9tYWtlX2RpcmVjdG9yeShob3N0LmZpbGVz
eXN0ZW0uZGlybmFtZShkZXN0aW5hdGlvbl9wYXRoKSkKKyAgICAgICAgICAgIGhvc3QuZmlsZXN5
c3RlbS5jb3B5ZmlsZShzb3VyY2VfcGF0aCwgZGVzdGluYXRpb25fcGF0aCkKKworCitjb25maWd1
cmVfbG9nZ2luZygpCisKK2hvc3QgPSBIb3N0KCkKK2hvc3QuaW5pdGlhbGl6ZV9zY20oKQord2Vi
a2l0X2ZpbmRlciA9IFdlYktpdEZpbmRlcihob3N0LmZpbGVzeXN0ZW0pCitpbXBvcnRlcl9jb25m
aWdfcGF0aCA9IHdlYmtpdF9maW5kZXIucGF0aF9mcm9tX3dlYmtpdF9iYXNlKCdXZWJEcml2ZXJU
ZXN0cycsICdpbXBvcnRlZCcsICd3M2MnLCAnaW1wb3J0ZXIuanNvbicpCitjb25maWcgPSBqc29u
LmxvYWRzKGhvc3QuZmlsZXN5c3RlbS5yZWFkX3RleHRfZmlsZShpbXBvcnRlcl9jb25maWdfcGF0
aCkpCisKK2Rvd25sb2FkX3BhdGggPSB3ZWJraXRfZmluZGVyLnBhdGhfZnJvbV93ZWJraXRfYmFz
ZSgnV2ViS2l0QnVpbGQnLCAndzNjLXRlc3RzJywgJ3dlYi1wbGF0Zm9ybS10ZXN0cycpCitob3N0
LmZpbGVzeXN0ZW0ubWF5YmVfbWFrZV9kaXJlY3RvcnkoaG9zdC5maWxlc3lzdGVtLmRpcm5hbWUo
ZG93bmxvYWRfcGF0aCkpCitkb3dubG9hZF90ZXN0cyhob3N0LCBjb25maWdbJ3JlcG9zaXRvcnkn
XSwgY29uZmlnWydyZXZpc2lvbiddLCBkb3dubG9hZF9wYXRoKQorCitpbXBvcnRfcGF0aCA9IHdl
YmtpdF9maW5kZXIucGF0aF9mcm9tX3dlYmtpdF9iYXNlKCdXZWJEcml2ZXJUZXN0cycsICdpbXBv
cnRlZCcsICd3M2MnKQoraW1wb3J0X3Rlc3RzKGhvc3QsIGNvbmZpZ1sncGF0aHNfdG9faW1wb3J0
J10sIGNvbmZpZ1sncGF0aHNfdG9fc2tpcCddLCBkb3dubG9hZF9wYXRoLCBpbXBvcnRfcGF0aCkK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvcnVuLXdlYmRyaXZlci10ZXN0cyBiL1Rvb2xzL1Nj
cmlwdHMvcnVuLXdlYmRyaXZlci10ZXN0cwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAw
MDAwMDAwMC4uOTRlMmMxNDc5NzkKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3J1
bi13ZWJkcml2ZXItdGVzdHMKQEAgLTAsMCArMSw2NiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9u
CisKKyMgQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCisjCisjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyMgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworIyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyMgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMKKyMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3B0cGFyc2UK
K2ltcG9ydCBzeXMKKworZnJvbSB3ZWJraXRweS5jb21tb24uaG9zdCBpbXBvcnQgSG9zdAorZnJv
bSB3ZWJraXRweS53ZWJkcml2ZXJfdGVzdHMud2ViZHJpdmVyX3Rlc3RfcnVubmVyIGltcG9ydCBX
ZWJEcml2ZXJUZXN0UnVubmVyCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ubG9ndXRpbHMg
aW1wb3J0IGNvbmZpZ3VyZV9sb2dnaW5nCisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25h
bWVfXykKKworb3B0aW9uX3BhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcih1c2FnZT0ndXNh
Z2U6ICVwcm9nIFtvcHRpb25zXSBbdGVzdC4uLl0nKQorb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9u
KCctLXZlcmJvc2UnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZXN0PSd2ZXJib3NlJywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBoZWxwPSdTaG93IGRlYnVnIG1lc3NhZ2UnKQorb3B0aW9uX3Bh
cnNlci5hZGRfb3B0aW9uKCctLXBsYXRmb3JtJywgYWN0aW9uPSdzdG9yZScsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgaGVscD0nUGxhdGZvcm0gdG8gdXNlIChlLmcuLCAiZ3RrIiknKQorb3B0
aW9uX3BhcnNlci5hZGRfb3B0aW9uKCctLWd0aycsIGFjdGlvbj0nc3RvcmVfY29uc3QnLCBkZXN0
PSdwbGF0Zm9ybScsIGNvbnN0PSdndGsnLAorICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9
J0FsaWFzIGZvciAtLXBsYXRmb3JtPWd0aycpCitvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy0t
cmVsZWFzZScsIGFjdGlvbj0nc3RvcmVfY29uc3QnLCBjb25zdD0nUmVsZWFzZScsIGRlc3Q9ImNv
bmZpZ3VyYXRpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1NldCB0aGUgY29u
ZmlndXJhdGlvbiB0byBSZWxlYXNlJykKK29wdGlvbl9wYXJzZXIuYWRkX29wdGlvbignLS1kZWJ1
ZycsIGFjdGlvbj0nc3RvcmVfY29uc3QnLCBjb25zdD0nRGVidWcnLCBkZXN0PSJjb25maWd1cmF0
aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdTZXQgdGhlIGNvbmZpZ3VyYXRp
b24gdG8gRGVidWcnKQorb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCctLWRpc3BsYXktc2VydmVy
JywgY2hvaWNlcz1bJ3h2ZmInLCAneG9yZycsICd3ZXN0b24nLCAnd2F5bGFuZCddLCBkZWZhdWx0
PSd4dmZiJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPScieHZmYiI6IFVzZSBhIHZp
cnR1YWxpemVkIFgxMSBzZXJ2ZXIuICJ4b3JnIjogVXNlIHRoZSBjdXJyZW50IFgxMSBzZXNzaW9u
LiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIndlc3RvbiI6IFVzZSBhIHZpcnR1
YWxpemVkIFdlc3RvbiBzZXJ2ZXIuICJ3YXlsYW5kIjogVXNlIHRoZSBjdXJyZW50IHdheWxhbmQg
c2Vzc2lvbi4nKQorCitvcHRpb25zLCBhcmdzID0gb3B0aW9uX3BhcnNlci5wYXJzZV9hcmdzKCkK
KworY29uZmlndXJlX2xvZ2dpbmcobG9nZ2luZy5ERUJVRyBpZiBvcHRpb25zLnZlcmJvc2UgZWxz
ZSBsb2dnaW5nLklORk8pCisKK3RyeToKKyAgICBwb3J0ID0gSG9zdCgpLnBvcnRfZmFjdG9yeS5n
ZXQob3B0aW9ucy5wbGF0Zm9ybSwgb3B0aW9ucykKK2V4Y2VwdCBOb3RJbXBsZW1lbnRlZEVycm9y
LCBlOgorICAgIF9sb2cuZXJyb3Ioc3RyKGUpKQorICAgIHN5cy5leGl0KC0xKQorCitwb3J0Ll9k
aXNwbGF5X3NlcnZlciA9IG9wdGlvbnMuZGlzcGxheV9zZXJ2ZXIKK3J1bm5lciA9IFdlYkRyaXZl
clRlc3RSdW5uZXIocG9ydCkKK3JldHZhbCA9IHJ1bm5lci5ydW4oYXJncykKK3J1bm5lci5wcmlu
dF9yZXN1bHRzKCkKKworc3lzLmV4aXQocmV0dmFsKQorCmRpZmYgLS1naXQgYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0
eWxlL2NoZWNrZXIucHkKaW5kZXggYmFkNTc2Y2QzZjQuLmQxZTBhZjY4Yzk1IDEwMDY0NAotLS0g
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkKKysrIGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CkBAIC0zNDYsNiArMzQ2LDggQEAgX1NLSVBQ
RURfRklMRVNfV0lUSF9XQVJOSU5HID0gWwogX1NLSVBQRURfRklMRVNfV0lUSE9VVF9XQVJOSU5H
ID0gWwogICAgICJMYXlvdXRUZXN0cyIgKyBvcy5wYXRoLnNlcCwKIAorICAgICJXZWJEcml2ZXJU
ZXN0cyIgKyBvcy5wYXRoLnNlcCwKKwogICAgICMgRmlsZXMgZ2VuZXJhdGVkIGJ5IHRoZSBiaW5k
aW5ncyBzY3JpcHQgc2hvdWxkIG5vdCBiZSBjaGVja2VkIGZvciBzdHlsZS4KICAgICBvcy5wYXRo
LmpvaW4oJ1NvdXJjZScsICdXZWJDb3JlJywgJ2JpbmRpbmdzJywgJ3NjcmlwdHMnLCAndGVzdCcp
LAogCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvX19pbml0
X18ucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvX19pbml0X18ucHkKaW5k
ZXggZmM0NzE4MmRiYTMuLjEwZDVkMWU5NzVhIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L3RoaXJkcGFydHkvX19pbml0X18ucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS90aGlyZHBhcnR5L19faW5pdF9fLnB5CkBAIC0xMDYsNiArMTA2LDEwIEBAIGNsYXNzIEF1dG9p
bnN0YWxsSW1wb3J0SG9vayhvYmplY3QpOgogICAgICAgICAgICAgc2VsZi5pbnN0YWxsX2Nocm9t
ZWRyaXZlcigpCiAgICAgICAgIGVsaWYgJy5nZWNrb2RyaXZlcicgaW4gZnVsbG5hbWU6CiAgICAg
ICAgICAgICBzZWxmLmluc3RhbGxfZ2Vja29kcml2ZXIoKQorICAgICAgICBlbGlmICcubW96bG9n
JyBpbiBmdWxsbmFtZToKKyAgICAgICAgICAgIHNlbGYuX2luc3RhbGxfbW96bG9nKCkKKyAgICAg
ICAgZWxpZiAnLm1venByb2Nlc3MnIGluIGZ1bGxuYW1lOgorICAgICAgICAgICAgc2VsZi5faW5z
dGFsbF9tb3pwcm9jZXNzKCkKIAogICAgIGRlZiBfaW5zdGFsbF9tZWNoYW5pemUoc2VsZik6CiAg
ICAgICAgIHNlbGYuX2luc3RhbGwoImh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvc291
cmNlL20vbWVjaGFuaXplL21lY2hhbml6ZS0wLjIuNS50YXIuZ3oiLApAQCAtMTE5LDYgKzEyMywx
NiBAQCBjbGFzcyBBdXRvaW5zdGFsbEltcG9ydEhvb2sob2JqZWN0KToKICAgICAgICAgc2VsZi5f
aW5zdGFsbCgiaHR0cDovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2UvcC9wZXA4L3Bl
cDgtMC41LjAudGFyLmd6I21kNT01MTJhODE4YWY5OTc5MjkwY2Q2MTljY2U4ZTljMmUyYiIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwZXA4LTAuNS4wL3BlcDgucHkiKQogCisgICAg
ZGVmIF9pbnN0YWxsX21vemxvZyhzZWxmKToKKyAgICAgICAgc2VsZi5fZW5zdXJlX2F1dG9pbnN0
YWxsZWRfZGlyX2lzX2luX3N5c19wYXRoKCkKKyAgICAgICAgc2VsZi5faW5zdGFsbCgiaHR0cHM6
Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvMTAvZDUvZDI4NmI1ZGMzZjQwZTMyZDJhOWIzY2Fi
MGI1YjIwYTA1ZDcwNDk1OGI0NGI0YzVhOWFlZDY0NzJkZWFiL21vemxvZy0zLjUudGFyLmd6I21k
NT0zMjgyYzcwZTcwMzcyNjZmODNkOGM4MDExOTEyOWI3NSIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAibW96bG9nLTMuNS9tb3psb2ciKQorCisgICAgZGVmIF9pbnN0YWxsX21venBy
b2Nlc3Moc2VsZik6CisgICAgICAgIHNlbGYuX2Vuc3VyZV9hdXRvaW5zdGFsbGVkX2Rpcl9pc19p
bl9zeXNfcGF0aCgpCisgICAgICAgIHNlbGYuX2luc3RhbGwoImh0dHBzOi8vcHlwaS5weXRob24u
b3JnL3BhY2thZ2VzL2NiLzI2LzE0NGRiYzI4ZDFmNDBlMzkyZjhhMGNiZWU3NzFiYTYyNGE2MTAx
N2YwMTZjNzdhZDg4NDI0ZDg0YjIzMC9tb3pwcm9jZXNzLTAuMjUudGFyLmd6I21kNT0wN2EwNGU2
YWUxYTcwNTcwNWU0YjQ0OTY5ZmU3YTE4MiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAibW96cHJvY2Vzcy0wLjI1L21venByb2Nlc3MiKQorCiAgICAgZGVmIF9pbnN0YWxsX3B5bGlu
dChzZWxmKToKICAgICAgICAgc2VsZi5fZW5zdXJlX2F1dG9pbnN0YWxsZWRfZGlyX2lzX2luX3N5
c19wYXRoKCkKICAgICAgICAgaWYgKG5vdCBzZWxmLl9mcy5leGlzdHMoc2VsZi5fZnMuam9pbihf
QVVUT0lOU1RBTExFRF9ESVIsICJweWxpbnQiKSkgb3IKZGlmZiAtLWdpdCBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvd2ViZHJpdmVyX3Rlc3RzL19faW5pdF9fLnB5IGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS93ZWJkcml2ZXJfdGVzdHMvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAuLmVmNjViZWU1YmI3Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJfdGVzdHMvX19pbml0X18ucHkKQEAgLTAsMCArMSBA
QAorIyBSZXF1aXJlZCBmb3IgUHl0aG9uIHRvIHNlYXJjaCB0aGlzIGRpcmVjdG9yeSBmb3IgbW9k
dWxlIGZpbGVzCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZlcl90
ZXN0cy93ZWJkcml2ZXJfZHJpdmVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93ZWJkcml2
ZXJfdGVzdHMvd2ViZHJpdmVyX2RyaXZlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMC4uOWVlMmI0NGRmYjQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3dlYmRyaXZlcl90ZXN0cy93ZWJkcml2ZXJfZHJpdmVyLnB5CkBAIC0wLDAgKzEs
NDkgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCisjCisjIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyMgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworIyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyMgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKKyMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworY2xhc3MgV2ViRHJpdmVyKG9iamVjdCk6Cisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQpOgorICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAor
CisgICAgZGVmIGJpbmFyeV9wYXRoKHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRl
ZEVycm9yCisKKyAgICBkZWYgYnJvd3Nlcl9uYW1lKHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJ
bXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgY2FwYWJpbGl0aWVzKHNlbGYpOgorICAgICAgICBy
YWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKworX2RyaXZlcnMgPSB7fQorCisKK2RlZiByZWdp
c3Rlcl9kcml2ZXIocG9ydF9uYW1lLCBkcml2ZXJfY2xzKToKKyAgICBfZHJpdmVyc1twb3J0X25h
bWVdID0gZHJpdmVyX2NscworCisKK2RlZiBjcmVhdGVfZHJpdmVyKHBvcnQpOgorICAgIGlmIHBv
cnQubmFtZSgpIG5vdCBpbiBfZHJpdmVyczoKKyAgICAgICAgX19pbXBvcnRfXygnd2Via2l0cHku
d2ViZHJpdmVyX3Rlc3RzLndlYmRyaXZlcl9kcml2ZXJfJXMnICUgcG9ydC5uYW1lKCkpCisKKyAg
ICByZXR1cm4gX2RyaXZlcnNbcG9ydC5uYW1lKCldKHBvcnQpCmRpZmYgLS1naXQgYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZlcl90ZXN0cy93ZWJkcml2ZXJfZHJpdmVyX2d0ay5weSBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvd2ViZHJpdmVyX3Rlc3RzL3dlYmRyaXZlcl9kcml2ZXJf
Z3RrLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40OTllNmY4YTgy
NQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvd2ViZHJpdmVyX3Rl
c3RzL3dlYmRyaXZlcl9kcml2ZXJfZ3RrLnB5CkBAIC0wLDAgKzEsNDQgQEAKKyMgQ29weXJpZ2h0
IChDKSAyMDE3IElnYWxpYSBTLkwuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJl
IG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisj
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyMgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworIyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04KKyMgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMK
KyMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisKK2Zyb20gd2Via2l0cHkud2ViZHJpdmVyX3Rlc3RzLndlYmRyaXZlcl9kcml2ZXIg
aW1wb3J0IFdlYkRyaXZlciwgcmVnaXN0ZXJfZHJpdmVyCisKKworY2xhc3MgV2ViRHJpdmVyR3Rr
KFdlYkRyaXZlcik6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCk6CisgICAgICAgIHN1
cGVyKFdlYkRyaXZlckd0aywgc2VsZikuX19pbml0X18ocG9ydCkKKworICAgIGRlZiBiaW5hcnlf
cGF0aChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3BvcnQuX2J1aWxkX3BhdGgoJ2Jpbics
ICdXZWJLaXRXZWJEcml2ZXInKQorCisgICAgZGVmIGJyb3dzZXJfbmFtZShzZWxmKToKKyAgICAg
ICAgcmV0dXJuICdNaW5pQnJvd3NlcicKKworICAgIGRlZiBjYXBhYmlsaXRpZXMoc2VsZik6Cisg
ICAgICAgIHJldHVybiB7J2Jyb3dzZXJOYW1lJzogc2VsZi5icm93c2VyX25hbWUoKSwKKyAgICAg
ICAgICAgICAgICAnd2Via2l0Z3RrOmJyb3dzZXJPcHRpb25zJzogeworICAgICAgICAgICAgICAg
ICAgICAnYmluYXJ5Jzogc2VsZi5fcG9ydC5fYnVpbGRfcGF0aCgnYmluJywgJ01pbmlCcm93c2Vy
JyksCisgICAgICAgICAgICAgICAgICAgICdhcmdzJzogWyctLWF1dG9tYXRpb24nLCAnLS1qYXZh
c2NyaXB0LWNhbi1vcGVuLXdpbmRvd3MtYXV0b21hdGljYWxseT10cnVlJ119fQorCisKK3JlZ2lz
dGVyX2RyaXZlcignZ3RrJywgV2ViRHJpdmVyR3RrKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS93ZWJkcml2ZXJfdGVzdHMvd2ViZHJpdmVyX3Rlc3RfcmVzdWx0LnB5IGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJfdGVzdHMvd2ViZHJpdmVyX3Rlc3RfcmVzdWx0
LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41ZTUwN2NmYmZlYgot
LS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvd2ViZHJpdmVyX3Rlc3Rz
L3dlYmRyaXZlcl90ZXN0X3Jlc3VsdC5weQpAQCAtMCwwICsxLDM1IEBACisjIENvcHlyaWdodCAo
QykgMjAxNyBJZ2FsaWEgUy5MLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBt
ZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorIyBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisjIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisjIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyMgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OCisjIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisj
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorCitpbXBvcnQgb3MKKworCitjbGFzcyBXZWJEcml2ZXJUZXN0UmVzdWx0KG9iamVjdCk6
CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGVzdF9wcmVmaXgsIHRlc3QsIHN0YXR1cywgbWVz
c2FnZSwgYmFja3RyYWNlPU5vbmUpOgorICAgICAgICBzZWxmLnRlc3QgPSBvcy5wYXRoLmpvaW4o
dGVzdF9wcmVmaXgsIHRlc3QpCisgICAgICAgIHNlbGYuc3RhdHVzID0gc3RhdHVzCisgICAgICAg
IHNlbGYubWVzc2FnZSA9IG1lc3NhZ2UKKyAgICAgICAgc2VsZi5iYWNrdHJhY2UgPSBiYWNrdHJh
Y2UKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICI8JXMuJXMgJXMg
JXM+IiAlIChzZWxmLl9fbW9kdWxlX18sIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBzZWxmLnRl
c3QsIHNlbGYuc3RhdHVzKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93ZWJk
cml2ZXJfdGVzdHMvd2ViZHJpdmVyX3Rlc3RfcnVubmVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS93ZWJkcml2ZXJfdGVzdHMvd2ViZHJpdmVyX3Rlc3RfcnVubmVyLnB5Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42NDY2MWVhOTJiYQotLS0gL2Rldi9udWxsCisr
KyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvd2ViZHJpdmVyX3Rlc3RzL3dlYmRyaXZlcl90ZXN0
X3J1bm5lci5weQpAQCAtMCwwICsxLDc1IEBACisjIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEg
Uy5MLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorIyBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisjIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisjIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyMgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisj
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisjIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQg
bG9nZ2luZworCitmcm9tIHdlYmtpdHB5LndlYmRyaXZlcl90ZXN0cy53ZWJkcml2ZXJfdGVzdF9y
dW5uZXJfdzNjIGltcG9ydCBXZWJEcml2ZXJUZXN0UnVubmVyVzNDCisKK19sb2cgPSBsb2dnaW5n
LmdldExvZ2dlcihfX25hbWVfXykKKworCitjbGFzcyBXZWJEcml2ZXJUZXN0UnVubmVyKG9iamVj
dCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCk6CisgICAgICAgIHNlbGYuX3BvcnQg
PSBwb3J0CisgICAgICAgIF9sb2cuaW5mbygnVXNpbmcgcG9ydCAlcycgJSBzZWxmLl9wb3J0Lm5h
bWUoKSkKKyAgICAgICAgX2xvZy5pbmZvKCdUZXN0IGNvbmZpZ3VyYXRpb246ICVzJyAlIHNlbGYu
X3BvcnQudGVzdF9jb25maWd1cmF0aW9uKCkpCisgICAgICAgIF9sb2cuaW5mbygnVXNpbmcgZGlz
cGxheSBzZXJ2ZXIgJXMnICUgKHNlbGYuX3BvcnQuX2Rpc3BsYXlfc2VydmVyKSkKKworICAgICAg
ICBzZWxmLl9kaXNwbGF5X2RyaXZlciA9IHNlbGYuX3BvcnQuY3JlYXRlX2RyaXZlcih3b3JrZXJf
bnVtYmVyPTAsIG5vX3RpbWVvdXQ9VHJ1ZSkuX21ha2VfZHJpdmVyKHBpeGVsX3Rlc3RzPUZhbHNl
KQorICAgICAgICBpZiBub3Qgc2VsZi5fZGlzcGxheV9kcml2ZXIuY2hlY2tfZHJpdmVyKHNlbGYu
X3BvcnQpOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJGYWlsZWQgdG8gY2hlY2sg
ZHJpdmVyICVzIiAlIHNlbGYuX2Rpc3BsYXlfZHJpdmVyLl9fY2xhc3NfXy5fX25hbWVfXykKKyAg
ICAgICAgc2VsZi5fcnVubmVyID0gV2ViRHJpdmVyVGVzdFJ1bm5lclczQyhzZWxmLl9wb3J0LCBz
ZWxmLl9kaXNwbGF5X2RyaXZlcikKKworICAgIGRlZiBydW4oc2VsZiwgdGVzdHM9W10pOgorICAg
ICAgICBydW5uZXJfdGVzdHMgPSBzZWxmLl9ydW5uZXIuY29sbGVjdF90ZXN0cyh0ZXN0cykKKyAg
ICAgICAgaWYgcnVubmVyX3Rlc3RzOgorICAgICAgICAgICAgX2xvZy5pbmZvKCdDb2xsZWN0ZWQg
JWQgdGVzdHMnICUgbGVuKHJ1bm5lcl90ZXN0cykpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5f
cnVubmVyLnJ1bihydW5uZXJfdGVzdHMpCisKKyAgICAgICAgX2xvZy5pbmZvKCdObyB0ZXN0cyBm
b3VuZCcpCisgICAgICAgIHJldHVybiAwCisKKyAgICBkZWYgcHJpbnRfcmVzdWx0cyhzZWxmKToK
KyAgICAgICAgcmVzdWx0cyA9IHt9CisgICAgICAgIHBhc3NlZF9jb3VudCA9IDAKKyAgICAgICAg
ZmFpbHVyZXNfY291bnQgPSAwCisgICAgICAgIGZvciByZXN1bHQgaW4gc2VsZi5fcnVubmVyLnJl
c3VsdHMoKToKKyAgICAgICAgICAgIGlmIHJlc3VsdC5zdGF0dXMgPT0gJ1BBU1MnOgorICAgICAg
ICAgICAgICAgIHBhc3NlZF9jb3VudCArPSAxCisgICAgICAgICAgICBlbGlmIHJlc3VsdC5zdGF0
dXMgPT0gJ0ZBSUwnOgorICAgICAgICAgICAgICAgIHJlc3VsdHMuc2V0ZGVmYXVsdChyZXN1bHQu
c3RhdHVzLCBbXSkuYXBwZW5kKHJlc3VsdC50ZXN0KQorICAgICAgICAgICAgICAgIGZhaWx1cmVz
X2NvdW50ICs9IDEKKworICAgICAgICBfbG9nLmluZm8oJycpCisKKyAgICAgICAgaWYgbm90IHJl
c3VsdHM6CisgICAgICAgICAgICBfbG9nLmluZm8oJ0FsbCB0ZXN0cyBydW4gYXMgZXhwZWN0ZWQn
KQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgX2xvZy5pbmZvKCclZCB0ZXN0cyByYW4g
YXMgZXhwZWN0ZWQsICVkIGRpZG5cJ3RcbicgJSAocGFzc2VkX2NvdW50LCBmYWlsdXJlc19jb3Vu
dCkpCisKKyAgICAgICAgaWYgJ0ZBSUwnIGluIHJlc3VsdHM6CisgICAgICAgICAgICBmYWlsZWQg
PSByZXN1bHRzWydGQUlMJ10KKyAgICAgICAgICAgIF9sb2cuaW5mbygnVW5leHBlY3RlZCBmYWls
dXJlcyAoJWQpJyAlIGxlbihmYWlsZWQpKQorICAgICAgICAgICAgZm9yIHRlc3QgaW4gZmFpbGVk
OgorICAgICAgICAgICAgICAgIF9sb2cuaW5mbygnICAlcycgJSB0ZXN0KQpkaWZmIC0tZ2l0IGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJfdGVzdHMvd2ViZHJpdmVyX3Rlc3RfcnVu
bmVyX3czYy5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvd2ViZHJpdmVyX3Rlc3RzL3dlYmRy
aXZlcl90ZXN0X3J1bm5lcl93M2MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLjZjOWFiMTRkNmYxCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS93ZWJkcml2ZXJfdGVzdHMvd2ViZHJpdmVyX3Rlc3RfcnVubmVyX3czYy5weQpAQCAtMCww
ICsxLDEwOSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4KKyMKKyMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorIyBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworIyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisjIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorIyBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
IyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUworIyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBv
cworaW1wb3J0IHN5cworaW1wb3J0IHRpbWUKKworZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVt
LmZpbGVzeXN0ZW0gaW1wb3J0IEZpbGVTeXN0ZW0KK2Zyb20gd2Via2l0cHkuY29tbW9uLndlYmtp
dF9maW5kZXIgaW1wb3J0IFdlYktpdEZpbmRlcgorZnJvbSB3ZWJraXRweS53ZWJkcml2ZXJfdGVz
dHMud2ViZHJpdmVyX3czY19leGVjdXRvciBpbXBvcnQgV2ViRHJpdmVyVzNDRXhlY3V0b3IKK2Zy
b20gd2Via2l0cHkud2ViZHJpdmVyX3Rlc3RzLndlYmRyaXZlcl9kcml2ZXIgaW1wb3J0IGNyZWF0
ZV9kcml2ZXIKK2Zyb20gd2Via2l0cHkud2ViZHJpdmVyX3Rlc3RzLndlYmRyaXZlcl90ZXN0X3Jl
c3VsdCBpbXBvcnQgV2ViRHJpdmVyVGVzdFJlc3VsdAorZnJvbSB3ZWJraXRweS53ZWJkcml2ZXJf
dGVzdHMud2ViZHJpdmVyX3czY193ZWJfc2VydmVyIGltcG9ydCBXZWJEcml2ZXJXM0NXZWJTZXJ2
ZXIKKworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCisKK2NsYXNzIFdlYkRy
aXZlclRlc3RSdW5uZXJXM0Mob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0
LCBkaXNwbGF5X2RyaXZlcik6CisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CisgICAgICAgIHNl
bGYuX2Rpc3BsYXlfZHJpdmVyID0gZGlzcGxheV9kcml2ZXIKKyAgICAgICAgc2VsZi5fZHJpdmVy
ID0gY3JlYXRlX2RyaXZlcihzZWxmLl9wb3J0KQorICAgICAgICBfbG9nLmluZm8oJ1VzaW5nIGRy
aXZlciBhdCAlcycgJSAoc2VsZi5fZHJpdmVyLmJpbmFyeV9wYXRoKCkpKQorICAgICAgICBfbG9n
LmluZm8oJ0Jyb3dzZXI6ICVzJyAlIChzZWxmLl9kcml2ZXIuYnJvd3Nlcl9uYW1lKCkpKQorCisg
ICAgICAgIHNlbGYuX3Jlc3VsdHMgPSBbXQorICAgICAgICBzZWxmLl9zZXJ2ZXIgPSBXZWJEcml2
ZXJXM0NXZWJTZXJ2ZXIoc2VsZi5fcG9ydCkKKworICAgIGRlZiBfdGVzdHNfZGlyKHNlbGYpOgor
ICAgICAgICByZXR1cm4gV2ViS2l0RmluZGVyKHNlbGYuX3BvcnQuaG9zdC5maWxlc3lzdGVtKS5w
YXRoX2Zyb21fd2Via2l0X2Jhc2UoJ1dlYkRyaXZlclRlc3RzJykKKworICAgIGRlZiBjb2xsZWN0
X3Rlc3RzKHNlbGYsIHRlc3RzPVtdKToKKyAgICAgICAgcmVsYXRpdmVfdGVzdHNfZGlyID0gb3Mu
cGF0aC5qb2luKCdpbXBvcnRlZCcsICd3M2MnLCAnd2ViZHJpdmVyJywgJ3Rlc3RzJykKKyAgICAg
ICAgdzNjX3Rlc3RzID0gW10KKyAgICAgICAgaWYgbm90IHRlc3RzOgorICAgICAgICAgICAgdGVz
dHMgPSBbcmVsYXRpdmVfdGVzdHNfZGlyXQorICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0czoKKyAg
ICAgICAgICAgIGlmIG5vdCB0ZXN0LnN0YXJ0c3dpdGgocmVsYXRpdmVfdGVzdHNfZGlyKToKKyAg
ICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgdGVzdF9wYXRoID0gb3MucGF0aC5q
b2luKHNlbGYuX3Rlc3RzX2RpcigpLCB0ZXN0KQorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2Rp
cih0ZXN0X3BhdGgpOgorICAgICAgICAgICAgICAgIHczY190ZXN0cy5leHRlbmQoc2VsZi5fc2Nh
bl9kaXJlY3RvcnkodGVzdF9wYXRoKSkKKyAgICAgICAgICAgIGVsaWYgc2VsZi5faXNfdGVzdCh0
ZXN0X3BhdGgpOgorICAgICAgICAgICAgICAgIHczY190ZXN0cy5hcHBlbmQodGVzdF9wYXRoKQor
ICAgICAgICByZXR1cm4gdzNjX3Rlc3RzCisKKyAgICBkZWYgX2lzX3Rlc3Qoc2VsZiwgdGVzdCk6
CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZSh0ZXN0KToKKyAgICAgICAgICAgIHJldHVy
biBGYWxzZQorICAgICAgICBpZiBvcy5wYXRoLnNwbGl0ZXh0KHRlc3QpWzFdICE9ICcucHknOgor
ICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIG9zLnBhdGguYmFzZW5hbWUodGVz
dCkgaW4gWydjb25mdGVzdC5weScsICdfX2luaXRfXy5weSddOgorICAgICAgICAgICAgcmV0dXJu
IEZhbHNlCisgICAgICAgIGlmIG9zLnBhdGguZGlybmFtZSh0ZXN0KSA9PSAnc3VwcG9ydCc6Cisg
ICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBf
c2Nhbl9kaXJlY3Rvcnkoc2VsZiwgZGlyZWN0b3J5KToKKyAgICAgICAgdGVzdHMgPSBbXQorICAg
ICAgICBmb3IgcGF0aCBpbiBzZWxmLl9wb3J0Lmhvc3QuZmlsZXN5c3RlbS5maWxlc191bmRlcihk
aXJlY3RvcnkpOgorICAgICAgICAgICAgaWYgc2VsZi5faXNfdGVzdChwYXRoKToKKyAgICAgICAg
ICAgICAgICB0ZXN0cy5hcHBlbmQocGF0aCkKKyAgICAgICAgcmV0dXJuIHRlc3RzCisKKyAgICBk
ZWYgcnVuKHNlbGYsIHRlc3RzPVtdKToKKyAgICAgICAgc2VsZi5fc2VydmVyLnN0YXJ0KCkKKwor
ICAgICAgICBleGVjdXRvciA9IFdlYkRyaXZlclczQ0V4ZWN1dG9yKHNlbGYuX2RyaXZlciwgc2Vs
Zi5fc2VydmVyLCBzZWxmLl9kaXNwbGF5X2RyaXZlcikKKyAgICAgICAgZXhlY3V0b3Iuc2V0dXAo
KQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0czoKKyAgICAgICAg
ICAgICAgICB0ZXN0X25hbWUgPSBvcy5wYXRoLnJlbHBhdGgodGVzdCwgc2VsZi5fdGVzdHNfZGly
KCkpCisgICAgICAgICAgICAgICAgaGFybmVzc19yZXN1bHQsIHRlc3RfcmVzdWx0cyA9IGV4ZWN1
dG9yLnJ1bih0ZXN0KQorICAgICAgICAgICAgICAgIGlmIGhhcm5lc3NfcmVzdWx0WzBdICE9ICdP
Syc6CisgICAgICAgICAgICAgICAgICAgIF9sb2cuZXJyb3IoIkZhaWxlZCB0byBydW4gdGVzdCAl
czogJXMiICUgKHRlc3RfbmFtZSwgaGFybmVzc19yZXN1bHRbMV0pKQorICAgICAgICAgICAgICAg
IGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2FkZF9yZXN1bHRzKG9zLnBhdGguZGly
bmFtZSh0ZXN0X25hbWUpLCB0ZXN0X3Jlc3VsdHMpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAg
ICAgICBleGVjdXRvci50ZWFyZG93bigpCisgICAgICAgICAgICBzZWxmLl9zZXJ2ZXIuc3RvcCgp
CisKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9yZXN1bHRzKQorCisgICAgZGVmIF9hZGRfcmVz
dWx0cyhzZWxmLCB0ZXN0X3ByZWZpeCwgcmVzdWx0cyk6CisgICAgICAgIHNlbGYuX3Jlc3VsdHMu
ZXh0ZW5kKFtXZWJEcml2ZXJUZXN0UmVzdWx0KHRlc3RfcHJlZml4LCAqcmVzdWx0KSBmb3IgcmVz
dWx0IGluIHJlc3VsdHNdKQorCisgICAgZGVmIHJlc3VsdHMoc2VsZik6CisgICAgICAgIHJldHVy
biBzZWxmLl9yZXN1bHRzCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3dlYmRy
aXZlcl90ZXN0cy93ZWJkcml2ZXJfdzNjX2V4ZWN1dG9yLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS93ZWJkcml2ZXJfdGVzdHMvd2ViZHJpdmVyX3czY19leGVjdXRvci5weQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZDZjYmRmMzQxYTcKLS0tIC9kZXYvbnVsbAor
KysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZlcl90ZXN0cy93ZWJkcml2ZXJfdzNj
X2V4ZWN1dG9yLnB5CkBAIC0wLDAgKzEsMTM4IEBACisjIENvcHlyaWdodCAoQykgMjAxNyBJZ2Fs
aWEgUy5MLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorIyBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisjIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisjIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyMgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
CisjIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisjIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBv
cnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgc3lzCisKK2Zyb20gd2Via2l0cHkuY29tbW9u
LnN5c3RlbS5maWxlc3lzdGVtIGltcG9ydCBGaWxlU3lzdGVtCitmcm9tIHdlYmtpdHB5LmNvbW1v
bi53ZWJraXRfZmluZGVyIGltcG9ydCBXZWJLaXRGaW5kZXIKK2ltcG9ydCB3ZWJraXRweS50aGly
ZHBhcnR5LmF1dG9pbnN0YWxsZWQubW96bG9nCitpbXBvcnQgd2Via2l0cHkudGhpcmRwYXJ0eS5h
dXRvaW5zdGFsbGVkLm1venByb2Nlc3MKK2Zyb20gbW96bG9nIGltcG9ydCBzdHJ1Y3R1cmVkbG9n
CisKK3czY190b29sc19kaXIgPSBXZWJLaXRGaW5kZXIoRmlsZVN5c3RlbSgpKS5wYXRoX2Zyb21f
d2Via2l0X2Jhc2UoJ1dlYkRyaXZlclRlc3RzJywgJ2ltcG9ydGVkJywgJ3czYycsICd0b29scycp
CisKKworZGVmIF9lbnN1cmVfZGlyZWN0b3J5X2luX3BhdGgoZGlyZWN0b3J5KToKKyAgICBpZiBu
b3QgZGlyZWN0b3J5IGluIHN5cy5wYXRoOgorICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgZGly
ZWN0b3J5KQorX2Vuc3VyZV9kaXJlY3RvcnlfaW5fcGF0aChvcy5wYXRoLmpvaW4odzNjX3Rvb2xz
X2RpciwgJ3B5dGVzdCcpKQorX2Vuc3VyZV9kaXJlY3RvcnlfaW5fcGF0aChvcy5wYXRoLmpvaW4o
dzNjX3Rvb2xzX2RpciwgJ3dlYmRyaXZlcicpKQorX2Vuc3VyZV9kaXJlY3RvcnlfaW5fcGF0aChv
cy5wYXRoLmpvaW4odzNjX3Rvb2xzX2RpciwgJ3dwdHJ1bm5lcicpKQorX2Vuc3VyZV9kaXJlY3Rv
cnlfaW5fcGF0aChvcy5wYXRoLmpvaW4odzNjX3Rvb2xzX2RpciwgIndlYmRyaXZlciIpKQorCitm
cm9tIHdwdHJ1bm5lci5leGVjdXRvcnMuYmFzZSBpbXBvcnQgV2RzcGVjRXhlY3V0b3IsIFdlYkRy
aXZlclByb3RvY29sCitmcm9tIHdwdHJ1bm5lci53ZWJkcml2ZXJfc2VydmVyIGltcG9ydCBXZWJE
cml2ZXJTZXJ2ZXIKKworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCisKK2Ns
YXNzIE1lc3NhZ2VMb2dnZXIob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXNz
YWdlX2Z1bmMpOgorICAgICAgICBzZWxmLm5hbWUgPSAnV2ViS2l0IFdlYkRyaXZlciBXUFQgbG9n
Z2VyJworICAgICAgICBzZWxmLnNlbmRfbWVzc2FnZSA9IG1lc3NhZ2VfZnVuYworCisgICAgZGVm
IF9sb2dfZGF0YShzZWxmLCBhY3Rpb24sICoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5zZW5kX21l
c3NhZ2UoJ2xvZycsIGFjdGlvbiwga3dhcmdzKQorCisgICAgZGVmIHByb2Nlc3Nfb3V0cHV0KHNl
bGYsIHByb2Nlc3MsIGRhdGEsIGNvbW1hbmQpOgorICAgICAgICBzZWxmLl9sb2dfZGF0YSgncHJv
Y2Vzc19vdXRwdXQnLCBwcm9jZXNzPXByb2Nlc3MsIGRhdGE9ZGF0YSwgY29tbWFuZD1jb21tYW5k
KQorCisKK2NsYXNzIFRlc3RSdW5uZXIob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxm
KToKKyAgICAgICAgc2VsZi5sb2dnZXIgPSBNZXNzYWdlTG9nZ2VyKHNlbGYuc2VuZF9tZXNzYWdl
KQorICAgICAgICBzdHJ1Y3R1cmVkbG9nLnNldF9kZWZhdWx0X2xvZ2dlcihzZWxmLmxvZ2dlcikK
KworICAgIGRlZiBzZW5kX21lc3NhZ2Uoc2VsZiwgY29tbWFuZCwgKmFyZ3MpOgorICAgICAgICBp
ZiBjb21tYW5kID09ICdsb2cnOgorICAgICAgICAgICAgc2VsZi5fbG9nKCphcmdzKQorCisgICAg
ZGVmIF9sb2coc2VsZiwgbGV2ZWwsIGRldGFpbHMpOgorICAgICAgICBpZiBsZXZlbCA9PSAncHJv
Y2Vzc19vdXRwdXQnOgorICAgICAgICAgICAgc2VsZi5fcHJvY2Vzc19vdXRwdXQoZGV0YWlsc1sn
cHJvY2VzcyddLCBkZXRhaWxzWydjb21tYW5kJ10sIGRldGFpbHNbJ2RhdGEnXSkKKyAgICAgICAg
ICAgIHJldHVybgorCisgICAgICAgIGlmIG5vdCAnbWVzc2FnZScgaW4gZGV0YWlsczoKKyAgICAg
ICAgICAgIHJldHVybgorICAgICAgICBtZXNzYWdlID0gZGV0YWlsc1snbWVzc2FnZSddCisgICAg
ICAgIGlmIGxldmVsID09ICdpbmZvJzoKKyAgICAgICAgICAgIF9sb2cuaW5mbyhtZXNzYWdlKQor
ICAgICAgICBlbGlmIGxldmVsID09ICdkZWJ1Zyc6CisgICAgICAgICAgICBfbG9nLmRlYnVnKG1l
c3NhZ2UpCisgICAgICAgIGVsaWYgbGV2ZWwgPT0gJ2Vycm9yJzoKKyAgICAgICAgICAgIF9sb2cu
ZXJyb3IobWVzc2FnZSkKKyAgICAgICAgZWxpZiBsZXZlbCA9PSAnY3JpdGljaWFsJzoKKyAgICAg
ICAgICAgIF9sb2cuY3JpdGljYWwobWVzc2FnZSkKKyAgICAgICAgZWxpZiBsZXZlbCA9PSAnd2Fy
bmluZyc6CisgICAgICAgICAgICBfbG9nLndhcm5pbmcobWVzc2FnZSkKKworICAgIGRlZiBfcHJv
Y2Vzc19vdXRwdXQoc2VsZiwgcGlkLCBjb21tYW5kLCBkYXRhKToKKyAgICAgICAgX2xvZy5kZWJ1
ZygnKCVzOiVkKTogJXMnICUgKG9zLnBhdGguYmFzZW5hbWUoY29tbWFuZCkuc3BsaXQoKVswXSwg
cGlkLCBkYXRhKSkKKworCitkZWYgX2xvZ19mdW5jKGxldmVsX25hbWUpOgorICAgIGRlZiBsb2co
c2VsZiwgbWVzc2FnZSk6CisgICAgICAgIHNlbGYuX2xvZ19kYXRhKGxldmVsX25hbWUubG93ZXIo
KSwgbWVzc2FnZT1tZXNzYWdlKQorICAgIGxvZy5fX25hbWVfXyA9IHN0cihsZXZlbF9uYW1lKS5s
b3dlcigpCisgICAgcmV0dXJuIGxvZworCisjIENyZWF0ZSBhbGwgdGhlIG1ldGhvZHMgb24gU3Ry
dWN0dXJlZExvZyBmb3IgZGVidWcgbGV2ZWxzLgorZm9yIGxldmVsX25hbWUgaW4gc3RydWN0dXJl
ZGxvZy5sb2dfbGV2ZWxzOgorICAgIHNldGF0dHIoTWVzc2FnZUxvZ2dlciwgbGV2ZWxfbmFtZS5s
b3dlcigpLCBfbG9nX2Z1bmMobGV2ZWxfbmFtZSkpCisKKworY2xhc3MgV2ViS2l0RHJpdmVyU2Vy
dmVyKFdlYkRyaXZlclNlcnZlcik6CisgICAgZGVmYXVsdF9iYXNlX3BhdGggPSAnLycKKyAgICB0
ZXN0X2VudiA9IE5vbmUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2dnZXIsIGJpbmFyeT1O
b25lLCBwb3J0PU5vbmUsIGJhc2VfcGF0aD0nJywgYXJncz1Ob25lKToKKyAgICAgICAgV2ViRHJp
dmVyU2VydmVyLl9faW5pdF9fKHNlbGYsIGxvZ2dlciwgYmluYXJ5LCBwb3J0PXBvcnQsIGJhc2Vf
cGF0aD1iYXNlX3BhdGgsIGFyZ3M9YXJncywgZW52PXNlbGYudGVzdF9lbnYpCisKKyAgICBkZWYg
bWFrZV9jb21tYW5kKHNlbGYpOgorICAgICAgICByZXR1cm4gW3NlbGYuYmluYXJ5LCAnLS1wb3J0
PSVzJyAlIHN0cihzZWxmLnBvcnQpXSArIHNlbGYuX2FyZ3MKKworCitjbGFzcyBXZWJLaXREcml2
ZXJQcm90b2NvbChXZWJEcml2ZXJQcm90b2NvbCk6CisgICAgc2VydmVyX2NscyA9IFdlYktpdERy
aXZlclNlcnZlcgorCisKK2NsYXNzIFdlYkRyaXZlclczQ0V4ZWN1dG9yKFdkc3BlY0V4ZWN1dG9y
KToKKyAgICBwcm90b2NvbF9jbHMgPSBXZWJLaXREcml2ZXJQcm90b2NvbAorCisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIGRyaXZlciwgc2VydmVyLCBkaXNwbGF5X2RyaXZlcik6CisgICAgICAgIFdl
YktpdERyaXZlclNlcnZlci50ZXN0X2VudiA9IGRpc3BsYXlfZHJpdmVyLl9zZXR1cF9lbnZpcm9u
X2Zvcl90ZXN0KCkKKyAgICAgICAgc2VydmVyX2NvbmZpZyA9IHsnaG9zdCc6IHNlcnZlci5ob3N0
KCksICdwb3J0cyc6IHsnaHR0cCc6IFtzdHIoc2VydmVyLnBvcnQoKSldfX0KKyAgICAgICAgV2Rz
cGVjRXhlY3V0b3IuX19pbml0X18oc2VsZiwgZHJpdmVyLmJyb3dzZXJfbmFtZSgpLCBzZXJ2ZXJf
Y29uZmlnLCBkcml2ZXIuYmluYXJ5X3BhdGgoKSwgTm9uZSwgY2FwYWJpbGl0aWVzPWRyaXZlci5j
YXBhYmlsaXRpZXMoKSkKKworICAgIGRlZiBzZXR1cChzZWxmKToKKyAgICAgICAgc2VsZi5ydW5u
ZXIgPSBUZXN0UnVubmVyKCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5zZXR1cChzZWxmLnJ1bm5l
cikKKworICAgIGRlZiB0ZWFyZG93bihzZWxmKToKKyAgICAgICAgc2VsZi5wcm90b2NvbC50ZWFy
ZG93bigpCisKKyAgICBkZWYgcnVuKHNlbGYsIHBhdGgpOgorICAgICAgICByZXR1cm4gc2VsZi5k
b193ZHNwZWMoc2VsZi5wcm90b2NvbC5zZXNzaW9uX2NvbmZpZywgcGF0aCwgMjUpCmRpZmYgLS1n
aXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZlcl90ZXN0cy93ZWJkcml2ZXJfdzNj
X3dlYl9zZXJ2ZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZlcl90ZXN0cy93
ZWJkcml2ZXJfdzNjX3dlYl9zZXJ2ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAuLjU1MTViMDAxMTYxCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS93ZWJkcml2ZXJfdGVzdHMvd2ViZHJpdmVyX3czY193ZWJfc2VydmVyLnB5CkBAIC0w
LDAgKzEsMTM0IEBACisjIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLgorIworIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
IyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisj
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5EIEFOWQorIyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisjIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisjIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyMgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisjIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisjIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgZXJybm8KK2ltcG9ydCBq
c29uCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgc29ja2V0CitpbXBvcnQgdGVt
cGZpbGUKK2ltcG9ydCB0aW1lCisKK2Zyb20gd2Via2l0cHkuY29tbW9uLndlYmtpdF9maW5kZXIg
aW1wb3J0IFdlYktpdEZpbmRlcgorCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18p
CisKKworY2xhc3MgV2ViRHJpdmVyVzNDV2ViU2VydmVyKG9iamVjdCk6CisKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgcG9ydCk6CisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CisgICAgICAgIHNl
bGYuX25hbWUgPSAid3B0d2QiCisKKyAgICAgICAgbGF5b3V0X3Jvb3QgPSBzZWxmLl9wb3J0Lmxh
eW91dF90ZXN0c19kaXIoKQorICAgICAgICBzZWxmLl9sYXlvdXRfZG9jX3Jvb3QgPSBvcy5wYXRo
LmpvaW4obGF5b3V0X3Jvb3QsICdpbXBvcnRlZCcsICd3M2MnLCAnd2ViLXBsYXRmb3JtLXRlc3Rz
JykKKyAgICAgICAgc2VsZi5fcHJvY2VzcyA9IE5vbmUKKyAgICAgICAgc2VsZi5fcGlkID0gTm9u
ZQorCisgICAgICAgIHRtcGRpciA9IHRlbXBmaWxlLmdldHRlbXBkaXIoKQorICAgICAgICBpZiBz
ZWxmLl9wb3J0Lmhvc3QucGxhdGZvcm0uaXNfbWFjKCk6CisgICAgICAgICAgICB0bXBkaXIgPSAn
L3RtcCcKKyAgICAgICAgc2VsZi5fcnVudGltZV9wYXRoID0gb3MucGF0aC5qb2luKHRtcGRpciwg
IldlYktpdFdlYkRyaXZlclRlc3RzIikKKyAgICAgICAgc2VsZi5fcG9ydC5ob3N0LmZpbGVzeXN0
ZW0ubWF5YmVfbWFrZV9kaXJlY3Rvcnkoc2VsZi5fcnVudGltZV9wYXRoKQorCisgICAgICAgIHNl
bGYuX3BpZF9maWxlID0gb3MucGF0aC5qb2luKHNlbGYuX3J1bnRpbWVfcGF0aCwgJyVzLnBpZCcg
JSBzZWxmLl9uYW1lKQorICAgICAgICBzZWxmLl9zZXJ2ZXJzX2ZpbGUgPSBvcy5wYXRoLmpvaW4o
c2VsZi5fcnVudGltZV9wYXRoLCAnJXNfc2VydmVycy5qc29uJyAlIChzZWxmLl9uYW1lKSkKKwor
ICAgICAgICAjIEZJWE1FOiBXZSB1c2UgdGhlIHJ1bnRpbWUgcGF0aCBmb3Igbm93IGZvciBsb2cg
b3V0cHV0LCBzaW5jZSB3ZSBkb24ndCBoYXZlIGEgcmVzdWx0cyBkaXJlY3RvcnkgeWV0LgorICAg
ICAgICBzZWxmLl9vdXRwdXRfbG9nX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5fcnVudGltZV9w
YXRoLCAnJXNfcHJvY2Vzc19sb2cub3V0LnR4dCcgJSAoc2VsZi5fbmFtZSkpCisKKyAgICBkZWYg
X3dhaXRfZm9yX3NlcnZlcihzZWxmLCB3YWl0X3NlY3M9MjAsIHNsZWVwX3NlY3M9MSk6CisgICAg
ICAgIGRlZiBjaGVja19wb3J0KGhvc3QsIHBvcnQpOgorICAgICAgICAgICAgcyA9IHNvY2tldC5z
b2NrZXQoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHMuY29ubmVjdCgoaG9z
dCwgcG9ydCkpCisgICAgICAgICAgICBleGNlcHQgSU9FcnJvciwgZToKKyAgICAgICAgICAgICAg
ICBpZiBlLmVycm5vIG5vdCBpbiAoZXJybm8uRUNPTk5SRUZVU0VELCBlcnJuby5FQ09OTlJFU0VU
KToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFs
c2UKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgcy5jbG9zZSgpCisgICAg
ICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQor
ICAgICAgICB3aGlsZSB0aW1lLnRpbWUoKSAtIHN0YXJ0X3RpbWUgPCB3YWl0X3NlY3M6CisgICAg
ICAgICAgICBpZiBzZWxmLl9wb3J0Ll9leGVjdXRpdmUuY2hlY2tfcnVubmluZ19waWQoc2VsZi5f
cGlkKSBhbmQgY2hlY2tfcG9ydChzZWxmLl9zZXJ2ZXJfaG9zdCwgc2VsZi5fc2VydmVyX3BvcnQp
OgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICB0aW1lLnNsZWVwKHNs
ZWVwX3NlY3MpCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIHN0YXJ0KHNlbGYpOgor
ICAgICAgICBhc3NlcnQgbm90IHNlbGYuX3BpZCwgJyVzIHNlcnZlciBpcyBhbHJlYWR5IHJ1bm5p
bmcnICUgc2VsZi5fbmFtZQorCisgICAgICAgICMgU3RvcCBhbnkgc3RhbGUgc2VydmVycyBsZWZ0
IG92ZXIgZnJvbSBwcmV2aW91cyBpbnN0YW5jZXMuCisgICAgICAgIGlmIHNlbGYuX3BvcnQuaG9z
dC5maWxlc3lzdGVtLmV4aXN0cyhzZWxmLl9waWRfZmlsZSk6CisgICAgICAgICAgICB0cnk6Cisg
ICAgICAgICAgICAgICAgc2VsZi5fcGlkID0gaW50KHNlbGYuX3BvcnQuaG9zdC5maWxlc3lzdGVt
LnJlYWRfdGV4dF9maWxlKHNlbGYuX3BpZF9maWxlKSkKKyAgICAgICAgICAgICAgICBzZWxmLnN0
b3AoKQorICAgICAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBVbmljb2RlRGVjb2RlRXJyb3Ip
OgorICAgICAgICAgICAgICAgICMgVGhlc2UgY291bGQgYmUgcmFpc2VkIGlmIHRoZSBwaWQgZmls
ZSBpcyBjb3JydXB0LgorICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQuaG9zdC5maWxlc3lzdGVt
LnJlbW92ZShzZWxmLl9waWRfZmlsZSkKKyAgICAgICAgICAgICAgICBzZWxmLl9waWQgPSBOb25l
CisKKyAgICAgICAgX2xvZy5kZWJ1ZygnQ29weWluZyBXZWJEcml2ZXIgV1BUIHNlcnZlciBjb25m
aWcuanNvbicpCisgICAgICAgIGRvY19yb290ID0gb3MucGF0aC5qb2luKFdlYktpdEZpbmRlcihz
ZWxmLl9wb3J0Lmhvc3QuZmlsZXN5c3RlbSkucGF0aF9mcm9tX3dlYmtpdF9iYXNlKCdXZWJEcml2
ZXJUZXN0cycpLCAnaW1wb3J0ZWQnLCAndzNjJykKKyAgICAgICAgY29uZmlnX2ZpbGVuYW1lID0g
b3MucGF0aC5qb2luKGRvY19yb290LCAnY29uZmlnLmpzb24nKQorICAgICAgICBjb25maWdfanNv
biA9IHNlbGYuX3BvcnQuaG9zdC5maWxlc3lzdGVtLnJlYWRfdGV4dF9maWxlKGNvbmZpZ19maWxl
bmFtZSkucmVwbGFjZSgiJURPQ19ST09UJSIsIGRvY19yb290KQorICAgICAgICBzZWxmLl9wb3J0
Lmhvc3QuZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUob3MucGF0aC5qb2luKHNlbGYuX2xheW91
dF9kb2Nfcm9vdCwgJ2NvbmZpZy5qc29uJyksIGNvbmZpZ19qc29uKQorICAgICAgICBjb25maWcg
PSBqc29uLmxvYWRzKGNvbmZpZ19qc29uKQorICAgICAgICBzZWxmLl9zZXJ2ZXJfaG9zdCA9IGNv
bmZpZ1snaG9zdCddCisgICAgICAgIHNlbGYuX3NlcnZlcl9wb3J0ID0gY29uZmlnWydwb3J0cydd
WydodHRwJ11bMF0KKworICAgICAgICBzZWxmLl93c291dCA9IHNlbGYuX3BvcnQuaG9zdC5maWxl
c3lzdGVtLm9wZW5fdGV4dF9maWxlX2Zvcl93cml0aW5nKHNlbGYuX291dHB1dF9sb2dfcGF0aCkK
KyAgICAgICAgbGF1bmNoZXIgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKG9zLnBhdGgu
ZGlybmFtZShfX2ZpbGVfXyksICcuLicsICdsYXlvdXRfdGVzdHMnLCAnc2VydmVycycsICd3ZWJf
cGxhdGZvcm1fdGVzdF9sYXVuY2hlci5weScpKQorICAgICAgICBjbWQgPSBbJ3B5dGhvbicsIGxh
dW5jaGVyLCBzZWxmLl9zZXJ2ZXJzX2ZpbGVdCisgICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBzZWxm
Ll9wb3J0Ll9leGVjdXRpdmUucG9wZW4oY21kLCBjd2Q9c2VsZi5fbGF5b3V0X2RvY19yb290LCBz
aGVsbD1GYWxzZSwgc3RkaW49c2VsZi5fcG9ydC5fZXhlY3V0aXZlLlBJUEUsIHN0ZG91dD1zZWxm
Ll93c291dCwgc3RkZXJyPXNlbGYuX3dzb3V0KQorICAgICAgICBzZWxmLl9waWQgPSBzZWxmLl9w
cm9jZXNzLnBpZAorICAgICAgICBzZWxmLl9wb3J0Lmhvc3QuZmlsZXN5c3RlbS53cml0ZV90ZXh0
X2ZpbGUoc2VsZi5fcGlkX2ZpbGUsIHN0cihzZWxmLl9waWQpKQorCisgICAgICAgIGlmIG5vdCBz
ZWxmLl93YWl0X2Zvcl9zZXJ2ZXIoKToKKyAgICAgICAgICAgIF9sb2cuZXJyb3IoJ1dQVCBTZXJ2
ZXIgcHJvY2VzcyBleGl0ZWQgcHJlbWF0dXJlbHkgd2l0aCBzdGF0dXMgY29kZSAlcycgJSBzZWxm
Ll9wcm9jZXNzLnJldHVybmNvZGUpCisgICAgICAgICAgICBzZWxmLnN0b3AoKQorICAgICAgICAg
ICAgcmFpc2UgUnVudGltZUVycm9yCisKKyAgICAgICAgX2xvZy5pbmZvKCdXZWJEcml2ZXIgV1BU
IHNlcnZlciBsaXN0ZW5pbmcgYXQgaHR0cDovLyVzOiVzLycgJSAoc2VsZi5fc2VydmVyX2hvc3Qs
IHNlbGYuX3NlcnZlcl9wb3J0KSkKKworICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICBfbG9n
LmRlYnVnKCdDbGVhbmluZyBXZWJEcml2ZXIgV1BUIHNlcnZlciBjb25maWcuanNvbicpCisgICAg
ICAgIHNlbGYuX3BvcnQuaG9zdC5maWxlc3lzdGVtLnJlbW92ZShvcy5wYXRoLmpvaW4oc2VsZi5f
bGF5b3V0X2RvY19yb290LCAnY29uZmlnLmpzb24nKSkKKyAgICAgICAgaWYgc2VsZi5fcHJvY2Vz
czoKKyAgICAgICAgICAgIHNlbGYuX3Byb2Nlc3MuY29tbXVuaWNhdGUoaW5wdXQ9J1xuJykKKyAg
ICAgICAgaWYgc2VsZi5fd3NvdXQ6CisgICAgICAgICAgICBzZWxmLl93c291dC5jbG9zZSgpCisg
ICAgICAgICAgICBzZWxmLl93c291dCA9IE5vbmUKKyAgICAgICAgaWYgc2VsZi5fcGlkIGFuZCBz
ZWxmLl9wb3J0Ll9leGVjdXRpdmUuY2hlY2tfcnVubmluZ19waWQoc2VsZi5fcGlkKToKKyAgICAg
ICAgICAgIF9sb2cud2FybmluZygnQ2Fubm90IHN0b3AgJXMgc2VydmVyIG5vcm1hbGx5LicgJSAo
c2VsZi5fbmFtZSkpCisgICAgICAgICAgICBfbG9nLndhcm5pbmcoJ0tpbGxpbmcgc2VydmVyIGxh
dW5jaGVyIHByb2Nlc3MgKHBpZDogJWQpLicgJSAoc2VsZi5fcGlkKSkKKyAgICAgICAgICAgIHNl
bGYuX3BvcnQuX2V4ZWN1dGl2ZS5raWxsX3Byb2Nlc3Moc2VsZi5fcGlkKQorICAgICAgICBzZWxm
Ll9wb3J0Lmhvc3QuZmlsZXN5c3RlbS5yZW1vdmUoc2VsZi5fcGlkX2ZpbGUpCisgICAgICAgIHNl
bGYuX3BpZCA9IE5vbmUKKworICAgIGRlZiBob3N0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2Vs
Zi5fc2VydmVyX2hvc3QKKworICAgIGRlZiBwb3J0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2Vs
Zi5fc2VydmVyX3BvcnQKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL0NoYW5nZUxvZyBiL1dl
YkRyaXZlclRlc3RzL0NoYW5nZUxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uNGJhNTA3NjE4ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9DaGFu
Z2VMb2cKQEAgLTAsMCArMSwxNCBAQAorMjAxNy0wOS0yMSAgQ2FybG9zIEdhcmNpYSBDYW1wb3Mg
IDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgV2ViRHJpdmVyOiBBZGQgc3VwcG9ydCB0
byBpbXBvcnQgYW5kIHJ1biBXM0MgdGVzdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3NzMwNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEFkZCBqc29uIGZpbGUgdXNlZCBieSB0aGUgaW1wb3J0ZXIgYW5k
IHRoZSByZXN1bHQgb2YgcnVubmluZyB0aGUgaW1wb3J0ZXIuCisKKyAgICAgICAgKiBpbXBvcnRl
ZC93M2MvaW1wb3J0ZXIuanNvbjogQWRkZWQuCisgICAgICAgICogaW1wb3J0ZWQvdzNjL3Rvb2xz
L3B5dGVzdC86IEFkZGVkLgorICAgICAgICAqIGltcG9ydGVkL3czYy90b29scy93ZWJkcml2ZXIv
OiBBZGRlZC4KKyAgICAgICAgKiBpbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyLzogQWRkZWQu
CisgICAgICAgICogaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci86IEFkZGVkLgpkaWZmIC0tZ2l0IGEv
V2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL2ltcG9ydGVyLmpzb24gYi9XZWJEcml2ZXJUZXN0
cy9pbXBvcnRlZC93M2MvaW1wb3J0ZXIuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMC4uNDRiYWNhNjQyMWIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0
cy9pbXBvcnRlZC93M2MvaW1wb3J0ZXIuanNvbgpAQCAtMCwwICsxLDE1IEBACit7CisgICAgInJl
cG9zaXRvcnkiOiAiaHR0cHM6Ly9naXRodWIuY29tL3czYy93ZWItcGxhdGZvcm0tdGVzdHMuZ2l0
IiwKKyAgICAicmV2aXNpb24iOiAiM2FlZWY3MWJiOTk3YjNjMjg1MzBmYzhmNzc4ZTYyYTAxODEy
ZjU0MSIsCisgICAgInBhdGhzX3RvX2ltcG9ydCI6IFsKKyAgICAgICAgInRvb2xzL3B5dGVzdCIs
CisgICAgICAgICJ0b29scy93ZWJkcml2ZXIiLAorICAgICAgICAidG9vbHMvd3B0cnVubmVyIiwK
KyAgICAgICAgIndlYmRyaXZlciIKKyAgICBdLAorICAgICJwYXRoc190b19za2lwIjogWworICAg
ICAgICAidG9vbHMvcHl0ZXN0L2RvYyIsCisgICAgICAgICJ0b29scy9weXRlc3QvdGVzdGluZyIs
CisgICAgICAgICJ0b29scy93cHRydW5uZXIvdGVzdCIKKyAgICBdCit9CmRpZmYgLS1naXQgYS9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0Ly5jb3ZlcmFnZXJjIGIvV2Vi
RHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC8uY292ZXJhZ2VyYwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMjdkYjY0ZTA5YzEKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0Ly5jb3ZlcmFn
ZXJjCkBAIC0wLDAgKzEsNyBAQAorW3J1bl0KK29taXQgPSAKKyAgICAjIHN0YW5kbG9uZXRlbXBs
YXRlIGlzIHJlYWQgZHluYW1pY2FsbHkgYW5kIHRlc3RlZCBieSB0ZXN0X2dlbnNjcmlwdAorICAg
ICpzdGFuZGFsb25ldGVtcGxhdGUucHkKKyAgICAjIG9sZGludGVycHJldCBjb3VsZCBiZSByZW1v
dmVkLCBhcyBpdCBpcyBubyBsb25nZXIgdXNlZCBpbiBweTI2KworICAgICpvbGRpbnRlcnByZXQu
cHkKKyAgICB2ZW5kb3JlZF9wYWNrYWdlcwpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1w
b3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC8uZ2l0YXR0cmlidXRlcyBiL1dlYkRyaXZlclRlc3RzL2lt
cG9ydGVkL3czYy90b29scy9weXRlc3QvLmdpdGF0dHJpYnV0ZXMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAuLjI0MmQzZGEwZDc0Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vi
RHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC8uZ2l0YXR0cmlidXRlcwpAQCAt
MCwwICsxIEBACitDSEFOR0VMT0cgICAgbWVyZ2U9dW5pb24KZGlmZiAtLWdpdCBhL1dlYkRyaXZl
clRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvLmdpdGh1Yi9JU1NVRV9URU1QTEFURS5t
ZCBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvLmdpdGh1Yi9JU1NV
RV9URU1QTEFURS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYmM2
MmU4YTNmN2QKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mv
dG9vbHMvcHl0ZXN0Ly5naXRodWIvSVNTVUVfVEVNUExBVEUubWQKQEAgLTAsMCArMSw4IEBACitU
aGFua3MgZm9yIHN1Ym1pdHRpbmcgYW4gaXNzdWUhCisKK0hlcmUncyBhIHF1aWNrIGNoZWNrbGlz
dCBpbiB3aGF0IHRvIGluY2x1ZGU6CisKKy0gWyBdIEluY2x1ZGUgYSBkZXRhaWxlZCBkZXNjcmlw
dGlvbiBvZiB0aGUgYnVnIG9yIHN1Z2dlc3Rpb24KKy0gWyBdIGBwaXAgbGlzdGAgb2YgdGhlIHZp
cnR1YWwgZW52aXJvbm1lbnQgeW91IGFyZSB1c2luZworLSBbIF0gcHkudGVzdCBhbmQgb3BlcmF0
aW5nIHN5c3RlbSB2ZXJzaW9ucworLSBbIF0gTWluaW1hbCBleGFtcGxlIGlmIHBvc3NpYmxlCmRp
ZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0Ly5naXRo
dWIvUFVMTF9SRVFVRVNUX1RFTVBMQVRFLm1kIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNj
L3Rvb2xzL3B5dGVzdC8uZ2l0aHViL1BVTExfUkVRVUVTVF9URU1QTEFURS5tZApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZDA5ZWRjZTQzZDMKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0Ly5naXRodWIvUFVM
TF9SRVFVRVNUX1RFTVBMQVRFLm1kCkBAIC0wLDAgKzEsOCBAQAorVGhhbmtzIGZvciBzdWJtaXR0
aW5nIGEgUFIsIHlvdXIgY29udHJpYnV0aW9uIGlzIHJlYWxseSBhcHByZWNpYXRlZCEKKworSGVy
ZSdzIGEgcXVpY2sgY2hlY2tsaXN0IHRoYXQgc2hvdWxkIGJlIHByZXNlbnQgaW4gUFJzOgorCist
IFsgXSBUYXJnZXQ6IGZvciBidWcgb3IgZG9jIGZpeGVzLCB0YXJnZXQgYG1hc3RlcmA7IGZvciBu
ZXcgZmVhdHVyZXMsIHRhcmdldCBgZmVhdHVyZXNgCistIFsgXSBNYWtlIHN1cmUgdG8gaW5jbHVk
ZSBvbmUgb3IgbW9yZSB0ZXN0cyBmb3IgeW91ciBjaGFuZ2UKKy0gWyBdIEFkZCB5b3Vyc2VsZiB0
byBgQVVUSE9SU2AKKy0gWyBdIEFkZCBhIG5ldyBlbnRyeSB0byB0aGUgYENIQU5HRUxPR2AgKGNo
b29zZSBhbnkgb3BlbiBwb3NpdGlvbiB0byBhdm9pZCBtZXJnZSBjb25mbGljdHMgd2l0aCBvdGhl
ciBQUnMpIApkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5
dGVzdC8uZ2l0aWdub3JlIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVz
dC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lNDM1
NWI4NTljYwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90
b29scy9weXRlc3QvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDM0IEBACisjIEF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGJ5IGBoZ2ltcG9ydHN2bmAKKy5zdm4KKy5oZ3N2bgorCisjIElnbm9yZSBsb2Nh
bCB2aXJ0dWFsZW52cworbGliLworYmluLworaW5jbHVkZS8KKy5QeXRob24vCisKKyMgVGhlc2Ug
bGluZXMgYXJlIHN1Z2dlc3RlZCBhY2NvcmRpbmcgdG8gdGhlIHN2bjppZ25vcmUgcHJvcGVydHkK
KyMgRmVlbCBmcmVlIHRvIGVuYWJsZSB0aGVtIGJ5IHVuY29tbWVudGluZyB0aGVtCisqLnB5Ywor
Ki5weW8KKyouc3dwCisqLmNsYXNzCisqLm9yaWcKKyp+CisKKy5lZ2dzLworCitkb2MvKi9fYnVp
bGQKK2J1aWxkLworZGlzdC8KKyouZWdnLWluZm8KK2lzc3VlLworZW52LworLmVudi8KKzNyZHBh
cnR5LworLnRveAorLmNhY2hlCisuY292ZXJhZ2UKKy5yb3BlcHJvamVjdAorLmlkZWEKZGlmZiAt
LWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvLnRyYXZpcy55
bWwgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0Ly50cmF2aXMueW1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zYThmMzZlOTVmOAotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3Qv
LnRyYXZpcy55bWwKQEAgLTAsMCArMSw0MCBAQAorc3VkbzogZmFsc2UKK2xhbmd1YWdlOiBweXRo
b24KK3B5dGhvbjoKKyAgICAtICczLjUnCisjIGNvbW1hbmQgdG8gaW5zdGFsbCBkZXBlbmRlbmNp
ZXMKK2luc3RhbGw6ICJwaXAgaW5zdGFsbCAtVSB0b3giCisjICMgY29tbWFuZCB0byBydW4gdGVz
dHMKK2VudjoKKyAgbWF0cml4OgorICAgICMgY292ZXJhbGxzIGlzIG5vdCBsaXN0ZWQgaW4gdG94
J3MgZW52bGlzdCwgYnV0IHNob3VsZCBydW4gaW4gdHJhdmlzCisgICAgLSBURVNURU5WPWNvdmVy
YWxscworICAgICMgbm90ZTogcGxlYXNlIHVzZSAidG94IC0tbGlzdGVudnMiIHRvIHBvcHVsYXRl
IHRoZSBidWlsZCBtYXRyaXggYmVsb3cKKyAgICAtIFRFU1RFTlY9bGludGluZworICAgIC0gVEVT
VEVOVj1weTI2CisgICAgLSBURVNURU5WPXB5MjcKKyAgICAtIFRFU1RFTlY9cHkzMworICAgIC0g
VEVTVEVOVj1weTM0CisgICAgLSBURVNURU5WPXB5MzUKKyAgICAtIFRFU1RFTlY9cHlweQorICAg
IC0gVEVTVEVOVj1weTI3LXBleHBlY3QKKyAgICAtIFRFU1RFTlY9cHkyNy14ZGlzdAorICAgIC0g
VEVTVEVOVj1weTI3LXRyaWFsCisgICAgLSBURVNURU5WPXB5MzUtcGV4cGVjdAorICAgIC0gVEVT
VEVOVj1weTM1LXhkaXN0CisgICAgLSBURVNURU5WPXB5MzUtdHJpYWwKKyAgICAtIFRFU1RFTlY9
cHkyNy1ub2J5dGUKKyAgICAtIFRFU1RFTlY9ZG9jdGVzdGluZworICAgIC0gVEVTVEVOVj1weTI3
LWN4ZnJlZXplCisKK3NjcmlwdDogdG94IC0tcmVjcmVhdGUgLWUgJFRFU1RFTlYKKworbm90aWZp
Y2F0aW9uczoKKyAgaXJjOgorICAgIGNoYW5uZWxzOgorICAgICAgLSAiY2hhdC5mcmVlbm9kZS5u
ZXQjcHl0ZXN0IgorICAgIG9uX3N1Y2Nlc3M6IGNoYW5nZQorICAgIG9uX2ZhaWx1cmU6IGNoYW5n
ZQorICAgIHNraXBfam9pbjogdHJ1ZQorICBlbWFpbDoKKyAgICAtIHB5dGVzdC1jb21taXRAcHl0
aG9uLm9yZwpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5
dGVzdC9BVVRIT1JTIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9B
VVRIT1JTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kZmMwYTU0MmVj
NQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9w
eXRlc3QvQVVUSE9SUwpAQCAtMCwwICsxLDg3IEBACitIb2xnZXIgS3Jla2VsLCBob2xnZXIgYXQg
bWVybGludXggZXUKK21lcmxpbnV4IEdtYkgsIEdlcm1hbnksIG9mZmljZSBhdCBtZXJsaW51eCBl
dQorCitDb250cmlidXRvcnMgaW5jbHVkZTo6CisKK0FiaGlqZWV0IEthc3VyZGUKK0FuYXRvbHkg
QnViZW5rb2ZmCitBbmRyZWFzIFplaWRsZXIKK0FuZHkgRnJlZWxhbmQKK0FudGhvbiB2YW4gZGVy
IE5ldXQKK0FybWluIFJpZ28KK0Fyb24gQ3Vyem9uCitBdml2IFBhbGl2b2RhCitCZW5qYW1pbiBQ
ZXRlcnNvbgorQm9iIElwcG9saXRvCitCcmlhbiBEb3JzZXkKK0JyaWFuIE9ra2VuCitCcmlhbm5h
IExhdWdoZXIKK0JydW5vIE9saXZlaXJhCitDYXJsIEZyaWVkcmljaCBCb2x6CitDaGFybGVzIENs
b3VkCitDaHJpcyBMYW1iCitDaHJpc3RpYW4gVGhldW5lcnQKK0NocmlzdGlhbiBUaXNtZXIKK0No
cmlzdG9waGVyIEdpbGxpbmcKK0RhbmllbCBHcmFuYQorRGFuaWVsIEhhaGxlcgorRGFuaWVsIE51
cmkKK0RhdmUgSHVudAorRGF2aWQgTW9ocgorRGF2aWQgVmllcnJhCitFZGlzb24gR3VzdGF2byBN
dWVuegorRWR1YXJkbyBTY2hldHRpbm8KK0VuZHJlIEdhbGFjemkKK0VsaXphdmV0YSBTaGFzaGtv
dmEKK0VyaWMgSHVuc2JlcmdlcgorRXJpYyBTaWVnZXJtYW4KK0VyaWsgTS4gQnJheQorRmxvcmlh
biBCcnVoaW4KK0Zsb3JpcyBCcnV5bm9vZ2hlCitHYWJyaWVsIFJlaXMKK0dlb3JneSBEeXVsZGlu
CitHcmFoYW0gSG9ybGVyCitHcmlnIEdoZW9yZ2hpdQorR3VpZG8gV2VzZG9ycAorSGFyYWxkIEFy
bWluIE1hc3NhCitJYW4gQmlja2luZworSmFhcCBCcm9la2h1aXplbgorSmFuIEJhbHN0ZXIKK0ph
bm5lIFZhbmhhbGEKK0phc29uIFIuIENvb21icworSm9zaHVhIEJyb25zb24KK0p1cmtvIEdvc3Bv
ZG5ldGnEhworS2F0YXJ6eW5hIEphY2hpbQorS2V2aW4gQ294CitMZWUgS2FtZW50c2t5CitMdWth
cyBCZWRuYXIKK01hY2llayBGaWphbGtvd3NraQorTWFobworTWFyYyBTY2hsYWljaAorTWFyayBB
YnJhbW93aXR6CitNYXJrdXMgVW50ZXJ3YWRpdHplcgorTWFydGlqbiBGYWFzc2VuCitNYXR0IEJh
Y2htYW5uCitNaWNoYWVsIEFxdWlsaW5hCitNaWNoYWVsIEJpcnR3ZWxsCitNaWNoYWVsIERyb2V0
dGJvb20KK05pY29sYXMgRGVsYWJ5CitQaWV0ZXIgTXVsZGVyCitQaW90ciBCYW5hc3praWV3aWN6
CitQdW55YXNobG9rYSBCaXN3YWwKK1JhbGYgU2NobWl0dAorUmFwaGFlbCBQaWVyemluYQorUm9u
bnkgUGZhbm5zY2htaWR0CitSb3NzIExhd2xleQorUnlhbiBXb29kZW4KK1NhbXVlbGUgUGVkcm9u
aQorVG9tIFZpbmVyCitUcmV2b3IgQmVrb2xheQorV291dGVyIHZhbiBBY2tvb3kKK0RhdmlkIETD
rWF6LUJhcnF1ZXJvCitFcmljIEh1bnNiZXJnZXIKK1NpbW9uIEdvbWl6ZWxqCitSdXNzZWwgV2lu
ZGVyCitCZW4gV2ViYgorQWxleGVpIEtvemxlbm9rCitDYWwgTGVlbWluZwpkaWZmIC0tZ2l0IGEv
V2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9DSEFOR0VMT0cucnN0IGIv
V2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9DSEFOR0VMT0cucnN0Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mMThmNjQ2ZjAwOAotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvQ0hB
TkdFTE9HLnJzdApAQCAtMCwwICsxLDI1ODYgQEAKKzIuOS4xCis9PT09PQorCisqKkJ1ZyBGaXhl
cyoqCisKKyogSW1wcm92ZSBlcnJvciBtZXNzYWdlIHdoZW4gYSBwbHVnaW4gZmFpbHMgdG8gbG9h
ZC4KKyAgVGhhbmtzIGBAbmljb2RkZW11c2BfIGZvciB0aGUgUFIuCisKKyogRml4IChgIzExNzgg
PGh0dHBzOi8vZ2l0aHViLmNvbS9weXRlc3QtZGV2L3B5dGVzdC9pc3N1ZXMvMTE3OD5gXyk6Cisg
IGBgcHl0ZXN0LmZhaWxgYCB3aXRoIG5vbi1hc2NpaSBjaGFyYWN0ZXJzIHJhaXNlcyBhbiBpbnRl
cm5hbCBweXRlc3QgZXJyb3IuCisgIFRoYW5rcyBgQG5pY29kZGVtdXNgXyBmb3IgdGhlIFBSLgor
CisqIEZpeCAoYCM0NjlgXyk6IGp1bml0IHBhcnNlcyByZXBvcnQubm9kZWlkIGluY29ycmVjdGx5
LCB3aGVuIHBhcmFtcyBJRHMKKyAgY29udGFpbiBgYDo6YGAuIFRoYW5rcyBgQHRvbXZpbmVyYF8g
Zm9yIHRoZSBQUiAoYCMxNDMxYF8pLgorCisqIEZpeCAoYCM1NzggPGh0dHBzOi8vZ2l0aHViLmNv
bS9weXRlc3QtZGV2L3B5dGVzdC9pc3N1ZXMvNTc4PmBfKTogU3ludGF4RXJyb3JzCisgIGNvbnRh
aW5pbmcgbm9uLWFzY2lpIGxpbmVzIGF0IHRoZSBwb2ludCBvZiBmYWlsdXJlIGdlbmVyYXRlZCBh
biBpbnRlcm5hbAorICBweS50ZXN0IGVycm9yLgorICBUaGFua3MgYEBhc290dGlsZWBfIGZvciB0
aGUgcmVwb3J0IGFuZCBgQG5pY29kZGVtdXNgXyBmb3IgdGhlIFBSLgorCisqIEZpeCAoYCMxNDM3
YF8pOiBXaGVuIHBhc3NpbmcgaW4gYSBieXRlc3RyaW5nIHJlZ2V4IHBhdHRlcm4gdG8gcGFyYW1l
dGVyaXplCisgIGF0dGVtcHQgdG8gZGVjb2RlIGl0IGFzIHV0Zi04IGlnbm9yaW5nIGVycm9ycy4K
KworKiBGaXggKGAjNjQ5YF8pOiBwYXJhbWV0cml6ZWQgdGVzdCBub2RlcyBjYW5ub3QgYmUgc3Bl
Y2lmaWVkIHRvIHJ1biBvbiB0aGUgY29tbWFuZCBsaW5lLgorCisKKy4uIF8jMTQzNzogaHR0cHM6
Ly9naXRodWIuY29tL3B5dGVzdC1kZXYvcHl0ZXN0L2lzc3Vlcy8xNDM3CisuLiBfIzQ2OTogaHR0
cHM6Ly9naXRodWIuY29tL3B5dGVzdC1kZXYvcHl0ZXN0L2lzc3Vlcy80NjkKKy4uIF8jMTQzMTog
aHR0cHM6Ly9naXRodWIuY29tL3B5dGVzdC1kZXYvcHl0ZXN0L3B1bGwvMTQzMQorLi4gXyM2NDk6
IGh0dHBzOi8vZ2l0aHViLmNvbS9weXRlc3QtZGV2L3B5dGVzdC9pc3N1ZXMvNjQ5CisKKy4uIF9A
YXNvdHRpbGU6IGh0dHBzOi8vZ2l0aHViLmNvbS9hc290dGlsZQorCisKKzIuOS4wCis9PT09PQor
CisqKk5ldyBGZWF0dXJlcyoqCisKKyogTmV3IGBgcHl0ZXN0Lm1hcmsuc2tpcGBgIG1hcmssIHdo
aWNoIHVuY29uZGl0aW9uYWxseSBza2lwcyBtYXJrZWQgdGVzdHMuCisgIFRoYW5rcyBgQE1pY2hh
ZWxBcXVpbGluYWBfIGZvciB0aGUgY29tcGxldGUgUFIgKGAjMTA0MGBfKS4KKworKiBgYC0tZG9j
dGVzdC1nbG9iYGAgbWF5IG5vdyBiZSBwYXNzZWQgbXVsdGlwbGUgdGltZXMgaW4gdGhlIGNvbW1h
bmQtbGluZS4KKyAgVGhhbmtzIGBAamFiYF8gYW5kIGBAbmljb2RkZW11c2BfIGZvciB0aGUgUFIu
CisKKyogTmV3IGBgLXJwYGAgYW5kIGBgLXJQYGAgcmVwb3J0aW5nIG9wdGlvbnMgZ2l2ZSB0aGUg
c3VtbWFyeSBhbmQgZnVsbCBvdXRwdXQKKyAgb2YgcGFzc2luZyB0ZXN0cywgcmVzcGVjdGl2ZWx5
LiBUaGFua3MgdG8gYEBjb2Rld2FycmlvcjBgXyBmb3IgdGhlIFBSLgorCisqIGBgcHl0ZXN0Lm1h
cmsueGZhaWxgYCBub3cgaGFzIGEgYGBzdHJpY3RgYCBvcHRpb24sIHdoaWNoIG1ha2VzIGBgWFBB
U1NgYAorICB0ZXN0cyB0byBmYWlsIHRoZSB0ZXN0IHN1aXRlIChkZWZhdWx0aW5nIHRvIGBgRmFs
c2VgYCkuIFRoZXJlJ3MgYWxzbyBhCisgIGBgeGZhaWxfc3RyaWN0YGAgaW5pIG9wdGlvbiB0aGF0
IGNhbiBiZSB1c2VkIHRvIGNvbmZpZ3VyZSBpdCBwcm9qZWN0LXdpc2UuCisgIFRoYW5rcyBgQHJh
YmJiaXRgXyBmb3IgdGhlIHJlcXVlc3QgYW5kIGBAbmljb2RkZW11c2BfIGZvciB0aGUgUFIgKGAj
MTM1NWBfKS4KKworKiBgYFBhcnNlci5hZGRpbmlgYCBub3cgc3VwcG9ydHMgb3B0aW9ucyBvZiB0
eXBlIGBgYm9vbGBgLiAKKyAgVGhhbmtzIGBAbmljb2RkZW11c2BfIGZvciB0aGUgUFIuCisKKyog
TmV3IGBgQUxMT1dfQllURVNgYCBkb2N0ZXN0IG9wdGlvbi4gVGhpcyBzdHJpcHMgYGBiYGAgcHJl
Zml4ZXMgZnJvbSBieXRlIHN0cmluZ3MKKyAgaW4gZG9jdGVzdCBvdXRwdXQgKHNpbWlsYXIgdG8g
YGBBTExPV19VTklDT0RFYGApLgorICBUaGFua3MgYEBqYXJhY29gXyBmb3IgdGhlIHJlcXVlc3Qg
YW5kIGBAbmljb2RkZW11c2BfIGZvciB0aGUgUFIgKGAjMTI4N2BfKS4KKworKiBHaXZlIGEgaGlu
dCBvbiBgYEtleWJvYXJkSW50ZXJydXB0YGAgdG8gdXNlIHRoZSBgYC0tZnVsbHRyYWNlYGAgb3B0
aW9uIHRvIHNob3cgdGhlIGVycm9ycy4KKyAgRml4ZXMgYCMxMzY2YF8uCisgIFRoYW5rcyB0byBg
QGhwazQyYF8gZm9yIHRoZSByZXBvcnQgYW5kIGBAUm9ubnlQZmFubnNjaG1pZHRgXyBmb3IgdGhl
IFBSLgorCisqIENhdGNoIGBgSW5kZXhFcnJvcmBgIGV4Y2VwdGlvbnMgd2hlbiBnZXR0aW5nIGV4
Y2VwdGlvbiBzb3VyY2UgbG9jYXRpb24uIAorICBGaXhlcyBhIHB5dGVzdCBpbnRlcm5hbCBlcnJv
ciBmb3IgZHluYW1pY2FsbHkgZ2VuZXJhdGVkIGNvZGUgKGZpeHR1cmVzIGFuZCB0ZXN0cykKKyAg
d2hlcmUgc291cmNlIGxpbmVzIGFyZSBmYWtlIGJ5IGludGVudGlvbi4KKworKipDaGFuZ2VzKioK
KworKiAqKkltcG9ydGFudCoqOiBgcHkuY29kZSA8aHR0cDovL3B5bGliLnJlYWR0aGVkb2NzLm9y
Zy9lbi9sYXRlc3QvY29kZS5odG1sPmBfIGhhcyBiZWVuCisgIG1lcmdlZCBpbnRvIHRoZSBgYHB5
dGVzdGBgIHJlcG9zaXRvcnkgYXMgYGBweXRlc3QuX2NvZGVgYC4gVGhpcyBkZWNpc2lvbiAKKyAg
d2FzIG1hZGUgYmVjYXVzZSBgYHB5LmNvZGVgYCBoYWQgdmVyeSBmZXcgdXNlcyBvdXRzaWRlIGBg
cHl0ZXN0YGAgYW5kIHRoZSAKKyAgZmFjdCB0aGF0IGl0IHdhcyBpbiBhIGRpZmZlcmVudCByZXBv
c2l0b3J5IG1hZGUgaXQgZGlmZmljdWx0IHRvIGZpeCBidWdzIG9uIAorICBpdHMgY29kZSBpbiBh
IHRpbWVseSBtYW5uZXIuIFRoZSB0ZWFtIGhvcGVzIHdpdGggdGhpcyB0byBiZSBhYmxlIHRvIGJl
dHRlcgorICByZWZhY3RvciBvdXQgYW5kIGltcHJvdmUgdGhhdCBjb2RlLgorICBUaGlzIGNoYW5n
ZSBzaG91bGRuJ3QgYWZmZWN0IHVzZXJzLCBidXQgaXQgaXMgdXNlZnVsIHRvIGxldCB1c2VycyBh
d2FyZQorICBpZiB0aGV5IGVuY291bnRlciBhbnkgc3RyYW5nZSBiZWhhdmlvci4KKyAgCisgIEtl
ZXAgaW4gbWluZCB0aGF0IHRoZSBjb2RlIGZvciBgYHB5dGVzdC5fY29kZWBgIGlzICoqcHJpdmF0
ZSoqIGFuZCAKKyAgKipleHBlcmltZW50YWwqKiwgc28geW91IGRlZmluaXRlbHkgc2hvdWxkIG5v
dCBpbXBvcnQgaXQgZXhwbGljaXRseSEKKworICBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBvcmlnaW5h
bCBgYHB5LmNvZGVgYCBpcyBzdGlsbCBhdmFpbGFibGUgaW4gCisgIGBweWxpYiA8aHR0cDovL3B5
bGliLnJlYWR0aGVkb2NzLm9yZz5gXy4KKworKiBgYHB5dGVzdF9lbnRlcl9wZGJgYCBub3cgb3B0
aW9uYWxseSByZWNlaXZlcyB0aGUgcHl0ZXN0IGNvbmZpZyBvYmplY3QuCisgIFRoYW5rcyBgQG5p
Y29kZGVtdXNgXyBmb3IgdGhlIFBSLgorCisqIFJlbW92ZWQgY29kZSBhbmQgZG9jdW1lbnRhdGlv
biBmb3IgUHl0aG9uIDIuNSBvciBsb3dlciB2ZXJzaW9ucywKKyAgaW5jbHVkaW5nIHJlbW92YWwg
b2YgdGhlIG9ic29sZXRlIGBgX3B5dGVzdC5hc3NlcnRpb24ub2xkaW50ZXJwcmV0YGAgbW9kdWxl
LgorICBUaGFua3MgYEBuaWNvZGRlbXVzYF8gZm9yIHRoZSBQUiAoYCMxMjI2YF8pLgorCisqIENv
bXBhcmlzb25zIG5vdyBhbHdheXMgc2hvdyB1cCBpbiBmdWxsIHdoZW4gYGBDSWBgIG9yIGBgQlVJ
TERfTlVNQkVSYGAgaXMKKyAgZm91bmQgaW4gdGhlIGVudmlyb25tZW50LCBldmVuIHdoZW4gYGAt
dnZgYCBpc24ndCB1c2VkLgorICBUaGFua3MgYEBUaGUtQ29tcGlsZXJgXyBmb3IgdGhlIFBSLgor
CisqIGBgLS1sZmBgIGFuZCBgYC0tZmZgYCBub3cgc3VwcG9ydCBsb25nIG5hbWVzOiBgYC0tbGFz
dC1mYWlsZWRgYCBhbmQKKyAgYGAtLWZhaWxlZC1maXJzdGBgIHJlc3BlY3RpdmVseS4KKyAgVGhh
bmtzIGBATWljaGFlbEFxdWlsaW5hYF8gZm9yIHRoZSBQUi4KKworKiBBZGRlZCBleHBlY3RlZCBl
eGNlcHRpb25zIHRvIGBgcHl0ZXN0LnJhaXNlc2BgIGZhaWwgbWVzc2FnZS4KKworKiBDb2xsZWN0
aW9uIG9ubHkgZGlzcGxheXMgcHJvZ3Jlc3MgKCJjb2xsZWN0aW5nIFggaXRlbXMiKSB3aGVuIGlu
IGEgdGVybWluYWwuCisgIFRoaXMgYXZvaWRzIGNsdXR0ZXJpbmcgdGhlIG91dHB1dCB3aGVuIHVz
aW5nIGBgLS1jb2xvcj15ZXNgYCB0byBvYnRhaW4KKyAgY29sb3JzIGluIENJIGludGVncmF0aW9u
cyBzeXN0ZW1zIChgIzEzOTdgXykuCisKKyoqQnVnIEZpeGVzKioKKworKiBUaGUgYGAtc2BgIGFu
ZCBgYC1jYGAgb3B0aW9ucyBzaG91bGQgbm93IHdvcmsgdW5kZXIgYGB4ZGlzdGBgOworICBgYENv
bmZpZy5mcm9tZGljdGFyZ3NgYCBub3cgcmVwcmVzZW50cyBpdHMgaW5wdXQgbXVjaCBtb3JlIGZh
aXRoZnVsbHkuCisgIFRoYW5rcyB0byBgQGJ1a3pvcmBfIGZvciB0aGUgY29tcGxldGUgUFIgKGAj
NjgwYF8pLgorCisqIEZpeCAoYCMxMjkwYF8pOiBzdXBwb3J0IFB5dGhvbiAzLjUncyBgYEBgYCBv
cGVyYXRvciBpbiBhc3NlcnRpb24gcmV3cml0aW5nLgorICBUaGFua3MgYEBTaGlua2Vuam9lYF8g
Zm9yIHJlcG9ydCB3aXRoIHRlc3QgY2FzZSBhbmQgYEB0b212aW5lcmBfIGZvciB0aGUgUFIuCisK
KyogRml4IGZvcm1hdHRpbmcgdXRmLTggZXhwbGFuYXRpb24gbWVzc2FnZXMgKGAjMTM3OWBfKS4K
KyAgVGhhbmtzIGBAYmllcm5gXyBmb3IgdGhlIFBSLgorCisqIEZpeCBgdHJhY2ViYWNrIHN0eWxl
IGRvY3NgXyB0byBkZXNjcmliZSBhbGwgb2YgdGhlIGF2YWlsYWJsZSBvcHRpb25zCisgIChhdXRv
L2xvbmcvc2hvcnQvbGluZS9uYXRpdmUvbm8pLCB3aXRoIGBhdXRvYCBiZWluZyB0aGUgZGVmYXVs
dCBzaW5jZSB2Mi42LgorICBUaGFua3MgYEBoYWNrZWJyb3RgXyBmb3IgdGhlIFBSLgorCisqIEZp
eCAoYCMxNDIyYF8pOiBqdW5pdCByZWNvcmRfeG1sX3Byb3BlcnR5IGRvZXNuJ3QgYWxsb3cgbXVs
dGlwbGUgcmVjb3JkcworICB3aXRoIHNhbWUgbmFtZS4KKworLi4gX2B0cmFjZWJhY2sgc3R5bGUg
ZG9jc2A6IGh0dHBzOi8vcHl0ZXN0Lm9yZy9sYXRlc3QvdXNhZ2UuaHRtbCNtb2RpZnlpbmctcHl0
aG9uLXRyYWNlYmFjay1wcmludGluZworCisuLiBfIzE0MjI6IGh0dHBzOi8vZ2l0aHViLmNvbS9w
eXRlc3QtZGV2L3B5dGVzdC9pc3N1ZXMvMTQyMgorLi4gXyMxMzc5OiBodHRwczovL2dpdGh1Yi5j
b20vcHl0ZXN0LWRldi9weXRlc3QvaXNzdWVzLzEzNzkKKy4uIF8jMTM2NjogaHR0cHM6Ly9naXRo
dWIuY29tL3B5dGVzdC1kZXYvcHl0ZXN0L2lzc3Vlcy8xMzY2CisuLiBfIzEwNDA6IGh0dHBzOi8v
Z2l0aHViLmNvbS9weXRlc3QtZGV2L3B5dGVzdC9wdWxsLzEwNDAKKy4uIF8jNjgwOiBodHRwczov
L2dpdGh1Yi5jb20vcHl0ZXN0LWRldi9weXRlc3QvaXNzdWVzLzY4MAorLi4gXyMxMjg3OiBodHRw
czovL2dpdGh1Yi5jb20vcHl0ZXN0LWRldi9weXRlc3QvcHVsbC8xMjg3CisuLiBfIzEyMjY6IGh0
dHBzOi8vZ2l0aHViLmNvbS9weXRlc3QtZGV2L3B5dGVzdC9wdWxsLzEyMjYKKy4uIF8jMTI5MDog
aHR0cHM6Ly9naXRodWIuY29tL3B5dGVzdC1kZXYvcHl0ZXN0L3B1bGwvMTI5MAorLi4gXyMxMzU1
OiBodHRwczovL2dpdGh1Yi5jb20vcHl0ZXN0LWRldi9weXRlc3QvcHVsbC8xMzU1CisuLiBfIzEz
OTc6IGh0dHBzOi8vZ2l0aHViLmNvbS9weXRlc3QtZGV2L3B5dGVzdC9pc3N1ZXMvMTM5NworLi4g
X0BiaWVybjogaHR0cHM6Ly9naXRodWIuY29tL2JpZXJuCisuLiBfQE1pY2hhZWxBcXVpbGluYTog
aHR0cHM6Ly9naXRodWIuY29tL01pY2hhZWxBcXVpbGluYQorLi4gX0BidWt6b3I6IGh0dHBzOi8v
Z2l0aHViLmNvbS9idWt6b3IKKy4uIF9AaHBrNDI6IGh0dHBzOi8vZ2l0aHViLmNvbS9ocGs0Mgor
Li4gX0BuaWNvZGRlbXVzOiBodHRwczovL2dpdGh1Yi5jb20vbmljb2RkZW11cworLi4gX0BqYWI6
IGh0dHBzOi8vZ2l0aHViLmNvbS9qYWIKKy4uIF9AY29kZXdhcnJpb3IwOiBodHRwczovL2dpdGh1
Yi5jb20vY29kZXdhcnJpb3IwCisuLiBfQGphcmFjbzogaHR0cHM6Ly9naXRodWIuY29tL2phcmFj
bworLi4gX0BUaGUtQ29tcGlsZXI6IGh0dHBzOi8vZ2l0aHViLmNvbS9UaGUtQ29tcGlsZXIKKy4u
IF9AU2hpbmtlbmpvZTogaHR0cHM6Ly9naXRodWIuY29tL1NoaW5rZW5qb2UKKy4uIF9AdG9tdmlu
ZXI6IGh0dHBzOi8vZ2l0aHViLmNvbS90b212aW5lcgorLi4gX0BSb25ueVBmYW5uc2NobWlkdDog
aHR0cHM6Ly9naXRodWIuY29tL1Jvbm55UGZhbm5zY2htaWR0CisuLiBfQHJhYmJiaXQ6IGh0dHBz
Oi8vZ2l0aHViLmNvbS9yYWJiYml0CisuLiBfQGhhY2tlYnJvdDogaHR0cHM6Ly9naXRodWIuY29t
L2hhY2tlYnJvdAorCisyLjguNworPT09PT0KKworLSBmaXggIzEzMzg6IHVzZSBwcmVkaWN0YWJs
ZSBvYmplY3QgcmVzb2x1dGlvbiBmb3IgbW9ua2V5cGF0Y2gKKworMi44LjYKKz09PT09CisKKy0g
Zml4ICMxMjU5OiBhbGxvdyBmb3IgZG91YmxlIG5vZGVpZHMgaW4ganVuaXR4bWwsCisgIHRoaXMg
d2FzIGEgcmVncmVzc2lvbiBmYWlsaW5nIHBsdWdpbnMgY29tYmluYXRpb25zCisgIGxpa2UgcHl0
ZXN0LXBlcDggKyBweXRlc3QtZmxha2VzCisKKy0gV29ya2Fyb3VuZCBmb3IgZXhjZXB0aW9uIHRo
YXQgb2NjdXJzIGluIHB5cmVhZGxpbmUgd2hlbiB1c2luZworICBgYC0tcGRiYGAgd2l0aCBzdGFu
ZGFyZCBJL08gY2FwdHVyZSBlbmFibGVkLgorICBUaGFua3MgRXJpayBNLiBCcmF5IGZvciB0aGUg
UFIuCisKKy0gZml4ICM5MDA6IEJldHRlciBlcnJvciBtZXNzYWdlIGluIGNhc2UgdGhlIHRhcmdl
dCBvZiBhIGBgbW9ua2V5cGF0Y2hgYCBjYWxsCisgIHJhaXNlcyBhbiBgYEltcG9ydEVycm9yYGAu
CisKKy0gZml4ICMxMjkyOiBtb25rZXlwYXRjaCBjYWxscyAoc2V0YXR0ciwgc2V0ZW52LCBldGMu
KSBhcmUgbm93IE8oMSkuCisgIFRoYW5rcyBEYXZpZCBSLiBNYWNJdmVyIGZvciB0aGUgcmVwb3J0
IGFuZCBCcnVubyBPbGl2ZWlyYSBmb3IgdGhlIFBSLgorCistIGZpeCAjMTIyMzogY2FwdHVyZWQg
c3Rkb3V0IGFuZCBzdGRlcnIgYXJlIG5vdyBwcm9wZXJseSBkaXNwbGF5ZWQgYmVmb3JlIAorICBl
bnRlcmluZyBwZGIgd2hlbiBgYC0tcGRiYGAgaXMgdXNlZCBpbnN0ZWFkIG9mIGJlaW5nIHRocm93
biBhd2F5LgorICBUaGFua3MgQ2FsIExlZW1pbmcgZm9yIHRoZSBQUi4KKworLSBmaXggIzEzMDU6
IHB5dGVzdCB3YXJuaW5ncyBlbWl0dGVkIGR1cmluZyBgYHB5dGVzdF90ZXJtaW5hbF9zdW1tYXJ5
YGAgYXJlIG5vdworICBwcm9wZXJseSBkaXNwbGF5ZWQuCisgIFRoYW5rcyBJb25lbCBNYXJpZXMg
Q3Jpc3RpYW4gZm9yIHRoZSByZXBvcnQgYW5kIEJydW5vIE9saXZlaXJhIGZvciB0aGUgUFIuCisK
Ky0gZml4ICM2Mjg6IGZpeGVkIGludGVybmFsIFVuaWNvZGVEZWNvZGVFcnJvciB3aGVuIGRvY3Rl
c3RzIGNvbnRhaW4gdW5pY29kZS4KKyAgVGhhbmtzIEphc29uIFIuIENvb21icyBmb3IgdGhlIHJl
cG9ydCBhbmQgQnJ1bm8gT2xpdmVpcmEgZm9yIHRoZSBQUi4KKworLSBmaXggIzEzMzQ6IEFkZCBj
YXB0dXJlZCBzdGRvdXQgdG8galVuaXQgWE1MIHJlcG9ydCBvbiBzZXR1cCBlcnJvci4KKyAgVGhh
bmtzIEdlb3JneSBEeXVsZGluIGZvciB0aGUgUFIuCisKKworMi44LjUKKz09PT09CisKKy0gZml4
ICMxMjQzOiBmaXhlZCBpc3N1ZSB3aGVyZSBjbGFzcyBhdHRyaWJ1dGVzIGluamVjdGVkIGR1cmlu
ZyBjb2xsZWN0aW9uIGNvdWxkIGJyZWFrIHB5dGVzdC4KKyAgUFIgYnkgQWxleGVpIEtvemxlbm9r
LCB0aGFua3MgUm9ubnkgUGZhbm5zY2htaWR0IGFuZCBCcnVubyBPbGl2ZWlyYSBmb3IgdGhlIHJl
dmlldyBhbmQgaGVscC4KKworLSBmaXggIzEwNzQ6IHByZWNvbXB1dGUganVuaXR4bWwgY2h1bmtz
IGluc3RlYWQgb2Ygc3RvcmluZyB0aGUgd2hvbGUgdHJlZSBpbiBvYmplY3RzCisgIFRoYW5rcyBC
cnVubyBPbGl2ZWlyYSBmb3IgdGhlIHJlcG9ydCBhbmQgUm9ubnkgUGZhbm5zY2htaWR0IGZvciB0
aGUgUFIKKworLSBmaXggIzEyMzg6IGZpeCBgYHB5dGVzdC5kZXByZWNhdGVkX2NhbGwoKWBgIHJl
Y2VpdmluZyBtdWx0aXBsZSBhcmd1bWVudHMKKyAgKFJlZ3Jlc3Npb24gaW50cm9kdWNlZCBpbiAy
LjguNCkuIFRoYW5rcyBBbGV4IEdheW5vciBmb3IgdGhlIHJlcG9ydCBhbmQKKyAgQnJ1bm8gT2xp
dmVpcmEgZm9yIHRoZSBQUi4KKworCisyLjguNAorPT09PT0KKworLSBmaXggIzExOTA6IGBgZGVw
cmVjYXRlZF9jYWxsKClgYCBub3cgd29ya3Mgd2hlbiB0aGUgZGVwcmVjYXRlZAorICBmdW5jdGlv
biBoYXMgYmVlbiBhbHJlYWR5IGNhbGxlZCBieSBhbm90aGVyIHRlc3QgaW4gdGhlIHNhbWUKKyAg
bW9kdWxlLiBUaGFua3MgTWlraGFpbCBDaGVybnlraCBmb3IgdGhlIHJlcG9ydCBhbmQgQnJ1bm8g
T2xpdmVpcmEgZm9yIHRoZQorICBQUi4KKworLSBmaXggIzExOTg6IGBgLS1wYXN0ZWJpbmBgIG9w
dGlvbiBub3cgd29ya3Mgb24gUHl0aG9uIDMuIFRoYW5rcworICBNZWhkeSBLaG9zaG5vb2R5IGZv
ciB0aGUgUFIuCisKKy0gZml4ICMxMjE5OiBgYC0tcGFzdGViaW5gYCBub3cgd29ya3MgY29ycmVj
dGx5IHdoZW4gY2FwdHVyZWQgb3V0cHV0IGNvbnRhaW5zCisgIG5vbi1hc2NpaSBjaGFyYWN0ZXJz
LiBUaGFua3MgQnJ1bm8gT2xpdmVpcmEgZm9yIHRoZSBQUi4KKworLSBmaXggIzEyMDQ6IGFub3Ro
ZXIgZXJyb3Igd2hlbiBjb2xsZWN0aW5nIHdpdGggYSBuYXN0eSBfX2dldGF0dHJfXygpLgorICBU
aGFua3MgRmxvcmlhbiBCcnVoaW4gZm9yIHRoZSBQUi4KKworLSBmaXggdGhlIHN1bW1hcnkgcHJp
bnRlZCB3aGVuIG5vIHRlc3RzIGRpZCBydW4uCisgIFRoYW5rcyBGbG9yaWFuIEJydWhpbiBmb3Ig
dGhlIFBSLgorLSBmaXggIzExODUgLSBlbnN1cmUgTUFOSUZFU1QuaW4gZXhhY3RseSBtYXRjaGVz
IHdoYXQgc2hvdWxkIGdvIHRvIGEgc2Rpc3QKKworLSBhIG51bWJlciBvZiBkb2N1bWVudGF0aW9u
IG1vZGVybml6YXRpb25zIHdydCBnb29kIHByYWN0aWNlcy4KKyAgVGhhbmtzIEJydW5vIE9saXZl
aXJhIGZvciB0aGUgUFIuCisKKzIuOC4zCis9PT09PQorCistIGZpeCAjMTE2OTogYWRkIF9fbmFt
ZV9fIGF0dHJpYnV0ZSB0byB0ZXN0Y2FzZXMgaW4gVGVzdENhc2VGdW5jdGlvbiB0bworICBzdXBw
b3J0IHRoZSBAdW5pdHRlc3Quc2tpcCBkZWNvcmF0b3Igb24gZnVuY3Rpb25zIGFuZCBtZXRob2Rz
LgorICBUaGFua3MgTGVlIEthbWVudHNreSBmb3IgdGhlIFBSLgorCistIGZpeCAjMTAzNTogY29s
bGVjdGluZyB0ZXN0cyBpZiB0ZXN0IG1vZHVsZSBsZXZlbCBvYmogaGFzIF9fZ2V0YXR0cl9fKCku
CisgIFRoYW5rcyBTdW9yIGZvciB0aGUgcmVwb3J0IGFuZCBCcnVubyBPbGl2ZWlyYSAvIFRvbSBW
aW5lciBmb3IgdGhlIFBSLgorCistIGZpeCAjMzMxOiBkb24ndCBjb2xsZWN0IHRlc3RzIGlmIHRo
ZWlyIGZhaWx1cmUgY2Fubm90IGJlIHJlcG9ydGVkIGNvcnJlY3RseQorICBlLmcuIHRoZXkgYXJl
IGEgY2FsbGFibGUgaW5zdGFuY2Ugb2YgYSBjbGFzcy4KKworLSBmaXggIzExMzM6IGZpeGVkIGlu
dGVybmFsIGVycm9yIHdoZW4gZmlsdGVyaW5nIHRyYWNlYmFja3Mgd2hlcmUgb25lIGVudHJ5Cisg
IGJlbG9uZ3MgdG8gYSBmaWxlIHdoaWNoIGlzIG5vIGxvbmdlciBhdmFpbGFibGUuCisgIFRoYW5r
cyBCcnVubyBPbGl2ZWlyYSBmb3IgdGhlIFBSLgorCistIGVuaGFuY2VtZW50IG1hZGUgdG8gaGln
aGxpZ2h0IGluIHJlZCB0aGUgbmFtZSBvZiB0aGUgZmFpbGluZyB0ZXN0cyBzbworICB0aGV5IHN0
YW5kIG91dCBpbiB0aGUgb3V0cHV0LgorICBUaGFua3MgR2FicmllbCBSZWlzIGZvciB0aGUgUFIu
CisKKy0gYWRkIG1vcmUgdGFsa3MgdG8gdGhlIGRvY3VtZW50YXRpb24KKy0gZXh0ZW5kIGRvY3Vt
ZW50YXRpb24gb24gdGhlIC0taWdub3JlIGNsaSBvcHRpb24gCistIHVzZSBweXRlc3QtcnVubmVy
IGZvciBzZXR1cHRvb2xzIGludGVncmF0aW9uIAorLSBtaW5vciBmaXhlcyBmb3IgaW50ZXJhY3Rp
b24gd2l0aCBPUyBYIEVsIENhcGl0YW4KKyAgc3lzdGVtIGludGVncml0eSBwcm90ZWN0aW9uICh0
aGFua3MgRmxvcmlhbikKKworCisyLjguMgorPT09PT0KKworLSBmaXggIzEwODU6IHByb3BlciBo
YW5kbGluZyBvZiBlbmNvZGluZyBlcnJvcnMgd2hlbiBwYXNzaW5nIGVuY29kZWQgYnl0ZQorICBz
dHJpbmdzIHRvIHB5dGVzdC5wYXJhbWV0cml6ZSBpbiBQeXRob24gMi4KKyAgVGhhbmtzIFRoZW1h
bndpdGhvdXRhcGxhbiBmb3IgdGhlIHJlcG9ydCBhbmQgQnJ1bm8gT2xpdmVpcmEgZm9yIHRoZSBQ
Ui4KKworLSBmaXggIzEwODc6IGhhbmRsaW5nIFN5c3RlbUVycm9yIHdoZW4gcGFzc2luZyBlbXB0
eSBieXRlIHN0cmluZ3MgdG8KKyAgcHl0ZXN0LnBhcmFtZXRyaXplIGluIFB5dGhvbiAzLgorICBU
aGFua3MgUGF1bCBLZWhyZXIgZm9yIHRoZSByZXBvcnQgYW5kIEJydW5vIE9saXZlaXJhIGZvciB0
aGUgUFIuCisKKy0gZml4ICM5OTU6IGZpeGVkIGludGVybmFsIGVycm9yIHdoZW4gZmlsdGVyaW5n
IHRyYWNlYmFja3Mgd2hlcmUgb25lIGVudHJ5CisgIHdhcyBnZW5lcmF0ZWQgYnkgYW4gZXhlYygp
IHN0YXRlbWVudC4KKyAgVGhhbmtzIERhbmllbCBIYWhsZXIsIEFzaGxleSBDIFN0cmF3LCBQaGls
aXBwZSBHYXV0aGllciBhbmQgUGF2ZWwgU2F2Y2hlbmtvCisgIGZvciBjb250cmlidXRpbmcgYW5k
IEJydW5vIE9saXZlaXJhIGZvciB0aGUgUFIuCisKKy0gZml4ICMxMTAwIGFuZCAjMTA1NzogZXJy
b3JzIHdoZW4gdXNpbmcgYXV0b3VzZSBmaXh0dXJlcyBhbmQgZG9jdGVzdCBtb2R1bGVzLgorICBU
aGFua3MgU2VyZ2V5IEIgS2lycGljaGV2IGFuZCBWaXRhbCBLdWR6ZWxrYSBmb3IgY29udHJpYnV0
aW5nIGFuZCBCcnVubworICBPbGl2ZWlyYSBmb3IgdGhlIFBSLgorCisyLjguMQorPT09PT0KKwor
LSBmaXggIzEwMzQ6IEFkZCBtaXNzaW5nIG5vZGVpZCBvbiBweXRlc3RfbG9nd2FybmluZyBjYWxs
IGluCisgIGFkZGhvb2suICBUaGFua3MgU2ltb24gR29taXplbGogZm9yIHRoZSBQUi4KKworLSAn
ZGVwcmVjYXRlZF9jYWxsJyBpcyBub3cgb25seSBzYXRpc2ZpZWQgd2l0aCBhIERlcHJlY2F0aW9u
V2FybmluZyBvcgorICBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nLiBCZWZvcmUgMi44LjAsIGl0
IGFjY2VwdGVkIGFueSB3YXJuaW5nLCBhbmQgMi44LjAKKyAgbWFkZSBpdCBhY2NlcHQgb25seSBE
ZXByZWNhdGlvbldhcm5pbmcgKGJ1dCBub3QgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZykuCisg
IFRoYW5rcyBBbGV4IEdheW5vciBmb3IgdGhlIGlzc3VlIGFuZCBFcmljIEh1bnNiZXJnZXIgZm9y
IHRoZSBQUi4KKworLSBmaXggaXNzdWUgIzEwNzM6IGF2b2lkIGNhbGxpbmcgX19nZXRhdHRyX18g
b24gcG90ZW50aWFsIHBsdWdpbiBvYmplY3RzLgorICBUaGlzIGZpeGVzIGFuIGluY29tcGF0aWJp
bGl0eSB3aXRoIHB5dGVzdC1kamFuZ28uICBUaGFua3MgQW5kcmVhcyBQZWxtZSwKKyAgQnJ1bm8g
T2xpdmVpcmEgYW5kIFJvbm55IFBmYW5uc2NobWlkdCBmb3IgY29udHJpYnV0aW5nIGFuZCBIb2xn
ZXIgS3Jla2VsCisgIGZvciB0aGUgZml4LgorCistIEZpeCBpc3N1ZSAjNzA0OiBoYW5kbGUgdmVy
c2lvbmNvbmZsaWN0IGR1cmluZyBwbHVnaW4gbG9hZGluZyBtb3JlCisgIGdyYWNlZnVsbHkuICBU
aGFua3MgQnJ1bm8gT2xpdmVpcmEgZm9yIHRoZSBQUi4KKworLSBGaXggaXNzdWUgIzEwNjQ6ICIi
LS1qdW5pdHhtbCIgcmVncmVzc2lvbiB3aGVuIHVzZWQgd2l0aCB0aGUKKyAgInB5dGVzdC14ZGlz
dCIgcGx1Z2luLCB3aXRoIHRlc3QgcmVwb3J0cyBiZWluZyBhc3NpZ25lZCB0byB0aGUgd3Jvbmcg
dGVzdHMuCisgIFRoYW5rcyBEYW5pZWwgR3J1bndhbGQgZm9yIHRoZSByZXBvcnQgYW5kIEJydW5v
IE9saXZlaXJhIGZvciB0aGUgUFIuCisKKy0gKGV4cGVyaW1lbnRhbCkgYWRhcHQgbW9yZSBTRU1W
RVIgc3R5bGUgdmVyc2lvbmluZyBhbmQgY2hhbmdlIG1lYW5pbmcgb2YKKyAgbWFzdGVyIGJyYW5j
aCBpbiBnaXQgcmVwbzogIm1hc3RlciIgYnJhbmNoIG5vdyBrZWVwcyB0aGUgYnVnZml4ZXMsIGNo
YW5nZXMKKyAgYWltZWQgZm9yIG1pY3JvIHJlbGVhc2VzLiAgImZlYXR1cmVzIiBicmFuY2ggd2ls
bCBvbmx5IGJlIGJlIHJlbGVhc2VkCisgIHdpdGggbWlub3Igb3IgbWFqb3IgcHl0ZXN0IHJlbGVh
c2VzLgorCistIEZpeCBpc3N1ZSAjNzY2IGJ5IHJlbW92aW5nIGRvY3VtZW50YXRpb24gcmVmZXJl
bmNlcyB0byBkaXN0dXRpbHMuCisgIFRoYW5rcyBSdXNzZWwgV2luZGVyLgorCistIEZpeCBpc3N1
ZSAjMTAzMDogbm93IGJ5dGUtc3RyaW5ncyBhcmUgZXNjYXBlZCB0byBwcm9kdWNlIGl0ZW0gbm9k
ZSBpZHMKKyAgdG8gbWFrZSB0aGVtIGFsd2F5cyBzZXJpYWxpemFibGUuCisgIFRoYW5rcyBBbmR5
IEZyZWVsYW5kIGZvciB0aGUgcmVwb3J0IGFuZCBCcnVubyBPbGl2ZWlyYSBmb3IgdGhlIFBSLgor
CistIFB5dGhvbiAyOiBpZiB1bmljb2RlIHBhcmFtZXRyaXplZCB2YWx1ZXMgYXJlIGNvbnZlcnRp
YmxlIHRvIGFzY2lpLCB0aGVpcgorICBhc2NpaSByZXByZXNlbnRhdGlvbiBpcyB1c2VkIGZvciB0
aGUgbm9kZSBpZC4KKworLSBGaXggaXNzdWUgIzQxMTogQWRkIF9fZXFfXyBtZXRob2QgdG8gYXNz
ZXJ0aW9uIGNvbXBhcmlzb24gZXhhbXBsZS4KKyAgVGhhbmtzIEJlbiBXZWJiLgorLSBGaXggaXNz
dWUgIzY1MzogZGVwcmVjYXRlZF9jYWxsIGNhbiBiZSB1c2VkIGFzIGNvbnRleHQgbWFuYWdlci4K
KworLSBmaXggaXNzdWUgODc3OiBwcm9wZXJseSBoYW5kbGUgYXNzZXJ0aW9uIGV4cGxhbmF0aW9u
cyB3aXRoIG5vbi1hc2NpaSByZXByCisgIFRoYW5rcyBNYXRoaWV1IEFnb3BpYW4gZm9yIHRoZSBy
ZXBvcnQgYW5kIFJvbm55IFBmYW5uc2NobWlkdCBmb3IgdGhlIFBSLgorCistIGZpeCBpc3N1ZSAx
MDI5OiB0cmFuc2Zvcm0gZXJyb3JzIHdoZW4gd3JpdGluZyBjYWNoZSB2YWx1ZXMgaW50byBweXRl
c3Qtd2FybmluZ3MKKworMi44LjAKKz09PT09CisKKy0gbmV3IGBgLS1sZmBgIGFuZCBgYC1mZmBg
IG9wdGlvbnMgdG8gcnVuIG9ubHkgdGhlIGxhc3QgZmFpbGluZyB0ZXN0cyBvcgorICAiZmFpbGlu
ZyB0ZXN0cyBmaXJzdCIgZnJvbSB0aGUgbGFzdCBydW4uICBUaGlzIGZ1bmN0aW9uYWxpdHkgaXMg
cHJvdmlkZWQKKyAgdGhyb3VnaCBwb3J0aW5nIHRoZSBmb3JtZXJseSBleHRlcm5hbCBweXRlc3Qt
Y2FjaGUgcGx1Z2luIGludG8gcHl0ZXN0IGNvcmUuCisgIEJBQ0tXQVJEIElOQ09NUEFUOiBpZiB5
b3UgdXNlZCBweXRlc3QtY2FjaGUncyBmdW5jdGlvbmFsaXR5IHRvIHBlcnNpc3QKKyAgZGF0YSBi
ZXR3ZWVuIHRlc3QgcnVucyBiZSBhd2FyZSB0aGF0IHdlIGRvbid0IHNlcmlhbGl6ZSBzZXRzIGFu
eW1vcmUuCisgIFRoYW5rcyBSb25ueSBQZmFubnNjaG1pZHQgZm9yIG1vc3Qgb2YgdGhlIG1lcmdp
bmcgd29yay4KKworLSAiLXIiIG9wdGlvbiBub3cgYWNjZXB0cyAiYSIgdG8gaW5jbHVkZSBhbGwg
cG9zc2libGUgcmVwb3J0cywgc2ltaWxhcgorICB0byBwYXNzaW5nICJmRXN4WHciIGV4cGxpY2l0
bHkgKGlzc2U5NjApLgorICBUaGFua3MgQWJoaWplZXQgS2FzdXJkZSBmb3IgdGhlIFBSLgorCist
IGF2b2lkIHB5dGhvbjMuNSBkZXByZWNhdGlvbiB3YXJuaW5ncyBieSBpbnRyb2R1Y2luZyB2ZXJz
aW9uCisgIHNwZWNpZmljIGluc3BlY3Rpb24gaGVscGVycywgdGhhbmtzIE1pY2hhZWwgRHJvZXR0
Ym9vbS4KKworLSBmaXggaXNzdWU1NjI6IEBub3NlLnRvb2xzLmlzdGVzdCBub3cgZnVsbHkgcmVz
cGVjdGVkLgorCistIGZpeCBpc3N1ZTkzNDogd2hlbiBzdHJpbmcgY29tcGFyaXNvbiBmYWlscyBh
bmQgYSBkaWZmIGlzIHRvbyBsYXJnZSB0byBkaXNwbGF5CisgIHdpdGhvdXQgcGFzc2luZyAtdnYs
IHN0aWxsIHNob3cgYSBmZXcgbGluZXMgb2YgdGhlIGRpZmYuCisgIFRoYW5rcyBGbG9yaWFuIEJy
dWhpbiBmb3IgdGhlIHJlcG9ydCBhbmQgQnJ1bm8gT2xpdmVpcmEgZm9yIHRoZSBQUi4KKworLSBm
aXggaXNzdWU3MzY6IEZpeCBhIGJ1ZyB3aGVyZSBmaXh0dXJlIHBhcmFtcyB3b3VsZCBiZSBkaXNj
YXJkZWQgd2hlbiBjb21iaW5lZAorICB3aXRoIHBhcmFtZXRyaXphdGlvbiBtYXJrZXJzLgorICBU
aGFua3MgdG8gTWFya3VzIFVudGVyd2FkaXR6ZXIgZm9yIHRoZSBQUi4KKworLSBmaXggaXNzdWU3
MTA6IGludHJvZHVjZSBBTExPV19VTklDT0RFIGRvY3Rlc3Qgb3B0aW9uOiB3aGVuIGVuYWJsZWQs
IHRoZQorICBgYHVgYCBwcmVmaXggaXMgc3RyaXBwZWQgZnJvbSB1bmljb2RlIHN0cmluZ3MgaW4g
ZXhwZWN0ZWQgZG9jdGVzdCBvdXRwdXQuIFRoaXMKKyAgYWxsb3dzIGRvY3Rlc3RzIHdoaWNoIHVz
ZSB1bmljb2RlIHRvIHJ1biBpbiBQeXRob24gMiBhbmQgMyB1bmNoYW5nZWQuCisgIFRoYW5rcyBK
YXNvbiBSLiBDb29tYnMgZm9yIHRoZSByZXBvcnQgYW5kIEJydW5vIE9saXZlaXJhIGZvciB0aGUg
UFIuCisKKy0gcGFyYW1ldHJpemUgbm93IGFsc28gZ2VuZXJhdGVzIG1lYW5pbmdmdWwgdGVzdCBJ
RHMgZm9yIGVudW0sIHJlZ2V4IGFuZCBjbGFzcworICBvYmplY3RzIChhcyBvcHBvc2VkIHRvIGNs
YXNzIGluc3RhbmNlcykuCisgIFRoYW5rcyB0byBGbG9yaWFuIEJydWhpbiBmb3IgdGhlIFBSLgor
CistIEFkZCAnd2FybnMnIHRvIGFzc2VydCB0aGF0IHdhcm5pbmdzIGFyZSB0aHJvd24gKGxpa2Ug
J3JhaXNlcycpLgorICBUaGFua3MgdG8gRXJpYyBIdW5zYmVyZ2VyIGZvciB0aGUgUFIuCisKKy0g
Rml4IGlzc3VlNjgzOiBEbyBub3QgYXBwbHkgYW4gYWxyZWFkeSBhcHBsaWVkIG1hcmsuICBUaGFu
a3Mgb2pha2UgZm9yIHRoZSBQUi4KKworLSBEZWFsIHdpdGggY2FwdHVyaW5nIGZhaWx1cmVzIGJl
dHRlciBzbyBmZXdlciBleGNlcHRpb25zIGdldCBsb3N0IHRvCisgIC9kZXYvbnVsbC4gIFRoYW5r
cyBEYXZpZCBTem90dGVuIGZvciB0aGUgUFIuCisKKy0gZml4IGlzc3VlNzMwOiBkZXByZWNhdGUg
YW5kIHdhcm4gYWJvdXQgdGhlIC0tZ2Vuc2NyaXB0IG9wdGlvbi4KKyAgVGhhbmtzIFJvbm55IFBm
YW5uc2NobWlkdCBmb3IgdGhlIHJlcG9ydCBhbmQgQ2hyaXN0aWFuIFBvbW1yYW56IGZvciB0aGUg
UFIuCisKKy0gZml4IGlzc3VlNzUxOiBtdWx0aXBsZSBwYXJhbWV0cml6ZSB3aXRoIGlkcyBidWcg
aWYgaXQgcGFyYW1ldHJpemVzIGNsYXNzIHdpdGgKKyAgdHdvIG9yIG1vcmUgdGVzdCBtZXRob2Rz
LiBUaGFua3MgU2VyZ2V5IENoaXBpZ2EgZm9yIHJlcG9ydGluZyBhbmQgSmFuCisgIEJlZG5hcmlr
IGZvciBQUi4KKworLSBmaXggaXNzdWU4MjogYXZvaWQgbG9hZGluZyBjb25mdGVzdCBmaWxlcyBm
cm9tIHNldHVwLmNmZy9weXRlc3QuaW5pL3RveC5pbmkKKyAgZmlsZXMgYW5kIHVwd2FyZHMgYnkg
ZGVmYXVsdCAoLS1jb25mY3V0ZGlyIGNhbiBzdGlsbCBiZSBzZXQgdG8gb3ZlcnJpZGUgdGhpcyku
CisgIFRoYW5rcyBCcnVubyBPbGl2ZWlyYSBmb3IgdGhlIFBSLgorCistIGZpeCBpc3N1ZTc2ODog
ZG9jc3RyaW5ncyBmb3VuZCBpbiBweXRob24gbW9kdWxlcyB3ZXJlIG5vdCBzZXR0aW5nIHVwIHNl
c3Npb24KKyAgZml4dHVyZXMuIFRoYW5rcyBKYXNvbiBSLiBDb29tYnMgZm9yIHJlcG9ydGluZyBh
bmQgQnJ1bm8gT2xpdmVpcmEgZm9yIHRoZSBQUi4KKworLSBhZGRlZCBgYHRtcGRpcl9mYWN0b3J5
YGAsIGEgc2Vzc2lvbi1zY29wZWQgZml4dHVyZSB0aGF0IGNhbiBiZSB1c2VkIHRvIGNyZWF0ZQor
ICBkaXJlY3RvcmllcyB1bmRlciB0aGUgYmFzZSB0ZW1wb3JhcnkgZGlyZWN0b3J5LiBQcmV2aW91
c2x5IHRoaXMgb2JqZWN0IHdhcworICBpbnN0YWxsZWQgYXMgYSBgYF90bXBkaXJoYW5kbGVyYGAg
YXR0cmlidXRlIG9mIHRoZSBgYGNvbmZpZ2BgIG9iamVjdCwgYnV0IG5vdyBpdAorICBpcyBwYXJ0
IG9mIHRoZSBvZmZpY2lhbCBBUEkgYW5kIHVzaW5nIGBgY29uZmlnLl90bXBkaXJoYW5kbGVyYGAg
aXMKKyAgZGVwcmVjYXRlZC4KKyAgVGhhbmtzIEJydW5vIE9saXZlaXJhIGZvciB0aGUgUFIuCisK
Ky0gZml4IGlzc3VlODA4OiBweXRlc3QncyBpbnRlcm5hbCBhc3NlcnRpb24gcmV3cml0ZSBob29r
IG5vdyBpbXBsZW1lbnRzIHRoZQorICBvcHRpb25hbCBQRVAzMDIgZ2V0X2RhdGEgQVBJIHNvIHRl
c3RzIGNhbiBhY2Nlc3MgZGF0YSBmaWxlcyBuZXh0IHRvIHRoZW0uCisgIFRoYW5rcyB4bW8tb2Rv
byBmb3IgcmVxdWVzdCBhbmQgZXhhbXBsZSBhbmQgQnJ1bm8gT2xpdmVpcmEgZm9yCisgIHRoZSBQ
Ui4KKworLSByb290ZGlyIGFuZCBpbmlmaWxlIGFyZSBub3cgZGlzcGxheWVkIGR1cmluZyB1c2Fn
ZSBlcnJvcnMgdG8gaGVscAorICB1c2VycyBkaWFnbm9zZSBwcm9ibGVtcyBzdWNoIGFzIHVuZXhw
ZWN0ZWQgaW5pIGZpbGVzIHdoaWNoIGFkZAorICB1bmtub3duIG9wdGlvbnMgYmVpbmcgcGlja2Vk
IHVwIGJ5IHB5dGVzdC4gVGhhbmtzIHRvIFBhdmVsIFNhdmNoZW5rbyBmb3IKKyAgYnJpbmdpbmcg
dGhlIHByb2JsZW0gdG8gYXR0ZW50aW9uIGluICM4MjEgYW5kIEJydW5vIE9saXZlaXJhIGZvciB0
aGUgUFIuCisKKy0gU3VtbWFyeSBiYXIgbm93IGlzIGNvbG9yZWQgeWVsbG93IGZvciB3YXJuaW5n
CisgIHNpdHVhdGlvbnMgc3VjaCBhczogYWxsIHRlc3RzIGVpdGhlciB3ZXJlIHNraXBwZWQgb3Ig
eHBhc3MveGZhaWxlZCwKKyAgb3Igbm8gdGVzdHMgd2VyZSBydW4gYXQgYWxsICh0aGlzIGlzIGEg
cGFydGlhbCBmaXggZm9yIGlzc3VlNTAwKS4KKworLSBmaXggaXNzdWU4MTI6IHB5dGVzdCBub3cg
ZXhpdHMgd2l0aCBzdGF0dXMgY29kZSA1IGluIHNpdHVhdGlvbnMgd2hlcmUgbm8KKyAgdGVzdHMg
d2VyZSBydW4gYXQgYWxsLCBzdWNoIGFzIHRoZSBkaXJlY3RvcnkgZ2l2ZW4gaW4gdGhlIGNvbW1h
bmQgbGluZSBkb2VzCisgIG5vdCBjb250YWluIGFueSB0ZXN0cyBvciBhcyByZXN1bHQgb2YgYSBj
b21tYW5kIGxpbmUgb3B0aW9uIGZpbHRlcnMKKyAgYWxsIG91dCBhbGwgdGVzdHMgKC1rIGZvciBl
eGFtcGxlKS4KKyAgVGhhbmtzIEVyaWMgU2llZ2VybWFuIChpc3N1ZTgxMikgYW5kIEJydW5vIE9s
aXZlaXJhIGZvciB0aGUgUFIuCisKKy0gU3VtbWFyeSBiYXIgbm93IGlzIGNvbG9yZWQgeWVsbG93
IGZvciB3YXJuaW5nCisgIHNpdHVhdGlvbnMgc3VjaCBhczogYWxsIHRlc3RzIGVpdGhlciB3ZXJl
IHNraXBwZWQgb3IgeHBhc3MveGZhaWxlZCwKKyAgb3Igbm8gdGVzdHMgd2VyZSBydW4gYXQgYWxs
IChyZWxhdGVkIHRvIGlzc3VlNTAwKS4KKyAgVGhhbmtzIEVyaWMgU2llZ2VybWFuLgorCistIE5l
dyBgYHRlc3RwYXRoc2BgIGluaSBvcHRpb246IGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gc2VhcmNo
IGZvciB0ZXN0cworICB3aGVuIGV4ZWN1dGluZyBweXRlc3QgZnJvbSB0aGUgcm9vdCBkaXJlY3Rv
cnkuIFRoaXMgY2FuIGJlIHVzZWQKKyAgdG8gc3BlZWQgdXAgdGVzdCBjb2xsZWN0aW9uIHdoZW4g
YSBwcm9qZWN0IGhhcyB3ZWxsIHNwZWNpZmllZCBkaXJlY3RvcmllcworICBmb3IgdGVzdHMsIGJl
aW5nIHVzdWFsbHkgbW9yZSBwcmFjdGljYWwgdGhhbiBjb25maWd1cmluZyBub3JlY3Vyc2VkaXJz
IGZvcgorICBhbGwgZGlyZWN0b3JpZXMgdGhhdCBkbyBub3QgY29udGFpbiB0ZXN0cy4KKyAgVGhh
bmtzIHRvIEFkcmlhbiBmb3IgaWRlYSAoIzY5NCkgYW5kIEJydW5vIE9saXZlaXJhIGZvciB0aGUg
UFIuCisKKy0gZml4IGlzc3VlNzEzOiBKVW5pdCBYTUwgcmVwb3J0cyBmb3IgZG9jdGVzdCBmYWls
dXJlcy4KKyAgVGhhbmtzIFB1bnlhc2hsb2thIEJpc3dhbC4KKworLSBmaXggaXNzdWU5NzA6IGlu
dGVybmFsIHB5dGVzdCB3YXJuaW5ncyBub3cgYXBwZWFyIGFzICJweXRlc3Qtd2FybmluZ3MiIGlu
CisgIHRoZSB0ZXJtaW5hbCBpbnN0ZWFkIG9mICJ3YXJuaW5ncyIsIHNvIGl0IGlzIGNsZWFyIGZv
ciB1c2VycyB0aGF0IHRob3NlCisgIHdhcm5pbmdzIGFyZSBmcm9tIHB5dGVzdCBhbmQgbm90IGZy
b20gdGhlIGJ1aWx0aW4gIndhcm5pbmdzIiBtb2R1bGUuCisgIFRoYW5rcyBCcnVubyBPbGl2ZWly
YS4KKworLSBJbmNsdWRlIHNldHVwIGFuZCB0ZWFyZG93biBpbiBqdW5pdHhtbCB0ZXN0IGR1cmF0
aW9ucy4KKyAgVGhhbmtzIEphbm5lIFZhbmhhbGEuCisKKy0gZml4IGlzc3VlNzM1OiBhc3NlcnRp
b24gZmFpbHVyZXMgb24gZGVidWcgdmVyc2lvbnMgb2YgUHl0aG9uIDMuNCsKKworLSBuZXcgb3B0
aW9uIGBgLS1pbXBvcnQtbW9kZWBgIHRvIGFsbG93IHRvIGNoYW5nZSB0ZXN0IG1vZHVsZSBpbXBv
cnRpbmcKKyAgYmVoYXZpb3VyIHRvIGFwcGVuZCB0byBzeXMucGF0aCBpbnN0ZWFkIG9mIHByZXBl
bmRpbmcuICBUaGlzIGJldHRlciBhbGxvd3MKKyAgdG8gcnVuIHRlc3QgbW9kdWxlcyBhZ2FpbnN0
IGluc3RhbGxhdGVkIHZlcnNpb25zIG9mIGEgcGFja2FnZSBldmVuIGlmIHRoZQorICBwYWNrYWdl
IHVuZGVyIHRlc3QgaGFzIHRoZSBzYW1lIGltcG9ydCByb290LiAgSW4gdGhpcyBleGFtcGxlOjoK
KworICAgICAgICB0ZXN0aW5nL19faW5pdF9fLnB5CisgICAgICAgIHRlc3RpbmcvdGVzdF9wa2df
dW5kZXJfdGVzdC5weQorICAgICAgICBwa2dfdW5kZXJfdGVzdC8KKworICB0aGUgdGVzdHMgd2ls
bCBydW4gYWdhaW5zdCB0aGUgaW5zdGFsbGVkIHZlcnNpb24KKyAgb2YgcGtnX3VuZGVyX3Rlc3Qg
d2hlbiBgYC0taW1wb3J0LW1vZGU9YXBwZW5kYGAgaXMgdXNlZCB3aGVyZWFzCisgIGJ5IGRlZmF1
bHQgdGhleSB3b3VsZCBhbHdheXMgcGljayB1cCB0aGUgbG9jYWwgdmVyc2lvbi4gIFRoYW5rcyBI
b2xnZXIgS3Jla2VsLgorCistIHB5dGVzdGVyOiBhZGQgbWV0aG9kIGBgVG1wVGVzdGRpci5kZWxl
dGVfbG9hZGVkX21vZHVsZXMoKWBgLCBhbmQgY2FsbCBpdAorICBmcm9tIGBgaW5saW5lX3J1bigp
YGAgdG8gYWxsb3cgdGVtcG9yYXJ5IG1vZHVsZXMgdG8gYmUgcmVsb2FkZWQuCisgIFRoYW5rcyBF
ZHVhcmRvIFNjaGV0dGluby4KKworLSBpbnRlcm5hbGx5IHJlZmFjdG9yIHBsdWdpbm1hbmFnZXIg
QVBJIGFuZCBjb2RlIHNvIHRoYXQgdGhlcmUKKyAgaXMgYSBjbGVhciBkaXN0aW5jdGlvbiBiZXR3
ZWVuIGEgcHl0ZXN0LWFnbm9zdGljIHJhdGhlciBzaW1wbGUKKyAgcGx1Z2lubWFuYWdlciBhbmQg
dGhlIFB5dGVzdFBsdWdpbk1hbmFnZXIgd2hpY2ggYWRkcyBhIGxvdCBvZgorICBiZWhhdmlvdXIs
IGFtb25nIGl0IGhhbmRsaW5nIG9mIHRoZSBsb2NhbCBjb25mdGVzdCBmaWxlcy4KKyAgSW4gdGVy
bXMgb2YgZG9jdW1lbnRlZCBtZXRob2RzIHRoaXMgaXMgYSBiYWNrd2FyZCBjb21wYXRpYmxlCisg
IGNoYW5nZSBidXQgaXQgbWlnaHQgc3RpbGwgYnJlYWsgM3JkIHBhcnR5IHBsdWdpbnMgd2hpY2gg
cmVsaWVkIG9uCisgIGRldGFpbHMgbGlrZSBlc3BlY2lhbGx5IHRoZSBwbHVnaW5tYW5hZ2VyLmFk
ZF9zaHV0ZG93bigpIEFQSS4KKyAgVGhhbmtzIEhvbGdlciBLcmVrZWwuCisKKy0gcGx1Z2lubWFu
YWdlbWVudDogaW50cm9kdWNlIGBgcHl0ZXN0Lmhvb2tpbXBsYGAgYW5kCisgIGBgcHl0ZXN0Lmhv
b2tzcGVjYGAgZGVjb3JhdG9ycyBmb3Igc2V0dGluZyBpbXBsL3NwZWMKKyAgc3BlY2lmaWMgcGFy
YW1ldGVycy4gIFRoaXMgc3Vic3RpdHV0ZXMgdGhlIHByZXZpb3VzCisgIG5vdyBkZXByZWNhdGVk
IHVzZSBvZiBgYHB5dGVzdC5tYXJrYGAgd2hpY2ggaXMgbWVhbnQgdG8KKyAgY29udGFpbiBtYXJr
ZXJzIGZvciB0ZXN0IGZ1bmN0aW9ucyBvbmx5LgorCistIHdyaXRlL3JlZmluZSBkb2NzIGZvciAi
d3JpdGluZyBwbHVnaW5zIiB3aGljaCBub3cgaGF2ZSB0aGVpcgorICBvd24gcGFnZSBhbmQgYXJl
IHNlcGFyYXRlIGZyb20gdGhlICJ1c2luZy9pbnN0YWxsaW5nIHBsdWdpbnNgYCBwYWdlLgorCist
IGZpeCBpc3N1ZTczMjogcHJvcGVybHkgdW5yZWdpc3RlciBwbHVnaW5zIGZyb20gYW55IGhvb2sg
Y2FsbGluZworICBzaXRlcyBhbGxvd2luZyB0byBoYXZlIHRlbXBvcmFyeSBwbHVnaW5zIGR1cmlu
ZyB0ZXN0IGV4ZWN1dGlvbi4KKworLSBkZXByZWNhdGUgYW5kIHdhcm4gYWJvdXQgYGBfX211bHRp
Y2FsbF9fYGAgYXJndW1lbnQgaW4gaG9vaworICBpbXBsZW1lbnRhdGlvbnMuICBVc2UgdGhlIGBg
aG9va3dyYXBwZXJgYCBtZWNoYW5pc20gaW5zdGVhZCBhbHJlYWR5CisgIGludHJvZHVjZWQgd2l0
aCBweXRlc3QtMi43LgorCistIHNwZWVkIHVwIHB5dGVzdCdzIG93biB0ZXN0IHN1aXRlIGNvbnNp
ZGVyYWJseSBieSB1c2luZyBpbnByb2Nlc3MKKyAgdGVzdHMgYnkgZGVmYXVsdCAodGVzdHJ1biBj
YW4gYmUgbW9kaWZpZWQgd2l0aCAtLXJ1bnB5dGVzdD1zdWJwcm9jZXNzCisgIHRvIGNyZWF0ZSBz
dWJwcm9jZXNzZXMgaW4gbWFueSBwbGFjZXMgaW5zdGVhZCkuICBUaGUgbWFpbgorICBBUElzIHRv
IHJ1biBweXRlc3QgaW4gYSB0ZXN0IGlzICJydW5weXRlc3QoKSIgb3IgInJ1bnB5dGVzdF9zdWJw
cm9jZXNzIgorICBhbmQgInJ1bnB5dGVzdF9pbnByb2Nlc3MiIGlmIHlvdSBuZWVkIGEgcGFydGlj
dWxhciB3YXkgb2YgcnVubmluZworICB0aGUgdGVzdC4gIEluIGFsbCBjYXNlcyB5b3UgZ2V0IGJh
Y2sgYSBSdW5SZXN1bHQgYnV0IHRoZSBpbnByb2Nlc3MKKyAgb25lIHdpbGwgYWxzbyBoYXZlIGEg
InJlcHJlYyIgYXR0cmlidXRlIHdpdGggdGhlIHJlY29yZGVkIGV2ZW50cy9yZXBvcnRzLgorCist
IGZpeCBtb25rZXlwYXRjaC5zZXRhdHRyKCJ4LnkiLCByYWlzaW5nPUZhbHNlKSB0byBhY3R1YWxs
eSBub3QgcmFpc2UKKyAgaWYgInkiIGlzIG5vdCBhIHByZS1leGlzdGluZyBhdHRyaWJ1dGUuIFRo
YW5rcyBGbG9yaWFuIEJydWhpbi4KKworLSBmaXggaXNzdWU3NDE6IG1ha2UgcnVubmluZyBvdXRw
dXQgZnJvbSB0ZXN0ZGlyLnJ1biBjb3B5L3Bhc3RlYWJsZQorICBUaGFua3MgQnJ1bm8gT2xpdmVp
cmEuCisKKy0gYWRkIGEgbmV3IGBgLS1ub2NvbmZ0ZXN0YGAgYXJndW1lbnQgd2hpY2ggaWdub3Jl
cyBhbGwgYGBjb25mdGVzdC5weWBgIGZpbGVzLgorCistIGFkZCBgYGZpbGVgYCBhbmQgYGBsaW5l
YGAgYXR0cmlidXRlcyB0byBKVW5pdC1YTUwgb3V0cHV0LgorCistIGZpeCBpc3N1ZTg5MDogY2hh
bmdlZCBleHRlbnNpb24gb2YgYWxsIGRvY3VtZW50YXRpb24gZmlsZXMgZnJvbSBgYHR4dGBgIHRv
CisgIGBgcnN0YGAuIFRoYW5rcyB0byBBYmhpamVldCBmb3IgdGhlIFBSLgorCistIGZpeCBpc3N1
ZTcxNDogYWRkIGFiaWxpdHkgdG8gYXBwbHkgaW5kaXJlY3Q9VHJ1ZSBwYXJhbWV0ZXIgb24gcGFy
dGljdWxhciBhcmduYW1lcy4KKyAgVGhhbmtzIEVsaXphdmV0YTIzOS4KKworLSBmaXggaXNzdWU4
OTA6IGNoYW5nZWQgZXh0ZW5zaW9uIG9mIGFsbCBkb2N1bWVudGF0aW9uIGZpbGVzIGZyb20gYGB0
eHRgYCB0bworICBgYHJzdGBgLiBUaGFua3MgdG8gQWJoaWplZXQgZm9yIHRoZSBQUi4KKworLSBm
aXggaXNzdWU5NTc6ICIjIGRvY3Rlc3Q6IFNLSVAiIG9wdGlvbiB3aWxsIG5vdyByZWdpc3RlciBk
b2N0ZXN0cyBhcyBTS0lQUEVECisgIHJhdGhlciB0aGFuIFBBU1NFRC4KKyAgVGhhbmtzIFRob21h
cyBHcmFpbmdlciBmb3IgdGhlIHJlcG9ydCBhbmQgQnJ1bm8gT2xpdmVpcmEgZm9yIHRoZSBQUi4K
KworLSBpc3N1ZTk1MTogYWRkIG5ldyByZWNvcmRfeG1sX3Byb3BlcnR5IGZpeHR1cmUsIHRoYXQg
c3VwcG9ydHMgbG9nZ2luZworICBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIHhtbCBvdXRwdXQu
IFRoYW5rcyBEYXZpZCBEaWF6IGZvciB0aGUgUFIuCisKKy0gaXNzdWU5NDk6IHBhdGhzIGFmdGVy
IG5vcm1hbCBvcHRpb25zIChmb3IgZXhhbXBsZSBgYC1zYGAsIGBgLXZgYCwgZXRjKSBhcmUgbm93
CisgIHByb3Blcmx5IHVzZWQgdG8gZGlzY292ZXIgYGByb290ZGlyYGAgYW5kIGBgaW5pYGAgZmls
ZXMuCisgIFRoYW5rcyBQZXRlciBMYXVyaSBmb3IgdGhlIHJlcG9ydCBhbmQgQnJ1bm8gT2xpdmVp
cmEgZm9yIHRoZSBQUi4KKworMi43LjMgKGNvbXBhcmVkIHRvIDIuNy4yKQorPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KKworLSBBbGxvdyAnZGV2JywgJ3JjJywgb3Igb3RoZXIgbm9uLWlu
dGVnZXIgdmVyc2lvbiBzdHJpbmdzIGluIGBgaW1wb3J0b3Jza2lwYGAuCisgIFRoYW5rcyB0byBF
cmljIEh1bnNiZXJnZXIgZm9yIHRoZSBQUi4KKworLSBmaXggaXNzdWU4NTY6IGNvbnNpZGVyIC0t
Y29sb3IgcGFyYW1ldGVyIGluIGFsbCBvdXRwdXRzIChmb3IgZXhhbXBsZQorICAtLWZpeHR1cmVz
KS4gVGhhbmtzIEJhcm5leSBHYWxlIGZvciB0aGUgcmVwb3J0IGFuZCBCcnVubyBPbGl2ZWlyYSBm
b3IgdGhlIFBSLgorCistIGZpeCBpc3N1ZTg1NTogcGFzc2luZyBzdHIgb2JqZWN0cyBhcyBgYHBs
dWdpbnNgYCBhcmd1bWVudCB0byBweXRlc3QubWFpbgorICBpcyBub3cgaW50ZXJwcmV0ZWQgYXMg
YSBtb2R1bGUgbmFtZSB0byBiZSBpbXBvcnRlZCBhbmQgcmVnaXN0ZXJlZCBhcyBhCisgIHBsdWdp
biwgaW5zdGVhZCBvZiBzaWxlbnRseSBoYXZpbmcgbm8gZWZmZWN0LgorICBUaGFua3MgeG1vLW9k
b28gZm9yIHRoZSByZXBvcnQgYW5kIEJydW5vIE9saXZlaXJhIGZvciB0aGUgUFIuCisKKy0gZml4
IGlzc3VlNzQ0OiBmaXggZm9yIGFzdC5DYWxsIGNoYW5nZXMgaW4gUHl0aG9uIDMuNSsuICBUaGFu
a3MKKyAgR3VpZG8gdmFuIFJvc3N1bSwgTWF0dGhpYXMgQnVzc29ubmllciwgU3RlZmFuIFppbW1l
cm1hbm4gYW5kCisgIFRob21hcyBLbHV5dmVyLgorCistIGZpeCBpc3N1ZTg0MjogYXBwbHlpbmcg
bWFya2VycyBpbiBjbGFzc2VzIG5vIGxvbmdlciBwcm9wYWdhdGUgdGhpcyBtYXJrZXJzCisgIHRv
IHN1cGVyY2xhc3NlcyB3aGljaCBhbHNvIGhhdmUgbWFya2Vycy4KKyAgVGhhbmtzIHhtby1vZG9v
IGZvciB0aGUgcmVwb3J0IGFuZCBCcnVubyBPbGl2ZWlyYSBmb3IgdGhlIFBSLgorCistIHByZXNl
cnZlIHdhcm5pbmcgZnVuY3Rpb25zIGFmdGVyIGNhbGwgdG8gcHl0ZXN0LmRlcHJlY2F0ZWRfY2Fs
bC4gVGhhbmtzCisgIFBpZXRlciBNdWxkZXIgZm9yIFBSLgorCistIGZpeCBpc3N1ZTg1NDogYXV0
b3VzZSB5aWVsZF9maXh0dXJlcyBkZWZpbmVkIGFzIGNsYXNzIG1lbWJlcnMgb2YKKyAgdW5pdHRl
c3QuVGVzdENhc2Ugc3ViY2xhc3NlcyBub3cgd29yayBhcyBleHBlY3RlZC4KKyAgVGhhbm5rcyB4
bW8tb2RvbyBmb3IgdGhlIHJlcG9ydCBhbmQgQnJ1bm8gT2xpdmVpcmEgZm9yIHRoZSBQUi4KKwor
LSBmaXggaXNzdWU4MzM6IC0tZml4dHVyZXMgbm93IHNob3dzIGFsbCBmaXh0dXJlcyBvZiBjb2xs
ZWN0ZWQgdGVzdCBmaWxlcywgaW5zdGVhZCBvZiBqdXN0IHRoZQorICBmaXh0dXJlcyBkZWNsYXJl
ZCBvbiB0aGUgZmlyc3Qgb25lLgorICBUaGFua3MgRmxvcmlhbiBCcnVoaW4gZm9yIHJlcG9ydGlu
ZyBhbmQgQnJ1bm8gT2xpdmVpcmEgZm9yIHRoZSBQUi4KKworLSBmaXggaXNzdWU4NjM6IHNraXBw
ZWQgdGVzdHMgbm93IHJlcG9ydCB0aGUgY29ycmVjdCByZWFzb24gd2hlbiBhIHNraXAveGZhaWwK
KyAgY29uZGl0aW9uIGlzIG1ldCB3aGVuIHVzaW5nIG11bHRpcGxlIG1hcmtlcnMuCisgIFRoYW5r
cyBSYXBoYWVsIFBpZXJ6aW5hIGZvciByZXBvcnRpbmcgYW5kIEJydW5vIE9saXZlaXJhIGZvciB0
aGUgUFIuCisKKy0gb3B0aW1pemVkIHRtcGRpciBmaXh0dXJlIGluaXRpYWxpemF0aW9uLCB3aGlj
aCBzaG91bGQgbWFrZSB0ZXN0IHNlc3Npb25zCisgIGZhc3RlciAoc3BlY2lhbGx5IHdoZW4gdXNp
bmcgcHl0ZXN0LXhkaXN0KS4gVGhlIG9ubHkgdmlzaWJsZSBlZmZlY3QKKyAgaXMgdGhhdCBub3cg
cHl0ZXN0IHVzZXMgYSBzdWJkaXJlY3RvcnkgaW4gdGhlICRURU1QIGRpcmVjdG9yeSBmb3IgYWxs
CisgIGRpcmVjdG9yaWVzIGNyZWF0ZWQgYnkgdGhpcyBmaXh0dXJlIChkZWZhdWx0cyB0byAkVEVN
UC9weXRlc3QtJFVTRVIpLgorICBUaGFua3MgQnJ1bm8gT2xpdmVpcmEgZm9yIHRoZSBQUi4KKwor
Mi43LjIgKGNvbXBhcmVkIHRvIDIuNy4xKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
KworLSBmaXggaXNzdWU3Njc6IHB5dGVzdC5yYWlzZXMgdmFsdWUgYXR0cmlidXRlIGRvZXMgbm90
IGNvbnRhaW4gdGhlIGV4Y2VwdGlvbgorICBpbnN0YW5jZSBvbiBQeXRob24gMi42LiBUaGFua3Mg
RXJpYyBTaWVnZXJtYW4gZm9yIHByb3ZpZGluZyB0aGUgdGVzdAorICBjYXNlIGFuZCBCcnVubyBP
bGl2ZWlyYSBmb3IgUFIuCisKKy0gQXV0b21hdGljYWxseSBjcmVhdGUgZGlyZWN0b3J5IGZvciBq
dW5pdHhtbCBhbmQgcmVzdWx0cyBsb2cuCisgIFRoYW5rcyBBcm9uIEN1cnpvbi4KKworLSBmaXgg
aXNzdWU3MTM6IEpVbml0IFhNTCByZXBvcnRzIGZvciBkb2N0ZXN0IGZhaWx1cmVzLgorICBUaGFu
a3MgUHVueWFzaGxva2EgQmlzd2FsLgorCistIGZpeCBpc3N1ZTczNTogYXNzZXJ0aW9uIGZhaWx1
cmVzIG9uIGRlYnVnIHZlcnNpb25zIG9mIFB5dGhvbiAzLjQrCisgIFRoYW5rcyBCZW5qYW1pbiBQ
ZXRlcnNvbi4KKworLSBmaXggaXNzdWUxMTQ6IHNraXBpZiBtYXJrZXIgcmVwb3J0cyB0byBpbnRl
cm5hbCBza2lwcGluZyBwbHVnaW47CisgIFRoYW5rcyBGbG9yaXMgQnJ1eW5vb2doZSBmb3IgcmVw
b3J0aW5nIGFuZCBCcnVubyBPbGl2ZWlyYSBmb3IgdGhlIFBSLgorCistIGZpeCBpc3N1ZTc0ODog
dW5pdHRlc3QuU2tpcFRlc3QgcmVwb3J0cyB0byBpbnRlcm5hbCBweXRlc3QgdW5pdHRlc3QgcGx1
Z2luLgorICBUaGFua3MgVGhvbWFzIERlIFNjaGFtcGhlbGVpcmUgZm9yIHJlcG9ydGluZyBhbmQg
QnJ1bm8gT2xpdmVpcmEgZm9yIHRoZSBQUi4KKworLSBmaXggaXNzdWU3MTg6IGZhaWxlZCB0byBj
cmVhdGUgcmVwcmVzZW50YXRpb24gb2Ygc2V0cyBjb250YWluaW5nIHVuc29ydGFibGUKKyAgZWxl
bWVudHMgaW4gcHl0aG9uIDIuIFRoYW5rcyBFZGlzb24gR3VzdGF2byBNdWVuei4KKworLSBmaXgg
aXNzdWU3NTYsIGZpeCBpc3N1ZTc1MiAoYW5kIHNpbWlsYXIgaXNzdWVzKTogZGVwZW5kIG9uIHB5
LTEuNC4yOQorICB3aGljaCBoYXMgYSByZWZpbmVkIGFsZ29yaXRobSBmb3IgdHJhY2ViYWNrIGdl
bmVyYXRpb24uCisKKworMi43LjEgKGNvbXBhcmVkIHRvIDIuNy4wKQorPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KKworLSBmaXggaXNzdWU3MzE6IGRvIG5vdCBnZXQgY29uZnVzZWQgYnkg
dGhlIGJyYWNlcyB3aGljaCBtYXkgYmUgcHJlc2VudAorICBhbmQgdW5iYWxhbmNlZCBpbiBhbiBv
YmplY3QncyByZXByIHdoaWxlIGNvbGxhcHNpbmcgRmFsc2UKKyAgZXhwbGFuYXRpb25zLiAgVGhh
bmtzIENhcmwgTWV5ZXIgZm9yIHRoZSByZXBvcnQgYW5kIHRlc3QgY2FzZS4KKworLSBmaXggaXNz
dWU1NTM6IHByb3Blcmx5IGhhbmRsaW5nIGluc3BlY3QuZ2V0c291cmNlbGluZXMgZmFpbHVyZXMg
aW4KKyAgRml4dHVyZUxvb2t1cEVycm9yIHdoaWNoIHdvdWxkIGxlYWQgdG8gdG8gYW4gaW50ZXJu
YWwgZXJyb3IsCisgIG9iZnVzY2F0aW5nIHRoZSBvcmlnaW5hbCBwcm9ibGVtLiBUaGFua3MgdGFs
bGpvc2ggZm9yIGluaXRpYWwKKyAgZGlhZ25vc2UvcGF0Y2ggYW5kIEJydW5vIE9saXZlaXJhIGZv
ciBmaW5hbCBwYXRjaC4KKworLSBmaXggaXNzdWU2NjA6IHByb3Blcmx5IHJlcG9ydCBzY29wZS1t
aXNtYXRjaC1hY2Nlc3MgZXJyb3JzCisgIGluZGVwZW5kZW50bHkgZnJvbSBvcmRlcmluZyBvZiBm
aXh0dXJlIGFyZ3VtZW50cy4gIEFsc28KKyAgYXZvaWQgdGhlIHB5dGVzdCBpbnRlcm5hbCB0cmFj
ZWJhY2sgd2hpY2ggZG9lcyBub3QgcHJvdmlkZQorICBpbmZvcm1hdGlvbiB0byB0aGUgdXNlci4g
VGhhbmtzIEhvbGdlciBLcmVrZWwuCisKKy0gc3RyZWFtbGluZWQgYW5kIGRvY3VtZW50ZWQgcmVs
ZWFzZSBwcm9jZXNzLiAgQWxzbyBhbGwgdmVyc2lvbnMKKyAgKGluIHNldHVwLnB5IGFuZCBkb2N1
bWVudGF0aW9uIGdlbmVyYXRpb24pIGFyZSBub3cgcmVhZAorICBmcm9tIF9weXRlc3QvX19pbml0
X18ucHkuIFRoYW5rcyBIb2xnZXIgS3Jla2VsLgorCistIGZpeGVkIGRvY3MgdG8gcmVtb3ZlIHRo
ZSBub3Rpb24gdGhhdCB5aWVsZC1maXh0dXJlcyBhcmUgZXhwZXJpbWVudGFsLgorICBUaGV5IGFy
ZSBoZXJlIHRvIHN0YXkgOikgIFRoYW5rcyBCcnVubyBPbGl2ZWlyYS4KKworLSBTdXBwb3J0IGJ1
aWxkaW5nIHdoZWVscyBieSB1c2luZyBlbnZpcm9ubWVudCBtYXJrZXJzIGZvciB0aGUKKyAgcmVx
dWlyZW1lbnRzLiAgVGhhbmtzIElvbmVsIE1hcmllcyBDcmlzdGlhbi4KKworLSBmaXhlZCByZWdy
ZXNzaW9uIHRvIDIuNi40IHdoaWNoIHN1cmZhY2VkIGUuZy4gaW4gbG9zdCBzdGRvdXQgY2FwdHVy
ZSBwcmludGluZworICB3aGVuIHRlc3RzIHJhaXNlZCBTeXN0ZW1FeGl0LiBUaGFua3MgSG9sZ2Vy
IEtyZWtlbC4KKworLSByZWludHJvZHVjZWQgX3B5dGVzdCBmaXh0dXJlIG9mIHRoZSBweXRlc3Rl
ciBwbHVnaW4gd2hpY2ggaXMgdXNlZAorICBhdCBsZWFzdCBieSBweXRlc3QteGRpc3QuCisKKzIu
Ny4wIChjb21wYXJlZCB0byAyLjYuNCkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisK
Ky0gZml4IGlzc3VlNDM1OiBtYWtlIHJlbG9hZCgpIHdvcmsgd2hlbiBhc3NlcnQgcmV3cml0aW5n
IGlzIGFjdGl2ZS4KKyAgVGhhbmtzIERhbmllbCBIYWhsZXIuCisKKy0gZml4IGlzc3VlNjE2OiBj
b25mdGVzdC5weSBmaWxlcyBhbmQgdGhlaXIgY29udGFpbmVkIGZpeHV0cmVzIGFyZSBub3cKKyAg
cHJvcGVybHkgY29uc2lkZXJlZCBmb3IgdmlzaWJpbGl0eSwgaW5kZXBlbmRlbnRseSBmcm9tIHRo
ZSBleGFjdAorICBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGFuZCB0ZXN0IGFyZ3VtZW50cyB0
aGF0IGFyZSB1c2VkLgorICBNYW55IHRoYW5rcyB0byBFcmljIFNpZWdlcm1hbiBhbmQgaGlzIFBS
MjM1IHdoaWNoIGNvbnRhaW5zCisgIHN5c3RlbWF0aWMgdGVzdHMgZm9yIGNvbmZ0ZXN0IHZpc2li
aWxpdHkgYW5kIG5vdyBwYXNzZXMuCisgIFRoaXMgY2hhbmdlIGFsc28gaW50cm9kdWNlcyB0aGUg
Y29uY2VwdCBvZiBhIGBgcm9vdGRpcmBgIHdoaWNoCisgIGlzIHByaW50ZWQgYXMgYSBuZXcgcHl0
ZXN0IGhlYWRlciBhbmQgZG9jdW1lbnRlZCBpbiB0aGUgcHl0ZXN0CisgIGN1c3RvbWl6ZSB3ZWIg
cGFnZS4KKworLSBjaGFuZ2UgcmVwb3J0aW5nIG9mICJkaXZlcnRlZCIgdGVzdHMsIGkuZS4gdGVz
dHMgdGhhdCBhcmUgY29sbGVjdGVkCisgIGluIG9uZSBmaWxlIGJ1dCBhY3R1YWxseSBjb21lIGZy
b20gYW5vdGhlciAoZS5nLiB3aGVuIHRlc3RzIGluIGEgdGVzdCBjbGFzcworICBjb21lIGZyb20g
YSBiYXNlIGNsYXNzIGluIGEgZGlmZmVyZW50IGZpbGUpLiAgV2Ugbm93IHNob3cgdGhlIG5vZGVp
ZAorICBhbmQgaW5kaWNhdGUgdmlhIGEgcG9zdGZpeCB0aGUgb3RoZXIgZmlsZS4KKworLSBhZGQg
YWJpbGl0eSB0byBzZXQgY29tbWFuZCBsaW5lIG9wdGlvbnMgYnkgZW52aXJvbm1lbnQgdmFyaWFi
bGUgUFlURVNUX0FERE9QVFMuCisKKy0gYWRkZWQgZG9jdW1lbnRhdGlvbiBvbiB0aGUgbmV3IHB5
dGVzdC1kZXYgdGVhbXMgb24gYml0YnVja2V0IGFuZAorICBnaXRodWIuICBTZWUgaHR0cHM6Ly9w
eXRlc3Qub3JnL2xhdGVzdC9jb250cmlidXRpbmcuaHRtbCAuCisgIFRoYW5rcyB0byBBbmF0b2x5
IGZvciBwdXNoaW5nIGFuZCBpbml0aWFsIHdvcmsgb24gdGhpcy4KKworLSBmaXggaXNzdWU2NTA6
IG5ldyBvcHRpb24gYGAtLWRvY3R0ZXN0LWlnbm9yZS1pbXBvcnQtZXJyb3JzYGAgd2hpY2gKKyAg
d2lsbCB0dXJuIGltcG9ydCBlcnJvcnMgaW4gZG9jdGVzdHMgaW50byBza2lwcy4gIFRoYW5rcyBD
aGFybGVzIENsb3VkCisgIGZvciB0aGUgY29tcGxldGUgUFIuCisKKy0gZml4IGlzc3VlNjU1OiB3
b3JrIGFyb3VuZCBkaWZmZXJlbnQgd2F5cyB0aGF0IGNhdXNlIHB5dGhvbjIvMworICB0byBsZWFr
IHN5cy5leGNfaW5mbyBpbnRvIGZpeHR1cmVzL3Rlc3RzIGNhdXNpbmcgZmFpbHVyZXMgaW4gM3Jk
IHBhcnR5IGNvZGUKKworLSBmaXggaXNzdWU2MTU6IGFzc2VydGlvbiByZS13cml0aW5nIGRpZCBu
b3QgY29ycmVjdGx5IGVzY2FwZSAlIHNpZ25zCisgIHdoZW4gZm9ybWF0dGluZyBib29sZWFuIG9w
ZXJhdGlvbnMsIHdoaWNoIHRyaXBwZWQgb3ZlciBtaXhpbmcKKyAgYm9vbGVhbnMgd2l0aCBtb2R1
bG8gb3BlcmF0b3JzLiAgVGhhbmtzIHRvIFRvbSBWaW5lciBmb3IgdGhlIHJlcG9ydCwKKyAgdHJp
YWdpbmcgYW5kIGZpeC4KKworLSBpbXBsZW1lbnQgaXNzdWUzNTE6IGFkZCBhYmlsaXR5IHRvIHNw
ZWNpZnkgcGFyYW1ldHJpemUgaWRzIGFzIGEgY2FsbGFibGUKKyAgdG8gZ2VuZXJhdGUgY3VzdG9t
IHRlc3QgaWRzLiAgVGhhbmtzIEJyaWFubmEgTGF1Z2hlciBmb3IgdGhlIGlkZWEgYW5kCisgIGlt
cGxlbWVudGF0aW9uLgorCistIGludHJvZHVjZSBhbmQgZG9jdW1lbnQgbmV3IGhvb2t3cmFwcGVy
IG1lY2hhbmlzbSB1c2VmdWwgZm9yIHBsdWdpbnMKKyAgd2hpY2ggd2FudCB0byB3cmFwIHRoZSBl
eGVjdXRpb24gb2YgY2VydGFpbiBob29rcyBmb3IgdGhlaXIgcHVycG9zZXMuCisgIFRoaXMgc3Vw
ZXJzZWRlcyB0aGUgdW5kb2N1bWVudGVkIGBgX19tdWx0aWNhbGxfX2BgIHByb3RvY29sIHdoaWNo
CisgIHB5dGVzdCBpdHNlbGYgYW5kIHNvbWUgZXh0ZXJuYWwgcGx1Z2lucyB1c2UuICBOb3RlIHRo
YXQgcHl0ZXN0LTIuOAorICBpcyBzY2hlZHVsZWQgdG8gZHJvcCBzdXBwb3J0aW5nIHRoZSBvbGQg
YGBfX211bHRpY2FsbF9fYGAKKyAgYW5kIG9ubHkgc3VwcG9ydCB0aGUgaG9va3dyYXBwZXIgcHJv
dG9jb2wuCisKKy0gbWFqb3JseSBzcGVlZCB1cCBpbnZvY2F0aW9uIG9mIHBsdWdpbiBob29rcwor
CistIHVzZSBob29rd3JhcHBlciBtZWNoYW5pc20gaW4gYnVpbHRpbiBweXRlc3QgcGx1Z2lucy4K
KworLSBhZGQgYSBkb2N0ZXN0IGluaSBvcHRpb24gZm9yIGRvY3Rlc3QgZmxhZ3MsIHRoYW5rcyBI
b2xnZXIgUGV0ZXJzLgorCistIGFkZCBub3RlIHRvIGRvY3MgdGhhdCBpZiB5b3Ugd2FudCB0byBt
YXJrIGEgcGFyYW1ldGVyIGFuZCB0aGUKKyAgcGFyYW1ldGVyIGlzIGEgY2FsbGFibGUsIHlvdSBh
bHNvIG5lZWQgdG8gcGFzcyBpbiBhIHJlYXNvbiB0byBkaXNhbWJpZ3VhdGUKKyAgaXQgZnJvbSB0
aGUgImRlY29yYXRvciIgY2FzZS4gIFRoYW5rcyBUb20gVmluZXIuCisKKy0gInB5dGhvbl9jbGFz
c2VzIiBhbmQgInB5dGhvbl9mdW5jdGlvbnMiIG9wdGlvbnMgbm93IHN1cHBvcnQgZ2xvYi1wYXR0
ZXJucworICBmb3IgdGVzdCBkaXNjb3ZlcnksIGFzIGRpc2N1c3NlZCBpbiBpc3N1ZTYwMC4gVGhh
bmtzIExkaWFyeSBUcmFuc2xhdGlvbnMuCisKKy0gYWxsb3cgdG8gb3ZlcnJpZGUgcGFyYW1ldHJp
emVkIGZpeHR1cmVzIHdpdGggbm9uLXBhcmFtZXRyaXplZCBvbmVzIGFuZCB2aWNlIHZlcnNhIChi
dWJlbmtvZmYpLgorCistIGZpeCBpc3N1ZTQ2MzogcmFpc2Ugc3BlY2lmaWMgZXJyb3IgZm9yICdw
YXJhbWV0ZXJpemUnIG1pc3NwZWxsaW5nIChwZmN0ZGF5ZWxpc2UpLgorCistIE9uIGZhaWx1cmUs
IHRoZSBgYHN5cy5sYXN0X3ZhbHVlYGAsIGBgc3lzLmxhc3RfdHlwZWBgIGFuZAorICBgYHN5cy5s
YXN0X3RyYWNlYmFja2BgIGFyZSBzZXQsIHNvIHRoYXQgYSB1c2VyIGNhbiBpbnNwZWN0IHRoZSBl
cnJvcgorICB2aWEgcG9zdG1vcnRlbSBkZWJ1Z2dpbmcgKGFsbWFya2xlaW4pLgorCisyLjYuNAor
PT09PT0KKworLSBJbXByb3ZlIGFzc2VydGlvbiBmYWlsdXJlIHJlcG9ydGluZyBvbiBpdGVyYWJs
ZXMsIGJ5IHVzaW5nIG5kaWZmIGFuZAorICBwcHJpbnQuCisKKy0gcmVtb3ZlZCBvdXRkYXRlZCBq
YXBhbmVzZSBkb2NzIGZyb20gc291cmNlIHRyZWUuCisKKy0gZG9jcyBmb3IgInB5dGVzdF9hZGRo
b29rcyIgaG9vay4gIFRoYW5rcyBCcnVubyBPbGl2ZWlyYS4KKworLSB1cGRhdGVkIHBsdWdpbiBp
bmRleCBkb2NzLiAgVGhhbmtzIEJydW5vIE9saXZlaXJhLgorCistIGZpeCBpc3N1ZTU1Nzogd2l0
aCAiLWsiIHdlIG9ubHkgYWxsb3cgdGhlIG9sZCBzdHlsZSAiLSIgZm9yIG5lZ2F0aW9uCisgIGF0
IHRoZSBiZWdpbm5pbmcgb2Ygc3RyaW5ncyBhbmQgZXZlbiB0aGF0IGlzIGRlcHJlY2F0ZWQuICBV
c2UgIm5vdCIgaW5zdGVhZC4KKyAgVGhpcyBzaG91bGQgYWxsb3cgdG8gcGljayBwYXJhbWV0cml6
ZWQgdGVzdHMgd2hlcmUgIi0iIGFwcGVhcmVkIGluIHRoZSBwYXJhbWV0ZXIuCisKKy0gZml4IGlz
c3VlNjA0OiBFc2NhcGUgJSBjaGFyYWN0ZXIgaW4gdGhlIGFzc2VydGlvbiBtZXNzYWdlLgorCist
IGZpeCBpc3N1ZTYyMDogYWRkIGV4cGxhbmF0aW9uIGluIHRoZSAtLWdlbnNjcmlwdCB0YXJnZXQg
YWJvdXQgd2hhdAorICB0aGUgYmluYXJ5IGJsb2IgbWVhbnMuIFRoYW5rcyBEaW51IEdoZXJtYW4u
CisKKy0gZml4IGlzc3VlNjE0OiBmaXhlZCBwYXN0ZWJpbiBzdXBwb3J0LgorCisKKy0gZml4IGlz
c3VlNjIwOiBhZGQgZXhwbGFuYXRpb24gaW4gdGhlIC0tZ2Vuc2NyaXB0IHRhcmdldCBhYm91dCB3
aGF0CisgIHRoZSBiaW5hcnkgYmxvYiBtZWFucy4gVGhhbmtzIERpbnUgR2hlcm1hbi4KKworLSBm
aXggaXNzdWU2MTQ6IGZpeGVkIHBhc3RlYmluIHN1cHBvcnQuCisKKzIuNi4zCis9PT09PQorCist
IGZpeCBpc3N1ZTU3NTogeHVuaXQteG1sIHdhcyByZXBvcnRpbmcgY29sbGVjdGlvbiBlcnJvcnMg
YXMgZmFpbHVyZXMKKyAgaW5zdGVhZCBvZiBlcnJvcnMsIHRoYW5rcyBPbGVnIFNpbnlhdnNraXku
CisKKy0gZml4IGlzc3VlNTgyOiBmaXggc2V0dXB0b29scyBleGFtcGxlLCB0aGFua3MgTGFzemxv
IFBhcHAgYW5kIFJvbm55CisgIFBmYW5uc2NobWlkdC4KKworLSBGaXggaW5maW5pdGUgcmVjdXJz
aW9uIGJ1ZyB3aGVuIHBpY2tsaW5nIGNhcHR1cmUuRW5jb2RlZEZpbGUsIHRoYW5rcworICBVd2Ug
U2NobWl0dC4KKworLSBmaXggaXNzdWU1ODk6IGZpeCBiYWQgaW50ZXJhY3Rpb24gd2l0aCBudW1w
eSBhbmQgb3RoZXJzIHdoZW4gc2hvd2luZworICBleGNlcHRpb25zLiAgQ2hlY2sgZm9yIHByZWNp
c2UgIm1heGltdW0gcmVjdXJzaW9uIGRlcHRoIGV4Y2VlZCIgZXhjZXB0aW9uCisgIGluc3RlYWQg
b2YgcHJlc3VtaW5nIGFueSBSdW50aW1lRXJyb3IgaXMgdGhhdCBvbmUgKGltcGxlbWVudGVkIGlu
IHB5CisgIGRlcCkuICBUaGFua3MgQ2hhcmxlcyBDbG91ZCBmb3IgYW5hbHlzaW5nIHRoZSBpc3N1
ZS4KKworLSBmaXggY29uZnRlc3QgcmVsYXRlZCBmaXh0dXJlIHZpc2liaWxpdHkgaXNzdWU6IHdo
ZW4gcnVubmluZyB3aXRoIGEKKyAgQ1dEIG91dHNpZGUgYSB0ZXN0IHBhY2thZ2UgcHl0ZXN0IHdv
dWxkIGdldCBmaXh0dXJlIGRpc2NvdmVyeSB3cm9uZy4KKyAgVGhhbmtzIHRvIFdvbGZnYW5nIFNj
aG5lcnJpbmcgZm9yIGZpZ3VyaW5nIG91dCBhIHJlcHJvZHVjYWJsZSBleGFtcGxlLgorCistIElu
dHJvZHVjZSBweXRlc3RfZW50ZXJfcGRiIGhvb2sgKG5lZWRlZCBlLmcuIGJ5IHB5dGVzdF90aW1l
b3V0IHRvIGNhbmNlbCB0aGUKKyAgdGltZW91dCB3aGVuIGludGVyYWN0aXZlbHkgZW50ZXJpbmcg
cGRiKS4gIFRoYW5rcyBXb2xmZ2FuZyBTY2huZXJyaW5nLgorCistIGNoZWNrIHhmYWlsL3NraXAg
YWxzbyB3aXRoIG5vbi1weXRob24gZnVuY3Rpb24gdGVzdCBpdGVtcy4gVGhhbmtzCisgIEZsb3Jp
cyBCcnV5bm9vZ2hlLgorCisyLjYuMgorPT09PT0KKworLSBBZGRlZCBmdW5jdGlvbiBweXRlc3Qu
ZnJlZXplX2luY2x1ZGVzKCksIHdoaWNoIG1ha2VzIGl0IGVhc3kgdG8gZW1iZWQKKyAgcHl0ZXN0
IGludG8gZXhlY3V0YWJsZXMgdXNpbmcgdG9vbHMgbGlrZSBjeF9mcmVlemUuCisgIFNlZSBkb2Nz
IGZvciBleGFtcGxlcyBhbmQgcmF0aW9uYWxlLiBUaGFua3MgQnJ1bm8gT2xpdmVpcmEuCisKKy0g
SW1wcm92ZSBhc3NlcnRpb24gcmV3cml0aW5nIGNhY2hlIGludmFsaWRhdGlvbiBwcmVjaXNpb24u
CisKKy0gZml4ZWQgaXNzdWU1NjE6IGFkYXB0IGF1dG91c2UgZml4dHVyZSBleGFtcGxlIGZvciBw
eXRob24zLgorCistIGZpeGVkIGlzc3VlNDUzOiBhc3NlcnRpb24gcmV3cml0aW5nIGlzc3VlIHdp
dGggX19yZXByX18gY29udGFpbmluZworICAiXG57IiwgIlxufSIgYW5kICJcbn4iLgorCistIGZp
eCBpc3N1ZTU2MDogY29ycmVjdGx5IGRpc3BsYXkgY29kZSBpZiBhbiAiZWxzZToiIG9yICJmaW5h
bGx5OiIgaXMKKyAgZm9sbG93ZWQgYnkgc3RhdGVtZW50cyBvbiB0aGUgc2FtZSBsaW5lLgorCist
IEZpeCBleGFtcGxlIGluIG1vbmtleXBhdGNoIGRvY3VtZW50YXRpb24sIHRoYW5rcyB0LThjaC4K
KworLSBmaXggaXNzdWU1NzI6IGNvcnJlY3QgdG1wZGlyIGRvYyBleGFtcGxlIGZvciBweXRob24z
LgorCistIERvIG5vdCBtYXJrIGFzIHVuaXZlcnNhbCB3aGVlbCBiZWNhdXNlIFB5dGhvbiAyLjYg
aXMgZGlmZmVyZW50IGZyb20KKyAgb3RoZXIgYnVpbGRzIGR1ZSB0byB0aGUgZXh0cmEgYXJncGFy
c2UgZGVwZW5kZW5jeS4gIEZpeGVzIGlzc3VlNTY2LgorICBUaGFua3Mgc29udGVrLgorCistIElt
cGxlbWVudCBpc3N1ZTU0OTogdXNlci1wcm92aWRlZCBhc3NlcnRpb24gbWVzc2FnZXMgbm93IG5v
IGxvbmdlcgorICByZXBsYWNlIHRoZSBweS50ZXN0IGludHJvc3BlY3Rpb24gbWVzc2FnZSBidXQg
YXJlIHNob3duIGluIGFkZGl0aW9uCisgIHRvIHRoZW0uCisKKzIuNi4xCis9PT09PQorCistIE5v
IGxvbmdlciBzaG93IGxpbmUgbnVtYmVycyBpbiB0aGUgLS12ZXJib3NlIG91dHB1dCwgdGhlIG91
dHB1dCBpcyBub3cKKyAgcHVyZWx5IHRoZSBub2RlaWQuICBUaGUgbGluZSBudW1iZXIgaXMgc3Rp
bGwgc2hvd24gaW4gZmFpbHVyZSByZXBvcnRzLgorICBUaGFua3MgRmxvcmlzIEJydXlub29naGUu
CisKKy0gZml4IGlzc3VlNDM3IHdoZXJlIGFzc2VydGlvbiByZXdyaXRpbmcgY291bGQgY2F1c2Ug
cHl0ZXN0LXhkaXN0IHNsYXZlcworICB0byBjb2xsZWN0IGRpZmZlcmVudCB0ZXN0cy4gVGhhbmtz
IEJydW5vIE9saXZlaXJhLgorCistIGZpeCBpc3N1ZTU1NTogYWRkICJlcnJvcnMiIGF0dHJpYnV0
ZSB0byBjYXB0dXJlLXN0cmVhbXMgdG8gc2F0aXNmeQorICBzb21lIGRpc3R1dGlscyBhbmQgcG9z
c2libHkgb3RoZXIgY29kZSBhY2Nlc3Npbmcgc3lzLnN0ZG91dC5lcnJvcnMuCisKKy0gZml4IGlz
c3VlNTQ3IGNhcHN5cy9jYXBmZCBhbHNvIHdvcmsgd2hlbiBvdXRwdXQgY2FwdHVyaW5nICgiLXMi
KSBpcyBkaXNhYmxlZC4KKworLSBhZGRyZXNzIGlzc3VlMTcwOiBhbGxvdyBweXRlc3QubWFyay54
ZmFpbCguLi4pIHRvIHNwZWNpZnkgZXhwZWN0ZWQgZXhjZXB0aW9ucyB2aWEKKyAgYW4gb3B0aW9u
YWwgInJhaXNlcz1FWEMiIGFyZ3VtZW50IHdoZXJlIEVYQyBjYW4gYmUgYSBzaW5nbGUgZXhjZXB0
aW9uCisgIG9yIGEgdHVwbGUgb2YgZXhjZXB0aW9uIGNsYXNzZXMuICBUaGFua3MgRGF2aWQgTW9o
ciBmb3IgdGhlIGNvbXBsZXRlCisgIFBSLgorCistIGZpeCBpbnRlZ3JhdGlvbiBvZiBweXRlc3Qg
d2l0aCB1bml0dGVzdC5tb2NrLnBhdGNoIGRlY29yYXRvciB3aGVuCisgIGl0IHVzZXMgdGhlICJu
ZXciIGFyZ3VtZW50LiAgVGhhbmtzIE5pY29sYXMgRGVsYWJ5IGZvciB0ZXN0IGFuZCBQUi4KKwor
LSBmaXggaXNzdWUgd2l0aCBkZXRlY3RpbmcgY29uZnRlc3QgZmlsZXMgaWYgdGhlIGFyZ3VtZW50
cyBjb250YWluCisgICI6OiIgbm9kZSBpZCBzcGVjaWZpY2F0aW9ucyAoY29weSBwYXN0ZWQgZnJv
bSAiLXYiIG91dHB1dCkKKworLSBmaXggaXNzdWU1NDQgYnkgb25seSByZW1vdmluZyAiQE5VTSIg
YXQgdGhlIGVuZCBvZiAiOjoiIHNlcGFyYXRlZCBwYXJ0cworICBhbmQgaWYgdGhlIHBhcnQgaGFz
IGFuICIucHkiIGV4dGVuc2lvbgorCistIGRvbid0IHVzZSBweS5zdGQgaW1wb3J0IGhlbHBlciwg
cmF0aGVyIGltcG9ydCB0aGluZ3MgZGlyZWN0bHkuCisgIFRoYW5rcyBCcnVubyBPbGl2ZWlyYS4K
KworMi42Cis9PT0KKworLSBDYWNoZSBleGNlcHRpb25zIGZyb20gZml4dHVyZXMgYWNjb3JkaW5n
IHRvIHRoZWlyIHNjb3BlIChpc3N1ZSA0NjcpLgorCistIGZpeCBpc3N1ZTUzNzogQXZvaWQgaW1w
b3J0aW5nIG9sZCBhc3NlcnRpb24gcmVpbnRlcnByZXRhdGlvbiBjb2RlIGJ5IGRlZmF1bHQuCisK
Ky0gZml4IGlzc3VlMzY0OiBzaG9ydGVuIGFuZCBlbmhhbmNlIHRyYWNlYmFja3MgcmVwcmVzZW50
YXRpb24gYnkgZGVmYXVsdC4KKyAgVGhlIG5ldyAiLS10Yj1hdXRvIiBvcHRpb24gKGRlZmF1bHQp
IHdpbGwgb25seSBkaXNwbGF5IGxvbmcgdHJhY2ViYWNrcworICBmb3IgdGhlIGZpcnN0IGFuZCBs
YXN0IGVudHJ5LiAgWW91IGNhbiBnZXQgdGhlIG9sZCBiZWhhdmlvdXIgb2YgcHJpbnRpbmcKKyAg
YWxsIGVudHJpZXMgYXMgbG9uZyBlbnRyaWVzIHdpdGggIi0tdGI9bG9uZyIuICBBbHNvIHNob3J0
IGVudHJpZXMgYnkKKyAgZGVmYXVsdCBhcmUgbm93IHByaW50ZWQgdmVyeSBzaW1pbGFybHkgdG8g
Ii0tdGI9bmF0aXZlIiBvbmVzLgorCistIGZpeCBpc3N1ZTUxNDogdGVhY2ggYXNzZXJ0aW9uIHJl
aW50ZXJwcmV0YXRpb24gYWJvdXQgcHJpdmF0ZSBjbGFzcyBhdHRyaWJ1dGVzCisKKy0gY2hhbmdl
IC12IG91dHB1dCB0byBpbmNsdWRlIGZ1bGwgbm9kZSBJRHMgb2YgdGVzdHMuICBVc2VycyBjYW4g
Y29weQorICBhIG5vZGUgSUQgZnJvbSBhIHRlc3QgcnVuLCBpbmNsdWRpbmcgbGluZSBudW1iZXIs
IGFuZCB1c2UgaXQgYXMgYQorICBwb3NpdGlvbmFsIGFyZ3VtZW50IGluIG9yZGVyIHRvIHJ1biBv
bmx5IGEgc2luZ2xlIHRlc3QuCisKKy0gZml4IGlzc3VlIDQ3NTogZmFpbCBlYXJseSBhbmQgY29t
cHJlaGVuc2libGUgaWYgY2FsbGluZworICBweXRlc3QucmFpc2VzIHdpdGggd3JvbmcgZXhjZXB0
aW9uIHR5cGUuCisKKy0gZml4IGlzc3VlNTE2OiB0ZWxsIGluIGdldHRpbmctc3RhcnRlZCBhYm91
dCBjdXJyZW50IGRlcGVuZGVuY2llcy4KKworLSBjbGVhbnVwIHNldHVwLnB5IGEgYml0IGFuZCBz
cGVjaWZ5IHN1cHBvcnRlZCB2ZXJzaW9ucy4gVGhhbmtzIEp1cmtvCisgIEdvc3BvZG5ldGljIGZv
ciB0aGUgUFIuCisKKy0gY2hhbmdlIFhQQVNTIGNvbG91ciB0byB5ZWxsb3cgcmF0aGVyIHRoZW4g
cmVkIHdoZW4gdGVzdHMgYXJlIHJ1bgorICB3aXRoIC12LgorCistIGZpeCBpc3N1ZTQ3Mzogd29y
ayBhcm91bmQgbW9jayBwdXR0aW5nIGFuIHVuYm91bmQgbWV0aG9kIGludG8gYSBjbGFzcworICBk
aWN0IHdoZW4gZG91YmxlLXBhdGNoaW5nLgorCistIGZpeCBpc3N1ZTQ5ODogaWYgYSBmaXh0dXJl
IGZpbmFsaXplciBmYWlscywgbWFrZSBzdXJlIHRoYXQKKyAgdGhlIGZpeHR1cmUgaXMgc3RpbGwg
aW52YWxpZGF0ZWQuCisKKy0gZml4IGlzc3VlNDUzOiB0aGUgcmVzdWx0IG9mIHRoZSBweXRlc3Rf
YXNzZXJ0cmVwcl9jb21wYXJlIGhvb2sgbm93IGdldHMKKyAgaXQncyBuZXdsaW5lcyBlc2NhcGVk
IHNvIHRoYXQgZm9ybWF0X2V4Y2VwdGlvbiBkb2VzIG5vdCBibG93IHVwLgorCistIGludGVybmFs
IG5ldyB3YXJuaW5nIHN5c3RlbTogcHl0ZXN0IHdpbGwgbm93IHByb2R1Y2Ugd2FybmluZ3Mgd2hl
bgorICBpdCBkZXRlY3RzIG9kZGl0aWVzIGluIHlvdXIgdGVzdCBjb2xsZWN0aW9uIG9yIGV4ZWN1
dGlvbi4KKyAgV2FybmluZ3MgYXJlIHVsdGltYXRlbHkgc2VudCB0byBhIG5ldyBweXRlc3RfbG9n
d2FybmluZyBob29rIHdoaWNoIGlzCisgIGN1cnJlbnRseSBvbmx5IGltcGxlbWVudGVkIGJ5IHRo
ZSB0ZXJtaW5hbCBwbHVnaW4gd2hpY2ggZGlzcGxheXMKKyAgd2FybmluZ3MgaW4gdGhlIHN1bW1h
cnkgbGluZSBhbmQgc2hvd3MgbW9yZSBkZXRhaWxzIHdoZW4gLXJ3IChyZXBvcnQgb24KKyAgd2Fy
bmluZ3MpIGlzIHNwZWNpZmllZC4KKworLSBjaGFuZ2Ugc2tpcHMgaW50byB3YXJuaW5ncyBmb3Ig
dGVzdCBjbGFzc2VzIHdpdGggYW4gX19pbml0X18gYW5kCisgIGNhbGxhYmxlcyBpbiB0ZXN0IG1v
ZHVsZXMgd2hpY2ggbG9vayBsaWtlIGEgdGVzdCBidXQgYXJlIG5vdCBmdW5jdGlvbnMuCisKKy0g
Zml4IGlzc3VlNDM2OiBpbXByb3ZlZCBmaW5kaW5nIG9mIGluaXRpYWwgY29uZnRlc3QgZmlsZXMg
ZnJvbSBjb21tYW5kCisgIGxpbmUgYXJndW1lbnRzIGJ5IHVzaW5nIHRoZSByZXN1bHQgb2YgcGFy
c2Vfa25vd25fYXJncyByYXRoZXIgdGhhbgorICB0aGUgcHJldmlvdXMgZmxha3kgaGV1cmlzdGlj
cy4gIFRoYW5rcyBNYXJjIEFicmFtb3dpdHogZm9yIHRlc3RzCisgIGFuZCBpbml0aWFsIGZpeGlu
ZyBhcHByb2FjaGVzIGluIHRoaXMgYXJlYS4KKworLSBmaXggaXNzdWUgIzQ3OTogcHJvcGVybHkg
aGFuZGxlIG5vc2UvdW5pdHRlc3QoMikgU2tpcFRlc3QgZXhjZXB0aW9ucworICBkdXJpbmcgY29s
bGVjdGlvbi9sb2FkaW5nIG9mIHRlc3QgbW9kdWxlcy4gIFRoYW5rcyB0byBNYXJjIFNjaGxhaWNo
CisgIGZvciB0aGUgY29tcGxldGUgUFIuCisKKy0gZml4IGlzc3VlNDkwOiBpbmNsdWRlIHB5dGVz
dF9sb2FkX2luaXRpYWxfY29uZnRlc3RzIGluIGRvY3VtZW50YXRpb24KKyAgYW5kIGltcHJvdmUg
ZG9jc3RyaW5nLgorCistIGZpeCBpc3N1ZTQ3MjogY2xhcmlmeSB0aGF0IGBgcHl0ZXN0LmNvbmZp
Zy5nZXR2YWx1ZSgpYGAgY2Fubm90IHdvcmsKKyAgaWYgaXQncyB0cmlnZ2VyZWQgYWhlYWQgb2Yg
Y29tbWFuZCBsaW5lIHBhcnNpbmcuCisKKy0gbWVyZ2UgUFIxMjM6IGltcHJvdmVkIGludGVncmF0
aW9uIHdpdGggbW9jay5wYXRjaCBkZWNvcmF0b3Igb24gdGVzdHMuCisKKy0gZml4IGlzc3VlNDEy
OiBtZXNzaW5nIHdpdGggc3Rkb3V0L3N0ZGVyciBGRC1sZXZlbCBzdHJlYW1zIGlzIG5vdworICBj
YXB0dXJlZCB3aXRob3V0IGNyYXNoZXMuCisKKy0gZml4IGlzc3VlNDgzOiB0cmlhbC9weTMzIHdv
cmtzIG5vdyBwcm9wZXJseS4gIFRoYW5rcyBEYW5pZWwgR3JhbmEgZm9yIFBSLgorCistIGltcHJv
dmUgZXhhbXBsZSBmb3IgcHl0ZXN0IGludGVncmF0aW9uIHdpdGggInB5dGhvbiBzZXR1cC5weSB0
ZXN0IgorICB3aGljaCBub3cgaGFzIGEgZ2VuZXJpYyAiLWEiIG9yICItLXB5dGVzdC1hcmdzIiBv
cHRpb24gd2hlcmUgeW91CisgIGNhbiBwYXNzIGFkZGl0aW9uYWwgb3B0aW9ucyBhcyBhIHF1b3Rl
ZCBzdHJpbmcuICBUaGFua3MgVHJldm9yIEJla29sYXkuCisKKy0gc2ltcGxpZmllZCBpbnRlcm5h
bCBjYXB0dXJpbmcgbWVjaGFuaXNtIGFuZCBtYWRlIGl0IG1vcmUgcm9idXN0CisgIGFnYWluc3Qg
dGVzdHMgb3Igc2V0dXBzIGNoYW5naW5nIEZEMS9GRDIsIGFsc28gYmV0dGVyIGludGVncmF0ZWQK
KyAgbm93IHdpdGggcHl0ZXN0LnBkYigpIGluIHNpbmdsZSB0ZXN0cy4KKworLSBpbXByb3ZlbWVu
dHMgdG8gcHl0ZXN0J3Mgb3duIHRlc3Qtc3VpdGUgbGVha2FnZSBkZXRlY3Rpb24sIGNvdXJ0ZXN5
IG9mIFBScworICBmcm9tIE1hcmMgQWJyYW1vd2l0egorCistIGZpeCBpc3N1ZTQ5MjogYXZvaWQg
bGVhayBpbiB0ZXN0X3dyaXRlb3JnLiAgVGhhbmtzIE1hcmMgQWJyYW1vd2l0ei4KKworLSBmaXgg
aXNzdWU0OTM6IGRvbid0IHJ1biB0ZXN0cyBpbiBkb2MgZGlyZWN0b3J5IHdpdGggYGBweXRob24g
c2V0dXAucHkgdGVzdGBgCisgICh1c2UgdG94IC1lIGRvY3Rlc3RpbmcgZm9yIHRoYXQpCisKKy0g
Zml4IGlzc3VlNDg2OiBiZXR0ZXIgcmVwb3J0aW5nIGFuZCBoYW5kbGluZyBvZiBlYXJseSBjb25m
dGVzdCBsb2FkaW5nIGZhaWx1cmVzCisKKy0gc29tZSBjbGVhbnVwIGFuZCBzaW1wbGlmaWNhdGlv
biBvZiBpbnRlcm5hbCBjb25mdGVzdCBoYW5kbGluZy4KKworLSB3b3JrIGEgYml0IGhhcmRlciB0
byBicmVhayByZWZlcmVuY2UgY3ljbGVzIHdoZW4gY2F0Y2hpbmcgZXhjZXB0aW9ucy4KKyAgVGhh
bmtzIEp1cmtvIEdvc3BvZG5ldGljLgorCistIGZpeCBpc3N1ZTQ0MzogZml4IHNraXAgZXhhbXBs
ZXMgdG8gdXNlIHByb3BlciBjb21wYXJpc29uLiAgVGhhbmtzIEFsZXgKKyAgR3JvZW5ob2xtLgor
CistIHN1cHBvcnQgbm9zZS1zdHlsZSBgYF9fdGVzdF9fYGAgYXR0cmlidXRlIG9uIG1vZHVsZXMs
IGNsYXNzZXMgYW5kCisgIGZ1bmN0aW9ucywgaW5jbHVkaW5nIHVuaXR0ZXN0LXN0eWxlIENsYXNz
ZXMuICBJZiBzZXQgdG8gRmFsc2UsIHRoZQorICB0ZXN0IHdpbGwgbm90IGJlIGNvbGxlY3RlZC4K
KworLSBmaXggaXNzdWU1MTI6IHNob3cgIjxub3RzZXQ+IiBmb3IgYXJndW1lbnRzIHdoaWNoIG1p
Z2h0IG5vdCBiZSBzZXQKKyAgaW4gbW9ua2V5cGF0Y2ggcGx1Z2luLiAgSW1wcm92ZXMgb3V0cHV0
IGluIGRvY3VtZW50YXRpb24uCisKKworMi41LjIKKz09PT09CisKKy0gZml4IGlzc3VlNDA5IC0t
IGJldHRlciBpbnRlcm9wZXJhdGUgd2l0aCBjeF9mcmVlemUgYnkgbm90CisgIHRyeWluZyB0byBp
bXBvcnQgZnJvbSBjb2xsZWN0aW9ucy5hYmMgd2hpY2ggY2F1c2VzIHByb2JsZW1zCisgIGZvciBw
eTI3L2N4X2ZyZWV6ZS4gIFRoYW5rcyBXb2xmZ2FuZyBMLiBmb3IgcmVwb3J0aW5nIGFuZCB0cmFj
a2luZyBpdCBkb3duLgorCistIGZpeGVkIGRvY3MgYW5kIGNvZGUgdG8gdXNlICJweXRlc3QiIGlu
c3RlYWQgb2YgInB5LnRlc3QiIGFsbW9zdCBldmVyeXdoZXJlLgorICBUaGFua3MgSnVya28gR29z
cG9kbmV0aWMgZm9yIHRoZSBjb21wbGV0ZSBQUi4KKworLSBmaXggaXNzdWU0MjU6IG1lbnRpb24g
YXQgZW5kIG9mICJweS50ZXN0IC1oIiB0aGF0IC0tbWFya2VycworICBhbmQgLS1maXh0dXJlcyB3
b3JrIGFjY29yZGluZyB0byBzcGVjaWZpZWQgdGVzdCBwYXRoIChvciBjdXJyZW50IGRpcikKKwor
LSBmaXggaXNzdWU0MTM6IGV4Y2VwdGlvbnMgd2l0aCB1bmljb2RlIGF0dHJpYnV0ZXMgYXJlIG5v
dyBwcmludGVkCisgIGNvcnJlY3RseSBhbHNvIG9uIHB5dGhvbjIgYW5kIHdpdGggcHl0ZXN0LXhk
aXN0IHJ1bnMuICh0aGUgZml4CisgIHJlcXVpcmVzIHB5LTEuNC4yMCkKKworLSBjb3B5LCBjbGVh
bnVwIGFuZCBpbnRlZ3JhdGUgcHkuaW8gY2FwdHVyZQorICBmcm9tIHB5bGliIDEuNC4yMC5kZXYy
IChyZXYgMTNkOWFmOTU1NDdlKQorCistIGFkZHJlc3MgaXNzdWU0MTY6IGNsYXJpZnkgZG9jcyBh
cyB0byBjb25mdGVzdC5weSBsb2FkaW5nIHNlbWFudGljcworCistIGZpeCBpc3N1ZTQyOTogY29t
cGFyaW5nIGJ5dGUgc3RyaW5ncyB3aXRoIG5vbi1hc2NpaSBjaGFycyBpbiBhc3NlcnQKKyAgZXhw
cmVzc2lvbnMgbm93IHdvcmsgYmV0dGVyLiAgVGhhbmtzIEZsb3JpcyBCcnV5bm9vZ2hlLgorCist
IG1ha2UgY2FwZmQvY2Fwc3lzLmNhcHR1cmUgcHJpdmF0ZSwgaXRzIHVudXNlZCBhbmQgc2hvdWxk
bnQgYmUgZXhwb3NlZAorCisKKzIuNS4xCis9PT09PQorCistIG1lcmdlIG5ldyBkb2N1bWVudGF0
aW9uIHN0eWxpbmcgUFIgZnJvbSBUb2JpYXMgQmllbmllay4KKworLSBmaXggaXNzdWU0MDM6IGFs
bG93IHBhcmFtZXRyaXplIG9mIG11bHRpcGxlIHNhbWUtbmFtZSBmdW5jdGlvbnMgd2l0aGluCisg
IGEgY29sbGVjdGlvbiBub2RlLiAgVGhhbmtzIEFuZHJlYXMgS2xvZWNrbmVyIGFuZCBBbGV4IEdh
eW5vciBmb3IgcmVwb3J0aW5nCisgIGFuZCBhbmFseXNpcy4KKworLSBBbGxvdyBwYXJhbWV0ZXJp
emVkIGZpeHR1cmVzIHRvIHNwZWNpZnkgdGhlIElEIG9mIHRoZSBwYXJhbWV0ZXJzIGJ5CisgIGFk
ZGluZyBhbiBpZHMgYXJndW1lbnQgdG8gcHl0ZXN0LmZpeHR1cmUoKSBhbmQgcHl0ZXN0LnlpZWxk
X2ZpeHR1cmUoKS4KKyAgVGhhbmtzIEZsb3JpcyBCcnV5bm9vZ2hlLgorCistIGZpeCBpc3N1ZTQw
NCBieSBhbHdheXMgdXNpbmcgdGhlIGJpbmFyeSB4bWwgZXNjYXBlIGluIHRoZSBqdW5pdHhtbAor
ICBwbHVnaW4uICBUaGFua3MgUm9ubnkgUGZhbm5zY2htaWR0LgorCistIGZpeCBpc3N1ZTQwNzog
Zml4IGFkZG9wdGlvbiBkb2NzdHJpbmcgdG8gcG9pbnQgdG8gYXJncGFyc2UgaW5zdGVhZCBvZgor
ICBvcHRwYXJzZS4gVGhhbmtzIERhbmllbCBELiBXcmlnaHQuCisKKworCisyLjUuMAorPT09PT0K
KworLSBkcm9wcGVkIHB5dGhvbjIuNSBmcm9tIGF1dG9tYXRlZCByZWxlYXNlIHRlc3Rpbmcgb2Yg
cHl0ZXN0IGl0c2VsZgorICB3aGljaCBtZWFucyBpdCdzIHByb2JhYmx5IGdvaW5nIHRvIGJyZWFr
IHNvb24gKGJ1dCBzdGlsbCB3b3JrcworICB3aXRoIHRoaXMgcmVsZWFzZSB3ZSBiZWxpZXZlKS4K
KworLSBzaW1wbGlmaWVkIGFuZCBmaXhlZCBpbXBsZW1lbnRhdGlvbiBmb3IgY2FsbGluZyBmaW5h
bGl6ZXJzIHdoZW4KKyAgcGFyYW1ldHJpemVkIGZpeHR1cmVzIG9yIGZ1bmN0aW9uIGFyZ3VtZW50
cyBhcmUgaW52b2x2ZWQuICBmaW5hbGl6YXRpb24KKyAgaXMgbm93IHBlcmZvcm1lZCBsYXppbHkg
YXQgc2V0dXAgdGltZSBpbnN0ZWFkIG9mIGluIHRoZSAidGVhcmRvd24gcGhhc2UiLgorICBXaGls
ZSB0aGlzIG1pZ2h0IHNvdW5kIG9kZCBhdCBmaXJzdCwgaXQgaGVscHMgdG8gZW5zdXJlIHRoYXQg
d2UgYXJlCisgIGNvcnJlY3RseSBoYW5kbGluZyBzZXR1cC90ZWFyZG93biBldmVuIGluIGNvbXBs
ZXggY29kZS4gIFVzZXItbGV2ZWwgY29kZQorICBzaG91bGQgbm90IGJlIGFmZmVjdGVkIHVubGVz
cyBpdCdzIGltcGxlbWVudGluZyB0aGUgcHl0ZXN0X3J1bnRlc3RfdGVhcmRvd24KKyAgaG9vayBh
bmQgZXhwZWN0aW5nIGNlcnRhaW4gZml4dHVyZSBpbnN0YW5jZXMgYXJlIHRvcm4gZG93biB3aXRo
aW4gKHZlcnkKKyAgdW5saWtlbHkgYW5kIHdvdWxkIGhhdmUgYmVlbiB1bnJlbGlhYmxlIGFueXdh
eSkuCisKKy0gUFI5MDogYWRkIC0tY29sb3I9eWVzfG5vfGF1dG8gb3B0aW9uIHRvIGZvcmNlIHRl
cm1pbmFsIGNvbG9yaW5nCisgIG1vZGUgKCJhdXRvIiBpcyBkZWZhdWx0KS4gIFRoYW5rcyBNYXJj
IEFicmFtb3dpdHouCisKKy0gZml4IGlzc3VlMzE5IC0gY29ycmVjdGx5IHNob3cgdW5pY29kZSBp
biBhc3NlcnRpb24gZXJyb3JzLiAgTWFueQorICB0aGFua3MgdG8gRmxvcmlzIEJydXlub29naGUg
Zm9yIHRoZSBjb21wbGV0ZSBQUi4gIEFsc28gbWVhbnMKKyAgd2UgZGVwZW5kIG9uIHB5Pj0xLjQu
MTkgbm93LgorCistIGZpeCBpc3N1ZTM5NiAtIGNvcnJlY3RseSBzb3J0IGFuZCBmaW5hbGl6ZSBj
bGFzcy1zY29wZWQgcGFyYW1ldHJpemVkCisgIHRlc3RzIGluZGVwZW5kZW50bHkgZnJvbSBudW1i
ZXIgb2YgbWV0aG9kcyBvbiB0aGUgY2xhc3MuCisKKy0gcmVmaXggaXNzdWUzMjMgaW4gYSBiZXR0
ZXIgd2F5IC0tIHBhcmFtZXRyaXphdGlvbiBzaG91bGQgbm93IG5ldmVyCisgIGNhdXNlIFJ1bnRp
bWUgUmVjdXJzaW9uIGVycm9ycyBiZWNhdXNlIHRoZSB1bmRlcmx5aW5nIGFsZ29yaXRobQorICBm
b3IgcmUtb3JkZXJpbmcgdGVzdHMgcGVyLXNjb3BlL3Blci1maXh0dXJlIGlzIG5vdCByZWN1cnNp
dmUKKyAgYW55bW9yZSAoaXQgd2FzIHRhaWwtY2FsbCByZWN1cnNpdmUgYmVmb3JlIHdoaWNoIGNv
dWxkIGxlYWQKKyAgdG8gcHJvYmxlbXMgZm9yIG1vcmUgdGhhbiA+OTY2IG5vbi1mdW5jdGlvbiBz
Y29wZWQgcGFyYW1ldGVycykuCisKKy0gZml4IGlzc3VlMjkwIC0gdGhlcmUgaXMgcHJlbGltaW5h
cnkgc3VwcG9ydCBub3cgZm9yIHBhcmFtZXRyaXppbmcKKyAgd2l0aCByZXBlYXRlZCBzYW1lIHZh
bHVlcyAoc29tZXRpbWVzIHVzZWZ1bCB0byB0byB0ZXN0IGlmIGNhbGxpbmcKKyAgYSBzZWNvbmQg
dGltZSB3b3JrcyBhcyB3aXRoIHRoZSBmaXJzdCB0aW1lKS4KKworLSBjbG9zZSBpc3N1ZTI0MCAt
IGRvY3VtZW50IHByZWNpc2VseSBob3cgcHl0ZXN0IG1vZHVsZSBpbXBvcnRpbmcKKyAgd29ya3Ms
IGRpc2N1c3MgdGhlIHR3byBjb21tb24gdGVzdCBkaXJlY3RvcnkgbGF5b3V0cywgYW5kIGhvdyBp
dAorICBpbnRlcmFjdHMgd2l0aCBQRVA0MjAtbmFtZXNwYWNlIHBhY2thZ2VzLgorCistIGZpeCBp
c3N1ZTI0NiBmaXggZmluYWxpemVyIG9yZGVyIHRvIGJlIExJRk8gb24gaW5kZXBlbmRlbnQgZml4
dHVyZXMKKyAgZGVwZW5kaW5nIG9uIGEgcGFyYW1ldHJpemVkIGhpZ2hlci10aGFuLWZ1bmN0aW9u
IHNjb3BlZCBmaXh0dXJlLgorICAod2FzIHF1aXRlIHNvbWUgZWZmb3J0IHNvIHBsZWFzZSBiZWFy
IHdpdGggdGhlIGNvbXBsZXhpdHkgb2YgdGhpcyBzZW50ZW5jZSA6KQorICBUaGFua3MgUmFscGgg
U2NobWl0dCBmb3IgdGhlIHByZWNpc2UgZmFpbHVyZSBleGFtcGxlLgorCistIGZpeCBpc3N1ZTI0
NCBieSBpbXBsZW1lbnRpbmcgc3BlY2lhbCBpbmRleCBmb3IgcGFyYW1ldGVycyB0byBvbmx5IHVz
ZQorICBpbmRpY2VzIGZvciBwYXJhbWVudHJpemVkIHRlc3QgaWRzCisKKy0gZml4IGlzc3VlMjg3
IGJ5IHJ1bm5pbmcgYWxsIGZpbmFsaXplcnMgYnV0IHNhdmluZyB0aGUgZXhjZXB0aW9uCisgIGZy
b20gdGhlIGZpcnN0IGZhaWxpbmcgZmluYWxpemVyIGFuZCByZS1yYWlzaW5nIGl0IHNvIHRlYXJk
b3duIHdpbGwKKyAgc3RpbGwgaGF2ZSBmYWlsZWQuICBXZSByZXJhaXNlIHRoZSBmaXJzdCBmYWls
aW5nIGV4Y2VwdGlvbiBiZWNhdXNlCisgIGl0IG1pZ2h0IGJlIHRoZSBjYXVzZSBmb3Igb3RoZXIg
ZmluYWxpemVycyB0byBmYWlsLgorCistIGZpeCBvcmRlcmluZyB3aGVuIG1vY2sucGF0Y2ggb3Ig
b3RoZXIgc3RhbmRhcmQgZGVjb3JhdG9yLXdyYXBwaW5ncworICBhcmUgdXNlZCB3aXRoIHRlc3Qg
bWV0aG9kcy4gIFRoaXMgZml4dWVzIGlzc3VlMzQ2IGFuZCBzaG91bGQKKyAgaGVscCB3aXRoIHJh
bmRvbSAieGRpc3QiIGNvbGxlY3Rpb24gZmFpbHVyZXMuICBUaGFua3MgdG8KKyAgUm9ubnkgUGZh
bm5zY2htaWR0IGFuZCBEb25hbGQgU3R1ZmZ0IGZvciBoZWxwaW5nIHRvIGlzb2xhdGUgaXQuCisK
Ky0gZml4IGlzc3VlMzU3IC0gc3BlY2lhbCBjYXNlICItayIgZXhwcmVzc2lvbnMgdG8gYWxsb3cg
Zm9yCisgIGZpbHRlcmluZyB3aXRoIHNpbXBsZSBzdHJpbmdzIHRoYXQgYXJlIG5vdCB2YWxpZCBw
eXRob24gZXhwcmVzc2lvbnMuCisgIEV4YW1wbGVzOiAiLWsgMS4zIiBtYXRjaGVzIGFsbCB0ZXN0
cyBwYXJhbWV0cml6ZWQgd2l0aCAxLjMuCisgICItayBOb25lIiBmaWx0ZXJzIGFsbCB0ZXN0cyB0
aGF0IGhhdmUgIk5vbmUiIGluIHRoZWlyIG5hbWUKKyAgYW5kIGNvbnZlcnNlbHkgIi1rICdub3Qg
Tm9uZSciLgorICBQcmV2aW91c2x5IHRoZXNlIGV4YW1wbGVzIHdvdWxkIHJhaXNlIHN5bnRheCBl
cnJvcnMuCisKKy0gZml4IGlzc3VlMzg0IGJ5IHJlbW92aW5nIHRoZSB0cmlhbCBzdXBwb3J0IGNv
ZGUKKyAgc2luY2UgdGhlIHVuaXR0ZXN0IGNvbXBhdCBlbmhhbmNlbWVudHMgYWxsb3cKKyAgdHJp
YWwgdG8gaGFuZGxlIGl0IG9uIGl0cyBvd24KKworLSBkb24ndCBoaWRlIGFuIEltcG9ydEVycm9y
IHdoZW4gaW1wb3J0aW5nIGEgcGx1Z2luIHByb2R1Y2VzIG9uZS4KKyAgZml4ZXMgaXNzdWUzNzUu
CisKKy0gZml4IGlzc3VlMjc1IC0gYWxsb3cgdXNlZml4dHVyZXMgYW5kIGF1dG91c2UgZml4dHVy
ZXMKKyAgZm9yIHJ1bm5pbmcgZG9jdGVzdCB0ZXh0IGZpbGVzLgorCistIGZpeCBpc3N1ZTM4MCBi
eSBtYWtpbmcgLS1yZXN1bHRsb2cgb25seSByZWx5IG9uIGxvbmdyZXByIGluc3RlYWQKKyAgb2Yg
dGhlICJyZXByY3Jhc2giIGF0dHJpYnV0ZSB3aGljaCBvbmx5IGV4aXN0cyBzb21ldGltZXMuCisK
Ky0gYWRkcmVzcyBpc3N1ZTEyMjogYWxsb3cgQHB5dGVzdC5maXh0dXJlKHBhcmFtcz1pdGVyYXRv
cikgYnkgZXhwbG9kaW5nCisgIGludG8gYSBsaXN0IGVhcmx5IG9uLgorCistIGZpeCBwZXhwZWN0
LTMuMCBjb21wYXRpYmlsaXR5IGZvciBweXRlc3QncyBvd24gdGVzdHMuCisgIChmaXhlcyBpc3N1
ZTM4NikKKworLSBhbGxvdyBuZXN0ZWQgcGFyYW1ldHJpemUtdmFsdWUgbWFya2VycywgdGhhbmtz
IEphbWVzIExhbiBmb3IgdGhlIFBSLgorCistIGZpeCB1bmljb2RlIGhhbmRsaW5nIHdpdGggbmV3
IG1vbmtleXBhdGNoLnNldGF0dHIoaW1wb3J0X3BhdGgsIHZhbHVlKQorICBBUEkuICBUaGFua3Mg
Um9iIERlbm5pcy4gIEZpeGVzIGlzc3VlMzcxLgorCistIGZpeCB1bmljb2RlIGhhbmRsaW5nIHdp
dGgganVuaXR4bWwsIGZpeGVzIGlzc3VlMzY4LgorCistIEluIGFzc2VydGlvbiByZXdyaXRpbmcg
bW9kZSBvbiBQeXRob24gMiwgZml4IHRoZSBkZXRlY3Rpb24gb2YgY29kaW5nCisgIGNvb2tpZXMu
IFNlZSBpc3N1ZSAjMzMwLgorCistIG1ha2UgIi0tcnVueGZhaWwiIHR1cm4gaW1wZXJhdGl2ZSBw
eXRlc3QueGZhaWwgY2FsbHMgaW50byBubyBvcHMKKyAgKGl0IGFscmVhZHkgZGlkIG5ldXRyYWxp
emUgcHl0ZXN0Lm1hcmsueGZhaWwgbWFya2VycykKKworLSByZWZpbmUgcHl0ZXN0IC8gcGtnX3Jl
c291cmNlcyBpbnRlcmFjdGlvbnM6IFRoZSBBc3NlcnRpb25SZXdyaXRpbmdIb29rCisgIFBFUDMw
MiBjb21wbGlhbnQgbG9hZGVyIG5vdyByZWdpc3RlcnMgaXRzZWxmIHdpdGggc2V0dXB0b29scy9w
a2dfcmVzb3VyY2VzCisgIHByb3Blcmx5IHNvIHRoYXQgdGhlIHBrZ19yZXNvdXJjZXMucmVzb3Vy
Y2Vfc3RyZWFtIG1ldGhvZCB3b3JrcyBwcm9wZXJseS4KKyAgRml4ZXMgaXNzdWUzNjYuICBUaGFu
a3MgZm9yIHRoZSBpbnZlc3RpZ2F0aW9ucyBhbmQgZnVsbCBQUiB0byBKYXNvbiBSLiBDb29tYnMu
CisKKy0gcHl0ZXN0Y29uZmlnIGZpeHR1cmUgaXMgbm93IHNlc3Npb24tc2NvcGVkIGFzIGl0IGlz
IHRoZSBzYW1lIG9iamVjdCBkdXJpbmcgdGhlCisgIHdob2xlIHRlc3QgcnVuLiAgRml4ZXMgaXNz
dWUzNzAuCisKKy0gYXZvaWQgb25lIHN1cnByaXNpbmcgY2FzZSBvZiBtYXJrZXIgbWFsZnVuY3Rp
b24vY29uZnVzaW9uOjoKKworICAgICAgQHB5dGVzdC5tYXJrLnNvbWUobGFtYmRhIGFyZzogLi4u
KQorICAgICAgZGVmIHRlc3RfZnVuY3Rpb24oKToKKworICB3b3VsZCBub3Qgd29yayBjb3JyZWN0
bHkgYmVjYXVzZSBweXRlc3QgYXNzdW1lcyBAcHl0ZXN0Lm1hcmsuc29tZQorICBnZXRzIGEgZnVu
Y3Rpb24gdG8gYmUgZGVjb3JhdGVkIGFscmVhZHkuICBXZSBub3cgYXQgbGVhc3QgZGV0ZWN0IGlm
IHRoaXMKKyAgYXJnIGlzIGFuIGxhbWJkYSBhbmQgdGh1cyB0aGUgZXhhbXBsZSB3aWxsIHdvcmsu
ICBUaGFua3MgQWxleCBHYXlub3IKKyAgZm9yIGJyaW5naW5nIGl0IHVwLgorCistIHhmYWlsIGEg
dGVzdCBvbiBweXB5IHRoYXQgY2hlY2tzIHdyb25nIGVuY29kaW5nL2FzY2lpIChweXB5IGRvZXMK
KyAgbm90IGVycm9yIG91dCkuIGZpeGVzIGlzc3VlMzg1LgorCistIGludGVybmFsbHkgbWFrZSB2
YXJuYW1lcygpIGRlYWwgd2l0aCBjbGFzc2VzJ3MgX19pbml0X18sCisgIGFsdGhvdWdoIGl0J3Mg
bm90IG5lZWRlZCBieSBweXRlc3QgaXRzZWxmIGF0bS4gIEFsc28KKyAgZml4IGNhY2hpbmcuICBG
aXhlcyBpc3N1ZTM3Ni4KKworLSBmaXggaXNzdWUyMjEgLSBoYW5kbGUgaW1wb3J0aW5nIG9mIG5h
bWVzcGFjZS1wYWNrYWdlIHdpdGggbm8KKyAgX19pbml0X18ucHkgcHJvcGVybHkuCisKKy0gcmVm
YWN0b3IgaW50ZXJuYWwgRml4dHVyZVJlcXVlc3QgaGFuZGxpbmcgdG8gYXZvaWQgbW9ua2V5cGF0
Y2hpbmcuCisgIE9uZSBvZiB0aGUgcG9zaXRpdmUgdXNlci1mYWNpbmcgZWZmZWN0cyBpcyB0aGF0
IHRoZSAicmVxdWVzdCIgb2JqZWN0CisgIGNhbiBub3cgYmUgdXNlZCBpbiBjbG9zdXJlcy4KKwor
LSBmaXhlZCB2ZXJzaW9uIGNvbXBhcmlzb24gaW4gcHl0ZXN0LmltcG9ydHNraXAobW9kbmFtZSwg
bWludmVyc3RyaW5nKQorCistIGZpeCBpc3N1ZTM3NyBieSBjbGFyaWZ5aW5nIGluIHRoZSBub3Nl
LWNvbXBhdCBkb2NzIHRoYXQgcHl0ZXN0CisgIGRvZXMgbm90IGR1cGxpY2F0ZSB0aGUgdW5pdHRl
c3QtQVBJIGludG8gdGhlICJwbGFpbiIgbmFtZXNwYWNlLgorCistIGZpeCB2ZXJib3NlIHJlcG9y
dGluZyBmb3IgQG1vY2snZCB0ZXN0IGZ1bmN0aW9ucworCisyLjQuMgorPT09PT0KKworLSBvbiBX
aW5kb3dzIHJlcXVpcmUgY29sb3JhbWEgYW5kIGEgbmV3ZXIgcHkgbGliIHNvIHRoYXQgcHkuaW8u
VGVybWluYWxXcml0ZXIoKQorICBub3cgdXNlcyBjb2xvcmFtYSBpbnN0ZWFkIG9mIGl0cyBvd24g
Y3R5cGVzIGhhY2tzLiAoZml4ZXMgaXNzdWUzNjUpCisgIHRoYW5rcyBQYXVsIE1vb3JlIGZvciBi
cmluZ2luZyBpdCB1cC4KKworLSBmaXggIi1rIiBtYXRjaGluZyBvZiB0ZXN0cyB3aGVyZSAicmVw
ciIgYW5kICJhdHRyIiBhbmQgb3RoZXIgbmFtZXMgd291bGQKKyAgY2F1c2Ugd3JvbmcgbWF0Y2hl
cyBiZWNhdXNlIG9mIGFuIGludGVybmFsIGltcGxlbWVudGF0aW9uIHF1aXJrCisgIChkb24ndCBh
c2spIHdoaWNoIGlzIG5vdyBwcm9wZXJseSBpbXBsZW1lbnRlZC4gZml4ZXMgaXNzdWUzNDUuCisK
Ky0gYXZvaWQgdG1wZGlyIGZpeHR1cmUgdG8gY3JlYXRlIHRvbyBsb25nIGZpbGVuYW1lcyBlc3Bl
Y2lhbGx5CisgIHdoZW4gcGFyYW1ldHJpemF0aW9uIGlzIHVzZWQgKGlzc3VlMzU0KQorCistIGZp
eCBweXRlc3QtcGVwOCBhbmQgcHl0ZXN0LWZsYWtlcyAvIHB5dGVzdCBpbnRlcmFjdGlvbnMKKyAg
KGNvbGxlY3Rpb24gbmFtZXMgaW4gbWFyayBwbHVnaW4gd2FzIGFzc3VtaW5nIGFuIGl0ZW0gYWx3
YXlzCisgIGhhcyBhIGZ1bmN0aW9uIHdoaWNoIGlzIG5vdCB0cnVlIGZvciB0aG9zZSBwbHVnaW5z
IGV0Yy4pCisgIFRoYW5rcyBBbmRpIFplaWRsZXIuCisKKy0gaW50cm9kdWNlIG5vZGUuZ2V0X21h
cmtlci9ub2RlLmFkZF9tYXJrZXIgQVBJIGZvciBwbHVnaW5zCisgIGxpa2UgcHl0ZXN0LXBlcDgg
YW5kIHB5dGVzdC1mbGFrZXMgdG8gYXZvaWQgdGhlIG1lc3N5CisgIGRldGFpbHMgb2YgdGhlIG5v
ZGUua2V5d29yZHMgIHBzZXVkby1kaWN0cy4gIEFkYXB0ZWQKKyAgZG9jcy4KKworLSByZW1vdmUg
YXR0ZW1wdCB0byAiZHVwIiBzdGRvdXQgYXQgc3RhcnR1cCBhcyBpdCdzIGlja3kuCisgIHRoZSBu
b3JtYWwgY2FwdHVyaW5nIHNob3VsZCBjYXRjaCBlbm91Z2ggcG9zc2liaWxpdGllcworICBvZiB0
ZXN0cyBtZXNzaW5nIHVwIHN0YW5kYXJkIEZEcy4KKworLSBhZGQgcGx1Z2lubWFuYWdlci5kb19j
b25maWd1cmUoY29uZmlnKSBhcyBhIGxpbmsgdG8KKyAgY29uZmlnLmRvX2NvbmZpZ3VyZSgpIGZv
ciBwbHVnaW4tY29tcGF0aWJpbGl0eQorCisyLjQuMQorPT09PT0KKworLSBXaGVuIHVzaW5nIHBh
cnNlci5hZGRvcHRpb24oKSB1bmljb2RlIGFyZ3VtZW50cyB0byB0aGUKKyAgInR5cGUiIGtleXdv
cmQgc2hvdWxkIGFsc28gYmUgY29udmVydGVkIHRvIHRoZSByZXNwZWN0aXZlIHR5cGVzLgorICB0
aGFua3MgRmxvcmlzIEJydXlub29naGUsIEBkbm96YXkuIChmaXhlcyBpc3N1ZTM2MCBhbmQgaXNz
dWUzNjIpCisKKy0gZml4IGRvdHRlZCBmaWxlbmFtZSBjb21wbGV0aW9uIHdoZW4gdXNpbmcgYXJn
Y29tcGxldGUKKyAgdGhhbmtzIEFudGhvbiB2YW4gZGVyIE5ldXRoLiAoZml4ZXMgaXNzdWUzNjEp
CisKKy0gZml4IHJlZ3Jlc3Npb24gd2hlbiBhIDEtdHVwbGUgKCJhcmciLCkgaXMgdXNlZCBmb3Ig
c3BlY2lmeWluZworICBwYXJhbWV0cml6YXRpb24gKHRoZSB2YWx1ZXMgb2YgdGhlIHBhcmFtZXRy
aXphdGlvbiB3ZXJlIHBhc3NlZAorICBuZXN0ZWQgaW4gYSB0dXBsZSkuICBUaGFua3MgRG9uYWxk
IFN0dWZmdC4KKworLSBtZXJnZSBkb2MgdHlwbyBmaXhlcywgdGhhbmtzIEFuZHkgRGlybmJlcmdl
cgorCisyLjQKKz09PQorCitrbm93biBpbmNvbXBhdGliaWxpdGllczoKKworLSBpZiBjYWxsaW5n
IC0tZ2Vuc2NyaXB0IGZyb20gcHl0aG9uMi43IG9yIGFib3ZlLCB5b3Ugb25seSBnZXQgYQorICBz
dGFuZGFsb25lIHNjcmlwdCB3aGljaCB3b3JrcyBvbiBweXRob24yLjcgb3IgYWJvdmUuICBVc2Ug
UHl0aG9uMi42CisgIHRvIGFsc28gZ2V0IGEgcHl0aG9uMi41IGNvbXBhdGlibGUgdmVyc2lvbi4K
KworLSBhbGwgeHVuaXQtc3R5bGUgdGVhcmRvd24gbWV0aG9kcyAobm9zZS1zdHlsZSwgcHl0ZXN0
LXN0eWxlLAorICB1bml0dGVzdC1zdHlsZSkgd2lsbCBub3QgYmUgY2FsbGVkIGlmIHRoZSBjb3Jy
ZXNwb25kaW5nIHNldHVwIG1ldGhvZCBmYWlsZWQsCisgIHNlZSBpc3N1ZTMyMiBiZWxvdy4KKwor
LSB0aGUgcHl0ZXN0X3BsdWdpbl91bnJlZ2lzdGVyIGhvb2sgd2Fzbid0IGV2ZXIgcHJvcGVybHkg
Y2FsbGVkCisgIGFuZCB0aGVyZSBpcyBubyBrbm93biBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgaG9v
ayAtIHNvIGl0IGdvdCByZW1vdmVkLgorCistIHB5dGVzdC5maXh0dXJlLWRlY29yYXRlZCBmdW5j
dGlvbnMgY2Fubm90IGJlIGdlbmVyYXRvcnMgKGkuZS4gdXNlCisgIHlpZWxkKSBhbnltb3JlLiAg
VGhpcyBjaGFuZ2UgbWlnaHQgYmUgcmV2ZXJzZWQgaW4gMi40LjEgaWYgaXQgY2F1c2VzCisgIHVu
Zm9yZXNlZW4gcmVhbC1saWZlIGlzc3Vlcy4gIEhvd2V2ZXIsIHlvdSBjYW4gYWx3YXlzIHdyaXRl
IGFuZCByZXR1cm4KKyAgYW4gaW5uZXIgZnVuY3Rpb24vZ2VuZXJhdG9yIGFuZCBjaGFuZ2UgdGhl
IGZpeHR1cmUgY29uc3VtZXIgdG8gaXRlcmF0ZQorICBvdmVyIHRoZSByZXR1cm5lZCBnZW5lcmF0
b3IuICBUaGlzIGNoYW5nZSB3YXMgZG9uZSBpbiBsaWV1IG9mIHRoZSBuZXcKKyAgYGBweXRlc3Qu
eWllbGRfZml4dHVyZWBgIGRlY29yYXRvciwgc2VlIGJlbG93LgorCituZXcgZmVhdHVyZXM6CisK
Ky0gZXhwZXJpbWVudGFsbHkgaW50cm9kdWNlIGEgbmV3IGBgcHl0ZXN0LnlpZWxkX2ZpeHR1cmVg
YCBkZWNvcmF0b3IKKyAgd2hpY2ggYWNjZXB0cyBleGFjdGx5IHRoZSBzYW1lIHBhcmFtZXRlcnMg
YXMgcHl0ZXN0LmZpeHR1cmUgYnV0CisgIG1hbmRhdGVzIGEgYGB5aWVsZGBgIHN0YXRlbWVudCBp
bnN0ZWFkIG9mIGEgYGByZXR1cm4gc3RhdGVtZW50YGAgZnJvbQorICBmaXh0dXJlIGZ1bmN0aW9u
cy4gIFRoaXMgYWxsb3dzIGRpcmVjdCBpbnRlZ3JhdGlvbiB3aXRoICJ3aXRoLXN0eWxlIgorICBj
b250ZXh0IG1hbmFnZXJzIGluIGZpeHR1cmUgZnVuY3Rpb25zIGFuZCBnZW5lcmFsbHkgYXZvaWRz
IHJlZ2lzdGVyaW5nCisgIG9mIGZpbmFsaXphdGlvbiBjYWxsYmFja3MgaW4gZmF2b3VyIG9mIHRy
ZWF0aW5nIHRoZSAiYWZ0ZXIteWllbGQiIGFzCisgIHRlYXJkb3duIGNvZGUuICBUaGFua3MgQW5k
cmVhcyBQZWxtZSwgVmxhZGltaXIgS2VsZXNoZXYsIEZsb3JpcworICBCcnV5bm9vZ2hlLCBSb25u
eSBQZmFubnNjaG1pZHQgYW5kIG1hbnkgb3RoZXJzIGZvciBkaXNjdXNzaW9ucy4KKworLSBhbGxv
dyBib29sZWFuIGV4cHJlc3Npb24gZGlyZWN0bHkgd2l0aCBza2lwaWYveGZhaWwKKyAgaWYgYSAi
cmVhc29uIiBpcyBhbHNvIHNwZWNpZmllZC4gIFJld29yayBza2lwcGluZyBkb2N1bWVudGF0aW9u
CisgIHRvIHJlY29tbWVuZCAiY29uZGl0aW9uIGFzIGJvb2xlYW5zIiBiZWNhdXNlIGl0IHByZXZl
bnRzIHN1cnByaXNlcworICB3aGVuIGltcG9ydGluZyBtYXJrZXJzIGJldHdlZW4gbW9kdWxlcy4g
IFNwZWNpZnlpbmcgY29uZGl0aW9ucworICBhcyBzdHJpbmdzIHdpbGwgcmVtYWluIGZ1bGx5IHN1
cHBvcnRlZC4KKworLSByZXBvcnRpbmc6IGNvbG9yIHRoZSBsYXN0IGxpbmUgcmVkIG9yIGdyZWVu
IGRlcGVuZGluZyBpZgorICBmYWlsdXJlcy9lcnJvcnMgb2NjdXJyZWQgb3IgZXZlcnl0aGluZyBw
YXNzZWQuICB0aGFua3MgQ2hyaXN0aWFuCisgIFRoZXVuZXJ0LgorCistIG1ha2UgImltcG9ydCBw
ZGIgOyBwZGIuc2V0X3RyYWNlKCkiIHdvcmsgbmF0aXZlbHkgd3J0IGNhcHR1cmluZyAobm8KKyAg
Ii1zIiBuZWVkZWQgYW55bW9yZSksIG1ha2luZyBgYHB5dGVzdC5zZXRfdHJhY2UoKWBgIGEgbWVy
ZSBzaG9ydGN1dC4KKworLSBmaXggaXNzdWUxODE6IC0tcGRiIG5vdyBhbHNvIHdvcmtzIG9uIGNv
bGxlY3QgZXJyb3JzIChhbmQKKyAgb24gaW50ZXJuYWwgZXJyb3JzKSAuICBUaGlzIHdhcyBpbXBs
ZW1lbnRlZCBieSBhIHNsaWdodCBpbnRlcm5hbAorICByZWZhY3RvcmluZyBhbmQgdGhlIGludHJv
ZHVjdGlvbiBvZiBhIG5ldyBob29rCisgIGBgcHl0ZXN0X2V4Y2VwdGlvbl9pbnRlcmFjdGBgIGhv
b2sgKHNlZSBuZXh0IGl0ZW0pLgorCistIGZpeCBpc3N1ZTM0MTogaW50cm9kdWNlIG5ldyBleHBl
cmltZW50YWwgaG9vayBmb3IgSURFcy90ZXJtaW5hbHMgdG8KKyAgaW50ZXJjZXB0IGRlYnVnZ2lu
ZzogYGBweXRlc3RfZXhjZXB0aW9uX2ludGVyYWN0KG5vZGUsIGNhbGwsIHJlcG9ydClgYC4KKwor
LSBuZXcgbW9ua2V5cGF0Y2guc2V0YXR0cigpIHZhcmlhbnQgdG8gcHJvdmlkZSBhIHNob3J0ZXIK
KyAgaW52b2NhdGlvbiBmb3IgcGF0Y2hpbmcgb3V0IGNsYXNzZXMvZnVuY3Rpb25zIGZyb20gbW9k
dWxlczoKKworICAgICBtb25rZXlwYXRjaC5zZXRhdHRyKCJyZXF1ZXN0cy5nZXQiLCBteWZ1bmMp
CisKKyAgd2lsbCByZXBsYWNlIHRoZSAiZ2V0IiBmdW5jdGlvbiBvZiB0aGUgInJlcXVlc3RzIiBt
b2R1bGUgd2l0aCBgYG15ZnVuY2BgLgorCistIGZpeCBpc3N1ZTMyMjogdGVhckRvd25DbGFzcyBp
cyBub3QgcnVuIGlmIHNldFVwQ2xhc3MgZmFpbGVkLiBUaGFua3MKKyAgTWF0aGlldSBBZ29waWFu
IGZvciB0aGUgaW5pdGlhbCBmaXguICBBbHNvIG1ha2UgYWxsIG9mIHB5dGVzdC9ub3NlCisgIGZp
bmFsaXplciBtaW1pY2sgdGhlIHNhbWUgZ2VuZXJpYyBiZWhhdmlvdXI6IGlmIGEgc2V0dXBYIGV4
aXN0cyBhbmQKKyAgZmFpbHMsIGRvbid0IHJ1biB0ZWFyZG93blguICBUaGlzIGludGVybmFsbHkg
aW50cm9kdWNlcyBhIG5ldyBtZXRob2QKKyAgIm5vZGUuYWRkZmluYWxpemVyKCkiIGhlbHBlciB3
aGljaCBjYW4gb25seSBiZSBjYWxsZWQgZHVyaW5nIHRoZSBzZXR1cAorICBwaGFzZSBvZiBhIG5v
ZGUuCisKKy0gc2ltcGxpZnkgcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoKSBzaWduYXR1cmU6IGFs
bG93IHRvIHBhc3MgYQorICBDU1Ytc2VwYXJhdGVkIHN0cmluZyB0byBzcGVjaWZ5IGFyZ25hbWVz
LiAgRm9yIGV4YW1wbGU6CisgIGBgcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoImlucHV0LGV4cGVj
dGVkIiwgIFsoMSwyKSwgKDIsMyldKWBgCisgIHdvcmtzIGFzIHdlbGwgYXMgdGhlIHByZXZpb3Vz
OgorICBgYHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKCgiaW5wdXQiLCAiZXhwZWN0ZWQiKSwgLi4u
KWBgLgorCistIGFkZCBzdXBwb3J0IGZvciBzZXRVcE1vZHVsZS90ZWFyRG93bk1vZHVsZSBkZXRl
Y3Rpb24sIHRoYW5rcyBCcmlhbiBPa2tlbi4KKworLSBpbnRlZ3JhdGUgdGFiLWNvbXBsZXRpb24g
b24gb3B0aW9ucyB0aHJvdWdoIHVzZSBvZiAiYXJnY29tcGxldGUiLgorICBUaGFua3MgQW50aG9u
IHZhbiBkZXIgTmV1dCBmb3IgdGhlIFBSLgorCistIGNoYW5nZSBvcHRpb24gbmFtZXMgdG8gYmUg
aHlwaGVuLXNlcGFyYXRlZCBsb25nIG9wdGlvbnMgYnV0IGtlZXAgdGhlCisgIG9sZCBzcGVsbGlu
ZyBiYWNrd2FyZCBjb21wYXRpYmxlLiAgcHkudGVzdCAtaCB3aWxsIG9ubHkgc2hvdyB0aGUKKyAg
aHlwaGVuYXRlZCB2ZXJzaW9uLCBmb3IgZXhhbXBsZSAiLS1jb2xsZWN0LW9ubHkiIGJ1dCAiLS1j
b2xsZWN0b25seSIKKyAgd2lsbCByZW1haW4gdmFsaWQgYXMgd2VsbCAoZm9yIGJhY2t3YXJkLWNv
bXBhdCByZWFzb25zKS4gIE1hbnkgdGhhbmtzIHRvCisgIEFudGhvbiB2YW4gZGVyIE5ldXQgZm9y
IHRoZSBpbXBsZW1lbnRhdGlvbiBhbmQgdG8gSHluZWsgU2NobGF3YWNrIGZvcgorICBwdXNoaW5n
IHVzLgorCistIGZpeCBpc3N1ZSAzMDggLSBhbGxvdyB0byBtYXJrL3hmYWlsL3NraXAgaW5kaXZp
ZHVhbCBwYXJhbWV0ZXIgc2V0cworICB3aGVuIHBhcmFtZXRyaXppbmcuICBUaGFua3MgQnJpYW5u
YSBMYXVnaGVyLgorCistIGNhbGwgbmV3IGV4cGVyaW1lbnRhbCBweXRlc3RfbG9hZF9pbml0aWFs
X2NvbmZ0ZXN0cyBob29rIHRvIGFsbG93CisgIDNyZCBwYXJ0eSBwbHVnaW5zIHRvIGRvIHNvbWV0
aGluZyBiZWZvcmUgYSBjb25mdGVzdCBpcyBsb2FkZWQuCisKK0J1ZyBmaXhlczoKKworLSBmaXgg
aXNzdWUzNTggLSBjYXB0dXJpbmcgb3B0aW9ucyBhcmUgbm93IHBhcnNlZCBtb3JlIHByb3Blcmx5
CisgIGJ5IHVzaW5nIGEgbmV3IHBhcnNlci5wYXJzZV9rbm93bl9hcmdzIG1ldGhvZC4KKworLSBw
eXRlc3Qgbm93IHVzZXMgYXJncGFyc2UgaW5zdGVhZCBvZiBvcHRwYXJzZSAodGhhbmtzIEFudGhv
bikgd2hpY2gKKyAgbWVhbnMgdGhhdCAiYXJncGFyc2UiIGlzIGFkZGVkIGFzIGEgZGVwZW5kZW5j
eSBpZiBpbnN0YWxsaW5nIGludG8gcHl0aG9uMi42CisgIGVudmlyb25tZW50cyBvciBiZWxvdy4K
KworLSBmaXggaXNzdWUzMzM6IGZpeCBhIGNhc2Ugb2YgYmFkIHVuaXR0ZXN0L3B5dGVzdCBob29r
IGludGVyYWN0aW9uLgorCistIFBSMjc6IGNvcnJlY3RseSBoYW5kbGUgbm9zZS5Ta2lwVGVzdCBk
dXJpbmcgY29sbGVjdGlvbi4gIFRoYW5rcworICBBbnRvbmlvIEN1bmksIFJvbm55IFBmYW5uc2No
bWlkdC4KKworLSBmaXggaXNzdWUzNTU6IGp1bml0eG1sIHB1dHMgbmFtZT0icHl0ZXN0IiBhdHRy
aWJ1dGUgdG8gdGVzdHN1aXRlIHRhZy4KKworLSBmaXggaXNzdWUzMzY6IGF1dG91c2UgZml4dHVy
ZSBpbiBwbHVnaW5zIHNob3VsZCB3b3JrIGFnYWluLgorCistIGZpeCBpc3N1ZTI3OTogaW1wcm92
ZSBvYmplY3QgY29tcGFyaXNvbnMgb24gYXNzZXJ0aW9uIGZhaWx1cmUKKyAgZm9yIHN0YW5kYXJk
IGRhdGF0eXBlcyBhbmQgcmVjb2duaXNlIGNvbGxlY3Rpb25zLmFiYy4gIFRoYW5rcyB0bworICBC
cmlhbm5hIExhdWdoZXIgYW5kIE1hdGhpZXUgQWdvcGlhbi4KKworLSBmaXggaXNzdWUzMTc6IGFz
c2VydGlvbiByZXdyaXRlciBzdXBwb3J0IGZvciB0aGUgaXNfcGFja2FnZSBtZXRob2QKKworLSBm
aXggaXNzdWUzMzU6IGRvY3VtZW50IHB5LmNvZGUuRXhjZXB0aW9uSW5mbygpIG9iamVjdCByZXR1
cm5lZAorICBmcm9tIHB5dGVzdC5yYWlzZXMoKSwgdGhhbmtzIE1hdGhpZXUgQWdvcGlhbi4KKwor
LSByZW1vdmUgaW1wbGljaXQgZGlzdHJpYnV0ZV9zZXR1cCBzdXBwb3J0IGZyb20gc2V0dXAucHku
CisKKy0gZml4IGlzc3VlMzA1OiBpZ25vcmUgYW55IHByb2JsZW1zIHdoZW4gd3JpdGluZyBweWMg
ZmlsZXMuCisKKy0gU08tMTc2NjQ3MDI6IGNhbGwgZml4dHVyZSBmaW5hbGl6ZXJzIGV2ZW4gaWYg
dGhlIGZpeHR1cmUgZnVuY3Rpb24KKyAgcGFydGlhbGx5IGZhaWxlZCAoZmluYWxpemVycyB3b3Vs
ZCBub3QgYWx3YXlzIGJlIGNhbGxlZCBiZWZvcmUpCisKKy0gZml4IGlzc3VlMzIwIC0gZml4IGNs
YXNzIHNjb3BlIGZvciBmaXh0dXJlcyB3aGVuIG1peGVkIHdpdGgKKyAgbW9kdWxlLWxldmVsIGZ1
bmN0aW9ucy4gIFRoYW5rcyBBbmF0bG95IEJ1YmVua29mZi4KKworLSB5b3UgY2FuIHNwZWNpZnkg
Ii1xIiBvciAiLXFxIiB0byBnZXQgZGlmZmVyZW50IGxldmVscyBvZiAicXVpZXRlciIKKyAgcmVw
b3J0aW5nICh0aGFua3MgS2F0YXJ6eW5hIEphY2hpbSkKKworLSBmaXggaXNzdWUzMDAgLSBGaXgg
b3JkZXIgb2YgY29uZnRlc3QgbG9hZGluZyB3aGVuIHN0YXJ0aW5nIHB5LnRlc3QKKyAgaW4gYSBz
dWJkaXJlY3RvcnkuCisKKy0gZml4IGlzc3VlMzIzIC0gc29ydGluZyBvZiBtYW55IG1vZHVsZS1z
Y29wZWQgYXJnIHBhcmFtZXRyaXphdGlvbnMKKworLSBtYWtlIHNlc3Npb25maW5pc2ggaG9va3Mg
ZXhlY3V0ZSB3aXRoIHRoZSBzYW1lIGN3ZC1jb250ZXh0IGFzIGF0CisgIHNlc3Npb24gc3RhcnQg
KGhlbHBzIGZpeCBwbHVnaW4gYmVoYXZpb3VyIHdoaWNoIHdyaXRlIG91dHB1dCBmaWxlcworICB3
aXRoIHJlbGF0aXZlIHBhdGggc3VjaCBhcyBweXRlc3QtY292KQorCistIGZpeCBpc3N1ZTMxNiAt
IHByb3Blcmx5IHJlZmVyZW5jZSBjb2xsZWN0aW9uIGhvb2tzIGluIGRvY3MKKworLSBmaXggaXNz
dWUgMzA2IC0gY2xlYW51cCBvZiAtay8tbSBvcHRpb25zIHRvIG9ubHkgbWF0Y2ggbWFya2Vycy90
ZXN0CisgIG5hbWVzL2tleXdvcmRzIHJlc3BlY3RpdmVseS4gIFRoYW5rcyBXb3V0ZXIgdmFuIEFj
a29veS4KKworLSBpbXByb3ZlZCBkb2N0ZXN0IGNvdW50aW5nIGZvciBkb2N0ZXN0cyBpbiBweXRo
b24gbW9kdWxlcyAtLQorICBmaWxlcyB3aXRob3V0IGFueSBkb2N0ZXN0IGl0ZW1zIHdpbGwgbm90
IHNob3cgdXAgYW55bW9yZQorICBhbmQgZG9jdGVzdCBleGFtcGxlcyBhcmUgY291bnRlZCBhcyBz
ZXBhcmF0ZSB0ZXN0IGl0ZW1zLgorICB0aGFua3MgRGFuaWxvIEJlbGxpbmkuCisKKy0gZml4IGlz
c3VlMjQ1IGJ5IGRlcGVuZGluZyBvbiB0aGUgcmVsZWFzZWQgcHktMS40LjE0CisgIHdoaWNoIGZp
eGVzIHB5LmlvLmR1cGZpbGUgdG8gd29yayB3aXRoIGZpbGVzIHdpdGggbm8KKyAgbW9kZS4gVGhh
bmtzIEphc29uIFIuIENvb21icy4KKworLSBmaXgganVuaXR4bWwgZ2VuZXJhdGlvbiB3aGVuIHRl
c3Qgb3V0cHV0IGNvbnRhaW5zIGNvbnRyb2wgY2hhcmFjdGVycywKKyAgYWRkcmVzc2luZyBpc3N1
ZTI2NywgdGhhbmtzIEphYXAgQnJvZWtodWl6ZW4KKworLSBmaXggaXNzdWUzMzg6IGhvbm9yIC0t
dGIgc3R5bGUgZm9yIHNldHVwL3RlYXJkb3duIGVycm9ycyBhcyB3ZWxsLiAgVGhhbmtzIE1haG8u
CisKKy0gZml4IGlzc3VlMzA3IC0gdXNlIHlhbWwuc2FmZV9sb2FkIGluIGV4YW1wbGUsIHRoYW5r
cyBNYXJrIEVpY2hpbi4KKworLSBiZXR0ZXIgcGFyYW1ldHJpemUgZXJyb3IgbWVzc2FnZXMsIHRo
YW5rcyBCcmlhbm5hIExhdWdoZXIKKworLSBweXRlc3RfdGVybWluYWxfc3VtbWFyeSh0ZXJtaW5h
bHJlcG9ydGVyKSBob29rcyBjYW4gbm93IHVzZQorICAiLnNlY3Rpb24odGl0bGUpIiBhbmQgIi5s
aW5lKG1zZykiIG1ldGhvZHMgdG8gcHJpbnQgZXh0cmEKKyAgaW5mb3JtYXRpb24gYXQgdGhlIGVu
ZCBvZiBhIHRlc3QgcnVuLgorCisyLjMuNQorPT09PT0KKworLSBmaXggaXNzdWUxNjk6IHJlc3Bl
Y3QgLS10Yj1zdHlsZSB3aXRoIHNldHVwL3RlYXJkb3duIGVycm9ycyBhcyB3ZWxsLgorCistIG5l
dmVyIGNvbnNpZGVyIGEgZml4dHVyZSBmdW5jdGlvbiBmb3IgdGVzdCBmdW5jdGlvbiBjb2xsZWN0
aW9uCisKKy0gYWxsb3cgcmUtcnVubmluZyBvZiB0ZXN0IGl0ZW1zIC8gaGVscHMgdG8gZml4IHB5
dGVzdC1yZXJ1bnRlc3RzIHBsdWdpbgorICBhbmQgYWxzbyBoZWxwIHRvIGtlZXAgbGVzcyBmaXh0
dXJlL3Jlc291cmNlIHJlZmVyZW5jZXMgYWxpdmUKKworLSBwdXQgY2FwdHVyZWQgc3Rkb3V0L3N0
ZGVyciBpbnRvIGp1bml0eG1sIG91dHB1dCBldmVuIGZvciBwYXNzaW5nIHRlc3RzCisgICh0aGFu
a3MgQWRhbSBHb3VjaGVyKQorCistIElzc3VlIDI2NSAtIGludGVncmF0ZSBub3NlIHNldHVwL3Rl
YXJkb3duIHdpdGggc2V0dXBzdGF0ZQorICBzbyBpdCBkb2VzbnQgdHJ5IHRvIHRlYXJkb3duIGlm
IGl0IGRpZCBub3Qgc2V0dXAKKworLSBpc3N1ZSAyNzEgLSBkb250IHdyaXRlIGp1bml0eG1sIG9u
IHNsYXZlIG5vZGVzCisKKy0gSXNzdWUgMjc0IC0gZG9udCB0cnkgdG8gc2hvdyBmdWxsIGRvY3Rl
c3QgZXhhbXBsZQorICB3aGVuIGRvY3Rlc3QgZG9lcyBub3Qga25vdyB0aGUgZXhhbXBsZSBsb2Nh
dGlvbgorCistIGlzc3VlIDI4MCAtIGRpc2FibGUgYXNzZXJ0aW9uIHJld3JpdGluZyBvbiBidWdn
eSBDUHl0aG9uIDIuNi4wCisKKy0gaW5qZWN0ICJnZXRmaXh0dXJlKCkiIGhlbHBlciB0byByZXRy
aWV2ZSBmaXh0dXJlcyBmcm9tIGRvY3Rlc3RzLAorICB0aGFua3MgQW5kcmVhcyBaZWlkbGVyCisK
Ky0gaXNzdWUgMjU5IC0gd2hlbiBhc3NlcnRpb24gcmV3cml0aW5nLCBiZSBjb25zaXN0ZW50IHdp
dGggdGhlIGRlZmF1bHQKKyAgc291cmNlIGVuY29kaW5nIG9mIEFTQ0lJIG9uIFB5dGhvbiAyCisK
Ky0gaXNzdWUgMjUxIC0gcmVwb3J0IGEgc2tpcCBpbnN0ZWFkIG9mIGlnbm9yaW5nIGNsYXNzZXMg
d2l0aCBpbml0CisKKy0gaXNzdWUyNTAgdW5pY29kZS9zdHIgbWl4ZXMgaW4gcGFyYW1ldHJpemF0
aW9uIG5hbWVzIGFuZCB2YWx1ZXMgbm93IHdvcmtzCisKKy0gaXNzdWUyNTcsIGFzc2VydGlvbi10
cmlnZ2VyZWQgY29tcGlsYXRpb24gb2Ygc291cmNlIGVuZGluZyBpbiBhCisgIGNvbW1lbnQgbGlu
ZSBkb2Vzbid0IGJsb3cgdXAgaW4gcHl0aG9uMi41IChmaXhlZCB0aHJvdWdoIHB5Pj0xLjQuMTMu
ZGV2NikKKworLSBmaXggLS1nZW5zY3JpcHQgb3B0aW9uIHRvIGdlbmVyYXRlIHN0YW5kYWxvbmUg
c2NyaXB0cyB0aGF0IGFsc28KKyAgd29yayB3aXRoIHB5dGhvbjMuMyAoaW1wb3J0ZXIgb3JkZXJp
bmcpCisKKy0gaXNzdWUxNzEgLSBpbiBhc3NlcnRpb24gcmV3cml0aW5nLCBzaG93IHRoZSByZXBy
IG9mIHNvbWUKKyAgZ2xvYmFsIHZhcmlhYmxlcworCistIGZpeCBvcHRpb24gaGVscCBmb3IgIi1r
IgorCistIG1vdmUgbG9uZyBkZXNjcmlwdGlvbiBvZiBkaXN0cmlidXRpb24gaW50byBSRUFETUUu
cnN0CisKKy0gaW1wcm92ZSBkb2NzdHJpbmcgZm9yIG1ldGFmdW5jLnBhcmFtZXRyaXplKCkKKwor
LSBmaXggYnVnIHdoZXJlIHVzaW5nIGNhcHN5cyB3aXRoIHB5dGVzdC5zZXRfdHJhY2UoKSBpbiBh
IHRlc3QKKyAgZnVuY3Rpb24gd291bGQgYnJlYWsgd2hlbiBsb29raW5nIGF0IGNhcHN5cy5yZWFk
b3V0ZXJyKCkKKworLSBhbGxvdyB0byBzcGVjaWZ5IHByZWZpeGVzIHN0YXJ0aW5nIHdpdGggIl8i
IHdoZW4KKyAgY3VzdG9taXppbmcgcHl0aG9uX2Z1bmN0aW9ucyB0ZXN0IGRpc2NvdmVyeS4gKHRo
YW5rcyBHcmFoYW0gSG9ybGVyKQorCistIGltcHJvdmUgUFlURVNUX0RFQlVHIHRyYWNpbmcgb3V0
cHV0IGJ5IHB1dGluZworICBleHRyYSBkYXRhIG9uIGEgbmV3IGxpbmVzIHdpdGggYWRkaXRpb25h
bCBpbmRlbnQKKworLSBlbnN1cmUgT3V0Y29tZUV4Y2VwdGlvbnMgbGlrZSBza2lwL2ZhaWwgaGF2
ZSBpbml0aWFsaXplZCBleGNlcHRpb24gYXR0cmlidXRlcworCistIGlzc3VlIDI2MCAtIGRvbid0
IHVzZSBub3NlIHNwZWNpYWwgc2V0dXAgb24gcGxhaW4gdW5pdHRlc3QgY2FzZXMKKworLSBmaXgg
aXNzdWUxMzQgLSBwcmludCB0aGUgY29sbGVjdCBlcnJvcnMgdGhhdCBwcmV2ZW50IHJ1bm5pbmcg
c3BlY2lmaWVkIHRlc3QgaXRlbXMKKworLSBmaXggaXNzdWUyNjYgLSBhY2NlcHQgdW5pY29kZSBp
biBNYXJrRXZhbHVhdG9yIGV4cHJlc3Npb25zCisKKzIuMy40Cis9PT09PQorCistIHlpZWxkZWQg
dGVzdCBmdW5jdGlvbnMgd2lsbCBub3cgaGF2ZSBhdXRvdXNlLWZpeHR1cmVzIGFjdGl2ZSBidXQK
KyAgY2Fubm90IGFjY2VwdCBmaXh0dXJlcyBhcyBmdW5jYXJncyAtIGl0J3MgYW55d2F5IHJlY29t
bWVuZGVkIHRvCisgIHJhdGhlciB1c2UgdGhlIHBvc3QtMi4wIHBhcmFtZXRyaXplIGZlYXR1cmVz
IGluc3RlYWQgb2YgeWllbGQsIHNlZToKKyAgaHR0cDovL3B5dGVzdC5vcmcvbGF0ZXN0L2V4YW1w
bGUvcGFyYW1ldHJpemUuaHRtbAorLSBmaXggYXV0b3VzZS1pc3N1ZSB3aGVyZSBhdXRvdXNlLWZp
eHR1cmVzIHdvdWxkIG5vdCBiZSBkaXNjb3ZlcmVkCisgIGlmIGRlZmluZWQgaW4gYSBhL2NvbmZ0
ZXN0LnB5IGZpbGUgYW5kIHRlc3RzIGluIGEvdGVzdHMvdGVzdF9zb21lLnB5CistIGZpeCBpc3N1
ZTIyNiAtIExJRk8gb3JkZXJpbmcgZm9yIGZpeHR1cmUgdGVhcmRvd25zCistIGZpeCBpc3N1ZTIy
NCAtIGludm9jYXRpb25zIHdpdGggPjI1NiBjaGFyIGFyZ3VtZW50cyBub3cgd29yaworLSBmaXgg
aXNzdWU5MSAtIGFkZC9kaXNjdXNzIHBhY2thZ2UvZGlyZWN0b3J5IGxldmVsIHNldHVwcyBpbiBl
eGFtcGxlCistIGFsbG93IHRvIGR5bmFtaWNhbGx5IGRlZmluZSBtYXJrZXJzIHZpYQorICBpdGVt
LmtleXdvcmRzWy4uLl09YXNzaWdubWVudCBpbnRlZ3JhdGluZyB3aXRoICItbSIgb3B0aW9uCist
IG1ha2UgIi1rIiBhY2NlcHQgYW4gZXhwcmVzc2lvbnMgdGhlIHNhbWUgYXMgd2l0aCAiLW0iIHNv
IHRoYXQgb25lCisgIGNhbiB3cml0ZTogLWsgIm5hbWUxIG9yIG5hbWUyIiBldGMuICBUaGlzIGlz
IGEgc2xpZ2h0IGluY29tcGF0aWJpbGl0eQorICBpZiB5b3UgdXNlZCBzcGVjaWFsIHN5bnRheCBs
aWtlICJUZXN0Q2xhc3MudGVzdF9tZXRob2QiIHdoaWNoIHlvdSBub3cKKyAgbmVlZCB0byB3cml0
ZSBhcyAtayAiVGVzdENsYXNzIGFuZCB0ZXN0X21ldGhvZCIgdG8gbWF0Y2ggYSBjZXJ0YWluCisg
IG1ldGhvZCBpbiBhIGNlcnRhaW4gdGVzdCBjbGFzcy4KKworMi4zLjMKKz09PT09CisKKy0gZml4
IGlzc3VlMjE0IC0gcGFyc2UgbW9kdWxlcyB0aGF0IGNvbnRhaW4gc3BlY2lhbCBvYmplY3RzIGxp
a2UgZS4gZy4KKyAgZmxhc2sncyByZXF1ZXN0IG9iamVjdCB3aGljaCBibG93cyB1cCBvbiBnZXRh
dHRyIGFjY2VzcyBpZiBubyByZXF1ZXN0CisgIGlzIGFjdGl2ZS4gdGhhbmtzIFRob21hcyBXYWxk
bWFubi4KKworLSBmaXggaXNzdWUyMTMgLSBhbGxvdyB0byBwYXJhbWV0cml6ZSB3aXRoIHZhbHVl
cyBsaWtlIG51bXB5IGFycmF5cyB0aGF0CisgIGRvIG5vdCBzdXBwb3J0IGFuIF9fZXFfXyBvcGVy
YXRvcgorCistIGZpeCBpc3N1ZTIxNSAtIHNwbGl0IHRlc3RfcHl0aG9uLm9yZyBpbnRvIG11bHRp
cGxlIGZpbGVzCisKKy0gZml4IGlzc3VlMTQ4IC0gQHVuaXR0ZXN0LnNraXAgb24gY2xhc3NlcyBp
cyBub3cgcmVjb2duaXplZCBhbmQgYXZvaWRzCisgIGNhbGxpbmcgc2V0VXBDbGFzcy90ZWFyRG93
bkNsYXNzLCB0aGFua3MgUGF2ZWwgUmVwaW4KKworLSBmaXggaXNzdWUyMDkgLSByZWludHJvZHVj
ZSBweXRob24yLjQgc3VwcG9ydCBieSBkZXBlbmRpbmcgb24gbmV3ZXIKKyAgcHlsaWIgd2hpY2gg
cmUtaW50cm9kdWNlZCBzdGF0ZW1lbnQtZmluZGluZyBmb3IgcHJlLUFTVCBpbnRlcnByZXRlcnMK
KworLSBub3NlIHN1cHBvcnQ6IG9ubHkgY2FsbCBzZXR1cCBpZiBpdHMgYSBjYWxsYWJsZSwgdGhh
bmtzIEFuZHJldworICBUYXVtb2Vmb2xhdQorCistIGZpeCBpc3N1ZTIxOSAtIGFkZCBweTIuNC0z
LjMgY2xhc3NpZmllcnMgdG8gVFJPVkUgbGlzdAorCistIGluIHRyYWNlYmFja3MgKiwqKiBhcmcg
dmFsdWVzIGFyZSBub3cgc2hvd24gbmV4dCB0byBub3JtYWwgYXJndW1lbnRzCisgICh0aGFua3Mg
TWFudWVsIEphY29iKQorCistIGZpeCBpc3N1ZTIxNyAtIHN1cHBvcnQgbW9jay5wYXRjaCB3aXRo
IHB5dGVzdCdzIGZpeHR1cmVzIC0gbm90ZSB0aGF0CisgIHlvdSBuZWVkIGVpdGhlciBtb2NrLTEu
MC4xIG9yIHRoZSBweXRob24zLjMgYnVpbHRpbiB1bml0dGVzdC5tb2NrLgorCistIGZpeCBpc3N1
ZTEyNyAtIGltcHJvdmUgZG9jdW1lbnRhdGlvbiBmb3IgcHl0ZXN0X2FkZG9wdGlvbigpIGFuZAor
ICBhZGQgYSBgYGNvbmZpZy5nZXRvcHRpb24obmFtZSlgYCBoZWxwZXIgZnVuY3Rpb24gZm9yIGNv
bnNpc3RlbmN5LgorCisyLjMuMgorPT09PT0KKworLSBmaXggaXNzdWUyMDggYW5kIGZpeCBpc3N1
ZTI5IHVzZSBuZXcgcHkgdmVyc2lvbiB0byBhdm9pZCBsb25nIHBhdXNlcworICB3aGVuIHByaW50
aW5nIHRyYWNlYmFja3MgaW4gbG9uZyBtb2R1bGVzCisKKy0gZml4IGlzc3VlMjA1IC0gY29uZnRl
c3RzIGluIHN1YmRpcnMgY3VzdG9taXppbmcKKyAgcHl0ZXN0X3B5Y29sbGVjdF9tYWtlbW9kdWxl
IGFuZCBweXRlc3RfcHljb2xsZWN0X21ha2VpdGVtCisgIG5vdyB3b3JrIHByb3Blcmx5CisKKy0g
Zml4IHRlYXJkb3duLW9yZGVyaW5nIGZvciBwYXJhbWV0cml6ZWQgc2V0dXBzCisKKy0gZml4IGlz
c3VlMTI3IC0gYmV0dGVyIGRvY3VtZW50YXRpb24gZm9yIHB5dGVzdF9hZGRvcHRpb24KKyAgYW5k
IHJlbGF0ZWQgb2JqZWN0cy4KKworLSBmaXggdW5pdHRlc3QgYmVoYXZpb3VyOiBUZXN0Q2FzZS5y
dW50ZXN0IG9ubHkgY2FsbGVkIGlmIHRoZXJlIGFyZQorICB0ZXN0IG1ldGhvZHMgZGVmaW5lZAor
CistIGltcHJvdmUgdHJpYWwgc3VwcG9ydDogZG9uJ3QgY29sbGVjdCBpdHMgZW1wdHkKKyAgdW5p
dHRlc3QuVGVzdENhc2UucnVuVGVzdCgpIG1ldGhvZAorCistICJweXRob24gc2V0dXAucHkgdGVz
dCIgbm93IHdvcmtzIHdpdGggcHl0ZXN0IGl0c2VsZgorCistIGZpeC9pbXByb3ZlIGludGVybmFs
L3BhY2thZ2luZyByZWxhdGVkIGJpdHM6CisKKyAgLSBleGNlcHRpb24gbWVzc2FnZSBjaGVjayBv
ZiB0ZXN0X25vc2UucHkgbm93IHBhc3NlcyBvbiBweXRob24zMyBhcyB3ZWxsCisKKyAgLSBpc3N1
ZTIwNiAtIGZpeCB0ZXN0X2Fzc2VydHJld3JpdGUucHkgdG8gd29yayB3aGVuIGEgZ2xvYmFsCisg
ICAgUFlUSE9ORE9OVFdSSVRFQllURUNPREU9MSBpcyBwcmVzZW50CisKKyAgLSBhZGQgdG94Lmlu
aSB0byBweXRlc3QgZGlzdHJpYnV0aW9uIHNvIHRoYXQgaWdub3JlLWRpcnMgYW5kIG90aGVycyBj
b25maWcKKyAgICBiaXRzIGFyZSBwcm9wZXJseSBkaXN0cmlidXRlZCBmb3IgbWFpbnRhaW5lcnMg
d2hvIHJ1biBweXRlc3Qtb3duIHRlc3RzCisKKzIuMy4xCis9PT09PQorCistIGZpeCBpc3N1ZTIw
MiAtIGZpeCByZWdyZXNzaW9uOiB1c2luZyAic2VsZiIgZnJvbSBmaXh0dXJlIGZ1bmN0aW9ucyBu
b3cKKyAgd29ya3MgYXMgZXhwZWN0ZWQgKGl0J3MgdGhlIHNhbWUgInNlbGYiIGluc3RhbmNlIHRo
YXQgYSB0ZXN0IG1ldGhvZAorICB3aGljaCB1c2VzIHRoZSBmaXh0dXJlIHNlZXMpCisKKy0gc2tp
cCBwZXhwZWN0IHVzaW5nIHRlc3RzICh0ZXN0X3BkYi5weSBtb3N0bHkpIG9uIGZyZWVic2QqIHN5
c3RlbXMKKyAgZHVlIHRvIHBleHBlY3Qgbm90IHN1cHBvcnRpbmcgaXQgcHJvcGVybHkgKGhhbmdp
bmcpCisKKy0gbGluayB0byB3ZWIgcGFnZXMgZnJvbSAtLW1hcmtlcnMgb3V0cHV0IHdoaWNoIHBy
b3ZpZGVzIGhlbHAgZm9yCisgIHB5dGVzdC5tYXJrLiogdXNhZ2UuCisKKzIuMy4wCis9PT09PQor
CistIGZpeCBpc3N1ZTIwMiAtIGJldHRlciBhdXRvbWF0aWMgbmFtZXMgZm9yIHBhcmFtZXRyaXpl
ZCB0ZXN0IGZ1bmN0aW9ucworLSBmaXggaXNzdWUxMzkgLSBpbnRyb2R1Y2UgQHB5dGVzdC5maXh0
dXJlIHdoaWNoIGFsbG93cyBkaXJlY3Qgc2NvcGluZworICBhbmQgcGFyYW1ldHJpemF0aW9uIG9m
IGZ1bmNhcmcgZmFjdG9yaWVzLgorLSBmaXggaXNzdWUxOTggLSBjb25mdGVzdCBmaXh0dXJlcyB3
ZXJlIG5vdCBmb3VuZCBvbiB3aW5kb3dzMzIgaW4gc29tZQorICBjaXJjdW1zdGFuY2VzIHdpdGgg
bmVzdGVkIGRpcmVjdG9yeSBzdHJ1Y3R1cmVzIGR1ZSB0byBwYXRoIG1hbmlwdWxhdGlvbiBpc3N1
ZXMKKy0gZml4IGlzc3VlMTkzIHNraXAgdGVzdCBmdW5jdGlvbnMgd2l0aCB3ZXJlIHBhcmFtZXRy
aXplZCB3aXRoIGVtcHR5CisgIHBhcmFtZXRlciBzZXRzCistIGZpeCBweXRob24zLjMgY29tcGF0
LCBtb3N0bHkgcmVwb3J0aW5nIGJpdHMgdGhhdCBwcmV2aW91c2x5IGRlcGVuZGVkCisgIG9uIGRp
Y3Qgb3JkZXJpbmcKKy0gaW50cm9kdWNlIHJlLW9yZGVyaW5nIG9mIHRlc3RzIGJ5IHJlc291cmNl
IGFuZCBwYXJhbWV0cml6YXRpb24gc2V0dXAKKyAgd2hpY2ggdGFrZXMgcHJlY2VkZW5jZSB0byB0
aGUgdXN1YWwgZmlsZS1vcmRlcmluZworLSBmaXggaXNzdWUxODUgbW9ua2V5cGF0Y2hpbmcgdGlt
ZS50aW1lIGRvZXMgbm90IGNhdXNlIHB5dGVzdCB0byBmYWlsCistIGZpeCBpc3N1ZTE3MiBkdXBs
aWNhdGUgY2FsbCBvZiBweXRlc3QuZml4dHVyZSBkZWNvcmF0b3JlZCBzZXR1cF9tb2R1bGUKKyAg
ZnVuY3Rpb25zCistIGZpeCBqdW5pdHhtbD1wYXRoIGNvbnN0cnVjdGlvbiBzbyB0aGF0IGlmIHRl
c3RzIGNoYW5nZSB0aGUKKyAgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBhbmQgdGhlIHBhdGgg
aXMgYSByZWxhdGl2ZSBwYXRoCisgIGl0IGlzIGNvbnN0cnVjdGVkIGNvcnJlY3RseSBmcm9tIHRo
ZSBvcmlnaW5hbCBjdXJyZW50IHdvcmtpbmcgZGlyLgorLSBmaXggInB5dGhvbiBzZXR1cC5weSB0
ZXN0IiBleGFtcGxlIHRvIGNhdXNlIGEgcHJvcGVyICJlcnJubyIgcmV0dXJuCistIGZpeCBpc3N1
ZTE2NSAtIGZpeCBicm9rZW4gZG9jIGxpbmtzIGFuZCBtZW50aW9uIHN0YWNrb3ZlcmZsb3cgZm9y
IEZBUQorLSBjYXRjaCB1bmljb2RlLWlzc3VlcyB3aGVuIHdyaXRpbmcgZmFpbHVyZSByZXByZXNl
bnRhdGlvbnMKKyAgdG8gdGVybWluYWwgdG8gcHJldmVudCB0aGUgd2hvbGUgc2Vzc2lvbiBmcm9t
IGNyYXNoaW5nCistIGZpeCB4ZmFpbC9za2lwIGNvbmZ1c2lvbjogYSBza2lwLW1hcmsgb3IgYW4g
aW1wZXJhdGl2ZSBweXRlc3Quc2tpcAorICB3aWxsIG5vdyB0YWtlIHByZWNlZGVuY2UgYmVmb3Jl
IHhmYWlsLW1hcmtlcnMgYmVjYXVzZSB3ZQorICBjYW4ndCBkZXRlcm1pbmUgeGZhaWwveHBhc3Mg
c3RhdHVzIGluIGNhc2Ugb2YgYSBza2lwLiBzZWUgYWxzbzoKKyAgaHR0cDovL3N0YWNrb3ZlcmZs
b3cuY29tL3F1ZXN0aW9ucy8xMTEwNTgyOC9pbi1weS10ZXN0LXdoZW4taS1leHBsaWNpdGx5LXNr
aXAtYS10ZXN0LXRoYXQtaXMtbWFya2VkLWFzLXhmYWlsLWhvdy1jYW4taS1nZXQKKworLSBhbHdh
eXMgcmVwb3J0IGluc3RhbGxlZCAzcmQgcGFydHkgcGx1Z2lucyBpbiB0aGUgaGVhZGVyIG9mIGEg
dGVzdCBydW4KKworLSBmaXggaXNzdWUxNjA6IGEgZmFpbGluZyBzZXR1cCBvZiBhbiB4ZmFpbC1t
YXJrZWQgdGVzdHMgc2hvdWxkCisgIGJlIHJlcG9ydGVkIGFzIHhmYWlsIChub3QgeHBhc3MpCisK
Ky0gZml4IGlzc3VlMTI4OiBzaG93IGNhcHR1cmVkIG91dHB1dCB3aGVuIGNhcHN5cy9jYXBmZCBh
cmUgdXNlZAorCistIGZpeCBpc3N1ZTE3OTogcHJvcHBlcmx5IHNob3cgdGhlIGRlcGVuZGVuY3kg
Y2hhaW4gb2YgZmFjdG9yaWVzCisKKy0gcGx1Z2lubWFuYWdlci5yZWdpc3RlciguLi4pIG5vdyBy
YWlzZXMgVmFsdWVFcnJvciBpZiB0aGUKKyAgcGx1Z2luIGhhcyBiZWVuIGFscmVhZHkgcmVnaXN0
ZXJlZCBvciB0aGUgbmFtZSBpcyB0YWtlbgorCistIGZpeCBpc3N1ZTE1OTogaW1wcm92ZSBodHRw
Oi8vcHl0ZXN0Lm9yZy9sYXRlc3QvZmFxLmh0bWwKKyAgZXNwZWNpYWxseSB3aXRoIHJlc3BlY3Qg
dG8gdGhlICJtYWdpYyIgaGlzdG9yeSwgYWxzbyBtZW50aW9uCisgIHB5dGVzdC1kamFuZ28sIHRy
aWFsIGFuZCB1bml0dGVzdCBpbnRlZ3JhdGlvbi4KKworLSBtYWtlIHJlcXVlc3Qua2V5d29yZHMg
YW5kIG5vZGUua2V5d29yZHMgd3JpdGFibGUuICBBbGwgZGVzY2VuZGFudAorICBjb2xsZWN0aW9u
IG5vZGVzIHdpbGwgc2VlIGtleXdvcmQgdmFsdWVzLiAgS2V5d29yZHMgYXJlIGRpY3Rpb25hcmll
cworICBjb250YWluaW5nIG1hcmtlcnMgYW5kIG90aGVyIGluZm8uCisKKy0gZml4IGlzc3VlIDE3
ODogeG1sIGJpbmFyeSBlc2NhcGVzIGFyZSBub3cgd3JhcHBlZCBpbiBweS54bWwucmF3CisKKy0g
Zml4IGlzc3VlIDE3NjogY29ycmVjdGx5IGNhdGNoIHRoZSBidWlsdGluIEFzc2VydGlvbkVycm9y
CisgIGV2ZW4gd2hlbiB3ZSByZXBsYWNlZCBBc3NlcnRpb25FcnJvciB3aXRoIGEgc3ViY2xhc3Mg
b24gdGhlCisgIHB5dGhvbiBsZXZlbAorCistIGZhY3RvcnkgZGlzY292ZXJ5IG5vIGxvbmdlciBm
YWlscyB3aXRoIG1hZ2ljIGdsb2JhbCBjYWxsYWJsZXMKKyAgdGhhdCBwcm92aWRlIG5vIHNhbmUg
X19jb2RlX18gb2JqZWN0IChtb2NrLmNhbGwgZm9yIGV4YW1wbGUpCisKKy0gZml4IGlzc3VlIDE4
MjogdGVzdGRpci5pbnByb2Nlc3NfcnVuIG5vdyBjb25zaWRlcnMgcGFzc2VkIHBsdWdpbnMKKwor
LSBmaXggaXNzdWUgMTg4OiBlbnN1cmUgc3lzLmV4Y19pbmZvIGlzIGNsZWFyIG9uIHB5dGhvbjIK
KyAgICAgICAgICAgICAgICAgYmVmb3JlIGNhbGxpbmcgaW50byBhIHRlc3QKKworLSBmaXggaXNz
dWUgMTkxOiBhZGQgdW5pdHRlc3QgVGVzdENhc2UgcnVuVGVzdCBtZXRob2Qgc3VwcG9ydAorLSBm
aXggaXNzdWUgMTU2OiBtb25rZXlwYXRjaCBjb3JyZWN0bHkgaGFuZGxlcyBjbGFzcyBsZXZlbCBk
ZXNjcmlwdG9ycworCistIHJlcG9ydGluZyByZWZpbmVtZW50czoKKworICAtIHB5dGVzdF9yZXBv
cnRfaGVhZGVyIG5vdyByZWNlaXZlcyBhICJzdGFydGRpciIgc28gdGhhdAorICAgIHlvdSBjYW4g
dXNlIHN0YXJ0ZGlyLmJlc3RyZWxwYXRoKHlvdXJwYXRoKSB0byBzaG93CisgICAgbmljZSByZWxh
dGl2ZSBwYXRoCisKKyAgLSBhbGxvdyBwbHVnaW5zIHRvIGltcGxlbWVudCBib3RoIHB5dGVzdF9y
ZXBvcnRfaGVhZGVyIGFuZAorICAgIHB5dGVzdF9zZXNzaW9uc3RhcnQgKHNlc3Npb25zdGFydCBp
cyBpbnZva2VkIGZpcnN0KS4KKworICAtIGRvbid0IHNob3cgZGVzZWxlY3RlZCByZWFzb24gbGlu
ZSBpZiB0aGVyZSBpcyBub25lCisKKyAgLSBweS50ZXN0IC12diB3aWxsIHNob3cgYWxsIG9mIGFz
c2VydCBjb21wYXJpc2F0aW9ucyBpbnN0ZWFkIG9mIHRydW5jYXRpbmcKKworMi4yLjQKKz09PT09
CisKKy0gZml4IGVycm9yIG1lc3NhZ2UgZm9yIHJld3JpdHRlbiBhc3NlcnRpb25zIGludm9sdmlu
ZyB0aGUgJSBvcGVyYXRvcgorLSBmaXggaXNzdWUgMTI2OiBjb3JyZWN0bHkgbWF0Y2ggYWxsIGlu
dmFsaWQgeG1sIGNoYXJhY3RlcnMgZm9yIGp1bml0eG1sCisgIGJpbmFyeSBlc2NhcGUKKy0gZml4
IGlzc3VlIHdpdGggdW5pdHRlc3Q6IG5vdyBAdW5pdHRlc3QuZXhwZWN0ZWRGYWlsdXJlIG1hcmtl
cnMgc2hvdWxkCisgIGJlIHByb2Nlc3NlZCBjb3JyZWN0bHkgKHlvdSBjYW4gYWxzbyB1c2UgQHB5
dGVzdC5tYXJrIG1hcmtlcnMpCistIGRvY3VtZW50IGludGVncmF0aW9uIHdpdGggdGhlIGV4dGVu
ZGVkIGRpc3RyaWJ1dGUvc2V0dXB0b29scyB0ZXN0IGNvbW1hbmRzCistIGZpeCBpc3N1ZSAxNDA6
IHByb3BwZXJseSBnZXQgdGhlIHJlYWwgZnVuY3Rpb25zCisgIG9mIGJvdW5kIGNsYXNzbWV0aG9k
cyBmb3Igc2V0dXAvdGVhcmRvd25fY2xhc3MKKy0gZml4IGlzc3VlICMxNDE6IHN3aXRjaCBmcm9t
IHRoZSBkZWNlYXNlZCBwYXN0ZS5wb2Nvby5vcmcgdG8gYnBhc3RlLm5ldAorLSBmaXggaXNzdWUg
IzE0MzogY2FsbCB1bmNvbmZpZ3VyZS9zZXNzaW9uZmluaXNoIGFsd2F5cyB3aGVuCisgIGNvbmZp
Z3VyZS9zZXNzaW9uc3RhcnQgd2hlcmUgY2FsbGVkCistIGZpeCBpc3N1ZSAjMTQ0OiBiZXR0ZXIg
bWFuZ2xlIHRlc3QgaWRzIHRvIGp1bml0eG1sIGNsYXNzbmFtZXMKKy0gdXBncmFkZSBkaXN0cmli
dXRlX3NldHVwLnB5IHRvIDAuNi4yNworCisyLjIuMworPT09PT0KKworLSBmaXggdXBsb2FkZWQg
cGFja2FnZSB0byBvbmx5IGluY2x1ZGUgbmVjY2VzYXJ5IGZpbGVzCisKKzIuMi4yCis9PT09PQor
CistIGZpeCBpc3N1ZTEwMTogd3JvbmcgYXJncyB0byB1bml0dGVzdC5UZXN0Q2FzZSB0ZXN0IGZ1
bmN0aW9uIG5vdworICBwcm9kdWNlIGJldHRlciBvdXRwdXQKKy0gZml4IGlzc3VlMTAyOiByZXBv
cnQgbW9yZSB1c2VmdWwgZXJyb3JzIGFuZCBoaW50cyBmb3Igd2hlbiBhCisgIHRlc3QgZGlyZWN0
b3J5IHdhcyByZW5hbWVkIGFuZCBzb21lIHB5Yy9fX3B5Y2FjaGVfXyByZW1haW4KKy0gZml4IGlz
c3VlMTA2OiBhbGxvdyBwYXJhbWV0cml6ZSB0byBiZSBhcHBsaWVkIG11bHRpcGxlIHRpbWVzCisg
IGUuZy4gZnJvbSBtb2R1bGUsIGNsYXNzIGFuZCBhdCBmdW5jdGlvbiBsZXZlbC4KKy0gZml4IGlz
c3VlMTA3OiBhY3R1YWxseSBwZXJmb3JtIHNlc3Npb24gc2NvcGUgZmluYWxpemF0aW9uCistIGRv
bid0IGNoZWNrIGluIHBhcmFtZXRyaXplIGlmIGluZGlyZWN0IHBhcmFtZXRlcnMgYXJlIGZ1bmNh
cmcgbmFtZXMKKy0gYWRkIGNoZGlyIG1ldGhvZCB0byBtb25rZXlwYXRjaCBmdW5jYXJnCistIGZp
eCBjcmFzaCByZXN1bHRpbmcgZnJvbSBjYWxsaW5nIG1vbmtleXBhdGNoIHVuZG8gYSBzZWNvbmQg
dGltZQorLSBmaXggaXNzdWUxMTU6IG1ha2UgLS1jb2xsZWN0b25seSByb2J1c3QgYWdhaW5zdCBl
YXJseSBmYWlsdXJlCisgIChtaXNzaW5nIGZpbGVzL2RpcmVjdG9yaWVzKQorLSAiLXFxIC0tY29s
bGVjdG9ubHkiIG5vdyBzaG93cyBvbmx5IGZpbGVzIGFuZCB0aGUgbnVtYmVyIG9mIHRlc3RzIGlu
IHRoZW0KKy0gIi1xIC0tY29sbGVjdG9ubHkiIG5vdyBzaG93cyB0ZXN0IGlkcworLSBhbGxvdyBh
ZGRpbmcgb2YgYXR0cmlidXRlcyB0byB0ZXN0IHJlcG9ydHMgc3VjaCB0aGF0IGl0IGFsc28gd29y
a3MKKyAgd2l0aCBkaXN0cmlidXRlZCB0ZXN0aW5nIChubyB1cGdyYWRlIG9mIHB5dGVzdC14ZGlz
dCBuZWVkZWQpCisKKzIuMi4xCis9PT09PQorCistIGZpeCBpc3N1ZTk5IChpbiBweXRlc3QgYW5k
IHB5KSBpbnRlcm5hbGxlcnJvcnMgd2l0aCByZXN1bHRsb2cgbm93CisgIHByb2R1Y2UgYmV0dGVy
IG91dHB1dCAtIGZpeGVkIGJ5IG5vcm1hbGl6aW5nIHB5dGVzdF9pbnRlcm5hbGVycm9yCisgIGlu
cHV0IGFyZ3VtZW50cy4KKy0gZml4IGlzc3VlOTcgLyB0cmFjZWJhY2sgaXNzdWVzIChpbiBweXRl
c3QgYW5kIHB5KSBpbXByb3ZlIHRyYWNlYmFjayBvdXRwdXQKKyAgaW4gY29uanVuY3Rpb24gd2l0
aCBqaW5qYTIgYW5kIGN5dGhvbiB3aGljaCBoYWNrIHRyYWNlYmFja3MKKy0gZml4IGlzc3VlOTMg
KGluIHB5dGVzdCBhbmQgcHl0ZXN0LXhkaXN0KSBhdm9pZCAiZGVsYXllZCB0ZWFyZG93bnMiOgor
ICB0aGUgZmluYWwgdGVzdCBpbiBhIHRlc3Qgbm9kZSB3aWxsIG5vdyBydW4gaXRzIHRlYXJkb3du
IGRpcmVjdGx5CisgIGluc3RlYWQgb2Ygd2FpdGluZyBmb3IgdGhlIGVuZCBvZiB0aGUgc2Vzc2lv
bi4gVGhhbmtzIERhdmUgSHVudCBmb3IKKyAgdGhlIGdvb2QgcmVwb3J0aW5nIGFuZCBmZWVkYmFj
ay4gIFRoZSBweXRlc3RfcnVudGVzdF9wcm90b2NvbCBhcyB3ZWxsCisgIGFzIHRoZSBweXRlc3Rf
cnVudGVzdF90ZWFyZG93biBob29rcyBub3cgaGF2ZSAibmV4dGl0ZW0iIGF2YWlsYWJsZQorICB3
aGljaCB3aWxsIGJlIE5vbmUgaW5kaWNhdGluZyB0aGUgZW5kIG9mIHRoZSB0ZXN0IHJ1bi4KKy0g
Zml4IGNvbGxlY3Rpb24gY3Jhc2ggZHVlIHRvIHVua25vd24tc291cmNlIGNvbGxlY3RlZCBpdGVt
cywgdGhhbmtzCisgIHRvIFJhbGYgU2NobWl0dCAoZml4ZWQgYnkgZGVwZW5kaW5nIG9uIGEgbW9y
ZSByZWNlbnQgcHlsaWIpCisKKzIuMi4wCis9PT09PQorCistIGZpeCBpc3N1ZTkwOiBpbnRyb2R1
Y2UgZWFnZXIgdGVhcmluZyBkb3duIG9mIHRlc3QgaXRlbXMgc28gdGhhdAorICB0ZWFyZG93biBm
dW5jdGlvbiBhcmUgY2FsbGVkIGVhcmxpZXIuCistIGFkZCBhbiBhbGwtcG93ZXJmdWwgbWV0YWZ1
bmMucGFyYW1ldHJpemUgZnVuY3Rpb24gd2hpY2ggYWxsb3dzIHRvCisgIHBhcmFtZXRyaXplIHRl
c3QgZnVuY3Rpb24gYXJndW1lbnRzIGluIG11bHRpcGxlIHN0ZXBzIGFuZCB0aGVyZWZvcmUKKyAg
ZnJvbSBpbmRlcGRlbmVudCBwbHVnaW5zIGFuZCBwYWxjZXMuCistIGFkZCBhIEBweXRlc3QubWFy
ay5wYXJhbWV0cml6ZSBoZWxwZXIgd2hpY2ggYWxsb3dzIHRvIGVhc2lseQorICBjYWxsIGEgdGVz
dCBmdW5jdGlvbiB3aXRoIGRpZmZlcmVudCBhcmd1bWVudCB2YWx1ZXMKKy0gQWRkIGV4YW1wbGVz
IHRvIHRoZSAicGFyYW1ldHJpemUiIGV4YW1wbGUgcGFnZSwgaW5jbHVkaW5nIGEgcXVpY2sgcG9y
dAorICBvZiBUZXN0IHNjZW5hcmlvcyBhbmQgdGhlIG5ldyBwYXJhbWV0cml6ZSBmdW5jdGlvbiBh
bmQgZGVjb3JhdG9yLgorLSBpbnRyb2R1Y2UgcmVnaXN0cmF0aW9uIGZvciAicHl0ZXN0Lm1hcmsu
KiIgaGVscGVycyB2aWEgaW5pLWZpbGVzCisgIG9yIHRocm91Z2ggcGx1Z2luIGhvb2tzLiAgQWxz
byBpbnRyb2R1Y2UgYSAiLS1zdHJpY3QiIG9wdGlvbiB3aGljaAorICB3aWxsIHRyZWF0IHVucmVn
aXN0ZXJlZCBtYXJrZXJzIGFzIGVycm9ycworICBhbGxvd2luZyB0byBhdm9pZCB0eXBvcyBhbmQg
bWFpbnRhaW4gYSB3ZWxsIGRlc2NyaWJlZCBzZXQgb2YgbWFya2VycworICBmb3IgeW91ciB0ZXN0
IHN1aXRlLiAgU2VlIGV4YXBsZXMgYXQgaHR0cDovL3B5dGVzdC5vcmcvbGF0ZXN0L21hcmsuaHRt
bAorICBhbmQgaXRzIGxpbmtzLgorLSBpc3N1ZTUwOiBpbnRyb2R1Y2UgIi1tIG1hcmtlciIgb3B0
aW9uIHRvIHNlbGVjdCB0ZXN0cyBiYXNlZCBvbiBtYXJrZXJzCisgICh0aGlzIGlzIGEgc3RyaWN0
ZXIgYW5kIG1vcmUgcHJlZGljdGFibGUgdmVyc2lvbiBvZiAnLWsnIGluIHRoYXQgIi1tIgorICBv
bmx5IG1hdGNoZXMgY29tcGxldGUgbWFya2VycyBhbmQgaGFzIG1vcmUgb2J2aW91cyBydWxlcyBm
b3IgYW5kL29yCisgIHNlbWFudGljcy4KKy0gbmV3IGZlYXR1cmUgdG8gaGVscCBvcHRpbWl6aW5n
IHRoZSBzcGVlZCBvZiB5b3VyIHRlc3RzOgorICAtLWR1cmF0aW9ucz1OIG9wdGlvbiBmb3IgZGlz
cGxheWluZyBOIHNsb3dlc3QgdGVzdCBjYWxscworICBhbmQgc2V0dXAvdGVhcmRvd24gbWV0aG9k
cy4KKy0gZml4IGlzc3VlODc6IC0tcGFzdGViaW4gbm93IHdvcmtzIHdpdGggcHl0aG9uMworLSBm
aXggaXNzdWU4OTogLS1wZGIgd2l0aCB1bmV4cGVjdGVkIGV4Y2VwdGlvbnMgaW4gZG9jdGVzdCB3
b3JrIG1vcmUgc2Vuc2libHkKKy0gZml4IGFuZCBjbGVhbnVwIHB5dGVzdCdzIG93biB0ZXN0IHN1
aXRlIHRvIG5vdCBsZWFrIEZEcworLSBmaXggaXNzdWU4MzogbGluayB0byBnZW5lcmF0ZWQgZnVu
Y2FyZyBsaXN0CistIGZpeCBpc3N1ZTc0OiBweWFyZyBtb2R1bGUgbmFtZXMgYXJlIG5vdyBjaGVj
a2VkIGFnYWluc3QgaW1wLmZpbmRfbW9kdWxlIGZhbHNlIHBvc2l0aXZlcworLSBmaXggY29tcGF0
aWJpbGl0eSB3aXRoIHR3aXN0ZWQvdHJpYWwtMTEuMS4wIHVzZSBjYXNlcworLSBzaW1wbGlmeSBO
b2RlLmxpc3RjaGFpbgorLSBzaW1wbGlmeSBqdW5pdHhtbCBvdXRwdXQgY29kZSBieSByZWx5aW5n
IG9uIHB5LnhtbAorLSBhZGQgc3VwcG9ydCBmb3Igc2tpcCBwcm9wZXJ0aWVzIG9uIHVuaXR0ZXN0
IGNsYXNzZXMgYW5kIGZ1bmN0aW9ucworCisyLjEuMworPT09PT0KKworLSBmaXggaXNzdWU3OTog
YXNzZXJ0aW9uIHJld3JpdGluZyBmYWlsZWQgb24gc29tZSBjb21wYXJpc29ucyBpbiBib29sb3Bz
CistIGNvcnJlY3RseSBoYW5kbGUgemVybyBsZW5ndGggYXJndW1lbnRzIChhIGxhIHB5dGVzdCAn
JykKKy0gZml4IGlzc3VlNjcgLyBqdW5pdHhtbCBub3cgY29udGFpbnMgY29ycmVjdCB0ZXN0IGR1
cmF0aW9ucywgdGhhbmtzIHJvbm55CistIGZpeCBpc3N1ZTc1IC8gc2tpcHBpbmcgdGVzdCBmYWls
dXJlIG9uIGp5dGhvbgorLSBmaXggaXNzdWU3NyAvIEFsbG93IGFzc2VydHJlcHJfY29tcGFyZSBo
b29rIHRvIGFwcGx5IHRvIGEgc3Vic2V0IG9mIHRlc3RzCisKKzIuMS4yCis9PT09PQorCistIGZp
eCBhc3NlcnRpb24gcmV3cml0aW5nIG9uIGZpbGVzIHdpdGggd2luZG93cyBuZXdsaW5lcyBvbiBz
b21lIFB5dGhvbiB2ZXJzaW9ucworLSByZWZpbmUgdGVzdCBkaXNjb3ZlcnkgYnkgcGFja2FnZS9t
b2R1bGUgbmFtZSAoLS1weWFyZ3MpLCB0aGFua3MgRmxvcmlhbiBNYXllcgorLSBmaXggaXNzdWU2
OSAvIGFzc2VydGlvbiByZXdyaXRpbmcgZml4ZWQgb24gc29tZSBib29sZWFuIG9wZXJhdGlvbnMK
Ky0gZml4IGlzc3VlNjggLyBwYWNrYWdlcyBub3cgd29yayB3aXRoIGFzc2VydGlvbiByZXdyaXRp
bmcKKy0gZml4IGlzc3VlNjY6IHVzZSBkaWZmZXJlbnQgYXNzZXJ0aW9uIHJld3JpdGluZyBjYWNo
ZXMgd2hlbiB0aGUgLU8gb3B0aW9uIGlzIHBhc3NlZAorLSBkb24ndCB0cnkgYXNzZXJ0aW9uIHJl
d3JpdGluZyBvbiBKeXRob24sIHVzZSByZWludGVycAorCisyLjEuMQorPT09PT0KKworLSBmaXgg
aXNzdWU2NCAvIHB5dGVzdC5zZXRfdHJhY2Ugbm93IHdvcmtzIHdpdGhpbiBweXRlc3RfZ2VuZXJh
dGVfdGVzdHMgaG9va3MKKy0gZml4IGlzc3VlNjAgLyBmaXggZXJyb3IgY29uZGl0aW9ucyBpbnZv
bHZpbmcgdGhlIGNyZWF0aW9uIG9mIF9fcHljYWNoZV9fCistIGZpeCBpc3N1ZTYzIC8gYXNzZXJ0
aW9uIHJld3JpdGluZyBvbiBpbnNlcnRzIGludm9sdmluZyBzdHJpbmdzIGNvbnRhaW5pbmcgJyUn
CistIGZpeCBhc3NlcnRpb24gcmV3cml0aW5nIG9uIGNhbGxzIHdpdGggYSAqKiBhcmcKKy0gZG9u
J3QgY2FjaGUgcmV3cml0dGVuIG1vZHVsZXMgaWYgYnl0ZWNvZGUgZ2VuZXJhdGlvbiBpcyBkaXNh
YmxlZAorLSBmaXggYXNzZXJ0aW9uIHJld3JpdGluZyBpbiByZWFkLW9ubHkgZGlyZWN0b3JpZXMK
Ky0gZml4IGlzc3VlNTk6IHByb3ZpZGUgc3lzdGVtLW91dC9lcnIgdGFncyBmb3IganVuaXR4bWwg
b3V0cHV0CistIGZpeCBpc3N1ZTYxOiBhc3NlcnRpb24gcmV3cml0aW5nIG9uIGJvb2xlYW4gb3Bl
cmF0aW9ucyB3aXRoIDMgb3IgbW9yZSBvcGVyYW5kcworLSB5b3UgY2FuIG5vdyBidWlsZCBhIG1h
biBwYWdlIHdpdGggImNkIGRvYyA7IG1ha2UgbWFuIgorCisyLjEuMAorPT09PT0KKworLSBmaXgg
aXNzdWU1MyBjYWxsIG5vc2VzdHlsZSBzZXR1cCBmdW5jdGlvbnMgd2l0aCBjb3JyZWN0IG9yZGVy
aW5nCistIGZpeCBpc3N1ZTU4IGFuZCBpc3N1ZTU5OiBuZXcgYXNzZXJ0aW9uIGNvZGUgZml4ZXMK
Ky0gbWVyZ2UgQmVuamFtaW4ncyBhc3NlcnRpb25yZXdyaXRlIGJyYW5jaDogbm93IGFzc2VydGlv
bnMKKyAgZm9yIHRlc3QgbW9kdWxlcyBvbiBweXRob24gMi42IGFuZCBhYm92ZSBhcmUgZG9uZSBi
eSByZXdyaXRpbmcKKyAgdGhlIEFTVCBhbmQgc2F2aW5nIHRoZSBweWMgZmlsZSBiZWZvcmUgdGhl
IHRlc3QgbW9kdWxlIGlzIGltcG9ydGVkLgorICBzZWUgZG9jL2Fzc2VydC50eHQgZm9yIG1vcmUg
aW5mby4KKy0gZml4IGlzc3VlNDM6IGltcHJvdmUgZG9jdGVzdHMgd2l0aCBiZXR0ZXIgdHJhY2Vi
YWNrIHJlcG9ydGluZyBvbgorICB1bmV4cGVjdGVkIGV4Y2VwdGlvbnMKKy0gZml4IGlzc3VlNDc6
IHRpbWluZyBvdXRwdXQgaW4ganVuaXR4bWwgZm9yIHRlc3QgY2FzZXMgaXMgbm93IGNvcnJlY3QK
Ky0gZml4IGlzc3VlNDg6IHR5cG8gaW4gTWFya0luZm8gcmVwciBsZWFkaW5nIHRvIGV4Y2VwdGlv
bgorLSBmaXggaXNzdWU0OTogYXZvaWQgY29uZnVzaW5nIGVycm9yIHdoZW4gaW5pdGl6YWxpYXRp
b24gcGFydGlhbGx5IGZhaWxzCistIGZpeCBpc3N1ZTQ0OiBlbnYvdXNlcm5hbWUgZXhwYW5zaW9u
IGZvciBqdW5pdHhtbCBmaWxlIHBhdGgKKy0gc2hvdyByZWxlYXNlbGV2ZWwgaW5mb3JtYXRpb24g
aW4gdGVzdCBydW5zIGZvciBweXB5CistIHJld29ya2VkIGRvYyBwYWdlcyBmb3IgYmV0dGVyIG5h
dmlnYXRpb24gYW5kIFBERiBnZW5lcmF0aW9uCistIHJlcG9ydCBLZXlib2FyZEludGVycnVwdCBl
dmVuIGlmIGludGVycnVwdGVkIGR1cmluZyBzZXNzaW9uIHN0YXJ0dXAKKy0gZml4IGlzc3VlIDM1
IC0gcHJvdmlkZSBQREYgZG9jIHZlcnNpb24gYW5kIGRvd25sb2FkIGxpbmsgZnJvbSBpbmRleCBw
YWdlCisKKzIuMC4zCis9PT09PQorCistIGZpeCBpc3N1ZTM4OiBuaWNlciB0cmFjZWJhY2tzIG9u
IGNhbGxzIHRvIGhvb2tzLCBwYXJ0aWN1bGFybHkgZWFybHkKKyAgY29uZmlndXJlL3Nlc3Npb25z
dGFydCBvbmVzCisKKy0gZml4IG1pc3Npbmcgc2tpcCByZWFzb24vbWV0YSBpbmZvcm1hdGlvbiBp
biBqdW5pdHhtbCBmaWxlcywgcmVwb3J0ZWQKKyAgdmlhIGh0dHA6Ly9saXN0cy5pZHlsbC5vcmcv
cGlwZXJtYWlsL3Rlc3RpbmctaW4tcHl0aG9uLzIwMTEtTWFyY2gvMDAzOTI4Lmh0bWwKKworLSBm
aXggaXNzdWUzNDogYXZvaWQgY29sbGVjdGlvbiBmYWlsdXJlIHdpdGggInRlc3QiIHByZWZpeGVk
IGNsYXNzZXMKKyAgZGVyaXZpbmcgZnJvbSBvYmplY3QuCisKKy0gZG9uJ3QgcmVxdWlyZSB6bGli
IChhbmQgb3RoZXIgbGlicykgZm9yIGdlbnNjcmlwdCBwbHVnaW4gd2l0aG91dAorICAtLWdlbnNj
cmlwdCBhY3R1YWxseSBiZWluZyB1c2VkLgorCistIHNwZWVkIHVwIHNraXBzIChieSBub3QgZG9p
bmcgYSBmdWxsIHRyYWNlYmFjayByZXByZXNlbmF0aW9uCisgIGludGVybmFsbHkpCisKKy0gZml4
IGlzc3VlMzc6IGF2b2lkIGludmFsaWQgY2hhcmFjdGVycyBpbiBqdW5pdHhtbCdzIG91dHB1dAor
CisyLjAuMgorPT09PT0KKworLSB0YWNrbGUgaXNzdWUzMiAtIHNwZWVkIHVwIHRlc3QgcnVucyBv
ZiB2ZXJ5IHF1aWNrIHRlc3QgZnVuY3Rpb25zCisgIGJ5IHJlZHVjaW5nIHRoZSByZWxhdGl2ZSBv
dmVyaGVhZAorCistIGZpeCBpc3N1ZTMwIC0gZXh0ZW5kZWQgeGZhaWwvc2tpcGlmIGhhbmRsaW5n
IGFuZCBpbXByb3ZlZCByZXBvcnRpbmcuCisgIElmIHlvdSBoYXZlIGEgc3ludGF4IGVycm9yIGlu
IHlvdXIgc2tpcC94ZmFpbAorICBleHByZXNzaW9ucyB5b3Ugbm93IGdldCBuaWNlIGVycm9yIHJl
cG9ydHMuCisKKyAgQWxzbyB5b3UgY2FuIG5vdyBhY2Nlc3MgbW9kdWxlIGdsb2JhbHMgZnJvbSB4
ZmFpbC9za2lwaWYKKyAgZXhwcmVzc2lvbnMgc28gdGhhdCB0aGlzIGZvciBleGFtcGxlIHdvcmtz
IG5vdzo6CisKKyAgICBpbXBvcnQgcHl0ZXN0CisgICAgaW1wb3J0IG15bW9kdWxlCisgICAgQHB5
dGVzdC5tYXJrLnNraXBpZigibXltb2R1bGUuX192ZXJzaW9uX19bMF0gPT0gIjEiKQorICAgIGRl
ZiB0ZXN0X2Z1bmN0aW9uKCk6CisgICAgICAgIHBhc3MKKworICBUaGlzIHdpbGwgbm90IHJ1biB0
aGUgdGVzdCBmdW5jdGlvbiBpZiB0aGUgbW9kdWxlJ3MgdmVyc2lvbiBzdHJpbmcKKyAgZG9lcyBu
b3Qgc3RhcnQgd2l0aCBhICIxIi4gIE5vdGUgdGhhdCBzcGVjaWZ5aW5nIGEgc3RyaW5nIGluc3Rl
YWQKKyAgb2YgYSBib29sZWFuIGV4cHJlc3Npb25zIGFsbG93cyBweS50ZXN0IHRvIHJlcG9ydCBt
ZWFuaW5nZnVsIGluZm9ybWF0aW9uCisgIHdoZW4gc3VtbWFyaXppbmcgYSB0ZXN0IHJ1biBhcyB0
byB3aGF0IGNvbmRpdGlvbnMgbGVhZCB0byBza2lwcGluZworICAob3IgeGZhaWwtaW5nKSB0ZXN0
cy4KKworLSBmaXggaXNzdWUyOCAtIHNldHVwX21ldGhvZCBhbmQgcHl0ZXN0X2dlbmVyYXRlX3Rl
c3RzIHdvcmsgdG9nZXRoZXIKKyAgVGhlIHNldHVwX21ldGhvZCBmaXh0dXJlIG1ldGhvZCBub3cg
Z2V0cyBjYWxsZWQgYWxzbyBmb3IKKyAgdGVzdCBmdW5jdGlvbiBpbnZvY2F0aW9ucyBnZW5lcmF0
ZWQgZnJvbSB0aGUgcHl0ZXN0X2dlbmVyYXRlX3Rlc3RzCisgIGhvb2suCisKKy0gZml4IGlzc3Vl
MjcgLSBjb2xsZWN0b25seSBhbmQga2V5d29yZC1zZWxlY3Rpb24gKC1rKSBub3cgd29yayB0b2dl
dGhlcgorICBBbHNvLCBpZiB5b3UgZG8gInB5LnRlc3QgLS1jb2xsZWN0b25seSAtcSIgeW91IG5v
dyBnZXQgYSBmbGF0IGxpc3QKKyAgb2YgdGVzdCBpZHMgdGhhdCB5b3UgY2FuIHVzZSB0byBwYXN0
ZSB0byB0aGUgcHkudGVzdCBjb21tYW5kbGluZQorICBpbiBvcmRlciB0byBleGVjdXRlIGEgcGFy
dGljdWxhciB0ZXN0LgorCistIGZpeCBpc3N1ZTI1IGF2b2lkIHJlcG9ydGVkIHByb2JsZW1zIHdp
dGggLS1wZGIgYW5kIHB5dGhvbjMuMi9lbmNvZGluZ3Mgb3V0cHV0CisKKy0gZml4IGlzc3VlMjMg
LSB0bXBkaXIgYXJndW1lbnQgbm93IHdvcmtzIG9uIFB5dGhvbjMuMiBhbmQgV2luZG93c1hQCisg
IFN0YXJ0aW5nIHdpdGggUHl0aG9uMy4yIG9zLnN5bWxpbmsgbWF5IGJlIHN1cHBvcnRlZC4gQnkg
cmVxdWlyaW5nCisgIGEgbmV3ZXIgcHkgbGliIHZlcnNpb24gdGhlIHB5LnBhdGgubG9jYWwoKSBp
bXBsZW1lbnRhdGlvbiBhY2tub3dsZWRnZXMKKyAgdGhpcy4KKworLSBmaXhlZCB0eXBvcyBpbiB0
aGUgZG9jcyAodGhhbmtzIFZpY3RvciBHYXJjaWEsIEJyaWFubmEgTGF1Z2hlcikgYW5kIHBhcnRp
Y3VsYXIKKyAgdGhhbmtzIHRvIExhdXJhIENyZWlnaHRvbiB3aG8gYWxzbyByZXZpZXZlZCBwYXJ0
cyBvZiB0aGUgZG9jdW1lbnRhdGlvbi4KKworLSBmaXggc2xpZ2hseSB3cm9uZyBvdXRwdXQgb2Yg
dmVyYm9zZSBwcm9ncmVzcyByZXBvcnRpbmcgZm9yIGNsYXNzZXMKKyAgKHRoYW5rcyBBbWF1cnkp
CisKKy0gbW9yZSBwcmVjaXNlIChhdm9pZGluZyBvZikgZGVwcmVjYXRpb24gd2FybmluZ3MgZm9y
IG5vZGUuQ2xhc3N8RnVuY3Rpb24gYWNjZXNzZXMKKworLSBhdm9pZCBzdGQgdW5pdHRlc3QgYXNz
ZXJ0aW9uIGhlbHBlciBjb2RlIGluIHRyYWNlYmFja3MgKHRoYW5rcyBSb25ueSkKKworMi4wLjEK
Kz09PT09CisKKy0gcmVmaW5lIGFuZCB1bmlmeSBpbml0aWFsIGNhcHR1cmluZyBzbyB0aGF0IGl0
IHdvcmtzIG5pY2VseQorICBldmVuIGlmIHRoZSBsb2dnaW5nIG1vZHVsZSBpcyB1c2VkIG9uIGFu
IGVhcmx5LWxvYWRlZCBjb25mdGVzdC5weQorICBmaWxlIG9yIHBsdWdpbi4KKy0gYWxsb3cgdG8g
b21pdCAiKCkiIGluIHRlc3QgaWRzIHRvIGFsbG93IGZvciB1bmlmb3JtIHRlc3QgaWRzCisgIGFz
IHByb2R1Y2VkIGJ5IEFsZnJlZG8ncyBuaWNlIHB5dGVzdC52aW0gcGx1Z2luLgorLSBmaXggaXNz
dWUxMiAtIHNob3cgcGx1Z2luIHZlcnNpb25zIHdpdGggIi0tdmVyc2lvbiIgYW5kCisgICItLXRy
YWNlY29uZmlnIiBhbmQgYWxzbyBkb2N1bWVudCBob3cgdG8gYWRkIGV4dHJhIGluZm9ybWF0aW9u
CisgIHRvIHJlcG9ydGluZyB0ZXN0IGhlYWRlcgorLSBmaXggaXNzdWUxNyAoaW1wb3J0LSogcmVw
b3J0aW5nIGlzc3VlIG9uIHB5dGhvbjMpIGJ5CisgIHJlcXVpcmluZyBweT4xLjQuMCAoMS40LjEg
aXMgZ29pbmcgdG8gaW5jbHVkZSBpdCkKKy0gZml4IGlzc3VlMTAgKG51bXB5IGFycmF5cyB0cnV0
aCBjaGVja2luZykgYnkgcmVmaW5pbmcKKyAgYXNzZXJ0aW9uIGludGVycHJldGF0aW9uIGluIHB5
IGxpYgorLSBmaXggaXNzdWUxNTogbWFrZSBub3NlIGNvbXBhdGliaWxpdHkgdGVzdHMgY29tcGF0
aWJsZQorICB3aXRoIHB5dGhvbjMgKG5vdyB0aGF0IG5vc2UtMS4wIHN1cHBvcnRzIHB5dGhvbjMp
CistIHJlbW92ZSBzb21ld2hhdCBzdXJwcmlzaW5nICJzYW1lLWNvbmZ0ZXN0IiBkZXRlY3Rpb24g
YmVjYXVzZQorICBpdCBpZ25vcmVzIGNvbmZ0ZXN0LnB5IHdoZW4gdGhleSBhcHBlYXIgaW4gc2V2
ZXJhbCBzdWJkaXJzLgorLSBpbXByb3ZlIGFzc2VydGlvbnMgKCJub3QgaW4iKSwgdGhhbmtzIEZs
b3JpcyBCcnV5bm9vZ2hlCistIGltcHJvdmUgYmVoYXZpb3VyL3dhcm5pbmdzIHdoZW4gcnVubmlu
ZyBvbiB0b3Agb2YgInB5dGhvbiAtT08iCisgIChhc3NlcnRpb25zIGFuZCBkb2NzdHJpbmdzIGFy
ZSB0dXJuZWQgb2ZmLCBsZWFkaW5nIHRvIHBvdGVudGlhbAorICBmYWxzZSBwb3NpdGl2ZXMpCist
IGludHJvZHVjZSBhIHB5dGVzdF9jbWRsaW5lX3Byb2Nlc3NhcmdzKGFyZ3MpIGhvb2sKKyAgdG8g
YWxsb3cgZHluYW1pYyBjb21wdXRhdGlvbiBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgorICBU
aGlzIGZpeGVzIGEgcmVncmVzc2lvbiBiZWNhdXNlIHB5LnRlc3QgcHJpb3IgdG8gMi4wCisgIGFs
bG93ZWQgdG8gc2V0IGNvbW1hbmQgbGluZSBvcHRpb25zIGZyb20gY29uZnRlc3QucHkKKyAgZmls
ZXMgd2hpY2ggc28gZmFyIHB5dGVzdC0yLjAgb25seSBhbGxvd2VkIGZyb20gaW5pLWZpbGVzIG5v
dy4KKy0gZml4IGlzc3VlNzogYXNzZXJ0IGZhaWx1cmVzIGluIGRvY3Rlc3QgbW9kdWxlcy4KKyAg
dW5leHBlY3RlZCBmYWlsdXJlcyBpbiBkb2N0ZXN0cyB3aWxsIG5vdCBnZW5lcmFsbHkKKyAgc2hv
dyBuaWNlciwgaS5lLiB3aXRoaW4gdGhlIGRvY3Rlc3QgZmFpbGluZyBjb250ZXh0LgorLSBmaXgg
aXNzdWU5OiBzZXR1cC90ZWFyZG93biBmdW5jdGlvbnMgZm9yIGFuIHhmYWlsLW1hcmtlZAorICB0
ZXN0IHdpbGwgcmVwb3J0IGFzIHhmYWlsIGlmIHRoZXkgZmFpbCBidXQgcmVwb3J0IGFzIG5vcm1h
bGx5CisgIHBhc3NpbmcgKG5vdCB4cGFzc2luZykgaWYgdGhleSBzdWNjZWVkLiAgVGhpcyBvbmx5
IGlzIHRydWUKKyAgZm9yICJkaXJlY3QiIHNldHVwL3RlYXJkb3duIGludm9jYXRpb25zIGJlY2F1
c2UgdGVhcmRvd25fY2xhc3MvCisgIHRlYXJkb3duX21vZHVsZSBjYW5ub3QgY2xvc2VseSByZWxh
dGUgdG8gYSBzaW5nbGUgdGVzdC4KKy0gZml4IGlzc3VlMTQ6IG5vIGxvZ2dpbmcgZXJyb3JzIGF0
IHByb2Nlc3MgZXhpdAorLSByZWZpbmVtZW50cyB0byAiY29sbGVjdGluZyIgb3V0cHV0IG9uIG5v
bi10dHlzCistIHJlZmluZSBpbnRlcm5hbCBwbHVnaW4gcmVnaXN0cmF0aW9uIGFuZCAtLXRyYWNl
Y29uZmlnIG91dHB1dAorLSBpbnRyb2R1Y2UgYSBtZWNoYW5pc20gdG8gcHJldmVudC91bnJlZ2lz
dGVyIHBsdWdpbnMgZnJvbSB0aGUKKyAgY29tbWFuZCBsaW5lLCBzZWUgaHR0cDovL3B5dGVzdC5v
cmcvcGx1Z2lucy5odG1sI2NtZHVucmVnaXN0ZXIKKy0gYWN0aXZhdGUgcmVzdWx0bG9nIHBsdWdp
biBieSBkZWZhdWx0CistIGZpeCByZWdyZXNzaW9uIHdydCB5aWVsZGVkIHRlc3RzIHdoaWNoIGR1
ZSB0byB0aGUKKyAgY29sbGVjdGlvbi1iZWZvcmUtcnVubmluZyBzZW1hbnRpY3Mgd2VyZSBub3QK
KyAgc2V0dXAgYXMgd2l0aCBweXRlc3QgMS4zLjQuICBOb3RlLCBob3dldmVyLCB0aGF0CisgIHRo
ZSByZWNvbW1lbmRlZCBhbmQgbXVjaCBjbGVhbmVyIHdheSB0byBkbyB0ZXN0CisgIHBhcmFtZXRy
YWl6YXRpb24gcmVtYWlucyB0aGUgInB5dGVzdF9nZW5lcmF0ZV90ZXN0cyIKKyAgbWVjaGFuaXNt
LCBzZWUgdGhlIGRvY3MuCisKKzIuMC4wCis9PT09PQorCistIHB5dGVzdC0yLjAgaXMgbm93IGl0
cyBvd24gcGFja2FnZSBhbmQgZGVwZW5kcyBvbiBweWxpYi0yLjAKKy0gbmV3IGFiaWxpdHk6IHB5
dGhvbiAtbSBweXRlc3QgLyBweXRob24gLW0gcHl0ZXN0Lm1haW4gYWJpbGl0eQorLSBuZXcgcHl0
aG9uIGludmNhdGlvbjogcHl0ZXN0Lm1haW4oYXJncywgcGx1Z2lucykgdG8gbG9hZAorICBzb21l
IGN1c3RvbSBwbHVnaW5zIGVhcmx5LgorLSB0cnkgaGFyZGVyIHRvIHJ1biB1bml0dGVzdCB0ZXN0
IHN1aXRlcyBpbiBhIG1vcmUgY29tcGF0aWJsZSBtYW5uZXIKKyAgYnkgZGVmZXJyaW5nIHNldHVw
L3RlYXJkb3duIHNlbWFudGljcyB0byB0aGUgdW5pdHRlc3QgcGFja2FnZS4KKyAgYWxzbyB3b3Jr
IGhhcmRlciB0byBydW4gdHdpc3RlZC90cmlhbCBhbmQgRGphbmdvIHRlc3RzIHdoaWNoCisgIHNo
b3VsZCBub3cgYmFzaWNhbGx5IHdvcmsgYnkgZGVmYXVsdC4KKy0gaW50cm9kdWNlIGEgbmV3IHdh
eSB0byBzZXQgY29uZmlnIG9wdGlvbnMgdmlhIGluaS1zdHlsZSBmaWxlcywKKyAgYnkgZGVmYXVs
dCBzZXR1cC5jZmcgYW5kIHRveC5pbmkgZmlsZXMgYXJlIHNlYXJjaGVkLiAgVGhlIG9sZAorICB3
YXlzIChjZXJ0YWluIGVudmlyb25tZW50IHZhcmlhYmxlcywgZHluYW1pYyBjb25mdGVzdC5weSBy
ZWFkaW5nCisgIGlzIHJlbW92ZWQpLgorLSBhZGQgYSBuZXcgIi1xIiBvcHRpb24gd2hpY2ggZGVj
cmVhc2VzIHZlcmJvc2l0eSBhbmQgcHJpbnRzIGEgbW9yZQorICBub3NlL3VuaXR0ZXN0LXN0eWxl
ICJkb3QiIG91dHB1dC4KKy0gZml4IGlzc3VlMTM1IC0gbWFya3Mgbm93IHdvcmsgd2l0aCB1bml0
dGVzdCB0ZXN0IGNhc2VzIGFzIHdlbGwKKy0gZml4IGlzc3VlMTI2IC0gaW50cm9kdWNlIHB5LnRl
c3Quc2V0X3RyYWNlKCkgdG8gdHJhY2UgZXhlY3V0aW9uIHZpYQorICBQREIgZHVyaW5nIHRoZSBy
dW5uaW5nIG9mIHRlc3RzIGV2ZW4gaWYgY2FwdHVyaW5nIGlzIG9uZ29pbmcuCistIGZpeCBpc3N1
ZTEyMyAtIG5ldyAicHl0aG9uIC1tIHB5LnRlc3QiIGludm9jYXRpb24gZm9yIHB5LnRlc3QKKyAg
KHJlcXVpcmVzIFB5dGhvbiAyLjUgb3IgYWJvdmUpCistIGZpeCBpc3N1ZTEyNCAtIG1ha2UgcmVw
b3J0aW5nIG1vcmUgcmVzaWxpZW50IGFnYWluc3QgdGVzdHMgb3BlbmluZworICBmaWxlcyBvbiBm
aWxlZGVzY3JpcHRvciAxIChzdGRvdXQpLgorLSBmaXggaXNzdWUxMDkgLSBzaWJsaW5nIGNvbmZ0
ZXN0LnB5IGZpbGVzIHdpbGwgbm90IGJlIGxvYWRlZC4KKyAgKGFuZCBEaXJlY3RvcnkgY29sbGVj
dG9ycyBjYW5ub3QgYmUgY3VzdG9taXplZCBhbnltb3JlIGZyb20gYSBEaXJlY3RvcnkncworICBj
b25mdGVzdC5weSAtIHRoaXMgbmVlZHMgdG8gaGFwcGVuIGF0IGxlYXN0IG9uZSBsZXZlbCB1cCku
CistIGludHJvZHVjZSAoY3VzdG9taXphYmxlKSBhc3NlcnRpb24gZmFpbHVyZSByZXByZXNlbnRh
dGlvbnMgYW5kIGVuaGFuY2UKKyAgb3V0cHV0IG9uIGFzc2VydGlvbiBmYWlsdXJlcyBmb3IgY29t
cGFyaXNvbnMgYW5kIG90aGVyIGNhc2VzIChGbG9yaXMgQnJ1eW5vb2doZSkKKy0gbm9zZS1wbHVn
aW46IHBhc3MgdGhyb3VnaCB0eXBlLXNpZ25hdHVyZSBmYWlsdXJlcyBpbiBzZXR1cC90ZWFyZG93
bgorICBmdW5jdGlvbnMgaW5zdGVhZCBvZiBub3QgY2FsbGluZyB0aGVtIChFZCBTaW5nbGV0b24p
CistIHJlbW92ZSBweS50ZXN0LmNvbGxlY3QuRGlyZWN0b3J5IChmb2xsb3dzIGZyb20gYSBtYWpv
ciByZWZhY3RvcmluZworICBhbmQgc2ltcGxpZmljYXRpb24gb2YgdGhlIGNvbGxlY3Rpb24gcHJv
Y2VzcykKKy0gbWFqb3JseSByZWR1Y2UgcHkudGVzdCBjb3JlIGNvZGUsIHNoaWZ0IGZ1bmN0aW9u
L3B5dGhvbiB0ZXN0aW5nIHRvIG93biBwbHVnaW4KKy0gZml4IGlzc3VlODggKGZpbmRpbmcgY3Vz
dG9tIHRlc3Qgbm9kZXMgZnJvbSBjb21tYW5kIGxpbmUgYXJnKQorLSByZWZpbmUgJ3RtcGRpcicg
Y3JlYXRpb24sIHdpbGwgbm93IGNyZWF0ZSBiYXNlbmFtZXMgYmV0dGVyIGFzc29jaWF0ZWQKKyAg
d2l0aCB0ZXN0IG5hbWVzICh0aGFua3MgUm9ubnkpCistICJ4cGFzcyIgKHVuZXhwZWN0ZWQgcGFz
cykgdGVzdHMgZG9uJ3QgY2F1c2UgZXhpdGNvZGUhPTAKKy0gZml4IGlzc3VlMTMxIC8gaXNzdWU2
MCAtIGltcG9ydGluZyBkb2N0ZXN0cyBpbiBfX2luaXRfXyBmaWxlcyB1c2VkIGFzIG5hbWVzcGFj
ZSBwYWNrYWdlcworLSBmaXggaXNzdWU5MyBzdGRvdXQvc3RkZXJyIGlzIGNhcHR1cmVkIHdoaWxl
IGltcG9ydGluZyBjb25mdGVzdC5weQorLSBmaXggYnVnOiB1bml0dGVzdCBjb2xsZWN0ZWQgZnVu
Y3Rpb25zIG5vdyBhbHNvIGNhbiBoYXZlICJweXRlc3RtYXJrIgorICBhcHBsaWVkIGF0IGNsYXNz
L21vZHVsZSBsZXZlbAorLSBhZGQgYWJpbGl0eSB0byB1c2UgImNsYXNzIiBsZXZlbCBmb3IgY2Fj
aGVkX3NldHVwIGhlbHBlcgorLSBmaXggc3RyYW5nZW5lc3M6IG1hcmsuKiBvYmplY3RzIGFyZSBu
b3cgaW1tdXRhYmxlLCBjcmVhdGUgbmV3IGluc3RhbmNlcworCisxLjMuNAorPT09PT0KKworLSBm
aXggaXNzdWUxMTE6IGltcHJvdmUgaW5zdGFsbCBkb2N1bWVudGF0aW9uIGZvciB3aW5kb3dzCist
IGZpeCBpc3N1ZTExOTogZml4IGN1c3RvbSBjb2xsZWN0YWJpbGl0eSBvZiBfX2luaXRfXy5weSBh
cyBhIG1vZHVsZQorLSBmaXggaXNzdWUxMTY6IC0tZG9jdGVzdG1vZHVsZXMgd29yayB3aXRoIF9f
aW5pdF9fLnB5IGZpbGVzIGFzIHdlbGwKKy0gZml4IGlzc3VlMTE1OiB1bmlmeSBpbnRlcm5hbCBl
eGNlcHRpb24gcGFzc3Rocm91Z2gvY2F0Y2hpbmcvR2VuZXJhdG9yRXhpdAorLSBmaXggaXNzdWUx
MTg6IG5ldyAtLXRiPW5hdGl2ZSBmb3IgcHJlc2VudGluZyBjcHl0aG9uLXN0YW5kYXJkIGV4Y2Vw
dGlvbnMKKworMS4zLjMKKz09PT09CisKKy0gZml4IGlzc3VlMTEzOiBhc3NlcnRpb24gcmVwcmVz
ZW50YXRpb24gcHJvYmxlbSB3aXRoIHRyaXBsZS1xdW90ZWQgc3RyaW5ncworICAoYW5kIHBvc3Np
Ymx5IG90aGVyIGNhc2VzKQorLSBtYWtlIGNvbmZ0ZXN0IGxvYWRpbmcgZGV0ZWN0IHRoYXQgYSBj
b25mdGVzdCBmaWxlIHdpdGggdGhlIHNhbWUKKyAgY29udGVudCB3YXMgYWxyZWFkeSBsb2FkZWQs
IGF2b2lkcyBzdXJwcmlzZXMgaW4gbmVzdGVkIGRpcmVjdG9yeSBzdHJ1Y3R1cmVzCisgIHdoaWNo
IGNhbiBiZSBwcm9kdWNlZCBlLmcuIGJ5IEh1ZHNvbi4gSXQgcHJvYmFibHkgcmVtb3ZlcyB0aGUg
bmVlZCB0byB1c2UKKyAgLS1jb25mY3V0ZGlyIGluIG1vc3QgY2FzZXMuCistIGZpeCB0ZXJtaW5h
bCBjb2xvcmluZyBmb3Igd2luMzIKKyAgKHRoYW5rcyBNaWNoYWVsIEZvb3JkIGZvciByZXBvcnRp
bmcpCistIGZpeCB3ZWlyZG5lc3M6IG1ha2UgdGVybWluYWwgd2lkdGggZGV0ZWN0aW9uIHdvcmsg
b24gc3Rkb3V0IGluc3RlYWQgb2Ygc3RkaW4KKyAgKHRoYW5rcyBBcm1pbiBSb25hY2hlciBmb3Ig
cmVwb3J0aW5nKQorLSByZW1vdmUgdHJhaWxpbmcgd2hpdGVzcGFjZSBpbiBhbGwgcHkvdGV4dCBk
aXN0cmlidXRpb24gZmlsZXMKKworMS4zLjIKKz09PT09CisKKyoqTmV3IGZlYXR1cmVzKioKKwor
LSBmaXggaXNzdWUxMDM6ICBpbnRyb2R1Y2UgcHkudGVzdC5yYWlzZXMgYXMgY29udGV4dCBtYW5h
Z2VyLCBleGFtcGxlczo6CisKKyAgICB3aXRoIHB5LnRlc3QucmFpc2VzKFplcm9EaXZpc2lvbkVy
cm9yKToKKyAgICAgICAgeCA9IDAKKyAgICAgICAgMSAvIHgKKworICAgIHdpdGggcHkudGVzdC5y
YWlzZXMoUnVudGltZUVycm9yKSBhcyBleGNpbmZvOgorICAgICAgICBjYWxsX3NvbWV0aGluZygp
CisKKyAgICAjIHlvdSBtYXkgZG8gZXh0cmEgY2hlY2tzIG9uIGV4Y2luZm8udmFsdWV8dHlwZXx0
cmFjZWJhY2sgaGVyZQorCisgICh0aGFua3MgUm9ubnkgUGZhbm5zY2htaWR0KQorCistIEZ1bmNh
cmcgZmFjdG9yaWVzIGNhbiBub3cgZHluYW1pY2FsbHkgYXBwbHkgYSBtYXJrZXIgdG8gYQorICB0
ZXN0IGludm9jYXRpb24uICBUaGlzIGlzIGZvciBleGFtcGxlIHVzZWZ1bCBpZiBhIGZhY3RvcnkK
KyAgcHJvdmlkZXMgcGFyYW1ldGVycyB0byBhIHRlc3Qgd2hpY2ggYXJlIGV4cGVjdGVkLXRvLWZh
aWw6OgorCisgICAgZGVmIHB5dGVzdF9mdW5jYXJnX19hcmcocmVxdWVzdCk6CisgICAgICAgIHJl
cXVlc3QuYXBwbHltYXJrZXIocHkudGVzdC5tYXJrLnhmYWlsKHJlYXNvbj0iZmxha3kgY29uZmln
IikpCisgICAgICAgIC4uLgorCisgICAgZGVmIHRlc3RfZnVuY3Rpb24oYXJnKToKKyAgICAgICAg
Li4uCisKKy0gaW1wcm92ZWQgZXJyb3IgcmVwb3J0aW5nIG9uIGNvbGxlY3Rpb24gYW5kIGltcG9y
dCBlcnJvcnMuIFRoaXMgbWFrZXMKKyAgdXNlIG9mIGEgbW9yZSBnZW5lcmFsIG1lY2hhbmlzbSwg
bmFtZWx5IHRoYXQgZm9yIGN1c3RvbSB0ZXN0IGl0ZW0vY29sbGVjdAorICBub2RlcyBgYG5vZGUu
cmVwcl9mYWlsdXJlKGV4Y2luZm8pYGAgaXMgbm93IHVuaWZvcm1seSBjYWxsZWQgc28gdGhhdCB5
b3UgY2FuCisgIG92ZXJyaWRlIGl0IHRvIHJldHVybiBhIHN0cmluZyBlcnJvciByZXByZXNlbnRh
dGlvbiBvZiB5b3VyIGNob2ljZQorICB3aGljaCBpcyBnb2luZyB0byBiZSByZXBvcnRlZCBhcyBh
IChyZWQpIHN0cmluZy4KKworLSBpbnRyb2R1Y2UgJy0tanVuaXRwcmVmaXg9U1RSJyBvcHRpb24g
dG8gcHJlcGVuZCBhIHByZWZpeAorICB0byBhbGwgcmVwb3J0cyBpbiB0aGUganVuaXR4bWwgZmls
ZS4KKworKipCdWcgZml4ZXMqKgorCistIG1ha2UgdGVzdHMgYW5kIHRoZSBgYHB5dGVzdF9yZWN3
YXJuYGAgcGx1Z2luIGluIHBhcnRpY3VsYXIgZnVsbHkgY29tcGF0aWJsZQorICB0byBQeXRob24y
LjcgKGlmIHlvdSB1c2UgdGhlIGBgcmVjd2FybmBgIGZ1bmNhcmcgd2FybmluZ3Mgd2lsbCBiZSBl
bmFibGVkIHNvIHRoYXQKKyAgeW91IGNhbiBwcm9wZXJseSBjaGVjayBmb3IgdGhlaXIgZXhpc3Rl
bmNlIGluIGEgY3Jvc3MtcHl0aG9uIG1hbm5lcikuCistIHJlZmluZSAtLXBkYjogaWdub3JlIHhm
YWlsZWQgdGVzdHMsIHVuaWZ5IGl0cyBUQi1yZXBvcnRpbmcgYW5kCisgIGRvbid0IGRpc3BsYXkg
ZmFpbHVyZXMgYWdhaW4gYXQgdGhlIGVuZC4KKy0gZml4IGFzc2VydGlvbiBpbnRlcnByZXRhdGlv
biB3aXRoIHRoZSAqKiBvcGVyYXRvciAodGhhbmtzIEJlbmphbWluIFBldGVyc29uKQorLSBmaXgg
aXNzdWUxMDUgYXNzaWdubWVudCBvbiB0aGUgc2FtZSBsaW5lIGFzIGEgZmFpbGluZyBhc3NlcnRp
b24gKHRoYW5rcyBCZW5qYW1pbiBQZXRlcnNvbikKKy0gZml4IGlzc3VlMTA0IHByb3BlciBlc2Nh
cGluZyBmb3IgdGVzdCBuYW1lcyBpbiBqdW5pdHhtbCBwbHVnaW4gKHRoYW5rcyBhbm9ueW1vdXMp
CistIGZpeCBpc3N1ZTU3IC1mfC0tbG9vcG9uZmFpbCB0byB3b3JrIHdpdGggeHBhc3NpbmcgdGVz
dHMgKHRoYW5rcyBSb25ueSkKKy0gZml4IGlzc3VlOTIgY29sbGVjdG9ubHkgcmVwb3J0ZXIgYW5k
IC0tcGFzdGViaW4gKHRoYW5rcyBCZW5qYW1pbiBQZXRlcnNvbikKKy0gZml4IHB5LmNvZGUuY29t
cGlsZShzb3VyY2UpIHRvIGdlbmVyYXRlIHVuaXF1ZSBmaWxlbmFtZXMKKy0gZml4IGFzc2VydGlv
biByZS1pbnRlcnAgcHJvYmxlbXMgb24gUHlQeSwgYnkgZGVmZXJpbmcgY29kZQorICBjb21waWxh
dGlvbiB0byB0aGUgKG92ZXJyaWRhYmxlKSBGcmFtZS5ldmFsIGNsYXNzLiAodGhhbmtzIEFtYXVy
eSBGb3JnZW90KQorLSBmaXggcHkucGF0aC5sb2NhbC5weWltcG9ydCgpIHRvIHdvcmsgd2l0aCBk
aXJlY3RvcmllcworLSBzdHJlYW1saW5lIHB5LnBhdGgubG9jYWwubWtkdGVtcCBpbXBsZW1lbnRh
dGlvbiBhbmQgdXNhZ2UKKy0gZG9uJ3QgcHJpbnQgZW1wdHkgbGluZXMgd2hlbiBzaG93aW5nIGp1
bml0eG1sLWZpbGVuYW1lCistIGFkZCBvcHRpb25hbCBib29sZWFuIGlnbm9yZV9lcnJvcnMgcGFy
YW1ldGVyIHRvIHB5LnBhdGgubG9jYWwucmVtb3ZlCistIGZpeCB0ZXJtaW5hbCB3cml0aW5nIG9u
IHdpbjMyL3B5dGhvbjIuNAorLSBweS5wcm9jZXNzLmNtZGV4ZWMoKSBub3cgdHJpZXMgaGFyZGVy
IHRvIHJldHVybiBwcm9wZXJseSBlbmNvZGVkIHVuaWNvZGUgb2JqZWN0cworICBvbiBhbGwgcHl0
aG9uIHZlcnNpb25zCistIGluc3RhbGwgcGxhaW4gcHkudGVzdC9weS53aGljaCBzY3JpcHRzIGFs
c28gZm9yIEp5dGhvbiwgdGhpcyBoZWxwcyB0bworICBnZXQgY2Fub25pY2FsIHNjcmlwdCBwYXRo
cyBpbiB2aXJ0dWFsZW52IHNpdHVhdGlvbnMKKy0gbWFrZSBwYXRoLmJlc3RyZWxwYXRoKHBhdGgp
IHJldHVybiAiLiIsIG5vdGUgdGhhdCB3aGVuIGNhbGxpbmcKKyAgWC5iZXN0cmVscGF0aCB0aGUg
YXNzdW1wdGlvbiBpcyB0aGF0IFggaXMgYSBkaXJlY3RvcnkuCistIG1ha2UgaW5pdGlhbCBjb25m
dGVzdCBkaXNjb3ZlcnkgaWdub3JlICItLSIgcHJlZml4ZWQgYXJndW1lbnRzCistIGZpeCByZXN1
bHRsb2cgcGx1Z2luIHdoZW4gdXNlZCBpbiBhbiBtdWx0aWNwdS9tdWx0aWhvc3QgeGRpc3Qgc2l0
dWF0aW9uCisgICh0aGFua3MgSmFrdWIgR3VzdGFrKQorLSBwZXJmb3JtIGRpc3RyaWJ1dGVkIHRl
c3RpbmcgcmVsYXRlZCByZXBvcnRpbmcgaW4gdGhlIHhkaXN0LXBsdWdpbgorICByYXRoZXIgdGhh
biBoYXZpbmcgZGlzdC1yZWxhdGVkIGNvZGUgaW4gdGhlIGdlbmVyaWMgcHkudGVzdAorICBkaXN0
cmlidXRpb24KKy0gZml4IGhvbWVkaXIgZGV0ZWN0aW9uIG9uIFdpbmRvd3MKKy0gc2hpcCBkaXN0
cmlidXRlX3NldHVwLnB5IHZlcnNpb24gMC42LjEzCisKKzEuMy4xCis9PT09PQorCisqKk5ldyBm
ZWF0dXJlcyoqCisKKy0gaXNzdWU5MTogaW50cm9kdWNlIG5ldyBweS50ZXN0LnhmYWlsKHJlYXNv
bikgaGVscGVyCisgIHRvIGltcGVyYXRpdmVseSBtYXJrIGEgdGVzdCBhcyBleHBlY3RlZCB0byBm
YWlsLiBDYW4KKyAgYmUgdXNlZCBmcm9tIHdpdGhpbiBzZXR1cCBhbmQgdGVzdCBmdW5jdGlvbnMu
IFRoaXMgaXMKKyAgdXNlZnVsIGVzcGVjaWFsbHkgZm9yIHBhcmFtZXRyaXplZCB0ZXN0cyB3aGVu
IGNlcnRhaW4KKyAgY29uZmlndXJhdGlvbnMgYXJlIGV4cGVjdGVkLXRvLWZhaWwuICBJbiB0aGlz
IGNhc2UgdGhlCisgIGRlY2xhcmF0aXZlIGFwcHJvYWNoIHdpdGggdGhlIEBweS50ZXN0Lm1hcmsu
eGZhaWwgY2Fubm90CisgIGJlIHVzZWQgYXMgaXQgd291bGQgbWFyayBhbGwgY29uZmlndXJhdGlv
bnMgYXMgeGZhaWwuCisKKy0gaXNzdWUxMDI6IGludHJvZHVjZSBuZXcgLS1tYXhmYWlsPU5VTSBv
cHRpb24gdG8gc3RvcAorICB0ZXN0IHJ1bnMgYWZ0ZXIgTlVNIGZhaWx1cmVzLiAgVGhpcyBpcyBh
IGdlbmVyYWxpemF0aW9uCisgIG9mIHRoZSAnLXgnIG9yICctLWV4aXRmaXJzdCcgb3B0aW9uIHdo
aWNoIGlzIG5vdyBlcXVpdmFsZW50CisgIHRvICctLW1heGZhaWw9MScuICBCb3RoICcteCcgYW5k
ICctLW1heGZhaWwnIHdpbGwKKyAgbm93IGFsc28gcHJpbnQgYSBsaW5lIG5lYXIgdGhlIGVuZCBp
bmRpY2F0aW5nIHRoZSBJbnRlcnJ1cHRpb24uCisKKy0gaXNzdWU4OTogYWxsb3cgcHkudGVzdC5t
YXJrIGRlY29yYXRvcnMgdG8gYmUgdXNlZCBvbiBjbGFzc2VzCisgIChjbGFzcyBkZWNvcmF0b3Jz
IHdlcmUgaW50cm9kdWNlZCB3aXRoIHB5dGhvbjIuNikgYW5kCisgIGFsc28gYWxsb3cgdG8gaGF2
ZSBtdWx0aXBsZSBtYXJrZXJzIGFwcGxpZWQgYXQgY2xhc3MvbW9kdWxlIGxldmVsCisgIGJ5IHNw
ZWNpZnlpbmcgYSBsaXN0LgorCistIGltcHJvdmUgYW5kIHJlZmluZSBsZXR0ZXIgcmVwb3J0aW5n
IGluIHRoZSBwcm9ncmVzcyBiYXI6CisgIC4gIHBhc3MKKyAgZiAgZmFpbGVkIHRlc3QKKyAgcyAg
c2tpcHBlZCB0ZXN0cyAocmVtaW5kZXI6IHVzZSBmb3IgZGVwZW5kZW5jeS9wbGF0Zm9ybSBtaXNt
YXRjaCBvbmx5KQorICB4ICB4ZmFpbGVkIHRlc3QgKHRlc3QgdGhhdCB3YXMgZXhwZWN0ZWQgdG8g
ZmFpbCkKKyAgWCAgeHBhc3NlZCB0ZXN0ICh0ZXN0IHRoYXQgd2FzIGV4cGVjdGVkIHRvIGZhaWwg
YnV0IHBhc3NlZCkKKworICBZb3UgY2FuIHVzZSBhbnkgY29tYmluYXRpb24gb2YgJ2ZzeFgnIHdp
dGggdGhlICctcicgZXh0ZW5kZWQKKyAgcmVwb3J0aW5nIG9wdGlvbi4gVGhlIHhmYWlsL3hwYXNz
IHJlc3VsdHMgd2lsbCBzaG93IHVwIGFzCisgIHNraXBwZWQgdGVzdHMgaW4gdGhlIGp1bml0eG1s
IG91dHB1dCAtIHdoaWNoIGFsc28gZml4ZXMKKyAgaXNzdWU5OS4KKworLSBtYWtlIHB5LnRlc3Qu
Y21kbGluZS5tYWluKCkgcmV0dXJuIHRoZSBleGl0c3RhdHVzIGluc3RlYWQgb2YgcmFpc2luZwor
ICBTeXN0ZW1FeGl0IGFuZCBhbHNvIGFsbG93IGl0IHRvIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1l
cy4gIFRoaXMgb2YKKyAgY291cnNlIHJlcXVpcmVzIHRoYXQgeW91ciBhcHBsaWNhdGlvbiBhbmQg
dGVzdHMgYXJlIHByb3Blcmx5IHRlYXJlZAorICBkb3duIGFuZCBkb24ndCBoYXZlIGdsb2JhbCBz
dGF0ZS4KKworKipCdWcgRml4ZXMqKgorCistIGltcHJvdmVkIHRyYWNlYmFjayBwcmVzZW50YXRp
b246CisgIC0gaW1wcm92ZWQgYW5kIHVuaWZpZWQgcmVwb3J0aW5nIGZvciAiLS10Yj1zaG9ydCIg
b3B0aW9uCisgIC0gRXJyb3JzIGR1cmluZyB0ZXN0IG1vZHVsZSBpbXBvcnRzIGFyZSBtdWNoIHNo
b3J0ZXIsICh1c2luZyAtLXRiPXNob3J0IHN0eWxlKQorICAtIHJhaXNlcyBzaG93cyBzaG9ydGVy
IG1vcmUgcmVsZXZhbnQgdHJhY2ViYWNrcworICAtIC0tZnVsbHRyYWNlIG5vdyBtb3JlIHN5c3Rl
bWF0aWNhbGx5IG1ha2VzIHRyYWNlcyBsb25nZXIgLyBpbmhpYml0cyBjdXR0aW5nCisKKy0gaW1w
cm92ZSBzdXBwb3J0IGZvciByYWlzZXMgYW5kIG90aGVyIGR5bmFtaWNhbGx5IGNvbXBpbGVkIGNv
ZGUgYnkKKyAgbWFuaXB1bGF0aW5nIHB5dGhvbidzIGxpbmVjYWNoZS5jYWNoZSBpbnN0ZWFkIG9m
IHRoZSBwcmV2aW91cworICByYXRoZXIgaGFja3kgd2F5IG9mIGNyZWF0aW5nIGN1c3RvbSBjb2Rl
IG9iamVjdHMuICBUaGlzIG1ha2VzCisgIGl0IHNlZW1sZXNzbHkgd29yayBvbiBKeXRob24gYW5k
IFB5UHkgd2hlcmUgaXQgcHJldmlvdXNseSBkaWRuJ3QuCisKKy0gZml4IGlzc3VlOTY6IG1ha2Ug
Y2FwdHVyaW5nIG1vcmUgcmVzaWxpZW50IGFnYWluc3QgQ29udHJvbC1DCisgIGludGVycnVwdGlv
bnMgKGludm9sdmVkIHNvbWV3aGF0IHN1YnN0YW50aWFsIHJlZmFjdG9yaW5nCisgIHRvIHRoZSB1
bmRlcmx5aW5nIGNhcHR1cmluZyBmdW5jdGlvbmFsaXR5IHRvIGF2b2lkIHJhY2UKKyAgY29uZGl0
aW9ucykuCisKKy0gZml4IGNoYWluaW5nIG9mIGNvbmRpdGlvbmFsIHNraXBpZi94ZmFpbCBkZWNv
cmF0b3JzIC0gc28gaXQgd29ya3Mgbm93CisgIGFzIGV4cGVjdGVkIHRvIHVzZSBtdWx0aXBsZSBA
cHkudGVzdC5tYXJrLnNraXBpZihjb25kaXRpb24pIGRlY29yYXRvcnMsCisgIGluY2x1ZGluZyBz
cGVjaWZpYyByZXBvcnRpbmcgd2hpY2ggb2YgdGhlIGNvbmRpdGlvbnMgbGVhZCB0byBza2lwcGlu
Zy4KKworLSBmaXggaXNzdWU5NTogbGF0ZS1pbXBvcnQgemxpYiBzbyB0aGF0IGl0J3Mgbm90IHJl
cXVpcmVkCisgIGZvciBnZW5lcmFsIHB5LnRlc3Qgc3RhcnR1cC4KKworLSBmaXggaXNzdWU5NDog
bWFrZSByZXBvcnRpbmcgbW9yZSByb2J1c3QgYWdhaW5zdCBib2d1cyBzb3VyY2UgY29kZQorICAo
YW5kIGludGVybmFsbHkgYmUgbW9yZSBjYXJlZnVsIHdoZW4gcHJlc2VudGluZyB1bmV4cGVjdGVk
IGJ5dGUgc2VxdWVuY2VzKQorCisKKzEuMy4wCis9PT09PQorCistIGRlcHJlY2F0ZSAtLXJlcG9y
dCBvcHRpb24gaW4gZmF2b3VyIG9mIGEgbmV3IHNob3J0ZXIgYW5kIGVhc2llciB0bworICByZW1l
bWJlciAtciBvcHRpb246IGl0IHRha2VzIGEgc3RyaW5nIGFyZ3VtZW50IGNvbnNpc3Rpbmcgb2Yg
YW55CisgIGNvbWJpbmF0aW9uIG9mICd4ZnNYJyBjaGFyYWN0ZXJzLiAgVGhleSByZWxhdGUgdG8g
dGhlIHNpbmdsZSBjaGFycworICB5b3Ugc2VlIGR1cmluZyB0aGUgZG90dGVkIHByb2dyZXNzIHBy
aW50aW5nIGFuZCB3aWxsIHByaW50IGFuIGV4dHJhIGxpbmUKKyAgcGVyIHRlc3QgYXQgdGhlIGVu
ZCBvZiB0aGUgdGVzdCBydW4uICBUaGlzIGV4dHJhIGxpbmUgaW5kaWNhdGVzIHRoZSBleGFjdAor
ICBwb3NpdGlvbiBvciB0ZXN0IElEIHRoYXQgeW91IGRpcmVjdGx5IHBhc3RlIHRvIHRoZSBweS50
ZXN0IGNtZGxpbmUgaW4gb3JkZXIKKyAgdG8gcmUtcnVuIGEgcGFydGljdWxhciB0ZXN0LgorCist
IGFsbG93IGV4dGVybmFsIHBsdWdpbnMgdG8gcmVnaXN0ZXIgbmV3IGhvb2tzIHZpYSB0aGUgbmV3
CisgIHB5dGVzdF9hZGRob29rcyhwbHVnaW5tYW5hZ2VyKSBob29rLiAgVGhlIG5ldyByZWxlYXNl
IG9mCisgIHRoZSBweXRlc3QteGRpc3QgcGx1Z2luIGZvciBkaXN0cmlidXRlZCBhbmQgbG9vcG9u
ZmFpbGluZworICB0ZXN0aW5nIHJlcXVpcmVzIHRoaXMgZmVhdHVyZS4KKworLSBhZGQgYSBuZXcg
cHl0ZXN0X2lnbm9yZV9jb2xsZWN0KHBhdGgsIGNvbmZpZykgaG9vayB0byBhbGxvdyBwcm9qZWN0
cyBhbmQKKyAgcGx1Z2lucyB0byBkZWZpbmUgZXhjbHVzaW9uIGJlaGF2aW91ciBmb3IgdGhlaXIg
ZGlyZWN0b3J5IHN0cnVjdHVyZSAtCisgIGZvciBleGFtcGxlIHlvdSBtYXkgZGVmaW5lIGluIGEg
Y29uZnRlc3QucHkgdGhpcyBtZXRob2Q6OgorCisgICAgICAgIGRlZiBweXRlc3RfaWdub3JlX2Nv
bGxlY3QocGF0aCk6CisgICAgICAgICAgICByZXR1cm4gcGF0aC5jaGVjayhsaW5rPTEpCisKKyAg
dG8gcHJldmVudCBldmVuIGEgY29sbGVjdGlvbiB0cnkgb2YgYW55IHRlc3RzIGluIHN5bWxpbmtl
ZCBkaXJzLgorCistIG5ldyBweXRlc3RfcHljb2xsZWN0X21ha2Vtb2R1bGUocGF0aCwgcGFyZW50
KSBob29rIGZvcgorICBhbGxvd2luZyBjdXN0b21pemF0aW9uIG9mIHRoZSBNb2R1bGUgY29sbGVj
dGlvbiBvYmplY3QgZm9yIGEKKyAgbWF0Y2hpbmcgdGVzdCBtb2R1bGUuCisKKy0gZXh0ZW5kIGFu
ZCByZWZpbmUgeGZhaWwgbWVjaGFuaXNtOgorICBgYEBweS50ZXN0Lm1hcmsueGZhaWwocnVuPUZh
bHNlKWBgIGRvIG5vdCBydW4gdGhlIGRlY29yYXRlZCB0ZXN0CisgIGBgQHB5LnRlc3QubWFyay54
ZmFpbChyZWFzb249Ii4uLiIpYGAgcHJpbnRzIHRoZSByZWFzb24gc3RyaW5nIGluIHhmYWlsIHN1
bW1hcmllcworICBzcGVjaWZpeWluZyBgYC0tcnVueGZhaWxgYCBvbiBjb21tYW5kIGxpbmUgdmly
dHVhbGx5IGlnbm9yZXMgeGZhaWwgbWFya2VycworCistIGV4cG9zZSAocHJldmlvdXNseSBpbnRl
cm5hbCkgY29tbW9ubHkgdXNlZnVsIG1ldGhvZHM6CisgIHB5LmlvLmdldF90ZXJtaW5hbF93aXRo
KCkgLT4gcmV0dXJuIHRlcm1pbmFsIHdpZHRoCisgIHB5LmlvLmFuc2lfcHJpbnQoLi4uKSAtPiBw
cmludCBjb2xvcmVkL2JvbGQgdGV4dCBvbiBsaW51eC93aW4zMgorICBweS5pby5zYWZlcmVwcihv
YmopIC0+IHJldHVybiBsaW1pdGVkIHJlcHJlc2VudGF0aW9uIHN0cmluZworCistIGV4cG9zZSB0
ZXN0IG91dGNvbWUgcmVsYXRlZCBleGNlcHRpb25zIGFzIHB5LnRlc3Quc2tpcC5FeGNlcHRpb24s
CisgIHB5LnRlc3QucmFpc2VzLkV4Y2VwdGlvbiBldGMuLCB1c2VmdWwgbW9zdGx5IGZvciBwbHVn
aW5zCisgIGRvaW5nIHNwZWNpYWwgb3V0Y29tZSBpbnRlcnByZXRhdGlvbi90d2Vha2luZworCist
IChpc3N1ZTg1KSBmaXgganVuaXR4bWwgcGx1Z2luIHRvIGhhbmRsZSB0ZXN0cyB3aXRoIG5vbi1h
c2NpaSBvdXRwdXQKKworLSBmaXgvcmVmaW5lIHB5dGhvbjMgY29tcGF0aWJpbGl0eSAodGhhbmtz
IEJlbmphbWluIFBldGVyc29uKQorCistIGZpeGVzIGZvciBtYWtpbmcgdGhlIGp5dGhvbi93aW4z
MiBjb21iaW5hdGlvbiB3b3JrLCBub3RlIGhvd2V2ZXI6CisgIGp5dGhvbjIuNS4xL3dpbjMyIGRv
ZXMgbm90IHByb3ZpZGUgYSBjb21tYW5kIGxpbmUgbGF1bmNoZXIsIHNlZQorICBodHRwOi8vYnVn
cy5qeXRob24ub3JnL2lzc3VlMTQ5MSAuIFNlZSBweWxpYiBpbnN0YWxsIGRvY3VtZW50YXRpb24K
KyAgZm9yIGhvdyB0byB3b3JrIGFyb3VuZC4KKworLSBmaXhlcyBmb3IgaGFuZGxpbmcgb2YgdW5p
Y29kZSBleGNlcHRpb24gdmFsdWVzIGFuZCB1bnByaW50YWJsZSBvYmplY3RzCisKKy0gKGlzc3Vl
ODcpIGZpeCB1bmJvdW5kbG9jYWwgZXJyb3IgaW4gYXNzZXJ0aW9ub2xkIGNvZGUKKworLSAoaXNz
dWU4NikgaW1wcm92ZSBkb2N1bWVudGF0aW9uIGZvciBsb29wb25mYWlsaW5nCisKKy0gcmVmaW5l
IElPIGNhcHR1cmluZzogc3RkaW4tcmVkaXJlY3QgcHNldWRvLWZpbGUgbm93IGhhcyBhIE5PUCBj
bG9zZSgpIG1ldGhvZAorCistIHNoaXAgZGlzdHJpYnV0ZV9zZXR1cC5weSB2ZXJzaW9uIDAuNi4x
MAorCistIGFkZGVkIGxpbmtzIHRvIHRoZSBuZXcgY2FwdHVyZWxvZyBhbmQgY292ZXJhZ2UgcGx1
Z2lucworCisKKzEuMi4wCis9PT09PQorCistIHJlZmluZWQgdXNhZ2UgYW5kIG9wdGlvbnMgZm9y
ICJweS5jbGVhbnVwIjo6CisKKyAgICBweS5jbGVhbnVwICAgICAjIHJlbW92ZSAiKi5weWMiIGFu
ZCAiKiRweS5jbGFzcyIgKGp5dGhvbikgZmlsZXMKKyAgICBweS5jbGVhbnVwIC1lIC5zd3AgLWUg
LmNhY2hlICMgYWxzbyByZW1vdmUgZmlsZXMgd2l0aCB0aGVzZSBleHRlbnNpb25zCisgICAgcHku
Y2xlYW51cCAtcyAgIyByZW1vdmUgImJ1aWxkIiBhbmQgImRpc3QiIGRpcmVjdG9yeSBuZXh0IHRv
IHNldHVwLnB5IGZpbGVzCisgICAgcHkuY2xlYW51cCAtZCAgIyBhbHNvIHJlbW92ZSBlbXB0eSBk
aXJlY3RvcmllcworICAgIHB5LmNsZWFudXAgLWEgICMgc3lub255bSBmb3IgIi1zIC1kIC1lICdw
aXAtbG9nLnR4dCciCisgICAgcHkuY2xlYW51cCAtbiAgIyBkcnkgcnVuLCBvbmx5IHNob3cgd2hh
dCB3b3VsZCBiZSByZW1vdmVkCisKKy0gYWRkIGEgbmV3IG9wdGlvbiAicHkudGVzdCAtLWZ1bmNh
cmdzIiB3aGljaCBzaG93cyBhdmFpbGFibGUgZnVuY2FyZ3MKKyAgYW5kIHRoZWlyIGhlbHAgc3Ry
aW5ncyAoZG9jc3RyaW5ncyBvbiB0aGVpciByZXNwZWN0aXZlIGZhY3RvcnkgZnVuY3Rpb24pCisg
IGZvciBhIGdpdmVuIHRlc3QgcGF0aAorCistIGRpc3BsYXkgYSBzaG9ydCBhbmQgY29uY2lzZSB0
cmFjZWJhY2sgaWYgYSBmdW5jYXJnIGxvb2t1cCBmYWlscworCistIGVhcmx5LWxvYWQgImNvbmZ0
ZXN0LnB5IiBmaWxlcyBpbiBub24tZG90IGZpcnN0LWxldmVsIHN1YiBkaXJlY3Rvcmllcy4KKyAg
YWxsb3dzIHRvIGNvbnZlbmllbnRseSBrZWVwIGFuZCBhY2Nlc3MgdGVzdC1yZWxhdGVkIG9wdGlv
bnMgaW4gYSBgYHRlc3RgYAorICBzdWJkaXIgYW5kIHN0aWxsIGFkZCBjb21tYW5kIGxpbmUgb3B0
aW9ucy4KKworLSBmaXggaXNzdWU2NzogbmV3IHN1cGVyLXNob3J0IHRyYWNlYmFjay1wcmludGlu
ZyBvcHRpb246ICItLXRiPWxpbmUiIHdpbGwgcHJpbnQgYSBzaW5nbGUgbGluZSBmb3IgZWFjaCBm
YWlsaW5nIChweXRob24pIHRlc3QgaW5kaWNhdGluZyBpdHMgZmlsZW5hbWUsIGxpbmVubyBhbmQg
dGhlIGZhaWx1cmUgdmFsdWUKKworLSBmaXggaXNzdWU3ODogYWx3YXlzIGNhbGwgcHl0aG9uLWxl
dmVsIHRlYXJkb3duIGZ1bmN0aW9ucyBldmVuIGlmIHRoZQorICBhY2NvcmRpbmcgc2V0dXAgZmFp
bGVkLiAgVGhpcyBpbmNsdWRlcyByZWZpbmVtZW50cyBmb3IgY2FsbGluZyBzZXR1cF9tb2R1bGUv
Y2xhc3MgZnVuY3Rpb25zCisgIHdoaWNoIHdpbGwgbm93IG9ubHkgYmUgY2FsbGVkIG9uY2UgaW5z
dGVhZCBvZiB0aGUgcHJldmlvdXMgYmVoYXZpb3VyIHdoZXJlIHRoZXknZCBiZSBjYWxsZWQKKyAg
bXVsdGlwbGUgdGltZXMgaWYgdGhleSByYWlzZSBhbiBleGNlcHRpb24gKGluY2x1ZGluZyBhIFNr
aXBwZWQgZXhjZXB0aW9uKS4gIEFueSBleGNlcHRpb24KKyAgd2lsbCBiZSByZS1jb3JkZWQgYW5k
IGFzc29jaWF0ZWQgd2l0aCBhbGwgdGVzdHMgaW4gdGhlIGFjY29yZGluZyBtb2R1bGUvY2xhc3Mg
c2NvcGUuCisKKy0gZml4IGlzc3VlNjM6IGFzc3VtZSA8NDAgY29sdW1ucyB0byBiZSBhIGJvZ3Vz
IHRlcm1pbmFsIHdpZHRoLCBkZWZhdWx0IHRvIDgwCisKKy0gZml4IHBkYiBkZWJ1Z2dpbmcgdG8g
YmUgaW4gdGhlIGNvcnJlY3QgZnJhbWUgb24gcmFpc2VzLXJlbGF0ZWQgZXJyb3JzCisKKy0gdXBk
YXRlIGFwaXBrZy5weSB0byBmaXggYW4gaXNzdWUgd2hlcmUgcmVjdXJzaXZlIGltcG9ydHMgbWln
aHQKKyAgdW5uZWNlc3NhcmlseSBicmVhayBpbXBvcnRpbmcKKworLSBmaXggcGx1Z2luIGxpbmtz
CisKKzEuMS4xCis9PT09PQorCistIG1vdmVkIGRpc3QvbG9vcG9uZmFpbGluZyBmcm9tIHB5LnRl
c3QgY29yZSBpbnRvIGEgbmV3CisgIHNlcGFyYXRlbHkgcmVsZWFzZWQgcHl0ZXN0LXhkaXN0IHBs
dWdpbi4KKworLSBuZXcganVuaXR4bWwgcGx1Z2luOiAtLWp1bml0eG1sPXBhdGggd2lsbCBnZW5l
cmF0ZSBhIGp1bml0IHN0eWxlIHhtbCBmaWxlCisgIHdoaWNoIGlzIHByb2Nlc3NhYmxlIGUuZy4g
YnkgdGhlIEh1ZHNvbiBDSSBzeXN0ZW0uCisKKy0gbmV3IG9wdGlvbjogLS1nZW5zY3JpcHQ9cGF0
aCB3aWxsIGdlbmVyYXRlIGEgc3RhbmRhbG9uZSBweS50ZXN0IHNjcmlwdAorICB3aGljaCB3aWxs
IG5vdCBuZWVkIGFueSBsaWJyYXJpZXMgaW5zdGFsbGVkLiAgdGhhbmtzIHRvIFJhbGYgU2NobWl0
dC4KKworLSBuZXcgb3B0aW9uOiAtLWlnbm9yZSB3aWxsIHByZXZlbnQgc3BlY2lmaWVkIHBhdGgg
ZnJvbSBjb2xsZWN0aW9uLgorICBDYW4gYmUgc3BlY2lmaWVkIG11bHRpcGxlIHRpbWVzLgorCist
IG5ldyBvcHRpb246IC0tY29uZmN1dGRpcj1kaXIgd2lsbCBtYWtlIHB5LnRlc3Qgb25seSBjb25z
aWRlciBjb25mdGVzdAorICBmaWxlcyB0aGF0IGFyZSByZWxhdGl2ZSB0byB0aGUgc3BlY2lmaWVk
IGRpci4KKworLSBuZXcgZnVuY2FyZzogInB5dGVzdGNvbmZpZyIgaXMgdGhlIHB5dGVzdCBjb25m
aWcgb2JqZWN0IGZvciBhY2Nlc3MKKyAgdG8gY29tbWFuZCBsaW5lIGFyZ3MgYW5kIGNhbiBub3cg
YmUgZWFzaWx5IHVzZWQgaW4gYSB0ZXN0LgorCistIGluc3RhbGwgYGBweS50ZXN0YGAgYW5kIGBg
cHkud2hpY2hgYCB3aXRoIGEgYGAtJFZFUlNJT05gYCBzdWZmaXggdG8KKyAgZGlzYW1iaWd1YXRl
IGJldHdlZW4gUHl0aG9uMywgcHl0aG9uMi5YLCBKeXRob24gYW5kIFB5UHkgaW5zdGFsbGVkIHZl
cnNpb25zLgorCistIG5ldyAicHl0ZXN0Y29uZmlnIiBmdW5jYXJnIGFsbG93cyBhY2Nlc3MgdG8g
dGVzdCBjb25maWcgb2JqZWN0CisKKy0gbmV3ICJweXRlc3RfcmVwb3J0X2hlYWRlciIgaG9vayBj
YW4gcmV0dXJuIGFkZGl0aW9uYWwgbGluZXMKKyAgdG8gYmUgZGlzcGxheWVkIGF0IHRoZSBoZWFk
ZXIgb2YgYSB0ZXN0IHJ1bi4KKworLSAoZXhwZXJpbWVudGFsKSBhbGxvdyAicHkudGVzdCBwYXRo
OjpuYW1lMTo6bmFtZTI6Oi4uLiIgZm9yIHBvaW50aW5nCisgIHRvIGEgdGVzdCB3aXRoaW4gYSB0
ZXN0IGNvbGxlY3Rpb24gZGlyZWN0bHkuICBUaGlzIG1pZ2h0IGV2ZW50dWFsbHkKKyAgZXZvbHZl
IGFzIGEgZnVsbCBzdWJzdGl0dXRlIHRvICItayIgc3BlY2lmaWNhdGlvbnMuCisKKy0gc3RyZWFt
bGluZWQgcGx1Z2luIGxvYWRpbmc6IG9yZGVyIGlzIG5vdyBhcyBkb2N1bWVudGVkIGluCisgIGN1
c3RvbWl6ZS5odG1sOiBzZXR1cHRvb2xzLCBFTlYsIGNvbW1hbmRsaW5lLCBjb25mdGVzdC4KKyAg
YWxzbyBzZXR1cHRvb2xzIGVudHJ5IHBvaW50IG5hbWVzIGFyZSB0dXJuZWQgdG8gY2Fub25pY2Fs
IG5hbWVlcyAoInB5dGVzdF8qIikKKworLSBhdXRvbWF0aWNhbGx5IHNraXAgdGVzdHMgdGhhdCBu
ZWVkICdjYXBmZCcgYnV0IGhhdmUgbm8gb3MuZHVwCisKKy0gYWxsb3cgcHl0ZXN0X2dlbmVyYXRl
X3Rlc3RzIHRvIGJlIGRlZmluZWQgaW4gY2xhc3NlcyBhcyB3ZWxsCisKKy0gZGVwcmVjYXRlIHVz
YWdlIG9mICdkaXNhYmxlZCcgYXR0cmlidXRlIGluIGZhdm91ciBvZiBweXRlc3RtYXJrCistIGRl
cHJlY2F0ZSBkZWZpbml0aW9uIG9mIERpcmVjdG9yeSwgTW9kdWxlLCBDbGFzcyBhbmQgRnVuY3Rp
b24gbm9kZXMKKyAgaW4gY29uZnRlc3QucHkgZmlsZXMuICBVc2UgcHl0ZXN0IGNvbGxlY3QgaG9v
a3MgaW5zdGVhZC4KKworLSBjb2xsZWN0aW9uL2l0ZW0gbm9kZSBzcGVjaWZpYyBydW50ZXN0L2Nv
bGxlY3QgaG9va3MgYXJlIG9ubHkgY2FsbGVkIGV4YWN0bHkKKyAgb24gbWF0Y2hpbmcgY29uZnRl
c3QucHkgZmlsZXMsIGkuZS4gb25lcyB3aGljaCBhcmUgZXhhY3RseSBiZWxvdworICB0aGUgZmls
ZXN5c3RlbSBwYXRoIG9mIGFuIGl0ZW0KKworLSBjaGFuZ2U6IHRoZSBmaXJzdCBweXRlc3RfY29s
bGVjdF9kaXJlY3RvcnkgaG9vayB0byByZXR1cm4gc29tZXRoaW5nCisgIHdpbGwgbm93IHByZXZl
bnQgZnVydGhlciBob29rcyB0byBiZSBjYWxsZWQuCisKKy0gY2hhbmdlOiBmaWdsZWFmIHBsdWdp
biBub3cgcmVxdWlyZXMgLS1maWdsZWFmIHRvIHJ1bi4gIEFsc28KKyAgY2hhbmdlIGl0cyBsb25n
IGNvbW1hbmQgbGluZSBvcHRpb25zIHRvIGJlIGEgYml0IHNob3J0ZXIgKHNlZSBweS50ZXN0IC1o
KS4KKworLSBjaGFuZ2U6IHB5dGVzdCBkb2N0ZXN0IHBsdWdpbiBpcyBub3cgZW5hYmxlZCBieSBk
ZWZhdWx0IGFuZCBoYXMgYQorICBuZXcgb3B0aW9uIC0tZG9jdGVzdC1nbG9iIHRvIHNldCBhIHBh
dHRlcm4gZm9yIGZpbGUgbWF0Y2hlcy4KKworLSBjaGFuZ2U6IHJlbW92ZSBpbnRlcm5hbCBweS5f
KiBoZWxwZXIgdmFycywgb25seSBrZWVwIHB5Ll9weWRpcgorCistIHJvYnVzdGlmeSBjYXB0dXJp
bmcgdG8gc3Vydml2ZSBpZiBjdXN0b20gcHl0ZXN0X3J1bnRlc3Rfc2V0dXAKKyAgY29kZSBmYWls
ZWQgYW5kIHByZXZlbnRlZCB0aGUgY2FwdHVyaW5nIHNldHVwIGNvZGUgZnJvbSBydW5uaW5nLgor
CistIG1ha2UgcHkudGVzdC4qIGhlbHBlcnMgcHJvdmlkZWQgYnkgZGVmYXVsdCBwbHVnaW5zIHZp
c2libGUgZWFybHkgLQorICB3b3JrcyB0cmFuc3BhcmVudGx5IGJvdGggZm9yIHB5ZG9jIGFuZCBm
b3IgaW50ZXJhY3RpdmUgc2Vzc2lvbnMKKyAgd2hpY2ggd2lsbCByZWd1bGFybHkgc2VlIGUuZy4g
cHkudGVzdC5tYXJrIGFuZCBweS50ZXN0LmltcG9ydG9yc2tpcC4KKworLSBzaW1wbGlmeSBpbnRl
cm5hbCBwbHVnaW4gbWFuYWdlciBtYWNoaW5lcnkKKy0gc2ltcGxpZnkgaW50ZXJuYWwgY29sbGVj
dGlvbiB0cmVlIGJ5IGludHJvZHVjaW5nIGEgUm9vdENvbGxlY3RvciBub2RlCisKKy0gZml4IGFz
c2VydCByZWludGVycHJlYXRpb24gdGhhdCBzZWVzIGEgY2FsbCBjb250YWluaW5nICJrZXl3b3Jk
PS4uLiIKKworLSBmaXggaXNzdWU2NjogaW52b2tlIHB5dGVzdF9zZXNzaW9uc3RhcnQgYW5kIHB5
dGVzdF9zZXNzaW9uZmluaXNoCisgIGhvb2tzIG9uIHNsYXZlcyBkdXJpbmcgZGlzdC10ZXN0aW5n
LCByZXBvcnQgbW9kdWxlL3Nlc3Npb24gdGVhcmRvd24KKyAgaG9va3MgY29ycmVjdGx5LgorCist
IGZpeCBpc3N1ZTY1OiBwcm9wZXJseSBoYW5kbGUgZGlzdC10ZXN0aW5nIGlmIG5vCisgIGV4ZWNu
ZXQvcHkgbGliIGluc3RhbGxlZCByZW1vdGVseS4KKworLSBza2lwIHNvbWUgaW5zdGFsbC10ZXN0
cyBpZiBubyBleGVjbmV0IGlzIGF2YWlsYWJsZQorCistIGZpeCBkb2NzLCBmaXggaW50ZXJuYWwg
YmluLyBzY3JpcHQgZ2VuZXJhdGlvbgorCisKKzEuMS4wCis9PT09PQorCistIGludHJvZHVjZSBh
dXRvbWF0aWMgcGx1Z2luIHJlZ2lzdHJhdGlvbiB2aWEgJ3B5dGVzdDExJworICBlbnRyeXBvaW50
cyB2aWEgc2V0dXB0b29scycgcGtnX3Jlc291cmNlcy5pdGVyX2VudHJ5X3BvaW50cworCistIGZp
eCBweS50ZXN0IGRpc3QtdGVzdGluZyB0byB3b3JrIHdpdGggZXhlY25ldCA+PSAxLjAuMGI0CisK
Ky0gcmUtaW50cm9kdWNlIHB5LnRlc3QuY21kbGluZS5tYWluKCkgZm9yIGJldHRlciBiYWNrd2Fy
ZCBjb21wYXRpYmlsaXR5CisKKy0gc3ZuIHBhdGhzOiBmaXggYSBidWcgd2l0aCBwYXRoLmNoZWNr
KHZlcnNpb25lZD1UcnVlKSBmb3Igc3ZuIHBhdGhzLAorICBhbGxvdyAnJScgaW4gc3ZuIHBhdGhz
LCBtYWtlIHN2bndjLnVwZGF0ZSgpIGRlZmF1bHQgdG8gaW50ZXJhY3RpdmUgbW9kZQorICBsaWtl
IGluIDEuMC54IGFuZCBhZGQgc3Zud2MudXBkYXRlKGludGVyYWN0aXZlPUZhbHNlKSB0byBpbmhp
Yml0IGludGVyYWN0aW9uLgorCistIHJlZmluZSBkaXN0cmlidXRlZCB0YXJiYWxsIHRvIGNvbnRh
aW4gdGVzdCBhbmQgbm8gcHljIGZpbGVzCisKKy0gdHJ5IGhhcmRlciB0byBoYXZlIGRlcHJlY2F0
aW9uIHdhcm5pbmdzIGZvciBweS5jb21wYXQuKiBhY2Nlc3NlcworICByZXBvcnQgYSBjb3JyZWN0
IGxvY2F0aW9uCisKKzEuMC4zCis9PT09PQorCisqIGFkanVzdCBhbmQgaW1wcm92ZSBkb2NzCisK
KyogcmVtb3ZlIHB5LnJlc3QgdG9vbCBhbmQgaW50ZXJuYWwgbmFtZXNwYWNlIC0gaXQgd2FzCisg
IG5ldmVyIHJlYWxseSBhZHZlcnRpc2VkIGFuZCBjYW4gc3RpbGwgYmUgdXNlZCB3aXRoCisgIHRo
ZSBvbGQgcmVsZWFzZSBpZiBuZWVkZWQuICBJZiB0aGVyZSBpcyBpbnRlcmVzdAorICBpdCBjb3Vs
ZCBiZSByZXZpdmVkIGludG8gaXRzIG93biB0b29sIGkgZ3Vlc3MuCisKKyogZml4IGlzc3VlNDgg
YW5kIGlzc3VlNTk6IHJhaXNlIGFuIEVycm9yIGlmIHRoZSBtb2R1bGUKKyAgZnJvbSBhbiBpbXBv
cnRlZCB0ZXN0IGZpbGUgZG9lcyBub3Qgc2VlbSB0byBjb21lIGZyb20KKyAgdGhlIGZpbGVwYXRo
IC0gYXZvaWRzICJzYW1lLW5hbWUiIGNvbmZ1c2lvbiB0aGF0IGhhcworICBiZWVuIHJlcG9ydGVk
IHJlcGVhdGVkbHkKKworKiBtZXJnZWQgUm9ubnkncyBub3NlLWNvbXBhdGliaWxpdHkgaGFja3M6
IG5vdworICBub3NlLXN0eWxlIHNldHVwX21vZHVsZSgpIGFuZCBzZXR1cCgpIGZ1bmN0aW9ucyBh
cmUKKyAgc3VwcG9ydGVkCisKKyogaW50cm9kdWNlIGdlbmVyYWxpemVkIHB5LnRlc3QubWFyayBm
dW5jdGlvbiBtYXJraW5nCisKKyogcmVzaHVmZmxlIC8gcmVmaW5lIGNvbW1hbmQgbGluZSBncm91
cGluZworCisqIGRlcHJlY2F0ZSBwYXJzZXIuYWRkZ3JvdXAgaW4gZmF2b3VyIG9mIGdldGdyb3Vw
IHdoaWNoIGNyZWF0ZXMgb3B0aW9uIGdyb3VwCisKKyogYWRkIC0tcmVwb3J0IGNvbW1hbmQgbGlu
ZSBvcHRpb24gdGhhdCBhbGxvd3MgdG8gY29udHJvbCBzaG93aW5nIG9mIHNraXBwZWQveGZhaWxl
ZCBzZWN0aW9ucworCisqIGdlbmVyYWxpemVkIHNraXBwaW5nOiBhIG5ldyB3YXkgdG8gbWFyayBw
eXRob24gZnVuY3Rpb25zIHdpdGggc2tpcGlmIG9yIHhmYWlsCisgIGF0IGZ1bmN0aW9uLCBjbGFz
cyBhbmQgbW9kdWxlcyBsZXZlbCBiYXNlZCBvbiBwbGF0Zm9ybSBvciBzeXMtbW9kdWxlIGF0dHJp
YnV0ZXMuCisKKyogZXh0ZW5kIHB5LnRlc3QubWFyayBkZWNvcmF0b3IgdG8gYWxsb3cgZm9yIHBv
c2l0aW9uYWwgYXJncworCisqIGludHJvZHVjZSBhbmQgdGVzdCAicHkuY2xlYW51cCAtZCIgdG8g
cmVtb3ZlIGVtcHR5IGRpcmVjdG9yaWVzCisKKyogZml4IGlzc3VlICM1OSAtIHJvYnVzdGlmeSB1
bml0dGVzdCB0ZXN0IGNvbGxlY3Rpb24KKworKiBtYWtlIGJweXRob24vaGVscCBpbnRlcmFjdGlv
biB3b3JrIGJ5IGFkZGluZyBhbiBfX2FsbF9fIGF0dHJpYnV0ZQorICB0byBBcGlNb2R1bGUsIGNs
ZWFudXAgaW5pdHBrZworCisqIHVzZSBNSVQgbGljZW5zZSBmb3IgcHlsaWIsIGFkZCBzb21lIGNv
bnRyaWJ1dG9ycworCisqIHJlbW92ZSBweS5leGVjbmV0IGNvZGUgYW5kIHN1YnN0aXR1dGUgYWxs
IHVzYWdlcyB3aXRoICdleGVjbmV0JyBwcm9wZXIKKworKiBmaXggaXNzdWU1MCAtIGNhY2hlZF9z
ZXR1cCBub3cgY2FjaGVzIG1vcmUgdG8gZXhwZWN0YXRpb25zCisgIGZvciB0ZXN0IGZ1bmN0aW9u
cyB3aXRoIG11bHRpcGxlIGFyZ3VtZW50cy4KKworKiBtZXJnZSBKYXJrbydzIGZpeGVzLCBpc3N1
ZSAjNDUgYW5kICM0NgorCisqIGFkZCB0aGUgYWJpbGl0eSB0byBzcGVjaWZ5IGEgcGF0aCBmb3Ig
cHkubG9va3VwIHRvIHNlYXJjaCBpbgorCisqIGZpeCBhIGZ1bmNhcmcgY2FjaGVkX3NldHVwIGJ1
ZyBwcm9iYWJseSBvbmx5IG9jY3VyaW5nCisgIGluIGRpc3RyaWJ1dGVkIHRlc3RpbmcgYW5kICJt
b2R1bGUiIHNjb3BlIHdpdGggdGVhcmRvd24uCisKKyogbWFueSBmaXhlcyBhbmQgY2hhbmdlcyBm
b3IgbWFraW5nIHRoZSBjb2RlIGJhc2UgcHl0aG9uMyBjb21wYXRpYmxlLAorICBtYW55IHRoYW5r
cyB0byBCZW5qYW1pbiBQZXRlcnNvbiBmb3IgaGVscGluZyB3aXRoIHRoaXMuCisKKyogY29uc29s
aWRhdGUgYnVpbHRpbnMgaW1wbGVtZW50YXRpb24gdG8gYmUgY29tcGF0aWJsZSB3aXRoID49Mi4z
LAorICBhZGQgaGVscGVycyB0byBlYXNlIGtlZXBpbmcgMiBhbmQgM2sgY29tcGF0aWJsZSBjb2Rl
CisKKyogZGVwcmVjYXRlIHB5LmNvbXBhdC5kb2N0ZXN0fHN1YnByb2Nlc3N8dGV4dHdyYXB8b3B0
cGFyc2UKKworKiBkZXByZWNhdGUgcHkubWFnaWMuYXV0b3BhdGgsIHJlbW92ZSBweS9tYWdpYyBk
aXJlY3RvcnkKKworKiBtb3ZlIHB5dGVzdCBhc3NlcnRpb24gaGFuZGxpbmcgdG8gcHkvY29kZSBh
bmQgYSBweXRlc3RfYXNzZXJ0aW9uCisgIHBsdWdpbiwgYWRkICItLW5vLWFzc2VydCIgb3B0aW9u
LCBkZXByZWNhdGUgcHkubWFnaWMgbmFtZXNwYWNlcworICBpbiBmYXZvdXIgb2YgKGxlc3MpIHB5
LmNvZGUgb25lcy4KKworKiBjb25zb2xpZGF0ZSBhbmQgY2xlYW51cCBweS9jb2RlIGNsYXNzZXMg
YW5kIGZpbGVzCisKKyogY2xlYW51cCBweS9taXNjLCBtb3ZlIHRlc3RzIHRvIGJpbi1mb3ItZGlz
dAorCisqIGludHJvZHVjZSBkZWxhdHRyL2RlbGl0ZW0vZGVsZW52IG1ldGhvZHMgdG8gcHkudGVz
dCdzIG1vbmtleXBhdGNoIGZ1bmNhcmcKKworKiBjb25zb2xpZGF0ZSBweS5sb2cgaW1wbGVtZW50
YXRpb24sIHJlbW92ZSBvbGQgYXBwcm9hY2guCisKKyogaW50cm9kdWNlIHB5LmlvLlRleHRJTyBh
bmQgcHkuaW8uQnl0ZXNJTyBmb3IgZGlzdGluZ3Vpc2hpbmcgYmV0d2VlbgorICB0ZXh0L3VuaWNv
ZGUgYW5kIGJ5dGUtc3RyZWFtcyAodXNlcyB1bmRlcmx5aW5nIHN0YW5kYXJkIGxpYiBpby4qCisg
IGlmIGF2YWlsYWJsZSkKKworKiBtYWtlIHB5LnVuaXR0ZXN0X2NvbnZlcnQgaGVscGVyIHNjcmlw
dCBhdmFpbGFibGUgd2hpY2ggY29udmVydHMgInVuaXR0ZXN0LnB5IgorICBzdHlsZSBmaWxlcyBp
bnRvIHRoZSBzaW1wbGVyIGFzc2VydC9kaXJlY3QtdGVzdC1jbGFzc2VzIHB5LnRlc3Qvbm9zZXRl
c3RzCisgIHN0eWxlLiAgVGhlIHNjcmlwdCB3YXMgd3JpdHRlbiBieSBMYXVyYSBDcmVpZ2h0b24u
CisKKyogc2ltcGxpZmllZCBpbnRlcm5hbCBsb2NhbHBhdGggaW1wbGVtZW50YXRpb24KKworMS4w
LjIKKz09PT09CisKKyogZml4aW5nIHBhY2thZ2luZyBpc3N1ZXMsIHRyaWdnZXJlZCBieSBmZWRv
cmEgcmVkaGF0IHBhY2thZ2luZywKKyAgYWxzbyBhZGRlZCBkb2MsIGV4YW1wbGVzIGFuZCBjb250
cmliIGRpcnMgdG8gdGhlIHRhcmJhbGwuCisKKyogYWRkZWQgYSBkb2N1bWVudGF0aW9uIGxpbmsg
dG8gdGhlIG5ldyBkamFuZ28gcGx1Z2luLgorCisxLjAuMQorPT09PT0KKworKiBhZGRlZCBhICdw
eXRlc3Rfbm9zZScgcGx1Z2luIHdoaWNoIGhhbmRsZXMgbm9zZS5Ta2lwVGVzdCwKKyAgbm9zZS1z
dHlsZSBmdW5jdGlvbi9tZXRob2QvZ2VuZXJhdG9yIHNldHVwL3RlYXJkb3duIGFuZAorICB0cmll
cyB0byByZXBvcnQgZnVuY3Rpb25zIGNvcnJlY3RseS4KKworKiBjYXB0dXJpbmcgb2YgdW5pY29k
ZSB3cml0ZXMgb3IgZW5jb2RlZCBzdHJpbmdzIHRvIHN5cy5zdGRvdXQvZXJyCisgIHdvcmsgYmV0
dGVyLCBhbHNvIHRlcm1pbmFsd3JpdGluZyB3YXMgYWRhcHRlZCBhbmQgc29tZXdoYXQKKyAgdW5p
ZmllZCBiZXR3ZWVuIHdpbmRvd3MgYW5kIGxpbnV4LgorCisqIGltcHJvdmVkIGRvY3VtZW50YXRp
b24gbGF5b3V0IGFuZCBjb250ZW50IGEgbG90CisKKyogYWRkZWQgYSAiLS1oZWxwLWNvbmZpZyIg
b3B0aW9uIHRvIHNob3cgY29uZnRlc3QucHkgLyBFTlYtdmFyIG5hbWVzIGZvcgorICBhbGwgbG9u
Z29wdCBjbWRsaW5lIG9wdGlvbnMsIGFuZCBzb21lIHNwZWNpYWwgY29uZnRlc3QucHkgdmFyaWFi
bGVzLgorICByZW5hbWVkICdjb25mX2NhcHR1cmUnIGNvbmZ0ZXN0IHNldHRpbmcgdG8gJ29wdGlv
bl9jYXB0dXJlJyBhY2NvcmRpbmdseS4KKworKiBmaXggaXNzdWUgIzI3OiBiZXR0ZXIgcmVwb3J0
aW5nIG9uIG5vbi1jb2xsZWN0YWJsZSBpdGVtcyBnaXZlbiBvbiBjb21tYW5kbGluZQorICAoZS5n
LiBweWMgZmlsZXMpCisKKyogZml4IGlzc3VlICMzMzogYWRkZWQgLS12ZXJzaW9uIGZsYWcgKHRo
YW5rcyBCZW5qYW1pbiBQZXRlcnNvbikKKworKiBmaXggaXNzdWUgIzMyOiBhZGRpbmcgc3VwcG9y
dCBmb3IgImluY29tcGxldGUiIHBhdGhzIHRvIHdjcGF0aC5zdGF0dXMoKQorCisqICJUZXN0IiBw
cmVmaXhlZCBjbGFzc2VzIGFyZSAqbm90KiBjb2xsZWN0ZWQgYnkgZGVmYXVsdCBhbnltb3JlIGlm
IHRoZXkKKyAgaGF2ZSBhbiBfX2luaXRfXyBtZXRob2QKKworKiBtb25rZXlwYXRjaCBzZXRlbnYo
KSBub3cgYWNjZXB0cyBhICJwcmVwZW5kIiBwYXJhbWV0ZXIKKworKiBpbXByb3ZlZCByZXBvcnRp
bmcgb2YgY29sbGVjdGlvbiBlcnJvciB0cmFjZWJhY2tzCisKKyogc2ltcGxpZmllZCBtdWx0aWNh
bGwgbWVjaGFuaXNtIGFuZCBwbHVnaW4gYXJjaGl0ZWN0dXJlLAorICByZW5hbWVkIHNvbWUgaW50
ZXJuYWwgbWV0aG9kcyBhbmQgYXJnbmFtZXMKKworMS4wLjAKKz09PT09CisKKyogbW9yZSB0ZXJz
ZSByZXBvcnRpbmcgdHJ5IHRvIHNob3cgZmlsZXN5c3RlbSBwYXRoIHJlbGF0aXZlbHkgdG8gY3Vy
cmVudCBkaXIKKyogaW1wcm92ZSB4ZmFpbCBvdXRwdXQgYSBiaXQKKworMS4wLjBiOQorPT09PT09
PQorCisqIGNsZWFubHkgaGFuZGxlIGFuZCByZXBvcnQgZmluYWwgdGVhcmRvd24gb2YgdGVzdCBz
ZXR1cAorCisqIGZpeCBzdm4tMS42IGNvbXBhdCBpc3N1ZSB3aXRoIHB5LnBhdGguc3Zud2MoKS52
ZXJzaW9uZWQoKQorICAodGhhbmtzIFdvdXRlciBWYW5kZW4gSG92ZSkKKworKiBzZXR1cC90ZWFy
ZG93biBvciBjb2xsZWN0aW9uIHByb2JsZW1zIG5vdyBzaG93IGFzIEVSUk9ScworICBvciB3aXRo
IGJpZyAiRSIncyBpbiB0aGUgcHJvZ3Jlc3MgbGluZXMuICB0aGV5IGFyZSByZXBvcnRlZAorICBh
bmQgY291bnRlZCBzZXBhcmF0ZWx5LgorCisqIGRpc3QtdGVzdGluZzogcHJvcGVybHkgaGFuZGxl
IHRlc3QgaXRlbXMgdGhhdCBnZXQgbG9jYWxseQorICBjb2xsZWN0ZWQgYnV0IGNhbm5vdCBiZSBj
b2xsZWN0ZWQgb24gdGhlIHJlbW90ZSBzaWRlIC0gb2Z0ZW4KKyAgZHVlIHRvIHBsYXRmb3JtL2Rl
cGVuZGVuY3kgcmVhc29ucworCisqIHNpbXBsaWZpZWQgcHkudGVzdC5tYXJrIEFQSSAtIHNlZSBr
ZXl3b3JkIHBsdWdpbiBkb2N1bWVudGF0aW9uCisKKyogaW50ZWdyYXRlIGJldHRlciB3aXRoIGxv
Z2dpbmc6IGNhcHR1cmluZyBub3cgYnkgZGVmYXVsdCBjYXB0dXJlcworICB0ZXN0IGZ1bmN0aW9u
cyBhbmQgdGhlaXIgaW1tZWRpYXRlIHNldHVwL3RlYXJkb3duIGluIGEgc2luZ2xlIHN0cmVhbQor
CisqIGNhcHN5cyBhbmQgY2FwZmQgZnVuY2FyZ3Mgbm93IGhhdmUgYSByZWFkb3V0ZXJyKCkgYW5k
IGEgY2xvc2UoKSBtZXRob2QKKyAgKHVuZGVybHlpbmdseSBweS5pby5TdGRDYXB0dXJlL0ZEIG9i
amVjdHMgYXJlIHVzZWQgd2hpY2ggZ3JldyBhCisgIHJlYWRvdXRlcnIoKSBtZXRob2QgYXMgd2Vs
bCB0byByZXR1cm4gc25hcHNob3RzIG9mIGNhcHR1cmVkIG91dC9lcnIpCisKKyogbWFrZSBhc3Nl
cnQtcmVpbnRlcnByZXRhdGlvbiB3b3JrIGJldHRlciB3aXRoIGNvbXBhcmlzb25zIG5vdAorICBy
ZXR1cm5pbmcgYm9vbHMgKHJlcG9ydGVkIHdpdGggbnVtcHkgZnJvbSB0aGFua3MgbWFjaWVqIGZp
amFsa293c2tpKQorCisqIHJld29ya2VkIHBlci10ZXN0IG91dHB1dCBjYXB0dXJpbmcgaW50byB0
aGUgcHl0ZXN0X2lvY2FwdHVyZS5weSBwbHVnaW4KKyAgYW5kIHRodXMgcmVtb3ZlZCBjYXB0dXJp
bmcgY29kZSBmcm9tIGNvbmZpZyBvYmplY3QKKworKiBpdGVtLnJlcHJfZmFpbHVyZShleGNpbmZv
KSBpbnN0ZWFkIG9mIGl0ZW0ucmVwcl9mYWlsdXJlKGV4Y2luZm8sIG91dGVycikKKworCisxLjAu
MGI4Cis9PT09PT09CisKKyogcHl0ZXN0X3VuaXR0ZXN0LXBsdWdpbiBpcyBub3cgZW5hYmxlZCBi
eSBkZWZhdWx0CisKKyogaW50cm9kdWNlZCBweXRlc3Rfa2V5Ym9hcmRpbnRlcnJ1cHQgaG9vayBh
bmQKKyAgcmVmaW5lZCBweXRlc3Rfc2Vzc2lvbmZpbmlzaCBob29rZWQsIGFkZGVkIHRlc3RzLgor
CisqIHdvcmthcm91bmQgYSBidWdneSBsb2dnaW5nIG1vZHVsZSBpbnRlcmFjdGlvbiAoImNsb3Np
bmcgYWxyZWFkeSBjbG9zZWQKKyAgZmlsZXMiKS4gIFRoYW5rcyB0byBTcmlkaGFyIFJhdG5ha3Vt
YXIgZm9yIHRyaWdnZXJpbmcuCisKKyogaWYgcGx1Z2lucyB1c2UgInB5LnRlc3QuaW1wb3J0b3Jz
a2lwIiBmb3IgaW1wb3J0aW5nCisgIGEgZGVwZW5kZW5jeSBvbmx5IGEgd2FybmluZyB3aWxsIGJl
IGlzc3VlZCBpbnN0ZWFkCisgIG9mIGV4aXRpbmcgdGhlIHRlc3RpbmcgcHJvY2Vzcy4KKworKiBt
YW55IGltcHJvdmVtZW50cyB0byBkb2NzOgorICAtIHJlZmluZWQgZnVuY2FyZ3MgZG9jICwgdXNl
IHRoZSB0ZXJtICJmYWN0b3J5IiBpbnN0ZWFkIG9mICJwcm92aWRlciIKKyAgLSBhZGRlZCBhIG5l
dyB0YWxrL3R1dG9yaWFsIGRvYyBwYWdlCisgIC0gYmV0dGVyIGRvd25sb2FkIHBhZ2UKKyAgLSBi
ZXR0ZXIgcGx1Z2luIGRvY3N0cmluZ3MKKyAgLSBhZGRlZCBuZXcgcGx1Z2lucyBwYWdlIGFuZCBh
dXRvbWF0aWMgZG9jIGdlbmVyYXRpb24gc2NyaXB0CisKKyogZml4ZWQgdGVhcmRvd24gcHJvYmxl
bSByZWxhdGVkIHRvIHBhcnRpYWxseSBmYWlsaW5nIGZ1bmNhcmcgc2V0dXBzCisgICh0aGFua3Mg
TXJUb3BmIGZvciByZXBvcnRpbmcpLCAicHl0ZXN0X3J1bnRlc3RfdGVhcmRvd24iIGlzIG5vdwor
ICBhbHdheXMgaW52b2tlZCBldmVuIGlmIHRoZSAicHl0ZXN0X3J1bnRlc3Rfc2V0dXAiIGZhaWxl
ZC4KKworKiB0d2Vha2VkIGRvY3Rlc3Qgb3V0cHV0IGZvciBkb2NzdHJpbmdzIGluIHB5IG1vZHVs
ZXMsCisgIHRoYW5rcyBSYWRvbWlyLgorCisxLjAuMGI3Cis9PT09PT09CisKKyogcmVuYW1lZCBw
eS50ZXN0LnhmYWlsIGJhY2sgdG8gcHkudGVzdC5tYXJrLnhmYWlsIHRvIGF2b2lkCisgIHR3byB3
YXlzIHRvIGRlY29yYXRlIGZvciB4ZmFpbAorCisqIHJlLWFkZGVkIHB5LnRlc3QubWFyayBkZWNv
cmF0b3IgZm9yIHNldHRpbmcga2V5d29yZHMgb24gZnVuY3Rpb25zCisgIChpdCB3YXMgYWN0dWFs
bHkgZG9jdW1lbnRlZCBzbyByZW1vdmluZyBpdCB3YXMgbm90IG5pY2UpCisKKyogcmVtb3ZlIHNj
b3BlLWFyZ3VtZW50IGZyb20gcmVxdWVzdC5hZGRmaW5hbGl6ZXIoKSBiZWNhdXNlCisgIHJlcXVl
c3QuY2FjaGVkX3NldHVwIGhhcyB0aGUgc2NvcGUgYXJnLiBUT09XVERJLgorCisqIHBlcmZvcm0g
c2V0dXAgZmluYWxpemF0aW9uIGJlZm9yZSByZXBvcnRpbmcgZmFpbHVyZXMKKworKiBhcHBseSBt
b2RpZmllZCBwYXRjaGVzIGZyb20gQW5kcmVhcyBLbG9lY2tuZXIgdG8gYWxsb3cKKyAgdGVzdCBm
dW5jdGlvbnMgdG8gaGF2ZSBubyBmdW5jX2NvZGUgKCMyMikgYW5kIHRvIG1ha2UKKyAgIi1rIiBh
bmQgZnVuY3Rpb24ga2V5d29yZHMgd29yayAgKCMyMCkKKworKiBhcHBseSBwYXRjaCBmcm9tIERh
bmllbCBQZW9semxlaXRobmVyIChpc3N1ZSAjMjMpCisKKyogcmVzb2x2ZSBpc3N1ZSAjMTgsIG11
bHRpcHJvY2Vzc2luZy5NYW5hZ2VyKCkgYW5kCisgIHJlZGlyZWN0aW9uIGNsYXNoCisKKyogbWFr
ZSBfX25hbWVfXyA9PSAiX19jaGFubmVsZXhlY19fIiBmb3IgcmVtb3RlX2V4ZWMgY29kZQorCisx
LjAuMGIzCis9PT09PT09CisKKyogcGx1Z2luIGNsYXNzZXMgYXJlIHJlbW92ZWQ6IG9uZSBub3cg
ZGVmaW5lcworICBob29rcyBkaXJlY3RseSBpbiBjb25mdGVzdC5weSBvciBnbG9iYWwgcHl0ZXN0
XyoucHkKKyAgZmlsZXMuCisKKyogYWRkZWQgbmV3IHB5dGVzdF9uYW1lc3BhY2UoY29uZmlnKSBo
b29rIHRoYXQgYWxsb3dzCisgIHRvIGluamVjdCBoZWxwZXJzIGRpcmVjdGx5IHRvIHRoZSBweS50
ZXN0LiogbmFtZXNwYWNlLgorCisqIGRvY3VtZW50ZWQgYW5kIHJlZmluZWQgbWFueSBob29rcwor
CisqIGFkZGVkIG5ldyBzdHlsZSBvZiBnZW5lcmF0aXZlIHRlc3RzIHZpYQorICBweXRlc3RfZ2Vu
ZXJhdGVfdGVzdHMgaG9vayB0aGF0IGludGVncmF0ZXMKKyAgd2VsbCB3aXRoIGZ1bmN0aW9uIGFy
Z3VtZW50cy4KKworCisxLjAuMGIxCis9PT09PT09CisKKyogaW50cm9kdWNlZCBuZXcgImZ1bmNh
cmciIHNldHVwIG1ldGhvZCwKKyAgc2VlIGRvYy90ZXN0L2Z1bmNhcmcudHh0CisKKyogaW50cm9k
dWNlZCBwbHVnaW4gYXJjaGl0ZWN0dXJlIGFuZCBtYW55CisgIG5ldyBweS50ZXN0IHBsdWdpbnMs
IHNlZQorICBkb2MvdGVzdC9wbHVnaW5zLnR4dAorCisqIHRlYXJkb3duX21ldGhvZCBpcyBub3cg
Z3VhcmFudGVlZCB0byBnZXQKKyAgY2FsbGVkIGFmdGVyIGEgdGVzdCBtZXRob2QgaGFzIHJ1bi4K
KworKiBuZXcgbWV0aG9kOiBweS50ZXN0LmltcG9ydG9yc2tpcChtb2QsbWludmVyc2lvbikKKyAg
d2lsbCBlaXRoZXIgaW1wb3J0IG9yIGNhbGwgcHkudGVzdC5za2lwKCkKKworKiBjb21wbGV0ZWx5
IHJldmlzZWQgaW50ZXJuYWwgcHkudGVzdCBhcmNoaXRlY3R1cmUKKworKiBuZXcgcHkucHJvY2Vz
cy5Gb3JrZWRGdW5jIG9iamVjdCBhbGxvd2luZyB0bworICBmb3JrIGV4ZWN1dGlvbiBvZiBhIGZ1
bmN0aW9uIHRvIGEgc3ViIHByb2Nlc3MKKyAgYW5kIGdldHRpbmcgYSByZXN1bHQgYmFjay4KKwor
WFhYIGxvdHMgb2YgdGhpbmdzIG1pc3NpbmcgaGVyZSBYWFgKKworMC45LjIKKz09PT09CisKKyog
cmVmaW5lZCBpbnN0YWxsYXRpb24gYW5kIG1ldGFkYXRhLCBjcmVhdGVkIG5ldyBzZXR1cC5weSwK
KyAgbm93IGJhc2VkIG9uIHNldHVwdG9vbHMvZXpfc2V0dXAgKHRoYW5rcyB0byBSYWxmIFNjaG1p
dHQKKyAgZm9yIGhpcyBzdXBwb3J0KS4KKworKiBpbXByb3ZlZCB0aGUgd2F5IG9mIG1ha2luZyBw
eS4qIHNjcmlwdHMgYXZhaWxhYmxlIGluCisgIHdpbmRvd3MgZW52aXJvbm1lbnRzLCB0aGV5IGFy
ZSBub3cgYWRkZWQgdG8gdGhlCisgIFNjcmlwdHMgZGlyZWN0b3J5IGFzICIuY21kIiBmaWxlcy4K
KworKiBweS5wYXRoLnN2bndjLnN0YXR1cygpIG5vdyBpcyBtb3JlIGNvbXBsZXRlIGFuZAorICB1
c2VzIHhtbCBvdXRwdXQgZnJvbSB0aGUgJ3N2bicgY29tbWFuZCBpZiBhdmFpbGFibGUKKyAgKEd1
aWRvIFdlc2RvcnApCisKKyogZml4IGZvciBweS5wYXRoLnN2biogdG8gd29yayB3aXRoIHN2biAx
LjUKKyAgKENocmlzIExhbWIpCisKKyogZml4IHBhdGgucmVsdG8ob3RoZXJwYXRoKSBtZXRob2Qg
b24gd2luZG93cyB0bworICB1c2Ugbm9ybWNhc2UgZm9yIGNoZWNraW5nIGlmIGEgcGF0aCBpcyBy
ZWxhdGl2ZS4KKworKiBweS50ZXN0J3MgdHJhY2ViYWNrIGlzIGJldHRlciBwYXJzZWFibGUgZnJv
bSBlZGl0b3JzCisgIChmb2xsb3dzIHRoZSBmaWxlbmFtZXM6TElORU5POiBNU0cgY29udmVudGlv
bikKKyAgKHRoYW5rcyB0byBPc21vIFNhbG9tYWEpCisKKyogZml4IHRvIGphdmFzY3JpcHQtZ2Vu
ZXJhdGlvbiwgInB5LnRlc3QgLS1ydW5icm93c2VyIgorICBzaG91bGQgd29yayBtb3JlIHJlbGlh
Ymx5IG5vdworCisqIHJlbW92ZWQgcHJldmlvdXNseSBhY2NpZGVudGFsbHkgYWRkZWQKKyAgcHku
dGVzdC5icm9rZW4gYW5kIHB5LnRlc3Qubm90aW1wbGVtZW50ZWQgaGVscGVycy4KKworKiB0aGVy
ZSBub3cgaXMgYSBweS5fX3ZlcnNpb25fXyBhdHRyaWJ1dGUKKworMC45LjEKKz09PT09CisKK1Ro
aXMgaXMgYSBmYWlybHkgY29tcGxldGUgbGlzdCBvZiB2MC45LjEsIHdoaWNoIGNhbgorc2VydmUg
YXMgYSByZWZlcmVuY2UgZm9yIGRldmVsb3BlcnMuCisKKyogYWxsb3dpbmcgKyBzaWducyBpbiBw
eS5wYXRoLnN2biB1cmxzIFszOTEwNl0KKyogZml4ZWQgc3VwcG9ydCBmb3IgRmFpbGVkIGV4Y2Vw
dGlvbnMgd2l0aG91dCBleGNpbmZvIGluIHB5LnRlc3QgWzM5MzQwXQorKiBhZGRlZCBzdXBwb3J0
IGZvciBraWxsaW5nIHByb2Nlc3NlcyBmb3IgV2luZG93cyAoYXMgd2VsbCBhcyBwbGF0Zm9ybXMg
dGhhdAorICBzdXBwb3J0IG9zLmtpbGwpIGluIHB5Lm1pc2Mua2lsbHByb2MgWzM5NjU1XQorKiBh
ZGRlZCBzZXR1cC90ZWFyZG93biBmb3IgZ2VuZXJhdGl2ZSB0ZXN0cyB0byBweS50ZXN0IFs0MDcw
Ml0KKyogYWRkZWQgZGV0ZWN0aW9uIG9mIEZBSUxFRCBUTyBMT0FEIE1PRFVMRSB0byBweS50ZXN0
IFs0MDcwMywgNDA3MzgsIDQwNzM5XQorKiBmaXhlZCBwcm9ibGVtIHdpdGggY2FsbGluZyAucmVt
b3ZlKCkgb24gd2NwYXRocyBvZiBub24tdmVyc2lvbmVkIGZpbGVzIGluCisgIHB5LnBhdGggWzQ0
MjQ4XQorKiBmaXhlZCBzb21lIGltcG9ydCBhbmQgaW5oZXJpdGFuY2UgaXNzdWVzIGluIHB5LnRl
c3QgWzQxNDgwLCA0NDY0OCwgNDQ2NTVdCisqIGZhaWwgdG8gcnVuIGdyZWVubGV0IHRlc3RzIHdo
ZW4gcHlweSBpcyBhdmFpbGFibGUsIGJ1dCB3aXRob3V0IHN0YWNrbGVzcworICBbNDUyOTRdCisq
IHNtYWxsIGZpeGVzIGluIHJzZXNzaW9uIHRlc3RzIFs0NTI5NV0KKyogZml4ZWQgaXNzdWUgd2l0
aCAyLjUgdHlwZSByZXByZXNlbnRhdGlvbnMgaW4gcHkudGVzdCBbNDU0ODMsIDQ1NDg0XQorKiBt
YWRlIHRoYXQgaW50ZXJuYWwgcmVwb3J0aW5nIGlzc3VlcyBkaXNwbGF5aW5nIGlzIGRvbmUgYXRv
bWljYWxseSBpbiBweS50ZXN0CisgIFs0NTUxOF0KKyogbWFkZSB0aGF0IG5vbi1leGlzdGluZyBm
aWxlcyBhcmUgaWdvcmVkIGJ5IHRoZSBweS5sb29rdXAgc2NyaXB0IFs0NTUxOV0KKyogaW1wcm92
ZWQgZXhjZXB0aW9uIG5hbWUgY3JlYXRpb24gaW4gcHkudGVzdCBbNDU1MzVdCisqIG1hZGUgdGhh
dCBsZXNzIHRocmVhZHMgYXJlIHVzZWQgaW4gZXhlY25ldCBbbWVyZ2UgaW4gNDU1MzldCisqIHJl
bW92ZWQgbG9jayByZXF1aXJlZCBmb3IgYXRvbWljYWwgcmVwb3J0aW5nIGlzc3VlIGRpc3BsYXlp
bmcgaW4gcHkudGVzdAorICBbNDU1NDVdCisqIHJlbW92ZWQgZ2xvYmFscyBmcm9tIGV4ZWNuZXQg
WzQ1NTQxLCA0NTU0N10KKyogcmVmYWN0b3JlZCBjbGVhbnVwIG1lY2hhbmljcywgbWFkZSB0aGF0
IHNldERhZW1vbiBpcyBzZXQgdG8gMSB0byBtYWtlIGF0ZXhpdAorICBnZXQgY2FsbGVkIGluIDIu
NSAocHkuZXhlY25ldCkgWzQ1NTQ4XQorKiBmaXhlZCBidWcgaW4gam9pbmluZyB0aHJlYWRzIGlu
IHB5LmV4ZWNuZXQncyBzZXJ2ZW1haW4gWzQ1NTQ5XQorKiByZWZhY3RvcmVkIHB5LnRlc3QucnNl
c3Npb24gdGVzdHMgdG8gbm90IHJlbHkgb24gZXhhY3Qgb3V0cHV0IGZvcm1hdCBhbnltb3JlCisg
IFs0NTY0Nl0KKyogdXNpbmcgcmVwcigpIG9uIHRlc3Qgb3V0Y29tZSBbNDU2NDddCisqIGFkZGVk
ICdSZWFzb24nIGNsYXNzZXMgZm9yIHB5LnRlc3Quc2tpcCgpIFs0NTY0OCwgNDU2NDldCisqIGtp
bGxlZCBzb21lIHVubmVjZXNzYXJ5IHNhbml0eSBjaGVjayBpbiBweS50ZXN0LmNvbGxlY3QgWzQ1
NjU1XQorKiBhdm9pZCB1c2luZyBvcy50bXBmaWxlKCkgaW4gcHkuaW8uZmRjYXB0dXJlIGJlY2F1
c2Ugb24gV2luZG93cyBpdCdzIG9ubHkKKyAgdXNhYmxlIGJ5IEFkbWluaXN0cmF0b3JzIFs0NTkw
MV0KKyogYWRkZWQgc3VwcG9ydCBmb3IgbG9ja2luZyBhbmQgbm9uLXJlY3Vyc2l2ZSBjb21taXRz
IHRvIHB5LnBhdGguc3Zud2MgWzQ1OTk0XQorKiBsb2NraW5nIGZpbGVzIGluIHB5LmV4ZWNuZXQg
dG8gcHJldmVudCBDUHl0aG9uIGZyb20gc2VnZmF1bHRpbmcgWzQ2MDEwXQorKiBhZGRlZCBleHBv
cnQoKSBtZXRob2QgdG8gcHkucGF0aC5zdm51cmwKKyogZml4ZWQgLWQgLXggaW4gcHkudGVzdCBb
NDcyNzddCisqIGZpeGVkIGFyZ3VtZW50IGNvbmNhdGVuYXRpb24gcHJvYmxlbSBpbiBweS5wYXRo
LnN2bndjIFs0OTQyM10KKyogcmVzdG9yZSBweS50ZXN0IGJlaGF2aW91ciB0aGF0IGl0IGV4aXRz
IHdpdGggY29kZSAxIHdoZW4gdGhlcmUgYXJlIGZhaWx1cmVzCisgIFs0OTk3NF0KKyogZG9uJ3Qg
ZmFpbCBvbiBodG1sIGZpbGVzIHRoYXQgZG9uJ3QgaGF2ZSBhbiBhY2NvbXBhbnlpbmcgLnR4dCBm
aWxlIFs1MDYwNl0KKyogZml4ZWQgJ3V0ZXN0Y29udmVydC5weSA8IGlucHV0JyBbNTA2NDVdCisq
IHNtYWxsIGZpeCBmb3IgY29kZSBpbmRlbnRhdGlvbiBpbiBweS5jb2RlLnNvdXJjZSBbNTA3NTVd
CisqIGZpeCBfZG9jZ2VuLnB5IGRvY3VtZW50YXRpb24gYnVpbGRpbmcgWzUxMjg1XQorKiBpbXBy
b3ZlZCBjaGVja3MgZm9yIHNvdXJjZSByZXByZXNlbnRhdGlvbiBvZiBjb2RlIGJsb2NrcyBpbiBw
eS50ZXN0IFs1MTI5Ml0KKyogYWRkZWQgc3VwcG9ydCBmb3IgcGFzc2luZyBhdXRoZW50aWNhdGlv
biB0byBweS5wYXRoLnN2biogb2JqZWN0cyBbNTIwMDAsCisgIDUyMDAxXQorKiByZW1vdmVkIHNv
cnRlZCgpIGNhbGwgZm9yIHB5LmFwaWdlbiB0ZXN0cyBpbiBmYXZvdXIgb2YgW10uc29ydCgpIHRv
IHN1cHBvcnQKKyAgUHl0aG9uIDIuMyBbNTI0ODFdCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0
cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L0NPTlRSSUJVVElORy5yc3QgYi9XZWJEcml2ZXJU
ZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L0NPTlRSSUJVVElORy5yc3QKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjc1ZWUzZWMzMmQzCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9DT05UUklCVVRJ
TkcucnN0CkBAIC0wLDAgKzEsMjUzIEBACis9PT09PT09PT09PT09PT09PT09PT09PT09PT09CitD
b250cmlidXRpb24gZ2V0dGluZyBzdGFydGVkCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09
CisKK0NvbnRyaWJ1dGlvbnMgYXJlIGhpZ2hseSB3ZWxjb21lZCBhbmQgYXBwcmVjaWF0ZWQuICBF
dmVyeSBsaXR0bGUgaGVscCBjb3VudHMsCitzbyBkbyBub3QgaGVzaXRhdGUhCisKKy4uIGNvbnRl
bnRzOjogQ29udHJpYnV0aW9uIGxpbmtzCisgICA6ZGVwdGg6IDIKKworCisuLiBfc3VibWl0ZmVl
ZGJhY2s6CisKK0ZlYXR1cmUgcmVxdWVzdHMgYW5kIGZlZWRiYWNrCistLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCitEbyB5b3UgbGlrZSBweXRlc3Q/ICBTaGFyZSBzb21lIGxvdmUgb24g
VHdpdHRlciBvciBpbiB5b3VyIGJsb2cgcG9zdHMhCisKK1dlJ2QgYWxzbyBsaWtlIHRvIGhlYXIg
YWJvdXQgeW91ciBwcm9wb3NpdGlvbnMgYW5kIHN1Z2dlc3Rpb25zLiAgRmVlbCBmcmVlIHRvCitg
c3VibWl0IHRoZW0gYXMgaXNzdWVzIDxodHRwczovL2dpdGh1Yi5jb20vcHl0ZXN0LWRldi9weXRl
c3QvaXNzdWVzPmBfIGFuZDoKKworKiBFeHBsYWluIGluIGRldGFpbCBob3cgdGhleSBzaG91bGQg
d29yay4KKyogS2VlcCB0aGUgc2NvcGUgYXMgbmFycm93IGFzIHBvc3NpYmxlLiAgVGhpcyB3aWxs
IG1ha2UgaXQgZWFzaWVyIHRvIGltcGxlbWVudC4KKworCisuLiBfcmVwb3J0YnVnczoKKworUmVw
b3J0IGJ1Z3MKKy0tLS0tLS0tLS0tCisKK1JlcG9ydCBidWdzIGZvciBweXRlc3QgaW4gdGhlIGBp
c3N1ZSB0cmFja2VyIDxodHRwczovL2dpdGh1Yi5jb20vcHl0ZXN0LWRldi9weXRlc3QvaXNzdWVz
PmBfLgorCitJZiB5b3UgYXJlIHJlcG9ydGluZyBhIGJ1ZywgcGxlYXNlIGluY2x1ZGU6CisKKyog
WW91ciBvcGVyYXRpbmcgc3lzdGVtIG5hbWUgYW5kIHZlcnNpb24uCisqIEFueSBkZXRhaWxzIGFi
b3V0IHlvdXIgbG9jYWwgc2V0dXAgdGhhdCBtaWdodCBiZSBoZWxwZnVsIGluIHRyb3VibGVzaG9v
dGluZywKKyAgc3BlY2lmaWNhbGx5IFB5dGhvbiBpbnRlcnByZXRlciB2ZXJzaW9uLAorICBpbnN0
YWxsZWQgbGlicmFyaWVzIGFuZCBweXRlc3QgdmVyc2lvbi4KKyogRGV0YWlsZWQgc3RlcHMgdG8g
cmVwcm9kdWNlIHRoZSBidWcuCisKK0lmIHlvdSBjYW4gd3JpdGUgYSBkZW1vbnN0cmF0aW9uIHRl
c3QgdGhhdCBjdXJyZW50bHkgZmFpbHMgYnV0IHNob3VsZCBwYXNzICh4ZmFpbCksCit0aGF0IGlz
IGEgdmVyeSB1c2VmdWwgY29tbWl0IHRvIG1ha2UgYXMgd2VsbCwgZXZlbiBpZiB5b3UgY2FuJ3Qg
ZmluZCBob3cKK3RvIGZpeCB0aGUgYnVnIHlldC4KKworCisuLiBfZml4YnVnczoKKworRml4IGJ1
Z3MKKy0tLS0tLS0tCisKK0xvb2sgdGhyb3VnaCB0aGUgR2l0SHViIGlzc3VlcyBmb3IgYnVncy4g
IEhlcmUgaXMgc2FtcGxlIGZpbHRlciB5b3UgY2FuIHVzZToKK2h0dHBzOi8vZ2l0aHViLmNvbS9w
eXRlc3QtZGV2L3B5dGVzdC9sYWJlbHMvYnVnCisKKzpyZWY6YFRhbGsgPGNvbnRhY3Q+YCB0byBk
ZXZlbG9wZXJzIHRvIGZpbmQgb3V0IGhvdyB5b3UgY2FuIGZpeCBzcGVjaWZpYyBidWdzLgorCitE
b24ndCBmb3JnZXQgdG8gY2hlY2sgdGhlIGlzc3VlIHRyYWNrZXJzIG9mIHlvdXIgZmF2b3VyaXRl
IHBsdWdpbnMsIHRvbyEKKworLi4gX3dyaXRlcGx1Z2luczoKKworSW1wbGVtZW50IGZlYXR1cmVz
CistLS0tLS0tLS0tLS0tLS0tLS0KKworTG9vayB0aHJvdWdoIHRoZSBHaXRIdWIgaXNzdWVzIGZv
ciBlbmhhbmNlbWVudHMuICBIZXJlIGlzIHNhbXBsZSBmaWx0ZXIgeW91CitjYW4gdXNlOgoraHR0
cHM6Ly9naXRodWIuY29tL3B5dGVzdC1kZXYvcHl0ZXN0L2xhYmVscy9lbmhhbmNlbWVudAorCis6
cmVmOmBUYWxrIDxjb250YWN0PmAgdG8gZGV2ZWxvcGVycyB0byBmaW5kIG91dCBob3cgeW91IGNh
biBpbXBsZW1lbnQgc3BlY2lmaWMKK2ZlYXR1cmVzLgorCitXcml0ZSBkb2N1bWVudGF0aW9uCist
LS0tLS0tLS0tLS0tLS0tLS0tCisKK3B5dGVzdCBjb3VsZCBhbHdheXMgdXNlIG1vcmUgZG9jdW1l
bnRhdGlvbi4gIFdoYXQgZXhhY3RseSBpcyBuZWVkZWQ/CisKKyogTW9yZSBjb21wbGVtZW50YXJ5
IGRvY3VtZW50YXRpb24uICBIYXZlIHlvdSBwZXJoYXBzIGZvdW5kIHNvbWV0aGluZyB1bmNsZWFy
PworKiBEb2N1bWVudGF0aW9uIHRyYW5zbGF0aW9ucy4gIFdlIGN1cnJlbnRseSBoYXZlIG9ubHkg
RW5nbGlzaC4KKyogRG9jc3RyaW5ncy4gIFRoZXJlIGNhbiBuZXZlciBiZSB0b28gbWFueSBvZiB0
aGVtLgorKiBCbG9nIHBvc3RzLCBhcnRpY2xlcyBhbmQgc3VjaCAtLSB0aGV5J3JlIGFsbCB2ZXJ5
IGFwcHJlY2lhdGVkLgorCitZb3UgY2FuIGFsc28gZWRpdCBkb2N1bWVudGF0aW9uIGZpbGVzIGRp
cmVjdGx5IGluIHRoZSBHaXRodWIgd2ViIGludGVyZmFjZQord2l0aG91dCBuZWVkaW5nIHRvIG1h
a2UgYSBmb3JrIGFuZCBsb2NhbCBjb3B5LiBUaGlzIGNhbiBiZSBjb252ZW5pZW50IGZvcgorc21h
bGwgZml4ZXMuCisKKworLi4gX3N1Ym1pdHBsdWdpbjoKKworU3VibWl0dGluZyBQbHVnaW5zIHRv
IHB5dGVzdC1kZXYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1B5dGVzdCBk
ZXZlbG9wbWVudCBvZiB0aGUgY29yZSwgc29tZSBwbHVnaW5zIGFuZCBzdXBwb3J0IGNvZGUgaGFw
cGVucworaW4gcmVwb3NpdG9yaWVzIGxpdmluZyB1bmRlciB0aGUgYGBweXRlc3QtZGV2YGAgb3Jn
YW5pc2F0aW9uczoKKworLSBgcHl0ZXN0LWRldiBvbiBHaXRIdWIgPGh0dHBzOi8vZ2l0aHViLmNv
bS9weXRlc3QtZGV2PmBfCisKKy0gYHB5dGVzdC1kZXYgb24gQml0YnVja2V0IDxodHRwczovL2Jp
dGJ1Y2tldC5vcmcvcHl0ZXN0LWRldj5gXworCitBbGwgcHl0ZXN0LWRldiBDb250cmlidXRvcnMg
dGVhbSBtZW1iZXJzIGhhdmUgd3JpdGUgYWNjZXNzIHRvIGFsbCBjb250YWluZWQKK3JlcG9zaXRv
cmllcy4gIHB5dGVzdCBjb3JlIGFuZCBwbHVnaW5zIGFyZSBnZW5lcmFsbHkgZGV2ZWxvcGVkCit1
c2luZyBgcHVsbCByZXF1ZXN0c2BfIHRvIHJlc3BlY3RpdmUgcmVwb3NpdG9yaWVzLgorCitUaGUg
b2JqZWN0aXZlcyBvZiB0aGUgYGBweXRlc3QtZGV2YGAgb3JnYW5pc2F0aW9uIGFyZToKKworKiBI
YXZpbmcgYSBjZW50cmFsIGxvY2F0aW9uIGZvciBwb3B1bGFyIHB5dGVzdCBwbHVnaW5zCisqIFNo
YXJpbmcgc29tZSBvZiB0aGUgbWFpbnRlbmFuY2UgcmVzcG9uc2liaWxpdHkgKGluIGNhc2UgYSBt
YWludGFpbmVyIG5vIGxvbmdlciB3aGlzaGVzIHRvIG1haW50YWluIGEgcGx1Z2luKQorCitZb3Ug
Y2FuIHN1Ym1pdCB5b3VyIHBsdWdpbiBieSBzdWJzY3JpYmluZyB0byB0aGUgYHB5dGVzdC1kZXYg
bWFpbCBsaXN0Cis8aHR0cHM6Ly9tYWlsLnB5dGhvbi5vcmcvbWFpbG1hbi9saXN0aW5mby9weXRl
c3QtZGV2PmBfIGFuZCB3cml0aW5nIGEKK21haWwgcG9pbnRpbmcgdG8geW91ciBleGlzdGluZyBw
eXRlc3QgcGx1Z2luIHJlcG9zaXRvcnkgd2hpY2ggbXVzdCBoYXZlCit0aGUgZm9sbG93aW5nOgor
CistIFB5UEkgcHJlc2VuY2Ugd2l0aCBhIGBgc2V0dXAucHlgYCB0aGF0IGNvbnRhaW5zIGEgbGlj
ZW5zZSwgYGBweXRlc3QtYGAKKyAgcHJlZml4ZWQgbmFtZSwgdmVyc2lvbiBudW1iZXIsIGF1dGhv
cnMsIHNob3J0IGFuZCBsb25nIGRlc2NyaXB0aW9uLgorCistIGEgYGB0b3guaW5pYGAgZm9yIHJ1
bm5pbmcgdGVzdHMgdXNpbmcgYHRveCA8aHR0cDovL3RveC50ZXN0cnVuLm9yZz5gXy4KKworLSBh
IGBgUkVBRE1FLnR4dGBgIGRlc2NyaWJpbmcgaG93IHRvIHVzZSB0aGUgcGx1Z2luIGFuZCBvbiB3
aGljaAorICBwbGF0Zm9ybXMgaXQgcnVucy4KKworLSBhIGBgTElDRU5TRS50eHRgYCBmaWxlIG9y
IGVxdWl2YWxlbnQgY29udGFpbmluZyB0aGUgbGljZW5zaW5nCisgIGluZm9ybWF0aW9uLCB3aXRo
IG1hdGNoaW5nIGluZm8gaW4gYGBzZXR1cC5weWBgLgorCistIGFuIGlzc3VlIHRyYWNrZXIgZm9y
IGJ1ZyByZXBvcnRzIGFuZCBlbmhhbmNlbWVudCByZXF1ZXN0cy4KKworSWYgbm8gY29udHJpYnV0
b3Igc3Ryb25nbHkgb2JqZWN0cyBhbmQgdHdvIGFncmVlLCB0aGUgcmVwb3NpdG9yeSBjYW4gdGhl
biBiZQordHJhbnNmZXJyZWQgdG8gdGhlIGBgcHl0ZXN0LWRldmBgIG9yZ2FuaXNhdGlvbi4KKwor
SGVyZSdzIGEgcnVuZG93biBvZiBob3cgYSByZXBvc2l0b3J5IHRyYW5zZmVyIHVzdWFsbHkgcHJv
Y2VlZHMKKyh1c2luZyBhIHJlcG9zaXRvcnkgbmFtZWQgYGBqb2Vkb2UvcHl0ZXN0LXh5emBgIGFz
IGV4YW1wbGUpOgorCisqIE9uZSBvZiB0aGUgYGBweXRlc3QtZGV2YGAgYWRtaW5pc3RyYXRvcnMg
Y3JlYXRlczoKKworICAtIGBgcHl0ZXN0LXh5ei1hZG1pbmBgIHRlYW0sIHdpdGggZnVsbCBhZG1p
bmlzdHJhdGlvbiByaWdodHMgdG8KKyAgICBgYHB5dGVzdC1kZXYvcHl0ZXN0LXh5emBgLgorICAt
IGBgcHl0ZXN0LXh5ei1kZXZlbG9wZXJzYGAgdGVhbSwgd2l0aCB3cml0ZSBhY2Nlc3MgdG8KKyAg
ICBgYHB5dGVzdC1kZXYvcHl0ZXN0LXh5emBgLgorCisqIGBgam9lZG9lYGAgaXMgaW52aXRlZCB0
byB0aGUgYGBweXRlc3QteHl6LWFkbWluYGAgdGVhbTsKKworKiBBZnRlciBhY2NlcHRpbmcgdGhl
IGludml0YXRpb24sIGBgam9lZG9lYGAgdHJhbnNmZXJzIHRoZSByZXBvc2l0b3J5IGZyb20gaXRz
CisgIG9yaWdpbmFsIGxvY2F0aW9uIHRvIGBgcHl0ZXN0LWRldi9weXRlc3QteHl6YGAgKEEgbmlj
ZSBmZWF0dXJlIGlzIHRoYXQgR2l0SHViIGhhbmRsZXMgVVJMIHJlZGlyZWN0aW9uIGZyb20KKyAg
dGhlIG9sZCB0byB0aGUgbmV3IGxvY2F0aW9uIGF1dG9tYXRpY2FsbHkpLgorCisqIGBgam9lZG9l
YGAgaXMgZnJlZSB0byBhZGQgYW55IG90aGVyIGNvbGxhYm9yYXRvcnMgdG8gdGhlCisgIGBgcHl0
ZXN0LXh5ei1hZG1pbmBgIG9yIGBgcHl0ZXN0LXh5ei1kZXZlbG9wZXJzYGAgdGVhbSBhcyBkZXNp
cmVkLgorCitUaGUgYGBweXRlc3QtZGV2L0NvbnRyaWJ1dG9yc2BgIHRlYW0gaGFzIHdyaXRlIGFj
Y2VzcyB0byBhbGwgcHJvamVjdHMsIGFuZAorZXZlcnkgcHJvamVjdCBhZG1pbmlzdHJhdG9yIGlz
IGluIGl0LiBXZSByZWNvbW1lbmQgdGhhdCBlYWNoIHBsdWdpbiBoYXMgYXQgbGVhc3QgdGhyZWUK
K3Blb3BsZSB3aG8gaGF2ZSB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0byBQeVBJLgorCitSZXBvc2l0
b3J5IG93bmVycyBjYW4gYmUgYXNzdXJlZCB0aGF0IG5vIGBgcHl0ZXN0LWRldmBgIGFkbWluaXN0
cmF0b3Igd2lsbCBldmVyIG1ha2UKK3JlbGVhc2VzIG9mIHlvdXIgcmVwb3NpdG9yeSBvciB0YWtl
IG93bmVyc2hpcCBpbiBhbnkgd2F5LCBleGNlcHQgaW4gcmFyZSBjYXNlcword2hlcmUgc29tZW9u
ZSBiZWNvbWVzIHVucmVzcG9uc2l2ZSBhZnRlciBtb250aHMgb2YgY29udGFjdCBhdHRlbXB0cy4K
K0FzIHN0YXRlZCwgdGhlIG9iamVjdGl2ZSBpcyB0byBzaGFyZSBtYWludGVuYW5jZSBhbmQgYXZv
aWQgInBsdWdpbi1hYmFuZG9uIi4KKworCisuLiBfYHB1bGwgcmVxdWVzdHNgOgorLi4gX3B1bGwt
cmVxdWVzdHM6CisKK1ByZXBhcmluZyBQdWxsIFJlcXVlc3RzIG9uIEdpdEh1YgorLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXJlJ3MgYW4gZXhjZWxsZW50IHR1dG9yaWFs
IG9uIGhvdyBQdWxsIFJlcXVlc3RzIHdvcmsgaW4gdGhlCitgR2l0SHViIEhlbHAgQ2VudGVyIDxo
dHRwczovL2hlbHAuZ2l0aHViLmNvbS9hcnRpY2xlcy91c2luZy1wdWxsLXJlcXVlc3RzLz5gXwor
CisKKy4uIG5vdGU6OgorICBXaGF0IGlzIGEgInB1bGwgcmVxdWVzdCI/ICBJdCBpbmZvcm1zIHBy
b2plY3QncyBjb3JlIGRldmVsb3BlcnMgYWJvdXQgdGhlCisgIGNoYW5nZXMgeW91IHdhbnQgdG8g
cmV2aWV3IGFuZCBtZXJnZS4gIFB1bGwgcmVxdWVzdHMgYXJlIHN0b3JlZCBvbgorICBgR2l0SHVi
IHNlcnZlcnMgPGh0dHBzOi8vZ2l0aHViLmNvbS9weXRlc3QtZGV2L3B5dGVzdC9wdWxscz5gXy4K
KyAgT25jZSB5b3Ugc2VuZCBwdWxsIHJlcXVlc3QsIHdlIGNhbiBkaXNjdXNzIGl0J3MgcG90ZW50
aWFsIG1vZGlmaWNhdGlvbnMgYW5kCisgIGV2ZW4gYWRkIG1vcmUgY29tbWl0cyB0byBpdCBsYXRl
ciBvbi4KKworVGhlcmUncyBhbiBleGNlbGxlbnQgdHV0b3JpYWwgb24gaG93IFB1bGwgUmVxdWVz
dHMgd29yayBpbiB0aGUKK2BHaXRIdWIgSGVscCBDZW50ZXIgPGh0dHBzOi8vaGVscC5naXRodWIu
Y29tL2FydGljbGVzL3VzaW5nLXB1bGwtcmVxdWVzdHMvPmBfLAorYnV0IGhlcmUgaXMgYSBzaW1w
bGUgb3ZlcnZpZXc6CisKKyMuIEZvcmsgdGhlCisgICBgcHl0ZXN0IEdpdEh1YiByZXBvc2l0b3J5
IDxodHRwczovL2dpdGh1Yi5jb20vcHl0ZXN0LWRldi9weXRlc3Q+YF9fLiAgSXQncworICAgZmlu
ZSB0byB1c2UgYGBweXRlc3RgYCBhcyB5b3VyIGZvcmsgcmVwb3NpdG9yeSBuYW1lIGJlY2F1c2Ug
aXQgd2lsbCBsaXZlCisgICB1bmRlciB5b3VyIHVzZXIuCisKKyMuIENsb25lIHlvdXIgZm9yayBs
b2NhbGx5IHVzaW5nIGBnaXQgPGh0dHBzOi8vZ2l0LXNjbS5jb20vPmBfIGFuZCBjcmVhdGUgYSBi
cmFuY2g6OgorCisgICAgJCBnaXQgY2xvbmUgZ2l0QGdpdGh1Yi5jb206WU9VUl9HSVRIVUJfVVNF
Uk5BTUUvcHl0ZXN0LmdpdAorICAgICQgY2QgcHl0ZXN0CisgICAgIyBub3csIHRvIGZpeCBhIGJ1
ZyBjcmVhdGUgeW91ciBvd24gYnJhbmNoIG9mZiAibWFzdGVyIjoKKyAgICAKKyAgICAgICAgJCBn
aXQgY2hlY2tvdXQgLWIgeW91ci1idWdmaXgtYnJhbmNoLW5hbWUgbWFzdGVyCisKKyAgICAjIG9y
IHRvIGluc3RlYWQgYWRkIGEgZmVhdHVyZSBjcmVhdGUgeW91ciBvd24gYnJhbmNoIG9mZiAiZmVh
dHVyZXMiOgorICAgIAorICAgICAgICAkIGdpdCBjaGVja291dCAtYiB5b3VyLWZlYXR1cmUtYnJh
bmNoLW5hbWUgZmVhdHVyZXMKKworICAgR2l2ZW4gd2UgaGF2ZSAibWFqb3IubWlub3IubWljcm8i
IHZlcnNpb24gbnVtYmVycywgYnVnZml4ZXMgd2lsbCB1c3VhbGx5IAorICAgYmUgcmVsZWFzZWQg
aW4gbWljcm8gcmVsZWFzZXMgd2hlcmVhcyBmZWF0dXJlcyB3aWxsIGJlIHJlbGVhc2VkIGluIAor
ICAgbWlub3IgcmVsZWFzZXMgYW5kIGluY29tcGF0aWJsZSBjaGFuZ2VzIGluIG1ham9yIHJlbGVh
c2VzLgorCisgICBJZiB5b3UgbmVlZCBzb21lIGhlbHAgd2l0aCBHaXQsIGZvbGxvdyB0aGlzIHF1
aWNrIHN0YXJ0CisgICBndWlkZTogaHR0cHM6Ly9naXQud2lraS5rZXJuZWwub3JnL2luZGV4LnBo
cC9RdWlja1N0YXJ0CisKKyMuIEluc3RhbGwgdG94CisKKyAgIFRveCBpcyB1c2VkIHRvIHJ1biBh
bGwgdGhlIHRlc3RzIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgc2V0dXAgdmlydHVhbGVudnMKKyAg
IHRvIHJ1biB0aGUgdGVzdHMgaW4uCisgICAod2lsbCBpbXBsaWNpdGx5IHVzZSBodHRwOi8vd3d3
LnZpcnR1YWxlbnYub3JnL2VuL2xhdGVzdC8pOjoKKworICAgICQgcGlwIGluc3RhbGwgdG94CisK
KyMuIFJ1biBhbGwgdGhlIHRlc3RzCisKKyAgIFlvdSBuZWVkIHRvIGhhdmUgUHl0aG9uIDIuNyBh
bmQgMy41IGF2YWlsYWJsZSBpbiB5b3VyIHN5c3RlbS4gIE5vdworICAgcnVubmluZyB0ZXN0cyBp
cyBhcyBzaW1wbGUgYXMgaXNzdWluZyB0aGlzIGNvbW1hbmQ6OgorCisgICAgJCBweXRob24gcnVu
dG94LnB5IC1lIGxpbnRpbmcscHkyNyxweTM1CisKKyAgIFRoaXMgY29tbWFuZCB3aWxsIHJ1biB0
ZXN0cyB2aWEgdGhlICJ0b3giIHRvb2wgYWdhaW5zdCBQeXRob24gMi43IGFuZCAzLjUKKyAgIGFu
ZCBhbHNvIHBlcmZvcm0gImxpbnQiIGNvZGluZy1zdHlsZSBjaGVja3MuICBgYHJ1bnRveC5weWBg
IGlzCisgICBhIHRoaW4gd3JhcHBlciBhcm91bmQgYGB0b3hgYCB3aGljaCBpbnN0YWxscyBmcm9t
IGEgZGV2ZWxvcG1lbnQgcGFja2FnZQorICAgaW5kZXggd2hlcmUgbmV3ZXIgKG5vdCB5ZXQgcmVs
ZWFzZWQgdG8gcHlwaSkgdmVyc2lvbnMgb2YgZGVwZW5kZW5jaWVzCisgICAoZXNwZWNpYWxseSBg
YHB5YGApIG1pZ2h0IGJlIHByZXNlbnQuCisKKyMuIFlvdSBjYW4gbm93IGVkaXQgeW91ciBsb2Nh
bCB3b3JraW5nIGNvcHkuCisKKyAgIFlvdSBjYW4gbm93IG1ha2UgdGhlIGNoYW5nZXMgeW91IHdh
bnQgYW5kIHJ1biB0aGUgdGVzdHMgYWdhaW4gYXMgbmVjZXNzYXJ5LgorCisgICBUbyBydW4gdGVz
dHMgb24gcHkyNyBhbmQgcGFzcyBvcHRpb25zIHRvIHB5dGVzdCAoZS5nLiBlbnRlciBwZGIgb24g
ZmFpbHVyZSkKKyAgIHRvIHB5dGVzdCB5b3UgY2FuIGRvOjoKKworICAgICQgcHl0aG9uIHJ1bnRv
eC5weSAtZSBweTI3IC0tIC0tcGRiCisKKyAgIG9yIHRvIG9ubHkgcnVuIHRlc3RzIGluIGEgcGFy
dGljdWxhciB0ZXN0IG1vZHVsZSBvbiBweTM1OjoKKworICAgICQgcHl0aG9uIHJ1bnRveC5weSAt
ZSBweTM1IC0tIHRlc3RpbmcvdGVzdF9jb25maWcucHkKKworIy4gQ29tbWl0IGFuZCBwdXNoIG9u
Y2UgeW91ciB0ZXN0cyBwYXNzIGFuZCB5b3UgYXJlIGhhcHB5IHdpdGggeW91ciBjaGFuZ2Uocyk6
OgorCisgICAgJCBnaXQgY29tbWl0IC1hIC1tICI8Y29tbWl0IG1lc3NhZ2U+IgorICAgICQgZ2l0
IHB1c2ggLXUKKworICAgTWFrZSBzdXJlIHlvdSBhZGQgYSBDSEFOR0VMT0cgbWVzc2FnZSwgYW5k
IGFkZCB5b3Vyc2VsZiB0byBBVVRIT1JTLiBJZiB5b3UKKyAgIGFyZSB1bnN1cmUgYWJvdXQgZWl0
aGVyIG9mIHRoZXNlIHN0ZXBzLCBzdWJtaXQgeW91ciBwdWxsIHJlcXVlc3QgYW5kIHdlJ2xsCisg
ICBoZWxwIHlvdSBmaXggaXQgdXAuCisKKyMuIEZpbmFsbHksIHN1Ym1pdCBhIHB1bGwgcmVxdWVz
dCB0aHJvdWdoIHRoZSBHaXRIdWIgd2Vic2l0ZSB1c2luZyB0aGlzIGRhdGE6OgorCisgICAgaGVh
ZC1mb3JrOiBZT1VSX0dJVEhVQl9VU0VSTkFNRS9weXRlc3QKKyAgICBjb21wYXJlOiB5b3VyLWJy
YW5jaC1uYW1lCisKKyAgICBiYXNlLWZvcms6IHB5dGVzdC1kZXYvcHl0ZXN0CisgICAgYmFzZTog
bWFzdGVyICAgICAgICAgICMgaWYgaXQncyBhIGJ1Z2ZpeAorICAgIGJhc2U6IGZlYXR1cmUgICAg
ICAgICAjIGlmIGl0J3MgYSBmZWF0dXJlCisKKwpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMv
aW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9IT1dUT1JFTEVBU0UucnN0IGIvV2ViRHJpdmVyVGVz
dHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9IT1dUT1JFTEVBU0UucnN0Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zZWJmYTI4YjFlZAotLS0gL2Rldi9udWxsCisr
KyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvSE9XVE9SRUxFQVNF
LnJzdApAQCAtMCwwICsxLDkyIEBACitIb3cgdG8gcmVsZWFzZSBweXRlc3QKKy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05vdGU6IHRoaXMgYXNzdW1lcyB5
b3UgaGF2ZSBhbHJlYWR5IHJlZ2lzdGVyZWQgb24gcHlwaS4KKworMC4gY3JlYXRlIHRoZSBicmFu
Y2ggcmVsZWFzZS1WRVJTSU9OCisgICB1c2UgZmVhdHVyZXMgYXMgYmFzZSBmb3IgbWlub3IvbWFq
b3IgcmVsZWFzZXMKKyAgIGFuZCBtYXN0ZXIgYXMgYmFzZSBmb3IgYnVnZml4IHJlbGVhc2VzCisK
KzEuIEJ1bXAgdmVyc2lvbiBudW1iZXJzIGluIF9weXRlc3QvX19pbml0X18ucHkgKHNldHVwLnB5
IHJlYWRzIGl0KQorCisyLiBDaGVjayBhbmQgZmluYWxpemUgQ0hBTkdFTE9HCisKKzMuIFdyaXRl
IGRvYy9lbi9hbm5vdW5jZS9yZWxlYXNlLVZFUlNJT04udHh0IGFuZCBpbmNsdWRlCisgICBpdCBp
biBkb2MvZW4vYW5ub3VuY2UvaW5kZXgudHh0OjoKKworICAgICAgICBnaXQgbG9nIDIuOC4yLi5I
RUFEIC0tZm9ybWF0PSclYU4nIHwgc29ydCAtdSAjIGxpc3RzIHRoZSBuYW1lcyBvZiBhdXRob3Jz
IGludm9sdmVkCisKKzQuIFVzZSBkZXZwaSBmb3IgdXBsb2FkaW5nIGEgcmVsZWFzZSB0YXJiYWxs
IHRvIGEgc3RhZ2luZyBhcmVhOjoKKworICAgICBkZXZwaSB1c2UgaHR0cHM6Ly9kZXZwaS5uZXQv
VVNFUi9kZXYKKyAgICAgZGV2cGkgdXBsb2FkIC0tZm9ybWF0cyBzZGlzdCxiZGlzdF93aGVlbAor
Cis1LiBSdW4gZnJvbSBtdWx0aXBsZSBtYWNoaW5lczo6CisKKyAgICAgZGV2cGkgdXNlIGh0dHBz
Oi8vZGV2cGkubmV0L1VTRVIvZGV2CisgICAgIGRldnBpIHRlc3QgcHl0ZXN0PT1WRVJTSU9OCisK
KzYuIENoZWNrIHRoYXQgdGVzdHMgcGFzcyBmb3IgcmVsZXZhbnQgY29tYmluYXRpb25zIHdpdGg6
OgorCisgICAgICAgZGV2cGkgbGlzdCBweXRlc3QKKworICAgb3IgbG9vayBhdCBmYWlsdXJlcyB3
aXRoICJkZXZwaSBsaXN0IC1mIHB5dGVzdCIuCisKKzcuIFJlZ2VuZXJhdGUgdGhlIGRvY3MgZXhh
bXBsZXMgdXNpbmcgdG94LCBhbmQgY2hlY2sgZm9yIHJlZ3Jlc3Npb25zOjoKKworICAgICAgdG94
IC1lIHJlZ2VuCisgICAgICBnaXQgZGlmZgorCisKKzguIEJ1aWxkIHRoZSBkb2NzLCB5b3UgbmVl
ZCBhIHZpcnR1YWxlbnYgd2l0aCBweSBhbmQgc3BoaW54CisgICBpbnN0YWxsZWQ6OgorCisgICAg
ICBjZCBkb2MvZW4gICAgICAKKyAgICAgIG1ha2UgaHRtbAorCisgICBDb21taXQgYW55IGNoYW5n
ZXMgYmVmb3JlIHRhZ2dpbmcgdGhlIHJlbGVhc2UuCisKKzkuIFRhZyB0aGUgcmVsZWFzZTo6CisK
KyAgICAgIGdpdCB0YWcgVkVSU0lPTgorICAgICAgZ2l0IHB1c2gKKworMTAuIFVwbG9hZCB0aGUg
ZG9jcyB1c2luZyBkb2MvZW4vTWFrZWZpbGU6OgorCisgICAgICBjZCBkb2MvZW4KKyAgICAgIG1h
a2UgaW5zdGFsbCAgIyBvciAiaW5zdGFsbGFsbCIgaWYgeW91IGhhdmUgTGFUZVggaW5zdGFsbGVk
IGZvciBQREYKKworICAgIFRoaXMgcmVxdWlyZXMgc3NoLWxvZ2luIHBlcm1pc3Npb24gb24gcHl0
ZXN0Lm9yZyBiZWNhdXNlIGl0IHVzZXMKKyAgICByc3luYy4KKyAgICBOb3RlIHRoYXQgdGhlIGBg
aW5zdGFsbGBgIHRhcmdldCBvZiBgYGRvYy9lbi9NYWtlZmlsZWBgIGRlZmluZXMgd2hlcmUgdGhl
CisgICAgcnN5bmMgZ29lcyB0bywgdHlwaWNhbGx5IHRvIHRoZSAibGF0ZXN0IiBzZWN0aW9uIG9m
IHB5dGVzdC5vcmcuCisKKyAgICBJZiB5b3UgYXJlIG1ha2luZyBhIG1pbm9yIHJlbGVhc2UgKGUu
Zy4gNS40KSwgeW91IGFsc28gbmVlZCB0byBtYW51YWxseQorICAgIGNyZWF0ZSBhIHN5bWxpbmsg
Zm9yICJsYXRlc3QiOjoKKworICAgICAgIHNzaCBweXRlc3QtZGV2QHB5dGVzdC5vcmcKKyAgICAg
ICBsbiAtcyA1LjQgbGF0ZXN0CisKKyAgICBCcm93c2UgdG8gcHl0ZXN0Lm9yZyB0byB2ZXJpZnku
CisKKzExLiBQdWJsaXNoIHRvIHB5cGk6OgorCisgICAgICBkZXZwaSBwdXNoIHB5dGVzdC1WRVJT
SU9OIHB5cGk6TkFNRQorCisgICAgd2hlcmUgTkFNRSBpcyB0aGUgbmFtZSBvZiBweXBpLnB5dGhv
bi5vcmcgYXMgY29uZmlndXJlZCBpbiB5b3VyIGBgfi8ucHlwaXJjYGAKKyAgICBmaWxlIGBmb3Ig
ZGV2cGkgPGh0dHA6Ly9kb2MuZGV2cGkubmV0L2xhdGVzdC9xdWlja3N0YXJ0LXJlbGVhc2Vwcm9j
ZXNzLmh0bWw/aGlnaGxpZ2h0PXB5cGlyYyNkZXZwaS1wdXNoLXJlbGVhc2luZy10by1hbi1leHRl
cm5hbC1pbmRleD5gXy4KKworCisxMi4gU2VuZCByZWxlYXNlIGFubm91bmNlbWVudCB0byBtYWls
aW5nIGxpc3RzOgorCisgICAgLSBweXRlc3QtZGV2CisgICAgLSB0ZXN0aW5nLWluLXB5dGhvbgor
ICAgIC0gcHl0aG9uLWFubm91bmNlLWxpc3RAcHl0aG9uLm9yZworCisKKzEzLiAqKmFmdGVyIHRo
ZSByZWxlYXNlKiogQnVtcCB0aGUgdmVyc2lvbiBudW1iZXIgaW4gYGBfcHl0ZXN0L19faW5pdF9f
LnB5YGAsCisgICAgdG8gdGhlIG5leHQgTWlub3IgcmVsZWFzZSB2ZXJzaW9uIChpLmUuIGlmIHlv
dSByZWxlYXNlZCBgYHB5dGVzdC0yLjguMGBgLAorICAgIHNldCBpdCB0byBgYHB5dGVzdC0yLjku
MC5kZXYxYGApLgorCisxNC4gbWVyZ2UgdGhlIGFjdHVhbCByZWxlYXNlIGludG8gdGhlIG1hc3Rl
ciBicmFuY2ggYW5kIGRvIGEgcHVsbCByZXF1ZXN0IGFnYWluc3QgaXQKKzE1LiBtZXJnZSBmcm9t
IG1hc3RlciB0byBmZWF0dXJlcwpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQv
dzNjL3Rvb2xzL3B5dGVzdC9JU1NVRVMudHh0IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNj
L3Rvb2xzL3B5dGVzdC9JU1NVRVMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi4wODFkNzI3ZTg2YQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2lt
cG9ydGVkL3czYy90b29scy9weXRlc3QvSVNTVUVTLnR4dApAQCAtMCwwICsxLDM2NSBAQAorCisK
K3JlY29yZGVyID0gbW9ua2V5cGF0Y2guZnVuY3Rpb24oIi4uLi4uLi4iKQorLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordGFnczog
bmljZSBmZWF0dXJlIAorCitMaWtlIG1vbmtleXBhdGNoLnJlcGxhY2UgYnV0IHNldHMgYSBtb2Nr
LWxpa2UgY2FsbCByZWNvcmRlcjoKKworICAgIHJlY29yZGVyID0gbW9ua2V5cGF0Y2guZnVuY3Rp
b24oIm9zLnBhdGguYWJzcGF0aCIpCisgICAgcmVjb3JkZXIuc2V0X3JldHVybigiL2hlbGxvIikK
KyAgICBvcy5wYXRoLmFic3BhdGgoImhlbGxvIikKKyAgICBjYWxsLCA9IHJlY29yZGVyLmNhbGxz
CisgICAgYXNzZXJ0IGNhbGwuYXJncy5wYXRoID09ICJoZWxsbyIKKyAgICBhc3NlcnQgY2FsbC5y
ZXR1cm5lZCA9PSAiL2hlbGxvIgorICAgIC4uLgorCitVbmxpa2UgbW9jaywgImFyZ3MucGF0aCIg
YWN0cyBvbiB0aGUgcGFyc2VkIGF1dG8tc3BlYydlZCBgYG9zLnBhdGguYWJzcGF0aGBgCitzbyBp
dCdzIGluZGVwZW5kZW50IGZyb20gaWYgdGhlIGNsaWVudCBzaWRlIGNhbGxlZCAib3MucGF0aC5h
YnNwYXRoKHBhdGg9Li4uKSIKK29yICJvcy5wYXRoLmFic3BhdGgoJ3Bvc2l0aW9uYWwnKSIuCisK
KworcmVmaW5lIHBhcmFtZXRyaXplIEFQSQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordGFnczogY3JpdGljYWwgZmVhdHVyZSAK
KworZXh0ZW5kIG1ldGFmdW5jLnBhcmFtZXRyaXplIHRvIGRpcmVjdGx5IHN1cHBvcnQgaW5kaXJl
Y3Rpb24sIGV4YW1wbGU6CisKKyAgICBkZWYgc2V0dXBkYihyZXF1ZXN0LCBjb25maWcpOgorICAg
ICAgICAjIHNldHVwICJyZXNvdXJjZSIgYmFzZWQgb24gdGVzdCByZXF1ZXN0IGFuZCB0aGUgdmFs
dWVzIHBhc3NlZCAKKyAgICAgICAgIyBpbiB0byBwYXJhbWV0cml6ZS4gIHNldHVwZnVuYyBpcyBj
YWxsZWQgZm9yIGVhY2ggc3VjaCB2YWx1ZS4KKyAgICAgICAgIyB5b3UgbWF5IHVzZSByZXF1ZXN0
LmFkZGZpbmFsaXplcigpIG9yIHJlcXVlc3QuY2FjaGVkX3NldHVwIC4uLgorICAgICAgICByZXR1
cm4gZHluYW1pY19zZXR1cF9kYXRhYmFzZSh2YWwpCisKKyAgICBAcHl0ZXN0Lm1hcmsucGFyYW1l
dHJpemUoImRiIiwgWyJwZyIsICJteXNxbCJdLCBzZXR1cGZ1bmM9c2V0dXBkYikKKyAgICBkZWYg
dGVzdF9oZWF2eV9mdW5jdGlvbmFsX3Rlc3QoZGIpOgorICAgICAgICAuLi4KKworVGhlcmUgd291
bGQgYmUgbm8gbmVlZCB0byB3cml0ZSBvciBleHBsYWluIGZ1bmNhcmcgZmFjdG9yaWVzIGFuZAor
dGhlaXIgc3BlY2lhbCBfXyBzeW50YXguCisKK1RoZSBleGFtcGxlcyBhbmQgaW1wcm92ZW1lbnRz
IHNob3VsZCBhbHNvIHNob3cgaG93IHRvIHB1dCB0aGUgcGFyYW1ldHJpemUKK2RlY29yYXRvciB0
byBhIGNsYXNzLCB0byBhIG1vZHVsZSBvciBldmVuIHRvIGEgZGlyZWN0b3J5LiAgRm9yIHRoZSBk
aXJlY3RvcnkKK3BhcnQgYSBjb25mdGVzdC5weSBjb250ZW50IGxpa2UgdGhpczo6CisKKyAgICBw
eXRlc3RtYXJrID0gWworICAgICAgICBAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemVfc2V0dXAoImRi
IiwgLi4uKSwKKyAgICBdCisKK3Byb2JhYmx5IG1ha2VzIHNlbnNlIGluIG9yZGVyIHRvIGtlZXAg
dGhlIGRlY2xhcmF0aXZlIG5hdHVyZS4gICBUaGlzIG1pcnJvcnMKK3RoZSBtYXJrZXItbWVjaGFu
aXNtIHdpdGggcmVzcGVjdCB0byBhIHRlc3QgbW9kdWxlIGJ1dCBwdXRzIGl0IHRvIGEgZGlyZWN0
b3J5CitzY2FsZS4KKworV2hlbiBkb2luZyBsYXJnZXIgc2NvcGVkIHBhcmFtZXRyaXphdGlvbiBp
dCBwcm9iYWJseSBiZWNvbWVzIG5lY2Vzc2FyeQordG8gYWxsb3cgcGFyYW1ldHJpemF0aW9uIHRv
IGJlIGlnbm9yZWQgaWYgdGhlIGFjY29yZGluZyBwYXJhbWV0ZXIgaXMgbm90Cit1c2VkIChjdXJy
ZW50bHkgYW55IHBhcmFtZXRyaXplZCBhcmd1bWVudCB0aGF0IGlzIG5vdCBwcmVzZW50IGluIGEg
ZnVuY3Rpb24gd2lsbCBjYXVzZSBhIFZhbHVlRXJyb3IpLiBFeGFtcGxlOgorCisgICAgICAgIEBw
eXRlc3QubWFyay5wYXJhbWV0cml6ZSgiZGIiLCAuLi4sIG11c3RtYXRjaD1GYWxzZSkKKworbWVh
bnMgdG8gbm90IHJhaXNlIGFuIGVycm9yIGJ1dCBzaW1wbHkgaWdub3JlIHRoZSBwYXJhbWV0cml6
YXRpb24KK2lmIHRoZSBzaWduYXR1cmUgb2YgYSBkZWNvcmF0ZWQgZnVuY3Rpb24gZG9lcyBub3Qg
bWF0Y2guIFhYWCBpcyBpdAorbm90IHN1ZmZpY2llbnQgdG8gYWx3YXlzIGFsbG93IG5vbi1tYXRj
aGVzPworCisKK2FsbG93IHBhcmFtZXRyaXplZCBhdHRyaWJ1dGVzIG9uIGNsYXNzZXMKKy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAorCit0YWdzOiB3
aXNoIDIuNAorCitleGFtcGxlOgorCisgICAgQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplX2F0dHIo
ImRiIiwgc2V0dXBmdW5jLCBbMSwyLDNdLCBzY29wZT0iY2xhc3MiKQorICAgIEBweXRlc3QubWFy
ay5wYXJhbWV0cml6ZV9hdHRyKCJ0bXAiLCBzZXR1cGZ1bmMsIHNjb3BlPSIuLi4iKQorICAgIGNs
YXNzIFRlc3RNZToKKyAgICAgICAgZGVmIHRlc3RfaGVsbG8oc2VsZik6CisgICAgICAgICAgICBh
Y2Nlc3Mgc2VsZi5kYiAuLi4KKwordGhpcyB3b3VsZCBydW4gdGhlIHRlc3RfaGVsbG8oKSBmdW5j
dGlvbiB0aHJlZSB0aW1lcyB3aXRoIHRocmVlCitkaWZmZXJlbnQgdmFsdWVzIGZvciBzZWxmLmRi
LiBUaGlzIGNvdWxkIGFsc28gd29yayB3aXRoIHVuaXR0ZXN0L25vc2UKK3N0eWxlIHRlc3RzLCBp
LmUuIGl0IGxldmVyYWdlcyBleGlzdGluZyB0ZXN0IHN1aXRlcyB3aXRob3V0IG5lZWRpbmcKK3Rv
IHJld3JpdGUgdGhlbS4gVG9nZXRoZXIgd2l0aCB0aGUgcHJldmlvdXNseSBtZW50aW9uZWQgc2V0
dXBfdGVzdCgpCittYXliZSB0aGUgc2V0dXBmdW5jIGNvdWxkIGJlIG9taXR0ZWQ/CisKK29wdGlt
aXphdGlvbnMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KK3RhZ3M6IDIuNCBjb3JlCisKKy0gbG9vayBhdCBpaG9vayBvcHRp
bWl6YXRpb24gc3VjaCB0aGF0IGFsbCBsb29rdXBzIGZvcgorICBob29rcyByZWxhdGluZyB0byB0
aGUgc2FtZSBmc3BhdGggYXJlIGNhY2hlZC4KKworZml4IHN0YXJ0L2ZpbmlzaCBwYXJ0aWFsIGZp
bmFpbGl6YXRpb24gcHJvYmxlbQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0YWdzOiBidWcgY29yZQorCitpZiBhIGNvbmZp
Z3VyZS9ydW50ZXN0X3NldHVwL3Nlc3Npb25zdGFydC8uLi4gaG9vayBpbnZvY2F0aW9uIHBhcnRp
YWxseQorZmFpbHMgdGhlIHNlc3Npb25maW5pc2hlcyBpcyBub3QgY2FsbGVkLiAgRWFjaCBob29r
IGltcGxlbWVudGF0aW9uCitzaG91bGQgYmV0dGVyIGJlIHJlcHNvbnNpYmxlIGZvciByZWdpc3Rl
cmluZyBhIGNsZWFudXAvZmluYWxpemVyCithcHByb3ByaWF0ZWx5IHRvIGF2b2lkIHRoaXMgaXNz
dWUuICBNb3Jlb3Zlci9BbHRlcm5hdGl2ZWx5LCB3ZSBjb3VsZCAKK3JlY29yZCB3aGljaCBpbXBs
ZW1lbnRhdGlvbnMgb2YgYSBob29rIHN1Y2NlZWRlZCBhbmQgb25seSBjYWxsIHRoZWlyCit0ZWFy
ZG93bi4KKworCityZWxheCByZXF1aXJlbWVudCB0byBoYXZlIHRlc3RzL3Rlc3RpbmcgY29udGFp
biBhbiBfX2luaXRfXworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordGFnczogZmVhdHVyZSAKK2JiOiBodHRwOi8vYml0YnVj
a2V0Lm9yZy9ocGs0Mi9weS10cnVuay9pc3N1ZS82NAorCitBIGxvY2FsIHRlc3QgcnVuIG9mIGEg
InRlc3RzIiBkaXJlY3RvcnkgbWF5IHdvcmsKK2J1dCBhIHJlbW90ZSBvbmUgZmFpbCBiZWNhdXNl
IHRoZSB0ZXN0cyBkaXJlY3RvcnkKK2RvZXMgbm90IGNvbnRhaW4gYW4gIl9faW5pdF9fLnB5Ii4g
RWl0aGVyIGdpdmUKK2FuIGVycm9yIG9yIG1ha2UgaXQgd29yayB3aXRob3V0IHRoZSBfX2luaXRf
Xy5weQoraS5lLiBwb3J0IHRoZSBub3NlLWxvZ2ljIG9mIHVubG9hZGluZyBhIHRlc3QgbW9kdWxl
LgorCitjdXN0b21pemUgdGVzdCBmdW5jdGlvbiBjb2xsZWN0aW9uCistLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0YWdzOiBmZWF0dXJlIAor
CistIGludHJvZHVjZSBweXRlc3QubWFyay5ub2NvbGxlY3QgZm9yIG5vdCBjb25zaWRlcmluZyBh
IGZ1bmN0aW9uIGZvcgorICB0ZXN0IGNvbGxlY3Rpb24gYXQgYWxsLiAgbWF5YmUgYWxzbyBpbnRy
b2R1Y2UgYSBweXRlc3QubWFyay50ZXN0IHRvCisgIGV4cGxpY2l0bHkgbWFyayBhIGZ1bmN0aW9u
IHRvIGJlY29tZSBhIHRlc3RlZCBvbmUuICBMb29rdXAgSlVuaXQgd2F5cworICBvZiB0YWdnaW5n
IHRlc3RzLgorCitpbnRyb2R1Y2UgcHl0ZXN0Lm1hcmsuaW1wb3J0b3Jza2lwCistLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0YWdzOiBmZWF0
dXJlIAorCitpbiBhZGRpdGlvbiB0byB0aGUgaW1wZXJhdGl2ZSBweXRlc3QuaW1wb3J0b3Jza2lw
IGFsc28gaW50cm9kdWNlCithIHB5dGVzdC5tYXJrLmltcG9ydG9yc2tpcCBzbyB0aGF0IHRoZSB0
ZXN0IGNvdW50IGlzIG1vcmUgY29ycmVjdC4KKworCitpbnRyb2R1Y2UgcHl0ZXN0Lm1hcmsucGxh
dGZvcm0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KK3RhZ3M6IGZlYXR1cmUgCisKK0ludHJvZHVjZSBuaWNlLXRvLXNwZWxsIHBsYXRmb3Jt
LXNraXBwaW5nLCBleGFtcGxlczoKKworICAgIEBweXRlc3QubWFyay5wbGF0Zm9ybSgicHl0aG9u
MyIpCisgICAgQHB5dGVzdC5tYXJrLnBsYXRmb3JtKCJub3QgcHl0aG9uMyIpCisgICAgQHB5dGVz
dC5tYXJrLnBsYXRmb3JtKCJ3aW4zMiBhbmQgbm90IHB5dGhvbjMiKQorICAgIEBweXRlc3QubWFy
ay5wbGF0Zm9ybSgiZGFyd2luIikKKyAgICBAcHl0ZXN0Lm1hcmsucGxhdGZvcm0oIm5vdCAoanl0
aG9uIGFuZCB3aW4zMikiKQorICAgIEBweXRlc3QubWFyay5wbGF0Zm9ybSgibm90IChqeXRob24g
YW5kIHdpbjMyKSIsIHhmYWlsPVRydWUpCisKK2V0Yy4gSWRlYSBpcyB0byBhbGxvdyBQeXRob24g
ZXhwcmVzc2lvbnMgd2hpY2ggY2FuIG9wZXJhdGUKK29uIGNvbW1vbiBzcGVsbGluZ3MgZm9yIG9w
ZXJhdGluZyBzeXN0ZW1zIGFuZCBweXRob24KK2ludGVycHJldGVyIHZlcnNpb25zLgorCitweXRl
c3QubWFyay54ZmFpbCBzaWduYXR1cmUgY2hhbmdlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0YWdzOiBmZWF0dXJlIAorCitjaGFuZ2Ug
dG8gcHl0ZXN0Lm1hcmsueGZhaWwocmVhc29uLCAob3B0aW9uYWwpY29uZGl0aW9uKQordG8gYmV0
dGVyIGltcGxlbWVudCB0aGUgd29yZCBtZWFuaW5nLiAgSXQgYWxzbyBzaWduYWxzCitiZXR0ZXIg
dGhhdCB3ZSBhbHdheXMgaGF2ZSBzb21lIGtpbmQgb2YgYW4gaW1wbGVtZW50YXRpb24KK3JlYXNv
biB0aGF0IGNhbiBiZSBmb3JtdWFsYXRlZC4KK0NvbXBhdGliaWxpdHk/IGhvdyB0byBpbnRyb2R1
Y2UgYSBuZXcgbmFtZS9rZWVwIGNvbXBhdD8KKworYWxsb3cgdG8gbm9uLWludHJ1c2l2ZWx5IGFw
cGx5IHNraXBmcy94ZmFpbC9tYXJrcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCit0YWdzOiBmZWF0dXJlIAorCit1c2UgY2FzZTogbWFyayBhIG1v
ZHVsZSBvciBkaXJlY3Rvcnkgc3RydWN0dXJlcwordG8gYmUgc2tpcHBlZCBvbiBjZXJ0YWluIHBs
YXRmb3JtcyAoaS5lLiBubyBpbXBvcnQKK2F0dGVtcHQgd2lsbCBiZSBtYWRlKS4KKworY29uc2lk
ZXIgaW50cm9kdWNpbmcgYSBob29rL21lY2hhbmlzbSB0aGF0IGFsbG93cyB0byBhcHBseSBtYXJr
cworZnJvbSBjb25mdGVzdHMgb3IgcGx1Z2lucy4gKFNlZSBleHRlbmRlZCBwYXJhbWV0cml6YXRp
b24pCisKKworZXhwbGljaXQgcmVmZXJlbmNpbmcgb2YgY29uZnRlc3QucHkgZmlsZXMKKy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0YWdzOiBmZWF0dXJlIAorCith
bGxvdyB0byBuYW1lIGNvbmZ0ZXN0LnB5IGZpbGVzIChpbiBzdWIgZGlyZWN0b3JpZXMpIHRoYXQg
c2hvdWxkCitiZSBpbXBvcnRlZCBlYXJseSwgYXMgdG8gaW5jbHVkZSBjb21tYW5kIGxpbmUgb3B0
aW9ucy4KKworaW1wcm92ZSBjZW50cmFsIHB5dGVzdCBpbmkgZmlsZQorLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQordGFnczogZmVhdHVyZSAKKworaW50cm9kdWNlIG1vcmUgZGVjbGFy
YXRpdmUgY29uZmlndXJhdGlvbiBvcHRpb25zOgorLSAodG8tYmUtY29sbGVjdGVkIHRlc3QgZGly
ZWN0b3JpZXMpCistIHJlcXVpcmVkIHBsdWdpbnMKKy0gdGVzdCBmdW5jL2NsYXNzL2ZpbGUgbWF0
Y2hpbmcgcGF0dGVybnMKKy0gc2tpcC94ZmFpbCAobm9uLWludHJ1c2l2ZSkKKy0gcHl0ZXN0Lmlu
aSBhbmQgdG94LmluaSBhbmQgc2V0dXAuY2ZnIGNvbmZpZ3VyYXRpb24gaW4gdGhlIHNhbWUgZmls
ZQorCituZXcgZG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQordGFnczogZmVhdHVyZSAKKworLSBsb2dvIHB5dGVzdAorLSBleGFtcGxlcyBmb3IgdW5pdHRl
c3Qgb3IgZnVuY3Rpb25hbCB0ZXN0aW5nCistIHJlc291cmNlIG1hbmFnZW1lbnQgZm9yIGZ1bmN0
aW9uYWwgdGVzdGluZworLSBwYXR0ZXJuczogcGFnZSBvYmplY3QKKworaGF2ZSBpbXBvcnRlZCBt
b2R1bGUgbWlzbWF0Y2ggaG9ub3VyIHJlbGF0aXZlIHBhdGhzCistLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordGFnczogYnVnIAorCitXaXRo
IDEuMS4xIHB5dGVzdCBmYWlscyBhdCBsZWFzdCBvbiB3aW5kb3dzIGlmIGFuIGltcG9ydAoraXMg
cmVsYXRpdmUgYW5kIGNvbXBhcmVkIGFnYWluc3QgYW4gYWJzb2x1dGUgY29uZnRlc3QucHkKK3Bh
dGguIE5vcm1hbGl6ZS4KKworY29uc2lkZXIgZ2xvYmFsczogcHl0ZXN0LmVuc3VyZXRlbXAgYW5k
IGNvbmZpZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KK3RhZ3M6IGV4cGVyaW1lbnRhbC13aXNoIAorCitjb25zaWRlciBkZXBy
ZWNhdGluZyBweXRlc3QuZW5zdXJldGVtcCBhbmQgcHl0ZXN0LmNvbmZpZwordG8gZnVydGhlciBy
ZWR1Y2UgcHl0ZXN0IGdsb2JhbGl0eS4gIEFsc28gY29uc2lkZXIKK2hhdmluZyBweXRlc3QuY29u
ZmlnIGFuZCBlbnN1cmV0ZW1wIGNvbWluZyBmcm9tCithIHBsdWdpbiByYXRoZXIgdGhhbiBiZWlu
ZyB0aGVyZSBmcm9tIHRoZSBzdGFydC4KKworCitjb25zaWRlciBweXRlc3RfYWRkc3lzcGF0aCBo
b29rCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordGFnczogd2lz
aAorCitweXRlc3QgY291bGQgY2FsbCBhIG5ldyBweXRlc3RfYWRkc3lzcGF0aCgpIGluIG9yZGVy
IHRvIHN5c3RlbWF0aWNhbGx5CithbGxvdyBtYW5pcHVsYXRpb24gb2Ygc3lzLnBhdGggYW5kIHRv
IGluaGliaXQgaXQgdmlhIC0tbm8tYWRkc3lzcGF0aAoraW4gb3JkZXIgdG8gbW9yZSBlYXNpbHkg
cnVuIGFnYWluc3QgaW5zdGFsbGVkIHBhY2thZ2VzLgorCitBbHRlcm5hdGl2ZWx5IGl0IGNvdWxk
IGFsc28gYmUgZG9uZSB2aWEgdGhlIGNvbmZpZyBvYmplY3QKK2FuZCBweXRlc3RfY29uZmlndXJl
LgorCisKKworZGVwcmVjYXRlIGdsb2JhbCBweXRlc3QuY29uZmlnIHVzYWdlCistLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0
YWdzOiBmZWF0dXJlIAorCitweXRlc3QuZW5zdXJldGVtcCBhbmQgcHl0ZXN0LmNvbmZpZyBhcmUg
cHJvYmFibHkgdGhlIGxhc3QKK29iamVjdHMgY29udGFpbmluZyBnbG9iYWwgc3RhdGUuICBPZnRl
biB1c2luZyB0aGVtIGlzIG5vdAorbmVjZXNzYXJ5LiAgVGhpcyBpcyBhYm91dCB0cnlpbmcgdG8g
Z2V0IHJpZCBvZiB0aGVtLCBpLmUuCitkZXByZWNhdGluZyB0aGVtIGFuZCBjaGVja2luZyB3aXRo
IFB5UHkncyB1c2FnZXMgYXMgd2VsbAorYXMgb3RoZXJzLgorCityZW1vdmUgZGVwcmVjYXRlZCBi
aXRzIGluIGNvbGxlY3QucHkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3RhZ3M6IGZlYXR1cmUgCisKK0luIGFuIGVm
Zm9ydCB0byBmdXJ0aGVyIHNpbXBsaWZ5IGNvZGUsIHJldmlldyBhbmQgcmVtb3ZlIGRlcHJlY2F0
ZWQgYml0cworaW4gY29sbGVjdC5weS4gIFByb2JhYmx5IGdvb2Q6CistIGlubGluZSBjb25zaWRl
cl9maWxlL2RpciBtZXRob2RzLCBubyBuZWVkIHRvIGhhdmUgdGhlbQorICBzdWJjbGFzcy1vdmVy
cmlkYWJsZSBiZWNhdXNlIG9mIGhvb2tzCisKK2ltcGxlbWVudCBmc2xheW91dCBkZWNvcmF0b3IK
Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordGFnczogZmVhdHVyZSAKKworSW1w
cm92ZSB0aGUgd2F5IGhvdyB0ZXN0cyBjYW4gd29yayB3aXRoIHByZS1tYWRlIGV4YW1wbGVzLAor
a2VlcGluZyB0aGUgbGF5b3V0IGNsb3NlIHRvIHRoZSB0ZXN0IGZ1bmN0aW9uOgorCitAcHl0ZXN0
Lm1hcmsuZnNsYXlvdXQoIiIiCisgICAgY29uZnRlc3QucHk6CisgICAgICAgICMgIGVtcHR5Cisg
ICAgdGVzdHMvCisgICAgICAgIHRlc3RfJShOQU1FKXM6ICAjIGJlY29tZXMgdGVzdF9ydW4xLnB5
CisgICAgICAgICAgICBkZWYgdGVzdF9mdW5jdGlvbihzZWxmKToKKyAgICAgICAgICAgICAgICBw
YXNzCisiIiIpCitkZWYgdGVzdF9ydW4ocHl0ZXN0ZXIsIGZzbGF5b3V0KToKKyAgICBwID0gZnNs
YXlvdXQuZmluZG9uZSgidGVzdF8qLnB5IikKKyAgICByZXN1bHQgPSBweXRlc3Rlci5ydW5weXRl
c3QocCkKKyAgICBhc3NlcnQgcmVzdWx0LnJldCA9PSAwCisgICAgYXNzZXJ0IHJlc3VsdC5wYXNz
ZWQgPT0gMQorCitBbm90aGVyIGlkZWEgaXMgdG8gYWxsb3cgdG8gZGVmaW5lIGEgZnVsbCBzY2Vu
YXJpbyBpbmNsdWRpbmcgdGhlIHJ1bgoraW4gb25lIGNvbnRlbnQgc3RyaW5nOjoKKworICAgIHJ1
bnNjZW5hcmlvKCIiIgorICAgICAgICB0ZXN0X3tURVNUTkFNRX0ucHk6CisgICAgICAgICAgICBp
bXBvcnQgcHl0ZXN0CisgICAgICAgICAgICBAcHl0ZXN0Lm1hcmsueGZhaWwKKyAgICAgICAgICAg
IGRlZiB0ZXN0X3RoYXRfZmFpbHMoKToKKyAgICAgICAgICAgICAgICBhc3NlcnQgMAorCisgICAg
ICAgICAgICBAcHl0ZXN0Lm1hcmsuc2tpcGlmKCJUcnVlIikKKyAgICAgICAgICAgIGRlZiB0ZXN0
X2hlbGxvKCk6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNvbmZ0ZXN0LnB5Ogor
ICAgICAgICAgICAgaW1wb3J0IHB5dGVzdAorICAgICAgICAgICAgZGVmIHB5dGVzdF9ydW5zZXR1
cF9zZXR1cChpdGVtKToKKyAgICAgICAgICAgICAgICBweXRlc3Quc2tpcCgiYWJjIikKKworICAg
ICAgICBydW5weXRlc3QgLXJzeFgKKyAgICAgICAgKlNLSVAqe1RFU1ROQU1FfSoKKyAgICAgICAg
KjEgc2tpcHBlZCogCisgICAgIiIiKQorCitUaGlzIGNvdWxkIGJlIHJ1biB3aXRoIGF0IGxlYXN0
IHRocmVlIGRpZmZlcmVudCB3YXlzIHRvIGludm9rZSBweXRlc3Q6Cit0aHJvdWdoIHRoZSBzaGVs
bCwgdGhyb3VnaCAicHl0aG9uIC1tIHB5dGVzdCIgYW5kIGlubGluZWQuIEFzIGlubGluZWQKK3dv
dWxkIGJlIHRoZSBmYXN0ZXN0IGl0IGNvdWxkIGJlIHJ1biBmaXJzdCAob3IgIi0tZmFzdCIgbW9k
ZSkuCisKKworQ3JlYXRlIGlzb2xhdGUgcGx1Z2luCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3Rh
Z3M6IGZlYXR1cmUKKworVGhlIGlkZWEgaXMgdGhhdCB5b3UgY2FuIGUuZy4gaW1wb3J0IG1vZHVs
ZXMgaW4gYSB0ZXN0IGFuZCBhZnRlcndhcmRzCitzeXMubW9kdWxlcywgc3lzLm1ldGFfcGF0aCBl
dGMgd291bGQgYmUgcmV2ZXJ0ZWQuICBJdCBjYW4gZ28gZnVydGhlcgordGhlbiBqdXN0IGltcG9y
dGluZyBob3dldmVyLCBlLmcuIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnksIGZpbGUKK2Rlc2Ny
aXB0b3JzLCAuLi4KKworVGhpcyB3b3VsZCBwcm9iYWJseSBiZSBkb25lIGJ5IG1hcmtpbmc6Ogor
CisgICAgQHB5dGVzdC5tYXJrLmlzb2xhdGUoaW1wb3J0aW5nPVRydWUsIGN3ZD1UcnVlLCBmZHM9
RmFsc2UpCisgICAgZGVmIHRlc3RfZm9vKCk6CisgICAgICAgIC4uLgorCitXaXRoIHRoZSBwb3Nz
aWJpbGl0eSBvZiBkb2luZyB0aGlzIGdsb2JhbGx5IGluIGFuIGluaS1maWxlLgorCisKK2ZubWF0
Y2ggZm9yIHRlc3QgbmFtZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3RhZ3M6IGZlYXR1cmUt
d2lzaAorCit2YXJpb3VzIHRlc3RzdWl0ZXMgdXNlIHN1ZmZpeGVzIGluc3RlYWQgb2YgcHJlZml4
ZXMgZm9yIHRlc3QgY2xhc3NlcworYWxzbyBpdCBsZW5kcyBpdHNlbGYgdG8gYmRkIHN0eWxlIHRl
c3QgbmFtZXM6OgorCisgICAgY2xhc3MgVXNlckJlaGF2aW91cjoKKyAgICAgICAgZGVmIGFub255
bW91c19zaG91bGRfbm90X2hhdmVfaW5ib3godXNlcik6CisgICAgICAgICAgICAuLi4KKyAgICAg
ICAgZGVmIHJlZ2lzdHJlZF9zaG91bGRfaGF2ZV9pbmJveCh1c2VyKToKKyAgICAgICAgICAgIC4u
CisKK3VzaW5nIHRoZSBmb2xsb3dpbmcgaW4gcHl0ZXN0LmluaTo6CisKKyAgICBbcHl0ZXN0XQor
ICAgIHB5dGhvbl9jbGFzc2VzID0gVGVzdCAqQmVoYXZpb3VyICpUZXN0CisgICAgcHl0aG9uX2Z1
bmN0aW9ucyA9IHRlc3QgKl9zaG91bGRfKgorCisKK21lY2hhbmlzbSBmb3IgcnVubmluZyBuYW1l
ZCBwYXJ0cyBvZiB0ZXN0cyB3aXRoIGRpZmZlcmVudCByZXBvcnRpbmcgYmVoYXZpb3VyCistLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KK3RhZ3M6IGZlYXR1cmUtd2lzaC1pbmNvbXBsZXRlCisKK2EgZmV3
IHVzZS1jYXNlcyBjb21lIHRvIG1pbmQ6CisKKyogZmFpbCBhc3NlcnRpb25zIGFuZCByZWNvcmQg
dGhhdCB3aXRob3V0IHN0b3BwaW5nIGEgY29tcGxldGUgdGVzdAorCisgICogdGhpcyBpcyBpbiBw
YXJ0aWN1bGFyIGhlcGZ1bGwgaWYgYSBzbWFsbCBiaXQgb2YgYSB0ZXN0IGlzIGtub3duIHRvIGZh
aWwveGZhaWw6OgorCisgICAgZGVmIHRlc3RfZnVuKCk6CisgICAgICAgIHdpdGggcHl0ZXN0LnNl
Y3Rpb24oJ2ZkY2hlY2ssIG1hcmtzPXB5dGVzdC5tYXJrLnhmYWlsX2lmKC4uLikpOgorICAgICAg
ICAgICAgYnJlYWtzX29uX3dpbmRvd3MoKQorCisqIGRpdmlkZSBmdW5jdGlvbmFsL2FjY2VwdGFu
Y2UgdGVzdHMgaW50byBzZWN0aW9ucworKiBwcm92aWRlIGEgZGlmZmVyZW50IG1lY2hhbmlzbSBm
b3IgZ2VuZXJhdG9ycywgbWF5YmUgc29tZXRoaW5nIGxpa2U6OgorCisgICAgZGVmIHB5dGVzdF9y
dW50ZXN0X2NhbGwoaXRlbSkKKyAgICAgICAgaWYgbm90IGdlbmVyYXRvcjoKKyAgICAgICAgICAg
IC4uLgorICAgICAgICBwcmVwYXJlX2NoZWNrID0gR2VuZXJhdG9yQ2hlY2twcmVwYXJlKCkKKwor
ICAgICAgICBnZW4gPSBpdGVtLm9iaigqKmZpeHR1cmVzKQorICAgICAgICBmb3IgY2hlY2sgaW4g
Z2VuCisgICAgICAgICAgICBpZCwgY2FsbCA9IHByZXBhcmVfY2hlY2soY2hlY2spCisgICAgICAg
ICAgICAjIGJ1YmJsZSBzaG91bGQgb25seSBwcmV2ZW50IGV4Y2VwdGlvbiBwcm9wYWdhdGlvbiBh
ZnRlciBhIGZhaWx1cmUKKyAgICAgICAgICAgICMgdGhlIHdob2xlIHRlc3Qgc2hvdWxkIHN0aWxs
IGZhaWwKKyAgICAgICAgICAgICMgdGhlcmUgbWlnaHQgYmUgbmVlZCBmb3IgYSBsb3dlciBsZXZl
bCBhcGkgYW5kIHRha2luZyBjdXN0b20gbWFya2VycyBpbnRvIGFjY291bnQKKyAgICAgICAgICAg
IHdpdGggcHl0ZXN0LnNlY3Rpb24oaWQsIGJ1YmJsZT1GYWxzZSk6CisgICAgICAgICAgICAgICAg
Y2FsbCgpCisKKwpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xz
L3B5dGVzdC9MSUNFTlNFIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVz
dC9MSUNFTlNFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45ZTI3YmQ3
ODQxOQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29s
cy9weXRlc3QvTElDRU5TRQpAQCAtMCwwICsxLDIxIEBACitUaGUgTUlUIExpY2Vuc2UgKE1JVCkK
KworQ29weXJpZ2h0IChjKSAyMDA0LTIwMTYgSG9sZ2VyIEtyZWtlbCBhbmQgb3RoZXJzCisKK1Bl
cm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29u
IG9idGFpbmluZyBhIGNvcHkgb2YKK3RoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1l
bnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluCit0aGUgU29mdHdhcmUg
d2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmln
aHRzIHRvCit1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1
YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcworb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVy
bWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvCitzbywg
c3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmln
aHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGlu
IGFsbAorY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKwor
VEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5Z
IEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8g
VEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitB
VVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1B
R0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNU
LCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorT1VUIE9GIE9SIElOIENPTk5FQ1RJ
T04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUK
K1NPRlRXQVJFLgpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xz
L3B5dGVzdC9NQU5JRkVTVC5pbiBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9w
eXRlc3QvTUFOSUZFU1QuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LjI2NmE5MTg0ZGMzCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQv
dzNjL3Rvb2xzL3B5dGVzdC9NQU5JRkVTVC5pbgpAQCAtMCwwICsxLDM0IEBACitpbmNsdWRlIENI
QU5HRUxPRy5yc3QKK2luY2x1ZGUgTElDRU5TRQoraW5jbHVkZSBBVVRIT1JTCisKK2luY2x1ZGUg
UkVBRE1FLnJzdAoraW5jbHVkZSBDT05UUklCVVRJTkcucnN0CisKK2luY2x1ZGUgdG94LmluaQor
aW5jbHVkZSBzZXR1cC5weQorCitpbmNsdWRlIC5jb3ZlcmFnZXJjCisKK2luY2x1ZGUgcGx1Z2lu
LXRlc3Quc2gKK2luY2x1ZGUgcmVxdWlyZW1lbnRzLWRvY3MudHh0CitpbmNsdWRlIHJ1bnRveC5w
eQorCityZWN1cnNpdmUtaW5jbHVkZSBiZW5jaCAqLnB5CityZWN1cnNpdmUtaW5jbHVkZSBleHRy
YSAqLnB5CisKK2dyYWZ0IHRlc3RpbmcKK2dyYWZ0IGRvYworCitleGNsdWRlIF9weXRlc3QvaW1w
bAorCitncmFmdCBfcHl0ZXN0L3ZlbmRvcmVkX3BhY2thZ2VzCisKK3JlY3Vyc2l2ZS1leGNsdWRl
ICogKi5weWMgKi5weW8KKworZXhjbHVkZSBhcHB2ZXlvci9pbnN0YWxsLnBzMQorZXhjbHVkZSBh
cHB2ZXlvci55bWwKK2V4Y2x1ZGUgYXBwdmV5b3IKKworZXhjbHVkZSBJU1NVRVMudHh0CitleGNs
dWRlIEhPV1RPUkVMRUFTRS5yc3QKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVk
L3czYy90b29scy9weXRlc3QvUkVBRE1FLnJzdCBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3cz
Yy90b29scy9weXRlc3QvUkVBRE1FLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMC4uNjhmYzkyMjExZDgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9p
bXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L1JFQURNRS5yc3QKQEAgLTAsMCArMSwxMDIgQEAKKy4u
IGltYWdlOjogaHR0cDovL3B5dGVzdC5vcmcvbGF0ZXN0L19zdGF0aWMvcHl0ZXN0MS5wbmcKKyAg
IDp0YXJnZXQ6IGh0dHA6Ly9weXRlc3Qub3JnCisgICA6YWxpZ246IGNlbnRlcgorICAgOmFsdDog
cHl0ZXN0CisKKy0tLS0tLQorCisuLiBpbWFnZTo6IGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vcHlw
aS92L3B5dGVzdC5zdmcKKyAgIDp0YXJnZXQ6IGh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkv
cHl0ZXN0CisuLiBpbWFnZTo6IGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vcHlwaS9weXZlcnNpb25z
L3B5dGVzdC5zdmcKKyAgOnRhcmdldDogaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9weXRl
c3QKKy4uIGltYWdlOjogaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9jb3ZlcmFsbHMvcHl0ZXN0LWRl
di9weXRlc3QvbWFzdGVyLnN2ZworICAgOnRhcmdldDogaHR0cHM6Ly9jb3ZlcmFsbHMuaW8vci9w
eXRlc3QtZGV2L3B5dGVzdAorLi4gaW1hZ2U6OiBodHRwczovL3RyYXZpcy1jaS5vcmcvcHl0ZXN0
LWRldi9weXRlc3Quc3ZnP2JyYW5jaD1tYXN0ZXIKKyAgICA6dGFyZ2V0OiBodHRwczovL3RyYXZp
cy1jaS5vcmcvcHl0ZXN0LWRldi9weXRlc3QKKy4uIGltYWdlOjogaHR0cHM6Ly9jaS5hcHB2ZXlv
ci5jb20vYXBpL3Byb2plY3RzL3N0YXR1cy9tcmdiamF1YTd0MzNwZzZiP3N2Zz10cnVlCisgICAg
OnRhcmdldDogaHR0cHM6Ly9jaS5hcHB2ZXlvci5jb20vcHJvamVjdC9weXRlc3Rib3QvcHl0ZXN0
CisKK1RoZSBgYHB5dGVzdGBgIGZyYW1ld29yayBtYWtlcyBpdCBlYXN5IHRvIHdyaXRlIHNtYWxs
IHRlc3RzLCB5ZXQKK3NjYWxlcyB0byBzdXBwb3J0IGNvbXBsZXggZnVuY3Rpb25hbCB0ZXN0aW5n
IGZvciBhcHBsaWNhdGlvbnMgYW5kIGxpYnJhcmllcy4gICAgCisKK0FuIGV4YW1wbGUgb2YgYSBz
aW1wbGUgdGVzdDoKKworLi4gY29kZS1ibG9jazo6IHB5dGhvbgorCisgICAgIyBjb250ZW50IG9m
IHRlc3Rfc2FtcGxlLnB5CisgICAgZGVmIGZ1bmMoeCk6CisgICAgICAgIHJldHVybiB4ICsgMQor
CisgICAgZGVmIHRlc3RfYW5zd2VyKCk6CisgICAgICAgIGFzc2VydCBmdW5jKDMpID09IDUKKwor
CitUbyBleGVjdXRlIGl0OjoKKworICAgICQgcHkudGVzdAorICAgID09PT09PT0gdGVzdCBzZXNz
aW9uIHN0YXJ0cyA9PT09PT09PQorICAgIHBsYXRmb3JtIGxpbnV4IC0tIFB5dGhvbiAzLjQuMywg
cHl0ZXN0LTIuOC41LCBweS0xLjQuMzEsIHBsdWdneS0wLjMuMSAgICAKKyAgICBjb2xsZWN0ZWQg
MSBpdGVtcworCisgICAgdGVzdF9zYW1wbGUucHkgRgorCisgICAgPT09PT09PSBGQUlMVVJFUyA9
PT09PT09PQorICAgIF9fX19fX18gdGVzdF9hbnN3ZXIgX19fX19fX18KKworICAgICAgICBkZWYg
dGVzdF9hbnN3ZXIoKToKKyAgICA+ICAgICAgIGFzc2VydCBmdW5jKDMpID09IDUKKyAgICBFICAg
ICAgIGFzc2VydCA0ID09IDUKKyAgICBFICAgICAgICArICB3aGVyZSA0ID0gZnVuYygzKQorCisg
ICAgdGVzdF9zYW1wbGUucHk6NTogQXNzZXJ0aW9uRXJyb3IKKyAgICA9PT09PT09IDEgZmFpbGVk
IGluIDAuMTIgc2Vjb25kcyA9PT09PT09PQorCitEdWUgdG8gYGBweS50ZXN0YGAncyBkZXRhaWxl
ZCBhc3NlcnRpb24gaW50cm9zcGVjdGlvbiwgb25seSBwbGFpbiBgYGFzc2VydGBgIHN0YXRlbWVu
dHMgYXJlIHVzZWQuIFNlZSBgZ2V0dGluZy1zdGFydGVkIDxodHRwOi8vcHl0ZXN0Lm9yZy9sYXRl
c3QvZ2V0dGluZy1zdGFydGVkLmh0bWwjb3VyLWZpcnN0LXRlc3QtcnVuPmBfIGZvciBtb3JlIGV4
YW1wbGVzLgorICAgICAgICAKKworRmVhdHVyZXMKKy0tLS0tLS0tCisKKy0gRGV0YWlsZWQgaW5m
byBvbiBmYWlsaW5nIGBhc3NlcnQgc3RhdGVtZW50cyA8aHR0cDovL3B5dGVzdC5vcmcvbGF0ZXN0
L2Fzc2VydC5odG1sPmBfIChubyBuZWVkIHRvIHJlbWVtYmVyIGBgc2VsZi5hc3NlcnQqYGAgbmFt
ZXMpOworCistIGBBdXRvLWRpc2NvdmVyeQorICA8aHR0cDovL3B5dGVzdC5vcmcvbGF0ZXN0L2dv
b2RwcmFjdGljZXMuaHRtbCNweXRob24tdGVzdC1kaXNjb3Zlcnk+YF8KKyAgb2YgdGVzdCBtb2R1
bGVzIGFuZCBmdW5jdGlvbnM7CisKKy0gYE1vZHVsYXIgZml4dHVyZXMgPGh0dHA6Ly9weXRlc3Qu
b3JnL2xhdGVzdC9maXh0dXJlLmh0bWw+YF8gIGZvcgorICBtYW5hZ2luZyBzbWFsbCBvciBwYXJh
bWV0cml6ZWQgbG9uZy1saXZlZCB0ZXN0IHJlc291cmNlczsKKworLSBDYW4gcnVuIGB1bml0dGVz
dCA8aHR0cDovL3B5dGVzdC5vcmcvbGF0ZXN0L3VuaXR0ZXN0Lmh0bWw+YF8gKG9yIHRyaWFsKSwK
KyAgYG5vc2UgPGh0dHA6Ly9weXRlc3Qub3JnL2xhdGVzdC9ub3NlLmh0bWw+YF8gdGVzdCBzdWl0
ZXMgb3V0IG9mIHRoZSBib3g7CisKKy0gUHl0aG9uMi42KywgUHl0aG9uMy4yKywgUHlQeS0yLjMs
IEp5dGhvbi0yLjUgKHVudGVzdGVkKTsKKworLSBSaWNoIHBsdWdpbiBhcmNoaXRlY3R1cmUsIHdp
dGggb3ZlciAxNTArIGBleHRlcm5hbCBwbHVnaW5zIDxodHRwOi8vcHl0ZXN0Lm9yZy9sYXRlc3Qv
cGx1Z2lucy5odG1sI2luc3RhbGxpbmctZXh0ZXJuYWwtcGx1Z2lucy1zZWFyY2hpbmc+YF8gYW5k
IHRocml2aW5nIGNvbW11bml0eTsKKworCitEb2N1bWVudGF0aW9uCistLS0tLS0tLS0tLS0tCisK
K0ZvciBmdWxsIGRvY3VtZW50YXRpb24sIGluY2x1ZGluZyBpbnN0YWxsYXRpb24sIHR1dG9yaWFs
cyBhbmQgUERGIGRvY3VtZW50cywgcGxlYXNlIHNlZSBodHRwOi8vcHl0ZXN0Lm9yZy4KKworCitC
dWdzL1JlcXVlc3RzCistLS0tLS0tLS0tLS0tCisKK1BsZWFzZSB1c2UgdGhlIGBHaXRIdWIgaXNz
dWUgdHJhY2tlciA8aHR0cHM6Ly9naXRodWIuY29tL3B5dGVzdC1kZXYvcHl0ZXN0L2lzc3Vlcz5g
XyB0byBzdWJtaXQgYnVncyBvciByZXF1ZXN0IGZlYXR1cmVzLgorCisKK0NoYW5nZWxvZworLS0t
LS0tLS0tCisKK0NvbnN1bHQgdGhlIGBDaGFuZ2Vsb2cgPGh0dHA6Ly9weXRlc3Qub3JnL2xhdGVz
dC9jaGFuZ2Vsb2cuaHRtbD5gXyBwYWdlIGZvciBmaXhlcyBhbmQgZW5oYW5jZW1lbnRzIG9mIGVh
Y2ggdmVyc2lvbi4KKworCitMaWNlbnNlCistLS0tLS0tCisKK0NvcHlyaWdodCBIb2xnZXIgS3Jl
a2VsIGFuZCBvdGhlcnMsIDIwMDQtMjAxNi4KKworRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBgTUlUYF8gbGljZW5zZSwgcHl0ZXN0IGlzIGZyZWUgYW5kIG9wZW4gc291cmNlIHNv
ZnR3YXJlLgorCisuLiBfYE1JVGA6IGh0dHBzOi8vZ2l0aHViLmNvbS9weXRlc3QtZGV2L3B5dGVz
dC9ibG9iL21hc3Rlci9MSUNFTlNFCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRl
ZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvX19pbml0X18ucHkgYi9XZWJEcml2ZXJUZXN0cy9p
bXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvX19pbml0X18ucHkKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjcyM2ZiOWU4NTVhCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L19faW5p
dF9fLnB5CkBAIC0wLDAgKzEsMiBAQAorIworX192ZXJzaW9uX18gPSAnMi45LjEnCmRpZmYgLS1n
aXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvX2Fy
Z2NvbXBsZXRlLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9f
cHl0ZXN0L19hcmdjb21wbGV0ZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uOTU1ODU1YTk2NDgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBv
cnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvX2FyZ2NvbXBsZXRlLnB5CkBAIC0wLDAgKzEs
MTAxIEBACisKKyIiImFsbG93IGJhc2gtY29tcGxldGlvbiBmb3IgYXJncGFyc2Ugd2l0aCBhcmdj
b21wbGV0ZSBpZiBpbnN0YWxsZWQKK25lZWRzIGFyZ2NvbXBsZXRlPj0wLjUuNiBmb3IgcHl0aG9u
IDMuMi8zLjMgKG9sZGVyIHZlcnNpb25zIGZhaWwKK3RvIGZpbmQgdGhlIG1hZ2ljIHN0cmluZywg
c28gX0FSR0NPTVBMRVRFIGVudi4gdmFyIGlzIG5ldmVyIHNldCwgYW5kCit0aGlzIGRvZXMgbm90
IG5lZWQgc3BlY2lhbCBjb2RlLgorCithcmdjb21wbGV0ZSBkb2VzIG5vdCBzdXBwb3J0IHB5dGhv
biAyLjUgKGFsdGhvdWdoIHRoZSBjaGFuZ2VzIGZvciB0aGF0CithcmUgbWlub3IpLgorCitGdW5j
dGlvbiB0cnlfYXJnY29tcGxldGUocGFyc2VyKSBzaG91bGQgYmUgY2FsbGVkIGRpcmVjdGx5IGJl
Zm9yZQordGhlIGNhbGwgdG8gQXJndW1lbnRQYXJzZXIucGFyc2VfYXJncygpLgorCitUaGUgZmls
ZXNjb21wbGV0ZXIgaXMgd2hhdCB5b3Ugbm9ybWFsbHkgd291bGQgdXNlIG9uIHRoZSBwb3NpdGlv
bmFsCithcmd1bWVudHMgc3BlY2lmaWNhdGlvbiwgaW4gb3JkZXIgdG8gZ2V0ICJkaXJuYW1lLyIg
YWZ0ZXIgImRpcm48VEFCPiIKK2luc3RlYWQgb2YgdGhlIGRlZmF1bHQgImRpcm5hbWUgIjoKKwor
ICAgb3B0cGFyc2VyLmFkZF9hcmd1bWVudChDb25maWcuX2ZpbGVfb3JfZGlyLCBuYXJncz0nKicK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLmNvbXBsZXRlcj1maWxlc2NvbXBsZXRl
cgorCitPdGhlciwgYXBwbGljYXRpb24gc3BlY2lmaWMsIGNvbXBsZXRlcnMgc2hvdWxkIGdvIGlu
IHRoZSBmaWxlCitkb2luZyB0aGUgYWRkX2FyZ3VtZW50IGNhbGxzIGFzIHRoZXkgbmVlZCB0byBi
ZSBzcGVjaWZpZWQgYXMgLmNvbXBsZXRlcgorYXR0cmlidXRlcyBhcyB3ZWxsLiAoSWYgYXJnY29t
cGxldGUgaXMgbm90IGluc3RhbGxlZCwgdGhlIGZ1bmN0aW9uIHRoZQorYXR0cmlidXRlIHBvaW50
cyB0byB3aWxsIG5vdCBiZSB1c2VkKS4KKworU1BFRURVUAorPT09PT09PQorVGhlIGdlbmVyaWMg
YXJnY29tcGxldGUgc2NyaXB0IGZvciBiYXNoLWNvbXBsZXRpb24KKygvZXRjL2Jhc2hfY29tcGxl
dGlvbi5kL3B5dGhvbi1hcmdjb21wbGV0ZS5zaCApCit1c2VzIGEgcHl0aG9uIHByb2dyYW0gdG8g
ZGV0ZXJtaW5lIHN0YXJ0dXAgc2NyaXB0IGdlbmVyYXRlZCBieSBwaXAuCitZb3UgY2FuIHNwZWVk
IHVwIGNvbXBsZXRpb24gc29tZXdoYXQgYnkgY2hhbmdpbmcgdGhpcyBzY3JpcHQgdG8gaW5jbHVk
ZQorICAjIFBZVEhPTl9BUkdDT01QTEVURV9PSworc28gdGhlIHRoZSBweXRob24tYXJnY29tcGxl
dGUtY2hlY2stZWFzeS1pbnN0YWxsLXNjcmlwdCBkb2VzIG5vdAorbmVlZCB0byBiZSBjYWxsZWQg
dG8gZmluZCB0aGUgZW50cnkgcG9pbnQgb2YgdGhlIGNvZGUgYW5kIHNlZSBpZiB0aGF0IGlzCitt
YXJrZWQgIHdpdGggUFlUSE9OX0FSR0NPTVBMRVRFX09LCisKK0lOU1RBTEwvREVCVUdHSU5HCis9
PT09PT09PT09PT09PT09PQorVG8gaW5jbHVkZSB0aGlzIHN1cHBvcnQgaW4gYW5vdGhlciBhcHBs
aWNhdGlvbiB0aGF0IGhhcyBzZXR1cC5weSBnZW5lcmF0ZWQKK3NjcmlwdHM6CistIGFkZCB0aGUg
bGluZToKKyAgICAjIFBZVEhPTl9BUkdDT01QTEVURV9PSworICBuZWFyIHRoZSB0b3Agb2YgdGhl
IG1haW4gcHl0aG9uIGVudHJ5IHBvaW50CistIGluY2x1ZGUgaW4gdGhlIGZpbGUgY2FsbGluZyBw
YXJzZV9hcmdzKCk6CisgICAgZnJvbSBfYXJnY29tcGxldGUgaW1wb3J0IHRyeV9hcmdjb21wbGV0
ZSwgZmlsZXNjb21wbGV0ZXIKKyAgICwgY2FsbCB0cnlfYXJnY29tcGxldGUganVzdCBiZWZvcmUg
cGFyc2VfYXJncygpLCBhbmQgb3B0aW9uYWxseSBhZGQKKyAgIGZpbGVzY29tcGxldGVyIHRvIHRo
ZSBwb3NpdGlvbmFsIGFyZ3VtZW50cycgYWRkX2FyZ3VtZW50KCkKK0lmIHRoaW5ncyBkbyBub3Qg
d29yayByaWdodCBhd2F5OgorLSBzd2l0Y2ggb24gYXJnY29tcGxldGUgZGVidWdnaW5nIHdpdGgg
KGFsc28gaGVscGZ1bCB3aGVuIGRvaW5nIGN1c3RvbQorICBjb21wbGV0ZXJzKToKKyAgICBleHBv
cnQgX0FSQ19ERUJVRz0xCistIHJ1bjoKKyAgICBweXRob24tYXJnY29tcGxldGUtY2hlY2stZWFz
eS1pbnN0YWxsLXNjcmlwdCAkKHdoaWNoIGFwcG5hbWUpCisgICAgZWNobyAkPworICB3aWxsIGVj
aG8gMCBpZiB0aGUgbWFnaWMgbGluZSBoYXMgYmVlbiBmb3VuZCwgMSBpZiBub3QKKy0gc29tZXRp
bWVzIGl0IGhlbHBzIHRvIGZpbmQgZWFybHkgb24gZXJyb3JzIHVzaW5nOgorICAgIF9BUkdDT01Q
TEVURT0xIF9BUkNfREVCVUc9MSBhcHBuYW1lCisgIHdoaWNoIHNob3VsZCB0aHJvdyBhIEtleUVy
cm9yOiAnQ09NUExJTkUnICh3aGljaCBpcyBwcm9wZXJseSBzZXQgYnkgdGhlCisgIGdsb2JhbCBh
cmdjb21wbGV0ZSBzY3JpcHQpLgorIiIiCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworZnJvbSBn
bG9iIGltcG9ydCBnbG9iCisKK2NsYXNzIEZhc3RGaWxlc0NvbXBsZXRlcjoKKyAgICAnRmFzdCBm
aWxlIGNvbXBsZXRlciBjbGFzcycKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZGlyZWN0b3JpZXM9
VHJ1ZSk6CisgICAgICAgIHNlbGYuZGlyZWN0b3JpZXMgPSBkaXJlY3RvcmllcworCisgICAgZGVm
IF9fY2FsbF9fKHNlbGYsIHByZWZpeCwgKiprd2FyZ3MpOgorICAgICAgICAiIiJvbmx5IGNhbGxl
ZCBvbiBub24gb3B0aW9uIGNvbXBsZXRpb25zIiIiCisgICAgICAgIGlmIG9zLnBhdGguc2VwIGlu
IHByZWZpeFsxOl06ICMKKyAgICAgICAgICAgIHByZWZpeF9kaXIgPSBsZW4ob3MucGF0aC5kaXJu
YW1lKHByZWZpeCkgKyBvcy5wYXRoLnNlcCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBy
ZWZpeF9kaXIgPSAwCisgICAgICAgIGNvbXBsZXRpb24gPSBbXQorICAgICAgICBnbG9iYmVkID0g
W10KKyAgICAgICAgaWYgJyonIG5vdCBpbiBwcmVmaXggYW5kICc/JyBub3QgaW4gcHJlZml4Ogor
ICAgICAgICAgICAgaWYgcHJlZml4Wy0xXSA9PSBvcy5wYXRoLnNlcDogICMgd2UgYXJlIG9uIHVu
aXgsIG90aGVyd2lzZSBubyBiYXNoCisgICAgICAgICAgICAgICAgZ2xvYmJlZC5leHRlbmQoZ2xv
YihwcmVmaXggKyAnLionKSkKKyAgICAgICAgICAgIHByZWZpeCArPSAnKicKKyAgICAgICAgZ2xv
YmJlZC5leHRlbmQoZ2xvYihwcmVmaXgpKQorICAgICAgICBmb3IgeCBpbiBzb3J0ZWQoZ2xvYmJl
ZCk6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHgpOgorICAgICAgICAgICAgICAgIHgg
Kz0gJy8nCisgICAgICAgICAgICAjIGFwcGVuZCBzdHJpcHBpbmcgdGhlIHByZWZpeCAobGlrZSBi
YXNoLCBub3QgbGlrZSBjb21wZ2VuKQorICAgICAgICAgICAgY29tcGxldGlvbi5hcHBlbmQoeFtw
cmVmaXhfZGlyOl0pCisgICAgICAgIHJldHVybiBjb21wbGV0aW9uCisKK2lmIG9zLmVudmlyb24u
Z2V0KCdfQVJHQ09NUExFVEUnKToKKyAgICB0cnk6CisgICAgICAgIGltcG9ydCBhcmdjb21wbGV0
ZS5jb21wbGV0ZXJzCisgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICBzeXMuZXhpdCgt
MSkKKyAgICBmaWxlc2NvbXBsZXRlciA9IEZhc3RGaWxlc0NvbXBsZXRlcigpCisKKyAgICBkZWYg
dHJ5X2FyZ2NvbXBsZXRlKHBhcnNlcik6CisgICAgICAgIGFyZ2NvbXBsZXRlLmF1dG9jb21wbGV0
ZShwYXJzZXIpCitlbHNlOgorICAgIGRlZiB0cnlfYXJnY29tcGxldGUocGFyc2VyKTogcGFzcwor
ICAgIGZpbGVzY29tcGxldGVyID0gTm9uZQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1w
b3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L19jb2RlL19faW5pdF9fLnB5IGIvV2ViRHJp
dmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L19jb2RlL19faW5pdF9f
LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jMDQ2Yjk3MTZjYQot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRl
c3QvX3B5dGVzdC9fY29kZS9fX2luaXRfXy5weQpAQCAtMCwwICsxLDEyIEBACisiIiIgcHl0aG9u
IGluc3BlY3Rpb24vY29kZSBnZW5lcmF0aW9uIEFQSSAiIiIKK2Zyb20gLmNvZGUgaW1wb3J0IENv
ZGUgICMgbm9xYQorZnJvbSAuY29kZSBpbXBvcnQgRXhjZXB0aW9uSW5mbyAgIyBub3FhCitmcm9t
IC5jb2RlIGltcG9ydCBGcmFtZSAgIyBub3FhCitmcm9tIC5jb2RlIGltcG9ydCBUcmFjZWJhY2sg
ICMgbm9xYQorZnJvbSAuY29kZSBpbXBvcnQgZ2V0cmF3Y29kZSAgIyBub3FhCitmcm9tIC5jb2Rl
IGltcG9ydCBwYXRjaF9idWlsdGlucyAgIyBub3FhCitmcm9tIC5jb2RlIGltcG9ydCB1bnBhdGNo
X2J1aWx0aW5zICAjIG5vcWEKK2Zyb20gLnNvdXJjZSBpbXBvcnQgU291cmNlICAjIG5vcWEKK2Zy
b20gLnNvdXJjZSBpbXBvcnQgY29tcGlsZV8gYXMgY29tcGlsZSAgIyBub3FhCitmcm9tIC5zb3Vy
Y2UgaW1wb3J0IGdldGZzbGluZW5vICAjIG5vcWEKKwpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVz
dHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L19jb2RlL19weTJ0cmFjZWJhY2su
cHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvX2Nv
ZGUvX3B5MnRyYWNlYmFjay5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MC4uYTgzMGQ5ODk5YWUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRl
ZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvX2NvZGUvX3B5MnRyYWNlYmFjay5weQpAQCAtMCww
ICsxLDgxIEBACisjIGNvcGllZCBmcm9tIHB5dGhvbi0yLjcuMydzIHRyYWNlYmFjay5weQorIyBD
SEFOR0VTOgorIyAtIHNvbWVfc3RyIGlzIHJlcGxhY2VkLCB0cnlpbmcgdG8gY3JlYXRlIHVuaWNv
ZGUgc3RyaW5ncworIworaW1wb3J0IHR5cGVzCisKK2RlZiBmb3JtYXRfZXhjZXB0aW9uX29ubHko
ZXR5cGUsIHZhbHVlKToKKyAgICAiIiJGb3JtYXQgdGhlIGV4Y2VwdGlvbiBwYXJ0IG9mIGEgdHJh
Y2ViYWNrLgorCisgICAgVGhlIGFyZ3VtZW50cyBhcmUgdGhlIGV4Y2VwdGlvbiB0eXBlIGFuZCB2
YWx1ZSBzdWNoIGFzIGdpdmVuIGJ5CisgICAgc3lzLmxhc3RfdHlwZSBhbmQgc3lzLmxhc3RfdmFs
dWUuIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBsaXN0IG9mCisgICAgc3RyaW5ncywgZWFjaCBlbmRp
bmcgaW4gYSBuZXdsaW5lLgorCisgICAgTm9ybWFsbHksIHRoZSBsaXN0IGNvbnRhaW5zIGEgc2lu
Z2xlIHN0cmluZzsgaG93ZXZlciwgZm9yCisgICAgU3ludGF4RXJyb3IgZXhjZXB0aW9ucywgaXQg
Y29udGFpbnMgc2V2ZXJhbCBsaW5lcyB0aGF0ICh3aGVuCisgICAgcHJpbnRlZCkgZGlzcGxheSBk
ZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCB3aGVyZSB0aGUgc3ludGF4CisgICAgZXJyb3Igb2Nj
dXJyZWQuCisKKyAgICBUaGUgbWVzc2FnZSBpbmRpY2F0aW5nIHdoaWNoIGV4Y2VwdGlvbiBvY2N1
cnJlZCBpcyBhbHdheXMgdGhlIGxhc3QKKyAgICBzdHJpbmcgaW4gdGhlIGxpc3QuCisKKyAgICAi
IiIKKworICAgICMgQW4gaW5zdGFuY2Ugc2hvdWxkIG5vdCBoYXZlIGEgbWVhbmluZ2Z1bCB2YWx1
ZSBwYXJhbWV0ZXIsIGJ1dAorICAgICMgc29tZXRpbWVzIGRvZXMsIHBhcnRpY3VsYXJseSBmb3Ig
c3RyaW5nIGV4Y2VwdGlvbnMsIHN1Y2ggYXMKKyAgICAjID4+PiByYWlzZSBzdHJpbmcxLCBzdHJp
bmcyICAjIGRlcHJlY2F0ZWQKKyAgICAjCisgICAgIyBDbGVhciB0aGVzZSBvdXQgZmlyc3QgYmVj
YXVzZSBpc3N1YnR5cGUoc3RyaW5nMSwgU3ludGF4RXJyb3IpCisgICAgIyB3b3VsZCB0aHJvdyBh
bm90aGVyIGV4Y2VwdGlvbiBhbmQgbWFzayB0aGUgb3JpZ2luYWwgcHJvYmxlbS4KKyAgICBpZiAo
aXNpbnN0YW5jZShldHlwZSwgQmFzZUV4Y2VwdGlvbikgb3IKKyAgICAgICAgaXNpbnN0YW5jZShl
dHlwZSwgdHlwZXMuSW5zdGFuY2VUeXBlKSBvcgorICAgICAgICBldHlwZSBpcyBOb25lIG9yIHR5
cGUoZXR5cGUpIGlzIHN0cik6CisgICAgICAgIHJldHVybiBbX2Zvcm1hdF9maW5hbF9leGNfbGlu
ZShldHlwZSwgdmFsdWUpXQorCisgICAgc3R5cGUgPSBldHlwZS5fX25hbWVfXworCisgICAgaWYg
bm90IGlzc3ViY2xhc3MoZXR5cGUsIFN5bnRheEVycm9yKToKKyAgICAgICAgcmV0dXJuIFtfZm9y
bWF0X2ZpbmFsX2V4Y19saW5lKHN0eXBlLCB2YWx1ZSldCisKKyAgICAjIEl0IHdhcyBhIHN5bnRh
eCBlcnJvcjsgc2hvdyBleGFjdGx5IHdoZXJlIHRoZSBwcm9ibGVtIHdhcyBmb3VuZC4KKyAgICBs
aW5lcyA9IFtdCisgICAgdHJ5OgorICAgICAgICBtc2csIChmaWxlbmFtZSwgbGluZW5vLCBvZmZz
ZXQsIGJhZGxpbmUpID0gdmFsdWUuYXJncworICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAg
IHBhc3MKKyAgICBlbHNlOgorICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lIG9yICI8c3RyaW5n
PiIKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgIEZpbGUgIiVzIiwgbGluZSAlZFxuJyAlIChmaWxl
bmFtZSwgbGluZW5vKSkKKyAgICAgICAgaWYgYmFkbGluZSBpcyBub3QgTm9uZToKKyAgICAgICAg
ICAgIGlmIGlzaW5zdGFuY2UoYmFkbGluZSwgYnl0ZXMpOiAgIyBweXRob24gMiBvbmx5CisgICAg
ICAgICAgICAgICAgYmFkbGluZSA9IGJhZGxpbmUuZGVjb2RlKCd1dGYtOCcsICdyZXBsYWNlJykK
KyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCh1JyAgICAlc1xuJyAlIGJhZGxpbmUuc3RyaXAoKSkK
KyAgICAgICAgICAgIGlmIG9mZnNldCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBjYXJl
dHNwYWNlID0gYmFkbGluZS5yc3RyaXAoJ1xuJylbOm9mZnNldF0ubHN0cmlwKCkKKyAgICAgICAg
ICAgICAgICAjIG5vbi1zcGFjZSB3aGl0ZXNwYWNlIChsaWtlcyB0YWJzKSBtdXN0IGJlIGtlcHQg
Zm9yIGFsaWdubWVudAorICAgICAgICAgICAgICAgIGNhcmV0c3BhY2UgPSAoKGMuaXNzcGFjZSgp
IGFuZCBjIG9yICcgJykgZm9yIGMgaW4gY2FyZXRzcGFjZSkKKyAgICAgICAgICAgICAgICAjIG9u
bHkgdGhyZWUgc3BhY2VzIHRvIGFjY291bnQgZm9yIG9mZnNldDEgPT0gcG9zIDAKKyAgICAgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICVzXlxuJyAlICcnLmpvaW4oY2FyZXRzcGFjZSkpCisg
ICAgICAgIHZhbHVlID0gbXNnCisKKyAgICBsaW5lcy5hcHBlbmQoX2Zvcm1hdF9maW5hbF9leGNf
bGluZShzdHlwZSwgdmFsdWUpKQorICAgIHJldHVybiBsaW5lcworCitkZWYgX2Zvcm1hdF9maW5h
bF9leGNfbGluZShldHlwZSwgdmFsdWUpOgorICAgICIiIlJldHVybiBhIGxpc3Qgb2YgYSBzaW5n
bGUgbGluZSAtLSBub3JtYWwgY2FzZSBmb3IgZm9ybWF0X2V4Y2VwdGlvbl9vbmx5IiIiCisgICAg
dmFsdWVzdHIgPSBfc29tZV9zdHIodmFsdWUpCisgICAgaWYgdmFsdWUgaXMgTm9uZSBvciBub3Qg
dmFsdWVzdHI6CisgICAgICAgIGxpbmUgPSAiJXNcbiIgJSBldHlwZQorICAgIGVsc2U6CisgICAg
ICAgIGxpbmUgPSAiJXM6ICVzXG4iICUgKGV0eXBlLCB2YWx1ZXN0cikKKyAgICByZXR1cm4gbGlu
ZQorCitkZWYgX3NvbWVfc3RyKHZhbHVlKToKKyAgICB0cnk6CisgICAgICAgIHJldHVybiB1bmlj
b2RlKHZhbHVlKQorICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgIHRyeToKKyAgICAgICAg
ICAgIHJldHVybiBzdHIodmFsdWUpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAg
ICAgICBwYXNzCisgICAgcmV0dXJuICc8dW5wcmludGFibGUgJXMgb2JqZWN0PicgJSB0eXBlKHZh
bHVlKS5fX25hbWVfXwpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rv
b2xzL3B5dGVzdC9fcHl0ZXN0L19jb2RlL2NvZGUucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRl
ZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvX2NvZGUvY29kZS5weQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYmM2OGFhYzU1NDgKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvX2NvZGUvY29k
ZS5weQpAQCAtMCwwICsxLDc5NSBAQAoraW1wb3J0IHN5cworZnJvbSBpbnNwZWN0IGltcG9ydCBD
T19WQVJBUkdTLCBDT19WQVJLRVlXT1JEUworCitpbXBvcnQgcHkKKworYnVpbHRpbl9yZXByID0g
cmVwcgorCityZXBybGliID0gcHkuYnVpbHRpbi5fdHJ5aW1wb3J0KCdyZXByJywgJ3JlcHJsaWIn
KQorCitpZiBzeXMudmVyc2lvbl9pbmZvWzBdID49IDM6CisgICAgZnJvbSB0cmFjZWJhY2sgaW1w
b3J0IGZvcm1hdF9leGNlcHRpb25fb25seQorZWxzZToKKyAgICBmcm9tIC5fcHkydHJhY2ViYWNr
IGltcG9ydCBmb3JtYXRfZXhjZXB0aW9uX29ubHkKKworY2xhc3MgQ29kZShvYmplY3QpOgorICAg
ICIiIiB3cmFwcGVyIGFyb3VuZCBQeXRob24gY29kZSBvYmplY3RzICIiIgorICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCByYXdjb2RlKToKKyAgICAgICAgaWYgbm90IGhhc2F0dHIocmF3Y29kZSwgImNv
X2ZpbGVuYW1lIik6CisgICAgICAgICAgICByYXdjb2RlID0gZ2V0cmF3Y29kZShyYXdjb2RlKQor
ICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmZpbGVuYW1lID0gcmF3Y29kZS5jb19maWxl
bmFtZQorICAgICAgICAgICAgc2VsZi5maXJzdGxpbmVubyA9IHJhd2NvZGUuY29fZmlyc3RsaW5l
bm8gLSAxCisgICAgICAgICAgICBzZWxmLm5hbWUgPSByYXdjb2RlLmNvX25hbWUKKyAgICAgICAg
ZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJub3Qg
YSBjb2RlIG9iamVjdDogJXIiICUocmF3Y29kZSwpKQorICAgICAgICBzZWxmLnJhdyA9IHJhd2Nv
ZGUKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gc2VsZi5y
YXcgPT0gb3RoZXIucmF3CisKKyAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAg
cmV0dXJuIG5vdCBzZWxmID09IG90aGVyCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcGF0aChz
ZWxmKToKKyAgICAgICAgIiIiIHJldHVybiBhIHBhdGggb2JqZWN0IHBvaW50aW5nIHRvIHNvdXJj
ZSBjb2RlIChub3RlIHRoYXQgaXQKKyAgICAgICAgbWlnaHQgbm90IHBvaW50IHRvIGFuIGFjdHVh
bGx5IGV4aXN0aW5nIGZpbGUpLiAiIiIKKyAgICAgICAgcCA9IHB5LnBhdGgubG9jYWwoc2VsZi5y
YXcuY29fZmlsZW5hbWUpCisgICAgICAgICMgbWF5YmUgZG9uJ3QgdHJ5IHRoaXMgY2hlY2tpbmcK
KyAgICAgICAgaWYgbm90IHAuY2hlY2soKToKKyAgICAgICAgICAgICMgWFhYIG1heWJlIHRyeSBo
YXJkZXIgbGlrZSB0aGUgd2VpcmQgbG9naWMKKyAgICAgICAgICAgICMgaW4gdGhlIHN0YW5kYXJk
IGxpYiBbbGluZWNhY2hlLnVwZGF0ZWNhY2hlXSBkb2VzPworICAgICAgICAgICAgcCA9IHNlbGYu
cmF3LmNvX2ZpbGVuYW1lCisgICAgICAgIHJldHVybiBwCisKKyAgICBAcHJvcGVydHkKKyAgICBk
ZWYgZnVsbHNvdXJjZShzZWxmKToKKyAgICAgICAgIiIiIHJldHVybiBhIF9weXRlc3QuX2NvZGUu
U291cmNlIG9iamVjdCBmb3IgdGhlIGZ1bGwgc291cmNlIGZpbGUgb2YgdGhlIGNvZGUKKyAgICAg
ICAgIiIiCisgICAgICAgIGZyb20gX3B5dGVzdC5fY29kZSBpbXBvcnQgc291cmNlCisgICAgICAg
IGZ1bGwsIF8gPSBzb3VyY2UuZmluZHNvdXJjZShzZWxmLnJhdykKKyAgICAgICAgcmV0dXJuIGZ1
bGwKKworICAgIGRlZiBzb3VyY2Uoc2VsZik6CisgICAgICAgICIiIiByZXR1cm4gYSBfcHl0ZXN0
Ll9jb2RlLlNvdXJjZSBvYmplY3QgZm9yIHRoZSBjb2RlIG9iamVjdCdzIHNvdXJjZSBvbmx5Cisg
ICAgICAgICIiIgorICAgICAgICAjIHJldHVybiBzb3VyY2Ugb25seSBmb3IgdGhhdCBwYXJ0IG9m
IGNvZGUKKyAgICAgICAgaW1wb3J0IF9weXRlc3QuX2NvZGUKKyAgICAgICAgcmV0dXJuIF9weXRl
c3QuX2NvZGUuU291cmNlKHNlbGYucmF3KQorCisgICAgZGVmIGdldGFyZ3Moc2VsZiwgdmFyPUZh
bHNlKToKKyAgICAgICAgIiIiIHJldHVybiBhIHR1cGxlIHdpdGggdGhlIGFyZ3VtZW50IG5hbWVz
IGZvciB0aGUgY29kZSBvYmplY3QKKworICAgICAgICAgICAgaWYgJ3ZhcicgaXMgc2V0IFRydWUg
YWxzbyByZXR1cm4gdGhlIG5hbWVzIG9mIHRoZSB2YXJpYWJsZSBhbmQKKyAgICAgICAgICAgIGtl
eXdvcmQgYXJndW1lbnRzIHdoZW4gcHJlc2VudAorICAgICAgICAiIiIKKyAgICAgICAgIyBoYW5k
ZnVsbCBzaG9ydGN1dCBmb3IgZ2V0dGluZyBhcmdzCisgICAgICAgIHJhdyA9IHNlbGYucmF3Cisg
ICAgICAgIGFyZ2NvdW50ID0gcmF3LmNvX2FyZ2NvdW50CisgICAgICAgIGlmIHZhcjoKKyAgICAg
ICAgICAgIGFyZ2NvdW50ICs9IHJhdy5jb19mbGFncyAmIENPX1ZBUkFSR1MKKyAgICAgICAgICAg
IGFyZ2NvdW50ICs9IHJhdy5jb19mbGFncyAmIENPX1ZBUktFWVdPUkRTCisgICAgICAgIHJldHVy
biByYXcuY29fdmFybmFtZXNbOmFyZ2NvdW50XQorCitjbGFzcyBGcmFtZShvYmplY3QpOgorICAg
ICIiIldyYXBwZXIgYXJvdW5kIGEgUHl0aG9uIGZyYW1lIGhvbGRpbmcgZl9sb2NhbHMgYW5kIGZf
Z2xvYmFscworICAgIGluIHdoaWNoIGV4cHJlc3Npb25zIGNhbiBiZSBldmFsdWF0ZWQuIiIiCisK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgZnJhbWUpOgorICAgICAgICBzZWxmLmxpbmVubyA9IGZy
YW1lLmZfbGluZW5vIC0gMQorICAgICAgICBzZWxmLmZfZ2xvYmFscyA9IGZyYW1lLmZfZ2xvYmFs
cworICAgICAgICBzZWxmLmZfbG9jYWxzID0gZnJhbWUuZl9sb2NhbHMKKyAgICAgICAgc2VsZi5y
YXcgPSBmcmFtZQorICAgICAgICBzZWxmLmNvZGUgPSBDb2RlKGZyYW1lLmZfY29kZSkKKworICAg
IEBwcm9wZXJ0eQorICAgIGRlZiBzdGF0ZW1lbnQoc2VsZik6CisgICAgICAgICIiIiBzdGF0ZW1l
bnQgdGhpcyBmcmFtZSBpcyBhdCAiIiIKKyAgICAgICAgaW1wb3J0IF9weXRlc3QuX2NvZGUKKyAg
ICAgICAgaWYgc2VsZi5jb2RlLmZ1bGxzb3VyY2UgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVy
biBfcHl0ZXN0Ll9jb2RlLlNvdXJjZSgiIikKKyAgICAgICAgcmV0dXJuIHNlbGYuY29kZS5mdWxs
c291cmNlLmdldHN0YXRlbWVudChzZWxmLmxpbmVubykKKworICAgIGRlZiBldmFsKHNlbGYsIGNv
ZGUsICoqdmFycyk6CisgICAgICAgICIiIiBldmFsdWF0ZSAnY29kZScgaW4gdGhlIGZyYW1lCisK
KyAgICAgICAgICAgICd2YXJzJyBhcmUgb3B0aW9uYWwgYWRkaXRpb25hbCBsb2NhbCB2YXJpYWJs
ZXMKKworICAgICAgICAgICAgcmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBldmFsdWF0aW9uCisg
ICAgICAgICIiIgorICAgICAgICBmX2xvY2FscyA9IHNlbGYuZl9sb2NhbHMuY29weSgpCisgICAg
ICAgIGZfbG9jYWxzLnVwZGF0ZSh2YXJzKQorICAgICAgICByZXR1cm4gZXZhbChjb2RlLCBzZWxm
LmZfZ2xvYmFscywgZl9sb2NhbHMpCisKKyAgICBkZWYgZXhlY18oc2VsZiwgY29kZSwgKip2YXJz
KToKKyAgICAgICAgIiIiIGV4ZWMgJ2NvZGUnIGluIHRoZSBmcmFtZQorCisgICAgICAgICAgICAn
dmFycycgYXJlIG9wdGlvbmE7IGFkZGl0aW9uYWwgbG9jYWwgdmFyaWFibGVzCisgICAgICAgICIi
IgorICAgICAgICBmX2xvY2FscyA9IHNlbGYuZl9sb2NhbHMuY29weSgpCisgICAgICAgIGZfbG9j
YWxzLnVwZGF0ZSh2YXJzKQorICAgICAgICBweS5idWlsdGluLmV4ZWNfKGNvZGUsIHNlbGYuZl9n
bG9iYWxzLCBmX2xvY2FscyApCisKKyAgICBkZWYgcmVwcihzZWxmLCBvYmplY3QpOgorICAgICAg
ICAiIiIgcmV0dXJuIGEgJ3NhZmUnIChub24tcmVjdXJzaXZlLCBvbmUtbGluZSkgc3RyaW5nIHJl
cHIgZm9yICdvYmplY3QnCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gcHkuaW8uc2FmZXJl
cHIob2JqZWN0KQorCisgICAgZGVmIGlzX3RydWUoc2VsZiwgb2JqZWN0KToKKyAgICAgICAgcmV0
dXJuIG9iamVjdAorCisgICAgZGVmIGdldGFyZ3Moc2VsZiwgdmFyPUZhbHNlKToKKyAgICAgICAg
IiIiIHJldHVybiBhIGxpc3Qgb2YgdHVwbGVzIChuYW1lLCB2YWx1ZSkgZm9yIGFsbCBhcmd1bWVu
dHMKKworICAgICAgICAgICAgaWYgJ3ZhcicgaXMgc2V0IFRydWUgYWxzbyBpbmNsdWRlIHRoZSB2
YXJpYWJsZSBhbmQga2V5d29yZAorICAgICAgICAgICAgYXJndW1lbnRzIHdoZW4gcHJlc2VudAor
ICAgICAgICAiIiIKKyAgICAgICAgcmV0dmFsID0gW10KKyAgICAgICAgZm9yIGFyZyBpbiBzZWxm
LmNvZGUuZ2V0YXJncyh2YXIpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJl
dHZhbC5hcHBlbmQoKGFyZywgc2VsZi5mX2xvY2Fsc1thcmddKSkKKyAgICAgICAgICAgIGV4Y2Vw
dCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzICAgICAjIHRoaXMgY2FuIG9jY3VyIHdo
ZW4gdXNpbmcgUHN5Y28KKyAgICAgICAgcmV0dXJuIHJldHZhbAorCitjbGFzcyBUcmFjZWJhY2tF
bnRyeShvYmplY3QpOgorICAgICIiIiBhIHNpbmdsZSBlbnRyeSBpbiBhIHRyYWNlYmFjayAiIiIK
KworICAgIF9yZXByX3N0eWxlID0gTm9uZQorICAgIGV4cHJpbmZvID0gTm9uZQorCisgICAgZGVm
IF9faW5pdF9fKHNlbGYsIHJhd2VudHJ5KToKKyAgICAgICAgc2VsZi5fcmF3ZW50cnkgPSByYXdl
bnRyeQorICAgICAgICBzZWxmLmxpbmVubyA9IHJhd2VudHJ5LnRiX2xpbmVubyAtIDEKKworICAg
IGRlZiBzZXRfcmVwcl9zdHlsZShzZWxmLCBtb2RlKToKKyAgICAgICAgYXNzZXJ0IG1vZGUgaW4g
KCJzaG9ydCIsICJsb25nIikKKyAgICAgICAgc2VsZi5fcmVwcl9zdHlsZSA9IG1vZGUKKworICAg
IEBwcm9wZXJ0eQorICAgIGRlZiBmcmFtZShzZWxmKToKKyAgICAgICAgaW1wb3J0IF9weXRlc3Qu
X2NvZGUKKyAgICAgICAgcmV0dXJuIF9weXRlc3QuX2NvZGUuRnJhbWUoc2VsZi5fcmF3ZW50cnku
dGJfZnJhbWUpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcmVsbGluZShzZWxmKToKKyAgICAg
ICAgcmV0dXJuIHNlbGYubGluZW5vIC0gc2VsZi5mcmFtZS5jb2RlLmZpcnN0bGluZW5vCisKKyAg
ICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiPFRyYWNlYmFja0VudHJ5ICVz
OiVkPiIgJShzZWxmLmZyYW1lLmNvZGUucGF0aCwgc2VsZi5saW5lbm8rMSkKKworICAgIEBwcm9w
ZXJ0eQorICAgIGRlZiBzdGF0ZW1lbnQoc2VsZik6CisgICAgICAgICIiIiBfcHl0ZXN0Ll9jb2Rl
LlNvdXJjZSBvYmplY3QgZm9yIHRoZSBjdXJyZW50IHN0YXRlbWVudCAiIiIKKyAgICAgICAgc291
cmNlID0gc2VsZi5mcmFtZS5jb2RlLmZ1bGxzb3VyY2UKKyAgICAgICAgcmV0dXJuIHNvdXJjZS5n
ZXRzdGF0ZW1lbnQoc2VsZi5saW5lbm8pCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcGF0aChz
ZWxmKToKKyAgICAgICAgIiIiIHBhdGggdG8gdGhlIHNvdXJjZSBjb2RlICIiIgorICAgICAgICBy
ZXR1cm4gc2VsZi5mcmFtZS5jb2RlLnBhdGgKKworICAgIGRlZiBnZXRsb2NhbHMoc2VsZik6Cisg
ICAgICAgIHJldHVybiBzZWxmLmZyYW1lLmZfbG9jYWxzCisgICAgbG9jYWxzID0gcHJvcGVydHko
Z2V0bG9jYWxzLCBOb25lLCBOb25lLCAibG9jYWxzIG9mIHVuZGVybGF5aW5nIGZyYW1lIikKKwor
ICAgIGRlZiByZWludGVycHJldChzZWxmKToKKyAgICAgICAgIiIiUmVpbnRlcnByZXQgdGhlIGZh
aWxpbmcgc3RhdGVtZW50IGFuZCByZXR1cm5zIGEgZGV0YWlsZWQgaW5mb3JtYXRpb24KKyAgICAg
ICAgICAgYWJvdXQgd2hhdCBvcGVyYXRpb25zIGFyZSBwZXJmb3JtZWQuIiIiCisgICAgICAgIGZy
b20gX3B5dGVzdC5hc3NlcnRpb24ucmVpbnRlcnByZXQgaW1wb3J0IHJlaW50ZXJwcmV0CisgICAg
ICAgIGlmIHNlbGYuZXhwcmluZm8gaXMgTm9uZToKKyAgICAgICAgICAgIHNvdXJjZSA9IHB5LmJ1
aWx0aW4uX3RvdGV4dChzZWxmLnN0YXRlbWVudCkuc3RyaXAoKQorICAgICAgICAgICAgeCA9IHJl
aW50ZXJwcmV0KHNvdXJjZSwgc2VsZi5mcmFtZSwgc2hvdWxkX2ZhaWw9VHJ1ZSkKKyAgICAgICAg
ICAgIGlmIG5vdCBweS5idWlsdGluLl9pc3RleHQoeCk6CisgICAgICAgICAgICAgICAgcmFpc2Ug
VHlwZUVycm9yKCJpbnRlcnByZXQgcmV0dXJuZWQgbm9uLXN0cmluZyAlciIgJSAoeCwpKQorICAg
ICAgICAgICAgc2VsZi5leHByaW5mbyA9IHgKKyAgICAgICAgcmV0dXJuIHNlbGYuZXhwcmluZm8K
KworICAgIGRlZiBnZXRmaXJzdGxpbmVzb3VyY2Uoc2VsZik6CisgICAgICAgICMgb24gSnl0aG9u
IHRoaXMgZmlyc3RsaW5lbm8gY2FuIGJlIC0xIGFwcGFyZW50bHkKKyAgICAgICAgcmV0dXJuIG1h
eChzZWxmLmZyYW1lLmNvZGUuZmlyc3RsaW5lbm8sIDApCisKKyAgICBkZWYgZ2V0c291cmNlKHNl
bGYsIGFzdGNhY2hlPU5vbmUpOgorICAgICAgICAiIiIgcmV0dXJuIGZhaWxpbmcgc291cmNlIGNv
ZGUuICIiIgorICAgICAgICAjIHdlIHVzZSB0aGUgcGFzc2VkIGluIGFzdGNhY2hlIHRvIG5vdCBy
ZXBhcnNlIGFzdHRyZWVzCisgICAgICAgICMgd2l0aGluIGV4Y2VwdGlvbiBpbmZvIHByaW50aW5n
CisgICAgICAgIGZyb20gX3B5dGVzdC5fY29kZS5zb3VyY2UgaW1wb3J0IGdldHN0YXRlbWVudHJh
bmdlX2FzdAorICAgICAgICBzb3VyY2UgPSBzZWxmLmZyYW1lLmNvZGUuZnVsbHNvdXJjZQorICAg
ICAgICBpZiBzb3VyY2UgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAg
IGtleSA9IGFzdG5vZGUgPSBOb25lCisgICAgICAgIGlmIGFzdGNhY2hlIGlzIG5vdCBOb25lOgor
ICAgICAgICAgICAga2V5ID0gc2VsZi5mcmFtZS5jb2RlLnBhdGgKKyAgICAgICAgICAgIGlmIGtl
eSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBhc3Rub2RlID0gYXN0Y2FjaGUuZ2V0KGtl
eSwgTm9uZSkKKyAgICAgICAgc3RhcnQgPSBzZWxmLmdldGZpcnN0bGluZXNvdXJjZSgpCisgICAg
ICAgIHRyeToKKyAgICAgICAgICAgIGFzdG5vZGUsIF8sIGVuZCA9IGdldHN0YXRlbWVudHJhbmdl
X2FzdChzZWxmLmxpbmVubywgc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFzdG5vZGU9YXN0bm9kZSkKKyAgICAgICAgZXhjZXB0IFN5
bnRheEVycm9yOgorICAgICAgICAgICAgZW5kID0gc2VsZi5saW5lbm8gKyAxCisgICAgICAgIGVs
c2U6CisgICAgICAgICAgICBpZiBrZXkgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgYXN0
Y2FjaGVba2V5XSA9IGFzdG5vZGUKKyAgICAgICAgcmV0dXJuIHNvdXJjZVtzdGFydDplbmRdCisK
KyAgICBzb3VyY2UgPSBwcm9wZXJ0eShnZXRzb3VyY2UpCisKKyAgICBkZWYgaXNoaWRkZW4oc2Vs
Zik6CisgICAgICAgICIiIiByZXR1cm4gVHJ1ZSBpZiB0aGUgY3VycmVudCBmcmFtZSBoYXMgYSB2
YXIgX190cmFjZWJhY2toaWRlX18KKyAgICAgICAgICAgIHJlc29sdmluZyB0byBUcnVlCisKKyAg
ICAgICAgICAgIG1vc3RseSBmb3IgaW50ZXJuYWwgdXNlCisgICAgICAgICIiIgorICAgICAgICB0
cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5mcmFtZS5mX2xvY2Fsc1snX190cmFjZWJhY2to
aWRlX18nXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICB0cnk6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHNlbGYuZnJhbWUuZl9nbG9iYWxzWydfX3RyYWNlYmFja2hpZGVf
XyddCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgcmV0dXJu
IEZhbHNlCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgZm4gPSBzdHIoc2VsZi5wYXRoKQorICAgICAgICBleGNlcHQgcHkuZXJyb3IuRXJyb3I6Cisg
ICAgICAgICAgICBmbiA9ICc/Pz8nCisgICAgICAgIG5hbWUgPSBzZWxmLmZyYW1lLmNvZGUubmFt
ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBsaW5lID0gc3RyKHNlbGYuc3RhdGVtZW50KS5s
c3RyaXAoKQorICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICBy
YWlzZQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBsaW5lID0gIj8/PyIKKyAgICAgICAg
cmV0dXJuICIgIEZpbGUgJXI6JWQgaW4gJXNcbiAgJXNcbiIgJShmbiwgc2VsZi5saW5lbm8rMSwg
bmFtZSwgbGluZSkKKworICAgIGRlZiBuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5m
cmFtZS5jb2RlLnJhdy5jb19uYW1lCisgICAgbmFtZSA9IHByb3BlcnR5KG5hbWUsIE5vbmUsIE5v
bmUsICJjb19uYW1lIG9mIHVuZGVybGF5aW5nIGNvZGUiKQorCitjbGFzcyBUcmFjZWJhY2sobGlz
dCk6CisgICAgIiIiIFRyYWNlYmFjayBvYmplY3RzIGVuY2Fwc3VsYXRlIGFuZCBvZmZlciBoaWdo
ZXIgbGV2ZWwKKyAgICAgICAgYWNjZXNzIHRvIFRyYWNlYmFjayBlbnRyaWVzLgorICAgICIiIgor
ICAgIEVudHJ5ID0gVHJhY2ViYWNrRW50cnkKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGIpOgor
ICAgICAgICAiIiIgaW5pdGlhbGl6ZSBmcm9tIGdpdmVuIHB5dGhvbiB0cmFjZWJhY2sgb2JqZWN0
LiAiIiIKKyAgICAgICAgaWYgaGFzYXR0cih0YiwgJ3RiX25leHQnKToKKyAgICAgICAgICAgIGRl
ZiBmKGN1cik6CisgICAgICAgICAgICAgICAgd2hpbGUgY3VyIGlzIG5vdCBOb25lOgorICAgICAg
ICAgICAgICAgICAgICB5aWVsZCBzZWxmLkVudHJ5KGN1cikKKyAgICAgICAgICAgICAgICAgICAg
Y3VyID0gY3VyLnRiX25leHQKKyAgICAgICAgICAgIGxpc3QuX19pbml0X18oc2VsZiwgZih0Yikp
CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsaXN0Ll9faW5pdF9fKHNlbGYsIHRiKQorCisg
ICAgZGVmIGN1dChzZWxmLCBwYXRoPU5vbmUsIGxpbmVubz1Ob25lLCBmaXJzdGxpbmVubz1Ob25l
LCBleGNsdWRlcGF0aD1Ob25lKToKKyAgICAgICAgIiIiIHJldHVybiBhIFRyYWNlYmFjayBpbnN0
YW5jZSB3cmFwcGluZyBwYXJ0IG9mIHRoaXMgVHJhY2ViYWNrCisKKyAgICAgICAgICAgIGJ5IHBy
b3ZkaW5nIGFueSBjb21iaW5hdGlvbiBvZiBwYXRoLCBsaW5lbm8gYW5kIGZpcnN0bGluZW5vLCB0
aGUKKyAgICAgICAgICAgIGZpcnN0IGZyYW1lIHRvIHN0YXJ0IHRoZSB0by1iZS1yZXR1cm5lZCB0
cmFjZWJhY2sgaXMgZGV0ZXJtaW5lZAorCisgICAgICAgICAgICB0aGlzIGFsbG93cyBjdXR0aW5n
IHRoZSBmaXJzdCBwYXJ0IG9mIGEgVHJhY2ViYWNrIGluc3RhbmNlIGUuZy4KKyAgICAgICAgICAg
IGZvciBmb3JtYXR0aW5nIHJlYXNvbnMgKHJlbW92aW5nIHNvbWUgdW5pbnRlcmVzdGluZyBiaXRz
IHRoYXQgZGVhbAorICAgICAgICAgICAgd2l0aCBoYW5kbGluZyBvZiB0aGUgZXhjZXB0aW9uL3Ry
YWNlYmFjaykKKyAgICAgICAgIiIiCisgICAgICAgIGZvciB4IGluIHNlbGY6CisgICAgICAgICAg
ICBjb2RlID0geC5mcmFtZS5jb2RlCisgICAgICAgICAgICBjb2RlcGF0aCA9IGNvZGUucGF0aAor
ICAgICAgICAgICAgaWYgKChwYXRoIGlzIE5vbmUgb3IgY29kZXBhdGggPT0gcGF0aCkgYW5kCisg
ICAgICAgICAgICAgICAgKGV4Y2x1ZGVwYXRoIGlzIE5vbmUgb3Igbm90IGhhc2F0dHIoY29kZXBh
dGgsICdyZWx0bycpIG9yCisgICAgICAgICAgICAgICAgIG5vdCBjb2RlcGF0aC5yZWx0byhleGNs
dWRlcGF0aCkpIGFuZAorICAgICAgICAgICAgICAgIChsaW5lbm8gaXMgTm9uZSBvciB4LmxpbmVu
byA9PSBsaW5lbm8pIGFuZAorICAgICAgICAgICAgICAgIChmaXJzdGxpbmVubyBpcyBOb25lIG9y
IHguZnJhbWUuY29kZS5maXJzdGxpbmVubyA9PSBmaXJzdGxpbmVubykpOgorICAgICAgICAgICAg
ICAgIHJldHVybiBUcmFjZWJhY2soeC5fcmF3ZW50cnkpCisgICAgICAgIHJldHVybiBzZWxmCisK
KyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgdmFsID0gc3VwZXIoVHJh
Y2ViYWNrLCBzZWxmKS5fX2dldGl0ZW1fXyhrZXkpCisgICAgICAgIGlmIGlzaW5zdGFuY2Uoa2V5
LCB0eXBlKHNsaWNlKDApKSk6CisgICAgICAgICAgICB2YWwgPSBzZWxmLl9fY2xhc3NfXyh2YWwp
CisgICAgICAgIHJldHVybiB2YWwKKworICAgIGRlZiBmaWx0ZXIoc2VsZiwgZm49bGFtYmRhIHg6
IG5vdCB4LmlzaGlkZGVuKCkpOgorICAgICAgICAiIiIgcmV0dXJuIGEgVHJhY2ViYWNrIGluc3Rh
bmNlIHdpdGggY2VydGFpbiBpdGVtcyByZW1vdmVkCisKKyAgICAgICAgICAgIGZuIGlzIGEgZnVu
Y3Rpb24gdGhhdCBnZXRzIGEgc2luZ2xlIGFyZ3VtZW50LCBhIFRyYWNlYmFja0l0ZW0KKyAgICAg
ICAgICAgIGluc3RhbmNlLCBhbmQgc2hvdWxkIHJldHVybiBUcnVlIHdoZW4gdGhlIGl0ZW0gc2hv
dWxkIGJlIGFkZGVkCisgICAgICAgICAgICB0byB0aGUgVHJhY2ViYWNrLCBGYWxzZSB3aGVuIG5v
dAorCisgICAgICAgICAgICBieSBkZWZhdWx0IHRoaXMgcmVtb3ZlcyBhbGwgdGhlIFRyYWNlYmFj
a0l0ZW1zIHdoaWNoIGFyZSBoaWRkZW4KKyAgICAgICAgICAgIChzZWUgaXNoaWRkZW4oKSBhYm92
ZSkKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBUcmFjZWJhY2soZmlsdGVyKGZuLCBzZWxm
KSkKKworICAgIGRlZiBnZXRjcmFzaGVudHJ5KHNlbGYpOgorICAgICAgICAiIiIgcmV0dXJuIGxh
c3Qgbm9uLWhpZGRlbiB0cmFjZWJhY2sgZW50cnkgdGhhdCBsZWFkCisgICAgICAgIHRvIHRoZSBl
eGNlcHRpb24gb2YgYSB0cmFjZWJhY2suCisgICAgICAgICIiIgorICAgICAgICBmb3IgaSBpbiBy
YW5nZSgtMSwgLWxlbihzZWxmKS0xLCAtMSk6CisgICAgICAgICAgICBlbnRyeSA9IHNlbGZbaV0K
KyAgICAgICAgICAgIGlmIG5vdCBlbnRyeS5pc2hpZGRlbigpOgorICAgICAgICAgICAgICAgIHJl
dHVybiBlbnRyeQorICAgICAgICByZXR1cm4gc2VsZlstMV0KKworICAgIGRlZiByZWN1cnNpb25p
bmRleChzZWxmKToKKyAgICAgICAgIiIiIHJldHVybiB0aGUgaW5kZXggb2YgdGhlIGZyYW1lL1Ry
YWNlYmFja0l0ZW0gd2hlcmUgcmVjdXJzaW9uCisgICAgICAgICAgICBvcmlnaW5hdGVzIGlmIGFw
cHJvcHJpYXRlLCBOb25lIGlmIG5vIHJlY3Vyc2lvbiBvY2N1cnJlZAorICAgICAgICAiIiIKKyAg
ICAgICAgY2FjaGUgPSB7fQorICAgICAgICBmb3IgaSwgZW50cnkgaW4gZW51bWVyYXRlKHNlbGYp
OgorICAgICAgICAgICAgIyBpZCBmb3IgdGhlIGNvZGUucmF3IGlzIG5lZWRlZCB0byB3b3JrIGFy
b3VuZAorICAgICAgICAgICAgIyB0aGUgc3RyYW5nZSBtZXRhcHJvZ3JhbW1pbmcgaW4gdGhlIGRl
Y29yYXRvciBsaWIgZnJvbSBweXBpCisgICAgICAgICAgICAjIHdoaWNoIGdlbmVyYXRlcyBjb2Rl
IG9iamVjdHMgdGhhdCBoYXZlIGhhc2gvdmFsdWUgZXF1YWxpdHkKKyAgICAgICAgICAgICNYWFgg
bmVlZHMgYSB0ZXN0CisgICAgICAgICAgICBrZXkgPSBlbnRyeS5mcmFtZS5jb2RlLnBhdGgsIGlk
KGVudHJ5LmZyYW1lLmNvZGUucmF3KSwgZW50cnkubGluZW5vCisgICAgICAgICAgICAjcHJpbnQg
ImNoZWNraW5nIGZvciByZWN1cnNpb24gYXQiLCBrZXkKKyAgICAgICAgICAgIGwgPSBjYWNoZS5z
ZXRkZWZhdWx0KGtleSwgW10pCisgICAgICAgICAgICBpZiBsOgorICAgICAgICAgICAgICAgIGYg
PSBlbnRyeS5mcmFtZQorICAgICAgICAgICAgICAgIGxvYyA9IGYuZl9sb2NhbHMKKyAgICAgICAg
ICAgICAgICBmb3Igb3RoZXJsb2MgaW4gbDoKKyAgICAgICAgICAgICAgICAgICAgaWYgZi5pc190
cnVlKGYuZXZhbChjb19lcXVhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVjdXJzaW9u
Y2FjaGVfbG9jYWxzXzE9bG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgX19yZWN1cnNpb25j
YWNoZV9sb2NhbHNfMj1vdGhlcmxvYykpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGkKKyAgICAgICAgICAgIGwuYXBwZW5kKGVudHJ5LmZyYW1lLmZfbG9jYWxzKQorICAgICAgICBy
ZXR1cm4gTm9uZQorCitjb19lcXVhbCA9IGNvbXBpbGUoJ19fcmVjdXJzaW9uY2FjaGVfbG9jYWxz
XzEgPT0gX19yZWN1cnNpb25jYWNoZV9sb2NhbHNfMicsCisgICAgICAgICAgICAgICAgICAgJz8n
LCAnZXZhbCcpCisKK2NsYXNzIEV4Y2VwdGlvbkluZm8ob2JqZWN0KToKKyAgICAiIiIgd3JhcHMg
c3lzLmV4Y19pbmZvKCkgb2JqZWN0cyBhbmQgb2ZmZXJzCisgICAgICAgIGhlbHAgZm9yIG5hdmln
YXRpbmcgdGhlIHRyYWNlYmFjay4KKyAgICAiIiIKKyAgICBfc3RyaXB0ZXh0ID0gJycKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgdHVwPU5vbmUsIGV4cHJpbmZvPU5vbmUpOgorICAgICAgICBpbXBv
cnQgX3B5dGVzdC5fY29kZQorICAgICAgICBpZiB0dXAgaXMgTm9uZToKKyAgICAgICAgICAgIHR1
cCA9IHN5cy5leGNfaW5mbygpCisgICAgICAgICAgICBpZiBleHByaW5mbyBpcyBOb25lIGFuZCBp
c2luc3RhbmNlKHR1cFsxXSwgQXNzZXJ0aW9uRXJyb3IpOgorICAgICAgICAgICAgICAgIGV4cHJp
bmZvID0gZ2V0YXR0cih0dXBbMV0sICdtc2cnLCBOb25lKQorICAgICAgICAgICAgICAgIGlmIGV4
cHJpbmZvIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGV4cHJpbmZvID0gc3RyKHR1cFsx
XSkKKyAgICAgICAgICAgICAgICBpZiBleHByaW5mbyBhbmQgZXhwcmluZm8uc3RhcnRzd2l0aCgn
YXNzZXJ0ICcpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9zdHJpcHRleHQgPSAnQXNzZXJ0
aW9uRXJyb3I6ICcKKyAgICAgICAgc2VsZi5fZXhjaW5mbyA9IHR1cAorICAgICAgICAjOiB0aGUg
ZXhjZXB0aW9uIGNsYXNzCisgICAgICAgIHNlbGYudHlwZSA9IHR1cFswXQorICAgICAgICAjOiB0
aGUgZXhjZXB0aW9uIGluc3RhbmNlCisgICAgICAgIHNlbGYudmFsdWUgPSB0dXBbMV0KKyAgICAg
ICAgIzogdGhlIGV4Y2VwdGlvbiByYXcgdHJhY2ViYWNrCisgICAgICAgIHNlbGYudGIgPSB0dXBb
Ml0KKyAgICAgICAgIzogdGhlIGV4Y2VwdGlvbiB0eXBlIG5hbWUKKyAgICAgICAgc2VsZi50eXBl
bmFtZSA9IHNlbGYudHlwZS5fX25hbWVfXworICAgICAgICAjOiB0aGUgZXhjZXB0aW9uIHRyYWNl
YmFjayAoX3B5dGVzdC5fY29kZS5UcmFjZWJhY2sgaW5zdGFuY2UpCisgICAgICAgIHNlbGYudHJh
Y2ViYWNrID0gX3B5dGVzdC5fY29kZS5UcmFjZWJhY2soc2VsZi50YikKKworICAgIGRlZiBfX3Jl
cHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICI8RXhjZXB0aW9uSW5mbyAlcyB0Ymxlbj0lZD4i
ICUgKHNlbGYudHlwZW5hbWUsIGxlbihzZWxmLnRyYWNlYmFjaykpCisKKyAgICBkZWYgZXhjb25s
eShzZWxmLCB0cnlzaG9ydD1GYWxzZSk6CisgICAgICAgICIiIiByZXR1cm4gdGhlIGV4Y2VwdGlv
biBhcyBhIHN0cmluZworCisgICAgICAgICAgICB3aGVuICd0cnlzaG9ydCcgcmVzb2x2ZXMgdG8g
VHJ1ZSwgYW5kIHRoZSBleGNlcHRpb24gaXMgYQorICAgICAgICAgICAgX3B5dGVzdC5fY29kZS5f
QXNzZXJ0aW9uRXJyb3IsIG9ubHkgdGhlIGFjdHVhbCBleGNlcHRpb24gcGFydCBvZgorICAgICAg
ICAgICAgdGhlIGV4Y2VwdGlvbiByZXByZXNlbnRhdGlvbiBpcyByZXR1cm5lZCAoc28gJ0Fzc2Vy
dGlvbkVycm9yOiAnIGlzCisgICAgICAgICAgICByZW1vdmVkIGZyb20gdGhlIGJlZ2lubmluZykK
KyAgICAgICAgIiIiCisgICAgICAgIGxpbmVzID0gZm9ybWF0X2V4Y2VwdGlvbl9vbmx5KHNlbGYu
dHlwZSwgc2VsZi52YWx1ZSkKKyAgICAgICAgdGV4dCA9ICcnLmpvaW4obGluZXMpCisgICAgICAg
IHRleHQgPSB0ZXh0LnJzdHJpcCgpCisgICAgICAgIGlmIHRyeXNob3J0OgorICAgICAgICAgICAg
aWYgdGV4dC5zdGFydHN3aXRoKHNlbGYuX3N0cmlwdGV4dCk6CisgICAgICAgICAgICAgICAgdGV4
dCA9IHRleHRbbGVuKHNlbGYuX3N0cmlwdGV4dCk6XQorICAgICAgICByZXR1cm4gdGV4dAorCisg
ICAgZGVmIGVycmlzaW5zdGFuY2Uoc2VsZiwgZXhjKToKKyAgICAgICAgIiIiIHJldHVybiBUcnVl
IGlmIHRoZSBleGNlcHRpb24gaXMgYW4gaW5zdGFuY2Ugb2YgZXhjICIiIgorICAgICAgICByZXR1
cm4gaXNpbnN0YW5jZShzZWxmLnZhbHVlLCBleGMpCisKKyAgICBkZWYgX2dldHJlcHJjcmFzaChz
ZWxmKToKKyAgICAgICAgZXhjb25seSA9IHNlbGYuZXhjb25seSh0cnlzaG9ydD1UcnVlKQorICAg
ICAgICBlbnRyeSA9IHNlbGYudHJhY2ViYWNrLmdldGNyYXNoZW50cnkoKQorICAgICAgICBwYXRo
LCBsaW5lbm8gPSBlbnRyeS5mcmFtZS5jb2RlLnJhdy5jb19maWxlbmFtZSwgZW50cnkubGluZW5v
CisgICAgICAgIHJldHVybiBSZXByRmlsZUxvY2F0aW9uKHBhdGgsIGxpbmVubysxLCBleGNvbmx5
KQorCisgICAgZGVmIGdldHJlcHIoc2VsZiwgc2hvd2xvY2Fscz1GYWxzZSwgc3R5bGU9Imxvbmci
LAorICAgICAgICAgICAgYWJzcGF0aD1GYWxzZSwgdGJmaWx0ZXI9VHJ1ZSwgZnVuY2FyZ3M9RmFs
c2UpOgorICAgICAgICAiIiIgcmV0dXJuIHN0cigpYWJsZSByZXByZXNlbnRhdGlvbiBvZiB0aGlz
IGV4Y2VwdGlvbiBpbmZvLgorICAgICAgICAgICAgc2hvd2xvY2Fsczogc2hvdyBsb2NhbHMgcGVy
IHRyYWNlYmFjayBlbnRyeQorICAgICAgICAgICAgc3R5bGU6IGxvbmd8c2hvcnR8bm98bmF0aXZl
IHRyYWNlYmFjayBzdHlsZQorICAgICAgICAgICAgdGJmaWx0ZXI6IGhpZGUgZW50cmllcyAod2hl
cmUgX190cmFjZWJhY2toaWRlX18gaXMgdHJ1ZSkKKworICAgICAgICAgICAgaW4gY2FzZSBvZiBz
dHlsZT09bmF0aXZlLCB0YmZpbHRlciBhbmQgc2hvd2xvY2FscyBpcyBpZ25vcmVkLgorICAgICAg
ICAiIiIKKyAgICAgICAgaWYgc3R5bGUgPT0gJ25hdGl2ZSc6CisgICAgICAgICAgICByZXR1cm4g
UmVwckV4Y2VwdGlvbkluZm8oUmVwclRyYWNlYmFja05hdGl2ZSgKKyAgICAgICAgICAgICAgICBw
eS5zdGQudHJhY2ViYWNrLmZvcm1hdF9leGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgIHNl
bGYudHlwZSwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi52YWx1ZSwKKyAgICAgICAgICAgICAg
ICAgICAgc2VsZi50cmFjZWJhY2tbMF0uX3Jhd2VudHJ5LAorICAgICAgICAgICAgICAgICkpLCBz
ZWxmLl9nZXRyZXByY3Jhc2goKSkKKworICAgICAgICBmbXQgPSBGb3JtYXR0ZWRFeGNpbmZvKHNo
b3dsb2NhbHM9c2hvd2xvY2Fscywgc3R5bGU9c3R5bGUsCisgICAgICAgICAgICBhYnNwYXRoPWFi
c3BhdGgsIHRiZmlsdGVyPXRiZmlsdGVyLCBmdW5jYXJncz1mdW5jYXJncykKKyAgICAgICAgcmV0
dXJuIGZtdC5yZXByX2V4Y2luZm8oc2VsZikKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAg
ICAgICBlbnRyeSA9IHNlbGYudHJhY2ViYWNrWy0xXQorICAgICAgICBsb2MgPSBSZXByRmlsZUxv
Y2F0aW9uKGVudHJ5LnBhdGgsIGVudHJ5LmxpbmVubyArIDEsIHNlbGYuZXhjb25seSgpKQorICAg
ICAgICByZXR1cm4gc3RyKGxvYykKKworICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKKyAgICAg
ICAgZW50cnkgPSBzZWxmLnRyYWNlYmFja1stMV0KKyAgICAgICAgbG9jID0gUmVwckZpbGVMb2Nh
dGlvbihlbnRyeS5wYXRoLCBlbnRyeS5saW5lbm8gKyAxLCBzZWxmLmV4Y29ubHkoKSkKKyAgICAg
ICAgcmV0dXJuIHVuaWNvZGUobG9jKQorCisKK2NsYXNzIEZvcm1hdHRlZEV4Y2luZm8ob2JqZWN0
KToKKyAgICAiIiIgcHJlc2VudGluZyBpbmZvcm1hdGlvbiBhYm91dCBmYWlsaW5nIEZ1bmN0aW9u
cyBhbmQgR2VuZXJhdG9ycy4gIiIiCisgICAgIyBmb3IgdHJhY2ViYWNrIGVudHJpZXMKKyAgICBm
bG93X21hcmtlciA9ICI+IgorICAgIGZhaWxfbWFya2VyID0gIkUiCisKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgc2hvd2xvY2Fscz1GYWxzZSwgc3R5bGU9ImxvbmciLCBhYnNwYXRoPVRydWUsIHRi
ZmlsdGVyPVRydWUsIGZ1bmNhcmdzPUZhbHNlKToKKyAgICAgICAgc2VsZi5zaG93bG9jYWxzID0g
c2hvd2xvY2FscworICAgICAgICBzZWxmLnN0eWxlID0gc3R5bGUKKyAgICAgICAgc2VsZi50YmZp
bHRlciA9IHRiZmlsdGVyCisgICAgICAgIHNlbGYuZnVuY2FyZ3MgPSBmdW5jYXJncworICAgICAg
ICBzZWxmLmFic3BhdGggPSBhYnNwYXRoCisgICAgICAgIHNlbGYuYXN0Y2FjaGUgPSB7fQorCisg
ICAgZGVmIF9nZXRpbmRlbnQoc2VsZiwgc291cmNlKToKKyAgICAgICAgIyBmaWd1cmUgb3V0IGlu
ZGVudCBmb3IgZ2l2ZW4gc291cmNlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHMgPSBzdHIo
c291cmNlLmdldHN0YXRlbWVudChsZW4oc291cmNlKS0xKSkKKyAgICAgICAgZXhjZXB0IEtleWJv
YXJkSW50ZXJydXB0OgorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZXhjZXB0OgorICAgICAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHMgPSBzdHIoc291cmNlWy0xXSkKKyAgICAgICAg
ICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgICAgICByYWlzZQorICAg
ICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIHJldHVy
biA0ICsgKGxlbihzKSAtIGxlbihzLmxzdHJpcCgpKSkKKworICAgIGRlZiBfZ2V0ZW50cnlzb3Vy
Y2Uoc2VsZiwgZW50cnkpOgorICAgICAgICBzb3VyY2UgPSBlbnRyeS5nZXRzb3VyY2Uoc2VsZi5h
c3RjYWNoZSkKKyAgICAgICAgaWYgc291cmNlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc291
cmNlID0gc291cmNlLmRlaW5kZW50KCkKKyAgICAgICAgcmV0dXJuIHNvdXJjZQorCisgICAgZGVm
IF9zYWZlcmVwcihzZWxmLCBvYmopOgorICAgICAgICByZXR1cm4gcHkuaW8uc2FmZXJlcHIob2Jq
KQorCisgICAgZGVmIHJlcHJfYXJncyhzZWxmLCBlbnRyeSk6CisgICAgICAgIGlmIHNlbGYuZnVu
Y2FyZ3M6CisgICAgICAgICAgICBhcmdzID0gW10KKyAgICAgICAgICAgIGZvciBhcmduYW1lLCBh
cmd2YWx1ZSBpbiBlbnRyeS5mcmFtZS5nZXRhcmdzKHZhcj1UcnVlKToKKyAgICAgICAgICAgICAg
ICBhcmdzLmFwcGVuZCgoYXJnbmFtZSwgc2VsZi5fc2FmZXJlcHIoYXJndmFsdWUpKSkKKyAgICAg
ICAgICAgIHJldHVybiBSZXByRnVuY0FyZ3MoYXJncykKKworICAgIGRlZiBnZXRfc291cmNlKHNl
bGYsIHNvdXJjZSwgbGluZV9pbmRleD0tMSwgZXhjaW5mbz1Ob25lLCBzaG9ydD1GYWxzZSk6Cisg
ICAgICAgICIiIiByZXR1cm4gZm9ybWF0dGVkIGFuZCBtYXJrZWQgdXAgc291cmNlIGxpbmVzLiAi
IiIKKyAgICAgICAgaW1wb3J0IF9weXRlc3QuX2NvZGUKKyAgICAgICAgbGluZXMgPSBbXQorICAg
ICAgICBpZiBzb3VyY2UgaXMgTm9uZSBvciBsaW5lX2luZGV4ID49IGxlbihzb3VyY2UubGluZXMp
OgorICAgICAgICAgICAgc291cmNlID0gX3B5dGVzdC5fY29kZS5Tb3VyY2UoIj8/PyIpCisgICAg
ICAgICAgICBsaW5lX2luZGV4ID0gMAorICAgICAgICBpZiBsaW5lX2luZGV4IDwgMDoKKyAgICAg
ICAgICAgIGxpbmVfaW5kZXggKz0gbGVuKHNvdXJjZSkKKyAgICAgICAgc3BhY2VfcHJlZml4ID0g
IiAgICAiCisgICAgICAgIGlmIHNob3J0OgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNwYWNl
X3ByZWZpeCArIHNvdXJjZS5saW5lc1tsaW5lX2luZGV4XS5zdHJpcCgpKQorICAgICAgICBlbHNl
OgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gc291cmNlLmxpbmVzWzpsaW5lX2luZGV4XToKKyAg
ICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc3BhY2VfcHJlZml4ICsgbGluZSkKKyAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZChzZWxmLmZsb3dfbWFya2VyICsgIiAgICIgKyBzb3VyY2UubGluZXNb
bGluZV9pbmRleF0pCisgICAgICAgICAgICBmb3IgbGluZSBpbiBzb3VyY2UubGluZXNbbGluZV9p
bmRleCsxOl06CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNwYWNlX3ByZWZpeCArIGxp
bmUpCisgICAgICAgIGlmIGV4Y2luZm8gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpbmRlbnQg
PSA0IGlmIHNob3J0IGVsc2Ugc2VsZi5fZ2V0aW5kZW50KHNvdXJjZSkKKyAgICAgICAgICAgIGxp
bmVzLmV4dGVuZChzZWxmLmdldF9leGNvbmx5KGV4Y2luZm8sIGluZGVudD1pbmRlbnQsIG1hcmth
bGw9VHJ1ZSkpCisgICAgICAgIHJldHVybiBsaW5lcworCisgICAgZGVmIGdldF9leGNvbmx5KHNl
bGYsIGV4Y2luZm8sIGluZGVudD00LCBtYXJrYWxsPUZhbHNlKToKKyAgICAgICAgbGluZXMgPSBb
XQorICAgICAgICBpbmRlbnQgPSAiICIgKiBpbmRlbnQKKyAgICAgICAgIyBnZXQgdGhlIHJlYWwg
ZXhjZXB0aW9uIGluZm9ybWF0aW9uIG91dAorICAgICAgICBleGxpbmVzID0gZXhjaW5mby5leGNv
bmx5KHRyeXNob3J0PVRydWUpLnNwbGl0KCdcbicpCisgICAgICAgIGZhaWxpbmRlbnQgPSBzZWxm
LmZhaWxfbWFya2VyICsgaW5kZW50WzE6XQorICAgICAgICBmb3IgbGluZSBpbiBleGxpbmVzOgor
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKGZhaWxpbmRlbnQgKyBsaW5lKQorICAgICAgICAgICAg
aWYgbm90IG1hcmthbGw6CisgICAgICAgICAgICAgICAgZmFpbGluZGVudCA9IGluZGVudAorICAg
ICAgICByZXR1cm4gbGluZXMKKworICAgIGRlZiByZXByX2xvY2FscyhzZWxmLCBsb2NhbHMpOgor
ICAgICAgICBpZiBzZWxmLnNob3dsb2NhbHM6CisgICAgICAgICAgICBsaW5lcyA9IFtdCisgICAg
ICAgICAgICBrZXlzID0gW2xvYyBmb3IgbG9jIGluIGxvY2FscyBpZiBsb2NbMF0gIT0gIkAiXQor
ICAgICAgICAgICAga2V5cy5zb3J0KCkKKyAgICAgICAgICAgIGZvciBuYW1lIGluIGtleXM6Cisg
ICAgICAgICAgICAgICAgdmFsdWUgPSBsb2NhbHNbbmFtZV0KKyAgICAgICAgICAgICAgICBpZiBu
YW1lID09ICdfX2J1aWx0aW5zX18nOgorICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQo
Il9fYnVpbHRpbnNfXyA9IDxidWlsdGlucz4iKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICAgICAgICAgICMgVGhpcyBmb3JtYXR0aW5nIGNvdWxkIGFsbCBiZSBoYW5kbGVkIGJ5
IHRoZQorICAgICAgICAgICAgICAgICAgICAjIF9yZXByKCkgZnVuY3Rpb24sIHdoaWNoIGlzIG9u
bHkgcmVwcmxpYi5SZXByIGluCisgICAgICAgICAgICAgICAgICAgICMgZGlzZ3Vpc2UsIHNvIGlz
IHZlcnkgY29uZmlndXJhYmxlLgorICAgICAgICAgICAgICAgICAgICBzdHJfcmVwciA9IHNlbGYu
X3NhZmVyZXByKHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAjaWYgbGVuKHN0cl9yZXByKSA8
IDcwIG9yIG5vdCBpc2luc3RhbmNlKHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAjICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChsaXN0LCB0dXBsZSwgZGljdCkpOgorICAgICAgICAgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoIiUtMTBzID0gJXMiICUobmFtZSwgc3RyX3JlcHIpKQorICAg
ICAgICAgICAgICAgICAgICAjZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyAgICBzZWxmLl9s
aW5lKCIlLTEwcyA9XFwiICUgKG5hbWUsKSkKKyAgICAgICAgICAgICAgICAgICAgIyAgICAjIFhY
WAorICAgICAgICAgICAgICAgICAgICAjICAgIHB5LnN0ZC5wcHJpbnQucHByaW50KHZhbHVlLCBz
dHJlYW09c2VsZi5leGNpbmZvd3JpdGVyKQorICAgICAgICAgICAgcmV0dXJuIFJlcHJMb2NhbHMo
bGluZXMpCisKKyAgICBkZWYgcmVwcl90cmFjZWJhY2tfZW50cnkoc2VsZiwgZW50cnksIGV4Y2lu
Zm89Tm9uZSk6CisgICAgICAgIGltcG9ydCBfcHl0ZXN0Ll9jb2RlCisgICAgICAgIHNvdXJjZSA9
IHNlbGYuX2dldGVudHJ5c291cmNlKGVudHJ5KQorICAgICAgICBpZiBzb3VyY2UgaXMgTm9uZToK
KyAgICAgICAgICAgIHNvdXJjZSA9IF9weXRlc3QuX2NvZGUuU291cmNlKCI/Pz8iKQorICAgICAg
ICAgICAgbGluZV9pbmRleCA9IDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgZW50cnku
Z2V0Zmlyc3RsaW5lc291cmNlKCkgY2FuIGJlIC0xLCBzaG91bGQgYmUgMCBvbiBqeXRob24KKyAg
ICAgICAgICAgIGxpbmVfaW5kZXggPSBlbnRyeS5saW5lbm8gLSBtYXgoZW50cnkuZ2V0Zmlyc3Rs
aW5lc291cmNlKCksIDApCisKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBzdHlsZSA9IGVu
dHJ5Ll9yZXByX3N0eWxlCisgICAgICAgIGlmIHN0eWxlIGlzIE5vbmU6CisgICAgICAgICAgICBz
dHlsZSA9IHNlbGYuc3R5bGUKKyAgICAgICAgaWYgc3R5bGUgaW4gKCJzaG9ydCIsICJsb25nIik6
CisgICAgICAgICAgICBzaG9ydCA9IHN0eWxlID09ICJzaG9ydCIKKyAgICAgICAgICAgIHJlcHJh
cmdzID0gc2VsZi5yZXByX2FyZ3MoZW50cnkpIGlmIG5vdCBzaG9ydCBlbHNlIE5vbmUKKyAgICAg
ICAgICAgIHMgPSBzZWxmLmdldF9zb3VyY2Uoc291cmNlLCBsaW5lX2luZGV4LCBleGNpbmZvLCBz
aG9ydD1zaG9ydCkKKyAgICAgICAgICAgIGxpbmVzLmV4dGVuZChzKQorICAgICAgICAgICAgaWYg
c2hvcnQ6CisgICAgICAgICAgICAgICAgbWVzc2FnZSA9ICJpbiAlcyIgJShlbnRyeS5uYW1lKQor
ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtZXNzYWdlID0gZXhjaW5mbyBhbmQg
ZXhjaW5mby50eXBlbmFtZSBvciAiIgorICAgICAgICAgICAgcGF0aCA9IHNlbGYuX21ha2VwYXRo
KGVudHJ5LnBhdGgpCisgICAgICAgICAgICBmaWxlbG9jcmVwciA9IFJlcHJGaWxlTG9jYXRpb24o
cGF0aCwgZW50cnkubGluZW5vKzEsIG1lc3NhZ2UpCisgICAgICAgICAgICBsb2NhbHNyZXByID0g
Tm9uZQorICAgICAgICAgICAgaWYgbm90IHNob3J0OgorICAgICAgICAgICAgICAgIGxvY2Fsc3Jl
cHIgPSAgc2VsZi5yZXByX2xvY2FscyhlbnRyeS5sb2NhbHMpCisgICAgICAgICAgICByZXR1cm4g
UmVwckVudHJ5KGxpbmVzLCByZXByYXJncywgbG9jYWxzcmVwciwgZmlsZWxvY3JlcHIsIHN0eWxl
KQorICAgICAgICBpZiBleGNpbmZvOgorICAgICAgICAgICAgbGluZXMuZXh0ZW5kKHNlbGYuZ2V0
X2V4Y29ubHkoZXhjaW5mbywgaW5kZW50PTQpKQorICAgICAgICByZXR1cm4gUmVwckVudHJ5KGxp
bmVzLCBOb25lLCBOb25lLCBOb25lLCBzdHlsZSkKKworICAgIGRlZiBfbWFrZXBhdGgoc2VsZiwg
cGF0aCk6CisgICAgICAgIGlmIG5vdCBzZWxmLmFic3BhdGg6CisgICAgICAgICAgICB0cnk6Cisg
ICAgICAgICAgICAgICAgbnAgPSBweS5wYXRoLmxvY2FsKCkuYmVzdHJlbHBhdGgocGF0aCkKKyAg
ICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIHJldHVybiBwYXRoCisg
ICAgICAgICAgICBpZiBsZW4obnApIDwgbGVuKHN0cihwYXRoKSk6CisgICAgICAgICAgICAgICAg
cGF0aCA9IG5wCisgICAgICAgIHJldHVybiBwYXRoCisKKyAgICBkZWYgcmVwcl90cmFjZWJhY2so
c2VsZiwgZXhjaW5mbyk6CisgICAgICAgIHRyYWNlYmFjayA9IGV4Y2luZm8udHJhY2ViYWNrCisg
ICAgICAgIGlmIHNlbGYudGJmaWx0ZXI6CisgICAgICAgICAgICB0cmFjZWJhY2sgPSB0cmFjZWJh
Y2suZmlsdGVyKCkKKyAgICAgICAgcmVjdXJzaW9uaW5kZXggPSBOb25lCisgICAgICAgIGlmIGV4
Y2luZm8uZXJyaXNpbnN0YW5jZShSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgaWYgIm1heGlt
dW0gcmVjdXJzaW9uIGRlcHRoIGV4Y2VlZGVkIiBpbiBzdHIoZXhjaW5mby52YWx1ZSk6CisgICAg
ICAgICAgICAgICAgcmVjdXJzaW9uaW5kZXggPSB0cmFjZWJhY2sucmVjdXJzaW9uaW5kZXgoKQor
ICAgICAgICBsYXN0ID0gdHJhY2ViYWNrWy0xXQorICAgICAgICBlbnRyaWVzID0gW10KKyAgICAg
ICAgZXh0cmFsaW5lID0gTm9uZQorICAgICAgICBmb3IgaW5kZXgsIGVudHJ5IGluIGVudW1lcmF0
ZSh0cmFjZWJhY2spOgorICAgICAgICAgICAgZWluZm8gPSAobGFzdCA9PSBlbnRyeSkgYW5kIGV4
Y2luZm8gb3IgTm9uZQorICAgICAgICAgICAgcmVwcmVudHJ5ID0gc2VsZi5yZXByX3RyYWNlYmFj
a19lbnRyeShlbnRyeSwgZWluZm8pCisgICAgICAgICAgICBlbnRyaWVzLmFwcGVuZChyZXByZW50
cnkpCisgICAgICAgICAgICBpZiBpbmRleCA9PSByZWN1cnNpb25pbmRleDoKKyAgICAgICAgICAg
ICAgICBleHRyYWxpbmUgPSAiISEhIFJlY3Vyc2lvbiBkZXRlY3RlZCAoc2FtZSBsb2NhbHMgJiBw
b3NpdGlvbikiCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcmV0dXJuIFJlcHJUcmFj
ZWJhY2soZW50cmllcywgZXh0cmFsaW5lLCBzdHlsZT1zZWxmLnN0eWxlKQorCisgICAgZGVmIHJl
cHJfZXhjaW5mbyhzZWxmLCBleGNpbmZvKToKKyAgICAgICAgcmVwcnRyYWNlYmFjayA9IHNlbGYu
cmVwcl90cmFjZWJhY2soZXhjaW5mbykKKyAgICAgICAgcmVwcmNyYXNoID0gZXhjaW5mby5fZ2V0
cmVwcmNyYXNoKCkKKyAgICAgICAgcmV0dXJuIFJlcHJFeGNlcHRpb25JbmZvKHJlcHJ0cmFjZWJh
Y2ssIHJlcHJjcmFzaCkKKworY2xhc3MgVGVybWluYWxSZXByOgorICAgIGRlZiBfX3N0cl9fKHNl
bGYpOgorICAgICAgICBzID0gc2VsZi5fX3VuaWNvZGVfXygpCisgICAgICAgIGlmIHN5cy52ZXJz
aW9uX2luZm9bMF0gPCAzOgorICAgICAgICAgICAgcyA9IHMuZW5jb2RlKCd1dGYtOCcpCisgICAg
ICAgIHJldHVybiBzCisKKyAgICBkZWYgX191bmljb2RlX18oc2VsZik6CisgICAgICAgICMgRllJ
IHRoaXMgaXMgY2FsbGVkIGZyb20gcHl0ZXN0LXhkaXN0J3Mgc2VyaWFsaXphdGlvbiBvZiBleGNl
cHRpb24KKyAgICAgICAgIyBpbmZvcm1hdGlvbi4KKyAgICAgICAgaW8gPSBweS5pby5UZXh0SU8o
KQorICAgICAgICB0dyA9IHB5LmlvLlRlcm1pbmFsV3JpdGVyKGZpbGU9aW8pCisgICAgICAgIHNl
bGYudG90ZXJtaW5hbCh0dykKKyAgICAgICAgcmV0dXJuIGlvLmdldHZhbHVlKCkuc3RyaXAoKQor
CisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIjwlcyBpbnN0YW5jZSBh
dCAlMHg+IiAlKHNlbGYuX19jbGFzc19fLCBpZChzZWxmKSkKKworCitjbGFzcyBSZXByRXhjZXB0
aW9uSW5mbyhUZXJtaW5hbFJlcHIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXBydHJhY2Vi
YWNrLCByZXByY3Jhc2gpOgorICAgICAgICBzZWxmLnJlcHJ0cmFjZWJhY2sgPSByZXBydHJhY2Vi
YWNrCisgICAgICAgIHNlbGYucmVwcmNyYXNoID0gcmVwcmNyYXNoCisgICAgICAgIHNlbGYuc2Vj
dGlvbnMgPSBbXQorCisgICAgZGVmIGFkZHNlY3Rpb24oc2VsZiwgbmFtZSwgY29udGVudCwgc2Vw
PSItIik6CisgICAgICAgIHNlbGYuc2VjdGlvbnMuYXBwZW5kKChuYW1lLCBjb250ZW50LCBzZXAp
KQorCisgICAgZGVmIHRvdGVybWluYWwoc2VsZiwgdHcpOgorICAgICAgICBzZWxmLnJlcHJ0cmFj
ZWJhY2sudG90ZXJtaW5hbCh0dykKKyAgICAgICAgZm9yIG5hbWUsIGNvbnRlbnQsIHNlcCBpbiBz
ZWxmLnNlY3Rpb25zOgorICAgICAgICAgICAgdHcuc2VwKHNlcCwgbmFtZSkKKyAgICAgICAgICAg
IHR3LmxpbmUoY29udGVudCkKKworY2xhc3MgUmVwclRyYWNlYmFjayhUZXJtaW5hbFJlcHIpOgor
ICAgIGVudHJ5c2VwID0gIl8gIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlcHJlbnRyaWVz
LCBleHRyYWxpbmUsIHN0eWxlKToKKyAgICAgICAgc2VsZi5yZXByZW50cmllcyA9IHJlcHJlbnRy
aWVzCisgICAgICAgIHNlbGYuZXh0cmFsaW5lID0gZXh0cmFsaW5lCisgICAgICAgIHNlbGYuc3R5
bGUgPSBzdHlsZQorCisgICAgZGVmIHRvdGVybWluYWwoc2VsZiwgdHcpOgorICAgICAgICAjIHRo
ZSBlbnRyaWVzIG1pZ2h0IGhhdmUgZGlmZmVyZW50IHN0eWxlcworICAgICAgICBmb3IgaSwgZW50
cnkgaW4gZW51bWVyYXRlKHNlbGYucmVwcmVudHJpZXMpOgorICAgICAgICAgICAgaWYgZW50cnku
c3R5bGUgPT0gImxvbmciOgorICAgICAgICAgICAgICAgIHR3LmxpbmUoIiIpCisgICAgICAgICAg
ICBlbnRyeS50b3Rlcm1pbmFsKHR3KQorICAgICAgICAgICAgaWYgaSA8IGxlbihzZWxmLnJlcHJl
bnRyaWVzKSAtIDE6CisgICAgICAgICAgICAgICAgbmV4dF9lbnRyeSA9IHNlbGYucmVwcmVudHJp
ZXNbaSsxXQorICAgICAgICAgICAgICAgIGlmIGVudHJ5LnN0eWxlID09ICJsb25nIiBvciBcCisg
ICAgICAgICAgICAgICAgICAgZW50cnkuc3R5bGUgPT0gInNob3J0IiBhbmQgbmV4dF9lbnRyeS5z
dHlsZSA9PSAibG9uZyI6CisgICAgICAgICAgICAgICAgICAgIHR3LnNlcChzZWxmLmVudHJ5c2Vw
KQorCisgICAgICAgIGlmIHNlbGYuZXh0cmFsaW5lOgorICAgICAgICAgICAgdHcubGluZShzZWxm
LmV4dHJhbGluZSkKKworY2xhc3MgUmVwclRyYWNlYmFja05hdGl2ZShSZXByVHJhY2ViYWNrKToK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgdGJsaW5lcyk6CisgICAgICAgIHNlbGYuc3R5bGUgPSAi
bmF0aXZlIgorICAgICAgICBzZWxmLnJlcHJlbnRyaWVzID0gW1JlcHJFbnRyeU5hdGl2ZSh0Ymxp
bmVzKV0KKyAgICAgICAgc2VsZi5leHRyYWxpbmUgPSBOb25lCisKK2NsYXNzIFJlcHJFbnRyeU5h
dGl2ZShUZXJtaW5hbFJlcHIpOgorICAgIHN0eWxlID0gIm5hdGl2ZSIKKworICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCB0YmxpbmVzKToKKyAgICAgICAgc2VsZi5saW5lcyA9IHRibGluZXMKKworICAg
IGRlZiB0b3Rlcm1pbmFsKHNlbGYsIHR3KToKKyAgICAgICAgdHcud3JpdGUoIiIuam9pbihzZWxm
LmxpbmVzKSkKKworY2xhc3MgUmVwckVudHJ5KFRlcm1pbmFsUmVwcik6CisgICAgbG9jYWxzc2Vw
ID0gIl8gIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxpbmVzLCByZXByZnVuY2FyZ3MsIHJl
cHJsb2NhbHMsIGZpbGVsb2NyZXByLCBzdHlsZSk6CisgICAgICAgIHNlbGYubGluZXMgPSBsaW5l
cworICAgICAgICBzZWxmLnJlcHJmdW5jYXJncyA9IHJlcHJmdW5jYXJncworICAgICAgICBzZWxm
LnJlcHJsb2NhbHMgPSByZXBybG9jYWxzCisgICAgICAgIHNlbGYucmVwcmZpbGVsb2MgPSBmaWxl
bG9jcmVwcgorICAgICAgICBzZWxmLnN0eWxlID0gc3R5bGUKKworICAgIGRlZiB0b3Rlcm1pbmFs
KHNlbGYsIHR3KToKKyAgICAgICAgaWYgc2VsZi5zdHlsZSA9PSAic2hvcnQiOgorICAgICAgICAg
ICAgc2VsZi5yZXByZmlsZWxvYy50b3Rlcm1pbmFsKHR3KQorICAgICAgICAgICAgZm9yIGxpbmUg
aW4gc2VsZi5saW5lczoKKyAgICAgICAgICAgICAgICByZWQgPSBsaW5lLnN0YXJ0c3dpdGgoIkUg
ICAiKQorICAgICAgICAgICAgICAgIHR3LmxpbmUobGluZSwgYm9sZD1UcnVlLCByZWQ9cmVkKQor
ICAgICAgICAgICAgI3R3LmxpbmUoIiIpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYg
c2VsZi5yZXByZnVuY2FyZ3M6CisgICAgICAgICAgICBzZWxmLnJlcHJmdW5jYXJncy50b3Rlcm1p
bmFsKHR3KQorICAgICAgICBmb3IgbGluZSBpbiBzZWxmLmxpbmVzOgorICAgICAgICAgICAgcmVk
ID0gbGluZS5zdGFydHN3aXRoKCJFICAgIikKKyAgICAgICAgICAgIHR3LmxpbmUobGluZSwgYm9s
ZD1UcnVlLCByZWQ9cmVkKQorICAgICAgICBpZiBzZWxmLnJlcHJsb2NhbHM6CisgICAgICAgICAg
ICAjdHcuc2VwKHNlbGYubG9jYWxzc2VwLCAiTG9jYWxzIikKKyAgICAgICAgICAgIHR3LmxpbmUo
IiIpCisgICAgICAgICAgICBzZWxmLnJlcHJsb2NhbHMudG90ZXJtaW5hbCh0dykKKyAgICAgICAg
aWYgc2VsZi5yZXByZmlsZWxvYzoKKyAgICAgICAgICAgIGlmIHNlbGYubGluZXM6CisgICAgICAg
ICAgICAgICAgdHcubGluZSgiIikKKyAgICAgICAgICAgIHNlbGYucmVwcmZpbGVsb2MudG90ZXJt
aW5hbCh0dykKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIiVzXG4l
c1xuJXMiICUgKCJcbiIuam9pbihzZWxmLmxpbmVzKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzZWxmLnJlcHJsb2NhbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2VsZi5yZXByZmlsZWxvYykKKworY2xhc3MgUmVwckZpbGVMb2NhdGlvbihUZXJtaW5hbFJlcHIp
OgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoLCBsaW5lbm8sIG1lc3NhZ2UpOgorICAgICAg
ICBzZWxmLnBhdGggPSBzdHIocGF0aCkKKyAgICAgICAgc2VsZi5saW5lbm8gPSBsaW5lbm8KKyAg
ICAgICAgc2VsZi5tZXNzYWdlID0gbWVzc2FnZQorCisgICAgZGVmIHRvdGVybWluYWwoc2VsZiwg
dHcpOgorICAgICAgICAjIGZpbGVuYW1lIGFuZCBsaW5lbm8gb3V0cHV0IGZvciBlYWNoIGVudHJ5
LAorICAgICAgICAjIHVzaW5nIGFuIG91dHB1dCBmb3JtYXQgdGhhdCBtb3N0IGVkaXRvcnMgdW50
ZXJzdGFuZAorICAgICAgICBtc2cgPSBzZWxmLm1lc3NhZ2UKKyAgICAgICAgaSA9IG1zZy5maW5k
KCJcbiIpCisgICAgICAgIGlmIGkgIT0gLTE6CisgICAgICAgICAgICBtc2cgPSBtc2dbOmldCisg
ICAgICAgIHR3LmxpbmUoIiVzOiVzOiAlcyIgJShzZWxmLnBhdGgsIHNlbGYubGluZW5vLCBtc2cp
KQorCitjbGFzcyBSZXByTG9jYWxzKFRlcm1pbmFsUmVwcik6CisgICAgZGVmIF9faW5pdF9fKHNl
bGYsIGxpbmVzKToKKyAgICAgICAgc2VsZi5saW5lcyA9IGxpbmVzCisKKyAgICBkZWYgdG90ZXJt
aW5hbChzZWxmLCB0dyk6CisgICAgICAgIGZvciBsaW5lIGluIHNlbGYubGluZXM6CisgICAgICAg
ICAgICB0dy5saW5lKGxpbmUpCisKK2NsYXNzIFJlcHJGdW5jQXJncyhUZXJtaW5hbFJlcHIpOgor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhcmdzKToKKyAgICAgICAgc2VsZi5hcmdzID0gYXJncwor
CisgICAgZGVmIHRvdGVybWluYWwoc2VsZiwgdHcpOgorICAgICAgICBpZiBzZWxmLmFyZ3M6Cisg
ICAgICAgICAgICBsaW5lc29mYXIgPSAiIgorICAgICAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGlu
IHNlbGYuYXJnczoKKyAgICAgICAgICAgICAgICBucyA9ICIlcyA9ICVzIiAlKG5hbWUsIHZhbHVl
KQorICAgICAgICAgICAgICAgIGlmIGxlbihucykgKyBsZW4obGluZXNvZmFyKSArIDIgPiB0dy5m
dWxsd2lkdGg6CisgICAgICAgICAgICAgICAgICAgIGlmIGxpbmVzb2ZhcjoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHR3LmxpbmUobGluZXNvZmFyKQorICAgICAgICAgICAgICAgICAgICBsaW5l
c29mYXIgPSAgbnMKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBp
ZiBsaW5lc29mYXI6CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lc29mYXIgKz0gIiwgIiAr
IG5zCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBs
aW5lc29mYXIgPSBucworICAgICAgICAgICAgaWYgbGluZXNvZmFyOgorICAgICAgICAgICAgICAg
IHR3LmxpbmUobGluZXNvZmFyKQorICAgICAgICAgICAgdHcubGluZSgiIikKKworCisKK29sZGJ1
aWx0aW5zID0ge30KKworZGVmIHBhdGNoX2J1aWx0aW5zKGFzc2VydGlvbj1UcnVlLCBjb21waWxl
PVRydWUpOgorICAgICIiIiBwdXQgY29tcGlsZSBhbmQgQXNzZXJ0aW9uRXJyb3IgYnVpbHRpbnMg
dG8gUHl0aG9uJ3MgYnVpbHRpbnMuICIiIgorICAgIGlmIGFzc2VydGlvbjoKKyAgICAgICAgZnJv
bSBfcHl0ZXN0LmFzc2VydGlvbiBpbXBvcnQgcmVpbnRlcnByZXQKKyAgICAgICAgbCA9IG9sZGJ1
aWx0aW5zLnNldGRlZmF1bHQoJ0Fzc2VydGlvbkVycm9yJywgW10pCisgICAgICAgIGwuYXBwZW5k
KHB5LmJ1aWx0aW4uYnVpbHRpbnMuQXNzZXJ0aW9uRXJyb3IpCisgICAgICAgIHB5LmJ1aWx0aW4u
YnVpbHRpbnMuQXNzZXJ0aW9uRXJyb3IgPSByZWludGVycHJldC5Bc3NlcnRpb25FcnJvcgorICAg
IGlmIGNvbXBpbGU6CisgICAgICAgIGltcG9ydCBfcHl0ZXN0Ll9jb2RlCisgICAgICAgIGwgPSBv
bGRidWlsdGlucy5zZXRkZWZhdWx0KCdjb21waWxlJywgW10pCisgICAgICAgIGwuYXBwZW5kKHB5
LmJ1aWx0aW4uYnVpbHRpbnMuY29tcGlsZSkKKyAgICAgICAgcHkuYnVpbHRpbi5idWlsdGlucy5j
b21waWxlID0gX3B5dGVzdC5fY29kZS5jb21waWxlCisKK2RlZiB1bnBhdGNoX2J1aWx0aW5zKGFz
c2VydGlvbj1UcnVlLCBjb21waWxlPVRydWUpOgorICAgICIiIiByZW1vdmUgY29tcGlsZSBhbmQg
QXNzZXJ0aW9uRXJyb3IgYnVpbHRpbnMgZnJvbSBQeXRob24gYnVpbHRpbnMuICIiIgorICAgIGlm
IGFzc2VydGlvbjoKKyAgICAgICAgcHkuYnVpbHRpbi5idWlsdGlucy5Bc3NlcnRpb25FcnJvciA9
IG9sZGJ1aWx0aW5zWydBc3NlcnRpb25FcnJvciddLnBvcCgpCisgICAgaWYgY29tcGlsZToKKyAg
ICAgICAgcHkuYnVpbHRpbi5idWlsdGlucy5jb21waWxlID0gb2xkYnVpbHRpbnNbJ2NvbXBpbGUn
XS5wb3AoKQorCitkZWYgZ2V0cmF3Y29kZShvYmosIHRyeWNhbGw9VHJ1ZSk6CisgICAgIiIiIHJl
dHVybiBjb2RlIG9iamVjdCBmb3IgZ2l2ZW4gZnVuY3Rpb24uICIiIgorICAgIHRyeToKKyAgICAg
ICAgcmV0dXJuIG9iai5fX2NvZGVfXworICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAg
ICAgb2JqID0gZ2V0YXR0cihvYmosICdpbV9mdW5jJywgb2JqKQorICAgICAgICBvYmogPSBnZXRh
dHRyKG9iaiwgJ2Z1bmNfY29kZScsIG9iaikKKyAgICAgICAgb2JqID0gZ2V0YXR0cihvYmosICdm
X2NvZGUnLCBvYmopCisgICAgICAgIG9iaiA9IGdldGF0dHIob2JqLCAnX19jb2RlX18nLCBvYmop
CisgICAgICAgIGlmIHRyeWNhbGwgYW5kIG5vdCBoYXNhdHRyKG9iaiwgJ2NvX2ZpcnN0bGluZW5v
Jyk6CisgICAgICAgICAgICBpZiBoYXNhdHRyKG9iaiwgJ19fY2FsbF9fJykgYW5kIG5vdCBweS5z
dGQuaW5zcGVjdC5pc2NsYXNzKG9iaik6CisgICAgICAgICAgICAgICAgeCA9IGdldHJhd2NvZGUo
b2JqLl9fY2FsbF9fLCB0cnljYWxsPUZhbHNlKQorICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIo
eCwgJ2NvX2ZpcnN0bGluZW5vJyk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB4CisgICAg
ICAgIHJldHVybiBvYmoKKwpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNj
L3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L19jb2RlL3NvdXJjZS5weSBiL1dlYkRyaXZlclRlc3RzL2lt
cG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9fY29kZS9zb3VyY2UucHkKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmExNTIxZjhhMjEyCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L19j
b2RlL3NvdXJjZS5weQpAQCAtMCwwICsxLDQyMSBAQAorZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBn
ZW5lcmF0b3JzCisKK2Zyb20gYmlzZWN0IGltcG9ydCBiaXNlY3RfcmlnaHQKK2ltcG9ydCBzeXMK
K2ltcG9ydCBpbnNwZWN0LCB0b2tlbml6ZQoraW1wb3J0IHB5Citmcm9tIHR5cGVzIGltcG9ydCBN
b2R1bGVUeXBlCitjcHlfY29tcGlsZSA9IGNvbXBpbGUKKwordHJ5OgorICAgIGltcG9ydCBfYXN0
CisgICAgZnJvbSBfYXN0IGltcG9ydCBQeUNGX09OTFlfQVNUIGFzIF9BU1RfRkxBRworZXhjZXB0
IEltcG9ydEVycm9yOgorICAgIF9BU1RfRkxBRyA9IDAKKyAgICBfYXN0ID0gTm9uZQorCisKK2Ns
YXNzIFNvdXJjZShvYmplY3QpOgorICAgICIiIiBhIGltbXV0YWJsZSBvYmplY3QgaG9sZGluZyBh
IHNvdXJjZSBjb2RlIGZyYWdtZW50LAorICAgICAgICBwb3NzaWJseSBkZWluZGVudGluZyBpdC4K
KyAgICAiIiIKKyAgICBfY29tcGlsZWNvdW50ZXIgPSAwCisgICAgZGVmIF9faW5pdF9fKHNlbGYs
ICpwYXJ0cywgKiprd2FyZ3MpOgorICAgICAgICBzZWxmLmxpbmVzID0gbGluZXMgPSBbXQorICAg
ICAgICBkZSA9IGt3YXJncy5nZXQoJ2RlaW5kZW50JywgVHJ1ZSkKKyAgICAgICAgcnN0cmlwID0g
a3dhcmdzLmdldCgncnN0cmlwJywgVHJ1ZSkKKyAgICAgICAgZm9yIHBhcnQgaW4gcGFydHM6Cisg
ICAgICAgICAgICBpZiBub3QgcGFydDoKKyAgICAgICAgICAgICAgICBwYXJ0bGluZXMgPSBbXQor
ICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShwYXJ0LCBTb3VyY2UpOgorICAgICAgICAgICAgICAg
IHBhcnRsaW5lcyA9IHBhcnQubGluZXMKKyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShwYXJ0
LCAodHVwbGUsIGxpc3QpKToKKyAgICAgICAgICAgICAgICBwYXJ0bGluZXMgPSBbeC5yc3RyaXAo
IlxuIikgZm9yIHggaW4gcGFydF0KKyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShwYXJ0LCBw
eS5idWlsdGluLl9iYXNlc3RyaW5nKToKKyAgICAgICAgICAgICAgICBwYXJ0bGluZXMgPSBwYXJ0
LnNwbGl0KCdcbicpCisgICAgICAgICAgICAgICAgaWYgcnN0cmlwOgorICAgICAgICAgICAgICAg
ICAgICB3aGlsZSBwYXJ0bGluZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBwYXJ0bGlu
ZXNbLTFdLnN0cmlwKCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHBhcnRsaW5lcy5wb3AoKQorICAgICAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgICAgICBwYXJ0bGluZXMgPSBnZXRzb3VyY2UocGFydCwgZGVpbmRlbnQ9ZGUpLmxp
bmVzCisgICAgICAgICAgICBpZiBkZToKKyAgICAgICAgICAgICAgICBwYXJ0bGluZXMgPSBkZWlu
ZGVudChwYXJ0bGluZXMpCisgICAgICAgICAgICBsaW5lcy5leHRlbmQocGFydGxpbmVzKQorCisg
ICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJl
dHVybiBzZWxmLmxpbmVzID09IG90aGVyLmxpbmVzCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVF
cnJvcjoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIHN0cik6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHN0cihzZWxmKSA9PSBvdGhlcgorICAgICAgICAgICAgcmV0dXJuIEZhbHNl
CisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgaWYgaXNpbnN0YW5j
ZShrZXksIGludCk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5saW5lc1trZXldCisgICAgICAg
IGVsc2U6CisgICAgICAgICAgICBpZiBrZXkuc3RlcCBub3QgaW4gKE5vbmUsIDEpOgorICAgICAg
ICAgICAgICAgIHJhaXNlIEluZGV4RXJyb3IoImNhbm5vdCBzbGljZSBhIFNvdXJjZSB3aXRoIGEg
c3RlcCIpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fX2dldHNsaWNlX18oa2V5LnN0YXJ0LCBr
ZXkuc3RvcCkKKworICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gbGVuKHNl
bGYubGluZXMpCisKKyAgICBkZWYgX19nZXRzbGljZV9fKHNlbGYsIHN0YXJ0LCBlbmQpOgorICAg
ICAgICBuZXdzb3VyY2UgPSBTb3VyY2UoKQorICAgICAgICBuZXdzb3VyY2UubGluZXMgPSBzZWxm
LmxpbmVzW3N0YXJ0OmVuZF0KKyAgICAgICAgcmV0dXJuIG5ld3NvdXJjZQorCisgICAgZGVmIHN0
cmlwKHNlbGYpOgorICAgICAgICAiIiIgcmV0dXJuIG5ldyBzb3VyY2Ugb2JqZWN0IHdpdGggdHJh
aWxpbmcKKyAgICAgICAgICAgIGFuZCBsZWFkaW5nIGJsYW5rIGxpbmVzIHJlbW92ZWQuCisgICAg
ICAgICIiIgorICAgICAgICBzdGFydCwgZW5kID0gMCwgbGVuKHNlbGYpCisgICAgICAgIHdoaWxl
IHN0YXJ0IDwgZW5kIGFuZCBub3Qgc2VsZi5saW5lc1tzdGFydF0uc3RyaXAoKToKKyAgICAgICAg
ICAgIHN0YXJ0ICs9IDEKKyAgICAgICAgd2hpbGUgZW5kID4gc3RhcnQgYW5kIG5vdCBzZWxmLmxp
bmVzW2VuZC0xXS5zdHJpcCgpOgorICAgICAgICAgICAgZW5kIC09IDEKKyAgICAgICAgc291cmNl
ID0gU291cmNlKCkKKyAgICAgICAgc291cmNlLmxpbmVzWzpdID0gc2VsZi5saW5lc1tzdGFydDpl
bmRdCisgICAgICAgIHJldHVybiBzb3VyY2UKKworICAgIGRlZiBwdXRhcm91bmQoc2VsZiwgYmVm
b3JlPScnLCBhZnRlcj0nJywgaW5kZW50PScgJyAqIDQpOgorICAgICAgICAiIiIgcmV0dXJuIGEg
Y29weSBvZiB0aGUgc291cmNlIG9iamVjdCB3aXRoCisgICAgICAgICAgICAnYmVmb3JlJyBhbmQg
J2FmdGVyJyB3cmFwcGVkIGFyb3VuZCBpdC4KKyAgICAgICAgIiIiCisgICAgICAgIGJlZm9yZSA9
IFNvdXJjZShiZWZvcmUpCisgICAgICAgIGFmdGVyID0gU291cmNlKGFmdGVyKQorICAgICAgICBu
ZXdzb3VyY2UgPSBTb3VyY2UoKQorICAgICAgICBsaW5lcyA9IFsgKGluZGVudCArIGxpbmUpIGZv
ciBsaW5lIGluIHNlbGYubGluZXNdCisgICAgICAgIG5ld3NvdXJjZS5saW5lcyA9IGJlZm9yZS5s
aW5lcyArIGxpbmVzICsgIGFmdGVyLmxpbmVzCisgICAgICAgIHJldHVybiBuZXdzb3VyY2UKKwor
ICAgIGRlZiBpbmRlbnQoc2VsZiwgaW5kZW50PScgJyAqIDQpOgorICAgICAgICAiIiIgcmV0dXJu
IGEgY29weSBvZiB0aGUgc291cmNlIG9iamVjdCB3aXRoCisgICAgICAgICAgICBhbGwgbGluZXMg
aW5kZW50ZWQgYnkgdGhlIGdpdmVuIGluZGVudC1zdHJpbmcuCisgICAgICAgICIiIgorICAgICAg
ICBuZXdzb3VyY2UgPSBTb3VyY2UoKQorICAgICAgICBuZXdzb3VyY2UubGluZXMgPSBbKGluZGVu
dCtsaW5lKSBmb3IgbGluZSBpbiBzZWxmLmxpbmVzXQorICAgICAgICByZXR1cm4gbmV3c291cmNl
CisKKyAgICBkZWYgZ2V0c3RhdGVtZW50KHNlbGYsIGxpbmVubywgYXNzZXJ0aW9uPUZhbHNlKToK
KyAgICAgICAgIiIiIHJldHVybiBTb3VyY2Ugc3RhdGVtZW50IHdoaWNoIGNvbnRhaW5zIHRoZQor
ICAgICAgICAgICAgZ2l2ZW4gbGluZW51bWJlciAoY291bnRlZCBmcm9tIDApLgorICAgICAgICAi
IiIKKyAgICAgICAgc3RhcnQsIGVuZCA9IHNlbGYuZ2V0c3RhdGVtZW50cmFuZ2UobGluZW5vLCBh
c3NlcnRpb24pCisgICAgICAgIHJldHVybiBzZWxmW3N0YXJ0OmVuZF0KKworICAgIGRlZiBnZXRz
dGF0ZW1lbnRyYW5nZShzZWxmLCBsaW5lbm8sIGFzc2VydGlvbj1GYWxzZSk6CisgICAgICAgICIi
IiByZXR1cm4gKHN0YXJ0LCBlbmQpIHR1cGxlIHdoaWNoIHNwYW5zIHRoZSBtaW5pbWFsCisgICAg
ICAgICAgICBzdGF0ZW1lbnQgcmVnaW9uIHdoaWNoIGNvbnRhaW5pbmcgdGhlIGdpdmVuIGxpbmVu
by4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCAoMCA8PSBsaW5lbm8gPCBsZW4oc2VsZikp
OgorICAgICAgICAgICAgcmFpc2UgSW5kZXhFcnJvcigibGluZW5vIG91dCBvZiByYW5nZSIpCisg
ICAgICAgIGFzdCwgc3RhcnQsIGVuZCA9IGdldHN0YXRlbWVudHJhbmdlX2FzdChsaW5lbm8sIHNl
bGYpCisgICAgICAgIHJldHVybiBzdGFydCwgZW5kCisKKyAgICBkZWYgZGVpbmRlbnQoc2VsZiwg
b2Zmc2V0PU5vbmUpOgorICAgICAgICAiIiIgcmV0dXJuIGEgbmV3IHNvdXJjZSBvYmplY3QgZGVp
bmRlbnRlZCBieSBvZmZzZXQuCisgICAgICAgICAgICBJZiBvZmZzZXQgaXMgTm9uZSB0aGVuIGd1
ZXNzIGFuIGluZGVudGF0aW9uIG9mZnNldCBmcm9tCisgICAgICAgICAgICB0aGUgZmlyc3Qgbm9u
LWJsYW5rIGxpbmUuICBTdWJzZXF1ZW50IGxpbmVzIHdoaWNoIGhhdmUgYQorICAgICAgICAgICAg
bG93ZXIgaW5kZW50YXRpb24gb2Zmc2V0IHdpbGwgYmUgY29waWVkIHZlcmJhdGltIGFzCisgICAg
ICAgICAgICB0aGV5IGFyZSBhc3N1bWVkIHRvIGJlIHBhcnQgb2YgbXVsdGlsaW5lcy4KKyAgICAg
ICAgIiIiCisgICAgICAgICMgWFhYIG1heWJlIHVzZSB0aGUgdG9rZW5pemVyIHRvIHByb3Blcmx5
IGhhbmRsZSBtdWx0aWxpbmUKKyAgICAgICAgIyAgICAgc3RyaW5ncyBldGMucHA/CisgICAgICAg
IG5ld3NvdXJjZSA9IFNvdXJjZSgpCisgICAgICAgIG5ld3NvdXJjZS5saW5lc1s6XSA9IGRlaW5k
ZW50KHNlbGYubGluZXMsIG9mZnNldCkKKyAgICAgICAgcmV0dXJuIG5ld3NvdXJjZQorCisgICAg
ZGVmIGlzcGFyc2VhYmxlKHNlbGYsIGRlaW5kZW50PVRydWUpOgorICAgICAgICAiIiIgcmV0dXJu
IFRydWUgaWYgc291cmNlIGlzIHBhcnNlYWJsZSwgaGV1cmlzdGljYWxseQorICAgICAgICAgICAg
ZGVpbmRlbnRpbmcgaXQgYnkgZGVmYXVsdC4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAg
ICAgICAgICAgIGltcG9ydCBwYXJzZXIKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAg
ICAgICAgICAgc3ludGF4X2NoZWNrZXIgPSBsYW1iZGEgeDogY29tcGlsZSh4LCAnYXNkJywgJ2V4
ZWMnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3ludGF4X2NoZWNrZXIgPSBwYXJzZXIu
c3VpdGUKKworICAgICAgICBpZiBkZWluZGVudDoKKyAgICAgICAgICAgIHNvdXJjZSA9IHN0cihz
ZWxmLmRlaW5kZW50KCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzb3VyY2UgPSBzdHIo
c2VsZikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgI2NvbXBpbGUoc291cmNlKydcbicsICJ4
IiwgImV4ZWMiKQorICAgICAgICAgICAgc3ludGF4X2NoZWNrZXIoc291cmNlKydcbicpCisgICAg
ICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAg
IGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAg
ICAgICAgcmV0dXJuICJcbiIuam9pbihzZWxmLmxpbmVzKQorCisgICAgZGVmIGNvbXBpbGUoc2Vs
ZiwgZmlsZW5hbWU9Tm9uZSwgbW9kZT0nZXhlYycsCisgICAgICAgICAgICAgICAgZmxhZz1nZW5l
cmF0b3JzLmNvbXBpbGVyX2ZsYWcsCisgICAgICAgICAgICAgICAgZG9udF9pbmhlcml0PTAsIF9n
ZW5mcmFtZT1Ob25lKToKKyAgICAgICAgIiIiIHJldHVybiBjb21waWxlZCBjb2RlIG9iamVjdC4g
aWYgZmlsZW5hbWUgaXMgTm9uZQorICAgICAgICAgICAgaW52ZW50IGFuIGFydGlmaWNpYWwgZmls
ZW5hbWUgd2hpY2ggZGlzcGxheXMKKyAgICAgICAgICAgIHRoZSBzb3VyY2UvbGluZSBwb3NpdGlv
biBvZiB0aGUgY2FsbGVyIGZyYW1lLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IGZpbGVu
YW1lIG9yIHB5LnBhdGgubG9jYWwoZmlsZW5hbWUpLmNoZWNrKGZpbGU9MCk6CisgICAgICAgICAg
ICBpZiBfZ2VuZnJhbWUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBfZ2VuZnJhbWUgPSBzeXMu
X2dldGZyYW1lKDEpICMgdGhlIGNhbGxlcgorICAgICAgICAgICAgZm4sbGluZW5vID0gX2dlbmZy
YW1lLmZfY29kZS5jb19maWxlbmFtZSwgX2dlbmZyYW1lLmZfbGluZW5vCisgICAgICAgICAgICBi
YXNlID0gIjwlZC1jb2RlZ2VuICIgJSBzZWxmLl9jb21waWxlY291bnRlcgorICAgICAgICAgICAg
c2VsZi5fX2NsYXNzX18uX2NvbXBpbGVjb3VudGVyICs9IDEKKyAgICAgICAgICAgIGlmIG5vdCBm
aWxlbmFtZToKKyAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IGJhc2UgKyAnJXM6JWQ+JyAlIChm
biwgbGluZW5vKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmaWxlbmFtZSA9
IGJhc2UgKyAnJXIgJXM6JWQ+JyAlIChmaWxlbmFtZSwgZm4sIGxpbmVubykKKyAgICAgICAgc291
cmNlID0gIlxuIi5qb2luKHNlbGYubGluZXMpICsgJ1xuJworICAgICAgICB0cnk6CisgICAgICAg
ICAgICBjbyA9IGNweV9jb21waWxlKHNvdXJjZSwgZmlsZW5hbWUsIG1vZGUsIGZsYWcpCisgICAg
ICAgIGV4Y2VwdCBTeW50YXhFcnJvcjoKKyAgICAgICAgICAgIGV4ID0gc3lzLmV4Y19pbmZvKClb
MV0KKyAgICAgICAgICAgICMgcmUtcmVwcmVzZW50IHN5bnRheCBlcnJvcnMgZnJvbSBwYXJzaW5n
IHB5dGhvbiBzdHJpbmdzCisgICAgICAgICAgICBtc2dsaW5lcyA9IHNlbGYubGluZXNbOmV4Lmxp
bmVub10KKyAgICAgICAgICAgIGlmIGV4Lm9mZnNldDoKKyAgICAgICAgICAgICAgICBtc2dsaW5l
cy5hcHBlbmQoIiAiKmV4Lm9mZnNldCArICdeJykKKyAgICAgICAgICAgIG1zZ2xpbmVzLmFwcGVu
ZCgiKGNvZGUgd2FzIGNvbXBpbGVkIHByb2JhYmx5IGZyb20gaGVyZTogJXMpIiAlIGZpbGVuYW1l
KQorICAgICAgICAgICAgbmV3ZXggPSBTeW50YXhFcnJvcignXG4nLmpvaW4obXNnbGluZXMpKQor
ICAgICAgICAgICAgbmV3ZXgub2Zmc2V0ID0gZXgub2Zmc2V0CisgICAgICAgICAgICBuZXdleC5s
aW5lbm8gPSBleC5saW5lbm8KKyAgICAgICAgICAgIG5ld2V4LnRleHQgPSBleC50ZXh0CisgICAg
ICAgICAgICByYWlzZSBuZXdleAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgZmxhZyAm
IF9BU1RfRkxBRzoKKyAgICAgICAgICAgICAgICByZXR1cm4gY28KKyAgICAgICAgICAgIGxpbmVz
ID0gWyh4ICsgIlxuIikgZm9yIHggaW4gc2VsZi5saW5lc10KKyAgICAgICAgICAgIGlmIHN5cy52
ZXJzaW9uX2luZm9bMF0gPj0gMzoKKyAgICAgICAgICAgICAgICAjIFhYWCBweTMncyBpbnNwZWN0
LmdldHNvdXJjZWZpbGUoKSBjaGVja3MgZm9yIGEgbW9kdWxlCisgICAgICAgICAgICAgICAgIyBh
bmQgYSBwZXAzMDIgX19sb2FkZXJfXyAuLi4gd2UgZG9uJ3QgaGF2ZSBhIG1vZHVsZQorICAgICAg
ICAgICAgICAgICMgYXQgY29kZSBjb21waWxlLXRpbWUgc28gd2UgbmVlZCB0byBmYWtlIGl0IGhl
cmUKKyAgICAgICAgICAgICAgICBtID0gTW9kdWxlVHlwZSgiX3B5Y29kZWNvbXBpbGVfcHNldWRv
X21vZHVsZSIpCisgICAgICAgICAgICAgICAgcHkuc3RkLmluc3BlY3QubW9kdWxlc2J5ZmlsZVtm
aWxlbmFtZV0gPSBOb25lCisgICAgICAgICAgICAgICAgcHkuc3RkLnN5cy5tb2R1bGVzW05vbmVd
ID0gbQorICAgICAgICAgICAgICAgIG0uX19sb2FkZXJfXyA9IDEKKyAgICAgICAgICAgIHB5LnN0
ZC5saW5lY2FjaGUuY2FjaGVbZmlsZW5hbWVdID0gKDEsIE5vbmUsIGxpbmVzLCBmaWxlbmFtZSkK
KyAgICAgICAgICAgIHJldHVybiBjbworCisjCisjIHB1YmxpYyBBUEkgc2hvcnRjdXQgZnVuY3Rp
b25zCisjCisKK2RlZiBjb21waWxlXyhzb3VyY2UsIGZpbGVuYW1lPU5vbmUsIG1vZGU9J2V4ZWMn
LCBmbGFncz0KKyAgICAgICAgICAgIGdlbmVyYXRvcnMuY29tcGlsZXJfZmxhZywgZG9udF9pbmhl
cml0PTApOgorICAgICIiIiBjb21waWxlIHRoZSBnaXZlbiBzb3VyY2UgdG8gYSByYXcgY29kZSBv
YmplY3QsCisgICAgICAgIGFuZCBtYWludGFpbiBhbiBpbnRlcm5hbCBjYWNoZSB3aGljaCBhbGxv
d3MgbGF0ZXIKKyAgICAgICAgcmV0cmlldmFsIG9mIHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlIGNv
ZGUgb2JqZWN0CisgICAgICAgIGFuZCBhbnkgcmVjdXJzaXZlbHkgY3JlYXRlZCBjb2RlIG9iamVj
dHMuCisgICAgIiIiCisgICAgaWYgX2FzdCBpcyBub3QgTm9uZSBhbmQgaXNpbnN0YW5jZShzb3Vy
Y2UsIF9hc3QuQVNUKToKKyAgICAgICAgIyBYWFggc2hvdWxkIFNvdXJjZSBzdXBwb3J0IGhhdmlu
ZyBBU1Q/CisgICAgICAgIHJldHVybiBjcHlfY29tcGlsZShzb3VyY2UsIGZpbGVuYW1lLCBtb2Rl
LCBmbGFncywgZG9udF9pbmhlcml0KQorICAgIF9nZW5mcmFtZSA9IHN5cy5fZ2V0ZnJhbWUoMSkg
IyB0aGUgY2FsbGVyCisgICAgcyA9IFNvdXJjZShzb3VyY2UpCisgICAgY28gPSBzLmNvbXBpbGUo
ZmlsZW5hbWUsIG1vZGUsIGZsYWdzLCBfZ2VuZnJhbWU9X2dlbmZyYW1lKQorICAgIHJldHVybiBj
bworCisKK2RlZiBnZXRmc2xpbmVubyhvYmopOgorICAgICIiIiBSZXR1cm4gc291cmNlIGxvY2F0
aW9uIChwYXRoLCBsaW5lbm8pIGZvciB0aGUgZ2l2ZW4gb2JqZWN0LgorICAgIElmIHRoZSBzb3Vy
Y2UgY2Fubm90IGJlIGRldGVybWluZWQgcmV0dXJuICgiIiwgLTEpCisgICAgIiIiCisgICAgaW1w
b3J0IF9weXRlc3QuX2NvZGUKKyAgICB0cnk6CisgICAgICAgIGNvZGUgPSBfcHl0ZXN0Ll9jb2Rl
LkNvZGUob2JqKQorICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgIHRyeToKKyAgICAgICAg
ICAgIGZuID0gKHB5LnN0ZC5pbnNwZWN0LmdldHNvdXJjZWZpbGUob2JqKSBvcgorICAgICAgICAg
ICAgICAgICAgcHkuc3RkLmluc3BlY3QuZ2V0ZmlsZShvYmopKQorICAgICAgICBleGNlcHQgVHlw
ZUVycm9yOgorICAgICAgICAgICAgcmV0dXJuICIiLCAtMQorCisgICAgICAgIGZzcGF0aCA9IGZu
IGFuZCBweS5wYXRoLmxvY2FsKGZuKSBvciBOb25lCisgICAgICAgIGxpbmVubyA9IC0xCisgICAg
ICAgIGlmIGZzcGF0aDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBfLCBsaW5l
bm8gPSBmaW5kc291cmNlKG9iaikKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAg
ICAgICAgICAgIHBhc3MKKyAgICBlbHNlOgorICAgICAgICBmc3BhdGggPSBjb2RlLnBhdGgKKyAg
ICAgICAgbGluZW5vID0gY29kZS5maXJzdGxpbmVubworICAgIGFzc2VydCBpc2luc3RhbmNlKGxp
bmVubywgaW50KQorICAgIHJldHVybiBmc3BhdGgsIGxpbmVubworCisjCisjIGhlbHBlciBmdW5j
dGlvbnMKKyMKKworZGVmIGZpbmRzb3VyY2Uob2JqKToKKyAgICB0cnk6CisgICAgICAgIHNvdXJj
ZWxpbmVzLCBsaW5lbm8gPSBweS5zdGQuaW5zcGVjdC5maW5kc291cmNlKG9iaikKKyAgICBleGNl
cHQgcHkuYnVpbHRpbi5fc3lzZXg6CisgICAgICAgIHJhaXNlCisgICAgZXhjZXB0OgorICAgICAg
ICByZXR1cm4gTm9uZSwgLTEKKyAgICBzb3VyY2UgPSBTb3VyY2UoKQorICAgIHNvdXJjZS5saW5l
cyA9IFtsaW5lLnJzdHJpcCgpIGZvciBsaW5lIGluIHNvdXJjZWxpbmVzXQorICAgIHJldHVybiBz
b3VyY2UsIGxpbmVubworCitkZWYgZ2V0c291cmNlKG9iaiwgKiprd2FyZ3MpOgorICAgIGltcG9y
dCBfcHl0ZXN0Ll9jb2RlCisgICAgb2JqID0gX3B5dGVzdC5fY29kZS5nZXRyYXdjb2RlKG9iaikK
KyAgICB0cnk6CisgICAgICAgIHN0cnNyYyA9IGluc3BlY3QuZ2V0c291cmNlKG9iaikKKyAgICBl
eGNlcHQgSW5kZW50YXRpb25FcnJvcjoKKyAgICAgICAgc3Ryc3JjID0gIlwiQnVnZ3kgcHl0aG9u
IHZlcnNpb24gY29uc2lkZXIgdXBncmFkaW5nLCBjYW5ub3QgZ2V0IHNvdXJjZVwiIgorICAgIGFz
c2VydCBpc2luc3RhbmNlKHN0cnNyYywgc3RyKQorICAgIHJldHVybiBTb3VyY2Uoc3Ryc3JjLCAq
Kmt3YXJncykKKworZGVmIGRlaW5kZW50KGxpbmVzLCBvZmZzZXQ9Tm9uZSk6CisgICAgaWYgb2Zm
c2V0IGlzIE5vbmU6CisgICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICAgICAgbGlu
ZSA9IGxpbmUuZXhwYW5kdGFicygpCisgICAgICAgICAgICBzID0gbGluZS5sc3RyaXAoKQorICAg
ICAgICAgICAgaWYgczoKKyAgICAgICAgICAgICAgICBvZmZzZXQgPSBsZW4obGluZSktbGVuKHMp
CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9mZnNl
dCA9IDAKKyAgICBpZiBvZmZzZXQgPT0gMDoKKyAgICAgICAgcmV0dXJuIGxpc3QobGluZXMpCisg
ICAgbmV3bGluZXMgPSBbXQorICAgIGRlZiByZWFkbGluZV9nZW5lcmF0b3IobGluZXMpOgorICAg
ICAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgICAgIHlpZWxkIGxpbmUgKyAnXG4nCisg
ICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB5aWVsZCAnJworCisgICAgaXQgPSByZWFk
bGluZV9nZW5lcmF0b3IobGluZXMpCisKKyAgICB0cnk6CisgICAgICAgIGZvciBfLCBfLCAoc2xp
bmUsIF8pLCAoZWxpbmUsIF8pLCBfIGluIHRva2VuaXplLmdlbmVyYXRlX3Rva2VucyhsYW1iZGE6
IG5leHQoaXQpKToKKyAgICAgICAgICAgIGlmIHNsaW5lID4gbGVuKGxpbmVzKToKKyAgICAgICAg
ICAgICAgICBicmVhayAjIEVuZCBvZiBpbnB1dCByZWFjaGVkCisgICAgICAgICAgICBpZiBzbGlu
ZSA+IGxlbihuZXdsaW5lcyk6CisgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVzW3NsaW5lIC0g
MV0uZXhwYW5kdGFicygpCisgICAgICAgICAgICAgICAgaWYgbGluZS5sc3RyaXAoKSBhbmQgbGlu
ZVs6b2Zmc2V0XS5pc3NwYWNlKCk6CisgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lW29m
ZnNldDpdICMgRGVpbmRlbnQKKyAgICAgICAgICAgICAgICBuZXdsaW5lcy5hcHBlbmQobGluZSkK
KworICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uoc2xpbmUsIGVsaW5lKToKKyAgICAgICAgICAg
ICAgICAjIERvbid0IGRlaW5kZW50IGNvbnRpbnVpbmcgbGluZXMgb2YKKyAgICAgICAgICAgICAg
ICAjIG11bHRpbGluZSB0b2tlbnMgKGkuZS4gbXVsdGlsaW5lIHN0cmluZ3MpCisgICAgICAgICAg
ICAgICAgbmV3bGluZXMuYXBwZW5kKGxpbmVzW2ldKQorICAgIGV4Y2VwdCAoSW5kZW50YXRpb25F
cnJvciwgdG9rZW5pemUuVG9rZW5FcnJvcik6CisgICAgICAgIHBhc3MKKyAgICAjIEFkZCBhbnkg
bGluZXMgd2UgZGlkbid0IHNlZS4gRS5nLiBpZiBhbiBleGNlcHRpb24gd2FzIHJhaXNlZC4KKyAg
ICBuZXdsaW5lcy5leHRlbmQobGluZXNbbGVuKG5ld2xpbmVzKTpdKQorICAgIHJldHVybiBuZXds
aW5lcworCisKK2RlZiBnZXRfc3RhdGVtZW50X3N0YXJ0ZW5kMihsaW5lbm8sIG5vZGUpOgorICAg
IGltcG9ydCBhc3QKKyAgICAjIGZsYXR0ZW4gYWxsIHN0YXRlbWVudHMgYW5kIGV4Y2VwdCBoYW5k
bGVycyBpbnRvIG9uZSBsaW5lbm8tbGlzdAorICAgICMgQVNUJ3MgbGluZSBudW1iZXJzIHN0YXJ0
IGluZGV4aW5nIGF0IDEKKyAgICBsID0gW10KKyAgICBmb3IgeCBpbiBhc3Qud2Fsayhub2RlKToK
KyAgICAgICAgaWYgaXNpbnN0YW5jZSh4LCBfYXN0LnN0bXQpIG9yIGlzaW5zdGFuY2UoeCwgX2Fz
dC5FeGNlcHRIYW5kbGVyKToKKyAgICAgICAgICAgIGwuYXBwZW5kKHgubGluZW5vIC0gMSkKKyAg
ICAgICAgICAgIGZvciBuYW1lIGluICJmaW5hbGJvZHkiLCAib3JlbHNlIjoKKyAgICAgICAgICAg
ICAgICB2YWwgPSBnZXRhdHRyKHgsIG5hbWUsIE5vbmUpCisgICAgICAgICAgICAgICAgaWYgdmFs
OgorICAgICAgICAgICAgICAgICAgICAjIHRyZWF0IHRoZSBmaW5hbGx5L29yZWxzZSBwYXJ0IGFz
IGl0cyBvd24gc3RhdGVtZW50CisgICAgICAgICAgICAgICAgICAgIGwuYXBwZW5kKHZhbFswXS5s
aW5lbm8gLSAxIC0gMSkKKyAgICBsLnNvcnQoKQorICAgIGluc2VydF9pbmRleCA9IGJpc2VjdF9y
aWdodChsLCBsaW5lbm8pCisgICAgc3RhcnQgPSBsW2luc2VydF9pbmRleCAtIDFdCisgICAgaWYg
aW5zZXJ0X2luZGV4ID49IGxlbihsKToKKyAgICAgICAgZW5kID0gTm9uZQorICAgIGVsc2U6Cisg
ICAgICAgIGVuZCA9IGxbaW5zZXJ0X2luZGV4XQorICAgIHJldHVybiBzdGFydCwgZW5kCisKKwor
ZGVmIGdldHN0YXRlbWVudHJhbmdlX2FzdChsaW5lbm8sIHNvdXJjZSwgYXNzZXJ0aW9uPUZhbHNl
LCBhc3Rub2RlPU5vbmUpOgorICAgIGlmIGFzdG5vZGUgaXMgTm9uZToKKyAgICAgICAgY29udGVu
dCA9IHN0cihzb3VyY2UpCisgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiw3KToKKyAg
ICAgICAgICAgIGNvbnRlbnQgKz0gIlxuIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBhc3Ru
b2RlID0gY29tcGlsZShjb250ZW50LCAic291cmNlIiwgImV4ZWMiLCAxMDI0KSAgIyAxMDI0IGZv
ciBBU1QKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBzdGFydCwgZW5k
ID0gZ2V0c3RhdGVtZW50cmFuZ2Vfb2xkKGxpbmVubywgc291cmNlLCBhc3NlcnRpb24pCisgICAg
ICAgICAgICByZXR1cm4gTm9uZSwgc3RhcnQsIGVuZAorICAgIHN0YXJ0LCBlbmQgPSBnZXRfc3Rh
dGVtZW50X3N0YXJ0ZW5kMihsaW5lbm8sIGFzdG5vZGUpCisgICAgIyB3ZSBuZWVkIHRvIGNvcnJl
Y3QgdGhlIGVuZDoKKyAgICAjIC0gYXN0LXBhcnNpbmcgc3RyaXBzIGNvbW1lbnRzCisgICAgIyAt
IHRoZXJlIG1pZ2h0IGJlIGVtcHR5IGxpbmVzCisgICAgIyAtIHdlIG1pZ2h0IGhhdmUgbGVzc2Vy
IGluZGVudGVkIGNvZGUgYmxvY2tzIGF0IHRoZSBlbmQKKyAgICBpZiBlbmQgaXMgTm9uZToKKyAg
ICAgICAgZW5kID0gbGVuKHNvdXJjZS5saW5lcykKKworICAgIGlmIGVuZCA+IHN0YXJ0ICsgMToK
KyAgICAgICAgIyBtYWtlIHN1cmUgd2UgZG9uJ3Qgc3BhbiBkaWZmZXJlbnRseSBpbmRlbnRlZCBj
b2RlIGJsb2NrcworICAgICAgICAjIGJ5IHVzaW5nIHRoZSBCbG9ja0ZpbmRlciBoZWxwZXIgdXNl
ZCB3aGljaCBpbnNwZWN0LmdldHNvdXJjZSgpIHVzZXMgaXRzZWxmCisgICAgICAgIGJsb2NrX2Zp
bmRlciA9IGluc3BlY3QuQmxvY2tGaW5kZXIoKQorICAgICAgICAjIGlmIHdlIHN0YXJ0IHdpdGgg
YW4gaW5kZW50ZWQgbGluZSwgcHV0IGJsb2NrZmluZGVyIHRvICJzdGFydGVkIiBtb2RlCisgICAg
ICAgIGJsb2NrX2ZpbmRlci5zdGFydGVkID0gc291cmNlLmxpbmVzW3N0YXJ0XVswXS5pc3NwYWNl
KCkKKyAgICAgICAgaXQgPSAoKHggKyAiXG4iKSBmb3IgeCBpbiBzb3VyY2UubGluZXNbc3RhcnQ6
ZW5kXSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIHRvayBpbiB0b2tlbml6ZS5nZW5l
cmF0ZV90b2tlbnMobGFtYmRhOiBuZXh0KGl0KSk6CisgICAgICAgICAgICAgICAgYmxvY2tfZmlu
ZGVyLnRva2VuZWF0ZXIoKnRvaykKKyAgICAgICAgZXhjZXB0IChpbnNwZWN0LkVuZE9mQmxvY2ss
IEluZGVudGF0aW9uRXJyb3IpOgorICAgICAgICAgICAgZW5kID0gYmxvY2tfZmluZGVyLmxhc3Qg
KyBzdGFydAorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgcGFzcworCisg
ICAgIyB0aGUgZW5kIG1pZ2h0IHN0aWxsIHBvaW50IHRvIGEgY29tbWVudCBvciBlbXB0eSBsaW5l
LCBjb3JyZWN0IGl0CisgICAgd2hpbGUgZW5kOgorICAgICAgICBsaW5lID0gc291cmNlLmxpbmVz
W2VuZCAtIDFdLmxzdHJpcCgpCisgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiIyIpIG9yIG5v
dCBsaW5lOgorICAgICAgICAgICAgZW5kIC09IDEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg
IGJyZWFrCisgICAgcmV0dXJuIGFzdG5vZGUsIHN0YXJ0LCBlbmQKKworCitkZWYgZ2V0c3RhdGVt
ZW50cmFuZ2Vfb2xkKGxpbmVubywgc291cmNlLCBhc3NlcnRpb249RmFsc2UpOgorICAgICIiIiBy
ZXR1cm4gKHN0YXJ0LCBlbmQpIHR1cGxlIHdoaWNoIHNwYW5zIHRoZSBtaW5pbWFsCisgICAgICAg
IHN0YXRlbWVudCByZWdpb24gd2hpY2ggY29udGFpbmluZyB0aGUgZ2l2ZW4gbGluZW5vLgorICAg
ICAgICByYWlzZSBhbiBJbmRleEVycm9yIGlmIG5vIHN1Y2ggc3RhdGVtZW50cmFuZ2UgY2FuIGJl
IGZvdW5kLgorICAgICIiIgorICAgICMgWFhYIHRoaXMgbG9naWMgaXMgb25seSB1c2VkIG9uIHB5
dGhvbjIuNCBhbmQgYmVsb3cKKyAgICAjIDEuIGZpbmQgdGhlIHN0YXJ0IG9mIHRoZSBzdGF0ZW1l
bnQKKyAgICBmcm9tIGNvZGVvcCBpbXBvcnQgY29tcGlsZV9jb21tYW5kCisgICAgZm9yIHN0YXJ0
IGluIHJhbmdlKGxpbmVubywgLTEsIC0xKToKKyAgICAgICAgaWYgYXNzZXJ0aW9uOgorICAgICAg
ICAgICAgbGluZSA9IHNvdXJjZS5saW5lc1tzdGFydF0KKyAgICAgICAgICAgICMgdGhlIGZvbGxv
d2luZyBsaW5lcyBhcmUgbm90IGZ1bGx5IHRlc3RlZCwgY2hhbmdlIHdpdGggY2FyZQorICAgICAg
ICAgICAgaWYgJ3N1cGVyJyBpbiBsaW5lIGFuZCAnc2VsZicgaW4gbGluZSBhbmQgJ19faW5pdF9f
JyBpbiBsaW5lOgorICAgICAgICAgICAgICAgIHJhaXNlIEluZGV4RXJyb3IoImxpa2VseSBhIHN1
YmNsYXNzIikKKyAgICAgICAgICAgIGlmICJhc3NlcnQiIG5vdCBpbiBsaW5lIGFuZCAicmFpc2Ui
IG5vdCBpbiBsaW5lOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIHRyeWxpbmVz
ID0gc291cmNlLmxpbmVzW3N0YXJ0OmxpbmVubysxXQorICAgICAgICAjIHF1aWNrIGhhY2sgdG8g
cHJlcGFyZSBwYXJzaW5nIGFuIGluZGVudGVkIGxpbmUgd2l0aAorICAgICAgICAjIGNvbXBpbGVf
Y29tbWFuZCgpICh3aGljaCBlcnJvcnMgb24gInJldHVybiIgb3V0c2lkZSBkZWZzKQorICAgICAg
ICB0cnlsaW5lcy5pbnNlcnQoMCwgJ2RlZiB4eHgoKTonKQorICAgICAgICB0cnlzb3VyY2UgPSAn
XG4gJy5qb2luKHRyeWxpbmVzKQorICAgICAgICAjICAgICAgICAgICAgICBeIHNwYWNlIGhlcmUK
KyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29tcGlsZV9jb21tYW5kKHRyeXNvdXJjZSkKKyAg
ICAgICAgZXhjZXB0IChTeW50YXhFcnJvciwgT3ZlcmZsb3dFcnJvciwgVmFsdWVFcnJvcik6Cisg
ICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICMgMi4gZmluZCB0aGUgZW5kIG9mIHRoZSBz
dGF0ZW1lbnQKKyAgICAgICAgZm9yIGVuZCBpbiByYW5nZShsaW5lbm8rMSwgbGVuKHNvdXJjZSkr
MSk6CisgICAgICAgICAgICB0cnlzb3VyY2UgPSBzb3VyY2Vbc3RhcnQ6ZW5kXQorICAgICAgICAg
ICAgaWYgdHJ5c291cmNlLmlzcGFyc2VhYmxlKCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0
YXJ0LCBlbmQKKyAgICByYWlzZSBTeW50YXhFcnJvcigibm8gdmFsaWQgc291cmNlIHJhbmdlIGFy
b3VuZCBsaW5lICVkICIgJSAobGluZW5vLCkpCisKKwpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVz
dHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L19wbHVnZ3kucHkgYi9XZWJEcml2
ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvX3BsdWdneS5weQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uODdkMzJjZjhkZDEKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRl
c3QvX3BsdWdneS5weQpAQCAtMCwwICsxLDExIEBACisiIiIKK2ltcG9ydHMgc3ltYm9scyBmcm9t
IHZlbmRvcmVkICJwbHVnZ3kiIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlCitmYWxscyBiYWNrIHRv
IGltcG9ydGluZyAicGx1Z2d5IiBmcm9tIHRoZSBkZWZhdWx0IG5hbWVzcGFjZS4KKyIiIgorCit0
cnk6CisgICAgZnJvbSBfcHl0ZXN0LnZlbmRvcmVkX3BhY2thZ2VzLnBsdWdneSBpbXBvcnQgKiAg
IyBub3FhCisgICAgZnJvbSBfcHl0ZXN0LnZlbmRvcmVkX3BhY2thZ2VzLnBsdWdneSBpbXBvcnQg
X192ZXJzaW9uX18gICMgbm9xYQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGZyb20gcGx1Z2d5
IGltcG9ydCAqICAjIG5vcWEKKyAgICBmcm9tIHBsdWdneSBpbXBvcnQgX192ZXJzaW9uX18gICMg
bm9xYQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVz
dC9fcHl0ZXN0L2Fzc2VydGlvbi9fX2luaXRfXy5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVk
L3czYy90b29scy9weXRlc3QvX3B5dGVzdC9hc3NlcnRpb24vX19pbml0X18ucHkKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjY5MjFkZWIyYTYwCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L2Fz
c2VydGlvbi9fX2luaXRfXy5weQpAQCAtMCwwICsxLDE3NiBAQAorIiIiCitzdXBwb3J0IGZvciBw
cmVzZW50aW5nIGRldGFpbGVkIGluZm9ybWF0aW9uIGluIGZhaWxpbmcgYXNzZXJ0aW9ucy4KKyIi
IgoraW1wb3J0IHB5CitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2Zyb20gX3B5dGVzdC5tb25rZXlw
YXRjaCBpbXBvcnQgbW9ua2V5cGF0Y2gKK2Zyb20gX3B5dGVzdC5hc3NlcnRpb24gaW1wb3J0IHV0
aWwKKworCitkZWYgcHl0ZXN0X2FkZG9wdGlvbihwYXJzZXIpOgorICAgIGdyb3VwID0gcGFyc2Vy
LmdldGdyb3VwKCJkZWJ1Z2NvbmZpZyIpCisgICAgZ3JvdXAuYWRkb3B0aW9uKCctLWFzc2VydCcs
CisgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmUiLAorICAgICAgICAgICAgICAgICAg
ICBkZXN0PSJhc3NlcnRtb2RlIiwKKyAgICAgICAgICAgICAgICAgICAgY2hvaWNlcz0oInJld3Jp
dGUiLCAicmVpbnRlcnAiLCAicGxhaW4iLCksCisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9
InJld3JpdGUiLAorICAgICAgICAgICAgICAgICAgICBtZXRhdmFyPSJNT0RFIiwKKyAgICAgICAg
ICAgICAgICAgICAgaGVscD0iIiJjb250cm9sIGFzc2VydGlvbiBkZWJ1Z2dpbmcgdG9vbHMuICAn
cGxhaW4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyZm9ybXMgbm8gYXNzZXJ0aW9u
IGRlYnVnZ2luZy4gICdyZWludGVycCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWlu
dGVycHJldHMgYXNzZXJ0IHN0YXRlbWVudHMgYWZ0ZXIgdGhleSBmYWlsZWQKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0byBwcm92aWRlIGFzc2VydGlvbiBleHByZXNzaW9uIGluZm9ybWF0
aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZXdyaXRlJyAodGhlIGRlZmF1bHQp
IHJld3JpdGVzIGFzc2VydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudHMg
aW4gdGVzdCBtb2R1bGVzIG9uIGltcG9ydCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHByb3ZpZGUgYXNzZXJ0IGV4cHJlc3Npb24gaW5mb3JtYXRpb24uICIiIikKKyAgICBncm91cC5h
ZGRvcHRpb24oJy0tbm8tYXNzZXJ0JywKKyAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9y
ZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAg
ICAgICAgICAgZGVzdD0ibm9hc3NlcnQiLAorICAgICAgICAgICAgICAgICAgICBoZWxwPSJERVBS
RUNBVEVEIGVxdWl2YWxlbnQgdG8gLS1hc3NlcnQ9cGxhaW4iKQorICAgIGdyb3VwLmFkZG9wdGlv
bignLS1ub21hZ2ljJywgJy0tbm8tbWFnaWMnLAorICAgICAgICAgICAgICAgICAgICBhY3Rpb249
InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlLAorICAgICAg
ICAgICAgICAgICAgICBoZWxwPSJERVBSRUNBVEVEIGVxdWl2YWxlbnQgdG8gLS1hc3NlcnQ9cGxh
aW4iKQorCisKK2NsYXNzIEFzc2VydGlvblN0YXRlOgorICAgICIiIlN0YXRlIGZvciB0aGUgYXNz
ZXJ0aW9uIHBsdWdpbi4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25maWcsIG1vZGUp
OgorICAgICAgICBzZWxmLm1vZGUgPSBtb2RlCisgICAgICAgIHNlbGYudHJhY2UgPSBjb25maWcu
dHJhY2Uucm9vdC5nZXQoImFzc2VydGlvbiIpCisKKworZGVmIHB5dGVzdF9jb25maWd1cmUoY29u
ZmlnKToKKyAgICBtb2RlID0gY29uZmlnLmdldHZhbHVlKCJhc3NlcnRtb2RlIikKKyAgICBpZiBj
b25maWcuZ2V0dmFsdWUoIm5vYXNzZXJ0Iikgb3IgY29uZmlnLmdldHZhbHVlKCJub21hZ2ljIik6
CisgICAgICAgIG1vZGUgPSAicGxhaW4iCisgICAgaWYgbW9kZSA9PSAicmV3cml0ZSI6CisgICAg
ICAgIHRyeToKKyAgICAgICAgICAgIGltcG9ydCBhc3QgICMgbm9xYQorICAgICAgICBleGNlcHQg
SW1wb3J0RXJyb3I6CisgICAgICAgICAgICBtb2RlID0gInJlaW50ZXJwIgorICAgICAgICBlbHNl
OgorICAgICAgICAgICAgIyBCb3RoIEp5dGhvbiBhbmQgQ1B5dGhvbiAyLjYuMCBoYXZlIEFTVCBi
dWdzIHRoYXQgbWFrZSB0aGUKKyAgICAgICAgICAgICMgYXNzZXJ0aW9uIHJld3JpdGluZyBob29r
IG1hbGZ1bmN0aW9uLgorICAgICAgICAgICAgaWYgKHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCdq
YXZhJykgb3IKKyAgICAgICAgICAgICAgICAgICAgc3lzLnZlcnNpb25faW5mb1s6M10gPT0gKDIs
IDYsIDApKToKKyAgICAgICAgICAgICAgICBtb2RlID0gInJlaW50ZXJwIgorICAgIGlmIG1vZGUg
IT0gInBsYWluIjoKKyAgICAgICAgX2xvYWRfbW9kdWxlcyhtb2RlKQorICAgICAgICBtID0gbW9u
a2V5cGF0Y2goKQorICAgICAgICBjb25maWcuX2NsZWFudXAuYXBwZW5kKG0udW5kbykKKyAgICAg
ICAgbS5zZXRhdHRyKHB5LmJ1aWx0aW4uYnVpbHRpbnMsICdBc3NlcnRpb25FcnJvcicsCisgICAg
ICAgICAgICAgICAgICByZWludGVycHJldC5Bc3NlcnRpb25FcnJvcikgICMgbm9xYQorICAgIGhv
b2sgPSBOb25lCisgICAgaWYgbW9kZSA9PSAicmV3cml0ZSI6CisgICAgICAgIGhvb2sgPSByZXdy
aXRlLkFzc2VydGlvblJld3JpdGluZ0hvb2soKSAgIyBub3FhCisgICAgICAgIHN5cy5tZXRhX3Bh
dGguaW5zZXJ0KDAsIGhvb2spCisgICAgd2Fybl9hYm91dF9taXNzaW5nX2Fzc2VydGlvbihtb2Rl
KQorICAgIGNvbmZpZy5fYXNzZXJ0c3RhdGUgPSBBc3NlcnRpb25TdGF0ZShjb25maWcsIG1vZGUp
CisgICAgY29uZmlnLl9hc3NlcnRzdGF0ZS5ob29rID0gaG9vaworICAgIGNvbmZpZy5fYXNzZXJ0
c3RhdGUudHJhY2UoImNvbmZpZ3VyZWQgd2l0aCBtb2RlIHNldCB0byAlciIgJSAobW9kZSwpKQor
ICAgIGRlZiB1bmRvKCk6CisgICAgICAgIGhvb2sgPSBjb25maWcuX2Fzc2VydHN0YXRlLmhvb2sK
KyAgICAgICAgaWYgaG9vayBpcyBub3QgTm9uZSBhbmQgaG9vayBpbiBzeXMubWV0YV9wYXRoOgor
ICAgICAgICAgICAgc3lzLm1ldGFfcGF0aC5yZW1vdmUoaG9vaykKKyAgICBjb25maWcuYWRkX2Ns
ZWFudXAodW5kbykKKworCitkZWYgcHl0ZXN0X2NvbGxlY3Rpb24oc2Vzc2lvbik6CisgICAgIyB0
aGlzIGhvb2sgaXMgb25seSBjYWxsZWQgd2hlbiB0ZXN0IG1vZHVsZXMgYXJlIGNvbGxlY3RlZAor
ICAgICMgc28gZm9yIGV4YW1wbGUgbm90IGluIHRoZSBtYXN0ZXIgcHJvY2VzcyBvZiBweXRlc3Qt
eGRpc3QKKyAgICAjICh3aGljaCBkb2VzIG5vdCBjb2xsZWN0IHRlc3QgbW9kdWxlcykKKyAgICBo
b29rID0gc2Vzc2lvbi5jb25maWcuX2Fzc2VydHN0YXRlLmhvb2sKKyAgICBpZiBob29rIGlzIG5v
dCBOb25lOgorICAgICAgICBob29rLnNldF9zZXNzaW9uKHNlc3Npb24pCisKKworZGVmIF9ydW5u
aW5nX29uX2NpKCk6CisgICAgIiIiQ2hlY2sgaWYgd2UncmUgY3VycmVudGx5IHJ1bm5pbmcgb24g
YSBDSSBzeXN0ZW0uIiIiCisgICAgZW52X3ZhcnMgPSBbJ0NJJywgJ0JVSUxEX05VTUJFUiddCisg
ICAgcmV0dXJuIGFueSh2YXIgaW4gb3MuZW52aXJvbiBmb3IgdmFyIGluIGVudl92YXJzKQorCisK
K2RlZiBweXRlc3RfcnVudGVzdF9zZXR1cChpdGVtKToKKyAgICAiIiJTZXR1cCB0aGUgcHl0ZXN0
X2Fzc2VydHJlcHJfY29tcGFyZSBob29rCisKKyAgICBUaGUgbmV3aW50ZXJwcmV0IGFuZCByZXdy
aXRlIG1vZHVsZXMgd2lsbCB1c2UgdXRpbC5fcmVwcmNvbXBhcmUgaWYKKyAgICBpdCBleGlzdHMg
dG8gdXNlIGN1c3RvbSByZXBvcnRpbmcgdmlhIHRoZQorICAgIHB5dGVzdF9hc3NlcnRyZXByX2Nv
bXBhcmUgaG9vay4gIFRoaXMgc2V0cyB1cCB0aGlzIGN1c3RvbQorICAgIGNvbXBhcmlzb24gZm9y
IHRoZSB0ZXN0LgorICAgICIiIgorICAgIGRlZiBjYWxsYmlucmVwcihvcCwgbGVmdCwgcmlnaHQp
OgorICAgICAgICAiIiJDYWxsIHRoZSBweXRlc3RfYXNzZXJ0cmVwcl9jb21wYXJlIGhvb2sgYW5k
IHByZXBhcmUgdGhlIHJlc3VsdAorCisgICAgICAgIFRoaXMgdXNlcyB0aGUgZmlyc3QgcmVzdWx0
IGZyb20gdGhlIGhvb2sgYW5kIHRoZW4gZW5zdXJlcyB0aGUKKyAgICAgICAgZm9sbG93aW5nOgor
ICAgICAgICAqIE92ZXJseSB2ZXJib3NlIGV4cGxhbmF0aW9ucyBhcmUgZHJvcHBlZCB1bmxlc3Mg
LXZ2IHdhcyB1c2VkIG9yCisgICAgICAgICAgcnVubmluZyBvbiBhIENJLgorICAgICAgICAqIEVt
YmVkZGVkIG5ld2xpbmVzIGFyZSBlc2NhcGVkIHRvIGhlbHAgdXRpbC5mb3JtYXRfZXhwbGFuYXRp
b24oKQorICAgICAgICAgIGxhdGVyLgorICAgICAgICAqIElmIHRoZSByZXdyaXRlIG1vZGUgaXMg
dXNlZCBlbWJlZGRlZCAlLWNoYXJhY3RlcnMgYXJlIHJlcGxhY2VkCisgICAgICAgICAgdG8gcHJv
dGVjdCBsYXRlciAlIGZvcm1hdHRpbmcuCisKKyAgICAgICAgVGhlIHJlc3VsdCBjYW4gYmUgZm9y
bWF0dGVkIGJ5IHV0aWwuZm9ybWF0X2V4cGxhbmF0aW9uKCkgZm9yCisgICAgICAgIHByZXR0eSBw
cmludGluZy4KKyAgICAgICAgIiIiCisgICAgICAgIGhvb2tfcmVzdWx0ID0gaXRlbS5paG9vay5w
eXRlc3RfYXNzZXJ0cmVwcl9jb21wYXJlKAorICAgICAgICAgICAgY29uZmlnPWl0ZW0uY29uZmln
LCBvcD1vcCwgbGVmdD1sZWZ0LCByaWdodD1yaWdodCkKKyAgICAgICAgZm9yIG5ld19leHBsIGlu
IGhvb2tfcmVzdWx0OgorICAgICAgICAgICAgaWYgbmV3X2V4cGw6CisgICAgICAgICAgICAgICAg
aWYgKHN1bShsZW4ocCkgZm9yIHAgaW4gbmV3X2V4cGxbMTpdKSA+IDgwKjggYW5kCisgICAgICAg
ICAgICAgICAgICAgICAgICBpdGVtLmNvbmZpZy5vcHRpb24udmVyYm9zZSA8IDIgYW5kCisgICAg
ICAgICAgICAgICAgICAgICAgICBub3QgX3J1bm5pbmdfb25fY2koKSk6CisgICAgICAgICAgICAg
ICAgICAgIHNob3dfbWF4ID0gMTAKKyAgICAgICAgICAgICAgICAgICAgdHJ1bmNhdGVkX2xpbmVz
ID0gbGVuKG5ld19leHBsKSAtIHNob3dfbWF4CisgICAgICAgICAgICAgICAgICAgIG5ld19leHBs
W3Nob3dfbWF4Ol0gPSBbcHkuYnVpbHRpbi5fdG90ZXh0KAorICAgICAgICAgICAgICAgICAgICAg
ICAgJ0RldGFpbGVkIGluZm9ybWF0aW9uIHRydW5jYXRlZCAoJWQgbW9yZSBsaW5lcyknCisgICAg
ICAgICAgICAgICAgICAgICAgICAnLCB1c2UgIi12diIgdG8gc2hvdycgJSB0cnVuY2F0ZWRfbGlu
ZXMpXQorICAgICAgICAgICAgICAgIG5ld19leHBsID0gW2xpbmUucmVwbGFjZSgiXG4iLCAiXFxu
IikgZm9yIGxpbmUgaW4gbmV3X2V4cGxdCisgICAgICAgICAgICAgICAgcmVzID0gcHkuYnVpbHRp
bi5fdG90ZXh0KCJcbn4iKS5qb2luKG5ld19leHBsKQorICAgICAgICAgICAgICAgIGlmIGl0ZW0u
Y29uZmlnLmdldHZhbHVlKCJhc3NlcnRtb2RlIikgPT0gInJld3JpdGUiOgorICAgICAgICAgICAg
ICAgICAgICByZXMgPSByZXMucmVwbGFjZSgiJSIsICIlJSIpCisgICAgICAgICAgICAgICAgcmV0
dXJuIHJlcworICAgIHV0aWwuX3JlcHJjb21wYXJlID0gY2FsbGJpbnJlcHIKKworCitkZWYgcHl0
ZXN0X3J1bnRlc3RfdGVhcmRvd24oaXRlbSk6CisgICAgdXRpbC5fcmVwcmNvbXBhcmUgPSBOb25l
CisKKworZGVmIHB5dGVzdF9zZXNzaW9uZmluaXNoKHNlc3Npb24pOgorICAgIGhvb2sgPSBzZXNz
aW9uLmNvbmZpZy5fYXNzZXJ0c3RhdGUuaG9vaworICAgIGlmIGhvb2sgaXMgbm90IE5vbmU6Cisg
ICAgICAgIGhvb2suc2Vzc2lvbiA9IE5vbmUKKworCitkZWYgX2xvYWRfbW9kdWxlcyhtb2RlKToK
KyAgICAiIiJMYXppbHkgaW1wb3J0IGFzc2VydGlvbiByZWxhdGVkIGNvZGUuIiIiCisgICAgZ2xv
YmFsIHJld3JpdGUsIHJlaW50ZXJwcmV0CisgICAgZnJvbSBfcHl0ZXN0LmFzc2VydGlvbiBpbXBv
cnQgcmVpbnRlcnByZXQgICMgbm9xYQorICAgIGlmIG1vZGUgPT0gInJld3JpdGUiOgorICAgICAg
ICBmcm9tIF9weXRlc3QuYXNzZXJ0aW9uIGltcG9ydCByZXdyaXRlICAjIG5vcWEKKworCitkZWYg
d2Fybl9hYm91dF9taXNzaW5nX2Fzc2VydGlvbihtb2RlKToKKyAgICB0cnk6CisgICAgICAgIGFz
c2VydCBGYWxzZQorICAgIGV4Y2VwdCBBc3NlcnRpb25FcnJvcjoKKyAgICAgICAgcGFzcworICAg
IGVsc2U6CisgICAgICAgIGlmIG1vZGUgPT0gInJld3JpdGUiOgorICAgICAgICAgICAgc3BlY2lm
aWNhbGx5ID0gKCJhc3NlcnRpb25zIHdoaWNoIGFyZSBub3QgaW4gdGVzdCBtb2R1bGVzICIKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAid2lsbCBiZSBpZ25vcmVkIikKKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIHNwZWNpZmljYWxseSA9ICJmYWlsaW5nIHRlc3RzIG1heSByZXBvcnQg
YXMgcGFzc2luZyIKKworICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJXQVJOSU5HOiAiICsgc3Bl
Y2lmaWNhbGx5ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAiIGJlY2F1c2UgYXNzZXJ0IHN0
YXRlbWVudHMgYXJlIG5vdCBleGVjdXRlZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgImJ5
IHRoZSB1bmRlcmx5aW5nIFB5dGhvbiBpbnRlcnByZXRlciAiCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIihhcmUgeW91IHVzaW5nIHB5dGhvbiAtTz8pXG4iKQorCisKKyMgRXhwb3NlIHRoaXMg
cGx1Z2luJ3MgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBweXRlc3RfYXNzZXJ0cmVwcl9jb21wYXJl
IGhvb2sKK3B5dGVzdF9hc3NlcnRyZXByX2NvbXBhcmUgPSB1dGlsLmFzc2VydHJlcHJfY29tcGFy
ZQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9f
cHl0ZXN0L2Fzc2VydGlvbi9yZWludGVycHJldC5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVk
L3czYy90b29scy9weXRlc3QvX3B5dGVzdC9hc3NlcnRpb24vcmVpbnRlcnByZXQucHkKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmY0MjYyYzNhY2VkCi0tLSAvZGV2L251
bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0
L2Fzc2VydGlvbi9yZWludGVycHJldC5weQpAQCAtMCwwICsxLDQwNyBAQAorIiIiCitGaW5kIGlu
dGVybWVkaWF0ZSBldmFsdXRhdGlvbiByZXN1bHRzIGluIGFzc2VydCBzdGF0ZW1lbnRzIHRocm91
Z2ggYnVpbHRpbiBBU1QuCisiIiIKK2ltcG9ydCBhc3QKK2ltcG9ydCBzeXMKKworaW1wb3J0IF9w
eXRlc3QuX2NvZGUKK2ltcG9ydCBweQorZnJvbSBfcHl0ZXN0LmFzc2VydGlvbiBpbXBvcnQgdXRp
bAordSA9IHB5LmJ1aWx0aW4uX3RvdGV4dAorCisKK2NsYXNzIEFzc2VydGlvbkVycm9yKHV0aWwu
QnVpbHRpbkFzc2VydGlvbkVycm9yKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MpOgor
ICAgICAgICB1dGlsLkJ1aWx0aW5Bc3NlcnRpb25FcnJvci5fX2luaXRfXyhzZWxmLCAqYXJncykK
KyAgICAgICAgaWYgYXJnczoKKyAgICAgICAgICAgICMgb24gUHl0aG9uMi42IHdlIGdldCBsZW4o
YXJncyk9PTIgZm9yOiBhc3NlcnQgMCwgKHgseSkKKyAgICAgICAgICAgICMgb24gUHl0aG9uMi43
IGFuZCBhYm92ZSB3ZSBhbHdheXMgZ2V0IGxlbihhcmdzKSA9PSAxCisgICAgICAgICAgICAjIHdp
dGggYXJnc1swXSBiZWluZyB0aGUgKHgseSkgdHVwbGUuCisgICAgICAgICAgICBpZiBsZW4oYXJn
cykgPiAxOgorICAgICAgICAgICAgICAgIHRvcHJpbnQgPSBhcmdzCisgICAgICAgICAgICBlbHNl
OgorICAgICAgICAgICAgICAgIHRvcHJpbnQgPSBhcmdzWzBdCisgICAgICAgICAgICB0cnk6Cisg
ICAgICAgICAgICAgICAgc2VsZi5tc2cgPSB1KHRvcHJpbnQpCisgICAgICAgICAgICBleGNlcHQg
RXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIHNlbGYubXNnID0gdSgKKyAgICAgICAgICAgICAg
ICAgICAgIjxbYnJva2VuIF9fcmVwcl9fXSAlcyBhdCAlMHhkPiIKKyAgICAgICAgICAgICAgICAg
ICAgJSAodG9wcmludC5fX2NsYXNzX18sIGlkKHRvcHJpbnQpKSkKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIGYgPSBfcHl0ZXN0Ll9jb2RlLkZyYW1lKHN5cy5fZ2V0ZnJhbWUoMSkpCisgICAg
ICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc291cmNlID0gZi5jb2RlLmZ1bGxzb3VyY2UK
KyAgICAgICAgICAgICAgICBpZiBzb3VyY2UgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAg
ICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSA9IHNvdXJjZS5nZXRzdGF0
ZW1lbnQoZi5saW5lbm8sIGFzc2VydGlvbj1UcnVlKQorICAgICAgICAgICAgICAgICAgICBleGNl
cHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSA9IE5vbmUKKyAg
ICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSA9
IHN0cihzb3VyY2UuZGVpbmRlbnQoKSkuc3RyaXAoKQorICAgICAgICAgICAgZXhjZXB0IHB5LmVy
cm9yLkVOT0VOVDoKKyAgICAgICAgICAgICAgICBzb3VyY2UgPSBOb25lCisgICAgICAgICAgICAg
ICAgIyB0aGlzIGNhbiBhbHNvIG9jY3VyIGR1cmluZyByZWludGVycHJldGF0aW9uLCB3aGVuIHRo
ZQorICAgICAgICAgICAgICAgICMgY29fZmlsZW5hbWUgaXMgc2V0IHRvICI8cnVuPiIuCisgICAg
ICAgICAgICBpZiBzb3VyY2U6CisgICAgICAgICAgICAgICAgc2VsZi5tc2cgPSByZWludGVycHJl
dChzb3VyY2UsIGYsIHNob3VsZF9mYWlsPVRydWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgICAgIHNlbGYubXNnID0gIjxjb3VsZCBub3QgZGV0ZXJtaW5lIGluZm9ybWF0aW9uPiIK
KyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmFyZ3M6CisgICAgICAgICAgICAgICAgc2VsZi5hcmdz
ID0gKHNlbGYubXNnLCkKKworaWYgc3lzLnZlcnNpb25faW5mbyA+ICgzLCAwKToKKyAgICBBc3Nl
cnRpb25FcnJvci5fX21vZHVsZV9fID0gImJ1aWx0aW5zIgorCitpZiBzeXMucGxhdGZvcm0uc3Rh
cnRzd2l0aCgiamF2YSIpOgorICAgICMgU2VlIGh0dHA6Ly9idWdzLmp5dGhvbi5vcmcvaXNzdWUx
NDk3CisgICAgX2V4cHJzID0gKCJCb29sT3AiLCAiQmluT3AiLCAiVW5hcnlPcCIsICJMYW1iZGEi
LCAiSWZFeHAiLCAiRGljdCIsCisgICAgICAgICAgICAgICJMaXN0Q29tcCIsICJHZW5lcmF0b3JF
eHAiLCAiWWllbGQiLCAiQ29tcGFyZSIsICJDYWxsIiwKKyAgICAgICAgICAgICAgIlJlcHIiLCAi
TnVtIiwgIlN0ciIsICJBdHRyaWJ1dGUiLCAiU3Vic2NyaXB0IiwgIk5hbWUiLAorICAgICAgICAg
ICAgICAiTGlzdCIsICJUdXBsZSIpCisgICAgX3N0bXRzID0gKCJGdW5jdGlvbkRlZiIsICJDbGFz
c0RlZiIsICJSZXR1cm4iLCAiRGVsZXRlIiwgIkFzc2lnbiIsCisgICAgICAgICAgICAgICJBdWdB
c3NpZ24iLCAiUHJpbnQiLCAiRm9yIiwgIldoaWxlIiwgIklmIiwgIldpdGgiLCAiUmFpc2UiLAor
ICAgICAgICAgICAgICAiVHJ5RXhjZXB0IiwgIlRyeUZpbmFsbHkiLCAiQXNzZXJ0IiwgIkltcG9y
dCIsICJJbXBvcnRGcm9tIiwKKyAgICAgICAgICAgICAgIkV4ZWMiLCAiR2xvYmFsIiwgIkV4cHIi
LCAiUGFzcyIsICJCcmVhayIsICJDb250aW51ZSIpCisgICAgX2V4cHJfbm9kZXMgPSBzZXQoZ2V0
YXR0cihhc3QsIG5hbWUpIGZvciBuYW1lIGluIF9leHBycykKKyAgICBfc3RtdF9ub2RlcyA9IHNl
dChnZXRhdHRyKGFzdCwgbmFtZSkgZm9yIG5hbWUgaW4gX3N0bXRzKQorICAgIGRlZiBfaXNfYXN0
X2V4cHIobm9kZSk6CisgICAgICAgIHJldHVybiBub2RlLl9fY2xhc3NfXyBpbiBfZXhwcl9ub2Rl
cworICAgIGRlZiBfaXNfYXN0X3N0bXQobm9kZSk6CisgICAgICAgIHJldHVybiBub2RlLl9fY2xh
c3NfXyBpbiBfc3RtdF9ub2RlcworZWxzZToKKyAgICBkZWYgX2lzX2FzdF9leHByKG5vZGUpOgor
ICAgICAgICByZXR1cm4gaXNpbnN0YW5jZShub2RlLCBhc3QuZXhwcikKKyAgICBkZWYgX2lzX2Fz
dF9zdG10KG5vZGUpOgorICAgICAgICByZXR1cm4gaXNpbnN0YW5jZShub2RlLCBhc3Quc3RtdCkK
KwordHJ5OgorICAgIF9TdGFycmVkID0gYXN0LlN0YXJyZWQKK2V4Y2VwdCBBdHRyaWJ1dGVFcnJv
cjoKKyAgICAjIFB5dGhvbiAyLiBEZWZpbmUgYSBkdW1teSBjbGFzcyBzbyBpc2luc3RhbmNlKCkg
d2lsbCBhbHdheXMgYmUgRmFsc2UuCisgICAgY2xhc3MgX1N0YXJyZWQob2JqZWN0KTogcGFzcwor
CisKK2NsYXNzIEZhaWx1cmUoRXhjZXB0aW9uKToKKyAgICAiIiJFcnJvciBmb3VuZCB3aGlsZSBp
bnRlcnByZXRpbmcgQVNULiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4cGxhbmF0aW9u
PSIiKToKKyAgICAgICAgc2VsZi5jYXVzZSA9IHN5cy5leGNfaW5mbygpCisgICAgICAgIHNlbGYu
ZXhwbGFuYXRpb24gPSBleHBsYW5hdGlvbgorCisKK2RlZiByZWludGVycHJldChzb3VyY2UsIGZy
YW1lLCBzaG91bGRfZmFpbD1GYWxzZSk6CisgICAgbW9kID0gYXN0LnBhcnNlKHNvdXJjZSkKKyAg
ICB2aXNpdG9yID0gRGVidWdJbnRlcnByZXRlcihmcmFtZSkKKyAgICB0cnk6CisgICAgICAgIHZp
c2l0b3IudmlzaXQobW9kKQorICAgIGV4Y2VwdCBGYWlsdXJlOgorICAgICAgICBmYWlsdXJlID0g
c3lzLmV4Y19pbmZvKClbMV0KKyAgICAgICAgcmV0dXJuIGdldGZhaWx1cmUoZmFpbHVyZSkKKyAg
ICBpZiBzaG91bGRfZmFpbDoKKyAgICAgICAgcmV0dXJuICgiKGFzc2VydGlvbiBmYWlsZWQsIGJ1
dCB3aGVuIGl0IHdhcyByZS1ydW4gZm9yICIKKyAgICAgICAgICAgICAgICAicHJpbnRpbmcgaW50
ZXJtZWRpYXRlIHZhbHVlcywgaXQgZGlkIG5vdCBmYWlsLiAgU3VnZ2VzdGlvbnM6ICIKKyAgICAg
ICAgICAgICAgICAiY29tcHV0ZSBhc3NlcnQgZXhwcmVzc2lvbiBiZWZvcmUgdGhlIGFzc2VydCBv
ciB1c2UgLS1hc3NlcnQ9cGxhaW4pIikKKworZGVmIHJ1bihvZmZlbmRpbmdfbGluZSwgZnJhbWU9
Tm9uZSk6CisgICAgaWYgZnJhbWUgaXMgTm9uZToKKyAgICAgICAgZnJhbWUgPSBfcHl0ZXN0Ll9j
b2RlLkZyYW1lKHN5cy5fZ2V0ZnJhbWUoMSkpCisgICAgcmV0dXJuIHJlaW50ZXJwcmV0KG9mZmVu
ZGluZ19saW5lLCBmcmFtZSkKKworZGVmIGdldGZhaWx1cmUoZSk6CisgICAgZXhwbGFuYXRpb24g
PSB1dGlsLmZvcm1hdF9leHBsYW5hdGlvbihlLmV4cGxhbmF0aW9uKQorICAgIHZhbHVlID0gZS5j
YXVzZVsxXQorICAgIGlmIHN0cih2YWx1ZSk6CisgICAgICAgIGxpbmVzID0gZXhwbGFuYXRpb24u
c3BsaXQoJ1xuJykKKyAgICAgICAgbGluZXNbMF0gKz0gIiAgPDwgJXMiICUgKHZhbHVlLCkKKyAg
ICAgICAgZXhwbGFuYXRpb24gPSAnXG4nLmpvaW4obGluZXMpCisgICAgdGV4dCA9ICIlczogJXMi
ICUgKGUuY2F1c2VbMF0uX19uYW1lX18sIGV4cGxhbmF0aW9uKQorICAgIGlmIHRleHQuc3RhcnRz
d2l0aCgnQXNzZXJ0aW9uRXJyb3I6IGFzc2VydCAnKToKKyAgICAgICAgdGV4dCA9IHRleHRbMTY6
XQorICAgIHJldHVybiB0ZXh0CisKK29wZXJhdG9yX21hcCA9IHsKKyAgICBhc3QuQml0T3IgOiAi
fCIsCisgICAgYXN0LkJpdFhvciA6ICJeIiwKKyAgICBhc3QuQml0QW5kIDogIiYiLAorICAgIGFz
dC5MU2hpZnQgOiAiPDwiLAorICAgIGFzdC5SU2hpZnQgOiAiPj4iLAorICAgIGFzdC5BZGQgOiAi
KyIsCisgICAgYXN0LlN1YiA6ICItIiwKKyAgICBhc3QuTXVsdCA6ICIqIiwKKyAgICBhc3QuRGl2
IDogIi8iLAorICAgIGFzdC5GbG9vckRpdiA6ICIvLyIsCisgICAgYXN0Lk1vZCA6ICIlIiwKKyAg
ICBhc3QuRXEgOiAiPT0iLAorICAgIGFzdC5Ob3RFcSA6ICIhPSIsCisgICAgYXN0Lkx0IDogIjwi
LAorICAgIGFzdC5MdEUgOiAiPD0iLAorICAgIGFzdC5HdCA6ICI+IiwKKyAgICBhc3QuR3RFIDog
Ij49IiwKKyAgICBhc3QuUG93IDogIioqIiwKKyAgICBhc3QuSXMgOiAiaXMiLAorICAgIGFzdC5J
c05vdCA6ICJpcyBub3QiLAorICAgIGFzdC5JbiA6ICJpbiIsCisgICAgYXN0Lk5vdEluIDogIm5v
dCBpbiIKK30KKwordW5hcnlfbWFwID0geworICAgIGFzdC5Ob3QgOiAibm90ICVzIiwKKyAgICBh
c3QuSW52ZXJ0IDogIn4lcyIsCisgICAgYXN0LlVTdWIgOiAiLSVzIiwKKyAgICBhc3QuVUFkZCA6
ICIrJXMiCit9CisKKworY2xhc3MgRGVidWdJbnRlcnByZXRlcihhc3QuTm9kZVZpc2l0b3IpOgor
ICAgICIiIkludGVycHJldCBBU1Qgbm9kZXMgdG8gZ2xlYW0gdXNlZnVsIGRlYnVnZ2luZyBpbmZv
cm1hdGlvbi4gIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZnJhbWUpOgorICAgICAgICBz
ZWxmLmZyYW1lID0gZnJhbWUKKworICAgIGRlZiBnZW5lcmljX3Zpc2l0KHNlbGYsIG5vZGUpOgor
ICAgICAgICAjIEZhbGxiYWNrIHdoZW4gd2UgZG9uJ3QgaGF2ZSBhIHNwZWNpYWwgaW1wbGVtZW50
YXRpb24uCisgICAgICAgIGlmIF9pc19hc3RfZXhwcihub2RlKToKKyAgICAgICAgICAgIG1vZCA9
IGFzdC5FeHByZXNzaW9uKG5vZGUpCisgICAgICAgICAgICBjbyA9IHNlbGYuX2NvbXBpbGUobW9k
KQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuZnJhbWUu
ZXZhbChjbykKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAg
cmFpc2UgRmFpbHVyZSgpCisgICAgICAgICAgICBleHBsYW5hdGlvbiA9IHNlbGYuZnJhbWUucmVw
cihyZXN1bHQpCisgICAgICAgICAgICByZXR1cm4gZXhwbGFuYXRpb24sIHJlc3VsdAorICAgICAg
ICBlbGlmIF9pc19hc3Rfc3RtdChub2RlKToKKyAgICAgICAgICAgIG1vZCA9IGFzdC5Nb2R1bGUo
W25vZGVdKQorICAgICAgICAgICAgY28gPSBzZWxmLl9jb21waWxlKG1vZCwgImV4ZWMiKQorICAg
ICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuZnJhbWUuZXhlY18oY28pCisgICAg
ICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIHJhaXNlIEZhaWx1cmUo
KQorICAgICAgICAgICAgcmV0dXJuIE5vbmUsIE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJjYW4ndCBoYW5kbGUgJXMiICUobm9kZSwpKQorCisg
ICAgZGVmIF9jb21waWxlKHNlbGYsIHNvdXJjZSwgbW9kZT0iZXZhbCIpOgorICAgICAgICByZXR1
cm4gY29tcGlsZShzb3VyY2UsICI8YXNzZXJ0aW9uIGludGVycHJldGF0aW9uPiIsIG1vZGUpCisK
KyAgICBkZWYgdmlzaXRfRXhwcihzZWxmLCBleHByKToKKyAgICAgICAgcmV0dXJuIHNlbGYudmlz
aXQoZXhwci52YWx1ZSkKKworICAgIGRlZiB2aXNpdF9Nb2R1bGUoc2VsZiwgbW9kKToKKyAgICAg
ICAgZm9yIHN0bXQgaW4gbW9kLmJvZHk6CisgICAgICAgICAgICBzZWxmLnZpc2l0KHN0bXQpCisK
KyAgICBkZWYgdmlzaXRfTmFtZShzZWxmLCBuYW1lKToKKyAgICAgICAgZXhwbGFuYXRpb24sIHJl
c3VsdCA9IHNlbGYuZ2VuZXJpY192aXNpdChuYW1lKQorICAgICAgICAjIFNlZSBpZiB0aGUgbmFt
ZSBpcyBsb2NhbC4KKyAgICAgICAgc291cmNlID0gIiVyIGluIGxvY2FscygpIGlzIG5vdCBnbG9i
YWxzKCkiICUgKG5hbWUuaWQsKQorICAgICAgICBjbyA9IHNlbGYuX2NvbXBpbGUoc291cmNlKQor
ICAgICAgICB0cnk6CisgICAgICAgICAgICBsb2NhbCA9IHNlbGYuZnJhbWUuZXZhbChjbykKKyAg
ICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICMgaGF2ZSB0byBhc3N1bWUgaXQg
aXNuJ3QKKyAgICAgICAgICAgIGxvY2FsID0gTm9uZQorICAgICAgICBpZiBsb2NhbCBpcyBOb25l
IG9yIG5vdCBzZWxmLmZyYW1lLmlzX3RydWUobG9jYWwpOgorICAgICAgICAgICAgcmV0dXJuIG5h
bWUuaWQsIHJlc3VsdAorICAgICAgICByZXR1cm4gZXhwbGFuYXRpb24sIHJlc3VsdAorCisgICAg
ZGVmIHZpc2l0X0NvbXBhcmUoc2VsZiwgY29tcCk6CisgICAgICAgIGxlZnQgPSBjb21wLmxlZnQK
KyAgICAgICAgbGVmdF9leHBsYW5hdGlvbiwgbGVmdF9yZXN1bHQgPSBzZWxmLnZpc2l0KGxlZnQp
CisgICAgICAgIGZvciBvcCwgbmV4dF9vcCBpbiB6aXAoY29tcC5vcHMsIGNvbXAuY29tcGFyYXRv
cnMpOgorICAgICAgICAgICAgbmV4dF9leHBsYW5hdGlvbiwgbmV4dF9yZXN1bHQgPSBzZWxmLnZp
c2l0KG5leHRfb3ApCisgICAgICAgICAgICBvcF9zeW1ib2wgPSBvcGVyYXRvcl9tYXBbb3AuX19j
bGFzc19fXQorICAgICAgICAgICAgZXhwbGFuYXRpb24gPSAiJXMgJXMgJXMiICUgKGxlZnRfZXhw
bGFuYXRpb24sIG9wX3N5bWJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuZXh0X2V4cGxhbmF0aW9uKQorICAgICAgICAgICAgc291cmNlID0gIl9fZXhwcmluZm9f
bGVmdCAlcyBfX2V4cHJpbmZvX3JpZ2h0IiAlIChvcF9zeW1ib2wsKQorICAgICAgICAgICAgY28g
PSBzZWxmLl9jb21waWxlKHNvdXJjZSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAg
ICByZXN1bHQgPSBzZWxmLmZyYW1lLmV2YWwoY28sIF9fZXhwcmluZm9fbGVmdD1sZWZ0X3Jlc3Vs
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19leHByaW5mb19y
aWdodD1uZXh0X3Jlc3VsdCkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAg
ICAgICAgICAgcmFpc2UgRmFpbHVyZShleHBsYW5hdGlvbikKKyAgICAgICAgICAgIHRyeToKKyAg
ICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5mcmFtZS5pc190cnVlKHJlc3VsdCk6CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6
CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAg
ICAgICBicmVhaworICAgICAgICAgICAgbGVmdF9leHBsYW5hdGlvbiwgbGVmdF9yZXN1bHQgPSBu
ZXh0X2V4cGxhbmF0aW9uLCBuZXh0X3Jlc3VsdAorCisgICAgICAgIGlmIHV0aWwuX3JlcHJjb21w
YXJlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmVzID0gdXRpbC5fcmVwcmNvbXBhcmUob3Bf
c3ltYm9sLCBsZWZ0X3Jlc3VsdCwgbmV4dF9yZXN1bHQpCisgICAgICAgICAgICBpZiByZXM6Cisg
ICAgICAgICAgICAgICAgZXhwbGFuYXRpb24gPSByZXMKKyAgICAgICAgcmV0dXJuIGV4cGxhbmF0
aW9uLCByZXN1bHQKKworICAgIGRlZiB2aXNpdF9Cb29sT3Aoc2VsZiwgYm9vbG9wKToKKyAgICAg
ICAgaXNfb3IgPSBpc2luc3RhbmNlKGJvb2xvcC5vcCwgYXN0Lk9yKQorICAgICAgICBleHBsYW5h
dGlvbnMgPSBbXQorICAgICAgICBmb3Igb3BlcmFuZCBpbiBib29sb3AudmFsdWVzOgorICAgICAg
ICAgICAgZXhwbGFuYXRpb24sIHJlc3VsdCA9IHNlbGYudmlzaXQob3BlcmFuZCkKKyAgICAgICAg
ICAgIGV4cGxhbmF0aW9ucy5hcHBlbmQoZXhwbGFuYXRpb24pCisgICAgICAgICAgICBpZiByZXN1
bHQgPT0gaXNfb3I6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgbmFtZSA9IGlzX29y
IGFuZCAiIG9yICIgb3IgIiBhbmQgIgorICAgICAgICBleHBsYW5hdGlvbiA9ICIoIiArIG5hbWUu
am9pbihleHBsYW5hdGlvbnMpICsgIikiCisgICAgICAgIHJldHVybiBleHBsYW5hdGlvbiwgcmVz
dWx0CisKKyAgICBkZWYgdmlzaXRfVW5hcnlPcChzZWxmLCB1bmFyeSk6CisgICAgICAgIHBhdHRl
cm4gPSB1bmFyeV9tYXBbdW5hcnkub3AuX19jbGFzc19fXQorICAgICAgICBvcGVyYW5kX2V4cGxh
bmF0aW9uLCBvcGVyYW5kX3Jlc3VsdCA9IHNlbGYudmlzaXQodW5hcnkub3BlcmFuZCkKKyAgICAg
ICAgZXhwbGFuYXRpb24gPSBwYXR0ZXJuICUgKG9wZXJhbmRfZXhwbGFuYXRpb24sKQorICAgICAg
ICBjbyA9IHNlbGYuX2NvbXBpbGUocGF0dGVybiAlICgiX19leHByaW5mb19leHByIiwpKQorICAg
ICAgICB0cnk6CisgICAgICAgICAgICByZXN1bHQgPSBzZWxmLmZyYW1lLmV2YWwoY28sIF9fZXhw
cmluZm9fZXhwcj1vcGVyYW5kX3Jlc3VsdCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAg
ICAgICAgICAgIHJhaXNlIEZhaWx1cmUoZXhwbGFuYXRpb24pCisgICAgICAgIHJldHVybiBleHBs
YW5hdGlvbiwgcmVzdWx0CisKKyAgICBkZWYgdmlzaXRfQmluT3Aoc2VsZiwgYmlub3ApOgorICAg
ICAgICBsZWZ0X2V4cGxhbmF0aW9uLCBsZWZ0X3Jlc3VsdCA9IHNlbGYudmlzaXQoYmlub3AubGVm
dCkKKyAgICAgICAgcmlnaHRfZXhwbGFuYXRpb24sIHJpZ2h0X3Jlc3VsdCA9IHNlbGYudmlzaXQo
Ymlub3AucmlnaHQpCisgICAgICAgIHN5bWJvbCA9IG9wZXJhdG9yX21hcFtiaW5vcC5vcC5fX2Ns
YXNzX19dCisgICAgICAgIGV4cGxhbmF0aW9uID0gIiglcyAlcyAlcykiICUgKGxlZnRfZXhwbGFu
YXRpb24sIHN5bWJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmln
aHRfZXhwbGFuYXRpb24pCisgICAgICAgIHNvdXJjZSA9ICJfX2V4cHJpbmZvX2xlZnQgJXMgX19l
eHByaW5mb19yaWdodCIgJSAoc3ltYm9sLCkKKyAgICAgICAgY28gPSBzZWxmLl9jb21waWxlKHNv
dXJjZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5mcmFtZS5ldmFs
KGNvLCBfX2V4cHJpbmZvX2xlZnQ9bGVmdF9yZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19leHByaW5mb19yaWdodD1yaWdodF9yZXN1bHQpCisgICAgICAgIGV4
Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICByYWlzZSBGYWlsdXJlKGV4cGxhbmF0aW9uKQor
ICAgICAgICByZXR1cm4gZXhwbGFuYXRpb24sIHJlc3VsdAorCisgICAgZGVmIHZpc2l0X0NhbGwo
c2VsZiwgY2FsbCk6CisgICAgICAgIGZ1bmNfZXhwbGFuYXRpb24sIGZ1bmMgPSBzZWxmLnZpc2l0
KGNhbGwuZnVuYykKKyAgICAgICAgYXJnX2V4cGxhbmF0aW9ucyA9IFtdCisgICAgICAgIG5zID0g
eyJfX2V4cHJpbmZvX2Z1bmMiIDogZnVuY30KKyAgICAgICAgYXJndW1lbnRzID0gW10KKyAgICAg
ICAgZm9yIGFyZyBpbiBjYWxsLmFyZ3M6CisgICAgICAgICAgICBhcmdfZXhwbGFuYXRpb24sIGFy
Z19yZXN1bHQgPSBzZWxmLnZpc2l0KGFyZykKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoYXJn
LCBfU3RhcnJlZCk6CisgICAgICAgICAgICAgICAgYXJnX25hbWUgPSAiX19leHByaW5mb19zdGFy
IgorICAgICAgICAgICAgICAgIG5zW2FyZ19uYW1lXSA9IGFyZ19yZXN1bHQKKyAgICAgICAgICAg
ICAgICBhcmd1bWVudHMuYXBwZW5kKCIqJXMiICUgKGFyZ19uYW1lLCkpCisgICAgICAgICAgICAg
ICAgYXJnX2V4cGxhbmF0aW9ucy5hcHBlbmQoIiolcyIgJSAoYXJnX2V4cGxhbmF0aW9uLCkpCisg
ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGFyZ19uYW1lID0gIl9fZXhwcmluZm9f
JXMiICUgKGxlbihucyksKQorICAgICAgICAgICAgICAgIG5zW2FyZ19uYW1lXSA9IGFyZ19yZXN1
bHQKKyAgICAgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGFyZ19uYW1lKQorICAgICAgICAg
ICAgICAgIGFyZ19leHBsYW5hdGlvbnMuYXBwZW5kKGFyZ19leHBsYW5hdGlvbikKKyAgICAgICAg
Zm9yIGtleXdvcmQgaW4gY2FsbC5rZXl3b3JkczoKKyAgICAgICAgICAgIGFyZ19leHBsYW5hdGlv
biwgYXJnX3Jlc3VsdCA9IHNlbGYudmlzaXQoa2V5d29yZC52YWx1ZSkKKyAgICAgICAgICAgIGlm
IGtleXdvcmQuYXJnOgorICAgICAgICAgICAgICAgIGFyZ19uYW1lID0gIl9fZXhwcmluZm9fJXMi
ICUgKGxlbihucyksKQorICAgICAgICAgICAgICAgIGtleXdvcmRfc291cmNlID0gIiVzPSUlcyIg
JSAoa2V5d29yZC5hcmcpCisgICAgICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChrZXl3b3Jk
X3NvdXJjZSAlIChhcmdfbmFtZSwpKQorICAgICAgICAgICAgICAgIGFyZ19leHBsYW5hdGlvbnMu
YXBwZW5kKGtleXdvcmRfc291cmNlICUgKGFyZ19leHBsYW5hdGlvbiwpKQorICAgICAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgICAgICBhcmdfbmFtZSA9ICJfX2V4cHJpbmZvX2t3ZHMiCisgICAg
ICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZCgiKiolcyIgJSAoYXJnX25hbWUsKSkKKyAgICAg
ICAgICAgICAgICBhcmdfZXhwbGFuYXRpb25zLmFwcGVuZCgiKiolcyIgJSAoYXJnX2V4cGxhbmF0
aW9uLCkpCisKKyAgICAgICAgICAgIG5zW2FyZ19uYW1lXSA9IGFyZ19yZXN1bHQKKworICAgICAg
ICBpZiBnZXRhdHRyKGNhbGwsICdzdGFyYXJncycsIE5vbmUpOgorICAgICAgICAgICAgYXJnX2V4
cGxhbmF0aW9uLCBhcmdfcmVzdWx0ID0gc2VsZi52aXNpdChjYWxsLnN0YXJhcmdzKQorICAgICAg
ICAgICAgYXJnX25hbWUgPSAiX19leHByaW5mb19zdGFyIgorICAgICAgICAgICAgbnNbYXJnX25h
bWVdID0gYXJnX3Jlc3VsdAorICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZCgiKiVzIiAlIChh
cmdfbmFtZSwpKQorICAgICAgICAgICAgYXJnX2V4cGxhbmF0aW9ucy5hcHBlbmQoIiolcyIgJSAo
YXJnX2V4cGxhbmF0aW9uLCkpCisKKyAgICAgICAgaWYgZ2V0YXR0cihjYWxsLCAna3dhcmdzJywg
Tm9uZSk6CisgICAgICAgICAgICBhcmdfZXhwbGFuYXRpb24sIGFyZ19yZXN1bHQgPSBzZWxmLnZp
c2l0KGNhbGwua3dhcmdzKQorICAgICAgICAgICAgYXJnX25hbWUgPSAiX19leHByaW5mb19rd2Rz
IgorICAgICAgICAgICAgbnNbYXJnX25hbWVdID0gYXJnX3Jlc3VsdAorICAgICAgICAgICAgYXJn
dW1lbnRzLmFwcGVuZCgiKiolcyIgJSAoYXJnX25hbWUsKSkKKyAgICAgICAgICAgIGFyZ19leHBs
YW5hdGlvbnMuYXBwZW5kKCIqKiVzIiAlIChhcmdfZXhwbGFuYXRpb24sKSkKKyAgICAgICAgYXJn
c19leHBsYWluZWQgPSAiLCAiLmpvaW4oYXJnX2V4cGxhbmF0aW9ucykKKyAgICAgICAgZXhwbGFu
YXRpb24gPSAiJXMoJXMpIiAlIChmdW5jX2V4cGxhbmF0aW9uLCBhcmdzX2V4cGxhaW5lZCkKKyAg
ICAgICAgYXJncyA9ICIsICIuam9pbihhcmd1bWVudHMpCisgICAgICAgIHNvdXJjZSA9ICJfX2V4
cHJpbmZvX2Z1bmMoJXMpIiAlIChhcmdzLCkKKyAgICAgICAgY28gPSBzZWxmLl9jb21waWxlKHNv
dXJjZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5mcmFtZS5ldmFs
KGNvLCAqKm5zKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgcmFpc2Ug
RmFpbHVyZShleHBsYW5hdGlvbikKKyAgICAgICAgcGF0dGVybiA9ICIlc1xueyVzID0gJXNcbn0i
CisgICAgICAgIHJlcCA9IHNlbGYuZnJhbWUucmVwcihyZXN1bHQpCisgICAgICAgIGV4cGxhbmF0
aW9uID0gcGF0dGVybiAlIChyZXAsIHJlcCwgZXhwbGFuYXRpb24pCisgICAgICAgIHJldHVybiBl
eHBsYW5hdGlvbiwgcmVzdWx0CisKKyAgICBkZWYgX2lzX2J1aWx0aW5fbmFtZShzZWxmLCBuYW1l
KToKKyAgICAgICAgcGF0dGVybiA9ICIlciBub3QgaW4gZ2xvYmFscygpIGFuZCAlciBub3QgaW4g
bG9jYWxzKCkiCisgICAgICAgIHNvdXJjZSA9IHBhdHRlcm4gJSAobmFtZS5pZCwgbmFtZS5pZCkK
KyAgICAgICAgY28gPSBzZWxmLl9jb21waWxlKHNvdXJjZSkKKyAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgcmV0dXJuIHNlbGYuZnJhbWUuZXZhbChjbykKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlv
bjoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIHZpc2l0X0F0dHJpYnV0ZShz
ZWxmLCBhdHRyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoYXR0ci5jdHgsIGFzdC5Mb2Fk
KToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmdlbmVyaWNfdmlzaXQoYXR0cikKKyAgICAgICAg
c291cmNlX2V4cGxhbmF0aW9uLCBzb3VyY2VfcmVzdWx0ID0gc2VsZi52aXNpdChhdHRyLnZhbHVl
KQorICAgICAgICBleHBsYW5hdGlvbiA9ICIlcy4lcyIgJSAoc291cmNlX2V4cGxhbmF0aW9uLCBh
dHRyLmF0dHIpCisgICAgICAgIHNvdXJjZSA9ICJfX2V4cHJpbmZvX2V4cHIuJXMiICUgKGF0dHIu
YXR0ciwpCisgICAgICAgIGNvID0gc2VsZi5fY29tcGlsZShzb3VyY2UpCisgICAgICAgIHRyeToK
KyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBzZWxmLmZyYW1lLmV2
YWwoY28sIF9fZXhwcmluZm9fZXhwcj1zb3VyY2VfcmVzdWx0KQorICAgICAgICAgICAgZXhjZXB0
IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICMgTWF5YmUgdGhlIGF0dHJpYnV0ZSBu
YW1lIG5lZWRzIHRvIGJlIG1hbmdsZWQ/CisgICAgICAgICAgICAgICAgaWYgbm90IGF0dHIuYXR0
ci5zdGFydHN3aXRoKCJfXyIpIG9yIGF0dHIuYXR0ci5lbmRzd2l0aCgiX18iKToKKyAgICAgICAg
ICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICBzb3VyY2UgPSAiZ2V0YXR0cihfX2V4
cHJpbmZvX2V4cHIuX19jbGFzc19fLCAnX19uYW1lX18nLCAnJykiCisgICAgICAgICAgICAgICAg
Y28gPSBzZWxmLl9jb21waWxlKHNvdXJjZSkKKyAgICAgICAgICAgICAgICBjbGFzc19uYW1lID0g
c2VsZi5mcmFtZS5ldmFsKGNvLCBfX2V4cHJpbmZvX2V4cHI9c291cmNlX3Jlc3VsdCkKKyAgICAg
ICAgICAgICAgICBtYW5nbGVkX2F0dHIgPSAiXyIgKyBjbGFzc19uYW1lICsgIGF0dHIuYXR0cgor
ICAgICAgICAgICAgICAgIHNvdXJjZSA9ICJfX2V4cHJpbmZvX2V4cHIuJXMiICUgKG1hbmdsZWRf
YXR0ciwpCisgICAgICAgICAgICAgICAgY28gPSBzZWxmLl9jb21waWxlKHNvdXJjZSkKKyAgICAg
ICAgICAgICAgICByZXN1bHQgPSBzZWxmLmZyYW1lLmV2YWwoY28sIF9fZXhwcmluZm9fZXhwcj1z
b3VyY2VfcmVzdWx0KQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgcmFp
c2UgRmFpbHVyZShleHBsYW5hdGlvbikKKyAgICAgICAgZXhwbGFuYXRpb24gPSAiJXNcbnslcyA9
ICVzLiVzXG59IiAlIChzZWxmLmZyYW1lLnJlcHIocmVzdWx0KSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZyYW1lLnJlcHIocmVzdWx0KSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VfZXhwbGFu
YXRpb24sIGF0dHIuYXR0cikKKyAgICAgICAgIyBDaGVjayBpZiB0aGUgYXR0ciBpcyBmcm9tIGFu
IGluc3RhbmNlLgorICAgICAgICBzb3VyY2UgPSAiJXIgaW4gZ2V0YXR0cihfX2V4cHJpbmZvX2V4
cHIsICdfX2RpY3RfXycsIHt9KSIKKyAgICAgICAgc291cmNlID0gc291cmNlICUgKGF0dHIuYXR0
ciwpCisgICAgICAgIGNvID0gc2VsZi5fY29tcGlsZShzb3VyY2UpCisgICAgICAgIHRyeToKKyAg
ICAgICAgICAgIGZyb21faW5zdGFuY2UgPSBzZWxmLmZyYW1lLmV2YWwoY28sIF9fZXhwcmluZm9f
ZXhwcj1zb3VyY2VfcmVzdWx0KQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAg
ICAgZnJvbV9pbnN0YW5jZSA9IE5vbmUKKyAgICAgICAgaWYgZnJvbV9pbnN0YW5jZSBpcyBOb25l
IG9yIHNlbGYuZnJhbWUuaXNfdHJ1ZShmcm9tX2luc3RhbmNlKToKKyAgICAgICAgICAgIHJlcCA9
IHNlbGYuZnJhbWUucmVwcihyZXN1bHQpCisgICAgICAgICAgICBwYXR0ZXJuID0gIiVzXG57JXMg
PSAlc1xufSIKKyAgICAgICAgICAgIGV4cGxhbmF0aW9uID0gcGF0dGVybiAlIChyZXAsIHJlcCwg
ZXhwbGFuYXRpb24pCisgICAgICAgIHJldHVybiBleHBsYW5hdGlvbiwgcmVzdWx0CisKKyAgICBk
ZWYgdmlzaXRfQXNzZXJ0KHNlbGYsIGFzc3J0KToKKyAgICAgICAgdGVzdF9leHBsYW5hdGlvbiwg
dGVzdF9yZXN1bHQgPSBzZWxmLnZpc2l0KGFzc3J0LnRlc3QpCisgICAgICAgIGV4cGxhbmF0aW9u
ID0gImFzc2VydCAlcyIgJSAodGVzdF9leHBsYW5hdGlvbiwpCisgICAgICAgIGlmIG5vdCBzZWxm
LmZyYW1lLmlzX3RydWUodGVzdF9yZXN1bHQpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgICAgIHJhaXNlIHV0aWwuQnVpbHRpbkFzc2VydGlvbkVycm9yCisgICAgICAgICAgICBleGNl
cHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIHJhaXNlIEZhaWx1cmUoZXhwbGFuYXRpb24p
CisgICAgICAgIHJldHVybiBleHBsYW5hdGlvbiwgdGVzdF9yZXN1bHQKKworICAgIGRlZiB2aXNp
dF9Bc3NpZ24oc2VsZiwgYXNzaWduKToKKyAgICAgICAgdmFsdWVfZXhwbGFuYXRpb24sIHZhbHVl
X3Jlc3VsdCA9IHNlbGYudmlzaXQoYXNzaWduLnZhbHVlKQorICAgICAgICBleHBsYW5hdGlvbiA9
ICIuLi4gPSAlcyIgJSAodmFsdWVfZXhwbGFuYXRpb24sKQorICAgICAgICBuYW1lID0gYXN0Lk5h
bWUoIl9fZXhwcmluZm9fZXhwciIsIGFzdC5Mb2FkKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICBsaW5lbm89YXNzaWduLnZhbHVlLmxpbmVubywKKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bF9vZmZzZXQ9YXNzaWduLnZhbHVlLmNvbF9vZmZzZXQpCisgICAgICAgIG5ld19hc3NpZ24gPSBh
c3QuQXNzaWduKGFzc2lnbi50YXJnZXRzLCBuYW1lLCBsaW5lbm89YXNzaWduLmxpbmVubywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX29mZnNldD1hc3NpZ24uY29sX29mZnNl
dCkKKyAgICAgICAgbW9kID0gYXN0Lk1vZHVsZShbbmV3X2Fzc2lnbl0pCisgICAgICAgIGNvID0g
c2VsZi5fY29tcGlsZShtb2QsICJleGVjIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2Vs
Zi5mcmFtZS5leGVjXyhjbywgX19leHByaW5mb19leHByPXZhbHVlX3Jlc3VsdCkKKyAgICAgICAg
ZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHJhaXNlIEZhaWx1cmUoZXhwbGFuYXRpb24p
CisgICAgICAgIHJldHVybiBleHBsYW5hdGlvbiwgdmFsdWVfcmVzdWx0CisKZGlmZiAtLWdpdCBh
L1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9hc3NlcnRp
b24vcmV3cml0ZS5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3Qv
X3B5dGVzdC9hc3NlcnRpb24vcmV3cml0ZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMC4uMTRiOGU0OWRiMmIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0
cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvYXNzZXJ0aW9uL3Jld3JpdGUucHkK
QEAgLTAsMCArMSw4ODUgQEAKKyIiIlJld3JpdGUgYXNzZXJ0aW9uIEFTVCB0byBwcm9kdWNlIG5p
Y2UgZXJyb3IgbWVzc2FnZXMiIiIKKworaW1wb3J0IGFzdAoraW1wb3J0IGVycm5vCitpbXBvcnQg
aXRlcnRvb2xzCitpbXBvcnQgaW1wCitpbXBvcnQgbWFyc2hhbAoraW1wb3J0IG9zCitpbXBvcnQg
cmUKK2ltcG9ydCBzdHJ1Y3QKK2ltcG9ydCBzeXMKK2ltcG9ydCB0eXBlcworCitpbXBvcnQgcHkK
K2Zyb20gX3B5dGVzdC5hc3NlcnRpb24gaW1wb3J0IHV0aWwKKworCisjIHB5dGVzdCBjYWNoZXMg
cmV3cml0dGVuIHB5Y3MgaW4gX19weWNhY2hlX18uCitpZiBoYXNhdHRyKGltcCwgImdldF90YWci
KToKKyAgICBQWVRFU1RfVEFHID0gaW1wLmdldF90YWcoKSArICItUFlURVNUIgorZWxzZToKKyAg
ICBpZiBoYXNhdHRyKHN5cywgInB5cHlfdmVyc2lvbl9pbmZvIik6CisgICAgICAgIGltcGwgPSAi
cHlweSIKKyAgICBlbGlmIHN5cy5wbGF0Zm9ybSA9PSAiamF2YSI6CisgICAgICAgIGltcGwgPSAi
anl0aG9uIgorICAgIGVsc2U6CisgICAgICAgIGltcGwgPSAiY3B5dGhvbiIKKyAgICB2ZXIgPSBz
eXMudmVyc2lvbl9pbmZvCisgICAgUFlURVNUX1RBRyA9ICIlcy0lcyVzLVBZVEVTVCIgJSAoaW1w
bCwgdmVyWzBdLCB2ZXJbMV0pCisgICAgZGVsIHZlciwgaW1wbAorCitQWUNfRVhUID0gIi5weSIg
KyAoX19kZWJ1Z19fIGFuZCAiYyIgb3IgIm8iKQorUFlDX1RBSUwgPSAiLiIgKyBQWVRFU1RfVEFH
ICsgUFlDX0VYVAorCitSRVdSSVRFX05FV0xJTkVTID0gc3lzLnZlcnNpb25faW5mb1s6Ml0gIT0g
KDIsIDcpIGFuZCBzeXMudmVyc2lvbl9pbmZvIDwgKDMsIDIpCitBU0NJSV9JU19ERUZBVUxUX0VO
Q09ESU5HID0gc3lzLnZlcnNpb25faW5mb1swXSA8IDMKKworaWYgc3lzLnZlcnNpb25faW5mbyA+
PSAoMyw1KToKKyAgICBhc3RfQ2FsbCA9IGFzdC5DYWxsCitlbHNlOgorICAgIGFzdF9DYWxsID0g
bGFtYmRhIGEsYixjOiBhc3QuQ2FsbChhLCBiLCBjLCBOb25lLCBOb25lKQorCisKK2NsYXNzIEFz
c2VydGlvblJld3JpdGluZ0hvb2sob2JqZWN0KToKKyAgICAiIiJQRVAzMDIgSW1wb3J0IGhvb2sg
d2hpY2ggcmV3cml0ZXMgYXNzZXJ0cy4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAg
ICAgICAgc2VsZi5zZXNzaW9uID0gTm9uZQorICAgICAgICBzZWxmLm1vZHVsZXMgPSB7fQorICAg
ICAgICBzZWxmLl9yZWdpc3Rlcl93aXRoX3BrZ19yZXNvdXJjZXMoKQorCisgICAgZGVmIHNldF9z
ZXNzaW9uKHNlbGYsIHNlc3Npb24pOgorICAgICAgICBzZWxmLmZucGF0cyA9IHNlc3Npb24uY29u
ZmlnLmdldGluaSgicHl0aG9uX2ZpbGVzIikKKyAgICAgICAgc2VsZi5zZXNzaW9uID0gc2Vzc2lv
bgorCisgICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYsIG5hbWUsIHBhdGg9Tm9uZSk6CisgICAgICAg
IGlmIHNlbGYuc2Vzc2lvbiBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAg
ICAgc2VzcyA9IHNlbGYuc2Vzc2lvbgorICAgICAgICBzdGF0ZSA9IHNlc3MuY29uZmlnLl9hc3Nl
cnRzdGF0ZQorICAgICAgICBzdGF0ZS50cmFjZSgiZmluZF9tb2R1bGUgY2FsbGVkIGZvcjogJXMi
ICUgbmFtZSkKKyAgICAgICAgbmFtZXMgPSBuYW1lLnJzcGxpdCgiLiIsIDEpCisgICAgICAgIGxh
c3RuYW1lID0gbmFtZXNbLTFdCisgICAgICAgIHB0aCA9IE5vbmUKKyAgICAgICAgaWYgcGF0aCBp
cyBub3QgTm9uZToKKyAgICAgICAgICAgICMgU3RhcnRpbmcgd2l0aCBQeXRob24gMy4zLCBwYXRo
IGlzIGEgX05hbWVzcGFjZVBhdGgoKSwgd2hpY2gKKyAgICAgICAgICAgICMgY2F1c2VzIHByb2Js
ZW1zIGlmIG5vdCBjb252ZXJ0ZWQgdG8gbGlzdC4KKyAgICAgICAgICAgIHBhdGggPSBsaXN0KHBh
dGgpCisgICAgICAgICAgICBpZiBsZW4ocGF0aCkgPT0gMToKKyAgICAgICAgICAgICAgICBwdGgg
PSBwYXRoWzBdCisgICAgICAgIGlmIHB0aCBpcyBOb25lOgorICAgICAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgICAgIGZkLCBmbiwgZGVzYyA9IGltcC5maW5kX21vZHVsZShsYXN0bmFtZSwgcGF0
aCkKKyAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgICAgICByZXR1
cm4gTm9uZQorICAgICAgICAgICAgaWYgZmQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAg
ZmQuY2xvc2UoKQorICAgICAgICAgICAgdHAgPSBkZXNjWzJdCisgICAgICAgICAgICBpZiB0cCA9
PSBpbXAuUFlfQ09NUElMRUQ6CisgICAgICAgICAgICAgICAgaWYgaGFzYXR0cihpbXAsICJzb3Vy
Y2VfZnJvbV9jYWNoZSIpOgorICAgICAgICAgICAgICAgICAgICBmbiA9IGltcC5zb3VyY2VfZnJv
bV9jYWNoZShmbikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBm
biA9IGZuWzotMV0KKyAgICAgICAgICAgIGVsaWYgdHAgIT0gaW1wLlBZX1NPVVJDRToKKyAgICAg
ICAgICAgICAgICAjIERvbid0IGtub3cgd2hhdCB0aGlzIGlzLgorICAgICAgICAgICAgICAgIHJl
dHVybiBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmbiA9IG9zLnBhdGguam9pbihw
dGgsIG5hbWUucnBhcnRpdGlvbigiLiIpWzJdICsgIi5weSIpCisgICAgICAgIGZuX3B5cGF0aCA9
IHB5LnBhdGgubG9jYWwoZm4pCisgICAgICAgICMgSXMgdGhpcyBhIHRlc3QgZmlsZT8KKyAgICAg
ICAgaWYgbm90IHNlc3MuaXNpbml0cGF0aChmbik6CisgICAgICAgICAgICAjIFdlIGhhdmUgdG8g
YmUgdmVyeSBjYXJlZnVsIGhlcmUgYmVjYXVzZSBpbXBvcnRzIGluIHRoaXMgY29kZSBjYW4KKyAg
ICAgICAgICAgICMgdHJpZ2dlciBhIGN5Y2xlLgorICAgICAgICAgICAgc2VsZi5zZXNzaW9uID0g
Tm9uZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZvciBwYXQgaW4gc2VsZi5m
bnBhdHM6CisgICAgICAgICAgICAgICAgICAgIGlmIGZuX3B5cGF0aC5mbm1hdGNoKHBhdCk6Cisg
ICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS50cmFjZSgibWF0Y2hlZCB0ZXN0IGZpbGUgJXIi
ICUgKGZuLCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAg
IGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICBmaW5h
bGx5OgorICAgICAgICAgICAgICAgIHNlbGYuc2Vzc2lvbiA9IHNlc3MKKyAgICAgICAgZWxzZToK
KyAgICAgICAgICAgIHN0YXRlLnRyYWNlKCJtYXRjaGVkIHRlc3QgZmlsZSAod2FzIHNwZWNpZmll
ZCBvbiBjbWRsaW5lKTogJXIiICUKKyAgICAgICAgICAgICAgICAgICAgICAgIChmbiwpKQorICAg
ICAgICAjIFRoZSByZXF1ZXN0ZWQgbW9kdWxlIGxvb2tzIGxpa2UgYSB0ZXN0IGZpbGUsIHNvIHJl
d3JpdGUgaXQuIFRoaXMgaXMKKyAgICAgICAgIyB0aGUgbW9zdCBtYWdpY2FsIHBhcnQgb2YgdGhl
IHByb2Nlc3M6IGxvYWQgdGhlIHNvdXJjZSwgcmV3cml0ZSB0aGUKKyAgICAgICAgIyBhc3NlcnRz
LCBhbmQgbG9hZCB0aGUgcmV3cml0dGVuIHNvdXJjZS4gV2UgYWxzbyBjYWNoZSB0aGUgcmV3cml0
dGVuCisgICAgICAgICMgbW9kdWxlIGNvZGUgaW4gYSBzcGVjaWFsIHB5Yy4gV2UgbXVzdCBiZSBh
d2FyZSBvZiB0aGUgcG9zc2liaWxpdHkgb2YKKyAgICAgICAgIyBjb25jdXJyZW50IHB5dGVzdCBw
cm9jZXNzZXMgcmV3cml0aW5nIGFuZCBsb2FkaW5nIHB5Y3MuIFRvIGF2b2lkCisgICAgICAgICMg
dHJpY2t5IHJhY2UgY29uZGl0aW9ucywgd2UgbWFpbnRhaW4gdGhlIGZvbGxvd2luZyBpbnZhcmlh
bnQ6IFRoZQorICAgICAgICAjIGNhY2hlZCBweWMgaXMgYWx3YXlzIGEgY29tcGxldGUsIHZhbGlk
IHB5Yy4gT3BlcmF0aW9ucyBvbiBpdCBtdXN0IGJlCisgICAgICAgICMgYXRvbWljLiBQT1NJWCdz
IGF0b21pYyByZW5hbWUgY29tZXMgaW4gaGFuZHkuCisgICAgICAgIHdyaXRlID0gbm90IHN5cy5k
b250X3dyaXRlX2J5dGVjb2RlCisgICAgICAgIGNhY2hlX2RpciA9IG9zLnBhdGguam9pbihmbl9w
eXBhdGguZGlybmFtZSwgIl9fcHljYWNoZV9fIikKKyAgICAgICAgaWYgd3JpdGU6CisgICAgICAg
ICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3MubWtkaXIoY2FjaGVfZGlyKQorICAgICAgICAg
ICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgZSA9IHN5cy5leGNfaW5mbygpWzFd
LmVycm5vCisgICAgICAgICAgICAgICAgaWYgZSA9PSBlcnJuby5FRVhJU1Q6CisgICAgICAgICAg
ICAgICAgICAgICMgRWl0aGVyIHRoZSBfX3B5Y2FjaGVfXyBkaXJlY3RvcnkgYWxyZWFkeSBleGlz
dHMgKHRoZQorICAgICAgICAgICAgICAgICAgICAjIGNvbW1vbiBjYXNlKSBvciBpdCdzIGJsb2Nr
ZWQgYnkgYSBub24tZGlyIG5vZGUuIEluIHRoZQorICAgICAgICAgICAgICAgICAgICAjIGxhdHRl
ciBjYXNlLCB3ZSdsbCBpZ25vcmUgaXQgaW4gX3dyaXRlX3B5Yy4KKyAgICAgICAgICAgICAgICAg
ICAgcGFzcworICAgICAgICAgICAgICAgIGVsaWYgZSBpbiBbZXJybm8uRU5PRU5ULCBlcnJuby5F
Tk9URElSXToKKyAgICAgICAgICAgICAgICAgICAgIyBPbmUgb2YgdGhlIHBhdGggY29tcG9uZW50
cyB3YXMgbm90IGEgZGlyZWN0b3J5LCBsaWtlbHkKKyAgICAgICAgICAgICAgICAgICAgIyBiZWNh
dXNlIHdlJ3JlIGluIGEgemlwIGZpbGUuCisgICAgICAgICAgICAgICAgICAgIHdyaXRlID0gRmFs
c2UKKyAgICAgICAgICAgICAgICBlbGlmIGUgaW4gW2Vycm5vLkVBQ0NFUywgZXJybm8uRVJPRlMs
IGVycm5vLkVQRVJNXToKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUudHJhY2UoInJlYWQgb25s
eSBkaXJlY3Rvcnk6ICVyIiAlIGZuX3B5cGF0aC5kaXJuYW1lKQorICAgICAgICAgICAgICAgICAg
ICB3cml0ZSA9IEZhbHNlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAg
ICAgcmFpc2UKKyAgICAgICAgY2FjaGVfbmFtZSA9IGZuX3B5cGF0aC5iYXNlbmFtZVs6LTNdICsg
UFlDX1RBSUwKKyAgICAgICAgcHljID0gb3MucGF0aC5qb2luKGNhY2hlX2RpciwgY2FjaGVfbmFt
ZSkKKyAgICAgICAgIyBOb3RpY2UgdGhhdCBldmVuIGlmIHdlJ3JlIGluIGEgcmVhZC1vbmx5IGRp
cmVjdG9yeSwgSSdtIGdvaW5nCisgICAgICAgICMgdG8gY2hlY2sgZm9yIGEgY2FjaGVkIHB5Yy4g
VGhpcyBtYXkgbm90IGJlIG9wdGltYWwuLi4KKyAgICAgICAgY28gPSBfcmVhZF9weWMoZm5fcHlw
YXRoLCBweWMsIHN0YXRlLnRyYWNlKQorICAgICAgICBpZiBjbyBpcyBOb25lOgorICAgICAgICAg
ICAgc3RhdGUudHJhY2UoInJld3JpdGluZyAlciIgJSAoZm4sKSkKKyAgICAgICAgICAgIHNvdXJj
ZV9zdGF0LCBjbyA9IF9yZXdyaXRlX3Rlc3Qoc3RhdGUsIGZuX3B5cGF0aCkKKyAgICAgICAgICAg
IGlmIGNvIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgIyBQcm9iYWJseSBhIFN5bnRheEVycm9y
IGluIHRoZSB0ZXN0LgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICBp
ZiB3cml0ZToKKyAgICAgICAgICAgICAgICBfbWFrZV9yZXdyaXR0ZW5fcHljKHN0YXRlLCBzb3Vy
Y2Vfc3RhdCwgcHljLCBjbykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN0YXRlLnRyYWNl
KCJmb3VuZCBjYWNoZWQgcmV3cml0dGVuIHB5YyBmb3IgJXIiICUgKGZuLCkpCisgICAgICAgIHNl
bGYubW9kdWxlc1tuYW1lXSA9IGNvLCBweWMKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRl
ZiBsb2FkX21vZHVsZShzZWxmLCBuYW1lKToKKyAgICAgICAgIyBJZiB0aGVyZSBpcyBhbiBleGlz
dGluZyBtb2R1bGUgb2JqZWN0IG5hbWVkICdmdWxsbmFtZScgaW4KKyAgICAgICAgIyBzeXMubW9k
dWxlcywgdGhlIGxvYWRlciBtdXN0IHVzZSB0aGF0IGV4aXN0aW5nIG1vZHVsZS4gKE90aGVyd2lz
ZSwKKyAgICAgICAgIyB0aGUgcmVsb2FkKCkgYnVpbHRpbiB3aWxsIG5vdCB3b3JrIGNvcnJlY3Rs
eS4pCisgICAgICAgIGlmIG5hbWUgaW4gc3lzLm1vZHVsZXM6CisgICAgICAgICAgICByZXR1cm4g
c3lzLm1vZHVsZXNbbmFtZV0KKworICAgICAgICBjbywgcHljID0gc2VsZi5tb2R1bGVzLnBvcChu
YW1lKQorICAgICAgICAjIEkgd2lzaCBJIGNvdWxkIGp1c3QgY2FsbCBpbXAubG9hZF9jb21waWxl
ZCBoZXJlLCBidXQgX19maWxlX18gaGFzIHRvCisgICAgICAgICMgYmUgc2V0IHByb3Blcmx5LiBJ
biBQeXRob24gMy4yKywgdGhpcyBhbGwgd291bGQgYmUgaGFuZGxlZCBjb3JyZWN0bHkKKyAgICAg
ICAgIyBieSBsb2FkX2NvbXBpbGVkLgorICAgICAgICBtb2QgPSBzeXMubW9kdWxlc1tuYW1lXSA9
IGltcC5uZXdfbW9kdWxlKG5hbWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG1vZC5fX2Zp
bGVfXyA9IGNvLmNvX2ZpbGVuYW1lCisgICAgICAgICAgICAjIE5vcm1hbGx5LCB0aGlzIGF0dHJp
YnV0ZSBpcyAzLjIrLgorICAgICAgICAgICAgbW9kLl9fY2FjaGVkX18gPSBweWMKKyAgICAgICAg
ICAgIG1vZC5fX2xvYWRlcl9fID0gc2VsZgorICAgICAgICAgICAgcHkuYnVpbHRpbi5leGVjXyhj
bywgbW9kLl9fZGljdF9fKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBkZWwgc3lzLm1v
ZHVsZXNbbmFtZV0KKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHJldHVybiBzeXMubW9kdWxl
c1tuYW1lXQorCisKKworICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIG5hbWUpOgorICAgICAgICB0
cnk6CisgICAgICAgICAgICBmZCwgZm4sIGRlc2MgPSBpbXAuZmluZF9tb2R1bGUobmFtZSkKKyAg
ICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAg
ICAgIGlmIGZkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZmQuY2xvc2UoKQorICAgICAgICB0
cCA9IGRlc2NbMl0KKyAgICAgICAgcmV0dXJuIHRwID09IGltcC5QS0dfRElSRUNUT1JZCisKKyAg
ICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3JlZ2lzdGVyX3dpdGhfcGtnX3Jlc291cmNlcyhjbHMp
OgorICAgICAgICAiIiIKKyAgICAgICAgRW5zdXJlIHBhY2thZ2UgcmVzb3VyY2VzIGNhbiBiZSBs
b2FkZWQgZnJvbSB0aGlzIGxvYWRlci4gTWF5IGJlIGNhbGxlZAorICAgICAgICBtdWx0aXBsZSB0
aW1lcywgYXMgdGhlIG9wZXJhdGlvbiBpcyBpZGVtcG90ZW50LgorICAgICAgICAiIiIKKyAgICAg
ICAgdHJ5OgorICAgICAgICAgICAgaW1wb3J0IHBrZ19yZXNvdXJjZXMKKyAgICAgICAgICAgICMg
YWNjZXNzIGFuIGF0dHJpYnV0ZSBpbiBjYXNlIGEgZGVmZXJyZWQgaW1wb3J0ZXIgaXMgcHJlc2Vu
dAorICAgICAgICAgICAgcGtnX3Jlc291cmNlcy5fX25hbWVfXworICAgICAgICBleGNlcHQgSW1w
b3J0RXJyb3I6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIFNpbmNlIHB5dGVzdCB0
ZXN0cyBhcmUgYWx3YXlzIGxvY2F0ZWQgaW4gdGhlIGZpbGUgc3lzdGVtLCB0aGUKKyAgICAgICAg
IyAgRGVmYXVsdFByb3ZpZGVyIGlzIGFwcHJvcHJpYXRlLgorICAgICAgICBwa2dfcmVzb3VyY2Vz
LnJlZ2lzdGVyX2xvYWRlcl90eXBlKGNscywgcGtnX3Jlc291cmNlcy5EZWZhdWx0UHJvdmlkZXIp
CisKKyAgICBkZWYgZ2V0X2RhdGEoc2VsZiwgcGF0aG5hbWUpOgorICAgICAgICAiIiJPcHRpb25h
bCBQRVAzMDIgZ2V0X2RhdGEgQVBJLgorICAgICAgICAiIiIKKyAgICAgICAgd2l0aCBvcGVuKHBh
dGhuYW1lLCAncmInKSBhcyBmOgorICAgICAgICAgICAgcmV0dXJuIGYucmVhZCgpCisKKworZGVm
IF93cml0ZV9weWMoc3RhdGUsIGNvLCBzb3VyY2Vfc3RhdCwgcHljKToKKyAgICAjIFRlY2huaWNh
bGx5LCB3ZSBkb24ndCBoYXZlIHRvIGhhdmUgdGhlIHNhbWUgcHljIGZvcm1hdCBhcworICAgICMg
KEMpUHl0aG9uLCBzaW5jZSB0aGVzZSAicHljcyIgc2hvdWxkIG5ldmVyIGJlIHNlZW4gYnkgYnVp
bHRpbgorICAgICMgaW1wb3J0LiBIb3dldmVyLCB0aGVyZSdzIGxpdHRsZSByZWFzb24gZGV2aWF0
ZSwgYW5kIEkgaG9wZQorICAgICMgc29tZXRpbWUgdG8gYmUgYWJsZSB0byB1c2UgaW1wLmxvYWRf
Y29tcGlsZWQgdG8gbG9hZCB0aGVtLiAoU2VlCisgICAgIyB0aGUgY29tbWVudCBpbiBsb2FkX21v
ZHVsZSBhYm92ZS4pCisgICAgdHJ5OgorICAgICAgICBmcCA9IG9wZW4ocHljLCAid2IiKQorICAg
IGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBlcnIgPSBzeXMuZXhjX2luZm8oKVsxXS5lcnJubwor
ICAgICAgICBzdGF0ZS50cmFjZSgiZXJyb3Igd3JpdGluZyBweWMgZmlsZSBhdCAlczogZXJybm89
JXMiICUocHljLCBlcnIpKQorICAgICAgICAjIHdlIGlnbm9yZSBhbnkgZmFpbHVyZSB0byB3cml0
ZSB0aGUgY2FjaGUgZmlsZQorICAgICAgICAjIHRoZXJlIGFyZSBtYW55IHJlYXNvbnMsIHBlcm1p
c3Npb24tZGVuaWVkLCBfX3B5Y2FjaGVfXyBiZWluZyBhCisgICAgICAgICMgZmlsZSBldGMuCisg
ICAgICAgIHJldHVybiBGYWxzZQorICAgIHRyeToKKyAgICAgICAgZnAud3JpdGUoaW1wLmdldF9t
YWdpYygpKQorICAgICAgICBtdGltZSA9IGludChzb3VyY2Vfc3RhdC5tdGltZSkKKyAgICAgICAg
c2l6ZSA9IHNvdXJjZV9zdGF0LnNpemUgJiAweEZGRkZGRkZGCisgICAgICAgIGZwLndyaXRlKHN0
cnVjdC5wYWNrKCI8bGwiLCBtdGltZSwgc2l6ZSkpCisgICAgICAgIG1hcnNoYWwuZHVtcChjbywg
ZnApCisgICAgZmluYWxseToKKyAgICAgICAgZnAuY2xvc2UoKQorICAgIHJldHVybiBUcnVlCisK
K1JOID0gIlxyXG4iLmVuY29kZSgidXRmLTgiKQorTiA9ICJcbiIuZW5jb2RlKCJ1dGYtOCIpCisK
K2Nvb2tpZV9yZSA9IHJlLmNvbXBpbGUociJeWyBcdFxmXSojLipjb2RpbmdbOj1dWyBcdF0qWy1c
dy5dKyIpCitCT01fVVRGOCA9ICdceGVmXHhiYlx4YmYnCisKK2RlZiBfcmV3cml0ZV90ZXN0KHN0
YXRlLCBmbik6CisgICAgIiIiVHJ5IHRvIHJlYWQgYW5kIHJld3JpdGUgKmZuKiBhbmQgcmV0dXJu
IHRoZSBjb2RlIG9iamVjdC4iIiIKKyAgICB0cnk6CisgICAgICAgIHN0YXQgPSBmbi5zdGF0KCkK
KyAgICAgICAgc291cmNlID0gZm4ucmVhZCgicmIiKQorICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVy
cm9yOgorICAgICAgICByZXR1cm4gTm9uZSwgTm9uZQorICAgIGlmIEFTQ0lJX0lTX0RFRkFVTFRf
RU5DT0RJTkc6CisgICAgICAgICMgQVNDSUkgaXMgdGhlIGRlZmF1bHQgZW5jb2RpbmcgaW4gUHl0
aG9uIDIuIFdpdGhvdXQgYSBjb2RpbmcKKyAgICAgICAgIyBkZWNsYXJhdGlvbiwgUHl0aG9uIDIg
d2lsbCBjb21wbGFpbiBhYm91dCBhbnkgYnl0ZXMgaW4gdGhlIGZpbGUKKyAgICAgICAgIyBvdXRz
aWRlIHRoZSBBU0NJSSByYW5nZS4gU2FkbHksIHRoaXMgYmVoYXZpb3IgZG9lcyBub3QgZXh0ZW5k
IHRvCisgICAgICAgICMgY29tcGlsZSgpIG9yIGFzdC5wYXJzZSgpLCB3aGljaCBwcmVmZXIgdG8g
aW50ZXJwcmV0IHRoZSBieXRlcyBhcworICAgICAgICAjIGxhdGluLTEuIChBdCBsZWFzdCB0aGV5
IHByb3Blcmx5IGhhbmRsZSBleHBsaWNpdCBjb2RpbmcgY29va2llcy4pIFRvCisgICAgICAgICMg
cHJlc2VydmUgdGhpcyBlcnJvciBiZWhhdmlvciwgd2UgY291bGQgZm9yY2UgYXN0LnBhcnNlKCkg
dG8gdXNlIEFTQ0lJCisgICAgICAgICMgYXMgdGhlIGVuY29kaW5nIGJ5IGluc2VydGluZyBhIGNv
ZGluZyBjb29raWUuIFVuZm9ydHVuYXRlbHksIHRoYXQKKyAgICAgICAgIyBtZXNzZXMgdXAgbGlu
ZSBudW1iZXJzLiBUaHVzLCB3ZSBoYXZlIHRvIGNoZWNrIG91cnNlbHZlcyBpZiBhbnl0aGluZwor
ICAgICAgICAjIGlzIG91dHNpZGUgdGhlIEFTQ0lJIHJhbmdlIGluIHRoZSBjYXNlIG5vIGVuY29k
aW5nIGlzIGV4cGxpY2l0bHkKKyAgICAgICAgIyBkZWNsYXJlZC4gRm9yIG1vcmUgY29udGV4dCwg
c2VlIGlzc3VlICMyNjkuIFlheSBmb3IgUHl0aG9uIDMgd2hpY2gKKyAgICAgICAgIyBnZXRzIHRo
aXMgcmlnaHQuCisgICAgICAgIGVuZDEgPSBzb3VyY2UuZmluZCgiXG4iKQorICAgICAgICBlbmQy
ID0gc291cmNlLmZpbmQoIlxuIiwgZW5kMSArIDEpCisgICAgICAgIGlmIChub3Qgc291cmNlLnN0
YXJ0c3dpdGgoQk9NX1VURjgpIGFuZAorICAgICAgICAgICAgY29va2llX3JlLm1hdGNoKHNvdXJj
ZVswOmVuZDFdKSBpcyBOb25lIGFuZAorICAgICAgICAgICAgY29va2llX3JlLm1hdGNoKHNvdXJj
ZVtlbmQxICsgMTplbmQyXSkgaXMgTm9uZSk6CisgICAgICAgICAgICBpZiBoYXNhdHRyKHN0YXRl
LCAiX2luZGVjb2RlIik6CisgICAgICAgICAgICAgICAgIyBlbmNvZGluZ3MgaW1wb3J0ZWQgdXMg
YWdhaW4sIHNvIGRvbid0IHJld3JpdGUuCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUsIE5v
bmUKKyAgICAgICAgICAgIHN0YXRlLl9pbmRlY29kZSA9IFRydWUKKyAgICAgICAgICAgIHRyeToK
KyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNvdXJjZS5kZWNvZGUo
ImFzY2lpIikKKyAgICAgICAgICAgICAgICBleGNlcHQgVW5pY29kZURlY29kZUVycm9yOgorICAg
ICAgICAgICAgICAgICAgICAjIExldCBpdCBmYWlsIGluIHJlYWwgaW1wb3J0LgorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gTm9uZSwgTm9uZQorICAgICAgICAgICAgZmluYWxseToKKyAgICAg
ICAgICAgICAgICBkZWwgc3RhdGUuX2luZGVjb2RlCisgICAgIyBPbiBQeXRob24gdmVyc2lvbnMg
d2hpY2ggYXJlIG5vdCAyLjcgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAzLjEsIHRoZQorICAg
ICMgcGFyc2VyIGV4cGVjdHMgKm5peCBuZXdsaW5lcy4KKyAgICBpZiBSRVdSSVRFX05FV0xJTkVT
OgorICAgICAgICBzb3VyY2UgPSBzb3VyY2UucmVwbGFjZShSTiwgTikgKyBOCisgICAgdHJ5Ogor
ICAgICAgICB0cmVlID0gYXN0LnBhcnNlKHNvdXJjZSkKKyAgICBleGNlcHQgU3ludGF4RXJyb3I6
CisgICAgICAgICMgTGV0IHRoaXMgcG9wIHVwIGFnYWluIGluIHRoZSByZWFsIGltcG9ydC4KKyAg
ICAgICAgc3RhdGUudHJhY2UoImZhaWxlZCB0byBwYXJzZTogJXIiICUgKGZuLCkpCisgICAgICAg
IHJldHVybiBOb25lLCBOb25lCisgICAgcmV3cml0ZV9hc3NlcnRzKHRyZWUpCisgICAgdHJ5Ogor
ICAgICAgICBjbyA9IGNvbXBpbGUodHJlZSwgZm4uc3RycGF0aCwgImV4ZWMiKQorICAgIGV4Y2Vw
dCBTeW50YXhFcnJvcjoKKyAgICAgICAgIyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhpcyBlcnJvciBp
cyBmcm9tIHNvbWUgYnVnIGluIHRoZQorICAgICAgICAjIGFzc2VydGlvbiByZXdyaXRpbmcsIGJ1
dCBJIGRvbid0IGtub3cgb2YgYSBmYXN0IHdheSB0byB0ZWxsLgorICAgICAgICBzdGF0ZS50cmFj
ZSgiZmFpbGVkIHRvIGNvbXBpbGU6ICVyIiAlIChmbiwpKQorICAgICAgICByZXR1cm4gTm9uZSwg
Tm9uZQorICAgIHJldHVybiBzdGF0LCBjbworCitkZWYgX21ha2VfcmV3cml0dGVuX3B5YyhzdGF0
ZSwgc291cmNlX3N0YXQsIHB5YywgY28pOgorICAgICIiIlRyeSB0byBkdW1wIHJld3JpdHRlbiBj
b2RlIHRvICpweWMqLiIiIgorICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCJ3aW4iKToK
KyAgICAgICAgIyBXaW5kb3dzIGdyYW50cyBleGNsdXNpdmUgYWNjZXNzIHRvIG9wZW4gZmlsZXMg
YW5kIGRvZXNuJ3QgaGF2ZSBhdG9taWMKKyAgICAgICAgIyByZW5hbWUsIHNvIGp1c3Qgd3JpdGUg
aW50byB0aGUgZmluYWwgZmlsZS4KKyAgICAgICAgX3dyaXRlX3B5YyhzdGF0ZSwgY28sIHNvdXJj
ZV9zdGF0LCBweWMpCisgICAgZWxzZToKKyAgICAgICAgIyBXaGVuIG5vdCBvbiB3aW5kb3dzLCBh
c3N1bWUgcmVuYW1lIGlzIGF0b21pYy4gRHVtcCB0aGUgY29kZSBvYmplY3QKKyAgICAgICAgIyBp
bnRvIGEgZmlsZSBzcGVjaWZpYyB0byB0aGlzIHByb2Nlc3MgYW5kIGF0b21pY2FsbHkgcmVwbGFj
ZSBpdC4KKyAgICAgICAgcHJvY19weWMgPSBweWMgKyAiLiIgKyBzdHIob3MuZ2V0cGlkKCkpCisg
ICAgICAgIGlmIF93cml0ZV9weWMoc3RhdGUsIGNvLCBzb3VyY2Vfc3RhdCwgcHJvY19weWMpOgor
ICAgICAgICAgICAgb3MucmVuYW1lKHByb2NfcHljLCBweWMpCisKK2RlZiBfcmVhZF9weWMoc291
cmNlLCBweWMsIHRyYWNlPWxhbWJkYSB4OiBOb25lKToKKyAgICAiIiJQb3NzaWJseSByZWFkIGEg
cHl0ZXN0IHB5YyBjb250YWluaW5nIHJld3JpdHRlbiBjb2RlLgorCisgICAgUmV0dXJuIHJld3Jp
dHRlbiBjb2RlIGlmIHN1Y2Nlc3NmdWwgb3IgTm9uZSBpZiBub3QuCisgICAgIiIiCisgICAgdHJ5
OgorICAgICAgICBmcCA9IG9wZW4ocHljLCAicmIiKQorICAgIGV4Y2VwdCBJT0Vycm9yOgorICAg
ICAgICByZXR1cm4gTm9uZQorICAgIHdpdGggZnA6CisgICAgICAgIHRyeToKKyAgICAgICAgICAg
IG10aW1lID0gaW50KHNvdXJjZS5tdGltZSgpKQorICAgICAgICAgICAgc2l6ZSA9IHNvdXJjZS5z
aXplKCkKKyAgICAgICAgICAgIGRhdGEgPSBmcC5yZWFkKDEyKQorICAgICAgICBleGNlcHQgRW52
aXJvbm1lbnRFcnJvciBhcyBlOgorICAgICAgICAgICAgdHJhY2UoJ19yZWFkX3B5Yyglcyk6IEVu
dmlyb25tZW50RXJyb3IgJXMnICUgKHNvdXJjZSwgZSkpCisgICAgICAgICAgICByZXR1cm4gTm9u
ZQorICAgICAgICAjIENoZWNrIGZvciBpbnZhbGlkIG9yIG91dCBvZiBkYXRlIHB5YyBmaWxlLgor
ICAgICAgICBpZiAobGVuKGRhdGEpICE9IDEyIG9yIGRhdGFbOjRdICE9IGltcC5nZXRfbWFnaWMo
KSBvcgorICAgICAgICAgICAgICAgIHN0cnVjdC51bnBhY2soIjxsbCIsIGRhdGFbNDpdKSAhPSAo
bXRpbWUsIHNpemUpKToKKyAgICAgICAgICAgIHRyYWNlKCdfcmVhZF9weWMoJXMpOiBpbnZhbGlk
IG9yIG91dCBvZiBkYXRlIHB5YycgJSBzb3VyY2UpCisgICAgICAgICAgICByZXR1cm4gTm9uZQor
ICAgICAgICB0cnk6CisgICAgICAgICAgICBjbyA9IG1hcnNoYWwubG9hZChmcCkKKyAgICAgICAg
ZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgdHJhY2UoJ19yZWFkX3B5Yyglcyk6
IG1hcnNoYWwubG9hZCBlcnJvciAlcycgJSAoc291cmNlLCBlKSkKKyAgICAgICAgICAgIHJldHVy
biBOb25lCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGNvLCB0eXBlcy5Db2RlVHlwZSk6Cisg
ICAgICAgICAgICB0cmFjZSgnX3JlYWRfcHljKCVzKTogbm90IGEgY29kZSBvYmplY3QnICUgc291
cmNlKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIGNvCisKKworZGVm
IHJld3JpdGVfYXNzZXJ0cyhtb2QpOgorICAgICIiIlJld3JpdGUgdGhlIGFzc2VydCBzdGF0ZW1l
bnRzIGluIG1vZC4iIiIKKyAgICBBc3NlcnRpb25SZXdyaXRlcigpLnJ1bihtb2QpCisKKworZGVm
IF9zYWZlcmVwcihvYmopOgorICAgICIiIkdldCBhIHNhZmUgcmVwciBvZiBhbiBvYmplY3QgZm9y
IGFzc2VydGlvbiBlcnJvciBtZXNzYWdlcy4KKworICAgIFRoZSBhc3NlcnRpb24gZm9ybWF0dGlu
ZyAodXRpbC5mb3JtYXRfZXhwbGFuYXRpb24oKSkgcmVxdWlyZXMKKyAgICBuZXdsaW5lcyB0byBi
ZSBlc2NhcGVkIHNpbmNlIHRoZXkgYXJlIGEgc3BlY2lhbCBjaGFyYWN0ZXIgZm9yIGl0LgorICAg
IE5vcm1hbGx5IGFzc2VydGlvbi51dGlsLmZvcm1hdF9leHBsYW5hdGlvbigpIGRvZXMgdGhpcyBi
dXQgZm9yIGEKKyAgICBjdXN0b20gcmVwciBpdCBpcyBwb3NzaWJsZSB0byBjb250YWluIG9uZSBv
ZiB0aGUgc3BlY2lhbCBlc2NhcGUKKyAgICBzZXF1ZW5jZXMsIGVzcGVjaWFsbHkgJ1xueycgYW5k
ICdcbn0nIGFyZSBsaWtlbHkgdG8gYmUgcHJlc2VudCBpbgorICAgIEpTT04gcmVwcnMuCisKKyAg
ICAiIiIKKyAgICByZXByID0gcHkuaW8uc2FmZXJlcHIob2JqKQorICAgIGlmIHB5LmJ1aWx0aW4u
X2lzdGV4dChyZXByKToKKyAgICAgICAgdCA9IHB5LmJ1aWx0aW4udGV4dAorICAgIGVsc2U6Cisg
ICAgICAgIHQgPSBweS5idWlsdGluLmJ5dGVzCisgICAgcmV0dXJuIHJlcHIucmVwbGFjZSh0KCJc
biIpLCB0KCJcXG4iKSkKKworCitmcm9tIF9weXRlc3QuYXNzZXJ0aW9uLnV0aWwgaW1wb3J0IGZv
cm1hdF9leHBsYW5hdGlvbiBhcyBfZm9ybWF0X2V4cGxhbmF0aW9uICMgbm9xYQorCitkZWYgX2Zv
cm1hdF9hc3NlcnRtc2cob2JqKToKKyAgICAiIiJGb3JtYXQgdGhlIGN1c3RvbSBhc3NlcnRpb24g
bWVzc2FnZSBnaXZlbi4KKworICAgIEZvciBzdHJpbmdzIHRoaXMgc2ltcGx5IHJlcGxhY2VzIG5l
d2xpbmVzIHdpdGggJ1xuficgc28gdGhhdAorICAgIHV0aWwuZm9ybWF0X2V4cGxhbmF0aW9uKCkg
d2lsbCBwcmVzZXJ2ZSB0aGVtIGluc3RlYWQgb2YgZXNjYXBpbmcKKyAgICBuZXdsaW5lcy4gIEZv
ciBvdGhlciBvYmplY3RzIHB5LmlvLnNhZmVyZXByKCkgaXMgdXNlZCBmaXJzdC4KKworICAgICIi
IgorICAgICMgcmVwcmxpYiBhcHBlYXJzIHRvIGhhdmUgYSBidWcgd2hpY2ggbWVhbnMgdGhhdCBp
ZiBhIHN0cmluZworICAgICMgY29udGFpbnMgYSBuZXdsaW5lIGl0IGdldHMgZXNjYXBlZCwgaG93
ZXZlciBpZiBhbiBvYmplY3QgaGFzIGEKKyAgICAjIC5fX3JlcHJfXygpIHdoaWNoIGNvbnRhaW5z
IG5ld2xpbmVzIGl0IGRvZXMgbm90IGdldCBlc2NhcGVkLgorICAgICMgSG93ZXZlciBpbiBlaXRo
ZXIgY2FzZSB3ZSB3YW50IHRvIHByZXNlcnZlIHRoZSBuZXdsaW5lLgorICAgIGlmIHB5LmJ1aWx0
aW4uX2lzdGV4dChvYmopIG9yIHB5LmJ1aWx0aW4uX2lzYnl0ZXMob2JqKToKKyAgICAgICAgcyA9
IG9iagorICAgICAgICBpc19yZXByID0gRmFsc2UKKyAgICBlbHNlOgorICAgICAgICBzID0gcHku
aW8uc2FmZXJlcHIob2JqKQorICAgICAgICBpc19yZXByID0gVHJ1ZQorICAgIGlmIHB5LmJ1aWx0
aW4uX2lzdGV4dChzKToKKyAgICAgICAgdCA9IHB5LmJ1aWx0aW4udGV4dAorICAgIGVsc2U6Cisg
ICAgICAgIHQgPSBweS5idWlsdGluLmJ5dGVzCisgICAgcyA9IHMucmVwbGFjZSh0KCJcbiIpLCB0
KCJcbn4iKSkucmVwbGFjZSh0KCIlIiksIHQoIiUlIikpCisgICAgaWYgaXNfcmVwcjoKKyAgICAg
ICAgcyA9IHMucmVwbGFjZSh0KCJcXG4iKSwgdCgiXG5+IikpCisgICAgcmV0dXJuIHMKKworZGVm
IF9zaG91bGRfcmVwcl9nbG9iYWxfbmFtZShvYmopOgorICAgIHJldHVybiBub3QgaGFzYXR0cihv
YmosICJfX25hbWVfXyIpIGFuZCBub3QgcHkuYnVpbHRpbi5jYWxsYWJsZShvYmopCisKK2RlZiBf
Zm9ybWF0X2Jvb2xvcChleHBsYW5hdGlvbnMsIGlzX29yKToKKyAgICBleHBsYW5hdGlvbiA9ICIo
IiArIChpc19vciBhbmQgIiBvciAiIG9yICIgYW5kICIpLmpvaW4oZXhwbGFuYXRpb25zKSArICIp
IgorICAgIGlmIHB5LmJ1aWx0aW4uX2lzdGV4dChleHBsYW5hdGlvbik6CisgICAgICAgIHQgPSBw
eS5idWlsdGluLnRleHQKKyAgICBlbHNlOgorICAgICAgICB0ID0gcHkuYnVpbHRpbi5ieXRlcwor
ICAgIHJldHVybiBleHBsYW5hdGlvbi5yZXBsYWNlKHQoJyUnKSwgdCgnJSUnKSkKKworZGVmIF9j
YWxsX3JlcHJjb21wYXJlKG9wcywgcmVzdWx0cywgZXhwbHMsIGVhY2hfb2JqKToKKyAgICBmb3Ig
aSwgcmVzLCBleHBsIGluIHppcChyYW5nZShsZW4ob3BzKSksIHJlc3VsdHMsIGV4cGxzKToKKyAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgZG9uZSA9IG5vdCByZXMKKyAgICAgICAgZXhjZXB0IEV4
Y2VwdGlvbjoKKyAgICAgICAgICAgIGRvbmUgPSBUcnVlCisgICAgICAgIGlmIGRvbmU6CisgICAg
ICAgICAgICBicmVhaworICAgIGlmIHV0aWwuX3JlcHJjb21wYXJlIGlzIG5vdCBOb25lOgorICAg
ICAgICBjdXN0b20gPSB1dGlsLl9yZXByY29tcGFyZShvcHNbaV0sIGVhY2hfb2JqW2ldLCBlYWNo
X29ialtpICsgMV0pCisgICAgICAgIGlmIGN1c3RvbSBpcyBub3QgTm9uZToKKyAgICAgICAgICAg
IHJldHVybiBjdXN0b20KKyAgICByZXR1cm4gZXhwbAorCisKK3VuYXJ5X21hcCA9IHsKKyAgICBh
c3QuTm90OiAibm90ICVzIiwKKyAgICBhc3QuSW52ZXJ0OiAifiVzIiwKKyAgICBhc3QuVVN1Yjog
Ii0lcyIsCisgICAgYXN0LlVBZGQ6ICIrJXMiCit9CisKK2Jpbm9wX21hcCA9IHsKKyAgICBhc3Qu
Qml0T3I6ICJ8IiwKKyAgICBhc3QuQml0WG9yOiAiXiIsCisgICAgYXN0LkJpdEFuZDogIiYiLAor
ICAgIGFzdC5MU2hpZnQ6ICI8PCIsCisgICAgYXN0LlJTaGlmdDogIj4+IiwKKyAgICBhc3QuQWRk
OiAiKyIsCisgICAgYXN0LlN1YjogIi0iLAorICAgIGFzdC5NdWx0OiAiKiIsCisgICAgYXN0LkRp
djogIi8iLAorICAgIGFzdC5GbG9vckRpdjogIi8vIiwKKyAgICBhc3QuTW9kOiAiJSUiLCAjIGVz
Y2FwZWQgZm9yIHN0cmluZyBmb3JtYXR0aW5nCisgICAgYXN0LkVxOiAiPT0iLAorICAgIGFzdC5O
b3RFcTogIiE9IiwKKyAgICBhc3QuTHQ6ICI8IiwKKyAgICBhc3QuTHRFOiAiPD0iLAorICAgIGFz
dC5HdDogIj4iLAorICAgIGFzdC5HdEU6ICI+PSIsCisgICAgYXN0LlBvdzogIioqIiwKKyAgICBh
c3QuSXM6ICJpcyIsCisgICAgYXN0LklzTm90OiAiaXMgbm90IiwKKyAgICBhc3QuSW46ICJpbiIs
CisgICAgYXN0Lk5vdEluOiAibm90IGluIgorfQorIyBQeXRob24gMy41KyBjb21wYXRpYmlsaXR5
Cit0cnk6CisgICAgYmlub3BfbWFwW2FzdC5NYXRNdWx0XSA9ICJAIgorZXhjZXB0IEF0dHJpYnV0
ZUVycm9yOgorICAgIHBhc3MKKworIyBQeXRob24gMy40KyBjb21wYXRpYmlsaXR5CitpZiBoYXNh
dHRyKGFzdCwgIk5hbWVDb25zdGFudCIpOgorICAgIF9OYW1lQ29uc3RhbnQgPSBhc3QuTmFtZUNv
bnN0YW50CitlbHNlOgorICAgIGRlZiBfTmFtZUNvbnN0YW50KGMpOgorICAgICAgICByZXR1cm4g
YXN0Lk5hbWUoc3RyKGMpLCBhc3QuTG9hZCgpKQorCisKK2RlZiBzZXRfbG9jYXRpb24obm9kZSwg
bGluZW5vLCBjb2xfb2Zmc2V0KToKKyAgICAiIiJTZXQgbm9kZSBsb2NhdGlvbiBpbmZvcm1hdGlv
biByZWN1cnNpdmVseS4iIiIKKyAgICBkZWYgX2ZpeChub2RlLCBsaW5lbm8sIGNvbF9vZmZzZXQp
OgorICAgICAgICBpZiAibGluZW5vIiBpbiBub2RlLl9hdHRyaWJ1dGVzOgorICAgICAgICAgICAg
bm9kZS5saW5lbm8gPSBsaW5lbm8KKyAgICAgICAgaWYgImNvbF9vZmZzZXQiIGluIG5vZGUuX2F0
dHJpYnV0ZXM6CisgICAgICAgICAgICBub2RlLmNvbF9vZmZzZXQgPSBjb2xfb2Zmc2V0CisgICAg
ICAgIGZvciBjaGlsZCBpbiBhc3QuaXRlcl9jaGlsZF9ub2Rlcyhub2RlKToKKyAgICAgICAgICAg
IF9maXgoY2hpbGQsIGxpbmVubywgY29sX29mZnNldCkKKyAgICBfZml4KG5vZGUsIGxpbmVubywg
Y29sX29mZnNldCkKKyAgICByZXR1cm4gbm9kZQorCisKK2NsYXNzIEFzc2VydGlvblJld3JpdGVy
KGFzdC5Ob2RlVmlzaXRvcik6CisgICAgIiIiQXNzZXJ0aW9uIHJld3JpdGluZyBpbXBsZW1lbnRh
dGlvbi4KKworICAgIFRoZSBtYWluIGVudHJ5cG9pbnQgaXMgdG8gY2FsbCAucnVuKCkgd2l0aCBh
biBhc3QuTW9kdWxlIGluc3RhbmNlLAorICAgIHRoaXMgd2lsbCB0aGVuIGZpbmQgYWxsIHRoZSBh
c3NlcnQgc3RhdGVtZW50cyBhbmQgcmUtd3JpdGUgdGhlbSB0bworICAgIHByb3ZpZGUgaW50ZXJt
ZWRpYXRlIHZhbHVlcyBhbmQgYSBkZXRhaWxlZCBhc3NlcnRpb24gZXJyb3IuICBTZWUKKyAgICBo
dHRwOi8vcHliaXRlcy5ibG9nc3BvdC5iZS8yMDExLzA3L2JlaGluZC1zY2VuZXMtb2YtcHl0ZXN0
cy1uZXctYXNzZXJ0aW9uLmh0bWwKKyAgICBmb3IgYW4gb3ZlcnZpZXcgb2YgaG93IHRoaXMgd29y
a3MuCisKKyAgICBUaGUgZW50cnkgcG9pbnQgaGVyZSBpcyAucnVuKCkgd2hpY2ggd2lsbCBpdGVy
YXRlIG92ZXIgYWxsIHRoZQorICAgIHN0YXRlbWVudHMgaW4gYW4gYXN0Lk1vZHVsZSBhbmQgZm9y
IGVhY2ggYXN0LkFzc2VydCBzdGF0ZW1lbnQgaXQKKyAgICBmaW5kcyBjYWxsIC52aXNpdCgpIHdp
dGggaXQuICBUaGVuIC52aXNpdF9Bc3NlcnQoKSB0YWtlcyBvdmVyIGFuZAorICAgIGlzIHJlc3Bv
bnNpYmxlIGZvciBjcmVhdGluZyBuZXcgYXN0IHN0YXRlbWVudHMgdG8gcmVwbGFjZSB0aGUKKyAg
ICBvcmlnaW5hbCBhc3NlcnQgc3RhdGVtZW50OiBpdCByZS13cml0ZXMgdGhlIHRlc3Qgb2YgYW4g
YXNzZXJ0aW9uCisgICAgdG8gcHJvdmlkZSBpbnRlcm1lZGlhdGUgdmFsdWVzIGFuZCByZXBsYWNl
IGl0IHdpdGggYW4gaWYgc3RhdGVtZW50CisgICAgd2hpY2ggcmFpc2VzIGFuIGFzc2VydGlvbiBl
cnJvciB3aXRoIGEgZGV0YWlsZWQgZXhwbGFuYXRpb24gaW4KKyAgICBjYXNlIHRoZSBleHByZXNz
aW9uIGlzIGZhbHNlLgorCisgICAgRm9yIHRoaXMgLnZpc2l0X0Fzc2VydCgpIHVzZXMgdGhlIHZp
c2l0b3IgcGF0dGVybiB0byB2aXNpdCBhbGwgdGhlCisgICAgQVNUIG5vZGVzIG9mIHRoZSBhc3Qu
QXNzZXJ0LnRlc3QgZmllbGQsIGVhY2ggdmlzaXQgY2FsbCByZXR1cm5pbmcKKyAgICBhbiBBU1Qg
bm9kZSBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgZXhwbGFuYXRpb24gc3RyaW5nLiAgRHVyaW5nIHRo
aXMKKyAgICBzdGF0ZSBpcyBrZXB0IGluIHNldmVyYWwgaW5zdGFuY2UgYXR0cmlidXRlczoKKwor
ICAgIDpzdGF0ZW1lbnRzOiBBbGwgdGhlIEFTVCBzdGF0ZW1lbnRzIHdoaWNoIHdpbGwgcmVwbGFj
ZSB0aGUgYXNzZXJ0CisgICAgICAgc3RhdGVtZW50LgorCisgICAgOnZhcmlhYmxlczogVGhpcyBp
cyBwb3B1bGF0ZWQgYnkgLnZhcmlhYmxlKCkgd2l0aCBlYWNoIHZhcmlhYmxlCisgICAgICAgdXNl
ZCBieSB0aGUgc3RhdGVtZW50cyBzbyB0aGF0IHRoZXkgY2FuIGFsbCBiZSBzZXQgdG8gTm9uZSBh
dAorICAgICAgIHRoZSBlbmQgb2YgdGhlIHN0YXRlbWVudHMuCisKKyAgICA6dmFyaWFibGVfY291
bnRlcjogQ291bnRlciB0byBjcmVhdGUgbmV3IHVuaXF1ZSB2YXJpYWJsZXMgbmVlZGVkCisgICAg
ICAgYnkgc3RhdGVtZW50cy4gIFZhcmlhYmxlcyBhcmUgY3JlYXRlZCB1c2luZyAudmFyaWFibGUo
KSBhbmQKKyAgICAgICBoYXZlIHRoZSBmb3JtIG9mICJAcHlfYXNzZXJ0MCIuCisKKyAgICA6b25f
ZmFpbHVyZTogVGhlIEFTVCBzdGF0ZW1lbnRzIHdoaWNoIHdpbGwgYmUgZXhlY3V0ZWQgaWYgdGhl
CisgICAgICAgYXNzZXJ0aW9uIHRlc3QgZmFpbHMuICBUaGlzIGlzIHRoZSBjb2RlIHdoaWNoIHdp
bGwgY29uc3RydWN0CisgICAgICAgdGhlIGZhaWx1cmUgbWVzc2FnZSBhbmQgcmFpc2VzIHRoZSBB
c3NlcnRpb25FcnJvci4KKworICAgIDpleHBsYW5hdGlvbl9zcGVjaWZpZXJzOiBBIGRpY3QgZmls
bGVkIGJ5IC5leHBsYW5hdGlvbl9wYXJhbSgpCisgICAgICAgd2l0aCAlLWZvcm1hdHRpbmcgcGxh
Y2Vob2xkZXJzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nCisgICAgICAgZXhwcmVzc2lvbnMgdG8g
dXNlIGluIHRoZSBidWlsZGluZyBvZiBhbiBhc3NlcnRpb24gbWVzc2FnZS4KKyAgICAgICBUaGlz
IGlzIHVzZWQgYnkgLnBvcF9mb3JtYXRfY29udGV4dCgpIHRvIGJ1aWxkIGEgbWVzc2FnZS4KKwor
ICAgIDpzdGFjazogQSBzdGFjayBvZiB0aGUgZXhwbGFuYXRpb25fc3BlY2lmaWVycyBkaWN0cyBt
YWludGFpbmVkIGJ5CisgICAgICAgLnB1c2hfZm9ybWF0X2NvbnRleHQoKSBhbmQgLnBvcF9mb3Jt
YXRfY29udGV4dCgpIHdoaWNoIGFsbG93cworICAgICAgIHRvIGJ1aWxkIGFub3RoZXIgJS1mb3Jt
YXR0ZWQgc3RyaW5nIHdoaWxlIGFscmVhZHkgYnVpbGRpbmcgb25lLgorCisgICAgVGhpcyBzdGF0
ZSBpcyByZXNldCBvbiBldmVyeSBuZXcgYXNzZXJ0IHN0YXRlbWVudCB2aXNpdGVkIGFuZCB1c2Vk
CisgICAgYnkgdGhlIG90aGVyIHZpc2l0b3JzLgorCisgICAgIiIiCisKKyAgICBkZWYgcnVuKHNl
bGYsIG1vZCk6CisgICAgICAgICIiIkZpbmQgYWxsIGFzc2VydCBzdGF0ZW1lbnRzIGluICptb2Qq
IGFuZCByZXdyaXRlIHRoZW0uIiIiCisgICAgICAgIGlmIG5vdCBtb2QuYm9keToKKyAgICAgICAg
ICAgICMgTm90aGluZyB0byBkby4KKyAgICAgICAgICAgIHJldHVybgorICAgICAgICAjIEluc2Vy
dCBzb21lIHNwZWNpYWwgaW1wb3J0cyBhdCB0aGUgdG9wIG9mIHRoZSBtb2R1bGUgYnV0IGFmdGVy
IGFueQorICAgICAgICAjIGRvY3N0cmluZ3MgYW5kIF9fZnV0dXJlX18gaW1wb3J0cy4KKyAgICAg
ICAgYWxpYXNlcyA9IFthc3QuYWxpYXMocHkuYnVpbHRpbi5idWlsdGlucy5fX25hbWVfXywgIkBw
eV9idWlsdGlucyIpLAorICAgICAgICAgICAgICAgICAgIGFzdC5hbGlhcygiX3B5dGVzdC5hc3Nl
cnRpb24ucmV3cml0ZSIsICJAcHl0ZXN0X2FyIildCisgICAgICAgIGV4cGVjdF9kb2NzdHJpbmcg
PSBUcnVlCisgICAgICAgIHBvcyA9IDAKKyAgICAgICAgbGluZW5vID0gMAorICAgICAgICBmb3Ig
aXRlbSBpbiBtb2QuYm9keToKKyAgICAgICAgICAgIGlmIChleHBlY3RfZG9jc3RyaW5nIGFuZCBp
c2luc3RhbmNlKGl0ZW0sIGFzdC5FeHByKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgaXNpbnN0
YW5jZShpdGVtLnZhbHVlLCBhc3QuU3RyKSk6CisgICAgICAgICAgICAgICAgZG9jID0gaXRlbS52
YWx1ZS5zCisgICAgICAgICAgICAgICAgaWYgIlBZVEVTVF9ET05UX1JFV1JJVEUiIGluIGRvYzoK
KyAgICAgICAgICAgICAgICAgICAgIyBUaGUgbW9kdWxlIGhhcyBkaXNhYmxlZCBhc3NlcnRpb24g
cmV3cml0aW5nLgorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICBs
aW5lbm8gKz0gbGVuKGRvYykgLSAxCisgICAgICAgICAgICAgICAgZXhwZWN0X2RvY3N0cmluZyA9
IEZhbHNlCisgICAgICAgICAgICBlbGlmIChub3QgaXNpbnN0YW5jZShpdGVtLCBhc3QuSW1wb3J0
RnJvbSkgb3IgaXRlbS5sZXZlbCA+IDAgb3IKKyAgICAgICAgICAgICAgICAgIGl0ZW0ubW9kdWxl
ICE9ICJfX2Z1dHVyZV9fIik6CisgICAgICAgICAgICAgICAgbGluZW5vID0gaXRlbS5saW5lbm8K
KyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgcG9zICs9IDEKKyAgICAgICAgaW1w
b3J0cyA9IFthc3QuSW1wb3J0KFthbGlhc10sIGxpbmVubz1saW5lbm8sIGNvbF9vZmZzZXQ9MCkK
KyAgICAgICAgICAgICAgICAgICBmb3IgYWxpYXMgaW4gYWxpYXNlc10KKyAgICAgICAgbW9kLmJv
ZHlbcG9zOnBvc10gPSBpbXBvcnRzCisgICAgICAgICMgQ29sbGVjdCBhc3NlcnRzLgorICAgICAg
ICBub2RlcyA9IFttb2RdCisgICAgICAgIHdoaWxlIG5vZGVzOgorICAgICAgICAgICAgbm9kZSA9
IG5vZGVzLnBvcCgpCisgICAgICAgICAgICBmb3IgbmFtZSwgZmllbGQgaW4gYXN0Lml0ZXJfZmll
bGRzKG5vZGUpOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZmllbGQsIGxpc3QpOgor
ICAgICAgICAgICAgICAgICAgICBuZXcgPSBbXQorICAgICAgICAgICAgICAgICAgICBmb3IgaSwg
Y2hpbGQgaW4gZW51bWVyYXRlKGZpZWxkKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGlz
aW5zdGFuY2UoY2hpbGQsIGFzdC5Bc3NlcnQpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICMgVHJhbnNmb3JtIGFzc2VydC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcuZXh0
ZW5kKHNlbGYudmlzaXQoY2hpbGQpKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcuYXBwZW5kKGNoaWxkKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoY2hpbGQsIGFzdC5BU1QpOgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBub2Rlcy5hcHBlbmQoY2hpbGQpCisgICAgICAgICAgICAg
ICAgICAgIHNldGF0dHIobm9kZSwgbmFtZSwgbmV3KQorICAgICAgICAgICAgICAgIGVsaWYgKGlz
aW5zdGFuY2UoZmllbGQsIGFzdC5BU1QpIGFuZAorICAgICAgICAgICAgICAgICAgICAgICMgRG9u
J3QgcmVjdXJzZSBpbnRvIGV4cHJlc3Npb25zIGFzIHRoZXkgY2FuJ3QgY29udGFpbgorICAgICAg
ICAgICAgICAgICAgICAgICMgYXNzZXJ0cy4KKyAgICAgICAgICAgICAgICAgICAgICBub3QgaXNp
bnN0YW5jZShmaWVsZCwgYXN0LmV4cHIpKToKKyAgICAgICAgICAgICAgICAgICAgbm9kZXMuYXBw
ZW5kKGZpZWxkKQorCisgICAgZGVmIHZhcmlhYmxlKHNlbGYpOgorICAgICAgICAiIiJHZXQgYSBu
ZXcgdmFyaWFibGUuIiIiCisgICAgICAgICMgVXNlIGEgY2hhcmFjdGVyIGludmFsaWQgaW4gcHl0
aG9uIGlkZW50aWZpZXJzIHRvIGF2b2lkIGNsYXNoaW5nLgorICAgICAgICBuYW1lID0gIkBweV9h
c3NlcnQiICsgc3RyKG5leHQoc2VsZi52YXJpYWJsZV9jb3VudGVyKSkKKyAgICAgICAgc2VsZi52
YXJpYWJsZXMuYXBwZW5kKG5hbWUpCisgICAgICAgIHJldHVybiBuYW1lCisKKyAgICBkZWYgYXNz
aWduKHNlbGYsIGV4cHIpOgorICAgICAgICAiIiJHaXZlICpleHByKiBhIG5hbWUuIiIiCisgICAg
ICAgIG5hbWUgPSBzZWxmLnZhcmlhYmxlKCkKKyAgICAgICAgc2VsZi5zdGF0ZW1lbnRzLmFwcGVu
ZChhc3QuQXNzaWduKFthc3QuTmFtZShuYW1lLCBhc3QuU3RvcmUoKSldLCBleHByKSkKKyAgICAg
ICAgcmV0dXJuIGFzdC5OYW1lKG5hbWUsIGFzdC5Mb2FkKCkpCisKKyAgICBkZWYgZGlzcGxheShz
ZWxmLCBleHByKToKKyAgICAgICAgIiIiQ2FsbCBweS5pby5zYWZlcmVwciBvbiB0aGUgZXhwcmVz
c2lvbi4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuaGVscGVyKCJzYWZlcmVwciIsIGV4cHIpCisK
KyAgICBkZWYgaGVscGVyKHNlbGYsIG5hbWUsICphcmdzKToKKyAgICAgICAgIiIiQ2FsbCBhIGhl
bHBlciBpbiB0aGlzIG1vZHVsZS4iIiIKKyAgICAgICAgcHlfbmFtZSA9IGFzdC5OYW1lKCJAcHl0
ZXN0X2FyIiwgYXN0LkxvYWQoKSkKKyAgICAgICAgYXR0ciA9IGFzdC5BdHRyaWJ1dGUocHlfbmFt
ZSwgIl8iICsgbmFtZSwgYXN0LkxvYWQoKSkKKyAgICAgICAgcmV0dXJuIGFzdF9DYWxsKGF0dHIs
IGxpc3QoYXJncyksIFtdKQorCisgICAgZGVmIGJ1aWx0aW4oc2VsZiwgbmFtZSk6CisgICAgICAg
ICIiIlJldHVybiB0aGUgYnVpbHRpbiBjYWxsZWQgKm5hbWUqLiIiIgorICAgICAgICBidWlsdGlu
X25hbWUgPSBhc3QuTmFtZSgiQHB5X2J1aWx0aW5zIiwgYXN0LkxvYWQoKSkKKyAgICAgICAgcmV0
dXJuIGFzdC5BdHRyaWJ1dGUoYnVpbHRpbl9uYW1lLCBuYW1lLCBhc3QuTG9hZCgpKQorCisgICAg
ZGVmIGV4cGxhbmF0aW9uX3BhcmFtKHNlbGYsIGV4cHIpOgorICAgICAgICAiIiJSZXR1cm4gYSBu
ZXcgbmFtZWQgJS1mb3JtYXR0aW5nIHBsYWNlaG9sZGVyIGZvciBleHByLgorCisgICAgICAgIFRo
aXMgY3JlYXRlcyBhICUtZm9ybWF0dGluZyBwbGFjZWhvbGRlciBmb3IgZXhwciBpbiB0aGUKKyAg
ICAgICAgY3VycmVudCBmb3JtYXR0aW5nIGNvbnRleHQsIGUuZy4gYGAlKHB5MClzYGAuICBUaGUg
cGxhY2Vob2xkZXIKKyAgICAgICAgYW5kIGV4cHIgYXJlIHBsYWNlZCBpbiB0aGUgY3VycmVudCBm
b3JtYXQgY29udGV4dCBzbyB0aGF0IGl0CisgICAgICAgIGNhbiBiZSB1c2VkIG9uIHRoZSBuZXh0
IGNhbGwgdG8gLnBvcF9mb3JtYXRfY29udGV4dCgpLgorCisgICAgICAgICIiIgorICAgICAgICBz
cGVjaWZpZXIgPSAicHkiICsgc3RyKG5leHQoc2VsZi52YXJpYWJsZV9jb3VudGVyKSkKKyAgICAg
ICAgc2VsZi5leHBsYW5hdGlvbl9zcGVjaWZpZXJzW3NwZWNpZmllcl0gPSBleHByCisgICAgICAg
IHJldHVybiAiJSgiICsgc3BlY2lmaWVyICsgIilzIgorCisgICAgZGVmIHB1c2hfZm9ybWF0X2Nv
bnRleHQoc2VsZik6CisgICAgICAgICIiIkNyZWF0ZSBhIG5ldyBmb3JtYXR0aW5nIGNvbnRleHQu
CisKKyAgICAgICAgVGhlIGZvcm1hdCBjb250ZXh0IGlzIHVzZWQgZm9yIHdoZW4gYW4gZXhwbGFu
YXRpb24gd2FudHMgdG8KKyAgICAgICAgaGF2ZSBhIHZhcmlhYmxlIHZhbHVlIGZvcm1hdHRlZCBp
biB0aGUgYXNzZXJ0aW9uIG1lc3NhZ2UuICBJbgorICAgICAgICB0aGlzIGNhc2UgdGhlIHZhbHVl
IHJlcXVpcmVkIGNhbiBiZSBhZGRlZCB1c2luZworICAgICAgICAuZXhwbGFuYXRpb25fcGFyYW0o
KS4gIEZpbmFsbHkgLnBvcF9mb3JtYXRfY29udGV4dCgpIGlzIHVzZWQKKyAgICAgICAgdG8gZm9y
bWF0IGEgc3RyaW5nIG9mICUtZm9ybWF0dGVkIHZhbHVlcyBhcyBhZGRlZCBieQorICAgICAgICAu
ZXhwbGFuYXRpb25fcGFyYW0oKS4KKworICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5leHBsYW5h
dGlvbl9zcGVjaWZpZXJzID0ge30KKyAgICAgICAgc2VsZi5zdGFjay5hcHBlbmQoc2VsZi5leHBs
YW5hdGlvbl9zcGVjaWZpZXJzKQorCisgICAgZGVmIHBvcF9mb3JtYXRfY29udGV4dChzZWxmLCBl
eHBsX2V4cHIpOgorICAgICAgICAiIiJGb3JtYXQgdGhlICUtZm9ybWF0dGVkIHN0cmluZyB3aXRo
IGN1cnJlbnQgZm9ybWF0IGNvbnRleHQuCisKKyAgICAgICAgVGhlIGV4cGxfZXhwciBzaG91bGQg
YmUgYW4gYXN0LlN0ciBpbnN0YW5jZSBjb25zdHJ1Y3RlZCBmcm9tCisgICAgICAgIHRoZSAlLXBs
YWNlaG9sZGVycyBjcmVhdGVkIGJ5IC5leHBsYW5hdGlvbl9wYXJhbSgpLiAgVGhpcyB3aWxsCisg
ICAgICAgIGFkZCB0aGUgcmVxdWlyZWQgY29kZSB0byBmb3JtYXQgc2FpZCBzdHJpbmcgdG8gLm9u
X2ZhaWx1cmUgYW5kCisgICAgICAgIHJldHVybiB0aGUgYXN0Lk5hbWUgaW5zdGFuY2Ugb2YgdGhl
IGZvcm1hdHRlZCBzdHJpbmcuCisKKyAgICAgICAgIiIiCisgICAgICAgIGN1cnJlbnQgPSBzZWxm
LnN0YWNrLnBvcCgpCisgICAgICAgIGlmIHNlbGYuc3RhY2s6CisgICAgICAgICAgICBzZWxmLmV4
cGxhbmF0aW9uX3NwZWNpZmllcnMgPSBzZWxmLnN0YWNrWy0xXQorICAgICAgICBrZXlzID0gW2Fz
dC5TdHIoa2V5KSBmb3Iga2V5IGluIGN1cnJlbnQua2V5cygpXQorICAgICAgICBmb3JtYXRfZGlj
dCA9IGFzdC5EaWN0KGtleXMsIGxpc3QoY3VycmVudC52YWx1ZXMoKSkpCisgICAgICAgIGZvcm0g
PSBhc3QuQmluT3AoZXhwbF9leHByLCBhc3QuTW9kKCksIGZvcm1hdF9kaWN0KQorICAgICAgICBu
YW1lID0gIkBweV9mb3JtYXQiICsgc3RyKG5leHQoc2VsZi52YXJpYWJsZV9jb3VudGVyKSkKKyAg
ICAgICAgc2VsZi5vbl9mYWlsdXJlLmFwcGVuZChhc3QuQXNzaWduKFthc3QuTmFtZShuYW1lLCBh
c3QuU3RvcmUoKSldLCBmb3JtKSkKKyAgICAgICAgcmV0dXJuIGFzdC5OYW1lKG5hbWUsIGFzdC5M
b2FkKCkpCisKKyAgICBkZWYgZ2VuZXJpY192aXNpdChzZWxmLCBub2RlKToKKyAgICAgICAgIiIi
SGFuZGxlIGV4cHJlc3Npb25zIHdlIGRvbid0IGhhdmUgY3VzdG9tIGNvZGUgZm9yLiIiIgorICAg
ICAgICBhc3NlcnQgaXNpbnN0YW5jZShub2RlLCBhc3QuZXhwcikKKyAgICAgICAgcmVzID0gc2Vs
Zi5hc3NpZ24obm9kZSkKKyAgICAgICAgcmV0dXJuIHJlcywgc2VsZi5leHBsYW5hdGlvbl9wYXJh
bShzZWxmLmRpc3BsYXkocmVzKSkKKworICAgIGRlZiB2aXNpdF9Bc3NlcnQoc2VsZiwgYXNzZXJ0
Xyk6CisgICAgICAgICIiIlJldHVybiB0aGUgQVNUIHN0YXRlbWVudHMgdG8gcmVwbGFjZSB0aGUg
YXN0LkFzc2VydCBpbnN0YW5jZS4KKworICAgICAgICBUaGlzIHJlLXdyaXRlcyB0aGUgdGVzdCBv
ZiBhbiBhc3NlcnRpb24gdG8gcHJvdmlkZQorICAgICAgICBpbnRlcm1lZGlhdGUgdmFsdWVzIGFu
ZCByZXBsYWNlIGl0IHdpdGggYW4gaWYgc3RhdGVtZW50IHdoaWNoCisgICAgICAgIHJhaXNlcyBh
biBhc3NlcnRpb24gZXJyb3Igd2l0aCBhIGRldGFpbGVkIGV4cGxhbmF0aW9uIGluIGNhc2UKKyAg
ICAgICAgdGhlIGV4cHJlc3Npb24gaXMgZmFsc2UuCisKKyAgICAgICAgIiIiCisgICAgICAgIHNl
bGYuc3RhdGVtZW50cyA9IFtdCisgICAgICAgIHNlbGYudmFyaWFibGVzID0gW10KKyAgICAgICAg
c2VsZi52YXJpYWJsZV9jb3VudGVyID0gaXRlcnRvb2xzLmNvdW50KCkKKyAgICAgICAgc2VsZi5z
dGFjayA9IFtdCisgICAgICAgIHNlbGYub25fZmFpbHVyZSA9IFtdCisgICAgICAgIHNlbGYucHVz
aF9mb3JtYXRfY29udGV4dCgpCisgICAgICAgICMgUmV3cml0ZSBhc3NlcnQgaW50byBhIGJ1bmNo
IG9mIHN0YXRlbWVudHMuCisgICAgICAgIHRvcF9jb25kaXRpb24sIGV4cGxhbmF0aW9uID0gc2Vs
Zi52aXNpdChhc3NlcnRfLnRlc3QpCisgICAgICAgICMgQ3JlYXRlIGZhaWx1cmUgbWVzc2FnZS4K
KyAgICAgICAgYm9keSA9IHNlbGYub25fZmFpbHVyZQorICAgICAgICBuZWdhdGlvbiA9IGFzdC5V
bmFyeU9wKGFzdC5Ob3QoKSwgdG9wX2NvbmRpdGlvbikKKyAgICAgICAgc2VsZi5zdGF0ZW1lbnRz
LmFwcGVuZChhc3QuSWYobmVnYXRpb24sIGJvZHksIFtdKSkKKyAgICAgICAgaWYgYXNzZXJ0Xy5t
c2c6CisgICAgICAgICAgICBhc3NlcnRtc2cgPSBzZWxmLmhlbHBlcignZm9ybWF0X2Fzc2VydG1z
ZycsIGFzc2VydF8ubXNnKQorICAgICAgICAgICAgZXhwbGFuYXRpb24gPSAiXG4+YXNzZXJ0ICIg
KyBleHBsYW5hdGlvbgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYXNzZXJ0bXNnID0gYXN0
LlN0cigiIikKKyAgICAgICAgICAgIGV4cGxhbmF0aW9uID0gImFzc2VydCAiICsgZXhwbGFuYXRp
b24KKyAgICAgICAgdGVtcGxhdGUgPSBhc3QuQmluT3AoYXNzZXJ0bXNnLCBhc3QuQWRkKCksIGFz
dC5TdHIoZXhwbGFuYXRpb24pKQorICAgICAgICBtc2cgPSBzZWxmLnBvcF9mb3JtYXRfY29udGV4
dCh0ZW1wbGF0ZSkKKyAgICAgICAgZm10ID0gc2VsZi5oZWxwZXIoImZvcm1hdF9leHBsYW5hdGlv
biIsIG1zZykKKyAgICAgICAgZXJyX25hbWUgPSBhc3QuTmFtZSgiQXNzZXJ0aW9uRXJyb3IiLCBh
c3QuTG9hZCgpKQorICAgICAgICBleGMgPSBhc3RfQ2FsbChlcnJfbmFtZSwgW2ZtdF0sIFtdKQor
ICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdID49IDM6CisgICAgICAgICAgICByYWlzZV8g
PSBhc3QuUmFpc2UoZXhjLCBOb25lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2Vf
ID0gYXN0LlJhaXNlKGV4YywgTm9uZSwgTm9uZSkKKyAgICAgICAgYm9keS5hcHBlbmQocmFpc2Vf
KQorICAgICAgICAjIENsZWFyIHRlbXBvcmFyeSB2YXJpYWJsZXMgYnkgc2V0dGluZyB0aGVtIHRv
IE5vbmUuCisgICAgICAgIGlmIHNlbGYudmFyaWFibGVzOgorICAgICAgICAgICAgdmFyaWFibGVz
ID0gW2FzdC5OYW1lKG5hbWUsIGFzdC5TdG9yZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAg
IGZvciBuYW1lIGluIHNlbGYudmFyaWFibGVzXQorICAgICAgICAgICAgY2xlYXIgPSBhc3QuQXNz
aWduKHZhcmlhYmxlcywgX05hbWVDb25zdGFudChOb25lKSkKKyAgICAgICAgICAgIHNlbGYuc3Rh
dGVtZW50cy5hcHBlbmQoY2xlYXIpCisgICAgICAgICMgRml4IGxpbmUgbnVtYmVycy4KKyAgICAg
ICAgZm9yIHN0bXQgaW4gc2VsZi5zdGF0ZW1lbnRzOgorICAgICAgICAgICAgc2V0X2xvY2F0aW9u
KHN0bXQsIGFzc2VydF8ubGluZW5vLCBhc3NlcnRfLmNvbF9vZmZzZXQpCisgICAgICAgIHJldHVy
biBzZWxmLnN0YXRlbWVudHMKKworICAgIGRlZiB2aXNpdF9OYW1lKHNlbGYsIG5hbWUpOgorICAg
ICAgICAjIERpc3BsYXkgdGhlIHJlcHIgb2YgdGhlIG5hbWUgaWYgaXQncyBhIGxvY2FsIHZhcmlh
YmxlIG9yCisgICAgICAgICMgX3Nob3VsZF9yZXByX2dsb2JhbF9uYW1lKCkgdGhpbmtzIGl0J3Mg
YWNjZXB0YWJsZS4KKyAgICAgICAgbG9jcyA9IGFzdF9DYWxsKHNlbGYuYnVpbHRpbigibG9jYWxz
IiksIFtdLCBbXSkKKyAgICAgICAgaW5sb2NzID0gYXN0LkNvbXBhcmUoYXN0LlN0cihuYW1lLmlk
KSwgW2FzdC5JbigpXSwgW2xvY3NdKQorICAgICAgICBkb3JlcHIgPSBzZWxmLmhlbHBlcigic2hv
dWxkX3JlcHJfZ2xvYmFsX25hbWUiLCBuYW1lKQorICAgICAgICB0ZXN0ID0gYXN0LkJvb2xPcChh
c3QuT3IoKSwgW2lubG9jcywgZG9yZXByXSkKKyAgICAgICAgZXhwciA9IGFzdC5JZkV4cCh0ZXN0
LCBzZWxmLmRpc3BsYXkobmFtZSksIGFzdC5TdHIobmFtZS5pZCkpCisgICAgICAgIHJldHVybiBu
YW1lLCBzZWxmLmV4cGxhbmF0aW9uX3BhcmFtKGV4cHIpCisKKyAgICBkZWYgdmlzaXRfQm9vbE9w
KHNlbGYsIGJvb2xvcCk6CisgICAgICAgIHJlc192YXIgPSBzZWxmLnZhcmlhYmxlKCkKKyAgICAg
ICAgZXhwbF9saXN0ID0gc2VsZi5hc3NpZ24oYXN0Lkxpc3QoW10sIGFzdC5Mb2FkKCkpKQorICAg
ICAgICBhcHAgPSBhc3QuQXR0cmlidXRlKGV4cGxfbGlzdCwgImFwcGVuZCIsIGFzdC5Mb2FkKCkp
CisgICAgICAgIGlzX29yID0gaW50KGlzaW5zdGFuY2UoYm9vbG9wLm9wLCBhc3QuT3IpKQorICAg
ICAgICBib2R5ID0gc2F2ZSA9IHNlbGYuc3RhdGVtZW50cworICAgICAgICBmYWlsX3NhdmUgPSBz
ZWxmLm9uX2ZhaWx1cmUKKyAgICAgICAgbGV2ZWxzID0gbGVuKGJvb2xvcC52YWx1ZXMpIC0gMQor
ICAgICAgICBzZWxmLnB1c2hfZm9ybWF0X2NvbnRleHQoKQorICAgICAgICAjIFByb2Nlc3MgZWFj
aCBvcGVyYW5kLCBzaG9ydC1jaXJjdXRpbmcgaWYgbmVlZGVkLgorICAgICAgICBmb3IgaSwgdiBp
biBlbnVtZXJhdGUoYm9vbG9wLnZhbHVlcyk6CisgICAgICAgICAgICBpZiBpOgorICAgICAgICAg
ICAgICAgIGZhaWxfaW5uZXIgPSBbXQorICAgICAgICAgICAgICAgICMgY29uZCBpcyBzZXQgaW4g
YSBwcmlvciBsb29wIGl0ZXJhdGlvbiBiZWxvdworICAgICAgICAgICAgICAgIHNlbGYub25fZmFp
bHVyZS5hcHBlbmQoYXN0LklmKGNvbmQsIGZhaWxfaW5uZXIsIFtdKSkgIyBub3FhCisgICAgICAg
ICAgICAgICAgc2VsZi5vbl9mYWlsdXJlID0gZmFpbF9pbm5lcgorICAgICAgICAgICAgc2VsZi5w
dXNoX2Zvcm1hdF9jb250ZXh0KCkKKyAgICAgICAgICAgIHJlcywgZXhwbCA9IHNlbGYudmlzaXQo
dikKKyAgICAgICAgICAgIGJvZHkuYXBwZW5kKGFzdC5Bc3NpZ24oW2FzdC5OYW1lKHJlc192YXIs
IGFzdC5TdG9yZSgpKV0sIHJlcykpCisgICAgICAgICAgICBleHBsX2Zvcm1hdCA9IHNlbGYucG9w
X2Zvcm1hdF9jb250ZXh0KGFzdC5TdHIoZXhwbCkpCisgICAgICAgICAgICBjYWxsID0gYXN0X0Nh
bGwoYXBwLCBbZXhwbF9mb3JtYXRdLCBbXSkKKyAgICAgICAgICAgIHNlbGYub25fZmFpbHVyZS5h
cHBlbmQoYXN0LkV4cHIoY2FsbCkpCisgICAgICAgICAgICBpZiBpIDwgbGV2ZWxzOgorICAgICAg
ICAgICAgICAgIGNvbmQgPSByZXMKKyAgICAgICAgICAgICAgICBpZiBpc19vcjoKKyAgICAgICAg
ICAgICAgICAgICAgY29uZCA9IGFzdC5VbmFyeU9wKGFzdC5Ob3QoKSwgY29uZCkKKyAgICAgICAg
ICAgICAgICBpbm5lciA9IFtdCisgICAgICAgICAgICAgICAgc2VsZi5zdGF0ZW1lbnRzLmFwcGVu
ZChhc3QuSWYoY29uZCwgaW5uZXIsIFtdKSkKKyAgICAgICAgICAgICAgICBzZWxmLnN0YXRlbWVu
dHMgPSBib2R5ID0gaW5uZXIKKyAgICAgICAgc2VsZi5zdGF0ZW1lbnRzID0gc2F2ZQorICAgICAg
ICBzZWxmLm9uX2ZhaWx1cmUgPSBmYWlsX3NhdmUKKyAgICAgICAgZXhwbF90ZW1wbGF0ZSA9IHNl
bGYuaGVscGVyKCJmb3JtYXRfYm9vbG9wIiwgZXhwbF9saXN0LCBhc3QuTnVtKGlzX29yKSkKKyAg
ICAgICAgZXhwbCA9IHNlbGYucG9wX2Zvcm1hdF9jb250ZXh0KGV4cGxfdGVtcGxhdGUpCisgICAg
ICAgIHJldHVybiBhc3QuTmFtZShyZXNfdmFyLCBhc3QuTG9hZCgpKSwgc2VsZi5leHBsYW5hdGlv
bl9wYXJhbShleHBsKQorCisgICAgZGVmIHZpc2l0X1VuYXJ5T3Aoc2VsZiwgdW5hcnkpOgorICAg
ICAgICBwYXR0ZXJuID0gdW5hcnlfbWFwW3VuYXJ5Lm9wLl9fY2xhc3NfX10KKyAgICAgICAgb3Bl
cmFuZF9yZXMsIG9wZXJhbmRfZXhwbCA9IHNlbGYudmlzaXQodW5hcnkub3BlcmFuZCkKKyAgICAg
ICAgcmVzID0gc2VsZi5hc3NpZ24oYXN0LlVuYXJ5T3AodW5hcnkub3AsIG9wZXJhbmRfcmVzKSkK
KyAgICAgICAgcmV0dXJuIHJlcywgcGF0dGVybiAlIChvcGVyYW5kX2V4cGwsKQorCisgICAgZGVm
IHZpc2l0X0Jpbk9wKHNlbGYsIGJpbm9wKToKKyAgICAgICAgc3ltYm9sID0gYmlub3BfbWFwW2Jp
bm9wLm9wLl9fY2xhc3NfX10KKyAgICAgICAgbGVmdF9leHByLCBsZWZ0X2V4cGwgPSBzZWxmLnZp
c2l0KGJpbm9wLmxlZnQpCisgICAgICAgIHJpZ2h0X2V4cHIsIHJpZ2h0X2V4cGwgPSBzZWxmLnZp
c2l0KGJpbm9wLnJpZ2h0KQorICAgICAgICBleHBsYW5hdGlvbiA9ICIoJXMgJXMgJXMpIiAlIChs
ZWZ0X2V4cGwsIHN5bWJvbCwgcmlnaHRfZXhwbCkKKyAgICAgICAgcmVzID0gc2VsZi5hc3NpZ24o
YXN0LkJpbk9wKGxlZnRfZXhwciwgYmlub3Aub3AsIHJpZ2h0X2V4cHIpKQorICAgICAgICByZXR1
cm4gcmVzLCBleHBsYW5hdGlvbgorCisgICAgZGVmIHZpc2l0X0NhbGxfMzUoc2VsZiwgY2FsbCk6
CisgICAgICAgICIiIgorICAgICAgICB2aXNpdCBgYXN0LkNhbGxgIG5vZGVzIG9uIFB5dGhvbjMu
NSBhbmQgYWZ0ZXIKKyAgICAgICAgIiIiCisgICAgICAgIG5ld19mdW5jLCBmdW5jX2V4cGwgPSBz
ZWxmLnZpc2l0KGNhbGwuZnVuYykKKyAgICAgICAgYXJnX2V4cGxzID0gW10KKyAgICAgICAgbmV3
X2FyZ3MgPSBbXQorICAgICAgICBuZXdfa3dhcmdzID0gW10KKyAgICAgICAgZm9yIGFyZyBpbiBj
YWxsLmFyZ3M6CisgICAgICAgICAgICByZXMsIGV4cGwgPSBzZWxmLnZpc2l0KGFyZykKKyAgICAg
ICAgICAgIGFyZ19leHBscy5hcHBlbmQoZXhwbCkKKyAgICAgICAgICAgIG5ld19hcmdzLmFwcGVu
ZChyZXMpCisgICAgICAgIGZvciBrZXl3b3JkIGluIGNhbGwua2V5d29yZHM6CisgICAgICAgICAg
ICByZXMsIGV4cGwgPSBzZWxmLnZpc2l0KGtleXdvcmQudmFsdWUpCisgICAgICAgICAgICBuZXdf
a3dhcmdzLmFwcGVuZChhc3Qua2V5d29yZChrZXl3b3JkLmFyZywgcmVzKSkKKyAgICAgICAgICAg
IGlmIGtleXdvcmQuYXJnOgorICAgICAgICAgICAgICAgIGFyZ19leHBscy5hcHBlbmQoa2V5d29y
ZC5hcmcgKyAiPSIgKyBleHBsKQorICAgICAgICAgICAgZWxzZTogIyMgKiphcmdzIGhhdmUgYGFy
Z2Aga2V5d29yZHMgd2l0aCBhbiAuYXJnIG9mIE5vbmUKKyAgICAgICAgICAgICAgICBhcmdfZXhw
bHMuYXBwZW5kKCIqKiIgKyBleHBsKQorCisgICAgICAgIGV4cGwgPSAiJXMoJXMpIiAlIChmdW5j
X2V4cGwsICcsICcuam9pbihhcmdfZXhwbHMpKQorICAgICAgICBuZXdfY2FsbCA9IGFzdC5DYWxs
KG5ld19mdW5jLCBuZXdfYXJncywgbmV3X2t3YXJncykKKyAgICAgICAgcmVzID0gc2VsZi5hc3Np
Z24obmV3X2NhbGwpCisgICAgICAgIHJlc19leHBsID0gc2VsZi5leHBsYW5hdGlvbl9wYXJhbShz
ZWxmLmRpc3BsYXkocmVzKSkKKyAgICAgICAgb3V0ZXJfZXhwbCA9ICIlc1xueyVzID0gJXNcbn0i
ICUgKHJlc19leHBsLCByZXNfZXhwbCwgZXhwbCkKKyAgICAgICAgcmV0dXJuIHJlcywgb3V0ZXJf
ZXhwbAorCisgICAgZGVmIHZpc2l0X1N0YXJyZWQoc2VsZiwgc3RhcnJlZCk6CisgICAgICAgICMg
RnJvbSBQeXRob24gMy41LCBhIFN0YXJyZWQgbm9kZSBjYW4gYXBwZWFyIGluIGEgZnVuY3Rpb24g
Y2FsbAorICAgICAgICByZXMsIGV4cGwgPSBzZWxmLnZpc2l0KHN0YXJyZWQudmFsdWUpCisgICAg
ICAgIHJldHVybiBzdGFycmVkLCAnKicgKyBleHBsCisKKyAgICBkZWYgdmlzaXRfQ2FsbF9sZWdh
Y3koc2VsZiwgY2FsbCk6CisgICAgICAgICIiIgorICAgICAgICB2aXNpdCBgYXN0LkNhbGwgbm9k
ZXMgb24gMy40IGFuZCBiZWxvd2AKKyAgICAgICAgIiIiCisgICAgICAgIG5ld19mdW5jLCBmdW5j
X2V4cGwgPSBzZWxmLnZpc2l0KGNhbGwuZnVuYykKKyAgICAgICAgYXJnX2V4cGxzID0gW10KKyAg
ICAgICAgbmV3X2FyZ3MgPSBbXQorICAgICAgICBuZXdfa3dhcmdzID0gW10KKyAgICAgICAgbmV3
X3N0YXIgPSBuZXdfa3dhcmcgPSBOb25lCisgICAgICAgIGZvciBhcmcgaW4gY2FsbC5hcmdzOgor
ICAgICAgICAgICAgcmVzLCBleHBsID0gc2VsZi52aXNpdChhcmcpCisgICAgICAgICAgICBuZXdf
YXJncy5hcHBlbmQocmVzKQorICAgICAgICAgICAgYXJnX2V4cGxzLmFwcGVuZChleHBsKQorICAg
ICAgICBmb3Iga2V5d29yZCBpbiBjYWxsLmtleXdvcmRzOgorICAgICAgICAgICAgcmVzLCBleHBs
ID0gc2VsZi52aXNpdChrZXl3b3JkLnZhbHVlKQorICAgICAgICAgICAgbmV3X2t3YXJncy5hcHBl
bmQoYXN0LmtleXdvcmQoa2V5d29yZC5hcmcsIHJlcykpCisgICAgICAgICAgICBhcmdfZXhwbHMu
YXBwZW5kKGtleXdvcmQuYXJnICsgIj0iICsgZXhwbCkKKyAgICAgICAgaWYgY2FsbC5zdGFyYXJn
czoKKyAgICAgICAgICAgIG5ld19zdGFyLCBleHBsID0gc2VsZi52aXNpdChjYWxsLnN0YXJhcmdz
KQorICAgICAgICAgICAgYXJnX2V4cGxzLmFwcGVuZCgiKiIgKyBleHBsKQorICAgICAgICBpZiBj
YWxsLmt3YXJnczoKKyAgICAgICAgICAgIG5ld19rd2FyZywgZXhwbCA9IHNlbGYudmlzaXQoY2Fs
bC5rd2FyZ3MpCisgICAgICAgICAgICBhcmdfZXhwbHMuYXBwZW5kKCIqKiIgKyBleHBsKQorICAg
ICAgICBleHBsID0gIiVzKCVzKSIgJSAoZnVuY19leHBsLCAnLCAnLmpvaW4oYXJnX2V4cGxzKSkK
KyAgICAgICAgbmV3X2NhbGwgPSBhc3QuQ2FsbChuZXdfZnVuYywgbmV3X2FyZ3MsIG5ld19rd2Fy
Z3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3N0YXIsIG5ld19rd2FyZykKKyAg
ICAgICAgcmVzID0gc2VsZi5hc3NpZ24obmV3X2NhbGwpCisgICAgICAgIHJlc19leHBsID0gc2Vs
Zi5leHBsYW5hdGlvbl9wYXJhbShzZWxmLmRpc3BsYXkocmVzKSkKKyAgICAgICAgb3V0ZXJfZXhw
bCA9ICIlc1xueyVzID0gJXNcbn0iICUgKHJlc19leHBsLCByZXNfZXhwbCwgZXhwbCkKKyAgICAg
ICAgcmV0dXJuIHJlcywgb3V0ZXJfZXhwbAorCisgICAgIyBhc3QuQ2FsbCBzaWduYXR1cmUgY2hh
bmdlZCBvbiAzLjUsCisgICAgIyBjb25kaXRpb25hbGx5IGNoYW5nZSAgd2hpY2ggbWV0aG9kcyBp
cyBuYW1lZAorICAgICMgdmlzaXRfQ2FsbCBkZXBlbmRpbmcgb24gUHl0aG9uIHZlcnNpb24KKyAg
ICBpZiBzeXMudmVyc2lvbl9pbmZvID49ICgzLCA1KToKKyAgICAgICAgdmlzaXRfQ2FsbCA9IHZp
c2l0X0NhbGxfMzUKKyAgICBlbHNlOgorICAgICAgICB2aXNpdF9DYWxsID0gdmlzaXRfQ2FsbF9s
ZWdhY3kKKworCisgICAgZGVmIHZpc2l0X0F0dHJpYnV0ZShzZWxmLCBhdHRyKToKKyAgICAgICAg
aWYgbm90IGlzaW5zdGFuY2UoYXR0ci5jdHgsIGFzdC5Mb2FkKToKKyAgICAgICAgICAgIHJldHVy
biBzZWxmLmdlbmVyaWNfdmlzaXQoYXR0cikKKyAgICAgICAgdmFsdWUsIHZhbHVlX2V4cGwgPSBz
ZWxmLnZpc2l0KGF0dHIudmFsdWUpCisgICAgICAgIHJlcyA9IHNlbGYuYXNzaWduKGFzdC5BdHRy
aWJ1dGUodmFsdWUsIGF0dHIuYXR0ciwgYXN0LkxvYWQoKSkpCisgICAgICAgIHJlc19leHBsID0g
c2VsZi5leHBsYW5hdGlvbl9wYXJhbShzZWxmLmRpc3BsYXkocmVzKSkKKyAgICAgICAgcGF0ID0g
IiVzXG57JXMgPSAlcy4lc1xufSIKKyAgICAgICAgZXhwbCA9IHBhdCAlIChyZXNfZXhwbCwgcmVz
X2V4cGwsIHZhbHVlX2V4cGwsIGF0dHIuYXR0cikKKyAgICAgICAgcmV0dXJuIHJlcywgZXhwbAor
CisgICAgZGVmIHZpc2l0X0NvbXBhcmUoc2VsZiwgY29tcCk6CisgICAgICAgIHNlbGYucHVzaF9m
b3JtYXRfY29udGV4dCgpCisgICAgICAgIGxlZnRfcmVzLCBsZWZ0X2V4cGwgPSBzZWxmLnZpc2l0
KGNvbXAubGVmdCkKKyAgICAgICAgcmVzX3ZhcmlhYmxlcyA9IFtzZWxmLnZhcmlhYmxlKCkgZm9y
IGkgaW4gcmFuZ2UobGVuKGNvbXAub3BzKSldCisgICAgICAgIGxvYWRfbmFtZXMgPSBbYXN0Lk5h
bWUodiwgYXN0LkxvYWQoKSkgZm9yIHYgaW4gcmVzX3ZhcmlhYmxlc10KKyAgICAgICAgc3RvcmVf
bmFtZXMgPSBbYXN0Lk5hbWUodiwgYXN0LlN0b3JlKCkpIGZvciB2IGluIHJlc192YXJpYWJsZXNd
CisgICAgICAgIGl0ID0gemlwKHJhbmdlKGxlbihjb21wLm9wcykpLCBjb21wLm9wcywgY29tcC5j
b21wYXJhdG9ycykKKyAgICAgICAgZXhwbHMgPSBbXQorICAgICAgICBzeW1zID0gW10KKyAgICAg
ICAgcmVzdWx0cyA9IFtsZWZ0X3Jlc10KKyAgICAgICAgZm9yIGksIG9wLCBuZXh0X29wZXJhbmQg
aW4gaXQ6CisgICAgICAgICAgICBuZXh0X3JlcywgbmV4dF9leHBsID0gc2VsZi52aXNpdChuZXh0
X29wZXJhbmQpCisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChuZXh0X3JlcykKKyAgICAgICAg
ICAgIHN5bSA9IGJpbm9wX21hcFtvcC5fX2NsYXNzX19dCisgICAgICAgICAgICBzeW1zLmFwcGVu
ZChhc3QuU3RyKHN5bSkpCisgICAgICAgICAgICBleHBsID0gIiVzICVzICVzIiAlIChsZWZ0X2V4
cGwsIHN5bSwgbmV4dF9leHBsKQorICAgICAgICAgICAgZXhwbHMuYXBwZW5kKGFzdC5TdHIoZXhw
bCkpCisgICAgICAgICAgICByZXNfZXhwciA9IGFzdC5Db21wYXJlKGxlZnRfcmVzLCBbb3BdLCBb
bmV4dF9yZXNdKQorICAgICAgICAgICAgc2VsZi5zdGF0ZW1lbnRzLmFwcGVuZChhc3QuQXNzaWdu
KFtzdG9yZV9uYW1lc1tpXV0sIHJlc19leHByKSkKKyAgICAgICAgICAgIGxlZnRfcmVzLCBsZWZ0
X2V4cGwgPSBuZXh0X3JlcywgbmV4dF9leHBsCisgICAgICAgICMgVXNlIHB5dGVzdC5hc3NlcnRp
b24udXRpbC5fcmVwcmNvbXBhcmUgaWYgdGhhdCdzIGF2YWlsYWJsZS4KKyAgICAgICAgZXhwbF9j
YWxsID0gc2VsZi5oZWxwZXIoImNhbGxfcmVwcmNvbXBhcmUiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhc3QuVHVwbGUoc3ltcywgYXN0LkxvYWQoKSksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFzdC5UdXBsZShsb2FkX25hbWVzLCBhc3QuTG9hZCgpKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXN0LlR1cGxlKGV4cGxzLCBhc3QuTG9hZCgp
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXN0LlR1cGxlKHJlc3VsdHMsIGFz
dC5Mb2FkKCkpKQorICAgICAgICBpZiBsZW4oY29tcC5vcHMpID4gMToKKyAgICAgICAgICAgIHJl
cyA9IGFzdC5Cb29sT3AoYXN0LkFuZCgpLCBsb2FkX25hbWVzKQorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgcmVzID0gbG9hZF9uYW1lc1swXQorICAgICAgICByZXR1cm4gcmVzLCBzZWxmLmV4
cGxhbmF0aW9uX3BhcmFtKHNlbGYucG9wX2Zvcm1hdF9jb250ZXh0KGV4cGxfY2FsbCkpCmRpZmYg
LS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3Qv
YXNzZXJ0aW9uL3V0aWwucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0
ZXN0L19weXRlc3QvYXNzZXJ0aW9uL3V0aWwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLmYyZjIzZWZlYTI3Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVz
dHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L2Fzc2VydGlvbi91dGlsLnB5CkBA
IC0wLDAgKzEsMzMyIEBACisiIiJVdGlsaXRpZXMgZm9yIGFzc2VydGlvbiBkZWJ1Z2dpbmciIiIK
K2ltcG9ydCBwcHJpbnQKKworaW1wb3J0IF9weXRlc3QuX2NvZGUKK2ltcG9ydCBweQordHJ5Ogor
ICAgIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IFNlcXVlbmNlCitleGNlcHQgSW1wb3J0RXJyb3I6
CisgICAgU2VxdWVuY2UgPSBsaXN0CisKK0J1aWx0aW5Bc3NlcnRpb25FcnJvciA9IHB5LmJ1aWx0
aW4uYnVpbHRpbnMuQXNzZXJ0aW9uRXJyb3IKK3UgPSBweS5idWlsdGluLl90b3RleHQKKworIyBU
aGUgX3JlcHJjb21wYXJlIGF0dHJpYnV0ZSBvbiB0aGUgdXRpbCBtb2R1bGUgaXMgdXNlZCBieSB0
aGUgbmV3IGFzc2VydGlvbgorIyBpbnRlcnByZXRhdGlvbiBjb2RlIGFuZCBhc3NlcnRpb24gcmV3
cml0ZXIgdG8gZGV0ZWN0IHRoaXMgcGx1Z2luIHdhcworIyBsb2FkZWQgYW5kIGluIHR1cm4gY2Fs
bCB0aGUgaG9va3MgZGVmaW5lZCBoZXJlIGFzIHBhcnQgb2YgdGhlCisjIERlYnVnSW50ZXJwcmV0
ZXIuCitfcmVwcmNvbXBhcmUgPSBOb25lCisKKworIyB0aGUgcmUtZW5jb2RpbmcgaXMgbmVlZGVk
IGZvciBweXRob24yIHJlcHIKKyMgd2l0aCBub24tYXNjaWkgY2hhcmFjdGVycyAoc2VlIGlzc3Vl
IDg3NyBhbmQgMTM3OSkKK2RlZiBlY3Uocyk6CisgICAgdHJ5OgorICAgICAgICByZXR1cm4gdShz
LCAndXRmLTgnLCAncmVwbGFjZScpCisgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgcmV0
dXJuIHMKKworCitkZWYgZm9ybWF0X2V4cGxhbmF0aW9uKGV4cGxhbmF0aW9uKToKKyAgICAiIiJU
aGlzIGZvcm1hdHMgYW4gZXhwbGFuYXRpb24KKworICAgIE5vcm1hbGx5IGFsbCBlbWJlZGRlZCBu
ZXdsaW5lcyBhcmUgZXNjYXBlZCwgaG93ZXZlciB0aGVyZSBhcmUKKyAgICB0aHJlZSBleGNlcHRp
b25zOiBcbnssIFxufSBhbmQgXG5+LiAgVGhlIGZpcnN0IHR3byBhcmUgaW50ZW5kZWQKKyAgICBj
b3ZlciBuZXN0ZWQgZXhwbGFuYXRpb25zLCBzZWUgZnVuY3Rpb24gYW5kIGF0dHJpYnV0ZSBleHBs
YW5hdGlvbnMKKyAgICBmb3IgZXhhbXBsZXMgKC52aXNpdF9DYWxsKCksIHZpc2l0X0F0dHJpYnV0
ZSgpKS4gIFRoZSBsYXN0IG9uZSBpcworICAgIGZvciB3aGVuIG9uZSBleHBsYW5hdGlvbiBuZWVk
cyB0byBzcGFuIG11bHRpcGxlIGxpbmVzLCBlLmcuIHdoZW4KKyAgICBkaXNwbGF5aW5nIGRpZmZz
LgorICAgICIiIgorICAgIGV4cGxhbmF0aW9uID0gZWN1KGV4cGxhbmF0aW9uKQorICAgIGV4cGxh
bmF0aW9uID0gX2NvbGxhcHNlX2ZhbHNlKGV4cGxhbmF0aW9uKQorICAgIGxpbmVzID0gX3NwbGl0
X2V4cGxhbmF0aW9uKGV4cGxhbmF0aW9uKQorICAgIHJlc3VsdCA9IF9mb3JtYXRfbGluZXMobGlu
ZXMpCisgICAgcmV0dXJuIHUoJ1xuJykuam9pbihyZXN1bHQpCisKKworZGVmIF9jb2xsYXBzZV9m
YWxzZShleHBsYW5hdGlvbik6CisgICAgIiIiQ29sbGFwc2UgZXhwYW5zaW9ucyBvZiBGYWxzZQor
CisgICAgU28gdGhpcyBzdHJpcHMgb3V0IGFueSAiYXNzZXJ0IEZhbHNlXG57d2hlcmUgRmFsc2Ug
PSAuLi5cbn0iCisgICAgYmxvY2tzLgorICAgICIiIgorICAgIHdoZXJlID0gMAorICAgIHdoaWxl
IFRydWU6CisgICAgICAgIHN0YXJ0ID0gd2hlcmUgPSBleHBsYW5hdGlvbi5maW5kKCJGYWxzZVxu
e0ZhbHNlID0gIiwgd2hlcmUpCisgICAgICAgIGlmIHdoZXJlID09IC0xOgorICAgICAgICAgICAg
YnJlYWsKKyAgICAgICAgbGV2ZWwgPSAwCisgICAgICAgIHByZXZfYyA9IGV4cGxhbmF0aW9uW3N0
YXJ0XQorICAgICAgICBmb3IgaSwgYyBpbiBlbnVtZXJhdGUoZXhwbGFuYXRpb25bc3RhcnQ6XSk6
CisgICAgICAgICAgICBpZiBwcmV2X2MgKyBjID09ICJcbnsiOgorICAgICAgICAgICAgICAgIGxl
dmVsICs9IDEKKyAgICAgICAgICAgIGVsaWYgcHJldl9jICsgYyA9PSAiXG59IjoKKyAgICAgICAg
ICAgICAgICBsZXZlbCAtPSAxCisgICAgICAgICAgICAgICAgaWYgbm90IGxldmVsOgorICAgICAg
ICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgcHJldl9jID0gYworICAgICAgICBlbHNl
OgorICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoInVuYmFsYW5jZWQgYnJhY2VzOiAl
ciIgJSAoZXhwbGFuYXRpb24sKSkKKyAgICAgICAgZW5kID0gc3RhcnQgKyBpCisgICAgICAgIHdo
ZXJlID0gZW5kCisgICAgICAgIGlmIGV4cGxhbmF0aW9uW2VuZCAtIDFdID09ICdcbic6CisgICAg
ICAgICAgICBleHBsYW5hdGlvbiA9IChleHBsYW5hdGlvbls6c3RhcnRdICsgZXhwbGFuYXRpb25b
c3RhcnQrMTU6ZW5kLTFdICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGxhbmF0aW9u
W2VuZCsxOl0pCisgICAgICAgICAgICB3aGVyZSAtPSAxNworICAgIHJldHVybiBleHBsYW5hdGlv
bgorCisKK2RlZiBfc3BsaXRfZXhwbGFuYXRpb24oZXhwbGFuYXRpb24pOgorICAgICIiIlJldHVy
biBhIGxpc3Qgb2YgaW5kaXZpZHVhbCBsaW5lcyBpbiB0aGUgZXhwbGFuYXRpb24KKworICAgIFRo
aXMgd2lsbCByZXR1cm4gYSBsaXN0IG9mIGxpbmVzIHNwbGl0IG9uICdcbnsnLCAnXG59JyBhbmQg
J1xuficuCisgICAgQW55IG90aGVyIG5ld2xpbmVzIHdpbGwgYmUgZXNjYXBlZCBhbmQgYXBwZWFy
IGluIHRoZSBsaW5lIGFzIHRoZQorICAgIGxpdGVyYWwgJ1xuJyBjaGFyYWN0ZXJzLgorICAgICIi
IgorICAgIHJhd19saW5lcyA9IChleHBsYW5hdGlvbiBvciB1KCcnKSkuc3BsaXQoJ1xuJykKKyAg
ICBsaW5lcyA9IFtyYXdfbGluZXNbMF1dCisgICAgZm9yIGwgaW4gcmF3X2xpbmVzWzE6XToKKyAg
ICAgICAgaWYgbCBhbmQgbFswXSBpbiBbJ3snLCAnfScsICd+JywgJz4nXToKKyAgICAgICAgICAg
IGxpbmVzLmFwcGVuZChsKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbGluZXNbLTFdICs9
ICdcXG4nICsgbAorICAgIHJldHVybiBsaW5lcworCisKK2RlZiBfZm9ybWF0X2xpbmVzKGxpbmVz
KToKKyAgICAiIiJGb3JtYXQgdGhlIGluZGl2aWR1YWwgbGluZXMKKworICAgIFRoaXMgd2lsbCBy
ZXBsYWNlIHRoZSAneycsICd9JyBhbmQgJ34nIGNoYXJhY3RlcnMgb2Ygb3VyIG1pbmkKKyAgICBm
b3JtYXR0aW5nIGxhbmd1YWdlIHdpdGggdGhlIHByb3BlciAnd2hlcmUgLi4uJywgJ2FuZCAuLi4n
IGFuZCAnICsKKyAgICAuLi4nIHRleHQsIHRha2luZyBjYXJlIG9mIGluZGVudGF0aW9uIGFsb25n
IHRoZSB3YXkuCisKKyAgICBSZXR1cm4gYSBsaXN0IG9mIGZvcm1hdHRlZCBsaW5lcy4KKyAgICAi
IiIKKyAgICByZXN1bHQgPSBsaW5lc1s6MV0KKyAgICBzdGFjayA9IFswXQorICAgIHN0YWNrY250
ID0gWzBdCisgICAgZm9yIGxpbmUgaW4gbGluZXNbMTpdOgorICAgICAgICBpZiBsaW5lLnN0YXJ0
c3dpdGgoJ3snKToKKyAgICAgICAgICAgIGlmIHN0YWNrY250Wy0xXToKKyAgICAgICAgICAgICAg
ICBzID0gdSgnYW5kICAgJykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcyA9
IHUoJ3doZXJlICcpCisgICAgICAgICAgICBzdGFjay5hcHBlbmQobGVuKHJlc3VsdCkpCisgICAg
ICAgICAgICBzdGFja2NudFstMV0gKz0gMQorICAgICAgICAgICAgc3RhY2tjbnQuYXBwZW5kKDAp
CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHUoJyArJykgKyB1KCcgICcpKihsZW4oc3RhY2sp
LTEpICsgcyArIGxpbmVbMTpdKQorICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgnfScpOgor
ICAgICAgICAgICAgc3RhY2sucG9wKCkKKyAgICAgICAgICAgIHN0YWNrY250LnBvcCgpCisgICAg
ICAgICAgICByZXN1bHRbc3RhY2tbLTFdXSArPSBsaW5lWzE6XQorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgYXNzZXJ0IGxpbmVbMF0gaW4gWyd+JywgJz4nXQorICAgICAgICAgICAgc3RhY2tb
LTFdICs9IDEKKyAgICAgICAgICAgIGluZGVudCA9IGxlbihzdGFjaykgaWYgbGluZS5zdGFydHN3
aXRoKCd+JykgZWxzZSBsZW4oc3RhY2spIC0gMQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh1
KCcgICcpKmluZGVudCArIGxpbmVbMTpdKQorICAgIGFzc2VydCBsZW4oc3RhY2spID09IDEKKyAg
ICByZXR1cm4gcmVzdWx0CisKKworIyBQcm92aWRlIGJhc2VzdHJpbmcgaW4gcHl0aG9uMwordHJ5
OgorICAgIGJhc2VzdHJpbmcgPSBiYXNlc3RyaW5nCitleGNlcHQgTmFtZUVycm9yOgorICAgIGJh
c2VzdHJpbmcgPSBzdHIKKworCitkZWYgYXNzZXJ0cmVwcl9jb21wYXJlKGNvbmZpZywgb3AsIGxl
ZnQsIHJpZ2h0KToKKyAgICAiIiJSZXR1cm4gc3BlY2lhbGlzZWQgZXhwbGFuYXRpb25zIGZvciBz
b21lIG9wZXJhdG9ycy9vcGVyYW5kcyIiIgorICAgIHdpZHRoID0gODAgLSAxNSAtIGxlbihvcCkg
LSAyICAjIDE1IGNoYXJzIGluZGVudGF0aW9uLCAxIHNwYWNlIGFyb3VuZCBvcAorICAgIGxlZnRf
cmVwciA9IHB5LmlvLnNhZmVyZXByKGxlZnQsIG1heHNpemU9aW50KHdpZHRoLzIpKQorICAgIHJp
Z2h0X3JlcHIgPSBweS5pby5zYWZlcmVwcihyaWdodCwgbWF4c2l6ZT13aWR0aC1sZW4obGVmdF9y
ZXByKSkKKworICAgIHN1bW1hcnkgPSB1KCclcyAlcyAlcycpICUgKGVjdShsZWZ0X3JlcHIpLCBv
cCwgZWN1KHJpZ2h0X3JlcHIpKQorCisgICAgaXNzZXF1ZW5jZSA9IGxhbWJkYSB4OiAoaXNpbnN0
YW5jZSh4LCAobGlzdCwgdHVwbGUsIFNlcXVlbmNlKSkgYW5kCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbm90IGlzaW5zdGFuY2UoeCwgYmFzZXN0cmluZykpCisgICAgaXN0ZXh0ID0gbGFt
YmRhIHg6IGlzaW5zdGFuY2UoeCwgYmFzZXN0cmluZykKKyAgICBpc2RpY3QgPSBsYW1iZGEgeDog
aXNpbnN0YW5jZSh4LCBkaWN0KQorICAgIGlzc2V0ID0gbGFtYmRhIHg6IGlzaW5zdGFuY2UoeCwg
KHNldCwgZnJvemVuc2V0KSkKKworICAgIGRlZiBpc2l0ZXJhYmxlKG9iaik6CisgICAgICAgIHRy
eToKKyAgICAgICAgICAgIGl0ZXIob2JqKQorICAgICAgICAgICAgcmV0dXJuIG5vdCBpc3RleHQo
b2JqKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNl
CisKKyAgICB2ZXJib3NlID0gY29uZmlnLmdldG9wdGlvbigndmVyYm9zZScpCisgICAgZXhwbGFu
YXRpb24gPSBOb25lCisgICAgdHJ5OgorICAgICAgICBpZiBvcCA9PSAnPT0nOgorICAgICAgICAg
ICAgaWYgaXN0ZXh0KGxlZnQpIGFuZCBpc3RleHQocmlnaHQpOgorICAgICAgICAgICAgICAgIGV4
cGxhbmF0aW9uID0gX2RpZmZfdGV4dChsZWZ0LCByaWdodCwgdmVyYm9zZSkKKyAgICAgICAgICAg
IGVsc2U6CisgICAgICAgICAgICAgICAgaWYgaXNzZXF1ZW5jZShsZWZ0KSBhbmQgaXNzZXF1ZW5j
ZShyaWdodCk6CisgICAgICAgICAgICAgICAgICAgIGV4cGxhbmF0aW9uID0gX2NvbXBhcmVfZXFf
c2VxdWVuY2UobGVmdCwgcmlnaHQsIHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZWxpZiBpc3Nl
dChsZWZ0KSBhbmQgaXNzZXQocmlnaHQpOgorICAgICAgICAgICAgICAgICAgICBleHBsYW5hdGlv
biA9IF9jb21wYXJlX2VxX3NldChsZWZ0LCByaWdodCwgdmVyYm9zZSkKKyAgICAgICAgICAgICAg
ICBlbGlmIGlzZGljdChsZWZ0KSBhbmQgaXNkaWN0KHJpZ2h0KToKKyAgICAgICAgICAgICAgICAg
ICAgZXhwbGFuYXRpb24gPSBfY29tcGFyZV9lcV9kaWN0KGxlZnQsIHJpZ2h0LCB2ZXJib3NlKQor
ICAgICAgICAgICAgICAgIGlmIGlzaXRlcmFibGUobGVmdCkgYW5kIGlzaXRlcmFibGUocmlnaHQp
OgorICAgICAgICAgICAgICAgICAgICBleHBsID0gX2NvbXBhcmVfZXFfaXRlcmFibGUobGVmdCwg
cmlnaHQsIHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGlmIGV4cGxhbmF0aW9uIGlzIG5v
dCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgZXhwbGFuYXRpb24uZXh0ZW5kKGV4cGwp
CisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBleHBs
YW5hdGlvbiA9IGV4cGwKKyAgICAgICAgZWxpZiBvcCA9PSAnbm90IGluJzoKKyAgICAgICAgICAg
IGlmIGlzdGV4dChsZWZ0KSBhbmQgaXN0ZXh0KHJpZ2h0KToKKyAgICAgICAgICAgICAgICBleHBs
YW5hdGlvbiA9IF9ub3Rpbl90ZXh0KGxlZnQsIHJpZ2h0LCB2ZXJib3NlKQorICAgIGV4Y2VwdCBF
eGNlcHRpb246CisgICAgICAgIGV4cGxhbmF0aW9uID0gWworICAgICAgICAgICAgdSgnKHB5dGVz
dF9hc3NlcnRpb24gcGx1Z2luOiByZXByZXNlbnRhdGlvbiBvZiBkZXRhaWxzIGZhaWxlZC4gICcK
KyAgICAgICAgICAgICAgJ1Byb2JhYmx5IGFuIG9iamVjdCBoYXMgYSBmYXVsdHkgX19yZXByX18u
KScpLAorICAgICAgICAgICAgdShfcHl0ZXN0Ll9jb2RlLkV4Y2VwdGlvbkluZm8oKSldCisKKyAg
ICBpZiBub3QgZXhwbGFuYXRpb246CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICByZXR1cm4g
W3N1bW1hcnldICsgZXhwbGFuYXRpb24KKworCitkZWYgX2RpZmZfdGV4dChsZWZ0LCByaWdodCwg
dmVyYm9zZT1GYWxzZSk6CisgICAgIiIiUmV0dXJuIHRoZSBleHBsYW5hdGlvbiBmb3IgdGhlIGRp
ZmYgYmV0d2VlbiB0ZXh0IG9yIGJ5dGVzCisKKyAgICBVbmxlc3MgLS12ZXJib3NlIGlzIHVzZWQg
dGhpcyB3aWxsIHNraXAgbGVhZGluZyBhbmQgdHJhaWxpbmcKKyAgICBjaGFyYWN0ZXJzIHdoaWNo
IGFyZSBpZGVudGljYWwgdG8ga2VlcCB0aGUgZGlmZiBtaW5pbWFsLgorCisgICAgSWYgdGhlIGlu
cHV0IGFyZSBieXRlcyB0aGV5IHdpbGwgYmUgc2FmZWx5IGNvbnZlcnRlZCB0byB0ZXh0LgorICAg
ICIiIgorICAgIGZyb20gZGlmZmxpYiBpbXBvcnQgbmRpZmYKKyAgICBleHBsYW5hdGlvbiA9IFtd
CisgICAgaWYgaXNpbnN0YW5jZShsZWZ0LCBweS5idWlsdGluLmJ5dGVzKToKKyAgICAgICAgbGVm
dCA9IHUocmVwcihsZWZ0KVsxOi0xXSkucmVwbGFjZShyJ1xuJywgJ1xuJykKKyAgICBpZiBpc2lu
c3RhbmNlKHJpZ2h0LCBweS5idWlsdGluLmJ5dGVzKToKKyAgICAgICAgcmlnaHQgPSB1KHJlcHIo
cmlnaHQpWzE6LTFdKS5yZXBsYWNlKHInXG4nLCAnXG4nKQorICAgIGlmIG5vdCB2ZXJib3NlOgor
ICAgICAgICBpID0gMCAgIyBqdXN0IGluIGNhc2UgbGVmdCBvciByaWdodCBoYXMgemVybyBsZW5n
dGgKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobWluKGxlbihsZWZ0KSwgbGVuKHJpZ2h0KSkpOgor
ICAgICAgICAgICAgaWYgbGVmdFtpXSAhPSByaWdodFtpXToKKyAgICAgICAgICAgICAgICBicmVh
aworICAgICAgICBpZiBpID4gNDI6CisgICAgICAgICAgICBpIC09IDEwICAgICAgICAgICAgICAg
ICAjIFByb3ZpZGUgc29tZSBjb250ZXh0CisgICAgICAgICAgICBleHBsYW5hdGlvbiA9IFt1KCdT
a2lwcGluZyAlcyBpZGVudGljYWwgbGVhZGluZyAnCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICdjaGFyYWN0ZXJzIGluIGRpZmYsIHVzZSAtdiB0byBzaG93JykgJSBpXQorICAgICAgICAg
ICAgbGVmdCA9IGxlZnRbaTpdCisgICAgICAgICAgICByaWdodCA9IHJpZ2h0W2k6XQorICAgICAg
ICBpZiBsZW4obGVmdCkgPT0gbGVuKHJpZ2h0KToKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdl
KGxlbihsZWZ0KSk6CisgICAgICAgICAgICAgICAgaWYgbGVmdFstaV0gIT0gcmlnaHRbLWldOgor
ICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgaSA+IDQyOgorICAgICAg
ICAgICAgICAgIGkgLT0gMTAgICAgICMgUHJvdmlkZSBzb21lIGNvbnRleHQKKyAgICAgICAgICAg
ICAgICBleHBsYW5hdGlvbiArPSBbdSgnU2tpcHBpbmcgJXMgaWRlbnRpY2FsIHRyYWlsaW5nICcK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2hhcmFjdGVycyBpbiBkaWZmLCB1
c2UgLXYgdG8gc2hvdycpICUgaV0KKyAgICAgICAgICAgICAgICBsZWZ0ID0gbGVmdFs6LWldCisg
ICAgICAgICAgICAgICAgcmlnaHQgPSByaWdodFs6LWldCisgICAgZXhwbGFuYXRpb24gKz0gW2xp
bmUuc3RyaXAoJ1xuJykKKyAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gbmRpZmYobGVm
dC5zcGxpdGxpbmVzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJp
Z2h0LnNwbGl0bGluZXMoKSldCisgICAgcmV0dXJuIGV4cGxhbmF0aW9uCisKKworZGVmIF9jb21w
YXJlX2VxX2l0ZXJhYmxlKGxlZnQsIHJpZ2h0LCB2ZXJib3NlPUZhbHNlKToKKyAgICBpZiBub3Qg
dmVyYm9zZToKKyAgICAgICAgcmV0dXJuIFt1KCdVc2UgLXYgdG8gZ2V0IHRoZSBmdWxsIGRpZmYn
KV0KKyAgICAjIGR5bmFtaWMgaW1wb3J0IHRvIHNwZWVkdXAgcHl0ZXN0CisgICAgaW1wb3J0IGRp
ZmZsaWIKKworICAgIHRyeToKKyAgICAgICAgbGVmdF9mb3JtYXR0aW5nID0gcHByaW50LnBmb3Jt
YXQobGVmdCkuc3BsaXRsaW5lcygpCisgICAgICAgIHJpZ2h0X2Zvcm1hdHRpbmcgPSBwcHJpbnQu
cGZvcm1hdChyaWdodCkuc3BsaXRsaW5lcygpCisgICAgICAgIGV4cGxhbmF0aW9uID0gW3UoJ0Z1
bGwgZGlmZjonKV0KKyAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAjIGhhY2s6IFByZXR0
eVByaW50ZXIucGZvcm1hdCgpIGluIHB5dGhvbiAyIGZhaWxzIHdoZW4gZm9ybWF0dGluZyBpdGVt
cyB0aGF0IGNhbid0IGJlIHNvcnRlZCgpLCBpZSwgY2FsbGluZworICAgICAgICAjIHNvcnRlZCgp
IG9uIGEgbGlzdCB3b3VsZCByYWlzZS4gU2VlIGlzc3VlICM3MTguCisgICAgICAgICMgQXMgYSB3
b3JrYXJvdW5kLCB0aGUgZnVsbCBkaWZmIGlzIGdlbmVyYXRlZCBieSB1c2luZyB0aGUgcmVwcigp
IHN0cmluZyBvZiBlYWNoIGl0ZW0gb2YgZWFjaCBjb250YWluZXIuCisgICAgICAgIGxlZnRfZm9y
bWF0dGluZyA9IHNvcnRlZChyZXByKHgpIGZvciB4IGluIGxlZnQpCisgICAgICAgIHJpZ2h0X2Zv
cm1hdHRpbmcgPSBzb3J0ZWQocmVwcih4KSBmb3IgeCBpbiByaWdodCkKKyAgICAgICAgZXhwbGFu
YXRpb24gPSBbdSgnRnVsbCBkaWZmIChmYWxsYmFjayB0byBjYWxsaW5nIHJlcHIgb24gZWFjaCBp
dGVtKTonKV0KKyAgICBleHBsYW5hdGlvbi5leHRlbmQobGluZS5zdHJpcCgpIGZvciBsaW5lIGlu
IGRpZmZsaWIubmRpZmYobGVmdF9mb3JtYXR0aW5nLCByaWdodF9mb3JtYXR0aW5nKSkKKyAgICBy
ZXR1cm4gZXhwbGFuYXRpb24KKworCitkZWYgX2NvbXBhcmVfZXFfc2VxdWVuY2UobGVmdCwgcmln
aHQsIHZlcmJvc2U9RmFsc2UpOgorICAgIGV4cGxhbmF0aW9uID0gW10KKyAgICBmb3IgaSBpbiBy
YW5nZShtaW4obGVuKGxlZnQpLCBsZW4ocmlnaHQpKSk6CisgICAgICAgIGlmIGxlZnRbaV0gIT0g
cmlnaHRbaV06CisgICAgICAgICAgICBleHBsYW5hdGlvbiArPSBbdSgnQXQgaW5kZXggJXMgZGlm
ZjogJXIgIT0gJXInKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGksIGxlZnRbaV0s
IHJpZ2h0W2ldKV0KKyAgICAgICAgICAgIGJyZWFrCisgICAgaWYgbGVuKGxlZnQpID4gbGVuKHJp
Z2h0KToKKyAgICAgICAgZXhwbGFuYXRpb24gKz0gW3UoJ0xlZnQgY29udGFpbnMgbW9yZSBpdGVt
cywgZmlyc3QgZXh0cmEgaXRlbTogJXMnKQorICAgICAgICAgICAgICAgICAgICAgICAgJSBweS5p
by5zYWZlcmVwcihsZWZ0W2xlbihyaWdodCldLCldCisgICAgZWxpZiBsZW4obGVmdCkgPCBsZW4o
cmlnaHQpOgorICAgICAgICBleHBsYW5hdGlvbiArPSBbCisgICAgICAgICAgICB1KCdSaWdodCBj
b250YWlucyBtb3JlIGl0ZW1zLCBmaXJzdCBleHRyYSBpdGVtOiAlcycpICUKKyAgICAgICAgICAg
IHB5LmlvLnNhZmVyZXByKHJpZ2h0W2xlbihsZWZ0KV0sKV0KKyAgICByZXR1cm4gZXhwbGFuYXRp
b24KKworCitkZWYgX2NvbXBhcmVfZXFfc2V0KGxlZnQsIHJpZ2h0LCB2ZXJib3NlPUZhbHNlKToK
KyAgICBleHBsYW5hdGlvbiA9IFtdCisgICAgZGlmZl9sZWZ0ID0gbGVmdCAtIHJpZ2h0CisgICAg
ZGlmZl9yaWdodCA9IHJpZ2h0IC0gbGVmdAorICAgIGlmIGRpZmZfbGVmdDoKKyAgICAgICAgZXhw
bGFuYXRpb24uYXBwZW5kKHUoJ0V4dHJhIGl0ZW1zIGluIHRoZSBsZWZ0IHNldDonKSkKKyAgICAg
ICAgZm9yIGl0ZW0gaW4gZGlmZl9sZWZ0OgorICAgICAgICAgICAgZXhwbGFuYXRpb24uYXBwZW5k
KHB5LmlvLnNhZmVyZXByKGl0ZW0pKQorICAgIGlmIGRpZmZfcmlnaHQ6CisgICAgICAgIGV4cGxh
bmF0aW9uLmFwcGVuZCh1KCdFeHRyYSBpdGVtcyBpbiB0aGUgcmlnaHQgc2V0OicpKQorICAgICAg
ICBmb3IgaXRlbSBpbiBkaWZmX3JpZ2h0OgorICAgICAgICAgICAgZXhwbGFuYXRpb24uYXBwZW5k
KHB5LmlvLnNhZmVyZXByKGl0ZW0pKQorICAgIHJldHVybiBleHBsYW5hdGlvbgorCisKK2RlZiBf
Y29tcGFyZV9lcV9kaWN0KGxlZnQsIHJpZ2h0LCB2ZXJib3NlPUZhbHNlKToKKyAgICBleHBsYW5h
dGlvbiA9IFtdCisgICAgY29tbW9uID0gc2V0KGxlZnQpLmludGVyc2VjdGlvbihzZXQocmlnaHQp
KQorICAgIHNhbWUgPSBkaWN0KChrLCBsZWZ0W2tdKSBmb3IgayBpbiBjb21tb24gaWYgbGVmdFtr
XSA9PSByaWdodFtrXSkKKyAgICBpZiBzYW1lIGFuZCBub3QgdmVyYm9zZToKKyAgICAgICAgZXhw
bGFuYXRpb24gKz0gW3UoJ09taXR0aW5nICVzIGlkZW50aWNhbCBpdGVtcywgdXNlIC12IHRvIHNo
b3cnKSAlCisgICAgICAgICAgICAgICAgICAgICAgICBsZW4oc2FtZSldCisgICAgZWxpZiBzYW1l
OgorICAgICAgICBleHBsYW5hdGlvbiArPSBbdSgnQ29tbW9uIGl0ZW1zOicpXQorICAgICAgICBl
eHBsYW5hdGlvbiArPSBwcHJpbnQucGZvcm1hdChzYW1lKS5zcGxpdGxpbmVzKCkKKyAgICBkaWZm
ID0gc2V0KGsgZm9yIGsgaW4gY29tbW9uIGlmIGxlZnRba10gIT0gcmlnaHRba10pCisgICAgaWYg
ZGlmZjoKKyAgICAgICAgZXhwbGFuYXRpb24gKz0gW3UoJ0RpZmZlcmluZyBpdGVtczonKV0KKyAg
ICAgICAgZm9yIGsgaW4gZGlmZjoKKyAgICAgICAgICAgIGV4cGxhbmF0aW9uICs9IFtweS5pby5z
YWZlcmVwcih7azogbGVmdFtrXX0pICsgJyAhPSAnICsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBweS5pby5zYWZlcmVwcih7azogcmlnaHRba119KV0KKyAgICBleHRyYV9sZWZ0ID0gc2V0
KGxlZnQpIC0gc2V0KHJpZ2h0KQorICAgIGlmIGV4dHJhX2xlZnQ6CisgICAgICAgIGV4cGxhbmF0
aW9uLmFwcGVuZCh1KCdMZWZ0IGNvbnRhaW5zIG1vcmUgaXRlbXM6JykpCisgICAgICAgIGV4cGxh
bmF0aW9uLmV4dGVuZChwcHJpbnQucGZvcm1hdCgKKyAgICAgICAgICAgIGRpY3QoKGssIGxlZnRb
a10pIGZvciBrIGluIGV4dHJhX2xlZnQpKS5zcGxpdGxpbmVzKCkpCisgICAgZXh0cmFfcmlnaHQg
PSBzZXQocmlnaHQpIC0gc2V0KGxlZnQpCisgICAgaWYgZXh0cmFfcmlnaHQ6CisgICAgICAgIGV4
cGxhbmF0aW9uLmFwcGVuZCh1KCdSaWdodCBjb250YWlucyBtb3JlIGl0ZW1zOicpKQorICAgICAg
ICBleHBsYW5hdGlvbi5leHRlbmQocHByaW50LnBmb3JtYXQoCisgICAgICAgICAgICBkaWN0KChr
LCByaWdodFtrXSkgZm9yIGsgaW4gZXh0cmFfcmlnaHQpKS5zcGxpdGxpbmVzKCkpCisgICAgcmV0
dXJuIGV4cGxhbmF0aW9uCisKKworZGVmIF9ub3Rpbl90ZXh0KHRlcm0sIHRleHQsIHZlcmJvc2U9
RmFsc2UpOgorICAgIGluZGV4ID0gdGV4dC5maW5kKHRlcm0pCisgICAgaGVhZCA9IHRleHRbOmlu
ZGV4XQorICAgIHRhaWwgPSB0ZXh0W2luZGV4K2xlbih0ZXJtKTpdCisgICAgY29ycmVjdF90ZXh0
ID0gaGVhZCArIHRhaWwKKyAgICBkaWZmID0gX2RpZmZfdGV4dChjb3JyZWN0X3RleHQsIHRleHQs
IHZlcmJvc2UpCisgICAgbmV3ZGlmZiA9IFt1KCclcyBpcyBjb250YWluZWQgaGVyZTonKSAlIHB5
LmlvLnNhZmVyZXByKHRlcm0sIG1heHNpemU9NDIpXQorICAgIGZvciBsaW5lIGluIGRpZmY6Cisg
ICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCh1KCdTa2lwcGluZycpKToKKyAgICAgICAgICAgIGNv
bnRpbnVlCisgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCh1KCctICcpKToKKyAgICAgICAgICAg
IGNvbnRpbnVlCisgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCh1KCcrICcpKToKKyAgICAgICAg
ICAgIG5ld2RpZmYuYXBwZW5kKHUoJyAgJykgKyBsaW5lWzI6XSkKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIG5ld2RpZmYuYXBwZW5kKGxpbmUpCisgICAgcmV0dXJuIG5ld2RpZmYKZGlmZiAt
LWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9j
YWNoZXByb3ZpZGVyLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVz
dC9fcHl0ZXN0L2NhY2hlcHJvdmlkZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAuLjA2NTcwMDFmMmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMv
aW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L2NhY2hlcHJvdmlkZXIucHkKQEAgLTAs
MCArMSwyNDUgQEAKKyIiIgorbWVyZ2VkIGltcGxlbWVudGF0aW9uIG9mIHRoZSBjYWNoZSBwcm92
aWRlcgorCit0aGUgbmFtZSBjYWNoZSB3YXMgbm90IGNob29zZW4gdG8gZW5zdXJlIHBsdWdneSBh
dXRvbWF0aWNhbGx5CitpZ25vcmVzIHRoZSBleHRlcm5hbCBweXRlc3QtY2FjaGUKKyIiIgorCitp
bXBvcnQgcHkKK2ltcG9ydCBweXRlc3QKK2ltcG9ydCBqc29uCitmcm9tIG9zLnBhdGggaW1wb3J0
IHNlcCBhcyBfc2VwLCBhbHRzZXAgYXMgX2FsdHNlcAorCisKK2NsYXNzIENhY2hlKG9iamVjdCk6
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbmZpZyk6CisgICAgICAgIHNlbGYuY29uZmlnID0g
Y29uZmlnCisgICAgICAgIHNlbGYuX2NhY2hlZGlyID0gY29uZmlnLnJvb3RkaXIuam9pbigiLmNh
Y2hlIikKKyAgICAgICAgc2VsZi50cmFjZSA9IGNvbmZpZy50cmFjZS5yb290LmdldCgiY2FjaGUi
KQorICAgICAgICBpZiBjb25maWcuZ2V0dmFsdWUoImNhY2hlY2xlYXIiKToKKyAgICAgICAgICAg
IHNlbGYudHJhY2UoImNsZWFyaW5nIGNhY2hlZGlyIikKKyAgICAgICAgICAgIGlmIHNlbGYuX2Nh
Y2hlZGlyLmNoZWNrKCk6CisgICAgICAgICAgICAgICAgc2VsZi5fY2FjaGVkaXIucmVtb3ZlKCkK
KyAgICAgICAgICAgIHNlbGYuX2NhY2hlZGlyLm1rZGlyKCkKKworICAgIGRlZiBtYWtlZGlyKHNl
bGYsIG5hbWUpOgorICAgICAgICAiIiIgcmV0dXJuIGEgZGlyZWN0b3J5IHBhdGggb2JqZWN0IHdp
dGggdGhlIGdpdmVuIG5hbWUuICBJZiB0aGUKKyAgICAgICAgZGlyZWN0b3J5IGRvZXMgbm90IHll
dCBleGlzdCwgaXQgd2lsbCBiZSBjcmVhdGVkLiAgWW91IGNhbiB1c2UgaXQKKyAgICAgICAgdG8g
bWFuYWdlIGZpbGVzIGxpa2VzIGUuIGcuIHN0b3JlL3JldHJpZXZlIGRhdGFiYXNlCisgICAgICAg
IGR1bXBzIGFjcm9zcyB0ZXN0IHNlc3Npb25zLgorCisgICAgICAgIDpwYXJhbSBuYW1lOiBtdXN0
IGJlIGEgc3RyaW5nIG5vdCBjb250YWluaW5nIGEgYGAvYGAgc2VwYXJhdG9yLgorICAgICAgICAg
ICAgIE1ha2Ugc3VyZSB0aGUgbmFtZSBjb250YWlucyB5b3VyIHBsdWdpbiBvciBhcHBsaWNhdGlv
bgorICAgICAgICAgICAgIGlkZW50aWZpZXJzIHRvIHByZXZlbnQgY2xhc2hlcyB3aXRoIG90aGVy
IGNhY2hlIHVzZXJzLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgX3NlcCBpbiBuYW1lIG9yIF9h
bHRzZXAgaXMgbm90IE5vbmUgYW5kIF9hbHRzZXAgaW4gbmFtZToKKyAgICAgICAgICAgIHJhaXNl
IFZhbHVlRXJyb3IoIm5hbWUgaXMgbm90IGFsbG93ZWQgdG8gY29udGFpbiBwYXRoIHNlcGFyYXRv
cnMiKQorICAgICAgICByZXR1cm4gc2VsZi5fY2FjaGVkaXIuZW5zdXJlX2RpcigiZCIsIG5hbWUp
CisKKyAgICBkZWYgX2dldHZhbHVlcGF0aChzZWxmLCBrZXkpOgorICAgICAgICByZXR1cm4gc2Vs
Zi5fY2FjaGVkaXIuam9pbigndicsICprZXkuc3BsaXQoJy8nKSkKKworICAgIGRlZiBnZXQoc2Vs
Ziwga2V5LCBkZWZhdWx0KToKKyAgICAgICAgIiIiIHJldHVybiBjYWNoZWQgdmFsdWUgZm9yIHRo
ZSBnaXZlbiBrZXkuICBJZiBubyB2YWx1ZQorICAgICAgICB3YXMgeWV0IGNhY2hlZCBvciB0aGUg
dmFsdWUgY2Fubm90IGJlIHJlYWQsIHRoZSBzcGVjaWZpZWQKKyAgICAgICAgZGVmYXVsdCBpcyBy
ZXR1cm5lZC4KKworICAgICAgICA6cGFyYW0ga2V5OiBtdXN0IGJlIGEgYGAvYGAgc2VwYXJhdGVk
IHZhbHVlLiBVc3VhbGx5IHRoZSBmaXJzdAorICAgICAgICAgICAgIG5hbWUgaXMgdGhlIG5hbWUg
b2YgeW91ciBwbHVnaW4gb3IgeW91ciBhcHBsaWNhdGlvbi4KKyAgICAgICAgOnBhcmFtIGRlZmF1
bHQ6IG11c3QgYmUgcHJvdmlkZWQgaW4gY2FzZSBvZiBhIGNhY2hlLW1pc3Mgb3IKKyAgICAgICAg
ICAgICBpbnZhbGlkIGNhY2hlIHZhbHVlcy4KKworICAgICAgICAiIiIKKyAgICAgICAgcGF0aCA9
IHNlbGYuX2dldHZhbHVlcGF0aChrZXkpCisgICAgICAgIGlmIHBhdGguY2hlY2soKToKKyAgICAg
ICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB3aXRoIHBhdGgub3BlbigiciIpIGFzIGY6Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBqc29uLmxvYWQoZikKKyAgICAgICAgICAgIGV4Y2Vw
dCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIHNlbGYudHJhY2UoImNhY2hlLWludmFsaWQg
YXQgJXMiICUgKHBhdGgsKSkKKyAgICAgICAgcmV0dXJuIGRlZmF1bHQKKworICAgIGRlZiBzZXQo
c2VsZiwga2V5LCB2YWx1ZSk6CisgICAgICAgICIiIiBzYXZlIHZhbHVlIGZvciB0aGUgZ2l2ZW4g
a2V5LgorCisgICAgICAgIDpwYXJhbSBrZXk6IG11c3QgYmUgYSBgYC9gYCBzZXBhcmF0ZWQgdmFs
dWUuIFVzdWFsbHkgdGhlIGZpcnN0CisgICAgICAgICAgICAgbmFtZSBpcyB0aGUgbmFtZSBvZiB5
b3VyIHBsdWdpbiBvciB5b3VyIGFwcGxpY2F0aW9uLgorICAgICAgICA6cGFyYW0gdmFsdWU6IG11
c3QgYmUgb2YgYW55IGNvbWJpbmF0aW9uIG9mIGJhc2ljCisgICAgICAgICAgICAgICBweXRob24g
dHlwZXMsIGluY2x1ZGluZyBuZXN0ZWQgdHlwZXMKKyAgICAgICAgICAgICAgIGxpa2UgZS4gZy4g
bGlzdHMgb2YgZGljdGlvbmFyaWVzLgorICAgICAgICAiIiIKKyAgICAgICAgcGF0aCA9IHNlbGYu
X2dldHZhbHVlcGF0aChrZXkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBhdGguZGlycGF0
aCgpLmVuc3VyZV9kaXIoKQorICAgICAgICBleGNlcHQgKHB5LmVycm9yLkVFWElTVCwgcHkuZXJy
b3IuRUFDQ0VTKToKKyAgICAgICAgICAgIHNlbGYuY29uZmlnLndhcm4oCisgICAgICAgICAgICAg
ICAgY29kZT0nSTknLCBtZXNzYWdlPSdjb3VsZCBub3QgY3JlYXRlIGNhY2hlIHBhdGggJXMnICUg
KHBhdGgsKQorICAgICAgICAgICAgKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHRyeToK
KyAgICAgICAgICAgIGYgPSBwYXRoLm9wZW4oJ3cnKQorICAgICAgICBleGNlcHQgcHkuZXJyb3Iu
RU5PVERJUjoKKyAgICAgICAgICAgIHNlbGYuY29uZmlnLndhcm4oCisgICAgICAgICAgICAgICAg
Y29kZT0nSTknLCBtZXNzYWdlPSdjYWNoZSBjb3VsZCBub3Qgd3JpdGUgcGF0aCAlcycgJSAocGF0
aCwpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgd2l0aCBmOgorICAgICAgICAgICAgICAg
IHNlbGYudHJhY2UoImNhY2hlLXdyaXRlICVzOiAlciIgJSAoa2V5LCB2YWx1ZSwpKQorICAgICAg
ICAgICAgICAgIGpzb24uZHVtcCh2YWx1ZSwgZiwgaW5kZW50PTIsIHNvcnRfa2V5cz1UcnVlKQor
CisKK2NsYXNzIExGUGx1Z2luOgorICAgICIiIiBQbHVnaW4gd2hpY2ggaW1wbGVtZW50cyB0aGUg
LS1sZiAocnVuIGxhc3QtZmFpbGluZykgb3B0aW9uICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBjb25maWcpOgorICAgICAgICBzZWxmLmNvbmZpZyA9IGNvbmZpZworICAgICAgICBhY3RpdmVf
a2V5cyA9ICdsZicsICdmYWlsZWRmaXJzdCcKKyAgICAgICAgc2VsZi5hY3RpdmUgPSBhbnkoY29u
ZmlnLmdldHZhbHVlKGtleSkgZm9yIGtleSBpbiBhY3RpdmVfa2V5cykKKyAgICAgICAgaWYgc2Vs
Zi5hY3RpdmU6CisgICAgICAgICAgICBzZWxmLmxhc3RmYWlsZWQgPSBjb25maWcuY2FjaGUuZ2V0
KCJjYWNoZS9sYXN0ZmFpbGVkIiwge30pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxm
Lmxhc3RmYWlsZWQgPSB7fQorCisgICAgZGVmIHB5dGVzdF9yZXBvcnRfaGVhZGVyKHNlbGYpOgor
ICAgICAgICBpZiBzZWxmLmFjdGl2ZToKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmxhc3RmYWls
ZWQ6CisgICAgICAgICAgICAgICAgbW9kZSA9ICJydW4gYWxsIChubyByZWNvcmRlZCBmYWlsdXJl
cykiCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG1vZGUgPSAicmVydW4gbGFz
dCAlZCBmYWlsdXJlcyVzIiAlICgKKyAgICAgICAgICAgICAgICAgICAgbGVuKHNlbGYubGFzdGZh
aWxlZCksCisgICAgICAgICAgICAgICAgICAgICIgZmlyc3QiIGlmIHNlbGYuY29uZmlnLmdldHZh
bHVlKCJmYWlsZWRmaXJzdCIpIGVsc2UgIiIpCisgICAgICAgICAgICByZXR1cm4gInJ1bi1sYXN0
LWZhaWx1cmU6ICVzIiAlIG1vZGUKKworICAgIGRlZiBweXRlc3RfcnVudGVzdF9sb2dyZXBvcnQo
c2VsZiwgcmVwb3J0KToKKyAgICAgICAgaWYgcmVwb3J0LmZhaWxlZCBhbmQgInhmYWlsIiBub3Qg
aW4gcmVwb3J0LmtleXdvcmRzOgorICAgICAgICAgICAgc2VsZi5sYXN0ZmFpbGVkW3JlcG9ydC5u
b2RlaWRdID0gVHJ1ZQorICAgICAgICBlbGlmIG5vdCByZXBvcnQuZmFpbGVkOgorICAgICAgICAg
ICAgaWYgcmVwb3J0LndoZW4gPT0gImNhbGwiOgorICAgICAgICAgICAgICAgIHNlbGYubGFzdGZh
aWxlZC5wb3AocmVwb3J0Lm5vZGVpZCwgTm9uZSkKKworICAgIGRlZiBweXRlc3RfY29sbGVjdHJl
cG9ydChzZWxmLCByZXBvcnQpOgorICAgICAgICBwYXNzZWQgPSByZXBvcnQub3V0Y29tZSBpbiAo
J3Bhc3NlZCcsICdza2lwcGVkJykKKyAgICAgICAgaWYgcGFzc2VkOgorICAgICAgICAgICAgaWYg
cmVwb3J0Lm5vZGVpZCBpbiBzZWxmLmxhc3RmYWlsZWQ6CisgICAgICAgICAgICAgICAgc2VsZi5s
YXN0ZmFpbGVkLnBvcChyZXBvcnQubm9kZWlkKQorICAgICAgICAgICAgICAgIHNlbGYubGFzdGZh
aWxlZC51cGRhdGUoCisgICAgICAgICAgICAgICAgICAgIChpdGVtLm5vZGVpZCwgVHJ1ZSkKKyAg
ICAgICAgICAgICAgICAgICAgZm9yIGl0ZW0gaW4gcmVwb3J0LnJlc3VsdCkKKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIHNlbGYubGFzdGZhaWxlZFtyZXBvcnQubm9kZWlkXSA9IFRydWUKKwor
ICAgIGRlZiBweXRlc3RfY29sbGVjdGlvbl9tb2RpZnlpdGVtcyhzZWxmLCBzZXNzaW9uLCBjb25m
aWcsIGl0ZW1zKToKKyAgICAgICAgaWYgc2VsZi5hY3RpdmUgYW5kIHNlbGYubGFzdGZhaWxlZDoK
KyAgICAgICAgICAgIHByZXZpb3VzbHlfZmFpbGVkID0gW10KKyAgICAgICAgICAgIHByZXZpb3Vz
bHlfcGFzc2VkID0gW10KKyAgICAgICAgICAgIGZvciBpdGVtIGluIGl0ZW1zOgorICAgICAgICAg
ICAgICAgIGlmIGl0ZW0ubm9kZWlkIGluIHNlbGYubGFzdGZhaWxlZDoKKyAgICAgICAgICAgICAg
ICAgICAgcHJldmlvdXNseV9mYWlsZWQuYXBwZW5kKGl0ZW0pCisgICAgICAgICAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNseV9wYXNzZWQuYXBwZW5kKGl0ZW0pCisg
ICAgICAgICAgICBpZiBub3QgcHJldmlvdXNseV9mYWlsZWQgYW5kIHByZXZpb3VzbHlfcGFzc2Vk
OgorICAgICAgICAgICAgICAgICMgcnVubmluZyBhIHN1YnNldCBvZiBhbGwgdGVzdHMgd2l0aCBy
ZWNvcmRlZCBmYWlsdXJlcyBvdXRzaWRlCisgICAgICAgICAgICAgICAgIyBvZiB0aGUgc2V0IG9m
IHRlc3RzIGN1cnJlbnRseSBleGVjdXRpbmcKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAg
ICAgICBlbGlmIHNlbGYuY29uZmlnLmdldHZhbHVlKCJmYWlsZWRmaXJzdCIpOgorICAgICAgICAg
ICAgICAgIGl0ZW1zWzpdID0gcHJldmlvdXNseV9mYWlsZWQgKyBwcmV2aW91c2x5X3Bhc3NlZAor
ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpdGVtc1s6XSA9IHByZXZpb3VzbHlf
ZmFpbGVkCisgICAgICAgICAgICAgICAgY29uZmlnLmhvb2sucHl0ZXN0X2Rlc2VsZWN0ZWQoaXRl
bXM9cHJldmlvdXNseV9wYXNzZWQpCisKKyAgICBkZWYgcHl0ZXN0X3Nlc3Npb25maW5pc2goc2Vs
Ziwgc2Vzc2lvbik6CisgICAgICAgIGNvbmZpZyA9IHNlbGYuY29uZmlnCisgICAgICAgIGlmIGNv
bmZpZy5nZXR2YWx1ZSgiY2FjaGVzaG93Iikgb3IgaGFzYXR0cihjb25maWcsICJzbGF2ZWlucHV0
Iik6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgcHJldl9mYWlsZWQgPSBjb25maWcuY2Fj
aGUuZ2V0KCJjYWNoZS9sYXN0ZmFpbGVkIiwgTm9uZSkgaXMgbm90IE5vbmUKKyAgICAgICAgaWYg
KHNlc3Npb24udGVzdHNjb2xsZWN0ZWQgYW5kIHByZXZfZmFpbGVkKSBvciBzZWxmLmxhc3RmYWls
ZWQ6CisgICAgICAgICAgICBjb25maWcuY2FjaGUuc2V0KCJjYWNoZS9sYXN0ZmFpbGVkIiwgc2Vs
Zi5sYXN0ZmFpbGVkKQorCisKK2RlZiBweXRlc3RfYWRkb3B0aW9uKHBhcnNlcik6CisgICAgZ3Jv
dXAgPSBwYXJzZXIuZ2V0Z3JvdXAoImdlbmVyYWwiKQorICAgIGdyb3VwLmFkZG9wdGlvbigKKyAg
ICAgICAgJy0tbGYnLCAnLS1sYXN0LWZhaWxlZCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlc3Q9
ImxmIiwKKyAgICAgICAgaGVscD0icmVydW4gb25seSB0aGUgdGVzdHMgdGhhdCBmYWlsZWQgIgor
ICAgICAgICAgICAgICJhdCB0aGUgbGFzdCBydW4gKG9yIGFsbCBpZiBub25lIGZhaWxlZCkiKQor
ICAgIGdyb3VwLmFkZG9wdGlvbigKKyAgICAgICAgJy0tZmYnLCAnLS1mYWlsZWQtZmlyc3QnLCBh
Y3Rpb249J3N0b3JlX3RydWUnLCBkZXN0PSJmYWlsZWRmaXJzdCIsCisgICAgICAgIGhlbHA9InJ1
biBhbGwgdGVzdHMgYnV0IHJ1biB0aGUgbGFzdCBmYWlsdXJlcyBmaXJzdC4gICIKKyAgICAgICAg
ICAgICAiVGhpcyBtYXkgcmUtb3JkZXIgdGVzdHMgYW5kIHRodXMgbGVhZCB0byAiCisgICAgICAg
ICAgICAgInJlcGVhdGVkIGZpeHR1cmUgc2V0dXAvdGVhcmRvd24iKQorICAgIGdyb3VwLmFkZG9w
dGlvbigKKyAgICAgICAgJy0tY2FjaGUtc2hvdycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlc3Q9
ImNhY2hlc2hvdyIsCisgICAgICAgIGhlbHA9InNob3cgY2FjaGUgY29udGVudHMsIGRvbid0IHBl
cmZvcm0gY29sbGVjdGlvbiBvciB0ZXN0cyIpCisgICAgZ3JvdXAuYWRkb3B0aW9uKAorICAgICAg
ICAnLS1jYWNoZS1jbGVhcicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlc3Q9ImNhY2hlY2xlYXIi
LAorICAgICAgICBoZWxwPSJyZW1vdmUgYWxsIGNhY2hlIGNvbnRlbnRzIGF0IHN0YXJ0IG9mIHRl
c3QgcnVuLiIpCisKKworZGVmIHB5dGVzdF9jbWRsaW5lX21haW4oY29uZmlnKToKKyAgICBpZiBj
b25maWcub3B0aW9uLmNhY2hlc2hvdzoKKyAgICAgICAgZnJvbSBfcHl0ZXN0Lm1haW4gaW1wb3J0
IHdyYXBfc2Vzc2lvbgorICAgICAgICByZXR1cm4gd3JhcF9zZXNzaW9uKGNvbmZpZywgY2FjaGVz
aG93KQorCisKKworQHB5dGVzdC5ob29raW1wbCh0cnlmaXJzdD1UcnVlKQorZGVmIHB5dGVzdF9j
b25maWd1cmUoY29uZmlnKToKKyAgICBjb25maWcuY2FjaGUgPSBDYWNoZShjb25maWcpCisgICAg
Y29uZmlnLnBsdWdpbm1hbmFnZXIucmVnaXN0ZXIoTEZQbHVnaW4oY29uZmlnKSwgImxmcGx1Z2lu
IikKKworCitAcHl0ZXN0LmZpeHR1cmUKK2RlZiBjYWNoZShyZXF1ZXN0KToKKyAgICAiIiIKKyAg
ICBSZXR1cm4gYSBjYWNoZSBvYmplY3QgdGhhdCBjYW4gcGVyc2lzdCBzdGF0ZSBiZXR3ZWVuIHRl
c3Rpbmcgc2Vzc2lvbnMuCisKKyAgICBjYWNoZS5nZXQoa2V5LCBkZWZhdWx0KQorICAgIGNhY2hl
LnNldChrZXksIHZhbHVlKQorCisgICAgS2V5cyBtdXN0IGJlIGEgYGAvYGAgc2VwYXJhdGVkIHZh
bHVlLCB3aGVyZSB0aGUgZmlyc3QgcGFydCBpcyB1c3VhbGx5IHRoZQorICAgIG5hbWUgb2YgeW91
ciBwbHVnaW4gb3IgYXBwbGljYXRpb24gdG8gYXZvaWQgY2xhc2hlcyB3aXRoIG90aGVyIGNhY2hl
IHVzZXJzLgorCisgICAgVmFsdWVzIGNhbiBiZSBhbnkgb2JqZWN0IGhhbmRsZWQgYnkgdGhlIGpz
b24gc3RkbGliIG1vZHVsZS4KKyAgICAiIiIKKyAgICByZXR1cm4gcmVxdWVzdC5jb25maWcuY2Fj
aGUKKworCitkZWYgcHl0ZXN0X3JlcG9ydF9oZWFkZXIoY29uZmlnKToKKyAgICBpZiBjb25maWcu
b3B0aW9uLnZlcmJvc2U6CisgICAgICAgIHJlbHBhdGggPSBweS5wYXRoLmxvY2FsKCkuYmVzdHJl
bHBhdGgoY29uZmlnLmNhY2hlLl9jYWNoZWRpcikKKyAgICAgICAgcmV0dXJuICJjYWNoZWRpcjog
JXMiICUgcmVscGF0aAorCisKK2RlZiBjYWNoZXNob3coY29uZmlnLCBzZXNzaW9uKToKKyAgICBm
cm9tIHBwcmludCBpbXBvcnQgcHByaW50CisgICAgdHcgPSBweS5pby5UZXJtaW5hbFdyaXRlcigp
CisgICAgdHcubGluZSgiY2FjaGVkaXI6ICIgKyBzdHIoY29uZmlnLmNhY2hlLl9jYWNoZWRpcikp
CisgICAgaWYgbm90IGNvbmZpZy5jYWNoZS5fY2FjaGVkaXIuY2hlY2soKToKKyAgICAgICAgdHcu
bGluZSgiY2FjaGUgaXMgZW1wdHkiKQorICAgICAgICByZXR1cm4gMAorICAgIGR1bW15ID0gb2Jq
ZWN0KCkKKyAgICBiYXNlZGlyID0gY29uZmlnLmNhY2hlLl9jYWNoZWRpcgorICAgIHZkaXIgPSBi
YXNlZGlyLmpvaW4oInYiKQorICAgIHR3LnNlcCgiLSIsICJjYWNoZSB2YWx1ZXMiKQorICAgIGZv
ciB2YWxwYXRoIGluIHZkaXIudmlzaXQobGFtYmRhIHg6IHguaXNmaWxlKCkpOgorICAgICAgICBr
ZXkgPSB2YWxwYXRoLnJlbHRvKHZkaXIpLnJlcGxhY2UodmFscGF0aC5zZXAsICIvIikKKyAgICAg
ICAgdmFsID0gY29uZmlnLmNhY2hlLmdldChrZXksIGR1bW15KQorICAgICAgICBpZiB2YWwgaXMg
ZHVtbXk6CisgICAgICAgICAgICB0dy5saW5lKCIlcyBjb250YWlucyB1bnJlYWRhYmxlIGNvbnRl
bnQsICIKKyAgICAgICAgICAgICAgICAgICJ3aWxsIGJlIGlnbm9yZWQiICUga2V5KQorICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgdHcubGluZSgiJXMgY29udGFpbnM6IiAlIGtleSkKKyAgICAg
ICAgICAgIHN0cmVhbSA9IHB5LmlvLlRleHRJTygpCisgICAgICAgICAgICBwcHJpbnQodmFsLCBz
dHJlYW09c3RyZWFtKQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gc3RyZWFtLmdldHZhbHVlKCku
c3BsaXRsaW5lcygpOgorICAgICAgICAgICAgICAgIHR3LmxpbmUoIiAgIiArIGxpbmUpCisKKyAg
ICBkZGlyID0gYmFzZWRpci5qb2luKCJkIikKKyAgICBpZiBkZGlyLmlzZGlyKCkgYW5kIGRkaXIu
bGlzdGRpcigpOgorICAgICAgICB0dy5zZXAoIi0iLCAiY2FjaGUgZGlyZWN0b3JpZXMiKQorICAg
ICAgICBmb3IgcCBpbiBiYXNlZGlyLmpvaW4oImQiKS52aXNpdCgpOgorICAgICAgICAgICAgI2lm
IHAuY2hlY2soZGlyPTEpOgorICAgICAgICAgICAgIyAgICBwcmludCgiJXMvIiAlIHAucmVsdG8o
YmFzZWRpcikpCisgICAgICAgICAgICBpZiBwLmlzZmlsZSgpOgorICAgICAgICAgICAgICAgIGtl
eSA9IHAucmVsdG8oYmFzZWRpcikKKyAgICAgICAgICAgICAgICB0dy5saW5lKCIlcyBpcyBhIGZp
bGUgb2YgbGVuZ3RoICVkIiAlICgKKyAgICAgICAgICAgICAgICAgICAgICAgIGtleSwgcC5zaXpl
KCkpKQorICAgIHJldHVybiAwCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93
M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvY2FwdHVyZS5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9y
dGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9jYXB0dXJlLnB5Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zODk1YTcxNGFhMAotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9jYXB0dXJlLnB5
CkBAIC0wLDAgKzEsNDcyIEBACisiIiIKK3Blci10ZXN0IHN0ZG91dC9zdGRlcnIgY2FwdHVyaW5n
IG1lY2hhbmlzbS4KKworIiIiCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHdpdGhfc3RhdGVtZW50
CisKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworZnJvbSB0ZW1wZmlsZSBpbXBvcnQgVGVtcG9yYXJ5
RmlsZQorCitpbXBvcnQgcHkKK2ltcG9ydCBweXRlc3QKKworZnJvbSBweS5pbyBpbXBvcnQgVGV4
dElPCit1bmljb2RlID0gcHkuYnVpbHRpbi50ZXh0CisKK3BhdGNoc3lzZGljdCA9IHswOiAnc3Rk
aW4nLCAxOiAnc3Rkb3V0JywgMjogJ3N0ZGVycid9CisKKworZGVmIHB5dGVzdF9hZGRvcHRpb24o
cGFyc2VyKToKKyAgICBncm91cCA9IHBhcnNlci5nZXRncm91cCgiZ2VuZXJhbCIpCisgICAgZ3Jv
dXAuX2FkZG9wdGlvbigKKyAgICAgICAgJy0tY2FwdHVyZScsIGFjdGlvbj0ic3RvcmUiLAorICAg
ICAgICBkZWZhdWx0PSJmZCIgaWYgaGFzYXR0cihvcywgImR1cCIpIGVsc2UgInN5cyIsCisgICAg
ICAgIG1ldGF2YXI9Im1ldGhvZCIsIGNob2ljZXM9WydmZCcsICdzeXMnLCAnbm8nXSwKKyAgICAg
ICAgaGVscD0icGVyLXRlc3QgY2FwdHVyaW5nIG1ldGhvZDogb25lIG9mIGZkfHN5c3xuby4iKQor
ICAgIGdyb3VwLl9hZGRvcHRpb24oCisgICAgICAgICctcycsIGFjdGlvbj0ic3RvcmVfY29uc3Qi
LCBjb25zdD0ibm8iLCBkZXN0PSJjYXB0dXJlIiwKKyAgICAgICAgaGVscD0ic2hvcnRjdXQgZm9y
IC0tY2FwdHVyZT1uby4iKQorCisKK0BweXRlc3QuaG9va2ltcGwoaG9va3dyYXBwZXI9VHJ1ZSkK
K2RlZiBweXRlc3RfbG9hZF9pbml0aWFsX2NvbmZ0ZXN0cyhlYXJseV9jb25maWcsIHBhcnNlciwg
YXJncyk6CisgICAgX3JlYWRsaW5lX3dvcmthcm91bmQoKQorICAgIG5zID0gZWFybHlfY29uZmln
Lmtub3duX2FyZ3NfbmFtZXNwYWNlCisgICAgcGx1Z2lubWFuYWdlciA9IGVhcmx5X2NvbmZpZy5w
bHVnaW5tYW5hZ2VyCisgICAgY2FwbWFuID0gQ2FwdHVyZU1hbmFnZXIobnMuY2FwdHVyZSkKKyAg
ICBwbHVnaW5tYW5hZ2VyLnJlZ2lzdGVyKGNhcG1hbiwgImNhcHR1cmVtYW5hZ2VyIikKKworICAg
ICMgbWFrZSBzdXJlIHRoYXQgY2FwdHVyZW1hbmFnZXIgaXMgcHJvcGVybHkgcmVzZXQgYXQgZmlu
YWwgc2h1dGRvd24KKyAgICBlYXJseV9jb25maWcuYWRkX2NsZWFudXAoY2FwbWFuLnJlc2V0X2Nh
cHR1cmluZ3MpCisKKyAgICAjIG1ha2Ugc3VyZSBsb2dnaW5nIGRvZXMgbm90IHJhaXNlIGV4Y2Vw
dGlvbnMgYXQgdGhlIGVuZAorICAgIGRlZiBzaWxlbmNlX2xvZ2dpbmdfYXRfc2h1dGRvd24oKToK
KyAgICAgICAgaWYgImxvZ2dpbmciIGluIHN5cy5tb2R1bGVzOgorICAgICAgICAgICAgc3lzLm1v
ZHVsZXNbImxvZ2dpbmciXS5yYWlzZUV4Y2VwdGlvbnMgPSBGYWxzZQorICAgIGVhcmx5X2NvbmZp
Zy5hZGRfY2xlYW51cChzaWxlbmNlX2xvZ2dpbmdfYXRfc2h1dGRvd24pCisKKyAgICAjIGZpbmFs
bHkgdHJpZ2dlciBjb25mdGVzdCBsb2FkaW5nIGJ1dCB3aGlsZSBjYXB0dXJpbmcgKGlzc3VlOTMp
CisgICAgY2FwbWFuLmluaXRfY2FwdHVyaW5ncygpCisgICAgb3V0Y29tZSA9IHlpZWxkCisgICAg
b3V0LCBlcnIgPSBjYXBtYW4uc3VzcGVuZGNhcHR1cmUoKQorICAgIGlmIG91dGNvbWUuZXhjaW5m
byBpcyBub3QgTm9uZToKKyAgICAgICAgc3lzLnN0ZG91dC53cml0ZShvdXQpCisgICAgICAgIHN5
cy5zdGRlcnIud3JpdGUoZXJyKQorCisKK2NsYXNzIENhcHR1cmVNYW5hZ2VyOgorICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBtZXRob2QpOgorICAgICAgICBzZWxmLl9tZXRob2QgPSBtZXRob2QKKwor
ICAgIGRlZiBfZ2V0Y2FwdHVyZShzZWxmLCBtZXRob2QpOgorICAgICAgICBpZiBtZXRob2QgPT0g
ImZkIjoKKyAgICAgICAgICAgIHJldHVybiBNdWx0aUNhcHR1cmUob3V0PVRydWUsIGVycj1UcnVl
LCBDYXB0dXJlPUZEQ2FwdHVyZSkKKyAgICAgICAgZWxpZiBtZXRob2QgPT0gInN5cyI6CisgICAg
ICAgICAgICByZXR1cm4gTXVsdGlDYXB0dXJlKG91dD1UcnVlLCBlcnI9VHJ1ZSwgQ2FwdHVyZT1T
eXNDYXB0dXJlKQorICAgICAgICBlbGlmIG1ldGhvZCA9PSAibm8iOgorICAgICAgICAgICAgcmV0
dXJuIE11bHRpQ2FwdHVyZShvdXQ9RmFsc2UsIGVycj1GYWxzZSwgaW5fPUZhbHNlKQorICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5rbm93biBjYXB0dXJpbmcg
bWV0aG9kOiAlciIgJSBtZXRob2QpCisKKyAgICBkZWYgaW5pdF9jYXB0dXJpbmdzKHNlbGYpOgor
ICAgICAgICBhc3NlcnQgbm90IGhhc2F0dHIoc2VsZiwgIl9jYXB0dXJpbmciKQorICAgICAgICBz
ZWxmLl9jYXB0dXJpbmcgPSBzZWxmLl9nZXRjYXB0dXJlKHNlbGYuX21ldGhvZCkKKyAgICAgICAg
c2VsZi5fY2FwdHVyaW5nLnN0YXJ0X2NhcHR1cmluZygpCisKKyAgICBkZWYgcmVzZXRfY2FwdHVy
aW5ncyhzZWxmKToKKyAgICAgICAgY2FwID0gc2VsZi5fX2RpY3RfXy5wb3AoIl9jYXB0dXJpbmci
LCBOb25lKQorICAgICAgICBpZiBjYXAgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBjYXAucG9w
X291dGVycl90b19vcmlnKCkKKyAgICAgICAgICAgIGNhcC5zdG9wX2NhcHR1cmluZygpCisKKyAg
ICBkZWYgcmVzdW1lY2FwdHVyZShzZWxmKToKKyAgICAgICAgc2VsZi5fY2FwdHVyaW5nLnJlc3Vt
ZV9jYXB0dXJpbmcoKQorCisgICAgZGVmIHN1c3BlbmRjYXB0dXJlKHNlbGYsIGluXz1GYWxzZSk6
CisgICAgICAgIHNlbGYuZGVhY3RpdmF0ZV9mdW5jYXJncygpCisgICAgICAgIGNhcCA9IGdldGF0
dHIoc2VsZiwgIl9jYXB0dXJpbmciLCBOb25lKQorICAgICAgICBpZiBjYXAgaXMgbm90IE5vbmU6
CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3V0ZXJyID0gY2FwLnJlYWRvdXRl
cnIoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBjYXAuc3VzcGVuZF9j
YXB0dXJpbmcoaW5fPWluXykKKyAgICAgICAgICAgIHJldHVybiBvdXRlcnIKKworICAgIGRlZiBh
Y3RpdmF0ZV9mdW5jYXJncyhzZWxmLCBweWZ1bmNpdGVtKToKKyAgICAgICAgY2FwZnVuY2FyZyA9
IHB5ZnVuY2l0ZW0uX19kaWN0X18ucG9wKCJfY2FwZnVuY2FyZyIsIE5vbmUpCisgICAgICAgIGlm
IGNhcGZ1bmNhcmcgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBjYXBmdW5jYXJnLl9zdGFydCgp
CisgICAgICAgICAgICBzZWxmLl9jYXBmdW5jYXJnID0gY2FwZnVuY2FyZworCisgICAgZGVmIGRl
YWN0aXZhdGVfZnVuY2FyZ3Moc2VsZik6CisgICAgICAgIGNhcGZ1bmNhcmcgPSBzZWxmLl9fZGlj
dF9fLnBvcCgiX2NhcGZ1bmNhcmciLCBOb25lKQorICAgICAgICBpZiBjYXBmdW5jYXJnIGlzIG5v
dCBOb25lOgorICAgICAgICAgICAgY2FwZnVuY2FyZy5jbG9zZSgpCisKKyAgICBAcHl0ZXN0Lmhv
b2tpbXBsKGhvb2t3cmFwcGVyPVRydWUpCisgICAgZGVmIHB5dGVzdF9tYWtlX2NvbGxlY3RfcmVw
b3J0KHNlbGYsIGNvbGxlY3Rvcik6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoY29sbGVjdG9yLCBw
eXRlc3QuRmlsZSk6CisgICAgICAgICAgICBzZWxmLnJlc3VtZWNhcHR1cmUoKQorICAgICAgICAg
ICAgb3V0Y29tZSA9IHlpZWxkCisgICAgICAgICAgICBvdXQsIGVyciA9IHNlbGYuc3VzcGVuZGNh
cHR1cmUoKQorICAgICAgICAgICAgcmVwID0gb3V0Y29tZS5nZXRfcmVzdWx0KCkKKyAgICAgICAg
ICAgIGlmIG91dDoKKyAgICAgICAgICAgICAgICByZXAuc2VjdGlvbnMuYXBwZW5kKCgiQ2FwdHVy
ZWQgc3Rkb3V0Iiwgb3V0KSkKKyAgICAgICAgICAgIGlmIGVycjoKKyAgICAgICAgICAgICAgICBy
ZXAuc2VjdGlvbnMuYXBwZW5kKCgiQ2FwdHVyZWQgc3RkZXJyIiwgZXJyKSkKKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIHlpZWxkCisKKyAgICBAcHl0ZXN0Lmhvb2tpbXBsKGhvb2t3cmFwcGVy
PVRydWUpCisgICAgZGVmIHB5dGVzdF9ydW50ZXN0X3NldHVwKHNlbGYsIGl0ZW0pOgorICAgICAg
ICBzZWxmLnJlc3VtZWNhcHR1cmUoKQorICAgICAgICB5aWVsZAorICAgICAgICBzZWxmLnN1c3Bl
bmRjYXB0dXJlX2l0ZW0oaXRlbSwgInNldHVwIikKKworICAgIEBweXRlc3QuaG9va2ltcGwoaG9v
a3dyYXBwZXI9VHJ1ZSkKKyAgICBkZWYgcHl0ZXN0X3J1bnRlc3RfY2FsbChzZWxmLCBpdGVtKToK
KyAgICAgICAgc2VsZi5yZXN1bWVjYXB0dXJlKCkKKyAgICAgICAgc2VsZi5hY3RpdmF0ZV9mdW5j
YXJncyhpdGVtKQorICAgICAgICB5aWVsZAorICAgICAgICAjc2VsZi5kZWFjdGl2YXRlX2Z1bmNh
cmdzKCkgY2FsbGVkIGZyb20gc3VzcGVuZGNhcHR1cmUoKQorICAgICAgICBzZWxmLnN1c3BlbmRj
YXB0dXJlX2l0ZW0oaXRlbSwgImNhbGwiKQorCisgICAgQHB5dGVzdC5ob29raW1wbChob29rd3Jh
cHBlcj1UcnVlKQorICAgIGRlZiBweXRlc3RfcnVudGVzdF90ZWFyZG93bihzZWxmLCBpdGVtKToK
KyAgICAgICAgc2VsZi5yZXN1bWVjYXB0dXJlKCkKKyAgICAgICAgeWllbGQKKyAgICAgICAgc2Vs
Zi5zdXNwZW5kY2FwdHVyZV9pdGVtKGl0ZW0sICJ0ZWFyZG93biIpCisKKyAgICBAcHl0ZXN0Lmhv
b2tpbXBsKHRyeWZpcnN0PVRydWUpCisgICAgZGVmIHB5dGVzdF9rZXlib2FyZF9pbnRlcnJ1cHQo
c2VsZiwgZXhjaW5mbyk6CisgICAgICAgIHNlbGYucmVzZXRfY2FwdHVyaW5ncygpCisKKyAgICBA
cHl0ZXN0Lmhvb2tpbXBsKHRyeWZpcnN0PVRydWUpCisgICAgZGVmIHB5dGVzdF9pbnRlcm5hbGVy
cm9yKHNlbGYsIGV4Y2luZm8pOgorICAgICAgICBzZWxmLnJlc2V0X2NhcHR1cmluZ3MoKQorCisg
ICAgZGVmIHN1c3BlbmRjYXB0dXJlX2l0ZW0oc2VsZiwgaXRlbSwgd2hlbik6CisgICAgICAgIG91
dCwgZXJyID0gc2VsZi5zdXNwZW5kY2FwdHVyZSgpCisgICAgICAgIGl0ZW0uYWRkX3JlcG9ydF9z
ZWN0aW9uKHdoZW4sICJzdGRvdXQiLCBvdXQpCisgICAgICAgIGl0ZW0uYWRkX3JlcG9ydF9zZWN0
aW9uKHdoZW4sICJzdGRlcnIiLCBlcnIpCisKK2Vycm9yX2NhcHN5c2ZkZXJyb3IgPSAiY2Fubm90
IHVzZSBjYXBzeXMgYW5kIGNhcGZkIGF0IHRoZSBzYW1lIHRpbWUiCisKKworQHB5dGVzdC5maXh0
dXJlCitkZWYgY2Fwc3lzKHJlcXVlc3QpOgorICAgICIiImVuYWJsZXMgY2FwdHVyaW5nIG9mIHdy
aXRlcyB0byBzeXMuc3Rkb3V0L3N5cy5zdGRlcnIgYW5kIG1ha2VzCisgICAgY2FwdHVyZWQgb3V0
cHV0IGF2YWlsYWJsZSB2aWEgYGBjYXBzeXMucmVhZG91dGVycigpYGAgbWV0aG9kIGNhbGxzCisg
ICAgd2hpY2ggcmV0dXJuIGEgYGAob3V0LCBlcnIpYGAgdHVwbGUuCisgICAgIiIiCisgICAgaWYg
ImNhcGZkIiBpbiByZXF1ZXN0Ll9mdW5jYXJnczoKKyAgICAgICAgcmFpc2UgcmVxdWVzdC5yYWlz
ZWVycm9yKGVycm9yX2NhcHN5c2ZkZXJyb3IpCisgICAgcmVxdWVzdC5ub2RlLl9jYXBmdW5jYXJn
ID0gYyA9IENhcHR1cmVGaXh0dXJlKFN5c0NhcHR1cmUpCisgICAgcmV0dXJuIGMKKworQHB5dGVz
dC5maXh0dXJlCitkZWYgY2FwZmQocmVxdWVzdCk6CisgICAgIiIiZW5hYmxlcyBjYXB0dXJpbmcg
b2Ygd3JpdGVzIHRvIGZpbGUgZGVzY3JpcHRvcnMgMSBhbmQgMiBhbmQgbWFrZXMKKyAgICBjYXB0
dXJlZCBvdXRwdXQgYXZhaWxhYmxlIHZpYSBgYGNhcGZkLnJlYWRvdXRlcnIoKWBgIG1ldGhvZCBj
YWxscworICAgIHdoaWNoIHJldHVybiBhIGBgKG91dCwgZXJyKWBgIHR1cGxlLgorICAgICIiIgor
ICAgIGlmICJjYXBzeXMiIGluIHJlcXVlc3QuX2Z1bmNhcmdzOgorICAgICAgICByZXF1ZXN0LnJh
aXNlZXJyb3IoZXJyb3JfY2Fwc3lzZmRlcnJvcikKKyAgICBpZiBub3QgaGFzYXR0cihvcywgJ2R1
cCcpOgorICAgICAgICBweXRlc3Quc2tpcCgiY2FwZmQgZnVuY2FyZyBuZWVkcyBvcy5kdXAiKQor
ICAgIHJlcXVlc3Qubm9kZS5fY2FwZnVuY2FyZyA9IGMgPSBDYXB0dXJlRml4dHVyZShGRENhcHR1
cmUpCisgICAgcmV0dXJuIGMKKworCitjbGFzcyBDYXB0dXJlRml4dHVyZToKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgY2FwdHVyZWNsYXNzKToKKyAgICAgICAgc2VsZi5jYXB0dXJlY2xhc3MgPSBj
YXB0dXJlY2xhc3MKKworICAgIGRlZiBfc3RhcnQoc2VsZik6CisgICAgICAgIHNlbGYuX2NhcHR1
cmUgPSBNdWx0aUNhcHR1cmUob3V0PVRydWUsIGVycj1UcnVlLCBpbl89RmFsc2UsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYXB0dXJlPXNlbGYuY2FwdHVyZWNsYXNz
KQorICAgICAgICBzZWxmLl9jYXB0dXJlLnN0YXJ0X2NhcHR1cmluZygpCisKKyAgICBkZWYgY2xv
c2Uoc2VsZik6CisgICAgICAgIGNhcCA9IHNlbGYuX19kaWN0X18ucG9wKCJfY2FwdHVyZSIsIE5v
bmUpCisgICAgICAgIGlmIGNhcCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX291dGVy
ciA9IGNhcC5wb3Bfb3V0ZXJyX3RvX29yaWcoKQorICAgICAgICAgICAgY2FwLnN0b3BfY2FwdHVy
aW5nKCkKKworICAgIGRlZiByZWFkb3V0ZXJyKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAg
ICAgICByZXR1cm4gc2VsZi5fY2FwdHVyZS5yZWFkb3V0ZXJyKCkKKyAgICAgICAgZXhjZXB0IEF0
dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX291dGVycgorCisKK2RlZiBz
YWZlX3RleHRfZHVwZmlsZShmLCBtb2RlLCBkZWZhdWx0X2VuY29kaW5nPSJVVEY4Iik6CisgICAg
IiIiIHJldHVybiBhIG9wZW4gdGV4dCBmaWxlIG9iamVjdCB0aGF0J3MgYSBkdXBsaWNhdGUgb2Yg
ZiBvbiB0aGUKKyAgICAgICAgRkQtbGV2ZWwgaWYgcG9zc2libGUuCisgICAgIiIiCisgICAgZW5j
b2RpbmcgPSBnZXRhdHRyKGYsICJlbmNvZGluZyIsIE5vbmUpCisgICAgdHJ5OgorICAgICAgICBm
ZCA9IGYuZmlsZW5vKCkKKyAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICBpZiAiYiIgbm90
IGluIGdldGF0dHIoZiwgIm1vZGUiLCAiIikgYW5kIGhhc2F0dHIoZiwgImVuY29kaW5nIik6Cisg
ICAgICAgICAgICAjIHdlIHNlZW0gdG8gaGF2ZSBhIHRleHQgc3RyZWFtLCBsZXQncyBqdXN0IHVz
ZSBpdAorICAgICAgICAgICAgcmV0dXJuIGYKKyAgICBlbHNlOgorICAgICAgICBuZXdmZCA9IG9z
LmR1cChmZCkKKyAgICAgICAgaWYgImIiIG5vdCBpbiBtb2RlOgorICAgICAgICAgICAgbW9kZSAr
PSAiYiIKKyAgICAgICAgZiA9IG9zLmZkb3BlbihuZXdmZCwgbW9kZSwgMCkgICMgbm8gYnVmZmVy
aW5nCisgICAgcmV0dXJuIEVuY29kZWRGaWxlKGYsIGVuY29kaW5nIG9yIGRlZmF1bHRfZW5jb2Rp
bmcpCisKKworY2xhc3MgRW5jb2RlZEZpbGUob2JqZWN0KToKKyAgICBlcnJvcnMgPSAic3RyaWN0
IiAgIyBwb3NzaWJseSBuZWVkZWQgYnkgcHkzIGNvZGUgKGlzc3VlNTU1KQorICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBidWZmZXIsIGVuY29kaW5nKToKKyAgICAgICAgc2VsZi5idWZmZXIgPSBidWZm
ZXIKKyAgICAgICAgc2VsZi5lbmNvZGluZyA9IGVuY29kaW5nCisKKyAgICBkZWYgd3JpdGUoc2Vs
Ziwgb2JqKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvYmosIHVuaWNvZGUpOgorICAgICAgICAg
ICAgb2JqID0gb2JqLmVuY29kZShzZWxmLmVuY29kaW5nLCAicmVwbGFjZSIpCisgICAgICAgIHNl
bGYuYnVmZmVyLndyaXRlKG9iaikKKworICAgIGRlZiB3cml0ZWxpbmVzKHNlbGYsIGxpbmVsaXN0
KToKKyAgICAgICAgZGF0YSA9ICcnLmpvaW4obGluZWxpc3QpCisgICAgICAgIHNlbGYud3JpdGUo
ZGF0YSkKKworICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgcmV0dXJu
IGdldGF0dHIob2JqZWN0Ll9fZ2V0YXR0cmlidXRlX18oc2VsZiwgImJ1ZmZlciIpLCBuYW1lKQor
CisKK2NsYXNzIE11bHRpQ2FwdHVyZShvYmplY3QpOgorICAgIG91dCA9IGVyciA9IGluXyA9IE5v
bmUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvdXQ9VHJ1ZSwgZXJyPVRydWUsIGluXz1UcnVl
LCBDYXB0dXJlPU5vbmUpOgorICAgICAgICBpZiBpbl86CisgICAgICAgICAgICBzZWxmLmluXyA9
IENhcHR1cmUoMCkKKyAgICAgICAgaWYgb3V0OgorICAgICAgICAgICAgc2VsZi5vdXQgPSBDYXB0
dXJlKDEpCisgICAgICAgIGlmIGVycjoKKyAgICAgICAgICAgIHNlbGYuZXJyID0gQ2FwdHVyZSgy
KQorCisgICAgZGVmIHN0YXJ0X2NhcHR1cmluZyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5pbl86
CisgICAgICAgICAgICBzZWxmLmluXy5zdGFydCgpCisgICAgICAgIGlmIHNlbGYub3V0OgorICAg
ICAgICAgICAgc2VsZi5vdXQuc3RhcnQoKQorICAgICAgICBpZiBzZWxmLmVycjoKKyAgICAgICAg
ICAgIHNlbGYuZXJyLnN0YXJ0KCkKKworICAgIGRlZiBwb3Bfb3V0ZXJyX3RvX29yaWcoc2VsZik6
CisgICAgICAgICIiIiBwb3AgY3VycmVudCBzbmFwc2hvdCBvdXQvZXJyIGNhcHR1cmUgYW5kIGZs
dXNoIHRvIG9yaWcgc3RyZWFtcy4gIiIiCisgICAgICAgIG91dCwgZXJyID0gc2VsZi5yZWFkb3V0
ZXJyKCkKKyAgICAgICAgaWYgb3V0OgorICAgICAgICAgICAgc2VsZi5vdXQud3JpdGVvcmcob3V0
KQorICAgICAgICBpZiBlcnI6CisgICAgICAgICAgICBzZWxmLmVyci53cml0ZW9yZyhlcnIpCisg
ICAgICAgIHJldHVybiBvdXQsIGVycgorCisgICAgZGVmIHN1c3BlbmRfY2FwdHVyaW5nKHNlbGYs
IGluXz1GYWxzZSk6CisgICAgICAgIGlmIHNlbGYub3V0OgorICAgICAgICAgICAgc2VsZi5vdXQu
c3VzcGVuZCgpCisgICAgICAgIGlmIHNlbGYuZXJyOgorICAgICAgICAgICAgc2VsZi5lcnIuc3Vz
cGVuZCgpCisgICAgICAgIGlmIGluXyBhbmQgc2VsZi5pbl86CisgICAgICAgICAgICBzZWxmLmlu
Xy5zdXNwZW5kKCkKKyAgICAgICAgICAgIHNlbGYuX2luX3N1c3BlbmRlZCA9IFRydWUKKworICAg
IGRlZiByZXN1bWVfY2FwdHVyaW5nKHNlbGYpOgorICAgICAgICBpZiBzZWxmLm91dDoKKyAgICAg
ICAgICAgIHNlbGYub3V0LnJlc3VtZSgpCisgICAgICAgIGlmIHNlbGYuZXJyOgorICAgICAgICAg
ICAgc2VsZi5lcnIucmVzdW1lKCkKKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAiX2luX3N1c3Bl
bmRlZCIpOgorICAgICAgICAgICAgc2VsZi5pbl8ucmVzdW1lKCkKKyAgICAgICAgICAgIGRlbCBz
ZWxmLl9pbl9zdXNwZW5kZWQKKworICAgIGRlZiBzdG9wX2NhcHR1cmluZyhzZWxmKToKKyAgICAg
ICAgIiIiIHN0b3AgY2FwdHVyaW5nIGFuZCByZXNldCBjYXB0dXJpbmcgc3RyZWFtcyAiIiIKKyAg
ICAgICAgaWYgaGFzYXR0cihzZWxmLCAnX3Jlc2V0Jyk6CisgICAgICAgICAgICByYWlzZSBWYWx1
ZUVycm9yKCJ3YXMgYWxyZWFkeSBzdG9wcGVkIikKKyAgICAgICAgc2VsZi5fcmVzZXQgPSBUcnVl
CisgICAgICAgIGlmIHNlbGYub3V0OgorICAgICAgICAgICAgc2VsZi5vdXQuZG9uZSgpCisgICAg
ICAgIGlmIHNlbGYuZXJyOgorICAgICAgICAgICAgc2VsZi5lcnIuZG9uZSgpCisgICAgICAgIGlm
IHNlbGYuaW5fOgorICAgICAgICAgICAgc2VsZi5pbl8uZG9uZSgpCisKKyAgICBkZWYgcmVhZG91
dGVycihzZWxmKToKKyAgICAgICAgIiIiIHJldHVybiBzbmFwc2hvdCB1bmljb2RlIHZhbHVlIG9m
IHN0ZG91dC9zdGRlcnIgY2FwdHVyaW5ncy4gIiIiCisgICAgICAgIHJldHVybiAoc2VsZi5vdXQu
c25hcCgpIGlmIHNlbGYub3V0IGlzIG5vdCBOb25lIGVsc2UgIiIsCisgICAgICAgICAgICAgICAg
c2VsZi5lcnIuc25hcCgpIGlmIHNlbGYuZXJyIGlzIG5vdCBOb25lIGVsc2UgIiIpCisKK2NsYXNz
IE5vQ2FwdHVyZToKKyAgICBfX2luaXRfXyA9IHN0YXJ0ID0gZG9uZSA9IHN1c3BlbmQgPSByZXN1
bWUgPSBsYW1iZGEgKmFyZ3M6IE5vbmUKKworY2xhc3MgRkRDYXB0dXJlOgorICAgICIiIiBDYXB0
dXJlIElPIHRvL2Zyb20gYSBnaXZlbiBvcy1sZXZlbCBmaWxlZGVzY3JpcHRvci4gIiIiCisKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgdGFyZ2V0ZmQsIHRtcGZpbGU9Tm9uZSk6CisgICAgICAgIHNl
bGYudGFyZ2V0ZmQgPSB0YXJnZXRmZAorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnRh
cmdldGZkX3NhdmUgPSBvcy5kdXAoc2VsZi50YXJnZXRmZCkKKyAgICAgICAgZXhjZXB0IE9TRXJy
b3I6CisgICAgICAgICAgICBzZWxmLnN0YXJ0ID0gbGFtYmRhOiBOb25lCisgICAgICAgICAgICBz
ZWxmLmRvbmUgPSBsYW1iZGE6IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHRh
cmdldGZkID09IDA6CisgICAgICAgICAgICAgICAgYXNzZXJ0IG5vdCB0bXBmaWxlLCAiY2Fubm90
IHNldCB0bXBmaWxlIHdpdGggc3RkaW4iCisgICAgICAgICAgICAgICAgdG1wZmlsZSA9IG9wZW4o
b3MuZGV2bnVsbCwgInIiKQorICAgICAgICAgICAgICAgIHNlbGYuc3lzY2FwdHVyZSA9IFN5c0Nh
cHR1cmUodGFyZ2V0ZmQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIHRt
cGZpbGUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgZiA9IFRlbXBvcmFyeUZpbGUoKQor
ICAgICAgICAgICAgICAgICAgICB3aXRoIGY6CisgICAgICAgICAgICAgICAgICAgICAgICB0bXBm
aWxlID0gc2FmZV90ZXh0X2R1cGZpbGUoZiwgbW9kZT0id2IrIikKKyAgICAgICAgICAgICAgICBp
ZiB0YXJnZXRmZCBpbiBwYXRjaHN5c2RpY3Q6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuc3lz
Y2FwdHVyZSA9IFN5c0NhcHR1cmUodGFyZ2V0ZmQsIHRtcGZpbGUpCisgICAgICAgICAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zeXNjYXB0dXJlID0gTm9DYXB0dXJlKCkK
KyAgICAgICAgICAgIHNlbGYudG1wZmlsZSA9IHRtcGZpbGUKKyAgICAgICAgICAgIHNlbGYudG1w
ZmlsZV9mZCA9IHRtcGZpbGUuZmlsZW5vKCkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAg
ICAgICAgcmV0dXJuICI8RkRDYXB0dXJlICVzIG9sZGZkPSVzPiIgJSAoc2VsZi50YXJnZXRmZCwg
c2VsZi50YXJnZXRmZF9zYXZlKQorCisgICAgZGVmIHN0YXJ0KHNlbGYpOgorICAgICAgICAiIiIg
U3RhcnQgY2FwdHVyaW5nIG9uIHRhcmdldGZkIHVzaW5nIG1lbW9yaXplZCB0bXBmaWxlLiAiIiIK
KyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MuZnN0YXQoc2VsZi50YXJnZXRmZF9zYXZlKQor
ICAgICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBPU0Vycm9yKToKKyAgICAgICAgICAgIHJh
aXNlIFZhbHVlRXJyb3IoInNhdmVkIGZpbGVkZXNjcmlwdG9yIG5vdCB2YWxpZCBhbnltb3JlIikK
KyAgICAgICAgb3MuZHVwMihzZWxmLnRtcGZpbGVfZmQsIHNlbGYudGFyZ2V0ZmQpCisgICAgICAg
IHNlbGYuc3lzY2FwdHVyZS5zdGFydCgpCisKKyAgICBkZWYgc25hcChzZWxmKToKKyAgICAgICAg
ZiA9IHNlbGYudG1wZmlsZQorICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgcmVzID0gZi5yZWFk
KCkKKyAgICAgICAgaWYgcmVzOgorICAgICAgICAgICAgZW5jID0gZ2V0YXR0cihmLCAiZW5jb2Rp
bmciLCBOb25lKQorICAgICAgICAgICAgaWYgZW5jIGFuZCBpc2luc3RhbmNlKHJlcywgYnl0ZXMp
OgorICAgICAgICAgICAgICAgIHJlcyA9IHB5LmJ1aWx0aW4uX3RvdGV4dChyZXMsIGVuYywgInJl
cGxhY2UiKQorICAgICAgICAgICAgZi50cnVuY2F0ZSgwKQorICAgICAgICAgICAgZi5zZWVrKDAp
CisgICAgICAgICAgICByZXR1cm4gcmVzCisgICAgICAgIHJldHVybiAnJworCisgICAgZGVmIGRv
bmUoc2VsZik6CisgICAgICAgICIiIiBzdG9wIGNhcHR1cmluZywgcmVzdG9yZSBzdHJlYW1zLCBy
ZXR1cm4gb3JpZ2luYWwgY2FwdHVyZSBmaWxlLAorICAgICAgICBzZWVrZWQgdG8gcG9zaXRpb24g
emVyby4gIiIiCisgICAgICAgIHRhcmdldGZkX3NhdmUgPSBzZWxmLl9fZGljdF9fLnBvcCgidGFy
Z2V0ZmRfc2F2ZSIpCisgICAgICAgIG9zLmR1cDIodGFyZ2V0ZmRfc2F2ZSwgc2VsZi50YXJnZXRm
ZCkKKyAgICAgICAgb3MuY2xvc2UodGFyZ2V0ZmRfc2F2ZSkKKyAgICAgICAgc2VsZi5zeXNjYXB0
dXJlLmRvbmUoKQorICAgICAgICBzZWxmLnRtcGZpbGUuY2xvc2UoKQorCisgICAgZGVmIHN1c3Bl
bmQoc2VsZik6CisgICAgICAgIHNlbGYuc3lzY2FwdHVyZS5zdXNwZW5kKCkKKyAgICAgICAgb3Mu
ZHVwMihzZWxmLnRhcmdldGZkX3NhdmUsIHNlbGYudGFyZ2V0ZmQpCisKKyAgICBkZWYgcmVzdW1l
KHNlbGYpOgorICAgICAgICBzZWxmLnN5c2NhcHR1cmUucmVzdW1lKCkKKyAgICAgICAgb3MuZHVw
MihzZWxmLnRtcGZpbGVfZmQsIHNlbGYudGFyZ2V0ZmQpCisKKyAgICBkZWYgd3JpdGVvcmcoc2Vs
ZiwgZGF0YSk6CisgICAgICAgICIiIiB3cml0ZSB0byBvcmlnaW5hbCBmaWxlIGRlc2NyaXB0b3Iu
ICIiIgorICAgICAgICBpZiBweS5idWlsdGluLl9pc3RleHQoZGF0YSk6CisgICAgICAgICAgICBk
YXRhID0gZGF0YS5lbmNvZGUoInV0ZjgiKSAjIFhYWCB1c2UgZW5jb2Rpbmcgb2Ygb3JpZ2luYWwg
c3RyZWFtCisgICAgICAgIG9zLndyaXRlKHNlbGYudGFyZ2V0ZmRfc2F2ZSwgZGF0YSkKKworCitj
bGFzcyBTeXNDYXB0dXJlOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmZCwgdG1wZmlsZT1Ob25l
KToKKyAgICAgICAgbmFtZSA9IHBhdGNoc3lzZGljdFtmZF0KKyAgICAgICAgc2VsZi5fb2xkID0g
Z2V0YXR0cihzeXMsIG5hbWUpCisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgaWYg
dG1wZmlsZSBpcyBOb25lOgorICAgICAgICAgICAgaWYgbmFtZSA9PSAic3RkaW4iOgorICAgICAg
ICAgICAgICAgIHRtcGZpbGUgPSBEb250UmVhZEZyb21JbnB1dCgpCisgICAgICAgICAgICBlbHNl
OgorICAgICAgICAgICAgICAgIHRtcGZpbGUgPSBUZXh0SU8oKQorICAgICAgICBzZWxmLnRtcGZp
bGUgPSB0bXBmaWxlCisKKyAgICBkZWYgc3RhcnQoc2VsZik6CisgICAgICAgIHNldGF0dHIoc3lz
LCBzZWxmLm5hbWUsIHNlbGYudG1wZmlsZSkKKworICAgIGRlZiBzbmFwKHNlbGYpOgorICAgICAg
ICBmID0gc2VsZi50bXBmaWxlCisgICAgICAgIHJlcyA9IGYuZ2V0dmFsdWUoKQorICAgICAgICBm
LnRydW5jYXRlKDApCisgICAgICAgIGYuc2VlaygwKQorICAgICAgICByZXR1cm4gcmVzCisKKyAg
ICBkZWYgZG9uZShzZWxmKToKKyAgICAgICAgc2V0YXR0cihzeXMsIHNlbGYubmFtZSwgc2VsZi5f
b2xkKQorICAgICAgICBkZWwgc2VsZi5fb2xkCisgICAgICAgIHNlbGYudG1wZmlsZS5jbG9zZSgp
CisKKyAgICBkZWYgc3VzcGVuZChzZWxmKToKKyAgICAgICAgc2V0YXR0cihzeXMsIHNlbGYubmFt
ZSwgc2VsZi5fb2xkKQorCisgICAgZGVmIHJlc3VtZShzZWxmKToKKyAgICAgICAgc2V0YXR0cihz
eXMsIHNlbGYubmFtZSwgc2VsZi50bXBmaWxlKQorCisgICAgZGVmIHdyaXRlb3JnKHNlbGYsIGRh
dGEpOgorICAgICAgICBzZWxmLl9vbGQud3JpdGUoZGF0YSkKKyAgICAgICAgc2VsZi5fb2xkLmZs
dXNoKCkKKworCitjbGFzcyBEb250UmVhZEZyb21JbnB1dDoKKyAgICAiIiJUZW1wb3Jhcnkgc3R1
YiBjbGFzcy4gIElkZWFsbHkgd2hlbiBzdGRpbiBpcyBhY2Nlc3NlZCwgdGhlCisgICAgY2FwdHVy
aW5nIHNob3VsZCBiZSB0dXJuZWQgb2ZmLCB3aXRoIHBvc3NpYmx5IGFsbCBkYXRhIGNhcHR1cmVk
CisgICAgc28gZmFyIHNlbnQgdG8gdGhlIHNjcmVlbi4gIFRoaXMgc2hvdWxkIGJlIGNvbmZpZ3Vy
YWJsZSwgdGhvdWdoLAorICAgIGJlY2F1c2UgaW4gYXV0b21hdGVkIHRlc3QgcnVucyBpdCBpcyBi
ZXR0ZXIgdG8gY3Jhc2ggdGhhbgorICAgIGhhbmcgaW5kZWZpbml0ZWx5LgorICAgICIiIgorCisg
ICAgZW5jb2RpbmcgPSBOb25lCisKKyAgICBkZWYgcmVhZChzZWxmLCAqYXJncyk6CisgICAgICAg
IHJhaXNlIElPRXJyb3IoInJlYWRpbmcgZnJvbSBzdGRpbiB3aGlsZSBvdXRwdXQgaXMgY2FwdHVy
ZWQiKQorICAgIHJlYWRsaW5lID0gcmVhZAorICAgIHJlYWRsaW5lcyA9IHJlYWQKKyAgICBfX2l0
ZXJfXyA9IHJlYWQKKworICAgIGRlZiBmaWxlbm8oc2VsZik6CisgICAgICAgIHJhaXNlIFZhbHVl
RXJyb3IoInJlZGlyZWN0ZWQgU3RkaW4gaXMgcHNldWRvZmlsZSwgaGFzIG5vIGZpbGVubygpIikK
KworICAgIGRlZiBpc2F0dHkoc2VsZik6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVm
IGNsb3NlKHNlbGYpOgorICAgICAgICBwYXNzCisKKworZGVmIF9yZWFkbGluZV93b3JrYXJvdW5k
KCk6CisgICAgIiIiCisgICAgRW5zdXJlIHJlYWRsaW5lIGlzIGltcG9ydGVkIHNvIHRoYXQgaXQg
YXR0YWNoZXMgdG8gdGhlIGNvcnJlY3Qgc3RkaW8KKyAgICBoYW5kbGVzIG9uIFdpbmRvd3MuCisK
KyAgICBQZGIgdXNlcyByZWFkbGluZSBzdXBwb3J0IHdoZXJlIGF2YWlsYWJsZS0td2hlbiBub3Qg
cnVubmluZyBmcm9tIHRoZSBQeXRob24KKyAgICBwcm9tcHQsIHRoZSByZWFkbGluZSBtb2R1bGUg
aXMgbm90IGltcG9ydGVkIHVudGlsIHJ1bm5pbmcgdGhlIHBkYiBSRVBMLiAgSWYKKyAgICBydW5u
aW5nIHB5LnRlc3Qgd2l0aCB0aGUgLS1wZGIgb3B0aW9uIHRoaXMgbWVhbnMgdGhlIHJlYWRsaW5l
IG1vZHVsZSBpcyBub3QKKyAgICBpbXBvcnRlZCB1bnRpbCBhZnRlciBJL08gY2FwdHVyZSBoYXMg
YmVlbiBzdGFydGVkLgorCisgICAgVGhpcyBpcyBhIHByb2JsZW0gZm9yIHB5cmVhZGxpbmUsIHdo
aWNoIGlzIG9mdGVuIHVzZWQgdG8gaW1wbGVtZW50IHJlYWRsaW5lCisgICAgc3VwcG9ydCBvbiBX
aW5kb3dzLCBhcyBpdCBkb2VzIG5vdCBhdHRhY2ggdG8gdGhlIGNvcnJlY3QgaGFuZGxlcyBmb3Ig
c3Rkb3V0CisgICAgYW5kL29yIHN0ZGluIGlmIHRoZXkgaGF2ZSBiZWVuIHJlZGlyZWN0ZWQgYnkg
dGhlIEZEQ2FwdHVyZSBtZWNoYW5pc20uICBUaGlzCisgICAgd29ya2Fyb3VuZCBlbnN1cmVzIHRo
YXQgcmVhZGxpbmUgaXMgaW1wb3J0ZWQgYmVmb3JlIEkvTyBjYXB0dXJlIGlzIHNldHVwIHNvCisg
ICAgdGhhdCBpdCBjYW4gYXR0YWNoIHRvIHRoZSBhY3R1YWwgc3RkaW4vb3V0IGZvciB0aGUgY29u
c29sZS4KKworICAgIFNlZSBodHRwczovL2dpdGh1Yi5jb20vcHl0ZXN0LWRldi9weXRlc3QvcHVs
bC8xMjgxCisgICAgIiIiCisKKyAgICBpZiBub3Qgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dp
bjMyJyk6CisgICAgICAgIHJldHVybgorICAgIHRyeToKKyAgICAgICAgaW1wb3J0IHJlYWRsaW5l
ICAjIG5vcWEKKyAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgIHBhc3MKZGlmZiAtLWdp
dCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9jb25m
aWcucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3Qv
Y29uZmlnLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mYjdiMTc3
NGY2OAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29s
cy9weXRlc3QvX3B5dGVzdC9jb25maWcucHkKQEAgLTAsMCArMSwxMTkyIEBACisiIiIgY29tbWFu
ZCBsaW5lIG9wdGlvbnMsIGluaS1maWxlIGFuZCBjb25mdGVzdC5weSBwcm9jZXNzaW5nLiAiIiIK
K2ltcG9ydCBhcmdwYXJzZQoraW1wb3J0IHNobGV4CitpbXBvcnQgdHJhY2ViYWNrCitpbXBvcnQg
dHlwZXMKK2ltcG9ydCB3YXJuaW5ncworCitpbXBvcnQgcHkKKyMgRE9OJ3QgaW1wb3J0IHB5dGVz
dCBoZXJlIGJlY2F1c2UgaXQgY2F1c2VzIGltcG9ydCBjeWNsZSB0cm91YmxlcworaW1wb3J0IHN5
cywgb3MKK2ltcG9ydCBfcHl0ZXN0Ll9jb2RlCitpbXBvcnQgX3B5dGVzdC5ob29rc3BlYyAgIyB0
aGUgZXh0ZW5zaW9uIHBvaW50IGRlZmluaXRpb25zCitmcm9tIF9weXRlc3QuX3BsdWdneSBpbXBv
cnQgUGx1Z2luTWFuYWdlciwgSG9va2ltcGxNYXJrZXIsIEhvb2tzcGVjTWFya2VyCisKK2hvb2tp
bXBsID0gSG9va2ltcGxNYXJrZXIoInB5dGVzdCIpCitob29rc3BlYyA9IEhvb2tzcGVjTWFya2Vy
KCJweXRlc3QiKQorCisjIHB5dGVzdCBzdGFydHVwCisjCisKKworY2xhc3MgQ29uZnRlc3RJbXBv
cnRGYWlsdXJlKEV4Y2VwdGlvbik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgsIGV4Y2lu
Zm8pOgorICAgICAgICBFeGNlcHRpb24uX19pbml0X18oc2VsZiwgcGF0aCwgZXhjaW5mbykKKyAg
ICAgICAgc2VsZi5wYXRoID0gcGF0aAorICAgICAgICBzZWxmLmV4Y2luZm8gPSBleGNpbmZvCisK
KworZGVmIG1haW4oYXJncz1Ob25lLCBwbHVnaW5zPU5vbmUpOgorICAgICIiIiByZXR1cm4gZXhp
dCBjb2RlLCBhZnRlciBwZXJmb3JtaW5nIGFuIGluLXByb2Nlc3MgdGVzdCBydW4uCisKKyAgICA6
YXJnIGFyZ3M6IGxpc3Qgb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KKworICAgIDphcmcgcGx1
Z2luczogbGlzdCBvZiBwbHVnaW4gb2JqZWN0cyB0byBiZSBhdXRvLXJlZ2lzdGVyZWQgZHVyaW5n
CisgICAgICAgICAgICAgICAgICBpbml0aWFsaXphdGlvbi4KKyAgICAiIiIKKyAgICB0cnk6Cisg
ICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvbmZpZyA9IF9wcmVwYXJlY29uZmlnKGFyZ3MsIHBs
dWdpbnMpCisgICAgICAgIGV4Y2VwdCBDb25mdGVzdEltcG9ydEZhaWx1cmUgYXMgZToKKyAgICAg
ICAgICAgIHR3ID0gcHkuaW8uVGVybWluYWxXcml0ZXIoc3lzLnN0ZGVycikKKyAgICAgICAgICAg
IGZvciBsaW5lIGluIHRyYWNlYmFjay5mb3JtYXRfZXhjZXB0aW9uKCplLmV4Y2luZm8pOgorICAg
ICAgICAgICAgICAgIHR3LmxpbmUobGluZS5yc3RyaXAoKSwgcmVkPVRydWUpCisgICAgICAgICAg
ICB0dy5saW5lKCJFUlJPUjogY291bGQgbm90IGxvYWQgJXNcbiIgJSAoZS5wYXRoKSwgcmVkPVRy
dWUpCisgICAgICAgICAgICByZXR1cm4gNAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdHJ5
OgorICAgICAgICAgICAgICAgIGNvbmZpZy5wbHVnaW5tYW5hZ2VyLmNoZWNrX3BlbmRpbmcoKQor
ICAgICAgICAgICAgICAgIHJldHVybiBjb25maWcuaG9vay5weXRlc3RfY21kbGluZV9tYWluKGNv
bmZpZz1jb25maWcpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGNvbmZp
Zy5fZW5zdXJlX3VuY29uZmlndXJlKCkKKyAgICBleGNlcHQgVXNhZ2VFcnJvciBhcyBlOgorICAg
ICAgICBmb3IgbXNnIGluIGUuYXJnczoKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkVS
Uk9SOiAlc1xuIiAlKG1zZywpKQorICAgICAgICByZXR1cm4gNAorCitjbGFzcyBjbWRsaW5lOiAg
IyBjb21wYXRpYmlsaXR5IG5hbWVzcGFjZQorICAgIG1haW4gPSBzdGF0aWNtZXRob2QobWFpbikK
KworY2xhc3MgVXNhZ2VFcnJvcihFeGNlcHRpb24pOgorICAgICIiIiBlcnJvciBpbiBweXRlc3Qg
dXNhZ2Ugb3IgaW52b2NhdGlvbiIiIgorCitfcHJlaW5pdCA9IFtdCisKK2RlZmF1bHRfcGx1Z2lu
cyA9ICgKKyAgICAgIm1hcmsgbWFpbiB0ZXJtaW5hbCBydW5uZXIgcHl0aG9uIHBkYiB1bml0dGVz
dCBjYXB0dXJlIHNraXBwaW5nICIKKyAgICAgInRtcGRpciBtb25rZXlwYXRjaCByZWN3YXJuIHBh
c3RlYmluIGhlbHBjb25maWcgbm9zZSBhc3NlcnRpb24gZ2Vuc2NyaXB0ICIKKyAgICAgImp1bml0
eG1sIHJlc3VsdGxvZyBkb2N0ZXN0IGNhY2hlcHJvdmlkZXIiKS5zcGxpdCgpCisKK2J1aWx0aW5f
cGx1Z2lucyA9IHNldChkZWZhdWx0X3BsdWdpbnMpCitidWlsdGluX3BsdWdpbnMuYWRkKCJweXRl
c3RlciIpCisKKworZGVmIF9wcmVsb2FkcGx1Z2lucygpOgorICAgIGFzc2VydCBub3QgX3ByZWlu
aXQKKyAgICBfcHJlaW5pdC5hcHBlbmQoZ2V0X2NvbmZpZygpKQorCitkZWYgZ2V0X2NvbmZpZygp
OgorICAgIGlmIF9wcmVpbml0OgorICAgICAgICByZXR1cm4gX3ByZWluaXQucG9wKDApCisgICAg
IyBzdWJzZXF1ZW50IGNhbGxzIHRvIG1haW4gd2lsbCBjcmVhdGUgYSBmcmVzaCBpbnN0YW5jZQor
ICAgIHBsdWdpbm1hbmFnZXIgPSBQeXRlc3RQbHVnaW5NYW5hZ2VyKCkKKyAgICBjb25maWcgPSBD
b25maWcocGx1Z2lubWFuYWdlcikKKyAgICBmb3Igc3BlYyBpbiBkZWZhdWx0X3BsdWdpbnM6Cisg
ICAgICAgIHBsdWdpbm1hbmFnZXIuaW1wb3J0X3BsdWdpbihzcGVjKQorICAgIHJldHVybiBjb25m
aWcKKworZGVmIGdldF9wbHVnaW5fbWFuYWdlcigpOgorICAgICIiIgorICAgIE9idGFpbiBhIG5l
dyBpbnN0YW5jZSBvZiB0aGUKKyAgICA6cHk6Y2xhc3M6YF9weXRlc3QuY29uZmlnLlB5dGVzdFBs
dWdpbk1hbmFnZXJgLCB3aXRoIGRlZmF1bHQgcGx1Z2lucworICAgIGFscmVhZHkgbG9hZGVkLgor
CisgICAgVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCBieSBpbnRlZ3JhdGlvbiB3aXRoIG90aGVy
IHRvb2xzLCBsaWtlIGhvb2tpbmcKKyAgICBpbnRvIHB5dGVzdCB0byBydW4gdGVzdHMgaW50byBh
biBJREUuCisgICAgIiIiCisgICAgcmV0dXJuIGdldF9jb25maWcoKS5wbHVnaW5tYW5hZ2VyCisK
K2RlZiBfcHJlcGFyZWNvbmZpZyhhcmdzPU5vbmUsIHBsdWdpbnM9Tm9uZSk6CisgICAgaWYgYXJn
cyBpcyBOb25lOgorICAgICAgICBhcmdzID0gc3lzLmFyZ3ZbMTpdCisgICAgZWxpZiBpc2luc3Rh
bmNlKGFyZ3MsIHB5LnBhdGgubG9jYWwpOgorICAgICAgICBhcmdzID0gW3N0cihhcmdzKV0KKyAg
ICBlbGlmIG5vdCBpc2luc3RhbmNlKGFyZ3MsICh0dXBsZSwgbGlzdCkpOgorICAgICAgICBpZiBu
b3QgaXNpbnN0YW5jZShhcmdzLCBzdHIpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigi
bm90IGEgc3RyaW5nIG9yIGFyZ3VtZW50IGxpc3Q6ICVyIiAlIChhcmdzLCkpCisgICAgICAgIGFy
Z3MgPSBzaGxleC5zcGxpdChhcmdzKQorICAgIGNvbmZpZyA9IGdldF9jb25maWcoKQorICAgIHBs
dWdpbm1hbmFnZXIgPSBjb25maWcucGx1Z2lubWFuYWdlcgorICAgIHRyeToKKyAgICAgICAgaWYg
cGx1Z2luczoKKyAgICAgICAgICAgIGZvciBwbHVnaW4gaW4gcGx1Z2luczoKKyAgICAgICAgICAg
ICAgICBpZiBpc2luc3RhbmNlKHBsdWdpbiwgcHkuYnVpbHRpbi5fYmFzZXN0cmluZyk6CisgICAg
ICAgICAgICAgICAgICAgIHBsdWdpbm1hbmFnZXIuY29uc2lkZXJfcGx1Z2luYXJnKHBsdWdpbikK
KyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBwbHVnaW5tYW5hZ2Vy
LnJlZ2lzdGVyKHBsdWdpbikKKyAgICAgICAgcmV0dXJuIHBsdWdpbm1hbmFnZXIuaG9vay5weXRl
c3RfY21kbGluZV9wYXJzZSgKKyAgICAgICAgICAgICAgICBwbHVnaW5tYW5hZ2VyPXBsdWdpbm1h
bmFnZXIsIGFyZ3M9YXJncykKKyAgICBleGNlcHQgQmFzZUV4Y2VwdGlvbjoKKyAgICAgICAgY29u
ZmlnLl9lbnN1cmVfdW5jb25maWd1cmUoKQorICAgICAgICByYWlzZQorCisKK2NsYXNzIFB5dGVz
dFBsdWdpbk1hbmFnZXIoUGx1Z2luTWFuYWdlcik6CisgICAgIiIiCisgICAgT3ZlcndyaXRlcyA6
cHk6Y2xhc3M6YHBsdWdneS5QbHVnaW5NYW5hZ2VyYCB0byBhZGQgcHl0ZXN0LXNwZWNpZmljCisg
ICAgZnVuY3Rpb25hbGl0eToKKworICAgICogbG9hZGluZyBwbHVnaW5zIGZyb20gdGhlIGNvbW1h
bmQgbGluZSwgYGBQWVRFU1RfUExVR0lOYGAgZW52IHZhcmlhYmxlIGFuZAorICAgICAgYGBweXRl
c3RfcGx1Z2luc2BgIGdsb2JhbCB2YXJpYWJsZXMgZm91bmQgaW4gcGx1Z2lucyBiZWluZyBsb2Fk
ZWQ7CisgICAgKiBgYGNvbmZ0ZXN0LnB5YGAgbG9hZGluZyBkdXJpbmcgc3RhcnQtdXA7CisgICAg
IiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzdXBlcihQeXRlc3RQbHVnaW5N
YW5hZ2VyLCBzZWxmKS5fX2luaXRfXygicHl0ZXN0IiwgaW1wbHByZWZpeD0icHl0ZXN0XyIpCisg
ICAgICAgIHNlbGYuX2NvbmZ0ZXN0X3BsdWdpbnMgPSBzZXQoKQorCisgICAgICAgICMgc3RhdGUg
cmVsYXRlZCB0byBsb2NhbCBjb25mdGVzdCBwbHVnaW5zCisgICAgICAgIHNlbGYuX3BhdGgyY29u
Zm1vZHMgPSB7fQorICAgICAgICBzZWxmLl9jb25mdGVzdHBhdGgybW9kID0ge30KKyAgICAgICAg
c2VsZi5fY29uZmN1dGRpciA9IE5vbmUKKyAgICAgICAgc2VsZi5fbm9jb25mdGVzdCA9IEZhbHNl
CisKKyAgICAgICAgc2VsZi5hZGRfaG9va3NwZWNzKF9weXRlc3QuaG9va3NwZWMpCisgICAgICAg
IHNlbGYucmVnaXN0ZXIoc2VsZikKKyAgICAgICAgaWYgb3MuZW52aXJvbi5nZXQoJ1BZVEVTVF9E
RUJVRycpOgorICAgICAgICAgICAgZXJyID0gc3lzLnN0ZGVycgorICAgICAgICAgICAgZW5jb2Rp
bmcgPSBnZXRhdHRyKGVyciwgJ2VuY29kaW5nJywgJ3V0ZjgnKQorICAgICAgICAgICAgdHJ5Ogor
ICAgICAgICAgICAgICAgIGVyciA9IHB5LmlvLmR1cGZpbGUoZXJyLCBlbmNvZGluZz1lbmNvZGlu
ZykKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgcGFzcwor
ICAgICAgICAgICAgc2VsZi50cmFjZS5yb290LnNldHdyaXRlcihlcnIud3JpdGUpCisgICAgICAg
ICAgICBzZWxmLmVuYWJsZV90cmFjaW5nKCkKKworICAgIGRlZiBhZGRob29rcyhzZWxmLCBtb2R1
bGVfb3JfY2xhc3MpOgorICAgICAgICAiIiIKKyAgICAgICAgLi4gZGVwcmVjYXRlZDo6IDIuOAor
CisgICAgICAgIFVzZSA6cHk6bWV0aDpgcGx1Z2d5LlBsdWdpbk1hbmFnZXIuYWRkX2hvb2tzcGVj
c2AgaW5zdGVhZC4KKyAgICAgICAgIiIiCisgICAgICAgIHdhcm5pbmcgPSBkaWN0KGNvZGU9Ikky
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgZnNsb2NhdGlvbj1fcHl0ZXN0Ll9jb2RlLmdldGZz
bGluZW5vKHN5cy5fZ2V0ZnJhbWUoMSkpLAorICAgICAgICAgICAgICAgICAgICAgICBub2RlaWQ9
Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT0idXNlIHBsdWdpbm1hbmFnZXIu
YWRkX2hvb2tzcGVjcyBpbnN0ZWFkIG9mICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiZGVwcmVjYXRlZCBhZGRob29rcygpIG1ldGhvZC4iKQorICAgICAgICBzZWxmLl93YXJuKHdh
cm5pbmcpCisgICAgICAgIHJldHVybiBzZWxmLmFkZF9ob29rc3BlY3MobW9kdWxlX29yX2NsYXNz
KQorCisgICAgZGVmIHBhcnNlX2hvb2tpbXBsX29wdHMoc2VsZiwgcGx1Z2luLCBuYW1lKToKKyAg
ICAgICAgIyBweXRlc3QgaG9va3MgYXJlIGFsd2F5cyBwcmVmaXhlZCB3aXRoIHB5dGVzdF8KKyAg
ICAgICAgIyBzbyB3ZSBhdm9pZCBhY2Nlc3NpbmcgcG9zc2libHkgbm9uLXJlYWRhYmxlIGF0dHJp
YnV0ZXMKKyAgICAgICAgIyAoc2VlIGlzc3VlICMxMDczKQorICAgICAgICBpZiBub3QgbmFtZS5z
dGFydHN3aXRoKCJweXRlc3RfIik6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgIyBpZ25v
cmUgc29tZSBoaXN0b3JpYyBzcGVjaWFsIG5hbWVzIHdoaWNoIGNhbiBub3QgYmUgaG9va3MgYW55
d2F5CisgICAgICAgIGlmIG5hbWUgPT0gInB5dGVzdF9wbHVnaW5zIiBvciBuYW1lLnN0YXJ0c3dp
dGgoInB5dGVzdF9mdW5jYXJnX18iKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIG1l
dGhvZCA9IGdldGF0dHIocGx1Z2luLCBuYW1lKQorICAgICAgICBvcHRzID0gc3VwZXIoUHl0ZXN0
UGx1Z2luTWFuYWdlciwgc2VsZikucGFyc2VfaG9va2ltcGxfb3B0cyhwbHVnaW4sIG5hbWUpCisg
ICAgICAgIGlmIG9wdHMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBmb3IgbmFtZSBpbiAoInRy
eWZpcnN0IiwgInRyeWxhc3QiLCAib3B0aW9uYWxob29rIiwgImhvb2t3cmFwcGVyIik6CisgICAg
ICAgICAgICAgICAgb3B0cy5zZXRkZWZhdWx0KG5hbWUsIGhhc2F0dHIobWV0aG9kLCBuYW1lKSkK
KyAgICAgICAgcmV0dXJuIG9wdHMKKworICAgIGRlZiBwYXJzZV9ob29rc3BlY19vcHRzKHNlbGYs
IG1vZHVsZV9vcl9jbGFzcywgbmFtZSk6CisgICAgICAgIG9wdHMgPSBzdXBlcihQeXRlc3RQbHVn
aW5NYW5hZ2VyLCBzZWxmKS5wYXJzZV9ob29rc3BlY19vcHRzKAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlX29yX2NsYXNzLCBuYW1lKQorICAg
ICAgICBpZiBvcHRzIGlzIE5vbmU6CisgICAgICAgICAgICBtZXRob2QgPSBnZXRhdHRyKG1vZHVs
ZV9vcl9jbGFzcywgbmFtZSkKKyAgICAgICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgicHl0ZXN0
XyIpOgorICAgICAgICAgICAgICAgIG9wdHMgPSB7ImZpcnN0cmVzdWx0IjogaGFzYXR0cihtZXRo
b2QsICJmaXJzdHJlc3VsdCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgImhpc3RvcmljIjog
aGFzYXR0cihtZXRob2QsICJoaXN0b3JpYyIpfQorICAgICAgICByZXR1cm4gb3B0cworCisgICAg
ZGVmIF92ZXJpZnlfaG9vayhzZWxmLCBob29rLCBob29rbWV0aG9kKToKKyAgICAgICAgc3VwZXIo
UHl0ZXN0UGx1Z2luTWFuYWdlciwgc2VsZikuX3ZlcmlmeV9ob29rKGhvb2ssIGhvb2ttZXRob2Qp
CisgICAgICAgIGlmICJfX211bHRpY2FsbF9fIiBpbiBob29rbWV0aG9kLmFyZ25hbWVzOgorICAg
ICAgICAgICAgZnNsaW5lbm8gPSBfcHl0ZXN0Ll9jb2RlLmdldGZzbGluZW5vKGhvb2ttZXRob2Qu
ZnVuY3Rpb24pCisgICAgICAgICAgICB3YXJuaW5nID0gZGljdChjb2RlPSJJMSIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmc2xvY2F0aW9uPWZzbGluZW5vLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbm9kZWlkPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNz
YWdlPSIlciBob29rIHVzZXMgZGVwcmVjYXRlZCBfX211bHRpY2FsbF9fICIKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgImFyZ3VtZW50IiAlIChob29rLm5hbWUpKQorICAgICAg
ICAgICAgc2VsZi5fd2Fybih3YXJuaW5nKQorCisgICAgZGVmIHJlZ2lzdGVyKHNlbGYsIHBsdWdp
biwgbmFtZT1Ob25lKToKKyAgICAgICAgcmV0ID0gc3VwZXIoUHl0ZXN0UGx1Z2luTWFuYWdlciwg
c2VsZikucmVnaXN0ZXIocGx1Z2luLCBuYW1lKQorICAgICAgICBpZiByZXQ6CisgICAgICAgICAg
ICBzZWxmLmhvb2sucHl0ZXN0X3BsdWdpbl9yZWdpc3RlcmVkLmNhbGxfaGlzdG9yaWMoCisgICAg
ICAgICAgICAgICAgICAgICAga3dhcmdzPWRpY3QocGx1Z2luPXBsdWdpbiwgbWFuYWdlcj1zZWxm
KSkKKyAgICAgICAgcmV0dXJuIHJldAorCisgICAgZGVmIGdldHBsdWdpbihzZWxmLCBuYW1lKToK
KyAgICAgICAgIyBzdXBwb3J0IGRlcHJlY2F0ZWQgbmFtaW5nIGJlY2F1c2UgcGx1Z2lucyAoeGRp
c3QgZS5nLikgdXNlIGl0CisgICAgICAgIHJldHVybiBzZWxmLmdldF9wbHVnaW4obmFtZSkKKwor
ICAgIGRlZiBoYXNwbHVnaW4oc2VsZiwgbmFtZSk6CisgICAgICAgICIiIlJldHVybiBUcnVlIGlm
IHRoZSBwbHVnaW4gd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpcyByZWdpc3RlcmVkLiIiIgorICAgICAg
ICByZXR1cm4gYm9vbChzZWxmLmdldF9wbHVnaW4obmFtZSkpCisKKyAgICBkZWYgcHl0ZXN0X2Nv
bmZpZ3VyZShzZWxmLCBjb25maWcpOgorICAgICAgICAjIFhYWCBub3cgdGhhdCB0aGUgcGx1Z2lu
bWFuYWdlciBleHBvc2VzIGhvb2tpbXBsKHRyeWZpcnN0Li4uKQorICAgICAgICAjIHdlIHNob3Vs
ZCByZW1vdmUgdHJ5Zmlyc3QvdHJ5bGFzdCBhcyBtYXJrZXJzCisgICAgICAgIGNvbmZpZy5hZGRp
bml2YWx1ZV9saW5lKCJtYXJrZXJzIiwKKyAgICAgICAgICAgICJ0cnlmaXJzdDogbWFyayBhIGhv
b2sgaW1wbGVtZW50YXRpb24gZnVuY3Rpb24gc3VjaCB0aGF0IHRoZSAiCisgICAgICAgICAgICAi
cGx1Z2luIG1hY2hpbmVyeSB3aWxsIHRyeSB0byBjYWxsIGl0IGZpcnN0L2FzIGVhcmx5IGFzIHBv
c3NpYmxlLiIpCisgICAgICAgIGNvbmZpZy5hZGRpbml2YWx1ZV9saW5lKCJtYXJrZXJzIiwKKyAg
ICAgICAgICAgICJ0cnlsYXN0OiBtYXJrIGEgaG9vayBpbXBsZW1lbnRhdGlvbiBmdW5jdGlvbiBz
dWNoIHRoYXQgdGhlICIKKyAgICAgICAgICAgICJwbHVnaW4gbWFjaGluZXJ5IHdpbGwgdHJ5IHRv
IGNhbGwgaXQgbGFzdC9hcyBsYXRlIGFzIHBvc3NpYmxlLiIpCisKKyAgICBkZWYgX3dhcm4oc2Vs
ZiwgbWVzc2FnZSk6CisgICAgICAgIGt3YXJncyA9IG1lc3NhZ2UgaWYgaXNpbnN0YW5jZShtZXNz
YWdlLCBkaWN0KSBlbHNlIHsKKyAgICAgICAgICAgICdjb2RlJzogJ0kxJywKKyAgICAgICAgICAg
ICdtZXNzYWdlJzogbWVzc2FnZSwKKyAgICAgICAgICAgICdmc2xvY2F0aW9uJzogTm9uZSwKKyAg
ICAgICAgICAgICdub2RlaWQnOiBOb25lLAorICAgICAgICB9CisgICAgICAgIHNlbGYuaG9vay5w
eXRlc3RfbG9nd2FybmluZy5jYWxsX2hpc3RvcmljKGt3YXJncz1rd2FyZ3MpCisKKyAgICAjCisg
ICAgIyBpbnRlcm5hbCBBUEkgZm9yIGxvY2FsIGNvbmZ0ZXN0IHBsdWdpbiBoYW5kbGluZworICAg
ICMKKyAgICBkZWYgX3NldF9pbml0aWFsX2NvbmZ0ZXN0cyhzZWxmLCBuYW1lc3BhY2UpOgorICAg
ICAgICAiIiIgbG9hZCBpbml0aWFsIGNvbmZ0ZXN0IGZpbGVzIGdpdmVuIGEgcHJlcGFyc2VkICJu
YW1lc3BhY2UiLgorICAgICAgICAgICAgQXMgY29uZnRlc3QgZmlsZXMgbWF5IGFkZCB0aGVpciBv
d24gY29tbWFuZCBsaW5lIG9wdGlvbnMKKyAgICAgICAgICAgIHdoaWNoIGhhdmUgYXJndW1lbnRz
ICgnLS1teS1vcHQgc29tZXBhdGgnKSB3ZSBtaWdodCBnZXQgc29tZQorICAgICAgICAgICAgZmFs
c2UgcG9zaXRpdmVzLiAgQWxsIGJ1aWx0aW4gYW5kIDNyZCBwYXJ0eSBwbHVnaW5zIHdpbGwgaGF2
ZQorICAgICAgICAgICAgYmVlbiBsb2FkZWQsIGhvd2V2ZXIsIHNvIGNvbW1vbiBvcHRpb25zIHdp
bGwgbm90IGNvbmZ1c2Ugb3VyIGxvZ2ljCisgICAgICAgICAgICBoZXJlLgorICAgICAgICAiIiIK
KyAgICAgICAgY3VycmVudCA9IHB5LnBhdGgubG9jYWwoKQorICAgICAgICBzZWxmLl9jb25mY3V0
ZGlyID0gY3VycmVudC5qb2luKG5hbWVzcGFjZS5jb25mY3V0ZGlyLCBhYnM9VHJ1ZSkgXAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBuYW1lc3BhY2UuY29uZmN1dGRpciBlbHNl
IE5vbmUKKyAgICAgICAgc2VsZi5fbm9jb25mdGVzdCA9IG5hbWVzcGFjZS5ub2NvbmZ0ZXN0Cisg
ICAgICAgIHRlc3RwYXRocyA9IG5hbWVzcGFjZS5maWxlX29yX2RpcgorICAgICAgICBmb3VuZGFu
Y2hvciA9IEZhbHNlCisgICAgICAgIGZvciBwYXRoIGluIHRlc3RwYXRoczoKKyAgICAgICAgICAg
IHBhdGggPSBzdHIocGF0aCkKKyAgICAgICAgICAgICMgcmVtb3ZlIG5vZGUtaWQgc3ludGF4Cisg
ICAgICAgICAgICBpID0gcGF0aC5maW5kKCI6OiIpCisgICAgICAgICAgICBpZiBpICE9IC0xOgor
ICAgICAgICAgICAgICAgIHBhdGggPSBwYXRoWzppXQorICAgICAgICAgICAgYW5jaG9yID0gY3Vy
cmVudC5qb2luKHBhdGgsIGFicz0xKQorICAgICAgICAgICAgaWYgZXhpc3RzKGFuY2hvcik6ICMg
d2UgZm91bmQgc29tZSBmaWxlIG9iamVjdAorICAgICAgICAgICAgICAgIHNlbGYuX3RyeV9sb2Fk
X2NvbmZ0ZXN0KGFuY2hvcikKKyAgICAgICAgICAgICAgICBmb3VuZGFuY2hvciA9IFRydWUKKyAg
ICAgICAgaWYgbm90IGZvdW5kYW5jaG9yOgorICAgICAgICAgICAgc2VsZi5fdHJ5X2xvYWRfY29u
ZnRlc3QoY3VycmVudCkKKworICAgIGRlZiBfdHJ5X2xvYWRfY29uZnRlc3Qoc2VsZiwgYW5jaG9y
KToKKyAgICAgICAgc2VsZi5fZ2V0Y29uZnRlc3Rtb2R1bGVzKGFuY2hvcikKKyAgICAgICAgIyBs
ZXQncyBhbHNvIGNvbnNpZGVyIHRlc3QqIHN1YmRpcnMKKyAgICAgICAgaWYgYW5jaG9yLmNoZWNr
KGRpcj0xKToKKyAgICAgICAgICAgIGZvciB4IGluIGFuY2hvci5saXN0ZGlyKCJ0ZXN0KiIpOgor
ICAgICAgICAgICAgICAgIGlmIHguY2hlY2soZGlyPTEpOgorICAgICAgICAgICAgICAgICAgICBz
ZWxmLl9nZXRjb25mdGVzdG1vZHVsZXMoeCkKKworICAgIGRlZiBfZ2V0Y29uZnRlc3Rtb2R1bGVz
KHNlbGYsIHBhdGgpOgorICAgICAgICBpZiBzZWxmLl9ub2NvbmZ0ZXN0OgorICAgICAgICAgICAg
cmV0dXJuIFtdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9wYXRoMmNv
bmZtb2RzW3BhdGhdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIGlmIHBh
dGguaXNmaWxlKCk6CisgICAgICAgICAgICAgICAgY2xpc3QgPSBzZWxmLl9nZXRjb25mdGVzdG1v
ZHVsZXMocGF0aC5kaXJwYXRoKCkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg
ICMgWFhYIHRoZXNlIGRheXMgd2UgbWF5IHJhdGhlciB3YW50IHRvIHVzZSBjb25maWcucm9vdGRp
cgorICAgICAgICAgICAgICAgICMgYW5kIGFsbG93IHVzZXJzIHRvIG9wdCBpbnRvIGxvb2tpbmcg
aW50byB0aGUgcm9vdGRpciBwYXJlbnQKKyAgICAgICAgICAgICAgICAjIGRpcmVjdG9yaWVzIGlu
c3RlYWQgb2YgcmVxdWlyaW5nIHRvIHNwZWNpZnkgY29uZmN1dGRpcgorICAgICAgICAgICAgICAg
IGNsaXN0ID0gW10KKyAgICAgICAgICAgICAgICBmb3IgcGFyZW50IGluIHBhdGgucGFydHMoKToK
KyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fY29uZmN1dGRpciBhbmQgc2VsZi5fY29uZmN1
dGRpci5yZWx0byhwYXJlbnQpOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAg
ICAgICAgICAgICAgICAgICAgY29uZnRlc3RwYXRoID0gcGFyZW50LmpvaW4oImNvbmZ0ZXN0LnB5
IikKKyAgICAgICAgICAgICAgICAgICAgaWYgY29uZnRlc3RwYXRoLmlzZmlsZSgpOgorICAgICAg
ICAgICAgICAgICAgICAgICAgbW9kID0gc2VsZi5faW1wb3J0Y29uZnRlc3QoY29uZnRlc3RwYXRo
KQorICAgICAgICAgICAgICAgICAgICAgICAgY2xpc3QuYXBwZW5kKG1vZCkKKworICAgICAgICAg
ICAgc2VsZi5fcGF0aDJjb25mbW9kc1twYXRoXSA9IGNsaXN0CisgICAgICAgICAgICByZXR1cm4g
Y2xpc3QKKworICAgIGRlZiBfcmdldF93aXRoX2NvbmZtb2Qoc2VsZiwgbmFtZSwgcGF0aCk6Cisg
ICAgICAgIG1vZHVsZXMgPSBzZWxmLl9nZXRjb25mdGVzdG1vZHVsZXMocGF0aCkKKyAgICAgICAg
Zm9yIG1vZCBpbiByZXZlcnNlZChtb2R1bGVzKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbW9kLCBnZXRhdHRyKG1vZCwgbmFtZSkKKyAgICAgICAgICAgIGV4Y2Vw
dCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICByYWlz
ZSBLZXlFcnJvcihuYW1lKQorCisgICAgZGVmIF9pbXBvcnRjb25mdGVzdChzZWxmLCBjb25mdGVz
dHBhdGgpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fY29uZnRlc3Rw
YXRoMm1vZFtjb25mdGVzdHBhdGhdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAg
ICAgIHBrZ3BhdGggPSBjb25mdGVzdHBhdGgucHlwa2dwYXRoKCkKKyAgICAgICAgICAgIGlmIHBr
Z3BhdGggaXMgTm9uZToKKyAgICAgICAgICAgICAgICBfZW5zdXJlX3JlbW92ZWRfc3lzbW9kdWxl
KGNvbmZ0ZXN0cGF0aC5wdXJlYmFzZW5hbWUpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAg
ICAgICAgbW9kID0gY29uZnRlc3RwYXRoLnB5aW1wb3J0KCkKKyAgICAgICAgICAgIGV4Y2VwdCBF
eGNlcHRpb246CisgICAgICAgICAgICAgICAgcmFpc2UgQ29uZnRlc3RJbXBvcnRGYWlsdXJlKGNv
bmZ0ZXN0cGF0aCwgc3lzLmV4Y19pbmZvKCkpCisKKyAgICAgICAgICAgIHNlbGYuX2NvbmZ0ZXN0
X3BsdWdpbnMuYWRkKG1vZCkKKyAgICAgICAgICAgIHNlbGYuX2NvbmZ0ZXN0cGF0aDJtb2RbY29u
ZnRlc3RwYXRoXSA9IG1vZAorICAgICAgICAgICAgZGlycGF0aCA9IGNvbmZ0ZXN0cGF0aC5kaXJw
YXRoKCkKKyAgICAgICAgICAgIGlmIGRpcnBhdGggaW4gc2VsZi5fcGF0aDJjb25mbW9kczoKKyAg
ICAgICAgICAgICAgICBmb3IgcGF0aCwgbW9kcyBpbiBzZWxmLl9wYXRoMmNvbmZtb2RzLml0ZW1z
KCk6CisgICAgICAgICAgICAgICAgICAgIGlmIHBhdGggYW5kIHBhdGgucmVsdG8oZGlycGF0aCkg
b3IgcGF0aCA9PSBkaXJwYXRoOgorICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IG1vZCBu
b3QgaW4gbW9kcworICAgICAgICAgICAgICAgICAgICAgICAgbW9kcy5hcHBlbmQobW9kKQorICAg
ICAgICAgICAgc2VsZi50cmFjZSgibG9hZGVkIGNvbmZ0ZXN0bW9kdWxlICVyIiAlKG1vZCkpCisg
ICAgICAgICAgICBzZWxmLmNvbnNpZGVyX2NvbmZ0ZXN0KG1vZCkKKyAgICAgICAgICAgIHJldHVy
biBtb2QKKworICAgICMKKyAgICAjIEFQSSBmb3IgYm9vdHN0cmFwcGluZyBwbHVnaW4gbG9hZGlu
ZworICAgICMKKyAgICAjCisKKyAgICBkZWYgY29uc2lkZXJfcHJlcGFyc2Uoc2VsZiwgYXJncyk6
CisgICAgICAgIGZvciBvcHQxLG9wdDIgaW4gemlwKGFyZ3MsIGFyZ3NbMTpdKToKKyAgICAgICAg
ICAgIGlmIG9wdDEgPT0gIi1wIjoKKyAgICAgICAgICAgICAgICBzZWxmLmNvbnNpZGVyX3BsdWdp
bmFyZyhvcHQyKQorCisgICAgZGVmIGNvbnNpZGVyX3BsdWdpbmFyZyhzZWxmLCBhcmcpOgorICAg
ICAgICBpZiBhcmcuc3RhcnRzd2l0aCgibm86Iik6CisgICAgICAgICAgICBuYW1lID0gYXJnWzM6
XQorICAgICAgICAgICAgc2VsZi5zZXRfYmxvY2tlZChuYW1lKQorICAgICAgICAgICAgaWYgbm90
IG5hbWUuc3RhcnRzd2l0aCgicHl0ZXN0XyIpOgorICAgICAgICAgICAgICAgIHNlbGYuc2V0X2Js
b2NrZWQoInB5dGVzdF8iICsgbmFtZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYu
aW1wb3J0X3BsdWdpbihhcmcpCisKKyAgICBkZWYgY29uc2lkZXJfY29uZnRlc3Qoc2VsZiwgY29u
ZnRlc3Rtb2R1bGUpOgorICAgICAgICBpZiBzZWxmLnJlZ2lzdGVyKGNvbmZ0ZXN0bW9kdWxlLCBu
YW1lPWNvbmZ0ZXN0bW9kdWxlLl9fZmlsZV9fKToKKyAgICAgICAgICAgIHNlbGYuY29uc2lkZXJf
bW9kdWxlKGNvbmZ0ZXN0bW9kdWxlKQorCisgICAgZGVmIGNvbnNpZGVyX2VudihzZWxmKToKKyAg
ICAgICAgc2VsZi5faW1wb3J0X3BsdWdpbl9zcGVjcyhvcy5lbnZpcm9uLmdldCgiUFlURVNUX1BM
VUdJTlMiKSkKKworICAgIGRlZiBjb25zaWRlcl9tb2R1bGUoc2VsZiwgbW9kKToKKyAgICAgICAg
c2VsZi5faW1wb3J0X3BsdWdpbl9zcGVjcyhnZXRhdHRyKG1vZCwgInB5dGVzdF9wbHVnaW5zIiwg
Tm9uZSkpCisKKyAgICBkZWYgX2ltcG9ydF9wbHVnaW5fc3BlY3Moc2VsZiwgc3BlYyk6CisgICAg
ICAgIGlmIHNwZWM6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHNwZWMsIHN0cik6CisgICAg
ICAgICAgICAgICAgc3BlYyA9IHNwZWMuc3BsaXQoIiwiKQorICAgICAgICAgICAgZm9yIGltcG9y
dF9zcGVjIGluIHNwZWM6CisgICAgICAgICAgICAgICAgc2VsZi5pbXBvcnRfcGx1Z2luKGltcG9y
dF9zcGVjKQorCisgICAgZGVmIGltcG9ydF9wbHVnaW4oc2VsZiwgbW9kbmFtZSk6CisgICAgICAg
ICMgbW9zdCBvZnRlbiBtb2RuYW1lIHJlZmVycyB0byBidWlsdGluIG1vZHVsZXMsIGUuZy4gInB5
dGVzdGVyIiwKKyAgICAgICAgIyAidGVybWluYWwiIG9yICJjYXB0dXJlIi4gIFRob3NlIHBsdWdp
bnMgYXJlIHJlZ2lzdGVyZWQgdW5kZXIgdGhlaXIKKyAgICAgICAgIyBiYXNlbmFtZSBmb3IgaGlz
dG9yaWMgcHVycG9zZXMgYnV0IG11c3QgYmUgaW1wb3J0ZWQgd2l0aCB0aGUKKyAgICAgICAgIyBf
cHl0ZXN0IHByZWZpeC4KKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UobW9kbmFtZSwgc3RyKQor
ICAgICAgICBpZiBzZWxmLmdldF9wbHVnaW4obW9kbmFtZSkgaXMgbm90IE5vbmU6CisgICAgICAg
ICAgICByZXR1cm4KKyAgICAgICAgaWYgbW9kbmFtZSBpbiBidWlsdGluX3BsdWdpbnM6CisgICAg
ICAgICAgICBpbXBvcnRzcGVjID0gIl9weXRlc3QuIiArIG1vZG5hbWUKKyAgICAgICAgZWxzZToK
KyAgICAgICAgICAgIGltcG9ydHNwZWMgPSBtb2RuYW1lCisgICAgICAgIHRyeToKKyAgICAgICAg
ICAgIF9faW1wb3J0X18oaW1wb3J0c3BlYykKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yIGFz
IGU6CisgICAgICAgICAgICBuZXdfZXhjID0gSW1wb3J0RXJyb3IoJ0Vycm9yIGltcG9ydGluZyBw
bHVnaW4gIiVzIjogJXMnICUgKG1vZG5hbWUsIGUpKQorICAgICAgICAgICAgIyBjb3B5IG92ZXIg
bmFtZSBhbmQgcGF0aCBhdHRyaWJ1dGVzCisgICAgICAgICAgICBmb3IgYXR0ciBpbiAoJ25hbWUn
LCAncGF0aCcpOgorICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIoZSwgYXR0cik6CisgICAgICAg
ICAgICAgICAgICAgIHNldGF0dHIobmV3X2V4YywgYXR0ciwgZ2V0YXR0cihlLCBhdHRyKSkKKyAg
ICAgICAgICAgIHJhaXNlIG5ld19leGMKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgor
ICAgICAgICAgICAgaW1wb3J0IHB5dGVzdAorICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIocHl0
ZXN0LCAnc2tpcCcpIG9yIG5vdCBpc2luc3RhbmNlKGUsIHB5dGVzdC5za2lwLkV4Y2VwdGlvbik6
CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIHNlbGYuX3dhcm4oInNraXBwZWQg
cGx1Z2luICVyOiAlcyIgJSgobW9kbmFtZSwgZS5tc2cpKSkKKyAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgIG1vZCA9IHN5cy5tb2R1bGVzW2ltcG9ydHNwZWNdCisgICAgICAgICAgICBzZWxmLnJl
Z2lzdGVyKG1vZCwgbW9kbmFtZSkKKyAgICAgICAgICAgIHNlbGYuY29uc2lkZXJfbW9kdWxlKG1v
ZCkKKworCitjbGFzcyBQYXJzZXI6CisgICAgIiIiIFBhcnNlciBmb3IgY29tbWFuZCBsaW5lIGFy
Z3VtZW50cyBhbmQgaW5pLWZpbGUgdmFsdWVzLgorCisgICAgOml2YXIgZXh0cmFfaW5mbzogZGlj
dCBvZiBnZW5lcmljIHBhcmFtIC0+IHZhbHVlIHRvIGRpc3BsYXkgaW4gY2FzZQorICAgICAgICB0
aGVyZSdzIGFuIGVycm9yIHByb2Nlc3NpbmcgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCisg
ICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdXNhZ2U9Tm9uZSwgcHJvY2Vzc29wdD1O
b25lKToKKyAgICAgICAgc2VsZi5fYW5vbnltb3VzID0gT3B0aW9uR3JvdXAoImN1c3RvbSBvcHRp
b25zIiwgcGFyc2VyPXNlbGYpCisgICAgICAgIHNlbGYuX2dyb3VwcyA9IFtdCisgICAgICAgIHNl
bGYuX3Byb2Nlc3NvcHQgPSBwcm9jZXNzb3B0CisgICAgICAgIHNlbGYuX3VzYWdlID0gdXNhZ2UK
KyAgICAgICAgc2VsZi5faW5pZGljdCA9IHt9CisgICAgICAgIHNlbGYuX2luaW5hbWVzID0gW10K
KyAgICAgICAgc2VsZi5leHRyYV9pbmZvID0ge30KKworICAgIGRlZiBwcm9jZXNzb3B0aW9uKHNl
bGYsIG9wdGlvbik6CisgICAgICAgIGlmIHNlbGYuX3Byb2Nlc3NvcHQ6CisgICAgICAgICAgICBp
ZiBvcHRpb24uZGVzdDoKKyAgICAgICAgICAgICAgICBzZWxmLl9wcm9jZXNzb3B0KG9wdGlvbikK
KworICAgIGRlZiBnZXRncm91cChzZWxmLCBuYW1lLCBkZXNjcmlwdGlvbj0iIiwgYWZ0ZXI9Tm9u
ZSk6CisgICAgICAgICIiIiBnZXQgKG9yIGNyZWF0ZSkgYSBuYW1lZCBvcHRpb24gR3JvdXAuCisK
KyAgICAgICAgOm5hbWU6IG5hbWUgb2YgdGhlIG9wdGlvbiBncm91cC4KKyAgICAgICAgOmRlc2Ny
aXB0aW9uOiBsb25nIGRlc2NyaXB0aW9uIGZvciAtLWhlbHAgb3V0cHV0LgorICAgICAgICA6YWZ0
ZXI6IG5hbWUgb2Ygb3RoZXIgZ3JvdXAsIHVzZWQgZm9yIG9yZGVyaW5nIC0taGVscCBvdXRwdXQu
CisKKyAgICAgICAgVGhlIHJldHVybmVkIGdyb3VwIG9iamVjdCBoYXMgYW4gYGBhZGRvcHRpb25g
YCBtZXRob2Qgd2l0aCB0aGUgc2FtZQorICAgICAgICBzaWduYXR1cmUgYXMgOnB5OmZ1bmM6YHBh
cnNlci5hZGRvcHRpb24KKyAgICAgICAgPF9weXRlc3QuY29uZmlnLlBhcnNlci5hZGRvcHRpb24+
YCBidXQgd2lsbCBiZSBzaG93biBpbiB0aGUKKyAgICAgICAgcmVzcGVjdGl2ZSBncm91cCBpbiB0
aGUgb3V0cHV0IG9mIGBgcHl0ZXN0LiAtLWhlbHBgYC4KKyAgICAgICAgIiIiCisgICAgICAgIGZv
ciBncm91cCBpbiBzZWxmLl9ncm91cHM6CisgICAgICAgICAgICBpZiBncm91cC5uYW1lID09IG5h
bWU6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdyb3VwCisgICAgICAgIGdyb3VwID0gT3B0aW9u
R3JvdXAobmFtZSwgZGVzY3JpcHRpb24sIHBhcnNlcj1zZWxmKQorICAgICAgICBpID0gMAorICAg
ICAgICBmb3IgaSwgZ3JwIGluIGVudW1lcmF0ZShzZWxmLl9ncm91cHMpOgorICAgICAgICAgICAg
aWYgZ3JwLm5hbWUgPT0gYWZ0ZXI6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgc2Vs
Zi5fZ3JvdXBzLmluc2VydChpKzEsIGdyb3VwKQorICAgICAgICByZXR1cm4gZ3JvdXAKKworICAg
IGRlZiBhZGRvcHRpb24oc2VsZiwgKm9wdHMsICoqYXR0cnMpOgorICAgICAgICAiIiIgcmVnaXN0
ZXIgYSBjb21tYW5kIGxpbmUgb3B0aW9uLgorCisgICAgICAgIDpvcHRzOiBvcHRpb24gbmFtZXMs
IGNhbiBiZSBzaG9ydCBvciBsb25nIG9wdGlvbnMuCisgICAgICAgIDphdHRyczogc2FtZSBhdHRy
aWJ1dGVzIHdoaWNoIHRoZSBgYGFkZF9vcHRpb24oKWBgIGZ1bmN0aW9uIG9mIHRoZQorICAgICAg
ICAgICBgYXJncGFyc2UgbGlicmFyeQorICAgICAgICAgICA8aHR0cDovL2RvY3MucHl0aG9uLm9y
Zy8yL2xpYnJhcnkvYXJncGFyc2UuaHRtbD5gXworICAgICAgICAgICBhY2NlcHRzLgorCisgICAg
ICAgIEFmdGVyIGNvbW1hbmQgbGluZSBwYXJzaW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSBvbiB0
aGUgcHl0ZXN0IGNvbmZpZworICAgICAgICBvYmplY3QgdmlhIGBgY29uZmlnLm9wdGlvbi5OQU1F
YGAgd2hlcmUgYGBOQU1FYGAgaXMgdXN1YWxseSBzZXQKKyAgICAgICAgYnkgcGFzc2luZyBhIGBg
ZGVzdGBgIGF0dHJpYnV0ZSwgZm9yIGV4YW1wbGUKKyAgICAgICAgYGBhZGRvcHRpb24oIi0tbG9u
ZyIsIGRlc3Q9Ik5BTUUiLCAuLi4pYGAuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9hbm9u
eW1vdXMuYWRkb3B0aW9uKCpvcHRzLCAqKmF0dHJzKQorCisgICAgZGVmIHBhcnNlKHNlbGYsIGFy
Z3MsIG5hbWVzcGFjZT1Ob25lKToKKyAgICAgICAgZnJvbSBfcHl0ZXN0Ll9hcmdjb21wbGV0ZSBp
bXBvcnQgdHJ5X2FyZ2NvbXBsZXRlCisgICAgICAgIHNlbGYub3B0cGFyc2VyID0gc2VsZi5fZ2V0
cGFyc2VyKCkKKyAgICAgICAgdHJ5X2FyZ2NvbXBsZXRlKHNlbGYub3B0cGFyc2VyKQorICAgICAg
ICByZXR1cm4gc2VsZi5vcHRwYXJzZXIucGFyc2VfYXJncyhbc3RyKHgpIGZvciB4IGluIGFyZ3Nd
LCBuYW1lc3BhY2U9bmFtZXNwYWNlKQorCisgICAgZGVmIF9nZXRwYXJzZXIoc2VsZik6CisgICAg
ICAgIGZyb20gX3B5dGVzdC5fYXJnY29tcGxldGUgaW1wb3J0IGZpbGVzY29tcGxldGVyCisgICAg
ICAgIG9wdHBhcnNlciA9IE15T3B0aW9uUGFyc2VyKHNlbGYsIHNlbGYuZXh0cmFfaW5mbykKKyAg
ICAgICAgZ3JvdXBzID0gc2VsZi5fZ3JvdXBzICsgW3NlbGYuX2Fub255bW91c10KKyAgICAgICAg
Zm9yIGdyb3VwIGluIGdyb3VwczoKKyAgICAgICAgICAgIGlmIGdyb3VwLm9wdGlvbnM6CisgICAg
ICAgICAgICAgICAgZGVzYyA9IGdyb3VwLmRlc2NyaXB0aW9uIG9yIGdyb3VwLm5hbWUKKyAgICAg
ICAgICAgICAgICBhcmdncm91cCA9IG9wdHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoZGVzYykK
KyAgICAgICAgICAgICAgICBmb3Igb3B0aW9uIGluIGdyb3VwLm9wdGlvbnM6CisgICAgICAgICAg
ICAgICAgICAgIG4gPSBvcHRpb24ubmFtZXMoKQorICAgICAgICAgICAgICAgICAgICBhID0gb3B0
aW9uLmF0dHJzKCkKKyAgICAgICAgICAgICAgICAgICAgYXJnZ3JvdXAuYWRkX2FyZ3VtZW50KCpu
LCAqKmEpCisgICAgICAgICMgYmFzaCBsaWtlIGF1dG9jb21wbGV0aW9uIGZvciBkaXJzIChhcHBl
bmRpbmcgJy8nKQorICAgICAgICBvcHRwYXJzZXIuYWRkX2FyZ3VtZW50KEZJTEVfT1JfRElSLCBu
YXJncz0nKicpLmNvbXBsZXRlcj1maWxlc2NvbXBsZXRlcgorICAgICAgICByZXR1cm4gb3B0cGFy
c2VyCisKKyAgICBkZWYgcGFyc2Vfc2V0b3B0aW9uKHNlbGYsIGFyZ3MsIG9wdGlvbiwgbmFtZXNw
YWNlPU5vbmUpOgorICAgICAgICBwYXJzZWRvcHRpb24gPSBzZWxmLnBhcnNlKGFyZ3MsIG5hbWVz
cGFjZT1uYW1lc3BhY2UpCisgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBwYXJzZWRvcHRpb24u
X19kaWN0X18uaXRlbXMoKToKKyAgICAgICAgICAgIHNldGF0dHIob3B0aW9uLCBuYW1lLCB2YWx1
ZSkKKyAgICAgICAgcmV0dXJuIGdldGF0dHIocGFyc2Vkb3B0aW9uLCBGSUxFX09SX0RJUikKKwor
ICAgIGRlZiBwYXJzZV9rbm93bl9hcmdzKHNlbGYsIGFyZ3MsIG5hbWVzcGFjZT1Ob25lKToKKyAg
ICAgICAgIiIicGFyc2VzIGFuZCByZXR1cm5zIGEgbmFtZXNwYWNlIG9iamVjdCB3aXRoIGtub3du
IGFyZ3VtZW50cyBhdCB0aGlzCisgICAgICAgIHBvaW50LgorICAgICAgICAiIiIKKyAgICAgICAg
cmV0dXJuIHNlbGYucGFyc2Vfa25vd25fYW5kX3Vua25vd25fYXJncyhhcmdzLCBuYW1lc3BhY2U9
bmFtZXNwYWNlKVswXQorCisgICAgZGVmIHBhcnNlX2tub3duX2FuZF91bmtub3duX2FyZ3Moc2Vs
ZiwgYXJncywgbmFtZXNwYWNlPU5vbmUpOgorICAgICAgICAiIiJwYXJzZXMgYW5kIHJldHVybnMg
YSBuYW1lc3BhY2Ugb2JqZWN0IHdpdGgga25vd24gYXJndW1lbnRzLCBhbmQKKyAgICAgICAgdGhl
IHJlbWFpbmluZyBhcmd1bWVudHMgdW5rbm93biBhdCB0aGlzIHBvaW50LgorICAgICAgICAiIiIK
KyAgICAgICAgb3B0cGFyc2VyID0gc2VsZi5fZ2V0cGFyc2VyKCkKKyAgICAgICAgYXJncyA9IFtz
dHIoeCkgZm9yIHggaW4gYXJnc10KKyAgICAgICAgcmV0dXJuIG9wdHBhcnNlci5wYXJzZV9rbm93
bl9hcmdzKGFyZ3MsIG5hbWVzcGFjZT1uYW1lc3BhY2UpCisKKyAgICBkZWYgYWRkaW5pKHNlbGYs
IG5hbWUsIGhlbHAsIHR5cGU9Tm9uZSwgZGVmYXVsdD1Ob25lKToKKyAgICAgICAgIiIiIHJlZ2lz
dGVyIGFuIGluaS1maWxlIG9wdGlvbi4KKworICAgICAgICA6bmFtZTogbmFtZSBvZiB0aGUgaW5p
LXZhcmlhYmxlCisgICAgICAgIDp0eXBlOiB0eXBlIG9mIHRoZSB2YXJpYWJsZSwgY2FuIGJlIGBg
cGF0aGxpc3RgYCwgYGBhcmdzYGAsIGBgbGluZWxpc3RgYAorICAgICAgICAgICAgICAgb3IgYGBi
b29sYGAuCisgICAgICAgIDpkZWZhdWx0OiBkZWZhdWx0IHZhbHVlIGlmIG5vIGluaS1maWxlIG9w
dGlvbiBleGlzdHMgYnV0IGlzIHF1ZXJpZWQuCisKKyAgICAgICAgVGhlIHZhbHVlIG9mIGluaS12
YXJpYWJsZXMgY2FuIGJlIHJldHJpZXZlZCB2aWEgYSBjYWxsIHRvCisgICAgICAgIDpweTpmdW5j
OmBjb25maWcuZ2V0aW5pKG5hbWUpIDxfcHl0ZXN0LmNvbmZpZy5Db25maWcuZ2V0aW5pPmAuCisg
ICAgICAgICIiIgorICAgICAgICBhc3NlcnQgdHlwZSBpbiAoTm9uZSwgInBhdGhsaXN0IiwgImFy
Z3MiLCAibGluZWxpc3QiLCAiYm9vbCIpCisgICAgICAgIHNlbGYuX2luaWRpY3RbbmFtZV0gPSAo
aGVscCwgdHlwZSwgZGVmYXVsdCkKKyAgICAgICAgc2VsZi5faW5pbmFtZXMuYXBwZW5kKG5hbWUp
CisKKworY2xhc3MgQXJndW1lbnRFcnJvcihFeGNlcHRpb24pOgorICAgICIiIgorICAgIFJhaXNl
ZCBpZiBhbiBBcmd1bWVudCBpbnN0YW5jZSBpcyBjcmVhdGVkIHdpdGggaW52YWxpZCBvcgorICAg
IGluY29uc2lzdGVudCBhcmd1bWVudHMuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgbXNnLCBvcHRpb24pOgorICAgICAgICBzZWxmLm1zZyA9IG1zZworICAgICAgICBzZWxmLm9w
dGlvbl9pZCA9IHN0cihvcHRpb24pCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAg
aWYgc2VsZi5vcHRpb25faWQ6CisgICAgICAgICAgICByZXR1cm4gIm9wdGlvbiAlczogJXMiICUg
KHNlbGYub3B0aW9uX2lkLCBzZWxmLm1zZykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJl
dHVybiBzZWxmLm1zZworCisKK2NsYXNzIEFyZ3VtZW50OgorICAgICIiImNsYXNzIHRoYXQgbWlt
aWNzIHRoZSBuZWNlc3NhcnkgYmVoYXZpb3VyIG9mIG9wdHBhcnNlLk9wdGlvbiAiIiIKKyAgICBf
dHlwX21hcCA9IHsKKyAgICAgICAgJ2ludCc6IGludCwKKyAgICAgICAgJ3N0cmluZyc6IHN0ciwK
KyAgICAgICAgfQorICAgICMgZW5hYmxlIGFmdGVyIHNvbWUgZ3JhY2UgcGVyaW9kIGZvciBwbHVn
aW4gd3JpdGVycworICAgIFRZUEVfV0FSTiA9IEZhbHNlCisKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgKm5hbWVzLCAqKmF0dHJzKToKKyAgICAgICAgIiIic3RvcmUgcGFybXMgaW4gcHJpdmF0ZSB2
YXJzIGZvciB1c2UgaW4gYWRkX2FyZ3VtZW50IiIiCisgICAgICAgIHNlbGYuX2F0dHJzID0gYXR0
cnMKKyAgICAgICAgc2VsZi5fc2hvcnRfb3B0cyA9IFtdCisgICAgICAgIHNlbGYuX2xvbmdfb3B0
cyA9IFtdCisgICAgICAgIHNlbGYuZGVzdCA9IGF0dHJzLmdldCgnZGVzdCcpCisgICAgICAgIGlm
IHNlbGYuVFlQRV9XQVJOOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGhlbHAg
PSBhdHRyc1snaGVscCddCisgICAgICAgICAgICAgICAgaWYgJyVkZWZhdWx0JyBpbiBoZWxwOgor
ICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncy53YXJuKAorICAgICAgICAgICAgICAgICAgICAg
ICAgJ3B5dGVzdCBub3cgdXNlcyBhcmdwYXJzZS4gIiVkZWZhdWx0IiBzaG91bGQgYmUnCisgICAg
ICAgICAgICAgICAgICAgICAgICAnIGNoYW5nZWQgdG8gIiUoZGVmYXVsdClzIiAnLAorICAgICAg
ICAgICAgICAgICAgICAgICAgRnV0dXJlV2FybmluZywKKyAgICAgICAgICAgICAgICAgICAgICAg
IHN0YWNrbGV2ZWw9MykKKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAg
ICAgICBwYXNzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHR5cCA9IGF0dHJzWyd0eXBlJ10K
KyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNl
OgorICAgICAgICAgICAgIyB0aGlzIG1pZ2h0IHJhaXNlIGEga2V5ZXJyb3IgYXMgd2VsbCwgZG9u
J3Qgd2FudCB0byBjYXRjaCB0aGF0CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHR5cCwgcHku
YnVpbHRpbi5fYmFzZXN0cmluZyk6CisgICAgICAgICAgICAgICAgaWYgdHlwID09ICdjaG9pY2Un
OgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLlRZUEVfV0FSTjoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHdhcm5pbmdzLndhcm4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3R5
cGUgYXJndW1lbnQgdG8gYWRkb3B0aW9uKCkgaXMgYSBzdHJpbmcgJXIuJworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICcgRm9yIHBhcnNlYXJnIHRoaXMgaXMgb3B0aW9uYWwgYW5kIHdoZW4g
c3VwcGxpZWQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgc2hvdWxkIGJlIGEgdHlw
ZS4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAob3B0aW9uczogJXMpJyAlICh0eXAs
IG5hbWVzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGdXR1cmVXYXJuaW5nLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrbGV2ZWw9MykKKyAgICAgICAgICAgICAgICAg
ICAgIyBhcmdwYXJzZSBleHBlY3RzIGEgdHlwZSBoZXJlIHRha2UgaXQgZnJvbQorICAgICAgICAg
ICAgICAgICAgICAjIHRoZSB0eXBlIG9mIHRoZSBmaXJzdCBlbGVtZW50CisgICAgICAgICAgICAg
ICAgICAgIGF0dHJzWyd0eXBlJ10gPSB0eXBlKGF0dHJzWydjaG9pY2VzJ11bMF0pCisgICAgICAg
ICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5UWVBFX1dBUk46Cisg
ICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncy53YXJuKAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICd0eXBlIGFyZ3VtZW50IHRvIGFkZG9wdGlvbigpIGlzIGEgc3RyaW5nICVyLicK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIEZvciBwYXJzZWFyZyB0aGlzIHNob3VsZCBi
ZSBhIHR5cGUuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgKG9wdGlvbnM6ICVzKScg
JSAodHlwLCBuYW1lcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnV0dXJlV2Fybmlu
ZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja2xldmVsPTMpCisgICAgICAgICAg
ICAgICAgICAgIGF0dHJzWyd0eXBlJ10gPSBBcmd1bWVudC5fdHlwX21hcFt0eXBdCisgICAgICAg
ICAgICAgICAgIyB1c2VkIGluIHRlc3RfcGFyc2VvcHQgLT4gdGVzdF9wYXJzZV9kZWZhdWx0Z2V0
dGVyCisgICAgICAgICAgICAgICAgc2VsZi50eXBlID0gYXR0cnNbJ3R5cGUnXQorICAgICAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnR5cGUgPSB0eXAKKyAgICAgICAgdHJ5Ogor
ICAgICAgICAgICAgIyBhdHRyaWJ1dGUgZXhpc3RlbmNlIGlzIHRlc3RlZCBpbiBDb25maWcuX3By
b2Nlc3NvcHQKKyAgICAgICAgICAgIHNlbGYuZGVmYXVsdCA9IGF0dHJzWydkZWZhdWx0J10KKyAg
ICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLl9z
ZXRfb3B0X3N0cmluZ3MobmFtZXMpCisgICAgICAgIGlmIG5vdCBzZWxmLmRlc3Q6CisgICAgICAg
ICAgICBpZiBzZWxmLl9sb25nX29wdHM6CisgICAgICAgICAgICAgICAgc2VsZi5kZXN0ID0gc2Vs
Zi5fbG9uZ19vcHRzWzBdWzI6XS5yZXBsYWNlKCctJywgJ18nKQorICAgICAgICAgICAgZWxzZToK
KyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZGVzdCA9IHNl
bGYuX3Nob3J0X29wdHNbMF1bMTpdCisgICAgICAgICAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6
CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEFyZ3VtZW50RXJyb3IoCisgICAgICAgICAgICAg
ICAgICAgICAgICAnbmVlZCBhIGxvbmcgb3Igc2hvcnQgb3B0aW9uJywgc2VsZikKKworICAgIGRl
ZiBuYW1lcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Nob3J0X29wdHMgKyBzZWxmLl9s
b25nX29wdHMKKworICAgIGRlZiBhdHRycyhzZWxmKToKKyAgICAgICAgIyB1cGRhdGUgYW55IGF0
dHJpYnV0ZXMgc2V0IGJ5IHByb2Nlc3NvcHQKKyAgICAgICAgYXR0cnMgPSAnZGVmYXVsdCBkZXN0
IGhlbHAnLnNwbGl0KCkKKyAgICAgICAgaWYgc2VsZi5kZXN0OgorICAgICAgICAgICAgYXR0cnMu
YXBwZW5kKHNlbGYuZGVzdCkKKyAgICAgICAgZm9yIGF0dHIgaW4gYXR0cnM6CisgICAgICAgICAg
ICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fYXR0cnNbYXR0cl0gPSBnZXRhdHRyKHNlbGYs
IGF0dHIpCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAg
ICAgcGFzcworICAgICAgICBpZiBzZWxmLl9hdHRycy5nZXQoJ2hlbHAnKToKKyAgICAgICAgICAg
IGEgPSBzZWxmLl9hdHRyc1snaGVscCddCisgICAgICAgICAgICBhID0gYS5yZXBsYWNlKCclZGVm
YXVsdCcsICclKGRlZmF1bHQpcycpCisgICAgICAgICAgICAjYSA9IGEucmVwbGFjZSgnJXByb2cn
LCAnJShwcm9nKXMnKQorICAgICAgICAgICAgc2VsZi5fYXR0cnNbJ2hlbHAnXSA9IGEKKyAgICAg
ICAgcmV0dXJuIHNlbGYuX2F0dHJzCisKKyAgICBkZWYgX3NldF9vcHRfc3RyaW5ncyhzZWxmLCBv
cHRzKToKKyAgICAgICAgIiIiZGlyZWN0bHkgZnJvbSBvcHRwYXJzZQorCisgICAgICAgIG1pZ2h0
IG5vdCBiZSBuZWNlc3NhcnkgYXMgdGhpcyBpcyBwYXNzZWQgdG8gYXJncGFyc2UgbGF0ZXIgb24i
IiIKKyAgICAgICAgZm9yIG9wdCBpbiBvcHRzOgorICAgICAgICAgICAgaWYgbGVuKG9wdCkgPCAy
OgorICAgICAgICAgICAgICAgIHJhaXNlIEFyZ3VtZW50RXJyb3IoCisgICAgICAgICAgICAgICAg
ICAgICJpbnZhbGlkIG9wdGlvbiBzdHJpbmcgJXI6ICIKKyAgICAgICAgICAgICAgICAgICAgIm11
c3QgYmUgYXQgbGVhc3QgdHdvIGNoYXJhY3RlcnMgbG9uZyIgJSBvcHQsIHNlbGYpCisgICAgICAg
ICAgICBlbGlmIGxlbihvcHQpID09IDI6CisgICAgICAgICAgICAgICAgaWYgbm90IChvcHRbMF0g
PT0gIi0iIGFuZCBvcHRbMV0gIT0gIi0iKToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgQXJn
dW1lbnRFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIHNob3J0IG9wdGlv
biBzdHJpbmcgJXI6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJtdXN0IGJlIG9mIHRoZSBm
b3JtIC14LCAoeCBhbnkgbm9uLWRhc2ggY2hhcikiICUgb3B0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZikKKyAgICAgICAgICAgICAgICBzZWxmLl9zaG9ydF9vcHRzLmFwcGVuZChvcHQp
CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIG5vdCAob3B0WzA6Ml0gPT0g
Ii0tIiBhbmQgb3B0WzJdICE9ICItIik6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEFyZ3Vt
ZW50RXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCBsb25nIG9wdGlvbiBz
dHJpbmcgJXI6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJtdXN0IHN0YXJ0IHdpdGggLS0s
IGZvbGxvd2VkIGJ5IG5vbi1kYXNoIiAlIG9wdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNl
bGYpCisgICAgICAgICAgICAgICAgc2VsZi5fbG9uZ19vcHRzLmFwcGVuZChvcHQpCisKKyAgICBk
ZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHZhbCA9ICdBcmd1bWVudCgnCisgICAgICAg
IGlmIHNlbGYuX3Nob3J0X29wdHM6CisgICAgICAgICAgICByZXR2YWwgKz0gJ19zaG9ydF9vcHRz
OiAnICsgcmVwcihzZWxmLl9zaG9ydF9vcHRzKSArICcsICcKKyAgICAgICAgaWYgc2VsZi5fbG9u
Z19vcHRzOgorICAgICAgICAgICAgcmV0dmFsICs9ICdfbG9uZ19vcHRzOiAnICsgcmVwcihzZWxm
Ll9sb25nX29wdHMpICsgJywgJworICAgICAgICByZXR2YWwgKz0gJ2Rlc3Q6ICcgKyByZXByKHNl
bGYuZGVzdCkgKyAnLCAnCisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgJ3R5cGUnKToKKyAgICAg
ICAgICAgIHJldHZhbCArPSAndHlwZTogJyArIHJlcHIoc2VsZi50eXBlKSArICcsICcKKyAgICAg
ICAgaWYgaGFzYXR0cihzZWxmLCAnZGVmYXVsdCcpOgorICAgICAgICAgICAgcmV0dmFsICs9ICdk
ZWZhdWx0OiAnICsgcmVwcihzZWxmLmRlZmF1bHQpICsgJywgJworICAgICAgICBpZiByZXR2YWxb
LTI6XSA9PSAnLCAnOiAgIyBhbHdheXMgbG9uZyBlbm91Z2ggdG8gdGVzdCAoIkFyZ3VtZW50KCIg
KQorICAgICAgICAgICAgcmV0dmFsID0gcmV0dmFsWzotMl0KKyAgICAgICAgcmV0dmFsICs9ICcp
JworICAgICAgICByZXR1cm4gcmV0dmFsCisKKworY2xhc3MgT3B0aW9uR3JvdXA6CisgICAgZGVm
IF9faW5pdF9fKHNlbGYsIG5hbWUsIGRlc2NyaXB0aW9uPSIiLCBwYXJzZXI9Tm9uZSk6CisgICAg
ICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0
aW9uCisgICAgICAgIHNlbGYub3B0aW9ucyA9IFtdCisgICAgICAgIHNlbGYucGFyc2VyID0gcGFy
c2VyCisKKyAgICBkZWYgYWRkb3B0aW9uKHNlbGYsICpvcHRuYW1lcywgKiphdHRycyk6CisgICAg
ICAgICIiIiBhZGQgYW4gb3B0aW9uIHRvIHRoaXMgZ3JvdXAuCisKKyAgICAgICAgaWYgYSBzaG9y
dGVuZWQgdmVyc2lvbiBvZiBhIGxvbmcgb3B0aW9uIGlzIHNwZWNpZmllZCBpdCB3aWxsCisgICAg
ICAgIGJlIHN1cHByZXNzZWQgaW4gdGhlIGhlbHAuIGFkZG9wdGlvbignLS10d293b3JkcycsICct
LXR3by13b3JkcycpCisgICAgICAgIHJlc3VsdHMgaW4gaGVscCBzaG93aW5nICctLXR3by13b3Jk
cycgb25seSwgYnV0IC0tdHdvd29yZHMgZ2V0cworICAgICAgICBhY2NlcHRlZCAqKmFuZCoqIHRo
ZSBhdXRvbWF0aWMgZGVzdGluYXRpb24gaXMgaW4gYXJncy50d293b3JkcworICAgICAgICAiIiIK
KyAgICAgICAgb3B0aW9uID0gQXJndW1lbnQoKm9wdG5hbWVzLCAqKmF0dHJzKQorICAgICAgICBz
ZWxmLl9hZGRvcHRpb25faW5zdGFuY2Uob3B0aW9uLCBzaG9ydHVwcGVyPUZhbHNlKQorCisgICAg
ZGVmIF9hZGRvcHRpb24oc2VsZiwgKm9wdG5hbWVzLCAqKmF0dHJzKToKKyAgICAgICAgb3B0aW9u
ID0gQXJndW1lbnQoKm9wdG5hbWVzLCAqKmF0dHJzKQorICAgICAgICBzZWxmLl9hZGRvcHRpb25f
aW5zdGFuY2Uob3B0aW9uLCBzaG9ydHVwcGVyPVRydWUpCisKKyAgICBkZWYgX2FkZG9wdGlvbl9p
bnN0YW5jZShzZWxmLCBvcHRpb24sIHNob3J0dXBwZXI9RmFsc2UpOgorICAgICAgICBpZiBub3Qg
c2hvcnR1cHBlcjoKKyAgICAgICAgICAgIGZvciBvcHQgaW4gb3B0aW9uLl9zaG9ydF9vcHRzOgor
ICAgICAgICAgICAgICAgIGlmIG9wdFswXSA9PSAnLScgYW5kIG9wdFsxXS5pc2xvd2VyKCk6Cisg
ICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImxvd2VyY2FzZSBzaG9ydG9wdGlv
bnMgcmVzZXJ2ZWQiKQorICAgICAgICBpZiBzZWxmLnBhcnNlcjoKKyAgICAgICAgICAgIHNlbGYu
cGFyc2VyLnByb2Nlc3NvcHRpb24ob3B0aW9uKQorICAgICAgICBzZWxmLm9wdGlvbnMuYXBwZW5k
KG9wdGlvbikKKworCitjbGFzcyBNeU9wdGlvblBhcnNlcihhcmdwYXJzZS5Bcmd1bWVudFBhcnNl
cik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcnNlciwgZXh0cmFfaW5mbz1Ob25lKToKKyAg
ICAgICAgaWYgbm90IGV4dHJhX2luZm86CisgICAgICAgICAgICBleHRyYV9pbmZvID0ge30KKyAg
ICAgICAgc2VsZi5fcGFyc2VyID0gcGFyc2VyCisgICAgICAgIGFyZ3BhcnNlLkFyZ3VtZW50UGFy
c2VyLl9faW5pdF9fKHNlbGYsIHVzYWdlPXBhcnNlci5fdXNhZ2UsCisgICAgICAgICAgICBhZGRf
aGVscD1GYWxzZSwgZm9ybWF0dGVyX2NsYXNzPURyb3BTaG9ydGVyTG9uZ0hlbHBGb3JtYXR0ZXIp
CisgICAgICAgICMgZXh0cmFfaW5mbyBpcyBhIGRpY3Qgb2YgKHBhcmFtIC0+IHZhbHVlKSB0byBk
aXNwbGF5IGlmIHRoZXJlJ3MKKyAgICAgICAgIyBhbiB1c2FnZSBlcnJvciB0byBwcm92aWRlIG1v
cmUgY29udGV4dHVhbCBpbmZvcm1hdGlvbiB0byB0aGUgdXNlcgorICAgICAgICBzZWxmLmV4dHJh
X2luZm8gPSBleHRyYV9pbmZvCisKKyAgICBkZWYgcGFyc2VfYXJncyhzZWxmLCBhcmdzPU5vbmUs
IG5hbWVzcGFjZT1Ob25lKToKKyAgICAgICAgIiIiYWxsb3cgc3BsaXR0aW5nIG9mIHBvc2l0aW9u
YWwgYXJndW1lbnRzIiIiCisgICAgICAgIGFyZ3MsIGFyZ3YgPSBzZWxmLnBhcnNlX2tub3duX2Fy
Z3MoYXJncywgbmFtZXNwYWNlKQorICAgICAgICBpZiBhcmd2OgorICAgICAgICAgICAgZm9yIGFy
ZyBpbiBhcmd2OgorICAgICAgICAgICAgICAgIGlmIGFyZyBhbmQgYXJnWzBdID09ICctJzoKKyAg
ICAgICAgICAgICAgICAgICAgbGluZXMgPSBbJ3VucmVjb2duaXplZCBhcmd1bWVudHM6ICVzJyAl
ICgnICcuam9pbihhcmd2KSldCisgICAgICAgICAgICAgICAgICAgIGZvciBrLCB2IGluIHNvcnRl
ZChzZWxmLmV4dHJhX2luZm8uaXRlbXMoKSk6CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJyAgJXM6ICVzJyAlIChrLCB2KSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5l
cnJvcignXG4nLmpvaW4obGluZXMpKQorICAgICAgICAgICAgZ2V0YXR0cihhcmdzLCBGSUxFX09S
X0RJUikuZXh0ZW5kKGFyZ3YpCisgICAgICAgIHJldHVybiBhcmdzCisKKworY2xhc3MgRHJvcFNo
b3J0ZXJMb25nSGVscEZvcm1hdHRlcihhcmdwYXJzZS5IZWxwRm9ybWF0dGVyKToKKyAgICAiIiJz
aG9ydGVuIGhlbHAgZm9yIGxvbmcgb3B0aW9ucyB0aGF0IGRpZmZlciBvbmx5IGluIGV4dHJhIGh5
cGhlbnMKKworICAgIC0gY29sbGFwc2UgKipsb25nKiogb3B0aW9ucyB0aGF0IGFyZSB0aGUgc2Ft
ZSBleGNlcHQgZm9yIGV4dHJhIGh5cGhlbnMKKyAgICAtIHNwZWNpYWwgYWN0aW9uIGF0dHJpYnV0
ZSBtYXBfbG9uZ19vcHRpb24gYWxsb3dzIHN1cnByZXNzaW5nIGFkZGl0aW9uYWwKKyAgICAgIGxv
bmcgb3B0aW9ucworICAgIC0gc2hvcnRjdXQgaWYgdGhlcmUgYXJlIG9ubHkgdHdvIG9wdGlvbnMg
YW5kIG9uZSBvZiB0aGVtIGlzIGEgc2hvcnQgb25lCisgICAgLSBjYWNoZSByZXN1bHQgb24gYWN0
aW9uIG9iamVjdCBhcyB0aGlzIGlzIGNhbGxlZCBhdCBsZWFzdCAyIHRpbWVzCisgICAgIiIiCisg
ICAgZGVmIF9mb3JtYXRfYWN0aW9uX2ludm9jYXRpb24oc2VsZiwgYWN0aW9uKToKKyAgICAgICAg
b3Jnc3RyID0gYXJncGFyc2UuSGVscEZvcm1hdHRlci5fZm9ybWF0X2FjdGlvbl9pbnZvY2F0aW9u
KHNlbGYsIGFjdGlvbikKKyAgICAgICAgaWYgb3Jnc3RyIGFuZCBvcmdzdHJbMF0gIT0gJy0nOiAj
IG9ubHkgb3B0aW9uYWwgYXJndW1lbnRzCisgICAgICAgICAgICByZXR1cm4gb3Jnc3RyCisgICAg
ICAgIHJlcyA9IGdldGF0dHIoYWN0aW9uLCAnX2Zvcm1hdHRlZF9hY3Rpb25faW52b2NhdGlvbics
IE5vbmUpCisgICAgICAgIGlmIHJlczoKKyAgICAgICAgICAgIHJldHVybiByZXMKKyAgICAgICAg
b3B0aW9ucyA9IG9yZ3N0ci5zcGxpdCgnLCAnKQorICAgICAgICBpZiBsZW4ob3B0aW9ucykgPT0g
MiBhbmQgKGxlbihvcHRpb25zWzBdKSA9PSAyIG9yIGxlbihvcHRpb25zWzFdKSA9PSAyKToKKyAg
ICAgICAgICAgICMgYSBzaG9ydGN1dCBmb3IgJy1oLCAtLWhlbHAnIG9yICctLWFiYycsICctYScK
KyAgICAgICAgICAgIGFjdGlvbi5fZm9ybWF0dGVkX2FjdGlvbl9pbnZvY2F0aW9uID0gb3Jnc3Ry
CisgICAgICAgICAgICByZXR1cm4gb3Jnc3RyCisgICAgICAgIHJldHVybl9saXN0ID0gW10KKyAg
ICAgICAgb3B0aW9uX21hcCA9ICBnZXRhdHRyKGFjdGlvbiwgJ21hcF9sb25nX29wdGlvbicsIHt9
KQorICAgICAgICBpZiBvcHRpb25fbWFwIGlzIE5vbmU6CisgICAgICAgICAgICBvcHRpb25fbWFw
ID0ge30KKyAgICAgICAgc2hvcnRfbG9uZyA9IHt9CisgICAgICAgIGZvciBvcHRpb24gaW4gb3B0
aW9uczoKKyAgICAgICAgICAgIGlmIGxlbihvcHRpb24pID09IDIgb3Igb3B0aW9uWzJdID09ICcg
JzoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgbm90IG9wdGlvbi5z
dGFydHN3aXRoKCctLScpOgorICAgICAgICAgICAgICAgIHJhaXNlIEFyZ3VtZW50RXJyb3IoJ2xv
bmcgb3B0aW9uYWwgYXJndW1lbnQgd2l0aG91dCAiLS0iOiBbJXNdJworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJSAob3B0aW9uKSwgc2VsZikKKyAgICAgICAgICAgIHh4b3B0
aW9uID0gb3B0aW9uWzI6XQorICAgICAgICAgICAgaWYgeHhvcHRpb24uc3BsaXQoKVswXSBub3Qg
aW4gb3B0aW9uX21hcDoKKyAgICAgICAgICAgICAgICBzaG9ydGVuZWQgPSB4eG9wdGlvbi5yZXBs
YWNlKCctJywgJycpCisgICAgICAgICAgICAgICAgaWYgc2hvcnRlbmVkIG5vdCBpbiBzaG9ydF9s
b25nIG9yIFwKKyAgICAgICAgICAgICAgICAgICBsZW4oc2hvcnRfbG9uZ1tzaG9ydGVuZWRdKSA8
IGxlbih4eG9wdGlvbik6CisgICAgICAgICAgICAgICAgICAgIHNob3J0X2xvbmdbc2hvcnRlbmVk
XSA9IHh4b3B0aW9uCisgICAgICAgICMgbm93IHNob3J0X2xvbmcgaGFzIGJlZW4gZmlsbGVkIG91
dCB0byB0aGUgbG9uZ2VzdCB3aXRoIGRhc2hlcworICAgICAgICAjICoqYW5kKiogd2Uga2VlcCB0
aGUgcmlnaHQgb3B0aW9uIG9yZGVyaW5nIGZyb20gYWRkX2FyZ3VtZW50CisgICAgICAgIGZvciBv
cHRpb24gaW4gb3B0aW9uczogIworICAgICAgICAgICAgaWYgbGVuKG9wdGlvbikgPT0gMiBvciBv
cHRpb25bMl0gPT0gJyAnOgorICAgICAgICAgICAgICAgIHJldHVybl9saXN0LmFwcGVuZChvcHRp
b24pCisgICAgICAgICAgICBpZiBvcHRpb25bMjpdID09IHNob3J0X2xvbmcuZ2V0KG9wdGlvbi5y
ZXBsYWNlKCctJywgJycpKToKKyAgICAgICAgICAgICAgICByZXR1cm5fbGlzdC5hcHBlbmQob3B0
aW9uLnJlcGxhY2UoJyAnLCAnPScpKQorICAgICAgICBhY3Rpb24uX2Zvcm1hdHRlZF9hY3Rpb25f
aW52b2NhdGlvbiA9ICcsICcuam9pbihyZXR1cm5fbGlzdCkKKyAgICAgICAgcmV0dXJuIGFjdGlv
bi5fZm9ybWF0dGVkX2FjdGlvbl9pbnZvY2F0aW9uCisKKworCitkZWYgX2Vuc3VyZV9yZW1vdmVk
X3N5c21vZHVsZShtb2RuYW1lKToKKyAgICB0cnk6CisgICAgICAgIGRlbCBzeXMubW9kdWxlc1tt
b2RuYW1lXQorICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgcGFzcworCitjbGFzcyBDbWRP
cHRpb25zKG9iamVjdCk6CisgICAgIiIiIGhvbGRzIGNtZGxpbmUgb3B0aW9ucyBhcyBhdHRyaWJ1
dGVzLiIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZXM9KCkpOgorICAgICAgICBzZWxm
Ll9fZGljdF9fLnVwZGF0ZSh2YWx1ZXMpCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAg
ICByZXR1cm4gIjxDbWRPcHRpb25zICVyPiIgJShzZWxmLl9fZGljdF9fLCkKKyAgICBkZWYgY29w
eShzZWxmKToKKyAgICAgICAgcmV0dXJuIENtZE9wdGlvbnMoc2VsZi5fX2RpY3RfXykKKworY2xh
c3MgTm90c2V0OgorICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICI8Tk9U
U0VUPiIKKworbm90c2V0ID0gTm90c2V0KCkKK0ZJTEVfT1JfRElSID0gJ2ZpbGVfb3JfZGlyJwor
CitjbGFzcyBDb25maWcob2JqZWN0KToKKyAgICAiIiIgYWNjZXNzIHRvIGNvbmZpZ3VyYXRpb24g
dmFsdWVzLCBwbHVnaW5tYW5hZ2VyIGFuZCBwbHVnaW4gaG9va3MuICAiIiIKKworICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBwbHVnaW5tYW5hZ2VyKToKKyAgICAgICAgIzogYWNjZXNzIHRvIGNvbW1h
bmQgbGluZSBvcHRpb24gYXMgYXR0cmlidXRlcy4KKyAgICAgICAgIzogKGRlcHJlY2F0ZWQpLCB1
c2UgOnB5OmZ1bmM6YGdldG9wdGlvbigpIDxfcHl0ZXN0LmNvbmZpZy5Db25maWcuZ2V0b3B0aW9u
PmAgaW5zdGVhZAorICAgICAgICBzZWxmLm9wdGlvbiA9IENtZE9wdGlvbnMoKQorICAgICAgICBf
YSA9IEZJTEVfT1JfRElSCisgICAgICAgIHNlbGYuX3BhcnNlciA9IFBhcnNlcigKKyAgICAgICAg
ICAgIHVzYWdlPSIlJShwcm9nKXMgW29wdGlvbnNdIFslc10gWyVzXSBbLi4uXSIgJSAoX2EsIF9h
KSwKKyAgICAgICAgICAgIHByb2Nlc3NvcHQ9c2VsZi5fcHJvY2Vzc29wdCwKKyAgICAgICAgKQor
ICAgICAgICAjOiBhIHBsdWdpbm1hbmFnZXIgaW5zdGFuY2UKKyAgICAgICAgc2VsZi5wbHVnaW5t
YW5hZ2VyID0gcGx1Z2lubWFuYWdlcgorICAgICAgICBzZWxmLnRyYWNlID0gc2VsZi5wbHVnaW5t
YW5hZ2VyLnRyYWNlLnJvb3QuZ2V0KCJjb25maWciKQorICAgICAgICBzZWxmLmhvb2sgPSBzZWxm
LnBsdWdpbm1hbmFnZXIuaG9vaworICAgICAgICBzZWxmLl9pbmljYWNoZSA9IHt9CisgICAgICAg
IHNlbGYuX29wdDJkZXN0ID0ge30KKyAgICAgICAgc2VsZi5fY2xlYW51cCA9IFtdCisgICAgICAg
IHNlbGYuX3dhcm4gPSBzZWxmLnBsdWdpbm1hbmFnZXIuX3dhcm4KKyAgICAgICAgc2VsZi5wbHVn
aW5tYW5hZ2VyLnJlZ2lzdGVyKHNlbGYsICJweXRlc3Rjb25maWciKQorICAgICAgICBzZWxmLl9j
b25maWd1cmVkID0gRmFsc2UKKyAgICAgICAgZGVmIGRvX3NldG5zKGRpYyk6CisgICAgICAgICAg
ICBpbXBvcnQgcHl0ZXN0CisgICAgICAgICAgICBzZXRucyhweXRlc3QsIGRpYykKKyAgICAgICAg
c2VsZi5ob29rLnB5dGVzdF9uYW1lc3BhY2UuY2FsbF9oaXN0b3JpYyhkb19zZXRucywge30pCisg
ICAgICAgIHNlbGYuaG9vay5weXRlc3RfYWRkb3B0aW9uLmNhbGxfaGlzdG9yaWMoa3dhcmdzPWRp
Y3QocGFyc2VyPXNlbGYuX3BhcnNlcikpCisKKyAgICBkZWYgYWRkX2NsZWFudXAoc2VsZiwgZnVu
Yyk6CisgICAgICAgICIiIiBBZGQgYSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgY29u
ZmlnIG9iamVjdCBnZXRzIG91dCBvZgorICAgICAgICB1c2UgKHVzdWFsbHkgY29uaW5jaWRpbmcg
d2l0aCBweXRlc3RfdW5jb25maWd1cmUpLiIiIgorICAgICAgICBzZWxmLl9jbGVhbnVwLmFwcGVu
ZChmdW5jKQorCisgICAgZGVmIF9kb19jb25maWd1cmUoc2VsZik6CisgICAgICAgIGFzc2VydCBu
b3Qgc2VsZi5fY29uZmlndXJlZAorICAgICAgICBzZWxmLl9jb25maWd1cmVkID0gVHJ1ZQorICAg
ICAgICBzZWxmLmhvb2sucHl0ZXN0X2NvbmZpZ3VyZS5jYWxsX2hpc3RvcmljKGt3YXJncz1kaWN0
KGNvbmZpZz1zZWxmKSkKKworICAgIGRlZiBfZW5zdXJlX3VuY29uZmlndXJlKHNlbGYpOgorICAg
ICAgICBpZiBzZWxmLl9jb25maWd1cmVkOgorICAgICAgICAgICAgc2VsZi5fY29uZmlndXJlZCA9
IEZhbHNlCisgICAgICAgICAgICBzZWxmLmhvb2sucHl0ZXN0X3VuY29uZmlndXJlKGNvbmZpZz1z
ZWxmKQorICAgICAgICAgICAgc2VsZi5ob29rLnB5dGVzdF9jb25maWd1cmUuX2NhbGxfaGlzdG9y
eSA9IFtdCisgICAgICAgIHdoaWxlIHNlbGYuX2NsZWFudXA6CisgICAgICAgICAgICBmaW4gPSBz
ZWxmLl9jbGVhbnVwLnBvcCgpCisgICAgICAgICAgICBmaW4oKQorCisgICAgZGVmIHdhcm4oc2Vs
ZiwgY29kZSwgbWVzc2FnZSwgZnNsb2NhdGlvbj1Ob25lKToKKyAgICAgICAgIiIiIGdlbmVyYXRl
IGEgd2FybmluZyBmb3IgdGhpcyB0ZXN0IHNlc3Npb24uICIiIgorICAgICAgICBzZWxmLmhvb2su
cHl0ZXN0X2xvZ3dhcm5pbmcuY2FsbF9oaXN0b3JpYyhrd2FyZ3M9ZGljdCgKKyAgICAgICAgICAg
IGNvZGU9Y29kZSwgbWVzc2FnZT1tZXNzYWdlLAorICAgICAgICAgICAgZnNsb2NhdGlvbj1mc2xv
Y2F0aW9uLCBub2RlaWQ9Tm9uZSkpCisKKyAgICBkZWYgZ2V0X3Rlcm1pbmFsX3dyaXRlcihzZWxm
KToKKyAgICAgICAgcmV0dXJuIHNlbGYucGx1Z2lubWFuYWdlci5nZXRfcGx1Z2luKCJ0ZXJtaW5h
bHJlcG9ydGVyIikuX3R3CisKKyAgICBkZWYgcHl0ZXN0X2NtZGxpbmVfcGFyc2Uoc2VsZiwgcGx1
Z2lubWFuYWdlciwgYXJncyk6CisgICAgICAgICMgUkVGMSBhc3NlcnQgc2VsZiA9PSBwbHVnaW5t
YW5hZ2VyLmNvbmZpZywgKHNlbGYsIHBsdWdpbm1hbmFnZXIuY29uZmlnKQorICAgICAgICBzZWxm
LnBhcnNlKGFyZ3MpCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgbm90aWZ5X2V4Y2Vw
dGlvbihzZWxmLCBleGNpbmZvLCBvcHRpb249Tm9uZSk6CisgICAgICAgIGlmIG9wdGlvbiBhbmQg
b3B0aW9uLmZ1bGx0cmFjZToKKyAgICAgICAgICAgIHN0eWxlID0gImxvbmciCisgICAgICAgIGVs
c2U6CisgICAgICAgICAgICBzdHlsZSA9ICJuYXRpdmUiCisgICAgICAgIGV4Y3JlcHIgPSBleGNp
bmZvLmdldHJlcHIoZnVuY2FyZ3M9VHJ1ZSwKKyAgICAgICAgICAgIHNob3dsb2NhbHM9Z2V0YXR0
cihvcHRpb24sICdzaG93bG9jYWxzJywgRmFsc2UpLAorICAgICAgICAgICAgc3R5bGU9c3R5bGUs
CisgICAgICAgICkKKyAgICAgICAgcmVzID0gc2VsZi5ob29rLnB5dGVzdF9pbnRlcm5hbGVycm9y
KGV4Y3JlcHI9ZXhjcmVwciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGV4Y2luZm89ZXhjaW5mbykKKyAgICAgICAgaWYgbm90IHB5LmJ1aWx0aW4uYW55KHJl
cyk6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBzdHIoZXhjcmVwcikuc3BsaXQoIlxuIik6Cisg
ICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiSU5URVJOQUxFUlJPUj4gJXNcbiIgJWxp
bmUpCisgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCisKKyAgICBkZWYgY3dkX3Jl
bGF0aXZlX25vZGVpZChzZWxmLCBub2RlaWQpOgorICAgICAgICAjIG5vZGVpZCdzIGFyZSByZWxh
dGl2ZSB0byB0aGUgcm9vdHBhdGgsIGNvbXB1dGUgcmVsYXRpdmUgdG8gY3dkCisgICAgICAgIGlm
IHNlbGYuaW52b2NhdGlvbl9kaXIgIT0gc2VsZi5yb290ZGlyOgorICAgICAgICAgICAgZnVsbHBh
dGggPSBzZWxmLnJvb3RkaXIuam9pbihub2RlaWQpCisgICAgICAgICAgICBub2RlaWQgPSBzZWxm
Lmludm9jYXRpb25fZGlyLmJlc3RyZWxwYXRoKGZ1bGxwYXRoKQorICAgICAgICByZXR1cm4gbm9k
ZWlkCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZnJvbWRpY3RhcmdzKGNscywgb3B0aW9u
X2RpY3QsIGFyZ3MpOgorICAgICAgICAiIiIgY29uc3RydWN0b3IgdXNlYWJsZSBmb3Igc3VicHJv
Y2Vzc2VzLiAiIiIKKyAgICAgICAgY29uZmlnID0gZ2V0X2NvbmZpZygpCisgICAgICAgIGNvbmZp
Zy5vcHRpb24uX19kaWN0X18udXBkYXRlKG9wdGlvbl9kaWN0KQorICAgICAgICBjb25maWcucGFy
c2UoYXJncywgYWRkb3B0cz1GYWxzZSkKKyAgICAgICAgZm9yIHggaW4gY29uZmlnLm9wdGlvbi5w
bHVnaW5zOgorICAgICAgICAgICAgY29uZmlnLnBsdWdpbm1hbmFnZXIuY29uc2lkZXJfcGx1Z2lu
YXJnKHgpCisgICAgICAgIHJldHVybiBjb25maWcKKworICAgIGRlZiBfcHJvY2Vzc29wdChzZWxm
LCBvcHQpOgorICAgICAgICBmb3IgbmFtZSBpbiBvcHQuX3Nob3J0X29wdHMgKyBvcHQuX2xvbmdf
b3B0czoKKyAgICAgICAgICAgIHNlbGYuX29wdDJkZXN0W25hbWVdID0gb3B0LmRlc3QKKworICAg
ICAgICBpZiBoYXNhdHRyKG9wdCwgJ2RlZmF1bHQnKSBhbmQgb3B0LmRlc3Q6CisgICAgICAgICAg
ICBpZiBub3QgaGFzYXR0cihzZWxmLm9wdGlvbiwgb3B0LmRlc3QpOgorICAgICAgICAgICAgICAg
IHNldGF0dHIoc2VsZi5vcHRpb24sIG9wdC5kZXN0LCBvcHQuZGVmYXVsdCkKKworICAgIEBob29r
aW1wbCh0cnlsYXN0PVRydWUpCisgICAgZGVmIHB5dGVzdF9sb2FkX2luaXRpYWxfY29uZnRlc3Rz
KHNlbGYsIGVhcmx5X2NvbmZpZyk6CisgICAgICAgIHNlbGYucGx1Z2lubWFuYWdlci5fc2V0X2lu
aXRpYWxfY29uZnRlc3RzKGVhcmx5X2NvbmZpZy5rbm93bl9hcmdzX25hbWVzcGFjZSkKKworICAg
IGRlZiBfaW5pdGluaShzZWxmLCBhcmdzKToKKyAgICAgICAgbnMsIHVua25vd25fYXJncyA9IHNl
bGYuX3BhcnNlci5wYXJzZV9rbm93bl9hbmRfdW5rbm93bl9hcmdzKGFyZ3MsIG5hbWVzcGFjZT1z
ZWxmLm9wdGlvbi5jb3B5KCkpCisgICAgICAgIHIgPSBkZXRlcm1pbmVfc2V0dXAobnMuaW5pZmls
ZW5hbWUsIG5zLmZpbGVfb3JfZGlyICsgdW5rbm93bl9hcmdzKQorICAgICAgICBzZWxmLnJvb3Rk
aXIsIHNlbGYuaW5pZmlsZSwgc2VsZi5pbmljZmcgPSByCisgICAgICAgIHNlbGYuX3BhcnNlci5l
eHRyYV9pbmZvWydyb290ZGlyJ10gPSBzZWxmLnJvb3RkaXIKKyAgICAgICAgc2VsZi5fcGFyc2Vy
LmV4dHJhX2luZm9bJ2luaWZpbGUnXSA9IHNlbGYuaW5pZmlsZQorICAgICAgICBzZWxmLmludm9j
YXRpb25fZGlyID0gcHkucGF0aC5sb2NhbCgpCisgICAgICAgIHNlbGYuX3BhcnNlci5hZGRpbmko
J2FkZG9wdHMnLCAnZXh0cmEgY29tbWFuZCBsaW5lIG9wdGlvbnMnLCAnYXJncycpCisgICAgICAg
IHNlbGYuX3BhcnNlci5hZGRpbmkoJ21pbnZlcnNpb24nLCAnbWluaW1hbGx5IHJlcXVpcmVkIHB5
dGVzdCB2ZXJzaW9uJykKKworICAgIGRlZiBfcHJlcGFyc2Uoc2VsZiwgYXJncywgYWRkb3B0cz1U
cnVlKToKKyAgICAgICAgc2VsZi5faW5pdGluaShhcmdzKQorICAgICAgICBpZiBhZGRvcHRzOgor
ICAgICAgICAgICAgYXJnc1s6XSA9IHNobGV4LnNwbGl0KG9zLmVudmlyb24uZ2V0KCdQWVRFU1Rf
QURET1BUUycsICcnKSkgKyBhcmdzCisgICAgICAgICAgICBhcmdzWzpdID0gc2VsZi5nZXRpbmko
ImFkZG9wdHMiKSArIGFyZ3MKKyAgICAgICAgc2VsZi5fY2hlY2t2ZXJzaW9uKCkKKyAgICAgICAg
c2VsZi5wbHVnaW5tYW5hZ2VyLmNvbnNpZGVyX3ByZXBhcnNlKGFyZ3MpCisgICAgICAgIHRyeToK
KyAgICAgICAgICAgIHNlbGYucGx1Z2lubWFuYWdlci5sb2FkX3NldHVwdG9vbHNfZW50cnlwb2lu
dHMoInB5dGVzdDExIikKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yIGFzIGU6CisgICAgICAg
ICAgICBzZWxmLndhcm4oIkkyIiwgImNvdWxkIG5vdCBsb2FkIHNldHVwdG9vbHMgZW50cnkgaW1w
b3J0OiAlcyIgJSAoZSwpKQorICAgICAgICBzZWxmLnBsdWdpbm1hbmFnZXIuY29uc2lkZXJfZW52
KCkKKyAgICAgICAgc2VsZi5rbm93bl9hcmdzX25hbWVzcGFjZSA9IG5zID0gc2VsZi5fcGFyc2Vy
LnBhcnNlX2tub3duX2FyZ3MoYXJncywgbmFtZXNwYWNlPXNlbGYub3B0aW9uLmNvcHkoKSkKKyAg
ICAgICAgaWYgc2VsZi5rbm93bl9hcmdzX25hbWVzcGFjZS5jb25mY3V0ZGlyIGlzIE5vbmUgYW5k
IHNlbGYuaW5pZmlsZToKKyAgICAgICAgICAgIGNvbmZjdXRkaXIgPSBweS5wYXRoLmxvY2FsKHNl
bGYuaW5pZmlsZSkuZGlybmFtZQorICAgICAgICAgICAgc2VsZi5rbm93bl9hcmdzX25hbWVzcGFj
ZS5jb25mY3V0ZGlyID0gY29uZmN1dGRpcgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxm
Lmhvb2sucHl0ZXN0X2xvYWRfaW5pdGlhbF9jb25mdGVzdHMoZWFybHlfY29uZmlnPXNlbGYsCisg
ICAgICAgICAgICAgICAgICAgIGFyZ3M9YXJncywgcGFyc2VyPXNlbGYuX3BhcnNlcikKKyAgICAg
ICAgZXhjZXB0IENvbmZ0ZXN0SW1wb3J0RmFpbHVyZToKKyAgICAgICAgICAgIGUgPSBzeXMuZXhj
X2luZm8oKVsxXQorICAgICAgICAgICAgaWYgbnMuaGVscCBvciBucy52ZXJzaW9uOgorICAgICAg
ICAgICAgICAgICMgd2UgZG9uJ3Qgd2FudCB0byBwcmV2ZW50IC0taGVscC8tLXZlcnNpb24gdG8g
d29yaworICAgICAgICAgICAgICAgICMgc28ganVzdCBsZXQgaXMgcGFzcyBhbmQgcHJpbnQgYSB3
YXJuaW5nIGF0IHRoZSBlbmQKKyAgICAgICAgICAgICAgICBzZWxmLl93YXJuKCJjb3VsZCBub3Qg
bG9hZCBpbml0aWFsIGNvbmZ0ZXN0cyAoJXMpXG4iICUgZS5wYXRoKQorICAgICAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgICAgICByYWlzZQorCisgICAgZGVmIF9jaGVja3ZlcnNpb24oc2VsZik6
CisgICAgICAgIGltcG9ydCBweXRlc3QKKyAgICAgICAgbWludmVyID0gc2VsZi5pbmljZmcuZ2V0
KCdtaW52ZXJzaW9uJywgTm9uZSkKKyAgICAgICAgaWYgbWludmVyOgorICAgICAgICAgICAgdmVy
ID0gbWludmVyLnNwbGl0KCIuIikKKyAgICAgICAgICAgIG15dmVyID0gcHl0ZXN0Ll9fdmVyc2lv
bl9fLnNwbGl0KCIuIikKKyAgICAgICAgICAgIGlmIG15dmVyIDwgdmVyOgorICAgICAgICAgICAg
ICAgIHJhaXNlIHB5dGVzdC5Vc2FnZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAiJXM6JWQ6
IHJlcXVpcmVzIHB5dGVzdC0lcywgYWN0dWFsIHB5dGVzdC0lcyciICUoCisgICAgICAgICAgICAg
ICAgICAgIHNlbGYuaW5pY2ZnLmNvbmZpZy5wYXRoLCBzZWxmLmluaWNmZy5saW5lb2YoJ21pbnZl
cnNpb24nKSwKKyAgICAgICAgICAgICAgICAgICAgbWludmVyLCBweXRlc3QuX192ZXJzaW9uX18p
KQorCisgICAgZGVmIHBhcnNlKHNlbGYsIGFyZ3MsIGFkZG9wdHM9VHJ1ZSk6CisgICAgICAgICMg
cGFyc2UgZ2l2ZW4gY21kbGluZSBhcmd1bWVudHMgaW50byB0aGlzIGNvbmZpZyBvYmplY3QuCisg
ICAgICAgIGFzc2VydCBub3QgaGFzYXR0cihzZWxmLCAnYXJncycpLCAoCisgICAgICAgICAgICAg
ICAgImNhbiBvbmx5IHBhcnNlIGNtZGxpbmUgYXJncyBhdCBtb3N0IG9uY2UgcGVyIENvbmZpZyBv
YmplY3QiKQorICAgICAgICBzZWxmLl9vcmlnYXJncyA9IGFyZ3MKKyAgICAgICAgc2VsZi5ob29r
LnB5dGVzdF9hZGRob29rcy5jYWxsX2hpc3RvcmljKAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGt3YXJncz1kaWN0KHBsdWdpbm1hbmFnZXI9c2VsZi5wbHVnaW5tYW5hZ2VyKSkK
KyAgICAgICAgc2VsZi5fcHJlcGFyc2UoYXJncywgYWRkb3B0cz1hZGRvcHRzKQorICAgICAgICAj
IFhYWCBkZXByZWNhdGVkIGhvb2s6CisgICAgICAgIHNlbGYuaG9vay5weXRlc3RfY21kbGluZV9w
cmVwYXJzZShjb25maWc9c2VsZiwgYXJncz1hcmdzKQorICAgICAgICBhcmdzID0gc2VsZi5fcGFy
c2VyLnBhcnNlX3NldG9wdGlvbihhcmdzLCBzZWxmLm9wdGlvbiwgbmFtZXNwYWNlPXNlbGYub3B0
aW9uKQorICAgICAgICBpZiBub3QgYXJnczoKKyAgICAgICAgICAgIGN3ZCA9IG9zLmdldGN3ZCgp
CisgICAgICAgICAgICBpZiBjd2QgPT0gc2VsZi5yb290ZGlyOgorICAgICAgICAgICAgICAgIGFy
Z3MgPSBzZWxmLmdldGluaSgndGVzdHBhdGhzJykKKyAgICAgICAgICAgIGlmIG5vdCBhcmdzOgor
ICAgICAgICAgICAgICAgIGFyZ3MgPSBbY3dkXQorICAgICAgICBzZWxmLmFyZ3MgPSBhcmdzCisK
KyAgICBkZWYgYWRkaW5pdmFsdWVfbGluZShzZWxmLCBuYW1lLCBsaW5lKToKKyAgICAgICAgIiIi
IGFkZCBhIGxpbmUgdG8gYW4gaW5pLWZpbGUgb3B0aW9uLiBUaGUgb3B0aW9uIG11c3QgaGF2ZSBi
ZWVuCisgICAgICAgIGRlY2xhcmVkIGJ1dCBtaWdodCBub3QgeWV0IGJlIHNldCBpbiB3aGljaCBj
YXNlIHRoZSBsaW5lIGJlY29tZXMgdGhlCisgICAgICAgIHRoZSBmaXJzdCBsaW5lIGluIGl0cyB2
YWx1ZS4gIiIiCisgICAgICAgIHggPSBzZWxmLmdldGluaShuYW1lKQorICAgICAgICBhc3NlcnQg
aXNpbnN0YW5jZSh4LCBsaXN0KQorICAgICAgICB4LmFwcGVuZChsaW5lKSAjIG1vZGlmaWVzIHRo
ZSBjYWNoZWQgbGlzdCBpbmxpbmUKKworICAgIGRlZiBnZXRpbmkoc2VsZiwgbmFtZSk6CisgICAg
ICAgICIiIiByZXR1cm4gY29uZmlndXJhdGlvbiB2YWx1ZSBmcm9tIGFuIDpyZWY6YGluaSBmaWxl
IDxpbmlmaWxlcz5gLiBJZiB0aGUKKyAgICAgICAgc3BlY2lmaWVkIG5hbWUgaGFzbid0IGJlZW4g
cmVnaXN0ZXJlZCB0aHJvdWdoIGEgcHJpb3IKKyAgICAgICAgOnB5OmZ1bmM6YHBhcnNlci5hZGRp
bmkgPHB5dGVzdC5jb25maWcuUGFyc2VyLmFkZGluaT5gCisgICAgICAgIGNhbGwgKHVzdWFsbHkg
ZnJvbSBhIHBsdWdpbiksIGEgVmFsdWVFcnJvciBpcyByYWlzZWQuICIiIgorICAgICAgICB0cnk6
CisgICAgICAgICAgICByZXR1cm4gc2VsZi5faW5pY2FjaGVbbmFtZV0KKyAgICAgICAgZXhjZXB0
IEtleUVycm9yOgorICAgICAgICAgICAgc2VsZi5faW5pY2FjaGVbbmFtZV0gPSB2YWwgPSBzZWxm
Ll9nZXRpbmkobmFtZSkKKyAgICAgICAgICAgIHJldHVybiB2YWwKKworICAgIGRlZiBfZ2V0aW5p
KHNlbGYsIG5hbWUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBkZXNjcmlwdGlvbiwgdHlw
ZSwgZGVmYXVsdCA9IHNlbGYuX3BhcnNlci5faW5pZGljdFtuYW1lXQorICAgICAgICBleGNlcHQg
S2V5RXJyb3I6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bmtub3duIGNvbmZpZ3Vy
YXRpb24gdmFsdWU6ICVyIiAlKG5hbWUsKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdmFs
dWUgPSBzZWxmLmluaWNmZ1tuYW1lXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAg
ICAgICBpZiBkZWZhdWx0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJldHVybiBkZWZh
dWx0CisgICAgICAgICAgICBpZiB0eXBlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmV0dXJu
ICcnCisgICAgICAgICAgICByZXR1cm4gW10KKyAgICAgICAgaWYgdHlwZSA9PSAicGF0aGxpc3Qi
OgorICAgICAgICAgICAgZHAgPSBweS5wYXRoLmxvY2FsKHNlbGYuaW5pY2ZnLmNvbmZpZy5wYXRo
KS5kaXJwYXRoKCkKKyAgICAgICAgICAgIGwgPSBbXQorICAgICAgICAgICAgZm9yIHJlbHBhdGgg
aW4gc2hsZXguc3BsaXQodmFsdWUpOgorICAgICAgICAgICAgICAgIGwuYXBwZW5kKGRwLmpvaW4o
cmVscGF0aCwgYWJzPVRydWUpKQorICAgICAgICAgICAgcmV0dXJuIGwKKyAgICAgICAgZWxpZiB0
eXBlID09ICJhcmdzIjoKKyAgICAgICAgICAgIHJldHVybiBzaGxleC5zcGxpdCh2YWx1ZSkKKyAg
ICAgICAgZWxpZiB0eXBlID09ICJsaW5lbGlzdCI6CisgICAgICAgICAgICByZXR1cm4gW3QgZm9y
IHQgaW4gbWFwKGxhbWJkYSB4OiB4LnN0cmlwKCksIHZhbHVlLnNwbGl0KCJcbiIpKSBpZiB0XQor
ICAgICAgICBlbGlmIHR5cGUgPT0gImJvb2wiOgorICAgICAgICAgICAgcmV0dXJuIGJvb2woX3N0
cnRvYm9vbCh2YWx1ZS5zdHJpcCgpKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFzc2Vy
dCB0eXBlIGlzIE5vbmUKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZQorCisgICAgZGVmIF9nZXRj
b25mdGVzdF9wYXRobGlzdChzZWxmLCBuYW1lLCBwYXRoKToKKyAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgbW9kLCByZWxyb290cyA9IHNlbGYucGx1Z2lubWFuYWdlci5fcmdldF93aXRoX2NvbmZt
b2QobmFtZSwgcGF0aCkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmV0
dXJuIE5vbmUKKyAgICAgICAgbW9kcGF0aCA9IHB5LnBhdGgubG9jYWwobW9kLl9fZmlsZV9fKS5k
aXJwYXRoKCkKKyAgICAgICAgbCA9IFtdCisgICAgICAgIGZvciByZWxyb290IGluIHJlbHJvb3Rz
OgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UocmVscm9vdCwgcHkucGF0aC5sb2NhbCk6
CisgICAgICAgICAgICAgICAgcmVscm9vdCA9IHJlbHJvb3QucmVwbGFjZSgiLyIsIHB5LnBhdGgu
bG9jYWwuc2VwKQorICAgICAgICAgICAgICAgIHJlbHJvb3QgPSBtb2RwYXRoLmpvaW4ocmVscm9v
dCwgYWJzPVRydWUpCisgICAgICAgICAgICBsLmFwcGVuZChyZWxyb290KQorICAgICAgICByZXR1
cm4gbAorCisgICAgZGVmIGdldG9wdGlvbihzZWxmLCBuYW1lLCBkZWZhdWx0PW5vdHNldCwgc2tp
cD1GYWxzZSk6CisgICAgICAgICIiIiByZXR1cm4gY29tbWFuZCBsaW5lIG9wdGlvbiB2YWx1ZS4K
KworICAgICAgICA6YXJnIG5hbWU6IG5hbWUgb2YgdGhlIG9wdGlvbi4gIFlvdSBtYXkgYWxzbyBz
cGVjaWZ5CisgICAgICAgICAgICB0aGUgbGl0ZXJhbCBgYC0tT1BUYGAgb3B0aW9uIGluc3RlYWQg
b2YgdGhlICJkZXN0IiBvcHRpb24gbmFtZS4KKyAgICAgICAgOmFyZyBkZWZhdWx0OiBkZWZhdWx0
IHZhbHVlIGlmIG5vIG9wdGlvbiBvZiB0aGF0IG5hbWUgZXhpc3RzLgorICAgICAgICA6YXJnIHNr
aXA6IGlmIFRydWUgcmFpc2UgcHl0ZXN0LnNraXAgaWYgb3B0aW9uIGRvZXMgbm90IGV4aXN0cwor
ICAgICAgICAgICAgb3IgaGFzIGEgTm9uZSB2YWx1ZS4KKyAgICAgICAgIiIiCisgICAgICAgIG5h
bWUgPSBzZWxmLl9vcHQyZGVzdC5nZXQobmFtZSwgbmFtZSkKKyAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgdmFsID0gZ2V0YXR0cihzZWxmLm9wdGlvbiwgbmFtZSkKKyAgICAgICAgICAgIGlmIHZh
bCBpcyBOb25lIGFuZCBza2lwOgorICAgICAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9y
KG5hbWUpCisgICAgICAgICAgICByZXR1cm4gdmFsCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVF
cnJvcjoKKyAgICAgICAgICAgIGlmIGRlZmF1bHQgaXMgbm90IG5vdHNldDoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZGVmYXVsdAorICAgICAgICAgICAgaWYgc2tpcDoKKyAgICAgICAgICAgICAg
ICBpbXBvcnQgcHl0ZXN0CisgICAgICAgICAgICAgICAgcHl0ZXN0LnNraXAoIm5vICVyIG9wdGlv
biBmb3VuZCIgJShuYW1lLCkpCisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJubyBvcHRp
b24gbmFtZWQgJXIiICUgKG5hbWUsKSkKKworICAgIGRlZiBnZXR2YWx1ZShzZWxmLCBuYW1lLCBw
YXRoPU5vbmUpOgorICAgICAgICAiIiIgKGRlcHJlY2F0ZWQsIHVzZSBnZXRvcHRpb24oKSkgIiIi
CisgICAgICAgIHJldHVybiBzZWxmLmdldG9wdGlvbihuYW1lKQorCisgICAgZGVmIGdldHZhbHVl
b3Jza2lwKHNlbGYsIG5hbWUsIHBhdGg9Tm9uZSk6CisgICAgICAgICIiIiAoZGVwcmVjYXRlZCwg
dXNlIGdldG9wdGlvbihza2lwPVRydWUpKSAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuZ2V0b3B0
aW9uKG5hbWUsIHNraXA9VHJ1ZSkKKworZGVmIGV4aXN0cyhwYXRoLCBpZ25vcmU9RW52aXJvbm1l
bnRFcnJvcik6CisgICAgdHJ5OgorICAgICAgICByZXR1cm4gcGF0aC5jaGVjaygpCisgICAgZXhj
ZXB0IGlnbm9yZToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKK2RlZiBnZXRjZmcoYXJncywgaW5p
YmFzZW5hbWVzKToKKyAgICBhcmdzID0gW3ggZm9yIHggaW4gYXJncyBpZiBub3Qgc3RyKHgpLnN0
YXJ0c3dpdGgoIi0iKV0KKyAgICBpZiBub3QgYXJnczoKKyAgICAgICAgYXJncyA9IFtweS5wYXRo
LmxvY2FsKCldCisgICAgZm9yIGFyZyBpbiBhcmdzOgorICAgICAgICBhcmcgPSBweS5wYXRoLmxv
Y2FsKGFyZykKKyAgICAgICAgZm9yIGJhc2UgaW4gYXJnLnBhcnRzKHJldmVyc2U9VHJ1ZSk6Cisg
ICAgICAgICAgICBmb3IgaW5pYmFzZW5hbWUgaW4gaW5pYmFzZW5hbWVzOgorICAgICAgICAgICAg
ICAgIHAgPSBiYXNlLmpvaW4oaW5pYmFzZW5hbWUpCisgICAgICAgICAgICAgICAgaWYgZXhpc3Rz
KHApOgorICAgICAgICAgICAgICAgICAgICBpbmljb25maWcgPSBweS5pbmljb25maWcuSW5pQ29u
ZmlnKHApCisgICAgICAgICAgICAgICAgICAgIGlmICdweXRlc3QnIGluIGluaWNvbmZpZy5zZWN0
aW9uczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBiYXNlLCBwLCBpbmljb25maWdb
J3B5dGVzdCddCisgICAgICAgICAgICAgICAgICAgIGVsaWYgaW5pYmFzZW5hbWUgPT0gInB5dGVz
dC5pbmkiOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBhbGxvd2VkIHRvIGJlIGVtcHR5Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmFzZSwgcCwge30KKyAgICByZXR1cm4gTm9u
ZSwgTm9uZSwgTm9uZQorCisKK2RlZiBnZXRfY29tbW9uX2FuY2VzdG9yKGFyZ3MpOgorICAgICMg
YXJncyBhcmUgd2hhdCB3ZSBnZXQgYWZ0ZXIgZWFybHkgY29tbWFuZCBsaW5lIHBhcnNpbmcgKHVz
dWFsbHkKKyAgICAjIHN0cmluZ3MsIGJ1dCBjYW4gYmUgcHkucGF0aC5sb2NhbCBvYmplY3RzIGFz
IHdlbGwpCisgICAgY29tbW9uX2FuY2VzdG9yID0gTm9uZQorICAgIGZvciBhcmcgaW4gYXJnczoK
KyAgICAgICAgaWYgc3RyKGFyZylbMF0gPT0gIi0iOgorICAgICAgICAgICAgY29udGludWUKKyAg
ICAgICAgcCA9IHB5LnBhdGgubG9jYWwoYXJnKQorICAgICAgICBpZiBjb21tb25fYW5jZXN0b3Ig
aXMgTm9uZToKKyAgICAgICAgICAgIGNvbW1vbl9hbmNlc3RvciA9IHAKKyAgICAgICAgZWxzZToK
KyAgICAgICAgICAgIGlmIHAucmVsdG8oY29tbW9uX2FuY2VzdG9yKSBvciBwID09IGNvbW1vbl9h
bmNlc3RvcjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZWxpZiBjb21t
b25fYW5jZXN0b3IucmVsdG8ocCk6CisgICAgICAgICAgICAgICAgY29tbW9uX2FuY2VzdG9yID0g
cAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzaGFyZWQgPSBwLmNvbW1vbihj
b21tb25fYW5jZXN0b3IpCisgICAgICAgICAgICAgICAgaWYgc2hhcmVkIGlzIG5vdCBOb25lOgor
ICAgICAgICAgICAgICAgICAgICBjb21tb25fYW5jZXN0b3IgPSBzaGFyZWQKKyAgICBpZiBjb21t
b25fYW5jZXN0b3IgaXMgTm9uZToKKyAgICAgICAgY29tbW9uX2FuY2VzdG9yID0gcHkucGF0aC5s
b2NhbCgpCisgICAgZWxpZiBub3QgY29tbW9uX2FuY2VzdG9yLmlzZGlyKCk6CisgICAgICAgIGNv
bW1vbl9hbmNlc3RvciA9IGNvbW1vbl9hbmNlc3Rvci5kaXJwYXRoKCkKKyAgICByZXR1cm4gY29t
bW9uX2FuY2VzdG9yCisKKworZGVmIGRldGVybWluZV9zZXR1cChpbmlmaWxlLCBhcmdzKToKKyAg
ICBpZiBpbmlmaWxlOgorICAgICAgICBpbmljb25maWcgPSBweS5pbmljb25maWcuSW5pQ29uZmln
KGluaWZpbGUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGluaWNmZyA9IGluaWNvbmZpZ1si
cHl0ZXN0Il0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgaW5pY2ZnID0g
Tm9uZQorICAgICAgICByb290ZGlyID0gZ2V0X2NvbW1vbl9hbmNlc3RvcihhcmdzKQorICAgIGVs
c2U6CisgICAgICAgIGFuY2VzdG9yID0gZ2V0X2NvbW1vbl9hbmNlc3RvcihhcmdzKQorICAgICAg
ICByb290ZGlyLCBpbmlmaWxlLCBpbmljZmcgPSBnZXRjZmcoCisgICAgICAgICAgICBbYW5jZXN0
b3JdLCBbInB5dGVzdC5pbmkiLCAidG94LmluaSIsICJzZXR1cC5jZmciXSkKKyAgICAgICAgaWYg
cm9vdGRpciBpcyBOb25lOgorICAgICAgICAgICAgZm9yIHJvb3RkaXIgaW4gYW5jZXN0b3IucGFy
dHMocmV2ZXJzZT1UcnVlKToKKyAgICAgICAgICAgICAgICBpZiByb290ZGlyLmpvaW4oInNldHVw
LnB5IikuZXhpc3RzKCk6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBl
bHNlOgorICAgICAgICAgICAgICAgIHJvb3RkaXIgPSBhbmNlc3RvcgorICAgIHJldHVybiByb290
ZGlyLCBpbmlmaWxlLCBpbmljZmcgb3Ige30KKworCitkZWYgc2V0bnMob2JqLCBkaWMpOgorICAg
IGltcG9ydCBweXRlc3QKKyAgICBmb3IgbmFtZSwgdmFsdWUgaW4gZGljLml0ZW1zKCk6CisgICAg
ICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGRpY3QpOgorICAgICAgICAgICAgbW9kID0gZ2V0YXR0
cihvYmosIG5hbWUsIE5vbmUpCisgICAgICAgICAgICBpZiBtb2QgaXMgTm9uZToKKyAgICAgICAg
ICAgICAgICBtb2RuYW1lID0gInB5dGVzdC4lcyIgJSBuYW1lCisgICAgICAgICAgICAgICAgbW9k
ID0gdHlwZXMuTW9kdWxlVHlwZShtb2RuYW1lKQorICAgICAgICAgICAgICAgIHN5cy5tb2R1bGVz
W21vZG5hbWVdID0gbW9kCisgICAgICAgICAgICAgICAgbW9kLl9fYWxsX18gPSBbXQorICAgICAg
ICAgICAgICAgIHNldGF0dHIob2JqLCBuYW1lLCBtb2QpCisgICAgICAgICAgICBvYmouX19hbGxf
Xy5hcHBlbmQobmFtZSkKKyAgICAgICAgICAgIHNldG5zKG1vZCwgdmFsdWUpCisgICAgICAgIGVs
c2U6CisgICAgICAgICAgICBzZXRhdHRyKG9iaiwgbmFtZSwgdmFsdWUpCisgICAgICAgICAgICBv
YmouX19hbGxfXy5hcHBlbmQobmFtZSkKKyAgICAgICAgICAgICNpZiBvYmogIT0gcHl0ZXN0Ogor
ICAgICAgICAgICAgIyAgICBweXRlc3QuX19hbGxfXy5hcHBlbmQobmFtZSkKKyAgICAgICAgICAg
IHNldGF0dHIocHl0ZXN0LCBuYW1lLCB2YWx1ZSkKKworCitkZWYgY3JlYXRlX3Rlcm1pbmFsX3dy
aXRlcihjb25maWcsICphcmdzLCAqKmt3YXJncyk6CisgICAgIiIiQ3JlYXRlIGEgVGVybWluYWxX
cml0ZXIgaW5zdGFuY2UgY29uZmlndXJlZCBhY2NvcmRpbmcgdG8gdGhlIG9wdGlvbnMKKyAgICBp
biB0aGUgY29uZmlnIG9iamVjdC4gRXZlcnkgY29kZSB3aGljaCByZXF1aXJlcyBhIFRlcm1pbmFs
V3JpdGVyIG9iamVjdAorICAgIGFuZCBoYXMgYWNjZXNzIHRvIGEgY29uZmlnIG9iamVjdCBzaG91
bGQgdXNlIHRoaXMgZnVuY3Rpb24uCisgICAgIiIiCisgICAgdHcgPSBweS5pby5UZXJtaW5hbFdy
aXRlcigqYXJncywgKiprd2FyZ3MpCisgICAgaWYgY29uZmlnLm9wdGlvbi5jb2xvciA9PSAneWVz
JzoKKyAgICAgICAgdHcuaGFzbWFya3VwID0gVHJ1ZQorICAgIGlmIGNvbmZpZy5vcHRpb24uY29s
b3IgPT0gJ25vJzoKKyAgICAgICAgdHcuaGFzbWFya3VwID0gRmFsc2UKKyAgICByZXR1cm4gdHcK
KworCitkZWYgX3N0cnRvYm9vbCh2YWwpOgorICAgICIiIkNvbnZlcnQgYSBzdHJpbmcgcmVwcmVz
ZW50YXRpb24gb2YgdHJ1dGggdG8gdHJ1ZSAoMSkgb3IgZmFsc2UgKDApLgorCisgICAgVHJ1ZSB2
YWx1ZXMgYXJlICd5JywgJ3llcycsICd0JywgJ3RydWUnLCAnb24nLCBhbmQgJzEnOyBmYWxzZSB2
YWx1ZXMKKyAgICBhcmUgJ24nLCAnbm8nLCAnZicsICdmYWxzZScsICdvZmYnLCBhbmQgJzAnLiAg
UmFpc2VzIFZhbHVlRXJyb3IgaWYKKyAgICAndmFsJyBpcyBhbnl0aGluZyBlbHNlLgorCisgICAg
Li4gbm90ZTo6IGNvcGllZCBmcm9tIGRpc3R1dGlscy51dGlsCisgICAgIiIiCisgICAgdmFsID0g
dmFsLmxvd2VyKCkKKyAgICBpZiB2YWwgaW4gKCd5JywgJ3llcycsICd0JywgJ3RydWUnLCAnb24n
LCAnMScpOgorICAgICAgICByZXR1cm4gMQorICAgIGVsaWYgdmFsIGluICgnbicsICdubycsICdm
JywgJ2ZhbHNlJywgJ29mZicsICcwJyk6CisgICAgICAgIHJldHVybiAwCisgICAgZWxzZToKKyAg
ICAgICAgcmFpc2UgVmFsdWVFcnJvcigiaW52YWxpZCB0cnV0aCB2YWx1ZSAlciIgJSAodmFsLCkp
CmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19w
eXRlc3QvZG9jdGVzdC5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRl
c3QvX3B5dGVzdC9kb2N0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi5hNTdmN2E0OTQ5ZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9y
dGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9kb2N0ZXN0LnB5CkBAIC0wLDAgKzEsMjkwIEBA
CisiIiIgZGlzY292ZXIgYW5kIHJ1biBkb2N0ZXN0cyBpbiBtb2R1bGVzIGFuZCB0ZXN0IGZpbGVz
LiIiIgorZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKKworaW1wb3J0IHRy
YWNlYmFjaworCitpbXBvcnQgcHl0ZXN0Citmcm9tIF9weXRlc3QuX2NvZGUuY29kZSBpbXBvcnQg
VGVybWluYWxSZXByLCBSZXByRmlsZUxvY2F0aW9uLCBFeGNlcHRpb25JbmZvCitmcm9tIF9weXRl
c3QucHl0aG9uIGltcG9ydCBGaXh0dXJlUmVxdWVzdAorCisKKworZGVmIHB5dGVzdF9hZGRvcHRp
b24ocGFyc2VyKToKKyAgICBwYXJzZXIuYWRkaW5pKCdkb2N0ZXN0X29wdGlvbmZsYWdzJywgJ29w
dGlvbiBmbGFncyBmb3IgZG9jdGVzdHMnLAorICAgICAgICB0eXBlPSJhcmdzIiwgZGVmYXVsdD1b
IkVMTElQU0lTIl0pCisgICAgZ3JvdXAgPSBwYXJzZXIuZ2V0Z3JvdXAoImNvbGxlY3QiKQorICAg
IGdyb3VwLmFkZG9wdGlvbigiLS1kb2N0ZXN0LW1vZHVsZXMiLAorICAgICAgICBhY3Rpb249InN0
b3JlX3RydWUiLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICBoZWxwPSJydW4gZG9jdGVzdHMgaW4g
YWxsIC5weSBtb2R1bGVzIiwKKyAgICAgICAgZGVzdD0iZG9jdGVzdG1vZHVsZXMiKQorICAgIGdy
b3VwLmFkZG9wdGlvbigiLS1kb2N0ZXN0LWdsb2IiLAorICAgICAgICBhY3Rpb249ImFwcGVuZCIs
IGRlZmF1bHQ9W10sIG1ldGF2YXI9InBhdCIsCisgICAgICAgIGhlbHA9ImRvY3Rlc3RzIGZpbGUg
bWF0Y2hpbmcgcGF0dGVybiwgZGVmYXVsdDogdGVzdCoudHh0IiwKKyAgICAgICAgZGVzdD0iZG9j
dGVzdGdsb2IiKQorICAgIGdyb3VwLmFkZG9wdGlvbigiLS1kb2N0ZXN0LWlnbm9yZS1pbXBvcnQt
ZXJyb3JzIiwKKyAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVmYXVsdD1GYWxzZSwKKyAg
ICAgICAgaGVscD0iaWdub3JlIGRvY3Rlc3QgSW1wb3J0RXJyb3JzIiwKKyAgICAgICAgZGVzdD0i
ZG9jdGVzdF9pZ25vcmVfaW1wb3J0X2Vycm9ycyIpCisKKworZGVmIHB5dGVzdF9jb2xsZWN0X2Zp
bGUocGF0aCwgcGFyZW50KToKKyAgICBjb25maWcgPSBwYXJlbnQuY29uZmlnCisgICAgaWYgcGF0
aC5leHQgPT0gIi5weSI6CisgICAgICAgIGlmIGNvbmZpZy5vcHRpb24uZG9jdGVzdG1vZHVsZXM6
CisgICAgICAgICAgICByZXR1cm4gRG9jdGVzdE1vZHVsZShwYXRoLCBwYXJlbnQpCisgICAgZWxp
ZiBfaXNfZG9jdGVzdChjb25maWcsIHBhdGgsIHBhcmVudCk6CisgICAgICAgIHJldHVybiBEb2N0
ZXN0VGV4dGZpbGUocGF0aCwgcGFyZW50KQorCisKK2RlZiBfaXNfZG9jdGVzdChjb25maWcsIHBh
dGgsIHBhcmVudCk6CisgICAgaWYgcGF0aC5leHQgaW4gKCcudHh0JywgJy5yc3QnKSBhbmQgcGFy
ZW50LnNlc3Npb24uaXNpbml0cGF0aChwYXRoKToKKyAgICAgICAgcmV0dXJuIFRydWUKKyAgICBn
bG9icyA9IGNvbmZpZy5nZXRvcHRpb24oImRvY3Rlc3RnbG9iIikgb3IgWyd0ZXN0Ki50eHQnXQor
ICAgIGZvciBnbG9iIGluIGdsb2JzOgorICAgICAgICBpZiBwYXRoLmNoZWNrKGZubWF0Y2g9Z2xv
Yik6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgIHJldHVybiBGYWxzZQorCisKK2NsYXNz
IFJlcHJGYWlsRG9jdGVzdChUZXJtaW5hbFJlcHIpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYs
IHJlcHJsb2NhdGlvbiwgbGluZXMpOgorICAgICAgICBzZWxmLnJlcHJsb2NhdGlvbiA9IHJlcHJs
b2NhdGlvbgorICAgICAgICBzZWxmLmxpbmVzID0gbGluZXMKKworICAgIGRlZiB0b3Rlcm1pbmFs
KHNlbGYsIHR3KToKKyAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5saW5lczoKKyAgICAgICAgICAg
IHR3LmxpbmUobGluZSkKKyAgICAgICAgc2VsZi5yZXBybG9jYXRpb24udG90ZXJtaW5hbCh0dykK
KworCitjbGFzcyBEb2N0ZXN0SXRlbShweXRlc3QuSXRlbSk6CisKKyAgICBkZWYgX19pbml0X18o
c2VsZiwgbmFtZSwgcGFyZW50LCBydW5uZXI9Tm9uZSwgZHRlc3Q9Tm9uZSk6CisgICAgICAgIHN1
cGVyKERvY3Rlc3RJdGVtLCBzZWxmKS5fX2luaXRfXyhuYW1lLCBwYXJlbnQpCisgICAgICAgIHNl
bGYucnVubmVyID0gcnVubmVyCisgICAgICAgIHNlbGYuZHRlc3QgPSBkdGVzdAorICAgICAgICBz
ZWxmLm9iaiA9IE5vbmUKKyAgICAgICAgc2VsZi5maXh0dXJlX3JlcXVlc3QgPSBOb25lCisKKyAg
ICBkZWYgc2V0dXAoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZHRlc3QgaXMgbm90IE5vbmU6Cisg
ICAgICAgICAgICBzZWxmLmZpeHR1cmVfcmVxdWVzdCA9IF9zZXR1cF9maXh0dXJlcyhzZWxmKQor
ICAgICAgICAgICAgZ2xvYnMgPSBkaWN0KGdldGZpeHR1cmU9c2VsZi5maXh0dXJlX3JlcXVlc3Qu
Z2V0ZnVuY2FyZ3ZhbHVlKQorICAgICAgICAgICAgc2VsZi5kdGVzdC5nbG9icy51cGRhdGUoZ2xv
YnMpCisKKyAgICBkZWYgcnVudGVzdChzZWxmKToKKyAgICAgICAgX2NoZWNrX2FsbF9za2lwcGVk
KHNlbGYuZHRlc3QpCisgICAgICAgIHNlbGYucnVubmVyLnJ1bihzZWxmLmR0ZXN0KQorCisgICAg
ZGVmIHJlcHJfZmFpbHVyZShzZWxmLCBleGNpbmZvKToKKyAgICAgICAgaW1wb3J0IGRvY3Rlc3QK
KyAgICAgICAgaWYgZXhjaW5mby5lcnJpc2luc3RhbmNlKChkb2N0ZXN0LkRvY1Rlc3RGYWlsdXJl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3Rlc3QuVW5leHBlY3RlZEV4
Y2VwdGlvbikpOgorICAgICAgICAgICAgZG9jdGVzdGZhaWx1cmUgPSBleGNpbmZvLnZhbHVlCisg
ICAgICAgICAgICBleGFtcGxlID0gZG9jdGVzdGZhaWx1cmUuZXhhbXBsZQorICAgICAgICAgICAg
dGVzdCA9IGRvY3Rlc3RmYWlsdXJlLnRlc3QKKyAgICAgICAgICAgIGZpbGVuYW1lID0gdGVzdC5m
aWxlbmFtZQorICAgICAgICAgICAgaWYgdGVzdC5saW5lbm8gaXMgTm9uZToKKyAgICAgICAgICAg
ICAgICBsaW5lbm8gPSBOb25lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxp
bmVubyA9IHRlc3QubGluZW5vICsgZXhhbXBsZS5saW5lbm8gKyAxCisgICAgICAgICAgICBtZXNz
YWdlID0gZXhjaW5mby50eXBlLl9fbmFtZV9fCisgICAgICAgICAgICByZXBybG9jYXRpb24gPSBS
ZXByRmlsZUxvY2F0aW9uKGZpbGVuYW1lLCBsaW5lbm8sIG1lc3NhZ2UpCisgICAgICAgICAgICBj
aGVja2VyID0gX2dldF9jaGVja2VyKCkKKyAgICAgICAgICAgIFJFUE9SVF9VRElGRiA9IGRvY3Rl
c3QuUkVQT1JUX1VESUZGCisgICAgICAgICAgICBpZiBsaW5lbm8gaXMgbm90IE5vbmU6CisgICAg
ICAgICAgICAgICAgbGluZXMgPSBkb2N0ZXN0ZmFpbHVyZS50ZXN0LmRvY3N0cmluZy5zcGxpdGxp
bmVzKEZhbHNlKQorICAgICAgICAgICAgICAgICMgYWRkIGxpbmUgbnVtYmVycyB0byB0aGUgbGVm
dCBvZiB0aGUgZXJyb3IgbWVzc2FnZQorICAgICAgICAgICAgICAgIGxpbmVzID0gWyIlMDNkICVz
IiAlIChpICsgdGVzdC5saW5lbm8gKyAxLCB4KQorICAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAoaSwgeCkgaW4gZW51bWVyYXRlKGxpbmVzKV0KKyAgICAgICAgICAgICAgICAjIHRyaW0gZG9j
c3RyaW5nIGVycm9yIGxpbmVzIHRvIDEwCisgICAgICAgICAgICAgICAgbGluZXMgPSBsaW5lc1tl
eGFtcGxlLmxpbmVubyAtIDk6ZXhhbXBsZS5saW5lbm8gKyAxXQorICAgICAgICAgICAgZWxzZToK
KyAgICAgICAgICAgICAgICBsaW5lcyA9IFsnRVhBTVBMRSBMT0NBVElPTiBVTktOT1dOLCBub3Qg
c2hvd2luZyBhbGwgdGVzdHMgb2YgdGhhdCBleGFtcGxlJ10KKyAgICAgICAgICAgICAgICBpbmRl
bnQgPSAnPj4+JworICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGV4YW1wbGUuc291cmNlLnNw
bGl0bGluZXMoKToKKyAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCc/Pz8gJXMgJXMn
ICUgKGluZGVudCwgbGluZSkpCisgICAgICAgICAgICAgICAgICAgIGluZGVudCA9ICcuLi4nCisg
ICAgICAgICAgICBpZiBleGNpbmZvLmVycmlzaW5zdGFuY2UoZG9jdGVzdC5Eb2NUZXN0RmFpbHVy
ZSk6CisgICAgICAgICAgICAgICAgbGluZXMgKz0gY2hlY2tlci5vdXRwdXRfZGlmZmVyZW5jZShl
eGFtcGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgZG9jdGVzdGZhaWx1cmUuZ290LCBSRVBP
UlRfVURJRkYpLnNwbGl0KCJcbiIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg
IGlubmVyX2V4Y2luZm8gPSBFeGNlcHRpb25JbmZvKGV4Y2luZm8udmFsdWUuZXhjX2luZm8pCisg
ICAgICAgICAgICAgICAgbGluZXMgKz0gWyJVTkVYUEVDVEVEIEVYQ0VQVElPTjogJXMiICUKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXByKGlubmVyX2V4Y2luZm8udmFsdWUpXQorICAg
ICAgICAgICAgICAgIGxpbmVzICs9IHRyYWNlYmFjay5mb3JtYXRfZXhjZXB0aW9uKCpleGNpbmZv
LnZhbHVlLmV4Y19pbmZvKQorICAgICAgICAgICAgcmV0dXJuIFJlcHJGYWlsRG9jdGVzdChyZXBy
bG9jYXRpb24sIGxpbmVzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHN1cGVy
KERvY3Rlc3RJdGVtLCBzZWxmKS5yZXByX2ZhaWx1cmUoZXhjaW5mbykKKworICAgIGRlZiByZXBv
cnRpbmZvKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5mc3BhdGgsIE5vbmUsICJbZG9jdGVz
dF0gJXMiICUgc2VsZi5uYW1lCisKKworZGVmIF9nZXRfZmxhZ19sb29rdXAoKToKKyAgICBpbXBv
cnQgZG9jdGVzdAorICAgIHJldHVybiBkaWN0KERPTlRfQUNDRVBUX1RSVUVfRk9SXzE9ZG9jdGVz
dC5ET05UX0FDQ0VQVF9UUlVFX0ZPUl8xLAorICAgICAgICAgICAgICAgIERPTlRfQUNDRVBUX0JM
QU5LTElORT1kb2N0ZXN0LkRPTlRfQUNDRVBUX0JMQU5LTElORSwKKyAgICAgICAgICAgICAgICBO
T1JNQUxJWkVfV0hJVEVTUEFDRT1kb2N0ZXN0Lk5PUk1BTElaRV9XSElURVNQQUNFLAorICAgICAg
ICAgICAgICAgIEVMTElQU0lTPWRvY3Rlc3QuRUxMSVBTSVMsCisgICAgICAgICAgICAgICAgSUdO
T1JFX0VYQ0VQVElPTl9ERVRBSUw9ZG9jdGVzdC5JR05PUkVfRVhDRVBUSU9OX0RFVEFJTCwKKyAg
ICAgICAgICAgICAgICBDT01QQVJJU09OX0ZMQUdTPWRvY3Rlc3QuQ09NUEFSSVNPTl9GTEFHUywK
KyAgICAgICAgICAgICAgICBBTExPV19VTklDT0RFPV9nZXRfYWxsb3dfdW5pY29kZV9mbGFnKCks
CisgICAgICAgICAgICAgICAgQUxMT1dfQllURVM9X2dldF9hbGxvd19ieXRlc19mbGFnKCksCisg
ICAgICAgICAgICAgICAgKQorCisKK2RlZiBnZXRfb3B0aW9uZmxhZ3MocGFyZW50KToKKyAgICBv
cHRpb25mbGFnc19zdHIgPSBwYXJlbnQuY29uZmlnLmdldGluaSgiZG9jdGVzdF9vcHRpb25mbGFn
cyIpCisgICAgZmxhZ19sb29rdXBfdGFibGUgPSBfZ2V0X2ZsYWdfbG9va3VwKCkKKyAgICBmbGFn
X2FjYyA9IDAKKyAgICBmb3IgZmxhZyBpbiBvcHRpb25mbGFnc19zdHI6CisgICAgICAgIGZsYWdf
YWNjIHw9IGZsYWdfbG9va3VwX3RhYmxlW2ZsYWddCisgICAgcmV0dXJuIGZsYWdfYWNjCisKKwor
Y2xhc3MgRG9jdGVzdFRleHRmaWxlKERvY3Rlc3RJdGVtLCBweXRlc3QuTW9kdWxlKToKKworICAg
IGRlZiBydW50ZXN0KHNlbGYpOgorICAgICAgICBpbXBvcnQgZG9jdGVzdAorICAgICAgICBmaXh0
dXJlX3JlcXVlc3QgPSBfc2V0dXBfZml4dHVyZXMoc2VsZikKKworICAgICAgICAjIGluc3BpcmVk
IGJ5IGRvY3Rlc3QudGVzdGZpbGU7IGlkZWFsbHkgd2Ugd291bGQgdXNlIGl0IGRpcmVjdGx5LAor
ICAgICAgICAjIGJ1dCBpdCBkb2Vzbid0IHN1cHBvcnQgcGFzc2luZyBhIGN1c3RvbSBjaGVja2Vy
CisgICAgICAgIHRleHQgPSBzZWxmLmZzcGF0aC5yZWFkKCkKKyAgICAgICAgZmlsZW5hbWUgPSBz
dHIoc2VsZi5mc3BhdGgpCisgICAgICAgIG5hbWUgPSBzZWxmLmZzcGF0aC5iYXNlbmFtZQorICAg
ICAgICBnbG9icyA9IGRpY3QoZ2V0Zml4dHVyZT1maXh0dXJlX3JlcXVlc3QuZ2V0ZnVuY2FyZ3Zh
bHVlKQorICAgICAgICBpZiAnX19uYW1lX18nIG5vdCBpbiBnbG9iczoKKyAgICAgICAgICAgIGds
b2JzWydfX25hbWVfXyddID0gJ19fbWFpbl9fJworCisgICAgICAgIG9wdGlvbmZsYWdzID0gZ2V0
X29wdGlvbmZsYWdzKHNlbGYpCisgICAgICAgIHJ1bm5lciA9IGRvY3Rlc3QuRGVidWdSdW5uZXIo
dmVyYm9zZT0wLCBvcHRpb25mbGFncz1vcHRpb25mbGFncywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjaGVja2VyPV9nZXRfY2hlY2tlcigpKQorCisgICAgICAgIHBhcnNl
ciA9IGRvY3Rlc3QuRG9jVGVzdFBhcnNlcigpCisgICAgICAgIHRlc3QgPSBwYXJzZXIuZ2V0X2Rv
Y3Rlc3QodGV4dCwgZ2xvYnMsIG5hbWUsIGZpbGVuYW1lLCAwKQorICAgICAgICBfY2hlY2tfYWxs
X3NraXBwZWQodGVzdCkKKyAgICAgICAgcnVubmVyLnJ1bih0ZXN0KQorCisKK2RlZiBfY2hlY2tf
YWxsX3NraXBwZWQodGVzdCk6CisgICAgIiIicmFpc2VzIHB5dGVzdC5za2lwKCkgaWYgYWxsIGV4
YW1wbGVzIGluIHRoZSBnaXZlbiBEb2NUZXN0IGhhdmUgdGhlIFNLSVAKKyAgICBvcHRpb24gc2V0
LgorICAgICIiIgorICAgIGltcG9ydCBkb2N0ZXN0CisgICAgYWxsX3NraXBwZWQgPSBhbGwoeC5v
cHRpb25zLmdldChkb2N0ZXN0LlNLSVAsIEZhbHNlKSBmb3IgeCBpbiB0ZXN0LmV4YW1wbGVzKQor
ICAgIGlmIGFsbF9za2lwcGVkOgorICAgICAgICBweXRlc3Quc2tpcCgnYWxsIHRlc3RzIHNraXBw
ZWQgYnkgK1NLSVAgb3B0aW9uJykKKworCitjbGFzcyBEb2N0ZXN0TW9kdWxlKHB5dGVzdC5Nb2R1
bGUpOgorICAgIGRlZiBjb2xsZWN0KHNlbGYpOgorICAgICAgICBpbXBvcnQgZG9jdGVzdAorICAg
ICAgICBpZiBzZWxmLmZzcGF0aC5iYXNlbmFtZSA9PSAiY29uZnRlc3QucHkiOgorICAgICAgICAg
ICAgbW9kdWxlID0gc2VsZi5jb25maWcucGx1Z2lubWFuYWdlci5faW1wb3J0Y29uZnRlc3Qoc2Vs
Zi5mc3BhdGgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAg
ICAgbW9kdWxlID0gc2VsZi5mc3BhdGgucHlpbXBvcnQoKQorICAgICAgICAgICAgZXhjZXB0IElt
cG9ydEVycm9yOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuY29uZmlnLmdldHZhbHVlKCdkb2N0
ZXN0X2lnbm9yZV9pbXBvcnRfZXJyb3JzJyk6CisgICAgICAgICAgICAgICAgICAgIHB5dGVzdC5z
a2lwKCd1bmFibGUgdG8gaW1wb3J0IG1vZHVsZSAlcicgJSBzZWxmLmZzcGF0aCkKKyAgICAgICAg
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAjIHVzZXMg
aW50ZXJuYWwgZG9jdGVzdCBtb2R1bGUgcGFyc2luZyBtZWNoYW5pc20KKyAgICAgICAgZmluZGVy
ID0gZG9jdGVzdC5Eb2NUZXN0RmluZGVyKCkKKyAgICAgICAgb3B0aW9uZmxhZ3MgPSBnZXRfb3B0
aW9uZmxhZ3Moc2VsZikKKyAgICAgICAgcnVubmVyID0gZG9jdGVzdC5EZWJ1Z1J1bm5lcih2ZXJi
b3NlPTAsIG9wdGlvbmZsYWdzPW9wdGlvbmZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNoZWNrZXI9X2dldF9jaGVja2VyKCkpCisgICAgICAgIGZvciB0ZXN0IGlu
IGZpbmRlci5maW5kKG1vZHVsZSwgbW9kdWxlLl9fbmFtZV9fKToKKyAgICAgICAgICAgIGlmIHRl
c3QuZXhhbXBsZXM6ICAjIHNraXAgZW1wdHkgZG9jdGVzdHMKKyAgICAgICAgICAgICAgICB5aWVs
ZCBEb2N0ZXN0SXRlbSh0ZXN0Lm5hbWUsIHNlbGYsIHJ1bm5lciwgdGVzdCkKKworCitkZWYgX3Nl
dHVwX2ZpeHR1cmVzKGRvY3Rlc3RfaXRlbSk6CisgICAgIiIiCisgICAgVXNlZCBieSBEb2N0ZXN0
VGV4dGZpbGUgYW5kIERvY3Rlc3RJdGVtIHRvIHNldHVwIGZpeHR1cmUgaW5mb3JtYXRpb24uCisg
ICAgIiIiCisgICAgZGVmIGZ1bmMoKToKKyAgICAgICAgcGFzcworCisgICAgZG9jdGVzdF9pdGVt
LmZ1bmNhcmdzID0ge30KKyAgICBmbSA9IGRvY3Rlc3RfaXRlbS5zZXNzaW9uLl9maXh0dXJlbWFu
YWdlcgorICAgIGRvY3Rlc3RfaXRlbS5fZml4dHVyZWluZm8gPSBmbS5nZXRmaXh0dXJlaW5mbyhu
b2RlPWRvY3Rlc3RfaXRlbSwgZnVuYz1mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjbHM9Tm9uZSwgZnVuY2FyZ3M9RmFsc2UpCisgICAgZml4
dHVyZV9yZXF1ZXN0ID0gRml4dHVyZVJlcXVlc3QoZG9jdGVzdF9pdGVtKQorICAgIGZpeHR1cmVf
cmVxdWVzdC5fZmlsbGZpeHR1cmVzKCkKKyAgICByZXR1cm4gZml4dHVyZV9yZXF1ZXN0CisKKwor
ZGVmIF9nZXRfY2hlY2tlcigpOgorICAgICIiIgorICAgIFJldHVybnMgYSBkb2N0ZXN0Lk91dHB1
dENoZWNrZXIgc3ViY2xhc3MgdGhhdCB0YWtlcyBpbiBhY2NvdW50IHRoZQorICAgIEFMTE9XX1VO
SUNPREUgb3B0aW9uIHRvIGlnbm9yZSB1JycgcHJlZml4ZXMgaW4gc3RyaW5ncyBhbmQgQUxMT1df
QllURVMKKyAgICB0byBzdHJpcCBiJycgcHJlZml4ZXMuCisgICAgVXNlZnVsIHdoZW4gdGhlIHNh
bWUgZG9jdGVzdCBzaG91bGQgcnVuIGluIFB5dGhvbiAyIGFuZCBQeXRob24gMy4KKworICAgIEFu
IGlubmVyIGNsYXNzIGlzIHVzZWQgdG8gYXZvaWQgaW1wb3J0aW5nICJkb2N0ZXN0IiBhdCB0aGUg
bW9kdWxlCisgICAgbGV2ZWwuCisgICAgIiIiCisgICAgaWYgaGFzYXR0cihfZ2V0X2NoZWNrZXIs
ICdMaXRlcmFsc091dHB1dENoZWNrZXInKToKKyAgICAgICAgcmV0dXJuIF9nZXRfY2hlY2tlci5M
aXRlcmFsc091dHB1dENoZWNrZXIoKQorCisgICAgaW1wb3J0IGRvY3Rlc3QKKyAgICBpbXBvcnQg
cmUKKworICAgIGNsYXNzIExpdGVyYWxzT3V0cHV0Q2hlY2tlcihkb2N0ZXN0Lk91dHB1dENoZWNr
ZXIpOgorICAgICAgICAiIiIKKyAgICAgICAgQ29waWVkIGZyb20gZG9jdGVzdF9ub3NlX3BsdWdp
bi5weSBmcm9tIHRoZSBubHRrIHByb2plY3Q6CisgICAgICAgICAgICBodHRwczovL2dpdGh1Yi5j
b20vbmx0ay9ubHRrCisKKyAgICAgICAgRnVydGhlciBleHRlbmRlZCB0byBhbHNvIHN1cHBvcnQg
Ynl0ZSBsaXRlcmFscy4KKyAgICAgICAgIiIiCisKKyAgICAgICAgX3VuaWNvZGVfbGl0ZXJhbF9y
ZSA9IHJlLmNvbXBpbGUociIoXFd8XilbdVVdKFtyUl0/W1wnXCJdKSIsIHJlLlVOSUNPREUpCisg
ICAgICAgIF9ieXRlc19saXRlcmFsX3JlID0gcmUuY29tcGlsZShyIihcV3xeKVtiQl0oW3JSXT9b
XCdcIl0pIiwgcmUuVU5JQ09ERSkKKworICAgICAgICBkZWYgY2hlY2tfb3V0cHV0KHNlbGYsIHdh
bnQsIGdvdCwgb3B0aW9uZmxhZ3MpOgorICAgICAgICAgICAgcmVzID0gZG9jdGVzdC5PdXRwdXRD
aGVja2VyLmNoZWNrX291dHB1dChzZWxmLCB3YW50LCBnb3QsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmZsYWdzKQorICAgICAgICAg
ICAgaWYgcmVzOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgICAgIGFs
bG93X3VuaWNvZGUgPSBvcHRpb25mbGFncyAmIF9nZXRfYWxsb3dfdW5pY29kZV9mbGFnKCkKKyAg
ICAgICAgICAgIGFsbG93X2J5dGVzID0gb3B0aW9uZmxhZ3MgJiBfZ2V0X2FsbG93X2J5dGVzX2Zs
YWcoKQorICAgICAgICAgICAgaWYgbm90IGFsbG93X3VuaWNvZGUgYW5kIG5vdCBhbGxvd19ieXRl
czoKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICAgICAgZWxzZTogICMg
cHJhZ21hOiBubyBjb3ZlcgorICAgICAgICAgICAgICAgIGRlZiByZW1vdmVfcHJlZml4ZXMocmVn
ZXgsIHR4dCk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZS5zdWIocmVnZXgsIHInXDFc
MicsIHR4dCkKKworICAgICAgICAgICAgICAgIGlmIGFsbG93X3VuaWNvZGU6CisgICAgICAgICAg
ICAgICAgICAgIHdhbnQgPSByZW1vdmVfcHJlZml4ZXMoc2VsZi5fdW5pY29kZV9saXRlcmFsX3Jl
LCB3YW50KQorICAgICAgICAgICAgICAgICAgICBnb3QgPSByZW1vdmVfcHJlZml4ZXMoc2VsZi5f
dW5pY29kZV9saXRlcmFsX3JlLCBnb3QpCisgICAgICAgICAgICAgICAgaWYgYWxsb3dfYnl0ZXM6
CisgICAgICAgICAgICAgICAgICAgIHdhbnQgPSByZW1vdmVfcHJlZml4ZXMoc2VsZi5fYnl0ZXNf
bGl0ZXJhbF9yZSwgd2FudCkKKyAgICAgICAgICAgICAgICAgICAgZ290ID0gcmVtb3ZlX3ByZWZp
eGVzKHNlbGYuX2J5dGVzX2xpdGVyYWxfcmUsIGdvdCkKKyAgICAgICAgICAgICAgICByZXMgPSBk
b2N0ZXN0Lk91dHB1dENoZWNrZXIuY2hlY2tfb3V0cHV0KHNlbGYsIHdhbnQsIGdvdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlv
bmZsYWdzKQorICAgICAgICAgICAgICAgIHJldHVybiByZXMKKworICAgIF9nZXRfY2hlY2tlci5M
aXRlcmFsc091dHB1dENoZWNrZXIgPSBMaXRlcmFsc091dHB1dENoZWNrZXIKKyAgICByZXR1cm4g
X2dldF9jaGVja2VyLkxpdGVyYWxzT3V0cHV0Q2hlY2tlcigpCisKKworZGVmIF9nZXRfYWxsb3df
dW5pY29kZV9mbGFnKCk6CisgICAgIiIiCisgICAgUmVnaXN0ZXJzIGFuZCByZXR1cm5zIHRoZSBB
TExPV19VTklDT0RFIGZsYWcuCisgICAgIiIiCisgICAgaW1wb3J0IGRvY3Rlc3QKKyAgICByZXR1
cm4gZG9jdGVzdC5yZWdpc3Rlcl9vcHRpb25mbGFnKCdBTExPV19VTklDT0RFJykKKworCitkZWYg
X2dldF9hbGxvd19ieXRlc19mbGFnKCk6CisgICAgIiIiCisgICAgUmVnaXN0ZXJzIGFuZCByZXR1
cm5zIHRoZSBBTExPV19CWVRFUyBmbGFnLgorICAgICIiIgorICAgIGltcG9ydCBkb2N0ZXN0Cisg
ICAgcmV0dXJuIGRvY3Rlc3QucmVnaXN0ZXJfb3B0aW9uZmxhZygnQUxMT1dfQllURVMnKQpkaWZm
IC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0
L2dlbnNjcmlwdC5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3Qv
X3B5dGVzdC9nZW5zY3JpcHQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLmQyOTYyZDhmYzgyCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0
ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L2dlbnNjcmlwdC5weQpAQCAtMCwwICsxLDEzMiBA
QAorIiIiIChkZXByZWNhdGVkKSBnZW5lcmF0ZSBhIHNpbmdsZS1maWxlIHNlbGYtY29udGFpbmVk
IHZlcnNpb24gb2YgcHl0ZXN0ICIiIgoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgcGtn
dXRpbAorCitpbXBvcnQgcHkKK2ltcG9ydCBfcHl0ZXN0CisKKworCitkZWYgZmluZF90b3BsZXZl
bChuYW1lKToKKyAgICBmb3Igc3lzcGF0aCBpbiBzeXMucGF0aDoKKyAgICAgICAgYmFzZSA9IHB5
LnBhdGgubG9jYWwoc3lzcGF0aCkKKyAgICAgICAgbGliID0gYmFzZS9uYW1lCisgICAgICAgIGlm
IGxpYi5jaGVjayhkaXI9MSk6CisgICAgICAgICAgICByZXR1cm4gbGliCisgICAgICAgIG1vZCA9
IGJhc2Uuam9pbigiJXMucHkiICUgbmFtZSkKKyAgICAgICAgaWYgbW9kLmNoZWNrKGZpbGU9MSk6
CisgICAgICAgICAgICByZXR1cm4gbW9kCisgICAgcmFpc2UgTG9va3VwRXJyb3IobmFtZSkKKwor
ZGVmIHBrZ25hbWUodG9wbGV2ZWwsIHJvb3RwYXRoLCBwYXRoKToKKyAgICBwYXJ0cyA9IHBhdGgu
cGFydHMoKVtsZW4ocm9vdHBhdGgucGFydHMoKSk6XQorICAgIHJldHVybiAnLicuam9pbihbdG9w
bGV2ZWxdICsgW3gucHVyZWJhc2VuYW1lIGZvciB4IGluIHBhcnRzXSkKKworZGVmIHBrZ190b19t
YXBwaW5nKG5hbWUpOgorICAgIHRvcGxldmVsID0gZmluZF90b3BsZXZlbChuYW1lKQorICAgIG5h
bWUyc3JjID0ge30KKyAgICBpZiB0b3BsZXZlbC5jaGVjayhmaWxlPTEpOiAjIG1vZHVsZQorICAg
ICAgICBuYW1lMnNyY1t0b3BsZXZlbC5wdXJlYmFzZW5hbWVdID0gdG9wbGV2ZWwucmVhZCgpCisg
ICAgZWxzZTogIyBwYWNrYWdlCisgICAgICAgIGZvciBweWZpbGUgaW4gdG9wbGV2ZWwudmlzaXQo
JyoucHknKToKKyAgICAgICAgICAgIHBrZyA9IHBrZ25hbWUobmFtZSwgdG9wbGV2ZWwsIHB5Zmls
ZSkKKyAgICAgICAgICAgIG5hbWUyc3JjW3BrZ10gPSBweWZpbGUucmVhZCgpCisgICAgICAgICMg
d2l0aCB3aGVlbHMgcHkgc291cmNlIGNvZGUgbWlnaHQgYmUgbm90IGJlIGluc3RhbGxlZAorICAg
ICAgICAjIGFuZCB0aGUgcmVzdWx0aW5nIGdlbnNjcmlwdCBpcyB1c2VsZXNzLCBqdXN0IGJhaWwg
b3V0LgorICAgICAgICBhc3NlcnQgbmFtZTJzcmMsICJubyBzb3VyY2UgY29kZSBmb3VuZCBmb3Ig
JXIgYXQgJXIiICUobmFtZSwgdG9wbGV2ZWwpCisgICAgcmV0dXJuIG5hbWUyc3JjCisKK2RlZiBj
b21wcmVzc19tYXBwaW5nKG1hcHBpbmcpOgorICAgIGltcG9ydCBiYXNlNjQsIHBpY2tsZSwgemxp
YgorICAgIGRhdGEgPSBwaWNrbGUuZHVtcHMobWFwcGluZywgMikKKyAgICBkYXRhID0gemxpYi5j
b21wcmVzcyhkYXRhLCA5KQorICAgIGRhdGEgPSBiYXNlNjQuZW5jb2Rlc3RyaW5nKGRhdGEpCisg
ICAgZGF0YSA9IGRhdGEuZGVjb2RlKCdhc2NpaScpCisgICAgcmV0dXJuIGRhdGEKKworCitkZWYg
Y29tcHJlc3NfcGFja2FnZXMobmFtZXMpOgorICAgIG1hcHBpbmcgPSB7fQorICAgIGZvciBuYW1l
IGluIG5hbWVzOgorICAgICAgICBtYXBwaW5nLnVwZGF0ZShwa2dfdG9fbWFwcGluZyhuYW1lKSkK
KyAgICByZXR1cm4gY29tcHJlc3NfbWFwcGluZyhtYXBwaW5nKQorCitkZWYgZ2VuZXJhdGVfc2Ny
aXB0KGVudHJ5LCBwYWNrYWdlcyk6CisgICAgZGF0YSA9IGNvbXByZXNzX3BhY2thZ2VzKHBhY2th
Z2VzKQorICAgIHRtcGwgPSBweS5wYXRoLmxvY2FsKF9fZmlsZV9fKS5kaXJwYXRoKCkuam9pbign
c3RhbmRhbG9uZXRlbXBsYXRlLnB5JykKKyAgICBleGUgPSB0bXBsLnJlYWQoKQorICAgIGV4ZSA9
IGV4ZS5yZXBsYWNlKCdAU09VUkNFU0AnLCBkYXRhKQorICAgIGV4ZSA9IGV4ZS5yZXBsYWNlKCdA
RU5UUllAJywgZW50cnkpCisgICAgcmV0dXJuIGV4ZQorCisKK2RlZiBweXRlc3RfYWRkb3B0aW9u
KHBhcnNlcik6CisgICAgZ3JvdXAgPSBwYXJzZXIuZ2V0Z3JvdXAoImRlYnVnY29uZmlnIikKKyAg
ICBncm91cC5hZGRvcHRpb24oIi0tZ2Vuc2NyaXB0IiwgYWN0aW9uPSJzdG9yZSIsIGRlZmF1bHQ9
Tm9uZSwKKyAgICAgICAgZGVzdD0iZ2Vuc2NyaXB0IiwgbWV0YXZhcj0icGF0aCIsCisgICAgICAg
IGhlbHA9ImNyZWF0ZSBzdGFuZGFsb25lIHB5dGVzdCBzY3JpcHQgYXQgZ2l2ZW4gdGFyZ2V0IHBh
dGguIikKKworZGVmIHB5dGVzdF9jbWRsaW5lX21haW4oY29uZmlnKToKKyAgICBpbXBvcnQgX3B5
dGVzdC5jb25maWcKKyAgICBnZW5zY3JpcHQgPSBjb25maWcuZ2V0dmFsdWUoImdlbnNjcmlwdCIp
CisgICAgaWYgZ2Vuc2NyaXB0OgorICAgICAgICB0dyA9IF9weXRlc3QuY29uZmlnLmNyZWF0ZV90
ZXJtaW5hbF93cml0ZXIoY29uZmlnKQorICAgICAgICB0dy5saW5lKCJXQVJOSU5HOiB1c2FnZSBv
ZiBnZW5zY3JpcHQgaXMgZGVwcmVjYXRlZC4iLAorICAgICAgICAgICAgICAgIHJlZD1UcnVlKQor
ICAgICAgICBkZXBzID0gIFsncHknLCAnX3B5dGVzdCcsICdweXRlc3QnXSAgIyBwbHVnZ3kgaXMg
dmVuZG9yZWQKKyAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mbyA8ICgyLDcpOgorICAgICAgICAg
ICAgZGVwcy5hcHBlbmQoImFyZ3BhcnNlIikKKyAgICAgICAgICAgIHR3LmxpbmUoImdlbmVyYXRl
ZCBzY3JpcHQgd2lsbCBydW4gb24gcHl0aG9uMi42LXB5dGhvbjMuMysrIikKKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIHR3LmxpbmUoIldBUk5JTkc6IGdlbmVyYXRlZCBzY3JpcHQgd2lsbCBu
b3QgcnVuIG9uIHB5dGhvbjIuNiAiCisgICAgICAgICAgICAgICAgICAgICJkdWUgdG8gJ2FyZ3Bh
cnNlJyBkZXBlbmRlbmN5LiBVc2UgcHl0aG9uMi42ICIKKyAgICAgICAgICAgICAgICAgICAgInRv
IGdlbmVyYXRlIGEgcHl0aG9uMi42IGNvbXBhdGlibGUgc2NyaXB0IiwgcmVkPVRydWUpCisgICAg
ICAgIHNjcmlwdCA9IGdlbmVyYXRlX3NjcmlwdCgKKyAgICAgICAgICAgICdpbXBvcnQgcHl0ZXN0
OyByYWlzZSBTeXN0ZW1FeGl0KHB5dGVzdC5jbWRsaW5lLm1haW4oKSknLAorICAgICAgICAgICAg
ZGVwcywKKyAgICAgICAgKQorICAgICAgICBnZW5zY3JpcHQgPSBweS5wYXRoLmxvY2FsKGdlbnNj
cmlwdCkKKyAgICAgICAgZ2Vuc2NyaXB0LndyaXRlKHNjcmlwdCkKKyAgICAgICAgdHcubGluZSgi
Z2VuZXJhdGVkIHB5dGVzdCBzdGFuZGFsb25lIHNjcmlwdDogJXMiICUgZ2Vuc2NyaXB0LAorICAg
ICAgICAgICAgICAgIGJvbGQ9VHJ1ZSkKKyAgICAgICAgcmV0dXJuIDAKKworCitkZWYgcHl0ZXN0
X25hbWVzcGFjZSgpOgorICAgIHJldHVybiB7J2ZyZWV6ZV9pbmNsdWRlcyc6IGZyZWV6ZV9pbmNs
dWRlc30KKworCitkZWYgZnJlZXplX2luY2x1ZGVzKCk6CisgICAgIiIiCisgICAgUmV0dXJucyBh
IGxpc3Qgb2YgbW9kdWxlIG5hbWVzIHVzZWQgYnkgcHkudGVzdCB0aGF0IHNob3VsZCBiZQorICAg
IGluY2x1ZGVkIGJ5IGN4X2ZyZWV6ZS4KKyAgICAiIiIKKyAgICByZXN1bHQgPSBsaXN0KF9pdGVy
X2FsbF9tb2R1bGVzKHB5KSkKKyAgICByZXN1bHQgKz0gbGlzdChfaXRlcl9hbGxfbW9kdWxlcyhf
cHl0ZXN0KSkKKyAgICByZXR1cm4gcmVzdWx0CisKKworZGVmIF9pdGVyX2FsbF9tb2R1bGVzKHBh
Y2thZ2UsIHByZWZpeD0nJyk6CisgICAgIiIiCisgICAgSXRlcmF0ZXMgb3ZlciB0aGUgbmFtZXMg
b2YgYWxsIG1vZHVsZXMgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIGdpdmVuCisgICAgcGFja2Fn
ZSwgcmVjdXJzaXZlbHkuCisKKyAgICBFeGFtcGxlOgorICAgICAgICBfaXRlcl9hbGxfbW9kdWxl
cyhfcHl0ZXN0KSAtPgorICAgICAgICAgICAgWydfcHl0ZXN0LmFzc2VydGlvbi5uZXdpbnRlcnBy
ZXQnLAorICAgICAgICAgICAgICdfcHl0ZXN0LmNhcHR1cmUnLAorICAgICAgICAgICAgICdfcHl0
ZXN0LmNvcmUnLAorICAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgXQorICAgICIiIgorICAg
IGlmIHR5cGUocGFja2FnZSkgaXMgbm90IHN0cjoKKyAgICAgICAgcGF0aCwgcHJlZml4ID0gcGFj
a2FnZS5fX3BhdGhfX1swXSwgcGFja2FnZS5fX25hbWVfXyArICcuJworICAgIGVsc2U6CisgICAg
ICAgIHBhdGggPSBwYWNrYWdlCisgICAgZm9yIF8sIG5hbWUsIGlzX3BhY2thZ2UgaW4gcGtndXRp
bC5pdGVyX21vZHVsZXMoW3BhdGhdKToKKyAgICAgICAgaWYgaXNfcGFja2FnZToKKyAgICAgICAg
ICAgIGZvciBtIGluIF9pdGVyX2FsbF9tb2R1bGVzKG9zLnBhdGguam9pbihwYXRoLCBuYW1lKSwg
cHJlZml4PW5hbWUgKyAnLicpOgorICAgICAgICAgICAgICAgIHlpZWxkIHByZWZpeCArIG0KKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIHlpZWxkIHByZWZpeCArIG5hbWUKZGlmZiAtLWdpdCBh
L1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9oZWxwY29u
ZmlnLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0
L2hlbHBjb25maWcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjFk
ZjBjNTZhYzdiCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNj
L3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L2hlbHBjb25maWcucHkKQEAgLTAsMCArMSwxMzkgQEAKKyIi
IiB2ZXJzaW9uIGluZm8sIGhlbHAgbWVzc2FnZXMsIHRyYWNpbmcgY29uZmlndXJhdGlvbi4gICIi
IgoraW1wb3J0IHB5CitpbXBvcnQgcHl0ZXN0CitpbXBvcnQgb3MsIHN5cworCitkZWYgcHl0ZXN0
X2FkZG9wdGlvbihwYXJzZXIpOgorICAgIGdyb3VwID0gcGFyc2VyLmdldGdyb3VwKCdkZWJ1Z2Nv
bmZpZycpCisgICAgZ3JvdXAuYWRkb3B0aW9uKCctLXZlcnNpb24nLCBhY3Rpb249InN0b3JlX3Ry
dWUiLAorICAgICAgICAgICAgaGVscD0iZGlzcGxheSBweXRlc3QgbGliIHZlcnNpb24gYW5kIGlt
cG9ydCBpbmZvcm1hdGlvbi4iKQorICAgIGdyb3VwLl9hZGRvcHRpb24oIi1oIiwgIi0taGVscCIs
IGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9ImhlbHAiLAorICAgICAgICAgICAgaGVscD0ic2hv
dyBoZWxwIG1lc3NhZ2UgYW5kIGNvbmZpZ3VyYXRpb24gaW5mbyIpCisgICAgZ3JvdXAuX2FkZG9w
dGlvbignLXAnLCBhY3Rpb249ImFwcGVuZCIsIGRlc3Q9InBsdWdpbnMiLCBkZWZhdWx0ID0gW10s
CisgICAgICAgICAgICAgICBtZXRhdmFyPSJuYW1lIiwKKyAgICAgICAgICAgICAgIGhlbHA9ImVh
cmx5LWxvYWQgZ2l2ZW4gcGx1Z2luIChtdWx0aS1hbGxvd2VkKS4gIgorICAgICAgICAgICAgICAg
ICAgICAiVG8gYXZvaWQgbG9hZGluZyBvZiBwbHVnaW5zLCB1c2UgdGhlIGBubzpgIHByZWZpeCwg
ZS5nLiAiCisgICAgICAgICAgICAgICAgICAgICJgbm86ZG9jdGVzdGAuIikKKyAgICBncm91cC5h
ZGRvcHRpb24oJy0tdHJhY2Vjb25maWcnLCAnLS10cmFjZS1jb25maWcnLAorICAgICAgICAgICAg
ICAgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgIGhl
bHA9InRyYWNlIGNvbnNpZGVyYXRpb25zIG9mIGNvbmZ0ZXN0LnB5IGZpbGVzLiIpLAorICAgIGdy
b3VwLmFkZG9wdGlvbignLS1kZWJ1ZycsCisgICAgICAgICAgICAgICBhY3Rpb249InN0b3JlX3Ry
dWUiLCBkZXN0PSJkZWJ1ZyIsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICBoZWxwPSJz
dG9yZSBpbnRlcm5hbCB0cmFjaW5nIGRlYnVnIGluZm9ybWF0aW9uIGluICdweXRlc3RkZWJ1Zy5s
b2cnLiIpCisKKworQHB5dGVzdC5ob29raW1wbChob29rd3JhcHBlcj1UcnVlKQorZGVmIHB5dGVz
dF9jbWRsaW5lX3BhcnNlKCk6CisgICAgb3V0Y29tZSA9IHlpZWxkCisgICAgY29uZmlnID0gb3V0
Y29tZS5nZXRfcmVzdWx0KCkKKyAgICBpZiBjb25maWcub3B0aW9uLmRlYnVnOgorICAgICAgICBw
YXRoID0gb3MucGF0aC5hYnNwYXRoKCJweXRlc3RkZWJ1Zy5sb2ciKQorICAgICAgICBkZWJ1Z2Zp
bGUgPSBvcGVuKHBhdGgsICd3JykKKyAgICAgICAgZGVidWdmaWxlLndyaXRlKCJ2ZXJzaW9ucyBw
eXRlc3QtJXMsIHB5LSVzLCAiCisgICAgICAgICAgICAgICAgInB5dGhvbi0lc1xuY3dkPSVzXG5h
cmdzPSVzXG5cbiIgJSgKKyAgICAgICAgICAgIHB5dGVzdC5fX3ZlcnNpb25fXywgcHkuX192ZXJz
aW9uX18sCisgICAgICAgICAgICAiLiIuam9pbihtYXAoc3RyLCBzeXMudmVyc2lvbl9pbmZvKSks
CisgICAgICAgICAgICBvcy5nZXRjd2QoKSwgY29uZmlnLl9vcmlnYXJncykpCisgICAgICAgIGNv
bmZpZy50cmFjZS5yb290LnNldHdyaXRlcihkZWJ1Z2ZpbGUud3JpdGUpCisgICAgICAgIHVuZG9f
dHJhY2luZyA9IGNvbmZpZy5wbHVnaW5tYW5hZ2VyLmVuYWJsZV90cmFjaW5nKCkKKyAgICAgICAg
c3lzLnN0ZGVyci53cml0ZSgid3JpdGluZyBweXRlc3RkZWJ1ZyBpbmZvcm1hdGlvbiB0byAlc1xu
IiAlIHBhdGgpCisgICAgICAgIGRlZiB1bnNldF90cmFjaW5nKCk6CisgICAgICAgICAgICBkZWJ1
Z2ZpbGUuY2xvc2UoKQorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgid3JvdGUgcHl0ZXN0
ZGVidWcgaW5mb3JtYXRpb24gdG8gJXNcbiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZWJ1Z2ZpbGUubmFtZSkKKyAgICAgICAgICAgIGNvbmZpZy50cmFjZS5yb290LnNldHdyaXRl
cihOb25lKQorICAgICAgICAgICAgdW5kb190cmFjaW5nKCkKKyAgICAgICAgY29uZmlnLmFkZF9j
bGVhbnVwKHVuc2V0X3RyYWNpbmcpCisKK2RlZiBweXRlc3RfY21kbGluZV9tYWluKGNvbmZpZyk6
CisgICAgaWYgY29uZmlnLm9wdGlvbi52ZXJzaW9uOgorICAgICAgICBwID0gcHkucGF0aC5sb2Nh
bChweXRlc3QuX19maWxlX18pCisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIlRoaXMgaXMgcHl0
ZXN0IHZlcnNpb24gJXMsIGltcG9ydGVkIGZyb20gJXNcbiIgJQorICAgICAgICAgICAgKHB5dGVz
dC5fX3ZlcnNpb25fXywgcCkpCisgICAgICAgIHBsdWdpbmluZm8gPSBnZXRwbHVnaW52ZXJzaW9u
aW5mbyhjb25maWcpCisgICAgICAgIGlmIHBsdWdpbmluZm86CisgICAgICAgICAgICBmb3IgbGlu
ZSBpbiBwbHVnaW5pbmZvOgorICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUobGluZSAr
ICJcbiIpCisgICAgICAgIHJldHVybiAwCisgICAgZWxpZiBjb25maWcub3B0aW9uLmhlbHA6Cisg
ICAgICAgIGNvbmZpZy5fZG9fY29uZmlndXJlKCkKKyAgICAgICAgc2hvd2hlbHAoY29uZmlnKQor
ICAgICAgICBjb25maWcuX2Vuc3VyZV91bmNvbmZpZ3VyZSgpCisgICAgICAgIHJldHVybiAwCisK
K2RlZiBzaG93aGVscChjb25maWcpOgorICAgIHJlcG9ydGVyID0gY29uZmlnLnBsdWdpbm1hbmFn
ZXIuZ2V0X3BsdWdpbigndGVybWluYWxyZXBvcnRlcicpCisgICAgdHcgPSByZXBvcnRlci5fdHcK
KyAgICB0dy53cml0ZShjb25maWcuX3BhcnNlci5vcHRwYXJzZXIuZm9ybWF0X2hlbHAoKSkKKyAg
ICB0dy5saW5lKCkKKyAgICB0dy5saW5lKCkKKyAgICAjdHcuc2VwKCAiPSIsICJjb25maWcgZmls
ZSBzZXR0aW5ncyIpCisgICAgdHcubGluZSgiW3B5dGVzdF0gaW5pLW9wdGlvbnMgaW4gdGhlIG5l
eHQgIgorICAgICAgICAgICAgInB5dGVzdC5pbml8dG94LmluaXxzZXR1cC5jZmcgZmlsZToiKQor
ICAgIHR3LmxpbmUoKQorCisgICAgZm9yIG5hbWUgaW4gY29uZmlnLl9wYXJzZXIuX2luaW5hbWVz
OgorICAgICAgICBoZWxwLCB0eXBlLCBkZWZhdWx0ID0gY29uZmlnLl9wYXJzZXIuX2luaWRpY3Rb
bmFtZV0KKyAgICAgICAgaWYgdHlwZSBpcyBOb25lOgorICAgICAgICAgICAgdHlwZSA9ICJzdHJp
bmciCisgICAgICAgIHNwZWMgPSAiJXMgKCVzKSIgJSAobmFtZSwgdHlwZSkKKyAgICAgICAgbGlu
ZSA9ICIgICUtMjRzICVzIiAlKHNwZWMsIGhlbHApCisgICAgICAgIHR3LmxpbmUobGluZVs6dHcu
ZnVsbHdpZHRoXSkKKworICAgIHR3LmxpbmUoKQorICAgIHR3LmxpbmUoImVudmlyb25tZW50IHZh
cmlhYmxlczoiKQorICAgIHZhcnMgPSBbCisgICAgICAgICgiUFlURVNUX0FERE9QVFMiLCAiZXh0
cmEgY29tbWFuZCBsaW5lIG9wdGlvbnMiKSwKKyAgICAgICAgKCJQWVRFU1RfUExVR0lOUyIsICJj
b21tYS1zZXBhcmF0ZWQgcGx1Z2lucyB0byBsb2FkIGR1cmluZyBzdGFydHVwIiksCisgICAgICAg
ICgiUFlURVNUX0RFQlVHIiwgInNldCB0byBlbmFibGUgZGVidWcgdHJhY2luZyBvZiBweXRlc3Qn
cyBpbnRlcm5hbHMiKQorICAgIF0KKyAgICBmb3IgbmFtZSwgaGVscCBpbiB2YXJzOgorICAgICAg
ICB0dy5saW5lKCIgICUtMjRzICVzIiAlIChuYW1lLCBoZWxwKSkKKyAgICB0dy5saW5lKCkKKyAg
ICB0dy5saW5lKCkKKworICAgIHR3LmxpbmUoInRvIHNlZSBhdmFpbGFibGUgbWFya2VycyB0eXBl
OiBweS50ZXN0IC0tbWFya2VycyIpCisgICAgdHcubGluZSgidG8gc2VlIGF2YWlsYWJsZSBmaXh0
dXJlcyB0eXBlOiBweS50ZXN0IC0tZml4dHVyZXMiKQorICAgIHR3LmxpbmUoIihzaG93biBhY2Nv
cmRpbmcgdG8gc3BlY2lmaWVkIGZpbGVfb3JfZGlyIG9yIGN1cnJlbnQgZGlyICIKKyAgICAgICAg
ICAgICJpZiBub3Qgc3BlY2lmaWVkKSIpCisKKyAgICBmb3Igd2FybmluZ3JlcG9ydCBpbiByZXBv
cnRlci5zdGF0cy5nZXQoJ3dhcm5pbmdzJywgW10pOgorICAgICAgICB0dy5saW5lKCJ3YXJuaW5n
IDogIiArIHdhcm5pbmdyZXBvcnQubWVzc2FnZSwgcmVkPVRydWUpCisgICAgcmV0dXJuCisKKwor
Y29uZnRlc3Rfb3B0aW9ucyA9IFsKKyAgICAoJ3B5dGVzdF9wbHVnaW5zJywgJ2xpc3Qgb2YgcGx1
Z2luIG5hbWVzIHRvIGxvYWQnKSwKK10KKworZGVmIGdldHBsdWdpbnZlcnNpb25pbmZvKGNvbmZp
Zyk6CisgICAgbGluZXMgPSBbXQorICAgIHBsdWdpbmluZm8gPSBjb25maWcucGx1Z2lubWFuYWdl
ci5saXN0X3BsdWdpbl9kaXN0aW5mbygpCisgICAgaWYgcGx1Z2luaW5mbzoKKyAgICAgICAgbGlu
ZXMuYXBwZW5kKCJzZXR1cHRvb2xzIHJlZ2lzdGVyZWQgcGx1Z2luczoiKQorICAgICAgICBmb3Ig
cGx1Z2luLCBkaXN0IGluIHBsdWdpbmluZm86CisgICAgICAgICAgICBsb2MgPSBnZXRhdHRyKHBs
dWdpbiwgJ19fZmlsZV9fJywgcmVwcihwbHVnaW4pKQorICAgICAgICAgICAgY29udGVudCA9ICIl
cy0lcyBhdCAlcyIgJSAoZGlzdC5wcm9qZWN0X25hbWUsIGRpc3QudmVyc2lvbiwgbG9jKQorICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCIgICIgKyBjb250ZW50KQorICAgIHJldHVybiBsaW5lcwor
CitkZWYgcHl0ZXN0X3JlcG9ydF9oZWFkZXIoY29uZmlnKToKKyAgICBsaW5lcyA9IFtdCisgICAg
aWYgY29uZmlnLm9wdGlvbi5kZWJ1ZyBvciBjb25maWcub3B0aW9uLnRyYWNlY29uZmlnOgorICAg
ICAgICBsaW5lcy5hcHBlbmQoInVzaW5nOiBweXRlc3QtJXMgcHlsaWItJXMiICUKKyAgICAgICAg
ICAgIChweXRlc3QuX192ZXJzaW9uX18scHkuX192ZXJzaW9uX18pKQorCisgICAgICAgIHZlcmlu
Zm8gPSBnZXRwbHVnaW52ZXJzaW9uaW5mbyhjb25maWcpCisgICAgICAgIGlmIHZlcmluZm86Cisg
ICAgICAgICAgICBsaW5lcy5leHRlbmQodmVyaW5mbykKKworICAgIGlmIGNvbmZpZy5vcHRpb24u
dHJhY2Vjb25maWc6CisgICAgICAgIGxpbmVzLmFwcGVuZCgiYWN0aXZlIHBsdWdpbnM6IikKKyAg
ICAgICAgaXRlbXMgPSBjb25maWcucGx1Z2lubWFuYWdlci5saXN0X25hbWVfcGx1Z2luKCkKKyAg
ICAgICAgZm9yIG5hbWUsIHBsdWdpbiBpbiBpdGVtczoKKyAgICAgICAgICAgIGlmIGhhc2F0dHIo
cGx1Z2luLCAnX19maWxlX18nKToKKyAgICAgICAgICAgICAgICByID0gcGx1Z2luLl9fZmlsZV9f
CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHIgPSByZXByKHBsdWdpbikKKyAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZCgiICAgICUtMjBzOiAlcyIgJShuYW1lLCByKSkKKyAgICBy
ZXR1cm4gbGluZXMKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29s
cy9weXRlc3QvX3B5dGVzdC9ob29rc3BlYy5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3cz
Yy90b29scy9weXRlc3QvX3B5dGVzdC9ob29rc3BlYy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uNjBlOWI0N2QyNjIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2
ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvaG9va3NwZWMucHkKQEAg
LTAsMCArMSwyOTUgQEAKKyIiIiBob29rIHNwZWNpZmljYXRpb25zIGZvciBweXRlc3QgcGx1Z2lu
cywgaW52b2tlZCBmcm9tIG1haW4ucHkgYW5kIGJ1aWx0aW4gcGx1Z2lucy4gICIiIgorCitmcm9t
IF9weXRlc3QuX3BsdWdneSBpbXBvcnQgSG9va3NwZWNNYXJrZXIKKworaG9va3NwZWMgPSBIb29r
c3BlY01hcmtlcigicHl0ZXN0IikKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEluaXRpYWxpemF0
aW9uIGhvb2tzIGNhbGxlZCBmb3IgZXZlcnkgcGx1Z2luCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
QGhvb2tzcGVjKGhpc3RvcmljPVRydWUpCitkZWYgcHl0ZXN0X2FkZGhvb2tzKHBsdWdpbm1hbmFn
ZXIpOgorICAgICIiImNhbGxlZCBhdCBwbHVnaW4gcmVnaXN0cmF0aW9uIHRpbWUgdG8gYWxsb3cg
YWRkaW5nIG5ldyBob29rcyB2aWEgYSBjYWxsIHRvCisgICAgcGx1Z2lubWFuYWdlci5hZGRfaG9v
a3NwZWNzKG1vZHVsZV9vcl9jbGFzcywgcHJlZml4KS4iIiIKKworCitAaG9va3NwZWMoaGlzdG9y
aWM9VHJ1ZSkKK2RlZiBweXRlc3RfbmFtZXNwYWNlKCk6CisgICAgIiIicmV0dXJuIGRpY3Qgb2Yg
bmFtZS0+b2JqZWN0IHRvIGJlIG1hZGUgZ2xvYmFsbHkgYXZhaWxhYmxlIGluCisgICAgdGhlIHB5
dGVzdCBuYW1lc3BhY2UuICBUaGlzIGhvb2sgaXMgY2FsbGVkIGF0IHBsdWdpbiByZWdpc3RyYXRp
b24KKyAgICB0aW1lLgorICAgICIiIgorCitAaG9va3NwZWMoaGlzdG9yaWM9VHJ1ZSkKK2RlZiBw
eXRlc3RfcGx1Z2luX3JlZ2lzdGVyZWQocGx1Z2luLCBtYW5hZ2VyKToKKyAgICAiIiIgYSBuZXcg
cHl0ZXN0IHBsdWdpbiBnb3QgcmVnaXN0ZXJlZC4gIiIiCisKKworQGhvb2tzcGVjKGhpc3Rvcmlj
PVRydWUpCitkZWYgcHl0ZXN0X2FkZG9wdGlvbihwYXJzZXIpOgorICAgICIiInJlZ2lzdGVyIGFy
Z3BhcnNlLXN0eWxlIG9wdGlvbnMgYW5kIGluaS1zdHlsZSBjb25maWcgdmFsdWVzLAorICAgIGNh
bGxlZCBvbmNlIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSB0ZXN0IHJ1bi4KKworICAgIC4uIG5vdGU6
OgorCisgICAgICAgIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGltcGxlbWVudGVkIG9ubHkgaW4g
cGx1Z2lucyBvciBgYGNvbmZ0ZXN0LnB5YGAKKyAgICAgICAgZmlsZXMgc2l0dWF0ZWQgYXQgdGhl
IHRlc3RzIHJvb3QgZGlyZWN0b3J5IGR1ZSB0byBob3cgcHkudGVzdAorICAgICAgICA6cmVmOmBk
aXNjb3ZlcnMgcGx1Z2lucyBkdXJpbmcgc3RhcnR1cCA8cGx1Z2lub3JkZXI+YC4KKworICAgIDph
cmcgcGFyc2VyOiBUbyBhZGQgY29tbWFuZCBsaW5lIG9wdGlvbnMsIGNhbGwKKyAgICAgICAgOnB5
OmZ1bmM6YHBhcnNlci5hZGRvcHRpb24oLi4uKSA8X3B5dGVzdC5jb25maWcuUGFyc2VyLmFkZG9w
dGlvbj5gLgorICAgICAgICBUbyBhZGQgaW5pLWZpbGUgdmFsdWVzIGNhbGwgOnB5OmZ1bmM6YHBh
cnNlci5hZGRpbmkoLi4uKQorICAgICAgICA8X3B5dGVzdC5jb25maWcuUGFyc2VyLmFkZGluaT5g
LgorCisgICAgT3B0aW9ucyBjYW4gbGF0ZXIgYmUgYWNjZXNzZWQgdGhyb3VnaCB0aGUKKyAgICA6
cHk6Y2xhc3M6YGNvbmZpZyA8X3B5dGVzdC5jb25maWcuQ29uZmlnPmAgb2JqZWN0LCByZXNwZWN0
aXZlbHk6CisKKyAgICAtIDpweTpmdW5jOmBjb25maWcuZ2V0b3B0aW9uKG5hbWUpIDxfcHl0ZXN0
LmNvbmZpZy5Db25maWcuZ2V0b3B0aW9uPmAgdG8KKyAgICAgIHJldHJpZXZlIHRoZSB2YWx1ZSBv
ZiBhIGNvbW1hbmQgbGluZSBvcHRpb24uCisKKyAgICAtIDpweTpmdW5jOmBjb25maWcuZ2V0aW5p
KG5hbWUpIDxfcHl0ZXN0LmNvbmZpZy5Db25maWcuZ2V0aW5pPmAgdG8gcmV0cmlldmUKKyAgICAg
IGEgdmFsdWUgcmVhZCBmcm9tIGFuIGluaS1zdHlsZSBmaWxlLgorCisgICAgVGhlIGNvbmZpZyBv
YmplY3QgaXMgcGFzc2VkIGFyb3VuZCBvbiBtYW55IGludGVybmFsIG9iamVjdHMgdmlhIHRoZSBg
YC5jb25maWdgYAorICAgIGF0dHJpYnV0ZSBvciBjYW4gYmUgcmV0cmlldmVkIGFzIHRoZSBgYHB5
dGVzdGNvbmZpZ2BgIGZpeHR1cmUgb3IgYWNjZXNzZWQKKyAgICB2aWEgKGRlcHJlY2F0ZWQpIGBg
cHl0ZXN0LmNvbmZpZ2BgLgorICAgICIiIgorCitAaG9va3NwZWMoaGlzdG9yaWM9VHJ1ZSkKK2Rl
ZiBweXRlc3RfY29uZmlndXJlKGNvbmZpZyk6CisgICAgIiIiIGNhbGxlZCBhZnRlciBjb21tYW5k
IGxpbmUgb3B0aW9ucyBoYXZlIGJlZW4gcGFyc2VkCisgICAgYW5kIGFsbCBwbHVnaW5zIGFuZCBp
bml0aWFsIGNvbmZ0ZXN0IGZpbGVzIGJlZW4gbG9hZGVkLgorICAgIFRoaXMgaG9vayBpcyBjYWxs
ZWQgZm9yIGV2ZXJ5IHBsdWdpbi4KKyAgICAiIiIKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEJv
b3RzdHJhcHBpbmcgaG9va3MgY2FsbGVkIGZvciBwbHVnaW5zIHJlZ2lzdGVyZWQgZWFybHkgZW5v
dWdoOgorIyBpbnRlcm5hbCBhbmQgM3JkIHBhcnR5IHBsdWdpbnMgYXMgd2VsbCBhcyBkaXJlY3Rs
eQorIyBkaXNjb3ZlcmFibGUgY29uZnRlc3QucHkgbG9jYWwgcGx1Z2lucy4KKyMgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCitAaG9va3NwZWMoZmlyc3RyZXN1bHQ9VHJ1ZSkKK2RlZiBweXRlc3RfY21kbGlu
ZV9wYXJzZShwbHVnaW5tYW5hZ2VyLCBhcmdzKToKKyAgICAiIiJyZXR1cm4gaW5pdGlhbGl6ZWQg
Y29uZmlnIG9iamVjdCwgcGFyc2luZyB0aGUgc3BlY2lmaWVkIGFyZ3MuICIiIgorCitkZWYgcHl0
ZXN0X2NtZGxpbmVfcHJlcGFyc2UoY29uZmlnLCBhcmdzKToKKyAgICAiIiIoZGVwcmVjYXRlZCkg
bW9kaWZ5IGNvbW1hbmQgbGluZSBhcmd1bWVudHMgYmVmb3JlIG9wdGlvbiBwYXJzaW5nLiAiIiIK
KworQGhvb2tzcGVjKGZpcnN0cmVzdWx0PVRydWUpCitkZWYgcHl0ZXN0X2NtZGxpbmVfbWFpbihj
b25maWcpOgorICAgICIiIiBjYWxsZWQgZm9yIHBlcmZvcm1pbmcgdGhlIG1haW4gY29tbWFuZCBs
aW5lIGFjdGlvbi4gVGhlIGRlZmF1bHQKKyAgICBpbXBsZW1lbnRhdGlvbiB3aWxsIGludm9rZSB0
aGUgY29uZmlndXJlIGhvb2tzIGFuZCBydW50ZXN0X21haW5sb29wLiAiIiIKKworZGVmIHB5dGVz
dF9sb2FkX2luaXRpYWxfY29uZnRlc3RzKGVhcmx5X2NvbmZpZywgcGFyc2VyLCBhcmdzKToKKyAg
ICAiIiIgaW1wbGVtZW50cyB0aGUgbG9hZGluZyBvZiBpbml0aWFsIGNvbmZ0ZXN0IGZpbGVzIGFo
ZWFkCisgICAgb2YgY29tbWFuZCBsaW5lIG9wdGlvbiBwYXJzaW5nLiAiIiIKKworCisjIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKyMgY29sbGVjdGlvbiBob29rcworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Bo
b29rc3BlYyhmaXJzdHJlc3VsdD1UcnVlKQorZGVmIHB5dGVzdF9jb2xsZWN0aW9uKHNlc3Npb24p
OgorICAgICIiIiBwZXJmb3JtIHRoZSBjb2xsZWN0aW9uIHByb3RvY29sIGZvciB0aGUgZ2l2ZW4g
c2Vzc2lvbi4gIiIiCisKK2RlZiBweXRlc3RfY29sbGVjdGlvbl9tb2RpZnlpdGVtcyhzZXNzaW9u
LCBjb25maWcsIGl0ZW1zKToKKyAgICAiIiIgY2FsbGVkIGFmdGVyIGNvbGxlY3Rpb24gaGFzIGJl
ZW4gcGVyZm9ybWVkLCBtYXkgZmlsdGVyIG9yIHJlLW9yZGVyCisgICAgdGhlIGl0ZW1zIGluLXBs
YWNlLiIiIgorCitkZWYgcHl0ZXN0X2NvbGxlY3Rpb25fZmluaXNoKHNlc3Npb24pOgorICAgICIi
IiBjYWxsZWQgYWZ0ZXIgY29sbGVjdGlvbiBoYXMgYmVlbiBwZXJmb3JtZWQgYW5kIG1vZGlmaWVk
LiAiIiIKKworQGhvb2tzcGVjKGZpcnN0cmVzdWx0PVRydWUpCitkZWYgcHl0ZXN0X2lnbm9yZV9j
b2xsZWN0KHBhdGgsIGNvbmZpZyk6CisgICAgIiIiIHJldHVybiBUcnVlIHRvIHByZXZlbnQgY29u
c2lkZXJpbmcgdGhpcyBwYXRoIGZvciBjb2xsZWN0aW9uLgorICAgIFRoaXMgaG9vayBpcyBjb25z
dWx0ZWQgZm9yIGFsbCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgcHJpb3IgdG8gY2FsbGluZworICAg
IG1vcmUgc3BlY2lmaWMgaG9va3MuCisgICAgIiIiCisKK0Bob29rc3BlYyhmaXJzdHJlc3VsdD1U
cnVlKQorZGVmIHB5dGVzdF9jb2xsZWN0X2RpcmVjdG9yeShwYXRoLCBwYXJlbnQpOgorICAgICIi
IiBjYWxsZWQgYmVmb3JlIHRyYXZlcnNpbmcgYSBkaXJlY3RvcnkgZm9yIGNvbGxlY3Rpb24gZmls
ZXMuICIiIgorCitkZWYgcHl0ZXN0X2NvbGxlY3RfZmlsZShwYXRoLCBwYXJlbnQpOgorICAgICIi
IiByZXR1cm4gY29sbGVjdGlvbiBOb2RlIG9yIE5vbmUgZm9yIHRoZSBnaXZlbiBwYXRoLiBBbnkg
bmV3IG5vZGUKKyAgICBuZWVkcyB0byBoYXZlIHRoZSBzcGVjaWZpZWQgYGBwYXJlbnRgYCBhcyBh
IHBhcmVudC4iIiIKKworIyBsb2dnaW5nIGhvb2tzIGZvciBjb2xsZWN0aW9uCitkZWYgcHl0ZXN0
X2NvbGxlY3RzdGFydChjb2xsZWN0b3IpOgorICAgICIiIiBjb2xsZWN0b3Igc3RhcnRzIGNvbGxl
Y3RpbmcuICIiIgorCitkZWYgcHl0ZXN0X2l0ZW1jb2xsZWN0ZWQoaXRlbSk6CisgICAgIiIiIHdl
IGp1c3QgY29sbGVjdGVkIGEgdGVzdCBpdGVtLiAiIiIKKworZGVmIHB5dGVzdF9jb2xsZWN0cmVw
b3J0KHJlcG9ydCk6CisgICAgIiIiIGNvbGxlY3RvciBmaW5pc2hlZCBjb2xsZWN0aW5nLiAiIiIK
KworZGVmIHB5dGVzdF9kZXNlbGVjdGVkKGl0ZW1zKToKKyAgICAiIiIgY2FsbGVkIGZvciB0ZXN0
IGl0ZW1zIGRlc2VsZWN0ZWQgYnkga2V5d29yZC4gIiIiCisKK0Bob29rc3BlYyhmaXJzdHJlc3Vs
dD1UcnVlKQorZGVmIHB5dGVzdF9tYWtlX2NvbGxlY3RfcmVwb3J0KGNvbGxlY3Rvcik6CisgICAg
IiIiIHBlcmZvcm0gYGBjb2xsZWN0b3IuY29sbGVjdCgpYGAgYW5kIHJldHVybiBhIENvbGxlY3RS
ZXBvcnQuICIiIgorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHl0aG9uIHRlc3QgZnVuY3Rpb24g
cmVsYXRlZCBob29rcworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Bob29rc3BlYyhmaXJzdHJlc3Vs
dD1UcnVlKQorZGVmIHB5dGVzdF9weWNvbGxlY3RfbWFrZW1vZHVsZShwYXRoLCBwYXJlbnQpOgor
ICAgICIiIiByZXR1cm4gYSBNb2R1bGUgY29sbGVjdG9yIG9yIE5vbmUgZm9yIHRoZSBnaXZlbiBw
YXRoLgorICAgIFRoaXMgaG9vayB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaCBtYXRjaGluZyB0ZXN0
IG1vZHVsZSBwYXRoLgorICAgIFRoZSBweXRlc3RfY29sbGVjdF9maWxlIGhvb2sgbmVlZHMgdG8g
YmUgdXNlZCBpZiB5b3Ugd2FudCB0bworICAgIGNyZWF0ZSB0ZXN0IG1vZHVsZXMgZm9yIGZpbGVz
IHRoYXQgZG8gbm90IG1hdGNoIGFzIGEgdGVzdCBtb2R1bGUuCisgICAgIiIiCisKK0Bob29rc3Bl
YyhmaXJzdHJlc3VsdD1UcnVlKQorZGVmIHB5dGVzdF9weWNvbGxlY3RfbWFrZWl0ZW0oY29sbGVj
dG9yLCBuYW1lLCBvYmopOgorICAgICIiIiByZXR1cm4gY3VzdG9tIGl0ZW0vY29sbGVjdG9yIGZv
ciBhIHB5dGhvbiBvYmplY3QgaW4gYSBtb2R1bGUsIG9yIE5vbmUuICAiIiIKKworQGhvb2tzcGVj
KGZpcnN0cmVzdWx0PVRydWUpCitkZWYgcHl0ZXN0X3B5ZnVuY19jYWxsKHB5ZnVuY2l0ZW0pOgor
ICAgICIiIiBjYWxsIHVuZGVybHlpbmcgdGVzdCBmdW5jdGlvbi4gIiIiCisKK2RlZiBweXRlc3Rf
Z2VuZXJhdGVfdGVzdHMobWV0YWZ1bmMpOgorICAgICIiIiBnZW5lcmF0ZSAobXVsdGlwbGUpIHBh
cmFtZXRyaXplZCBjYWxscyB0byBhIHRlc3QgZnVuY3Rpb24uIiIiCisKKyMgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorIyBnZW5lcmljIHJ1bnRlc3QgcmVsYXRlZCBob29rcworIyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisKK0Bob29rc3BlYyhmaXJzdHJlc3VsdD1UcnVlKQorZGVmIHB5dGVzdF9ydW50ZXN0bG9vcChz
ZXNzaW9uKToKKyAgICAiIiIgY2FsbGVkIGZvciBwZXJmb3JtaW5nIHRoZSBtYWluIHJ1bnRlc3Qg
bG9vcAorICAgIChhZnRlciBjb2xsZWN0aW9uIGZpbmlzaGVkKS4gIiIiCisKK2RlZiBweXRlc3Rf
aXRlbXN0YXJ0KGl0ZW0sIG5vZGUpOgorICAgICIiIiAoZGVwcmVjYXRlZCwgdXNlIHB5dGVzdF9y
dW50ZXN0X2xvZ3N0YXJ0KS4gIiIiCisKK0Bob29rc3BlYyhmaXJzdHJlc3VsdD1UcnVlKQorZGVm
IHB5dGVzdF9ydW50ZXN0X3Byb3RvY29sKGl0ZW0sIG5leHRpdGVtKToKKyAgICAiIiIgaW1wbGVt
ZW50cyB0aGUgcnVudGVzdF9zZXR1cC9jYWxsL3RlYXJkb3duIHByb3RvY29sIGZvcgorICAgIHRo
ZSBnaXZlbiB0ZXN0IGl0ZW0sIGluY2x1ZGluZyBjYXB0dXJpbmcgZXhjZXB0aW9ucyBhbmQgY2Fs
bGluZworICAgIHJlcG9ydGluZyBob29rcy4KKworICAgIDphcmcgaXRlbTogdGVzdCBpdGVtIGZv
ciB3aGljaCB0aGUgcnVudGVzdCBwcm90b2NvbCBpcyBwZXJmb3JtZWQuCisKKyAgICA6YXJnIG5l
eHRpdGVtOiB0aGUgc2NoZWR1bGVkLXRvLWJlLW5leHQgdGVzdCBpdGVtIChvciBOb25lIGlmIHRo
aXMKKyAgICAgICAgICAgICAgICAgICBpcyB0aGUgZW5kIG15IGZyaWVuZCkuICBUaGlzIGFyZ3Vt
ZW50IGlzIHBhc3NlZCBvbiB0bworICAgICAgICAgICAgICAgICAgIDpweTpmdW5jOmBweXRlc3Rf
cnVudGVzdF90ZWFyZG93bmAuCisKKyAgICA6cmV0dXJuIGJvb2xlYW46IFRydWUgaWYgbm8gZnVy
dGhlciBob29rIGltcGxlbWVudGF0aW9ucyBzaG91bGQgYmUgaW52b2tlZC4KKyAgICAiIiIKKwor
ZGVmIHB5dGVzdF9ydW50ZXN0X2xvZ3N0YXJ0KG5vZGVpZCwgbG9jYXRpb24pOgorICAgICIiIiBz
aWduYWwgdGhlIHN0YXJ0IG9mIHJ1bm5pbmcgYSBzaW5nbGUgdGVzdCBpdGVtLiAiIiIKKworZGVm
IHB5dGVzdF9ydW50ZXN0X3NldHVwKGl0ZW0pOgorICAgICIiIiBjYWxsZWQgYmVmb3JlIGBgcHl0
ZXN0X3J1bnRlc3RfY2FsbChpdGVtKWBgLiAiIiIKKworZGVmIHB5dGVzdF9ydW50ZXN0X2NhbGwo
aXRlbSk6CisgICAgIiIiIGNhbGxlZCB0byBleGVjdXRlIHRoZSB0ZXN0IGBgaXRlbWBgLiAiIiIK
KworZGVmIHB5dGVzdF9ydW50ZXN0X3RlYXJkb3duKGl0ZW0sIG5leHRpdGVtKToKKyAgICAiIiIg
Y2FsbGVkIGFmdGVyIGBgcHl0ZXN0X3J1bnRlc3RfY2FsbGBgLgorCisgICAgOmFyZyBuZXh0aXRl
bTogdGhlIHNjaGVkdWxlZC10by1iZS1uZXh0IHRlc3QgaXRlbSAoTm9uZSBpZiBubyBmdXJ0aGVy
CisgICAgICAgICAgICAgICAgICAgdGVzdCBpdGVtIGlzIHNjaGVkdWxlZCkuICBUaGlzIGFyZ3Vt
ZW50IGNhbiBiZSB1c2VkIHRvCisgICAgICAgICAgICAgICAgICAgcGVyZm9ybSBleGFjdCB0ZWFy
ZG93bnMsIGkuZS4gY2FsbGluZyBqdXN0IGVub3VnaCBmaW5hbGl6ZXJzCisgICAgICAgICAgICAg
ICAgICAgc28gdGhhdCBuZXh0aXRlbSBvbmx5IG5lZWRzIHRvIGNhbGwgc2V0dXAtZnVuY3Rpb25z
LgorICAgICIiIgorCitAaG9va3NwZWMoZmlyc3RyZXN1bHQ9VHJ1ZSkKK2RlZiBweXRlc3RfcnVu
dGVzdF9tYWtlcmVwb3J0KGl0ZW0sIGNhbGwpOgorICAgICIiIiByZXR1cm4gYSA6cHk6Y2xhc3M6
YF9weXRlc3QucnVubmVyLlRlc3RSZXBvcnRgIG9iamVjdAorICAgIGZvciB0aGUgZ2l2ZW4gOnB5
OmNsYXNzOmBweXRlc3QuSXRlbWAgYW5kCisgICAgOnB5OmNsYXNzOmBfcHl0ZXN0LnJ1bm5lci5D
YWxsSW5mb2AuCisgICAgIiIiCisKK2RlZiBweXRlc3RfcnVudGVzdF9sb2dyZXBvcnQocmVwb3J0
KToKKyAgICAiIiIgcHJvY2VzcyBhIHRlc3Qgc2V0dXAvY2FsbC90ZWFyZG93biByZXBvcnQgcmVs
YXRpbmcgdG8KKyAgICB0aGUgcmVzcGVjdGl2ZSBwaGFzZSBvZiBleGVjdXRpbmcgYSB0ZXN0LiAi
IiIKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIHRlc3Qgc2Vzc2lvbiByZWxhdGVkIGhvb2tzCisj
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKworZGVmIHB5dGVzdF9zZXNzaW9uc3RhcnQoc2Vzc2lvbik6Cisg
ICAgIiIiIGJlZm9yZSBzZXNzaW9uLm1haW4oKSBpcyBjYWxsZWQuICIiIgorCitkZWYgcHl0ZXN0
X3Nlc3Npb25maW5pc2goc2Vzc2lvbiwgZXhpdHN0YXR1cyk6CisgICAgIiIiIHdob2xlIHRlc3Qg
cnVuIGZpbmlzaGVzLiAiIiIKKworZGVmIHB5dGVzdF91bmNvbmZpZ3VyZShjb25maWcpOgorICAg
ICIiIiBjYWxsZWQgYmVmb3JlIHRlc3QgcHJvY2VzcyBpcyBleGl0ZWQuICAiIiIKKworCisjIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKyMgaG9va3MgZm9yIGN1c3RvbWlzaW5nIHRoZSBhc3NlcnQgbWV0aG9k
cworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2RlZiBweXRlc3RfYXNzZXJ0cmVwcl9jb21wYXJlKGNv
bmZpZywgb3AsIGxlZnQsIHJpZ2h0KToKKyAgICAiIiJyZXR1cm4gZXhwbGFuYXRpb24gZm9yIGNv
bXBhcmlzb25zIGluIGZhaWxpbmcgYXNzZXJ0IGV4cHJlc3Npb25zLgorCisgICAgUmV0dXJuIE5v
bmUgZm9yIG5vIGN1c3RvbSBleHBsYW5hdGlvbiwgb3RoZXJ3aXNlIHJldHVybiBhIGxpc3QKKyAg
ICBvZiBzdHJpbmdzLiAgVGhlIHN0cmluZ3Mgd2lsbCBiZSBqb2luZWQgYnkgbmV3bGluZXMgYnV0
IGFueSBuZXdsaW5lcworICAgICppbiogYSBzdHJpbmcgd2lsbCBiZSBlc2NhcGVkLiAgTm90ZSB0
aGF0IGFsbCBidXQgdGhlIGZpcnN0IGxpbmUgd2lsbAorICAgIGJlIGluZGVudGVkIHNsaWd0aGx5
LCB0aGUgaW50ZW50aW9uIGlzIGZvciB0aGUgZmlyc3QgbGluZSB0byBiZSBhIHN1bW1hcnkuCisg
ICAgIiIiCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBob29rcyBmb3IgaW5mbHVlbmNpbmcgcmVw
b3J0aW5nIChpbnZva2VkIGZyb20gX3B5dGVzdF90ZXJtaW5hbCkKKyMgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCitkZWYgcHl0ZXN0X3JlcG9ydF9oZWFkZXIoY29uZmlnLCBzdGFydGRpcik6CisgICAgIiIi
IHJldHVybiBhIHN0cmluZyB0byBiZSBkaXNwbGF5ZWQgYXMgaGVhZGVyIGluZm8gZm9yIHRlcm1p
bmFsIHJlcG9ydGluZy4iIiIKKworQGhvb2tzcGVjKGZpcnN0cmVzdWx0PVRydWUpCitkZWYgcHl0
ZXN0X3JlcG9ydF90ZXN0c3RhdHVzKHJlcG9ydCk6CisgICAgIiIiIHJldHVybiByZXN1bHQtY2F0
ZWdvcnksIHNob3J0bGV0dGVyIGFuZCB2ZXJib3NlIHdvcmQgZm9yIHJlcG9ydGluZy4iIiIKKwor
ZGVmIHB5dGVzdF90ZXJtaW5hbF9zdW1tYXJ5KHRlcm1pbmFscmVwb3J0ZXIpOgorICAgICIiIiBh
ZGQgYWRkaXRpb25hbCBzZWN0aW9uIGluIHRlcm1pbmFsIHN1bW1hcnkgcmVwb3J0aW5nLiAgIiIi
CisKKworQGhvb2tzcGVjKGhpc3RvcmljPVRydWUpCitkZWYgcHl0ZXN0X2xvZ3dhcm5pbmcobWVz
c2FnZSwgY29kZSwgbm9kZWlkLCBmc2xvY2F0aW9uKToKKyAgICAiIiIgcHJvY2VzcyBhIHdhcm5p
bmcgc3BlY2lmaWVkIGJ5IGEgbWVzc2FnZSwgYSBjb2RlIHN0cmluZywKKyAgICBhIG5vZGVpZCBh
bmQgZnNsb2NhdGlvbiAoYm90aCBvZiB3aGljaCBtYXkgYmUgTm9uZQorICAgIGlmIHRoZSB3YXJu
aW5nIGlzIG5vdCB0aWVkIHRvIGEgcGFydGlsYXIgbm9kZS9sb2NhdGlvbikuIiIiCisKKyMgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorIyBkb2N0ZXN0IGhvb2tzCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQGhv
b2tzcGVjKGZpcnN0cmVzdWx0PVRydWUpCitkZWYgcHl0ZXN0X2RvY3Rlc3RfcHJlcGFyZV9jb250
ZW50KGNvbnRlbnQpOgorICAgICIiIiByZXR1cm4gcHJvY2Vzc2VkIGNvbnRlbnQgZm9yIGEgZ2l2
ZW4gZG9jdGVzdCIiIgorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgZXJyb3IgaGFuZGxpbmcgYW5k
IGludGVybmFsIGRlYnVnZ2luZyBob29rcworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2RlZiBweXRl
c3RfaW50ZXJuYWxlcnJvcihleGNyZXByLCBleGNpbmZvKToKKyAgICAiIiIgY2FsbGVkIGZvciBp
bnRlcm5hbCBlcnJvcnMuICIiIgorCitkZWYgcHl0ZXN0X2tleWJvYXJkX2ludGVycnVwdChleGNp
bmZvKToKKyAgICAiIiIgY2FsbGVkIGZvciBrZXlib2FyZCBpbnRlcnJ1cHQuICIiIgorCitkZWYg
cHl0ZXN0X2V4Y2VwdGlvbl9pbnRlcmFjdChub2RlLCBjYWxsLCByZXBvcnQpOgorICAgICIiImNh
bGxlZCB3aGVuIGFuIGV4Y2VwdGlvbiB3YXMgcmFpc2VkIHdoaWNoIGNhbiBwb3RlbnRpYWxseSBi
ZQorICAgIGludGVyYWN0aXZlbHkgaGFuZGxlZC4KKworICAgIFRoaXMgaG9vayBpcyBvbmx5IGNh
bGxlZCBpZiBhbiBleGNlcHRpb24gd2FzIHJhaXNlZAorICAgIHRoYXQgaXMgbm90IGFuIGludGVy
bmFsIGV4Y2VwdGlvbiBsaWtlIGBgc2tpcC5FeGNlcHRpb25gYC4KKyAgICAiIiIKKworZGVmIHB5
dGVzdF9lbnRlcl9wZGIoY29uZmlnKToKKyAgICAiIiIgY2FsbGVkIHVwb24gcGRiLnNldF90cmFj
ZSgpLCBjYW4gYmUgdXNlZCBieSBwbHVnaW5zIHRvIHRha2Ugc3BlY2lhbAorICAgIGFjdGlvbiBq
dXN0IGJlZm9yZSB0aGUgcHl0aG9uIGRlYnVnZ2VyIGVudGVycyBpbiBpbnRlcmFjdGl2ZSBtb2Rl
LgorCisgICAgOmFyZyBjb25maWc6IHB5dGVzdCBjb25maWcgb2JqZWN0CisgICAgOnR5cGUgY29u
ZmlnOiBfcHl0ZXN0LmNvbmZpZy5Db25maWcKKyAgICAiIiIKZGlmZiAtLWdpdCBhL1dlYkRyaXZl
clRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9pbXBsIGIvV2ViRHJpdmVy
VGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L2ltcGwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjg4OWUzN2U1YWJjCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L2ltcGwK
QEAgLTAsMCArMSwyNTQgQEAKK1NvcnRpbmcgcGVyLXJlc291cmNlCistLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCitmb3IgYW55IGdpdmVuIHNldCBvZiBpdGVtczoKKworLSBjb2xsZWN0
IGl0ZW1zIHBlciBzZXNzaW9uLXNjb3BlZCBwYXJhbWV0cml6ZWQgZnVuY2FyZworLSByZS1vcmRl
ciB1bnRpbCBpdGVtcyBubyBwYXJhbWV0cml6YXRpb25zIGFyZSBtaXhlZAorCisgIGV4YW1wbGVz
OgorCisgICAgICAgIHRlc3QoKQorICAgICAgICB0ZXN0MShzMSkKKyAgICAgICAgdGVzdDEoczIp
ICAgICAKKyAgICAgICAgdGVzdDIoKQorICAgICAgICB0ZXN0MyhzMSkKKyAgICAgICAgdGVzdDMo
czIpCisKKyAgZ2V0cyBzb3J0ZWQgdG86CisKKyAgICAgICAgdGVzdCgpCisgICAgICAgIHRlc3Qy
KCkKKyAgICAgICAgdGVzdDEoczEpCisgICAgICAgIHRlc3QzKHMxKQorICAgICAgICB0ZXN0MShz
MikKKyAgICAgICAgdGVzdDMoczIpCisgCisKK3RoZSBuZXcgQHNldHVwIGZ1bmN0aW9ucyAKKy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvbnNpZGVyIGEgZ2l2ZW4g
QHNldHVwLW1hcmtlZCBmdW5jdGlvbjo6CisKKyAgICBAcHl0ZXN0Lm1hcmsuc2V0dXAobWF4c2Nv
cGU9U0NPUEUpCisgICAgZGVmIG15c2V0dXAocmVxdWVzdCwgYXJnMSwgYXJnMiwgLi4uKQorICAg
ICAgICAuLi4KKyAgICAgICAgcmVxdWVzdC5hZGRmaW5hbGl6ZXIoZmluKQorICAgICAgICAuLi4K
KwordGhlbiBGVU5DQVJHU0VUIGRlbm90ZXMgdGhlIHNldCBvZiAoYXJnMSwgYXJnMiwgLi4uKSBm
dW5jYXJncyBhbmQKK2FsbCBvZiBpdHMgZGVwZW5kZW50IGZ1bmNhcmdzLiAgVGhlIG15c2V0dXAg
ZnVuY3Rpb24gd2lsbCBleGVjdXRlCitmb3IgYW55IG1hdGNoaW5nIHRlc3QgaXRlbSBvbmNlIHBl
ciBzY29wZS4gIAorCitUaGUgc2NvcGUgaXMgZGV0ZXJtaW5lZCBhcyB0aGUgbWluaW11bSBzY29w
ZSBvZiBhbGwgc2NvcGVzIG9mIHRoZSBhcmdzCitpbiBGVU5DQVJHU0VUIGFuZCB0aGUgZ2l2ZW4g
Im1heHNjb3BlIi4gCisKK0lmIG15c2V0dXAgaGFzIGJlZW4gY2FsbGVkIGFuZCBubyBmaW5hbGl6
ZXJzIGhhdmUgYmVlbiBjYWxsZWQgaXQgaXMKK2NhbGxlZCAiYWN0aXZlIi4KKworRnVydGhlcm1v
cmUgdGhlIGZvbGxvd2luZyBydWxlcyBhcHBseToKKworLSBpZiBhbiBhcmcgdmFsdWUgaW4gRlVO
Q0FSR1NFVCBpcyBhYm91dCB0byBiZSB0b3JuIGRvd24sIHRoZSAKKyAgbXlzZXR1cC1yZWdpc3Rl
cmVkIGZpbmFsaXplcnMgd2lsbCBleGVjdXRlIGFzIHdlbGwuCisKKy0gVGhlcmUgd2lsbCBuZXZl
ciBiZSB0d28gYWN0aXZlIG15c2V0dXAgaW52b2NhdGlvbnMuCisKK0V4YW1wbGUgMSwgc2Vzc2lv
biBzY29wZTo6CisKKyAgICBAcHl0ZXN0Lm1hcmsuZnVuY2FyZyhzY29wZT0ic2Vzc2lvbiIsIHBh
cmFtcz1bMSwyXSkKKyAgICBkZWYgZGIocmVxdWVzdCk6CisgICAgICAgIHJlcXVlc3QuYWRkZmlu
YWxpemVyKGRiX2ZpbmFsaXplKQorCisgICAgQHB5dGVzdC5tYXJrLnNldHVwCisgICAgZGVmIG15
c2V0dXAocmVxdWVzdCwgZGIpOgorICAgICAgICByZXF1ZXN0LmFkZGZpbmFsaXplcihteXNldHVw
X2ZpbmFsaXplKQorICAgICAgICAuLi4KKworQW5kIGEgZ2l2ZW4gdGVzdCBtb2R1bGU6CisKKyAg
ICBkZWYgdGVzdF9zb21ldGhpbmcoKToKKyAgICAgICAgLi4uCisgICAgZGVmIHRlc3Rfb3RoZXJ0
aGluZygpOgorICAgICAgICBwYXNzCisKK0hlcmUgaXMgd2hhdCBoYXBwZW5zOjoKKworICAgIGRi
KHJlcXVlc3QpIGV4ZWN1dGVzIHdpdGggcmVxdWVzdC5wYXJhbSA9PSAxCisgICAgICAgIG15c2V0
dXAocmVxdWVzdCwgZGIpIGV4ZWN1dGVzCisgICAgICAgICAgICB0ZXN0X3NvbWV0aGluZygpIGV4
ZWN1dGVzCisgICAgICAgICAgICB0ZXN0X290aGVydGhpbmcoKSBleGVjdXRlcworICAgICAgICAg
ICAgbXlzZXR1cF9maW5hbGl6ZSgpIGV4ZWN1dGVzCisgICAgZGJfZmluYWxpemUoKSBleGVjdXRl
cworICAgIGRiKHJlcXVlc3QpIGV4ZWN1dGVzIHdpdGggcmVxdWVzdC5wYXJhbSA9PSAyCisgICAg
ICAgIG15c2V0dXAocmVxdWVzdCwgZGIpIGV4ZWN1dGVzCisgICAgICAgICAgICB0ZXN0X3NvbWV0
aGluZygpIGV4ZWN1dGVzCisgICAgICAgICAgICB0ZXN0X290aGVydGhpbmcoKSBleGVjdXRlcwor
ICAgICAgICBteXNldHVwX2ZpbmFsaXplKCkgZXhlY3V0ZXMKKyAgICBkYl9maW5hbGl6ZSgpIGV4
ZWN1dGVzCisKK0V4YW1wbGUgMiwgc2Vzc2lvbi9mdW5jdGlvbiBzY29wZTo6CisKKyAgICBAcHl0
ZXN0Lm1hcmsuZnVuY2FyZyhzY29wZT0ic2Vzc2lvbiIsIHBhcmFtcz1bMSwyXSkKKyAgICBkZWYg
ZGIocmVxdWVzdCk6CisgICAgICAgIHJlcXVlc3QuYWRkZmluYWxpemVyKGRiX2ZpbmFsaXplKQor
CisgICAgQHB5dGVzdC5tYXJrLnNldHVwKHNjb3BlPSJmdW5jdGlvbiIpCisgICAgZGVmIG15c2V0
dXAocmVxdWVzdCwgZGIpOgorICAgICAgICAuLi4KKyAgICAgICAgcmVxdWVzdC5hZGRmaW5hbGl6
ZXIobXlzZXR1cF9maW5hbGl6ZSkKKyAgICAgICAgLi4uCisKK0FuZCBhIGdpdmVuIHRlc3QgbW9k
dWxlOgorCisgICAgZGVmIHRlc3Rfc29tZXRoaW5nKCk6CisgICAgICAgIC4uLgorICAgIGRlZiB0
ZXN0X290aGVydGhpbmcoKToKKyAgICAgICAgcGFzcworCitIZXJlIGlzIHdoYXQgaGFwcGVuczo6
CisKKyAgICBkYihyZXF1ZXN0KSBleGVjdXRlcyB3aXRoIHJlcXVlc3QucGFyYW0gPT0gMQorICAg
ICAgICBteXNldHVwKHJlcXVlc3QsIGRiKSBleGVjdXRlcworICAgICAgICAgICAgdGVzdF9zb21l
dGhpbmcoKSBleGVjdXRlcworICAgICAgICBteXNldHVwX2ZpbmFsaXplKCkgZXhlY3V0ZXMKKyAg
ICAgICAgbXlzZXR1cChyZXF1ZXN0LCBkYikgZXhlY3V0ZXMKKyAgICAgICAgICAgIHRlc3Rfb3Ro
ZXJ0aGluZygpIGV4ZWN1dGVzCisgICAgICAgIG15c2V0dXBfZmluYWxpemUoKSBleGVjdXRlcwor
ICAgIGRiX2ZpbmFsaXplKCkgZXhlY3V0ZXMKKyAgICBkYihyZXF1ZXN0KSBleGVjdXRlcyB3aXRo
IHJlcXVlc3QucGFyYW0gPT0gMgorICAgICAgICBteXNldHVwKHJlcXVlc3QsIGRiKSBleGVjdXRl
cworICAgICAgICAgICAgdGVzdF9zb21ldGhpbmcoKSBleGVjdXRlcworICAgICAgICBteXNldHVw
X2ZpbmFsaXplKCkgZXhlY3V0ZXMKKyAgICAgICAgbXlzZXR1cChyZXF1ZXN0LCBkYikgZXhlY3V0
ZXMKKyAgICAgICAgICAgIHRlc3Rfb3RoZXJ0aGluZygpIGV4ZWN1dGVzCisgICAgICAgIG15c2V0
dXBfZmluYWxpemUoKSBleGVjdXRlcworICAgIGRiX2ZpbmFsaXplKCkgZXhlY3V0ZXMKKworCitF
eGFtcGxlIDMgLSBmdW5jYXJncyBzZXNzaW9uLW1peAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorCitTaW1pbGFyIHdpdGggZnVuY2FyZ3MsIGFuIGV4YW1wbGU6Ogor
CisgICAgQHB5dGVzdC5tYXJrLmZ1bmNhcmcoc2NvcGU9InNlc3Npb24iLCBwYXJhbXM9WzEsMl0p
CisgICAgZGVmIGRiKHJlcXVlc3QpOgorICAgICAgICByZXF1ZXN0LmFkZGZpbmFsaXplcihkYl9m
aW5hbGl6ZSkKKworICAgIEBweXRlc3QubWFyay5mdW5jYXJnKHNjb3BlPSJmdW5jdGlvbiIpCisg
ICAgZGVmIHRhYmxlKHJlcXVlc3QsIGRiKToKKyAgICAgICAgLi4uCisgICAgICAgIHJlcXVlc3Qu
YWRkZmluYWxpemVyKHRhYmxlX2ZpbmFsaXplKQorICAgICAgICAuLi4KKworQW5kIGEgZ2l2ZW4g
dGVzdCBtb2R1bGU6CisKKyAgICBkZWYgdGVzdF9zb21ldGhpbmcodGFibGUpOgorICAgICAgICAu
Li4KKyAgICBkZWYgdGVzdF9vdGhlcnRoaW5nKHRhYmxlKToKKyAgICAgICAgcGFzcworICAgIGRl
ZiB0ZXN0X3RoaXJkdGhpbmcoKToKKyAgICAgICAgcGFzcworCitIZXJlIGlzIHdoYXQgaGFwcGVu
czo6CisKKyAgICBkYihyZXF1ZXN0KSBleGVjdXRlcyB3aXRoIHBhcmFtID09IDEKKyAgICAgICAg
dGFibGUocmVxdWVzdCwgZGIpCisgICAgICAgICAgICB0ZXN0X3NvbWV0aGluZyh0YWJsZSkKKyAg
ICAgICAgdGFibGVfZmluYWxpemUoKQorICAgICAgICB0YWJsZShyZXF1ZXN0LCBkYikKKyAgICAg
ICAgICAgIHRlc3Rfb3RoZXJ0aGluZyh0YWJsZSkKKyAgICAgICAgdGFibGVfZmluYWxpemUoKQor
ICAgIGRiX2ZpbmFsaXplCisgICAgZGIocmVxdWVzdCkgZXhlY3V0ZXMgd2l0aCBwYXJhbSA9PSAy
CisgICAgICAgIHRhYmxlKHJlcXVlc3QsIGRiKQorICAgICAgICAgICAgdGVzdF9zb21ldGhpbmco
dGFibGUpCisgICAgICAgIHRhYmxlX2ZpbmFsaXplKCkKKyAgICAgICAgdGFibGUocmVxdWVzdCwg
ZGIpCisgICAgICAgICAgICB0ZXN0X290aGVydGhpbmcodGFibGUpCisgICAgICAgIHRhYmxlX2Zp
bmFsaXplKCkKKyAgICBkYl9maW5hbGl6ZQorICAgIHRlc3RfdGhpcmR0aGluZygpCisgICAgCitE
YXRhIHN0cnVjdHVyZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3B5dGVzdCBpbnRlcm5hbGx5
IG1haW50YWlucyBhIGRpY3Qgb2YgYWN0aXZlIGZ1bmNhcmdzIHdpdGggY2FjaGUsIHBhcmFtLAor
ZmluYWxpemVyLCAoc2NvcGVpdGVtPykgaW5mb3JtYXRpb246CisKKyAgICBhY3RpdmVfZnVuY2Fy
Z3MgPSBkaWN0KCkKKworaWYgYSBwYXJhbWV0cml6ZWQgImRiIiBpcyBhY3RpdmF0ZWQ6CisgICAg
CisgICAgYWN0aXZlX2Z1bmNhcmdzWyJkYiJdID0gRnVuY2FyZ0luZm8oZGJ2YWx1ZSwgcGFyYW1p
bmRleCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY2FyZ0Zp
bmFsaXplKC4uLiksIHNjb3BlaXRlbSkKKworaWYgYSB0ZXN0IGlzIHRvcm4gZG93biBhbmQgdGhl
IG5leHQgdGVzdCByZXF1aXJlcyBhIGRpZmZlcmVudGx5IAorcGFyYW1ldHJpemVkICJkYiI6CisK
KyAgICBmb3IgYXJnbmFtZSBpbiBpdGVtLmNhbGxzcGVjLnBhcmFtczoKKyAgICAgICAgaWYgYXJn
bmFtZSBpbiBhY3RpdmVfZnVuY2FyZ3M6CisgICAgICAgICAgICBmdW5jYXJnaW5mbyA9IGFjdGl2
ZV9mdW5jYXJnc1thcmduYW1lXQorICAgICAgICAgICAgaWYgZnVuY2FyZ2luZm8ucGFyYW0gIT0g
aXRlbS5jYWxsc3BlYy5wYXJhbXNbYXJnbmFtZV06CisgICAgICAgICAgICAgICAgZnVuY2FyZ2lu
Zm8uY2FsbGZpbmFsaXplcigpCisgICAgICAgICAgICAgICAgZGVsIG5vZGUyZnVuY2FyZ1tmdW5j
YXJnaW5mby5zY29wZWl0ZW1dCisgICAgICAgICAgICAgICAgZGVsIGFjdGl2ZV9mdW5jYXJnc1th
cmduYW1lXQorICAgIG5vZGVzX3RvX2JlX3Rvcm5fZG93biA9IC4uLgorICAgIGZvciBub2RlIGlu
IG5vZGVzX3RvX2JlX3Rvcm5fZG93bjoKKyAgICAgICAgaWYgbm9kZSBpbiBub2RlMmZ1bmNhcmc6
CisgICAgICAgICAgICBhcmduYW1lID0gbm9kZTJmdW5jYXJnW25vZGVdCisgICAgICAgICAgICBh
Y3RpdmVfZnVuY2FyZ3NbYXJnbmFtZV0uY2FsbGZpbmFsaXplcigpCisgICAgICAgICAgICBkZWwg
bm9kZTJmdW5jYXJnW25vZGVdCisgICAgICAgICAgICBkZWwgYWN0aXZlX2Z1bmNhcmdzW2FyZ25h
bWVdCisKK2lmIGEgdGVzdCBpcyBzZXR1cCByZXF1aXJpbmcgYSAiZGIiIGZ1bmNhcmc6CisKKyAg
ICBpZiAiZGIiIGluIGFjdGl2ZV9mdW5jYXJnczoKKyAgICAgICAgcmV0dXJuIGFjdGl2ZV9mdW5j
YXJnc1siZGIiXVswXQorICAgIGZ1bmNhcmdpbmZvID0gc2V0dXBfZnVuY2FyZygpCisgICAgYWN0
aXZlX2Z1bmNhcmdzWyJkYiJdID0gZnVuY2FyZ2luZm8KKyAgICBub2RlMmZ1bmNhcmdbZnVuY2Fy
Z2luZm8uc2NvcGVpdGVtXSA9ICJkYiIKKworSW1wbGVtZW50YXRpb24gcGxhbiBmb3IgcmVzb3Vy
Y2VzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworMS4gUmV2
ZXJ0IEZ1bmNhcmdSZXF1ZXN0IHRvIHRoZSBvbGQgZm9ybSwgdW5tZXJnZSBpdGVtL3JlcXVlc3QK
KyAgIChkb25lKQorMi4gbWFrZSBmdW5jYXJnIGZhY3RvcmllcyBiZSBkaXNjb3ZlcmVkIGF0IGNv
bGxlY3Rpb24gdGltZQorMy4gSW50cm9kdWNlIGZ1bmNhcmcgbWFya2VyCis0LiBJbnRyb2R1Y2Ug
ZnVuY2FyZyBzY29wZSBwYXJhbWV0ZXIKKzUuIEludHJvZHVjZSBmdW5jYXJnIHBhcmFtZXRyaXpl
IHBhcmFtZXRlcgorNi4gbWFrZSBzZXR1cCBmdW5jdGlvbnMgYmUgZGlzY292ZXJlZCBhdCBjb2xs
ZWN0aW9uIHRpbWUKKzcuIChJbnRyb2R1Y2UgYSBweXRlc3RfZml4dHVyZV9wcm90b2NvbC9zZXR1
cF9mdW5jYXJncyBob29rKQorCittZXRob2RzIGFuZCBkYXRhIHN0cnVjdHVyZXMKKy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0EgRnVuY2FyY01hbmFnZXIgaG9sZHMgYWxsIGlu
Zm9ybWF0aW9uIGFib3V0IGZ1bmNhcmcgZGVmaW5pdGlvbnMKK2luY2x1ZGluZyBwYXJhbWV0cml6
YXRpb24gYW5kIHNjb3BlIGRlZmluaXRpb25zLiAgSXQgaW1wbGVtZW50cworYSBweXRlc3RfZ2Vu
ZXJhdGVfdGVzdHMgaG9vayB3aGljaCBwZXJmb3JtcyBwYXJhbWV0cml6YXRpb24gYXMgYXBwcm9w
cmlhdGUuCisKK2FzIGEgc2ltcGxlIGV4YW1wbGUsIGxldCdzIGNvbnNpZGVyIGEgdHJlZSB3aGVy
ZSBhIHRlc3QgZnVuY3Rpb24gcmVxdWlyZXMKK2EgImFiYyIgZnVuY2FyZyBhbmQgaXRzIGZhY3Rv
cnkgZGVmaW5lcyBpdCBhcyBwYXJhbWV0cml6ZWQgYW5kIHNjb3BlZAorZm9yIE1vZHVsZXMuICBX
aGVuIGNvbGxlY3Rpb25zIGhpdHMgdGhlIGZ1bmN0aW9uIGl0ZW0sIGl0IGNyZWF0ZXMKK3RoZSBt
ZXRhZnVuYyBvYmplY3QsIGFuZCBjYWxscyBmdW5jYXJnZGIucHl0ZXN0X2dlbmVyYXRlX3Rlc3Rz
KG1ldGFmdW5jKQord2hpY2ggbG9va3MgdXAgYXZhaWxhYmxlIGZ1bmNhcmcgZmFjdG9yaWVzIGFu
ZCB0aGVpciBzY29wZSBhbmQgcGFyYW1ldHJpemF0aW9uLgorVGhpcyBpbmZvcm1hdGlvbiBpcyBl
cXVpdmFsZW50IHRvIHdoYXQgY2FuIGJlIHByb3ZpZGVkIHRvZGF5IGRpcmVjdGx5CithdCB0aGUg
ZnVuY3Rpb24gc2l0ZSBhbmQgaXQgc2hvdWxkIHRodXMgYmUgcmVsYXRpdmVseSBzdHJhaWdodCBm
b3J3YXJkCit0byBpbXBsZW1lbnQgdGhlIGFkZGl0aW9uYWwgd2F5IG9mIGRlZmluaW5nIHBhcmFt
ZXRyaXphdGlvbi9zY29waW5nLgorCitjb25mdGVzdCBsb2FkaW5nOgorICAgIGVhY2ggZnVuY2Fy
Zy1mYWN0b3J5IHdpbGwgcG9wdWxhdGUgdGhlIHNlc3Npb24uZnVuY2FyZ21hbmFnZXIKKworV2hl
biBhIHRlc3QgaXRlbSBpcyBjb2xsZWN0ZWQsIGl0IGdyb3dzIGEgZGljdGlvbmFyeSAKKyhmdW5j
YXJnbmFtZTJmYWN0b3J5Y2FsbGxpc3QpLiAgQSBmYWN0b3J5IGxvb2t1cCBpcyBwZXJmb3JtZWQg
Citmb3IgZWFjaCByZXF1aXJlZCBmdW5jYXJnLiAgVGhlIHJlc3VsdGluZyBmYWN0b3J5IGNhbGwg
aXMgc3RvcmVkIAord2l0aCB0aGUgaXRlbS4gIElmIGEgZnVuY3Rpb24gaXMgcGFyYW1ldHJpemVk
IG11bHRpcGxlIGl0ZW1zIGFyZSAKK2NyZWF0ZWQgd2l0aCByZXNwZWN0aXZlIGZhY3RvcnkgY2Fs
bHMuIEVsc2UgaWYgYSBmYWN0b3J5IGlzIHBhcmFtZXRyaXplZAorbXVsdGlwbGUgaXRlbXMgYW5k
IGNhbGxzIHRvIHRoZSBmYWN0b3J5IGZ1bmN0aW9uIGFyZSBjcmVhdGVkIGFzIHdlbGwuCisKK0F0
IHNldHVwIHRpbWUsIGFuIGl0ZW0gcG9wdWxhdGVzIGEgZnVuY2FyZ3MgbWFwcGluZywgbWFwcGlu
ZyBuYW1lcwordG8gdmFsdWVzLiAgSWYgYSB2YWx1ZSBpcyBmdW5jYXJnIGZhY3RvcmllcyBhcmUg
cXVlcmllZCBmb3IgYSBnaXZlbiBpdGVtCit0ZXN0IGZ1bmN0aW9ucyBhbmQgc2V0dXAgZnVuY3Rp
b25zIGFyZSBwdXQgaW4gYSBjbGFzcword2hpY2ggbG9va3MgdXAgcmVxdWlyZWQgZnVuY2FyZyBm
YWN0b3JpZXMuCisKKwpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rv
b2xzL3B5dGVzdC9fcHl0ZXN0L2p1bml0eG1sLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQv
dzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L2p1bml0eG1sLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwLi42NjBkNzE4YTZhOAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRy
aXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9qdW5pdHhtbC5weQpA
QCAtMCwwICsxLDM4NyBAQAorIiIiCisgICAgcmVwb3J0IHRlc3QgcmVzdWx0cyBpbiBKVW5pdC1Y
TUwgZm9ybWF0LAorICAgIGZvciB1c2Ugd2l0aCBKZW5raW5zIGFuZCBidWlsZCBpbnRlZ3JhdGlv
biBzZXJ2ZXJzLgorCisKK0Jhc2VkIG9uIGluaXRpYWwgY29kZSBmcm9tIFJvc3MgTGF3bGV5Lgor
IiIiCisjIE91dHB1dCBjb25mb3JtcyB0byBodHRwczovL2dpdGh1Yi5jb20vamVua2luc2NpL3h1
bml0LXBsdWdpbi9ibG9iL21hc3Rlci8KKyMgc3JjL21haW4vcmVzb3VyY2VzL29yZy9qZW5raW5z
Y2kvcGx1Z2lucy94dW5pdC90eXBlcy9tb2RlbC94c2QvanVuaXQtMTAueHNkCisKK2ltcG9ydCBw
eQoraW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aW1lCitpbXBvcnQg
cHl0ZXN0CisKKyMgUHl0aG9uIDIuWCBhbmQgMy5YIGNvbXBhdGliaWxpdHkKK2lmIHN5cy52ZXJz
aW9uX2luZm9bMF0gPCAzOgorICAgIGZyb20gY29kZWNzIGltcG9ydCBvcGVuCitlbHNlOgorICAg
IHVuaWNociA9IGNocgorICAgIHVuaWNvZGUgPSBzdHIKKyAgICBsb25nID0gaW50CisKKworY2xh
c3MgSnVuaXQocHkueG1sLk5hbWVzcGFjZSk6CisgICAgcGFzcworCisjIFdlIG5lZWQgdG8gZ2V0
IHRoZSBzdWJzZXQgb2YgdGhlIGludmFsaWQgdW5pY29kZSByYW5nZXMgYWNjb3JkaW5nIHRvCisj
IFhNTCAxLjAgd2hpY2ggYXJlIHZhbGlkIGluIHRoaXMgcHl0aG9uIGJ1aWxkLiAgSGVuY2Ugd2Ug
Y2FsY3VsYXRlCisjIHRoaXMgZHluYW1pY2FsbHkgaW5zdGVhZCBvZiBoYXJkY29kaW5nIGl0LiAg
VGhlIHNwZWMgcmFuZ2Ugb2YgdmFsaWQKKyMgY2hhcnMgaXM6IENoYXIgOjo9ICN4OSB8ICN4QSB8
ICN4RCB8IFsjeDIwLSN4RDdGRl0gfCBbI3hFMDAwLSN4RkZGRF0KKyMgICAgICAgICAgICAgICAg
ICAgIHwgWyN4MTAwMDAtI3gxMEZGRkZdCitfbGVnYWxfY2hhcnMgPSAoMHgwOSwgMHgwQSwgMHgw
ZCkKK19sZWdhbF9yYW5nZXMgPSAoCisgICAgKDB4MjAsIDB4N0UpLCAoMHg4MCwgMHhEN0ZGKSwg
KDB4RTAwMCwgMHhGRkZEKSwgKDB4MTAwMDAsIDB4MTBGRkZGKSwKKykKK19sZWdhbF94bWxfcmUg
PSBbCisgICAgdW5pY29kZSgiJXMtJXMiKSAlICh1bmljaHIobG93KSwgdW5pY2hyKGhpZ2gpKQor
ICAgIGZvciAobG93LCBoaWdoKSBpbiBfbGVnYWxfcmFuZ2VzIGlmIGxvdyA8IHN5cy5tYXh1bmlj
b2RlCitdCitfbGVnYWxfeG1sX3JlID0gW3VuaWNocih4KSBmb3IgeCBpbiBfbGVnYWxfY2hhcnNd
ICsgX2xlZ2FsX3htbF9yZQoraWxsZWdhbF94bWxfcmUgPSByZS5jb21waWxlKHVuaWNvZGUoJ1te
JXNdJykgJSB1bmljb2RlKCcnKS5qb2luKF9sZWdhbF94bWxfcmUpKQorZGVsIF9sZWdhbF9jaGFy
cworZGVsIF9sZWdhbF9yYW5nZXMKK2RlbCBfbGVnYWxfeG1sX3JlCisKK19weV9leHRfcmUgPSBy
ZS5jb21waWxlKHIiXC5weSQiKQorCisKK2RlZiBiaW5feG1sX2VzY2FwZShhcmcpOgorICAgIGRl
ZiByZXBsKG1hdGNob2JqKToKKyAgICAgICAgaSA9IG9yZChtYXRjaG9iai5ncm91cCgpKQorICAg
ICAgICBpZiBpIDw9IDB4RkY6CisgICAgICAgICAgICByZXR1cm4gdW5pY29kZSgnI3glMDJYJykg
JSBpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gdW5pY29kZSgnI3glMDRYJykg
JSBpCisKKyAgICByZXR1cm4gcHkueG1sLnJhdyhpbGxlZ2FsX3htbF9yZS5zdWIocmVwbCwgcHku
eG1sLmVzY2FwZShhcmcpKSkKKworCitjbGFzcyBfTm9kZVJlcG9ydGVyKG9iamVjdCk6CisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIG5vZGVpZCwgeG1sKToKKworICAgICAgICBzZWxmLmlkID0gbm9k
ZWlkCisgICAgICAgIHNlbGYueG1sID0geG1sCisgICAgICAgIHNlbGYuYWRkX3N0YXRzID0gc2Vs
Zi54bWwuYWRkX3N0YXRzCisgICAgICAgIHNlbGYuZHVyYXRpb24gPSAwCisgICAgICAgIHNlbGYu
cHJvcGVydGllcyA9IFtdCisgICAgICAgIHNlbGYubm9kZXMgPSBbXQorICAgICAgICBzZWxmLnRl
c3RjYXNlID0gTm9uZQorICAgICAgICBzZWxmLmF0dHJzID0ge30KKworICAgIGRlZiBhcHBlbmQo
c2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYueG1sLmFkZF9zdGF0cyh0eXBlKG5vZGUpLl9fbmFt
ZV9fKQorICAgICAgICBzZWxmLm5vZGVzLmFwcGVuZChub2RlKQorCisgICAgZGVmIGFkZF9wcm9w
ZXJ0eShzZWxmLCBuYW1lLCB2YWx1ZSk6CisgICAgICAgIHNlbGYucHJvcGVydGllcy5hcHBlbmQo
KHN0cihuYW1lKSwgYmluX3htbF9lc2NhcGUodmFsdWUpKSkKKworICAgIGRlZiBtYWtlX3Byb3Bl
cnRpZXNfbm9kZShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIGEgSnVuaXQgbm9kZSBjb250YWlu
aW5nIGN1c3RvbSBwcm9wZXJ0aWVzLCBpZiBhbnkuCisgICAgICAgICIiIgorICAgICAgICBpZiBz
ZWxmLnByb3BlcnRpZXM6CisgICAgICAgICAgICByZXR1cm4gSnVuaXQucHJvcGVydGllcyhbCisg
ICAgICAgICAgICAgICAgSnVuaXQucHJvcGVydHkobmFtZT1uYW1lLCB2YWx1ZT12YWx1ZSkKKyAg
ICAgICAgICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gc2VsZi5wcm9wZXJ0aWVzCisgICAgICAg
ICAgICBdKQorICAgICAgICByZXR1cm4gJycKKworICAgIGRlZiByZWNvcmRfdGVzdHJlcG9ydChz
ZWxmLCB0ZXN0cmVwb3J0KToKKyAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLnRlc3RjYXNlCisgICAg
ICAgIG5hbWVzID0gbWFuZ2xlX3Rlc3RfYWRkcmVzcyh0ZXN0cmVwb3J0Lm5vZGVpZCkKKyAgICAg
ICAgY2xhc3NuYW1lcyA9IG5hbWVzWzotMV0KKyAgICAgICAgaWYgc2VsZi54bWwucHJlZml4Ogor
ICAgICAgICAgICAgY2xhc3NuYW1lcy5pbnNlcnQoMCwgc2VsZi54bWwucHJlZml4KQorICAgICAg
ICBhdHRycyA9IHsKKyAgICAgICAgICAgICJjbGFzc25hbWUiOiAiLiIuam9pbihjbGFzc25hbWVz
KSwKKyAgICAgICAgICAgICJuYW1lIjogYmluX3htbF9lc2NhcGUobmFtZXNbLTFdKSwKKyAgICAg
ICAgICAgICJmaWxlIjogdGVzdHJlcG9ydC5sb2NhdGlvblswXSwKKyAgICAgICAgfQorICAgICAg
ICBpZiB0ZXN0cmVwb3J0LmxvY2F0aW9uWzFdIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgYXR0
cnNbImxpbmUiXSA9IHRlc3RyZXBvcnQubG9jYXRpb25bMV0KKyAgICAgICAgc2VsZi5hdHRycyA9
IGF0dHJzCisKKyAgICBkZWYgdG9feG1sKHNlbGYpOgorICAgICAgICB0ZXN0Y2FzZSA9IEp1bml0
LnRlc3RjYXNlKHRpbWU9c2VsZi5kdXJhdGlvbiwgKipzZWxmLmF0dHJzKQorICAgICAgICB0ZXN0
Y2FzZS5hcHBlbmQoc2VsZi5tYWtlX3Byb3BlcnRpZXNfbm9kZSgpKQorICAgICAgICBmb3Igbm9k
ZSBpbiBzZWxmLm5vZGVzOgorICAgICAgICAgICAgdGVzdGNhc2UuYXBwZW5kKG5vZGUpCisgICAg
ICAgIHJldHVybiB0ZXN0Y2FzZQorCisgICAgZGVmIF9hZGRfc2ltcGxlKHNlbGYsIGtpbmQsIG1l
c3NhZ2UsIGRhdGE9Tm9uZSk6CisgICAgICAgIGRhdGEgPSBiaW5feG1sX2VzY2FwZShkYXRhKQor
ICAgICAgICBub2RlID0ga2luZChkYXRhLCBtZXNzYWdlPW1lc3NhZ2UpCisgICAgICAgIHNlbGYu
YXBwZW5kKG5vZGUpCisKKyAgICBkZWYgX3dyaXRlX2NhcHR1cmVkX291dHB1dChzZWxmLCByZXBv
cnQpOgorICAgICAgICBmb3IgY2FwbmFtZSBpbiAoJ291dCcsICdlcnInKToKKyAgICAgICAgICAg
IGFsbGNvbnRlbnQgPSAiIgorICAgICAgICAgICAgZm9yIG5hbWUsIGNvbnRlbnQgaW4gcmVwb3J0
LmdldF9zZWN0aW9ucygiQ2FwdHVyZWQgc3RkJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwbmFtZSk6CisgICAgICAgICAgICAgICAg
YWxsY29udGVudCArPSBjb250ZW50CisgICAgICAgICAgICBpZiBhbGxjb250ZW50OgorICAgICAg
ICAgICAgICAgIHRhZyA9IGdldGF0dHIoSnVuaXQsICdzeXN0ZW0tJyArIGNhcG5hbWUpCisgICAg
ICAgICAgICAgICAgc2VsZi5hcHBlbmQodGFnKGJpbl94bWxfZXNjYXBlKGFsbGNvbnRlbnQpKSkK
KworICAgIGRlZiBhcHBlbmRfcGFzcyhzZWxmLCByZXBvcnQpOgorICAgICAgICBzZWxmLmFkZF9z
dGF0cygncGFzc2VkJykKKyAgICAgICAgc2VsZi5fd3JpdGVfY2FwdHVyZWRfb3V0cHV0KHJlcG9y
dCkKKworICAgIGRlZiBhcHBlbmRfZmFpbHVyZShzZWxmLCByZXBvcnQpOgorICAgICAgICAjIG1z
ZyA9IHN0cihyZXBvcnQubG9uZ3JlcHIucmVwcnRyYWNlYmFjay5leHRyYWxpbmUpCisgICAgICAg
IGlmIGhhc2F0dHIocmVwb3J0LCAid2FzeGZhaWwiKToKKyAgICAgICAgICAgIHNlbGYuX2FkZF9z
aW1wbGUoCisgICAgICAgICAgICAgICAgSnVuaXQuc2tpcHBlZCwKKyAgICAgICAgICAgICAgICAi
eGZhaWwtbWFya2VkIHRlc3QgcGFzc2VzIHVuZXhwZWN0ZWRseSIpCisgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICBpZiBoYXNhdHRyKHJlcG9ydC5sb25ncmVwciwgInJlcHJjcmFzaCIpOgorICAg
ICAgICAgICAgICAgIG1lc3NhZ2UgPSByZXBvcnQubG9uZ3JlcHIucmVwcmNyYXNoLm1lc3NhZ2UK
KyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShyZXBvcnQubG9uZ3JlcHIsICh1bmljb2RlLCBz
dHIpKToKKyAgICAgICAgICAgICAgICBtZXNzYWdlID0gcmVwb3J0LmxvbmdyZXByCisgICAgICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBzdHIocmVwb3J0LmxvbmdyZXBy
KQorICAgICAgICAgICAgbWVzc2FnZSA9IGJpbl94bWxfZXNjYXBlKG1lc3NhZ2UpCisgICAgICAg
ICAgICBmYWlsID0gSnVuaXQuZmFpbHVyZShtZXNzYWdlPW1lc3NhZ2UpCisgICAgICAgICAgICBm
YWlsLmFwcGVuZChiaW5feG1sX2VzY2FwZShyZXBvcnQubG9uZ3JlcHIpKQorICAgICAgICAgICAg
c2VsZi5hcHBlbmQoZmFpbCkKKyAgICAgICAgc2VsZi5fd3JpdGVfY2FwdHVyZWRfb3V0cHV0KHJl
cG9ydCkKKworICAgIGRlZiBhcHBlbmRfY29sbGVjdF9lcnJvcihzZWxmLCByZXBvcnQpOgorICAg
ICAgICAjIG1zZyA9IHN0cihyZXBvcnQubG9uZ3JlcHIucmVwcnRyYWNlYmFjay5leHRyYWxpbmUp
CisgICAgICAgIHNlbGYuYXBwZW5kKEp1bml0LmVycm9yKGJpbl94bWxfZXNjYXBlKHJlcG9ydC5s
b25ncmVwciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9ImNvbGxl
Y3Rpb24gZmFpbHVyZSIpKQorCisgICAgZGVmIGFwcGVuZF9jb2xsZWN0X3NraXBwZWQoc2VsZiwg
cmVwb3J0KToKKyAgICAgICAgc2VsZi5fYWRkX3NpbXBsZSgKKyAgICAgICAgICAgIEp1bml0LnNr
aXBwZWQsICJjb2xsZWN0aW9uIHNraXBwZWQiLCByZXBvcnQubG9uZ3JlcHIpCisKKyAgICBkZWYg
YXBwZW5kX2Vycm9yKHNlbGYsIHJlcG9ydCk6CisgICAgICAgIHNlbGYuX2FkZF9zaW1wbGUoCisg
ICAgICAgICAgICBKdW5pdC5lcnJvciwgInRlc3Qgc2V0dXAgZmFpbHVyZSIsIHJlcG9ydC5sb25n
cmVwcikKKyAgICAgICAgc2VsZi5fd3JpdGVfY2FwdHVyZWRfb3V0cHV0KHJlcG9ydCkKKworICAg
IGRlZiBhcHBlbmRfc2tpcHBlZChzZWxmLCByZXBvcnQpOgorICAgICAgICBpZiBoYXNhdHRyKHJl
cG9ydCwgIndhc3hmYWlsIik6CisgICAgICAgICAgICBzZWxmLl9hZGRfc2ltcGxlKAorICAgICAg
ICAgICAgICAgIEp1bml0LnNraXBwZWQsICJleHBlY3RlZCB0ZXN0IGZhaWx1cmUiLCByZXBvcnQu
d2FzeGZhaWwKKyAgICAgICAgICAgICkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZpbGVu
YW1lLCBsaW5lbm8sIHNraXByZWFzb24gPSByZXBvcnQubG9uZ3JlcHIKKyAgICAgICAgICAgIGlm
IHNraXByZWFzb24uc3RhcnRzd2l0aCgiU2tpcHBlZDogIik6CisgICAgICAgICAgICAgICAgc2tp
cHJlYXNvbiA9IGJpbl94bWxfZXNjYXBlKHNraXByZWFzb25bOTpdKQorICAgICAgICAgICAgc2Vs
Zi5hcHBlbmQoCisgICAgICAgICAgICAgICAgSnVuaXQuc2tpcHBlZCgiJXM6JXM6ICVzIiAlIChm
aWxlbmFtZSwgbGluZW5vLCBza2lwcmVhc29uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHR5cGU9InB5dGVzdC5za2lwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1l
c3NhZ2U9c2tpcHJlYXNvbikpCisgICAgICAgIHNlbGYuX3dyaXRlX2NhcHR1cmVkX291dHB1dChy
ZXBvcnQpCisKKyAgICBkZWYgZmluYWxpemUoc2VsZik6CisgICAgICAgIGRhdGEgPSBzZWxmLnRv
X3htbCgpLnVuaWNvZGUoaW5kZW50PTApCisgICAgICAgIHNlbGYuX19kaWN0X18uY2xlYXIoKQor
ICAgICAgICBzZWxmLnRvX3htbCA9IGxhbWJkYTogcHkueG1sLnJhdyhkYXRhKQorCisKK0BweXRl
c3QuZml4dHVyZQorZGVmIHJlY29yZF94bWxfcHJvcGVydHkocmVxdWVzdCk6CisgICAgIiIiRml4
dHVyZSB0aGF0IGFkZHMgZXh0cmEgeG1sIHByb3BlcnRpZXMgdG8gdGhlIHRhZyBmb3IgdGhlIGNh
bGxpbmcgdGVzdC4KKyAgICBUaGUgZml4dHVyZSBpcyBjYWxsYWJsZSB3aXRoIChuYW1lLCB2YWx1
ZSksIHdpdGggdmFsdWUgYmVpbmcgYXV0b21hdGljYWxseQorICAgIHhtbC1lbmNvZGVkLgorICAg
ICIiIgorICAgIHJlcXVlc3Qubm9kZS53YXJuKAorICAgICAgICBjb2RlPSdDMycsCisgICAgICAg
IG1lc3NhZ2U9J3JlY29yZF94bWxfcHJvcGVydHkgaXMgYW4gZXhwZXJpbWVudGFsIGZlYXR1cmUn
LAorICAgICkKKyAgICB4bWwgPSBnZXRhdHRyKHJlcXVlc3QuY29uZmlnLCAiX3htbCIsIE5vbmUp
CisgICAgaWYgeG1sIGlzIG5vdCBOb25lOgorICAgICAgICBub2RlX3JlcG9ydGVyID0geG1sLm5v
ZGVfcmVwb3J0ZXIocmVxdWVzdC5ub2RlLm5vZGVpZCkKKyAgICAgICAgcmV0dXJuIG5vZGVfcmVw
b3J0ZXIuYWRkX3Byb3BlcnR5CisgICAgZWxzZToKKyAgICAgICAgZGVmIGFkZF9wcm9wZXJ0eV9u
b29wKG5hbWUsIHZhbHVlKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICByZXR1cm4gYWRk
X3Byb3BlcnR5X25vb3AKKworCitkZWYgcHl0ZXN0X2FkZG9wdGlvbihwYXJzZXIpOgorICAgIGdy
b3VwID0gcGFyc2VyLmdldGdyb3VwKCJ0ZXJtaW5hbCByZXBvcnRpbmciKQorICAgIGdyb3VwLmFk
ZG9wdGlvbigKKyAgICAgICAgJy0tanVuaXR4bWwnLCAnLS1qdW5pdC14bWwnLAorICAgICAgICBh
Y3Rpb249InN0b3JlIiwKKyAgICAgICAgZGVzdD0ieG1scGF0aCIsCisgICAgICAgIG1ldGF2YXI9
InBhdGgiLAorICAgICAgICBkZWZhdWx0PU5vbmUsCisgICAgICAgIGhlbHA9ImNyZWF0ZSBqdW5p
dC14bWwgc3R5bGUgcmVwb3J0IGZpbGUgYXQgZ2l2ZW4gcGF0aC4iKQorICAgIGdyb3VwLmFkZG9w
dGlvbigKKyAgICAgICAgJy0tanVuaXRwcmVmaXgnLCAnLS1qdW5pdC1wcmVmaXgnLAorICAgICAg
ICBhY3Rpb249InN0b3JlIiwKKyAgICAgICAgbWV0YXZhcj0ic3RyIiwKKyAgICAgICAgZGVmYXVs
dD1Ob25lLAorICAgICAgICBoZWxwPSJwcmVwZW5kIHByZWZpeCB0byBjbGFzc25hbWVzIGluIGp1
bml0LXhtbCBvdXRwdXQiKQorCisKK2RlZiBweXRlc3RfY29uZmlndXJlKGNvbmZpZyk6CisgICAg
eG1scGF0aCA9IGNvbmZpZy5vcHRpb24ueG1scGF0aAorICAgICMgcHJldmVudCBvcGVuaW5nIHht
bGxvZyBvbiBzbGF2ZSBub2RlcyAoeGRpc3QpCisgICAgaWYgeG1scGF0aCBhbmQgbm90IGhhc2F0
dHIoY29uZmlnLCAnc2xhdmVpbnB1dCcpOgorICAgICAgICBjb25maWcuX3htbCA9IExvZ1hNTCh4
bWxwYXRoLCBjb25maWcub3B0aW9uLmp1bml0cHJlZml4KQorICAgICAgICBjb25maWcucGx1Z2lu
bWFuYWdlci5yZWdpc3Rlcihjb25maWcuX3htbCkKKworCitkZWYgcHl0ZXN0X3VuY29uZmlndXJl
KGNvbmZpZyk6CisgICAgeG1sID0gZ2V0YXR0cihjb25maWcsICdfeG1sJywgTm9uZSkKKyAgICBp
ZiB4bWw6CisgICAgICAgIGRlbCBjb25maWcuX3htbAorICAgICAgICBjb25maWcucGx1Z2lubWFu
YWdlci51bnJlZ2lzdGVyKHhtbCkKKworCitkZWYgbWFuZ2xlX3Rlc3RfYWRkcmVzcyhhZGRyZXNz
KToKKyAgICBwYXRoLCBwb3NzaWJsZV9vcGVuX2JyYWNrZXQsIHBhcmFtcyA9IGFkZHJlc3MucGFy
dGl0aW9uKCdbJykKKyAgICBuYW1lcyA9IHBhdGguc3BsaXQoIjo6IikKKyAgICB0cnk6CisgICAg
ICAgIG5hbWVzLnJlbW92ZSgnKCknKQorICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICBw
YXNzCisgICAgIyBjb252ZXJ0IGZpbGUgcGF0aCB0byBkb3R0ZWQgcGF0aAorICAgIG5hbWVzWzBd
ID0gbmFtZXNbMF0ucmVwbGFjZSgiLyIsICcuJykKKyAgICBuYW1lc1swXSA9IF9weV9leHRfcmUu
c3ViKCIiLCBuYW1lc1swXSkKKyAgICAjIHB1dCBhbnkgcGFyYW1zIGJhY2sKKyAgICBuYW1lc1st
MV0gKz0gcG9zc2libGVfb3Blbl9icmFja2V0ICsgcGFyYW1zCisgICAgcmV0dXJuIG5hbWVzCisK
KworY2xhc3MgTG9nWE1MKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvZ2ZpbGUs
IHByZWZpeCk6CisgICAgICAgIGxvZ2ZpbGUgPSBvcy5wYXRoLmV4cGFuZHVzZXIob3MucGF0aC5l
eHBhbmR2YXJzKGxvZ2ZpbGUpKQorICAgICAgICBzZWxmLmxvZ2ZpbGUgPSBvcy5wYXRoLm5vcm1w
YXRoKG9zLnBhdGguYWJzcGF0aChsb2dmaWxlKSkKKyAgICAgICAgc2VsZi5wcmVmaXggPSBwcmVm
aXgKKyAgICAgICAgc2VsZi5zdGF0cyA9IGRpY3QuZnJvbWtleXMoWworICAgICAgICAgICAgJ2Vy
cm9yJywKKyAgICAgICAgICAgICdwYXNzZWQnLAorICAgICAgICAgICAgJ2ZhaWx1cmUnLAorICAg
ICAgICAgICAgJ3NraXBwZWQnLAorICAgICAgICBdLCAwKQorICAgICAgICBzZWxmLm5vZGVfcmVw
b3J0ZXJzID0ge30gICMgbm9kZWlkIC0+IF9Ob2RlUmVwb3J0ZXIKKyAgICAgICAgc2VsZi5ub2Rl
X3JlcG9ydGVyc19vcmRlcmVkID0gW10KKworICAgIGRlZiBmaW5hbGl6ZShzZWxmLCByZXBvcnQp
OgorICAgICAgICBub2RlaWQgPSBnZXRhdHRyKHJlcG9ydCwgJ25vZGVpZCcsIHJlcG9ydCkKKyAg
ICAgICAgIyBsb2NhbCBoYWNrIHRvIGhhbmRsZSB4ZGlzdCByZXBvcnQgb3JkZXIKKyAgICAgICAg
c2xhdmVub2RlID0gZ2V0YXR0cihyZXBvcnQsICdub2RlJywgTm9uZSkKKyAgICAgICAgcmVwb3J0
ZXIgPSBzZWxmLm5vZGVfcmVwb3J0ZXJzLnBvcCgobm9kZWlkLCBzbGF2ZW5vZGUpKQorICAgICAg
ICBpZiByZXBvcnRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJlcG9ydGVyLmZpbmFsaXpl
KCkKKworICAgIGRlZiBub2RlX3JlcG9ydGVyKHNlbGYsIHJlcG9ydCk6CisgICAgICAgIG5vZGVp
ZCA9IGdldGF0dHIocmVwb3J0LCAnbm9kZWlkJywgcmVwb3J0KQorICAgICAgICAjIGxvY2FsIGhh
Y2sgdG8gaGFuZGxlIHhkaXN0IHJlcG9ydCBvcmRlcgorICAgICAgICBzbGF2ZW5vZGUgPSBnZXRh
dHRyKHJlcG9ydCwgJ25vZGUnLCBOb25lKQorCisgICAgICAgIGtleSA9IG5vZGVpZCwgc2xhdmVu
b2RlCisKKyAgICAgICAgaWYga2V5IGluIHNlbGYubm9kZV9yZXBvcnRlcnM6CisgICAgICAgICAg
ICAjIFRPRE86IGJyZWFza3MgZm9yIC0tZGlzdD1lYWNoCisgICAgICAgICAgICByZXR1cm4gc2Vs
Zi5ub2RlX3JlcG9ydGVyc1trZXldCisgICAgICAgIHJlcG9ydGVyID0gX05vZGVSZXBvcnRlcihu
b2RlaWQsIHNlbGYpCisgICAgICAgIHNlbGYubm9kZV9yZXBvcnRlcnNba2V5XSA9IHJlcG9ydGVy
CisgICAgICAgIHNlbGYubm9kZV9yZXBvcnRlcnNfb3JkZXJlZC5hcHBlbmQocmVwb3J0ZXIpCisg
ICAgICAgIHJldHVybiByZXBvcnRlcgorCisgICAgZGVmIGFkZF9zdGF0cyhzZWxmLCBrZXkpOgor
ICAgICAgICBpZiBrZXkgaW4gc2VsZi5zdGF0czoKKyAgICAgICAgICAgIHNlbGYuc3RhdHNba2V5
XSArPSAxCisKKyAgICBkZWYgX29wZW50ZXN0Y2FzZShzZWxmLCByZXBvcnQpOgorICAgICAgICBy
ZXBvcnRlciA9IHNlbGYubm9kZV9yZXBvcnRlcihyZXBvcnQpCisgICAgICAgIHJlcG9ydGVyLnJl
Y29yZF90ZXN0cmVwb3J0KHJlcG9ydCkKKyAgICAgICAgcmV0dXJuIHJlcG9ydGVyCisKKyAgICBk
ZWYgcHl0ZXN0X3J1bnRlc3RfbG9ncmVwb3J0KHNlbGYsIHJlcG9ydCk6CisgICAgICAgICIiImhh
bmRsZSBhIHNldHVwL2NhbGwvdGVhcmRvd24gcmVwb3J0LCBnZW5lcmF0aW5nIHRoZSBhcHByb3By
aWF0ZQorICAgICAgICB4bWwgdGFncyBhcyBuZWNlc3NhcnkuCisKKyAgICAgICAgbm90ZTogZHVl
IHRvIHBsdWdpbnMgbGlrZSB4ZGlzdCwgdGhpcyBob29rIG1heSBiZSBjYWxsZWQgaW4gaW50ZXJs
YWNlZAorICAgICAgICBvcmRlciB3aXRoIHJlcG9ydHMgZnJvbSBvdGhlciBub2Rlcy4gZm9yIGV4
YW1wbGU6CisKKyAgICAgICAgdXN1YWwgY2FsbCBvcmRlcjoKKyAgICAgICAgICAgIC0+IHNldHVw
IG5vZGUxCisgICAgICAgICAgICAtPiBjYWxsIG5vZGUxCisgICAgICAgICAgICAtPiB0ZWFyZG93
biBub2RlMQorICAgICAgICAgICAgLT4gc2V0dXAgbm9kZTIKKyAgICAgICAgICAgIC0+IGNhbGwg
bm9kZTIKKyAgICAgICAgICAgIC0+IHRlYXJkb3duIG5vZGUyCisKKyAgICAgICAgcG9zc2libGUg
Y2FsbCBvcmRlciBpbiB4ZGlzdDoKKyAgICAgICAgICAgIC0+IHNldHVwIG5vZGUxCisgICAgICAg
ICAgICAtPiBjYWxsIG5vZGUxCisgICAgICAgICAgICAtPiBzZXR1cCBub2RlMgorICAgICAgICAg
ICAgLT4gY2FsbCBub2RlMgorICAgICAgICAgICAgLT4gdGVhcmRvd24gbm9kZTIKKyAgICAgICAg
ICAgIC0+IHRlYXJkb3duIG5vZGUxCisgICAgICAgICIiIgorICAgICAgICBpZiByZXBvcnQucGFz
c2VkOgorICAgICAgICAgICAgaWYgcmVwb3J0LndoZW4gPT0gImNhbGwiOiAgIyBpZ25vcmUgc2V0
dXAvdGVhcmRvd24KKyAgICAgICAgICAgICAgICByZXBvcnRlciA9IHNlbGYuX29wZW50ZXN0Y2Fz
ZShyZXBvcnQpCisgICAgICAgICAgICAgICAgcmVwb3J0ZXIuYXBwZW5kX3Bhc3MocmVwb3J0KQor
ICAgICAgICBlbGlmIHJlcG9ydC5mYWlsZWQ6CisgICAgICAgICAgICByZXBvcnRlciA9IHNlbGYu
X29wZW50ZXN0Y2FzZShyZXBvcnQpCisgICAgICAgICAgICBpZiByZXBvcnQud2hlbiA9PSAiY2Fs
bCI6CisgICAgICAgICAgICAgICAgcmVwb3J0ZXIuYXBwZW5kX2ZhaWx1cmUocmVwb3J0KQorICAg
ICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXBvcnRlci5hcHBlbmRfZXJyb3IocmVw
b3J0KQorICAgICAgICBlbGlmIHJlcG9ydC5za2lwcGVkOgorICAgICAgICAgICAgcmVwb3J0ZXIg
PSBzZWxmLl9vcGVudGVzdGNhc2UocmVwb3J0KQorICAgICAgICAgICAgcmVwb3J0ZXIuYXBwZW5k
X3NraXBwZWQocmVwb3J0KQorICAgICAgICBzZWxmLnVwZGF0ZV90ZXN0Y2FzZV9kdXJhdGlvbihy
ZXBvcnQpCisgICAgICAgIGlmIHJlcG9ydC53aGVuID09ICJ0ZWFyZG93biI6CisgICAgICAgICAg
ICBzZWxmLmZpbmFsaXplKHJlcG9ydCkKKworICAgIGRlZiB1cGRhdGVfdGVzdGNhc2VfZHVyYXRp
b24oc2VsZiwgcmVwb3J0KToKKyAgICAgICAgIiIiYWNjdW11bGF0ZXMgdG90YWwgZHVyYXRpb24g
Zm9yIG5vZGVpZCBmcm9tIGdpdmVuIHJlcG9ydCBhbmQgdXBkYXRlcworICAgICAgICB0aGUgSnVu
aXQudGVzdGNhc2Ugd2l0aCB0aGUgbmV3IHRvdGFsIGlmIGFscmVhZHkgY3JlYXRlZC4KKyAgICAg
ICAgIiIiCisgICAgICAgIHJlcG9ydGVyID0gc2VsZi5ub2RlX3JlcG9ydGVyKHJlcG9ydCkKKyAg
ICAgICAgcmVwb3J0ZXIuZHVyYXRpb24gKz0gZ2V0YXR0cihyZXBvcnQsICdkdXJhdGlvbicsIDAu
MCkKKworICAgIGRlZiBweXRlc3RfY29sbGVjdHJlcG9ydChzZWxmLCByZXBvcnQpOgorICAgICAg
ICBpZiBub3QgcmVwb3J0LnBhc3NlZDoKKyAgICAgICAgICAgIHJlcG9ydGVyID0gc2VsZi5fb3Bl
bnRlc3RjYXNlKHJlcG9ydCkKKyAgICAgICAgICAgIGlmIHJlcG9ydC5mYWlsZWQ6CisgICAgICAg
ICAgICAgICAgcmVwb3J0ZXIuYXBwZW5kX2NvbGxlY3RfZXJyb3IocmVwb3J0KQorICAgICAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXBvcnRlci5hcHBlbmRfY29sbGVjdF9za2lwcGVk
KHJlcG9ydCkKKworICAgIGRlZiBweXRlc3RfaW50ZXJuYWxlcnJvcihzZWxmLCBleGNyZXByKToK
KyAgICAgICAgcmVwb3J0ZXIgPSBzZWxmLm5vZGVfcmVwb3J0ZXIoJ2ludGVybmFsJykKKyAgICAg
ICAgcmVwb3J0ZXIuYXR0cnMudXBkYXRlKGNsYXNzbmFtZT0icHl0ZXN0IiwgbmFtZT0naW50ZXJu
YWwnKQorICAgICAgICByZXBvcnRlci5fYWRkX3NpbXBsZShKdW5pdC5lcnJvciwgJ2ludGVybmFs
IGVycm9yJywgZXhjcmVwcikKKworICAgIGRlZiBweXRlc3Rfc2Vzc2lvbnN0YXJ0KHNlbGYpOgor
ICAgICAgICBzZWxmLnN1aXRlX3N0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQorCisgICAgZGVmIHB5
dGVzdF9zZXNzaW9uZmluaXNoKHNlbGYpOgorICAgICAgICBkaXJuYW1lID0gb3MucGF0aC5kaXJu
YW1lKG9zLnBhdGguYWJzcGF0aChzZWxmLmxvZ2ZpbGUpKQorICAgICAgICBpZiBub3Qgb3MucGF0
aC5pc2RpcihkaXJuYW1lKToKKyAgICAgICAgICAgIG9zLm1ha2VkaXJzKGRpcm5hbWUpCisgICAg
ICAgIGxvZ2ZpbGUgPSBvcGVuKHNlbGYubG9nZmlsZSwgJ3cnLCBlbmNvZGluZz0ndXRmLTgnKQor
ICAgICAgICBzdWl0ZV9zdG9wX3RpbWUgPSB0aW1lLnRpbWUoKQorICAgICAgICBzdWl0ZV90aW1l
X2RlbHRhID0gc3VpdGVfc3RvcF90aW1lIC0gc2VsZi5zdWl0ZV9zdGFydF90aW1lCisKKyAgICAg
ICAgbnVtdGVzdHMgPSBzZWxmLnN0YXRzWydwYXNzZWQnXSArIHNlbGYuc3RhdHNbJ2ZhaWx1cmUn
XQorCisgICAgICAgIGxvZ2ZpbGUud3JpdGUoJzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9
InV0Zi04Ij8+JykKKyAgICAgICAgbG9nZmlsZS53cml0ZShKdW5pdC50ZXN0c3VpdGUoCisgICAg
ICAgICAgICBbeC50b194bWwoKSBmb3IgeCBpbiBzZWxmLm5vZGVfcmVwb3J0ZXJzX29yZGVyZWRd
LAorICAgICAgICAgICAgbmFtZT0icHl0ZXN0IiwKKyAgICAgICAgICAgIGVycm9ycz1zZWxmLnN0
YXRzWydlcnJvciddLAorICAgICAgICAgICAgZmFpbHVyZXM9c2VsZi5zdGF0c1snZmFpbHVyZSdd
LAorICAgICAgICAgICAgc2tpcHM9c2VsZi5zdGF0c1snc2tpcHBlZCddLAorICAgICAgICAgICAg
dGVzdHM9bnVtdGVzdHMsCisgICAgICAgICAgICB0aW1lPSIlLjNmIiAlIHN1aXRlX3RpbWVfZGVs
dGEsICkudW5pY29kZShpbmRlbnQ9MCkpCisgICAgICAgIGxvZ2ZpbGUuY2xvc2UoKQorCisgICAg
ZGVmIHB5dGVzdF90ZXJtaW5hbF9zdW1tYXJ5KHNlbGYsIHRlcm1pbmFscmVwb3J0ZXIpOgorICAg
ICAgICB0ZXJtaW5hbHJlcG9ydGVyLndyaXRlX3NlcCgiLSIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQgeG1sIGZpbGU6ICVzIiAlIChzZWxmLmxvZ2ZpbGUp
KQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9f
cHl0ZXN0L21haW4ucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0
L19weXRlc3QvbWFpbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u
ODY1NGQ3YWY2MjcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93
M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvbWFpbi5weQpAQCAtMCwwICsxLDc0NCBAQAorIiIiIGNv
cmUgaW1wbGVtZW50YXRpb24gb2YgdGVzdGluZyBwcm9jZXNzOiBpbml0LCBzZXNzaW9uLCBydW50
ZXN0IGxvb3AuICIiIgoraW1wb3J0IGltcAoraW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBz
eXMKKworaW1wb3J0IF9weXRlc3QKK2ltcG9ydCBfcHl0ZXN0Ll9jb2RlCitpbXBvcnQgcHkKK2lt
cG9ydCBweXRlc3QKK3RyeToKKyAgICBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBNdXRhYmxlTWFw
cGluZyBhcyBNYXBwaW5nTWl4aW4KK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBmcm9tIFVzZXJE
aWN0IGltcG9ydCBEaWN0TWl4aW4gYXMgTWFwcGluZ01peGluCisKK2Zyb20gX3B5dGVzdC5ydW5u
ZXIgaW1wb3J0IGNvbGxlY3Rfb25lX25vZGUKKwordHJhY2ViYWNrY3V0ZGlyID0gcHkucGF0aC5s
b2NhbChfcHl0ZXN0Ll9fZmlsZV9fKS5kaXJwYXRoKCkKKworIyBleGl0Y29kZXMgZm9yIHRoZSBj
b21tYW5kIGxpbmUKK0VYSVRfT0sgPSAwCitFWElUX1RFU1RTRkFJTEVEID0gMQorRVhJVF9JTlRF
UlJVUFRFRCA9IDIKK0VYSVRfSU5URVJOQUxFUlJPUiA9IDMKK0VYSVRfVVNBR0VFUlJPUiA9IDQK
K0VYSVRfTk9URVNUU0NPTExFQ1RFRCA9IDUKKworbmFtZV9yZSA9IHJlLmNvbXBpbGUoIl5bYS16
QS1aX11cdyokIikKKworZGVmIHB5dGVzdF9hZGRvcHRpb24ocGFyc2VyKToKKyAgICBwYXJzZXIu
YWRkaW5pKCJub3JlY3Vyc2VkaXJzIiwgImRpcmVjdG9yeSBwYXR0ZXJucyB0byBhdm9pZCBmb3Ig
cmVjdXJzaW9uIiwKKyAgICAgICAgdHlwZT0iYXJncyIsIGRlZmF1bHQ9WycuKicsICdDVlMnLCAn
X2RhcmNzJywgJ3thcmNofScsICcqLmVnZyddKQorICAgIHBhcnNlci5hZGRpbmkoInRlc3RwYXRo
cyIsICJkaXJlY3RvcmllcyB0byBzZWFyY2ggZm9yIHRlc3RzIHdoZW4gbm8gZmlsZXMgb3IgZGly
ZWN0b3JpZXMgYXJlIGdpdmVuIGluIHRoZSBjb21tYW5kIGxpbmUuIiwKKyAgICAgICAgdHlwZT0i
YXJncyIsIGRlZmF1bHQ9W10pCisgICAgI3BhcnNlci5hZGRpbmkoImRpcnBhdHRlcm5zIiwKKyAg
ICAjICAgICJwYXR0ZXJucyBzcGVjaWZ5aW5nIHBvc3NpYmxlIGxvY2F0aW9ucyBvZiB0ZXN0IGZp
bGVzIiwKKyAgICAjICAgIHR5cGU9ImxpbmVsaXN0IiwgZGVmYXVsdD1bIioqL3Rlc3RfKi50eHQi
LAorICAgICMgICAgICAgICAgICAiKiovdGVzdF8qLnB5IiwgIioqLypfdGVzdC5weSJdCisgICAg
IykKKyAgICBncm91cCA9IHBhcnNlci5nZXRncm91cCgiZ2VuZXJhbCIsICJydW5uaW5nIGFuZCBz
ZWxlY3Rpb24gb3B0aW9ucyIpCisgICAgZ3JvdXAuX2FkZG9wdGlvbignLXgnLCAnLS1leGl0Zmly
c3QnLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAg
ZGVzdD0iZXhpdGZpcnN0IiwKKyAgICAgICAgICAgICAgIGhlbHA9ImV4aXQgaW5zdGFudGx5IG9u
IGZpcnN0IGVycm9yIG9yIGZhaWxlZCB0ZXN0LiIpLAorICAgIGdyb3VwLl9hZGRvcHRpb24oJy0t
bWF4ZmFpbCcsIG1ldGF2YXI9Im51bSIsCisgICAgICAgICAgICAgICBhY3Rpb249InN0b3JlIiwg
dHlwZT1pbnQsIGRlc3Q9Im1heGZhaWwiLCBkZWZhdWx0PTAsCisgICAgICAgICAgICAgICBoZWxw
PSJleGl0IGFmdGVyIGZpcnN0IG51bSBmYWlsdXJlcyBvciBlcnJvcnMuIikKKyAgICBncm91cC5f
YWRkb3B0aW9uKCctLXN0cmljdCcsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAg
ICBoZWxwPSJydW4gcHl0ZXN0IGluIHN0cmljdCBtb2RlLCB3YXJuaW5ncyBiZWNvbWUgZXJyb3Jz
LiIpCisgICAgZ3JvdXAuX2FkZG9wdGlvbigiLWMiLCBtZXRhdmFyPSJmaWxlIiwgdHlwZT1zdHIs
IGRlc3Q9ImluaWZpbGVuYW1lIiwKKyAgICAgICAgICAgICAgIGhlbHA9ImxvYWQgY29uZmlndXJh
dGlvbiBmcm9tIGBmaWxlYCBpbnN0ZWFkIG9mIHRyeWluZyB0byBsb2NhdGUgb25lIG9mIHRoZSBp
bXBsaWNpdCBjb25maWd1cmF0aW9uIGZpbGVzLiIpCisKKyAgICBncm91cCA9IHBhcnNlci5nZXRn
cm91cCgiY29sbGVjdCIsICJjb2xsZWN0aW9uIikKKyAgICBncm91cC5hZGRvcHRpb24oJy0tY29s
bGVjdG9ubHknLCAnLS1jb2xsZWN0LW9ubHknLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAg
ICBoZWxwPSJvbmx5IGNvbGxlY3QgdGVzdHMsIGRvbid0IGV4ZWN1dGUgdGhlbS4iKSwKKyAgICBn
cm91cC5hZGRvcHRpb24oJy0tcHlhcmdzJywgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAg
aGVscD0idHJ5IHRvIGludGVycHJldCBhbGwgYXJndW1lbnRzIGFzIHB5dGhvbiBwYWNrYWdlcy4i
KQorICAgIGdyb3VwLmFkZG9wdGlvbigiLS1pZ25vcmUiLCBhY3Rpb249ImFwcGVuZCIsIG1ldGF2
YXI9InBhdGgiLAorICAgICAgICBoZWxwPSJpZ25vcmUgcGF0aCBkdXJpbmcgY29sbGVjdGlvbiAo
bXVsdGktYWxsb3dlZCkuIikKKyAgICAjIHdoZW4gY2hhbmdpbmcgdGhpcyB0byAtLWNvbmYtY3V0
LWRpciwgY29uZmlnLnB5IENvbmZ0ZXN0LnNldGluaXRpYWwKKyAgICAjIG5lZWRzIHVwZ3JhZGlu
ZyBhcyB3ZWxsCisgICAgZ3JvdXAuYWRkb3B0aW9uKCctLWNvbmZjdXRkaXInLCBkZXN0PSJjb25m
Y3V0ZGlyIiwgZGVmYXVsdD1Ob25lLAorICAgICAgICBtZXRhdmFyPSJkaXIiLAorICAgICAgICBo
ZWxwPSJvbmx5IGxvYWQgY29uZnRlc3QucHkncyByZWxhdGl2ZSB0byBzcGVjaWZpZWQgZGlyLiIp
CisgICAgZ3JvdXAuYWRkb3B0aW9uKCctLW5vY29uZnRlc3QnLCBhY3Rpb249InN0b3JlX3RydWUi
LAorICAgICAgICBkZXN0PSJub2NvbmZ0ZXN0IiwgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgaGVs
cD0iRG9uJ3QgbG9hZCBhbnkgY29uZnRlc3QucHkgZmlsZXMuIikKKworICAgIGdyb3VwID0gcGFy
c2VyLmdldGdyb3VwKCJkZWJ1Z2NvbmZpZyIsCisgICAgICAgICJ0ZXN0IHNlc3Npb24gZGVidWdn
aW5nIGFuZCBjb25maWd1cmF0aW9uIikKKyAgICBncm91cC5hZGRvcHRpb24oJy0tYmFzZXRlbXAn
LCBkZXN0PSJiYXNldGVtcCIsIGRlZmF1bHQ9Tm9uZSwgbWV0YXZhcj0iZGlyIiwKKyAgICAgICAg
ICAgICAgIGhlbHA9ImJhc2UgdGVtcG9yYXJ5IGRpcmVjdG9yeSBmb3IgdGhpcyB0ZXN0IHJ1bi4i
KQorCisKK2RlZiBweXRlc3RfbmFtZXNwYWNlKCk6CisgICAgY29sbGVjdCA9IGRpY3QoSXRlbT1J
dGVtLCBDb2xsZWN0b3I9Q29sbGVjdG9yLCBGaWxlPUZpbGUsIFNlc3Npb249U2Vzc2lvbikKKyAg
ICByZXR1cm4gZGljdChjb2xsZWN0PWNvbGxlY3QpCisKK2RlZiBweXRlc3RfY29uZmlndXJlKGNv
bmZpZyk6CisgICAgcHl0ZXN0LmNvbmZpZyA9IGNvbmZpZyAjIGNvbXBhdGliaWx0aXkKKyAgICBp
ZiBjb25maWcub3B0aW9uLmV4aXRmaXJzdDoKKyAgICAgICAgY29uZmlnLm9wdGlvbi5tYXhmYWls
ID0gMQorCitkZWYgd3JhcF9zZXNzaW9uKGNvbmZpZywgZG9pdCk6CisgICAgIiIiU2tlbGV0b24g
Y29tbWFuZCBsaW5lIHByb2dyYW0iIiIKKyAgICBzZXNzaW9uID0gU2Vzc2lvbihjb25maWcpCisg
ICAgc2Vzc2lvbi5leGl0c3RhdHVzID0gRVhJVF9PSworICAgIGluaXRzdGF0ZSA9IDAKKyAgICB0
cnk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvbmZpZy5fZG9fY29uZmlndXJlKCkKKyAg
ICAgICAgICAgIGluaXRzdGF0ZSA9IDEKKyAgICAgICAgICAgIGNvbmZpZy5ob29rLnB5dGVzdF9z
ZXNzaW9uc3RhcnQoc2Vzc2lvbj1zZXNzaW9uKQorICAgICAgICAgICAgaW5pdHN0YXRlID0gMgor
ICAgICAgICAgICAgc2Vzc2lvbi5leGl0c3RhdHVzID0gZG9pdChjb25maWcsIHNlc3Npb24pIG9y
IDAKKyAgICAgICAgZXhjZXB0IHB5dGVzdC5Vc2FnZUVycm9yOgorICAgICAgICAgICAgcmFpc2UK
KyAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgZXhjaW5mbyA9
IF9weXRlc3QuX2NvZGUuRXhjZXB0aW9uSW5mbygpCisgICAgICAgICAgICBjb25maWcuaG9vay5w
eXRlc3Rfa2V5Ym9hcmRfaW50ZXJydXB0KGV4Y2luZm89ZXhjaW5mbykKKyAgICAgICAgICAgIHNl
c3Npb24uZXhpdHN0YXR1cyA9IEVYSVRfSU5URVJSVVBURUQKKyAgICAgICAgZXhjZXB0OgorICAg
ICAgICAgICAgZXhjaW5mbyA9IF9weXRlc3QuX2NvZGUuRXhjZXB0aW9uSW5mbygpCisgICAgICAg
ICAgICBjb25maWcubm90aWZ5X2V4Y2VwdGlvbihleGNpbmZvLCBjb25maWcub3B0aW9uKQorICAg
ICAgICAgICAgc2Vzc2lvbi5leGl0c3RhdHVzID0gRVhJVF9JTlRFUk5BTEVSUk9SCisgICAgICAg
ICAgICBpZiBleGNpbmZvLmVycmlzaW5zdGFuY2UoU3lzdGVtRXhpdCk6CisgICAgICAgICAgICAg
ICAgc3lzLnN0ZGVyci53cml0ZSgibWFpbmxvb3A6IGNhdWdodCBTcHVyaW91cyBTeXN0ZW1FeGl0
IVxuIikKKworICAgIGZpbmFsbHk6CisgICAgICAgIGV4Y2luZm8gPSBOb25lICAjIEV4cGxpY2l0
bHkgYnJlYWsgcmVmZXJlbmNlIGN5Y2xlLgorICAgICAgICBzZXNzaW9uLnN0YXJ0ZGlyLmNoZGly
KCkKKyAgICAgICAgaWYgaW5pdHN0YXRlID49IDI6CisgICAgICAgICAgICBjb25maWcuaG9vay5w
eXRlc3Rfc2Vzc2lvbmZpbmlzaCgKKyAgICAgICAgICAgICAgICBzZXNzaW9uPXNlc3Npb24sCisg
ICAgICAgICAgICAgICAgZXhpdHN0YXR1cz1zZXNzaW9uLmV4aXRzdGF0dXMpCisgICAgICAgIGNv
bmZpZy5fZW5zdXJlX3VuY29uZmlndXJlKCkKKyAgICByZXR1cm4gc2Vzc2lvbi5leGl0c3RhdHVz
CisKK2RlZiBweXRlc3RfY21kbGluZV9tYWluKGNvbmZpZyk6CisgICAgcmV0dXJuIHdyYXBfc2Vz
c2lvbihjb25maWcsIF9tYWluKQorCitkZWYgX21haW4oY29uZmlnLCBzZXNzaW9uKToKKyAgICAi
IiIgZGVmYXVsdCBjb21tYW5kIGxpbmUgcHJvdG9jb2wgZm9yIGluaXRpYWxpemF0aW9uLCBzZXNz
aW9uLAorICAgIHJ1bm5pbmcgdGVzdHMgYW5kIHJlcG9ydGluZy4gIiIiCisgICAgY29uZmlnLmhv
b2sucHl0ZXN0X2NvbGxlY3Rpb24oc2Vzc2lvbj1zZXNzaW9uKQorICAgIGNvbmZpZy5ob29rLnB5
dGVzdF9ydW50ZXN0bG9vcChzZXNzaW9uPXNlc3Npb24pCisKKyAgICBpZiBzZXNzaW9uLnRlc3Rz
ZmFpbGVkOgorICAgICAgICByZXR1cm4gRVhJVF9URVNUU0ZBSUxFRAorICAgIGVsaWYgc2Vzc2lv
bi50ZXN0c2NvbGxlY3RlZCA9PSAwOgorICAgICAgICByZXR1cm4gRVhJVF9OT1RFU1RTQ09MTEVD
VEVECisKK2RlZiBweXRlc3RfY29sbGVjdGlvbihzZXNzaW9uKToKKyAgICByZXR1cm4gc2Vzc2lv
bi5wZXJmb3JtX2NvbGxlY3QoKQorCitkZWYgcHl0ZXN0X3J1bnRlc3Rsb29wKHNlc3Npb24pOgor
ICAgIGlmIHNlc3Npb24uY29uZmlnLm9wdGlvbi5jb2xsZWN0b25seToKKyAgICAgICAgcmV0dXJu
IFRydWUKKworICAgIGRlZiBnZXRuZXh0aXRlbShpKToKKyAgICAgICAgIyB0aGlzIGlzIGEgZnVu
Y3Rpb24gdG8gYXZvaWQgcHl0aG9uMgorICAgICAgICAjIGtlZXBpbmcgc3lzLmV4Y19pbmZvIHNl
dCB3aGVuIGNhbGxpbmcgaW50byBhIHRlc3QKKyAgICAgICAgIyBweXRob24yIGtlZXBzIHN5cy5l
eGNfaW5mbyB0aWxsIHRoZSBmcmFtZSBpcyBsZWZ0CisgICAgICAgIHRyeToKKyAgICAgICAgICAg
IHJldHVybiBzZXNzaW9uLml0ZW1zW2krMV0KKyAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6Cisg
ICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZm9yIGksIGl0ZW0gaW4gZW51bWVyYXRlKHNl
c3Npb24uaXRlbXMpOgorICAgICAgICBuZXh0aXRlbSA9IGdldG5leHRpdGVtKGkpCisgICAgICAg
IGl0ZW0uY29uZmlnLmhvb2sucHl0ZXN0X3J1bnRlc3RfcHJvdG9jb2woaXRlbT1pdGVtLCBuZXh0
aXRlbT1uZXh0aXRlbSkKKyAgICAgICAgaWYgc2Vzc2lvbi5zaG91bGRzdG9wOgorICAgICAgICAg
ICAgcmFpc2Ugc2Vzc2lvbi5JbnRlcnJ1cHRlZChzZXNzaW9uLnNob3VsZHN0b3ApCisgICAgcmV0
dXJuIFRydWUKKworZGVmIHB5dGVzdF9pZ25vcmVfY29sbGVjdChwYXRoLCBjb25maWcpOgorICAg
IHAgPSBwYXRoLmRpcnBhdGgoKQorICAgIGlnbm9yZV9wYXRocyA9IGNvbmZpZy5fZ2V0Y29uZnRl
c3RfcGF0aGxpc3QoImNvbGxlY3RfaWdub3JlIiwgcGF0aD1wKQorICAgIGlnbm9yZV9wYXRocyA9
IGlnbm9yZV9wYXRocyBvciBbXQorICAgIGV4Y2x1ZGVvcHQgPSBjb25maWcuZ2V0b3B0aW9uKCJp
Z25vcmUiKQorICAgIGlmIGV4Y2x1ZGVvcHQ6CisgICAgICAgIGlnbm9yZV9wYXRocy5leHRlbmQo
W3B5LnBhdGgubG9jYWwoeCkgZm9yIHggaW4gZXhjbHVkZW9wdF0pCisgICAgcmV0dXJuIHBhdGgg
aW4gaWdub3JlX3BhdGhzCisKK2NsYXNzIEZTSG9va1Byb3h5OgorICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBmc3BhdGgsIHBtLCByZW1vdmVfbW9kcyk6CisgICAgICAgIHNlbGYuZnNwYXRoID0gZnNw
YXRoCisgICAgICAgIHNlbGYucG0gPSBwbQorICAgICAgICBzZWxmLnJlbW92ZV9tb2RzID0gcmVt
b3ZlX21vZHMKKworICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgeCA9
IHNlbGYucG0uc3Vic2V0X2hvb2tfY2FsbGVyKG5hbWUsIHJlbW92ZV9wbHVnaW5zPXNlbGYucmVt
b3ZlX21vZHMpCisgICAgICAgIHNlbGYuX19kaWN0X19bbmFtZV0gPSB4CisgICAgICAgIHJldHVy
biB4CisKK2RlZiBjb21wYXRwcm9wZXJ0eShuYW1lKToKKyAgICBkZWYgZmdldChzZWxmKToKKyAg
ICAgICAgIyBkZXByZWNhdGVkIC0gdXNlIHB5dGVzdC5uYW1lCisgICAgICAgIHJldHVybiBnZXRh
dHRyKHB5dGVzdCwgbmFtZSkKKworICAgIHJldHVybiBwcm9wZXJ0eShmZ2V0KQorCitjbGFzcyBO
b2RlS2V5d29yZHMoTWFwcGluZ01peGluKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbm9kZSk6
CisgICAgICAgIHNlbGYubm9kZSA9IG5vZGUKKyAgICAgICAgc2VsZi5wYXJlbnQgPSBub2RlLnBh
cmVudAorICAgICAgICBzZWxmLl9tYXJrZXJzID0ge25vZGUubmFtZTogVHJ1ZX0KKworICAgIGRl
ZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1
cm4gc2VsZi5fbWFya2Vyc1trZXldCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAg
ICAgIGlmIHNlbGYucGFyZW50IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAg
ICAgICAgIHJldHVybiBzZWxmLnBhcmVudC5rZXl3b3Jkc1trZXldCisKKyAgICBkZWYgX19zZXRp
dGVtX18oc2VsZiwga2V5LCB2YWx1ZSk6CisgICAgICAgIHNlbGYuX21hcmtlcnNba2V5XSA9IHZh
bHVlCisKKyAgICBkZWYgX19kZWxpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgcmFpc2UgVmFs
dWVFcnJvcigiY2Fubm90IGRlbGV0ZSBrZXkgaW4ga2V5d29yZHMgZGljdCIpCisKKyAgICBkZWYg
X19pdGVyX18oc2VsZik6CisgICAgICAgIHNlZW4gPSBzZXQoc2VsZi5fbWFya2VycykKKyAgICAg
ICAgaWYgc2VsZi5wYXJlbnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWVuLnVwZGF0ZShz
ZWxmLnBhcmVudC5rZXl3b3JkcykKKyAgICAgICAgcmV0dXJuIGl0ZXIoc2VlbikKKworICAgIGRl
ZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gbGVuKHNlbGYuX19pdGVyX18oKSkKKwor
ICAgIGRlZiBrZXlzKHNlbGYpOgorICAgICAgICByZXR1cm4gbGlzdChzZWxmKQorCisgICAgZGVm
IF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIjxOb2RlS2V5d29yZHMgZm9yIG5vZGUg
JXM+IiAlIChzZWxmLm5vZGUsICkKKworCitjbGFzcyBOb2RlKG9iamVjdCk6CisgICAgIiIiIGJh
c2UgY2xhc3MgZm9yIENvbGxlY3RvciBhbmQgSXRlbSB0aGUgdGVzdCBjb2xsZWN0aW9uIHRyZWUu
CisgICAgQ29sbGVjdG9yIHN1YmNsYXNzZXMgaGF2ZSBjaGlsZHJlbiwgSXRlbXMgYXJlIHRlcm1p
bmFsIG5vZGVzLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIHBhcmVudD1Ob25l
LCBjb25maWc9Tm9uZSwgc2Vzc2lvbj1Ob25lKToKKyAgICAgICAgIzogYSB1bmlxdWUgbmFtZSB3
aXRoaW4gdGhlIHNjb3BlIG9mIHRoZSBwYXJlbnQgbm9kZQorICAgICAgICBzZWxmLm5hbWUgPSBu
YW1lCisKKyAgICAgICAgIzogdGhlIHBhcmVudCBjb2xsZWN0b3Igbm9kZS4KKyAgICAgICAgc2Vs
Zi5wYXJlbnQgPSBwYXJlbnQKKworICAgICAgICAjOiB0aGUgcHl0ZXN0IGNvbmZpZyBvYmplY3QK
KyAgICAgICAgc2VsZi5jb25maWcgPSBjb25maWcgb3IgcGFyZW50LmNvbmZpZworCisgICAgICAg
ICM6IHRoZSBzZXNzaW9uIHRoaXMgbm9kZSBpcyBwYXJ0IG9mCisgICAgICAgIHNlbGYuc2Vzc2lv
biA9IHNlc3Npb24gb3IgcGFyZW50LnNlc3Npb24KKworICAgICAgICAjOiBmaWxlc3lzdGVtIHBh
dGggd2hlcmUgdGhpcyBub2RlIHdhcyBjb2xsZWN0ZWQgZnJvbSAoY2FuIGJlIE5vbmUpCisgICAg
ICAgIHNlbGYuZnNwYXRoID0gZ2V0YXR0cihwYXJlbnQsICdmc3BhdGgnLCBOb25lKQorCisgICAg
ICAgICM6IGtleXdvcmRzL21hcmtlcnMgY29sbGVjdGVkIGZyb20gYWxsIHNjb3BlcworICAgICAg
ICBzZWxmLmtleXdvcmRzID0gTm9kZUtleXdvcmRzKHNlbGYpCisKKyAgICAgICAgIzogYWxsb3cg
YWRkaW5nIG9mIGV4dHJhIGtleXdvcmRzIHRvIHVzZSBmb3IgbWF0Y2hpbmcKKyAgICAgICAgc2Vs
Zi5leHRyYV9rZXl3b3JkX21hdGNoZXMgPSBzZXQoKQorCisgICAgICAgICMgdXNlZCBmb3Igc3Rv
cmluZyBhcnRpZmljaWFsIGZpeHR1cmVkZWZzIGZvciBkaXJlY3QgcGFyYW1ldHJpemF0aW9uCisg
ICAgICAgIHNlbGYuX25hbWUycHNldWRvZml4dHVyZWRlZiA9IHt9CisKKyAgICBAcHJvcGVydHkK
KyAgICBkZWYgaWhvb2soc2VsZik6CisgICAgICAgICIiIiBmc3BhdGggc2Vuc2l0aXZlIGhvb2sg
cHJveHkgdXNlZCB0byBjYWxsIHB5dGVzdCBob29rcyIiIgorICAgICAgICByZXR1cm4gc2VsZi5z
ZXNzaW9uLmdldGhvb2twcm94eShzZWxmLmZzcGF0aCkKKworICAgIE1vZHVsZSA9IGNvbXBhdHBy
b3BlcnR5KCJNb2R1bGUiKQorICAgIENsYXNzID0gY29tcGF0cHJvcGVydHkoIkNsYXNzIikKKyAg
ICBJbnN0YW5jZSA9IGNvbXBhdHByb3BlcnR5KCJJbnN0YW5jZSIpCisgICAgRnVuY3Rpb24gPSBj
b21wYXRwcm9wZXJ0eSgiRnVuY3Rpb24iKQorICAgIEZpbGUgPSBjb21wYXRwcm9wZXJ0eSgiRmls
ZSIpCisgICAgSXRlbSA9IGNvbXBhdHByb3BlcnR5KCJJdGVtIikKKworICAgIGRlZiBfZ2V0Y3Vz
dG9tY2xhc3Moc2VsZiwgbmFtZSk6CisgICAgICAgIGNscyA9IGdldGF0dHIoc2VsZiwgbmFtZSkK
KyAgICAgICAgaWYgY2xzICE9IGdldGF0dHIocHl0ZXN0LCBuYW1lKToKKyAgICAgICAgICAgIHB5
LmxvZy5fYXBpd2FybigiMi4wIiwgInVzZSBvZiBub2RlLiVzIGlzIGRlcHJlY2F0ZWQsICIKKyAg
ICAgICAgICAgICAgICAidXNlIHB5dGVzdF9weWNvbGxlY3RfbWFrZWl0ZW0oLi4uKSB0byBjcmVh
dGUgY3VzdG9tICIKKyAgICAgICAgICAgICAgICAiY29sbGVjdGlvbiBub2RlcyIgJSBuYW1lKQor
ICAgICAgICByZXR1cm4gY2xzCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJl
dHVybiAiPCVzICVyPiIgJShzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdldGF0dHIoc2VsZiwgJ25hbWUnLCBOb25lKSkKKworICAgIGRlZiB3YXJu
KHNlbGYsIGNvZGUsIG1lc3NhZ2UpOgorICAgICAgICAiIiIgZ2VuZXJhdGUgYSB3YXJuaW5nIHdp
dGggdGhlIGdpdmVuIGNvZGUgYW5kIG1lc3NhZ2UgZm9yIHRoaXMKKyAgICAgICAgaXRlbS4gIiIi
CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGNvZGUsIHN0cikKKyAgICAgICAgZnNsb2NhdGlv
biA9IGdldGF0dHIoc2VsZiwgImxvY2F0aW9uIiwgTm9uZSkKKyAgICAgICAgaWYgZnNsb2NhdGlv
biBpcyBOb25lOgorICAgICAgICAgICAgZnNsb2NhdGlvbiA9IGdldGF0dHIoc2VsZiwgImZzcGF0
aCIsIE5vbmUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmc2xvY2F0aW9uID0gIiVzOiVz
IiAlIGZzbG9jYXRpb25bOjJdCisKKyAgICAgICAgc2VsZi5paG9vay5weXRlc3RfbG9nd2Fybmlu
Zy5jYWxsX2hpc3RvcmljKGt3YXJncz1kaWN0KAorICAgICAgICAgICAgY29kZT1jb2RlLCBtZXNz
YWdlPW1lc3NhZ2UsCisgICAgICAgICAgICBub2RlaWQ9c2VsZi5ub2RlaWQsIGZzbG9jYXRpb249
ZnNsb2NhdGlvbikpCisKKyAgICAjIG1ldGhvZHMgZm9yIG9yZGVyaW5nIG5vZGVzCisgICAgQHBy
b3BlcnR5CisgICAgZGVmIG5vZGVpZChzZWxmKToKKyAgICAgICAgIiIiIGEgOjotc2VwYXJhdGVk
IHN0cmluZyBkZW5vdGluZyBpdHMgY29sbGVjdGlvbiB0cmVlIGFkZHJlc3MuICIiIgorICAgICAg
ICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fbm9kZWlkCisgICAgICAgIGV4Y2VwdCBB
dHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuX25vZGVpZCA9IHggPSBzZWxmLl9tYWtl
aWQoKQorICAgICAgICAgICAgcmV0dXJuIHgKKworICAgIGRlZiBfbWFrZWlkKHNlbGYpOgorICAg
ICAgICByZXR1cm4gc2VsZi5wYXJlbnQubm9kZWlkICsgIjo6IiArIHNlbGYubmFtZQorCisgICAg
ZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gaGFzaChzZWxmLm5vZGVpZCkKKwor
ICAgIGRlZiBzZXR1cChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHRlYXJkb3duKHNl
bGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgX21lbW9pemVkY2FsbChzZWxmLCBhdHRybmFt
ZSwgZnVuY3Rpb24pOgorICAgICAgICBleGF0dHJuYW1lID0gIl9leF8iICsgYXR0cm5hbWUKKyAg
ICAgICAgZmFpbHVyZSA9IGdldGF0dHIoc2VsZiwgZXhhdHRybmFtZSwgTm9uZSkKKyAgICAgICAg
aWYgZmFpbHVyZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHB5LmJ1aWx0aW4uX3JlcmFpc2Uo
ZmFpbHVyZVswXSwgZmFpbHVyZVsxXSwgZmFpbHVyZVsyXSkKKyAgICAgICAgaWYgaGFzYXR0cihz
ZWxmLCBhdHRybmFtZSk6CisgICAgICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLCBhdHRybmFt
ZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzID0gZnVuY3Rpb24oKQorICAgICAgICBl
eGNlcHQgcHkuYnVpbHRpbi5fc3lzZXg6CisgICAgICAgICAgICByYWlzZQorICAgICAgICBleGNl
cHQ6CisgICAgICAgICAgICBmYWlsdXJlID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgICAgIHNl
dGF0dHIoc2VsZiwgZXhhdHRybmFtZSwgZmFpbHVyZSkKKyAgICAgICAgICAgIHJhaXNlCisgICAg
ICAgIHNldGF0dHIoc2VsZiwgYXR0cm5hbWUsIHJlcykKKyAgICAgICAgcmV0dXJuIHJlcworCisg
ICAgZGVmIGxpc3RjaGFpbihzZWxmKToKKyAgICAgICAgIiIiIHJldHVybiBsaXN0IG9mIGFsbCBw
YXJlbnQgY29sbGVjdG9ycyB1cCB0byBzZWxmLAorICAgICAgICAgICAgc3RhcnRpbmcgZnJvbSBy
b290IG9mIGNvbGxlY3Rpb24gdHJlZS4gIiIiCisgICAgICAgIGNoYWluID0gW10KKyAgICAgICAg
aXRlbSA9IHNlbGYKKyAgICAgICAgd2hpbGUgaXRlbSBpcyBub3QgTm9uZToKKyAgICAgICAgICAg
IGNoYWluLmFwcGVuZChpdGVtKQorICAgICAgICAgICAgaXRlbSA9IGl0ZW0ucGFyZW50CisgICAg
ICAgIGNoYWluLnJldmVyc2UoKQorICAgICAgICByZXR1cm4gY2hhaW4KKworICAgIGRlZiBhZGRf
bWFya2VyKHNlbGYsIG1hcmtlcik6CisgICAgICAgICIiIiBkeW5hbWljYWxseSBhZGQgYSBtYXJr
ZXIgb2JqZWN0IHRvIHRoZSBub2RlLgorCisgICAgICAgIGBgbWFya2VyYGAgY2FuIGJlIGEgc3Ry
aW5nIG9yIHB5dGVzdC5tYXJrLiogaW5zdGFuY2UuCisgICAgICAgICIiIgorICAgICAgICBmcm9t
IF9weXRlc3QubWFyayBpbXBvcnQgTWFya0RlY29yYXRvcgorICAgICAgICBpZiBpc2luc3RhbmNl
KG1hcmtlciwgcHkuYnVpbHRpbi5fYmFzZXN0cmluZyk6CisgICAgICAgICAgICBtYXJrZXIgPSBN
YXJrRGVjb3JhdG9yKG1hcmtlcikKKyAgICAgICAgZWxpZiBub3QgaXNpbnN0YW5jZShtYXJrZXIs
IE1hcmtEZWNvcmF0b3IpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiaXMgbm90IGEg
c3RyaW5nIG9yIHB5dGVzdC5tYXJrLiogTWFya2VyIikKKyAgICAgICAgc2VsZi5rZXl3b3Jkc1tt
YXJrZXIubmFtZV0gPSBtYXJrZXIKKworICAgIGRlZiBnZXRfbWFya2VyKHNlbGYsIG5hbWUpOgor
ICAgICAgICAiIiIgZ2V0IGEgbWFya2VyIG9iamVjdCBmcm9tIHRoaXMgbm9kZSBvciBOb25lIGlm
CisgICAgICAgIHRoZSBub2RlIGRvZXNuJ3QgaGF2ZSBhIG1hcmtlciB3aXRoIHRoYXQgbmFtZS4g
IiIiCisgICAgICAgIHZhbCA9IHNlbGYua2V5d29yZHMuZ2V0KG5hbWUsIE5vbmUpCisgICAgICAg
IGlmIHZhbCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGZyb20gX3B5dGVzdC5tYXJrIGltcG9y
dCBNYXJrSW5mbywgTWFya0RlY29yYXRvcgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWws
IChNYXJrRGVjb3JhdG9yLCBNYXJrSW5mbykpOgorICAgICAgICAgICAgICAgIHJldHVybiB2YWwK
KworICAgIGRlZiBsaXN0ZXh0cmFrZXl3b3JkcyhzZWxmKToKKyAgICAgICAgIiIiIFJldHVybiBh
IHNldCBvZiBhbGwgZXh0cmEga2V5d29yZHMgaW4gc2VsZiBhbmQgYW55IHBhcmVudHMuIiIiCisg
ICAgICAgIGV4dHJhX2tleXdvcmRzID0gc2V0KCkKKyAgICAgICAgaXRlbSA9IHNlbGYKKyAgICAg
ICAgZm9yIGl0ZW0gaW4gc2VsZi5saXN0Y2hhaW4oKToKKyAgICAgICAgICAgIGV4dHJhX2tleXdv
cmRzLnVwZGF0ZShpdGVtLmV4dHJhX2tleXdvcmRfbWF0Y2hlcykKKyAgICAgICAgcmV0dXJuIGV4
dHJhX2tleXdvcmRzCisKKyAgICBkZWYgbGlzdG5hbWVzKHNlbGYpOgorICAgICAgICByZXR1cm4g
W3gubmFtZSBmb3IgeCBpbiBzZWxmLmxpc3RjaGFpbigpXQorCisgICAgZGVmIGFkZGZpbmFsaXpl
cihzZWxmLCBmaW4pOgorICAgICAgICAiIiIgcmVnaXN0ZXIgYSBmdW5jdGlvbiB0byBiZSBjYWxs
ZWQgd2hlbiB0aGlzIG5vZGUgaXMgZmluYWxpemVkLgorCisgICAgICAgIFRoaXMgbWV0aG9kIGNh
biBvbmx5IGJlIGNhbGxlZCB3aGVuIHRoaXMgbm9kZSBpcyBhY3RpdmUKKyAgICAgICAgaW4gYSBz
ZXR1cCBjaGFpbiwgZm9yIGV4YW1wbGUgZHVyaW5nIHNlbGYuc2V0dXAoKS4KKyAgICAgICAgIiIi
CisgICAgICAgIHNlbGYuc2Vzc2lvbi5fc2V0dXBzdGF0ZS5hZGRmaW5hbGl6ZXIoZmluLCBzZWxm
KQorCisgICAgZGVmIGdldHBhcmVudChzZWxmLCBjbHMpOgorICAgICAgICAiIiIgZ2V0IHRoZSBu
ZXh0IHBhcmVudCBub2RlIChpbmNsdWRpbmcgb3Vyc2VsZikKKyAgICAgICAgd2hpY2ggaXMgYW4g
aW5zdGFuY2Ugb2YgdGhlIGdpdmVuIGNsYXNzIiIiCisgICAgICAgIGN1cnJlbnQgPSBzZWxmCisg
ICAgICAgIHdoaWxlIGN1cnJlbnQgYW5kIG5vdCBpc2luc3RhbmNlKGN1cnJlbnQsIGNscyk6Cisg
ICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5wYXJlbnQKKyAgICAgICAgcmV0dXJuIGN1cnJl
bnQKKworICAgIGRlZiBfcHJ1bmV0cmFjZWJhY2soc2VsZiwgZXhjaW5mbyk6CisgICAgICAgIHBh
c3MKKworICAgIGRlZiBfcmVwcl9mYWlsdXJlX3B5KHNlbGYsIGV4Y2luZm8sIHN0eWxlPU5vbmUp
OgorICAgICAgICBmbSA9IHNlbGYuc2Vzc2lvbi5fZml4dHVyZW1hbmFnZXIKKyAgICAgICAgaWYg
ZXhjaW5mby5lcnJpc2luc3RhbmNlKGZtLkZpeHR1cmVMb29rdXBFcnJvcik6CisgICAgICAgICAg
ICByZXR1cm4gZXhjaW5mby52YWx1ZS5mb3JtYXRyZXByKCkKKyAgICAgICAgdGJmaWx0ZXIgPSBU
cnVlCisgICAgICAgIGlmIHNlbGYuY29uZmlnLm9wdGlvbi5mdWxsdHJhY2U6CisgICAgICAgICAg
ICBzdHlsZT0ibG9uZyIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3BydW5ldHJh
Y2ViYWNrKGV4Y2luZm8pCisgICAgICAgICAgICB0YmZpbHRlciA9IEZhbHNlICAjIHBydW5ldHJh
Y2ViYWNrIGFscmVhZHkgZG9lcyBpdAorICAgICAgICAgICAgaWYgc3R5bGUgPT0gImF1dG8iOgor
ICAgICAgICAgICAgICAgIHN0eWxlID0gImxvbmciCisgICAgICAgICMgWFhYIHNob3VsZCBleGNp
bmZvLmdldHJlcHIgcmVjb3JkIGFsbCBkYXRhIGFuZCB0b3Rlcm1pbmFsKCkgcHJvY2VzcyBpdD8K
KyAgICAgICAgaWYgc3R5bGUgaXMgTm9uZToKKyAgICAgICAgICAgIGlmIHNlbGYuY29uZmlnLm9w
dGlvbi50YnN0eWxlID09ICJzaG9ydCI6CisgICAgICAgICAgICAgICAgc3R5bGUgPSAic2hvcnQi
CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHN0eWxlID0gImxvbmciCisKKyAg
ICAgICAgcmV0dXJuIGV4Y2luZm8uZ2V0cmVwcihmdW5jYXJncz1UcnVlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNob3dsb2NhbHM9c2VsZi5jb25maWcub3B0aW9uLnNob3dsb2Nh
bHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9c3R5bGUsIHRiZmlsdGVy
PXRiZmlsdGVyKQorCisgICAgcmVwcl9mYWlsdXJlID0gX3JlcHJfZmFpbHVyZV9weQorCitjbGFz
cyBDb2xsZWN0b3IoTm9kZSk6CisgICAgIiIiIENvbGxlY3RvciBpbnN0YW5jZXMgY3JlYXRlIGNo
aWxkcmVuIHRocm91Z2ggY29sbGVjdCgpCisgICAgICAgIGFuZCB0aHVzIGl0ZXJhdGl2ZWx5IGJ1
aWxkIGEgdHJlZS4KKyAgICAiIiIKKworICAgIGNsYXNzIENvbGxlY3RFcnJvcihFeGNlcHRpb24p
OgorICAgICAgICAiIiIgYW4gZXJyb3IgZHVyaW5nIGNvbGxlY3Rpb24sIGNvbnRhaW5zIGEgY3Vz
dG9tIG1lc3NhZ2UuICIiIgorCisgICAgZGVmIGNvbGxlY3Qoc2VsZik6CisgICAgICAgICIiIiBy
ZXR1cm5zIGEgbGlzdCBvZiBjaGlsZHJlbiAoaXRlbXMgYW5kIGNvbGxlY3RvcnMpCisgICAgICAg
ICAgICBmb3IgdGhpcyBjb2xsZWN0aW9uIG5vZGUuCisgICAgICAgICIiIgorICAgICAgICByYWlz
ZSBOb3RJbXBsZW1lbnRlZEVycm9yKCJhYnN0cmFjdCIpCisKKyAgICBkZWYgcmVwcl9mYWlsdXJl
KHNlbGYsIGV4Y2luZm8pOgorICAgICAgICAiIiIgcmVwcmVzZW50IGEgY29sbGVjdGlvbiBmYWls
dXJlLiAiIiIKKyAgICAgICAgaWYgZXhjaW5mby5lcnJpc2luc3RhbmNlKHNlbGYuQ29sbGVjdEVy
cm9yKToKKyAgICAgICAgICAgIGV4YyA9IGV4Y2luZm8udmFsdWUKKyAgICAgICAgICAgIHJldHVy
biBzdHIoZXhjLmFyZ3NbMF0pCisgICAgICAgIHJldHVybiBzZWxmLl9yZXByX2ZhaWx1cmVfcHko
ZXhjaW5mbywgc3R5bGU9InNob3J0IikKKworICAgIGRlZiBfbWVtb2NvbGxlY3Qoc2VsZik6Cisg
ICAgICAgICIiIiBpbnRlcm5hbCBoZWxwZXIgbWV0aG9kIHRvIGNhY2hlIHJlc3VsdHMgb2YgY2Fs
bGluZyBjb2xsZWN0KCkuICIiIgorICAgICAgICByZXR1cm4gc2VsZi5fbWVtb2l6ZWRjYWxsKCdf
Y29sbGVjdGVkJywgbGFtYmRhOiBsaXN0KHNlbGYuY29sbGVjdCgpKSkKKworICAgIGRlZiBfcHJ1
bmV0cmFjZWJhY2soc2VsZiwgZXhjaW5mbyk6CisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgJ2Zz
cGF0aCcpOgorICAgICAgICAgICAgdHJhY2ViYWNrID0gZXhjaW5mby50cmFjZWJhY2sKKyAgICAg
ICAgICAgIG50cmFjZWJhY2sgPSB0cmFjZWJhY2suY3V0KHBhdGg9c2VsZi5mc3BhdGgpCisgICAg
ICAgICAgICBpZiBudHJhY2ViYWNrID09IHRyYWNlYmFjazoKKyAgICAgICAgICAgICAgICBudHJh
Y2ViYWNrID0gbnRyYWNlYmFjay5jdXQoZXhjbHVkZXBhdGg9dHJhY2ViYWNrY3V0ZGlyKQorICAg
ICAgICAgICAgZXhjaW5mby50cmFjZWJhY2sgPSBudHJhY2ViYWNrLmZpbHRlcigpCisKK2NsYXNz
IEZTQ29sbGVjdG9yKENvbGxlY3Rvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZzcGF0aCwg
cGFyZW50PU5vbmUsIGNvbmZpZz1Ob25lLCBzZXNzaW9uPU5vbmUpOgorICAgICAgICBmc3BhdGgg
PSBweS5wYXRoLmxvY2FsKGZzcGF0aCkgIyB4eHggb25seSBmb3IgdGVzdF9yZXN1bHRsb2cucHk/
CisgICAgICAgIG5hbWUgPSBmc3BhdGguYmFzZW5hbWUKKyAgICAgICAgaWYgcGFyZW50IGlzIG5v
dCBOb25lOgorICAgICAgICAgICAgcmVsID0gZnNwYXRoLnJlbHRvKHBhcmVudC5mc3BhdGgpCisg
ICAgICAgICAgICBpZiByZWw6CisgICAgICAgICAgICAgICAgbmFtZSA9IHJlbAorICAgICAgICAg
ICAgbmFtZSA9IG5hbWUucmVwbGFjZShvcy5zZXAsICIvIikKKyAgICAgICAgc3VwZXIoRlNDb2xs
ZWN0b3IsIHNlbGYpLl9faW5pdF9fKG5hbWUsIHBhcmVudCwgY29uZmlnLCBzZXNzaW9uKQorICAg
ICAgICBzZWxmLmZzcGF0aCA9IGZzcGF0aAorCisgICAgZGVmIF9tYWtlaWQoc2VsZik6CisgICAg
ICAgIHJlbHBhdGggPSBzZWxmLmZzcGF0aC5yZWx0byhzZWxmLmNvbmZpZy5yb290ZGlyKQorICAg
ICAgICBpZiBvcy5zZXAgIT0gIi8iOgorICAgICAgICAgICAgcmVscGF0aCA9IHJlbHBhdGgucmVw
bGFjZShvcy5zZXAsICIvIikKKyAgICAgICAgcmV0dXJuIHJlbHBhdGgKKworY2xhc3MgRmlsZShG
U0NvbGxlY3Rvcik6CisgICAgIiIiIGJhc2UgY2xhc3MgZm9yIGNvbGxlY3RpbmcgdGVzdHMgZnJv
bSBhIGZpbGUuICIiIgorCitjbGFzcyBJdGVtKE5vZGUpOgorICAgICIiIiBhIGJhc2ljIHRlc3Qg
aW52b2NhdGlvbiBpdGVtLiBOb3RlIHRoYXQgZm9yIGEgc2luZ2xlIGZ1bmN0aW9uCisgICAgdGhl
cmUgbWlnaHQgYmUgbXVsdGlwbGUgdGVzdCBpbnZvY2F0aW9uIGl0ZW1zLgorICAgICIiIgorICAg
IG5leHRpdGVtID0gTm9uZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIHBhcmVudD1O
b25lLCBjb25maWc9Tm9uZSwgc2Vzc2lvbj1Ob25lKToKKyAgICAgICAgc3VwZXIoSXRlbSwgc2Vs
ZikuX19pbml0X18obmFtZSwgcGFyZW50LCBjb25maWcsIHNlc3Npb24pCisgICAgICAgIHNlbGYu
X3JlcG9ydF9zZWN0aW9ucyA9IFtdCisKKyAgICBkZWYgYWRkX3JlcG9ydF9zZWN0aW9uKHNlbGYs
IHdoZW4sIGtleSwgY29udGVudCk6CisgICAgICAgIGlmIGNvbnRlbnQ6CisgICAgICAgICAgICBz
ZWxmLl9yZXBvcnRfc2VjdGlvbnMuYXBwZW5kKCh3aGVuLCBrZXksIGNvbnRlbnQpKQorCisgICAg
ZGVmIHJlcG9ydGluZm8oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmZzcGF0aCwgTm9uZSwg
IiIKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBsb2NhdGlvbihzZWxmKToKKyAgICAgICAgdHJ5
OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2xvY2F0aW9uCisgICAgICAgIGV4Y2VwdCBBdHRy
aWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIGxvY2F0aW9uID0gc2VsZi5yZXBvcnRpbmZvKCkKKyAg
ICAgICAgICAgICMgYmVzdHJlbHBhdGggaXMgYSBxdWl0ZSBzbG93IGZ1bmN0aW9uCisgICAgICAg
ICAgICBjYWNoZSA9IHNlbGYuY29uZmlnLl9fZGljdF9fLnNldGRlZmF1bHQoIl9iZXN0cmVscGF0
aGNhY2hlIiwge30pCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZnNwYXRoID0g
Y2FjaGVbbG9jYXRpb25bMF1dCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAg
ICAgICAgICAgZnNwYXRoID0gc2VsZi5zZXNzaW9uLmZzcGF0aC5iZXN0cmVscGF0aChsb2NhdGlv
blswXSkKKyAgICAgICAgICAgICAgICBjYWNoZVtsb2NhdGlvblswXV0gPSBmc3BhdGgKKyAgICAg
ICAgICAgIGxvY2F0aW9uID0gKGZzcGF0aCwgbG9jYXRpb25bMV0sIHN0cihsb2NhdGlvblsyXSkp
CisgICAgICAgICAgICBzZWxmLl9sb2NhdGlvbiA9IGxvY2F0aW9uCisgICAgICAgICAgICByZXR1
cm4gbG9jYXRpb24KKworY2xhc3MgTm9NYXRjaChFeGNlcHRpb24pOgorICAgICIiIiByYWlzZWQg
aWYgbWF0Y2hpbmcgY2Fubm90IGxvY2F0ZSBhIG1hdGNoaW5nIG5hbWVzLiAiIiIKKworY2xhc3Mg
SW50ZXJydXB0ZWQoS2V5Ym9hcmRJbnRlcnJ1cHQpOgorICAgICIiIiBzaWduYWxzIGFuIGludGVy
cnVwdGVkIHRlc3QgcnVuLiAiIiIKKyAgICBfX21vZHVsZV9fID0gJ2J1aWx0aW5zJyAjIGZvciBw
eTMKKworY2xhc3MgU2Vzc2lvbihGU0NvbGxlY3Rvcik6CisgICAgSW50ZXJydXB0ZWQgPSBJbnRl
cnJ1cHRlZAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbmZpZyk6CisgICAgICAgIEZTQ29s
bGVjdG9yLl9faW5pdF9fKHNlbGYsIGNvbmZpZy5yb290ZGlyLCBwYXJlbnQ9Tm9uZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnPWNvbmZpZywgc2Vzc2lvbj1zZWxmKQorICAg
ICAgICBzZWxmLl9mczJob29rcHJveHkgPSB7fQorICAgICAgICBzZWxmLnRlc3RzZmFpbGVkID0g
MAorICAgICAgICBzZWxmLnRlc3RzY29sbGVjdGVkID0gMAorICAgICAgICBzZWxmLnNob3VsZHN0
b3AgPSBGYWxzZQorICAgICAgICBzZWxmLnRyYWNlID0gY29uZmlnLnRyYWNlLnJvb3QuZ2V0KCJj
b2xsZWN0aW9uIikKKyAgICAgICAgc2VsZi5fbm9yZWN1cnNlcGF0dGVybnMgPSBjb25maWcuZ2V0
aW5pKCJub3JlY3Vyc2VkaXJzIikKKyAgICAgICAgc2VsZi5zdGFydGRpciA9IHB5LnBhdGgubG9j
YWwoKQorICAgICAgICBzZWxmLmNvbmZpZy5wbHVnaW5tYW5hZ2VyLnJlZ2lzdGVyKHNlbGYsIG5h
bWU9InNlc3Npb24iKQorCisgICAgZGVmIF9tYWtlaWQoc2VsZik6CisgICAgICAgIHJldHVybiAi
IgorCisgICAgQHB5dGVzdC5ob29raW1wbCh0cnlmaXJzdD1UcnVlKQorICAgIGRlZiBweXRlc3Rf
Y29sbGVjdHN0YXJ0KHNlbGYpOgorICAgICAgICBpZiBzZWxmLnNob3VsZHN0b3A6CisgICAgICAg
ICAgICByYWlzZSBzZWxmLkludGVycnVwdGVkKHNlbGYuc2hvdWxkc3RvcCkKKworICAgIEBweXRl
c3QuaG9va2ltcGwodHJ5Zmlyc3Q9VHJ1ZSkKKyAgICBkZWYgcHl0ZXN0X3J1bnRlc3RfbG9ncmVw
b3J0KHNlbGYsIHJlcG9ydCk6CisgICAgICAgIGlmIHJlcG9ydC5mYWlsZWQgYW5kIG5vdCBoYXNh
dHRyKHJlcG9ydCwgJ3dhc3hmYWlsJyk6CisgICAgICAgICAgICBzZWxmLnRlc3RzZmFpbGVkICs9
IDEKKyAgICAgICAgICAgIG1heGZhaWwgPSBzZWxmLmNvbmZpZy5nZXR2YWx1ZSgibWF4ZmFpbCIp
CisgICAgICAgICAgICBpZiBtYXhmYWlsIGFuZCBzZWxmLnRlc3RzZmFpbGVkID49IG1heGZhaWw6
CisgICAgICAgICAgICAgICAgc2VsZi5zaG91bGRzdG9wID0gInN0b3BwaW5nIGFmdGVyICVkIGZh
aWx1cmVzIiAlICgKKyAgICAgICAgICAgICAgICAgICAgc2VsZi50ZXN0c2ZhaWxlZCkKKyAgICBw
eXRlc3RfY29sbGVjdHJlcG9ydCA9IHB5dGVzdF9ydW50ZXN0X2xvZ3JlcG9ydAorCisgICAgZGVm
IGlzaW5pdHBhdGgoc2VsZiwgcGF0aCk6CisgICAgICAgIHJldHVybiBwYXRoIGluIHNlbGYuX2lu
aXRpYWxwYXRocworCisgICAgZGVmIGdldGhvb2twcm94eShzZWxmLCBmc3BhdGgpOgorICAgICAg
ICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZnMyaG9va3Byb3h5W2ZzcGF0aF0KKyAg
ICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgIyBjaGVjayBpZiB3ZSBoYXZlIHRo
ZSBjb21tb24gY2FzZSBvZiBydW5uaW5nCisgICAgICAgICAgICAjIGhvb2tzIHdpdGggYWxsIGNv
bmZ0ZXN0LnB5IGZpbGVzYWxsIGNvbmZ0ZXN0LnB5CisgICAgICAgICAgICBwbSA9IHNlbGYuY29u
ZmlnLnBsdWdpbm1hbmFnZXIKKyAgICAgICAgICAgIG15X2NvbmZ0ZXN0bW9kdWxlcyA9IHBtLl9n
ZXRjb25mdGVzdG1vZHVsZXMoZnNwYXRoKQorICAgICAgICAgICAgcmVtb3ZlX21vZHMgPSBwbS5f
Y29uZnRlc3RfcGx1Z2lucy5kaWZmZXJlbmNlKG15X2NvbmZ0ZXN0bW9kdWxlcykKKyAgICAgICAg
ICAgIGlmIHJlbW92ZV9tb2RzOgorICAgICAgICAgICAgICAgICMgb25lIG9yIG1vcmUgY29uZnRl
c3RzIGFyZSBub3QgaW4gdXNlIGF0IHRoaXMgZnNwYXRoCisgICAgICAgICAgICAgICAgcHJveHkg
PSBGU0hvb2tQcm94eShmc3BhdGgsIHBtLCByZW1vdmVfbW9kcykKKyAgICAgICAgICAgIGVsc2U6
CisgICAgICAgICAgICAgICAgIyBhbGwgcGx1Z2lzIGFyZSBhY3RpdmUgZm9yIHRoaXMgZnNwYXRo
CisgICAgICAgICAgICAgICAgcHJveHkgPSBzZWxmLmNvbmZpZy5ob29rCisKKyAgICAgICAgICAg
IHNlbGYuX2ZzMmhvb2twcm94eVtmc3BhdGhdID0gcHJveHkKKyAgICAgICAgICAgIHJldHVybiBw
cm94eQorCisgICAgZGVmIHBlcmZvcm1fY29sbGVjdChzZWxmLCBhcmdzPU5vbmUsIGdlbml0ZW1z
PVRydWUpOgorICAgICAgICBob29rID0gc2VsZi5jb25maWcuaG9vaworICAgICAgICB0cnk6Cisg
ICAgICAgICAgICBpdGVtcyA9IHNlbGYuX3BlcmZvcm1fY29sbGVjdChhcmdzLCBnZW5pdGVtcykK
KyAgICAgICAgICAgIGhvb2sucHl0ZXN0X2NvbGxlY3Rpb25fbW9kaWZ5aXRlbXMoc2Vzc2lvbj1z
ZWxmLAorICAgICAgICAgICAgICAgIGNvbmZpZz1zZWxmLmNvbmZpZywgaXRlbXM9aXRlbXMpCisg
ICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBob29rLnB5dGVzdF9jb2xsZWN0aW9uX2Zpbmlz
aChzZXNzaW9uPXNlbGYpCisgICAgICAgIHNlbGYudGVzdHNjb2xsZWN0ZWQgPSBsZW4oaXRlbXMp
CisgICAgICAgIHJldHVybiBpdGVtcworCisgICAgZGVmIF9wZXJmb3JtX2NvbGxlY3Qoc2VsZiwg
YXJncywgZ2VuaXRlbXMpOgorICAgICAgICBpZiBhcmdzIGlzIE5vbmU6CisgICAgICAgICAgICBh
cmdzID0gc2VsZi5jb25maWcuYXJncworICAgICAgICBzZWxmLnRyYWNlKCJwZXJmb3JtX2NvbGxl
Y3QiLCBzZWxmLCBhcmdzKQorICAgICAgICBzZWxmLnRyYWNlLnJvb3QuaW5kZW50ICs9IDEKKyAg
ICAgICAgc2VsZi5fbm90Zm91bmQgPSBbXQorICAgICAgICBzZWxmLl9pbml0aWFscGF0aHMgPSBz
ZXQoKQorICAgICAgICBzZWxmLl9pbml0aWFscGFydHMgPSBbXQorICAgICAgICBzZWxmLml0ZW1z
ID0gaXRlbXMgPSBbXQorICAgICAgICBmb3IgYXJnIGluIGFyZ3M6CisgICAgICAgICAgICBwYXJ0
cyA9IHNlbGYuX3BhcnNlYXJnKGFyZykKKyAgICAgICAgICAgIHNlbGYuX2luaXRpYWxwYXJ0cy5h
cHBlbmQocGFydHMpCisgICAgICAgICAgICBzZWxmLl9pbml0aWFscGF0aHMuYWRkKHBhcnRzWzBd
KQorICAgICAgICByZXAgPSBjb2xsZWN0X29uZV9ub2RlKHNlbGYpCisgICAgICAgIHNlbGYuaWhv
b2sucHl0ZXN0X2NvbGxlY3RyZXBvcnQocmVwb3J0PXJlcCkKKyAgICAgICAgc2VsZi50cmFjZS5y
b290LmluZGVudCAtPSAxCisgICAgICAgIGlmIHNlbGYuX25vdGZvdW5kOgorICAgICAgICAgICAg
ZXJyb3JzID0gW10KKyAgICAgICAgICAgIGZvciBhcmcsIGV4YyBpbiBzZWxmLl9ub3Rmb3VuZDoK
KyAgICAgICAgICAgICAgICBsaW5lID0gIihubyBuYW1lICVyIGluIGFueSBvZiAlcikiICUgKGFy
ZywgZXhjLmFyZ3NbMF0pCisgICAgICAgICAgICAgICAgZXJyb3JzLmFwcGVuZCgibm90IGZvdW5k
OiAlc1xuJXMiICUgKGFyZywgbGluZSkpCisgICAgICAgICAgICAgICAgI1hYWDogdGVzdCB0aGlz
CisgICAgICAgICAgICByYWlzZSBweXRlc3QuVXNhZ2VFcnJvcigqZXJyb3JzKQorICAgICAgICBp
ZiBub3QgZ2VuaXRlbXM6CisgICAgICAgICAgICByZXR1cm4gcmVwLnJlc3VsdAorICAgICAgICBl
bHNlOgorICAgICAgICAgICAgaWYgcmVwLnBhc3NlZDoKKyAgICAgICAgICAgICAgICBmb3Igbm9k
ZSBpbiByZXAucmVzdWx0OgorICAgICAgICAgICAgICAgICAgICBzZWxmLml0ZW1zLmV4dGVuZChz
ZWxmLmdlbml0ZW1zKG5vZGUpKQorICAgICAgICAgICAgcmV0dXJuIGl0ZW1zCisKKyAgICBkZWYg
Y29sbGVjdChzZWxmKToKKyAgICAgICAgZm9yIHBhcnRzIGluIHNlbGYuX2luaXRpYWxwYXJ0czoK
KyAgICAgICAgICAgIGFyZyA9ICI6OiIuam9pbihtYXAoc3RyLCBwYXJ0cykpCisgICAgICAgICAg
ICBzZWxmLnRyYWNlKCJwcm9jZXNzaW5nIGFyZ3VtZW50IiwgYXJnKQorICAgICAgICAgICAgc2Vs
Zi50cmFjZS5yb290LmluZGVudCArPSAxCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAg
ICAgZm9yIHggaW4gc2VsZi5fY29sbGVjdChhcmcpOgorICAgICAgICAgICAgICAgICAgICB5aWVs
ZCB4CisgICAgICAgICAgICBleGNlcHQgTm9NYXRjaDoKKyAgICAgICAgICAgICAgICAjIHdlIGFy
ZSBpbnNpZGUgYSBtYWtlX3JlcG9ydCBob29rIHNvCisgICAgICAgICAgICAgICAgIyB3ZSBjYW5u
b3QgZGlyZWN0bHkgcGFzcyB0aHJvdWdoIHRoZSBleGNlcHRpb24KKyAgICAgICAgICAgICAgICBz
ZWxmLl9ub3Rmb3VuZC5hcHBlbmQoKGFyZywgc3lzLmV4Y19pbmZvKClbMV0pKQorCisgICAgICAg
ICAgICBzZWxmLnRyYWNlLnJvb3QuaW5kZW50IC09IDEKKworICAgIGRlZiBfY29sbGVjdChzZWxm
LCBhcmcpOgorICAgICAgICBuYW1lcyA9IHNlbGYuX3BhcnNlYXJnKGFyZykKKyAgICAgICAgcGF0
aCA9IG5hbWVzLnBvcCgwKQorICAgICAgICBpZiBwYXRoLmNoZWNrKGRpcj0xKToKKyAgICAgICAg
ICAgIGFzc2VydCBub3QgbmFtZXMsICJpbnZhbGlkIGFyZyAlciIgJShhcmcsKQorICAgICAgICAg
ICAgZm9yIHBhdGggaW4gcGF0aC52aXNpdChmaWw9bGFtYmRhIHg6IHguY2hlY2soZmlsZT0xKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjPXNlbGYuX3JlY3Vyc2UsIGJm
PVRydWUsIHNvcnQ9VHJ1ZSk6CisgICAgICAgICAgICAgICAgZm9yIHggaW4gc2VsZi5fY29sbGVj
dGZpbGUocGF0aCk6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIHgKKyAgICAgICAgZWxzZToK
KyAgICAgICAgICAgIGFzc2VydCBwYXRoLmNoZWNrKGZpbGU9MSkKKyAgICAgICAgICAgIGZvciB4
IGluIHNlbGYubWF0Y2hub2RlcyhzZWxmLl9jb2xsZWN0ZmlsZShwYXRoKSwgbmFtZXMpOgorICAg
ICAgICAgICAgICAgIHlpZWxkIHgKKworICAgIGRlZiBfY29sbGVjdGZpbGUoc2VsZiwgcGF0aCk6
CisgICAgICAgIGlob29rID0gc2VsZi5nZXRob29rcHJveHkocGF0aCkKKyAgICAgICAgaWYgbm90
IHNlbGYuaXNpbml0cGF0aChwYXRoKToKKyAgICAgICAgICAgIGlmIGlob29rLnB5dGVzdF9pZ25v
cmVfY29sbGVjdChwYXRoPXBhdGgsIGNvbmZpZz1zZWxmLmNvbmZpZyk6CisgICAgICAgICAgICAg
ICAgcmV0dXJuICgpCisgICAgICAgIHJldHVybiBpaG9vay5weXRlc3RfY29sbGVjdF9maWxlKHBh
dGg9cGF0aCwgcGFyZW50PXNlbGYpCisKKyAgICBkZWYgX3JlY3Vyc2Uoc2VsZiwgcGF0aCk6Cisg
ICAgICAgIGlob29rID0gc2VsZi5nZXRob29rcHJveHkocGF0aC5kaXJwYXRoKCkpCisgICAgICAg
IGlmIGlob29rLnB5dGVzdF9pZ25vcmVfY29sbGVjdChwYXRoPXBhdGgsIGNvbmZpZz1zZWxmLmNv
bmZpZyk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZm9yIHBhdCBpbiBzZWxmLl9ub3Jl
Y3Vyc2VwYXR0ZXJuczoKKyAgICAgICAgICAgIGlmIHBhdGguY2hlY2soZm5tYXRjaD1wYXQpOgor
ICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBpaG9vayA9IHNlbGYuZ2V0aG9v
a3Byb3h5KHBhdGgpCisgICAgICAgIGlob29rLnB5dGVzdF9jb2xsZWN0X2RpcmVjdG9yeShwYXRo
PXBhdGgsIHBhcmVudD1zZWxmKQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF90cnlj
b252ZXJ0cHlhcmcoc2VsZiwgeCk6CisgICAgICAgIG1vZCA9IE5vbmUKKyAgICAgICAgcGF0aCA9
IFtvcy5wYXRoLmFic3BhdGgoJy4nKV0gKyBzeXMucGF0aAorICAgICAgICBmb3IgbmFtZSBpbiB4
LnNwbGl0KCcuJyk6CisgICAgICAgICAgICAjIGlnbm9yZSBhbnl0aGluZyB0aGF0J3Mgbm90IGEg
cHJvcGVyIG5hbWUgaGVyZQorICAgICAgICAgICAgIyBlbHNlIHNvbWV0aGluZyBsaWtlIC0tcHlh
cmdzIHdpbGwgbWVzcyB1cCAnLicKKyAgICAgICAgICAgICMgc2luY2UgaW1wLmZpbmRfbW9kdWxl
IHdpbGwgYWN0dWFsbHkgc29tZXRpbWVzIHdvcmsgZm9yIGl0CisgICAgICAgICAgICAjIGJ1dCBp
dCdzIHN1cHBvc2VkIHRvIGJlIGNvbnNpZGVyZWQgYSBmaWxlc3lzdGVtIHBhdGgKKyAgICAgICAg
ICAgICMgbm90IGEgcGFja2FnZQorICAgICAgICAgICAgaWYgbmFtZV9yZS5tYXRjaChuYW1lKSBp
cyBOb25lOgorICAgICAgICAgICAgICAgIHJldHVybiB4CisgICAgICAgICAgICB0cnk6CisgICAg
ICAgICAgICAgICAgZmQsIG1vZCwgdHlwZV8gPSBpbXAuZmluZF9tb2R1bGUobmFtZSwgcGF0aCkK
KyAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgICAgICByZXR1cm4g
eAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBmZCBpcyBub3QgTm9uZToK
KyAgICAgICAgICAgICAgICAgICAgZmQuY2xvc2UoKQorCisgICAgICAgICAgICBpZiB0eXBlX1sy
XSAhPSBpbXAuUEtHX0RJUkVDVE9SWToKKyAgICAgICAgICAgICAgICBwYXRoID0gW29zLnBhdGgu
ZGlybmFtZShtb2QpXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwYXRoID0g
W21vZF0KKyAgICAgICAgcmV0dXJuIG1vZAorCisgICAgZGVmIF9wYXJzZWFyZyhzZWxmLCBhcmcp
OgorICAgICAgICAiIiIgcmV0dXJuIChmc3BhdGgsIG5hbWVzKSB0dXBsZSBhZnRlciBjaGVja2lu
ZyB0aGUgZmlsZSBleGlzdHMuICIiIgorICAgICAgICBhcmcgPSBzdHIoYXJnKQorICAgICAgICBp
ZiBzZWxmLmNvbmZpZy5vcHRpb24ucHlhcmdzOgorICAgICAgICAgICAgYXJnID0gc2VsZi5fdHJ5
Y29udmVydHB5YXJnKGFyZykKKyAgICAgICAgcGFydHMgPSBzdHIoYXJnKS5zcGxpdCgiOjoiKQor
ICAgICAgICByZWxwYXRoID0gcGFydHNbMF0ucmVwbGFjZSgiLyIsIG9zLnNlcCkKKyAgICAgICAg
cGF0aCA9IHNlbGYuY29uZmlnLmludm9jYXRpb25fZGlyLmpvaW4ocmVscGF0aCwgYWJzPVRydWUp
CisgICAgICAgIGlmIG5vdCBwYXRoLmNoZWNrKCk6CisgICAgICAgICAgICBpZiBzZWxmLmNvbmZp
Zy5vcHRpb24ucHlhcmdzOgorICAgICAgICAgICAgICAgIG1zZyA9ICJmaWxlIG9yIHBhY2thZ2Ug
bm90IGZvdW5kOiAiCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG1zZyA9ICJm
aWxlIG5vdCBmb3VuZDogIgorICAgICAgICAgICAgcmFpc2UgcHl0ZXN0LlVzYWdlRXJyb3IobXNn
ICsgYXJnKQorICAgICAgICBwYXJ0c1swXSA9IHBhdGgKKyAgICAgICAgcmV0dXJuIHBhcnRzCisK
KyAgICBkZWYgbWF0Y2hub2RlcyhzZWxmLCBtYXRjaGluZywgbmFtZXMpOgorICAgICAgICBzZWxm
LnRyYWNlKCJtYXRjaG5vZGVzIiwgbWF0Y2hpbmcsIG5hbWVzKQorICAgICAgICBzZWxmLnRyYWNl
LnJvb3QuaW5kZW50ICs9IDEKKyAgICAgICAgbm9kZXMgPSBzZWxmLl9tYXRjaG5vZGVzKG1hdGNo
aW5nLCBuYW1lcykKKyAgICAgICAgbnVtID0gbGVuKG5vZGVzKQorICAgICAgICBzZWxmLnRyYWNl
KCJtYXRjaG5vZGVzIGZpbmlzaGVkIC0+ICIsIG51bSwgIm5vZGVzIikKKyAgICAgICAgc2VsZi50
cmFjZS5yb290LmluZGVudCAtPSAxCisgICAgICAgIGlmIG51bSA9PSAwOgorICAgICAgICAgICAg
cmFpc2UgTm9NYXRjaChtYXRjaGluZywgbmFtZXNbOjFdKQorICAgICAgICByZXR1cm4gbm9kZXMK
KworICAgIGRlZiBfbWF0Y2hub2RlcyhzZWxmLCBtYXRjaGluZywgbmFtZXMpOgorICAgICAgICBp
ZiBub3QgbWF0Y2hpbmcgb3Igbm90IG5hbWVzOgorICAgICAgICAgICAgcmV0dXJuIG1hdGNoaW5n
CisgICAgICAgIG5hbWUgPSBuYW1lc1swXQorICAgICAgICBhc3NlcnQgbmFtZQorICAgICAgICBu
ZXh0bmFtZXMgPSBuYW1lc1sxOl0KKyAgICAgICAgcmVzdWx0bm9kZXMgPSBbXQorICAgICAgICBm
b3Igbm9kZSBpbiBtYXRjaGluZzoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uobm9kZSwgcHl0
ZXN0Lkl0ZW0pOgorICAgICAgICAgICAgICAgIGlmIG5vdCBuYW1lczoKKyAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0bm9kZXMuYXBwZW5kKG5vZGUpCisgICAgICAgICAgICAgICAgY29udGludWUK
KyAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKG5vZGUsIHB5dGVzdC5Db2xsZWN0b3IpCisg
ICAgICAgICAgICByZXAgPSBjb2xsZWN0X29uZV9ub2RlKG5vZGUpCisgICAgICAgICAgICBpZiBy
ZXAucGFzc2VkOgorICAgICAgICAgICAgICAgIGhhc19tYXRjaGVkID0gRmFsc2UKKyAgICAgICAg
ICAgICAgICBmb3IgeCBpbiByZXAucmVzdWx0OgorICAgICAgICAgICAgICAgICAgICAjIFRPRE86
IHJlbW92ZSBwYXJhbWV0cml6ZWQgd29ya2Fyb3VuZCBvbmNlIGNvbGxlY3Rpb24gc3RydWN0dXJl
IGNvbnRhaW5zIHBhcmFtZXRyaXphdGlvbgorICAgICAgICAgICAgICAgICAgICBpZiB4Lm5hbWUg
PT0gbmFtZSBvciB4Lm5hbWUuc3BsaXQoIlsiKVswXSA9PSBuYW1lOgorICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0bm9kZXMuZXh0ZW5kKHNlbGYubWF0Y2hub2RlcyhbeF0sIG5leHRuYW1l
cykpCisgICAgICAgICAgICAgICAgICAgICAgICBoYXNfbWF0Y2hlZCA9IFRydWUKKyAgICAgICAg
ICAgICAgICAjIFhYWCBhY2NlcHQgSURzIHRoYXQgZG9uJ3QgaGF2ZSAiKCkiIGZvciBjbGFzcyBp
bnN0YW5jZXMKKyAgICAgICAgICAgICAgICBpZiBub3QgaGFzX21hdGNoZWQgYW5kIGxlbihyZXAu
cmVzdWx0KSA9PSAxIGFuZCB4Lm5hbWUgPT0gIigpIjoKKyAgICAgICAgICAgICAgICAgICAgbmV4
dG5hbWVzLmluc2VydCgwLCBuYW1lKQorICAgICAgICAgICAgICAgICAgICByZXN1bHRub2Rlcy5l
eHRlbmQoc2VsZi5tYXRjaG5vZGVzKFt4XSwgbmV4dG5hbWVzKSkKKyAgICAgICAgICAgIG5vZGUu
aWhvb2sucHl0ZXN0X2NvbGxlY3RyZXBvcnQocmVwb3J0PXJlcCkKKyAgICAgICAgcmV0dXJuIHJl
c3VsdG5vZGVzCisKKyAgICBkZWYgZ2VuaXRlbXMoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYu
dHJhY2UoImdlbml0ZW1zIiwgbm9kZSkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShub2RlLCBweXRl
c3QuSXRlbSk6CisgICAgICAgICAgICBub2RlLmlob29rLnB5dGVzdF9pdGVtY29sbGVjdGVkKGl0
ZW09bm9kZSkKKyAgICAgICAgICAgIHlpZWxkIG5vZGUKKyAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgIGFzc2VydCBpc2luc3RhbmNlKG5vZGUsIHB5dGVzdC5Db2xsZWN0b3IpCisgICAgICAgICAg
ICByZXAgPSBjb2xsZWN0X29uZV9ub2RlKG5vZGUpCisgICAgICAgICAgICBpZiByZXAucGFzc2Vk
OgorICAgICAgICAgICAgICAgIGZvciBzdWJub2RlIGluIHJlcC5yZXN1bHQ6CisgICAgICAgICAg
ICAgICAgICAgIGZvciB4IGluIHNlbGYuZ2VuaXRlbXMoc3Vibm9kZSk6CisgICAgICAgICAgICAg
ICAgICAgICAgICB5aWVsZCB4CisgICAgICAgICAgICBub2RlLmlob29rLnB5dGVzdF9jb2xsZWN0
cmVwb3J0KHJlcG9ydD1yZXApCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93
M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvbWFyay5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVk
L3czYy90b29scy9weXRlc3QvX3B5dGVzdC9tYXJrLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi4xYTc2MzU0MDI0MAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZl
clRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9tYXJrLnB5CkBAIC0wLDAg
KzEsMzExIEBACisiIiIgZ2VuZXJpYyBtZWNoYW5pc20gZm9yIG1hcmtpbmcgYW5kIHNlbGVjdGlu
ZyBweXRob24gZnVuY3Rpb25zLiAiIiIKK2ltcG9ydCBpbnNwZWN0CisKKworY2xhc3MgTWFya2Vy
RXJyb3IoRXhjZXB0aW9uKToKKworICAgICIiIkVycm9yIGluIHVzZSBvZiBhIHB5dGVzdCBtYXJr
ZXIvYXR0cmlidXRlLiIiIgorCisKK2RlZiBweXRlc3RfbmFtZXNwYWNlKCk6CisgICAgcmV0dXJu
IHsnbWFyayc6IE1hcmtHZW5lcmF0b3IoKX0KKworCitkZWYgcHl0ZXN0X2FkZG9wdGlvbihwYXJz
ZXIpOgorICAgIGdyb3VwID0gcGFyc2VyLmdldGdyb3VwKCJnZW5lcmFsIikKKyAgICBncm91cC5f
YWRkb3B0aW9uKAorICAgICAgICAnLWsnLAorICAgICAgICBhY3Rpb249InN0b3JlIiwgZGVzdD0i
a2V5d29yZCIsIGRlZmF1bHQ9JycsIG1ldGF2YXI9IkVYUFJFU1NJT04iLAorICAgICAgICBoZWxw
PSJvbmx5IHJ1biB0ZXN0cyB3aGljaCBtYXRjaCB0aGUgZ2l2ZW4gc3Vic3RyaW5nIGV4cHJlc3Np
b24uICIKKyAgICAgICAgICAgICAiQW4gZXhwcmVzc2lvbiBpcyBhIHB5dGhvbiBldmFsdWF0YWJs
ZSBleHByZXNzaW9uICIKKyAgICAgICAgICAgICAid2hlcmUgYWxsIG5hbWVzIGFyZSBzdWJzdHJp
bmctbWF0Y2hlZCBhZ2FpbnN0IHRlc3QgbmFtZXMgIgorICAgICAgICAgICAgICJhbmQgdGhlaXIg
cGFyZW50IGNsYXNzZXMuIEV4YW1wbGU6IC1rICd0ZXN0X21ldGhvZCBvciB0ZXN0ICIKKyAgICAg
ICAgICAgICAib3RoZXInIG1hdGNoZXMgYWxsIHRlc3QgZnVuY3Rpb25zIGFuZCBjbGFzc2VzIHdo
b3NlIG5hbWUgIgorICAgICAgICAgICAgICJjb250YWlucyAndGVzdF9tZXRob2QnIG9yICd0ZXN0
X290aGVyJy4gIgorICAgICAgICAgICAgICJBZGRpdGlvbmFsbHkga2V5d29yZHMgYXJlIG1hdGNo
ZWQgdG8gY2xhc3NlcyBhbmQgZnVuY3Rpb25zICIKKyAgICAgICAgICAgICAiY29udGFpbmluZyBl
eHRyYSBuYW1lcyBpbiB0aGVpciAnZXh0cmFfa2V5d29yZF9tYXRjaGVzJyBzZXQsICIKKyAgICAg
ICAgICAgICAiYXMgd2VsbCBhcyBmdW5jdGlvbnMgd2hpY2ggaGF2ZSBuYW1lcyBhc3NpZ25lZCBk
aXJlY3RseSB0byB0aGVtLiIKKyAgICApCisKKyAgICBncm91cC5fYWRkb3B0aW9uKAorICAgICAg
ICAiLW0iLAorICAgICAgICBhY3Rpb249InN0b3JlIiwgZGVzdD0ibWFya2V4cHIiLCBkZWZhdWx0
PSIiLCBtZXRhdmFyPSJNQVJLRVhQUiIsCisgICAgICAgIGhlbHA9Im9ubHkgcnVuIHRlc3RzIG1h
dGNoaW5nIGdpdmVuIG1hcmsgZXhwcmVzc2lvbi4gICIKKyAgICAgICAgICAgICAiZXhhbXBsZTog
LW0gJ21hcmsxIGFuZCBub3QgbWFyazInLiIKKyAgICApCisKKyAgICBncm91cC5hZGRvcHRpb24o
CisgICAgICAgICItLW1hcmtlcnMiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICBoZWxw
PSJzaG93IG1hcmtlcnMgKGJ1aWx0aW4sIHBsdWdpbiBhbmQgcGVyLXByb2plY3Qgb25lcykuIgor
ICAgICkKKworICAgIHBhcnNlci5hZGRpbmkoIm1hcmtlcnMiLCAibWFya2VycyBmb3IgdGVzdCBm
dW5jdGlvbnMiLCAnbGluZWxpc3QnKQorCisKK2RlZiBweXRlc3RfY21kbGluZV9tYWluKGNvbmZp
Zyk6CisgICAgaW1wb3J0IF9weXRlc3QuY29uZmlnCisgICAgaWYgY29uZmlnLm9wdGlvbi5tYXJr
ZXJzOgorICAgICAgICBjb25maWcuX2RvX2NvbmZpZ3VyZSgpCisgICAgICAgIHR3ID0gX3B5dGVz
dC5jb25maWcuY3JlYXRlX3Rlcm1pbmFsX3dyaXRlcihjb25maWcpCisgICAgICAgIGZvciBsaW5l
IGluIGNvbmZpZy5nZXRpbmkoIm1hcmtlcnMiKToKKyAgICAgICAgICAgIG5hbWUsIHJlc3QgPSBs
aW5lLnNwbGl0KCI6IiwgMSkKKyAgICAgICAgICAgIHR3LndyaXRlKCJAcHl0ZXN0Lm1hcmsuJXM6
IiAlIG5hbWUsIGJvbGQ9VHJ1ZSkKKyAgICAgICAgICAgIHR3LmxpbmUocmVzdCkKKyAgICAgICAg
ICAgIHR3LmxpbmUoKQorICAgICAgICBjb25maWcuX2Vuc3VyZV91bmNvbmZpZ3VyZSgpCisgICAg
ICAgIHJldHVybiAwCitweXRlc3RfY21kbGluZV9tYWluLnRyeWZpcnN0ID0gVHJ1ZQorCisKK2Rl
ZiBweXRlc3RfY29sbGVjdGlvbl9tb2RpZnlpdGVtcyhpdGVtcywgY29uZmlnKToKKyAgICBrZXl3
b3JkZXhwciA9IGNvbmZpZy5vcHRpb24ua2V5d29yZAorICAgIG1hdGNoZXhwciA9IGNvbmZpZy5v
cHRpb24ubWFya2V4cHIKKyAgICBpZiBub3Qga2V5d29yZGV4cHIgYW5kIG5vdCBtYXRjaGV4cHI6
CisgICAgICAgIHJldHVybgorICAgICMgcHl0ZXN0IHVzZWQgdG8gYWxsb3cgIi0iIGZvciBuZWdh
dGluZworICAgICMgYnV0IHRvZGF5IHdlIGp1c3QgYWxsb3cgIi0iIGF0IHRoZSBiZWdpbm5pbmcs
IHVzZSAibm90IiBpbnN0ZWFkCisgICAgIyB3ZSBwcm9iYWJseSByZW1vdmUgIi0iIGFsbHRvZ2V0
aGVyIHNvb24KKyAgICBpZiBrZXl3b3JkZXhwci5zdGFydHN3aXRoKCItIik6CisgICAgICAgIGtl
eXdvcmRleHByID0gIm5vdCAiICsga2V5d29yZGV4cHJbMTpdCisgICAgc2VsZWN0dW50aWwgPSBG
YWxzZQorICAgIGlmIGtleXdvcmRleHByWy0xOl0gPT0gIjoiOgorICAgICAgICBzZWxlY3R1bnRp
bCA9IFRydWUKKyAgICAgICAga2V5d29yZGV4cHIgPSBrZXl3b3JkZXhwcls6LTFdCisKKyAgICBy
ZW1haW5pbmcgPSBbXQorICAgIGRlc2VsZWN0ZWQgPSBbXQorICAgIGZvciBjb2xpdGVtIGluIGl0
ZW1zOgorICAgICAgICBpZiBrZXl3b3JkZXhwciBhbmQgbm90IG1hdGNoa2V5d29yZChjb2xpdGVt
LCBrZXl3b3JkZXhwcik6CisgICAgICAgICAgICBkZXNlbGVjdGVkLmFwcGVuZChjb2xpdGVtKQor
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgc2VsZWN0dW50aWw6CisgICAgICAgICAgICAg
ICAga2V5d29yZGV4cHIgPSBOb25lCisgICAgICAgICAgICBpZiBtYXRjaGV4cHI6CisgICAgICAg
ICAgICAgICAgaWYgbm90IG1hdGNobWFyayhjb2xpdGVtLCBtYXRjaGV4cHIpOgorICAgICAgICAg
ICAgICAgICAgICBkZXNlbGVjdGVkLmFwcGVuZChjb2xpdGVtKQorICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZQorICAgICAgICAgICAgcmVtYWluaW5nLmFwcGVuZChjb2xpdGVtKQorCisgICAg
aWYgZGVzZWxlY3RlZDoKKyAgICAgICAgY29uZmlnLmhvb2sucHl0ZXN0X2Rlc2VsZWN0ZWQoaXRl
bXM9ZGVzZWxlY3RlZCkKKyAgICAgICAgaXRlbXNbOl0gPSByZW1haW5pbmcKKworCitjbGFzcyBN
YXJrTWFwcGluZzoKKyAgICAiIiJQcm92aWRlcyBhIGxvY2FsIG1hcHBpbmcgZm9yIG1hcmtlcnMg
d2hlcmUgaXRlbSBhY2Nlc3MKKyAgICByZXNvbHZlcyB0byBUcnVlIGlmIHRoZSBtYXJrZXIgaXMg
cHJlc2VudC4gIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGtleXdvcmRzKToKKyAgICAgICAg
bXltYXJrcyA9IHNldCgpCisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGtleXdvcmRzLml0ZW1z
KCk6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBNYXJrSW5mbykgb3IgaXNpbnN0
YW5jZSh2YWx1ZSwgTWFya0RlY29yYXRvcik6CisgICAgICAgICAgICAgICAgbXltYXJrcy5hZGQo
a2V5KQorICAgICAgICBzZWxmLl9teW1hcmtzID0gbXltYXJrcworCisgICAgZGVmIF9fZ2V0aXRl
bV9fKHNlbGYsIG5hbWUpOgorICAgICAgICByZXR1cm4gbmFtZSBpbiBzZWxmLl9teW1hcmtzCisK
KworY2xhc3MgS2V5d29yZE1hcHBpbmc6CisgICAgIiIiUHJvdmlkZXMgYSBsb2NhbCBtYXBwaW5n
IGZvciBrZXl3b3Jkcy4KKyAgICBHaXZlbiBhIGxpc3Qgb2YgbmFtZXMsIG1hcCBhbnkgc3Vic3Ry
aW5nIG9mIG9uZSBvZiB0aGVzZSBuYW1lcyB0byBUcnVlLgorICAgICIiIgorICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBuYW1lcyk6CisgICAgICAgIHNlbGYuX25hbWVzID0gbmFtZXMKKworICAgIGRl
ZiBfX2dldGl0ZW1fXyhzZWxmLCBzdWJuYW1lKToKKyAgICAgICAgZm9yIG5hbWUgaW4gc2VsZi5f
bmFtZXM6CisgICAgICAgICAgICBpZiBzdWJuYW1lIGluIG5hbWU6CisgICAgICAgICAgICAgICAg
cmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKworZGVmIG1hdGNobWFyayhjb2xp
dGVtLCBtYXJrZXhwcik6CisgICAgIiIiVHJpZXMgdG8gbWF0Y2ggb24gYW55IG1hcmtlciBuYW1l
cywgYXR0YWNoZWQgdG8gdGhlIGdpdmVuIGNvbGl0ZW0uIiIiCisgICAgcmV0dXJuIGV2YWwobWFy
a2V4cHIsIHt9LCBNYXJrTWFwcGluZyhjb2xpdGVtLmtleXdvcmRzKSkKKworCitkZWYgbWF0Y2hr
ZXl3b3JkKGNvbGl0ZW0sIGtleXdvcmRleHByKToKKyAgICAiIiJUcmllcyB0byBtYXRjaCBnaXZl
biBrZXl3b3JkIGV4cHJlc3Npb24gdG8gZ2l2ZW4gY29sbGVjdG9yIGl0ZW0uCisKKyAgICBXaWxs
IG1hdGNoIG9uIHRoZSBuYW1lIG9mIGNvbGl0ZW0sIGluY2x1ZGluZyB0aGUgbmFtZXMgb2YgaXRz
IHBhcmVudHMuCisgICAgT25seSBtYXRjaGVzIG5hbWVzIG9mIGl0ZW1zIHdoaWNoIGFyZSBlaXRo
ZXIgYSA6Y2xhc3M6YENsYXNzYCBvciBhCisgICAgOmNsYXNzOmBGdW5jdGlvbmAuCisgICAgQWRk
aXRpb25hbGx5LCBtYXRjaGVzIG9uIG5hbWVzIGluIHRoZSAnZXh0cmFfa2V5d29yZF9tYXRjaGVz
JyBzZXQgb2YKKyAgICBhbnkgaXRlbSwgYXMgd2VsbCBhcyBuYW1lcyBkaXJlY3RseSBhc3NpZ25l
ZCB0byB0ZXN0IGZ1bmN0aW9ucy4KKyAgICAiIiIKKyAgICBtYXBwZWRfbmFtZXMgPSBzZXQoKQor
CisgICAgIyBBZGQgdGhlIG5hbWVzIG9mIHRoZSBjdXJyZW50IGl0ZW0gYW5kIGFueSBwYXJlbnQg
aXRlbXMKKyAgICBpbXBvcnQgcHl0ZXN0CisgICAgZm9yIGl0ZW0gaW4gY29saXRlbS5saXN0Y2hh
aW4oKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoaXRlbSwgcHl0ZXN0Lkluc3RhbmNlKToK
KyAgICAgICAgICAgIG1hcHBlZF9uYW1lcy5hZGQoaXRlbS5uYW1lKQorCisgICAgIyBBZGQgdGhl
IG5hbWVzIGFkZGVkIGFzIGV4dHJhIGtleXdvcmRzIHRvIGN1cnJlbnQgb3IgcGFyZW50IGl0ZW1z
CisgICAgZm9yIG5hbWUgaW4gY29saXRlbS5saXN0ZXh0cmFrZXl3b3JkcygpOgorICAgICAgICBt
YXBwZWRfbmFtZXMuYWRkKG5hbWUpCisKKyAgICAjIEFkZCB0aGUgbmFtZXMgYXR0YWNoZWQgdG8g
dGhlIGN1cnJlbnQgZnVuY3Rpb24gdGhyb3VnaCBkaXJlY3QgYXNzaWdubWVudAorICAgIGlmIGhh
c2F0dHIoY29saXRlbSwgJ2Z1bmN0aW9uJyk6CisgICAgICAgIGZvciBuYW1lIGluIGNvbGl0ZW0u
ZnVuY3Rpb24uX19kaWN0X186CisgICAgICAgICAgICBtYXBwZWRfbmFtZXMuYWRkKG5hbWUpCisK
KyAgICBtYXBwaW5nID0gS2V5d29yZE1hcHBpbmcobWFwcGVkX25hbWVzKQorICAgIGlmICIgIiBu
b3QgaW4ga2V5d29yZGV4cHI6CisgICAgICAgICMgc3BlY2lhbCBjYXNlIHRvIGFsbG93IGZvciBz
aW1wbGUgIi1rIHBhc3MiIGFuZCAiLWsgMS4zIgorICAgICAgICByZXR1cm4gbWFwcGluZ1trZXl3
b3JkZXhwcl0KKyAgICBlbGlmIGtleXdvcmRleHByLnN0YXJ0c3dpdGgoIm5vdCAiKSBhbmQgIiAi
IG5vdCBpbiBrZXl3b3JkZXhwcls0Ol06CisgICAgICAgIHJldHVybiBub3QgbWFwcGluZ1trZXl3
b3JkZXhwcls0Ol1dCisgICAgcmV0dXJuIGV2YWwoa2V5d29yZGV4cHIsIHt9LCBtYXBwaW5nKQor
CisKK2RlZiBweXRlc3RfY29uZmlndXJlKGNvbmZpZyk6CisgICAgaW1wb3J0IHB5dGVzdAorICAg
IGlmIGNvbmZpZy5vcHRpb24uc3RyaWN0OgorICAgICAgICBweXRlc3QubWFyay5fY29uZmlnID0g
Y29uZmlnCisKKworY2xhc3MgTWFya0dlbmVyYXRvcjoKKyAgICAiIiIgRmFjdG9yeSBmb3IgOmNs
YXNzOmBNYXJrRGVjb3JhdG9yYCBvYmplY3RzIC0gZXhwb3NlZCBhcworICAgIGEgYGBweXRlc3Qu
bWFya2BgIHNpbmdsZXRvbiBpbnN0YW5jZS4gIEV4YW1wbGU6OgorCisgICAgICAgICBpbXBvcnQg
cHl0ZXN0CisgICAgICAgICBAcHl0ZXN0Lm1hcmsuc2xvd3Rlc3QKKyAgICAgICAgIGRlZiB0ZXN0
X2Z1bmN0aW9uKCk6CisgICAgICAgICAgICBwYXNzCisKKyAgICB3aWxsIHNldCBhICdzbG93dGVz
dCcgOmNsYXNzOmBNYXJrSW5mb2Agb2JqZWN0CisgICAgb24gdGhlIGBgdGVzdF9mdW5jdGlvbmBg
IG9iamVjdC4gIiIiCisKKyAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFtZSk6CisgICAgICAg
IGlmIG5hbWVbMF0gPT0gIl8iOgorICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoIk1h
cmtlciBuYW1lIG11c3QgTk9UIHN0YXJ0IHdpdGggdW5kZXJzY29yZSIpCisgICAgICAgIGlmIGhh
c2F0dHIoc2VsZiwgJ19jb25maWcnKToKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrKG5hbWUpCisg
ICAgICAgIHJldHVybiBNYXJrRGVjb3JhdG9yKG5hbWUpCisKKyAgICBkZWYgX2NoZWNrKHNlbGYs
IG5hbWUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBuYW1lIGluIHNlbGYuX21hcmtl
cnM6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJv
cjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5fbWFya2VycyA9IGwgPSBzZXQoKQor
ICAgICAgICBmb3IgbGluZSBpbiBzZWxmLl9jb25maWcuZ2V0aW5pKCJtYXJrZXJzIik6CisgICAg
ICAgICAgICBiZWdpbm5pbmcgPSBsaW5lLnNwbGl0KCI6IiwgMSkKKyAgICAgICAgICAgIHggPSBi
ZWdpbm5pbmdbMF0uc3BsaXQoIigiLCAxKVswXQorICAgICAgICAgICAgbC5hZGQoeCkKKyAgICAg
ICAgaWYgbmFtZSBub3QgaW4gc2VsZi5fbWFya2VyczoKKyAgICAgICAgICAgIHJhaXNlIEF0dHJp
YnV0ZUVycm9yKCIlciBub3QgYSByZWdpc3RlcmVkIG1hcmtlciIgJSAobmFtZSwpKQorCitkZWYg
aXN0ZXN0ZnVuYyhmdW5jKToKKyAgICByZXR1cm4gaGFzYXR0cihmdW5jLCAiX19jYWxsX18iKSBh
bmQgXAorICAgICAgICBnZXRhdHRyKGZ1bmMsICJfX25hbWVfXyIsICI8bGFtYmRhPiIpICE9ICI8
bGFtYmRhPiIKKworY2xhc3MgTWFya0RlY29yYXRvcjoKKyAgICAiIiIgQSBkZWNvcmF0b3IgZm9y
IHRlc3QgZnVuY3Rpb25zIGFuZCB0ZXN0IGNsYXNzZXMuICBXaGVuIGFwcGxpZWQKKyAgICBpdCB3
aWxsIGNyZWF0ZSA6Y2xhc3M6YE1hcmtJbmZvYCBvYmplY3RzIHdoaWNoIG1heSBiZQorICAgIDpy
ZWY6YHJldHJpZXZlZCBieSBob29rcyBhcyBpdGVtIGtleXdvcmRzIDxleGNvbnRyb2xza2lwPmAu
CisgICAgTWFya0RlY29yYXRvciBpbnN0YW5jZXMgYXJlIG9mdGVuIGNyZWF0ZWQgbGlrZSB0aGlz
OjoKKworICAgICAgICBtYXJrMSA9IHB5dGVzdC5tYXJrLk5BTUUgICAgICAgICAgICAgICMgc2lt
cGxlIE1hcmtEZWNvcmF0b3IKKyAgICAgICAgbWFyazIgPSBweXRlc3QubWFyay5OQU1FKG5hbWUx
PXZhbHVlKSAjIHBhcmFtZXRyaXplZCBNYXJrRGVjb3JhdG9yCisKKyAgICBhbmQgY2FuIHRoZW4g
YmUgYXBwbGllZCBhcyBkZWNvcmF0b3JzIHRvIHRlc3QgZnVuY3Rpb25zOjoKKworICAgICAgICBA
bWFyazIKKyAgICAgICAgZGVmIHRlc3RfZnVuY3Rpb24oKToKKyAgICAgICAgICAgIHBhc3MKKwor
ICAgIFdoZW4gYSBNYXJrRGVjb3JhdG9yIGluc3RhbmNlIGlzIGNhbGxlZCBpdCBkb2VzIHRoZSBm
b2xsb3dpbmc6CisgICAgICAxLiBJZiBjYWxsZWQgd2l0aCBhIHNpbmdsZSBjbGFzcyBhcyBpdHMg
b25seSBwb3NpdGlvbmFsIGFyZ3VtZW50IGFuZCBubworICAgICAgICAgYWRkaXRpb25hbCBrZXl3
b3JkIGFyZ3VtZW50cywgaXQgYXR0YWNoZXMgaXRzZWxmIHRvIHRoZSBjbGFzcyBzbyBpdAorICAg
ICAgICAgZ2V0cyBhcHBsaWVkIGF1dG9tYXRpY2FsbHkgdG8gYWxsIHRlc3QgY2FzZXMgZm91bmQg
aW4gdGhhdCBjbGFzcy4KKyAgICAgIDIuIElmIGNhbGxlZCB3aXRoIGEgc2luZ2xlIGZ1bmN0aW9u
IGFzIGl0cyBvbmx5IHBvc2l0aW9uYWwgYXJndW1lbnQgYW5kCisgICAgICAgICBubyBhZGRpdGlv
bmFsIGtleXdvcmQgYXJndW1lbnRzLCBpdCBhdHRhY2hlcyBhIE1hcmtJbmZvIG9iamVjdCB0byB0
aGUKKyAgICAgICAgIGZ1bmN0aW9uLCBjb250YWluaW5nIGFsbCB0aGUgYXJndW1lbnRzIGFscmVh
ZHkgc3RvcmVkIGludGVybmFsbHkgaW4KKyAgICAgICAgIHRoZSBNYXJrRGVjb3JhdG9yLgorICAg
ICAgMy4gV2hlbiBjYWxsZWQgaW4gYW55IG90aGVyIGNhc2UsIGl0IHBlcmZvcm1zIGEgJ2Zha2Ug
Y29uc3RydWN0aW9uJyBjYWxsLAorICAgICAgICAgaS5lLiBpdCByZXR1cm5zIGEgbmV3IE1hcmtE
ZWNvcmF0b3IgaW5zdGFuY2Ugd2l0aCB0aGUgb3JpZ2luYWwKKyAgICAgICAgIE1hcmtEZWNvcmF0
b3IncyBjb250ZW50IHVwZGF0ZWQgd2l0aCB0aGUgYXJndW1lbnRzIHBhc3NlZCB0byB0aGlzCisg
ICAgICAgICBjYWxsLgorCisgICAgTm90ZTogVGhlIHJ1bGVzIGFib3ZlIHByZXZlbnQgTWFya0Rl
Y29yYXRvciBvYmplY3RzIGZyb20gc3RvcmluZyBvbmx5IGEKKyAgICBzaW5nbGUgZnVuY3Rpb24g
b3IgY2xhc3MgcmVmZXJlbmNlIGFzIHRoZWlyIHBvc2l0aW9uYWwgYXJndW1lbnQgd2l0aCBubwor
ICAgIGFkZGl0aW9uYWwga2V5d29yZCBvciBwb3NpdGlvbmFsIGFyZ3VtZW50cy4KKworICAgICIi
IgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBhcmdzPU5vbmUsIGt3YXJncz1Ob25lKToK
KyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICBzZWxmLmFyZ3MgPSBhcmdzIG9yICgp
CisgICAgICAgIHNlbGYua3dhcmdzID0ga3dhcmdzIG9yIHt9CisKKyAgICBAcHJvcGVydHkKKyAg
ICBkZWYgbWFya25hbWUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLm5hbWUgIyBmb3IgYmFj
a3dhcmQtY29tcGF0ICgyLjQuMSBoYWQgdGhpcyBhdHRyKQorCisgICAgZGVmIF9fcmVwcl9fKHNl
bGYpOgorICAgICAgICBkID0gc2VsZi5fX2RpY3RfXy5jb3B5KCkKKyAgICAgICAgbmFtZSA9IGQu
cG9wKCduYW1lJykKKyAgICAgICAgcmV0dXJuICI8TWFya0RlY29yYXRvciAlciAlcj4iICUgKG5h
bWUsIGQpCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAg
ICAgIiIiIGlmIHBhc3NlZCBhIHNpbmdsZSBjYWxsYWJsZSBhcmd1bWVudDogZGVjb3JhdGUgaXQg
d2l0aCBtYXJrIGluZm8uCisgICAgICAgICAgICBvdGhlcndpc2UgYWRkICphcmdzLyoqa3dhcmdz
IGluLXBsYWNlIHRvIG1hcmsgaW5mb3JtYXRpb24uICIiIgorICAgICAgICBpZiBhcmdzIGFuZCBu
b3Qga3dhcmdzOgorICAgICAgICAgICAgZnVuYyA9IGFyZ3NbMF0KKyAgICAgICAgICAgIGlzX2Ns
YXNzID0gaW5zcGVjdC5pc2NsYXNzKGZ1bmMpCisgICAgICAgICAgICBpZiBsZW4oYXJncykgPT0g
MSBhbmQgKGlzdGVzdGZ1bmMoZnVuYykgb3IgaXNfY2xhc3MpOgorICAgICAgICAgICAgICAgIGlm
IGlzX2NsYXNzOgorICAgICAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKGZ1bmMsICdweXRlc3Rt
YXJrJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBtYXJrX2xpc3QgPSBmdW5jLnB5dGVzdG1h
cmsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG1hcmtfbGlzdCwg
bGlzdCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya19saXN0ID0gW21hcmtfbGlz
dF0KKyAgICAgICAgICAgICAgICAgICAgICAgICMgYWx3YXlzIHdvcmsgb24gYSBjb3B5IHRvIGF2
b2lkIHVwZGF0aW5nIHB5dGVzdG1hcmsKKyAgICAgICAgICAgICAgICAgICAgICAgICMgZnJvbSBh
IHN1cGVyY2xhc3MgYnkgYWNjaWRlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtfbGlz
dCA9IG1hcmtfbGlzdCArIFtzZWxmXQorICAgICAgICAgICAgICAgICAgICAgICAgZnVuYy5weXRl
c3RtYXJrID0gbWFya19saXN0CisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICAgICAgICAgICAgICBmdW5jLnB5dGVzdG1hcmsgPSBbc2VsZl0KKyAgICAgICAgICAgICAgICBl
bHNlOgorICAgICAgICAgICAgICAgICAgICBob2xkZXIgPSBnZXRhdHRyKGZ1bmMsIHNlbGYubmFt
ZSwgTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgaG9sZGVyIGlzIE5vbmU6CisgICAgICAg
ICAgICAgICAgICAgICAgICBob2xkZXIgPSBNYXJrSW5mbygKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzZWxmLm5hbWUsIHNlbGYuYXJncywgc2VsZi5rd2FyZ3MKKyAgICAgICAgICAgICAg
ICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldGF0dHIoZnVuYywgc2VsZi5u
YW1lLCBob2xkZXIpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAg
ICAgICAgICBob2xkZXIuYWRkKHNlbGYuYXJncywgc2VsZi5rd2FyZ3MpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZ1bmMKKyAgICAgICAga3cgPSBzZWxmLmt3YXJncy5jb3B5KCkKKyAgICAgICAg
a3cudXBkYXRlKGt3YXJncykKKyAgICAgICAgYXJncyA9IHNlbGYuYXJncyArIGFyZ3MKKyAgICAg
ICAgcmV0dXJuIHNlbGYuX19jbGFzc19fKHNlbGYubmFtZSwgYXJncz1hcmdzLCBrd2FyZ3M9a3cp
CisKKworY2xhc3MgTWFya0luZm86CisgICAgIiIiIE1hcmtpbmcgb2JqZWN0IGNyZWF0ZWQgYnkg
OmNsYXNzOmBNYXJrRGVjb3JhdG9yYCBpbnN0YW5jZXMuICIiIgorICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBuYW1lLCBhcmdzLCBrd2FyZ3MpOgorICAgICAgICAjOiBuYW1lIG9mIGF0dHJpYnV0ZQor
ICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgICM6IHBvc2l0aW9uYWwgYXJndW1lbnQg
bGlzdCwgZW1wdHkgaWYgbm9uZSBzcGVjaWZpZWQKKyAgICAgICAgc2VsZi5hcmdzID0gYXJncwor
ICAgICAgICAjOiBrZXl3b3JkIGFyZ3VtZW50IGRpY3Rpb25hcnksIGVtcHR5IGlmIG5vdGhpbmcg
c3BlY2lmaWVkCisgICAgICAgIHNlbGYua3dhcmdzID0ga3dhcmdzLmNvcHkoKQorICAgICAgICBz
ZWxmLl9hcmdsaXN0ID0gWyhhcmdzLCBrd2FyZ3MuY29weSgpKV0KKworICAgIGRlZiBfX3JlcHJf
XyhzZWxmKToKKyAgICAgICAgcmV0dXJuICI8TWFya0luZm8gJXIgYXJncz0lciBrd2FyZ3M9JXI+
IiAlICgKKyAgICAgICAgICAgIHNlbGYubmFtZSwgc2VsZi5hcmdzLCBzZWxmLmt3YXJncworICAg
ICAgICApCisKKyAgICBkZWYgYWRkKHNlbGYsIGFyZ3MsIGt3YXJncyk6CisgICAgICAgICIiIiBh
ZGQgYSBNYXJrSW5mbyB3aXRoIHRoZSBnaXZlbiBhcmdzIGFuZCBrd2FyZ3MuICIiIgorICAgICAg
ICBzZWxmLl9hcmdsaXN0LmFwcGVuZCgoYXJncywga3dhcmdzKSkKKyAgICAgICAgc2VsZi5hcmdz
ICs9IGFyZ3MKKyAgICAgICAgc2VsZi5rd2FyZ3MudXBkYXRlKGt3YXJncykKKworICAgIGRlZiBf
X2l0ZXJfXyhzZWxmKToKKyAgICAgICAgIiIiIHlpZWxkIE1hcmtJbmZvIG9iamVjdHMgZWFjaCBy
ZWxhdGluZyB0byBhIG1hcmtpbmctY2FsbC4gIiIiCisgICAgICAgIGZvciBhcmdzLCBrd2FyZ3Mg
aW4gc2VsZi5fYXJnbGlzdDoKKyAgICAgICAgICAgIHlpZWxkIE1hcmtJbmZvKHNlbGYubmFtZSwg
YXJncywga3dhcmdzKQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rv
b2xzL3B5dGVzdC9fcHl0ZXN0L21vbmtleXBhdGNoLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0
ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L21vbmtleXBhdGNoLnB5Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kNGMxNjlkMzdhOQotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9tb25rZXlw
YXRjaC5weQpAQCAtMCwwICsxLDI1NCBAQAorIiIiIG1vbmtleXBhdGNoaW5nIGFuZCBtb2NraW5n
IGZ1bmN0aW9uYWxpdHkuICAiIiIKKworaW1wb3J0IG9zLCBzeXMKK2ltcG9ydCByZQorCitmcm9t
IHB5LmJ1aWx0aW4gaW1wb3J0IF9iYXNlc3RyaW5nCisKK1JFX0lNUE9SVF9FUlJPUl9OQU1FID0g
cmUuY29tcGlsZSgiXk5vIG1vZHVsZSBuYW1lZCAoLiopJCIpCisKKworZGVmIHB5dGVzdF9mdW5j
YXJnX19tb25rZXlwYXRjaChyZXF1ZXN0KToKKyAgICAiIiJUaGUgcmV0dXJuZWQgYGBtb25rZXlw
YXRjaGBgIGZ1bmNhcmcgcHJvdmlkZXMgdGhlc2UKKyAgICBoZWxwZXIgbWV0aG9kcyB0byBtb2Rp
Znkgb2JqZWN0cywgZGljdGlvbmFyaWVzIG9yIG9zLmVudmlyb246OgorCisgICAgICAgIG1vbmtl
eXBhdGNoLnNldGF0dHIob2JqLCBuYW1lLCB2YWx1ZSwgcmFpc2luZz1UcnVlKQorICAgICAgICBt
b25rZXlwYXRjaC5kZWxhdHRyKG9iaiwgbmFtZSwgcmFpc2luZz1UcnVlKQorICAgICAgICBtb25r
ZXlwYXRjaC5zZXRpdGVtKG1hcHBpbmcsIG5hbWUsIHZhbHVlKQorICAgICAgICBtb25rZXlwYXRj
aC5kZWxpdGVtKG9iaiwgbmFtZSwgcmFpc2luZz1UcnVlKQorICAgICAgICBtb25rZXlwYXRjaC5z
ZXRlbnYobmFtZSwgdmFsdWUsIHByZXBlbmQ9RmFsc2UpCisgICAgICAgIG1vbmtleXBhdGNoLmRl
bGVudihuYW1lLCB2YWx1ZSwgcmFpc2luZz1UcnVlKQorICAgICAgICBtb25rZXlwYXRjaC5zeXNw
YXRoX3ByZXBlbmQocGF0aCkKKyAgICAgICAgbW9ua2V5cGF0Y2guY2hkaXIocGF0aCkKKworICAg
IEFsbCBtb2RpZmljYXRpb25zIHdpbGwgYmUgdW5kb25lIGFmdGVyIHRoZSByZXF1ZXN0aW5nCisg
ICAgdGVzdCBmdW5jdGlvbiBoYXMgZmluaXNoZWQuIFRoZSBgYHJhaXNpbmdgYAorICAgIHBhcmFt
ZXRlciBkZXRlcm1pbmVzIGlmIGEgS2V5RXJyb3Igb3IgQXR0cmlidXRlRXJyb3IKKyAgICB3aWxs
IGJlIHJhaXNlZCBpZiB0aGUgc2V0L2RlbGV0aW9uIG9wZXJhdGlvbiBoYXMgbm8gdGFyZ2V0Lgor
ICAgICIiIgorICAgIG1wYXRjaCA9IG1vbmtleXBhdGNoKCkKKyAgICByZXF1ZXN0LmFkZGZpbmFs
aXplcihtcGF0Y2gudW5kbykKKyAgICByZXR1cm4gbXBhdGNoCisKKworZGVmIHJlc29sdmUobmFt
ZSk6CisgICAgIyBzaW1wbGlmaWVkIGZyb20gem9wZS5kb3R0ZWRuYW1lCisgICAgcGFydHMgPSBu
YW1lLnNwbGl0KCcuJykKKworICAgIHVzZWQgPSBwYXJ0cy5wb3AoMCkKKyAgICBmb3VuZCA9IF9f
aW1wb3J0X18odXNlZCkKKyAgICBmb3IgcGFydCBpbiBwYXJ0czoKKyAgICAgICAgdXNlZCArPSAn
LicgKyBwYXJ0CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvdW5kID0gZ2V0YXR0cihmb3Vu
ZCwgcGFydCkKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFz
cworICAgICAgICBlbHNlOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgIyB3ZSB1c2Ug
ZXhwbGljaXQgdW4tbmVzdGluZyBvZiB0aGUgaGFuZGxpbmcgYmxvY2sgaW4gb3JkZXIKKyAgICAg
ICAgIyB0byBhdm9pZCBuZXN0ZWQgZXhjZXB0aW9ucyBvbiBweXRob24gMworICAgICAgICB0cnk6
CisgICAgICAgICAgICBfX2ltcG9ydF9fKHVzZWQpCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJv
ciBhcyBleDoKKyAgICAgICAgICAgICMgc3RyIGlzIHVzZWQgZm9yIHB5MiB2cyBweTMKKyAgICAg
ICAgICAgIGV4cGVjdGVkID0gc3RyKGV4KS5zcGxpdCgpWy0xXQorICAgICAgICAgICAgaWYgZXhw
ZWN0ZWQgPT0gdXNlZDoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZWxzZToK
KyAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigKKyAgICAgICAgICAgICAgICAgICAg
J2ltcG9ydCBlcnJvciBpbiAlczogJXMnICUgKHVzZWQsIGV4KQorICAgICAgICAgICAgICAgICkK
KyAgICAgICAgZm91bmQgPSBhbm5vdGF0ZWRfZ2V0YXR0cihmb3VuZCwgcGFydCwgdXNlZCkKKyAg
ICByZXR1cm4gZm91bmQKKworCitkZWYgYW5ub3RhdGVkX2dldGF0dHIob2JqLCBuYW1lLCBhbm4p
OgorICAgIHRyeToKKyAgICAgICAgb2JqID0gZ2V0YXR0cihvYmosIG5hbWUpCisgICAgZXhjZXB0
IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigKKyAgICAgICAg
ICAgICAgICAnJXIgb2JqZWN0IGF0ICVzIGhhcyBubyBhdHRyaWJ1dGUgJXInICUgKAorICAgICAg
ICAgICAgICAgICAgICB0eXBlKG9iaikuX19uYW1lX18sIGFubiwgbmFtZQorICAgICAgICAgICAg
ICAgICkKKyAgICAgICAgKQorICAgIHJldHVybiBvYmoKKworCitkZWYgZGVyaXZlX2ltcG9ydHBh
dGgoaW1wb3J0X3BhdGgsIHJhaXNpbmcpOgorICAgIGlmIG5vdCBpc2luc3RhbmNlKGltcG9ydF9w
YXRoLCBfYmFzZXN0cmluZykgb3IgIi4iIG5vdCBpbiBpbXBvcnRfcGF0aDoKKyAgICAgICAgcmFp
c2UgVHlwZUVycm9yKCJtdXN0IGJlIGFic29sdXRlIGltcG9ydCBwYXRoIHN0cmluZywgbm90ICVy
IiAlCisgICAgICAgICAgICAgICAgICAgICAgICAoaW1wb3J0X3BhdGgsKSkKKyAgICBtb2R1bGUs
IGF0dHIgPSBpbXBvcnRfcGF0aC5yc3BsaXQoJy4nLCAxKQorICAgIHRhcmdldCA9IHJlc29sdmUo
bW9kdWxlKQorICAgIGlmIHJhaXNpbmc6CisgICAgICAgIGFubm90YXRlZF9nZXRhdHRyKHRhcmdl
dCwgYXR0ciwgYW5uPW1vZHVsZSkKKyAgICByZXR1cm4gYXR0ciwgdGFyZ2V0CisKKworY2xhc3Mg
Tm90c2V0OgorICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICI8bm90c2V0
PiIKKworCitub3RzZXQgPSBOb3RzZXQoKQorCisKK2NsYXNzIG1vbmtleXBhdGNoOgorICAgICIi
IiBPYmplY3Qga2VlcGluZyBhIHJlY29yZCBvZiBzZXRhdHRyL2l0ZW0vZW52L3N5c3BhdGggY2hh
bmdlcy4gIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuX3NldGF0
dHIgPSBbXQorICAgICAgICBzZWxmLl9zZXRpdGVtID0gW10KKyAgICAgICAgc2VsZi5fY3dkID0g
Tm9uZQorICAgICAgICBzZWxmLl9zYXZlc3lzcGF0aCA9IE5vbmUKKworICAgIGRlZiBzZXRhdHRy
KHNlbGYsIHRhcmdldCwgbmFtZSwgdmFsdWU9bm90c2V0LCByYWlzaW5nPVRydWUpOgorICAgICAg
ICAiIiIgU2V0IGF0dHJpYnV0ZSB2YWx1ZSBvbiB0YXJnZXQsIG1lbW9yaXppbmcgdGhlIG9sZCB2
YWx1ZS4KKyAgICAgICAgQnkgZGVmYXVsdCByYWlzZSBBdHRyaWJ1dGVFcnJvciBpZiB0aGUgYXR0
cmlidXRlIGRpZCBub3QgZXhpc3QuCisKKyAgICAgICAgRm9yIGNvbnZlbmllbmNlIHlvdSBjYW4g
c3BlY2lmeSBhIHN0cmluZyBhcyBgYHRhcmdldGBgIHdoaWNoCisgICAgICAgIHdpbGwgYmUgaW50
ZXJwcmV0ZWQgYXMgYSBkb3R0ZWQgaW1wb3J0IHBhdGgsIHdpdGggdGhlIGxhc3QgcGFydAorICAg
ICAgICBiZWluZyB0aGUgYXR0cmlidXRlIG5hbWUuICBFeGFtcGxlOgorICAgICAgICBgYG1vbmtl
eXBhdGNoLnNldGF0dHIoIm9zLmdldGN3ZCIsIGxhbWJkYSB4OiAiLyIpYGAKKyAgICAgICAgd291
bGQgc2V0IHRoZSBgYGdldGN3ZGBgIGZ1bmN0aW9uIG9mIHRoZSBgYG9zYGAgbW9kdWxlLgorCisg
ICAgICAgIFRoZSBgYHJhaXNpbmdgYCB2YWx1ZSBkZXRlcm1pbmVzIGlmIHRoZSBzZXRhdHRyIHNo
b3VsZCBmYWlsCisgICAgICAgIGlmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IGFscmVhZHkgcHJlc2Vu
dCAoZGVmYXVsdHMgdG8gVHJ1ZQorICAgICAgICB3aGljaCBtZWFucyBpdCB3aWxsIHJhaXNlKS4K
KyAgICAgICAgIiIiCisgICAgICAgIF9fdHJhY2ViYWNraGlkZV9fID0gVHJ1ZQorICAgICAgICBp
bXBvcnQgaW5zcGVjdAorCisgICAgICAgIGlmIHZhbHVlIGlzIG5vdHNldDoKKyAgICAgICAgICAg
IGlmIG5vdCBpc2luc3RhbmNlKHRhcmdldCwgX2Jhc2VzdHJpbmcpOgorICAgICAgICAgICAgICAg
IHJhaXNlIFR5cGVFcnJvcigidXNlIHNldGF0dHIodGFyZ2V0LCBuYW1lLCB2YWx1ZSkgb3IgIgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2V0YXR0cih0YXJnZXQsIHZhbHVlKSB3
aXRoIHRhcmdldCBiZWluZyBhIGRvdHRlZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJpbXBvcnQgc3RyaW5nIikKKyAgICAgICAgICAgIHZhbHVlID0gbmFtZQorICAgICAgICAg
ICAgbmFtZSwgdGFyZ2V0ID0gZGVyaXZlX2ltcG9ydHBhdGgodGFyZ2V0LCByYWlzaW5nKQorCisg
ICAgICAgIG9sZHZhbCA9IGdldGF0dHIodGFyZ2V0LCBuYW1lLCBub3RzZXQpCisgICAgICAgIGlm
IHJhaXNpbmcgYW5kIG9sZHZhbCBpcyBub3RzZXQ6CisgICAgICAgICAgICByYWlzZSBBdHRyaWJ1
dGVFcnJvcigiJXIgaGFzIG5vIGF0dHJpYnV0ZSAlciIgJSAodGFyZ2V0LCBuYW1lKSkKKworICAg
ICAgICAjIGF2b2lkIGNsYXNzIGRlc2NyaXB0b3JzIGxpa2Ugc3RhdGljbWV0aG9kL2NsYXNzbWV0
aG9kCisgICAgICAgIGlmIGluc3BlY3QuaXNjbGFzcyh0YXJnZXQpOgorICAgICAgICAgICAgb2xk
dmFsID0gdGFyZ2V0Ll9fZGljdF9fLmdldChuYW1lLCBub3RzZXQpCisgICAgICAgIHNlbGYuX3Nl
dGF0dHIuYXBwZW5kKCh0YXJnZXQsIG5hbWUsIG9sZHZhbCkpCisgICAgICAgIHNldGF0dHIodGFy
Z2V0LCBuYW1lLCB2YWx1ZSkKKworICAgIGRlZiBkZWxhdHRyKHNlbGYsIHRhcmdldCwgbmFtZT1u
b3RzZXQsIHJhaXNpbmc9VHJ1ZSk6CisgICAgICAgICIiIiBEZWxldGUgYXR0cmlidXRlIGBgbmFt
ZWBgIGZyb20gYGB0YXJnZXRgYCwgYnkgZGVmYXVsdCByYWlzZQorICAgICAgICBBdHRyaWJ1dGVF
cnJvciBpdCB0aGUgYXR0cmlidXRlIGRpZCBub3QgcHJldmlvdXNseSBleGlzdC4KKworICAgICAg
ICBJZiBubyBgYG5hbWVgYCBpcyBzcGVjaWZpZWQgYW5kIGBgdGFyZ2V0YGAgaXMgYSBzdHJpbmcK
KyAgICAgICAgaXQgd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBhIGRvdHRlZCBpbXBvcnQgcGF0aCB3
aXRoIHRoZQorICAgICAgICBsYXN0IHBhcnQgYmVpbmcgdGhlIGF0dHJpYnV0ZSBuYW1lLgorCisg
ICAgICAgIElmIGBgcmFpc2luZ2BgIGlzIHNldCB0byBGYWxzZSwgbm8gZXhjZXB0aW9uIHdpbGwg
YmUgcmFpc2VkIGlmIHRoZQorICAgICAgICBhdHRyaWJ1dGUgaXMgbWlzc2luZy4KKyAgICAgICAg
IiIiCisgICAgICAgIF9fdHJhY2ViYWNraGlkZV9fID0gVHJ1ZQorICAgICAgICBpZiBuYW1lIGlz
IG5vdHNldDoKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHRhcmdldCwgX2Jhc2VzdHJp
bmcpOgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigidXNlIGRlbGF0dHIodGFyZ2V0
LCBuYW1lKSBvciAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZWxhdHRyKHRh
cmdldCkgd2l0aCB0YXJnZXQgYmVpbmcgYSBkb3R0ZWQgIgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiaW1wb3J0IHN0cmluZyIpCisgICAgICAgICAgICBuYW1lLCB0YXJnZXQgPSBk
ZXJpdmVfaW1wb3J0cGF0aCh0YXJnZXQsIHJhaXNpbmcpCisKKyAgICAgICAgaWYgbm90IGhhc2F0
dHIodGFyZ2V0LCBuYW1lKToKKyAgICAgICAgICAgIGlmIHJhaXNpbmc6CisgICAgICAgICAgICAg
ICAgcmFpc2UgQXR0cmlidXRlRXJyb3IobmFtZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg
IHNlbGYuX3NldGF0dHIuYXBwZW5kKCh0YXJnZXQsIG5hbWUsIGdldGF0dHIodGFyZ2V0LCBuYW1l
LCBub3RzZXQpKSkKKyAgICAgICAgICAgIGRlbGF0dHIodGFyZ2V0LCBuYW1lKQorCisgICAgZGVm
IHNldGl0ZW0oc2VsZiwgZGljLCBuYW1lLCB2YWx1ZSk6CisgICAgICAgICIiIiBTZXQgZGljdGlv
bmFyeSBlbnRyeSBgYG5hbWVgYCB0byB2YWx1ZS4gIiIiCisgICAgICAgIHNlbGYuX3NldGl0ZW0u
YXBwZW5kKChkaWMsIG5hbWUsIGRpYy5nZXQobmFtZSwgbm90c2V0KSkpCisgICAgICAgIGRpY1tu
YW1lXSA9IHZhbHVlCisKKyAgICBkZWYgZGVsaXRlbShzZWxmLCBkaWMsIG5hbWUsIHJhaXNpbmc9
VHJ1ZSk6CisgICAgICAgICIiIiBEZWxldGUgYGBuYW1lYGAgZnJvbSBkaWN0LiBSYWlzZSBLZXlF
cnJvciBpZiBpdCBkb2Vzbid0IGV4aXN0LgorCisgICAgICAgIElmIGBgcmFpc2luZ2BgIGlzIHNl
dCB0byBGYWxzZSwgbm8gZXhjZXB0aW9uIHdpbGwgYmUgcmFpc2VkIGlmIHRoZQorICAgICAgICBr
ZXkgaXMgbWlzc2luZy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5hbWUgbm90IGluIGRpYzoK
KyAgICAgICAgICAgIGlmIHJhaXNpbmc6CisgICAgICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3Io
bmFtZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3NldGl0ZW0uYXBwZW5kKChk
aWMsIG5hbWUsIGRpYy5nZXQobmFtZSwgbm90c2V0KSkpCisgICAgICAgICAgICBkZWwgZGljW25h
bWVdCisKKyAgICBkZWYgc2V0ZW52KHNlbGYsIG5hbWUsIHZhbHVlLCBwcmVwZW5kPU5vbmUpOgor
ICAgICAgICAiIiIgU2V0IGVudmlyb25tZW50IHZhcmlhYmxlIGBgbmFtZWBgIHRvIGBgdmFsdWVg
YC4gIElmIGBgcHJlcGVuZGBgCisgICAgICAgIGlzIGEgY2hhcmFjdGVyLCByZWFkIHRoZSBjdXJy
ZW50IGVudmlyb25tZW50IHZhcmlhYmxlIHZhbHVlCisgICAgICAgIGFuZCBwcmVwZW5kIHRoZSBg
YHZhbHVlYGAgYWRqb2luZWQgd2l0aCB0aGUgYGBwcmVwZW5kYGAgY2hhcmFjdGVyLiIiIgorICAg
ICAgICB2YWx1ZSA9IHN0cih2YWx1ZSkKKyAgICAgICAgaWYgcHJlcGVuZCBhbmQgbmFtZSBpbiBv
cy5lbnZpcm9uOgorICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSArIHByZXBlbmQgKyBvcy5lbnZp
cm9uW25hbWVdCisgICAgICAgIHNlbGYuc2V0aXRlbShvcy5lbnZpcm9uLCBuYW1lLCB2YWx1ZSkK
KworICAgIGRlZiBkZWxlbnYoc2VsZiwgbmFtZSwgcmFpc2luZz1UcnVlKToKKyAgICAgICAgIiIi
IERlbGV0ZSBgYG5hbWVgYCBmcm9tIHRoZSBlbnZpcm9ubWVudC4gUmFpc2UgS2V5RXJyb3IgaXQg
ZG9lcyBub3QKKyAgICAgICAgZXhpc3QuCisKKyAgICAgICAgSWYgYGByYWlzaW5nYGAgaXMgc2V0
IHRvIEZhbHNlLCBubyBleGNlcHRpb24gd2lsbCBiZSByYWlzZWQgaWYgdGhlCisgICAgICAgIGVu
dmlyb25tZW50IHZhcmlhYmxlIGlzIG1pc3NpbmcuCisgICAgICAgICIiIgorICAgICAgICBzZWxm
LmRlbGl0ZW0ob3MuZW52aXJvbiwgbmFtZSwgcmFpc2luZz1yYWlzaW5nKQorCisgICAgZGVmIHN5
c3BhdGhfcHJlcGVuZChzZWxmLCBwYXRoKToKKyAgICAgICAgIiIiIFByZXBlbmQgYGBwYXRoYGAg
dG8gYGBzeXMucGF0aGBgIGxpc3Qgb2YgaW1wb3J0IGxvY2F0aW9ucy4gIiIiCisgICAgICAgIGlm
IHNlbGYuX3NhdmVzeXNwYXRoIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLl9zYXZlc3lzcGF0
aCA9IHN5cy5wYXRoWzpdCisgICAgICAgIHN5cy5wYXRoLmluc2VydCgwLCBzdHIocGF0aCkpCisK
KyAgICBkZWYgY2hkaXIoc2VsZiwgcGF0aCk6CisgICAgICAgICIiIiBDaGFuZ2UgdGhlIGN1cnJl
bnQgd29ya2luZyBkaXJlY3RvcnkgdG8gdGhlIHNwZWNpZmllZCBwYXRoLgorICAgICAgICBQYXRo
IGNhbiBiZSBhIHN0cmluZyBvciBhIHB5LnBhdGgubG9jYWwgb2JqZWN0LgorICAgICAgICAiIiIK
KyAgICAgICAgaWYgc2VsZi5fY3dkIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLl9jd2QgPSBv
cy5nZXRjd2QoKQorICAgICAgICBpZiBoYXNhdHRyKHBhdGgsICJjaGRpciIpOgorICAgICAgICAg
ICAgcGF0aC5jaGRpcigpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvcy5jaGRpcihwYXRo
KQorCisgICAgZGVmIHVuZG8oc2VsZik6CisgICAgICAgICIiIiBVbmRvIHByZXZpb3VzIGNoYW5n
ZXMuICBUaGlzIGNhbGwgY29uc3VtZXMgdGhlCisgICAgICAgIHVuZG8gc3RhY2suIENhbGxpbmcg
aXQgYSBzZWNvbmQgdGltZSBoYXMgbm8gZWZmZWN0IHVubGVzcworICAgICAgICB5b3UgZG8gbW9y
ZSBtb25rZXlwYXRjaGluZyBhZnRlciB0aGUgdW5kbyBjYWxsLgorICAgICAgICAKKyAgICAgICAg
VGhlcmUgaXMgZ2VuZXJhbGx5IG5vIG5lZWQgdG8gY2FsbCBgdW5kbygpYCwgc2luY2UgaXQgaXMK
KyAgICAgICAgY2FsbGVkIGF1dG9tYXRpY2FsbHkgZHVyaW5nIHRlYXItZG93bi4KKyAgICAgICAg
CisgICAgICAgIE5vdGUgdGhhdCB0aGUgc2FtZSBgbW9ua2V5cGF0Y2hgIGZpeHR1cmUgaXMgdXNl
ZCBhY3Jvc3MgYQorICAgICAgICBzaW5nbGUgdGVzdCBmdW5jdGlvbiBpbnZvY2F0aW9uLiBJZiBg
bW9ua2V5cGF0Y2hgIGlzIHVzZWQgYm90aCBieQorICAgICAgICB0aGUgdGVzdCBmdW5jdGlvbiBp
dHNlbGYgYW5kIG9uZSBvZiB0aGUgdGVzdCBmaXh0dXJlcywKKyAgICAgICAgY2FsbGluZyBgdW5k
bygpYCB3aWxsIHVuZG8gYWxsIG9mIHRoZSBjaGFuZ2VzIG1hZGUgaW4KKyAgICAgICAgYm90aCBm
dW5jdGlvbnMuCisgICAgICAgICIiIgorICAgICAgICBmb3Igb2JqLCBuYW1lLCB2YWx1ZSBpbiBy
ZXZlcnNlZChzZWxmLl9zZXRhdHRyKToKKyAgICAgICAgICAgIGlmIHZhbHVlIGlzIG5vdCBub3Rz
ZXQ6CisgICAgICAgICAgICAgICAgc2V0YXR0cihvYmosIG5hbWUsIHZhbHVlKQorICAgICAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgICAgICBkZWxhdHRyKG9iaiwgbmFtZSkKKyAgICAgICAgc2Vs
Zi5fc2V0YXR0cls6XSA9IFtdCisgICAgICAgIGZvciBkaWN0aW9uYXJ5LCBuYW1lLCB2YWx1ZSBp
biByZXZlcnNlZChzZWxmLl9zZXRpdGVtKToKKyAgICAgICAgICAgIGlmIHZhbHVlIGlzIG5vdHNl
dDoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGRlbCBkaWN0aW9u
YXJ5W25hbWVdCisgICAgICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAg
ICAgICAgICBwYXNzICAjIHdhcyBhbHJlYWR5IGRlbGV0ZWQsIHNvIHdlIGhhdmUgdGhlIGRlc2ly
ZWQgc3RhdGUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZGljdGlvbmFyeVtu
YW1lXSA9IHZhbHVlCisgICAgICAgIHNlbGYuX3NldGl0ZW1bOl0gPSBbXQorICAgICAgICBpZiBz
ZWxmLl9zYXZlc3lzcGF0aCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHN5cy5wYXRoWzpdID0g
c2VsZi5fc2F2ZXN5c3BhdGgKKyAgICAgICAgICAgIHNlbGYuX3NhdmVzeXNwYXRoID0gTm9uZQor
CisgICAgICAgIGlmIHNlbGYuX2N3ZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIG9zLmNoZGly
KHNlbGYuX2N3ZCkKKyAgICAgICAgICAgIHNlbGYuX2N3ZCA9IE5vbmUKZGlmZiAtLWdpdCBhL1dl
YkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9ub3NlLnB5IGIv
V2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L25vc2UucHkK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjAzODc0Njg2ODYwCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9f
cHl0ZXN0L25vc2UucHkKQEAgLTAsMCArMSw3MSBAQAorIiIiIHJ1biB0ZXN0IHN1aXRlcyB3cml0
dGVuIGZvciBub3NlLiAiIiIKKworaW1wb3J0IHN5cworCitpbXBvcnQgcHkKK2ltcG9ydCBweXRl
c3QKK2Zyb20gX3B5dGVzdCBpbXBvcnQgdW5pdHRlc3QKKworCitkZWYgZ2V0X3NraXBfZXhjZXB0
aW9ucygpOgorICAgIHNraXBfY2xhc3NlcyA9IHNldCgpCisgICAgZm9yIG1vZHVsZV9uYW1lIGlu
ICgndW5pdHRlc3QnLCAndW5pdHRlc3QyJywgJ25vc2UnKToKKyAgICAgICAgbW9kID0gc3lzLm1v
ZHVsZXMuZ2V0KG1vZHVsZV9uYW1lKQorICAgICAgICBpZiBoYXNhdHRyKG1vZCwgJ1NraXBUZXN0
Jyk6CisgICAgICAgICAgICBza2lwX2NsYXNzZXMuYWRkKG1vZC5Ta2lwVGVzdCkKKyAgICByZXR1
cm4gdHVwbGUoc2tpcF9jbGFzc2VzKQorCisKK2RlZiBweXRlc3RfcnVudGVzdF9tYWtlcmVwb3J0
KGl0ZW0sIGNhbGwpOgorICAgIGlmIGNhbGwuZXhjaW5mbyBhbmQgY2FsbC5leGNpbmZvLmVycmlz
aW5zdGFuY2UoZ2V0X3NraXBfZXhjZXB0aW9ucygpKToKKyAgICAgICAgIyBsZXQncyBzdWJzdGl0
dXRlIHRoZSBleGNpbmZvIHdpdGggYSBweXRlc3Quc2tpcCBvbmUKKyAgICAgICAgY2FsbDIgPSBj
YWxsLl9fY2xhc3NfXyhsYW1iZGE6CisgICAgICAgICAgICAgICAgICAgIHB5dGVzdC5za2lwKHN0
cihjYWxsLmV4Y2luZm8udmFsdWUpKSwgY2FsbC53aGVuKQorICAgICAgICBjYWxsLmV4Y2luZm8g
PSBjYWxsMi5leGNpbmZvCisKKworQHB5dGVzdC5ob29raW1wbCh0cnlsYXN0PVRydWUpCitkZWYg
cHl0ZXN0X3J1bnRlc3Rfc2V0dXAoaXRlbSk6CisgICAgaWYgaXNfcG90ZW50aWFsX25vc2V0ZXN0
KGl0ZW0pOgorICAgICAgICBpZiBpc2luc3RhbmNlKGl0ZW0ucGFyZW50LCBweXRlc3QuR2VuZXJh
dG9yKToKKyAgICAgICAgICAgIGdlbiA9IGl0ZW0ucGFyZW50CisgICAgICAgICAgICBpZiBub3Qg
aGFzYXR0cihnZW4sICdfbm9zZWdlbnNldHVwJyk6CisgICAgICAgICAgICAgICAgY2FsbF9vcHRp
b25hbChnZW4ub2JqLCAnc2V0dXAnKQorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZ2Vu
LnBhcmVudCwgcHl0ZXN0Lkluc3RhbmNlKToKKyAgICAgICAgICAgICAgICAgICAgY2FsbF9vcHRp
b25hbChnZW4ucGFyZW50Lm9iaiwgJ3NldHVwJykKKyAgICAgICAgICAgICAgICBnZW4uX25vc2Vn
ZW5zZXR1cCA9IFRydWUKKyAgICAgICAgaWYgbm90IGNhbGxfb3B0aW9uYWwoaXRlbS5vYmosICdz
ZXR1cCcpOgorICAgICAgICAgICAgIyBjYWxsIG1vZHVsZSBsZXZlbCBzZXR1cCBpZiB0aGVyZSBp
cyBubyBvYmplY3QgbGV2ZWwgb25lCisgICAgICAgICAgICBjYWxsX29wdGlvbmFsKGl0ZW0ucGFy
ZW50Lm9iaiwgJ3NldHVwJykKKyAgICAgICAgI1hYWCB0aGlzIGltcGxpZXMgd2Ugb25seSBjYWxs
IHRlYXJkb3duIHdoZW4gc2V0dXAgd29ya2VkCisgICAgICAgIGl0ZW0uc2Vzc2lvbi5fc2V0dXBz
dGF0ZS5hZGRmaW5hbGl6ZXIoKGxhbWJkYTogdGVhcmRvd25fbm9zZShpdGVtKSksIGl0ZW0pCisK
K2RlZiB0ZWFyZG93bl9ub3NlKGl0ZW0pOgorICAgIGlmIGlzX3BvdGVudGlhbF9ub3NldGVzdChp
dGVtKToKKyAgICAgICAgaWYgbm90IGNhbGxfb3B0aW9uYWwoaXRlbS5vYmosICd0ZWFyZG93bicp
OgorICAgICAgICAgICAgY2FsbF9vcHRpb25hbChpdGVtLnBhcmVudC5vYmosICd0ZWFyZG93bicp
CisgICAgICAgICNpZiBoYXNhdHRyKGl0ZW0ucGFyZW50LCAnX25vc2VnZW5zZXR1cCcpOgorICAg
ICAgICAjICAgICNjYWxsX29wdGlvbmFsKGl0ZW0uX25vc2VnZW5zZXR1cCwgJ3RlYXJkb3duJykK
KyAgICAgICAgIyAgICBkZWwgaXRlbS5wYXJlbnQuX25vc2VnZW5zZXR1cAorCisKK2RlZiBweXRl
c3RfbWFrZV9jb2xsZWN0X3JlcG9ydChjb2xsZWN0b3IpOgorICAgIGlmIGlzaW5zdGFuY2UoY29s
bGVjdG9yLCBweXRlc3QuR2VuZXJhdG9yKToKKyAgICAgICAgY2FsbF9vcHRpb25hbChjb2xsZWN0
b3Iub2JqLCAnc2V0dXAnKQorCisKK2RlZiBpc19wb3RlbnRpYWxfbm9zZXRlc3QoaXRlbSk6Cisg
ICAgIyBleHRyYSBjaGVjayBuZWVkZWQgc2luY2Ugd2UgZG8gbm90IGRvIG5vc2Ugc3R5bGUgc2V0
dXAvdGVhcmRvd24KKyAgICAjIG9uIGRpcmVjdCB1bml0dGVzdCBzdHlsZSBjbGFzc2VzCisgICAg
cmV0dXJuIGlzaW5zdGFuY2UoaXRlbSwgcHl0ZXN0LkZ1bmN0aW9uKSBhbmQgXAorICAgICAgICBu
b3QgaXNpbnN0YW5jZShpdGVtLCB1bml0dGVzdC5UZXN0Q2FzZUZ1bmN0aW9uKQorCisKK2RlZiBj
YWxsX29wdGlvbmFsKG9iaiwgbmFtZSk6CisgICAgbWV0aG9kID0gZ2V0YXR0cihvYmosIG5hbWUs
IE5vbmUpCisgICAgaXNmaXh0dXJlID0gaGFzYXR0cihtZXRob2QsICJfcHl0ZXN0Zml4dHVyZWZ1
bmN0aW9uIikKKyAgICBpZiBtZXRob2QgaXMgbm90IE5vbmUgYW5kIG5vdCBpc2ZpeHR1cmUgYW5k
IHB5LmJ1aWx0aW4uY2FsbGFibGUobWV0aG9kKToKKyAgICAgICAgIyBJZiB0aGVyZSdzIGFueSBw
cm9ibGVtcyBhbGxvdyB0aGUgZXhjZXB0aW9uIHRvIHJhaXNlIHJhdGhlciB0aGFuCisgICAgICAg
ICMgc2lsZW50bHkgaWdub3JpbmcgdGhlbQorICAgICAgICBtZXRob2QoKQorICAgICAgICByZXR1
cm4gVHJ1ZQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5
dGVzdC9fcHl0ZXN0L3Bhc3RlYmluLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rv
b2xzL3B5dGVzdC9fcHl0ZXN0L3Bhc3RlYmluLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi40ZWM2MmQwMjI4MAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRl
c3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9wYXN0ZWJpbi5weQpAQCAtMCww
ICsxLDkyIEBACisiIiIgc3VibWl0IGZhaWx1cmUgb3IgdGVzdCBzZXNzaW9uIGluZm9ybWF0aW9u
IHRvIGEgcGFzdGViaW4gc2VydmljZS4gIiIiCitpbXBvcnQgcHl0ZXN0CitpbXBvcnQgc3lzCitp
bXBvcnQgdGVtcGZpbGUKKworCitkZWYgcHl0ZXN0X2FkZG9wdGlvbihwYXJzZXIpOgorICAgIGdy
b3VwID0gcGFyc2VyLmdldGdyb3VwKCJ0ZXJtaW5hbCByZXBvcnRpbmciKQorICAgIGdyb3VwLl9h
ZGRvcHRpb24oJy0tcGFzdGViaW4nLCBtZXRhdmFyPSJtb2RlIiwKKyAgICAgICAgYWN0aW9uPSdz
dG9yZScsIGRlc3Q9InBhc3RlYmluIiwgZGVmYXVsdD1Ob25lLAorICAgICAgICBjaG9pY2VzPVsn
ZmFpbGVkJywgJ2FsbCddLAorICAgICAgICBoZWxwPSJzZW5kIGZhaWxlZHxhbGwgaW5mbyB0byBi
cGFzdGUubmV0IHBhc3RlYmluIHNlcnZpY2UuIikKKworQHB5dGVzdC5ob29raW1wbCh0cnlsYXN0
PVRydWUpCitkZWYgcHl0ZXN0X2NvbmZpZ3VyZShjb25maWcpOgorICAgIGltcG9ydCBweQorICAg
IGlmIGNvbmZpZy5vcHRpb24ucGFzdGViaW4gPT0gImFsbCI6CisgICAgICAgIHRyID0gY29uZmln
LnBsdWdpbm1hbmFnZXIuZ2V0cGx1Z2luKCd0ZXJtaW5hbHJlcG9ydGVyJykKKyAgICAgICAgIyBp
ZiBubyB0ZXJtaW5hbCByZXBvcnRlciBwbHVnaW4gaXMgcHJlc2VudCwgbm90aGluZyB3ZSBjYW4g
ZG8gaGVyZTsKKyAgICAgICAgIyB0aGlzIGNhbiBoYXBwZW4gd2hlbiB0aGlzIGZ1bmN0aW9uIGV4
ZWN1dGVzIGluIGEgc2xhdmUgbm9kZQorICAgICAgICAjIHdoZW4gdXNpbmcgcHl0ZXN0LXhkaXN0
LCBmb3IgZXhhbXBsZQorICAgICAgICBpZiB0ciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICMg
cGFzdGViaW4gZmlsZSB3aWxsIGJlIHV0Zi04IGVuY29kZWQgYmluYXJ5IGZpbGUKKyAgICAgICAg
ICAgIGNvbmZpZy5fcGFzdGViaW5maWxlID0gdGVtcGZpbGUuVGVtcG9yYXJ5RmlsZSgndytiJykK
KyAgICAgICAgICAgIG9sZHdyaXRlID0gdHIuX3R3LndyaXRlCisgICAgICAgICAgICBkZWYgdGVl
X3dyaXRlKHMsICoqa3dhcmdzKToKKyAgICAgICAgICAgICAgICBvbGR3cml0ZShzLCAqKmt3YXJn
cykKKyAgICAgICAgICAgICAgICBpZiBweS5idWlsdGluLl9pc3RleHQocyk6CisgICAgICAgICAg
ICAgICAgICAgIHMgPSBzLmVuY29kZSgndXRmLTgnKQorICAgICAgICAgICAgICAgIGNvbmZpZy5f
cGFzdGViaW5maWxlLndyaXRlKHMpCisgICAgICAgICAgICB0ci5fdHcud3JpdGUgPSB0ZWVfd3Jp
dGUKKworZGVmIHB5dGVzdF91bmNvbmZpZ3VyZShjb25maWcpOgorICAgIGlmIGhhc2F0dHIoY29u
ZmlnLCAnX3Bhc3RlYmluZmlsZScpOgorICAgICAgICAjIGdldCB0ZXJtaW5hbCBjb250ZW50cyBh
bmQgZGVsZXRlIGZpbGUKKyAgICAgICAgY29uZmlnLl9wYXN0ZWJpbmZpbGUuc2VlaygwKQorICAg
ICAgICBzZXNzaW9ubG9nID0gY29uZmlnLl9wYXN0ZWJpbmZpbGUucmVhZCgpCisgICAgICAgIGNv
bmZpZy5fcGFzdGViaW5maWxlLmNsb3NlKCkKKyAgICAgICAgZGVsIGNvbmZpZy5fcGFzdGViaW5m
aWxlCisgICAgICAgICMgdW5kbyBvdXIgcGF0Y2hpbmcgaW4gdGhlIHRlcm1pbmFsIHJlcG9ydGVy
CisgICAgICAgIHRyID0gY29uZmlnLnBsdWdpbm1hbmFnZXIuZ2V0cGx1Z2luKCd0ZXJtaW5hbHJl
cG9ydGVyJykKKyAgICAgICAgZGVsIHRyLl90dy5fX2RpY3RfX1snd3JpdGUnXQorICAgICAgICAj
IHdyaXRlIHN1bW1hcnkKKyAgICAgICAgdHIud3JpdGVfc2VwKCI9IiwgIlNlbmRpbmcgaW5mb3Jt
YXRpb24gdG8gUGFzdGUgU2VydmljZSIpCisgICAgICAgIHBhc3RlYmludXJsID0gY3JlYXRlX25l
d19wYXN0ZShzZXNzaW9ubG9nKQorICAgICAgICB0ci53cml0ZV9saW5lKCJwYXN0ZWJpbiBzZXNz
aW9uLWxvZzogJXNcbiIgJSBwYXN0ZWJpbnVybCkKKworZGVmIGNyZWF0ZV9uZXdfcGFzdGUoY29u
dGVudHMpOgorICAgICIiIgorICAgIENyZWF0ZXMgYSBuZXcgcGFzdGUgdXNpbmcgYnBhc3RlLm5l
dCBzZXJ2aWNlLgorCisgICAgOmNvbnRlbnRzOiBwYXN0ZSBjb250ZW50cyBhcyB1dGYtOCBlbmNv
ZGVkIGJ5dGVzCisgICAgOnJldHVybnM6IHVybCB0byB0aGUgcGFzdGVkIGNvbnRlbnRzCisgICAg
IiIiCisgICAgaW1wb3J0IHJlCisgICAgaWYgc3lzLnZlcnNpb25faW5mbyA8ICgzLCAwKToKKyAg
ICAgICAgZnJvbSB1cmxsaWIgaW1wb3J0IHVybG9wZW4sIHVybGVuY29kZQorICAgIGVsc2U6Cisg
ICAgICAgIGZyb20gdXJsbGliLnJlcXVlc3QgaW1wb3J0IHVybG9wZW4KKyAgICAgICAgZnJvbSB1
cmxsaWIucGFyc2UgaW1wb3J0IHVybGVuY29kZQorCisgICAgcGFyYW1zID0geworICAgICAgICAn
Y29kZSc6IGNvbnRlbnRzLAorICAgICAgICAnbGV4ZXInOiAncHl0aG9uMycgaWYgc3lzLnZlcnNp
b25faW5mb1swXSA9PSAzIGVsc2UgJ3B5dGhvbicsCisgICAgICAgICdleHBpcnknOiAnMXdlZWsn
LAorICAgIH0KKyAgICB1cmwgPSAnaHR0cHM6Ly9icGFzdGUubmV0JworICAgIHJlc3BvbnNlID0g
dXJsb3Blbih1cmwsIGRhdGE9dXJsZW5jb2RlKHBhcmFtcykuZW5jb2RlKCdhc2NpaScpKS5yZWFk
KCkKKyAgICBtID0gcmUuc2VhcmNoKHInaHJlZj0iL3Jhdy8oXHcrKSInLCByZXNwb25zZS5kZWNv
ZGUoJ3V0Zi04JykpCisgICAgaWYgbToKKyAgICAgICAgcmV0dXJuICclcy9zaG93LyVzJyAlICh1
cmwsIG0uZ3JvdXAoMSkpCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuICdiYWQgcmVzcG9uc2U6
ICcgKyByZXNwb25zZQorCitkZWYgcHl0ZXN0X3Rlcm1pbmFsX3N1bW1hcnkodGVybWluYWxyZXBv
cnRlcik6CisgICAgaW1wb3J0IF9weXRlc3QuY29uZmlnCisgICAgaWYgdGVybWluYWxyZXBvcnRl
ci5jb25maWcub3B0aW9uLnBhc3RlYmluICE9ICJmYWlsZWQiOgorICAgICAgICByZXR1cm4KKyAg
ICB0ciA9IHRlcm1pbmFscmVwb3J0ZXIKKyAgICBpZiAnZmFpbGVkJyBpbiB0ci5zdGF0czoKKyAg
ICAgICAgdGVybWluYWxyZXBvcnRlci53cml0ZV9zZXAoIj0iLCAiU2VuZGluZyBpbmZvcm1hdGlv
biB0byBQYXN0ZSBTZXJ2aWNlIikKKyAgICAgICAgZm9yIHJlcCBpbiB0ZXJtaW5hbHJlcG9ydGVy
LnN0YXRzLmdldCgnZmFpbGVkJyk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAg
bXNnID0gcmVwLmxvbmdyZXByLnJlcHJ0cmFjZWJhY2sucmVwcmVudHJpZXNbLTFdLnJlcHJmaWxl
bG9jCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAg
bXNnID0gdHIuX2dldGZhaWx1cmVoZWFkbGluZShyZXApCisgICAgICAgICAgICB0dyA9IF9weXRl
c3QuY29uZmlnLmNyZWF0ZV90ZXJtaW5hbF93cml0ZXIodGVybWluYWxyZXBvcnRlci5jb25maWcs
IHN0cmluZ2lvPVRydWUpCisgICAgICAgICAgICByZXAudG90ZXJtaW5hbCh0dykKKyAgICAgICAg
ICAgIHMgPSB0dy5zdHJpbmdpby5nZXR2YWx1ZSgpCisgICAgICAgICAgICBhc3NlcnQgbGVuKHMp
CisgICAgICAgICAgICBwYXN0ZWJpbnVybCA9IGNyZWF0ZV9uZXdfcGFzdGUocykKKyAgICAgICAg
ICAgIHRyLndyaXRlX2xpbmUoIiVzIC0tPiAlcyIgJShtc2csIHBhc3RlYmludXJsKSkKZGlmZiAt
LWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9w
ZGIucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3Qv
cGRiLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44NGM5MjBkMTcy
YwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9w
eXRlc3QvX3B5dGVzdC9wZGIucHkKQEAgLTAsMCArMSwxMDkgQEAKKyIiIiBpbnRlcmFjdGl2ZSBk
ZWJ1Z2dpbmcgd2l0aCBQREIsIHRoZSBQeXRob24gRGVidWdnZXIuICIiIgorZnJvbSBfX2Z1dHVy
ZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKK2ltcG9ydCBwZGIKK2ltcG9ydCBzeXMKKworaW1w
b3J0IHB5dGVzdAorCisKK2RlZiBweXRlc3RfYWRkb3B0aW9uKHBhcnNlcik6CisgICAgZ3JvdXAg
PSBwYXJzZXIuZ2V0Z3JvdXAoImdlbmVyYWwiKQorICAgIGdyb3VwLl9hZGRvcHRpb24oJy0tcGRi
JywKKyAgICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9InVzZXBkYiIsIGRl
ZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICBoZWxwPSJzdGFydCB0aGUgaW50ZXJhY3RpdmUg
UHl0aG9uIGRlYnVnZ2VyIG9uIGVycm9ycy4iKQorCitkZWYgcHl0ZXN0X25hbWVzcGFjZSgpOgor
ICAgIHJldHVybiB7J3NldF90cmFjZSc6IHB5dGVzdFBEQigpLnNldF90cmFjZX0KKworZGVmIHB5
dGVzdF9jb25maWd1cmUoY29uZmlnKToKKyAgICBpZiBjb25maWcuZ2V0dmFsdWUoInVzZXBkYiIp
OgorICAgICAgICBjb25maWcucGx1Z2lubWFuYWdlci5yZWdpc3RlcihQZGJJbnZva2UoKSwgJ3Bk
Ymludm9rZScpCisKKyAgICBvbGQgPSAocGRiLnNldF90cmFjZSwgcHl0ZXN0UERCLl9wbHVnaW5t
YW5hZ2VyKQorICAgIGRlZiBmaW4oKToKKyAgICAgICAgcGRiLnNldF90cmFjZSwgcHl0ZXN0UERC
Ll9wbHVnaW5tYW5hZ2VyID0gb2xkCisgICAgICAgIHB5dGVzdFBEQi5fY29uZmlnID0gTm9uZQor
ICAgIHBkYi5zZXRfdHJhY2UgPSBweXRlc3Quc2V0X3RyYWNlCisgICAgcHl0ZXN0UERCLl9wbHVn
aW5tYW5hZ2VyID0gY29uZmlnLnBsdWdpbm1hbmFnZXIKKyAgICBweXRlc3RQREIuX2NvbmZpZyA9
IGNvbmZpZworICAgIGNvbmZpZy5fY2xlYW51cC5hcHBlbmQoZmluKQorCitjbGFzcyBweXRlc3RQ
REI6CisgICAgIiIiIFBzZXVkbyBQREIgdGhhdCBkZWZlcnMgdG8gdGhlIHJlYWwgcGRiLiAiIiIK
KyAgICBfcGx1Z2lubWFuYWdlciA9IE5vbmUKKyAgICBfY29uZmlnID0gTm9uZQorCisgICAgZGVm
IHNldF90cmFjZShzZWxmKToKKyAgICAgICAgIiIiIGludm9rZSBQREIgc2V0X3RyYWNlIGRlYnVn
Z2luZywgZHJvcHBpbmcgYW55IElPIGNhcHR1cmluZy4gIiIiCisgICAgICAgIGltcG9ydCBfcHl0
ZXN0LmNvbmZpZworICAgICAgICBmcmFtZSA9IHN5cy5fZ2V0ZnJhbWUoKS5mX2JhY2sKKyAgICAg
ICAgaWYgc2VsZi5fcGx1Z2lubWFuYWdlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGNhcG1h
biA9IHNlbGYuX3BsdWdpbm1hbmFnZXIuZ2V0cGx1Z2luKCJjYXB0dXJlbWFuYWdlciIpCisgICAg
ICAgICAgICBpZiBjYXBtYW46CisgICAgICAgICAgICAgICAgY2FwbWFuLnN1c3BlbmRjYXB0dXJl
KGluXz1UcnVlKQorICAgICAgICAgICAgdHcgPSBfcHl0ZXN0LmNvbmZpZy5jcmVhdGVfdGVybWlu
YWxfd3JpdGVyKHNlbGYuX2NvbmZpZykKKyAgICAgICAgICAgIHR3LmxpbmUoKQorICAgICAgICAg
ICAgdHcuc2VwKCI+IiwgIlBEQiBzZXRfdHJhY2UgKElPLWNhcHR1cmluZyB0dXJuZWQgb2ZmKSIp
CisgICAgICAgICAgICBzZWxmLl9wbHVnaW5tYW5hZ2VyLmhvb2sucHl0ZXN0X2VudGVyX3BkYihj
b25maWc9c2VsZi5fY29uZmlnKQorICAgICAgICBwZGIuUGRiKCkuc2V0X3RyYWNlKGZyYW1lKQor
CisKK2NsYXNzIFBkYkludm9rZToKKyAgICBkZWYgcHl0ZXN0X2V4Y2VwdGlvbl9pbnRlcmFjdChz
ZWxmLCBub2RlLCBjYWxsLCByZXBvcnQpOgorICAgICAgICBjYXBtYW4gPSBub2RlLmNvbmZpZy5w
bHVnaW5tYW5hZ2VyLmdldHBsdWdpbigiY2FwdHVyZW1hbmFnZXIiKQorICAgICAgICBpZiBjYXBt
YW46CisgICAgICAgICAgICBvdXQsIGVyciA9IGNhcG1hbi5zdXNwZW5kY2FwdHVyZShpbl89VHJ1
ZSkKKyAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUob3V0KQorICAgICAgICAgICAgc3lzLnN0
ZG91dC53cml0ZShlcnIpCisgICAgICAgIF9lbnRlcl9wZGIobm9kZSwgY2FsbC5leGNpbmZvLCBy
ZXBvcnQpCisKKyAgICBkZWYgcHl0ZXN0X2ludGVybmFsZXJyb3Ioc2VsZiwgZXhjcmVwciwgZXhj
aW5mbyk6CisgICAgICAgIGZvciBsaW5lIGluIHN0cihleGNyZXByKS5zcGxpdCgiXG4iKToKKyAg
ICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIklOVEVSTkFMRVJST1I+ICVzXG4iICVsaW5lKQor
ICAgICAgICAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCisgICAgICAgIHRiID0gX3Bvc3Rtb3J0ZW1f
dHJhY2ViYWNrKGV4Y2luZm8pCisgICAgICAgIHBvc3RfbW9ydGVtKHRiKQorCisKK2RlZiBfZW50
ZXJfcGRiKG5vZGUsIGV4Y2luZm8sIHJlcCk6CisgICAgIyBYWFggd2UgcmUtdXNlIHRoZSBUZXJt
aW5hbFJlcG9ydGVyJ3MgdGVybWluYWx3cml0ZXIKKyAgICAjIGJlY2F1c2UgdGhpcyBzZWVtcyB0
byBhdm9pZCBzb21lIGVuY29kaW5nIHJlbGF0ZWQgdHJvdWJsZXMKKyAgICAjIGZvciBub3QgY29t
cGxldGVseSBjbGVhciByZWFzb25zLgorICAgIHR3ID0gbm9kZS5jb25maWcucGx1Z2lubWFuYWdl
ci5nZXRwbHVnaW4oInRlcm1pbmFscmVwb3J0ZXIiKS5fdHcKKyAgICB0dy5saW5lKCkKKyAgICB0
dy5zZXAoIj4iLCAidHJhY2ViYWNrIikKKyAgICByZXAudG90ZXJtaW5hbCh0dykKKyAgICB0dy5z
ZXAoIj4iLCAiZW50ZXJpbmcgUERCIikKKyAgICB0YiA9IF9wb3N0bW9ydGVtX3RyYWNlYmFjayhl
eGNpbmZvKQorICAgIHBvc3RfbW9ydGVtKHRiKQorICAgIHJlcC5fcGRic2hvd24gPSBUcnVlCisg
ICAgcmV0dXJuIHJlcAorCisKK2RlZiBfcG9zdG1vcnRlbV90cmFjZWJhY2soZXhjaW5mbyk6Cisg
ICAgIyBBIGRvY3Rlc3QuVW5leHBlY3RlZEV4Y2VwdGlvbiBpcyBub3QgdXNlZnVsIGZvciBwb3N0
X21vcnRlbS4KKyAgICAjIFVzZSB0aGUgdW5kZXJseWluZyBleGNlcHRpb24gaW5zdGVhZDoKKyAg
ICBmcm9tIGRvY3Rlc3QgaW1wb3J0IFVuZXhwZWN0ZWRFeGNlcHRpb24KKyAgICBpZiBpc2luc3Rh
bmNlKGV4Y2luZm8udmFsdWUsIFVuZXhwZWN0ZWRFeGNlcHRpb24pOgorICAgICAgICByZXR1cm4g
ZXhjaW5mby52YWx1ZS5leGNfaW5mb1syXQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBleGNp
bmZvLl9leGNpbmZvWzJdCisKKworZGVmIF9maW5kX2xhc3Rfbm9uX2hpZGRlbl9mcmFtZShzdGFj
ayk6CisgICAgaSA9IG1heCgwLCBsZW4oc3RhY2spIC0gMSkKKyAgICB3aGlsZSBpIGFuZCBzdGFj
a1tpXVswXS5mX2xvY2Fscy5nZXQoIl9fdHJhY2ViYWNraGlkZV9fIiwgRmFsc2UpOgorICAgICAg
ICBpIC09IDEKKyAgICByZXR1cm4gaQorCisKK2RlZiBwb3N0X21vcnRlbSh0KToKKyAgICBjbGFz
cyBQZGIocGRiLlBkYik6CisgICAgICAgIGRlZiBnZXRfc3RhY2soc2VsZiwgZiwgdCk6CisgICAg
ICAgICAgICBzdGFjaywgaSA9IHBkYi5QZGIuZ2V0X3N0YWNrKHNlbGYsIGYsIHQpCisgICAgICAg
ICAgICBpZiBmIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgaSA9IF9maW5kX2xhc3Rfbm9uX2hp
ZGRlbl9mcmFtZShzdGFjaykKKyAgICAgICAgICAgIHJldHVybiBzdGFjaywgaQorICAgIHAgPSBQ
ZGIoKQorICAgIHAucmVzZXQoKQorICAgIHAuaW50ZXJhY3Rpb24oTm9uZSwgdCkKZGlmZiAtLWdp
dCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9weXRl
c3Rlci5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVz
dC9weXRlc3Rlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZmFl
ZDdmNTgxYzkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mv
dG9vbHMvcHl0ZXN0L19weXRlc3QvcHl0ZXN0ZXIucHkKQEAgLTAsMCArMSwxMTEwIEBACisiIiIg
KGRpc2FibGVkIGJ5IGRlZmF1bHQpIHN1cHBvcnQgZm9yIHRlc3RpbmcgcHl0ZXN0IGFuZCBweXRl
c3QgcGx1Z2lucy4gIiIiCitpbXBvcnQgY29kZWNzCitpbXBvcnQgZ2MKK2ltcG9ydCBvcworaW1w
b3J0IHBsYXRmb3JtCitpbXBvcnQgcmUKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCitp
bXBvcnQgdGltZQoraW1wb3J0IHRyYWNlYmFjaworZnJvbSBmbm1hdGNoIGltcG9ydCBmbm1hdGNo
CisKK2Zyb20gcHkuYnVpbHRpbiBpbXBvcnQgcHJpbnRfCisKK2Zyb20gX3B5dGVzdC5fY29kZSBp
bXBvcnQgU291cmNlCitpbXBvcnQgcHkKK2ltcG9ydCBweXRlc3QKK2Zyb20gX3B5dGVzdC5tYWlu
IGltcG9ydCBTZXNzaW9uLCBFWElUX09LCisKKworZGVmIHB5dGVzdF9hZGRvcHRpb24ocGFyc2Vy
KToKKyAgICAjIGdyb3VwID0gcGFyc2VyLmdldGdyb3VwKCJweXRlc3RlciIsICJweXRlc3RlciAo
c2VsZi10ZXN0cykgb3B0aW9ucyIpCisgICAgcGFyc2VyLmFkZG9wdGlvbignLS1sc29mJywKKyAg
ICAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0ibHNvZiIsIGRlZmF1bHQ9RmFsc2Us
CisgICAgICAgICAgIGhlbHA9KCJydW4gRkQgY2hlY2tzIGlmIGxzb2YgaXMgYXZhaWxhYmxlIikp
CisKKyAgICBwYXJzZXIuYWRkb3B0aW9uKCctLXJ1bnB5dGVzdCcsIGRlZmF1bHQ9ImlucHJvY2Vz
cyIsIGRlc3Q9InJ1bnB5dGVzdCIsCisgICAgICAgICAgIGNob2ljZXM9KCJpbnByb2Nlc3MiLCAi
c3VicHJvY2VzcyIsICksCisgICAgICAgICAgIGhlbHA9KCJydW4gcHl0ZXN0IHN1YiBydW5zIGlu
IHRlc3RzIHVzaW5nIGFuICdpbnByb2Nlc3MnICIKKyAgICAgICAgICAgICAgICAgIm9yICdzdWJw
cm9jZXNzJyAocHl0aG9uIC1tIG1haW4pIG1ldGhvZCIpKQorCisKK2RlZiBweXRlc3RfY29uZmln
dXJlKGNvbmZpZyk6CisgICAgIyBUaGlzIG1pZ2h0IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcy4g
T25seSB0YWtlIHRoZSBmaXJzdC4KKyAgICBnbG9iYWwgX3B5dGVzdF9mdWxscGF0aAorICAgIHRy
eToKKyAgICAgICAgX3B5dGVzdF9mdWxscGF0aAorICAgIGV4Y2VwdCBOYW1lRXJyb3I6CisgICAg
ICAgIF9weXRlc3RfZnVsbHBhdGggPSBvcy5wYXRoLmFic3BhdGgocHl0ZXN0Ll9fZmlsZV9fLnJz
dHJpcCgib2MiKSkKKyAgICAgICAgX3B5dGVzdF9mdWxscGF0aCA9IF9weXRlc3RfZnVsbHBhdGgu
cmVwbGFjZSgiJHB5LmNsYXNzIiwgIi5weSIpCisKKyAgICBpZiBjb25maWcuZ2V0dmFsdWUoImxz
b2YiKToKKyAgICAgICAgY2hlY2tlciA9IExzb2ZGZExlYWtDaGVja2VyKCkKKyAgICAgICAgaWYg
Y2hlY2tlci5tYXRjaGluZ19wbGF0Zm9ybSgpOgorICAgICAgICAgICAgY29uZmlnLnBsdWdpbm1h
bmFnZXIucmVnaXN0ZXIoY2hlY2tlcikKKworCitjbGFzcyBMc29mRmRMZWFrQ2hlY2tlcihvYmpl
Y3QpOgorICAgIGRlZiBnZXRfb3Blbl9maWxlcyhzZWxmKToKKyAgICAgICAgb3V0ID0gc2VsZi5f
ZXhlY19sc29mKCkKKyAgICAgICAgb3Blbl9maWxlcyA9IHNlbGYuX3BhcnNlX2xzb2Zfb3V0cHV0
KG91dCkKKyAgICAgICAgcmV0dXJuIG9wZW5fZmlsZXMKKworICAgIGRlZiBfZXhlY19sc29mKHNl
bGYpOgorICAgICAgICBwaWQgPSBvcy5nZXRwaWQoKQorICAgICAgICByZXR1cm4gcHkucHJvY2Vz
cy5jbWRleGVjKCJsc29mIC1GZm4wIC1wICVkIiAlIHBpZCkKKworICAgIGRlZiBfcGFyc2VfbHNv
Zl9vdXRwdXQoc2VsZiwgb3V0KToKKyAgICAgICAgZGVmIGlzb3BlbihsaW5lKToKKyAgICAgICAg
ICAgIHJldHVybiBsaW5lLnN0YXJ0c3dpdGgoJ2YnKSBhbmQgKCJkZWxldGVkIiBub3QgaW4gbGlu
ZSBhbmQKKyAgICAgICAgICAgICAgICAnbWVtJyBub3QgaW4gbGluZSBhbmQgInR4dCIgbm90IGlu
IGxpbmUgYW5kICdjd2QnIG5vdCBpbiBsaW5lKQorCisgICAgICAgIG9wZW5fZmlsZXMgPSBbXQor
CisgICAgICAgIGZvciBsaW5lIGluIG91dC5zcGxpdCgiXG4iKToKKyAgICAgICAgICAgIGlmIGlz
b3BlbihsaW5lKToKKyAgICAgICAgICAgICAgICBmaWVsZHMgPSBsaW5lLnNwbGl0KCdcMCcpCisg
ICAgICAgICAgICAgICAgZmQgPSBmaWVsZHNbMF1bMTpdCisgICAgICAgICAgICAgICAgZmlsZW5h
bWUgPSBmaWVsZHNbMV1bMTpdCisgICAgICAgICAgICAgICAgaWYgZmlsZW5hbWUuc3RhcnRzd2l0
aCgnLycpOgorICAgICAgICAgICAgICAgICAgICBvcGVuX2ZpbGVzLmFwcGVuZCgoZmQsIGZpbGVu
YW1lKSkKKworICAgICAgICByZXR1cm4gb3Blbl9maWxlcworCisgICAgZGVmIG1hdGNoaW5nX3Bs
YXRmb3JtKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBweS5wcm9jZXNzLmNtZGV4
ZWMoImxzb2YgLXYiKQorICAgICAgICBleGNlcHQgKHB5LnByb2Nlc3MuY21kZXhlYy5FcnJvciwg
VW5pY29kZURlY29kZUVycm9yKToKKyAgICAgICAgICAgICMgY21kZXhlYyBtYXkgcmFpc2UgVW5p
Y29kZURlY29kZUVycm9yIG9uIFdpbmRvd3Mgc3lzdGVtcworICAgICAgICAgICAgIyB3aXRoIGxv
Y2FsZSBvdGhlciB0aGFuIGVuZ2xpc2g6CisgICAgICAgICAgICAjIGh0dHBzOi8vYml0YnVja2V0
Lm9yZy9weXRlc3QtZGV2L3B5L2lzc3Vlcy82NgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgQHB5dGVzdC5ob29r
aW1wbChob29rd3JhcHBlcj1UcnVlLCB0cnlmaXJzdD1UcnVlKQorICAgIGRlZiBweXRlc3RfcnVu
dGVzdF9pdGVtKHNlbGYsIGl0ZW0pOgorICAgICAgICBsaW5lczEgPSBzZWxmLmdldF9vcGVuX2Zp
bGVzKCkKKyAgICAgICAgeWllbGQKKyAgICAgICAgaWYgaGFzYXR0cihzeXMsICJweXB5X3ZlcnNp
b25faW5mbyIpOgorICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIGxpbmVzMiA9IHNl
bGYuZ2V0X29wZW5fZmlsZXMoKQorCisgICAgICAgIG5ld19mZHMgPSBzZXQoW3RbMF0gZm9yIHQg
aW4gbGluZXMyXSkgLSBzZXQoW3RbMF0gZm9yIHQgaW4gbGluZXMxXSkKKyAgICAgICAgbGVha2Vk
X2ZpbGVzID0gW3QgZm9yIHQgaW4gbGluZXMyIGlmIHRbMF0gaW4gbmV3X2Zkc10KKyAgICAgICAg
aWYgbGVha2VkX2ZpbGVzOgorICAgICAgICAgICAgZXJyb3IgPSBbXQorICAgICAgICAgICAgZXJy
b3IuYXBwZW5kKCIqKioqKiAlcyBGRCBsZWFrYWdlIGRldGVjdGVkIiAlIGxlbihsZWFrZWRfZmls
ZXMpKQorICAgICAgICAgICAgZXJyb3IuZXh0ZW5kKFtzdHIoZikgZm9yIGYgaW4gbGVha2VkX2Zp
bGVzXSkKKyAgICAgICAgICAgIGVycm9yLmFwcGVuZCgiKioqIEJlZm9yZToiKQorICAgICAgICAg
ICAgZXJyb3IuZXh0ZW5kKFtzdHIoZikgZm9yIGYgaW4gbGluZXMxXSkKKyAgICAgICAgICAgIGVy
cm9yLmFwcGVuZCgiKioqIEFmdGVyOiIpCisgICAgICAgICAgICBlcnJvci5leHRlbmQoW3N0cihm
KSBmb3IgZiBpbiBsaW5lczJdKQorICAgICAgICAgICAgZXJyb3IuYXBwZW5kKGVycm9yWzBdKQor
ICAgICAgICAgICAgZXJyb3IuYXBwZW5kKCIqKiogZnVuY3Rpb24gJXM6JXM6ICVzICIgJSBpdGVt
LmxvY2F0aW9uKQorICAgICAgICAgICAgcHl0ZXN0LmZhaWwoIlxuIi5qb2luKGVycm9yKSwgcHl0
cmFjZT1GYWxzZSkKKworCisjIFhYWCBjb3BpZWQgZnJvbSBleGVjbmV0J3MgY29uZnRlc3QucHkg
LSBuZWVkcyB0byBiZSBtZXJnZWQKK3dpbnB5bWFwID0geworICAgICdweXRob24yLjcnOiByJ0M6
XFB5dGhvbjI3XHB5dGhvbi5leGUnLAorICAgICdweXRob24yLjYnOiByJ0M6XFB5dGhvbjI2XHB5
dGhvbi5leGUnLAorICAgICdweXRob24zLjEnOiByJ0M6XFB5dGhvbjMxXHB5dGhvbi5leGUnLAor
ICAgICdweXRob24zLjInOiByJ0M6XFB5dGhvbjMyXHB5dGhvbi5leGUnLAorICAgICdweXRob24z
LjMnOiByJ0M6XFB5dGhvbjMzXHB5dGhvbi5leGUnLAorICAgICdweXRob24zLjQnOiByJ0M6XFB5
dGhvbjM0XHB5dGhvbi5leGUnLAorICAgICdweXRob24zLjUnOiByJ0M6XFB5dGhvbjM1XHB5dGhv
bi5leGUnLAorfQorCitkZWYgZ2V0ZXhlY3V0YWJsZShuYW1lLCBjYWNoZT17fSk6CisgICAgdHJ5
OgorICAgICAgICByZXR1cm4gY2FjaGVbbmFtZV0KKyAgICBleGNlcHQgS2V5RXJyb3I6CisgICAg
ICAgIGV4ZWN1dGFibGUgPSBweS5wYXRoLmxvY2FsLnN5c2ZpbmQobmFtZSkKKyAgICAgICAgaWYg
ZXhlY3V0YWJsZToKKyAgICAgICAgICAgIGlmIG5hbWUgPT0gImp5dGhvbiI6CisgICAgICAgICAg
ICAgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICAgICAgICAgICAgICBwb3BlbiA9IHN1YnByb2Nl
c3MuUG9wZW4oW3N0cihleGVjdXRhYmxlKSwgIi0tdmVyc2lvbiJdLAorICAgICAgICAgICAgICAg
ICAgICB1bml2ZXJzYWxfbmV3bGluZXM9VHJ1ZSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAg
ICAgICAgICAgICAgICBvdXQsIGVyciA9IHBvcGVuLmNvbW11bmljYXRlKCkKKyAgICAgICAgICAg
ICAgICBpZiBub3QgZXJyIG9yICIyLjUiIG5vdCBpbiBlcnI6CisgICAgICAgICAgICAgICAgICAg
IGV4ZWN1dGFibGUgPSBOb25lCisgICAgICAgICAgICAgICAgaWYgIjIuNS4yIiBpbiBlcnI6Cisg
ICAgICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUgPSBOb25lICMgaHR0cDovL2J1Z3Muanl0aG9u
Lm9yZy9pc3N1ZTE3OTAKKyAgICAgICAgY2FjaGVbbmFtZV0gPSBleGVjdXRhYmxlCisgICAgICAg
IHJldHVybiBleGVjdXRhYmxlCisKK0BweXRlc3QuZml4dHVyZShwYXJhbXM9WydweXRob24yLjYn
LCAncHl0aG9uMi43JywgJ3B5dGhvbjMuMycsICJweXRob24zLjQiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgJ3B5cHknLCAncHlweTMnXSkKK2RlZiBhbnlweXRob24ocmVxdWVzdCk6CisgICAg
bmFtZSA9IHJlcXVlc3QucGFyYW0KKyAgICBleGVjdXRhYmxlID0gZ2V0ZXhlY3V0YWJsZShuYW1l
KQorICAgIGlmIGV4ZWN1dGFibGUgaXMgTm9uZToKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09
ICJ3aW4zMiI6CisgICAgICAgICAgICBleGVjdXRhYmxlID0gd2lucHltYXAuZ2V0KG5hbWUsIE5v
bmUpCisgICAgICAgICAgICBpZiBleGVjdXRhYmxlOgorICAgICAgICAgICAgICAgIGV4ZWN1dGFi
bGUgPSBweS5wYXRoLmxvY2FsKGV4ZWN1dGFibGUpCisgICAgICAgICAgICAgICAgaWYgZXhlY3V0
YWJsZS5jaGVjaygpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhlY3V0YWJsZQorICAg
ICAgICBweXRlc3Quc2tpcCgibm8gc3VpdGFibGUgJXMgZm91bmQiICUgKG5hbWUsKSkKKyAgICBy
ZXR1cm4gZXhlY3V0YWJsZQorCisjIHVzZWQgYXQgbGVhc3QgYnkgcHl0ZXN0LXhkaXN0IHBsdWdp
bgorQHB5dGVzdC5maXh0dXJlCitkZWYgX3B5dGVzdChyZXF1ZXN0KToKKyAgICAiIiIgUmV0dXJu
IGEgaGVscGVyIHdoaWNoIG9mZmVycyBhIGdldGhvb2tyZWNvcmRlcihob29rKQorICAgIG1ldGhv
ZCB3aGljaCByZXR1cm5zIGEgSG9va1JlY29yZGVyIGluc3RhbmNlIHdoaWNoIGhlbHBzCisgICAg
dG8gbWFrZSBhc3NlcnRpb25zIGFib3V0IGNhbGxlZCBob29rcy4KKyAgICAiIiIKKyAgICByZXR1
cm4gUHl0ZXN0QXJnKHJlcXVlc3QpCisKK2NsYXNzIFB5dGVzdEFyZzoKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgcmVxdWVzdCk6CisgICAgICAgIHNlbGYucmVxdWVzdCA9IHJlcXVlc3QKKworICAg
IGRlZiBnZXRob29rcmVjb3JkZXIoc2VsZiwgaG9vayk6CisgICAgICAgIGhvb2tyZWNvcmRlciA9
IEhvb2tSZWNvcmRlcihob29rLl9wbSkKKyAgICAgICAgc2VsZi5yZXF1ZXN0LmFkZGZpbmFsaXpl
cihob29rcmVjb3JkZXIuZmluaXNoX3JlY29yZGluZykKKyAgICAgICAgcmV0dXJuIGhvb2tyZWNv
cmRlcgorCisKK2RlZiBnZXRfcHVibGljX25hbWVzKGwpOgorICAgICIiIk9ubHkgcmV0dXJuIG5h
bWVzIGZyb20gaXRlcmF0b3IgbCB3aXRob3V0IGEgbGVhZGluZyB1bmRlcnNjb3JlLiIiIgorICAg
IHJldHVybiBbeCBmb3IgeCBpbiBsIGlmIHhbMF0gIT0gIl8iXQorCisKK2NsYXNzIFBhcnNlZENh
bGw6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGt3YXJncyk6CisgICAgICAgIHNlbGYu
X19kaWN0X18udXBkYXRlKGt3YXJncykKKyAgICAgICAgc2VsZi5fbmFtZSA9IG5hbWUKKworICAg
IGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgZCA9IHNlbGYuX19kaWN0X18uY29weSgpCisg
ICAgICAgIGRlbCBkWydfbmFtZSddCisgICAgICAgIHJldHVybiAiPFBhcnNlZENhbGwgJXIoKiol
cik+IiAlKHNlbGYuX25hbWUsIGQpCisKKworY2xhc3MgSG9va1JlY29yZGVyOgorICAgICIiIlJl
Y29yZCBhbGwgaG9va3MgY2FsbGVkIGluIGEgcGx1Z2luIG1hbmFnZXIuCisKKyAgICBUaGlzIHdy
YXBzIGFsbCB0aGUgaG9vayBjYWxscyBpbiB0aGUgcGx1Z2luIG1hbmFnZXIsIHJlY29yZGluZwor
ICAgIGVhY2ggY2FsbCBiZWZvcmUgcHJvcGFnYXRpbmcgdGhlIG5vcm1hbCBjYWxscy4KKworICAg
ICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBsdWdpbm1hbmFnZXIpOgorICAgICAgICBz
ZWxmLl9wbHVnaW5tYW5hZ2VyID0gcGx1Z2lubWFuYWdlcgorICAgICAgICBzZWxmLmNhbGxzID0g
W10KKworICAgICAgICBkZWYgYmVmb3JlKGhvb2tfbmFtZSwgaG9va19pbXBscywga3dhcmdzKToK
KyAgICAgICAgICAgIHNlbGYuY2FsbHMuYXBwZW5kKFBhcnNlZENhbGwoaG9va19uYW1lLCBrd2Fy
Z3MpKQorCisgICAgICAgIGRlZiBhZnRlcihvdXRjb21lLCBob29rX25hbWUsIGhvb2tfaW1wbHMs
IGt3YXJncyk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc2VsZi5fdW5kb193cmFwcGlu
ZyA9IHBsdWdpbm1hbmFnZXIuYWRkX2hvb2tjYWxsX21vbml0b3JpbmcoYmVmb3JlLCBhZnRlcikK
KworICAgIGRlZiBmaW5pc2hfcmVjb3JkaW5nKHNlbGYpOgorICAgICAgICBzZWxmLl91bmRvX3dy
YXBwaW5nKCkKKworICAgIGRlZiBnZXRjYWxscyhzZWxmLCBuYW1lcyk6CisgICAgICAgIGlmIGlz
aW5zdGFuY2UobmFtZXMsIHN0cik6CisgICAgICAgICAgICBuYW1lcyA9IG5hbWVzLnNwbGl0KCkK
KyAgICAgICAgcmV0dXJuIFtjYWxsIGZvciBjYWxsIGluIHNlbGYuY2FsbHMgaWYgY2FsbC5fbmFt
ZSBpbiBuYW1lc10KKworICAgIGRlZiBhc3NlcnRfY29udGFpbnMoc2VsZiwgZW50cmllcyk6Cisg
ICAgICAgIF9fdHJhY2ViYWNraGlkZV9fID0gVHJ1ZQorICAgICAgICBpID0gMAorICAgICAgICBl
bnRyaWVzID0gbGlzdChlbnRyaWVzKQorICAgICAgICBiYWNrbG9jYWxzID0gc3lzLl9nZXRmcmFt
ZSgxKS5mX2xvY2FscworICAgICAgICB3aGlsZSBlbnRyaWVzOgorICAgICAgICAgICAgbmFtZSwg
Y2hlY2sgPSBlbnRyaWVzLnBvcCgwKQorICAgICAgICAgICAgZm9yIGluZCwgY2FsbCBpbiBlbnVt
ZXJhdGUoc2VsZi5jYWxsc1tpOl0pOgorICAgICAgICAgICAgICAgIGlmIGNhbGwuX25hbWUgPT0g
bmFtZToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRfKCJOQU1FTUFUQ0giLCBuYW1lLCBjYWxs
KQorICAgICAgICAgICAgICAgICAgICBpZiBldmFsKGNoZWNrLCBiYWNrbG9jYWxzLCBjYWxsLl9f
ZGljdF9fKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50XygiQ0hFQ0tFUk1BVENIIiwg
cmVwcihjaGVjayksICItPiIsIGNhbGwpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICAgICAgICAgICAgICBwcmludF8oIk5PQ0hFQ0tFUk1BVENIIiwgcmVwcihjaGVjayks
ICItIiwgY2FsbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAg
ICAgICAgICAgIGkgKz0gaW5kICsgMQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAg
ICAgICAgICAgIHByaW50XygiTk9OQU1FTUFUQ0giLCBuYW1lLCAid2l0aCIsIGNhbGwpCisgICAg
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHB5dGVzdC5mYWlsKCJjb3VsZCBub3QgZmlu
ZCAlciBjaGVjayAlciIgJSAobmFtZSwgY2hlY2spKQorCisgICAgZGVmIHBvcGNhbGwoc2VsZiwg
bmFtZSk6CisgICAgICAgIF9fdHJhY2ViYWNraGlkZV9fID0gVHJ1ZQorICAgICAgICBmb3IgaSwg
Y2FsbCBpbiBlbnVtZXJhdGUoc2VsZi5jYWxscyk6CisgICAgICAgICAgICBpZiBjYWxsLl9uYW1l
ID09IG5hbWU6CisgICAgICAgICAgICAgICAgZGVsIHNlbGYuY2FsbHNbaV0KKyAgICAgICAgICAg
ICAgICByZXR1cm4gY2FsbAorICAgICAgICBsaW5lcyA9IFsiY291bGQgbm90IGZpbmQgY2FsbCAl
ciwgaW46IiAlIChuYW1lLCldCisgICAgICAgIGxpbmVzLmV4dGVuZChbIiAgJXMiICUgc3RyKHgp
IGZvciB4IGluIHNlbGYuY2FsbHNdKQorICAgICAgICBweXRlc3QuZmFpbCgiXG4iLmpvaW4obGlu
ZXMpKQorCisgICAgZGVmIGdldGNhbGwoc2VsZiwgbmFtZSk6CisgICAgICAgIGwgPSBzZWxmLmdl
dGNhbGxzKG5hbWUpCisgICAgICAgIGFzc2VydCBsZW4obCkgPT0gMSwgKG5hbWUsIGwpCisgICAg
ICAgIHJldHVybiBsWzBdCisKKyAgICAjIGZ1bmN0aW9uYWxpdHkgZm9yIHRlc3QgcmVwb3J0cwor
CisgICAgZGVmIGdldHJlcG9ydHMoc2VsZiwKKyAgICAgICAgICAgICAgICAgICBuYW1lcz0icHl0
ZXN0X3J1bnRlc3RfbG9ncmVwb3J0IHB5dGVzdF9jb2xsZWN0cmVwb3J0Iik6CisgICAgICAgIHJl
dHVybiBbeC5yZXBvcnQgZm9yIHggaW4gc2VsZi5nZXRjYWxscyhuYW1lcyldCisKKyAgICBkZWYg
bWF0Y2hyZXBvcnQoc2VsZiwgaW5hbWVwYXJ0PSIiLAorICAgICAgICBuYW1lcz0icHl0ZXN0X3J1
bnRlc3RfbG9ncmVwb3J0IHB5dGVzdF9jb2xsZWN0cmVwb3J0Iiwgd2hlbj1Ob25lKToKKyAgICAg
ICAgIiIiIHJldHVybiBhIHRlc3RyZXBvcnQgd2hvc2UgZG90dGVkIGltcG9ydCBwYXRoIG1hdGNo
ZXMgIiIiCisgICAgICAgIGwgPSBbXQorICAgICAgICBmb3IgcmVwIGluIHNlbGYuZ2V0cmVwb3J0
cyhuYW1lcz1uYW1lcyk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgbm90
IHdoZW4gYW5kIHJlcC53aGVuICE9ICJjYWxsIiBhbmQgcmVwLnBhc3NlZDoKKyAgICAgICAgICAg
ICAgICAgICAgIyBzZXR1cC90ZWFyZG93biBwYXNzaW5nIHJlcG9ydHMgLSBsZXQncyBpZ25vcmUg
dGhvc2UKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGV4Y2VwdCBB
dHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBpZiB3aGVu
IGFuZCBnZXRhdHRyKHJlcCwgJ3doZW4nLCBOb25lKSAhPSB3aGVuOgorICAgICAgICAgICAgICAg
IGNvbnRpbnVlCisgICAgICAgICAgICBpZiBub3QgaW5hbWVwYXJ0IG9yIGluYW1lcGFydCBpbiBy
ZXAubm9kZWlkLnNwbGl0KCI6OiIpOgorICAgICAgICAgICAgICAgIGwuYXBwZW5kKHJlcCkKKyAg
ICAgICAgaWYgbm90IGw6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJjb3VsZCBub3Qg
ZmluZCB0ZXN0IHJlcG9ydCBtYXRjaGluZyAlcjogIgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAibm8gdGVzdCByZXBvcnRzIGF0IGFsbCEiICUgKGluYW1lcGFydCwpKQorICAgICAgICBp
ZiBsZW4obCkgPiAxOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAg
ICAgICAiZm91bmQgMiBvciBtb3JlIHRlc3RyZXBvcnRzIG1hdGNoaW5nICVyOiAlcyIgJShpbmFt
ZXBhcnQsIGwpKQorICAgICAgICByZXR1cm4gbFswXQorCisgICAgZGVmIGdldGZhaWx1cmVzKHNl
bGYsCisgICAgICAgICAgICAgICAgICAgIG5hbWVzPSdweXRlc3RfcnVudGVzdF9sb2dyZXBvcnQg
cHl0ZXN0X2NvbGxlY3RyZXBvcnQnKToKKyAgICAgICAgcmV0dXJuIFtyZXAgZm9yIHJlcCBpbiBz
ZWxmLmdldHJlcG9ydHMobmFtZXMpIGlmIHJlcC5mYWlsZWRdCisKKyAgICBkZWYgZ2V0ZmFpbGVk
Y29sbGVjdGlvbnMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmdldGZhaWx1cmVzKCdweXRl
c3RfY29sbGVjdHJlcG9ydCcpCisKKyAgICBkZWYgbGlzdG91dGNvbWVzKHNlbGYpOgorICAgICAg
ICBwYXNzZWQgPSBbXQorICAgICAgICBza2lwcGVkID0gW10KKyAgICAgICAgZmFpbGVkID0gW10K
KyAgICAgICAgZm9yIHJlcCBpbiBzZWxmLmdldHJlcG9ydHMoCisgICAgICAgICAgICAicHl0ZXN0
X2NvbGxlY3RyZXBvcnQgcHl0ZXN0X3J1bnRlc3RfbG9ncmVwb3J0Iik6CisgICAgICAgICAgICBp
ZiByZXAucGFzc2VkOgorICAgICAgICAgICAgICAgIGlmIGdldGF0dHIocmVwLCAid2hlbiIsIE5v
bmUpID09ICJjYWxsIjoKKyAgICAgICAgICAgICAgICAgICAgcGFzc2VkLmFwcGVuZChyZXApCisg
ICAgICAgICAgICBlbGlmIHJlcC5za2lwcGVkOgorICAgICAgICAgICAgICAgIHNraXBwZWQuYXBw
ZW5kKHJlcCkKKyAgICAgICAgICAgIGVsaWYgcmVwLmZhaWxlZDoKKyAgICAgICAgICAgICAgICBm
YWlsZWQuYXBwZW5kKHJlcCkKKyAgICAgICAgcmV0dXJuIHBhc3NlZCwgc2tpcHBlZCwgZmFpbGVk
CisKKyAgICBkZWYgY291bnRvdXRjb21lcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIFtsZW4oeCkg
Zm9yIHggaW4gc2VsZi5saXN0b3V0Y29tZXMoKV0KKworICAgIGRlZiBhc3NlcnRvdXRjb21lKHNl
bGYsIHBhc3NlZD0wLCBza2lwcGVkPTAsIGZhaWxlZD0wKToKKyAgICAgICAgcmVhbHBhc3NlZCwg
cmVhbHNraXBwZWQsIHJlYWxmYWlsZWQgPSBzZWxmLmxpc3RvdXRjb21lcygpCisgICAgICAgIGFz
c2VydCBwYXNzZWQgPT0gbGVuKHJlYWxwYXNzZWQpCisgICAgICAgIGFzc2VydCBza2lwcGVkID09
IGxlbihyZWFsc2tpcHBlZCkKKyAgICAgICAgYXNzZXJ0IGZhaWxlZCA9PSBsZW4ocmVhbGZhaWxl
ZCkKKworICAgIGRlZiBjbGVhcihzZWxmKToKKyAgICAgICAgc2VsZi5jYWxsc1s6XSA9IFtdCisK
KworQHB5dGVzdC5maXh0dXJlCitkZWYgbGluZWNvbXAocmVxdWVzdCk6CisgICAgcmV0dXJuIExp
bmVDb21wKCkKKworCitkZWYgcHl0ZXN0X2Z1bmNhcmdfX0xpbmVNYXRjaGVyKHJlcXVlc3QpOgor
ICAgIHJldHVybiBMaW5lTWF0Y2hlcgorCisKK0BweXRlc3QuZml4dHVyZQorZGVmIHRlc3RkaXIo
cmVxdWVzdCwgdG1wZGlyX2ZhY3RvcnkpOgorICAgIHJldHVybiBUZXN0ZGlyKHJlcXVlc3QsIHRt
cGRpcl9mYWN0b3J5KQorCisKK3JleF9vdXRjb21lID0gcmUuY29tcGlsZSgiKFxkKykgKFtcdy1d
KykiKQorY2xhc3MgUnVuUmVzdWx0OgorICAgICIiIlRoZSByZXN1bHQgb2YgcnVubmluZyBhIGNv
bW1hbmQuCisKKyAgICBBdHRyaWJ1dGVzOgorCisgICAgOnJldDogVGhlIHJldHVybiB2YWx1ZS4K
KyAgICA6b3V0bGluZXM6IExpc3Qgb2YgbGluZXMgY2FwdHVyZWQgZnJvbSBzdGRvdXQuCisgICAg
OmVycmxpbmVzOiBMaXN0IG9mIGxpbmVzIGNhcHR1cmVzIGZyb20gc3RkZXJyLgorICAgIDpzdGRv
dXQ6IDpweTpjbGFzczpgTGluZU1hdGNoZXJgIG9mIHN0ZG91dCwgdXNlIGBgc3Rkb3V0LnN0cigp
YGAgdG8KKyAgICAgICByZWNvbnN0cnVjdCBzdGRvdXQgb3IgdGhlIGNvbW1vbmx5IHVzZWQKKyAg
ICAgICBgYHN0ZG91dC5mbm1hdGNoX2xpbmVzKClgYCBtZXRob2QuCisgICAgOnN0ZGVycnI6IDpw
eTpjbGFzczpgTGluZU1hdGNoZXJgIG9mIHN0ZGVyci4KKyAgICA6ZHVyYXRpb246IER1cmF0aW9u
IGluIHNlY29uZHMuCisKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmV0LCBvdXRs
aW5lcywgZXJybGluZXMsIGR1cmF0aW9uKToKKyAgICAgICAgc2VsZi5yZXQgPSByZXQKKyAgICAg
ICAgc2VsZi5vdXRsaW5lcyA9IG91dGxpbmVzCisgICAgICAgIHNlbGYuZXJybGluZXMgPSBlcnJs
aW5lcworICAgICAgICBzZWxmLnN0ZG91dCA9IExpbmVNYXRjaGVyKG91dGxpbmVzKQorICAgICAg
ICBzZWxmLnN0ZGVyciA9IExpbmVNYXRjaGVyKGVycmxpbmVzKQorICAgICAgICBzZWxmLmR1cmF0
aW9uID0gZHVyYXRpb24KKworICAgIGRlZiBwYXJzZW91dGNvbWVzKHNlbGYpOgorICAgICAgICAi
IiIgUmV0dXJuIGEgZGljdGlvbmFyeSBvZiBvdXRjb21lc3RyaW5nLT5udW0gZnJvbSBwYXJzaW5n
CisgICAgICAgIHRoZSB0ZXJtaW5hbCBvdXRwdXQgdGhhdCB0aGUgdGVzdCBwcm9jZXNzIHByb2R1
Y2VkLiIiIgorICAgICAgICBmb3IgbGluZSBpbiByZXZlcnNlZChzZWxmLm91dGxpbmVzKToKKyAg
ICAgICAgICAgIGlmICdzZWNvbmRzJyBpbiBsaW5lOgorICAgICAgICAgICAgICAgIG91dGNvbWVz
ID0gcmV4X291dGNvbWUuZmluZGFsbChsaW5lKQorICAgICAgICAgICAgICAgIGlmIG91dGNvbWVz
OgorICAgICAgICAgICAgICAgICAgICBkID0ge30KKyAgICAgICAgICAgICAgICAgICAgZm9yIG51
bSwgY2F0IGluIG91dGNvbWVzOgorICAgICAgICAgICAgICAgICAgICAgICAgZFtjYXRdID0gaW50
KG51bSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGQKKworICAgIGRlZiBhc3NlcnRfb3V0
Y29tZXMoc2VsZiwgcGFzc2VkPTAsIHNraXBwZWQ9MCwgZmFpbGVkPTApOgorICAgICAgICAiIiIg
YXNzZXJ0IHRoYXQgdGhlIHNwZWNpZmllZCBvdXRjb21lcyBhcHBlYXIgd2l0aCB0aGUgcmVzcGVj
dGl2ZQorICAgICAgICBudW1iZXJzICgwIG1lYW5zIGl0IGRpZG4ndCBvY2N1cikgaW4gdGhlIHRl
eHQgb3V0cHV0IGZyb20gYSB0ZXN0IHJ1bi4iIiIKKyAgICAgICAgZCA9IHNlbGYucGFyc2VvdXRj
b21lcygpCisgICAgICAgIGFzc2VydCBwYXNzZWQgPT0gZC5nZXQoInBhc3NlZCIsIDApCisgICAg
ICAgIGFzc2VydCBza2lwcGVkID09IGQuZ2V0KCJza2lwcGVkIiwgMCkKKyAgICAgICAgYXNzZXJ0
IGZhaWxlZCA9PSBkLmdldCgiZmFpbGVkIiwgMCkKKworCisKK2NsYXNzIFRlc3RkaXI6CisgICAg
IiIiVGVtcG9yYXJ5IHRlc3QgZGlyZWN0b3J5IHdpdGggdG9vbHMgdG8gdGVzdC9ydW4gcHkudGVz
dCBpdHNlbGYuCisKKyAgICBUaGlzIGlzIGJhc2VkIG9uIHRoZSBgYHRtcGRpcmBgIGZpeHR1cmUg
YnV0IHByb3ZpZGVzIGEgbnVtYmVyIG9mCisgICAgbWV0aG9kcyB3aGljaCBhaWQgd2l0aCB0ZXN0
aW5nIHB5LnRlc3QgaXRzZWxmLiAgVW5sZXNzCisgICAgOnB5Om1ldGg6YGNoZGlyYCBpcyB1c2Vk
IGFsbCBtZXRob2RzIHdpbGwgdXNlIDpweTphdHRyOmB0bXBkaXJgIGFzCisgICAgY3VycmVudCB3
b3JraW5nIGRpcmVjdG9yeS4KKworICAgIEF0dHJpYnV0ZXM6CisKKyAgICA6dG1wZGlyOiBUaGUg
OnB5OmNsYXNzOmBweS5wYXRoLmxvY2FsYCBpbnN0YW5jZSBvZiB0aGUgdGVtcG9yYXJ5CisgICAg
ICAgZGlyZWN0b3J5LgorCisgICAgOnBsdWdpbnM6IEEgbGlzdCBvZiBwbHVnaW5zIHRvIHVzZSB3
aXRoIDpweTptZXRoOmBwYXJzZWNvbmZpZ2AgYW5kCisgICAgICAgOnB5Om1ldGg6YHJ1bnB5dGVz
dGAuICBJbml0aWFsbHkgdGhpcyBpcyBhbiBlbXB0eSBsaXN0IGJ1dAorICAgICAgIHBsdWdpbnMg
Y2FuIGJlIGFkZGVkIHRvIHRoZSBsaXN0LiAgVGhlIHR5cGUgb2YgaXRlbXMgdG8gYWRkIHRvCisg
ICAgICAgdGhlIGxpc3QgZGVwZW5kIG9uIHRoZSBtZXRob2Qgd2hpY2ggdXNlcyB0aGVtIHNvIHJl
ZmVyIHRvIHRoZW0KKyAgICAgICBmb3IgZGV0YWlscy4KKworICAgICIiIgorCisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIHJlcXVlc3QsIHRtcGRpcl9mYWN0b3J5KToKKyAgICAgICAgc2VsZi5yZXF1
ZXN0ID0gcmVxdWVzdAorICAgICAgICAjIFhYWCByZW1vdmUgZHVwbGljYXRpb24gd2l0aCB0bXBk
aXIgcGx1Z2luCisgICAgICAgIGJhc2V0bXAgPSB0bXBkaXJfZmFjdG9yeS5lbnN1cmV0ZW1wKCJ0
ZXN0ZGlyIikKKyAgICAgICAgbmFtZSA9IHJlcXVlc3QuZnVuY3Rpb24uX19uYW1lX18KKyAgICAg
ICAgZm9yIGkgaW4gcmFuZ2UoMTAwKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAg
ICB0bXBkaXIgPSBiYXNldG1wLm1rZGlyKG5hbWUgKyBzdHIoaSkpCisgICAgICAgICAgICBleGNl
cHQgcHkuZXJyb3IuRUVYSVNUOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAg
ICBicmVhaworICAgICAgICBzZWxmLnRtcGRpciA9IHRtcGRpcgorICAgICAgICBzZWxmLnBsdWdp
bnMgPSBbXQorICAgICAgICBzZWxmLl9zYXZlc3lzcGF0aCA9IChsaXN0KHN5cy5wYXRoKSwgbGlz
dChzeXMubWV0YV9wYXRoKSkKKyAgICAgICAgc2VsZi5fc2F2ZW1vZHVsZWtleXMgPSBzZXQoc3lz
Lm1vZHVsZXMpCisgICAgICAgIHNlbGYuY2hkaXIoKSAjIGFsd2F5cyBjaGRpcgorICAgICAgICBz
ZWxmLnJlcXVlc3QuYWRkZmluYWxpemVyKHNlbGYuZmluYWxpemUpCisgICAgICAgIG1ldGhvZCA9
IHNlbGYucmVxdWVzdC5jb25maWcuZ2V0b3B0aW9uKCItLXJ1bnB5dGVzdCIpCisgICAgICAgIGlm
IG1ldGhvZCA9PSAiaW5wcm9jZXNzIjoKKyAgICAgICAgICAgIHNlbGYuX3J1bnB5dGVzdF9tZXRo
b2QgPSBzZWxmLnJ1bnB5dGVzdF9pbnByb2Nlc3MKKyAgICAgICAgZWxpZiBtZXRob2QgPT0gInN1
YnByb2Nlc3MiOgorICAgICAgICAgICAgc2VsZi5fcnVucHl0ZXN0X21ldGhvZCA9IHNlbGYucnVu
cHl0ZXN0X3N1YnByb2Nlc3MKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0
dXJuICI8VGVzdGRpciAlcj4iICUgKHNlbGYudG1wZGlyLCkKKworICAgIGRlZiBmaW5hbGl6ZShz
ZWxmKToKKyAgICAgICAgIiIiQ2xlYW4gdXAgZ2xvYmFsIHN0YXRlIGFydGlmYWN0cy4KKworICAg
ICAgICBTb21lIG1ldGhvZHMgbW9kaWZ5IHRoZSBnbG9iYWwgaW50ZXJwcmV0ZXIgc3RhdGUgYW5k
IHRoaXMKKyAgICAgICAgdHJpZXMgdG8gY2xlYW4gdGhpcyB1cC4gIEl0IGRvZXMgbm90IHJlbW92
ZSB0aGUgdGVtcG9yYXJ5CisgICAgICAgIGRpcmVjdG9yeSBob3dldmVyIHNvIGl0IGNhbiBiZSBs
b29rZWQgYXQgYWZ0ZXIgdGhlIHRlc3QgcnVuCisgICAgICAgIGhhcyBmaW5pc2hlZC4KKworICAg
ICAgICAiIiIKKyAgICAgICAgc3lzLnBhdGhbOl0sIHN5cy5tZXRhX3BhdGhbOl0gPSBzZWxmLl9z
YXZlc3lzcGF0aAorICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICdfb2xkZGlyJyk6CisgICAgICAg
ICAgICBzZWxmLl9vbGRkaXIuY2hkaXIoKQorICAgICAgICBzZWxmLmRlbGV0ZV9sb2FkZWRfbW9k
dWxlcygpCisKKyAgICBkZWYgZGVsZXRlX2xvYWRlZF9tb2R1bGVzKHNlbGYpOgorICAgICAgICAi
IiJEZWxldGUgbW9kdWxlcyB0aGF0IGhhdmUgYmVlbiBsb2FkZWQgZHVyaW5nIGEgdGVzdC4KKwor
ICAgICAgICBUaGlzIGFsbG93cyB0aGUgaW50ZXJwcmV0ZXIgdG8gY2F0Y2ggbW9kdWxlIGNoYW5n
ZXMgaW4gY2FzZQorICAgICAgICB0aGUgbW9kdWxlIGlzIHJlLWltcG9ydGVkLgorICAgICAgICAi
IiIKKyAgICAgICAgZm9yIG5hbWUgaW4gc2V0KHN5cy5tb2R1bGVzKS5kaWZmZXJlbmNlKHNlbGYu
X3NhdmVtb2R1bGVrZXlzKToKKyAgICAgICAgICAgICMgaXQgc2VlbXMgem9wZS5pbnRlcmZhY2Vz
IGlzIGtlZXBpbmcgc29tZSBzdGF0ZQorICAgICAgICAgICAgIyAodXNlZCBieSB0d2lzdGVkIHJl
bGF0ZWQgdGVzdHMpCisgICAgICAgICAgICBpZiBuYW1lICE9ICJ6b3BlLmludGVyZmFjZSI6Cisg
ICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW25hbWVdCisKKyAgICBkZWYgbWFrZV9ob29r
X3JlY29yZGVyKHNlbGYsIHBsdWdpbm1hbmFnZXIpOgorICAgICAgICAiIiJDcmVhdGUgYSBuZXcg
OnB5OmNsYXNzOmBIb29rUmVjb3JkZXJgIGZvciBhIFBsdWdpbk1hbmFnZXIuIiIiCisgICAgICAg
IGFzc2VydCBub3QgaGFzYXR0cihwbHVnaW5tYW5hZ2VyLCAicmVwcmVjIikKKyAgICAgICAgcGx1
Z2lubWFuYWdlci5yZXByZWMgPSByZXByZWMgPSBIb29rUmVjb3JkZXIocGx1Z2lubWFuYWdlcikK
KyAgICAgICAgc2VsZi5yZXF1ZXN0LmFkZGZpbmFsaXplcihyZXByZWMuZmluaXNoX3JlY29yZGlu
ZykKKyAgICAgICAgcmV0dXJuIHJlcHJlYworCisgICAgZGVmIGNoZGlyKHNlbGYpOgorICAgICAg
ICAiIiJDZCBpbnRvIHRoZSB0ZW1wb3JhcnkgZGlyZWN0b3J5LgorCisgICAgICAgIFRoaXMgaXMg
ZG9uZSBhdXRvbWF0aWNhbGx5IHVwb24gaW5zdGFudGlhdGlvbi4KKworICAgICAgICAiIiIKKyAg
ICAgICAgb2xkID0gc2VsZi50bXBkaXIuY2hkaXIoKQorICAgICAgICBpZiBub3QgaGFzYXR0cihz
ZWxmLCAnX29sZGRpcicpOgorICAgICAgICAgICAgc2VsZi5fb2xkZGlyID0gb2xkCisKKyAgICBk
ZWYgX21ha2VmaWxlKHNlbGYsIGV4dCwgYXJncywga3dhcmdzKToKKyAgICAgICAgaXRlbXMgPSBs
aXN0KGt3YXJncy5pdGVtcygpKQorICAgICAgICBpZiBhcmdzOgorICAgICAgICAgICAgc291cmNl
ID0gcHkuYnVpbHRpbi5fdG90ZXh0KCJcbiIpLmpvaW4oCisgICAgICAgICAgICAgICAgbWFwKHB5
LmJ1aWx0aW4uX3RvdGV4dCwgYXJncykpICsgcHkuYnVpbHRpbi5fdG90ZXh0KCJcbiIpCisgICAg
ICAgICAgICBiYXNlbmFtZSA9IHNlbGYucmVxdWVzdC5mdW5jdGlvbi5fX25hbWVfXworICAgICAg
ICAgICAgaXRlbXMuaW5zZXJ0KDAsIChiYXNlbmFtZSwgc291cmNlKSkKKyAgICAgICAgcmV0ID0g
Tm9uZQorICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gaXRlbXM6CisgICAgICAgICAgICBwID0g
c2VsZi50bXBkaXIuam9pbihuYW1lKS5uZXcoZXh0PWV4dCkKKyAgICAgICAgICAgIHNvdXJjZSA9
IFNvdXJjZSh2YWx1ZSkKKyAgICAgICAgICAgIGRlZiBteV90b3RleHQocywgZW5jb2Rpbmc9InV0
Zi04Iik6CisgICAgICAgICAgICAgICAgaWYgcHkuYnVpbHRpbi5faXNieXRlcyhzKToKKyAgICAg
ICAgICAgICAgICAgICAgcyA9IHB5LmJ1aWx0aW4uX3RvdGV4dChzLCBlbmNvZGluZz1lbmNvZGlu
ZykKKyAgICAgICAgICAgICAgICByZXR1cm4gcworICAgICAgICAgICAgc291cmNlX3VuaWNvZGUg
PSAiXG4iLmpvaW4oW215X3RvdGV4dChsaW5lKSBmb3IgbGluZSBpbiBzb3VyY2UubGluZXNdKQor
ICAgICAgICAgICAgc291cmNlID0gcHkuYnVpbHRpbi5fdG90ZXh0KHNvdXJjZV91bmljb2RlKQor
ICAgICAgICAgICAgY29udGVudCA9IHNvdXJjZS5zdHJpcCgpLmVuY29kZSgidXRmLTgiKSAjICsg
IlxuIgorICAgICAgICAgICAgI2NvbnRlbnQgPSBjb250ZW50LnJzdHJpcCgpICsgIlxuIgorICAg
ICAgICAgICAgcC53cml0ZShjb250ZW50LCAid2IiKQorICAgICAgICAgICAgaWYgcmV0IGlzIE5v
bmU6CisgICAgICAgICAgICAgICAgcmV0ID0gcAorICAgICAgICByZXR1cm4gcmV0CisKKyAgICBk
ZWYgbWFrZWZpbGUoc2VsZiwgZXh0LCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAiIiJDcmVh
dGUgYSBuZXcgZmlsZSBpbiB0aGUgdGVzdGRpci4KKworICAgICAgICBleHQ6IFRoZSBleHRlbnNp
b24gdGhlIGZpbGUgc2hvdWxkIHVzZSwgaW5jbHVkaW5nIHRoZSBkb3QuCisgICAgICAgICAgIEUu
Zy4gIi5weSIuCisKKyAgICAgICAgYXJnczogQWxsIGFyZ3Mgd2lsbCBiZSB0cmVhdGVkIGFzIHN0
cmluZ3MgYW5kIGpvaW5lZCB1c2luZworICAgICAgICAgICBuZXdsaW5lcy4gIFRoZSByZXN1bHQg
d2lsbCBiZSB3cml0dGVuIGFzIGNvbnRlbnRzIHRvIHRoZQorICAgICAgICAgICBmaWxlLiAgVGhl
IG5hbWUgb2YgdGhlIGZpbGUgd2lsbCBiZSBiYXNlZCBvbiB0aGUgdGVzdAorICAgICAgICAgICBm
dW5jdGlvbiByZXF1ZXN0aW5nIHRoaXMgZml4dHVyZS4KKyAgICAgICAgICAgRS5nLiAidGVzdGRp
ci5tYWtlZmlsZSgnLnR4dCcsICdsaW5lMScsICdsaW5lMicpIgorCisgICAgICAgIGt3YXJnczog
RWFjaCBrZXl3b3JkIGlzIHRoZSBuYW1lIG9mIGEgZmlsZSwgd2hpbGUgdGhlIHZhbHVlIG9mCisg
ICAgICAgICAgIGl0IHdpbGwgYmUgd3JpdHRlbiBhcyBjb250ZW50cyBvZiB0aGUgZmlsZS4KKyAg
ICAgICAgICAgRS5nLiAidGVzdGRpci5tYWtlZmlsZSgnLmluaScsIHB5dGVzdD0nW3B5dGVzdF1c
bmFkZG9wdHM9LXJzXG4nKSIKKworICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX21h
a2VmaWxlKGV4dCwgYXJncywga3dhcmdzKQorCisgICAgZGVmIG1ha2Vjb25mdGVzdChzZWxmLCBz
b3VyY2UpOgorICAgICAgICAiIiJXcml0ZSBhIGNvbnRlc3QucHkgZmlsZSB3aXRoICdzb3VyY2Un
IGFzIGNvbnRlbnRzLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5tYWtlcHlmaWxlKGNvbmZ0ZXN0
PXNvdXJjZSkKKworICAgIGRlZiBtYWtlaW5pKHNlbGYsIHNvdXJjZSk6CisgICAgICAgICIiIldy
aXRlIGEgdG94LmluaSBmaWxlIHdpdGggJ3NvdXJjZScgYXMgY29udGVudHMuIiIiCisgICAgICAg
IHJldHVybiBzZWxmLm1ha2VmaWxlKCcuaW5pJywgdG94PXNvdXJjZSkKKworICAgIGRlZiBnZXRp
bmljZmcoc2VsZiwgc291cmNlKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBweXRlc3Qgc2VjdGlv
biBmcm9tIHRoZSB0b3guaW5pIGNvbmZpZyBmaWxlLiIiIgorICAgICAgICBwID0gc2VsZi5tYWtl
aW5pKHNvdXJjZSkKKyAgICAgICAgcmV0dXJuIHB5LmluaWNvbmZpZy5JbmlDb25maWcocClbJ3B5
dGVzdCddCisKKyAgICBkZWYgbWFrZXB5ZmlsZShzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAg
ICAgICAiIiJTaG9ydGN1dCBmb3IgLm1ha2VmaWxlKCkgd2l0aCBhIC5weSBleHRlbnNpb24uIiIi
CisgICAgICAgIHJldHVybiBzZWxmLl9tYWtlZmlsZSgnLnB5JywgYXJncywga3dhcmdzKQorCisg
ICAgZGVmIG1ha2V0eHRmaWxlKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICIiIlNo
b3J0Y3V0IGZvciAubWFrZWZpbGUoKSB3aXRoIGEgLnR4dCBleHRlbnNpb24uIiIiCisgICAgICAg
IHJldHVybiBzZWxmLl9tYWtlZmlsZSgnLnR4dCcsIGFyZ3MsIGt3YXJncykKKworICAgIGRlZiBz
eXNwYXRoaW5zZXJ0KHNlbGYsIHBhdGg9Tm9uZSk6CisgICAgICAgICIiIlByZXBlbmQgYSBkaXJl
Y3RvcnkgdG8gc3lzLnBhdGgsIGRlZmF1bHRzIHRvIDpweTphdHRyOmB0bXBkaXJgLgorCisgICAg
ICAgIFRoaXMgaXMgdW5kb25lIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgdGhlIHRlc3QuCisgICAgICAg
ICIiIgorICAgICAgICBpZiBwYXRoIGlzIE5vbmU6CisgICAgICAgICAgICBwYXRoID0gc2VsZi50
bXBkaXIKKyAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIHN0cihwYXRoKSkKKyAgICAgICAgIyBh
IGNhbGwgdG8gc3lzcGF0aGluc2VydCgpIHVzdWFsbHkgbWVhbnMgdGhhdCB0aGUgY2FsbGVyCisg
ICAgICAgICMgd2FudHMgdG8gaW1wb3J0IHNvbWUgZHluYW1pY2FsbHkgY3JlYXRlZCBmaWxlcy4K
KyAgICAgICAgIyB3aXRoIHB5dGhvbjMgd2UgdGh1cyBpbnZhbGlkYXRlIGltcG9ydCBjYWNoZXMu
CisgICAgICAgIHNlbGYuX3Bvc3NpYmx5X2ludmFsaWRhdGVfaW1wb3J0X2NhY2hlcygpCisKKyAg
ICBkZWYgX3Bvc3NpYmx5X2ludmFsaWRhdGVfaW1wb3J0X2NhY2hlcyhzZWxmKToKKyAgICAgICAg
IyBpbnZhbGlkYXRlIGNhY2hlcyBpZiB3ZSBjYW4gKHB5MzMgYW5kIGFib3ZlKQorICAgICAgICB0
cnk6CisgICAgICAgICAgICBpbXBvcnQgaW1wb3J0bGliCisgICAgICAgIGV4Y2VwdCBJbXBvcnRF
cnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGhh
c2F0dHIoaW1wb3J0bGliLCAiaW52YWxpZGF0ZV9jYWNoZXMiKToKKyAgICAgICAgICAgICAgICBp
bXBvcnRsaWIuaW52YWxpZGF0ZV9jYWNoZXMoKQorCisgICAgZGVmIG1rZGlyKHNlbGYsIG5hbWUp
OgorICAgICAgICAiIiJDcmVhdGUgYSBuZXcgKHN1YilkaXJlY3RvcnkuIiIiCisgICAgICAgIHJl
dHVybiBzZWxmLnRtcGRpci5ta2RpcihuYW1lKQorCisgICAgZGVmIG1rcHlkaXIoc2VsZiwgbmFt
ZSk6CisgICAgICAgICIiIkNyZWF0ZSBhIG5ldyBweXRob24gcGFja2FnZS4KKworICAgICAgICBU
aGlzIGNyZWF0ZXMgYSAoc3ViKWRpcmVjb3RyeSB3aXRoIGFuIGVtcHR5IGBgX19pbml0X18ucHlg
YAorICAgICAgICBmaWxlIHNvIHRoYXQgaXMgcmVjb2duaXNlZCBhcyBhIHB5dGhvbiBwYWNrYWdl
LgorCisgICAgICAgICIiIgorICAgICAgICBwID0gc2VsZi5ta2RpcihuYW1lKQorICAgICAgICBw
LmVuc3VyZSgiX19pbml0X18ucHkiKQorICAgICAgICByZXR1cm4gcAorCisgICAgU2Vzc2lvbiA9
IFNlc3Npb24KKyAgICBkZWYgZ2V0bm9kZShzZWxmLCBjb25maWcsIGFyZyk6CisgICAgICAgICIi
IlJldHVybiB0aGUgY29sbGVjdGlvbiBub2RlIG9mIGEgZmlsZS4KKworICAgICAgICA6cGFyYW0g
Y29uZmlnOiA6cHk6Y2xhc3M6YF9weXRlc3QuY29uZmlnLkNvbmZpZ2AgaW5zdGFuY2UsIHNlZQor
ICAgICAgICAgICA6cHk6bWV0aDpgcGFyc2Vjb25maWdgIGFuZCA6cHk6bWV0aDpgcGFyc2Vjb25m
aWd1cmVgIHRvCisgICAgICAgICAgIGNyZWF0ZSB0aGUgY29uZmlndXJhdGlvbi4KKworICAgICAg
ICA6cGFyYW0gYXJnOiBBIDpweTpjbGFzczpgcHkucGF0aC5sb2NhbGAgaW5zdGFuY2Ugb2YgdGhl
IGZpbGUuCisKKyAgICAgICAgIiIiCisgICAgICAgIHNlc3Npb24gPSBTZXNzaW9uKGNvbmZpZykK
KyAgICAgICAgYXNzZXJ0ICc6Oicgbm90IGluIHN0cihhcmcpCisgICAgICAgIHAgPSBweS5wYXRo
LmxvY2FsKGFyZykKKyAgICAgICAgY29uZmlnLmhvb2sucHl0ZXN0X3Nlc3Npb25zdGFydChzZXNz
aW9uPXNlc3Npb24pCisgICAgICAgIHJlcyA9IHNlc3Npb24ucGVyZm9ybV9jb2xsZWN0KFtzdHIo
cCldLCBnZW5pdGVtcz1GYWxzZSlbMF0KKyAgICAgICAgY29uZmlnLmhvb2sucHl0ZXN0X3Nlc3Np
b25maW5pc2goc2Vzc2lvbj1zZXNzaW9uLCBleGl0c3RhdHVzPUVYSVRfT0spCisgICAgICAgIHJl
dHVybiByZXMKKworICAgIGRlZiBnZXRwYXRobm9kZShzZWxmLCBwYXRoKToKKyAgICAgICAgIiIi
UmV0dXJuIHRoZSBjb2xsZWN0aW9uIG5vZGUgb2YgYSBmaWxlLgorCisgICAgICAgIFRoaXMgaXMg
bGlrZSA6cHk6bWV0aDpgZ2V0bm9kZWAgYnV0IHVzZXMKKyAgICAgICAgOnB5Om1ldGg6YHBhcnNl
Y29uZmlndXJlYCB0byBjcmVhdGUgdGhlIChjb25maWd1cmVkKSBweS50ZXN0CisgICAgICAgIENv
bmZpZyBpbnN0YW5jZS4KKworICAgICAgICA6cGFyYW0gcGF0aDogQSA6cHk6Y2xhc3M6YHB5LnBh
dGgubG9jYWxgIGluc3RhbmNlIG9mIHRoZSBmaWxlLgorCisgICAgICAgICIiIgorICAgICAgICBj
b25maWcgPSBzZWxmLnBhcnNlY29uZmlndXJlKHBhdGgpCisgICAgICAgIHNlc3Npb24gPSBTZXNz
aW9uKGNvbmZpZykKKyAgICAgICAgeCA9IHNlc3Npb24uZnNwYXRoLmJlc3RyZWxwYXRoKHBhdGgp
CisgICAgICAgIGNvbmZpZy5ob29rLnB5dGVzdF9zZXNzaW9uc3RhcnQoc2Vzc2lvbj1zZXNzaW9u
KQorICAgICAgICByZXMgPSBzZXNzaW9uLnBlcmZvcm1fY29sbGVjdChbeF0sIGdlbml0ZW1zPUZh
bHNlKVswXQorICAgICAgICBjb25maWcuaG9vay5weXRlc3Rfc2Vzc2lvbmZpbmlzaChzZXNzaW9u
PXNlc3Npb24sIGV4aXRzdGF0dXM9RVhJVF9PSykKKyAgICAgICAgcmV0dXJuIHJlcworCisgICAg
ZGVmIGdlbml0ZW1zKHNlbGYsIGNvbGl0ZW1zKToKKyAgICAgICAgIiIiR2VuZXJhdGUgYWxsIHRl
c3QgaXRlbXMgZnJvbSBhIGNvbGxlY3Rpb24gbm9kZS4KKworICAgICAgICBUaGlzIHJlY3Vyc2Vz
IGludG8gdGhlIGNvbGxlY3Rpb24gbm9kZSBhbmQgcmV0dXJucyBhIGxpc3Qgb2YKKyAgICAgICAg
YWxsIHRoZSB0ZXN0IGl0ZW1zIGNvbnRhaW5lZCB3aXRoaW4uCisKKyAgICAgICAgIiIiCisgICAg
ICAgIHNlc3Npb24gPSBjb2xpdGVtc1swXS5zZXNzaW9uCisgICAgICAgIHJlc3VsdCA9IFtdCisg
ICAgICAgIGZvciBjb2xpdGVtIGluIGNvbGl0ZW1zOgorICAgICAgICAgICAgcmVzdWx0LmV4dGVu
ZChzZXNzaW9uLmdlbml0ZW1zKGNvbGl0ZW0pKQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAg
ICBkZWYgcnVuaXRlbShzZWxmLCBzb3VyY2UpOgorICAgICAgICAiIiJSdW4gdGhlICJ0ZXN0X2Z1
bmMiIEl0ZW0uCisKKyAgICAgICAgVGhlIGNhbGxpbmcgdGVzdCBpbnN0YW5jZSAodGhlIGNsYXNz
IHdoaWNoIGNvbnRhaW5zIHRoZSB0ZXN0CisgICAgICAgIG1ldGhvZCkgbXVzdCBwcm92aWRlIGEg
YGAuZ2V0cnVubmVyKClgYCBtZXRob2Qgd2hpY2ggc2hvdWxkCisgICAgICAgIHJldHVybiBhIHJ1
bm5lciB3aGljaCBjYW4gcnVuIHRoZSB0ZXN0IHByb3RvY29sIGZvciBhIHNpbmdsZQorICAgICAg
ICBpdGVtLCBsaWtlIGUuZy4gOnB5OmZ1bmM6YF9weXRlc3QucnVubmVyLnJ1bnRlc3Rwcm90b2Nv
bGAuCisKKyAgICAgICAgIiIiCisgICAgICAgICMgdXNlZCBmcm9tIHJ1bm5lciBmdW5jdGlvbmFs
IHRlc3RzCisgICAgICAgIGl0ZW0gPSBzZWxmLmdldGl0ZW0oc291cmNlKQorICAgICAgICAjIHRo
ZSB0ZXN0IGNsYXNzIHdoZXJlIHdlIGFyZSBjYWxsZWQgZnJvbSB3YW50cyB0byBwcm92aWRlIHRo
ZSBydW5uZXIKKyAgICAgICAgdGVzdGNsYXNzaW5zdGFuY2UgPSBzZWxmLnJlcXVlc3QuaW5zdGFu
Y2UKKyAgICAgICAgcnVubmVyID0gdGVzdGNsYXNzaW5zdGFuY2UuZ2V0cnVubmVyKCkKKyAgICAg
ICAgcmV0dXJuIHJ1bm5lcihpdGVtKQorCisgICAgZGVmIGlubGluZV9ydW5zb3VyY2Uoc2VsZiwg
c291cmNlLCAqY21kbGluZWFyZ3MpOgorICAgICAgICAiIiJSdW4gYSB0ZXN0IG1vZHVsZSBpbiBw
cm9jZXNzIHVzaW5nIGBgcHl0ZXN0Lm1haW4oKWBgLgorCisgICAgICAgIFRoaXMgcnVuIHdyaXRl
cyAic291cmNlIiBpbnRvIGEgdGVtcG9yYXJ5IGZpbGUgYW5kIHJ1bnMKKyAgICAgICAgYGBweXRl
c3QubWFpbigpYGAgb24gaXQsIHJldHVybmluZyBhIDpweTpjbGFzczpgSG9va1JlY29yZGVyYAor
ICAgICAgICBpbnN0YW5jZSBmb3IgdGhlIHJlc3VsdC4KKworICAgICAgICA6cGFyYW0gc291cmNl
OiBUaGUgc291cmNlIGNvZGUgb2YgdGhlIHRlc3QgbW9kdWxlLgorCisgICAgICAgIDpwYXJhbSBj
bWRsaW5lYXJnczogQW55IGV4dHJhIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgdG8gdXNlLgorCisg
ICAgICAgIDpyZXR1cm46IDpweTpjbGFzczpgSG9va1JlY29yZGVyYCBpbnN0YW5jZSBvZiB0aGUg
cmVzdWx0LgorCisgICAgICAgICIiIgorICAgICAgICBwID0gc2VsZi5tYWtlcHlmaWxlKHNvdXJj
ZSkKKyAgICAgICAgbCA9IGxpc3QoY21kbGluZWFyZ3MpICsgW3BdCisgICAgICAgIHJldHVybiBz
ZWxmLmlubGluZV9ydW4oKmwpCisKKyAgICBkZWYgaW5saW5lX2dlbml0ZW1zKHNlbGYsICphcmdz
KToKKyAgICAgICAgIiIiUnVuIGBgcHl0ZXN0Lm1haW4oWyctLWNvbGxlY3Rvbmx5J10pYGAgaW4t
cHJvY2Vzcy4KKworICAgICAgICBSZXR1bnMgYSB0dXBsZSBvZiB0aGUgY29sbGVjdGVkIGl0ZW1z
IGFuZCBhCisgICAgICAgIDpweTpjbGFzczpgSG9va1JlY29yZGVyYCBpbnN0YW5jZS4KKworICAg
ICAgICBUaGlzIHJ1bnMgdGhlIDpweTpmdW5jOmBweXRlc3QubWFpbmAgZnVuY3Rpb24gdG8gcnVu
IGFsbCBvZgorICAgICAgICBweS50ZXN0IGluc2lkZSB0aGUgdGVzdCBwcm9jZXNzIGl0c2VsZiBs
aWtlCisgICAgICAgIDpweTptZXRoOmBpbmxpbmVfcnVuYC4gIEhvd2V2ZXIgdGhlIHJldHVybiB2
YWx1ZSBpcyBhIHR1cGxlIG9mCisgICAgICAgIHRoZSBjb2xsZWN0aW9uIGl0ZW1zIGFuZCBhIDpw
eTpjbGFzczpgSG9va1JlY29yZGVyYCBpbnN0YW5jZS4KKworICAgICAgICAiIiIKKyAgICAgICAg
cmVjID0gc2VsZi5pbmxpbmVfcnVuKCItLWNvbGxlY3Qtb25seSIsICphcmdzKQorICAgICAgICBp
dGVtcyA9IFt4Lml0ZW0gZm9yIHggaW4gcmVjLmdldGNhbGxzKCJweXRlc3RfaXRlbWNvbGxlY3Rl
ZCIpXQorICAgICAgICByZXR1cm4gaXRlbXMsIHJlYworCisgICAgZGVmIGlubGluZV9ydW4oc2Vs
ZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgIiIiUnVuIGBgcHl0ZXN0Lm1haW4oKWBgIGlu
LXByb2Nlc3MsIHJldHVybmluZyBhIEhvb2tSZWNvcmRlci4KKworICAgICAgICBUaGlzIHJ1bnMg
dGhlIDpweTpmdW5jOmBweXRlc3QubWFpbmAgZnVuY3Rpb24gdG8gcnVuIGFsbCBvZgorICAgICAg
ICBweS50ZXN0IGluc2lkZSB0aGUgdGVzdCBwcm9jZXNzIGl0c2VsZi4gIFRoaXMgbWVhbnMgaXQg
Y2FuCisgICAgICAgIHJldHVybiBhIDpweTpjbGFzczpgSG9va1JlY29yZGVyYCBpbnN0YW5jZSB3
aGljaCBnaXZlcyBtb3JlCisgICAgICAgIGRldGFpbGVkIHJlc3VsdHMgZnJvbSB0aGVuIHJ1biB0
aGVuIGNhbiBiZSBkb25lIGJ5IG1hdGNoaW5nCisgICAgICAgIHN0ZG91dC9zdGRlcnIgZnJvbSA6
cHk6bWV0aDpgcnVucHl0ZXN0YC4KKworICAgICAgICA6cGFyYW0gYXJnczogQW55IGNvbW1hbmQg
bGluZSBhcmd1bWVudHMgdG8gcGFzcyB0bworICAgICAgICAgICA6cHk6ZnVuYzpgcHl0ZXN0Lm1h
aW5gLgorCisgICAgICAgIDpwYXJhbSBwbHVnaW46IChrZXl3b3JkLW9ubHkpIEV4dHJhIHBsdWdp
biBpbnN0YW5jZXMgdGhlCisgICAgICAgICAgIGBgcHl0ZXN0Lm1haW4oKWBgIGluc3RhbmNlIHNo
b3VsZCB1c2UuCisKKyAgICAgICAgOnJldHVybjogQSA6cHk6Y2xhc3M6YEhvb2tSZWNvcmRlcmAg
aW5zdGFuY2UuCisKKyAgICAgICAgIiIiCisgICAgICAgIHJlYyA9IFtdCisgICAgICAgIGNsYXNz
IENvbGxlY3Q6CisgICAgICAgICAgICBkZWYgcHl0ZXN0X2NvbmZpZ3VyZSh4LCBjb25maWcpOgor
ICAgICAgICAgICAgICAgIHJlYy5hcHBlbmQoc2VsZi5tYWtlX2hvb2tfcmVjb3JkZXIoY29uZmln
LnBsdWdpbm1hbmFnZXIpKQorCisgICAgICAgIHBsdWdpbnMgPSBrd2FyZ3MuZ2V0KCJwbHVnaW5z
Iikgb3IgW10KKyAgICAgICAgcGx1Z2lucy5hcHBlbmQoQ29sbGVjdCgpKQorICAgICAgICByZXQg
PSBweXRlc3QubWFpbihsaXN0KGFyZ3MpLCBwbHVnaW5zPXBsdWdpbnMpCisgICAgICAgIHNlbGYu
ZGVsZXRlX2xvYWRlZF9tb2R1bGVzKCkKKyAgICAgICAgaWYgbGVuKHJlYykgPT0gMToKKyAgICAg
ICAgICAgIHJlcHJlYyA9IHJlYy5wb3AoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY2xh
c3MgcmVwcmVjOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgcmVwcmVjLnJldCA9IHJl
dAorCisgICAgICAgICMgdHlwaWNhbGx5IHdlIHJlcmFpc2Uga2V5Ym9hcmQgaW50ZXJydXB0cyBm
cm9tIHRoZSBjaGlsZCBydW4KKyAgICAgICAgIyBiZWNhdXNlIGl0J3Mgb3VyIHVzZXIgcmVxdWVz
dGluZyBpbnRlcnJ1cHRpb24gb2YgdGhlIHRlc3RpbmcKKyAgICAgICAgaWYgcmV0ID09IDIgYW5k
IG5vdCBrd2FyZ3MuZ2V0KCJub19yZXJhaXNlX2N0cmxjIik6CisgICAgICAgICAgICBjYWxscyA9
IHJlcHJlYy5nZXRjYWxscygicHl0ZXN0X2tleWJvYXJkX2ludGVycnVwdCIpCisgICAgICAgICAg
ICBpZiBjYWxscyBhbmQgY2FsbHNbLTFdLmV4Y2luZm8udHlwZSA9PSBLZXlib2FyZEludGVycnVw
dDoKKyAgICAgICAgICAgICAgICByYWlzZSBLZXlib2FyZEludGVycnVwdCgpCisgICAgICAgIHJl
dHVybiByZXByZWMKKworICAgIGRlZiBydW5weXRlc3RfaW5wcm9jZXNzKHNlbGYsICphcmdzLCAq
Kmt3YXJncyk6CisgICAgICAgICIiIiBSZXR1cm4gcmVzdWx0IG9mIHJ1bm5pbmcgcHl0ZXN0IGlu
LXByb2Nlc3MsIHByb3ZpZGluZyBhIHNpbWlsYXIKKyAgICAgICAgaW50ZXJmYWNlIHRvIHdoYXQg
c2VsZi5ydW5weXRlc3QoKSBwcm92aWRlcy4gIiIiCisgICAgICAgIGlmIGt3YXJncy5nZXQoInN5
c3BhdGhpbnNlcnQiKToKKyAgICAgICAgICAgIHNlbGYuc3lzcGF0aGluc2VydCgpCisgICAgICAg
IG5vdyA9IHRpbWUudGltZSgpCisgICAgICAgIGNhcHR1cmUgPSBweS5pby5TdGRDYXB0dXJlKCkK
KyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJlcHJlYyA9
IHNlbGYuaW5saW5lX3J1bigqYXJncywgKiprd2FyZ3MpCisgICAgICAgICAgICBleGNlcHQgU3lz
dGVtRXhpdCBhcyBlOgorICAgICAgICAgICAgICAgIGNsYXNzIHJlcHJlYzoKKyAgICAgICAgICAg
ICAgICAgICAgcmV0ID0gZS5hcmdzWzBdCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgor
ICAgICAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQorICAgICAgICAgICAgICAgIGNs
YXNzIHJlcHJlYzoKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gMworICAgICAgICBmaW5hbGx5
OgorICAgICAgICAgICAgb3V0LCBlcnIgPSBjYXB0dXJlLnJlc2V0KCkKKyAgICAgICAgICAgIHN5
cy5zdGRvdXQud3JpdGUob3V0KQorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZShlcnIpCisK
KyAgICAgICAgcmVzID0gUnVuUmVzdWx0KHJlcHJlYy5yZXQsCisgICAgICAgICAgICAgICAgICAg
ICAgICBvdXQuc3BsaXQoIlxuIiksIGVyci5zcGxpdCgiXG4iKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRpbWUudGltZSgpLW5vdykKKyAgICAgICAgcmVzLnJlcHJlYyA9IHJlcHJlYworICAg
ICAgICByZXR1cm4gcmVzCisKKyAgICBkZWYgcnVucHl0ZXN0KHNlbGYsICphcmdzLCAqKmt3YXJn
cyk6CisgICAgICAgICIiIiBSdW4gcHl0ZXN0IGlubGluZSBvciBpbiBhIHN1YnByb2Nlc3MsIGRl
cGVuZGluZyBvbiB0aGUgY29tbWFuZCBsaW5lCisgICAgICAgIG9wdGlvbiAiLS1ydW5weXRlc3Qi
IGFuZCByZXR1cm4gYSA6cHk6Y2xhc3M6YFJ1blJlc3VsdGAuCisKKyAgICAgICAgIiIiCisgICAg
ICAgIGFyZ3MgPSBzZWxmLl9lbnN1cmVfYmFzZXRlbXAoYXJncykKKyAgICAgICAgcmV0dXJuIHNl
bGYuX3J1bnB5dGVzdF9tZXRob2QoKmFyZ3MsICoqa3dhcmdzKQorCisgICAgZGVmIF9lbnN1cmVf
YmFzZXRlbXAoc2VsZiwgYXJncyk6CisgICAgICAgIGFyZ3MgPSBbc3RyKHgpIGZvciB4IGluIGFy
Z3NdCisgICAgICAgIGZvciB4IGluIGFyZ3M6CisgICAgICAgICAgICBpZiBzdHIoeCkuc3RhcnRz
d2l0aCgnLS1iYXNldGVtcCcpOgorICAgICAgICAgICAgICAgICNwcmludCAoImJhc2VkdGVtcCBl
eGlzdHM6ICVzIiAlKGFyZ3MsKSkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNl
OgorICAgICAgICAgICAgYXJncy5hcHBlbmQoIi0tYmFzZXRlbXA9JXMiICUgc2VsZi50bXBkaXIu
ZGlycGF0aCgnYmFzZXRlbXAnKSkKKyAgICAgICAgICAgICNwcmludCAoImFkZGVkIGJhc2V0ZW1w
OiAlcyIgJShhcmdzLCkpCisgICAgICAgIHJldHVybiBhcmdzCisKKyAgICBkZWYgcGFyc2Vjb25m
aWcoc2VsZiwgKmFyZ3MpOgorICAgICAgICAiIiJSZXR1cm4gYSBuZXcgcHkudGVzdCBDb25maWcg
aW5zdGFuY2UgZnJvbSBnaXZlbiBjb21tYW5kbGluZSBhcmdzLgorCisgICAgICAgIFRoaXMgaW52
b2tlcyB0aGUgcHkudGVzdCBib290c3RyYXBwaW5nIGNvZGUgaW4gX3B5dGVzdC5jb25maWcKKyAg
ICAgICAgdG8gY3JlYXRlIGEgbmV3IDpweTpjbGFzczpgX3B5dGVzdC5jb3JlLlBsdWdpbk1hbmFn
ZXJgIGFuZAorICAgICAgICBjYWxsIHRoZSBweXRlc3RfY21kbGluZV9wYXJzZSBob29rIHRvIGNy
ZWF0ZSBuZXcKKyAgICAgICAgOnB5OmNsYXNzOmBfcHl0ZXN0LmNvbmZpZy5Db25maWdgIGluc3Rh
bmNlLgorCisgICAgICAgIElmIDpweTphdHRyOmBwbHVnaW5zYCBoYXMgYmVlbiBwb3B1bGF0ZWQg
dGhleSBzaG91bGQgYmUgcGx1Z2luCisgICAgICAgIG1vZHVsZXMgd2hpY2ggd2lsbCBiZSByZWdp
c3RlcmVkIHdpdGggdGhlIFBsdWdpbk1hbmFnZXIuCisKKyAgICAgICAgIiIiCisgICAgICAgIGFy
Z3MgPSBzZWxmLl9lbnN1cmVfYmFzZXRlbXAoYXJncykKKworICAgICAgICBpbXBvcnQgX3B5dGVz
dC5jb25maWcKKyAgICAgICAgY29uZmlnID0gX3B5dGVzdC5jb25maWcuX3ByZXBhcmVjb25maWco
YXJncywgc2VsZi5wbHVnaW5zKQorICAgICAgICAjIHdlIGRvbid0IGtub3cgd2hhdCB0aGUgdGVz
dCB3aWxsIGRvIHdpdGggdGhpcyBoYWxmLXNldHVwIGNvbmZpZworICAgICAgICAjIG9iamVjdCBh
bmQgdGh1cyB3ZSBtYWtlIHN1cmUgaXQgZ2V0cyB1bmNvbmZpZ3VyZWQgcHJvcGVybHkgaW4gYW55
CisgICAgICAgICMgY2FzZSAob3RoZXJ3aXNlIGNhcHR1cmluZyBjb3VsZCBzdGlsbCBiZSBhY3Rp
dmUsIGZvciBleGFtcGxlKQorICAgICAgICBzZWxmLnJlcXVlc3QuYWRkZmluYWxpemVyKGNvbmZp
Zy5fZW5zdXJlX3VuY29uZmlndXJlKQorICAgICAgICByZXR1cm4gY29uZmlnCisKKyAgICBkZWYg
cGFyc2Vjb25maWd1cmUoc2VsZiwgKmFyZ3MpOgorICAgICAgICAiIiJSZXR1cm4gYSBuZXcgcHku
dGVzdCBjb25maWd1cmVkIENvbmZpZyBpbnN0YW5jZS4KKworICAgICAgICBUaGlzIHJldHVybnMg
YSBuZXcgOnB5OmNsYXNzOmBfcHl0ZXN0LmNvbmZpZy5Db25maWdgIGluc3RhbmNlCisgICAgICAg
IGxpa2UgOnB5Om1ldGg6YHBhcnNlY29uZmlnYCwgYnV0IGFsc28gY2FsbHMgdGhlCisgICAgICAg
IHB5dGVzdF9jb25maWd1cmUgaG9vay4KKworICAgICAgICAiIiIKKyAgICAgICAgY29uZmlnID0g
c2VsZi5wYXJzZWNvbmZpZygqYXJncykKKyAgICAgICAgY29uZmlnLl9kb19jb25maWd1cmUoKQor
ICAgICAgICBzZWxmLnJlcXVlc3QuYWRkZmluYWxpemVyKGNvbmZpZy5fZW5zdXJlX3VuY29uZmln
dXJlKQorICAgICAgICByZXR1cm4gY29uZmlnCisKKyAgICBkZWYgZ2V0aXRlbShzZWxmLCAgc291
cmNlLCBmdW5jbmFtZT0idGVzdF9mdW5jIik6CisgICAgICAgICIiIlJldHVybiB0aGUgdGVzdCBp
dGVtIGZvciBhIHRlc3QgZnVuY3Rpb24uCisKKyAgICAgICAgVGhpcyB3cml0ZXMgdGhlIHNvdXJj
ZSB0byBhIHB5dGhvbiBmaWxlIGFuZCBydW5zIHB5LnRlc3QncworICAgICAgICBjb2xsZWN0aW9u
IG9uIHRoZSByZXN1bHRpbmcgbW9kdWxlLCByZXR1cm5pbmcgdGhlIHRlc3QgaXRlbQorICAgICAg
ICBmb3IgdGhlIHJlcXVlc3RlZCBmdW5jdGlvbiBuYW1lLgorCisgICAgICAgIDpwYXJhbSBzb3Vy
Y2U6IFRoZSBtb2R1bGUgc291cmNlLgorCisgICAgICAgIDpwYXJhbSBmdW5jbmFtZTogVGhlIG5h
bWUgb2YgdGhlIHRlc3QgZnVuY3Rpb24gZm9yIHdoaWNoIHRoZQorICAgICAgICAgICBJdGVtIG11
c3QgYmUgcmV0dXJuZWQuCisKKyAgICAgICAgIiIiCisgICAgICAgIGl0ZW1zID0gc2VsZi5nZXRp
dGVtcyhzb3VyY2UpCisgICAgICAgIGZvciBpdGVtIGluIGl0ZW1zOgorICAgICAgICAgICAgaWYg
aXRlbS5uYW1lID09IGZ1bmNuYW1lOgorICAgICAgICAgICAgICAgIHJldHVybiBpdGVtCisgICAg
ICAgIGFzc2VydCAwLCAiJXIgaXRlbSBub3QgZm91bmQgaW4gbW9kdWxlOlxuJXNcbml0ZW1zOiAl
cyIgJSgKKyAgICAgICAgICAgICAgICAgIGZ1bmNuYW1lLCBzb3VyY2UsIGl0ZW1zKQorCisgICAg
ZGVmIGdldGl0ZW1zKHNlbGYsICBzb3VyY2UpOgorICAgICAgICAiIiJSZXR1cm4gYWxsIHRlc3Qg
aXRlbXMgY29sbGVjdGVkIGZyb20gdGhlIG1vZHVsZS4KKworICAgICAgICBUaGlzIHdyaXRlcyB0
aGUgc291cmNlIHRvIGEgcHl0aG9uIGZpbGUgYW5kIHJ1bnMgcHkudGVzdCdzCisgICAgICAgIGNv
bGxlY3Rpb24gb24gdGhlIHJlc3VsdGluZyBtb2R1bGUsIHJldHVybmluZyBhbGwgdGVzdCBpdGVt
cworICAgICAgICBjb250YWluZWQgd2l0aGluLgorCisgICAgICAgICIiIgorICAgICAgICBtb2Rj
b2wgPSBzZWxmLmdldG1vZHVsZWNvbChzb3VyY2UpCisgICAgICAgIHJldHVybiBzZWxmLmdlbml0
ZW1zKFttb2Rjb2xdKQorCisgICAgZGVmIGdldG1vZHVsZWNvbChzZWxmLCAgc291cmNlLCBjb25m
aWdhcmdzPSgpLCB3aXRoaW5pdD1GYWxzZSk6CisgICAgICAgICIiIlJldHVybiB0aGUgbW9kdWxl
IGNvbGxlY3Rpb24gbm9kZSBmb3IgYGBzb3VyY2VgYC4KKworICAgICAgICBUaGlzIHdyaXRlcyBg
YHNvdXJjZWBgIHRvIGEgZmlsZSB1c2luZyA6cHk6bWV0aDpgbWFrZXB5ZmlsZWAKKyAgICAgICAg
YW5kIHRoZW4gcnVucyB0aGUgcHkudGVzdCBjb2xsZWN0aW9uIG9uIGl0LCByZXR1cm5pbmcgdGhl
CisgICAgICAgIGNvbGxlY3Rpb24gbm9kZSBmb3IgdGhlIHRlc3QgbW9kdWxlLgorCisgICAgICAg
IDpwYXJhbSBzb3VyY2U6IFRoZSBzb3VyY2UgY29kZSBvZiB0aGUgbW9kdWxlIHRvIGNvbGxlY3Qu
CisKKyAgICAgICAgOnBhcmFtIGNvbmZpZ2FyZ3M6IEFueSBleHRyYSBhcmd1bWVudHMgdG8gcGFz
cyB0bworICAgICAgICAgICA6cHk6bWV0aDpgcGFyc2Vjb25maWd1cmVgLgorCisgICAgICAgIDpw
YXJhbSB3aXRoaW5pdDogV2hldGhlciB0byBhbHNvIHdyaXRlIGEgYGBfX2luaXRfXy5weWBgIGZp
bGUKKyAgICAgICAgICAgdG8gdGhlIHRlbXBvcmFybHkgZGlyZWN0b3J5IHRvIGVuc3VyZSBpdCBp
cyBhIHBhY2thZ2UuCisKKyAgICAgICAgIiIiCisgICAgICAgIGt3ID0ge3NlbGYucmVxdWVzdC5m
dW5jdGlvbi5fX25hbWVfXzogU291cmNlKHNvdXJjZSkuc3RyaXAoKX0KKyAgICAgICAgcGF0aCA9
IHNlbGYubWFrZXB5ZmlsZSgqKmt3KQorICAgICAgICBpZiB3aXRoaW5pdDoKKyAgICAgICAgICAg
IHNlbGYubWFrZXB5ZmlsZShfX2luaXRfXyA9ICIjIikKKyAgICAgICAgc2VsZi5jb25maWcgPSBj
b25maWcgPSBzZWxmLnBhcnNlY29uZmlndXJlKHBhdGgsICpjb25maWdhcmdzKQorICAgICAgICBu
b2RlID0gc2VsZi5nZXRub2RlKGNvbmZpZywgcGF0aCkKKyAgICAgICAgcmV0dXJuIG5vZGUKKwor
ICAgIGRlZiBjb2xsZWN0X2J5X25hbWUoc2VsZiwgbW9kY29sLCBuYW1lKToKKyAgICAgICAgIiIi
UmV0dXJuIHRoZSBjb2xsZWN0aW9uIG5vZGUgZm9yIG5hbWUgZnJvbSB0aGUgbW9kdWxlIGNvbGxl
Y3Rpb24uCisKKyAgICAgICAgVGhpcyB3aWxsIHNlYXJjaCBhIG1vZHVsZSBjb2xsZWN0aW9uIG5v
ZGUgZm9yIGEgY29sbGVjdGlvbgorICAgICAgICBub2RlIG1hdGNoaW5nIHRoZSBnaXZlbiBuYW1l
LgorCisgICAgICAgIDpwYXJhbSBtb2Rjb2w6IEEgbW9kdWxlIGNvbGxlY3Rpb24gbm9kZSwgc2Vl
CisgICAgICAgICAgIDpweTptZXRoOmBnZXRtb2R1bGVjb2xgLgorCisgICAgICAgIDpwYXJhbSBu
YW1lOiBUaGUgbmFtZSBvZiB0aGUgbm9kZSB0byByZXR1cm4uCisKKyAgICAgICAgIiIiCisgICAg
ICAgIGZvciBjb2xpdGVtIGluIG1vZGNvbC5fbWVtb2NvbGxlY3QoKToKKyAgICAgICAgICAgIGlm
IGNvbGl0ZW0ubmFtZSA9PSBuYW1lOgorICAgICAgICAgICAgICAgIHJldHVybiBjb2xpdGVtCisK
KyAgICBkZWYgcG9wZW4oc2VsZiwgY21kYXJncywgc3Rkb3V0LCBzdGRlcnIsICoqa3cpOgorICAg
ICAgICAiIiJJbnZva2Ugc3VicHJvY2Vzcy5Qb3Blbi4KKworICAgICAgICBUaGlzIGNhbGxzIHN1
YnByb2Nlc3MuUG9wZW4gbWFraW5nIHN1cmUgdGhlIGN1cnJlbnQgd29ya2luZworICAgICAgICBk
aXJlY3RvcnkgaXMgdGhlIFBZVEhPTlBBVEguCisKKyAgICAgICAgWW91IHByb2JhYmx5IHdhbnQg
dG8gdXNlIDpweTptZXRoOmBydW5gIGluc3RlYWQuCisKKyAgICAgICAgIiIiCisgICAgICAgIGVu
diA9IG9zLmVudmlyb24uY29weSgpCisgICAgICAgIGVudlsnUFlUSE9OUEFUSCddID0gb3MucGF0
aHNlcC5qb2luKGZpbHRlcihOb25lLCBbCisgICAgICAgICAgICBzdHIob3MuZ2V0Y3dkKCkpLCBl
bnYuZ2V0KCdQWVRIT05QQVRIJywgJycpXSkpCisgICAgICAgIGt3WydlbnYnXSA9IGVudgorICAg
ICAgICByZXR1cm4gc3VicHJvY2Vzcy5Qb3BlbihjbWRhcmdzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGRvdXQ9c3Rkb3V0LCBzdGRlcnI9c3RkZXJyLCAqKmt3KQorCisgICAg
ZGVmIHJ1bihzZWxmLCAqY21kYXJncyk6CisgICAgICAgICIiIlJ1biBhIGNvbW1hbmQgd2l0aCBh
cmd1bWVudHMuCisKKyAgICAgICAgUnVuIGEgcHJvY2VzcyB1c2luZyBzdWJwcm9jZXNzLlBvcGVu
IHNhdmluZyB0aGUgc3Rkb3V0IGFuZAorICAgICAgICBzdGRlcnIuCisKKyAgICAgICAgUmV0dXJu
cyBhIDpweTpjbGFzczpgUnVuUmVzdWx0YC4KKworICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJu
IHNlbGYuX3J1bigqY21kYXJncykKKworICAgIGRlZiBfcnVuKHNlbGYsICpjbWRhcmdzKToKKyAg
ICAgICAgY21kYXJncyA9IFtzdHIoeCkgZm9yIHggaW4gY21kYXJnc10KKyAgICAgICAgcDEgPSBz
ZWxmLnRtcGRpci5qb2luKCJzdGRvdXQiKQorICAgICAgICBwMiA9IHNlbGYudG1wZGlyLmpvaW4o
InN0ZGVyciIpCisgICAgICAgIHByaW50XygicnVubmluZzoiLCAnICcuam9pbihjbWRhcmdzKSkK
KyAgICAgICAgcHJpbnRfKCIgICAgIGluOiIsIHN0cihweS5wYXRoLmxvY2FsKCkpKQorICAgICAg
ICBmMSA9IGNvZGVjcy5vcGVuKHN0cihwMSksICJ3IiwgZW5jb2Rpbmc9InV0ZjgiKQorICAgICAg
ICBmMiA9IGNvZGVjcy5vcGVuKHN0cihwMiksICJ3IiwgZW5jb2Rpbmc9InV0ZjgiKQorICAgICAg
ICB0cnk6CisgICAgICAgICAgICBub3cgPSB0aW1lLnRpbWUoKQorICAgICAgICAgICAgcG9wZW4g
PSBzZWxmLnBvcGVuKGNtZGFyZ3MsIHN0ZG91dD1mMSwgc3RkZXJyPWYyLAorICAgICAgICAgICAg
ICAgIGNsb3NlX2Zkcz0oc3lzLnBsYXRmb3JtICE9ICJ3aW4zMiIpKQorICAgICAgICAgICAgcmV0
ID0gcG9wZW4ud2FpdCgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmMS5jbG9zZSgp
CisgICAgICAgICAgICBmMi5jbG9zZSgpCisgICAgICAgIGYxID0gY29kZWNzLm9wZW4oc3RyKHAx
KSwgInIiLCBlbmNvZGluZz0idXRmOCIpCisgICAgICAgIGYyID0gY29kZWNzLm9wZW4oc3RyKHAy
KSwgInIiLCBlbmNvZGluZz0idXRmOCIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG91dCA9
IGYxLnJlYWQoKS5zcGxpdGxpbmVzKCkKKyAgICAgICAgICAgIGVyciA9IGYyLnJlYWQoKS5zcGxp
dGxpbmVzKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGYxLmNsb3NlKCkKKyAgICAg
ICAgICAgIGYyLmNsb3NlKCkKKyAgICAgICAgc2VsZi5fZHVtcF9saW5lcyhvdXQsIHN5cy5zdGRv
dXQpCisgICAgICAgIHNlbGYuX2R1bXBfbGluZXMoZXJyLCBzeXMuc3RkZXJyKQorICAgICAgICBy
ZXR1cm4gUnVuUmVzdWx0KHJldCwgb3V0LCBlcnIsIHRpbWUudGltZSgpLW5vdykKKworICAgIGRl
ZiBfZHVtcF9saW5lcyhzZWxmLCBsaW5lcywgZnApOgorICAgICAgICB0cnk6CisgICAgICAgICAg
ICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgICAgICAgICBweS5idWlsdGluLnByaW50Xyhs
aW5lLCBmaWxlPWZwKQorICAgICAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOgorICAgICAg
ICAgICAgcHJpbnQoImNvdWxkbid0IHByaW50IHRvICVzIGJlY2F1c2Ugb2YgZW5jb2RpbmciICUg
KGZwLCkpCisKKyAgICBkZWYgX2dldHB5dGVzdGFyZ3Moc2VsZik6CisgICAgICAgICMgd2UgY2Fu
bm90IHVzZSAiKHN5cy5leGVjdXRhYmxlLHNjcmlwdCkiCisgICAgICAgICMgYmVjYXVzZSBvbiB3
aW5kb3dzIHRoZSBzY3JpcHQgaXMgZS5nLiBhIHB5LnRlc3QuZXhlCisgICAgICAgIHJldHVybiAo
c3lzLmV4ZWN1dGFibGUsIF9weXRlc3RfZnVsbHBhdGgsKSAjIG5vcWEKKworICAgIGRlZiBydW5w
eXRob24oc2VsZiwgc2NyaXB0KToKKyAgICAgICAgIiIiUnVuIGEgcHl0aG9uIHNjcmlwdCB1c2lu
ZyBzeXMuZXhlY3V0YWJsZSBhcyBpbnRlcnByZXRlci4KKworICAgICAgICBSZXR1cm5zIGEgOnB5
OmNsYXNzOmBSdW5SZXN1bHRgLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYucnVu
KHN5cy5leGVjdXRhYmxlLCBzY3JpcHQpCisKKyAgICBkZWYgcnVucHl0aG9uX2Moc2VsZiwgY29t
bWFuZCk6CisgICAgICAgICIiIlJ1biBweXRob24gLWMgImNvbW1hbmQiLCByZXR1cm4gYSA6cHk6
Y2xhc3M6YFJ1blJlc3VsdGAuIiIiCisgICAgICAgIHJldHVybiBzZWxmLnJ1bihzeXMuZXhlY3V0
YWJsZSwgIi1jIiwgY29tbWFuZCkKKworICAgIGRlZiBydW5weXRlc3Rfc3VicHJvY2VzcyhzZWxm
LCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAiIiJSdW4gcHkudGVzdCBhcyBhIHN1YnByb2Nl
c3Mgd2l0aCBnaXZlbiBhcmd1bWVudHMuCisKKyAgICAgICAgQW55IHBsdWdpbnMgYWRkZWQgdG8g
dGhlIDpweTphdHRyOmBwbHVnaW5zYCBsaXN0IHdpbGwgYWRkZWQKKyAgICAgICAgdXNpbmcgdGhl
IGBgLXBgYCBjb21tYW5kIGxpbmUgb3B0aW9uLiAgQWRkdGlvbmFsbHkKKyAgICAgICAgYGAtLWJh
c2V0ZW1wYGAgaXMgdXNlZCBwdXQgYW55IHRlbXBvcmFyeSBmaWxlcyBhbmQgZGlyZWN0b3JpZXMK
KyAgICAgICAgaW4gYSBudW1iZXJlZCBkaXJlY3RvcnkgcHJlZml4ZWQgd2l0aCAicnVucHl0ZXN0
LSIgc28gdGhleSBkbworICAgICAgICBub3QgY29uZmxpY3Qgd2l0aCB0aGUgbm9ybWFsIG51bWJl
cmQgcHl0ZXN0IGxvY2F0aW9uIGZvcgorICAgICAgICB0ZW1wb3JhcnkgZmlsZXMgYW5kIGRpcmVj
dG9yaWVzLgorCisgICAgICAgIFJldHVybnMgYSA6cHk6Y2xhc3M6YFJ1blJlc3VsdGAuCisKKyAg
ICAgICAgIiIiCisgICAgICAgIHAgPSBweS5wYXRoLmxvY2FsLm1ha2VfbnVtYmVyZWRfZGlyKHBy
ZWZpeD0icnVucHl0ZXN0LSIsCisgICAgICAgICAgICBrZWVwPU5vbmUsIHJvb3RkaXI9c2VsZi50
bXBkaXIpCisgICAgICAgIGFyZ3MgPSAoJy0tYmFzZXRlbXA9JXMnICUgcCwgKSArIGFyZ3MKKyAg
ICAgICAgI2ZvciB4IGluIGFyZ3M6CisgICAgICAgICMgICAgaWYgJy0tY29uZmN1dGRpcicgaW4g
c3RyKHgpOgorICAgICAgICAjICAgICAgICBicmVhaworICAgICAgICAjZWxzZToKKyAgICAgICAg
IyAgICBwYXNzCisgICAgICAgICMgICAgYXJncyA9ICgnLS1jb25mY3V0ZGlyPS4nLCkgKyBhcmdz
CisgICAgICAgIHBsdWdpbnMgPSBbeCBmb3IgeCBpbiBzZWxmLnBsdWdpbnMgaWYgaXNpbnN0YW5j
ZSh4LCBzdHIpXQorICAgICAgICBpZiBwbHVnaW5zOgorICAgICAgICAgICAgYXJncyA9ICgnLXAn
LCBwbHVnaW5zWzBdKSArIGFyZ3MKKyAgICAgICAgYXJncyA9IHNlbGYuX2dldHB5dGVzdGFyZ3Mo
KSArIGFyZ3MKKyAgICAgICAgcmV0dXJuIHNlbGYucnVuKCphcmdzKQorCisgICAgZGVmIHNwYXdu
X3B5dGVzdChzZWxmLCBzdHJpbmcsIGV4cGVjdF90aW1lb3V0PTEwLjApOgorICAgICAgICAiIiJS
dW4gcHkudGVzdCB1c2luZyBwZXhwZWN0LgorCisgICAgICAgIFRoaXMgbWFrZXMgc3VyZSB0byB1
c2UgdGhlIHJpZ2h0IHB5LnRlc3QgYW5kIHNldHMgdXAgdGhlCisgICAgICAgIHRlbXBvcmFyeSBk
aXJlY3RvcnkgbG9jYXRpb25zLgorCisgICAgICAgIFRoZSBwZXhwZWN0IGNoaWxkIGlzIHJldHVy
bmVkLgorCisgICAgICAgICIiIgorICAgICAgICBiYXNldGVtcCA9IHNlbGYudG1wZGlyLm1rZGly
KCJwZXhwZWN0IikKKyAgICAgICAgaW52b2tlID0gIiAiLmpvaW4obWFwKHN0ciwgc2VsZi5fZ2V0
cHl0ZXN0YXJncygpKSkKKyAgICAgICAgY21kID0gIiVzIC0tYmFzZXRlbXA9JXMgJXMiICUgKGlu
dm9rZSwgYmFzZXRlbXAsIHN0cmluZykKKyAgICAgICAgcmV0dXJuIHNlbGYuc3Bhd24oY21kLCBl
eHBlY3RfdGltZW91dD1leHBlY3RfdGltZW91dCkKKworICAgIGRlZiBzcGF3bihzZWxmLCBjbWQs
IGV4cGVjdF90aW1lb3V0PTEwLjApOgorICAgICAgICAiIiJSdW4gYSBjb21tYW5kIHVzaW5nIHBl
eHBlY3QuCisKKyAgICAgICAgVGhlIHBleHBlY3QgY2hpbGQgaXMgcmV0dXJuZWQuCisgICAgICAg
ICIiIgorICAgICAgICBwZXhwZWN0ID0gcHl0ZXN0LmltcG9ydG9yc2tpcCgicGV4cGVjdCIsICIz
LjAiKQorICAgICAgICBpZiBoYXNhdHRyKHN5cywgJ3B5cHlfdmVyc2lvbl9pbmZvJykgYW5kICc2
NCcgaW4gcGxhdGZvcm0ubWFjaGluZSgpOgorICAgICAgICAgICAgcHl0ZXN0LnNraXAoInB5cHkt
NjQgYml0IG5vdCBzdXBwb3J0ZWQiKQorICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gImRhcndp
biI6CisgICAgICAgICAgICBweXRlc3QueGZhaWwoInBleHBlY3QgZG9lcyBub3Qgd29yayByZWxp
YWJseSBvbiBkYXJ3aW4/ISIpCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCJm
cmVlYnNkIik6CisgICAgICAgICAgICBweXRlc3QueGZhaWwoInBleHBlY3QgZG9lcyBub3Qgd29y
ayByZWxpYWJseSBvbiBmcmVlYnNkIikKKyAgICAgICAgbG9nZmlsZSA9IHNlbGYudG1wZGlyLmpv
aW4oInNwYXduLm91dCIpLm9wZW4oIndiIikKKyAgICAgICAgY2hpbGQgPSBwZXhwZWN0LnNwYXdu
KGNtZCwgbG9nZmlsZT1sb2dmaWxlKQorICAgICAgICBzZWxmLnJlcXVlc3QuYWRkZmluYWxpemVy
KGxvZ2ZpbGUuY2xvc2UpCisgICAgICAgIGNoaWxkLnRpbWVvdXQgPSBleHBlY3RfdGltZW91dAor
ICAgICAgICByZXR1cm4gY2hpbGQKKworZGVmIGdldGRlY29kZWQob3V0KToKKyAgICAgICAgdHJ5
OgorICAgICAgICAgICAgcmV0dXJuIG91dC5kZWNvZGUoInV0Zi04IikKKyAgICAgICAgZXhjZXB0
IFVuaWNvZGVEZWNvZGVFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiAiSU5URVJOQUwgbm90LXV0
ZjgtZGVjb2RlYWJsZSwgdHJ1bmNhdGVkIHN0cmluZzpcbiVzIiAlICgKKyAgICAgICAgICAgICAg
ICAgICAgcHkuaW8uc2FmZXJlcHIob3V0KSwpCisKKworY2xhc3MgTGluZUNvbXA6CisgICAgZGVm
IF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLnN0cmluZ2lvID0gcHkuaW8uVGV4dElPKCkK
KworICAgIGRlZiBhc3NlcnRfY29udGFpbnNfbGluZXMoc2VsZiwgbGluZXMyKToKKyAgICAgICAg
IiIiIGFzc2VydCB0aGF0IGxpbmVzMiBhcmUgY29udGFpbmVkIChsaW5lYXJseSkgaW4gbGluZXMx
LgorICAgICAgICAgICAgcmV0dXJuIGEgbGlzdCBvZiBleHRyYWxpbmVzIGZvdW5kLgorICAgICAg
ICAiIiIKKyAgICAgICAgX190cmFjZWJhY2toaWRlX18gPSBUcnVlCisgICAgICAgIHZhbCA9IHNl
bGYuc3RyaW5naW8uZ2V0dmFsdWUoKQorICAgICAgICBzZWxmLnN0cmluZ2lvLnRydW5jYXRlKDAp
CisgICAgICAgIHNlbGYuc3RyaW5naW8uc2VlaygwKQorICAgICAgICBsaW5lczEgPSB2YWwuc3Bs
aXQoIlxuIikKKyAgICAgICAgcmV0dXJuIExpbmVNYXRjaGVyKGxpbmVzMSkuZm5tYXRjaF9saW5l
cyhsaW5lczIpCisKKworY2xhc3MgTGluZU1hdGNoZXI6CisgICAgIiIiRmxleGlibGUgbWF0Y2hp
bmcgb2YgdGV4dC4KKworICAgIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBjbGFzcyB0byB0ZXN0IGxh
cmdlIHRleHRzIGxpa2UgdGhlIG91dHB1dCBvZgorICAgIGNvbW1hbmRzLgorCisgICAgVGhlIGNv
bnN0cnVjdG9yIHRha2VzIGEgbGlzdCBvZiBsaW5lcyB3aXRob3V0IHRoZWlyIHRyYWlsaW5nCisg
ICAgbmV3bGluZXMsIGkuZS4gYGB0ZXh0LnNwbGl0bGluZXMoKWBgLgorCisgICAgIiIiCisKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgIGxpbmVzKToKKyAgICAgICAgc2VsZi5saW5lcyA9IGxpbmVz
CisKKyAgICBkZWYgc3RyKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGVudGlyZSBvcmln
aW5hbCB0ZXh0LiIiIgorICAgICAgICByZXR1cm4gIlxuIi5qb2luKHNlbGYubGluZXMpCisKKyAg
ICBkZWYgX2dldGxpbmVzKHNlbGYsIGxpbmVzMik6CisgICAgICAgIGlmIGlzaW5zdGFuY2UobGlu
ZXMyLCBzdHIpOgorICAgICAgICAgICAgbGluZXMyID0gU291cmNlKGxpbmVzMikKKyAgICAgICAg
aWYgaXNpbnN0YW5jZShsaW5lczIsIFNvdXJjZSk6CisgICAgICAgICAgICBsaW5lczIgPSBsaW5l
czIuc3RyaXAoKS5saW5lcworICAgICAgICByZXR1cm4gbGluZXMyCisKKyAgICBkZWYgZm5tYXRj
aF9saW5lc19yYW5kb20oc2VsZiwgbGluZXMyKToKKyAgICAgICAgIiIiQ2hlY2sgbGluZXMgZXhp
c3QgaW4gdGhlIG91dHB1dC4KKworICAgICAgICBUaGUgYXJndW1lbnQgaXMgYSBsaXN0IG9mIGxp
bmVzIHdoaWNoIGhhdmUgdG8gb2NjdXIgaW4gdGhlCisgICAgICAgIG91dHB1dCwgaW4gYW55IG9y
ZGVyLiAgRWFjaCBsaW5lIGNhbiBjb250YWluIGdsb2Igd2hpbGRjYXJkcy4KKworICAgICAgICAi
IiIKKyAgICAgICAgbGluZXMyID0gc2VsZi5fZ2V0bGluZXMobGluZXMyKQorICAgICAgICBmb3Ig
bGluZSBpbiBsaW5lczI6CisgICAgICAgICAgICBmb3IgeCBpbiBzZWxmLmxpbmVzOgorICAgICAg
ICAgICAgICAgIGlmIGxpbmUgPT0geCBvciBmbm1hdGNoKHgsIGxpbmUpOgorICAgICAgICAgICAg
ICAgICAgICBwcmludF8oIm1hdGNoZWQ6ICIsIHJlcHIobGluZSkpCisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVl
RXJyb3IoImxpbmUgJXIgbm90IGZvdW5kIGluIG91dHB1dCIgJSBsaW5lKQorCisgICAgZGVmIGdl
dF9saW5lc19hZnRlcihzZWxmLCBmbmxpbmUpOgorICAgICAgICAiIiJSZXR1cm4gYWxsIGxpbmVz
IGZvbGxvd2luZyB0aGUgZ2l2ZW4gbGluZSBpbiB0aGUgdGV4dC4KKworICAgICAgICBUaGUgZ2l2
ZW4gbGluZSBjYW4gY29udGFpbiBnbG9iIHdpbGRjYXJkcy4KKyAgICAgICAgIiIiCisgICAgICAg
IGZvciBpLCBsaW5lIGluIGVudW1lcmF0ZShzZWxmLmxpbmVzKToKKyAgICAgICAgICAgIGlmIGZu
bGluZSA9PSBsaW5lIG9yIGZubWF0Y2gobGluZSwgZm5saW5lKToKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gc2VsZi5saW5lc1tpKzE6XQorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJsaW5lICVy
IG5vdCBmb3VuZCBpbiBvdXRwdXQiICUgZm5saW5lKQorCisgICAgZGVmIGZubWF0Y2hfbGluZXMo
c2VsZiwgbGluZXMyKToKKyAgICAgICAgIiIiU2VhcmNoIHRoZSB0ZXh0IGZvciBtYXRjaGluZyBs
aW5lcy4KKworICAgICAgICBUaGUgYXJndW1lbnQgaXMgYSBsaXN0IG9mIGxpbmVzIHdoaWNoIGhh
dmUgdG8gbWF0Y2ggYW5kIGNhbgorICAgICAgICB1c2UgZ2xvYiB3aWxkY2FyZHMuICBJZiB0aGV5
IGRvIG5vdCBtYXRjaCBhbiBweXRlc3QuZmFpbCgpIGlzCisgICAgICAgIGNhbGxlZC4gIFRoZSBt
YXRjaGVzIGFuZCBub24tbWF0Y2hlcyBhcmUgYWxzbyBwcmludGVkIG9uCisgICAgICAgIHN0ZG91
dC4KKworICAgICAgICAiIiIKKyAgICAgICAgZGVmIHNob3coYXJnMSwgYXJnMik6CisgICAgICAg
ICAgICBweS5idWlsdGluLnByaW50XyhhcmcxLCBhcmcyLCBmaWxlPXN5cy5zdGRlcnIpCisgICAg
ICAgIGxpbmVzMiA9IHNlbGYuX2dldGxpbmVzKGxpbmVzMikKKyAgICAgICAgbGluZXMxID0gc2Vs
Zi5saW5lc1s6XQorICAgICAgICBuZXh0bGluZSA9IE5vbmUKKyAgICAgICAgZXh0cmFsaW5lcyA9
IFtdCisgICAgICAgIF9fdHJhY2ViYWNraGlkZV9fID0gVHJ1ZQorICAgICAgICBmb3IgbGluZSBp
biBsaW5lczI6CisgICAgICAgICAgICBub21hdGNocHJpbnRlZCA9IEZhbHNlCisgICAgICAgICAg
ICB3aGlsZSBsaW5lczE6CisgICAgICAgICAgICAgICAgbmV4dGxpbmUgPSBsaW5lczEucG9wKDAp
CisgICAgICAgICAgICAgICAgaWYgbGluZSA9PSBuZXh0bGluZToKKyAgICAgICAgICAgICAgICAg
ICAgc2hvdygiZXhhY3QgbWF0Y2g6IiwgcmVwcihsaW5lKSkKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWsKKyAgICAgICAgICAgICAgICBlbGlmIGZubWF0Y2gobmV4dGxpbmUsIGxpbmUpOgorICAg
ICAgICAgICAgICAgICAgICBzaG93KCJmbm1hdGNoOiIsIHJlcHIobGluZSkpCisgICAgICAgICAg
ICAgICAgICAgIHNob3coIiAgIHdpdGg6IiwgcmVwcihuZXh0bGluZSkpCisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAg
aWYgbm90IG5vbWF0Y2hwcmludGVkOgorICAgICAgICAgICAgICAgICAgICAgICAgc2hvdygibm9t
YXRjaDoiLCByZXByKGxpbmUpKQorICAgICAgICAgICAgICAgICAgICAgICAgbm9tYXRjaHByaW50
ZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIHNob3coIiAgICBhbmQ6IiwgcmVwcihuZXh0
bGluZSkpCisgICAgICAgICAgICAgICAgZXh0cmFsaW5lcy5hcHBlbmQobmV4dGxpbmUpCisgICAg
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHB5dGVzdC5mYWlsKCJyZW1haW5zIHVubWF0
Y2hlZDogJXIsIHNlZSBzdGRlcnIiICUgKGxpbmUsKSkKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRl
c3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9weXRob24ucHkgYi9XZWJEcml2
ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvcHl0aG9uLnB5Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zNTgwZWFlMDc0ZgotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVz
dC9weXRob24ucHkKQEAgLTAsMCArMSwyMzAyIEBACisiIiIgUHl0aG9uIHRlc3QgZGlzY292ZXJ5
LCBzZXR1cCBhbmQgcnVuIG9mIHRlc3QgZnVuY3Rpb25zLiAiIiIKK2ltcG9ydCBmbm1hdGNoCitp
bXBvcnQgZnVuY3Rvb2xzCitpbXBvcnQgaW5zcGVjdAoraW1wb3J0IHJlCitpbXBvcnQgdHlwZXMK
K2ltcG9ydCBzeXMKKworaW1wb3J0IHB5CitpbXBvcnQgcHl0ZXN0Citmcm9tIF9weXRlc3QuX2Nv
ZGUuY29kZSBpbXBvcnQgVGVybWluYWxSZXByCitmcm9tIF9weXRlc3QubWFyayBpbXBvcnQgTWFy
a0RlY29yYXRvciwgTWFya2VyRXJyb3IKKwordHJ5OgorICAgIGltcG9ydCBlbnVtCitleGNlcHQg
SW1wb3J0RXJyb3I6ICAjIHByYWdtYTogbm8gY292ZXIKKyAgICAjIE9ubHkgYXZhaWxhYmxlIGlu
IFB5dGhvbiAzLjQrIG9yIGFzIGEgYmFja3BvcnQKKyAgICBlbnVtID0gTm9uZQorCitpbXBvcnQg
X3B5dGVzdAoraW1wb3J0IF9weXRlc3QuX3BsdWdneSBhcyBwbHVnZ3kKKworY3V0ZGlyMiA9IHB5
LnBhdGgubG9jYWwoX3B5dGVzdC5fX2ZpbGVfXykuZGlycGF0aCgpCitjdXRkaXIxID0gcHkucGF0
aC5sb2NhbChwbHVnZ3kuX19maWxlX18ucnN0cmlwKCJvYyIpKQorCisKK05vbmVUeXBlID0gdHlw
ZShOb25lKQorTk9UU0VUID0gb2JqZWN0KCkKK2lzZnVuY3Rpb24gPSBpbnNwZWN0LmlzZnVuY3Rp
b24KK2lzY2xhc3MgPSBpbnNwZWN0LmlzY2xhc3MKK2NhbGxhYmxlID0gcHkuYnVpbHRpbi5jYWxs
YWJsZQorIyB1c2VkIHRvIHdvcmsgYXJvdW5kIGEgcHl0aG9uMiBleGNlcHRpb24gaW5mbyBsZWFr
CitleGNfY2xlYXIgPSBnZXRhdHRyKHN5cywgJ2V4Y19jbGVhcicsIGxhbWJkYTogTm9uZSkKKyMg
VGhlIHR5cGUgb2YgcmUuY29tcGlsZSBvYmplY3RzIGlzIG5vdCBleHBvc2VkIGluIFB5dGhvbi4K
K1JFR0VYX1RZUEUgPSB0eXBlKHJlLmNvbXBpbGUoJycpKQorCitfUFkzID0gc3lzLnZlcnNpb25f
aW5mbyA+ICgzLCAwKQorX1BZMiA9IG5vdCBfUFkzCisKKworaWYgaGFzYXR0cihpbnNwZWN0LCAn
c2lnbmF0dXJlJyk6CisgICAgZGVmIF9mb3JtYXRfYXJncyhmdW5jKToKKyAgICAgICAgcmV0dXJu
IHN0cihpbnNwZWN0LnNpZ25hdHVyZShmdW5jKSkKK2Vsc2U6CisgICAgZGVmIF9mb3JtYXRfYXJn
cyhmdW5jKToKKyAgICAgICAgcmV0dXJuIGluc3BlY3QuZm9ybWF0YXJnc3BlYygqaW5zcGVjdC5n
ZXRhcmdzcGVjKGZ1bmMpKQorCitpZiAgc3lzLnZlcnNpb25faW5mb1s6Ml0gPT0gKDIsIDYpOgor
ICAgIGRlZiBpc2NsYXNzKG9iamVjdCk6CisgICAgICAgICIiIiBSZXR1cm4gdHJ1ZSBpZiB0aGUg
b2JqZWN0IGlzIGEgY2xhc3MuIE92ZXJyaWRlcyBpbnNwZWN0LmlzY2xhc3MgZm9yCisgICAgICAg
IHB5dGhvbiAyLjYgYmVjYXVzZSBpdCB3aWxsIHJldHVybiBUcnVlIGZvciBvYmplY3RzIHdoaWNo
IGFsd2F5cyByZXR1cm4KKyAgICAgICAgc29tZXRoaW5nIG9uIF9fZ2V0YXR0cl9fIGNhbGxzIChz
ZWUgIzEwMzUpLgorICAgICAgICBCYWNrcG9ydCBvZiBodHRwczovL2hnLnB5dGhvbi5vcmcvY3B5
dGhvbi9yZXYvMzViZjhmN2E4ZWRjCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gaXNpbnN0
YW5jZShvYmplY3QsICh0eXBlLCB0eXBlcy5DbGFzc1R5cGUpKQorCitkZWYgX2hhc19wb3NpdGlv
bmFsX2FyZyhmdW5jKToKKyAgICByZXR1cm4gZnVuYy5fX2NvZGVfXy5jb19hcmdjb3VudAorCisK
K2RlZiBmaWx0ZXJfdHJhY2ViYWNrKGVudHJ5KToKKyAgICAjIGVudHJ5LnBhdGggbWlnaHQgc29t
ZXRpbWVzIHJldHVybiBhIHN0ciBvYmplY3Qgd2hlbiB0aGUgZW50cnkKKyAgICAjIHBvaW50cyB0
byBkeW5hbWljYWxseSBnZW5lcmF0ZWQgY29kZQorICAgICMgc2VlIGh0dHBzOi8vYml0YnVja2V0
Lm9yZy9weXRlc3QtZGV2L3B5L2lzc3Vlcy83MQorICAgIHJhd19maWxlbmFtZSA9IGVudHJ5LmZy
YW1lLmNvZGUucmF3LmNvX2ZpbGVuYW1lCisgICAgaXNfZ2VuZXJhdGVkID0gJzwnIGluIHJhd19m
aWxlbmFtZSBhbmQgJz4nIGluIHJhd19maWxlbmFtZQorICAgIGlmIGlzX2dlbmVyYXRlZDoKKyAg
ICAgICAgcmV0dXJuIEZhbHNlCisgICAgIyBlbnRyeS5wYXRoIG1pZ2h0IHBvaW50IHRvIGFuIGlu
ZXhpc3RpbmcgZmlsZSwgaW4gd2hpY2ggY2FzZSBpdCB3aWxsCisgICAgIyBhbHNzbyByZXR1cm4g
YSBzdHIgb2JqZWN0LiBzZWUgIzExMzMKKyAgICBwID0gcHkucGF0aC5sb2NhbChlbnRyeS5wYXRo
KQorICAgIHJldHVybiBwICE9IGN1dGRpcjEgYW5kIG5vdCBwLnJlbHRvKGN1dGRpcjIpCisKKwor
ZGVmIGdldF9yZWFsX2Z1bmMob2JqKToKKyAgICAiIiIgZ2V0cyB0aGUgcmVhbCBmdW5jdGlvbiBv
YmplY3Qgb2YgdGhlIChwb3NzaWJseSkgd3JhcHBlZCBvYmplY3QgYnkKKyAgICBmdW5jdG9vbHMu
d3JhcHMgb3IgZnVuY3Rvb2xzLnBhcnRpYWwuCisgICAgIiIiCisgICAgd2hpbGUgaGFzYXR0cihv
YmosICJfX3dyYXBwZWRfXyIpOgorICAgICAgICBvYmogPSBvYmouX193cmFwcGVkX18KKyAgICBp
ZiBpc2luc3RhbmNlKG9iaiwgZnVuY3Rvb2xzLnBhcnRpYWwpOgorICAgICAgICBvYmogPSBvYmou
ZnVuYworICAgIHJldHVybiBvYmoKKworZGVmIGdldGZzbGluZW5vKG9iaik6CisgICAgIyB4eHgg
bGV0IGRlY29yYXRvcnMgZXRjIHNwZWNpZnkgYSBzYW5lIG9yZGVyaW5nCisgICAgb2JqID0gZ2V0
X3JlYWxfZnVuYyhvYmopCisgICAgaWYgaGFzYXR0cihvYmosICdwbGFjZV9hcycpOgorICAgICAg
ICBvYmogPSBvYmoucGxhY2VfYXMKKyAgICBmc2xpbmVubyA9IF9weXRlc3QuX2NvZGUuZ2V0ZnNs
aW5lbm8ob2JqKQorICAgIGFzc2VydCBpc2luc3RhbmNlKGZzbGluZW5vWzFdLCBpbnQpLCBvYmoK
KyAgICByZXR1cm4gZnNsaW5lbm8KKworZGVmIGdldGltZnVuYyhmdW5jKToKKyAgICB0cnk6Cisg
ICAgICAgIHJldHVybiBmdW5jLl9fZnVuY19fCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgor
ICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gZnVuYy5pbV9mdW5jCisgICAgICAgIGV4
Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBmdW5jCisKK2RlZiBzYWZl
X2dldGF0dHIob2JqZWN0LCBuYW1lLCBkZWZhdWx0KToKKyAgICAiIiIgTGlrZSBnZXRhdHRyIGJ1
dCByZXR1cm4gZGVmYXVsdCB1cG9uIGFueSBFeGNlcHRpb24uCisKKyAgICBBdHRyaWJ1dGUgYWNj
ZXNzIGNhbiBwb3RlbnRpYWxseSBmYWlsIGZvciAnZXZpbCcgUHl0aG9uIG9iamVjdHMuCisgICAg
U2VlIGlzc3VlMjE0CisgICAgIiIiCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gZ2V0YXR0cihv
YmplY3QsIG5hbWUsIGRlZmF1bHQpCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgcmV0
dXJuIGRlZmF1bHQKKworCitjbGFzcyBGaXh0dXJlRnVuY3Rpb25NYXJrZXI6CisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIHNjb3BlLCBwYXJhbXMsCisgICAgICAgICAgICAgICAgIGF1dG91c2U9RmFs
c2UsIHlpZWxkY3R4PUZhbHNlLCBpZHM9Tm9uZSk6CisgICAgICAgIHNlbGYuc2NvcGUgPSBzY29w
ZQorICAgICAgICBzZWxmLnBhcmFtcyA9IHBhcmFtcworICAgICAgICBzZWxmLmF1dG91c2UgPSBh
dXRvdXNlCisgICAgICAgIHNlbGYueWllbGRjdHggPSB5aWVsZGN0eAorICAgICAgICBzZWxmLmlk
cyA9IGlkcworCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIGZ1bmN0aW9uKToKKyAgICAgICAgaWYg
aXNjbGFzcyhmdW5jdGlvbik6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAg
ICAgICAgICAgICAgICAiY2xhc3MgZml4dHVyZXMgbm90IHN1cHBvcnRlZCAobWF5IGJlIGluIHRo
ZSBmdXR1cmUpIikKKyAgICAgICAgZnVuY3Rpb24uX3B5dGVzdGZpeHR1cmVmdW5jdGlvbiA9IHNl
bGYKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uCisKKworZGVmIGZpeHR1cmUoc2NvcGU9ImZ1bmN0
aW9uIiwgcGFyYW1zPU5vbmUsIGF1dG91c2U9RmFsc2UsIGlkcz1Ob25lKToKKyAgICAiIiIgKHJl
dHVybiBhKSBkZWNvcmF0b3IgdG8gbWFyayBhIGZpeHR1cmUgZmFjdG9yeSBmdW5jdGlvbi4KKwor
ICAgIFRoaXMgZGVjb3JhdG9yIGNhbiBiZSB1c2VkICh3aXRoIG9yIG9yIHdpdGhvdXQgcGFyYW1l
dGVycykgdG8gZGVmaW5lCisgICAgYSBmaXh0dXJlIGZ1bmN0aW9uLiAgVGhlIG5hbWUgb2YgdGhl
IGZpeHR1cmUgZnVuY3Rpb24gY2FuIGxhdGVyIGJlCisgICAgcmVmZXJlbmNlZCB0byBjYXVzZSBp
dHMgaW52b2NhdGlvbiBhaGVhZCBvZiBydW5uaW5nIHRlc3RzOiB0ZXN0CisgICAgbW9kdWxlcyBv
ciBjbGFzc2VzIGNhbiB1c2UgdGhlIHB5dGVzdC5tYXJrLnVzZWZpeHR1cmVzKGZpeHR1cmVuYW1l
KQorICAgIG1hcmtlci4gIFRlc3QgZnVuY3Rpb25zIGNhbiBkaXJlY3RseSB1c2UgZml4dHVyZSBu
YW1lcyBhcyBpbnB1dAorICAgIGFyZ3VtZW50cyBpbiB3aGljaCBjYXNlIHRoZSBmaXh0dXJlIGlu
c3RhbmNlIHJldHVybmVkIGZyb20gdGhlIGZpeHR1cmUKKyAgICBmdW5jdGlvbiB3aWxsIGJlIGlu
amVjdGVkLgorCisgICAgOmFyZyBzY29wZTogdGhlIHNjb3BlIGZvciB3aGljaCB0aGlzIGZpeHR1
cmUgaXMgc2hhcmVkLCBvbmUgb2YKKyAgICAgICAgICAgICAgICAiZnVuY3Rpb24iIChkZWZhdWx0
KSwgImNsYXNzIiwgIm1vZHVsZSIsICJzZXNzaW9uIi4KKworICAgIDphcmcgcGFyYW1zOiBhbiBv
cHRpb25hbCBsaXN0IG9mIHBhcmFtZXRlcnMgd2hpY2ggd2lsbCBjYXVzZSBtdWx0aXBsZQorICAg
ICAgICAgICAgICAgIGludm9jYXRpb25zIG9mIHRoZSBmaXh0dXJlIGZ1bmN0aW9uIGFuZCBhbGwg
b2YgdGhlIHRlc3RzCisgICAgICAgICAgICAgICAgdXNpbmcgaXQuCisKKyAgICA6YXJnIGF1dG91
c2U6IGlmIFRydWUsIHRoZSBmaXh0dXJlIGZ1bmMgaXMgYWN0aXZhdGVkIGZvciBhbGwgdGVzdHMg
dGhhdAorICAgICAgICAgICAgICAgIGNhbiBzZWUgaXQuICBJZiBGYWxzZSAodGhlIGRlZmF1bHQp
IHRoZW4gYW4gZXhwbGljaXQKKyAgICAgICAgICAgICAgICByZWZlcmVuY2UgaXMgbmVlZGVkIHRv
IGFjdGl2YXRlIHRoZSBmaXh0dXJlLgorCisgICAgOmFyZyBpZHM6IGxpc3Qgb2Ygc3RyaW5nIGlk
cyBlYWNoIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHBhcmFtcworICAgICAgIHNvIHRoYXQgdGhleSBh
cmUgcGFydCBvZiB0aGUgdGVzdCBpZC4gSWYgbm8gaWRzIGFyZSBwcm92aWRlZAorICAgICAgIHRo
ZXkgd2lsbCBiZSBnZW5lcmF0ZWQgYXV0b21hdGljYWxseSBmcm9tIHRoZSBwYXJhbXMuCisKKyAg
ICAiIiIKKyAgICBpZiBjYWxsYWJsZShzY29wZSkgYW5kIHBhcmFtcyBpcyBOb25lIGFuZCBhdXRv
dXNlID09IEZhbHNlOgorICAgICAgICAjIGRpcmVjdCBkZWNvcmF0aW9uCisgICAgICAgIHJldHVy
biBGaXh0dXJlRnVuY3Rpb25NYXJrZXIoCisgICAgICAgICAgICAgICAgImZ1bmN0aW9uIiwgcGFy
YW1zLCBhdXRvdXNlKShzY29wZSkKKyAgICBpZiBwYXJhbXMgaXMgbm90IE5vbmUgYW5kIG5vdCBp
c2luc3RhbmNlKHBhcmFtcywgKGxpc3QsIHR1cGxlKSk6CisgICAgICAgIHBhcmFtcyA9IGxpc3Qo
cGFyYW1zKQorICAgIHJldHVybiBGaXh0dXJlRnVuY3Rpb25NYXJrZXIoc2NvcGUsIHBhcmFtcywg
YXV0b3VzZSwgaWRzPWlkcykKKworZGVmIHlpZWxkX2ZpeHR1cmUoc2NvcGU9ImZ1bmN0aW9uIiwg
cGFyYW1zPU5vbmUsIGF1dG91c2U9RmFsc2UsIGlkcz1Ob25lKToKKyAgICAiIiIgKHJldHVybiBh
KSBkZWNvcmF0b3IgdG8gbWFyayBhIHlpZWxkLWZpeHR1cmUgZmFjdG9yeSBmdW5jdGlvbgorICAg
IChFWFBFUklNRU5UQUwpLgorCisgICAgVGhpcyB0YWtlcyB0aGUgc2FtZSBhcmd1bWVudHMgYXMg
OnB5OmZ1bmM6YHB5dGVzdC5maXh0dXJlYCBidXQKKyAgICBleHBlY3RzIGEgZml4dHVyZSBmdW5j
dGlvbiB0byB1c2UgYSBgYHlpZWxkYGAgaW5zdGVhZCBvZiBhIGBgcmV0dXJuYGAKKyAgICBzdGF0
ZW1lbnQgdG8gcHJvdmlkZSBhIGZpeHR1cmUuICBTZWUKKyAgICBodHRwOi8vcHl0ZXN0Lm9yZy9l
bi9sYXRlc3QveWllbGRmaXh0dXJlLmh0bWwgZm9yIG1vcmUgaW5mby4KKyAgICAiIiIKKyAgICBp
ZiBjYWxsYWJsZShzY29wZSkgYW5kIHBhcmFtcyBpcyBOb25lIGFuZCBhdXRvdXNlID09IEZhbHNl
OgorICAgICAgICAjIGRpcmVjdCBkZWNvcmF0aW9uCisgICAgICAgIHJldHVybiBGaXh0dXJlRnVu
Y3Rpb25NYXJrZXIoCisgICAgICAgICAgICAgICAgImZ1bmN0aW9uIiwgcGFyYW1zLCBhdXRvdXNl
LCB5aWVsZGN0eD1UcnVlKShzY29wZSkKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gRml4dHVy
ZUZ1bmN0aW9uTWFya2VyKHNjb3BlLCBwYXJhbXMsIGF1dG91c2UsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgeWllbGRjdHg9VHJ1ZSwgaWRzPWlkcykKKworZGVmYXVsdGZ1
bmNhcmdwcmVmaXhtYXJrZXIgPSBmaXh0dXJlKCkKKworZGVmIHB5b2JqX3Byb3BlcnR5KG5hbWUp
OgorICAgIGRlZiBnZXQoc2VsZik6CisgICAgICAgIG5vZGUgPSBzZWxmLmdldHBhcmVudChnZXRh
dHRyKHB5dGVzdCwgbmFtZSkpCisgICAgICAgIGlmIG5vZGUgaXMgbm90IE5vbmU6CisgICAgICAg
ICAgICByZXR1cm4gbm9kZS5vYmoKKyAgICBkb2MgPSAicHl0aG9uICVzIG9iamVjdCB0aGlzIG5v
ZGUgd2FzIGNvbGxlY3RlZCBmcm9tIChjYW4gYmUgTm9uZSkuIiAlICgKKyAgICAgICAgICBuYW1l
Lmxvd2VyKCksKQorICAgIHJldHVybiBwcm9wZXJ0eShnZXQsIE5vbmUsIE5vbmUsIGRvYykKKwor
CitkZWYgcHl0ZXN0X2FkZG9wdGlvbihwYXJzZXIpOgorICAgIGdyb3VwID0gcGFyc2VyLmdldGdy
b3VwKCJnZW5lcmFsIikKKyAgICBncm91cC5hZGRvcHRpb24oJy0tZml4dHVyZXMnLCAnLS1mdW5j
YXJncycsCisgICAgICAgICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJzaG93Zml4
dHVyZXMiLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgaGVscD0ic2hvdyBhdmFpbGFi
bGUgZml4dHVyZXMsIHNvcnRlZCBieSBwbHVnaW4gYXBwZWFyYW5jZSIpCisgICAgcGFyc2VyLmFk
ZGluaSgidXNlZml4dHVyZXMiLCB0eXBlPSJhcmdzIiwgZGVmYXVsdD1bXSwKKyAgICAgICAgaGVs
cD0ibGlzdCBvZiBkZWZhdWx0IGZpeHR1cmVzIHRvIGJlIHVzZWQgd2l0aCB0aGlzIHByb2plY3Qi
KQorICAgIHBhcnNlci5hZGRpbmkoInB5dGhvbl9maWxlcyIsIHR5cGU9ImFyZ3MiLAorICAgICAg
ICBkZWZhdWx0PVsndGVzdF8qLnB5JywgJypfdGVzdC5weSddLAorICAgICAgICBoZWxwPSJnbG9i
LXN0eWxlIGZpbGUgcGF0dGVybnMgZm9yIFB5dGhvbiB0ZXN0IG1vZHVsZSBkaXNjb3ZlcnkiKQor
ICAgIHBhcnNlci5hZGRpbmkoInB5dGhvbl9jbGFzc2VzIiwgdHlwZT0iYXJncyIsIGRlZmF1bHQ9
WyJUZXN0IixdLAorICAgICAgICBoZWxwPSJwcmVmaXhlcyBvciBnbG9iIG5hbWVzIGZvciBQeXRo
b24gdGVzdCBjbGFzcyBkaXNjb3ZlcnkiKQorICAgIHBhcnNlci5hZGRpbmkoInB5dGhvbl9mdW5j
dGlvbnMiLCB0eXBlPSJhcmdzIiwgZGVmYXVsdD1bInRlc3QiLF0sCisgICAgICAgIGhlbHA9InBy
ZWZpeGVzIG9yIGdsb2IgbmFtZXMgZm9yIFB5dGhvbiB0ZXN0IGZ1bmN0aW9uIGFuZCAiCisgICAg
ICAgICAgICAgIm1ldGhvZCBkaXNjb3ZlcnkiKQorCisgICAgZ3JvdXAuYWRkb3B0aW9uKCItLWlt
cG9ydC1tb2RlIiwgZGVmYXVsdD0icHJlcGVuZCIsCisgICAgICAgIGNob2ljZXM9WyJwcmVwZW5k
IiwgImFwcGVuZCJdLCBkZXN0PSJpbXBvcnRtb2RlIiwKKyAgICAgICAgaGVscD0icHJlcGVuZC9h
cHBlbmQgdG8gc3lzLnBhdGggd2hlbiBpbXBvcnRpbmcgdGVzdCBtb2R1bGVzLCAiCisgICAgICAg
ICAgICAgImRlZmF1bHQgaXMgdG8gcHJlcGVuZC4iKQorCisKK2RlZiBweXRlc3RfY21kbGluZV9t
YWluKGNvbmZpZyk6CisgICAgaWYgY29uZmlnLm9wdGlvbi5zaG93Zml4dHVyZXM6CisgICAgICAg
IHNob3dmaXh0dXJlcyhjb25maWcpCisgICAgICAgIHJldHVybiAwCisKKworZGVmIHB5dGVzdF9n
ZW5lcmF0ZV90ZXN0cyhtZXRhZnVuYyk6CisgICAgIyB0aG9zZSBhbHRlcm5hdGl2ZSBzcGVsbGlu
Z3MgYXJlIGNvbW1vbiAtIHJhaXNlIGEgc3BlY2lmaWMgZXJyb3IgdG8gYWxlcnQKKyAgICAjIHRo
ZSB1c2VyCisgICAgYWx0X3NwZWxsaW5ncyA9IFsncGFyYW1ldGVyaXplJywgJ3BhcmFtZXRyaXNl
JywgJ3BhcmFtZXRlcmlzZSddCisgICAgZm9yIGF0dHIgaW4gYWx0X3NwZWxsaW5nczoKKyAgICAg
ICAgaWYgaGFzYXR0cihtZXRhZnVuYy5mdW5jdGlvbiwgYXR0cik6CisgICAgICAgICAgICBtc2cg
PSAiezB9IGhhcyAnezF9Jywgc3BlbGxpbmcgc2hvdWxkIGJlICdwYXJhbWV0cml6ZSciCisgICAg
ICAgICAgICByYWlzZSBNYXJrZXJFcnJvcihtc2cuZm9ybWF0KG1ldGFmdW5jLmZ1bmN0aW9uLl9f
bmFtZV9fLCBhdHRyKSkKKyAgICB0cnk6CisgICAgICAgIG1hcmtlcnMgPSBtZXRhZnVuYy5mdW5j
dGlvbi5wYXJhbWV0cml6ZQorICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgcmV0
dXJuCisgICAgZm9yIG1hcmtlciBpbiBtYXJrZXJzOgorICAgICAgICBtZXRhZnVuYy5wYXJhbWV0
cml6ZSgqbWFya2VyLmFyZ3MsICoqbWFya2VyLmt3YXJncykKKworZGVmIHB5dGVzdF9jb25maWd1
cmUoY29uZmlnKToKKyAgICBjb25maWcuYWRkaW5pdmFsdWVfbGluZSgibWFya2VycyIsCisgICAg
ICAgICJwYXJhbWV0cml6ZShhcmduYW1lcywgYXJndmFsdWVzKTogY2FsbCBhIHRlc3QgZnVuY3Rp
b24gbXVsdGlwbGUgIgorICAgICAgICAidGltZXMgcGFzc2luZyBpbiBkaWZmZXJlbnQgYXJndW1l
bnRzIGluIHR1cm4uIGFyZ3ZhbHVlcyBnZW5lcmFsbHkgIgorICAgICAgICAibmVlZHMgdG8gYmUg
YSBsaXN0IG9mIHZhbHVlcyBpZiBhcmduYW1lcyBzcGVjaWZpZXMgb25seSBvbmUgbmFtZSAiCisg
ICAgICAgICJvciBhIGxpc3Qgb2YgdHVwbGVzIG9mIHZhbHVlcyBpZiBhcmduYW1lcyBzcGVjaWZp
ZXMgbXVsdGlwbGUgbmFtZXMuICIKKyAgICAgICAgIkV4YW1wbGU6IEBwYXJhbWV0cml6ZSgnYXJn
MScsIFsxLDJdKSB3b3VsZCBsZWFkIHRvIHR3byBjYWxscyBvZiB0aGUgIgorICAgICAgICAiZGVj
b3JhdGVkIHRlc3QgZnVuY3Rpb24sIG9uZSB3aXRoIGFyZzE9MSBhbmQgYW5vdGhlciB3aXRoIGFy
ZzE9Mi4iCisgICAgICAgICJzZWUgaHR0cDovL3B5dGVzdC5vcmcvbGF0ZXN0L3BhcmFtZXRyaXpl
Lmh0bWwgZm9yIG1vcmUgaW5mbyBhbmQgIgorICAgICAgICAiZXhhbXBsZXMuIgorICAgICkKKyAg
ICBjb25maWcuYWRkaW5pdmFsdWVfbGluZSgibWFya2VycyIsCisgICAgICAgICJ1c2VmaXh0dXJl
cyhmaXh0dXJlbmFtZTEsIGZpeHR1cmVuYW1lMiwgLi4uKTogbWFyayB0ZXN0cyBhcyBuZWVkaW5n
ICIKKyAgICAgICAgImFsbCBvZiB0aGUgc3BlY2lmaWVkIGZpeHR1cmVzLiBzZWUgaHR0cDovL3B5
dGVzdC5vcmcvbGF0ZXN0L2ZpeHR1cmUuaHRtbCN1c2VmaXh0dXJlcyAiCisgICAgKQorCitkZWYg
cHl0ZXN0X3Nlc3Npb25zdGFydChzZXNzaW9uKToKKyAgICBzZXNzaW9uLl9maXh0dXJlbWFuYWdl
ciA9IEZpeHR1cmVNYW5hZ2VyKHNlc3Npb24pCisKK0BweXRlc3QuaG9va2ltcGwodHJ5bGFzdD1U
cnVlKQorZGVmIHB5dGVzdF9uYW1lc3BhY2UoKToKKyAgICByYWlzZXMuRXhjZXB0aW9uID0gcHl0
ZXN0LmZhaWwuRXhjZXB0aW9uCisgICAgcmV0dXJuIHsKKyAgICAgICAgJ2ZpeHR1cmUnOiBmaXh0
dXJlLAorICAgICAgICAneWllbGRfZml4dHVyZSc6IHlpZWxkX2ZpeHR1cmUsCisgICAgICAgICdy
YWlzZXMnIDogcmFpc2VzLAorICAgICAgICAnY29sbGVjdCc6IHsKKyAgICAgICAgJ01vZHVsZSc6
IE1vZHVsZSwgJ0NsYXNzJzogQ2xhc3MsICdJbnN0YW5jZSc6IEluc3RhbmNlLAorICAgICAgICAn
RnVuY3Rpb24nOiBGdW5jdGlvbiwgJ0dlbmVyYXRvcic6IEdlbmVyYXRvciwKKyAgICAgICAgJ19m
aWxsZnVuY2FyZ3MnOiBmaWxsZml4dHVyZXN9CisgICAgfQorCitAZml4dHVyZShzY29wZT0ic2Vz
c2lvbiIpCitkZWYgcHl0ZXN0Y29uZmlnKHJlcXVlc3QpOgorICAgICIiIiB0aGUgcHl0ZXN0IGNv
bmZpZyBvYmplY3Qgd2l0aCBhY2Nlc3MgdG8gY29tbWFuZCBsaW5lIG9wdHMuIiIiCisgICAgcmV0
dXJuIHJlcXVlc3QuY29uZmlnCisKKworQHB5dGVzdC5ob29raW1wbCh0cnlsYXN0PVRydWUpCitk
ZWYgcHl0ZXN0X3B5ZnVuY19jYWxsKHB5ZnVuY2l0ZW0pOgorICAgIHRlc3RmdW5jdGlvbiA9IHB5
ZnVuY2l0ZW0ub2JqCisgICAgaWYgcHlmdW5jaXRlbS5faXN5aWVsZGVkZnVuY3Rpb24oKToKKyAg
ICAgICAgdGVzdGZ1bmN0aW9uKCpweWZ1bmNpdGVtLl9hcmdzKQorICAgIGVsc2U6CisgICAgICAg
IGZ1bmNhcmdzID0gcHlmdW5jaXRlbS5mdW5jYXJncworICAgICAgICB0ZXN0YXJncyA9IHt9Cisg
ICAgICAgIGZvciBhcmcgaW4gcHlmdW5jaXRlbS5fZml4dHVyZWluZm8uYXJnbmFtZXM6CisgICAg
ICAgICAgICB0ZXN0YXJnc1thcmddID0gZnVuY2FyZ3NbYXJnXQorICAgICAgICB0ZXN0ZnVuY3Rp
b24oKip0ZXN0YXJncykKKyAgICByZXR1cm4gVHJ1ZQorCitkZWYgcHl0ZXN0X2NvbGxlY3RfZmls
ZShwYXRoLCBwYXJlbnQpOgorICAgIGV4dCA9IHBhdGguZXh0CisgICAgaWYgZXh0ID09ICIucHki
OgorICAgICAgICBpZiBub3QgcGFyZW50LnNlc3Npb24uaXNpbml0cGF0aChwYXRoKToKKyAgICAg
ICAgICAgIGZvciBwYXQgaW4gcGFyZW50LmNvbmZpZy5nZXRpbmkoJ3B5dGhvbl9maWxlcycpOgor
ICAgICAgICAgICAgICAgIGlmIHBhdGguZm5tYXRjaChwYXQpOgorICAgICAgICAgICAgICAgICAg
ICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgIHJldHVybgorICAgICAg
ICBpaG9vayA9IHBhcmVudC5zZXNzaW9uLmdldGhvb2twcm94eShwYXRoKQorICAgICAgICByZXR1
cm4gaWhvb2sucHl0ZXN0X3B5Y29sbGVjdF9tYWtlbW9kdWxlKHBhdGg9cGF0aCwgcGFyZW50PXBh
cmVudCkKKworZGVmIHB5dGVzdF9weWNvbGxlY3RfbWFrZW1vZHVsZShwYXRoLCBwYXJlbnQpOgor
ICAgIHJldHVybiBNb2R1bGUocGF0aCwgcGFyZW50KQorCitAcHl0ZXN0Lmhvb2tpbXBsKGhvb2t3
cmFwcGVyPVRydWUpCitkZWYgcHl0ZXN0X3B5Y29sbGVjdF9tYWtlaXRlbShjb2xsZWN0b3IsIG5h
bWUsIG9iaik6CisgICAgb3V0Y29tZSA9IHlpZWxkCisgICAgcmVzID0gb3V0Y29tZS5nZXRfcmVz
dWx0KCkKKyAgICBpZiByZXMgaXMgbm90IE5vbmU6CisgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRp
b24KKyAgICAjIG5vdGhpbmcgd2FzIGNvbGxlY3RlZCBlbHNld2hlcmUsIGxldCdzIGRvIGl0IGhl
cmUKKyAgICBpZiBpc2NsYXNzKG9iaik6CisgICAgICAgIGlmIGNvbGxlY3Rvci5pc3Rlc3RjbGFz
cyhvYmosIG5hbWUpOgorICAgICAgICAgICAgQ2xhc3MgPSBjb2xsZWN0b3IuX2dldGN1c3RvbWNs
YXNzKCJDbGFzcyIpCisgICAgICAgICAgICBvdXRjb21lLmZvcmNlX3Jlc3VsdChDbGFzcyhuYW1l
LCBwYXJlbnQ9Y29sbGVjdG9yKSkKKyAgICBlbGlmIGNvbGxlY3Rvci5pc3Rlc3RmdW5jdGlvbihv
YmosIG5hbWUpOgorICAgICAgICAjIG1vY2sgc2VlbXMgdG8gc3RvcmUgdW5ib3VuZCBtZXRob2Rz
IChpc3N1ZTQ3MyksIG5vcm1hbGl6ZSBpdAorICAgICAgICBvYmogPSBnZXRhdHRyKG9iaiwgIl9f
ZnVuY19fIiwgb2JqKQorICAgICAgICAjIFdlIG5lZWQgdG8gdHJ5IGFuZCB1bndyYXAgdGhlIGZ1
bmN0aW9uIGlmIGl0J3MgYSBmdW5jdG9vbHMucGFydGlhbAorICAgICAgICAjIG9yIGEgZnVudG9v
bHMud3JhcHBlZC4KKyAgICAgICAgIyBXZSBtdXNuJ3QgaWYgaXQncyBiZWVuIHdyYXBwZWQgd2l0
aCBtb2NrLnBhdGNoIChweXRob24gMiBvbmx5KQorICAgICAgICBpZiBub3QgKGlzZnVuY3Rpb24o
b2JqKSBvciBpc2Z1bmN0aW9uKGdldF9yZWFsX2Z1bmMob2JqKSkpOgorICAgICAgICAgICAgY29s
bGVjdG9yLndhcm4oY29kZT0iQzIiLCBtZXNzYWdlPQorICAgICAgICAgICAgICAgICJjYW5ub3Qg
Y29sbGVjdCAlciBiZWNhdXNlIGl0IGlzIG5vdCBhIGZ1bmN0aW9uLiIKKyAgICAgICAgICAgICAg
ICAlIG5hbWUsICkKKyAgICAgICAgZWxpZiBnZXRhdHRyKG9iaiwgIl9fdGVzdF9fIiwgVHJ1ZSk6
CisgICAgICAgICAgICBpZiBpc19nZW5lcmF0b3Iob2JqKToKKyAgICAgICAgICAgICAgICByZXMg
PSBHZW5lcmF0b3IobmFtZSwgcGFyZW50PWNvbGxlY3RvcikKKyAgICAgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICAgICAgcmVzID0gbGlzdChjb2xsZWN0b3IuX2dlbmZ1bmN0aW9ucyhuYW1lLCBv
YmopKQorICAgICAgICAgICAgb3V0Y29tZS5mb3JjZV9yZXN1bHQocmVzKQorCitkZWYgaXNfZ2Vu
ZXJhdG9yKGZ1bmMpOgorICAgIHRyeToKKyAgICAgICAgcmV0dXJuIF9weXRlc3QuX2NvZGUuZ2V0
cmF3Y29kZShmdW5jKS5jb19mbGFncyAmIDMyICMgZ2VuZXJhdG9yIGZ1bmN0aW9uCisgICAgZXhj
ZXB0IEF0dHJpYnV0ZUVycm9yOiAjIGJ1aWx0aW4gZnVuY3Rpb25zIGhhdmUgbm8gYnl0ZWNvZGUK
KyAgICAgICAgIyBhc3N1bWUgdGhlbSB0byBub3QgYmUgZ2VuZXJhdG9ycworICAgICAgICByZXR1
cm4gRmFsc2UKKworY2xhc3MgUHlvYmpDb250ZXh0KG9iamVjdCk6CisgICAgbW9kdWxlID0gcHlv
YmpfcHJvcGVydHkoIk1vZHVsZSIpCisgICAgY2xzID0gcHlvYmpfcHJvcGVydHkoIkNsYXNzIikK
KyAgICBpbnN0YW5jZSA9IHB5b2JqX3Byb3BlcnR5KCJJbnN0YW5jZSIpCisKK2NsYXNzIFB5b2Jq
TWl4aW4oUHlvYmpDb250ZXh0KToKKyAgICBkZWYgb2JqKCk6CisgICAgICAgIGRlZiBmZ2V0KHNl
bGYpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9vYmoK
KyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICBzZWxm
Ll9vYmogPSBvYmogPSBzZWxmLl9nZXRvYmooKQorICAgICAgICAgICAgICAgIHJldHVybiBvYmoK
KyAgICAgICAgZGVmIGZzZXQoc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgc2VsZi5fb2JqID0g
dmFsdWUKKyAgICAgICAgcmV0dXJuIHByb3BlcnR5KGZnZXQsIGZzZXQsIE5vbmUsICJ1bmRlcmx5
aW5nIHB5dGhvbiBvYmplY3QiKQorICAgIG9iaiA9IG9iaigpCisKKyAgICBkZWYgX2dldG9iaihz
ZWxmKToKKyAgICAgICAgcmV0dXJuIGdldGF0dHIoc2VsZi5wYXJlbnQub2JqLCBzZWxmLm5hbWUp
CisKKyAgICBkZWYgZ2V0bW9kcGF0aChzZWxmLCBzdG9wYXRtb2R1bGU9VHJ1ZSwgaW5jbHVkZW1v
ZHVsZT1GYWxzZSk6CisgICAgICAgICIiIiByZXR1cm4gcHl0aG9uIHBhdGggcmVsYXRpdmUgdG8g
dGhlIGNvbnRhaW5pbmcgbW9kdWxlLiAiIiIKKyAgICAgICAgY2hhaW4gPSBzZWxmLmxpc3RjaGFp
bigpCisgICAgICAgIGNoYWluLnJldmVyc2UoKQorICAgICAgICBwYXJ0cyA9IFtdCisgICAgICAg
IGZvciBub2RlIGluIGNoYWluOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShub2RlLCBJbnN0
YW5jZSk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIG5hbWUgPSBub2Rl
Lm5hbWUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uobm9kZSwgTW9kdWxlKToKKyAgICAgICAg
ICAgICAgICBhc3NlcnQgbmFtZS5lbmRzd2l0aCgiLnB5IikKKyAgICAgICAgICAgICAgICBuYW1l
ID0gbmFtZVs6LTNdCisgICAgICAgICAgICAgICAgaWYgc3RvcGF0bW9kdWxlOgorICAgICAgICAg
ICAgICAgICAgICBpZiBpbmNsdWRlbW9kdWxlOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFy
dHMuYXBwZW5kKG5hbWUpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBw
YXJ0cy5hcHBlbmQobmFtZSkKKyAgICAgICAgcGFydHMucmV2ZXJzZSgpCisgICAgICAgIHMgPSAi
LiIuam9pbihwYXJ0cykKKyAgICAgICAgcmV0dXJuIHMucmVwbGFjZSgiLlsiLCAiWyIpCisKKyAg
ICBkZWYgX2dldGZzbGluZW5vKHNlbGYpOgorICAgICAgICByZXR1cm4gZ2V0ZnNsaW5lbm8oc2Vs
Zi5vYmopCisKKyAgICBkZWYgcmVwb3J0aW5mbyhzZWxmKToKKyAgICAgICAgIyBYWFggY2FjaGlu
Zz8KKyAgICAgICAgb2JqID0gc2VsZi5vYmoKKyAgICAgICAgY29tcGF0X2NvX2ZpcnN0bGluZW5v
ID0gZ2V0YXR0cihvYmosICdjb21wYXRfY29fZmlyc3RsaW5lbm8nLCBOb25lKQorICAgICAgICBp
ZiBpc2luc3RhbmNlKGNvbXBhdF9jb19maXJzdGxpbmVubywgaW50KToKKyAgICAgICAgICAgICMg
bm9zZSBjb21wYXRpYmlsaXR5CisgICAgICAgICAgICBmc3BhdGggPSBzeXMubW9kdWxlc1tvYmou
X19tb2R1bGVfX10uX19maWxlX18KKyAgICAgICAgICAgIGlmIGZzcGF0aC5lbmRzd2l0aCgiLnB5
YyIpOgorICAgICAgICAgICAgICAgIGZzcGF0aCA9IGZzcGF0aFs6LTFdCisgICAgICAgICAgICBs
aW5lbm8gPSBjb21wYXRfY29fZmlyc3RsaW5lbm8KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg
IGZzcGF0aCwgbGluZW5vID0gZ2V0ZnNsaW5lbm8ob2JqKQorICAgICAgICBtb2RwYXRoID0gc2Vs
Zi5nZXRtb2RwYXRoKCkKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UobGluZW5vLCBpbnQpCisg
ICAgICAgIHJldHVybiBmc3BhdGgsIGxpbmVubywgbW9kcGF0aAorCitjbGFzcyBQeUNvbGxlY3Rv
cihQeW9iak1peGluLCBweXRlc3QuQ29sbGVjdG9yKToKKworICAgIGRlZiBmdW5jbmFtZWZpbHRl
cihzZWxmLCBuYW1lKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX21hdGNoZXNfcHJlZml4X29yX2ds
b2Jfb3B0aW9uKCdweXRob25fZnVuY3Rpb25zJywgbmFtZSkKKworICAgIGRlZiBpc25vc2V0ZXN0
KHNlbGYsIG9iaik6CisgICAgICAgICIiIiBMb29rIGZvciB0aGUgX190ZXN0X18gYXR0cmlidXRl
LCB3aGljaCBpcyBhcHBsaWVkIGJ5IHRoZQorICAgICAgICBAbm9zZS50b29scy5pc3Rlc3QgZGVj
b3JhdG9yCisgICAgICAgICIiIgorICAgICAgICAjIFdlIGV4cGxpY2l0bHkgY2hlY2sgZm9yICJp
cyBUcnVlIiBoZXJlIHRvIG5vdCBtaXN0YWtlbmx5IHRyZWF0CisgICAgICAgICMgY2xhc3NlcyB3
aXRoIGEgY3VzdG9tIF9fZ2V0YXR0cl9fIHJldHVybmluZyBzb21ldGhpbmcgdHJ1dGh5IChsaWtl
IGEKKyAgICAgICAgIyBmdW5jdGlvbikgYXMgdGVzdCBjbGFzc2VzLgorICAgICAgICByZXR1cm4g
c2FmZV9nZXRhdHRyKG9iaiwgJ19fdGVzdF9fJywgRmFsc2UpIGlzIFRydWUKKworICAgIGRlZiBj
bGFzc25hbWVmaWx0ZXIoc2VsZiwgbmFtZSk6CisgICAgICAgIHJldHVybiBzZWxmLl9tYXRjaGVz
X3ByZWZpeF9vcl9nbG9iX29wdGlvbigncHl0aG9uX2NsYXNzZXMnLCBuYW1lKQorCisgICAgZGVm
IGlzdGVzdGZ1bmN0aW9uKHNlbGYsIG9iaiwgbmFtZSk6CisgICAgICAgIHJldHVybiAoCisgICAg
ICAgICAgICAoc2VsZi5mdW5jbmFtZWZpbHRlcihuYW1lKSBvciBzZWxmLmlzbm9zZXRlc3Qob2Jq
KSkgYW5kCisgICAgICAgICAgICBzYWZlX2dldGF0dHIob2JqLCAiX19jYWxsX18iLCBGYWxzZSkg
YW5kIGdldGZpeHR1cmVtYXJrZXIob2JqKSBpcyBOb25lCisgICAgICAgICkKKworICAgIGRlZiBp
c3Rlc3RjbGFzcyhzZWxmLCBvYmosIG5hbWUpOgorICAgICAgICByZXR1cm4gc2VsZi5jbGFzc25h
bWVmaWx0ZXIobmFtZSkgb3Igc2VsZi5pc25vc2V0ZXN0KG9iaikKKworICAgIGRlZiBfbWF0Y2hl
c19wcmVmaXhfb3JfZ2xvYl9vcHRpb24oc2VsZiwgb3B0aW9uX25hbWUsIG5hbWUpOgorICAgICAg
ICAiIiIKKyAgICAgICAgY2hlY2tzIGlmIHRoZSBnaXZlbiBuYW1lIG1hdGNoZXMgdGhlIHByZWZp
eCBvciBnbG9iLXBhdHRlcm4gZGVmaW5lZAorICAgICAgICBpbiBpbmkgY29uZmlndXJhdGlvbi4K
KyAgICAgICAgIiIiCisgICAgICAgIGZvciBvcHRpb24gaW4gc2VsZi5jb25maWcuZ2V0aW5pKG9w
dGlvbl9uYW1lKToKKyAgICAgICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aChvcHRpb24pOgorICAg
ICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICAjIGNoZWNrIHRoYXQgbmFtZSBs
b29rcyBsaWtlIGEgZ2xvYi1zdHJpbmcgYmVmb3JlIGNhbGxpbmcgZm5tYXRjaAorICAgICAgICAg
ICAgIyBiZWNhdXNlIHRoaXMgaXMgY2FsbGVkIGZvciBldmVyeSBuYW1lIGluIGVhY2ggY29sbGVj
dGVkIG1vZHVsZSwKKyAgICAgICAgICAgICMgYW5kIGZubWF0Y2ggaXMgc29tZXdoYXQgZXhwZW5z
aXZlIHRvIGNhbGwKKyAgICAgICAgICAgIGVsaWYgKCcqJyBpbiBvcHRpb24gb3IgJz8nIGluIG9w
dGlvbiBvciAnWycgaW4gb3B0aW9uKSBhbmQgXAorICAgICAgICAgICAgICAgICAgICBmbm1hdGNo
LmZubWF0Y2gobmFtZSwgb3B0aW9uKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAg
ICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBjb2xsZWN0KHNlbGYpOgorICAgICAgICBpZiBu
b3QgZ2V0YXR0cihzZWxmLm9iaiwgIl9fdGVzdF9fIiwgVHJ1ZSk6CisgICAgICAgICAgICByZXR1
cm4gW10KKworICAgICAgICAjIE5CLiB3ZSBhdm9pZCByYW5kb20gZ2V0YXR0cnMgYW5kIHBlZWsg
aW4gdGhlIF9fZGljdF9fIGluc3RlYWQKKyAgICAgICAgIyAoWFhYIG9yaWdpbmFsbHkgaW50cm9k
dWNlZCBmcm9tIGEgUHlQeSBuZWVkLCBzdGlsbCB0cnVlPykKKyAgICAgICAgZGljdHMgPSBbZ2V0
YXR0cihzZWxmLm9iaiwgJ19fZGljdF9fJywge30pXQorICAgICAgICBmb3IgYmFzZWNscyBpbiBp
bnNwZWN0LmdldG1ybyhzZWxmLm9iai5fX2NsYXNzX18pOgorICAgICAgICAgICAgZGljdHMuYXBw
ZW5kKGJhc2VjbHMuX19kaWN0X18pCisgICAgICAgIHNlZW4gPSB7fQorICAgICAgICBsID0gW10K
KyAgICAgICAgZm9yIGRpYyBpbiBkaWN0czoKKyAgICAgICAgICAgIGZvciBuYW1lLCBvYmogaW4g
bGlzdChkaWMuaXRlbXMoKSk6CisgICAgICAgICAgICAgICAgaWYgbmFtZSBpbiBzZWVuOgorICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHNlZW5bbmFtZV0gPSBU
cnVlCisgICAgICAgICAgICAgICAgcmVzID0gc2VsZi5tYWtlaXRlbShuYW1lLCBvYmopCisgICAg
ICAgICAgICAgICAgaWYgcmVzIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
CisgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UocmVzLCBsaXN0KToKKyAgICAgICAg
ICAgICAgICAgICAgcmVzID0gW3Jlc10KKyAgICAgICAgICAgICAgICBsLmV4dGVuZChyZXMpCisg
ICAgICAgIGwuc29ydChrZXk9bGFtYmRhIGl0ZW06IGl0ZW0ucmVwb3J0aW5mbygpWzoyXSkKKyAg
ICAgICAgcmV0dXJuIGwKKworICAgIGRlZiBtYWtlaXRlbShzZWxmLCBuYW1lLCBvYmopOgorICAg
ICAgICAjYXNzZXJ0IHNlbGYuaWhvb2suZnNwYXRoID09IHNlbGYuZnNwYXRoLCBzZWxmCisgICAg
ICAgIHJldHVybiBzZWxmLmlob29rLnB5dGVzdF9weWNvbGxlY3RfbWFrZWl0ZW0oCisgICAgICAg
ICAgICBjb2xsZWN0b3I9c2VsZiwgbmFtZT1uYW1lLCBvYmo9b2JqKQorCisgICAgZGVmIF9nZW5m
dW5jdGlvbnMoc2VsZiwgbmFtZSwgZnVuY29iaik6CisgICAgICAgIG1vZHVsZSA9IHNlbGYuZ2V0
cGFyZW50KE1vZHVsZSkub2JqCisgICAgICAgIGNsc2NvbCA9IHNlbGYuZ2V0cGFyZW50KENsYXNz
KQorICAgICAgICBjbHMgPSBjbHNjb2wgYW5kIGNsc2NvbC5vYmogb3IgTm9uZQorICAgICAgICB0
cmFuc2Zlcl9tYXJrZXJzKGZ1bmNvYmosIGNscywgbW9kdWxlKQorICAgICAgICBmbSA9IHNlbGYu
c2Vzc2lvbi5fZml4dHVyZW1hbmFnZXIKKyAgICAgICAgZml4dHVyZWluZm8gPSBmbS5nZXRmaXh0
dXJlaW5mbyhzZWxmLCBmdW5jb2JqLCBjbHMpCisgICAgICAgIG1ldGFmdW5jID0gTWV0YWZ1bmMo
ZnVuY29iaiwgZml4dHVyZWluZm8sIHNlbGYuY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNscz1jbHMsIG1vZHVsZT1tb2R1bGUpCisgICAgICAgIG1ldGhvZHMgPSBbXQorICAg
ICAgICBpZiBoYXNhdHRyKG1vZHVsZSwgInB5dGVzdF9nZW5lcmF0ZV90ZXN0cyIpOgorICAgICAg
ICAgICAgbWV0aG9kcy5hcHBlbmQobW9kdWxlLnB5dGVzdF9nZW5lcmF0ZV90ZXN0cykKKyAgICAg
ICAgaWYgaGFzYXR0cihjbHMsICJweXRlc3RfZ2VuZXJhdGVfdGVzdHMiKToKKyAgICAgICAgICAg
IG1ldGhvZHMuYXBwZW5kKGNscygpLnB5dGVzdF9nZW5lcmF0ZV90ZXN0cykKKyAgICAgICAgaWYg
bWV0aG9kczoKKyAgICAgICAgICAgIHNlbGYuaWhvb2sucHl0ZXN0X2dlbmVyYXRlX3Rlc3RzLmNh
bGxfZXh0cmEobWV0aG9kcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGljdChtZXRhZnVuYz1tZXRhZnVuYykpCisgICAgICAgIGVsc2U6
CisgICAgICAgICAgICBzZWxmLmlob29rLnB5dGVzdF9nZW5lcmF0ZV90ZXN0cyhtZXRhZnVuYz1t
ZXRhZnVuYykKKworICAgICAgICBGdW5jdGlvbiA9IHNlbGYuX2dldGN1c3RvbWNsYXNzKCJGdW5j
dGlvbiIpCisgICAgICAgIGlmIG5vdCBtZXRhZnVuYy5fY2FsbHM6CisgICAgICAgICAgICB5aWVs
ZCBGdW5jdGlvbihuYW1lLCBwYXJlbnQ9c2VsZiwgZml4dHVyZWluZm89Zml4dHVyZWluZm8pCisg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIGFkZCBmdW5jYXJncygpIGFzIGZpeHR1cmVkZWZz
IHRvIGZpeHR1cmVpbmZvLmFyZzJmaXh0dXJlZGVmcworICAgICAgICAgICAgYWRkX2Z1bmNhcmdf
cHNldWRvX2ZpeHR1cmVfZGVmKHNlbGYsIG1ldGFmdW5jLCBmbSkKKworICAgICAgICAgICAgZm9y
IGNhbGxzcGVjIGluIG1ldGFmdW5jLl9jYWxsczoKKyAgICAgICAgICAgICAgICBzdWJuYW1lID0g
IiVzWyVzXSIgJShuYW1lLCBjYWxsc3BlYy5pZCkKKyAgICAgICAgICAgICAgICB5aWVsZCBGdW5j
dGlvbihuYW1lPXN1Ym5hbWUsIHBhcmVudD1zZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNhbGxzcGVjPWNhbGxzcGVjLCBjYWxsb2JqPWZ1bmNvYmosCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZml4dHVyZWluZm89Zml4dHVyZWluZm8sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAga2V5d29yZHM9e2NhbGxzcGVjLmlkOlRydWV9KQorCitkZWYgYWRk
X2Z1bmNhcmdfcHNldWRvX2ZpeHR1cmVfZGVmKGNvbGxlY3RvciwgbWV0YWZ1bmMsIGZpeHR1cmVt
YW5hZ2VyKToKKyAgICAjIHRoaXMgZnVuY3Rpb24gd2lsbCB0cmFuc2Zvcm0gYWxsIGNvbGxlY3Rl
ZCBjYWxscyB0byBhIGZ1bmN0aW9ucworICAgICMgaWYgdGhleSB1c2UgZGlyZWN0IGZ1bmNhcmdz
IChpLmUuIGRpcmVjdCBwYXJhbWV0cml6YXRpb24pCisgICAgIyBiZWNhdXNlIHdlIHdhbnQgbGF0
ZXIgdGVzdCBleGVjdXRpb24gdG8gYmUgYWJsZSB0byByZWx5IG9uCisgICAgIyBhbiBleGlzdGlu
ZyBGaXh0dXJlRGVmIHN0cnVjdHVyZSBmb3IgYWxsIGFyZ3VtZW50cy4KKyAgICAjIFhYWCB3ZSBj
YW4gcHJvYmFibHkgYXZvaWQgdGhpcyBhbGdvcml0aG0gIGlmIHdlIG1vZGlmeSBDYWxsU3BlYzIK
KyAgICAjIHRvIGRpcmVjdGx5IGNhcmUgZm9yIGNyZWF0aW5nIHRoZSBmaXh0dXJlZGVmcyB3aXRo
aW4gaXRzIG1ldGhvZHMuCisgICAgaWYgbm90IG1ldGFmdW5jLl9jYWxsc1swXS5mdW5jYXJnczoK
KyAgICAgICAgcmV0dXJuICMgdGhpcyBmdW5jdGlvbiBjYWxsIGRvZXMgbm90IGhhdmUgZGlyZWN0
IHBhcmFtZXRyaXphdGlvbgorICAgICMgY29sbGVjdCBmdW5jYXJncyBvZiBhbGwgY2FsbHNwZWNz
IGludG8gYSBsaXN0IG9mIHZhbHVlcworICAgIGFyZzJwYXJhbXMgPSB7fQorICAgIGFyZzJzY29w
ZSA9IHt9CisgICAgZm9yIGNhbGxzcGVjIGluIG1ldGFmdW5jLl9jYWxsczoKKyAgICAgICAgZm9y
IGFyZ25hbWUsIGFyZ3ZhbHVlIGluIGNhbGxzcGVjLmZ1bmNhcmdzLml0ZW1zKCk6CisgICAgICAg
ICAgICBhc3NlcnQgYXJnbmFtZSBub3QgaW4gY2FsbHNwZWMucGFyYW1zCisgICAgICAgICAgICBj
YWxsc3BlYy5wYXJhbXNbYXJnbmFtZV0gPSBhcmd2YWx1ZQorICAgICAgICAgICAgYXJnMnBhcmFt
c19saXN0ID0gYXJnMnBhcmFtcy5zZXRkZWZhdWx0KGFyZ25hbWUsIFtdKQorICAgICAgICAgICAg
Y2FsbHNwZWMuaW5kaWNlc1thcmduYW1lXSA9IGxlbihhcmcycGFyYW1zX2xpc3QpCisgICAgICAg
ICAgICBhcmcycGFyYW1zX2xpc3QuYXBwZW5kKGFyZ3ZhbHVlKQorICAgICAgICAgICAgaWYgYXJn
bmFtZSBub3QgaW4gYXJnMnNjb3BlOgorICAgICAgICAgICAgICAgIHNjb3BlbnVtID0gY2FsbHNw
ZWMuX2FyZzJzY29wZW51bS5nZXQoYXJnbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlbnVtX2Z1bmN0aW9uKQorICAgICAgICAg
ICAgICAgIGFyZzJzY29wZVthcmduYW1lXSA9IHNjb3Blc1tzY29wZW51bV0KKyAgICAgICAgY2Fs
bHNwZWMuZnVuY2FyZ3MuY2xlYXIoKQorCisgICAgIyByZWdpc3RlciBhcnRpZmljaWFsIEZpeHR1
cmVEZWYncyBzbyB0aGF0IGxhdGVyIGF0IHRlc3QgZXhlY3V0aW9uCisgICAgIyB0aW1lIHdlIGNh
biByZWx5IG9uIGEgcHJvcGVyIEZpeHR1cmVEZWYgdG8gZXhpc3QgZm9yIGZpeHR1cmUgc2V0dXAu
CisgICAgYXJnMmZpeHR1cmVkZWZzID0gbWV0YWZ1bmMuX2FyZzJmaXh0dXJlZGVmcworICAgIGZv
ciBhcmduYW1lLCB2YWx1ZWxpc3QgaW4gYXJnMnBhcmFtcy5pdGVtcygpOgorICAgICAgICAjIGlm
IHdlIGhhdmUgYSBzY29wZSB0aGF0IGlzIGhpZ2hlciB0aGFuIGZ1bmN0aW9uIHdlIG5lZWQKKyAg
ICAgICAgIyB0byBtYWtlIHN1cmUgd2Ugb25seSBldmVyIGNyZWF0ZSBhbiBhY2NvcmRpbmcgZml4
dHVyZWRlZiBvbgorICAgICAgICAjIGEgcGVyLXNjb3BlIGJhc2lzLiBXZSB0aHVzIHN0b3JlIGFu
ZCBjYWNoZSB0aGUgZml4dHVyZWRlZiBvbiB0aGUKKyAgICAgICAgIyBub2RlIHJlbGF0ZWQgdG8g
dGhlIHNjb3BlLgorICAgICAgICBzY29wZSA9IGFyZzJzY29wZVthcmduYW1lXQorICAgICAgICBu
b2RlID0gTm9uZQorICAgICAgICBpZiBzY29wZSAhPSAiZnVuY3Rpb24iOgorICAgICAgICAgICAg
bm9kZSA9IGdldF9zY29wZV9ub2RlKGNvbGxlY3Rvciwgc2NvcGUpCisgICAgICAgICAgICBpZiBu
b2RlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgYXNzZXJ0IHNjb3BlID09ICJjbGFzcyIgYW5k
IGlzaW5zdGFuY2UoY29sbGVjdG9yLCBNb2R1bGUpCisgICAgICAgICAgICAgICAgIyB1c2UgbW9k
dWxlLWxldmVsIGNvbGxlY3RvciBmb3IgY2xhc3Mtc2NvcGUgKGZvciBub3cpCisgICAgICAgICAg
ICAgICAgbm9kZSA9IGNvbGxlY3RvcgorICAgICAgICBpZiBub2RlIGFuZCBhcmduYW1lIGluIG5v
ZGUuX25hbWUycHNldWRvZml4dHVyZWRlZjoKKyAgICAgICAgICAgIGFyZzJmaXh0dXJlZGVmc1th
cmduYW1lXSA9IFtub2RlLl9uYW1lMnBzZXVkb2ZpeHR1cmVkZWZbYXJnbmFtZV1dCisgICAgICAg
IGVsc2U6CisgICAgICAgICAgICBmaXh0dXJlZGVmID0gIEZpeHR1cmVEZWYoZml4dHVyZW1hbmFn
ZXIsICcnLCBhcmduYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2RpcmVjdF9w
YXJhbV9maXh0dXJlX2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcyc2NvcGVb
YXJnbmFtZV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZWxpc3QsIEZhbHNlLCBG
YWxzZSkKKyAgICAgICAgICAgIGFyZzJmaXh0dXJlZGVmc1thcmduYW1lXSA9IFtmaXh0dXJlZGVm
XQorICAgICAgICAgICAgaWYgbm9kZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBub2Rl
Ll9uYW1lMnBzZXVkb2ZpeHR1cmVkZWZbYXJnbmFtZV0gPSBmaXh0dXJlZGVmCisKKworZGVmIGdl
dF9kaXJlY3RfcGFyYW1fZml4dHVyZV9mdW5jKHJlcXVlc3QpOgorICAgIHJldHVybiByZXF1ZXN0
LnBhcmFtCisKK2NsYXNzIEZ1bmNGaXh0dXJlSW5mbzoKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
YXJnbmFtZXMsIG5hbWVzX2Nsb3N1cmUsIG5hbWUyZml4dHVyZWRlZnMpOgorICAgICAgICBzZWxm
LmFyZ25hbWVzID0gYXJnbmFtZXMKKyAgICAgICAgc2VsZi5uYW1lc19jbG9zdXJlID0gbmFtZXNf
Y2xvc3VyZQorICAgICAgICBzZWxmLm5hbWUyZml4dHVyZWRlZnMgPSBuYW1lMmZpeHR1cmVkZWZz
CisKKworZGVmIF9tYXJrZWQoZnVuYywgbWFyayk6CisgICAgIiIiIFJldHVybnMgVHJ1ZSBpZiA6
ZnVuYzogaXMgYWxyZWFkeSBtYXJrZWQgd2l0aCA6bWFyazosIEZhbHNlIG90aGVyd2lzZS4KKyAg
ICBUaGlzIGNhbiBoYXBwZW4gaWYgbWFya2VyIGlzIGFwcGxpZWQgdG8gY2xhc3MgYW5kIHRoZSB0
ZXN0IGZpbGUgaXMKKyAgICBpbnZva2VkIG1vcmUgdGhhbiBvbmNlLgorICAgICIiIgorICAgIHRy
eToKKyAgICAgICAgZnVuY19tYXJrID0gZ2V0YXR0cihmdW5jLCBtYXJrLm5hbWUpCisgICAgZXhj
ZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICByZXR1cm4gbWFy
ay5hcmdzID09IGZ1bmNfbWFyay5hcmdzIGFuZCBtYXJrLmt3YXJncyA9PSBmdW5jX21hcmsua3dh
cmdzCisKKworZGVmIHRyYW5zZmVyX21hcmtlcnMoZnVuY29iaiwgY2xzLCBtb2QpOgorICAgICMg
WFhYIHRoaXMgc2hvdWxkIHJhdGhlciBiZSBjb2RlIGluIHRoZSBtYXJrIHBsdWdpbiBvciB0aGUg
bWFyaworICAgICMgcGx1Z2luIHNob3VsZCBtZXJnZSB3aXRoIHRoZSBweXRob24gcGx1Z2luLgor
ICAgIGZvciBob2xkZXIgaW4gKGNscywgbW9kKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAg
cHl0ZXN0bWFyayA9IGhvbGRlci5weXRlc3RtYXJrCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVF
cnJvcjoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmIGlzaW5zdGFuY2UocHl0ZXN0
bWFyaywgbGlzdCk6CisgICAgICAgICAgICBmb3IgbWFyayBpbiBweXRlc3RtYXJrOgorICAgICAg
ICAgICAgICAgIGlmIG5vdCBfbWFya2VkKGZ1bmNvYmosIG1hcmspOgorICAgICAgICAgICAgICAg
ICAgICBtYXJrKGZ1bmNvYmopCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBub3QgX21h
cmtlZChmdW5jb2JqLCBweXRlc3RtYXJrKToKKyAgICAgICAgICAgICAgICBweXRlc3RtYXJrKGZ1
bmNvYmopCisKK2NsYXNzIE1vZHVsZShweXRlc3QuRmlsZSwgUHlDb2xsZWN0b3IpOgorICAgICIi
IiBDb2xsZWN0b3IgZm9yIHRlc3QgY2xhc3NlcyBhbmQgZnVuY3Rpb25zLiAiIiIKKyAgICBkZWYg
X2dldG9iaihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX21lbW9pemVkY2FsbCgnX29iaics
IHNlbGYuX2ltcG9ydHRlc3Rtb2R1bGUpCisKKyAgICBkZWYgY29sbGVjdChzZWxmKToKKyAgICAg
ICAgc2VsZi5zZXNzaW9uLl9maXh0dXJlbWFuYWdlci5wYXJzZWZhY3RvcmllcyhzZWxmKQorICAg
ICAgICByZXR1cm4gc3VwZXIoTW9kdWxlLCBzZWxmKS5jb2xsZWN0KCkKKworICAgIGRlZiBfaW1w
b3J0dGVzdG1vZHVsZShzZWxmKToKKyAgICAgICAgIyB3ZSBhc3N1bWUgd2UgYXJlIG9ubHkgY2Fs
bGVkIG9uY2UgcGVyIG1vZHVsZQorICAgICAgICBpbXBvcnRtb2RlID0gc2VsZi5jb25maWcuZ2V0
b3B0aW9uKCItLWltcG9ydC1tb2RlIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbW9kID0g
c2VsZi5mc3BhdGgucHlpbXBvcnQoZW5zdXJlc3lzcGF0aD1pbXBvcnRtb2RlKQorICAgICAgICBl
eGNlcHQgU3ludGF4RXJyb3I6CisgICAgICAgICAgICByYWlzZSBzZWxmLkNvbGxlY3RFcnJvcigK
KyAgICAgICAgICAgICAgICBfcHl0ZXN0Ll9jb2RlLkV4Y2VwdGlvbkluZm8oKS5nZXRyZXByKHN0
eWxlPSJzaG9ydCIpKQorICAgICAgICBleGNlcHQgc2VsZi5mc3BhdGguSW1wb3J0TWlzbWF0Y2hF
cnJvcjoKKyAgICAgICAgICAgIGUgPSBzeXMuZXhjX2luZm8oKVsxXQorICAgICAgICAgICAgcmFp
c2Ugc2VsZi5Db2xsZWN0RXJyb3IoCisgICAgICAgICAgICAgICAgImltcG9ydCBmaWxlIG1pc21h
dGNoOlxuIgorICAgICAgICAgICAgICAgICJpbXBvcnRlZCBtb2R1bGUgJXIgaGFzIHRoaXMgX19m
aWxlX18gYXR0cmlidXRlOlxuIgorICAgICAgICAgICAgICAgICIgICVzXG4iCisgICAgICAgICAg
ICAgICAgIndoaWNoIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUgdGVzdCBmaWxlIHdlIHdhbnQgdG8g
Y29sbGVjdDpcbiIKKyAgICAgICAgICAgICAgICAiICAlc1xuIgorICAgICAgICAgICAgICAgICJI
SU5UOiByZW1vdmUgX19weWNhY2hlX18gLyAucHljIGZpbGVzIGFuZC9vciB1c2UgYSAiCisgICAg
ICAgICAgICAgICAgInVuaXF1ZSBiYXNlbmFtZSBmb3IgeW91ciB0ZXN0IGZpbGUgbW9kdWxlcyIK
KyAgICAgICAgICAgICAgICAgJSBlLmFyZ3MKKyAgICAgICAgICAgICkKKyAgICAgICAgI3ByaW50
ICJpbXBvcnRlZCB0ZXN0IG1vZHVsZSIsIG1vZAorICAgICAgICBzZWxmLmNvbmZpZy5wbHVnaW5t
YW5hZ2VyLmNvbnNpZGVyX21vZHVsZShtb2QpCisgICAgICAgIHJldHVybiBtb2QKKworICAgIGRl
ZiBzZXR1cChzZWxmKToKKyAgICAgICAgc2V0dXBfbW9kdWxlID0geHVuaXRzZXR1cChzZWxmLm9i
aiwgInNldFVwTW9kdWxlIikKKyAgICAgICAgaWYgc2V0dXBfbW9kdWxlIGlzIE5vbmU6CisgICAg
ICAgICAgICBzZXR1cF9tb2R1bGUgPSB4dW5pdHNldHVwKHNlbGYub2JqLCAic2V0dXBfbW9kdWxl
IikKKyAgICAgICAgaWYgc2V0dXBfbW9kdWxlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgI1hY
WDogbm9zZSBjb21wYXQgaGFjaywgbW92ZSB0byBub3NlIHBsdWdpbgorICAgICAgICAgICAgIyBp
ZiBpdCB0YWtlcyBhIHBvc2l0aW9uYWwgYXJnLCBpdHMgcHJvYmFibHkgYSBweXRlc3Qgc3R5bGUg
b25lCisgICAgICAgICAgICAjIHNvIHdlIHBhc3MgdGhlIGN1cnJlbnQgbW9kdWxlIG9iamVjdAor
ICAgICAgICAgICAgaWYgX2hhc19wb3NpdGlvbmFsX2FyZyhzZXR1cF9tb2R1bGUpOgorICAgICAg
ICAgICAgICAgIHNldHVwX21vZHVsZShzZWxmLm9iaikKKyAgICAgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICAgICAgc2V0dXBfbW9kdWxlKCkKKyAgICAgICAgZmluID0gZ2V0YXR0cihzZWxmLm9i
aiwgJ3RlYXJEb3duTW9kdWxlJywgTm9uZSkKKyAgICAgICAgaWYgZmluIGlzIE5vbmU6CisgICAg
ICAgICAgICBmaW4gPSBnZXRhdHRyKHNlbGYub2JqLCAndGVhcmRvd25fbW9kdWxlJywgTm9uZSkK
KyAgICAgICAgaWYgZmluIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgI1hYWDogbm9zZSBjb21w
YXQgaGFjaywgbW92ZSB0byBub3NlIHBsdWdpbgorICAgICAgICAgICAgIyBpZiBpdCB0YWtlcyBh
IHBvc2l0aW9uYWwgYXJnLCBpdCdzIHByb2JhYmx5IGEgcHl0ZXN0IHN0eWxlIG9uZQorICAgICAg
ICAgICAgIyBzbyB3ZSBwYXNzIHRoZSBjdXJyZW50IG1vZHVsZSBvYmplY3QKKyAgICAgICAgICAg
IGlmIF9oYXNfcG9zaXRpb25hbF9hcmcoZmluKToKKyAgICAgICAgICAgICAgICBmaW5hbGl6ZXIg
PSBsYW1iZGE6IGZpbihzZWxmLm9iaikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAg
ICAgZmluYWxpemVyID0gZmluCisgICAgICAgICAgICBzZWxmLmFkZGZpbmFsaXplcihmaW5hbGl6
ZXIpCisKKworY2xhc3MgQ2xhc3MoUHlDb2xsZWN0b3IpOgorICAgICIiIiBDb2xsZWN0b3IgZm9y
IHRlc3QgbWV0aG9kcy4gIiIiCisgICAgZGVmIGNvbGxlY3Qoc2VsZik6CisgICAgICAgIGlmIGhh
c2luaXQoc2VsZi5vYmopOgorICAgICAgICAgICAgc2VsZi53YXJuKCJDMSIsICJjYW5ub3QgY29s
bGVjdCB0ZXN0IGNsYXNzICVyIGJlY2F1c2UgaXQgaGFzIGEgIgorICAgICAgICAgICAgICAgICJf
X2luaXRfXyBjb25zdHJ1Y3RvciIgJSBzZWxmLm9iai5fX25hbWVfXykKKyAgICAgICAgICAgIHJl
dHVybiBbXQorICAgICAgICByZXR1cm4gW3NlbGYuX2dldGN1c3RvbWNsYXNzKCJJbnN0YW5jZSIp
KG5hbWU9IigpIiwgcGFyZW50PXNlbGYpXQorCisgICAgZGVmIHNldHVwKHNlbGYpOgorICAgICAg
ICBzZXR1cF9jbGFzcyA9IHh1bml0c2V0dXAoc2VsZi5vYmosICdzZXR1cF9jbGFzcycpCisgICAg
ICAgIGlmIHNldHVwX2NsYXNzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2V0dXBfY2xhc3Mg
PSBnZXRhdHRyKHNldHVwX2NsYXNzLCAnaW1fZnVuYycsIHNldHVwX2NsYXNzKQorICAgICAgICAg
ICAgc2V0dXBfY2xhc3MgPSBnZXRhdHRyKHNldHVwX2NsYXNzLCAnX19mdW5jX18nLCBzZXR1cF9j
bGFzcykKKyAgICAgICAgICAgIHNldHVwX2NsYXNzKHNlbGYub2JqKQorCisgICAgICAgIGZpbl9j
bGFzcyA9IGdldGF0dHIoc2VsZi5vYmosICd0ZWFyZG93bl9jbGFzcycsIE5vbmUpCisgICAgICAg
IGlmIGZpbl9jbGFzcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGZpbl9jbGFzcyA9IGdldGF0
dHIoZmluX2NsYXNzLCAnaW1fZnVuYycsIGZpbl9jbGFzcykKKyAgICAgICAgICAgIGZpbl9jbGFz
cyA9IGdldGF0dHIoZmluX2NsYXNzLCAnX19mdW5jX18nLCBmaW5fY2xhc3MpCisgICAgICAgICAg
ICBzZWxmLmFkZGZpbmFsaXplcihsYW1iZGE6IGZpbl9jbGFzcyhzZWxmLm9iaikpCisKK2NsYXNz
IEluc3RhbmNlKFB5Q29sbGVjdG9yKToKKyAgICBkZWYgX2dldG9iaihzZWxmKToKKyAgICAgICAg
b2JqID0gc2VsZi5wYXJlbnQub2JqKCkKKyAgICAgICAgcmV0dXJuIG9iagorCisgICAgZGVmIGNv
bGxlY3Qoc2VsZik6CisgICAgICAgIHNlbGYuc2Vzc2lvbi5fZml4dHVyZW1hbmFnZXIucGFyc2Vm
YWN0b3JpZXMoc2VsZikKKyAgICAgICAgcmV0dXJuIHN1cGVyKEluc3RhbmNlLCBzZWxmKS5jb2xs
ZWN0KCkKKworICAgIGRlZiBuZXdpbnN0YW5jZShzZWxmKToKKyAgICAgICAgc2VsZi5vYmogPSBz
ZWxmLl9nZXRvYmooKQorICAgICAgICByZXR1cm4gc2VsZi5vYmoKKworY2xhc3MgRnVuY3Rpb25N
aXhpbihQeW9iak1peGluKToKKyAgICAiIiIgbWl4aW4gZm9yIHRoZSBjb2RlIGNvbW1vbiB0byBG
dW5jdGlvbiBhbmQgR2VuZXJhdG9yLgorICAgICIiIgorCisgICAgZGVmIHNldHVwKHNlbGYpOgor
ICAgICAgICAiIiIgcGVyZm9ybSBzZXR1cCBmb3IgdGhpcyB0ZXN0IGZ1bmN0aW9uLiAiIiIKKyAg
ICAgICAgaWYgaGFzYXR0cihzZWxmLCAnX3ByZXNlcnZlZHBhcmVudCcpOgorICAgICAgICAgICAg
b2JqID0gc2VsZi5fcHJlc2VydmVkcGFyZW50CisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShzZWxm
LnBhcmVudCwgSW5zdGFuY2UpOgorICAgICAgICAgICAgb2JqID0gc2VsZi5wYXJlbnQubmV3aW5z
dGFuY2UoKQorICAgICAgICAgICAgc2VsZi5vYmogPSBzZWxmLl9nZXRvYmooKQorICAgICAgICBl
bHNlOgorICAgICAgICAgICAgb2JqID0gc2VsZi5wYXJlbnQub2JqCisgICAgICAgIGlmIGluc3Bl
Y3QuaXNtZXRob2Qoc2VsZi5vYmopOgorICAgICAgICAgICAgc2V0dXBfbmFtZSA9ICdzZXR1cF9t
ZXRob2QnCisgICAgICAgICAgICB0ZWFyZG93bl9uYW1lID0gJ3RlYXJkb3duX21ldGhvZCcKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIHNldHVwX25hbWUgPSAnc2V0dXBfZnVuY3Rpb24nCisg
ICAgICAgICAgICB0ZWFyZG93bl9uYW1lID0gJ3RlYXJkb3duX2Z1bmN0aW9uJworICAgICAgICBz
ZXR1cF9mdW5jX29yX21ldGhvZCA9IHh1bml0c2V0dXAob2JqLCBzZXR1cF9uYW1lKQorICAgICAg
ICBpZiBzZXR1cF9mdW5jX29yX21ldGhvZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNldHVw
X2Z1bmNfb3JfbWV0aG9kKHNlbGYub2JqKQorICAgICAgICBmaW4gPSBnZXRhdHRyKG9iaiwgdGVh
cmRvd25fbmFtZSwgTm9uZSkKKyAgICAgICAgaWYgZmluIGlzIG5vdCBOb25lOgorICAgICAgICAg
ICAgc2VsZi5hZGRmaW5hbGl6ZXIobGFtYmRhOiBmaW4oc2VsZi5vYmopKQorCisgICAgZGVmIF9w
cnVuZXRyYWNlYmFjayhzZWxmLCBleGNpbmZvKToKKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAn
X29iaicpIGFuZCBub3Qgc2VsZi5jb25maWcub3B0aW9uLmZ1bGx0cmFjZToKKyAgICAgICAgICAg
IGNvZGUgPSBfcHl0ZXN0Ll9jb2RlLkNvZGUoZ2V0X3JlYWxfZnVuYyhzZWxmLm9iaikpCisgICAg
ICAgICAgICBwYXRoLCBmaXJzdGxpbmVubyA9IGNvZGUucGF0aCwgY29kZS5maXJzdGxpbmVubwor
ICAgICAgICAgICAgdHJhY2ViYWNrID0gZXhjaW5mby50cmFjZWJhY2sKKyAgICAgICAgICAgIG50
cmFjZWJhY2sgPSB0cmFjZWJhY2suY3V0KHBhdGg9cGF0aCwgZmlyc3RsaW5lbm89Zmlyc3RsaW5l
bm8pCisgICAgICAgICAgICBpZiBudHJhY2ViYWNrID09IHRyYWNlYmFjazoKKyAgICAgICAgICAg
ICAgICBudHJhY2ViYWNrID0gbnRyYWNlYmFjay5jdXQocGF0aD1wYXRoKQorICAgICAgICAgICAg
ICAgIGlmIG50cmFjZWJhY2sgPT0gdHJhY2ViYWNrOgorICAgICAgICAgICAgICAgICAgICAjbnRy
YWNlYmFjayA9IG50cmFjZWJhY2suY3V0KGV4Y2x1ZGVwYXRoPWN1dGRpcjIpCisgICAgICAgICAg
ICAgICAgICAgIG50cmFjZWJhY2sgPSBudHJhY2ViYWNrLmZpbHRlcihmaWx0ZXJfdHJhY2ViYWNr
KQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgbnRyYWNlYmFjazoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG50cmFjZWJhY2sgPSB0cmFjZWJhY2sKKworICAgICAgICAgICAgZXhjaW5mby50
cmFjZWJhY2sgPSBudHJhY2ViYWNrLmZpbHRlcigpCisgICAgICAgICAgICAjIGlzc3VlMzY0OiBt
YXJrIGFsbCBidXQgZmlyc3QgYW5kIGxhc3QgZnJhbWVzIHRvCisgICAgICAgICAgICAjIG9ubHkg
c2hvdyBhIHNpbmdsZS1saW5lIG1lc3NhZ2UgZm9yIGVhY2ggZnJhbWUKKyAgICAgICAgICAgIGlm
IHNlbGYuY29uZmlnLm9wdGlvbi50YnN0eWxlID09ICJhdXRvIjoKKyAgICAgICAgICAgICAgICBp
ZiBsZW4oZXhjaW5mby50cmFjZWJhY2spID4gMjoKKyAgICAgICAgICAgICAgICAgICAgZm9yIGVu
dHJ5IGluIGV4Y2luZm8udHJhY2ViYWNrWzE6LTFdOgorICAgICAgICAgICAgICAgICAgICAgICAg
ZW50cnkuc2V0X3JlcHJfc3R5bGUoJ3Nob3J0JykKKworICAgIGRlZiBfcmVwcl9mYWlsdXJlX3B5
KHNlbGYsIGV4Y2luZm8sIHN0eWxlPSJsb25nIik6CisgICAgICAgIGlmIGV4Y2luZm8uZXJyaXNp
bnN0YW5jZShweXRlc3QuZmFpbC5FeGNlcHRpb24pOgorICAgICAgICAgICAgaWYgbm90IGV4Y2lu
Zm8udmFsdWUucHl0cmFjZToKKyAgICAgICAgICAgICAgICByZXR1cm4gcHkuX2J1aWx0aW4uX3Rv
dGV4dChleGNpbmZvLnZhbHVlKQorICAgICAgICByZXR1cm4gc3VwZXIoRnVuY3Rpb25NaXhpbiwg
c2VsZikuX3JlcHJfZmFpbHVyZV9weShleGNpbmZvLAorICAgICAgICAgICAgc3R5bGU9c3R5bGUp
CisKKyAgICBkZWYgcmVwcl9mYWlsdXJlKHNlbGYsIGV4Y2luZm8sIG91dGVycj1Ob25lKToKKyAg
ICAgICAgYXNzZXJ0IG91dGVyciBpcyBOb25lLCAiWFhYIG91dGVyciB1c2FnZSBpcyBkZXByZWNh
dGVkIgorICAgICAgICBzdHlsZSA9IHNlbGYuY29uZmlnLm9wdGlvbi50YnN0eWxlCisgICAgICAg
IGlmIHN0eWxlID09ICJhdXRvIjoKKyAgICAgICAgICAgIHN0eWxlID0gImxvbmciCisgICAgICAg
IHJldHVybiBzZWxmLl9yZXByX2ZhaWx1cmVfcHkoZXhjaW5mbywgc3R5bGU9c3R5bGUpCisKKwor
Y2xhc3MgR2VuZXJhdG9yKEZ1bmN0aW9uTWl4aW4sIFB5Q29sbGVjdG9yKToKKyAgICBkZWYgY29s
bGVjdChzZWxmKToKKyAgICAgICAgIyB0ZXN0IGdlbmVyYXRvcnMgYXJlIHNlZW4gYXMgY29sbGVj
dG9ycyBidXQgdGhleSBhbHNvCisgICAgICAgICMgaW52b2tlIHNldHVwL3RlYXJkb3duIG9uIHBv
cHVsYXIgcmVxdWVzdAorICAgICAgICAjIChpbmR1Y2VkIGJ5IHRoZSBjb21tb24gInRlc3RfKiIg
bmFtaW5nIHNoYXJlZCB3aXRoIG5vcm1hbCB0ZXN0cykKKyAgICAgICAgc2VsZi5zZXNzaW9uLl9z
ZXR1cHN0YXRlLnByZXBhcmUoc2VsZikKKyAgICAgICAgIyBzZWUgRnVuY3Rpb25NaXhpbi5zZXR1
cCBhbmQgdGVzdF9zZXR1cHN0YXRlX2lzX3ByZXNlcnZlZF8xMzQKKyAgICAgICAgc2VsZi5fcHJl
c2VydmVkcGFyZW50ID0gc2VsZi5wYXJlbnQub2JqCisgICAgICAgIGwgPSBbXQorICAgICAgICBz
ZWVuID0ge30KKyAgICAgICAgZm9yIGksIHggaW4gZW51bWVyYXRlKHNlbGYub2JqKCkpOgorICAg
ICAgICAgICAgbmFtZSwgY2FsbCwgYXJncyA9IHNlbGYuZ2V0Y2FsbGFyZ3MoeCkKKyAgICAgICAg
ICAgIGlmIG5vdCBjYWxsYWJsZShjYWxsKToKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJy
b3IoIiVyIHlpZWxkZWQgbm9uIGNhbGxhYmxlIHRlc3QgJXIiICUoc2VsZi5vYmosIGNhbGwsKSkK
KyAgICAgICAgICAgIGlmIG5hbWUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBuYW1lID0gIlsl
ZF0iICUgaQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBuYW1lID0gIlsnJXMn
XSIgJSBuYW1lCisgICAgICAgICAgICBpZiBuYW1lIGluIHNlZW46CisgICAgICAgICAgICAgICAg
cmFpc2UgVmFsdWVFcnJvcigiJXIgZ2VuZXJhdGVkIHRlc3RzIHdpdGggbm9uLXVuaXF1ZSBuYW1l
ICVyIiAlKHNlbGYsIG5hbWUpKQorICAgICAgICAgICAgc2VlbltuYW1lXSA9IFRydWUKKyAgICAg
ICAgICAgIGwuYXBwZW5kKHNlbGYuRnVuY3Rpb24obmFtZSwgc2VsZiwgYXJncz1hcmdzLCBjYWxs
b2JqPWNhbGwpKQorICAgICAgICByZXR1cm4gbAorCisgICAgZGVmIGdldGNhbGxhcmdzKHNlbGYs
IG9iaik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG9iaiwgKHR1cGxlLCBsaXN0KSk6Cisg
ICAgICAgICAgICBvYmogPSAob2JqLCkKKyAgICAgICAgIyBleHBsaWN0IG5hbWluZworICAgICAg
ICBpZiBpc2luc3RhbmNlKG9ialswXSwgcHkuYnVpbHRpbi5fYmFzZXN0cmluZyk6CisgICAgICAg
ICAgICBuYW1lID0gb2JqWzBdCisgICAgICAgICAgICBvYmogPSBvYmpbMTpdCisgICAgICAgIGVs
c2U6CisgICAgICAgICAgICBuYW1lID0gTm9uZQorICAgICAgICBjYWxsLCBhcmdzID0gb2JqWzBd
LCBvYmpbMTpdCisgICAgICAgIHJldHVybiBuYW1lLCBjYWxsLCBhcmdzCisKKworZGVmIGhhc2lu
aXQob2JqKToKKyAgICBpbml0ID0gZ2V0YXR0cihvYmosICdfX2luaXRfXycsIE5vbmUpCisgICAg
aWYgaW5pdDoKKyAgICAgICAgaWYgaW5pdCAhPSBvYmplY3QuX19pbml0X186CisgICAgICAgICAg
ICByZXR1cm4gVHJ1ZQorCisKKworZGVmIGZpbGxmaXh0dXJlcyhmdW5jdGlvbik6CisgICAgIiIi
IGZpbGwgbWlzc2luZyBmdW5jYXJncyBmb3IgYSB0ZXN0IGZ1bmN0aW9uLiAiIiIKKyAgICB0cnk6
CisgICAgICAgIHJlcXVlc3QgPSBmdW5jdGlvbi5fcmVxdWVzdAorICAgIGV4Y2VwdCBBdHRyaWJ1
dGVFcnJvcjoKKyAgICAgICAgIyBYWFggdGhpcyBzcGVjaWFsIGNvZGUgcGF0aCBpcyBvbmx5IGV4
cGVjdGVkIHRvIGV4ZWN1dGUKKyAgICAgICAgIyB3aXRoIHRoZSBvZWpza2l0IHBsdWdpbi4gIEl0
IHVzZXMgY2xhc3NlcyB3aXRoIGZ1bmNhcmdzCisgICAgICAgICMgYW5kIHdlIHRodXMgaGF2ZSB0
byB3b3JrIGEgYml0IHRvIGFsbG93IHRoaXMuCisgICAgICAgIGZtID0gZnVuY3Rpb24uc2Vzc2lv
bi5fZml4dHVyZW1hbmFnZXIKKyAgICAgICAgZmkgPSBmbS5nZXRmaXh0dXJlaW5mbyhmdW5jdGlv
bi5wYXJlbnQsIGZ1bmN0aW9uLm9iaiwgTm9uZSkKKyAgICAgICAgZnVuY3Rpb24uX2ZpeHR1cmVp
bmZvID0gZmkKKyAgICAgICAgcmVxdWVzdCA9IGZ1bmN0aW9uLl9yZXF1ZXN0ID0gRml4dHVyZVJl
cXVlc3QoZnVuY3Rpb24pCisgICAgICAgIHJlcXVlc3QuX2ZpbGxmaXh0dXJlcygpCisgICAgICAg
ICMgcHJ1bmUgb3V0IGZ1bmNhcmdzIGZvciBqc3Rlc3RzCisgICAgICAgIG5ld2Z1bmNhcmdzID0g
e30KKyAgICAgICAgZm9yIG5hbWUgaW4gZmkuYXJnbmFtZXM6CisgICAgICAgICAgICBuZXdmdW5j
YXJnc1tuYW1lXSA9IGZ1bmN0aW9uLmZ1bmNhcmdzW25hbWVdCisgICAgICAgIGZ1bmN0aW9uLmZ1
bmNhcmdzID0gbmV3ZnVuY2FyZ3MKKyAgICBlbHNlOgorICAgICAgICByZXF1ZXN0Ll9maWxsZml4
dHVyZXMoKQorCisKK19ub3RleGlzdHMgPSBvYmplY3QoKQorCitjbGFzcyBDYWxsU3BlYzIob2Jq
ZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWV0YWZ1bmMpOgorICAgICAgICBzZWxmLm1l
dGFmdW5jID0gbWV0YWZ1bmMKKyAgICAgICAgc2VsZi5mdW5jYXJncyA9IHt9CisgICAgICAgIHNl
bGYuX2lkbGlzdCA9IFtdCisgICAgICAgIHNlbGYucGFyYW1zID0ge30KKyAgICAgICAgc2VsZi5f
Z2xvYmFsaWQgPSBfbm90ZXhpc3RzCisgICAgICAgIHNlbGYuX2dsb2JhbGlkX2FyZ3MgPSBzZXQo
KQorICAgICAgICBzZWxmLl9nbG9iYWxwYXJhbSA9IF9ub3RleGlzdHMKKyAgICAgICAgc2VsZi5f
YXJnMnNjb3BlbnVtID0ge30gICMgdXNlZCBmb3Igc29ydGluZyBwYXJhbWV0cml6ZWQgcmVzb3Vy
Y2VzCisgICAgICAgIHNlbGYua2V5d29yZHMgPSB7fQorICAgICAgICBzZWxmLmluZGljZXMgPSB7
fQorCisgICAgZGVmIGNvcHkoc2VsZiwgbWV0YWZ1bmMpOgorICAgICAgICBjcyA9IENhbGxTcGVj
MihzZWxmLm1ldGFmdW5jKQorICAgICAgICBjcy5mdW5jYXJncy51cGRhdGUoc2VsZi5mdW5jYXJn
cykKKyAgICAgICAgY3MucGFyYW1zLnVwZGF0ZShzZWxmLnBhcmFtcykKKyAgICAgICAgY3Mua2V5
d29yZHMudXBkYXRlKHNlbGYua2V5d29yZHMpCisgICAgICAgIGNzLmluZGljZXMudXBkYXRlKHNl
bGYuaW5kaWNlcykKKyAgICAgICAgY3MuX2FyZzJzY29wZW51bS51cGRhdGUoc2VsZi5fYXJnMnNj
b3BlbnVtKQorICAgICAgICBjcy5faWRsaXN0ID0gbGlzdChzZWxmLl9pZGxpc3QpCisgICAgICAg
IGNzLl9nbG9iYWxpZCA9IHNlbGYuX2dsb2JhbGlkCisgICAgICAgIGNzLl9nbG9iYWxpZF9hcmdz
ID0gc2VsZi5fZ2xvYmFsaWRfYXJncworICAgICAgICBjcy5fZ2xvYmFscGFyYW0gPSBzZWxmLl9n
bG9iYWxwYXJhbQorICAgICAgICByZXR1cm4gY3MKKworICAgIGRlZiBfY2hlY2thcmdub3Rjb250
YWluZWQoc2VsZiwgYXJnKToKKyAgICAgICAgaWYgYXJnIGluIHNlbGYucGFyYW1zIG9yIGFyZyBp
biBzZWxmLmZ1bmNhcmdzOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiZHVwbGljYXRl
ICVyIiAlKGFyZywpKQorCisgICAgZGVmIGdldHBhcmFtKHNlbGYsIG5hbWUpOgorICAgICAgICB0
cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5wYXJhbXNbbmFtZV0KKyAgICAgICAgZXhjZXB0
IEtleUVycm9yOgorICAgICAgICAgICAgaWYgc2VsZi5fZ2xvYmFscGFyYW0gaXMgX25vdGV4aXN0
czoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKG5hbWUpCisgICAgICAgICAgICBy
ZXR1cm4gc2VsZi5fZ2xvYmFscGFyYW0KKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBpZChzZWxm
KToKKyAgICAgICAgcmV0dXJuICItIi5qb2luKG1hcChzdHIsIGZpbHRlcihOb25lLCBzZWxmLl9p
ZGxpc3QpKSkKKworICAgIGRlZiBzZXRtdWx0aShzZWxmLCB2YWx0eXBlcywgYXJnbmFtZXMsIHZh
bHNldCwgaWQsIGtleXdvcmRzLCBzY29wZW51bSwKKyAgICAgICAgICAgICAgICAgcGFyYW1faW5k
ZXgpOgorICAgICAgICBmb3IgYXJnLHZhbCBpbiB6aXAoYXJnbmFtZXMsIHZhbHNldCk6CisgICAg
ICAgICAgICBzZWxmLl9jaGVja2FyZ25vdGNvbnRhaW5lZChhcmcpCisgICAgICAgICAgICB2YWx0
eXBlX2Zvcl9hcmcgPSB2YWx0eXBlc1thcmddCisgICAgICAgICAgICBnZXRhdHRyKHNlbGYsIHZh
bHR5cGVfZm9yX2FyZylbYXJnXSA9IHZhbAorICAgICAgICAgICAgc2VsZi5pbmRpY2VzW2FyZ10g
PSBwYXJhbV9pbmRleAorICAgICAgICAgICAgc2VsZi5fYXJnMnNjb3BlbnVtW2FyZ10gPSBzY29w
ZW51bQorICAgICAgICAgICAgaWYgdmFsIGlzIF9ub3RleGlzdHM6CisgICAgICAgICAgICAgICAg
c2VsZi5fZW1wdHlwYXJhbXNwZWNpZmllZCA9IFRydWUKKyAgICAgICAgc2VsZi5faWRsaXN0LmFw
cGVuZChpZCkKKyAgICAgICAgc2VsZi5rZXl3b3Jkcy51cGRhdGUoa2V5d29yZHMpCisKKyAgICBk
ZWYgc2V0YWxsKHNlbGYsIGZ1bmNhcmdzLCBpZCwgcGFyYW0pOgorICAgICAgICBmb3IgeCBpbiBm
dW5jYXJnczoKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrYXJnbm90Y29udGFpbmVkKHgpCisgICAg
ICAgIHNlbGYuZnVuY2FyZ3MudXBkYXRlKGZ1bmNhcmdzKQorICAgICAgICBpZiBpZCBpcyBub3Qg
X25vdGV4aXN0czoKKyAgICAgICAgICAgIHNlbGYuX2lkbGlzdC5hcHBlbmQoaWQpCisgICAgICAg
IGlmIHBhcmFtIGlzIG5vdCBfbm90ZXhpc3RzOgorICAgICAgICAgICAgYXNzZXJ0IHNlbGYuX2ds
b2JhbHBhcmFtIGlzIF9ub3RleGlzdHMKKyAgICAgICAgICAgIHNlbGYuX2dsb2JhbHBhcmFtID0g
cGFyYW0KKyAgICAgICAgZm9yIGFyZyBpbiBmdW5jYXJnczoKKyAgICAgICAgICAgIHNlbGYuX2Fy
ZzJzY29wZW51bVthcmddID0gc2NvcGVudW1fZnVuY3Rpb24KKworCitjbGFzcyBGdW5jYXJnbmFt
ZXNDb21wYXRBdHRyOgorICAgICIiIiBoZWxwZXIgY2xhc3Mgc28gdGhhdCBNZXRhZnVuYywgRnVu
Y3Rpb24gYW5kIEZpeHR1cmVSZXF1ZXN0CisgICAgZG9uJ3QgbmVlZCB0byBlYWNoIGRlZmluZSB0
aGUgImZ1bmNhcmduYW1lcyIgY29tcGF0aWJpbGl0eSBhdHRyaWJ1dGUuCisgICAgIiIiCisgICAg
QHByb3BlcnR5CisgICAgZGVmIGZ1bmNhcmduYW1lcyhzZWxmKToKKyAgICAgICAgIiIiIGFsaWFz
IGF0dHJpYnV0ZSBmb3IgYGBmaXh0dXJlbmFtZXNgYCBmb3IgcHJlLTIuMyBjb21wYXRpYmlsaXR5
IiIiCisgICAgICAgIHJldHVybiBzZWxmLmZpeHR1cmVuYW1lcworCitjbGFzcyBNZXRhZnVuYyhG
dW5jYXJnbmFtZXNDb21wYXRBdHRyKToKKyAgICAiIiIKKyAgICBNZXRhZnVuYyBvYmplY3RzIGFy
ZSBwYXNzZWQgdG8gdGhlIGBgcHl0ZXN0X2dlbmVyYXRlX3Rlc3RzYGAgaG9vay4KKyAgICBUaGV5
IGhlbHAgdG8gaW5zcGVjdCBhIHRlc3QgZnVuY3Rpb24gYW5kIHRvIGdlbmVyYXRlIHRlc3RzIGFj
Y29yZGluZyB0bworICAgIHRlc3QgY29uZmlndXJhdGlvbiBvciB2YWx1ZXMgc3BlY2lmaWVkIGlu
IHRoZSBjbGFzcyBvciBtb2R1bGUgd2hlcmUgYQorICAgIHRlc3QgZnVuY3Rpb24gaXMgZGVmaW5l
ZC4KKworICAgIDppdmFyIGZpeHR1cmVuYW1lczogc2V0IG9mIGZpeHR1cmUgbmFtZXMgcmVxdWly
ZWQgYnkgdGhlIHRlc3QgZnVuY3Rpb24KKworICAgIDppdmFyIGZ1bmN0aW9uOiB1bmRlcmx5aW5n
IHB5dGhvbiB0ZXN0IGZ1bmN0aW9uCisKKyAgICA6aXZhciBjbHM6IGNsYXNzIG9iamVjdCB3aGVy
ZSB0aGUgdGVzdCBmdW5jdGlvbiBpcyBkZWZpbmVkIGluIG9yIGBgTm9uZWBgLgorCisgICAgOml2
YXIgbW9kdWxlOiB0aGUgbW9kdWxlIG9iamVjdCB3aGVyZSB0aGUgdGVzdCBmdW5jdGlvbiBpcyBk
ZWZpbmVkIGluLgorCisgICAgOml2YXIgY29uZmlnOiBhY2Nlc3MgdG8gdGhlIDpjbGFzczpgX3B5
dGVzdC5jb25maWcuQ29uZmlnYCBvYmplY3QgZm9yIHRoZQorICAgICAgICB0ZXN0IHNlc3Npb24u
CisKKyAgICA6aXZhciBmdW5jYXJnbmFtZXM6CisgICAgICAgIC4uIGRlcHJlY2F0ZWQ6OiAyLjMK
KyAgICAgICAgICAgIFVzZSBgYGZpeHR1cmVuYW1lc2BgIGluc3RlYWQuCisgICAgIiIiCisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIGZ1bmN0aW9uLCBmaXh0dXJlaW5mbywgY29uZmlnLCBjbHM9Tm9u
ZSwgbW9kdWxlPU5vbmUpOgorICAgICAgICBzZWxmLmNvbmZpZyA9IGNvbmZpZworICAgICAgICBz
ZWxmLm1vZHVsZSA9IG1vZHVsZQorICAgICAgICBzZWxmLmZ1bmN0aW9uID0gZnVuY3Rpb24KKyAg
ICAgICAgc2VsZi5maXh0dXJlbmFtZXMgPSBmaXh0dXJlaW5mby5uYW1lc19jbG9zdXJlCisgICAg
ICAgIHNlbGYuX2FyZzJmaXh0dXJlZGVmcyA9IGZpeHR1cmVpbmZvLm5hbWUyZml4dHVyZWRlZnMK
KyAgICAgICAgc2VsZi5jbHMgPSBjbHMKKyAgICAgICAgc2VsZi5fY2FsbHMgPSBbXQorICAgICAg
ICBzZWxmLl9pZHMgPSBweS5idWlsdGluLnNldCgpCisKKyAgICBkZWYgcGFyYW1ldHJpemUoc2Vs
ZiwgYXJnbmFtZXMsIGFyZ3ZhbHVlcywgaW5kaXJlY3Q9RmFsc2UsIGlkcz1Ob25lLAorICAgICAg
ICBzY29wZT1Ob25lKToKKyAgICAgICAgIiIiIEFkZCBuZXcgaW52b2NhdGlvbnMgdG8gdGhlIHVu
ZGVybHlpbmcgdGVzdCBmdW5jdGlvbiB1c2luZyB0aGUgbGlzdAorICAgICAgICBvZiBhcmd2YWx1
ZXMgZm9yIHRoZSBnaXZlbiBhcmduYW1lcy4gIFBhcmFtZXRyaXphdGlvbiBpcyBwZXJmb3JtZWQK
KyAgICAgICAgZHVyaW5nIHRoZSBjb2xsZWN0aW9uIHBoYXNlLiAgSWYgeW91IG5lZWQgdG8gc2V0
dXAgZXhwZW5zaXZlIHJlc291cmNlcworICAgICAgICBzZWUgYWJvdXQgc2V0dGluZyBpbmRpcmVj
dCB0byBkbyBpdCByYXRoZXIgYXQgdGVzdCBzZXR1cCB0aW1lLgorCisgICAgICAgIDphcmcgYXJn
bmFtZXM6IGEgY29tbWEtc2VwYXJhdGVkIHN0cmluZyBkZW5vdGluZyBvbmUgb3IgbW9yZSBhcmd1
bWVudAorICAgICAgICAgICAgICAgICAgICAgICBuYW1lcywgb3IgYSBsaXN0L3R1cGxlIG9mIGFy
Z3VtZW50IHN0cmluZ3MuCisKKyAgICAgICAgOmFyZyBhcmd2YWx1ZXM6IFRoZSBsaXN0IG9mIGFy
Z3ZhbHVlcyBkZXRlcm1pbmVzIGhvdyBvZnRlbiBhCisgICAgICAgICAgICB0ZXN0IGlzIGludm9r
ZWQgd2l0aCBkaWZmZXJlbnQgYXJndW1lbnQgdmFsdWVzLiAgSWYgb25seSBvbmUKKyAgICAgICAg
ICAgIGFyZ25hbWUgd2FzIHNwZWNpZmllZCBhcmd2YWx1ZXMgaXMgYSBsaXN0IG9mIHZhbHVlcy4g
IElmIE4KKyAgICAgICAgICAgIGFyZ25hbWVzIHdlcmUgc3BlY2lmaWVkLCBhcmd2YWx1ZXMgbXVz
dCBiZSBhIGxpc3Qgb2YgTi10dXBsZXMsCisgICAgICAgICAgICB3aGVyZSBlYWNoIHR1cGxlLWVs
ZW1lbnQgc3BlY2lmaWVzIGEgdmFsdWUgZm9yIGl0cyByZXNwZWN0aXZlCisgICAgICAgICAgICBh
cmduYW1lLgorCisgICAgICAgIDphcmcgaW5kaXJlY3Q6IFRoZSBsaXN0IG9mIGFyZ25hbWVzIG9y
IGJvb2xlYW4uIEEgbGlzdCBvZiBhcmd1bWVudHMnCisgICAgICAgICAgICBuYW1lcyAoc3Vic2V0
IG9mIGFyZ25hbWVzKS4gSWYgVHJ1ZSB0aGUgbGlzdCBjb250YWlucyBhbGwgbmFtZXMgZnJvbQor
ICAgICAgICAgICAgdGhlIGFyZ25hbWVzLiBFYWNoIGFyZ3ZhbHVlIGNvcnJlc3BvbmRpbmcgdG8g
YW4gYXJnbmFtZSBpbiB0aGlzIGxpc3Qgd2lsbAorICAgICAgICAgICAgYmUgcGFzc2VkIGFzIHJl
cXVlc3QucGFyYW0gdG8gaXRzIHJlc3BlY3RpdmUgYXJnbmFtZSBmaXh0dXJlCisgICAgICAgICAg
ICBmdW5jdGlvbiBzbyB0aGF0IGl0IGNhbiBwZXJmb3JtIG1vcmUgZXhwZW5zaXZlIHNldHVwcyBk
dXJpbmcgdGhlCisgICAgICAgICAgICBzZXR1cCBwaGFzZSBvZiBhIHRlc3QgcmF0aGVyIHRoYW4g
YXQgY29sbGVjdGlvbiB0aW1lLgorCisgICAgICAgIDphcmcgaWRzOiBsaXN0IG9mIHN0cmluZyBp
ZHMsIG9yIGEgY2FsbGFibGUuCisgICAgICAgICAgICBJZiBzdHJpbmdzLCBlYWNoIGlzIGNvcnJl
c3BvbmRpbmcgdG8gdGhlIGFyZ3ZhbHVlcyBzbyB0aGF0IHRoZXkgYXJlCisgICAgICAgICAgICBw
YXJ0IG9mIHRoZSB0ZXN0IGlkLgorICAgICAgICAgICAgSWYgY2FsbGFibGUsIGl0IHNob3VsZCB0
YWtlIG9uZSBhcmd1bWVudCAoYSBzaW5nbGUgYXJndmFsdWUpIGFuZCByZXR1cm4KKyAgICAgICAg
ICAgIGEgc3RyaW5nIG9yIHJldHVybiBOb25lLiBJZiBOb25lLCB0aGUgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgaWQgZm9yIHRoYXQKKyAgICAgICAgICAgIGFyZ3VtZW50IHdpbGwgYmUgdXNlZC4K
KyAgICAgICAgICAgIElmIG5vIGlkcyBhcmUgcHJvdmlkZWQgdGhleSB3aWxsIGJlIGdlbmVyYXRl
ZCBhdXRvbWF0aWNhbGx5IGZyb20KKyAgICAgICAgICAgIHRoZSBhcmd2YWx1ZXMuCisKKyAgICAg
ICAgOmFyZyBzY29wZTogaWYgc3BlY2lmaWVkIGl0IGRlbm90ZXMgdGhlIHNjb3BlIG9mIHRoZSBw
YXJhbWV0ZXJzLgorICAgICAgICAgICAgVGhlIHNjb3BlIGlzIHVzZWQgZm9yIGdyb3VwaW5nIHRl
c3RzIGJ5IHBhcmFtZXRlciBpbnN0YW5jZXMuCisgICAgICAgICAgICBJdCB3aWxsIGFsc28gb3Zl
cnJpZGUgYW55IGZpeHR1cmUtZnVuY3Rpb24gZGVmaW5lZCBzY29wZSwgYWxsb3dpbmcKKyAgICAg
ICAgICAgIHRvIHNldCBhIGR5bmFtaWMgc2NvcGUgdXNpbmcgdGVzdCBjb250ZXh0IG9yIGNvbmZp
Z3VyYXRpb24uCisgICAgICAgICIiIgorCisgICAgICAgICMgaW5kaXZpZHVhbCBwYXJhbWV0cml6
ZWQgYXJndW1lbnQgc2V0cyBjYW4gYmUgd3JhcHBlZCBpbiBhIHNlcmllcworICAgICAgICAjIG9m
IG1hcmtlcnMgaW4gd2hpY2ggY2FzZSB3ZSB1bndyYXAgdGhlIHZhbHVlcyBhbmQgYXBwbHkgdGhl
IG1hcmsKKyAgICAgICAgIyBhdCBGdW5jdGlvbiBpbml0CisgICAgICAgIG5ld2tleXdvcmRzID0g
e30KKyAgICAgICAgdW53cmFwcGVkX2FyZ3ZhbHVlcyA9IFtdCisgICAgICAgIGZvciBpLCBhcmd2
YWwgaW4gZW51bWVyYXRlKGFyZ3ZhbHVlcyk6CisgICAgICAgICAgICB3aGlsZSBpc2luc3RhbmNl
KGFyZ3ZhbCwgTWFya0RlY29yYXRvcik6CisgICAgICAgICAgICAgICAgbmV3bWFyayA9IE1hcmtE
ZWNvcmF0b3IoYXJndmFsLm1hcmtuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFyZ3ZhbC5hcmdzWzotMV0sIGFyZ3ZhbC5rd2FyZ3MpCisgICAgICAgICAgICAg
ICAgbmV3bWFya3MgPSBuZXdrZXl3b3Jkcy5zZXRkZWZhdWx0KGksIHt9KQorICAgICAgICAgICAg
ICAgIG5ld21hcmtzW25ld21hcmsubWFya25hbWVdID0gbmV3bWFyaworICAgICAgICAgICAgICAg
IGFyZ3ZhbCA9IGFyZ3ZhbC5hcmdzWy0xXQorICAgICAgICAgICAgdW53cmFwcGVkX2FyZ3ZhbHVl
cy5hcHBlbmQoYXJndmFsKQorICAgICAgICBhcmd2YWx1ZXMgPSB1bndyYXBwZWRfYXJndmFsdWVz
CisKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoYXJnbmFtZXMsICh0dXBsZSwgbGlzdCkpOgor
ICAgICAgICAgICAgYXJnbmFtZXMgPSBbeC5zdHJpcCgpIGZvciB4IGluIGFyZ25hbWVzLnNwbGl0
KCIsIikgaWYgeC5zdHJpcCgpXQorICAgICAgICAgICAgaWYgbGVuKGFyZ25hbWVzKSA9PSAxOgor
ICAgICAgICAgICAgICAgIGFyZ3ZhbHVlcyA9IFsodmFsLCkgZm9yIHZhbCBpbiBhcmd2YWx1ZXNd
CisgICAgICAgIGlmIG5vdCBhcmd2YWx1ZXM6CisgICAgICAgICAgICBhcmd2YWx1ZXMgPSBbKF9u
b3RleGlzdHMsKSAqIGxlbihhcmduYW1lcyldCisKKyAgICAgICAgaWYgc2NvcGUgaXMgTm9uZToK
KyAgICAgICAgICAgIHNjb3BlID0gImZ1bmN0aW9uIgorICAgICAgICBzY29wZW51bSA9IHNjb3Bl
cy5pbmRleChzY29wZSkKKyAgICAgICAgdmFsdHlwZXMgPSB7fQorICAgICAgICBmb3IgYXJnIGlu
IGFyZ25hbWVzOgorICAgICAgICAgICAgaWYgYXJnIG5vdCBpbiBzZWxmLmZpeHR1cmVuYW1lczoK
KyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCIlciB1c2VzIG5vIGZpeHR1cmUgJXIi
ICUoc2VsZi5mdW5jdGlvbiwgYXJnKSkKKworICAgICAgICBpZiBpbmRpcmVjdCBpcyBUcnVlOgor
ICAgICAgICAgICAgdmFsdHlwZXMgPSBkaWN0LmZyb21rZXlzKGFyZ25hbWVzLCAicGFyYW1zIikK
KyAgICAgICAgZWxpZiBpbmRpcmVjdCBpcyBGYWxzZToKKyAgICAgICAgICAgIHZhbHR5cGVzID0g
ZGljdC5mcm9ta2V5cyhhcmduYW1lcywgImZ1bmNhcmdzIikKKyAgICAgICAgZWxpZiBpc2luc3Rh
bmNlKGluZGlyZWN0LCAodHVwbGUsIGxpc3QpKToKKyAgICAgICAgICAgIHZhbHR5cGVzID0gZGlj
dC5mcm9ta2V5cyhhcmduYW1lcywgImZ1bmNhcmdzIikKKyAgICAgICAgICAgIGZvciBhcmcgaW4g
aW5kaXJlY3Q6CisgICAgICAgICAgICAgICAgaWYgYXJnIG5vdCBpbiBhcmduYW1lczoKKyAgICAg
ICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiaW5kaXJlY3QgZ2l2ZW4gdG8gJXI6IGZp
eHR1cmUgJXIgZG9lc24ndCBleGlzdCIgJSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzZWxmLmZ1bmN0aW9uLCBhcmcpKQorICAgICAgICAgICAgICAgIHZhbHR5cGVzW2Fy
Z10gPSAicGFyYW1zIgorICAgICAgICBpZGZuID0gTm9uZQorICAgICAgICBpZiBjYWxsYWJsZShp
ZHMpOgorICAgICAgICAgICAgaWRmbiA9IGlkcworICAgICAgICAgICAgaWRzID0gTm9uZQorICAg
ICAgICBpZiBpZHMgYW5kIGxlbihpZHMpICE9IGxlbihhcmd2YWx1ZXMpOgorICAgICAgICAgICAg
cmFpc2UgVmFsdWVFcnJvcignJWQgdGVzdHMgc3BlY2lmaWVkIHdpdGggJWQgaWRzJyAlKAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4oYXJndmFsdWVzKSwgbGVuKGlkcykpKQorICAg
ICAgICBpZiBub3QgaWRzOgorICAgICAgICAgICAgaWRzID0gaWRtYWtlcihhcmduYW1lcywgYXJn
dmFsdWVzLCBpZGZuKQorICAgICAgICBuZXdjYWxscyA9IFtdCisgICAgICAgIGZvciBjYWxsc3Bl
YyBpbiBzZWxmLl9jYWxscyBvciBbQ2FsbFNwZWMyKHNlbGYpXToKKyAgICAgICAgICAgIGZvciBw
YXJhbV9pbmRleCwgdmFsc2V0IGluIGVudW1lcmF0ZShhcmd2YWx1ZXMpOgorICAgICAgICAgICAg
ICAgIGFzc2VydCBsZW4odmFsc2V0KSA9PSBsZW4oYXJnbmFtZXMpCisgICAgICAgICAgICAgICAg
bmV3Y2FsbHNwZWMgPSBjYWxsc3BlYy5jb3B5KHNlbGYpCisgICAgICAgICAgICAgICAgbmV3Y2Fs
bHNwZWMuc2V0bXVsdGkodmFsdHlwZXMsIGFyZ25hbWVzLCB2YWxzZXQsIGlkc1twYXJhbV9pbmRl
eF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3a2V5d29yZHMuZ2V0
KHBhcmFtX2luZGV4LCB7fSksIHNjb3BlbnVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmFtX2luZGV4KQorICAgICAgICAgICAgICAgIG5ld2NhbGxzLmFwcGVuZChu
ZXdjYWxsc3BlYykKKyAgICAgICAgc2VsZi5fY2FsbHMgPSBuZXdjYWxscworCisgICAgZGVmIGFk
ZGNhbGwoc2VsZiwgZnVuY2FyZ3M9Tm9uZSwgaWQ9X25vdGV4aXN0cywgcGFyYW09X25vdGV4aXN0
cyk6CisgICAgICAgICIiIiAoZGVwcmVjYXRlZCwgdXNlIHBhcmFtZXRyaXplKSBBZGQgYSBuZXcg
Y2FsbCB0byB0aGUgdW5kZXJseWluZworICAgICAgICB0ZXN0IGZ1bmN0aW9uIGR1cmluZyB0aGUg
Y29sbGVjdGlvbiBwaGFzZSBvZiBhIHRlc3QgcnVuLiAgTm90ZSB0aGF0CisgICAgICAgIHJlcXVl
c3QuYWRkY2FsbCgpIGlzIGNhbGxlZCBkdXJpbmcgdGhlIHRlc3QgY29sbGVjdGlvbiBwaGFzZSBw
cmlvciBhbmQKKyAgICAgICAgaW5kZXBlbmRlbnRseSB0byBhY3R1YWwgdGVzdCBleGVjdXRpb24u
ICBZb3Ugc2hvdWxkIG9ubHkgdXNlIGFkZGNhbGwoKQorICAgICAgICBpZiB5b3UgbmVlZCB0byBz
cGVjaWZ5IG11bHRpcGxlIGFyZ3VtZW50cyBvZiBhIHRlc3QgZnVuY3Rpb24uCisKKyAgICAgICAg
OmFyZyBmdW5jYXJnczogYXJndW1lbnQga2V5d29yZCBkaWN0aW9uYXJ5IHVzZWQgd2hlbiBpbnZv
a2luZworICAgICAgICAgICAgdGhlIHRlc3QgZnVuY3Rpb24uCisKKyAgICAgICAgOmFyZyBpZDog
dXNlZCBmb3IgcmVwb3J0aW5nIGFuZCBpZGVudGlmaWNhdGlvbiBwdXJwb3Nlcy4gIElmIHlvdQor
ICAgICAgICAgICAgZG9uJ3Qgc3VwcGx5IGFuIGBpZGAgYW4gYXV0b21hdGljIHVuaXF1ZSBpZCB3
aWxsIGJlIGdlbmVyYXRlZC4KKworICAgICAgICA6YXJnIHBhcmFtOiBhIHBhcmFtZXRlciB3aGlj
aCB3aWxsIGJlIGV4cG9zZWQgdG8gYSBsYXRlciBmaXh0dXJlIGZ1bmN0aW9uCisgICAgICAgICAg
ICBpbnZvY2F0aW9uIHRocm91Z2ggdGhlIGBgcmVxdWVzdC5wYXJhbWBgIGF0dHJpYnV0ZS4KKyAg
ICAgICAgIiIiCisgICAgICAgIGFzc2VydCBmdW5jYXJncyBpcyBOb25lIG9yIGlzaW5zdGFuY2Uo
ZnVuY2FyZ3MsIGRpY3QpCisgICAgICAgIGlmIGZ1bmNhcmdzIGlzIG5vdCBOb25lOgorICAgICAg
ICAgICAgZm9yIG5hbWUgaW4gZnVuY2FyZ3M6CisgICAgICAgICAgICAgICAgaWYgbmFtZSBub3Qg
aW4gc2VsZi5maXh0dXJlbmFtZXM6CisgICAgICAgICAgICAgICAgICAgIHB5dGVzdC5mYWlsKCJm
dW5jYXJnICVyIG5vdCB1c2VkIGluIHRoaXMgZnVuY3Rpb24uIiAlIG5hbWUpCisgICAgICAgIGVs
c2U6CisgICAgICAgICAgICBmdW5jYXJncyA9IHt9CisgICAgICAgIGlmIGlkIGlzIE5vbmU6Cisg
ICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJpZD1Ob25lIG5vdCBhbGxvd2VkIikKKyAgICAg
ICAgaWYgaWQgaXMgX25vdGV4aXN0czoKKyAgICAgICAgICAgIGlkID0gbGVuKHNlbGYuX2NhbGxz
KQorICAgICAgICBpZCA9IHN0cihpZCkKKyAgICAgICAgaWYgaWQgaW4gc2VsZi5faWRzOgorICAg
ICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiZHVwbGljYXRlIGlkICVyIiAlIGlkKQorICAgICAg
ICBzZWxmLl9pZHMuYWRkKGlkKQorCisgICAgICAgIGNzID0gQ2FsbFNwZWMyKHNlbGYpCisgICAg
ICAgIGNzLnNldGFsbChmdW5jYXJncywgaWQsIHBhcmFtKQorICAgICAgICBzZWxmLl9jYWxscy5h
cHBlbmQoY3MpCisKKworaWYgX1BZMzoKKyAgICBpbXBvcnQgY29kZWNzCisKKyAgICBkZWYgX2Vz
Y2FwZV9ieXRlcyh2YWwpOgorICAgICAgICAiIiIKKyAgICAgICAgSWYgdmFsIGlzIHB1cmUgYXNj
aWksIHJldHVybnMgaXQgYXMgYSBzdHIoKSwgb3RoZXJ3aXNlIGVzY2FwZXMKKyAgICAgICAgaW50
byBhIHNlcXVlbmNlIG9mIGVzY2FwZWQgYnl0ZXM6CisgICAgICAgIGInXHhjM1x4YjRceGM1XHhk
NicgLT4gdSdcXHhjM1xceGI0XFx4YzVcXHhkNicKKworICAgICAgICBub3RlOgorICAgICAgICAg
ICB0aGUgb2J2aW91cyAidi5kZWNvZGUoJ3VuaWNvZGUtZXNjYXBlJykiIHdpbGwgcmV0dXJuCisg
ICAgICAgICAgIHZhbGlkIHV0Zi04IHVuaWNvZGUgaWYgaXQgZmluZHMgdGhlbSBpbiB0aGUgc3Ry
aW5nLCBidXQgd2UKKyAgICAgICAgICAgd2FudCB0byByZXR1cm4gZXNjYXBlZCBieXRlcyBmb3Ig
YW55IGJ5dGUsIGV2ZW4gaWYgdGhleSBtYXRjaAorICAgICAgICAgICBhIHV0Zi04IHN0cmluZy4K
KyAgICAgICAgIiIiCisgICAgICAgIGlmIHZhbDoKKyAgICAgICAgICAgICMgc291cmNlOiBodHRw
Oi8vZ29vLmdsL2JHc253QworICAgICAgICAgICAgZW5jb2RlZF9ieXRlcywgXyA9IGNvZGVjcy5l
c2NhcGVfZW5jb2RlKHZhbCkKKyAgICAgICAgICAgIHJldHVybiBlbmNvZGVkX2J5dGVzLmRlY29k
ZSgnYXNjaWknKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBlbXB0eSBieXRlcyBjcmFz
aGVzIGNvZGVjcy5lc2NhcGVfZW5jb2RlICgjMTA4NykKKyAgICAgICAgICAgIHJldHVybiAnJwor
ZWxzZToKKyAgICBkZWYgX2VzY2FwZV9ieXRlcyh2YWwpOgorICAgICAgICAiIiIKKyAgICAgICAg
SW4gcHkyIGJ5dGVzIGFuZCBzdHIgYXJlIHRoZSBzYW1lIHR5cGUsIHNvIHJldHVybiBpdCB1bmNo
YW5nZWQgaWYgaXQKKyAgICAgICAgaXMgYSBmdWxsIGFzY2lpIHN0cmluZywgb3RoZXJ3aXNlIGVz
Y2FwZSBpdCBpbnRvIGl0cyBiaW5hcnkgZm9ybS4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToK
KyAgICAgICAgICAgIHJldHVybiB2YWwuZGVjb2RlKCdhc2NpaScpCisgICAgICAgIGV4Y2VwdCBV
bmljb2RlRGVjb2RlRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gdmFsLmVuY29kZSgnc3RyaW5n
LWVzY2FwZScpCisKKworZGVmIF9pZHZhbCh2YWwsIGFyZ25hbWUsIGlkeCwgaWRmbik6CisgICAg
aWYgaWRmbjoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcyA9IGlkZm4odmFsKQorICAgICAg
ICAgICAgaWYgczoKKyAgICAgICAgICAgICAgICByZXR1cm4gcworICAgICAgICBleGNlcHQgRXhj
ZXB0aW9uOgorICAgICAgICAgICAgcGFzcworCisgICAgaWYgaXNpbnN0YW5jZSh2YWwsIGJ5dGVz
KToKKyAgICAgICAgcmV0dXJuIF9lc2NhcGVfYnl0ZXModmFsKQorICAgIGVsaWYgaXNpbnN0YW5j
ZSh2YWwsIChmbG9hdCwgaW50LCBzdHIsIGJvb2wsIE5vbmVUeXBlKSk6CisgICAgICAgIHJldHVy
biBzdHIodmFsKQorICAgIGVsaWYgaXNpbnN0YW5jZSh2YWwsIFJFR0VYX1RZUEUpOgorICAgICAg
ICByZXR1cm4gX2VzY2FwZV9ieXRlcyh2YWwucGF0dGVybikgaWYgaXNpbnN0YW5jZSh2YWwucGF0
dGVybiwgYnl0ZXMpIGVsc2UgdmFsLnBhdHRlcm4KKyAgICBlbGlmIGVudW0gaXMgbm90IE5vbmUg
YW5kIGlzaW5zdGFuY2UodmFsLCBlbnVtLkVudW0pOgorICAgICAgICByZXR1cm4gc3RyKHZhbCkK
KyAgICBlbGlmIGlzY2xhc3ModmFsKSBhbmQgaGFzYXR0cih2YWwsICdfX25hbWVfXycpOgorICAg
ICAgICByZXR1cm4gdmFsLl9fbmFtZV9fCisgICAgZWxpZiBfUFkyIGFuZCBpc2luc3RhbmNlKHZh
bCwgdW5pY29kZSk6CisgICAgICAgICMgc3BlY2lhbCBjYXNlIGZvciBweXRob24gMjogaWYgYSB1
bmljb2RlIHN0cmluZyBpcworICAgICAgICAjIGNvbnZlcnRpYmxlIHRvIGFzY2lpLCByZXR1cm4g
aXQgYXMgYW4gc3RyKCkgb2JqZWN0IGluc3RlYWQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAg
cmV0dXJuIHN0cih2YWwpCisgICAgICAgIGV4Y2VwdCBVbmljb2RlRXJyb3I6CisgICAgICAgICAg
ICAjIGZhbGx0aHJvdWdoCisgICAgICAgICAgICBwYXNzCisgICAgcmV0dXJuIHN0cihhcmduYW1l
KStzdHIoaWR4KQorCitkZWYgX2lkdmFsc2V0KGlkeCwgdmFsc2V0LCBhcmduYW1lcywgaWRmbik6
CisgICAgdGhpc19pZCA9IFtfaWR2YWwodmFsLCBhcmduYW1lLCBpZHgsIGlkZm4pCisgICAgICAg
ICAgICAgICBmb3IgdmFsLCBhcmduYW1lIGluIHppcCh2YWxzZXQsIGFyZ25hbWVzKV0KKyAgICBy
ZXR1cm4gIi0iLmpvaW4odGhpc19pZCkKKworZGVmIGlkbWFrZXIoYXJnbmFtZXMsIGFyZ3ZhbHVl
cywgaWRmbj1Ob25lKToKKyAgICBpZHMgPSBbX2lkdmFsc2V0KHZhbGluZGV4LCB2YWxzZXQsIGFy
Z25hbWVzLCBpZGZuKQorICAgICAgICAgICBmb3IgdmFsaW5kZXgsIHZhbHNldCBpbiBlbnVtZXJh
dGUoYXJndmFsdWVzKV0KKyAgICBpZiBsZW4oc2V0KGlkcykpIDwgbGVuKGlkcyk6CisgICAgICAg
ICMgdXNlciBtYXkgaGF2ZSBwcm92aWRlZCBhIGJhZCBpZGZuIHdoaWNoIG1lYW5zIHRoZSBpZHMg
YXJlIG5vdCB1bmlxdWUKKyAgICAgICAgaWRzID0gW3N0cihpKSArIHRlc3RpZCBmb3IgaSwgdGVz
dGlkIGluIGVudW1lcmF0ZShpZHMpXQorICAgIHJldHVybiBpZHMKKworZGVmIHNob3dmaXh0dXJl
cyhjb25maWcpOgorICAgIGZyb20gX3B5dGVzdC5tYWluIGltcG9ydCB3cmFwX3Nlc3Npb24KKyAg
ICByZXR1cm4gd3JhcF9zZXNzaW9uKGNvbmZpZywgX3Nob3dmaXh0dXJlc19tYWluKQorCitkZWYg
X3Nob3dmaXh0dXJlc19tYWluKGNvbmZpZywgc2Vzc2lvbik6CisgICAgaW1wb3J0IF9weXRlc3Qu
Y29uZmlnCisgICAgc2Vzc2lvbi5wZXJmb3JtX2NvbGxlY3QoKQorICAgIGN1cmRpciA9IHB5LnBh
dGgubG9jYWwoKQorICAgIHR3ID0gX3B5dGVzdC5jb25maWcuY3JlYXRlX3Rlcm1pbmFsX3dyaXRl
cihjb25maWcpCisgICAgdmVyYm9zZSA9IGNvbmZpZy5nZXR2YWx1ZSgidmVyYm9zZSIpCisKKyAg
ICBmbSA9IHNlc3Npb24uX2ZpeHR1cmVtYW5hZ2VyCisKKyAgICBhdmFpbGFibGUgPSBbXQorICAg
IGZvciBhcmduYW1lLCBmaXh0dXJlZGVmcyBpbiBmbS5fYXJnMmZpeHR1cmVkZWZzLml0ZW1zKCk6
CisgICAgICAgIGFzc2VydCBmaXh0dXJlZGVmcyBpcyBub3QgTm9uZQorICAgICAgICBpZiBub3Qg
Zml4dHVyZWRlZnM6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBmaXh0dXJlZGVmID0g
Zml4dHVyZWRlZnNbLTFdCisgICAgICAgIGxvYyA9IGdldGxvY2F0aW9uKGZpeHR1cmVkZWYuZnVu
YywgY3VyZGlyKQorICAgICAgICBhdmFpbGFibGUuYXBwZW5kKChsZW4oZml4dHVyZWRlZi5iYXNl
aWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBmaXh0dXJlZGVmLmZ1bmMuX19tb2R1bGVf
XywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyZGlyLmJlc3RyZWxwYXRoKGxvYyksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZpeHR1cmVkZWYuYXJnbmFtZSwgZml4dHVyZWRlZikp
CisKKyAgICBhdmFpbGFibGUuc29ydCgpCisgICAgY3VycmVudG1vZHVsZSA9IE5vbmUKKyAgICBm
b3IgYmFzZWlkLCBtb2R1bGUsIGJlc3RyZWwsIGFyZ25hbWUsIGZpeHR1cmVkZWYgaW4gYXZhaWxh
YmxlOgorICAgICAgICBpZiBjdXJyZW50bW9kdWxlICE9IG1vZHVsZToKKyAgICAgICAgICAgIGlm
IG5vdCBtb2R1bGUuc3RhcnRzd2l0aCgiX3B5dGVzdC4iKToKKyAgICAgICAgICAgICAgICB0dy5s
aW5lKCkKKyAgICAgICAgICAgICAgICB0dy5zZXAoIi0iLCAiZml4dHVyZXMgZGVmaW5lZCBmcm9t
ICVzIiAlKG1vZHVsZSwpKQorICAgICAgICAgICAgICAgIGN1cnJlbnRtb2R1bGUgPSBtb2R1bGUK
KyAgICAgICAgaWYgdmVyYm9zZSA8PSAwIGFuZCBhcmduYW1lWzBdID09ICJfIjoKKyAgICAgICAg
ICAgIGNvbnRpbnVlCisgICAgICAgIGlmIHZlcmJvc2UgPiAwOgorICAgICAgICAgICAgZnVuY2Fy
Z3NwZWMgPSAiJXMgLS0gJXMiICUoYXJnbmFtZSwgYmVzdHJlbCwpCisgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICBmdW5jYXJnc3BlYyA9IGFyZ25hbWUKKyAgICAgICAgdHcubGluZShmdW5jYXJn
c3BlYywgZ3JlZW49VHJ1ZSkKKyAgICAgICAgbG9jID0gZ2V0bG9jYXRpb24oZml4dHVyZWRlZi5m
dW5jLCBjdXJkaXIpCisgICAgICAgIGRvYyA9IGZpeHR1cmVkZWYuZnVuYy5fX2RvY19fIG9yICIi
CisgICAgICAgIGlmIGRvYzoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGRvYy5zdHJpcCgpLnNw
bGl0KCJcbiIpOgorICAgICAgICAgICAgICAgIHR3LmxpbmUoIiAgICAiICsgbGluZS5zdHJpcCgp
KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdHcubGluZSgiICAgICVzOiBubyBkb2NzdHJp
bmcgYXZhaWxhYmxlIiAlKGxvYywpLAorICAgICAgICAgICAgICAgIHJlZD1UcnVlKQorCitkZWYg
Z2V0bG9jYXRpb24oZnVuY3Rpb24sIGN1cmRpcik6CisgICAgaW1wb3J0IGluc3BlY3QKKyAgICBm
biA9IHB5LnBhdGgubG9jYWwoaW5zcGVjdC5nZXRmaWxlKGZ1bmN0aW9uKSkKKyAgICBsaW5lbm8g
PSBweS5idWlsdGluLl9nZXRjb2RlKGZ1bmN0aW9uKS5jb19maXJzdGxpbmVubworICAgIGlmIGZu
LnJlbHRvKGN1cmRpcik6CisgICAgICAgIGZuID0gZm4ucmVsdG8oY3VyZGlyKQorICAgIHJldHVy
biAiJXM6JWQiICUoZm4sIGxpbmVubysxKQorCisjIGJ1aWx0aW4gcHl0ZXN0LnJhaXNlcyBoZWxw
ZXIKKworZGVmIHJhaXNlcyhleHBlY3RlZF9leGNlcHRpb24sICphcmdzLCAqKmt3YXJncyk6Cisg
ICAgIiIiIGFzc2VydCB0aGF0IGEgY29kZSBibG9jay9mdW5jdGlvbiBjYWxsIHJhaXNlcyBgYGV4
cGVjdGVkX2V4Y2VwdGlvbmBgCisgICAgYW5kIHJhaXNlIGEgZmFpbHVyZSBleGNlcHRpb24gb3Ro
ZXJ3aXNlLgorCisgICAgVGhpcyBoZWxwZXIgcHJvZHVjZXMgYSBgYEV4Y2VwdGlvbkluZm8oKWBg
IG9iamVjdCAoc2VlIGJlbG93KS4KKworICAgIElmIHVzaW5nIFB5dGhvbiAyLjUgb3IgYWJvdmUs
IHlvdSBtYXkgdXNlIHRoaXMgZnVuY3Rpb24gYXMgYQorICAgIGNvbnRleHQgbWFuYWdlcjo6CisK
KyAgICAgICAgPj4+IHdpdGggcmFpc2VzKFplcm9EaXZpc2lvbkVycm9yKToKKyAgICAgICAgLi4u
ICAgIDEvMAorCisgICAgLi4gbm90ZTo6CisKKyAgICAgICBXaGVuIHVzaW5nIGBgcHl0ZXN0LnJh
aXNlc2BgIGFzIGEgY29udGV4dCBtYW5hZ2VyLCBpdCdzIHdvcnRod2hpbGUgdG8KKyAgICAgICBu
b3RlIHRoYXQgbm9ybWFsIGNvbnRleHQgbWFuYWdlciBydWxlcyBhcHBseSBhbmQgdGhhdCB0aGUg
ZXhjZXB0aW9uCisgICAgICAgcmFpc2VkICptdXN0KiBiZSB0aGUgZmluYWwgbGluZSBpbiB0aGUg
c2NvcGUgb2YgdGhlIGNvbnRleHQgbWFuYWdlci4KKyAgICAgICBMaW5lcyBvZiBjb2RlIGFmdGVy
IHRoYXQsIHdpdGhpbiB0aGUgc2NvcGUgb2YgdGhlIGNvbnRleHQgbWFuYWdlciB3aWxsCisgICAg
ICAgbm90IGJlIGV4ZWN1dGVkLiBGb3IgZXhhbXBsZTo6CisKKyAgICAgICAgICAgPj4+IHdpdGgg
cmFpc2VzKE9TRXJyb3IpIGFzIGV4Y19pbmZvOgorICAgICAgICAgICAgICAgICAgIGFzc2VydCAx
ID09IDEgICMgdGhpcyB3aWxsIGV4ZWN1dGUgYXMgZXhwZWN0ZWQKKyAgICAgICAgICAgICAgICAg
ICByYWlzZSBPU0Vycm9yKGVycm5vLkVFWElTVFMsICdkaXJlY3RvcnkgZXhpc3RzJykKKyAgICAg
ICAgICAgICAgICAgICBhc3NlcnQgZXhjX2luZm8udmFsdWUuZXJybm8gPT0gZXJybm8uRUVYSVNU
UyAgIyB0aGlzIHdpbGwgbm90IGV4ZWN1dGUKKworICAgICAgIEluc3RlYWQsIHRoZSBmb2xsb3dp
bmcgYXBwcm9hY2ggbXVzdCBiZSB0YWtlbiAobm90ZSB0aGUgZGlmZmVyZW5jZSBpbgorICAgICAg
IHNjb3BlKTo6CisKKyAgICAgICAgICAgPj4+IHdpdGggcmFpc2VzKE9TRXJyb3IpIGFzIGV4Y19p
bmZvOgorICAgICAgICAgICAgICAgICAgIGFzc2VydCAxID09IDEgICMgdGhpcyB3aWxsIGV4ZWN1
dGUgYXMgZXhwZWN0ZWQKKyAgICAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKGVycm5vLkVF
WElTVFMsICdkaXJlY3RvcnkgZXhpc3RzJykKKworICAgICAgICAgICAgICAgYXNzZXJ0IGV4Y19p
bmZvLnZhbHVlLmVycm5vID09IGVycm5vLkVFWElTVFMgICMgdGhpcyB3aWxsIG5vdyBleGVjdXRl
CisKKyAgICBPciB5b3UgY2FuIHNwZWNpZnkgYSBjYWxsYWJsZSBieSBwYXNzaW5nIGEgdG8tYmUt
Y2FsbGVkIGxhbWJkYTo6CisKKyAgICAgICAgPj4+IHJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwg
bGFtYmRhOiAxLzApCisgICAgICAgIDxFeGNlcHRpb25JbmZvIC4uLj4KKworICAgIG9yIHlvdSBj
YW4gc3BlY2lmeSBhbiBhcmJpdHJhcnkgY2FsbGFibGUgd2l0aCBhcmd1bWVudHM6OgorCisgICAg
ICAgID4+PiBkZWYgZih4KTogcmV0dXJuIDEveAorICAgICAgICAuLi4KKyAgICAgICAgPj4+IHJh
aXNlcyhaZXJvRGl2aXNpb25FcnJvciwgZiwgMCkKKyAgICAgICAgPEV4Y2VwdGlvbkluZm8gLi4u
PgorICAgICAgICA+Pj4gcmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBmLCB4PTApCisgICAgICAg
IDxFeGNlcHRpb25JbmZvIC4uLj4KKworICAgIEEgdGhpcmQgcG9zc2liaWxpdHkgaXMgdG8gdXNl
IGEgc3RyaW5nIHRvIGJlIGV4ZWN1dGVkOjoKKworICAgICAgICA+Pj4gcmFpc2VzKFplcm9EaXZp
c2lvbkVycm9yLCAiZigwKSIpCisgICAgICAgIDxFeGNlcHRpb25JbmZvIC4uLj4KKworICAgIC4u
IGF1dG9jbGFzczo6IF9weXRlc3QuX2NvZGUuRXhjZXB0aW9uSW5mbworICAgICAgICA6bWVtYmVy
czoKKworICAgIC4uIG5vdGU6OgorICAgICAgICBTaW1pbGFyIHRvIGNhdWdodCBleGNlcHRpb24g
b2JqZWN0cyBpbiBQeXRob24sIGV4cGxpY2l0bHkgY2xlYXJpbmcKKyAgICAgICAgbG9jYWwgcmVm
ZXJlbmNlcyB0byByZXR1cm5lZCBgYEV4Y2VwdGlvbkluZm9gYCBvYmplY3RzIGNhbgorICAgICAg
ICBoZWxwIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgc3BlZWQgdXAgaXRzIGdhcmJhZ2UgY29sbGVj
dGlvbi4KKworICAgICAgICBDbGVhcmluZyB0aG9zZSByZWZlcmVuY2VzIGJyZWFrcyBhIHJlZmVy
ZW5jZSBjeWNsZQorICAgICAgICAoYGBFeGNlcHRpb25JbmZvYGAgLS0+IGNhdWdodCBleGNlcHRp
b24gLS0+IGZyYW1lIHN0YWNrIHJhaXNpbmcKKyAgICAgICAgdGhlIGV4Y2VwdGlvbiAtLT4gY3Vy
cmVudCBmcmFtZSBzdGFjayAtLT4gbG9jYWwgdmFyaWFibGVzIC0tPgorICAgICAgICBgYEV4Y2Vw
dGlvbkluZm9gYCkgd2hpY2ggbWFrZXMgUHl0aG9uIGtlZXAgYWxsIG9iamVjdHMgcmVmZXJlbmNl
ZAorICAgICAgICBmcm9tIHRoYXQgY3ljbGUgKGluY2x1ZGluZyBhbGwgbG9jYWwgdmFyaWFibGVz
IGluIHRoZSBjdXJyZW50CisgICAgICAgIGZyYW1lKSBhbGl2ZSB1bnRpbCB0aGUgbmV4dCBjeWNs
aWMgZ2FyYmFnZSBjb2xsZWN0aW9uIHJ1bi4gU2VlIHRoZQorICAgICAgICBvZmZpY2lhbCBQeXRo
b24gYGB0cnlgYCBzdGF0ZW1lbnQgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBkZXRhaWxlZAorICAg
ICAgICBpbmZvcm1hdGlvbi4KKworICAgICIiIgorICAgIF9fdHJhY2ViYWNraGlkZV9fID0gVHJ1
ZQorICAgIGlmIGV4cGVjdGVkX2V4Y2VwdGlvbiBpcyBBc3NlcnRpb25FcnJvcjoKKyAgICAgICAg
IyB3ZSB3YW50IHRvIGNhdGNoIGEgQXNzZXJ0aW9uRXJyb3IKKyAgICAgICAgIyByZXBsYWNlIG91
ciBzdWJjbGFzcyB3aXRoIHRoZSBidWlsdGluIG9uZQorICAgICAgICAjIHNlZSBodHRwczovL2dp
dGh1Yi5jb20vcHl0ZXN0LWRldi9weXRlc3QvaXNzdWVzLzE3NgorICAgICAgICBmcm9tIF9weXRl
c3QuYXNzZXJ0aW9uLnV0aWwgaW1wb3J0IEJ1aWx0aW5Bc3NlcnRpb25FcnJvciBcCisgICAgICAg
ICAgICBhcyBleHBlY3RlZF9leGNlcHRpb24KKyAgICBtc2cgPSAoImV4Y2VwdGlvbnMgbXVzdCBi
ZSBvbGQtc3R5bGUgY2xhc3NlcyBvciIKKyAgICAgICAgICAgIiBkZXJpdmVkIGZyb20gQmFzZUV4
Y2VwdGlvbiwgbm90ICVzIikKKyAgICBpZiBpc2luc3RhbmNlKGV4cGVjdGVkX2V4Y2VwdGlvbiwg
dHVwbGUpOgorICAgICAgICBmb3IgZXhjIGluIGV4cGVjdGVkX2V4Y2VwdGlvbjoKKyAgICAgICAg
ICAgIGlmIG5vdCBpc2NsYXNzKGV4Yyk6CisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9y
KG1zZyAlIHR5cGUoZXhjKSkKKyAgICBlbGlmIG5vdCBpc2NsYXNzKGV4cGVjdGVkX2V4Y2VwdGlv
bik6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcihtc2cgJSB0eXBlKGV4cGVjdGVkX2V4Y2VwdGlv
bikpCisKKyAgICBpZiBub3QgYXJnczoKKyAgICAgICAgcmV0dXJuIFJhaXNlc0NvbnRleHQoZXhw
ZWN0ZWRfZXhjZXB0aW9uKQorICAgIGVsaWYgaXNpbnN0YW5jZShhcmdzWzBdLCBzdHIpOgorICAg
ICAgICBjb2RlLCA9IGFyZ3MKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoY29kZSwgc3RyKQor
ICAgICAgICBmcmFtZSA9IHN5cy5fZ2V0ZnJhbWUoMSkKKyAgICAgICAgbG9jID0gZnJhbWUuZl9s
b2NhbHMuY29weSgpCisgICAgICAgIGxvYy51cGRhdGUoa3dhcmdzKQorICAgICAgICAjcHJpbnQg
InJhaXNlcyBmcmFtZSBzY29wZTogJXIiICUgZnJhbWUuZl9sb2NhbHMKKyAgICAgICAgdHJ5Ogor
ICAgICAgICAgICAgY29kZSA9IF9weXRlc3QuX2NvZGUuU291cmNlKGNvZGUpLmNvbXBpbGUoKQor
ICAgICAgICAgICAgcHkuYnVpbHRpbi5leGVjXyhjb2RlLCBmcmFtZS5mX2dsb2JhbHMsIGxvYykK
KyAgICAgICAgICAgICMgWFhYIGRpZG4nVCBtZWFuIGZfZ2xvYmFscyA9PSBmX2xvY2FscyBzb21l
dGhpbmcgc3BlY2lhbD8KKyAgICAgICAgICAgICMgICAgIHRoaXMgaXMgZGVzdHJveWVkIGhlcmUg
Li4uCisgICAgICAgIGV4Y2VwdCBleHBlY3RlZF9leGNlcHRpb246CisgICAgICAgICAgICByZXR1
cm4gX3B5dGVzdC5fY29kZS5FeGNlcHRpb25JbmZvKCkKKyAgICBlbHNlOgorICAgICAgICBmdW5j
ID0gYXJnc1swXQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmdW5jKCphcmdzWzE6XSwgKipr
d2FyZ3MpCisgICAgICAgIGV4Y2VwdCBleHBlY3RlZF9leGNlcHRpb246CisgICAgICAgICAgICBy
ZXR1cm4gX3B5dGVzdC5fY29kZS5FeGNlcHRpb25JbmZvKCkKKyAgICBweXRlc3QuZmFpbCgiRElE
IE5PVCBSQUlTRSB7MH0iLmZvcm1hdChleHBlY3RlZF9leGNlcHRpb24pKQorCitjbGFzcyBSYWlz
ZXNDb250ZXh0KG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4cGVjdGVkX2V4Y2Vw
dGlvbik6CisgICAgICAgIHNlbGYuZXhwZWN0ZWRfZXhjZXB0aW9uID0gZXhwZWN0ZWRfZXhjZXB0
aW9uCisgICAgICAgIHNlbGYuZXhjaW5mbyA9IE5vbmUKKworICAgIGRlZiBfX2VudGVyX18oc2Vs
Zik6CisgICAgICAgIHNlbGYuZXhjaW5mbyA9IG9iamVjdC5fX25ld19fKF9weXRlc3QuX2NvZGUu
RXhjZXB0aW9uSW5mbykKKyAgICAgICAgcmV0dXJuIHNlbGYuZXhjaW5mbworCisgICAgZGVmIF9f
ZXhpdF9fKHNlbGYsICp0cCk6CisgICAgICAgIF9fdHJhY2ViYWNraGlkZV9fID0gVHJ1ZQorICAg
ICAgICBpZiB0cFswXSBpcyBOb25lOgorICAgICAgICAgICAgcHl0ZXN0LmZhaWwoIkRJRCBOT1Qg
UkFJU0UiKQorICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvIDwgKDIsIDcpOgorICAgICAgICAg
ICAgIyBweTI2OiBvbiBfX2V4aXRfXygpIGV4Y192YWx1ZSBvZnRlbiBkb2VzIG5vdCBjb250YWlu
IHRoZQorICAgICAgICAgICAgIyBleGNlcHRpb24gdmFsdWUuCisgICAgICAgICAgICAjIGh0dHA6
Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU3ODUzCisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5j
ZSh0cFsxXSwgQmFzZUV4Y2VwdGlvbik6CisgICAgICAgICAgICAgICAgZXhjX3R5cGUsIHZhbHVl
LCB0cmFjZWJhY2sgPSB0cAorICAgICAgICAgICAgICAgIHRwID0gZXhjX3R5cGUsIGV4Y190eXBl
KHZhbHVlKSwgdHJhY2ViYWNrCisgICAgICAgIHNlbGYuZXhjaW5mby5fX2luaXRfXyh0cCkKKyAg
ICAgICAgcmV0dXJuIGlzc3ViY2xhc3Moc2VsZi5leGNpbmZvLnR5cGUsIHNlbGYuZXhwZWN0ZWRf
ZXhjZXB0aW9uKQorCisjCisjICB0aGUgYmFzaWMgcHl0ZXN0IEZ1bmN0aW9uIGl0ZW0KKyMKKwor
Y2xhc3MgRnVuY3Rpb24oRnVuY3Rpb25NaXhpbiwgcHl0ZXN0Lkl0ZW0sIEZ1bmNhcmduYW1lc0Nv
bXBhdEF0dHIpOgorICAgICIiIiBhIEZ1bmN0aW9uIEl0ZW0gaXMgcmVzcG9uc2libGUgZm9yIHNl
dHRpbmcgdXAgYW5kIGV4ZWN1dGluZyBhCisgICAgUHl0aG9uIHRlc3QgZnVuY3Rpb24uCisgICAg
IiIiCisgICAgX2dlbmlkID0gTm9uZQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBwYXJl
bnQsIGFyZ3M9Tm9uZSwgY29uZmlnPU5vbmUsCisgICAgICAgICAgICAgICAgIGNhbGxzcGVjPU5v
bmUsIGNhbGxvYmo9Tk9UU0VULCBrZXl3b3Jkcz1Ob25lLCBzZXNzaW9uPU5vbmUsCisgICAgICAg
ICAgICAgICAgIGZpeHR1cmVpbmZvPU5vbmUpOgorICAgICAgICBzdXBlcihGdW5jdGlvbiwgc2Vs
ZikuX19pbml0X18obmFtZSwgcGFyZW50LCBjb25maWc9Y29uZmlnLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbj1zZXNzaW9uKQorICAgICAgICBzZWxmLl9h
cmdzID0gYXJncworICAgICAgICBpZiBjYWxsb2JqIGlzIG5vdCBOT1RTRVQ6CisgICAgICAgICAg
ICBzZWxmLm9iaiA9IGNhbGxvYmoKKworICAgICAgICBzZWxmLmtleXdvcmRzLnVwZGF0ZShzZWxm
Lm9iai5fX2RpY3RfXykKKyAgICAgICAgaWYgY2FsbHNwZWM6CisgICAgICAgICAgICBzZWxmLmNh
bGxzcGVjID0gY2FsbHNwZWMKKyAgICAgICAgICAgIHNlbGYua2V5d29yZHMudXBkYXRlKGNhbGxz
cGVjLmtleXdvcmRzKQorICAgICAgICBpZiBrZXl3b3JkczoKKyAgICAgICAgICAgIHNlbGYua2V5
d29yZHMudXBkYXRlKGtleXdvcmRzKQorCisgICAgICAgIGlmIGZpeHR1cmVpbmZvIGlzIE5vbmU6
CisgICAgICAgICAgICBmaXh0dXJlaW5mbyA9IHNlbGYuc2Vzc2lvbi5fZml4dHVyZW1hbmFnZXIu
Z2V0Zml4dHVyZWluZm8oCisgICAgICAgICAgICAgICAgc2VsZi5wYXJlbnQsIHNlbGYub2JqLCBz
ZWxmLmNscywKKyAgICAgICAgICAgICAgICBmdW5jYXJncz1ub3Qgc2VsZi5faXN5aWVsZGVkZnVu
Y3Rpb24oKSkKKyAgICAgICAgc2VsZi5fZml4dHVyZWluZm8gPSBmaXh0dXJlaW5mbworICAgICAg
ICBzZWxmLmZpeHR1cmVuYW1lcyA9IGZpeHR1cmVpbmZvLm5hbWVzX2Nsb3N1cmUKKyAgICAgICAg
c2VsZi5faW5pdHJlcXVlc3QoKQorCisgICAgZGVmIF9pbml0cmVxdWVzdChzZWxmKToKKyAgICAg
ICAgc2VsZi5mdW5jYXJncyA9IHt9CisgICAgICAgIGlmIHNlbGYuX2lzeWllbGRlZGZ1bmN0aW9u
KCk6CisgICAgICAgICAgICBhc3NlcnQgbm90IGhhc2F0dHIoc2VsZiwgImNhbGxzcGVjIiksICgK
KyAgICAgICAgICAgICAgICAieWllbGRlZCBmdW5jdGlvbnMgKGRlcHJlY2F0ZWQpIGNhbm5vdCBo
YXZlIGZ1bmNhcmdzIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGhhc2F0dHIoc2Vs
ZiwgImNhbGxzcGVjIik6CisgICAgICAgICAgICAgICAgY2FsbHNwZWMgPSBzZWxmLmNhbGxzcGVj
CisgICAgICAgICAgICAgICAgYXNzZXJ0IG5vdCBjYWxsc3BlYy5mdW5jYXJncworICAgICAgICAg
ICAgICAgIHNlbGYuX2dlbmlkID0gY2FsbHNwZWMuaWQKKyAgICAgICAgICAgICAgICBpZiBoYXNh
dHRyKGNhbGxzcGVjLCAicGFyYW0iKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXJhbSA9
IGNhbGxzcGVjLnBhcmFtCisgICAgICAgIHNlbGYuX3JlcXVlc3QgPSBGaXh0dXJlUmVxdWVzdChz
ZWxmKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGZ1bmN0aW9uKHNlbGYpOgorICAgICAgICAi
dW5kZXJseWluZyBweXRob24gJ2Z1bmN0aW9uJyBvYmplY3QiCisgICAgICAgIHJldHVybiBnZXRh
dHRyKHNlbGYub2JqLCAnaW1fZnVuYycsIHNlbGYub2JqKQorCisgICAgZGVmIF9nZXRvYmooc2Vs
Zik6CisgICAgICAgIG5hbWUgPSBzZWxmLm5hbWUKKyAgICAgICAgaSA9IG5hbWUuZmluZCgiWyIp
ICMgcGFyYW1ldHJpemF0aW9uCisgICAgICAgIGlmIGkgIT0gLTE6CisgICAgICAgICAgICBuYW1l
ID0gbmFtZVs6aV0KKyAgICAgICAgcmV0dXJuIGdldGF0dHIoc2VsZi5wYXJlbnQub2JqLCBuYW1l
KQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIF9weWZ1bmNpdGVtKHNlbGYpOgorICAgICAgICAi
KGNvbXBhdG9ubHkpIGZvciBjb2RlIGV4cGVjdGluZyBweXRlc3QtMi4yIHN0eWxlIHJlcXVlc3Qg
b2JqZWN0cyIKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfaXN5aWVsZGVkZnVuY3Rp
b24oc2VsZik6CisgICAgICAgIHJldHVybiBnZXRhdHRyKHNlbGYsICJfYXJncyIsIE5vbmUpIGlz
IG5vdCBOb25lCisKKyAgICBkZWYgcnVudGVzdChzZWxmKToKKyAgICAgICAgIiIiIGV4ZWN1dGUg
dGhlIHVuZGVybHlpbmcgdGVzdCBmdW5jdGlvbi4gIiIiCisgICAgICAgIHNlbGYuaWhvb2sucHl0
ZXN0X3B5ZnVuY19jYWxsKHB5ZnVuY2l0ZW09c2VsZikKKworICAgIGRlZiBzZXR1cChzZWxmKToK
KyAgICAgICAgIyBjaGVjayBpZiBwYXJhbWV0cml6YXRpb24gaGFwcGVuZCB3aXRoIGFuIGVtcHR5
IGxpc3QKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5jYWxsc3BlYy5fZW1wdHlwYXJh
bXNwZWNpZmllZAorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBw
YXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmcywgbGluZW5vID0gc2VsZi5fZ2V0ZnNs
aW5lbm8oKQorICAgICAgICAgICAgcHl0ZXN0LnNraXAoImdvdCBlbXB0eSBwYXJhbWV0ZXIgc2V0
LCBmdW5jdGlvbiAlcyBhdCAlczolZCIgJSgKKyAgICAgICAgICAgICAgICBzZWxmLmZ1bmN0aW9u
Ll9fbmFtZV9fLCBmcywgbGluZW5vKSkKKyAgICAgICAgc3VwZXIoRnVuY3Rpb24sIHNlbGYpLnNl
dHVwKCkKKyAgICAgICAgZmlsbGZpeHR1cmVzKHNlbGYpCisKKworc2NvcGUycHJvcHMgPSBkaWN0
KHNlc3Npb249KCkpCitzY29wZTJwcm9wc1sibW9kdWxlIl0gPSAoImZzcGF0aCIsICJtb2R1bGUi
KQorc2NvcGUycHJvcHNbImNsYXNzIl0gPSBzY29wZTJwcm9wc1sibW9kdWxlIl0gKyAoImNscyIs
KQorc2NvcGUycHJvcHNbImluc3RhbmNlIl0gPSBzY29wZTJwcm9wc1siY2xhc3MiXSArICgiaW5z
dGFuY2UiLCApCitzY29wZTJwcm9wc1siZnVuY3Rpb24iXSA9IHNjb3BlMnByb3BzWyJpbnN0YW5j
ZSJdICsgKCJmdW5jdGlvbiIsICJrZXl3b3JkcyIpCisKK2RlZiBzY29wZXByb3BlcnR5KG5hbWU9
Tm9uZSwgZG9jPU5vbmUpOgorICAgIGRlZiBkZWNvcmF0ZXNjb3BlKGZ1bmMpOgorICAgICAgICBz
Y29wZW5hbWUgPSBuYW1lIG9yIGZ1bmMuX19uYW1lX18KKyAgICAgICAgZGVmIHByb3ZpZGUoc2Vs
Zik6CisgICAgICAgICAgICBpZiBmdW5jLl9fbmFtZV9fIGluIHNjb3BlMnByb3BzW3NlbGYuc2Nv
cGVdOgorICAgICAgICAgICAgICAgIHJldHVybiBmdW5jKHNlbGYpCisgICAgICAgICAgICByYWlz
ZSBBdHRyaWJ1dGVFcnJvcigiJXMgbm90IGF2YWlsYWJsZSBpbiAlcy1zY29wZWQgY29udGV4dCIg
JSAoCisgICAgICAgICAgICAgICAgc2NvcGVuYW1lLCBzZWxmLnNjb3BlKSkKKyAgICAgICAgcmV0
dXJuIHByb3BlcnR5KHByb3ZpZGUsIE5vbmUsIE5vbmUsIGZ1bmMuX19kb2NfXykKKyAgICByZXR1
cm4gZGVjb3JhdGVzY29wZQorCisKK2NsYXNzIEZpeHR1cmVSZXF1ZXN0KEZ1bmNhcmduYW1lc0Nv
bXBhdEF0dHIpOgorICAgICIiIiBBIHJlcXVlc3QgZm9yIGEgZml4dHVyZSBmcm9tIGEgdGVzdCBv
ciBmaXh0dXJlIGZ1bmN0aW9uLgorCisgICAgQSByZXF1ZXN0IG9iamVjdCBnaXZlcyBhY2Nlc3Mg
dG8gdGhlIHJlcXVlc3RpbmcgdGVzdCBjb250ZXh0CisgICAgYW5kIGhhcyBhbiBvcHRpb25hbCBg
YHBhcmFtYGAgYXR0cmlidXRlIGluIGNhc2UKKyAgICB0aGUgZml4dHVyZSBpcyBwYXJhbWV0cml6
ZWQgaW5kaXJlY3RseS4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBweWZ1bmNp
dGVtKToKKyAgICAgICAgc2VsZi5fcHlmdW5jaXRlbSA9IHB5ZnVuY2l0ZW0KKyAgICAgICAgIzog
Zml4dHVyZSBmb3Igd2hpY2ggdGhpcyByZXF1ZXN0IGlzIGJlaW5nIHBlcmZvcm1lZAorICAgICAg
ICBzZWxmLmZpeHR1cmVuYW1lID0gTm9uZQorICAgICAgICAjOiBTY29wZSBzdHJpbmcsIG9uZSBv
ZiAiZnVuY3Rpb24iLCAiY2xzIiwgIm1vZHVsZSIsICJzZXNzaW9uIgorICAgICAgICBzZWxmLnNj
b3BlID0gImZ1bmN0aW9uIgorICAgICAgICBzZWxmLl9mdW5jYXJncyAgPSB7fQorICAgICAgICBz
ZWxmLl9maXh0dXJlZGVmcyA9IHt9CisgICAgICAgIGZpeHR1cmVpbmZvID0gcHlmdW5jaXRlbS5f
Zml4dHVyZWluZm8KKyAgICAgICAgc2VsZi5fYXJnMmZpeHR1cmVkZWZzID0gZml4dHVyZWluZm8u
bmFtZTJmaXh0dXJlZGVmcy5jb3B5KCkKKyAgICAgICAgc2VsZi5fYXJnMmluZGV4ID0ge30KKyAg
ICAgICAgc2VsZi5maXh0dXJlbmFtZXMgPSBmaXh0dXJlaW5mby5uYW1lc19jbG9zdXJlCisgICAg
ICAgIHNlbGYuX2ZpeHR1cmVtYW5hZ2VyID0gcHlmdW5jaXRlbS5zZXNzaW9uLl9maXh0dXJlbWFu
YWdlcgorCisgICAgQHByb3BlcnR5CisgICAgZGVmIG5vZGUoc2VsZik6CisgICAgICAgICIiIiB1
bmRlcmx5aW5nIGNvbGxlY3Rpb24gbm9kZSAoZGVwZW5kcyBvbiBjdXJyZW50IHJlcXVlc3Qgc2Nv
cGUpIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9nZXRzY29wZWl0ZW0oc2VsZi5zY29wZSkKKwor
CisgICAgZGVmIF9nZXRuZXh0Zml4dHVyZWRlZihzZWxmLCBhcmduYW1lKToKKyAgICAgICAgZml4
dHVyZWRlZnMgPSBzZWxmLl9hcmcyZml4dHVyZWRlZnMuZ2V0KGFyZ25hbWUsIE5vbmUpCisgICAg
ICAgIGlmIGZpeHR1cmVkZWZzIGlzIE5vbmU6CisgICAgICAgICAgICAjIHdlIGFycml2ZSBoZXJl
IGJlY2F1c2Ugb2YgYSAgYSBkeW5hbWljIGNhbGwgdG8KKyAgICAgICAgICAgICMgZ2V0ZnVuY2Fy
Z3ZhbHVlKGFyZ25hbWUpIHVzYWdlIHdoaWNoIHdhcyBuYXR1cmFsbHkKKyAgICAgICAgICAgICMg
bm90IGtub3duIGF0IHBhcnNpbmcvY29sbGVjdGlvbiB0aW1lCisgICAgICAgICAgICBmaXh0dXJl
ZGVmcyA9IHNlbGYuX2ZpeHR1cmVtYW5hZ2VyLmdldGZpeHR1cmVkZWZzKAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFyZ25hbWUsIHNlbGYuX3B5ZnVuY2l0ZW0ucGFyZW50Lm5vZGVpZCkK
KyAgICAgICAgICAgIHNlbGYuX2FyZzJmaXh0dXJlZGVmc1thcmduYW1lXSA9IGZpeHR1cmVkZWZz
CisgICAgICAgICMgZml4dHVyZWRlZnMgbGlzdCBpcyBpbW11dGFibGUgc28gd2UgbWFpbnRhaW4g
YSBkZWNyZWFzaW5nIGluZGV4CisgICAgICAgIGluZGV4ID0gc2VsZi5fYXJnMmluZGV4LmdldChh
cmduYW1lLCAwKSAtIDEKKyAgICAgICAgaWYgZml4dHVyZWRlZnMgaXMgTm9uZSBvciAoLWluZGV4
ID4gbGVuKGZpeHR1cmVkZWZzKSk6CisgICAgICAgICAgICByYWlzZSBGaXh0dXJlTG9va3VwRXJy
b3IoYXJnbmFtZSwgc2VsZikKKyAgICAgICAgc2VsZi5fYXJnMmluZGV4W2FyZ25hbWVdID0gaW5k
ZXgKKyAgICAgICAgcmV0dXJuIGZpeHR1cmVkZWZzW2luZGV4XQorCisgICAgQHByb3BlcnR5Cisg
ICAgZGVmIGNvbmZpZyhzZWxmKToKKyAgICAgICAgIiIiIHRoZSBweXRlc3QgY29uZmlnIG9iamVj
dCBhc3NvY2lhdGVkIHdpdGggdGhpcyByZXF1ZXN0LiAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYu
X3B5ZnVuY2l0ZW0uY29uZmlnCisKKworICAgIEBzY29wZXByb3BlcnR5KCkKKyAgICBkZWYgZnVu
Y3Rpb24oc2VsZik6CisgICAgICAgICIiIiB0ZXN0IGZ1bmN0aW9uIG9iamVjdCBpZiB0aGUgcmVx
dWVzdCBoYXMgYSBwZXItZnVuY3Rpb24gc2NvcGUuICIiIgorICAgICAgICByZXR1cm4gc2VsZi5f
cHlmdW5jaXRlbS5vYmoKKworICAgIEBzY29wZXByb3BlcnR5KCJjbGFzcyIpCisgICAgZGVmIGNs
cyhzZWxmKToKKyAgICAgICAgIiIiIGNsYXNzIChjYW4gYmUgTm9uZSkgd2hlcmUgdGhlIHRlc3Qg
ZnVuY3Rpb24gd2FzIGNvbGxlY3RlZC4gIiIiCisgICAgICAgIGNsc2NvbCA9IHNlbGYuX3B5ZnVu
Y2l0ZW0uZ2V0cGFyZW50KHB5dGVzdC5DbGFzcykKKyAgICAgICAgaWYgY2xzY29sOgorICAgICAg
ICAgICAgcmV0dXJuIGNsc2NvbC5vYmoKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBpbnN0YW5j
ZShzZWxmKToKKyAgICAgICAgIiIiIGluc3RhbmNlIChjYW4gYmUgTm9uZSkgb24gd2hpY2ggdGVz
dCBmdW5jdGlvbiB3YXMgY29sbGVjdGVkLiAiIiIKKyAgICAgICAgIyB1bml0dGVzdCBzdXBwb3J0
IGhhY2ssIHNlZSBfcHl0ZXN0LnVuaXR0ZXN0LlRlc3RDYXNlRnVuY3Rpb24KKyAgICAgICAgdHJ5
OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3B5ZnVuY2l0ZW0uX3Rlc3RjYXNlCisgICAgICAg
IGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIGZ1bmN0aW9uID0gZ2V0YXR0cihz
ZWxmLCAiZnVuY3Rpb24iLCBOb25lKQorICAgICAgICAgICAgaWYgZnVuY3Rpb24gaXMgbm90IE5v
bmU6CisgICAgICAgICAgICAgICAgcmV0dXJuIHB5LmJ1aWx0aW4uX2dldGltc2VsZihmdW5jdGlv
bikKKworICAgIEBzY29wZXByb3BlcnR5KCkKKyAgICBkZWYgbW9kdWxlKHNlbGYpOgorICAgICAg
ICAiIiIgcHl0aG9uIG1vZHVsZSBvYmplY3Qgd2hlcmUgdGhlIHRlc3QgZnVuY3Rpb24gd2FzIGNv
bGxlY3RlZC4gIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9weWZ1bmNpdGVtLmdldHBhcmVudChw
eXRlc3QuTW9kdWxlKS5vYmoKKworICAgIEBzY29wZXByb3BlcnR5KCkKKyAgICBkZWYgZnNwYXRo
KHNlbGYpOgorICAgICAgICAiIiIgdGhlIGZpbGUgc3lzdGVtIHBhdGggb2YgdGhlIHRlc3QgbW9k
dWxlIHdoaWNoIGNvbGxlY3RlZCB0aGlzIHRlc3QuICIiIgorICAgICAgICByZXR1cm4gc2VsZi5f
cHlmdW5jaXRlbS5mc3BhdGgKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBrZXl3b3JkcyhzZWxm
KToKKyAgICAgICAgIiIiIGtleXdvcmRzL21hcmtlcnMgZGljdGlvbmFyeSBmb3IgdGhlIHVuZGVy
bHlpbmcgbm9kZS4gIiIiCisgICAgICAgIHJldHVybiBzZWxmLm5vZGUua2V5d29yZHMKKworICAg
IEBwcm9wZXJ0eQorICAgIGRlZiBzZXNzaW9uKHNlbGYpOgorICAgICAgICAiIiIgcHl0ZXN0IHNl
c3Npb24gb2JqZWN0LiAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3B5ZnVuY2l0ZW0uc2Vzc2lv
bgorCisgICAgZGVmIGFkZGZpbmFsaXplcihzZWxmLCBmaW5hbGl6ZXIpOgorICAgICAgICAiIiIg
YWRkIGZpbmFsaXplci90ZWFyZG93biBmdW5jdGlvbiB0byBiZSBjYWxsZWQgYWZ0ZXIgdGhlCisg
ICAgICAgIGxhc3QgdGVzdCB3aXRoaW4gdGhlIHJlcXVlc3RpbmcgdGVzdCBjb250ZXh0IGZpbmlz
aGVkCisgICAgICAgIGV4ZWN1dGlvbi4gIiIiCisgICAgICAgICMgWFhYIHVzdWFsbHkgdGhpcyBt
ZXRob2QgaXMgc2hhZG93ZWQgYnkgZml4dHVyZWRlZiBzcGVjaWZpYyBvbmVzCisgICAgICAgIHNl
bGYuX2FkZGZpbmFsaXplcihmaW5hbGl6ZXIsIHNjb3BlPXNlbGYuc2NvcGUpCisKKyAgICBkZWYg
X2FkZGZpbmFsaXplcihzZWxmLCBmaW5hbGl6ZXIsIHNjb3BlKToKKyAgICAgICAgY29saXRlbSA9
IHNlbGYuX2dldHNjb3BlaXRlbShzY29wZSkKKyAgICAgICAgc2VsZi5fcHlmdW5jaXRlbS5zZXNz
aW9uLl9zZXR1cHN0YXRlLmFkZGZpbmFsaXplcigKKyAgICAgICAgICAgIGZpbmFsaXplcj1maW5h
bGl6ZXIsIGNvbGl0ZW09Y29saXRlbSkKKworICAgIGRlZiBhcHBseW1hcmtlcihzZWxmLCBtYXJr
ZXIpOgorICAgICAgICAiIiIgQXBwbHkgYSBtYXJrZXIgdG8gYSBzaW5nbGUgdGVzdCBmdW5jdGlv
biBpbnZvY2F0aW9uLgorICAgICAgICBUaGlzIG1ldGhvZCBpcyB1c2VmdWwgaWYgeW91IGRvbid0
IHdhbnQgdG8gaGF2ZSBhIGtleXdvcmQvbWFya2VyCisgICAgICAgIG9uIGFsbCBmdW5jdGlvbiBp
bnZvY2F0aW9ucy4KKworICAgICAgICA6YXJnIG1hcmtlcjogYSA6cHk6Y2xhc3M6YF9weXRlc3Qu
bWFyay5NYXJrRGVjb3JhdG9yYCBvYmplY3QKKyAgICAgICAgICAgIGNyZWF0ZWQgYnkgYSBjYWxs
IHRvIGBgcHl0ZXN0Lm1hcmsuTkFNRSguLi4pYGAuCisgICAgICAgICIiIgorICAgICAgICB0cnk6
CisgICAgICAgICAgICBzZWxmLm5vZGUua2V5d29yZHNbbWFya2VyLm1hcmtuYW1lXSA9IG1hcmtl
cgorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICByYWlzZSBWYWx1
ZUVycm9yKG1hcmtlcikKKworICAgIGRlZiByYWlzZWVycm9yKHNlbGYsIG1zZyk6CisgICAgICAg
ICIiIiByYWlzZSBhIEZpeHR1cmVMb29rdXBFcnJvciB3aXRoIHRoZSBnaXZlbiBtZXNzYWdlLiAi
IiIKKyAgICAgICAgcmFpc2Ugc2VsZi5fZml4dHVyZW1hbmFnZXIuRml4dHVyZUxvb2t1cEVycm9y
KE5vbmUsIHNlbGYsIG1zZykKKworICAgIGRlZiBfZmlsbGZpeHR1cmVzKHNlbGYpOgorICAgICAg
ICBpdGVtID0gc2VsZi5fcHlmdW5jaXRlbQorICAgICAgICBmaXh0dXJlbmFtZXMgPSBnZXRhdHRy
KGl0ZW0sICJmaXh0dXJlbmFtZXMiLCBzZWxmLmZpeHR1cmVuYW1lcykKKyAgICAgICAgZm9yIGFy
Z25hbWUgaW4gZml4dHVyZW5hbWVzOgorICAgICAgICAgICAgaWYgYXJnbmFtZSBub3QgaW4gaXRl
bS5mdW5jYXJnczoKKyAgICAgICAgICAgICAgICBpdGVtLmZ1bmNhcmdzW2FyZ25hbWVdID0gc2Vs
Zi5nZXRmdW5jYXJndmFsdWUoYXJnbmFtZSkKKworICAgIGRlZiBjYWNoZWRfc2V0dXAoc2VsZiwg
c2V0dXAsIHRlYXJkb3duPU5vbmUsIHNjb3BlPSJtb2R1bGUiLCBleHRyYWtleT1Ob25lKToKKyAg
ICAgICAgIiIiIChkZXByZWNhdGVkKSBSZXR1cm4gYSB0ZXN0aW5nIHJlc291cmNlIG1hbmFnZWQg
YnkgYGBzZXR1cGBgICYKKyAgICAgICAgYGB0ZWFyZG93bmBgIGNhbGxzLiAgYGBzY29wZWBgIGFu
ZCBgYGV4dHJha2V5YGAgZGV0ZXJtaW5lIHdoZW4gdGhlCisgICAgICAgIGBgdGVhcmRvd25gYCBm
dW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBzbyB0aGF0IHN1YnNlcXVlbnQgY2FsbHMgdG8KKyAgICAg
ICAgYGBzZXR1cGBgIHdvdWxkIHJlY3JlYXRlIHRoZSByZXNvdXJjZS4gIFdpdGggcHl0ZXN0LTIu
MyB5b3Ugb2Z0ZW4KKyAgICAgICAgZG8gbm90IG5lZWQgYGBjYWNoZWRfc2V0dXAoKWBgIGFzIHlv
dSBjYW4gZGlyZWN0bHkgZGVjbGFyZSBhIHNjb3BlCisgICAgICAgIG9uIGEgZml4dHVyZSBmdW5j
dGlvbiBhbmQgcmVnaXN0ZXIgYSBmaW5hbGl6ZXIgdGhyb3VnaAorICAgICAgICBgYHJlcXVlc3Qu
YWRkZmluYWxpemVyKClgYC4KKworICAgICAgICA6YXJnIHRlYXJkb3duOiBmdW5jdGlvbiByZWNl
aXZpbmcgYSBwcmV2aW91c2x5IHNldHVwIHJlc291cmNlLgorICAgICAgICA6YXJnIHNldHVwOiBh
IG5vLWFyZ3VtZW50IGZ1bmN0aW9uIGNyZWF0aW5nIGEgcmVzb3VyY2UuCisgICAgICAgIDphcmcg
c2NvcGU6IGEgc3RyaW5nIHZhbHVlIG91dCBvZiBgYGZ1bmN0aW9uYGAsIGBgY2xhc3NgYCwgYGBt
b2R1bGVgYAorICAgICAgICAgICAgb3IgYGBzZXNzaW9uYGAgaW5kaWNhdGluZyB0aGUgY2FjaGlu
ZyBsaWZlY3ljbGUgb2YgdGhlIHJlc291cmNlLgorICAgICAgICA6YXJnIGV4dHJha2V5OiBhZGRl
ZCB0byBpbnRlcm5hbCBjYWNoaW5nIGtleSBvZiAoZnVuY2FyZ25hbWUsIHNjb3BlKS4KKyAgICAg
ICAgIiIiCisgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYuY29uZmlnLCAnX3NldHVwY2FjaGUn
KToKKyAgICAgICAgICAgIHNlbGYuY29uZmlnLl9zZXR1cGNhY2hlID0ge30gIyBYWFggd2Vha3Jl
Zj8KKyAgICAgICAgY2FjaGVrZXkgPSAoc2VsZi5maXh0dXJlbmFtZSwgc2VsZi5fZ2V0c2NvcGVp
dGVtKHNjb3BlKSwgZXh0cmFrZXkpCisgICAgICAgIGNhY2hlID0gc2VsZi5jb25maWcuX3NldHVw
Y2FjaGUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdmFsID0gY2FjaGVbY2FjaGVrZXldCisg
ICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3Njb3BlKHNl
bGYuZml4dHVyZW5hbWUsIHNlbGYuc2NvcGUsIHNjb3BlKQorICAgICAgICAgICAgdmFsID0gc2V0
dXAoKQorICAgICAgICAgICAgY2FjaGVbY2FjaGVrZXldID0gdmFsCisgICAgICAgICAgICBpZiB0
ZWFyZG93biBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBkZWYgZmluYWxpemVyKCk6Cisg
ICAgICAgICAgICAgICAgICAgIGRlbCBjYWNoZVtjYWNoZWtleV0KKyAgICAgICAgICAgICAgICAg
ICAgdGVhcmRvd24odmFsKQorICAgICAgICAgICAgICAgIHNlbGYuX2FkZGZpbmFsaXplcihmaW5h
bGl6ZXIsIHNjb3BlPXNjb3BlKQorICAgICAgICByZXR1cm4gdmFsCisKKyAgICBkZWYgZ2V0ZnVu
Y2FyZ3ZhbHVlKHNlbGYsIGFyZ25hbWUpOgorICAgICAgICAiIiIgRHluYW1pY2FsbHkgcmV0cmll
dmUgYSBuYW1lZCBmaXh0dXJlIGZ1bmN0aW9uIGFyZ3VtZW50LgorCisgICAgICAgIEFzIG9mIHB5
dGVzdC0yLjMsIGl0IGlzIGVhc2llciBhbmQgdXN1YWxseSBiZXR0ZXIgdG8gYWNjZXNzIG90aGVy
CisgICAgICAgIGZpeHR1cmUgdmFsdWVzIGJ5IHN0YXRpbmcgaXQgYXMgYW4gaW5wdXQgYXJndW1l
bnQgaW4gdGhlIGZpeHR1cmUKKyAgICAgICAgZnVuY3Rpb24uICBJZiB5b3Ugb25seSBjYW4gZGVj
aWRlIGFib3V0IHVzaW5nIGFub3RoZXIgZml4dHVyZSBhdCB0ZXN0CisgICAgICAgIHNldHVwIHRp
bWUsIHlvdSBtYXkgdXNlIHRoaXMgZnVuY3Rpb24gdG8gcmV0cmlldmUgaXQgaW5zaWRlIGEgZml4
dHVyZQorICAgICAgICBmdW5jdGlvbiBib2R5LgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJu
IHNlbGYuX2dldF9hY3RpdmVfZml4dHVyZWRlZihhcmduYW1lKS5jYWNoZWRfcmVzdWx0WzBdCisK
KyAgICBkZWYgX2dldF9hY3RpdmVfZml4dHVyZWRlZihzZWxmLCBhcmduYW1lKToKKyAgICAgICAg
dHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ZpeHR1cmVkZWZzW2FyZ25hbWVdCisgICAg
ICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBm
aXh0dXJlZGVmID0gc2VsZi5fZ2V0bmV4dGZpeHR1cmVkZWYoYXJnbmFtZSkKKyAgICAgICAgICAg
IGV4Y2VwdCBGaXh0dXJlTG9va3VwRXJyb3I6CisgICAgICAgICAgICAgICAgaWYgYXJnbmFtZSA9
PSAicmVxdWVzdCI6CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIFBzZXVkb0ZpeHR1cmVEZWY6
CisgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZWRfcmVzdWx0ID0gKHNlbGYsIFswXSwgTm9u
ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlID0gImZ1bmN0aW9uIgorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gUHNldWRvRml4dHVyZURlZgorICAgICAgICAgICAgICAgIHJhaXNl
CisgICAgICAgICMgcmVtb3ZlIGluZGVudCB0byBwcmV2ZW50IHRoZSBweXRob24zIGV4Y2VwdGlv
bgorICAgICAgICAjIGZyb20gbGVha2luZyBpbnRvIHRoZSBjYWxsCisgICAgICAgIHJlc3VsdCA9
IHNlbGYuX2dldGZ1bmNhcmd2YWx1ZShmaXh0dXJlZGVmKQorICAgICAgICBzZWxmLl9mdW5jYXJn
c1thcmduYW1lXSA9IHJlc3VsdAorICAgICAgICBzZWxmLl9maXh0dXJlZGVmc1thcmduYW1lXSA9
IGZpeHR1cmVkZWYKKyAgICAgICAgcmV0dXJuIGZpeHR1cmVkZWYKKworICAgIGRlZiBfZ2V0X2Zp
eHR1cmVzdGFjayhzZWxmKToKKyAgICAgICAgY3VycmVudCA9IHNlbGYKKyAgICAgICAgbCA9IFtd
CisgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICBmaXh0dXJlZGVmID0gZ2V0YXR0cihjdXJy
ZW50LCAiX2ZpeHR1cmVkZWYiLCBOb25lKQorICAgICAgICAgICAgaWYgZml4dHVyZWRlZiBpcyBO
b25lOgorICAgICAgICAgICAgICAgIGwucmV2ZXJzZSgpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGwKKyAgICAgICAgICAgIGwuYXBwZW5kKGZpeHR1cmVkZWYpCisgICAgICAgICAgICBjdXJyZW50
ID0gY3VycmVudC5fcGFyZW50X3JlcXVlc3QKKworICAgIGRlZiBfZ2V0ZnVuY2FyZ3ZhbHVlKHNl
bGYsIGZpeHR1cmVkZWYpOgorICAgICAgICAjIHByZXBhcmUgYSBzdWJyZXF1ZXN0IG9iamVjdCBi
ZWZvcmUgY2FsbGluZyBmaXh0dXJlIGZ1bmN0aW9uCisgICAgICAgICMgKGxhdHRlciBtYW5hZ2Vk
IGJ5IGZpeHR1cmVkZWYpCisgICAgICAgIGFyZ25hbWUgPSBmaXh0dXJlZGVmLmFyZ25hbWUKKyAg
ICAgICAgZnVuY2l0ZW0gPSBzZWxmLl9weWZ1bmNpdGVtCisgICAgICAgIHNjb3BlID0gZml4dHVy
ZWRlZi5zY29wZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwYXJhbSA9IGZ1bmNpdGVtLmNh
bGxzcGVjLmdldHBhcmFtKGFyZ25hbWUpCisgICAgICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3Is
IFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgcGFyYW0gPSBOT1RTRVQKKyAgICAgICAgICAgIHBh
cmFtX2luZGV4ID0gMAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBpbmRpY2VzIG1pZ2h0
IG5vdCBiZSBzZXQgaWYgb2xkLXN0eWxlIG1ldGFmdW5jLmFkZGNhbGwoKSB3YXMgdXNlZAorICAg
ICAgICAgICAgcGFyYW1faW5kZXggPSBmdW5jaXRlbS5jYWxsc3BlYy5pbmRpY2VzLmdldChhcmdu
YW1lLCAwKQorICAgICAgICAgICAgIyBpZiBhIHBhcmFtZXRyaXplIGludm9jYXRpb24gc2V0IGEg
c2NvcGUgaXQgd2lsbCBvdmVycmlkZQorICAgICAgICAgICAgIyB0aGUgc3RhdGljIHNjb3BlIGRl
ZmluZWQgd2l0aCB0aGUgZml4dHVyZSBmdW5jdGlvbgorICAgICAgICAgICAgcGFyYW1zY29wZW51
bSA9IGZ1bmNpdGVtLmNhbGxzcGVjLl9hcmcyc2NvcGVudW0uZ2V0KGFyZ25hbWUpCisgICAgICAg
ICAgICBpZiBwYXJhbXNjb3BlbnVtIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNjb3Bl
ID0gc2NvcGVzW3BhcmFtc2NvcGVudW1dCisKKyAgICAgICAgc3VicmVxdWVzdCA9IFN1YlJlcXVl
c3Qoc2VsZiwgc2NvcGUsIHBhcmFtLCBwYXJhbV9pbmRleCwgZml4dHVyZWRlZikKKworICAgICAg
ICAjIGNoZWNrIGlmIGEgaGlnaGVyLWxldmVsIHNjb3BlZCBmaXh0dXJlIGFjY2Vzc2VzIGEgbG93
ZXIgbGV2ZWwgb25lCisgICAgICAgIHN1YnJlcXVlc3QuX2NoZWNrX3Njb3BlKGFyZ25hbWUsIHNl
bGYuc2NvcGUsIHNjb3BlKQorCisgICAgICAgICMgY2xlYXIgc3lzLmV4Y19pbmZvIGJlZm9yZSBp
bnZva2luZyB0aGUgZml4dHVyZSAocHl0aG9uIGJ1Zz8pCisgICAgICAgICMgaWYgaXRzIG5vdCBl
eHBsaWNpdGx5IGNsZWFyZWQgaXQgd2lsbCBsZWFrIGludG8gdGhlIGNhbGwKKyAgICAgICAgZXhj
X2NsZWFyKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBjYWxsIHRoZSBmaXh0dXJlIGZ1
bmN0aW9uCisgICAgICAgICAgICB2YWwgPSBmaXh0dXJlZGVmLmV4ZWN1dGUocmVxdWVzdD1zdWJy
ZXF1ZXN0KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgIyBpZiBmaXh0dXJlIGZ1bmN0
aW9uIGZhaWxlZCBpdCBtaWdodCBoYXZlIHJlZ2lzdGVyZWQgZmluYWxpemVycworICAgICAgICAg
ICAgc2VsZi5zZXNzaW9uLl9zZXR1cHN0YXRlLmFkZGZpbmFsaXplcihmaXh0dXJlZGVmLmZpbmlz
aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vi
cmVxdWVzdC5ub2RlKQorICAgICAgICByZXR1cm4gdmFsCisKKyAgICBkZWYgX2NoZWNrX3Njb3Bl
KHNlbGYsIGFyZ25hbWUsIGludm9raW5nX3Njb3BlLCByZXF1ZXN0ZWRfc2NvcGUpOgorICAgICAg
ICBpZiBhcmduYW1lID09ICJyZXF1ZXN0IjoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBp
ZiBzY29wZW1pc21hdGNoKGludm9raW5nX3Njb3BlLCByZXF1ZXN0ZWRfc2NvcGUpOgorICAgICAg
ICAgICAgIyB0cnkgdG8gcmVwb3J0IHNvbWV0aGluZyBoZWxwZnVsCisgICAgICAgICAgICBsaW5l
cyA9IHNlbGYuX2ZhY3Rvcnl0cmFjZWJhY2soKQorICAgICAgICAgICAgcHl0ZXN0LmZhaWwoIlNj
b3BlTWlzbWF0Y2g6IFlvdSB0cmllZCB0byBhY2Nlc3MgdGhlICVyIHNjb3BlZCAiCisgICAgICAg
ICAgICAgICAgImZpeHR1cmUgJXIgd2l0aCBhICVyIHNjb3BlZCByZXF1ZXN0IG9iamVjdCwgIgor
ICAgICAgICAgICAgICAgICJpbnZvbHZlZCBmYWN0b3JpZXNcbiVzIiAlKAorICAgICAgICAgICAg
ICAgIChyZXF1ZXN0ZWRfc2NvcGUsIGFyZ25hbWUsIGludm9raW5nX3Njb3BlLCAiXG4iLmpvaW4o
bGluZXMpKSksCisgICAgICAgICAgICAgICAgcHl0cmFjZT1GYWxzZSkKKworICAgIGRlZiBfZmFj
dG9yeXRyYWNlYmFjayhzZWxmKToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBmb3IgZml4
dHVyZWRlZiBpbiBzZWxmLl9nZXRfZml4dHVyZXN0YWNrKCk6CisgICAgICAgICAgICBmYWN0b3J5
ID0gZml4dHVyZWRlZi5mdW5jCisgICAgICAgICAgICBmcywgbGluZW5vID0gZ2V0ZnNsaW5lbm8o
ZmFjdG9yeSkKKyAgICAgICAgICAgIHAgPSBzZWxmLl9weWZ1bmNpdGVtLnNlc3Npb24uZnNwYXRo
LmJlc3RyZWxwYXRoKGZzKQorICAgICAgICAgICAgYXJncyA9IF9mb3JtYXRfYXJncyhmYWN0b3J5
KQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCIlczolZDogIGRlZiAlcyVzIiAlKAorICAgICAg
ICAgICAgICAgIHAsIGxpbmVubywgZmFjdG9yeS5fX25hbWVfXywgYXJncykpCisgICAgICAgIHJl
dHVybiBsaW5lcworCisgICAgZGVmIF9nZXRzY29wZWl0ZW0oc2VsZiwgc2NvcGUpOgorICAgICAg
ICBpZiBzY29wZSA9PSAiZnVuY3Rpb24iOgorICAgICAgICAgICAgIyB0aGlzIG1pZ2h0IGFsc28g
YmUgYSBub24tZnVuY3Rpb24gSXRlbSBkZXNwaXRlIGl0cyBhdHRyaWJ1dGUgbmFtZQorICAgICAg
ICAgICAgcmV0dXJuIHNlbGYuX3B5ZnVuY2l0ZW0KKyAgICAgICAgbm9kZSA9IGdldF9zY29wZV9u
b2RlKHNlbGYuX3B5ZnVuY2l0ZW0sIHNjb3BlKQorICAgICAgICBpZiBub2RlIGlzIE5vbmUgYW5k
IHNjb3BlID09ICJjbGFzcyI6CisgICAgICAgICAgICAjIGZhbGxiYWNrIHRvIGZ1bmN0aW9uIGl0
ZW0gaXRzZWxmCisgICAgICAgICAgICBub2RlID0gc2VsZi5fcHlmdW5jaXRlbQorICAgICAgICBh
c3NlcnQgbm9kZQorICAgICAgICByZXR1cm4gbm9kZQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYp
OgorICAgICAgICByZXR1cm4gIjxGaXh0dXJlUmVxdWVzdCBmb3IgJXI+IiAlKHNlbGYubm9kZSkK
KworCitjbGFzcyBTdWJSZXF1ZXN0KEZpeHR1cmVSZXF1ZXN0KToKKyAgICAiIiIgYSBzdWIgcmVx
dWVzdCBmb3IgaGFuZGxpbmcgZ2V0dGluZyBhIGZpeHR1cmUgZnJvbSBhCisgICAgdGVzdCBmdW5j
dGlvbi9maXh0dXJlLiAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVxdWVzdCwgc2NvcGUs
IHBhcmFtLCBwYXJhbV9pbmRleCwgZml4dHVyZWRlZik6CisgICAgICAgIHNlbGYuX3BhcmVudF9y
ZXF1ZXN0ID0gcmVxdWVzdAorICAgICAgICBzZWxmLmZpeHR1cmVuYW1lID0gZml4dHVyZWRlZi5h
cmduYW1lCisgICAgICAgIGlmIHBhcmFtIGlzIG5vdCBOT1RTRVQ6CisgICAgICAgICAgICBzZWxm
LnBhcmFtID0gcGFyYW0KKyAgICAgICAgc2VsZi5wYXJhbV9pbmRleCA9IHBhcmFtX2luZGV4Cisg
ICAgICAgIHNlbGYuc2NvcGUgPSBzY29wZQorICAgICAgICBzZWxmLl9maXh0dXJlZGVmID0gZml4
dHVyZWRlZgorICAgICAgICBzZWxmLmFkZGZpbmFsaXplciA9IGZpeHR1cmVkZWYuYWRkZmluYWxp
emVyCisgICAgICAgIHNlbGYuX3B5ZnVuY2l0ZW0gPSByZXF1ZXN0Ll9weWZ1bmNpdGVtCisgICAg
ICAgIHNlbGYuX2Z1bmNhcmdzICA9IHJlcXVlc3QuX2Z1bmNhcmdzCisgICAgICAgIHNlbGYuX2Zp
eHR1cmVkZWZzID0gcmVxdWVzdC5fZml4dHVyZWRlZnMKKyAgICAgICAgc2VsZi5fYXJnMmZpeHR1
cmVkZWZzID0gcmVxdWVzdC5fYXJnMmZpeHR1cmVkZWZzCisgICAgICAgIHNlbGYuX2FyZzJpbmRl
eCA9IHJlcXVlc3QuX2FyZzJpbmRleAorICAgICAgICBzZWxmLmZpeHR1cmVuYW1lcyA9IHJlcXVl
c3QuZml4dHVyZW5hbWVzCisgICAgICAgIHNlbGYuX2ZpeHR1cmVtYW5hZ2VyID0gcmVxdWVzdC5f
Zml4dHVyZW1hbmFnZXIKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJu
ICI8U3ViUmVxdWVzdCAlciBmb3IgJXI+IiAlIChzZWxmLmZpeHR1cmVuYW1lLCBzZWxmLl9weWZ1
bmNpdGVtKQorCisKK2NsYXNzIFNjb3BlTWlzbWF0Y2hFcnJvcihFeGNlcHRpb24pOgorICAgICIi
IiBBIGZpeHR1cmUgZnVuY3Rpb24gdHJpZXMgdG8gdXNlIGEgZGlmZmVyZW50IGZpeHR1cmUgZnVu
Y3Rpb24gd2hpY2gKKyAgICB3aGljaCBoYXMgYSBsb3dlciBzY29wZSAoZS5nLiBhIFNlc3Npb24g
b25lIGNhbGxzIGEgZnVuY3Rpb24gb25lKQorICAgICIiIgorCitzY29wZXMgPSAic2Vzc2lvbiBt
b2R1bGUgY2xhc3MgZnVuY3Rpb24iLnNwbGl0KCkKK3Njb3BlbnVtX2Z1bmN0aW9uID0gc2NvcGVz
LmluZGV4KCJmdW5jdGlvbiIpCitkZWYgc2NvcGVtaXNtYXRjaChjdXJyZW50c2NvcGUsIG5ld3Nj
b3BlKToKKyAgICByZXR1cm4gc2NvcGVzLmluZGV4KG5ld3Njb3BlKSA+IHNjb3Blcy5pbmRleChj
dXJyZW50c2NvcGUpCisKKworY2xhc3MgRml4dHVyZUxvb2t1cEVycm9yKExvb2t1cEVycm9yKToK
KyAgICAiIiIgY291bGQgbm90IHJldHVybiBhIHJlcXVlc3RlZCBGaXh0dXJlIChtaXNzaW5nIG9y
IGludmFsaWQpLiAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYXJnbmFtZSwgcmVxdWVzdCwg
bXNnPU5vbmUpOgorICAgICAgICBzZWxmLmFyZ25hbWUgPSBhcmduYW1lCisgICAgICAgIHNlbGYu
cmVxdWVzdCA9IHJlcXVlc3QKKyAgICAgICAgc2VsZi5maXh0dXJlc3RhY2sgPSByZXF1ZXN0Ll9n
ZXRfZml4dHVyZXN0YWNrKCkKKyAgICAgICAgc2VsZi5tc2cgPSBtc2cKKworICAgIGRlZiBmb3Jt
YXRyZXByKHNlbGYpOgorICAgICAgICB0YmxpbmVzID0gW10KKyAgICAgICAgYWRkbGluZSA9IHRi
bGluZXMuYXBwZW5kCisgICAgICAgIHN0YWNrID0gW3NlbGYucmVxdWVzdC5fcHlmdW5jaXRlbS5v
YmpdCisgICAgICAgIHN0YWNrLmV4dGVuZChtYXAobGFtYmRhIHg6IHguZnVuYywgc2VsZi5maXh0
dXJlc3RhY2spKQorICAgICAgICBtc2cgPSBzZWxmLm1zZworICAgICAgICBpZiBtc2cgaXMgbm90
IE5vbmU6CisgICAgICAgICAgICAjIHRoZSBsYXN0IGZpeHR1cmUgcmFpc2UgYW4gZXJyb3IsIGxl
dCdzIHByZXNlbnQKKyAgICAgICAgICAgICMgaXQgYXQgdGhlIHJlcXVlc3Rpbmcgc2lkZQorICAg
ICAgICAgICAgc3RhY2sgPSBzdGFja1s6LTFdCisgICAgICAgIGZvciBmdW5jdGlvbiBpbiBzdGFj
azoKKyAgICAgICAgICAgIGZzcGF0aCwgbGluZW5vID0gZ2V0ZnNsaW5lbm8oZnVuY3Rpb24pCisg
ICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbGluZXMsIF8gPSBpbnNwZWN0LmdldHNv
dXJjZWxpbmVzKGdldF9yZWFsX2Z1bmMoZnVuY3Rpb24pKQorICAgICAgICAgICAgZXhjZXB0IChJ
T0Vycm9yLCBJbmRleEVycm9yKToKKyAgICAgICAgICAgICAgICBlcnJvcl9tc2cgPSAiZmlsZSAl
cywgbGluZSAlczogc291cmNlIGNvZGUgbm90IGF2YWlsYWJsZSIKKyAgICAgICAgICAgICAgICBh
ZGRsaW5lKGVycm9yX21zZyAlIChmc3BhdGgsIGxpbmVubysxKSkKKyAgICAgICAgICAgIGVsc2U6
CisgICAgICAgICAgICAgICAgYWRkbGluZSgiZmlsZSAlcywgbGluZSAlcyIgJSAoZnNwYXRoLCBs
aW5lbm8rMSkpCisgICAgICAgICAgICAgICAgZm9yIGksIGxpbmUgaW4gZW51bWVyYXRlKGxpbmVz
KToKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucnN0cmlwKCkKKyAgICAgICAgICAg
ICAgICAgICAgYWRkbGluZSgiICAiICsgbGluZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbGlu
ZS5sc3RyaXAoKS5zdGFydHN3aXRoKCdkZWYnKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrCisKKyAgICAgICAgaWYgbXNnIGlzIE5vbmU6CisgICAgICAgICAgICBmbSA9IHNlbGYucmVx
dWVzdC5fZml4dHVyZW1hbmFnZXIKKyAgICAgICAgICAgIGF2YWlsYWJsZSA9IFtdCisgICAgICAg
ICAgICBmb3IgbmFtZSwgZml4dHVyZWRlZiBpbiBmbS5fYXJnMmZpeHR1cmVkZWZzLml0ZW1zKCk6
CisgICAgICAgICAgICAgICAgcGFyZW50aWQgPSBzZWxmLnJlcXVlc3QuX3B5ZnVuY2l0ZW0ucGFy
ZW50Lm5vZGVpZAorICAgICAgICAgICAgICAgIGZhY2xpc3QgPSBsaXN0KGZtLl9tYXRjaGZhY3Rv
cmllcyhmaXh0dXJlZGVmLCBwYXJlbnRpZCkpCisgICAgICAgICAgICAgICAgaWYgZmFjbGlzdDoK
KyAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlLmFwcGVuZChuYW1lKQorICAgICAgICAgICAg
bXNnID0gImZpeHR1cmUgJXIgbm90IGZvdW5kIiAlIChzZWxmLmFyZ25hbWUsKQorICAgICAgICAg
ICAgbXNnICs9ICJcbiBhdmFpbGFibGUgZml4dHVyZXM6ICVzIiAlKCIsICIuam9pbihhdmFpbGFi
bGUpLCkKKyAgICAgICAgICAgIG1zZyArPSAiXG4gdXNlICdweS50ZXN0IC0tZml4dHVyZXMgW3Rl
c3RwYXRoXScgZm9yIGhlbHAgb24gdGhlbS4iCisKKyAgICAgICAgcmV0dXJuIEZpeHR1cmVMb29r
dXBFcnJvclJlcHIoZnNwYXRoLCBsaW5lbm8sIHRibGluZXMsIG1zZywgc2VsZi5hcmduYW1lKQor
CitjbGFzcyBGaXh0dXJlTG9va3VwRXJyb3JSZXByKFRlcm1pbmFsUmVwcik6CisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIGZpbGVuYW1lLCBmaXJzdGxpbmVubywgdGJsaW5lcywgZXJyb3JzdHJpbmcs
IGFyZ25hbWUpOgorICAgICAgICBzZWxmLnRibGluZXMgPSB0YmxpbmVzCisgICAgICAgIHNlbGYu
ZXJyb3JzdHJpbmcgPSBlcnJvcnN0cmluZworICAgICAgICBzZWxmLmZpbGVuYW1lID0gZmlsZW5h
bWUKKyAgICAgICAgc2VsZi5maXJzdGxpbmVubyA9IGZpcnN0bGluZW5vCisgICAgICAgIHNlbGYu
YXJnbmFtZSA9IGFyZ25hbWUKKworICAgIGRlZiB0b3Rlcm1pbmFsKHNlbGYsIHR3KToKKyAgICAg
ICAgI3R3LmxpbmUoIkZpeHR1cmVMb29rdXBFcnJvcjogJXMiICUoc2VsZi5hcmduYW1lKSwgcmVk
PVRydWUpCisgICAgICAgIGZvciB0YmxpbmUgaW4gc2VsZi50YmxpbmVzOgorICAgICAgICAgICAg
dHcubGluZSh0YmxpbmUucnN0cmlwKCkpCisgICAgICAgIGZvciBsaW5lIGluIHNlbGYuZXJyb3Jz
dHJpbmcuc3BsaXQoIlxuIik6CisgICAgICAgICAgICB0dy5saW5lKCIgICAgICAgICIgKyBsaW5l
LnN0cmlwKCksIHJlZD1UcnVlKQorICAgICAgICB0dy5saW5lKCkKKyAgICAgICAgdHcubGluZSgi
JXM6JWQiICUgKHNlbGYuZmlsZW5hbWUsIHNlbGYuZmlyc3RsaW5lbm8rMSkpCisKK2NsYXNzIEZp
eHR1cmVNYW5hZ2VyOgorICAgICIiIgorICAgIHB5dGVzdCBmaXh0dXJlcyBkZWZpbml0aW9ucyBh
bmQgaW5mb3JtYXRpb24gaXMgc3RvcmVkIGFuZCBtYW5hZ2VkCisgICAgZnJvbSB0aGlzIGNsYXNz
LgorCisgICAgRHVyaW5nIGNvbGxlY3Rpb24gZm0ucGFyc2VmYWN0b3JpZXMoKSBpcyBjYWxsZWQg
bXVsdGlwbGUgdGltZXMgdG8gcGFyc2UKKyAgICBmaXh0dXJlIGZ1bmN0aW9uIGRlZmluaXRpb25z
IGludG8gRml4dHVyZURlZiBvYmplY3RzIGFuZCBpbnRlcm5hbAorICAgIGRhdGEgc3RydWN0dXJl
cy4KKworICAgIER1cmluZyBjb2xsZWN0aW9uIG9mIHRlc3QgZnVuY3Rpb25zLCBtZXRhZnVuYy1t
ZWNoYW5pY3MgaW5zdGFudGlhdGUKKyAgICBhIEZ1bmNGaXh0dXJlSW5mbyBvYmplY3Qgd2hpY2gg
aXMgY2FjaGVkIHBlciBub2RlL2Z1bmMtbmFtZS4KKyAgICBUaGlzIEZ1bmNGaXh0dXJlSW5mbyBv
YmplY3QgaXMgbGF0ZXIgcmV0cmlldmVkIGJ5IEZ1bmN0aW9uIG5vZGVzCisgICAgd2hpY2ggdGhl
bXNlbHZlcyBvZmZlciBhIGZpeHR1cmVuYW1lcyBhdHRyaWJ1dGUuCisKKyAgICBUaGUgRnVuY0Zp
eHR1cmVJbmZvIG9iamVjdCBob2xkcyBpbmZvcm1hdGlvbiBhYm91dCBmaXh0dXJlcyBhbmQgRml4
dHVyZURlZnMKKyAgICByZWxldmFudCBmb3IgYSBwYXJ0aWN1bGFyIGZ1bmN0aW9uLiAgQW4gaW5p
dGlhbCBsaXN0IG9mIGZpeHR1cmVzIGlzCisgICAgYXNzZW1ibGVkIGxpa2UgdGhpczoKKworICAg
IC0gaW5pLWRlZmluZWQgdXNlZml4dHVyZXMKKyAgICAtIGF1dG91c2UtbWFya2VkIGZpeHR1cmVz
IGFsb25nIHRoZSBjb2xsZWN0aW9uIGNoYWluIHVwIGZyb20gdGhlIGZ1bmN0aW9uCisgICAgLSB1
c2VmaXh0dXJlcyBtYXJrZXJzIGF0IG1vZHVsZS9jbGFzcy9mdW5jdGlvbiBsZXZlbAorICAgIC0g
dGVzdCBmdW5jdGlvbiBmdW5jYXJncworCisgICAgU3Vic2VxdWVudGx5IHRoZSBmdW5jZml4dHVy
ZWluZm8uZml4dHVyZW5hbWVzIGF0dHJpYnV0ZSBpcyBjb21wdXRlZAorICAgIGFzIHRoZSBjbG9z
dXJlIG9mIHRoZSBmaXh0dXJlcyBuZWVkZWQgdG8gc2V0dXAgdGhlIGluaXRpYWwgZml4dHVyZXMs
CisgICAgaS4gZS4gZml4dHVyZXMgbmVlZGVkIGJ5IGZpeHR1cmUgZnVuY3Rpb25zIHRoZW1zZWx2
ZXMgYXJlIGFwcGVuZGVkCisgICAgdG8gdGhlIGZpeHR1cmVuYW1lcyBsaXN0LgorCisgICAgVXBv
biB0aGUgdGVzdC1zZXR1cCBwaGFzZXMgYWxsIGZpeHR1cmVuYW1lcyBhcmUgaW5zdGFudGlhdGVk
LCByZXRyaWV2ZWQKKyAgICBieSBhIGxvb2t1cCBvZiB0aGVpciBGdW5jRml4dHVyZUluZm8uCisg
ICAgIiIiCisKKyAgICBfYXJncHJlZml4ID0gInB5dGVzdF9mdW5jYXJnX18iCisgICAgRml4dHVy
ZUxvb2t1cEVycm9yID0gRml4dHVyZUxvb2t1cEVycm9yCisgICAgRml4dHVyZUxvb2t1cEVycm9y
UmVwciA9IEZpeHR1cmVMb29rdXBFcnJvclJlcHIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBz
ZXNzaW9uKToKKyAgICAgICAgc2VsZi5zZXNzaW9uID0gc2Vzc2lvbgorICAgICAgICBzZWxmLmNv
bmZpZyA9IHNlc3Npb24uY29uZmlnCisgICAgICAgIHNlbGYuX2FyZzJmaXh0dXJlZGVmcyA9IHt9
CisgICAgICAgIHNlbGYuX2hvbGRlcm9ianNlZW4gPSBzZXQoKQorICAgICAgICBzZWxmLl9hcmcy
ZmluaXNoID0ge30KKyAgICAgICAgc2VsZi5fbm9kZWlkX2FuZF9hdXRvdXNlbmFtZXMgPSBbKCIi
LCBzZWxmLmNvbmZpZy5nZXRpbmkoInVzZWZpeHR1cmVzIikpXQorICAgICAgICBzZXNzaW9uLmNv
bmZpZy5wbHVnaW5tYW5hZ2VyLnJlZ2lzdGVyKHNlbGYsICJmdW5jbWFuYWdlIikKKworCisgICAg
ZGVmIGdldGZpeHR1cmVpbmZvKHNlbGYsIG5vZGUsIGZ1bmMsIGNscywgZnVuY2FyZ3M9VHJ1ZSk6
CisgICAgICAgIGlmIGZ1bmNhcmdzIGFuZCBub3QgaGFzYXR0cihub2RlLCAibm9mdW5jYXJncyIp
OgorICAgICAgICAgICAgaWYgY2xzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHN0YXJ0
aW5kZXggPSAxCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHN0YXJ0aW5kZXgg
PSBOb25lCisgICAgICAgICAgICBhcmduYW1lcyA9IGdldGZ1bmNhcmduYW1lcyhmdW5jLCBzdGFy
dGluZGV4KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYXJnbmFtZXMgPSAoKQorICAgICAg
ICB1c2VmaXh0dXJlcyA9IGdldGF0dHIoZnVuYywgInVzZWZpeHR1cmVzIiwgTm9uZSkKKyAgICAg
ICAgaW5pdGlhbG5hbWVzID0gYXJnbmFtZXMKKyAgICAgICAgaWYgdXNlZml4dHVyZXMgaXMgbm90
IE5vbmU6CisgICAgICAgICAgICBpbml0aWFsbmFtZXMgPSB1c2VmaXh0dXJlcy5hcmdzICsgaW5p
dGlhbG5hbWVzCisgICAgICAgIGZtID0gbm9kZS5zZXNzaW9uLl9maXh0dXJlbWFuYWdlcgorICAg
ICAgICBuYW1lc19jbG9zdXJlLCBhcmcyZml4dHVyZWRlZnMgPSBmbS5nZXRmaXh0dXJlY2xvc3Vy
ZShpbml0aWFsbmFtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5vZGUpCisgICAgICAgIHJldHVybiBGdW5jRml4dHVyZUlu
Zm8oYXJnbmFtZXMsIG5hbWVzX2Nsb3N1cmUsIGFyZzJmaXh0dXJlZGVmcykKKworICAgIGRlZiBw
eXRlc3RfcGx1Z2luX3JlZ2lzdGVyZWQoc2VsZiwgcGx1Z2luKToKKyAgICAgICAgbm9kZWlkID0g
Tm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwID0gcHkucGF0aC5sb2NhbChwbHVnaW4u
X19maWxlX18pCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHBh
c3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgY29uc3RydWN0IHRoZSBiYXNlIG5vZGVp
ZCB3aGljaCBpcyBsYXRlciB1c2VkIHRvIGNoZWNrCisgICAgICAgICAgICAjIHdoYXQgZml4dHVy
ZXMgYXJlIHZpc2libGUgZm9yIHBhcnRpY3VsYXIgdGVzdHMgKGFzIGRlbm90ZWQKKyAgICAgICAg
ICAgICMgYnkgdGhlaXIgdGVzdCBpZCkKKyAgICAgICAgICAgIGlmIHAuYmFzZW5hbWUuc3RhcnRz
d2l0aCgiY29uZnRlc3QucHkiKToKKyAgICAgICAgICAgICAgICBub2RlaWQgPSBwLmRpcnBhdGgo
KS5yZWx0byhzZWxmLmNvbmZpZy5yb290ZGlyKQorICAgICAgICAgICAgICAgIGlmIHAuc2VwICE9
ICIvIjoKKyAgICAgICAgICAgICAgICAgICAgbm9kZWlkID0gbm9kZWlkLnJlcGxhY2UocC5zZXAs
ICIvIikKKyAgICAgICAgc2VsZi5wYXJzZWZhY3RvcmllcyhwbHVnaW4sIG5vZGVpZCkKKworICAg
IGRlZiBfZ2V0YXV0b3VzZW5hbWVzKHNlbGYsIG5vZGVpZCk6CisgICAgICAgICIiIiByZXR1cm4g
YSB0dXBsZSBvZiBmaXh0dXJlIG5hbWVzIHRvIGJlIHVzZWQuICIiIgorICAgICAgICBhdXRvdXNl
bmFtZXMgPSBbXQorICAgICAgICBmb3IgYmFzZWlkLCBiYXNlbmFtZXMgaW4gc2VsZi5fbm9kZWlk
X2FuZF9hdXRvdXNlbmFtZXM6CisgICAgICAgICAgICBpZiBub2RlaWQuc3RhcnRzd2l0aChiYXNl
aWQpOgorICAgICAgICAgICAgICAgIGlmIGJhc2VpZDoKKyAgICAgICAgICAgICAgICAgICAgaSA9
IGxlbihiYXNlaWQpCisgICAgICAgICAgICAgICAgICAgIG5leHRjaGFyID0gbm9kZWlkW2k6aSsx
XQorICAgICAgICAgICAgICAgICAgICBpZiBuZXh0Y2hhciBhbmQgbmV4dGNoYXIgbm90IGluICI6
LyI6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGF1
dG91c2VuYW1lcy5leHRlbmQoYmFzZW5hbWVzKQorICAgICAgICAjIG1ha2Ugc3VyZSBhdXRvdXNl
bmFtZXMgYXJlIHNvcnRlZCBieSBzY29wZSwgc2NvcGVudW0gMCBpcyBzZXNzaW9uCisgICAgICAg
IGF1dG91c2VuYW1lcy5zb3J0KAorICAgICAgICAgICAga2V5PWxhbWJkYSB4OiBzZWxmLl9hcmcy
Zml4dHVyZWRlZnNbeF1bLTFdLnNjb3BlbnVtKQorICAgICAgICByZXR1cm4gYXV0b3VzZW5hbWVz
CisKKyAgICBkZWYgZ2V0Zml4dHVyZWNsb3N1cmUoc2VsZiwgZml4dHVyZW5hbWVzLCBwYXJlbnRu
b2RlKToKKyAgICAgICAgIyBjb2xsZWN0IHRoZSBjbG9zdXJlIG9mIGFsbCBmaXh0dXJlcyAsIHN0
YXJ0aW5nIHdpdGggdGhlIGdpdmVuCisgICAgICAgICMgZml4dHVyZW5hbWVzIGFzIHRoZSBpbml0
aWFsIHNldC4gIEFzIHdlIGhhdmUgdG8gdmlzaXQgYWxsCisgICAgICAgICMgZmFjdG9yeSBkZWZp
bml0aW9ucyBhbnl3YXksIHdlIGFsc28gcmV0dXJuIGEgYXJnMmZpeHR1cmVkZWZzCisgICAgICAg
ICMgbWFwcGluZyBzbyB0aGF0IHRoZSBjYWxsZXIgY2FuIHJldXNlIGl0IGFuZCBkb2VzIG5vdCBo
YXZlCisgICAgICAgICMgdG8gcmUtZGlzY292ZXIgZml4dHVyZWRlZnMgYWdhaW4gZm9yIGVhY2gg
Zml4dHVyZW5hbWUKKyAgICAgICAgIyAoZGlzY292ZXJpbmcgbWF0Y2hpbmcgZml4dHVyZXMgZm9y
IGEgZ2l2ZW4gbmFtZS9ub2RlIGlzIGV4cGVuc2l2ZSkKKworICAgICAgICBwYXJlbnRpZCA9IHBh
cmVudG5vZGUubm9kZWlkCisgICAgICAgIGZpeHR1cmVuYW1lc19jbG9zdXJlID0gc2VsZi5fZ2V0
YXV0b3VzZW5hbWVzKHBhcmVudGlkKQorICAgICAgICBkZWYgbWVyZ2Uob3RoZXJsaXN0KToKKyAg
ICAgICAgICAgIGZvciBhcmcgaW4gb3RoZXJsaXN0OgorICAgICAgICAgICAgICAgIGlmIGFyZyBu
b3QgaW4gZml4dHVyZW5hbWVzX2Nsb3N1cmU6CisgICAgICAgICAgICAgICAgICAgIGZpeHR1cmVu
YW1lc19jbG9zdXJlLmFwcGVuZChhcmcpCisgICAgICAgIG1lcmdlKGZpeHR1cmVuYW1lcykKKyAg
ICAgICAgYXJnMmZpeHR1cmVkZWZzID0ge30KKyAgICAgICAgbGFzdGxlbiA9IC0xCisgICAgICAg
IHdoaWxlIGxhc3RsZW4gIT0gbGVuKGZpeHR1cmVuYW1lc19jbG9zdXJlKToKKyAgICAgICAgICAg
IGxhc3RsZW4gPSBsZW4oZml4dHVyZW5hbWVzX2Nsb3N1cmUpCisgICAgICAgICAgICBmb3IgYXJn
bmFtZSBpbiBmaXh0dXJlbmFtZXNfY2xvc3VyZToKKyAgICAgICAgICAgICAgICBpZiBhcmduYW1l
IGluIGFyZzJmaXh0dXJlZGVmczoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAg
ICAgICAgICAgICBmaXh0dXJlZGVmcyA9IHNlbGYuZ2V0Zml4dHVyZWRlZnMoYXJnbmFtZSwgcGFy
ZW50aWQpCisgICAgICAgICAgICAgICAgaWYgZml4dHVyZWRlZnM6CisgICAgICAgICAgICAgICAg
ICAgIGFyZzJmaXh0dXJlZGVmc1thcmduYW1lXSA9IGZpeHR1cmVkZWZzCisgICAgICAgICAgICAg
ICAgICAgIG1lcmdlKGZpeHR1cmVkZWZzWy0xXS5hcmduYW1lcykKKyAgICAgICAgcmV0dXJuIGZp
eHR1cmVuYW1lc19jbG9zdXJlLCBhcmcyZml4dHVyZWRlZnMKKworICAgIGRlZiBweXRlc3RfZ2Vu
ZXJhdGVfdGVzdHMoc2VsZiwgbWV0YWZ1bmMpOgorICAgICAgICBmb3IgYXJnbmFtZSBpbiBtZXRh
ZnVuYy5maXh0dXJlbmFtZXM6CisgICAgICAgICAgICBmYWNsaXN0ID0gbWV0YWZ1bmMuX2FyZzJm
aXh0dXJlZGVmcy5nZXQoYXJnbmFtZSkKKyAgICAgICAgICAgIGlmIGZhY2xpc3Q6CisgICAgICAg
ICAgICAgICAgZml4dHVyZWRlZiA9IGZhY2xpc3RbLTFdCisgICAgICAgICAgICAgICAgaWYgZml4
dHVyZWRlZi5wYXJhbXMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGZ1bmNfcGFy
YW1zID0gZ2V0YXR0cihnZXRhdHRyKG1ldGFmdW5jLmZ1bmN0aW9uLCAncGFyYW1ldHJpemUnLCBO
b25lKSwgJ2FyZ3MnLCBbW05vbmVdXSkKKyAgICAgICAgICAgICAgICAgICAgIyBza2lwIGRpcmVj
dGx5IHBhcmFtZXRyaXplZCBhcmd1bWVudHMKKyAgICAgICAgICAgICAgICAgICAgYXJnbmFtZXMg
PSBmdW5jX3BhcmFtc1swXQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShh
cmduYW1lcywgKHR1cGxlLCBsaXN0KSk6CisgICAgICAgICAgICAgICAgICAgICAgICBhcmduYW1l
cyA9IFt4LnN0cmlwKCkgZm9yIHggaW4gYXJnbmFtZXMuc3BsaXQoIiwiKSBpZiB4LnN0cmlwKCld
CisgICAgICAgICAgICAgICAgICAgIGlmIGFyZ25hbWUgbm90IGluIGZ1bmNfcGFyYW1zIGFuZCBh
cmduYW1lIG5vdCBpbiBhcmduYW1lczoKKyAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFmdW5j
LnBhcmFtZXRyaXplKGFyZ25hbWUsIGZpeHR1cmVkZWYucGFyYW1zLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kaXJlY3Q9VHJ1ZSwgc2NvcGU9Zml4dHVy
ZWRlZi5zY29wZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlkcz1maXh0dXJlZGVmLmlkcykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAg
Y29udGludWUgIyB3aWxsIHJhaXNlIEZpeHR1cmVMb29rdXBFcnJvciBhdCBzZXR1cCB0aW1lCisK
KyAgICBkZWYgcHl0ZXN0X2NvbGxlY3Rpb25fbW9kaWZ5aXRlbXMoc2VsZiwgaXRlbXMpOgorICAg
ICAgICAjIHNlcGFyYXRlIHBhcmFtZXRyaXplZCBzZXR1cHMKKyAgICAgICAgaXRlbXNbOl0gPSBy
ZW9yZGVyX2l0ZW1zKGl0ZW1zKQorCisgICAgZGVmIHBhcnNlZmFjdG9yaWVzKHNlbGYsIG5vZGVf
b3Jfb2JqLCBub2RlaWQ9Tk9UU0VULCB1bml0dGVzdD1GYWxzZSk6CisgICAgICAgIGlmIG5vZGVp
ZCBpcyBub3QgTk9UU0VUOgorICAgICAgICAgICAgaG9sZGVyb2JqID0gbm9kZV9vcl9vYmoKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIGhvbGRlcm9iaiA9IG5vZGVfb3Jfb2JqLm9iagorICAg
ICAgICAgICAgbm9kZWlkID0gbm9kZV9vcl9vYmoubm9kZWlkCisgICAgICAgIGlmIGhvbGRlcm9i
aiBpbiBzZWxmLl9ob2xkZXJvYmpzZWVuOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNl
bGYuX2hvbGRlcm9ianNlZW4uYWRkKGhvbGRlcm9iaikKKyAgICAgICAgYXV0b3VzZW5hbWVzID0g
W10KKyAgICAgICAgZm9yIG5hbWUgaW4gZGlyKGhvbGRlcm9iaik6CisgICAgICAgICAgICBvYmog
PSBnZXRhdHRyKGhvbGRlcm9iaiwgbmFtZSwgTm9uZSkKKyAgICAgICAgICAgICMgZml4dHVyZSBm
dW5jdGlvbnMgaGF2ZSBhIHB5dGVzdF9mdW5jYXJnX18gcHJlZml4IChwcmUtMi4zIHN0eWxlKQor
ICAgICAgICAgICAgIyBvciBhcmUgIkBweXRlc3QuZml4dHVyZSIgbWFya2VkCisgICAgICAgICAg
ICBtYXJrZXIgPSBnZXRmaXh0dXJlbWFya2VyKG9iaikKKyAgICAgICAgICAgIGlmIG1hcmtlciBp
cyBOb25lOgorICAgICAgICAgICAgICAgIGlmIG5vdCBuYW1lLnN0YXJ0c3dpdGgoc2VsZi5fYXJn
cHJlZml4KToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBp
ZiBub3QgY2FsbGFibGUob2JqKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAg
ICAgICAgICAgICBtYXJrZXIgPSBkZWZhdWx0ZnVuY2FyZ3ByZWZpeG1hcmtlcgorICAgICAgICAg
ICAgICAgIG5hbWUgPSBuYW1lW2xlbihzZWxmLl9hcmdwcmVmaXgpOl0KKyAgICAgICAgICAgIGVs
aWYgbm90IGlzaW5zdGFuY2UobWFya2VyLCBGaXh0dXJlRnVuY3Rpb25NYXJrZXIpOgorICAgICAg
ICAgICAgICAgICMgbWFnaWMgZ2xvYmFscyAgd2l0aCBfX2dldGF0dHJfXyBtaWdodCBoYXZlIGdv
dCB1cyBhIHdyb25nCisgICAgICAgICAgICAgICAgIyBmaXh0dXJlIGF0dHJpYnV0ZQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGFz
c2VydCBub3QgbmFtZS5zdGFydHN3aXRoKHNlbGYuX2FyZ3ByZWZpeCkKKyAgICAgICAgICAgIGZp
eHR1cmVkZWYgPSBGaXh0dXJlRGVmKHNlbGYsIG5vZGVpZCwgbmFtZSwgb2JqLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyLnNjb3BlLCBtYXJrZXIucGFyYW1zLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWllbGRjdHg9bWFya2VyLnlpZWxk
Y3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3Q9dW5pdHRl
c3QsIGlkcz1tYXJrZXIuaWRzKQorICAgICAgICAgICAgZmFjbGlzdCA9IHNlbGYuX2FyZzJmaXh0
dXJlZGVmcy5zZXRkZWZhdWx0KG5hbWUsIFtdKQorICAgICAgICAgICAgaWYgZml4dHVyZWRlZi5o
YXNfbG9jYXRpb246CisgICAgICAgICAgICAgICAgZmFjbGlzdC5hcHBlbmQoZml4dHVyZWRlZikK
KyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBmaXh0dXJlZGVmcyB3aXRoIG5v
IGxvY2F0aW9uIGFyZSBhdCB0aGUgZnJvbnQKKyAgICAgICAgICAgICAgICAjIHNvIHRoaXMgaW5z
ZXJ0cyB0aGUgY3VycmVudCBmaXh0dXJlZGVmIGFmdGVyIHRoZQorICAgICAgICAgICAgICAgICMg
ZXhpc3RpbmcgZml4dHVyZWRlZnMgZnJvbSBleHRlcm5hbCBwbHVnaW5zIGJ1dAorICAgICAgICAg
ICAgICAgICMgYmVmb3JlIHRoZSBmaXh0dXJlZGVmcyBwcm92aWRlZCBpbiBjb25mdGVzdHMuCisg
ICAgICAgICAgICAgICAgaSA9IGxlbihbZiBmb3IgZiBpbiBmYWNsaXN0IGlmIG5vdCBmLmhhc19s
b2NhdGlvbl0pCisgICAgICAgICAgICAgICAgZmFjbGlzdC5pbnNlcnQoaSwgZml4dHVyZWRlZikK
KyAgICAgICAgICAgIGlmIG1hcmtlci5hdXRvdXNlOgorICAgICAgICAgICAgICAgIGF1dG91c2Vu
YW1lcy5hcHBlbmQobmFtZSkKKyAgICAgICAgaWYgYXV0b3VzZW5hbWVzOgorICAgICAgICAgICAg
c2VsZi5fbm9kZWlkX2FuZF9hdXRvdXNlbmFtZXMuYXBwZW5kKChub2RlaWQgb3IgJycsIGF1dG91
c2VuYW1lcykpCisKKyAgICBkZWYgZ2V0Zml4dHVyZWRlZnMoc2VsZiwgYXJnbmFtZSwgbm9kZWlk
KToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZml4dHVyZWRlZnMgPSBzZWxmLl9hcmcyZml4
dHVyZWRlZnNbYXJnbmFtZV0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAg
cmV0dXJuIE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiB0dXBsZShzZWxm
Ll9tYXRjaGZhY3RvcmllcyhmaXh0dXJlZGVmcywgbm9kZWlkKSkKKworICAgIGRlZiBfbWF0Y2hm
YWN0b3JpZXMoc2VsZiwgZml4dHVyZWRlZnMsIG5vZGVpZCk6CisgICAgICAgIGZvciBmaXh0dXJl
ZGVmIGluIGZpeHR1cmVkZWZzOgorICAgICAgICAgICAgaWYgbm9kZWlkLnN0YXJ0c3dpdGgoZml4
dHVyZWRlZi5iYXNlaWQpOgorICAgICAgICAgICAgICAgIHlpZWxkIGZpeHR1cmVkZWYKKworCitk
ZWYgZmFpbF9maXh0dXJlZnVuYyhmaXh0dXJlZnVuYywgbXNnKToKKyAgICBmcywgbGluZW5vID0g
Z2V0ZnNsaW5lbm8oZml4dHVyZWZ1bmMpCisgICAgbG9jYXRpb24gPSAiJXM6JXMiICUgKGZzLCBs
aW5lbm8rMSkKKyAgICBzb3VyY2UgPSBfcHl0ZXN0Ll9jb2RlLlNvdXJjZShmaXh0dXJlZnVuYykK
KyAgICBweXRlc3QuZmFpbChtc2cgKyAiOlxuXG4iICsgc3RyKHNvdXJjZS5pbmRlbnQoKSkgKyAi
XG4iICsgbG9jYXRpb24sCisgICAgICAgICAgICAgICAgcHl0cmFjZT1GYWxzZSkKKworZGVmIGNh
bGxfZml4dHVyZV9mdW5jKGZpeHR1cmVmdW5jLCByZXF1ZXN0LCBrd2FyZ3MsIHlpZWxkY3R4KToK
KyAgICBpZiB5aWVsZGN0eDoKKyAgICAgICAgaWYgbm90IGlzX2dlbmVyYXRvcihmaXh0dXJlZnVu
Yyk6CisgICAgICAgICAgICBmYWlsX2ZpeHR1cmVmdW5jKGZpeHR1cmVmdW5jLAorICAgICAgICAg
ICAgICAgIG1zZz0ieWllbGRfZml4dHVyZSByZXF1aXJlcyB5aWVsZCBzdGF0ZW1lbnQgaW4gZnVu
Y3Rpb24iKQorICAgICAgICBpdGVyID0gZml4dHVyZWZ1bmMoKiprd2FyZ3MpCisgICAgICAgIG5l
eHQgPSBnZXRhdHRyKGl0ZXIsICJfX25leHRfXyIsIE5vbmUpCisgICAgICAgIGlmIG5leHQgaXMg
Tm9uZToKKyAgICAgICAgICAgIG5leHQgPSBnZXRhdHRyKGl0ZXIsICJuZXh0IikKKyAgICAgICAg
cmVzID0gbmV4dCgpCisgICAgICAgIGRlZiB0ZWFyZG93bigpOgorICAgICAgICAgICAgdHJ5Ogor
ICAgICAgICAgICAgICAgIG5leHQoKQorICAgICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246
CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAg
ICBmYWlsX2ZpeHR1cmVmdW5jKGZpeHR1cmVmdW5jLAorICAgICAgICAgICAgICAgICAgICAieWll
bGRfZml4dHVyZSBmdW5jdGlvbiBoYXMgbW9yZSB0aGFuIG9uZSAneWllbGQnIikKKyAgICAgICAg
cmVxdWVzdC5hZGRmaW5hbGl6ZXIodGVhcmRvd24pCisgICAgZWxzZToKKyAgICAgICAgaWYgaXNf
Z2VuZXJhdG9yKGZpeHR1cmVmdW5jKToKKyAgICAgICAgICAgIGZhaWxfZml4dHVyZWZ1bmMoZml4
dHVyZWZ1bmMsCisgICAgICAgICAgICAgICAgbXNnPSJweXRlc3QuZml4dHVyZSBmdW5jdGlvbnMg
Y2Fubm90IHVzZSBgYHlpZWxkYGAuICIKKyAgICAgICAgICAgICAgICAgICAgIkluc3RlYWQgd3Jp
dGUgYW5kIHJldHVybiBhbiBpbm5lciBmdW5jdGlvbi9nZW5lcmF0b3IgIgorICAgICAgICAgICAg
ICAgICAgICAiYW5kIGxldCB0aGUgY29uc3VtZXIgY2FsbCBhbmQgaXRlcmF0ZSBvdmVyIGl0LiIp
CisgICAgICAgIHJlcyA9IGZpeHR1cmVmdW5jKCoqa3dhcmdzKQorICAgIHJldHVybiByZXMKKwor
Y2xhc3MgRml4dHVyZURlZjoKKyAgICAiIiIgQSBjb250YWluZXIgZm9yIGEgZmFjdG9yeSBkZWZp
bml0aW9uLiAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZml4dHVyZW1hbmFnZXIsIGJhc2Vp
ZCwgYXJnbmFtZSwgZnVuYywgc2NvcGUsIHBhcmFtcywKKyAgICAgICAgICAgICAgICAgeWllbGRj
dHgsIHVuaXR0ZXN0PUZhbHNlLCBpZHM9Tm9uZSk6CisgICAgICAgIHNlbGYuX2ZpeHR1cmVtYW5h
Z2VyID0gZml4dHVyZW1hbmFnZXIKKyAgICAgICAgc2VsZi5iYXNlaWQgPSBiYXNlaWQgb3IgJycK
KyAgICAgICAgc2VsZi5oYXNfbG9jYXRpb24gPSBiYXNlaWQgaXMgbm90IE5vbmUKKyAgICAgICAg
c2VsZi5mdW5jID0gZnVuYworICAgICAgICBzZWxmLmFyZ25hbWUgPSBhcmduYW1lCisgICAgICAg
IHNlbGYuc2NvcGUgPSBzY29wZQorICAgICAgICBzZWxmLnNjb3BlbnVtID0gc2NvcGVzLmluZGV4
KHNjb3BlIG9yICJmdW5jdGlvbiIpCisgICAgICAgIHNlbGYucGFyYW1zID0gcGFyYW1zCisgICAg
ICAgIHN0YXJ0aW5kZXggPSB1bml0dGVzdCBhbmQgMSBvciBOb25lCisgICAgICAgIHNlbGYuYXJn
bmFtZXMgPSBnZXRmdW5jYXJnbmFtZXMoZnVuYywgc3RhcnRpbmRleD1zdGFydGluZGV4KQorICAg
ICAgICBzZWxmLnlpZWxkY3R4ID0geWllbGRjdHgKKyAgICAgICAgc2VsZi51bml0dGVzdCA9IHVu
aXR0ZXN0CisgICAgICAgIHNlbGYuaWRzID0gaWRzCisgICAgICAgIHNlbGYuX2ZpbmFsaXplciA9
IFtdCisKKyAgICBkZWYgYWRkZmluYWxpemVyKHNlbGYsIGZpbmFsaXplcik6CisgICAgICAgIHNl
bGYuX2ZpbmFsaXplci5hcHBlbmQoZmluYWxpemVyKQorCisgICAgZGVmIGZpbmlzaChzZWxmKToK
KyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2hpbGUgc2VsZi5fZmluYWxpemVyOgorICAgICAg
ICAgICAgICAgIGZ1bmMgPSBzZWxmLl9maW5hbGl6ZXIucG9wKCkKKyAgICAgICAgICAgICAgICBm
dW5jKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICMgZXZlbiBpZiBmaW5hbGl6YXRp
b24gZmFpbHMsIHdlIGludmFsaWRhdGUKKyAgICAgICAgICAgICMgdGhlIGNhY2hlZCBmaXh0dXJl
IHZhbHVlCisgICAgICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICJjYWNoZWRfcmVzdWx0Iik6Cisg
ICAgICAgICAgICAgICAgZGVsIHNlbGYuY2FjaGVkX3Jlc3VsdAorCisgICAgZGVmIGV4ZWN1dGUo
c2VsZiwgcmVxdWVzdCk6CisgICAgICAgICMgZ2V0IHJlcXVpcmVkIGFyZ3VtZW50cyBhbmQgcmVn
aXN0ZXIgb3VyIG93biBmaW5pc2goKQorICAgICAgICAjIHdpdGggdGhlaXIgZmluYWxpemF0aW9u
CisgICAgICAgIGt3YXJncyA9IHt9CisgICAgICAgIGZvciBhcmduYW1lIGluIHNlbGYuYXJnbmFt
ZXM6CisgICAgICAgICAgICBmaXh0dXJlZGVmID0gcmVxdWVzdC5fZ2V0X2FjdGl2ZV9maXh0dXJl
ZGVmKGFyZ25hbWUpCisgICAgICAgICAgICByZXN1bHQsIGFyZ19jYWNoZV9rZXksIGV4YyA9IGZp
eHR1cmVkZWYuY2FjaGVkX3Jlc3VsdAorICAgICAgICAgICAgcmVxdWVzdC5fY2hlY2tfc2NvcGUo
YXJnbmFtZSwgcmVxdWVzdC5zY29wZSwgZml4dHVyZWRlZi5zY29wZSkKKyAgICAgICAgICAgIGt3
YXJnc1thcmduYW1lXSA9IHJlc3VsdAorICAgICAgICAgICAgaWYgYXJnbmFtZSAhPSAicmVxdWVz
dCI6CisgICAgICAgICAgICAgICAgZml4dHVyZWRlZi5hZGRmaW5hbGl6ZXIoc2VsZi5maW5pc2gp
CisKKyAgICAgICAgbXlfY2FjaGVfa2V5ID0gcmVxdWVzdC5wYXJhbV9pbmRleAorICAgICAgICBj
YWNoZWRfcmVzdWx0ID0gZ2V0YXR0cihzZWxmLCAiY2FjaGVkX3Jlc3VsdCIsIE5vbmUpCisgICAg
ICAgIGlmIGNhY2hlZF9yZXN1bHQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXN1bHQsIGNh
Y2hlX2tleSwgZXJyID0gY2FjaGVkX3Jlc3VsdAorICAgICAgICAgICAgaWYgbXlfY2FjaGVfa2V5
ID09IGNhY2hlX2tleToKKyAgICAgICAgICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6CisgICAg
ICAgICAgICAgICAgICAgIHB5LmJ1aWx0aW4uX3JlcmFpc2UoKmVycikKKyAgICAgICAgICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisgICAgICAgICAgICAj
IHdlIGhhdmUgYSBwcmV2aW91cyBidXQgZGlmZmVyZW50bHkgcGFyYW1ldHJpemVkIGZpeHR1cmUg
aW5zdGFuY2UKKyAgICAgICAgICAgICMgc28gd2UgbmVlZCB0byB0ZWFyIGl0IGRvd24gYmVmb3Jl
IGNyZWF0aW5nIGEgbmV3IG9uZQorICAgICAgICAgICAgc2VsZi5maW5pc2goKQorICAgICAgICAg
ICAgYXNzZXJ0IG5vdCBoYXNhdHRyKHNlbGYsICJjYWNoZWRfcmVzdWx0IikKKworICAgICAgICBm
aXh0dXJlZnVuYyA9IHNlbGYuZnVuYworCisgICAgICAgIGlmIHNlbGYudW5pdHRlc3Q6CisgICAg
ICAgICAgICBpZiByZXF1ZXN0Lmluc3RhbmNlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAg
ICMgYmluZCB0aGUgdW5ib3VuZCBtZXRob2QgdG8gdGhlIFRlc3RDYXNlIGluc3RhbmNlCisgICAg
ICAgICAgICAgICAgZml4dHVyZWZ1bmMgPSBzZWxmLmZ1bmMuX19nZXRfXyhyZXF1ZXN0Lmluc3Rh
bmNlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyB0aGUgZml4dHVyZSBmdW5jdGlvbiBu
ZWVkcyB0byBiZSBib3VuZCB0byB0aGUgYWN0dWFsCisgICAgICAgICAgICAjIHJlcXVlc3QuaW5z
dGFuY2Ugc28gdGhhdCBjb2RlIHdvcmtpbmcgd2l0aCAic2VsZiIgYmVoYXZlcworICAgICAgICAg
ICAgIyBhcyBleHBlY3RlZC4KKyAgICAgICAgICAgIGlmIHJlcXVlc3QuaW5zdGFuY2UgaXMgbm90
IE5vbmU6CisgICAgICAgICAgICAgICAgZml4dHVyZWZ1bmMgPSBnZXRpbWZ1bmMoc2VsZi5mdW5j
KQorICAgICAgICAgICAgICAgIGlmIGZpeHR1cmVmdW5jICE9IHNlbGYuZnVuYzoKKyAgICAgICAg
ICAgICAgICAgICAgZml4dHVyZWZ1bmMgPSBmaXh0dXJlZnVuYy5fX2dldF9fKHJlcXVlc3QuaW5z
dGFuY2UpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzdWx0ID0gY2FsbF9maXh0dXJl
X2Z1bmMoZml4dHVyZWZ1bmMsIHJlcXVlc3QsIGt3YXJncywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNlbGYueWllbGRjdHgpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRp
b246CisgICAgICAgICAgICBzZWxmLmNhY2hlZF9yZXN1bHQgPSAoTm9uZSwgbXlfY2FjaGVfa2V5
LCBzeXMuZXhjX2luZm8oKSkKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHNlbGYuY2FjaGVk
X3Jlc3VsdCA9IChyZXN1bHQsIG15X2NhY2hlX2tleSwgTm9uZSkKKyAgICAgICAgcmV0dXJuIHJl
c3VsdAorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gKCI8Rml4dHVy
ZURlZiBuYW1lPSVyIHNjb3BlPSVyIGJhc2VpZD0lciA+IiAlCisgICAgICAgICAgICAgICAgKHNl
bGYuYXJnbmFtZSwgc2VsZi5zY29wZSwgc2VsZi5iYXNlaWQpKQorCitkZWYgbnVtX21vY2tfcGF0
Y2hfYXJncyhmdW5jdGlvbik6CisgICAgIiIiIHJldHVybiBudW1iZXIgb2YgYXJndW1lbnRzIHVz
ZWQgdXAgYnkgbW9jayBhcmd1bWVudHMgKGlmIGFueSkgIiIiCisgICAgcGF0Y2hpbmdzID0gZ2V0
YXR0cihmdW5jdGlvbiwgInBhdGNoaW5ncyIsIE5vbmUpCisgICAgaWYgbm90IHBhdGNoaW5nczoK
KyAgICAgICAgcmV0dXJuIDAKKyAgICBtb2NrID0gc3lzLm1vZHVsZXMuZ2V0KCJtb2NrIiwgc3lz
Lm1vZHVsZXMuZ2V0KCJ1bml0dGVzdC5tb2NrIiwgTm9uZSkpCisgICAgaWYgbW9jayBpcyBub3Qg
Tm9uZToKKyAgICAgICAgcmV0dXJuIGxlbihbcCBmb3IgcCBpbiBwYXRjaGluZ3MKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIG5vdCBwLmF0dHJpYnV0ZV9uYW1lIGFuZCBwLm5ldyBpcyBtb2Nr
LkRFRkFVTFRdKQorICAgIHJldHVybiBsZW4ocGF0Y2hpbmdzKQorCisKK2RlZiBnZXRmdW5jYXJn
bmFtZXMoZnVuY3Rpb24sIHN0YXJ0aW5kZXg9Tm9uZSk6CisgICAgIyBYWFggbWVyZ2Ugd2l0aCBt
YWluLnB5J3MgdmFybmFtZXMKKyAgICAjYXNzZXJ0IG5vdCBpc2NsYXNzKGZ1bmN0aW9uKQorICAg
IHJlYWxmdW5jdGlvbiA9IGZ1bmN0aW9uCisgICAgd2hpbGUgaGFzYXR0cihyZWFsZnVuY3Rpb24s
ICJfX3dyYXBwZWRfXyIpOgorICAgICAgICByZWFsZnVuY3Rpb24gPSByZWFsZnVuY3Rpb24uX193
cmFwcGVkX18KKyAgICBpZiBzdGFydGluZGV4IGlzIE5vbmU6CisgICAgICAgIHN0YXJ0aW5kZXgg
PSBpbnNwZWN0LmlzbWV0aG9kKGZ1bmN0aW9uKSBhbmQgMSBvciAwCisgICAgaWYgcmVhbGZ1bmN0
aW9uICE9IGZ1bmN0aW9uOgorICAgICAgICBzdGFydGluZGV4ICs9IG51bV9tb2NrX3BhdGNoX2Fy
Z3MoZnVuY3Rpb24pCisgICAgICAgIGZ1bmN0aW9uID0gcmVhbGZ1bmN0aW9uCisgICAgaWYgaXNp
bnN0YW5jZShmdW5jdGlvbiwgZnVuY3Rvb2xzLnBhcnRpYWwpOgorICAgICAgICBhcmduYW1lcyA9
IGluc3BlY3QuZ2V0YXJncyhfcHl0ZXN0Ll9jb2RlLmdldHJhd2NvZGUoZnVuY3Rpb24uZnVuYykp
WzBdCisgICAgICAgIHBhcnRpYWwgPSBmdW5jdGlvbgorICAgICAgICBhcmduYW1lcyA9IGFyZ25h
bWVzW2xlbihwYXJ0aWFsLmFyZ3MpOl0KKyAgICAgICAgaWYgcGFydGlhbC5rZXl3b3JkczoKKyAg
ICAgICAgICAgIGZvciBrdyBpbiBwYXJ0aWFsLmtleXdvcmRzOgorICAgICAgICAgICAgICAgIGFy
Z25hbWVzLnJlbW92ZShrdykKKyAgICBlbHNlOgorICAgICAgICBhcmduYW1lcyA9IGluc3BlY3Qu
Z2V0YXJncyhfcHl0ZXN0Ll9jb2RlLmdldHJhd2NvZGUoZnVuY3Rpb24pKVswXQorICAgIGRlZmF1
bHRzID0gZ2V0YXR0cihmdW5jdGlvbiwgJ2Z1bmNfZGVmYXVsdHMnLAorICAgICAgICAgICAgICAg
ICAgICAgICBnZXRhdHRyKGZ1bmN0aW9uLCAnX19kZWZhdWx0c19fJywgTm9uZSkpIG9yICgpCisg
ICAgbnVtZGVmYXVsdHMgPSBsZW4oZGVmYXVsdHMpCisgICAgaWYgbnVtZGVmYXVsdHM6CisgICAg
ICAgIHJldHVybiB0dXBsZShhcmduYW1lc1tzdGFydGluZGV4Oi1udW1kZWZhdWx0c10pCisgICAg
cmV0dXJuIHR1cGxlKGFyZ25hbWVzW3N0YXJ0aW5kZXg6XSkKKworIyBhbGdvcml0aG0gZm9yIHNv
cnRpbmcgb24gYSBwZXItcGFyYW1ldHJpemVkIHJlc291cmNlIHNldHVwIGJhc2lzCisjIGl0IGlz
IGNhbGxlZCBmb3Igc2NvcGVudW09PTAgKHNlc3Npb24pIGZpcnN0IGFuZCBwZXJmb3JtcyBzb3J0
aW5nCisjIGRvd24gdG8gdGhlIGxvd2VyIHNjb3BlcyBzdWNoIGFzIHRvIG1pbmltaXplIG51bWJl
ciBvZiAiaGlnaCBzY29wZSIKKyMgc2V0dXBzIGFuZCB0ZWFyZG93bnMKKworZGVmIHJlb3JkZXJf
aXRlbXMoaXRlbXMpOgorICAgIGFyZ2tleXNfY2FjaGUgPSB7fQorICAgIGZvciBzY29wZW51bSBp
biByYW5nZSgwLCBzY29wZW51bV9mdW5jdGlvbik6CisgICAgICAgIGFyZ2tleXNfY2FjaGVbc2Nv
cGVudW1dID0gZCA9IHt9CisgICAgICAgIGZvciBpdGVtIGluIGl0ZW1zOgorICAgICAgICAgICAg
a2V5cyA9IHNldChnZXRfcGFyYW1ldHJpemVkX2ZpeHR1cmVfa2V5cyhpdGVtLCBzY29wZW51bSkp
CisgICAgICAgICAgICBpZiBrZXlzOgorICAgICAgICAgICAgICAgIGRbaXRlbV0gPSBrZXlzCisg
ICAgcmV0dXJuIHJlb3JkZXJfaXRlbXNfYXRzY29wZShpdGVtcywgc2V0KCksIGFyZ2tleXNfY2Fj
aGUsIDApCisKK2RlZiByZW9yZGVyX2l0ZW1zX2F0c2NvcGUoaXRlbXMsIGlnbm9yZSwgYXJna2V5
c19jYWNoZSwgc2NvcGVudW0pOgorICAgIGlmIHNjb3BlbnVtID49IHNjb3BlbnVtX2Z1bmN0aW9u
IG9yIGxlbihpdGVtcykgPCAzOgorICAgICAgICByZXR1cm4gaXRlbXMKKyAgICBpdGVtc19kb25l
ID0gW10KKyAgICB3aGlsZSAxOgorICAgICAgICBpdGVtc19iZWZvcmUsIGl0ZW1zX3NhbWUsIGl0
ZW1zX290aGVyLCBuZXdpZ25vcmUgPSBcCisgICAgICAgICAgICAgICAgc2xpY2VfaXRlbXMoaXRl
bXMsIGlnbm9yZSwgYXJna2V5c19jYWNoZVtzY29wZW51bV0pCisgICAgICAgIGl0ZW1zX2JlZm9y
ZSA9IHJlb3JkZXJfaXRlbXNfYXRzY29wZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
dGVtc19iZWZvcmUsIGlnbm9yZSwgYXJna2V5c19jYWNoZSxzY29wZW51bSsxKQorICAgICAgICBp
ZiBpdGVtc19zYW1lIGlzIE5vbmU6CisgICAgICAgICAgICAjIG5vdGhpbmcgdG8gcmVvcmRlciBp
biB0aGlzIHNjb3BlCisgICAgICAgICAgICBhc3NlcnQgaXRlbXNfb3RoZXIgaXMgTm9uZQorICAg
ICAgICAgICAgcmV0dXJuIGl0ZW1zX2RvbmUgKyBpdGVtc19iZWZvcmUKKyAgICAgICAgaXRlbXNf
ZG9uZS5leHRlbmQoaXRlbXNfYmVmb3JlKQorICAgICAgICBpdGVtcyA9IGl0ZW1zX3NhbWUgKyBp
dGVtc19vdGhlcgorICAgICAgICBpZ25vcmUgPSBuZXdpZ25vcmUKKworCitkZWYgc2xpY2VfaXRl
bXMoaXRlbXMsIGlnbm9yZSwgc2NvcGVkX2FyZ2tleXNfY2FjaGUpOgorICAgICMgd2UgcGljayB0
aGUgZmlyc3QgaXRlbSB3aGljaCB1c2VzIGEgZml4dHVyZSBpbnN0YW5jZSBpbiB0aGUKKyAgICAj
IHJlcXVlc3RlZCBzY29wZSBhbmQgd2hpY2ggd2UgaGF2ZW4ndCBzZWVuIHlldC4gIFdlIHNsaWNl
IHRoZSBpbnB1dAorICAgICMgaXRlbXMgbGlzdCBpbnRvIGEgbGlzdCBvZiBpdGVtc19ub21hdGNo
LCBpdGVtc19zYW1lIGFuZAorICAgICMgaXRlbXNfb3RoZXIKKyAgICBpZiBzY29wZWRfYXJna2V5
c19jYWNoZTogICMgZG8gd2UgbmVlZCB0byBkbyB3b3JrIGF0IGFsbD8KKyAgICAgICAgaXQgPSBp
dGVyKGl0ZW1zKQorICAgICAgICAjIGZpcnN0IGZpbmQgYSBzbGljaW5nIGtleQorICAgICAgICBm
b3IgaSwgaXRlbSBpbiBlbnVtZXJhdGUoaXQpOgorICAgICAgICAgICAgYXJna2V5cyA9IHNjb3Bl
ZF9hcmdrZXlzX2NhY2hlLmdldChpdGVtKQorICAgICAgICAgICAgaWYgYXJna2V5cyBpcyBub3Qg
Tm9uZToKKyAgICAgICAgICAgICAgICBhcmdrZXlzID0gYXJna2V5cy5kaWZmZXJlbmNlKGlnbm9y
ZSkKKyAgICAgICAgICAgICAgICBpZiBhcmdrZXlzOiAgIyBmb3VuZCBhIHNsaWNpbmcga2V5Cisg
ICAgICAgICAgICAgICAgICAgIHNsaWNpbmdfYXJna2V5ID0gYXJna2V5cy5wb3AoKQorICAgICAg
ICAgICAgICAgICAgICBpdGVtc19iZWZvcmUgPSBpdGVtc1s6aV0KKyAgICAgICAgICAgICAgICAg
ICAgaXRlbXNfc2FtZSA9IFtpdGVtXQorICAgICAgICAgICAgICAgICAgICBpdGVtc19vdGhlciA9
IFtdCisgICAgICAgICAgICAgICAgICAgICMgbm93IHNsaWNlIHRoZSByZW1haW5kZXIgb2YgdGhl
IGxpc3QKKyAgICAgICAgICAgICAgICAgICAgZm9yIGl0ZW0gaW4gaXQ6CisgICAgICAgICAgICAg
ICAgICAgICAgICBhcmdrZXlzID0gc2NvcGVkX2FyZ2tleXNfY2FjaGUuZ2V0KGl0ZW0pCisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiBhcmdrZXlzIGFuZCBzbGljaW5nX2FyZ2tleSBpbiBhcmdr
ZXlzIGFuZCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xpY2luZ19hcmdrZXkgbm90
IGluIGlnbm9yZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtc19zYW1lLmFwcGVu
ZChpdGVtKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpdGVtc19vdGhlci5hcHBlbmQoaXRlbSkKKyAgICAgICAgICAgICAgICAgICAg
bmV3aWdub3JlID0gaWdub3JlLmNvcHkoKQorICAgICAgICAgICAgICAgICAgICBuZXdpZ25vcmUu
YWRkKHNsaWNpbmdfYXJna2V5KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGl0ZW1zX2Jl
Zm9yZSwgaXRlbXNfc2FtZSwgaXRlbXNfb3RoZXIsIG5ld2lnbm9yZSkKKyAgICByZXR1cm4gaXRl
bXMsIE5vbmUsIE5vbmUsIE5vbmUKKworZGVmIGdldF9wYXJhbWV0cml6ZWRfZml4dHVyZV9rZXlz
KGl0ZW0sIHNjb3BlbnVtKToKKyAgICAiIiIgcmV0dXJuIGxpc3Qgb2Yga2V5cyBmb3IgYWxsIHBh
cmFtZXRyaXplZCBhcmd1bWVudHMgd2hpY2ggbWF0Y2gKKyAgICB0aGUgc3BlY2lmaWVkIHNjb3Bl
LiAiIiIKKyAgICBhc3NlcnQgc2NvcGVudW0gPCBzY29wZW51bV9mdW5jdGlvbiAgIyBmdW5jdGlv
bgorICAgIHRyeToKKyAgICAgICAgY3MgPSBpdGVtLmNhbGxzcGVjCisgICAgZXhjZXB0IEF0dHJp
YnV0ZUVycm9yOgorICAgICAgICBwYXNzCisgICAgZWxzZToKKyAgICAgICAgIyBjcy5pbmRpY3Rl
cy5pdGVtcygpIGlzIHJhbmRvbSBvcmRlciBvZiBhcmduYW1lcyBidXQKKyAgICAgICAgIyB0aGVu
IGFnYWluIGRpZmZlcmVudCBmdW5jdGlvbnMgKGl0ZW1zKSBjYW4gY2hhbmdlIG9yZGVyIG9mCisg
ICAgICAgICMgYXJndW1lbnRzIHNvIGl0IGRvZXNuJ3QgbWF0dGVyIG11Y2ggcHJvYmFibHkKKyAg
ICAgICAgZm9yIGFyZ25hbWUsIHBhcmFtX2luZGV4IGluIGNzLmluZGljZXMuaXRlbXMoKToKKyAg
ICAgICAgICAgIGlmIGNzLl9hcmcyc2NvcGVudW1bYXJnbmFtZV0gIT0gc2NvcGVudW06CisgICAg
ICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIHNjb3BlbnVtID09IDA6ICAgICMg
c2Vzc2lvbgorICAgICAgICAgICAgICAgIGtleSA9IChhcmduYW1lLCBwYXJhbV9pbmRleCkKKyAg
ICAgICAgICAgIGVsaWYgc2NvcGVudW0gPT0gMTogICMgbW9kdWxlCisgICAgICAgICAgICAgICAg
a2V5ID0gKGFyZ25hbWUsIHBhcmFtX2luZGV4LCBpdGVtLmZzcGF0aCkKKyAgICAgICAgICAgIGVs
aWYgc2NvcGVudW0gPT0gMjogICMgY2xhc3MKKyAgICAgICAgICAgICAgICBrZXkgPSAoYXJnbmFt
ZSwgcGFyYW1faW5kZXgsIGl0ZW0uZnNwYXRoLCBpdGVtLmNscykKKyAgICAgICAgICAgIHlpZWxk
IGtleQorCisKK2RlZiB4dW5pdHNldHVwKG9iaiwgbmFtZSk6CisgICAgbWV0aCA9IGdldGF0dHIo
b2JqLCBuYW1lLCBOb25lKQorICAgIGlmIGdldGZpeHR1cmVtYXJrZXIobWV0aCkgaXMgTm9uZToK
KyAgICAgICAgcmV0dXJuIG1ldGgKKworZGVmIGdldGZpeHR1cmVtYXJrZXIob2JqKToKKyAgICAi
IiIgcmV0dXJuIGZpeHR1cmVtYXJrZXIgb3IgTm9uZSBpZiBpdCBkb2Vzbid0IGV4aXN0IG9yIHJh
aXNlZAorICAgIGV4Y2VwdGlvbnMuIiIiCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gZ2V0YXR0
cihvYmosICJfcHl0ZXN0Zml4dHVyZWZ1bmN0aW9uIiwgTm9uZSkKKyAgICBleGNlcHQgS2V5Ym9h
cmRJbnRlcnJ1cHQ6CisgICAgICAgIHJhaXNlCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAg
ICAgIyBzb21lIG9iamVjdHMgcmFpc2UgZXJyb3JzIGxpa2UgcmVxdWVzdCAoZnJvbSBmbGFzayBp
bXBvcnQgcmVxdWVzdCkKKyAgICAgICAgIyB3ZSBkb24ndCBleHBlY3QgdGhlbSB0byBiZSBmaXh0
dXJlIGZ1bmN0aW9ucworICAgICAgICByZXR1cm4gTm9uZQorCitzY29wZW5hbWUyY2xhc3MgPSB7
CisgICAgJ2NsYXNzJzogQ2xhc3MsCisgICAgJ21vZHVsZSc6IE1vZHVsZSwKKyAgICAnZnVuY3Rp
b24nOiBweXRlc3QuSXRlbSwKK30KK2RlZiBnZXRfc2NvcGVfbm9kZShub2RlLCBzY29wZSk6Cisg
ICAgY2xzID0gc2NvcGVuYW1lMmNsYXNzLmdldChzY29wZSkKKyAgICBpZiBjbHMgaXMgTm9uZToK
KyAgICAgICAgaWYgc2NvcGUgPT0gInNlc3Npb24iOgorICAgICAgICAgICAgcmV0dXJuIG5vZGUu
c2Vzc2lvbgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bmtub3duIHNjb3BlIikKKyAgICBy
ZXR1cm4gbm9kZS5nZXRwYXJlbnQoY2xzKQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1w
b3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L3JlY3dhcm4ucHkgYi9XZWJEcml2ZXJUZXN0
cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvcmVjd2Fybi5weQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYTg5NDc0YzAzNmEKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvcmVj
d2Fybi5weQpAQCAtMCwwICsxLDIyMSBAQAorIiIiIHJlY29yZGluZyB3YXJuaW5ncyBkdXJpbmcg
dGVzdCBmdW5jdGlvbiBleGVjdXRpb24uICIiIgorCitpbXBvcnQgaW5zcGVjdAorCitpbXBvcnQg
X3B5dGVzdC5fY29kZQoraW1wb3J0IHB5CitpbXBvcnQgc3lzCitpbXBvcnQgd2FybmluZ3MKK2lt
cG9ydCBweXRlc3QKKworCitAcHl0ZXN0LnlpZWxkX2ZpeHR1cmUKK2RlZiByZWN3YXJuKHJlcXVl
c3QpOgorICAgICIiIlJldHVybiBhIFdhcm5pbmdzUmVjb3JkZXIgaW5zdGFuY2UgdGhhdCBwcm92
aWRlcyB0aGVzZSBtZXRob2RzOgorCisgICAgKiBgYHBvcChjYXRlZ29yeT1Ob25lKWBgOiByZXR1
cm4gbGFzdCB3YXJuaW5nIG1hdGNoaW5nIHRoZSBjYXRlZ29yeS4KKyAgICAqIGBgY2xlYXIoKWBg
OiBjbGVhciBsaXN0IG9mIHdhcm5pbmdzCisKKyAgICBTZWUgaHR0cDovL2RvY3MucHl0aG9uLm9y
Zy9saWJyYXJ5L3dhcm5pbmdzLmh0bWwgZm9yIGluZm9ybWF0aW9uCisgICAgb24gd2FybmluZyBj
YXRlZ29yaWVzLgorICAgICIiIgorICAgIHdyZWMgPSBXYXJuaW5nc1JlY29yZGVyKCkKKyAgICB3
aXRoIHdyZWM6CisgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignZGVmYXVsdCcpCisgICAg
ICAgIHlpZWxkIHdyZWMKKworCitkZWYgcHl0ZXN0X25hbWVzcGFjZSgpOgorICAgIHJldHVybiB7
J2RlcHJlY2F0ZWRfY2FsbCc6IGRlcHJlY2F0ZWRfY2FsbCwKKyAgICAgICAgICAgICd3YXJucyc6
IHdhcm5zfQorCisKK2RlZiBkZXByZWNhdGVkX2NhbGwoZnVuYz1Ob25lLCAqYXJncywgKiprd2Fy
Z3MpOgorICAgICIiIiBhc3NlcnQgdGhhdCBjYWxsaW5nIGBgZnVuYygqYXJncywgKiprd2FyZ3Mp
YGAgdHJpZ2dlcnMgYQorICAgIGBgRGVwcmVjYXRpb25XYXJuaW5nYGAgb3IgYGBQZW5kaW5nRGVw
cmVjYXRpb25XYXJuaW5nYGAuCisKKyAgICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGFzIGEg
Y29udGV4dCBtYW5hZ2VyOjoKKworICAgICAgICA+Pj4gd2l0aCBkZXByZWNhdGVkX2NhbGwoKToK
KyAgICAgICAgLi4uICAgIG15b2JqZWN0LmRlcHJlY2F0ZWRfbWV0aG9kKCkKKworICAgIE5vdGU6
IHdlIGNhbm5vdCB1c2UgV2FybmluZ3NSZWNvcmRlciBoZXJlIGJlY2F1c2UgaXQgaXMgc3RpbGwg
c3ViamVjdAorICAgIHRvIHRoZSBtZWNoYW5pc20gdGhhdCBwcmV2ZW50cyB3YXJuaW5ncyBvZiB0
aGUgc2FtZSB0eXBlIGZyb20gYmVpbmcKKyAgICB0cmlnZ2VyZWQgdHdpY2UgZm9yIHRoZSBzYW1l
IG1vZHVsZS4gU2VlICMxMTkwLgorICAgICIiIgorICAgIGlmIG5vdCBmdW5jOgorICAgICAgICBy
ZXR1cm4gV2FybmluZ3NDaGVja2VyKGV4cGVjdGVkX3dhcm5pbmc9RGVwcmVjYXRpb25XYXJuaW5n
KQorCisgICAgY2F0ZWdvcmllcyA9IFtdCisKKyAgICBkZWYgd2Fybl9leHBsaWNpdChtZXNzYWdl
LCBjYXRlZ29yeSwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgY2F0ZWdvcmllcy5hcHBlbmQo
Y2F0ZWdvcnkpCisgICAgICAgIG9sZF93YXJuX2V4cGxpY2l0KG1lc3NhZ2UsIGNhdGVnb3J5LCAq
YXJncywgKiprd2FyZ3MpCisKKyAgICBkZWYgd2FybihtZXNzYWdlLCBjYXRlZ29yeT1Ob25lLCAq
YXJncywgKiprd2FyZ3MpOgorICAgICAgICBpZiBpc2luc3RhbmNlKG1lc3NhZ2UsIFdhcm5pbmcp
OgorICAgICAgICAgICAgY2F0ZWdvcmllcy5hcHBlbmQobWVzc2FnZS5fX2NsYXNzX18pCisgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICBjYXRlZ29yaWVzLmFwcGVuZChjYXRlZ29yeSkKKyAgICAg
ICAgb2xkX3dhcm4obWVzc2FnZSwgY2F0ZWdvcnksICphcmdzLCAqKmt3YXJncykKKworICAgIG9s
ZF93YXJuID0gd2FybmluZ3Mud2FybgorICAgIG9sZF93YXJuX2V4cGxpY2l0ID0gd2FybmluZ3Mu
d2Fybl9leHBsaWNpdAorICAgIHdhcm5pbmdzLndhcm5fZXhwbGljaXQgPSB3YXJuX2V4cGxpY2l0
CisgICAgd2FybmluZ3Mud2FybiA9IHdhcm4KKyAgICB0cnk6CisgICAgICAgIHJldCA9IGZ1bmMo
KmFyZ3MsICoqa3dhcmdzKQorICAgIGZpbmFsbHk6CisgICAgICAgIHdhcm5pbmdzLndhcm5fZXhw
bGljaXQgPSBvbGRfd2Fybl9leHBsaWNpdAorICAgICAgICB3YXJuaW5ncy53YXJuID0gb2xkX3dh
cm4KKyAgICBkZXByZWNhdGlvbl9jYXRlZ29yaWVzID0gKERlcHJlY2F0aW9uV2FybmluZywgUGVu
ZGluZ0RlcHJlY2F0aW9uV2FybmluZykKKyAgICBpZiBub3QgYW55KGlzc3ViY2xhc3MoYywgZGVw
cmVjYXRpb25fY2F0ZWdvcmllcykgZm9yIGMgaW4gY2F0ZWdvcmllcyk6CisgICAgICAgIF9fdHJh
Y2ViYWNraGlkZV9fID0gVHJ1ZQorICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigiJXIgZGlk
IG5vdCBwcm9kdWNlIERlcHJlY2F0aW9uV2FybmluZyIgJSAoZnVuYywpKQorICAgIHJldHVybiBy
ZXQKKworCitkZWYgd2FybnMoZXhwZWN0ZWRfd2FybmluZywgKmFyZ3MsICoqa3dhcmdzKToKKyAg
ICAiIiJBc3NlcnQgdGhhdCBjb2RlIHJhaXNlcyBhIHBhcnRpY3VsYXIgY2xhc3Mgb2Ygd2Fybmlu
Zy4KKworICAgIFNwZWNpZmljYWxseSwgdGhlIGlucHV0IEBleHBlY3RlZF93YXJuaW5nIGNhbiBi
ZSBhIHdhcm5pbmcgY2xhc3Mgb3IKKyAgICB0dXBsZSBvZiB3YXJuaW5nIGNsYXNzZXMsIGFuZCB0
aGUgY29kZSBtdXN0IHJldHVybiB0aGF0IHdhcm5pbmcKKyAgICAoaWYgYSBzaW5nbGUgY2xhc3Mp
IG9yIG9uZSBvZiB0aG9zZSB3YXJuaW5ncyAoaWYgYSB0dXBsZSkuCisKKyAgICBUaGlzIGhlbHBl
ciBwcm9kdWNlcyBhIGxpc3Qgb2YgYGB3YXJuaW5ncy5XYXJuaW5nTWVzc2FnZWBgIG9iamVjdHMs
CisgICAgb25lIGZvciBlYWNoIHdhcm5pbmcgcmFpc2VkLgorCisgICAgVGhpcyBmdW5jdGlvbiBj
YW4gYmUgdXNlZCBhcyBhIGNvbnRleHQgbWFuYWdlciwgb3IgYW55IG9mIHRoZSBvdGhlciB3YXlz
CisgICAgYGBweXRlc3QucmFpc2VzYGAgY2FuIGJlIHVzZWQ6OgorCisgICAgICAgID4+PiB3aXRo
IHdhcm5zKFJ1bnRpbWVXYXJuaW5nKToKKyAgICAgICAgLi4uICAgIHdhcm5pbmdzLndhcm4oIm15
IHdhcm5pbmciLCBSdW50aW1lV2FybmluZykKKyAgICAiIiIKKyAgICB3Y2hlY2sgPSBXYXJuaW5n
c0NoZWNrZXIoZXhwZWN0ZWRfd2FybmluZykKKyAgICBpZiBub3QgYXJnczoKKyAgICAgICAgcmV0
dXJuIHdjaGVjaworICAgIGVsaWYgaXNpbnN0YW5jZShhcmdzWzBdLCBzdHIpOgorICAgICAgICBj
b2RlLCA9IGFyZ3MKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoY29kZSwgc3RyKQorICAgICAg
ICBmcmFtZSA9IHN5cy5fZ2V0ZnJhbWUoMSkKKyAgICAgICAgbG9jID0gZnJhbWUuZl9sb2NhbHMu
Y29weSgpCisgICAgICAgIGxvYy51cGRhdGUoa3dhcmdzKQorCisgICAgICAgIHdpdGggd2NoZWNr
OgorICAgICAgICAgICAgY29kZSA9IF9weXRlc3QuX2NvZGUuU291cmNlKGNvZGUpLmNvbXBpbGUo
KQorICAgICAgICAgICAgcHkuYnVpbHRpbi5leGVjXyhjb2RlLCBmcmFtZS5mX2dsb2JhbHMsIGxv
YykKKyAgICBlbHNlOgorICAgICAgICBmdW5jID0gYXJnc1swXQorICAgICAgICB3aXRoIHdjaGVj
azoKKyAgICAgICAgICAgIHJldHVybiBmdW5jKCphcmdzWzE6XSwgKiprd2FyZ3MpCisKKworY2xh
c3MgUmVjb3JkZWRXYXJuaW5nKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1lc3Nh
Z2UsIGNhdGVnb3J5LCBmaWxlbmFtZSwgbGluZW5vLCBmaWxlLCBsaW5lKToKKyAgICAgICAgc2Vs
Zi5tZXNzYWdlID0gbWVzc2FnZQorICAgICAgICBzZWxmLmNhdGVnb3J5ID0gY2F0ZWdvcnkKKyAg
ICAgICAgc2VsZi5maWxlbmFtZSA9IGZpbGVuYW1lCisgICAgICAgIHNlbGYubGluZW5vID0gbGlu
ZW5vCisgICAgICAgIHNlbGYuZmlsZSA9IGZpbGUKKyAgICAgICAgc2VsZi5saW5lID0gbGluZQor
CisKK2NsYXNzIFdhcm5pbmdzUmVjb3JkZXIob2JqZWN0KToKKyAgICAiIiJBIGNvbnRleHQgbWFu
YWdlciB0byByZWNvcmQgcmFpc2VkIHdhcm5pbmdzLgorCisgICAgQWRhcHRlZCBmcm9tIGB3YXJu
aW5ncy5jYXRjaF93YXJuaW5nc2AuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
bW9kdWxlPU5vbmUpOgorICAgICAgICBzZWxmLl9tb2R1bGUgPSBzeXMubW9kdWxlc1snd2Fybmlu
Z3MnXSBpZiBtb2R1bGUgaXMgTm9uZSBlbHNlIG1vZHVsZQorICAgICAgICBzZWxmLl9lbnRlcmVk
ID0gRmFsc2UKKyAgICAgICAgc2VsZi5fbGlzdCA9IFtdCisKKyAgICBAcHJvcGVydHkKKyAgICBk
ZWYgbGlzdChzZWxmKToKKyAgICAgICAgIiIiVGhlIGxpc3Qgb2YgcmVjb3JkZWQgd2FybmluZ3Mu
IiIiCisgICAgICAgIHJldHVybiBzZWxmLl9saXN0CisKKyAgICBkZWYgX19nZXRpdGVtX18oc2Vs
ZiwgaSk6CisgICAgICAgICIiIkdldCBhIHJlY29yZGVkIHdhcm5pbmcgYnkgaW5kZXguIiIiCisg
ICAgICAgIHJldHVybiBzZWxmLl9saXN0W2ldCisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6Cisg
ICAgICAgICIiIkl0ZXJhdGUgdGhyb3VnaCB0aGUgcmVjb3JkZWQgd2FybmluZ3MuIiIiCisgICAg
ICAgIHJldHVybiBpdGVyKHNlbGYuX2xpc3QpCisKKyAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAg
ICAgICAgIiIiVGhlIG51bWJlciBvZiByZWNvcmRlZCB3YXJuaW5ncy4iIiIKKyAgICAgICAgcmV0
dXJuIGxlbihzZWxmLl9saXN0KQorCisgICAgZGVmIHBvcChzZWxmLCBjbHM9V2FybmluZyk6Cisg
ICAgICAgICIiIlBvcCB0aGUgZmlyc3QgcmVjb3JkZWQgd2FybmluZywgcmFpc2UgZXhjZXB0aW9u
IGlmIG5vdCBleGlzdHMuIiIiCisgICAgICAgIGZvciBpLCB3IGluIGVudW1lcmF0ZShzZWxmLl9s
aXN0KToKKyAgICAgICAgICAgIGlmIGlzc3ViY2xhc3Mody5jYXRlZ29yeSwgY2xzKToKKyAgICAg
ICAgICAgICAgICByZXR1cm4gc2VsZi5fbGlzdC5wb3AoaSkKKyAgICAgICAgX190cmFjZWJhY2to
aWRlX18gPSBUcnVlCisgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCIlciBub3QgZm91bmQg
aW4gd2FybmluZyBsaXN0IiAlIGNscykKKworICAgIGRlZiBjbGVhcihzZWxmKToKKyAgICAgICAg
IiIiQ2xlYXIgdGhlIGxpc3Qgb2YgcmVjb3JkZWQgd2FybmluZ3MuIiIiCisgICAgICAgIHNlbGYu
X2xpc3RbOl0gPSBbXQorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgaWYgc2Vs
Zi5fZW50ZXJlZDoKKyAgICAgICAgICAgIF9fdHJhY2ViYWNraGlkZV9fID0gVHJ1ZQorICAgICAg
ICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDYW5ub3QgZW50ZXIgJXIgdHdpY2UiICUgc2VsZikK
KyAgICAgICAgc2VsZi5fZW50ZXJlZCA9IFRydWUKKyAgICAgICAgc2VsZi5fZmlsdGVycyA9IHNl
bGYuX21vZHVsZS5maWx0ZXJzCisgICAgICAgIHNlbGYuX21vZHVsZS5maWx0ZXJzID0gc2VsZi5f
ZmlsdGVyc1s6XQorICAgICAgICBzZWxmLl9zaG93d2FybmluZyA9IHNlbGYuX21vZHVsZS5zaG93
d2FybmluZworCisgICAgICAgIGRlZiBzaG93d2FybmluZyhtZXNzYWdlLCBjYXRlZ29yeSwgZmls
ZW5hbWUsIGxpbmVubywKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU9Tm9uZSwgbGluZT1O
b25lKToKKyAgICAgICAgICAgIHNlbGYuX2xpc3QuYXBwZW5kKFJlY29yZGVkV2FybmluZygKKyAg
ICAgICAgICAgICAgICBtZXNzYWdlLCBjYXRlZ29yeSwgZmlsZW5hbWUsIGxpbmVubywgZmlsZSwg
bGluZSkpCisKKyAgICAgICAgICAgICMgc3RpbGwgcGVyZm9ybSBvbGQgc2hvd3dhcm5pbmcgZnVu
Y3Rpb25hbGl0eQorICAgICAgICAgICAgc2VsZi5fc2hvd3dhcm5pbmcoCisgICAgICAgICAgICAg
ICAgbWVzc2FnZSwgY2F0ZWdvcnksIGZpbGVuYW1lLCBsaW5lbm8sIGZpbGU9ZmlsZSwgbGluZT1s
aW5lKQorCisgICAgICAgIHNlbGYuX21vZHVsZS5zaG93d2FybmluZyA9IHNob3d3YXJuaW5nCisK
KyAgICAgICAgIyBhbGxvdyB0aGUgc2FtZSB3YXJuaW5nIHRvIGJlIHJhaXNlZCBtb3JlIHRoYW4g
b25jZQorCisgICAgICAgIHNlbGYuX21vZHVsZS5zaW1wbGVmaWx0ZXIoJ2Fsd2F5cycpCisgICAg
ICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmV4Y19pbmZvKToKKyAg
ICAgICAgaWYgbm90IHNlbGYuX2VudGVyZWQ6CisgICAgICAgICAgICBfX3RyYWNlYmFja2hpZGVf
XyA9IFRydWUKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiQ2Fubm90IGV4aXQgJXIg
d2l0aG91dCBlbnRlcmluZyBmaXJzdCIgJSBzZWxmKQorICAgICAgICBzZWxmLl9tb2R1bGUuZmls
dGVycyA9IHNlbGYuX2ZpbHRlcnMKKyAgICAgICAgc2VsZi5fbW9kdWxlLnNob3d3YXJuaW5nID0g
c2VsZi5fc2hvd3dhcm5pbmcKKworCitjbGFzcyBXYXJuaW5nc0NoZWNrZXIoV2FybmluZ3NSZWNv
cmRlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4cGVjdGVkX3dhcm5pbmc9Tm9uZSwgbW9k
dWxlPU5vbmUpOgorICAgICAgICBzdXBlcihXYXJuaW5nc0NoZWNrZXIsIHNlbGYpLl9faW5pdF9f
KG1vZHVsZT1tb2R1bGUpCisKKyAgICAgICAgbXNnID0gKCJleGNlcHRpb25zIG11c3QgYmUgb2xk
LXN0eWxlIGNsYXNzZXMgb3IgIgorICAgICAgICAgICAgICAgImRlcml2ZWQgZnJvbSBXYXJuaW5n
LCBub3QgJXMiKQorICAgICAgICBpZiBpc2luc3RhbmNlKGV4cGVjdGVkX3dhcm5pbmcsIHR1cGxl
KToKKyAgICAgICAgICAgIGZvciBleGMgaW4gZXhwZWN0ZWRfd2FybmluZzoKKyAgICAgICAgICAg
ICAgICBpZiBub3QgaW5zcGVjdC5pc2NsYXNzKGV4Yyk6CisgICAgICAgICAgICAgICAgICAgIHJh
aXNlIFR5cGVFcnJvcihtc2cgJSB0eXBlKGV4YykpCisgICAgICAgIGVsaWYgaW5zcGVjdC5pc2Ns
YXNzKGV4cGVjdGVkX3dhcm5pbmcpOgorICAgICAgICAgICAgZXhwZWN0ZWRfd2FybmluZyA9IChl
eHBlY3RlZF93YXJuaW5nLCkKKyAgICAgICAgZWxpZiBleHBlY3RlZF93YXJuaW5nIGlzIG5vdCBO
b25lOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKG1zZyAlIHR5cGUoZXhwZWN0ZWRfd2Fy
bmluZykpCisKKyAgICAgICAgc2VsZi5leHBlY3RlZF93YXJuaW5nID0gZXhwZWN0ZWRfd2Fybmlu
ZworCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICpleGNfaW5mbyk6CisgICAgICAgIHN1cGVyKFdh
cm5pbmdzQ2hlY2tlciwgc2VsZikuX19leGl0X18oKmV4Y19pbmZvKQorCisgICAgICAgICMgb25s
eSBjaGVjayBpZiB3ZSdyZSBub3QgY3VycmVudGx5IGhhbmRsaW5nIGFuIGV4Y2VwdGlvbgorICAg
ICAgICBpZiBhbGwoYSBpcyBOb25lIGZvciBhIGluIGV4Y19pbmZvKToKKyAgICAgICAgICAgIGlm
IHNlbGYuZXhwZWN0ZWRfd2FybmluZyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBpZiBu
b3QgYW55KHIuY2F0ZWdvcnkgaW4gc2VsZi5leHBlY3RlZF93YXJuaW5nIGZvciByIGluIHNlbGYp
OgorICAgICAgICAgICAgICAgICAgICBfX3RyYWNlYmFja2hpZGVfXyA9IFRydWUKKyAgICAgICAg
ICAgICAgICAgICAgcHl0ZXN0LmZhaWwoIkRJRCBOT1QgV0FSTiIpCmRpZmYgLS1naXQgYS9XZWJE
cml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvcmVzdWx0bG9nLnB5
IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L3Jlc3Vs
dGxvZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMzY3MGYwMjE0
YzkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMv
cHl0ZXN0L19weXRlc3QvcmVzdWx0bG9nLnB5CkBAIC0wLDAgKzEsMTA0IEBACisiIiIgbG9nIG1h
Y2hpbmUtcGFyc2VhYmxlIHRlc3Qgc2Vzc2lvbiByZXN1bHQgaW5mb3JtYXRpb24gaW4gYSBwbGFp
bgordGV4dCBmaWxlLgorIiIiCisKK2ltcG9ydCBweQoraW1wb3J0IG9zCisKK2RlZiBweXRlc3Rf
YWRkb3B0aW9uKHBhcnNlcik6CisgICAgZ3JvdXAgPSBwYXJzZXIuZ2V0Z3JvdXAoInRlcm1pbmFs
IHJlcG9ydGluZyIsICJyZXN1bHRsb2cgcGx1Z2luIG9wdGlvbnMiKQorICAgIGdyb3VwLmFkZG9w
dGlvbignLS1yZXN1bHRsb2cnLCAnLS1yZXN1bHQtbG9nJywgYWN0aW9uPSJzdG9yZSIsCisgICAg
ICAgIG1ldGF2YXI9InBhdGgiLCBkZWZhdWx0PU5vbmUsCisgICAgICAgIGhlbHA9InBhdGggZm9y
IG1hY2hpbmUtcmVhZGFibGUgcmVzdWx0IGxvZy4iKQorCitkZWYgcHl0ZXN0X2NvbmZpZ3VyZShj
b25maWcpOgorICAgIHJlc3VsdGxvZyA9IGNvbmZpZy5vcHRpb24ucmVzdWx0bG9nCisgICAgIyBw
cmV2ZW50IG9wZW5pbmcgcmVzdWx0bG9nIG9uIHNsYXZlIG5vZGVzICh4ZGlzdCkKKyAgICBpZiBy
ZXN1bHRsb2cgYW5kIG5vdCBoYXNhdHRyKGNvbmZpZywgJ3NsYXZlaW5wdXQnKToKKyAgICAgICAg
ZGlybmFtZSA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgocmVzdWx0bG9nKSkKKyAg
ICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoZGlybmFtZSk6CisgICAgICAgICAgICBvcy5tYWtl
ZGlycyhkaXJuYW1lKQorICAgICAgICBsb2dmaWxlID0gb3BlbihyZXN1bHRsb2csICd3JywgMSkg
IyBsaW5lIGJ1ZmZlcmVkCisgICAgICAgIGNvbmZpZy5fcmVzdWx0bG9nID0gUmVzdWx0TG9nKGNv
bmZpZywgbG9nZmlsZSkKKyAgICAgICAgY29uZmlnLnBsdWdpbm1hbmFnZXIucmVnaXN0ZXIoY29u
ZmlnLl9yZXN1bHRsb2cpCisKK2RlZiBweXRlc3RfdW5jb25maWd1cmUoY29uZmlnKToKKyAgICBy
ZXN1bHRsb2cgPSBnZXRhdHRyKGNvbmZpZywgJ19yZXN1bHRsb2cnLCBOb25lKQorICAgIGlmIHJl
c3VsdGxvZzoKKyAgICAgICAgcmVzdWx0bG9nLmxvZ2ZpbGUuY2xvc2UoKQorICAgICAgICBkZWwg
Y29uZmlnLl9yZXN1bHRsb2cKKyAgICAgICAgY29uZmlnLnBsdWdpbm1hbmFnZXIudW5yZWdpc3Rl
cihyZXN1bHRsb2cpCisKK2RlZiBnZW5lcmljX3BhdGgoaXRlbSk6CisgICAgY2hhaW4gPSBpdGVt
Lmxpc3RjaGFpbigpCisgICAgZ3BhdGggPSBbY2hhaW5bMF0ubmFtZV0KKyAgICBmc3BhdGggPSBj
aGFpblswXS5mc3BhdGgKKyAgICBmc3BhcnQgPSBGYWxzZQorICAgIGZvciBub2RlIGluIGNoYWlu
WzE6XToKKyAgICAgICAgbmV3ZnNwYXRoID0gbm9kZS5mc3BhdGgKKyAgICAgICAgaWYgbmV3ZnNw
YXRoID09IGZzcGF0aDoKKyAgICAgICAgICAgIGlmIGZzcGFydDoKKyAgICAgICAgICAgICAgICBn
cGF0aC5hcHBlbmQoJzonKQorICAgICAgICAgICAgICAgIGZzcGFydCA9IEZhbHNlCisgICAgICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGdwYXRoLmFwcGVuZCgnLicpCisgICAgICAgIGVs
c2U6CisgICAgICAgICAgICBncGF0aC5hcHBlbmQoJy8nKQorICAgICAgICAgICAgZnNwYXJ0ID0g
VHJ1ZQorICAgICAgICBuYW1lID0gbm9kZS5uYW1lCisgICAgICAgIGlmIG5hbWVbMF0gaW4gJyhb
JzoKKyAgICAgICAgICAgIGdwYXRoLnBvcCgpCisgICAgICAgIGdwYXRoLmFwcGVuZChuYW1lKQor
ICAgICAgICBmc3BhdGggPSBuZXdmc3BhdGgKKyAgICByZXR1cm4gJycuam9pbihncGF0aCkKKwor
Y2xhc3MgUmVzdWx0TG9nKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbmZpZywg
bG9nZmlsZSk6CisgICAgICAgIHNlbGYuY29uZmlnID0gY29uZmlnCisgICAgICAgIHNlbGYubG9n
ZmlsZSA9IGxvZ2ZpbGUgIyBwcmVmZXJhYmx5IGxpbmUgYnVmZmVyZWQKKworICAgIGRlZiB3cml0
ZV9sb2dfZW50cnkoc2VsZiwgdGVzdHBhdGgsIGxldHRlcmNvZGUsIGxvbmdyZXByKToKKyAgICAg
ICAgcHkuYnVpbHRpbi5wcmludF8oIiVzICVzIiAlIChsZXR0ZXJjb2RlLCB0ZXN0cGF0aCksIGZp
bGU9c2VsZi5sb2dmaWxlKQorICAgICAgICBmb3IgbGluZSBpbiBsb25ncmVwci5zcGxpdGxpbmVz
KCk6CisgICAgICAgICAgICBweS5idWlsdGluLnByaW50XygiICVzIiAlIGxpbmUsIGZpbGU9c2Vs
Zi5sb2dmaWxlKQorCisgICAgZGVmIGxvZ19vdXRjb21lKHNlbGYsIHJlcG9ydCwgbGV0dGVyY29k
ZSwgbG9uZ3JlcHIpOgorICAgICAgICB0ZXN0cGF0aCA9IGdldGF0dHIocmVwb3J0LCAnbm9kZWlk
JywgTm9uZSkKKyAgICAgICAgaWYgdGVzdHBhdGggaXMgTm9uZToKKyAgICAgICAgICAgIHRlc3Rw
YXRoID0gcmVwb3J0LmZzcGF0aAorICAgICAgICBzZWxmLndyaXRlX2xvZ19lbnRyeSh0ZXN0cGF0
aCwgbGV0dGVyY29kZSwgbG9uZ3JlcHIpCisKKyAgICBkZWYgcHl0ZXN0X3J1bnRlc3RfbG9ncmVw
b3J0KHNlbGYsIHJlcG9ydCk6CisgICAgICAgIGlmIHJlcG9ydC53aGVuICE9ICJjYWxsIiBhbmQg
cmVwb3J0LnBhc3NlZDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICByZXMgPSBzZWxmLmNv
bmZpZy5ob29rLnB5dGVzdF9yZXBvcnRfdGVzdHN0YXR1cyhyZXBvcnQ9cmVwb3J0KQorICAgICAg
ICBjb2RlID0gcmVzWzFdCisgICAgICAgIGlmIGNvZGUgPT0gJ3gnOgorICAgICAgICAgICAgbG9u
Z3JlcHIgPSBzdHIocmVwb3J0LmxvbmdyZXByKQorICAgICAgICBlbGlmIGNvZGUgPT0gJ1gnOgor
ICAgICAgICAgICAgbG9uZ3JlcHIgPSAnJworICAgICAgICBlbGlmIHJlcG9ydC5wYXNzZWQ6Cisg
ICAgICAgICAgICBsb25ncmVwciA9ICIiCisgICAgICAgIGVsaWYgcmVwb3J0LmZhaWxlZDoKKyAg
ICAgICAgICAgIGxvbmdyZXByID0gc3RyKHJlcG9ydC5sb25ncmVwcikKKyAgICAgICAgZWxpZiBy
ZXBvcnQuc2tpcHBlZDoKKyAgICAgICAgICAgIGxvbmdyZXByID0gc3RyKHJlcG9ydC5sb25ncmVw
clsyXSkKKyAgICAgICAgc2VsZi5sb2dfb3V0Y29tZShyZXBvcnQsIGNvZGUsIGxvbmdyZXByKQor
CisgICAgZGVmIHB5dGVzdF9jb2xsZWN0cmVwb3J0KHNlbGYsIHJlcG9ydCk6CisgICAgICAgIGlm
IG5vdCByZXBvcnQucGFzc2VkOgorICAgICAgICAgICAgaWYgcmVwb3J0LmZhaWxlZDoKKyAgICAg
ICAgICAgICAgICBjb2RlID0gIkYiCisgICAgICAgICAgICAgICAgbG9uZ3JlcHIgPSBzdHIocmVw
b3J0LmxvbmdyZXByKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBhc3NlcnQg
cmVwb3J0LnNraXBwZWQKKyAgICAgICAgICAgICAgICBjb2RlID0gIlMiCisgICAgICAgICAgICAg
ICAgbG9uZ3JlcHIgPSAiJXM6JWQ6ICVzIiAlIHJlcG9ydC5sb25ncmVwcgorICAgICAgICAgICAg
c2VsZi5sb2dfb3V0Y29tZShyZXBvcnQsIGNvZGUsIGxvbmdyZXByKQorCisgICAgZGVmIHB5dGVz
dF9pbnRlcm5hbGVycm9yKHNlbGYsIGV4Y3JlcHIpOgorICAgICAgICByZXByY3Jhc2ggPSBnZXRh
dHRyKGV4Y3JlcHIsICdyZXByY3Jhc2gnLCBOb25lKQorICAgICAgICBwYXRoID0gZ2V0YXR0cihy
ZXByY3Jhc2gsICJwYXRoIiwgTm9uZSkKKyAgICAgICAgaWYgcGF0aCBpcyBOb25lOgorICAgICAg
ICAgICAgcGF0aCA9ICJjd2Q6JXMiICUgcHkucGF0aC5sb2NhbCgpCisgICAgICAgIHNlbGYud3Jp
dGVfbG9nX2VudHJ5KHBhdGgsICchJywgc3RyKGV4Y3JlcHIpKQpkaWZmIC0tZ2l0IGEvV2ViRHJp
dmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L3J1bm5lci5weSBiL1dl
YkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9ydW5uZXIucHkK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmNkZTk0YzhjODllCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9f
cHl0ZXN0L3J1bm5lci5weQpAQCAtMCwwICsxLDUxNSBAQAorIiIiIGJhc2ljIGNvbGxlY3QgYW5k
IHJ1bnRlc3QgcHJvdG9jb2wgaW1wbGVtZW50YXRpb25zICIiIgoraW1wb3J0IGJkYgoraW1wb3J0
IHN5cworZnJvbSB0aW1lIGltcG9ydCB0aW1lCisKK2ltcG9ydCBweQoraW1wb3J0IHB5dGVzdAor
ZnJvbSBfcHl0ZXN0Ll9jb2RlLmNvZGUgaW1wb3J0IFRlcm1pbmFsUmVwciwgRXhjZXB0aW9uSW5m
bworCisKK2RlZiBweXRlc3RfbmFtZXNwYWNlKCk6CisgICAgcmV0dXJuIHsKKyAgICAgICAgJ2Zh
aWwnICAgICAgICAgOiBmYWlsLAorICAgICAgICAnc2tpcCcgICAgICAgICA6IHNraXAsCisgICAg
ICAgICdpbXBvcnRvcnNraXAnIDogaW1wb3J0b3Jza2lwLAorICAgICAgICAnZXhpdCcgICAgICAg
ICA6IGV4aXQsCisgICAgfQorCisjCisjIHB5dGVzdCBwbHVnaW4gaG9va3MKKworZGVmIHB5dGVz
dF9hZGRvcHRpb24ocGFyc2VyKToKKyAgICBncm91cCA9IHBhcnNlci5nZXRncm91cCgidGVybWlu
YWwgcmVwb3J0aW5nIiwgInJlcG9ydGluZyIsIGFmdGVyPSJnZW5lcmFsIikKKyAgICBncm91cC5h
ZGRvcHRpb24oJy0tZHVyYXRpb25zJywKKyAgICAgICAgIGFjdGlvbj0ic3RvcmUiLCB0eXBlPWlu
dCwgZGVmYXVsdD1Ob25lLCBtZXRhdmFyPSJOIiwKKyAgICAgICAgIGhlbHA9InNob3cgTiBzbG93
ZXN0IHNldHVwL3Rlc3QgZHVyYXRpb25zIChOPTAgZm9yIGFsbCkuIiksCisKK2RlZiBweXRlc3Rf
dGVybWluYWxfc3VtbWFyeSh0ZXJtaW5hbHJlcG9ydGVyKToKKyAgICBkdXJhdGlvbnMgPSB0ZXJt
aW5hbHJlcG9ydGVyLmNvbmZpZy5vcHRpb24uZHVyYXRpb25zCisgICAgaWYgZHVyYXRpb25zIGlz
IE5vbmU6CisgICAgICAgIHJldHVybgorICAgIHRyID0gdGVybWluYWxyZXBvcnRlcgorICAgIGRs
aXN0ID0gW10KKyAgICBmb3IgcmVwbGlzdCBpbiB0ci5zdGF0cy52YWx1ZXMoKToKKyAgICAgICAg
Zm9yIHJlcCBpbiByZXBsaXN0OgorICAgICAgICAgICAgaWYgaGFzYXR0cihyZXAsICdkdXJhdGlv
bicpOgorICAgICAgICAgICAgICAgIGRsaXN0LmFwcGVuZChyZXApCisgICAgaWYgbm90IGRsaXN0
OgorICAgICAgICByZXR1cm4KKyAgICBkbGlzdC5zb3J0KGtleT1sYW1iZGEgeDogeC5kdXJhdGlv
bikKKyAgICBkbGlzdC5yZXZlcnNlKCkKKyAgICBpZiBub3QgZHVyYXRpb25zOgorICAgICAgICB0
ci53cml0ZV9zZXAoIj0iLCAic2xvd2VzdCB0ZXN0IGR1cmF0aW9ucyIpCisgICAgZWxzZToKKyAg
ICAgICAgdHIud3JpdGVfc2VwKCI9IiwgInNsb3dlc3QgJXMgdGVzdCBkdXJhdGlvbnMiICUgZHVy
YXRpb25zKQorICAgICAgICBkbGlzdCA9IGRsaXN0WzpkdXJhdGlvbnNdCisKKyAgICBmb3IgcmVw
IGluIGRsaXN0OgorICAgICAgICBub2RlaWQgPSByZXAubm9kZWlkLnJlcGxhY2UoIjo6KCk6OiIs
ICI6OiIpCisgICAgICAgIHRyLndyaXRlX2xpbmUoIiUwMi4yZnMgJS04cyAlcyIgJQorICAgICAg
ICAgICAgKHJlcC5kdXJhdGlvbiwgcmVwLndoZW4sIG5vZGVpZCkpCisKK2RlZiBweXRlc3Rfc2Vz
c2lvbnN0YXJ0KHNlc3Npb24pOgorICAgIHNlc3Npb24uX3NldHVwc3RhdGUgPSBTZXR1cFN0YXRl
KCkKK2RlZiBweXRlc3Rfc2Vzc2lvbmZpbmlzaChzZXNzaW9uKToKKyAgICBzZXNzaW9uLl9zZXR1
cHN0YXRlLnRlYXJkb3duX2FsbCgpCisKK2NsYXNzIE5vZGVJbmZvOgorICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBsb2NhdGlvbik6CisgICAgICAgIHNlbGYubG9jYXRpb24gPSBsb2NhdGlvbgorCitk
ZWYgcHl0ZXN0X3J1bnRlc3RfcHJvdG9jb2woaXRlbSwgbmV4dGl0ZW0pOgorICAgIGl0ZW0uaWhv
b2sucHl0ZXN0X3J1bnRlc3RfbG9nc3RhcnQoCisgICAgICAgIG5vZGVpZD1pdGVtLm5vZGVpZCwg
bG9jYXRpb249aXRlbS5sb2NhdGlvbiwKKyAgICApCisgICAgcnVudGVzdHByb3RvY29sKGl0ZW0s
IG5leHRpdGVtPW5leHRpdGVtKQorICAgIHJldHVybiBUcnVlCisKK2RlZiBydW50ZXN0cHJvdG9j
b2woaXRlbSwgbG9nPVRydWUsIG5leHRpdGVtPU5vbmUpOgorICAgIGhhc3JlcXVlc3QgPSBoYXNh
dHRyKGl0ZW0sICJfcmVxdWVzdCIpCisgICAgaWYgaGFzcmVxdWVzdCBhbmQgbm90IGl0ZW0uX3Jl
cXVlc3Q6CisgICAgICAgIGl0ZW0uX2luaXRyZXF1ZXN0KCkKKyAgICByZXAgPSBjYWxsX2FuZF9y
ZXBvcnQoaXRlbSwgInNldHVwIiwgbG9nKQorICAgIHJlcG9ydHMgPSBbcmVwXQorICAgIGlmIHJl
cC5wYXNzZWQ6CisgICAgICAgIHJlcG9ydHMuYXBwZW5kKGNhbGxfYW5kX3JlcG9ydChpdGVtLCAi
Y2FsbCIsIGxvZykpCisgICAgcmVwb3J0cy5hcHBlbmQoY2FsbF9hbmRfcmVwb3J0KGl0ZW0sICJ0
ZWFyZG93biIsIGxvZywKKyAgICAgICAgbmV4dGl0ZW09bmV4dGl0ZW0pKQorICAgICMgYWZ0ZXIg
YWxsIHRlYXJkb3duIGhvb2tzIGhhdmUgYmVlbiBjYWxsZWQKKyAgICAjIHdhbnQgZnVuY2FyZ3Mg
YW5kIHJlcXVlc3QgaW5mbyB0byBnbyBhd2F5CisgICAgaWYgaGFzcmVxdWVzdDoKKyAgICAgICAg
aXRlbS5fcmVxdWVzdCA9IEZhbHNlCisgICAgICAgIGl0ZW0uZnVuY2FyZ3MgPSBOb25lCisgICAg
cmV0dXJuIHJlcG9ydHMKKworZGVmIHB5dGVzdF9ydW50ZXN0X3NldHVwKGl0ZW0pOgorICAgIGl0
ZW0uc2Vzc2lvbi5fc2V0dXBzdGF0ZS5wcmVwYXJlKGl0ZW0pCisKK2RlZiBweXRlc3RfcnVudGVz
dF9jYWxsKGl0ZW0pOgorICAgIHRyeToKKyAgICAgICAgaXRlbS5ydW50ZXN0KCkKKyAgICBleGNl
cHQgRXhjZXB0aW9uOgorICAgICAgICAjIFN0b3JlIHRyYWNlIGluZm8gdG8gYWxsb3cgcG9zdG1v
cnRlbSBkZWJ1Z2dpbmcKKyAgICAgICAgdHlwZSwgdmFsdWUsIHRiID0gc3lzLmV4Y19pbmZvKCkK
KyAgICAgICAgdGIgPSB0Yi50Yl9uZXh0ICAjIFNraXAgKnRoaXMqIGZyYW1lCisgICAgICAgIHN5
cy5sYXN0X3R5cGUgPSB0eXBlCisgICAgICAgIHN5cy5sYXN0X3ZhbHVlID0gdmFsdWUKKyAgICAg
ICAgc3lzLmxhc3RfdHJhY2ViYWNrID0gdGIKKyAgICAgICAgZGVsIHRiICAjIEdldCByaWQgb2Yg
aXQgaW4gdGhpcyBuYW1lc3BhY2UKKyAgICAgICAgcmFpc2UKKworZGVmIHB5dGVzdF9ydW50ZXN0
X3RlYXJkb3duKGl0ZW0sIG5leHRpdGVtKToKKyAgICBpdGVtLnNlc3Npb24uX3NldHVwc3RhdGUu
dGVhcmRvd25fZXhhY3QoaXRlbSwgbmV4dGl0ZW0pCisKK2RlZiBweXRlc3RfcmVwb3J0X3Rlc3Rz
dGF0dXMocmVwb3J0KToKKyAgICBpZiByZXBvcnQud2hlbiBpbiAoInNldHVwIiwgInRlYXJkb3du
Iik6CisgICAgICAgIGlmIHJlcG9ydC5mYWlsZWQ6CisgICAgICAgICAgICAjICAgICAgY2F0ZWdv
cnksIHNob3J0bGV0dGVyLCB2ZXJib3NlLXdvcmQKKyAgICAgICAgICAgIHJldHVybiAiZXJyb3Ii
LCAiRSIsICJFUlJPUiIKKyAgICAgICAgZWxpZiByZXBvcnQuc2tpcHBlZDoKKyAgICAgICAgICAg
IHJldHVybiAic2tpcHBlZCIsICJzIiwgIlNLSVBQRUQiCisgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICByZXR1cm4gIiIsICIiLCAiIgorCisKKyMKKyMgSW1wbGVtZW50YXRpb24KKworZGVmIGNh
bGxfYW5kX3JlcG9ydChpdGVtLCB3aGVuLCBsb2c9VHJ1ZSwgKiprd2RzKToKKyAgICBjYWxsID0g
Y2FsbF9ydW50ZXN0X2hvb2soaXRlbSwgd2hlbiwgKiprd2RzKQorICAgIGhvb2sgPSBpdGVtLmlo
b29rCisgICAgcmVwb3J0ID0gaG9vay5weXRlc3RfcnVudGVzdF9tYWtlcmVwb3J0KGl0ZW09aXRl
bSwgY2FsbD1jYWxsKQorICAgIGlmIGxvZzoKKyAgICAgICAgaG9vay5weXRlc3RfcnVudGVzdF9s
b2dyZXBvcnQocmVwb3J0PXJlcG9ydCkKKyAgICBpZiBjaGVja19pbnRlcmFjdGl2ZV9leGNlcHRp
b24oY2FsbCwgcmVwb3J0KToKKyAgICAgICAgaG9vay5weXRlc3RfZXhjZXB0aW9uX2ludGVyYWN0
KG5vZGU9aXRlbSwgY2FsbD1jYWxsLCByZXBvcnQ9cmVwb3J0KQorICAgIHJldHVybiByZXBvcnQK
KworZGVmIGNoZWNrX2ludGVyYWN0aXZlX2V4Y2VwdGlvbihjYWxsLCByZXBvcnQpOgorICAgIHJl
dHVybiBjYWxsLmV4Y2luZm8gYW5kIG5vdCAoCisgICAgICAgICAgICAgICAgaGFzYXR0cihyZXBv
cnQsICJ3YXN4ZmFpbCIpIG9yCisgICAgICAgICAgICAgICAgY2FsbC5leGNpbmZvLmVycmlzaW5z
dGFuY2Uoc2tpcC5FeGNlcHRpb24pIG9yCisgICAgICAgICAgICAgICAgY2FsbC5leGNpbmZvLmVy
cmlzaW5zdGFuY2UoYmRiLkJkYlF1aXQpKQorCitkZWYgY2FsbF9ydW50ZXN0X2hvb2soaXRlbSwg
d2hlbiwgKiprd2RzKToKKyAgICBob29rbmFtZSA9ICJweXRlc3RfcnVudGVzdF8iICsgd2hlbgor
ICAgIGlob29rID0gZ2V0YXR0cihpdGVtLmlob29rLCBob29rbmFtZSkKKyAgICByZXR1cm4gQ2Fs
bEluZm8obGFtYmRhOiBpaG9vayhpdGVtPWl0ZW0sICoqa3dkcyksIHdoZW49d2hlbikKKworY2xh
c3MgQ2FsbEluZm86CisgICAgIiIiIFJlc3VsdC9FeGNlcHRpb24gaW5mbyBhIGZ1bmN0aW9uIGlu
dm9jYXRpb24uICIiIgorICAgICM6IE5vbmUgb3IgRXhjZXB0aW9uSW5mbyBvYmplY3QuCisgICAg
ZXhjaW5mbyA9IE5vbmUKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZnVuYywgd2hlbik6CisgICAg
ICAgICM6IGNvbnRleHQgb2YgaW52b2NhdGlvbjogb25lIG9mICJzZXR1cCIsICJjYWxsIiwKKyAg
ICAgICAgIzogInRlYXJkb3duIiwgIm1lbW9jb2xsZWN0IgorICAgICAgICBzZWxmLndoZW4gPSB3
aGVuCisgICAgICAgIHNlbGYuc3RhcnQgPSB0aW1lKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgc2VsZi5yZXN1bHQgPSBmdW5jKCkKKyAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0
OgorICAgICAgICAgICAgc2VsZi5zdG9wID0gdGltZSgpCisgICAgICAgICAgICByYWlzZQorICAg
ICAgICBleGNlcHQ6CisgICAgICAgICAgICBzZWxmLmV4Y2luZm8gPSBFeGNlcHRpb25JbmZvKCkK
KyAgICAgICAgc2VsZi5zdG9wID0gdGltZSgpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6Cisg
ICAgICAgIGlmIHNlbGYuZXhjaW5mbzoKKyAgICAgICAgICAgIHN0YXR1cyA9ICJleGNlcHRpb246
ICVzIiAlIHN0cihzZWxmLmV4Y2luZm8udmFsdWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICBzdGF0dXMgPSAicmVzdWx0OiAlciIgJSAoc2VsZi5yZXN1bHQsKQorICAgICAgICByZXR1cm4g
IjxDYWxsSW5mbyB3aGVuPSVyICVzPiIgJSAoc2VsZi53aGVuLCBzdGF0dXMpCisKK2RlZiBnZXRz
bGF2ZWluZm9saW5lKG5vZGUpOgorICAgIHRyeToKKyAgICAgICAgcmV0dXJuIG5vZGUuX3NsYXZl
aW5mb2NhY2hlCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICBkID0gbm9kZS5z
bGF2ZWluZm8KKyAgICAgICAgdmVyID0gIiVzLiVzLiVzIiAlIGRbJ3ZlcnNpb25faW5mbyddWzoz
XQorICAgICAgICBub2RlLl9zbGF2ZWluZm9jYWNoZSA9IHMgPSAiWyVzXSAlcyAtLSBQeXRob24g
JXMgJXMiICUgKAorICAgICAgICAgICAgZFsnaWQnXSwgZFsnc3lzcGxhdGZvcm0nXSwgdmVyLCBk
WydleGVjdXRhYmxlJ10pCisgICAgICAgIHJldHVybiBzCisKK2NsYXNzIEJhc2VSZXBvcnQob2Jq
ZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqKmt3KToKKyAgICAgICAgc2VsZi5fX2Rp
Y3RfXy51cGRhdGUoa3cpCisKKyAgICBkZWYgdG90ZXJtaW5hbChzZWxmLCBvdXQpOgorICAgICAg
ICBpZiBoYXNhdHRyKHNlbGYsICdub2RlJyk6CisgICAgICAgICAgICBvdXQubGluZShnZXRzbGF2
ZWluZm9saW5lKHNlbGYubm9kZSkpCisKKyAgICAgICAgbG9uZ3JlcHIgPSBzZWxmLmxvbmdyZXBy
CisgICAgICAgIGlmIGxvbmdyZXByIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKworICAg
ICAgICBpZiBoYXNhdHRyKGxvbmdyZXByLCAndG90ZXJtaW5hbCcpOgorICAgICAgICAgICAgbG9u
Z3JlcHIudG90ZXJtaW5hbChvdXQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0cnk6Cisg
ICAgICAgICAgICAgICAgb3V0LmxpbmUobG9uZ3JlcHIpCisgICAgICAgICAgICBleGNlcHQgVW5p
Y29kZUVuY29kZUVycm9yOgorICAgICAgICAgICAgICAgIG91dC5saW5lKCI8dW5wcmludGFibGUg
bG9uZ3JlcHI+IikKKworICAgIGRlZiBnZXRfc2VjdGlvbnMoc2VsZiwgcHJlZml4KToKKyAgICAg
ICAgZm9yIG5hbWUsIGNvbnRlbnQgaW4gc2VsZi5zZWN0aW9uczoKKyAgICAgICAgICAgIGlmIG5h
bWUuc3RhcnRzd2l0aChwcmVmaXgpOgorICAgICAgICAgICAgICAgIHlpZWxkIHByZWZpeCwgY29u
dGVudAorCisgICAgcGFzc2VkID0gcHJvcGVydHkobGFtYmRhIHg6IHgub3V0Y29tZSA9PSAicGFz
c2VkIikKKyAgICBmYWlsZWQgPSBwcm9wZXJ0eShsYW1iZGEgeDogeC5vdXRjb21lID09ICJmYWls
ZWQiKQorICAgIHNraXBwZWQgPSBwcm9wZXJ0eShsYW1iZGEgeDogeC5vdXRjb21lID09ICJza2lw
cGVkIikKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBmc3BhdGgoc2VsZik6CisgICAgICAgIHJl
dHVybiBzZWxmLm5vZGVpZC5zcGxpdCgiOjoiKVswXQorCitkZWYgcHl0ZXN0X3J1bnRlc3RfbWFr
ZXJlcG9ydChpdGVtLCBjYWxsKToKKyAgICB3aGVuID0gY2FsbC53aGVuCisgICAgZHVyYXRpb24g
PSBjYWxsLnN0b3AtY2FsbC5zdGFydAorICAgIGtleXdvcmRzID0gZGljdChbKHgsMSkgZm9yIHgg
aW4gaXRlbS5rZXl3b3Jkc10pCisgICAgZXhjaW5mbyA9IGNhbGwuZXhjaW5mbworICAgIHNlY3Rp
b25zID0gW10KKyAgICBpZiBub3QgY2FsbC5leGNpbmZvOgorICAgICAgICBvdXRjb21lID0gInBh
c3NlZCIKKyAgICAgICAgbG9uZ3JlcHIgPSBOb25lCisgICAgZWxzZToKKyAgICAgICAgaWYgbm90
IGlzaW5zdGFuY2UoZXhjaW5mbywgRXhjZXB0aW9uSW5mbyk6CisgICAgICAgICAgICBvdXRjb21l
ID0gImZhaWxlZCIKKyAgICAgICAgICAgIGxvbmdyZXByID0gZXhjaW5mbworICAgICAgICBlbGlm
IGV4Y2luZm8uZXJyaXNpbnN0YW5jZShweXRlc3Quc2tpcC5FeGNlcHRpb24pOgorICAgICAgICAg
ICAgb3V0Y29tZSA9ICJza2lwcGVkIgorICAgICAgICAgICAgciA9IGV4Y2luZm8uX2dldHJlcHJj
cmFzaCgpCisgICAgICAgICAgICBsb25ncmVwciA9IChzdHIoci5wYXRoKSwgci5saW5lbm8sIHIu
bWVzc2FnZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG91dGNvbWUgPSAiZmFpbGVkIgor
ICAgICAgICAgICAgaWYgY2FsbC53aGVuID09ICJjYWxsIjoKKyAgICAgICAgICAgICAgICBsb25n
cmVwciA9IGl0ZW0ucmVwcl9mYWlsdXJlKGV4Y2luZm8pCisgICAgICAgICAgICBlbHNlOiAjIGV4
Y2VwdGlvbiBpbiBzZXR1cCBvciB0ZWFyZG93bgorICAgICAgICAgICAgICAgIGxvbmdyZXByID0g
aXRlbS5fcmVwcl9mYWlsdXJlX3B5KGV4Y2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0eWxlPWl0ZW0uY29uZmlnLm9wdGlvbi50YnN0eWxlKQorICAg
IGZvciByd2hlbiwga2V5LCBjb250ZW50IGluIGl0ZW0uX3JlcG9ydF9zZWN0aW9uczoKKyAgICAg
ICAgc2VjdGlvbnMuYXBwZW5kKCgiQ2FwdHVyZWQgJXMgJXMiICUoa2V5LCByd2hlbiksIGNvbnRl
bnQpKQorICAgIHJldHVybiBUZXN0UmVwb3J0KGl0ZW0ubm9kZWlkLCBpdGVtLmxvY2F0aW9uLAor
ICAgICAgICAgICAgICAgICAgICAgIGtleXdvcmRzLCBvdXRjb21lLCBsb25ncmVwciwgd2hlbiwK
KyAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9ucywgZHVyYXRpb24pCisKK2NsYXNzIFRlc3RS
ZXBvcnQoQmFzZVJlcG9ydCk6CisgICAgIiIiIEJhc2ljIHRlc3QgcmVwb3J0IG9iamVjdCAoYWxz
byB1c2VkIGZvciBzZXR1cCBhbmQgdGVhcmRvd24gY2FsbHMgaWYKKyAgICB0aGV5IGZhaWwpLgor
ICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBub2RlaWQsIGxvY2F0aW9uLCBrZXl3b3Jk
cywgb3V0Y29tZSwKKyAgICAgICAgICAgICAgICAgbG9uZ3JlcHIsIHdoZW4sIHNlY3Rpb25zPSgp
LCBkdXJhdGlvbj0wLCAqKmV4dHJhKToKKyAgICAgICAgIzogbm9ybWFsaXplZCBjb2xsZWN0aW9u
IG5vZGUgaWQKKyAgICAgICAgc2VsZi5ub2RlaWQgPSBub2RlaWQKKworICAgICAgICAjOiBhIChm
aWxlc3lzdGVtcGF0aCwgbGluZW5vLCBkb21haW5pbmZvKSB0dXBsZSBpbmRpY2F0aW5nIHRoZQor
ICAgICAgICAjOiBhY3R1YWwgbG9jYXRpb24gb2YgYSB0ZXN0IGl0ZW0gLSBpdCBtaWdodCBiZSBk
aWZmZXJlbnQgZnJvbSB0aGUKKyAgICAgICAgIzogY29sbGVjdGVkIG9uZSBlLmcuIGlmIGEgbWV0
aG9kIGlzIGluaGVyaXRlZCBmcm9tIGEgZGlmZmVyZW50IG1vZHVsZS4KKyAgICAgICAgc2VsZi5s
b2NhdGlvbiA9IGxvY2F0aW9uCisKKyAgICAgICAgIzogYSBuYW1lIC0+IHZhbHVlIGRpY3Rpb25h
cnkgY29udGFpbmluZyBhbGwga2V5d29yZHMgYW5kCisgICAgICAgICM6IG1hcmtlcnMgYXNzb2Np
YXRlZCB3aXRoIGEgdGVzdCBpbnZvY2F0aW9uLgorICAgICAgICBzZWxmLmtleXdvcmRzID0ga2V5
d29yZHMKKworICAgICAgICAjOiB0ZXN0IG91dGNvbWUsIGFsd2F5cyBvbmUgb2YgInBhc3NlZCIs
ICJmYWlsZWQiLCAic2tpcHBlZCIuCisgICAgICAgIHNlbGYub3V0Y29tZSA9IG91dGNvbWUKKwor
ICAgICAgICAjOiBOb25lIG9yIGEgZmFpbHVyZSByZXByZXNlbnRhdGlvbi4KKyAgICAgICAgc2Vs
Zi5sb25ncmVwciA9IGxvbmdyZXByCisKKyAgICAgICAgIzogb25lIG9mICdzZXR1cCcsICdjYWxs
JywgJ3RlYXJkb3duJyB0byBpbmRpY2F0ZSBydW50ZXN0IHBoYXNlLgorICAgICAgICBzZWxmLndo
ZW4gPSB3aGVuCisKKyAgICAgICAgIzogbGlzdCBvZiAoc2VjbmFtZSwgZGF0YSkgZXh0cmEgaW5m
b3JtYXRpb24gd2hpY2ggbmVlZHMgdG8KKyAgICAgICAgIzogbWFyc2hhbGxhYmxlCisgICAgICAg
IHNlbGYuc2VjdGlvbnMgPSBsaXN0KHNlY3Rpb25zKQorCisgICAgICAgICM6IHRpbWUgaXQgdG9v
ayB0byBydW4ganVzdCB0aGUgdGVzdAorICAgICAgICBzZWxmLmR1cmF0aW9uID0gZHVyYXRpb24K
KworICAgICAgICBzZWxmLl9fZGljdF9fLnVwZGF0ZShleHRyYSkKKworICAgIGRlZiBfX3JlcHJf
XyhzZWxmKToKKyAgICAgICAgcmV0dXJuICI8VGVzdFJlcG9ydCAlciB3aGVuPSVyIG91dGNvbWU9
JXI+IiAlICgKKyAgICAgICAgICAgIHNlbGYubm9kZWlkLCBzZWxmLndoZW4sIHNlbGYub3V0Y29t
ZSkKKworY2xhc3MgVGVhcmRvd25FcnJvclJlcG9ydChCYXNlUmVwb3J0KToKKyAgICBvdXRjb21l
ID0gImZhaWxlZCIKKyAgICB3aGVuID0gInRlYXJkb3duIgorICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBsb25ncmVwciwgKipleHRyYSk6CisgICAgICAgIHNlbGYubG9uZ3JlcHIgPSBsb25ncmVwcgor
ICAgICAgICBzZWxmLnNlY3Rpb25zID0gW10KKyAgICAgICAgc2VsZi5fX2RpY3RfXy51cGRhdGUo
ZXh0cmEpCisKK2RlZiBweXRlc3RfbWFrZV9jb2xsZWN0X3JlcG9ydChjb2xsZWN0b3IpOgorICAg
IGNhbGwgPSBDYWxsSW5mbyhjb2xsZWN0b3IuX21lbW9jb2xsZWN0LCAibWVtb2NvbGxlY3QiKQor
ICAgIGxvbmdyZXByID0gTm9uZQorICAgIGlmIG5vdCBjYWxsLmV4Y2luZm86CisgICAgICAgIG91
dGNvbWUgPSAicGFzc2VkIgorICAgIGVsc2U6CisgICAgICAgIGZyb20gX3B5dGVzdCBpbXBvcnQg
bm9zZQorICAgICAgICBza2lwX2V4Y2VwdGlvbnMgPSAoU2tpcHBlZCwpICsgbm9zZS5nZXRfc2tp
cF9leGNlcHRpb25zKCkKKyAgICAgICAgaWYgY2FsbC5leGNpbmZvLmVycmlzaW5zdGFuY2Uoc2tp
cF9leGNlcHRpb25zKToKKyAgICAgICAgICAgIG91dGNvbWUgPSAic2tpcHBlZCIKKyAgICAgICAg
ICAgIHIgPSBjb2xsZWN0b3IuX3JlcHJfZmFpbHVyZV9weShjYWxsLmV4Y2luZm8sICJsaW5lIiku
cmVwcmNyYXNoCisgICAgICAgICAgICBsb25ncmVwciA9IChzdHIoci5wYXRoKSwgci5saW5lbm8s
IHIubWVzc2FnZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG91dGNvbWUgPSAiZmFpbGVk
IgorICAgICAgICAgICAgZXJyb3JpbmZvID0gY29sbGVjdG9yLnJlcHJfZmFpbHVyZShjYWxsLmV4
Y2luZm8pCisgICAgICAgICAgICBpZiBub3QgaGFzYXR0cihlcnJvcmluZm8sICJ0b3Rlcm1pbmFs
Iik6CisgICAgICAgICAgICAgICAgZXJyb3JpbmZvID0gQ29sbGVjdEVycm9yUmVwcihlcnJvcmlu
Zm8pCisgICAgICAgICAgICBsb25ncmVwciA9IGVycm9yaW5mbworICAgIHJlcCA9IENvbGxlY3RS
ZXBvcnQoY29sbGVjdG9yLm5vZGVpZCwgb3V0Y29tZSwgbG9uZ3JlcHIsCisgICAgICAgIGdldGF0
dHIoY2FsbCwgJ3Jlc3VsdCcsIE5vbmUpKQorICAgIHJlcC5jYWxsID0gY2FsbCAgIyBzZWUgY29s
bGVjdF9vbmVfbm9kZQorICAgIHJldHVybiByZXAKKworCitjbGFzcyBDb2xsZWN0UmVwb3J0KEJh
c2VSZXBvcnQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBub2RlaWQsIG91dGNvbWUsIGxvbmdy
ZXByLCByZXN1bHQsCisgICAgICAgICAgICAgICAgIHNlY3Rpb25zPSgpLCAqKmV4dHJhKToKKyAg
ICAgICAgc2VsZi5ub2RlaWQgPSBub2RlaWQKKyAgICAgICAgc2VsZi5vdXRjb21lID0gb3V0Y29t
ZQorICAgICAgICBzZWxmLmxvbmdyZXByID0gbG9uZ3JlcHIKKyAgICAgICAgc2VsZi5yZXN1bHQg
PSByZXN1bHQgb3IgW10KKyAgICAgICAgc2VsZi5zZWN0aW9ucyA9IGxpc3Qoc2VjdGlvbnMpCisg
ICAgICAgIHNlbGYuX19kaWN0X18udXBkYXRlKGV4dHJhKQorCisgICAgQHByb3BlcnR5CisgICAg
ZGVmIGxvY2F0aW9uKHNlbGYpOgorICAgICAgICByZXR1cm4gKHNlbGYuZnNwYXRoLCBOb25lLCBz
ZWxmLmZzcGF0aCkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICI8
Q29sbGVjdFJlcG9ydCAlciBsZW5yZXN1bHQ9JXMgb3V0Y29tZT0lcj4iICUgKAorICAgICAgICAg
ICAgICAgIHNlbGYubm9kZWlkLCBsZW4oc2VsZi5yZXN1bHQpLCBzZWxmLm91dGNvbWUpCisKK2Ns
YXNzIENvbGxlY3RFcnJvclJlcHIoVGVybWluYWxSZXByKToKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgbXNnKToKKyAgICAgICAgc2VsZi5sb25ncmVwciA9IG1zZworICAgIGRlZiB0b3Rlcm1pbmFs
KHNlbGYsIG91dCk6CisgICAgICAgIG91dC5saW5lKHNlbGYubG9uZ3JlcHIsIHJlZD1UcnVlKQor
CitjbGFzcyBTZXR1cFN0YXRlKG9iamVjdCk6CisgICAgIiIiIHNoYXJlZCBzdGF0ZSBmb3Igc2V0
dGluZyB1cC90ZWFyaW5nIGRvd24gdGVzdCBpdGVtcyBvciBjb2xsZWN0b3JzLiAiIiIKKyAgICBk
ZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuc3RhY2sgPSBbXQorICAgICAgICBzZWxm
Ll9maW5hbGl6ZXJzID0ge30KKworICAgIGRlZiBhZGRmaW5hbGl6ZXIoc2VsZiwgZmluYWxpemVy
LCBjb2xpdGVtKToKKyAgICAgICAgIiIiIGF0dGFjaCBhIGZpbmFsaXplciB0byB0aGUgZ2l2ZW4g
Y29saXRlbS4KKyAgICAgICAgaWYgY29saXRlbSBpcyBOb25lLCB0aGlzIHdpbGwgYWRkIGEgZmlu
YWxpemVyIHRoYXQKKyAgICAgICAgaXMgY2FsbGVkIGF0IHRoZSBlbmQgb2YgdGVhcmRvd25fYWxs
KCkuCisgICAgICAgICIiIgorICAgICAgICBhc3NlcnQgY29saXRlbSBhbmQgbm90IGlzaW5zdGFu
Y2UoY29saXRlbSwgdHVwbGUpCisgICAgICAgIGFzc2VydCBweS5idWlsdGluLmNhbGxhYmxlKGZp
bmFsaXplcikKKyAgICAgICAgI2Fzc2VydCBjb2xpdGVtIGluIHNlbGYuc3RhY2sgICMgc29tZSB1
bml0IHRlc3RzIGRvbid0IHNldHVwIHN0YWNrIDovCisgICAgICAgIHNlbGYuX2ZpbmFsaXplcnMu
c2V0ZGVmYXVsdChjb2xpdGVtLCBbXSkuYXBwZW5kKGZpbmFsaXplcikKKworICAgIGRlZiBfcG9w
X2FuZF90ZWFyZG93bihzZWxmKToKKyAgICAgICAgY29saXRlbSA9IHNlbGYuc3RhY2sucG9wKCkK
KyAgICAgICAgc2VsZi5fdGVhcmRvd25fd2l0aF9maW5hbGl6YXRpb24oY29saXRlbSkKKworICAg
IGRlZiBfY2FsbGZpbmFsaXplcnMoc2VsZiwgY29saXRlbSk6CisgICAgICAgIGZpbmFsaXplcnMg
PSBzZWxmLl9maW5hbGl6ZXJzLnBvcChjb2xpdGVtLCBOb25lKQorICAgICAgICBleGMgPSBOb25l
CisgICAgICAgIHdoaWxlIGZpbmFsaXplcnM6CisgICAgICAgICAgICBmaW4gPSBmaW5hbGl6ZXJz
LnBvcCgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZmluKCkKKyAgICAgICAg
ICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgIyBYWFggT25seSBmaXJzdCBl
eGNlcHRpb24gd2lsbCBiZSBzZWVuIGJ5IHVzZXIsCisgICAgICAgICAgICAgICAgIyAgICAgaWRl
YWxseSBhbGwgc2hvdWxkIGJlIHJlcG9ydGVkLgorICAgICAgICAgICAgICAgIGlmIGV4YyBpcyBO
b25lOgorICAgICAgICAgICAgICAgICAgICBleGMgPSBzeXMuZXhjX2luZm8oKQorICAgICAgICBp
ZiBleGM6CisgICAgICAgICAgICBweS5idWlsdGluLl9yZXJhaXNlKCpleGMpCisKKyAgICBkZWYg
X3RlYXJkb3duX3dpdGhfZmluYWxpemF0aW9uKHNlbGYsIGNvbGl0ZW0pOgorICAgICAgICBzZWxm
Ll9jYWxsZmluYWxpemVycyhjb2xpdGVtKQorICAgICAgICBpZiBoYXNhdHRyKGNvbGl0ZW0sICJ0
ZWFyZG93biIpOgorICAgICAgICAgICAgY29saXRlbS50ZWFyZG93bigpCisgICAgICAgIGZvciBj
b2xpdGVtIGluIHNlbGYuX2ZpbmFsaXplcnM6CisgICAgICAgICAgICBhc3NlcnQgY29saXRlbSBp
cyBOb25lIG9yIGNvbGl0ZW0gaW4gc2VsZi5zdGFjayBcCisgICAgICAgICAgICAgb3IgaXNpbnN0
YW5jZShjb2xpdGVtLCB0dXBsZSkKKworICAgIGRlZiB0ZWFyZG93bl9hbGwoc2VsZik6CisgICAg
ICAgIHdoaWxlIHNlbGYuc3RhY2s6CisgICAgICAgICAgICBzZWxmLl9wb3BfYW5kX3RlYXJkb3du
KCkKKyAgICAgICAgZm9yIGtleSBpbiBsaXN0KHNlbGYuX2ZpbmFsaXplcnMpOgorICAgICAgICAg
ICAgc2VsZi5fdGVhcmRvd25fd2l0aF9maW5hbGl6YXRpb24oa2V5KQorICAgICAgICBhc3NlcnQg
bm90IHNlbGYuX2ZpbmFsaXplcnMKKworICAgIGRlZiB0ZWFyZG93bl9leGFjdChzZWxmLCBpdGVt
LCBuZXh0aXRlbSk6CisgICAgICAgIG5lZWRlZF9jb2xsZWN0b3JzID0gbmV4dGl0ZW0gYW5kIG5l
eHRpdGVtLmxpc3RjaGFpbigpIG9yIFtdCisgICAgICAgIHNlbGYuX3RlYXJkb3duX3Rvd2FyZHMo
bmVlZGVkX2NvbGxlY3RvcnMpCisKKyAgICBkZWYgX3RlYXJkb3duX3Rvd2FyZHMoc2VsZiwgbmVl
ZGVkX2NvbGxlY3RvcnMpOgorICAgICAgICB3aGlsZSBzZWxmLnN0YWNrOgorICAgICAgICAgICAg
aWYgc2VsZi5zdGFjayA9PSBuZWVkZWRfY29sbGVjdG9yc1s6bGVuKHNlbGYuc3RhY2spXToKKyAg
ICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgc2VsZi5fcG9wX2FuZF90ZWFyZG93bigp
CisKKyAgICBkZWYgcHJlcGFyZShzZWxmLCBjb2xpdGVtKToKKyAgICAgICAgIiIiIHNldHVwIG9i
amVjdHMgYWxvbmcgdGhlIGNvbGxlY3RvciBjaGFpbiB0byB0aGUgdGVzdC1tZXRob2QKKyAgICAg
ICAgICAgIGFuZCB0ZWFyZG93biBwcmV2aW91c2x5IHNldHVwIG9iamVjdHMuIiIiCisgICAgICAg
IG5lZWRlZF9jb2xsZWN0b3JzID0gY29saXRlbS5saXN0Y2hhaW4oKQorICAgICAgICBzZWxmLl90
ZWFyZG93bl90b3dhcmRzKG5lZWRlZF9jb2xsZWN0b3JzKQorCisgICAgICAgICMgY2hlY2sgaWYg
dGhlIGxhc3QgY29sbGVjdGlvbiBub2RlIGhhcyByYWlzZWQgYW4gZXJyb3IKKyAgICAgICAgZm9y
IGNvbCBpbiBzZWxmLnN0YWNrOgorICAgICAgICAgICAgaWYgaGFzYXR0cihjb2wsICdfcHJlcGFy
ZV9leGMnKToKKyAgICAgICAgICAgICAgICBweS5idWlsdGluLl9yZXJhaXNlKCpjb2wuX3ByZXBh
cmVfZXhjKQorICAgICAgICBmb3IgY29sIGluIG5lZWRlZF9jb2xsZWN0b3JzW2xlbihzZWxmLnN0
YWNrKTpdOgorICAgICAgICAgICAgc2VsZi5zdGFjay5hcHBlbmQoY29sKQorICAgICAgICAgICAg
dHJ5OgorICAgICAgICAgICAgICAgIGNvbC5zZXR1cCgpCisgICAgICAgICAgICBleGNlcHQgRXhj
ZXB0aW9uOgorICAgICAgICAgICAgICAgIGNvbC5fcHJlcGFyZV9leGMgPSBzeXMuZXhjX2luZm8o
KQorICAgICAgICAgICAgICAgIHJhaXNlCisKK2RlZiBjb2xsZWN0X29uZV9ub2RlKGNvbGxlY3Rv
cik6CisgICAgaWhvb2sgPSBjb2xsZWN0b3IuaWhvb2sKKyAgICBpaG9vay5weXRlc3RfY29sbGVj
dHN0YXJ0KGNvbGxlY3Rvcj1jb2xsZWN0b3IpCisgICAgcmVwID0gaWhvb2sucHl0ZXN0X21ha2Vf
Y29sbGVjdF9yZXBvcnQoY29sbGVjdG9yPWNvbGxlY3RvcikKKyAgICBjYWxsID0gcmVwLl9fZGlj
dF9fLnBvcCgiY2FsbCIsIE5vbmUpCisgICAgaWYgY2FsbCBhbmQgY2hlY2tfaW50ZXJhY3RpdmVf
ZXhjZXB0aW9uKGNhbGwsIHJlcCk6CisgICAgICAgIGlob29rLnB5dGVzdF9leGNlcHRpb25faW50
ZXJhY3Qobm9kZT1jb2xsZWN0b3IsIGNhbGw9Y2FsbCwgcmVwb3J0PXJlcCkKKyAgICByZXR1cm4g
cmVwCisKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09CisjIFRlc3QgT3V0Y29tZUV4Y2VwdGlvbnMgYW5kIGhlbHBlcnMgZm9y
IGNyZWF0aW5nIHRoZW0uCisKKworY2xhc3MgT3V0Y29tZUV4Y2VwdGlvbihFeGNlcHRpb24pOgor
ICAgICIiIiBPdXRjb21lRXhjZXB0aW9uIGFuZCBpdHMgc3ViY2xhc3MgaW5zdGFuY2VzIGluZGlj
YXRlIGFuZAorICAgICAgICBjb250YWluIGluZm8gYWJvdXQgdGVzdCBhbmQgY29sbGVjdGlvbiBv
dXRjb21lcy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbXNnPU5vbmUsIHB5dHJh
Y2U9VHJ1ZSk6CisgICAgICAgIEV4Y2VwdGlvbi5fX2luaXRfXyhzZWxmLCBtc2cpCisgICAgICAg
IHNlbGYubXNnID0gbXNnCisgICAgICAgIHNlbGYucHl0cmFjZSA9IHB5dHJhY2UKKworICAgIGRl
ZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5tc2c6CisgICAgICAgICAgICB2YWwg
PSBzZWxmLm1zZworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWwsIGJ5dGVzKToKKyAgICAg
ICAgICAgICAgICB2YWwgPSBweS5fYnVpbHRpbi5fdG90ZXh0KHZhbCwgZXJyb3JzPSdyZXBsYWNl
JykKKyAgICAgICAgICAgIHJldHVybiB2YWwKKyAgICAgICAgcmV0dXJuICI8JXMgaW5zdGFuY2U+
IiAlKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCkKKyAgICBfX3N0cl9fID0gX19yZXByX18KKwor
Y2xhc3MgU2tpcHBlZChPdXRjb21lRXhjZXB0aW9uKToKKyAgICAjIFhYWCBoYWNraXNoOiBvbiAz
ayB3ZSBmYWtlIHRvIGxpdmUgaW4gdGhlIGJ1aWx0aW5zCisgICAgIyBpbiBvcmRlciB0byBoYXZl
IFNraXBwZWQgZXhjZXB0aW9uIHByaW50aW5nIHNob3J0ZXIvbmljZXIKKyAgICBfX21vZHVsZV9f
ID0gJ2J1aWx0aW5zJworCitjbGFzcyBGYWlsZWQoT3V0Y29tZUV4Y2VwdGlvbik6CisgICAgIiIi
IHJhaXNlZCBmcm9tIGFuIGV4cGxpY2l0IGNhbGwgdG8gcHl0ZXN0LmZhaWwoKSAiIiIKKyAgICBf
X21vZHVsZV9fID0gJ2J1aWx0aW5zJworCitjbGFzcyBFeGl0KEtleWJvYXJkSW50ZXJydXB0KToK
KyAgICAiIiIgcmFpc2VkIGZvciBpbW1lZGlhdGUgcHJvZ3JhbSBleGl0cyAobm8gdHJhY2ViYWNr
cy9zdW1tYXJpZXMpIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1zZz0idW5rbm93biByZWFz
b24iKToKKyAgICAgICAgc2VsZi5tc2cgPSBtc2cKKyAgICAgICAgS2V5Ym9hcmRJbnRlcnJ1cHQu
X19pbml0X18oc2VsZiwgbXNnKQorCisjIGV4cG9zZWQgaGVscGVyIG1ldGhvZHMKKworZGVmIGV4
aXQobXNnKToKKyAgICAiIiIgZXhpdCB0ZXN0aW5nIHByb2Nlc3MgYXMgaWYgS2V5Ym9hcmRJbnRl
cnJ1cHQgd2FzIHRyaWdnZXJlZC4gIiIiCisgICAgX190cmFjZWJhY2toaWRlX18gPSBUcnVlCisg
ICAgcmFpc2UgRXhpdChtc2cpCisKK2V4aXQuRXhjZXB0aW9uID0gRXhpdAorCitkZWYgc2tpcCht
c2c9IiIpOgorICAgICIiIiBza2lwIGFuIGV4ZWN1dGluZyB0ZXN0IHdpdGggdGhlIGdpdmVuIG1l
c3NhZ2UuICBOb3RlOiBpdCdzIHVzdWFsbHkKKyAgICBiZXR0ZXIgdG8gdXNlIHRoZSBweXRlc3Qu
bWFyay5za2lwaWYgbWFya2VyIHRvIGRlY2xhcmUgYSB0ZXN0IHRvIGJlCisgICAgc2tpcHBlZCB1
bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMgbGlrZSBtaXNtYXRjaGluZyBwbGF0Zm9ybXMgb3IKKyAg
ICBkZXBlbmRlbmNpZXMuICBTZWUgdGhlIHB5dGVzdF9za2lwcGluZyBwbHVnaW4gZm9yIGRldGFp
bHMuCisgICAgIiIiCisgICAgX190cmFjZWJhY2toaWRlX18gPSBUcnVlCisgICAgcmFpc2UgU2tp
cHBlZChtc2c9bXNnKQorc2tpcC5FeGNlcHRpb24gPSBTa2lwcGVkCisKK2RlZiBmYWlsKG1zZz0i
IiwgcHl0cmFjZT1UcnVlKToKKyAgICAiIiIgZXhwbGljaXRseSBmYWlsIGFuIGN1cnJlbnRseS1l
eGVjdXRpbmcgdGVzdCB3aXRoIHRoZSBnaXZlbiBNZXNzYWdlLgorCisgICAgOmFyZyBweXRyYWNl
OiBpZiBmYWxzZSB0aGUgbXNnIHJlcHJlc2VudHMgdGhlIGZ1bGwgZmFpbHVyZSBpbmZvcm1hdGlv
bgorICAgICAgICAgICAgICAgICAgYW5kIG5vIHB5dGhvbiB0cmFjZWJhY2sgd2lsbCBiZSByZXBv
cnRlZC4KKyAgICAiIiIKKyAgICBfX3RyYWNlYmFja2hpZGVfXyA9IFRydWUKKyAgICByYWlzZSBG
YWlsZWQobXNnPW1zZywgcHl0cmFjZT1weXRyYWNlKQorZmFpbC5FeGNlcHRpb24gPSBGYWlsZWQK
KworCitkZWYgaW1wb3J0b3Jza2lwKG1vZG5hbWUsIG1pbnZlcnNpb249Tm9uZSk6CisgICAgIiIi
IHJldHVybiBpbXBvcnRlZCBtb2R1bGUgaWYgaXQgaGFzIGF0IGxlYXN0ICJtaW52ZXJzaW9uIiBh
cyBpdHMKKyAgICBfX3ZlcnNpb25fXyBhdHRyaWJ1dGUuICBJZiBubyBtaW52ZXJzaW9uIGlzIHNw
ZWNpZmllZCB0aGUgYSBza2lwCisgICAgaXMgb25seSB0cmlnZ2VyZWQgaWYgdGhlIG1vZHVsZSBj
YW4gbm90IGJlIGltcG9ydGVkLgorICAgICIiIgorICAgIF9fdHJhY2ViYWNraGlkZV9fID0gVHJ1
ZQorICAgIGNvbXBpbGUobW9kbmFtZSwgJycsICdldmFsJykgIyB0byBjYXRjaCBzeW50YXhlcnJv
cnMKKyAgICB0cnk6CisgICAgICAgIF9faW1wb3J0X18obW9kbmFtZSkKKyAgICBleGNlcHQgSW1w
b3J0RXJyb3I6CisgICAgICAgIHNraXAoImNvdWxkIG5vdCBpbXBvcnQgJXIiICUobW9kbmFtZSwp
KQorICAgIG1vZCA9IHN5cy5tb2R1bGVzW21vZG5hbWVdCisgICAgaWYgbWludmVyc2lvbiBpcyBO
b25lOgorICAgICAgICByZXR1cm4gbW9kCisgICAgdmVyYXR0ciA9IGdldGF0dHIobW9kLCAnX192
ZXJzaW9uX18nLCBOb25lKQorICAgIGlmIG1pbnZlcnNpb24gaXMgbm90IE5vbmU6CisgICAgICAg
IHRyeToKKyAgICAgICAgICAgIGZyb20gcGtnX3Jlc291cmNlcyBpbXBvcnQgcGFyc2VfdmVyc2lv
biBhcyBwdgorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICBza2lwKCJ3
ZSBoYXZlIGEgcmVxdWlyZWQgdmVyc2lvbiBmb3IgJXIgYnV0IGNhbiBub3QgaW1wb3J0ICIKKyAg
ICAgICAgICAgICAgICAgIm5vIHBrZ19yZXNvdXJjZXMgdG8gcGFyc2UgdmVyc2lvbiBzdHJpbmdz
LiIgJShtb2RuYW1lLCkpCisgICAgICAgIGlmIHZlcmF0dHIgaXMgTm9uZSBvciBwdih2ZXJhdHRy
KSA8IHB2KG1pbnZlcnNpb24pOgorICAgICAgICAgICAgc2tpcCgibW9kdWxlICVyIGhhcyBfX3Zl
cnNpb25fXyAlciwgcmVxdWlyZWQgaXM6ICVyIiAlKAorICAgICAgICAgICAgICAgICBtb2RuYW1l
LCB2ZXJhdHRyLCBtaW52ZXJzaW9uKSkKKyAgICByZXR1cm4gbW9kCisKZGlmZiAtLWdpdCBhL1dl
YkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9za2lwcGluZy5w
eSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9za2lw
cGluZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNjkxNTdmNDg1
YTAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMv
cHl0ZXN0L19weXRlc3Qvc2tpcHBpbmcucHkKQEAgLTAsMCArMSwzNTQgQEAKKyIiIiBzdXBwb3J0
IGZvciBza2lwL3hmYWlsIGZ1bmN0aW9ucyBhbmQgbWFya2Vycy4gIiIiCitpbXBvcnQgb3MKK2lt
cG9ydCBzeXMKK2ltcG9ydCB0cmFjZWJhY2sKKworaW1wb3J0IHB5CitpbXBvcnQgcHl0ZXN0Citm
cm9tIF9weXRlc3QubWFyayBpbXBvcnQgTWFya0luZm8sIE1hcmtEZWNvcmF0b3IKKworCitkZWYg
cHl0ZXN0X2FkZG9wdGlvbihwYXJzZXIpOgorICAgIGdyb3VwID0gcGFyc2VyLmdldGdyb3VwKCJn
ZW5lcmFsIikKKyAgICBncm91cC5hZGRvcHRpb24oJy0tcnVueGZhaWwnLAorICAgICAgICAgICBh
Y3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJydW54ZmFpbCIsIGRlZmF1bHQ9RmFsc2UsCisgICAg
ICAgICAgIGhlbHA9InJ1biB0ZXN0cyBldmVuIGlmIHRoZXkgYXJlIG1hcmtlZCB4ZmFpbCIpCisK
KyAgICBwYXJzZXIuYWRkaW5pKCJ4ZmFpbF9zdHJpY3QiLCAiZGVmYXVsdCBmb3IgdGhlIHN0cmlj
dCBwYXJhbWV0ZXIgb2YgeGZhaWwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJtYXJrZXJzIHdoZW4gbm90IGdpdmVuIGV4cGxpY2l0bHkgKGRlZmF1bHQ6ICIKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiRmFsc2UpIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHR5cGU9ImJvb2wiKQorCisKK2RlZiBweXRlc3RfY29uZmlndXJlKGNvbmZpZyk6Cisg
ICAgaWYgY29uZmlnLm9wdGlvbi5ydW54ZmFpbDoKKyAgICAgICAgb2xkID0gcHl0ZXN0LnhmYWls
CisgICAgICAgIGNvbmZpZy5fY2xlYW51cC5hcHBlbmQobGFtYmRhOiBzZXRhdHRyKHB5dGVzdCwg
InhmYWlsIiwgb2xkKSkKKyAgICAgICAgZGVmIG5vcCgqYXJncywgKiprd2FyZ3MpOgorICAgICAg
ICAgICAgcGFzcworICAgICAgICBub3AuRXhjZXB0aW9uID0gWEZhaWxlZAorICAgICAgICBzZXRh
dHRyKHB5dGVzdCwgInhmYWlsIiwgbm9wKQorCisgICAgY29uZmlnLmFkZGluaXZhbHVlX2xpbmUo
Im1hcmtlcnMiLAorICAgICAgICAic2tpcGlmKGNvbmRpdGlvbik6IHNraXAgdGhlIGdpdmVuIHRl
c3QgZnVuY3Rpb24gaWYgZXZhbChjb25kaXRpb24pICIKKyAgICAgICAgInJlc3VsdHMgaW4gYSBU
cnVlIHZhbHVlLiAgRXZhbHVhdGlvbiBoYXBwZW5zIHdpdGhpbiB0aGUgIgorICAgICAgICAibW9k
dWxlIGdsb2JhbCBjb250ZXh0LiBFeGFtcGxlOiBza2lwaWYoJ3N5cy5wbGF0Zm9ybSA9PSBcIndp
bjMyXCInKSAiCisgICAgICAgICJza2lwcyB0aGUgdGVzdCBpZiB3ZSBhcmUgb24gdGhlIHdpbjMy
IHBsYXRmb3JtLiBzZWUgIgorICAgICAgICAiaHR0cDovL3B5dGVzdC5vcmcvbGF0ZXN0L3NraXBw
aW5nLmh0bWwiCisgICAgKQorICAgIGNvbmZpZy5hZGRpbml2YWx1ZV9saW5lKCJtYXJrZXJzIiwK
KyAgICAgICAgInhmYWlsKGNvbmRpdGlvbiwgcmVhc29uPU5vbmUsIHJ1bj1UcnVlLCByYWlzZXM9
Tm9uZSk6IG1hcmsgdGhlIHRoZSB0ZXN0IGZ1bmN0aW9uICIKKyAgICAgICAgImFzIGFuIGV4cGVj
dGVkIGZhaWx1cmUgaWYgZXZhbChjb25kaXRpb24pIGhhcyBhIFRydWUgdmFsdWUuICIKKyAgICAg
ICAgIk9wdGlvbmFsbHkgc3BlY2lmeSBhIHJlYXNvbiBmb3IgYmV0dGVyIHJlcG9ydGluZyBhbmQg
cnVuPUZhbHNlIGlmICIKKyAgICAgICAgInlvdSBkb24ndCBldmVuIHdhbnQgdG8gZXhlY3V0ZSB0
aGUgdGVzdCBmdW5jdGlvbi4gSWYgb25seSBzcGVjaWZpYyAiCisgICAgICAgICJleGNlcHRpb24o
cykgYXJlIGV4cGVjdGVkLCB5b3UgY2FuIGxpc3QgdGhlbSBpbiByYWlzZXMsIGFuZCBpZiB0aGUg
dGVzdCBmYWlscyAiCisgICAgICAgICJpbiBvdGhlciB3YXlzLCBpdCB3aWxsIGJlIHJlcG9ydGVk
IGFzIGEgdHJ1ZSBmYWlsdXJlLiAiCisgICAgICAgICJTZWUgaHR0cDovL3B5dGVzdC5vcmcvbGF0
ZXN0L3NraXBwaW5nLmh0bWwiCisgICAgKQorCisKK2RlZiBweXRlc3RfbmFtZXNwYWNlKCk6Cisg
ICAgcmV0dXJuIGRpY3QoeGZhaWw9eGZhaWwpCisKKworY2xhc3MgWEZhaWxlZChweXRlc3QuZmFp
bC5FeGNlcHRpb24pOgorICAgICIiIiByYWlzZWQgZnJvbSBhbiBleHBsaWNpdCBjYWxsIHRvIHB5
dGVzdC54ZmFpbCgpICIiIgorCisKK2RlZiB4ZmFpbChyZWFzb249IiIpOgorICAgICIiIiB4ZmFp
bCBhbiBleGVjdXRpbmcgdGVzdCBvciBzZXR1cCBmdW5jdGlvbnMgd2l0aCB0aGUgZ2l2ZW4gcmVh
c29uLiIiIgorICAgIF9fdHJhY2ViYWNraGlkZV9fID0gVHJ1ZQorICAgIHJhaXNlIFhGYWlsZWQo
cmVhc29uKQoreGZhaWwuRXhjZXB0aW9uID0gWEZhaWxlZAorCisKK2NsYXNzIE1hcmtFdmFsdWF0
b3I6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGl0ZW0sIG5hbWUpOgorICAgICAgICBzZWxmLml0
ZW0gPSBpdGVtCisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKworICAgIEBwcm9wZXJ0eQorICAg
IGRlZiBob2xkZXIoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLml0ZW0ua2V5d29yZHMuZ2V0
KHNlbGYubmFtZSkKKworICAgIGRlZiBfX2Jvb2xfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGJv
b2woc2VsZi5ob2xkZXIpCisgICAgX19ub256ZXJvX18gPSBfX2Jvb2xfXworCisgICAgZGVmIHdh
c3ZhbGlkKHNlbGYpOgorICAgICAgICByZXR1cm4gbm90IGhhc2F0dHIoc2VsZiwgJ2V4YycpCisK
KyAgICBkZWYgaW52YWxpZHJhaXNlKHNlbGYsIGV4Yyk6CisgICAgICAgIHJhaXNlcyA9IHNlbGYu
Z2V0KCdyYWlzZXMnKQorICAgICAgICBpZiBub3QgcmFpc2VzOgorICAgICAgICAgICAgcmV0dXJu
CisgICAgICAgIHJldHVybiBub3QgaXNpbnN0YW5jZShleGMsIHJhaXNlcykKKworICAgIGRlZiBp
c3RydWUoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9pc3Ry
dWUoKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgc2VsZi5leGMgPSBz
eXMuZXhjX2luZm8oKQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLmV4Y1sxXSwgU3lu
dGF4RXJyb3IpOgorICAgICAgICAgICAgICAgIG1zZyA9IFsiICIgKiAoc2VsZi5leGNbMV0ub2Zm
c2V0ICsgNCkgKyAiXiIsXQorICAgICAgICAgICAgICAgIG1zZy5hcHBlbmQoIlN5bnRheEVycm9y
OiBpbnZhbGlkIHN5bnRheCIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG1z
ZyA9IHRyYWNlYmFjay5mb3JtYXRfZXhjZXB0aW9uX29ubHkoKnNlbGYuZXhjWzoyXSkKKyAgICAg
ICAgICAgIHB5dGVzdC5mYWlsKCJFcnJvciBldmFsdWF0aW5nICVyIGV4cHJlc3Npb25cbiIKKyAg
ICAgICAgICAgICAgICAgICAgICAgICIgICAgJXNcbiIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICIlcyIKKyAgICAgICAgICAgICAgICAgICAgICAgICUoc2VsZi5uYW1lLCBzZWxmLmV4cHIsICJc
biIuam9pbihtc2cpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHB5dHJhY2U9RmFsc2UpCisK
KyAgICBkZWYgX2dldGdsb2JhbHMoc2VsZik6CisgICAgICAgIGQgPSB7J29zJzogb3MsICdzeXMn
OiBzeXMsICdjb25maWcnOiBzZWxmLml0ZW0uY29uZmlnfQorICAgICAgICBmdW5jID0gc2VsZi5p
dGVtLm9iagorICAgICAgICB0cnk6CisgICAgICAgICAgICBkLnVwZGF0ZShmdW5jLl9fZ2xvYmFs
c19fKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBkLnVwZGF0
ZShmdW5jLmZ1bmNfZ2xvYmFscykKKyAgICAgICAgcmV0dXJuIGQKKworICAgIGRlZiBfaXN0cnVl
KHNlbGYpOgorICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICdyZXN1bHQnKToKKyAgICAgICAgICAg
IHJldHVybiBzZWxmLnJlc3VsdAorICAgICAgICBpZiBzZWxmLmhvbGRlcjoKKyAgICAgICAgICAg
IGQgPSBzZWxmLl9nZXRnbG9iYWxzKCkKKyAgICAgICAgICAgIGlmIHNlbGYuaG9sZGVyLmFyZ3M6
CisgICAgICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSBGYWxzZQorICAgICAgICAgICAgICAgICMg
ImhvbGRlciIgbWlnaHQgYmUgYSBNYXJrSW5mbyBvciBhIE1hcmtEZWNvcmF0b3I7IG9ubHkKKyAg
ICAgICAgICAgICAgICAjIE1hcmtJbmZvIGtlZXBzIHRyYWNrIG9mIGFsbCBwYXJhbWV0ZXJzIGl0
IHJlY2VpdmVkIGluIGFuCisgICAgICAgICAgICAgICAgIyBfYXJnbGlzdCBhdHRyaWJ1dGUKKyAg
ICAgICAgICAgICAgICBpZiBoYXNhdHRyKHNlbGYuaG9sZGVyLCAnX2FyZ2xpc3QnKToKKyAgICAg
ICAgICAgICAgICAgICAgYXJnbGlzdCA9IHNlbGYuaG9sZGVyLl9hcmdsaXN0CisgICAgICAgICAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYXJnbGlzdCA9IFsoc2VsZi5ob2xkZXIu
YXJncywgc2VsZi5ob2xkZXIua3dhcmdzKV0KKyAgICAgICAgICAgICAgICBmb3IgYXJncywga3dh
cmdzIGluIGFyZ2xpc3Q6CisgICAgICAgICAgICAgICAgICAgIGZvciBleHByIGluIGFyZ3M6Cisg
ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmV4cHIgPSBleHByCisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiBpc2luc3RhbmNlKGV4cHIsIHB5LmJ1aWx0aW4uX2Jhc2VzdHJpbmcpOgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNhY2hlZF9ldmFsKHNlbGYuaXRlbS5j
b25maWcsIGV4cHIsIGQpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICJyZWFzb24iIG5vdCBpbiBrd2FyZ3M6CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICMgWFhYIGJldHRlciBiZSBjaGVja2VkIGF0IGNvbGxlY3Rp
b24gdGltZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSAieW91IG5lZWQg
dG8gc3BlY2lmeSByZWFzb249U1RSSU5HICIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAid2hlbiB1c2luZyBib29sZWFucyBhcyBjb25kaXRpb25zLiIKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHl0ZXN0LmZhaWwobXNnKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IGJvb2woZXhwcikKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIHJlc3VsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlc3VsdCA9IFRy
dWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlYXNvbiA9IGt3YXJncy5nZXQo
J3JlYXNvbicsIE5vbmUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5leHByID0g
ZXhwcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnJlc3VsdAorICAg
ICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnJlc3VsdCA9IFRydWUKKyAgICAg
ICAgcmV0dXJuIGdldGF0dHIoc2VsZiwgJ3Jlc3VsdCcsIEZhbHNlKQorCisgICAgZGVmIGdldChz
ZWxmLCBhdHRyLCBkZWZhdWx0PU5vbmUpOgorICAgICAgICByZXR1cm4gc2VsZi5ob2xkZXIua3dh
cmdzLmdldChhdHRyLCBkZWZhdWx0KQorCisgICAgZGVmIGdldGV4cGxhbmF0aW9uKHNlbGYpOgor
ICAgICAgICBleHBsID0gZ2V0YXR0cihzZWxmLCAncmVhc29uJywgTm9uZSkgb3Igc2VsZi5nZXQo
J3JlYXNvbicsIE5vbmUpCisgICAgICAgIGlmIG5vdCBleHBsOgorICAgICAgICAgICAgaWYgbm90
IGhhc2F0dHIoc2VsZiwgJ2V4cHInKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIiIKKyAgICAg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuICJjb25kaXRpb246ICIgKyBzdHIo
c2VsZi5leHByKQorICAgICAgICByZXR1cm4gZXhwbAorCisKK0BweXRlc3QuaG9va2ltcGwodHJ5
Zmlyc3Q9VHJ1ZSkKK2RlZiBweXRlc3RfcnVudGVzdF9zZXR1cChpdGVtKToKKyAgICAjIENoZWNr
IGlmIHNraXAgb3Igc2tpcGlmIGFyZSBzcGVjaWZpZWQgYXMgcHl0ZXN0IG1hcmtzCisKKyAgICBz
a2lwaWZfaW5mbyA9IGl0ZW0ua2V5d29yZHMuZ2V0KCdza2lwaWYnKQorICAgIGlmIGlzaW5zdGFu
Y2Uoc2tpcGlmX2luZm8sIChNYXJrSW5mbywgTWFya0RlY29yYXRvcikpOgorICAgICAgICBldmFs
X3NraXBpZiA9IE1hcmtFdmFsdWF0b3IoaXRlbSwgJ3NraXBpZicpCisgICAgICAgIGlmIGV2YWxf
c2tpcGlmLmlzdHJ1ZSgpOgorICAgICAgICAgICAgaXRlbS5fZXZhbHNraXAgPSBldmFsX3NraXBp
ZgorICAgICAgICAgICAgcHl0ZXN0LnNraXAoZXZhbF9za2lwaWYuZ2V0ZXhwbGFuYXRpb24oKSkK
KworICAgIHNraXBfaW5mbyA9IGl0ZW0ua2V5d29yZHMuZ2V0KCdza2lwJykKKyAgICBpZiBpc2lu
c3RhbmNlKHNraXBfaW5mbywgKE1hcmtJbmZvLCBNYXJrRGVjb3JhdG9yKSk6CisgICAgICAgIGl0
ZW0uX2V2YWxza2lwID0gVHJ1ZQorICAgICAgICBpZiAncmVhc29uJyBpbiBza2lwX2luZm8ua3dh
cmdzOgorICAgICAgICAgICAgcHl0ZXN0LnNraXAoc2tpcF9pbmZvLmt3YXJnc1sncmVhc29uJ10p
CisgICAgICAgIGVsaWYgc2tpcF9pbmZvLmFyZ3M6CisgICAgICAgICAgICBweXRlc3Quc2tpcChz
a2lwX2luZm8uYXJnc1swXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHB5dGVzdC5za2lw
KCJ1bmNvbmRpdGlvbmFsIHNraXAiKQorCisgICAgaXRlbS5fZXZhbHhmYWlsID0gTWFya0V2YWx1
YXRvcihpdGVtLCAneGZhaWwnKQorICAgIGNoZWNrX3hmYWlsX25vX3J1bihpdGVtKQorCisKK0Bw
eXRlc3QubWFyay5ob29rd3JhcHBlcgorZGVmIHB5dGVzdF9weWZ1bmNfY2FsbChweWZ1bmNpdGVt
KToKKyAgICBjaGVja194ZmFpbF9ub19ydW4ocHlmdW5jaXRlbSkKKyAgICBvdXRjb21lID0geWll
bGQKKyAgICBwYXNzZWQgPSBvdXRjb21lLmV4Y2luZm8gaXMgTm9uZQorICAgIGlmIHBhc3NlZDoK
KyAgICAgICAgY2hlY2tfc3RyaWN0X3hmYWlsKHB5ZnVuY2l0ZW0pCisKKworZGVmIGNoZWNrX3hm
YWlsX25vX3J1bihpdGVtKToKKyAgICAiIiJjaGVjayB4ZmFpbChydW49RmFsc2UpIiIiCisgICAg
aWYgbm90IGl0ZW0uY29uZmlnLm9wdGlvbi5ydW54ZmFpbDoKKyAgICAgICAgZXZhbHhmYWlsID0g
aXRlbS5fZXZhbHhmYWlsCisgICAgICAgIGlmIGV2YWx4ZmFpbC5pc3RydWUoKToKKyAgICAgICAg
ICAgIGlmIG5vdCBldmFseGZhaWwuZ2V0KCdydW4nLCBUcnVlKToKKyAgICAgICAgICAgICAgICBw
eXRlc3QueGZhaWwoIltOT1RSVU5dICIgKyBldmFseGZhaWwuZ2V0ZXhwbGFuYXRpb24oKSkKKwor
CitkZWYgY2hlY2tfc3RyaWN0X3hmYWlsKHB5ZnVuY2l0ZW0pOgorICAgICIiImNoZWNrIHhmYWls
KHN0cmljdD1UcnVlKSBmb3IgdGhlIGdpdmVuIFBBU1NJTkcgdGVzdCIiIgorICAgIGV2YWx4ZmFp
bCA9IHB5ZnVuY2l0ZW0uX2V2YWx4ZmFpbAorICAgIGlmIGV2YWx4ZmFpbC5pc3RydWUoKToKKyAg
ICAgICAgc3RyaWN0X2RlZmF1bHQgPSBweWZ1bmNpdGVtLmNvbmZpZy5nZXRpbmkoJ3hmYWlsX3N0
cmljdCcpCisgICAgICAgIGlzX3N0cmljdF94ZmFpbCA9IGV2YWx4ZmFpbC5nZXQoJ3N0cmljdCcs
IHN0cmljdF9kZWZhdWx0KQorICAgICAgICBpZiBpc19zdHJpY3RfeGZhaWw6CisgICAgICAgICAg
ICBkZWwgcHlmdW5jaXRlbS5fZXZhbHhmYWlsCisgICAgICAgICAgICBleHBsYW5hdGlvbiA9IGV2
YWx4ZmFpbC5nZXRleHBsYW5hdGlvbigpCisgICAgICAgICAgICBweXRlc3QuZmFpbCgnW1hQQVNT
KHN0cmljdCldICcgKyBleHBsYW5hdGlvbiwgcHl0cmFjZT1GYWxzZSkKKworCitAcHl0ZXN0Lmhv
b2tpbXBsKGhvb2t3cmFwcGVyPVRydWUpCitkZWYgcHl0ZXN0X3J1bnRlc3RfbWFrZXJlcG9ydChp
dGVtLCBjYWxsKToKKyAgICBvdXRjb21lID0geWllbGQKKyAgICByZXAgPSBvdXRjb21lLmdldF9y
ZXN1bHQoKQorICAgIGV2YWx4ZmFpbCA9IGdldGF0dHIoaXRlbSwgJ19ldmFseGZhaWwnLCBOb25l
KQorICAgIGV2YWxza2lwID0gZ2V0YXR0cihpdGVtLCAnX2V2YWxza2lwJywgTm9uZSkKKyAgICAj
IHVuaXR0dGVzdCBzcGVjaWFsIGNhc2UsIHNlZSBzZXR0aW5nIG9mIF91bmV4cGVjdGVkc3VjY2Vz
cworICAgIGlmIGhhc2F0dHIoaXRlbSwgJ191bmV4cGVjdGVkc3VjY2VzcycpIGFuZCByZXAud2hl
biA9PSAiY2FsbCI6CisgICAgICAgICMgd2UgbmVlZCB0byB0cmFuc2xhdGUgaW50byBob3cgcHl0
ZXN0IGVuY29kZXMgeHBhc3MKKyAgICAgICAgcmVwLndhc3hmYWlsID0gInJlYXNvbjogIiArIHJl
cHIoaXRlbS5fdW5leHBlY3RlZHN1Y2Nlc3MpCisgICAgICAgIHJlcC5vdXRjb21lID0gImZhaWxl
ZCIKKyAgICBlbGlmIGl0ZW0uY29uZmlnLm9wdGlvbi5ydW54ZmFpbDoKKyAgICAgICAgcGFzcyAg
ICMgZG9uJ3QgaW50ZXJlZmVyZQorICAgIGVsaWYgY2FsbC5leGNpbmZvIGFuZCBjYWxsLmV4Y2lu
Zm8uZXJyaXNpbnN0YW5jZShweXRlc3QueGZhaWwuRXhjZXB0aW9uKToKKyAgICAgICAgcmVwLndh
c3hmYWlsID0gInJlYXNvbjogIiArIGNhbGwuZXhjaW5mby52YWx1ZS5tc2cKKyAgICAgICAgcmVw
Lm91dGNvbWUgPSAic2tpcHBlZCIKKyAgICBlbGlmIGV2YWx4ZmFpbCBhbmQgbm90IHJlcC5za2lw
cGVkIGFuZCBldmFseGZhaWwud2FzdmFsaWQoKSBhbmQgXAorICAgICAgICBldmFseGZhaWwuaXN0
cnVlKCk6CisgICAgICAgIGlmIGNhbGwuZXhjaW5mbzoKKyAgICAgICAgICAgIGlmIGV2YWx4ZmFp
bC5pbnZhbGlkcmFpc2UoY2FsbC5leGNpbmZvLnZhbHVlKToKKyAgICAgICAgICAgICAgICByZXAu
b3V0Y29tZSA9ICJmYWlsZWQiCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJl
cC5vdXRjb21lID0gInNraXBwZWQiCisgICAgICAgICAgICAgICAgcmVwLndhc3hmYWlsID0gZXZh
bHhmYWlsLmdldGV4cGxhbmF0aW9uKCkKKyAgICAgICAgZWxpZiBjYWxsLndoZW4gPT0gImNhbGwi
OgorICAgICAgICAgICAgcmVwLm91dGNvbWUgPSAiZmFpbGVkIiAgIyB4cGFzcyBvdXRjb21lCisg
ICAgICAgICAgICByZXAud2FzeGZhaWwgPSBldmFseGZhaWwuZ2V0ZXhwbGFuYXRpb24oKQorICAg
IGVsaWYgZXZhbHNraXAgaXMgbm90IE5vbmUgYW5kIHJlcC5za2lwcGVkIGFuZCB0eXBlKHJlcC5s
b25ncmVwcikgaXMgdHVwbGU6CisgICAgICAgICMgc2tpcHBlZCBieSBtYXJrLnNraXBpZjsgY2hh
bmdlIHRoZSBsb2NhdGlvbiBvZiB0aGUgZmFpbHVyZQorICAgICAgICAjIHRvIHBvaW50IHRvIHRo
ZSBpdGVtIGRlZmluaXRpb24sIG90aGVyd2lzZSBpdCB3aWxsIGRpc3BsYXkKKyAgICAgICAgIyB0
aGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIHNraXAgZXhjZXB0aW9uIHdhcyByYWlzZWQgd2l0aGlu
IHB5dGVzdAorICAgICAgICBmaWxlbmFtZSwgbGluZSwgcmVhc29uID0gcmVwLmxvbmdyZXByCisg
ICAgICAgIGZpbGVuYW1lLCBsaW5lID0gaXRlbS5sb2NhdGlvbls6Ml0KKyAgICAgICAgcmVwLmxv
bmdyZXByID0gZmlsZW5hbWUsIGxpbmUsIHJlYXNvbgorCisjIGNhbGxlZCBieSB0ZXJtaW5hbHJl
cG9ydGVyIHByb2dyZXNzIHJlcG9ydGluZworZGVmIHB5dGVzdF9yZXBvcnRfdGVzdHN0YXR1cyhy
ZXBvcnQpOgorICAgIGlmIGhhc2F0dHIocmVwb3J0LCAid2FzeGZhaWwiKToKKyAgICAgICAgaWYg
cmVwb3J0LnNraXBwZWQ6CisgICAgICAgICAgICByZXR1cm4gInhmYWlsZWQiLCAieCIsICJ4ZmFp
bCIKKyAgICAgICAgZWxpZiByZXBvcnQuZmFpbGVkOgorICAgICAgICAgICAgcmV0dXJuICJ4cGFz
c2VkIiwgIlgiLCAoIlhQQVNTIiwgeyd5ZWxsb3cnOiBUcnVlfSkKKworIyBjYWxsZWQgYnkgdGhl
IHRlcm1pbmFscmVwb3J0ZXIgaW5zdGFuY2UvcGx1Z2luCitkZWYgcHl0ZXN0X3Rlcm1pbmFsX3N1
bW1hcnkodGVybWluYWxyZXBvcnRlcik6CisgICAgdHIgPSB0ZXJtaW5hbHJlcG9ydGVyCisgICAg
aWYgbm90IHRyLnJlcG9ydGNoYXJzOgorICAgICAgICAjZm9yIG5hbWUgaW4gInhmYWlsZWQgc2tp
cHBlZCBmYWlsZWQgeHBhc3NlZCI6CisgICAgICAgICMgICAgaWYgbm90IHRyLnN0YXRzLmdldChu
YW1lLCAwKToKKyAgICAgICAgIyAgICAgICAgdHIud3JpdGVfbGluZSgiSElOVDogdXNlICctcicg
b3B0aW9uIHRvIHNlZSBleHRyYSAiCisgICAgICAgICMgICAgICAgICAgICAgICJzdW1tYXJ5IGlu
Zm8gYWJvdXQgdGVzdHMiKQorICAgICAgICAjICAgICAgICBicmVhaworICAgICAgICByZXR1cm4K
KworICAgIGxpbmVzID0gW10KKyAgICBmb3IgY2hhciBpbiB0ci5yZXBvcnRjaGFyczoKKyAgICAg
ICAgaWYgY2hhciA9PSAieCI6CisgICAgICAgICAgICBzaG93X3hmYWlsZWQodGVybWluYWxyZXBv
cnRlciwgbGluZXMpCisgICAgICAgIGVsaWYgY2hhciA9PSAiWCI6CisgICAgICAgICAgICBzaG93
X3hwYXNzZWQodGVybWluYWxyZXBvcnRlciwgbGluZXMpCisgICAgICAgIGVsaWYgY2hhciBpbiAi
ZkYiOgorICAgICAgICAgICAgc2hvd19zaW1wbGUodGVybWluYWxyZXBvcnRlciwgbGluZXMsICdm
YWlsZWQnLCAiRkFJTCAlcyIpCisgICAgICAgIGVsaWYgY2hhciBpbiAic1MiOgorICAgICAgICAg
ICAgc2hvd19za2lwcGVkKHRlcm1pbmFscmVwb3J0ZXIsIGxpbmVzKQorICAgICAgICBlbGlmIGNo
YXIgPT0gIkUiOgorICAgICAgICAgICAgc2hvd19zaW1wbGUodGVybWluYWxyZXBvcnRlciwgbGlu
ZXMsICdlcnJvcicsICJFUlJPUiAlcyIpCisgICAgICAgIGVsaWYgY2hhciA9PSAncCc6CisgICAg
ICAgICAgICBzaG93X3NpbXBsZSh0ZXJtaW5hbHJlcG9ydGVyLCBsaW5lcywgJ3Bhc3NlZCcsICJQ
QVNTRUQgJXMiKQorCisgICAgaWYgbGluZXM6CisgICAgICAgIHRyLl90dy5zZXAoIj0iLCAic2hv
cnQgdGVzdCBzdW1tYXJ5IGluZm8iKQorICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAg
ICAgICAgIHRyLl90dy5saW5lKGxpbmUpCisKK2RlZiBzaG93X3NpbXBsZSh0ZXJtaW5hbHJlcG9y
dGVyLCBsaW5lcywgc3RhdCwgZm9ybWF0KToKKyAgICBmYWlsZWQgPSB0ZXJtaW5hbHJlcG9ydGVy
LnN0YXRzLmdldChzdGF0KQorICAgIGlmIGZhaWxlZDoKKyAgICAgICAgZm9yIHJlcCBpbiBmYWls
ZWQ6CisgICAgICAgICAgICBwb3MgPSB0ZXJtaW5hbHJlcG9ydGVyLmNvbmZpZy5jd2RfcmVsYXRp
dmVfbm9kZWlkKHJlcC5ub2RlaWQpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoZm9ybWF0ICUo
cG9zLCkpCisKK2RlZiBzaG93X3hmYWlsZWQodGVybWluYWxyZXBvcnRlciwgbGluZXMpOgorICAg
IHhmYWlsZWQgPSB0ZXJtaW5hbHJlcG9ydGVyLnN0YXRzLmdldCgieGZhaWxlZCIpCisgICAgaWYg
eGZhaWxlZDoKKyAgICAgICAgZm9yIHJlcCBpbiB4ZmFpbGVkOgorICAgICAgICAgICAgcG9zID0g
dGVybWluYWxyZXBvcnRlci5jb25maWcuY3dkX3JlbGF0aXZlX25vZGVpZChyZXAubm9kZWlkKQor
ICAgICAgICAgICAgcmVhc29uID0gcmVwLndhc3hmYWlsCisgICAgICAgICAgICBsaW5lcy5hcHBl
bmQoIlhGQUlMICVzIiAlIChwb3MsKSkKKyAgICAgICAgICAgIGlmIHJlYXNvbjoKKyAgICAgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoIiAgIiArIHN0cihyZWFzb24pKQorCitkZWYgc2hvd194cGFz
c2VkKHRlcm1pbmFscmVwb3J0ZXIsIGxpbmVzKToKKyAgICB4cGFzc2VkID0gdGVybWluYWxyZXBv
cnRlci5zdGF0cy5nZXQoInhwYXNzZWQiKQorICAgIGlmIHhwYXNzZWQ6CisgICAgICAgIGZvciBy
ZXAgaW4geHBhc3NlZDoKKyAgICAgICAgICAgIHBvcyA9IHRlcm1pbmFscmVwb3J0ZXIuY29uZmln
LmN3ZF9yZWxhdGl2ZV9ub2RlaWQocmVwLm5vZGVpZCkKKyAgICAgICAgICAgIHJlYXNvbiA9IHJl
cC53YXN4ZmFpbAorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCJYUEFTUyAlcyAlcyIgJShwb3Ms
IHJlYXNvbikpCisKK2RlZiBjYWNoZWRfZXZhbChjb25maWcsIGV4cHIsIGQpOgorICAgIGlmIG5v
dCBoYXNhdHRyKGNvbmZpZywgJ19ldmFsY2FjaGUnKToKKyAgICAgICAgY29uZmlnLl9ldmFsY2Fj
aGUgPSB7fQorICAgIHRyeToKKyAgICAgICAgcmV0dXJuIGNvbmZpZy5fZXZhbGNhY2hlW2V4cHJd
CisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICBpbXBvcnQgX3B5dGVzdC5fY29kZQorICAg
ICAgICBleHByY29kZSA9IF9weXRlc3QuX2NvZGUuY29tcGlsZShleHByLCBtb2RlPSJldmFsIikK
KyAgICAgICAgY29uZmlnLl9ldmFsY2FjaGVbZXhwcl0gPSB4ID0gZXZhbChleHByY29kZSwgZCkK
KyAgICAgICAgcmV0dXJuIHgKKworCitkZWYgZm9sZGVkX3NraXBzKHNraXBwZWQpOgorICAgIGQg
PSB7fQorICAgIGZvciBldmVudCBpbiBza2lwcGVkOgorICAgICAgICBrZXkgPSBldmVudC5sb25n
cmVwcgorICAgICAgICBhc3NlcnQgbGVuKGtleSkgPT0gMywgKGV2ZW50LCBrZXkpCisgICAgICAg
IGQuc2V0ZGVmYXVsdChrZXksIFtdKS5hcHBlbmQoZXZlbnQpCisgICAgbCA9IFtdCisgICAgZm9y
IGtleSwgZXZlbnRzIGluIGQuaXRlbXMoKToKKyAgICAgICAgbC5hcHBlbmQoKGxlbihldmVudHMp
LCkgKyBrZXkpCisgICAgcmV0dXJuIGwKKworZGVmIHNob3dfc2tpcHBlZCh0ZXJtaW5hbHJlcG9y
dGVyLCBsaW5lcyk6CisgICAgdHIgPSB0ZXJtaW5hbHJlcG9ydGVyCisgICAgc2tpcHBlZCA9IHRy
LnN0YXRzLmdldCgnc2tpcHBlZCcsIFtdKQorICAgIGlmIHNraXBwZWQ6CisgICAgICAgICNpZiBu
b3QgdHIuaGFzb3B0KCdza2lwcGVkJyk6CisgICAgICAgICMgICAgdHIud3JpdGVfbGluZSgKKyAg
ICAgICAgIyAgICAgICAgIiVkIHNraXBwZWQgdGVzdHMsIHNwZWNpZnkgLXJzIGZvciBtb3JlIGlu
Zm8iICUKKyAgICAgICAgIyAgICAgICAgbGVuKHNraXBwZWQpKQorICAgICAgICAjICAgIHJldHVy
bgorICAgICAgICBmc2tpcHMgPSBmb2xkZWRfc2tpcHMoc2tpcHBlZCkKKyAgICAgICAgaWYgZnNr
aXBzOgorICAgICAgICAgICAgI3RyLndyaXRlX3NlcCgiXyIsICJza2lwcGVkIHRlc3Qgc3VtbWFy
eSIpCisgICAgICAgICAgICBmb3IgbnVtLCBmc3BhdGgsIGxpbmVubywgcmVhc29uIGluIGZza2lw
czoKKyAgICAgICAgICAgICAgICBpZiByZWFzb24uc3RhcnRzd2l0aCgiU2tpcHBlZDogIik6Cisg
ICAgICAgICAgICAgICAgICAgIHJlYXNvbiA9IHJlYXNvbls5Ol0KKyAgICAgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoIlNLSVAgWyVkXSAlczolZDogJXMiICUKKyAgICAgICAgICAgICAgICAgICAg
KG51bSwgZnNwYXRoLCBsaW5lbm8sIHJlYXNvbikpCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0
cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3Qvc3RhbmRhbG9uZXRlbXBsYXRlLnB5
IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L3N0YW5k
YWxvbmV0ZW1wbGF0ZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u
NDg0ZDVkMWIyNWYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93
M2MvdG9vbHMvcHl0ZXN0L19weXRlc3Qvc3RhbmRhbG9uZXRlbXBsYXRlLnB5CkBAIC0wLDAgKzEs
ODkgQEAKKyMhIC91c3IvYmluL2VudiBweXRob24KKworIyBIaSBUaGVyZSEKKyMgWW91IG1heSBi
ZSB3b25kZXJpbmcgd2hhdCB0aGlzIGdpYW50IGJsb2Igb2YgYmluYXJ5IGRhdGEgaGVyZSBpcywg
eW91IG1pZ2h0CisjIGV2ZW4gYmUgd29ycmllZCB0aGF0IHdlJ3JlIHVwIHRvIHNvbWV0aGluZyBu
ZWZhcmlvdXMgKGdvb2QgZm9yIHlvdSBmb3IgYmVpbmcKKyMgcGFyYW5vaWQhKS4gVGhpcyBpcyBh
IGJhc2U2NCBlbmNvZGluZyBvZiBhIHppcCBmaWxlLCB0aGlzIHppcCBmaWxlIGNvbnRhaW5zCisj
IGEgZnVsbHkgZnVuY3Rpb25hbCBiYXNpYyBweXRlc3Qgc2NyaXB0LgorIworIyBQeXRlc3QgaXMg
YSB0aGluZyB0aGF0IHRlc3RzIHBhY2thZ2VzLCBweXRlc3QgaXRzZWxmIGlzIGEgcGFja2FnZSB0
aGF0IHNvbWUtCisjIG9uZSBtaWdodCB3YW50IHRvIGluc3RhbGwsIGVzcGVjaWFsbHkgaWYgdGhl
eSdyZSBsb29raW5nIHRvIHJ1biB0ZXN0cyBpbnNpZGUKKyMgc29tZSBwYWNrYWdlIHRoZXkgd2Fu
dCB0byBpbnN0YWxsLiBQeXRlc3QgaGFzIGEgbG90IG9mIGNvZGUgdG8gY29sbGVjdCBhbmQKKyMg
ZXhlY3V0ZSB0ZXN0cywgYW5kIG90aGVyIHN1Y2ggc29ydCBvZiAidHJpYmFsIGtub3dsZWRnZSIg
dGhhdCBoYXMgYmVlbiBlbi0KKyMgY29kZWQgaW4gaXRzIGNvZGUgYmFzZS4gQmVjYXVzZSBvZiB0
aGlzIHdlIGJhc2ljYWxseSBpbmNsdWRlIGEgYmFzaWMgY29weQorIyBvZiBweXRlc3QgaW5zaWRl
IHRoaXMgYmxvYi4gV2UgZG8gdGhpcyAgYmVjYXVzZSBpdCBsZXQncyB5b3UgYXMgYSBtYWludGFp
bmVyCisjIG9yIGFwcGxpY2F0aW9uIGRldmVsb3BlciB3aG8gd2FudHMgcGVvcGxlIHdobyBkb24n
dCBkZWFsIHdpdGggcHl0aG9uIG11Y2ggdG8KKyMgZWFzaWx5IHJ1biB0ZXN0cyB3aXRob3V0IGlu
c3RhbGxpbmcgdGhlIGNvbXBsZXRlIHB5dGVzdCBwYWNrYWdlLgorIworIyBJZiB5b3UncmUgd29u
ZGVyaW5nIGhvdyB0aGlzIGlzIGNyZWF0ZWQ6IHlvdSBjYW4gY3JlYXRlIGl0IHlvdXJzZWxmIGlm
IHlvdQorIyBoYXZlIGEgY29tcGxldGUgcHl0ZXN0IGluc3RhbGxhdGlvbiBieSB1c2luZyB0aGlz
IGNvbW1hbmQgb24gdGhlIGNvbW1hbmQtCisjIGxpbmU6IGBgcHkudGVzdCAtLWdlbnNjcmlwdD1y
dW50ZXN0cy5weWBgLgorCitzb3VyY2VzID0gIiIiCitAU09VUkNFU0AiIiIKKworaW1wb3J0IHN5
cworaW1wb3J0IGJhc2U2NAoraW1wb3J0IHpsaWIKKworY2xhc3MgRGljdEltcG9ydGVyKG9iamVj
dCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNvdXJjZXMpOgorICAgICAgICBzZWxmLnNvdXJj
ZXMgPSBzb3VyY2VzCisKKyAgICBkZWYgZmluZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUsIHBhdGg9
Tm9uZSk6CisgICAgICAgIGlmIGZ1bGxuYW1lID09ICJhcmdwYXJzZSIgYW5kIHN5cy52ZXJzaW9u
X2luZm8gPj0gKDIsNyk6CisgICAgICAgICAgICAjIHdlIHdlcmUgZ2VuZXJhdGVkIHdpdGggPHB5
dGhvbjIuNyAod2hpY2ggcHVsbHMgaW4gYXJncGFyc2UpCisgICAgICAgICAgICAjIGJ1dCB3ZSBh
cmUgcnVubmluZyBub3cgb24gYSBzdGRsaWIgd2hpY2ggaGFzIGl0LCBzbyB1c2UgdGhhdC4KKyAg
ICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGlmIGZ1bGxuYW1lIGluIHNlbGYuc291cmNl
czoKKyAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgIGlmIGZ1bGxuYW1lICsgJy5fX2lu
aXRfXycgaW4gc2VsZi5zb3VyY2VzOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAg
cmV0dXJuIE5vbmUKKworICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBmdWxsbmFtZSk6CisgICAg
ICAgICMgcHJpbnQgImxvYWRfbW9kdWxlOiIsICBmdWxsbmFtZQorICAgICAgICBmcm9tIHR5cGVz
IGltcG9ydCBNb2R1bGVUeXBlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHMgPSBzZWxmLnNv
dXJjZXNbZnVsbG5hbWVdCisgICAgICAgICAgICBpc19wa2cgPSBGYWxzZQorICAgICAgICBleGNl
cHQgS2V5RXJyb3I6CisgICAgICAgICAgICBzID0gc2VsZi5zb3VyY2VzW2Z1bGxuYW1lICsgJy5f
X2luaXRfXyddCisgICAgICAgICAgICBpc19wa2cgPSBUcnVlCisKKyAgICAgICAgY28gPSBjb21w
aWxlKHMsIGZ1bGxuYW1lLCAnZXhlYycpCisgICAgICAgIG1vZHVsZSA9IHN5cy5tb2R1bGVzLnNl
dGRlZmF1bHQoZnVsbG5hbWUsIE1vZHVsZVR5cGUoZnVsbG5hbWUpKQorICAgICAgICBtb2R1bGUu
X19maWxlX18gPSAiJXMvJXMiICUgKF9fZmlsZV9fLCBmdWxsbmFtZSkKKyAgICAgICAgbW9kdWxl
Ll9fbG9hZGVyX18gPSBzZWxmCisgICAgICAgIGlmIGlzX3BrZzoKKyAgICAgICAgICAgIG1vZHVs
ZS5fX3BhdGhfXyA9IFtmdWxsbmFtZV0KKworICAgICAgICBkb19leGVjKGNvLCBtb2R1bGUuX19k
aWN0X18pICMgbm9xYQorICAgICAgICByZXR1cm4gc3lzLm1vZHVsZXNbZnVsbG5hbWVdCisKKyAg
ICBkZWYgZ2V0X3NvdXJjZShzZWxmLCBuYW1lKToKKyAgICAgICAgcmVzID0gc2VsZi5zb3VyY2Vz
LmdldChuYW1lKQorICAgICAgICBpZiByZXMgaXMgTm9uZToKKyAgICAgICAgICAgIHJlcyA9IHNl
bGYuc291cmNlcy5nZXQobmFtZSArICcuX19pbml0X18nKQorICAgICAgICByZXR1cm4gcmVzCisK
K2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdHJ5OgorICAgICAgICBpbXBvcnQgcGtn
X3Jlc291cmNlcyAgIyBub3FhCisgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICBzeXMu
c3RkZXJyLndyaXRlKCJFUlJPUjogc2V0dXB0b29scyBub3QgaW5zdGFsbGVkXG4iKQorICAgICAg
ICBzeXMuZXhpdCgyKQorICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPj0gKDMsIDApOgorICAgICAg
ICBleGVjKCJkZWYgZG9fZXhlYyhjbywgbG9jKTogZXhlYyhjbywgbG9jKVxuIikKKyAgICAgICAg
aW1wb3J0IHBpY2tsZQorICAgICAgICBzb3VyY2VzID0gc291cmNlcy5lbmNvZGUoImFzY2lpIikg
IyBlbnN1cmUgYnl0ZXMKKyAgICAgICAgc291cmNlcyA9IHBpY2tsZS5sb2Fkcyh6bGliLmRlY29t
cHJlc3MoYmFzZTY0LmRlY29kZWJ5dGVzKHNvdXJjZXMpKSkKKyAgICBlbHNlOgorICAgICAgICBp
bXBvcnQgY1BpY2tsZSBhcyBwaWNrbGUKKyAgICAgICAgZXhlYygiZGVmIGRvX2V4ZWMoY28sIGxv
Yyk6IGV4ZWMgY28gaW4gbG9jXG4iKQorICAgICAgICBzb3VyY2VzID0gcGlja2xlLmxvYWRzKHps
aWIuZGVjb21wcmVzcyhiYXNlNjQuZGVjb2Rlc3RyaW5nKHNvdXJjZXMpKSkKKworICAgIGltcG9y
dGVyID0gRGljdEltcG9ydGVyKHNvdXJjZXMpCisgICAgc3lzLm1ldGFfcGF0aC5pbnNlcnQoMCwg
aW1wb3J0ZXIpCisgICAgZW50cnkgPSAiQEVOVFJZQCIKKyAgICBkb19leGVjKGVudHJ5LCBsb2Nh
bHMoKSkgIyBub3FhCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9v
bHMvcHl0ZXN0L19weXRlc3QvdGVybWluYWwucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93
M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvdGVybWluYWwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAuLjgyNWY1NTNlZjJjCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJp
dmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L3Rlcm1pbmFsLnB5CkBA
IC0wLDAgKzEsNTkzIEBACisiIiIgdGVybWluYWwgcmVwb3J0aW5nIG9mIHRoZSBmdWxsIHRlc3Rp
bmcgcHJvY2Vzcy4KKworVGhpcyBpcyBhIGdvb2Qgc291cmNlIGZvciBsb29raW5nIGF0IHRoZSB2
YXJpb3VzIHJlcG9ydGluZyBob29rcy4KKyIiIgorZnJvbSBfcHl0ZXN0Lm1haW4gaW1wb3J0IEVY
SVRfT0ssIEVYSVRfVEVTVFNGQUlMRUQsIEVYSVRfSU5URVJSVVBURUQsIFwKKyAgICBFWElUX1VT
QUdFRVJST1IsIEVYSVRfTk9URVNUU0NPTExFQ1RFRAoraW1wb3J0IHB5dGVzdAoraW1wb3J0IHB5
CitpbXBvcnQgc3lzCitpbXBvcnQgdGltZQoraW1wb3J0IHBsYXRmb3JtCisKK2ltcG9ydCBfcHl0
ZXN0Ll9wbHVnZ3kgYXMgcGx1Z2d5CisKKworZGVmIHB5dGVzdF9hZGRvcHRpb24ocGFyc2VyKToK
KyAgICBncm91cCA9IHBhcnNlci5nZXRncm91cCgidGVybWluYWwgcmVwb3J0aW5nIiwgInJlcG9y
dGluZyIsIGFmdGVyPSJnZW5lcmFsIikKKyAgICBncm91cC5fYWRkb3B0aW9uKCctdicsICctLXZl
cmJvc2UnLCBhY3Rpb249ImNvdW50IiwKKyAgICAgICAgICAgICAgIGRlc3Q9InZlcmJvc2UiLCBk
ZWZhdWx0PTAsIGhlbHA9ImluY3JlYXNlIHZlcmJvc2l0eS4iKSwKKyAgICBncm91cC5fYWRkb3B0
aW9uKCctcScsICctLXF1aWV0JywgYWN0aW9uPSJjb3VudCIsCisgICAgICAgICAgICAgICBkZXN0
PSJxdWlldCIsIGRlZmF1bHQ9MCwgaGVscD0iZGVjcmVhc2UgdmVyYm9zaXR5LiIpLAorICAgIGdy
b3VwLl9hZGRvcHRpb24oJy1yJywKKyAgICAgICAgIGFjdGlvbj0ic3RvcmUiLCBkZXN0PSJyZXBv
cnRjaGFycyIsIGRlZmF1bHQ9Tm9uZSwgbWV0YXZhcj0iY2hhcnMiLAorICAgICAgICAgaGVscD0i
c2hvdyBleHRyYSB0ZXN0IHN1bW1hcnkgaW5mbyBhcyBzcGVjaWZpZWQgYnkgY2hhcnMgKGYpYWls
ZWQsICIKKyAgICAgICAgICAgICAgIihFKWVycm9yLCAocylza2lwcGVkLCAoeClmYWlsZWQsIChY
KXBhc3NlZCAodylweXRlc3Qtd2FybmluZ3MgIgorICAgICAgICAgICAgICAiKHApcGFzc2VkLCAo
UClwYXNzZWQgd2l0aCBvdXRwdXQsIChhKWFsbCBleGNlcHQgcFAuIikKKyAgICBncm91cC5fYWRk
b3B0aW9uKCctbCcsICctLXNob3dsb2NhbHMnLAorICAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVl
IiwgZGVzdD0ic2hvd2xvY2FscyIsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICBoZWxwPSJzaG93
IGxvY2FscyBpbiB0cmFjZWJhY2tzIChkaXNhYmxlZCBieSBkZWZhdWx0KS4iKQorICAgIGdyb3Vw
Ll9hZGRvcHRpb24oJy0tcmVwb3J0JywKKyAgICAgICAgIGFjdGlvbj0ic3RvcmUiLCBkZXN0PSJy
ZXBvcnQiLCBkZWZhdWx0PU5vbmUsIG1ldGF2YXI9Im9wdHMiLAorICAgICAgICAgaGVscD0iKGRl
cHJlY2F0ZWQsIHVzZSAtcikiKQorICAgIGdyb3VwLl9hZGRvcHRpb24oJy0tdGInLCBtZXRhdmFy
PSJzdHlsZSIsCisgICAgICAgICAgICAgICBhY3Rpb249InN0b3JlIiwgZGVzdD0idGJzdHlsZSIs
IGRlZmF1bHQ9J2F1dG8nLAorICAgICAgICAgICAgICAgY2hvaWNlcz1bJ2F1dG8nLCAnbG9uZycs
ICdzaG9ydCcsICdubycsICdsaW5lJywgJ25hdGl2ZSddLAorICAgICAgICAgICAgICAgaGVscD0i
dHJhY2ViYWNrIHByaW50IG1vZGUgKGF1dG8vbG9uZy9zaG9ydC9saW5lL25hdGl2ZS9ubykuIikK
KyAgICBncm91cC5fYWRkb3B0aW9uKCctLWZ1bGx0cmFjZScsICctLWZ1bGwtdHJhY2UnLAorICAg
ICAgICAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAg
ICAgICAgIGhlbHA9ImRvbid0IGN1dCBhbnkgdHJhY2ViYWNrcyAoZGVmYXVsdCBpcyB0byBjdXQp
LiIpCisgICAgZ3JvdXAuX2FkZG9wdGlvbignLS1jb2xvcicsIG1ldGF2YXI9ImNvbG9yIiwKKyAg
ICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmUiLCBkZXN0PSJjb2xvciIsIGRlZmF1bHQ9J2F1dG8n
LAorICAgICAgICAgICAgICAgY2hvaWNlcz1bJ3llcycsICdubycsICdhdXRvJ10sCisgICAgICAg
ICAgICAgICBoZWxwPSJjb2xvciB0ZXJtaW5hbCBvdXRwdXQgKHllcy9uby9hdXRvKS4iKQorCitk
ZWYgcHl0ZXN0X2NvbmZpZ3VyZShjb25maWcpOgorICAgIGNvbmZpZy5vcHRpb24udmVyYm9zZSAt
PSBjb25maWcub3B0aW9uLnF1aWV0CisgICAgcmVwb3J0ZXIgPSBUZXJtaW5hbFJlcG9ydGVyKGNv
bmZpZywgc3lzLnN0ZG91dCkKKyAgICBjb25maWcucGx1Z2lubWFuYWdlci5yZWdpc3RlcihyZXBv
cnRlciwgJ3Rlcm1pbmFscmVwb3J0ZXInKQorICAgIGlmIGNvbmZpZy5vcHRpb24uZGVidWcgb3Ig
Y29uZmlnLm9wdGlvbi50cmFjZWNvbmZpZzoKKyAgICAgICAgZGVmIG15d3JpdGVyKHRhZ3MsIGFy
Z3MpOgorICAgICAgICAgICAgbXNnID0gIiAiLmpvaW4obWFwKHN0ciwgYXJncykpCisgICAgICAg
ICAgICByZXBvcnRlci53cml0ZV9saW5lKCJbdHJhY2Vjb25maWddICIgKyBtc2cpCisgICAgICAg
IGNvbmZpZy50cmFjZS5yb290LnNldHByb2Nlc3NvcigicHl0ZXN0OmNvbmZpZyIsIG15d3JpdGVy
KQorCitkZWYgZ2V0cmVwb3J0b3B0KGNvbmZpZyk6CisgICAgcmVwb3J0b3B0cyA9ICIiCisgICAg
b3B0dmFsdWUgPSBjb25maWcub3B0aW9uLnJlcG9ydAorICAgIGlmIG9wdHZhbHVlOgorICAgICAg
ICBweS5idWlsdGluLnByaW50XygiREVQUkVDQVRFRDogdXNlIC1yIGluc3RlYWQgb2YgLS1yZXBv
cnQgb3B0aW9uLiIsCisgICAgICAgICAgICBmaWxlPXN5cy5zdGRlcnIpCisgICAgICAgIGlmIG9w
dHZhbHVlOgorICAgICAgICAgICAgZm9yIHNldHRpbmcgaW4gb3B0dmFsdWUuc3BsaXQoIiwiKToK
KyAgICAgICAgICAgICAgICBzZXR0aW5nID0gc2V0dGluZy5zdHJpcCgpCisgICAgICAgICAgICAg
ICAgaWYgc2V0dGluZyA9PSAic2tpcHBlZCI6CisgICAgICAgICAgICAgICAgICAgIHJlcG9ydG9w
dHMgKz0gInMiCisgICAgICAgICAgICAgICAgZWxpZiBzZXR0aW5nID09ICJ4ZmFpbGVkIjoKKyAg
ICAgICAgICAgICAgICAgICAgcmVwb3J0b3B0cyArPSAieCIKKyAgICByZXBvcnRjaGFycyA9IGNv
bmZpZy5vcHRpb24ucmVwb3J0Y2hhcnMKKyAgICBpZiByZXBvcnRjaGFyczoKKyAgICAgICAgZm9y
IGNoYXIgaW4gcmVwb3J0Y2hhcnM6CisgICAgICAgICAgICBpZiBjaGFyIG5vdCBpbiByZXBvcnRv
cHRzIGFuZCBjaGFyICE9ICdhJzoKKyAgICAgICAgICAgICAgICByZXBvcnRvcHRzICs9IGNoYXIK
KyAgICAgICAgICAgIGVsaWYgY2hhciA9PSAnYSc6CisgICAgICAgICAgICAgICAgcmVwb3J0b3B0
cyA9ICdmRXN4WHcnCisgICAgcmV0dXJuIHJlcG9ydG9wdHMKKworZGVmIHB5dGVzdF9yZXBvcnRf
dGVzdHN0YXR1cyhyZXBvcnQpOgorICAgIGlmIHJlcG9ydC5wYXNzZWQ6CisgICAgICAgIGxldHRl
ciA9ICIuIgorICAgIGVsaWYgcmVwb3J0LnNraXBwZWQ6CisgICAgICAgIGxldHRlciA9ICJzIgor
ICAgIGVsaWYgcmVwb3J0LmZhaWxlZDoKKyAgICAgICAgbGV0dGVyID0gIkYiCisgICAgICAgIGlm
IHJlcG9ydC53aGVuICE9ICJjYWxsIjoKKyAgICAgICAgICAgIGxldHRlciA9ICJmIgorICAgIHJl
dHVybiByZXBvcnQub3V0Y29tZSwgbGV0dGVyLCByZXBvcnQub3V0Y29tZS51cHBlcigpCisKK2Ns
YXNzIFdhcm5pbmdSZXBvcnQ6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvZGUsIG1lc3NhZ2Us
IG5vZGVpZD1Ob25lLCBmc2xvY2F0aW9uPU5vbmUpOgorICAgICAgICBzZWxmLmNvZGUgPSBjb2Rl
CisgICAgICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2UKKyAgICAgICAgc2VsZi5ub2RlaWQgPSBu
b2RlaWQKKyAgICAgICAgc2VsZi5mc2xvY2F0aW9uID0gZnNsb2NhdGlvbgorCisKK2NsYXNzIFRl
cm1pbmFsUmVwb3J0ZXI6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbmZpZywgZmlsZT1Ob25l
KToKKyAgICAgICAgaW1wb3J0IF9weXRlc3QuY29uZmlnCisgICAgICAgIHNlbGYuY29uZmlnID0g
Y29uZmlnCisgICAgICAgIHNlbGYudmVyYm9zaXR5ID0gc2VsZi5jb25maWcub3B0aW9uLnZlcmJv
c2UKKyAgICAgICAgc2VsZi5zaG93aGVhZGVyID0gc2VsZi52ZXJib3NpdHkgPj0gMAorICAgICAg
ICBzZWxmLnNob3dmc3BhdGggPSBzZWxmLnZlcmJvc2l0eSA+PSAwCisgICAgICAgIHNlbGYuc2hv
d2xvbmd0ZXN0aW5mbyA9IHNlbGYudmVyYm9zaXR5ID4gMAorICAgICAgICBzZWxmLl9udW1jb2xs
ZWN0ZWQgPSAwCisKKyAgICAgICAgc2VsZi5zdGF0cyA9IHt9CisgICAgICAgIHNlbGYuc3RhcnRk
aXIgPSBweS5wYXRoLmxvY2FsKCkKKyAgICAgICAgaWYgZmlsZSBpcyBOb25lOgorICAgICAgICAg
ICAgZmlsZSA9IHN5cy5zdGRvdXQKKyAgICAgICAgc2VsZi5fdHcgPSBzZWxmLndyaXRlciA9IF9w
eXRlc3QuY29uZmlnLmNyZWF0ZV90ZXJtaW5hbF93cml0ZXIoY29uZmlnLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmaWxlKQorICAgICAgICBzZWxmLmN1cnJlbnRmc3BhdGggPSBOb25lCisgICAgICAgIHNlbGYu
cmVwb3J0Y2hhcnMgPSBnZXRyZXBvcnRvcHQoY29uZmlnKQorICAgICAgICBzZWxmLmhhc21hcmt1
cCA9IHNlbGYuX3R3Lmhhc21hcmt1cAorICAgICAgICBzZWxmLmlzYXR0eSA9IGZpbGUuaXNhdHR5
KCkKKworICAgIGRlZiBoYXNvcHQoc2VsZiwgY2hhcik6CisgICAgICAgIGNoYXIgPSB7J3hmYWls
ZWQnOiAneCcsICdza2lwcGVkJzogJ3MnfS5nZXQoY2hhciwgY2hhcikKKyAgICAgICAgcmV0dXJu
IGNoYXIgaW4gc2VsZi5yZXBvcnRjaGFycworCisgICAgZGVmIHdyaXRlX2ZzcGF0aF9yZXN1bHQo
c2VsZiwgbm9kZWlkLCByZXMpOgorICAgICAgICBmc3BhdGggPSBzZWxmLmNvbmZpZy5yb290ZGly
LmpvaW4obm9kZWlkLnNwbGl0KCI6OiIpWzBdKQorICAgICAgICBpZiBmc3BhdGggIT0gc2VsZi5j
dXJyZW50ZnNwYXRoOgorICAgICAgICAgICAgc2VsZi5jdXJyZW50ZnNwYXRoID0gZnNwYXRoCisg
ICAgICAgICAgICBmc3BhdGggPSBzZWxmLnN0YXJ0ZGlyLmJlc3RyZWxwYXRoKGZzcGF0aCkKKyAg
ICAgICAgICAgIHNlbGYuX3R3LmxpbmUoKQorICAgICAgICAgICAgc2VsZi5fdHcud3JpdGUoZnNw
YXRoICsgIiAiKQorICAgICAgICBzZWxmLl90dy53cml0ZShyZXMpCisKKyAgICBkZWYgd3JpdGVf
ZW5zdXJlX3ByZWZpeChzZWxmLCBwcmVmaXgsIGV4dHJhPSIiLCAqKmt3YXJncyk6CisgICAgICAg
IGlmIHNlbGYuY3VycmVudGZzcGF0aCAhPSBwcmVmaXg6CisgICAgICAgICAgICBzZWxmLl90dy5s
aW5lKCkKKyAgICAgICAgICAgIHNlbGYuY3VycmVudGZzcGF0aCA9IHByZWZpeAorICAgICAgICAg
ICAgc2VsZi5fdHcud3JpdGUocHJlZml4KQorICAgICAgICBpZiBleHRyYToKKyAgICAgICAgICAg
IHNlbGYuX3R3LndyaXRlKGV4dHJhLCAqKmt3YXJncykKKyAgICAgICAgICAgIHNlbGYuY3VycmVu
dGZzcGF0aCA9IC0yCisKKyAgICBkZWYgZW5zdXJlX25ld2xpbmUoc2VsZik6CisgICAgICAgIGlm
IHNlbGYuY3VycmVudGZzcGF0aDoKKyAgICAgICAgICAgIHNlbGYuX3R3LmxpbmUoKQorICAgICAg
ICAgICAgc2VsZi5jdXJyZW50ZnNwYXRoID0gTm9uZQorCisgICAgZGVmIHdyaXRlKHNlbGYsIGNv
bnRlbnQsICoqbWFya3VwKToKKyAgICAgICAgc2VsZi5fdHcud3JpdGUoY29udGVudCwgKiptYXJr
dXApCisKKyAgICBkZWYgd3JpdGVfbGluZShzZWxmLCBsaW5lLCAqKm1hcmt1cCk6CisgICAgICAg
IGlmIG5vdCBweS5idWlsdGluLl9pc3RleHQobGluZSk6CisgICAgICAgICAgICBsaW5lID0gcHku
YnVpbHRpbi50ZXh0KGxpbmUsIGVycm9ycz0icmVwbGFjZSIpCisgICAgICAgIHNlbGYuZW5zdXJl
X25ld2xpbmUoKQorICAgICAgICBzZWxmLl90dy5saW5lKGxpbmUsICoqbWFya3VwKQorCisgICAg
ZGVmIHJld3JpdGUoc2VsZiwgbGluZSwgKiptYXJrdXApOgorICAgICAgICBsaW5lID0gc3RyKGxp
bmUpCisgICAgICAgIHNlbGYuX3R3LndyaXRlKCJcciIgKyBsaW5lLCAqKm1hcmt1cCkKKworICAg
IGRlZiB3cml0ZV9zZXAoc2VsZiwgc2VwLCB0aXRsZT1Ob25lLCAqKm1hcmt1cCk6CisgICAgICAg
IHNlbGYuZW5zdXJlX25ld2xpbmUoKQorICAgICAgICBzZWxmLl90dy5zZXAoc2VwLCB0aXRsZSwg
KiptYXJrdXApCisKKyAgICBkZWYgc2VjdGlvbihzZWxmLCB0aXRsZSwgc2VwPSI9IiwgKiprdyk6
CisgICAgICAgIHNlbGYuX3R3LnNlcChzZXAsIHRpdGxlLCAqKmt3KQorCisgICAgZGVmIGxpbmUo
c2VsZiwgbXNnLCAqKmt3KToKKyAgICAgICAgc2VsZi5fdHcubGluZShtc2csICoqa3cpCisKKyAg
ICBkZWYgcHl0ZXN0X2ludGVybmFsZXJyb3Ioc2VsZiwgZXhjcmVwcik6CisgICAgICAgIGZvciBs
aW5lIGluIHB5LmJ1aWx0aW4udGV4dChleGNyZXByKS5zcGxpdCgiXG4iKToKKyAgICAgICAgICAg
IHNlbGYud3JpdGVfbGluZSgiSU5URVJOQUxFUlJPUj4gIiArIGxpbmUpCisgICAgICAgIHJldHVy
biAxCisKKyAgICBkZWYgcHl0ZXN0X2xvZ3dhcm5pbmcoc2VsZiwgY29kZSwgZnNsb2NhdGlvbiwg
bWVzc2FnZSwgbm9kZWlkKToKKyAgICAgICAgd2FybmluZ3MgPSBzZWxmLnN0YXRzLnNldGRlZmF1
bHQoIndhcm5pbmdzIiwgW10pCisgICAgICAgIGlmIGlzaW5zdGFuY2UoZnNsb2NhdGlvbiwgdHVw
bGUpOgorICAgICAgICAgICAgZnNsb2NhdGlvbiA9ICIlczolZCIgJSBmc2xvY2F0aW9uCisgICAg
ICAgIHdhcm5pbmcgPSBXYXJuaW5nUmVwb3J0KGNvZGU9Y29kZSwgZnNsb2NhdGlvbj1mc2xvY2F0
aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlPW1lc3NhZ2UsIG5v
ZGVpZD1ub2RlaWQpCisgICAgICAgIHdhcm5pbmdzLmFwcGVuZCh3YXJuaW5nKQorCisgICAgZGVm
IHB5dGVzdF9wbHVnaW5fcmVnaXN0ZXJlZChzZWxmLCBwbHVnaW4pOgorICAgICAgICBpZiBzZWxm
LmNvbmZpZy5vcHRpb24udHJhY2Vjb25maWc6CisgICAgICAgICAgICBtc2cgPSAiUExVR0lOIHJl
Z2lzdGVyZWQ6ICVzIiAlIChwbHVnaW4sKQorICAgICAgICAgICAgIyBYWFggdGhpcyBldmVudCBt
YXkgaGFwcGVuIGR1cmluZyBzZXR1cC90ZWFyZG93biB0aW1lCisgICAgICAgICAgICAjICAgICB3
aGljaCB1bmZvcnR1bmF0ZWx5IGNhcHR1cmVzIG91ciBvdXRwdXQgaGVyZQorICAgICAgICAgICAg
IyAgICAgd2hpY2ggZ2FyYmxlcyBvdXIgb3V0cHV0IGlmIHdlIHVzZSBzZWxmLndyaXRlX2xpbmUK
KyAgICAgICAgICAgIHNlbGYud3JpdGVfbGluZShtc2cpCisKKyAgICBkZWYgcHl0ZXN0X2Rlc2Vs
ZWN0ZWQoc2VsZiwgaXRlbXMpOgorICAgICAgICBzZWxmLnN0YXRzLnNldGRlZmF1bHQoJ2Rlc2Vs
ZWN0ZWQnLCBbXSkuZXh0ZW5kKGl0ZW1zKQorCisgICAgZGVmIHB5dGVzdF9ydW50ZXN0X2xvZ3N0
YXJ0KHNlbGYsIG5vZGVpZCwgbG9jYXRpb24pOgorICAgICAgICAjIGVuc3VyZSB0aGF0IHRoZSBw
YXRoIGlzIHByaW50ZWQgYmVmb3JlIHRoZQorICAgICAgICAjIDFzdCB0ZXN0IG9mIGEgbW9kdWxl
IHN0YXJ0cyBydW5uaW5nCisgICAgICAgIGlmIHNlbGYuc2hvd2xvbmd0ZXN0aW5mbzoKKyAgICAg
ICAgICAgIGxpbmUgPSBzZWxmLl9sb2NhdGlvbmxpbmUobm9kZWlkLCAqbG9jYXRpb24pCisgICAg
ICAgICAgICBzZWxmLndyaXRlX2Vuc3VyZV9wcmVmaXgobGluZSwgIiIpCisgICAgICAgIGVsaWYg
c2VsZi5zaG93ZnNwYXRoOgorICAgICAgICAgICAgZnNpZCA9IG5vZGVpZC5zcGxpdCgiOjoiKVsw
XQorICAgICAgICAgICAgc2VsZi53cml0ZV9mc3BhdGhfcmVzdWx0KGZzaWQsICIiKQorCisgICAg
ZGVmIHB5dGVzdF9ydW50ZXN0X2xvZ3JlcG9ydChzZWxmLCByZXBvcnQpOgorICAgICAgICByZXAg
PSByZXBvcnQKKyAgICAgICAgcmVzID0gc2VsZi5jb25maWcuaG9vay5weXRlc3RfcmVwb3J0X3Rl
c3RzdGF0dXMocmVwb3J0PXJlcCkKKyAgICAgICAgY2F0LCBsZXR0ZXIsIHdvcmQgPSByZXMKKyAg
ICAgICAgc2VsZi5zdGF0cy5zZXRkZWZhdWx0KGNhdCwgW10pLmFwcGVuZChyZXApCisgICAgICAg
IHNlbGYuX3Rlc3RzX3JhbiA9IFRydWUKKyAgICAgICAgaWYgbm90IGxldHRlciBhbmQgbm90IHdv
cmQ6CisgICAgICAgICAgICAjIHByb2JhYmx5IHBhc3NlZCBzZXR1cC90ZWFyZG93bgorICAgICAg
ICAgICAgcmV0dXJuCisgICAgICAgIGlmIHNlbGYudmVyYm9zaXR5IDw9IDA6CisgICAgICAgICAg
ICBpZiBub3QgaGFzYXR0cihyZXAsICdub2RlJykgYW5kIHNlbGYuc2hvd2ZzcGF0aDoKKyAgICAg
ICAgICAgICAgICBzZWxmLndyaXRlX2ZzcGF0aF9yZXN1bHQocmVwLm5vZGVpZCwgbGV0dGVyKQor
ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl90dy53cml0ZShsZXR0ZXIp
CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHdvcmQsIHR1cGxlKToK
KyAgICAgICAgICAgICAgICB3b3JkLCBtYXJrdXAgPSB3b3JkCisgICAgICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgICAgIGlmIHJlcC5wYXNzZWQ6CisgICAgICAgICAgICAgICAgICAgIG1hcmt1
cCA9IHsnZ3JlZW4nOlRydWV9CisgICAgICAgICAgICAgICAgZWxpZiByZXAuZmFpbGVkOgorICAg
ICAgICAgICAgICAgICAgICBtYXJrdXAgPSB7J3JlZCc6VHJ1ZX0KKyAgICAgICAgICAgICAgICBl
bGlmIHJlcC5za2lwcGVkOgorICAgICAgICAgICAgICAgICAgICBtYXJrdXAgPSB7J3llbGxvdyc6
VHJ1ZX0KKyAgICAgICAgICAgIGxpbmUgPSBzZWxmLl9sb2NhdGlvbmxpbmUocmVwLm5vZGVpZCwg
KnJlcC5sb2NhdGlvbikKKyAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKHJlcCwgJ25vZGUnKToK
KyAgICAgICAgICAgICAgICBzZWxmLndyaXRlX2Vuc3VyZV9wcmVmaXgobGluZSwgd29yZCwgKipt
YXJrdXApCisgICAgICAgICAgICAgICAgI3NlbGYuX3R3LndyaXRlKHdvcmQsICoqbWFya3VwKQor
ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmVuc3VyZV9uZXdsaW5lKCkK
KyAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKHJlcCwgJ25vZGUnKToKKyAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fdHcud3JpdGUoIlslc10gIiAlIHJlcC5ub2RlLmdhdGV3YXkuaWQpCisgICAg
ICAgICAgICAgICAgc2VsZi5fdHcud3JpdGUod29yZCwgKiptYXJrdXApCisgICAgICAgICAgICAg
ICAgc2VsZi5fdHcud3JpdGUoIiAiICsgbGluZSkKKyAgICAgICAgICAgICAgICBzZWxmLmN1cnJl
bnRmc3BhdGggPSAtMgorCisgICAgZGVmIHB5dGVzdF9jb2xsZWN0aW9uKHNlbGYpOgorICAgICAg
ICBpZiBub3Qgc2VsZi5pc2F0dHkgYW5kIHNlbGYuY29uZmlnLm9wdGlvbi52ZXJib3NlID49IDE6
CisgICAgICAgICAgICBzZWxmLndyaXRlKCJjb2xsZWN0aW5nIC4uLiAiLCBib2xkPVRydWUpCisK
KyAgICBkZWYgcHl0ZXN0X2NvbGxlY3RyZXBvcnQoc2VsZiwgcmVwb3J0KToKKyAgICAgICAgaWYg
cmVwb3J0LmZhaWxlZDoKKyAgICAgICAgICAgIHNlbGYuc3RhdHMuc2V0ZGVmYXVsdCgiZXJyb3Ii
LCBbXSkuYXBwZW5kKHJlcG9ydCkKKyAgICAgICAgZWxpZiByZXBvcnQuc2tpcHBlZDoKKyAgICAg
ICAgICAgIHNlbGYuc3RhdHMuc2V0ZGVmYXVsdCgic2tpcHBlZCIsIFtdKS5hcHBlbmQocmVwb3J0
KQorICAgICAgICBpdGVtcyA9IFt4IGZvciB4IGluIHJlcG9ydC5yZXN1bHQgaWYgaXNpbnN0YW5j
ZSh4LCBweXRlc3QuSXRlbSldCisgICAgICAgIHNlbGYuX251bWNvbGxlY3RlZCArPSBsZW4oaXRl
bXMpCisgICAgICAgIGlmIHNlbGYuaXNhdHR5OgorICAgICAgICAgICAgI3NlbGYud3JpdGVfZnNw
YXRoX3Jlc3VsdChyZXBvcnQubm9kZWlkLCAnRScpCisgICAgICAgICAgICBzZWxmLnJlcG9ydF9j
b2xsZWN0KCkKKworICAgIGRlZiByZXBvcnRfY29sbGVjdChzZWxmLCBmaW5hbD1GYWxzZSk6Cisg
ICAgICAgIGlmIHNlbGYuY29uZmlnLm9wdGlvbi52ZXJib3NlIDwgMDoKKyAgICAgICAgICAgIHJl
dHVybgorCisgICAgICAgIGVycm9ycyA9IGxlbihzZWxmLnN0YXRzLmdldCgnZXJyb3InLCBbXSkp
CisgICAgICAgIHNraXBwZWQgPSBsZW4oc2VsZi5zdGF0cy5nZXQoJ3NraXBwZWQnLCBbXSkpCisg
ICAgICAgIGlmIGZpbmFsOgorICAgICAgICAgICAgbGluZSA9ICJjb2xsZWN0ZWQgIgorICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgbGluZSA9ICJjb2xsZWN0aW5nICIKKyAgICAgICAgbGluZSAr
PSBzdHIoc2VsZi5fbnVtY29sbGVjdGVkKSArICIgaXRlbXMiCisgICAgICAgIGlmIGVycm9yczoK
KyAgICAgICAgICAgIGxpbmUgKz0gIiAvICVkIGVycm9ycyIgJSBlcnJvcnMKKyAgICAgICAgaWYg
c2tpcHBlZDoKKyAgICAgICAgICAgIGxpbmUgKz0gIiAvICVkIHNraXBwZWQiICUgc2tpcHBlZAor
ICAgICAgICBpZiBzZWxmLmlzYXR0eToKKyAgICAgICAgICAgIGlmIGZpbmFsOgorICAgICAgICAg
ICAgICAgIGxpbmUgKz0gIiBcbiIKKyAgICAgICAgICAgIHNlbGYucmV3cml0ZShsaW5lLCBib2xk
PVRydWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLndyaXRlX2xpbmUobGluZSkK
KworICAgIGRlZiBweXRlc3RfY29sbGVjdGlvbl9tb2RpZnlpdGVtcyhzZWxmKToKKyAgICAgICAg
c2VsZi5yZXBvcnRfY29sbGVjdChUcnVlKQorCisgICAgQHB5dGVzdC5ob29raW1wbCh0cnlsYXN0
PVRydWUpCisgICAgZGVmIHB5dGVzdF9zZXNzaW9uc3RhcnQoc2VsZiwgc2Vzc2lvbik6CisgICAg
ICAgIHNlbGYuX3Nlc3Npb25zdGFydHRpbWUgPSB0aW1lLnRpbWUoKQorICAgICAgICBpZiBub3Qg
c2VsZi5zaG93aGVhZGVyOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYud3JpdGVf
c2VwKCI9IiwgInRlc3Qgc2Vzc2lvbiBzdGFydHMiLCBib2xkPVRydWUpCisgICAgICAgIHZlcmlu
Zm8gPSBwbGF0Zm9ybS5weXRob25fdmVyc2lvbigpCisgICAgICAgIG1zZyA9ICJwbGF0Zm9ybSAl
cyAtLSBQeXRob24gJXMiICUgKHN5cy5wbGF0Zm9ybSwgdmVyaW5mbykKKyAgICAgICAgaWYgaGFz
YXR0cihzeXMsICdweXB5X3ZlcnNpb25faW5mbycpOgorICAgICAgICAgICAgdmVyaW5mbyA9ICIu
Ii5qb2luKG1hcChzdHIsIHN5cy5weXB5X3ZlcnNpb25faW5mb1s6M10pKQorICAgICAgICAgICAg
bXNnICs9ICJbcHlweS0lcy0lc10iICUgKHZlcmluZm8sIHN5cy5weXB5X3ZlcnNpb25faW5mb1sz
XSkKKyAgICAgICAgbXNnICs9ICIsIHB5dGVzdC0lcywgcHktJXMsIHBsdWdneS0lcyIgJSAoCisg
ICAgICAgICAgICAgICBweXRlc3QuX192ZXJzaW9uX18sIHB5Ll9fdmVyc2lvbl9fLCBwbHVnZ3ku
X192ZXJzaW9uX18pCisgICAgICAgIGlmIHNlbGYudmVyYm9zaXR5ID4gMCBvciBzZWxmLmNvbmZp
Zy5vcHRpb24uZGVidWcgb3IgXAorICAgICAgICAgICBnZXRhdHRyKHNlbGYuY29uZmlnLm9wdGlv
biwgJ3Bhc3RlYmluJywgTm9uZSk6CisgICAgICAgICAgICBtc2cgKz0gIiAtLSAiICsgc3RyKHN5
cy5leGVjdXRhYmxlKQorICAgICAgICBzZWxmLndyaXRlX2xpbmUobXNnKQorICAgICAgICBsaW5l
cyA9IHNlbGYuY29uZmlnLmhvb2sucHl0ZXN0X3JlcG9ydF9oZWFkZXIoCisgICAgICAgICAgICBj
b25maWc9c2VsZi5jb25maWcsIHN0YXJ0ZGlyPXNlbGYuc3RhcnRkaXIpCisgICAgICAgIGxpbmVz
LnJldmVyc2UoKQorICAgICAgICBmb3IgbGluZSBpbiBmbGF0dGVuKGxpbmVzKToKKyAgICAgICAg
ICAgIHNlbGYud3JpdGVfbGluZShsaW5lKQorCisgICAgZGVmIHB5dGVzdF9yZXBvcnRfaGVhZGVy
KHNlbGYsIGNvbmZpZyk6CisgICAgICAgIGluaWZpbGUgPSAiIgorICAgICAgICBpZiBjb25maWcu
aW5pZmlsZToKKyAgICAgICAgICAgIGluaWZpbGUgPSBjb25maWcucm9vdGRpci5iZXN0cmVscGF0
aChjb25maWcuaW5pZmlsZSkKKyAgICAgICAgbGluZXMgPSBbInJvb3RkaXI6ICVzLCBpbmlmaWxl
OiAlcyIgJShjb25maWcucm9vdGRpciwgaW5pZmlsZSldCisKKyAgICAgICAgcGx1Z2luaW5mbyA9
IGNvbmZpZy5wbHVnaW5tYW5hZ2VyLmxpc3RfcGx1Z2luX2Rpc3RpbmZvKCkKKyAgICAgICAgaWYg
cGx1Z2luaW5mbzoKKworICAgICAgICAgICAgbGluZXMuYXBwZW5kKAorICAgICAgICAgICAgICAg
ICJwbHVnaW5zOiAlcyIgJSAiLCAiLmpvaW4oX3BsdWdpbl9uYW1ldmVyc2lvbnMocGx1Z2luaW5m
bykpKQorICAgICAgICByZXR1cm4gbGluZXMKKworICAgIGRlZiBweXRlc3RfY29sbGVjdGlvbl9m
aW5pc2goc2VsZiwgc2Vzc2lvbik6CisgICAgICAgIGlmIHNlbGYuY29uZmlnLm9wdGlvbi5jb2xs
ZWN0b25seToKKyAgICAgICAgICAgIHNlbGYuX3ByaW50Y29sbGVjdGVkaXRlbXMoc2Vzc2lvbi5p
dGVtcykKKyAgICAgICAgICAgIGlmIHNlbGYuc3RhdHMuZ2V0KCdmYWlsZWQnKToKKyAgICAgICAg
ICAgICAgICBzZWxmLl90dy5zZXAoIiEiLCAiY29sbGVjdGlvbiBmYWlsdXJlcyIpCisgICAgICAg
ICAgICAgICAgZm9yIHJlcCBpbiBzZWxmLnN0YXRzLmdldCgnZmFpbGVkJyk6CisgICAgICAgICAg
ICAgICAgICAgIHJlcC50b3Rlcm1pbmFsKHNlbGYuX3R3KQorICAgICAgICAgICAgICAgIHJldHVy
biAxCisgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBpZiBub3Qgc2VsZi5zaG93aGVhZGVy
OgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICNmb3IgaSwgdGVzdGFyZyBpbiBlbnVtZXJh
dGUoc2VsZi5jb25maWcuYXJncyk6CisgICAgICAgICMgICAgc2VsZi53cml0ZV9saW5lKCJ0ZXN0
IHBhdGggJWQ6ICVzIiAlKGkrMSwgdGVzdGFyZykpCisKKyAgICBkZWYgX3ByaW50Y29sbGVjdGVk
aXRlbXMoc2VsZiwgaXRlbXMpOgorICAgICAgICAjIHRvIHByaW50IG91dCBpdGVtcyBhbmQgdGhl
aXIgcGFyZW50IGNvbGxlY3RvcnMKKyAgICAgICAgIyB3ZSB0YWtlIGNhcmUgdG8gbGVhdmUgb3V0
IEluc3RhbmNlcyBha2EgKCkKKyAgICAgICAgIyBiZWNhdXNlIGxhdGVyIHZlcnNpb25zIGFyZSBn
b2luZyB0byBnZXQgcmlkIG9mIHRoZW0gYW55d2F5CisgICAgICAgIGlmIHNlbGYuY29uZmlnLm9w
dGlvbi52ZXJib3NlIDwgMDoKKyAgICAgICAgICAgIGlmIHNlbGYuY29uZmlnLm9wdGlvbi52ZXJi
b3NlIDwgLTE6CisgICAgICAgICAgICAgICAgY291bnRzID0ge30KKyAgICAgICAgICAgICAgICBm
b3IgaXRlbSBpbiBpdGVtczoKKyAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGl0ZW0ubm9kZWlk
LnNwbGl0KCc6OicsIDEpWzBdCisgICAgICAgICAgICAgICAgICAgIGNvdW50c1tuYW1lXSA9IGNv
dW50cy5nZXQobmFtZSwgMCkgKyAxCisgICAgICAgICAgICAgICAgZm9yIG5hbWUsIGNvdW50IGlu
IHNvcnRlZChjb3VudHMuaXRlbXMoKSk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3R3Lmxp
bmUoIiVzOiAlZCIgJSAobmFtZSwgY291bnQpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgICAgICBmb3IgaXRlbSBpbiBpdGVtczoKKyAgICAgICAgICAgICAgICAgICAgbm9kZWlkID0g
aXRlbS5ub2RlaWQKKyAgICAgICAgICAgICAgICAgICAgbm9kZWlkID0gbm9kZWlkLnJlcGxhY2Uo
Ijo6KCk6OiIsICI6OiIpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3R3LmxpbmUobm9kZWlk
KQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHN0YWNrID0gW10KKyAgICAgICAgaW5kZW50
ID0gIiIKKyAgICAgICAgZm9yIGl0ZW0gaW4gaXRlbXM6CisgICAgICAgICAgICBuZWVkZWRfY29s
bGVjdG9ycyA9IGl0ZW0ubGlzdGNoYWluKClbMTpdICMgc3RyaXAgcm9vdCBub2RlCisgICAgICAg
ICAgICB3aGlsZSBzdGFjazoKKyAgICAgICAgICAgICAgICBpZiBzdGFjayA9PSBuZWVkZWRfY29s
bGVjdG9yc1s6bGVuKHN0YWNrKV06CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAg
ICAgICAgICAgc3RhY2sucG9wKCkKKyAgICAgICAgICAgIGZvciBjb2wgaW4gbmVlZGVkX2NvbGxl
Y3RvcnNbbGVuKHN0YWNrKTpdOgorICAgICAgICAgICAgICAgIHN0YWNrLmFwcGVuZChjb2wpCisg
ICAgICAgICAgICAgICAgI2lmIGNvbC5uYW1lID09ICIoKSI6CisgICAgICAgICAgICAgICAgIyAg
ICBjb250aW51ZQorICAgICAgICAgICAgICAgIGluZGVudCA9IChsZW4oc3RhY2spIC0gMSkgKiAi
ICAiCisgICAgICAgICAgICAgICAgc2VsZi5fdHcubGluZSgiJXMlcyIgJSAoaW5kZW50LCBjb2wp
KQorCisgICAgQHB5dGVzdC5ob29raW1wbChob29rd3JhcHBlcj1UcnVlKQorICAgIGRlZiBweXRl
c3Rfc2Vzc2lvbmZpbmlzaChzZWxmLCBleGl0c3RhdHVzKToKKyAgICAgICAgb3V0Y29tZSA9IHlp
ZWxkCisgICAgICAgIG91dGNvbWUuZ2V0X3Jlc3VsdCgpCisgICAgICAgIHNlbGYuX3R3LmxpbmUo
IiIpCisgICAgICAgIHN1bW1hcnlfZXhpdF9jb2RlcyA9ICgKKyAgICAgICAgICAgIEVYSVRfT0ss
IEVYSVRfVEVTVFNGQUlMRUQsIEVYSVRfSU5URVJSVVBURUQsIEVYSVRfVVNBR0VFUlJPUiwKKyAg
ICAgICAgICAgIEVYSVRfTk9URVNUU0NPTExFQ1RFRCkKKyAgICAgICAgaWYgZXhpdHN0YXR1cyBp
biBzdW1tYXJ5X2V4aXRfY29kZXM6CisgICAgICAgICAgICBzZWxmLmNvbmZpZy5ob29rLnB5dGVz
dF90ZXJtaW5hbF9zdW1tYXJ5KHRlcm1pbmFscmVwb3J0ZXI9c2VsZikKKyAgICAgICAgICAgIHNl
bGYuc3VtbWFyeV9lcnJvcnMoKQorICAgICAgICAgICAgc2VsZi5zdW1tYXJ5X2ZhaWx1cmVzKCkK
KyAgICAgICAgICAgIHNlbGYuc3VtbWFyeV93YXJuaW5ncygpCisgICAgICAgICAgICBzZWxmLnN1
bW1hcnlfcGFzc2VzKCkKKyAgICAgICAgaWYgZXhpdHN0YXR1cyA9PSBFWElUX0lOVEVSUlVQVEVE
OgorICAgICAgICAgICAgc2VsZi5fcmVwb3J0X2tleWJvYXJkaW50ZXJydXB0KCkKKyAgICAgICAg
ICAgIGRlbCBzZWxmLl9rZXlib2FyZGludGVycnVwdF9tZW1vCisgICAgICAgIHNlbGYuc3VtbWFy
eV9kZXNlbGVjdGVkKCkKKyAgICAgICAgc2VsZi5zdW1tYXJ5X3N0YXRzKCkKKworICAgIGRlZiBw
eXRlc3Rfa2V5Ym9hcmRfaW50ZXJydXB0KHNlbGYsIGV4Y2luZm8pOgorICAgICAgICBzZWxmLl9r
ZXlib2FyZGludGVycnVwdF9tZW1vID0gZXhjaW5mby5nZXRyZXByKGZ1bmNhcmdzPVRydWUpCisK
KyAgICBkZWYgcHl0ZXN0X3VuY29uZmlndXJlKHNlbGYpOgorICAgICAgICBpZiBoYXNhdHRyKHNl
bGYsICdfa2V5Ym9hcmRpbnRlcnJ1cHRfbWVtbycpOgorICAgICAgICAgICAgc2VsZi5fcmVwb3J0
X2tleWJvYXJkaW50ZXJydXB0KCkKKworICAgIGRlZiBfcmVwb3J0X2tleWJvYXJkaW50ZXJydXB0
KHNlbGYpOgorICAgICAgICBleGNyZXByID0gc2VsZi5fa2V5Ym9hcmRpbnRlcnJ1cHRfbWVtbwor
ICAgICAgICBtc2cgPSBleGNyZXByLnJlcHJjcmFzaC5tZXNzYWdlCisgICAgICAgIHNlbGYud3Jp
dGVfc2VwKCIhIiwgbXNnKQorICAgICAgICBpZiAiS2V5Ym9hcmRJbnRlcnJ1cHQiIGluIG1zZzoK
KyAgICAgICAgICAgIGlmIHNlbGYuY29uZmlnLm9wdGlvbi5mdWxsdHJhY2U6CisgICAgICAgICAg
ICAgICAgZXhjcmVwci50b3Rlcm1pbmFsKHNlbGYuX3R3KQorICAgICAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgICAgICBzZWxmLl90dy5saW5lKCJ0byBzaG93IGEgZnVsbCB0cmFjZWJhY2sgb24g
S2V5Ym9hcmRJbnRlcnJ1cHQgdXNlIC0tZnVsbHRyYWNlIiwgeWVsbG93PVRydWUpCisgICAgICAg
ICAgICAgICAgZXhjcmVwci5yZXByY3Jhc2gudG90ZXJtaW5hbChzZWxmLl90dykKKworICAgIGRl
ZiBfbG9jYXRpb25saW5lKHNlbGYsIG5vZGVpZCwgZnNwYXRoLCBsaW5lbm8sIGRvbWFpbik6Cisg
ICAgICAgIGRlZiBta3JlbChub2RlaWQpOgorICAgICAgICAgICAgbGluZSA9IHNlbGYuY29uZmln
LmN3ZF9yZWxhdGl2ZV9ub2RlaWQobm9kZWlkKQorICAgICAgICAgICAgaWYgZG9tYWluIGFuZCBs
aW5lLmVuZHN3aXRoKGRvbWFpbik6CisgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbOi1sZW4o
ZG9tYWluKV0KKyAgICAgICAgICAgICAgICBsID0gZG9tYWluLnNwbGl0KCJbIikKKyAgICAgICAg
ICAgICAgICBsWzBdID0gbFswXS5yZXBsYWNlKCcuJywgJzo6JykgICMgZG9uJ3QgcmVwbGFjZSAn
LicgaW4gcGFyYW1zCisgICAgICAgICAgICAgICAgbGluZSArPSAiWyIuam9pbihsKQorICAgICAg
ICAgICAgcmV0dXJuIGxpbmUKKyAgICAgICAgIyBjb2xsZWN0X2ZzcGF0aCBjb21lcyBmcm9tIHRl
c3RpZCB3aGljaCBoYXMgYSAiLyItbm9ybWFsaXplZCBwYXRoCisKKyAgICAgICAgaWYgZnNwYXRo
OgorICAgICAgICAgICAgcmVzID0gbWtyZWwobm9kZWlkKS5yZXBsYWNlKCI6OigpIiwgIiIpICAj
IHBhcmVucy1ub3JtYWxpemF0aW9uCisgICAgICAgICAgICBpZiBub2RlaWQuc3BsaXQoIjo6Iilb
MF0gIT0gZnNwYXRoLnJlcGxhY2UoIlxcIiwgIi8iKToKKyAgICAgICAgICAgICAgICByZXMgKz0g
IiA8LSAiICsgc2VsZi5zdGFydGRpci5iZXN0cmVscGF0aChmc3BhdGgpCisgICAgICAgIGVsc2U6
CisgICAgICAgICAgICByZXMgPSAiW2xvY2F0aW9uXSIKKyAgICAgICAgcmV0dXJuIHJlcyArICIg
IgorCisgICAgZGVmIF9nZXRmYWlsdXJlaGVhZGxpbmUoc2VsZiwgcmVwKToKKyAgICAgICAgaWYg
aGFzYXR0cihyZXAsICdsb2NhdGlvbicpOgorICAgICAgICAgICAgZnNwYXRoLCBsaW5lbm8sIGRv
bWFpbiA9IHJlcC5sb2NhdGlvbgorICAgICAgICAgICAgcmV0dXJuIGRvbWFpbgorICAgICAgICBl
bHNlOgorICAgICAgICAgICAgcmV0dXJuICJ0ZXN0IHNlc3Npb24iICMgWFhYPworCisgICAgZGVm
IF9nZXRjcmFzaGxpbmUoc2VsZiwgcmVwKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0
dXJuIHN0cihyZXAubG9uZ3JlcHIucmVwcmNyYXNoKQorICAgICAgICBleGNlcHQgQXR0cmlidXRl
RXJyb3I6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0cihyZXAu
bG9uZ3JlcHIpWzo1MF0KKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gIiIKKworICAgICMKKyAgICAjIHN1bW1hcmllcyBmb3Igc2Vzc2lv
bmZpbmlzaAorICAgICMKKyAgICBkZWYgZ2V0cmVwb3J0cyhzZWxmLCBuYW1lKToKKyAgICAgICAg
bCA9IFtdCisgICAgICAgIGZvciB4IGluIHNlbGYuc3RhdHMuZ2V0KG5hbWUsIFtdKToKKyAgICAg
ICAgICAgIGlmIG5vdCBoYXNhdHRyKHgsICdfcGRic2hvd24nKToKKyAgICAgICAgICAgICAgICBs
LmFwcGVuZCh4KQorICAgICAgICByZXR1cm4gbAorCisgICAgZGVmIHN1bW1hcnlfd2FybmluZ3Mo
c2VsZik6CisgICAgICAgIGlmIHNlbGYuaGFzb3B0KCJ3Iik6CisgICAgICAgICAgICB3YXJuaW5n
cyA9IHNlbGYuc3RhdHMuZ2V0KCJ3YXJuaW5ncyIpCisgICAgICAgICAgICBpZiBub3Qgd2Fybmlu
Z3M6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBzZWxmLndyaXRlX3NlcCgi
PSIsICJweXRlc3Qtd2FybmluZyBzdW1tYXJ5IikKKyAgICAgICAgICAgIGZvciB3IGluIHdhcm5p
bmdzOgorICAgICAgICAgICAgICAgIHNlbGYuX3R3LmxpbmUoIlclcyAlcyAlcyIgJSAody5jb2Rl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdy5mc2xvY2F0aW9uLCB3Lm1lc3NhZ2Up
KQorCisgICAgZGVmIHN1bW1hcnlfcGFzc2VzKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmNvbmZp
Zy5vcHRpb24udGJzdHlsZSAhPSAibm8iOgorICAgICAgICAgICAgaWYgc2VsZi5oYXNvcHQoIlAi
KToKKyAgICAgICAgICAgICAgICByZXBvcnRzID0gc2VsZi5nZXRyZXBvcnRzKCdwYXNzZWQnKQor
ICAgICAgICAgICAgICAgIGlmIG5vdCByZXBvcnRzOgorICAgICAgICAgICAgICAgICAgICByZXR1
cm4KKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlX3NlcCgiPSIsICJQQVNTRVMiKQorICAgICAg
ICAgICAgICAgIGZvciByZXAgaW4gcmVwb3J0czoKKyAgICAgICAgICAgICAgICAgICAgbXNnID0g
c2VsZi5fZ2V0ZmFpbHVyZWhlYWRsaW5lKHJlcCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi53
cml0ZV9zZXAoIl8iLCBtc2cpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX291dHJlcF9zdW1t
YXJ5KHJlcCkKKworICAgIGRlZiBzdW1tYXJ5X2ZhaWx1cmVzKHNlbGYpOgorICAgICAgICBpZiBz
ZWxmLmNvbmZpZy5vcHRpb24udGJzdHlsZSAhPSAibm8iOgorICAgICAgICAgICAgcmVwb3J0cyA9
IHNlbGYuZ2V0cmVwb3J0cygnZmFpbGVkJykKKyAgICAgICAgICAgIGlmIG5vdCByZXBvcnRzOgor
ICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgc2VsZi53cml0ZV9zZXAoIj0iLCAi
RkFJTFVSRVMiKQorICAgICAgICAgICAgZm9yIHJlcCBpbiByZXBvcnRzOgorICAgICAgICAgICAg
ICAgIGlmIHNlbGYuY29uZmlnLm9wdGlvbi50YnN0eWxlID09ICJsaW5lIjoKKyAgICAgICAgICAg
ICAgICAgICAgbGluZSA9IHNlbGYuX2dldGNyYXNobGluZShyZXApCisgICAgICAgICAgICAgICAg
ICAgIHNlbGYud3JpdGVfbGluZShsaW5lKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICAgICAgICAgIG1zZyA9IHNlbGYuX2dldGZhaWx1cmVoZWFkbGluZShyZXApCisgICAgICAg
ICAgICAgICAgICAgIG1hcmt1cCA9IHsncmVkJzogVHJ1ZSwgJ2JvbGQnOiBUcnVlfQorICAgICAg
ICAgICAgICAgICAgICBzZWxmLndyaXRlX3NlcCgiXyIsIG1zZywgKiptYXJrdXApCisgICAgICAg
ICAgICAgICAgICAgIHNlbGYuX291dHJlcF9zdW1tYXJ5KHJlcCkKKworICAgIGRlZiBzdW1tYXJ5
X2Vycm9ycyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5jb25maWcub3B0aW9uLnRic3R5bGUgIT0g
Im5vIjoKKyAgICAgICAgICAgIHJlcG9ydHMgPSBzZWxmLmdldHJlcG9ydHMoJ2Vycm9yJykKKyAg
ICAgICAgICAgIGlmIG5vdCByZXBvcnRzOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAg
ICAgICAgc2VsZi53cml0ZV9zZXAoIj0iLCAiRVJST1JTIikKKyAgICAgICAgICAgIGZvciByZXAg
aW4gc2VsZi5zdGF0c1snZXJyb3InXToKKyAgICAgICAgICAgICAgICBtc2cgPSBzZWxmLl9nZXRm
YWlsdXJlaGVhZGxpbmUocmVwKQorICAgICAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKHJlcCwg
J3doZW4nKToKKyAgICAgICAgICAgICAgICAgICAgIyBjb2xsZWN0CisgICAgICAgICAgICAgICAg
ICAgIG1zZyA9ICJFUlJPUiBjb2xsZWN0aW5nICIgKyBtc2cKKyAgICAgICAgICAgICAgICBlbGlm
IHJlcC53aGVuID09ICJzZXR1cCI6CisgICAgICAgICAgICAgICAgICAgIG1zZyA9ICJFUlJPUiBh
dCBzZXR1cCBvZiAiICsgbXNnCisgICAgICAgICAgICAgICAgZWxpZiByZXAud2hlbiA9PSAidGVh
cmRvd24iOgorICAgICAgICAgICAgICAgICAgICBtc2cgPSAiRVJST1IgYXQgdGVhcmRvd24gb2Yg
IiArIG1zZworICAgICAgICAgICAgICAgIHNlbGYud3JpdGVfc2VwKCJfIiwgbXNnKQorICAgICAg
ICAgICAgICAgIHNlbGYuX291dHJlcF9zdW1tYXJ5KHJlcCkKKworICAgIGRlZiBfb3V0cmVwX3N1
bW1hcnkoc2VsZiwgcmVwKToKKyAgICAgICAgcmVwLnRvdGVybWluYWwoc2VsZi5fdHcpCisgICAg
ICAgIGZvciBzZWNuYW1lLCBjb250ZW50IGluIHJlcC5zZWN0aW9uczoKKyAgICAgICAgICAgIHNl
bGYuX3R3LnNlcCgiLSIsIHNlY25hbWUpCisgICAgICAgICAgICBpZiBjb250ZW50Wy0xOl0gPT0g
IlxuIjoKKyAgICAgICAgICAgICAgICBjb250ZW50ID0gY29udGVudFs6LTFdCisgICAgICAgICAg
ICBzZWxmLl90dy5saW5lKGNvbnRlbnQpCisKKyAgICBkZWYgc3VtbWFyeV9zdGF0cyhzZWxmKToK
KyAgICAgICAgc2Vzc2lvbl9kdXJhdGlvbiA9IHRpbWUudGltZSgpIC0gc2VsZi5fc2Vzc2lvbnN0
YXJ0dGltZQorICAgICAgICAobGluZSwgY29sb3IpID0gYnVpbGRfc3VtbWFyeV9zdGF0c19saW5l
KHNlbGYuc3RhdHMpCisgICAgICAgIG1zZyA9ICIlcyBpbiAlLjJmIHNlY29uZHMiICUgKGxpbmUs
IHNlc3Npb25fZHVyYXRpb24pCisgICAgICAgIG1hcmt1cCA9IHtjb2xvcjogVHJ1ZSwgJ2JvbGQn
OiBUcnVlfQorCisgICAgICAgIGlmIHNlbGYudmVyYm9zaXR5ID49IDA6CisgICAgICAgICAgICBz
ZWxmLndyaXRlX3NlcCgiPSIsIG1zZywgKiptYXJrdXApCisgICAgICAgIGlmIHNlbGYudmVyYm9z
aXR5ID09IC0xOgorICAgICAgICAgICAgc2VsZi53cml0ZV9saW5lKG1zZywgKiptYXJrdXApCisK
KyAgICBkZWYgc3VtbWFyeV9kZXNlbGVjdGVkKHNlbGYpOgorICAgICAgICBpZiAnZGVzZWxlY3Rl
ZCcgaW4gc2VsZi5zdGF0czoKKyAgICAgICAgICAgIGwgPSBbXQorICAgICAgICAgICAgayA9IHNl
bGYuY29uZmlnLm9wdGlvbi5rZXl3b3JkCisgICAgICAgICAgICBpZiBrOgorICAgICAgICAgICAg
ICAgIGwuYXBwZW5kKCItayVzIiAlIGspCisgICAgICAgICAgICBtID0gc2VsZi5jb25maWcub3B0
aW9uLm1hcmtleHByCisgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgIGwuYXBwZW5k
KCItbSAlciIgJSBtKQorICAgICAgICAgICAgaWYgbDoKKyAgICAgICAgICAgICAgICBzZWxmLndy
aXRlX3NlcCgiPSIsICIlZCB0ZXN0cyBkZXNlbGVjdGVkIGJ5ICVyIiAlICgKKyAgICAgICAgICAg
ICAgICAgICAgbGVuKHNlbGYuc3RhdHNbJ2Rlc2VsZWN0ZWQnXSksICIgIi5qb2luKGwpKSwgYm9s
ZD1UcnVlKQorCitkZWYgcmVwcl9weXRob252ZXJzaW9uKHY9Tm9uZSk6CisgICAgaWYgdiBpcyBO
b25lOgorICAgICAgICB2ID0gc3lzLnZlcnNpb25faW5mbworICAgIHRyeToKKyAgICAgICAgcmV0
dXJuICIlcy4lcy4lcy0lcy0lcyIgJSB2CisgICAgZXhjZXB0IChUeXBlRXJyb3IsIFZhbHVlRXJy
b3IpOgorICAgICAgICByZXR1cm4gc3RyKHYpCisKK2RlZiBmbGF0dGVuKGwpOgorICAgIGZvciB4
IGluIGw6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoeCwgKGxpc3QsIHR1cGxlKSk6CisgICAgICAg
ICAgICBmb3IgeSBpbiBmbGF0dGVuKHgpOgorICAgICAgICAgICAgICAgIHlpZWxkIHkKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIHlpZWxkIHgKKworZGVmIGJ1aWxkX3N1bW1hcnlfc3RhdHNf
bGluZShzdGF0cyk6CisgICAga2V5cyA9ICgiZmFpbGVkIHBhc3NlZCBza2lwcGVkIGRlc2VsZWN0
ZWQgIgorICAgICAgICAgICAieGZhaWxlZCB4cGFzc2VkIHdhcm5pbmdzIGVycm9yIikuc3BsaXQo
KQorICAgIGtleV90cmFuc2xhdGlvbiA9IHsnd2FybmluZ3MnOiAncHl0ZXN0LXdhcm5pbmdzJ30K
KyAgICB1bmtub3duX2tleV9zZWVuID0gRmFsc2UKKyAgICBmb3Iga2V5IGluIHN0YXRzLmtleXMo
KToKKyAgICAgICAgaWYga2V5IG5vdCBpbiBrZXlzOgorICAgICAgICAgICAgaWYga2V5OiAjIHNl
dHVwL3RlYXJkb3duIHJlcG9ydHMgaGF2ZSBhbiBlbXB0eSBrZXksIGlnbm9yZSB0aGVtCisgICAg
ICAgICAgICAgICAga2V5cy5hcHBlbmQoa2V5KQorICAgICAgICAgICAgICAgIHVua25vd25fa2V5
X3NlZW4gPSBUcnVlCisgICAgcGFydHMgPSBbXQorICAgIGZvciBrZXkgaW4ga2V5czoKKyAgICAg
ICAgdmFsID0gc3RhdHMuZ2V0KGtleSwgTm9uZSkKKyAgICAgICAgaWYgdmFsOgorICAgICAgICAg
ICAga2V5X25hbWUgPSBrZXlfdHJhbnNsYXRpb24uZ2V0KGtleSwga2V5KQorICAgICAgICAgICAg
cGFydHMuYXBwZW5kKCIlZCAlcyIgJSAobGVuKHZhbCksIGtleV9uYW1lKSkKKworICAgIGlmIHBh
cnRzOgorICAgICAgICBsaW5lID0gIiwgIi5qb2luKHBhcnRzKQorICAgIGVsc2U6CisgICAgICAg
IGxpbmUgPSAibm8gdGVzdHMgcmFuIgorCisgICAgaWYgJ2ZhaWxlZCcgaW4gc3RhdHMgb3IgJ2Vy
cm9yJyBpbiBzdGF0czoKKyAgICAgICAgY29sb3IgPSAncmVkJworICAgIGVsaWYgJ3dhcm5pbmdz
JyBpbiBzdGF0cyBvciB1bmtub3duX2tleV9zZWVuOgorICAgICAgICBjb2xvciA9ICd5ZWxsb3cn
CisgICAgZWxpZiAncGFzc2VkJyBpbiBzdGF0czoKKyAgICAgICAgY29sb3IgPSAnZ3JlZW4nCisg
ICAgZWxzZToKKyAgICAgICAgY29sb3IgPSAneWVsbG93JworCisgICAgcmV0dXJuIChsaW5lLCBj
b2xvcikKKworCitkZWYgX3BsdWdpbl9uYW1ldmVyc2lvbnMocGx1Z2luaW5mbyk6CisgICAgbCA9
IFtdCisgICAgZm9yIHBsdWdpbiwgZGlzdCBpbiBwbHVnaW5pbmZvOgorICAgICAgICAjIGdldHMg
dXMgbmFtZSBhbmQgdmVyc2lvbiEKKyAgICAgICAgbmFtZSA9ICd7ZGlzdC5wcm9qZWN0X25hbWV9
LXtkaXN0LnZlcnNpb259Jy5mb3JtYXQoZGlzdD1kaXN0KQorICAgICAgICAjIHF1ZXN0aW9uYWJs
ZSBjb252ZW5pZW5jZSwgYnV0IGl0IGtlZXBzIHRoaW5ncyBzaG9ydAorICAgICAgICBpZiBuYW1l
LnN0YXJ0c3dpdGgoInB5dGVzdC0iKToKKyAgICAgICAgICAgIG5hbWUgPSBuYW1lWzc6XQorICAg
ICAgICAjIHdlIGRlY2lkZWQgdG8gcHJpbnQgcHl0aG9uIHBhY2thZ2UgbmFtZXMKKyAgICAgICAg
IyB0aGV5IGNhbiBoYXZlIG1vcmUgdGhhbiBvbmUgcGx1Z2luCisgICAgICAgIGlmIG5hbWUgbm90
IGluIGw6CisgICAgICAgICAgICBsLmFwcGVuZChuYW1lKQorICAgIHJldHVybiBsCmRpZmYgLS1n
aXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvdG1w
ZGlyLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0
L3RtcGRpci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZWJjNDhk
YmU1YjIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9v
bHMvcHl0ZXN0L19weXRlc3QvdG1wZGlyLnB5CkBAIC0wLDAgKzEsMTIzIEBACisiIiIgc3VwcG9y
dCBmb3IgcHJvdmlkaW5nIHRlbXBvcmFyeSBkaXJlY3RvcmllcyB0byB0ZXN0IGZ1bmN0aW9ucy4g
ICIiIgoraW1wb3J0IHJlCisKK2ltcG9ydCBweXRlc3QKK2ltcG9ydCBweQorZnJvbSBfcHl0ZXN0
Lm1vbmtleXBhdGNoIGltcG9ydCBtb25rZXlwYXRjaAorCisKK2NsYXNzIFRlbXBkaXJGYWN0b3J5
OgorICAgICIiIkZhY3RvcnkgZm9yIHRlbXBvcmFyeSBkaXJlY3RvcmllcyB1bmRlciB0aGUgY29t
bW9uIGJhc2UgdGVtcCBkaXJlY3RvcnkuCisKKyAgICBUaGUgYmFzZSBkaXJlY3RvcnkgY2FuIGJl
IGNvbmZpZ3VyZWQgdXNpbmcgdGhlIGBgLS1iYXNldGVtcGBgIG9wdGlvbi4KKyAgICAiIiIKKwor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25maWcpOgorICAgICAgICBzZWxmLmNvbmZpZyA9IGNv
bmZpZworICAgICAgICBzZWxmLnRyYWNlID0gY29uZmlnLnRyYWNlLmdldCgidG1wZGlyIikKKwor
ICAgIGRlZiBlbnN1cmV0ZW1wKHNlbGYsIHN0cmluZywgZGlyPTEpOgorICAgICAgICAiIiIgKGRl
cHJlY2F0ZWQpIHJldHVybiB0ZW1wb3JhcnkgZGlyZWN0b3J5IHBhdGggd2l0aAorICAgICAgICAg
ICAgdGhlIGdpdmVuIHN0cmluZyBhcyB0aGUgdHJhaWxpbmcgcGFydC4gIEl0IGlzIHVzdWFsbHkK
KyAgICAgICAgICAgIGJldHRlciB0byB1c2UgdGhlICd0bXBkaXInIGZ1bmN0aW9uIGFyZ3VtZW50
IHdoaWNoCisgICAgICAgICAgICBwcm92aWRlcyBhbiBlbXB0eSB1bmlxdWUtcGVyLXRlc3QtaW52
b2NhdGlvbiBkaXJlY3RvcnkKKyAgICAgICAgICAgIGFuZCBpcyBndWFyYW50ZWVkIHRvIGJlIGVt
cHR5LgorICAgICAgICAiIiIKKyAgICAgICAgI3B5LmxvZy5fYXBpd2FybigiPjEuMSIsICJ1c2Ug
dG1wZGlyIGZ1bmN0aW9uIGFyZ3VtZW50IikKKyAgICAgICAgcmV0dXJuIHNlbGYuZ2V0YmFzZXRl
bXAoKS5lbnN1cmUoc3RyaW5nLCBkaXI9ZGlyKQorCisgICAgZGVmIG1rdGVtcChzZWxmLCBiYXNl
bmFtZSwgbnVtYmVyZWQ9VHJ1ZSk6CisgICAgICAgICIiIkNyZWF0ZSBhIHN1YmRpcmVjdG9yeSBv
ZiB0aGUgYmFzZSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGFuZCByZXR1cm4gaXQuCisgICAgICAgIElm
IGBgbnVtYmVyZWRgYCwgZW5zdXJlIHRoZSBkaXJlY3RvcnkgaXMgdW5pcXVlIGJ5IGFkZGluZyBh
IG51bWJlcgorICAgICAgICBwcmVmaXggZ3JlYXRlciB0aGFuIGFueSBleGlzdGluZyBvbmUuCisg
ICAgICAgICIiIgorICAgICAgICBiYXNldGVtcCA9IHNlbGYuZ2V0YmFzZXRlbXAoKQorICAgICAg
ICBpZiBub3QgbnVtYmVyZWQ6CisgICAgICAgICAgICBwID0gYmFzZXRlbXAubWtkaXIoYmFzZW5h
bWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwID0gcHkucGF0aC5sb2NhbC5tYWtlX251
bWJlcmVkX2RpcihwcmVmaXg9YmFzZW5hbWUsCisgICAgICAgICAgICAgICAga2VlcD0wLCByb290
ZGlyPWJhc2V0ZW1wLCBsb2NrX3RpbWVvdXQ9Tm9uZSkKKyAgICAgICAgc2VsZi50cmFjZSgibWt0
ZW1wIiwgcCkKKyAgICAgICAgcmV0dXJuIHAKKworICAgIGRlZiBnZXRiYXNldGVtcChzZWxmKToK
KyAgICAgICAgIiIiIHJldHVybiBiYXNlIHRlbXBvcmFyeSBkaXJlY3RvcnkuICIiIgorICAgICAg
ICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fYmFzZXRlbXAKKyAgICAgICAgZXhjZXB0
IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgYmFzZXRlbXAgPSBzZWxmLmNvbmZpZy5vcHRp
b24uYmFzZXRlbXAKKyAgICAgICAgICAgIGlmIGJhc2V0ZW1wOgorICAgICAgICAgICAgICAgIGJh
c2V0ZW1wID0gcHkucGF0aC5sb2NhbChiYXNldGVtcCkKKyAgICAgICAgICAgICAgICBpZiBiYXNl
dGVtcC5jaGVjaygpOgorICAgICAgICAgICAgICAgICAgICBiYXNldGVtcC5yZW1vdmUoKQorICAg
ICAgICAgICAgICAgIGJhc2V0ZW1wLm1rZGlyKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICAgICAgdGVtcHJvb3QgPSBweS5wYXRoLmxvY2FsLmdldF90ZW1wcm9vdCgpCisgICAgICAg
ICAgICAgICAgdXNlciA9IGdldF91c2VyKCkKKyAgICAgICAgICAgICAgICBpZiB1c2VyOgorICAg
ICAgICAgICAgICAgICAgICAjIHVzZSBhIHN1Yi1kaXJlY3RvcnkgaW4gdGhlIHRlbXByb290IHRv
IHNwZWVkLXVwCisgICAgICAgICAgICAgICAgICAgICMgbWFrZV9udW1iZXJlZF9kaXIoKSBjYWxs
CisgICAgICAgICAgICAgICAgICAgIHJvb3RkaXIgPSB0ZW1wcm9vdC5qb2luKCdweXRlc3Qtb2Yt
JXMnICUgdXNlcikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBy
b290ZGlyID0gdGVtcHJvb3QKKyAgICAgICAgICAgICAgICByb290ZGlyLmVuc3VyZShkaXI9MSkK
KyAgICAgICAgICAgICAgICBiYXNldGVtcCA9IHB5LnBhdGgubG9jYWwubWFrZV9udW1iZXJlZF9k
aXIocHJlZml4PSdweXRlc3QtJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcm9vdGRpcj1yb290ZGlyKQorICAgICAgICAgICAgc2Vs
Zi5fYmFzZXRlbXAgPSB0ID0gYmFzZXRlbXAucmVhbHBhdGgoKQorICAgICAgICAgICAgc2VsZi50
cmFjZSgibmV3IGJhc2V0ZW1wIiwgdCkKKyAgICAgICAgICAgIHJldHVybiB0CisKKyAgICBkZWYg
ZmluaXNoKHNlbGYpOgorICAgICAgICBzZWxmLnRyYWNlKCJmaW5pc2giKQorCisKK2RlZiBnZXRf
dXNlcigpOgorICAgICIiIlJldHVybiB0aGUgY3VycmVudCB1c2VyIG5hbWUsIG9yIE5vbmUgaWYg
Z2V0dXNlcigpIGRvZXMgbm90IHdvcmsKKyAgICBpbiB0aGUgY3VycmVudCBlbnZpcm9ubWVudCAo
c2VlICMxMDEwKS4KKyAgICAiIiIKKyAgICBpbXBvcnQgZ2V0cGFzcworICAgIHRyeToKKyAgICAg
ICAgcmV0dXJuIGdldHBhc3MuZ2V0dXNlcigpCisgICAgZXhjZXB0IChJbXBvcnRFcnJvciwgS2V5
RXJyb3IpOgorICAgICAgICByZXR1cm4gTm9uZQorCisjIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkK
K1RlbXBkaXJIYW5kbGVyID0gVGVtcGRpckZhY3RvcnkKKworCitkZWYgcHl0ZXN0X2NvbmZpZ3Vy
ZShjb25maWcpOgorICAgICIiIkNyZWF0ZSBhIFRlbXBkaXJGYWN0b3J5IGFuZCBhdHRhY2ggaXQg
dG8gdGhlIGNvbmZpZyBvYmplY3QuCisKKyAgICBUaGlzIGlzIHRvIGNvbXBseSB3aXRoIGV4aXN0
aW5nIHBsdWdpbnMgd2hpY2ggZXhwZWN0IHRoZSBoYW5kbGVyIHRvIGJlCisgICAgYXZhaWxhYmxl
IGF0IHB5dGVzdF9jb25maWd1cmUgdGltZSwgYnV0IGlkZWFsbHkgc2hvdWxkIGJlIG1vdmVkIGVu
dGlyZWx5CisgICAgdG8gdGhlIHRtcGRpcl9mYWN0b3J5IHNlc3Npb24gZml4dHVyZS4KKyAgICAi
IiIKKyAgICBtcCA9IG1vbmtleXBhdGNoKCkKKyAgICB0ID0gVGVtcGRpckZhY3RvcnkoY29uZmln
KQorICAgIGNvbmZpZy5fY2xlYW51cC5leHRlbmQoW21wLnVuZG8sIHQuZmluaXNoXSkKKyAgICBt
cC5zZXRhdHRyKGNvbmZpZywgJ190bXBkaXJoYW5kbGVyJywgdCwgcmFpc2luZz1GYWxzZSkKKyAg
ICBtcC5zZXRhdHRyKHB5dGVzdCwgJ2Vuc3VyZXRlbXAnLCB0LmVuc3VyZXRlbXAsIHJhaXNpbmc9
RmFsc2UpCisKKworQHB5dGVzdC5maXh0dXJlKHNjb3BlPSdzZXNzaW9uJykKK2RlZiB0bXBkaXJf
ZmFjdG9yeShyZXF1ZXN0KToKKyAgICAiIiJSZXR1cm4gYSBUZW1wZGlyRmFjdG9yeSBpbnN0YW5j
ZSBmb3IgdGhlIHRlc3Qgc2Vzc2lvbi4KKyAgICAiIiIKKyAgICByZXR1cm4gcmVxdWVzdC5jb25m
aWcuX3RtcGRpcmhhbmRsZXIKKworCitAcHl0ZXN0LmZpeHR1cmUKK2RlZiB0bXBkaXIocmVxdWVz
dCwgdG1wZGlyX2ZhY3RvcnkpOgorICAgICIiInJldHVybiBhIHRlbXBvcmFyeSBkaXJlY3Rvcnkg
cGF0aCBvYmplY3QKKyAgICB3aGljaCBpcyB1bmlxdWUgdG8gZWFjaCB0ZXN0IGZ1bmN0aW9uIGlu
dm9jYXRpb24sCisgICAgY3JlYXRlZCBhcyBhIHN1YiBkaXJlY3Rvcnkgb2YgdGhlIGJhc2UgdGVt
cG9yYXJ5CisgICAgZGlyZWN0b3J5LiAgVGhlIHJldHVybmVkIG9iamVjdCBpcyBhIGBweS5wYXRo
LmxvY2FsYF8KKyAgICBwYXRoIG9iamVjdC4KKyAgICAiIiIKKyAgICBuYW1lID0gcmVxdWVzdC5u
b2RlLm5hbWUKKyAgICBuYW1lID0gcmUuc3ViKCJbXFddIiwgIl8iLCBuYW1lKQorICAgIE1BWFZB
TCA9IDMwCisgICAgaWYgbGVuKG5hbWUpID4gTUFYVkFMOgorICAgICAgICBuYW1lID0gbmFtZVs6
TUFYVkFMXQorICAgIHggPSB0bXBkaXJfZmFjdG9yeS5ta3RlbXAobmFtZSwgbnVtYmVyZWQ9VHJ1
ZSkKKyAgICByZXR1cm4geApkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNj
L3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L3VuaXR0ZXN0LnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0
ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L3VuaXR0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44MTIwZTk0ZmJmNAotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC91bml0dGVzdC5w
eQpAQCAtMCwwICsxLDIwNSBAQAorIiIiIGRpc2NvdmVyeSBhbmQgcnVubmluZyBvZiBzdGQtbGli
cmFyeSAidW5pdHRlc3QiIHN0eWxlIHRlc3RzLiAiIiIKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQg
YWJzb2x1dGVfaW1wb3J0CisKK2ltcG9ydCBzeXMKK2ltcG9ydCB0cmFjZWJhY2sKKworaW1wb3J0
IHB5dGVzdAorIyBmb3IgdHJhbnNmZXJpbmcgbWFya2VycworaW1wb3J0IF9weXRlc3QuX2NvZGUK
K2Zyb20gX3B5dGVzdC5weXRob24gaW1wb3J0IHRyYW5zZmVyX21hcmtlcnMKK2Zyb20gX3B5dGVz
dC5za2lwcGluZyBpbXBvcnQgTWFya0V2YWx1YXRvcgorCisKK2RlZiBweXRlc3RfcHljb2xsZWN0
X21ha2VpdGVtKGNvbGxlY3RvciwgbmFtZSwgb2JqKToKKyAgICAjIGhhcyB1bml0dGVzdCBiZWVu
IGltcG9ydGVkIGFuZCBpcyBvYmogYSBzdWJjbGFzcyBvZiBpdHMgVGVzdENhc2U/CisgICAgdHJ5
OgorICAgICAgICBpZiBub3QgaXNzdWJjbGFzcyhvYmosIHN5cy5tb2R1bGVzWyJ1bml0dGVzdCJd
LlRlc3RDYXNlKToKKyAgICAgICAgICAgIHJldHVybgorICAgIGV4Y2VwdCBFeGNlcHRpb246Cisg
ICAgICAgIHJldHVybgorICAgICMgeWVzLCBzbyBsZXQncyBjb2xsZWN0IGl0CisgICAgcmV0dXJu
IFVuaXRUZXN0Q2FzZShuYW1lLCBwYXJlbnQ9Y29sbGVjdG9yKQorCisKK2NsYXNzIFVuaXRUZXN0
Q2FzZShweXRlc3QuQ2xhc3MpOgorICAgICMgbWFya2VyIGZvciBmaXh0dXJlbWFuZ2VyLmdldGZp
eHR1cmVpbmZvKCkKKyAgICAjIHRvIGRlY2xhcmUgdGhhdCBvdXIgY2hpbGRyZW4gZG8gbm90IHN1
cHBvcnQgZnVuY2FyZ3MKKyAgICBub2Z1bmNhcmdzID0gVHJ1ZQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIGRlZiBzZXR1cChzZWxmKToKKyAgICAg
ICAgY2xzID0gc2VsZi5vYmoKKyAgICAgICAgaWYgZ2V0YXR0cihjbHMsICdfX3VuaXR0ZXN0X3Nr
aXBfXycsIEZhbHNlKToKKyAgICAgICAgICAgIHJldHVybiAgIyBza2lwcGVkCisgICAgICAgIHNl
dHVwID0gZ2V0YXR0cihjbHMsICdzZXRVcENsYXNzJywgTm9uZSkKKyAgICAgICAgaWYgc2V0dXAg
aXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZXR1cCgpCisgICAgICAgIHRlYXJkb3duID0gZ2V0
YXR0cihjbHMsICd0ZWFyRG93bkNsYXNzJywgTm9uZSkKKyAgICAgICAgaWYgdGVhcmRvd24gaXMg
bm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmFkZGZpbmFsaXplcih0ZWFyZG93bikKKyAgICAg
ICAgc3VwZXIoVW5pdFRlc3RDYXNlLCBzZWxmKS5zZXR1cCgpCisKKyAgICBkZWYgY29sbGVjdChz
ZWxmKToKKyAgICAgICAgZnJvbSB1bml0dGVzdCBpbXBvcnQgVGVzdExvYWRlcgorICAgICAgICBj
bHMgPSBzZWxmLm9iagorICAgICAgICBpZiBub3QgZ2V0YXR0cihjbHMsICJfX3Rlc3RfXyIsIFRy
dWUpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuc2Vzc2lvbi5fZml4dHVyZW1h
bmFnZXIucGFyc2VmYWN0b3JpZXMoc2VsZiwgdW5pdHRlc3Q9VHJ1ZSkKKyAgICAgICAgbG9hZGVy
ID0gVGVzdExvYWRlcigpCisgICAgICAgIG1vZHVsZSA9IHNlbGYuZ2V0cGFyZW50KHB5dGVzdC5N
b2R1bGUpLm9iagorICAgICAgICBmb3VuZHNvbWV0aGluZyA9IEZhbHNlCisgICAgICAgIGZvciBu
YW1lIGluIGxvYWRlci5nZXRUZXN0Q2FzZU5hbWVzKHNlbGYub2JqKToKKyAgICAgICAgICAgIHgg
PSBnZXRhdHRyKHNlbGYub2JqLCBuYW1lKQorICAgICAgICAgICAgZnVuY29iaiA9IGdldGF0dHIo
eCwgJ2ltX2Z1bmMnLCB4KQorICAgICAgICAgICAgdHJhbnNmZXJfbWFya2VycyhmdW5jb2JqLCBj
bHMsIG1vZHVsZSkKKyAgICAgICAgICAgIHlpZWxkIFRlc3RDYXNlRnVuY3Rpb24obmFtZSwgcGFy
ZW50PXNlbGYpCisgICAgICAgICAgICBmb3VuZHNvbWV0aGluZyA9IFRydWUKKworICAgICAgICBp
ZiBub3QgZm91bmRzb21ldGhpbmc6CisgICAgICAgICAgICBydW50ZXN0ID0gZ2V0YXR0cihzZWxm
Lm9iaiwgJ3J1blRlc3QnLCBOb25lKQorICAgICAgICAgICAgaWYgcnVudGVzdCBpcyBub3QgTm9u
ZToKKyAgICAgICAgICAgICAgICB1dCA9IHN5cy5tb2R1bGVzLmdldCgidHdpc3RlZC50cmlhbC51
bml0dGVzdCIsIE5vbmUpCisgICAgICAgICAgICAgICAgaWYgdXQgaXMgTm9uZSBvciBydW50ZXN0
ICE9IHV0LlRlc3RDYXNlLnJ1blRlc3Q6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIFRlc3RD
YXNlRnVuY3Rpb24oJ3J1blRlc3QnLCBwYXJlbnQ9c2VsZikKKworCisKK2NsYXNzIFRlc3RDYXNl
RnVuY3Rpb24ocHl0ZXN0LkZ1bmN0aW9uKToKKyAgICBfZXhjaW5mbyA9IE5vbmUKKworICAgIGRl
ZiBzZXR1cChzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdGNhc2UgPSBzZWxmLnBhcmVudC5vYmoo
c2VsZi5uYW1lKQorICAgICAgICBzZWxmLl9maXhfdW5pdHRlc3Rfc2tpcF9kZWNvcmF0b3IoKQor
ICAgICAgICBzZWxmLl9vYmogPSBnZXRhdHRyKHNlbGYuX3Rlc3RjYXNlLCBzZWxmLm5hbWUpCisg
ICAgICAgIGlmIGhhc2F0dHIoc2VsZi5fdGVzdGNhc2UsICdzZXR1cF9tZXRob2QnKToKKyAgICAg
ICAgICAgIHNlbGYuX3Rlc3RjYXNlLnNldHVwX21ldGhvZChzZWxmLl9vYmopCisgICAgICAgIGlm
IGhhc2F0dHIoc2VsZiwgIl9yZXF1ZXN0Iik6CisgICAgICAgICAgICBzZWxmLl9yZXF1ZXN0Ll9m
aWxsZml4dHVyZXMoKQorCisgICAgZGVmIF9maXhfdW5pdHRlc3Rfc2tpcF9kZWNvcmF0b3Ioc2Vs
Zik6CisgICAgICAgICIiIgorICAgICAgICBUaGUgQHVuaXR0ZXN0LnNraXAgZGVjb3JhdG9yIGNh
bGxzIGZ1bmN0b29scy53cmFwcyhzZWxmLl90ZXN0Y2FzZSkKKyAgICAgICAgVGhlIGNhbGwgdG8g
ZnVuY3Rvb2xzLndyYXBzKCkgZmFpbHMgdW5sZXNzIHNlbGYuX3Rlc3RjYXNlCisgICAgICAgIGhh
cyBhIF9fbmFtZV9fIGF0dHJpYnV0ZS4gVGhpcyBpcyB1c3VhbGx5IGF1dG9tYXRpY2FsbHkgc3Vw
cGxpZWQKKyAgICAgICAgaWYgdGhlIHRlc3QgaXMgYSBmdW5jdGlvbiBvciBtZXRob2QsIGJ1dCB3
ZSBuZWVkIHRvIGFkZCBtYW51YWxseQorICAgICAgICBoZXJlLgorCisgICAgICAgIFNlZSBpc3N1
ZSAjMTE2OQorICAgICAgICAiIiIKKyAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mb1swXSA9PSAy
OgorICAgICAgICAgICAgc2V0YXR0cihzZWxmLl90ZXN0Y2FzZSwgIl9fbmFtZV9fIiwgc2VsZi5u
YW1lKQorCisgICAgZGVmIHRlYXJkb3duKHNlbGYpOgorICAgICAgICBpZiBoYXNhdHRyKHNlbGYu
X3Rlc3RjYXNlLCAndGVhcmRvd25fbWV0aG9kJyk6CisgICAgICAgICAgICBzZWxmLl90ZXN0Y2Fz
ZS50ZWFyZG93bl9tZXRob2Qoc2VsZi5fb2JqKQorCisgICAgZGVmIHN0YXJ0VGVzdChzZWxmLCB0
ZXN0Y2FzZSk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBfYWRkZXhjaW5mbyhzZWxmLCByYXdl
eGNpbmZvKToKKyAgICAgICAgIyB1bndyYXAgcG90ZW50aWFsIGV4Y2VwdGlvbiBpbmZvIChzZWUg
dHdpc3RlZCB0cmlhbCBzdXBwb3J0IGJlbG93KQorICAgICAgICByYXdleGNpbmZvID0gZ2V0YXR0
cihyYXdleGNpbmZvLCAnX3Jhd2V4Y2luZm8nLCByYXdleGNpbmZvKQorICAgICAgICB0cnk6Cisg
ICAgICAgICAgICBleGNpbmZvID0gX3B5dGVzdC5fY29kZS5FeGNlcHRpb25JbmZvKHJhd2V4Y2lu
Zm8pCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICB0cnk6CisgICAgICAg
ICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBsID0gdHJhY2ViYWNrLmZvcm1hdF9l
eGNlcHRpb24oKnJhd2V4Y2luZm8pCisgICAgICAgICAgICAgICAgICAgIGwuaW5zZXJ0KDAsICJO
T1RFOiBJbmNvbXBhdGlibGUgRXhjZXB0aW9uIFJlcHJlc2VudGF0aW9uLCAiCisgICAgICAgICAg
ICAgICAgICAgICAgICAiZGlzcGxheWluZyBuYXRpdmVseTpcblxuIikKKyAgICAgICAgICAgICAg
ICAgICAgcHl0ZXN0LmZhaWwoIiIuam9pbihsKSwgcHl0cmFjZT1GYWxzZSkKKyAgICAgICAgICAg
ICAgICBleGNlcHQgKHB5dGVzdC5mYWlsLkV4Y2VwdGlvbiwgS2V5Ym9hcmRJbnRlcnJ1cHQpOgor
ICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAg
ICAgICAgICAgICAgICAgcHl0ZXN0LmZhaWwoIkVSUk9SOiBVbmtub3duIEluY29tcGF0aWJsZSBF
eGNlcHRpb24gIgorICAgICAgICAgICAgICAgICAgICAgICAgInJlcHJlc2VudGF0aW9uOlxuJXIi
ICUocmF3ZXhjaW5mbywpLCBweXRyYWNlPUZhbHNlKQorICAgICAgICAgICAgZXhjZXB0IEtleWJv
YXJkSW50ZXJydXB0OgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBleGNlcHQg
cHl0ZXN0LmZhaWwuRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIGV4Y2luZm8gPSBfcHl0ZXN0
Ll9jb2RlLkV4Y2VwdGlvbkluZm8oKQorICAgICAgICBzZWxmLl9fZGljdF9fLnNldGRlZmF1bHQo
J19leGNpbmZvJywgW10pLmFwcGVuZChleGNpbmZvKQorCisgICAgZGVmIGFkZEVycm9yKHNlbGYs
IHRlc3RjYXNlLCByYXdleGNpbmZvKToKKyAgICAgICAgc2VsZi5fYWRkZXhjaW5mbyhyYXdleGNp
bmZvKQorICAgIGRlZiBhZGRGYWlsdXJlKHNlbGYsIHRlc3RjYXNlLCByYXdleGNpbmZvKToKKyAg
ICAgICAgc2VsZi5fYWRkZXhjaW5mbyhyYXdleGNpbmZvKQorCisgICAgZGVmIGFkZFNraXAoc2Vs
ZiwgdGVzdGNhc2UsIHJlYXNvbik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHB5dGVzdC5z
a2lwKHJlYXNvbikKKyAgICAgICAgZXhjZXB0IHB5dGVzdC5za2lwLkV4Y2VwdGlvbjoKKyAgICAg
ICAgICAgIHNlbGYuX2V2YWxza2lwID0gTWFya0V2YWx1YXRvcihzZWxmLCAnU2tpcFRlc3QnKQor
ICAgICAgICAgICAgc2VsZi5fZXZhbHNraXAucmVzdWx0ID0gVHJ1ZQorICAgICAgICAgICAgc2Vs
Zi5fYWRkZXhjaW5mbyhzeXMuZXhjX2luZm8oKSkKKworICAgIGRlZiBhZGRFeHBlY3RlZEZhaWx1
cmUoc2VsZiwgdGVzdGNhc2UsIHJhd2V4Y2luZm8sIHJlYXNvbj0iIik6CisgICAgICAgIHRyeToK
KyAgICAgICAgICAgIHB5dGVzdC54ZmFpbChzdHIocmVhc29uKSkKKyAgICAgICAgZXhjZXB0IHB5
dGVzdC54ZmFpbC5FeGNlcHRpb246CisgICAgICAgICAgICBzZWxmLl9hZGRleGNpbmZvKHN5cy5l
eGNfaW5mbygpKQorCisgICAgZGVmIGFkZFVuZXhwZWN0ZWRTdWNjZXNzKHNlbGYsIHRlc3RjYXNl
LCByZWFzb249IiIpOgorICAgICAgICBzZWxmLl91bmV4cGVjdGVkc3VjY2VzcyA9IHJlYXNvbgor
CisgICAgZGVmIGFkZFN1Y2Nlc3Moc2VsZiwgdGVzdGNhc2UpOgorICAgICAgICBwYXNzCisKKyAg
ICBkZWYgc3RvcFRlc3Qoc2VsZiwgdGVzdGNhc2UpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYg
cnVudGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdGNhc2UocmVzdWx0PXNlbGYpCisKKyAg
ICBkZWYgX3BydW5ldHJhY2ViYWNrKHNlbGYsIGV4Y2luZm8pOgorICAgICAgICBweXRlc3QuRnVu
Y3Rpb24uX3BydW5ldHJhY2ViYWNrKHNlbGYsIGV4Y2luZm8pCisgICAgICAgIHRyYWNlYmFjayA9
IGV4Y2luZm8udHJhY2ViYWNrLmZpbHRlcigKKyAgICAgICAgICAgIGxhbWJkYSB4Om5vdCB4LmZy
YW1lLmZfZ2xvYmFscy5nZXQoJ19fdW5pdHRlc3QnKSkKKyAgICAgICAgaWYgdHJhY2ViYWNrOgor
ICAgICAgICAgICAgZXhjaW5mby50cmFjZWJhY2sgPSB0cmFjZWJhY2sKKworQHB5dGVzdC5ob29r
aW1wbCh0cnlmaXJzdD1UcnVlKQorZGVmIHB5dGVzdF9ydW50ZXN0X21ha2VyZXBvcnQoaXRlbSwg
Y2FsbCk6CisgICAgaWYgaXNpbnN0YW5jZShpdGVtLCBUZXN0Q2FzZUZ1bmN0aW9uKToKKyAgICAg
ICAgaWYgaXRlbS5fZXhjaW5mbzoKKyAgICAgICAgICAgIGNhbGwuZXhjaW5mbyA9IGl0ZW0uX2V4
Y2luZm8ucG9wKDApCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZGVsIGNhbGwu
cmVzdWx0CisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAg
ICAgcGFzcworCisjIHR3aXN0ZWQgdHJpYWwgc3VwcG9ydAorCitAcHl0ZXN0Lmhvb2tpbXBsKGhv
b2t3cmFwcGVyPVRydWUpCitkZWYgcHl0ZXN0X3J1bnRlc3RfcHJvdG9jb2woaXRlbSk6CisgICAg
aWYgaXNpbnN0YW5jZShpdGVtLCBUZXN0Q2FzZUZ1bmN0aW9uKSBhbmQgXAorICAgICAgICd0d2lz
dGVkLnRyaWFsLnVuaXR0ZXN0JyBpbiBzeXMubW9kdWxlczoKKyAgICAgICAgdXQgPSBzeXMubW9k
dWxlc1sndHdpc3RlZC5weXRob24uZmFpbHVyZSddCisgICAgICAgIEZhaWx1cmVfX2luaXRfXyA9
IHV0LkZhaWx1cmUuX19pbml0X18KKyAgICAgICAgY2hlY2tfdGVzdGNhc2VfaW1wbGVtZW50c190
cmlhbF9yZXBvcnRlcigpCisgICAgICAgIGRlZiBleGNzdG9yZShzZWxmLCBleGNfdmFsdWU9Tm9u
ZSwgZXhjX3R5cGU9Tm9uZSwgZXhjX3RiPU5vbmUsCisgICAgICAgICAgICBjYXB0dXJlVmFycz1O
b25lKToKKyAgICAgICAgICAgIGlmIGV4Y192YWx1ZSBpcyBOb25lOgorICAgICAgICAgICAgICAg
IHNlbGYuX3Jhd2V4Y2luZm8gPSBzeXMuZXhjX2luZm8oKQorICAgICAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgICAgICBpZiBleGNfdHlwZSBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBl
eGNfdHlwZSA9IHR5cGUoZXhjX3ZhbHVlKQorICAgICAgICAgICAgICAgIHNlbGYuX3Jhd2V4Y2lu
Zm8gPSAoZXhjX3R5cGUsIGV4Y192YWx1ZSwgZXhjX3RiKQorICAgICAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgICAgIEZhaWx1cmVfX2luaXRfXyhzZWxmLCBleGNfdmFsdWUsIGV4Y190eXBlLCBl
eGNfdGIsCisgICAgICAgICAgICAgICAgICAgIGNhcHR1cmVWYXJzPWNhcHR1cmVWYXJzKQorICAg
ICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgICAgICBGYWlsdXJlX19pbml0
X18oc2VsZiwgZXhjX3ZhbHVlLCBleGNfdHlwZSwgZXhjX3RiKQorICAgICAgICB1dC5GYWlsdXJl
Ll9faW5pdF9fID0gZXhjc3RvcmUKKyAgICAgICAgeWllbGQKKyAgICAgICAgdXQuRmFpbHVyZS5f
X2luaXRfXyA9IEZhaWx1cmVfX2luaXRfXworICAgIGVsc2U6CisgICAgICAgIHlpZWxkCisKKwor
ZGVmIGNoZWNrX3Rlc3RjYXNlX2ltcGxlbWVudHNfdHJpYWxfcmVwb3J0ZXIoZG9uZT1bXSk6Cisg
ICAgaWYgZG9uZToKKyAgICAgICAgcmV0dXJuCisgICAgZnJvbSB6b3BlLmludGVyZmFjZSBpbXBv
cnQgY2xhc3NJbXBsZW1lbnRzCisgICAgZnJvbSB0d2lzdGVkLnRyaWFsLml0cmlhbCBpbXBvcnQg
SVJlcG9ydGVyCisgICAgY2xhc3NJbXBsZW1lbnRzKFRlc3RDYXNlRnVuY3Rpb24sIElSZXBvcnRl
cikKKyAgICBkb25lLmFwcGVuZCgxKQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0
ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L3ZlbmRvcmVkX3BhY2thZ2VzL1JFQURNRS5tZCBi
L1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC92ZW5kb3Jl
ZF9wYWNrYWdlcy9SRUFETUUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLmVhYjdjNzE0ZmIwCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0
ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L3ZlbmRvcmVkX3BhY2thZ2VzL1JFQURNRS5tZApA
QCAtMCwwICsxLDEzIEBACitUaGlzIGRpcmVjdG9yeSB2ZW5kb3JzIHRoZSBgcGx1Z2d5YCBtb2R1
bGUuCisKK0ZvciBhIG1vcmUgZGV0YWlsZWQgZGlzY3Vzc2lvbiBmb3IgdGhlIHJlYXNvbnMgdG8g
dmVuZG9yaW5nIHRoaXMgCitwYWNrYWdlLCBwbGVhc2Ugc2VlIFt0aGlzIGlzc3VlXShodHRwczov
L2dpdGh1Yi5jb20vcHl0ZXN0LWRldi9weXRlc3QvaXNzdWVzLzk0NCkuCisKK1RvIHVwZGF0ZSB0
aGUgY3VycmVudCB2ZXJzaW9uLCBleGVjdXRlOgorCitgYGAKKyQgcGlwIGluc3RhbGwgLVUgcGx1
Z2d5PT08dmVyc2lvbj4gLS1uby1jb21waWxlIC0tdGFyZ2V0PV9weXRlc3QvdmVuZG9yZWRfcGFj
a2FnZXMKK2BgYAorCitBbmQgY29tbWl0IHRoZSBtb2RpZmllZCBmaWxlcy4gVGhlIGBwbHVnZ3kt
PHZlcnNpb24+LmRpc3QtaW5mb2AgZGlyZWN0b3J5IAorY3JlYXRlZCBieSBgcGlwYCBzaG91bGQg
YmUgaWdub3JlZC4KZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29s
cy9weXRlc3QvX3B5dGVzdC92ZW5kb3JlZF9wYWNrYWdlcy9fX2luaXRfXy5weSBiL1dlYkRyaXZl
clRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC92ZW5kb3JlZF9wYWNrYWdl
cy9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZTY5
ZGUyOWJiMmQKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9w
eXRlc3QvX3B5dGVzdC92ZW5kb3JlZF9wYWNrYWdlcy9wbHVnZ3ktMC4zLjEuZGlzdC1pbmZvL0RF
U0NSSVBUSU9OLnJzdCBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3Qv
X3B5dGVzdC92ZW5kb3JlZF9wYWNrYWdlcy9wbHVnZ3ktMC4zLjEuZGlzdC1pbmZvL0RFU0NSSVBU
SU9OLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYWEzYmJmODEy
OTcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMv
cHl0ZXN0L19weXRlc3QvdmVuZG9yZWRfcGFja2FnZXMvcGx1Z2d5LTAuMy4xLmRpc3QtaW5mby9E
RVNDUklQVElPTi5yc3QKQEAgLTAsMCArMSwxMCBAQAorUGx1Z2luIHJlZ2lzdHJhdGlvbiBhbmQg
aG9vayBjYWxsaW5nIGZvciBQeXRob24KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09CisKK1RoaXMgaXMgdGhlIHBsdWdpbiBtYW5hZ2VyIGFzIHVzZWQgYnkg
cHl0ZXN0IGJ1dCBzdHJpcHBlZAorb2YgcHl0ZXN0IHNwZWNpZmljIGRldGFpbHMuCisKK0R1cmlu
ZyB0aGUgMC54IHNlcmllcyB0aGlzIHBsdWdpbiBkb2VzIG5vdCBoYXZlIG11Y2ggZG9jdW1lbnRh
dGlvbgorZXhjZXB0IGV4dGVuc2l2ZSBkb2NzdHJpbmdzIGluIHRoZSBwbHVnZ3kucHkgbW9kdWxl
LgorCisKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRl
c3QvX3B5dGVzdC92ZW5kb3JlZF9wYWNrYWdlcy9wbHVnZ3ktMC4zLjEuZGlzdC1pbmZvL01FVEFE
QVRBIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L3Zl
bmRvcmVkX3BhY2thZ2VzL3BsdWdneS0wLjMuMS5kaXN0LWluZm8vTUVUQURBVEEKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmVjODFmMGE2YmUwCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L3Zl
bmRvcmVkX3BhY2thZ2VzL3BsdWdneS0wLjMuMS5kaXN0LWluZm8vTUVUQURBVEEKQEAgLTAsMCAr
MSwzOSBAQAorTWV0YWRhdGEtVmVyc2lvbjogMi4wCitOYW1lOiBwbHVnZ3kKK1ZlcnNpb246IDAu
My4xCitTdW1tYXJ5OiBwbHVnaW4gYW5kIGhvb2sgY2FsbGluZyBtZWNoYW5pc21zIGZvciBweXRo
b24KK0hvbWUtcGFnZTogVU5LTk9XTgorQXV0aG9yOiBIb2xnZXIgS3Jla2VsCitBdXRob3ItZW1h
aWw6IGhvbGdlciBhdCBtZXJsaW51eC5ldQorTGljZW5zZTogTUlUIGxpY2Vuc2UKK1BsYXRmb3Jt
OiB1bml4CitQbGF0Zm9ybTogbGludXgKK1BsYXRmb3JtOiBvc3gKK1BsYXRmb3JtOiB3aW4zMgor
Q2xhc3NpZmllcjogRGV2ZWxvcG1lbnQgU3RhdHVzIDo6IDQgLSBCZXRhCitDbGFzc2lmaWVyOiBJ
bnRlbmRlZCBBdWRpZW5jZSA6OiBEZXZlbG9wZXJzCitDbGFzc2lmaWVyOiBMaWNlbnNlIDo6IE9T
SSBBcHByb3ZlZCA6OiBNSVQgTGljZW5zZQorQ2xhc3NpZmllcjogT3BlcmF0aW5nIFN5c3RlbSA6
OiBQT1NJWAorQ2xhc3NpZmllcjogT3BlcmF0aW5nIFN5c3RlbSA6OiBNaWNyb3NvZnQgOjogV2lu
ZG93cworQ2xhc3NpZmllcjogT3BlcmF0aW5nIFN5c3RlbSA6OiBNYWNPUyA6OiBNYWNPUyBYCitD
bGFzc2lmaWVyOiBUb3BpYyA6OiBTb2Z0d2FyZSBEZXZlbG9wbWVudCA6OiBUZXN0aW5nCitDbGFz
c2lmaWVyOiBUb3BpYyA6OiBTb2Z0d2FyZSBEZXZlbG9wbWVudCA6OiBMaWJyYXJpZXMKK0NsYXNz
aWZpZXI6IFRvcGljIDo6IFV0aWxpdGllcworQ2xhc3NpZmllcjogUHJvZ3JhbW1pbmcgTGFuZ3Vh
Z2UgOjogUHl0aG9uIDo6IDIKK0NsYXNzaWZpZXI6IFByb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5
dGhvbiA6OiAyLjYKK0NsYXNzaWZpZXI6IFByb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6
OiAyLjcKK0NsYXNzaWZpZXI6IFByb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAzCitD
bGFzc2lmaWVyOiBQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMy4zCitDbGFzc2lm
aWVyOiBQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMy40CitDbGFzc2lmaWVyOiBQ
cm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMy41CisKK1BsdWdpbiByZWdpc3RyYXRp
b24gYW5kIGhvb2sgY2FsbGluZyBmb3IgUHl0aG9uCis9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGlzIHRoZSBwbHVnaW4gbWFuYWdlciBhcyB1
c2VkIGJ5IHB5dGVzdCBidXQgc3RyaXBwZWQKK29mIHB5dGVzdCBzcGVjaWZpYyBkZXRhaWxzLgor
CitEdXJpbmcgdGhlIDAueCBzZXJpZXMgdGhpcyBwbHVnaW4gZG9lcyBub3QgaGF2ZSBtdWNoIGRv
Y3VtZW50YXRpb24KK2V4Y2VwdCBleHRlbnNpdmUgZG9jc3RyaW5ncyBpbiB0aGUgcGx1Z2d5LnB5
IG1vZHVsZS4KKworCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9v
bHMvcHl0ZXN0L19weXRlc3QvdmVuZG9yZWRfcGFja2FnZXMvcGx1Z2d5LTAuMy4xLmRpc3QtaW5m
by9SRUNPUkQgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRl
c3QvdmVuZG9yZWRfcGFja2FnZXMvcGx1Z2d5LTAuMy4xLmRpc3QtaW5mby9SRUNPUkQKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjk2MjY2NzNjNDNjCi0tLSAvZGV2L251
bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0
L3ZlbmRvcmVkX3BhY2thZ2VzL3BsdWdneS0wLjMuMS5kaXN0LWluZm8vUkVDT1JECkBAIC0wLDAg
KzEsOCBAQAorcGx1Z2d5LnB5LHNoYTI1Nj12X1JmV3p5VzZEUFUxY0p1X0VGb0xfT0hxM3QxM3Fs
b1ZkUjZVYU1DWFFBLDI5ODYyCitwbHVnZ3ktMC4zLjEuZGlzdC1pbmZvL3RvcF9sZXZlbC50eHQs
c2hhMjU2PXhLU0NSaGFpLXY5TWNrdk11V3FOejE2YzF0YnNtT2dnb01Td1RnY3BZSEUsNworcGx1
Z2d5LTAuMy4xLmRpc3QtaW5mby9wYnIuanNvbixzaGEyNTY9eFgzczZfX3dPY0F5Ri1BWkpYMXNk
WnlXNlBVWFQtRmtmQmxNNjlFRVVDZyw0NworcGx1Z2d5LTAuMy4xLmRpc3QtaW5mby9SRUNPUkQs
LAorcGx1Z2d5LTAuMy4xLmRpc3QtaW5mby9tZXRhZGF0YS5qc29uLHNoYTI1Nj1uTEtsdE9UNzhk
TVYtMDB1WEQ2QWVlbXA0eE5zejJxNTlqNk9SU0RlTGp3LDEwMjcKK3BsdWdneS0wLjMuMS5kaXN0
LWluZm8vTUVUQURBVEEsc2hhMjU2PTFiODVIbzJ1NGlLMzBNMDk5azdheE16Y0REaExjSU1iLUE4
MkpVSlpuU28sMTMzNAorcGx1Z2d5LTAuMy4xLmRpc3QtaW5mby9XSEVFTCxzaGEyNTY9QXZSMFdl
VHBEYXhUNjQ1Ymw1RlF4VUs2TlBzVGxzMnR0cGNHSmczajFYZywxMTAKK3BsdWdneS0wLjMuMS5k
aXN0LWluZm8vREVTQ1JJUFRJT04ucnN0LHNoYTI1Nj1QNUFraDFFZElCUjZDZXF0VjJQOFp3cEdT
cFppVEtQdzBOeVM3akVpRC1nLDMwNgpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0
ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L3ZlbmRvcmVkX3BhY2thZ2VzL3BsdWdneS0wLjMu
MS5kaXN0LWluZm8vV0hFRUwgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0
ZXN0L19weXRlc3QvdmVuZG9yZWRfcGFja2FnZXMvcGx1Z2d5LTAuMy4xLmRpc3QtaW5mby9XSEVF
TApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOWRmZjY5ZDg2MTAKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0
L19weXRlc3QvdmVuZG9yZWRfcGFja2FnZXMvcGx1Z2d5LTAuMy4xLmRpc3QtaW5mby9XSEVFTApA
QCAtMCwwICsxLDYgQEAKK1doZWVsLVZlcnNpb246IDEuMAorR2VuZXJhdG9yOiBiZGlzdF93aGVl
bCAoMC4yNC4wKQorUm9vdC1Jcy1QdXJlbGliOiB0cnVlCitUYWc6IHB5Mi1ub25lLWFueQorVGFn
OiBweTMtbm9uZS1hbnkKKwpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNj
L3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L3ZlbmRvcmVkX3BhY2thZ2VzL3BsdWdneS0wLjMuMS5kaXN0
LWluZm8vbWV0YWRhdGEuanNvbiBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9w
eXRlc3QvX3B5dGVzdC92ZW5kb3JlZF9wYWNrYWdlcy9wbHVnZ3ktMC4zLjEuZGlzdC1pbmZvL21l
dGFkYXRhLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQyNmEz
YTdhZGUxCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rv
b2xzL3B5dGVzdC9fcHl0ZXN0L3ZlbmRvcmVkX3BhY2thZ2VzL3BsdWdneS0wLjMuMS5kaXN0LWlu
Zm8vbWV0YWRhdGEuanNvbgpAQCAtMCwwICsxIEBACit7ImxpY2Vuc2UiOiAiTUlUIGxpY2Vuc2Ui
LCAibmFtZSI6ICJwbHVnZ3kiLCAibWV0YWRhdGFfdmVyc2lvbiI6ICIyLjAiLCAiZ2VuZXJhdG9y
IjogImJkaXN0X3doZWVsICgwLjI0LjApIiwgInN1bW1hcnkiOiAicGx1Z2luIGFuZCBob29rIGNh
bGxpbmcgbWVjaGFuaXNtcyBmb3IgcHl0aG9uIiwgInBsYXRmb3JtIjogInVuaXgiLCAidmVyc2lv
biI6ICIwLjMuMSIsICJleHRlbnNpb25zIjogeyJweXRob24uZGV0YWlscyI6IHsiZG9jdW1lbnRf
bmFtZXMiOiB7ImRlc2NyaXB0aW9uIjogIkRFU0NSSVBUSU9OLnJzdCJ9LCAiY29udGFjdHMiOiBb
eyJyb2xlIjogImF1dGhvciIsICJlbWFpbCI6ICJob2xnZXIgYXQgbWVybGludXguZXUiLCAibmFt
ZSI6ICJIb2xnZXIgS3Jla2VsIn1dfX0sICJjbGFzc2lmaWVycyI6IFsiRGV2ZWxvcG1lbnQgU3Rh
dHVzIDo6IDQgLSBCZXRhIiwgIkludGVuZGVkIEF1ZGllbmNlIDo6IERldmVsb3BlcnMiLCAiTGlj
ZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogTUlUIExpY2Vuc2UiLCAiT3BlcmF0aW5nIFN5c3RlbSA6
OiBQT1NJWCIsICJPcGVyYXRpbmcgU3lzdGVtIDo6IE1pY3Jvc29mdCA6OiBXaW5kb3dzIiwgIk9w
ZXJhdGluZyBTeXN0ZW0gOjogTWFjT1MgOjogTWFjT1MgWCIsICJUb3BpYyA6OiBTb2Z0d2FyZSBE
ZXZlbG9wbWVudCA6OiBUZXN0aW5nIiwgIlRvcGljIDo6IFNvZnR3YXJlIERldmVsb3BtZW50IDo6
IExpYnJhcmllcyIsICJUb3BpYyA6OiBVdGlsaXRpZXMiLCAiUHJvZ3JhbW1pbmcgTGFuZ3VhZ2Ug
OjogUHl0aG9uIDo6IDIiLCAiUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDIuNiIs
ICJQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMi43IiwgIlByb2dyYW1taW5nIExh
bmd1YWdlIDo6IFB5dGhvbiA6OiAzIiwgIlByb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6
OiAzLjMiLCAiUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDMuNCIsICJQcm9ncmFt
bWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMy41Il19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
ZmlsZQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVz
dC9fcHl0ZXN0L3ZlbmRvcmVkX3BhY2thZ2VzL3BsdWdneS0wLjMuMS5kaXN0LWluZm8vcGJyLmpz
b24gYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvdmVu
ZG9yZWRfcGFja2FnZXMvcGx1Z2d5LTAuMy4xLmRpc3QtaW5mby9wYnIuanNvbgpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZDZiNzk4NjQwMTkKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvdmVu
ZG9yZWRfcGFja2FnZXMvcGx1Z2d5LTAuMy4xLmRpc3QtaW5mby9wYnIuanNvbgpAQCAtMCwwICsx
IEBACit7ImlzX3JlbGVhc2UiOiBmYWxzZSwgImdpdF92ZXJzaW9uIjogIjdkNGM5Y2QifQpcIE5v
IG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9y
dGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC92ZW5kb3JlZF9wYWNrYWdlcy9wbHVnZ3ktMC4z
LjEuZGlzdC1pbmZvL3RvcF9sZXZlbC50eHQgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mv
dG9vbHMvcHl0ZXN0L19weXRlc3QvdmVuZG9yZWRfcGFja2FnZXMvcGx1Z2d5LTAuMy4xLmRpc3Qt
aW5mby90b3BfbGV2ZWwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li4xMWJkYjVjMWY1ZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVk
L3czYy90b29scy9weXRlc3QvX3B5dGVzdC92ZW5kb3JlZF9wYWNrYWdlcy9wbHVnZ3ktMC4zLjEu
ZGlzdC1pbmZvL3RvcF9sZXZlbC50eHQKQEAgLTAsMCArMSBAQAorcGx1Z2d5CmRpZmYgLS1naXQg
YS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvdmVuZG9y
ZWRfcGFja2FnZXMvcGx1Z2d5LnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xz
L3B5dGVzdC9fcHl0ZXN0L3ZlbmRvcmVkX3BhY2thZ2VzL3BsdWdneS5weQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMmY4NDhiMjNkMzUKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvdmVuZG9y
ZWRfcGFja2FnZXMvcGx1Z2d5LnB5CkBAIC0wLDAgKzEsNzc3IEBACisiIiIKK1BsdWdpbk1hbmFn
ZXIsIGJhc2ljIGluaXRpYWxpemF0aW9uIGFuZCB0cmFjaW5nLgorCitwbHVnZ3kgaXMgdGhlIGNy
aXN0YWxsaXplZCBjb3JlIG9mIHBsdWdpbiBtYW5hZ2VtZW50IGFzIHVzZWQKK2J5IHNvbWUgMTUw
IHBsdWdpbnMgZm9yIHB5dGVzdC4KKworUGx1Z2d5IHVzZXMgc2VtYW50aWMgdmVyc2lvbmluZy4g
QnJlYWtpbmcgY2hhbmdlcyBhcmUgb25seSBmb3Jlc2VlbiBmb3IKK01ham9yIHJlbGVhc2VzIChp
bmNyZW1lbnRlZCBYIGluICJYLlkuWiIpLiAgSWYgeW91IHdhbnQgdG8gdXNlIHBsdWdneSBpbgor
eW91ciBwcm9qZWN0IHlvdSBzaG91bGQgdGh1cyB1c2UgYSBkZXBlbmRlbmN5IHJlc3RyaWN0aW9u
IGxpa2UKKyJwbHVnZ3k+PTAuMS4wLDwxLjAiIHRvIGF2b2lkIHN1cnByaXNlcy4KKworcGx1Z2d5
IGlzIGNvbmNlcm5lZCB3aXRoIGhvb2sgc3BlY2lmaWNhdGlvbiwgaG9vayBpbXBsZW1lbnRhdGlv
bnMgYW5kIGhvb2sKK2NhbGxpbmcuICBGb3IgYW55IGdpdmVuIGhvb2sgc3BlY2lmaWNhdGlvbiBh
IGhvb2sgY2FsbCBpbnZva2VzIHVwIHRvIE4gaW1wbGVtZW50YXRpb25zLgorQSBob29rIGltcGxl
bWVudGF0aW9uIGNhbiBpbmZsdWVuY2UgaXRzIHBvc2l0aW9uIGFuZCB0eXBlIG9mIGV4ZWN1dGlv
bjoKK2lmIGF0dHJpYnV0ZWQgInRyeWZpcnN0IiBvciAidHJ5bGFzdCIgaXQgd2lsbCBiZSB0cmll
ZCB0byBleGVjdXRlCitmaXJzdCBvciBsYXN0LiAgSG93ZXZlciwgaWYgYXR0cmlidXRlZCAiaG9v
a3dyYXBwZXIiIGFuIGltcGxlbWVudGF0aW9uCitjYW4gd3JhcCBhbGwgY2FsbHMgdG8gbm9uLWhv
b2t3cmFwcGVyIGltcGxlbWVudGF0aW9ucy4gIEEgaG9va3dyYXBwZXIKK2NhbiB0aHVzIGV4ZWN1
dGUgc29tZSBjb2RlIGFoZWFkIGFuZCBhZnRlciB0aGUgZXhlY3V0aW9uIG9mIG90aGVyIGhvb2tz
LgorCitIb29rIHNwZWNpZmljYXRpb24gaXMgZG9uZSBieSB3YXkgb2YgYSByZWd1bGFyIHB5dGhv
biBmdW5jdGlvbiB3aGVyZQorYm90aCB0aGUgZnVuY3Rpb24gbmFtZSBhbmQgdGhlIG5hbWVzIG9m
IGFsbCBpdHMgYXJndW1lbnRzIGFyZSBzaWduaWZpY2FudC4KK0VhY2ggaG9vayBpbXBsZW1lbnRh
dGlvbiBmdW5jdGlvbiBpcyB2ZXJpZmllZCBhZ2FpbnN0IHRoZSBvcmlnaW5hbCBzcGVjaWZpY2F0
aW9uCitmdW5jdGlvbiwgaW5jbHVkaW5nIHRoZSBuYW1lcyBvZiBhbGwgaXRzIGFyZ3VtZW50cy4g
IFRvIGFsbG93IGZvciBob29rIHNwZWNpZmljYXRpb25zCit0byBldm9sdmUgb3ZlciB0aGUgbGl2
ZXRpbWUgb2YgYSBwcm9qZWN0LCBob29rIGltcGxlbWVudGF0aW9ucyBjYW4KK2FjY2VwdCBsZXNz
IGFyZ3VtZW50cy4gIE9uZSBjYW4gdGh1cyBhZGQgbmV3IGFyZ3VtZW50cyBhbmQgc2VtYW50aWNz
IHRvCithIGhvb2sgc3BlY2lmaWNhdGlvbiBieSBhZGRpbmcgYW5vdGhlciBhcmd1bWVudCB0eXBp
Y2FsbHkgd2l0aG91dCBicmVha2luZworZXhpc3RpbmcgaG9vayBpbXBsZW1lbnRhdGlvbnMuCisK
K1RoZSBjaG9zZW4gYXBwcm9hY2ggaXMgbWVhbnQgdG8gbGV0IGEgaG9vayBkZXNpZ25lciB0aGlu
ayBjYXJlZnVseSBhYm91dAord2hpY2ggb2JqZWN0cyBhcmUgbmVlZGVkIGJ5IGFuIGV4dGVuc2lv
biB3cml0ZXIuICBCeSBjb250cmFzdCwgc3ViY2xhc3MtYmFzZWQKK2V4dGVuc2lvbiBtZWNoYW5p
c21zIG9mdGVuIGV4cG9zZSBhIGxvdCBtb3JlIHN0YXRlIGFuZCBiZWhhdmlvdXIgdGhhbiBuZWVk
ZWQsCit0aHVzIHJlc3RyaWN0aW5nIGZ1dHVyZSBkZXZlbG9wbWVudHMuCisKK1BsdWdneSBjdXJy
ZW50bHkgY29uc2lzdHMgb2YgZnVuY3Rpb25hbGl0eSBmb3I6CisKKy0gYSB3YXkgdG8gcmVnaXN0
ZXIgbmV3IGhvb2sgc3BlY2lmaWNhdGlvbnMuICBXaXRob3V0IGEgaG9vaworICBzcGVjaWZpY2F0
aW9uIG5vIGhvb2sgY2FsbGluZyBjYW4gYmUgcGVyZm9ybWVkLgorCistIGEgcmVnaXN0cnkgb2Yg
cGx1Z2lucyB3aGljaCBjb250YWluIGhvb2sgaW1wbGVtZW50YXRpb24gZnVuY3Rpb25zLiAgSXQK
KyAgaXMgcG9zc2libGUgdG8gcmVnaXN0ZXIgcGx1Z2lucyBmb3Igd2hpY2ggYSBob29rIHNwZWNp
ZmljYXRpb24gaXMgbm90IHlldAorICBrbm93biBhbmQgdmFsaWRhdGUgYWxsIGhvb2tzIHdoZW4g
dGhlIHN5c3RlbSBpcyBpbiBhIG1vcmUgcmVmZXJlbnRpYWxseQorICBjb25zaXN0ZW50IHN0YXRl
LiAgU2V0dGluZyBhbiAib3B0aW9uYWxob29rIiBhdHRyaWJ1dGlvbiB0byBhIGhvb2sKKyAgaW1w
bGVtZW50YXRpb24gd2lsbCBhdm9pZCBQbHVnaW5WYWxpZGF0aW9uRXJyb3IncyBpZiBhIHNwZWNp
ZmljYXRpb24KKyAgaXMgbWlzc2luZy4gIFRoaXMgYWxsb3dzIHRvIGhhdmUgb3B0aW9uYWwgaW50
ZWdyYXRpb24gYmV0d2VlbiBwbHVnaW5zLgorCistIGEgImhvb2siIHJlbGF5IG9iamVjdCBmcm9t
IHdoaWNoIHlvdSBjYW4gbGF1bmNoIDE6TiBjYWxscyB0bworICByZWdpc3RlcmVkIGhvb2sgaW1w
bGVtZW50YXRpb24gZnVuY3Rpb25zCisKKy0gYSBtZWNoYW5pc20gZm9yIG9yZGVyaW5nIGhvb2sg
aW1wbGVtZW50YXRpb24gZnVuY3Rpb25zCisKKy0gbWVjaGFuaXNtcyBmb3IgdHdvIGRpZmZlcmVu
dCB0eXBlIG9mIDE6TiBjYWxsczogImZpcnN0cmVzdWx0IiBmb3Igd2hlbgorICB0aGUgY2FsbCBz
aG91bGQgc3RvcCB3aGVuIHRoZSBmaXJzdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIGEgbm9uLU5v
bmUgcmVzdWx0LgorICBBbmQgdGhlIG90aGVyIChkZWZhdWx0KSB3YXkgb2YgZ3VhcmFudGVlaW5n
IHRoYXQgYWxsIGhvb2sgaW1wbGVtZW50YXRpb25zCisgIHdpbGwgYmUgY2FsbGVkIGFuZCB0aGVp
ciBub24tTm9uZSByZXN1bHQgY29sbGVjdGVkLgorCistIG1lY2hhbmlzbXMgZm9yICJoaXN0b3Jp
YyIgZXh0ZW5zaW9uIHBvaW50cyBzdWNoIHRoYXQgYWxsIG5ld2x5CisgIHJlZ2lzdGVyZWQgZnVu
Y3Rpb25zIHdpbGwgcmVjZWl2ZSBhbGwgaG9vayBjYWxscyB0aGF0IGhhcHBlbmVkCisgIGJlZm9y
ZSB0aGVpciByZWdpc3RyYXRpb24uCisKKy0gYSBtZWNoYW5pc20gZm9yIGRpc2NvdmVyaW5nIHBs
dWdpbiBvYmplY3RzIHdoaWNoIGFyZSBiYXNlZCBvbgorICBzZXR1cHRvb2xzIGJhc2VkIGVudHJ5
IHBvaW50cy4KKworLSBhIHNpbXBsZSB0cmFjaW5nIG1lY2hhbmlzbSwgaW5jbHVkaW5nIHRyYWNp
bmcgb2YgcGx1Z2luIGNhbGxzIGFuZAorICB0aGVpciBhcmd1bWVudHMuCisKKyIiIgoraW1wb3J0
IHN5cworaW1wb3J0IGluc3BlY3QKKworX192ZXJzaW9uX18gPSAnMC4zLjEnCitfX2FsbF9fID0g
WyJQbHVnaW5NYW5hZ2VyIiwgIlBsdWdpblZhbGlkYXRpb25FcnJvciIsCisgICAgICAgICAgICJI
b29rc3BlY01hcmtlciIsICJIb29raW1wbE1hcmtlciJdCisKK19weTMgPSBzeXMudmVyc2lvbl9p
bmZvID4gKDMsIDApCisKKworY2xhc3MgSG9va3NwZWNNYXJrZXI6CisgICAgIiIiIERlY29yYXRv
ciBoZWxwZXIgY2xhc3MgZm9yIG1hcmtpbmcgZnVuY3Rpb25zIGFzIGhvb2sgc3BlY2lmaWNhdGlv
bnMuCisKKyAgICBZb3UgY2FuIGluc3RhbnRpYXRlIGl0IHdpdGggYSBwcm9qZWN0X25hbWUgdG8g
Z2V0IGEgZGVjb3JhdG9yLgorICAgIENhbGxpbmcgUGx1Z2luTWFuYWdlci5hZGRfaG9va3NwZWNz
IGxhdGVyIHdpbGwgZGlzY292ZXIgYWxsIG1hcmtlZCBmdW5jdGlvbnMKKyAgICBpZiB0aGUgUGx1
Z2luTWFuYWdlciB1c2VzIHRoZSBzYW1lIHByb2plY3RfbmFtZS4KKyAgICAiIiIKKworICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBwcm9qZWN0X25hbWUpOgorICAgICAgICBzZWxmLnByb2plY3RfbmFt
ZSA9IHByb2plY3RfbmFtZQorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIGZ1bmN0aW9uPU5vbmUs
IGZpcnN0cmVzdWx0PUZhbHNlLCBoaXN0b3JpYz1GYWxzZSk6CisgICAgICAgICIiIiBpZiBwYXNz
ZWQgYSBmdW5jdGlvbiwgZGlyZWN0bHkgc2V0cyBhdHRyaWJ1dGVzIG9uIHRoZSBmdW5jdGlvbgor
ICAgICAgICB3aGljaCB3aWxsIG1ha2UgaXQgZGlzY292ZXJhYmxlIHRvIGFkZF9ob29rc3BlY3Mo
KS4gIElmIHBhc3NlZCBubworICAgICAgICBmdW5jdGlvbiwgcmV0dXJucyBhIGRlY29yYXRvciB3
aGljaCBjYW4gYmUgYXBwbGllZCB0byBhIGZ1bmN0aW9uCisgICAgICAgIGxhdGVyIHVzaW5nIHRo
ZSBhdHRyaWJ1dGVzIHN1cHBsaWVkLgorCisgICAgICAgIElmIGZpcnN0cmVzdWx0IGlzIFRydWUg
dGhlIDE6TiBob29rIGNhbGwgKE4gYmVpbmcgdGhlIG51bWJlciBvZiByZWdpc3RlcmVkCisgICAg
ICAgIGhvb2sgaW1wbGVtZW50YXRpb24gZnVuY3Rpb25zKSB3aWxsIHN0b3AgYXQgSTw9TiB3aGVu
IHRoZSBJJ3RoIGZ1bmN0aW9uCisgICAgICAgIHJldHVybnMgYSBub24tTm9uZSByZXN1bHQuCisK
KyAgICAgICAgSWYgaGlzdG9yaWMgaXMgVHJ1ZSBjYWxscyB0byBhIGhvb2sgd2lsbCBiZSBtZW1v
cml6ZWQgYW5kIHJlcGxheWVkCisgICAgICAgIG9uIGxhdGVyIHJlZ2lzdGVyZWQgcGx1Z2lucy4K
KworICAgICAgICAiIiIKKyAgICAgICAgZGVmIHNldGF0dHJfaG9va3NwZWNfb3B0cyhmdW5jKToK
KyAgICAgICAgICAgIGlmIGhpc3RvcmljIGFuZCBmaXJzdHJlc3VsdDoKKyAgICAgICAgICAgICAg
ICByYWlzZSBWYWx1ZUVycm9yKCJjYW5ub3QgaGF2ZSBhIGhpc3RvcmljIGZpcnN0cmVzdWx0IGhv
b2siKQorICAgICAgICAgICAgc2V0YXR0cihmdW5jLCBzZWxmLnByb2plY3RfbmFtZSArICJfc3Bl
YyIsCisgICAgICAgICAgICAgICAgICAgZGljdChmaXJzdHJlc3VsdD1maXJzdHJlc3VsdCwgaGlz
dG9yaWM9aGlzdG9yaWMpKQorICAgICAgICAgICAgcmV0dXJuIGZ1bmMKKworICAgICAgICBpZiBm
dW5jdGlvbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBzZXRhdHRyX2hvb2tzcGVj
X29wdHMoZnVuY3Rpb24pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2V0YXR0
cl9ob29rc3BlY19vcHRzCisKKworY2xhc3MgSG9va2ltcGxNYXJrZXI6CisgICAgIiIiIERlY29y
YXRvciBoZWxwZXIgY2xhc3MgZm9yIG1hcmtpbmcgZnVuY3Rpb25zIGFzIGhvb2sgaW1wbGVtZW50
YXRpb25zLgorCisgICAgWW91IGNhbiBpbnN0YW50aWF0ZSB3aXRoIGEgcHJvamVjdF9uYW1lIHRv
IGdldCBhIGRlY29yYXRvci4KKyAgICBDYWxsaW5nIFBsdWdpbk1hbmFnZXIucmVnaXN0ZXIgbGF0
ZXIgd2lsbCBkaXNjb3ZlciBhbGwgbWFya2VkIGZ1bmN0aW9ucworICAgIGlmIHRoZSBQbHVnaW5N
YW5hZ2VyIHVzZXMgdGhlIHNhbWUgcHJvamVjdF9uYW1lLgorICAgICIiIgorICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBwcm9qZWN0X25hbWUpOgorICAgICAgICBzZWxmLnByb2plY3RfbmFtZSA9IHBy
b2plY3RfbmFtZQorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIGZ1bmN0aW9uPU5vbmUsIGhvb2t3
cmFwcGVyPUZhbHNlLCBvcHRpb25hbGhvb2s9RmFsc2UsCisgICAgICAgICAgICAgICAgIHRyeWZp
cnN0PUZhbHNlLCB0cnlsYXN0PUZhbHNlKToKKworICAgICAgICAiIiIgaWYgcGFzc2VkIGEgZnVu
Y3Rpb24sIGRpcmVjdGx5IHNldHMgYXR0cmlidXRlcyBvbiB0aGUgZnVuY3Rpb24KKyAgICAgICAg
d2hpY2ggd2lsbCBtYWtlIGl0IGRpc2NvdmVyYWJsZSB0byByZWdpc3RlcigpLiAgSWYgcGFzc2Vk
IG5vIGZ1bmN0aW9uLAorICAgICAgICByZXR1cm5zIGEgZGVjb3JhdG9yIHdoaWNoIGNhbiBiZSBh
cHBsaWVkIHRvIGEgZnVuY3Rpb24gbGF0ZXIgdXNpbmcKKyAgICAgICAgdGhlIGF0dHJpYnV0ZXMg
c3VwcGxpZWQuCisKKyAgICAgICAgSWYgb3B0aW9uYWxob29rIGlzIFRydWUgYSBtaXNzaW5nIG1h
dGNoaW5nIGhvb2sgc3BlY2lmaWNhdGlvbiB3aWxsIG5vdCByZXN1bHQKKyAgICAgICAgaW4gYW4g
ZXJyb3IgKGJ5IGRlZmF1bHQgaXQgaXMgYW4gZXJyb3IgaWYgbm8gbWF0Y2hpbmcgc3BlYyBpcyBm
b3VuZCkuCisKKyAgICAgICAgSWYgdHJ5Zmlyc3QgaXMgVHJ1ZSB0aGlzIGhvb2sgaW1wbGVtZW50
YXRpb24gd2lsbCBydW4gYXMgZWFybHkgYXMgcG9zc2libGUKKyAgICAgICAgaW4gdGhlIGNoYWlu
IG9mIE4gaG9vayBpbXBsZW1lbnRhdGlvbnMgZm9yIGEgc3BlY2ZpY2F0aW9uLgorCisgICAgICAg
IElmIHRyeWxhc3QgaXMgVHJ1ZSB0aGlzIGhvb2sgaW1wbGVtZW50YXRpb24gd2lsbCBydW4gYXMg
bGF0ZSBhcyBwb3NzaWJsZQorICAgICAgICBpbiB0aGUgY2hhaW4gb2YgTiBob29rIGltcGxlbWVu
dGF0aW9ucy4KKworICAgICAgICBJZiBob29rd3JhcHBlciBpcyBUcnVlIHRoZSBob29rIGltcGxl
bWVudGF0aW9ucyBuZWVkcyB0byBleGVjdXRlIGV4YWN0bHkKKyAgICAgICAgb25lICJ5aWVsZCIu
ICBUaGUgY29kZSBiZWZvcmUgdGhlIHlpZWxkIGlzIHJ1biBlYXJseSBiZWZvcmUgYW55IG5vbi1o
b29rd3JhcHBlcgorICAgICAgICBmdW5jdGlvbiBpcyBydW4uICBUaGUgY29kZSBhZnRlciB0aGUg
eWllbGQgaXMgcnVuIGFmdGVyIGFsbCBub24taG9va3dyYXBwZXIKKyAgICAgICAgZnVuY3Rpb24g
aGF2ZSBydW4uICBUaGUgeWllbGQgcmVjZWl2ZXMgYW4gYGBfQ2FsbE91dGNvbWVgYCBvYmplY3Qg
cmVwcmVzZW50aW5nCisgICAgICAgIHRoZSBleGNlcHRpb24gb3IgcmVzdWx0IG91dGNvbWUgb2Yg
dGhlIGlubmVyIGNhbGxzIChpbmNsdWRpbmcgb3RoZXIgaG9va3dyYXBwZXIKKyAgICAgICAgY2Fs
bHMpLgorCisgICAgICAgICIiIgorICAgICAgICBkZWYgc2V0YXR0cl9ob29raW1wbF9vcHRzKGZ1
bmMpOgorICAgICAgICAgICAgc2V0YXR0cihmdW5jLCBzZWxmLnByb2plY3RfbmFtZSArICJfaW1w
bCIsCisgICAgICAgICAgICAgICAgICAgZGljdChob29rd3JhcHBlcj1ob29rd3JhcHBlciwgb3B0
aW9uYWxob29rPW9wdGlvbmFsaG9vaywKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeWZpcnN0
PXRyeWZpcnN0LCB0cnlsYXN0PXRyeWxhc3QpKQorICAgICAgICAgICAgcmV0dXJuIGZ1bmMKKwor
ICAgICAgICBpZiBmdW5jdGlvbiBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHNldGF0dHJf
aG9va2ltcGxfb3B0cworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNldGF0dHJf
aG9va2ltcGxfb3B0cyhmdW5jdGlvbikKKworCitkZWYgbm9ybWFsaXplX2hvb2tpbXBsX29wdHMo
b3B0cyk6CisgICAgb3B0cy5zZXRkZWZhdWx0KCJ0cnlmaXJzdCIsIEZhbHNlKQorICAgIG9wdHMu
c2V0ZGVmYXVsdCgidHJ5bGFzdCIsIEZhbHNlKQorICAgIG9wdHMuc2V0ZGVmYXVsdCgiaG9va3dy
YXBwZXIiLCBGYWxzZSkKKyAgICBvcHRzLnNldGRlZmF1bHQoIm9wdGlvbmFsaG9vayIsIEZhbHNl
KQorCisKK2NsYXNzIF9UYWdUcmFjZXI6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAg
ICBzZWxmLl90YWcycHJvYyA9IHt9CisgICAgICAgIHNlbGYud3JpdGVyID0gTm9uZQorICAgICAg
ICBzZWxmLmluZGVudCA9IDAKKworICAgIGRlZiBnZXQoc2VsZiwgbmFtZSk6CisgICAgICAgIHJl
dHVybiBfVGFnVHJhY2VyU3ViKHNlbGYsIChuYW1lLCkpCisKKyAgICBkZWYgZm9ybWF0X21lc3Nh
Z2Uoc2VsZiwgdGFncywgYXJncyk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoYXJnc1stMV0sIGRp
Y3QpOgorICAgICAgICAgICAgZXh0cmEgPSBhcmdzWy0xXQorICAgICAgICAgICAgYXJncyA9IGFy
Z3NbOi0xXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZXh0cmEgPSB7fQorCisgICAgICAg
IGNvbnRlbnQgPSAiICIuam9pbihtYXAoc3RyLCBhcmdzKSkKKyAgICAgICAgaW5kZW50ID0gIiAg
IiAqIHNlbGYuaW5kZW50CisKKyAgICAgICAgbGluZXMgPSBbCisgICAgICAgICAgICAiJXMlcyBb
JXNdXG4iICUgKGluZGVudCwgY29udGVudCwgIjoiLmpvaW4odGFncykpCisgICAgICAgIF0KKwor
ICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gZXh0cmEuaXRlbXMoKToKKyAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgiJXMgICAgJXM6ICVzXG4iICUgKGluZGVudCwgbmFtZSwgdmFsdWUpKQorICAg
ICAgICByZXR1cm4gbGluZXMKKworICAgIGRlZiBwcm9jZXNzbWVzc2FnZShzZWxmLCB0YWdzLCBh
cmdzKToKKyAgICAgICAgaWYgc2VsZi53cml0ZXIgaXMgbm90IE5vbmUgYW5kIGFyZ3M6CisgICAg
ICAgICAgICBsaW5lcyA9IHNlbGYuZm9ybWF0X21lc3NhZ2UodGFncywgYXJncykKKyAgICAgICAg
ICAgIHNlbGYud3JpdGVyKCcnLmpvaW4obGluZXMpKQorICAgICAgICB0cnk6CisgICAgICAgICAg
ICBzZWxmLl90YWcycHJvY1t0YWdzXSh0YWdzLCBhcmdzKQorICAgICAgICBleGNlcHQgS2V5RXJy
b3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgc2V0d3JpdGVyKHNlbGYsIHdyaXRlcik6
CisgICAgICAgIHNlbGYud3JpdGVyID0gd3JpdGVyCisKKyAgICBkZWYgc2V0cHJvY2Vzc29yKHNl
bGYsIHRhZ3MsIHByb2Nlc3Nvcik6CisgICAgICAgIGlmIGlzaW5zdGFuY2UodGFncywgc3RyKToK
KyAgICAgICAgICAgIHRhZ3MgPSB0dXBsZSh0YWdzLnNwbGl0KCI6IikpCisgICAgICAgIGVsc2U6
CisgICAgICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZSh0YWdzLCB0dXBsZSkKKyAgICAgICAgc2Vs
Zi5fdGFnMnByb2NbdGFnc10gPSBwcm9jZXNzb3IKKworCitjbGFzcyBfVGFnVHJhY2VyU3ViOgor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCByb290LCB0YWdzKToKKyAgICAgICAgc2VsZi5yb290ID0g
cm9vdAorICAgICAgICBzZWxmLnRhZ3MgPSB0YWdzCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwg
KmFyZ3MpOgorICAgICAgICBzZWxmLnJvb3QucHJvY2Vzc21lc3NhZ2Uoc2VsZi50YWdzLCBhcmdz
KQorCisgICAgZGVmIHNldG15cHJvY2Vzc29yKHNlbGYsIHByb2Nlc3Nvcik6CisgICAgICAgIHNl
bGYucm9vdC5zZXRwcm9jZXNzb3Ioc2VsZi50YWdzLCBwcm9jZXNzb3IpCisKKyAgICBkZWYgZ2V0
KHNlbGYsIG5hbWUpOgorICAgICAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18oc2VsZi5yb290LCBz
ZWxmLnRhZ3MgKyAobmFtZSwpKQorCisKK2RlZiBfcmFpc2Vfd3JhcGZhaWwod3JhcF9jb250cm9s
bGVyLCBtc2cpOgorICAgIGNvID0gd3JhcF9jb250cm9sbGVyLmdpX2NvZGUKKyAgICByYWlzZSBS
dW50aW1lRXJyb3IoIndyYXBfY29udHJvbGxlciBhdCAlciAlczolZCAlcyIgJQorICAgICAgICAg
ICAgICAgICAgIChjby5jb19uYW1lLCBjby5jb19maWxlbmFtZSwgY28uY29fZmlyc3RsaW5lbm8s
IG1zZykpCisKKworZGVmIF93cmFwcGVkX2NhbGwod3JhcF9jb250cm9sbGVyLCBmdW5jKToKKyAg
ICAiIiIgV3JhcCBjYWxsaW5nIHRvIGEgZnVuY3Rpb24gd2l0aCBhIGdlbmVyYXRvciB3aGljaCBu
ZWVkcyB0byB5aWVsZAorICAgIGV4YWN0bHkgb25jZS4gIFRoZSB5aWVsZCBwb2ludCB3aWxsIHRy
aWdnZXIgY2FsbGluZyB0aGUgd3JhcHBlZCBmdW5jdGlvbgorICAgIGFuZCByZXR1cm4gaXRzIF9D
YWxsT3V0Y29tZSB0byB0aGUgeWllbGQgcG9pbnQuICBUaGUgZ2VuZXJhdG9yIHRoZW4gbmVlZHMK
KyAgICB0byBmaW5pc2ggKHJhaXNlIFN0b3BJdGVyYXRpb24pIGluIG9yZGVyIGZvciB0aGUgd3Jh
cHBlZCBjYWxsIHRvIGNvbXBsZXRlLgorICAgICIiIgorICAgIHRyeToKKyAgICAgICAgbmV4dCh3
cmFwX2NvbnRyb2xsZXIpICAgIyBmaXJzdCB5aWVsZAorICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9u
OgorICAgICAgICBfcmFpc2Vfd3JhcGZhaWwod3JhcF9jb250cm9sbGVyLCAiZGlkIG5vdCB5aWVs
ZCIpCisgICAgY2FsbF9vdXRjb21lID0gX0NhbGxPdXRjb21lKGZ1bmMpCisgICAgdHJ5OgorICAg
ICAgICB3cmFwX2NvbnRyb2xsZXIuc2VuZChjYWxsX291dGNvbWUpCisgICAgICAgIF9yYWlzZV93
cmFwZmFpbCh3cmFwX2NvbnRyb2xsZXIsICJoYXMgc2Vjb25kIHlpZWxkIikKKyAgICBleGNlcHQg
U3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgcGFzcworICAgIHJldHVybiBjYWxsX291dGNvbWUuZ2V0
X3Jlc3VsdCgpCisKKworY2xhc3MgX0NhbGxPdXRjb21lOgorICAgICIiIiBPdXRjb21lIG9mIGEg
ZnVuY3Rpb24gY2FsbCwgZWl0aGVyIGFuIGV4Y2VwdGlvbiBvciBhIHByb3BlciByZXN1bHQuCisg
ICAgQ2FsbGluZyB0aGUgYGBnZXRfcmVzdWx0YGAgbWV0aG9kIHdpbGwgcmV0dXJuIHRoZSByZXN1
bHQgb3IgcmVyYWlzZQorICAgIHRoZSBleGNlcHRpb24gcmFpc2VkIHdoZW4gdGhlIGZ1bmN0aW9u
IHdhcyBjYWxsZWQuICIiIgorICAgIGV4Y2luZm8gPSBOb25lCisKKyAgICBkZWYgX19pbml0X18o
c2VsZiwgZnVuYyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYucmVzdWx0ID0gZnVu
YygpCisgICAgICAgIGV4Y2VwdCBCYXNlRXhjZXB0aW9uOgorICAgICAgICAgICAgc2VsZi5leGNp
bmZvID0gc3lzLmV4Y19pbmZvKCkKKworICAgIGRlZiBmb3JjZV9yZXN1bHQoc2VsZiwgcmVzdWx0
KToKKyAgICAgICAgc2VsZi5yZXN1bHQgPSByZXN1bHQKKyAgICAgICAgc2VsZi5leGNpbmZvID0g
Tm9uZQorCisgICAgZGVmIGdldF9yZXN1bHQoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZXhjaW5m
byBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucmVzdWx0CisgICAgICAgIGVsc2U6
CisgICAgICAgICAgICBleCA9IHNlbGYuZXhjaW5mbworICAgICAgICAgICAgaWYgX3B5MzoKKyAg
ICAgICAgICAgICAgICByYWlzZSBleFsxXS53aXRoX3RyYWNlYmFjayhleFsyXSkKKyAgICAgICAg
ICAgIF9yZXJhaXNlKCpleCkgICMgbm9xYQorCitpZiBub3QgX3B5MzoKKyAgICBleGVjKCIiIgor
ZGVmIF9yZXJhaXNlKGNscywgdmFsLCB0Yik6CisgICAgcmFpc2UgY2xzLCB2YWwsIHRiCisiIiIp
CisKKworY2xhc3MgX1RyYWNlZEhvb2tFeGVjdXRpb246CisgICAgZGVmIF9faW5pdF9fKHNlbGYs
IHBsdWdpbm1hbmFnZXIsIGJlZm9yZSwgYWZ0ZXIpOgorICAgICAgICBzZWxmLnBsdWdpbm1hbmFn
ZXIgPSBwbHVnaW5tYW5hZ2VyCisgICAgICAgIHNlbGYuYmVmb3JlID0gYmVmb3JlCisgICAgICAg
IHNlbGYuYWZ0ZXIgPSBhZnRlcgorICAgICAgICBzZWxmLm9sZGNhbGwgPSBwbHVnaW5tYW5hZ2Vy
Ll9pbm5lcl9ob29rZXhlYworICAgICAgICBhc3NlcnQgbm90IGlzaW5zdGFuY2Uoc2VsZi5vbGRj
YWxsLCBfVHJhY2VkSG9va0V4ZWN1dGlvbikKKyAgICAgICAgc2VsZi5wbHVnaW5tYW5hZ2VyLl9p
bm5lcl9ob29rZXhlYyA9IHNlbGYKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBob29rLCBob29r
X2ltcGxzLCBrd2FyZ3MpOgorICAgICAgICBzZWxmLmJlZm9yZShob29rLm5hbWUsIGhvb2tfaW1w
bHMsIGt3YXJncykKKyAgICAgICAgb3V0Y29tZSA9IF9DYWxsT3V0Y29tZShsYW1iZGE6IHNlbGYu
b2xkY2FsbChob29rLCBob29rX2ltcGxzLCBrd2FyZ3MpKQorICAgICAgICBzZWxmLmFmdGVyKG91
dGNvbWUsIGhvb2submFtZSwgaG9va19pbXBscywga3dhcmdzKQorICAgICAgICByZXR1cm4gb3V0
Y29tZS5nZXRfcmVzdWx0KCkKKworICAgIGRlZiB1bmRvKHNlbGYpOgorICAgICAgICBzZWxmLnBs
dWdpbm1hbmFnZXIuX2lubmVyX2hvb2tleGVjID0gc2VsZi5vbGRjYWxsCisKKworY2xhc3MgUGx1
Z2luTWFuYWdlcihvYmplY3QpOgorICAgICIiIiBDb3JlIFBsdWdpbm1hbmFnZXIgY2xhc3Mgd2hp
Y2ggbWFuYWdlcyByZWdpc3RyYXRpb24KKyAgICBvZiBwbHVnaW4gb2JqZWN0cyBhbmQgMTpOIGhv
b2sgY2FsbGluZy4KKworICAgIFlvdSBjYW4gcmVnaXN0ZXIgbmV3IGhvb2tzIGJ5IGNhbGxpbmcg
YGBhZGRob29rcyhtb2R1bGVfb3JfY2xhc3MpYGAuCisgICAgWW91IGNhbiByZWdpc3RlciBwbHVn
aW4gb2JqZWN0cyAod2hpY2ggY29udGFpbiBob29rcykgYnkgY2FsbGluZworICAgIGBgcmVnaXN0
ZXIocGx1Z2luKWBgLiAgVGhlIFBsdWdpbm1hbmFnZXIgaXMgaW5pdGlhbGl6ZWQgd2l0aCBhCisg
ICAgcHJlZml4IHRoYXQgaXMgc2VhcmNoZWQgZm9yIGluIHRoZSBuYW1lcyBvZiB0aGUgZGljdCBv
ZiByZWdpc3RlcmVkCisgICAgcGx1Z2luIG9iamVjdHMuICBBbiBvcHRpb25hbCBleGNsdWRlZnVu
YyBhbGxvd3MgdG8gYmxhY2tsaXN0IG5hbWVzIHdoaWNoCisgICAgYXJlIG5vdCBjb25zaWRlcmVk
IGFzIGhvb2tzIGRlc3BpdGUgYSBtYXRjaGluZyBwcmVmaXguCisKKyAgICBGb3IgZGVidWdnaW5n
IHB1cnBvc2VzIHlvdSBjYW4gY2FsbCBgYGVuYWJsZV90cmFjaW5nKClgYAorICAgIHdoaWNoIHdp
bGwgc3Vic2VxdWVudGx5IHNlbmQgZGVidWcgaW5mb3JtYXRpb24gdG8gdGhlIHRyYWNlIGhlbHBl
ci4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9qZWN0X25hbWUsIGltcGxw
cmVmaXg9Tm9uZSk6CisgICAgICAgICIiIiBpZiBpbXBscHJlZml4IGlzIGdpdmVuIGltcGxlbWVu
dGF0aW9uIGZ1bmN0aW9ucworICAgICAgICB3aWxsIGJlIHJlY29nbml6ZWQgaWYgdGhlaXIgbmFt
ZSBtYXRjaGVzIHRoZSBpbXBscHJlZml4LiAiIiIKKyAgICAgICAgc2VsZi5wcm9qZWN0X25hbWUg
PSBwcm9qZWN0X25hbWUKKyAgICAgICAgc2VsZi5fbmFtZTJwbHVnaW4gPSB7fQorICAgICAgICBz
ZWxmLl9wbHVnaW4yaG9va2NhbGxlcnMgPSB7fQorICAgICAgICBzZWxmLl9wbHVnaW5fZGlzdGlu
Zm8gPSBbXQorICAgICAgICBzZWxmLnRyYWNlID0gX1RhZ1RyYWNlcigpLmdldCgicGx1Z2lubWFu
YWdlIikKKyAgICAgICAgc2VsZi5ob29rID0gX0hvb2tSZWxheShzZWxmLnRyYWNlLnJvb3QuZ2V0
KCJob29rIikpCisgICAgICAgIHNlbGYuX2ltcGxwcmVmaXggPSBpbXBscHJlZml4CisgICAgICAg
IHNlbGYuX2lubmVyX2hvb2tleGVjID0gbGFtYmRhIGhvb2ssIG1ldGhvZHMsIGt3YXJnczogXAor
ICAgICAgICAgICAgX011bHRpQ2FsbChtZXRob2RzLCBrd2FyZ3MsIGhvb2suc3BlY19vcHRzKS5l
eGVjdXRlKCkKKworICAgIGRlZiBfaG9va2V4ZWMoc2VsZiwgaG9vaywgbWV0aG9kcywga3dhcmdz
KToKKyAgICAgICAgIyBjYWxsZWQgZnJvbSBhbGwgaG9va2NhbGxlciBpbnN0YW5jZXMuCisgICAg
ICAgICMgZW5hYmxlX3RyYWNpbmcgd2lsbCBzZXQgaXRzIG93biB3cmFwcGluZyBmdW5jdGlvbiBh
dCBzZWxmLl9pbm5lcl9ob29rZXhlYworICAgICAgICByZXR1cm4gc2VsZi5faW5uZXJfaG9va2V4
ZWMoaG9vaywgbWV0aG9kcywga3dhcmdzKQorCisgICAgZGVmIHJlZ2lzdGVyKHNlbGYsIHBsdWdp
biwgbmFtZT1Ob25lKToKKyAgICAgICAgIiIiIFJlZ2lzdGVyIGEgcGx1Z2luIGFuZCByZXR1cm4g
aXRzIGNhbm9uaWNhbCBuYW1lIG9yIE5vbmUgaWYgdGhlIG5hbWUKKyAgICAgICAgaXMgYmxvY2tl
ZCBmcm9tIHJlZ2lzdGVyaW5nLiAgUmFpc2UgYSBWYWx1ZUVycm9yIGlmIHRoZSBwbHVnaW4gaXMg
YWxyZWFkeQorICAgICAgICByZWdpc3RlcmVkLiAiIiIKKyAgICAgICAgcGx1Z2luX25hbWUgPSBu
YW1lIG9yIHNlbGYuZ2V0X2Nhbm9uaWNhbF9uYW1lKHBsdWdpbikKKworICAgICAgICBpZiBwbHVn
aW5fbmFtZSBpbiBzZWxmLl9uYW1lMnBsdWdpbiBvciBwbHVnaW4gaW4gc2VsZi5fcGx1Z2luMmhv
b2tjYWxsZXJzOgorICAgICAgICAgICAgaWYgc2VsZi5fbmFtZTJwbHVnaW4uZ2V0KHBsdWdpbl9u
YW1lLCAtMSkgaXMgTm9uZToKKyAgICAgICAgICAgICAgICByZXR1cm4gICMgYmxvY2tlZCBwbHVn
aW4sIHJldHVybiBOb25lIHRvIGluZGljYXRlIG5vIHJlZ2lzdHJhdGlvbgorICAgICAgICAgICAg
cmFpc2UgVmFsdWVFcnJvcigiUGx1Z2luIGFscmVhZHkgcmVnaXN0ZXJlZDogJXM9JXNcbiVzIiAl
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBsdWdpbl9uYW1lLCBwbHVnaW4sIHNlbGYu
X25hbWUycGx1Z2luKSkKKworICAgICAgICAjIFhYWCBpZiBhbiBlcnJvciBoYXBwZW5zIHdlIHNo
b3VsZCBtYWtlIHN1cmUgbm8gc3RhdGUgaGFzIGJlZW4KKyAgICAgICAgIyBjaGFuZ2VkIGF0IHBv
aW50IG9mIHJldHVybgorICAgICAgICBzZWxmLl9uYW1lMnBsdWdpbltwbHVnaW5fbmFtZV0gPSBw
bHVnaW4KKworICAgICAgICAjIHJlZ2lzdGVyIG1hdGNoaW5nIGhvb2sgaW1wbGVtZW50YXRpb25z
IG9mIHRoZSBwbHVnaW4KKyAgICAgICAgc2VsZi5fcGx1Z2luMmhvb2tjYWxsZXJzW3BsdWdpbl0g
PSBob29rY2FsbGVycyA9IFtdCisgICAgICAgIGZvciBuYW1lIGluIGRpcihwbHVnaW4pOgorICAg
ICAgICAgICAgaG9va2ltcGxfb3B0cyA9IHNlbGYucGFyc2VfaG9va2ltcGxfb3B0cyhwbHVnaW4s
IG5hbWUpCisgICAgICAgICAgICBpZiBob29raW1wbF9vcHRzIGlzIG5vdCBOb25lOgorICAgICAg
ICAgICAgICAgIG5vcm1hbGl6ZV9ob29raW1wbF9vcHRzKGhvb2tpbXBsX29wdHMpCisgICAgICAg
ICAgICAgICAgbWV0aG9kID0gZ2V0YXR0cihwbHVnaW4sIG5hbWUpCisgICAgICAgICAgICAgICAg
aG9va2ltcGwgPSBIb29rSW1wbChwbHVnaW4sIHBsdWdpbl9uYW1lLCBtZXRob2QsIGhvb2tpbXBs
X29wdHMpCisgICAgICAgICAgICAgICAgaG9vayA9IGdldGF0dHIoc2VsZi5ob29rLCBuYW1lLCBO
b25lKQorICAgICAgICAgICAgICAgIGlmIGhvb2sgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAg
ICAgaG9vayA9IF9Ib29rQ2FsbGVyKG5hbWUsIHNlbGYuX2hvb2tleGVjKQorICAgICAgICAgICAg
ICAgICAgICBzZXRhdHRyKHNlbGYuaG9vaywgbmFtZSwgaG9vaykKKyAgICAgICAgICAgICAgICBl
bGlmIGhvb2suaGFzX3NwZWMoKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fdmVyaWZ5X2hv
b2soaG9vaywgaG9va2ltcGwpCisgICAgICAgICAgICAgICAgICAgIGhvb2suX21heWJlX2FwcGx5
X2hpc3RvcnkoaG9va2ltcGwpCisgICAgICAgICAgICAgICAgaG9vay5fYWRkX2hvb2tpbXBsKGhv
b2tpbXBsKQorICAgICAgICAgICAgICAgIGhvb2tjYWxsZXJzLmFwcGVuZChob29rKQorICAgICAg
ICByZXR1cm4gcGx1Z2luX25hbWUKKworICAgIGRlZiBwYXJzZV9ob29raW1wbF9vcHRzKHNlbGYs
IHBsdWdpbiwgbmFtZSk6CisgICAgICAgIG1ldGhvZCA9IGdldGF0dHIocGx1Z2luLCBuYW1lKQor
ICAgICAgICByZXMgPSBnZXRhdHRyKG1ldGhvZCwgc2VsZi5wcm9qZWN0X25hbWUgKyAiX2ltcGwi
LCBOb25lKQorICAgICAgICBpZiByZXMgaXMgbm90IE5vbmUgYW5kIG5vdCBpc2luc3RhbmNlKHJl
cywgZGljdCk6CisgICAgICAgICAgICAjIGZhbHNlIHBvc2l0aXZlCisgICAgICAgICAgICByZXMg
PSBOb25lCisgICAgICAgIGVsaWYgcmVzIGlzIE5vbmUgYW5kIHNlbGYuX2ltcGxwcmVmaXggYW5k
IG5hbWUuc3RhcnRzd2l0aChzZWxmLl9pbXBscHJlZml4KToKKyAgICAgICAgICAgIHJlcyA9IHt9
CisgICAgICAgIHJldHVybiByZXMKKworICAgIGRlZiB1bnJlZ2lzdGVyKHNlbGYsIHBsdWdpbj1O
b25lLCBuYW1lPU5vbmUpOgorICAgICAgICAiIiIgdW5yZWdpc3RlciBhIHBsdWdpbiBvYmplY3Qg
YW5kIGFsbCBpdHMgY29udGFpbmVkIGhvb2sgaW1wbGVtZW50YXRpb25zCisgICAgICAgIGZyb20g
aW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLiAiIiIKKyAgICAgICAgaWYgbmFtZSBpcyBOb25lOgor
ICAgICAgICAgICAgYXNzZXJ0IHBsdWdpbiBpcyBub3QgTm9uZSwgIm9uZSBvZiBuYW1lIG9yIHBs
dWdpbiBuZWVkcyB0byBiZSBzcGVjaWZpZWQiCisgICAgICAgICAgICBuYW1lID0gc2VsZi5nZXRf
bmFtZShwbHVnaW4pCisKKyAgICAgICAgaWYgcGx1Z2luIGlzIE5vbmU6CisgICAgICAgICAgICBw
bHVnaW4gPSBzZWxmLmdldF9wbHVnaW4obmFtZSkKKworICAgICAgICAjIGlmIHNlbGYuX25hbWUy
cGx1Z2luW25hbWVdID09IE5vbmUgcmVnaXN0cmF0aW9uIHdhcyBibG9ja2VkOiBpZ25vcmUKKyAg
ICAgICAgaWYgc2VsZi5fbmFtZTJwbHVnaW4uZ2V0KG5hbWUpOgorICAgICAgICAgICAgZGVsIHNl
bGYuX25hbWUycGx1Z2luW25hbWVdCisKKyAgICAgICAgZm9yIGhvb2tjYWxsZXIgaW4gc2VsZi5f
cGx1Z2luMmhvb2tjYWxsZXJzLnBvcChwbHVnaW4sIFtdKToKKyAgICAgICAgICAgIGhvb2tjYWxs
ZXIuX3JlbW92ZV9wbHVnaW4ocGx1Z2luKQorCisgICAgICAgIHJldHVybiBwbHVnaW4KKworICAg
IGRlZiBzZXRfYmxvY2tlZChzZWxmLCBuYW1lKToKKyAgICAgICAgIiIiIGJsb2NrIHJlZ2lzdHJh
dGlvbnMgb2YgdGhlIGdpdmVuIG5hbWUsIHVucmVnaXN0ZXIgaWYgYWxyZWFkeSByZWdpc3RlcmVk
LiAiIiIKKyAgICAgICAgc2VsZi51bnJlZ2lzdGVyKG5hbWU9bmFtZSkKKyAgICAgICAgc2VsZi5f
bmFtZTJwbHVnaW5bbmFtZV0gPSBOb25lCisKKyAgICBkZWYgaXNfYmxvY2tlZChzZWxmLCBuYW1l
KToKKyAgICAgICAgIiIiIHJldHVybiBUcnVlIGlmIHRoZSBuYW1lIGJsb2dzIHJlZ2lzdGVyaW5n
IHBsdWdpbnMgb2YgdGhhdCBuYW1lLiAiIiIKKyAgICAgICAgcmV0dXJuIG5hbWUgaW4gc2VsZi5f
bmFtZTJwbHVnaW4gYW5kIHNlbGYuX25hbWUycGx1Z2luW25hbWVdIGlzIE5vbmUKKworICAgIGRl
ZiBhZGRfaG9va3NwZWNzKHNlbGYsIG1vZHVsZV9vcl9jbGFzcyk6CisgICAgICAgICIiIiBhZGQg
bmV3IGhvb2sgc3BlY2lmaWNhdGlvbnMgZGVmaW5lZCBpbiB0aGUgZ2l2ZW4gbW9kdWxlX29yX2Ns
YXNzLgorICAgICAgICBGdW5jdGlvbnMgYXJlIHJlY29nbml6ZWQgaWYgdGhleSBoYXZlIGJlZW4g
ZGVjb3JhdGVkIGFjY29yZGluZ2x5LiAiIiIKKyAgICAgICAgbmFtZXMgPSBbXQorICAgICAgICBm
b3IgbmFtZSBpbiBkaXIobW9kdWxlX29yX2NsYXNzKToKKyAgICAgICAgICAgIHNwZWNfb3B0cyA9
IHNlbGYucGFyc2VfaG9va3NwZWNfb3B0cyhtb2R1bGVfb3JfY2xhc3MsIG5hbWUpCisgICAgICAg
ICAgICBpZiBzcGVjX29wdHMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgaGMgPSBnZXRh
dHRyKHNlbGYuaG9vaywgbmFtZSwgTm9uZSkKKyAgICAgICAgICAgICAgICBpZiBoYyBpcyBOb25l
OgorICAgICAgICAgICAgICAgICAgICBoYyA9IF9Ib29rQ2FsbGVyKG5hbWUsIHNlbGYuX2hvb2tl
eGVjLCBtb2R1bGVfb3JfY2xhc3MsIHNwZWNfb3B0cykKKyAgICAgICAgICAgICAgICAgICAgc2V0
YXR0cihzZWxmLmhvb2ssIG5hbWUsIGhjKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICAgICAgICAgICMgcGx1Z2lucyByZWdpc3RlcmVkIHRoaXMgaG9vayB3aXRob3V0IGtub3dp
bmcgdGhlIHNwZWMKKyAgICAgICAgICAgICAgICAgICAgaGMuc2V0X3NwZWNpZmljYXRpb24obW9k
dWxlX29yX2NsYXNzLCBzcGVjX29wdHMpCisgICAgICAgICAgICAgICAgICAgIGZvciBob29rZnVu
Y3Rpb24gaW4gKGhjLl93cmFwcGVycyArIGhjLl9ub253cmFwcGVycyk6CisgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxmLl92ZXJpZnlfaG9vayhoYywgaG9va2Z1bmN0aW9uKQorICAgICAgICAg
ICAgICAgIG5hbWVzLmFwcGVuZChuYW1lKQorCisgICAgICAgIGlmIG5vdCBuYW1lczoKKyAgICAg
ICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImRpZCBub3QgZmluZCBhbnkgJXIgaG9va3MgaW4gJXIi
ICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYucHJvamVjdF9uYW1lLCBtb2R1
bGVfb3JfY2xhc3MpKQorCisgICAgZGVmIHBhcnNlX2hvb2tzcGVjX29wdHMoc2VsZiwgbW9kdWxl
X29yX2NsYXNzLCBuYW1lKToKKyAgICAgICAgbWV0aG9kID0gZ2V0YXR0cihtb2R1bGVfb3JfY2xh
c3MsIG5hbWUpCisgICAgICAgIHJldHVybiBnZXRhdHRyKG1ldGhvZCwgc2VsZi5wcm9qZWN0X25h
bWUgKyAiX3NwZWMiLCBOb25lKQorCisgICAgZGVmIGdldF9wbHVnaW5zKHNlbGYpOgorICAgICAg
ICAiIiIgcmV0dXJuIHRoZSBzZXQgb2YgcmVnaXN0ZXJlZCBwbHVnaW5zLiAiIiIKKyAgICAgICAg
cmV0dXJuIHNldChzZWxmLl9wbHVnaW4yaG9va2NhbGxlcnMpCisKKyAgICBkZWYgaXNfcmVnaXN0
ZXJlZChzZWxmLCBwbHVnaW4pOgorICAgICAgICAiIiIgUmV0dXJuIFRydWUgaWYgdGhlIHBsdWdp
biBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQuICIiIgorICAgICAgICByZXR1cm4gcGx1Z2luIGluIHNl
bGYuX3BsdWdpbjJob29rY2FsbGVycworCisgICAgZGVmIGdldF9jYW5vbmljYWxfbmFtZShzZWxm
LCBwbHVnaW4pOgorICAgICAgICAiIiIgUmV0dXJuIGNhbm9uaWNhbCBuYW1lIGZvciBhIHBsdWdp
biBvYmplY3QuIE5vdGUgdGhhdCBhIHBsdWdpbgorICAgICAgICBtYXkgYmUgcmVnaXN0ZXJlZCB1
bmRlciBhIGRpZmZlcmVudCBuYW1lIHdoaWNoIHdhcyBzcGVjaWZpZWQKKyAgICAgICAgYnkgdGhl
IGNhbGxlciBvZiByZWdpc3RlcihwbHVnaW4sIG5hbWUpLiBUbyBvYnRhaW4gdGhlIG5hbWUKKyAg
ICAgICAgb2YgYW4gcmVnaXN0ZXJlZCBwbHVnaW4gdXNlIGBgZ2V0X25hbWUocGx1Z2luKWBgIGlu
c3RlYWQuIiIiCisgICAgICAgIHJldHVybiBnZXRhdHRyKHBsdWdpbiwgIl9fbmFtZV9fIiwgTm9u
ZSkgb3Igc3RyKGlkKHBsdWdpbikpCisKKyAgICBkZWYgZ2V0X3BsdWdpbihzZWxmLCBuYW1lKToK
KyAgICAgICAgIiIiIFJldHVybiBhIHBsdWdpbiBvciBOb25lIGZvciB0aGUgZ2l2ZW4gbmFtZS4g
IiIiCisgICAgICAgIHJldHVybiBzZWxmLl9uYW1lMnBsdWdpbi5nZXQobmFtZSkKKworICAgIGRl
ZiBnZXRfbmFtZShzZWxmLCBwbHVnaW4pOgorICAgICAgICAiIiIgUmV0dXJuIG5hbWUgZm9yIHJl
Z2lzdGVyZWQgcGx1Z2luIG9yIE5vbmUgaWYgbm90IHJlZ2lzdGVyZWQuICIiIgorICAgICAgICBm
b3IgbmFtZSwgdmFsIGluIHNlbGYuX25hbWUycGx1Z2luLml0ZW1zKCk6CisgICAgICAgICAgICBp
ZiBwbHVnaW4gPT0gdmFsOgorICAgICAgICAgICAgICAgIHJldHVybiBuYW1lCisKKyAgICBkZWYg
X3ZlcmlmeV9ob29rKHNlbGYsIGhvb2ssIGhvb2tpbXBsKToKKyAgICAgICAgaWYgaG9vay5pc19o
aXN0b3JpYygpIGFuZCBob29raW1wbC5ob29rd3JhcHBlcjoKKyAgICAgICAgICAgIHJhaXNlIFBs
dWdpblZhbGlkYXRpb25FcnJvcigKKyAgICAgICAgICAgICAgICAiUGx1Z2luICVyXG5ob29rICVy
XG5oaXN0b3JpYyBpbmNvbXBhdGlibGUgdG8gaG9va3dyYXBwZXIiICUKKyAgICAgICAgICAgICAg
ICAoaG9va2ltcGwucGx1Z2luX25hbWUsIGhvb2submFtZSkpCisKKyAgICAgICAgZm9yIGFyZyBp
biBob29raW1wbC5hcmduYW1lczoKKyAgICAgICAgICAgIGlmIGFyZyBub3QgaW4gaG9vay5hcmdu
YW1lczoKKyAgICAgICAgICAgICAgICByYWlzZSBQbHVnaW5WYWxpZGF0aW9uRXJyb3IoCisgICAg
ICAgICAgICAgICAgICAgICJQbHVnaW4gJXJcbmhvb2sgJXJcbmFyZ3VtZW50ICVyIG5vdCBhdmFp
bGFibGVcbiIKKyAgICAgICAgICAgICAgICAgICAgInBsdWdpbiBkZWZpbml0aW9uOiAlc1xuIgor
ICAgICAgICAgICAgICAgICAgICAiYXZhaWxhYmxlIGhvb2thcmdzOiAlcyIgJQorICAgICAgICAg
ICAgICAgICAgICAoaG9va2ltcGwucGx1Z2luX25hbWUsIGhvb2submFtZSwgYXJnLAorICAgICAg
ICAgICAgICAgICAgICBfZm9ybWF0ZGVmKGhvb2tpbXBsLmZ1bmN0aW9uKSwgIiwgIi5qb2luKGhv
b2suYXJnbmFtZXMpKSkKKworICAgIGRlZiBjaGVja19wZW5kaW5nKHNlbGYpOgorICAgICAgICAi
IiIgVmVyaWZ5IHRoYXQgYWxsIGhvb2tzIHdoaWNoIGhhdmUgbm90IGJlZW4gdmVyaWZpZWQgYWdh
aW5zdAorICAgICAgICBhIGhvb2sgc3BlY2lmaWNhdGlvbiBhcmUgb3B0aW9uYWwsIG90aGVyd2lz
ZSByYWlzZSBQbHVnaW5WYWxpZGF0aW9uRXJyb3IiIiIKKyAgICAgICAgZm9yIG5hbWUgaW4gc2Vs
Zi5ob29rLl9fZGljdF9fOgorICAgICAgICAgICAgaWYgbmFtZVswXSAhPSAiXyI6CisgICAgICAg
ICAgICAgICAgaG9vayA9IGdldGF0dHIoc2VsZi5ob29rLCBuYW1lKQorICAgICAgICAgICAgICAg
IGlmIG5vdCBob29rLmhhc19zcGVjKCk6CisgICAgICAgICAgICAgICAgICAgIGZvciBob29raW1w
bCBpbiAoaG9vay5fd3JhcHBlcnMgKyBob29rLl9ub253cmFwcGVycyk6CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiBub3QgaG9va2ltcGwub3B0aW9uYWxob29rOgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJhaXNlIFBsdWdpblZhbGlkYXRpb25FcnJvcigKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgInVua25vd24gaG9vayAlciBpbiBwbHVnaW4gJXIiICUKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5hbWUsIGhvb2tpbXBsLnBsdWdpbikpCisKKyAg
ICBkZWYgbG9hZF9zZXR1cHRvb2xzX2VudHJ5cG9pbnRzKHNlbGYsIGVudHJ5cG9pbnRfbmFtZSk6
CisgICAgICAgICIiIiBMb2FkIG1vZHVsZXMgZnJvbSBxdWVyeWluZyB0aGUgc3BlY2lmaWVkIHNl
dHVwdG9vbHMgZW50cnlwb2ludCBuYW1lLgorICAgICAgICBSZXR1cm4gdGhlIG51bWJlciBvZiBs
b2FkZWQgcGx1Z2lucy4gIiIiCisgICAgICAgIGZyb20gcGtnX3Jlc291cmNlcyBpbXBvcnQgaXRl
cl9lbnRyeV9wb2ludHMsIERpc3RyaWJ1dGlvbk5vdEZvdW5kCisgICAgICAgIGZvciBlcCBpbiBp
dGVyX2VudHJ5X3BvaW50cyhlbnRyeXBvaW50X25hbWUpOgorICAgICAgICAgICAgIyBpcyB0aGUg
cGx1Z2luIHJlZ2lzdGVyZWQgb3IgYmxvY2tlZD8KKyAgICAgICAgICAgIGlmIHNlbGYuZ2V0X3Bs
dWdpbihlcC5uYW1lKSBvciBzZWxmLmlzX2Jsb2NrZWQoZXAubmFtZSk6CisgICAgICAgICAgICAg
ICAgY29udGludWUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBwbHVnaW4gPSBl
cC5sb2FkKCkKKyAgICAgICAgICAgIGV4Y2VwdCBEaXN0cmlidXRpb25Ob3RGb3VuZDoKKyAgICAg
ICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgc2VsZi5yZWdpc3RlcihwbHVnaW4sIG5h
bWU9ZXAubmFtZSkKKyAgICAgICAgICAgIHNlbGYuX3BsdWdpbl9kaXN0aW5mby5hcHBlbmQoKHBs
dWdpbiwgZXAuZGlzdCkpCisgICAgICAgIHJldHVybiBsZW4oc2VsZi5fcGx1Z2luX2Rpc3RpbmZv
KQorCisgICAgZGVmIGxpc3RfcGx1Z2luX2Rpc3RpbmZvKHNlbGYpOgorICAgICAgICAiIiIgcmV0
dXJuIGxpc3Qgb2YgZGlzdGluZm8vcGx1Z2luIHR1cGxlcyBmb3IgYWxsIHNldHVwdG9vbHMgcmVn
aXN0ZXJlZAorICAgICAgICBwbHVnaW5zLiAiIiIKKyAgICAgICAgcmV0dXJuIGxpc3Qoc2VsZi5f
cGx1Z2luX2Rpc3RpbmZvKQorCisgICAgZGVmIGxpc3RfbmFtZV9wbHVnaW4oc2VsZik6CisgICAg
ICAgICIiIiByZXR1cm4gbGlzdCBvZiBuYW1lL3BsdWdpbiBwYWlycy4gIiIiCisgICAgICAgIHJl
dHVybiBsaXN0KHNlbGYuX25hbWUycGx1Z2luLml0ZW1zKCkpCisKKyAgICBkZWYgZ2V0X2hvb2tj
YWxsZXJzKHNlbGYsIHBsdWdpbik6CisgICAgICAgICIiIiBnZXQgYWxsIGhvb2sgY2FsbGVycyBm
b3IgdGhlIHNwZWNpZmllZCBwbHVnaW4uICIiIgorICAgICAgICByZXR1cm4gc2VsZi5fcGx1Z2lu
Mmhvb2tjYWxsZXJzLmdldChwbHVnaW4pCisKKyAgICBkZWYgYWRkX2hvb2tjYWxsX21vbml0b3Jp
bmcoc2VsZiwgYmVmb3JlLCBhZnRlcik6CisgICAgICAgICIiIiBhZGQgYmVmb3JlL2FmdGVyIHRy
YWNpbmcgZnVuY3Rpb25zIGZvciBhbGwgaG9va3MKKyAgICAgICAgYW5kIHJldHVybiBhbiB1bmRv
IGZ1bmN0aW9uIHdoaWNoLCB3aGVuIGNhbGxlZCwKKyAgICAgICAgd2lsbCByZW1vdmUgdGhlIGFk
ZGVkIHRyYWNlcnMuCisKKyAgICAgICAgYGBiZWZvcmUoaG9va19uYW1lLCBob29rX2ltcGxzLCBr
d2FyZ3MpYGAgd2lsbCBiZSBjYWxsZWQgYWhlYWQKKyAgICAgICAgb2YgYWxsIGhvb2sgY2FsbHMg
YW5kIHJlY2VpdmUgYSBob29rY2FsbGVyIGluc3RhbmNlLCBhIGxpc3QKKyAgICAgICAgb2YgSG9v
a0ltcGwgaW5zdGFuY2VzIGFuZCB0aGUga2V5d29yZCBhcmd1bWVudHMgZm9yIHRoZSBob29rIGNh
bGwuCisKKyAgICAgICAgYGBhZnRlcihvdXRjb21lLCBob29rX25hbWUsIGhvb2tfaW1wbHMsIGt3
YXJncylgYCByZWNlaXZlcyB0aGUKKyAgICAgICAgc2FtZSBhcmd1bWVudHMgYXMgYGBiZWZvcmVg
YCBidXQgYWxzbyBhIDpweTpjbGFzczpgX0NhbGxPdXRjb21lYGAgb2JqZWN0CisgICAgICAgIHdo
aWNoIHJlcHJlc2VudHMgdGhlIHJlc3VsdCBvZiB0aGUgb3ZlcmFsbCBob29rIGNhbGwuCisgICAg
ICAgICIiIgorICAgICAgICByZXR1cm4gX1RyYWNlZEhvb2tFeGVjdXRpb24oc2VsZiwgYmVmb3Jl
LCBhZnRlcikudW5kbworCisgICAgZGVmIGVuYWJsZV90cmFjaW5nKHNlbGYpOgorICAgICAgICAi
IiIgZW5hYmxlIHRyYWNpbmcgb2YgaG9vayBjYWxscyBhbmQgcmV0dXJuIGFuIHVuZG8gZnVuY3Rp
b24uICIiIgorICAgICAgICBob29rdHJhY2UgPSBzZWxmLmhvb2suX3RyYWNlCisKKyAgICAgICAg
ZGVmIGJlZm9yZShob29rX25hbWUsIG1ldGhvZHMsIGt3YXJncyk6CisgICAgICAgICAgICBob29r
dHJhY2Uucm9vdC5pbmRlbnQgKz0gMQorICAgICAgICAgICAgaG9va3RyYWNlKGhvb2tfbmFtZSwg
a3dhcmdzKQorCisgICAgICAgIGRlZiBhZnRlcihvdXRjb21lLCBob29rX25hbWUsIG1ldGhvZHMs
IGt3YXJncyk6CisgICAgICAgICAgICBpZiBvdXRjb21lLmV4Y2luZm8gaXMgTm9uZToKKyAgICAg
ICAgICAgICAgICBob29rdHJhY2UoImZpbmlzaCIsIGhvb2tfbmFtZSwgIi0tPiIsIG91dGNvbWUu
cmVzdWx0KQorICAgICAgICAgICAgaG9va3RyYWNlLnJvb3QuaW5kZW50IC09IDEKKworICAgICAg
ICByZXR1cm4gc2VsZi5hZGRfaG9va2NhbGxfbW9uaXRvcmluZyhiZWZvcmUsIGFmdGVyKQorCisg
ICAgZGVmIHN1YnNldF9ob29rX2NhbGxlcihzZWxmLCBuYW1lLCByZW1vdmVfcGx1Z2lucyk6Cisg
ICAgICAgICIiIiBSZXR1cm4gYSBuZXcgX0hvb2tDYWxsZXIgaW5zdGFuY2UgZm9yIHRoZSBuYW1l
ZCBtZXRob2QKKyAgICAgICAgd2hpY2ggbWFuYWdlcyBjYWxscyB0byBhbGwgcmVnaXN0ZXJlZCBw
bHVnaW5zIGV4Y2VwdCB0aGUKKyAgICAgICAgb25lcyBmcm9tIHJlbW92ZV9wbHVnaW5zLiAiIiIK
KyAgICAgICAgb3JpZyA9IGdldGF0dHIoc2VsZi5ob29rLCBuYW1lKQorICAgICAgICBwbHVnaW5z
X3RvX3JlbW92ZSA9IFtwbHVnIGZvciBwbHVnIGluIHJlbW92ZV9wbHVnaW5zIGlmIGhhc2F0dHIo
cGx1ZywgbmFtZSldCisgICAgICAgIGlmIHBsdWdpbnNfdG9fcmVtb3ZlOgorICAgICAgICAgICAg
aGMgPSBfSG9va0NhbGxlcihvcmlnLm5hbWUsIG9yaWcuX2hvb2tleGVjLCBvcmlnLl9zcGVjbW9k
dWxlX29yX2NsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnLnNwZWNfb3B0
cykKKyAgICAgICAgICAgIGZvciBob29raW1wbCBpbiAob3JpZy5fd3JhcHBlcnMgKyBvcmlnLl9u
b253cmFwcGVycyk6CisgICAgICAgICAgICAgICAgcGx1Z2luID0gaG9va2ltcGwucGx1Z2luCisg
ICAgICAgICAgICAgICAgaWYgcGx1Z2luIG5vdCBpbiBwbHVnaW5zX3RvX3JlbW92ZToKKyAgICAg
ICAgICAgICAgICAgICAgaGMuX2FkZF9ob29raW1wbChob29raW1wbCkKKyAgICAgICAgICAgICAg
ICAgICAgIyB3ZSBhbHNvIGtlZXAgdHJhY2sgb2YgdGhpcyBob29rIGNhbGxlciBzbyBpdAorICAg
ICAgICAgICAgICAgICAgICAjIGdldHMgcHJvcGVybHkgcmVtb3ZlZCBvbiBwbHVnaW4gdW5yZWdp
c3RyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGx1Z2luMmhvb2tjYWxsZXJzLnNl
dGRlZmF1bHQocGx1Z2luLCBbXSkuYXBwZW5kKGhjKQorICAgICAgICAgICAgcmV0dXJuIGhjCisg
ICAgICAgIHJldHVybiBvcmlnCisKKworY2xhc3MgX011bHRpQ2FsbDoKKyAgICAiIiIgZXhlY3V0
ZSBhIGNhbGwgaW50byBtdWx0aXBsZSBweXRob24gZnVuY3Rpb25zL21ldGhvZHMuICIiIgorCisg
ICAgIyBYWFggbm90ZSB0aGF0IHRoZSBfX211bHRpY2FsbF9fIGFyZ3VtZW50IGlzIHN1cHBvcnRl
ZCBvbmx5CisgICAgIyBmb3IgcHl0ZXN0IGNvbXBhdGliaWxpdHkgcmVhc29ucy4gIEl0IHdhcyBu
ZXZlciBvZmZpY2lhbGx5CisgICAgIyBzdXBwb3J0ZWQgdGhlcmUgYW5kIGlzIGV4cGxpY2l0bHkg
ZGVwcmVjYXRlZCBzaW5jZSAyLjgKKyAgICAjIHNvIHdlIGNhbiByZW1vdmUgaXQgc29vbiwgYWxs
b3dpbmcgdG8gYXZvaWQgdGhlIGJlbG93IHJlY3Vyc2lvbgorICAgICMgaW4gZXhlY3V0ZSgpIGFu
ZCBzaW1wbGlmeS9zcGVlZCB1cCB0aGUgZXhlY3V0ZSBsb29wLgorCisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIGhvb2tfaW1wbHMsIGt3YXJncywgc3BlY29wdHM9e30pOgorICAgICAgICBzZWxmLmhv
b2tfaW1wbHMgPSBob29rX2ltcGxzCisgICAgICAgIHNlbGYua3dhcmdzID0ga3dhcmdzCisgICAg
ICAgIHNlbGYua3dhcmdzWyJfX211bHRpY2FsbF9fIl0gPSBzZWxmCisgICAgICAgIHNlbGYuc3Bl
Y29wdHMgPSBzcGVjb3B0cworCisgICAgZGVmIGV4ZWN1dGUoc2VsZik6CisgICAgICAgIGFsbF9r
d2FyZ3MgPSBzZWxmLmt3YXJncworICAgICAgICBzZWxmLnJlc3VsdHMgPSByZXN1bHRzID0gW10K
KyAgICAgICAgZmlyc3RyZXN1bHQgPSBzZWxmLnNwZWNvcHRzLmdldCgiZmlyc3RyZXN1bHQiKQor
CisgICAgICAgIHdoaWxlIHNlbGYuaG9va19pbXBsczoKKyAgICAgICAgICAgIGhvb2tfaW1wbCA9
IHNlbGYuaG9va19pbXBscy5wb3AoKQorICAgICAgICAgICAgYXJncyA9IFthbGxfa3dhcmdzW2Fy
Z25hbWVdIGZvciBhcmduYW1lIGluIGhvb2tfaW1wbC5hcmduYW1lc10KKyAgICAgICAgICAgIGlm
IGhvb2tfaW1wbC5ob29rd3JhcHBlcjoKKyAgICAgICAgICAgICAgICByZXR1cm4gX3dyYXBwZWRf
Y2FsbChob29rX2ltcGwuZnVuY3Rpb24oKmFyZ3MpLCBzZWxmLmV4ZWN1dGUpCisgICAgICAgICAg
ICByZXMgPSBob29rX2ltcGwuZnVuY3Rpb24oKmFyZ3MpCisgICAgICAgICAgICBpZiByZXMgaXMg
bm90IE5vbmU6CisgICAgICAgICAgICAgICAgaWYgZmlyc3RyZXN1bHQ6CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiByZXMKKyAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChyZXMpCisK
KyAgICAgICAgaWYgbm90IGZpcnN0cmVzdWx0OgorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHMK
KworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgc3RhdHVzID0gIiVkIG1ldGhzIiAl
IChsZW4oc2VsZi5ob29rX2ltcGxzKSwpCisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgInJlc3Vs
dHMiKToKKyAgICAgICAgICAgIHN0YXR1cyA9ICgiJWQgcmVzdWx0cywgIiAlIGxlbihzZWxmLnJl
c3VsdHMpKSArIHN0YXR1cworICAgICAgICByZXR1cm4gIjxfTXVsdGlDYWxsICVzLCBrd2FyZ3M9
JXI+IiAlIChzdGF0dXMsIHNlbGYua3dhcmdzKQorCisKK2RlZiB2YXJuYW1lcyhmdW5jLCBzdGFy
dGluZGV4PU5vbmUpOgorICAgICIiIiByZXR1cm4gYXJndW1lbnQgbmFtZSB0dXBsZSBmb3IgYSBm
dW5jdGlvbiwgbWV0aG9kLCBjbGFzcyBvciBjYWxsYWJsZS4KKworICAgIEluIGNhc2Ugb2YgYSBj
bGFzcywgaXRzICJfX2luaXRfXyIgbWV0aG9kIGlzIGNvbnNpZGVyZWQuCisgICAgRm9yIG1ldGhv
ZHMgdGhlICJzZWxmIiBwYXJhbWV0ZXIgaXMgbm90IGluY2x1ZGVkIHVubGVzcyB5b3UgYXJlIHBh
c3NpbmcKKyAgICBhbiB1bmJvdW5kIG1ldGhvZCB3aXRoIFB5dGhvbjMgKHdoaWNoIGhhcyBubyBz
dXBwb3J0cyBmb3IgdW5ib3VuZCBtZXRob2RzKQorICAgICIiIgorICAgIGNhY2hlID0gZ2V0YXR0
cihmdW5jLCAiX19kaWN0X18iLCB7fSkKKyAgICB0cnk6CisgICAgICAgIHJldHVybiBjYWNoZVsi
X3Zhcm5hbWVzIl0KKyAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgIHBhc3MKKyAgICBpZiBp
bnNwZWN0LmlzY2xhc3MoZnVuYyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZ1bmMgPSBm
dW5jLl9faW5pdF9fCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAg
IHJldHVybiAoKQorICAgICAgICBzdGFydGluZGV4ID0gMQorICAgIGVsc2U6CisgICAgICAgIGlm
IG5vdCBpbnNwZWN0LmlzZnVuY3Rpb24oZnVuYykgYW5kIG5vdCBpbnNwZWN0LmlzbWV0aG9kKGZ1
bmMpOgorICAgICAgICAgICAgZnVuYyA9IGdldGF0dHIoZnVuYywgJ19fY2FsbF9fJywgZnVuYykK
KyAgICAgICAgaWYgc3RhcnRpbmRleCBpcyBOb25lOgorICAgICAgICAgICAgc3RhcnRpbmRleCA9
IGludChpbnNwZWN0LmlzbWV0aG9kKGZ1bmMpKQorCisgICAgdHJ5OgorICAgICAgICByYXdjb2Rl
ID0gZnVuYy5fX2NvZGVfXworICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgcmV0
dXJuICgpCisgICAgdHJ5OgorICAgICAgICB4ID0gcmF3Y29kZS5jb192YXJuYW1lc1tzdGFydGlu
ZGV4OnJhd2NvZGUuY29fYXJnY291bnRdCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAg
ICAgICB4ID0gKCkKKyAgICBlbHNlOgorICAgICAgICBkZWZhdWx0cyA9IGZ1bmMuX19kZWZhdWx0
c19fCisgICAgICAgIGlmIGRlZmF1bHRzOgorICAgICAgICAgICAgeCA9IHhbOi1sZW4oZGVmYXVs
dHMpXQorICAgIHRyeToKKyAgICAgICAgY2FjaGVbIl92YXJuYW1lcyJdID0geAorICAgIGV4Y2Vw
dCBUeXBlRXJyb3I6CisgICAgICAgIHBhc3MKKyAgICByZXR1cm4geAorCisKK2NsYXNzIF9Ib29r
UmVsYXk6CisgICAgIiIiIGhvb2sgaG9sZGVyIG9iamVjdCBmb3IgcGVyZm9ybWluZyAxOk4gaG9v
ayBjYWxscyB3aGVyZSBOIGlzIHRoZSBudW1iZXIKKyAgICBvZiByZWdpc3RlcmVkIHBsdWdpbnMu
CisKKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0cmFjZSk6CisgICAgICAgIHNl
bGYuX3RyYWNlID0gdHJhY2UKKworCitjbGFzcyBfSG9va0NhbGxlcihvYmplY3QpOgorICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBob29rX2V4ZWN1dGUsIHNwZWNtb2R1bGVfb3JfY2xhc3M9
Tm9uZSwgc3BlY19vcHRzPU5vbmUpOgorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAg
IHNlbGYuX3dyYXBwZXJzID0gW10KKyAgICAgICAgc2VsZi5fbm9ud3JhcHBlcnMgPSBbXQorICAg
ICAgICBzZWxmLl9ob29rZXhlYyA9IGhvb2tfZXhlY3V0ZQorICAgICAgICBpZiBzcGVjbW9kdWxl
X29yX2NsYXNzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgYXNzZXJ0IHNwZWNfb3B0cyBpcyBu
b3QgTm9uZQorICAgICAgICAgICAgc2VsZi5zZXRfc3BlY2lmaWNhdGlvbihzcGVjbW9kdWxlX29y
X2NsYXNzLCBzcGVjX29wdHMpCisKKyAgICBkZWYgaGFzX3NwZWMoc2VsZik6CisgICAgICAgIHJl
dHVybiBoYXNhdHRyKHNlbGYsICJfc3BlY21vZHVsZV9vcl9jbGFzcyIpCisKKyAgICBkZWYgc2V0
X3NwZWNpZmljYXRpb24oc2VsZiwgc3BlY21vZHVsZV9vcl9jbGFzcywgc3BlY19vcHRzKToKKyAg
ICAgICAgYXNzZXJ0IG5vdCBzZWxmLmhhc19zcGVjKCkKKyAgICAgICAgc2VsZi5fc3BlY21vZHVs
ZV9vcl9jbGFzcyA9IHNwZWNtb2R1bGVfb3JfY2xhc3MKKyAgICAgICAgc3BlY2Z1bmMgPSBnZXRh
dHRyKHNwZWNtb2R1bGVfb3JfY2xhc3MsIHNlbGYubmFtZSkKKyAgICAgICAgYXJnbmFtZXMgPSB2
YXJuYW1lcyhzcGVjZnVuYywgc3RhcnRpbmRleD1pbnNwZWN0LmlzY2xhc3Moc3BlY21vZHVsZV9v
cl9jbGFzcykpCisgICAgICAgIGFzc2VydCAic2VsZiIgbm90IGluIGFyZ25hbWVzICAjIHNhbml0
eSBjaGVjaworICAgICAgICBzZWxmLmFyZ25hbWVzID0gWyJfX211bHRpY2FsbF9fIl0gKyBsaXN0
KGFyZ25hbWVzKQorICAgICAgICBzZWxmLnNwZWNfb3B0cyA9IHNwZWNfb3B0cworICAgICAgICBp
ZiBzcGVjX29wdHMuZ2V0KCJoaXN0b3JpYyIpOgorICAgICAgICAgICAgc2VsZi5fY2FsbF9oaXN0
b3J5ID0gW10KKworICAgIGRlZiBpc19oaXN0b3JpYyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGhh
c2F0dHIoc2VsZiwgIl9jYWxsX2hpc3RvcnkiKQorCisgICAgZGVmIF9yZW1vdmVfcGx1Z2luKHNl
bGYsIHBsdWdpbik6CisgICAgICAgIGRlZiByZW1vdmUod3JhcHBlcnMpOgorICAgICAgICAgICAg
Zm9yIGksIG1ldGhvZCBpbiBlbnVtZXJhdGUod3JhcHBlcnMpOgorICAgICAgICAgICAgICAgIGlm
IG1ldGhvZC5wbHVnaW4gPT0gcGx1Z2luOgorICAgICAgICAgICAgICAgICAgICBkZWwgd3JhcHBl
cnNbaV0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgaWYgcmVtb3Zl
KHNlbGYuX3dyYXBwZXJzKSBpcyBOb25lOgorICAgICAgICAgICAgaWYgcmVtb3ZlKHNlbGYuX25v
bndyYXBwZXJzKSBpcyBOb25lOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInBs
dWdpbiAlciBub3QgZm91bmQiICUgKHBsdWdpbiwpKQorCisgICAgZGVmIF9hZGRfaG9va2ltcGwo
c2VsZiwgaG9va2ltcGwpOgorICAgICAgICBpZiBob29raW1wbC5ob29rd3JhcHBlcjoKKyAgICAg
ICAgICAgIG1ldGhvZHMgPSBzZWxmLl93cmFwcGVycworICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgbWV0aG9kcyA9IHNlbGYuX25vbndyYXBwZXJzCisKKyAgICAgICAgaWYgaG9va2ltcGwudHJ5
bGFzdDoKKyAgICAgICAgICAgIG1ldGhvZHMuaW5zZXJ0KDAsIGhvb2tpbXBsKQorICAgICAgICBl
bGlmIGhvb2tpbXBsLnRyeWZpcnN0OgorICAgICAgICAgICAgbWV0aG9kcy5hcHBlbmQoaG9va2lt
cGwpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIGZpbmQgbGFzdCBub24tdHJ5Zmlyc3Qg
bWV0aG9kCisgICAgICAgICAgICBpID0gbGVuKG1ldGhvZHMpIC0gMQorICAgICAgICAgICAgd2hp
bGUgaSA+PSAwIGFuZCBtZXRob2RzW2ldLnRyeWZpcnN0OgorICAgICAgICAgICAgICAgIGkgLT0g
MQorICAgICAgICAgICAgbWV0aG9kcy5pbnNlcnQoaSArIDEsIGhvb2tpbXBsKQorCisgICAgZGVm
IF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIjxfSG9va0NhbGxlciAlcj4iICUgKHNl
bGYubmFtZSwpCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgKiprd2FyZ3MpOgorICAgICAgICBh
c3NlcnQgbm90IHNlbGYuaXNfaGlzdG9yaWMoKQorICAgICAgICByZXR1cm4gc2VsZi5faG9va2V4
ZWMoc2VsZiwgc2VsZi5fbm9ud3JhcHBlcnMgKyBzZWxmLl93cmFwcGVycywga3dhcmdzKQorCisg
ICAgZGVmIGNhbGxfaGlzdG9yaWMoc2VsZiwgcHJvYz1Ob25lLCBrd2FyZ3M9Tm9uZSk6CisgICAg
ICAgIHNlbGYuX2NhbGxfaGlzdG9yeS5hcHBlbmQoKGt3YXJncyBvciB7fSwgcHJvYykpCisgICAg
ICAgICMgaGlzdG9yaXppbmcgaG9va3MgZG9uJ3QgcmV0dXJuIHJlc3VsdHMKKyAgICAgICAgc2Vs
Zi5faG9va2V4ZWMoc2VsZiwgc2VsZi5fbm9ud3JhcHBlcnMgKyBzZWxmLl93cmFwcGVycywga3dh
cmdzKQorCisgICAgZGVmIGNhbGxfZXh0cmEoc2VsZiwgbWV0aG9kcywga3dhcmdzKToKKyAgICAg
ICAgIiIiIENhbGwgdGhlIGhvb2sgd2l0aCBzb21lIGFkZGl0aW9uYWwgdGVtcG9yYXJpbHkgcGFy
dGljaXBhdGluZworICAgICAgICBtZXRob2RzIHVzaW5nIHRoZSBzcGVjaWZpZWQga3dhcmdzIGFz
IGNhbGwgcGFyYW1ldGVycy4gIiIiCisgICAgICAgIG9sZCA9IGxpc3Qoc2VsZi5fbm9ud3JhcHBl
cnMpLCBsaXN0KHNlbGYuX3dyYXBwZXJzKQorICAgICAgICBmb3IgbWV0aG9kIGluIG1ldGhvZHM6
CisgICAgICAgICAgICBvcHRzID0gZGljdChob29rd3JhcHBlcj1GYWxzZSwgdHJ5bGFzdD1GYWxz
ZSwgdHJ5Zmlyc3Q9RmFsc2UpCisgICAgICAgICAgICBob29raW1wbCA9IEhvb2tJbXBsKE5vbmUs
ICI8dGVtcD4iLCBtZXRob2QsIG9wdHMpCisgICAgICAgICAgICBzZWxmLl9hZGRfaG9va2ltcGwo
aG9va2ltcGwpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmKCoqa3dhcmdz
KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fbm9ud3JhcHBlcnMsIHNlbGYu
X3dyYXBwZXJzID0gb2xkCisKKyAgICBkZWYgX21heWJlX2FwcGx5X2hpc3Rvcnkoc2VsZiwgbWV0
aG9kKToKKyAgICAgICAgaWYgc2VsZi5pc19oaXN0b3JpYygpOgorICAgICAgICAgICAgZm9yIGt3
YXJncywgcHJvYyBpbiBzZWxmLl9jYWxsX2hpc3Rvcnk6CisgICAgICAgICAgICAgICAgcmVzID0g
c2VsZi5faG9va2V4ZWMoc2VsZiwgW21ldGhvZF0sIGt3YXJncykKKyAgICAgICAgICAgICAgICBp
ZiByZXMgYW5kIHByb2MgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHByb2MocmVz
WzBdKQorCisKK2NsYXNzIEhvb2tJbXBsOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwbHVnaW4s
IHBsdWdpbl9uYW1lLCBmdW5jdGlvbiwgaG9va19pbXBsX29wdHMpOgorICAgICAgICBzZWxmLmZ1
bmN0aW9uID0gZnVuY3Rpb24KKyAgICAgICAgc2VsZi5hcmduYW1lcyA9IHZhcm5hbWVzKHNlbGYu
ZnVuY3Rpb24pCisgICAgICAgIHNlbGYucGx1Z2luID0gcGx1Z2luCisgICAgICAgIHNlbGYub3B0
cyA9IGhvb2tfaW1wbF9vcHRzCisgICAgICAgIHNlbGYucGx1Z2luX25hbWUgPSBwbHVnaW5fbmFt
ZQorICAgICAgICBzZWxmLl9fZGljdF9fLnVwZGF0ZShob29rX2ltcGxfb3B0cykKKworCitjbGFz
cyBQbHVnaW5WYWxpZGF0aW9uRXJyb3IoRXhjZXB0aW9uKToKKyAgICAiIiIgcGx1Z2luIGZhaWxl
ZCB2YWxpZGF0aW9uLiAiIiIKKworCitpZiBoYXNhdHRyKGluc3BlY3QsICdzaWduYXR1cmUnKToK
KyAgICBkZWYgX2Zvcm1hdGRlZihmdW5jKToKKyAgICAgICAgcmV0dXJuICIlcyVzIiAlICgKKyAg
ICAgICAgICAgIGZ1bmMuX19uYW1lX18sCisgICAgICAgICAgICBzdHIoaW5zcGVjdC5zaWduYXR1
cmUoZnVuYykpCisgICAgICAgICkKK2Vsc2U6CisgICAgZGVmIF9mb3JtYXRkZWYoZnVuYyk6Cisg
ICAgICAgIHJldHVybiAiJXMlcyIgJSAoCisgICAgICAgICAgICBmdW5jLl9fbmFtZV9fLAorICAg
ICAgICAgICAgaW5zcGVjdC5mb3JtYXRhcmdzcGVjKCppbnNwZWN0LmdldGFyZ3NwZWMoZnVuYykp
CisgICAgICAgICkKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29s
cy9weXRlc3QvYXBwdmV5b3IueW1sIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xz
L3B5dGVzdC9hcHB2ZXlvci55bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLjRiNzM2NDVmNzM1Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0
ZWQvdzNjL3Rvb2xzL3B5dGVzdC9hcHB2ZXlvci55bWwKQEAgLTAsMCArMSwyOCBAQAorZW52aXJv
bm1lbnQ6CisgIENPVkVSQUxMU19SRVBPX1RPS0VOOgorICAgIHNlY3VyZTogMk5KNUN0NTVjSEo5
V0VnM3hiU3FDdXYwcmRnenpiNnBuek9JRzVPa01iVG5kdzN3T0JyWG50V0ZvUXJYaU1GaQorICAg
ICMgdGhpcyBpcyBweXRlc3QncyB0b2tlbiBpbiBjb3ZlcmFsbHMuaW8sIGVuY3J5cHRlZAorICAg
ICMgdXNpbmcgcHl0ZXN0Ym90IGFjY291bnQgYXMgZGV0YWlsZWQgaGVyZToKKyAgICAjIGh0dHBz
Oi8vd3d3LmFwcHZleW9yLmNvbS9kb2NzL2J1aWxkLWNvbmZpZ3VyYXRpb24jc2VjdXJlLXZhcmlh
YmxlcworCitpbnN0YWxsOgorICAtIGVjaG8gSW5zdGFsbGVkIFB5dGhvbnMKKyAgLSBkaXIgYzpc
UHl0aG9uKgorCisgICMgaW5zdGFsbCBweXB5IHVzaW5nIGNob2NvIChyZWRpcmVjdCB0byBhIGZp
bGUgYW5kIHdyaXRlIHRvIGNvbnNvbGUgaW4gY2FzZQorICAjIGNob2NvIGluc3RhbGwgcmV0dXJu
cyBub24temVybywgYmVjYXVzZSBjaG9jbyBpbnN0YWxsIHB5dGhvbi5weXB5IGlzIHRvbworICAj
IG5vaXN5KQorICAtIGNob2NvIGluc3RhbGwgcHl0aG9uLnB5cHkgPiBweXB5LWluc3QubG9nIDI+
JjEgfHwgKHR5cGUgcHlweS1pbnN0LmxvZyAmIGV4aXQgL2IgMSkKKyAgLSBzZXQgUEFUSD1DOlx0
b29sc1xweXB5XHB5cHk7JVBBVEglICMgc28gdG94IGNhbiBmaW5kIHB5cHkKKyAgLSBlY2hvIFB5
UHkgaW5zdGFsbGVkCisgIC0gcHlweSAtLXZlcnNpb24KKworICAtIEM6XFB5dGhvbjM1XHB5dGhv
biAtbSBwaXAgaW5zdGFsbCB0b3gKKworYnVpbGQ6IGZhbHNlICAjIE5vdCBhIEMjIHByb2plY3Qs
IGJ1aWxkIHN0dWZmIGF0IHRoZSB0ZXN0IHN0ZXAgaW5zdGVhZC4KKwordGVzdF9zY3JpcHQ6Cisg
IC0gQzpcUHl0aG9uMzVccHl0aG9uIC1tIHRveAorICAjIGNvdmVyYWxscyBpcyBub3QgaW4gdG94
J3MgZW52bGlzdCwgcGx1cyBmb3IgUFJzIHRoZSBzZWN1cmUgdmFyaWFibGUKKyAgIyBpcyBub3Qg
ZGVmaW5lZCBzbyB3ZSBoYXZlIHRvIGNoZWNrIGZvciBpdAorICAtIGlmIGRlZmluZWQgQ09WRVJB
TExTX1JFUE9fVE9LRU4gQzpcUHl0aG9uMzVccHl0aG9uIC1tIHRveCAtZSBjb3ZlcmFsbHMKZGlm
ZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvYmVuY2gv
YmVuY2gucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L2JlbmNo
L2JlbmNoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jZTk0OTY0
MTcyZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29s
cy9weXRlc3QvYmVuY2gvYmVuY2gucHkKQEAgLTAsMCArMSwxMiBAQAoraW1wb3J0IHN5cworCitp
ZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIGltcG9ydCBjUHJvZmlsZQorICAgIGltcG9y
dCBweXRlc3QKKyAgICBpbXBvcnQgcHN0YXRzCisgICAgc2NyaXB0ID0gc3lzLmFyZ3ZbMTpdIGlm
IGxlbihzeXMuYXJndikgPiAxIGVsc2UgImVtcHR5LnB5IgorICAgIHN0YXRzID0gY1Byb2ZpbGUu
cnVuKCdweXRlc3QuY21kbGluZS5tYWluKCVyKScgJSBzY3JpcHQsICdwcm9mJykKKyAgICBwID0g
cHN0YXRzLlN0YXRzKCJwcm9mIikKKyAgICBwLnN0cmlwX2RpcnMoKQorICAgIHAuc29ydF9zdGF0
cygnY3VtdWxhdGl2ZScpCisgICAgcHJpbnQocC5wcmludF9zdGF0cyg1MDApKQpkaWZmIC0tZ2l0
IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9iZW5jaC9iZW5jaF9h
cmdjb21wbGV0ZS5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3Qv
YmVuY2gvYmVuY2hfYXJnY29tcGxldGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAuLmQ2NmM2NjRmMzQ2Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMv
aW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9iZW5jaC9iZW5jaF9hcmdjb21wbGV0ZS5weQpAQCAt
MCwwICsxLDE5IEBACisKKworIyAxMDAwMCBpdGVyYXRpb25zLCBqdXN0IGZvciByZWxhdGl2ZSBj
b21wYXJpc29uCisjICAgICAgICAgICAgICAgICAgICAgIDIuNy41ICAgICAzLjMuMgorIyBGaWxl
c0NvbXBsZXRlciAgICAgICA3NS4xMTA5ICAgNjkuMjExNgorIyBGYXN0RmlsZXNDb21wbGV0ZXIg
ICAgMC43MzgzICAgIDEuMDc2MAorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAg
aW1wb3J0IHN5cworICAgIGltcG9ydCB0aW1laXQKKyAgICBmcm9tIGFyZ2NvbXBsZXRlLmNvbXBs
ZXRlcnMgaW1wb3J0IEZpbGVzQ29tcGxldGVyCisgICAgZnJvbSBfcHl0ZXN0Ll9hcmdjb21wbGV0
ZSBpbXBvcnQgRmFzdEZpbGVzQ29tcGxldGVyCisgICAgY291bnQgPSAxMDAwICMgb25seSBhIGZl
dyBzZWNvbmRzCisgICAgc2V0dXAgPSAnZnJvbSBfX21haW5fXyBpbXBvcnQgRmFzdEZpbGVzQ29t
cGxldGVyXG5mYyA9IEZhc3RGaWxlc0NvbXBsZXRlcigpJworICAgIHJ1biA9ICdmYygiL2QiKScK
KyAgICBzeXMuc3Rkb3V0LndyaXRlKCclc1xuJyAlICh0aW1laXQudGltZWl0KHJ1biwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0dXA9c2V0dXAucmVwbGFjZSgnRmFzdCcsICcn
KSwgbnVtYmVyPWNvdW50KSkpCisgICAgc3lzLnN0ZG91dC53cml0ZSgnJXNcbicgJSAodGltZWl0
LnRpbWVpdChydW4sIHNldHVwPXNldHVwLCBudW1iZXI9Y291bnQpKSkKZGlmZiAtLWdpdCBhL1dl
YkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvYmVuY2gvZW1wdHkucHkgYi9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L2JlbmNoL2VtcHR5LnB5Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hYzVlMjU3MDFkYQotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvYmVu
Y2gvZW1wdHkucHkKQEAgLTAsMCArMSwzIEBACitpbXBvcnQgcHkKK2ZvciBpIGluIHJhbmdlKDEw
MDApOgorICAgIHB5LmJ1aWx0aW4uZXhlY18oImRlZiB0ZXN0X2Z1bmNfJWQoKTogcGFzcyIgJSBp
KQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9i
ZW5jaC9tYW55cGFyYW0ucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0
ZXN0L2JlbmNoL21hbnlwYXJhbS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uZDJiY2EwZThhY2QKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBv
cnRlZC93M2MvdG9vbHMvcHl0ZXN0L2JlbmNoL21hbnlwYXJhbS5weQpAQCAtMCwwICsxLDEyIEBA
CisKK2ltcG9ydCBweXRlc3QKKworQHB5dGVzdC5maXh0dXJlKHNjb3BlPSdtb2R1bGUnLCBwYXJh
bXM9cmFuZ2UoOTY2KSkKK2RlZiBmb28ocmVxdWVzdCk6CisgICAgcmV0dXJuIHJlcXVlc3QucGFy
YW0KKworZGVmIHRlc3RfaXQoZm9vKToKKyAgICBwYXNzCitkZWYgdGVzdF9pdDIoZm9vKToKKyAg
ICBwYXNzCisKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9w
eXRlc3QvYmVuY2gvc2tpcC5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9w
eXRlc3QvYmVuY2gvc2tpcC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MC4uOTYwYjMwODY0NWEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRl
ZC93M2MvdG9vbHMvcHl0ZXN0L2JlbmNoL3NraXAucHkKQEAgLTAsMCArMSwxMCBAQAorCitpbXBv
cnQgcHl0ZXN0CisKKworU0tJUCA9IFRydWUKKworQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKCJ4
IiwgeHJhbmdlKDUwMDApKQorZGVmIHRlc3RfZm9vKHgpOgorICAgIGlmIFNLSVA6CisgICAgICAg
IHB5dGVzdC5za2lwKCJoZWgiKQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQv
dzNjL3Rvb2xzL3B5dGVzdC9leHRyYS9nZXRfaXNzdWVzLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1w
b3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9leHRyYS9nZXRfaXNzdWVzLnB5Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42NDM3YmE0YzM0ZQotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvZXh0cmEvZ2V0X2lzc3Vl
cy5weQpAQCAtMCwwICsxLDc0IEBACitpbXBvcnQganNvbgoraW1wb3J0IHB5CitpbXBvcnQgdGV4
dHdyYXAKKworaXNzdWVzX3VybCA9ICJodHRwOi8vYml0YnVja2V0Lm9yZy9hcGkvMS4wL3JlcG9z
aXRvcmllcy9weXRlc3QtZGV2L3B5dGVzdC9pc3N1ZXMiCisKK2ltcG9ydCByZXF1ZXN0cworCitk
ZWYgZ2V0X2lzc3VlcygpOgorICAgIGNodW5rc2l6ZSA9IDUwCisgICAgc3RhcnQgPSAwCisgICAg
aXNzdWVzID0gW10KKyAgICB3aGlsZSAxOgorICAgICAgICBwb3N0X2RhdGEgPSB7ImFjY291bnRu
YW1lIjogInB5dGVzdC1kZXYiLAorICAgICAgICAgICAgICAgICAgICAgInJlcG9fc2x1ZyI6ICJw
eXRlc3QiLAorICAgICAgICAgICAgICAgICAgICAgInN0YXJ0Ijogc3RhcnQsCisgICAgICAgICAg
ICAgICAgICAgICAibGltaXQiOiBjaHVua3NpemV9CisgICAgICAgIHByaW50ICgiZ2V0dGluZyBm
cm9tIiwgc3RhcnQpCisgICAgICAgIHIgPSByZXF1ZXN0cy5nZXQoaXNzdWVzX3VybCwgcGFyYW1z
PXBvc3RfZGF0YSkKKyAgICAgICAgZGF0YSA9IHIuanNvbigpCisgICAgICAgIGlzc3Vlcy5leHRl
bmQoZGF0YVsiaXNzdWVzIl0pCisgICAgICAgIGlmIHN0YXJ0ICsgY2h1bmtzaXplID49IGRhdGFb
ImNvdW50Il06CisgICAgICAgICAgICByZXR1cm4gaXNzdWVzCisgICAgICAgIHN0YXJ0ICs9IGNo
dW5rc2l6ZQorCitraW5kMm51bSA9ICJidWcgZW5oYW5jZW1lbnQgdGFzayBwcm9wb3NhbCIuc3Bs
aXQoKQorCitzdGF0dXMybnVtID0gIm5ldyBvcGVuIHJlc29sdmVkIGR1cGxpY2F0ZSBpbnZhbGlk
IHdvbnRmaXgiLnNwbGl0KCkKKworZGVmIG1haW4oYXJncyk6CisgICAgY2FjaGVmaWxlID0gcHku
cGF0aC5sb2NhbChhcmdzLmNhY2hlKQorICAgIGlmIG5vdCBjYWNoZWZpbGUuZXhpc3RzKCkgb3Ig
YXJncy5yZWZyZXNoOgorICAgICAgICBpc3N1ZXMgPSBnZXRfaXNzdWVzKCkKKyAgICAgICAgY2Fj
aGVmaWxlLndyaXRlKGpzb24uZHVtcHMoaXNzdWVzKSkKKyAgICBlbHNlOgorICAgICAgICBpc3N1
ZXMgPSBqc29uLmxvYWRzKGNhY2hlZmlsZS5yZWFkKCkpCisKKyAgICBvcGVuX2lzc3VlcyA9IFt4
IGZvciB4IGluIGlzc3VlcworICAgICAgICAgICAgICAgICAgICBpZiB4WyJzdGF0dXMiXSBpbiAo
Im5ldyIsICJvcGVuIildCisKKyAgICBkZWYga2luZF9hbmRfaWQoeCk6CisgICAgICAgIGtpbmQg
PSB4WyJtZXRhZGF0YSJdWyJraW5kIl0KKyAgICAgICAgcmV0dXJuIGtpbmQybnVtLmluZGV4KGtp
bmQpLCBsZW4oaXNzdWVzKS1pbnQoeFsibG9jYWxfaWQiXSkKKyAgICBvcGVuX2lzc3Vlcy5zb3J0
KGtleT1raW5kX2FuZF9pZCkKKyAgICByZXBvcnQob3Blbl9pc3N1ZXMpCisKK2RlZiByZXBvcnQo
aXNzdWVzKToKKyAgICBmb3IgaXNzdWUgaW4gaXNzdWVzOgorICAgICAgICBtZXRhZGF0YSA9IGlz
c3VlWyJtZXRhZGF0YSJdCisgICAgICAgIHByaW9yaXR5ID0gaXNzdWVbInByaW9yaXR5Il0KKyAg
ICAgICAgdGl0bGUgPSBpc3N1ZVsidGl0bGUiXQorICAgICAgICBjb250ZW50ID0gaXNzdWVbImNv
bnRlbnQiXQorICAgICAgICBraW5kID0gbWV0YWRhdGFbImtpbmQiXQorICAgICAgICBzdGF0dXMg
PSBpc3N1ZVsic3RhdHVzIl0KKyAgICAgICAgaWQgPSBpc3N1ZVsibG9jYWxfaWQiXQorICAgICAg
ICBsaW5rID0gImh0dHBzOi8vYml0YnVja2V0Lm9yZy9weXRlc3QtZGV2L3B5dGVzdC9pc3N1ZS8l
cy8iICUgaWQKKyAgICAgICAgcHJpbnQoIi0tLS0iKQorICAgICAgICBwcmludChzdGF0dXMsIGtp
bmQsIGxpbmspCisgICAgICAgIHByaW50KHRpdGxlKQorICAgICAgICAjcHJpbnQoKQorICAgICAg
ICAjbGluZXMgPSBjb250ZW50LnNwbGl0KCJcbiIpCisgICAgICAgICNwcmludCAoIlxuIi5qb2lu
KGxpbmVzWzozXSkpCisgICAgICAgICNpZiBsZW4obGluZXMpID4gMyBvciBsZW4oY29udGVudCkg
PiAyNDA6CisgICAgICAgICMgICAgcHJpbnQgKCIuLi4iKQorCitpZiBfX25hbWVfXyA9PSAiX19t
YWluX18iOgorICAgIGltcG9ydCBhcmdwYXJzZQorICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3Vt
ZW50UGFyc2VyKCJwcm9jZXNzIGJpdGJ1Y2tldCBpc3N1ZXMiKQorICAgIHBhcnNlci5hZGRfYXJn
dW1lbnQoIi0tcmVmcmVzaCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAg
ICAgICAgICBoZWxwPSJpbnZhbGlkYXRlIGNhY2hlLCByZWZyZXNoIGlzc3VlcyIpCisgICAgcGFy
c2VyLmFkZF9hcmd1bWVudCgiLS1jYWNoZSIsIGFjdGlvbj0ic3RvcmUiLCBkZWZhdWx0PSJpc3N1
ZXMuanNvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJjYWNoZSBmaWxlIikKKyAg
ICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorICAgIG1haW4oYXJncykKZGlmZiAtLWdpdCBh
L1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvZXh0cmEvc2V0dXAtcHku
dGVzdC9zZXR1cC5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3Qv
ZXh0cmEvc2V0dXAtcHkudGVzdC9zZXR1cC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMC4uZDA1NjBjZTFmNWYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0
cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L2V4dHJhL3NldHVwLXB5LnRlc3Qvc2V0dXAucHkK
QEAgLTAsMCArMSwxMSBAQAoraW1wb3J0IHN5cworZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQg
c2V0dXAKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBpZiAic2Rpc3QiIG5vdCBp
biBzeXMuYXJndlsxOl06CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInBsZWFzZSB1c2UgJ3B5
dGVzdCcgcHlwaSBwYWNrYWdlIGluc3RlYWQgb2YgJ3B5LnRlc3QnIikKKyAgICBzZXR1cCgKKyAg
ICAgICAgbmFtZT0icHkudGVzdCIsCisgICAgICAgIHZlcnNpb249IjAuMCIsCisgICAgICAgIGRl
c2NyaXB0aW9uPSJwbGVhc2UgdXNlICdweXRlc3QnIGZvciBpbnN0YWxsYXRpb24iLAorICAgICkK
ZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvcGx1
Z2luLXRlc3Quc2ggYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L3Bs
dWdpbi10ZXN0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45YzYx
YjUwNTM2ZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90
b29scy9weXRlc3QvcGx1Z2luLXRlc3Quc2gKQEAgLTAsMCArMSwyMCBAQAorIyEvYmluL2Jhc2gK
KworIyB0aGlzIGFzc3VtZXMgcGx1Z2lucyBhcmUgaW5zdGFsbGVkIGFzIHNpc3RlciBkaXJlY3Rv
cmllcworCitzZXQgLWUKK2NkIC4uL3B5dGVzdC1wZXA4CitweS50ZXN0CitjZCAuLi9weXRlc3Qt
aW5zdGFmYWlsCitweS50ZXN0IAorY2QgLi4vcHl0ZXN0LWNhY2hlCitweS50ZXN0CitjZCAuLi9w
eXRlc3QteHByb2Nlc3MKK3B5LnRlc3QKKyNjZCAuLi9weXRlc3QtY292CisjcHkudGVzdAorY2Qg
Li4vcHl0ZXN0LWNhcHR1cmVsb2cKK3B5LnRlc3QKK2NkIC4uL3B5dGVzdC14ZGlzdAorcHkudGVz
dAorCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0
L3B5dGVzdC5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvcHl0
ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lMzc2ZTQxN2U4
YQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9w
eXRlc3QvcHl0ZXN0LnB5CkBAIC0wLDAgKzEsMjggQEAKKyMgUFlUSE9OX0FSR0NPTVBMRVRFX09L
CisiIiIKK3B5dGVzdDogdW5pdCBhbmQgZnVuY3Rpb25hbCB0ZXN0aW5nIHdpdGggUHl0aG9uLgor
IiIiCitfX2FsbF9fID0gWworICAgICdtYWluJywKKyAgICAnVXNhZ2VFcnJvcicsCisgICAgJ2Nt
ZGxpbmUnLAorICAgICdob29rc3BlYycsCisgICAgJ2hvb2tpbXBsJywKKyAgICAnX192ZXJzaW9u
X18nLAorXQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOiAjIGlmIHJ1biBhcyBhIHNjcmlw
dCBvciBieSAncHl0aG9uIC1tIHB5dGVzdCcKKyAgICAjIHdlIHRyaWdnZXIgdGhlIGJlbG93ICJl
bHNlIiBjb25kaXRpb24gYnkgdGhlIGZvbGxvd2luZyBpbXBvcnQKKyAgICBpbXBvcnQgcHl0ZXN0
CisgICAgcmFpc2UgU3lzdGVtRXhpdChweXRlc3QubWFpbigpKQorCisjIGVsc2Ugd2UgYXJlIGlt
cG9ydGVkCisKK2Zyb20gX3B5dGVzdC5jb25maWcgaW1wb3J0ICgKKyAgICBtYWluLCBVc2FnZUVy
cm9yLCBfcHJlbG9hZHBsdWdpbnMsIGNtZGxpbmUsCisgICAgaG9va3NwZWMsIGhvb2tpbXBsCisp
Citmcm9tIF9weXRlc3QgaW1wb3J0IF9fdmVyc2lvbl9fCisKK19wcmVsb2FkcGx1Z2lucygpICMg
dG8gcG9wdWxhdGUgcHl0ZXN0LiogbmFtZXNwYWNlIHNvIGhlbHAocHl0ZXN0KSB3b3JrcworCmRp
ZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L3JlcXVp
cmVtZW50cy1kb2NzLnR4dCBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRl
c3QvcmVxdWlyZW1lbnRzLWRvY3MudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi5iZTNhMjMyZTU3YgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2lt
cG9ydGVkL3czYy90b29scy9weXRlc3QvcmVxdWlyZW1lbnRzLWRvY3MudHh0CkBAIC0wLDAgKzEs
MyBAQAorc3BoaW54PT0xLjIuMworcmVnZW5kb2MKK3B5eWFtbApkaWZmIC0tZ2l0IGEvV2ViRHJp
dmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9ydW50b3gucHkgYi9XZWJEcml2ZXJU
ZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L3J1bnRveC5weQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOGMxM2M1M2UxYzQKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L3J1bnRveC5weQpAQCAtMCww
ICsxLDggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCitpZiBfX25hbWVfXyA9PSAiX19tYWlu
X18iOgorICAgIGltcG9ydCBzdWJwcm9jZXNzCisgICAgaW1wb3J0IHN5cworICAgIHN1YnByb2Nl
c3MuY2FsbChbc3lzLmV4ZWN1dGFibGUsICItbSIsICJ0b3giLAorICAgICAgICAgICAgICAgICAg
ICAgIi1pIiwgIkFMTD1odHRwczovL2RldnBpLm5ldC9ocGsvZGV2LyIsCisgICAgICAgICAgICAg
ICAgICAgICAiLS1kZXZlbG9wIl0gKyBzeXMuYXJndlsxOl0pCmRpZmYgLS1naXQgYS9XZWJEcml2
ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L3NldHVwLmNmZyBiL1dlYkRyaXZlclRl
c3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3Qvc2V0dXAuY2ZnCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xYWI0ZmQwNTliMgotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3Qvc2V0dXAuY2ZnCkBAIC0wLDAg
KzEsMTMgQEAKK1tidWlsZF9zcGhpbnhdCitzb3VyY2UtZGlyID0gZG9jL2VuLworYnVpbGQtZGly
ID0gZG9jL2J1aWxkCithbGxfZmlsZXMgPSAxCisKK1t1cGxvYWRfc3BoaW54XQordXBsb2FkLWRp
ciA9IGRvYy9lbi9idWlsZC9odG1sCisKK1tiZGlzdF93aGVlbF0KK3VuaXZlcnNhbCA9IDEKKwor
W2RldnBpOnVwbG9hZF0KK2Zvcm1hdHMgPSBzZGlzdC50Z3osYmRpc3Rfd2hlZWwKZGlmZiAtLWdp
dCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3Qvc2V0dXAucHkgYi9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L3NldHVwLnB5Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42NjYwZjIxNjA0ZAotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3Qvc2V0dXAucHkK
QEAgLTAsMCArMSwxMjIgQEAKK2ltcG9ydCBvcywgc3lzCitpbXBvcnQgc2V0dXB0b29scworaW1w
b3J0IHBrZ19yZXNvdXJjZXMKK2Zyb20gc2V0dXB0b29scyBpbXBvcnQgc2V0dXAsIENvbW1hbmQK
KworY2xhc3NpZmllcnMgPSBbJ0RldmVsb3BtZW50IFN0YXR1cyA6OiA2IC0gTWF0dXJlJywKKyAg
ICAgICAgICAgICAgICdJbnRlbmRlZCBBdWRpZW5jZSA6OiBEZXZlbG9wZXJzJywKKyAgICAgICAg
ICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBNSVQgTGljZW5zZScsCisgICAgICAg
ICAgICAgICAnT3BlcmF0aW5nIFN5c3RlbSA6OiBQT1NJWCcsCisgICAgICAgICAgICAgICAnT3Bl
cmF0aW5nIFN5c3RlbSA6OiBNaWNyb3NvZnQgOjogV2luZG93cycsCisgICAgICAgICAgICAgICAn
T3BlcmF0aW5nIFN5c3RlbSA6OiBNYWNPUyA6OiBNYWNPUyBYJywKKyAgICAgICAgICAgICAgICdU
b3BpYyA6OiBTb2Z0d2FyZSBEZXZlbG9wbWVudCA6OiBUZXN0aW5nJywKKyAgICAgICAgICAgICAg
ICdUb3BpYyA6OiBTb2Z0d2FyZSBEZXZlbG9wbWVudCA6OiBMaWJyYXJpZXMnLAorICAgICAgICAg
ICAgICAgJ1RvcGljIDo6IFV0aWxpdGllcyddICsgWworICAgICAgICAgICAgICAoJ1Byb2dyYW1t
aW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAlcycgJSB4KSBmb3IgeCBpbgorICAgICAgICAgICAg
ICAgICAgJzIgMi42IDIuNyAzIDMuMiAzLjMgMy40IDMuNScuc3BsaXQoKV0KKword2l0aCBvcGVu
KCdSRUFETUUucnN0JykgYXMgZmQ6CisgICAgbG9uZ19kZXNjcmlwdGlvbiA9IGZkLnJlYWQoKQor
CitkZWYgZ2V0X3ZlcnNpb24oKToKKyAgICBwID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFt
ZSgKKyAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpLCAiX3B5
dGVzdCIsICJfX2luaXRfXy5weSIpCisgICAgd2l0aCBvcGVuKHApIGFzIGY6CisgICAgICAgIGZv
ciBsaW5lIGluIGYucmVhZGxpbmVzKCk6CisgICAgICAgICAgICBpZiAiX192ZXJzaW9uX18iIGlu
IGxpbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuIGxpbmUuc3RyaXAoKS5zcGxpdCgiPSIpWy0x
XS5zdHJpcCgiICciKQorICAgIHJhaXNlIFZhbHVlRXJyb3IoImNvdWxkIG5vdCByZWFkIHZlcnNp
b24iKQorCisKK2RlZiBoYXNfZW52aXJvbm1lbnRfbWFya2VyX3N1cHBvcnQoKToKKyAgICAiIiIK
KyAgICBUZXN0cyB0aGF0IHNldHVwdG9vbHMgaGFzIHN1cHBvcnQgZm9yIFBFUC00MjYgZW52aXJv
bm1lbnQgbWFya2VyIHN1cHBvcnQuCisKKyAgICBUaGUgZmlyc3Qga25vd24gcmVsZWFzZSB0byBz
dXBwb3J0IGl0IGlzIDAuNyAoYW5kIHRoZSBlYXJsaWVzdCBvbiBQeVBJIHNlZW1zIHRvIGJlIDAu
Ny4yCisgICAgc28gd2UncmUgdXNpbmcgdGhhdCksIHNlZTogaHR0cDovL3B5dGhvbmhvc3RlZC5v
cmcvc2V0dXB0b29scy9oaXN0b3J5Lmh0bWwjaWQxNDIKKworICAgIFJlZmVyZW5jZXM6CisKKyAg
ICAqIGh0dHBzOi8vd2hlZWwucmVhZHRoZWRvY3Mub3JnL2VuL2xhdGVzdC9pbmRleC5odG1sI2Rl
ZmluaW5nLWNvbmRpdGlvbmFsLWRlcGVuZGVuY2llcworICAgICogaHR0cHM6Ly93d3cucHl0aG9u
Lm9yZy9kZXYvcGVwcy9wZXAtMDQyNi8jZW52aXJvbm1lbnQtbWFya2VycworICAgICIiIgorICAg
IHRyeToKKyAgICAgICAgcmV0dXJuIHBrZ19yZXNvdXJjZXMucGFyc2VfdmVyc2lvbihzZXR1cHRv
b2xzLl9fdmVyc2lvbl9fKSA+PSBwa2dfcmVzb3VyY2VzLnBhcnNlX3ZlcnNpb24oJzAuNy4yJykK
KyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgi
Q291bGQgbm90IHRlc3Qgc2V0dXB0b29sJ3MgdmVyc2lvbjogJXNcbiIgJSBleGMpCisgICAgICAg
IHJldHVybiBGYWxzZQorCisKK2RlZiBtYWluKCk6CisgICAgaW5zdGFsbF9yZXF1aXJlcyA9IFsn
cHk+PTEuNC4yOSddICAjIHBsdWdneSBpcyB2ZW5kb3JlZCBpbiBfcHl0ZXN0LnZlbmRvcmVkX3Bh
Y2thZ2VzCisgICAgZXh0cmFzX3JlcXVpcmUgPSB7fQorICAgIGlmIGhhc19lbnZpcm9ubWVudF9t
YXJrZXJfc3VwcG9ydCgpOgorICAgICAgICBleHRyYXNfcmVxdWlyZVsnOnB5dGhvbl92ZXJzaW9u
PT0iMi42IiBvciBweXRob25fdmVyc2lvbj09IjMuMCIgb3IgcHl0aG9uX3ZlcnNpb249PSIzLjEi
J10gPSBbJ2FyZ3BhcnNlJ10KKyAgICAgICAgZXh0cmFzX3JlcXVpcmVbJzpzeXNfcGxhdGZvcm09
PSJ3aW4zMiInXSA9IFsnY29sb3JhbWEnXQorICAgIGVsc2U6CisgICAgICAgIGlmIHN5cy52ZXJz
aW9uX2luZm8gPCAoMiwgNykgb3IgKDMsKSA8PSBzeXMudmVyc2lvbl9pbmZvIDwgKDMsIDIpOgor
ICAgICAgICAgICAgaW5zdGFsbF9yZXF1aXJlcy5hcHBlbmQoJ2FyZ3BhcnNlJykKKyAgICAgICAg
aWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgICAgICAgICBpbnN0YWxsX3JlcXVpcmVz
LmFwcGVuZCgnY29sb3JhbWEnKQorCisgICAgc2V0dXAoCisgICAgICAgIG5hbWU9J3B5dGVzdCcs
CisgICAgICAgIGRlc2NyaXB0aW9uPSdweXRlc3Q6IHNpbXBsZSBwb3dlcmZ1bCB0ZXN0aW5nIHdp
dGggUHl0aG9uJywKKyAgICAgICAgbG9uZ19kZXNjcmlwdGlvbj1sb25nX2Rlc2NyaXB0aW9uLAor
ICAgICAgICB2ZXJzaW9uPWdldF92ZXJzaW9uKCksCisgICAgICAgIHVybD0naHR0cDovL3B5dGVz
dC5vcmcnLAorICAgICAgICBsaWNlbnNlPSdNSVQgbGljZW5zZScsCisgICAgICAgIHBsYXRmb3Jt
cz1bJ3VuaXgnLCAnbGludXgnLCAnb3N4JywgJ2N5Z3dpbicsICd3aW4zMiddLAorICAgICAgICBh
dXRob3I9J0hvbGdlciBLcmVrZWwsIEJydW5vIE9saXZlaXJhLCBSb25ueSBQZmFubnNjaG1pZHQs
IEZsb3JpcyBCcnV5bm9vZ2hlLCBCcmlhbm5hIExhdWdoZXIsIEZsb3JpYW4gQnJ1aGluIGFuZCBv
dGhlcnMnLAorICAgICAgICBhdXRob3JfZW1haWw9J2hvbGdlciBhdCBtZXJsaW51eC5ldScsCisg
ICAgICAgIGVudHJ5X3BvaW50cz1tYWtlX2VudHJ5X3BvaW50cygpLAorICAgICAgICBjbGFzc2lm
aWVycz1jbGFzc2lmaWVycywKKyAgICAgICAgY21kY2xhc3M9eyd0ZXN0JzogUHlUZXN0fSwKKyAg
ICAgICAgIyB0aGUgZm9sbG93aW5nIHNob3VsZCBiZSBlbmFibGVkIGZvciByZWxlYXNlCisgICAg
ICAgIGluc3RhbGxfcmVxdWlyZXM9aW5zdGFsbF9yZXF1aXJlcywKKyAgICAgICAgZXh0cmFzX3Jl
cXVpcmU9ZXh0cmFzX3JlcXVpcmUsCisgICAgICAgIHBhY2thZ2VzPVsnX3B5dGVzdCcsICdfcHl0
ZXN0LmFzc2VydGlvbicsICdfcHl0ZXN0Ll9jb2RlJywgJ19weXRlc3QudmVuZG9yZWRfcGFja2Fn
ZXMnXSwKKyAgICAgICAgcHlfbW9kdWxlcz1bJ3B5dGVzdCddLAorICAgICAgICB6aXBfc2FmZT1G
YWxzZSwKKyAgICApCisKKworZGVmIGNtZGxpbmVfZW50cnlwb2ludHModmVyc2lvbmluZm8sIHBs
YXRmb3JtLCBiYXNlbmFtZSk6CisgICAgdGFyZ2V0ID0gJ3B5dGVzdDptYWluJworICAgIGlmIHBs
YXRmb3JtLnN0YXJ0c3dpdGgoJ2phdmEnKToKKyAgICAgICAgcG9pbnRzID0geydweS50ZXN0LWp5
dGhvbic6IHRhcmdldH0KKyAgICBlbHNlOgorICAgICAgICBpZiBiYXNlbmFtZS5zdGFydHN3aXRo
KCdweXB5Jyk6CisgICAgICAgICAgICBwb2ludHMgPSB7J3B5LnRlc3QtJXMnICUgYmFzZW5hbWU6
IHRhcmdldH0KKyAgICAgICAgZWxzZTogIyBjcHl0aG9uCisgICAgICAgICAgICBwb2ludHMgPSB7
J3B5LnRlc3QtJXMuJXMnICUgdmVyc2lvbmluZm9bOjJdIDogdGFyZ2V0fQorICAgICAgICBwb2lu
dHNbJ3B5LnRlc3QnXSA9IHRhcmdldAorICAgIHJldHVybiBwb2ludHMKKworCitkZWYgbWFrZV9l
bnRyeV9wb2ludHMoKToKKyAgICBiYXNlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoc3lzLmV4ZWN1
dGFibGUpCisgICAgcG9pbnRzID0gY21kbGluZV9lbnRyeXBvaW50cyhzeXMudmVyc2lvbl9pbmZv
LCBzeXMucGxhdGZvcm0sIGJhc2VuYW1lKQorICAgIGtleXMgPSBsaXN0KHBvaW50cy5rZXlzKCkp
CisgICAga2V5cy5zb3J0KCkKKyAgICBsID0gWyclcyA9ICVzJyAlICh4LCBwb2ludHNbeF0pIGZv
ciB4IGluIGtleXNdCisgICAgcmV0dXJuIHsnY29uc29sZV9zY3JpcHRzJzogbH0KKworCitjbGFz
cyBQeVRlc3QoQ29tbWFuZCk6CisgICAgdXNlcl9vcHRpb25zID0gW10KKyAgICBkZWYgaW5pdGlh
bGl6ZV9vcHRpb25zKHNlbGYpOgorICAgICAgICBwYXNzCisgICAgZGVmIGZpbmFsaXplX29wdGlv
bnMoc2VsZik6CisgICAgICAgIHBhc3MKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICBpbXBv
cnQgc3VicHJvY2VzcworICAgICAgICBQUEFUSCA9IFt4IGZvciB4IGluIG9zLmVudmlyb24uZ2V0
KCdQWVRIT05QQVRIJywgJycpLnNwbGl0KCc6JykgaWYgeF0KKyAgICAgICAgUFBBVEguaW5zZXJ0
KDAsIG9zLmdldGN3ZCgpKQorICAgICAgICBvcy5lbnZpcm9uWydQWVRIT05QQVRIJ10gPSAnOicu
am9pbihQUEFUSCkKKyAgICAgICAgZXJybm8gPSBzdWJwcm9jZXNzLmNhbGwoW3N5cy5leGVjdXRh
YmxlLCAncHl0ZXN0LnB5JywgJy0taWdub3JlPWRvYyddKQorICAgICAgICByYWlzZSBTeXN0ZW1F
eGl0KGVycm5vKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgbWFpbigpCmRp
ZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L3RveC5p
bmkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L3RveC5pbmkKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjVmNjU0NDZlNDJiCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC90b3gu
aW5pCkBAIC0wLDAgKzEsMTYwIEBACitbdG94XQorbWludmVyc2lvbj0yLjAKK2Rpc3RzaGFyZT17
aG9tZWRpcn0vLnRveC9kaXN0c2hhcmUKK2Vudmxpc3Q9CisgICAgIGxpbnRpbmcscHkyNixweTI3
LHB5MzMscHkzNCxweTM1LHB5cHksCisgICAgIHtweTI3LHB5MzV9LXtwZXhwZWN0LHhkaXN0LHRy
aWFsfSwKKyAgICAgcHkyNy1ub2J5dGUsZG9jdGVzdGluZyxweTI3LWN4ZnJlZXplCisKK1t0ZXN0
ZW52XQorY29tbWFuZHM9IHB5LnRlc3QgLS1sc29mIC1yZnN4WCB7cG9zYXJnczp0ZXN0aW5nfQor
cGFzc2VudiA9IFVTRVIgVVNFUk5BTUUKK2RlcHM9CisgICAgbm9zZQorICAgIG1vY2sKKyAgICBy
ZXF1ZXN0cworCitbdGVzdGVudjpweTI2XQorY29tbWFuZHM9IHB5LnRlc3QgLS1sc29mIC1yZnN4
WCB7cG9zYXJnczp0ZXN0aW5nfQorZGVwcz0KKyAgICBub3NlCisgICAgbW9jazwxLjEgICMgbGFz
dCBzdXBwb3J0ZWQgdmVyc2lvbiBmb3IgcHkyNgorCitbdGVzdGVudjpweTI3LXN1YnByb2Nlc3Nd
CitjaGFuZ2VkaXI9LgorYmFzZXB5dGhvbj1weXRob24yLjcKK2RlcHM9cHl0ZXN0LXhkaXN0Pj0x
LjEzCisgICAgbW9jaworICAgIG5vc2UKK2NvbW1hbmRzPQorICBweS50ZXN0IC1uMyAtcmZzeFgg
LS1ydW5weXRlc3Q9c3VicHJvY2VzcyB7cG9zYXJnczp0ZXN0aW5nfQorCitbdGVzdGVudjpnZW5z
Y3JpcHRdCitjb21tYW5kcz0gcHkudGVzdCAtLWdlbnNjcmlwdD1weXRlc3QxCisKK1t0ZXN0ZW52
OmxpbnRpbmddCitiYXNlcHl0aG9uID0gcHl0aG9uMi43CitkZXBzID0gZmxha2U4CisgICAgcmVz
dHJ1Y3R1cmVkdGV4dF9saW50Citjb21tYW5kcyA9IGZsYWtlOCBweXRlc3QucHkgX3B5dGVzdCB0
ZXN0aW5nCisgICAgcnN0LWxpbnQgQ0hBTkdFTE9HLnJzdAorCitbdGVzdGVudjpweTI3LXhkaXN0
XQorZGVwcz1weXRlc3QteGRpc3Q+PTEuMTMKKyAgICBtb2NrCisgICAgbm9zZQorY29tbWFuZHM9
CisgIHB5LnRlc3QgLW4xIC1yZnN4WCB7cG9zYXJnczp0ZXN0aW5nfQorCitbdGVzdGVudjpweTM1
LXhkaXN0XQorZGVwcz17W3Rlc3RlbnY6cHkyNy14ZGlzdF1kZXBzfQorY29tbWFuZHM9CisgIHB5
LnRlc3QgLW4zIC1yZnN4WCB7cG9zYXJnczp0ZXN0aW5nfQorCitbdGVzdGVudjpweTI3LXBleHBl
Y3RdCitjaGFuZ2VkaXI9dGVzdGluZworcGxhdGZvcm09bGludXh8ZGFyd2luCitkZXBzPXBleHBl
Y3QKK2NvbW1hbmRzPQorICBweS50ZXN0IC1yZnN4WCB0ZXN0X3BkYi5weSB0ZXN0X3Rlcm1pbmFs
LnB5IHRlc3RfdW5pdHRlc3QucHkKKworW3Rlc3RlbnY6cHkzNS1wZXhwZWN0XQorY2hhbmdlZGly
PXRlc3RpbmcKK3BsYXRmb3JtPWxpbnV4fGRhcndpbgorZGVwcz17W3Rlc3RlbnY6cHkyNy1wZXhw
ZWN0XWRlcHN9Citjb21tYW5kcz0KKyAgcHkudGVzdCAtcmZzeFggdGVzdF9wZGIucHkgdGVzdF90
ZXJtaW5hbC5weSB0ZXN0X3VuaXR0ZXN0LnB5CisKK1t0ZXN0ZW52OnB5Mjctbm9ieXRlXQorZGVw
cz1weXRlc3QteGRpc3Q+PTEuMTMKK2Rpc3RyaWJ1dGU9dHJ1ZQorc2V0ZW52PQorICAgIFBZVEhP
TkRPTlRXUklURUJZVEVDT0RFPTEKK2NvbW1hbmRzPQorICBweS50ZXN0IC1uMyAtcmZzeFgge3Bv
c2FyZ3M6dGVzdGluZ30KKworW3Rlc3RlbnY6cHkyNy10cmlhbF0KK2RlcHM9dHdpc3RlZAorY29t
bWFuZHM9CisgIHB5LnRlc3QgLXJzeGYge3Bvc2FyZ3M6dGVzdGluZy90ZXN0X3VuaXR0ZXN0LnB5
fQorCitbdGVzdGVudjpweTM1LXRyaWFsXQorcGxhdGZvcm09bGludXh8ZGFyd2luCitkZXBzPXtb
dGVzdGVudjpweTI3LXRyaWFsXWRlcHN9Citjb21tYW5kcz0KKyAgcHkudGVzdCAtcnN4ZiB7cG9z
YXJnczp0ZXN0aW5nL3Rlc3RfdW5pdHRlc3QucHl9CisKK1t0ZXN0ZW52OmRvY3Rlc3RdCitjb21t
YW5kcz1weS50ZXN0IC0tZG9jdGVzdC1tb2R1bGVzIF9weXRlc3QKK2RlcHM9CisKK1t0ZXN0ZW52
OmRvY10KK2Jhc2VweXRob249cHl0aG9uCitjaGFuZ2VkaXI9ZG9jL2VuCitkZXBzPXNwaGlueAor
ICAgICBQeVlBTUwKKworY29tbWFuZHM9CisgICAgbWFrZSBjbGVhbgorICAgIG1ha2UgaHRtbAor
CitbdGVzdGVudjpkb2N0ZXN0aW5nXQorYmFzZXB5dGhvbiA9IHB5dGhvbjMuNAorY2hhbmdlZGly
PWRvYy9lbgorZGVwcz1QeVlBTUwKK2NvbW1hbmRzPSBweS50ZXN0IC1yZnN4WCB7cG9zYXJnc30K
KworW3Rlc3RlbnY6cmVnZW5dCitjaGFuZ2VkaXI9ZG9jL2VuCitiYXNlcHl0aG9uID0gcHl0aG9u
My40CitkZXBzPXNwaGlueAorICAgICBQeVlBTUwKKyAgICAgcmVnZW5kb2M+PTAuNi4xCit3aGl0
ZWxpc3RfZXh0ZXJuYWxzPQorICAgIHJtCisgICAgbWFrZQorY29tbWFuZHM9CisgICAgcm0gLXJm
IC90bXAvZG9jLWV4ZWMqCisgICAgbWFrZSByZWdlbgorCitbdGVzdGVudjpqeXRob25dCitjaGFu
Z2VkaXI9dGVzdGluZworY29tbWFuZHM9CisgICAge2VudnB5dGhvbn0ge2VudmJpbmRpcn0vcHku
dGVzdC1qeXRob24gLXJmc3hYIHtwb3NhcmdzfQorCitbdGVzdGVudjpweTI3LWN4ZnJlZXplXQor
Y2hhbmdlZGlyPXRlc3RpbmcvY3hfZnJlZXplCitwbGF0Zm9ybT1saW51eHxkYXJ3aW4KK2NvbW1h
bmRzPQorICAgIHtlbnZweXRob259IGluc3RhbGxfY3hfZnJlZXplLnB5CisgICAge2VudnB5dGhv
bn0gcnVudGVzdHNfc2V0dXAucHkgYnVpbGQgLS1idWlsZC1leGUgYnVpbGQKKyAgICB7ZW52cHl0
aG9ufSB0b3hfcnVuLnB5CisKKworW3Rlc3RlbnY6Y292ZXJhbGxzXQorcGFzc2VudiA9IFRSQVZJ
UyBUUkFWSVNfSk9CX0lEIFRSQVZJU19CUkFOQ0ggQ09WRVJBTExTX1JFUE9fVE9LRU4KK3VzZWRl
dmVsb3A9VHJ1ZQorYmFzZXB5dGhvbj1weXRob24zLjQKK2NoYW5nZWRpcj0uCitkZXBzID0KKyAg
ICB7W3Rlc3RlbnZdZGVwc30KKyAgICBjb3ZlcmFsbHMKK2NvbW1hbmRzPQorICAgIGNvdmVyYWdl
IHJ1biAtLXNvdXJjZT1fcHl0ZXN0IC1tIHB5dGVzdCB0ZXN0aW5nCisgICAgY292ZXJhZ2UgcmVw
b3J0IC1tCisgICAgY292ZXJhbGxzCisKK1tweXRlc3RdCittaW52ZXJzaW9uPTIuMAorcGx1Z2lu
cz1weXRlc3RlcgorIy0tcHlhcmdzIC0tZG9jdGVzdC1tb2R1bGVzIC0taWdub3JlPS50b3gKK2Fk
ZG9wdHM9IC1yeHNYIC1wIHB5dGVzdGVyIC0taWdub3JlPXRlc3RpbmcvY3hfZnJlZXplCityc3lu
Y2RpcnM9dG94LmluaSBweXRlc3QucHkgX3B5dGVzdCB0ZXN0aW5nCitweXRob25fZmlsZXM9dGVz
dF8qLnB5ICpfdGVzdC5weSB0ZXN0aW5nLyovKi5weQorcHl0aG9uX2NsYXNzZXM9VGVzdCBBY2Nl
cHRhbmNlCitweXRob25fZnVuY3Rpb25zPXRlc3QKK25vcmVjdXJzZWRpcnMgPSAudG94IGphIC5o
ZyBjeF9mcmVlemVfc291cmNlCisKKworW2ZsYWtlOF0KK2lnbm9yZSA9RTQwMSxFMjI1LEUyNjEs
RTEyOCxFMTI0LEUzMDEsRTMwMixFMTIxLEUzMDMsVzM5MSxFNTAxLEUyMzEsRTEyNixFNzAxLEUy
NjUsRTI0MSxFMjUxLEUyMjYsRTEwMSxXMTkxLEUxMzEsRTIwMyxFMTIyLEUxMjMsRTI3MSxFNzEy
LEUyMjIsRTEyNyxFMTI1LEUyMjEsVzI5MixFMTExLEUxMTMsRTI5MyxFMjYyLFcyOTMsRTEyOSxF
NzAyLEUyMDEsRTI3MixFMjAyLEU3MDQsRTczMSxFNDAyCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJU
ZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd2ViZHJpdmVyLy5naXRpZ25vcmUgYi9XZWJEcml2ZXJU
ZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd2ViZHJpdmVyLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmU4NDEzZTBlZTQ1Ci0tLSAvZGV2L251bGwKKysr
IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dlYmRyaXZlci8uZ2l0aWdub3Jl
CkBAIC0wLDAgKzEsMiBAQAord2ViZHJpdmVyLmVnZy1pbmZvLworKi5weWMKZGlmZiAtLWdpdCBh
L1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93ZWJkcml2ZXIvUkVBRE1FLm1kIGIv
V2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dlYmRyaXZlci9SRUFETUUubWQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjAxNWIzMWIyNTRjCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dlYmRyaXZlci9S
RUFETUUubWQKQEAgLTAsMCArMSw3MyBAQAorIyBXZWJEcml2ZXIgY2xpZW50IGZvciBQeXRob24K
KworVGhpcyBwYWNrYWdlIHByb3ZpZGVzIFB5dGhvbiBiaW5kaW5ncwordGhhdCBjb25mb3JtIHRv
IHRoZSBbVzNDIFdlYkRyaXZlciBzdGFuZGFyZF0oaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmRy
aXZlci93ZWJkcml2ZXItc3BlYy5odG1sKSwKK3doaWNoIHNwZWNpZmllcyBhIHJlbW90ZSBjb250
cm9sIHByb3RvY29sIGZvciB3ZWIgYnJvd3NlcnMuCisKK1RoZXNlIGJpbmRpbmdzIGFyZSB3cml0
dGVuIHdpdGggZGV0ZXJtaW5pbmcKK2ltcGxlbWVudGF0aW9uIGNvbXBsaWFuY2UgdG8gdGhlIHNw
ZWNpZmljYXRpb24gaW4gbWluZCwKK3NvIHRoYXQgZGlmZmVyZW50IHJlbW90ZSBlbmQgZHJpdmVy
cworY2FuIGRldGVybWluZSB3aGV0aGVyIHRoZXkgbWVldCB0aGUgcmVjb2duaXNlZCBzdGFuZGFy
ZC4KK1RoZSBjbGllbnQgaXMgdXNlZCBmb3IgdGhlIFdlYkRyaXZlciBzcGVjaWZpY2F0aW9uIHRl
c3RzCitpbiB0aGUgW1dlYiBQbGF0Zm9ybSBUZXN0c10oaHR0cHM6Ly9naXRodWIuY29tL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMpLgorCisjIyBJbnN0YWxsYXRpb24KKworVG8gaW5zdGFsbCB0aGUg
cGFja2FnZSBpbmRpdmlkdWFsbHkKK2luIHlvdXIgdmlydHVhbGVudiBvciBzeXN0ZW0td2lkZToK
KworICAgICUgcHl0aG9uIHNldHVwLnB5IGluc3RhbGwKKworU2luY2UgdGhpcyBwYWNrYWdlIGRv
ZXMgbm90IGhhdmUgYW55IGV4dGVybmFsIGRlcGVuZGVuY2llcywKK3lvdSBjYW4gYWxzbyB1c2Ug
dGhlIGNsaWVudCBkaXJlY3RseSBmcm9tIHRoZSBjaGVja291dCBkaXJlY3RvcnksCit3aGljaCBp
cyB1c2VmdWwgaWYgeW91IHdhbnQgdG8gY29udHJpYnV0ZSBwYXRjaGVzIGJhY2s6CisKKyAgICAl
IGNkIC9wYXRoL3RvL3dkY2xpZW50CisgICAgJSBweXRob24KKyAgICBQeXRob24gMi43LjEyKyAo
ZGVmYXVsdCwgQXVnICA0IDIwMTYsIDIwOjA0OjM0KSAKKyAgICBbR0NDIDYuMS4xIDIwMTYwNzI0
XSBvbiBsaW51eDIKKyAgICBUeXBlICJoZWxwIiwgImNvcHlyaWdodCIsICJjcmVkaXRzIiBvciAi
bGljZW5zZSIgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgPj4+IGltcG9ydCB3ZWJkcml2ZXIK
KyAgICA+Pj4gCisKK0lmIHlvdSBhcmUgd3JpdGluZyBXZWJEcml2ZXIgc3BlY2lmaWNhdGlvbiB0
ZXN0cyBmb3IKK1tXUFRdKGh0dHBzOi8vZ2l0aHViLmNvbS93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
KSwKK3RoZXJlIGlzIG5vIG5lZWQgdG8gaW5zdGFsbCB0aGUgY2xpZW50IG1hbnVhbGx5CithcyBp
dCBpcyBpbmNsdWRlZCBpbiB0aGUgYHRvb2xzL3dlYmRyaXZlcmAgZGlyZWN0b3J5LgorCisjIyBV
c2FnZQorCitZb3UgY2FuIHVzZSB0aGUgYnVpbHQtaW4KK1tjb250ZXh0IG1hbmFnZXJdKGh0dHBz
Oi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2NvbXBvdW5kX3N0bXRzLmh0bWwjdGhlLXdp
dGgtc3RhdGVtZW50KQordG8gbWFuYWdlIHRoZSBsaWZldGltZSBvZiB0aGUgc2Vzc2lvbi4KK1Ro
ZSBzZXNzaW9uIGlzIHN0YXJ0ZWQgaW1wbGljaXRseQorYXQgdGhlIGZpcnN0IGNhbGwgdG8gYSBj
b21tYW5kIGlmIGl0IGhhcyBub3QgYWxyZWFkeSBiZWVuIHN0YXJ0ZWQsCithbmQgd2lsbCBpbXBs
aWNpdGx5IGJlIGVuZGVkIHdoZW4gZXhpdGluZyB0aGUgY29udGV4dDoKKworYGBgcHkKK2ltcG9y
dCB3ZWJkcml2ZXIKKword2l0aCB3ZWJkcml2ZXIuU2Vzc2lvbigiMTI3LjAuMC4xIiwgNDQ0NCkg
YXMgc2Vzc2lvbjoKKyAgICBzZXNzaW9uLnVybCA9ICJodHRwczovL21vemlsbGEub3JnIgorICAg
IHByaW50ICJUaGUgY3VycmVudCBVUkwgaXMgJXMiICUgc2Vzc2lvbi51cmwKK2BgYAorCitUaGUg
Zm9sbG93aW5nIGlzIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvIHRoZSBhYm92ZSwKK2J1dCBn
aXZpbmcgeW91IG1hbnVhbCBjb250cm9sIG9mIHRoZSBzZXNzaW9uOgorCitgYGBweQoraW1wb3J0
IHdlYmRyaXZlcgorCitzZXNzaW9uID0gd2ViZHJpdmVyLlNlc3Npb24oIjEyNy4wLjAuMSIsIDQ0
NDQpCitzZXNzaW9uLnN0YXJ0KCkKKworc2Vzc2lvbi51cmwgPSAiaHR0cHM6Ly9tb3ppbGxhLm9y
ZyIKK3ByaW50ICJUaGUgY3VycmVudCBVUkwgaXMgJXMiICUgc2Vzc2lvbi51cmwKKworc2Vzc2lv
bi5lbmQoKQorYGBgCisKKyMjIERlcGVuZGVuY2llcworCitUaGlzIGNsaWVudCBoYXMgdGhlIGJl
bmVmaXQgb2Ygb25seSB1c2luZyBzdGFuZGFyZCBsaWJyYXJ5IGRlcGVuZGVuY2llcy4KK05vIGV4
dGVybmFsIFB5UEkgZGVwZW5kZW5jaWVzIGFyZSBuZWVkZWQuCmRpZmYgLS1naXQgYS9XZWJEcml2
ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd2ViZHJpdmVyL3NldHVwLnB5IGIvV2ViRHJpdmVy
VGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dlYmRyaXZlci9zZXR1cC5weQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYzQ3Mzk2MWNiNjQKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd2ViZHJpdmVyL3NldHVwLnB5CkBA
IC0wLDAgKzEsMTQgQEAKK2Zyb20gc2V0dXB0b29scyBpbXBvcnQgc2V0dXAsIGZpbmRfcGFja2Fn
ZXMKKworc2V0dXAobmFtZT0id2ViZHJpdmVyIiwKKyAgICAgIHZlcnNpb249IjEuMCIsCisgICAg
ICBkZXNjcmlwdGlvbj0iV2ViRHJpdmVyIGNsaWVudCBjb21wYXRpYmxlIHdpdGggIgorICAgICAg
ICAgICAgICAgICAgInRoZSBXM0MgYnJvd3NlciBhdXRvbWF0aW9uIHNwZWNpZmljYXRpb24uIiwK
KyAgICAgIGF1dGhvcj0iTW96aWxsYSBFbmdpbmVlcmluZyBQcm9kdWN0aXZpdHkiLAorICAgICAg
YXV0aG9yX2VtYWlsPSJ0b29sc0BsaXN0cy5tb3ppbGxhLm9yZyIsCisgICAgICBsaWNlbnNlPSJC
U0QiLAorICAgICAgcGFja2FnZXM9ZmluZF9wYWNrYWdlcygpLAorICAgICAgY2xhc3NpZmllcnM9
WyJEZXZlbG9wbWVudCBTdGF0dXMgOjogNCAtIEJldGEiLAorICAgICAgICAgICAgICAgICAgICJJ
bnRlbmRlZCBBdWRpZW5jZSA6OiBEZXZlbG9wZXJzIiwKKyAgICAgICAgICAgICAgICAgICAiTGlj
ZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogTW96aWxsYSBQdWJsaWMgTGljZW5zZSAyLjAgKE1QTCAy
LjApIiwKKyAgICAgICAgICAgICAgICAgICAiT3BlcmF0aW5nIFN5c3RlbSA6OiBPUyBJbmRlcGVu
ZGVudCJdKQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dl
YmRyaXZlci93ZWJkcml2ZXIvX19pbml0X18ucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93
M2MvdG9vbHMvd2ViZHJpdmVyL3dlYmRyaXZlci9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMzAyNDNmNzIwNWQKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd2ViZHJpdmVyL3dlYmRyaXZlci9fX2lu
aXRfXy5weQpAQCAtMCwwICsxLDI3IEBACitmcm9tIGNsaWVudCBpbXBvcnQgQ29va2llcywgRWxl
bWVudCwgRmluZCwgU2Vzc2lvbiwgVGltZW91dHMsIFdpbmRvdworZnJvbSBlcnJvciBpbXBvcnQg
KAorICAgIEVsZW1lbnROb3RTZWxlY3RhYmxlRXhjZXB0aW9uLAorICAgIEVsZW1lbnROb3RWaXNp
YmxlRXhjZXB0aW9uLAorICAgIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiwKKyAgICBJbnZhbGlk
Q29va2llRG9tYWluRXhjZXB0aW9uLAorICAgIEludmFsaWRFbGVtZW50Q29vcmRpbmF0ZXNFeGNl
cHRpb24sCisgICAgSW52YWxpZEVsZW1lbnRTdGF0ZUV4Y2VwdGlvbiwKKyAgICBJbnZhbGlkU2Vs
ZWN0b3JFeGNlcHRpb24sCisgICAgSW52YWxpZFNlc3Npb25JZEV4Y2VwdGlvbiwKKyAgICBKYXZh
c2NyaXB0RXJyb3JFeGNlcHRpb24sCisgICAgTW92ZVRhcmdldE91dE9mQm91bmRzRXhjZXB0aW9u
LAorICAgIE5vU3VjaEFsZXJ0RXhjZXB0aW9uLAorICAgIE5vU3VjaEVsZW1lbnRFeGNlcHRpb24s
CisgICAgTm9TdWNoRnJhbWVFeGNlcHRpb24sCisgICAgTm9TdWNoV2luZG93RXhjZXB0aW9uLAor
ICAgIFNjcmlwdFRpbWVvdXRFeGNlcHRpb24sCisgICAgU2Vzc2lvbk5vdENyZWF0ZWRFeGNlcHRp
b24sCisgICAgU3RhbGVFbGVtZW50UmVmZXJlbmNlRXhjZXB0aW9uLAorICAgIFRpbWVvdXRFeGNl
cHRpb24sCisgICAgVW5hYmxlVG9TZXRDb29raWVFeGNlcHRpb24sCisgICAgVW5leHBlY3RlZEFs
ZXJ0T3BlbkV4Y2VwdGlvbiwKKyAgICBVbmtub3duQ29tbWFuZEV4Y2VwdGlvbiwKKyAgICBVbmtu
b3duRXJyb3JFeGNlcHRpb24sCisgICAgVW5rbm93bk1ldGhvZEV4Y2VwdGlvbiwKKyAgICBVbnN1
cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiwKKyAgICBXZWJEcml2ZXJFeGNlcHRpb24pCmRpZmYg
LS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd2ViZHJpdmVyL3dlYmRy
aXZlci9jbGllbnQucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd2ViZHJp
dmVyL3dlYmRyaXZlci9jbGllbnQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLmViMDczNGJhNmJkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1w
b3J0ZWQvdzNjL3Rvb2xzL3dlYmRyaXZlci93ZWJkcml2ZXIvY2xpZW50LnB5CkBAIC0wLDAgKzEs
Njc1IEBACitpbXBvcnQganNvbgoraW1wb3J0IHVybHBhcnNlCisKK2ltcG9ydCBlcnJvcgoraW1w
b3J0IHRyYW5zcG9ydAorCitmcm9tIG1vemxvZyBpbXBvcnQgZ2V0X2RlZmF1bHRfbG9nZ2VyCisK
K2xvZ2dlciA9IGdldF9kZWZhdWx0X2xvZ2dlcigpCisKK2VsZW1lbnRfa2V5ID0gImVsZW1lbnQt
NjA2Ni0xMWU0LWE1MmUtNGY3MzU0NjZjZWNmIgorCisKK2RlZiBjb21tYW5kKGZ1bmMpOgorICAg
IGRlZiBpbm5lcihzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBpZiBoYXNhdHRyKHNl
bGYsICJzZXNzaW9uIik6CisgICAgICAgICAgICBzZXNzaW9uID0gc2VsZi5zZXNzaW9uCisgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICBzZXNzaW9uID0gc2VsZgorCisgICAgICAgIGlmIHNlc3Np
b24uc2Vzc2lvbl9pZCBpcyBOb25lOgorICAgICAgICAgICAgc2Vzc2lvbi5zdGFydCgpCisgICAg
ICAgIGFzc2VydCBzZXNzaW9uLnNlc3Npb25faWQgaXMgbm90IE5vbmUKKworICAgICAgICByZXR1
cm4gZnVuYyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCisKKyAgICBpbm5lci5fX25hbWVfXyA9IGZ1
bmMuX19uYW1lX18KKyAgICBpbm5lci5fX2RvY19fID0gZnVuYy5fX2RvY19fCisKKyAgICByZXR1
cm4gaW5uZXIKKworCitjbGFzcyBUaW1lb3V0cyhvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIHNlc3Npb24pOgorICAgICAgICBzZWxmLnNlc3Npb24gPSBzZXNzaW9uCisKKyAgICBk
ZWYgX2dldChzZWxmLCBrZXk9Tm9uZSk6CisgICAgICAgIHRpbWVvdXRzID0gc2VsZi5zZXNzaW9u
LnNlbmRfc2Vzc2lvbl9jb21tYW5kKCJHRVQiLCAidGltZW91dHMiKQorICAgICAgICBpZiBrZXkg
aXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gdGltZW91dHNba2V5XQorICAgICAgICBy
ZXR1cm4gdGltZW91dHMKKworICAgIGRlZiBfc2V0KHNlbGYsIGtleSwgc2Vjcyk6CisgICAgICAg
IGJvZHkgPSB7a2V5OiBzZWNzICogMTAwMH0KKyAgICAgICAgdGltZW91dHMgPSBzZWxmLnNlc3Np
b24uc2VuZF9zZXNzaW9uX2NvbW1hbmQoIlBPU1QiLCAidGltZW91dHMiLCBib2R5KQorICAgICAg
ICByZXR1cm4gdGltZW91dHNba2V5XQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHNjcmlwdChz
ZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2dldCgic2NyaXB0IikKKworICAgIEBzY3JpcHQu
c2V0dGVyCisgICAgZGVmIHNjcmlwdChzZWxmLCBzZWNzKToKKyAgICAgICAgcmV0dXJuIHNlbGYu
X3NldCgic2NyaXB0Iiwgc2VjcykKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBwYWdlX2xvYWQo
c2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9nZXQoInBhZ2VMb2FkIikKKworICAgIEBwYWdl
X2xvYWQuc2V0dGVyCisgICAgZGVmIHBhZ2VfbG9hZChzZWxmLCBzZWNzKToKKyAgICAgICAgcmV0
dXJuIHNlbGYuX3NldCgicGFnZUxvYWQiLCBzZWNzKQorCisgICAgQHByb3BlcnR5CisgICAgZGVm
IGltcGxpY2l0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZ2V0KCJpbXBsaWNpdCIpCisK
KyAgICBAaW1wbGljaXQuc2V0dGVyCisgICAgZGVmIGltcGxpY2l0KHNlbGYsIHNlY3MpOgorICAg
ICAgICByZXR1cm4gc2VsZi5fc2V0KCJpbXBsaWNpdCIsIHNlY3MpCisKKyAgICBkZWYgX19zdHJf
XyhzZWxmKToKKyAgICAgICAgbmFtZSA9ICIlcy4lcyIgJSAoc2VsZi5fX21vZHVsZV9fLCBzZWxm
Ll9fY2xhc3NfXy5fX25hbWVfXykKKyAgICAgICAgcmV0dXJuICI8JXMgc2NyaXB0PSVkLCBsb2Fk
PSVkLCBpbXBsaWNpdD0lZD4iICUgXAorICAgICAgICAgICAgKG5hbWUsIHNlbGYuc2NyaXB0LCBz
ZWxmLnBhZ2VfbG9hZCwgc2VsZi5pbXBsaWNpdCkKKworCitjbGFzcyBBY3Rpb25TZXF1ZW5jZShv
YmplY3QpOgorICAgICIiIkFQSSBmb3IgY3JlYXRpbmcgYW5kIHBlcmZvcm1pbmcgYWN0aW9uIHNl
cXVlbmNlcy4KKworICAgIEVhY2ggYWN0aW9uIG1ldGhvZCBhZGRzIG9uZSBvciBtb3JlIGFjdGlv
bnMgdG8gYSBxdWV1ZS4gV2hlbiBwZXJmb3JtKCkKKyAgICBpcyBjYWxsZWQsIHRoZSBxdWV1ZWQg
YWN0aW9ucyBmaXJlIGluIG9yZGVyLgorCisgICAgTWF5IGJlIGNoYWluZWQgdG9nZXRoZXIgYXMg
aW46OgorCisgICAgICAgICBBY3Rpb25TZXF1ZW5jZShzZXNzaW9uLCAia2V5IiwgaWQpIFwKKyAg
ICAgICAgICAgIC5rZXlfZG93bigiYSIpIFwKKyAgICAgICAgICAgIC5rZXlfdXAoImEiKSBcCisg
ICAgICAgICAgICAucGVyZm9ybSgpCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNl
c3Npb24sIGFjdGlvbl90eXBlLCBpbnB1dF9pZCwgcG9pbnRlcl9wYXJhbXM9Tm9uZSk6CisgICAg
ICAgICIiIlJlcHJlc2VudHMgYSBzZXF1ZW5jZSBvZiBhY3Rpb25zIG9mIG9uZSB0eXBlIGZvciBv
bmUgaW5wdXQgc291cmNlLgorCisgICAgICAgIDpwYXJhbSBzZXNzaW9uOiBXZWJEcml2ZXIgc2Vz
c2lvbi4KKyAgICAgICAgOnBhcmFtIGFjdGlvbl90eXBlOiBBY3Rpb24gdHlwZTsgbWF5IGJlICJu
b25lIiwgImtleSIsIG9yICJwb2ludGVyIi4KKyAgICAgICAgOnBhcmFtIGlucHV0X2lkOiBJRCBv
ZiBpbnB1dCBzb3VyY2UuCisgICAgICAgIDpwYXJhbSBwb2ludGVyX3BhcmFtczogT3B0aW9uYWwg
ZGljdGlvbmFyeSBvZiBwb2ludGVyIHBhcmFtZXRlcnMuCisgICAgICAgICIiIgorICAgICAgICBz
ZWxmLnNlc3Npb24gPSBzZXNzaW9uCisgICAgICAgIHNlbGYuX2lkID0gaW5wdXRfaWQKKyAgICAg
ICAgc2VsZi5fdHlwZSA9IGFjdGlvbl90eXBlCisgICAgICAgIHNlbGYuX2FjdGlvbnMgPSBbXQor
ICAgICAgICBzZWxmLl9wb2ludGVyX3BhcmFtcyA9IHBvaW50ZXJfcGFyYW1zCisKKyAgICBAcHJv
cGVydHkKKyAgICBkZWYgZGljdChzZWxmKToKKyAgICAgICAgZCA9IHsKKyAgICAgICAgICAgICJ0
eXBlIjogc2VsZi5fdHlwZSwKKyAgICAgICAgICAgICJpZCI6IHNlbGYuX2lkLAorICAgICAgICAg
ICAgImFjdGlvbnMiOiBzZWxmLl9hY3Rpb25zLAorICAgICAgICB9CisgICAgICAgIGlmIHNlbGYu
X3BvaW50ZXJfcGFyYW1zIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZFsicGFyYW1ldGVycyJd
ID0gc2VsZi5fcG9pbnRlcl9wYXJhbXMKKyAgICAgICAgcmV0dXJuIGQKKworICAgIEBjb21tYW5k
CisgICAgZGVmIHBlcmZvcm0oc2VsZik6CisgICAgICAgICIiIlBlcmZvcm0gYWxsIHF1ZXVlZCBh
Y3Rpb25zLiIiIgorICAgICAgICBzZWxmLnNlc3Npb24uYWN0aW9ucy5wZXJmb3JtKFtzZWxmLmRp
Y3RdKQorCisgICAgZGVmIF9rZXlfYWN0aW9uKHNlbGYsIHN1YnR5cGUsIHZhbHVlKToKKyAgICAg
ICAgc2VsZi5fYWN0aW9ucy5hcHBlbmQoeyJ0eXBlIjogc3VidHlwZSwgInZhbHVlIjogdmFsdWV9
KQorCisgICAgZGVmIF9wb2ludGVyX2FjdGlvbihzZWxmLCBzdWJ0eXBlLCBidXR0b24pOgorICAg
ICAgICBzZWxmLl9hY3Rpb25zLmFwcGVuZCh7InR5cGUiOiBzdWJ0eXBlLCAiYnV0dG9uIjogYnV0
dG9ufSkKKworICAgIGRlZiBwYXVzZShzZWxmLCBkdXJhdGlvbik6CisgICAgICAgIHNlbGYuX2Fj
dGlvbnMuYXBwZW5kKHsidHlwZSI6ICJwYXVzZSIsICJkdXJhdGlvbiI6IGR1cmF0aW9ufSkKKyAg
ICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBwb2ludGVyX21vdmUoc2VsZiwgeCwgeSwgZHVy
YXRpb249Tm9uZSwgb3JpZ2luPU5vbmUpOgorICAgICAgICAiIiJRdWV1ZSBhIHBvaW50ZXJNb3Zl
IGFjdGlvbi4KKworICAgICAgICA6cGFyYW0geDogRGVzdGluYXRpb24geC1heGlzIGNvb3JkaW5h
dGUgb2YgcG9pbnRlciBpbiBDU1MgcGl4ZWxzLgorICAgICAgICA6cGFyYW0geTogRGVzdGluYXRp
b24geS1heGlzIGNvb3JkaW5hdGUgb2YgcG9pbnRlciBpbiBDU1MgcGl4ZWxzLgorICAgICAgICA6
cGFyYW0gZHVyYXRpb246IE51bWJlciBvZiBtaWxsaXNlY29uZHMgb3ZlciB3aGljaCB0byBkaXN0
cmlidXRlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmUuIElmIE5vbmUsIHJlbW90
ZSBlbmQgZGVmYXVsdHMgdG8gMC4KKyAgICAgICAgOnBhcmFtIG9yaWdpbjogT3JpZ2luIG9mIGNv
b3JkaW5hdGVzLCBlaXRoZXIgInZpZXdwb3J0IiwgInBvaW50ZXIiIG9yCisgICAgICAgICAgICAg
ICAgICAgICAgIGFuIEVsZW1lbnQuIElmIE5vbmUsIHJlbW90ZSBlbmQgZGVmYXVsdHMgdG8gInZp
ZXdwb3J0Ii4KKyAgICAgICAgIiIiCisgICAgICAgIGFjdGlvbiA9IHsKKyAgICAgICAgICAgICJ0
eXBlIjogInBvaW50ZXJNb3ZlIiwKKyAgICAgICAgICAgICJ4IjogeCwKKyAgICAgICAgICAgICJ5
IjogeQorICAgICAgICB9CisgICAgICAgIGlmIGR1cmF0aW9uIGlzIG5vdCBOb25lOgorICAgICAg
ICAgICAgYWN0aW9uWyJkdXJhdGlvbiJdID0gZHVyYXRpb24KKyAgICAgICAgaWYgb3JpZ2luIGlz
IG5vdCBOb25lOgorICAgICAgICAgICAgYWN0aW9uWyJvcmlnaW4iXSA9IG9yaWdpbiBpZiBpc2lu
c3RhbmNlKG9yaWdpbiwgYmFzZXN0cmluZykgZWxzZSBvcmlnaW4uanNvbigpCisgICAgICAgIHNl
bGYuX2FjdGlvbnMuYXBwZW5kKGFjdGlvbikKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRl
ZiBwb2ludGVyX3VwKHNlbGYsIGJ1dHRvbj0wKToKKyAgICAgICAgIiIiUXVldWUgYSBwb2ludGVy
VXAgYWN0aW9uIGZvciBgYnV0dG9uYC4KKworICAgICAgICA6cGFyYW0gYnV0dG9uOiBQb2ludGVy
IGJ1dHRvbiB0byBwZXJmb3JtIGFjdGlvbiB3aXRoLgorICAgICAgICAgICAgICAgICAgICAgICBE
ZWZhdWx0OiAwLCB3aGljaCByZXByZXNlbnRzIG1haW4gZGV2aWNlIGJ1dHRvbi4KKyAgICAgICAg
IiIiCisgICAgICAgIHNlbGYuX3BvaW50ZXJfYWN0aW9uKCJwb2ludGVyVXAiLCBidXR0b24pCisg
ICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgcG9pbnRlcl9kb3duKHNlbGYsIGJ1dHRvbj0w
KToKKyAgICAgICAgIiIiUXVldWUgYSBwb2ludGVyRG93biBhY3Rpb24gZm9yIGBidXR0b25gLgor
CisgICAgICAgIDpwYXJhbSBidXR0b246IFBvaW50ZXIgYnV0dG9uIHRvIHBlcmZvcm0gYWN0aW9u
IHdpdGguCisgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHQ6IDAsIHdoaWNoIHJlcHJlc2Vu
dHMgbWFpbiBkZXZpY2UgYnV0dG9uLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fcG9pbnRl
cl9hY3Rpb24oInBvaW50ZXJEb3duIiwgYnV0dG9uKQorICAgICAgICByZXR1cm4gc2VsZgorCisg
ICAgZGVmIGNsaWNrKHNlbGYsIGVsZW1lbnQ9Tm9uZSwgYnV0dG9uPTApOgorICAgICAgICAiIiJR
dWV1ZSBhIGNsaWNrIHdpdGggdGhlIHNwZWNpZmllZCBidXR0b24uCisKKyAgICAgICAgSWYgYW4g
ZWxlbWVudCBpcyBnaXZlbiwgbW92ZSB0aGUgcG9pbnRlciB0byB0aGF0IGVsZW1lbnQgZmlyc3Qs
CisgICAgICAgIG90aGVyd2lzZSBjbGljayBjdXJyZW50IHBvaW50ZXIgY29vcmRpbmF0ZXMuCisK
KyAgICAgICAgOnBhcmFtIGVsZW1lbnQ6IE9wdGlvbmFsIGVsZW1lbnQgdG8gY2xpY2suCisgICAg
ICAgIDpwYXJhbSBidXR0b246IEludGVnZXIgcmVwcmVzZW50aW5nIHBvaW50ZXIgYnV0dG9uIHRv
IHBlcmZvcm0gYWN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgIHdpdGguIERlZmF1bHQ6IDAs
IHdoaWNoIHJlcHJlc2VudHMgbWFpbiBkZXZpY2UgYnV0dG9uLgorICAgICAgICAiIiIKKyAgICAg
ICAgaWYgZWxlbWVudDoKKyAgICAgICAgICAgIHNlbGYucG9pbnRlcl9tb3ZlKDAsIDAsIG9yaWdp
bj1lbGVtZW50KQorICAgICAgICByZXR1cm4gc2VsZi5wb2ludGVyX2Rvd24oYnV0dG9uKS5wb2lu
dGVyX3VwKGJ1dHRvbikKKworICAgIGRlZiBrZXlfdXAoc2VsZiwgdmFsdWUpOgorICAgICAgICAi
IiJRdWV1ZSBhIGtleVVwIGFjdGlvbiBmb3IgYHZhbHVlYC4KKworICAgICAgICA6cGFyYW0gdmFs
dWU6IENoYXJhY3RlciB0byBwZXJmb3JtIGtleSBhY3Rpb24gd2l0aC4KKyAgICAgICAgIiIiCisg
ICAgICAgIHNlbGYuX2tleV9hY3Rpb24oImtleVVwIiwgdmFsdWUpCisgICAgICAgIHJldHVybiBz
ZWxmCisKKyAgICBkZWYga2V5X2Rvd24oc2VsZiwgdmFsdWUpOgorICAgICAgICAiIiJRdWV1ZSBh
IGtleURvd24gYWN0aW9uIGZvciBgdmFsdWVgLgorCisgICAgICAgIDpwYXJhbSB2YWx1ZTogQ2hh
cmFjdGVyIHRvIHBlcmZvcm0ga2V5IGFjdGlvbiB3aXRoLgorICAgICAgICAiIiIKKyAgICAgICAg
c2VsZi5fa2V5X2FjdGlvbigia2V5RG93biIsIHZhbHVlKQorICAgICAgICByZXR1cm4gc2VsZgor
CisgICAgZGVmIHNlbmRfa2V5cyhzZWxmLCBrZXlzKToKKyAgICAgICAgIiIiUXVldWUgYSBrZXlE
b3duIGFuZCBrZXlVcCBhY3Rpb24gZm9yIGVhY2ggY2hhcmFjdGVyIGluIGBrZXlzYC4KKworICAg
ICAgICA6cGFyYW0ga2V5czogU3RyaW5nIG9mIGtleXMgdG8gcGVyZm9ybSBrZXkgYWN0aW9ucyB3
aXRoLgorICAgICAgICAiIiIKKyAgICAgICAgZm9yIGMgaW4ga2V5czoKKyAgICAgICAgICAgIHNl
bGYua2V5X2Rvd24oYykKKyAgICAgICAgICAgIHNlbGYua2V5X3VwKGMpCisgICAgICAgIHJldHVy
biBzZWxmCisKKworY2xhc3MgQWN0aW9ucyhvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBzZXNzaW9uKToKKyAgICAgICAgc2VsZi5zZXNzaW9uID0gc2Vzc2lvbgorCisgICAgQGNvbW1h
bmQKKyAgICBkZWYgcGVyZm9ybShzZWxmLCBhY3Rpb25zPU5vbmUpOgorICAgICAgICAiIiJQZXJm
b3JtcyBhY3Rpb25zIGJ5IHRpY2sgZnJvbSBlYWNoIGFjdGlvbiBzZXF1ZW5jZSBpbiBgYWN0aW9u
c2AuCisKKyAgICAgICAgOnBhcmFtIGFjdGlvbnM6IExpc3Qgb2YgaW5wdXQgc291cmNlIGFjdGlv
biBzZXF1ZW5jZXMuIEEgc2luZ2xlIGFjdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgc2Vx
dWVuY2UgbWF5IGJlIGNyZWF0ZWQgd2l0aCB0aGUgaGVscCBvZgorICAgICAgICAgICAgICAgICAg
ICAgICAgYGBBY3Rpb25TZXF1ZW5jZS5kaWN0YGAuCisgICAgICAgICIiIgorICAgICAgICBib2R5
ID0geyJhY3Rpb25zIjogW10gaWYgYWN0aW9ucyBpcyBOb25lIGVsc2UgYWN0aW9uc30KKyAgICAg
ICAgcmV0dXJuIHNlbGYuc2Vzc2lvbi5zZW5kX3Nlc3Npb25fY29tbWFuZCgiUE9TVCIsICJhY3Rp
b25zIiwgYm9keSkKKworICAgIEBjb21tYW5kCisgICAgZGVmIHJlbGVhc2Uoc2VsZik6CisgICAg
ICAgIHJldHVybiBzZWxmLnNlc3Npb24uc2VuZF9zZXNzaW9uX2NvbW1hbmQoIkRFTEVURSIsICJh
Y3Rpb25zIikKKworICAgIGRlZiBzZXF1ZW5jZShzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAg
ICAgICAiIiJSZXR1cm4gYW4gZW1wdHkgQWN0aW9uU2VxdWVuY2Ugb2YgdGhlIGRlc2lnbmF0ZWQg
dHlwZS4KKworICAgICAgICBTZWUgQWN0aW9uU2VxdWVuY2UgZm9yIHBhcmFtZXRlciBsaXN0Lgor
ICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIEFjdGlvblNlcXVlbmNlKHNlbGYuc2Vzc2lvbiwg
KmFyZ3MsICoqa3dhcmdzKQorCisKK2NsYXNzIFdpbmRvdyhvYmplY3QpOgorICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBzZXNzaW9uKToKKyAgICAgICAgc2VsZi5zZXNzaW9uID0gc2Vzc2lvbgorCisg
ICAgQHByb3BlcnR5CisgICAgQGNvbW1hbmQKKyAgICBkZWYgcmVjdChzZWxmKToKKyAgICAgICAg
cmV0dXJuIHNlbGYuc2Vzc2lvbi5zZW5kX3Nlc3Npb25fY29tbWFuZCgiR0VUIiwgIndpbmRvdy9y
ZWN0IikKKworICAgIEBwcm9wZXJ0eQorICAgIEBjb21tYW5kCisgICAgZGVmIHNpemUoc2VsZik6
CisgICAgICAgICIiIkdldHMgdGhlIHdpbmRvdyBzaXplIGFzIGEgdHVwbGUgb2YgYCh3aWR0aCwg
aGVpZ2h0KWAuIiIiCisgICAgICAgIHJlY3QgPSBzZWxmLnJlY3QKKyAgICAgICAgcmV0dXJuIChy
ZWN0WyJ3aWR0aCJdLCByZWN0WyJoZWlnaHQiXSkKKworICAgIEBzaXplLnNldHRlcgorICAgIEBj
b21tYW5kCisgICAgZGVmIHNpemUoc2VsZiwgbmV3X3NpemUpOgorICAgICAgICAiIiJTZXQgd2lu
ZG93IHNpemUgYnkgcGFzc2luZyBhIHR1cGxlIG9mIGAod2lkdGgsIGhlaWdodClgLiIiIgorICAg
ICAgICB3aWR0aCwgaGVpZ2h0ID0gbmV3X3NpemUKKyAgICAgICAgYm9keSA9IHsid2lkdGgiOiB3
aWR0aCwgImhlaWdodCI6IGhlaWdodH0KKyAgICAgICAgc2VsZi5zZXNzaW9uLnNlbmRfc2Vzc2lv
bl9jb21tYW5kKCJQT1NUIiwgIndpbmRvdy9yZWN0IiwgYm9keSkKKworICAgIEBwcm9wZXJ0eQor
ICAgIEBjb21tYW5kCisgICAgZGVmIHBvc2l0aW9uKHNlbGYpOgorICAgICAgICAiIiJHZXRzIHRo
ZSB3aW5kb3cgcG9zaXRpb24gYXMgYSB0dXBsZSBvZiBgKHgsIHkpYC4iIiIKKyAgICAgICAgcmVj
dCA9IHNlbGYucmVjdAorICAgICAgICByZXR1cm4gKHJlY3RbIngiXSwgcmVjdFsieSJdKQorCisg
ICAgQHBvc2l0aW9uLnNldHRlcgorICAgIEBjb21tYW5kCisgICAgZGVmIHBvc2l0aW9uKHNlbGYs
IG5ld19wb3NpdGlvbik6CisgICAgICAgICIiIlNldCB3aW5kb3cgcG9zaXRpb24gYnkgcGFzc2lu
ZyBhIHR1cGxlIG9mIGAoeCwgeSlgLiIiIgorICAgICAgICB4LCB5ID0gbmV3X3Bvc2l0aW9uCisg
ICAgICAgIGJvZHkgPSB7IngiOiB4LCAieSI6IHl9CisgICAgICAgIHNlbGYuc2Vzc2lvbi5zZW5k
X3Nlc3Npb25fY29tbWFuZCgiUE9TVCIsICJ3aW5kb3cvcmVjdCIsIGJvZHkpCisKKyAgICBAY29t
bWFuZAorICAgIGRlZiBtYXhpbWl6ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuc2Vzc2lv
bi5zZW5kX3Nlc3Npb25fY29tbWFuZCgiUE9TVCIsICJ3aW5kb3cvbWF4aW1pemUiKQorCisgICAg
QGNvbW1hbmQKKyAgICBkZWYgbWluaW1pemUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnNl
c3Npb24uc2VuZF9zZXNzaW9uX2NvbW1hbmQoIlBPU1QiLCAid2luZG93L21pbmltaXplIikKKwor
ICAgIEBjb21tYW5kCisgICAgZGVmIGZ1bGxzY3JlZW4oc2VsZik6CisgICAgICAgIHJldHVybiBz
ZWxmLnNlc3Npb24uc2VuZF9zZXNzaW9uX2NvbW1hbmQoIlBPU1QiLCAid2luZG93L2Z1bGxzY3Jl
ZW4iKQorCisKK2NsYXNzIEZpbmQob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2Vz
c2lvbik6CisgICAgICAgIHNlbGYuc2Vzc2lvbiA9IHNlc3Npb24KKworICAgIEBjb21tYW5kCisg
ICAgZGVmIGNzcyhzZWxmLCBzZWxlY3RvciwgYWxsPVRydWUpOgorICAgICAgICByZXR1cm4gc2Vs
Zi5fZmluZF9lbGVtZW50KCJjc3Mgc2VsZWN0b3IiLCBzZWxlY3RvciwgYWxsKQorCisgICAgZGVm
IF9maW5kX2VsZW1lbnQoc2VsZiwgc3RyYXRlZ3ksIHNlbGVjdG9yLCBhbGwpOgorICAgICAgICBy
b3V0ZSA9ICJlbGVtZW50cyIgaWYgYWxsIGVsc2UgImVsZW1lbnQiCisKKyAgICAgICAgYm9keSA9
IHsidXNpbmciOiBzdHJhdGVneSwKKyAgICAgICAgICAgICAgICAidmFsdWUiOiBzZWxlY3Rvcn0K
KworICAgICAgICBkYXRhID0gc2VsZi5zZXNzaW9uLnNlbmRfc2Vzc2lvbl9jb21tYW5kKCJQT1NU
Iiwgcm91dGUsIGJvZHkpCisKKyAgICAgICAgaWYgYWxsOgorICAgICAgICAgICAgcnYgPSBbc2Vs
Zi5zZXNzaW9uLl9lbGVtZW50KGl0ZW0pIGZvciBpdGVtIGluIGRhdGFdCisgICAgICAgIGVsc2U6
CisgICAgICAgICAgICBydiA9IHNlbGYuc2Vzc2lvbi5fZWxlbWVudChkYXRhKQorCisgICAgICAg
IHJldHVybiBydgorCisKK2NsYXNzIENvb2tpZXMob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18o
c2VsZiwgc2Vzc2lvbik6CisgICAgICAgIHNlbGYuc2Vzc2lvbiA9IHNlc3Npb24KKworICAgIGRl
ZiBfX2dldGl0ZW1fXyhzZWxmLCBuYW1lKToKKyAgICAgICAgc2VsZi5zZXNzaW9uLnNlbmRfc2Vz
c2lvbl9jb21tYW5kKCJHRVQiLCAiY29va2llLyVzIiAlIG5hbWUsIHt9KQorCisgICAgZGVmIF9f
c2V0aXRlbV9fKHNlbGYsIG5hbWUsIHZhbHVlKToKKyAgICAgICAgY29va2llID0geyJuYW1lIjog
bmFtZSwKKyAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IE5vbmV9CisKKyAgICAgICAgaWYgaXNp
bnN0YW5jZShuYW1lLCAoc3RyLCB1bmljb2RlKSk6CisgICAgICAgICAgICBjb29raWVbInZhbHVl
Il0gPSB2YWx1ZQorICAgICAgICBlbGlmIGhhc2F0dHIodmFsdWUsICJ2YWx1ZSIpOgorICAgICAg
ICAgICAgY29va2llWyJ2YWx1ZSJdID0gdmFsdWUudmFsdWUKKyAgICAgICAgc2VsZi5zZXNzaW9u
LnNlbmRfc2Vzc2lvbl9jb21tYW5kKCJQT1NUIiwgImNvb2tpZS8lcyIgJSBuYW1lLCB7fSkKKwor
CitjbGFzcyBVc2VyUHJvbXB0KG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlc3Np
b24pOgorICAgICAgICBzZWxmLnNlc3Npb24gPSBzZXNzaW9uCisKKyAgICBAY29tbWFuZAorICAg
IGRlZiBkaXNtaXNzKHNlbGYpOgorICAgICAgICBzZWxmLnNlc3Npb24uc2VuZF9zZXNzaW9uX2Nv
bW1hbmQoIlBPU1QiLCAiYWxlcnQvZGlzbWlzcyIpCisKKyAgICBAY29tbWFuZAorICAgIGRlZiBh
Y2NlcHQoc2VsZik6CisgICAgICAgIHNlbGYuc2Vzc2lvbi5zZW5kX3Nlc3Npb25fY29tbWFuZCgi
UE9TVCIsICJhbGVydC9hY2NlcHQiKQorCisgICAgQHByb3BlcnR5CisgICAgQGNvbW1hbmQKKyAg
ICBkZWYgdGV4dChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuc2Vzc2lvbi5zZW5kX3Nlc3Np
b25fY29tbWFuZCgiR0VUIiwgImFsZXJ0L3RleHQiKQorCisgICAgQHRleHQuc2V0dGVyCisgICAg
QGNvbW1hbmQKKyAgICBkZWYgdGV4dChzZWxmLCB2YWx1ZSk6CisgICAgICAgIGJvZHkgPSB7InZh
bHVlIjogbGlzdCh2YWx1ZSl9CisgICAgICAgIHNlbGYuc2Vzc2lvbi5zZW5kX3Nlc3Npb25fY29t
bWFuZCgiUE9TVCIsICJhbGVydC90ZXh0IiwgYm9keT1ib2R5KQorCisKK2NsYXNzIFNlc3Npb24o
b2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydCwgdXJsX3ByZWZpeD0i
LyIsIGNhcGFiaWxpdGllcz1Ob25lLAorICAgICAgICAgICAgICAgICB0aW1lb3V0PU5vbmUsIGV4
dGVuc2lvbj1Ob25lKToKKyAgICAgICAgc2VsZi50cmFuc3BvcnQgPSB0cmFuc3BvcnQuSFRUUFdp
cmVQcm90b2NvbCgKKyAgICAgICAgICAgIGhvc3QsIHBvcnQsIHVybF9wcmVmaXgsIHRpbWVvdXQ9
dGltZW91dCkKKyAgICAgICAgc2VsZi5jYXBhYmlsaXRpZXMgPSBjYXBhYmlsaXRpZXMKKyAgICAg
ICAgc2VsZi5zZXNzaW9uX2lkID0gTm9uZQorICAgICAgICBzZWxmLnRpbWVvdXRzID0gTm9uZQor
ICAgICAgICBzZWxmLndpbmRvdyA9IE5vbmUKKyAgICAgICAgc2VsZi5maW5kID0gTm9uZQorICAg
ICAgICBzZWxmLl9lbGVtZW50X2NhY2hlID0ge30KKyAgICAgICAgc2VsZi5leHRlbnNpb24gPSBO
b25lCisgICAgICAgIHNlbGYuZXh0ZW5zaW9uX2NscyA9IGV4dGVuc2lvbgorCisgICAgICAgIHNl
bGYudGltZW91dHMgPSBUaW1lb3V0cyhzZWxmKQorICAgICAgICBzZWxmLndpbmRvdyA9IFdpbmRv
dyhzZWxmKQorICAgICAgICBzZWxmLmZpbmQgPSBGaW5kKHNlbGYpCisgICAgICAgIHNlbGYuYWxl
cnQgPSBVc2VyUHJvbXB0KHNlbGYpCisgICAgICAgIHNlbGYuYWN0aW9ucyA9IEFjdGlvbnMoc2Vs
ZikKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHNlbGYuc3RhcnQoKQorICAg
ICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzLCAqKmt3YXJn
cyk6CisgICAgICAgIHNlbGYuZW5kKCkKKworICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAg
ICBzZWxmLmVuZCgpCisKKyAgICBkZWYgc3RhcnQoc2VsZik6CisgICAgICAgIGlmIHNlbGYuc2Vz
c2lvbl9pZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGJvZHkg
PSB7fQorCisgICAgICAgIGlmIHNlbGYuY2FwYWJpbGl0aWVzIGlzIG5vdCBOb25lOgorICAgICAg
ICAgICAgYm9keVsiY2FwYWJpbGl0aWVzIl0gPSBzZWxmLmNhcGFiaWxpdGllcworCisgICAgICAg
IHZhbHVlID0gc2VsZi5zZW5kX2NvbW1hbmQoIlBPU1QiLCAic2Vzc2lvbiIsIGJvZHk9Ym9keSkK
KyAgICAgICAgc2VsZi5zZXNzaW9uX2lkID0gdmFsdWVbInNlc3Npb25JZCJdCisgICAgICAgIHNl
bGYuY2FwYWJpbGl0aWVzID0gdmFsdWVbImNhcGFiaWxpdGllcyJdCisKKyAgICAgICAgaWYgc2Vs
Zi5leHRlbnNpb25fY2xzOgorICAgICAgICAgICAgc2VsZi5leHRlbnNpb24gPSBzZWxmLmV4dGVu
c2lvbl9jbHMoc2VsZikKKworICAgICAgICByZXR1cm4gdmFsdWUKKworICAgIGRlZiBlbmQoc2Vs
Zik6CisgICAgICAgIGlmIHNlbGYuc2Vzc2lvbl9pZCBpcyBOb25lOgorICAgICAgICAgICAgcmV0
dXJuCisKKyAgICAgICAgdXJsID0gInNlc3Npb24vJXMiICUgc2VsZi5zZXNzaW9uX2lkCisgICAg
ICAgIHNlbGYuc2VuZF9jb21tYW5kKCJERUxFVEUiLCB1cmwpCisKKyAgICAgICAgc2VsZi5zZXNz
aW9uX2lkID0gTm9uZQorCisgICAgZGVmIHNlbmRfY29tbWFuZChzZWxmLCBtZXRob2QsIHVybCwg
Ym9keT1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIFNlbmQgYSBjb21tYW5kIHRvIHRoZSBy
ZW1vdGUgZW5kIGFuZCB2YWxpZGF0ZSBpdHMgc3VjY2Vzcy4KKworICAgICAgICA6cGFyYW0gbWV0
aG9kOiBIVFRQIG1ldGhvZCB0byB1c2UgaW4gcmVxdWVzdC4KKyAgICAgICAgOnBhcmFtIHVyaTog
IkNvbW1hbmQgcGFydCIgb2YgdGhlIEhUVFAgcmVxdWVzdCBVUkwsCisgICAgICAgICAgICBlLmcu
IGB3aW5kb3cvcmVjdGAuCisgICAgICAgIDpwYXJhbSBib2R5OiBPcHRpb25hbCBib2R5IG9mIHRo
ZSBIVFRQIHJlcXVlc3QuCisKKyAgICAgICAgOnJldHVybjogYE5vbmVgIGlmIHRoZSBIVFRQIHJl
c3BvbnNlIGJvZHkgd2FzIGVtcHR5LCBvdGhlcndpc2UKKyAgICAgICAgICAgIHRoZSByZXN1bHQg
b2YgcGFyc2luZyB0aGUgYm9keSBhcyBKU09OLgorCisgICAgICAgIDpyYWlzZXMgZXJyb3IuV2Vi
RHJpdmVyRXhjZXB0aW9uOiBJZiB0aGUgcmVtb3RlIGVuZCByZXR1cm5zCisgICAgICAgICAgICBh
biBlcnJvci4KKyAgICAgICAgIiIiCisgICAgICAgIHJlc3BvbnNlID0gc2VsZi50cmFuc3BvcnQu
c2VuZChtZXRob2QsIHVybCwgYm9keSkKKworICAgICAgICBpZiAidmFsdWUiIGluIHJlc3BvbnNl
LmJvZHk6CisgICAgICAgICAgICB2YWx1ZSA9IHJlc3BvbnNlLmJvZHlbInZhbHVlIl0KKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIGVycm9yLlVua25vd25FcnJvckV4Y2VwdGlvbigi
Tm8gJ3ZhbHVlJyBrZXkgaW4gcmVzcG9uc2UgYm9keTpcbiVzIiAlCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbi5kdW1wcyhyZXNwb25zZS5ib2R5KSkK
KworICAgICAgICBpZiByZXNwb25zZS5zdGF0dXMgIT0gMjAwOgorICAgICAgICAgICAgY2xzID0g
ZXJyb3IuZ2V0KHZhbHVlLmdldCgiZXJyb3IiKSkKKyAgICAgICAgICAgIHJhaXNlIGNscyh2YWx1
ZS5nZXQoIm1lc3NhZ2UiKSkKKworICAgICAgICByZXR1cm4gdmFsdWUKKworICAgIGRlZiBzZW5k
X3Nlc3Npb25fY29tbWFuZChzZWxmLCBtZXRob2QsIHVyaSwgYm9keT1Ob25lKToKKyAgICAgICAg
IiIiCisgICAgICAgIFNlbmQgYSBjb21tYW5kIHRvIGFuIGVzdGFibGlzaGVkIHNlc3Npb24gYW5k
IHZhbGlkYXRlIGl0cyBzdWNjZXNzLgorCisgICAgICAgIDpwYXJhbSBtZXRob2Q6IEhUVFAgbWV0
aG9kIHRvIHVzZSBpbiByZXF1ZXN0LgorICAgICAgICA6cGFyYW0gdXJsOiAiQ29tbWFuZCBwYXJ0
IiBvZiB0aGUgSFRUUCByZXF1ZXN0IFVSTCwKKyAgICAgICAgICAgIGUuZy4gYHdpbmRvdy9yZWN0
YC4KKyAgICAgICAgOnBhcmFtIGJvZHk6IE9wdGlvbmFsIGJvZHkgb2YgdGhlIEhUVFAgcmVxdWVz
dC4gIE11c3QgYmUgSlNPTgorICAgICAgICAgICAgc2VyaWFsaXNhYmxlLgorCisgICAgICAgIDpy
ZXR1cm46IGBOb25lYCBpZiB0aGUgSFRUUCByZXNwb25zZSBib2R5IHdhcyBlbXB0eSwgb3RoZXJ3
aXNlCisgICAgICAgICAgICB0aGUgcmVzdWx0IG9mIHBhcnNpbmcgdGhlIGJvZHkgYXMgSlNPTi4K
KworICAgICAgICA6cmFpc2VzIGVycm9yLlNlc3Npb25Ob3RDcmVhdGVkRXhjZXB0aW9uOiBJZiB0
aGVyZSBpcyBubyBhY3RpdmUKKyAgICAgICAgICAgIHNlc3Npb24uCisgICAgICAgIDpyYWlzZXMg
ZXJyb3IuV2ViRHJpdmVyRXhjZXB0aW9uOiBJZiB0aGUgcmVtb3RlIGVuZCByZXR1cm5zCisgICAg
ICAgICAgICBhbiBlcnJvci4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuc2Vzc2lvbl9p
ZCBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgZXJyb3IuU2Vzc2lvbk5vdENyZWF0ZWRFeGNl
cHRpb24oKQorCisgICAgICAgIHVybCA9IHVybHBhcnNlLnVybGpvaW4oInNlc3Npb24vJXMvIiAl
IHNlbGYuc2Vzc2lvbl9pZCwgdXJpKQorICAgICAgICByZXR1cm4gc2VsZi5zZW5kX2NvbW1hbmQo
bWV0aG9kLCB1cmwsIGJvZHkpCisKKyAgICBAcHJvcGVydHkKKyAgICBAY29tbWFuZAorICAgIGRl
ZiB1cmwoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnNlbmRfc2Vzc2lvbl9jb21tYW5kKCJH
RVQiLCAidXJsIikKKworICAgIEB1cmwuc2V0dGVyCisgICAgQGNvbW1hbmQKKyAgICBkZWYgdXJs
KHNlbGYsIHVybCk6CisgICAgICAgIGlmIHVybHBhcnNlLnVybHNwbGl0KHVybCkubmV0bG9jIGlz
IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gc2VsZi51cmwodXJsKQorICAgICAgICBib2R5ID0g
eyJ1cmwiOiB1cmx9CisgICAgICAgIHJldHVybiBzZWxmLnNlbmRfc2Vzc2lvbl9jb21tYW5kKCJQ
T1NUIiwgInVybCIsIGJvZHkpCisKKyAgICBAY29tbWFuZAorICAgIGRlZiBiYWNrKHNlbGYpOgor
ICAgICAgICByZXR1cm4gc2VsZi5zZW5kX3Nlc3Npb25fY29tbWFuZCgiUE9TVCIsICJiYWNrIikK
KworICAgIEBjb21tYW5kCisgICAgZGVmIGZvcndhcmQoc2VsZik6CisgICAgICAgIHJldHVybiBz
ZWxmLnNlbmRfc2Vzc2lvbl9jb21tYW5kKCJQT1NUIiwgImZvcndhcmQiKQorCisgICAgQGNvbW1h
bmQKKyAgICBkZWYgcmVmcmVzaChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuc2VuZF9zZXNz
aW9uX2NvbW1hbmQoIlBPU1QiLCAicmVmcmVzaCIpCisKKyAgICBAcHJvcGVydHkKKyAgICBAY29t
bWFuZAorICAgIGRlZiB0aXRsZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuc2VuZF9zZXNz
aW9uX2NvbW1hbmQoIkdFVCIsICJ0aXRsZSIpCisKKyAgICBAcHJvcGVydHkKKyAgICBAY29tbWFu
ZAorICAgIGRlZiB3aW5kb3dfaGFuZGxlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5zZW5k
X3Nlc3Npb25fY29tbWFuZCgiR0VUIiwgIndpbmRvdyIpCisKKyAgICBAd2luZG93X2hhbmRsZS5z
ZXR0ZXIKKyAgICBAY29tbWFuZAorICAgIGRlZiB3aW5kb3dfaGFuZGxlKHNlbGYsIGhhbmRsZSk6
CisgICAgICAgIGJvZHkgPSB7ImhhbmRsZSI6IGhhbmRsZX0KKyAgICAgICAgcmV0dXJuIHNlbGYu
c2VuZF9zZXNzaW9uX2NvbW1hbmQoIlBPU1QiLCAid2luZG93IiwgYm9keT1ib2R5KQorCisgICAg
ZGVmIHN3aXRjaF9mcmFtZShzZWxmLCBmcmFtZSk6CisgICAgICAgIGlmIGZyYW1lID09ICJwYXJl
bnQiOgorICAgICAgICAgICAgdXJsID0gImZyYW1lL3BhcmVudCIKKyAgICAgICAgICAgIGJvZHkg
PSBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB1cmwgPSAiZnJhbWUiCisgICAgICAg
ICAgICBpZiBpc2luc3RhbmNlKGZyYW1lLCBFbGVtZW50KToKKyAgICAgICAgICAgICAgICBib2R5
ID0geyJpZCI6IGZyYW1lLmpzb24oKX0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAg
ICAgYm9keSA9IHsiaWQiOiBmcmFtZX0KKworICAgICAgICByZXR1cm4gc2VsZi5zZW5kX3Nlc3Np
b25fY29tbWFuZCgiUE9TVCIsIHVybCwgYm9keSkKKworICAgIEBjb21tYW5kCisgICAgZGVmIGNs
b3NlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5zZW5kX3Nlc3Npb25fY29tbWFuZCgiREVM
RVRFIiwgIndpbmRvdyIpCisKKyAgICBAcHJvcGVydHkKKyAgICBAY29tbWFuZAorICAgIGRlZiBo
YW5kbGVzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5zZW5kX3Nlc3Npb25fY29tbWFuZCgi
R0VUIiwgIndpbmRvdy9oYW5kbGVzIikKKworICAgIEBwcm9wZXJ0eQorICAgIEBjb21tYW5kCisg
ICAgZGVmIGFjdGl2ZV9lbGVtZW50KHNlbGYpOgorICAgICAgICBkYXRhID0gc2VsZi5zZW5kX3Nl
c3Npb25fY29tbWFuZCgiR0VUIiwgImVsZW1lbnQvYWN0aXZlIikKKyAgICAgICAgaWYgZGF0YSBp
cyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9lbGVtZW50KGRhdGEpCisKKyAg
ICBkZWYgX2VsZW1lbnQoc2VsZiwgZGF0YSk6CisgICAgICAgIGVsZW1faWQgPSBkYXRhW2VsZW1l
bnRfa2V5XQorICAgICAgICBhc3NlcnQgZWxlbV9pZAorICAgICAgICBpZiBlbGVtX2lkIGluIHNl
bGYuX2VsZW1lbnRfY2FjaGU6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZWxlbWVudF9jYWNo
ZVtlbGVtX2lkXQorICAgICAgICByZXR1cm4gRWxlbWVudChzZWxmLCBlbGVtX2lkKQorCisgICAg
QGNvbW1hbmQKKyAgICBkZWYgY29va2llcyhzZWxmLCBuYW1lPU5vbmUpOgorICAgICAgICBpZiBu
YW1lIGlzIE5vbmU6CisgICAgICAgICAgICB1cmwgPSAiY29va2llIgorICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgdXJsID0gImNvb2tpZS8lcyIgJSBuYW1lCisgICAgICAgIHJldHVybiBzZWxm
LnNlbmRfc2Vzc2lvbl9jb21tYW5kKCJHRVQiLCB1cmwsIHt9KQorCisgICAgQGNvbW1hbmQKKyAg
ICBkZWYgc2V0X2Nvb2tpZShzZWxmLCBuYW1lLCB2YWx1ZSwgcGF0aD1Ob25lLCBkb21haW49Tm9u
ZSwgc2VjdXJlPU5vbmUsIGV4cGlyeT1Ob25lKToKKyAgICAgICAgYm9keSA9IHsibmFtZSI6IG5h
bWUsCisgICAgICAgICAgICAgICAgInZhbHVlIjogdmFsdWV9CisgICAgICAgIGlmIHBhdGggaXMg
bm90IE5vbmU6CisgICAgICAgICAgICBib2R5WyJwYXRoIl0gPSBwYXRoCisgICAgICAgIGlmIGRv
bWFpbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGJvZHlbImRvbWFpbiJdID0gZG9tYWluCisg
ICAgICAgIGlmIHNlY3VyZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGJvZHlbInNlY3VyZSJd
ID0gc2VjdXJlCisgICAgICAgIGlmIGV4cGlyeSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGJv
ZHlbImV4cGlyeSJdID0gZXhwaXJ5CisgICAgICAgIHNlbGYuc2VuZF9zZXNzaW9uX2NvbW1hbmQo
IlBPU1QiLCAiY29va2llIiwgeyJjb29raWUiOiBib2R5fSkKKworICAgIGRlZiBkZWxldGVfY29v
a2llKHNlbGYsIG5hbWU9Tm9uZSk6CisgICAgICAgIGlmIG5hbWUgaXMgTm9uZToKKyAgICAgICAg
ICAgIHVybCA9ICJjb29raWUiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB1cmwgPSAiY29v
a2llLyVzIiAlIG5hbWUKKyAgICAgICAgc2VsZi5zZW5kX3Nlc3Npb25fY29tbWFuZCgiREVMRVRF
IiwgdXJsLCB7fSkKKworICAgICNbLi4uXQorCisgICAgQGNvbW1hbmQKKyAgICBkZWYgZXhlY3V0
ZV9zY3JpcHQoc2VsZiwgc2NyaXB0LCBhcmdzPU5vbmUpOgorICAgICAgICBpZiBhcmdzIGlzIE5v
bmU6CisgICAgICAgICAgICBhcmdzID0gW10KKworICAgICAgICBib2R5ID0geworICAgICAgICAg
ICAgInNjcmlwdCI6IHNjcmlwdCwKKyAgICAgICAgICAgICJhcmdzIjogYXJncworICAgICAgICB9
CisgICAgICAgIHJldHVybiBzZWxmLnNlbmRfc2Vzc2lvbl9jb21tYW5kKCJQT1NUIiwgImV4ZWN1
dGUvc3luYyIsIGJvZHkpCisKKyAgICBAY29tbWFuZAorICAgIGRlZiBleGVjdXRlX2FzeW5jX3Nj
cmlwdChzZWxmLCBzY3JpcHQsIGFyZ3M9Tm9uZSk6CisgICAgICAgIGlmIGFyZ3MgaXMgTm9uZToK
KyAgICAgICAgICAgIGFyZ3MgPSBbXQorCisgICAgICAgIGJvZHkgPSB7CisgICAgICAgICAgICAi
c2NyaXB0Ijogc2NyaXB0LAorICAgICAgICAgICAgImFyZ3MiOiBhcmdzCisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHNlbGYuc2VuZF9zZXNzaW9uX2NvbW1hbmQoIlBPU1QiLCAiZXhlY3V0ZS9h
c3luYyIsIGJvZHkpCisKKyAgICAjWy4uLl0KKworICAgIEBjb21tYW5kCisgICAgZGVmIHNjcmVl
bnNob3Qoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnNlbmRfc2Vzc2lvbl9jb21tYW5kKCJH
RVQiLCAic2NyZWVuc2hvdCIpCisKKworY2xhc3MgRWxlbWVudChvYmplY3QpOgorICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBzZXNzaW9uLCBpZCk6CisgICAgICAgIHNlbGYuc2Vzc2lvbiA9IHNlc3Np
b24KKyAgICAgICAgc2VsZi5pZCA9IGlkCisgICAgICAgIGFzc2VydCBpZCBub3QgaW4gc2VsZi5z
ZXNzaW9uLl9lbGVtZW50X2NhY2hlCisgICAgICAgIHNlbGYuc2Vzc2lvbi5fZWxlbWVudF9jYWNo
ZVtzZWxmLmlkXSA9IHNlbGYKKworICAgIGRlZiBzZW5kX2VsZW1lbnRfY29tbWFuZChzZWxmLCBt
ZXRob2QsIHVyaSwgYm9keT1Ob25lKToKKyAgICAgICAgdXJsID0gImVsZW1lbnQvJXMvJXMiICUg
KHNlbGYuaWQsIHVyaSkKKyAgICAgICAgcmV0dXJuIHNlbGYuc2Vzc2lvbi5zZW5kX3Nlc3Npb25f
Y29tbWFuZChtZXRob2QsIHVybCwgYm9keSkKKworICAgIGRlZiBqc29uKHNlbGYpOgorICAgICAg
ICByZXR1cm4ge2VsZW1lbnRfa2V5OiBzZWxmLmlkfQorCisgICAgQGNvbW1hbmQKKyAgICBkZWYg
ZmluZF9lbGVtZW50KHNlbGYsIHN0cmF0ZWd5LCBzZWxlY3Rvcik6CisgICAgICAgIGJvZHkgPSB7
InVzaW5nIjogc3RyYXRlZ3ksCisgICAgICAgICAgICAgICAgInZhbHVlIjogc2VsZWN0b3J9CisK
KyAgICAgICAgZWxlbSA9IHNlbGYuc2VuZF9lbGVtZW50X2NvbW1hbmQoIlBPU1QiLCAiZWxlbWVu
dCIsIGJvZHkpCisgICAgICAgIHJldHVybiBzZWxmLnNlc3Npb24uX2VsZW1lbnQoZWxlbSkKKwor
ICAgIEBjb21tYW5kCisgICAgZGVmIGNsaWNrKHNlbGYpOgorICAgICAgICBzZWxmLnNlbmRfZWxl
bWVudF9jb21tYW5kKCJQT1NUIiwgImNsaWNrIiwge30pCisKKyAgICBAY29tbWFuZAorICAgIGRl
ZiB0YXAoc2VsZik6CisgICAgICAgIHNlbGYuc2VuZF9lbGVtZW50X2NvbW1hbmQoIlBPU1QiLCAi
dGFwIiwge30pCisKKyAgICBAY29tbWFuZAorICAgIGRlZiBjbGVhcihzZWxmKToKKyAgICAgICAg
c2VsZi5zZW5kX2VsZW1lbnRfY29tbWFuZCgiUE9TVCIsIHNlbGYudXJsKCJjbGVhciIpLCB7fSkK
KworICAgIEBjb21tYW5kCisgICAgZGVmIHNlbmRfa2V5cyhzZWxmLCB0ZXh0KToKKyAgICAgICAg
cmV0dXJuIHNlbGYuc2VuZF9lbGVtZW50X2NvbW1hbmQoIlBPU1QiLCAidmFsdWUiLCB7InRleHQi
OiB0ZXh0fSkKKworICAgIEBwcm9wZXJ0eQorICAgIEBjb21tYW5kCisgICAgZGVmIHRleHQoc2Vs
Zik6CisgICAgICAgIHJldHVybiBzZWxmLnNlbmRfZWxlbWVudF9jb21tYW5kKCJHRVQiLCAidGV4
dCIpCisKKyAgICBAcHJvcGVydHkKKyAgICBAY29tbWFuZAorICAgIGRlZiBuYW1lKHNlbGYpOgor
ICAgICAgICByZXR1cm4gc2VsZi5zZW5kX2VsZW1lbnRfY29tbWFuZCgiR0VUIiwgIm5hbWUiKQor
CisgICAgQGNvbW1hbmQKKyAgICBkZWYgc3R5bGUoc2VsZiwgcHJvcGVydHlfbmFtZSk6CisgICAg
ICAgIHJldHVybiBzZWxmLnNlbmRfZWxlbWVudF9jb21tYW5kKCJHRVQiLCAiY3NzLyVzIiAlIHBy
b3BlcnR5X25hbWUpCisKKyAgICBAcHJvcGVydHkKKyAgICBAY29tbWFuZAorICAgIGRlZiByZWN0
KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5zZW5kX2VsZW1lbnRfY29tbWFuZCgiR0VUIiwg
InJlY3QiKQorCisgICAgQHByb3BlcnR5CisgICAgQGNvbW1hbmQKKyAgICBkZWYgc2VsZWN0ZWQo
c2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnNlbmRfZWxlbWVudF9jb21tYW5kKCJHRVQiLCAi
c2VsZWN0ZWQiKQorCisgICAgQGNvbW1hbmQKKyAgICBkZWYgYXR0cmlidXRlKHNlbGYsIG5hbWUp
OgorICAgICAgICByZXR1cm4gc2VsZi5zZW5kX2VsZW1lbnRfY29tbWFuZCgiR0VUIiwgImF0dHJp
YnV0ZS8lcyIgJSBuYW1lKQorCisgICAgIyBUaGlzIE1VU1QgY29tZSBsYXN0IGJlY2F1c2Ugb3Ro
ZXJ3aXNlIEBwcm9wZXJ0eSBkZWNvcmF0b3JzIGFib3ZlCisgICAgIyB3aWxsIGJlIG92ZXJyaWRk
ZW4gYnkgdGhpcy4KKyAgICBAY29tbWFuZAorICAgIGRlZiBwcm9wZXJ0eShzZWxmLCBuYW1lKToK
KyAgICAgICAgcmV0dXJuIHNlbGYuc2VuZF9lbGVtZW50X2NvbW1hbmQoIkdFVCIsICJwcm9wZXJ0
eS8lcyIgJSBuYW1lKQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rv
b2xzL3dlYmRyaXZlci93ZWJkcml2ZXIvZXJyb3IucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRl
ZC93M2MvdG9vbHMvd2ViZHJpdmVyL3dlYmRyaXZlci9lcnJvci5weQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDNlOWYzOWZmYmEKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd2ViZHJpdmVyL3dlYmRyaXZlci9lcnJv
ci5weQpAQCAtMCwwICsxLDE0NCBAQAoraW1wb3J0IGNvbGxlY3Rpb25zCisKKworY2xhc3MgV2Vi
RHJpdmVyRXhjZXB0aW9uKEV4Y2VwdGlvbik6CisgICAgaHR0cF9zdGF0dXMgPSBOb25lCisgICAg
c3RhdHVzX2NvZGUgPSBOb25lCisKKworY2xhc3MgRWxlbWVudE5vdFNlbGVjdGFibGVFeGNlcHRp
b24oV2ViRHJpdmVyRXhjZXB0aW9uKToKKyAgICBodHRwX3N0YXR1cyA9IDQwMAorICAgIHN0YXR1
c19jb2RlID0gImVsZW1lbnQgbm90IHNlbGVjdGFibGUiCisKKworY2xhc3MgRWxlbWVudE5vdFZp
c2libGVFeGNlcHRpb24oV2ViRHJpdmVyRXhjZXB0aW9uKToKKyAgICBodHRwX3N0YXR1cyA9IDQw
MAorICAgIHN0YXR1c19jb2RlID0gImVsZW1lbnQgbm90IHZpc2libGUiCisKKworY2xhc3MgSW5z
ZWN1cmVDZXJ0aWZpY2F0ZUV4Y2VwdGlvbihXZWJEcml2ZXJFeGNlcHRpb24pOgorICAgIGh0dHBf
c3RhdHVzID0gNDAwCisgICAgc3RhdHVzX2NvZGUgPSAiaW5zZWN1cmUgY2VydGlmaWNhdGUiCisK
KworY2xhc3MgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKFdlYkRyaXZlckV4Y2VwdGlvbik6Cisg
ICAgaHR0cF9zdGF0dXMgPSA0MDAKKyAgICBzdGF0dXNfY29kZSA9ICJpbnZhbGlkIGFyZ3VtZW50
IgorCisKK2NsYXNzIEludmFsaWRDb29raWVEb21haW5FeGNlcHRpb24oV2ViRHJpdmVyRXhjZXB0
aW9uKToKKyAgICBodHRwX3N0YXR1cyA9IDQwMAorICAgIHN0YXR1c19jb2RlID0gImludmFsaWQg
Y29va2llIGRvbWFpbiIKKworCitjbGFzcyBJbnZhbGlkRWxlbWVudENvb3JkaW5hdGVzRXhjZXB0
aW9uKFdlYkRyaXZlckV4Y2VwdGlvbik6CisgICAgaHR0cF9zdGF0dXMgPSA0MDAKKyAgICBzdGF0
dXNfY29kZSA9ICJpbnZhbGlkIGVsZW1lbnQgY29vcmRpbmF0ZXMiCisKKworY2xhc3MgSW52YWxp
ZEVsZW1lbnRTdGF0ZUV4Y2VwdGlvbihXZWJEcml2ZXJFeGNlcHRpb24pOgorICAgIGh0dHBfc3Rh
dHVzID0gNDAwCisgICAgc3RhdHVzX2NvZGUgPSAiaW52YWxpZCBjb29raWUgZG9tYWluIgorCisK
K2NsYXNzIEludmFsaWRTZWxlY3RvckV4Y2VwdGlvbihXZWJEcml2ZXJFeGNlcHRpb24pOgorICAg
IGh0dHBfc3RhdHVzID0gNDAwCisgICAgc3RhdHVzX2NvZGUgPSAiaW52YWxpZCBzZWxlY3RvciIK
KworCitjbGFzcyBJbnZhbGlkU2Vzc2lvbklkRXhjZXB0aW9uKFdlYkRyaXZlckV4Y2VwdGlvbik6
CisgICAgaHR0cF9zdGF0dXMgPSA0MDQKKyAgICBzdGF0dXNfY29kZSA9ICJpbnZhbGlkIHNlc3Np
b24gaWQiCisKKworY2xhc3MgSmF2YXNjcmlwdEVycm9yRXhjZXB0aW9uKFdlYkRyaXZlckV4Y2Vw
dGlvbik6CisgICAgaHR0cF9zdGF0dXMgPSA1MDAKKyAgICBzdGF0dXNfY29kZSA9ICJqYXZhc2Ny
aXB0IGVycm9yIgorCisKK2NsYXNzIE1vdmVUYXJnZXRPdXRPZkJvdW5kc0V4Y2VwdGlvbihXZWJE
cml2ZXJFeGNlcHRpb24pOgorICAgIGh0dHBfc3RhdHVzID0gNTAwCisgICAgc3RhdHVzX2NvZGUg
PSAibW92ZSB0YXJnZXQgb3V0IG9mIGJvdW5kcyIKKworCitjbGFzcyBOb1N1Y2hBbGVydEV4Y2Vw
dGlvbihXZWJEcml2ZXJFeGNlcHRpb24pOgorICAgIGh0dHBfc3RhdHVzID0gNDA0CisgICAgc3Rh
dHVzX2NvZGUgPSAibm8gc3VjaCBhbGVydCIKKworCitjbGFzcyBOb1N1Y2hFbGVtZW50RXhjZXB0
aW9uKFdlYkRyaXZlckV4Y2VwdGlvbik6CisgICAgaHR0cF9zdGF0dXMgPSA0MDQKKyAgICBzdGF0
dXNfY29kZSA9ICJubyBzdWNoIGVsZW1lbnQiCisKKworY2xhc3MgTm9TdWNoRnJhbWVFeGNlcHRp
b24oV2ViRHJpdmVyRXhjZXB0aW9uKToKKyAgICBodHRwX3N0YXR1cyA9IDQwNAorICAgIHN0YXR1
c19jb2RlID0gIm5vIHN1Y2ggZnJhbWUiCisKKworY2xhc3MgTm9TdWNoV2luZG93RXhjZXB0aW9u
KFdlYkRyaXZlckV4Y2VwdGlvbik6CisgICAgaHR0cF9zdGF0dXMgPSA0MDQKKyAgICBzdGF0dXNf
Y29kZSA9ICJubyBzdWNoIHdpbmRvdyIKKworCitjbGFzcyBTY3JpcHRUaW1lb3V0RXhjZXB0aW9u
KFdlYkRyaXZlckV4Y2VwdGlvbik6CisgICAgaHR0cF9zdGF0dXMgPSA0MDgKKyAgICBzdGF0dXNf
Y29kZSA9ICJzY3JpcHQgdGltZW91dCIKKworCitjbGFzcyBTZXNzaW9uTm90Q3JlYXRlZEV4Y2Vw
dGlvbihXZWJEcml2ZXJFeGNlcHRpb24pOgorICAgIGh0dHBfc3RhdHVzID0gNTAwCisgICAgc3Rh
dHVzX2NvZGUgPSAic2Vzc2lvbiBub3QgY3JlYXRlZCIKKworCitjbGFzcyBTdGFsZUVsZW1lbnRS
ZWZlcmVuY2VFeGNlcHRpb24oV2ViRHJpdmVyRXhjZXB0aW9uKToKKyAgICBodHRwX3N0YXR1cyA9
IDQwMAorICAgIHN0YXR1c19jb2RlID0gInN0YWxlIGVsZW1lbnQgcmVmZXJlbmNlIgorCisKK2Ns
YXNzIFRpbWVvdXRFeGNlcHRpb24oV2ViRHJpdmVyRXhjZXB0aW9uKToKKyAgICBodHRwX3N0YXR1
cyA9IDQwOAorICAgIHN0YXR1c19jb2RlID0gInRpbWVvdXQiCisKKworY2xhc3MgVW5hYmxlVG9T
ZXRDb29raWVFeGNlcHRpb24oV2ViRHJpdmVyRXhjZXB0aW9uKToKKyAgICBodHRwX3N0YXR1cyA9
IDUwMAorICAgIHN0YXR1c19jb2RlID0gInVuYWJsZSB0byBzZXQgY29va2llIgorCisKK2NsYXNz
IFVuZXhwZWN0ZWRBbGVydE9wZW5FeGNlcHRpb24oV2ViRHJpdmVyRXhjZXB0aW9uKToKKyAgICBo
dHRwX3N0YXR1cyA9IDUwMAorICAgIHN0YXR1c19jb2RlID0gInVuZXhwZWN0ZWQgYWxlcnQgb3Bl
biIKKworCitjbGFzcyBVbmtub3duRXJyb3JFeGNlcHRpb24oV2ViRHJpdmVyRXhjZXB0aW9uKToK
KyAgICBodHRwX3N0YXR1cyA9IDUwMAorICAgIHN0YXR1c19jb2RlID0gInVua25vd24gZXJyb3Ii
CisKKworY2xhc3MgVW5rbm93bkNvbW1hbmRFeGNlcHRpb24oV2ViRHJpdmVyRXhjZXB0aW9uKToK
KyAgICBodHRwX3N0YXR1cyA9IDQwNAorICAgIHN0YXR1c19jb2RlID0gInVua25vd24gY29tbWFu
ZCIKKworCitjbGFzcyBVbmtub3duTWV0aG9kRXhjZXB0aW9uKFdlYkRyaXZlckV4Y2VwdGlvbik6
CisgICAgaHR0cF9zdGF0dXMgPSA0MDUKKyAgICBzdGF0dXNfY29kZSA9ICJ1bmtub3duIG1ldGhv
ZCIKKworCitjbGFzcyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbihXZWJEcml2ZXJFeGNl
cHRpb24pOgorICAgIGh0dHBfc3RhdHVzID0gNTAwCisgICAgc3RhdHVzX2NvZGUgPSAidW5zdXBw
b3J0ZWQgb3BlcmF0aW9uIgorCisKK2RlZiBnZXQoc3RhdHVzX2NvZGUpOgorICAgICIiIkdldHMg
ZXhjZXB0aW9uIGZyb20gYHN0YXR1c19jb2RlYCwgZmFsbGluZyBiYWNrIHRvCisgICAgYGBXZWJE
cml2ZXJFeGNlcHRpb25gYCBpZiBpdCBpcyBub3QgZm91bmQuCisgICAgIiIiCisgICAgcmV0dXJu
IF9lcnJvcnMuZ2V0KHN0YXR1c19jb2RlLCBXZWJEcml2ZXJFeGNlcHRpb24pCisKKworX2Vycm9y
cyA9IGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KCkKK2ZvciBpdGVtIGluIGxvY2FscygpLnZhbHVl
cygpOgorICAgIGlmIHR5cGUoaXRlbSkgPT0gdHlwZSBhbmQgaXNzdWJjbGFzcyhpdGVtLCBXZWJE
cml2ZXJFeGNlcHRpb24pOgorICAgICAgICBfZXJyb3JzW2l0ZW0uc3RhdHVzX2NvZGVdID0gaXRl
bQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dlYmRyaXZl
ci93ZWJkcml2ZXIvc2Vydm8ucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMv
d2ViZHJpdmVyL3dlYmRyaXZlci9zZXJ2by5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMC4uMmUwYjcyMmFiYWIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0
cy9pbXBvcnRlZC93M2MvdG9vbHMvd2ViZHJpdmVyL3dlYmRyaXZlci9zZXJ2by5weQpAQCAtMCww
ICsxLDE4IEBACitjbGFzcyBTZXJ2b0V4dGVuc2lvbkNvbW1hbmRzKG9iamVjdCk6CisgICAgZGVm
IF9faW5pdF9fKHNlbGYsIHNlc3Npb24pOgorICAgICAgICBzZWxmLnNlc3Npb24gPSBzZXNzaW9u
CisKKyAgICBAY29tbWFuZAorICAgIGRlZiBnZXRfcHJlZnMoc2VsZiwgKnByZWZzKToKKyAgICAg
ICAgYm9keSA9IHsicHJlZnMiOiBsaXN0KHByZWZzKX0KKyAgICAgICAgcmV0dXJuIHNlbGYuc2Vz
c2lvbi5zZW5kX2NvbW1hbmQoIlBPU1QiLCAic2Vydm8vcHJlZnMvZ2V0IiwgYm9keSkKKworICAg
IEBjb21tYW5kCisgICAgZGVmIHNldF9wcmVmcyhzZWxmLCBwcmVmcyk6CisgICAgICAgIGJvZHkg
PSB7InByZWZzIjogcHJlZnN9CisgICAgICAgIHJldHVybiBzZWxmLnNlc3Npb24uc2VuZF9jb21t
YW5kKCJQT1NUIiwgInNlcnZvL3ByZWZzL3NldCIsIGJvZHkpCisKKyAgICBAY29tbWFuZAorICAg
IGRlZiByZXNldF9wcmVmcyhzZWxmLCAqcHJlZnMpOgorICAgICAgICBib2R5ID0geyJwcmVmcyI6
IGxpc3QocHJlZnMpfQorICAgICAgICByZXR1cm4gc2VsZi5zZXNzaW9uLnNlbmRfY29tbWFuZCgi
UE9TVCIsICJzZXJ2by9wcmVmcy9yZXNldCIsIGJvZHkpCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJU
ZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd2ViZHJpdmVyL3dlYmRyaXZlci90cmFuc3BvcnQucHkg
Yi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd2ViZHJpdmVyL3dlYmRyaXZlci90
cmFuc3BvcnQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjIwNmZk
M2NhN2EwCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rv
b2xzL3dlYmRyaXZlci93ZWJkcml2ZXIvdHJhbnNwb3J0LnB5CkBAIC0wLDAgKzEsMTA3IEBACitp
bXBvcnQgaHR0cGxpYgoraW1wb3J0IGpzb24KK2ltcG9ydCB1cmxwYXJzZQorCitpbXBvcnQgZXJy
b3IKKworY2xhc3MgUmVzcG9uc2Uob2JqZWN0KToKKyAgICAiIiJEZXNjcmliZXMgYW4gSFRUUCBy
ZXNwb25zZSByZWNlaXZlZCBmcm9tIGEgcmVtb3RlIGVuIkRlc2NyaWJlcyBhbiBIVFRQCisgICAg
cmVzcG9uc2UgcmVjZWl2ZWQgZnJvbSBhIHJlbW90ZSBlbmQgd2hvc2UgYm9keSBoYXMgYmVlbiBy
ZWFkIGFuZCBwYXJzZWQgYXMKKyAgICBhcHByb3ByaWF0ZS4iIiIKKyAgICBkZWYgX19pbml0X18o
c2VsZiwgc3RhdHVzLCBib2R5KToKKyAgICAgICAgc2VsZi5zdGF0dXMgPSBzdGF0dXMKKyAgICAg
ICAgc2VsZi5ib2R5ID0gYm9keQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICBy
ZXR1cm4gIndkY2xpZW50LlJlc3BvbnNlKHN0YXR1cz0lZCwgYm9keT0lcykiICUgKHNlbGYuc3Rh
dHVzLCBzZWxmLmJvZHkpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZnJvbV9odHRwX3Jl
c3BvbnNlKGNscywgaHR0cF9yZXNwb25zZSk6CisgICAgICAgIHN0YXR1cyA9IGh0dHBfcmVzcG9u
c2Uuc3RhdHVzCisgICAgICAgIGJvZHkgPSBodHRwX3Jlc3BvbnNlLnJlYWQoKQorCisgICAgICAg
ICMgU3BlY0lEOiBkZm4tc2VuZC1hLXJlc3BvbnNlCisgICAgICAgICMKKyAgICAgICAgIyA+IDMu
IFNldCB0aGUgcmVzcG9uc2UncyBoZWFkZXIgd2l0aCBuYW1lIGFuZCB2YWx1ZSB3aXRoIHRoZSBm
b2xsb3dpbmcKKyAgICAgICAgIyA+ICAgIHZhbHVlczoKKyAgICAgICAgIyA+CisgICAgICAgICMg
PiAgICAiQ29udGVudC1UeXBlIgorICAgICAgICAjID4gICAgICAgImFwcGxpY2F0aW9uL2pzb247
IGNoYXJzZXQ9dXRmLTgiCisgICAgICAgICMgPiAgICAiY2FjaGUtY29udHJvbCIKKyAgICAgICAg
IyA+ICAgICAgICJuby1jYWNoZSIKKworICAgICAgICBpZiBib2R5OgorICAgICAgICAgICAgdHJ5
OgorICAgICAgICAgICAgICAgIGJvZHkgPSBqc29uLmxvYWRzKGJvZHkpCisgICAgICAgICAgICBl
eGNlcHQ6CisgICAgICAgICAgICAgICAgcmFpc2UgZXJyb3IuVW5rbm93bkVycm9yRXhjZXB0aW9u
KCJGYWlsZWQgdG8gZGVjb2RlIGJvZHkgYXMganNvbjpcbiVzIiAlIGJvZHkpCisKKyAgICAgICAg
cmV0dXJuIGNscyhzdGF0dXMsIGJvZHkpCisKKworY2xhc3MgVG9Kc29uRW5jb2Rlcihqc29uLkpT
T05FbmNvZGVyKToKKyAgICBkZWYgZGVmYXVsdChzZWxmLCBvYmopOgorICAgICAgICByZXR1cm4g
Z2V0YXR0cihvYmouX19jbGFzc19fLCAianNvbiIsIGpzb24uSlNPTkVuY29kZXIoKS5kZWZhdWx0
KShvYmopCisKKworY2xhc3MgSFRUUFdpcmVQcm90b2NvbChvYmplY3QpOgorICAgICIiIlRyYW5z
cG9ydHMgbWVzc2FnZXMgKGNvbW1hbmRzIGFuZCByZXNwb25zZXMpIG92ZXIgdGhlIFdlYkRyaXZl
cgorICAgIHdpcmUgcHJvdG9jb2wuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
aG9zdCwgcG9ydCwgdXJsX3ByZWZpeD0iLyIsIHRpbWVvdXQ9Tm9uZSk6CisgICAgICAgICIiIkNv
bnN0cnVjdCBpbnRlcmZhY2UgZm9yIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgcmVtb3RlIHNlcnZl
ci4KKworICAgICAgICA6cGFyYW0gdXJsOiBVUkwgb2YgcmVtb3RlIFdlYkRyaXZlciBzZXJ2ZXIu
CisgICAgICAgIDpwYXJhbSB3YWl0OiBEdXJhdGlvbiB0byB3YWl0IGZvciByZW1vdGUgdG8gYXBw
ZWFyLgorICAgICAgICAiIiIKKworICAgICAgICBzZWxmLmhvc3QgPSBob3N0CisgICAgICAgIHNl
bGYucG9ydCA9IHBvcnQKKyAgICAgICAgc2VsZi51cmxfcHJlZml4ID0gdXJsX3ByZWZpeAorCisg
ICAgICAgIHNlbGYuX3RpbWVvdXQgPSB0aW1lb3V0CisKKyAgICBkZWYgdXJsKHNlbGYsIHN1ZmZp
eCk6CisgICAgICAgIHJldHVybiB1cmxwYXJzZS51cmxqb2luKHNlbGYucGF0aF9wcmVmaXgsIHN1
ZmZpeCkKKworICAgIGRlZiBzZW5kKHNlbGYsIG1ldGhvZCwgdXJsLCBib2R5PU5vbmUsIGhlYWRl
cnM9Tm9uZSk6CisgICAgICAgICIiIlNlbmQgYSBjb21tYW5kIHRvIHRoZSByZW1vdGUuCisKKyAg
ICAgICAgOnBhcmFtIG1ldGhvZDogIlBPU1QiIG9yICJHRVQiLgorICAgICAgICA6cGFyYW0gdXJs
OiAiY29tbWFuZCBwYXJ0IiBvZiB0aGUgcmVxdWVzdHMgVVJMIHBhdGgKKyAgICAgICAgOnBhcmFt
IGJvZHk6IEJvZHkgb2YgdGhlIHJlcXVlc3QuICBEZWZhdWx0cyB0byBhbiBlbXB0eSBkaWN0aW9u
YXJ5CisgICAgICAgICAgICBpZiBgYG1ldGhvZGBgIGlzICJQT1NUIi4KKyAgICAgICAgOnBhcmFt
IGhlYWRlcnM6IEFkZGl0aW9uYWwgaGVhZGVycyB0byBpbmNsdWRlIGluIHRoZSByZXF1ZXN0Lgor
ICAgICAgICA6cmV0dXJuOiBhbiBpbnN0YW5jZSBvZiB3ZGNsaWVudC5SZXNwb25zZSBkZXNjcmli
aW5nIHRoZSBIVFRQIHJlc3BvbnNlCisgICAgICAgICAgICByZWNlaXZlZCBmcm9tIHRoZSByZW1v
dGUgZW5kLgorICAgICAgICAiIiIKKworICAgICAgICBpZiBib2R5IGlzIE5vbmUgYW5kIG1ldGhv
ZCA9PSAiUE9TVCI6CisgICAgICAgICAgICBib2R5ID0ge30KKworICAgICAgICBpZiBpc2luc3Rh
bmNlKGJvZHksIGRpY3QpOgorICAgICAgICAgICAgYm9keSA9IGpzb24uZHVtcHMoYm9keSwgY2xz
PVRvSnNvbkVuY29kZXIpCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShib2R5LCB1bmljb2RlKToK
KyAgICAgICAgICAgIGJvZHkgPSBib2R5LmVuY29kZSgidXRmLTgiKQorCisgICAgICAgIGlmIGhl
YWRlcnMgaXMgTm9uZToKKyAgICAgICAgICAgIGhlYWRlcnMgPSB7fQorCisgICAgICAgIHVybCA9
IHNlbGYudXJsX3ByZWZpeCArIHVybAorCisgICAgICAgIGt3YXJncyA9IHt9CisgICAgICAgIGlm
IHNlbGYuX3RpbWVvdXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBrd2FyZ3NbInRpbWVvdXQi
XSA9IHNlbGYuX3RpbWVvdXQKKworICAgICAgICBjb25uID0gaHR0cGxpYi5IVFRQQ29ubmVjdGlv
bigKKyAgICAgICAgICAgIHNlbGYuaG9zdCwgc2VsZi5wb3J0LCBzdHJpY3Q9VHJ1ZSwgKiprd2Fy
Z3MpCisgICAgICAgIGNvbm4ucmVxdWVzdChtZXRob2QsIHVybCwgYm9keSwgaGVhZGVycykKKwor
ICAgICAgICB0cnk6CisgICAgICAgICAgICByZXNwb25zZSA9IFJlc3BvbnNlLmZyb21faHR0cF9y
ZXNwb25zZShjb25uLmdldHJlc3BvbnNlKCkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAg
ICBjb25uLmNsb3NlKCkKKworICAgICAgICByZXR1cm4gcmVzcG9uc2UKZGlmZiAtLWdpdCBhL1dl
YkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvLmdpdGlnbm9yZSBiL1dl
YkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvLmdpdGlnbm9yZQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDk1NjE2ZWYxZDEKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyLy5n
aXRpZ25vcmUKQEAgLTAsMCArMSw4IEBACisqLnB5W2NvXQorKn4KKyojCitcIyoKK192aXJ0dWFs
ZW52Cit0ZXN0L3Rlc3QuY2ZnCit0ZXN0L21ldGFkYXRhL01BTklGRVNULmpzb24KK3dwdHJ1bm5l
ci5lZ2ctaW5mbwpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xz
L3dwdHJ1bm5lci9MSUNFTlNFIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dw
dHJ1bm5lci9MSUNFTlNFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40
NTg5NmU2YmUyYgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3cz
Yy90b29scy93cHRydW5uZXIvTElDRU5TRQpAQCAtMCwwICsxLDMwIEBACitXM0MgMy1jbGF1c2Ug
QlNEIExpY2Vuc2UKKworaHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC8yMDA4LzAz
LWJzZC1saWNlbnNlLmh0bWwKKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCittZXQ6CisKKyog
UmVkaXN0cmlidXRpb25zIG9mIHdvcmtzIG11c3QgcmV0YWluIHRoZSBvcmlnaW5hbCBjb3B5cmln
aHQgbm90aWNlLAorICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorCisqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgb3JpZ2luYWwgY29weXJpZ2h0CisgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KworKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBXM0Mgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29u
dHJpYnV0b3JzIG1heSBiZQorICB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20gdGhpcyB3b3JrIHdpdGhvdXQKKyAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCitBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCitTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKK0RBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCitPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgpkaWZmIC0tZ2l0IGEvV2ViRHJp
dmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci9NQU5JRkVTVC5pbiBiL1dlYkRy
aXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvTUFOSUZFU1QuaW4KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjBjNWUzOGJmMjY1Ci0tLSAvZGV2L251
bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci9NQU5J
RkVTVC5pbgpAQCAtMCwwICsxLDE3IEBACitleGNsdWRlIE1BTklGRVNULmluCitpbmNsdWRlIHJl
cXVpcmVtZW50cy50eHQKK2luY2x1ZGUgd3B0cnVubmVyL2Jyb3dzZXJzL2IyZ19zZXR1cC8qCitp
bmNsdWRlIHdwdHJ1bm5lci5kZWZhdWx0LmluaQoraW5jbHVkZSB3cHRydW5uZXIvdGVzdGhhcm5l
c3NfcnVubmVyLmh0bWwKK2luY2x1ZGUgd3B0cnVubmVyL3Rlc3RoYXJuZXNzcmVwb3J0LmpzCitp
bmNsdWRlIHdwdHJ1bm5lci90ZXN0aGFybmVzc3JlcG9ydC1zZXJ2by5qcworaW5jbHVkZSB3cHRy
dW5uZXIvdGVzdGhhcm5lc3NyZXBvcnQtc2Vydm9kcml2ZXIuanMKK2luY2x1ZGUgd3B0cnVubmVy
L2V4ZWN1dG9ycy90ZXN0aGFybmVzc19tYXJpb25ldHRlLmpzCitpbmNsdWRlIHdwdHJ1bm5lci9l
eGVjdXRvcnMvdGVzdGhhcm5lc3Nfc2Vydm9kcml2ZXIuanMKK2luY2x1ZGUgd3B0cnVubmVyL2V4
ZWN1dG9ycy90ZXN0aGFybmVzc193ZWJkcml2ZXIuanMKK2luY2x1ZGUgd3B0cnVubmVyL2V4ZWN1
dG9ycy9yZWZ0ZXN0LmpzCitpbmNsdWRlIHdwdHJ1bm5lci9leGVjdXRvcnMvcmVmdGVzdC13YWl0
LmpzCitpbmNsdWRlIHdwdHJ1bm5lci9leGVjdXRvcnMvcmVmdGVzdC13YWl0X3NlcnZvZHJpdmVy
LmpzCitpbmNsdWRlIHdwdHJ1bm5lci9leGVjdXRvcnMvcmVmdGVzdC13YWl0X3dlYmRyaXZlci5q
cworaW5jbHVkZSB3cHRydW5uZXIvY29uZmlnLmpzb24KK2luY2x1ZGUgd3B0cnVubmVyL2Jyb3dz
ZXJzL3NlcnZlci1sb2NhdGlvbnMudHh0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZm
IC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci9PV05F
UlMgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL09XTkVSUwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNGJmNDhhZDc2ZTUKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVy
L09XTkVSUwpAQCAtMCwwICsxIEBACitAYm9iaG9sdApkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVz
dHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci9SRUFETUUucnN0IGIvV2ViRHJpdmVyVGVz
dHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci9SRUFETUUucnN0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mYzY1MGVlYzQ1YQotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvUkVBRE1FLnJzdApA
QCAtMCwwICsxLDI0MiBAQAord3B0cnVubmVyOiBBIHdlYi1wbGF0Zm9ybS10ZXN0cyBoYXJuZXNz
Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKword3B0cnVubmVyIGlz
IGEgaGFybmVzcyBmb3IgcnVubmluZyB0aGUgVzNDIGB3ZWItcGxhdGZvcm0tdGVzdHMgdGVzdHN1
aXRlYF8uCisKKy4uIGNvbnRlbnRzOjoKKworSW5zdGFsbGF0aW9uCit+fn5+fn5+fn5+fn4KKwor
d3B0cnVubmVyIGlzIGV4cGVjdGVkIHRvIGJlIGluc3RhbGxlZCBpbnRvIGEgdmlydHVhbGVudiB1
c2luZyBwaXAuIEZvcgorZGV2ZWxvcG1lbnQsIGl0IGNhbiBiZSBpbnN0YWxsZWQgdXNpbmcgdGhl
IGAtZWAgb3B0aW9uOjoKKworICBwaXAgaW5zdGFsbCAtZSAuLworCitSdW5uaW5nIHRoZSBUZXN0
cworfn5+fn5+fn5+fn5+fn5+fn4KKworQWZ0ZXIgaW5zdGFsbGF0aW9uLCB0aGUgY29tbWFuZCBg
YHdwdHJ1bm5lcmBgIHNob3VsZCBiZSBhdmFpbGFibGUgdG8gcnVuCit0aGUgdGVzdHMuCisKK1Ro
ZSBgYHdwdHJ1bm5lcmBgIGNvbW1hbmQgIHRha2VzIG11bHRpcGxlIG9wdGlvbnMsIG9mIHdoaWNo
IHRoZQorZm9sbG93aW5nIGFyZSBtb3N0IHNpZ25pZmljYW50OgorCitgYC0tcHJvZHVjdGBgIChk
ZWZhdWx0cyB0byBgZmlyZWZveGApCisgIFRoZSBwcm9kdWN0IHRvIHRlc3QgYWdhaW5zdDogYGIy
Z2AsIGBjaHJvbWVgLCBgZmlyZWZveGAsIG9yIGBzZXJ2b2AuCisKK2BgLS1iaW5hcnlgYCAocmVx
dWlyZWQgaWYgcHJvZHVjdCBpcyBgZmlyZWZveGAgb3IgYHNlcnZvYCkKKyAgVGhlIHBhdGggdG8g
YSBiaW5hcnkgZmlsZSBmb3IgdGhlIHByb2R1Y3QgKGJyb3dzZXIpIHRvIHRlc3QgYWdhaW5zdC4K
KworYGAtLXdlYmRyaXZlci1iaW5hcnlgYCAocmVxdWlyZWQgaWYgcHJvZHVjdCBpcyBgY2hyb21l
YCkKKyAgVGhlIHBhdGggdG8gYSBgZHJpdmVyYCBiaW5hcnk7IGUuZy4sIGEgYGNocm9tZWRyaXZl
cmAgYmluYXJ5LgorCitgYC0tY2VydHV0aWwtYmluYXJ5YGAgKHJlcXVpcmVkIGlmIHByb2R1Y3Qg
aXMgYGZpcmVmb3hgIFsjXV8pCisgIFRoZSBwYXRoIHRvIGEgYGNlcnR1dGlsYCBiaW5hcnkgKGZv
ciB0ZXN0cyB0aGF0IG11c3QgYmUgcnVuIG92ZXIgaHR0cHMpLgorCitgYC0tbWV0YWRhdGFgYCAo
cmVxdWlyZWQpCisgIFRoZSBwYXRoIHRvIGEgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGVzdCBtZXRh
ZGF0YS4gWyNdXworCitgYC0tdGVzdHNgYCAocmVxdWlyZWQpCisgIFRoZSBwYXRoIHRvIGEgZGly
ZWN0b3J5IGNvbnRhaW5pbmcgYSB3ZWItcGxhdGZvcm0tdGVzdHMgY2hlY2tvdXQuCisKK2BgLS1w
cmVmcy1yb290YGAgKHJlcXVpcmVkIG9ubHkgd2hlbiB0ZXN0aW5nIGEgRmlyZWZveCBiaW5hcnkp
CisgIFRoZSBwYXRoIHRvIGEgZGlyZWN0b3J5IGNvbnRhaW5pbmcgRmlyZWZveCB0ZXN0LWhhcm5l
c3MgcHJlZmVyZW5jZXMuIFsjXV8KKworYGAtLWNvbmZpZ2BgIChzaG91bGQgZGVmYXVsdCB0byBg
d3B0cnVubmVyLmRlZmF1bHQuaW5pYCkKKyAgVGhlIHBhdGggdG8gdGhlIGNvbmZpZyAoaW5pKSBm
aWxlLgorCisuLiBbI10gVGhlIGBgLS1jZXJ0dXRpbC1iaW5hcnlgYCBvcHRpb24gaXMgcmVxdWly
ZWQgd2hlbiB0aGUgcHJvZHVjdCBpcworICAgYGBmaXJlZm94YGAgdW5sZXNzIGBgLS1zc2wtdHlw
ZT1ub25lYGAgaXMgc3BlY2lmaWVkLgorCisuLiBbI10gVGhlIGBgLS1tZXRhZGF0YWBgIHBhdGgg
aXMgdG8gYSBkaXJlY3RvcnkgdGhhdCBjb250YWluczoKKworICAqIGEgYGBNQU5JRkVTVC5qc29u
YGAgZmlsZSAoaW5zdHJ1Y3Rpb25zIG9uIGdlbmVyYXRpbmcgdGhpcyBmaWxlIGFyZQorICAgIGF2
YWlsYWJsZSBpbiB0aGUgYGRldGFpbGVkIGRvY3VtZW50YXRpb24KKyAgICA8aHR0cDovL3dwdHJ1
bm5lci5yZWFkdGhlZG9jcy5vcmcvZW4vbGF0ZXN0L3VzYWdlLmh0bWwjaW5zdGFsbGluZy13cHRy
dW5uZXI+YF8pOworICAgIGFuZAorICAqIChvcHRpb25hbGx5KSBhbnkgZXhwZWN0YXRpb24gZmls
ZXMgKHNlZSBiZWxvdykKKworLi4gWyNdIEV4YW1wbGUgYGAtLXByZWZzLXJvb3RgYCB2YWx1ZTog
YGB+L21vemlsbGEtY2VudHJhbC90ZXN0aW5nL3Byb2ZpbGVzYGAuCisKK1RoZXJlIGFyZSBhbHNv
IGEgdmFyaWV0eSBvZiBvdGhlciBvcHRpb25zIGF2YWlsYWJsZTsgdXNlIGBgLS1oZWxwYGAgdG8K
K2xpc3QgdGhlbS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRXhhbXBsZTog
SG93IHRvIHN0YXJ0IHdwdHJ1bm5lcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
CitUbyB0ZXN0IGEgRmlyZWZveCBOaWdodGx5IGJ1aWxkIGluIGFuIE9TIFggZW52aXJvbm1lbnQs
IHlvdSBtaWdodCBzdGFydAord3B0cnVubmVyIHVzaW5nIHNvbWV0aGluZyBzaW1pbGFyIHRvIHRo
ZSBmb2xsb3dpbmcgZXhhbXBsZTo6CisKKyAgd3B0cnVubmVyIC0tbWV0YWRhdGE9fi93ZWItcGxh
dGZvcm0tdGVzdHMvIC0tdGVzdHM9fi93ZWItcGxhdGZvcm0tdGVzdHMvIFwKKyAgICAtLWJpbmFy
eT1+L21vemlsbGEtY2VudHJhbC9vYmoteDg2XzY0LWFwcGxlLWRhcndpbjE0LjMuMC9kaXN0L05p
Z2h0bHkuYXBwL0NvbnRlbnRzL01hY09TL2ZpcmVmb3ggXAorICAgIC0tY2VydHV0aWwtYmluYXJ5
PX4vbW96aWxsYS1jZW50cmFsL29iai14ODZfNjQtYXBwbGUtZGFyd2luMTQuMy4wL3NlY3VyaXR5
L25zcy9jbWQvY2VydHV0aWwvY2VydHV0aWwgXAorICAgIC0tcHJlZnMtcm9vdD1+L21vemlsbGEt
Y2VudHJhbC90ZXN0aW5nL3Byb2ZpbGVzCisKK0FuZCB0byB0ZXN0IGEgQ2hyb21pdW0gYnVpbGQg
aW4gYW4gT1MgWCBlbnZpcm9ubWVudCwgeW91IG1pZ2h0IHN0YXJ0Cit3cHRydW5uZXIgdXNpbmcg
c29tZXRoaW5nIHNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZyBleGFtcGxlOjoKKworICB3cHRydW5u
ZXIgLS1tZXRhZGF0YT1+L3dlYi1wbGF0Zm9ybS10ZXN0cy8gLS10ZXN0cz1+L3dlYi1wbGF0Zm9y
bS10ZXN0cy8gXAorICAgIC0tYmluYXJ5PX4vY2hyb21pdW0vc3JjL291dC9SZWxlYXNlL0Nocm9t
aXVtLmFwcC9Db250ZW50cy9NYWNPUy9DaHJvbWl1bSBcCisgICAgLS13ZWJkcml2ZXItYmluYXJ5
PS91c3IvbG9jYWwvYmluL2Nocm9tZWRyaXZlciAtLXByb2R1Y3Q9Y2hyb21lCisKKy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0V4YW1wbGU6IEhvdyB0byBydW4gYSBzdWJz
ZXQgb2YgdGVzdHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVG8g
cmVzdHJpY3QgYSB0ZXN0IHJ1biBqdXN0IHRvIHRlc3RzIGluIGEgcGFydGljdWxhciB3ZWItcGxh
dGZvcm0tdGVzdHMKK3N1YmRpcmVjdG9yeSwgc3BlY2lmeSB0aGUgZGlyZWN0b3J5IG5hbWUgaW4g
dGhlIHBvc2l0aW9uYWwgYXJndW1lbnRzIGFmdGVyCit0aGUgb3B0aW9uczsgZm9yIGV4YW1wbGUs
IHJ1biBqdXN0IHRoZSB0ZXN0cyBpbiB0aGUgYGRvbWAgc3ViZGlyZWN0b3J5OjoKKworICB3cHRy
dW5uZXIgLS1tZXRhZGF0YT1+L3dlYi1wbGF0Zm9ybS10ZXN0cy8gLS10ZXN0cz1+L3dlYi1wbGF0
Zm9ybS10ZXN0cy8gXAorICAgIC0tYmluYXJ5PS9wYXRoL3RvL2ZpcmVmb3ggLS1jZXJ0dXRpbC1i
aW5hcnk9L3BhdGgvdG8vY2VydHV0aWwgXAorICAgIC0tcHJlZnMtcm9vdD0vcGF0aC90by90ZXN0
aW5nL3Byb2ZpbGVzIFwKKyAgICBkb20KKworT3V0cHV0Cit+fn5+fn4KKworQnkgZGVmYXVsdCB3
cHRydW5uZXIganVzdCBkdW1wcyBpdHMgZW50aXJlIG91dHB1dCBhcyByYXcgSlNPTiBtZXNzYWdl
cwordG8gc3Rkb3V0LiBUaGlzIGlzIGNvbnZlbmllbnQgZm9yIHBpcGluZyBpbnRvIG90aGVyIHRv
b2xzLCBidXQgbm90IGlkZWFsCitmb3IgaHVtYW5zIHJlYWRpbmcgdGhlIG91dHB1dC4KKworQXMg
YW4gYWx0ZXJuYXRpdmUsIHlvdSBjYW4gdXNlIHRoZSBgYC0tbG9nLW1hY2hgYCBvcHRpb24sIHdo
aWNoIHByb3ZpZGVzCitvdXRwdXQgaW4gYSByZWFzb25hYmxlIGZvcm1hdCBmb3IgaHVtYW5zLiBU
aGUgb3B0aW9uIHJlcXVpcmVzIGEgdmFsdWU6CitlaXRoZXIgdGhlIHBhdGggZm9yIGEgZmlsZSB0
byB3cml0ZSB0aGUgYG1hY2hgLWZvcm1hdHRlZCBvdXRwdXQgdG8sIG9yCisiYC1gIiAoYSBoeXBo
ZW4pIHRvIHdyaXRlIHRoZSBgbWFjaGAtZm9ybWF0dGVkIG91dHB1dCB0byBzdGRvdXQuCisKK1do
ZW4gdXNpbmcgYGAtLWxvZy1tYWNoYGAsIG91dHB1dCBvZiB0aGUgZnVsbCByYXcgSlNPTiBsb2cg
aXMgc3RpbGwKK2F2YWlsYWJsZSwgZnJvbSB0aGUgYGAtLWxvZy1yYXdgYCBvcHRpb24uIFNvIHRv
IG91dHB1dCB0aGUgZnVsbCByYXcgSlNPTgorbG9nIHRvIGEgZmlsZSBhbmQgYSBodW1hbi1yZWFk
YWJsZSBzdW1tYXJ5IHRvIHN0ZG91dCwgeW91IG1pZ2h0IHN0YXJ0Cit3cHRydW5uZXIgdXNpbmcg
c29tZXRoaW5nIHNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZyBleGFtcGxlOjoKKworICB3cHRydW5u
ZXIgLS1tZXRhZGF0YT1+L3dlYi1wbGF0Zm9ybS10ZXN0cy8gLS10ZXN0cz1+L3dlYi1wbGF0Zm9y
bS10ZXN0cy8gXAorICAgIC0tYmluYXJ5PS9wYXRoL3RvL2ZpcmVmb3ggLS1jZXJ0dXRpbC1iaW5h
cnk9L3BhdGgvdG8vY2VydHV0aWwgXAorICAgIC0tcHJlZnMtcm9vdD0vcGF0aC90by90ZXN0aW5n
L3Byb2ZpbGVzIFwKKyAgICAtLWxvZy1yYXc9b3V0cHV0LmxvZyAtLWxvZy1tYWNoPS0KKworRXhw
ZWN0YXRpb24gRGF0YQorfn5+fn5+fn5+fn5+fn5+fgorCit3cHRydW5uZXIgaXMgZGVzaWduZWQg
dG8gYmUgdXNlZCBpbiBhbiBlbnZpcm9ubWVudCB3aGVyZSBpdCBpcyBub3QKK2p1c3QgbmVjZXNz
YXJ5IHRvIGtub3cgd2hpY2ggdGVzdHMgcGFzc2VkLCBidXQgdG8gY29tcGFyZSB0aGUgcmVzdWx0
cworYmV0d2VlbiBydW5zLiBGb3IgdGhpcyByZWFzb24gaXQgaXMgcG9zc2libGUgdG8gc3RvcmUg
dGhlIHJlc3VsdHMgb2YgYQorcHJldmlvdXMgcnVuIGluIGEgc2V0IG9mIGluaS1saWtlICJleHBl
Y3RhdGlvbiBmaWxlcyIuIFRoaXMgZm9ybWF0IGlzCitkb2N1bWVudGVkIGJlbG93LiBUbyBnZW5l
cmF0ZSB0aGUgZXhwZWN0YXRpb24gZmlsZXMgdXNlIGB3cHRydW5uZXJgIHdpdGgKK3RoZSBgLS1s
b2ctcmF3PS9wYXRoL3RvL2xvZy9maWxlYCBvcHRpb24uIFRoaXMgY2FuIHRoZW4gYmUgdXNlZCBh
cworaW5wdXQgdG8gdGhlIGB3cHR1cGRhdGVgIHRvb2wuCisKK0V4cGVjdGF0aW9uIEZpbGUgRm9y
bWF0Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitNZXRhZGF0YSBhYm91dCB0ZXN0cywgbm90
YWJseSBpbmNsdWRpbmcgdGhlaXIgZXhwZWN0ZWQgcmVzdWx0cywgaXMKK3N0b3JlZCBpbiBhIG1v
ZGlmaWVkIGluaS1saWtlIGZvcm1hdCB0aGF0IGlzIGRlc2lnbmVkIHRvIGJlIGh1bWFuCitlZGl0
YWJsZSwgYnV0IGFsc28gdG8gYmUgbWFjaGluZSB1cGRhdGFibGUuCisKK0VhY2ggdGVzdCBmaWxl
IHRoYXQgcmVxdWlyZXMgbWV0YWRhdGEgdG8gYmUgc3BlY2lmaWVkIChiZWNhdXNlIGl0IGhhcwor
YSBub24tZGVmYXVsdCBleHBlY3RhdGlvbiBvciBiZWNhdXNlIGl0IGlzIGRpc2FibGVkLCBmb3Ig
ZXhhbXBsZSkgaGFzCithIGNvcnJlc3BvbmRpbmcgZXhwZWN0YXRpb24gZmlsZSBpbiB0aGUgYG1l
dGFkYXRhYCBkaXJlY3RvcnkuIEZvcgorZXhhbXBsZSBhIHRlc3QgZmlsZSBgaHRtbC90ZXN0MS5o
dG1sYCBjb250YWluaW5nIGEgZmFpbGluZyB0ZXN0IHdvdWxkCitoYXZlIGFuIGV4cGVjdGF0aW9u
IGZpbGUgY2FsbGVkIGBodG1sL3Rlc3QxLmh0bWwuaW5pYCBpbiB0aGUKK2BtZXRhZGF0YWAgZGly
ZWN0b3J5LgorCitBbiBleGFtcGxlIG9mIGFuIGV4cGVjdGF0aW9uIGZpbGUgaXM6OgorCisgIGV4
YW1wbGVfZGVmYXVsdF9rZXk6IGV4YW1wbGVfdmFsdWUKKworICBbZmlsZW5hbWUuaHRtbF0KKyAg
ICB0eXBlOiB0ZXN0aGFybmVzcworCisgICAgW3N1YnRlc3QxXQorICAgICAgZXhwZWN0ZWQ6IEZB
SUwKKworICAgIFtzdWJ0ZXN0Ml0KKyAgICAgIGV4cGVjdGVkOgorICAgICAgICBpZiBwbGF0Zm9y
bSA9PSAnd2luJzogVElNRU9VVAorICAgICAgICBpZiBwbGF0Zm9ybSA9PSAnb3N4JzogRVJST1IK
KyAgICAgICAgRkFJTAorCisgIFtmaWxlbmFtZS5odG1sP3F1ZXJ5PXNvbWV0aGluZ10KKyAgICB0
eXBlOiB0ZXN0aGFybmVzcworICAgIGRpc2FibGVkOiBidWcxMjM0NQorCitUaGUgZmlsZSBjb25z
aXN0cyBvZiB0d28gZWxlbWVudHMsIGtleS12YWx1ZSBwYWlycyBhbmQKK3NlY3Rpb25zLgorCitT
ZWN0aW9ucyBhcmUgZGVsaW1pdGVkIGJ5IGhlYWRpbmdzIGVuY2xvc2VkIGluIHNxdWFyZSBicmFj
a2V0cy4gQW55CitjbG9zaW5nIHNxdWFyZSBicmFja2V0IGluIHRoZSBoZWFkaW5nIGl0c2VsZiBt
eSBiZSBlc2NhcGVkIHdpdGggYQorYmFja3NsYXNoLiBFYWNoIHNlY3Rpb24gbWF5IHRoZW4gY29u
dGFpbiBhbnkgbnVtYmVyIG9mIGtleS12YWx1ZSBwYWlycworZm9sbG93ZWQgYnkgYW55IG51bWJl
ciBvZiBzdWJzZWN0aW9ucy4gU28gdGhhdCBpdCBpcyBjbGVhciB3aGljaCBkYXRhCitiZWxvbmdz
IHRvIGVhY2ggc2VjdGlvbiB3aXRob3V0IHRoZSB1c2Ugb2YgZW5kLXNlY3Rpb24gbWFya2Vycywg
dGhlCitkYXRhIGZvciBlYWNoIHNlY3Rpb24gKGkuZS4gdGhlIGtleS12YWx1ZSBwYWlycyBhbmQg
c3Vic2VjdGlvbnMpIG11c3QKK2JlIGluZGVudGVkIHVzaW5nIHNwYWNlcy4gSW5kZW50YXRpb24g
bmVlZCBvbmx5IGJlIGNvbnNpc3RlbnQsIGJ1dAordXNpbmcgdHdvIHNwYWNlcyBwZXIgbGV2ZWwg
aXMgcmVjb21tZW5kZWQuCisKK0luIGEgdGVzdCBleHBlY3RhdGlvbiBmaWxlLCBlYWNoIHJlc291
cmNlIHByb3ZpZGVkIGJ5IHRoZSBmaWxlIGhhcyBhCitzaW5nbGUgc2VjdGlvbiwgd2l0aCB0aGUg
c2VjdGlvbiBoZWFkaW5nIGJlaW5nIHRoZSBwYXJ0IGFmdGVyIHRoZSBsYXN0CitgL2AgaW4gdGhl
IHRlc3QgdXJsLiBUZXN0cyB0aGF0IGhhdmUgc3Vic2VjdGlvbnMgbWF5IGhhdmUgc3Vic2VjdGlv
bnMKK2ZvciB0aG9zZSBzdWJ0ZXN0cyBpbiB3aGljaCB0aGUgaGVhZGluZyBpcyB0aGUgbmFtZSBv
ZiB0aGUgc3VidGVzdC4KKworU2ltcGxlIGtleS12YWx1ZSBwYWlycyBhcmUgb2YgdGhlIGZvcm06
OgorCisgIGtleTogdmFsdWUKKworTm90ZSB0aGF0IHVubGlrZSBpbmkgZmlsZXMsIG9ubHkgYDpg
IGlzIGEgdmFsaWQgc2VwZXJhdG9yOyBgPWAgd2lsbAorbm90IHdvcmsgYXMgZXhwZWN0ZWQuIEtl
eS12YWx1ZSBwYWlycyBtYXkgYWxzbyBoYXZlIGNvbmRpdGlvbmFsCit2YWx1ZXMgb2YgdGhlIGZv
cm06OgorCisgIGtleToKKyAgICBpZiBjb25kaXRpb24xOiB2YWx1ZTEKKyAgICBpZiBjb25kaXRp
b24yOiB2YWx1ZTIKKyAgICBkZWZhdWx0CisKK0luIHRoaXMgY2FzZSBlYWNoIGNvbmRpdGlvbmFs
IGlzIGV2YWx1YXRlZCBpbiB0dXJuIGFuZCB0aGUgdmFsdWUgaXMKK3RoYXQgb24gdGhlIHJpZ2h0
IGhhbmQgc2lkZSBvZiB0aGUgZmlyc3QgbWF0Y2hpbmcgY29uZGl0aW9uYWwuIEluIHRoZQorY2Fz
ZSB0aGF0IG5vIGNvbmRpdGlvbiBtYXRjaGVzLCB0aGUgdW5jb25kaXRpb25hbCBkZWZhdWx0IGlz
IHVzZWQuIElmCitubyBjb25kaXRpb24gbWF0Y2hlcyBhbmQgbm8gZGVmYXVsdCBpcyBwcm92aWRl
ZCBpdCBpcyBlcXVpdmFsZW50IHRvCit0aGUga2V5IG5vdCBiZWluZyBwcmVzZW50LiBDb25kaXRp
b25hbHMgdXNlIGEgc2ltcGxlIHB5dGhvbi1saWtlIGV4cHJlc3Npb24KK2xhbmd1YWdlIGUuZy46
OgorCisgIGlmIGRlYnVnIGFuZCAocGxhdGZvcm0gPT0gImxpbnV4IiBvciBwbGF0Zm9ybSA9PSAi
b3N4Iik6IEZBSUwKKworRm9yIHRlc3QgZXhwZWN0YXRpb25zIHRoZSBhdmFsaWFibGUgdmFyaWFi
bGVzIGFyZSB0aG9zZSBpbiB0aGUKK2BydW5faW5mb2Agd2hpY2ggZm9yIGRlc2t0b3AgYXJlIGB2
ZXJzaW9uYCwgYG9zYCwgYGJpdHNgLCBgcHJvY2Vzc29yYCwKK2BkZWJ1Z2AgYW5kIGBwcm9kdWN0
YC4KKworS2V5LXZhbHVlIHBhaXJzIHNwZWNpZmllZCBhdCB0aGUgdG9wIGxldmVsIG9mIHRoZSBm
aWxlIGJlZm9yZSBhbnkKK3NlY3Rpb25zIGFyZSBzcGVjaWFsIGFzIHRoZXkgcHJvdmlkZSBkZWZh
dWx0cyBmb3IgdGhlIHJlc3Qgb2YgdGhlIGZpbGUKK2UuZy46OgorCisgIGtleTE6IHZhbHVlMQor
CisgIFtzZWN0aW9uIDFdCisgICAga2V5MjogdmFsdWUyCisKKyAgW3NlY3Rpb24gMl0KKyAgICBr
ZXkxOiB2YWx1ZTMKKworSW4gdGhpcyBjYXNlLCBpbnNpZGUgc2VjdGlvbiAxLCBga2V5MWAgd291
bGQgaGF2ZSB0aGUgdmFsdWUgYHZhbHVlMWAKK2FuZCBga2V5MmAgdGhlIHZhbHVlIGB2YWx1ZTJg
IHdoZXJlYXMgaW4gc2VjdGlvbiAyIGBrZXkxYCB3b3VsZCBoYXZlCit0aGUgdmFsdWUgYHZhbHVl
M2AgYW5kIGBrZXkyYCB3b3VsZCBiZSB1bmRlZmluZWQuCisKK1RoZSB3ZWItcGxhdGZvcm0tdGVz
dCBoYXJuZXNzIGtub3dzIGFib3V0IHNldmVyYWwga2V5czoKKworYGV4cGVjdGVkYAorICBNdXN0
IGV2YWx1YXRlIHRvIGEgcG9zc2libGUgdGVzdCBzdGF0dXMgaW5kaWNhdGluZyB0aGUgZXhwZWN0
ZWQKKyAgcmVzdWx0IG9mIHRoZSB0ZXN0LiBUaGUgaW1wbGljaXQgZGVmYXVsdCBpcyBQQVNTIG9y
IE9LIHdoZW4gdGhlCisgIGZpZWxkIGlzbid0IHByZXNlbnQuCisKK2BkaXNhYmxlZGAKKyAgQW55
IHZhbHVlIGluZGljYXRlcyB0aGF0IHRoZSB0ZXN0IGlzIGRpc2FibGVkLgorCitgdHlwZWAKKyAg
VGhlIHRlc3QgdHlwZSBlLmcuIGB0ZXN0aGFybmVzc2AsIGByZWZ0ZXN0YCwgb3IgYHdkc3BlY2Au
CisKK2ByZWZ0eXBlYAorICBUaGUgdHlwZSBvZiBjb21wYXJpc29uIGZvciByZWZ0ZXN0czsgZWl0
aGVyIGA9PWAgb3IgYCE9YC4KKworYHJlZnVybGAKKyAgVGhlIHJlZmVyZW5jZSB1cmwgZm9yIHJl
ZnRlc3RzLgorCisuLiBfYHdlYi1wbGF0Zm9ybS10ZXN0cyB0ZXN0c3VpdGVgOiBodHRwczovL2dp
dGh1Yi5jb20vdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cwpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVz
dHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci9kb2NzL01ha2VmaWxlIGIvV2ViRHJpdmVy
VGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci9kb2NzL01ha2VmaWxlCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kMDJiNmM1ZTdjNAotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvZG9jcy9N
YWtlZmlsZQpAQCAtMCwwICsxLDE3NyBAQAorIyBNYWtlZmlsZSBmb3IgU3BoaW54IGRvY3VtZW50
YXRpb24KKyMKKworIyBZb3UgY2FuIHNldCB0aGVzZSB2YXJpYWJsZXMgZnJvbSB0aGUgY29tbWFu
ZCBsaW5lLgorU1BISU5YT1BUUyAgICA9CitTUEhJTlhCVUlMRCAgID0gc3BoaW54LWJ1aWxkCitQ
QVBFUiAgICAgICAgID0KK0JVSUxERElSICAgICAgPSBfYnVpbGQKKworIyBVc2VyLWZyaWVuZGx5
IGNoZWNrIGZvciBzcGhpbngtYnVpbGQKK2lmZXEgKCQoc2hlbGwgd2hpY2ggJChTUEhJTlhCVUlM
RCkgPi9kZXYvbnVsbCAyPiYxOyBlY2hvICQkPyksIDEpCiskKGVycm9yIFRoZSAnJChTUEhJTlhC
VUlMRCknIGNvbW1hbmQgd2FzIG5vdCBmb3VuZC4gTWFrZSBzdXJlIHlvdSBoYXZlIFNwaGlueCBp
bnN0YWxsZWQsIHRoZW4gc2V0IHRoZSBTUEhJTlhCVUlMRCBlbnZpcm9ubWVudCB2YXJpYWJsZSB0
byBwb2ludCB0byB0aGUgZnVsbCBwYXRoIG9mIHRoZSAnJChTUEhJTlhCVUlMRCknIGV4ZWN1dGFi
bGUuIEFsdGVybmF0aXZlbHkgeW91IGNhbiBhZGQgdGhlIGRpcmVjdG9yeSB3aXRoIHRoZSBleGVj
dXRhYmxlIHRvIHlvdXIgUEFUSC4gSWYgeW91IGRvbid0IGhhdmUgU3BoaW54IGluc3RhbGxlZCwg
Z3JhYiBpdCBmcm9tIGh0dHA6Ly9zcGhpbngtZG9jLm9yZy8pCitlbmRpZgorCisjIEludGVybmFs
IHZhcmlhYmxlcy4KK1BBUEVST1BUX2E0ICAgICA9IC1EIGxhdGV4X3BhcGVyX3NpemU9YTQKK1BB
UEVST1BUX2xldHRlciA9IC1EIGxhdGV4X3BhcGVyX3NpemU9bGV0dGVyCitBTExTUEhJTlhPUFRT
ICAgPSAtZCAkKEJVSUxERElSKS9kb2N0cmVlcyAkKFBBUEVST1BUXyQoUEFQRVIpKSAkKFNQSElO
WE9QVFMpIC4KKyMgdGhlIGkxOG4gYnVpbGRlciBjYW5ub3Qgc2hhcmUgdGhlIGVudmlyb25tZW50
IGFuZCBkb2N0cmVlcyB3aXRoIHRoZSBvdGhlcnMKK0kxOE5TUEhJTlhPUFRTICA9ICQoUEFQRVJP
UFRfJChQQVBFUikpICQoU1BISU5YT1BUUykgLgorCisuUEhPTlk6IGhlbHAgY2xlYW4gaHRtbCBk
aXJodG1sIHNpbmdsZWh0bWwgcGlja2xlIGpzb24gaHRtbGhlbHAgcXRoZWxwIGRldmhlbHAgZXB1
YiBsYXRleCBsYXRleHBkZiB0ZXh0IG1hbiBjaGFuZ2VzIGxpbmtjaGVjayBkb2N0ZXN0IGdldHRl
eHQKKworaGVscDoKKwlAZWNobyAiUGxlYXNlIHVzZSBcYG1ha2UgPHRhcmdldD4nIHdoZXJlIDx0
YXJnZXQ+IGlzIG9uZSBvZiIKKwlAZWNobyAiICBodG1sICAgICAgIHRvIG1ha2Ugc3RhbmRhbG9u
ZSBIVE1MIGZpbGVzIgorCUBlY2hvICIgIGRpcmh0bWwgICAgdG8gbWFrZSBIVE1MIGZpbGVzIG5h
bWVkIGluZGV4Lmh0bWwgaW4gZGlyZWN0b3JpZXMiCisJQGVjaG8gIiAgc2luZ2xlaHRtbCB0byBt
YWtlIGEgc2luZ2xlIGxhcmdlIEhUTUwgZmlsZSIKKwlAZWNobyAiICBwaWNrbGUgICAgIHRvIG1h
a2UgcGlja2xlIGZpbGVzIgorCUBlY2hvICIgIGpzb24gICAgICAgdG8gbWFrZSBKU09OIGZpbGVz
IgorCUBlY2hvICIgIGh0bWxoZWxwICAgdG8gbWFrZSBIVE1MIGZpbGVzIGFuZCBhIEhUTUwgaGVs
cCBwcm9qZWN0IgorCUBlY2hvICIgIHF0aGVscCAgICAgdG8gbWFrZSBIVE1MIGZpbGVzIGFuZCBh
IHF0aGVscCBwcm9qZWN0IgorCUBlY2hvICIgIGRldmhlbHAgICAgdG8gbWFrZSBIVE1MIGZpbGVz
IGFuZCBhIERldmhlbHAgcHJvamVjdCIKKwlAZWNobyAiICBlcHViICAgICAgIHRvIG1ha2UgYW4g
ZXB1YiIKKwlAZWNobyAiICBsYXRleCAgICAgIHRvIG1ha2UgTGFUZVggZmlsZXMsIHlvdSBjYW4g
c2V0IFBBUEVSPWE0IG9yIFBBUEVSPWxldHRlciIKKwlAZWNobyAiICBsYXRleHBkZiAgIHRvIG1h
a2UgTGFUZVggZmlsZXMgYW5kIHJ1biB0aGVtIHRocm91Z2ggcGRmbGF0ZXgiCisJQGVjaG8gIiAg
bGF0ZXhwZGZqYSB0byBtYWtlIExhVGVYIGZpbGVzIGFuZCBydW4gdGhlbSB0aHJvdWdoIHBsYXRl
eC9kdmlwZGZteCIKKwlAZWNobyAiICB0ZXh0ICAgICAgIHRvIG1ha2UgdGV4dCBmaWxlcyIKKwlA
ZWNobyAiICBtYW4gICAgICAgIHRvIG1ha2UgbWFudWFsIHBhZ2VzIgorCUBlY2hvICIgIHRleGlu
Zm8gICAgdG8gbWFrZSBUZXhpbmZvIGZpbGVzIgorCUBlY2hvICIgIGluZm8gICAgICAgdG8gbWFr
ZSBUZXhpbmZvIGZpbGVzIGFuZCBydW4gdGhlbSB0aHJvdWdoIG1ha2VpbmZvIgorCUBlY2hvICIg
IGdldHRleHQgICAgdG8gbWFrZSBQTyBtZXNzYWdlIGNhdGFsb2dzIgorCUBlY2hvICIgIGNoYW5n
ZXMgICAgdG8gbWFrZSBhbiBvdmVydmlldyBvZiBhbGwgY2hhbmdlZC9hZGRlZC9kZXByZWNhdGVk
IGl0ZW1zIgorCUBlY2hvICIgIHhtbCAgICAgICAgdG8gbWFrZSBEb2N1dGlscy1uYXRpdmUgWE1M
IGZpbGVzIgorCUBlY2hvICIgIHBzZXVkb3htbCAgdG8gbWFrZSBwc2V1ZG94bWwtWE1MIGZpbGVz
IGZvciBkaXNwbGF5IHB1cnBvc2VzIgorCUBlY2hvICIgIGxpbmtjaGVjayAgdG8gY2hlY2sgYWxs
IGV4dGVybmFsIGxpbmtzIGZvciBpbnRlZ3JpdHkiCisJQGVjaG8gIiAgZG9jdGVzdCAgICB0byBy
dW4gYWxsIGRvY3Rlc3RzIGVtYmVkZGVkIGluIHRoZSBkb2N1bWVudGF0aW9uIChpZiBlbmFibGVk
KSIKKworY2xlYW46CisJcm0gLXJmICQoQlVJTERESVIpLyoKKworaHRtbDoKKwkkKFNQSElOWEJV
SUxEKSAtYiBodG1sICQoQUxMU1BISU5YT1BUUykgJChCVUlMRERJUikvaHRtbAorCUBlY2hvCisJ
QGVjaG8gIkJ1aWxkIGZpbmlzaGVkLiBUaGUgSFRNTCBwYWdlcyBhcmUgaW4gJChCVUlMRERJUikv
aHRtbC4iCisKK2Rpcmh0bWw6CisJJChTUEhJTlhCVUlMRCkgLWIgZGlyaHRtbCAkKEFMTFNQSElO
WE9QVFMpICQoQlVJTERESVIpL2Rpcmh0bWwKKwlAZWNobworCUBlY2hvICJCdWlsZCBmaW5pc2hl
ZC4gVGhlIEhUTUwgcGFnZXMgYXJlIGluICQoQlVJTERESVIpL2Rpcmh0bWwuIgorCitzaW5nbGVo
dG1sOgorCSQoU1BISU5YQlVJTEQpIC1iIHNpbmdsZWh0bWwgJChBTExTUEhJTlhPUFRTKSAkKEJV
SUxERElSKS9zaW5nbGVodG1sCisJQGVjaG8KKwlAZWNobyAiQnVpbGQgZmluaXNoZWQuIFRoZSBI
VE1MIHBhZ2UgaXMgaW4gJChCVUlMRERJUikvc2luZ2xlaHRtbC4iCisKK3BpY2tsZToKKwkkKFNQ
SElOWEJVSUxEKSAtYiBwaWNrbGUgJChBTExTUEhJTlhPUFRTKSAkKEJVSUxERElSKS9waWNrbGUK
KwlAZWNobworCUBlY2hvICJCdWlsZCBmaW5pc2hlZDsgbm93IHlvdSBjYW4gcHJvY2VzcyB0aGUg
cGlja2xlIGZpbGVzLiIKKworanNvbjoKKwkkKFNQSElOWEJVSUxEKSAtYiBqc29uICQoQUxMU1BI
SU5YT1BUUykgJChCVUlMRERJUikvanNvbgorCUBlY2hvCisJQGVjaG8gIkJ1aWxkIGZpbmlzaGVk
OyBub3cgeW91IGNhbiBwcm9jZXNzIHRoZSBKU09OIGZpbGVzLiIKKworaHRtbGhlbHA6CisJJChT
UEhJTlhCVUlMRCkgLWIgaHRtbGhlbHAgJChBTExTUEhJTlhPUFRTKSAkKEJVSUxERElSKS9odG1s
aGVscAorCUBlY2hvCisJQGVjaG8gIkJ1aWxkIGZpbmlzaGVkOyBub3cgeW91IGNhbiBydW4gSFRN
TCBIZWxwIFdvcmtzaG9wIHdpdGggdGhlIiBcCisJICAgICAgIi5oaHAgcHJvamVjdCBmaWxlIGlu
ICQoQlVJTERESVIpL2h0bWxoZWxwLiIKKworcXRoZWxwOgorCSQoU1BISU5YQlVJTEQpIC1iIHF0
aGVscCAkKEFMTFNQSElOWE9QVFMpICQoQlVJTERESVIpL3F0aGVscAorCUBlY2hvCisJQGVjaG8g
IkJ1aWxkIGZpbmlzaGVkOyBub3cgeW91IGNhbiBydW4gInFjb2xsZWN0aW9uZ2VuZXJhdG9yIiB3
aXRoIHRoZSIgXAorCSAgICAgICIucWhjcCBwcm9qZWN0IGZpbGUgaW4gJChCVUlMRERJUikvcXRo
ZWxwLCBsaWtlIHRoaXM6IgorCUBlY2hvICIjIHFjb2xsZWN0aW9uZ2VuZXJhdG9yICQoQlVJTERE
SVIpL3F0aGVscC93cHRydW5uZXIucWhjcCIKKwlAZWNobyAiVG8gdmlldyB0aGUgaGVscCBmaWxl
OiIKKwlAZWNobyAiIyBhc3Npc3RhbnQgLWNvbGxlY3Rpb25GaWxlICQoQlVJTERESVIpL3F0aGVs
cC93cHRydW5uZXIucWhjIgorCitkZXZoZWxwOgorCSQoU1BISU5YQlVJTEQpIC1iIGRldmhlbHAg
JChBTExTUEhJTlhPUFRTKSAkKEJVSUxERElSKS9kZXZoZWxwCisJQGVjaG8KKwlAZWNobyAiQnVp
bGQgZmluaXNoZWQuIgorCUBlY2hvICJUbyB2aWV3IHRoZSBoZWxwIGZpbGU6IgorCUBlY2hvICIj
IG1rZGlyIC1wICQkSE9NRS8ubG9jYWwvc2hhcmUvZGV2aGVscC93cHRydW5uZXIiCisJQGVjaG8g
IiMgbG4gLXMgJChCVUlMRERJUikvZGV2aGVscCAkJEhPTUUvLmxvY2FsL3NoYXJlL2RldmhlbHAv
d3B0cnVubmVyIgorCUBlY2hvICIjIGRldmhlbHAiCisKK2VwdWI6CisJJChTUEhJTlhCVUlMRCkg
LWIgZXB1YiAkKEFMTFNQSElOWE9QVFMpICQoQlVJTERESVIpL2VwdWIKKwlAZWNobworCUBlY2hv
ICJCdWlsZCBmaW5pc2hlZC4gVGhlIGVwdWIgZmlsZSBpcyBpbiAkKEJVSUxERElSKS9lcHViLiIK
KworbGF0ZXg6CisJJChTUEhJTlhCVUlMRCkgLWIgbGF0ZXggJChBTExTUEhJTlhPUFRTKSAkKEJV
SUxERElSKS9sYXRleAorCUBlY2hvCisJQGVjaG8gIkJ1aWxkIGZpbmlzaGVkOyB0aGUgTGFUZVgg
ZmlsZXMgYXJlIGluICQoQlVJTERESVIpL2xhdGV4LiIKKwlAZWNobyAiUnVuIFxgbWFrZScgaW4g
dGhhdCBkaXJlY3RvcnkgdG8gcnVuIHRoZXNlIHRocm91Z2ggKHBkZilsYXRleCIgXAorCSAgICAg
ICIodXNlIFxgbWFrZSBsYXRleHBkZicgaGVyZSB0byBkbyB0aGF0IGF1dG9tYXRpY2FsbHkpLiIK
KworbGF0ZXhwZGY6CisJJChTUEhJTlhCVUlMRCkgLWIgbGF0ZXggJChBTExTUEhJTlhPUFRTKSAk
KEJVSUxERElSKS9sYXRleAorCUBlY2hvICJSdW5uaW5nIExhVGVYIGZpbGVzIHRocm91Z2ggcGRm
bGF0ZXguLi4iCisJJChNQUtFKSAtQyAkKEJVSUxERElSKS9sYXRleCBhbGwtcGRmCisJQGVjaG8g
InBkZmxhdGV4IGZpbmlzaGVkOyB0aGUgUERGIGZpbGVzIGFyZSBpbiAkKEJVSUxERElSKS9sYXRl
eC4iCisKK2xhdGV4cGRmamE6CisJJChTUEhJTlhCVUlMRCkgLWIgbGF0ZXggJChBTExTUEhJTlhP
UFRTKSAkKEJVSUxERElSKS9sYXRleAorCUBlY2hvICJSdW5uaW5nIExhVGVYIGZpbGVzIHRocm91
Z2ggcGxhdGV4IGFuZCBkdmlwZGZteC4uLiIKKwkkKE1BS0UpIC1DICQoQlVJTERESVIpL2xhdGV4
IGFsbC1wZGYtamEKKwlAZWNobyAicGRmbGF0ZXggZmluaXNoZWQ7IHRoZSBQREYgZmlsZXMgYXJl
IGluICQoQlVJTERESVIpL2xhdGV4LiIKKwordGV4dDoKKwkkKFNQSElOWEJVSUxEKSAtYiB0ZXh0
ICQoQUxMU1BISU5YT1BUUykgJChCVUlMRERJUikvdGV4dAorCUBlY2hvCisJQGVjaG8gIkJ1aWxk
IGZpbmlzaGVkLiBUaGUgdGV4dCBmaWxlcyBhcmUgaW4gJChCVUlMRERJUikvdGV4dC4iCisKK21h
bjoKKwkkKFNQSElOWEJVSUxEKSAtYiBtYW4gJChBTExTUEhJTlhPUFRTKSAkKEJVSUxERElSKS9t
YW4KKwlAZWNobworCUBlY2hvICJCdWlsZCBmaW5pc2hlZC4gVGhlIG1hbnVhbCBwYWdlcyBhcmUg
aW4gJChCVUlMRERJUikvbWFuLiIKKwordGV4aW5mbzoKKwkkKFNQSElOWEJVSUxEKSAtYiB0ZXhp
bmZvICQoQUxMU1BISU5YT1BUUykgJChCVUlMRERJUikvdGV4aW5mbworCUBlY2hvCisJQGVjaG8g
IkJ1aWxkIGZpbmlzaGVkLiBUaGUgVGV4aW5mbyBmaWxlcyBhcmUgaW4gJChCVUlMRERJUikvdGV4
aW5mby4iCisJQGVjaG8gIlJ1biBcYG1ha2UnIGluIHRoYXQgZGlyZWN0b3J5IHRvIHJ1biB0aGVz
ZSB0aHJvdWdoIG1ha2VpbmZvIiBcCisJICAgICAgIih1c2UgXGBtYWtlIGluZm8nIGhlcmUgdG8g
ZG8gdGhhdCBhdXRvbWF0aWNhbGx5KS4iCisKK2luZm86CisJJChTUEhJTlhCVUlMRCkgLWIgdGV4
aW5mbyAkKEFMTFNQSElOWE9QVFMpICQoQlVJTERESVIpL3RleGluZm8KKwlAZWNobyAiUnVubmlu
ZyBUZXhpbmZvIGZpbGVzIHRocm91Z2ggbWFrZWluZm8uLi4iCisJbWFrZSAtQyAkKEJVSUxERElS
KS90ZXhpbmZvIGluZm8KKwlAZWNobyAibWFrZWluZm8gZmluaXNoZWQ7IHRoZSBJbmZvIGZpbGVz
IGFyZSBpbiAkKEJVSUxERElSKS90ZXhpbmZvLiIKKworZ2V0dGV4dDoKKwkkKFNQSElOWEJVSUxE
KSAtYiBnZXR0ZXh0ICQoSTE4TlNQSElOWE9QVFMpICQoQlVJTERESVIpL2xvY2FsZQorCUBlY2hv
CisJQGVjaG8gIkJ1aWxkIGZpbmlzaGVkLiBUaGUgbWVzc2FnZSBjYXRhbG9ncyBhcmUgaW4gJChC
VUlMRERJUikvbG9jYWxlLiIKKworY2hhbmdlczoKKwkkKFNQSElOWEJVSUxEKSAtYiBjaGFuZ2Vz
ICQoQUxMU1BISU5YT1BUUykgJChCVUlMRERJUikvY2hhbmdlcworCUBlY2hvCisJQGVjaG8gIlRo
ZSBvdmVydmlldyBmaWxlIGlzIGluICQoQlVJTERESVIpL2NoYW5nZXMuIgorCitsaW5rY2hlY2s6
CisJJChTUEhJTlhCVUlMRCkgLWIgbGlua2NoZWNrICQoQUxMU1BISU5YT1BUUykgJChCVUlMRERJ
UikvbGlua2NoZWNrCisJQGVjaG8KKwlAZWNobyAiTGluayBjaGVjayBjb21wbGV0ZTsgbG9vayBm
b3IgYW55IGVycm9ycyBpbiB0aGUgYWJvdmUgb3V0cHV0ICIgXAorCSAgICAgICJvciBpbiAkKEJV
SUxERElSKS9saW5rY2hlY2svb3V0cHV0LnR4dC4iCisKK2RvY3Rlc3Q6CisJJChTUEhJTlhCVUlM
RCkgLWIgZG9jdGVzdCAkKEFMTFNQSElOWE9QVFMpICQoQlVJTERESVIpL2RvY3Rlc3QKKwlAZWNo
byAiVGVzdGluZyBvZiBkb2N0ZXN0cyBpbiB0aGUgc291cmNlcyBmaW5pc2hlZCwgbG9vayBhdCB0
aGUgIiBcCisJICAgICAgInJlc3VsdHMgaW4gJChCVUlMRERJUikvZG9jdGVzdC9vdXRwdXQudHh0
LiIKKworeG1sOgorCSQoU1BISU5YQlVJTEQpIC1iIHhtbCAkKEFMTFNQSElOWE9QVFMpICQoQlVJ
TERESVIpL3htbAorCUBlY2hvCisJQGVjaG8gIkJ1aWxkIGZpbmlzaGVkLiBUaGUgWE1MIGZpbGVz
IGFyZSBpbiAkKEJVSUxERElSKS94bWwuIgorCitwc2V1ZG94bWw6CisJJChTUEhJTlhCVUlMRCkg
LWIgcHNldWRveG1sICQoQUxMU1BISU5YT1BUUykgJChCVUlMRERJUikvcHNldWRveG1sCisJQGVj
aG8KKwlAZWNobyAiQnVpbGQgZmluaXNoZWQuIFRoZSBwc2V1ZG8tWE1MIGZpbGVzIGFyZSBpbiAk
KEJVSUxERElSKS9wc2V1ZG94bWwuIgpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0
ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci9kb2NzL2FyY2hpdGVjdHVyZS5zdmcgYi9XZWJEcml2ZXJU
ZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL2RvY3MvYXJjaGl0ZWN0dXJlLnN2Zwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYjhkNWFhMjFjMTkKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVy
L2RvY3MvYXJjaGl0ZWN0dXJlLnN2ZwpAQCAtMCwwICsxIEBACis8c3ZnIHhtbG5zPSJodHRwOi8v
d3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkv
eGxpbmsiIHdpZHRoPSI3ODBweCIgaGVpZ2h0PSIxMDg3cHgiIHZlcnNpb249IjEuMSI+PGRlZnM+
PGxpbmVhckdyYWRpZW50IHgxPSIwJSIgeTE9IjAlIiB4Mj0iMCUiIHkyPSIxMDAlIiBpZD0ibXgt
Z3JhZGllbnQtYTljNGViLTEtYTljNGViLTEtcy0wIj48c3RvcCBvZmZzZXQ9IjAlIiBzdHlsZT0i
c3RvcC1jb2xvcjojQTlDNEVCIi8+PHN0b3Agb2Zmc2V0PSIxMDAlIiBzdHlsZT0ic3RvcC1jb2xv
cjojQTlDNEVCIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PGcgdHJhbnNmb3JtPSJ0cmFuc2xh
dGUoMC41LDAuNSkiPjxyZWN0IHg9IjQ5OCIgeT0iNDk4IiB3aWR0aD0iMTIwIiBoZWlnaHQ9IjYw
IiBmaWxsPSIjZTZkMGRlIiBzdHJva2U9IiMwMDAwMDAiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+
PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNTAwLDUyMSkiPjxzd2l0Y2g+PGZvcmVpZ25PYmplY3Qg
cG9pbnRlci1ldmVudHM9ImFsbCIgd2lkdGg9IjExNiIgaGVpZ2h0PSIxNSIgcmVxdWlyZWRGZWF0
dXJlcz0iaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmVhdHVyZSNFeHRlbnNpYmlsaXR5Ij48
ZGl2IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzdHlsZT0iZGlzcGxheTog
aW5saW5lLWJsb2NrOyBmb250LXNpemU6IDEycHg7IGZvbnQtZmFtaWx5OiBIZWx2ZXRpY2E7IGNv
bG9yOiByZ2IoMCwgMCwgMCk7IGxpbmUtaGVpZ2h0OiAxLjI2OyB2ZXJ0aWNhbC1hbGlnbjogdG9w
OyB3aWR0aDogMTE2cHg7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHRleHQtYWxpZ246IGNlbnRlcjsi
PlRlc3RSdW5uZXI8L2Rpdj48L2ZvcmVpZ25PYmplY3Q+PHRleHQgeD0iNTgiIHk9IjE0IiBmaWxs
PSIjMDAwMDAwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEycHgiIGZvbnQtZmFt
aWx5PSJIZWx2ZXRpY2EiPltOb3Qgc3VwcG9ydGVkIGJ5IHZpZXdlcl08L3RleHQ+PC9zd2l0Y2g+
PC9nPjxyZWN0IHg9IjMzOCIgeT0iNzc4IiB3aWR0aD0iMTIwIiBoZWlnaHQ9IjYwIiBmaWxsPSIj
ZjE5Yzk5IiBzdHJva2U9IiMwMDAwMDAiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+PGcgdHJhbnNm
b3JtPSJ0cmFuc2xhdGUoMzQwLDgwMSkiPjxzd2l0Y2g+PGZvcmVpZ25PYmplY3QgcG9pbnRlci1l
dmVudHM9ImFsbCIgd2lkdGg9IjExNiIgaGVpZ2h0PSIxNSIgcmVxdWlyZWRGZWF0dXJlcz0iaHR0
cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmVhdHVyZSNFeHRlbnNpYmlsaXR5Ij48ZGl2IHhtbG5z
PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzdHlsZT0iZGlzcGxheTogaW5saW5lLWJs
b2NrOyBmb250LXNpemU6IDEycHg7IGZvbnQtZmFtaWx5OiBIZWx2ZXRpY2E7IGNvbG9yOiByZ2Io
MCwgMCwgMCk7IGxpbmUtaGVpZ2h0OiAxLjI2OyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyB3aWR0aDog
MTE2cHg7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHRleHQtYWxpZ246IGNlbnRlcjsiPlByb2R1Y3Qg
dW5kZXIgdGVzdDwvZGl2PjwvZm9yZWlnbk9iamVjdD48dGV4dCB4PSI1OCIgeT0iMTQiIGZpbGw9
IiMwMDAwMDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTJweCIgZm9udC1mYW1p
bHk9IkhlbHZldGljYSI+W05vdCBzdXBwb3J0ZWQgYnkgdmlld2VyXTwvdGV4dD48L3N3aXRjaD48
L2c+PHJlY3QgeD0iMzM4IiB5PSIzODgiIHdpZHRoPSIxMjAiIGhlaWdodD0iNjAiIGZpbGw9IiNl
NmQwZGUiIHN0cm9rZT0iIzAwMDAwMCIgcG9pbnRlci1ldmVudHM9Im5vbmUiLz48ZyB0cmFuc2Zv
cm09InRyYW5zbGF0ZSgzNDAsNDExKSI+PHN3aXRjaD48Zm9yZWlnbk9iamVjdCBwb2ludGVyLWV2
ZW50cz0iYWxsIiB3aWR0aD0iMTE2IiBoZWlnaHQ9IjE1IiByZXF1aXJlZEZlYXR1cmVzPSJodHRw
Oi8vd3d3LnczLm9yZy9UUi9TVkcxMS9mZWF0dXJlI0V4dGVuc2liaWxpdHkiPjxkaXYgeG1sbnM9
Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmUtYmxv
Y2s7IGZvbnQtc2l6ZTogMTJweDsgZm9udC1mYW1pbHk6IEhlbHZldGljYTsgY29sb3I6IHJnYigw
LCAwLCAwKTsgbGluZS1oZWlnaHQ6IDEuMjY7IHZlcnRpY2FsLWFsaWduOiB0b3A7IHdpZHRoOiAx
MTZweDsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgdGV4dC1hbGlnbjogY2VudGVyOyI+VGVzdFJ1bm5l
ck1hbmFnZXI8L2Rpdj48L2ZvcmVpZ25PYmplY3Q+PHRleHQgeD0iNTgiIHk9IjE0IiBmaWxsPSIj
MDAwMDAwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEycHgiIGZvbnQtZmFtaWx5
PSJIZWx2ZXRpY2EiPltOb3Qgc3VwcG9ydGVkIGJ5IHZpZXdlcl08L3RleHQ+PC9zd2l0Y2g+PC9n
PjxyZWN0IHg9IjMzOCIgeT0iMjI4IiB3aWR0aD0iMTIwIiBoZWlnaHQ9IjYwIiBmaWxsPSIjZTZk
MGRlIiBzdHJva2U9IiMwMDAwMDAiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+PGcgdHJhbnNmb3Jt
PSJ0cmFuc2xhdGUoMzQwLDI1MSkiPjxzd2l0Y2g+PGZvcmVpZ25PYmplY3QgcG9pbnRlci1ldmVu
dHM9ImFsbCIgd2lkdGg9IjExNiIgaGVpZ2h0PSIxNSIgcmVxdWlyZWRGZWF0dXJlcz0iaHR0cDov
L3d3dy53My5vcmcvVFIvU1ZHMTEvZmVhdHVyZSNFeHRlbnNpYmlsaXR5Ij48ZGl2IHhtbG5zPSJo
dHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzdHlsZT0iZGlzcGxheTogaW5saW5lLWJsb2Nr
OyBmb250LXNpemU6IDEycHg7IGZvbnQtZmFtaWx5OiBIZWx2ZXRpY2E7IGNvbG9yOiByZ2IoMCwg
MCwgMCk7IGxpbmUtaGVpZ2h0OiAxLjI2OyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyB3aWR0aDogMTE2
cHg7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHRleHQtYWxpZ246IGNlbnRlcjsiPk1hbmFnZXJHcm91
cDwvZGl2PjwvZm9yZWlnbk9iamVjdD48dGV4dCB4PSI1OCIgeT0iMTQiIGZpbGw9IiMwMDAwMDAi
IHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTJweCIgZm9udC1mYW1pbHk9IkhlbHZl
dGljYSI+W05vdCBzdXBwb3J0ZWQgYnkgdmlld2VyXTwvdGV4dD48L3N3aXRjaD48L2c+PHJlY3Qg
eD0iNjU4IiB5PSI2MDgiIHdpZHRoPSIxMjAiIGhlaWdodD0iNjAiIGZpbGw9IiNmZmNlOWYiIHN0
cm9rZT0iIzAwMDAwMCIgcG9pbnRlci1ldmVudHM9Im5vbmUiLz48ZyB0cmFuc2Zvcm09InRyYW5z
bGF0ZSg2NjAsNjMxKSI+PHN3aXRjaD48Zm9yZWlnbk9iamVjdCBwb2ludGVyLWV2ZW50cz0iYWxs
IiB3aWR0aD0iMTE2IiBoZWlnaHQ9IjE1IiByZXF1aXJlZEZlYXR1cmVzPSJodHRwOi8vd3d3Lncz
Lm9yZy9UUi9TVkcxMS9mZWF0dXJlI0V4dGVuc2liaWxpdHkiPjxkaXYgeG1sbnM9Imh0dHA6Ly93
d3cudzMub3JnLzE5OTkveGh0bWwiIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGZvbnQt
c2l6ZTogMTJweDsgZm9udC1mYW1pbHk6IEhlbHZldGljYTsgY29sb3I6IHJnYigwLCAwLCAwKTsg
bGluZS1oZWlnaHQ6IDEuMjY7IHZlcnRpY2FsLWFsaWduOiB0b3A7IHdpZHRoOiAxMTZweDsgd2hp
dGUtc3BhY2U6IG5vcm1hbDsgdGV4dC1hbGlnbjogY2VudGVyOyI+RXhlY3V0b3I8L2Rpdj48L2Zv
cmVpZ25PYmplY3Q+PHRleHQgeD0iNTgiIHk9IjE0IiBmaWxsPSIjMDAwMDAwIiB0ZXh0LWFuY2hv
cj0ibWlkZGxlIiBmb250LXNpemU9IjEycHgiIGZvbnQtZmFtaWx5PSJIZWx2ZXRpY2EiPltOb3Qg
c3VwcG9ydGVkIGJ5IHZpZXdlcl08L3RleHQ+PC9zd2l0Y2g+PC9nPjxyZWN0IHg9IjMzOCIgeT0i
NDk4IiB3aWR0aD0iMTIwIiBoZWlnaHQ9IjYwIiBmaWxsPSJ1cmwoI214LWdyYWRpZW50LWE5YzRl
Yi0xLWE5YzRlYi0xLXMtMCkiIHN0cm9rZT0iIzAwMDAwMCIgcG9pbnRlci1ldmVudHM9Im5vbmUi
Lz48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzNDAsNTIxKSI+PHN3aXRjaD48Zm9yZWlnbk9iamVj
dCBwb2ludGVyLWV2ZW50cz0iYWxsIiB3aWR0aD0iMTE2IiBoZWlnaHQ9IjE1IiByZXF1aXJlZEZl
YXR1cmVzPSJodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9mZWF0dXJlI0V4dGVuc2liaWxpdHki
PjxkaXYgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHN0eWxlPSJkaXNwbGF5
OiBpbmxpbmUtYmxvY2s7IGZvbnQtc2l6ZTogMTJweDsgZm9udC1mYW1pbHk6IEhlbHZldGljYTsg
Y29sb3I6IHJnYigwLCAwLCAwKTsgbGluZS1oZWlnaHQ6IDEuMjY7IHZlcnRpY2FsLWFsaWduOiB0
b3A7IHdpZHRoOiAxMTZweDsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgdGV4dC1hbGlnbjogY2VudGVy
OyI+QnJvd3NlcjwvZGl2PjwvZm9yZWlnbk9iamVjdD48dGV4dCB4PSI1OCIgeT0iMTQiIGZpbGw9
IiMwMDAwMDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTJweCIgZm9udC1mYW1p
bHk9IkhlbHZldGljYSI+W05vdCBzdXBwb3J0ZWQgYnkgdmlld2VyXTwvdGV4dD48L3N3aXRjaD48
L2c+PHBhdGggZD0iTSAzOTggMjg4IEwgMzk4IDM4MiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAw
MDAwIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+PHBhdGgg
ZD0iTSAzOTggMzg3IEwgMzk1IDM4MCBMIDM5OCAzODIgTCA0MDIgMzgwIFoiIGZpbGw9IiMwMDAw
MDAiIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBwb2ludGVyLWV2ZW50
cz0ibm9uZSIvPjxwYXRoIGQ9Ik0gMzk4IDQ0OCBMIDM5OCA0OTIiIGZpbGw9Im5vbmUiIHN0cm9r
ZT0iIzAwMDAwMCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBwb2ludGVyLWV2ZW50cz0ibm9uZSIv
PjxwYXRoIGQ9Ik0gMzk4IDQ5NyBMIDM5NSA0OTAgTCAzOTggNDkyIEwgNDAyIDQ5MCBaIiBmaWxs
PSIjMDAwMDAwIiBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgcG9pbnRl
ci1ldmVudHM9Im5vbmUiLz48cGF0aCBkPSJNIDYxOCA1MjggTCA2ODQgNjAzIiBmaWxsPSJub25l
IiBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgcG9pbnRlci1ldmVudHM9
Im5vbmUiLz48cGF0aCBkPSJNIDY4NyA2MDcgTCA2ODAgNjA0IEwgNjg0IDYwMyBMIDY4NSA2MDAg
WiIgZmlsbD0iIzAwMDAwMCIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAi
IHBvaW50ZXItZXZlbnRzPSJub25lIi8+PHJlY3QgeD0iNDk4IiB5PSI2MDgiIHdpZHRoPSIxMjAi
IGhlaWdodD0iNjAiIGZpbGw9IiNhOWM0ZWIiIHN0cm9rZT0iIzAwMDAwMCIgcG9pbnRlci1ldmVu
dHM9Im5vbmUiLz48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1MDAsNjMxKSI+PHN3aXRjaD48Zm9y
ZWlnbk9iamVjdCBwb2ludGVyLWV2ZW50cz0iYWxsIiB3aWR0aD0iMTE2IiBoZWlnaHQ9IjE1IiBy
ZXF1aXJlZEZlYXR1cmVzPSJodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9mZWF0dXJlI0V4dGVu
c2liaWxpdHkiPjxkaXYgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHN0eWxl
PSJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGZvbnQtc2l6ZTogMTJweDsgZm9udC1mYW1pbHk6IEhl
bHZldGljYTsgY29sb3I6IHJnYigwLCAwLCAwKTsgbGluZS1oZWlnaHQ6IDEuMjY7IHZlcnRpY2Fs
LWFsaWduOiB0b3A7IHdpZHRoOiAxMTZweDsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgdGV4dC1hbGln
bjogY2VudGVyOyI+RXhlY3V0b3JCcm93c2VyPC9kaXY+PC9mb3JlaWduT2JqZWN0Pjx0ZXh0IHg9
IjU4IiB5PSIxNCIgZmlsbD0iIzAwMDAwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXpl
PSIxMnB4IiBmb250LWZhbWlseT0iSGVsdmV0aWNhIj5bTm90IHN1cHBvcnRlZCBieSB2aWV3ZXJd
PC90ZXh0Pjwvc3dpdGNoPjwvZz48cGF0aCBkPSJNIDYyNCA2MzggTCA2NTggNjM4IiBmaWxsPSJu
b25lIiBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgcG9pbnRlci1ldmVu
dHM9Im5vbmUiLz48cGF0aCBkPSJNIDYxOSA2MzggTCA2MjYgNjM1IEwgNjI0IDYzOCBMIDYyNiA2
NDIgWiIgZmlsbD0iIzAwMDAwMCIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2UtbWl0ZXJsaW1pdD0i
MTAiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+PHBhdGggZD0iTSA0MjggNDQ4IEwgNTUyIDQ5NiIg
ZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9r
ZS1kYXNoYXJyYXk9IjMgMyIgcG9pbnRlci1ldmVudHM9Im5vbmUiLz48cGF0aCBkPSJNIDU1NyA0
OTggTCA1NDkgNDk4IEwgNTUyIDQ5NiBMIDU1MiA0OTIgWiIgZmlsbD0iIzAwMDAwMCIgc3Ryb2tl
PSIjMDAwMDAwIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+
PHBhdGggZD0iTSAzOTggNTU4IEwgMzk4IDc3MiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwMDAw
IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS1kYXNoYXJyYXk9IjMgMyIgcG9pbnRlci1l
dmVudHM9Im5vbmUiLz48cGF0aCBkPSJNIDM5OCA3NzcgTCAzOTUgNzcwIEwgMzk4IDc3MiBMIDQw
MiA3NzAgWiIgZmlsbD0iIzAwMDAwMCIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2UtbWl0ZXJsaW1p
dD0iMTAiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+PHJlY3QgeD0iMzM4IiB5PSI0OCIgd2lkdGg9
IjEyMCIgaGVpZ2h0PSI2MCIgZmlsbD0iI2U2ZDBkZSIgc3Ryb2tlPSIjMDAwMDAwIiBwb2ludGVy
LWV2ZW50cz0ibm9uZSIvPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDM0MCw3MSkiPjxzd2l0Y2g+
PGZvcmVpZ25PYmplY3QgcG9pbnRlci1ldmVudHM9ImFsbCIgd2lkdGg9IjExNiIgaGVpZ2h0PSIx
NSIgcmVxdWlyZWRGZWF0dXJlcz0iaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmVhdHVyZSNF
eHRlbnNpYmlsaXR5Ij48ZGl2IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBz
dHlsZT0iZGlzcGxheTogaW5saW5lLWJsb2NrOyBmb250LXNpemU6IDEycHg7IGZvbnQtZmFtaWx5
OiBIZWx2ZXRpY2E7IGNvbG9yOiByZ2IoMCwgMCwgMCk7IGxpbmUtaGVpZ2h0OiAxLjI2OyB2ZXJ0
aWNhbC1hbGlnbjogdG9wOyB3aWR0aDogMTE2cHg7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHRleHQt
YWxpZ246IGNlbnRlcjsiPnJ1bl90ZXN0czwvZGl2PjwvZm9yZWlnbk9iamVjdD48dGV4dCB4PSI1
OCIgeT0iMTQiIGZpbGw9IiMwMDAwMDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0i
MTJweCIgZm9udC1mYW1pbHk9IkhlbHZldGljYSI+W05vdCBzdXBwb3J0ZWQgYnkgdmlld2VyXTwv
dGV4dD48L3N3aXRjaD48L2c+PHBhdGggZD0iTSA0NTggNzggTCA2NTIgNzgiIGZpbGw9Im5vbmUi
IHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBwb2ludGVyLWV2ZW50cz0i
bm9uZSIvPjxwYXRoIGQ9Ik0gNjU3IDc4IEwgNjUwIDgyIEwgNjUyIDc4IEwgNjUwIDc1IFoiIGZp
bGw9IiMwMDAwMDAiIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBwb2lu
dGVyLWV2ZW50cz0ibm9uZSIvPjxyZWN0IHg9IjY1OCIgeT0iNDgiIHdpZHRoPSIxMjAiIGhlaWdo
dD0iNjAiIGZpbGw9IiNlNmQwZGUiIHN0cm9rZT0iIzAwMDAwMCIgcG9pbnRlci1ldmVudHM9Im5v
bmUiLz48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2NjAsNzEpIj48c3dpdGNoPjxmb3JlaWduT2Jq
ZWN0IHBvaW50ZXItZXZlbnRzPSJhbGwiIHdpZHRoPSIxMTYiIGhlaWdodD0iMTUiIHJlcXVpcmVk
RmVhdHVyZXM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZlYXR1cmUjRXh0ZW5zaWJpbGl0
eSI+PGRpdiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3R5bGU9ImRpc3Bs
YXk6IGlubGluZS1ibG9jazsgZm9udC1zaXplOiAxMnB4OyBmb250LWZhbWlseTogSGVsdmV0aWNh
OyBjb2xvcjogcmdiKDAsIDAsIDApOyBsaW5lLWhlaWdodDogMS4yNjsgdmVydGljYWwtYWxpZ246
IHRvcDsgd2lkdGg6IDExNnB4OyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB0ZXh0LWFsaWduOiBjZW50
ZXI7Ij5UZXN0TG9hZGVyPC9kaXY+PC9mb3JlaWduT2JqZWN0Pjx0ZXh0IHg9IjU4IiB5PSIxNCIg
ZmlsbD0iIzAwMDAwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMnB4IiBmb250
LWZhbWlseT0iSGVsdmV0aWNhIj5bTm90IHN1cHBvcnRlZCBieSB2aWV3ZXJdPC90ZXh0Pjwvc3dp
dGNoPjwvZz48cmVjdCB4PSI3MSIgeT0iNDgiIHdpZHRoPSIxMjAiIGhlaWdodD0iNjAiIGZpbGw9
IiNlNmQwZGUiIHN0cm9rZT0iIzAwMDAwMCIgcG9pbnRlci1ldmVudHM9Im5vbmUiLz48ZyB0cmFu
c2Zvcm09InRyYW5zbGF0ZSg3Myw3MSkiPjxzd2l0Y2g+PGZvcmVpZ25PYmplY3QgcG9pbnRlci1l
dmVudHM9ImFsbCIgd2lkdGg9IjExNiIgaGVpZ2h0PSIxNSIgcmVxdWlyZWRGZWF0dXJlcz0iaHR0
cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmVhdHVyZSNFeHRlbnNpYmlsaXR5Ij48ZGl2IHhtbG5z
PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzdHlsZT0iZGlzcGxheTogaW5saW5lLWJs
b2NrOyBmb250LXNpemU6IDEycHg7IGZvbnQtZmFtaWx5OiBIZWx2ZXRpY2E7IGNvbG9yOiByZ2Io
MCwgMCwgMCk7IGxpbmUtaGVpZ2h0OiAxLjI2OyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyB3aWR0aDog
MTE2cHg7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHRleHQtYWxpZ246IGNlbnRlcjsiPlRlc3RFbnZp
cm9ubWVudDwvZGl2PjwvZm9yZWlnbk9iamVjdD48dGV4dCB4PSI1OCIgeT0iMTQiIGZpbGw9IiMw
MDAwMDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTJweCIgZm9udC1mYW1pbHk9
IkhlbHZldGljYSI+W05vdCBzdXBwb3J0ZWQgYnkgdmlld2VyXTwvdGV4dD48L3N3aXRjaD48L2c+
PHJlY3QgeD0iMTUxIiB5PSI2MTgiIHdpZHRoPSIxMjAiIGhlaWdodD0iNjAiIGZpbGw9IiNiOWUw
YTUiIHN0cm9rZT0iIzAwMDAwMCIgcG9pbnRlci1ldmVudHM9Im5vbmUiLz48ZyB0cmFuc2Zvcm09
InRyYW5zbGF0ZSgxNTMsNjQxKSI+PHN3aXRjaD48Zm9yZWlnbk9iamVjdCBwb2ludGVyLWV2ZW50
cz0iYWxsIiB3aWR0aD0iMTE2IiBoZWlnaHQ9IjE1IiByZXF1aXJlZEZlYXR1cmVzPSJodHRwOi8v
d3d3LnczLm9yZy9UUi9TVkcxMS9mZWF0dXJlI0V4dGVuc2liaWxpdHkiPjxkaXYgeG1sbnM9Imh0
dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7
IGZvbnQtc2l6ZTogMTJweDsgZm9udC1mYW1pbHk6IEhlbHZldGljYTsgY29sb3I6IHJnYigwLCAw
LCAwKTsgbGluZS1oZWlnaHQ6IDEuMjY7IHZlcnRpY2FsLWFsaWduOiB0b3A7IHdpZHRoOiAxMTZw
eDsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgdGV4dC1hbGlnbjogY2VudGVyOyI+d3B0c2VydmU8L2Rp
dj48L2ZvcmVpZ25PYmplY3Q+PHRleHQgeD0iNTgiIHk9IjE0IiBmaWxsPSIjMDAwMDAwIiB0ZXh0
LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEycHgiIGZvbnQtZmFtaWx5PSJIZWx2ZXRpY2Ei
PltOb3Qgc3VwcG9ydGVkIGJ5IHZpZXdlcl08L3RleHQ+PC9zd2l0Y2g+PC9nPjxyZWN0IHg9IjEi
IHk9IjYxOCIgd2lkdGg9IjEyMCIgaGVpZ2h0PSI2MCIgZmlsbD0iI2I5ZTBhNSIgc3Ryb2tlPSIj
MDAwMDAwIiBwb2ludGVyLWV2ZW50cz0ibm9uZSIvPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMs
NjQxKSI+PHN3aXRjaD48Zm9yZWlnbk9iamVjdCBwb2ludGVyLWV2ZW50cz0iYWxsIiB3aWR0aD0i
MTE2IiBoZWlnaHQ9IjE1IiByZXF1aXJlZEZlYXR1cmVzPSJodHRwOi8vd3d3LnczLm9yZy9UUi9T
VkcxMS9mZWF0dXJlI0V4dGVuc2liaWxpdHkiPjxkaXYgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn
LzE5OTkveGh0bWwiIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGZvbnQtc2l6ZTogMTJw
eDsgZm9udC1mYW1pbHk6IEhlbHZldGljYTsgY29sb3I6IHJnYigwLCAwLCAwKTsgbGluZS1oZWln
aHQ6IDEuMjY7IHZlcnRpY2FsLWFsaWduOiB0b3A7IHdpZHRoOiAxMTZweDsgd2hpdGUtc3BhY2U6
IG5vcm1hbDsgdGV4dC1hbGlnbjogY2VudGVyOyI+cHl3ZWJzb2NrZXQ8L2Rpdj48L2ZvcmVpZ25P
YmplY3Q+PHRleHQgeD0iNTgiIHk9IjE0IiBmaWxsPSIjMDAwMDAwIiB0ZXh0LWFuY2hvcj0ibWlk
ZGxlIiBmb250LXNpemU9IjEycHgiIGZvbnQtZmFtaWx5PSJIZWx2ZXRpY2EiPltOb3Qgc3VwcG9y
dGVkIGJ5IHZpZXdlcl08L3RleHQ+PC9zd2l0Y2g+PC9nPjxwYXRoIGQ9Ik0gMzM4IDc4IEwgMTk3
IDc4IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIg
cG9pbnRlci1ldmVudHM9Im5vbmUiLz48cGF0aCBkPSJNIDE5MiA3OCBMIDE5OSA3NSBMIDE5NyA3
OCBMIDE5OSA4MiBaIiBmaWxsPSIjMDAwMDAwIiBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS1taXRl
cmxpbWl0PSIxMCIgcG9pbnRlci1ldmVudHM9Im5vbmUiLz48cGF0aCBkPSJNIDEwMSAzMDggTCA2
MiA2MTIiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEw
IiBzdHJva2UtZGFzaGFycmF5PSIzIDMiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+PHBhdGggZD0i
TSA2MSA2MTcgTCA1OSA2MTAgTCA2MiA2MTIgTCA2NiA2MTAgWiIgZmlsbD0iIzAwMDAwMCIgc3Ry
b2tlPSIjMDAwMDAwIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHBvaW50ZXItZXZlbnRzPSJub25l
Ii8+PHBhdGggZD0iTSAxNjEgMzA4IEwgMjA0IDYxMiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAw
MDAwIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS1kYXNoYXJyYXk9IjMgMyIgcG9pbnRl
ci1ldmVudHM9Im5vbmUiLz48cGF0aCBkPSJNIDIwNCA2MTcgTCAyMDAgNjEwIEwgMjA0IDYxMiBM
IDIwNyA2MDkgWiIgZmlsbD0iIzAwMDAwMCIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2UtbWl0ZXJs
aW1pdD0iMTAiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+PHBhdGggZD0iTSAzMzggODIzIEwgNjEg
Njc4IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIg
c3Ryb2tlLWRhc2hhcnJheT0iMyAzIiBwb2ludGVyLWV2ZW50cz0ibm9uZSIvPjxwYXRoIGQ9Ik0g
MjExIDY3OCBMIDMzOCA3OTMiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLW1p
dGVybGltaXQ9IjEwIiBzdHJva2UtZGFzaGFycmF5PSIzIDMiIHBvaW50ZXItZXZlbnRzPSJub25l
Ii8+PHBhdGggZD0iTSAzOTggMTA4IEwgMzk4IDIyMiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAw
MDAwIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+PHBhdGgg
ZD0iTSAzOTggMjI3IEwgMzk1IDIyMCBMIDM5OCAyMjIgTCA0MDIgMjIwIFoiIGZpbGw9IiMwMDAw
MDAiIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBwb2ludGVyLWV2ZW50
cz0ibm9uZSIvPjxwYXRoIGQ9Ik0gNzA2IDI4OCBMIDYxOCA1MTMiIGZpbGw9Im5vbmUiIHN0cm9r
ZT0iIzAwMDAwMCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2UtZGFzaGFycmF5PSIzIDMi
IHBvaW50ZXItZXZlbnRzPSJub25lIi8+PHJlY3QgeD0iNjU4IiB5PSIzODgiIHdpZHRoPSI3MCIg
aGVpZ2h0PSI0MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJub25lIiBwb2ludGVyLWV2ZW50cz0ibm9u
ZSIvPjxnIGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJIZWx2ZXRpY2EiIHRleHQtYW5jaG9y
PSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTJweCI+PHRleHQgeD0iNjkzIiB5PSI0MTIiPlF1ZXVlLmdl
dDwvdGV4dD48L2c+PHBhdGggZD0iTSA0NTggODA4IEwgNzE4IDY2OCIgZmlsbD0ibm9uZSIgc3Ry
b2tlPSIjMDAwMDAwIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS1kYXNoYXJyYXk9IjMg
MyIgcG9pbnRlci1ldmVudHM9Im5vbmUiLz48cmVjdCB4PSI3MSIgeT0iMjQ4IiB3aWR0aD0iMTIw
IiBoZWlnaHQ9IjYwIiBmaWxsPSIjYjllMGE1IiBzdHJva2U9IiMwMDAwMDAiIHBvaW50ZXItZXZl
bnRzPSJub25lIi8+PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNzMsMjcxKSI+PHN3aXRjaD48Zm9y
ZWlnbk9iamVjdCBwb2ludGVyLWV2ZW50cz0iYWxsIiB3aWR0aD0iMTE2IiBoZWlnaHQ9IjE1IiBy
ZXF1aXJlZEZlYXR1cmVzPSJodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9mZWF0dXJlI0V4dGVu
c2liaWxpdHkiPjxkaXYgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHN0eWxl
PSJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGZvbnQtc2l6ZTogMTJweDsgZm9udC1mYW1pbHk6IEhl
bHZldGljYTsgY29sb3I6IHJnYigwLCAwLCAwKTsgbGluZS1oZWlnaHQ6IDEuMjY7IHZlcnRpY2Fs
LWFsaWduOiB0b3A7IHdpZHRoOiAxMTZweDsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgdGV4dC1hbGln
bjogY2VudGVyOyI+c2VydmUucHk8L2Rpdj48L2ZvcmVpZ25PYmplY3Q+PHRleHQgeD0iNTgiIHk9
IjE0IiBmaWxsPSIjMDAwMDAwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEycHgi
IGZvbnQtZmFtaWx5PSJIZWx2ZXRpY2EiPltOb3Qgc3VwcG9ydGVkIGJ5IHZpZXdlcl08L3RleHQ+
PC9zd2l0Y2g+PC9nPjxwYXRoIGQ9Ik0gMTMxIDEwOCBMIDEzMSAyNDIiIGZpbGw9Im5vbmUiIHN0
cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2UtZGFzaGFycmF5PSIz
IDMiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+PHBhdGggZD0iTSAxMzEgMjQ3IEwgMTI4IDI0MCBM
IDEzMSAyNDIgTCAxMzUgMjQwIFoiIGZpbGw9IiMwMDAwMDAiIHN0cm9rZT0iIzAwMDAwMCIgc3Ry
b2tlLW1pdGVybGltaXQ9IjEwIiBwb2ludGVyLWV2ZW50cz0ibm9uZSIvPjxwYXRoIGQ9Ik0gODgg
OTczIEwgMTMyIDk3MyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2UtbWl0ZXJs
aW1pdD0iMTAiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+PHBhdGggZD0iTSAxMzcgOTczIEwgMTMw
IDk3NyBMIDEzMiA5NzMgTCAxMzAgOTcwIFoiIGZpbGw9IiMwMDAwMDAiIHN0cm9rZT0iIzAwMDAw
MCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBwb2ludGVyLWV2ZW50cz0ibm9uZSIvPjxyZWN0IHg9
IjEzOCIgeT0iMTAxOCIgd2lkdGg9IjE4MCIgaGVpZ2h0PSIzMCIgZmlsbD0ibm9uZSIgc3Ryb2tl
PSJub25lIiBwb2ludGVyLWV2ZW50cz0ibm9uZSIvPjxnIGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFt
aWx5PSJIZWx2ZXRpY2EiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTJweCI+PHRl
eHQgeD0iMjI4IiB5PSIxMDM3Ij5Db21tdW5pY2F0aW9uIChjcm9zcyBwcm9jZXNzKTwvdGV4dD48
L2c+PHBhdGggZD0iTSA4OCAxMDAyIEwgMTMyIDEwMDIiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAw
MDAwMCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2UtZGFzaGFycmF5PSIzIDMiIHBvaW50
ZXItZXZlbnRzPSJub25lIi8+PHBhdGggZD0iTSAxMzcgMTAwMiBMIDEzMCAxMDA2IEwgMTMyIDEw
MDIgTCAxMzAgOTk5IFoiIGZpbGw9IiMwMDAwMDAiIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLW1p
dGVybGltaXQ9IjEwIiBwb2ludGVyLWV2ZW50cz0ibm9uZSIvPjxyZWN0IHg9IjEzOCIgeT0iOTU4
IiB3aWR0aD0iMTgwIiBoZWlnaHQ9IjMwIiBmaWxsPSJub25lIiBzdHJva2U9Im5vbmUiIHBvaW50
ZXItZXZlbnRzPSJub25lIi8+PGcgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9IkhlbHZldGlj
YSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMnB4Ij48dGV4dCB4PSIyMjgiIHk9
Ijk3NyI+T3duZXJzaGlwIChzYW1lIHByb2Nlc3MpPC90ZXh0PjwvZz48cGF0aCBkPSJNIDg4IDEw
MzMgTCAxMzggMTAzMyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2UtbWl0ZXJs
aW1pdD0iMTAiIHN0cm9rZS1kYXNoYXJyYXk9IjMgMyIgcG9pbnRlci1ldmVudHM9Im5vbmUiLz48
cmVjdCB4PSIxNDMiIHk9Ijk4OCIgd2lkdGg9IjE4MCIgaGVpZ2h0PSIzMCIgZmlsbD0ibm9uZSIg
c3Ryb2tlPSJub25lIiBwb2ludGVyLWV2ZW50cz0ibm9uZSIvPjxnIGZpbGw9IiMwMDAwMDAiIGZv
bnQtZmFtaWx5PSJIZWx2ZXRpY2EiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTJw
eCI+PHRleHQgeD0iMjMzIiB5PSIxMDA3Ij5Pd25lcnNoaXAgKGNyb3NzIHByb2Nlc3MpPC90ZXh0
PjwvZz48cmVjdCB4PSI0MjgiIHk9Ijk2NiIgd2lkdGg9IjUwIiBoZWlnaHQ9IjE1IiBmaWxsPSIj
ZTZkMGRlIiBzdHJva2U9IiMwMDAwMDAiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+PHJlY3QgeD0i
NDI4IiB5PSI5OTAiIHdpZHRoPSI1MCIgaGVpZ2h0PSIxNSIgZmlsbD0iI2E5YzRlYiIgc3Ryb2tl
PSIjMDAwMDAwIiBwb2ludGVyLWV2ZW50cz0ibm9uZSIvPjxyZWN0IHg9IjQyOCIgeT0iMTAxNSIg
d2lkdGg9IjUwIiBoZWlnaHQ9IjE1IiBmaWxsPSIjZmZjZTlmIiBzdHJva2U9IiMwMDAwMDAiIHBv
aW50ZXItZXZlbnRzPSJub25lIi8+PHJlY3QgeD0iNDI4IiB5PSIxMDYzIiB3aWR0aD0iNTAiIGhl
aWdodD0iMTUiIGZpbGw9IiNmMTljOTkiIHN0cm9rZT0iIzAwMDAwMCIgcG9pbnRlci1ldmVudHM9
Im5vbmUiLz48cmVjdCB4PSI0MjgiIHk9IjEwMzgiIHdpZHRoPSI1MCIgaGVpZ2h0PSIxNSIgZmls
bD0iI2I5ZTBhNSIgc3Ryb2tlPSIjMDAwMDAwIiBwb2ludGVyLWV2ZW50cz0ibm9uZSIvPjxyZWN0
IHg9IjQ4NSIgeT0iOTU4IiB3aWR0aD0iOTAiIGhlaWdodD0iMzAiIGZpbGw9Im5vbmUiIHN0cm9r
ZT0ibm9uZSIgcG9pbnRlci1ldmVudHM9Im5vbmUiLz48ZyBmaWxsPSIjMDAwMDAwIiBmb250LWZh
bWlseT0iSGVsdmV0aWNhIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEycHgiPjx0
ZXh0IHg9IjUzMCIgeT0iOTc3Ij53cHRydW5uZXIgY2xhc3M8L3RleHQ+PC9nPjxyZWN0IHg9IjQ4
NiIgeT0iOTgzIiB3aWR0aD0iMTUwIiBoZWlnaHQ9IjMwIiBmaWxsPSJub25lIiBzdHJva2U9Im5v
bmUiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+PGcgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9
IkhlbHZldGljYSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMnB4Ij48dGV4dCB4
PSI1NjEiIHk9IjEwMDIiPlBlci1wcm9kdWN0IHdwdHJ1bm5lciBjbGFzczwvdGV4dD48L2c+PHJl
Y3QgeD0iNDg2IiB5PSIxMDA4IiB3aWR0aD0iMTUwIiBoZWlnaHQ9IjMwIiBmaWxsPSJub25lIiBz
dHJva2U9Im5vbmUiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+PGcgZmlsbD0iIzAwMDAwMCIgZm9u
dC1mYW1pbHk9IkhlbHZldGljYSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMnB4
Ij48dGV4dCB4PSI1NjEiIHk9IjEwMjciPlBlci1wcm90b2NvbCB3cHRydW5uZXIgY2xhc3M8L3Rl
eHQ+PC9nPjxyZWN0IHg9IjQ5MSIgeT0iMTAzMSIgd2lkdGg9IjE1MCIgaGVpZ2h0PSIzMCIgZmls
bD0ibm9uZSIgc3Ryb2tlPSJub25lIiBwb2ludGVyLWV2ZW50cz0ibm9uZSIvPjxnIGZpbGw9IiMw
MDAwMDAiIGZvbnQtZmFtaWx5PSJIZWx2ZXRpY2EiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQt
c2l6ZT0iMTJweCI+PHRleHQgeD0iNTY2IiB5PSIxMDUwIj5XZWItcGxhdGZvcm0tdGVzdHMgY29t
cG9uZW50PC90ZXh0PjwvZz48cmVjdCB4PSI0ODYiIHk9IjEwNTUiIHdpZHRoPSI5MCIgaGVpZ2h0
PSIzMCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJub25lIiBwb2ludGVyLWV2ZW50cz0ibm9uZSIvPjxn
IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJIZWx2ZXRpY2EiIHRleHQtYW5jaG9yPSJtaWRk
bGUiIGZvbnQtc2l6ZT0iMTJweCI+PHRleHQgeD0iNTMxIiB5PSIxMDc0Ij5Ccm93c2VyIHByb2Nl
c3M8L3RleHQ+PC9nPjxwYXRoIGQ9Ik0gMzk4IDggTCAzOTggNDIiIGZpbGw9Im5vbmUiIHN0cm9r
ZT0iIzAwMDAwMCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBwb2ludGVyLWV2ZW50cz0ibm9uZSIv
PjxwYXRoIGQ9Ik0gMzk4IDQ3IEwgMzk1IDQwIEwgMzk4IDQyIEwgNDAyIDQwIFoiIGZpbGw9IiMw
MDAwMDAiIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBwb2ludGVyLWV2
ZW50cz0ibm9uZSIvPjxyZWN0IHg9IjQ3OCIgeT0iMzg4IiB3aWR0aD0iMTIwIiBoZWlnaHQ9IjYw
IiBmaWxsLW9wYWNpdHk9IjAuNSIgZmlsbD0iI2U2ZDBkZSIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJv
a2Utb3BhY2l0eT0iMC41IiBwb2ludGVyLWV2ZW50cz0ibm9uZSIvPjxnIHRyYW5zZm9ybT0idHJh
bnNsYXRlKDQ4MCw0MTEpIj48c3dpdGNoPjxmb3JlaWduT2JqZWN0IHBvaW50ZXItZXZlbnRzPSJh
bGwiIHdpZHRoPSIxMTYiIGhlaWdodD0iMTUiIHJlcXVpcmVkRmVhdHVyZXM9Imh0dHA6Ly93d3cu
dzMub3JnL1RSL1NWRzExL2ZlYXR1cmUjRXh0ZW5zaWJpbGl0eSI+PGRpdiB4bWxucz0iaHR0cDov
L3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3R5bGU9ImRpc3BsYXk6IGlubGluZS1ibG9jazsgZm9u
dC1zaXplOiAxMnB4OyBmb250LWZhbWlseTogSGVsdmV0aWNhOyBjb2xvcjogcmdiKDAsIDAsIDAp
OyBsaW5lLWhlaWdodDogMS4yNjsgdmVydGljYWwtYWxpZ246IHRvcDsgd2lkdGg6IDExNnB4OyB3
aGl0ZS1zcGFjZTogbm9ybWFsOyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij5UZXN0UnVubmVyTWFuYWdl
cjwvZGl2PjwvZm9yZWlnbk9iamVjdD48dGV4dCB4PSI1OCIgeT0iMTQiIGZpbGw9IiMwMDAwMDAi
IHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTJweCIgZm9udC1mYW1pbHk9IkhlbHZl
dGljYSI+W05vdCBzdXBwb3J0ZWQgYnkgdmlld2VyXTwvdGV4dD48L3N3aXRjaD48L2c+PHBhdGgg
ZD0iTSAzOTggMjg4IEwgNTMzIDM4NCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJv
a2UtbWl0ZXJsaW1pdD0iMTAiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+PHBhdGggZD0iTSA1Mzcg
Mzg3IEwgNTI5IDM4NiBMIDUzMyAzODQgTCA1MzMgMzgwIFoiIGZpbGw9IiMwMDAwMDAiIHN0cm9r
ZT0iIzAwMDAwMCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBwb2ludGVyLWV2ZW50cz0ibm9uZSIv
PjxyZWN0IHg9IjE5OCIgeT0iMzg4IiB3aWR0aD0iMTIwIiBoZWlnaHQ9IjYwIiBmaWxsLW9wYWNp
dHk9IjAuNSIgZmlsbD0iI2U2ZDBkZSIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2Utb3BhY2l0eT0i
MC41IiBwb2ludGVyLWV2ZW50cz0ibm9uZSIvPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIwMCw0
MTEpIj48c3dpdGNoPjxmb3JlaWduT2JqZWN0IHBvaW50ZXItZXZlbnRzPSJhbGwiIHdpZHRoPSIx
MTYiIGhlaWdodD0iMTUiIHJlcXVpcmVkRmVhdHVyZXM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1NW
RzExL2ZlYXR1cmUjRXh0ZW5zaWJpbGl0eSI+PGRpdiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
MTk5OS94aHRtbCIgc3R5bGU9ImRpc3BsYXk6IGlubGluZS1ibG9jazsgZm9udC1zaXplOiAxMnB4
OyBmb250LWZhbWlseTogSGVsdmV0aWNhOyBjb2xvcjogcmdiKDAsIDAsIDApOyBsaW5lLWhlaWdo
dDogMS4yNjsgdmVydGljYWwtYWxpZ246IHRvcDsgd2lkdGg6IDExNnB4OyB3aGl0ZS1zcGFjZTog
bm9ybWFsOyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij5UZXN0UnVubmVyTWFuYWdlcjwvZGl2PjwvZm9y
ZWlnbk9iamVjdD48dGV4dCB4PSI1OCIgeT0iMTQiIGZpbGw9IiMwMDAwMDAiIHRleHQtYW5jaG9y
PSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTJweCIgZm9udC1mYW1pbHk9IkhlbHZldGljYSI+W05vdCBz
dXBwb3J0ZWQgYnkgdmlld2VyXTwvdGV4dD48L3N3aXRjaD48L2c+PHBhdGggZD0iTSAzOTggMjg4
IEwgMjYzIDM4NCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2UtbWl0ZXJsaW1p
dD0iMTAiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+PHBhdGggZD0iTSAyNTkgMzg3IEwgMjYzIDM4
MCBMIDI2MyAzODQgTCAyNjcgMzg2IFoiIGZpbGw9IiMwMDAwMDAiIHN0cm9rZT0iIzAwMDAwMCIg
c3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBwb2ludGVyLWV2ZW50cz0ibm9uZSIvPjxyZWN0IHg9IjU3
NSIgeT0iNzQ4IiB3aWR0aD0iMTEwIiBoZWlnaHQ9IjQwIiBmaWxsPSJub25lIiBzdHJva2U9Im5v
bmUiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+PGcgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9
IkhlbHZldGljYSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMnB4Ij48dGV4dCB4
PSI2MzAiIHk9Ijc1OCI+QnJvd3NlciBjb250cm9sPC90ZXh0Pjx0ZXh0IHg9IjYzMCIgeT0iNzcy
Ij5wcm90b2NvbDwvdGV4dD48dGV4dCB4PSI2MzAiIHk9Ijc4NiI+KGUuZy4gV2ViRHJpdmVyKTwv
dGV4dD48L2c+PHJlY3QgeD0iMjU4IiB5PSI3MDgiIHdpZHRoPSI4MCIgaGVpZ2h0PSI0MCIgZmls
bD0ibm9uZSIgc3Ryb2tlPSJub25lIiBwb2ludGVyLWV2ZW50cz0ibm9uZSIvPjxnIGZpbGw9IiMw
MDAwMDAiIGZvbnQtZmFtaWx5PSJIZWx2ZXRpY2EiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQt
c2l6ZT0iMTJweCI+PHRleHQgeD0iMjk4IiB5PSI3MzIiPkhUVFA8L3RleHQ+PC9nPjxyZWN0IHg9
IjExMSIgeT0iNzI4IiB3aWR0aD0iODAiIGhlaWdodD0iNDAiIGZpbGw9Im5vbmUiIHN0cm9rZT0i
bm9uZSIgcG9pbnRlci1ldmVudHM9Im5vbmUiLz48ZyBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWls
eT0iSGVsdmV0aWNhIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEycHgiPjx0ZXh0
IHg9IjE1MSIgeT0iNzUyIj53ZWJzb2NrZXRzPC90ZXh0PjwvZz48cmVjdCB4PSI2NTgiIHk9IjIy
OCIgd2lkdGg9IjEyMCIgaGVpZ2h0PSI2MCIgZmlsbD0iI2U2ZDBkZSIgc3Ryb2tlPSIjMDAwMDAw
IiBwb2ludGVyLWV2ZW50cz0ibm9uZSIvPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDY2MCwyNTEp
Ij48c3dpdGNoPjxmb3JlaWduT2JqZWN0IHBvaW50ZXItZXZlbnRzPSJhbGwiIHdpZHRoPSIxMTYi
IGhlaWdodD0iMTUiIHJlcXVpcmVkRmVhdHVyZXM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzEx
L2ZlYXR1cmUjRXh0ZW5zaWJpbGl0eSI+PGRpdiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5
OS94aHRtbCIgc3R5bGU9ImRpc3BsYXk6IGlubGluZS1ibG9jazsgZm9udC1zaXplOiAxMnB4OyBm
b250LWZhbWlseTogSGVsdmV0aWNhOyBjb2xvcjogcmdiKDAsIDAsIDApOyBsaW5lLWhlaWdodDog
MS4yNjsgdmVydGljYWwtYWxpZ246IHRvcDsgd2lkdGg6IDExNnB4OyB3aGl0ZS1zcGFjZTogbm9y
bWFsOyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij5UZXN0cyBRdWV1ZTwvZGl2PjwvZm9yZWlnbk9iamVj
dD48dGV4dCB4PSI1OCIgeT0iMTQiIGZpbGw9IiMwMDAwMDAiIHRleHQtYW5jaG9yPSJtaWRkbGUi
IGZvbnQtc2l6ZT0iMTJweCIgZm9udC1mYW1pbHk9IkhlbHZldGljYSI+W05vdCBzdXBwb3J0ZWQg
Ynkgdmlld2VyXTwvdGV4dD48L3N3aXRjaD48L2c+PHBhdGggZD0iTSA3MTggMTA4IEwgNzE4IDIy
MiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHBv
aW50ZXItZXZlbnRzPSJub25lIi8+PHBhdGggZD0iTSA3MTggMjI3IEwgNzE1IDIyMCBMIDcxOCAy
MjIgTCA3MjIgMjIwIFoiIGZpbGw9IiMwMDAwMDAiIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLW1p
dGVybGltaXQ9IjEwIiBwb2ludGVyLWV2ZW50cz0ibm9uZSIvPjxwYXRoIGQ9Ik0gNDI4IDk3MCBM
IDQyOCA5NzAiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLW1pdGVybGltaXQ9
IjEwIiBwb2ludGVyLWV2ZW50cz0ibm9uZSIvPjwvZz48L3N2Zz4KZGlmZiAtLWdpdCBhL1dlYkRy
aXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvZG9jcy9jb25mLnB5IGIvV2Vi
RHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci9kb2NzL2NvbmYucHkKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjM5ZTVjYzRmMGQyCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci9k
b2NzL2NvbmYucHkKQEAgLTAsMCArMSwyNjcgQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCisj
CisjIHdwdHJ1bm5lciBkb2N1bWVudGF0aW9uIGJ1aWxkIGNvbmZpZ3VyYXRpb24gZmlsZSwgY3Jl
YXRlZCBieQorIyBzcGhpbngtcXVpY2tzdGFydCBvbiBNb24gTWF5IDE5IDE4OjE0OjIwIDIwMTQu
CisjCisjIFRoaXMgZmlsZSBpcyBleGVjZmlsZSgpZCB3aXRoIHRoZSBjdXJyZW50IGRpcmVjdG9y
eSBzZXQgdG8gaXRzCisjIGNvbnRhaW5pbmcgZGlyLgorIworIyBOb3RlIHRoYXQgbm90IGFsbCBw
b3NzaWJsZSBjb25maWd1cmF0aW9uIHZhbHVlcyBhcmUgcHJlc2VudCBpbiB0aGlzCisjIGF1dG9n
ZW5lcmF0ZWQgZmlsZS4KKyMKKyMgQWxsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGhhdmUgYSBkZWZh
dWx0OyB2YWx1ZXMgdGhhdCBhcmUgY29tbWVudGVkIG91dAorIyBzZXJ2ZSB0byBzaG93IHRoZSBk
ZWZhdWx0LgorCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKKworIyBJZiBleHRlbnNpb25zIChvciBt
b2R1bGVzIHRvIGRvY3VtZW50IHdpdGggYXV0b2RvYykgYXJlIGluIGFub3RoZXIgZGlyZWN0b3J5
LAorIyBhZGQgdGhlc2UgZGlyZWN0b3JpZXMgdG8gc3lzLnBhdGggaGVyZS4gSWYgdGhlIGRpcmVj
dG9yeSBpcyByZWxhdGl2ZSB0byB0aGUKKyMgZG9jdW1lbnRhdGlvbiByb290LCB1c2Ugb3MucGF0
aC5hYnNwYXRoIHRvIG1ha2UgaXQgYWJzb2x1dGUsIGxpa2Ugc2hvd24gaGVyZS4KKyNzeXMucGF0
aC5pbnNlcnQoMCwgb3MucGF0aC5hYnNwYXRoKCcuJykpCisKKyMgLS0gR2VuZXJhbCBjb25maWd1
cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
CisjIElmIHlvdXIgZG9jdW1lbnRhdGlvbiBuZWVkcyBhIG1pbmltYWwgU3BoaW54IHZlcnNpb24s
IHN0YXRlIGl0IGhlcmUuCisjbmVlZHNfc3BoaW54ID0gJzEuMCcKKworIyBBZGQgYW55IFNwaGlu
eCBleHRlbnNpb24gbW9kdWxlIG5hbWVzIGhlcmUsIGFzIHN0cmluZ3MuIFRoZXkgY2FuIGJlCisj
IGV4dGVuc2lvbnMgY29taW5nIHdpdGggU3BoaW54IChuYW1lZCAnc3BoaW54LmV4dC4qJykgb3Ig
eW91ciBjdXN0b20KKyMgb25lcy4KK2V4dGVuc2lvbnMgPSBbCisgICAgJ3NwaGlueC5leHQuYXV0
b2RvYycsCisgICAgJ3NwaGlueC5leHQuaW50ZXJzcGhpbngnLAorICAgICdzcGhpbnguZXh0LnZp
ZXdjb2RlJywKK10KKworIyBBZGQgYW55IHBhdGhzIHRoYXQgY29udGFpbiB0ZW1wbGF0ZXMgaGVy
ZSwgcmVsYXRpdmUgdG8gdGhpcyBkaXJlY3RvcnkuCit0ZW1wbGF0ZXNfcGF0aCA9IFsnX3RlbXBs
YXRlcyddCisKKyMgVGhlIHN1ZmZpeCBvZiBzb3VyY2UgZmlsZW5hbWVzLgorc291cmNlX3N1ZmZp
eCA9ICcucnN0JworCisjIFRoZSBlbmNvZGluZyBvZiBzb3VyY2UgZmlsZXMuCisjc291cmNlX2Vu
Y29kaW5nID0gJ3V0Zi04LXNpZycKKworIyBUaGUgbWFzdGVyIHRvY3RyZWUgZG9jdW1lbnQuCitt
YXN0ZXJfZG9jID0gJ2luZGV4JworCisjIEdlbmVyYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBy
b2plY3QuCitwcm9qZWN0ID0gdSd3cHRydW5uZXInCitjb3B5cmlnaHQgPSB1JycKKworIyBUaGUg
dmVyc2lvbiBpbmZvIGZvciB0aGUgcHJvamVjdCB5b3UncmUgZG9jdW1lbnRpbmcsIGFjdHMgYXMg
cmVwbGFjZW1lbnQgZm9yCisjIHx2ZXJzaW9ufCBhbmQgfHJlbGVhc2V8LCBhbHNvIHVzZWQgaW4g
dmFyaW91cyBvdGhlciBwbGFjZXMgdGhyb3VnaG91dCB0aGUKKyMgYnVpbHQgZG9jdW1lbnRzLgor
IworIyBUaGUgc2hvcnQgWC5ZIHZlcnNpb24uCit2ZXJzaW9uID0gJzAuMycKKyMgVGhlIGZ1bGwg
dmVyc2lvbiwgaW5jbHVkaW5nIGFscGhhL2JldGEvcmMgdGFncy4KK3JlbGVhc2UgPSAnMC4zJwor
CisjIFRoZSBsYW5ndWFnZSBmb3IgY29udGVudCBhdXRvZ2VuZXJhdGVkIGJ5IFNwaGlueC4gUmVm
ZXIgdG8gZG9jdW1lbnRhdGlvbgorIyBmb3IgYSBsaXN0IG9mIHN1cHBvcnRlZCBsYW5ndWFnZXMu
CisjbGFuZ3VhZ2UgPSBOb25lCisKKyMgVGhlcmUgYXJlIHR3byBvcHRpb25zIGZvciByZXBsYWNp
bmcgfHRvZGF5fDogZWl0aGVyLCB5b3Ugc2V0IHRvZGF5IHRvIHNvbWUKKyMgbm9uLWZhbHNlIHZh
bHVlLCB0aGVuIGl0IGlzIHVzZWQ6CisjdG9kYXkgPSAnJworIyBFbHNlLCB0b2RheV9mbXQgaXMg
dXNlZCBhcyB0aGUgZm9ybWF0IGZvciBhIHN0cmZ0aW1lIGNhbGwuCisjdG9kYXlfZm10ID0gJyVC
ICVkLCAlWScKKworIyBMaXN0IG9mIHBhdHRlcm5zLCByZWxhdGl2ZSB0byBzb3VyY2UgZGlyZWN0
b3J5LCB0aGF0IG1hdGNoIGZpbGVzIGFuZAorIyBkaXJlY3RvcmllcyB0byBpZ25vcmUgd2hlbiBs
b29raW5nIGZvciBzb3VyY2UgZmlsZXMuCitleGNsdWRlX3BhdHRlcm5zID0gWydfYnVpbGQnXQor
CisjIFRoZSByZVNUIGRlZmF1bHQgcm9sZSAodXNlZCBmb3IgdGhpcyBtYXJrdXA6IGB0ZXh0YCkg
dG8gdXNlIGZvciBhbGwKKyMgZG9jdW1lbnRzLgorI2RlZmF1bHRfcm9sZSA9IE5vbmUKKworIyBJ
ZiB0cnVlLCAnKCknIHdpbGwgYmUgYXBwZW5kZWQgdG8gOmZ1bmM6IGV0Yy4gY3Jvc3MtcmVmZXJl
bmNlIHRleHQuCisjYWRkX2Z1bmN0aW9uX3BhcmVudGhlc2VzID0gVHJ1ZQorCisjIElmIHRydWUs
IHRoZSBjdXJyZW50IG1vZHVsZSBuYW1lIHdpbGwgYmUgcHJlcGVuZGVkIHRvIGFsbCBkZXNjcmlw
dGlvbgorIyB1bml0IHRpdGxlcyAoc3VjaCBhcyAuLiBmdW5jdGlvbjo6KS4KKyNhZGRfbW9kdWxl
X25hbWVzID0gVHJ1ZQorCisjIElmIHRydWUsIHNlY3Rpb25hdXRob3IgYW5kIG1vZHVsZWF1dGhv
ciBkaXJlY3RpdmVzIHdpbGwgYmUgc2hvd24gaW4gdGhlCisjIG91dHB1dC4gVGhleSBhcmUgaWdu
b3JlZCBieSBkZWZhdWx0LgorI3Nob3dfYXV0aG9ycyA9IEZhbHNlCisKKyMgVGhlIG5hbWUgb2Yg
dGhlIFB5Z21lbnRzIChzeW50YXggaGlnaGxpZ2h0aW5nKSBzdHlsZSB0byB1c2UuCitweWdtZW50
c19zdHlsZSA9ICdzcGhpbngnCisKKyMgQSBsaXN0IG9mIGlnbm9yZWQgcHJlZml4ZXMgZm9yIG1v
ZHVsZSBpbmRleCBzb3J0aW5nLgorI21vZGluZGV4X2NvbW1vbl9wcmVmaXggPSBbXQorCisjIElm
IHRydWUsIGtlZXAgd2FybmluZ3MgYXMgInN5c3RlbSBtZXNzYWdlIiBwYXJhZ3JhcGhzIGluIHRo
ZSBidWlsdCBkb2N1bWVudHMuCisja2VlcF93YXJuaW5ncyA9IEZhbHNlCisKKworIyAtLSBPcHRp
b25zIGZvciBIVE1MIG91dHB1dCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisKKyMgVGhlIHRoZW1lIHRvIHVzZSBmb3IgSFRNTCBhbmQgSFRNTCBIZWxwIHBh
Z2VzLiAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvcgorIyBhIGxpc3Qgb2YgYnVpbHRpbiB0aGVt
ZXMuCitodG1sX3RoZW1lID0gJ2RlZmF1bHQnCisKKyMgVGhlbWUgb3B0aW9ucyBhcmUgdGhlbWUt
c3BlY2lmaWMgYW5kIGN1c3RvbWl6ZSB0aGUgbG9vayBhbmQgZmVlbCBvZiBhIHRoZW1lCisjIGZ1
cnRoZXIuICBGb3IgYSBsaXN0IG9mIG9wdGlvbnMgYXZhaWxhYmxlIGZvciBlYWNoIHRoZW1lLCBz
ZWUgdGhlCisjIGRvY3VtZW50YXRpb24uCisjaHRtbF90aGVtZV9vcHRpb25zID0ge30KKworIyBB
ZGQgYW55IHBhdGhzIHRoYXQgY29udGFpbiBjdXN0b20gdGhlbWVzIGhlcmUsIHJlbGF0aXZlIHRv
IHRoaXMgZGlyZWN0b3J5LgorI2h0bWxfdGhlbWVfcGF0aCA9IFtdCisKKyMgVGhlIG5hbWUgZm9y
IHRoaXMgc2V0IG9mIFNwaGlueCBkb2N1bWVudHMuICBJZiBOb25lLCBpdCBkZWZhdWx0cyB0bwor
IyAiPHByb2plY3Q+IHY8cmVsZWFzZT4gZG9jdW1lbnRhdGlvbiIuCisjaHRtbF90aXRsZSA9IE5v
bmUKKworIyBBIHNob3J0ZXIgdGl0bGUgZm9yIHRoZSBuYXZpZ2F0aW9uIGJhci4gIERlZmF1bHQg
aXMgdGhlIHNhbWUgYXMgaHRtbF90aXRsZS4KKyNodG1sX3Nob3J0X3RpdGxlID0gTm9uZQorCisj
IFRoZSBuYW1lIG9mIGFuIGltYWdlIGZpbGUgKHJlbGF0aXZlIHRvIHRoaXMgZGlyZWN0b3J5KSB0
byBwbGFjZSBhdCB0aGUgdG9wCisjIG9mIHRoZSBzaWRlYmFyLgorI2h0bWxfbG9nbyA9IE5vbmUK
KworIyBUaGUgbmFtZSBvZiBhbiBpbWFnZSBmaWxlICh3aXRoaW4gdGhlIHN0YXRpYyBwYXRoKSB0
byB1c2UgYXMgZmF2aWNvbiBvZiB0aGUKKyMgZG9jcy4gIFRoaXMgZmlsZSBzaG91bGQgYmUgYSBX
aW5kb3dzIGljb24gZmlsZSAoLmljbykgYmVpbmcgMTZ4MTYgb3IgMzJ4MzIKKyMgcGl4ZWxzIGxh
cmdlLgorI2h0bWxfZmF2aWNvbiA9IE5vbmUKKworIyBBZGQgYW55IHBhdGhzIHRoYXQgY29udGFp
biBjdXN0b20gc3RhdGljIGZpbGVzIChzdWNoIGFzIHN0eWxlIHNoZWV0cykgaGVyZSwKKyMgcmVs
YXRpdmUgdG8gdGhpcyBkaXJlY3RvcnkuIFRoZXkgYXJlIGNvcGllZCBhZnRlciB0aGUgYnVpbHRp
biBzdGF0aWMgZmlsZXMsCisjIHNvIGEgZmlsZSBuYW1lZCAiZGVmYXVsdC5jc3MiIHdpbGwgb3Zl
cndyaXRlIHRoZSBidWlsdGluICJkZWZhdWx0LmNzcyIuCitodG1sX3N0YXRpY19wYXRoID0gWydf
c3RhdGljJ10KKworIyBBZGQgYW55IGV4dHJhIHBhdGhzIHRoYXQgY29udGFpbiBjdXN0b20gZmls
ZXMgKHN1Y2ggYXMgcm9ib3RzLnR4dCBvcgorIyAuaHRhY2Nlc3MpIGhlcmUsIHJlbGF0aXZlIHRv
IHRoaXMgZGlyZWN0b3J5LiBUaGVzZSBmaWxlcyBhcmUgY29waWVkCisjIGRpcmVjdGx5IHRvIHRo
ZSByb290IG9mIHRoZSBkb2N1bWVudGF0aW9uLgorI2h0bWxfZXh0cmFfcGF0aCA9IFtdCisKKyMg
SWYgbm90ICcnLCBhICdMYXN0IHVwZGF0ZWQgb246JyB0aW1lc3RhbXAgaXMgaW5zZXJ0ZWQgYXQg
ZXZlcnkgcGFnZSBib3R0b20sCisjIHVzaW5nIHRoZSBnaXZlbiBzdHJmdGltZSBmb3JtYXQuCisj
aHRtbF9sYXN0X3VwZGF0ZWRfZm10ID0gJyViICVkLCAlWScKKworIyBJZiB0cnVlLCBTbWFydHlQ
YW50cyB3aWxsIGJlIHVzZWQgdG8gY29udmVydCBxdW90ZXMgYW5kIGRhc2hlcyB0bworIyB0eXBv
Z3JhcGhpY2FsbHkgY29ycmVjdCBlbnRpdGllcy4KKyNodG1sX3VzZV9zbWFydHlwYW50cyA9IFRy
dWUKKworIyBDdXN0b20gc2lkZWJhciB0ZW1wbGF0ZXMsIG1hcHMgZG9jdW1lbnQgbmFtZXMgdG8g
dGVtcGxhdGUgbmFtZXMuCisjaHRtbF9zaWRlYmFycyA9IHt9CisKKyMgQWRkaXRpb25hbCB0ZW1w
bGF0ZXMgdGhhdCBzaG91bGQgYmUgcmVuZGVyZWQgdG8gcGFnZXMsIG1hcHMgcGFnZSBuYW1lcyB0
bworIyB0ZW1wbGF0ZSBuYW1lcy4KKyNodG1sX2FkZGl0aW9uYWxfcGFnZXMgPSB7fQorCisjIElm
IGZhbHNlLCBubyBtb2R1bGUgaW5kZXggaXMgZ2VuZXJhdGVkLgorI2h0bWxfZG9tYWluX2luZGlj
ZXMgPSBUcnVlCisKKyMgSWYgZmFsc2UsIG5vIGluZGV4IGlzIGdlbmVyYXRlZC4KKyNodG1sX3Vz
ZV9pbmRleCA9IFRydWUKKworIyBJZiB0cnVlLCB0aGUgaW5kZXggaXMgc3BsaXQgaW50byBpbmRp
dmlkdWFsIHBhZ2VzIGZvciBlYWNoIGxldHRlci4KKyNodG1sX3NwbGl0X2luZGV4ID0gRmFsc2UK
KworIyBJZiB0cnVlLCBsaW5rcyB0byB0aGUgcmVTVCBzb3VyY2VzIGFyZSBhZGRlZCB0byB0aGUg
cGFnZXMuCisjaHRtbF9zaG93X3NvdXJjZWxpbmsgPSBUcnVlCisKKyMgSWYgdHJ1ZSwgIkNyZWF0
ZWQgdXNpbmcgU3BoaW54IiBpcyBzaG93biBpbiB0aGUgSFRNTCBmb290ZXIuIERlZmF1bHQgaXMg
VHJ1ZS4KKyNodG1sX3Nob3dfc3BoaW54ID0gVHJ1ZQorCisjIElmIHRydWUsICIoQykgQ29weXJp
Z2h0IC4uLiIgaXMgc2hvd24gaW4gdGhlIEhUTUwgZm9vdGVyLiBEZWZhdWx0IGlzIFRydWUuCisj
aHRtbF9zaG93X2NvcHlyaWdodCA9IFRydWUKKworIyBJZiB0cnVlLCBhbiBPcGVuU2VhcmNoIGRl
c2NyaXB0aW9uIGZpbGUgd2lsbCBiZSBvdXRwdXQsIGFuZCBhbGwgcGFnZXMgd2lsbAorIyBjb250
YWluIGEgPGxpbms+IHRhZyByZWZlcnJpbmcgdG8gaXQuICBUaGUgdmFsdWUgb2YgdGhpcyBvcHRp
b24gbXVzdCBiZSB0aGUKKyMgYmFzZSBVUkwgZnJvbSB3aGljaCB0aGUgZmluaXNoZWQgSFRNTCBp
cyBzZXJ2ZWQuCisjaHRtbF91c2Vfb3BlbnNlYXJjaCA9ICcnCisKKyMgVGhpcyBpcyB0aGUgZmls
ZSBuYW1lIHN1ZmZpeCBmb3IgSFRNTCBmaWxlcyAoZS5nLiAiLnhodG1sIikuCisjaHRtbF9maWxl
X3N1ZmZpeCA9IE5vbmUKKworIyBPdXRwdXQgZmlsZSBiYXNlIG5hbWUgZm9yIEhUTUwgaGVscCBi
dWlsZGVyLgoraHRtbGhlbHBfYmFzZW5hbWUgPSAnd3B0cnVubmVyZG9jJworCisKKyMgLS0gT3B0
aW9ucyBmb3IgTGFUZVggb3V0cHV0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCitsYXRleF9lbGVtZW50cyA9IHsKKyMgVGhlIHBhcGVyIHNpemUgKCdsZXR0
ZXJwYXBlcicgb3IgJ2E0cGFwZXInKS4KKyMncGFwZXJzaXplJzogJ2xldHRlcnBhcGVyJywKKwor
IyBUaGUgZm9udCBzaXplICgnMTBwdCcsICcxMXB0JyBvciAnMTJwdCcpLgorIydwb2ludHNpemUn
OiAnMTBwdCcsCisKKyMgQWRkaXRpb25hbCBzdHVmZiBmb3IgdGhlIExhVGVYIHByZWFtYmxlLgor
IydwcmVhbWJsZSc6ICcnLAorfQorCisjIEdyb3VwaW5nIHRoZSBkb2N1bWVudCB0cmVlIGludG8g
TGFUZVggZmlsZXMuIExpc3Qgb2YgdHVwbGVzCisjIChzb3VyY2Ugc3RhcnQgZmlsZSwgdGFyZ2V0
IG5hbWUsIHRpdGxlLAorIyAgYXV0aG9yLCBkb2N1bWVudGNsYXNzIFtob3d0bywgbWFudWFsLCBv
ciBvd24gY2xhc3NdKS4KK2xhdGV4X2RvY3VtZW50cyA9IFsKKyAgKCdpbmRleCcsICd3cHRydW5u
ZXIudGV4JywgdSd3cHRydW5uZXIgRG9jdW1lbnRhdGlvbicsCisgICB1J0phbWVzIEdyYWhhbScs
ICdtYW51YWwnKSwKK10KKworIyBUaGUgbmFtZSBvZiBhbiBpbWFnZSBmaWxlIChyZWxhdGl2ZSB0
byB0aGlzIGRpcmVjdG9yeSkgdG8gcGxhY2UgYXQgdGhlIHRvcCBvZgorIyB0aGUgdGl0bGUgcGFn
ZS4KKyNsYXRleF9sb2dvID0gTm9uZQorCisjIEZvciAibWFudWFsIiBkb2N1bWVudHMsIGlmIHRo
aXMgaXMgdHJ1ZSwgdGhlbiB0b3BsZXZlbCBoZWFkaW5ncyBhcmUgcGFydHMsCisjIG5vdCBjaGFw
dGVycy4KKyNsYXRleF91c2VfcGFydHMgPSBGYWxzZQorCisjIElmIHRydWUsIHNob3cgcGFnZSBy
ZWZlcmVuY2VzIGFmdGVyIGludGVybmFsIGxpbmtzLgorI2xhdGV4X3Nob3dfcGFnZXJlZnMgPSBG
YWxzZQorCisjIElmIHRydWUsIHNob3cgVVJMIGFkZHJlc3NlcyBhZnRlciBleHRlcm5hbCBsaW5r
cy4KKyNsYXRleF9zaG93X3VybHMgPSBGYWxzZQorCisjIERvY3VtZW50cyB0byBhcHBlbmQgYXMg
YW4gYXBwZW5kaXggdG8gYWxsIG1hbnVhbHMuCisjbGF0ZXhfYXBwZW5kaWNlcyA9IFtdCisKKyMg
SWYgZmFsc2UsIG5vIG1vZHVsZSBpbmRleCBpcyBnZW5lcmF0ZWQuCisjbGF0ZXhfZG9tYWluX2lu
ZGljZXMgPSBUcnVlCisKKworIyAtLSBPcHRpb25zIGZvciBtYW51YWwgcGFnZSBvdXRwdXQgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgT25lIGVudHJ5IHBlciBt
YW51YWwgcGFnZS4gTGlzdCBvZiB0dXBsZXMKKyMgKHNvdXJjZSBzdGFydCBmaWxlLCBuYW1lLCBk
ZXNjcmlwdGlvbiwgYXV0aG9ycywgbWFudWFsIHNlY3Rpb24pLgorbWFuX3BhZ2VzID0gWworICAg
ICgnaW5kZXgnLCAnd3B0cnVubmVyJywgdSd3cHRydW5uZXIgRG9jdW1lbnRhdGlvbicsCisgICAg
IFt1J0phbWVzIEdyYWhhbSddLCAxKQorXQorCisjIElmIHRydWUsIHNob3cgVVJMIGFkZHJlc3Nl
cyBhZnRlciBleHRlcm5hbCBsaW5rcy4KKyNtYW5fc2hvd191cmxzID0gRmFsc2UKKworCisjIC0t
IE9wdGlvbnMgZm9yIFRleGluZm8gb3V0cHV0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKworIyBHcm91cGluZyB0aGUgZG9jdW1lbnQgdHJlZSBpbnRvIFRleGlu
Zm8gZmlsZXMuIExpc3Qgb2YgdHVwbGVzCisjIChzb3VyY2Ugc3RhcnQgZmlsZSwgdGFyZ2V0IG5h
bWUsIHRpdGxlLCBhdXRob3IsCisjICBkaXIgbWVudSBlbnRyeSwgZGVzY3JpcHRpb24sIGNhdGVn
b3J5KQordGV4aW5mb19kb2N1bWVudHMgPSBbCisgICgnaW5kZXgnLCAnd3B0cnVubmVyJywgdSd3
cHRydW5uZXIgRG9jdW1lbnRhdGlvbicsCisgICB1J0phbWVzIEdyYWhhbScsICd3cHRydW5uZXIn
LCAnT25lIGxpbmUgZGVzY3JpcHRpb24gb2YgcHJvamVjdC4nLAorICAgJ01pc2NlbGxhbmVvdXMn
KSwKK10KKworIyBEb2N1bWVudHMgdG8gYXBwZW5kIGFzIGFuIGFwcGVuZGl4IHRvIGFsbCBtYW51
YWxzLgorI3RleGluZm9fYXBwZW5kaWNlcyA9IFtdCisKKyMgSWYgZmFsc2UsIG5vIG1vZHVsZSBp
bmRleCBpcyBnZW5lcmF0ZWQuCisjdGV4aW5mb19kb21haW5faW5kaWNlcyA9IFRydWUKKworIyBI
b3cgdG8gZGlzcGxheSBVUkwgYWRkcmVzc2VzOiAnZm9vdG5vdGUnLCAnbm8nLCBvciAnaW5saW5l
Jy4KKyN0ZXhpbmZvX3Nob3dfdXJscyA9ICdmb290bm90ZScKKworIyBJZiB0cnVlLCBkbyBub3Qg
Z2VuZXJhdGUgYSBAZGV0YWlsbWVudSBpbiB0aGUgIlRvcCIgbm9kZSdzIG1lbnUuCisjdGV4aW5m
b19ub19kZXRhaWxtZW51ID0gRmFsc2UKKworCisjIEV4YW1wbGUgY29uZmlndXJhdGlvbiBmb3Ig
aW50ZXJzcGhpbng6IHJlZmVyIHRvIHRoZSBQeXRob24gc3RhbmRhcmQgbGlicmFyeS4KK2ludGVy
c3BoaW54X21hcHBpbmcgPSB7J3B5dGhvbic6ICgnaHR0cDovL2RvY3MucHl0aG9uLm9yZy8nLCBO
b25lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgJ21vemxvZyc6ICgnaHR0cDovL21vemJhc2Uu
cmVhZHRoZWRvY3Mub3JnL2VuL2xhdGVzdC8nLCBOb25lKX0KZGlmZiAtLWdpdCBhL1dlYkRyaXZl
clRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvZG9jcy9kZXNpZ24ucnN0IGIvV2Vi
RHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci9kb2NzL2Rlc2lnbi5yc3QK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmJmMTA4YTAwODdkCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5l
ci9kb2NzL2Rlc2lnbi5yc3QKQEAgLTAsMCArMSwxMDYgQEAKK3dwdHJ1bm5lciBEZXNpZ24KKz09
PT09PT09PT09PT09PT0KKworVGhlIGRlc2lnbiBvZiB3cHRydW5uZXIgaXMgaW50ZW5kZWQgdG8g
bWVldCB0aGUgZm9sbG93aW5nCityZXF1aXJlbWVudHM6CisKKyAqIFBvc3NpYmxlIHRvIHJ1biB0
ZXN0cyBmcm9tIFczQyB3ZWItcGxhdGZvcm0tdGVzdHMuCisKKyAqIFRlc3RzIHNob3VsZCBiZSBy
dW4gYXMgZmFzdCBhcyBwb3NzaWJsZS4gSW4gcGFydGljdWxhciBpdCBzaG91bGQKKyAgIG5vdCBi
ZSBuZWNlc3NhcnkgdG8gcmVzdGFydCB0aGUgYnJvd3NlciBiZXR3ZWVuIHRlc3RzLCBvciBzaW1p
bGFyLgorCisgKiBBcyBmYXIgYXMgcG9zc2libGUsIHRoZSB0ZXN0cyBzaG91bGQgcnVuIGluIGEg
Im5vcm1hbCIgYnJvd3NlciBhbmQKKyAgIGJyb3dzaW5nIGNvbnRleHQuIEluIHBhcnRpY3VsYXIg
bWFueSB0ZXN0cyBhc3N1bWUgdGhhdCB0aGV5IGFyZQorICAgcnVubmluZyBpbiBhIHRvcC1sZXZl
bCBicm93c2luZyBjb250ZXh0LCBzbyB3ZSBtdXN0IGF2b2lkIHRoZSB1c2UKKyAgIG9mIGFuIGBg
aWZyYW1lYGAgdGVzdCBjb250YWluZXIuCisKKyAqIEl0IG11c3QgYmUgcG9zc2libGUgdG8gZGVh
bCB3aXRoIGFsbCBraW5kcyBvZiBiZWhhdmlvdXIgb2YgdGhlCisgICBicm93c2VyIHJ1bmRlciB0
ZXN0LCBmb3IgZXhhbXBsZSwgY3Jhc2hpbmcsIGhhbmdpbmcsIGV0Yy4KKworICogSXQgc2hvdWxk
IGJlIHBvc3NpYmxlIHRvIGFkZCBzdXBwb3J0IGZvciBuZXcgcGxhdGZvcm1zIGFuZCBicm93c2Vy
cworICAgd2l0aCBtaW5pbWFsIGNvZGUgY2hhbmdlcy4KKworICogSXQgbXVzdCBiZSBwb3NzaWJs
ZSB0byBydW4gdGVzdHMgaW4gcGFyYWxsZWwgdG8gZnVydGhlciBpbXByb3ZlCisgICBwZXJmb3Jt
YW5jZS4KKworICogVGVzdCBvdXRwdXQgbXVzdCBiZSBpbiBhIG1hY2hpbmUgcmVhZGFibGUgZm9y
bS4KKworQXJjaGl0ZWN0dXJlCistLS0tLS0tLS0tLS0KKworSW4gb3JkZXIgdG8gbWVldCB0aGUg
YWJvdmUgcmVxdWlyZW1lbnRzLCB3cHRydW5uZXIgaXMgZGVzaWduZWQgdG8KK3B1c2ggYXMgbXVj
aCBvZiB0aGUgdGVzdCBzY2hlZHVsaW5nIGFzIHBvc3NpYmxlIGludG8gdGhlIGhhcm5lc3MuIFRo
aXMKK2FsbG93cyB0aGUgaGFybmVzcyB0byBtb25pdG9yIHRoZSBzdGF0ZSBvZiB0aGUgYnJvd3Nl
ciBhbmQgcGVyZm9ybQorYXBwcm9wcmlhdGUgYWN0aW9uIGlmIGl0IGdldHMgaW50byBhbiB1bndh
bnRlZCBzdGF0ZSBlLmcuIGtpbGwgdGhlCiticm93c2VyIGlmIGl0IGFwcGVhcnMgdG8gYmUgaHVu
Zy4KKworVGhlIGhhcm5lc3Mgd2lsbCB0eXBpY2FsbHkgY29tbXVuaWNhdGUgd2l0aCB0aGUgYnJv
d3NlciB2aWEgc29tZSByZW1vdGUKK2NvbnRyb2wgcHJvdG9jb2wgc3VjaCBhcyBXZWJEcml2ZXIu
IEhvd2V2ZXIgZm9yIGJyb3dzZXJzIHdoZXJlIG5vIHN1Y2gKK3Byb3RvY29sIGlzIHN1cHBvcnRl
ZCwgb3RoZXIgaW1wbGVtZW50YXRpb24gc3RyYXRlZ2llcyBhcmUgcG9zc2libGUsCit0eXBpY2Fs
bHkgYXQgdGhlIGV4cGVuc2Ugb2Ygc3BlZWQuCisKK1RoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSBv
ZiB3cHRydW5uZXIgaXMgc2hvd24gaW4gdGhlIGRpYWdyYW0gYmVsb3c6CisKKy4uIGltYWdlOjog
YXJjaGl0ZWN0dXJlLnN2ZworCitUaGUgbWFpbiBlbnRyeSBwb2ludCB0byB0aGUgY29kZSBpcyA6
cHk6ZnVuYzpgcnVuX3Rlc3RzYCBpbgorYGB3cHRydW5uZXIucHlgYC4gVGhpcyBpcyByZXNwb25z
aWJsZSBmb3Igc2V0dGluZyB1cCB0aGUgdGVzdAorZW52aXJvbm1lbnQsIGxvYWRpbmcgdGhlIGxp
c3Qgb2YgdGVzdHMgdG8gYmUgZXhlY3V0ZWQsIGFuZCBpbnZva2luZwordGhlIHJlbWFpbmRlciBv
ZiB0aGUgY29kZSB0byBhY3R1YWxseSBleGVjdXRlIHNvbWUgdGVzdHMuCisKK1RoZSB0ZXN0IGVu
dmlyb25tZW50IGlzIGVuY2Fwc3VsYXRlZCBpbiB0aGUKKzpweTpjbGFzczpgVGVzdEVudmlyb25t
ZW50YCBjbGFzcy4gVGhpcyBkZWZlcnMgdG8gY29kZSBpbgorYGB3ZWItcGxhdGZvcm0tdGVzdHNg
YCB3aGljaCBhY3R1YWxseSBzdGFydHMgdGhlIHJlcXVpcmVkIHNlcnZlcnMgdG8KK3J1biB0aGUg
dGVzdHMuCisKK1RoZSBzZXQgb2YgdGVzdHMgdG8gcnVuIGlzIGRlZmluZWQgYnkgdGhlCis6cHk6
Y2xhc3M6YFRlc3RMb2FkZXJgLiBUaGlzIGlzIGNvbnN0cnVjdGVkIHdpdGggYQorOnB5OmNsYXNz
OmBUZXN0RmlsdGVyYCAobm90IHNob3duKSwgd2hpY2ggdGFrZXMgYW55IGZpbHRlciBhcmd1bWVu
dHMKK2Zyb20gdGhlIGNvbW1hbmQgbGluZSB0byByZXN0cmljdCB0aGUgc2V0IG9mIHRlc3RzIHRo
YXQgd2lsbCBiZQorcnVuLiBUaGUgOnB5OmNsYXNzOmBUZXN0TG9hZGVyYCByZWFkcyBib3RoIHRo
ZSBgYHdlYi1wbGF0Zm9ybS10ZXN0c2BgCitKU09OIG1hbmlmZXN0IGFuZCB0aGUgZXhwZWN0YXRp
b24gZGF0YSBzdG9yZWQgaW4gaW5pIGZpbGVzIGFuZAorcHJvZHVjZXMgYSA6cHk6Y2xhc3M6YG11
bHRpcHJvY2Vzc2luZy5RdWV1ZWAgb2YgdGVzdHMgdG8gcnVuLCBhbmQKK3RoZWlyIGV4cGVjdGVk
IHJlc3VsdHMuCisKK0FjdHVhbGx5IHJ1bm5pbmcgdGhlIHRlc3RzIGhhcHBlbnMgdGhyb3VnaCB0
aGUKKzpweTpjbGFzczpgTWFuYWdlckdyb3VwYCBvYmplY3QuIFRoaXMgdGFrZXMgdGhlIDpweTpj
bGFzczpgUXVldWVgIG9mCit0ZXN0cyB0byBiZSBydW4gYW5kIHN0YXJ0cyBhIDpweTpjbGFzczpg
dGVzdHJ1bm5lci5UZXN0UnVubmVyTWFuYWdlcmAgZm9yIGVhY2gKK2luc3RhbmNlIG9mIHRoZSBi
cm93c2VyIHVuZGVyIHRlc3QgdGhhdCB3aWxsIGJlIHN0YXJ0ZWQuIFRoZXNlCis6cHk6Y2xhc3M6
YFRlc3RSdW5uZXJNYW5hZ2VyYCBpbnN0YW5jZXMgYXJlIGVhY2ggc3RhcnRlZCBpbiB0aGVpciBv
d24KK3RocmVhZC4KKworQSA6cHk6Y2xhc3M6YFRlc3RSdW5uZXJNYW5hZ2VyYCBjb29yZGluYXRl
cyBzdGFydGluZyB0aGUgcHJvZHVjdCB1bmRlcgordGVzdCwgYW5kIG91dHB1dHRpbmcgcmVzdWx0
cyBmcm9tIHRoZSB0ZXN0LiBJbiB0aGUgY2FzZSB0aGF0IHRoZSB0ZXN0CitoYXMgdGltZWQgb3V0
IG9yIHRoZSBicm93c2VyIGhhcyBjcmFzaGVkLCBpdCBoYXMgdG8gcmVzdGFydCB0aGUKK2Jyb3dz
ZXIgdG8gZW5zdXJlIHRoZSB0ZXN0IHJ1biBjYW4gY29udGludWUuIFRoZSBmdW5jdGlvbmFsaXR5
IGZvcgoraW5pdGlhbGlzaW5nIHRoZSBicm93c2VyIHVuZGVyIHRlc3QsIGFuZCBwcm9iaW5nIGl0
cyBzdGF0ZQorKGUuZy4gd2hldGhlciB0aGUgcHJvY2VzcyBpcyBzdGlsbCBhbGl2ZSkgaXMgaW1w
bGVtZW50ZWQgdGhyb3VnaCBhCis6cHk6Y2xhc3M6YEJyb3dzZXJgIG9iamVjdC4gQW4gaW1wbGVt
ZW50YXRpb24gb2YgdGhpcyBjbGFzcyBtdXN0IGJlCitwcm92aWRlZCBmb3IgZWFjaCBwcm9kdWN0
IHRoYXQgaXMgc3VwcG9ydGVkLgorCitUaGUgZnVuY3Rpb25hbGl0eSBmb3IgYWN0dWFsbHkgcnVu
bmluZyB0aGUgdGVzdHMgaXMgcHJvdmlkZWQgYnkgYQorOnB5OmNsYXNzOmBUZXN0UnVubmVyYCBv
YmplY3QuIDpweTpjbGFzczpgVGVzdFJ1bm5lcmAgaW5zdGFuY2VzIGFyZQorcnVuIGluIHRoZWly
IG93biBjaGlsZCBwcm9jZXNzIGNyZWF0ZWQgd2l0aCB0aGUKKzpweTptb2Q6YG11bHRpcHJvY2Vz
c2luZ2AgbW9kdWxlLiBUaGlzIGFsbG93cyB0aGVtIHRvIHJ1biBjb25jdXJyZW50bHkKK2FuZCB0
byBiZSBraWxsZWQgYW5kIHJlc3RhcnRlZCBhcyByZXF1aXJlZC4gQ29tbXVuaWNhdGlvbiBiZXR3
ZWVuIHRoZQorOnB5OmNsYXNzOmBUZXN0UnVubmVyTWFuYWdlcmAgYW5kIHRoZSA6cHk6Y2xhc3M6
YFRlc3RSdW5uZXJgIGlzCitwcm92aWRlZCBieSBhIHBhaXIgb2YgcXVldWVzLCBvbmUgZm9yIHNl
bmRpbmcgbWVzc2FnZXMgaW4gZWFjaAorZGlyZWN0aW9uLiBJbiBwYXJ0aWN1bGFyIHRlc3QgcmVz
dWx0cyBhcmUgc2VudCBmcm9tIHRoZQorOnB5OmNsYXNzOmBUZXN0UnVubmVyYCB0byB0aGUgOnB5
OmNsYXNzOmBUZXN0UnVubmVyTWFuYWdlcmAgdXNpbmcgb25lCitvZiB0aGVzZSBxdWV1ZXMuCisK
K1RoZSA6cHk6Y2xhc3M6YFRlc3RSdW5uZXJgIG9iamVjdCBpcyBnZW5lcmljIGluIHRoYXQgdGhl
IHNhbWUKKzpweTpjbGFzczpgVGVzdFJ1bm5lcmAgaXMgdXNlZCByZWdhcmRsZXNzIG9mIHRoZSBw
cm9kdWN0IHVuZGVyCit0ZXN0LiBIb3dldmVyIHRoZSBkZXRhaWxzIG9mIGhvdyB0byBydW4gdGhl
IHRlc3QgbWF5IHZhcnkgZ3JlYXRseSB3aXRoCit0aGUgcHJvZHVjdCBzaW5jZSBkaWZmZXJlbnQg
cHJvZHVjdHMgc3VwcG9ydCBkaWZmZXJlbnQgcmVtb3RlIGNvbnRyb2wKK3Byb3RvY29scyAob3Ig
bm9uZSBhdCBhbGwpLiBUaGVzZSBwcm90b2NvbC1zcGVjaWZpYyBwYXJ0cyBhcmUgcGxhY2VkCitp
biB0aGUgOnB5OmNsYXNzOmBFeGVjdXRvcmAgb2JqZWN0LiBUaGVyZSBpcyB0eXBpY2FsbHkgYSBk
aWZmZXJlbnQKKzpweTpjbGFzczpgRXhlY3V0b3JgIGNsYXNzIGZvciBlYWNoIGNvbWJpbmF0aW9u
IG9mIGNvbnRyb2wgcHJvdG9jb2wKK2FuZCB0ZXN0IHR5cGUuIFRoZSA6cHk6Y2xhc3M6YFRlc3RS
dW5uZXJgIGlzIHJlc3BvbnNpYmxlIGZvciBwdWxsaW5nCitlYWNoIHRlc3Qgb2ZmIHRoZSA6cHk6
Y2xhc3M6YFF1ZXVlYCBvZiB0ZXN0cyBhbmQgcGFzc2luZyBpdCBkb3duIHRvCit0aGUgOnB5OmNs
YXNzOmBFeGVjdXRvcmAuCisKK1RoZSBleGVjdXRvciBvZnRlbiByZXF1aXJlcyBhY2Nlc3MgdG8g
ZGV0YWlscyBvZiB0aGUgcGFydGljdWxhcgorYnJvd3NlciBpbnN0YW5jZSB0aGF0IGl0IGlzIHRl
c3Rpbmcgc28gdGhhdCBpdCBrbm93cyBlLmcuIHdoaWNoIHBvcnQKK3RvIGNvbm5lY3QgdG8gdG8g
c2VuZCBjb21tYW5kcyB0byB0aGUgYnJvd3Nlci4gVGhlc2UgZGV0YWlscyBhcmUKK2VuY2Fwc3Vs
YXRlZCBpbiB0aGUgOnB5OmNsYXNzOmBFeGVjdXRvckJyb3dzZXJgIGNsYXNzLgpkaWZmIC0tZ2l0
IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci9kb2NzL2V4cGVj
dGF0aW9uLnJzdCBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIv
ZG9jcy9leHBlY3RhdGlvbi5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLjZhMGM3NzY4NGEzCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0
ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci9kb2NzL2V4cGVjdGF0aW9uLnJzdApAQCAtMCwwICsxLDI0
OCBAQAorRXhwZWN0YXRpb24gRGF0YQorPT09PT09PT09PT09PT09PQorCitJbnRyb2R1Y3Rpb24K
Ky0tLS0tLS0tLS0tLQorCitGb3IgdXNlIGluIGNvbnRpbnVvdXMgaW50ZWdyYXRpb24gc3lzdGVt
cywgYW5kIG90aGVyIHNjZW5hcmlvcyB3aGVyZQorcmVncmVzc2lvbiB0cmFja2luZyBpcyByZXF1
aXJlZCwgd3B0cnVubmVyIHN1cHBvcnRzIHN0b3JpbmcgYW5kCitsb2FkaW5nIHRoZSBleHBlY3Rl
ZCByZXN1bHQgb2YgZWFjaCB0ZXN0IGluIGEgdGVzdCBydW4uIFR5cGljYWxseQordGhlc2UgZXhw
ZWN0ZWQgcmVzdWx0cyB3aWxsIGluaXRpYWxseSBiZSBnZW5lcmF0ZWQgYnkgcnVubmluZyB0aGUK
K3Rlc3RzdWl0ZSBpbiBhIGJhc2VsaW5lIGJ1aWxkLiBUaGV5IG1heSB0aGVuIGJlIGVkaXRlZCBi
eSBodW1hbnMgYXMKK25ldyBmZWF0dXJlcyBhcmUgYWRkZWQgdG8gdGhlIHByb2R1Y3QgdGhhdCBj
aGFuZ2UgdGhlIGV4cGVjdGVkCityZXN1bHRzLiBUaGUgZXhwZWN0ZWQgcmVzdWx0cyBtYXkgYWxz
byB2YXJ5IGZvciBhIHNpbmdsZSBwcm9kdWN0CitkZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtIG9u
IHdoaWNoIGl0IGlzIHJ1bi4gVGhlcmVmb3JlLCB0aGUgcmF3CitzdHJ1Y3R1cmVkIGxvZyBkYXRh
IGlzIG5vdCBhIHN1aXRhYmxlIGZvcm1hdCBmb3Igc3RvcmluZyB0aGVzZQorZmlsZXMuIEluc3Rl
YWQgc29tZXRoaW5nIGlzIHJlcXVpcmVkIHRoYXQgaXM6CisKKyAqIEh1bWFuIHJlYWRhYmxlCisK
KyAqIEh1bWFuIGVkaXRhYmxlCisKKyAqIE1hY2hpbmUgcmVhZGFibGUgLyB3cml0YWJsZQorCisg
KiBDYXBhYmxlIG9mIHN0b3JpbmcgdGVzdCBpZCAvIHJlc3VsdCBwYWlycworCisgKiBTdWl0YWJs
ZSBmb3Igc3RvcmluZyBpbiBhIHZlcnNpb24gY29udHJvbCBzeXN0ZW0gKGkuZS4gdGV4dC1iYXNl
ZCkKKworVGhlIG5lZWQgZm9yIGRpZmZlcmVudCByZXN1bHRzIHBlciBwbGF0Zm9ybSBtZWFucyBl
aXRoZXIgaGF2aW5nCittdWx0aXBsZSBleHBlY3RhdGlvbiBmaWxlcyBmb3IgZWFjaCBwbGF0Zm9y
bSwgb3IgaGF2aW5nIGEgd2F5IHRvCitleHByZXNzIGNvbmRpdGlvbmFsIHZhbHVlcyB3aXRoaW4g
YSBjZXJ0YWluIGZpbGUuIFRoZSBmb3JtZXIgd291bGQgYmUKK3JhdGhlciBjdW1iZXJzb21lIGZv
ciBodW1hbnMgdXBkYXRpbmcgdGhlIGV4cGVjdGF0aW9uIGZpbGVzLCBzbyB0aGUKK2xhdHRlciBh
cHByb2FjaCBoYXMgYmVlbiBhZG9wdGVkLCBsZWFkaW5nIHRvIHRoZSByZXF1aXJlbWVudDoKKwor
ICogQ2FwYWJsZSBvZiBzdG9yaW5nIHJlc3VsdCB2YWx1ZXMgdGhhdCBhcmUgY29uZGl0aW9uYWwg
b24gdGhlIHBsYXRmb3JtLgorCitUaGVyZSBhcmUgZmV3IGV4dGFudCBmb3JtYXRzIHRoYXQgbWVl
dCB0aGVzZSByZXF1aXJlbWVudHMsIHNvCit3cHRydW5uZXIgdXNlcyBhIGJlc3Bva2UgYGBleHBl
Y3RhdGlvbiBtYW5pZmVzdGBgIGZvcm1hdCwgd2hpY2ggaXMKK2Nsb3NlbHkgYmFzZWQgb24gdGhl
IHN0YW5kYXJkIGBgaW5pYGAgZm9ybWF0LgorCitEaXJlY3RvcnkgTGF5b3V0CistLS0tLS0tLS0t
LS0tLS0tCisKK0V4cGVjdGF0aW9uIG1hbmlmZXN0IGZpbGVzIG11c3QgYmUgc3RvcmVkIHVuZGVy
IHRoZSBgYG1ldGFkYXRhYGAKK2RpcmVjdG9yeSBwYXNzZWQgdG8gdGhlIHRlc3QgcnVubmVyLiBU
aGUgZGlyZWN0b3J5IGxheW91dCBmb2xsb3dzIHRoYXQKK29mIHdlYi1wbGF0Zm9ybS10ZXN0cyB3
aXRoIGVhY2ggdGVzdCBwYXRoIGhhdmluZyBhIGNvcnJlc3BvbmRpbmcKK21hbmlmZXN0IGZpbGUu
IFRlc3RzIHRoYXQgZGlmZmVyIG9ubHkgYnkgcXVlcnkgc3RyaW5nLCBvciByZWZ0ZXN0cword2l0
aCB0aGUgc2FtZSB0ZXN0IHBhdGggYnV0IGRpZmZlcmVudCByZWYgcGF0aHMgc2hhcmUgdGhlIHNh
bWUKK3JlZmVyZW5jZSBmaWxlLiBUaGUgZmlsZSBuYW1lIGlzIHRha2VuIGZyb20gdGhlIGxhc3Qg
Ly1zZXBhcmF0ZWQgcGFydAorb2YgdGhlIHBhdGgsIHN1ZmZpeGVkIHdpdGggYGAuaW5pYGAuCisK
K0FzIGFuIG9wdGltaXNhdGlvbiwgZmlsZXMgd2hpY2ggcHJvZHVjZSBvbmx5IGRlZmF1bHQgcmVz
dWx0cworKGkuZS4gYGBQQVNTYGAgb3IgYGBPS2BgKSBkb24ndCByZXF1aXJlIGEgY29ycmVzcG9u
ZGluZyBtYW5pZmVzdCBmaWxlLgorCitGb3IgZXhhbXBsZSBhIHRlc3Qgd2l0aCB1cmw6OgorCisg
IC9zcGVjL3NlY3Rpb24vZmlsZS5odG1sP3F1ZXJ5PXBhcmFtCisKK3dvdWxkIGhhdmUgYW4gZXhw
ZWN0YXRpb24gZmlsZSA6OgorCisgIG1ldGFkYXRhL3NwZWMvc2VjdGlvbi9maWxlLmh0bWwuaW5p
CisKKworLi4gX3dwdHVwZGF0ZS1sYWJlbDoKKworR2VuZXJhdGluZyBFeHBlY3RhdGlvbiBGaWxl
cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit3cHRydW5uZXIgcHJvdmlkZXMgdGhl
IHRvb2wgYGB3cHR1cGRhdGVgYCB0byBnZW5lcmF0ZSBleHBlY3RhdGlvbgorZmlsZXMgZnJvbSB0
aGUgcmVzdWx0cyBvZiBhIHNldCBvZiBiYXNlbGluZSB0ZXN0IHJ1bnMuIFRoZSBiYXNpYworc3lu
dGF4IGZvciB0aGlzIGlzOjoKKworICB3cHR1cGRhdGUgW29wdGlvbnNdIFtsb2dmaWxlXS4uLgor
CitFYWNoIGBgbG9nZmlsZWBgIGlzIGEgc3RydWN0dXJlZCBsb2cgZmlsZSBmcm9tIGEgcHJldmlv
dXMgcnVuLiBUaGVzZQorY2FuIGJlIGdlbmVyYXRlZCBmcm9tIHdwdHJ1bm5lciB1c2luZyB0aGUg
YGAtLWxvZy1yYXdgYCBvcHRpb24KK2UuZy4gYGAtLWxvZy1yYXc9c3RydWN0dXJlZC5sb2dgYC4g
VGhlIGRlZmF1bHQgYmVoYXZpb3VyIGlzIHRvIHVwZGF0ZQorYWxsIHRoZSB0ZXN0IGRhdGEgZm9y
IHRoZSBwYXJ0aWN1bGFyIGNvbWJpbmF0aW9uIG9mIGhhcmR3YXJlIGFuZCBPUwordXNlZCBpbiB0
aGUgcnVuIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGxvZyBkYXRhLCB3aGlsc3QgbGVhdmluZyBhbnkK
K290aGVyIGV4cGVjdGF0aW9ucyB1bnRvdWNoZWQuCisKK3dwdHVwZGF0ZSB0YWtlcyBzZXZlcmFs
IHVzZWZ1bCBvcHRpb25zOgorCitgYC0tc3luY2BgCisgIFB1bGwgdGhlIGxhdGVzdCB2ZXJzaW9u
IG9mIHdlYi1wbGF0Zm9ybS10ZXN0cyBmcm9tIHRoZQorICB1cHN0cmVhbSBzcGVjaWZpZWQgaW4g
dGhlIGNvbmZpZyBmaWxlLiBJZiB0aGlzIGlzIHNwZWNpZmllZCBpbgorICBjb21iaW5hdGlvbiB3
aXRoIGxvZ2ZpbGVzLCBpdCBpcyBhc3N1bWVkIHRoYXQgdGhlIHJlc3VsdHMgaW4gdGhlIGxvZwor
ICBmaWxlcyBhcHBseSB0byB0aGUgcG9zdC11cGRhdGUgdGVzdHMuCisKK2BgLS1uby1jaGVjay1j
bGVhbmBgCisgIERvbid0IGF0dGVtcHQgdG8gY2hlY2sgaWYgdGhlIHdvcmtpbmcgZGlyZWN0b3J5
IGlzIGNsZWFuIGJlZm9yZQorICBkb2luZyB0aGUgdXBkYXRlIChhc3N1bWluZyB0aGF0IHRoZSB3
b3JraW5nIGRpcmVjdG9yeSBpcyBhIGdpdCBvcgorICBtZXJjdXJpYWwgdHJlZSkuCisKK2BgLS1w
YXRjaGBgCisgIENyZWF0ZSBhIGEgZ2l0IGNvbW1pdCwgb3IgYSBtcSBwYXRjaCwgd2l0aCB0aGUg
Y2hhbmdlcyBtYWRlIGJ5IHdwdHVwZGF0ZS4KKworYGAtLWlnbm9yZS1leGlzdGluZ2BgCisgIE92
ZXJ3cml0ZSBhbGwgdGhlIGV4cGVjdGF0aW9uIGRhdGEgZm9yIGFueSB0ZXN0cyB0aGF0IGhhdmUg
YSByZXN1bHQKKyAgaW4gdGhlIHBhc3NlZCBsb2cgZmlsZXMsIG5vdCBqdXN0IGRhdGEgZm9yIHRo
ZSBzYW1lIHBsYXRmb3JtLgorCitFeGFtcGxlcworfn5+fn5+fn4KKworVXBkYXRlIHRoZSBsb2Nh
bCBjb3B5IG9mIHdlYi1wbGF0Zm9ybS10ZXN0cyB3aXRob3V0IGNoYW5naW5nIHRoZQorZXhwZWN0
YXRpb24gZGF0YSBhbmQgY29tbWl0IChvciBjcmVhdGUgYSBtcSBwYXRjaCBmb3IpIHRoZSByZXN1
bHQ6OgorCisgIHdwdHVwZGF0ZSAtLXBhdGNoIC0tc3luYworCitVcGRhdGUgYWxsIHRoZSBleHBl
Y3RhdGlvbnMgZnJvbSBhIHNldCBvZiBjcm9zcy1wbGF0Zm9ybSB0ZXN0IHJ1bnM6OgorCisgIHdw
dHVwZGF0ZSAtLW5vLWNoZWNrLWNsZWFuIC0tcGF0Y2ggb3N4LmxvZyBsaW51eC5sb2cgd2luZG93
cy5sb2cKKworQWRkIGV4cGVjdGF0aW9uIGRhdGEgZm9yIHNvbWUgbmV3IHRlc3RzIHRoYXQgYXJl
IGV4cGVjdGVkIHRvIGJlCitwbGF0Zm9ybS1pbmRlcGVuZGVudDo6CisKKyAgd3B0dXBkYXRlIC0t
bm8tY2hlY2stY2xlYW4gLS1wYXRjaCAtLWlnbm9yZS1leGlzdGluZyB0ZXN0cy5sb2cKKworTWFu
aWZlc3QgRm9ybWF0CistLS0tLS0tLS0tLS0tLS0KK1RoZSBmb3JtYXQgb2YgdGhlIG1hbmlmZXN0
IGZpbGVzIGlzIGJhc2VkIG9uIHRoZSBpbmkgZm9ybWF0LiBGaWxlcyBhcmUKK2RpdmlkZWQgaW50
byBzZWN0aW9ucywgZWFjaCAoYXBhcnQgZnJvbSB0aGUgcm9vdCBzZWN0aW9uKSBoYXZpbmcgYQor
aGVhZGluZyBlbmNsb3NlZCBpbiBzcXVhcmUgYnJhY2VzLiBXaXRoaW4gZWFjaCBzZWN0aW9uIGFy
ZSBrZXktdmFsdWUKK3BhaXJzLiBUaGVyZSBhcmUgc2V2ZXJhbCBub3RhYmxlIGRpZmZlcmVuY2Vz
IGZyb20gc3RhbmRhcmQgLmluaSBmaWxlcywKK2hvd2V2ZXI6CisKKyAqIFNlY3Rpb25zIG1heSBi
ZSBoaWVyYXJjaGljYWxseSBuZXN0ZWQsIHdpdGggc2lnbmlmaWNhbnQgd2hpdGVzcGFjZQorICAg
aW5kaWNhdGluZyBuZXN0aW5nIGRlcHRoLgorCisgKiBPbmx5IGBgOmBgIGlzIHZhbGlkIGFzIGEg
a2V5L3ZhbHVlIHNlcGFyYXRvcgorCitBIHNpbXBsZSBleGFtcGxlIG9mIGEgbWFuaWZlc3QgZmls
ZSBpczo6CisKKyAgcm9vdF9rZXk6IHJvb3RfdmFsdWUKKworICBbc2VjdGlvbl0KKyAgICBzZWN0
aW9uX2tleTogc2VjdGlvbl92YWx1ZQorCisgICAgW3N1YnNlY3Rpb25dCisgICAgICAgc3Vic2Vj
dGlvbl9rZXk6IHN1YnNlY3Rpb25fdmFsdWUKKworICBbYW5vdGhlcl9zZWN0aW9uXQorICAgIGFu
b3RoZXJfa2V5OiBhbm90aGVyX3ZhbHVlCisKK0NvbmRpdGlvbmFsIFZhbHVlcworfn5+fn5+fn5+
fn5+fn5+fn5+CisKK0luIG9yZGVyIHRvIHN1cHBvcnQgdmFsdWVzIHRoYXQgZGVwZW5kIG9uIHNv
bWUgZXh0ZXJuYWwgZGF0YSwgdGhlCityaWdodCBoYW5kIHNpZGUgb2YgYSBrZXkvdmFsdWUgcGFp
ciBjYW4gdGFrZSBhIHNldCBvZiBjb25kaXRpb25hbHMKK3JhdGhlciB0aGFuIGEgcGxhaW4gdmFs
dWUuIFRoZXNlIHZhbHVlcyBhcmUgcGxhY2VkIG9uIGEgbmV3IGxpbmUKK2ZvbGxvd2luZyB0aGUg
a2V5LCB3aXRoIHNpZ25pZmljYW50IGluZGVudGF0aW9uLiBDb25kaXRpb25hbCB2YWx1ZXMKK2Fy
ZSBwcmVmaXhlZCB3aXRoIGBgaWZgYCBhbmQgdGVybWluYXRlZCB3aXRoIGEgY29sb24sIGZvciBl
eGFtcGxlOjoKKworICBrZXk6CisgICAgaWYgY29uZDE6IHZhbHVlMQorICAgIGlmIGNvbmQyOiB2
YWx1ZTIKKyAgICB2YWx1ZTMKKworSW4gdGhpcyBleGFtcGxlLCB0aGUgdmFsdWUgYXNzb2NpYXRl
ZCB3aXRoIGBga2V5YGAgaXMgZGV0ZXJtaW5lZCBieQorZmlyc3QgZXZhbHVhdGluZyBgYGNvbmQx
YGAgYWdhaW5zdCBleHRlcm5hbCBkYXRhLiBJZiB0aGF0IGlzIHRydWUsCitgYGtleWBgIGlzIGFz
c2lnbmVkIHRoZSB2YWx1ZSBgYHZhbHVlMWBgLCBvdGhlcndpc2UgYGBjb25kMmBgIGlzCitldmFs
dWF0ZWQgaW4gdGhlIHNhbWUgd2F5LiBJZiBib3RoIGBgY29uZDFgYCBhbmQgYGBjb25kMmBgIGFy
ZSBmYWxzZSwKK3RoZSB1bmNvbmRpdGlvbmFsIGBgdmFsdWUzYGAgaXMgdXNlZC4KKworQ29uZGl0
aW9ucyB0aGVtc2VsdmVzIHVzZSBhIFB5dGhvbi1saWtlIGV4cHJlc3Npb24gc3ludGF4LiBPcGVy
YW5kcworY2FuIGVpdGhlciBiZSB2YXJpYWJsZXMsIGNvcnJlc3BvbmRpbmcgdG8gZGF0YSBwYXNz
ZWQgaW4sIG51bWJlcnMKKyhpbnRlZ2VyIG9yIGZsb2F0aW5nIHBvaW50OyBleHBvbmVudGlhbCBu
b3RhdGlvbiBpcyBub3Qgc3VwcG9ydGVkKSBvcgorcXVvdGUtZGVsaW1pdGVkIHN0cmluZ3MuIEVx
dWFsaXR5IGlzIHRlc3RlZCB1c2luZyBgYD09YGAgYW5kCitpbmVxdWFsaXR5IGJ5IGBgIT1gYC4g
VGhlIG9wZXJhdG9ycyBgYGFuZGBgLCBgYG9yYGAgYW5kIGBgbm90YGAgYXJlCit1c2VkIGluIHRo
ZSBleHBlY3RlZCB3YXkuIFBhcmVudGhlc2VzIGNhbiBhbHNvIGJlIHVzZWQgZm9yCitncm91cGlu
Zy4gRm9yIGV4YW1wbGU6OgorCisgIGtleToKKyAgICBpZiAoYSA9PSAyIG9yIGEgPT0gMykgYW5k
IGIgPT0gImFiYyI6IHZhbHVlMQorICAgIGlmIGEgPT0gMSBvciBiICE9ICJhYmMiOiB2YWx1ZTIK
KyAgICB2YWx1ZTMKKworSGVyZSBgYGFgYCBhbmQgYGBiYGAgYXJlIHZhcmlhYmxlcywgdGhlIHZh
bHVlIG9mIHdoaWNoIHdpbGwgYmUKK3N1cHBsaWVkIHdoZW4gdGhlIG1hbmlmZXN0IGlzIHVzZWQu
CisKK0V4cGVjdGF0aW9uIE1hbmlmZXN0cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4g
dXNlZCBmb3IgZXhwZWN0YXRpb24gZGF0YSwgbWFuaWZlc3RzIGhhdmUgdGhlIGZvbGxvd2luZyBm
b3JtYXQ6CisKKyAqIEEgc2VjdGlvbiBwZXIgdGVzdCBVUkwgZGVzY3JpYmVkIGJ5IHRoZSBtYW5p
ZmVzdCwgd2l0aCB0aGUgc2VjdGlvbgorICAgaGVhZGluZyBiZWluZyB0aGUgcGFydCBvZiB0aGUg
dGVzdCBVUkwgZm9sbG93aW5nIHRoZSBsYXN0IGBgL2BgIGluCisgICB0aGUgcGF0aCAodGhpcyBh
bGxvd3MgbXVsdGlwbGUgdGVzdHMgaW4gYSBzaW5nbGUgbWFuaWZlc3QgZmlsZSB3aXRoCisgICB0
aGUgc2FtZSBwYXRoIHBhcnQgb2YgdGhlIFVSTCwgYnV0IGRpZmZlcmVudCBxdWVyeSBwYXJ0cyku
CisKKyAqIEEgc3Vic2VjdGlvbiBwZXIgc3VidGVzdCwgd2l0aCB0aGUgaGVhZGluZyBiZWluZyB0
aGUgdGl0bGUgb2YgdGhlCisgICBzdWJ0ZXN0LgorCisgKiBBIGtleSBgYHR5cGVgYCBpbmRpY2F0
aW5nIHRoZSB0ZXN0IHR5cGUuIFRoaXMgdGFrZXMgdGhlIHZhbHVlcworICAgYGB0ZXN0aGFybmVz
c2BgIGFuZCBgYHJlZnRlc3RgYC4KKworICogRm9yIHJlZnRlc3RzLCBrZXlzIGBgcmVmdHlwZWBg
IGluZGljYXRpbmcgdGhlIHJlZmVyZW5jZSB0eXBlCisgICAoYGA9PWBgIG9yIGBgIT1gYCkgYW5k
IGBgcmVmdXJsYGAgaW5kaWNhdGluZyB0aGUgVVJMIG9mIHRoZQorICAgcmVmZXJlbmNlLgorCisg
KiBBIGtleSBgYGV4cGVjdGVkYGAgZ2l2aW5nIHRoZSBleHBlY3RhdGlvbiB2YWx1ZSBvZiBlYWNo
IChzdWIpdGVzdC4KKworICogQSBrZXkgYGBkaXNhYmxlZGBgIHdoaWNoIGNhbiBiZSBzZXQgdG8g
YW55IHZhbHVlIHRvIGluZGljYXRlIHRoYXQKKyAgIHRoZSAoc3ViKXRlc3QgaXMgZGlzYWJsZWQg
YW5kIHNob3VsZCBlaXRoZXIgbm90IGJlIHJ1biAoZm9yIHRlc3RzKQorICAgb3IgdGhhdCBpdHMg
cmVzdWx0cyBzaG91bGQgYmUgaWdub3JlZCAoc3VidGVzdHMpLgorCisgKiBBIGtleSBgYHJlc3Rh
cnQtYWZ0ZXJgYCB3aGljaCBjYW4gYmUgc2V0IHRvIGFueSB2YWx1ZSB0byBpbmRpY2F0ZSB0aGF0
CisgICB0aGUgcnVubmVyIHNob3VsZCByZXN0YXJ0IHRoZSBicm93c2VyIGFmdGVyIHJ1bm5pbmcg
dGhpcyB0ZXN0IChlLmcuIHRvCisgICBjbGVhciBvdXQgdW53YW50ZWQgc3RhdGUpLgorCisgKiBW
YXJpYWJsZXMgYGBkZWJ1Z2BgLCBgYG9zYGAsIGBgdmVyc2lvbmBgLCBgYHByb2Nlc3NvcmBgIGFu
ZAorICAgYGBiaXRzYGAgdGhhdCBkZXNjcmliZSB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgYnJv
d3NlciB1bmRlcgorICAgdGVzdC4gYGBkZWJ1Z2BgIGlzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdo
ZXRoZXIgYSBidWlsZCBpcyBhIGRlYnVnCisgICBidWlsZC4gYGBvc2BgIGlzIGEgc3RyaW5nIGlu
ZGljYXRpbmcgdGhlIG9wZXJhdGluZyBzeXN0ZW0sIGFuZAorICAgYGB2ZXJzaW9uYGAgYSBzdHJp
bmcgaW5kaWNhdGluZyB0aGUgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoYXQKKyAgIG9wZXJhdGlu
ZyBzeXN0ZW0uIGBgcHJvY2Vzc29yYGAgaXMgYSBzdHJpbmcgaW5kaWNhdGluZyB0aGUKKyAgIHBy
b2Nlc3NvciBhcmNoaXRlY3R1cmUgYW5kIGBgYml0c2BgIGFuIGludGVnZXIgaW5kaWNhdGluZyB0
aGUKKyAgIG51bWJlciBvZiBiaXRzLiBUaGlzIGluZm9ybWF0aW9uIGlzIHR5cGljYWxseSBwcm92
aWRlZCBieQorICAgOnB5Om1vZDpgbW96aW5mb2AuCisKKyAqIFRvcCBsZXZlbCBrZXlzIGFyZSB0
YWtlbiBhcyBkZWZhdWx0cyBmb3IgdGhlIHdob2xlIGZpbGUuIFNvLCBmb3IKKyAgIGV4YW1wbGUs
IGEgdG9wIGxldmVsIGtleSB3aXRoIGBgZXhwZWN0ZWQ6IEZBSUxgYCB3b3VsZCBpbmRpY2F0ZQor
ICAgdGhhdCBhbGwgdGVzdHMgYW5kIHN1YnRlc3RzIGluIHRoZSBmaWxlIGFyZSBleHBlY3RlZCB0
byBmYWlsLAorICAgdW5sZXNzIHRoZXkgaGF2ZSBhbiBgYGV4cGVjdGVkYGAga2V5IG9mIHRoZWly
IG93bi4KKworQW4gc2ltcGxlIGV4YW1wbGUgbWFuaWZlc3QgbWlnaHQgbG9vayBsaWtlOjoKKwor
ICBbdGVzdC5odG1sP3ZhcmlhbnQ9YmFzaWNdCisgICAgdHlwZTogdGVzdGhhcm5lc3MKKworICAg
IFtUZXN0IHNvbWV0aGluZyB1bnN1cHBvcnRlZF0KKyAgICAgICBleHBlY3RlZDogRkFJTAorCisg
IFt0ZXN0Lmh0bWw/dmFyaWFudD1icm9rZW5dCisgICAgZXhwZWN0ZWQ6IEVSUk9SCisKKyAgW3Rl
c3QuaHRtbD92YXJpYW50PXVuc3RhYmxlXQorICAgIGRpc2FibGVkOiBodHRwOi8vdGVzdC5idWdz
LmV4YW1wbGUub3JnL2J1Z3MvMTIzNDUKKworQSBtb3JlIGNvbXBsZXggbWFuaWZlc3Qgd2l0aCBj
b25kaXRpb25hbCBwcm9wZXJ0aWVzIG1pZ2h0IGJlOjoKKworICBbY2FudmFzX3Rlc3QuaHRtbF0K
KyAgICBleHBlY3RlZDoKKyAgICAgIGlmIG9zID09ICJvc3giOiBGQUlMCisgICAgICBpZiBvcyA9
PSAid2luZG93cyIgYW5kIHZlcnNpb24gPT0gIlhQIjogRkFJTAorICAgICAgUEFTUworCitOb3Rl
IHRoYXQgYGBQQVNTYGAgaW4gdGhlIGFib3ZlIHdvcmtzLCBidXQgaXMgdW5uZWNlc3Nhcnk7IGBg
UEFTU2BgCisob3IgYGBPS2BgKSBpcyBhbHdheXMgdGhlIGRlZmF1bHQgZXhwZWN0YXRpb24gZm9y
IChzdWIpdGVzdHMuCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9v
bHMvd3B0cnVubmVyL2RvY3MvaW5kZXgucnN0IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNj
L3Rvb2xzL3dwdHJ1bm5lci9kb2NzL2luZGV4LnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uNTE0N2QzZTMxYzMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJU
ZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL2RvY3MvaW5kZXgucnN0CkBAIC0wLDAg
KzEsMjQgQEAKKy4uIHdwdHJ1bm5lciBkb2N1bWVudGF0aW9uIG1hc3RlciBmaWxlLCBjcmVhdGVk
IGJ5CisgICBzcGhpbngtcXVpY2tzdGFydCBvbiBNb24gTWF5IDE5IDE4OjE0OjIwIDIwMTQuCisg
ICBZb3UgY2FuIGFkYXB0IHRoaXMgZmlsZSBjb21wbGV0ZWx5IHRvIHlvdXIgbGlraW5nLCBidXQg
aXQgc2hvdWxkIGF0IGxlYXN0CisgICBjb250YWluIHRoZSByb290IGB0b2N0cmVlYCBkaXJlY3Rp
dmUuCisKK1dlbGNvbWUgdG8gd3B0cnVubmVyJ3MgZG9jdW1lbnRhdGlvbiEKKz09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQ29udGVudHM6CisKKy4uIHRvY3RyZWU6Ogor
ICAgOm1heGRlcHRoOiAyCisKKyAgIHVzYWdlCisgICBleHBlY3RhdGlvbgorICAgZGVzaWduCisK
K0luZGljZXMgYW5kIHRhYmxlcworPT09PT09PT09PT09PT09PT09CisKKyogOnJlZjpgZ2VuaW5k
ZXhgCisqIDpyZWY6YG1vZGluZGV4YAorKiA6cmVmOmBzZWFyY2hgCisKZGlmZiAtLWdpdCBhL1dl
YkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvZG9jcy9tYWtlLmJhdCBi
L1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvZG9jcy9tYWtlLmJh
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOTU5YzE2MTVhMjgKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVu
bmVyL2RvY3MvbWFrZS5iYXQKQEAgLTAsMCArMSwyNDIgQEAKK0BFQ0hPIE9GRg0KKw0KK1JFTSBD
b21tYW5kIGZpbGUgZm9yIFNwaGlueCBkb2N1bWVudGF0aW9uDQorDQoraWYgIiVTUEhJTlhCVUlM
RCUiID09ICIiICgNCisJc2V0IFNQSElOWEJVSUxEPXNwaGlueC1idWlsZA0KKykNCitzZXQgQlVJ
TERESVI9X2J1aWxkDQorc2V0IEFMTFNQSElOWE9QVFM9LWQgJUJVSUxERElSJS9kb2N0cmVlcyAl
U1BISU5YT1BUUyUgLg0KK3NldCBJMThOU1BISU5YT1BUUz0lU1BISU5YT1BUUyUgLg0KK2lmIE5P
VCAiJVBBUEVSJSIgPT0gIiIgKA0KKwlzZXQgQUxMU1BISU5YT1BUUz0tRCBsYXRleF9wYXBlcl9z
aXplPSVQQVBFUiUgJUFMTFNQSElOWE9QVFMlDQorCXNldCBJMThOU1BISU5YT1BUUz0tRCBsYXRl
eF9wYXBlcl9zaXplPSVQQVBFUiUgJUkxOE5TUEhJTlhPUFRTJQ0KKykNCisNCitpZiAiJTEiID09
ICIiIGdvdG8gaGVscA0KKw0KK2lmICIlMSIgPT0gImhlbHAiICgNCisJOmhlbHANCisJZWNoby5Q
bGVhc2UgdXNlIGBtYWtlIF48dGFyZ2V0Xj5gIHdoZXJlIF48dGFyZ2V0Xj4gaXMgb25lIG9mDQor
CWVjaG8uICBodG1sICAgICAgIHRvIG1ha2Ugc3RhbmRhbG9uZSBIVE1MIGZpbGVzDQorCWVjaG8u
ICBkaXJodG1sICAgIHRvIG1ha2UgSFRNTCBmaWxlcyBuYW1lZCBpbmRleC5odG1sIGluIGRpcmVj
dG9yaWVzDQorCWVjaG8uICBzaW5nbGVodG1sIHRvIG1ha2UgYSBzaW5nbGUgbGFyZ2UgSFRNTCBm
aWxlDQorCWVjaG8uICBwaWNrbGUgICAgIHRvIG1ha2UgcGlja2xlIGZpbGVzDQorCWVjaG8uICBq
c29uICAgICAgIHRvIG1ha2UgSlNPTiBmaWxlcw0KKwllY2hvLiAgaHRtbGhlbHAgICB0byBtYWtl
IEhUTUwgZmlsZXMgYW5kIGEgSFRNTCBoZWxwIHByb2plY3QNCisJZWNoby4gIHF0aGVscCAgICAg
dG8gbWFrZSBIVE1MIGZpbGVzIGFuZCBhIHF0aGVscCBwcm9qZWN0DQorCWVjaG8uICBkZXZoZWxw
ICAgIHRvIG1ha2UgSFRNTCBmaWxlcyBhbmQgYSBEZXZoZWxwIHByb2plY3QNCisJZWNoby4gIGVw
dWIgICAgICAgdG8gbWFrZSBhbiBlcHViDQorCWVjaG8uICBsYXRleCAgICAgIHRvIG1ha2UgTGFU
ZVggZmlsZXMsIHlvdSBjYW4gc2V0IFBBUEVSPWE0IG9yIFBBUEVSPWxldHRlcg0KKwllY2hvLiAg
dGV4dCAgICAgICB0byBtYWtlIHRleHQgZmlsZXMNCisJZWNoby4gIG1hbiAgICAgICAgdG8gbWFr
ZSBtYW51YWwgcGFnZXMNCisJZWNoby4gIHRleGluZm8gICAgdG8gbWFrZSBUZXhpbmZvIGZpbGVz
DQorCWVjaG8uICBnZXR0ZXh0ICAgIHRvIG1ha2UgUE8gbWVzc2FnZSBjYXRhbG9ncw0KKwllY2hv
LiAgY2hhbmdlcyAgICB0byBtYWtlIGFuIG92ZXJ2aWV3IG92ZXIgYWxsIGNoYW5nZWQvYWRkZWQv
ZGVwcmVjYXRlZCBpdGVtcw0KKwllY2hvLiAgeG1sICAgICAgICB0byBtYWtlIERvY3V0aWxzLW5h
dGl2ZSBYTUwgZmlsZXMNCisJZWNoby4gIHBzZXVkb3htbCAgdG8gbWFrZSBwc2V1ZG94bWwtWE1M
IGZpbGVzIGZvciBkaXNwbGF5IHB1cnBvc2VzDQorCWVjaG8uICBsaW5rY2hlY2sgIHRvIGNoZWNr
IGFsbCBleHRlcm5hbCBsaW5rcyBmb3IgaW50ZWdyaXR5DQorCWVjaG8uICBkb2N0ZXN0ICAgIHRv
IHJ1biBhbGwgZG9jdGVzdHMgZW1iZWRkZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gaWYgZW5hYmxl
ZA0KKwlnb3RvIGVuZA0KKykNCisNCitpZiAiJTEiID09ICJjbGVhbiIgKA0KKwlmb3IgL2QgJSVp
IGluICglQlVJTERESVIlXCopIGRvIHJtZGlyIC9xIC9zICUlaQ0KKwlkZWwgL3EgL3MgJUJVSUxE
RElSJVwqDQorCWdvdG8gZW5kDQorKQ0KKw0KKw0KKyVTUEhJTlhCVUlMRCUgMj4gbnVsDQoraWYg
ZXJyb3JsZXZlbCA5MDA5ICgNCisJZWNoby4NCisJZWNoby5UaGUgJ3NwaGlueC1idWlsZCcgY29t
bWFuZCB3YXMgbm90IGZvdW5kLiBNYWtlIHN1cmUgeW91IGhhdmUgU3BoaW54DQorCWVjaG8uaW5z
dGFsbGVkLCB0aGVuIHNldCB0aGUgU1BISU5YQlVJTEQgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8g
cG9pbnQNCisJZWNoby50byB0aGUgZnVsbCBwYXRoIG9mIHRoZSAnc3BoaW54LWJ1aWxkJyBleGVj
dXRhYmxlLiBBbHRlcm5hdGl2ZWx5IHlvdQ0KKwllY2hvLm1heSBhZGQgdGhlIFNwaGlueCBkaXJl
Y3RvcnkgdG8gUEFUSC4NCisJZWNoby4NCisJZWNoby5JZiB5b3UgZG9uJ3QgaGF2ZSBTcGhpbngg
aW5zdGFsbGVkLCBncmFiIGl0IGZyb20NCisJZWNoby5odHRwOi8vc3BoaW54LWRvYy5vcmcvDQor
CWV4aXQgL2IgMQ0KKykNCisNCitpZiAiJTEiID09ICJodG1sIiAoDQorCSVTUEhJTlhCVUlMRCUg
LWIgaHRtbCAlQUxMU1BISU5YT1BUUyUgJUJVSUxERElSJS9odG1sDQorCWlmIGVycm9ybGV2ZWwg
MSBleGl0IC9iIDENCisJZWNoby4NCisJZWNoby5CdWlsZCBmaW5pc2hlZC4gVGhlIEhUTUwgcGFn
ZXMgYXJlIGluICVCVUlMRERJUiUvaHRtbC4NCisJZ290byBlbmQNCispDQorDQoraWYgIiUxIiA9
PSAiZGlyaHRtbCIgKA0KKwklU1BISU5YQlVJTEQlIC1iIGRpcmh0bWwgJUFMTFNQSElOWE9QVFMl
ICVCVUlMRERJUiUvZGlyaHRtbA0KKwlpZiBlcnJvcmxldmVsIDEgZXhpdCAvYiAxDQorCWVjaG8u
DQorCWVjaG8uQnVpbGQgZmluaXNoZWQuIFRoZSBIVE1MIHBhZ2VzIGFyZSBpbiAlQlVJTERESVIl
L2Rpcmh0bWwuDQorCWdvdG8gZW5kDQorKQ0KKw0KK2lmICIlMSIgPT0gInNpbmdsZWh0bWwiICgN
CisJJVNQSElOWEJVSUxEJSAtYiBzaW5nbGVodG1sICVBTExTUEhJTlhPUFRTJSAlQlVJTERESVIl
L3NpbmdsZWh0bWwNCisJaWYgZXJyb3JsZXZlbCAxIGV4aXQgL2IgMQ0KKwllY2hvLg0KKwllY2hv
LkJ1aWxkIGZpbmlzaGVkLiBUaGUgSFRNTCBwYWdlcyBhcmUgaW4gJUJVSUxERElSJS9zaW5nbGVo
dG1sLg0KKwlnb3RvIGVuZA0KKykNCisNCitpZiAiJTEiID09ICJwaWNrbGUiICgNCisJJVNQSElO
WEJVSUxEJSAtYiBwaWNrbGUgJUFMTFNQSElOWE9QVFMlICVCVUlMRERJUiUvcGlja2xlDQorCWlm
IGVycm9ybGV2ZWwgMSBleGl0IC9iIDENCisJZWNoby4NCisJZWNoby5CdWlsZCBmaW5pc2hlZDsg
bm93IHlvdSBjYW4gcHJvY2VzcyB0aGUgcGlja2xlIGZpbGVzLg0KKwlnb3RvIGVuZA0KKykNCisN
CitpZiAiJTEiID09ICJqc29uIiAoDQorCSVTUEhJTlhCVUlMRCUgLWIganNvbiAlQUxMU1BISU5Y
T1BUUyUgJUJVSUxERElSJS9qc29uDQorCWlmIGVycm9ybGV2ZWwgMSBleGl0IC9iIDENCisJZWNo
by4NCisJZWNoby5CdWlsZCBmaW5pc2hlZDsgbm93IHlvdSBjYW4gcHJvY2VzcyB0aGUgSlNPTiBm
aWxlcy4NCisJZ290byBlbmQNCispDQorDQoraWYgIiUxIiA9PSAiaHRtbGhlbHAiICgNCisJJVNQ
SElOWEJVSUxEJSAtYiBodG1saGVscCAlQUxMU1BISU5YT1BUUyUgJUJVSUxERElSJS9odG1saGVs
cA0KKwlpZiBlcnJvcmxldmVsIDEgZXhpdCAvYiAxDQorCWVjaG8uDQorCWVjaG8uQnVpbGQgZmlu
aXNoZWQ7IG5vdyB5b3UgY2FuIHJ1biBIVE1MIEhlbHAgV29ya3Nob3Agd2l0aCB0aGUgXg0KKy5o
aHAgcHJvamVjdCBmaWxlIGluICVCVUlMRERJUiUvaHRtbGhlbHAuDQorCWdvdG8gZW5kDQorKQ0K
Kw0KK2lmICIlMSIgPT0gInF0aGVscCIgKA0KKwklU1BISU5YQlVJTEQlIC1iIHF0aGVscCAlQUxM
U1BISU5YT1BUUyUgJUJVSUxERElSJS9xdGhlbHANCisJaWYgZXJyb3JsZXZlbCAxIGV4aXQgL2Ig
MQ0KKwllY2hvLg0KKwllY2hvLkJ1aWxkIGZpbmlzaGVkOyBub3cgeW91IGNhbiBydW4gInFjb2xs
ZWN0aW9uZ2VuZXJhdG9yIiB3aXRoIHRoZSBeDQorLnFoY3AgcHJvamVjdCBmaWxlIGluICVCVUlM
RERJUiUvcXRoZWxwLCBsaWtlIHRoaXM6DQorCWVjaG8uXj4gcWNvbGxlY3Rpb25nZW5lcmF0b3Ig
JUJVSUxERElSJVxxdGhlbHBcd3B0cnVubmVyLnFoY3ANCisJZWNoby5UbyB2aWV3IHRoZSBoZWxw
IGZpbGU6DQorCWVjaG8uXj4gYXNzaXN0YW50IC1jb2xsZWN0aW9uRmlsZSAlQlVJTERESVIlXHF0
aGVscFx3cHRydW5uZXIuZ2hjDQorCWdvdG8gZW5kDQorKQ0KKw0KK2lmICIlMSIgPT0gImRldmhl
bHAiICgNCisJJVNQSElOWEJVSUxEJSAtYiBkZXZoZWxwICVBTExTUEhJTlhPUFRTJSAlQlVJTERE
SVIlL2RldmhlbHANCisJaWYgZXJyb3JsZXZlbCAxIGV4aXQgL2IgMQ0KKwllY2hvLg0KKwllY2hv
LkJ1aWxkIGZpbmlzaGVkLg0KKwlnb3RvIGVuZA0KKykNCisNCitpZiAiJTEiID09ICJlcHViIiAo
DQorCSVTUEhJTlhCVUlMRCUgLWIgZXB1YiAlQUxMU1BISU5YT1BUUyUgJUJVSUxERElSJS9lcHVi
DQorCWlmIGVycm9ybGV2ZWwgMSBleGl0IC9iIDENCisJZWNoby4NCisJZWNoby5CdWlsZCBmaW5p
c2hlZC4gVGhlIGVwdWIgZmlsZSBpcyBpbiAlQlVJTERESVIlL2VwdWIuDQorCWdvdG8gZW5kDQor
KQ0KKw0KK2lmICIlMSIgPT0gImxhdGV4IiAoDQorCSVTUEhJTlhCVUlMRCUgLWIgbGF0ZXggJUFM
TFNQSElOWE9QVFMlICVCVUlMRERJUiUvbGF0ZXgNCisJaWYgZXJyb3JsZXZlbCAxIGV4aXQgL2Ig
MQ0KKwllY2hvLg0KKwllY2hvLkJ1aWxkIGZpbmlzaGVkOyB0aGUgTGFUZVggZmlsZXMgYXJlIGlu
ICVCVUlMRERJUiUvbGF0ZXguDQorCWdvdG8gZW5kDQorKQ0KKw0KK2lmICIlMSIgPT0gImxhdGV4
cGRmIiAoDQorCSVTUEhJTlhCVUlMRCUgLWIgbGF0ZXggJUFMTFNQSElOWE9QVFMlICVCVUlMRERJ
UiUvbGF0ZXgNCisJY2QgJUJVSUxERElSJS9sYXRleA0KKwltYWtlIGFsbC1wZGYNCisJY2QgJUJV
SUxERElSJS8uLg0KKwllY2hvLg0KKwllY2hvLkJ1aWxkIGZpbmlzaGVkOyB0aGUgUERGIGZpbGVz
IGFyZSBpbiAlQlVJTERESVIlL2xhdGV4Lg0KKwlnb3RvIGVuZA0KKykNCisNCitpZiAiJTEiID09
ICJsYXRleHBkZmphIiAoDQorCSVTUEhJTlhCVUlMRCUgLWIgbGF0ZXggJUFMTFNQSElOWE9QVFMl
ICVCVUlMRERJUiUvbGF0ZXgNCisJY2QgJUJVSUxERElSJS9sYXRleA0KKwltYWtlIGFsbC1wZGYt
amENCisJY2QgJUJVSUxERElSJS8uLg0KKwllY2hvLg0KKwllY2hvLkJ1aWxkIGZpbmlzaGVkOyB0
aGUgUERGIGZpbGVzIGFyZSBpbiAlQlVJTERESVIlL2xhdGV4Lg0KKwlnb3RvIGVuZA0KKykNCisN
CitpZiAiJTEiID09ICJ0ZXh0IiAoDQorCSVTUEhJTlhCVUlMRCUgLWIgdGV4dCAlQUxMU1BISU5Y
T1BUUyUgJUJVSUxERElSJS90ZXh0DQorCWlmIGVycm9ybGV2ZWwgMSBleGl0IC9iIDENCisJZWNo
by4NCisJZWNoby5CdWlsZCBmaW5pc2hlZC4gVGhlIHRleHQgZmlsZXMgYXJlIGluICVCVUlMRERJ
UiUvdGV4dC4NCisJZ290byBlbmQNCispDQorDQoraWYgIiUxIiA9PSAibWFuIiAoDQorCSVTUEhJ
TlhCVUlMRCUgLWIgbWFuICVBTExTUEhJTlhPUFRTJSAlQlVJTERESVIlL21hbg0KKwlpZiBlcnJv
cmxldmVsIDEgZXhpdCAvYiAxDQorCWVjaG8uDQorCWVjaG8uQnVpbGQgZmluaXNoZWQuIFRoZSBt
YW51YWwgcGFnZXMgYXJlIGluICVCVUlMRERJUiUvbWFuLg0KKwlnb3RvIGVuZA0KKykNCisNCitp
ZiAiJTEiID09ICJ0ZXhpbmZvIiAoDQorCSVTUEhJTlhCVUlMRCUgLWIgdGV4aW5mbyAlQUxMU1BI
SU5YT1BUUyUgJUJVSUxERElSJS90ZXhpbmZvDQorCWlmIGVycm9ybGV2ZWwgMSBleGl0IC9iIDEN
CisJZWNoby4NCisJZWNoby5CdWlsZCBmaW5pc2hlZC4gVGhlIFRleGluZm8gZmlsZXMgYXJlIGlu
ICVCVUlMRERJUiUvdGV4aW5mby4NCisJZ290byBlbmQNCispDQorDQoraWYgIiUxIiA9PSAiZ2V0
dGV4dCIgKA0KKwklU1BISU5YQlVJTEQlIC1iIGdldHRleHQgJUkxOE5TUEhJTlhPUFRTJSAlQlVJ
TERESVIlL2xvY2FsZQ0KKwlpZiBlcnJvcmxldmVsIDEgZXhpdCAvYiAxDQorCWVjaG8uDQorCWVj
aG8uQnVpbGQgZmluaXNoZWQuIFRoZSBtZXNzYWdlIGNhdGFsb2dzIGFyZSBpbiAlQlVJTERESVIl
L2xvY2FsZS4NCisJZ290byBlbmQNCispDQorDQoraWYgIiUxIiA9PSAiY2hhbmdlcyIgKA0KKwkl
U1BISU5YQlVJTEQlIC1iIGNoYW5nZXMgJUFMTFNQSElOWE9QVFMlICVCVUlMRERJUiUvY2hhbmdl
cw0KKwlpZiBlcnJvcmxldmVsIDEgZXhpdCAvYiAxDQorCWVjaG8uDQorCWVjaG8uVGhlIG92ZXJ2
aWV3IGZpbGUgaXMgaW4gJUJVSUxERElSJS9jaGFuZ2VzLg0KKwlnb3RvIGVuZA0KKykNCisNCitp
ZiAiJTEiID09ICJsaW5rY2hlY2siICgNCisJJVNQSElOWEJVSUxEJSAtYiBsaW5rY2hlY2sgJUFM
TFNQSElOWE9QVFMlICVCVUlMRERJUiUvbGlua2NoZWNrDQorCWlmIGVycm9ybGV2ZWwgMSBleGl0
IC9iIDENCisJZWNoby4NCisJZWNoby5MaW5rIGNoZWNrIGNvbXBsZXRlOyBsb29rIGZvciBhbnkg
ZXJyb3JzIGluIHRoZSBhYm92ZSBvdXRwdXQgXg0KK29yIGluICVCVUlMRERJUiUvbGlua2NoZWNr
L291dHB1dC50eHQuDQorCWdvdG8gZW5kDQorKQ0KKw0KK2lmICIlMSIgPT0gImRvY3Rlc3QiICgN
CisJJVNQSElOWEJVSUxEJSAtYiBkb2N0ZXN0ICVBTExTUEhJTlhPUFRTJSAlQlVJTERESVIlL2Rv
Y3Rlc3QNCisJaWYgZXJyb3JsZXZlbCAxIGV4aXQgL2IgMQ0KKwllY2hvLg0KKwllY2hvLlRlc3Rp
bmcgb2YgZG9jdGVzdHMgaW4gdGhlIHNvdXJjZXMgZmluaXNoZWQsIGxvb2sgYXQgdGhlIF4NCity
ZXN1bHRzIGluICVCVUlMRERJUiUvZG9jdGVzdC9vdXRwdXQudHh0Lg0KKwlnb3RvIGVuZA0KKykN
CisNCitpZiAiJTEiID09ICJ4bWwiICgNCisJJVNQSElOWEJVSUxEJSAtYiB4bWwgJUFMTFNQSElO
WE9QVFMlICVCVUlMRERJUiUveG1sDQorCWlmIGVycm9ybGV2ZWwgMSBleGl0IC9iIDENCisJZWNo
by4NCisJZWNoby5CdWlsZCBmaW5pc2hlZC4gVGhlIFhNTCBmaWxlcyBhcmUgaW4gJUJVSUxERElS
JS94bWwuDQorCWdvdG8gZW5kDQorKQ0KKw0KK2lmICIlMSIgPT0gInBzZXVkb3htbCIgKA0KKwkl
U1BISU5YQlVJTEQlIC1iIHBzZXVkb3htbCAlQUxMU1BISU5YT1BUUyUgJUJVSUxERElSJS9wc2V1
ZG94bWwNCisJaWYgZXJyb3JsZXZlbCAxIGV4aXQgL2IgMQ0KKwllY2hvLg0KKwllY2hvLkJ1aWxk
IGZpbmlzaGVkLiBUaGUgcHNldWRvLVhNTCBmaWxlcyBhcmUgaW4gJUJVSUxERElSJS9wc2V1ZG94
bWwuDQorCWdvdG8gZW5kDQorKQ0KKw0KKzplbmQNCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0
cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL2RvY3MvdXNhZ2UucnN0IGIvV2ViRHJpdmVy
VGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci9kb2NzL3VzYWdlLnJzdApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOGU3NGE0MzIwYzgKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL2RvY3Mv
dXNhZ2UucnN0CkBAIC0wLDAgKzEsMjM4IEBACitHZXR0aW5nIFN0YXJ0ZWQKKz09PT09PT09PT09
PT09PQorCitJbnN0YWxsaW5nIHdwdHJ1bm5lcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhl
IGVhc2llc3Qgd2F5IHRvIGluc3RhbGwgd3B0cnVubmVyIGlzIGludG8gYSB2aXJ0dWFsZW52LCB1
c2luZyBwaXA6OgorCisgIHZpcnR1YWxlbnYgd3B0cnVubmVyCisgIGNkIHdwdHJ1bm5lcgorICBz
b3VyY2UgYmluL2FjdGl2YXRlCisgIHBpcCBpbnN0YWxsIHdwdHJ1bm5lcgorCitUaGlzIHdpbGwg
aW5zdGFsbCB0aGUgYmFzZSBkZXBlbmRlbmNpZXMgZm9yIHdwdHJ1bm5lciwgYnV0IG5vdCBhbnkK
K2V4dHJhIGRlcGVuZGVuY2llcyByZXF1aXJlZCB0byB0ZXN0IGFnYWluc3Qgc3BlY2lmaWMgYnJv
d3NlcnMuIEluCitvcmRlciB0byBkbyB0aGlzIHlvdSBtdXN0IHVzZSB1c2UgdGhlIGV4dHJhIHJl
cXVpcmVtZW50cyBmaWxlcyBpbgorYGAkVklSVFVBTF9FTlYvcmVxdWlyZW1lbnRzL3JlcXVpcmVt
ZW50c19icm93c2VyLnR4dGBgLiBGb3IgZXhhbXBsZSwKK2luIG9yZGVyIHRvIHRlc3QgYWdhaW5z
dCBGaXJlZm94IHlvdSB3b3VsZCBoYXZlIHRvIHJ1bjo6CisKKyAgcGlwIGluc3RhbGwgLXIgcmVx
dWlyZW1lbnRzL3JlcXVpcmVtZW50c19maXJlZm94LnR4dAorCitJZiB5b3UgaW50ZW5kIHRvIHdv
cmsgb24gdGhlIGNvZGUsIHRoZSBgYC1lYGAgb3B0aW9uIHRvIHBpcCBzaG91bGQgYmUKK3VzZWQg
aW4gY29tYmluYXRpb24gd2l0aCBhIHNvdXJjZSBjaGVja291dCBpLmUuIGluc2lkZSBhIHZpcnR1
YWwKK2Vudmlyb25tZW50IGNyZWF0ZWQgYXMgYWJvdmU6OgorCisgIGdpdCBjbG9uZSBodHRwczov
L2dpdGh1Yi5jb20vdzNjL3dwdHJ1bm5lci5naXQKKyAgY2Qgd3B0cnVubmVyCisgIHBpcCBpbnN0
YWxsIC1lIC4vCisKK0luIGFkZGl0aW9uIHRvIHRoZSBkZXBlbmRlbmNpZXMgaW5zdGFsbGVkIGJ5
IHBpcCwgd3B0cnVubmVyIHJlcXVpcmVzCithIGNvcHkgb2YgdGhlIHdlYi1wbGF0Zm9ybS10ZXN0
cyByZXBvc2l0b3J5LiBUaGlzIGNhbiBiZSBsb2NhdGVkCithbnl3aGVyZSBvbiB0aGUgZmlsZXN5
c3RlbSwgYnV0IHRoZSBlYXNpZXN0IG9wdGlvbiBpcyB0byBwdXQgaXQKK3VuZGVyIHRoZSBzYW1l
IHBhcmVudCBkaXJlY3RvcnkgYXMgdGhlIHdwdHJ1bm5lciBjaGVja291dDo6CisKKyAgZ2l0IGNs
b25lIGh0dHBzOi8vZ2l0aHViLmNvbS93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzLmdpdAorCitJdCBp
cyBhbHNvIG5lY2Vzc2FyeSB0byBnZW5lcmF0ZSBhIHdlYi1wbGF0Zm9ybS10ZXN0cyBgYE1BTklG
RVNULmpzb25gYAorZmlsZS4gSXQncyByZWNvbW1lbmRlZCB0byBhbHNvIHB1dCB0aGF0IHVuZGVy
IHRoZSBzYW1lIHBhcmVudCBkaXJlY3RvcnkgYXMKK3RoZSB3cHRydW5uZXIgY2hlY2tvdXQsIGlu
IGEgZGlyZWN0b3J5IG5hbWVkIGBgbWV0YWBgOjoKKworICBta2RpciBtZXRhCisgIGNkIHdlYi1w
bGF0Zm9ybS10ZXN0cworICBweXRob24gbWFuaWZlc3QgLS1wYXRoIC4uL21ldGEvTUFOSUZFU1Qu
anNvbgorCitUaGUgYGBNQU5JRkVTVC5qc29uYGAgZmlsZSBuZWVkcyB0byBiZSByZWdlbmVyYXRl
ZCBlYWNoIHRpbWUgdGhlCit3ZWItcGxhdGZvcm0tdGVzdHMgY2hlY2tvdXQgaXMgdXBkYXRlZC4g
VG8gYWlkIHdpdGggdGhlIHVwZGF0ZSBwcm9jZXNzCit0aGVyZSBpcyBhIHRvb2wgY2FsbGVkIGBg
d3B0dXBkYXRlYGAsIHdoaWNoIGlzIGRlc2NyaWJlZCBpbgorOnJlZjpgd3B0dXBkYXRlLWxhYmVs
YC4KKworUnVubmluZyB0aGUgVGVzdHMKKy0tLS0tLS0tLS0tLS0tLS0tCisKK0EgdGVzdCBydW4g
aXMgc3RhcnRlZCB1c2luZyB0aGUgYGB3cHRydW5uZXJgYCBjb21tYW5kLiAgVGhlIGNvbW1hbmQK
K3Rha2VzIG11bHRpcGxlIG9wdGlvbnMsIG9mIHdoaWNoIHRoZSBmb2xsb3dpbmcgYXJlIG1vc3Qg
c2lnbmlmaWNhbnQ6CisKK2BgLS1wcm9kdWN0YGAgKGRlZmF1bHRzIHRvIGBmaXJlZm94YCkKKyAg
VGhlIHByb2R1Y3QgdG8gdGVzdCBhZ2FpbnN0OiBgYjJnYCwgYGNocm9tZWAsIGBmaXJlZm94YCwg
b3IgYHNlcnZvYC4KKworYGAtLWJpbmFyeWBgIChyZXF1aXJlZCBpZiBwcm9kdWN0IGlzIGBmaXJl
Zm94YCBvciBgc2Vydm9gKQorICBUaGUgcGF0aCB0byBhIGJpbmFyeSBmaWxlIGZvciB0aGUgcHJv
ZHVjdCAoYnJvd3NlcikgdG8gdGVzdCBhZ2FpbnN0LgorCitgYC0td2ViZHJpdmVyLWJpbmFyeWBg
IChyZXF1aXJlZCBpZiBwcm9kdWN0IGlzIGBjaHJvbWVgKQorICBUaGUgcGF0aCB0byBhIGAqZHJp
dmVyYCBiaW5hcnk7IGUuZy4sIGEgYGNocm9tZWRyaXZlcmAgYmluYXJ5LgorCitgYC0tY2VydHV0
aWwtYmluYXJ5YGAgKHJlcXVpcmVkIGlmIHByb2R1Y3QgaXMgYGZpcmVmb3hgIFsjXV8pCisgIFRo
ZSBwYXRoIHRvIGEgYGNlcnR1dGlsYCBiaW5hcnkgKGZvciB0ZXN0cyB0aGF0IG11c3QgYmUgcnVu
IG92ZXIgaHR0cHMpLgorCitgYC0tbWV0YWRhdGFgYCAocmVxdWlyZWQgb25seSB3aGVuIG5vdCBg
dXNpbmcgZGVmYXVsdCBwYXRoc2BfKQorICBUaGUgcGF0aCB0byBhIGRpcmVjdG9yeSBjb250YWlu
aW5nIHRlc3QgbWV0YWRhdGEuIFsjXV8KKworYGAtLXRlc3RzYGAgKHJlcXVpcmVkIG9ubHkgd2hl
biBub3QgYHVzaW5nIGRlZmF1bHQgcGF0aHNgXykKKyAgVGhlIHBhdGggdG8gYSBkaXJlY3Rvcnkg
Y29udGFpbmluZyBhIHdlYi1wbGF0Zm9ybS10ZXN0cyBjaGVja291dC4KKworYGAtLXByZWZzLXJv
b3RgYCAocmVxdWlyZWQgb25seSB3aGVuIHRlc3RpbmcgYSBGaXJlZm94IGJpbmFyeSkKKyAgVGhl
IHBhdGggdG8gYSBkaXJlY3RvcnkgY29udGFpbmluZyBGaXJlZm94IHRlc3QtaGFybmVzcyBwcmVm
ZXJlbmNlcy4gWyNdXworCitgYC0tY29uZmlnYGAgKHNob3VsZCBkZWZhdWx0IHRvIGB3cHRydW5u
ZXIuZGVmYXVsdC5pbmlgKQorICBUaGUgcGF0aCB0byB0aGUgY29uZmlnIChpbmkpIGZpbGUuCisK
Ky4uIFsjXSBUaGUgYGAtLWNlcnR1dGlsLWJpbmFyeWBgIG9wdGlvbiBpcyByZXF1aXJlZCB3aGVu
IHRoZSBwcm9kdWN0IGlzCisgICBgYGZpcmVmb3hgYCB1bmxlc3MgYGAtLXNzbC10eXBlPW5vbmVg
YCBpcyBzcGVjaWZpZWQuCisKKy4uIFsjXSBUaGUgYGAtLW1ldGFkYXRhYGAgcGF0aCBpcyB0byBh
IGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zOgorCisgICogYSBgYE1BTklGRVNULmpzb25gYCBmaWxl
ICh0aGUgd2ViLXBsYXRmb3JtLXRlc3RzIGRvY3VtZW50YXRpb24gaGFzCisgICAgaW5zdHJ1Y3Rp
b25zIG9uIGdlbmVyYXRpbmcgdGhpcyBmaWxlKQorICAqIChvcHRpb25hbGx5KSBhbnkgZXhwZWN0
YXRpb24gZmlsZXMgKHNlZSA6cmVmOmB3cHR1cGRhdGUtbGFiZWxgKQorCisuLiBbI10gRXhhbXBs
ZSBgYC0tcHJlZnMtcm9vdGBgIHZhbHVlOiBgYH4vbW96aWxsYS1jZW50cmFsL3Rlc3RpbmcvcHJv
ZmlsZXNgYC4KKworVGhlcmUgYXJlIGFsc28gYSB2YXJpZXR5IG9mIG90aGVyIGNvbW1hbmQtbGlu
ZSBvcHRpb25zIGF2YWlsYWJsZTsgdXNlCitgYC0taGVscGBgIHRvIGxpc3QgdGhlbS4KKworVGhl
IGZvbGxvd2luZyBleGFtcGxlcyBzaG93IGhvdyB0byBzdGFydCB3cHRydW5uZXIgd2l0aCB2YXJp
b3VzIG9wdGlvbnMuCisKKy0tLS0tLS0tLS0tLS0tLS0tLQorU3RhcnRpbmcgd3B0cnVubmVyCist
LS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGV4YW1wbGVzIGJlbG93IGFzc3VtZSB0aGUgZm9sbG93
aW5nIGRpcmVjdG9yeSBsYXlvdXQsCit0aG91Z2ggbm8gc3BlY2lmaWMgZm9sZGVyIHN0cnVjdHVy
ZSBpcyByZXF1aXJlZDo6CisKKyAgfi90ZXN0dHdmL3dwdHJ1bm5lciAgICAgICAgICAjIHdwdHJ1
bm5lciBjaGVja291dAorICB+L3Rlc3R0d2Yvd2ViLXBsYXRmb3JtLXRlc3RzICMgd2ViLXBsYXRm
b3JtLXRlc3RzIGNoZWNrb3V0CisgIH4vdGVzdHR3Zi9tZXRhICAgICAgICAgICAgICAgIyBtZXRh
ZGF0YQorCitUbyB0ZXN0IGEgRmlyZWZveCBOaWdodGx5IGJ1aWxkIGluIGFuIE9TIFggZW52aXJv
bm1lbnQsIHlvdSBtaWdodCBzdGFydAord3B0cnVubmVyIHVzaW5nIHNvbWV0aGluZyBzaW1pbGFy
IHRvIHRoZSBmb2xsb3dpbmcgZXhhbXBsZTo6CisKKyAgd3B0cnVubmVyIC0tbWV0YWRhdGE9fi90
ZXN0dHdmL21ldGEvIC0tdGVzdHM9fi90ZXN0dHdmL3dlYi1wbGF0Zm9ybS10ZXN0cy8gXAorICAg
IC0tYmluYXJ5PX4vbW96aWxsYS1jZW50cmFsL29iai14ODZfNjQtYXBwbGUtZGFyd2luMTQuMy4w
L2Rpc3QvTmlnaHRseS5hcHAvQ29udGVudHMvTWFjT1MvZmlyZWZveCBcCisgICAgLS1jZXJ0dXRp
bC1iaW5hcnk9fi9tb3ppbGxhLWNlbnRyYWwvb2JqLXg4Nl82NC1hcHBsZS1kYXJ3aW4xNC4zLjAv
c2VjdXJpdHkvbnNzL2NtZC9jZXJ0dXRpbC9jZXJ0dXRpbCBcCisgICAgLS1wcmVmcy1yb290PX4v
bW96aWxsYS1jZW50cmFsL3Rlc3RpbmcvcHJvZmlsZXMKKworCitBbmQgdG8gdGVzdCBhIENocm9t
aXVtIGJ1aWxkIGluIGFuIE9TIFggZW52aXJvbm1lbnQsIHlvdSBtaWdodCBzdGFydAord3B0cnVu
bmVyIHVzaW5nIHNvbWV0aGluZyBzaW1pbGFyIHRvIHRoZSBmb2xsb3dpbmcgZXhhbXBsZTo6CisK
KyAgd3B0cnVubmVyIC0tbWV0YWRhdGE9fi90ZXN0dHdmL21ldGEvIC0tdGVzdHM9fi90ZXN0dHdm
L3dlYi1wbGF0Zm9ybS10ZXN0cy8gXAorICAgIC0tYmluYXJ5PX4vY2hyb21pdW0vc3JjL291dC9S
ZWxlYXNlL0Nocm9taXVtLmFwcC9Db250ZW50cy9NYWNPUy9DaHJvbWl1bSBcCisgICAgLS13ZWJk
cml2ZXItYmluYXJ5PS91c3IvbG9jYWwvYmluL2Nocm9tZWRyaXZlciAtLXByb2R1Y3Q9Y2hyb21l
CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCitSdW5uaW5nIHRlc3Qgc3Vic2V0cworLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworVG8gcmVzdHJpY3QgYSB0ZXN0IHJ1biBqdXN0IHRvIHRlc3RzIGluIGEg
cGFydGljdWxhciB3ZWItcGxhdGZvcm0tdGVzdHMKK3N1YmRpcmVjdG9yeSwgc3BlY2lmeSB0aGUg
ZGlyZWN0b3J5IG5hbWUgaW4gdGhlIHBvc2l0aW9uYWwgYXJndW1lbnRzIGFmdGVyCit0aGUgb3B0
aW9uczsgZm9yIGV4YW1wbGUsIHJ1biBqdXN0IHRoZSB0ZXN0cyBpbiB0aGUgYGRvbWAgc3ViZGly
ZWN0b3J5OjoKKworICB3cHRydW5uZXIgLS1tZXRhZGF0YT1+L3Rlc3R0d2YvbWV0YSAtLXRlc3Rz
PX4vdGVzdHR3Zi93ZWItcGxhdGZvcm0tdGVzdHMvIFwKKyAgICAtLWJpbmFyeT0vcGF0aC90by9m
aXJlZm94IC0tY2VydHV0aWwtYmluYXJ5PS9wYXRoL3RvL2NlcnR1dGlsIFwKKyAgICAtLXByZWZz
LXJvb3Q9L3BhdGgvdG8vdGVzdGluZy9wcm9maWxlcyBcCisgICAgZG9tCisKKy0tLS0tLS0tLS0t
LS0tLS0tLS0KK1J1bm5pbmcgaW4gcGFyYWxsZWwKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVG8g
c3BlZWQgdXAgdGhlIHRlc3RpbmcgcHJvY2VzcywgdXNlIHRoZSBgYC0tcHJvY2Vzc2VzYGAgb3B0
aW9uIHRvIGhhdmUKK3dwdHJ1bm5lciBydW4gbXVsdGlwbGUgYnJvd3NlciBpbnN0YW5jZXMgaW4g
cGFyYWxsZWwuIEZvciBleGFtcGxlLCB0bworaGF2ZSB3cHRydW5uZXIgYXR0ZW1wdCB0byBydW4g
dGVzdHMgYWdhaW5zdCB3aXRoIHNpeCBicm93c2VyIGluc3RhbmNlcworaW4gcGFyYWxsZWwsIHNw
ZWNpZnkgYGAtLXByb2Nlc3Nlcz02YGAuIEJ1dCBub3RlIHRoYXQgYmVoYXZpb3VyIGluIHRoaXMK
K21vZGUgaXMgbmVjZXNzYXJpbHkgbGVzcyBkZXRlcm1pbmlzdGljIHRoYW4gd2l0aCBgYC0tcHJv
Y2Vzc2VzPTFgYCAodGhlCitkZWZhdWx0KSwgc28gdGhlcmUgbWF5IGJlIG1vcmUgbm9pc2UgaW4g
dGhlIHRlc3QgcmVzdWx0cy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLQorVXNpbmcgZGVmYXVsdCBw
YXRocworLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgKG90aGVyd2lzZS1yZXF1aXJlZCkgYGAt
LXRlc3RzYGAgYW5kIGBgLS1tZXRhZGF0YWBgIGNvbW1hbmQtbGluZQorb3B0aW9ucy9mbGFncyBi
ZSBvbWl0dGVkIGlmIGFueSBjb25maWd1cmF0aW9uIGZpbGUgaXMgZm91bmQgdGhhdAorY29udGFp
bnMgYSBzZWN0aW9uIHNwZWNpZnlpbmcgdGhlIGBgdGVzdHNgYCBhbmQgYGBtZXRhZGF0YWBgIGtl
eXMuCisKK1NlZSB0aGUgYENvbmZpZ3VyYXRpb24gRmlsZWBfIHNlY3Rpb24gZm9yIG1vcmUgaW5m
b3JtYXRpb24gYWJvdXQKK2NvbmZpZ3VyYXRpb24gZmlsZXMsIGluY2x1ZGluZyBpbmZvcm1hdGlv
biBhYm91dCB0aGVpciBleHBlY3RlZAorbG9jYXRpb25zLgorCitUaGUgY29udGVudCBvZiB0aGUg
YGB3cHRydW5uZXIuZGVmYXVsdC5pbmlgYCBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZmlsZQorbWFr
ZXMgd3B0cnVubmVyIGxvb2sgZm9yIHRlc3RzICh0aGF0IGlzLCBhIHdlYi1wbGF0Zm9ybS10ZXN0
cyBjaGVja291dCkKK2FzIGEgc3ViZGlyZWN0b3J5IG9mIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBu
YW1lZCBgYHRlc3RzYGAsIGFuZCBmb3IKK21ldGFkYXRhIGZpbGVzIGluIGEgc3ViZGlyZWN0b3J5
IG9mIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBuYW1lZCBgYG1ldGFgYC4KKworT3V0cHV0CistLS0t
LS0KKword3B0cnVubmVyIHVzZXMgdGhlIDpweTptb2Q6YG1vemxvZ2AgcGFja2FnZSBmb3Igb3V0
cHV0LiBUaGlzCitzdHJ1Y3R1cmVzIGV2ZW50cyBzdWNoIGFzIHRlc3QgcmVzdWx0cyBvciBsb2cg
bWVzc2FnZXMgYXMgSlNPTiBvYmplY3RzCit0aGF0IGNhbiB0aGVuIGJlIGZlZCB0byBvdGhlciB0
b29scyBmb3IgaW50ZXJwcmV0YXRpb24uIE1vcmUgZGV0YWlscworYWJvdXQgdGhlIG1lc3NhZ2Ug
Zm9ybWF0IGFyZSBnaXZlbiBpbiB0aGUKKzpweTptb2Q6YG1vemxvZ2AgZG9jdW1lbnRhdGlvbi4K
KworQnkgZGVmYXVsdCB0aGUgcmF3IEpTT04gbWVzc2FnZXMgYXJlIGR1bXBlZCB0byBzdGRvdXQu
IFRoaXMgaXMKK2NvbnZlbmllbnQgZm9yIHBpcGluZyBpbnRvIG90aGVyIHRvb2xzLCBidXQgbm90
IGlkZWFsIGZvciBodW1hbnMKK3JlYWRpbmcgdGhlIG91dHB1dC4gOnB5Om1vZDpgbW96bG9nYCBj
b21lcyB3aXRoIHNldmVyYWwgb3RoZXIKK2Zvcm1hdHRlcnMsIHdoaWNoIGFyZSBhY2Nlc3NpYmxl
IHRocm91Z2ggY29tbWFuZCBsaW5lIG9wdGlvbnMuIFRoZQorZ2VuZXJhbCBmb3JtYXQgb2YgdGhl
c2Ugb3B0aW9ucyBpcyBgYC0tbG9nLW5hbWU9ZGVzdGBgLCB3aGVyZSBgYG5hbWVgYAoraXMgdGhl
IG5hbWUgb2YgdGhlIGZvcm1hdCBhbmQgYGBkZXN0YGAgaXMgYSBwYXRoIHRvIGEgZGVzdGluYXRp
b24KK2ZpbGUsIG9yIGBgLWBgIGZvciBzdGRvdXQuIFRoZSByYXcgSlNPTiBkYXRhIGlzIHdyaXR0
ZW4gYnkgdGhlIGBgcmF3YGAKK2Zvcm1hdHRlciBzbywgdGhlIGRlZmF1bHQgc2V0dXAgY29ycmVz
cG9uZHMgdG8gYGAtLWxvZy1yYXc9LWBgLgorCitBIHJlYXNvbmFibGUgb3V0cHV0IGZvcm1hdCBm
b3IgaHVtYW5zIGlzIHByb3ZpZGVkIGFzIGBgbWFjaGBgLiBTbyBpbgorb3JkZXIgdG8gb3V0cHV0
IHRoZSBmdWxsIHJhdyBsb2cgdG8gYSBmaWxlIGFuZCBhIGh1bWFuLXJlYWRhYmxlCitzdW1tYXJ5
IHRvIHN0ZG91dCwgb25lIG1pZ2h0IHBhc3MgdGhlIG9wdGlvbnM6OgorCisgIC0tbG9nLXJhdz1v
dXRwdXQubG9nIC0tbG9nLW1hY2g9LQorCitDb25maWd1cmF0aW9uIEZpbGUKKy0tLS0tLS0tLS0t
LS0tLS0tLQorCit3cHRydW5uZXIgdXNlcyBhIGBgLmluaWBgIGZpbGUgdG8gY29udHJvbCBzb21l
IGNvbmZpZ3VyYXRpb24KK3NlY3Rpb25zLiBUaGUgZmlsZSBoYXMgdGhyZWUgc2VjdGlvbnM7IGBg
W3Byb2R1Y3RzXWBgLAorYGBbbWFuaWZlc3Q6ZGVmYXVsdF1gYCBhbmQgYGBbd2ViLXBsYXRmb3Jt
LXRlc3RzXWBgLgorCitgYFtwcm9kdWN0c11gYCBpcyB1c2VkIHRvCitkZWZpbmUgdGhlIHNldCBv
ZiBhdmFpbGFibGUgcHJvZHVjdHMuIEJ5IGRlZmF1bHQgdGhpcyBzZWN0aW9uIGlzIGVtcHR5Cit3
aGljaCBtZWFucyB0aGF0IGFsbCB0aGUgcHJvZHVjdHMgZGlzdHJpYnV0ZWQgd2l0aCB3cHRydW5u
ZXIgYXJlCitlbmFibGVkIChhbHRob3VnaCB0aGVpciBkZXBlbmRlbmNpZXMgbWF5IG5vdCBiZSBp
bnN0YWxsZWQpLiBUaGUgc2V0CitvZiBlbmFibGVkIHByb2R1Y3RzIGNhbiBiZSBzZXQgYnkgdXNp
bmcgdGhlIHByb2R1Y3QgbmFtZSBhcyB0aGUKK2tleS4gRm9yIGJ1aWx0IGluIHByb2R1Y3RzIHRo
ZSB2YWx1ZSBpcyBlbXB0eS4gSXQgaXMgYWxzbyBwb3NzaWJsZSB0bworcHJvdmlkZSB0aGUgcGF0
aCB0byBhIHNjcmlwdCBpbXBsZW1lbnRpbmcgdGhlIGJyb3dzZXIgZnVuY3Rpb25hbGl0eQorZS5n
Ljo6CisKKyAgW3Byb2R1Y3RzXQorICBjaHJvbWUgPQorICBuZXRzY2FwZTQgPSBwYXRoL3RvL25l
dHNjYXBlLnB5CisKK2BgW21hbmlmZXN0OmRlZmF1bHRdYGAgc3BlY2lmaWVzIHRoZSBkZWZhdWx0
IHBhdGhzIGZvciB0aGUgdGVzdHMgYW5kIG1ldGFkYXRhLAorcmVsYXRpdmUgdG8gdGhlIGNvbmZp
ZyBmaWxlLiBGb3IgZXhhbXBsZTo6CisKKyAgW21hbmlmZXN0OmRlZmF1bHRdCisgIHRlc3RzID0g
fi90ZXN0dHdmL3dlYi1wbGF0Zm9ybS10ZXN0cworICBtZXRhZGF0YSA9IH4vdGVzdHR3Zi9tZXRh
CisKKworYGBbd2ViLXBsYXRmb3JtLXRlc3RzXWBgIGlzIHVzZWQgdG8gc2V0IHRoZSBwcm9wZXJ0
aWVzIG9mIHRoZSB1cHN0cmVhbQorcmVwb3NpdG9yeSB3aGVuIHVwZGF0aW5nIHRoZSBwYXRocy4g
YGByZW1vdGVfdXJsYGAgc3BlY2lmaWVzIHRoZSBnaXQKK3VybCB0byBwdWxsIGZyb207IGBgYnJh
bmNoYGAgdGhlIGJyYW5jaCB0byBzeW5jIGFnYWluc3QgYW5kCitgYHN5bmNfcGF0aGBgIHRoZSBs
b2NhbCBwYXRoLCByZWxhdGl2ZSB0byB0aGUgY29uZmlndXJhdGlvbiBmaWxlLCB0bwordXNlIHdo
ZW4gY2hlY2tpbmcgb3V0IHRoZSB0ZXN0cyBlLmcuOjoKKworICBbd2ViLXBsYXRmb3JtLXRlc3Rz
XQorICByZW1vdGVfdXJsID0gaHR0cHM6Ly9naXRodWIuY29tL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMuZ2l0CisgIGJyYW5jaCA9IG1hc3RlcgorICBzeW5jX3BhdGggPSBzeW5jCisKK0EgY29uZmln
dXJhdGlvbiBmaWxlIG11c3QgY29udGFpbiBhbGwgdGhlIGFib3ZlIGZpZWxkczsgZmFsbGluZyBi
YWNrCit0byB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHVuc3BlY2lmaWVkIGZpZWxkcyBpcyBub3Qg
eWV0IHN1cHBvcnRlZC4KKworVGhlIGBgd3B0cnVubmVyYGAgYW5kIGBgd3B0dXBkYXRlYGAgY29t
bWFuZHMgd2lsbCB1c2UgY29uZmlndXJhdGlvbgorZmlsZXMgaW4gdGhlIGZvbGxvd2luZyBvcmRl
cjoKKworICogQW55IHBhdGggc3VwcGxpZWQgd2l0aCBhIGBgLS1jb25maWdgYCBmbGFnIHRvIHRo
ZSBjb21tYW5kLgorCisgKiBBIGZpbGUgY2FsbGVkIGBgd3B0cnVubmVyLmluaWBgIGluIHRoZSBj
dXJyZW50IGRpcmVjdG9yeQorCisgKiBUaGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZpbGUgKGBg
d3B0cnVubmVyLmRlZmF1bHQuaW5pYGAgaW4gdGhlCisgICBzb3VyY2UgZGlyZWN0b3J5KQpkaWZm
IC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci9yZXF1
aXJlbWVudHMudHh0IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5l
ci9yZXF1aXJlbWVudHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li5lOWQyYTM1MDgwYQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVk
L3czYy90b29scy93cHRydW5uZXIvcmVxdWlyZW1lbnRzLnR4dApAQCAtMCwwICsxLDQgQEAKK2h0
bWw1bGliID49IDAuOTkKK21vemluZm8gPj0gMC43Cittb3psb2cgPj0gMy41Cittb3pkZWJ1ZyA+
PSAwLjEKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRy
dW5uZXIvcmVxdWlyZW1lbnRzX2Nocm9tZS50eHQgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93
M2MvdG9vbHMvd3B0cnVubmVyL3JlcXVpcmVtZW50c19jaHJvbWUudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hMmY1NDQyNWYzZQotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvcmVxdWlyZW1lbnRz
X2Nocm9tZS50eHQKQEAgLTAsMCArMSwyIEBACittb3pwcm9jZXNzID49IDAuMTkKK3NlbGVuaXVt
ID49IDIuNDEuMApkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xz
L3dwdHJ1bm5lci9yZXF1aXJlbWVudHNfZWRnZS50eHQgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRl
ZC93M2MvdG9vbHMvd3B0cnVubmVyL3JlcXVpcmVtZW50c19lZGdlLnR4dApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYTJmNTQ0MjVmM2UKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3JlcXVpcmVtZW50
c19lZGdlLnR4dApAQCAtMCwwICsxLDIgQEAKK21venByb2Nlc3MgPj0gMC4xOQorc2VsZW5pdW0g
Pj0gMi40MS4wCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMv
d3B0cnVubmVyL3JlcXVpcmVtZW50c19maXJlZm94LnR4dCBiL1dlYkRyaXZlclRlc3RzL2ltcG9y
dGVkL3czYy90b29scy93cHRydW5uZXIvcmVxdWlyZW1lbnRzX2ZpcmVmb3gudHh0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kOGQyNjhmMTI3YgotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvcmVxdWly
ZW1lbnRzX2ZpcmVmb3gudHh0CkBAIC0wLDAgKzEsNiBAQAorbWFyaW9uZXR0ZV9kcml2ZXIgPj0g
MC40Cittb3pwcm9maWxlID49IDAuMjEKK21venByb2Nlc3MgPj0gMC4xOQorbW96Y3Jhc2ggPj0g
MC4xMworbW96cnVubmVyID49IDYuNworbW96bGVhayA+PSAwLjEKZGlmZiAtLWdpdCBhL1dlYkRy
aXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvcmVxdWlyZW1lbnRzX2llLnR4
dCBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvcmVxdWlyZW1l
bnRzX2llLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYTJmNTQ0
MjVmM2UKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9v
bHMvd3B0cnVubmVyL3JlcXVpcmVtZW50c19pZS50eHQKQEAgLTAsMCArMSwyIEBACittb3pwcm9j
ZXNzID49IDAuMTkKK3NlbGVuaXVtID49IDIuNDEuMApkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVz
dHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci9yZXF1aXJlbWVudHNfc2F1Y2UudHh0IGIv
V2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci9yZXF1aXJlbWVudHNf
c2F1Y2UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43YjgyOGY4
NGIwOAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29s
cy93cHRydW5uZXIvcmVxdWlyZW1lbnRzX3NhdWNlLnR4dApAQCAtMCwwICsxLDIgQEAKK21venBy
b2Nlc3MgPj0gMC4xOQorc2VsZW5pdW0gPj0gMy4zLjAKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRl
c3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvcmVxdWlyZW1lbnRzX3NlcnZvLnR4dCBi
L1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvcmVxdWlyZW1lbnRz
X3NlcnZvLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMjJiY2Zh
MTIzYTUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9v
bHMvd3B0cnVubmVyL3JlcXVpcmVtZW50c19zZXJ2by50eHQKQEAgLTAsMCArMSBAQAorbW96cHJv
Y2VzcyA+PSAwLjE5CmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9v
bHMvd3B0cnVubmVyL3NldHVwLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xz
L3dwdHJ1bm5lci9zZXR1cC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MC4uN2VjMTg5ZmVmZDkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRl
ZC93M2MvdG9vbHMvd3B0cnVubmVyL3NldHVwLnB5CkBAIC0wLDAgKzEsNzQgQEAKKyMgVGhpcyBT
b3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1
YmxpYworIyBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlz
dHJpYnV0ZWQgd2l0aCB0aGlzIGZpbGUsCisjIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8v
bW96aWxsYS5vcmcvTVBMLzIuMC8uCisKK2ltcG9ydCBnbG9iCitpbXBvcnQgb3MKK2ltcG9ydCBz
eXMKK2ltcG9ydCB0ZXh0d3JhcAorCitmcm9tIHNldHVwdG9vbHMgaW1wb3J0IHNldHVwLCBmaW5k
X3BhY2thZ2VzCisKK2hlcmUgPSBvcy5wYXRoLnNwbGl0KF9fZmlsZV9fKVswXQorCitQQUNLQUdF
X05BTUUgPSAnd3B0cnVubmVyJworUEFDS0FHRV9WRVJTSU9OID0gJzEuMTQnCisKKyMgRGVwZW5k
ZW5jaWVzCit3aXRoIG9wZW4ob3MucGF0aC5qb2luKGhlcmUsICJyZXF1aXJlbWVudHMudHh0Iikp
IGFzIGY6CisgICAgZGVwcyA9IGYucmVhZCgpLnNwbGl0bGluZXMoKQorCisjIEJyb3dzZXItc3Bl
Y2lmaWMgcmVxdWlyZW1lbnRzCityZXF1aXJlbWVudHNfZmlsZXMgPSBnbG9iLmdsb2IoInJlcXVp
cmVtZW50c18qLnR4dCIpCisKK3Byb2ZpbGVfZGVzdCA9IE5vbmUKK2Rlc3RfZXhpc3RzID0gRmFs
c2UKKworc2V0dXAobmFtZT1QQUNLQUdFX05BTUUsCisgICAgICB2ZXJzaW9uPVBBQ0tBR0VfVkVS
U0lPTiwKKyAgICAgIGRlc2NyaXB0aW9uPSJIYXJuZXNzIGZvciBydW5uaW5nIHRoZSBXM0Mgd2Vi
LXBsYXRmb3JtLXRlc3RzIGFnYWluc3QgdmFyaW91cyBwcm9kdWN0cyIsCisgICAgICBhdXRob3I9
J01vemlsbGEgQXV0b21hdGlvbiBhbmQgVGVzdGluZyBUZWFtJywKKyAgICAgIGF1dGhvcl9lbWFp
bD0ndG9vbHNAbGlzdHMubW96aWxsYS5vcmcnLAorICAgICAgbGljZW5zZT0nTVBMIDIuMCcsCisg
ICAgICBwYWNrYWdlcz1maW5kX3BhY2thZ2VzKGV4Y2x1ZGU9WyJ0ZXN0cyIsICJtZXRhZGF0YSIs
ICJwcmVmcyJdKSwKKyAgICAgIGVudHJ5X3BvaW50cz17CisgICAgICAgICAgJ2NvbnNvbGVfc2Ny
aXB0cyc6IFsKKyAgICAgICAgICAgICAgJ3dwdHJ1bm5lciA9IHdwdHJ1bm5lci53cHRydW5uZXI6
bWFpbicsCisgICAgICAgICAgICAgICd3cHR1cGRhdGUgPSB3cHRydW5uZXIudXBkYXRlOm1haW4n
LAorICAgICAgICAgIF0KKyAgICAgIH0sCisgICAgICB6aXBfc2FmZT1GYWxzZSwKKyAgICAgIHBs
YXRmb3Jtcz1bJ0FueSddLAorICAgICAgY2xhc3NpZmllcnM9WydEZXZlbG9wbWVudCBTdGF0dXMg
OjogNCAtIEJldGEnLAorICAgICAgICAgICAgICAgICAgICdFbnZpcm9ubWVudCA6OiBDb25zb2xl
JywKKyAgICAgICAgICAgICAgICAgICAnSW50ZW5kZWQgQXVkaWVuY2UgOjogRGV2ZWxvcGVycycs
CisgICAgICAgICAgICAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IEJTRCBMaWNl
bnNlJywKKyAgICAgICAgICAgICAgICAgICAnT3BlcmF0aW5nIFN5c3RlbSA6OiBPUyBJbmRlcGVu
ZGVudCddLAorICAgICAgcGFja2FnZV9kYXRhPXsid3B0cnVubmVyIjogWyJleGVjdXRvcnMvdGVz
dGhhcm5lc3NfbWFyaW9uZXR0ZS5qcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgImV4ZWN1dG9ycy90ZXN0aGFybmVzc193ZWJkcml2ZXIuanMiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJleGVjdXRvcnMvcmVmdGVzdC5qcyIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImV4ZWN1dG9ycy9yZWZ0ZXN0LXdhaXQuanMiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0aGFybmVzc3JlcG9ydC5qcyIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3RoYXJuZXNzX3J1bm5lci5odG1sIiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29uZmlnLmpzb24iLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3cHRydW5uZXIuZGVmYXVsdC5pbmkiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJicm93c2Vycy9zZXJ2ZXItbG9jYXRpb25z
LnR4dCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJyb3dzZXJzL2IyZ19z
ZXR1cC8qIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnJvd3NlcnMvc2F1
Y2Vfc2V0dXAvKiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInByZWZzLyoi
XX0sCisgICAgICBpbmNsdWRlX3BhY2thZ2VfZGF0YT1UcnVlLAorICAgICAgZGF0YV9maWxlcz1b
KCJyZXF1aXJlbWVudHMiLCByZXF1aXJlbWVudHNfZmlsZXMpXSwKKyAgICAgIGluc3RhbGxfcmVx
dWlyZXM9ZGVwcworICAgICApCisKK2lmICJpbnN0YWxsIiBpbiBzeXMuYXJndjoKKyAgICBwYXRo
ID0gb3MucGF0aC5yZWxwYXRoKG9zLnBhdGguam9pbihzeXMucHJlZml4LCAicmVxdWlyZW1lbnRz
IiksIG9zLmN1cmRpcikKKyAgICBwcmludCB0ZXh0d3JhcC5maWxsKCIiIkluIG9yZGVyIHRvIHVz
ZSB3aXRoIG9uZSBvZiB0aGUgYnVpbHQtaW4gYnJvd3NlcgorcHJvZHVjdHMsIHlvdSB3aWxsIG5l
ZWQgdG8gaW5zdGFsbCB0aGUgZXh0cmEgZGVwZW5kZW5jaWVzLiBUaGVzZSBhcmUgcHJvdmlkZWQK
K2FzIHJlcXVpcmVtZW50c19bbmFtZV0udHh0IGluIHRoZSAlcyBkaXJlY3RvcnkgYW5kIGNhbiBi
ZSBpbnN0YWxsZWQgdXNpbmcKK2UuZy4iIiIgJSBwYXRoLCA4MCkKKworICAgIHByaW50ICIiIgor
CitwaXAgaW5zdGFsbCAtciAlcy9yZXF1aXJlbWVudHNfZmlyZWZveC50eHQKKyIiIiAlIHBhdGgK
ZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIv
dG94LmluaSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvdG94
LmluaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNzkwOTcwNDA5ZjMK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0
cnVubmVyL3RveC5pbmkKQEAgLTAsMCArMSwxNyBAQAorW3B5dGVzdF0KK3hmYWlsX3N0cmljdD10
cnVlCisKK1t0b3hdCitlbnZsaXN0ID0ge3B5MjcscHlweX0te2Jhc2UsYjJnLGNocm9tZSxmaXJl
Zm94LHNlcnZvfQorCitbdGVzdGVudl0KK2RlcHMgPQorICAgICBweXRlc3Q+PTIuOQorICAgICBw
eXRlc3QtY292CisgICAgIHB5dGVzdC14ZGlzdAorICAgICAtcnt0b3hpbmlkaXJ9L3JlcXVpcmVt
ZW50cy50eHQKKyAgICAgY2hyb21lOiAtcnt0b3hpbmlkaXJ9L3JlcXVpcmVtZW50c19jaHJvbWUu
dHh0CisgICAgIGZpcmVmb3g6IC1ye3RveGluaWRpcn0vcmVxdWlyZW1lbnRzX2ZpcmVmb3gudHh0
CisgICAgIHNlcnZvOiAtcnt0b3hpbmlkaXJ9L3JlcXVpcmVtZW50c19zZXJ2by50eHQKKworY29t
bWFuZHMgPSBweXRlc3QgLS1jb3YKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVk
L3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyLmRlZmF1bHQuaW5pIGIvV2ViRHJpdmVyVGVz
dHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIuZGVmYXVsdC5pbmkKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjM0ZDI1ZjgwNTZiCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93
cHRydW5uZXIuZGVmYXVsdC5pbmkKQEAgLTAsMCArMSwxMSBAQAorW3Byb2R1Y3RzXQorCitbd2Vi
LXBsYXRmb3JtLXRlc3RzXQorcmVtb3RlX3VybCA9IGh0dHBzOi8vZ2l0aHViLmNvbS93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzLmdpdAorYnJhbmNoID0gbWFzdGVyCitzeW5jX3BhdGggPSAlKHB3ZClz
L3N5bmMKKworW21hbmlmZXN0OmRlZmF1bHRdCit0ZXN0cyA9ICUocHdkKXMvdGVzdHMKK21ldGFk
YXRhID0gJShwd2Qpcy9tZXRhCit1cmxfYmFzZSA9IC8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBm
aWxlCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVu
bmVyL3dwdHJ1bm5lci9fX2luaXRfXy5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90
b29scy93cHRydW5uZXIvd3B0cnVubmVyL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwLi5lNjlkZTI5YmIyZApkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVz
dHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvYnJvd3NlcnMvX19pbml0
X18ucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1
bm5lci9icm93c2Vycy9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMC4uYzRlYTk3MWZiNmYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9p
bXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9icm93c2Vycy9fX2luaXRfXy5w
eQpAQCAtMCwwICsxLDMxIEBACisiIiJTdWJwYWNrYWdlIHdoZXJlIGVhY2ggcHJvZHVjdCBpcyBk
ZWZpbmVkLiBFYWNoIHByb2R1Y3QgaXMgY3JlYXRlZCBieSBhZGRpbmcgYQorYSAucHkgZmlsZSBj
b250YWluaW5nIGEgX193cHRydW5uZXJfXyB2YXJpYWJsZSBpbiB0aGUgZ2xvYmFsIHNjb3BlLiBU
aGlzIG11c3QgYmUKK2EgZGljdGlvbmFyeSB3aXRoIHRoZSBmaWVsZHMKKworInByb2R1Y3QiOiBO
YW1lIG9mIHRoZSBwcm9kdWN0LCBhc3N1bWVkIHRvIGJlIHVuaXF1ZS4KKyJicm93c2VyIjogU3Ry
aW5nIGluZGljYXRpbmcgdGhlIEJyb3dzZXIgaW1wbGVtZW50YXRpb24gdXNlZCB0byBsYXVuY2gg
dGhhdAorICAgICAgICAgICBwcm9kdWN0LgorImV4ZWN1dG9yIjogRGljdGlvbmFyeSB3aXRoIGtl
eXMgYXMgc3VwcG9ydGVkIHRlc3QgdHlwZXMgYW5kIHZhbHVlcyBhcyB0aGUgbmFtZQorICAgICAg
ICAgICAgb2YgdGhlIEV4ZWN1dG9yIGltcGxlbWFudGF0aW9uIHRoYXQgd2lsbCBiZSB1c2VkIHRv
IHJ1biB0aGF0IHRlc3QKKyAgICAgICAgICAgIHR5cGUuCisiYnJvd3Nlcl9rd2FyZ3MiOiBTdHJp
bmcgbmFtaW5nIGZ1bmN0aW9uIHRoYXQgdGFrZXMgcHJvZHVjdCwgYmluYXJ5LAorICAgICAgICAg
ICAgICAgICAgcHJlZnNfcm9vdCBhbmQgdGhlIHdwdHJ1bm5lci5ydW5fdGVzdHMga3dhcmdzIGRp
Y3QgYXMgYXJndW1lbnRzCisgICAgICAgICAgICAgICAgICBhbmQgcmV0dXJucyBhIGRpY3Rpb25h
cnkgb2Yga3dhcmdzIHRvIHVzZSB3aGVuIGNyZWF0aW5nIHRoZQorICAgICAgICAgICAgICAgICAg
QnJvd3NlciBjbGFzcy4KKyJleGVjdXRvcl9rd2FyZ3MiOiBTdHJpbmcgbmFtaW5nIGEgZnVuY3Rp
b24gdGhhdCB0YWtlcyBodHRwIHNlcnZlciB1cmwgYW5kCisgICAgICAgICAgICAgICAgICAgdGlt
ZW91dCBtdWx0aXBsaWVyIGFuZCByZXR1cm5zIGt3YXJncyB0byB1c2Ugd2hlbiBjcmVhdGluZwor
ICAgICAgICAgICAgICAgICAgIHRoZSBleGVjdXRvciBjbGFzcy4KKyJlbnZfb3B0aW9ucyI6IFN0
cmluZyBuYW1pbmcgYSBmdW50aW9uIG9mIG5vIGFyZ3VtZW50cyB0aGF0IHJldHVybnMgdGhlCisg
ICAgICAgICAgICAgICBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBUZXN0RW52aXJvbm1lbnQuCisK
K0FsbCBjbGFzc2VzIGFuZCBmdW5jdGlvbnMgbmFtZWQgaW4gdGhlIGFib3ZlIGRpY3QgbXVzdCBi
ZSBpbXBvcnRlZCBpbnRvIHRoZQorbW9kdWxlIGdsb2JhbCBzY29wZS4KKyIiIgorCitwcm9kdWN0
X2xpc3QgPSBbImNocm9tZSIsCisgICAgICAgICAgICAgICAgImVkZ2UiLAorICAgICAgICAgICAg
ICAgICJmaXJlZm94IiwKKyAgICAgICAgICAgICAgICAiaWUiLAorICAgICAgICAgICAgICAgICJz
YXVjZSIsCisgICAgICAgICAgICAgICAgInNlcnZvIiwKKyAgICAgICAgICAgICAgICAic2Vydm9k
cml2ZXIiXQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dw
dHJ1bm5lci93cHRydW5uZXIvYnJvd3NlcnMvYjJnX3NldHVwL2NlcnR0ZXN0X2FwcC56aXAgYi9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9icm93
c2Vycy9iMmdfc2V0dXAvY2VydHRlc3RfYXBwLnppcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mOWNiZDUzMDBhZDY1
MGY4MzY5YWIwMmE0YWRjODg2NmE1ZjBkZWExCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAxMjM3
CnpjbVdJV1dAWnMjVXxgXjJGanZXT0RmelR9dHFZSkIxO2t0b0c3T257RFhBNUQ4Nn4rbnAmXl9N
JSRtalchS09EOQp6Z0coIzg4NW1pPEdCUGxMXj09T0lJcTkjclFwWTNvZ3ZRQ1U4eXwwSzN8IWYl
UyFTaj5RYEteMW5ifEpgRFY8WlAKemxjJnJOJH4/WXchR2skYkF3clgpVmlyQSEyc25fc218dWA+
Nl9ZZTBMamM/elZpb21uVmpuKW5jYGBGRj9CWmZ6Cno7MEwtUkghJnxXRXcjOHJ1Ukp2PXY3aTkj
NyNUT0lQPGJGbWJJalpALX43aUdKYlMtfmI2RUR6cz9LLVN1ZkE4LQp6JFNUJntzQzAzb2ZUeEl4
KWpYZXp8TXlMS2QhKj1iKmA9SzwxfUR8KVk7QilAXzNROHJrVGNeP2Bwblc5ciFjdnEKenJ8fFJJ
aVdlZzZ7Yn5LVkl4e1pqRDc7UWxqXnlFdm5mem1rKy0xaU1vK1VYQUNRTmYpSFJhWDJ4YUtuRTxR
amJWCnp5aWZLMElkLXsmaUJDU1RlPn5OO1lRPVExQmEybDY+TnJ5VXJeZ2ctYVdTO2QqfW04SU1z
QCVHSE5+JndGNHo2Twp6QT9XMilRaEImeHlDUzNmK3VVPDgxQG5TNm1RUngzY1lvUHBRTmZtdFlq
MGtZPjwoSig1IT5ZWTtZQ0kkJEFjI1kKekgleE9yT3tASEhRdk1nUytXSUB7P35MbCFVaHwmYUc+
UH1PKEx3JEBFUFA0YjQ/fHF2T3RFXy1UejJwVGs3RHd2CnopI3JGI1d8Jl5GeVV5NlpWQD5maylp
PDlQRmBUdmJTIUxFeEVWSGE5WV5VNVkyWFM5aj4qO0d2cEtPfXUlYXI7bgp6aDEyWWolKmlYKDA+
fUUqa2AmWXV2P1hxU2JJKWNGS1g8QTFPcEU4K2hsPDZiQylYXndAQE1tem9kO1ozYkJwRl8Kemxg
K2JeYGV9OGh7Tl5rRCNVVll9RC1DdkI/I1prUEl4e2lMdD1nZUlKYkNNfXRHQmwrbVZObWJUX3RL
IW19KysqCnp2O0E/JGQ5e0EpKkEzVFk5cm05Iyt7RnxpSU5fOUNxPjh1OGZ8fER7bVQxSlFeUGp6
U1g0PjIwR2MwUSZQZ3t3awp6RiFpJStOPyY/dFV5KXUqJUM9OD9uPWJzNlUyLX5oV34pLXRlaC0x
Jkc1MlRseFlVJjlFNFkwdHkoSHIodEg2Nn0Keihndn5xUFVmdm9yKlF0K1U7ajd1cmljNT9LPX1v
NlBpSntlX31YMzljWT9Qbl80TzN5P2JreSNyN1E5TTRPNj16CnpTe0M8eSYyI1A4TmN+cl81LSU0
Nzw7N2pGS1JeQmFSYG9aVDl+dEhAZWYlc3VgQGs3aWlId2x2Rk9FbGVJUUVQMwp6Xz9fb3wrfnI7
UXpqdFRjXjZnTG1Nd2lFPmFQSDdwYVlSQkBSa1gtaD1kd0ZIJVhhNzg4NCt0IWUwS04/bSp6MlYK
ejNUVSE1YGtab0RlRW8kTDh+PD80ZWc2NkFwYFRKfXpqKUhPSzNsK1NlblElOHpIOFJ3c2FxQnY0
MDtyelJAMWRZCnomdUQrfnVCcGU7ZGZoJFpUUCk5TCtaTyEhb19LazRVVERtaGdmJntSUGlJWWRm
QVpLckopaWVlVSs4WDRJPyExcAp6PStmLVReMlc4filzZiE8T1RXK0R6SDtgQ3w3TSMkdCt7KlU/
bVc+V2VPSEFQSUFYJm1aTGpIaVB9PWRfUUs0QDMKem1yWn1CWFRHbiRAWilMRSZkUHRFNlRLZHtj
S2tHZEpLZWtUZClhc1UwQj1TbkljOGpDZzlOYUlVfDt+MjAxUWhTCndLYGk4d2YpIUZ5cGsrKkNe
RHklYHZVd2RxXkR1SGUmYD9tMCQxcyRZNFAtcU41SDFETVFZO2BJMEw2OSEzSUc1QQoKbGl0ZXJh
bCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNj
L3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvYnJvd3NlcnMvYmFzZS5weSBiL1dlYkRyaXZlclRl
c3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2Jyb3dzZXJzL2Jhc2Uu
cHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmU0YzljMzAxYmQ1Ci0t
LSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1
bm5lci93cHRydW5uZXIvYnJvd3NlcnMvYmFzZS5weQpAQCAtMCwwICsxLDE2NiBAQAoraW1wb3J0
IG9zCitpbXBvcnQgcGxhdGZvcm0KK2ltcG9ydCBzb2NrZXQKK2Zyb20gYWJjIGltcG9ydCBBQkNN
ZXRhLCBhYnN0cmFjdG1ldGhvZAorCitmcm9tIC4ud3B0Y29tbWFuZGxpbmUgaW1wb3J0IHJlcXVp
cmVfYXJnCisKK2hlcmUgPSBvcy5wYXRoLnNwbGl0KF9fZmlsZV9fKVswXQorCisKK2RlZiBjbWRf
YXJnKG5hbWUsIHZhbHVlPU5vbmUpOgorICAgIHByZWZpeCA9ICItIiBpZiBwbGF0Zm9ybS5zeXN0
ZW0oKSA9PSAiV2luZG93cyIgZWxzZSAiLS0iCisgICAgcnYgPSBwcmVmaXggKyBuYW1lCisgICAg
aWYgdmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAgIHJ2ICs9ICI9IiArIHZhbHVlCisgICAgcmV0
dXJuIHJ2CisKKworZGVmIGdldF9mcmVlX3BvcnQoc3RhcnRfcG9ydCwgZXhjbHVkZT1Ob25lKToK
KyAgICAiIiJHZXQgdGhlIGZpcnN0IHBvcnQgbnVtYmVyIGFmdGVyIHN0YXJ0X3BvcnQgKGluY2x1
c2l2ZSkgdGhhdCBpcworICAgIG5vdCBjdXJyZW50bHkgYm91bmQuCisKKyAgICA6cGFyYW0gc3Rh
cnRfcG9ydDogSW50ZWdlciBwb3J0IG51bWJlciBhdCB3aGljaCB0byBzdGFydCB0ZXN0aW5nLgor
ICAgIDpwYXJhbSBleGNsdWRlOiBTZXQgb2YgcG9ydCBudW1iZXJzIHRvIHNraXAiIiIKKyAgICBw
b3J0ID0gc3RhcnRfcG9ydAorICAgIHdoaWxlIFRydWU6CisgICAgICAgIGlmIGV4Y2x1ZGUgYW5k
IHBvcnQgaW4gZXhjbHVkZToKKyAgICAgICAgICAgIHBvcnQgKz0gMQorICAgICAgICAgICAgY29u
dGludWUKKyAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICB0cnk6CisgICAgICAg
ICAgICBzLmJpbmQoKCIxMjcuMC4wLjEiLCBwb3J0KSkKKyAgICAgICAgZXhjZXB0IHNvY2tldC5l
cnJvcjoKKyAgICAgICAgICAgIHBvcnQgKz0gMQorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
cmV0dXJuIHBvcnQKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHMuY2xvc2UoKQorCitk
ZWYgYnJvd3Nlcl9jb21tYW5kKGJpbmFyeSwgYXJncywgZGVidWdfaW5mbyk6CisgICAgaWYgZGVi
dWdfaW5mbzoKKyAgICAgICAgaWYgZGVidWdfaW5mby5yZXF1aXJlc0VzY2FwZWRBcmdzOgorICAg
ICAgICAgICAgYXJncyA9IFtpdGVtLnJlcGxhY2UoIiYiLCAiXFwmIikgZm9yIGl0ZW0gaW4gYXJn
c10KKyAgICAgICAgZGVidWdfYXJncyA9IFtkZWJ1Z19pbmZvLnBhdGhdICsgZGVidWdfaW5mby5h
cmdzCisgICAgZWxzZToKKyAgICAgICAgZGVidWdfYXJncyA9IFtdCisKKyAgICBjb21tYW5kID0g
W2JpbmFyeV0gKyBhcmdzCisKKyAgICByZXR1cm4gZGVidWdfYXJncywgY29tbWFuZAorCisKK2Ns
YXNzIEJyb3dzZXJFcnJvcihFeGNlcHRpb24pOgorICAgIHBhc3MKKworCitjbGFzcyBCcm93c2Vy
KG9iamVjdCk6CisgICAgX19tZXRhY2xhc3NfXyA9IEFCQ01ldGEKKworICAgIHByb2Nlc3NfY2xz
ID0gTm9uZQorICAgIGluaXRfdGltZW91dCA9IDMwCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
bG9nZ2VyKToKKyAgICAgICAgIiIiQWJzdHJhY3QgY2xhc3Mgc2VydmluZyBhcyB0aGUgYmFzaXMg
Zm9yIEJyb3dzZXIgaW1wbGVtZW50YXRpb25zLgorCisgICAgICAgIFRoZSBCcm93c2VyIGlzIHVz
ZWQgaW4gdGhlIFRlc3RSdW5uZXJNYW5hZ2VyIHRvIHN0YXJ0IGFuZCBzdG9wIHRoZSBicm93c2Vy
CisgICAgICAgIHByb2Nlc3MsIGFuZCB0byBjaGVjayB0aGUgc3RhdGUgb2YgdGhhdCBwcm9jZXNz
LiBUaGlzIGNsYXNzIGFsc28gYWN0cyBhcyBhCisgICAgICAgIGNvbnRleHQgbWFuYWdlciwgZW5h
YmxpbmcgaXQgdG8gZG8gYnJvd3Nlci1zcGVjaWZpYyBzZXR1cCBhdCB0aGUgc3RhcnQgb2YKKyAg
ICAgICAgdGhlIHRlc3RydW4gYW5kIGNsZWFudXAgYWZ0ZXIgdGhlIHJ1biBpcyBjb21wbGV0ZS4K
KworICAgICAgICA6cGFyYW0gbG9nZ2VyOiBTdHJ1Y3R1cmVkIGxvZ2dlciB0byB1c2UgZm9yIG91
dHB1dC4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYubG9nZ2VyID0gbG9nZ2VyCisKKyAgICBk
ZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICBzZWxmLnNldHVwKCkKKyAgICAgICAgcmV0dXJu
IHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAg
ICBzZWxmLmNsZWFudXAoKQorCisgICAgZGVmIHNldHVwKHNlbGYpOgorICAgICAgICAiIiJVc2Vk
IGZvciBicm93c2VyLXNwZWNpZmljIHNldHVwIHRoYXQgaGFwcGVucyBhdCB0aGUgc3RhcnQgb2Yg
YSB0ZXN0IHJ1biIiIgorICAgICAgICBwYXNzCisKKyAgICBkZWYgc2V0dGluZ3Moc2VsZiwgdGVz
dCk6CisgICAgICAgIHJldHVybiB7fQorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIHN0
YXJ0KHNlbGYsICoqa3dhcmdzKToKKyAgICAgICAgIiIiTGF1bmNoIHRoZSBicm93c2VyIG9iamVj
dCBhbmQgZ2V0IGl0IGludG8gYSBzdGF0ZSB3aGVyZSBpcyBpcyByZWFkeSB0byBydW4gdGVzdHMi
IiIKKyAgICAgICAgcGFzcworCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIHN0b3Aoc2Vs
ZiwgZm9yY2U9RmFsc2UpOgorICAgICAgICAiIiJTdG9wIHRoZSBydW5uaW5nIGJyb3dzZXIgcHJv
Y2Vzcy4iIiIKKyAgICAgICAgcGFzcworCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIHBp
ZChzZWxmKToKKyAgICAgICAgIiIicGlkIG9mIHRoZSBicm93c2VyIHByb2Nlc3Mgb3IgTm9uZSBp
ZiB0aGVyZSBpcyBubyBwaWQiIiIKKyAgICAgICAgcGFzcworCisgICAgQGFic3RyYWN0bWV0aG9k
CisgICAgZGVmIGlzX2FsaXZlKHNlbGYpOgorICAgICAgICAiIiJCb29sZWFuIGluZGljYXRpbmcg
d2hldGhlciB0aGUgYnJvd3NlciBwcm9jZXNzIGlzIHN0aWxsIHJ1bm5pbmciIiIKKyAgICAgICAg
cGFzcworCisgICAgZGVmIHNldHVwX3NzbChzZWxmLCBob3N0cyk6CisgICAgICAgICIiIlJldHVy
biBhIGNlcnRpZmljYXRlIHRvIHVzZSBmb3IgdGVzdHMgcmVxdWlyaW5nIHNzbCB0aGF0IHdpbGwg
YmUgdHJ1c3RlZCBieSB0aGUgYnJvd3NlciIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRl
ZEVycm9yKCJzc2wgdGVzdGluZyBub3Qgc3VwcG9ydGVkIikKKworICAgIGRlZiBjbGVhbnVwKHNl
bGYpOgorICAgICAgICAiIiJCcm93c2VyLXNwZWNpZmljIGNsZWFudXAgdGhhdCBpcyBydW4gYWZ0
ZXIgdGhlIHRlc3RydW4gaXMgZmluaXNoZWQiIiIKKyAgICAgICAgcGFzcworCisgICAgZGVmIGV4
ZWN1dG9yX2Jyb3dzZXIoc2VsZik6CisgICAgICAgICIiIlJldHVybnMgdGhlIEV4ZWN1dG9yQnJv
d3NlciBzdWJjbGFzcyBmb3IgdGhpcyBCcm93c2VyIHN1YmNsYXNzIGFuZCB0aGUga2V5d29yZCBh
cmd1bWVudHMKKyAgICAgICAgd2l0aCB3aGljaCBpdCBzaG91bGQgYmUgaW5zdGFudGlhdGVkIiIi
CisgICAgICAgIHJldHVybiBFeGVjdXRvckJyb3dzZXIsIHt9CisKKyAgICBkZWYgY2hlY2tfZm9y
X2NyYXNoZXMoc2VsZik6CisgICAgICAgICIiIkNoZWNrIGZvciBjcmFzaGVzIHRoYXQgZGlkbid0
IGNhdXNlIHRoZSBicm93c2VyIHByb2Nlc3MgdG8gdGVybWluYXRlIiIiCisgICAgICAgIHJldHVy
biBGYWxzZQorCisgICAgZGVmIGxvZ19jcmFzaChzZWxmLCBwcm9jZXNzLCB0ZXN0KToKKyAgICAg
ICAgIiIiUmV0dXJuIGEgbGlzdCBvZiBkaWN0aW9uYXJpZXMgY29udGFpbmluZyBpbmZvcm1hdGlv
biBhYm91dCBjcmFzaGVzIHRoYXQgaGFwcGVuZAorICAgICAgICBpbiB0aGUgYnJvd3Nlciwgb3Ig
YW4gZW1wdHkgbGlzdCBpZiBubyBjcmFzaGVzIG9jY3VycmVkIiIiCisgICAgICAgIHNlbGYubG9n
Z2VyLmNyYXNoKHByb2Nlc3MsIHRlc3QpCisKKworY2xhc3MgTnVsbEJyb3dzZXIoQnJvd3Nlcik6
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvZ2dlciwgKiprd2FyZ3MpOgorICAgICAgICBzdXBl
cihOdWxsQnJvd3Nlciwgc2VsZikuX19pbml0X18obG9nZ2VyKQorCisgICAgZGVmIHN0YXJ0KHNl
bGYsICoqa3dhcmdzKToKKyAgICAgICAgIiIiTm8tb3AgYnJvd3NlciB0byB1c2UgaW4gc2NlbmFy
aW9zIHdoZXJlIHRoZSBUZXN0UnVubmVyTWFuYWdlciBzaG91bGRuJ3QKKyAgICAgICAgYWN0dWFs
bHkgb3duIHRoZSBicm93c2VyIHByb2Nlc3MgKGUuZy4gU2Vydm8gd2hlcmUgd2Ugc3RhcnQgb25l
IGJyb3dzZXIKKyAgICAgICAgcGVyIHRlc3QpIiIiCisgICAgICAgIHBhc3MKKworICAgIGRlZiBz
dG9wKHNlbGYsIGZvcmNlPUZhbHNlKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHBpZChzZWxm
KToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBpc19hbGl2ZShzZWxmKToKKyAgICAg
ICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBvbl9vdXRwdXQoc2VsZiwgbGluZSk6CisgICAgICAg
IHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworCitjbGFzcyBFeGVjdXRvckJyb3dzZXIob2Jq
ZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKiprd2FyZ3MpOgorICAgICAgICAiIiJWaWV3
IG9mIHRoZSBCcm93c2VyIHVzZWQgYnkgdGhlIEV4ZWN1dG9yIG9iamVjdC4KKyAgICAgICAgVGhp
cyBpcyBuZWVkZWQgYmVjYXVzZSB0aGUgRXhlY3V0b3IgcnVucyBpbiBhIGNoaWxkIHByb2Nlc3Mg
YW5kCisgICAgICAgIHdlIGNhbid0IHNoaXAgQnJvd3NlciBpbnN0YW5jZXMgYmV0d2VlbiBwcm9j
ZXNzZXMgb24gV2luZG93cy4KKworICAgICAgICBUeXBpY2FsbHkgdGhpcyB3aWxsIGhhdmUgYSBm
ZXcgcHJvZHVjdC1zcGVjaWZpYyBwcm9wZXJ0aWVzIHNldCwKKyAgICAgICAgYnV0IGluIHNvbWUg
Y2FzZXMgaXQgbWF5IGhhdmUgbW9yZSBlbGFib3JhdGUgbWV0aG9kcyBmb3Igc2V0dGluZworICAg
ICAgICB1cCB0aGUgYnJvd3NlciBmcm9tIHRoZSBydW5uZXIgcHJvY2Vzcy4KKyAgICAgICAgIiIi
CisgICAgICAgIGZvciBrLCB2IGluIGt3YXJncy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIHNl
dGF0dHIoc2VsZiwgaywgdikKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3cz
Yy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2Jyb3dzZXJzL2Nocm9tZS5weSBiL1dlYkRyaXZl
clRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2Jyb3dzZXJzL2No
cm9tZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMjE1ZmNjZmZl
MmEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMv
d3B0cnVubmVyL3dwdHJ1bm5lci9icm93c2Vycy9jaHJvbWUucHkKQEAgLTAsMCArMSwxMDEgQEAK
K2Zyb20gLmJhc2UgaW1wb3J0IEJyb3dzZXIsIEV4ZWN1dG9yQnJvd3NlciwgcmVxdWlyZV9hcmcK
K2Zyb20gLi53ZWJkcml2ZXJfc2VydmVyIGltcG9ydCBDaHJvbWVEcml2ZXJTZXJ2ZXIKK2Zyb20g
Li5leGVjdXRvcnMgaW1wb3J0IGV4ZWN1dG9yX2t3YXJncyBhcyBiYXNlX2V4ZWN1dG9yX2t3YXJn
cworZnJvbSAuLmV4ZWN1dG9ycy5leGVjdXRvcnNlbGVuaXVtIGltcG9ydCAoU2VsZW5pdW1UZXN0
aGFybmVzc0V4ZWN1dG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgU2VsZW5pdW1SZWZUZXN0RXhlY3V0b3IpCitmcm9tIC4uZXhlY3V0b3JzLmV4ZWN1dG9yY2hy
b21lIGltcG9ydCBDaHJvbWVEcml2ZXJXZHNwZWNFeGVjdXRvcgorCisKK19fd3B0cnVubmVyX18g
PSB7InByb2R1Y3QiOiAiY2hyb21lIiwKKyAgICAgICAgICAgICAgICAgImNoZWNrX2FyZ3MiOiAi
Y2hlY2tfYXJncyIsCisgICAgICAgICAgICAgICAgICJicm93c2VyIjogIkNocm9tZUJyb3dzZXIi
LAorICAgICAgICAgICAgICAgICAiZXhlY3V0b3IiOiB7InRlc3RoYXJuZXNzIjogIlNlbGVuaXVt
VGVzdGhhcm5lc3NFeGVjdXRvciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVm
dGVzdCI6ICJTZWxlbml1bVJlZlRlc3RFeGVjdXRvciIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAid2RzcGVjIjogIkNocm9tZURyaXZlcldkc3BlY0V4ZWN1dG9yIn0sCisgICAgICAg
ICAgICAgICAgICJicm93c2VyX2t3YXJncyI6ICJicm93c2VyX2t3YXJncyIsCisgICAgICAgICAg
ICAgICAgICJleGVjdXRvcl9rd2FyZ3MiOiAiZXhlY3V0b3Jfa3dhcmdzIiwKKyAgICAgICAgICAg
ICAgICAgImVudl9leHRyYXMiOiAiZW52X2V4dHJhcyIsCisgICAgICAgICAgICAgICAgICJlbnZf
b3B0aW9ucyI6ICJlbnZfb3B0aW9ucyJ9CisKKworZGVmIGNoZWNrX2FyZ3MoKiprd2FyZ3MpOgor
ICAgIHJlcXVpcmVfYXJnKGt3YXJncywgIndlYmRyaXZlcl9iaW5hcnkiKQorCisKK2RlZiBicm93
c2VyX2t3YXJncyh0ZXN0X3R5cGUsIHJ1bl9pbmZvX2RhdGEsICoqa3dhcmdzKToKKyAgICByZXR1
cm4geyJiaW5hcnkiOiBrd2FyZ3NbImJpbmFyeSJdLAorICAgICAgICAgICAgIndlYmRyaXZlcl9i
aW5hcnkiOiBrd2FyZ3NbIndlYmRyaXZlcl9iaW5hcnkiXSwKKyAgICAgICAgICAgICJ3ZWJkcml2
ZXJfYXJncyI6IGt3YXJncy5nZXQoIndlYmRyaXZlcl9hcmdzIil9CisKKworZGVmIGV4ZWN1dG9y
X2t3YXJncyh0ZXN0X3R5cGUsIHNlcnZlcl9jb25maWcsIGNhY2hlX21hbmFnZXIsIHJ1bl9pbmZv
X2RhdGEsCisgICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKToKKyAgICBmcm9tIHNlbGVuaXVt
LndlYmRyaXZlciBpbXBvcnQgRGVzaXJlZENhcGFiaWxpdGllcworCisgICAgZXhlY3V0b3Jfa3dh
cmdzID0gYmFzZV9leGVjdXRvcl9rd2FyZ3ModGVzdF90eXBlLCBzZXJ2ZXJfY29uZmlnLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlX21hbmFnZXIsICoq
a3dhcmdzKQorICAgIGV4ZWN1dG9yX2t3YXJnc1siY2xvc2VfYWZ0ZXJfZG9uZSJdID0gVHJ1ZQor
ICAgIGNhcGFiaWxpdGllcyA9IGRpY3QoRGVzaXJlZENhcGFiaWxpdGllcy5DSFJPTUUuaXRlbXMo
KSkKKyAgICBjYXBhYmlsaXRpZXMuc2V0ZGVmYXVsdCgiY2hyb21lT3B0aW9ucyIsIHt9KVsicHJl
ZnMiXSA9IHsKKyAgICAgICAgInByb2ZpbGUiOiB7CisgICAgICAgICAgICAiZGVmYXVsdF9jb250
ZW50X3NldHRpbmdfdmFsdWVzIjogeworICAgICAgICAgICAgICAgICJwb3B1cHMiOiAxCisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZm9yIChrd2FyZywgY2FwYWJpbGl0eSkg
aW4gWygiYmluYXJ5IiwgImJpbmFyeSIpLCAoImJpbmFyeV9hcmdzIiwgImFyZ3MiKV06CisgICAg
ICAgIGlmIGt3YXJnc1trd2FyZ10gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBjYXBhYmlsaXRp
ZXNbImNocm9tZU9wdGlvbnMiXVtjYXBhYmlsaXR5XSA9IGt3YXJnc1trd2FyZ10KKyAgICBpZiB0
ZXN0X3R5cGUgPT0gInRlc3RoYXJuZXNzIjoKKyAgICAgICAgY2FwYWJpbGl0aWVzWyJjaHJvbWVP
cHRpb25zIl1bInVzZUF1dG9tYXRpb25FeHRlbnNpb24iXSA9IEZhbHNlCisgICAgICAgIGNhcGFi
aWxpdGllc1siY2hyb21lT3B0aW9ucyJdWyJleGNsdWRlU3dpdGNoZXMiXSA9IFsiZW5hYmxlLWF1
dG9tYXRpb24iXQorICAgIGlmIHRlc3RfdHlwZSA9PSAid2RzcGVjIjoKKyAgICAgICAgY2FwYWJp
bGl0aWVzWyJjaHJvbWVPcHRpb25zIl1bInczYyJdID0gVHJ1ZQorICAgIGV4ZWN1dG9yX2t3YXJn
c1siY2FwYWJpbGl0aWVzIl0gPSBjYXBhYmlsaXRpZXMKKyAgICByZXR1cm4gZXhlY3V0b3Jfa3dh
cmdzCisKKworZGVmIGVudl9leHRyYXMoKiprd2FyZ3MpOgorICAgIHJldHVybiBbXQorCisKK2Rl
ZiBlbnZfb3B0aW9ucygpOgorICAgIHJldHVybiB7Imhvc3QiOiAid2ViLXBsYXRmb3JtLnRlc3Qi
LAorICAgICAgICAgICAgImJpbmRfaG9zdG5hbWUiOiAidHJ1ZSJ9CisKKworY2xhc3MgQ2hyb21l
QnJvd3NlcihCcm93c2VyKToKKyAgICAiIiJDaHJvbWUgaXMgYmFja2VkIGJ5IGNocm9tZWRyaXZl
ciwgd2hpY2ggaXMgc3VwcGxpZWQgdGhyb3VnaAorICAgIGBgd3B0cnVubmVyLndlYmRyaXZlci5D
aHJvbWVEcml2ZXJTZXJ2ZXJgYC4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBs
b2dnZXIsIGJpbmFyeSwgd2ViZHJpdmVyX2JpbmFyeT0iY2hyb21lZHJpdmVyIiwKKyAgICAgICAg
ICAgICAgICAgd2ViZHJpdmVyX2FyZ3M9Tm9uZSk6CisgICAgICAgICIiIkNyZWF0ZXMgYSBuZXcg
cmVwcmVzZW50YXRpb24gb2YgQ2hyb21lLiAgVGhlIGBiaW5hcnlgIGFyZ3VtZW50IGdpdmVzCisg
ICAgICAgIHRoZSBicm93c2VyIGJpbmFyeSB0byB1c2UgZm9yIHRlc3RpbmcuIiIiCisgICAgICAg
IEJyb3dzZXIuX19pbml0X18oc2VsZiwgbG9nZ2VyKQorICAgICAgICBzZWxmLmJpbmFyeSA9IGJp
bmFyeQorICAgICAgICBzZWxmLnNlcnZlciA9IENocm9tZURyaXZlclNlcnZlcihzZWxmLmxvZ2dl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluYXJ5PXdlYmRy
aXZlcl9iaW5hcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFy
Z3M9d2ViZHJpdmVyX2FyZ3MpCisKKyAgICBkZWYgc3RhcnQoc2VsZiwgKiprd2FyZ3MpOgorICAg
ICAgICBzZWxmLnNlcnZlci5zdGFydChibG9jaz1GYWxzZSkKKworICAgIGRlZiBzdG9wKHNlbGYs
IGZvcmNlPUZhbHNlKToKKyAgICAgICAgc2VsZi5zZXJ2ZXIuc3RvcChmb3JjZT1mb3JjZSkKKwor
ICAgIGRlZiBwaWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnNlcnZlci5waWQKKworICAg
IGRlZiBpc19hbGl2ZShzZWxmKToKKyAgICAgICAgIyBUT0RPKGF0byk6IFRoaXMgb25seSBpbmRp
Y2F0ZXMgdGhlIGRyaXZlciBpcyBhbGl2ZSwKKyAgICAgICAgIyBhbmQgZG9lc24ndCBzYXkgYW55
dGhpbmcgYWJvdXQgd2hldGhlciBhIGJyb3dzZXIgc2Vzc2lvbgorICAgICAgICAjIGlzIGFjdGl2
ZS4KKyAgICAgICAgcmV0dXJuIHNlbGYuc2VydmVyLmlzX2FsaXZlKCkKKworICAgIGRlZiBjbGVh
bnVwKHNlbGYpOgorICAgICAgICBzZWxmLnN0b3AoKQorCisgICAgZGVmIGV4ZWN1dG9yX2Jyb3dz
ZXIoc2VsZik6CisgICAgICAgIHJldHVybiBFeGVjdXRvckJyb3dzZXIsIHsid2ViZHJpdmVyX3Vy
bCI6IHNlbGYuc2VydmVyLnVybH0KZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVk
L3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2Jyb3dzZXJzL2VkZ2UucHkgYi9XZWJEcml2
ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9icm93c2Vycy9l
ZGdlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mZGM3YTc3MjFh
ZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93
cHRydW5uZXIvd3B0cnVubmVyL2Jyb3dzZXJzL2VkZ2UucHkKQEAgLTAsMCArMSw3NCBAQAorZnJv
bSAuYmFzZSBpbXBvcnQgQnJvd3NlciwgRXhlY3V0b3JCcm93c2VyLCByZXF1aXJlX2FyZworZnJv
bSAuLndlYmRyaXZlcl9zZXJ2ZXIgaW1wb3J0IEVkZ2VEcml2ZXJTZXJ2ZXIKK2Zyb20gLi5leGVj
dXRvcnMgaW1wb3J0IGV4ZWN1dG9yX2t3YXJncyBhcyBiYXNlX2V4ZWN1dG9yX2t3YXJncworZnJv
bSAuLmV4ZWN1dG9ycy5leGVjdXRvcnNlbGVuaXVtIGltcG9ydCAoU2VsZW5pdW1UZXN0aGFybmVz
c0V4ZWN1dG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2Vs
ZW5pdW1SZWZUZXN0RXhlY3V0b3IpCisKK19fd3B0cnVubmVyX18gPSB7InByb2R1Y3QiOiAiZWRn
ZSIsCisgICAgICAgICAgICAgICAgICJjaGVja19hcmdzIjogImNoZWNrX2FyZ3MiLAorICAgICAg
ICAgICAgICAgICAiYnJvd3NlciI6ICJFZGdlQnJvd3NlciIsCisgICAgICAgICAgICAgICAgICJl
eGVjdXRvciI6IHsidGVzdGhhcm5lc3MiOiAiU2VsZW5pdW1UZXN0aGFybmVzc0V4ZWN1dG9yIiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWZ0ZXN0IjogIlNlbGVuaXVtUmVmVGVz
dEV4ZWN1dG9yIn0sCisgICAgICAgICAgICAgICAgICJicm93c2VyX2t3YXJncyI6ICJicm93c2Vy
X2t3YXJncyIsCisgICAgICAgICAgICAgICAgICJleGVjdXRvcl9rd2FyZ3MiOiAiZXhlY3V0b3Jf
a3dhcmdzIiwKKyAgICAgICAgICAgICAgICAgImVudl9leHRyYXMiOiAiZW52X2V4dHJhcyIsCisg
ICAgICAgICAgICAgICAgICJlbnZfb3B0aW9ucyI6ICJlbnZfb3B0aW9ucyJ9CisKKworZGVmIGNo
ZWNrX2FyZ3MoKiprd2FyZ3MpOgorICAgIHJlcXVpcmVfYXJnKGt3YXJncywgIndlYmRyaXZlcl9i
aW5hcnkiKQorCitkZWYgYnJvd3Nlcl9rd2FyZ3ModGVzdF90eXBlLCBydW5faW5mb19kYXRhLCAq
Kmt3YXJncyk6CisgICAgcmV0dXJuIHsid2ViZHJpdmVyX2JpbmFyeSI6IGt3YXJnc1sid2ViZHJp
dmVyX2JpbmFyeSJdLAorICAgICAgICAgICAgIndlYmRyaXZlcl9hcmdzIjoga3dhcmdzLmdldCgi
d2ViZHJpdmVyX2FyZ3MiKX0KKworZGVmIGV4ZWN1dG9yX2t3YXJncyh0ZXN0X3R5cGUsIHNlcnZl
cl9jb25maWcsIGNhY2hlX21hbmFnZXIsIHJ1bl9pbmZvX2RhdGEsCisgICAgICAgICAgICAgICAg
ICAgICoqa3dhcmdzKToKKyAgICBmcm9tIHNlbGVuaXVtLndlYmRyaXZlciBpbXBvcnQgRGVzaXJl
ZENhcGFiaWxpdGllcworCisgICAgZXhlY3V0b3Jfa3dhcmdzID0gYmFzZV9leGVjdXRvcl9rd2Fy
Z3ModGVzdF90eXBlLCBzZXJ2ZXJfY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNhY2hlX21hbmFnZXIsICoqa3dhcmdzKQorICAgIGV4ZWN1dG9yX2t3
YXJnc1siY2xvc2VfYWZ0ZXJfZG9uZSJdID0gVHJ1ZQorICAgIGV4ZWN1dG9yX2t3YXJnc1siY2Fw
YWJpbGl0aWVzIl0gPSBkaWN0KERlc2lyZWRDYXBhYmlsaXRpZXMuRURHRS5pdGVtcygpKQorICAg
IHJldHVybiBleGVjdXRvcl9rd2FyZ3MKKworZGVmIGVudl9leHRyYXMoKiprd2FyZ3MpOgorICAg
IHJldHVybiBbXQorCitkZWYgZW52X29wdGlvbnMoKToKKyAgICByZXR1cm4geyJob3N0IjogIndl
Yi1wbGF0Zm9ybS50ZXN0IiwKKyAgICAgICAgICAgICJiaW5kX2hvc3RuYW1lIjogInRydWUiLAor
ICAgICAgICAgICAgInN1cHBvcnRzX2RlYnVnZ2VyIjogRmFsc2V9CisKK2NsYXNzIEVkZ2VCcm93
c2VyKEJyb3dzZXIpOgorICAgIHVzZWRfcG9ydHMgPSBzZXQoKQorCisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIGxvZ2dlciwgd2ViZHJpdmVyX2JpbmFyeSwgd2ViZHJpdmVyX2FyZ3M9Tm9uZSk6Cisg
ICAgICAgIEJyb3dzZXIuX19pbml0X18oc2VsZiwgbG9nZ2VyKQorICAgICAgICBzZWxmLnNlcnZl
ciA9IEVkZ2VEcml2ZXJTZXJ2ZXIoc2VsZi5sb2dnZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBiaW5hcnk9d2ViZHJpdmVyX2JpbmFyeSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M9d2ViZHJpdmVyX2FyZ3MpCisgICAgICAgIHNl
bGYud2ViZHJpdmVyX2hvc3QgPSAibG9jYWxob3N0IgorICAgICAgICBzZWxmLndlYmRyaXZlcl9w
b3J0ID0gc2VsZi5zZXJ2ZXIucG9ydAorCisgICAgZGVmIHN0YXJ0KHNlbGYsICoqa3dhcmdzKToK
KyAgICAgICAgcHJpbnQgc2VsZi5zZXJ2ZXIudXJsCisgICAgICAgIHNlbGYuc2VydmVyLnN0YXJ0
KCkKKworICAgIGRlZiBzdG9wKHNlbGYsIGZvcmNlPUZhbHNlKToKKyAgICAgICAgc2VsZi5zZXJ2
ZXIuc3RvcChmb3JjZT1mb3JjZSkKKworICAgIGRlZiBwaWQoc2VsZik6CisgICAgICAgIHJldHVy
biBzZWxmLnNlcnZlci5waWQKKworICAgIGRlZiBpc19hbGl2ZShzZWxmKToKKyAgICAgICAgIyBU
T0RPKGF0byk6IFRoaXMgb25seSBpbmRpY2F0ZXMgdGhlIHNlcnZlciBpcyBhbGl2ZSwKKyAgICAg
ICAgIyBhbmQgZG9lc24ndCBzYXkgYW55dGhpbmcgYWJvdXQgd2hldGhlciBhIGJyb3dzZXIgc2Vz
c2lvbgorICAgICAgICAjIGlzIGFjdGl2ZS4KKyAgICAgICAgcmV0dXJuIHNlbGYuc2VydmVyLmlz
X2FsaXZlKCkKKworICAgIGRlZiBjbGVhbnVwKHNlbGYpOgorICAgICAgICBzZWxmLnN0b3AoKQor
CisgICAgZGVmIGV4ZWN1dG9yX2Jyb3dzZXIoc2VsZik6CisgICAgICAgIHJldHVybiBFeGVjdXRv
ckJyb3dzZXIsIHsid2ViZHJpdmVyX3VybCI6IHNlbGYuc2VydmVyLnVybH0KZGlmZiAtLWdpdCBh
L1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2Jy
b3dzZXJzL2ZpcmVmb3gucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0
cnVubmVyL3dwdHJ1bm5lci9icm93c2Vycy9maXJlZm94LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwLi5mODY5YzgyYThlZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRy
aXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2Jyb3dzZXJz
L2ZpcmVmb3gucHkKQEAgLTAsMCArMSwzNzggQEAKK2ltcG9ydCBvcworaW1wb3J0IHBsYXRmb3Jt
CitpbXBvcnQgc2lnbmFsCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5cworCitpbXBvcnQg
bW96aW5mbworaW1wb3J0IG1vemxlYWsKK2Zyb20gbW96cHJvY2VzcyBpbXBvcnQgUHJvY2Vzc0hh
bmRsZXIKK2Zyb20gbW96cHJvZmlsZSBpbXBvcnQgRmlyZWZveFByb2ZpbGUsIFByZWZlcmVuY2Vz
Citmcm9tIG1venByb2ZpbGUucGVybWlzc2lvbnMgaW1wb3J0IFNlcnZlckxvY2F0aW9ucworZnJv
bSBtb3pydW5uZXIgaW1wb3J0IEZpcmVmb3hSdW5uZXIKK2Zyb20gbW96cnVubmVyLnV0aWxzIGlt
cG9ydCBnZXRfc3RhY2tfZml4ZXJfZnVuY3Rpb24KK2Zyb20gbW96Y3Jhc2ggaW1wb3J0IG1vemNy
YXNoCisKK2Zyb20gLmJhc2UgaW1wb3J0IChnZXRfZnJlZV9wb3J0LAorICAgICAgICAgICAgICAg
ICAgIEJyb3dzZXIsCisgICAgICAgICAgICAgICAgICAgRXhlY3V0b3JCcm93c2VyLAorICAgICAg
ICAgICAgICAgICAgIHJlcXVpcmVfYXJnLAorICAgICAgICAgICAgICAgICAgIGNtZF9hcmcsCisg
ICAgICAgICAgICAgICAgICAgYnJvd3Nlcl9jb21tYW5kKQorZnJvbSAuLmV4ZWN1dG9ycyBpbXBv
cnQgZXhlY3V0b3Jfa3dhcmdzIGFzIGJhc2VfZXhlY3V0b3Jfa3dhcmdzCitmcm9tIC4uZXhlY3V0
b3JzLmV4ZWN1dG9ybWFyaW9uZXR0ZSBpbXBvcnQgKE1hcmlvbmV0dGVUZXN0aGFybmVzc0V4ZWN1
dG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXJpb25l
dHRlUmVmVGVzdEV4ZWN1dG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBNYXJpb25ldHRlV2RzcGVjRXhlY3V0b3IpCitmcm9tIC4uZW52aXJvbm1lbnQgaW1w
b3J0IGhvc3RuYW1lcworCisKK2hlcmUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5zcGxpdChfX2Zp
bGVfXylbMF0pCisKK19fd3B0cnVubmVyX18gPSB7InByb2R1Y3QiOiAiZmlyZWZveCIsCisgICAg
ICAgICAgICAgICAgICJjaGVja19hcmdzIjogImNoZWNrX2FyZ3MiLAorICAgICAgICAgICAgICAg
ICAiYnJvd3NlciI6ICJGaXJlZm94QnJvd3NlciIsCisgICAgICAgICAgICAgICAgICJleGVjdXRv
ciI6IHsidGVzdGhhcm5lc3MiOiAiTWFyaW9uZXR0ZVRlc3RoYXJuZXNzRXhlY3V0b3IiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlZnRlc3QiOiAiTWFyaW9uZXR0ZVJlZlRlc3RF
eGVjdXRvciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2RzcGVjIjogIk1hcmlv
bmV0dGVXZHNwZWNFeGVjdXRvciJ9LAorICAgICAgICAgICAgICAgICAiYnJvd3Nlcl9rd2FyZ3Mi
OiAiYnJvd3Nlcl9rd2FyZ3MiLAorICAgICAgICAgICAgICAgICAiZXhlY3V0b3Jfa3dhcmdzIjog
ImV4ZWN1dG9yX2t3YXJncyIsCisgICAgICAgICAgICAgICAgICJlbnZfZXh0cmFzIjogImVudl9l
eHRyYXMiLAorICAgICAgICAgICAgICAgICAiZW52X29wdGlvbnMiOiAiZW52X29wdGlvbnMiLAor
ICAgICAgICAgICAgICAgICAicnVuX2luZm9fZXh0cmFzIjogInJ1bl9pbmZvX2V4dHJhcyIsCisg
ICAgICAgICAgICAgICAgICJ1cGRhdGVfcHJvcGVydGllcyI6ICJ1cGRhdGVfcHJvcGVydGllcyJ9
CisKKworZGVmIGdldF90aW1lb3V0X211bHRpcGxpZXIodGVzdF90eXBlLCBydW5faW5mb19kYXRh
LCAqKmt3YXJncyk6CisgICAgaWYga3dhcmdzWyJ0aW1lb3V0X211bHRpcGxpZXIiXSBpcyBub3Qg
Tm9uZToKKyAgICAgICAgcmV0dXJuIGt3YXJnc1sidGltZW91dF9tdWx0aXBsaWVyIl0KKyAgICBp
ZiB0ZXN0X3R5cGUgPT0gInJlZnRlc3QiOgorICAgICAgICBpZiBydW5faW5mb19kYXRhWyJkZWJ1
ZyJdIG9yIHJ1bl9pbmZvX2RhdGEuZ2V0KCJhc2FuIik6CisgICAgICAgICAgICByZXR1cm4gNAor
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIDIKKyAgICBlbGlmIHJ1bl9pbmZvX2Rh
dGFbImRlYnVnIl0gb3IgcnVuX2luZm9fZGF0YS5nZXQoImFzYW4iKToKKyAgICAgICAgcmV0dXJu
IDMKKyAgICByZXR1cm4gMQorCisKK2RlZiBjaGVja19hcmdzKCoqa3dhcmdzKToKKyAgICByZXF1
aXJlX2FyZyhrd2FyZ3MsICJiaW5hcnkiKQorICAgIGlmIGt3YXJnc1sic3NsX3R5cGUiXSAhPSAi
bm9uZSI6CisgICAgICAgIHJlcXVpcmVfYXJnKGt3YXJncywgImNlcnR1dGlsX2JpbmFyeSIpCisK
KworZGVmIGJyb3dzZXJfa3dhcmdzKHRlc3RfdHlwZSwgcnVuX2luZm9fZGF0YSwgKiprd2FyZ3Mp
OgorICAgIHJldHVybiB7ImJpbmFyeSI6IGt3YXJnc1siYmluYXJ5Il0sCisgICAgICAgICAgICAi
cHJlZnNfcm9vdCI6IGt3YXJnc1sicHJlZnNfcm9vdCJdLAorICAgICAgICAgICAgImV4dHJhX3By
ZWZzIjoga3dhcmdzWyJleHRyYV9wcmVmcyJdLAorICAgICAgICAgICAgInRlc3RfdHlwZSI6IHRl
c3RfdHlwZSwKKyAgICAgICAgICAgICJkZWJ1Z19pbmZvIjoga3dhcmdzWyJkZWJ1Z19pbmZvIl0s
CisgICAgICAgICAgICAic3ltYm9sc19wYXRoIjoga3dhcmdzWyJzeW1ib2xzX3BhdGgiXSwKKyAg
ICAgICAgICAgICJzdGFja3dhbGtfYmluYXJ5Ijoga3dhcmdzWyJzdGFja3dhbGtfYmluYXJ5Il0s
CisgICAgICAgICAgICAiY2VydHV0aWxfYmluYXJ5Ijoga3dhcmdzWyJjZXJ0dXRpbF9iaW5hcnki
XSwKKyAgICAgICAgICAgICJjYV9jZXJ0aWZpY2F0ZV9wYXRoIjoga3dhcmdzWyJzc2xfZW52Il0u
Y2FfY2VydF9wYXRoKCksCisgICAgICAgICAgICAiZTEwcyI6IGt3YXJnc1siZ2Vja29fZTEwcyJd
LAorICAgICAgICAgICAgInN0YWNrZml4X2RpciI6IGt3YXJnc1sic3RhY2tmaXhfZGlyIl0sCisg
ICAgICAgICAgICAiYmluYXJ5X2FyZ3MiOiBrd2FyZ3NbImJpbmFyeV9hcmdzIl0sCisgICAgICAg
ICAgICAidGltZW91dF9tdWx0aXBsaWVyIjogZ2V0X3RpbWVvdXRfbXVsdGlwbGllcih0ZXN0X3R5
cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBydW5faW5mb19kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpLAorICAgICAgICAgICAgImxlYWtfY2hlY2si
OiBrd2FyZ3NbImxlYWtfY2hlY2siXSwKKyAgICAgICAgICAgICJzdHlsb190aHJlYWRzIjoga3dh
cmdzWyJzdHlsb190aHJlYWRzIl19CisKKworZGVmIGV4ZWN1dG9yX2t3YXJncyh0ZXN0X3R5cGUs
IHNlcnZlcl9jb25maWcsIGNhY2hlX21hbmFnZXIsIHJ1bl9pbmZvX2RhdGEsCisgICAgICAgICAg
ICAgICAgICAgICoqa3dhcmdzKToKKyAgICBleGVjdXRvcl9rd2FyZ3MgPSBiYXNlX2V4ZWN1dG9y
X2t3YXJncyh0ZXN0X3R5cGUsIHNlcnZlcl9jb25maWcsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2FjaGVfbWFuYWdlciwgKiprd2FyZ3MpCisgICAgZXhlY3V0
b3Jfa3dhcmdzWyJjbG9zZV9hZnRlcl9kb25lIl0gPSB0ZXN0X3R5cGUgIT0gInJlZnRlc3QiCisg
ICAgZXhlY3V0b3Jfa3dhcmdzWyJ0aW1lb3V0X211bHRpcGxpZXIiXSA9IGdldF90aW1lb3V0X211
bHRpcGxpZXIodGVzdF90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bl9pbmZvX2RhdGEsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Kiprd2FyZ3MpCisgICAgaWYgdGVzdF90eXBlID09ICJyZWZ0ZXN0IjoKKyAgICAgICAgZXhlY3V0
b3Jfa3dhcmdzWyJyZWZ0ZXN0X2ludGVybmFsIl0gPSBrd2FyZ3NbInJlZnRlc3RfaW50ZXJuYWwi
XQorICAgICAgICBleGVjdXRvcl9rd2FyZ3NbInJlZnRlc3Rfc2NyZWVuc2hvdCJdID0ga3dhcmdz
WyJyZWZ0ZXN0X3NjcmVlbnNob3QiXQorICAgIGlmIHRlc3RfdHlwZSA9PSAid2RzcGVjIjoKKyAg
ICAgICAgZnhPcHRpb25zID0ge30KKyAgICAgICAgaWYga3dhcmdzWyJiaW5hcnkiXToKKyAgICAg
ICAgICAgIGZ4T3B0aW9uc1siYmluYXJ5Il0gPSBrd2FyZ3NbImJpbmFyeSJdCisgICAgICAgIGlm
IGt3YXJnc1siYmluYXJ5X2FyZ3MiXToKKyAgICAgICAgICAgIGZ4T3B0aW9uc1siYXJncyJdID0g
a3dhcmdzWyJiaW5hcnlfYXJncyJdCisgICAgICAgIGZ4T3B0aW9uc1sicHJlZnMiXSA9IHsKKyAg
ICAgICAgICAgICJuZXR3b3JrLmRucy5sb2NhbERvbWFpbnMiOiAiLCIuam9pbihob3N0bmFtZXMp
CisgICAgICAgIH0KKyAgICAgICAgY2FwYWJpbGl0aWVzID0geyJtb3o6ZmlyZWZveE9wdGlvbnMi
OiBmeE9wdGlvbnN9CisgICAgICAgIGV4ZWN1dG9yX2t3YXJnc1siY2FwYWJpbGl0aWVzIl0gPSBj
YXBhYmlsaXRpZXMKKyAgICByZXR1cm4gZXhlY3V0b3Jfa3dhcmdzCisKKworZGVmIGVudl9leHRy
YXMoKiprd2FyZ3MpOgorICAgIHJldHVybiBbXQorCisKK2RlZiBlbnZfb3B0aW9ucygpOgorICAg
IHJldHVybiB7Imhvc3QiOiAiMTI3LjAuMC4xIiwKKyAgICAgICAgICAgICJleHRlcm5hbF9ob3N0
IjogIndlYi1wbGF0Zm9ybS50ZXN0IiwKKyAgICAgICAgICAgICJiaW5kX2hvc3RuYW1lIjogImZh
bHNlIiwKKyAgICAgICAgICAgICJjZXJ0aWZpY2F0ZV9kb21haW4iOiAid2ViLXBsYXRmb3JtLnRl
c3QiLAorICAgICAgICAgICAgInN1cHBvcnRzX2RlYnVnZ2VyIjogVHJ1ZX0KKworCitkZWYgcnVu
X2luZm9fZXh0cmFzKCoqa3dhcmdzKToKKyAgICByZXR1cm4geyJlMTBzIjoga3dhcmdzWyJnZWNr
b19lMTBzIl0sCisgICAgICAgICAgICAiaGVhZGxlc3MiOiAiTU9aX0hFQURMRVNTIiBpbiBvcy5l
bnZpcm9ufQorCisKK2RlZiB1cGRhdGVfcHJvcGVydGllcygpOgorICAgIHJldHVybiAoWyJkZWJ1
ZyIsICJzdHlsbyIsICJlMTBzIiwgIm9zIiwgInZlcnNpb24iLCAicHJvY2Vzc29yIiwgImJpdHMi
XSwKKyAgICAgICAgICAgIHsiZGVidWciLCAiZTEwcyIsICJzdHlsbyJ9KQorCisKK2NsYXNzIEZp
cmVmb3hCcm93c2VyKEJyb3dzZXIpOgorICAgIHVzZWRfcG9ydHMgPSBzZXQoKQorICAgIGluaXRf
dGltZW91dCA9IDYwCisgICAgc2h1dGRvd25fdGltZW91dCA9IDYwCisKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgbG9nZ2VyLCBiaW5hcnksIHByZWZzX3Jvb3QsIHRlc3RfdHlwZSwgZXh0cmFfcHJl
ZnM9Tm9uZSwgZGVidWdfaW5mbz1Ob25lLAorICAgICAgICAgICAgICAgICBzeW1ib2xzX3BhdGg9
Tm9uZSwgc3RhY2t3YWxrX2JpbmFyeT1Ob25lLCBjZXJ0dXRpbF9iaW5hcnk9Tm9uZSwKKyAgICAg
ICAgICAgICAgICAgY2FfY2VydGlmaWNhdGVfcGF0aD1Ob25lLCBlMTBzPUZhbHNlLCBzdGFja2Zp
eF9kaXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgYmluYXJ5X2FyZ3M9Tm9uZSwgdGltZW91dF9t
dWx0aXBsaWVyPU5vbmUsIGxlYWtfY2hlY2s9RmFsc2UsIHN0eWxvX3RocmVhZHM9MSk6CisgICAg
ICAgIEJyb3dzZXIuX19pbml0X18oc2VsZiwgbG9nZ2VyKQorICAgICAgICBzZWxmLmJpbmFyeSA9
IGJpbmFyeQorICAgICAgICBzZWxmLnByZWZzX3Jvb3QgPSBwcmVmc19yb290CisgICAgICAgIHNl
bGYudGVzdF90eXBlID0gdGVzdF90eXBlCisgICAgICAgIHNlbGYuZXh0cmFfcHJlZnMgPSBleHRy
YV9wcmVmcworICAgICAgICBzZWxmLm1hcmlvbmV0dGVfcG9ydCA9IE5vbmUKKyAgICAgICAgc2Vs
Zi5ydW5uZXIgPSBOb25lCisgICAgICAgIHNlbGYuZGVidWdfaW5mbyA9IGRlYnVnX2luZm8KKyAg
ICAgICAgc2VsZi5wcm9maWxlID0gTm9uZQorICAgICAgICBzZWxmLnN5bWJvbHNfcGF0aCA9IHN5
bWJvbHNfcGF0aAorICAgICAgICBzZWxmLnN0YWNrd2Fsa19iaW5hcnkgPSBzdGFja3dhbGtfYmlu
YXJ5CisgICAgICAgIHNlbGYuY2FfY2VydGlmaWNhdGVfcGF0aCA9IGNhX2NlcnRpZmljYXRlX3Bh
dGgKKyAgICAgICAgc2VsZi5jZXJ0dXRpbF9iaW5hcnkgPSBjZXJ0dXRpbF9iaW5hcnkKKyAgICAg
ICAgc2VsZi5lMTBzID0gZTEwcworICAgICAgICBzZWxmLmJpbmFyeV9hcmdzID0gYmluYXJ5X2Fy
Z3MKKyAgICAgICAgaWYgc3RhY2tmaXhfZGlyOgorICAgICAgICAgICAgc2VsZi5zdGFja19maXhl
ciA9IGdldF9zdGFja19maXhlcl9mdW5jdGlvbihzdGFja2ZpeF9kaXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3ltYm9sc19w
YXRoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5zdGFja19maXhlciA9IE5vbmUK
KworICAgICAgICBpZiB0aW1lb3V0X211bHRpcGxpZXI6CisgICAgICAgICAgICBzZWxmLmluaXRf
dGltZW91dCA9IHNlbGYuaW5pdF90aW1lb3V0ICogdGltZW91dF9tdWx0aXBsaWVyCisKKyAgICAg
ICAgc2VsZi5sZWFrX3JlcG9ydF9maWxlID0gTm9uZQorICAgICAgICBzZWxmLmxlYWtfY2hlY2sg
PSBsZWFrX2NoZWNrCisgICAgICAgIHNlbGYuc3R5bG9fdGhyZWFkcyA9IHN0eWxvX3RocmVhZHMK
KworICAgIGRlZiBzZXR0aW5ncyhzZWxmLCB0ZXN0KToKKyAgICAgICAgcmV0dXJuIHsiY2hlY2tf
bGVha3MiOiBzZWxmLmxlYWtfY2hlY2sgYW5kIG5vdCB0ZXN0LmxlYWtzfQorCisgICAgZGVmIHN0
YXJ0KHNlbGYsICoqa3dhcmdzKToKKyAgICAgICAgaWYgc2VsZi5tYXJpb25ldHRlX3BvcnQgaXMg
Tm9uZToKKyAgICAgICAgICAgIHNlbGYubWFyaW9uZXR0ZV9wb3J0ID0gZ2V0X2ZyZWVfcG9ydCgy
ODI4LCBleGNsdWRlPXNlbGYudXNlZF9wb3J0cykKKyAgICAgICAgICAgIHNlbGYudXNlZF9wb3J0
cy5hZGQoc2VsZi5tYXJpb25ldHRlX3BvcnQpCisKKyAgICAgICAgZW52ID0gb3MuZW52aXJvbi5j
b3B5KCkKKyAgICAgICAgZW52WyJNT1pfQ1JBU0hSRVBPUlRFUiJdID0gIjEiCisgICAgICAgIGVu
dlsiTU9aX0NSQVNIUkVQT1JURVJfU0hVVERPV04iXSA9ICIxIgorICAgICAgICBlbnZbIk1PWl9E
SVNBQkxFX05PTkxPQ0FMX0NPTk5FQ1RJT05TIl0gPSAiMSIKKyAgICAgICAgZW52WyJTVFlMT19U
SFJFQURTIl0gPSBzdHIoc2VsZi5zdHlsb190aHJlYWRzKQorCisgICAgICAgIGxvY2F0aW9ucyA9
IFNlcnZlckxvY2F0aW9ucyhmaWxlbmFtZT1vcy5wYXRoLmpvaW4oaGVyZSwgInNlcnZlci1sb2Nh
dGlvbnMudHh0IikpCisKKyAgICAgICAgcHJlZmVyZW5jZXMgPSBzZWxmLmxvYWRfcHJlZnMoKQor
CisgICAgICAgIHNlbGYucHJvZmlsZSA9IEZpcmVmb3hQcm9maWxlKGxvY2F0aW9ucz1sb2NhdGlv
bnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZlcmVuY2VzPXBy
ZWZlcmVuY2VzKQorICAgICAgICBzZWxmLnByb2ZpbGUuc2V0X3ByZWZlcmVuY2VzKHsibWFyaW9u
ZXR0ZS5wb3J0Ijogc2VsZi5tYXJpb25ldHRlX3BvcnQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJkb20uZGlzYWJsZV9vcGVuX2R1cmluZ19sb2FkIjogRmFsc2UsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuZXR3b3JrLmRucy5sb2NhbERv
bWFpbnMiOiAiLCIuam9pbihob3N0bmFtZXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAibmV0d29yay5wcm94eS50eXBlIjogMCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgInBsYWNlcy5oaXN0b3J5LmVuYWJsZWQiOiBGYWxzZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRvbS5zZW5kX2FmdGVyX3BhaW50X3Rv
X2NvbnRlbnQiOiBUcnVlfSkKKyAgICAgICAgaWYgc2VsZi5lMTBzOgorICAgICAgICAgICAgc2Vs
Zi5wcm9maWxlLnNldF9wcmVmZXJlbmNlcyh7ImJyb3dzZXIudGFicy5yZW1vdGUuYXV0b3N0YXJ0
IjogVHJ1ZX0pCisKKyAgICAgICAgaWYgc2VsZi50ZXN0X3R5cGUgPT0gInJlZnRlc3QiOgorICAg
ICAgICAgICAgc2VsZi5wcm9maWxlLnNldF9wcmVmZXJlbmNlcyh7ImxheW91dC5pbnRlcnJ1cHRp
YmxlLXJlZmxvdy5lbmFibGVkIjogRmFsc2V9KQorCisgICAgICAgIGlmIHNlbGYubGVha19jaGVj
ayBhbmQga3dhcmdzLmdldCgiY2hlY2tfbGVha3MiLCBUcnVlKToKKyAgICAgICAgICAgIHNlbGYu
bGVha19yZXBvcnRfZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLnByb2ZpbGUucHJvZmlsZSwgInJ1
bnRlc3RzX2xlYWtzLmxvZyIpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLmxl
YWtfcmVwb3J0X2ZpbGUpOgorICAgICAgICAgICAgICAgIG9zLnJlbW92ZShzZWxmLmxlYWtfcmVw
b3J0X2ZpbGUpCisgICAgICAgICAgICBlbnZbIlhQQ09NX01FTV9CTE9BVF9MT0ciXSA9IHNlbGYu
bGVha19yZXBvcnRfZmlsZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5sZWFrX3Jl
cG9ydF9maWxlID0gTm9uZQorCisgICAgICAgICMgQnVnIDEyNjI5NTQ6IHdpbnhwICsgZTEwcywg
ZGlzYWJsZSBod2FjY2VsCisgICAgICAgIGlmIChzZWxmLmUxMHMgYW5kIHBsYXRmb3JtLnN5c3Rl
bSgpIGluICgiV2luZG93cyIsICJNaWNyb3NvZnQiKSBhbmQKKyAgICAgICAgICAgICc1LjEnIGlu
IHBsYXRmb3JtLnZlcnNpb24oKSk6CisgICAgICAgICAgICBzZWxmLnByb2ZpbGUuc2V0X3ByZWZl
cmVuY2VzKHsibGF5ZXJzLmFjY2VsZXJhdGlvbi5kaXNhYmxlZCI6IFRydWV9KQorCisgICAgICAg
IGlmIHNlbGYuY2FfY2VydGlmaWNhdGVfcGF0aCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNl
bGYuc2V0dXBfc3NsKCkKKworICAgICAgICBkZWJ1Z19hcmdzLCBjbWQgPSBicm93c2VyX2NvbW1h
bmQoc2VsZi5iaW5hcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxmLmJpbmFyeV9hcmdzIGlmIHNlbGYuYmluYXJ5X2FyZ3MgZWxzZSBbXSArCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY21kX2FyZygibWFyaW9uZXR0ZSIp
LCAiYWJvdXQ6YmxhbmsiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGYuZGVidWdfaW5mbykKKworICAgICAgICBzZWxmLnJ1bm5lciA9IEZpcmVmb3hSdW5u
ZXIocHJvZmlsZT1zZWxmLnByb2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBiaW5hcnk9Y21kWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y21kYXJncz1jbWRbMTpdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52
PWVudiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NfY2xhc3M9
UHJvY2Vzc0hhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9j
ZXNzX2FyZ3M9eyJwcm9jZXNzT3V0cHV0TGluZSI6IFtzZWxmLm9uX291dHB1dF19KQorCisgICAg
ICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJTdGFydGluZyBGaXJlZm94IikKKworICAgICAgICBzZWxm
LnJ1bm5lci5zdGFydChkZWJ1Z19hcmdzPWRlYnVnX2FyZ3MsIGludGVyYWN0aXZlPXNlbGYuZGVi
dWdfaW5mbyBhbmQgc2VsZi5kZWJ1Z19pbmZvLmludGVyYWN0aXZlKQorICAgICAgICBzZWxmLmxv
Z2dlci5kZWJ1ZygiRmlyZWZveCBTdGFydGVkIikKKworICAgIGRlZiBsb2FkX3ByZWZzKHNlbGYp
OgorICAgICAgICBwcmVmcyA9IFByZWZlcmVuY2VzKCkKKworICAgICAgICBwcmVmc19wYXRoID0g
b3MucGF0aC5qb2luKHNlbGYucHJlZnNfcm9vdCwgInByZWZzX2dlbmVyYWwuanMiKQorICAgICAg
ICBpZiBvcy5wYXRoLmV4aXN0cyhwcmVmc19wYXRoKToKKyAgICAgICAgICAgIHByZWZzLmFkZChQ
cmVmZXJlbmNlcy5yZWFkX3ByZWZzKHByZWZzX3BhdGgpKQorICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgc2VsZi5sb2dnZXIud2FybmluZygiRmFpbGVkIHRvIGZpbmQgYmFzZSBwcmVmcyBmaWxl
IGluICVzIiAlIHByZWZzX3BhdGgpCisKKyAgICAgICAgIyBBZGQgYW55IGN1c3RvbSBwcmVmZXJl
bmNlcworICAgICAgICBwcmVmcy5hZGQoc2VsZi5leHRyYV9wcmVmcywgY2FzdD1UcnVlKQorCisg
ICAgICAgIHJldHVybiBwcmVmcygpCisKKyAgICBkZWYgc3RvcChzZWxmLCBmb3JjZT1GYWxzZSk6
CisgICAgICAgIGlmIHNlbGYucnVubmVyIGlzIG5vdCBOb25lIGFuZCBzZWxmLnJ1bm5lci5pc19y
dW5uaW5nKCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgIyBGb3IgRmlyZWZv
eCB3ZSBhc3N1bWUgdGhhdCBzdG9wcGluZyB0aGUgcnVubmVyIHByb21wdHMgdGhlCisgICAgICAg
ICAgICAgICAgIyBicm93c2VyIHRvIHNodXQgZG93bi4gVGhpcyBhbGxvd3MgdGhlIGxlYWsgbG9n
IHRvIGJlIHdyaXR0ZW4KKyAgICAgICAgICAgICAgICBmb3IgY2xlYW4sIHN0b3BfZiBpbiBbKFRy
dWUsIGxhbWJkYTogc2VsZi5ydW5uZXIud2FpdChzZWxmLnNodXRkb3duX3RpbWVvdXQpKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZhbHNlLCBsYW1iZGE6IHNlbGYu
cnVubmVyLnN0b3Aoc2lnbmFsLlNJR1RFUk0pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKEZhbHNlLCBsYW1iZGE6IHNlbGYucnVubmVyLnN0b3Aoc2lnbmFsLlNJR0tJ
TEwpKV06CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBmb3JjZSBvciBub3QgY2xlYW46Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXRjb2RlID0gc3RvcF9mKCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIHJldGNvZGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5sb2dnZXIuaW5mbygiQnJvd3NlciBleGl0ZWQgd2l0aCByZXR1cm4gY29kZSAl
cyIgJSByZXRjb2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAg
ICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICAjIFRoaXMgY2FuIGhhcHBlbiBv
biBXaW5kb3dzIGlmIHRoZSBwcm9jZXNzIGlzIGFscmVhZHkgZGVhZAorICAgICAgICAgICAgICAg
IHBhc3MKKyAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcoInN0b3BwZWQiKQorCisgICAgZGVmIHBy
b2Nlc3NfbGVha3Moc2VsZik6CisgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJQUk9DRVNTIExF
QUtTICVzIiAlIHNlbGYubGVha19yZXBvcnRfZmlsZSkKKyAgICAgICAgaWYgc2VsZi5sZWFrX3Jl
cG9ydF9maWxlIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgbW96bGVhay5w
cm9jZXNzX2xlYWtfbG9nKAorICAgICAgICAgICAgc2VsZi5sZWFrX3JlcG9ydF9maWxlLAorICAg
ICAgICAgICAgbGVha190aHJlc2hvbGRzPXsKKyAgICAgICAgICAgICAgICAiZGVmYXVsdCI6IDAs
CisgICAgICAgICAgICAgICAgInRhYiI6IDEwMDAwLCAgIyBTZWUgZGVwZW5kZW5jaWVzIG9mIGJ1
ZyAxMDUxMjMwLgorICAgICAgICAgICAgICAgICMgR01QIHJhcmVseSBnZXRzIGEgbG9nLCBidXQg
d2hlbiBpdCBkb2VzLCBpdCBsZWFrcyBhIGxpdHRsZS4KKyAgICAgICAgICAgICAgICAiZ2Vja29t
ZWRpYXBsdWdpbiI6IDIwMDAwLAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGlnbm9yZV9t
aXNzaW5nX2xlYWtzPVsiZ2Vja29tZWRpYXBsdWdpbiJdLAorICAgICAgICAgICAgbG9nPXNlbGYu
bG9nZ2VyLAorICAgICAgICAgICAgc3RhY2tfZml4ZXI9c2VsZi5zdGFja19maXhlcgorICAgICAg
ICApCisKKyAgICBkZWYgcGlkKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnJ1bm5lci5wcm9jZXNz
X2hhbmRsZXIgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgdHJ5
OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucnVubmVyLnByb2Nlc3NfaGFuZGxlci5waWQKKyAg
ICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKwor
ICAgIGRlZiBvbl9vdXRwdXQoc2VsZiwgbGluZSk6CisgICAgICAgICIiIldyaXRlIGEgbGluZSBv
ZiBvdXRwdXQgZnJvbSB0aGUgZmlyZWZveCBwcm9jZXNzIHRvIHRoZSBsb2ciIiIKKyAgICAgICAg
ZGF0YSA9IGxpbmUuZGVjb2RlKCJ1dGY4IiwgInJlcGxhY2UiKQorICAgICAgICBpZiBzZWxmLnN0
YWNrX2ZpeGVyOgorICAgICAgICAgICAgZGF0YSA9IHNlbGYuc3RhY2tfZml4ZXIoZGF0YSkKKyAg
ICAgICAgc2VsZi5sb2dnZXIucHJvY2Vzc19vdXRwdXQoc2VsZi5waWQoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29tbWFuZD0iICIuam9pbihzZWxmLnJ1bm5lci5jb21tYW5kKSkKKworICAgIGRl
ZiBpc19hbGl2ZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5ydW5uZXI6CisgICAgICAgICAgICBy
ZXR1cm4gc2VsZi5ydW5uZXIuaXNfcnVubmluZygpCisgICAgICAgIHJldHVybiBGYWxzZQorCisg
ICAgZGVmIGNsZWFudXAoc2VsZik6CisgICAgICAgIHNlbGYuc3RvcCgpCisgICAgICAgIHNlbGYu
cHJvY2Vzc19sZWFrcygpCisKKyAgICBkZWYgZXhlY3V0b3JfYnJvd3NlcihzZWxmKToKKyAgICAg
ICAgYXNzZXJ0IHNlbGYubWFyaW9uZXR0ZV9wb3J0IGlzIG5vdCBOb25lCisgICAgICAgIHJldHVy
biBFeGVjdXRvckJyb3dzZXIsIHsibWFyaW9uZXR0ZV9wb3J0Ijogc2VsZi5tYXJpb25ldHRlX3Bv
cnR9CisKKyAgICBkZWYgY2hlY2tfZm9yX2NyYXNoZXMoc2VsZik6CisgICAgICAgIGR1bXBfZGly
ID0gb3MucGF0aC5qb2luKHNlbGYucHJvZmlsZS5wcm9maWxlLCAibWluaWR1bXBzIikKKworICAg
ICAgICByZXR1cm4gYm9vbChtb3pjcmFzaC5jaGVja19mb3JfY3Jhc2hlcyhkdW1wX2RpciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sc19wYXRo
PXNlbGYuc3ltYm9sc19wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGFja3dhbGtfYmluYXJ5PXNlbGYuc3RhY2t3YWxrX2JpbmFyeSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVpZXQ9VHJ1ZSkpCisK
KyAgICBkZWYgbG9nX2NyYXNoKHNlbGYsIHByb2Nlc3MsIHRlc3QpOgorICAgICAgICBkdW1wX2Rp
ciA9IG9zLnBhdGguam9pbihzZWxmLnByb2ZpbGUucHJvZmlsZSwgIm1pbmlkdW1wcyIpCisKKyAg
ICAgICAgbW96Y3Jhc2gubG9nX2NyYXNoZXMoc2VsZi5sb2dnZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGR1bXBfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1i
b2xzX3BhdGg9c2VsZi5zeW1ib2xzX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0YWNrd2Fsa19iaW5hcnk9c2VsZi5zdGFja3dhbGtfYmluYXJ5LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwcm9jZXNzPXByb2Nlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRlc3Q9dGVzdCkKKworICAgIGRlZiBzZXR1cF9zc2woc2VsZik6CisgICAgICAgICIiIkNy
ZWF0ZSBhIGNlcnRpZmljYXRlIGRhdGFiYXNlIHRvIHVzZSBpbiB0aGUgdGVzdCBwcm9maWxlLiBU
aGlzIGlzIGNvbmZpZ3VyZWQKKyAgICAgICAgdG8gdHJ1c3QgdGhlIENBIENlcnRpZmljYXRlIHRo
YXQgaGFzIHNpZ25lZCB0aGUgd2ViLXBsYXRmb3JtLnRlc3Qgc2VydmVyCisgICAgICAgIGNlcnRp
ZmljYXRlLiIiIgorCisgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oIlNldHRpbmcgdXAgc3NsIikK
KworICAgICAgICAjIE1ha2Ugc3VyZSB0aGUgY2VydHV0aWwgbGlicmFyaWVzIGZyb20gdGhlIHNv
dXJjZSB0cmVlIGFyZSBsb2FkZWQgd2hlbiB1c2luZyBhCisgICAgICAgICMgbG9jYWwgY29weSBv
ZiBjZXJ0dXRpbAorICAgICAgICAjIFRPRE86IE1heWJlIG9ubHkgc2V0IHRoaXMgaWYgY2VydHV0
aWwgd29uJ3QgbGF1bmNoPworICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAg
ICBjZXJ0dXRpbF9kaXIgPSBvcy5wYXRoLmRpcm5hbWUoc2VsZi5iaW5hcnkpCisgICAgICAgIGlm
IG1vemluZm8uaXNNYWM6CisgICAgICAgICAgICBlbnZfdmFyID0gIkRZTERfTElCUkFSWV9QQVRI
IgorICAgICAgICBlbGlmIG1vemluZm8uaXNVbml4OgorICAgICAgICAgICAgZW52X3ZhciA9ICJM
RF9MSUJSQVJZX1BBVEgiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBlbnZfdmFyID0gIlBB
VEgiCisKKworICAgICAgICBlbnZbZW52X3Zhcl0gPSAob3MucGF0aC5wYXRoc2VwLmpvaW4oW2Nl
cnR1dGlsX2RpciwgZW52W2Vudl92YXJdXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGVu
dl92YXIgaW4gZW52IGVsc2UgY2VydHV0aWxfZGlyKS5lbmNvZGUoCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmcoKSBvciAndXRmLTgnLCAn
cmVwbGFjZScpCisKKyAgICAgICAgZGVmIGNlcnR1dGlsKCphcmdzKToKKyAgICAgICAgICAgIGNt
ZCA9IFtzZWxmLmNlcnR1dGlsX2JpbmFyeV0gKyBsaXN0KGFyZ3MpCisgICAgICAgICAgICBzZWxm
LmxvZ2dlci5wcm9jZXNzX291dHB1dCgiY2VydHV0aWwiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52
PWVudiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiICIuam9pbihjbWQpKQorCisgICAgICAgIHB3X3BhdGgg
PSBvcy5wYXRoLmpvaW4oc2VsZi5wcm9maWxlLnByb2ZpbGUsICIuY3J0ZGJwdyIpCisgICAgICAg
IHdpdGggb3Blbihwd19wYXRoLCAidyIpIGFzIGY6CisgICAgICAgICAgICAjIFVzZSBlbXB0eSBw
YXNzd29yZCBmb3IgY2VydGlmaWNhdGUgZGIKKyAgICAgICAgICAgIGYud3JpdGUoIlxuIikKKwor
ICAgICAgICBjZXJ0X2RiX3BhdGggPSBzZWxmLnByb2ZpbGUucHJvZmlsZQorCisgICAgICAgICMg
Q3JlYXRlIGEgbmV3IGNlcnRpZmljYXRlIGRiCisgICAgICAgIGNlcnR1dGlsKCItTiIsICItZCIs
IGNlcnRfZGJfcGF0aCwgIi1mIiwgcHdfcGF0aCkKKworICAgICAgICAjIEFkZCB0aGUgQ0EgY2Vy
dGlmaWNhdGUgdG8gdGhlIGRhdGFiYXNlIGFuZCBtYXJrIGFzIHRydXN0ZWQgdG8gaXNzdWUgc2Vy
dmVyIGNlcnRzCisgICAgICAgIGNlcnR1dGlsKCItQSIsICItZCIsIGNlcnRfZGJfcGF0aCwgIi1m
IiwgcHdfcGF0aCwgIi10IiwgIkNULCwiLAorICAgICAgICAgICAgICAgICAiLW4iLCAid2ViLXBs
YXRmb3JtLXRlc3RzIiwgIi1pIiwgc2VsZi5jYV9jZXJ0aWZpY2F0ZV9wYXRoKQorCisgICAgICAg
ICMgTGlzdCBhbGwgY2VydHMgaW4gdGhlIGRhdGFiYXNlCisgICAgICAgIGNlcnR1dGlsKCItTCIs
ICItZCIsIGNlcnRfZGJfcGF0aCkKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVk
L3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2Jyb3dzZXJzL2llLnB5IGIvV2ViRHJpdmVy
VGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvYnJvd3NlcnMvaWUu
cHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmM5ODEwMjRmMjJiCi0t
LSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1
bm5lci93cHRydW5uZXIvYnJvd3NlcnMvaWUucHkKQEAgLTAsMCArMSw4MSBAQAorZnJvbSAuYmFz
ZSBpbXBvcnQgQnJvd3NlciwgRXhlY3V0b3JCcm93c2VyLCByZXF1aXJlX2FyZworZnJvbSAuLndl
YmRyaXZlcl9zZXJ2ZXIgaW1wb3J0IEludGVybmV0RXhwbG9yZXJEcml2ZXJTZXJ2ZXIKK2Zyb20g
Li5leGVjdXRvcnMgaW1wb3J0IGV4ZWN1dG9yX2t3YXJncyBhcyBiYXNlX2V4ZWN1dG9yX2t3YXJn
cworZnJvbSAuLmV4ZWN1dG9ycy5leGVjdXRvcnNlbGVuaXVtIGltcG9ydCAoU2VsZW5pdW1UZXN0
aGFybmVzc0V4ZWN1dG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgU2VsZW5pdW1SZWZUZXN0RXhlY3V0b3IpCitmcm9tIC4uZXhlY3V0b3JzLmV4ZWN1dG9yaW50
ZXJuZXRleHBsb3JlciBpbXBvcnQgSW50ZXJuZXRFeHBsb3JlckRyaXZlcldkc3BlY0V4ZWN1dG9y
CisKK19fd3B0cnVubmVyX18gPSB7InByb2R1Y3QiOiAiaWUiLAorICAgICAgICAgICAgICAgICAi
Y2hlY2tfYXJncyI6ICJjaGVja19hcmdzIiwKKyAgICAgICAgICAgICAgICAgImJyb3dzZXIiOiAi
SW50ZXJuZXRFeHBsb3JlckJyb3dzZXIiLAorICAgICAgICAgICAgICAgICAiZXhlY3V0b3IiOiB7
InRlc3RoYXJuZXNzIjogIlNlbGVuaXVtVGVzdGhhcm5lc3NFeGVjdXRvciIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAicmVmdGVzdCI6ICJTZWxlbml1bVJlZlRlc3RFeGVjdXRvciIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2RzcGVjIjogIkludGVybmV0RXhwbG9y
ZXJEcml2ZXJXZHNwZWNFeGVjdXRvciJ9LAorICAgICAgICAgICAgICAgICAiYnJvd3Nlcl9rd2Fy
Z3MiOiAiYnJvd3Nlcl9rd2FyZ3MiLAorICAgICAgICAgICAgICAgICAiZXhlY3V0b3Jfa3dhcmdz
IjogImV4ZWN1dG9yX2t3YXJncyIsCisgICAgICAgICAgICAgICAgICJlbnZfZXh0cmFzIjogImVu
dl9leHRyYXMiLAorICAgICAgICAgICAgICAgICAiZW52X29wdGlvbnMiOiAiZW52X29wdGlvbnMi
fQorCisKK2RlZiBjaGVja19hcmdzKCoqa3dhcmdzKToKKyAgICByZXF1aXJlX2FyZyhrd2FyZ3Ms
ICJ3ZWJkcml2ZXJfYmluYXJ5IikKKworZGVmIGJyb3dzZXJfa3dhcmdzKHRlc3RfdHlwZSwgcnVu
X2luZm9fZGF0YSwgKiprd2FyZ3MpOgorICAgIHJldHVybiB7IndlYmRyaXZlcl9iaW5hcnkiOiBr
d2FyZ3NbIndlYmRyaXZlcl9iaW5hcnkiXSwKKyAgICAgICAgICAgICJ3ZWJkcml2ZXJfYXJncyI6
IGt3YXJncy5nZXQoIndlYmRyaXZlcl9hcmdzIil9CisKK2RlZiBleGVjdXRvcl9rd2FyZ3ModGVz
dF90eXBlLCBzZXJ2ZXJfY29uZmlnLCBjYWNoZV9tYW5hZ2VyLCBydW5faW5mb19kYXRhLAorICAg
ICAgICAgICAgICAgICAgICAqKmt3YXJncyk6CisgICAgZnJvbSBzZWxlbml1bS53ZWJkcml2ZXIg
aW1wb3J0IERlc2lyZWRDYXBhYmlsaXRpZXMKKworICAgIGllT3B0aW9ucyA9IHt9CisgICAgaWVP
cHRpb25zWyJyZXF1aXJlV2luZG93Rm9jdXMiXSA9IFRydWUKKyAgICBjYXBhYmlsaXRpZXMgPSB7
fQorICAgIGNhcGFiaWxpdGllc1siYnJvd3Nlck5hbWUiXSA9ICJpbnRlcm5ldCBleHBsb3JlciIK
KyAgICBjYXBhYmlsaXRpZXNbInBsYXRmb3JtTmFtZSJdID0gIndpbmRvd3MiCisgICAgY2FwYWJp
bGl0aWVzWyJzZTppZU9wdGlvbnMiXSA9IGllT3B0aW9ucworICAgIGV4ZWN1dG9yX2t3YXJncyA9
IGJhc2VfZXhlY3V0b3Jfa3dhcmdzKHRlc3RfdHlwZSwgc2VydmVyX2NvbmZpZywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZV9tYW5hZ2VyLCAqKmt3YXJn
cykKKyAgICBleGVjdXRvcl9rd2FyZ3NbImNsb3NlX2FmdGVyX2RvbmUiXSA9IFRydWUKKyAgICBl
eGVjdXRvcl9rd2FyZ3NbImNhcGFiaWxpdGllcyJdID0gY2FwYWJpbGl0aWVzCisgICAgcmV0dXJu
IGV4ZWN1dG9yX2t3YXJncworCitkZWYgZW52X2V4dHJhcygqKmt3YXJncyk6CisgICAgcmV0dXJu
IFtdCisKK2RlZiBlbnZfb3B0aW9ucygpOgorICAgIHJldHVybiB7Imhvc3QiOiAid2ViLXBsYXRm
b3JtLnRlc3QiLAorICAgICAgICAgICAgImJpbmRfaG9zdG5hbWUiOiAidHJ1ZSIsCisgICAgICAg
ICAgICAic3VwcG9ydHNfZGVidWdnZXIiOiBGYWxzZX0KKworY2xhc3MgSW50ZXJuZXRFeHBsb3Jl
ckJyb3dzZXIoQnJvd3Nlcik6CisgICAgdXNlZF9wb3J0cyA9IHNldCgpCisKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgbG9nZ2VyLCB3ZWJkcml2ZXJfYmluYXJ5LCB3ZWJkcml2ZXJfYXJncz1Ob25l
KToKKyAgICAgICAgQnJvd3Nlci5fX2luaXRfXyhzZWxmLCBsb2dnZXIpCisgICAgICAgIHNlbGYu
c2VydmVyID0gSW50ZXJlbnRFeHBsb3JlckRyaXZlclNlcnZlcihzZWxmLmxvZ2dlciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmFyeT13ZWJk
cml2ZXJfYmluYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXJncz13ZWJkcml2ZXJfYXJncykKKyAgICAgICAgc2VsZi53ZWJkcml2ZXJfaG9z
dCA9ICJsb2NhbGhvc3QiCisgICAgICAgIHNlbGYud2ViZHJpdmVyX3BvcnQgPSBzZWxmLnNlcnZl
ci5wb3J0CisKKyAgICBkZWYgc3RhcnQoc2VsZiwgKiprd2FyZ3MpOgorICAgICAgICBzZWxmLnNl
cnZlci5zdGFydCgpCisKKyAgICBkZWYgc3RvcChzZWxmLCBmb3JjZT1GYWxzZSk6CisgICAgICAg
IHNlbGYuc2VydmVyLnN0b3AoZm9yY2U9Zm9yY2UpCisKKyAgICBkZWYgcGlkKHNlbGYpOgorICAg
ICAgICByZXR1cm4gc2VsZi5zZXJ2ZXIucGlkCisKKyAgICBkZWYgaXNfYWxpdmUoc2VsZik6Cisg
ICAgICAgICMgVE9ETyhhdG8pOiBUaGlzIG9ubHkgaW5kaWNhdGVzIHRoZSBzZXJ2ZXIgaXMgYWxp
dmUsCisgICAgICAgICMgYW5kIGRvZXNuJ3Qgc2F5IGFueXRoaW5nIGFib3V0IHdoZXRoZXIgYSBi
cm93c2VyIHNlc3Npb24KKyAgICAgICAgIyBpcyBhY3RpdmUuCisgICAgICAgIHJldHVybiBzZWxm
LnNlcnZlci5pc19hbGl2ZSgpCisKKyAgICBkZWYgY2xlYW51cChzZWxmKToKKyAgICAgICAgc2Vs
Zi5zdG9wKCkKKworICAgIGRlZiBleGVjdXRvcl9icm93c2VyKHNlbGYpOgorICAgICAgICByZXR1
cm4gRXhlY3V0b3JCcm93c2VyLCB7IndlYmRyaXZlcl91cmwiOiBzZWxmLnNlcnZlci51cmx9CmRp
ZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dw
dHJ1bm5lci9icm93c2Vycy9zYXVjZS5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90
b29scy93cHRydW5uZXIvd3B0cnVubmVyL2Jyb3dzZXJzL3NhdWNlLnB5Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jMzhkZDBiMjg5ZAotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2Jy
b3dzZXJzL3NhdWNlLnB5CkBAIC0wLDAgKzEsMjA4IEBACisjIFRoaXMgU291cmNlIENvZGUgRm9y
bSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMKKyMgTGljZW5z
ZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGgg
dGhpcyBmaWxlLAorIyBZb3UgY2FuIG9idGFpbiBvbmUgYXQgaHR0cDovL21vemlsbGEub3JnL01Q
TC8yLjAvLgorCitpbXBvcnQgZ2xvYgoraW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCitpbXBvcnQg
c3VicHJvY2VzcworaW1wb3J0IHRhcmZpbGUKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHRpbWUK
K2Zyb20gY1N0cmluZ0lPIGltcG9ydCBTdHJpbmdJTyBhcyBDU3RyaW5nSU8KKworaW1wb3J0IHJl
cXVlc3RzCisKK2Zyb20gLmJhc2UgaW1wb3J0IEJyb3dzZXIsIEV4ZWN1dG9yQnJvd3NlciwgcmVx
dWlyZV9hcmcKK2Zyb20gLi5leGVjdXRvcnMgaW1wb3J0IGV4ZWN1dG9yX2t3YXJncyBhcyBiYXNl
X2V4ZWN1dG9yX2t3YXJncworZnJvbSAuLmV4ZWN1dG9ycy5leGVjdXRvcnNlbGVuaXVtIGltcG9y
dCAoU2VsZW5pdW1UZXN0aGFybmVzc0V4ZWN1dG9yLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgU2VsZW5pdW1SZWZUZXN0RXhlY3V0b3IpCisKK2hlcmUgPSBvcy5w
YXRoLnNwbGl0KF9fZmlsZV9fKVswXQorCisKK19fd3B0cnVubmVyX18gPSB7InByb2R1Y3QiOiAi
c2F1Y2UiLAorICAgICAgICAgICAgICAgICAiY2hlY2tfYXJncyI6ICJjaGVja19hcmdzIiwKKyAg
ICAgICAgICAgICAgICAgImJyb3dzZXIiOiAiU2F1Y2VCcm93c2VyIiwKKyAgICAgICAgICAgICAg
ICAgImV4ZWN1dG9yIjogeyJ0ZXN0aGFybmVzcyI6ICJTZWxlbml1bVRlc3RoYXJuZXNzRXhlY3V0
b3IiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlZnRlc3QiOiAiU2VsZW5pdW1S
ZWZUZXN0RXhlY3V0b3IifSwKKyAgICAgICAgICAgICAgICAgImJyb3dzZXJfa3dhcmdzIjogImJy
b3dzZXJfa3dhcmdzIiwKKyAgICAgICAgICAgICAgICAgImV4ZWN1dG9yX2t3YXJncyI6ICJleGVj
dXRvcl9rd2FyZ3MiLAorICAgICAgICAgICAgICAgICAiZW52X2V4dHJhcyI6ICJlbnZfZXh0cmFz
IiwKKyAgICAgICAgICAgICAgICAgImVudl9vcHRpb25zIjogImVudl9vcHRpb25zIn0KKworCitk
ZWYgZ2V0X2NhcGFiaWxpdGllcygqKmt3YXJncyk6CisgICAgYnJvd3Nlcl9uYW1lID0ga3dhcmdz
WyJzYXVjZV9icm93c2VyIl0KKyAgICBwbGF0Zm9ybSA9IGt3YXJnc1sic2F1Y2VfcGxhdGZvcm0i
XQorICAgIHZlcnNpb24gPSBrd2FyZ3NbInNhdWNlX3ZlcnNpb24iXQorICAgIGJ1aWxkID0ga3dh
cmdzWyJzYXVjZV9idWlsZCJdCisgICAgdGFncyA9IGt3YXJnc1sic2F1Y2VfdGFncyJdCisgICAg
dHVubmVsX2lkID0ga3dhcmdzWyJzYXVjZV90dW5uZWxfaWQiXQorICAgIHByZXJ1bl9zY3JpcHQg
PSB7CisgICAgICAgICJNaWNyb3NvZnRFZGdlIjogeworICAgICAgICAgICAgImV4ZWN1dGFibGUi
OiAic2F1Y2Utc3RvcmFnZTplZGdlLXByZXJ1bi5iYXQiLAorICAgICAgICAgICAgImJhY2tncm91
bmQiOiBGYWxzZSwKKyAgICAgICAgfSwKKyAgICAgICAgInNhZmFyaSI6IHsKKyAgICAgICAgICAg
ICJleGVjdXRhYmxlIjogInNhdWNlLXN0b3JhZ2U6c2FmYXJpLXByZXJ1bi5zaCIsCisgICAgICAg
ICAgICAiYmFja2dyb3VuZCI6IEZhbHNlLAorICAgICAgICB9CisgICAgfQorICAgIGNhcGFiaWxp
dGllcyA9IHsKKyAgICAgICAgImJyb3dzZXJOYW1lIjogYnJvd3Nlcl9uYW1lLAorICAgICAgICAi
YnVpbGQiOiBidWlsZCwKKyAgICAgICAgImRpc2FibGVQb3B1cEhhbmRsZXIiOiBUcnVlLAorICAg
ICAgICAibmFtZSI6ICIlcyAlcyBvbiAlcyIgJSAoYnJvd3Nlcl9uYW1lLCB2ZXJzaW9uLCBwbGF0
Zm9ybSksCisgICAgICAgICJwbGF0Zm9ybSI6IHBsYXRmb3JtLAorICAgICAgICAicHVibGljIjog
InB1YmxpYyIsCisgICAgICAgICJzZWxlbml1bS12ZXJzaW9uIjogIjMuMy4xIiwKKyAgICAgICAg
InRhZ3MiOiB0YWdzLAorICAgICAgICAidHVubmVsLWlkZW50aWZpZXIiOiB0dW5uZWxfaWQsCisg
ICAgICAgICJ2ZXJzaW9uIjogdmVyc2lvbiwKKyAgICAgICAgInByZXJ1biI6IHByZXJ1bl9zY3Jp
cHQuZ2V0KGJyb3dzZXJfbmFtZSkKKyAgICB9CisKKyAgICBpZiBicm93c2VyX25hbWUgPT0gJ01p
Y3Jvc29mdEVkZ2UnOgorICAgICAgICBjYXBhYmlsaXRpZXNbJ3NlbGVuaXVtLXZlcnNpb24nXSA9
ICcyLjQuOCcKKworICAgIHJldHVybiBjYXBhYmlsaXRpZXMKKworCitkZWYgZ2V0X3NhdWNlX2Nv
bmZpZygqKmt3YXJncyk6CisgICAgYnJvd3Nlcl9uYW1lID0ga3dhcmdzWyJzYXVjZV9icm93c2Vy
Il0KKyAgICBzYXVjZV91c2VyID0ga3dhcmdzWyJzYXVjZV91c2VyIl0KKyAgICBzYXVjZV9rZXkg
PSBrd2FyZ3NbInNhdWNlX2tleSJdCisKKyAgICBodWJfdXJsID0gIiVzOiVzQGxvY2FsaG9zdDo0
NDQ1IiAlIChzYXVjZV91c2VyLCBzYXVjZV9rZXkpCisgICAgZGF0YSA9IHsKKyAgICAgICAgInVy
bCI6ICJodHRwOi8vJXMvd2QvaHViIiAlIGh1Yl91cmwsCisgICAgICAgICJicm93c2VyTmFtZSI6
IGJyb3dzZXJfbmFtZSwKKyAgICAgICAgImNhcGFiaWxpdGllcyI6IGdldF9jYXBhYmlsaXRpZXMo
Kiprd2FyZ3MpCisgICAgfQorCisgICAgcmV0dXJuIGRhdGEKKworCitkZWYgY2hlY2tfYXJncygq
Kmt3YXJncyk6CisgICAgcmVxdWlyZV9hcmcoa3dhcmdzLCAic2F1Y2VfYnJvd3NlciIpCisgICAg
cmVxdWlyZV9hcmcoa3dhcmdzLCAic2F1Y2VfcGxhdGZvcm0iKQorICAgIHJlcXVpcmVfYXJnKGt3
YXJncywgInNhdWNlX3ZlcnNpb24iKQorICAgIHJlcXVpcmVfYXJnKGt3YXJncywgInNhdWNlX3Vz
ZXIiKQorICAgIHJlcXVpcmVfYXJnKGt3YXJncywgInNhdWNlX2tleSIpCisKKworZGVmIGJyb3dz
ZXJfa3dhcmdzKHRlc3RfdHlwZSwgcnVuX2luZm9fZGF0YSwgKiprd2FyZ3MpOgorICAgIHNhdWNl
X2NvbmZpZyA9IGdldF9zYXVjZV9jb25maWcoKiprd2FyZ3MpCisKKyAgICByZXR1cm4geyJzYXVj
ZV9jb25maWciOiBzYXVjZV9jb25maWd9CisKKworZGVmIGV4ZWN1dG9yX2t3YXJncyh0ZXN0X3R5
cGUsIHNlcnZlcl9jb25maWcsIGNhY2hlX21hbmFnZXIsIHJ1bl9pbmZvX2RhdGEsCisgICAgICAg
ICAgICAgICAgICAgICoqa3dhcmdzKToKKyAgICBleGVjdXRvcl9rd2FyZ3MgPSBiYXNlX2V4ZWN1
dG9yX2t3YXJncyh0ZXN0X3R5cGUsIHNlcnZlcl9jb25maWcsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVfbWFuYWdlciwgKiprd2FyZ3MpCisKKyAgICBl
eGVjdXRvcl9rd2FyZ3NbImNhcGFiaWxpdGllcyJdID0gZ2V0X2NhcGFiaWxpdGllcygqKmt3YXJn
cykKKworICAgIHJldHVybiBleGVjdXRvcl9rd2FyZ3MKKworCitkZWYgZW52X2V4dHJhcygqKmt3
YXJncyk6CisgICAgcmV0dXJuIFtTYXVjZUNvbm5lY3QoKiprd2FyZ3MpXQorCisKK2RlZiBlbnZf
b3B0aW9ucygpOgorICAgIHJldHVybiB7Imhvc3QiOiAid2ViLXBsYXRmb3JtLnRlc3QiLAorICAg
ICAgICAgICAgImJpbmRfaG9zdG5hbWUiOiAidHJ1ZSIsCisgICAgICAgICAgICAic3VwcG9ydHNf
ZGVidWdnZXIiOiBGYWxzZX0KKworCitkZWYgZ2V0X3Rhcih1cmwsIGRlc3QpOgorICAgIHJlc3Ag
PSByZXF1ZXN0cy5nZXQodXJsLCBzdHJlYW09VHJ1ZSkKKyAgICByZXNwLnJhaXNlX2Zvcl9zdGF0
dXMoKQorICAgIHdpdGggdGFyZmlsZS5vcGVuKGZpbGVvYmo9Q1N0cmluZ0lPKHJlc3AucmF3LnJl
YWQoKSkpIGFzIGY6CisgICAgICAgIGYuZXh0cmFjdGFsbChwYXRoPWRlc3QpCisKKworY2xhc3Mg
U2F1Y2VDb25uZWN0KCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKiprd2FyZ3MpOgorICAg
ICAgICBzZWxmLnNhdWNlX3VzZXIgPSBrd2FyZ3NbInNhdWNlX3VzZXIiXQorICAgICAgICBzZWxm
LnNhdWNlX2tleSA9IGt3YXJnc1sic2F1Y2Vfa2V5Il0KKyAgICAgICAgc2VsZi5zYXVjZV90dW5u
ZWxfaWQgPSBrd2FyZ3NbInNhdWNlX3R1bm5lbF9pZCJdCisgICAgICAgIHNlbGYuc2F1Y2VfY29u
bmVjdF9iaW5hcnkgPSBrd2FyZ3MuZ2V0KCJzYXVjZV9jb25uZWN0X2JpbmFyeSIpCisgICAgICAg
IHNlbGYuc2NfcHJvY2VzcyA9IE5vbmUKKyAgICAgICAgc2VsZi50ZW1wX2RpciA9IE5vbmUKKwor
ICAgIGRlZiBfX2VudGVyX18oc2VsZiwgb3B0aW9ucyk6CisgICAgICAgIGlmIG5vdCBzZWxmLnNh
dWNlX2Nvbm5lY3RfYmluYXJ5OgorICAgICAgICAgICAgc2VsZi50ZW1wX2RpciA9IHRlbXBmaWxl
Lm1rZHRlbXAoKQorICAgICAgICAgICAgZ2V0X3RhcigiaHR0cHM6Ly9zYXVjZWxhYnMuY29tL2Rv
d25sb2Fkcy9zYy1sYXRlc3QtbGludXgudGFyLmd6Iiwgc2VsZi50ZW1wX2RpcikKKyAgICAgICAg
ICAgIHNlbGYuc2F1Y2VfY29ubmVjdF9iaW5hcnkgPSBnbG9iLmdsb2Iob3MucGF0aC5qb2luKHNl
bGYudGVtcF9kaXIsICJzYy0qLWxpbnV4L2Jpbi9zYyIpKVswXQorCisgICAgICAgIHNlbGYudXBs
b2FkX3ByZXJ1bl9leGVjKCdlZGdlLXByZXJ1bi5iYXQnKQorICAgICAgICBzZWxmLnVwbG9hZF9w
cmVydW5fZXhlYygnc2FmYXJpLXByZXJ1bi5zaCcpCisKKyAgICAgICAgc2VsZi5zY19wcm9jZXNz
ID0gc3VicHJvY2Vzcy5Qb3BlbihbCisgICAgICAgICAgICBzZWxmLnNhdWNlX2Nvbm5lY3RfYmlu
YXJ5LAorICAgICAgICAgICAgIi0tdXNlcj0lcyIgJSBzZWxmLnNhdWNlX3VzZXIsCisgICAgICAg
ICAgICAiLS1hcGkta2V5PSVzIiAlIHNlbGYuc2F1Y2Vfa2V5LAorICAgICAgICAgICAgIi0tbm8t
cmVtb3ZlLWNvbGxpZGluZy10dW5uZWxzIiwKKyAgICAgICAgICAgICItLXR1bm5lbC1pZGVudGlm
aWVyPSVzIiAlIHNlbGYuc2F1Y2VfdHVubmVsX2lkLAorICAgICAgICAgICAgIi0tcmVhZHlmaWxl
PS4vc2F1Y2VfaXNfcmVhZHkiLAorICAgICAgICAgICAgIi0tdHVubmVsLWRvbWFpbnMiLAorICAg
ICAgICAgICAgIndlYi1wbGF0Zm9ybS50ZXN0IiwKKyAgICAgICAgICAgICIqLndlYi1wbGF0Zm9y
bS50ZXN0IgorICAgICAgICBdKQorICAgICAgICB3aGlsZSBub3Qgb3MucGF0aC5leGlzdHMoJy4v
c2F1Y2VfaXNfcmVhZHknKSBhbmQgbm90IHNlbGYuc2NfcHJvY2Vzcy5wb2xsKCk6CisgICAgICAg
ICAgICB0aW1lLnNsZWVwKDUpCisKKyAgICAgICAgaWYgc2VsZi5zY19wcm9jZXNzLnJldHVybmNv
ZGUgaXMgbm90IE5vbmUgYW5kIHNlbGYuc2NfcHJvY2Vzcy5yZXR1cm5jb2RlID4gMDoKKyAgICAg
ICAgICAgIHJhaXNlIFNhdWNlRXhjZXB0aW9uKCJVbmFibGUgdG8gc3RhcnQgU2F1Y2UgQ29ubmVj
dCBQcm94eS4gUHJvY2VzcyBleGl0ZWQgd2l0aCBjb2RlICVzIiwgc2VsZi5zY19wcm9jZXNzLnJl
dHVybmNvZGUpCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgZXhjX3R5cGUsIGV4Y192YWwsIGV4
Y190Yik6CisgICAgICAgIHNlbGYuc2NfcHJvY2Vzcy50ZXJtaW5hdGUoKQorICAgICAgICBpZiBv
cy5wYXRoLmV4aXN0cyhzZWxmLnRlbXBfZGlyKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAg
ICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYudGVtcF9kaXIpCisgICAgICAgICAgICBleGNlcHQg
T1NFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgdXBsb2FkX3ByZXJ1bl9l
eGVjKHNlbGYsIGZpbGVfbmFtZSk6CisgICAgICAgIGF1dGggPSAoc2VsZi5zYXVjZV91c2VyLCBz
ZWxmLnNhdWNlX2tleSkKKyAgICAgICAgdXJsID0gImh0dHBzOi8vc2F1Y2VsYWJzLmNvbS9yZXN0
L3YxL3N0b3JhZ2UvJXMvJXM/b3ZlcndyaXRlPXRydWUiICUgKHNlbGYuc2F1Y2VfdXNlciwgZmls
ZV9uYW1lKQorCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oaGVyZSwgJ3NhdWNlX3Nl
dHVwJywgZmlsZV9uYW1lKSwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgIHJlcXVlc3RzLnBvc3Qo
dXJsLCBkYXRhPWYsIGF1dGg9YXV0aCkKKworCitjbGFzcyBTYXVjZUV4Y2VwdGlvbihFeGNlcHRp
b24pOgorICAgIHBhc3MKKworCitjbGFzcyBTYXVjZUJyb3dzZXIoQnJvd3Nlcik6CisgICAgaW5p
dF90aW1lb3V0ID0gMzAwCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9nZ2VyLCBzYXVjZV9j
b25maWcpOgorICAgICAgICBCcm93c2VyLl9faW5pdF9fKHNlbGYsIGxvZ2dlcikKKyAgICAgICAg
c2VsZi5zYXVjZV9jb25maWcgPSBzYXVjZV9jb25maWcKKworICAgIGRlZiBzdGFydChzZWxmKToK
KyAgICAgICAgcGFzcworCisgICAgZGVmIHN0b3Aoc2VsZiwgZm9yY2U9RmFsc2UpOgorICAgICAg
ICBwYXNzCisKKyAgICBkZWYgcGlkKHNlbGYpOgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAg
ZGVmIGlzX2FsaXZlKHNlbGYpOgorICAgICAgICAjIFRPRE86IFNob3VsZCB0aGlzIGNoZWNrIHNv
bWV0aGluZyBhYm91dCB0aGUgY29ubmVjdGlvbj8KKyAgICAgICAgcmV0dXJuIFRydWUKKworICAg
IGRlZiBjbGVhbnVwKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgZXhlY3V0b3JfYnJv
d3NlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIEV4ZWN1dG9yQnJvd3NlciwgeyJ3ZWJkcml2ZXJf
dXJsIjogc2VsZi5zYXVjZV9jb25maWdbInVybCJdfQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVz
dHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvYnJvd3NlcnMvc2F1Y2Vf
c2V0dXAvZWRnZS1wcmVydW4uYmF0IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xz
L3dwdHJ1bm5lci93cHRydW5uZXIvYnJvd3NlcnMvc2F1Y2Vfc2V0dXAvZWRnZS1wcmVydW4uYmF0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40NTU0ODk0ODk2YgotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5u
ZXIvd3B0cnVubmVyL2Jyb3dzZXJzL3NhdWNlX3NldHVwL2VkZ2UtcHJlcnVuLmJhdApAQCAtMCww
ICsxLDIgQEAKK0BlY2hvIG9mZgorcmVnIGFkZCAiSEtDVVxTb2Z0d2FyZVxDbGFzc2VzXExvY2Fs
IFNldHRpbmdzXFNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXEFwcENv
bnRhaW5lclxTdG9yYWdlXG1pY3Jvc29mdC5taWNyb3NvZnRlZGdlXzh3ZWt5YjNkOGJid2VcTWlj
cm9zb2Z0RWRnZVxOZXcgV2luZG93cyIgL3YgIlBvcHVwTWdyIiAvdCBSRUdfU1ogL2Qgbm8KZGlm
ZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0
cnVubmVyL2Jyb3dzZXJzL3NhdWNlX3NldHVwL3NhZmFyaS1wcmVydW4uc2ggYi9XZWJEcml2ZXJU
ZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9icm93c2Vycy9zYXVj
ZV9zZXR1cC9zYWZhcmktcHJlcnVuLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi44NWM3MmU2YmU2YQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2lt
cG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2Jyb3dzZXJzL3NhdWNlX3NldHVw
L3NhZmFyaS1wcmVydW4uc2gKQEAgLTAsMCArMSwyIEBACisjIS9iaW4vYmFzaAorZGVmYXVsdHMg
d3JpdGUgY29tLmFwcGxlLlNhZmFyaSBjb20uYXBwbGUuU2FmYXJpLkNvbnRlbnRQYWdlR3JvdXBJ
ZGVudGlmaWVyLldlYktpdDJKYXZhU2NyaXB0Q2FuT3BlbldpbmRvd3NBdXRvbWF0aWNhbGx5IC1i
b29sIHRydWUKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93
cHRydW5uZXIvd3B0cnVubmVyL2Jyb3dzZXJzL3NlcnZlci1sb2NhdGlvbnMudHh0IGIvV2ViRHJp
dmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvYnJvd3NlcnMv
c2VydmVyLWxvY2F0aW9ucy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLjVkY2FmNGJiNmE0Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0
ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvYnJvd3NlcnMvc2VydmVyLWxvY2F0aW9u
cy50eHQKQEAgLTAsMCArMSwzMSBAQAoraHR0cDovL2xvY2FsaG9zdDo4MDAwICAgIHByaW1hcnkK
KworaHR0cDovL3dlYi1wbGF0Zm9ybS50ZXN0OjgwMDAKK2h0dHA6Ly93d3cud2ViLXBsYXRmb3Jt
LnRlc3Q6ODAwMAoraHR0cDovL3d3dzEud2ViLXBsYXRmb3JtLnRlc3Q6ODAwMAoraHR0cDovL3d3
dzIud2ViLXBsYXRmb3JtLnRlc3Q6ODAwMAoraHR0cDovL3huLS1uOGo2ZHM1M2x3d2tycWh2Mjhh
LndlYi1wbGF0Zm9ybS50ZXN0OjgwMDAKK2h0dHA6Ly94bi0tbHZlLTZsYWQud2ViLXBsYXRmb3Jt
LnRlc3Q6ODAwMAorCitodHRwOi8vd2ViLXBsYXRmb3JtLnRlc3Q6ODAwMQoraHR0cDovL3d3dy53
ZWItcGxhdGZvcm0udGVzdDo4MDAxCitodHRwOi8vd3d3MS53ZWItcGxhdGZvcm0udGVzdDo4MDAx
CitodHRwOi8vd3d3Mi53ZWItcGxhdGZvcm0udGVzdDo4MDAxCitodHRwOi8veG4tLW44ajZkczUz
bHd3a3JxaHYyOGEud2ViLXBsYXRmb3JtLnRlc3Q6ODAwMQoraHR0cDovL3huLS1sdmUtNmxhZC53
ZWItcGxhdGZvcm0udGVzdDo4MDAxCisKK2h0dHBzOi8vd2ViLXBsYXRmb3JtLnRlc3Q6ODQ0Mwor
aHR0cHM6Ly93d3cud2ViLXBsYXRmb3JtLnRlc3Q6ODQ0MworaHR0cHM6Ly93d3cxLndlYi1wbGF0
Zm9ybS50ZXN0Ojg0NDMKK2h0dHBzOi8vd3d3Mi53ZWItcGxhdGZvcm0udGVzdDo4NDQzCitodHRw
czovL3huLS1uOGo2ZHM1M2x3d2tycWh2MjhhLndlYi1wbGF0Zm9ybS50ZXN0Ojg0NDMKK2h0dHBz
Oi8veG4tLWx2ZS02bGFkLndlYi1wbGF0Zm9ybS50ZXN0Ojg0NDMKKworIyBUaGVzZSBhcmUgYWN0
dWFsbHkgd3Mgc2VydmVycywgYnV0IHVudGlsIG1venByb2ZpbGUgaXMKKyMgZml4ZWQgd2UgaGF2
ZSB0byBwcmV0ZW5kIHRoYXQgdGhleSBhcmUgaHR0cCBzZXJ2ZXJzCitodHRwOi8vd2ViLXBsYXRm
b3JtLnRlc3Q6ODg4OAoraHR0cDovL3d3dy53ZWItcGxhdGZvcm0udGVzdDo4ODg4CitodHRwOi8v
d3d3MS53ZWItcGxhdGZvcm0udGVzdDo4ODg4CitodHRwOi8vd3d3Mi53ZWItcGxhdGZvcm0udGVz
dDo4ODg4CitodHRwOi8veG4tLW44ajZkczUzbHd3a3JxaHYyOGEud2ViLXBsYXRmb3JtLnRlc3Q6
ODg4OAoraHR0cDovL3huLS1sdmUtNmxhZC53ZWItcGxhdGZvcm0udGVzdDo4ODg4CmRpZmYgLS1n
aXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5l
ci9icm93c2Vycy9zZXJ2by5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93
cHRydW5uZXIvd3B0cnVubmVyL2Jyb3dzZXJzL3NlcnZvLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwLi44OWQ2OWFiOWU1NAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRy
aXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2Jyb3dzZXJz
L3NlcnZvLnB5CkBAIC0wLDAgKzEsODEgQEAKK2ltcG9ydCBvcworCitmcm9tIC5iYXNlIGltcG9y
dCBOdWxsQnJvd3NlciwgRXhlY3V0b3JCcm93c2VyLCByZXF1aXJlX2FyZworZnJvbSAuLmV4ZWN1
dG9ycyBpbXBvcnQgZXhlY3V0b3Jfa3dhcmdzIGFzIGJhc2VfZXhlY3V0b3Jfa3dhcmdzCitmcm9t
IC4uZXhlY3V0b3JzLmV4ZWN1dG9yc2Vydm8gaW1wb3J0IFNlcnZvVGVzdGhhcm5lc3NFeGVjdXRv
ciwgU2Vydm9SZWZUZXN0RXhlY3V0b3IsIFNlcnZvV2RzcGVjRXhlY3V0b3IKKworaGVyZSA9IG9z
LnBhdGguam9pbihvcy5wYXRoLnNwbGl0KF9fZmlsZV9fKVswXSkKKworX193cHRydW5uZXJfXyA9
IHsKKyAgICAicHJvZHVjdCI6ICJzZXJ2byIsCisgICAgImNoZWNrX2FyZ3MiOiAiY2hlY2tfYXJn
cyIsCisgICAgImJyb3dzZXIiOiAiU2Vydm9Ccm93c2VyIiwKKyAgICAiZXhlY3V0b3IiOiB7Cisg
ICAgICAgICJ0ZXN0aGFybmVzcyI6ICJTZXJ2b1Rlc3RoYXJuZXNzRXhlY3V0b3IiLAorICAgICAg
ICAicmVmdGVzdCI6ICJTZXJ2b1JlZlRlc3RFeGVjdXRvciIsCisgICAgICAgICJ3ZHNwZWMiOiAi
U2Vydm9XZHNwZWNFeGVjdXRvciIsCisgICAgfSwKKyAgICAiYnJvd3Nlcl9rd2FyZ3MiOiAiYnJv
d3Nlcl9rd2FyZ3MiLAorICAgICJleGVjdXRvcl9rd2FyZ3MiOiAiZXhlY3V0b3Jfa3dhcmdzIiwK
KyAgICAiZW52X2V4dHJhcyI6ICJlbnZfZXh0cmFzIiwKKyAgICAiZW52X29wdGlvbnMiOiAiZW52
X29wdGlvbnMiLAorICAgICJ1cGRhdGVfcHJvcGVydGllcyI6ICJ1cGRhdGVfcHJvcGVydGllcyIs
Cit9CisKKworZGVmIGNoZWNrX2FyZ3MoKiprd2FyZ3MpOgorICAgIHJlcXVpcmVfYXJnKGt3YXJn
cywgImJpbmFyeSIpCisKKworZGVmIGJyb3dzZXJfa3dhcmdzKHRlc3RfdHlwZSwgcnVuX2luZm9f
ZGF0YSwgKiprd2FyZ3MpOgorICAgIHJldHVybiB7CisgICAgICAgICJiaW5hcnkiOiBrd2FyZ3Nb
ImJpbmFyeSJdLAorICAgICAgICAiZGVidWdfaW5mbyI6IGt3YXJnc1siZGVidWdfaW5mbyJdLAor
ICAgICAgICAiYmluYXJ5X2FyZ3MiOiBrd2FyZ3NbImJpbmFyeV9hcmdzIl0sCisgICAgICAgICJ1
c2VyX3N0eWxlc2hlZXRzIjoga3dhcmdzLmdldCgidXNlcl9zdHlsZXNoZWV0cyIpLAorICAgICAg
ICAiY2FfY2VydGlmaWNhdGVfcGF0aCI6IGt3YXJnc1sic3NsX2VudiJdLmNhX2NlcnRfcGF0aCgp
LAorICAgIH0KKworCitkZWYgZXhlY3V0b3Jfa3dhcmdzKHRlc3RfdHlwZSwgc2VydmVyX2NvbmZp
ZywgY2FjaGVfbWFuYWdlciwgcnVuX2luZm9fZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgKipr
d2FyZ3MpOgorICAgIHJ2ID0gYmFzZV9leGVjdXRvcl9rd2FyZ3ModGVzdF90eXBlLCBzZXJ2ZXJf
Y29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVfbWFuYWdlciwgKipr
d2FyZ3MpCisgICAgcnZbInBhdXNlX2FmdGVyX3Rlc3QiXSA9IGt3YXJnc1sicGF1c2VfYWZ0ZXJf
dGVzdCJdCisgICAgcmV0dXJuIHJ2CisKKworZGVmIGVudl9leHRyYXMoKiprd2FyZ3MpOgorICAg
IHJldHVybiBbXQorCisKK2RlZiBlbnZfb3B0aW9ucygpOgorICAgIHJldHVybiB7Imhvc3QiOiAi
MTI3LjAuMC4xIiwKKyAgICAgICAgICAgICJleHRlcm5hbF9ob3N0IjogIndlYi1wbGF0Zm9ybS50
ZXN0IiwKKyAgICAgICAgICAgICJiaW5kX2hvc3RuYW1lIjogInRydWUiLAorICAgICAgICAgICAg
InRlc3RoYXJuZXNzcmVwb3J0IjogInRlc3RoYXJuZXNzcmVwb3J0LXNlcnZvLmpzIiwKKyAgICAg
ICAgICAgICJzdXBwb3J0c19kZWJ1Z2dlciI6IFRydWV9CisKKworZGVmIHVwZGF0ZV9wcm9wZXJ0
aWVzKCk6CisgICAgcmV0dXJuIFsiZGVidWciLCAib3MiLCAidmVyc2lvbiIsICJwcm9jZXNzb3Ii
LCAiYml0cyJdLCBOb25lCisKKworY2xhc3MgU2Vydm9Ccm93c2VyKE51bGxCcm93c2VyKToKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgbG9nZ2VyLCBiaW5hcnksIGRlYnVnX2luZm89Tm9uZSwgYmlu
YXJ5X2FyZ3M9Tm9uZSwKKyAgICAgICAgICAgICAgICAgdXNlcl9zdHlsZXNoZWV0cz1Ob25lLCBj
YV9jZXJ0aWZpY2F0ZV9wYXRoPU5vbmUpOgorICAgICAgICBOdWxsQnJvd3Nlci5fX2luaXRfXyhz
ZWxmLCBsb2dnZXIpCisgICAgICAgIHNlbGYuYmluYXJ5ID0gYmluYXJ5CisgICAgICAgIHNlbGYu
ZGVidWdfaW5mbyA9IGRlYnVnX2luZm8KKyAgICAgICAgc2VsZi5iaW5hcnlfYXJncyA9IGJpbmFy
eV9hcmdzIG9yIFtdCisgICAgICAgIHNlbGYudXNlcl9zdHlsZXNoZWV0cyA9IHVzZXJfc3R5bGVz
aGVldHMgb3IgW10KKyAgICAgICAgc2VsZi5jYV9jZXJ0aWZpY2F0ZV9wYXRoID0gY2FfY2VydGlm
aWNhdGVfcGF0aAorCisgICAgZGVmIGV4ZWN1dG9yX2Jyb3dzZXIoc2VsZik6CisgICAgICAgIHJl
dHVybiBFeGVjdXRvckJyb3dzZXIsIHsKKyAgICAgICAgICAgICJiaW5hcnkiOiBzZWxmLmJpbmFy
eSwKKyAgICAgICAgICAgICJkZWJ1Z19pbmZvIjogc2VsZi5kZWJ1Z19pbmZvLAorICAgICAgICAg
ICAgImJpbmFyeV9hcmdzIjogc2VsZi5iaW5hcnlfYXJncywKKyAgICAgICAgICAgICJ1c2VyX3N0
eWxlc2hlZXRzIjogc2VsZi51c2VyX3N0eWxlc2hlZXRzLAorICAgICAgICAgICAgImNhX2NlcnRp
ZmljYXRlX3BhdGgiOiBzZWxmLmNhX2NlcnRpZmljYXRlX3BhdGgsCisgICAgICAgIH0KZGlmZiAt
LWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVu
bmVyL2Jyb3dzZXJzL3NlcnZvZHJpdmVyLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNj
L3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvYnJvd3NlcnMvc2Vydm9kcml2ZXIucHkKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmMyNTFkZTg0ZDE2Ci0tLSAvZGV2L251
bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRy
dW5uZXIvYnJvd3NlcnMvc2Vydm9kcml2ZXIucHkKQEAgLTAsMCArMSwxNjUgQEAKK2ltcG9ydCBv
cworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCB0ZW1wZmlsZQorCitmcm9tIG1venByb2Nlc3Mg
aW1wb3J0IFByb2Nlc3NIYW5kbGVyCisKK2Zyb20gLmJhc2UgaW1wb3J0IEJyb3dzZXIsIHJlcXVp
cmVfYXJnLCBnZXRfZnJlZV9wb3J0LCBicm93c2VyX2NvbW1hbmQsIEV4ZWN1dG9yQnJvd3Nlcgor
ZnJvbSAuLmV4ZWN1dG9ycyBpbXBvcnQgZXhlY3V0b3Jfa3dhcmdzIGFzIGJhc2VfZXhlY3V0b3Jf
a3dhcmdzCitmcm9tIC4uZXhlY3V0b3JzLmV4ZWN1dG9yc2Vydm9kcml2ZXIgaW1wb3J0IChTZXJ2
b1dlYkRyaXZlclRlc3RoYXJuZXNzRXhlY3V0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTZXJ2b1dlYkRyaXZlclJlZlRlc3RFeGVjdXRvcikKKworaGVy
ZSA9IG9zLnBhdGguam9pbihvcy5wYXRoLnNwbGl0KF9fZmlsZV9fKVswXSkKKworX193cHRydW5u
ZXJfXyA9IHsKKyAgICAicHJvZHVjdCI6ICJzZXJ2b2RyaXZlciIsCisgICAgImNoZWNrX2FyZ3Mi
OiAiY2hlY2tfYXJncyIsCisgICAgImJyb3dzZXIiOiAiU2Vydm9XZWJEcml2ZXJCcm93c2VyIiwK
KyAgICAiZXhlY3V0b3IiOiB7CisgICAgICAgICJ0ZXN0aGFybmVzcyI6ICJTZXJ2b1dlYkRyaXZl
clRlc3RoYXJuZXNzRXhlY3V0b3IiLAorICAgICAgICAicmVmdGVzdCI6ICJTZXJ2b1dlYkRyaXZl
clJlZlRlc3RFeGVjdXRvciIsCisgICAgfSwKKyAgICAiYnJvd3Nlcl9rd2FyZ3MiOiAiYnJvd3Nl
cl9rd2FyZ3MiLAorICAgICJleGVjdXRvcl9rd2FyZ3MiOiAiZXhlY3V0b3Jfa3dhcmdzIiwKKyAg
ICAiZW52X2V4dHJhcyI6ICJlbnZfZXh0cmFzIiwKKyAgICAiZW52X29wdGlvbnMiOiAiZW52X29w
dGlvbnMiLAorICAgICJ1cGRhdGVfcHJvcGVydGllcyI6ICJ1cGRhdGVfcHJvcGVydGllcyIsCit9
CisKK2hvc3RzX3RleHQgPSAiIiIxMjcuMC4wLjEgd2ViLXBsYXRmb3JtLnRlc3QKKzEyNy4wLjAu
MSB3d3cud2ViLXBsYXRmb3JtLnRlc3QKKzEyNy4wLjAuMSB3d3cxLndlYi1wbGF0Zm9ybS50ZXN0
CisxMjcuMC4wLjEgd3d3Mi53ZWItcGxhdGZvcm0udGVzdAorMTI3LjAuMC4xIHhuLS1uOGo2ZHM1
M2x3d2tycWh2MjhhLndlYi1wbGF0Zm9ybS50ZXN0CisxMjcuMC4wLjEgeG4tLWx2ZS02bGFkLndl
Yi1wbGF0Zm9ybS50ZXN0CisiIiIKKworCitkZWYgY2hlY2tfYXJncygqKmt3YXJncyk6CisgICAg
cmVxdWlyZV9hcmcoa3dhcmdzLCAiYmluYXJ5IikKKworCitkZWYgYnJvd3Nlcl9rd2FyZ3ModGVz
dF90eXBlLCBydW5faW5mb19kYXRhLCAqKmt3YXJncyk6CisgICAgcmV0dXJuIHsKKyAgICAgICAg
ImJpbmFyeSI6IGt3YXJnc1siYmluYXJ5Il0sCisgICAgICAgICJkZWJ1Z19pbmZvIjoga3dhcmdz
WyJkZWJ1Z19pbmZvIl0sCisgICAgICAgICJ1c2VyX3N0eWxlc2hlZXRzIjoga3dhcmdzLmdldCgi
dXNlcl9zdHlsZXNoZWV0cyIpLAorICAgIH0KKworCitkZWYgZXhlY3V0b3Jfa3dhcmdzKHRlc3Rf
dHlwZSwgc2VydmVyX2NvbmZpZywgY2FjaGVfbWFuYWdlciwgcnVuX2luZm9fZGF0YSwgKiprd2Fy
Z3MpOgorICAgIHJ2ID0gYmFzZV9leGVjdXRvcl9rd2FyZ3ModGVzdF90eXBlLCBzZXJ2ZXJfY29u
ZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVfbWFuYWdlciwgKiprd2Fy
Z3MpCisgICAgcmV0dXJuIHJ2CisKKworZGVmIGVudl9leHRyYXMoKiprd2FyZ3MpOgorICAgIHJl
dHVybiBbXQorCisKK2RlZiBlbnZfb3B0aW9ucygpOgorICAgIHJldHVybiB7Imhvc3QiOiAiMTI3
LjAuMC4xIiwKKyAgICAgICAgICAgICJleHRlcm5hbF9ob3N0IjogIndlYi1wbGF0Zm9ybS50ZXN0
IiwKKyAgICAgICAgICAgICJiaW5kX2hvc3RuYW1lIjogInRydWUiLAorICAgICAgICAgICAgInRl
c3RoYXJuZXNzcmVwb3J0IjogInRlc3RoYXJuZXNzcmVwb3J0LXNlcnZvZHJpdmVyLmpzIiwKKyAg
ICAgICAgICAgICJzdXBwb3J0c19kZWJ1Z2dlciI6IFRydWV9CisKKworZGVmIHVwZGF0ZV9wcm9w
ZXJ0aWVzKCk6CisgICAgcmV0dXJuIFsiZGVidWciLCAib3MiLCAidmVyc2lvbiIsICJwcm9jZXNz
b3IiLCAiYml0cyJdLCBOb25lCisKKworZGVmIG1ha2VfaG9zdHNfZmlsZSgpOgorICAgIGhvc3Rz
X2ZkLCBob3N0c19wYXRoID0gdGVtcGZpbGUubWtzdGVtcCgpCisgICAgd2l0aCBvcy5mZG9wZW4o
aG9zdHNfZmQsICJ3IikgYXMgZjoKKyAgICAgICAgZi53cml0ZShob3N0c190ZXh0KQorICAgIHJl
dHVybiBob3N0c19wYXRoCisKKworY2xhc3MgU2Vydm9XZWJEcml2ZXJCcm93c2VyKEJyb3dzZXIp
OgorICAgIHVzZWRfcG9ydHMgPSBzZXQoKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvZ2dl
ciwgYmluYXJ5LCBkZWJ1Z19pbmZvPU5vbmUsIHdlYmRyaXZlcl9ob3N0PSIxMjcuMC4wLjEiLAor
ICAgICAgICAgICAgICAgICB1c2VyX3N0eWxlc2hlZXRzPU5vbmUpOgorICAgICAgICBCcm93c2Vy
Ll9faW5pdF9fKHNlbGYsIGxvZ2dlcikKKyAgICAgICAgc2VsZi5iaW5hcnkgPSBiaW5hcnkKKyAg
ICAgICAgc2VsZi53ZWJkcml2ZXJfaG9zdCA9IHdlYmRyaXZlcl9ob3N0CisgICAgICAgIHNlbGYu
d2ViZHJpdmVyX3BvcnQgPSBOb25lCisgICAgICAgIHNlbGYucHJvYyA9IE5vbmUKKyAgICAgICAg
c2VsZi5kZWJ1Z19pbmZvID0gZGVidWdfaW5mbworICAgICAgICBzZWxmLmhvc3RzX3BhdGggPSBt
YWtlX2hvc3RzX2ZpbGUoKQorICAgICAgICBzZWxmLmNvbW1hbmQgPSBOb25lCisgICAgICAgIHNl
bGYudXNlcl9zdHlsZXNoZWV0cyA9IHVzZXJfc3R5bGVzaGVldHMgaWYgdXNlcl9zdHlsZXNoZWV0
cyBlbHNlIFtdCisKKyAgICBkZWYgc3RhcnQoc2VsZiwgKiprd2FyZ3MpOgorICAgICAgICBzZWxm
LndlYmRyaXZlcl9wb3J0ID0gZ2V0X2ZyZWVfcG9ydCg0NDQ0LCBleGNsdWRlPXNlbGYudXNlZF9w
b3J0cykKKyAgICAgICAgc2VsZi51c2VkX3BvcnRzLmFkZChzZWxmLndlYmRyaXZlcl9wb3J0KQor
CisgICAgICAgIGVudiA9IG9zLmVudmlyb24uY29weSgpCisgICAgICAgIGVudlsiSE9TVF9GSUxF
Il0gPSBzZWxmLmhvc3RzX3BhdGgKKyAgICAgICAgZW52WyJSVVNUX0JBQ0tUUkFDRSJdID0gIjEi
CisKKyAgICAgICAgZGVidWdfYXJncywgY29tbWFuZCA9IGJyb3dzZXJfY29tbWFuZCgKKyAgICAg
ICAgICAgIHNlbGYuYmluYXJ5LAorICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICItLWhh
cmQtZmFpbCIsCisgICAgICAgICAgICAgICAgIi0td2ViZHJpdmVyIiwgc3RyKHNlbGYud2ViZHJp
dmVyX3BvcnQpLAorICAgICAgICAgICAgICAgICJhYm91dDpibGFuayIsCisgICAgICAgICAgICBd
LAorICAgICAgICAgICAgc2VsZi5kZWJ1Z19pbmZvCisgICAgICAgICkKKworICAgICAgICBmb3Ig
c3R5bGVzaGVldCBpbiBzZWxmLnVzZXJfc3R5bGVzaGVldHM6CisgICAgICAgICAgICBjb21tYW5k
ICs9IFsiLS11c2VyLXN0eWxlc2hlZXQiLCBzdHlsZXNoZWV0XQorCisgICAgICAgIHNlbGYuY29t
bWFuZCA9IGNvbW1hbmQKKworICAgICAgICBzZWxmLmNvbW1hbmQgPSBkZWJ1Z19hcmdzICsgc2Vs
Zi5jb21tYW5kCisKKyAgICAgICAgaWYgbm90IHNlbGYuZGVidWdfaW5mbyBvciBub3Qgc2VsZi5k
ZWJ1Z19pbmZvLmludGVyYWN0aXZlOgorICAgICAgICAgICAgc2VsZi5wcm9jID0gUHJvY2Vzc0hh
bmRsZXIoc2VsZi5jb21tYW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHJvY2Vzc091dHB1dExpbmU9W3NlbGYub25fb3V0cHV0XSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVudj1lbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdG9yZU91dHB1dD1GYWxzZSkKKyAgICAgICAgICAgIHNlbGYucHJvYy5y
dW4oKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5wcm9jID0gc3VicHJvY2Vzcy5Q
b3BlbihzZWxmLmNvbW1hbmQsIGVudj1lbnYpCisKKyAgICAgICAgc2VsZi5sb2dnZXIuZGVidWco
IlNlcnZvIFN0YXJ0ZWQiKQorCisgICAgZGVmIHN0b3Aoc2VsZiwgZm9yY2U9RmFsc2UpOgorICAg
ICAgICBzZWxmLmxvZ2dlci5kZWJ1ZygiU3RvcHBpbmcgYnJvd3NlciIpCisgICAgICAgIGlmIHNl
bGYucHJvYyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBz
ZWxmLnByb2Mua2lsbCgpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAg
ICAgICAjIFRoaXMgY2FuIGhhcHBlbiBvbiBXaW5kb3dzIGlmIHRoZSBwcm9jZXNzIGlzIGFscmVh
ZHkgZGVhZAorICAgICAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiBwaWQoc2VsZik6CisgICAg
ICAgIGlmIHNlbGYucHJvYyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAg
ICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5wcm9jLnBpZAorICAgICAgICBleGNl
cHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIG9u
X291dHB1dChzZWxmLCBsaW5lKToKKyAgICAgICAgIiIiV3JpdGUgYSBsaW5lIG9mIG91dHB1dCBm
cm9tIHRoZSBwcm9jZXNzIHRvIHRoZSBsb2ciIiIKKyAgICAgICAgc2VsZi5sb2dnZXIucHJvY2Vz
c19vdXRwdXQoc2VsZi5waWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGluZS5kZWNvZGUoInV0ZjgiLCAicmVwbGFjZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb21tYW5kPSIgIi5qb2luKHNlbGYuY29tbWFuZCkpCisKKyAgICBkZWYgaXNf
YWxpdmUoc2VsZik6CisgICAgICAgIGlmIHNlbGYucnVubmVyOgorICAgICAgICAgICAgcmV0dXJu
IHNlbGYucnVubmVyLmlzX3J1bm5pbmcoKQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRl
ZiBjbGVhbnVwKHNlbGYpOgorICAgICAgICBzZWxmLnN0b3AoKQorCisgICAgZGVmIGV4ZWN1dG9y
X2Jyb3dzZXIoc2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLndlYmRyaXZlcl9wb3J0IGlzIG5v
dCBOb25lCisgICAgICAgIHJldHVybiBFeGVjdXRvckJyb3dzZXIsIHsid2ViZHJpdmVyX2hvc3Qi
OiBzZWxmLndlYmRyaXZlcl9ob3N0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IndlYmRyaXZlcl9wb3J0Ijogc2VsZi53ZWJkcml2ZXJfcG9ydH0KZGlmZiAtLWdpdCBhL1dlYkRy
aXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2NvbmZpZy5q
c29uIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5u
ZXIvY29uZmlnLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmQx
NDY0MjRhMGYwCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNj
L3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvY29uZmlnLmpzb24KQEAgLTAsMCArMSw3IEBACit7
Imhvc3QiOiAiJShob3N0KXMiLAorICJwb3J0cyI6eyJodHRwIjpbODAwMCwgODAwMV0sCisgICAg
ICAgICAgImh0dHBzIjpbODQ0M10sCisgICAgICAgICAgIndzIjpbODg4OF19LAorICJjaGVja19z
dWJkb21haW5zIjpmYWxzZSwKKyAiYmluZF9ob3N0bmFtZSI6JShiaW5kX2hvc3RuYW1lKXMsCisg
InNzbCI6e319CmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMv
d3B0cnVubmVyL3dwdHJ1bm5lci9jb25maWcucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93
M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9jb25maWcucHkKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAuLjViZDNmNDY3ZjNlCi0tLSAvZGV2L251bGwKKysrIGIvV2Vi
RHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvY29uZmln
LnB5CkBAIC0wLDAgKzEsNjAgQEAKK2ltcG9ydCBDb25maWdQYXJzZXIKK2ltcG9ydCBvcworaW1w
b3J0IHN5cworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgT3JkZXJlZERpY3QKKworaGVyZSA9IG9z
LnBhdGguc3BsaXQoX19maWxlX18pWzBdCisKK2NsYXNzIENvbmZpZ0RpY3QoZGljdCk6CisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIGJhc2VfcGF0aCwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAg
c2VsZi5iYXNlX3BhdGggPSBiYXNlX3BhdGgKKyAgICAgICAgZGljdC5fX2luaXRfXyhzZWxmLCAq
YXJncywgKiprd2FyZ3MpCisKKyAgICBkZWYgZ2V0X3BhdGgoc2VsZiwga2V5LCBkZWZhdWx0PU5v
bmUpOgorICAgICAgICBpZiBrZXkgbm90IGluIHNlbGY6CisgICAgICAgICAgICByZXR1cm4gZGVm
YXVsdAorICAgICAgICBwYXRoID0gc2VsZltrZXldCisgICAgICAgIG9zLnBhdGguZXhwYW5kdXNl
cihwYXRoKQorICAgICAgICByZXR1cm4gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihzZWxm
LmJhc2VfcGF0aCwgcGF0aCkpCisKK2RlZiByZWFkKGNvbmZpZ19wYXRoKToKKyAgICBjb25maWdf
cGF0aCA9IG9zLnBhdGguYWJzcGF0aChjb25maWdfcGF0aCkKKyAgICBjb25maWdfcm9vdCA9IG9z
LnBhdGguc3BsaXQoY29uZmlnX3BhdGgpWzBdCisgICAgcGFyc2VyID0gQ29uZmlnUGFyc2VyLlNh
ZmVDb25maWdQYXJzZXIoKQorICAgIHN1Y2Nlc3MgPSBwYXJzZXIucmVhZChjb25maWdfcGF0aCkK
KyAgICBhc3NlcnQgY29uZmlnX3BhdGggaW4gc3VjY2Vzcywgc3VjY2VzcworCisgICAgc3VibnMg
PSB7InB3ZCI6IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmN1cmRpcil9CisKKyAgICBydiA9IE9y
ZGVyZWREaWN0KCkKKyAgICBmb3Igc2VjdGlvbiBpbiBwYXJzZXIuc2VjdGlvbnMoKToKKyAgICAg
ICAgcnZbc2VjdGlvbl0gPSBDb25maWdEaWN0KGNvbmZpZ19yb290KQorICAgICAgICBmb3Iga2V5
IGluIHBhcnNlci5vcHRpb25zKHNlY3Rpb24pOgorICAgICAgICAgICAgcnZbc2VjdGlvbl1ba2V5
XSA9IHBhcnNlci5nZXQoc2VjdGlvbiwga2V5LCBGYWxzZSwgc3VibnMpCisKKyAgICByZXR1cm4g
cnYKKworZGVmIHBhdGgoYXJndj1Ob25lKToKKyAgICBpZiBhcmd2IGlzIE5vbmU6CisgICAgICAg
IGFyZ3YgPSBbXQorICAgIHBhdGggPSBOb25lCisKKyAgICBmb3IgaSwgYXJnIGluIGVudW1lcmF0
ZShhcmd2KToKKyAgICAgICAgaWYgYXJnID09ICItLWNvbmZpZyI6CisgICAgICAgICAgICBpZiBp
ICsgMSA8IGxlbihhcmd2KToKKyAgICAgICAgICAgICAgICBwYXRoID0gYXJndltpICsgMV0KKyAg
ICAgICAgZWxpZiBhcmcuc3RhcnRzd2l0aCgiLS1jb25maWc9Iik6CisgICAgICAgICAgICBwYXRo
ID0gYXJnLnNwbGl0KCI9IiwgMSlbMV0KKyAgICAgICAgaWYgcGF0aCBpcyBub3QgTm9uZToKKyAg
ICAgICAgICAgIGJyZWFrCisKKyAgICBpZiBwYXRoIGlzIE5vbmU6CisgICAgICAgIGlmIG9zLnBh
dGguZXhpc3RzKCJ3cHRydW5uZXIuaW5pIik6CisgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5h
YnNwYXRoKCJ3cHRydW5uZXIuaW5pIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhdGgg
PSBvcy5wYXRoLmpvaW4oaGVyZSwgIi4uIiwgIndwdHJ1bm5lci5kZWZhdWx0LmluaSIpCisKKyAg
ICByZXR1cm4gb3MucGF0aC5hYnNwYXRoKHBhdGgpCisKK2RlZiBsb2FkKCk6CisgICAgcmV0dXJu
IHJlYWQocGF0aChzeXMuYXJndikpCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRl
ZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9lbnZpcm9ubWVudC5weSBiL1dlYkRyaXZl
clRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2Vudmlyb25tZW50
LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43M2I1NGNlYjlmMwot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRy
dW5uZXIvd3B0cnVubmVyL2Vudmlyb25tZW50LnB5CkBAIC0wLDAgKzEsMjI1IEBACitpbXBvcnQg
anNvbgoraW1wb3J0IG9zCitpbXBvcnQgbXVsdGlwcm9jZXNzaW5nCitpbXBvcnQgc2lnbmFsCitp
bXBvcnQgc29ja2V0CitpbXBvcnQgc3lzCitpbXBvcnQgdGltZQorCitmcm9tIG1vemxvZyBpbXBv
cnQgZ2V0X2RlZmF1bHRfbG9nZ2VyLCBoYW5kbGVycywgcHJveHkKKworZnJvbSB3cHRsb2dnaW5n
IGltcG9ydCBMb2dMZXZlbFJld3JpdGVyCisKK2hlcmUgPSBvcy5wYXRoLnNwbGl0KF9fZmlsZV9f
KVswXQorCitzZXJ2ZSA9IE5vbmUKK3NzbHV0aWxzID0gTm9uZQorCisKK2hvc3RuYW1lcyA9IFsi
d2ViLXBsYXRmb3JtLnRlc3QiLAorICAgICAgICAgICAgICJ3d3cud2ViLXBsYXRmb3JtLnRlc3Qi
LAorICAgICAgICAgICAgICJ3d3cxLndlYi1wbGF0Zm9ybS50ZXN0IiwKKyAgICAgICAgICAgICAi
d3d3Mi53ZWItcGxhdGZvcm0udGVzdCIsCisgICAgICAgICAgICAgInhuLS1uOGo2ZHM1M2x3d2ty
cWh2MjhhLndlYi1wbGF0Zm9ybS50ZXN0IiwKKyAgICAgICAgICAgICAieG4tLWx2ZS02bGFkLndl
Yi1wbGF0Zm9ybS50ZXN0Il0KKworCitkZWYgZG9fZGVsYXllZF9pbXBvcnRzKGxvZ2dlciwgdGVz
dF9wYXRocyk6CisgICAgZ2xvYmFsIHNlcnZlLCBzc2x1dGlscworCisgICAgc2VydmVfcm9vdCA9
IHNlcnZlX3BhdGgodGVzdF9wYXRocykKKyAgICBzeXMucGF0aC5pbnNlcnQoMCwgc2VydmVfcm9v
dCkKKworICAgIGZhaWxlZCA9IFtdCisKKyAgICB0cnk6CisgICAgICAgIGZyb20gdG9vbHMuc2Vy
dmUgaW1wb3J0IHNlcnZlCisgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICBmcm9tIHdw
dF90b29scy5zZXJ2ZSBpbXBvcnQgc2VydmUKKyAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAg
ICAgIGZhaWxlZC5hcHBlbmQoInNlcnZlIikKKworICAgIHRyeToKKyAgICAgICAgaW1wb3J0IHNz
bHV0aWxzCisgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICBmYWlsZWQuYXBwZW5kKCJz
c2x1dGlscyIpCisKKyAgICBpZiBmYWlsZWQ6CisgICAgICAgIGxvZ2dlci5jcml0aWNhbCgKKyAg
ICAgICAgICAgICJGYWlsZWQgdG8gaW1wb3J0ICVzLiBFbnN1cmUgdGhhdCB0ZXN0cyBwYXRoICVz
IGNvbnRhaW5zIHdlYi1wbGF0Zm9ybS10ZXN0cyIgJQorICAgICAgICAgICAgKCIsICIuam9pbihm
YWlsZWQpLCBzZXJ2ZV9yb290KSkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworCitkZWYgc2VydmVf
cGF0aCh0ZXN0X3BhdGhzKToKKyAgICByZXR1cm4gdGVzdF9wYXRoc1siLyJdWyJ0ZXN0c19wYXRo
Il0KKworCitkZWYgZ2V0X3NzbF9rd2FyZ3MoKiprd2FyZ3MpOgorICAgIGlmIGt3YXJnc1sic3Ns
X3R5cGUiXSA9PSAib3BlbnNzbCI6CisgICAgICAgIGFyZ3MgPSB7Im9wZW5zc2xfYmluYXJ5Ijog
a3dhcmdzWyJvcGVuc3NsX2JpbmFyeSJdfQorICAgIGVsaWYga3dhcmdzWyJzc2xfdHlwZSJdID09
ICJwcmVnZW5lcmF0ZWQiOgorICAgICAgICBhcmdzID0geyJob3N0X2tleV9wYXRoIjoga3dhcmdz
WyJob3N0X2tleV9wYXRoIl0sCisgICAgICAgICAgICAgICAgImhvc3RfY2VydF9wYXRoIjoga3dh
cmdzWyJob3N0X2NlcnRfcGF0aCJdLAorICAgICAgICAgICAgICAgICAiY2FfY2VydF9wYXRoIjog
a3dhcmdzWyJjYV9jZXJ0X3BhdGgiXX0KKyAgICBlbHNlOgorICAgICAgICBhcmdzID0ge30KKyAg
ICByZXR1cm4gYXJncworCisKK2RlZiBzc2xfZW52KGxvZ2dlciwgKiprd2FyZ3MpOgorICAgIHNz
bF9lbnZfY2xzID0gc3NsdXRpbHMuZW52aXJvbm1lbnRzW2t3YXJnc1sic3NsX3R5cGUiXV0KKyAg
ICByZXR1cm4gc3NsX2Vudl9jbHMobG9nZ2VyLCAqKmdldF9zc2xfa3dhcmdzKCoqa3dhcmdzKSkK
KworCitjbGFzcyBUZXN0RW52aXJvbm1lbnRFcnJvcihFeGNlcHRpb24pOgorICAgIHBhc3MKKwor
CitjbGFzcyBUZXN0RW52aXJvbm1lbnQob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
dGVzdF9wYXRocywgc3NsX2VudiwgcGF1c2VfYWZ0ZXJfdGVzdCwgZGVidWdfaW5mbywgb3B0aW9u
cywgZW52X2V4dHJhcyk6CisgICAgICAgICIiIkNvbnRleHQgbWFuYWdlciB0aGF0IG93bnMgdGhl
IHRlc3QgZW52aXJvbm1lbnQgaS5lLiB0aGUgaHR0cCBhbmQKKyAgICAgICAgd2Vic29ja2V0cyBz
ZXJ2ZXJzIiIiCisgICAgICAgIHNlbGYudGVzdF9wYXRocyA9IHRlc3RfcGF0aHMKKyAgICAgICAg
c2VsZi5zc2xfZW52ID0gc3NsX2VudgorICAgICAgICBzZWxmLnNlcnZlciA9IE5vbmUKKyAgICAg
ICAgc2VsZi5jb25maWcgPSBOb25lCisgICAgICAgIHNlbGYuZXh0ZXJuYWxfY29uZmlnID0gTm9u
ZQorICAgICAgICBzZWxmLnBhdXNlX2FmdGVyX3Rlc3QgPSBwYXVzZV9hZnRlcl90ZXN0CisgICAg
ICAgIHNlbGYudGVzdF9zZXJ2ZXJfcG9ydCA9IG9wdGlvbnMucG9wKCJ0ZXN0X3NlcnZlcl9wb3J0
IiwgVHJ1ZSkKKyAgICAgICAgc2VsZi5kZWJ1Z19pbmZvID0gZGVidWdfaW5mbworICAgICAgICBz
ZWxmLm9wdGlvbnMgPSBvcHRpb25zIGlmIG9wdGlvbnMgaXMgbm90IE5vbmUgZWxzZSB7fQorCisg
ICAgICAgIHNlbGYuY2FjaGVfbWFuYWdlciA9IG11bHRpcHJvY2Vzc2luZy5NYW5hZ2VyKCkKKyAg
ICAgICAgc2VsZi5zdGFzaCA9IHNlcnZlLnN0YXNoLlN0YXNoU2VydmVyKCkKKyAgICAgICAgc2Vs
Zi5lbnZfZXh0cmFzID0gZW52X2V4dHJhcworCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgor
ICAgICAgICBzZWxmLnN0YXNoLl9fZW50ZXJfXygpCisgICAgICAgIHNlbGYuc3NsX2Vudi5fX2Vu
dGVyX18oKQorICAgICAgICBzZWxmLmNhY2hlX21hbmFnZXIuX19lbnRlcl9fKCkKKyAgICAgICAg
Zm9yIGNtIGluIHNlbGYuZW52X2V4dHJhczoKKyAgICAgICAgICAgIGNtLl9fZW50ZXJfXyhzZWxm
Lm9wdGlvbnMpCisgICAgICAgIHNlbGYuc2V0dXBfc2VydmVyX2xvZ2dpbmcoKQorICAgICAgICBz
ZWxmLmNvbmZpZyA9IHNlbGYubG9hZF9jb25maWcoKQorICAgICAgICBzZXJ2ZS5zZXRfY29tcHV0
ZWRfZGVmYXVsdHMoc2VsZi5jb25maWcpCisgICAgICAgIHNlbGYuZXh0ZXJuYWxfY29uZmlnLCBz
ZWxmLnNlcnZlcnMgPSBzZXJ2ZS5zdGFydChzZWxmLmNvbmZpZywgc2VsZi5zc2xfZW52LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5nZXRfcm91dGVzKCkpCisgICAgICAgIGlmIHNlbGYub3B0aW9ucy5nZXQoInN1cHBvcnRzX2Rl
YnVnZ2VyIikgYW5kIHNlbGYuZGVidWdfaW5mbyBhbmQgc2VsZi5kZWJ1Z19pbmZvLmludGVyYWN0
aXZlOgorICAgICAgICAgICAgc2VsZi5pZ25vcmVfaW50ZXJydXB0cygpCisgICAgICAgIHJldHVy
biBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgZXhjX3R5cGUsIGV4Y192YWwsIGV4Y190
Yik6CisgICAgICAgIHNlbGYucHJvY2Vzc19pbnRlcnJ1cHRzKCkKKworICAgICAgICBmb3Igc2No
ZW1lLCBzZXJ2ZXJzIGluIHNlbGYuc2VydmVycy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGZv
ciBwb3J0LCBzZXJ2ZXIgaW4gc2VydmVyczoKKyAgICAgICAgICAgICAgICBzZXJ2ZXIua2lsbCgp
CisgICAgICAgIGZvciBjbSBpbiBzZWxmLmVudl9leHRyYXM6CisgICAgICAgICAgICBjbS5fX2V4
aXRfXyhleGNfdHlwZSwgZXhjX3ZhbCwgZXhjX3RiKQorICAgICAgICBzZWxmLmNhY2hlX21hbmFn
ZXIuX19leGl0X18oZXhjX3R5cGUsIGV4Y192YWwsIGV4Y190YikKKyAgICAgICAgc2VsZi5zc2xf
ZW52Ll9fZXhpdF9fKGV4Y190eXBlLCBleGNfdmFsLCBleGNfdGIpCisgICAgICAgIHNlbGYuc3Rh
c2guX19leGl0X18oKQorCisgICAgZGVmIGlnbm9yZV9pbnRlcnJ1cHRzKHNlbGYpOgorICAgICAg
ICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdJTlQsIHNpZ25hbC5TSUdfSUdOKQorCisgICAgZGVm
IHByb2Nlc3NfaW50ZXJydXB0cyhzZWxmKToKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwu
U0lHSU5ULCBzaWduYWwuU0lHX0RGTCkKKworICAgIGRlZiBsb2FkX2NvbmZpZyhzZWxmKToKKyAg
ICAgICAgZGVmYXVsdF9jb25maWdfcGF0aCA9IG9zLnBhdGguam9pbihzZXJ2ZV9wYXRoKHNlbGYu
dGVzdF9wYXRocyksICJjb25maWcuZGVmYXVsdC5qc29uIikKKyAgICAgICAgbG9jYWxfY29uZmln
X3BhdGggPSBvcy5wYXRoLmpvaW4oaGVyZSwgImNvbmZpZy5qc29uIikKKworICAgICAgICB3aXRo
IG9wZW4oZGVmYXVsdF9jb25maWdfcGF0aCkgYXMgZjoKKyAgICAgICAgICAgIGRlZmF1bHRfY29u
ZmlnID0ganNvbi5sb2FkKGYpCisKKyAgICAgICAgd2l0aCBvcGVuKGxvY2FsX2NvbmZpZ19wYXRo
KSBhcyBmOgorICAgICAgICAgICAgZGF0YSA9IGYucmVhZCgpCisgICAgICAgICAgICBsb2NhbF9j
b25maWcgPSBqc29uLmxvYWRzKGRhdGEgJSBzZWxmLm9wdGlvbnMpCisKKyAgICAgICAgI1RPRE86
IGFsbG93IG5vbi1kZWZhdWx0IGNvbmZpZ3VyYXRpb24gZm9yIHNzbAorCisgICAgICAgIGxvY2Fs
X2NvbmZpZ1siZXh0ZXJuYWxfaG9zdCJdID0gc2VsZi5vcHRpb25zLmdldCgiZXh0ZXJuYWxfaG9z
dCIsIE5vbmUpCisgICAgICAgIGxvY2FsX2NvbmZpZ1sic3NsIl1bImVuY3J5cHRfYWZ0ZXJfY29u
bmVjdCJdID0gc2VsZi5vcHRpb25zLmdldCgiZW5jcnlwdF9hZnRlcl9jb25uZWN0IiwgRmFsc2Up
CisKKyAgICAgICAgY29uZmlnID0gc2VydmUubWVyZ2VfanNvbihkZWZhdWx0X2NvbmZpZywgbG9j
YWxfY29uZmlnKQorICAgICAgICBjb25maWdbImRvY19yb290Il0gPSBzZXJ2ZV9wYXRoKHNlbGYu
dGVzdF9wYXRocykKKworICAgICAgICBpZiBub3Qgc2VsZi5zc2xfZW52LnNzbF9lbmFibGVkOgor
ICAgICAgICAgICAgY29uZmlnWyJwb3J0cyJdWyJodHRwcyJdID0gW05vbmVdCisKKyAgICAgICAg
aG9zdCA9IHNlbGYub3B0aW9ucy5nZXQoImNlcnRpZmljYXRlX2RvbWFpbiIsIGNvbmZpZ1siaG9z
dCJdKQorICAgICAgICBob3N0cyA9IFtob3N0XQorICAgICAgICBob3N0cy5leHRlbmQoIiVzLiVz
IiAlIChpdGVtWzBdLCBob3N0KSBmb3IgaXRlbSBpbiBzZXJ2ZS5nZXRfc3ViZG9tYWlucyhob3N0
KS52YWx1ZXMoKSkKKyAgICAgICAga2V5X2ZpbGUsIGNlcnRpZmljYXRlID0gc2VsZi5zc2xfZW52
Lmhvc3RfY2VydF9wYXRoKGhvc3RzKQorCisgICAgICAgIGNvbmZpZ1sia2V5X2ZpbGUiXSA9IGtl
eV9maWxlCisgICAgICAgIGNvbmZpZ1siY2VydGlmaWNhdGUiXSA9IGNlcnRpZmljYXRlCisKKyAg
ICAgICAgcmV0dXJuIGNvbmZpZworCisgICAgZGVmIHNldHVwX3NlcnZlcl9sb2dnaW5nKHNlbGYp
OgorICAgICAgICBzZXJ2ZXJfbG9nZ2VyID0gZ2V0X2RlZmF1bHRfbG9nZ2VyKGNvbXBvbmVudD0i
d3B0c2VydmUiKQorICAgICAgICBhc3NlcnQgc2VydmVyX2xvZ2dlciBpcyBub3QgTm9uZQorICAg
ICAgICBsb2dfZmlsdGVyID0gaGFuZGxlcnMuTG9nTGV2ZWxGaWx0ZXIobGFtYmRhIHg6eCwgImlu
Zm8iKQorICAgICAgICAjIERvd25ncmFkZSBlcnJvcnMgdG8gd2FybmluZ3MgZm9yIHRoZSBzZXJ2
ZXIKKyAgICAgICAgbG9nX2ZpbHRlciA9IExvZ0xldmVsUmV3cml0ZXIobG9nX2ZpbHRlciwgWyJl
cnJvciJdLCAid2FybmluZyIpCisgICAgICAgIHNlcnZlcl9sb2dnZXIuY29tcG9uZW50X2ZpbHRl
ciA9IGxvZ19maWx0ZXIKKworICAgICAgICBzZXJ2ZXJfbG9nZ2VyID0gcHJveHkuUXVldWVkUHJv
eHlMb2dnZXIoc2VydmVyX2xvZ2dlcikKKworICAgICAgICB0cnk6CisgICAgICAgICAgICAjU2V0
IGFzIHRoZSBkZWZhdWx0IGxvZ2dlciBmb3Igd3B0c2VydmUKKyAgICAgICAgICAgIHNlcnZlLnNl
dF9sb2dnZXIoc2VydmVyX2xvZ2dlcikKKyAgICAgICAgICAgIHNlcnZlLmxvZ2dlciA9IHNlcnZl
cl9sb2dnZXIKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICMgVGhpcyBo
YXBwZW5zIGlmIGxvZ2dpbmcgaGFzIGFscmVhZHkgYmVlbiBzZXQgdXAgZm9yIHdwdHNlcnZlCisg
ICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgZ2V0X3JvdXRlcyhzZWxmKToKKyAgICAgICAgcm91
dGVfYnVpbGRlciA9IHNlcnZlLlJvdXRlc0J1aWxkZXIoKQorCisgICAgICAgIGZvciBwYXRoLCBm
b3JtYXRfYXJncywgY29udGVudF90eXBlLCByb3V0ZSBpbiBbCisgICAgICAgICAgICAgICAgKCJ0
ZXN0aGFybmVzc19ydW5uZXIuaHRtbCIsIHt9LCAidGV4dC9odG1sIiwgIi90ZXN0aGFybmVzc19y
dW5uZXIuaHRtbCIpLAorICAgICAgICAgICAgICAgIChzZWxmLm9wdGlvbnMuZ2V0KCJ0ZXN0aGFy
bmVzc3JlcG9ydCIsICJ0ZXN0aGFybmVzc3JlcG9ydC5qcyIpLAorICAgICAgICAgICAgICAgICB7
Im91dHB1dCI6IHNlbGYucGF1c2VfYWZ0ZXJfdGVzdH0sICJ0ZXh0L2phdmFzY3JpcHQiLAorICAg
ICAgICAgICAgICAgICAiL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyIpXToKKyAgICAg
ICAgICAgIHBhdGggPSBvcy5wYXRoLm5vcm1wYXRoKG9zLnBhdGguam9pbihoZXJlLCBwYXRoKSkK
KyAgICAgICAgICAgIHJvdXRlX2J1aWxkZXIuYWRkX3N0YXRpYyhwYXRoLCBmb3JtYXRfYXJncywg
Y29udGVudF90eXBlLCByb3V0ZSkKKworICAgICAgICBmb3IgdXJsX2Jhc2UsIHBhdGhzIGluIHNl
bGYudGVzdF9wYXRocy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGlmIHVybF9iYXNlID09ICIv
IjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgcm91dGVfYnVpbGRlci5h
ZGRfbW91bnRfcG9pbnQodXJsX2Jhc2UsIHBhdGhzWyJ0ZXN0c19wYXRoIl0pCisKKyAgICAgICAg
aWYgIi8iIG5vdCBpbiBzZWxmLnRlc3RfcGF0aHM6CisgICAgICAgICAgICBkZWwgcm91dGVfYnVp
bGRlci5tb3VudHBvaW50X3JvdXRlc1siLyJdCisKKyAgICAgICAgcmV0dXJuIHJvdXRlX2J1aWxk
ZXIuZ2V0X3JvdXRlcygpCisKKyAgICBkZWYgZW5zdXJlX3N0YXJ0ZWQoc2VsZik6CisgICAgICAg
ICMgUGF1c2UgZm9yIGEgd2hpbGUgdG8gZW5zdXJlIHRoYXQgdGhlIHNlcnZlciBoYXMgYSBjaGFu
Y2UgdG8gc3RhcnQKKyAgICAgICAgZm9yIF8gaW4geHJhbmdlKDIwKToKKyAgICAgICAgICAgIGZh
aWxlZCA9IHNlbGYudGVzdF9zZXJ2ZXJzKCkKKyAgICAgICAgICAgIGlmIG5vdCBmYWlsZWQ6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICB0aW1lLnNsZWVwKDAuNSkKKyAgICAg
ICAgcmFpc2UgRW52aXJvbm1lbnRFcnJvcigiU2VydmVycyBmYWlsZWQgdG8gc3RhcnQgKHNjaGVt
ZTpwb3J0KTogJXMiICUgKCIlczolcyIgZm9yIGl0ZW0gaW4gZmFpbGVkKSkKKworICAgIGRlZiB0
ZXN0X3NlcnZlcnMoc2VsZik6CisgICAgICAgIGZhaWxlZCA9IFtdCisgICAgICAgIGZvciBzY2hl
bWUsIHNlcnZlcnMgaW4gc2VsZi5zZXJ2ZXJzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgZm9y
IHBvcnQsIHNlcnZlciBpbiBzZXJ2ZXJzOgorICAgICAgICAgICAgICAgIGlmIHNlbGYudGVzdF9z
ZXJ2ZXJfcG9ydDoKKyAgICAgICAgICAgICAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoKQorICAg
ICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBzLmNvbm5lY3Qo
KHNlbGYuY29uZmlnWyJob3N0Il0sIHBvcnQpKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQg
c29ja2V0LmVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgZmFpbGVkLmFwcGVuZCgoc2No
ZW1lLCBwb3J0KSkKKyAgICAgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHMuY2xvc2UoKQorCisgICAgICAgICAgICAgICAgaWYgbm90IHNlcnZlci5pc19h
bGl2ZSgpOgorICAgICAgICAgICAgICAgICAgICBmYWlsZWQuYXBwZW5kKChzY2hlbWUsIHBvcnQp
KQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5l
ci93cHRydW5uZXIvZXhlY3V0b3JzL19faW5pdF9fLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0
ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvZXhlY3V0b3JzL19faW5pdF9fLnB5Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yNDc2MWI4MzgzMAotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIv
d3B0cnVubmVyL2V4ZWN1dG9ycy9fX2luaXRfXy5weQpAQCAtMCwwICsxLDQgQEAKK2Zyb20gYmFz
ZSBpbXBvcnQgKGV4ZWN1dG9yX2t3YXJncywKKyAgICAgICAgICAgICAgICAgIHRlc3RoYXJuZXNz
X3Jlc3VsdF9jb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICByZWZ0ZXN0X3Jlc3VsdF9jb252
ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICBUZXN0RXhlY3V0b3IpCmRpZmYgLS1naXQgYS9XZWJE
cml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9leGVjdXRv
cnMvYmFzZS5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIv
d3B0cnVubmVyL2V4ZWN1dG9ycy9iYXNlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi4yN2JlMGM1NGI3OAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3Rz
L2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2V4ZWN1dG9ycy9iYXNlLnB5
CkBAIC0wLDAgKzEsNDc5IEBACitpbXBvcnQgaGFzaGxpYgoraW1wb3J0IGh0dHBsaWIKK2ltcG9y
dCBvcworaW1wb3J0IHRocmVhZGluZworaW1wb3J0IHRyYWNlYmFjaworaW1wb3J0IHNvY2tldAor
aW1wb3J0IHVybHBhcnNlCitmcm9tIGFiYyBpbXBvcnQgQUJDTWV0YSwgYWJzdHJhY3RtZXRob2QK
KworZnJvbSAuLnRlc3RydW5uZXIgaW1wb3J0IFN0b3AKKworaGVyZSA9IG9zLnBhdGguc3BsaXQo
X19maWxlX18pWzBdCisKKyMgRXh0cmEgdGltZW91dCB0byB1c2UgYWZ0ZXIgaW50ZXJuYWwgdGVz
dCB0aW1lb3V0IGF0IHdoaWNoIHRoZSBoYXJuZXNzCisjIHNob3VsZCBmb3JjZSBhIHRpbWVvdXQK
K2V4dHJhX3RpbWVvdXQgPSA1ICMgc2Vjb25kcworCisKK2RlZiBleGVjdXRvcl9rd2FyZ3ModGVz
dF90eXBlLCBzZXJ2ZXJfY29uZmlnLCBjYWNoZV9tYW5hZ2VyLCAqKmt3YXJncyk6CisgICAgdGlt
ZW91dF9tdWx0aXBsaWVyID0ga3dhcmdzWyJ0aW1lb3V0X211bHRpcGxpZXIiXQorICAgIGlmIHRp
bWVvdXRfbXVsdGlwbGllciBpcyBOb25lOgorICAgICAgICB0aW1lb3V0X211bHRpcGxpZXIgPSAx
CisKKyAgICBleGVjdXRvcl9rd2FyZ3MgPSB7InNlcnZlcl9jb25maWciOiBzZXJ2ZXJfY29uZmln
LAorICAgICAgICAgICAgICAgICAgICAgICAidGltZW91dF9tdWx0aXBsaWVyIjogdGltZW91dF9t
dWx0aXBsaWVyLAorICAgICAgICAgICAgICAgICAgICAgICAiZGVidWdfaW5mbyI6IGt3YXJnc1si
ZGVidWdfaW5mbyJdfQorCisgICAgaWYgdGVzdF90eXBlID09ICJyZWZ0ZXN0IjoKKyAgICAgICAg
ZXhlY3V0b3Jfa3dhcmdzWyJzY3JlZW5zaG90X2NhY2hlIl0gPSBjYWNoZV9tYW5hZ2VyLmRpY3Qo
KQorCisgICAgaWYgdGVzdF90eXBlID09ICJ3ZHNwZWMiOgorICAgICAgICBleGVjdXRvcl9rd2Fy
Z3NbImJpbmFyeSJdID0ga3dhcmdzLmdldCgiYmluYXJ5IikKKyAgICAgICAgZXhlY3V0b3Jfa3dh
cmdzWyJ3ZWJkcml2ZXJfYmluYXJ5Il0gPSBrd2FyZ3MuZ2V0KCJ3ZWJkcml2ZXJfYmluYXJ5IikK
KyAgICAgICAgZXhlY3V0b3Jfa3dhcmdzWyJ3ZWJkcml2ZXJfYXJncyJdID0ga3dhcmdzLmdldCgi
d2ViZHJpdmVyX2FyZ3MiKQorCisgICAgcmV0dXJuIGV4ZWN1dG9yX2t3YXJncworCisKK2RlZiBz
dHJpcF9zZXJ2ZXIodXJsKToKKyAgICAiIiJSZW1vdmUgdGhlIHNjaGVtZSBhbmQgbmV0bG9jIGZy
b20gYSB1cmwsIGxlYXZpbmcgb25seSB0aGUgcGF0aCBhbmQgYW55IHF1ZXJ5CisgICAgb3IgZnJh
Z21lbnQuCisKKyAgICB1cmwgLSB0aGUgdXJsIHRvIHN0cmlwCisKKyAgICBlLmcuIGh0dHA6Ly9l
eGFtcGxlLm9yZzo4MDAwL3Rlc3RzP2lkPTEjMiBiZWNvbWVzIC90ZXN0cz9pZD0xIzIiIiIKKwor
ICAgIHVybF9wYXJ0cyA9IGxpc3QodXJscGFyc2UudXJsc3BsaXQodXJsKSkKKyAgICB1cmxfcGFy
dHNbMF0gPSAiIgorICAgIHVybF9wYXJ0c1sxXSA9ICIiCisgICAgcmV0dXJuIHVybHBhcnNlLnVy
bHVuc3BsaXQodXJsX3BhcnRzKQorCisKK2NsYXNzIFRlc3RoYXJuZXNzUmVzdWx0Q29udmVydGVy
KG9iamVjdCk6CisgICAgaGFybmVzc19jb2RlcyA9IHswOiAiT0siLAorICAgICAgICAgICAgICAg
ICAgICAgMTogIkVSUk9SIiwKKyAgICAgICAgICAgICAgICAgICAgIDI6ICJUSU1FT1VUIn0KKwor
ICAgIHRlc3RfY29kZXMgPSB7MDogIlBBU1MiLAorICAgICAgICAgICAgICAgICAgMTogIkZBSUwi
LAorICAgICAgICAgICAgICAgICAgMjogIlRJTUVPVVQiLAorICAgICAgICAgICAgICAgICAgMzog
Ik5PVFJVTiJ9CisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgdGVzdCwgcmVzdWx0KToKKyAgICAg
ICAgIiIiQ29udmVydCBhIEpTT04gcmVzdWx0IGludG8gYSAoVGVzdFJlc3VsdCwgW1N1YnRlc3RS
ZXN1bHRdKSB0dXBsZSIiIgorICAgICAgICByZXN1bHRfdXJsLCBzdGF0dXMsIG1lc3NhZ2UsIHN0
YWNrLCBzdWJ0ZXN0X3Jlc3VsdHMgPSByZXN1bHQKKyAgICAgICAgYXNzZXJ0IHJlc3VsdF91cmwg
PT0gdGVzdC51cmwsICgiR290IHJlc3VsdHMgZnJvbSAlcywgZXhwZWN0ZWQgJXMiICUKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlc3VsdF91cmwsIHRlc3QudXJsKSkK
KyAgICAgICAgaGFybmVzc19yZXN1bHQgPSB0ZXN0LnJlc3VsdF9jbHMoc2VsZi5oYXJuZXNzX2Nv
ZGVzW3N0YXR1c10sIG1lc3NhZ2UpCisgICAgICAgIHJldHVybiAoaGFybmVzc19yZXN1bHQsCisg
ICAgICAgICAgICAgICAgW3Rlc3Quc3VidGVzdF9yZXN1bHRfY2xzKG5hbWUsIHNlbGYudGVzdF9j
b2Rlc1tzdGF0dXNdLCBtZXNzYWdlLCBzdGFjaykKKyAgICAgICAgICAgICAgICAgZm9yIG5hbWUs
IHN0YXR1cywgbWVzc2FnZSwgc3RhY2sgaW4gc3VidGVzdF9yZXN1bHRzXSkKKworCit0ZXN0aGFy
bmVzc19yZXN1bHRfY29udmVydGVyID0gVGVzdGhhcm5lc3NSZXN1bHRDb252ZXJ0ZXIoKQorCisK
K2RlZiByZWZ0ZXN0X3Jlc3VsdF9jb252ZXJ0ZXIoc2VsZiwgdGVzdCwgcmVzdWx0KToKKyAgICBy
ZXR1cm4gKHRlc3QucmVzdWx0X2NscyhyZXN1bHRbInN0YXR1cyJdLCByZXN1bHRbIm1lc3NhZ2Ui
XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT1yZXN1bHQuZ2V0KCJleHRyYSIp
KSwgW10pCisKKworZGVmIHB5dGVzdF9yZXN1bHRfY29udmVydGVyKHNlbGYsIHRlc3QsIGRhdGEp
OgorICAgIGhhcm5lc3NfZGF0YSwgc3VidGVzdF9kYXRhID0gZGF0YQorCisgICAgaWYgc3VidGVz
dF9kYXRhIGlzIE5vbmU6CisgICAgICAgIHN1YnRlc3RfZGF0YSA9IFtdCisKKyAgICBoYXJuZXNz
X3Jlc3VsdCA9IHRlc3QucmVzdWx0X2NscygqaGFybmVzc19kYXRhKQorICAgIHN1YnRlc3RfcmVz
dWx0cyA9IFt0ZXN0LnN1YnRlc3RfcmVzdWx0X2NscygqaXRlbSkgZm9yIGl0ZW0gaW4gc3VidGVz
dF9kYXRhXQorCisgICAgcmV0dXJuIChoYXJuZXNzX3Jlc3VsdCwgc3VidGVzdF9yZXN1bHRzKQor
CisKK2NsYXNzIEV4ZWN1dG9yRXhjZXB0aW9uKEV4Y2VwdGlvbik6CisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIHN0YXR1cywgbWVzc2FnZSk6CisgICAgICAgIHNlbGYuc3RhdHVzID0gc3RhdHVzCisg
ICAgICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2UKKworCitjbGFzcyBUZXN0RXhlY3V0b3Iob2Jq
ZWN0KToKKyAgICBfX21ldGFjbGFzc19fID0gQUJDTWV0YQorCisgICAgdGVzdF90eXBlID0gTm9u
ZQorICAgIGNvbnZlcnRfcmVzdWx0ID0gTm9uZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJy
b3dzZXIsIHNlcnZlcl9jb25maWcsIHRpbWVvdXRfbXVsdGlwbGllcj0xLAorICAgICAgICAgICAg
ICAgICBkZWJ1Z19pbmZvPU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgIiIiQWJzdHJhY3QgQmFz
ZSBjbGFzcyBmb3Igb2JqZWN0IHRoYXQgYWN0dWFsbHkgZXhlY3V0ZXMgdGhlIHRlc3RzIGluIGEK
KyAgICAgICAgc3BlY2lmaWMgYnJvd3Nlci4gVHlwaWNhbGx5IHRoZXJlIHdpbGwgYmUgYSBkaWZm
ZXJlbnQgVGVzdEV4ZWN1dG9yCisgICAgICAgIHN1YmNsYXNzIGZvciBlYWNoIHRlc3QgdHlwZSBh
bmQgbWV0aG9kIG9mIGV4ZWN1dGluZyB0ZXN0cy4KKworICAgICAgICA6cGFyYW0gYnJvd3Nlcjog
RXhlY3V0b3JCcm93c2VyIGluc3RhbmNlIHByb3ZpZGluZyBwcm9wZXJ0aWVzIG9mIHRoZQorICAg
ICAgICAgICAgICAgICAgICAgICAgYnJvd3NlciB0aGF0IHdpbGwgYmUgdGVzdGVkLgorICAgICAg
ICA6cGFyYW0gc2VydmVyX2NvbmZpZzogRGljdGlvbmFyeSBvZiB3cHRzZXJ2ZSBzZXJ2ZXIgY29u
ZmlndXJhdGlvbiBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0gc3Rv
cmVkIGluIFRlc3RFbnZpcm9ubWVudC5leHRlcm5hbF9jb25maWcKKyAgICAgICAgOnBhcmFtIHRp
bWVvdXRfbXVsdGlwbGllcjogTXVsdGlwbGllciByZWxhdGl2ZSB0byBiYXNlIHRpbWVvdXQgdG8g
dXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gc2V0dGluZyB0ZXN0
IHRpbWVvdXQuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnJ1bm5lciA9IE5vbmUKKyAgICAg
ICAgc2VsZi5icm93c2VyID0gYnJvd3NlcgorICAgICAgICBzZWxmLnNlcnZlcl9jb25maWcgPSBz
ZXJ2ZXJfY29uZmlnCisgICAgICAgIHNlbGYudGltZW91dF9tdWx0aXBsaWVyID0gdGltZW91dF9t
dWx0aXBsaWVyCisgICAgICAgIHNlbGYuZGVidWdfaW5mbyA9IGRlYnVnX2luZm8KKyAgICAgICAg
c2VsZi5sYXN0X2Vudmlyb25tZW50ID0geyJwcm90b2NvbCI6ICJodHRwIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJwcmVmcyI6IHt9fQorICAgICAgICBzZWxmLnByb3RvY29s
ID0gTm9uZSAjIFRoaXMgbXVzdCBiZSBzZXQgaW4gc3ViY2xhc3NlcworCisgICAgQHByb3BlcnR5
CisgICAgZGVmIGxvZ2dlcihzZWxmKToKKyAgICAgICAgIiIiU3RydWN0dXJlZExvZ2dlciBmb3Ig
dGhpcyBleGVjdXRvciIiIgorICAgICAgICBpZiBzZWxmLnJ1bm5lciBpcyBub3QgTm9uZToKKyAg
ICAgICAgICAgIHJldHVybiBzZWxmLnJ1bm5lci5sb2dnZXIKKworICAgIGRlZiBzZXR1cChzZWxm
LCBydW5uZXIpOgorICAgICAgICAiIiJSdW4gc3RlcHMgbmVlZGVkIGJlZm9yZSB0ZXN0cyBjYW4g
YmUgc3RhcnRlZCBlLmcuIGNvbm5lY3RpbmcgdG8KKyAgICAgICAgYnJvd3NlciBpbnN0YW5jZQor
CisgICAgICAgIDpwYXJhbSBydW5uZXI6IFRlc3RSdW5uZXIgaW5zdGFuY2UgdGhhdCBpcyBnb2lu
ZyB0byBydW4gdGhlIHRlc3RzIiIiCisgICAgICAgIHNlbGYucnVubmVyID0gcnVubmVyCisgICAg
ICAgIGlmIHNlbGYucHJvdG9jb2wgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLnByb3Rv
Y29sLnNldHVwKHJ1bm5lcikKKworICAgIGRlZiB0ZWFyZG93bihzZWxmKToKKyAgICAgICAgIiIi
UnVuIGNsZWFudXAgc3RlcHMgYWZ0ZXIgdGVzdHMgaGF2ZSBmaW5pc2hlZCIiIgorICAgICAgICBp
ZiBzZWxmLnByb3RvY29sIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5wcm90b2NvbC50
ZWFyZG93bigpCisKKyAgICBkZWYgcnVuX3Rlc3Qoc2VsZiwgdGVzdCk6CisgICAgICAgICIiIlJ1
biBhIHBhcnRpY3VsYXIgdGVzdC4KKworICAgICAgICA6cGFyYW0gdGVzdDogVGhlIHRlc3QgdG8g
cnVuIiIiCisgICAgICAgIGlmIHRlc3QuZW52aXJvbm1lbnQgIT0gc2VsZi5sYXN0X2Vudmlyb25t
ZW50OgorICAgICAgICAgICAgc2VsZi5vbl9lbnZpcm9ubWVudF9jaGFuZ2UodGVzdC5lbnZpcm9u
bWVudCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICByZXN1bHQgPSBzZWxmLmRvX3Rlc3Qo
dGVzdCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgcmVzdWx0
ID0gc2VsZi5yZXN1bHRfZnJvbV9leGNlcHRpb24odGVzdCwgZSkKKworICAgICAgICBpZiByZXN1
bHQgaXMgU3RvcDoKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQKKworICAgICAgICAjIGxvZyBy
ZXN1bHQgb2YgcGFyZW50IHRlc3QKKyAgICAgICAgaWYgcmVzdWx0WzBdLnN0YXR1cyA9PSAiRVJS
T1IiOgorICAgICAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcocmVzdWx0WzBdLm1lc3NhZ2UpCisK
KyAgICAgICAgc2VsZi5sYXN0X2Vudmlyb25tZW50ID0gdGVzdC5lbnZpcm9ubWVudAorCisgICAg
ICAgIHNlbGYucnVubmVyLnNlbmRfbWVzc2FnZSgidGVzdF9lbmRlZCIsIHRlc3QsIHJlc3VsdCkK
KworICAgIGRlZiBzZXJ2ZXJfdXJsKHNlbGYsIHByb3RvY29sKToKKyAgICAgICAgcmV0dXJuICIl
czovLyVzOiVzIiAlIChwcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLnNlcnZlcl9jb25maWdbImhvc3QiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxmLnNlcnZlcl9jb25maWdbInBvcnRzIl1bcHJvdG9jb2xdWzBdKQorCisgICAgZGVmIHRl
c3RfdXJsKHNlbGYsIHRlc3QpOgorICAgICAgICByZXR1cm4gdXJscGFyc2UudXJsam9pbihzZWxm
LnNlcnZlcl91cmwodGVzdC5lbnZpcm9ubWVudFsicHJvdG9jb2wiXSksIHRlc3QudXJsKQorCisg
ICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIGRvX3Rlc3Qoc2VsZiwgdGVzdCk6CisgICAgICAg
ICIiIlRlc3QtdHlwZSBhbmQgcHJvdG9jb2wgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgcnVu
bmluZyBhCisgICAgICAgIHNwZWNpZmljIHRlc3QuCisKKyAgICAgICAgOnBhcmFtIHRlc3Q6IFRo
ZSB0ZXN0IHRvIHJ1bi4iIiIKKyAgICAgICAgcGFzcworCisgICAgZGVmIG9uX2Vudmlyb25tZW50
X2NoYW5nZShzZWxmLCBuZXdfZW52aXJvbm1lbnQpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYg
cmVzdWx0X2Zyb21fZXhjZXB0aW9uKHNlbGYsIHRlc3QsIGUpOgorICAgICAgICBpZiBoYXNhdHRy
KGUsICJzdGF0dXMiKSBhbmQgZS5zdGF0dXMgaW4gdGVzdC5yZXN1bHRfY2xzLnN0YXR1c2VzOgor
ICAgICAgICAgICAgc3RhdHVzID0gZS5zdGF0dXMKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg
IHN0YXR1cyA9ICJFUlJPUiIKKyAgICAgICAgbWVzc2FnZSA9IHVuaWNvZGUoZ2V0YXR0cihlLCAi
bWVzc2FnZSIsICIiKSkKKyAgICAgICAgaWYgbWVzc2FnZToKKyAgICAgICAgICAgIG1lc3NhZ2Ug
Kz0gIlxuIgorICAgICAgICBtZXNzYWdlICs9IHRyYWNlYmFjay5mb3JtYXRfZXhjKGUpCisgICAg
ICAgIHJldHVybiB0ZXN0LnJlc3VsdF9jbHMoc3RhdHVzLCBtZXNzYWdlKSwgW10KKworCitjbGFz
cyBUZXN0aGFybmVzc0V4ZWN1dG9yKFRlc3RFeGVjdXRvcik6CisgICAgY29udmVydF9yZXN1bHQg
PSB0ZXN0aGFybmVzc19yZXN1bHRfY29udmVydGVyCisKKworY2xhc3MgUmVmVGVzdEV4ZWN1dG9y
KFRlc3RFeGVjdXRvcik6CisgICAgY29udmVydF9yZXN1bHQgPSByZWZ0ZXN0X3Jlc3VsdF9jb252
ZXJ0ZXIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm93c2VyLCBzZXJ2ZXJfY29uZmlnLCB0
aW1lb3V0X211bHRpcGxpZXI9MSwgc2NyZWVuc2hvdF9jYWNoZT1Ob25lLAorICAgICAgICAgICAg
ICAgICBkZWJ1Z19pbmZvPU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgVGVzdEV4ZWN1dG9yLl9f
aW5pdF9fKHNlbGYsIGJyb3dzZXIsIHNlcnZlcl9jb25maWcsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0aW1lb3V0X211bHRpcGxpZXI9dGltZW91dF9tdWx0aXBsaWVyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdfaW5mbz1kZWJ1Z19pbmZvKQorCisgICAgICAg
IHNlbGYuc2NyZWVuc2hvdF9jYWNoZSA9IHNjcmVlbnNob3RfY2FjaGUKKworCitjbGFzcyBSZWZU
ZXN0SW1wbGVtZW50YXRpb24ob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZXhlY3V0
b3IpOgorICAgICAgICBzZWxmLnRpbWVvdXRfbXVsdGlwbGllciA9IGV4ZWN1dG9yLnRpbWVvdXRf
bXVsdGlwbGllcgorICAgICAgICBzZWxmLmV4ZWN1dG9yID0gZXhlY3V0b3IKKyAgICAgICAgIyBD
YWNoZSBvZiB1cmw6KHNjcmVlbnNob3QgaGFzaCwgc2NyZWVuc2hvdCkuIFR5cGljYWxseSB0aGUK
KyAgICAgICAgIyBzY3JlZW5zaG90IGlzIE5vbmUsIGJ1dCB3ZSBzZXQgdGhpcyB2YWx1ZSBpZiBh
IHRlc3QgZmFpbHMKKyAgICAgICAgIyBhbmQgdGhlIHNjcmVlbnNob3Qgd2FzIHRha2VuIGZyb20g
dGhlIGNhY2hlIHNvIHRoYXQgd2UgbWF5CisgICAgICAgICMgcmV0cmlldmUgdGhlIHNjcmVlbnNo
b3QgZnJvbSB0aGUgY2FjaGUgZGlyZWN0bHkgaW4gdGhlIGZ1dHVyZQorICAgICAgICBzZWxmLnNj
cmVlbnNob3RfY2FjaGUgPSBzZWxmLmV4ZWN1dG9yLnNjcmVlbnNob3RfY2FjaGUKKyAgICAgICAg
c2VsZi5tZXNzYWdlID0gTm9uZQorCisgICAgZGVmIHNldHVwKHNlbGYpOgorICAgICAgICBwYXNz
CisKKyAgICBkZWYgdGVhcmRvd24oc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIEBwcm9wZXJ0
eQorICAgIGRlZiBsb2dnZXIoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmV4ZWN1dG9yLmxv
Z2dlcgorCisgICAgZGVmIGdldF9oYXNoKHNlbGYsIHRlc3QsIHZpZXdwb3J0X3NpemUsIGRwaSk6
CisgICAgICAgIHRpbWVvdXQgPSB0ZXN0LnRpbWVvdXQgKiBzZWxmLnRpbWVvdXRfbXVsdGlwbGll
cgorICAgICAgICBrZXkgPSAodGVzdC51cmwsIHZpZXdwb3J0X3NpemUsIGRwaSkKKworICAgICAg
ICBpZiBrZXkgbm90IGluIHNlbGYuc2NyZWVuc2hvdF9jYWNoZToKKyAgICAgICAgICAgIHN1Y2Nl
c3MsIGRhdGEgPSBzZWxmLmV4ZWN1dG9yLnNjcmVlbnNob3QodGVzdCwgdmlld3BvcnRfc2l6ZSwg
ZHBpKQorCisgICAgICAgICAgICBpZiBub3Qgc3VjY2VzczoKKyAgICAgICAgICAgICAgICByZXR1
cm4gRmFsc2UsIGRhdGEKKworICAgICAgICAgICAgc2NyZWVuc2hvdCA9IGRhdGEKKyAgICAgICAg
ICAgIGhhc2hfdmFsdWUgPSBoYXNobGliLnNoYTEoc2NyZWVuc2hvdCkuaGV4ZGlnZXN0KCkKKwor
ICAgICAgICAgICAgc2VsZi5zY3JlZW5zaG90X2NhY2hlW2tleV0gPSAoaGFzaF92YWx1ZSwgTm9u
ZSkKKworICAgICAgICAgICAgcnYgPSAoaGFzaF92YWx1ZSwgc2NyZWVuc2hvdCkKKyAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgIHJ2ID0gc2VsZi5zY3JlZW5zaG90X2NhY2hlW2tleV0KKworICAg
ICAgICBzZWxmLm1lc3NhZ2UuYXBwZW5kKCIlcyAlcyIgJSAodGVzdC51cmwsIHJ2WzBdKSkKKyAg
ICAgICAgcmV0dXJuIFRydWUsIHJ2CisKKyAgICBkZWYgaXNfcGFzcyhzZWxmLCBsaHNfaGFzaCwg
cmhzX2hhc2gsIHJlbGF0aW9uKToKKyAgICAgICAgYXNzZXJ0IHJlbGF0aW9uIGluICgiPT0iLCAi
IT0iKQorICAgICAgICBzZWxmLm1lc3NhZ2UuYXBwZW5kKCJUZXN0aW5nICVzICVzICVzIiAlIChs
aHNfaGFzaCwgcmVsYXRpb24sIHJoc19oYXNoKSkKKyAgICAgICAgcmV0dXJuICgocmVsYXRpb24g
PT0gIj09IiBhbmQgbGhzX2hhc2ggPT0gcmhzX2hhc2gpIG9yCisgICAgICAgICAgICAgICAgKHJl
bGF0aW9uID09ICIhPSIgYW5kIGxoc19oYXNoICE9IHJoc19oYXNoKSkKKworICAgIGRlZiBydW5f
dGVzdChzZWxmLCB0ZXN0KToKKyAgICAgICAgdmlld3BvcnRfc2l6ZSA9IHRlc3Qudmlld3BvcnRf
c2l6ZQorICAgICAgICBkcGkgPSB0ZXN0LmRwaQorICAgICAgICBzZWxmLm1lc3NhZ2UgPSBbXQor
CisgICAgICAgICMgRGVwdGgtZmlyc3Qgc2VhcmNoIG9mIHJlZmVyZW5jZSB0cmVlLCB3aXRoIHRo
ZSBnb2FsCisgICAgICAgICMgb2YgcmVhY2hpbmdzIGEgbGVhZiBub2RlIHdpdGggb25seSBwYXNz
IHJlc3VsdHMKKworICAgICAgICBzdGFjayA9IGxpc3QoKCh0ZXN0LCBpdGVtWzBdKSwgaXRlbVsx
XSkgZm9yIGl0ZW0gaW4gcmV2ZXJzZWQodGVzdC5yZWZlcmVuY2VzKSkKKyAgICAgICAgd2hpbGUg
c3RhY2s6CisgICAgICAgICAgICBoYXNoZXMgPSBbTm9uZSwgTm9uZV0KKyAgICAgICAgICAgIHNj
cmVlbnNob3RzID0gW05vbmUsIE5vbmVdCisKKyAgICAgICAgICAgIG5vZGVzLCByZWxhdGlvbiA9
IHN0YWNrLnBvcCgpCisKKyAgICAgICAgICAgIGZvciBpLCBub2RlIGluIGVudW1lcmF0ZShub2Rl
cyk6CisgICAgICAgICAgICAgICAgc3VjY2VzcywgZGF0YSA9IHNlbGYuZ2V0X2hhc2gobm9kZSwg
dmlld3BvcnRfc2l6ZSwgZHBpKQorICAgICAgICAgICAgICAgIGlmIHN1Y2Nlc3MgaXMgRmFsc2U6
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7InN0YXR1cyI6IGRhdGFbMF0sICJtZXNzYWdl
IjogZGF0YVsxXX0KKworICAgICAgICAgICAgICAgIGhhc2hlc1tpXSwgc2NyZWVuc2hvdHNbaV0g
PSBkYXRhCisKKyAgICAgICAgICAgIGlmIHNlbGYuaXNfcGFzcyhoYXNoZXNbMF0sIGhhc2hlc1sx
XSwgcmVsYXRpb24pOgorICAgICAgICAgICAgICAgIGlmIG5vZGVzWzFdLnJlZmVyZW5jZXM6Cisg
ICAgICAgICAgICAgICAgICAgIHN0YWNrLmV4dGVuZChsaXN0KCgobm9kZXNbMV0sIGl0ZW1bMF0p
LCBpdGVtWzFdKSBmb3IgaXRlbSBpbiByZXZlcnNlZChub2Rlc1sxXS5yZWZlcmVuY2VzKSkpCisg
ICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBXZSBwYXNzZWQKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHsic3RhdHVzIjoiUEFTUyIsICJtZXNzYWdlIjogTm9u
ZX0KKworICAgICAgICAjIFdlIGZhaWxlZCwgc28gY29uc3RydWN0IGEgZmFpbHVyZSBtZXNzYWdl
CisKKyAgICAgICAgZm9yIGksIChub2RlLCBzY3JlZW5zaG90KSBpbiBlbnVtZXJhdGUoemlwKG5v
ZGVzLCBzY3JlZW5zaG90cykpOgorICAgICAgICAgICAgaWYgc2NyZWVuc2hvdCBpcyBOb25lOgor
ICAgICAgICAgICAgICAgIHN1Y2Nlc3MsIHNjcmVlbnNob3QgPSBzZWxmLnJldGFrZV9zY3JlZW5z
aG90KG5vZGUsIHZpZXdwb3J0X3NpemUsIGRwaSkKKyAgICAgICAgICAgICAgICBpZiBzdWNjZXNz
OgorICAgICAgICAgICAgICAgICAgICBzY3JlZW5zaG90c1tpXSA9IHNjcmVlbnNob3QKKworICAg
ICAgICBsb2dfZGF0YSA9IFt7InVybCI6IG5vZGVzWzBdLnVybCwgInNjcmVlbnNob3QiOiBzY3Jl
ZW5zaG90c1swXX0sIHJlbGF0aW9uLAorICAgICAgICAgICAgICAgICAgICB7InVybCI6IG5vZGVz
WzFdLnVybCwgInNjcmVlbnNob3QiOiBzY3JlZW5zaG90c1sxXX1dCisKKyAgICAgICAgcmV0dXJu
IHsic3RhdHVzIjogIkZBSUwiLAorICAgICAgICAgICAgICAgICJtZXNzYWdlIjogIlxuIi5qb2lu
KHNlbGYubWVzc2FnZSksCisgICAgICAgICAgICAgICAgImV4dHJhIjogeyJyZWZ0ZXN0X3NjcmVl
bnNob3RzIjogbG9nX2RhdGF9fQorCisgICAgZGVmIHJldGFrZV9zY3JlZW5zaG90KHNlbGYsIG5v
ZGUsIHZpZXdwb3J0X3NpemUsIGRwaSk6CisgICAgICAgIHN1Y2Nlc3MsIGRhdGEgPSBzZWxmLmV4
ZWN1dG9yLnNjcmVlbnNob3Qobm9kZSwgdmlld3BvcnRfc2l6ZSwgZHBpKQorICAgICAgICBpZiBu
b3Qgc3VjY2VzczoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZSwgZGF0YQorCisgICAgICAgIGtl
eSA9IChub2RlLnVybCwgdmlld3BvcnRfc2l6ZSwgZHBpKQorICAgICAgICBoYXNoX3ZhbCwgXyA9
IHNlbGYuc2NyZWVuc2hvdF9jYWNoZVtrZXldCisgICAgICAgIHNlbGYuc2NyZWVuc2hvdF9jYWNo
ZVtrZXldID0gaGFzaF92YWwsIGRhdGEKKyAgICAgICAgcmV0dXJuIFRydWUsIGRhdGEKKworCitj
bGFzcyBXZHNwZWNFeGVjdXRvcihUZXN0RXhlY3V0b3IpOgorICAgIGNvbnZlcnRfcmVzdWx0ID0g
cHl0ZXN0X3Jlc3VsdF9jb252ZXJ0ZXIKKyAgICBwcm90b2NvbF9jbHMgPSBOb25lCisKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgYnJvd3Nlciwgc2VydmVyX2NvbmZpZywgd2ViZHJpdmVyX2JpbmFy
eSwKKyAgICAgICAgICAgICAgICAgd2ViZHJpdmVyX2FyZ3MsIHRpbWVvdXRfbXVsdGlwbGllcj0x
LCBjYXBhYmlsaXRpZXM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgZGVidWdfaW5mbz1Ob25lLCAq
Kmt3YXJncyk6CisgICAgICAgIHNlbGYuZG9fZGVsYXllZF9pbXBvcnRzKCkKKyAgICAgICAgVGVz
dEV4ZWN1dG9yLl9faW5pdF9fKHNlbGYsIGJyb3dzZXIsIHNlcnZlcl9jb25maWcsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0X211bHRpcGxpZXI9dGltZW91dF9tdWx0aXBs
aWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdfaW5mbz1kZWJ1Z19pbmZv
KQorICAgICAgICBzZWxmLndlYmRyaXZlcl9iaW5hcnkgPSB3ZWJkcml2ZXJfYmluYXJ5CisgICAg
ICAgIHNlbGYud2ViZHJpdmVyX2FyZ3MgPSB3ZWJkcml2ZXJfYXJncworICAgICAgICBzZWxmLnRp
bWVvdXRfbXVsdGlwbGllciA9IHRpbWVvdXRfbXVsdGlwbGllcgorICAgICAgICBzZWxmLmNhcGFi
aWxpdGllcyA9IGNhcGFiaWxpdGllcworICAgICAgICBzZWxmLnByb3RvY29sID0gc2VsZi5wcm90
b2NvbF9jbHMoc2VsZiwgYnJvd3NlcikKKworICAgIGRlZiBpc19hbGl2ZShzZWxmKToKKyAgICAg
ICAgcmV0dXJuIHNlbGYucHJvdG9jb2wuaXNfYWxpdmUKKworICAgIGRlZiBvbl9lbnZpcm9ubWVu
dF9jaGFuZ2Uoc2VsZiwgbmV3X2Vudmlyb25tZW50KToKKyAgICAgICAgcGFzcworCisgICAgZGVm
IGRvX3Rlc3Qoc2VsZiwgdGVzdCk6CisgICAgICAgIHRpbWVvdXQgPSB0ZXN0LnRpbWVvdXQgKiBz
ZWxmLnRpbWVvdXRfbXVsdGlwbGllciArIGV4dHJhX3RpbWVvdXQKKworICAgICAgICBzdWNjZXNz
LCBkYXRhID0gV2RzcGVjUnVuKHNlbGYuZG9fd2RzcGVjLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNlbGYucHJvdG9jb2wuc2Vzc2lvbl9jb25maWcsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGVzdC5hYnNfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0aW1lb3V0KS5ydW4oKQorCisgICAgICAgIGlmIHN1Y2Nlc3M6CisgICAg
ICAgICAgICByZXR1cm4gc2VsZi5jb252ZXJ0X3Jlc3VsdCh0ZXN0LCBkYXRhKQorCisgICAgICAg
IHJldHVybiAodGVzdC5yZXN1bHRfY2xzKCpkYXRhKSwgW10pCisKKyAgICBkZWYgZG9fd2RzcGVj
KHNlbGYsIHNlc3Npb25fY29uZmlnLCBwYXRoLCB0aW1lb3V0KToKKyAgICAgICAgaGFybmVzc19y
ZXN1bHQgPSAoIk9LIiwgTm9uZSkKKyAgICAgICAgc3VidGVzdF9yZXN1bHRzID0gcHl0ZXN0cnVu
bmVyLnJ1bihwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGYuc2VydmVyX2NvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzZXNzaW9uX2NvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0aW1lb3V0PXRpbWVvdXQpCisgICAgICAgIHJldHVybiAoaGFybmVzc19yZXN1
bHQsIHN1YnRlc3RfcmVzdWx0cykKKworICAgIGRlZiBkb19kZWxheWVkX2ltcG9ydHMoc2VsZik6
CisgICAgICAgIGdsb2JhbCBweXRlc3RydW5uZXIKKyAgICAgICAgZnJvbSAuIGltcG9ydCBweXRl
c3RydW5uZXIKKworCitjbGFzcyBQcm90b2NvbChvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBleGVjdXRvciwgYnJvd3Nlcik6CisgICAgICAgIHNlbGYuZXhlY3V0b3IgPSBleGVjdXRv
cgorICAgICAgICBzZWxmLmJyb3dzZXIgPSBicm93c2VyCisKKyAgICBAcHJvcGVydHkKKyAgICBk
ZWYgbG9nZ2VyKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5leGVjdXRvci5sb2dnZXIKKwor
ICAgIGRlZiBzZXR1cChzZWxmLCBydW5uZXIpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVh
cmRvd24oc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiB3YWl0KHNlbGYpOgorICAgICAg
ICBwYXNzCisKKworY2xhc3MgV2RzcGVjUnVuKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNl
bGYsIGZ1bmMsIHNlc3Npb24sIHBhdGgsIHRpbWVvdXQpOgorICAgICAgICBzZWxmLmZ1bmMgPSBm
dW5jCisgICAgICAgIHNlbGYucmVzdWx0ID0gKE5vbmUsIE5vbmUpCisgICAgICAgIHNlbGYuc2Vz
c2lvbiA9IHNlc3Npb24KKyAgICAgICAgc2VsZi5wYXRoID0gcGF0aAorICAgICAgICBzZWxmLnRp
bWVvdXQgPSB0aW1lb3V0CisgICAgICAgIHNlbGYucmVzdWx0X2ZsYWcgPSB0aHJlYWRpbmcuRXZl
bnQoKQorCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgIiIiUnVucyBmdW5jdGlvbiBpbiBh
IHRocmVhZCBhbmQgaW50ZXJydXB0cyBpdCBpZiBpdCBleGNlZWRzIHRoZQorICAgICAgICBnaXZl
biB0aW1lb3V0LiAgUmV0dXJucyAoVHJ1ZSwgKFJlc3VsdCwgW1N1YnRlc3RSZXN1bHQgLi4uXSkp
IGluCisgICAgICAgIGNhc2Ugb2Ygc3VjY2Vzcywgb3IgKEZhbHNlLCAoc3RhdHVzLCBleHRyYSBp
bmZvcm1hdGlvbikpIGluIHRoZQorICAgICAgICBldmVudCBvZiBmYWlsdXJlLgorICAgICAgICAi
IiIKKworICAgICAgICBleGVjdXRvciA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXNlbGYuX3J1
bikKKyAgICAgICAgZXhlY3V0b3Iuc3RhcnQoKQorCisgICAgICAgIGZsYWcgPSBzZWxmLnJlc3Vs
dF9mbGFnLndhaXQoc2VsZi50aW1lb3V0KQorICAgICAgICBpZiBzZWxmLnJlc3VsdFsxXSBpcyBO
b25lOgorICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSBGYWxzZSwgKCJFWFRFUk5BTC1USU1FT1VU
IiwgTm9uZSkKKworICAgICAgICByZXR1cm4gc2VsZi5yZXN1bHQKKworICAgIGRlZiBfcnVuKHNl
bGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnJlc3VsdCA9IFRydWUsIHNlbGYu
ZnVuYyhzZWxmLnNlc3Npb24sIHNlbGYucGF0aCwgc2VsZi50aW1lb3V0KQorICAgICAgICBleGNl
cHQgKHNvY2tldC50aW1lb3V0LCBJT0Vycm9yKToKKyAgICAgICAgICAgIHNlbGYucmVzdWx0ID0g
RmFsc2UsICgiQ1JBU0giLCBOb25lKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6Cisg
ICAgICAgICAgICBtZXNzYWdlID0gZ2V0YXR0cihlLCAibWVzc2FnZSIpCisgICAgICAgICAgICBp
ZiBtZXNzYWdlOgorICAgICAgICAgICAgICAgIG1lc3NhZ2UgKz0gIlxuIgorICAgICAgICAgICAg
bWVzc2FnZSArPSB0cmFjZWJhY2suZm9ybWF0X2V4YyhlKQorICAgICAgICAgICAgc2VsZi5yZXN1
bHQgPSBGYWxzZSwgKCJFUlJPUiIsIG1lc3NhZ2UpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAg
ICAgICBzZWxmLnJlc3VsdF9mbGFnLnNldCgpCisKKworY2xhc3MgV2ViRHJpdmVyUHJvdG9jb2wo
UHJvdG9jb2wpOgorICAgIHNlcnZlcl9jbHMgPSBOb25lCisKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgZXhlY3V0b3IsIGJyb3dzZXIpOgorICAgICAgICBQcm90b2NvbC5fX2luaXRfXyhzZWxmLCBl
eGVjdXRvciwgYnJvd3NlcikKKyAgICAgICAgc2VsZi53ZWJkcml2ZXJfYmluYXJ5ID0gZXhlY3V0
b3Iud2ViZHJpdmVyX2JpbmFyeQorICAgICAgICBzZWxmLndlYmRyaXZlcl9hcmdzID0gZXhlY3V0
b3Iud2ViZHJpdmVyX2FyZ3MKKyAgICAgICAgc2VsZi5jYXBhYmlsaXRpZXMgPSBzZWxmLmV4ZWN1
dG9yLmNhcGFiaWxpdGllcworICAgICAgICBzZWxmLnNlc3Npb25fY29uZmlnID0gTm9uZQorICAg
ICAgICBzZWxmLnNlcnZlciA9IE5vbmUKKworICAgIGRlZiBzZXR1cChzZWxmLCBydW5uZXIpOgor
ICAgICAgICAiIiJDb25uZWN0IHRvIGJyb3dzZXIgdmlhIHRoZSBIVFRQIHNlcnZlci4iIiIKKyAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5zZXJ2ZXIgPSBzZWxmLnNlcnZlcl9jbHMoCisg
ICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIsCisgICAgICAgICAgICAgICAgYmluYXJ5PXNlbGYu
d2ViZHJpdmVyX2JpbmFyeSwKKyAgICAgICAgICAgICAgICBhcmdzPXNlbGYud2ViZHJpdmVyX2Fy
Z3MpCisgICAgICAgICAgICBzZWxmLnNlcnZlci5zdGFydChibG9jaz1GYWxzZSkKKyAgICAgICAg
ICAgIHNlbGYubG9nZ2VyLmluZm8oCisgICAgICAgICAgICAgICAgIldlYkRyaXZlciBIVFRQIHNl
cnZlciBsaXN0ZW5pbmcgYXQgJXMiICUgc2VsZi5zZXJ2ZXIudXJsKQorICAgICAgICAgICAgc2Vs
Zi5zZXNzaW9uX2NvbmZpZyA9IHsiaG9zdCI6IHNlbGYuc2VydmVyLmhvc3QsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJwb3J0Ijogc2VsZi5zZXJ2ZXIucG9ydCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhcGFiaWxpdGllcyI6IHNlbGYuY2FwYWJp
bGl0aWVzfQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgc2VsZi5sb2dn
ZXIuZXJyb3IodHJhY2ViYWNrLmZvcm1hdF9leGMoKSkKKyAgICAgICAgICAgIHNlbGYuZXhlY3V0
b3IucnVubmVyLnNlbmRfbWVzc2FnZSgiaW5pdF9mYWlsZWQiKQorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgc2VsZi5leGVjdXRvci5ydW5uZXIuc2VuZF9tZXNzYWdlKCJpbml0X3N1Y2NlZWRl
ZCIpCisKKyAgICBkZWYgdGVhcmRvd24oc2VsZik6CisgICAgICAgIGlmIHNlbGYuc2VydmVyIGlz
IG5vdCBOb25lIGFuZCBzZWxmLnNlcnZlci5pc19hbGl2ZToKKyAgICAgICAgICAgIHNlbGYuc2Vy
dmVyLnN0b3AoKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGlzX2FsaXZlKHNlbGYpOgorICAg
ICAgICAiIiJUZXN0IHRoYXQgdGhlIGNvbm5lY3Rpb24gaXMgc3RpbGwgYWxpdmUuCisKKyAgICAg
ICAgQmVjYXVzZSB0aGUgcmVtb3RlIGNvbW11bmljYXRpb24gaGFwcGVucyBvdmVyIEhUVFAgd2Ug
bmVlZCB0bworICAgICAgICBtYWtlIGFuIGV4cGxpY2l0IHJlcXVlc3QgdG8gdGhlIHJlbW90ZS4g
IEl0IGlzIGFsbG93ZWQgZm9yCisgICAgICAgIFdlYkRyaXZlciBzcGVjIHRlc3RzIHRvIG5vdCBo
YXZlIGEgV2ViRHJpdmVyIHNlc3Npb24sIHNpbmNlIHRoaXMKKyAgICAgICAgbWF5IGJlIHdoYXQg
aXMgdGVzdGVkLgorCisgICAgICAgIEFuIEhUVFAgcmVxdWVzdCB0byBhbiBpbnZhbGlkIHBhdGgg
dGhhdCByZXN1bHRzIGluIGEgNDA0IGlzCisgICAgICAgIHByb29mIGVub3VnaCB0byB1cyB0aGF0
IHRoZSBzZXJ2ZXIgaXMgYWxpdmUgYW5kIGtpY2tpbmcuCisgICAgICAgICIiIgorICAgICAgICBj
b25uID0gaHR0cGxpYi5IVFRQQ29ubmVjdGlvbihzZWxmLnNlcnZlci5ob3N0LCBzZWxmLnNlcnZl
ci5wb3J0KQorICAgICAgICBjb25uLnJlcXVlc3QoIkhFQUQiLCBzZWxmLnNlcnZlci5iYXNlX3Bh
dGggKyAiaW52YWxpZCIpCisgICAgICAgIHJlcyA9IGNvbm4uZ2V0cmVzcG9uc2UoKQorICAgICAg
ICByZXR1cm4gcmVzLnN0YXR1cyA9PSA0MDQKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2lt
cG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2V4ZWN1dG9ycy9leGVjdXRvcmNo
cm9tZS5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0
cnVubmVyL2V4ZWN1dG9ycy9leGVjdXRvcmNocm9tZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uM2UwNDAwZGUxMWMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2
ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9leGVjdXRvcnMv
ZXhlY3V0b3JjaHJvbWUucHkKQEAgLTAsMCArMSwxMCBAQAorZnJvbSAuLndlYmRyaXZlcl9zZXJ2
ZXIgaW1wb3J0IENocm9tZURyaXZlclNlcnZlcgorZnJvbSAuYmFzZSBpbXBvcnQgV2RzcGVjRXhl
Y3V0b3IsIFdlYkRyaXZlclByb3RvY29sCisKKworY2xhc3MgQ2hyb21lRHJpdmVyUHJvdG9jb2wo
V2ViRHJpdmVyUHJvdG9jb2wpOgorICAgIHNlcnZlcl9jbHMgPSBDaHJvbWVEcml2ZXJTZXJ2ZXIK
KworCitjbGFzcyBDaHJvbWVEcml2ZXJXZHNwZWNFeGVjdXRvcihXZHNwZWNFeGVjdXRvcik6Cisg
ICAgcHJvdG9jb2xfY2xzID0gQ2hyb21lRHJpdmVyUHJvdG9jb2wKZGlmZiAtLWdpdCBhL1dlYkRy
aXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2V4ZWN1dG9y
cy9leGVjdXRvcmludGVybmV0ZXhwbG9yZXIucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93
M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9leGVjdXRvcnMvZXhlY3V0b3JpbnRlcm5ldGV4
cGxvcmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44OThmZjE0
NDU5MwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29s
cy93cHRydW5uZXIvd3B0cnVubmVyL2V4ZWN1dG9ycy9leGVjdXRvcmludGVybmV0ZXhwbG9yZXIu
cHkKQEAgLTAsMCArMSwxMCBAQAorZnJvbSAuLndlYmRyaXZlcl9zZXJ2ZXIgaW1wb3J0IEludGVy
bmV0RXhwbG9yZXJEcml2ZXJTZXJ2ZXIKK2Zyb20gLmJhc2UgaW1wb3J0IFdkc3BlY0V4ZWN1dG9y
LCBXZWJEcml2ZXJQcm90b2NvbAorCisKK2NsYXNzIEludGVybmV0RXhwbG9yZXJEcml2ZXJQcm90
b2NvbChXZWJEcml2ZXJQcm90b2NvbCk6CisgICAgc2VydmVyX2NscyA9IEludGVybmV0RXhwbG9y
ZXJEcml2ZXJTZXJ2ZXIKKworCitjbGFzcyBJbnRlcm5ldEV4cGxvcmVyRHJpdmVyV2RzcGVjRXhl
Y3V0b3IoV2RzcGVjRXhlY3V0b3IpOgorICAgIHByb3RvY29sX2NscyA9IEludGVybmV0RXhwbG9y
ZXJEcml2ZXJQcm90b2NvbApkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNj
L3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvZXhlY3V0b3JzL2V4ZWN1dG9ybWFyaW9uZXR0ZS5w
eSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVy
L2V4ZWN1dG9ycy9leGVjdXRvcm1hcmlvbmV0dGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLjExZGU2NTNlZjI1Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVy
VGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvZXhlY3V0b3JzL2V4
ZWN1dG9ybWFyaW9uZXR0ZS5weQpAQCAtMCwwICsxLDU2OCBAQAoraW1wb3J0IG9zCitpbXBvcnQg
c29ja2V0CitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgdHJhY2ViYWNrCitpbXBvcnQgdXJscGFy
c2UKK2ltcG9ydCB1dWlkCisKK2Vycm9ycyA9IE5vbmUKK21hcmlvbmV0dGUgPSBOb25lCitweXRl
c3RydW5uZXIgPSBOb25lCisKK2hlcmUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5zcGxpdChfX2Zp
bGVfXylbMF0pCisKK2Zyb20gLmJhc2UgaW1wb3J0IChFeGVjdXRvckV4Y2VwdGlvbiwKKyAgICAg
ICAgICAgICAgICAgICBQcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICBSZWZUZXN0RXhlY3V0
b3IsCisgICAgICAgICAgICAgICAgICAgUmVmVGVzdEltcGxlbWVudGF0aW9uLAorICAgICAgICAg
ICAgICAgICAgIFRlc3RFeGVjdXRvciwKKyAgICAgICAgICAgICAgICAgICBUZXN0aGFybmVzc0V4
ZWN1dG9yLAorICAgICAgICAgICAgICAgICAgIFdkc3BlY0V4ZWN1dG9yLAorICAgICAgICAgICAg
ICAgICAgIFdkc3BlY1J1biwKKyAgICAgICAgICAgICAgICAgICBXZWJEcml2ZXJQcm90b2NvbCwK
KyAgICAgICAgICAgICAgICAgICBleHRyYV90aW1lb3V0LAorICAgICAgICAgICAgICAgICAgIHRl
c3RoYXJuZXNzX3Jlc3VsdF9jb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICAgcmVmdGVzdF9y
ZXN1bHRfY29udmVydGVyLAorICAgICAgICAgICAgICAgICAgIHN0cmlwX3NlcnZlcikKKworZnJv
bSAuLnRlc3RydW5uZXIgaW1wb3J0IFN0b3AKK2Zyb20gLi53ZWJkcml2ZXJfc2VydmVyIGltcG9y
dCBHZWNrb0RyaXZlclNlcnZlcgorCisKKworZGVmIGRvX2RlbGF5ZWRfaW1wb3J0cygpOgorICAg
IGdsb2JhbCBlcnJvcnMsIG1hcmlvbmV0dGUKKworICAgICMgTWFyaW9uZXR0ZSBjbGllbnQgdXNl
ZCB0byBiZSBjYWxsZWQgbWFyaW9uZXR0ZSwgcmVjZW50bHkgaXQgY2hhbmdlZAorICAgICMgdG8g
bWFyaW9uZXR0ZV9kcml2ZXIgZm9yIHVuZmF0aG9tYWJsZSByZWFzb25zCisgICAgdHJ5OgorICAg
ICAgICBpbXBvcnQgbWFyaW9uZXR0ZQorICAgICAgICBmcm9tIG1hcmlvbmV0dGUgaW1wb3J0IGVy
cm9ycworICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgZnJvbSBtYXJpb25ldHRlX2Ry
aXZlciBpbXBvcnQgbWFyaW9uZXR0ZSwgZXJyb3JzCisKKworY2xhc3MgTWFyaW9uZXR0ZVByb3Rv
Y29sKFByb3RvY29sKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZXhlY3V0b3IsIGJyb3dzZXIs
IHRpbWVvdXRfbXVsdGlwbGllcj0xKToKKyAgICAgICAgZG9fZGVsYXllZF9pbXBvcnRzKCkKKwor
ICAgICAgICBQcm90b2NvbC5fX2luaXRfXyhzZWxmLCBleGVjdXRvciwgYnJvd3NlcikKKyAgICAg
ICAgc2VsZi5tYXJpb25ldHRlID0gTm9uZQorICAgICAgICBzZWxmLm1hcmlvbmV0dGVfcG9ydCA9
IGJyb3dzZXIubWFyaW9uZXR0ZV9wb3J0CisgICAgICAgIHNlbGYudGltZW91dF9tdWx0aXBsaWVy
ID0gdGltZW91dF9tdWx0aXBsaWVyCisgICAgICAgIHNlbGYudGltZW91dCA9IE5vbmUKKyAgICAg
ICAgc2VsZi5ydW5uZXJfaGFuZGxlID0gTm9uZQorCisgICAgZGVmIHNldHVwKHNlbGYsIHJ1bm5l
cik6CisgICAgICAgICIiIkNvbm5lY3QgdG8gYnJvd3NlciB2aWEgTWFyaW9uZXR0ZS4iIiIKKyAg
ICAgICAgUHJvdG9jb2wuc2V0dXAoc2VsZiwgcnVubmVyKQorCisgICAgICAgIHNlbGYubG9nZ2Vy
LmRlYnVnKCJDb25uZWN0aW5nIHRvIE1hcmlvbmV0dGUgb24gcG9ydCAlaSIgJSBzZWxmLm1hcmlv
bmV0dGVfcG9ydCkKKyAgICAgICAgc3RhcnR1cF90aW1lb3V0ID0gbWFyaW9uZXR0ZS5NYXJpb25l
dHRlLkRFRkFVTFRfU1RBUlRVUF9USU1FT1VUICogc2VsZi50aW1lb3V0X211bHRpcGxpZXIKKyAg
ICAgICAgc2VsZi5tYXJpb25ldHRlID0gbWFyaW9uZXR0ZS5NYXJpb25ldHRlKGhvc3Q9J2xvY2Fs
aG9zdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
b3J0PXNlbGYubWFyaW9uZXR0ZV9wb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc29ja2V0X3RpbWVvdXQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0dXBfdGltZW91dD1zdGFydHVwX3Rp
bWVvdXQpCisKKyAgICAgICAgIyBYWFggTW92ZSB0aGlzIHRpbWVvdXQgc29tZXdoZXJlCisgICAg
ICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJXYWl0aW5nIGZvciBNYXJpb25ldHRlIGNvbm5lY3Rpb24i
KQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgc3VjY2VzcyA9IHNlbGYubWFyaW9u
ZXR0ZS53YWl0X2Zvcl9wb3J0KDYwICogc2VsZi50aW1lb3V0X211bHRpcGxpZXIpCisgICAgICAg
ICAgICAjV2hlbiBydW5uaW5nIGluIGEgZGVidWdnZXIgd2FpdCBpbmRlZmluaXRlbHkgZm9yIGZp
cmVmb3ggdG8gc3RhcnQKKyAgICAgICAgICAgIGlmIHN1Y2Nlc3Mgb3Igc2VsZi5leGVjdXRvci5k
ZWJ1Z19pbmZvIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICBzZXNz
aW9uX3N0YXJ0ZWQgPSBGYWxzZQorICAgICAgICBpZiBzdWNjZXNzOgorICAgICAgICAgICAgdHJ5
OgorICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJTdGFydGluZyBNYXJpb25ldHRl
IHNlc3Npb24iKQorICAgICAgICAgICAgICAgIHNlbGYubWFyaW9uZXR0ZS5zdGFydF9zZXNzaW9u
KCkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICBz
ZWxmLmxvZ2dlci53YXJuaW5nKCJTdGFydGluZyBtYXJpb25ldHRlIHNlc3Npb24gZmFpbGVkOiAl
cyIgJSBlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5k
ZWJ1ZygiTWFyaW9uZXR0ZSBzZXNzaW9uIHN0YXJ0ZWQiKQorICAgICAgICAgICAgICAgIHNlc3Np
b25fc3RhcnRlZCA9IFRydWUKKworICAgICAgICBpZiBub3Qgc3VjY2VzcyBvciBub3Qgc2Vzc2lv
bl9zdGFydGVkOgorICAgICAgICAgICAgc2VsZi5sb2dnZXIud2FybmluZygiRmFpbGVkIHRvIGNv
bm5lY3QgdG8gTWFyaW9uZXR0ZSIpCisgICAgICAgICAgICBzZWxmLmV4ZWN1dG9yLnJ1bm5lci5z
ZW5kX21lc3NhZ2UoImluaXRfZmFpbGVkIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRy
eToKKyAgICAgICAgICAgICAgICBzZWxmLmFmdGVyX2Nvbm5lY3QoKQorICAgICAgICAgICAgZXhj
ZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci53YXJuaW5nKCJQb3N0
LWNvbm5lY3Rpb24gc3RlcHMgZmFpbGVkIikKKyAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5l
cnJvcih0cmFjZWJhY2suZm9ybWF0X2V4YygpKQorICAgICAgICAgICAgICAgIHNlbGYuZXhlY3V0
b3IucnVubmVyLnNlbmRfbWVzc2FnZSgiaW5pdF9mYWlsZWQiKQorICAgICAgICAgICAgZWxzZToK
KyAgICAgICAgICAgICAgICBzZWxmLmV4ZWN1dG9yLnJ1bm5lci5zZW5kX21lc3NhZ2UoImluaXRf
c3VjY2VlZGVkIikKKworICAgIGRlZiB0ZWFyZG93bihzZWxmKToKKyAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgc2VsZi5tYXJpb25ldHRlLl9yZXF1ZXN0X2luX2FwcF9zaHV0ZG93bigpCisgICAg
ICAgICAgICBzZWxmLm1hcmlvbmV0dGUuZGVsZXRlX3Nlc3Npb24oc2VuZF9yZXF1ZXN0PUZhbHNl
LCByZXNldF9zZXNzaW9uX2lkPVRydWUpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAg
ICAgICAgICAjIFRoaXMgaXMgdHlwaWNhbGx5IGJlY2F1c2UgdGhlIHNlc3Npb24gbmV2ZXIgc3Rh
cnRlZAorICAgICAgICAgICAgcGFzcworICAgICAgICBpZiBzZWxmLm1hcmlvbmV0dGUgaXMgbm90
IE5vbmU6CisgICAgICAgICAgICBkZWwgc2VsZi5tYXJpb25ldHRlCisKKyAgICBAcHJvcGVydHkK
KyAgICBkZWYgaXNfYWxpdmUoc2VsZik6CisgICAgICAgICIiIkNoZWNrIGlmIHRoZSBNYXJpb25l
dHRlIGNvbm5lY3Rpb24gaXMgc3RpbGwgYWN0aXZlLiIiIgorICAgICAgICB0cnk6CisgICAgICAg
ICAgICBzZWxmLm1hcmlvbmV0dGUuY3VycmVudF93aW5kb3dfaGFuZGxlCisgICAgICAgIGV4Y2Vw
dCBFeGNlcHRpb246CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRy
dWUKKworICAgIGRlZiBhZnRlcl9jb25uZWN0KHNlbGYpOgorICAgICAgICBzZWxmLmxvYWRfcnVu
bmVyKHNlbGYuZXhlY3V0b3IubGFzdF9lbnZpcm9ubWVudFsicHJvdG9jb2wiXSkKKworICAgIGRl
ZiBzZXRfdGltZW91dChzZWxmLCB0aW1lb3V0KToKKyAgICAgICAgIiIiU2V0IHRoZSBNYXJpb25l
dHRlIHNjcmlwdCB0aW1lb3V0LgorCisgICAgICAgIDpwYXJhbSB0aW1lb3V0OiBTY3JpcHQgdGlt
ZW91dCBpbiBzZWNvbmRzCisKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYubWFyaW9uZXR0ZS50
aW1lb3V0LnNjcmlwdCA9IHRpbWVvdXQKKyAgICAgICAgc2VsZi50aW1lb3V0ID0gdGltZW91dAor
CisgICAgZGVmIGxvYWRfcnVubmVyKHNlbGYsIHByb3RvY29sKToKKyAgICAgICAgIyBDaGVjayBp
ZiB3ZSBwcmV2aW91c2x5IGhhZCBhIHRlc3Qgd2luZG93IG9wZW4sIGFuZCBpZiB3ZSBkaWQgbWFr
ZSBzdXJlIGl0J3MgY2xvc2VkCisgICAgICAgIHNlbGYubWFyaW9uZXR0ZS5leGVjdXRlX3Njcmlw
dCgiaWYgKHdpbmRvdy53cmFwcGVkSlNPYmplY3Qud2luKSB7d2luZG93LndyYXBwZWRKU09iamVj
dC53aW4uY2xvc2UoKX0iKQorICAgICAgICB1cmwgPSB1cmxwYXJzZS51cmxqb2luKHNlbGYuZXhl
Y3V0b3Iuc2VydmVyX3VybChwcm90b2NvbCksICIvdGVzdGhhcm5lc3NfcnVubmVyLmh0bWwiKQor
ICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1ZygiTG9hZGluZyAlcyIgJSB1cmwpCisgICAgICAgIHNl
bGYucnVubmVyX2hhbmRsZSA9IHNlbGYubWFyaW9uZXR0ZS5jdXJyZW50X3dpbmRvd19oYW5kbGUK
KyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5tYXJpb25ldHRlLm5hdmlnYXRlKHVybCkK
KyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgc2VsZi5sb2dnZXIu
Y3JpdGljYWwoCisgICAgICAgICAgICAgICAgIkxvYWRpbmcgaW5pdGlhbCBwYWdlICVzIGZhaWxl
ZC4gRW5zdXJlIHRoYXQgdGhlICIKKyAgICAgICAgICAgICAgICAidGhlcmUgYXJlIG5vIG90aGVy
IHByb2dyYW1zIGJvdW5kIHRvIHRoaXMgcG9ydCBhbmQgIgorICAgICAgICAgICAgICAgICJ0aGF0
IHlvdXIgZmlyZXdhbGwgcnVsZXMgb3IgbmV0d29yayBzZXR1cCBkb2VzIG5vdCAiCisgICAgICAg
ICAgICAgICAgInByZXZlbnQgYWNjZXNzLlxlJXMiICUgKHVybCwgdHJhY2ViYWNrLmZvcm1hdF9l
eGMoZSkpKQorICAgICAgICBzZWxmLm1hcmlvbmV0dGUuZXhlY3V0ZV9zY3JpcHQoCisgICAgICAg
ICAgICAiZG9jdW1lbnQudGl0bGUgPSAnJXMnIiAlIHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgp
Lm5hbWUucmVwbGFjZSgiJyIsICciJykpCisKKyAgICBkZWYgY2xvc2Vfb2xkX3dpbmRvd3Moc2Vs
ZiwgcHJvdG9jb2wpOgorICAgICAgICBoYW5kbGVzID0gc2VsZi5tYXJpb25ldHRlLndpbmRvd19o
YW5kbGVzCisgICAgICAgIHJ1bm5lcl9oYW5kbGUgPSBOb25lCisgICAgICAgIHRyeToKKyAgICAg
ICAgICAgIGhhbmRsZXMucmVtb3ZlKHNlbGYucnVubmVyX2hhbmRsZSkKKyAgICAgICAgICAgIHJ1
bm5lcl9oYW5kbGUgPSBzZWxmLnJ1bm5lcl9oYW5kbGUKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJy
b3I6CisgICAgICAgICAgICAjIFRoZSBydW5uZXIgd2luZG93IHByb2JhYmx5IGNoYW5nZWQgaWQg
YnV0IHdlIGNhbiByZXN0b3JlIGl0CisgICAgICAgICAgICAjIFRoaXMgaXNuJ3Qgc3VwcG9zZWQg
dG8gaGFwcGVuLCBidXQgbWFyaW9uZXR0ZSBpZHMgYXJlIG5vdCB5ZXQgc3RhYmxlCisgICAgICAg
ICAgICAjIFdlIGFzc3VtZSB0aGF0IHRoZSBmaXJzdCBoYW5kbGUgcmV0dXJuZWQgY29ycmVzcG9u
ZHMgdG8gdGhlIHJ1bm5lciwKKyAgICAgICAgICAgICMgYnV0IGl0IGhvcGVmdWxseSBkb2Vzbid0
IG1hdHRlciB0b28gbXVjaCBpZiB0aGF0IGFzc3VtcHRpb24gaXMKKyAgICAgICAgICAgICMgd3Jv
bmcgc2luY2Ugd2UgcmVsb2FkIHRoZSBydW5uZXIgaW4gdGhhdCB0YWIgYW55d2F5LgorICAgICAg
ICAgICAgcnVubmVyX2hhbmRsZSA9IGhhbmRsZXMucG9wKDApCisKKyAgICAgICAgZm9yIGhhbmRs
ZSBpbiBoYW5kbGVzOgorICAgICAgICAgICAgc2VsZi5tYXJpb25ldHRlLnN3aXRjaF90b193aW5k
b3coaGFuZGxlKQorICAgICAgICAgICAgc2VsZi5tYXJpb25ldHRlLmNsb3NlKCkKKworICAgICAg
ICBzZWxmLm1hcmlvbmV0dGUuc3dpdGNoX3RvX3dpbmRvdyhydW5uZXJfaGFuZGxlKQorICAgICAg
ICBpZiBydW5uZXJfaGFuZGxlICE9IHNlbGYucnVubmVyX2hhbmRsZToKKyAgICAgICAgICAgIHNl
bGYubG9hZF9ydW5uZXIocHJvdG9jb2wpCisKKyAgICBkZWYgd2FpdChzZWxmKToKKyAgICAgICAg
c29ja2V0X3RpbWVvdXQgPSBzZWxmLm1hcmlvbmV0dGUuY2xpZW50LnNvY2suZ2V0dGltZW91dCgp
CisgICAgICAgIGlmIHNvY2tldF90aW1lb3V0OgorICAgICAgICAgICAgc2VsZi5tYXJpb25ldHRl
LnRpbWVvdXQuc2NyaXB0ID0gc29ja2V0X3RpbWVvdXQgLyAyCisKKyAgICAgICAgc2VsZi5tYXJp
b25ldHRlLnN3aXRjaF90b193aW5kb3coc2VsZi5ydW5uZXJfaGFuZGxlKQorICAgICAgICB3aGls
ZSBUcnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYubWFyaW9uZXR0
ZS5leGVjdXRlX2FzeW5jX3NjcmlwdCgiIikKKyAgICAgICAgICAgIGV4Y2VwdCBlcnJvcnMuTm9T
dWNoV2luZG93RXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICMgVGhlIHdpbmRvdyBjbG9zZWQK
KyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZXhjZXB0IGVycm9ycy5TY3JpcHRU
aW1lb3V0RXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJTY3Jp
cHQgdGltZWQgb3V0IikKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBleGNlcHQg
KHNvY2tldC50aW1lb3V0LCBJT0Vycm9yKToKKyAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5k
ZWJ1ZygiU29ja2V0IGNsb3NlZCIpCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAg
IGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci53YXJu
aW5nKHRyYWNlYmFjay5mb3JtYXRfZXhjKGUpKQorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAg
ICBkZWYgb25fZW52aXJvbm1lbnRfY2hhbmdlKHNlbGYsIG9sZF9lbnZpcm9ubWVudCwgbmV3X2Vu
dmlyb25tZW50KToKKyAgICAgICAgI1Vuc2V0IGFsbCB0aGUgb2xkIHByZWZzCisgICAgICAgIGZv
ciBuYW1lIGluIG9sZF9lbnZpcm9ubWVudC5nZXQoInByZWZzIiwge30pLml0ZXJrZXlzKCk6Cisg
ICAgICAgICAgICB2YWx1ZSA9IHNlbGYuZXhlY3V0b3Iub3JpZ2luYWxfcHJlZl92YWx1ZXNbbmFt
ZV0KKyAgICAgICAgICAgIGlmIHZhbHVlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5j
bGVhcl91c2VyX3ByZWYobmFtZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAg
c2VsZi5zZXRfcHJlZihuYW1lLCB2YWx1ZSkKKworICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4g
bmV3X2Vudmlyb25tZW50LmdldCgicHJlZnMiLCB7fSkuaXRlcml0ZW1zKCk6CisgICAgICAgICAg
ICBzZWxmLmV4ZWN1dG9yLm9yaWdpbmFsX3ByZWZfdmFsdWVzW25hbWVdID0gc2VsZi5nZXRfcHJl
ZihuYW1lKQorICAgICAgICAgICAgc2VsZi5zZXRfcHJlZihuYW1lLCB2YWx1ZSkKKworICAgIGRl
ZiBzZXRfcHJlZihzZWxmLCBuYW1lLCB2YWx1ZSk6CisgICAgICAgIGlmIHZhbHVlLmxvd2VyKCkg
bm90IGluICgidHJ1ZSIsICJmYWxzZSIpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAg
ICAgIGludCh2YWx1ZSkKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAg
ICAgICAgIHZhbHVlID0gIiclcyciICUgdmFsdWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg
IHZhbHVlID0gdmFsdWUubG93ZXIoKQorCisgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oIlNldHRp
bmcgcHJlZiAlcyAoJXMpIiAlIChuYW1lLCB2YWx1ZSkpCisKKyAgICAgICAgc2NyaXB0ID0gIiIi
CisgICAgICAgICAgICBsZXQgcHJlZkludGVyZmFjZSA9IENvbXBvbmVudHMuY2xhc3Nlc1siQG1v
emlsbGEub3JnL3ByZWZlcmVuY2VzLXNlcnZpY2U7MSJdCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAuZ2V0U2VydmljZShDb21wb25lbnRzLmludGVyZmFjZXMubnNJ
UHJlZkJyYW5jaCk7CisgICAgICAgICAgICBsZXQgcHJlZiA9ICclcyc7CisgICAgICAgICAgICBs
ZXQgdHlwZSA9IHByZWZJbnRlcmZhY2UuZ2V0UHJlZlR5cGUocHJlZik7CisgICAgICAgICAgICBs
ZXQgdmFsdWUgPSAlczsKKyAgICAgICAgICAgIHN3aXRjaCh0eXBlKSB7CisgICAgICAgICAgICAg
ICAgY2FzZSBwcmVmSW50ZXJmYWNlLlBSRUZfU1RSSU5HOgorICAgICAgICAgICAgICAgICAgICBw
cmVmSW50ZXJmYWNlLnNldENoYXJQcmVmKHByZWYsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBwcmVmSW50ZXJmYWNlLlBSRUZfQk9PTDoK
KyAgICAgICAgICAgICAgICAgICAgcHJlZkludGVyZmFjZS5zZXRCb29sUHJlZihwcmVmLCB2YWx1
ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgcHJl
ZkludGVyZmFjZS5QUkVGX0lOVDoKKyAgICAgICAgICAgICAgICAgICAgcHJlZkludGVyZmFjZS5z
ZXRJbnRQcmVmKHByZWYsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAiIiIgJSAobmFtZSwgdmFsdWUpCisgICAgICAgIHdpdGgg
c2VsZi5tYXJpb25ldHRlLnVzaW5nX2NvbnRleHQoc2VsZi5tYXJpb25ldHRlLkNPTlRFWFRfQ0hS
T01FKToKKyAgICAgICAgICAgIHNlbGYubWFyaW9uZXR0ZS5leGVjdXRlX3NjcmlwdChzY3JpcHQp
CisKKyAgICBkZWYgY2xlYXJfdXNlcl9wcmVmKHNlbGYsIG5hbWUpOgorICAgICAgICBzZWxmLmxv
Z2dlci5pbmZvKCJDbGVhcmluZyBwcmVmICVzIiAlIChuYW1lKSkKKyAgICAgICAgc2NyaXB0ID0g
IiIiCisgICAgICAgICAgICBsZXQgcHJlZkludGVyZmFjZSA9IENvbXBvbmVudHMuY2xhc3Nlc1si
QG1vemlsbGEub3JnL3ByZWZlcmVuY2VzLXNlcnZpY2U7MSJdCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAuZ2V0U2VydmljZShDb21wb25lbnRzLmludGVyZmFjZXMu
bnNJUHJlZkJyYW5jaCk7CisgICAgICAgICAgICBsZXQgcHJlZiA9ICclcyc7CisgICAgICAgICAg
ICBwcmVmSW50ZXJmYWNlLmNsZWFyVXNlclByZWYocHJlZik7CisgICAgICAgICAgICAiIiIgJSBu
YW1lCisgICAgICAgIHdpdGggc2VsZi5tYXJpb25ldHRlLnVzaW5nX2NvbnRleHQoc2VsZi5tYXJp
b25ldHRlLkNPTlRFWFRfQ0hST01FKToKKyAgICAgICAgICAgIHNlbGYubWFyaW9uZXR0ZS5leGVj
dXRlX3NjcmlwdChzY3JpcHQpCisKKyAgICBkZWYgZ2V0X3ByZWYoc2VsZiwgbmFtZSk6CisgICAg
ICAgIHNjcmlwdCA9ICIiIgorICAgICAgICAgICAgbGV0IHByZWZJbnRlcmZhY2UgPSBDb21wb25l
bnRzLmNsYXNzZXNbIkBtb3ppbGxhLm9yZy9wcmVmZXJlbmNlcy1zZXJ2aWNlOzEiXQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldFNlcnZpY2UoQ29tcG9uZW50
cy5pbnRlcmZhY2VzLm5zSVByZWZCcmFuY2gpOworICAgICAgICAgICAgbGV0IHByZWYgPSAnJXMn
OworICAgICAgICAgICAgbGV0IHR5cGUgPSBwcmVmSW50ZXJmYWNlLmdldFByZWZUeXBlKHByZWYp
OworICAgICAgICAgICAgc3dpdGNoKHR5cGUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIHByZWZJ
bnRlcmZhY2UuUFJFRl9TVFJJTkc6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmVmSW50
ZXJmYWNlLmdldENoYXJQcmVmKHByZWYpOworICAgICAgICAgICAgICAgIGNhc2UgcHJlZkludGVy
ZmFjZS5QUkVGX0JPT0w6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmVmSW50ZXJmYWNl
LmdldEJvb2xQcmVmKHByZWYpOworICAgICAgICAgICAgICAgIGNhc2UgcHJlZkludGVyZmFjZS5Q
UkVGX0lOVDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZWZJbnRlcmZhY2UuZ2V0SW50
UHJlZihwcmVmKTsKKyAgICAgICAgICAgICAgICBjYXNlIHByZWZJbnRlcmZhY2UuUFJFRl9JTlZB
TElEOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICIiIiAlIG5hbWUKKyAgICAgICAgd2l0aCBzZWxmLm1hcmlvbmV0dGUudXNpbmdf
Y29udGV4dChzZWxmLm1hcmlvbmV0dGUuQ09OVEVYVF9DSFJPTUUpOgorICAgICAgICAgICAgc2Vs
Zi5tYXJpb25ldHRlLmV4ZWN1dGVfc2NyaXB0KHNjcmlwdCkKKworICAgIGRlZiBjbGVhcl9vcmln
aW4oc2VsZiwgdXJsKToKKyAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygiQ2xlYXJpbmcgb3JpZ2lu
ICVzIiAlICh1cmwpKQorICAgICAgICBzY3JpcHQgPSAiIiIKKyAgICAgICAgICAgIGxldCB1cmwg
PSAnJXMnOworICAgICAgICAgICAgbGV0IHVyaSA9IENvbXBvbmVudHMuY2xhc3Nlc1siQG1vemls
bGEub3JnL25ldHdvcmsvaW8tc2VydmljZTsxIl0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLmdldFNlcnZpY2UoQ2kubnNJSU9TZXJ2aWNlKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAubmV3VVJJKHVybCk7CisgICAgICAgICAgICBsZXQgc3NtID0gQ29tcG9uZW50
cy5jbGFzc2VzWyJAbW96aWxsYS5vcmcvc2NyaXB0c2VjdXJpdHltYW5hZ2VyOzEiXQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0U2VydmljZShDaS5uc0lTY3JpcHRTZWN1cml0
eU1hbmFnZXIpOworICAgICAgICAgICAgbGV0IHByaW5jaXBhbCA9IHNzbS5jcmVhdGVDb2RlYmFz
ZVByaW5jaXBhbCh1cmksIHt9KTsKKyAgICAgICAgICAgIGxldCBxbXMgPSBDb21wb25lbnRzLmNs
YXNzZXNbIkBtb3ppbGxhLm9yZy9kb20vcXVvdGEtbWFuYWdlci1zZXJ2aWNlOzEiXQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0U2VydmljZShDb21wb25lbnRzLmludGVyZmFj
ZXMubnNJUXVvdGFNYW5hZ2VyU2VydmljZSk7CisgICAgICAgICAgICBxbXMuY2xlYXJTdG9yYWdl
c0ZvclByaW5jaXBhbChwcmluY2lwYWwsICJkZWZhdWx0IiwgdHJ1ZSk7CisgICAgICAgICAgICAi
IiIgJSB1cmwKKyAgICAgICAgd2l0aCBzZWxmLm1hcmlvbmV0dGUudXNpbmdfY29udGV4dChzZWxm
Lm1hcmlvbmV0dGUuQ09OVEVYVF9DSFJPTUUpOgorICAgICAgICAgICAgc2VsZi5tYXJpb25ldHRl
LmV4ZWN1dGVfc2NyaXB0KHNjcmlwdCkKKworCitjbGFzcyBFeGVjdXRlQXN5bmNTY3JpcHRSdW4o
b2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9nZ2VyLCBmdW5jLCBwcm90b2NvbCwg
dXJsLCB0aW1lb3V0KToKKyAgICAgICAgc2VsZi5sb2dnZXIgPSBsb2dnZXIKKyAgICAgICAgc2Vs
Zi5yZXN1bHQgPSAoTm9uZSwgTm9uZSkKKyAgICAgICAgc2VsZi5wcm90b2NvbCA9IHByb3RvY29s
CisgICAgICAgIHNlbGYubWFyaW9uZXR0ZSA9IHByb3RvY29sLm1hcmlvbmV0dGUKKyAgICAgICAg
c2VsZi5mdW5jID0gZnVuYworICAgICAgICBzZWxmLnVybCA9IHVybAorICAgICAgICBzZWxmLnRp
bWVvdXQgPSB0aW1lb3V0CisgICAgICAgIHNlbGYucmVzdWx0X2ZsYWcgPSB0aHJlYWRpbmcuRXZl
bnQoKQorCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgaW5kZXggPSBzZWxmLnVybC5yZmlu
ZCgiL3N0b3JhZ2UvIik7CisgICAgICAgIGlmIGluZGV4ICE9IC0xOgorICAgICAgICAgICAgIyBD
bGVhciBzdG9yYWdlCisgICAgICAgICAgICBzZWxmLnByb3RvY29sLmNsZWFyX29yaWdpbihzZWxm
LnVybCkKKworICAgICAgICB0aW1lb3V0ID0gc2VsZi50aW1lb3V0CisKKyAgICAgICAgdHJ5Ogor
ICAgICAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBpZiB0
aW1lb3V0ICsgZXh0cmFfdGltZW91dCAhPSBzZWxmLnByb3RvY29sLnRpbWVvdXQ6CisgICAgICAg
ICAgICAgICAgICAgIHNlbGYucHJvdG9jb2wuc2V0X3RpbWVvdXQodGltZW91dCArIGV4dHJhX3Rp
bWVvdXQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgV2UganVzdCB3YW50
IGl0IHRvIG5ldmVyIHRpbWUgb3V0LCByZWFsbHksIGJ1dCBtYXJpb25ldHRlIGRvZXNuJ3QKKyAg
ICAgICAgICAgICAgICAjIG1ha2UgdGhhdCBwb3NzaWJsZS4gSXQgYWxzbyBzZWVtcyB0byB0aW1l
IG91dCBpbW1lZGlhdGVseSBpZiB0aGUKKyAgICAgICAgICAgICAgICAjIHRpbWVvdXQgaXMgc2V0
IHRvbyBoaWdoLiBUaGlzIHdvcmtzIGF0IGxlYXN0LgorICAgICAgICAgICAgICAgIHNlbGYucHJv
dG9jb2wuc2V0X3RpbWVvdXQoMioqMjggLSAxKQorICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAg
ICAgICAgICAgIHNlbGYubG9nZ2VyLmVycm9yKCJMb3N0IG1hcmlvbmV0dGUgY29ubmVjdGlvbiBi
ZWZvcmUgc3RhcnRpbmcgdGVzdCIpCisgICAgICAgICAgICByZXR1cm4gU3RvcAorCisgICAgICAg
IGV4ZWN1dG9yID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQgPSBzZWxmLl9ydW4pCisgICAgICAg
IGV4ZWN1dG9yLnN0YXJ0KCkKKworICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgorICAg
ICAgICAgICAgd2FpdF90aW1lb3V0ID0gdGltZW91dCArIDIgKiBleHRyYV90aW1lb3V0CisgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICB3YWl0X3RpbWVvdXQgPSBOb25lCisKKyAgICAgICAgZmxh
ZyA9IHNlbGYucmVzdWx0X2ZsYWcud2FpdCh3YWl0X3RpbWVvdXQpCisKKyAgICAgICAgaWYgc2Vs
Zi5yZXN1bHQgPT0gKE5vbmUsIE5vbmUpOgorICAgICAgICAgICAgc2VsZi5sb2dnZXIuZGVidWco
IlRpbWVkIG91dCB3YWl0aW5nIGZvciBhIHJlc3VsdCIpCisgICAgICAgICAgICBzZWxmLnJlc3Vs
dCA9IEZhbHNlLCAoIkVYVEVSTkFMLVRJTUVPVVQiLCBOb25lKQorICAgICAgICBlbGlmIHNlbGYu
cmVzdWx0WzFdIGlzIE5vbmU6CisgICAgICAgICAgICAjIFdlIGRpZG4ndCBnZXQgYW55IGRhdGEg
YmFjayBmcm9tIHRoZSB0ZXN0LCBzbyBjaGVjayBpZiB0aGUKKyAgICAgICAgICAgICMgYnJvd3Nl
ciBpcyBzdGlsbCByZXNwb25zaXZlCisgICAgICAgICAgICBpZiBzZWxmLnByb3RvY29sLmlzX2Fs
aXZlOgorICAgICAgICAgICAgICAgIHNlbGYucmVzdWx0ID0gRmFsc2UsICgiRVJST1IiLCBOb25l
KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnJlc3VsdCA9IEZhbHNl
LCAoIkNSQVNIIiwgTm9uZSkKKyAgICAgICAgcmV0dXJuIHNlbGYucmVzdWx0CisKKyAgICBkZWYg
X3J1bihzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSBUcnVl
LCBzZWxmLmZ1bmMoc2VsZi5tYXJpb25ldHRlLCBzZWxmLnVybCwgc2VsZi50aW1lb3V0KQorICAg
ICAgICBleGNlcHQgZXJyb3JzLlNjcmlwdFRpbWVvdXRFeGNlcHRpb246CisgICAgICAgICAgICBz
ZWxmLmxvZ2dlci5kZWJ1ZygiR290IGEgbWFyaW9uZXR0ZSB0aW1lb3V0IikKKyAgICAgICAgICAg
IHNlbGYucmVzdWx0ID0gRmFsc2UsICgiRVhURVJOQUwtVElNRU9VVCIsIE5vbmUpCisgICAgICAg
IGV4Y2VwdCAoc29ja2V0LnRpbWVvdXQsIElPRXJyb3IpOgorICAgICAgICAgICAgIyBUaGlzIGNh
biBoYXBwZW4gb24gYSBjcmFzaAorICAgICAgICAgICAgIyBBbHNvLCBzaG91bGQgY2hlY2sgYWZ0
ZXIgdGhlIHRlc3QgaWYgdGhlIGZpcmVmb3ggcHJvY2VzcyBpcyBzdGlsbCBydW5uaW5nCisgICAg
ICAgICAgICAjIGFuZCBvdGhlcndpc2UgaWdub3JlIGFueSBvdGhlciByZXN1bHQgYW5kIHNldCBp
dCB0byBjcmFzaAorICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSBGYWxzZSwgKCJDUkFTSCIsIE5v
bmUpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIG1lc3NhZ2Ug
PSBnZXRhdHRyKGUsICJtZXNzYWdlIiwgIiIpCisgICAgICAgICAgICBpZiBtZXNzYWdlOgorICAg
ICAgICAgICAgICAgIG1lc3NhZ2UgKz0gIlxuIgorICAgICAgICAgICAgbWVzc2FnZSArPSB0cmFj
ZWJhY2suZm9ybWF0X2V4YyhlKQorICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSBGYWxzZSwgKCJF
UlJPUiIsIGUpCisKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYucmVzdWx0X2Zs
YWcuc2V0KCkKKworCitjbGFzcyBNYXJpb25ldHRlVGVzdGhhcm5lc3NFeGVjdXRvcihUZXN0aGFy
bmVzc0V4ZWN1dG9yKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYnJvd3Nlciwgc2VydmVyX2Nv
bmZpZywgdGltZW91dF9tdWx0aXBsaWVyPTEsCisgICAgICAgICAgICAgICAgIGNsb3NlX2FmdGVy
X2RvbmU9VHJ1ZSwgZGVidWdfaW5mbz1Ob25lLCAqKmt3YXJncyk6CisgICAgICAgICIiIk1hcmlv
bmV0dGUtYmFzZWQgZXhlY3V0b3IgZm9yIHRlc3RoYXJuZXNzLmpzIHRlc3RzIiIiCisgICAgICAg
IFRlc3RoYXJuZXNzRXhlY3V0b3IuX19pbml0X18oc2VsZiwgYnJvd3Nlciwgc2VydmVyX2NvbmZp
ZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0X211bHRpcGxp
ZXI9dGltZW91dF9tdWx0aXBsaWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRlYnVnX2luZm89ZGVidWdfaW5mbykKKworICAgICAgICBzZWxmLnByb3RvY29sID0gTWFy
aW9uZXR0ZVByb3RvY29sKHNlbGYsIGJyb3dzZXIsIHRpbWVvdXRfbXVsdGlwbGllcikKKyAgICAg
ICAgc2VsZi5zY3JpcHQgPSBvcGVuKG9zLnBhdGguam9pbihoZXJlLCAidGVzdGhhcm5lc3NfbWFy
aW9uZXR0ZS5qcyIpKS5yZWFkKCkKKyAgICAgICAgc2VsZi5jbG9zZV9hZnRlcl9kb25lID0gY2xv
c2VfYWZ0ZXJfZG9uZQorICAgICAgICBzZWxmLndpbmRvd19pZCA9IHN0cih1dWlkLnV1aWQ0KCkp
CisKKyAgICAgICAgc2VsZi5vcmlnaW5hbF9wcmVmX3ZhbHVlcyA9IHt9CisKKyAgICAgICAgaWYg
bWFyaW9uZXR0ZSBpcyBOb25lOgorICAgICAgICAgICAgZG9fZGVsYXllZF9pbXBvcnRzKCkKKwor
ICAgIGRlZiBpc19hbGl2ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYucHJvdG9jb2wuaXNf
YWxpdmUKKworICAgIGRlZiBvbl9lbnZpcm9ubWVudF9jaGFuZ2Uoc2VsZiwgbmV3X2Vudmlyb25t
ZW50KToKKyAgICAgICAgc2VsZi5wcm90b2NvbC5vbl9lbnZpcm9ubWVudF9jaGFuZ2Uoc2VsZi5s
YXN0X2Vudmlyb25tZW50LCBuZXdfZW52aXJvbm1lbnQpCisKKyAgICAgICAgaWYgbmV3X2Vudmly
b25tZW50WyJwcm90b2NvbCJdICE9IHNlbGYubGFzdF9lbnZpcm9ubWVudFsicHJvdG9jb2wiXToK
KyAgICAgICAgICAgIHNlbGYucHJvdG9jb2wubG9hZF9ydW5uZXIobmV3X2Vudmlyb25tZW50WyJw
cm90b2NvbCJdKQorCisgICAgZGVmIGRvX3Rlc3Qoc2VsZiwgdGVzdCk6CisgICAgICAgIHRpbWVv
dXQgPSAodGVzdC50aW1lb3V0ICogc2VsZi50aW1lb3V0X211bHRpcGxpZXIgaWYgc2VsZi5kZWJ1
Z19pbmZvIGlzIE5vbmUKKyAgICAgICAgICAgICAgICAgICBlbHNlIE5vbmUpCisKKyAgICAgICAg
c3VjY2VzcywgZGF0YSA9IEV4ZWN1dGVBc3luY1NjcmlwdFJ1bihzZWxmLmxvZ2dlciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRvX3Rlc3RoYXJu
ZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYu
cHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2VsZi50ZXN0X3VybCh0ZXN0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0aW1lb3V0KS5ydW4oKQorICAgICAgICBpZiBzdWNjZXNzOgorICAgICAgICAg
ICAgcmV0dXJuIHNlbGYuY29udmVydF9yZXN1bHQodGVzdCwgZGF0YSkKKworICAgICAgICByZXR1
cm4gKHRlc3QucmVzdWx0X2NscygqZGF0YSksIFtdKQorCisgICAgZGVmIGRvX3Rlc3RoYXJuZXNz
KHNlbGYsIG1hcmlvbmV0dGUsIHVybCwgdGltZW91dCk6CisgICAgICAgIGlmIHNlbGYuY2xvc2Vf
YWZ0ZXJfZG9uZToKKyAgICAgICAgICAgIG1hcmlvbmV0dGUuZXhlY3V0ZV9zY3JpcHQoImlmICh3
aW5kb3cud3JhcHBlZEpTT2JqZWN0Lndpbikge3dpbmRvdy53cmFwcGVkSlNPYmplY3Qud2luLmNs
b3NlKCl9IikKKyAgICAgICAgICAgIHNlbGYucHJvdG9jb2wuY2xvc2Vfb2xkX3dpbmRvd3Moc2Vs
Zi5wcm90b2NvbCkKKworICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgorICAgICAgICAg
ICAgdGltZW91dF9tcyA9IHN0cih0aW1lb3V0ICogMTAwMCkKKyAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgIHRpbWVvdXRfbXMgPSAibnVsbCIKKworICAgICAgICBzY3JpcHQgPSBzZWxmLnNjcmlw
dCAlIHsiYWJzX3VybCI6IHVybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVy
bCI6IHN0cmlwX3NlcnZlcih1cmwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
d2luZG93X2lkIjogc2VsZi53aW5kb3dfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJ0aW1lb3V0X211bHRpcGxpZXIiOiBzZWxmLnRpbWVvdXRfbXVsdGlwbGllciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgInRpbWVvdXQiOiB0aW1lb3V0X21zLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwbGljaXRfdGltZW91dCI6IHRpbWVvdXQgaXMg
Tm9uZX0KKworICAgICAgICBydiA9IG1hcmlvbmV0dGUuZXhlY3V0ZV9hc3luY19zY3JpcHQoc2Ny
aXB0LCBuZXdfc2FuZGJveD1GYWxzZSkKKyAgICAgICAgcmV0dXJuIHJ2CisKKworY2xhc3MgTWFy
aW9uZXR0ZVJlZlRlc3RFeGVjdXRvcihSZWZUZXN0RXhlY3V0b3IpOgorICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBicm93c2VyLCBzZXJ2ZXJfY29uZmlnLCB0aW1lb3V0X211bHRpcGxpZXI9MSwKKyAg
ICAgICAgICAgICAgICAgc2NyZWVuc2hvdF9jYWNoZT1Ob25lLCBjbG9zZV9hZnRlcl9kb25lPVRy
dWUsCisgICAgICAgICAgICAgICAgIGRlYnVnX2luZm89Tm9uZSwgcmVmdGVzdF9pbnRlcm5hbD1G
YWxzZSwKKyAgICAgICAgICAgICAgICAgcmVmdGVzdF9zY3JlZW5zaG90PSJ1bmV4cGVjdGVkIiwK
KyAgICAgICAgICAgICAgICAgZ3JvdXBfbWV0YWRhdGE9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAg
ICAiIiJNYXJpb25ldHRlLWJhc2VkIGV4ZWN1dG9yIGZvciByZWZ0ZXN0cyIiIgorICAgICAgICBS
ZWZUZXN0RXhlY3V0b3IuX19pbml0X18oc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyb3dzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJf
Y29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyZWVuc2hvdF9jYWNo
ZT1zY3JlZW5zaG90X2NhY2hlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlt
ZW91dF9tdWx0aXBsaWVyPXRpbWVvdXRfbXVsdGlwbGllciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlYnVnX2luZm89ZGVidWdfaW5mbykKKyAgICAgICAgc2VsZi5wcm90b2Nv
bCA9IE1hcmlvbmV0dGVQcm90b2NvbChzZWxmLCBicm93c2VyKQorICAgICAgICBzZWxmLmltcGxl
bWVudGF0aW9uID0gKEludGVybmFsUmVmVGVzdEltcGxlbWVudGF0aW9uCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgcmVmdGVzdF9pbnRlcm5hbAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UgUmVmVGVzdEltcGxlbWVudGF0aW9uKShzZWxmKQorICAgICAgICBz
ZWxmLmltcGxlbWVudGF0aW9uX2t3YXJncyA9ICh7InNjcmVlbnNob3QiOiByZWZ0ZXN0X3NjcmVl
bnNob3R9IGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnRlc3Rf
aW50ZXJuYWwgZWxzZSB7fSkKKworICAgICAgICBzZWxmLmNsb3NlX2FmdGVyX2RvbmUgPSBjbG9z
ZV9hZnRlcl9kb25lCisgICAgICAgIHNlbGYuaGFzX3dpbmRvdyA9IEZhbHNlCisgICAgICAgIHNl
bGYub3JpZ2luYWxfcHJlZl92YWx1ZXMgPSB7fQorICAgICAgICBzZWxmLmdyb3VwX21ldGFkYXRh
ID0gZ3JvdXBfbWV0YWRhdGEKKworICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKGhlcmUs
ICJyZWZ0ZXN0LmpzIikpIGFzIGY6CisgICAgICAgICAgICBzZWxmLnNjcmlwdCA9IGYucmVhZCgp
CisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oaGVyZSwgInJlZnRlc3Qtd2FpdF9tYXJp
b25ldHRlLmpzIikpIGFzIGY6CisgICAgICAgICAgICBzZWxmLndhaXRfc2NyaXB0ID0gZi5yZWFk
KCkKKworICAgIGRlZiBzZXR1cChzZWxmLCBydW5uZXIpOgorICAgICAgICBzdXBlcihzZWxmLl9f
Y2xhc3NfXywgc2VsZikuc2V0dXAocnVubmVyKQorICAgICAgICBzZWxmLmltcGxlbWVudGF0aW9u
LnNldHVwKCoqc2VsZi5pbXBsZW1lbnRhdGlvbl9rd2FyZ3MpCisKKyAgICBkZWYgdGVhcmRvd24o
c2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuaW1wbGVtZW50YXRpb24udGVh
cmRvd24oKQorICAgICAgICAgICAgaGFuZGxlID0gc2VsZi5wcm90b2NvbC5tYXJpb25ldHRlLndp
bmRvd19oYW5kbGVzWzBdCisgICAgICAgICAgICBzZWxmLnByb3RvY29sLm1hcmlvbmV0dGUuc3dp
dGNoX3RvX3dpbmRvdyhoYW5kbGUpCisgICAgICAgICAgICBzdXBlcihzZWxmLl9fY2xhc3NfXywg
c2VsZikudGVhcmRvd24oKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAg
ICAgICAjIElnbm9yZSBlcnJvcnMgZHVyaW5nIHRlYXJkb3duCisgICAgICAgICAgICBzZWxmLmxv
Z2dlci53YXJuaW5nKHRyYWNlYmFjay5mb3JtYXRfZXhjKGUpKQorCisgICAgZGVmIGlzX2FsaXZl
KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5wcm90b2NvbC5pc19hbGl2ZQorCisgICAgZGVm
IG9uX2Vudmlyb25tZW50X2NoYW5nZShzZWxmLCBuZXdfZW52aXJvbm1lbnQpOgorICAgICAgICBz
ZWxmLnByb3RvY29sLm9uX2Vudmlyb25tZW50X2NoYW5nZShzZWxmLmxhc3RfZW52aXJvbm1lbnQs
IG5ld19lbnZpcm9ubWVudCkKKworICAgIGRlZiBkb190ZXN0KHNlbGYsIHRlc3QpOgorICAgICAg
ICBpZiBub3QgaXNpbnN0YW5jZShzZWxmLmltcGxlbWVudGF0aW9uLCBJbnRlcm5hbFJlZlRlc3RJ
bXBsZW1lbnRhdGlvbik6CisgICAgICAgICAgICBpZiBzZWxmLmNsb3NlX2FmdGVyX2RvbmUgYW5k
IHNlbGYuaGFzX3dpbmRvdzoKKyAgICAgICAgICAgICAgICBzZWxmLnByb3RvY29sLm1hcmlvbmV0
dGUuY2xvc2UoKQorICAgICAgICAgICAgICAgIHNlbGYucHJvdG9jb2wubWFyaW9uZXR0ZS5zd2l0
Y2hfdG9fd2luZG93KAorICAgICAgICAgICAgICAgICAgICBzZWxmLnByb3RvY29sLm1hcmlvbmV0
dGUud2luZG93X2hhbmRsZXNbLTFdKQorICAgICAgICAgICAgICAgIHNlbGYuaGFzX3dpbmRvdyA9
IEZhbHNlCisKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmhhc193aW5kb3c6CisgICAgICAgICAg
ICAgICAgc2VsZi5wcm90b2NvbC5tYXJpb25ldHRlLmV4ZWN1dGVfc2NyaXB0KHNlbGYuc2NyaXB0
KQorICAgICAgICAgICAgICAgIHNlbGYucHJvdG9jb2wubWFyaW9uZXR0ZS5zd2l0Y2hfdG9fd2lu
ZG93KHNlbGYucHJvdG9jb2wubWFyaW9uZXR0ZS53aW5kb3dfaGFuZGxlc1stMV0pCisgICAgICAg
ICAgICAgICAgc2VsZi5oYXNfd2luZG93ID0gVHJ1ZQorCisgICAgICAgIHJlc3VsdCA9IHNlbGYu
aW1wbGVtZW50YXRpb24ucnVuX3Rlc3QodGVzdCkKKyAgICAgICAgcmV0dXJuIHNlbGYuY29udmVy
dF9yZXN1bHQodGVzdCwgcmVzdWx0KQorCisgICAgZGVmIHNjcmVlbnNob3Qoc2VsZiwgdGVzdCwg
dmlld3BvcnRfc2l6ZSwgZHBpKToKKyAgICAgICAgIyBodHRwczovL2dpdGh1Yi5jb20vdzNjL3dw
dHJ1bm5lci9pc3N1ZXMvMTY2CisgICAgICAgIGFzc2VydCB2aWV3cG9ydF9zaXplIGlzIE5vbmUK
KyAgICAgICAgYXNzZXJ0IGRwaSBpcyBOb25lCisKKyAgICAgICAgdGltZW91dCA9ICBzZWxmLnRp
bWVvdXRfbXVsdGlwbGllciAqIHRlc3QudGltZW91dCBpZiBzZWxmLmRlYnVnX2luZm8gaXMgTm9u
ZSBlbHNlIE5vbmUKKworICAgICAgICB0ZXN0X3VybCA9IHNlbGYudGVzdF91cmwodGVzdCkKKwor
ICAgICAgICByZXR1cm4gRXhlY3V0ZUFzeW5jU2NyaXB0UnVuKHNlbGYubG9nZ2VyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NjcmVlbnNob3QsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wcm90b2NvbCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3VybCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0aW1lb3V0KS5ydW4oKQorCisgICAgZGVmIF9zY3JlZW5zaG90KHNl
bGYsIG1hcmlvbmV0dGUsIHVybCwgdGltZW91dCk6CisgICAgICAgIG1hcmlvbmV0dGUubmF2aWdh
dGUodXJsKQorCisgICAgICAgIG1hcmlvbmV0dGUuZXhlY3V0ZV9hc3luY19zY3JpcHQoc2VsZi53
YWl0X3NjcmlwdCkKKworICAgICAgICBzY3JlZW5zaG90ID0gbWFyaW9uZXR0ZS5zY3JlZW5zaG90
KGZ1bGw9RmFsc2UpCisgICAgICAgICMgc3RyaXAgb2ZmIHRoZSBkYXRhOmltZy9wbmcsIHBhcnQg
b2YgdGhlIHVybAorICAgICAgICBpZiBzY3JlZW5zaG90LnN0YXJ0c3dpdGgoImRhdGE6aW1hZ2Uv
cG5nO2Jhc2U2NCwiKToKKyAgICAgICAgICAgIHNjcmVlbnNob3QgPSBzY3JlZW5zaG90LnNwbGl0
KCIsIiwgMSlbMV0KKworICAgICAgICByZXR1cm4gc2NyZWVuc2hvdAorCisKK2NsYXNzIEludGVy
bmFsUmVmVGVzdEltcGxlbWVudGF0aW9uKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYs
IGV4ZWN1dG9yKToKKyAgICAgICAgc2VsZi50aW1lb3V0X211bHRpcGxpZXIgPSBleGVjdXRvci50
aW1lb3V0X211bHRpcGxpZXIKKyAgICAgICAgc2VsZi5leGVjdXRvciA9IGV4ZWN1dG9yCisKKyAg
ICBAcHJvcGVydHkKKyAgICBkZWYgbG9nZ2VyKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5l
eGVjdXRvci5sb2dnZXIKKworICAgIGRlZiBzZXR1cChzZWxmLCBzY3JlZW5zaG90PSJ1bmV4cGVj
dGVkIik6CisgICAgICAgIGRhdGEgPSB7InNjcmVlbnNob3QiOiBzY3JlZW5zaG90fQorICAgICAg
ICBpZiBzZWxmLmV4ZWN1dG9yLmdyb3VwX21ldGFkYXRhIGlzIG5vdCBOb25lOgorICAgICAgICAg
ICAgZGF0YVsidXJsQ291bnQiXSA9IHt1cmxwYXJzZS51cmxqb2luKHNlbGYuZXhlY3V0b3Iuc2Vy
dmVyX3VybChrZXlbMF0pLCBrZXlbMV0pOnZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciBrZXksIHZhbHVlIGluIHNlbGYuZXhlY3V0b3IuZ3JvdXBfbWV0YWRhdGEuZ2V0
KCJ1cmxfY291bnQiLCB7fSkuaXRlcml0ZW1zKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgdmFsdWUgPiAxfQorICAgICAgICBzZWxmLmV4ZWN1dG9yLnByb3RvY29sLm1hcmlv
bmV0dGUuc2V0X2NvbnRleHQoc2VsZi5leGVjdXRvci5wcm90b2NvbC5tYXJpb25ldHRlLkNPTlRF
WFRfQ0hST01FKQorICAgICAgICBzZWxmLmV4ZWN1dG9yLnByb3RvY29sLm1hcmlvbmV0dGUuX3Nl
bmRfbWVzc2FnZSgicmVmdGVzdDpzZXR1cCIsIGRhdGEpCisKKyAgICBkZWYgcnVuX3Rlc3Qoc2Vs
ZiwgdGVzdCk6CisgICAgICAgIHZpZXdwb3J0X3NpemUgPSB0ZXN0LnZpZXdwb3J0X3NpemUKKyAg
ICAgICAgZHBpID0gdGVzdC5kcGkKKworICAgICAgICByZWZlcmVuY2VzID0gc2VsZi5nZXRfcmVm
ZXJlbmNlcyh0ZXN0KQorICAgICAgICBydiA9IHNlbGYuZXhlY3V0b3IucHJvdG9jb2wubWFyaW9u
ZXR0ZS5fc2VuZF9tZXNzYWdlKCJyZWZ0ZXN0OnJ1biIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJ0ZXN0Ijogc2VsZi5leGVj
dXRvci50ZXN0X3VybCh0ZXN0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlZmVyZW5jZXMiOiByZWZlcmVuY2VzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiZXhwZWN0ZWQiOiB0ZXN0LmV4cGVjdGVkKCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aW1lb3V0IjogdGVzdC50aW1l
b3V0ICogMTAwMH0pWyJ2YWx1ZSJdCisgICAgICAgIHJldHVybiBydgorCisgICAgZGVmIGdldF9y
ZWZlcmVuY2VzKHNlbGYsIG5vZGUpOgorICAgICAgICBydiA9IFtdCisgICAgICAgIGZvciBpdGVt
LCByZWxhdGlvbiBpbiBub2RlLnJlZmVyZW5jZXM6CisgICAgICAgICAgICBydi5hcHBlbmQoW3Nl
bGYuZXhlY3V0b3IudGVzdF91cmwoaXRlbSksIHNlbGYuZ2V0X3JlZmVyZW5jZXMoaXRlbSksIHJl
bGF0aW9uXSkKKyAgICAgICAgcmV0dXJuIHJ2CisKKyAgICBkZWYgdGVhcmRvd24oc2VsZik6Cisg
ICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuZXhlY3V0b3IucHJvdG9jb2wubWFyaW9uZXR0
ZS5fc2VuZF9tZXNzYWdlKCJyZWZ0ZXN0OnRlYXJkb3duIiwge30pCisgICAgICAgICAgICBzZWxm
LmV4ZWN1dG9yLnByb3RvY29sLm1hcmlvbmV0dGUuc2V0X2NvbnRleHQoc2VsZi5leGVjdXRvci5w
cm90b2NvbC5tYXJpb25ldHRlLkNPTlRFWFRfQ09OVEVOVCkKKyAgICAgICAgZXhjZXB0IEV4Y2Vw
dGlvbiBhcyBlOgorICAgICAgICAgICAgIyBJZ25vcmUgZXJyb3JzIGR1cmluZyB0ZWFyZG93bgor
ICAgICAgICAgICAgc2VsZi5sb2dnZXIud2FybmluZyh0cmFjZWJhY2sudHJhY2ViYWNrLmZvcm1h
dF9leGMoZSkpCisKKworCitjbGFzcyBHZWNrb0RyaXZlclByb3RvY29sKFdlYkRyaXZlclByb3Rv
Y29sKToKKyAgICBzZXJ2ZXJfY2xzID0gR2Vja29Ecml2ZXJTZXJ2ZXIKKworCitjbGFzcyBNYXJp
b25ldHRlV2RzcGVjRXhlY3V0b3IoV2RzcGVjRXhlY3V0b3IpOgorICAgIHByb3RvY29sX2NscyA9
IEdlY2tvRHJpdmVyUHJvdG9jb2wKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVk
L3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2V4ZWN1dG9ycy9leGVjdXRvcnNlbGVuaXVt
LnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5u
ZXIvZXhlY3V0b3JzL2V4ZWN1dG9yc2VsZW5pdW0ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLjcyOGQzYzY4MjIyCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVy
VGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvZXhlY3V0b3JzL2V4
ZWN1dG9yc2VsZW5pdW0ucHkKQEAgLTAsMCArMSwyNTkgQEAKK2ltcG9ydCBvcworaW1wb3J0IHNv
Y2tldAoraW1wb3J0IHN5cworaW1wb3J0IHRocmVhZGluZworaW1wb3J0IHRpbWUKK2ltcG9ydCB0
cmFjZWJhY2sKK2ltcG9ydCB1cmxwYXJzZQoraW1wb3J0IHV1aWQKKworZnJvbSAuYmFzZSBpbXBv
cnQgKFByb3RvY29sLAorICAgICAgICAgICAgICAgICAgIFJlZlRlc3RFeGVjdXRvciwKKyAgICAg
ICAgICAgICAgICAgICBSZWZUZXN0SW1wbGVtZW50YXRpb24sCisgICAgICAgICAgICAgICAgICAg
VGVzdGhhcm5lc3NFeGVjdXRvciwKKyAgICAgICAgICAgICAgICAgICBleHRyYV90aW1lb3V0LAor
ICAgICAgICAgICAgICAgICAgIHN0cmlwX3NlcnZlcikKK2Zyb20gLi50ZXN0cnVubmVyIGltcG9y
dCBTdG9wCisKK2hlcmUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5zcGxpdChfX2ZpbGVfXylbMF0p
CisKK3dlYmRyaXZlciA9IE5vbmUKK2V4Y2VwdGlvbnMgPSBOb25lCitSZW1vdGVDb25uZWN0aW9u
ID0gTm9uZQorCisKK2RlZiBkb19kZWxheWVkX2ltcG9ydHMoKToKKyAgICBnbG9iYWwgd2ViZHJp
dmVyCisgICAgZ2xvYmFsIGV4Y2VwdGlvbnMKKyAgICBnbG9iYWwgUmVtb3RlQ29ubmVjdGlvbgor
ICAgIGZyb20gc2VsZW5pdW0gaW1wb3J0IHdlYmRyaXZlcgorICAgIGZyb20gc2VsZW5pdW0uY29t
bW9uIGltcG9ydCBleGNlcHRpb25zCisgICAgZnJvbSBzZWxlbml1bS53ZWJkcml2ZXIucmVtb3Rl
LnJlbW90ZV9jb25uZWN0aW9uIGltcG9ydCBSZW1vdGVDb25uZWN0aW9uCisKKworY2xhc3MgU2Vs
ZW5pdW1Qcm90b2NvbChQcm90b2NvbCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4ZWN1dG9y
LCBicm93c2VyLCBjYXBhYmlsaXRpZXMsICoqa3dhcmdzKToKKyAgICAgICAgZG9fZGVsYXllZF9p
bXBvcnRzKCkKKworICAgICAgICBQcm90b2NvbC5fX2luaXRfXyhzZWxmLCBleGVjdXRvciwgYnJv
d3NlcikKKyAgICAgICAgc2VsZi5jYXBhYmlsaXRpZXMgPSBjYXBhYmlsaXRpZXMKKyAgICAgICAg
c2VsZi51cmwgPSBicm93c2VyLndlYmRyaXZlcl91cmwKKyAgICAgICAgc2VsZi53ZWJkcml2ZXIg
PSBOb25lCisKKyAgICBkZWYgc2V0dXAoc2VsZiwgcnVubmVyKToKKyAgICAgICAgIiIiQ29ubmVj
dCB0byBicm93c2VyIHZpYSBTZWxlbml1bSdzIFdlYkRyaXZlciBpbXBsZW1lbnRhdGlvbi4iIiIK
KyAgICAgICAgc2VsZi5ydW5uZXIgPSBydW5uZXIKKyAgICAgICAgc2VsZi5sb2dnZXIuZGVidWco
IkNvbm5lY3RpbmcgdG8gU2VsZW5pdW0gb24gVVJMOiAlcyIgJSBzZWxmLnVybCkKKworICAgICAg
ICBzZXNzaW9uX3N0YXJ0ZWQgPSBGYWxzZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxm
LndlYmRyaXZlciA9IHdlYmRyaXZlci5SZW1vdGUoY29tbWFuZF9leGVjdXRvcj1SZW1vdGVDb25u
ZWN0aW9uKHNlbGYudXJsLnN0cmlwKCIvIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29s
dmVfaXA9RmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRlc2lyZWRfY2FwYWJpbGl0aWVzPXNlbGYuY2FwYWJpbGl0aWVzKQorICAgICAgICBleGNl
cHQ6CisgICAgICAgICAgICBzZWxmLmxvZ2dlci53YXJuaW5nKAorICAgICAgICAgICAgICAgICJD
b25uZWN0aW5nIHRvIFNlbGVuaXVtIGZhaWxlZDpcbiVzIiAlIHRyYWNlYmFjay5mb3JtYXRfZXhj
KCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1ZygiU2VsZW5p
dW0gc2Vzc2lvbiBzdGFydGVkIikKKyAgICAgICAgICAgIHNlc3Npb25fc3RhcnRlZCA9IFRydWUK
KworICAgICAgICBpZiBub3Qgc2Vzc2lvbl9zdGFydGVkOgorICAgICAgICAgICAgc2VsZi5sb2dn
ZXIud2FybmluZygiRmFpbGVkIHRvIGNvbm5lY3QgdG8gU2VsZW5pdW0iKQorICAgICAgICAgICAg
c2VsZi5leGVjdXRvci5ydW5uZXIuc2VuZF9tZXNzYWdlKCJpbml0X2ZhaWxlZCIpCisgICAgICAg
IGVsc2U6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5hZnRlcl9jb25u
ZWN0KCkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBwcmludCA+PiBzeXMu
c3RkZXJyLCB0cmFjZWJhY2suZm9ybWF0X2V4YygpCisgICAgICAgICAgICAgICAgc2VsZi5sb2dn
ZXIud2FybmluZygKKyAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBjb25uZWN0IHRvIG5h
dmlnYXRlIGluaXRpYWwgcGFnZSIpCisgICAgICAgICAgICAgICAgc2VsZi5leGVjdXRvci5ydW5u
ZXIuc2VuZF9tZXNzYWdlKCJpbml0X2ZhaWxlZCIpCisgICAgICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgICAgIHNlbGYuZXhlY3V0b3IucnVubmVyLnNlbmRfbWVzc2FnZSgiaW5pdF9zdWNjZWVk
ZWQiKQorCisgICAgZGVmIHRlYXJkb3duKHNlbGYpOgorICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1
ZygiSGFuZ2luZyB1cCBvbiBTZWxlbml1bSBzZXNzaW9uIikKKyAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgc2VsZi53ZWJkcml2ZXIucXVpdCgpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAg
IHBhc3MKKyAgICAgICAgZGVsIHNlbGYud2ViZHJpdmVyCisKKyAgICBkZWYgaXNfYWxpdmUoc2Vs
Zik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgR2V0IGEgc2ltcGxlIHByb3BlcnR5IG92
ZXIgdGhlIGNvbm5lY3Rpb24KKyAgICAgICAgICAgIHNlbGYud2ViZHJpdmVyLmN1cnJlbnRfd2lu
ZG93X2hhbmRsZQorICAgICAgICAjIFRPRE8gd2hhdCBleGNlcHRpb24/CisgICAgICAgIGV4Y2Vw
dCAoc29ja2V0LnRpbWVvdXQsIGV4Y2VwdGlvbnMuRXJyb3JJblJlc3BvbnNlRXhjZXB0aW9uKToK
KyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVm
IGFmdGVyX2Nvbm5lY3Qoc2VsZik6CisgICAgICAgIHNlbGYubG9hZF9ydW5uZXIoImh0dHAiKQor
CisgICAgZGVmIGxvYWRfcnVubmVyKHNlbGYsIHByb3RvY29sKToKKyAgICAgICAgdXJsID0gdXJs
cGFyc2UudXJsam9pbihzZWxmLmV4ZWN1dG9yLnNlcnZlcl91cmwocHJvdG9jb2wpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICIvdGVzdGhhcm5lc3NfcnVubmVyLmh0bWwiKQorICAg
ICAgICBzZWxmLmxvZ2dlci5kZWJ1ZygiTG9hZGluZyAlcyIgJSB1cmwpCisgICAgICAgIHNlbGYu
d2ViZHJpdmVyLmdldCh1cmwpCisgICAgICAgIHNlbGYud2ViZHJpdmVyLmV4ZWN1dGVfc2NyaXB0
KCJkb2N1bWVudC50aXRsZSA9ICclcyciICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkubmFtZS5yZXBsYWNlKCInIiwgJyIn
KSkKKworICAgIGRlZiB3YWl0KHNlbGYpOgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAg
ICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYud2ViZHJpdmVyLmV4ZWN1dGVfYXN5bmNfc2Ny
aXB0KCIiKTsKKyAgICAgICAgICAgIGV4Y2VwdCBleGNlcHRpb25zLlRpbWVvdXRFeGNlcHRpb246
CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZXhjZXB0IChzb2NrZXQudGltZW91
dCwgZXhjZXB0aW9ucy5Ob1N1Y2hXaW5kb3dFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgICAg
IGV4Y2VwdGlvbnMuRXJyb3JJblJlc3BvbnNlRXhjZXB0aW9uLCBJT0Vycm9yKToKKyAgICAgICAg
ICAgICAgICBicmVhaworICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAg
ICAgICAgICAgIHNlbGYubG9nZ2VyLmVycm9yKHRyYWNlYmFjay5mb3JtYXRfZXhjKGUpKQorICAg
ICAgICAgICAgICAgIGJyZWFrCisKKworY2xhc3MgU2VsZW5pdW1SdW4ob2JqZWN0KToKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgZnVuYywgd2ViZHJpdmVyLCB1cmwsIHRpbWVvdXQpOgorICAgICAg
ICBzZWxmLmZ1bmMgPSBmdW5jCisgICAgICAgIHNlbGYucmVzdWx0ID0gTm9uZQorICAgICAgICBz
ZWxmLndlYmRyaXZlciA9IHdlYmRyaXZlcgorICAgICAgICBzZWxmLnVybCA9IHVybAorICAgICAg
ICBzZWxmLnRpbWVvdXQgPSB0aW1lb3V0CisgICAgICAgIHNlbGYucmVzdWx0X2ZsYWcgPSB0aHJl
YWRpbmcuRXZlbnQoKQorCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgdGltZW91dCA9IHNl
bGYudGltZW91dAorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYud2ViZHJpdmVyLnNl
dF9zY3JpcHRfdGltZW91dCgodGltZW91dCArIGV4dHJhX3RpbWVvdXQpICogMTAwMCkKKyAgICAg
ICAgZXhjZXB0IGV4Y2VwdGlvbnMuRXJyb3JJblJlc3BvbnNlRXhjZXB0aW9uOgorICAgICAgICAg
ICAgc2VsZi5sb2dnZXIuZXJyb3IoIkxvc3QgV2ViRHJpdmVyIGNvbm5lY3Rpb24iKQorICAgICAg
ICAgICAgcmV0dXJuIFN0b3AKKworICAgICAgICBleGVjdXRvciA9IHRocmVhZGluZy5UaHJlYWQo
dGFyZ2V0PXNlbGYuX3J1bikKKyAgICAgICAgZXhlY3V0b3Iuc3RhcnQoKQorCisgICAgICAgIGZs
YWcgPSBzZWxmLnJlc3VsdF9mbGFnLndhaXQodGltZW91dCArIDIgKiBleHRyYV90aW1lb3V0KQor
ICAgICAgICBpZiBzZWxmLnJlc3VsdCBpcyBOb25lOgorICAgICAgICAgICAgYXNzZXJ0IG5vdCBm
bGFnCisgICAgICAgICAgICBzZWxmLnJlc3VsdCA9IEZhbHNlLCAoIkVYVEVSTkFMLVRJTUVPVVQi
LCBOb25lKQorCisgICAgICAgIHJldHVybiBzZWxmLnJlc3VsdAorCisgICAgZGVmIF9ydW4oc2Vs
Zik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYucmVzdWx0ID0gVHJ1ZSwgc2VsZi5m
dW5jKHNlbGYud2ViZHJpdmVyLCBzZWxmLnVybCwgc2VsZi50aW1lb3V0KQorICAgICAgICBleGNl
cHQgZXhjZXB0aW9ucy5UaW1lb3V0RXhjZXB0aW9uOgorICAgICAgICAgICAgc2VsZi5yZXN1bHQg
PSBGYWxzZSwgKCJFWFRFUk5BTC1USU1FT1VUIiwgTm9uZSkKKyAgICAgICAgZXhjZXB0IChzb2Nr
ZXQudGltZW91dCwgZXhjZXB0aW9ucy5FcnJvckluUmVzcG9uc2VFeGNlcHRpb24pOgorICAgICAg
ICAgICAgc2VsZi5yZXN1bHQgPSBGYWxzZSwgKCJDUkFTSCIsIE5vbmUpCisgICAgICAgIGV4Y2Vw
dCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIG1lc3NhZ2UgPSBnZXRhdHRyKGUsICJtZXNz
YWdlIiwgIiIpCisgICAgICAgICAgICBpZiBtZXNzYWdlOgorICAgICAgICAgICAgICAgIG1lc3Nh
Z2UgKz0gIlxuIgorICAgICAgICAgICAgbWVzc2FnZSArPSB0cmFjZWJhY2suZm9ybWF0X2V4Yyhl
KQorICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSBGYWxzZSwgKCJFUlJPUiIsIGUpCisgICAgICAg
IGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLnJlc3VsdF9mbGFnLnNldCgpCisKKworY2xhc3Mg
U2VsZW5pdW1UZXN0aGFybmVzc0V4ZWN1dG9yKFRlc3RoYXJuZXNzRXhlY3V0b3IpOgorICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBicm93c2VyLCBzZXJ2ZXJfY29uZmlnLCB0aW1lb3V0X211bHRpcGxp
ZXI9MSwKKyAgICAgICAgICAgICAgICAgY2xvc2VfYWZ0ZXJfZG9uZT1UcnVlLCBjYXBhYmlsaXRp
ZXM9Tm9uZSwgZGVidWdfaW5mbz1Ob25lLAorICAgICAgICAgICAgICAgICAqKmt3YXJncyk6Cisg
ICAgICAgICIiIlNlbGVuaXVtLWJhc2VkIGV4ZWN1dG9yIGZvciB0ZXN0aGFybmVzcy5qcyB0ZXN0
cyIiIgorICAgICAgICBUZXN0aGFybmVzc0V4ZWN1dG9yLl9faW5pdF9fKHNlbGYsIGJyb3dzZXIs
IHNlcnZlcl9jb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlt
ZW91dF9tdWx0aXBsaWVyPXRpbWVvdXRfbXVsdGlwbGllciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkZWJ1Z19pbmZvPWRlYnVnX2luZm8pCisgICAgICAgIHNlbGYucHJv
dG9jb2wgPSBTZWxlbml1bVByb3RvY29sKHNlbGYsIGJyb3dzZXIsIGNhcGFiaWxpdGllcykKKyAg
ICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihoZXJlLCAidGVzdGhhcm5lc3Nfd2ViZHJpdmVy
LmpzIikpIGFzIGY6CisgICAgICAgICAgICBzZWxmLnNjcmlwdCA9IGYucmVhZCgpCisgICAgICAg
IHNlbGYuY2xvc2VfYWZ0ZXJfZG9uZSA9IGNsb3NlX2FmdGVyX2RvbmUKKyAgICAgICAgc2VsZi53
aW5kb3dfaWQgPSBzdHIodXVpZC51dWlkNCgpKQorCisgICAgZGVmIGlzX2FsaXZlKHNlbGYpOgor
ICAgICAgICByZXR1cm4gc2VsZi5wcm90b2NvbC5pc19hbGl2ZSgpCisKKyAgICBkZWYgb25fZW52
aXJvbm1lbnRfY2hhbmdlKHNlbGYsIG5ld19lbnZpcm9ubWVudCk6CisgICAgICAgIGlmIG5ld19l
bnZpcm9ubWVudFsicHJvdG9jb2wiXSAhPSBzZWxmLmxhc3RfZW52aXJvbm1lbnRbInByb3RvY29s
Il06CisgICAgICAgICAgICBzZWxmLnByb3RvY29sLmxvYWRfcnVubmVyKG5ld19lbnZpcm9ubWVu
dFsicHJvdG9jb2wiXSkKKworICAgIGRlZiBkb190ZXN0KHNlbGYsIHRlc3QpOgorICAgICAgICB1
cmwgPSBzZWxmLnRlc3RfdXJsKHRlc3QpCisKKyAgICAgICAgc3VjY2VzcywgZGF0YSA9IFNlbGVu
aXVtUnVuKHNlbGYuZG9fdGVzdGhhcm5lc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzZWxmLnByb3RvY29sLndlYmRyaXZlciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRl
c3QudGltZW91dCAqIHNlbGYudGltZW91dF9tdWx0aXBsaWVyKS5ydW4oKQorCisgICAgICAgIGlm
IHN1Y2Nlc3M6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5jb252ZXJ0X3Jlc3VsdCh0ZXN0LCBk
YXRhKQorCisgICAgICAgIHJldHVybiAodGVzdC5yZXN1bHRfY2xzKCpkYXRhKSwgW10pCisKKyAg
ICBkZWYgZG9fdGVzdGhhcm5lc3Moc2VsZiwgd2ViZHJpdmVyLCB1cmwsIHRpbWVvdXQpOgorICAg
ICAgICByZXR1cm4gd2ViZHJpdmVyLmV4ZWN1dGVfYXN5bmNfc2NyaXB0KAorICAgICAgICAgICAg
c2VsZi5zY3JpcHQgJSB7ImFic191cmwiOiB1cmwsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAidXJsIjogc3RyaXBfc2VydmVyKHVybCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAi
d2luZG93X2lkIjogc2VsZi53aW5kb3dfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAi
dGltZW91dF9tdWx0aXBsaWVyIjogc2VsZi50aW1lb3V0X211bHRpcGxpZXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAidGltZW91dCI6IHRpbWVvdXQgKiAxMDAwfSkKKworCitjbGFzcyBT
ZWxlbml1bVJlZlRlc3RFeGVjdXRvcihSZWZUZXN0RXhlY3V0b3IpOgorICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBicm93c2VyLCBzZXJ2ZXJfY29uZmlnLCB0aW1lb3V0X211bHRpcGxpZXI9MSwKKyAg
ICAgICAgICAgICAgICAgc2NyZWVuc2hvdF9jYWNoZT1Ob25lLCBjbG9zZV9hZnRlcl9kb25lPVRy
dWUsCisgICAgICAgICAgICAgICAgIGRlYnVnX2luZm89Tm9uZSwgY2FwYWJpbGl0aWVzPU5vbmUs
ICoqa3dhcmdzKToKKyAgICAgICAgIiIiU2VsZW5pdW0gV2ViRHJpdmVyLWJhc2VkIGV4ZWN1dG9y
IGZvciByZWZ0ZXN0cyIiIgorICAgICAgICBSZWZUZXN0RXhlY3V0b3IuX19pbml0X18oc2VsZiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyb3dzZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2NyZWVuc2hvdF9jYWNoZT1zY3JlZW5zaG90X2NhY2hlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dF9tdWx0aXBsaWVyPXRpbWVvdXRfbXVsdGlw
bGllciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX2luZm89ZGVidWdf
aW5mbykKKyAgICAgICAgc2VsZi5wcm90b2NvbCA9IFNlbGVuaXVtUHJvdG9jb2woc2VsZiwgYnJv
d3NlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwYWJpbGl0
aWVzPWNhcGFiaWxpdGllcykKKyAgICAgICAgc2VsZi5pbXBsZW1lbnRhdGlvbiA9IFJlZlRlc3RJ
bXBsZW1lbnRhdGlvbihzZWxmKQorICAgICAgICBzZWxmLmNsb3NlX2FmdGVyX2RvbmUgPSBjbG9z
ZV9hZnRlcl9kb25lCisgICAgICAgIHNlbGYuaGFzX3dpbmRvdyA9IEZhbHNlCisKKyAgICAgICAg
d2l0aCBvcGVuKG9zLnBhdGguam9pbihoZXJlLCAicmVmdGVzdC5qcyIpKSBhcyBmOgorICAgICAg
ICAgICAgc2VsZi5zY3JpcHQgPSBmLnJlYWQoKQorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5q
b2luKGhlcmUsICJyZWZ0ZXN0LXdhaXRfd2ViZHJpdmVyLmpzIikpIGFzIGY6CisgICAgICAgICAg
ICBzZWxmLndhaXRfc2NyaXB0ID0gZi5yZWFkKCkKKworICAgIGRlZiBpc19hbGl2ZShzZWxmKToK
KyAgICAgICAgcmV0dXJuIHNlbGYucHJvdG9jb2wuaXNfYWxpdmUoKQorCisgICAgZGVmIGRvX3Rl
c3Qoc2VsZiwgdGVzdCk6CisgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oIlRlc3QgcmVxdWlyZXMg
T1MtbGV2ZWwgd2luZG93IGZvY3VzIikKKworICAgICAgICBzZWxmLnByb3RvY29sLndlYmRyaXZl
ci5zZXRfd2luZG93X3NpemUoNjAwLCA2MDApCisKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5pbXBs
ZW1lbnRhdGlvbi5ydW5fdGVzdCh0ZXN0KQorCisgICAgICAgIHJldHVybiBzZWxmLmNvbnZlcnRf
cmVzdWx0KHRlc3QsIHJlc3VsdCkKKworICAgIGRlZiBzY3JlZW5zaG90KHNlbGYsIHRlc3QsIHZp
ZXdwb3J0X3NpemUsIGRwaSk6CisgICAgICAgICMgaHR0cHM6Ly9naXRodWIuY29tL3czYy93cHRy
dW5uZXIvaXNzdWVzLzE2NgorICAgICAgICBhc3NlcnQgdmlld3BvcnRfc2l6ZSBpcyBOb25lCisg
ICAgICAgIGFzc2VydCBkcGkgaXMgTm9uZQorCisgICAgICAgIHJldHVybiBTZWxlbml1bVJ1bihz
ZWxmLl9zY3JlZW5zaG90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wcm90b2Nv
bC53ZWJkcml2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRlc3RfdXJsKHRl
c3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdC50aW1lb3V0KS5ydW4oKQorCisg
ICAgZGVmIF9zY3JlZW5zaG90KHNlbGYsIHdlYmRyaXZlciwgdXJsLCB0aW1lb3V0KToKKyAgICAg
ICAgd2ViZHJpdmVyLmdldCh1cmwpCisKKyAgICAgICAgd2ViZHJpdmVyLmV4ZWN1dGVfYXN5bmNf
c2NyaXB0KHNlbGYud2FpdF9zY3JpcHQpCisKKyAgICAgICAgc2NyZWVuc2hvdCA9IHdlYmRyaXZl
ci5nZXRfc2NyZWVuc2hvdF9hc19iYXNlNjQoKQorCisgICAgICAgICMgc3RyaXAgb2ZmIHRoZSBk
YXRhOmltZy9wbmcsIHBhcnQgb2YgdGhlIHVybAorICAgICAgICBpZiBzY3JlZW5zaG90LnN0YXJ0
c3dpdGgoImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwiKToKKyAgICAgICAgICAgIHNjcmVlbnNob3Qg
PSBzY3JlZW5zaG90LnNwbGl0KCIsIiwgMSlbMV0KKworICAgICAgICByZXR1cm4gc2NyZWVuc2hv
dApkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5l
ci93cHRydW5uZXIvZXhlY3V0b3JzL2V4ZWN1dG9yc2Vydm8ucHkgYi9XZWJEcml2ZXJUZXN0cy9p
bXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9leGVjdXRvcnMvZXhlY3V0b3Jz
ZXJ2by5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMjE2ZDY4N2Zj
ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMv
d3B0cnVubmVyL3dwdHJ1bm5lci9leGVjdXRvcnMvZXhlY3V0b3JzZXJ2by5weQpAQCAtMCwwICsx
LDM2OCBAQAoraW1wb3J0IGJhc2U2NAoraW1wb3J0IGhhc2hsaWIKK2ltcG9ydCBodHRwbGliCitp
bXBvcnQganNvbgoraW1wb3J0IG9zCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHRlbXBmaWxl
CitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgdHJhY2ViYWNrCitpbXBvcnQgdXJscGFyc2UKK2lt
cG9ydCB1dWlkCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZWZhdWx0ZGljdAorCitmcm9tIG1v
enByb2Nlc3MgaW1wb3J0IFByb2Nlc3NIYW5kbGVyCisKK2Zyb20gLmJhc2UgaW1wb3J0IChFeGVj
dXRvckV4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgICBQcm90b2NvbCwKKyAgICAgICAgICAg
ICAgICAgICBSZWZUZXN0SW1wbGVtZW50YXRpb24sCisgICAgICAgICAgICAgICAgICAgdGVzdGhh
cm5lc3NfcmVzdWx0X2NvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICByZWZ0ZXN0X3Jlc3Vs
dF9jb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICAgV2RzcGVjRXhlY3V0b3IpCitmcm9tIC5w
cm9jZXNzIGltcG9ydCBQcm9jZXNzVGVzdEV4ZWN1dG9yCitmcm9tIC4uYnJvd3NlcnMuYmFzZSBp
bXBvcnQgYnJvd3Nlcl9jb21tYW5kCitmcm9tIC4ud3B0dGVzdCBpbXBvcnQgV2RzcGVjUmVzdWx0
LCBXZHNwZWNTdWJ0ZXN0UmVzdWx0Citmcm9tIC4ud2ViZHJpdmVyX3NlcnZlciBpbXBvcnQgU2Vy
dm9Ecml2ZXJTZXJ2ZXIKK2Zyb20gLmV4ZWN1dG9ybWFyaW9uZXR0ZSBpbXBvcnQgV2RzcGVjUnVu
CisKK3B5dGVzdHJ1bm5lciA9IE5vbmUKK3dlYmRyaXZlciA9IE5vbmUKKworZXh0cmFfdGltZW91
dCA9IDUgIyBzZWNvbmRzCisKK2hvc3RzX3RleHQgPSAiIiIxMjcuMC4wLjEgd2ViLXBsYXRmb3Jt
LnRlc3QKKzEyNy4wLjAuMSB3d3cud2ViLXBsYXRmb3JtLnRlc3QKKzEyNy4wLjAuMSB3d3cxLndl
Yi1wbGF0Zm9ybS50ZXN0CisxMjcuMC4wLjEgd3d3Mi53ZWItcGxhdGZvcm0udGVzdAorMTI3LjAu
MC4xIHhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLndlYi1wbGF0Zm9ybS50ZXN0CisxMjcuMC4wLjEg
eG4tLWx2ZS02bGFkLndlYi1wbGF0Zm9ybS50ZXN0CisiIiIKKworZGVmIG1ha2VfaG9zdHNfZmls
ZSgpOgorICAgIGhvc3RzX2ZkLCBob3N0c19wYXRoID0gdGVtcGZpbGUubWtzdGVtcCgpCisgICAg
d2l0aCBvcy5mZG9wZW4oaG9zdHNfZmQsICJ3IikgYXMgZjoKKyAgICAgICAgZi53cml0ZShob3N0
c190ZXh0KQorICAgIHJldHVybiBob3N0c19wYXRoCisKKworY2xhc3MgU2Vydm9UZXN0aGFybmVz
c0V4ZWN1dG9yKFByb2Nlc3NUZXN0RXhlY3V0b3IpOgorICAgIGNvbnZlcnRfcmVzdWx0ID0gdGVz
dGhhcm5lc3NfcmVzdWx0X2NvbnZlcnRlcgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb3dz
ZXIsIHNlcnZlcl9jb25maWcsIHRpbWVvdXRfbXVsdGlwbGllcj0xLCBkZWJ1Z19pbmZvPU5vbmUs
CisgICAgICAgICAgICAgICAgIHBhdXNlX2FmdGVyX3Rlc3Q9RmFsc2UsICoqa3dhcmdzKToKKyAg
ICAgICAgUHJvY2Vzc1Rlc3RFeGVjdXRvci5fX2luaXRfXyhzZWxmLCBicm93c2VyLCBzZXJ2ZXJf
Y29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXRfbXVs
dGlwbGllcj10aW1lb3V0X211bHRpcGxpZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVidWdfaW5mbz1kZWJ1Z19pbmZvKQorICAgICAgICBzZWxmLnBhdXNlX2FmdGVy
X3Rlc3QgPSBwYXVzZV9hZnRlcl90ZXN0CisgICAgICAgIHNlbGYucmVzdWx0X2RhdGEgPSBOb25l
CisgICAgICAgIHNlbGYucmVzdWx0X2ZsYWcgPSBOb25lCisgICAgICAgIHNlbGYucHJvdG9jb2wg
PSBQcm90b2NvbChzZWxmLCBicm93c2VyKQorICAgICAgICBzZWxmLmhvc3RzX3BhdGggPSBtYWtl
X2hvc3RzX2ZpbGUoKQorCisgICAgZGVmIHRlYXJkb3duKHNlbGYpOgorICAgICAgICB0cnk6Cisg
ICAgICAgICAgICBvcy51bmxpbmsoc2VsZi5ob3N0c19wYXRoKQorICAgICAgICBleGNlcHQgT1NF
cnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgUHJvY2Vzc1Rlc3RFeGVjdXRvci50ZWFy
ZG93bihzZWxmKQorCisgICAgZGVmIGRvX3Rlc3Qoc2VsZiwgdGVzdCk6CisgICAgICAgIHNlbGYu
cmVzdWx0X2RhdGEgPSBOb25lCisgICAgICAgIHNlbGYucmVzdWx0X2ZsYWcgPSB0aHJlYWRpbmcu
RXZlbnQoKQorCisgICAgICAgIGFyZ3MgPSBbCisgICAgICAgICAgICAiLS1oYXJkLWZhaWwiLCAi
LXUiLCAiU2Vydm8vd3B0cnVubmVyIiwKKyAgICAgICAgICAgICItWiIsICJyZXBsYWNlLXN1cnJv
Z2F0ZXMiLCAiLXoiLCBzZWxmLnRlc3RfdXJsKHRlc3QpLAorICAgICAgICBdCisgICAgICAgIGZv
ciBzdHlsZXNoZWV0IGluIHNlbGYuYnJvd3Nlci51c2VyX3N0eWxlc2hlZXRzOgorICAgICAgICAg
ICAgYXJncyArPSBbIi0tdXNlci1zdHlsZXNoZWV0Iiwgc3R5bGVzaGVldF0KKyAgICAgICAgZm9y
IHByZWYsIHZhbHVlIGluIHRlc3QuZW52aXJvbm1lbnQuZ2V0KCdwcmVmcycsIHt9KS5pdGVyaXRl
bXMoKToKKyAgICAgICAgICAgIGFyZ3MgKz0gWyItLXByZWYiLCAiJXM9JXMiICUgKHByZWYsIHZh
bHVlKV0KKyAgICAgICAgaWYgc2VsZi5icm93c2VyLmNhX2NlcnRpZmljYXRlX3BhdGg6CisgICAg
ICAgICAgICBhcmdzICs9IFsiLS1jZXJ0aWZpY2F0ZS1wYXRoIiwgc2VsZi5icm93c2VyLmNhX2Nl
cnRpZmljYXRlX3BhdGhdCisgICAgICAgIGFyZ3MgKz0gc2VsZi5icm93c2VyLmJpbmFyeV9hcmdz
CisgICAgICAgIGRlYnVnX2FyZ3MsIGNvbW1hbmQgPSBicm93c2VyX2NvbW1hbmQoc2VsZi5iaW5h
cnksIGFyZ3MsIHNlbGYuZGVidWdfaW5mbykKKworICAgICAgICBzZWxmLmNvbW1hbmQgPSBjb21t
YW5kCisKKyAgICAgICAgaWYgc2VsZi5wYXVzZV9hZnRlcl90ZXN0OgorICAgICAgICAgICAgc2Vs
Zi5jb21tYW5kLnJlbW92ZSgiLXoiKQorCisgICAgICAgIHNlbGYuY29tbWFuZCA9IGRlYnVnX2Fy
Z3MgKyBzZWxmLmNvbW1hbmQKKworICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAg
ICAgICBlbnZbIkhPU1RfRklMRSJdID0gc2VsZi5ob3N0c19wYXRoCisgICAgICAgIGVudlsiUlVT
VF9CQUNLVFJBQ0UiXSA9ICIxIgorCisKKyAgICAgICAgaWYgbm90IHNlbGYuaW50ZXJhY3RpdmU6
CisgICAgICAgICAgICBzZWxmLnByb2MgPSBQcm9jZXNzSGFuZGxlcihzZWxmLmNvbW1hbmQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzT3V0cHV0TGluZT1b
c2VsZi5vbl9vdXRwdXRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b25GaW5pc2g9c2VsZi5vbl9maW5pc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbnY9ZW52LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RvcmVPdXRwdXQ9RmFsc2UpCisgICAgICAgICAgICBzZWxmLnByb2MucnVuKCkKKyAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgIHNlbGYucHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oc2VsZi5jb21t
YW5kLCBlbnY9ZW52KQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRpbWVvdXQgPSB0ZXN0
LnRpbWVvdXQgKiBzZWxmLnRpbWVvdXRfbXVsdGlwbGllcgorCisgICAgICAgICAgICAjIE5vdyB3
YWl0IHRvIGdldCB0aGUgb3V0cHV0IHdlIGV4cGVjdCwgb3IgdW50aWwgd2UgcmVhY2ggdGhlIHRp
bWVvdXQKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmludGVyYWN0aXZlIGFuZCBub3Qgc2VsZi5w
YXVzZV9hZnRlcl90ZXN0OgorICAgICAgICAgICAgICAgIHdhaXRfdGltZW91dCA9IHRpbWVvdXQg
KyA1CisgICAgICAgICAgICAgICAgc2VsZi5yZXN1bHRfZmxhZy53YWl0KHdhaXRfdGltZW91dCkK
KyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgd2FpdF90aW1lb3V0ID0gTm9uZQor
ICAgICAgICAgICAgICAgIHNlbGYucHJvYy53YWl0KCkKKworICAgICAgICAgICAgcHJvY19pc19y
dW5uaW5nID0gVHJ1ZQorCisgICAgICAgICAgICBpZiBzZWxmLnJlc3VsdF9mbGFnLmlzX3NldCgp
OgorICAgICAgICAgICAgICAgIGlmIHNlbGYucmVzdWx0X2RhdGEgaXMgbm90IE5vbmU6CisgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuY29udmVydF9yZXN1bHQodGVzdCwgc2VsZi5y
ZXN1bHRfZGF0YSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBz
ZWxmLnByb2Mud2FpdCgpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICh0ZXN0LnJlc3Vs
dF9jbHMoIkNSQVNIIiwgTm9uZSksIFtdKQorICAgICAgICAgICAgICAgICAgICBwcm9jX2lzX3J1
bm5pbmcgPSBGYWxzZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXN1bHQg
PSAodGVzdC5yZXN1bHRfY2xzKCJUSU1FT1VUIiwgTm9uZSksIFtdKQorCisKKyAgICAgICAgICAg
IGlmIHByb2NfaXNfcnVubmluZzoKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnBhdXNlX2FmdGVy
X3Rlc3Q6CisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oIlBhdXNpbmcgdW50
aWwgdGhlIGJyb3dzZXIgZXhpdHMiKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnByb2Mud2Fp
dCgpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5wcm9j
LmtpbGwoKQorICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICBz
ZWxmLnByb2Mua2lsbCgpCisgICAgICAgICAgICByYWlzZQorCisgICAgICAgIHJldHVybiByZXN1
bHQKKworICAgIGRlZiBvbl9vdXRwdXQoc2VsZiwgbGluZSk6CisgICAgICAgIHByZWZpeCA9ICJB
TEVSVDogUkVTVUxUOiAiCisgICAgICAgIGxpbmUgPSBsaW5lLmRlY29kZSgidXRmOCIsICJyZXBs
YWNlIikKKyAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKHByZWZpeCk6CisgICAgICAgICAgICBz
ZWxmLnJlc3VsdF9kYXRhID0ganNvbi5sb2FkcyhsaW5lW2xlbihwcmVmaXgpOl0pCisgICAgICAg
ICAgICBzZWxmLnJlc3VsdF9mbGFnLnNldCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBp
ZiBzZWxmLmludGVyYWN0aXZlOgorICAgICAgICAgICAgICAgIHByaW50IGxpbmUKKyAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIucHJvY2Vzc19vdXRwdXQoc2Vs
Zi5wcm9jLnBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
aW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIi5qb2lu
KHNlbGYuY29tbWFuZCkpCisKKyAgICBkZWYgb25fZmluaXNoKHNlbGYpOgorICAgICAgICBzZWxm
LnJlc3VsdF9mbGFnLnNldCgpCisKKworY2xhc3MgVGVtcEZpbGVuYW1lKG9iamVjdCk6CisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIGRpcmVjdG9yeSk6CisgICAgICAgIHNlbGYuZGlyZWN0b3J5ID0g
ZGlyZWN0b3J5CisgICAgICAgIHNlbGYucGF0aCA9IE5vbmUKKworICAgIGRlZiBfX2VudGVyX18o
c2VsZik6CisgICAgICAgIHNlbGYucGF0aCA9IG9zLnBhdGguam9pbihzZWxmLmRpcmVjdG9yeSwg
c3RyKHV1aWQudXVpZDQoKSkpCisgICAgICAgIHJldHVybiBzZWxmLnBhdGgKKworICAgIGRlZiBf
X2V4aXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICB0cnk6CisgICAgICAgICAg
ICBvcy51bmxpbmsoc2VsZi5wYXRoKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAg
ICAgIHBhc3MKKworCitjbGFzcyBTZXJ2b1JlZlRlc3RFeGVjdXRvcihQcm9jZXNzVGVzdEV4ZWN1
dG9yKToKKyAgICBjb252ZXJ0X3Jlc3VsdCA9IHJlZnRlc3RfcmVzdWx0X2NvbnZlcnRlcgorCisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb3dzZXIsIHNlcnZlcl9jb25maWcsIGJpbmFyeT1Ob25l
LCB0aW1lb3V0X211bHRpcGxpZXI9MSwKKyAgICAgICAgICAgICAgICAgc2NyZWVuc2hvdF9jYWNo
ZT1Ob25lLCBkZWJ1Z19pbmZvPU5vbmUsIHBhdXNlX2FmdGVyX3Rlc3Q9RmFsc2UsCisgICAgICAg
ICAgICAgICAgICoqa3dhcmdzKToKKyAgICAgICAgZG9fZGVsYXllZF9pbXBvcnRzKCkKKyAgICAg
ICAgUHJvY2Vzc1Rlc3RFeGVjdXRvci5fX2luaXRfXyhzZWxmLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyb3dzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2VydmVyX2NvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0aW1lb3V0X211bHRpcGxpZXI9dGltZW91dF9tdWx0aXBsaWVyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX2luZm89ZGVidWdfaW5mbykKKworICAgICAg
ICBzZWxmLnByb3RvY29sID0gUHJvdG9jb2woc2VsZiwgYnJvd3NlcikKKyAgICAgICAgc2VsZi5z
Y3JlZW5zaG90X2NhY2hlID0gc2NyZWVuc2hvdF9jYWNoZQorICAgICAgICBzZWxmLmltcGxlbWVu
dGF0aW9uID0gUmVmVGVzdEltcGxlbWVudGF0aW9uKHNlbGYpCisgICAgICAgIHNlbGYudGVtcGRp
ciA9IHRlbXBmaWxlLm1rZHRlbXAoKQorICAgICAgICBzZWxmLmhvc3RzX3BhdGggPSBtYWtlX2hv
c3RzX2ZpbGUoKQorCisgICAgZGVmIHRlYXJkb3duKHNlbGYpOgorICAgICAgICB0cnk6CisgICAg
ICAgICAgICBvcy51bmxpbmsoc2VsZi5ob3N0c19wYXRoKQorICAgICAgICBleGNlcHQgT1NFcnJv
cjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgb3Mucm1kaXIoc2VsZi50ZW1wZGlyKQorICAg
ICAgICBQcm9jZXNzVGVzdEV4ZWN1dG9yLnRlYXJkb3duKHNlbGYpCisKKyAgICBkZWYgc2NyZWVu
c2hvdChzZWxmLCB0ZXN0LCB2aWV3cG9ydF9zaXplLCBkcGkpOgorICAgICAgICBmdWxsX3VybCA9
IHNlbGYudGVzdF91cmwodGVzdCkKKworICAgICAgICB3aXRoIFRlbXBGaWxlbmFtZShzZWxmLnRl
bXBkaXIpIGFzIG91dHB1dF9wYXRoOgorICAgICAgICAgICAgZGVidWdfYXJncywgY29tbWFuZCA9
IGJyb3dzZXJfY29tbWFuZCgKKyAgICAgICAgICAgICAgICBzZWxmLmJpbmFyeSwKKyAgICAgICAg
ICAgICAgICBbCisgICAgICAgICAgICAgICAgICAgICItLWhhcmQtZmFpbCIsICItLWV4aXQiLAor
ICAgICAgICAgICAgICAgICAgICAiLXUiLCAiU2Vydm8vd3B0cnVubmVyIiwKKyAgICAgICAgICAg
ICAgICAgICAgIi1aIiwgImRpc2FibGUtdGV4dC1hYSxsb2FkLXdlYmZvbnRzLXN5bmNocm9ub3Vz
bHkscmVwbGFjZS1zdXJyb2dhdGVzIiwKKyAgICAgICAgICAgICAgICAgICAgIi0tb3V0cHV0PSVz
IiAlIG91dHB1dF9wYXRoLCBmdWxsX3VybAorICAgICAgICAgICAgICAgIF0gKyBzZWxmLmJyb3dz
ZXIuYmluYXJ5X2FyZ3MsCisgICAgICAgICAgICAgICAgc2VsZi5kZWJ1Z19pbmZvKQorCisgICAg
ICAgICAgICBmb3Igc3R5bGVzaGVldCBpbiBzZWxmLmJyb3dzZXIudXNlcl9zdHlsZXNoZWV0czoK
KyAgICAgICAgICAgICAgICBjb21tYW5kICs9IFsiLS11c2VyLXN0eWxlc2hlZXQiLCBzdHlsZXNo
ZWV0XQorCisgICAgICAgICAgICBmb3IgcHJlZiwgdmFsdWUgaW4gdGVzdC5lbnZpcm9ubWVudC5n
ZXQoJ3ByZWZzJywge30pLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgIGNvbW1hbmQgKz0g
WyItLXByZWYiLCAiJXM9JXMiICUgKHByZWYsIHZhbHVlKV0KKworICAgICAgICAgICAgY29tbWFu
ZCArPSBbIi0tcmVzb2x1dGlvbiIsIHZpZXdwb3J0X3NpemUgb3IgIjgwMHg2MDAiXQorCisgICAg
ICAgICAgICBpZiBzZWxmLmJyb3dzZXIuY2FfY2VydGlmaWNhdGVfcGF0aDoKKyAgICAgICAgICAg
ICAgICBjb21tYW5kICs9IFsiLS1jZXJ0aWZpY2F0ZS1wYXRoIiwgc2VsZi5icm93c2VyLmNhX2Nl
cnRpZmljYXRlX3BhdGhdCisKKyAgICAgICAgICAgIGlmIGRwaToKKyAgICAgICAgICAgICAgICBj
b21tYW5kICs9IFsiLS1kZXZpY2UtcGl4ZWwtcmF0aW8iLCBkcGldCisKKyAgICAgICAgICAgICMg
UnVuIHJlZiB0ZXN0cyBpbiBoZWFkbGVzcyBtb2RlCisgICAgICAgICAgICBjb21tYW5kICs9IFsi
LXoiXQorCisgICAgICAgICAgICBzZWxmLmNvbW1hbmQgPSBkZWJ1Z19hcmdzICsgY29tbWFuZAor
CisgICAgICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICAgICAgZW52WyJI
T1NUX0ZJTEUiXSA9IHNlbGYuaG9zdHNfcGF0aAorICAgICAgICAgICAgZW52WyJSVVNUX0JBQ0tU
UkFDRSJdID0gIjEiCisKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmludGVyYWN0aXZlOgorICAg
ICAgICAgICAgICAgIHNlbGYucHJvYyA9IFByb2Nlc3NIYW5kbGVyKHNlbGYuY29tbWFuZCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzT3V0cHV0TGlu
ZT1bc2VsZi5vbl9vdXRwdXRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVudj1lbnYpCisKKworICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAg
ICAgICAgc2VsZi5wcm9jLnJ1bigpCisgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSB0ZXN0
LnRpbWVvdXQgKiBzZWxmLnRpbWVvdXRfbXVsdGlwbGllciArIDUKKyAgICAgICAgICAgICAgICAg
ICAgcnYgPSBzZWxmLnByb2Mud2FpdCh0aW1lb3V0PXRpbWVvdXQpCisgICAgICAgICAgICAgICAg
ZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgICAgICAgICBzZWxmLnByb2Mu
a2lsbCgpCisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgICAgIHNlbGYucHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oc2VsZi5jb21tYW5kLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52PWVudikKKyAg
ICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHJ2ID0gc2VsZi5wcm9jLndh
aXQoKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAg
ICAgICAgICAgICAgc2VsZi5wcm9jLmtpbGwoKQorICAgICAgICAgICAgICAgICAgICByYWlzZQor
CisgICAgICAgICAgICBpZiBydiBpcyBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYucHJvYy5r
aWxsKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UsICgiRVhURVJOQUwtVElNRU9VVCIs
IE5vbmUpCisKKyAgICAgICAgICAgIGlmIHJ2ICE9IDAgb3Igbm90IG9zLnBhdGguZXhpc3RzKG91
dHB1dF9wYXRoKToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UsICgiQ1JBU0giLCBOb25l
KQorCisgICAgICAgICAgICB3aXRoIG9wZW4ob3V0cHV0X3BhdGgpIGFzIGY6CisgICAgICAgICAg
ICAgICAgIyBNaWdodCBuZWVkIHRvIHN0cmlwIHZhcmlhYmxlIGhlYWRlcnMgb3Igc29tZXRoaW5n
IGhlcmUKKyAgICAgICAgICAgICAgICBkYXRhID0gZi5yZWFkKCkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gVHJ1ZSwgYmFzZTY0LmI2NGVuY29kZShkYXRhKQorCisgICAgZGVmIGRvX3Rlc3Qoc2Vs
ZiwgdGVzdCk6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuaW1wbGVtZW50YXRpb24ucnVuX3Rlc3Qo
dGVzdCkKKworICAgICAgICByZXR1cm4gc2VsZi5jb252ZXJ0X3Jlc3VsdCh0ZXN0LCByZXN1bHQp
CisKKyAgICBkZWYgb25fb3V0cHV0KHNlbGYsIGxpbmUpOgorICAgICAgICBsaW5lID0gbGluZS5k
ZWNvZGUoInV0ZjgiLCAicmVwbGFjZSIpCisgICAgICAgIGlmIHNlbGYuaW50ZXJhY3RpdmU6Cisg
ICAgICAgICAgICBwcmludCBsaW5lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmxv
Z2dlci5wcm9jZXNzX291dHB1dChzZWxmLnByb2MucGlkLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICIgIi5qb2luKHNlbGYuY29tbWFuZCkpCisKK2NsYXNzIFNlcnZvV2RzcGVjUHJvdG9j
b2woUHJvdG9jb2wpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleGVjdXRvciwgYnJvd3Nlcik6
CisgICAgICAgIHNlbGYuZG9fZGVsYXllZF9pbXBvcnRzKCkKKyAgICAgICAgUHJvdG9jb2wuX19p
bml0X18oc2VsZiwgZXhlY3V0b3IsIGJyb3dzZXIpCisgICAgICAgIHNlbGYuc2Vzc2lvbiA9IE5v
bmUKKyAgICAgICAgc2VsZi5zZXJ2ZXIgPSBOb25lCisKKyAgICBkZWYgc2V0dXAoc2VsZiwgcnVu
bmVyKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5zZXJ2ZXIgPSBTZXJ2b0RyaXZl
clNlcnZlcihzZWxmLmxvZ2dlciwgYmluYXJ5PXNlbGYuYnJvd3Nlci5iaW5hcnksIGJpbmFyeV9h
cmdzPXNlbGYuYnJvd3Nlci5iaW5hcnlfYXJncykKKyAgICAgICAgICAgIHNlbGYuc2VydmVyLnN0
YXJ0KGJsb2NrPUZhbHNlKQorICAgICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygKKyAgICAgICAg
ICAgICAgICAiV2ViRHJpdmVyIEhUVFAgc2VydmVyIGxpc3RlbmluZyBhdCAlcyIgJSBzZWxmLnNl
cnZlci51cmwpCisKKyAgICAgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oCisgICAgICAgICAgICAg
ICAgIkVzdGFibGlzaGluZyBuZXcgV2ViRHJpdmVyIHNlc3Npb24gd2l0aCAlcyIgJSBzZWxmLnNl
cnZlci51cmwpCisgICAgICAgICAgICBzZWxmLnNlc3Npb24gPSB3ZWJkcml2ZXIuU2Vzc2lvbigK
KyAgICAgICAgICAgICAgICBzZWxmLnNlcnZlci5ob3N0LCBzZWxmLnNlcnZlci5wb3J0LCBzZWxm
LnNlcnZlci5iYXNlX3BhdGgpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAg
ICBzZWxmLmxvZ2dlci5lcnJvcih0cmFjZWJhY2suZm9ybWF0X2V4YygpKQorICAgICAgICAgICAg
c2VsZi5leGVjdXRvci5ydW5uZXIuc2VuZF9tZXNzYWdlKCJpbml0X2ZhaWxlZCIpCisgICAgICAg
IGVsc2U6CisgICAgICAgICAgICBzZWxmLmV4ZWN1dG9yLnJ1bm5lci5zZW5kX21lc3NhZ2UoImlu
aXRfc3VjY2VlZGVkIikKKworICAgIGRlZiB0ZWFyZG93bihzZWxmKToKKyAgICAgICAgaWYgc2Vs
Zi5zZXJ2ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAg
aWYgc2VsZi5zZXNzaW9uLnNlc3Npb25faWQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAg
ICAgIHNlbGYuc2Vzc2lvbi5lbmQoKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAg
ICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBpZiBzZWxmLnNlcnZlci5pc19hbGl2ZToK
KyAgICAgICAgICAgICAgICBzZWxmLnNlcnZlci5zdG9wKCkKKworICAgIEBwcm9wZXJ0eQorICAg
IGRlZiBpc19hbGl2ZShzZWxmKToKKyAgICAgICAgY29ubiA9IGh0dHBsaWIuSFRUUENvbm5lY3Rp
b24oc2VsZi5zZXJ2ZXIuaG9zdCwgc2VsZi5zZXJ2ZXIucG9ydCkKKyAgICAgICAgY29ubi5yZXF1
ZXN0KCJIRUFEIiwgc2VsZi5zZXJ2ZXIuYmFzZV9wYXRoICsgImludmFsaWQiKQorICAgICAgICBy
ZXMgPSBjb25uLmdldHJlc3BvbnNlKCkKKyAgICAgICAgcmV0dXJuIHJlcy5zdGF0dXMgPT0gNDA0
CisKKyAgICBkZWYgZG9fZGVsYXllZF9pbXBvcnRzKHNlbGYpOgorICAgICAgICBnbG9iYWwgcHl0
ZXN0cnVubmVyLCB3ZWJkcml2ZXIKKyAgICAgICAgZnJvbSAuIGltcG9ydCBweXRlc3RydW5uZXIK
KyAgICAgICAgaW1wb3J0IHdlYmRyaXZlcgorCisKK2NsYXNzIFNlcnZvV2RzcGVjRXhlY3V0b3Io
V2RzcGVjRXhlY3V0b3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm93c2VyLCBzZXJ2ZXJf
Y29uZmlnLAorICAgICAgICAgICAgICAgICB0aW1lb3V0X211bHRpcGxpZXI9MSwgY2xvc2VfYWZ0
ZXJfZG9uZT1UcnVlLCBkZWJ1Z19pbmZvPU5vbmUsCisgICAgICAgICAgICAgICAgICoqa3dhcmdz
KToKKyAgICAgICAgV2RzcGVjRXhlY3V0b3IuX19pbml0X18oc2VsZiwgYnJvd3Nlciwgc2VydmVy
X2NvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dF9tdWx0aXBs
aWVyPXRpbWVvdXRfbXVsdGlwbGllciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVidWdfaW5mbz1kZWJ1Z19pbmZvKQorICAgICAgICBzZWxmLnByb3RvY29sID0gU2Vydm9XZHNw
ZWNQcm90b2NvbChzZWxmLCBicm93c2VyKQorCisgICAgZGVmIGlzX2FsaXZlKHNlbGYpOgorICAg
ICAgICByZXR1cm4gc2VsZi5wcm90b2NvbC5pc19hbGl2ZQorCisgICAgZGVmIG9uX2Vudmlyb25t
ZW50X2NoYW5nZShzZWxmLCBuZXdfZW52aXJvbm1lbnQpOgorICAgICAgICBwYXNzCisKKyAgICBk
ZWYgZG9fdGVzdChzZWxmLCB0ZXN0KToKKyAgICAgICAgdGltZW91dCA9IHRlc3QudGltZW91dCAq
IHNlbGYudGltZW91dF9tdWx0aXBsaWVyICsgZXh0cmFfdGltZW91dAorCisgICAgICAgIHN1Y2Nl
c3MsIGRhdGEgPSBXZHNwZWNSdW4oc2VsZi5kb193ZHNwZWMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZi5wcm90b2NvbC5zZXNzaW9uLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRlc3QucGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0aW1lb3V0KS5ydW4oKQorCisgICAgICAgIGlmIHN1Y2Nlc3M6CisgICAgICAgICAgICBy
ZXR1cm4gc2VsZi5jb252ZXJ0X3Jlc3VsdCh0ZXN0LCBkYXRhKQorCisgICAgICAgIHJldHVybiAo
dGVzdC5yZXN1bHRfY2xzKCpkYXRhKSwgW10pCisKKyAgICBkZWYgZG9fd2RzcGVjKHNlbGYsIHNl
c3Npb24sIHBhdGgsIHRpbWVvdXQpOgorICAgICAgICBoYXJuZXNzX3Jlc3VsdCA9ICgiT0siLCBO
b25lKQorICAgICAgICBzdWJ0ZXN0X3Jlc3VsdHMgPSBweXRlc3RydW5uZXIucnVuKHBhdGgsIHNl
c3Npb24sIHRpbWVvdXQ9dGltZW91dCkKKyAgICAgICAgcmV0dXJuIChoYXJuZXNzX3Jlc3VsdCwg
c3VidGVzdF9yZXN1bHRzKQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNj
L3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvZXhlY3V0b3JzL2V4ZWN1dG9yc2Vydm9kcml2ZXIu
cHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5l
ci9leGVjdXRvcnMvZXhlY3V0b3JzZXJ2b2RyaXZlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uYWYwOWRhNmYxNzgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2
ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9leGVjdXRvcnMv
ZXhlY3V0b3JzZXJ2b2RyaXZlci5weQpAQCAtMCwwICsxLDI1OSBAQAoraW1wb3J0IGpzb24KK2lt
cG9ydCBvcworaW1wb3J0IHNvY2tldAoraW1wb3J0IHRocmVhZGluZworaW1wb3J0IHRpbWUKK2lt
cG9ydCB0cmFjZWJhY2sKKworZnJvbSAuYmFzZSBpbXBvcnQgKFByb3RvY29sLAorICAgICAgICAg
ICAgICAgICAgIFJlZlRlc3RFeGVjdXRvciwKKyAgICAgICAgICAgICAgICAgICBSZWZUZXN0SW1w
bGVtZW50YXRpb24sCisgICAgICAgICAgICAgICAgICAgVGVzdGhhcm5lc3NFeGVjdXRvciwKKyAg
ICAgICAgICAgICAgICAgICBzdHJpcF9zZXJ2ZXIpCitmcm9tIC4udGVzdHJ1bm5lciBpbXBvcnQg
U3RvcAorCit3ZWJkcml2ZXIgPSBOb25lCisKK2hlcmUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5z
cGxpdChfX2ZpbGVfXylbMF0pCisKK2V4dHJhX3RpbWVvdXQgPSA1CisKKworZGVmIGRvX2RlbGF5
ZWRfaW1wb3J0cygpOgorICAgIGdsb2JhbCB3ZWJkcml2ZXIKKyAgICBpbXBvcnQgd2ViZHJpdmVy
CisKKworY2xhc3MgU2Vydm9XZWJEcml2ZXJQcm90b2NvbChQcm90b2NvbCk6CisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIGV4ZWN1dG9yLCBicm93c2VyLCBjYXBhYmlsaXRpZXMsICoqa3dhcmdzKToK
KyAgICAgICAgZG9fZGVsYXllZF9pbXBvcnRzKCkKKyAgICAgICAgUHJvdG9jb2wuX19pbml0X18o
c2VsZiwgZXhlY3V0b3IsIGJyb3dzZXIpCisgICAgICAgIHNlbGYuY2FwYWJpbGl0aWVzID0gY2Fw
YWJpbGl0aWVzCisgICAgICAgIHNlbGYuaG9zdCA9IGJyb3dzZXIud2ViZHJpdmVyX2hvc3QKKyAg
ICAgICAgc2VsZi5wb3J0ID0gYnJvd3Nlci53ZWJkcml2ZXJfcG9ydAorICAgICAgICBzZWxmLnNl
c3Npb24gPSBOb25lCisKKyAgICBkZWYgc2V0dXAoc2VsZiwgcnVubmVyKToKKyAgICAgICAgIiIi
Q29ubmVjdCB0byBicm93c2VyIHZpYSBXZWJEcml2ZXIuIiIiCisgICAgICAgIHNlbGYucnVubmVy
ID0gcnVubmVyCisKKyAgICAgICAgdXJsID0gImh0dHA6Ly8lczolZCIgJSAoc2VsZi5ob3N0LCBz
ZWxmLnBvcnQpCisgICAgICAgIHNlc3Npb25fc3RhcnRlZCA9IEZhbHNlCisgICAgICAgIHRyeToK
KyAgICAgICAgICAgIHNlbGYuc2Vzc2lvbiA9IHdlYmRyaXZlci5TZXNzaW9uKHNlbGYuaG9zdCwg
c2VsZi5wb3J0LAorICAgICAgICAgICAgICAgIGV4dGVuc2lvbj13ZWJkcml2ZXIuc2Vydm8uU2Vy
dm9Db21tYW5kRXh0ZW5zaW9ucykKKyAgICAgICAgICAgIHNlbGYuc2Vzc2lvbi5zdGFydCgpCisg
ICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYubG9nZ2VyLndhcm5pbmcoCisgICAgICAg
ICAgICAgICAgIkNvbm5lY3Rpbmcgd2l0aCBXZWJEcml2ZXIgZmFpbGVkOlxuJXMiICUgdHJhY2Vi
YWNrLmZvcm1hdF9leGMoKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYubG9nZ2Vy
LmRlYnVnKCJzZXNzaW9uIHN0YXJ0ZWQiKQorICAgICAgICAgICAgc2Vzc2lvbl9zdGFydGVkID0g
VHJ1ZQorCisgICAgICAgIGlmIG5vdCBzZXNzaW9uX3N0YXJ0ZWQ6CisgICAgICAgICAgICBzZWxm
LmxvZ2dlci53YXJuaW5nKCJGYWlsZWQgdG8gY29ubmVjdCB2aWEgV2ViRHJpdmVyIikKKyAgICAg
ICAgICAgIHNlbGYuZXhlY3V0b3IucnVubmVyLnNlbmRfbWVzc2FnZSgiaW5pdF9mYWlsZWQiKQor
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5leGVjdXRvci5ydW5uZXIuc2VuZF9tZXNz
YWdlKCJpbml0X3N1Y2NlZWRlZCIpCisKKyAgICBkZWYgdGVhcmRvd24oc2VsZik6CisgICAgICAg
IHNlbGYubG9nZ2VyLmRlYnVnKCJIYW5naW5nIHVwIG9uIFdlYkRyaXZlciBzZXNzaW9uIikKKyAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5zZXNzaW9uLmVuZCgpCisgICAgICAgIGV4Y2Vw
dDoKKyAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiBpc19hbGl2ZShzZWxmKToKKyAgICAgICAg
dHJ5OgorICAgICAgICAgICAgIyBHZXQgYSBzaW1wbGUgcHJvcGVydHkgb3ZlciB0aGUgY29ubmVj
dGlvbgorICAgICAgICAgICAgc2VsZi5zZXNzaW9uLndpbmRvd19oYW5kbGUKKyAgICAgICAgIyBU
T0RPIHdoYXQgZXhjZXB0aW9uPworICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAg
ICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgYWZ0ZXJfY29u
bmVjdChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHdhaXQoc2VsZik6CisgICAgICAg
IHdoaWxlIFRydWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5zZXNz
aW9uLmV4ZWN1dGVfYXN5bmNfc2NyaXB0KCIiKQorICAgICAgICAgICAgZXhjZXB0IHdlYmRyaXZl
ci5UaW1lb3V0RXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGV4
Y2VwdCAoc29ja2V0LnRpbWVvdXQsIElPRXJyb3IpOgorICAgICAgICAgICAgICAgIGJyZWFrCisg
ICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgc2VsZi5s
b2dnZXIuZXJyb3IodHJhY2ViYWNrLmZvcm1hdF9leGMoZSkpCisgICAgICAgICAgICAgICAgYnJl
YWsKKworICAgIGRlZiBvbl9lbnZpcm9ubWVudF9jaGFuZ2Uoc2VsZiwgb2xkX2Vudmlyb25tZW50
LCBuZXdfZW52aXJvbm1lbnQpOgorICAgICAgICAjVW5zZXQgYWxsIHRoZSBvbGQgcHJlZnMKKyAg
ICAgICAgc2VsZi5zZXNzaW9uLmV4dGVuc2lvbi5yZXNldF9wcmVmcygqb2xkX2Vudmlyb25tZW50
LmdldCgicHJlZnMiLCB7fSkua2V5cygpKQorICAgICAgICBzZWxmLnNlc3Npb24uZXh0ZW5zaW9u
LnNldF9wcmVmcyhuZXdfZW52aXJvbm1lbnQuZ2V0KCJwcmVmcyIsIHt9KSkKKworCitjbGFzcyBT
ZXJ2b1dlYkRyaXZlclJ1bihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmdW5jLCBz
ZXNzaW9uLCB1cmwsIHRpbWVvdXQsIGN1cnJlbnRfdGltZW91dD1Ob25lKToKKyAgICAgICAgc2Vs
Zi5mdW5jID0gZnVuYworICAgICAgICBzZWxmLnJlc3VsdCA9IE5vbmUKKyAgICAgICAgc2VsZi5z
ZXNzaW9uID0gc2Vzc2lvbgorICAgICAgICBzZWxmLnVybCA9IHVybAorICAgICAgICBzZWxmLnRp
bWVvdXQgPSB0aW1lb3V0CisgICAgICAgIHNlbGYucmVzdWx0X2ZsYWcgPSB0aHJlYWRpbmcuRXZl
bnQoKQorCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgZXhlY3V0b3IgPSB0aHJlYWRpbmcu
VGhyZWFkKHRhcmdldD1zZWxmLl9ydW4pCisgICAgICAgIGV4ZWN1dG9yLnN0YXJ0KCkKKworICAg
ICAgICBmbGFnID0gc2VsZi5yZXN1bHRfZmxhZy53YWl0KHNlbGYudGltZW91dCArIGV4dHJhX3Rp
bWVvdXQpCisgICAgICAgIGlmIHNlbGYucmVzdWx0IGlzIE5vbmU6CisgICAgICAgICAgICBhc3Nl
cnQgbm90IGZsYWcKKyAgICAgICAgICAgIHNlbGYucmVzdWx0ID0gRmFsc2UsICgiRVhURVJOQUwt
VElNRU9VVCIsIE5vbmUpCisKKyAgICAgICAgcmV0dXJuIHNlbGYucmVzdWx0CisKKyAgICBkZWYg
X3J1bihzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSBUcnVl
LCBzZWxmLmZ1bmMoc2VsZi5zZXNzaW9uLCBzZWxmLnVybCwgc2VsZi50aW1lb3V0KQorICAgICAg
ICBleGNlcHQgd2ViZHJpdmVyLlRpbWVvdXRFeGNlcHRpb246CisgICAgICAgICAgICBzZWxmLnJl
c3VsdCA9IEZhbHNlLCAoIkVYVEVSTkFMLVRJTUVPVVQiLCBOb25lKQorICAgICAgICBleGNlcHQg
KHNvY2tldC50aW1lb3V0LCBJT0Vycm9yKToKKyAgICAgICAgICAgIHNlbGYucmVzdWx0ID0gRmFs
c2UsICgiQ1JBU0giLCBOb25lKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAg
ICAgICAgICBtZXNzYWdlID0gZ2V0YXR0cihlLCAibWVzc2FnZSIsICIiKQorICAgICAgICAgICAg
aWYgbWVzc2FnZToKKyAgICAgICAgICAgICAgICBtZXNzYWdlICs9ICJcbiIKKyAgICAgICAgICAg
IG1lc3NhZ2UgKz0gdHJhY2ViYWNrLmZvcm1hdF9leGMoZSkKKyAgICAgICAgICAgIHNlbGYucmVz
dWx0ID0gRmFsc2UsICgiRVJST1IiLCBlKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAg
c2VsZi5yZXN1bHRfZmxhZy5zZXQoKQorCisKK2RlZiB0aW1lb3V0X2Z1bmModGltZW91dCk6Cisg
ICAgaWYgdGltZW91dDoKKyAgICAgICAgdDAgPSB0aW1lLnRpbWUoKQorICAgICAgICByZXR1cm4g
bGFtYmRhOiB0aW1lLnRpbWUoKSAtIHQwID4gdGltZW91dCArIGV4dHJhX3RpbWVvdXQKKyAgICBl
bHNlOgorICAgICAgICByZXR1cm4gbGFtYmRhOiBGYWxzZQorCisKK2NsYXNzIFNlcnZvV2ViRHJp
dmVyVGVzdGhhcm5lc3NFeGVjdXRvcihUZXN0aGFybmVzc0V4ZWN1dG9yKToKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgYnJvd3Nlciwgc2VydmVyX2NvbmZpZywgdGltZW91dF9tdWx0aXBsaWVyPTEs
CisgICAgICAgICAgICAgICAgIGNsb3NlX2FmdGVyX2RvbmU9VHJ1ZSwgY2FwYWJpbGl0aWVzPU5v
bmUsIGRlYnVnX2luZm89Tm9uZSwKKyAgICAgICAgICAgICAgICAgKiprd2FyZ3MpOgorICAgICAg
ICBUZXN0aGFybmVzc0V4ZWN1dG9yLl9faW5pdF9fKHNlbGYsIGJyb3dzZXIsIHNlcnZlcl9jb25m
aWcsIHRpbWVvdXRfbXVsdGlwbGllcj0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlYnVnX2luZm89Tm9uZSkKKyAgICAgICAgc2VsZi5wcm90b2NvbCA9IFNlcnZvV2Vi
RHJpdmVyUHJvdG9jb2woc2VsZiwgYnJvd3NlciwgY2FwYWJpbGl0aWVzPWNhcGFiaWxpdGllcykK
KyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihoZXJlLCAidGVzdGhhcm5lc3Nfc2Vydm9k
cml2ZXIuanMiKSkgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuc2NyaXB0ID0gZi5yZWFkKCkKKyAg
ICAgICAgc2VsZi50aW1lb3V0ID0gTm9uZQorCisgICAgZGVmIG9uX3Byb3RvY29sX2NoYW5nZShz
ZWxmLCBuZXdfcHJvdG9jb2wpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgaXNfYWxpdmUoc2Vs
Zik6CisgICAgICAgIHJldHVybiBzZWxmLnByb3RvY29sLmlzX2FsaXZlKCkKKworICAgIGRlZiBk
b190ZXN0KHNlbGYsIHRlc3QpOgorICAgICAgICB1cmwgPSBzZWxmLnRlc3RfdXJsKHRlc3QpCisK
KyAgICAgICAgdGltZW91dCA9IHRlc3QudGltZW91dCAqIHNlbGYudGltZW91dF9tdWx0aXBsaWVy
ICsgZXh0cmFfdGltZW91dAorCisgICAgICAgIGlmIHRpbWVvdXQgIT0gc2VsZi50aW1lb3V0Ogor
ICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYucHJvdG9jb2wuc2Vzc2lvbi50
aW1lb3V0cy5zY3JpcHQgPSB0aW1lb3V0CisgICAgICAgICAgICAgICAgc2VsZi50aW1lb3V0ID0g
dGltZW91dAorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgc2Vs
Zi5sb2dnZXIuZXJyb3IoIkxvc3Qgd2ViZHJpdmVyIGNvbm5lY3Rpb24iKQorICAgICAgICAgICAg
ICAgIHJldHVybiBTdG9wCisKKyAgICAgICAgc3VjY2VzcywgZGF0YSA9IFNlcnZvV2ViRHJpdmVy
UnVuKHNlbGYuZG9fdGVzdGhhcm5lc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxmLnByb3RvY29sLnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1cmwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0aW1lb3V0KS5ydW4oKQorCisgICAgICAgIGlmIHN1Y2Nlc3M6CisgICAgICAg
ICAgICByZXR1cm4gc2VsZi5jb252ZXJ0X3Jlc3VsdCh0ZXN0LCBkYXRhKQorCisgICAgICAgIHJl
dHVybiAodGVzdC5yZXN1bHRfY2xzKCpkYXRhKSwgW10pCisKKyAgICBkZWYgZG9fdGVzdGhhcm5l
c3Moc2VsZiwgc2Vzc2lvbiwgdXJsLCB0aW1lb3V0KToKKyAgICAgICAgc2Vzc2lvbi51cmwgPSB1
cmwKKyAgICAgICAgcmVzdWx0ID0ganNvbi5sb2FkcygKKyAgICAgICAgICAgIHNlc3Npb24uZXhl
Y3V0ZV9hc3luY19zY3JpcHQoCisgICAgICAgICAgICAgICAgc2VsZi5zY3JpcHQgJSB7ImFic191
cmwiOiB1cmwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVybCI6IHN0cmlwX3Nl
cnZlcih1cmwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aW1lb3V0X211bHRp
cGxpZXIiOiBzZWxmLnRpbWVvdXRfbXVsdGlwbGllciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAidGltZW91dCI6IHRpbWVvdXQgKiAxMDAwfSkpCisgICAgICAgICMgUHJldmVudCBs
ZWFraW5nIGV2ZXJ5IHBhZ2UgaW4gaGlzdG9yeSB1bnRpbCBTZXJ2byBkZXZlbG9wcyBhIG1vcmUg
c2FuZQorICAgICAgICAjIHBhZ2UgY2FjaGUKKyAgICAgICAgc2Vzc2lvbi5iYWNrKCkKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdAorCisKK2NsYXNzIFRpbWVvdXRFcnJvcihFeGNlcHRpb24pOgorICAg
IHBhc3MKKworCitjbGFzcyBTZXJ2b1dlYkRyaXZlclJlZlRlc3RFeGVjdXRvcihSZWZUZXN0RXhl
Y3V0b3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm93c2VyLCBzZXJ2ZXJfY29uZmlnLCB0
aW1lb3V0X211bHRpcGxpZXI9MSwKKyAgICAgICAgICAgICAgICAgc2NyZWVuc2hvdF9jYWNoZT1O
b25lLCBjYXBhYmlsaXRpZXM9Tm9uZSwgZGVidWdfaW5mbz1Ob25lLAorICAgICAgICAgICAgICAg
ICAqKmt3YXJncyk6CisgICAgICAgICIiIlNlbGVuaXVtIFdlYkRyaXZlci1iYXNlZCBleGVjdXRv
ciBmb3IgcmVmdGVzdHMiIiIKKyAgICAgICAgUmVmVGVzdEV4ZWN1dG9yLl9faW5pdF9fKHNlbGYs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicm93c2VyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2NvbmZpZywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNjcmVlbnNob3RfY2FjaGU9c2NyZWVuc2hvdF9jYWNoZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXRfbXVsdGlwbGllcj10aW1lb3V0X211bHRp
cGxpZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19pbmZvPWRlYnVn
X2luZm8pCisgICAgICAgIHNlbGYucHJvdG9jb2wgPSBTZXJ2b1dlYkRyaXZlclByb3RvY29sKHNl
bGYsIGJyb3dzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNhcGFiaWxpdGllcz1jYXBhYmlsaXRpZXMpCisgICAgICAgIHNlbGYuaW1wbGVtZW50YXRp
b24gPSBSZWZUZXN0SW1wbGVtZW50YXRpb24oc2VsZikKKyAgICAgICAgc2VsZi50aW1lb3V0ID0g
Tm9uZQorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKGhlcmUsICJyZWZ0ZXN0LXdhaXRf
d2ViZHJpdmVyLmpzIikpIGFzIGY6CisgICAgICAgICAgICBzZWxmLndhaXRfc2NyaXB0ID0gZi5y
ZWFkKCkKKworICAgIGRlZiBpc19hbGl2ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYucHJv
dG9jb2wuaXNfYWxpdmUoKQorCisgICAgZGVmIGRvX3Rlc3Qoc2VsZiwgdGVzdCk6CisgICAgICAg
IHRyeToKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuaW1wbGVtZW50YXRpb24ucnVuX3Rlc3Qo
dGVzdCkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmNvbnZlcnRfcmVzdWx0KHRlc3QsIHJlc3Vs
dCkKKyAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gdGVzdC5yZXN1
bHRfY2xzKCJDUkFTSCIsIE5vbmUpLCBbXQorICAgICAgICBleGNlcHQgVGltZW91dEVycm9yOgor
ICAgICAgICAgICAgcmV0dXJuIHRlc3QucmVzdWx0X2NscygiVElNRU9VVCIsIE5vbmUpLCBbXQor
ICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBtZXNzYWdlID0gZ2V0
YXR0cihlLCAibWVzc2FnZSIsICIiKQorICAgICAgICAgICAgaWYgbWVzc2FnZToKKyAgICAgICAg
ICAgICAgICBtZXNzYWdlICs9ICJcbiIKKyAgICAgICAgICAgIG1lc3NhZ2UgKz0gdHJhY2ViYWNr
LmZvcm1hdF9leGMoZSkKKyAgICAgICAgICAgIHJldHVybiB0ZXN0LnJlc3VsdF9jbHMoIkVSUk9S
IiwgbWVzc2FnZSksIFtdCisKKyAgICBkZWYgc2NyZWVuc2hvdChzZWxmLCB0ZXN0LCB2aWV3cG9y
dF9zaXplLCBkcGkpOgorICAgICAgICAjIGh0dHBzOi8vZ2l0aHViLmNvbS93M2Mvd3B0cnVubmVy
L2lzc3Vlcy8xNjYKKyAgICAgICAgYXNzZXJ0IHZpZXdwb3J0X3NpemUgaXMgTm9uZQorICAgICAg
ICBhc3NlcnQgZHBpIGlzIE5vbmUKKworICAgICAgICB0aW1lb3V0ID0gKHRlc3QudGltZW91dCAq
IHNlbGYudGltZW91dF9tdWx0aXBsaWVyICsgZXh0cmFfdGltZW91dAorICAgICAgICAgICAgICAg
ICAgIGlmIHNlbGYuZGVidWdfaW5mbyBpcyBOb25lIGVsc2UgTm9uZSkKKworICAgICAgICBpZiBz
ZWxmLnRpbWVvdXQgIT0gdGltZW91dDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAg
ICBzZWxmLnByb3RvY29sLnNlc3Npb24udGltZW91dHMuc2NyaXB0ID0gdGltZW91dAorICAgICAg
ICAgICAgICAgIHNlbGYudGltZW91dCA9IHRpbWVvdXQKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vy
cm9yOgorICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLmVycm9yKCJMb3N0IHdlYmRyaXZlciBj
b25uZWN0aW9uIikKKyAgICAgICAgICAgICAgICByZXR1cm4gU3RvcAorCisgICAgICAgIHJldHVy
biBTZXJ2b1dlYkRyaXZlclJ1bihzZWxmLl9zY3JlZW5zaG90LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZi5wcm90b2NvbC5zZXNzaW9uLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZi50ZXN0X3VybCh0ZXN0KSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRpbWVvdXQpLnJ1bigpCisKKyAgICBkZWYgX3NjcmVlbnNob3Qoc2VsZiwg
c2Vzc2lvbiwgdXJsLCB0aW1lb3V0KToKKyAgICAgICAgc2Vzc2lvbi51cmwgPSB1cmwKKyAgICAg
ICAgc2Vzc2lvbi5leGVjdXRlX2FzeW5jX3NjcmlwdChzZWxmLndhaXRfc2NyaXB0KQorICAgICAg
ICByZXR1cm4gc2Vzc2lvbi5zY3JlZW5zaG90KCkKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3Rz
L2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2V4ZWN1dG9ycy9wcm9jZXNz
LnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5u
ZXIvZXhlY3V0b3JzL3Byb2Nlc3MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLmZiOGMxN2E5NmJhCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1w
b3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvZXhlY3V0b3JzL3Byb2Nlc3MucHkK
QEAgLTAsMCArMSwyMCBAQAorZnJvbSAuYmFzZSBpbXBvcnQgVGVzdEV4ZWN1dG9yCisKKworY2xh
c3MgUHJvY2Vzc1Rlc3RFeGVjdXRvcihUZXN0RXhlY3V0b3IpOgorICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBUZXN0RXhlY3V0b3IuX19pbml0X18oc2Vs
ZiwgKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBzZWxmLmJpbmFyeSA9IHNlbGYuYnJvd3Nlci5i
aW5hcnkKKyAgICAgICAgc2VsZi5pbnRlcmFjdGl2ZSA9IChGYWxzZSBpZiBzZWxmLmRlYnVnX2lu
Zm8gaXMgTm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ugc2VsZi5kZWJ1Z19p
bmZvLmludGVyYWN0aXZlKQorCisgICAgZGVmIHNldHVwKHNlbGYsIHJ1bm5lcik6CisgICAgICAg
IHNlbGYucnVubmVyID0gcnVubmVyCisgICAgICAgIHNlbGYucnVubmVyLnNlbmRfbWVzc2FnZSgi
aW5pdF9zdWNjZWVkZWQiKQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIGlzX2FsaXZl
KHNlbGYpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIGRvX3Rlc3Qoc2VsZiwgdGVz
dCk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKZGlmZiAtLWdpdCBhL1dlYkRy
aXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2V4ZWN1dG9y
cy9weXRlc3RydW5uZXIvX19pbml0X18ucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mv
dG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9leGVjdXRvcnMvcHl0ZXN0cnVubmVyL19faW5pdF9f
LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hOTJiM2E4MTUxZAot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRy
dW5uZXIvd3B0cnVubmVyL2V4ZWN1dG9ycy9weXRlc3RydW5uZXIvX19pbml0X18ucHkKQEAgLTAs
MCArMSBAQAorZnJvbSAucnVubmVyIGltcG9ydCBydW4KZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRl
c3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2V4ZWN1dG9ycy9weXRl
c3RydW5uZXIvcnVubmVyLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dw
dHJ1bm5lci93cHRydW5uZXIvZXhlY3V0b3JzL3B5dGVzdHJ1bm5lci9ydW5uZXIucHkKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjA0M2ZjY2IxZmVkCi0tLSAvZGV2L251
bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRy
dW5uZXIvZXhlY3V0b3JzL3B5dGVzdHJ1bm5lci9ydW5uZXIucHkKQEAgLTAsMCArMSwxMTcgQEAK
KyIiIlByb3ZpZGVzIGludGVyZmFjZSB0byBkZWFsIHdpdGggcHl0ZXN0LgorCitVc2FnZTo6CisK
KyAgICBzZXNzaW9uID0gd2ViZHJpdmVyLmNsaWVudC5TZXNzaW9uKCIxMjcuMC4wLjEiLCAiNDQ0
NCIsICIvIikKKyAgICBoYXJuZXNzX3Jlc3VsdCA9ICgiT0siLCBOb25lKQorICAgIHN1YnRlc3Rf
cmVzdWx0cyA9IHB5dGVzdHJ1bm5lci5ydW4oIi9wYXRoL3RvL3Rlc3QiLCBzZXNzaW9uLnVybCkK
KyAgICByZXR1cm4gKGhhcm5lc3NfcmVzdWx0LCBzdWJ0ZXN0X3Jlc3VsdHMpCisiIiIKKworaW1w
b3J0IGVycm5vCitpbXBvcnQganNvbgoraW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCitpbXBvcnQg
dGVtcGZpbGUKKworCitweXRlc3QgPSBOb25lCisKKworZGVmIGRvX2RlbGF5ZWRfaW1wb3J0cygp
OgorICAgIGdsb2JhbCBweXRlc3QKKyAgICBpbXBvcnQgcHl0ZXN0CisKKworZGVmIHJ1bihwYXRo
LCBzZXJ2ZXJfY29uZmlnLCBzZXNzaW9uX2NvbmZpZywgdGltZW91dD0wKToKKyAgICAiIiJSdW4g
UHl0aG9uIHRlc3QgYXQgYGBwYXRoYGAgaW4gcHl0ZXN0LiAgVGhlIHByb3ZpZGVkIGBgc2Vzc2lv
bmBgCisgICAgaXMgZXhwb3NlZCBhcyBhIGZpeHR1cmUgYXZhaWxhYmxlIGluIHRoZSBzY29wZSBv
ZiB0aGUgdGVzdCBmdW5jdGlvbnMuCisKKyAgICA6cGFyYW0gcGF0aDogUGF0aCB0byB0aGUgdGVz
dCBmaWxlLgorICAgIDpwYXJhbSBzZXNzaW9uX2NvbmZpZzogZGljdGlvbmFyeSBvZiBob3N0LCBw
b3J0LGNhcGFiaWxpdGllcyBwYXJhbWV0ZXJzCisgICAgdG8gcGFzcyB0aHJvdWdoIHRvIHRoZSB3
ZWJkcml2ZXIgc2Vzc2lvbgorICAgIDpwYXJhbSB0aW1lb3V0OiBEdXJhdGlvbiBiZWZvcmUgaW50
ZXJydXB0aW5nIHBvdGVudGlhbGx5IGhhbmdpbmcKKyAgICAgICAgdGVzdHMuICBJZiAwLCB0aGVy
ZSBpcyBubyB0aW1lb3V0LgorCisgICAgOnJldHVybnM6IExpc3Qgb2Ygc3VidGVzdCByZXN1bHRz
LCB3aGljaCBhcmUgdHVwbGVzIG9mICh0ZXN0IGlkLAorICAgICAgICBzdGF0dXMsIG1lc3NhZ2Us
IHN0YWNrdHJhY2UpLgorICAgICIiIgorCisgICAgaWYgcHl0ZXN0IGlzIE5vbmU6CisgICAgICAg
IGRvX2RlbGF5ZWRfaW1wb3J0cygpCisKKyAgICByZWNvcmRlciA9IFN1YnRlc3RSZXN1bHRSZWNv
cmRlcigpCisKKyAgICBvcy5lbnZpcm9uWyJXRF9IT1NUIl0gPSBzZXNzaW9uX2NvbmZpZ1siaG9z
dCJdCisgICAgb3MuZW52aXJvblsiV0RfUE9SVCJdID0gc3RyKHNlc3Npb25fY29uZmlnWyJwb3J0
Il0pCisgICAgb3MuZW52aXJvblsiV0RfQ0FQQUJJTElUSUVTIl0gPSBqc29uLmR1bXBzKHNlc3Np
b25fY29uZmlnWyJjYXBhYmlsaXRpZXMiXSkKKyAgICBvcy5lbnZpcm9uWyJXRF9TRVJWRVJfQ09O
RklHIl0gPSBqc29uLmR1bXBzKHNlcnZlcl9jb25maWcpCisKKyAgICBwbHVnaW5zID0gW3JlY29y
ZGVyXQorCisgICAgIyBUT0RPKGF0byk6IERlYWwgd2l0aCB0aW1lb3V0cworCisgICAgd2l0aCBU
ZW1wb3JhcnlEaXJlY3RvcnkoKSBhcyBjYWNoZToKKyAgICAgICAgcHl0ZXN0Lm1haW4oWyItLXN0
cmljdCIsICAjIHR1cm4gd2FybmluZ3MgaW50byBlcnJvcnMKKyAgICAgICAgICAgICAgICAgICAg
ICItLXZlcmJvc2UiLCAgIyBzaG93IGVhY2ggaW5kaXZpZHVhbCBzdWJ0ZXN0CisgICAgICAgICAg
ICAgICAgICAgICAiLS1jYXB0dXJlIiwgIm5vIiwgICMgZW5hYmxlIHN0ZG91dC9zdGRlcnIgZnJv
bSB0ZXN0cworICAgICAgICAgICAgICAgICAgICAgIi0tYmFzZXRlbXAiLCBjYWNoZSwgICMgdGVt
cG9yYXJ5IGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICAgIi1wIiwgIm5vOm1vemxvZyIs
ICAjIHVzZSB0aGUgV1BUIHJlc3VsdCByZWNvcmRlcgorICAgICAgICAgICAgICAgICAgICAgIi1w
IiwgIm5vOmNhY2hlcHJvdmlkZXIiLCAgIyBkaXNhYmxlIHN0YXRlIHByZXNlcnZhdGlvbiBhY3Jv
c3MgaW52b2NhdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgIHBhdGhdLAorICAgICAgICAgICAg
ICAgICAgICBwbHVnaW5zPXBsdWdpbnMpCisKKyAgICByZXR1cm4gcmVjb3JkZXIucmVzdWx0cwor
CisKK2NsYXNzIFN1YnRlc3RSZXN1bHRSZWNvcmRlcihvYmplY3QpOgorICAgIGRlZiBfX2luaXRf
XyhzZWxmKToKKyAgICAgICAgc2VsZi5yZXN1bHRzID0gW10KKworICAgIGRlZiBweXRlc3RfcnVu
dGVzdF9sb2dyZXBvcnQoc2VsZiwgcmVwb3J0KToKKyAgICAgICAgaWYgcmVwb3J0LnBhc3NlZCBh
bmQgcmVwb3J0LndoZW4gPT0gImNhbGwiOgorICAgICAgICAgICAgc2VsZi5yZWNvcmRfcGFzcyhy
ZXBvcnQpCisgICAgICAgIGVsaWYgcmVwb3J0LmZhaWxlZDoKKyAgICAgICAgICAgIGlmIHJlcG9y
dC53aGVuICE9ICJjYWxsIjoKKyAgICAgICAgICAgICAgICBzZWxmLnJlY29yZF9lcnJvcihyZXBv
cnQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYucmVjb3JkX2ZhaWwo
cmVwb3J0KQorICAgICAgICBlbGlmIHJlcG9ydC5za2lwcGVkOgorICAgICAgICAgICAgc2VsZi5y
ZWNvcmRfc2tpcChyZXBvcnQpCisKKyAgICBkZWYgcmVjb3JkX3Bhc3Moc2VsZiwgcmVwb3J0KToK
KyAgICAgICAgc2VsZi5yZWNvcmQocmVwb3J0Lm5vZGVpZCwgIlBBU1MiKQorCisgICAgZGVmIHJl
Y29yZF9mYWlsKHNlbGYsIHJlcG9ydCk6CisgICAgICAgIHNlbGYucmVjb3JkKHJlcG9ydC5ub2Rl
aWQsICJGQUlMIiwgc3RhY2s9cmVwb3J0LmxvbmdyZXByKQorCisgICAgZGVmIHJlY29yZF9lcnJv
cihzZWxmLCByZXBvcnQpOgorICAgICAgICAjIGVycm9yIGluIHNldHVwL3RlYXJkb3duCisgICAg
ICAgIGlmIHJlcG9ydC53aGVuICE9ICJjYWxsIjoKKyAgICAgICAgICAgIG1lc3NhZ2UgPSAiJXMg
ZXJyb3IiICUgcmVwb3J0LndoZW4KKyAgICAgICAgc2VsZi5yZWNvcmQocmVwb3J0Lm5vZGVpZCwg
IkVSUk9SIiwgbWVzc2FnZSwgcmVwb3J0LmxvbmdyZXByKQorCisgICAgZGVmIHJlY29yZF9za2lw
KHNlbGYsIHJlcG9ydCk6CisgICAgICAgIHNlbGYucmVjb3JkKHJlcG9ydC5ub2RlaWQsICJFUlJP
UiIsCisgICAgICAgICAgICAgICAgICAgICJJbi10ZXN0IHNraXAgZGVjb3JhdG9ycyBhcmUgZGlz
YWxsb3dlZCwgIgorICAgICAgICAgICAgICAgICAgICAicGxlYXNlIHVzZSBXUFQgbWV0YWRhdGEg
dG8gaWdub3JlIHRlc3RzLiIpCisKKyAgICBkZWYgcmVjb3JkKHNlbGYsIHRlc3QsIHN0YXR1cywg
bWVzc2FnZT1Ob25lLCBzdGFjaz1Ob25lKToKKyAgICAgICAgaWYgc3RhY2sgaXMgbm90IE5vbmU6
CisgICAgICAgICAgICBzdGFjayA9IHN0cihzdGFjaykKKyAgICAgICAgbmV3X3Jlc3VsdCA9ICh0
ZXN0LCBzdGF0dXMsIG1lc3NhZ2UsIHN0YWNrKQorICAgICAgICBzZWxmLnJlc3VsdHMuYXBwZW5k
KG5ld19yZXN1bHQpCisKKworY2xhc3MgVGVtcG9yYXJ5RGlyZWN0b3J5KG9iamVjdCk6CisgICAg
ZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgc2VsZi5wYXRoID0gdGVtcGZpbGUubWtkdGVt
cChwcmVmaXg9InB5dGVzdC0iKQorICAgICAgICByZXR1cm4gc2VsZi5wYXRoCisKKyAgICBkZWYg
X19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzaHV0aWwu
cm10cmVlKHNlbGYucGF0aCkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAg
ICAgICMgbm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorICAgICAgICAgICAgaWYgZS5lcnJubyAh
PSBlcnJuby5FTk9FTlQ6CisgICAgICAgICAgICAgICAgcmFpc2UKZGlmZiAtLWdpdCBhL1dlYkRy
aXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2V4ZWN1dG9y
cy9yZWZ0ZXN0LXdhaXRfbWFyaW9uZXR0ZS5qcyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3cz
Yy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2V4ZWN1dG9ycy9yZWZ0ZXN0LXdhaXRfbWFyaW9u
ZXR0ZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYzIyNjAyNzI4
MWUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMv
d3B0cnVubmVyL3dwdHJ1bm5lci9leGVjdXRvcnMvcmVmdGVzdC13YWl0X21hcmlvbmV0dGUuanMK
QEAgLTAsMCArMSwxNyBAQAorZnVuY3Rpb24gdGVzdCh4KSB7CisgIGlmICghcm9vdC5jbGFzc0xp
c3QuY29udGFpbnMoInJlZnRlc3Qtd2FpdCIpKSB7CisgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgp
OworICAgIG1hcmlvbmV0dGVTY3JpcHRGaW5pc2hlZCgpOworICB9Cit9CisKK3ZhciByb290ID0g
ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50OwordmFyIG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2Jz
ZXJ2ZXIodGVzdCk7CisKK29ic2VydmVyLm9ic2VydmUocm9vdCwge2F0dHJpYnV0ZXM6IHRydWV9
KTsKKworaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgIT0gImNvbXBsZXRlIikgeworICBvbmxvYWQg
PSB0ZXN0Cit9IGVsc2UgeworICB0ZXN0KCk7Cit9CmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0
cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9leGVjdXRvcnMvcmVmdGVz
dC13YWl0X3dlYmRyaXZlci5qcyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93
cHRydW5uZXIvd3B0cnVubmVyL2V4ZWN1dG9ycy9yZWZ0ZXN0LXdhaXRfd2ViZHJpdmVyLmpzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jMWNjNjQ5ZTMyMwotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIv
d3B0cnVubmVyL2V4ZWN1dG9ycy9yZWZ0ZXN0LXdhaXRfd2ViZHJpdmVyLmpzCkBAIC0wLDAgKzEs
NDQgQEAKK3ZhciBjYWxsYmFjayA9IGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV07CisK
K2Z1bmN0aW9uIHJvb3Rfd2FpdCgpIHsKKyAgaWYgKCFyb290LmNsYXNzTGlzdC5jb250YWlucygi
cmVmdGVzdC13YWl0IikpIHsKKyAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CisKKyAgICBpZiAo
RG9jdW1lbnQucHJvdG90eXBlLmhhc093blByb3BlcnR5KCJmb250cyIpKSB7CisgICAgICBkb2N1
bWVudC5mb250cy5yZWFkeS50aGVuKHJlYWR5X2Zvcl9zY3JlZW5zaG90KTsKKyAgICB9IGVsc2Ug
eworICAgICAgLy8gVGhpcyBtaWdodCB0YWtlIHRoZSBzY3JlZW5zaG90IHRvbyBlYXJseSwgZGVw
ZW5kaW5nIG9uIHdoZXRoZXIgdGhlCisgICAgICAvLyBsb2FkIGV2ZW50IGlzIGJsb2NrZWQgb24g
Zm9udHMgYmVpbmcgbG9hZGVkLiBTZWU6CisgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdzNj
L2Nzc3dnLWRyYWZ0cy9pc3N1ZXMvMTA4OAorICAgICAgcmVhZHlfZm9yX3NjcmVlbnNob3QoKTsK
KyAgICB9CisgIH0KK30KKworZnVuY3Rpb24gcmVhZHlfZm9yX3NjcmVlbnNob3QoKSB7CisgIC8v
IEFzIG9mIDIwMTctMDQtMDUsIHRoZSBDaHJvbWl1bSB3ZWIgYnJvd3NlciBleGhpYml0cyBhIHJl
bmRlcmluZyBidWcKKyAgLy8gKGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9p
c3N1ZXMvZGV0YWlsP2lkPTcwODc1NykgdGhhdAorICAvLyBwcm9kdWNlcyBpbnN0YWJpbGl0eSBk
dXJpbmcgc2NyZWVuIGNhcHR1cmUuIFRoZSBmb2xsb3dpbmcgdXNlIG9mCisgIC8vIGByZXF1ZXN0
QW5pbWF0aW9uRnJhbWVgIGlzIGludGVuZGVkIGFzIGEgc2hvcnQtdGVybSB3b3JrYXJvdW5kLCB0
aG91Z2gKKyAgLy8gaXQgaXMgbm90IGd1YXJhbnRlZWQgdG8gcmVzb2x2ZSB0aGUgaXNzdWUuCisg
IC8vCisgIC8vIEZvciBmdXJ0aGVyIGRldGFpbCwgc2VlOgorICAvLyBodHRwczovL2dpdGh1Yi5j
b20vanVnZ2xpbm1pa2UvY2hyb21lLXNjcmVlbnNob3QtcmFjZS9pc3N1ZXMvMQorCisgIHJlcXVl
c3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpIHsKKyAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUo
ZnVuY3Rpb24oKSB7CisgICAgICBjYWxsYmFjaygpOworICAgIH0pOworICB9KTsKK30KKwordmFy
IHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7Cit2YXIgb2JzZXJ2ZXIgPSBuZXcgTXV0
YXRpb25PYnNlcnZlcihyb290X3dhaXQpOworCitvYnNlcnZlci5vYnNlcnZlKHJvb3QsIHthdHRy
aWJ1dGVzOiB0cnVlfSk7CisKK2lmIChkb2N1bWVudC5yZWFkeVN0YXRlICE9ICJjb21wbGV0ZSIp
IHsKKyAgICBvbmxvYWQgPSByb290X3dhaXQ7Cit9IGVsc2UgeworICAgIHJvb3Rfd2FpdCgpOwor
fQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5l
ci93cHRydW5uZXIvZXhlY3V0b3JzL3JlZnRlc3QuanMgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRl
ZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9leGVjdXRvcnMvcmVmdGVzdC5qcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNWJkNWM2MDljYmQKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dw
dHJ1bm5lci9leGVjdXRvcnMvcmVmdGVzdC5qcwpAQCAtMCwwICsxIEBACit2YXIgd2luID0gd2lu
ZG93Lm9wZW4oImFib3V0OmJsYW5rIiwgInRlc3QiLCAid2lkdGg9NjAwLGhlaWdodD02MDAiKTsK
ZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIv
d3B0cnVubmVyL2V4ZWN1dG9ycy90ZXN0aGFybmVzc19tYXJpb25ldHRlLmpzIGIvV2ViRHJpdmVy
VGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvZXhlY3V0b3JzL3Rl
c3RoYXJuZXNzX21hcmlvbmV0dGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLmUyYjcwYTBhZDhmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1w
b3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvZXhlY3V0b3JzL3Rlc3RoYXJuZXNz
X21hcmlvbmV0dGUuanMKQEAgLTAsMCArMSwzMSBAQAord2luZG93LndyYXBwZWRKU09iamVjdC50
aW1lb3V0X211bHRpcGxpZXIgPSAlKHRpbWVvdXRfbXVsdGlwbGllcilkOword2luZG93LndyYXBw
ZWRKU09iamVjdC5leHBsaWNpdF90aW1lb3V0ID0gJShleHBsaWNpdF90aW1lb3V0KWQ7CisKK3dp
bmRvdy53cmFwcGVkSlNPYmplY3QuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIGZ1bmN0aW9u
IGxpc3RlbmVyKGV2ZW50KSB7CisgICAgaWYgKGV2ZW50LmRhdGEudHlwZSAhPSAiY29tcGxldGUi
KSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgd2luZG93LndyYXBwZWRKU09iamVjdC5y
ZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgbGlzdGVuZXIpOworICAgIGNsZWFyVGltZW91
dCh0aW1lcik7CisgICAgdmFyIHRlc3RzID0gZXZlbnQuZGF0YS50ZXN0czsKKyAgICB2YXIgc3Rh
dHVzID0gZXZlbnQuZGF0YS5zdGF0dXM7CisKKyAgICB2YXIgc3VidGVzdF9yZXN1bHRzID0gdGVz
dHMubWFwKGZ1bmN0aW9uICh4KSB7CisgICAgICAgIHJldHVybiBbeC5uYW1lLCB4LnN0YXR1cywg
eC5tZXNzYWdlLCB4LnN0YWNrXQorICAgIH0pOworCisgICAgbWFyaW9uZXR0ZVNjcmlwdEZpbmlz
aGVkKFsiJSh1cmwpcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMuc3Rh
dHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLm1lc3NhZ2UsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMuc3RhY2ssCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdWJ0ZXN0X3Jlc3VsdHNdKTsKK30sIGZhbHNlKTsKKword2luZG93Lndy
YXBwZWRKU09iamVjdC53aW4gPSB3aW5kb3cub3BlbigiJShhYnNfdXJsKXMiLCAiJSh3aW5kb3df
aWQpcyIpOworCit2YXIgdGltZXIgPSBudWxsOworaWYgKCUodGltZW91dClzKSB7CisgICAgdGlt
ZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICB3aW5kb3cud3JhcHBlZEpTT2Jq
ZWN0Lndpbi50aW1lb3V0KCk7CisgICAgfSwgJSh0aW1lb3V0KXMpOworfQpkaWZmIC0tZ2l0IGEv
V2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvZXhl
Y3V0b3JzL3Rlc3RoYXJuZXNzX3NlcnZvZHJpdmVyLmpzIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0
ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvZXhlY3V0b3JzL3Rlc3RoYXJuZXNzX3Nl
cnZvZHJpdmVyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kNzMx
Y2MwNGQ3MAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90
b29scy93cHRydW5uZXIvd3B0cnVubmVyL2V4ZWN1dG9ycy90ZXN0aGFybmVzc19zZXJ2b2RyaXZl
ci5qcwpAQCAtMCwwICsxLDIgQEAKK3dpbmRvdy5fX3dkX3Jlc3VsdHNfY2FsbGJhY2tfXyA9IGFy
Z3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV07Cit3aW5kb3cuX193ZF9yZXN1bHRzX3RpbWVy
X18gPSBzZXRUaW1lb3V0KHRpbWVvdXQsICUodGltZW91dClzKTsKZGlmZiAtLWdpdCBhL1dlYkRy
aXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2V4ZWN1dG9y
cy90ZXN0aGFybmVzc193ZWJkcml2ZXIuanMgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mv
dG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9leGVjdXRvcnMvdGVzdGhhcm5lc3Nfd2ViZHJpdmVy
LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mNWNiZmY5ZWY3Nwot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRy
dW5uZXIvd3B0cnVubmVyL2V4ZWN1dG9ycy90ZXN0aGFybmVzc193ZWJkcml2ZXIuanMKQEAgLTAs
MCArMSwyOSBAQAordmFyIGNhbGxiYWNrID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAx
XTsKK3dpbmRvdy50aW1lb3V0X211bHRpcGxpZXIgPSAlKHRpbWVvdXRfbXVsdGlwbGllcilkOwor
Cit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIGZ1bmN0aW9uIGYoZXZlbnQpIHsK
KyAgaWYgKGV2ZW50LmRhdGEudHlwZSAhPSAiY29tcGxldGUiKSB7CisgICAgcmV0dXJuOworICB9
CisgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgZik7CisKKyAgdmFyIHRl
c3RzID0gZXZlbnQuZGF0YS50ZXN0czsKKyAgdmFyIHN0YXR1cyA9IGV2ZW50LmRhdGEuc3RhdHVz
OworCisgIHZhciBzdWJ0ZXN0X3Jlc3VsdHMgPSB0ZXN0cy5tYXAoZnVuY3Rpb24oeCkgeworICAg
IHJldHVybiBbeC5uYW1lLCB4LnN0YXR1cywgeC5tZXNzYWdlLCB4LnN0YWNrXQorICB9KTsKKyAg
Y2xlYXJUaW1lb3V0KHRpbWVyKTsKKyAgY2FsbGJhY2soWyIlKHVybClzIiwKKyAgICAgICAgICAg
IHN0YXR1cy5zdGF0dXMsCisgICAgICAgICAgICBzdGF0dXMubWVzc2FnZSwKKyAgICAgICAgICAg
IHN0YXR1cy5zdGFjaywKKyAgICAgICAgICAgIHN1YnRlc3RfcmVzdWx0c10pOworfSwgZmFsc2Up
OworCit3aW5kb3cud2luID0gd2luZG93Lm9wZW4oIiUoYWJzX3VybClzIiwgIiUod2luZG93X2lk
KXMiKTsKKwordmFyIHRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgd2luZG93Lndp
bi50aW1lb3V0KCk7CisgIHdpbmRvdy53aW4uY2xvc2UoKTsKK30sICUodGltZW91dClzKTsKZGlm
ZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0
cnVubmVyL2V4cGVjdGVkLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dw
dHJ1bm5lci93cHRydW5uZXIvZXhwZWN0ZWQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLmYwNmFiYjk0NmFmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVz
dHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvZXhwZWN0ZWQucHkKQEAg
LTAsMCArMSwxNCBAQAoraW1wb3J0IG9zCisKKworZGVmIGV4cGVjdGVkX3BhdGgobWV0YWRhdGFf
cGF0aCwgdGVzdF9wYXRoKToKKyAgICAiIiJQYXRoIHRvIHRoZSBleHBlY3RhdGlvbiBkYXRhIGZp
bGUgZm9yIGEgZ2l2ZW4gdGVzdCBwYXRoLgorCisgICAgVGhpcyBpcyBkZWZpbmVkIGFzIG1ldGFk
YXRhX3BhdGggKyByZWxhdGl2ZV90ZXN0X3BhdGggKyAuaW5pCisKKyAgICA6cGFyYW0gbWV0YWRh
dGFfcGF0aDogUGF0aCB0byB0aGUgcm9vdCBvZiB0aGUgbWV0YWRhdGEgZGlyZWN0b3J5CisgICAg
OnBhcmFtIHRlc3RfcGF0aDogUmVsYXRpdmUgcGF0aCB0byB0aGUgdGVzdCBmaWxlIGZyb20gdGhl
IHRlc3Qgcm9vdAorICAgICIiIgorICAgIGFyZ3MgPSBsaXN0KHRlc3RfcGF0aC5zcGxpdCgiLyIp
KQorICAgIGFyZ3NbLTFdICs9ICIuaW5pIgorICAgIHJldHVybiBvcy5wYXRoLmpvaW4obWV0YWRh
dGFfcGF0aCwgKmFyZ3MpCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mv
dG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9mb250LnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0
ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvZm9udC5weQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZmRmMWIxMjQ5ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9mb250
LnB5CkBAIC0wLDAgKzEsMTEwIEBACitpbXBvcnQgY3R5cGVzCitpbXBvcnQgbG9nZ2luZworaW1w
b3J0IG9zCitpbXBvcnQgcGxhdGZvcm0KKworZnJvbSBzaHV0aWwgaW1wb3J0IGNvcHkyLCBybXRy
ZWUKK2Zyb20gc3VicHJvY2VzcyBpbXBvcnQgY2FsbAorCitIRVJFID0gb3MucGF0aC5zcGxpdChf
X2ZpbGVfXylbMF0KK1NZU1RFTSA9IHBsYXRmb3JtLnN5c3RlbSgpLmxvd2VyKCkKKworCitjbGFz
cyBGb250SW5zdGFsbGVyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZvbnRfZGly
PU5vbmUsICoqZm9udHMpOgorICAgICAgICBzZWxmLmZvbnRfZGlyID0gZm9udF9kaXIKKyAgICAg
ICAgc2VsZi5pbnN0YWxsZWRfZm9udHMgPSBGYWxzZQorICAgICAgICBzZWxmLmNyZWF0ZWRfZGly
ID0gRmFsc2UKKyAgICAgICAgc2VsZi5mb250cyA9IGZvbnRzCisKKyAgICBkZWYgX19lbnRlcl9f
KHNlbGYsIG9wdGlvbnM9Tm9uZSk6CisgICAgICAgIGZvciBfLCBmb250X3BhdGggaW4gc2VsZi5m
b250cy5pdGVtcygpOgorICAgICAgICAgICAgZm9udF9uYW1lID0gZm9udF9wYXRoLnNwbGl0KCcv
JylbLTFdCisgICAgICAgICAgICBpbnN0YWxsID0gZ2V0YXR0cihzZWxmLCAnaW5zdGFsbF8lc19m
b250JyAlIFNZU1RFTSwgTm9uZSkKKyAgICAgICAgICAgIGlmIG5vdCBpbnN0YWxsOgorICAgICAg
ICAgICAgICAgIGxvZ2dpbmcud2FybmluZygnRm9udCBpbnN0YWxsYXRpb24gbm90IHN1cHBvcnRl
ZCBvbiAlcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNZU1RFTSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIGlmIGluc3RhbGwoZm9udF9uYW1l
LCBmb250X3BhdGgpOgorICAgICAgICAgICAgICAgIHNlbGYuaW5zdGFsbGVkX2ZvbnRzID0gVHJ1
ZQorICAgICAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygnSW5zdGFsbGVkIGZvbnQ6ICVzJywgZm9u
dF9uYW1lKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsb2dnaW5nLndhcm5p
bmcoJ1VuYWJsZSB0byBpbnN0YWxsIGZvbnQ6ICVzJywgZm9udF9uYW1lKQorCisgICAgZGVmIF9f
ZXhpdF9fKHNlbGYsIGV4Y190eXBlLCBleGNfdmFsLCBleGNfdGIpOgorICAgICAgICBpZiBub3Qg
c2VsZi5pbnN0YWxsZWRfZm9udHM6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAg
ICBmb3IgXywgZm9udF9wYXRoIGluIHNlbGYuZm9udHMuaXRlbXMoKToKKyAgICAgICAgICAgIGZv
bnRfbmFtZSA9IGZvbnRfcGF0aC5zcGxpdCgnLycpWy0xXQorICAgICAgICAgICAgcmVtb3ZlID0g
Z2V0YXR0cihzZWxmLCAncmVtb3ZlXyVzX2ZvbnQnICUgU1lTVEVNLCBOb25lKQorICAgICAgICAg
ICAgaWYgbm90IHJlbW92ZToKKyAgICAgICAgICAgICAgICBsb2dnaW5nLndhcm5pbmcoJ0ZvbnQg
cmVtb3ZhbCBub3Qgc3VwcG9ydGVkIG9uICVzJywgU1lTVEVNKQorICAgICAgICAgICAgICAgIHJl
dHVybiBGYWxzZQorICAgICAgICAgICAgaWYgcmVtb3ZlKGZvbnRfbmFtZSwgZm9udF9wYXRoKToK
KyAgICAgICAgICAgICAgICBsb2dnaW5nLmluZm8oJ1JlbW92ZWQgZm9udDogJXMnLCBmb250X25h
bWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxvZ2dpbmcud2FybmluZygn
VW5hYmxlIHRvIHJlbW92ZSBmb250OiAlcycsIGZvbnRfbmFtZSkKKworICAgIGRlZiBpbnN0YWxs
X2xpbnV4X2ZvbnQoc2VsZiwgZm9udF9uYW1lLCBmb250X3BhdGgpOgorICAgICAgICBpZiBub3Qg
c2VsZi5mb250X2RpcjoKKyAgICAgICAgICAgIHNlbGYuZm9udF9kaXIgPSBvcy5wYXRoLmpvaW4o
b3MucGF0aC5leHBhbmR1c2VyKCd+JyksICcuZm9udHMnKQorICAgICAgICBpZiBub3Qgb3MucGF0
aC5leGlzdHMoc2VsZi5mb250X2Rpcik6CisgICAgICAgICAgICBvcy5tYWtlZGlycyhzZWxmLmZv
bnRfZGlyKQorICAgICAgICAgICAgc2VsZi5jcmVhdGVkX2RpciA9IFRydWUKKyAgICAgICAgaWYg
bm90IG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihzZWxmLmZvbnRfZGlyLCBmb250X25hbWUp
KToKKyAgICAgICAgICAgIGNvcHkyKGZvbnRfcGF0aCwgc2VsZi5mb250X2RpcikKKyAgICAgICAg
dHJ5OgorICAgICAgICAgICAgZmNfY2FjaGVfcmV0dXJuY29kZSA9IGNhbGwoJ2ZjLWNhY2hlJykK
KyAgICAgICAgICAgIHJldHVybiBub3QgZmNfY2FjaGVfcmV0dXJuY29kZQorICAgICAgICBleGNl
cHQgT1NFcnJvcjogICMgSWYgZm9udGNvbmZpZyBkb2Vzbid0IGV4aXN0LCByZXR1cm4gRmFsc2UK
KyAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3IoJ2ZvbnRjb25maWcgbm90IGF2YWlsYWJsZSBvbiB0
aGlzIExpbnV4IHN5c3RlbS4nKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYg
aW5zdGFsbF9kYXJ3aW5fZm9udChzZWxmLCBmb250X25hbWUsIGZvbnRfcGF0aCk6CisgICAgICAg
IGlmIG5vdCBzZWxmLmZvbnRfZGlyOgorICAgICAgICAgICAgc2VsZi5mb250X2RpciA9IG9zLnBh
dGguam9pbihvcy5wYXRoLmV4cGFuZHVzZXIoJ34nKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJ0xpYnJhcnkvRm9udHMnKQorICAgICAgICBpZiBub3Qgb3MucGF0
aC5leGlzdHMoc2VsZi5mb250X2Rpcik6CisgICAgICAgICAgICBvcy5tYWtlZGlycyhzZWxmLmZv
bnRfZGlyKQorICAgICAgICAgICAgc2VsZi5jcmVhdGVkX2RpciA9IFRydWUKKyAgICAgICAgaWYg
bm90IG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihzZWxmLmZvbnRfZGlyLCBmb250X25hbWUp
KToKKyAgICAgICAgICAgIGNvcHkyKGZvbnRfcGF0aCwgc2VsZi5mb250X2RpcikKKyAgICAgICAg
cmV0dXJuIFRydWUKKworICAgIGRlZiBpbnN0YWxsX3dpbmRvd3NfZm9udChzZWxmLCBfLCBmb250
X3BhdGgpOgorICAgICAgICBod25kX2Jyb2FkY2FzdCA9IDB4RkZGRgorICAgICAgICB3bV9mb250
Y2hhbmdlID0gMHgwMDFECisKKyAgICAgICAgZ2RpMzIgPSBjdHlwZXMuV2luRExMKCdnZGkzMicp
CisgICAgICAgIGlmIGdkaTMyLkFkZEZvbnRSZXNvdXJjZVcoZm9udF9wYXRoKToKKyAgICAgICAg
ICAgIHJldHVybiBib29sKGN0eXBlcy53aW5kbGwudXNlcjMyLlNlbmRNZXNzYWdlVyhod25kX2Jy
b2FkY2FzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB3bV9mb250Y2hhbmdlKSkKKworICAgIGRlZiByZW1vdmVfbGludXhfZm9udChz
ZWxmLCBmb250X25hbWUsIF8pOgorICAgICAgICBpZiBzZWxmLmNyZWF0ZWRfZGlyOgorICAgICAg
ICAgICAgcm10cmVlKHNlbGYuZm9udF9kaXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBv
cy5yZW1vdmUoJyVzLyVzJyAlIChzZWxmLmZvbnRfZGlyLCBmb250X25hbWUpKQorICAgICAgICB0
cnk6CisgICAgICAgICAgICBmY19jYWNoZV9yZXR1cm5jb2RlID0gY2FsbCgnZmMtY2FjaGUnKQor
ICAgICAgICAgICAgcmV0dXJuIG5vdCBmY19jYWNoZV9yZXR1cm5jb2RlCisgICAgICAgIGV4Y2Vw
dCBPU0Vycm9yOiAgIyBJZiBmb250Y29uZmlnIGRvZXNuJ3QgZXhpc3QsIHJldHVybiBGYWxzZQor
ICAgICAgICAgICAgbG9nZ2luZy5lcnJvcignZm9udGNvbmZpZyBub3QgYXZhaWxhYmxlIG9uIHRo
aXMgTGludXggc3lzdGVtLicpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBy
ZW1vdmVfZGFyd2luX2ZvbnQoc2VsZiwgZm9udF9uYW1lLCBfKToKKyAgICAgICAgaWYgc2VsZi5j
cmVhdGVkX2RpcjoKKyAgICAgICAgICAgIHJtdHJlZShzZWxmLmZvbnRfZGlyKQorICAgICAgICBl
bHNlOgorICAgICAgICAgICAgb3MucmVtb3ZlKG9zLnBhdGguam9pbihzZWxmLmZvbnRfZGlyLCBm
b250X25hbWUpKQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHJlbW92ZV93aW5kb3dz
X2ZvbnQoc2VsZiwgXywgZm9udF9wYXRoKToKKyAgICAgICAgaHduZF9icm9hZGNhc3QgPSAweEZG
RkYKKyAgICAgICAgd21fZm9udGNoYW5nZSA9IDB4MDAxRAorCisgICAgICAgIGdkaTMyID0gY3R5
cGVzLldpbkRMTCgnZ2RpMzInKQorICAgICAgICBpZiBnZGkzMi5SZW1vdmVGb250UmVzb3VyY2VX
KGZvbnRfcGF0aCk6CisgICAgICAgICAgICByZXR1cm4gYm9vbChjdHlwZXMud2luZGxsLnVzZXIz
Mi5TZW5kTWVzc2FnZVcoaHduZF9icm9hZGNhc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd21fZm9udGNoYW5nZSkpCmRpZmYgLS1n
aXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5l
ci9mb3JtYXR0ZXJzLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1
bm5lci93cHRydW5uZXIvZm9ybWF0dGVycy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMC4uMGU4ODhjZTI2OWQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0
cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9mb3JtYXR0ZXJzLnB5CkBA
IC0wLDAgKzEsNTQgQEAKK2ltcG9ydCBqc29uCisKK2Zyb20gbW96bG9nLnN0cnVjdHVyZWQuZm9y
bWF0dGVycy5iYXNlIGltcG9ydCBCYXNlRm9ybWF0dGVyCisKKworY2xhc3MgV3B0cmVwb3J0Rm9y
bWF0dGVyKEJhc2VGb3JtYXR0ZXIpOgorICAgICIiIkZvcm1hdHRlciB0aGF0IHByb2R1Y2VzIHJl
c3VsdHMgaW4gdGhlIGZvcm1hdCB0aGF0IHdwcmVwb3J0IGV4cGVjdHMuIiIiCisKKyAgICBkZWYg
X19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYucmF3X3Jlc3VsdHMgPSB7fQorCisgICAgZGVm
IHN1aXRlX2VuZChzZWxmLCBkYXRhKToKKyAgICAgICAgcmVzdWx0cyA9IHt9CisgICAgICAgIHJl
c3VsdHNbInJlc3VsdHMiXSA9IFtdCisgICAgICAgIGZvciB0ZXN0X25hbWUgaW4gc2VsZi5yYXdf
cmVzdWx0czoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsidGVzdCI6IHRlc3RfbmFtZX0KKyAgICAg
ICAgICAgIHJlc3VsdC51cGRhdGUoc2VsZi5yYXdfcmVzdWx0c1t0ZXN0X25hbWVdKQorICAgICAg
ICAgICAgcmVzdWx0c1sicmVzdWx0cyJdLmFwcGVuZChyZXN1bHQpCisgICAgICAgIHJldHVybiBq
c29uLmR1bXBzKHJlc3VsdHMpCisKKyAgICBkZWYgZmluZF9vcl9jcmVhdGVfdGVzdChzZWxmLCBk
YXRhKToKKyAgICAgICAgdGVzdF9uYW1lID0gZGF0YVsidGVzdCJdCisgICAgICAgIGlmIHRlc3Rf
bmFtZSBub3QgaW4gc2VsZi5yYXdfcmVzdWx0czoKKyAgICAgICAgICAgIHNlbGYucmF3X3Jlc3Vs
dHNbdGVzdF9uYW1lXSA9IHsKKyAgICAgICAgICAgICAgICAic3VidGVzdHMiOiBbXSwKKyAgICAg
ICAgICAgICAgICAic3RhdHVzIjogIiIsCisgICAgICAgICAgICAgICAgIm1lc3NhZ2UiOiBOb25l
CisgICAgICAgICAgICB9CisgICAgICAgIHJldHVybiBzZWxmLnJhd19yZXN1bHRzW3Rlc3RfbmFt
ZV0KKworICAgIGRlZiBjcmVhdGVfc3VidGVzdChzZWxmLCBkYXRhKToKKyAgICAgICAgdGVzdCA9
IHNlbGYuZmluZF9vcl9jcmVhdGVfdGVzdChkYXRhKQorICAgICAgICBzdWJ0ZXN0X25hbWUgPSBk
YXRhWyJzdWJ0ZXN0Il0KKworICAgICAgICBzdWJ0ZXN0ID0geworICAgICAgICAgICAgIm5hbWUi
OiBzdWJ0ZXN0X25hbWUsCisgICAgICAgICAgICAic3RhdHVzIjogIiIsCisgICAgICAgICAgICAi
bWVzc2FnZSI6IE5vbmUKKyAgICAgICAgfQorICAgICAgICB0ZXN0WyJzdWJ0ZXN0cyJdLmFwcGVu
ZChzdWJ0ZXN0KQorCisgICAgICAgIHJldHVybiBzdWJ0ZXN0CisKKyAgICBkZWYgdGVzdF9zdGF0
dXMoc2VsZiwgZGF0YSk6CisgICAgICAgIHN1YnRlc3QgPSBzZWxmLmNyZWF0ZV9zdWJ0ZXN0KGRh
dGEpCisgICAgICAgIHN1YnRlc3RbInN0YXR1cyJdID0gZGF0YVsic3RhdHVzIl0KKyAgICAgICAg
aWYgIm1lc3NhZ2UiIGluIGRhdGE6CisgICAgICAgICAgICBzdWJ0ZXN0WyJtZXNzYWdlIl0gPSBk
YXRhWyJtZXNzYWdlIl0KKworICAgIGRlZiB0ZXN0X2VuZChzZWxmLCBkYXRhKToKKyAgICAgICAg
dGVzdCA9IHNlbGYuZmluZF9vcl9jcmVhdGVfdGVzdChkYXRhKQorICAgICAgICB0ZXN0WyJzdGF0
dXMiXSA9IGRhdGFbInN0YXR1cyJdCisgICAgICAgIGlmICJtZXNzYWdlIiBpbiBkYXRhOgorICAg
ICAgICAgICAgdGVzdFsibWVzc2FnZSJdID0gZGF0YVsibWVzc2FnZSJdCmRpZmYgLS1naXQgYS9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9ob3N0
cy5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVu
bmVyL2hvc3RzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45MTVj
MTdmMWIzMQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90
b29scy93cHRydW5uZXIvd3B0cnVubmVyL2hvc3RzLnB5CkBAIC0wLDAgKzEsMTAwIEBACitmcm9t
IF9fZnV0dXJlX18gaW1wb3J0IHVuaWNvZGVfbGl0ZXJhbHMKKworCitjbGFzcyBIb3N0c0xpbmUo
b2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaXBfYWRkcmVzcywgY2Fub25pY2FsX2hv
c3RuYW1lLCBhbGlhc2VzPU5vbmUsIGNvbW1lbnQ9Tm9uZSk6CisgICAgICAgIHNlbGYuaXBfYWRk
cmVzcyA9IGlwX2FkZHJlc3MKKyAgICAgICAgc2VsZi5jYW5vbmljYWxfaG9zdG5hbWUgPSBjYW5v
bmljYWxfaG9zdG5hbWUKKyAgICAgICAgc2VsZi5hbGlhc2VzID0gYWxpYXNlcyBpZiBhbGlhc2Vz
IGlzIG5vdCBOb25lIGVsc2UgW10KKyAgICAgICAgc2VsZi5jb21tZW50ID0gY29tbWVudAorICAg
ICAgICBpZiBzZWxmLmlwX2FkZHJlc3MgaXMgTm9uZToKKyAgICAgICAgICAgIGFzc2VydCBzZWxm
LmNhbm9uaWNhbF9ob3N0bmFtZSBpcyBOb25lCisgICAgICAgICAgICBhc3NlcnQgbm90IHNlbGYu
YWxpYXNlcworICAgICAgICAgICAgYXNzZXJ0IHNlbGYuY29tbWVudCBpcyBub3QgTm9uZQorCisg
ICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZyb21fc3RyaW5nKGNscywgbGluZSk6CisgICAgICAg
IGlmIG5vdCBsaW5lLnN0cmlwKCk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBsaW5l
ID0gbGluZS5zdHJpcCgpCisKKyAgICAgICAgaXBfYWRkcmVzcyA9IE5vbmUKKyAgICAgICAgY2Fu
b25pY2FsX2hvc3RuYW1lID0gTm9uZQorICAgICAgICBhbGlhc2VzID0gW10KKyAgICAgICAgY29t
bWVudCA9IE5vbmUKKworICAgICAgICBjb21tZW50X3BhcnRzID0gbGluZS5zcGxpdCgiIyIsIDEp
CisgICAgICAgIGlmIGxlbihjb21tZW50X3BhcnRzKSA+IDE6CisgICAgICAgICAgICBjb21tZW50
ID0gY29tbWVudF9wYXJ0c1sxXQorCisgICAgICAgIGRhdGEgPSBjb21tZW50X3BhcnRzWzBdLnN0
cmlwKCkKKworICAgICAgICBpZiBkYXRhOgorICAgICAgICAgICAgZmllbGRzID0gZGF0YS5zcGxp
dCgpCisgICAgICAgICAgICBpZiBsZW4oZmllbGRzKSA8IDI6CisgICAgICAgICAgICAgICAgcmFp
c2UgVmFsdWVFcnJvcigiSW52YWxpZCBob3N0cyBsaW5lIikKKworICAgICAgICAgICAgaXBfYWRk
cmVzcyA9IGZpZWxkc1swXQorICAgICAgICAgICAgY2Fub25pY2FsX2hvc3RuYW1lID0gZmllbGRz
WzFdCisgICAgICAgICAgICBhbGlhc2VzID0gZmllbGRzWzI6XQorCisgICAgICAgIHJldHVybiBj
bHMoaXBfYWRkcmVzcywgY2Fub25pY2FsX2hvc3RuYW1lLCBhbGlhc2VzLCBjb21tZW50KQorCisK
K2NsYXNzIEhvc3RzRmlsZShvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAg
ICAgc2VsZi5kYXRhID0gW10KKyAgICAgICAgc2VsZi5ieV9ob3N0bmFtZSA9IHt9CisKKyAgICBk
ZWYgc2V0X2hvc3Qoc2VsZiwgaG9zdCk6CisgICAgICAgIGlmIGhvc3QuY2Fub25pY2FsX2hvc3Ru
YW1lIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLmRhdGEuYXBwZW5kKGhvc3QpCisgICAgICAg
IGVsaWYgaG9zdC5jYW5vbmljYWxfaG9zdG5hbWUgaW4gc2VsZi5ieV9ob3N0bmFtZToKKyAgICAg
ICAgICAgIG9sZF9ob3N0ID0gc2VsZi5ieV9ob3N0bmFtZVtob3N0LmNhbm9uaWNhbF9ob3N0bmFt
ZV0KKyAgICAgICAgICAgIG9sZF9ob3N0LmlwX2FkZHJlc3MgPSBob3N0LmlwX2FkZHJlc3MKKyAg
ICAgICAgICAgIG9sZF9ob3N0LmFsaWFzZXMgPSBob3N0LmFsaWFzZXMKKyAgICAgICAgICAgIG9s
ZF9ob3N0LmNvbW1lbnQgPSBob3N0LmNvbW1lbnQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg
IHNlbGYuZGF0YS5hcHBlbmQoaG9zdCkKKyAgICAgICAgICAgIHNlbGYuYnlfaG9zdG5hbWVbaG9z
dC5jYW5vbmljYWxfaG9zdG5hbWVdID0gaG9zdAorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVm
IGZyb21fZmlsZShjbHMsIGYpOgorICAgICAgICBydiA9IGNscygpCisgICAgICAgIGZvciBsaW5l
IGluIGY6CisgICAgICAgICAgICBob3N0ID0gSG9zdHNMaW5lLmZyb21fc3RyaW5nKGxpbmUpCisg
ICAgICAgICAgICBpZiBob3N0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJ2LnNldF9o
b3N0KGhvc3QpCisgICAgICAgIHJldHVybiBydgorCisgICAgZGVmIHRvX3N0cmluZyhzZWxmKToK
KyAgICAgICAgZmllbGRfd2lkdGhzID0gWzAsIDBdCisgICAgICAgIGZvciBsaW5lIGluIHNlbGYu
ZGF0YToKKyAgICAgICAgICAgIGlmIGxpbmUuaXBfYWRkcmVzcyBpcyBub3QgTm9uZToKKyAgICAg
ICAgICAgICAgICBmaWVsZF93aWR0aHNbMF0gPSBtYXgoZmllbGRfd2lkdGhzWzBdLCBsZW4obGlu
ZS5pcF9hZGRyZXNzKSkKKyAgICAgICAgICAgICAgICBmaWVsZF93aWR0aHNbMV0gPSBtYXgoZmll
bGRfd2lkdGhzWzFdLCBsZW4obGluZS5jYW5vbmljYWxfaG9zdG5hbWUpKQorCisgICAgICAgIGxp
bmVzID0gW10KKworICAgICAgICBmb3IgaG9zdCBpbiBzZWxmLmRhdGE6CisgICAgICAgICAgICBs
aW5lID0gIiIKKyAgICAgICAgICAgIGlmIGhvc3QuaXBfYWRkcmVzcyBpcyBub3QgTm9uZToKKyAg
ICAgICAgICAgICAgICBpcF9zdHJpbmcgPSBob3N0LmlwX2FkZHJlc3MubGp1c3QoZmllbGRfd2lk
dGhzWzBdKQorICAgICAgICAgICAgICAgIGhvc3RuYW1lX3N0ciA9IGhvc3QuY2Fub25pY2FsX2hv
c3RuYW1lCisgICAgICAgICAgICAgICAgaWYgaG9zdC5hbGlhc2VzOgorICAgICAgICAgICAgICAg
ICAgICBob3N0bmFtZV9zdHIgPSAiJXMgJXMiICUgKGhvc3RuYW1lX3N0ci5sanVzdChmaWVsZF93
aWR0aHNbMV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICIgIi5qb2luKGhvc3QuYWxpYXNlcykpCisgICAgICAgICAgICAgICAgbGluZSA9ICIlcyAlcyIg
JSAoaXBfc3RyaW5nLCBob3N0bmFtZV9zdHIpCisgICAgICAgICAgICBpZiBob3N0LmNvbW1lbnQ6
CisgICAgICAgICAgICAgICAgaWYgbGluZToKKyAgICAgICAgICAgICAgICAgICAgbGluZSArPSAi
ICIKKyAgICAgICAgICAgICAgICBsaW5lICs9ICIjJXMiICUgaG9zdC5jb21tZW50CisgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQobGluZSkKKworICAgICAgICBsaW5lcy5hcHBlbmQoIiIpCisKKyAg
ICAgICAgcmV0dXJuICJcbiIuam9pbihsaW5lcykKKworICAgIGRlZiB0b19maWxlKHNlbGYsIGYp
OgorICAgICAgICBmLndyaXRlKHNlbGYudG9fc3RyaW5nKCkuZW5jb2RlKCJ1dGY4IikpCmRpZmYg
LS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1
bm5lci9tYW5pZmVzdGV4cGVjdGVkLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rv
b2xzL3dwdHJ1bm5lci93cHRydW5uZXIvbWFuaWZlc3RleHBlY3RlZC5weQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNWQ1N2I3MGU1MTcKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9t
YW5pZmVzdGV4cGVjdGVkLnB5CkBAIC0wLDAgKzEsMjYyIEBACitpbXBvcnQgb3MKK2ltcG9ydCB1
cmxwYXJzZQorCitmcm9tIHdwdG1hbmlmZXN0LmJhY2tlbmRzIGltcG9ydCBzdGF0aWMKK2Zyb20g
d3B0bWFuaWZlc3QuYmFja2VuZHMuc3RhdGljIGltcG9ydCBNYW5pZmVzdEl0ZW0KKworaW1wb3J0
IGV4cGVjdGVkCisKKyIiIk1hbmlmZXN0IHN0cnVjdHVyZSB1c2VkIHRvIHN0b3JlIGV4cGVjdGVk
IHJlc3VsdHMgb2YgYSB0ZXN0LgorCitFYWNoIG1hbmlmZXN0IGZpbGUgaXMgcmVwcmVzZW50ZWQg
YnkgYW4gRXhwZWN0ZWRNYW5pZmVzdCB0aGF0CitoYXMgb25lIG9yIG1vcmUgVGVzdE5vZGUgY2hp
bGRyZW4sIG9uZSBwZXIgdGVzdCBpbiB0aGUgbWFuaWZlc3QuCitFYWNoIFRlc3ROb2RlIGhhcyB6
ZXJvIG9yIG1vcmUgU3VidGVzdE5vZGUgY2hpbGRyZW4sIG9uZSBmb3IgZWFjaAora25vd24gc3Vi
dGVzdCBvZiB0aGUgdGVzdC4KKyIiIgorCitkZWYgZGF0YV9jbHNfZ2V0dGVyKG91dHB1dF9ub2Rl
LCB2aXNpdGVkX25vZGUpOgorICAgICMgdmlzaXRlZF9ub2RlIGlzIGludGVudGlvbmFsbHkgdW51
c2VkCisgICAgaWYgb3V0cHV0X25vZGUgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuIEV4cGVjdGVk
TWFuaWZlc3QKKyAgICBpZiBpc2luc3RhbmNlKG91dHB1dF9ub2RlLCBFeHBlY3RlZE1hbmlmZXN0
KToKKyAgICAgICAgcmV0dXJuIFRlc3ROb2RlCisgICAgaWYgaXNpbnN0YW5jZShvdXRwdXRfbm9k
ZSwgVGVzdE5vZGUpOgorICAgICAgICByZXR1cm4gU3VidGVzdE5vZGUKKyAgICByYWlzZSBWYWx1
ZUVycm9yCisKKworZGVmIGJvb2xfcHJvcChuYW1lLCBub2RlKToKKyAgICAiIiJCb29sZWFuIHBy
b3BlcnR5IiIiCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gbm9kZS5nZXQobmFtZSkKKyAgICBl
eGNlcHQgS2V5RXJyb3I6CisgICAgICAgIHJldHVybiBOb25lCisKKworZGVmIHRhZ3Mobm9kZSk6
CisgICAgIiIiU2V0IG9mIHRhZ3MgdGhhdCBoYXZlIGJlZW4gYXBwbGllZCB0byB0aGUgdGVzdCIi
IgorICAgIHRyeToKKyAgICAgICAgdmFsdWUgPSBub2RlLmdldCgidGFncyIpCisgICAgICAgIGlm
IGlzaW5zdGFuY2UodmFsdWUsIChzdHIsIHVuaWNvZGUpKToKKyAgICAgICAgICAgIHJldHVybiB7
dmFsdWV9CisgICAgICAgIHJldHVybiBzZXQodmFsdWUpCisgICAgZXhjZXB0IEtleUVycm9yOgor
ICAgICAgICByZXR1cm4gc2V0KCkKKworCitkZWYgcHJlZnMobm9kZSk6CisgICAgZGVmIHZhbHVl
KGluaV92YWx1ZSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoaW5pX3ZhbHVlLCAoc3RyLCB1bmlj
b2RlKSk6CisgICAgICAgICAgICByZXR1cm4gdHVwbGUoaW5pX3ZhbHVlLnNwbGl0KCI6IiwgMSkp
CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gKGluaV92YWx1ZSwgTm9uZSkKKwor
ICAgIHRyeToKKyAgICAgICAgbm9kZV9wcmVmcyA9IG5vZGUuZ2V0KCJwcmVmcyIpCisgICAgICAg
IGlmIHR5cGUobm9kZV9wcmVmcykgaW4gKHN0ciwgdW5pY29kZSk6CisgICAgICAgICAgICBwcmVm
cyA9IHt2YWx1ZShub2RlX3ByZWZzKX0KKyAgICAgICAgcnYgPSBkaWN0KHZhbHVlKGl0ZW0pIGZv
ciBpdGVtIGluIG5vZGVfcHJlZnMpCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICBydiA9
IHt9CisgICAgcmV0dXJuIHJ2CisKKworY2xhc3MgRXhwZWN0ZWRNYW5pZmVzdChNYW5pZmVzdEl0
ZW0pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCB0ZXN0X3BhdGgsIHVybF9iYXNlKToK
KyAgICAgICAgIiIiT2JqZWN0IHJlcHJlc2VudGluZyBhbGwgdGhlIHRlc3RzIGluIGEgcGFydGlj
dWxhciBtYW5pZmVzdAorCisgICAgICAgIDpwYXJhbSBuYW1lOiBOYW1lIG9mIHRoZSBBU1QgTm9k
ZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBvYmplY3QuCisgICAgICAgICAgICAgICAgICAgICBTaG91
bGQgYWx3YXlzIGJlIE5vbmUgc2luY2UgdGhpcyBzaG91bGQgYWx3YXlzIGJlIGFzc29jaWF0ZWQg
d2l0aAorICAgICAgICAgICAgICAgICAgICAgdGhlIHJvb3Qgbm9kZSBvZiB0aGUgQVNULgorICAg
ICAgICA6cGFyYW0gdGVzdF9wYXRoOiBQYXRoIG9mIHRoZSB0ZXN0IGZpbGUgYXNzb2NpYXRlZCB3
aXRoIHRoaXMgbWFuaWZlc3QuCisgICAgICAgIDpwYXJhbSB1cmxfYmFzZTogQmFzZSB1cmwgZm9y
IHNlcnZpbmcgdGhlIHRlc3RzIGluIHRoaXMgbWFuaWZlc3QKKyAgICAgICAgIiIiCisgICAgICAg
IGlmIG5hbWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJFeHBl
Y3RlZE1hbmlmZXN0IHNob3VsZCByZXByZXNlbnQgdGhlIHJvb3Qgbm9kZSIpCisgICAgICAgIGlm
IHRlc3RfcGF0aCBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiRXhwZWN0
ZWRNYW5pZmVzdCByZXF1aXJlcyBhIHRlc3QgcGF0aCIpCisgICAgICAgIGlmIHVybF9iYXNlIGlz
IE5vbmU6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJFeHBlY3RlZE1hbmlmZXN0IHJl
cXVpcmVzIGEgYmFzZSB1cmwiKQorICAgICAgICBNYW5pZmVzdEl0ZW0uX19pbml0X18oc2VsZiwg
bmFtZSkKKyAgICAgICAgc2VsZi5jaGlsZF9tYXAgPSB7fQorICAgICAgICBzZWxmLnRlc3RfcGF0
aCA9IHRlc3RfcGF0aAorICAgICAgICBzZWxmLnVybF9iYXNlID0gdXJsX2Jhc2UKKworICAgIGRl
ZiBhcHBlbmQoc2VsZiwgY2hpbGQpOgorICAgICAgICAiIiJBZGQgYSB0ZXN0IHRvIHRoZSBtYW5p
ZmVzdCIiIgorICAgICAgICBNYW5pZmVzdEl0ZW0uYXBwZW5kKHNlbGYsIGNoaWxkKQorICAgICAg
ICBzZWxmLmNoaWxkX21hcFtjaGlsZC5pZF0gPSBjaGlsZAorCisgICAgZGVmIF9yZW1vdmVfY2hp
bGQoc2VsZiwgY2hpbGQpOgorICAgICAgICBkZWwgc2VsZi5jaGlsZF9tYXBbY2hpbGQuaWRdCisg
ICAgICAgIE1hbmlmZXN0SXRlbS5yZW1vdmVfY2hpbGQoc2VsZiwgY2hpbGQpCisgICAgICAgIGFz
c2VydCBsZW4oc2VsZi5jaGlsZF9tYXApID09IGxlbihzZWxmLmNoaWxkcmVuKQorCisgICAgZGVm
IGdldF90ZXN0KHNlbGYsIHRlc3RfaWQpOgorICAgICAgICAiIiJHZXQgYSB0ZXN0IGZyb20gdGhl
IG1hbmlmZXN0IGJ5IElECisKKyAgICAgICAgOnBhcmFtIHRlc3RfaWQ6IElEIG9mIHRoZSB0ZXN0
IHRvIHJldHVybi4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuY2hpbGRfbWFwLmdldCh0ZXN0X2lk
KQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHVybChzZWxmKToKKyAgICAgICAgcmV0dXJuIHVy
bHBhcnNlLnVybGpvaW4oc2VsZi51cmxfYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIi8iLmpvaW4oc2VsZi50ZXN0X3BhdGguc3BsaXQob3MucGF0aC5zZXApKSkKKworICAg
IEBwcm9wZXJ0eQorICAgIGRlZiBkaXNhYmxlZChzZWxmKToKKyAgICAgICAgcmV0dXJuIGJvb2xf
cHJvcCgiZGlzYWJsZWQiLCBzZWxmKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHJlc3RhcnRf
YWZ0ZXIoc2VsZik6CisgICAgICAgIHJldHVybiBib29sX3Byb3AoInJlc3RhcnQtYWZ0ZXIiLCBz
ZWxmKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGxlYWtzKHNlbGYpOgorICAgICAgICByZXR1
cm4gYm9vbF9wcm9wKCJsZWFrcyIsIHNlbGYpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgdGFn
cyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHRhZ3Moc2VsZikKKworICAgIEBwcm9wZXJ0eQorICAg
IGRlZiBwcmVmcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHByZWZzKHNlbGYpCisKKworY2xhc3Mg
RGlyZWN0b3J5TWFuaWZlc3QoTWFuaWZlc3RJdGVtKToKKyAgICBAcHJvcGVydHkKKyAgICBkZWYg
ZGlzYWJsZWQoc2VsZik6CisgICAgICAgIHJldHVybiBib29sX3Byb3AoImRpc2FibGVkIiwgc2Vs
ZikKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiByZXN0YXJ0X2FmdGVyKHNlbGYpOgorICAgICAg
ICByZXR1cm4gYm9vbF9wcm9wKCJyZXN0YXJ0LWFmdGVyIiwgc2VsZikKKworICAgIEBwcm9wZXJ0
eQorICAgIGRlZiBsZWFrcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGJvb2xfcHJvcCgibGVha3Mi
LCBzZWxmKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHRhZ3Moc2VsZik6CisgICAgICAgIHJl
dHVybiB0YWdzKHNlbGYpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcHJlZnMoc2VsZik6Cisg
ICAgICAgIHJldHVybiBwcmVmcyhzZWxmKQorCisKK2NsYXNzIFRlc3ROb2RlKE1hbmlmZXN0SXRl
bSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAgICAiIiJUcmVlIG5vZGUg
YXNzb2NpYXRlZCB3aXRoIGEgcGFydGljdWxhciB0ZXN0IGluIGEgbWFuaWZlc3QKKworICAgICAg
ICA6cGFyYW0gbmFtZTogbmFtZSBvZiB0aGUgdGVzdCIiIgorICAgICAgICBhc3NlcnQgbmFtZSBp
cyBub3QgTm9uZQorICAgICAgICBNYW5pZmVzdEl0ZW0uX19pbml0X18oc2VsZiwgbmFtZSkKKyAg
ICAgICAgc2VsZi51cGRhdGVkX2V4cGVjdGVkID0gW10KKyAgICAgICAgc2VsZi5uZXdfZXhwZWN0
ZWQgPSBbXQorICAgICAgICBzZWxmLnN1YnRlc3RzID0ge30KKyAgICAgICAgc2VsZi5kZWZhdWx0
X3N0YXR1cyA9IE5vbmUKKyAgICAgICAgc2VsZi5fZnJvbV9maWxlID0gVHJ1ZQorCisgICAgQHBy
b3BlcnR5CisgICAgZGVmIGlzX2VtcHR5KHNlbGYpOgorICAgICAgICByZXF1aXJlZF9rZXlzID0g
c2V0KFsidHlwZSJdKQorICAgICAgICBpZiBzZXQoc2VsZi5fZGF0YS5rZXlzKCkpICE9IHJlcXVp
cmVkX2tleXM6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIGFsbChj
aGlsZC5pc19lbXB0eSBmb3IgY2hpbGQgaW4gc2VsZi5jaGlsZHJlbikKKworICAgIEBwcm9wZXJ0
eQorICAgIGRlZiB0ZXN0X3R5cGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmdldCgidHlw
ZSIpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaWQoc2VsZik6CisgICAgICAgIHJldHVybiB1
cmxwYXJzZS51cmxqb2luKHNlbGYucGFyZW50LnVybCwgc2VsZi5uYW1lKQorCisgICAgQHByb3Bl
cnR5CisgICAgZGVmIGRpc2FibGVkKHNlbGYpOgorICAgICAgICByZXR1cm4gYm9vbF9wcm9wKCJk
aXNhYmxlZCIsIHNlbGYpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcmVzdGFydF9hZnRlcihz
ZWxmKToKKyAgICAgICAgcmV0dXJuIGJvb2xfcHJvcCgicmVzdGFydC1hZnRlciIsIHNlbGYpCisK
KyAgICBAcHJvcGVydHkKKyAgICBkZWYgbGVha3Moc2VsZik6CisgICAgICAgIHJldHVybiBib29s
X3Byb3AoImxlYWtzIiwgc2VsZikKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB0YWdzKHNlbGYp
OgorICAgICAgICByZXR1cm4gdGFncyhzZWxmKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHBy
ZWZzKHNlbGYpOgorICAgICAgICByZXR1cm4gcHJlZnMoc2VsZikKKworICAgIGRlZiBhcHBlbmQo
c2VsZiwgbm9kZSk6CisgICAgICAgICIiIkFkZCBhIHN1YnRlc3QgdG8gdGhlIGN1cnJlbnQgdGVz
dAorCisgICAgICAgIDpwYXJhbSBub2RlOiBBU1QgTm9kZSBhc3NvY2lhdGVkIHdpdGggdGhlIHN1
YnRlc3QiIiIKKyAgICAgICAgY2hpbGQgPSBNYW5pZmVzdEl0ZW0uYXBwZW5kKHNlbGYsIG5vZGUp
CisgICAgICAgIHNlbGYuc3VidGVzdHNbY2hpbGQubmFtZV0gPSBjaGlsZAorCisgICAgZGVmIGdl
dF9zdWJ0ZXN0KHNlbGYsIG5hbWUpOgorICAgICAgICAiIiJHZXQgdGhlIFN1YnRlc3ROb2RlIGNv
cnJlc3BvbmRpbmcgdG8gYSBwYXJ0aWN1bGFyIHN1YnRlc3QsIGJ5IG5hbWUKKworICAgICAgICA6
cGFyYW0gbmFtZTogTmFtZSBvZiB0aGUgbm9kZSB0byByZXR1cm4iIiIKKyAgICAgICAgaWYgbmFt
ZSBpbiBzZWxmLnN1YnRlc3RzOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuc3VidGVzdHNbbmFt
ZV0KKyAgICAgICAgcmV0dXJuIE5vbmUKKworCitjbGFzcyBTdWJ0ZXN0Tm9kZShUZXN0Tm9kZSk6
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAgICAiIiJUcmVlIG5vZGUgYXNz
b2NpYXRlZCB3aXRoIGEgcGFydGljdWxhciBzdWJ0ZXN0IGluIGEgbWFuaWZlc3QKKworICAgICAg
ICA6cGFyYW0gbmFtZTogbmFtZSBvZiB0aGUgc3VidGVzdCIiIgorICAgICAgICBUZXN0Tm9kZS5f
X2luaXRfXyhzZWxmLCBuYW1lKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGlzX2VtcHR5KHNl
bGYpOgorICAgICAgICBpZiBzZWxmLl9kYXRhOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisg
ICAgICAgIHJldHVybiBUcnVlCisKKworZGVmIGdldF9tYW5pZmVzdChtZXRhZGF0YV9yb290LCB0
ZXN0X3BhdGgsIHVybF9iYXNlLCBydW5faW5mbyk6CisgICAgIiIiR2V0IHRoZSBFeHBlY3RlZE1h
bmlmZXN0IGZvciBhIHBhcnRpY3VsYXIgdGVzdCBwYXRoLCBvciBOb25lIGlmIHRoZXJlIGlzIG5v
CisgICAgbWV0YWRhdGEgc3RvcmVkIGZvciB0aGF0IHRlc3QgcGF0aC4KKworICAgIDpwYXJhbSBt
ZXRhZGF0YV9yb290OiBBYnNvbHV0ZSBwYXRoIHRvIHRoZSByb290IG9mIHRoZSBtZXRhZGF0YSBk
aXJlY3RvcnkKKyAgICA6cGFyYW0gdGVzdF9wYXRoOiBQYXRoIHRvIHRoZSB0ZXN0KHMpIHJlbGF0
aXZlIHRvIHRoZSB0ZXN0IHJvb3QKKyAgICA6cGFyYW0gdXJsX2Jhc2U6IEJhc2UgdXJsIGZvciBz
ZXJ2aW5nIHRoZSB0ZXN0cyBpbiB0aGlzIG1hbmlmZXN0CisgICAgOnBhcmFtIHJ1bl9pbmZvOiBE
aWN0aW9uYXJ5IG9mIHByb3BlcnRpZXMgb2YgdGhlIHRlc3QgcnVuIGZvciB3aGljaCB0aGUgZXhw
ZWN0YXRpb24KKyAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyBzaG91bGQgYmUgY29tcHV0ZWQu
CisgICAgIiIiCisgICAgbWFuaWZlc3RfcGF0aCA9IGV4cGVjdGVkLmV4cGVjdGVkX3BhdGgobWV0
YWRhdGFfcm9vdCwgdGVzdF9wYXRoKQorICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKG1hbmlm
ZXN0X3BhdGgpIGFzIGY6CisgICAgICAgICAgICByZXR1cm4gc3RhdGljLmNvbXBpbGUoZiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW5faW5mbywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhX2Nsc19nZXR0ZXI9ZGF0YV9jbHNfZ2V0dGVyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfcGF0aD10ZXN0X3BhdGgsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsX2Jhc2U9dXJsX2Jhc2UpCisgICAgZXhj
ZXB0IElPRXJyb3I6CisgICAgICAgIHJldHVybiBOb25lCisKK2RlZiBnZXRfZGlyX21hbmlmZXN0
KHBhdGgsIHJ1bl9pbmZvKToKKyAgICAiIiJHZXQgdGhlIEV4cGVjdGVkTWFuaWZlc3QgZm9yIGEg
cGFydGljdWxhciB0ZXN0IHBhdGgsIG9yIE5vbmUgaWYgdGhlcmUgaXMgbm8KKyAgICBtZXRhZGF0
YSBzdG9yZWQgZm9yIHRoYXQgdGVzdCBwYXRoLgorCisgICAgOnBhcmFtIHBhdGg6IEZ1bGwgcGF0
aCB0byB0aGUgaW5pIGZpbGUKKyAgICA6cGFyYW0gcnVuX2luZm86IERpY3Rpb25hcnkgb2YgcHJv
cGVydGllcyBvZiB0aGUgdGVzdCBydW4gZm9yIHdoaWNoIHRoZSBleHBlY3RhdGlvbgorICAgICAg
ICAgICAgICAgICAgICAgdmFsdWVzIHNob3VsZCBiZSBjb21wdXRlZC4KKyAgICAiIiIKKyAgICB0
cnk6CisgICAgICAgIHdpdGggb3BlbihwYXRoKSBhcyBmOgorICAgICAgICAgICAgcmV0dXJuIHN0
YXRpYy5jb21waWxlKGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuX2lu
Zm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9jbHNfZ2V0dGVyPWxh
bWJkYSB4LHk6IERpcmVjdG9yeU1hbmlmZXN0KQorICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAg
ICByZXR1cm4gTm9uZQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rv
b2xzL3dwdHJ1bm5lci93cHRydW5uZXIvbWFuaWZlc3RpbmNsdWRlLnB5IGIvV2ViRHJpdmVyVGVz
dHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvbWFuaWZlc3RpbmNsdWRl
LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hNjhmZGViMzliYwot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRy
dW5uZXIvd3B0cnVubmVyL21hbmlmZXN0aW5jbHVkZS5weQpAQCAtMCwwICsxLDE1NCBAQAorIiIi
TWFuaWZlc3Qgc3RydWN0dXJlIHVzZWQgdG8gc3RvcmUgcGF0aHMgdGhhdCBzaG91bGQgYmUgaW5j
bHVkZWQgaW4gYSB0ZXN0IHJ1bi4KKworVGhlIG1hbmlmZXN0IGlzIHJlcHJlc2VudGVkIGJ5IGEg
dHJlZSBvZiBJbmNsdWRlTWFuaWZlc3Qgb2JqZWN0cywgdGhlIHJvb3QKK3JlcHJlc2VudGluZyB0
aGUgZmlsZSBhbmQgZWFjaCBzdWJub2RlIHJlcHJlc2VudGluZyBhIHN1YmRpcmVjdG9yeSB0aGF0
IHNob3VsZAorYmUgaW5jbHVkZWQgb3IgZXhjbHVkZWQuCisiIiIKK2ltcG9ydCBnbG9iCitpbXBv
cnQgb3MKK2ltcG9ydCB1cmxwYXJzZQorCitmcm9tIHdwdG1hbmlmZXN0Lm5vZGUgaW1wb3J0IERh
dGFOb2RlCitmcm9tIHdwdG1hbmlmZXN0LmJhY2tlbmRzIGltcG9ydCBjb25kaXRpb25hbAorZnJv
bSB3cHRtYW5pZmVzdC5iYWNrZW5kcy5jb25kaXRpb25hbCBpbXBvcnQgTWFuaWZlc3RJdGVtCisK
KworY2xhc3MgSW5jbHVkZU1hbmlmZXN0KE1hbmlmZXN0SXRlbSk6CisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIG5vZGUpOgorICAgICAgICAiIiJOb2RlIGluIGEgdHJlZSBzdHJ1Y3R1cmUgcmVwcmVz
ZW50aW5nIHRoZSBwYXRocworICAgICAgICB0aGF0IHNob3VsZCBiZSBpbmNsdWRlZCBvciBleGNs
dWRlZCBmcm9tIHRoZSB0ZXN0IHJ1bi4KKworICAgICAgICA6cGFyYW0gbm9kZTogQVNUIE5vZGUg
Y29ycmVzcG9uZGluZyB0byB0aGlzIE5vZGUuCisgICAgICAgICIiIgorICAgICAgICBNYW5pZmVz
dEl0ZW0uX19pbml0X18oc2VsZiwgbm9kZSkKKyAgICAgICAgc2VsZi5jaGlsZF9tYXAgPSB7fQor
CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGNyZWF0ZShjbHMpOgorICAgICAgICAiIiJDcmVh
dGUgYW4gZW1wdHkgSW5jbHVkZU1hbmlmZXN0IHRyZWUiIiIKKyAgICAgICAgbm9kZSA9IERhdGFO
b2RlKE5vbmUpCisgICAgICAgIHJldHVybiBjbHMobm9kZSkKKworICAgIGRlZiBzZXRfZGVmYXVs
dHMoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLmhhc19rZXkoInNraXAiKToKKyAgICAgICAg
ICAgIHNlbGYuc2V0KCJza2lwIiwgIkZhbHNlIikKKworICAgIGRlZiBhcHBlbmQoc2VsZiwgY2hp
bGQpOgorICAgICAgICBNYW5pZmVzdEl0ZW0uYXBwZW5kKHNlbGYsIGNoaWxkKQorICAgICAgICBz
ZWxmLmNoaWxkX21hcFtjaGlsZC5uYW1lXSA9IGNoaWxkCisgICAgICAgIGFzc2VydCBsZW4oc2Vs
Zi5jaGlsZF9tYXApID09IGxlbihzZWxmLmNoaWxkcmVuKQorCisgICAgZGVmIGluY2x1ZGUoc2Vs
ZiwgdGVzdCk6CisgICAgICAgICIiIlJldHVybiBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVy
IGEgcGFydGljdWxhciB0ZXN0IHNob3VsZCBiZQorICAgICAgICBpbmNsdWRlZCBpbiBhIHRlc3Qg
cnVuLCBiYXNlZCBvbiB0aGUgSW5jbHVkZU1hbmlmZXN0IHRyZWUgcm9vdGVkIG9uCisgICAgICAg
IHRoaXMgb2JqZWN0LgorCisgICAgICAgIDpwYXJhbSB0ZXN0OiBUaGUgdGVzdCBvYmplY3QiIiIK
KyAgICAgICAgcGF0aF9jb21wb25lbnRzID0gc2VsZi5fZ2V0X2NvbXBvbmVudHModGVzdC51cmwp
CisgICAgICAgIHJldHVybiBzZWxmLl9pbmNsdWRlKHRlc3QsIHBhdGhfY29tcG9uZW50cykKKwor
ICAgIGRlZiBfaW5jbHVkZShzZWxmLCB0ZXN0LCBwYXRoX2NvbXBvbmVudHMpOgorICAgICAgICBp
ZiBwYXRoX2NvbXBvbmVudHM6CisgICAgICAgICAgICBuZXh0X3BhdGhfcGFydCA9IHBhdGhfY29t
cG9uZW50cy5wb3AoKQorICAgICAgICAgICAgaWYgbmV4dF9wYXRoX3BhcnQgaW4gc2VsZi5jaGls
ZF9tYXA6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuY2hpbGRfbWFwW25leHRfcGF0aF9w
YXJ0XS5faW5jbHVkZSh0ZXN0LCBwYXRoX2NvbXBvbmVudHMpCisKKyAgICAgICAgbm9kZSA9IHNl
bGYKKyAgICAgICAgd2hpbGUgbm9kZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAg
ICBza2lwX3ZhbHVlID0gc2VsZi5nZXQoInNraXAiLCB7InRlc3RfdHlwZSI6IHRlc3QuaXRlbV90
eXBlfSkubG93ZXIoKQorICAgICAgICAgICAgICAgIGFzc2VydCBza2lwX3ZhbHVlIGluICgidHJ1
ZSIsICJmYWxzZSIpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNraXBfdmFsdWUgIT0gInRydWUi
CisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgaWYgbm9kZS5w
YXJlbnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLnBhcmVu
dAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICMgSW5jbHVkZSBi
eSBkZWZhdWx0CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgX2dl
dF9jb21wb25lbnRzKHNlbGYsIHVybCk6CisgICAgICAgIHJ2ID0gW10KKyAgICAgICAgdXJsX3Bh
cnRzID0gdXJscGFyc2UudXJsc3BsaXQodXJsKQorICAgICAgICB2YXJpYW50ID0gIiIKKyAgICAg
ICAgaWYgdXJsX3BhcnRzLnF1ZXJ5OgorICAgICAgICAgICAgdmFyaWFudCArPSAiPyIgKyB1cmxf
cGFydHMucXVlcnkKKyAgICAgICAgaWYgdXJsX3BhcnRzLmZyYWdtZW50OgorICAgICAgICAgICAg
dmFyaWFudCArPSAiIyIgKyB1cmxfcGFydHMuZnJhZ21lbnQKKyAgICAgICAgaWYgdmFyaWFudDoK
KyAgICAgICAgICAgIHJ2LmFwcGVuZCh2YXJpYW50KQorICAgICAgICBydi5leHRlbmQoW2l0ZW0g
Zm9yIGl0ZW0gaW4gcmV2ZXJzZWQodXJsX3BhcnRzLnBhdGguc3BsaXQoIi8iKSkgaWYgaXRlbV0p
CisgICAgICAgIHJldHVybiBydgorCisgICAgZGVmIF9hZGRfcnVsZShzZWxmLCB0ZXN0X21hbmlm
ZXN0cywgdXJsLCBkaXJlY3Rpb24pOgorICAgICAgICBtYXliZV9wYXRoID0gb3MucGF0aC5qb2lu
KG9zLnBhdGguYWJzcGF0aChvcy5jdXJkaXIpLCB1cmwpCisgICAgICAgIHJlc3QsIGxhc3QgPSBv
cy5wYXRoLnNwbGl0KG1heWJlX3BhdGgpCisgICAgICAgIGZyYWdtZW50ID0gcXVlcnkgPSBOb25l
CisgICAgICAgIGlmICIjIiBpbiBsYXN0OgorICAgICAgICAgICAgbGFzdCwgZnJhZ21lbnQgPSBs
YXN0LnJzcGxpdCgiIyIsIDEpCisgICAgICAgIGlmICI/IiBpbiBsYXN0OgorICAgICAgICAgICAg
bGFzdCwgcXVlcnkgPSBsYXN0LnJzcGxpdCgiPyIsIDEpCisKKyAgICAgICAgbWF5YmVfcGF0aCA9
IG9zLnBhdGguam9pbihyZXN0LCBsYXN0KQorICAgICAgICBwYXRocyA9IGdsb2IuZ2xvYihtYXli
ZV9wYXRoKQorCisgICAgICAgIGlmIHBhdGhzOgorICAgICAgICAgICAgdXJscyA9IFtdCisgICAg
ICAgICAgICBmb3IgcGF0aCBpbiBwYXRoczoKKyAgICAgICAgICAgICAgICBmb3IgbWFuaWZlc3Qs
IGRhdGEgaW4gdGVzdF9tYW5pZmVzdHMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAg
IGZvdW5kID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgcmVsX3BhdGggPSBvcy5wYXRoLnJl
bHBhdGgocGF0aCwgZGF0YVsidGVzdHNfcGF0aCJdKQorICAgICAgICAgICAgICAgICAgICBpdGVy
YXRvciA9IG1hbmlmZXN0Lml0ZXJwYXRoIGlmIG9zLnBhdGguaXNmaWxlKHBhdGgpIGVsc2UgbWFu
aWZlc3QuaXRlcmRpcgorICAgICAgICAgICAgICAgICAgICBmb3IgdGVzdCBpbiBpdGVyYXRvcihy
ZWxfcGF0aCk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgaGFzYXR0cih0ZXN0LCAi
dXJsIik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHVybCA9IHRlc3QudXJsCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBx
dWVyeSBvciBmcmFnbWVudDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWQgPSB1
cmxwYXJzZS51cmxwYXJzZSh1cmwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChx
dWVyeSBhbmQgcXVlcnkgIT0gcGFyc2VkLnF1ZXJ5KSBvcgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoZnJhZ21lbnQgYW5kIGZyYWdtZW50ICE9IHBhcnNlZC5mcmFnbWVudCkpOgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAg
ICAgICAgICAgdXJscy5hcHBlbmQodXJsKQorICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQg
PSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGlmIGZvdW5kOgorICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWsKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHVybHMgPSBbdXJsXQorCisg
ICAgICAgIGFzc2VydCBkaXJlY3Rpb24gaW4gKCJpbmNsdWRlIiwgImV4Y2x1ZGUiKQorCisgICAg
ICAgIGZvciB1cmwgaW4gdXJsczoKKyAgICAgICAgICAgIGNvbXBvbmVudHMgPSBzZWxmLl9nZXRf
Y29tcG9uZW50cyh1cmwpCisKKyAgICAgICAgICAgIG5vZGUgPSBzZWxmCisgICAgICAgICAgICB3
aGlsZSBjb21wb25lbnRzOgorICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IGNvbXBvbmVudHMu
cG9wKCkKKyAgICAgICAgICAgICAgICBpZiBjb21wb25lbnQgbm90IGluIG5vZGUuY2hpbGRfbWFw
OgorICAgICAgICAgICAgICAgICAgICBuZXdfbm9kZSA9IEluY2x1ZGVNYW5pZmVzdChEYXRhTm9k
ZShjb21wb25lbnQpKQorICAgICAgICAgICAgICAgICAgICBub2RlLmFwcGVuZChuZXdfbm9kZSkK
KyAgICAgICAgICAgICAgICAgICAgbmV3X25vZGUuc2V0KCJza2lwIiwgbm9kZS5nZXQoInNraXAi
LCB7fSkpCisKKyAgICAgICAgICAgICAgICBub2RlID0gbm9kZS5jaGlsZF9tYXBbY29tcG9uZW50
XQorCisgICAgICAgICAgICBza2lwID0gRmFsc2UgaWYgZGlyZWN0aW9uID09ICJpbmNsdWRlIiBl
bHNlIFRydWUKKyAgICAgICAgICAgIG5vZGUuc2V0KCJza2lwIiwgc3RyKHNraXApKQorCisgICAg
ZGVmIGFkZF9pbmNsdWRlKHNlbGYsIHRlc3RfbWFuaWZlc3RzLCB1cmxfcHJlZml4KToKKyAgICAg
ICAgIiIiQWRkIGEgcnVsZSBpbmRpY2F0aW5nIHRoYXQgdGVzdHMgdW5kZXIgYSB1cmwgcGF0aAor
ICAgICAgICBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGVzdCBydW5zCisKKyAgICAgICAgOnBhcmFt
IHVybF9wcmVmaXg6IFRoZSB1cmwgcHJlZml4IHRvIGluY2x1ZGUKKyAgICAgICAgIiIiCisgICAg
ICAgIHJldHVybiBzZWxmLl9hZGRfcnVsZSh0ZXN0X21hbmlmZXN0cywgdXJsX3ByZWZpeCwgImlu
Y2x1ZGUiKQorCisgICAgZGVmIGFkZF9leGNsdWRlKHNlbGYsIHRlc3RfbWFuaWZlc3RzLCB1cmxf
cHJlZml4KToKKyAgICAgICAgIiIiQWRkIGEgcnVsZSBpbmRpY2F0aW5nIHRoYXQgdGVzdHMgdW5k
ZXIgYSB1cmwgcGF0aAorICAgICAgICBzaG91bGQgYmUgZXhjbHVkZWQgZnJvbSB0ZXN0IHJ1bnMK
KworICAgICAgICA6cGFyYW0gdXJsX3ByZWZpeDogVGhlIHVybCBwcmVmaXggdG8gZXhjbHVkZQor
ICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2FkZF9ydWxlKHRlc3RfbWFuaWZlc3Rz
LCB1cmxfcHJlZml4LCAiZXhjbHVkZSIpCisKKworZGVmIGdldF9tYW5pZmVzdChtYW5pZmVzdF9w
YXRoKToKKyAgICB3aXRoIG9wZW4obWFuaWZlc3RfcGF0aCkgYXMgZjoKKyAgICAgICAgcmV0dXJu
IGNvbmRpdGlvbmFsLmNvbXBpbGUoZiwgZGF0YV9jbHNfZ2V0dGVyPWxhbWJkYSB4LCB5OiBJbmNs
dWRlTWFuaWZlc3QpCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9v
bHMvd3B0cnVubmVyL3dwdHJ1bm5lci9tYW5pZmVzdHVwZGF0ZS5weSBiL1dlYkRyaXZlclRlc3Rz
L2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL21hbmlmZXN0dXBkYXRlLnB5
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wN2U2MjNjNWQxYgotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5u
ZXIvd3B0cnVubmVyL21hbmlmZXN0dXBkYXRlLnB5CkBAIC0wLDAgKzEsNDYwIEBACitpbXBvcnQg
b3MKK2ltcG9ydCB1cmxwYXJzZQorZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZSwg
ZGVmYXVsdGRpY3QKKworZnJvbSB3cHRtYW5pZmVzdC5ub2RlIGltcG9ydCAoRGF0YU5vZGUsIENv
bmRpdGlvbmFsTm9kZSwgQmluYXJ5RXhwcmVzc2lvbk5vZGUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBCaW5hcnlPcGVyYXRvck5vZGUsIFZhcmlhYmxlTm9kZSwgU3RyaW5nTm9kZSwg
TnVtYmVyTm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVuYXJ5RXhwcmVzc2lv
bk5vZGUsIFVuYXJ5T3BlcmF0b3JOb2RlLCBLZXlWYWx1ZU5vZGUpCitmcm9tIHdwdG1hbmlmZXN0
LmJhY2tlbmRzIGltcG9ydCBjb25kaXRpb25hbAorZnJvbSB3cHRtYW5pZmVzdC5iYWNrZW5kcy5j
b25kaXRpb25hbCBpbXBvcnQgTWFuaWZlc3RJdGVtCisKK2ltcG9ydCBleHBlY3RlZAorCisiIiJN
YW5pZmVzdCBzdHJ1Y3R1cmUgdXNlZCB0byB1cGRhdGUgdGhlIGV4cGVjdGVkIHJlc3VsdHMgb2Yg
YSB0ZXN0CisKK0VhY2ggbWFuaWZlc3QgZmlsZSBpcyByZXByZXNlbnRlZCBieSBhbiBFeHBlY3Rl
ZE1hbmlmZXN0IHRoYXQgaGFzIG9uZQorb3IgbW9yZSBUZXN0Tm9kZSBjaGlsZHJlbiwgb25lIHBl
ciB0ZXN0IGluIHRoZSBtYW5pZmVzdC4gIEVhY2gKK1Rlc3ROb2RlIGhhcyB6ZXJvIG9yIG1vcmUg
U3VidGVzdE5vZGUgY2hpbGRyZW4sIG9uZSBmb3IgZWFjaCBrbm93bgorc3VidGVzdCBvZiB0aGUg
dGVzdC4KKworSW4gdGhlc2UgcmVwcmVzZW50YXRpb25zLCBjb25kaXRpb25hbHMgZXhwcmVzc2lv
bnMgaW4gdGhlIG1hbmlmZXN0IGFyZQorbm90IGV2YWx1YXRlZCB1cGZyb250IGJ1dCBzdG9yZWQg
YXMgcHl0aG9uIGZ1bmN0aW9ucyB0byBiZSBldmFsdWF0ZWQKK2F0IHJ1bnRpbWUuCisKK1doZW4g
YSByZXN1bHQgZm9yIGEgdGVzdCBpcyB0byBiZSB1cGRhdGVkIHNldF9yZXN1bHQgb24gdGhlCitb
U3ViXVRlc3ROb2RlIGlzIGNhbGxlZCB0byBzdG9yZSB0aGUgbmV3IHJlc3VsdCwgYWxvbmdzaWRl
IHRoZQorZXhpc3RpbmcgY29uZGl0aW9uYWwgdGhhdCByZXN1bHQncyBydW4gaW5mbyBtYXRjaGVk
LCBpZiBhbnkuIE9uY2UgYWxsCituZXcgcmVzdWx0cyBhcmUga25vd24sIGNvYWxlc2NlX2V4cGVj
dGVkIGlzIGNhbGxlZCB0byBjb21wdXRlIHRoZSBuZXcKK3NldCBvZiByZXN1bHRzIGFuZCBjb25k
aXRpb25hbHMuIFRoZSBBU1Qgb2YgdGhlIHVuZGVybHlpbmcgcGFyc2VkIG1hbmlmZXN0CitpcyB1
cGRhdGVkIHdpdGggdGhlIGNoYW5nZXMsIGFuZCB0aGUgcmVzdWx0IGlzIHNlcmlhbGlzZWQgdG8g
YSBmaWxlLgorIiIiCisKK2NsYXNzIENvbmRpdGlvbkVycm9yKEV4Y2VwdGlvbik6CisgICAgcGFz
cworCitSZXN1bHQgPSBuYW1lZHR1cGxlKCJSZXN1bHQiLCBbInJ1bl9pbmZvIiwgInN0YXR1cyJd
KQorCisKK2RlZiBkYXRhX2Nsc19nZXR0ZXIob3V0cHV0X25vZGUsIHZpc2l0ZWRfbm9kZSk6Cisg
ICAgIyB2aXNpdGVkX25vZGUgaXMgaW50ZW50aW9uYWxseSB1bnVzZWQKKyAgICBpZiBvdXRwdXRf
bm9kZSBpcyBOb25lOgorICAgICAgICByZXR1cm4gRXhwZWN0ZWRNYW5pZmVzdAorICAgIGVsaWYg
aXNpbnN0YW5jZShvdXRwdXRfbm9kZSwgRXhwZWN0ZWRNYW5pZmVzdCk6CisgICAgICAgIHJldHVy
biBUZXN0Tm9kZQorICAgIGVsaWYgaXNpbnN0YW5jZShvdXRwdXRfbm9kZSwgVGVzdE5vZGUpOgor
ICAgICAgICByZXR1cm4gU3VidGVzdE5vZGUKKyAgICBlbHNlOgorICAgICAgICByYWlzZSBWYWx1
ZUVycm9yCisKKworY2xhc3MgRXhwZWN0ZWRNYW5pZmVzdChNYW5pZmVzdEl0ZW0pOgorICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBub2RlLCB0ZXN0X3BhdGg9Tm9uZSwgdXJsX2Jhc2U9Tm9uZSwgcHJv
cGVydHlfb3JkZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgYm9vbGVhbl9wcm9wZXJ0aWVzPU5v
bmUpOgorICAgICAgICAiIiJPYmplY3QgcmVwcmVzZW50aW5nIGFsbCB0aGUgdGVzdHMgaW4gYSBw
YXJ0aWN1bGFyIG1hbmlmZXN0CisKKyAgICAgICAgOnBhcmFtIG5vZGU6IEFTVCBOb2RlIGFzc29j
aWF0ZWQgd2l0aCB0aGlzIG9iamVjdC4gSWYgdGhpcyBpcyBOb25lLAorICAgICAgICAgICAgICAg
ICAgICAgYSBuZXcgQVNUIGlzIGNyZWF0ZWQgdG8gYXNzb2NpYXRlIHdpdGggdGhpcyBtYW5pZmVz
dC4KKyAgICAgICAgOnBhcmFtIHRlc3RfcGF0aDogUGF0aCBvZiB0aGUgdGVzdCBmaWxlIGFzc29j
aWF0ZWQgd2l0aCB0aGlzIG1hbmlmZXN0LgorICAgICAgICA6cGFyYW0gdXJsX2Jhc2U6IEJhc2Ug
dXJsIGZvciBzZXJ2aW5nIHRoZSB0ZXN0cyBpbiB0aGlzIG1hbmlmZXN0LgorICAgICAgICA6cGFy
YW0gcHJvcGVydHlfb3JkZXI6IExpc3Qgb2YgcHJvcGVydGllcyB0byB1c2UgaW4gZXhwZWN0YXRp
b24gbWV0YWRhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIG1vc3QgdG8g
bGVhc3Qgc2lnbmlmaWNhbnQuCisgICAgICAgIDpwYXJhbSBib29sZWFuX3Byb3BlcnRpZXM6IFNl
dCBvZiBwcm9wZXJ0aWVzIGluIHByb3BlcnR5X29yZGVyIHRoYXQgc2hvdWxkCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJlIHRyZWF0ZWQgYXMgYm9vbGVhbi4KKyAgICAgICAg
IiIiCisgICAgICAgIGlmIG5vZGUgaXMgTm9uZToKKyAgICAgICAgICAgIG5vZGUgPSBEYXRhTm9k
ZShOb25lKQorICAgICAgICBNYW5pZmVzdEl0ZW0uX19pbml0X18oc2VsZiwgbm9kZSkKKyAgICAg
ICAgc2VsZi5jaGlsZF9tYXAgPSB7fQorICAgICAgICBzZWxmLnRlc3RfcGF0aCA9IHRlc3RfcGF0
aAorICAgICAgICBzZWxmLnVybF9iYXNlID0gdXJsX2Jhc2UKKyAgICAgICAgYXNzZXJ0IHNlbGYu
dXJsX2Jhc2UgaXMgbm90IE5vbmUKKyAgICAgICAgc2VsZi5tb2RpZmllZCA9IEZhbHNlCisgICAg
ICAgIHNlbGYuYm9vbGVhbl9wcm9wZXJ0aWVzID0gYm9vbGVhbl9wcm9wZXJ0aWVzCisgICAgICAg
IHNlbGYucHJvcGVydHlfb3JkZXIgPSBwcm9wZXJ0eV9vcmRlcgorCisgICAgZGVmIGFwcGVuZChz
ZWxmLCBjaGlsZCk6CisgICAgICAgIE1hbmlmZXN0SXRlbS5hcHBlbmQoc2VsZiwgY2hpbGQpCisg
ICAgICAgIGlmIGNoaWxkLmlkIGluIHNlbGYuY2hpbGRfbWFwOgorICAgICAgICAgICAgcHJpbnQg
Ildhcm5pbmc6IER1cGxpY2F0ZSBoZWFkaW5nICVzIiAlIGNoaWxkLmlkCisgICAgICAgIHNlbGYu
Y2hpbGRfbWFwW2NoaWxkLmlkXSA9IGNoaWxkCisKKyAgICBkZWYgX3JlbW92ZV9jaGlsZChzZWxm
LCBjaGlsZCk6CisgICAgICAgIGRlbCBzZWxmLmNoaWxkX21hcFtjaGlsZC5pZF0KKyAgICAgICAg
TWFuaWZlc3RJdGVtLl9yZW1vdmVfY2hpbGQoc2VsZiwgY2hpbGQpCisKKyAgICBkZWYgZ2V0X3Rl
c3Qoc2VsZiwgdGVzdF9pZCk6CisgICAgICAgICIiIlJldHVybiBhIFRlc3ROb2RlIGJ5IHRlc3Qg
aWQsIG9yIE5vbmUgaWYgbm8gdGVzdCBtYXRjaGVzCisKKyAgICAgICAgOnBhcmFtIHRlc3RfaWQ6
IFRoZSBpZCBvZiB0aGUgdGVzdCB0byBsb29rIHVwIiIiCisKKyAgICAgICAgcmV0dXJuIHNlbGYu
Y2hpbGRfbWFwW3Rlc3RfaWRdCisKKyAgICBkZWYgaGFzX3Rlc3Qoc2VsZiwgdGVzdF9pZCk6Cisg
ICAgICAgICIiIkJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBjdXJyZW50IHRlc3QgaGFz
IGEga25vd24gY2hpbGQgdGVzdAorICAgICAgICB3aXRoIGlkIHRlc3QgaWQKKworICAgICAgICA6
cGFyYW0gdGVzdF9pZDogVGhlIGlkIG9mIHRoZSB0ZXN0IHRvIGxvb2sgdXAiIiIKKworICAgICAg
ICByZXR1cm4gdGVzdF9pZCBpbiBzZWxmLmNoaWxkX21hcAorCisgICAgQHByb3BlcnR5CisgICAg
ZGVmIHVybChzZWxmKToKKyAgICAgICAgcmV0dXJuIHVybHBhcnNlLnVybGpvaW4oc2VsZi51cmxf
YmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi8iLmpvaW4oc2VsZi50ZXN0
X3BhdGguc3BsaXQob3MucGF0aC5zZXApKSkKKworY2xhc3MgVGVzdE5vZGUoTWFuaWZlc3RJdGVt
KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbm9kZSk6CisgICAgICAgICIiIlRyZWUgbm9kZSBh
c3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1bGFyIHRlc3QgaW4gYSBtYW5pZmVzdAorCisgICAgICAg
IDpwYXJhbSBub2RlOiBBU1Qgbm9kZSBhc3NvY2lhdGVkIHdpdGggdGhlIHRlc3QiIiIKKworICAg
ICAgICBNYW5pZmVzdEl0ZW0uX19pbml0X18oc2VsZiwgbm9kZSkKKyAgICAgICAgc2VsZi51cGRh
dGVkX2V4cGVjdGVkID0gW10KKyAgICAgICAgc2VsZi5uZXdfZXhwZWN0ZWQgPSBbXQorICAgICAg
ICBzZWxmLnN1YnRlc3RzID0ge30KKyAgICAgICAgc2VsZi5kZWZhdWx0X3N0YXR1cyA9IE5vbmUK
KyAgICAgICAgc2VsZi5fZnJvbV9maWxlID0gVHJ1ZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAg
ZGVmIGNyZWF0ZShjbHMsIHRlc3RfdHlwZSwgdGVzdF9pZCk6CisgICAgICAgICIiIkNyZWF0ZSBh
IFRlc3ROb2RlIGNvcnJlc3BvbmRpbmcgdG8gYSBnaXZlbiB0ZXN0CisKKyAgICAgICAgOnBhcmFt
IHRlc3RfdHlwZTogVGhlIHR5cGUgb2YgdGhlIHRlc3QKKyAgICAgICAgOnBhcmFtIHRlc3RfaWQ6
IFRoZSBpZCBvZiB0aGUgdGVzdCIiIgorCisgICAgICAgIHVybCA9IHRlc3RfaWQKKyAgICAgICAg
bmFtZSA9IHVybC5zcGxpdCgiLyIpWy0xXQorICAgICAgICBub2RlID0gRGF0YU5vZGUobmFtZSkK
KyAgICAgICAgc2VsZiA9IGNscyhub2RlKQorCisgICAgICAgIHNlbGYuc2V0KCJ0eXBlIiwgdGVz
dF90eXBlKQorICAgICAgICBzZWxmLl9mcm9tX2ZpbGUgPSBGYWxzZQorICAgICAgICByZXR1cm4g
c2VsZgorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGlzX2VtcHR5KHNlbGYpOgorICAgICAgICBy
ZXF1aXJlZF9rZXlzID0gc2V0KFsidHlwZSJdKQorICAgICAgICBpZiBzZXQoc2VsZi5fZGF0YS5r
ZXlzKCkpICE9IHJlcXVpcmVkX2tleXM6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAg
ICAgcmV0dXJuIGFsbChjaGlsZC5pc19lbXB0eSBmb3IgY2hpbGQgaW4gc2VsZi5jaGlsZHJlbikK
KworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB0ZXN0X3R5cGUoc2VsZik6CisgICAgICAgICIiIlRo
ZSB0eXBlIG9mIHRoZSB0ZXN0IHJlcHJlc2VudGVkIGJ5IHRoaXMgVGVzdE5vZGUiIiIKKworICAg
ICAgICByZXR1cm4gc2VsZi5nZXQoInR5cGUiLCBOb25lKQorCisgICAgQHByb3BlcnR5CisgICAg
ZGVmIGlkKHNlbGYpOgorICAgICAgICAiIiJUaGUgaWQgb2YgdGhlIHRlc3QgcmVwcmVzZW50ZWQg
YnkgdGhpcyBUZXN0Tm9kZSIiIgorICAgICAgICByZXR1cm4gdXJscGFyc2UudXJsam9pbihzZWxm
LnBhcmVudC51cmwsIHNlbGYubmFtZSkKKworICAgIGRlZiBkaXNhYmxlZChzZWxmLCBydW5faW5m
byk6CisgICAgICAgICIiIkJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoaXMgdGVzdCBpcyBk
aXNhYmxlZCB3aGVuIHJ1biBpbiBhbgorICAgICAgICBlbnZpcm9ubWVudCB3aXRoIHRoZSBnaXZl
biBydW5faW5mbworCisgICAgICAgIDpwYXJhbSBydW5faW5mbzogRGljdGlvbmFyeSBvZiBydW5f
aW5mbyBwYXJhbWV0ZXJzIiIiCisKKyAgICAgICAgcmV0dXJuIHNlbGYuZ2V0KCJkaXNhYmxlZCIs
IHJ1bl9pbmZvKSBpcyBub3QgTm9uZQorCisgICAgZGVmIHNldF9yZXN1bHQoc2VsZiwgcnVuX2lu
Zm8sIHJlc3VsdCk6CisgICAgICAgICIiIlNldCB0aGUgcmVzdWx0IG9mIHRoZSB0ZXN0IGluIGEg
cGFydGljdWxhciBydW4KKworICAgICAgICA6cGFyYW0gcnVuX2luZm86IERpY3Rpb25hcnkgb2Yg
cnVuX2luZm8gcGFyYW1ldGVycyBjb3JyZXNwb25kaW5nCisgICAgICAgICAgICAgICAgICAgICAg
ICAgdG8gdGhpcyBydW4KKyAgICAgICAgOnBhcmFtIHJlc3VsdDogU3RhdHVzIG9mIHRoZSB0ZXN0
IGluIHRoaXMgcnVuIiIiCisKKyAgICAgICAgaWYgc2VsZi5kZWZhdWx0X3N0YXR1cyBpcyBub3Qg
Tm9uZToKKyAgICAgICAgICAgIGFzc2VydCBzZWxmLmRlZmF1bHRfc3RhdHVzID09IHJlc3VsdC5k
ZWZhdWx0X2V4cGVjdGVkCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmRlZmF1bHRf
c3RhdHVzID0gcmVzdWx0LmRlZmF1bHRfZXhwZWN0ZWQKKworICAgICAgICAjIEFkZCB0aGlzIHJl
c3VsdCB0byB0aGUgbGlzdCBvZiByZXN1bHRzIHNhdGlzZnlpbmcKKyAgICAgICAgIyBhbnkgY29u
ZGl0aW9uIGluIHRoZSBsaXN0IG9mIHVwZGF0ZWQgcmVzdWx0cyBpdCBtYXRjaGVzCisgICAgICAg
IGZvciAoY29uZCwgdmFsdWVzKSBpbiBzZWxmLnVwZGF0ZWRfZXhwZWN0ZWQ6CisgICAgICAgICAg
ICBpZiBjb25kKHJ1bl9pbmZvKToKKyAgICAgICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKFJlc3Vs
dChydW5faW5mbywgcmVzdWx0LnN0YXR1cykpCisgICAgICAgICAgICAgICAgaWYgcmVzdWx0LnN0
YXR1cyAhPSBjb25kLnZhbHVlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnJvb3QubW9kaWZp
ZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgICMgV2UgZGlkbid0IGZpbmQgYSBwcmV2aW91cyB2YWx1ZSBmb3IgdGhpcworICAgICAgICAg
ICAgc2VsZi5uZXdfZXhwZWN0ZWQuYXBwZW5kKFJlc3VsdChydW5faW5mbywgcmVzdWx0LnN0YXR1
cykpCisgICAgICAgICAgICBzZWxmLnJvb3QubW9kaWZpZWQgPSBUcnVlCisKKyAgICBkZWYgY29h
bGVzY2VfZXhwZWN0ZWQoc2VsZik6CisgICAgICAgICIiIlVwZGF0ZSB0aGUgdW5kZXJseWluZyBt
YW5pZmVzdCBBU1QgZm9yIHRoaXMgdGVzdCBiYXNlZCBvbiBhbGwgdGhlCisgICAgICAgIGFkZGVk
IHJlc3VsdHMuCisKKyAgICAgICAgVGhpcyB3aWxsIHVwZGF0ZSBleGlzdGluZyBjb25kaXRpb25h
bHMgaWYgdGhleSBnb3QgdGhlIHNhbWUgcmVzdWx0IGluCisgICAgICAgIGFsbCBtYXRjaGluZyBy
dW5zIGluIHRoZSB1cGRhdGVkIHJlc3VsdHMsIHdpbGwgZGVsZXRlIGV4aXN0aW5nIGNvbmRpdGlv
bmFscworICAgICAgICB0aGF0IGdldCBtb3JlIHRoYW4gb25lIGRpZmZlcmVudCByZXN1bHQgaW4g
dGhlIHVwZGF0ZWQgcnVuLCBhbmQgYWRkIG5ldworICAgICAgICBjb25kaXRpb25hbHMgZm9yIGFu
eXRoaW5nIHRoYXQgZG9lc24ndCBtYXRjaCBhbiBleGlzdGluZyBjb25kaXRpb25hbC4KKworICAg
ICAgICBDb25kaXRpb25hbHMgbm90IG1hdGNoZWQgYnkgYW55IGFkZGVkIHJlc3VsdCBhcmUgbm90
IGNoYW5nZWQuIiIiCisKKyAgICAgICAgZmluYWxfY29uZGl0aW9uYWxzID0gW10KKworICAgICAg
ICB0cnk6CisgICAgICAgICAgICB1bmNvbmRpdGlvbmFsX3N0YXR1cyA9IHNlbGYuZ2V0KCJleHBl
Y3RlZCIpCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHVuY29uZGl0aW9u
YWxfc3RhdHVzID0gc2VsZi5kZWZhdWx0X3N0YXR1cworCisgICAgICAgIGZvciBjb25kaXRpb25h
bF92YWx1ZSwgcmVzdWx0cyBpbiBzZWxmLnVwZGF0ZWRfZXhwZWN0ZWQ6CisgICAgICAgICAgICBp
ZiBub3QgcmVzdWx0czoKKyAgICAgICAgICAgICAgICAjIFRoZSBjb25kaXRpb25hbCBkaWRuJ3Qg
bWF0Y2ggYW55dGhpbmcgaW4gdGhlc2UgcnVucyBzbyBsZWF2ZSBpdCBhbG9uZQorICAgICAgICAg
ICAgICAgIGZpbmFsX2NvbmRpdGlvbmFscy5hcHBlbmQoY29uZGl0aW9uYWxfdmFsdWUpCisgICAg
ICAgICAgICBlbGlmIGFsbChyZXN1bHRzWzBdLnN0YXR1cyA9PSByZXN1bHQuc3RhdHVzIGZvciBy
ZXN1bHQgaW4gcmVzdWx0cyk6CisgICAgICAgICAgICAgICAgIyBBbGwgdGhlIG5ldyB2YWx1ZXMg
Zm9yIHRoaXMgY29uZGl0aW9uYWwgbWF0Y2hlZCwgc28gdXBkYXRlIHRoZSBub2RlCisgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gcmVzdWx0c1swXQorICAgICAgICAgICAgICAgIGlmIChyZXN1bHQu
c3RhdHVzID09IHVuY29uZGl0aW9uYWxfc3RhdHVzIGFuZAorICAgICAgICAgICAgICAgICAgICBj
b25kaXRpb25hbF92YWx1ZS5jb25kaXRpb25fbm9kZSBpcyBub3QgTm9uZSk6CisgICAgICAgICAg
ICAgICAgICAgIGlmICJleHBlY3RlZCIgaW4gc2VsZjoKKyAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGYucmVtb3ZlX3ZhbHVlKCJleHBlY3RlZCIsIGNvbmRpdGlvbmFsX3ZhbHVlKQorICAgICAg
ICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbmFsX3ZhbHVlLnZh
bHVlID0gcmVzdWx0LnN0YXR1cworICAgICAgICAgICAgICAgICAgICBmaW5hbF9jb25kaXRpb25h
bHMuYXBwZW5kKGNvbmRpdGlvbmFsX3ZhbHVlKQorICAgICAgICAgICAgZWxpZiBjb25kaXRpb25h
bF92YWx1ZS5jb25kaXRpb25fbm9kZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAjIEJs
b3cgYXdheSB0aGUgZXhpc3RpbmcgY29uZGl0aW9uIGFuZCByZWJ1aWxkIGZyb20gc2NyYXRjaAor
ICAgICAgICAgICAgICAgICMgVGhpcyBpc24ndCBzdXJlIHRvIHdvcmsgaWYgd2UgaGF2ZSBhIGNv
bmRpdGlvbmFsIGxhdGVyIHRoYXQgbWF0Y2hlcworICAgICAgICAgICAgICAgICMgdGhlc2UgdmFs
dWVzIHRvbywgYnV0IHdlIGNhbiBob3BlLCB2ZXJpZnkgdGhhdCB3ZSBnZXQgdGhlIHJlc3VsdHMK
KyAgICAgICAgICAgICAgICAjIHdlIGV4cGVjdCwgYW5kIGlmIG5vdCBsZXQgYSBodW1hbiBzb3J0
IGl0IG91dAorICAgICAgICAgICAgICAgIHNlbGYucmVtb3ZlX3ZhbHVlKCJleHBlY3RlZCIsIGNv
bmRpdGlvbmFsX3ZhbHVlKQorICAgICAgICAgICAgICAgIHNlbGYubmV3X2V4cGVjdGVkLmV4dGVu
ZChyZXN1bHRzKQorICAgICAgICAgICAgZWxpZiBjb25kaXRpb25hbF92YWx1ZS5jb25kaXRpb25f
bm9kZSBpcyBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYubmV3X2V4cGVjdGVkLmV4dGVuZChy
ZXN1bHQgZm9yIHJlc3VsdCBpbiByZXN1bHRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIHJlc3VsdC5zdGF0dXMgIT0gdW5jb25kaXRpb25hbF9zdGF0dXMpCisK
KyAgICAgICAgIyBJdCBpcyBhbiBpbnZhcmlhbnQgdGhhdCBub3RoaW5nIGluIG5ld19leHBlY3Rl
ZCBtYXRjaGVzIGFuIGV4aXN0aW5nCisgICAgICAgICMgY29uZGl0aW9uIGV4Y2VwdCBmb3IgdGhl
IGRlZmF1bHQgY29uZGl0aW9uCisKKyAgICAgICAgaWYgc2VsZi5uZXdfZXhwZWN0ZWQ6CisgICAg
ICAgICAgICBpZiBhbGwoc2VsZi5uZXdfZXhwZWN0ZWRbMF0uc3RhdHVzID09IHJlc3VsdC5zdGF0
dXMKKyAgICAgICAgICAgICAgICAgICBmb3IgcmVzdWx0IGluIHNlbGYubmV3X2V4cGVjdGVkKSBh
bmQgbm90IHNlbGYudXBkYXRlZF9leHBlY3RlZDoKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBz
ZWxmLm5ld19leHBlY3RlZFswXS5zdGF0dXMKKyAgICAgICAgICAgICAgICBpZiBzdGF0dXMgIT0g
c2VsZi5kZWZhdWx0X3N0YXR1czoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXQoImV4cGVj
dGVkIiwgc3RhdHVzLCBjb25kaXRpb249Tm9uZSkKKyAgICAgICAgICAgICAgICAgICAgZmluYWxf
Y29uZGl0aW9uYWxzLmFwcGVuZChzZWxmLl9kYXRhWyJleHBlY3RlZCJdWy0xXSkKKyAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBjb25k
aXRpb25hbHMgPSBncm91cF9jb25kaXRpb25hbHMoCisgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLm5ld19leHBlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5X29yZGVy
PXNlbGYucm9vdC5wcm9wZXJ0eV9vcmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xl
YW5fcHJvcGVydGllcz1zZWxmLnJvb3QuYm9vbGVhbl9wcm9wZXJ0aWVzKQorICAgICAgICAgICAg
ICAgIGV4Y2VwdCBDb25kaXRpb25FcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIkNv
bmZsaWN0aW5nIHRlc3QgcmVzdWx0cyBmb3IgJXMsIGNhbm5vdCB1cGRhdGUiICUgc2VsZi5yb290
LnRlc3RfcGF0aAorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICBm
b3IgY29uZGl0aW9uYWxfbm9kZSwgc3RhdHVzIGluIGNvbmRpdGlvbmFsczoKKyAgICAgICAgICAg
ICAgICAgICAgaWYgc3RhdHVzICE9IHVuY29uZGl0aW9uYWxfc3RhdHVzOgorICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZi5zZXQoImV4cGVjdGVkIiwgc3RhdHVzLCBjb25kaXRpb249Y29uZGl0
aW9uYWxfbm9kZS5jaGlsZHJlblswXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsX2Nv
bmRpdGlvbmFscy5hcHBlbmQoc2VsZi5fZGF0YVsiZXhwZWN0ZWQiXVstMV0pCisKKyAgICAgICAg
aWYgKCJleHBlY3RlZCIgaW4gc2VsZi5fZGF0YSBhbmQKKyAgICAgICAgICAgIGxlbihzZWxmLl9k
YXRhWyJleHBlY3RlZCJdKSA+IDAgYW5kCisgICAgICAgICAgICBzZWxmLl9kYXRhWyJleHBlY3Rl
ZCJdWy0xXS5jb25kaXRpb25fbm9kZSBpcyBOb25lIGFuZAorICAgICAgICAgICAgc2VsZi5fZGF0
YVsiZXhwZWN0ZWQiXVstMV0udmFsdWUgPT0gc2VsZi5kZWZhdWx0X3N0YXR1cyk6CisKKyAgICAg
ICAgICAgIHNlbGYucmVtb3ZlX3ZhbHVlKCJleHBlY3RlZCIsIHNlbGYuX2RhdGFbImV4cGVjdGVk
Il1bLTFdKQorCisgICAgICAgIGlmICgiZXhwZWN0ZWQiIGluIHNlbGYuX2RhdGEgYW5kCisgICAg
ICAgICAgICBsZW4oc2VsZi5fZGF0YVsiZXhwZWN0ZWQiXSkgPT0gMCk6CisgICAgICAgICAgICBm
b3IgY2hpbGQgaW4gc2VsZi5ub2RlLmNoaWxkcmVuOgorICAgICAgICAgICAgICAgIGlmIChpc2lu
c3RhbmNlKGNoaWxkLCBLZXlWYWx1ZU5vZGUpIGFuZAorICAgICAgICAgICAgICAgICAgICBjaGls
ZC5kYXRhID09ICJleHBlY3RlZCIpOgorICAgICAgICAgICAgICAgICAgICBjaGlsZC5yZW1vdmUo
KQorICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgZGVmIF9hZGRfa2V5X3ZhbHVlKHNl
bGYsIG5vZGUsIHZhbHVlcyk6CisgICAgICAgIE1hbmlmZXN0SXRlbS5fYWRkX2tleV92YWx1ZShz
ZWxmLCBub2RlLCB2YWx1ZXMpCisgICAgICAgIGlmIG5vZGUuZGF0YSA9PSAiZXhwZWN0ZWQiOgor
ICAgICAgICAgICAgc2VsZi51cGRhdGVkX2V4cGVjdGVkID0gW10KKyAgICAgICAgICAgIGZvciB2
YWx1ZSBpbiB2YWx1ZXM6CisgICAgICAgICAgICAgICAgc2VsZi51cGRhdGVkX2V4cGVjdGVkLmFw
cGVuZCgodmFsdWUsIFtdKSkKKworICAgIGRlZiBjbGVhcl9leHBlY3RlZChzZWxmKToKKyAgICAg
ICAgIiIiQ2xlYXIgYWxsIHRoZSBleHBlY3RlZCBkYXRhIGZvciB0aGlzIHRlc3QgYW5kIGFsbCBv
ZiBpdHMgc3VidGVzdHMiIiIKKworICAgICAgICBzZWxmLnVwZGF0ZWRfZXhwZWN0ZWQgPSBbXQor
ICAgICAgICBpZiAiZXhwZWN0ZWQiIGluIHNlbGYuX2RhdGE6CisgICAgICAgICAgICBmb3IgY2hp
bGQgaW4gc2VsZi5ub2RlLmNoaWxkcmVuOgorICAgICAgICAgICAgICAgIGlmIChpc2luc3RhbmNl
KGNoaWxkLCBLZXlWYWx1ZU5vZGUpIGFuZAorICAgICAgICAgICAgICAgICAgICBjaGlsZC5kYXRh
ID09ICJleHBlY3RlZCIpOgorICAgICAgICAgICAgICAgICAgICBjaGlsZC5yZW1vdmUoKQorICAg
ICAgICAgICAgICAgICAgICBkZWwgc2VsZi5fZGF0YVsiZXhwZWN0ZWQiXQorICAgICAgICAgICAg
ICAgICAgICBicmVhaworCisgICAgICAgIGZvciBzdWJ0ZXN0IGluIHNlbGYuc3VidGVzdHMuaXRl
cnZhbHVlcygpOgorICAgICAgICAgICAgc3VidGVzdC5jbGVhcl9leHBlY3RlZCgpCisKKyAgICBk
ZWYgYXBwZW5kKHNlbGYsIG5vZGUpOgorICAgICAgICBjaGlsZCA9IE1hbmlmZXN0SXRlbS5hcHBl
bmQoc2VsZiwgbm9kZSkKKyAgICAgICAgc2VsZi5zdWJ0ZXN0c1tjaGlsZC5uYW1lXSA9IGNoaWxk
CisKKyAgICBkZWYgZ2V0X3N1YnRlc3Qoc2VsZiwgbmFtZSk6CisgICAgICAgICIiIlJldHVybiBh
IFN1YnRlc3ROb2RlIGNvcnJlc3BvbmRpbmcgdG8gYSBwYXJ0aWN1bGFyIHN1YnRlc3Qgb2YKKyAg
ICAgICAgdGhlIGN1cnJlbnQgdGVzdCwgY3JlYXRpbmcgYSBuZXcgb25lIGlmIG5vIHN1YnRlc3Qg
d2l0aCB0aGF0IG5hbWUKKyAgICAgICAgYWxyZWFkeSBleGlzdHMuCisKKyAgICAgICAgOnBhcmFt
IG5hbWU6IE5hbWUgb2YgdGhlIHN1YnRlc3QiIiIKKworICAgICAgICBpZiBuYW1lIGluIHNlbGYu
c3VidGVzdHM6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5zdWJ0ZXN0c1tuYW1lXQorICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgc3VidGVzdCA9IFN1YnRlc3ROb2RlLmNyZWF0ZShuYW1lKQor
ICAgICAgICAgICAgc2VsZi5hcHBlbmQoc3VidGVzdCkKKyAgICAgICAgICAgIHJldHVybiBzdWJ0
ZXN0CisKKworY2xhc3MgU3VidGVzdE5vZGUoVGVzdE5vZGUpOgorICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBub2RlKToKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2Uobm9kZSwgRGF0YU5vZGUpCisg
ICAgICAgIFRlc3ROb2RlLl9faW5pdF9fKHNlbGYsIG5vZGUpCisKKyAgICBAY2xhc3NtZXRob2QK
KyAgICBkZWYgY3JlYXRlKGNscywgbmFtZSk6CisgICAgICAgIG5vZGUgPSBEYXRhTm9kZShuYW1l
KQorICAgICAgICBzZWxmID0gY2xzKG5vZGUpCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBA
cHJvcGVydHkKKyAgICBkZWYgaXNfZW1wdHkoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2RhdGE6
CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworCitkZWYg
Z3JvdXBfY29uZGl0aW9uYWxzKHZhbHVlcywgcHJvcGVydHlfb3JkZXI9Tm9uZSwgYm9vbGVhbl9w
cm9wZXJ0aWVzPU5vbmUpOgorICAgICIiIkdpdmVuIGEgbGlzdCBvZiBSZXN1bHQgb2JqZWN0cywg
cmV0dXJuIGEgbGlzdCBvZgorICAgIChjb25kaXRpb25hbF9ub2RlLCBzdGF0dXMpIHBhaXJzIHJl
cHJlc2VudGluZyB0aGUgY29uZGl0aW9uYWwKKyAgICBleHByZXNzaW9ucyB0aGF0IGFyZSByZXF1
aXJlZCB0byBtYXRjaCBlYWNoIHN0YXR1cworCisgICAgOnBhcmFtIHZhbHVlczogTGlzdCBvZiBS
ZXN1bHRzCisgICAgOnBhcmFtIHByb3BlcnR5X29yZGVyOiBMaXN0IG9mIHByb3BlcnRpZXMgdG8g
dXNlIGluIGV4cGVjdGF0aW9uIG1ldGFkYXRhCisgICAgICAgICAgICAgICAgICAgICAgICAgICBm
cm9tIG1vc3QgdG8gbGVhc3Qgc2lnbmlmaWNhbnQuCisgICAgOnBhcmFtIGJvb2xlYW5fcHJvcGVy
dGllczogU2V0IG9mIHByb3BlcnRpZXMgaW4gcHJvcGVydHlfb3JkZXIgdGhhdCBzaG91bGQKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSB0cmVhdGVkIGFzIGJvb2xlYW4uIiIiCisK
KyAgICBieV9wcm9wZXJ0eSA9IGRlZmF1bHRkaWN0KHNldCkKKyAgICBmb3IgcnVuX2luZm8sIHN0
YXR1cyBpbiB2YWx1ZXM6CisgICAgICAgIGZvciBwcm9wX25hbWUsIHByb3BfdmFsdWUgaW4gcnVu
X2luZm8uaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBieV9wcm9wZXJ0eVsocHJvcF9uYW1lLCBw
cm9wX3ZhbHVlKV0uYWRkKHN0YXR1cykKKworICAgIGlmIHByb3BlcnR5X29yZGVyIGlzIE5vbmU6
CisgICAgICAgIHByb3BlcnR5X29yZGVyID0gWyJkZWJ1ZyIsICJvcyIsICJ2ZXJzaW9uIiwgInBy
b2Nlc3NvciIsICJiaXRzIl0KKworICAgIGlmIGJvb2xlYW5fcHJvcGVydGllcyBpcyBOb25lOgor
ICAgICAgICBib29sZWFuX3Byb3BlcnRpZXMgPSBzZXQoWyJkZWJ1ZyJdKQorICAgIGVsc2U6Cisg
ICAgICAgIGJvb2xlYW5fcHJvcGVydGllcyA9IHNldChib29sZWFuX3Byb3BlcnRpZXMpCisKKyAg
ICAjIElmIHdlIGhhdmUgbW9yZSB0aGFuIG9uZSB2YWx1ZSwgcmVtb3ZlIGFueSBwcm9wZXJ0aWVz
IHRoYXQgYXJlIGNvbW1vbgorICAgICMgZm9yIGFsbCB0aGUgdmFsdWVzCisgICAgaWYgbGVuKHZh
bHVlcykgPiAxOgorICAgICAgICBmb3Iga2V5LCBzdGF0dXNlcyBpbiBieV9wcm9wZXJ0eS5jb3B5
KCkuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBpZiBsZW4oc3RhdHVzZXMpID09IGxlbih2YWx1
ZXMpOgorICAgICAgICAgICAgICAgIGRlbCBieV9wcm9wZXJ0eVtrZXldCisgICAgICAgIGlmIG5v
dCBieV9wcm9wZXJ0eToKKyAgICAgICAgICAgIHJhaXNlIENvbmRpdGlvbkVycm9yCisKKyAgICBw
cm9wZXJ0aWVzID0gc2V0KGl0ZW1bMF0gZm9yIGl0ZW0gaW4gYnlfcHJvcGVydHkuaXRlcmtleXMo
KSkKKyAgICBpbmNsdWRlX3Byb3BzID0gW10KKworICAgIGZvciBwcm9wIGluIHByb3BlcnR5X29y
ZGVyOgorICAgICAgICBpZiBwcm9wIGluIHByb3BlcnRpZXM6CisgICAgICAgICAgICBpbmNsdWRl
X3Byb3BzLmFwcGVuZChwcm9wKQorCisgICAgY29uZGl0aW9ucyA9IHt9CisKKyAgICBmb3IgcnVu
X2luZm8sIHN0YXR1cyBpbiB2YWx1ZXM6CisgICAgICAgIHByb3Bfc2V0ID0gdHVwbGUoKHByb3As
IHJ1bl9pbmZvW3Byb3BdKSBmb3IgcHJvcCBpbiBpbmNsdWRlX3Byb3BzKQorICAgICAgICBpZiBw
cm9wX3NldCBpbiBjb25kaXRpb25zOgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBl
eHByID0gbWFrZV9leHByKHByb3Bfc2V0LCBzdGF0dXMsIGJvb2xlYW5fcHJvcGVydGllcz1ib29s
ZWFuX3Byb3BlcnRpZXMpCisgICAgICAgIGNvbmRpdGlvbnNbcHJvcF9zZXRdID0gKGV4cHIsIHN0
YXR1cykKKworICAgIHJldHVybiBjb25kaXRpb25zLnZhbHVlcygpCisKKworZGVmIG1ha2VfZXhw
cihwcm9wX3NldCwgc3RhdHVzLCBib29sZWFuX3Byb3BlcnRpZXM9Tm9uZSk6CisgICAgIiIiQ3Jl
YXRlIGFuIEFTVCB0aGF0IHJldHVybnMgdGhlIHZhbHVlIGBgc3RhdHVzYGAgZ2l2ZW4gYWxsIHRo
ZQorICAgIHByb3BlcnRpZXMgaW4gcHJvcF9zZXQgbWF0Y2guCisKKyAgICA6cGFyYW0gcHJvcF9z
ZXQ6IHR1cGxlIG9mIChwcm9wZXJ0eSBuYW1lLCB2YWx1ZSkgcGFpcnMgZm9yIGVhY2gKKyAgICAg
ICAgICAgICAgICAgICAgIHByb3BlcnR5IGluIHRoaXMgZXhwcmVzc2lvbiBhbmQgdGhlIHZhbHVl
IGl0IG11c3QgbWF0Y2gKKyAgICA6cGFyYW0gc3RhdHVzOiBTdGF0dXMgb24gUkhTIHdoZW4gYWxs
IHRoZSBnaXZlbiBwcm9wZXJ0aWVzIG1hdGNoCisgICAgOnBhcmFtIGJvb2xlYW5fcHJvcGVydGll
czogU2V0IG9mIHByb3BlcnRpZXMgaW4gcHJvcGVydHlfb3JkZXIgdGhhdCBzaG91bGQKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBiZSB0cmVhdGVkIGFzIGJvb2xlYW4uCisgICAgIiIi
CisgICAgcm9vdCA9IENvbmRpdGlvbmFsTm9kZSgpCisKKyAgICBhc3NlcnQgbGVuKHByb3Bfc2V0
KSA+IDAKKworICAgIGV4cHJlc3Npb25zID0gW10KKyAgICBmb3IgcHJvcCwgdmFsdWUgaW4gcHJv
cF9zZXQ6CisgICAgICAgIG51bWJlcl90eXBlcyA9IChpbnQsIGZsb2F0LCBsb25nKQorICAgICAg
ICB2YWx1ZV9jbHMgPSAoTnVtYmVyTm9kZQorICAgICAgICAgICAgICAgICAgICAgaWYgdHlwZSh2
YWx1ZSkgaW4gbnVtYmVyX3R5cGVzCisgICAgICAgICAgICAgICAgICAgICBlbHNlIFN0cmluZ05v
ZGUpCisgICAgICAgIGlmIHByb3Agbm90IGluIGJvb2xlYW5fcHJvcGVydGllczoKKyAgICAgICAg
ICAgIGV4cHJlc3Npb25zLmFwcGVuZCgKKyAgICAgICAgICAgICAgICBCaW5hcnlFeHByZXNzaW9u
Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgQmluYXJ5T3BlcmF0b3JOb2RlKCI9PSIpLAorICAg
ICAgICAgICAgICAgICAgICBWYXJpYWJsZU5vZGUocHJvcCksCisgICAgICAgICAgICAgICAgICAg
IHZhbHVlX2Nscyh1bmljb2RlKHZhbHVlKSkKKyAgICAgICAgICAgICAgICApKQorICAgICAgICBl
bHNlOgorICAgICAgICAgICAgaWYgdmFsdWU6CisgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnMu
YXBwZW5kKFZhcmlhYmxlTm9kZShwcm9wKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICAgICAgZXhwcmVzc2lvbnMuYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICBVbmFyeUV4cHJl
c3Npb25Ob2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgVW5hcnlPcGVyYXRvck5vZGUoIm5v
dCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVOb2RlKHByb3ApCisgICAgICAg
ICAgICAgICAgICAgICkpCisgICAgaWYgbGVuKGV4cHJlc3Npb25zKSA+IDE6CisgICAgICAgIHBy
ZXYgPSBleHByZXNzaW9uc1stMV0KKyAgICAgICAgZm9yIGN1cnIgaW4gcmV2ZXJzZWQoZXhwcmVz
c2lvbnNbOi0xXSk6CisgICAgICAgICAgICBub2RlID0gQmluYXJ5RXhwcmVzc2lvbk5vZGUoCisg
ICAgICAgICAgICAgICAgQmluYXJ5T3BlcmF0b3JOb2RlKCJhbmQiKSwKKyAgICAgICAgICAgICAg
ICBjdXJyLAorICAgICAgICAgICAgICAgIHByZXYpCisgICAgICAgICAgICBwcmV2ID0gbm9kZQor
ICAgIGVsc2U6CisgICAgICAgIG5vZGUgPSBleHByZXNzaW9uc1swXQorCisgICAgcm9vdC5hcHBl
bmQobm9kZSkKKyAgICByb290LmFwcGVuZChTdHJpbmdOb2RlKHN0YXR1cykpCisKKyAgICByZXR1
cm4gcm9vdAorCisKK2RlZiBnZXRfbWFuaWZlc3QobWV0YWRhdGFfcm9vdCwgdGVzdF9wYXRoLCB1
cmxfYmFzZSwgcHJvcGVydHlfb3JkZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgYm9vbGVhbl9w
cm9wZXJ0aWVzPU5vbmUpOgorICAgICIiIkdldCB0aGUgRXhwZWN0ZWRNYW5pZmVzdCBmb3IgYSBw
YXJ0aWN1bGFyIHRlc3QgcGF0aCwgb3IgTm9uZSBpZiB0aGVyZSBpcyBubworICAgIG1ldGFkYXRh
IHN0b3JlZCBmb3IgdGhhdCB0ZXN0IHBhdGguCisKKyAgICA6cGFyYW0gbWV0YWRhdGFfcm9vdDog
QWJzb2x1dGUgcGF0aCB0byB0aGUgcm9vdCBvZiB0aGUgbWV0YWRhdGEgZGlyZWN0b3J5CisgICAg
OnBhcmFtIHRlc3RfcGF0aDogUGF0aCB0byB0aGUgdGVzdChzKSByZWxhdGl2ZSB0byB0aGUgdGVz
dCByb290CisgICAgOnBhcmFtIHVybF9iYXNlOiBCYXNlIHVybCBmb3Igc2VydmluZyB0aGUgdGVz
dHMgaW4gdGhpcyBtYW5pZmVzdAorICAgIDpwYXJhbSBwcm9wZXJ0eV9vcmRlcjogTGlzdCBvZiBw
cm9wZXJ0aWVzIHRvIHVzZSBpbiBleHBlY3RhdGlvbiBtZXRhZGF0YQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZnJvbSBtb3N0IHRvIGxlYXN0IHNpZ25pZmljYW50LgorICAgIDpwYXJhbSBi
b29sZWFuX3Byb3BlcnRpZXM6IFNldCBvZiBwcm9wZXJ0aWVzIGluIHByb3BlcnR5X29yZGVyIHRo
YXQgc2hvdWxkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgdHJlYXRlZCBhcyBi
b29sZWFuLiIiIgorICAgIG1hbmlmZXN0X3BhdGggPSBleHBlY3RlZC5leHBlY3RlZF9wYXRoKG1l
dGFkYXRhX3Jvb3QsIHRlc3RfcGF0aCkKKyAgICB0cnk6CisgICAgICAgIHdpdGggb3BlbihtYW5p
ZmVzdF9wYXRoKSBhcyBmOgorICAgICAgICAgICAgcmV0dXJuIGNvbXBpbGUoZiwgdGVzdF9wYXRo
LCB1cmxfYmFzZSwgcHJvcGVydHlfb3JkZXI9cHJvcGVydHlfb3JkZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICBib29sZWFuX3Byb3BlcnRpZXM9Ym9vbGVhbl9wcm9wZXJ0aWVzKQorICAg
IGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICByZXR1cm4gTm9uZQorCisKK2RlZiBjb21waWxlKG1h
bmlmZXN0X2ZpbGUsIHRlc3RfcGF0aCwgdXJsX2Jhc2UsIHByb3BlcnR5X29yZGVyPU5vbmUsCisg
ICAgICAgICAgICBib29sZWFuX3Byb3BlcnRpZXM9Tm9uZSk6CisgICAgcmV0dXJuIGNvbmRpdGlv
bmFsLmNvbXBpbGUobWFuaWZlc3RfZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkYXRhX2Nsc19nZXR0ZXI9ZGF0YV9jbHNfZ2V0dGVyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRlc3RfcGF0aD10ZXN0X3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdXJsX2Jhc2U9dXJsX2Jhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHJvcGVydHlfb3JkZXI9cHJvcGVydHlfb3JkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbGVhbl9wcm9wZXJ0aWVzPWJvb2xlYW5fcHJvcGVydGllcykKZGlmZiAtLWdpdCBh
L1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL21l
dGFkYXRhLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93
cHRydW5uZXIvbWV0YWRhdGEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLjczZjI2NmZiOTI4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0
ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvbWV0YWRhdGEucHkKQEAgLTAsMCArMSwz
NTEgQEAKK2ltcG9ydCBvcworaW1wb3J0IHNodXRpbAoraW1wb3J0IHN5cworaW1wb3J0IHRlbXBm
aWxlCitpbXBvcnQgdHlwZXMKK2ltcG9ydCB1dWlkCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBk
ZWZhdWx0ZGljdAorCitmcm9tIG1vemxvZyBpbXBvcnQgcmVhZGVyCitmcm9tIG1vemxvZyBpbXBv
cnQgc3RydWN0dXJlZGxvZworCitpbXBvcnQgZXhwZWN0ZWQKK2ltcG9ydCBtYW5pZmVzdHVwZGF0
ZQoraW1wb3J0IHRlc3Rsb2FkZXIKK2ltcG9ydCB3cHRtYW5pZmVzdAoraW1wb3J0IHdwdHRlc3QK
K2Zyb20gdmNzIGltcG9ydCBnaXQKK21hbmlmZXN0ID0gTm9uZSAgIyBNb2R1bGUgdGhhdCB3aWxs
IGJlIGltcG9ydGVkIHJlbGF0aXZlIHRvIHRlc3Rfcm9vdAorbWFuaWZlc3RpdGVtID0gTm9uZQor
Citsb2dnZXIgPSBzdHJ1Y3R1cmVkbG9nLlN0cnVjdHVyZWRMb2dnZXIoIndlYi1wbGF0Zm9ybS10
ZXN0cyIpCisKKworZGVmIGxvYWRfdGVzdF9tYW5pZmVzdHMoc2VydmVfcm9vdCwgdGVzdF9wYXRo
cyk6CisgICAgZG9fZGVsYXllZF9pbXBvcnRzKHNlcnZlX3Jvb3QpCisgICAgbWFuaWZlc3RfbG9h
ZGVyID0gdGVzdGxvYWRlci5NYW5pZmVzdExvYWRlcih0ZXN0X3BhdGhzLCBGYWxzZSkKKyAgICBy
ZXR1cm4gbWFuaWZlc3RfbG9hZGVyLmxvYWQoKQorCisKK2RlZiB1cGRhdGVfZXhwZWN0ZWQodGVz
dF9wYXRocywgc2VydmVfcm9vdCwgbG9nX2ZpbGVfbmFtZXMsCisgICAgICAgICAgICAgICAgICAg
IHJldl9vbGQ9Tm9uZSwgcmV2X25ldz0iSEVBRCIsIGlnbm9yZV9leGlzdGluZz1GYWxzZSwKKyAg
ICAgICAgICAgICAgICAgICAgc3luY19yb290PU5vbmUsIHByb3BlcnR5X29yZGVyPU5vbmUsIGJv
b2xlYW5fcHJvcGVydGllcz1Ob25lKToKKyAgICAiIiJVcGRhdGUgdGhlIG1ldGFkYXRhIGZpbGVz
IGZvciB3ZWItcGxhdGZvcm0tdGVzdHMgYmFzZWQgb24KKyAgICB0aGUgcmVzdWx0cyBvYnRhaW5l
ZCBpbiBhIHByZXZpb3VzIHJ1biIiIgorCisgICAgbWFuaWZlc3RzID0gbG9hZF90ZXN0X21hbmlm
ZXN0cyhzZXJ2ZV9yb290LCB0ZXN0X3BhdGhzKQorCisgICAgY2hhbmdlX2RhdGEgPSB7fQorCisg
ICAgaWYgc3luY19yb290IGlzIG5vdCBOb25lOgorICAgICAgICBpZiByZXZfb2xkIGlzIG5vdCBO
b25lOgorICAgICAgICAgICAgcmV2X29sZCA9IGdpdCgicmV2LXBhcnNlIiwgcmV2X29sZCwgcmVw
bz1zeW5jX3Jvb3QpLnN0cmlwKCkKKyAgICAgICAgcmV2X25ldyA9IGdpdCgicmV2LXBhcnNlIiwg
cmV2X25ldywgcmVwbz1zeW5jX3Jvb3QpLnN0cmlwKCkKKworICAgICAgICBpZiByZXZfb2xkIGlz
IG5vdCBOb25lOgorICAgICAgICAgICAgY2hhbmdlX2RhdGEgPSBsb2FkX2NoYW5nZV9kYXRhKHJl
dl9vbGQsIHJldl9uZXcsIHJlcG89c3luY19yb290KQorCisKKyAgICBleHBlY3RlZF9tYXBfYnlf
bWFuaWZlc3QgPSB1cGRhdGVfZnJvbV9sb2dzKG1hbmlmZXN0cywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpsb2dfZmlsZV9uYW1lcywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZV9leGlzdGluZz1p
Z25vcmVfZXhpc3RpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwcm9wZXJ0eV9vcmRlcj1wcm9wZXJ0eV9vcmRlciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW5fcHJvcGVydGllcz1ib29sZWFu
X3Byb3BlcnRpZXMpCisKKyAgICBmb3IgdGVzdF9tYW5pZmVzdCwgZXhwZWN0ZWRfbWFwIGluIGV4
cGVjdGVkX21hcF9ieV9tYW5pZmVzdC5pdGVyaXRlbXMoKToKKyAgICAgICAgdXJsX2Jhc2UgPSBt
YW5pZmVzdHNbdGVzdF9tYW5pZmVzdF1bInVybF9iYXNlIl0KKyAgICAgICAgbWV0YWRhdGFfcGF0
aCA9IHRlc3RfcGF0aHNbdXJsX2Jhc2VdWyJtZXRhZGF0YV9wYXRoIl0KKyAgICAgICAgd3JpdGVf
Y2hhbmdlcyhtZXRhZGF0YV9wYXRoLCBleHBlY3RlZF9tYXApCisKKyAgICByZXN1bHRzX2NoYW5n
ZWQgPSBbaXRlbS50ZXN0X3BhdGggZm9yIGl0ZW0gaW4gZXhwZWN0ZWRfbWFwLml0ZXJ2YWx1ZXMo
KSBpZiBpdGVtLm1vZGlmaWVkXQorCisgICAgcmV0dXJuIHVuZXhwZWN0ZWRfY2hhbmdlcyhtYW5p
ZmVzdHMsIGNoYW5nZV9kYXRhLCByZXN1bHRzX2NoYW5nZWQpCisKKworZGVmIGRvX2RlbGF5ZWRf
aW1wb3J0cyhzZXJ2ZV9yb290KToKKyAgICBnbG9iYWwgbWFuaWZlc3QsIG1hbmlmZXN0aXRlbQor
ICAgIGZyb20gbWFuaWZlc3QgaW1wb3J0IG1hbmlmZXN0LCBpdGVtIGFzIG1hbmlmZXN0aXRlbQor
CisKK2RlZiBmaWxlc19pbl9yZXBvKHJlcG9fcm9vdCk6CisgICAgcmV0dXJuIGdpdCgibHMtdHJl
ZSIsICItciIsICItLW5hbWUtb25seSIsICJIRUFEIikuc3BsaXQoIlxuIikKKworCitkZWYgcmV2
X3JhbmdlKHJldl9vbGQsIHJldl9uZXcsIHN5bW1ldHJpYz1GYWxzZSk6CisgICAgam9pbmVyID0g
Ii4uIiBpZiBub3Qgc3ltbWV0cmljIGVsc2UgIi4uLiIKKyAgICByZXR1cm4gIiIuam9pbihbcmV2
X29sZCwgam9pbmVyLCByZXZfbmV3XSkKKworCitkZWYgcGF0aHNfY2hhbmdlZChyZXZfb2xkLCBy
ZXZfbmV3LCByZXBvKToKKyAgICBkYXRhID0gZ2l0KCJkaWZmIiwgIi0tbmFtZS1zdGF0dXMiLCBy
ZXZfcmFuZ2UocmV2X29sZCwgcmV2X25ldyksIHJlcG89cmVwbykKKyAgICBsaW5lcyA9IFt0dXBs
ZShpdGVtLnN0cmlwKCkgZm9yIGl0ZW0gaW4gbGluZS5zdHJpcCgpLnNwbGl0KCJcdCIsIDEpKQor
ICAgICAgICAgICAgIGZvciBsaW5lIGluIGRhdGEuc3BsaXQoIlxuIikgaWYgbGluZS5zdHJpcCgp
XQorICAgIG91dHB1dCA9IHNldChsaW5lcykKKyAgICByZXR1cm4gb3V0cHV0CisKKworZGVmIGxv
YWRfY2hhbmdlX2RhdGEocmV2X29sZCwgcmV2X25ldywgcmVwbyk6CisgICAgY2hhbmdlcyA9IHBh
dGhzX2NoYW5nZWQocmV2X29sZCwgcmV2X25ldywgcmVwbykKKyAgICBydiA9IHt9CisgICAgc3Rh
dHVzX2tleXMgPSB7Ik0iOiAibW9kaWZpZWQiLAorICAgICAgICAgICAgICAgICAgICJBIjogIm5l
dyIsCisgICAgICAgICAgICAgICAgICAgIkQiOiAiZGVsZXRlZCJ9CisgICAgIyBUT0RPOiBkZWFs
IHdpdGggcmVuYW1lcworICAgIGZvciBpdGVtIGluIGNoYW5nZXM6CisgICAgICAgIHJ2W2l0ZW1b
MV1dID0gc3RhdHVzX2tleXNbaXRlbVswXV0KKyAgICByZXR1cm4gcnYKKworCitkZWYgdW5leHBl
Y3RlZF9jaGFuZ2VzKG1hbmlmZXN0cywgY2hhbmdlX2RhdGEsIGZpbGVzX2NoYW5nZWQpOgorICAg
IGZpbGVzX2NoYW5nZWQgPSBzZXQoZmlsZXNfY2hhbmdlZCkKKworICAgIHJvb3RfbWFuaWZlc3Qg
PSBOb25lCisgICAgZm9yIG1hbmlmZXN0LCBwYXRocyBpbiBtYW5pZmVzdHMuaXRlcml0ZW1zKCk6
CisgICAgICAgIGlmIHBhdGhzWyJ1cmxfYmFzZSJdID09ICIvIjoKKyAgICAgICAgICAgIHJvb3Rf
bWFuaWZlc3QgPSBtYW5pZmVzdAorICAgICAgICAgICAgYnJlYWsKKyAgICBlbHNlOgorICAgICAg
ICByZXR1cm4gW10KKworICAgIHJ2ID0gW10KKworICAgIHJldHVybiBbZm4gZm9yIF8sIGZuLCBf
IGluIHJvb3RfbWFuaWZlc3QgaWYgZm4gaW4gZmlsZXNfY2hhbmdlZCBhbmQgY2hhbmdlX2RhdGEu
Z2V0KGZuKSAhPSAiTSJdCisKKyMgRm9yIGVhY2ggdGVzdHJ1bgorIyBMb2FkIGFsbCBmaWxlcyBh
bmQgc2NhbiBmb3IgdGhlIHN1aXRlX3N0YXJ0IGVudHJ5CisjIEJ1aWxkIGEgaGFzaCBvZiBmaWxl
bmFtZTogcHJvcGVydGllcworIyBGb3IgZWFjaCBkaWZmZXJlbnQgc2V0IG9mIHByb3BlcnRpZXMs
IGdhdGhlciBhbGwgY2h1bmtzCisjIEZvciBlYWNoIGNodW5rIGluIHRoZSBzZXQgb2YgY2h1bmtz
LCBnbyB0aHJvdWdoIGFsbCB0ZXN0cworIyBmb3IgZWFjaCB0ZXN0LCBtYWtlIGEgbWFwIG9mIHtj
b25kaXRpb25hbHM6IFsocGxhdGZvcm0sIG5ld192YWx1ZSldfQorIyBSZXBlYXQgZm9yIGVhY2gg
cGxhdGZvcm0KKyMgRm9yIGVhY2ggdGVzdCBpbiB0aGUgbGlzdCBvZiB0ZXN0czoKKyMgICBmb3Ig
ZWFjaCBjb25kaXRpb25hbDoKKyMgICAgICBJZiBhbGwgdGhlIG5ldyB2YWx1ZXMgbWF0Y2ggKG9y
IHRoZXJlIGFyZW4ndCBhbnkpIHJldGFpbiB0aGF0IGNvbmRpdGlvbmFsCisjICAgICAgSWYgYW55
IG5ldyB2YWx1ZXMgbWlzbWF0Y2ggbWFyayB0aGUgdGVzdCBhcyBuZWVkaW5nIGh1bWFuIGF0dGVu
dGlvbgorIyAgIENoZWNrIGlmIGFsbCB0aGUgUkhTIHZhbHVlcyBhcmUgdGhlIHNhbWU7IGlmIHNv
IGNvbGxhcHNlIHRoZSBjb25kaXRpb25hbHMKKworCitkZWYgdXBkYXRlX2Zyb21fbG9ncyhtYW5p
ZmVzdHMsICpsb2dfZmlsZW5hbWVzLCAqKmt3YXJncyk6CisgICAgaWdub3JlX2V4aXN0aW5nID0g
a3dhcmdzLmdldCgiaWdub3JlX2V4aXN0aW5nIiwgRmFsc2UpCisgICAgcHJvcGVydHlfb3JkZXIg
PSBrd2FyZ3MuZ2V0KCJwcm9wZXJ0eV9vcmRlciIpCisgICAgYm9vbGVhbl9wcm9wZXJ0aWVzID0g
a3dhcmdzLmdldCgiYm9vbGVhbl9wcm9wZXJ0aWVzIikKKworICAgIGV4cGVjdGVkX21hcCA9IHt9
CisgICAgaWRfdGVzdF9tYXAgPSB7fQorCisgICAgZm9yIHRlc3RfbWFuaWZlc3QsIHBhdGhzIGlu
IG1hbmlmZXN0cy5pdGVyaXRlbXMoKToKKyAgICAgICAgZXhwZWN0ZWRfbWFwX21hbmlmZXN0LCBp
ZF9wYXRoX21hcF9tYW5pZmVzdCA9IGNyZWF0ZV90ZXN0X3RyZWUoCisgICAgICAgICAgICBwYXRo
c1sibWV0YWRhdGFfcGF0aCJdLAorICAgICAgICAgICAgdGVzdF9tYW5pZmVzdCwKKyAgICAgICAg
ICAgIHByb3BlcnR5X29yZGVyPXByb3BlcnR5X29yZGVyLAorICAgICAgICAgICAgYm9vbGVhbl9w
cm9wZXJ0aWVzPWJvb2xlYW5fcHJvcGVydGllcykKKyAgICAgICAgZXhwZWN0ZWRfbWFwW3Rlc3Rf
bWFuaWZlc3RdID0gZXhwZWN0ZWRfbWFwX21hbmlmZXN0CisgICAgICAgIGlkX3Rlc3RfbWFwLnVw
ZGF0ZShpZF9wYXRoX21hcF9tYW5pZmVzdCkKKworICAgIHVwZGF0ZXIgPSBFeHBlY3RlZFVwZGF0
ZXIobWFuaWZlc3RzLCBleHBlY3RlZF9tYXAsIGlkX3Rlc3RfbWFwLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWdub3JlX2V4aXN0aW5nPWlnbm9yZV9leGlzdGluZykKKyAgICBmb3Ig
bG9nX2ZpbGVuYW1lIGluIGxvZ19maWxlbmFtZXM6CisgICAgICAgIHdpdGggb3Blbihsb2dfZmls
ZW5hbWUpIGFzIGY6CisgICAgICAgICAgICB1cGRhdGVyLnVwZGF0ZV9mcm9tX2xvZyhmKQorCisg
ICAgZm9yIG1hbmlmZXN0X2V4cGVjdGVkIGluIGV4cGVjdGVkX21hcC5pdGVydmFsdWVzKCk6Cisg
ICAgICAgIGZvciB0cmVlIGluIG1hbmlmZXN0X2V4cGVjdGVkLml0ZXJ2YWx1ZXMoKToKKyAgICAg
ICAgICAgIGZvciB0ZXN0IGluIHRyZWUuaXRlcmNoaWxkcmVuKCk6CisgICAgICAgICAgICAgICAg
Zm9yIHN1YnRlc3QgaW4gdGVzdC5pdGVyY2hpbGRyZW4oKToKKyAgICAgICAgICAgICAgICAgICAg
c3VidGVzdC5jb2FsZXNjZV9leHBlY3RlZCgpCisgICAgICAgICAgICAgICAgdGVzdC5jb2FsZXNj
ZV9leHBlY3RlZCgpCisKKyAgICByZXR1cm4gZXhwZWN0ZWRfbWFwCisKK2RlZiBkaXJlY3Rvcnlf
bWFuaWZlc3RzKG1ldGFkYXRhX3BhdGgpOgorICAgIHJ2ID0gW10KKyAgICBmb3IgZGlycGF0aCwg
ZGlybmFtZSwgZmlsZW5hbWVzIGluIG9zLndhbGsobWV0YWRhdGFfcGF0aCk6CisgICAgICAgIGlm
ICJfX2Rpcl9fLmluaSIgaW4gZmlsZW5hbWVzOgorICAgICAgICAgICAgcmVsX3BhdGggPSBvcy5w
YXRoLnJlbHBhdGgoZGlycGF0aCwgbWV0YWRhdGFfcGF0aCkKKyAgICAgICAgICAgIHJ2LmFwcGVu
ZChvcy5wYXRoLmpvaW4ocmVsX3BhdGgsICJfX2Rpcl9fLmluaSIpKQorICAgIHJldHVybiBydgor
CitkZWYgd3JpdGVfY2hhbmdlcyhtZXRhZGF0YV9wYXRoLCBleHBlY3RlZF9tYXApOgorICAgICMg
Rmlyc3Qgd3JpdGUgdGhlIG5ldyBtYW5pZmVzdCBmaWxlcyB0byBhIHRlbXBvcmFyeSBkaXJlY3Rv
cnkKKyAgICB0ZW1wX3BhdGggPSB0ZW1wZmlsZS5ta2R0ZW1wKGRpcj1vcy5wYXRoLnNwbGl0KG1l
dGFkYXRhX3BhdGgpWzBdKQorICAgIHdyaXRlX25ld19leHBlY3RlZCh0ZW1wX3BhdGgsIGV4cGVj
dGVkX21hcCkKKworICAgICMgS2VlcCBhbGwgX19kaXJfXy5pbmkgZmlsZXMgKHRoZXNlIGFyZSBu
b3QgaW4gZXhwZWN0ZWRfbWFwIGJlY2F1c2UgdGhleQorICAgICMgYXJlbid0IGFzc29jaWF0ZWQg
d2l0aCBhIHNwZWNpZmljIHRlc3QpCisgICAga2VlcF9maWxlcyA9IGRpcmVjdG9yeV9tYW5pZmVz
dHMobWV0YWRhdGFfcGF0aCkKKworICAgICMgQ29weSBhbGwgZmlsZXMgaW4gdGhlIHJvb3QgdG8g
dGhlIHRlbXBvcmFyeSBsb2NhdGlvbiBzaW5jZQorICAgICMgdGhlc2UgY2Fubm90IGJlIGluaSBm
aWxlcworICAgIGtlZXBfZmlsZXMuZXh0ZW5kKGl0ZW0gZm9yIGl0ZW0gaW4gb3MubGlzdGRpciht
ZXRhZGF0YV9wYXRoKSBpZgorICAgICAgICAgICAgICAgICAgICAgIG5vdCBvcy5wYXRoLmlzZGly
KG9zLnBhdGguam9pbihtZXRhZGF0YV9wYXRoLCBpdGVtKSkpCisKKyAgICBmb3IgaXRlbSBpbiBr
ZWVwX2ZpbGVzOgorICAgICAgICBkZXN0X2RpciA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmpv
aW4odGVtcF9wYXRoLCBpdGVtKSkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGRlc3Rf
ZGlyKToKKyAgICAgICAgICAgIG9zLm1ha2VkaXJzKGRlc3RfZGlyKQorICAgICAgICBzaHV0aWwu
Y29weWZpbGUob3MucGF0aC5qb2luKG1ldGFkYXRhX3BhdGgsIGl0ZW0pLAorICAgICAgICAgICAg
ICAgICAgICAgICAgb3MucGF0aC5qb2luKHRlbXBfcGF0aCwgaXRlbSkpCisKKyAgICAjIFRoZW4g
bW92ZSB0aGUgb2xkIG1hbmlmZXN0IGZpbGVzIHRvIGEgbmV3IGxvY2F0aW9uCisgICAgdGVtcF9w
YXRoXzIgPSBtZXRhZGF0YV9wYXRoICsgc3RyKHV1aWQudXVpZDQoKSkKKyAgICBvcy5yZW5hbWUo
bWV0YWRhdGFfcGF0aCwgdGVtcF9wYXRoXzIpCisgICAgIyBNb3ZlIHRoZSBuZXcgZmlsZXMgdG8g
dGhlIGRlc3RpbmF0aW9uIGxvY2F0aW9uIGFuZCByZW1vdmUgdGhlIG9sZCBmaWxlcworICAgIG9z
LnJlbmFtZSh0ZW1wX3BhdGgsIG1ldGFkYXRhX3BhdGgpCisgICAgc2h1dGlsLnJtdHJlZSh0ZW1w
X3BhdGhfMikKKworCitkZWYgd3JpdGVfbmV3X2V4cGVjdGVkKG1ldGFkYXRhX3BhdGgsIGV4cGVj
dGVkX21hcCk6CisgICAgIyBTZXJpYWxpemUgdGhlIGRhdGEgYmFjayB0byBhIGZpbGUKKyAgICBm
b3IgdHJlZSBpbiBleHBlY3RlZF9tYXAuaXRlcnZhbHVlcygpOgorICAgICAgICBpZiBub3QgdHJl
ZS5pc19lbXB0eToKKyAgICAgICAgICAgIG1hbmlmZXN0X3N0ciA9IHdwdG1hbmlmZXN0LnNlcmlh
bGl6ZSh0cmVlLm5vZGUsIHNraXBfZW1wdHlfZGF0YT1UcnVlKQorICAgICAgICAgICAgYXNzZXJ0
IG1hbmlmZXN0X3N0ciAhPSAiIgorICAgICAgICAgICAgcGF0aCA9IGV4cGVjdGVkLmV4cGVjdGVk
X3BhdGgobWV0YWRhdGFfcGF0aCwgdHJlZS50ZXN0X3BhdGgpCisgICAgICAgICAgICBkaXIgPSBv
cy5wYXRoLnNwbGl0KHBhdGgpWzBdCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMo
ZGlyKToKKyAgICAgICAgICAgICAgICBvcy5tYWtlZGlycyhkaXIpCisgICAgICAgICAgICB3aXRo
IG9wZW4ocGF0aCwgIndiIikgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKG1hbmlmZXN0
X3N0cikKKworCitjbGFzcyBFeHBlY3RlZFVwZGF0ZXIob2JqZWN0KToKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgdGVzdF9tYW5pZmVzdHMsIGV4cGVjdGVkX3RyZWUsIGlkX3BhdGhfbWFwLCBpZ25v
cmVfZXhpc3Rpbmc9RmFsc2UpOgorICAgICAgICBzZWxmLnRlc3RfbWFuaWZlc3RzID0gdGVzdF9t
YW5pZmVzdHMKKyAgICAgICAgc2VsZi5leHBlY3RlZF90cmVlID0gZXhwZWN0ZWRfdHJlZQorICAg
ICAgICBzZWxmLmlkX3BhdGhfbWFwID0gaWRfcGF0aF9tYXAKKyAgICAgICAgc2VsZi5pZ25vcmVf
ZXhpc3RpbmcgPSBpZ25vcmVfZXhpc3RpbmcKKyAgICAgICAgc2VsZi5ydW5faW5mbyA9IE5vbmUK
KyAgICAgICAgc2VsZi5hY3Rpb25fbWFwID0geyJzdWl0ZV9zdGFydCI6IHNlbGYuc3VpdGVfc3Rh
cnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9zdGFydCI6IHNlbGYudGVzdF9z
dGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0X3N0YXR1cyI6IHNlbGYudGVz
dF9zdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9lbmQiOiBzZWxmLnRl
c3RfZW5kfQorICAgICAgICBzZWxmLnRlc3RzX3Zpc2l0ZWQgPSB7fQorCisgICAgICAgIHNlbGYu
dGVzdF9jYWNoZSA9IHt9CisKKyAgICBkZWYgdXBkYXRlX2Zyb21fbG9nKHNlbGYsIGxvZ19maWxl
KToKKyAgICAgICAgc2VsZi5ydW5faW5mbyA9IE5vbmUKKyAgICAgICAgbG9nX3JlYWRlciA9IHJl
YWRlci5yZWFkKGxvZ19maWxlKQorICAgICAgICByZWFkZXIuZWFjaF9sb2cobG9nX3JlYWRlciwg
c2VsZi5hY3Rpb25fbWFwKQorCisgICAgZGVmIHN1aXRlX3N0YXJ0KHNlbGYsIGRhdGEpOgorICAg
ICAgICBzZWxmLnJ1bl9pbmZvID0gZGF0YVsicnVuX2luZm8iXQorCisgICAgZGVmIHRlc3RfaWQo
c2VsZiwgaWQpOgorICAgICAgICBpZiB0eXBlKGlkKSBpbiB0eXBlcy5TdHJpbmdUeXBlczoKKyAg
ICAgICAgICAgIHJldHVybiBpZAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHR1
cGxlKGlkKQorCisgICAgZGVmIHRlc3Rfc3RhcnQoc2VsZiwgZGF0YSk6CisgICAgICAgIHRlc3Rf
aWQgPSBzZWxmLnRlc3RfaWQoZGF0YVsidGVzdCJdKQorICAgICAgICB0cnk6CisgICAgICAgICAg
ICB0ZXN0X21hbmlmZXN0LCB0ZXN0ID0gc2VsZi5pZF9wYXRoX21hcFt0ZXN0X2lkXQorICAgICAg
ICAgICAgZXhwZWN0ZWRfbm9kZSA9IHNlbGYuZXhwZWN0ZWRfdHJlZVt0ZXN0X21hbmlmZXN0XVt0
ZXN0XS5nZXRfdGVzdCh0ZXN0X2lkKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAg
ICAgICBwcmludCAiVGVzdCBub3QgZm91bmQgJXMsIHNraXBwaW5nIiAlIHRlc3RfaWQKKyAgICAg
ICAgICAgIHJldHVybgorICAgICAgICBzZWxmLnRlc3RfY2FjaGVbdGVzdF9pZF0gPSBleHBlY3Rl
ZF9ub2RlCisKKyAgICAgICAgaWYgdGVzdF9pZCBub3QgaW4gc2VsZi50ZXN0c192aXNpdGVkOgor
ICAgICAgICAgICAgaWYgc2VsZi5pZ25vcmVfZXhpc3Rpbmc6CisgICAgICAgICAgICAgICAgZXhw
ZWN0ZWRfbm9kZS5jbGVhcl9leHBlY3RlZCgpCisgICAgICAgICAgICBzZWxmLnRlc3RzX3Zpc2l0
ZWRbdGVzdF9pZF0gPSBzZXQoKQorCisgICAgZGVmIHRlc3Rfc3RhdHVzKHNlbGYsIGRhdGEpOgor
ICAgICAgICB0ZXN0X2lkID0gc2VsZi50ZXN0X2lkKGRhdGFbInRlc3QiXSkKKyAgICAgICAgdGVz
dCA9IHNlbGYudGVzdF9jYWNoZS5nZXQodGVzdF9pZCkKKyAgICAgICAgaWYgdGVzdCBpcyBOb25l
OgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHRlc3RfY2xzID0gd3B0dGVzdC5tYW5pZmVz
dF90ZXN0X2Nsc1t0ZXN0LnRlc3RfdHlwZV0KKworICAgICAgICBzdWJ0ZXN0ID0gdGVzdC5nZXRf
c3VidGVzdChkYXRhWyJzdWJ0ZXN0Il0pCisKKyAgICAgICAgc2VsZi50ZXN0c192aXNpdGVkW3Rl
c3QuaWRdLmFkZChkYXRhWyJzdWJ0ZXN0Il0pCisKKyAgICAgICAgcmVzdWx0ID0gdGVzdF9jbHMu
c3VidGVzdF9yZXN1bHRfY2xzKAorICAgICAgICAgICAgZGF0YVsic3VidGVzdCJdLAorICAgICAg
ICAgICAgZGF0YVsic3RhdHVzIl0sCisgICAgICAgICAgICBkYXRhLmdldCgibWVzc2FnZSIpKQor
CisgICAgICAgIHN1YnRlc3Quc2V0X3Jlc3VsdChzZWxmLnJ1bl9pbmZvLCByZXN1bHQpCisKKyAg
ICBkZWYgdGVzdF9lbmQoc2VsZiwgZGF0YSk6CisgICAgICAgIHRlc3RfaWQgPSBzZWxmLnRlc3Rf
aWQoZGF0YVsidGVzdCJdKQorICAgICAgICB0ZXN0ID0gc2VsZi50ZXN0X2NhY2hlLmdldCh0ZXN0
X2lkKQorICAgICAgICBpZiB0ZXN0IGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKyAgICAg
ICAgdGVzdF9jbHMgPSB3cHR0ZXN0Lm1hbmlmZXN0X3Rlc3RfY2xzW3Rlc3QudGVzdF90eXBlXQor
CisgICAgICAgIGlmIGRhdGFbInN0YXR1cyJdID09ICJTS0lQIjoKKyAgICAgICAgICAgIHJldHVy
bgorCisgICAgICAgIHJlc3VsdCA9IHRlc3RfY2xzLnJlc3VsdF9jbHMoCisgICAgICAgICAgICBk
YXRhWyJzdGF0dXMiXSwKKyAgICAgICAgICAgIGRhdGEuZ2V0KCJtZXNzYWdlIikpCisKKyAgICAg
ICAgdGVzdC5zZXRfcmVzdWx0KHNlbGYucnVuX2luZm8sIHJlc3VsdCkKKyAgICAgICAgZGVsIHNl
bGYudGVzdF9jYWNoZVt0ZXN0X2lkXQorCisKK2RlZiBjcmVhdGVfdGVzdF90cmVlKG1ldGFkYXRh
X3BhdGgsIHRlc3RfbWFuaWZlc3QsIHByb3BlcnR5X29yZGVyPU5vbmUsCisgICAgICAgICAgICAg
ICAgICAgICBib29sZWFuX3Byb3BlcnRpZXM9Tm9uZSk6CisgICAgZXhwZWN0ZWRfbWFwID0ge30K
KyAgICBpZF90ZXN0X21hcCA9IHt9CisgICAgZXhjbHVkZV90eXBlcyA9IGZyb3plbnNldChbInN0
dWIiLCAiaGVscGVyIiwgIm1hbnVhbCIsICJzdXBwb3J0IiwgImNvbmZvcm1hbmNlY2hlY2tlciJd
KQorICAgIGFsbF90eXBlcyA9IFtpdGVtLml0ZW1fdHlwZSBmb3IgaXRlbSBpbiBtYW5pZmVzdGl0
ZW0uX19kaWN0X18uaXRlcnZhbHVlcygpCisgICAgICAgICAgICAgICAgIGlmIHR5cGUoaXRlbSkg
PT0gdHlwZSBhbmQKKyAgICAgICAgICAgICAgICAgaXNzdWJjbGFzcyhpdGVtLCBtYW5pZmVzdGl0
ZW0uTWFuaWZlc3RJdGVtKSBhbmQKKyAgICAgICAgICAgICAgICAgaXRlbS5pdGVtX3R5cGUgaXMg
bm90IE5vbmVdCisgICAgaW5jbHVkZV90eXBlcyA9IHNldChhbGxfdHlwZXMpIC0gZXhjbHVkZV90
eXBlcworICAgIGZvciBfLCB0ZXN0X3BhdGgsIHRlc3RzIGluIHRlc3RfbWFuaWZlc3QuaXRlcnR5
cGVzKCppbmNsdWRlX3R5cGVzKToKKyAgICAgICAgZXhwZWN0ZWRfZGF0YSA9IGxvYWRfZXhwZWN0
ZWQodGVzdF9tYW5pZmVzdCwgbWV0YWRhdGFfcGF0aCwgdGVzdF9wYXRoLCB0ZXN0cywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlfb3JkZXI9cHJvcGVydHlf
b3JkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW5fcHJv
cGVydGllcz1ib29sZWFuX3Byb3BlcnRpZXMpCisgICAgICAgIGlmIGV4cGVjdGVkX2RhdGEgaXMg
Tm9uZToKKyAgICAgICAgICAgIGV4cGVjdGVkX2RhdGEgPSBjcmVhdGVfZXhwZWN0ZWQodGVzdF9t
YW5pZmVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVz
dF9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlf
b3JkZXI9cHJvcGVydHlfb3JkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2xlYW5fcHJvcGVydGllcz1ib29sZWFuX3Byb3BlcnRpZXMpCisKKyAgICAg
ICAgZm9yIHRlc3QgaW4gdGVzdHM6CisgICAgICAgICAgICBpZF90ZXN0X21hcFt0ZXN0LmlkXSA9
ICh0ZXN0X21hbmlmZXN0LCB0ZXN0KQorICAgICAgICAgICAgZXhwZWN0ZWRfbWFwW3Rlc3RdID0g
ZXhwZWN0ZWRfZGF0YQorCisgICAgcmV0dXJuIGV4cGVjdGVkX21hcCwgaWRfdGVzdF9tYXAKKwor
CitkZWYgY3JlYXRlX2V4cGVjdGVkKHRlc3RfbWFuaWZlc3QsIHRlc3RfcGF0aCwgdGVzdHMsIHBy
b3BlcnR5X29yZGVyPU5vbmUsCisgICAgICAgICAgICAgICAgICAgIGJvb2xlYW5fcHJvcGVydGll
cz1Ob25lKToKKyAgICBleHBlY3RlZCA9IG1hbmlmZXN0dXBkYXRlLkV4cGVjdGVkTWFuaWZlc3Qo
Tm9uZSwgdGVzdF9wYXRoLCB0ZXN0X21hbmlmZXN0LnVybF9iYXNlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eV9vcmRlcj1wcm9wZXJ0eV9v
cmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bGVhbl9wcm9wZXJ0aWVzPWJvb2xlYW5fcHJvcGVydGllcykKKyAgICBmb3IgdGVzdCBpbiB0ZXN0
czoKKyAgICAgICAgZXhwZWN0ZWQuYXBwZW5kKG1hbmlmZXN0dXBkYXRlLlRlc3ROb2RlLmNyZWF0
ZSh0ZXN0Lml0ZW1fdHlwZSwgdGVzdC5pZCkpCisgICAgcmV0dXJuIGV4cGVjdGVkCisKKworZGVm
IGxvYWRfZXhwZWN0ZWQodGVzdF9tYW5pZmVzdCwgbWV0YWRhdGFfcGF0aCwgdGVzdF9wYXRoLCB0
ZXN0cywgcHJvcGVydHlfb3JkZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgIGJvb2xlYW5fcHJv
cGVydGllcz1Ob25lKToKKyAgICBleHBlY3RlZF9tYW5pZmVzdCA9IG1hbmlmZXN0dXBkYXRlLmdl
dF9tYW5pZmVzdChtZXRhZGF0YV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRlc3RfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X21hbmlmZXN0LnVybF9iYXNlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5
X29yZGVyPXByb3BlcnR5X29yZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2xlYW5fcHJvcGVydGllcz1ib29sZWFuX3Byb3BlcnRpZXMp
CisgICAgaWYgZXhwZWN0ZWRfbWFuaWZlc3QgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuCisKKyAg
ICB0ZXN0c19ieV9pZCA9IHtpdGVtLmlkOiBpdGVtIGZvciBpdGVtIGluIHRlc3RzfQorCisgICAg
IyBSZW1vdmUgZXhwZWN0ZWQgZGF0YSBmb3IgdGVzdHMgdGhhdCBubyBsb25nZXIgZXhpc3QKKyAg
ICBmb3IgdGVzdCBpbiBleHBlY3RlZF9tYW5pZmVzdC5pdGVyY2hpbGRyZW4oKToKKyAgICAgICAg
aWYgbm90IHRlc3QuaWQgaW4gdGVzdHNfYnlfaWQ6CisgICAgICAgICAgICB0ZXN0LnJlbW92ZSgp
CisKKyAgICAjIEFkZCB0ZXN0cyB0aGF0IGRvbid0IGhhdmUgZXhwZWN0ZWQgZGF0YQorICAgIGZv
ciB0ZXN0IGluIHRlc3RzOgorICAgICAgICBpZiBub3QgZXhwZWN0ZWRfbWFuaWZlc3QuaGFzX3Rl
c3QodGVzdC5pZCk6CisgICAgICAgICAgICBleHBlY3RlZF9tYW5pZmVzdC5hcHBlbmQobWFuaWZl
c3R1cGRhdGUuVGVzdE5vZGUuY3JlYXRlKHRlc3QuaXRlbV90eXBlLCB0ZXN0LmlkKSkKKworICAg
IHJldHVybiBleHBlY3RlZF9tYW5pZmVzdApkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1w
b3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvcHJvZHVjdHMucHkgYi9XZWJEcml2
ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9wcm9kdWN0cy5w
eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYzA3N2Y5NWRmZDkKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVu
bmVyL3dwdHJ1bm5lci9wcm9kdWN0cy5weQpAQCAtMCwwICsxLDY5IEBACitpbXBvcnQgb3MKK2lt
cG9ydCBpbXBvcnRsaWIKK2ltcG9ydCBpbXAKKworZnJvbSAuYnJvd3NlcnMgaW1wb3J0IHByb2R1
Y3RfbGlzdAorCitkZWYgcHJvZHVjdHNfZW5hYmxlZChjb25maWcpOgorICAgIG5hbWVzID0gY29u
ZmlnLmdldCgicHJvZHVjdHMiLCB7fSkua2V5cygpCisgICAgaWYgbm90IG5hbWVzOgorICAgICAg
ICByZXR1cm4gcHJvZHVjdF9saXN0CisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIG5hbWVzCisK
K2RlZiBwcm9kdWN0X21vZHVsZShjb25maWcsIHByb2R1Y3QpOgorICAgIGhlcmUgPSBvcy5wYXRo
LmpvaW4ob3MucGF0aC5zcGxpdChfX2ZpbGVfXylbMF0pCisgICAgcHJvZHVjdF9kaXIgPSBvcy5w
YXRoLmpvaW4oaGVyZSwgImJyb3dzZXJzIikKKworICAgIGlmIHByb2R1Y3Qgbm90IGluIHByb2R1
Y3RzX2VuYWJsZWQoY29uZmlnKToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiVW5rbm93biBw
cm9kdWN0ICVzIiAlIHByb2R1Y3QpCisKKyAgICBwYXRoID0gY29uZmlnLmdldCgicHJvZHVjdHMi
LCB7fSkuZ2V0KHByb2R1Y3QsIE5vbmUpCisgICAgaWYgcGF0aDoKKyAgICAgICAgbW9kdWxlID0g
aW1wLmxvYWRfc291cmNlKCd3cHRydW5uZXIuYnJvd3NlcnMuJyArIHByb2R1Y3QsIHBhdGgpCisg
ICAgZWxzZToKKyAgICAgICAgbW9kdWxlID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoIndwdHJ1
bm5lci5icm93c2Vycy4iICsgcHJvZHVjdCkKKworICAgIGlmIG5vdCBoYXNhdHRyKG1vZHVsZSwg
Il9fd3B0cnVubmVyX18iKToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiUHJvZHVjdCBtb2R1
bGUgZG9lcyBub3QgZGVmaW5lIF9fd3B0cnVubmVyX18gdmFyaWFibGUiKQorCisgICAgcmV0dXJu
IG1vZHVsZQorCisKK2RlZiBsb2FkX3Byb2R1Y3QoY29uZmlnLCBwcm9kdWN0KToKKyAgICBtb2R1
bGUgPSBwcm9kdWN0X21vZHVsZShjb25maWcsIHByb2R1Y3QpCisgICAgZGF0YSA9IG1vZHVsZS5f
X3dwdHJ1bm5lcl9fCisKKyAgICBjaGVja19hcmdzID0gZ2V0YXR0cihtb2R1bGUsIGRhdGFbImNo
ZWNrX2FyZ3MiXSkKKyAgICBicm93c2VyX2NscyA9IGdldGF0dHIobW9kdWxlLCBkYXRhWyJicm93
c2VyIl0pCisgICAgYnJvd3Nlcl9rd2FyZ3MgPSBnZXRhdHRyKG1vZHVsZSwgZGF0YVsiYnJvd3Nl
cl9rd2FyZ3MiXSkKKyAgICBleGVjdXRvcl9rd2FyZ3MgPSBnZXRhdHRyKG1vZHVsZSwgZGF0YVsi
ZXhlY3V0b3Jfa3dhcmdzIl0pCisgICAgZW52X29wdGlvbnMgPSBnZXRhdHRyKG1vZHVsZSwgZGF0
YVsiZW52X29wdGlvbnMiXSkoKQorICAgIGVudl9leHRyYXMgPSBnZXRhdHRyKG1vZHVsZSwgZGF0
YVsiZW52X2V4dHJhcyJdKQorICAgIHJ1bl9pbmZvX2V4dHJhcyA9IChnZXRhdHRyKG1vZHVsZSwg
ZGF0YVsicnVuX2luZm9fZXh0cmFzIl0pCisgICAgICAgICAgICAgICAgICAgICAgIGlmICJydW5f
aW5mb19leHRyYXMiIGluIGRhdGEgZWxzZSBsYW1iZGEgKiprd2FyZ3M6e30pCisKKyAgICBleGVj
dXRvcl9jbGFzc2VzID0ge30KKyAgICBmb3IgdGVzdF90eXBlLCBjbHNfbmFtZSBpbiBkYXRhWyJl
eGVjdXRvciJdLml0ZXJpdGVtcygpOgorICAgICAgICBjbHMgPSBnZXRhdHRyKG1vZHVsZSwgY2xz
X25hbWUpCisgICAgICAgIGV4ZWN1dG9yX2NsYXNzZXNbdGVzdF90eXBlXSA9IGNscworCisgICAg
cmV0dXJuIChjaGVja19hcmdzLAorICAgICAgICAgICAgYnJvd3Nlcl9jbHMsIGJyb3dzZXJfa3dh
cmdzLAorICAgICAgICAgICAgZXhlY3V0b3JfY2xhc3NlcywgZXhlY3V0b3Jfa3dhcmdzLAorICAg
ICAgICAgICAgZW52X29wdGlvbnMsIGVudl9leHRyYXMsIHJ1bl9pbmZvX2V4dHJhcykKKworCitk
ZWYgbG9hZF9wcm9kdWN0X3VwZGF0ZShjb25maWcsIHByb2R1Y3QpOgorICAgICIiIlJldHVybiB0
dXBsZSBvZiAocHJvcGVydHlfb3JkZXIsIGJvb2xlYW5fcHJvcGVydGllcykgaW5kaWNhdGluZyB0
aGUKKyAgICBydW5faW5mbyBwcm9wZXJ0aWVzIHRvIHVzZSB3aGVuIGNvbnN0cnVjdGluZyB0aGUg
ZXhwZWN0YXRpb24gZGF0YSBmb3IKKyAgICB0aGlzIHByb2R1Y3QuIE5vbmUgZm9yIGVpdGhlciBr
ZXkgaW5kaWNhdGVzIHRoYXQgdGhlIGRlZmF1bHQga2V5cworICAgIGFwcHJvcHJpYXRlIGZvciBk
aXN0aW5ndWlzaGluZyBiYXNlZCBvbiBwbGF0Zm9ybSB3aWxsIGJlIHVzZWQuIiIiCisKKyAgICBt
b2R1bGUgPSBwcm9kdWN0X21vZHVsZShjb25maWcsIHByb2R1Y3QpCisgICAgZGF0YSA9IG1vZHVs
ZS5fX3dwdHJ1bm5lcl9fCisKKyAgICB1cGRhdGVfcHJvcGVydGllcyA9IChnZXRhdHRyKG1vZHVs
ZSwgZGF0YVsidXBkYXRlX3Byb3BlcnRpZXMiXSkoKQorICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICJ1cGRhdGVfcHJvcGVydGllcyIgaW4gZGF0YSBlbHNlIChOb25lLCBOb25lKSkKKworICAg
IHJldHVybiB1cGRhdGVfcHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1w
b3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvcmVkdWNlLnB5IGIvV2ViRHJpdmVy
VGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvcmVkdWNlLnB5Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kMjQ1ZWUzNjAyYgotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIv
d3B0cnVubmVyL3JlZHVjZS5weQpAQCAtMCwwICsxLDE5MyBAQAoraW1wb3J0IHN5cworaW1wb3J0
IHRlbXBmaWxlCitmcm9tIGNTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KK2Zyb20gY29sbGVjdGlv
bnMgaW1wb3J0IGRlZmF1bHRkaWN0CisKK2ltcG9ydCB3cHRydW5uZXIKK2ltcG9ydCB3cHR0ZXN0
CisKK2Zyb20gbW96bG9nIGltcG9ydCBjb21tYW5kbGluZSwgcmVhZGVyCisKK2xvZ2dlciA9IE5v
bmUKKworCitkZWYgc2V0dXBfbG9nZ2luZyhhcmdzLCBkZWZhdWx0cyk6CisgICAgZ2xvYmFsIGxv
Z2dlcgorICAgIGxvZ2dlciA9IGNvbW1hbmRsaW5lLnNldHVwX2xvZ2dpbmcoIndlYi1wbGF0Zm9y
bS10ZXN0cy11bnN0YWJsZSIsIGFyZ3MsIGRlZmF1bHRzKQorICAgIHdwdHJ1bm5lci5zZXR1cF9z
dGRsaWJfbG9nZ2VyKCkKKworICAgIGZvciBuYW1lIGluIGFyZ3Mua2V5cygpOgorICAgICAgICBp
ZiBuYW1lLnN0YXJ0c3dpdGgoImxvZ18iKToKKyAgICAgICAgICAgIGFyZ3MucG9wKG5hbWUpCisK
KyAgICByZXR1cm4gbG9nZ2VyCisKKworZGVmIGdyb3VwKGl0ZW1zLCBzaXplKToKKyAgICBydiA9
IFtdCisgICAgaSA9IDAKKyAgICB3aGlsZSBpIDwgbGVuKGl0ZW1zKToKKyAgICAgICAgcnYuYXBw
ZW5kKGl0ZW1zW2k6aSArIHNpemVdKQorICAgICAgICBpICs9IHNpemUKKworICAgIHJldHVybiBy
dgorCisKK2RlZiBuZXh0X3Bvd2VyX29mX3R3byhudW0pOgorICAgIHJ2ID0gMQorICAgIHdoaWxl
IHJ2IDwgbnVtOgorICAgICAgICBydiA9IHJ2IDw8IDEKKyAgICByZXR1cm4gcnYKKworCitjbGFz
cyBSZWR1Y2VyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRhcmdldCwgKiprd2Fy
Z3MpOgorICAgICAgICBzZWxmLnRhcmdldCA9IHRhcmdldAorCisgICAgICAgIHNlbGYudGVzdF90
eXBlID0ga3dhcmdzWyJ0ZXN0X3R5cGVzIl1bMF0KKyAgICAgICAgcnVuX2luZm8gPSB3cHR0ZXN0
LmdldF9ydW5faW5mbyhrd2FyZ3NbIm1ldGFkYXRhX3Jvb3QiXSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBrd2FyZ3NbInByb2R1Y3QiXSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Zz1GYWxzZSkKKyAgICAgICAgdGVzdF9maWx0
ZXIgPSB3cHRydW5uZXIuVGVzdEZpbHRlcihpbmNsdWRlPWt3YXJnc1siaW5jbHVkZSJdKQorICAg
ICAgICBzZWxmLnRlc3RfbG9hZGVyID0gd3B0cnVubmVyLlRlc3RMb2FkZXIoa3dhcmdzWyJ0ZXN0
c19yb290Il0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBrd2FyZ3NbIm1ldGFkYXRhX3Jvb3QiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFtzZWxmLnRlc3RfdHlwZV0sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW5faW5mbywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hbmlmZXN0X2ZpbGVyPXRlc3RfZmlsdGVy
KQorICAgICAgICBpZiBrd2FyZ3NbInJlcGVhdCJdID09IDE6CisgICAgICAgICAgICBsb2dnZXIu
Y3JpdGljYWwoIk5lZWQgdG8gc3BlY2lmeSAtLXJlcGVhdCB3aXRoIG1vcmUgdGhhbiBvbmUgcmVw
ZXRpdGlvbiIpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICBzZWxmLmt3YXJncyA9
IGt3YXJncworCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgYWxsX3Rlc3RzID0gc2VsZi5n
ZXRfaW5pdGlhbF90ZXN0cygpCisKKyAgICAgICAgdGVzdHMgPSBhbGxfdGVzdHNbOi0xXQorICAg
ICAgICB0YXJnZXRfdGVzdCA9IFthbGxfdGVzdHNbLTFdXQorCisgICAgICAgIGlmIHNlbGYudW5z
dGFibGUodGFyZ2V0X3Rlc3QpOgorICAgICAgICAgICAgcmV0dXJuIHRhcmdldF90ZXN0CisKKyAg
ICAgICAgaWYgbm90IHNlbGYudW5zdGFibGUoYWxsX3Rlc3RzKToKKyAgICAgICAgICAgIHJldHVy
biBbXQorCisgICAgICAgIGNodW5rX3NpemUgPSBuZXh0X3Bvd2VyX29mX3R3byhpbnQobGVuKHRl
c3RzKSAvIDIpKQorICAgICAgICBsb2dnZXIuZGVidWcoIlVzaW5nIGNodW5rIHNpemUgJWkiICUg
Y2h1bmtfc2l6ZSkKKworICAgICAgICB3aGlsZSBjaHVua19zaXplID49IDE6CisgICAgICAgICAg
ICBsb2dnZXIuZGVidWcoIiVpIHRlc3RzIHJlbWFpbiIgJSBsZW4odGVzdHMpKQorICAgICAgICAg
ICAgY2h1bmtzID0gZ3JvdXAodGVzdHMsIGNodW5rX3NpemUpCisgICAgICAgICAgICBjaHVua19y
ZXN1bHRzID0gW05vbmVdICogbGVuKGNodW5rcykKKworICAgICAgICAgICAgZm9yIGksIGNodW5r
IGluIGVudW1lcmF0ZShjaHVua3MpOgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiUnVu
bmluZyBjaHVuayAlaS8laSBvZiBzaXplICVpIiAlIChpICsgMSwgbGVuKGNodW5rcyksIGNodW5r
X3NpemUpKQorICAgICAgICAgICAgICAgIHRyaWFsX3Rlc3RzID0gW10KKyAgICAgICAgICAgICAg
ICBjaHVua19zdHIgPSAiIgorICAgICAgICAgICAgICAgIGZvciBqLCBpbmNfY2h1bmsgaW4gZW51
bWVyYXRlKGNodW5rcyk6CisgICAgICAgICAgICAgICAgICAgIGlmIGkgIT0gaiBhbmQgY2h1bmtf
cmVzdWx0c1tqXSBpbiAoTm9uZSwgRmFsc2UpOgorICAgICAgICAgICAgICAgICAgICAgICAgY2h1
bmtfc3RyICs9ICIrIgorICAgICAgICAgICAgICAgICAgICAgICAgdHJpYWxfdGVzdHMuZXh0ZW5k
KGluY19jaHVuaykKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNodW5rX3N0ciArPSAiLSIKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoIlVz
aW5nIGNodW5rcyAlcyIgJSBjaHVua19zdHIpCisgICAgICAgICAgICAgICAgdHJpYWxfdGVzdHMu
ZXh0ZW5kKHRhcmdldF90ZXN0KQorCisgICAgICAgICAgICAgICAgY2h1bmtfcmVzdWx0c1tpXSA9
IHNlbGYudW5zdGFibGUodHJpYWxfdGVzdHMpCisKKyAgICAgICAgICAgICAgICAjIGlmIGkgPT0g
bGVuKGNodW5rcykgLSAyIGFuZCBhbGwoaXRlbSBpcyBGYWxzZSBmb3IgaXRlbSBpbiBjaHVua19y
ZXN1bHRzWzotMV0pOgorICAgICAgICAgICAgICAgICMgRGFuZ2Vyb3VzPyBvcHRpbWlzYXRpb24g
dGhhdCBpZiB5b3UgZ290IHN0YWJpbGl0eSBmb3IgMC4uTi0xIGNodW5rcworICAgICAgICAgICAg
ICAgICMgaXQgbXVzdCBiZSB1bnN0YWJsZSB3aXRoIHRoZSBOdGggY2h1bmsKKyAgICAgICAgICAg
ICAgICAjICAgICBjaHVua19yZXN1bHRzW2krMV0gPSBUcnVlCisgICAgICAgICAgICAgICAgIyAg
ICAgY29udGludWUKKworICAgICAgICAgICAgbmV3X3Rlc3RzID0gW10KKyAgICAgICAgICAgIGtl
ZXBfc3RyID0gIiIKKyAgICAgICAgICAgIGZvciByZXN1bHQsIGNodW5rIGluIHppcChjaHVua19y
ZXN1bHRzLCBjaHVua3MpOgorICAgICAgICAgICAgICAgIGlmIG5vdCByZXN1bHQ6CisgICAgICAg
ICAgICAgICAgICAgIGtlZXBfc3RyICs9ICIrIgorICAgICAgICAgICAgICAgICAgICBuZXdfdGVz
dHMuZXh0ZW5kKGNodW5rKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAg
ICAgIGtlZXBfc3RyICs9ICItIgorCisgICAgICAgICAgICBsb2dnZXIuZGVidWcoIktlZXBpbmcg
Y2h1bmtzICVzIiAlIGtlZXBfc3RyKQorCisgICAgICAgICAgICB0ZXN0cyA9IG5ld190ZXN0cwor
CisgICAgICAgICAgICBjaHVua19zaXplID0gaW50KGNodW5rX3NpemUgLyAyKQorCisgICAgICAg
IHJldHVybiB0ZXN0cyArIHRhcmdldF90ZXN0CisKKyAgICBkZWYgdW5zdGFibGUoc2VsZiwgdGVz
dHMpOgorICAgICAgICBsb2dnZXIuZGVidWcoIlJ1bm5pbmcgd2l0aCAlaSB0ZXN0cyIgJSBsZW4o
dGVzdHMpKQorCisgICAgICAgIHNlbGYudGVzdF9sb2FkZXIudGVzdHMgPSB7c2VsZi50ZXN0X3R5
cGU6IHRlc3RzfQorCisgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gc3lzLnN0ZG91dCwgc3lzLnN0
ZGVycgorICAgICAgICBzeXMuc3Rkb3V0ID0gU3RyaW5nSU8oKQorICAgICAgICBzeXMuc3RkZXJy
ID0gU3RyaW5nSU8oKQorCisgICAgICAgIHdpdGggdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxl
KCkgYXMgZjoKKyAgICAgICAgICAgIGFyZ3MgPSBzZWxmLmt3YXJncy5jb3B5KCkKKyAgICAgICAg
ICAgIGFyZ3NbImxvZ19yYXciXSA9IFtmXQorICAgICAgICAgICAgYXJnc1siY2FwdHVyZV9zdGRp
byJdID0gRmFsc2UKKyAgICAgICAgICAgIHdwdHJ1bm5lci5zZXR1cF9sb2dnaW5nKGFyZ3MsIHt9
KQorICAgICAgICAgICAgd3B0cnVubmVyLnJ1bl90ZXN0cyh0ZXN0X2xvYWRlcj1zZWxmLnRlc3Rf
bG9hZGVyLCAqKmFyZ3MpCisgICAgICAgICAgICB3cHRydW5uZXIubG9nZ2VyLnJlbW92ZV9oYW5k
bGVyKHdwdHJ1bm5lci5sb2dnZXIuaGFuZGxlcnNbMF0pCisgICAgICAgICAgICBpc191bnN0YWJs
ZSA9IHNlbGYubG9nX2lzX3Vuc3RhYmxlKGYpCisKKyAgICAgICAgICAgIHN5cy5zdGRvdXQsIHN5
cy5zdGRlcnIgPSBzdGRvdXQsIHN0ZGVycgorCisgICAgICAgIGxvZ2dlci5kZWJ1ZygiUmVzdWx0
IHdhcyB1bnN0YWJsZSB3aXRoIGNodW5rIHJlbW92ZWQiCisgICAgICAgICAgICAgICAgICAgICBp
ZiBpc191bnN0YWJsZSBlbHNlICJzdGFibGUiKQorCisgICAgICAgIHJldHVybiBpc191bnN0YWJs
ZQorCisgICAgZGVmIGxvZ19pc191bnN0YWJsZShzZWxmLCBsb2dfZik6CisgICAgICAgIGxvZ19m
LnNlZWsoMCkKKworICAgICAgICBzdGF0dXNlcyA9IGRlZmF1bHRkaWN0KHNldCkKKworICAgICAg
ICBkZWYgaGFuZGxlX3N0YXR1cyhpdGVtKToKKyAgICAgICAgICAgIGlmIGl0ZW1bInRlc3QiXSA9
PSBzZWxmLnRhcmdldDoKKyAgICAgICAgICAgICAgICBzdGF0dXNlc1tpdGVtWyJzdWJ0ZXN0Il1d
LmFkZChpdGVtWyJzdGF0dXMiXSkKKworICAgICAgICBkZWYgaGFuZGxlX2VuZChpdGVtKToKKyAg
ICAgICAgICAgIGlmIGl0ZW1bInRlc3QiXSA9PSBzZWxmLnRhcmdldDoKKyAgICAgICAgICAgICAg
ICBzdGF0dXNlc1tOb25lXS5hZGQoaXRlbVsic3RhdHVzIl0pCisKKyAgICAgICAgcmVhZGVyLmVh
Y2hfbG9nKHJlYWRlci5yZWFkKGxvZ19mKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsidGVz
dF9zdGF0dXMiOiBoYW5kbGVfc3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0
X2VuZCI6IGhhbmRsZV9lbmR9KQorCisgICAgICAgIGxvZ2dlci5kZWJ1ZyhzdHIoc3RhdHVzZXMp
KQorCisgICAgICAgIGlmIG5vdCBzdGF0dXNlczoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigi
RGlkbid0IGdldCBhbnkgdXNlZnVsIG91dHB1dCBmcm9tIHdwdHJ1bm5lciIpCisgICAgICAgICAg
ICBsb2dfZi5zZWVrKDApCisgICAgICAgICAgICBmb3IgaXRlbSBpbiByZWFkZXIucmVhZChsb2df
Zik6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKGl0ZW0pCisgICAgICAgICAgICByZXR1
cm4gTm9uZQorCisgICAgICAgIHJldHVybiBhbnkobGVuKGl0ZW0pID4gMSBmb3IgaXRlbSBpbiBz
dGF0dXNlcy5pdGVydmFsdWVzKCkpCisKKyAgICBkZWYgZ2V0X2luaXRpYWxfdGVzdHMoc2VsZik6
CisgICAgICAgICMgTmVlZCB0byBwYXNzIGluIGFyZ3VtZW50cworCisgICAgICAgIGFsbF90ZXN0
cyA9IHNlbGYudGVzdF9sb2FkZXIudGVzdHNbc2VsZi50ZXN0X3R5cGVdCisgICAgICAgIHRlc3Rz
ID0gW10KKyAgICAgICAgZm9yIGl0ZW0gaW4gYWxsX3Rlc3RzOgorICAgICAgICAgICAgdGVzdHMu
YXBwZW5kKGl0ZW0pCisgICAgICAgICAgICBpZiBpdGVtLnVybCA9PSBzZWxmLnRhcmdldDoKKyAg
ICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIGxvZ2dlci5kZWJ1ZygiU3RhcnRpbmcgd2l0
aCB0ZXN0czogJXMiICUgKCJcbiIuam9pbihpdGVtLmlkIGZvciBpdGVtIGluIHRlc3RzKSkpCisK
KyAgICAgICAgcmV0dXJuIHRlc3RzCisKKworZGVmIGRvX3JlZHVjZSgqKmt3YXJncyk6CisgICAg
dGFyZ2V0ID0ga3dhcmdzLnBvcCgidGFyZ2V0IikKKyAgICByZWR1Y2VyID0gUmVkdWNlcih0YXJn
ZXQsICoqa3dhcmdzKQorCisgICAgdW5zdGFibGVfc2V0ID0gcmVkdWNlci5ydW4oKQorICAgIHJl
dHVybiB1bnN0YWJsZV9zZXQKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3cz
Yy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3Rlc3RoYXJuZXNzX3J1bm5lci5odG1sIGIvV2Vi
RHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvdGVzdGhh
cm5lc3NfcnVubmVyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LjFjYzgwYTI3MGUyCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQv
dzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvdGVzdGhhcm5lc3NfcnVubmVyLmh0bWwKQEAg
LTAsMCArMSw2IEBACis8IWRvY3R5cGUgaHRtbD4KKzx0aXRsZT48L3RpdGxlPgorPHNjcmlwdD4K
K3ZhciB0aW1lb3V0X211bHRpcGxpZXIgPSAxOwordmFyIHdpbiA9IG51bGw7Cis8L3NjcmlwdD4K
ZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIv
d3B0cnVubmVyL3Rlc3RoYXJuZXNzcmVwb3J0LXNlcnZvLmpzIGIvV2ViRHJpdmVyVGVzdHMvaW1w
b3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvdGVzdGhhcm5lc3NyZXBvcnQtc2Vy
dm8uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmI2NzJhZWE5YTI1
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dw
dHJ1bm5lci93cHRydW5uZXIvdGVzdGhhcm5lc3NyZXBvcnQtc2Vydm8uanMKQEAgLTAsMCArMSwx
NyBAQAordmFyIHByb3BzID0ge291dHB1dDolKG91dHB1dClkfTsKK3ZhciBzdGFydF9sb2MgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7CitzdGFydF9sb2MuaHJlZiA9IGxvY2F0aW9uLmhy
ZWY7CitzZXR1cChwcm9wcyk7CisKK2FkZF9jb21wbGV0aW9uX2NhbGxiYWNrKGZ1bmN0aW9uICh0
ZXN0cywgaGFybmVzc19zdGF0dXMpIHsKKyAgICB2YXIgaWQgPSBzdGFydF9sb2MucGF0aG5hbWUg
KyBzdGFydF9sb2Muc2VhcmNoICsgc3RhcnRfbG9jLmhhc2g7CisgICAgY29uc29sZS5sb2coIkFM
RVJUOiBSRVNVTFQ6ICIgKyBKU09OLnN0cmluZ2lmeShbCisgICAgICAgIGlkLAorICAgICAgICBo
YXJuZXNzX3N0YXR1cy5zdGF0dXMsCisgICAgICAgIGhhcm5lc3Nfc3RhdHVzLm1lc3NhZ2UsCisg
ICAgICAgIGhhcm5lc3Nfc3RhdHVzLnN0YWNrLAorICAgICAgICB0ZXN0cy5tYXAoZnVuY3Rpb24o
dCkgeworICAgICAgICAgICAgcmV0dXJuIFt0Lm5hbWUsIHQuc3RhdHVzLCB0Lm1lc3NhZ2UsIHQu
c3RhY2tdCisgICAgICAgIH0pLAorICAgIF0pKTsKK30pOwpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVy
VGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvdGVzdGhhcm5lc3Ny
ZXBvcnQtc2Vydm9kcml2ZXIuanMgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMv
d3B0cnVubmVyL3dwdHJ1bm5lci90ZXN0aGFybmVzc3JlcG9ydC1zZXJ2b2RyaXZlci5qcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYzg4ODQxMzYwNDcKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dw
dHJ1bm5lci90ZXN0aGFybmVzc3JlcG9ydC1zZXJ2b2RyaXZlci5qcwpAQCAtMCwwICsxLDIzIEBA
CitzZXR1cCh7b3V0cHV0OiUob3V0cHV0KWR9KTsKKworYWRkX2NvbXBsZXRpb25fY2FsbGJhY2so
ZnVuY3Rpb24oKSB7CisgICAgYWRkX2NvbXBsZXRpb25fY2FsbGJhY2soZnVuY3Rpb24gKHRlc3Rz
LCBzdGF0dXMpIHsKKyAgICAgICAgdmFyIHN1YnRlc3RfcmVzdWx0cyA9IHRlc3RzLm1hcChmdW5j
dGlvbih4KSB7CisgICAgICAgICAgICByZXR1cm4gW3gubmFtZSwgeC5zdGF0dXMsIHgubWVzc2Fn
ZSwgeC5zdGFja10KKyAgICAgICAgfSk7CisgICAgICAgIHZhciBpZCA9IGxvY2F0aW9uLnBhdGhu
YW1lICsgbG9jYXRpb24uc2VhcmNoICsgbG9jYXRpb24uaGFzaDsKKyAgICAgICAgdmFyIHJlc3Vs
dHMgPSBKU09OLnN0cmluZ2lmeShbaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXR1cy5zdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXR1cy5tZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0dXMuc3RhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1
YnRlc3RfcmVzdWx0c10pOworICAgICAgICAoZnVuY3Rpb24gZG9uZSgpIHsKKyAgICAgICAgICAg
IGlmICh3aW5kb3cuX193ZF9yZXN1bHRzX2NhbGxiYWNrX18pIHsKKyAgICAgICAgICAgICAgICBj
bGVhclRpbWVvdXQoX193ZF9yZXN1bHRzX3RpbWVyX18pOworICAgICAgICAgICAgICAgIF9fd2Rf
cmVzdWx0c19jYWxsYmFja19fKHJlc3VsdHMpCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIHNldFRpbWVvdXQoZG9uZSwgMjApOworICAgICAgICAgICAgfQorICAgICAgICB9
KSgpCisgICAgfSkKK30pOwpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNj
L3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvdGVzdGhhcm5lc3NyZXBvcnQuanMgYi9XZWJEcml2
ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci90ZXN0aGFybmVz
c3JlcG9ydC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNjJkZGFm
ZmI0NDMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9v
bHMvd3B0cnVubmVyL3dwdHJ1bm5lci90ZXN0aGFybmVzc3JlcG9ydC5qcwpAQCAtMCwwICsxLDEz
IEBACit2YXIgcHJvcHMgPSB7b3V0cHV0OiUob3V0cHV0KWQsCisgICAgICAgICAgICAgZXhwbGlj
aXRfdGltZW91dDogdHJ1ZSwKKyAgICAgICAgICAgICBtZXNzYWdlX2V2ZW50czogWyJjb21wbGV0
aW9uIl19OworCitpZiAod2luZG93Lm9wZW5lciAmJiAidGltZW91dF9tdWx0aXBsaWVyIiBpbiB3
aW5kb3cub3BlbmVyKSB7CisgICAgcHJvcHNbInRpbWVvdXRfbXVsdGlwbGllciJdID0gd2luZG93
Lm9wZW5lci50aW1lb3V0X211bHRpcGxpZXI7Cit9CisKK2lmICh3aW5kb3cub3BlbmVyICYmIHdp
bmRvdy5vcGVuZXIuZXhwbGljaXRfdGltZW91dCkgeworICAgIHByb3BzWyJleHBsaWNpdF90aW1l
b3V0Il0gPSB3aW5kb3cub3BlbmVyLmV4cGxpY2l0X3RpbWVvdXQ7Cit9CisKK3NldHVwKHByb3Bz
KTsKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5u
ZXIvd3B0cnVubmVyL3Rlc3Rsb2FkZXIucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mv
dG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci90ZXN0bG9hZGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xMGYzNTg2ZjE0MwotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3Rlc3Rs
b2FkZXIucHkKQEAgLTAsMCArMSw2NDEgQEAKK2ltcG9ydCBoYXNobGliCitpbXBvcnQganNvbgor
aW1wb3J0IG9zCitpbXBvcnQgdXJscGFyc2UKK2Zyb20gYWJjIGltcG9ydCBBQkNNZXRhLCBhYnN0
cmFjdG1ldGhvZAorZnJvbSBRdWV1ZSBpbXBvcnQgRW1wdHkKK2Zyb20gY29sbGVjdGlvbnMgaW1w
b3J0IGRlZmF1bHRkaWN0LCBPcmRlcmVkRGljdCwgZGVxdWUKK2Zyb20gbXVsdGlwcm9jZXNzaW5n
IGltcG9ydCBRdWV1ZQorCitpbXBvcnQgbWFuaWZlc3RpbmNsdWRlCitpbXBvcnQgbWFuaWZlc3Rl
eHBlY3RlZAoraW1wb3J0IHdwdHRlc3QKK2Zyb20gbW96bG9nIGltcG9ydCBzdHJ1Y3R1cmVkCisK
K21hbmlmZXN0ID0gTm9uZQorbWFuaWZlc3RfdXBkYXRlID0gTm9uZQorCitkZWYgZG9fZGVsYXll
ZF9pbXBvcnRzKCk6CisgICAgIyBUaGlzIHJlbGllcyBvbiBhbiBhbHJlYWR5IGxvYWRlZCBtb2R1
bGUgaGF2aW5nIHNldCB0aGUgc3lzLnBhdGggY29ycmVjdGx5IDooCisgICAgZ2xvYmFsIG1hbmlm
ZXN0LCBtYW5pZmVzdF91cGRhdGUKKyAgICBmcm9tIG1hbmlmZXN0IGltcG9ydCBtYW5pZmVzdAor
ICAgIGZyb20gbWFuaWZlc3QgaW1wb3J0IHVwZGF0ZSBhcyBtYW5pZmVzdF91cGRhdGUKKworY2xh
c3MgVGVzdENodW5rZXIob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdG90YWxfY2h1
bmtzLCBjaHVua19udW1iZXIpOgorICAgICAgICBzZWxmLnRvdGFsX2NodW5rcyA9IHRvdGFsX2No
dW5rcworICAgICAgICBzZWxmLmNodW5rX251bWJlciA9IGNodW5rX251bWJlcgorICAgICAgICBh
c3NlcnQgc2VsZi5jaHVua19udW1iZXIgPD0gc2VsZi50b3RhbF9jaHVua3MKKyAgICAgICAgc2Vs
Zi5sb2dnZXIgPSBzdHJ1Y3R1cmVkLmdldF9kZWZhdWx0X2xvZ2dlcigpCisgICAgICAgIGFzc2Vy
dCBzZWxmLmxvZ2dlcgorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIG1hbmlmZXN0KToKKyAgICAg
ICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisKK2NsYXNzIFVuY2h1bmtlZChUZXN0Q2h1
bmtlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAg
IFRlc3RDaHVua2VyLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncykKKyAgICAgICAgYXNz
ZXJ0IHNlbGYudG90YWxfY2h1bmtzID09IDEKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBtYW5p
ZmVzdCk6CisgICAgICAgIGZvciBpdGVtIGluIG1hbmlmZXN0OgorICAgICAgICAgICAgeWllbGQg
aXRlbQorCisKK2NsYXNzIEhhc2hDaHVua2VyKFRlc3RDaHVua2VyKToKKyAgICBkZWYgX19jYWxs
X18oc2VsZiwgbWFuaWZlc3QpOgorICAgICAgICBjaHVua19pbmRleCA9IHNlbGYuY2h1bmtfbnVt
YmVyIC0gMQorICAgICAgICBmb3IgdGVzdF90eXBlLCB0ZXN0X3BhdGgsIHRlc3RzIGluIG1hbmlm
ZXN0OgorICAgICAgICAgICAgaCA9IGludChoYXNobGliLm1kNSh0ZXN0X3BhdGgpLmhleGRpZ2Vz
dCgpLCAxNikKKyAgICAgICAgICAgIGlmIGggJSBzZWxmLnRvdGFsX2NodW5rcyA9PSBjaHVua19p
bmRleDoKKyAgICAgICAgICAgICAgICB5aWVsZCB0ZXN0X3R5cGUsIHRlc3RfcGF0aCwgdGVzdHMK
KworCitjbGFzcyBEaXJlY3RvcnlIYXNoQ2h1bmtlcihUZXN0Q2h1bmtlcik6CisgICAgIiIiTGlr
ZSBIYXNoQ2h1bmtlciBleGNlcHQgdGhlIGRpcmVjdG9yeSBpcyBoYXNoZWQuCisKKyAgICBUaGlz
IGVuc3VyZXMgdGhhdCBhbGwgdGVzdHMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGVuZCB1cCBpbiB0
aGUgc2FtZQorICAgIGNodW5rLgorICAgICIiIgorICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBtYW5p
ZmVzdCk6CisgICAgICAgIGNodW5rX2luZGV4ID0gc2VsZi5jaHVua19udW1iZXIgLSAxCisgICAg
ICAgIGZvciB0ZXN0X3R5cGUsIHRlc3RfcGF0aCwgdGVzdHMgaW4gbWFuaWZlc3Q6CisgICAgICAg
ICAgICBoID0gaW50KGhhc2hsaWIubWQ1KG9zLnBhdGguZGlybmFtZSh0ZXN0X3BhdGgpKS5oZXhk
aWdlc3QoKSwgMTYpCisgICAgICAgICAgICBpZiBoICUgc2VsZi50b3RhbF9jaHVua3MgPT0gY2h1
bmtfaW5kZXg6CisgICAgICAgICAgICAgICAgeWllbGQgdGVzdF90eXBlLCB0ZXN0X3BhdGgsIHRl
c3RzCisKKworY2xhc3MgRXF1YWxUaW1lQ2h1bmtlcihUZXN0Q2h1bmtlcik6CisgICAgZGVmIF9n
cm91cF9ieV9kaXJlY3Rvcnkoc2VsZiwgbWFuaWZlc3RfaXRlbXMpOgorICAgICAgICAiIiJTcGxp
dCB0aGUgbGlzdCBvZiBtYW5pZmVzdCBpdGVtcyBpbnRvIGEgb3JkZXJlZCBkaWN0IHRoYXQgZ3Jv
dXBzIHRlc3RzIGluCisgICAgICAgIHNvIHRoYXQgYW55dGhpbmcgaW4gdGhlIHNhbWUgc3ViZGly
ZWN0b3J5IGJleW9uZCBhIGRlcHRoIG9mIDMgaXMgaW4gdGhlIHNhbWUKKyAgICAgICAgZ3JvdXAu
IFNvIGFsbCB0ZXN0cyBpbiBhL2IvYywgYS9iL2MvZCBhbmQgYS9iL2MvZSB3aWxsIGJlIGdyb3Vw
ZWQgdG9nZXRoZXIKKyAgICAgICAgYW5kIHNlcGFyYXRlIHRvIHRlc3RzIGluIGEvYi9mCisKKyAg
ICAgICAgUmV0dXJuczogdHVwbGUgKG9yZGVyZWQgZGljdCBvZiB7dGVzdF9kaXI6IFBhdGhEYXRh
fSwgdG90YWwgZXN0aW1hdGVkIHJ1bnRpbWUpCisgICAgICAgICIiIgorCisgICAgICAgIGNsYXNz
IFBhdGhEYXRhKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aCk6
CisgICAgICAgICAgICAgICAgc2VsZi5wYXRoID0gcGF0aAorICAgICAgICAgICAgICAgIHNlbGYu
dGltZSA9IDAKKyAgICAgICAgICAgICAgICBzZWxmLnRlc3RzID0gW10KKworICAgICAgICBieV9k
aXIgPSBPcmRlcmVkRGljdCgpCisgICAgICAgIHRvdGFsX3RpbWUgPSAwCisKKyAgICAgICAgZm9y
IGksICh0ZXN0X3R5cGUsIHRlc3RfcGF0aCwgdGVzdHMpIGluIGVudW1lcmF0ZShtYW5pZmVzdF9p
dGVtcyk6CisgICAgICAgICAgICB0ZXN0X2RpciA9IHR1cGxlKG9zLnBhdGguc3BsaXQodGVzdF9w
YXRoKVswXS5zcGxpdChvcy5wYXRoLnNlcClbOjNdKQorCisgICAgICAgICAgICBpZiBub3QgdGVz
dF9kaXIgaW4gYnlfZGlyOgorICAgICAgICAgICAgICAgIGJ5X2Rpclt0ZXN0X2Rpcl0gPSBQYXRo
RGF0YSh0ZXN0X2RpcikKKworICAgICAgICAgICAgZGF0YSA9IGJ5X2Rpclt0ZXN0X2Rpcl0KKyAg
ICAgICAgICAgIHRpbWUgPSBzdW0odGVzdC5kZWZhdWx0X3RpbWVvdXQgaWYgdGVzdC50aW1lb3V0
ICE9CisgICAgICAgICAgICAgICAgICAgICAgICJsb25nIiBlbHNlIHRlc3QubG9uZ190aW1lb3V0
IGZvciB0ZXN0IGluIHRlc3RzKQorICAgICAgICAgICAgZGF0YS50aW1lICs9IHRpbWUKKyAgICAg
ICAgICAgIHRvdGFsX3RpbWUgKz0gdGltZQorICAgICAgICAgICAgZGF0YS50ZXN0cy5hcHBlbmQo
KHRlc3RfdHlwZSwgdGVzdF9wYXRoLCB0ZXN0cykpCisKKyAgICAgICAgcmV0dXJuIGJ5X2Rpciwg
dG90YWxfdGltZQorCisgICAgZGVmIF9tYXliZV9yZW1vdmUoc2VsZiwgY2h1bmtzLCBpLCBkaXJl
Y3Rpb24pOgorICAgICAgICAiIiJUcmlhbCByZW1vdmluZyBhIGNodW5rIGZyb20gb25lIGNodW5r
IHRvIGFuIGFkamFjZW50IG9uZS4KKworICAgICAgICA6cGFyYW0gY2h1bmtzOiAtIHRoZSBsaXN0
IG9mIGFsbCBjaHVua3MKKyAgICAgICAgOnBhcmFtIGk6IC0gdGhlIGNodW5rIGluZGV4IGluIHRo
ZSBsaXN0IG9mIGNodW5rcyB0byB0cnkgcmVtb3ZpbmcgZnJvbQorICAgICAgICA6cGFyYW0gZGly
ZWN0aW9uOiBlaXRoZXIgIm5leHQiIGlmIHdlIGFyZSBnb2luZyB0byBtb3ZlIGZyb20gdGhlIGVu
ZCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc3Vic2VxdWVudCBjaHVuaywgb3Ig
InByZXYiIGlmIHdlIGFyZSBnb2luZyB0byBtb3ZlCisgICAgICAgICAgICAgICAgICAgICAgICAg
IGZyb20gdGhlIHN0YXJ0IGludG8gdGhlIHByZXZpb3VzIGNodW5rLgorCisgICAgICAgIDpyZXR1
cm5zIGJvb2w6IERpZCBhIGNodW5rIGdldCBtb3ZlZD8iIiIKKyAgICAgICAgc291cmNlX2NodW5r
ID0gY2h1bmtzW2ldCisgICAgICAgIGlmIGRpcmVjdGlvbiA9PSAibmV4dCI6CisgICAgICAgICAg
ICB0YXJnZXRfY2h1bmsgPSBjaHVua3NbaSsxXQorICAgICAgICAgICAgcGF0aF9pbmRleCA9IC0x
CisgICAgICAgICAgICBtb3ZlX2Z1bmMgPSBsYW1iZGE6IHRhcmdldF9jaHVuay5hcHBlbmRsZWZ0
KHNvdXJjZV9jaHVuay5wb3AoKSkKKyAgICAgICAgZWxpZiBkaXJlY3Rpb24gPT0gInByZXYiOgor
ICAgICAgICAgICAgdGFyZ2V0X2NodW5rID0gY2h1bmtzW2ktMV0KKyAgICAgICAgICAgIHBhdGhf
aW5kZXggPSAwCisgICAgICAgICAgICBtb3ZlX2Z1bmMgPSBsYW1iZGE6IHRhcmdldF9jaHVuay5h
cHBlbmQoc291cmNlX2NodW5rLnBvcGxlZnQoKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg
IHJhaXNlIFZhbHVlRXJyb3IoIlVuZXhwZWN0ZWQgbW92ZSBkaXJlY3Rpb24gJXMiICUgZGlyZWN0
aW9uKQorCisgICAgICAgIHJldHVybiBzZWxmLl9tYXliZV9tb3ZlKHNvdXJjZV9jaHVuaywgdGFy
Z2V0X2NodW5rLCBwYXRoX2luZGV4LCBtb3ZlX2Z1bmMpCisKKyAgICBkZWYgX21heWJlX2FkZChz
ZWxmLCBjaHVua3MsIGksIGRpcmVjdGlvbik6CisgICAgICAgICIiIlRyaWFsIGFkZGluZyBhIGNo
dW5rIGZyb20gb25lIGNodW5rIHRvIGFuIGFkamFjZW50IG9uZS4KKworICAgICAgICA6cGFyYW0g
Y2h1bmtzOiAtIHRoZSBsaXN0IG9mIGFsbCBjaHVua3MKKyAgICAgICAgOnBhcmFtIGk6IC0gdGhl
IGNodW5rIGluZGV4IGluIHRoZSBsaXN0IG9mIGNodW5rcyB0byB0cnkgYWRkaW5nIHRvCisgICAg
ICAgIDpwYXJhbSBkaXJlY3Rpb246IGVpdGhlciAibmV4dCIgaWYgd2UgYXJlIGdvaW5nIHRvIHJl
bW92ZSBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc3Vic2VxdWVudCBj
aHVuaywgb3IgInByZXYiIGlmIHdlIGFyZSBnb2luZyB0byByZW1vdmUKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgZnJvbSB0aGUgdGhlIHByZXZpb3VzIGNodW5rLgorCisgICAgICAgIDpyZXR1
cm5zIGJvb2w6IERpZCBhIGNodW5rIGdldCBtb3ZlZD8iIiIKKyAgICAgICAgdGFyZ2V0X2NodW5r
ID0gY2h1bmtzW2ldCisgICAgICAgIGlmIGRpcmVjdGlvbiA9PSAibmV4dCI6CisgICAgICAgICAg
ICBzb3VyY2VfY2h1bmsgPSBjaHVua3NbaSsxXQorICAgICAgICAgICAgcGF0aF9pbmRleCA9IDAK
KyAgICAgICAgICAgIG1vdmVfZnVuYyA9IGxhbWJkYTogdGFyZ2V0X2NodW5rLmFwcGVuZChzb3Vy
Y2VfY2h1bmsucG9wbGVmdCgpKQorICAgICAgICBlbGlmIGRpcmVjdGlvbiA9PSAicHJldiI6Cisg
ICAgICAgICAgICBzb3VyY2VfY2h1bmsgPSBjaHVua3NbaS0xXQorICAgICAgICAgICAgcGF0aF9p
bmRleCA9IC0xCisgICAgICAgICAgICBtb3ZlX2Z1bmMgPSBsYW1iZGE6IHRhcmdldF9jaHVuay5h
cHBlbmRsZWZ0KHNvdXJjZV9jaHVuay5wb3AoKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg
IHJhaXNlIFZhbHVlRXJyb3IoIlVuZXhwZWN0ZWQgbW92ZSBkaXJlY3Rpb24gJXMiICUgZGlyZWN0
aW9uKQorCisgICAgICAgIHJldHVybiBzZWxmLl9tYXliZV9tb3ZlKHNvdXJjZV9jaHVuaywgdGFy
Z2V0X2NodW5rLCBwYXRoX2luZGV4LCBtb3ZlX2Z1bmMpCisKKyAgICBkZWYgX21heWJlX21vdmUo
c2VsZiwgc291cmNlX2NodW5rLCB0YXJnZXRfY2h1bmssIHBhdGhfaW5kZXgsIG1vdmVfZnVuYyk6
CisgICAgICAgICIiIk1vdmUgZnJvbSBvbmUgY2h1bmsgdG8gYW5vdGhlciwgYXNzZXNzIHRoZSBj
aGFuZ2UgaW4gYmFkbmVzcywKKyAgICAgICAgYW5kIGtlZXAgdGhlIG1vdmUgaWZmIGl0IGRlY3Jl
YXNlcyB0aGUgYmFkbmVzcyBzY29yZS4KKworICAgICAgICA6cGFyYW0gc291cmNlX2NodW5rOiBj
aHVuayB0byBtb3ZlIGZyb20KKyAgICAgICAgOnBhcmFtIHRhcmdldF9jaHVuazogY2h1bmsgdG8g
bW92ZSB0bworICAgICAgICA6cGFyYW0gcGF0aF9pbmRleDogMCBpZiB3ZSBhcmUgbW92aW5nIGZy
b20gdGhlIHN0YXJ0IG9yIC0xIGlmIHdlIGFyZSBtb3ZpbmcgZnJvbSB0aGUKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVuZAorICAgICAgICA6cGFyYW0gbW92ZV9mdW5jOiBGdW5jdGlvbiB0
aGF0IGFjdHVhbGx5IG1vdmVzIGJldHdlZW4gY2h1bmtzIiIiCisgICAgICAgIGlmIGxlbihzb3Vy
Y2VfY2h1bmsucGF0aHMpIDw9IDE6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAg
ICBtb3ZlX3RpbWUgPSBzb3VyY2VfY2h1bmsucGF0aHNbcGF0aF9pbmRleF0udGltZQorCisgICAg
ICAgIG5ld19zb3VyY2VfYmFkbmVzcyA9IHNlbGYuX2JhZG5lc3Moc291cmNlX2NodW5rLnRpbWUg
LSBtb3ZlX3RpbWUpCisgICAgICAgIG5ld190YXJnZXRfYmFkbmVzcyA9IHNlbGYuX2JhZG5lc3Mo
dGFyZ2V0X2NodW5rLnRpbWUgKyBtb3ZlX3RpbWUpCisKKyAgICAgICAgZGVsdGFfYmFkbmVzcyA9
ICgobmV3X3NvdXJjZV9iYWRuZXNzICsgbmV3X3RhcmdldF9iYWRuZXNzKSAtCisgICAgICAgICAg
ICAgICAgICAgICAgICAgKHNvdXJjZV9jaHVuay5iYWRuZXNzICsgdGFyZ2V0X2NodW5rLmJhZG5l
c3MpKQorICAgICAgICBpZiBkZWx0YV9iYWRuZXNzIDwgMDoKKyAgICAgICAgICAgIG1vdmVfZnVu
YygpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIHJldHVybiBGYWxzZQorCisg
ICAgZGVmIF9iYWRuZXNzKHNlbGYsIHRpbWUpOgorICAgICAgICAiIiJNZXRyaWMgb2YgYmFkbmVz
cyBmb3IgYSBzcGVjaWZpYyBjaHVuaworCisgICAgICAgIDpwYXJhbSB0aW1lOiB0aGUgdGltZSBm
b3IgYSBzcGVjaWZpYyBjaHVuayIiIgorICAgICAgICByZXR1cm4gKHRpbWUgLSBzZWxmLmV4cGVj
dGVkX3RpbWUpKioyCisKKyAgICBkZWYgX2dldF9jaHVuayhzZWxmLCBtYW5pZmVzdF9pdGVtcyk6
CisgICAgICAgIGJ5X2RpciwgdG90YWxfdGltZSA9IHNlbGYuX2dyb3VwX2J5X2RpcmVjdG9yeSht
YW5pZmVzdF9pdGVtcykKKworICAgICAgICBpZiBsZW4oYnlfZGlyKSA8IHNlbGYudG90YWxfY2h1
bmtzOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiVHJpZWQgdG8gc3BsaXQgaW50byAl
aSBjaHVua3MsIGJ1dCBvbmx5ICVpIHN1YmRpcmVjdG9yaWVzIGluY2x1ZGVkIiAlICgKKyAgICAg
ICAgICAgICAgICBzZWxmLnRvdGFsX2NodW5rcywgbGVuKGJ5X2RpcikpKQorCisgICAgICAgIHNl
bGYuZXhwZWN0ZWRfdGltZSA9IGZsb2F0KHRvdGFsX3RpbWUpIC8gc2VsZi50b3RhbF9jaHVua3MK
KworICAgICAgICBjaHVua3MgPSBzZWxmLl9jcmVhdGVfaW5pdGlhbF9jaHVua3MoYnlfZGlyKQor
CisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAjIE1vdmUgYSB0ZXN0IGZyb20gb25l
IGNodW5rIHRvIHRoZSBuZXh0IHVudGlsIGRvaW5nIHNvIG5vIGxvbmdlcgorICAgICAgICAgICAg
IyByZWR1Y2VzIHRoZSBiYWRuZXNzCisgICAgICAgICAgICBnb3RfaW1wcm92ZW1lbnQgPSBzZWxm
Ll91cGRhdGVfY2h1bmtzKGNodW5rcykKKyAgICAgICAgICAgIGlmIG5vdCBnb3RfaW1wcm92ZW1l
bnQ6CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1Zyhz
ZWxmLmV4cGVjdGVkX3RpbWUpCisgICAgICAgIGZvciBpLCBjaHVuayBpbiBjaHVua3MuaXRlcml0
ZW1zKCk6CisgICAgICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1ZygiJWk6ICVpLCAlaSIgJSAoaSAr
IDEsIGNodW5rLnRpbWUsIGNodW5rLmJhZG5lc3MpKQorCisgICAgICAgIGFzc2VydCBzZWxmLl9h
bGxfdGVzdHMoYnlfZGlyKSA9PSBzZWxmLl9jaHVua2VkX3Rlc3RzKGNodW5rcykKKworICAgICAg
ICByZXR1cm4gc2VsZi5fZ2V0X3Rlc3RzKGNodW5rcykKKworICAgIEBzdGF0aWNtZXRob2QKKyAg
ICBkZWYgX2FsbF90ZXN0cyhieV9kaXIpOgorICAgICAgICAiIiJSZXR1cm4gYSBzZXQgb2YgYWxs
IHRlc3RzIGluIHRoZSBtYW5pZmVzdCBmcm9tIGEgZ3JvdXBpbmcgYnkgZGlyZWN0b3J5IiIiCisg
ICAgICAgIHJldHVybiBzZXQoeFswXSBmb3IgaXRlbSBpbiBieV9kaXIuaXRlcnZhbHVlcygpCisg
ICAgICAgICAgICAgICAgICAgZm9yIHggaW4gaXRlbS50ZXN0cykKKworICAgIEBzdGF0aWNtZXRo
b2QKKyAgICBkZWYgX2NodW5rZWRfdGVzdHMoY2h1bmtzKToKKyAgICAgICAgIiIiUmV0dXJuIGEg
c2V0IG9mIGFsbCB0ZXN0cyBpbiB0aGUgbWFuaWZlc3QgZnJvbSB0aGUgY2h1bmsgbGlzdCIiIgor
ICAgICAgICByZXR1cm4gc2V0KHhbMF0gZm9yIGNodW5rIGluIGNodW5rcy5pdGVydmFsdWVzKCkK
KyAgICAgICAgICAgICAgICAgICBmb3IgcGF0aCBpbiBjaHVuay5wYXRocworICAgICAgICAgICAg
ICAgICAgIGZvciB4IGluIHBhdGgudGVzdHMpCisKKworICAgIGRlZiBfY3JlYXRlX2luaXRpYWxf
Y2h1bmtzKHNlbGYsIGJ5X2Rpcik6CisgICAgICAgICIiIkNyZWF0ZSBhbiBpbml0aWFsIHVuYmFs
YW5jZWQgbGlzdCBvZiBjaHVua3MuCisKKyAgICAgICAgOnBhcmFtIGJ5X2RpcjogQWxsIHRlc3Rz
IGluIHRoZSBtYW5pZmVzdCBncm91cGVkIGJ5IHN1YmRpcmVjdG9yeQorICAgICAgICA6cmV0dXJu
cyBsaXN0OiBBIGxpc3Qgb2YgQ2h1bmsgb2JqZWN0cyIiIgorCisgICAgICAgIGNsYXNzIENodW5r
KG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aHMsIGluZGV4KToK
KyAgICAgICAgICAgICAgICAiIiJMaXN0IG9mIFBhdGhEYXRhIG9iamVjdHMgdGhhdCB0b2dldGhl
ciBmb3JtIGEgc2luZ2xlIGNodW5rIG9mCisgICAgICAgICAgICAgICAgdGVzdHMiIiIKKyAgICAg
ICAgICAgICAgICBzZWxmLnBhdGhzID0gZGVxdWUocGF0aHMpCisgICAgICAgICAgICAgICAgc2Vs
Zi50aW1lID0gc3VtKGl0ZW0udGltZSBmb3IgaXRlbSBpbiBwYXRocykKKyAgICAgICAgICAgICAg
ICBzZWxmLmluZGV4ID0gaW5kZXgKKworICAgICAgICAgICAgZGVmIGFwcGVuZGxlZnQoc2VsZiwg
cGF0aCk6CisgICAgICAgICAgICAgICAgIiIiQWRkIGEgUGF0aERhdGEgb2JqZWN0IHRvIHRoZSBz
dGFydCBvZiB0aGUgY2h1bmsiIiIKKyAgICAgICAgICAgICAgICBzZWxmLnBhdGhzLmFwcGVuZGxl
ZnQocGF0aCkKKyAgICAgICAgICAgICAgICBzZWxmLnRpbWUgKz0gcGF0aC50aW1lCisKKyAgICAg
ICAgICAgIGRlZiBhcHBlbmQoc2VsZiwgcGF0aCk6CisgICAgICAgICAgICAgICAgIiIiQWRkIGEg
UGF0aERhdGEgb2JqZWN0IHRvIHRoZSBlbmQgb2YgdGhlIGNodW5rIiIiCisgICAgICAgICAgICAg
ICAgc2VsZi5wYXRocy5hcHBlbmQocGF0aCkKKyAgICAgICAgICAgICAgICBzZWxmLnRpbWUgKz0g
cGF0aC50aW1lCisKKyAgICAgICAgICAgIGRlZiBwb3Aoc2VsZik6CisgICAgICAgICAgICAgICAg
IiIiUmVtb3ZlIFBhdGhEYXRhIG9iamVjdCBmcm9tIHRoZSBlbmQgb2YgdGhlIGNodW5rIiIiCisg
ICAgICAgICAgICAgICAgYXNzZXJ0IGxlbihzZWxmLnBhdGhzKSA+IDEKKyAgICAgICAgICAgICAg
ICBzZWxmLnRpbWUgLT0gc2VsZi5wYXRoc1stMV0udGltZQorICAgICAgICAgICAgICAgIHJldHVy
biBzZWxmLnBhdGhzLnBvcCgpCisKKyAgICAgICAgICAgIGRlZiBwb3BsZWZ0KHNlbGYpOgorICAg
ICAgICAgICAgICAgICIiIlJlbW92ZSBQYXRoRGF0YSBvYmplY3QgZnJvbSB0aGUgc3RhcnQgb2Yg
dGhlIGNodW5rIiIiCisgICAgICAgICAgICAgICAgYXNzZXJ0IGxlbihzZWxmLnBhdGhzKSA+IDEK
KyAgICAgICAgICAgICAgICBzZWxmLnRpbWUgLT0gc2VsZi5wYXRoc1swXS50aW1lCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHNlbGYucGF0aHMucG9wbGVmdCgpCisKKyAgICAgICAgICAgIEBwcm9w
ZXJ0eQorICAgICAgICAgICAgZGVmIGJhZG5lc3Moc2VsZl8pOgorICAgICAgICAgICAgICAgICIi
IkJhZG5lc3MgbWV0cmljIGZvciB0aGlzIGNodW5rIiIiCisgICAgICAgICAgICAgICAgcmV0dXJu
IHNlbGYuX2JhZG5lc3Moc2VsZl8udGltZSkKKworICAgICAgICBpbml0aWFsX3NpemUgPSBsZW4o
YnlfZGlyKSAvIHNlbGYudG90YWxfY2h1bmtzCisgICAgICAgIGNodW5rX2JvdW5kYXJpZXMgPSBb
aW5pdGlhbF9zaXplICogaQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHhy
YW5nZShzZWxmLnRvdGFsX2NodW5rcyldICsgW2xlbihieV9kaXIpXQorCisgICAgICAgIGNodW5r
cyA9IE9yZGVyZWREaWN0KCkKKyAgICAgICAgZm9yIGksIGxvd2VyIGluIGVudW1lcmF0ZShjaHVu
a19ib3VuZGFyaWVzWzotMV0pOgorICAgICAgICAgICAgdXBwZXIgPSBjaHVua19ib3VuZGFyaWVz
W2kgKyAxXQorICAgICAgICAgICAgcGF0aHMgPSBieV9kaXIudmFsdWVzKClbbG93ZXI6dXBwZXJd
CisgICAgICAgICAgICBjaHVua3NbaV0gPSBDaHVuayhwYXRocywgaSkKKworICAgICAgICBhc3Nl
cnQgc2VsZi5fYWxsX3Rlc3RzKGJ5X2RpcikgPT0gc2VsZi5fY2h1bmtlZF90ZXN0cyhjaHVua3Mp
CisKKyAgICAgICAgcmV0dXJuIGNodW5rcworCisgICAgZGVmIF91cGRhdGVfY2h1bmtzKHNlbGYs
IGNodW5rcyk6CisgICAgICAgICIiIlJ1biBhIHNpbmdsZSBpdGVyYXRpb24gb2YgdGhlIGNodW5r
IHVwZGF0ZSBhbGdvcml0aG0uCisKKyAgICAgICAgOnBhcmFtIGNodW5rczogLSBMaXN0IG9mIGNo
dW5rcworICAgICAgICAiIiIKKyAgICAgICAgI1RPRE86IGNvbnNpZGVyIHJlcGxhY2luZyB0aGlz
IHdpdGggYSBoZWFwCisgICAgICAgIHNvcnRlZF9jaHVua3MgPSBzb3J0ZWQoY2h1bmtzLnZhbHVl
cygpLCBrZXk9bGFtYmRhIHg6LXguYmFkbmVzcykKKyAgICAgICAgZ290X2ltcHJvdmVtZW50ID0g
RmFsc2UKKyAgICAgICAgZm9yIGNodW5rIGluIHNvcnRlZF9jaHVua3M6CisgICAgICAgICAgICBp
ZiBjaHVuay50aW1lIDwgc2VsZi5leHBlY3RlZF90aW1lOgorICAgICAgICAgICAgICAgIGYgPSBz
ZWxmLl9tYXliZV9hZGQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZiA9IHNl
bGYuX21heWJlX3JlbW92ZQorCisgICAgICAgICAgICBpZiBjaHVuay5pbmRleCA9PSAwOgorICAg
ICAgICAgICAgICAgIG9yZGVyID0gWyJuZXh0Il0KKyAgICAgICAgICAgIGVsaWYgY2h1bmsuaW5k
ZXggPT0gc2VsZi50b3RhbF9jaHVua3MgLSAxOgorICAgICAgICAgICAgICAgIG9yZGVyID0gWyJw
cmV2Il0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgY2h1bmsudGltZSA8
IHNlbGYuZXhwZWN0ZWRfdGltZToKKyAgICAgICAgICAgICAgICAgICAgIyBGaXJzdCB0cnkgdG8g
YWRkIGEgdGVzdCBmcm9tIHRoZSBuZWlnaGJvcmluZyBjaHVuayB3aXRoIHRoZQorICAgICAgICAg
ICAgICAgICAgICAjIGdyZWF0ZXN0IHRvdGFsIHRpbWUKKyAgICAgICAgICAgICAgICAgICAgaWYg
Y2h1bmtzW2NodW5rLmluZGV4ICsgMV0udGltZSA+IGNodW5rc1tjaHVuay5pbmRleCAtIDFdLnRp
bWU6CisgICAgICAgICAgICAgICAgICAgICAgICBvcmRlciA9IFsibmV4dCIsICJwcmV2Il0KKyAg
ICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyID0g
WyJwcmV2IiwgIm5leHQiXQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAg
ICAgICMgRmlyc3QgdHJ5IHRvIHJlbW92ZSBhIHRlc3QgYW5kIGFkZCB0byB0aGUgbmVpZ2hib3Jp
bmcgY2h1bmsgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgIyBsb3dlc3QgdG90YWwgdGlt
ZQorICAgICAgICAgICAgICAgICAgICBpZiBjaHVua3NbY2h1bmsuaW5kZXggKyAxXS50aW1lID4g
Y2h1bmtzW2NodW5rLmluZGV4IC0gMV0udGltZToKKyAgICAgICAgICAgICAgICAgICAgICAgIG9y
ZGVyID0gWyJwcmV2IiwgIm5leHQiXQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgICAgICAgICAgICAgb3JkZXIgPSBbIm5leHQiLCAicHJldiJdCisKKyAgICAgICAgICAg
IGZvciBkaXJlY3Rpb24gaW4gb3JkZXI6CisgICAgICAgICAgICAgICAgaWYgZihjaHVua3MsIGNo
dW5rLmluZGV4LCBkaXJlY3Rpb24pOgorICAgICAgICAgICAgICAgICAgICBnb3RfaW1wcm92ZW1l
bnQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgIGlmIGdv
dF9pbXByb3ZlbWVudDoKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIHJldHVybiBn
b3RfaW1wcm92ZW1lbnQKKworICAgIGRlZiBfZ2V0X3Rlc3RzKHNlbGYsIGNodW5rcyk6CisgICAg
ICAgICIiIlJldHVybiB0aGUgbGlzdCBvZiB0ZXN0cyBjb3JyZXNwb25kaW5nIHRvIHRoZSBjaHVu
ayBudW1iZXIgd2UgYXJlIHJ1bm5pbmcuCisKKyAgICAgICAgOnBhcmFtIGNodW5rczogTGlzdCBv
ZiBjaHVua3MiIiIKKyAgICAgICAgdGVzdHMgPSBbXQorICAgICAgICBmb3IgcGF0aCBpbiBjaHVu
a3Nbc2VsZi5jaHVua19udW1iZXIgLSAxXS5wYXRoczoKKyAgICAgICAgICAgIHRlc3RzLmV4dGVu
ZChwYXRoLnRlc3RzKQorCisgICAgICAgIHJldHVybiB0ZXN0cworCisgICAgZGVmIF9fY2FsbF9f
KHNlbGYsIG1hbmlmZXN0X2l0ZXIpOgorICAgICAgICBtYW5pZmVzdCA9IGxpc3QobWFuaWZlc3Rf
aXRlcikKKyAgICAgICAgdGVzdHMgPSBzZWxmLl9nZXRfY2h1bmsobWFuaWZlc3QpCisgICAgICAg
IGZvciBpdGVtIGluIHRlc3RzOgorICAgICAgICAgICAgeWllbGQgaXRlbQorCisKK2NsYXNzIFRl
c3RGaWx0ZXIob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGVzdF9tYW5pZmVzdHMs
IGluY2x1ZGU9Tm9uZSwgZXhjbHVkZT1Ob25lLCBtYW5pZmVzdF9wYXRoPU5vbmUpOgorICAgICAg
ICBpZiBtYW5pZmVzdF9wYXRoIGlzIG5vdCBOb25lIGFuZCBpbmNsdWRlIGlzIE5vbmU6CisgICAg
ICAgICAgICBzZWxmLm1hbmlmZXN0ID0gbWFuaWZlc3RpbmNsdWRlLmdldF9tYW5pZmVzdChtYW5p
ZmVzdF9wYXRoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5tYW5pZmVzdCA9IG1h
bmlmZXN0aW5jbHVkZS5JbmNsdWRlTWFuaWZlc3QuY3JlYXRlKCkKKyAgICAgICAgICAgIHNlbGYu
bWFuaWZlc3Quc2V0X2RlZmF1bHRzKCkKKworICAgICAgICBpZiBpbmNsdWRlOgorICAgICAgICAg
ICAgc2VsZi5tYW5pZmVzdC5zZXQoInNraXAiLCAidHJ1ZSIpCisgICAgICAgICAgICBmb3IgaXRl
bSBpbiBpbmNsdWRlOgorICAgICAgICAgICAgICAgIHNlbGYubWFuaWZlc3QuYWRkX2luY2x1ZGUo
dGVzdF9tYW5pZmVzdHMsIGl0ZW0pCisKKyAgICAgICAgaWYgZXhjbHVkZToKKyAgICAgICAgICAg
IGZvciBpdGVtIGluIGV4Y2x1ZGU6CisgICAgICAgICAgICAgICAgc2VsZi5tYW5pZmVzdC5hZGRf
ZXhjbHVkZSh0ZXN0X21hbmlmZXN0cywgaXRlbSkKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBt
YW5pZmVzdF9pdGVyKToKKyAgICAgICAgZm9yIHRlc3RfdHlwZSwgdGVzdF9wYXRoLCB0ZXN0cyBp
biBtYW5pZmVzdF9pdGVyOgorICAgICAgICAgICAgaW5jbHVkZV90ZXN0cyA9IHNldCgpCisgICAg
ICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0czoKKyAgICAgICAgICAgICAgICBpZiBzZWxmLm1hbmlm
ZXN0LmluY2x1ZGUodGVzdCk6CisgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfdGVzdHMuYWRk
KHRlc3QpCisKKyAgICAgICAgICAgIGlmIGluY2x1ZGVfdGVzdHM6CisgICAgICAgICAgICAgICAg
eWllbGQgdGVzdF90eXBlLCB0ZXN0X3BhdGgsIGluY2x1ZGVfdGVzdHMKKworY2xhc3MgVGFnRmls
dGVyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRhZ3MpOgorICAgICAgICBzZWxm
LnRhZ3MgPSBzZXQodGFncykKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCB0ZXN0X2l0ZXIpOgor
ICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0X2l0ZXI6CisgICAgICAgICAgICBpZiB0ZXN0LnRhZ3Mg
JiBzZWxmLnRhZ3M6CisgICAgICAgICAgICAgICAgeWllbGQgdGVzdAorCitjbGFzcyBNYW5pZmVz
dExvYWRlcihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0X3BhdGhzLCBmb3Jj
ZV9tYW5pZmVzdF91cGRhdGU9RmFsc2UpOgorICAgICAgICBkb19kZWxheWVkX2ltcG9ydHMoKQor
ICAgICAgICBzZWxmLnRlc3RfcGF0aHMgPSB0ZXN0X3BhdGhzCisgICAgICAgIHNlbGYuZm9yY2Vf
bWFuaWZlc3RfdXBkYXRlID0gZm9yY2VfbWFuaWZlc3RfdXBkYXRlCisgICAgICAgIHNlbGYubG9n
Z2VyID0gc3RydWN0dXJlZC5nZXRfZGVmYXVsdF9sb2dnZXIoKQorICAgICAgICBpZiBzZWxmLmxv
Z2dlciBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5sb2dnZXIgPSBzdHJ1Y3R1cmVkLnN0cnVj
dHVyZWRsb2cuU3RydWN0dXJlZExvZ2dlcigiTWFuaWZlc3RMb2FkZXIiKQorCisgICAgZGVmIGxv
YWQoc2VsZik6CisgICAgICAgIHJ2ID0ge30KKyAgICAgICAgZm9yIHVybF9iYXNlLCBwYXRocyBp
biBzZWxmLnRlc3RfcGF0aHMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBtYW5pZmVzdF9maWxl
ID0gc2VsZi5sb2FkX21hbmlmZXN0KHVybF9iYXNlPXVybF9iYXNlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKnBhdGhzKQorICAgICAgICAgICAgcGF0
aF9kYXRhID0geyJ1cmxfYmFzZSI6IHVybF9iYXNlfQorICAgICAgICAgICAgcGF0aF9kYXRhLnVw
ZGF0ZShwYXRocykKKyAgICAgICAgICAgIHJ2W21hbmlmZXN0X2ZpbGVdID0gcGF0aF9kYXRhCisg
ICAgICAgIHJldHVybiBydgorCisgICAgZGVmIGNyZWF0ZV9tYW5pZmVzdChzZWxmLCBtYW5pZmVz
dF9wYXRoLCB0ZXN0c19wYXRoLCB1cmxfYmFzZT0iLyIpOgorICAgICAgICBzZWxmLnVwZGF0ZV9t
YW5pZmVzdChtYW5pZmVzdF9wYXRoLCB0ZXN0c19wYXRoLCB1cmxfYmFzZSwgcmVjcmVhdGU9VHJ1
ZSkKKworICAgIGRlZiB1cGRhdGVfbWFuaWZlc3Qoc2VsZiwgbWFuaWZlc3RfcGF0aCwgdGVzdHNf
cGF0aCwgdXJsX2Jhc2U9Ii8iLAorICAgICAgICAgICAgICAgICAgICAgICAgcmVjcmVhdGU9RmFs
c2UpOgorICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKCJVcGRhdGluZyB0ZXN0IG1hbmlmZXN0ICVz
IiAlIG1hbmlmZXN0X3BhdGgpCisKKyAgICAgICAganNvbl9kYXRhID0gTm9uZQorICAgICAgICBp
ZiBub3QgcmVjcmVhdGU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2l0aCBv
cGVuKG1hbmlmZXN0X3BhdGgpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGpzb25fZGF0YSA9
IGpzb24ubG9hZChmKQorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAg
ICAgI0lmIHRoZSBleGlzdGluZyBmaWxlIGRvZXNuJ3QgZXhpc3QganVzdCBjcmVhdGUgb25lIGZy
b20gc2NyYXRjaAorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBpZiBub3QganNvbl9k
YXRhOgorICAgICAgICAgICAgbWFuaWZlc3RfZmlsZSA9IG1hbmlmZXN0Lk1hbmlmZXN0KHVybF9i
YXNlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG1h
bmlmZXN0X2ZpbGUgPSBtYW5pZmVzdC5NYW5pZmVzdC5mcm9tX2pzb24odGVzdHNfcGF0aCwganNv
bl9kYXRhKQorICAgICAgICAgICAgZXhjZXB0IG1hbmlmZXN0Lk1hbmlmZXN0VmVyc2lvbk1pc21h
dGNoOgorICAgICAgICAgICAgICAgIG1hbmlmZXN0X2ZpbGUgPSBtYW5pZmVzdC5NYW5pZmVzdCh1
cmxfYmFzZSkKKworICAgICAgICBtYW5pZmVzdF91cGRhdGUudXBkYXRlKHRlc3RzX3BhdGgsIG1h
bmlmZXN0X2ZpbGUsIFRydWUpCisKKyAgICAgICAgbWFuaWZlc3Qud3JpdGUobWFuaWZlc3RfZmls
ZSwgbWFuaWZlc3RfcGF0aCkKKworICAgIGRlZiBsb2FkX21hbmlmZXN0KHNlbGYsIHRlc3RzX3Bh
dGgsIG1ldGFkYXRhX3BhdGgsIHVybF9iYXNlPSIvIik6CisgICAgICAgIG1hbmlmZXN0X3BhdGgg
PSBvcy5wYXRoLmpvaW4obWV0YWRhdGFfcGF0aCwgIk1BTklGRVNULmpzb24iKQorICAgICAgICBp
ZiAobm90IG9zLnBhdGguZXhpc3RzKG1hbmlmZXN0X3BhdGgpIG9yCisgICAgICAgICAgICBzZWxm
LmZvcmNlX21hbmlmZXN0X3VwZGF0ZSk6CisgICAgICAgICAgICBzZWxmLnVwZGF0ZV9tYW5pZmVz
dChtYW5pZmVzdF9wYXRoLCB0ZXN0c19wYXRoLCB1cmxfYmFzZSkKKyAgICAgICAgbWFuaWZlc3Rf
ZmlsZSA9IG1hbmlmZXN0LmxvYWQodGVzdHNfcGF0aCwgbWFuaWZlc3RfcGF0aCkKKyAgICAgICAg
aWYgbWFuaWZlc3RfZmlsZS51cmxfYmFzZSAhPSB1cmxfYmFzZToKKyAgICAgICAgICAgIHNlbGYu
bG9nZ2VyLmluZm8oIlVwZGF0aW5nIHVybF9iYXNlIGluIG1hbmlmZXN0IGZyb20gJXMgdG8gJXMi
ICUgKG1hbmlmZXN0X2ZpbGUudXJsX2Jhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxfYmFz
ZSkpCisgICAgICAgICAgICBtYW5pZmVzdF9maWxlLnVybF9iYXNlID0gdXJsX2Jhc2UKKyAgICAg
ICAgICAgIG1hbmlmZXN0LndyaXRlKG1hbmlmZXN0X2ZpbGUsIG1hbmlmZXN0X3BhdGgpCisKKyAg
ICAgICAgcmV0dXJuIG1hbmlmZXN0X2ZpbGUKKworZGVmIGl0ZXJmaWx0ZXIoZmlsdGVycywgaXRl
cik6CisgICAgZm9yIGYgaW4gZmlsdGVyczoKKyAgICAgICAgaXRlciA9IGYoaXRlcikKKyAgICBm
b3IgaXRlbSBpbiBpdGVyOgorICAgICAgICB5aWVsZCBpdGVtCisKK2NsYXNzIFRlc3RMb2FkZXIo
b2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwKKyAgICAgICAgICAgICAgICAgdGVzdF9t
YW5pZmVzdHMsCisgICAgICAgICAgICAgICAgIHRlc3RfdHlwZXMsCisgICAgICAgICAgICAgICAg
IHJ1bl9pbmZvLAorICAgICAgICAgICAgICAgICBtYW5pZmVzdF9maWx0ZXJzPU5vbmUsCisgICAg
ICAgICAgICAgICAgIG1ldGFfZmlsdGVycz1Ob25lLAorICAgICAgICAgICAgICAgICBjaHVua190
eXBlPSJub25lIiwKKyAgICAgICAgICAgICAgICAgdG90YWxfY2h1bmtzPTEsCisgICAgICAgICAg
ICAgICAgIGNodW5rX251bWJlcj0xLAorICAgICAgICAgICAgICAgICBpbmNsdWRlX2h0dHBzPVRy
dWUpOgorCisgICAgICAgIHNlbGYudGVzdF90eXBlcyA9IHRlc3RfdHlwZXMKKyAgICAgICAgc2Vs
Zi5ydW5faW5mbyA9IHJ1bl9pbmZvCisKKyAgICAgICAgc2VsZi5tYW5pZmVzdF9maWx0ZXJzID0g
bWFuaWZlc3RfZmlsdGVycyBpZiBtYW5pZmVzdF9maWx0ZXJzIGlzIG5vdCBOb25lIGVsc2UgW10K
KyAgICAgICAgc2VsZi5tZXRhX2ZpbHRlcnMgPSBtZXRhX2ZpbHRlcnMgaWYgbWV0YV9maWx0ZXJz
IGlzIG5vdCBOb25lIGVsc2UgW10KKworICAgICAgICBzZWxmLm1hbmlmZXN0cyA9IHRlc3RfbWFu
aWZlc3RzCisgICAgICAgIHNlbGYudGVzdHMgPSBOb25lCisgICAgICAgIHNlbGYuZGlzYWJsZWRf
dGVzdHMgPSBOb25lCisgICAgICAgIHNlbGYuaW5jbHVkZV9odHRwcyA9IGluY2x1ZGVfaHR0cHMK
KworICAgICAgICBzZWxmLmNodW5rX3R5cGUgPSBjaHVua190eXBlCisgICAgICAgIHNlbGYudG90
YWxfY2h1bmtzID0gdG90YWxfY2h1bmtzCisgICAgICAgIHNlbGYuY2h1bmtfbnVtYmVyID0gY2h1
bmtfbnVtYmVyCisKKyAgICAgICAgc2VsZi5jaHVua2VyID0geyJub25lIjogVW5jaHVua2VkLAor
ICAgICAgICAgICAgICAgICAgICAgICAgImhhc2giOiBIYXNoQ2h1bmtlciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICJkaXJfaGFzaCI6IERpcmVjdG9yeUhhc2hDaHVua2VyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgImVxdWFsX3RpbWUiOiBFcXVhbFRpbWVDaHVua2VyfVtjaHVua190eXBl
XSh0b3RhbF9jaHVua3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rX251bWJlcikKKworICAgICAgICBzZWxm
Ll90ZXN0X2lkcyA9IE5vbmUKKworICAgICAgICBzZWxmLmRpcmVjdG9yeV9tYW5pZmVzdHMgPSB7
fQorCisgICAgICAgIHNlbGYuX2xvYWRfdGVzdHMoKQorCisgICAgQHByb3BlcnR5CisgICAgZGVm
IHRlc3RfaWRzKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl90ZXN0X2lkcyBpcyBOb25lOgorICAg
ICAgICAgICAgc2VsZi5fdGVzdF9pZHMgPSBbXQorICAgICAgICAgICAgZm9yIHRlc3RfZGljdCBp
biBbc2VsZi5kaXNhYmxlZF90ZXN0cywgc2VsZi50ZXN0c106CisgICAgICAgICAgICAgICAgZm9y
IHRlc3RfdHlwZSBpbiBzZWxmLnRlc3RfdHlwZXM6CisgICAgICAgICAgICAgICAgICAgIHNlbGYu
X3Rlc3RfaWRzICs9IFtpdGVtLmlkIGZvciBpdGVtIGluIHRlc3RfZGljdFt0ZXN0X3R5cGVdXQor
ICAgICAgICByZXR1cm4gc2VsZi5fdGVzdF9pZHMKKworICAgIGRlZiBnZXRfdGVzdChzZWxmLCBt
YW5pZmVzdF90ZXN0LCBpbmhlcml0X21ldGFkYXRhLCB0ZXN0X21ldGFkYXRhKToKKyAgICAgICAg
aWYgdGVzdF9tZXRhZGF0YSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGluaGVyaXRfbWV0YWRh
dGEuYXBwZW5kKHRlc3RfbWV0YWRhdGEpCisgICAgICAgICAgICB0ZXN0X21ldGFkYXRhID0gdGVz
dF9tZXRhZGF0YS5nZXRfdGVzdChtYW5pZmVzdF90ZXN0LmlkKQorCisgICAgICAgIHJldHVybiB3
cHR0ZXN0LmZyb21fbWFuaWZlc3QobWFuaWZlc3RfdGVzdCwgaW5oZXJpdF9tZXRhZGF0YSwgdGVz
dF9tZXRhZGF0YSkKKworICAgIGRlZiBsb2FkX2Rpcl9tZXRhZGF0YShzZWxmLCB0ZXN0X21hbmlm
ZXN0LCBtZXRhZGF0YV9wYXRoLCB0ZXN0X3BhdGgpOgorICAgICAgICBydiA9IFtdCisgICAgICAg
IHBhdGhfcGFydHMgPSBvcy5wYXRoLmRpcm5hbWUodGVzdF9wYXRoKS5zcGxpdChvcy5wYXRoLnNl
cCkKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKDEsbGVuKHBhdGhfcGFydHMpICsgMSk6CisgICAg
ICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKG1ldGFkYXRhX3BhdGgsIG9zLnBhdGguc2VwLmpv
aW4ocGF0aF9wYXJ0c1s6aV0pLCAiX19kaXJfXy5pbmkiKQorICAgICAgICAgICAgaWYgcGF0aCBu
b3QgaW4gc2VsZi5kaXJlY3RvcnlfbWFuaWZlc3RzOgorICAgICAgICAgICAgICAgIHNlbGYuZGly
ZWN0b3J5X21hbmlmZXN0c1twYXRoXSA9IG1hbmlmZXN0ZXhwZWN0ZWQuZ2V0X2Rpcl9tYW5pZmVz
dChwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJ1bl9pbmZvKQorICAgICAg
ICAgICAgbWFuaWZlc3QgPSBzZWxmLmRpcmVjdG9yeV9tYW5pZmVzdHNbcGF0aF0KKyAgICAgICAg
ICAgIGlmIG1hbmlmZXN0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJ2LmFwcGVuZCht
YW5pZmVzdCkKKyAgICAgICAgcmV0dXJuIHJ2CisKKyAgICBkZWYgbG9hZF9tZXRhZGF0YShzZWxm
LCB0ZXN0X21hbmlmZXN0LCBtZXRhZGF0YV9wYXRoLCB0ZXN0X3BhdGgpOgorICAgICAgICBpbmhl
cml0X21ldGFkYXRhID0gc2VsZi5sb2FkX2Rpcl9tZXRhZGF0YSh0ZXN0X21hbmlmZXN0LCBtZXRh
ZGF0YV9wYXRoLCB0ZXN0X3BhdGgpCisgICAgICAgIHRlc3RfbWV0YWRhdGEgPSBtYW5pZmVzdGV4
cGVjdGVkLmdldF9tYW5pZmVzdCgKKyAgICAgICAgICAgIG1ldGFkYXRhX3BhdGgsIHRlc3RfcGF0
aCwgdGVzdF9tYW5pZmVzdC51cmxfYmFzZSwgc2VsZi5ydW5faW5mbykKKyAgICAgICAgcmV0dXJu
IGluaGVyaXRfbWV0YWRhdGEsIHRlc3RfbWV0YWRhdGEKKworICAgIGRlZiBpdGVyX3Rlc3RzKHNl
bGYpOgorICAgICAgICBtYW5pZmVzdF9pdGVtcyA9IFtdCisKKyAgICAgICAgZm9yIG1hbmlmZXN0
IGluIHNvcnRlZChzZWxmLm1hbmlmZXN0cy5rZXlzKCksIGtleT1sYW1iZGEgeDp4LnVybF9iYXNl
KToKKyAgICAgICAgICAgIG1hbmlmZXN0X2l0ZXIgPSBpdGVyZmlsdGVyKHNlbGYubWFuaWZlc3Rf
ZmlsdGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hbmlmZXN0
Lml0ZXJ0eXBlcygqc2VsZi50ZXN0X3R5cGVzKSkKKyAgICAgICAgICAgIG1hbmlmZXN0X2l0ZW1z
LmV4dGVuZChtYW5pZmVzdF9pdGVyKQorCisgICAgICAgIGlmIHNlbGYuY2h1bmtlciBpcyBub3Qg
Tm9uZToKKyAgICAgICAgICAgIG1hbmlmZXN0X2l0ZW1zID0gc2VsZi5jaHVua2VyKG1hbmlmZXN0
X2l0ZW1zKQorCisgICAgICAgIGZvciB0ZXN0X3R5cGUsIHRlc3RfcGF0aCwgdGVzdHMgaW4gbWFu
aWZlc3RfaXRlbXM6CisgICAgICAgICAgICBtYW5pZmVzdF9maWxlID0gaXRlcih0ZXN0cykubmV4
dCgpLm1hbmlmZXN0CisgICAgICAgICAgICBtZXRhZGF0YV9wYXRoID0gc2VsZi5tYW5pZmVzdHNb
bWFuaWZlc3RfZmlsZV1bIm1ldGFkYXRhX3BhdGgiXQorICAgICAgICAgICAgaW5oZXJpdF9tZXRh
ZGF0YSwgdGVzdF9tZXRhZGF0YSA9IHNlbGYubG9hZF9tZXRhZGF0YShtYW5pZmVzdF9maWxlLCBt
ZXRhZGF0YV9wYXRoLCB0ZXN0X3BhdGgpCisKKyAgICAgICAgICAgIGZvciB0ZXN0IGluIGl0ZXJm
aWx0ZXIoc2VsZi5tZXRhX2ZpbHRlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGYuaXRlcl93cHR0ZXN0KGluaGVyaXRfbWV0YWRhdGEsIHRlc3RfbWV0YWRhdGEsIHRl
c3RzKSk6CisgICAgICAgICAgICAgICAgeWllbGQgdGVzdF9wYXRoLCB0ZXN0X3R5cGUsIHRlc3QK
KworICAgIGRlZiBpdGVyX3dwdHRlc3Qoc2VsZiwgaW5oZXJpdF9tZXRhZGF0YSwgdGVzdF9tZXRh
ZGF0YSwgdGVzdHMpOgorICAgICAgICBmb3IgbWFuaWZlc3RfdGVzdCBpbiB0ZXN0czoKKyAgICAg
ICAgICAgIHlpZWxkIHNlbGYuZ2V0X3Rlc3QobWFuaWZlc3RfdGVzdCwgaW5oZXJpdF9tZXRhZGF0
YSwgdGVzdF9tZXRhZGF0YSkKKworICAgIGRlZiBfbG9hZF90ZXN0cyhzZWxmKToKKyAgICAgICAg
IiIiUmVhZCBpbiB0aGUgdGVzdHMgZnJvbSB0aGUgbWFuaWZlc3QgZmlsZSBhbmQgYWRkIHRoZW0g
dG8gYSBxdWV1ZSIiIgorICAgICAgICB0ZXN0cyA9IHsiZW5hYmxlZCI6ZGVmYXVsdGRpY3QobGlz
dCksCisgICAgICAgICAgICAgICAgICJkaXNhYmxlZCI6ZGVmYXVsdGRpY3QobGlzdCl9CisKKyAg
ICAgICAgZm9yIHRlc3RfcGF0aCwgdGVzdF90eXBlLCB0ZXN0IGluIHNlbGYuaXRlcl90ZXN0cygp
OgorICAgICAgICAgICAgZW5hYmxlZCA9IG5vdCB0ZXN0LmRpc2FibGVkKCkKKyAgICAgICAgICAg
IGlmIG5vdCBzZWxmLmluY2x1ZGVfaHR0cHMgYW5kIHRlc3QuZW52aXJvbm1lbnRbInByb3RvY29s
Il0gPT0gImh0dHBzIjoKKyAgICAgICAgICAgICAgICBlbmFibGVkID0gRmFsc2UKKyAgICAgICAg
ICAgIGtleSA9ICJlbmFibGVkIiBpZiBlbmFibGVkIGVsc2UgImRpc2FibGVkIgorICAgICAgICAg
ICAgdGVzdHNba2V5XVt0ZXN0X3R5cGVdLmFwcGVuZCh0ZXN0KQorCisgICAgICAgIHNlbGYudGVz
dHMgPSB0ZXN0c1siZW5hYmxlZCJdCisgICAgICAgIHNlbGYuZGlzYWJsZWRfdGVzdHMgPSB0ZXN0
c1siZGlzYWJsZWQiXQorCisgICAgZGVmIGdyb3VwcyhzZWxmLCB0ZXN0X3R5cGVzLCBjaHVua190
eXBlPSJub25lIiwgdG90YWxfY2h1bmtzPTEsIGNodW5rX251bWJlcj0xKToKKyAgICAgICAgZ3Jv
dXBzID0gc2V0KCkKKworICAgICAgICBmb3IgdGVzdF90eXBlIGluIHRlc3RfdHlwZXM6CisgICAg
ICAgICAgICBmb3IgdGVzdCBpbiBzZWxmLnRlc3RzW3Rlc3RfdHlwZV06CisgICAgICAgICAgICAg
ICAgZ3JvdXAgPSB0ZXN0LnVybC5zcGxpdCgiLyIpWzFdCisgICAgICAgICAgICAgICAgZ3JvdXBz
LmFkZChncm91cCkKKworICAgICAgICByZXR1cm4gZ3JvdXBzCisKKworY2xhc3MgVGVzdFNvdXJj
ZShvYmplY3QpOgorICAgIF9fbWV0YWNsYXNzX18gPSBBQkNNZXRhCisKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgdGVzdF9xdWV1ZSk6CisgICAgICAgIHNlbGYudGVzdF9xdWV1ZSA9IHRlc3RfcXVl
dWUKKyAgICAgICAgc2VsZi5jdXJyZW50X2dyb3VwID0gTm9uZQorICAgICAgICBzZWxmLmN1cnJl
bnRfbWV0YWRhdGEgPSBOb25lCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICAjQGNsYXNzbWV0
aG9kIChkb2Vzbid0IGNvbXBvc2Ugd2l0aCBAYWJzdHJhY3RtZXRob2QpCisgICAgZGVmIG1ha2Vf
cXVldWUoY2xzLCB0ZXN0cywgKiprd2FyZ3MpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgZ3Jv
dXAoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLmN1cnJlbnRfZ3JvdXAgb3IgbGVuKHNlbGYu
Y3VycmVudF9ncm91cCkgPT0gMDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBz
ZWxmLmN1cnJlbnRfZ3JvdXAsIHNlbGYuY3VycmVudF9tZXRhZGF0YSA9IHNlbGYudGVzdF9xdWV1
ZS5nZXQoYmxvY2s9RmFsc2UpCisgICAgICAgICAgICBleGNlcHQgRW1wdHk6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIE5vbmUsIE5vbmUKKyAgICAgICAgcmV0dXJuIHNlbGYuY3VycmVudF9ncm91
cCwgc2VsZi5jdXJyZW50X21ldGFkYXRhCisKKworY2xhc3MgR3JvdXBlZFNvdXJjZShUZXN0U291
cmNlKToKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgbmV3X2dyb3VwKGNscywgc3RhdGUsIHRl
c3QsICoqa3dhcmdzKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAg
QGNsYXNzbWV0aG9kCisgICAgZGVmIG1ha2VfcXVldWUoY2xzLCB0ZXN0cywgKiprd2FyZ3MpOgor
ICAgICAgICB0ZXN0X3F1ZXVlID0gUXVldWUoKQorICAgICAgICBncm91cHMgPSBbXQorCisgICAg
ICAgIHN0YXRlID0ge30KKworICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0czoKKyAgICAgICAgICAg
IGlmIGNscy5uZXdfZ3JvdXAoc3RhdGUsIHRlc3QsICoqa3dhcmdzKToKKyAgICAgICAgICAgICAg
ICBncm91cHMuYXBwZW5kKChkZXF1ZSgpLCB7fSkpCisKKyAgICAgICAgICAgIGdyb3VwLCBtZXRh
ZGF0YSA9IGdyb3Vwc1stMV0KKyAgICAgICAgICAgIGdyb3VwLmFwcGVuZCh0ZXN0KQorICAgICAg
ICAgICAgdGVzdC51cGRhdGVfbWV0YWRhdGEobWV0YWRhdGEpCisKKyAgICAgICAgZm9yIGl0ZW0g
aW4gZ3JvdXBzOgorICAgICAgICAgICAgdGVzdF9xdWV1ZS5wdXQoaXRlbSkKKyAgICAgICAgcmV0
dXJuIHRlc3RfcXVldWUKKworCitjbGFzcyBTaW5nbGVUZXN0U291cmNlKFRlc3RTb3VyY2UpOgor
ICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBtYWtlX3F1ZXVlKGNscywgdGVzdHMsICoqa3dhcmdz
KToKKyAgICAgICAgdGVzdF9xdWV1ZSA9IFF1ZXVlKCkKKyAgICAgICAgcHJvY2Vzc2VzID0ga3dh
cmdzWyJwcm9jZXNzZXMiXQorICAgICAgICBxdWV1ZXMgPSBbZGVxdWUoW10pIGZvciBfIGluIHhy
YW5nZShwcm9jZXNzZXMpXQorICAgICAgICBtZXRhZGF0YXMgPSBbe30gZm9yIF8gaW4geHJhbmdl
KHByb2Nlc3NlcyldCisgICAgICAgIGZvciB0ZXN0IGluIHRlc3RzOgorICAgICAgICAgICAgaWR4
ID0gaGFzaCh0ZXN0LmlkKSAlIHByb2Nlc3NlcworICAgICAgICAgICAgZ3JvdXAgPSBxdWV1ZXNb
aWR4XQorICAgICAgICAgICAgbWV0YWRhdGEgPSBtZXRhZGF0YXNbaWR4XQorICAgICAgICAgICAg
Z3JvdXAuYXBwZW5kKHRlc3QpCisgICAgICAgICAgICB0ZXN0LnVwZGF0ZV9tZXRhZGF0YShtZXRh
ZGF0YSkKKworICAgICAgICBmb3IgaXRlbSBpbiB6aXAocXVldWVzLCBtZXRhZGF0YXMpOgorICAg
ICAgICAgICAgdGVzdF9xdWV1ZS5wdXQoaXRlbSkKKworICAgICAgICByZXR1cm4gdGVzdF9xdWV1
ZQorCisKK2NsYXNzIFBhdGhHcm91cGVkU291cmNlKEdyb3VwZWRTb3VyY2UpOgorICAgIEBjbGFz
c21ldGhvZAorICAgIGRlZiBuZXdfZ3JvdXAoY2xzLCBzdGF0ZSwgdGVzdCwgKiprd2FyZ3MpOgor
ICAgICAgICBkZXB0aCA9IGt3YXJncy5nZXQoImRlcHRoIikKKyAgICAgICAgaWYgZGVwdGggaXMg
VHJ1ZToKKyAgICAgICAgICAgIGRlcHRoID0gTm9uZQorICAgICAgICBwYXRoID0gdXJscGFyc2Uu
dXJsc3BsaXQodGVzdC51cmwpLnBhdGguc3BsaXQoIi8iKVsxOi0xXVs6ZGVwdGhdCisgICAgICAg
IHJ2ID0gcGF0aCAhPSBzdGF0ZS5nZXQoInByZXZfcGF0aCIpCisgICAgICAgIHN0YXRlWyJwcmV2
X3BhdGgiXSA9IHBhdGgKKyAgICAgICAgcmV0dXJuIHJ2CmRpZmYgLS1naXQgYS9XZWJEcml2ZXJU
ZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci90ZXN0cnVubmVyLnB5
IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIv
dGVzdHJ1bm5lci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYzQ2
NTViN2ZhZTMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mv
dG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci90ZXN0cnVubmVyLnB5CkBAIC0wLDAgKzEsNzYxIEBA
Citmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHVuaWNvZGVfbGl0ZXJhbHMKKworaW1wb3J0IG11bHRp
cHJvY2Vzc2luZworaW1wb3J0IHN5cworaW1wb3J0IHRocmVhZGluZworaW1wb3J0IHRyYWNlYmFj
aworZnJvbSBRdWV1ZSBpbXBvcnQgRW1wdHkKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IG5hbWVk
dHVwbGUKK2Zyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBQcm9jZXNzLCBjdXJyZW50X3Byb2Nl
c3MsIFF1ZXVlCisKK2Zyb20gbW96bG9nIGltcG9ydCBzdHJ1Y3R1cmVkbG9nCisKKyMgU3BlY2lh
bCB2YWx1ZSB1c2VkIGFzIGEgc2VudGluYWwgaW4gdmFyaW91cyBjb21tYW5kcworU3RvcCA9IG9i
amVjdCgpCisKKworY2xhc3MgTWVzc2FnZUxvZ2dlcihvYmplY3QpOgorICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBtZXNzYWdlX2Z1bmMpOgorICAgICAgICBzZWxmLnNlbmRfbWVzc2FnZSA9IG1lc3Nh
Z2VfZnVuYworCisgICAgZGVmIF9sb2dfZGF0YShzZWxmLCBhY3Rpb24sICoqa3dhcmdzKToKKyAg
ICAgICAgc2VsZi5zZW5kX21lc3NhZ2UoImxvZyIsIGFjdGlvbiwga3dhcmdzKQorCisgICAgZGVm
IHByb2Nlc3Nfb3V0cHV0KHNlbGYsIHByb2Nlc3MsIGRhdGEsIGNvbW1hbmQpOgorICAgICAgICBz
ZWxmLl9sb2dfZGF0YSgicHJvY2Vzc19vdXRwdXQiLCBwcm9jZXNzPXByb2Nlc3MsIGRhdGE9ZGF0
YSwgY29tbWFuZD1jb21tYW5kKQorCisKK2RlZiBfbG9nX2Z1bmMobGV2ZWxfbmFtZSk6CisgICAg
ZGVmIGxvZyhzZWxmLCBtZXNzYWdlKToKKyAgICAgICAgc2VsZi5fbG9nX2RhdGEobGV2ZWxfbmFt
ZS5sb3dlcigpLCBtZXNzYWdlPW1lc3NhZ2UpCisgICAgbG9nLl9fZG9jX18gPSAiIiJMb2cgYSBt
ZXNzYWdlIHdpdGggbGV2ZWwgJXMKKworOnBhcmFtIG1lc3NhZ2U6IFRoZSBzdHJpbmcgbWVzc2Fn
ZSB0byBsb2cKKyIiIiAlIGxldmVsX25hbWUKKyAgICBsb2cuX19uYW1lX18gPSBzdHIobGV2ZWxf
bmFtZSkubG93ZXIoKQorICAgIHJldHVybiBsb2cKKworIyBDcmVhdGUgYWxsIHRoZSBtZXRob2Rz
IG9uIFN0cnVjdHVyZWRMb2cgZm9yIGRlYnVnIGxldmVscworZm9yIGxldmVsX25hbWUgaW4gc3Ry
dWN0dXJlZGxvZy5sb2dfbGV2ZWxzOgorICAgIHNldGF0dHIoTWVzc2FnZUxvZ2dlciwgbGV2ZWxf
bmFtZS5sb3dlcigpLCBfbG9nX2Z1bmMobGV2ZWxfbmFtZSkpCisKKworY2xhc3MgVGVzdFJ1bm5l
cihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb21tYW5kX3F1ZXVlLCByZXN1bHRf
cXVldWUsIGV4ZWN1dG9yKToKKyAgICAgICAgIiIiQ2xhc3MgaW1wbGVtZW50aW5nIHRoZSBtYWlu
IGxvb3AgZm9yIHJ1bm5pbmcgdGVzdHMuCisKKyAgICAgICAgVGhpcyBjbGFzcyBkZWxlZ2F0ZXMg
dGhlIGpvYiBvZiBhY3R1YWxseSBydW5uaW5nIGEgdGVzdCB0byB0aGUgZXhlY3V0b3IKKyAgICAg
ICAgdGhhdCBpcyBwYXNzZWQgaW4uCisKKyAgICAgICAgOnBhcmFtIGNvbW1hbmRfcXVldWU6IHN1
YnByb2Nlc3MuUXVldWUgdXNlZCB0byBzZW5kIGNvbW1hbmRzIHRvIHRoZQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHJvY2VzcworICAgICAgICA6cGFyYW0gcmVzdWx0X3F1ZXVlOiBz
dWJwcm9jZXNzLlF1ZXVlIHVzZWQgdG8gc2VuZCByZXN1bHRzIHRvIHRoZQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwYXJlbnQgVGVzdE1hbmFnZXIgcHJvY2VzcworICAgICAgICA6cGFy
YW0gZXhlY3V0b3I6IFRlc3RFeGVjdXRvciBvYmplY3QgdGhhdCB3aWxsIGFjdHVhbGx5IHJ1biBh
IHRlc3QuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmNvbW1hbmRfcXVldWUgPSBjb21tYW5k
X3F1ZXVlCisgICAgICAgIHNlbGYucmVzdWx0X3F1ZXVlID0gcmVzdWx0X3F1ZXVlCisKKyAgICAg
ICAgc2VsZi5leGVjdXRvciA9IGV4ZWN1dG9yCisgICAgICAgIHNlbGYubmFtZSA9IGN1cnJlbnRf
cHJvY2VzcygpLm5hbWUKKyAgICAgICAgc2VsZi5sb2dnZXIgPSBNZXNzYWdlTG9nZ2VyKHNlbGYu
c2VuZF9tZXNzYWdlKQorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJu
IHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCBleGNfdHlwZSwgZXhjX3ZhbHVlLCB0cmFj
ZWJhY2spOgorICAgICAgICBzZWxmLnRlYXJkb3duKCkKKworICAgIGRlZiBzZXR1cChzZWxmKToK
KyAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcoIkV4ZWN1dG9yIHNldHVwIikKKyAgICAgICAgc2Vs
Zi5leGVjdXRvci5zZXR1cChzZWxmKQorICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1ZygiRXhlY3V0
b3Igc2V0dXAgZG9uZSIpCisKKyAgICBkZWYgdGVhcmRvd24oc2VsZik6CisgICAgICAgIHNlbGYu
ZXhlY3V0b3IudGVhcmRvd24oKQorICAgICAgICBzZWxmLnNlbmRfbWVzc2FnZSgicnVubmVyX3Rl
YXJkb3duIikKKyAgICAgICAgc2VsZi5yZXN1bHRfcXVldWUgPSBOb25lCisgICAgICAgIHNlbGYu
Y29tbWFuZF9xdWV1ZSA9IE5vbmUKKyAgICAgICAgc2VsZi5icm93c2VyID0gTm9uZQorCisgICAg
ZGVmIHJ1bihzZWxmKToKKyAgICAgICAgIiIiTWFpbiBsb29wIGFjY2VwdGluZyBjb21tYW5kcyBv
dmVyIHRoZSBwaXBlIGFuZCB0cmlnZ2VyaW5nCisgICAgICAgIHRoZSBhc3NvY2lhdGVkIG1ldGhv
ZHMiIiIKKyAgICAgICAgc2VsZi5zZXR1cCgpCisgICAgICAgIGNvbW1hbmRzID0geyJydW5fdGVz
dCI6IHNlbGYucnVuX3Rlc3QsCisgICAgICAgICAgICAgICAgICAgICJzdG9wIjogc2VsZi5zdG9w
LAorICAgICAgICAgICAgICAgICAgICAid2FpdCI6IHNlbGYud2FpdH0KKyAgICAgICAgd2hpbGUg
VHJ1ZToKKyAgICAgICAgICAgIGNvbW1hbmQsIGFyZ3MgPSBzZWxmLmNvbW1hbmRfcXVldWUuZ2V0
KCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBydiA9IGNvbW1hbmRzW2NvbW1h
bmRdKCphcmdzKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAg
ICBzZWxmLnNlbmRfbWVzc2FnZSgiZXJyb3IiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJFcnJvciBydW5uaW5nIGNvbW1hbmQgJXMgd2l0aCBhcmd1bWVudHMgJXI6XG4lcyIg
JQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb21tYW5kLCBhcmdzLCB0cmFj
ZWJhY2suZm9ybWF0X2V4YygpKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAg
aWYgcnYgaXMgU3RvcDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgIGRlZiBzdG9w
KHNlbGYpOgorICAgICAgICByZXR1cm4gU3RvcAorCisgICAgZGVmIHJ1bl90ZXN0KHNlbGYsIHRl
c3QpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5leGVjdXRvci5ydW5f
dGVzdCh0ZXN0KQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgc2VsZi5s
b2dnZXIuY3JpdGljYWwodHJhY2ViYWNrLmZvcm1hdF9leGMoKSkKKyAgICAgICAgICAgIHJhaXNl
CisKKyAgICBkZWYgd2FpdChzZWxmKToKKyAgICAgICAgc2VsZi5leGVjdXRvci5wcm90b2NvbC53
YWl0KCkKKyAgICAgICAgc2VsZi5zZW5kX21lc3NhZ2UoIndhaXRfZmluaXNoZWQiKQorCisgICAg
ZGVmIHNlbmRfbWVzc2FnZShzZWxmLCBjb21tYW5kLCAqYXJncyk6CisgICAgICAgIHNlbGYucmVz
dWx0X3F1ZXVlLnB1dCgoY29tbWFuZCwgYXJncykpCisKKworZGVmIHN0YXJ0X3J1bm5lcihydW5u
ZXJfY29tbWFuZF9xdWV1ZSwgcnVubmVyX3Jlc3VsdF9xdWV1ZSwKKyAgICAgICAgICAgICAgICAg
ZXhlY3V0b3JfY2xzLCBleGVjdXRvcl9rd2FyZ3MsCisgICAgICAgICAgICAgICAgIGV4ZWN1dG9y
X2Jyb3dzZXJfY2xzLCBleGVjdXRvcl9icm93c2VyX2t3YXJncywKKyAgICAgICAgICAgICAgICAg
c3RvcF9mbGFnKToKKyAgICAiIiJMYXVuY2ggYSBUZXN0UnVubmVyIGluIGEgbmV3IHByb2Nlc3Mi
IiIKKyAgICB0cnk6CisgICAgICAgIGJyb3dzZXIgPSBleGVjdXRvcl9icm93c2VyX2NscygqKmV4
ZWN1dG9yX2Jyb3dzZXJfa3dhcmdzKQorICAgICAgICBleGVjdXRvciA9IGV4ZWN1dG9yX2Nscyhi
cm93c2VyLCAqKmV4ZWN1dG9yX2t3YXJncykKKyAgICAgICAgd2l0aCBUZXN0UnVubmVyKHJ1bm5l
cl9jb21tYW5kX3F1ZXVlLCBydW5uZXJfcmVzdWx0X3F1ZXVlLCBleGVjdXRvcikgYXMgcnVubmVy
OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJ1bm5lci5ydW4oKQorICAgICAg
ICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgICAgIHN0b3BfZmxh
Zy5zZXQoKQorICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgIHJ1bm5lcl9yZXN1bHRfcXVl
dWUucHV0KCgibG9nIiwgKCJjcml0aWNhbCIsIHsibWVzc2FnZSI6IHRyYWNlYmFjay5mb3JtYXRf
ZXhjKCl9KSkpCisgICAgICAgIHByaW50ID4+IHN5cy5zdGRlcnIsIHRyYWNlYmFjay5mb3JtYXRf
ZXhjKCkKKyAgICAgICAgc3RvcF9mbGFnLnNldCgpCisgICAgZmluYWxseToKKyAgICAgICAgcnVu
bmVyX2NvbW1hbmRfcXVldWUgPSBOb25lCisgICAgICAgIHJ1bm5lcl9yZXN1bHRfcXVldWUgPSBO
b25lCisKKworbWFuYWdlcl9jb3VudCA9IDAKKworCitkZWYgbmV4dF9tYW5hZ2VyX251bWJlcigp
OgorICAgIGdsb2JhbCBtYW5hZ2VyX2NvdW50CisgICAgbG9jYWwgPSBtYW5hZ2VyX2NvdW50ID0g
bWFuYWdlcl9jb3VudCArIDEKKyAgICByZXR1cm4gbG9jYWwKKworCitjbGFzcyBCcm93c2VyTWFu
YWdlcihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2dnZXIsIGJyb3dzZXIsIGNv
bW1hbmRfcXVldWUsIG5vX3RpbWVvdXQ9RmFsc2UpOgorICAgICAgICBzZWxmLmxvZ2dlciA9IGxv
Z2dlcgorICAgICAgICBzZWxmLmJyb3dzZXIgPSBicm93c2VyCisgICAgICAgIHNlbGYubm9fdGlt
ZW91dCA9IG5vX3RpbWVvdXQKKyAgICAgICAgc2VsZi5icm93c2VyX3NldHRpbmdzID0gTm9uZQor
ICAgICAgICBzZWxmLmxhc3RfdGVzdCA9IE5vbmUKKworICAgICAgICBzZWxmLnN0YXJ0ZWQgPSBG
YWxzZQorCisgICAgICAgIHNlbGYuaW5pdF90aW1lciA9IE5vbmUKKworICAgIGRlZiB1cGRhdGVf
c2V0dGluZ3Moc2VsZiwgdGVzdCk6CisgICAgICAgIGJyb3dzZXJfc2V0dGluZ3MgPSBzZWxmLmJy
b3dzZXIuc2V0dGluZ3ModGVzdCkKKyAgICAgICAgcmVzdGFydF9yZXF1aXJlZCA9ICgoc2VsZi5i
cm93c2VyX3NldHRpbmdzIGlzIG5vdCBOb25lIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxmLmJyb3dzZXJfc2V0dGluZ3MgIT0gYnJvd3Nlcl9zZXR0aW5ncykgb3IKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5sYXN0X3Rlc3QgIT0gdGVzdCBhbmQgdGVzdC5l
eHBlY3RlZCgpID09ICJDUkFTSCIpKQorICAgICAgICBzZWxmLmJyb3dzZXJfc2V0dGluZ3MgPSBi
cm93c2VyX3NldHRpbmdzCisgICAgICAgIHNlbGYubGFzdF90ZXN0ID0gdGVzdAorICAgICAgICBy
ZXR1cm4gcmVzdGFydF9yZXF1aXJlZAorCisgICAgZGVmIGluaXQoc2VsZik6CisgICAgICAgICIi
IkxhdW5jaCB0aGUgYnJvd3NlciB0aGF0IGlzIGJlaW5nIHRlc3RlZCwKKyAgICAgICAgYW5kIHRo
ZSBUZXN0UnVubmVyIHByb2Nlc3MgdGhhdCB3aWxsIHJ1biB0aGUgdGVzdHMuIiIiCisgICAgICAg
ICMgSXQgc2VlbXMgdGhhdCB0aGlzIGxvY2sgaXMgaGVscGZ1bCB0byBwcmV2ZW50IHNvbWUgcmFj
ZSB0aGF0IG90aGVyd2lzZQorICAgICAgICAjIHNvbWV0aW1lcyBzdG9wcyB0aGUgc3Bhd25lZCBw
cm9jZXNzZXMgaW5pdGlhbGlzaW5nIGNvcnJlY3RseSwgYW5kCisgICAgICAgICMgbGVhdmVzIHRo
aXMgdGhyZWFkIGh1bmcKKyAgICAgICAgaWYgc2VsZi5pbml0X3RpbWVyIGlzIG5vdCBOb25lOgor
ICAgICAgICAgICAgc2VsZi5pbml0X3RpbWVyLmNhbmNlbCgpCisKKyAgICAgICAgc2VsZi5sb2dn
ZXIuZGVidWcoIkluaXQgY2FsbGVkLCBzdGFydGluZyBicm93c2VyIGFuZCBydW5uZXIiKQorCisg
ICAgICAgIGlmIG5vdCBzZWxmLm5vX3RpbWVvdXQ6CisgICAgICAgICAgICBzZWxmLmluaXRfdGlt
ZXIgPSB0aHJlYWRpbmcuVGltZXIoc2VsZi5icm93c2VyLmluaXRfdGltZW91dCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmluaXRfdGltZW91dCkK
KyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgc2VsZi5pbml0X3RpbWVyIGlzIG5vdCBOb25l
OgorICAgICAgICAgICAgICAgIHNlbGYuaW5pdF90aW1lci5zdGFydCgpCisgICAgICAgICAgICBz
ZWxmLmxvZ2dlci5kZWJ1ZygiU3RhcnRpbmcgYnJvd3NlciB3aXRoIHNldHRpbmdzICVyIiAlIHNl
bGYuYnJvd3Nlcl9zZXR0aW5ncykKKyAgICAgICAgICAgIHNlbGYuYnJvd3Nlci5zdGFydCgqKnNl
bGYuYnJvd3Nlcl9zZXR0aW5ncykKKyAgICAgICAgICAgIHNlbGYuYnJvd3Nlcl9waWQgPSBzZWxm
LmJyb3dzZXIucGlkKCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2VsZi5sb2dnZXIu
d2FybmluZygiRmFpbHVyZSBkdXJpbmcgaW5pdCAlcyIgJSB0cmFjZWJhY2suZm9ybWF0X2V4Yygp
KQorICAgICAgICAgICAgaWYgc2VsZi5pbml0X3RpbWVyIGlzIG5vdCBOb25lOgorICAgICAgICAg
ICAgICAgIHNlbGYuaW5pdF90aW1lci5jYW5jZWwoKQorICAgICAgICAgICAgc2VsZi5sb2dnZXIu
ZXJyb3IodHJhY2ViYWNrLmZvcm1hdF9leGMoKSkKKyAgICAgICAgICAgIHN1Y2NlZWRlZCA9IEZh
bHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzdWNjZWVkZWQgPSBUcnVlCisgICAgICAg
ICAgICBzZWxmLnN0YXJ0ZWQgPSBUcnVlCisKKyAgICAgICAgcmV0dXJuIHN1Y2NlZWRlZAorCisg
ICAgZGVmIHNlbmRfbWVzc2FnZShzZWxmLCBjb21tYW5kLCAqYXJncyk6CisgICAgICAgIHNlbGYu
Y29tbWFuZF9xdWV1ZS5wdXQoKGNvbW1hbmQsIGFyZ3MpKQorCisgICAgZGVmIGluaXRfdGltZW91
dChzZWxmKToKKyAgICAgICAgIyBUaGlzIGlzIGNhbGxlZCBmcm9tIGEgc2VwZXJhdGUgdGhyZWFk
LCBzbyB3ZSBzZW5kIGEgbWVzc2FnZSB0byB0aGUKKyAgICAgICAgIyBtYWluIGxvb3Agc28gd2Ug
Z2V0IGJhY2sgb250byB0aGUgbWFuYWdlciB0aHJlYWQKKyAgICAgICAgc2VsZi5sb2dnZXIuZGVi
dWcoImluaXRfZmFpbGVkIGNhbGxlZCBmcm9tIHRpbWVyIikKKyAgICAgICAgc2VsZi5zZW5kX21l
c3NhZ2UoImluaXRfZmFpbGVkIikKKworICAgIGRlZiBhZnRlcl9pbml0KHNlbGYpOgorICAgICAg
ICAiIiJDYWxsYmFjayB3aGVuIHdlIGhhdmUgc3RhcnRlZCB0aGUgYnJvd3Nlciwgc3RhcnRlZCB0
aGUgcmVtb3RlCisgICAgICAgIGNvbnRyb2wgY29ubmVjdGlvbiwgYW5kIHdlIGFyZSByZWFkeSB0
byBzdGFydCB0ZXN0aW5nLiIiIgorICAgICAgICBpZiBzZWxmLmluaXRfdGltZXIgaXMgbm90IE5v
bmU6CisgICAgICAgICAgICBzZWxmLmluaXRfdGltZXIuY2FuY2VsKCkKKworICAgIGRlZiBzdG9w
KHNlbGYsIGZvcmNlPUZhbHNlKToKKyAgICAgICAgc2VsZi5icm93c2VyLnN0b3AoZm9yY2U9Zm9y
Y2UpCisgICAgICAgIHNlbGYuc3RhcnRlZCA9IEZhbHNlCisKKyAgICBkZWYgY2xlYW51cChzZWxm
KToKKyAgICAgICAgaWYgc2VsZi5pbml0X3RpbWVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAg
c2VsZi5pbml0X3RpbWVyLmNhbmNlbCgpCisgICAgICAgIHNlbGYuYnJvd3Nlci5jbGVhbnVwKCkK
KworICAgIGRlZiBjaGVja19mb3JfY3Jhc2hlcyhzZWxmKToKKyAgICAgICAgc2VsZi5icm93c2Vy
LmNoZWNrX2Zvcl9jcmFzaGVzKCkKKworICAgIGRlZiBsb2dfY3Jhc2goc2VsZiwgdGVzdF9pZCk6
CisgICAgICAgIHNlbGYuYnJvd3Nlci5sb2dfY3Jhc2gocHJvY2Vzcz1zZWxmLmJyb3dzZXJfcGlk
LCB0ZXN0PXRlc3RfaWQpCisKKyAgICBkZWYgaXNfYWxpdmUoc2VsZik6CisgICAgICAgIHJldHVy
biBzZWxmLmJyb3dzZXIuaXNfYWxpdmUoKQorCisKK2NsYXNzIF9SdW5uZXJNYW5hZ2VyU3RhdGUo
b2JqZWN0KToKKyAgICBiZWZvcmVfaW5pdCA9IG5hbWVkdHVwbGUoImJlZm9yZV9pbml0IiwgW10p
CisgICAgaW5pdGlhbGl6aW5nID0gbmFtZWR0dXBsZSgiaW5pdGlhbGl6aW5nX2Jyb3dzZXIiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJ0ZXN0IiwgInRlc3RfZ3JvdXAiLCAiZ3Jv
dXBfbWV0YWRhdGEiLCAiZmFpbHVyZV9jb3VudCJdKQorICAgIHJ1bm5pbmcgPSBuYW1lZHR1cGxl
KCJydW5uaW5nIiwgWyJ0ZXN0IiwgInRlc3RfZ3JvdXAiLCAiZ3JvdXBfbWV0YWRhdGEiXSkKKyAg
ICByZXN0YXJ0aW5nID0gbmFtZWR0dXBsZSgicmVzdGFydGluZyIsIFsidGVzdCIsICJ0ZXN0X2dy
b3VwIiwgImdyb3VwX21ldGFkYXRhIl0pCisgICAgZXJyb3IgPSBuYW1lZHR1cGxlKCJlcnJvciIs
IFtdKQorICAgIHN0b3AgPSBuYW1lZHR1cGxlKCJzdG9wIiwgW10pCisKKworUnVubmVyTWFuYWdl
clN0YXRlID0gX1J1bm5lck1hbmFnZXJTdGF0ZSgpCisKKworY2xhc3MgVGVzdFJ1bm5lck1hbmFn
ZXIodGhyZWFkaW5nLlRocmVhZCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN1aXRlX25hbWUs
IHRlc3RfcXVldWUsIHRlc3Rfc291cmNlX2NscywgYnJvd3Nlcl9jbHMsIGJyb3dzZXJfa3dhcmdz
LAorICAgICAgICAgICAgICAgICBleGVjdXRvcl9jbHMsIGV4ZWN1dG9yX2t3YXJncywgc3RvcF9m
bGFnLCBwYXVzZV9hZnRlcl90ZXN0PUZhbHNlLAorICAgICAgICAgICAgICAgICBwYXVzZV9vbl91
bmV4cGVjdGVkPUZhbHNlLCByZXN0YXJ0X29uX3VuZXhwZWN0ZWQ9VHJ1ZSwgZGVidWdfaW5mbz1O
b25lKToKKyAgICAgICAgIiIiVGhyZWFkIHRoYXQgb3ducyBhIHNpbmdsZSBUZXN0UnVubmVyIHBy
b2Nlc3MgYW5kIGFueSBwcm9jZXNzZXMgcmVxdWlyZWQKKyAgICAgICAgYnkgdGhlIFRlc3RSdW5u
ZXIgKGUuZy4gdGhlIEZpcmVmb3ggYmluYXJ5KS4KKworICAgICAgICBUZXN0UnVubmVyTWFuYWdl
cnMgYXJlIHJlc3BvbnNpYmxlIGZvciBsYXVuY2hpbmcgdGhlIGJyb3dzZXIgcHJvY2VzcyBhbmQg
dGhlCisgICAgICAgIHJ1bm5lciBwcm9jZXNzLCBhbmQgZm9yIGxvZ2dpbmcgdGhlIHRlc3QgcHJv
Z3Jlc3MuIFRoZSBhY3R1YWwgdGVzdCBydW5uaW5nCisgICAgICAgIGlzIGRvbmUgYnkgdGhlIFRl
c3RSdW5uZXIuIEluIHBhcnRpY3VsYXIgdGhleToKKworICAgICAgICAqIFN0YXJ0IHRoZSBiaW5h
cnkgb2YgdGhlIHByb2dyYW0gdW5kZXIgdGVzdAorICAgICAgICAqIFN0YXJ0IHRoZSBUZXN0UnVu
bmVyCisgICAgICAgICogVGVsbCB0aGUgVGVzdFJ1bm5lciB0byBzdGFydCBhIHRlc3QsIGlmIGFu
eQorICAgICAgICAqIExvZyB0aGF0IHRoZSB0ZXN0IHN0YXJ0ZWQKKyAgICAgICAgKiBMb2cgdGhl
IHRlc3QgcmVzdWx0cworICAgICAgICAqIFRha2UgYW55IHJlbWVkaWFsIGFjdGlvbiByZXF1aXJl
ZCBlLmcuIHJlc3RhcnQgY3Jhc2hlZCBvciBodW5nCisgICAgICAgICAgcHJvY2Vzc2VzCisgICAg
ICAgICIiIgorICAgICAgICBzZWxmLnN1aXRlX25hbWUgPSBzdWl0ZV9uYW1lCisKKyAgICAgICAg
c2VsZi50ZXN0X3NvdXJjZSA9IHRlc3Rfc291cmNlX2Nscyh0ZXN0X3F1ZXVlKQorCisgICAgICAg
IHNlbGYuYnJvd3Nlcl9jbHMgPSBicm93c2VyX2NscworICAgICAgICBzZWxmLmJyb3dzZXJfa3dh
cmdzID0gYnJvd3Nlcl9rd2FyZ3MKKworICAgICAgICBzZWxmLmV4ZWN1dG9yX2NscyA9IGV4ZWN1
dG9yX2NscworICAgICAgICBzZWxmLmV4ZWN1dG9yX2t3YXJncyA9IGV4ZWN1dG9yX2t3YXJncwor
CisgICAgICAgICMgRmxhZ3MgdXNlZCB0byBzaHV0IGRvd24gdGhpcyB0aHJlYWQgaWYgd2UgZ2V0
IGEgc2lnaW50CisgICAgICAgIHNlbGYucGFyZW50X3N0b3BfZmxhZyA9IHN0b3BfZmxhZworICAg
ICAgICBzZWxmLmNoaWxkX3N0b3BfZmxhZyA9IG11bHRpcHJvY2Vzc2luZy5FdmVudCgpCisKKyAg
ICAgICAgc2VsZi5wYXVzZV9hZnRlcl90ZXN0ID0gcGF1c2VfYWZ0ZXJfdGVzdAorICAgICAgICBz
ZWxmLnBhdXNlX29uX3VuZXhwZWN0ZWQgPSBwYXVzZV9vbl91bmV4cGVjdGVkCisgICAgICAgIHNl
bGYucmVzdGFydF9vbl91bmV4cGVjdGVkID0gcmVzdGFydF9vbl91bmV4cGVjdGVkCisgICAgICAg
IHNlbGYuZGVidWdfaW5mbyA9IGRlYnVnX2luZm8KKworICAgICAgICBzZWxmLm1hbmFnZXJfbnVt
YmVyID0gbmV4dF9tYW5hZ2VyX251bWJlcigpCisKKyAgICAgICAgc2VsZi5jb21tYW5kX3F1ZXVl
ID0gUXVldWUoKQorICAgICAgICBzZWxmLnJlbW90ZV9xdWV1ZSA9IFF1ZXVlKCkKKworICAgICAg
ICBzZWxmLnRlc3RfcnVubmVyX3Byb2MgPSBOb25lCisKKyAgICAgICAgdGhyZWFkaW5nLlRocmVh
ZC5fX2luaXRfXyhzZWxmLCBuYW1lPSJUaHJlYWQtVGVzdHJ1bm5lck1hbmFnZXItJWkiICUgc2Vs
Zi5tYW5hZ2VyX251bWJlcikKKyAgICAgICAgIyBUaGlzIGlzIHN0YXJ0ZWQgaW4gdGhlIGFjdHVh
bCBuZXcgdGhyZWFkCisgICAgICAgIHNlbGYubG9nZ2VyID0gTm9uZQorCisgICAgICAgIHNlbGYu
dW5leHBlY3RlZF9jb3VudCA9IDAKKworICAgICAgICAjIFRoaXMgbWF5IG5vdCByZWFsbHkgYmUg
d2hhdCB3ZSB3YW50CisgICAgICAgIHNlbGYuZGFlbW9uID0gVHJ1ZQorCisgICAgICAgIHNlbGYu
bWF4X3Jlc3RhcnRzID0gNQorCisgICAgICAgIHNlbGYuYnJvd3NlciA9IE5vbmUKKworICAgIGRl
ZiBydW4oc2VsZik6CisgICAgICAgICIiIk1haW4gbG9vcCBmb3IgdGhlIFRlc3RNYW5hZ2VyLgor
CisgICAgICAgIFRlc3RNYW5hZ2VycyBnZW5lcmFsbHkgcmVjZWl2ZSBjb21tYW5kcyBmcm9tIHRo
ZWlyCisgICAgICAgIFRlc3RSdW5uZXIgdXBkYXRpbmcgdGhlbSBvbiB0aGUgc3RhdHVzIG9mIGEg
dGVzdC4gVGhleQorICAgICAgICBtYXkgYWxzbyBoYXZlIGEgc3RvcCBmbGFnIHNldCBieSB0aGUg
bWFpbiB0aHJlYWQgaW5kaWNhdGluZworICAgICAgICB0aGF0IHRoZSBtYW5hZ2VyIHNob3VsZCBz
aHV0IGRvd24gdGhlIG5leHQgdGltZSB0aGUgZXZlbnQgbG9vcAorICAgICAgICBzcGlucy4iIiIK
KyAgICAgICAgc2VsZi5sb2dnZXIgPSBzdHJ1Y3R1cmVkbG9nLlN0cnVjdHVyZWRMb2dnZXIoc2Vs
Zi5zdWl0ZV9uYW1lKQorICAgICAgICB3aXRoIHNlbGYuYnJvd3Nlcl9jbHMoc2VsZi5sb2dnZXIs
ICoqc2VsZi5icm93c2VyX2t3YXJncykgYXMgYnJvd3NlcjoKKyAgICAgICAgICAgIHNlbGYuYnJv
d3NlciA9IEJyb3dzZXJNYW5hZ2VyKHNlbGYubG9nZ2VyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJvd3NlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNlbGYuY29tbWFuZF9xdWV1ZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5vX3RpbWVvdXQ9c2VsZi5kZWJ1Z19pbmZvIGlzIG5vdCBO
b25lKQorICAgICAgICAgICAgZGlzcGF0Y2ggPSB7CisgICAgICAgICAgICAgICAgUnVubmVyTWFu
YWdlclN0YXRlLmJlZm9yZV9pbml0OiBzZWxmLnN0YXJ0X2luaXQsCisgICAgICAgICAgICAgICAg
UnVubmVyTWFuYWdlclN0YXRlLmluaXRpYWxpemluZzogc2VsZi5pbml0LAorICAgICAgICAgICAg
ICAgIFJ1bm5lck1hbmFnZXJTdGF0ZS5ydW5uaW5nOiBzZWxmLnJ1bl90ZXN0LAorICAgICAgICAg
ICAgICAgIFJ1bm5lck1hbmFnZXJTdGF0ZS5yZXN0YXJ0aW5nOiBzZWxmLnJlc3RhcnRfcnVubmVy
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBSdW5uZXJNYW5hZ2Vy
U3RhdGUuYmVmb3JlX2luaXQoKQorICAgICAgICAgICAgZW5kX3N0YXRlcyA9IChSdW5uZXJNYW5h
Z2VyU3RhdGUuc3RvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUnVubmVyTWFuYWdlclN0
YXRlLmVycm9yKQorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2hpbGUgbm90
IGlzaW5zdGFuY2Uoc2VsZi5zdGF0ZSwgZW5kX3N0YXRlcyk6CisgICAgICAgICAgICAgICAgICAg
IGYgPSBkaXNwYXRjaC5nZXQoc2VsZi5zdGF0ZS5fX2NsYXNzX18pCisgICAgICAgICAgICAgICAg
ICAgIHdoaWxlIGY6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1Zygi
RGlzcGF0Y2ggJXMiICUgZi5fX25hbWVfXykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNl
bGYuc2hvdWxkX3N0b3AoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAg
ICAgICAgICAgICAgICAgICAgICAgIG5ld19zdGF0ZSA9IGYoKQorICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgbmV3X3N0YXRlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBuZXdfc3RhdGUKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJuZXcgc3RhdGU6ICVzIiAl
IHNlbGYuc3RhdGUuX19jbGFzc19fLl9fbmFtZV9fKQorICAgICAgICAgICAgICAgICAgICAgICAg
aWYgaXNpbnN0YW5jZShzZWxmLnN0YXRlLCBlbmRfc3RhdGVzKToKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBkaXNwYXRjaC5n
ZXQoc2VsZi5zdGF0ZS5fX2NsYXNzX18pCisKKyAgICAgICAgICAgICAgICAgICAgbmV3X3N0YXRl
ID0gTm9uZQorICAgICAgICAgICAgICAgICAgICB3aGlsZSBuZXdfc3RhdGUgaXMgTm9uZToKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG5ld19zdGF0ZSA9IHNlbGYud2FpdF9ldmVudCgpCisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnNob3VsZF9zdG9wKCk6CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBu
ZXdfc3RhdGUKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcoIm5ldyBzdGF0
ZTogJXMiICUgc2VsZi5zdGF0ZS5fX2NsYXNzX18uX19uYW1lX18pCisgICAgICAgICAgICBleGNl
cHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIuZXJyb3IodHJh
Y2ViYWNrLmZvcm1hdF9leGMoZSkpCisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAg
IGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcoIlRlc3RSdW5uZXJN
YW5hZ2VyIG1haW4gbG9vcCB0ZXJtaW5hdGluZywgc3RhcnRpbmcgY2xlYW51cCIpCisgICAgICAg
ICAgICAgICAgY2xlYW4gPSBpc2luc3RhbmNlKHNlbGYuc3RhdGUsIFJ1bm5lck1hbmFnZXJTdGF0
ZS5zdG9wKQorICAgICAgICAgICAgICAgIHNlbGYuc3RvcF9ydW5uZXIoZm9yY2U9bm90IGNsZWFu
KQorICAgICAgICAgICAgICAgIHNlbGYudGVhcmRvd24oKQorICAgICAgICBzZWxmLmxvZ2dlci5k
ZWJ1ZygiVGVzdFJ1bm5lck1hbmFnZXIgbWFpbiBsb29wIHRlcm1pbmF0ZWQiKQorCisgICAgZGVm
IHdhaXRfZXZlbnQoc2VsZik6CisgICAgICAgIGRpc3BhdGNoID0geworICAgICAgICAgICAgUnVu
bmVyTWFuYWdlclN0YXRlLmJlZm9yZV9pbml0OiB7fSwKKyAgICAgICAgICAgIFJ1bm5lck1hbmFn
ZXJTdGF0ZS5pbml0aWFsaXppbmc6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgImlu
aXRfc3VjY2VlZGVkIjogc2VsZi5pbml0X3N1Y2NlZWRlZCwKKyAgICAgICAgICAgICAgICAiaW5p
dF9mYWlsZWQiOiBzZWxmLmluaXRfZmFpbGVkLAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAg
IFJ1bm5lck1hbmFnZXJTdGF0ZS5ydW5uaW5nOgorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICJ0ZXN0X2VuZGVkIjogc2VsZi50ZXN0X2VuZGVkLAorICAgICAgICAgICAgICAgICJ3YWl0
X2ZpbmlzaGVkIjogc2VsZi53YWl0X2ZpbmlzaGVkLAorICAgICAgICAgICAgfSwKKyAgICAgICAg
ICAgIFJ1bm5lck1hbmFnZXJTdGF0ZS5yZXN0YXJ0aW5nOiB7fSwKKyAgICAgICAgICAgIFJ1bm5l
ck1hbmFnZXJTdGF0ZS5lcnJvcjoge30sCisgICAgICAgICAgICBSdW5uZXJNYW5hZ2VyU3RhdGUu
c3RvcDoge30sCisgICAgICAgICAgICBOb25lOiB7CisgICAgICAgICAgICAgICAgInJ1bm5lcl90
ZWFyZG93biI6IHNlbGYucnVubmVyX3RlYXJkb3duLAorICAgICAgICAgICAgICAgICJsb2ciOiBz
ZWxmLmxvZywKKyAgICAgICAgICAgICAgICAiZXJyb3IiOiBzZWxmLmVycm9yCisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29tbWFuZCwgZGF0YSA9
IHNlbGYuY29tbWFuZF9xdWV1ZS5nZXQoVHJ1ZSwgMSkKKyAgICAgICAgZXhjZXB0IElPRXJyb3I6
CisgICAgICAgICAgICBzZWxmLmxvZ2dlci5lcnJvcigiR290IElPRXJyb3IgZnJvbSBwb2xsIikK
KyAgICAgICAgICAgIHJldHVybiBSdW5uZXJNYW5hZ2VyU3RhdGUucmVzdGFydGluZygwKQorICAg
ICAgICBleGNlcHQgRW1wdHk6CisgICAgICAgICAgICBpZiAoc2VsZi5kZWJ1Z19pbmZvIGFuZCBz
ZWxmLmRlYnVnX2luZm8uaW50ZXJhY3RpdmUgYW5kCisgICAgICAgICAgICAgICAgc2VsZi5icm93
c2VyLnN0YXJ0ZWQgYW5kIG5vdCBzZWxmLmJyb3dzZXIuaXNfYWxpdmUoKSk6CisgICAgICAgICAg
ICAgICAgc2VsZi5sb2dnZXIuZGVidWcoIkRlYnVnZ2VyIGV4aXRlZCIpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIFJ1bm5lck1hbmFnZXJTdGF0ZS5zdG9wKCkKKworICAgICAgICAgICAgaWYgKGlz
aW5zdGFuY2Uoc2VsZi5zdGF0ZSwgUnVubmVyTWFuYWdlclN0YXRlLnJ1bm5pbmcpIGFuZAorICAg
ICAgICAgICAgICAgIG5vdCBzZWxmLnRlc3RfcnVubmVyX3Byb2MuaXNfYWxpdmUoKSk6CisgICAg
ICAgICAgICAgICAgaWYgbm90IHNlbGYuY29tbWFuZF9xdWV1ZS5lbXB0eSgpOgorICAgICAgICAg
ICAgICAgICAgICAjIFdlIGdvdCBhIG5ldyBtZXNzYWdlIHNvIHByb2Nlc3MgdGhhdAorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAgICAgICAgICMgSWYgd2UgZ290IHRvIGhl
cmUgdGhlIHJ1bm5lciBwcmVzdW1hYmx5IHNodXQgZG93bgorICAgICAgICAgICAgICAgICMgdW5l
eHBlY3RlZGx5CisgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygiVGVzdCBydW5uZXIg
cHJvY2VzcyBzaHV0IGRvd24iKQorCisgICAgICAgICAgICAgICAgaWYgc2VsZi5zdGF0ZS50ZXN0
IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAjIFRoaXMgY291bGQgaGFwcGVuIGlm
IHRoZSB0ZXN0IHJ1bm5lciBjcmFzaGVkIGZvciBzb21lIG90aGVyCisgICAgICAgICAgICAgICAg
ICAgICMgcmVhc29uCisgICAgICAgICAgICAgICAgICAgICMgTmVlZCB0byBjb25zaWRlciB0aGUg
dW5saWtlbHkgY2FzZSB3aGVyZSBvbmUgdGVzdCBjYXVzZXMgdGhlCisgICAgICAgICAgICAgICAg
ICAgICMgcnVubmVyIHByb2Nlc3MgdG8gcmVwZWF0ZWRseSBkaWUKKyAgICAgICAgICAgICAgICAg
ICAgc2VsZi5sb2dnZXIuY3JpdGljYWwoIkxhc3QgdGVzdCBkaWQgbm90IGNvbXBsZXRlIikKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIFJ1bm5lck1hbmFnZXJTdGF0ZS5lcnJvcigpCisgICAg
ICAgICAgICAgICAgc2VsZi5sb2dnZXIud2FybmluZygiTW9yZSB0ZXN0cyBmb3VuZCwgYnV0IHJ1
bm5lciBwcm9jZXNzIGRpZWQsIHJlc3RhcnRpbmciKQorICAgICAgICAgICAgICAgIHJldHVybiBS
dW5uZXJNYW5hZ2VyU3RhdGUucmVzdGFydGluZygwKQorICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgZiA9IChkaXNwYXRjaC5nZXQoc2VsZi5zdGF0ZS5fX2NsYXNzX18sIHt9KS5nZXQoY29tbWFu
ZCkgb3IKKyAgICAgICAgICAgICAgICAgZGlzcGF0Y2guZ2V0KE5vbmUsIHt9KS5nZXQoY29tbWFu
ZCkpCisgICAgICAgICAgICBpZiBub3QgZjoKKyAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci53
YXJuaW5nKCJHb3QgY29tbWFuZCAlcyBpbiBzdGF0ZSAlcyIgJQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKGNvbW1hbmQsIHNlbGYuc3RhdGUuX19jbGFzc19fLl9fbmFtZV9f
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHJldHVybiBmKCpkYXRhKQor
CisgICAgZGVmIHNob3VsZF9zdG9wKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5jaGlsZF9z
dG9wX2ZsYWcuaXNfc2V0KCkgb3Igc2VsZi5wYXJlbnRfc3RvcF9mbGFnLmlzX3NldCgpCisKKyAg
ICBkZWYgc3RhcnRfaW5pdChzZWxmKToKKyAgICAgICAgdGVzdCwgdGVzdF9ncm91cCwgZ3JvdXBf
bWV0YWRhdGEgPSBzZWxmLmdldF9uZXh0X3Rlc3QoKQorICAgICAgICBpZiB0ZXN0IGlzIE5vbmU6
CisgICAgICAgICAgICByZXR1cm4gUnVubmVyTWFuYWdlclN0YXRlLnN0b3AoKQorICAgICAgICBl
bHNlOgorICAgICAgICAgICAgcmV0dXJuIFJ1bm5lck1hbmFnZXJTdGF0ZS5pbml0aWFsaXppbmco
dGVzdCwgdGVzdF9ncm91cCwgZ3JvdXBfbWV0YWRhdGEsIDApCisKKyAgICBkZWYgaW5pdChzZWxm
KToKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2Uoc2VsZi5zdGF0ZSwgUnVubmVyTWFuYWdlclN0
YXRlLmluaXRpYWxpemluZykKKyAgICAgICAgaWYgc2VsZi5zdGF0ZS5mYWlsdXJlX2NvdW50ID4g
c2VsZi5tYXhfcmVzdGFydHM6CisgICAgICAgICAgICBzZWxmLmxvZ2dlci5lcnJvcigiTWF4IHJl
c3RhcnRzIGV4Y2VlZGVkIikKKyAgICAgICAgICAgIHJldHVybiBSdW5uZXJNYW5hZ2VyU3RhdGUu
ZXJyb3IoKQorCisgICAgICAgIHNlbGYuYnJvd3Nlci51cGRhdGVfc2V0dGluZ3Moc2VsZi5zdGF0
ZS50ZXN0KQorCisgICAgICAgIHJlc3VsdCA9IHNlbGYuYnJvd3Nlci5pbml0KCkKKyAgICAgICAg
aWYgcmVzdWx0IGlzIFN0b3A6CisgICAgICAgICAgICByZXR1cm4gUnVubmVyTWFuYWdlclN0YXRl
LmVycm9yKCkKKyAgICAgICAgZWxpZiBub3QgcmVzdWx0OgorICAgICAgICAgICAgcmV0dXJuIFJ1
bm5lck1hbmFnZXJTdGF0ZS5pbml0aWFsaXppbmcoc2VsZi5zdGF0ZS50ZXN0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGF0ZS50ZXN0
X2dyb3VwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZi5zdGF0ZS5ncm91cF9tZXRhZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RhdGUuZmFpbHVyZV9jb3VudCArIDEpCisg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmV4ZWN1dG9yX2t3YXJnc1siZ3JvdXBfbWV0
YWRhdGEiXSA9IHNlbGYuc3RhdGUuZ3JvdXBfbWV0YWRhdGEKKyAgICAgICAgICAgIHNlbGYuc3Rh
cnRfdGVzdF9ydW5uZXIoKQorCisgICAgZGVmIHN0YXJ0X3Rlc3RfcnVubmVyKHNlbGYpOgorICAg
ICAgICAjIE5vdGUgdGhhdCB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwgdG8gc3RhcnQgdGhlIGJyb3dz
ZXIgYmVmb3JlIHRoZQorICAgICAgICAjIHRlc3QgcnVubmVyIHRvIGVuc3VyZSB0aGF0IGFueSBz
dGF0ZSBzZXQgd2hlbiB0aGUgYnJvd3NlciBpcyBzdGFydGVkCisgICAgICAgICMgY2FuIGJlIHBh
c3NlZCBpbiB0byB0aGUgdGVzdCBydW5uZXIuCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHNl
bGYuc3RhdGUsIFJ1bm5lck1hbmFnZXJTdGF0ZS5pbml0aWFsaXppbmcpCisgICAgICAgIGFzc2Vy
dCBzZWxmLmNvbW1hbmRfcXVldWUgaXMgbm90IE5vbmUKKyAgICAgICAgYXNzZXJ0IHNlbGYucmVt
b3RlX3F1ZXVlIGlzIG5vdCBOb25lCisgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oIlN0YXJ0aW5n
IHJ1bm5lciIpCisgICAgICAgIGV4ZWN1dG9yX2Jyb3dzZXJfY2xzLCBleGVjdXRvcl9icm93c2Vy
X2t3YXJncyA9IHNlbGYuYnJvd3Nlci5icm93c2VyLmV4ZWN1dG9yX2Jyb3dzZXIoKQorCisgICAg
ICAgIGFyZ3MgPSAoc2VsZi5yZW1vdGVfcXVldWUsCisgICAgICAgICAgICAgICAgc2VsZi5jb21t
YW5kX3F1ZXVlLAorICAgICAgICAgICAgICAgIHNlbGYuZXhlY3V0b3JfY2xzLAorICAgICAgICAg
ICAgICAgIHNlbGYuZXhlY3V0b3Jfa3dhcmdzLAorICAgICAgICAgICAgICAgIGV4ZWN1dG9yX2Jy
b3dzZXJfY2xzLAorICAgICAgICAgICAgICAgIGV4ZWN1dG9yX2Jyb3dzZXJfa3dhcmdzLAorICAg
ICAgICAgICAgICAgIHNlbGYuY2hpbGRfc3RvcF9mbGFnKQorICAgICAgICBzZWxmLnRlc3RfcnVu
bmVyX3Byb2MgPSBQcm9jZXNzKHRhcmdldD1zdGFydF9ydW5uZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYXJncz1hcmdzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5hbWU9IlRocmVhZC1UZXN0UnVubmVyLSVpIiAlIHNlbGYubWFu
YWdlcl9udW1iZXIpCisgICAgICAgIHNlbGYudGVzdF9ydW5uZXJfcHJvYy5zdGFydCgpCisgICAg
ICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJUZXN0IHJ1bm5lciBzdGFydGVkIikKKyAgICAgICAgIyBO
b3cgd2Ugd2FpdCBmb3IgZWl0aGVyIGFuIGluaXRfc3VjY2VlZGVkIGV2ZW50IG9yIGFuIGluaXRf
ZmFpbGVkIGV2ZW50CisKKyAgICBkZWYgaW5pdF9zdWNjZWVkZWQoc2VsZik6CisgICAgICAgIGFz
c2VydCBpc2luc3RhbmNlKHNlbGYuc3RhdGUsIFJ1bm5lck1hbmFnZXJTdGF0ZS5pbml0aWFsaXpp
bmcpCisgICAgICAgIHNlbGYuYnJvd3Nlci5hZnRlcl9pbml0KCkKKyAgICAgICAgcmV0dXJuIFJ1
bm5lck1hbmFnZXJTdGF0ZS5ydW5uaW5nKHNlbGYuc3RhdGUudGVzdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RhdGUudGVzdF9ncm91cCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RhdGUuZ3JvdXBfbWV0
YWRhdGEpCisKKyAgICBkZWYgaW5pdF9mYWlsZWQoc2VsZik6CisgICAgICAgIGFzc2VydCBpc2lu
c3RhbmNlKHNlbGYuc3RhdGUsIFJ1bm5lck1hbmFnZXJTdGF0ZS5pbml0aWFsaXppbmcpCisgICAg
ICAgIHNlbGYuYnJvd3Nlci5hZnRlcl9pbml0KCkKKyAgICAgICAgc2VsZi5zdG9wX3J1bm5lcihm
b3JjZT1UcnVlKQorICAgICAgICByZXR1cm4gUnVubmVyTWFuYWdlclN0YXRlLmluaXRpYWxpemlu
ZyhzZWxmLnN0YXRlLnRlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbGYuc3RhdGUudGVzdF9ncm91cCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGF0ZS5ncm91cF9tZXRhZGF0YSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGF0ZS5mYWls
dXJlX2NvdW50ICsgMSkKKworICAgIGRlZiBnZXRfbmV4dF90ZXN0KHNlbGYsIHRlc3RfZ3JvdXA9
Tm9uZSk6CisgICAgICAgIHRlc3QgPSBOb25lCisgICAgICAgIHdoaWxlIHRlc3QgaXMgTm9uZToK
KyAgICAgICAgICAgIHdoaWxlIHRlc3RfZ3JvdXAgaXMgTm9uZSBvciBsZW4odGVzdF9ncm91cCkg
PT0gMDoKKyAgICAgICAgICAgICAgICB0ZXN0X2dyb3VwLCBncm91cF9tZXRhZGF0YSA9IHNlbGYu
dGVzdF9zb3VyY2UuZ3JvdXAoKQorICAgICAgICAgICAgICAgIGlmIHRlc3RfZ3JvdXAgaXMgTm9u
ZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygiTm8gbW9yZSB0ZXN0cyIp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lLCBOb25lLCBOb25lCisgICAgICAgICAg
ICB0ZXN0ID0gdGVzdF9ncm91cC5wb3BsZWZ0KCkKKyAgICAgICAgcmV0dXJuIHRlc3QsIHRlc3Rf
Z3JvdXAsIGdyb3VwX21ldGFkYXRhCisKKworICAgIGRlZiBydW5fdGVzdChzZWxmKToKKyAgICAg
ICAgYXNzZXJ0IGlzaW5zdGFuY2Uoc2VsZi5zdGF0ZSwgUnVubmVyTWFuYWdlclN0YXRlLnJ1bm5p
bmcpCisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlLnRlc3QgaXMgbm90IE5vbmUKKworICAgICAg
ICBpZiBzZWxmLmJyb3dzZXIudXBkYXRlX3NldHRpbmdzKHNlbGYuc3RhdGUudGVzdCk6CisgICAg
ICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKCJSZXN0YXJ0aW5nIGJyb3dzZXIgZm9yIG5ldyB0ZXN0
IGVudmlyb25tZW50IikKKyAgICAgICAgICAgIHJldHVybiBSdW5uZXJNYW5hZ2VyU3RhdGUucmVz
dGFydGluZyhzZWxmLnN0YXRlLnRlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2VsZi5zdGF0ZS50ZXN0X2dyb3VwLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RhdGUuZ3JvdXBfbWV0YWRh
dGEpCisKKyAgICAgICAgc2VsZi5sb2dnZXIudGVzdF9zdGFydChzZWxmLnN0YXRlLnRlc3QuaWQp
CisgICAgICAgIHNlbGYuc2VuZF9tZXNzYWdlKCJydW5fdGVzdCIsIHNlbGYuc3RhdGUudGVzdCkK
KworICAgIGRlZiB0ZXN0X2VuZGVkKHNlbGYsIHRlc3QsIHJlc3VsdHMpOgorICAgICAgICAiIiJI
YW5kbGUgdGhlIGVuZCBvZiBhIHRlc3QuCisKKyAgICAgICAgT3V0cHV0IHRoZSByZXN1bHQgb2Yg
ZWFjaCBzdWJ0ZXN0LCBhbmQgdGhlIHJlc3VsdCBvZiB0aGUgb3ZlcmFsbAorICAgICAgICBoYXJu
ZXNzIHRvIHRoZSBsb2dzLgorICAgICAgICAiIiIKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2Uo
c2VsZi5zdGF0ZSwgUnVubmVyTWFuYWdlclN0YXRlLnJ1bm5pbmcpCisgICAgICAgIGFzc2VydCB0
ZXN0ID09IHNlbGYuc3RhdGUudGVzdAorICAgICAgICAjIFdyaXRlIHRoZSByZXN1bHQgb2YgZWFj
aCBzdWJ0ZXN0CisgICAgICAgIGZpbGVfcmVzdWx0LCB0ZXN0X3Jlc3VsdHMgPSByZXN1bHRzCisg
ICAgICAgIHN1YnRlc3RfdW5leHBlY3RlZCA9IEZhbHNlCisgICAgICAgIGZvciByZXN1bHQgaW4g
dGVzdF9yZXN1bHRzOgorICAgICAgICAgICAgaWYgdGVzdC5kaXNhYmxlZChyZXN1bHQubmFtZSk6
CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGV4cGVjdGVkID0gdGVzdC5l
eHBlY3RlZChyZXN1bHQubmFtZSkKKyAgICAgICAgICAgIGlzX3VuZXhwZWN0ZWQgPSBleHBlY3Rl
ZCAhPSByZXN1bHQuc3RhdHVzCisKKyAgICAgICAgICAgIGlmIGlzX3VuZXhwZWN0ZWQ6CisgICAg
ICAgICAgICAgICAgc2VsZi51bmV4cGVjdGVkX2NvdW50ICs9IDEKKyAgICAgICAgICAgICAgICBz
ZWxmLmxvZ2dlci5kZWJ1ZygiVW5leHBlY3RlZCBjb3VudCBpbiB0aGlzIHRocmVhZCAlaSIgJSBz
ZWxmLnVuZXhwZWN0ZWRfY291bnQpCisgICAgICAgICAgICAgICAgc3VidGVzdF91bmV4cGVjdGVk
ID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi5sb2dnZXIudGVzdF9zdGF0dXModGVzdC5pZCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5uYW1lLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXR1cywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9cmVzdWx0Lm1lc3NhZ2UsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZD1leHBlY3RlZCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrPXJlc3VsdC5zdGFjaykKKworICAgICAgICAj
IFRPRE86IGNvbnNpZGVyIGNoYW5naW5nIHJlc3VsdCBpZiB0aGVyZSBpcyBhIGNyYXNoIGR1bXAg
ZmlsZQorCisgICAgICAgICMgV3JpdGUgdGhlIHJlc3VsdCBvZiB0aGUgdGVzdCBoYXJuZXNzCisg
ICAgICAgIGV4cGVjdGVkID0gdGVzdC5leHBlY3RlZCgpCisgICAgICAgIHN0YXR1cyA9IGZpbGVf
cmVzdWx0LnN0YXR1cyBpZiBmaWxlX3Jlc3VsdC5zdGF0dXMgIT0gIkVYVEVSTkFMLVRJTUVPVVQi
IGVsc2UgIlRJTUVPVVQiCisKKyAgICAgICAgaWYgZmlsZV9yZXN1bHQuc3RhdHVzIGluICAoIlRJ
TUVPVVQiLCAiRVhURVJOQUwtVElNRU9VVCIpOgorICAgICAgICAgICAgaWYgc2VsZi5icm93c2Vy
LmNoZWNrX2Zvcl9jcmFzaGVzKCk6CisgICAgICAgICAgICAgICAgc3RhdHVzID0gIkNSQVNIIgor
CisgICAgICAgIGlzX3VuZXhwZWN0ZWQgPSBleHBlY3RlZCAhPSBzdGF0dXMKKyAgICAgICAgaWYg
aXNfdW5leHBlY3RlZDoKKyAgICAgICAgICAgIHNlbGYudW5leHBlY3RlZF9jb3VudCArPSAxCisg
ICAgICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1ZygiVW5leHBlY3RlZCBjb3VudCBpbiB0aGlzIHRo
cmVhZCAlaSIgJSBzZWxmLnVuZXhwZWN0ZWRfY291bnQpCisgICAgICAgIGlmIHN0YXR1cyA9PSAi
Q1JBU0giOgorICAgICAgICAgICAgc2VsZi5icm93c2VyLmxvZ19jcmFzaCh0ZXN0LmlkKQorCisg
ICAgICAgIHNlbGYubG9nZ2VyLnRlc3RfZW5kKHRlc3QuaWQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT1m
aWxlX3Jlc3VsdC5tZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3Rl
ZD1leHBlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9ZmlsZV9yZXN1
bHQuZXh0cmEpCisKKyAgICAgICAgcmVzdGFydF9iZWZvcmVfbmV4dCA9ICh0ZXN0LnJlc3RhcnRf
YWZ0ZXIgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3Jlc3VsdC5zdGF0
dXMgaW4gKCJDUkFTSCIsICJFWFRFUk5BTC1USU1FT1VUIikgb3IKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoKHN1YnRlc3RfdW5leHBlY3RlZCBvciBpc191bmV4cGVjdGVkKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgc2VsZi5yZXN0YXJ0X29uX3VuZXhwZWN0
ZWQpKQorCisgICAgICAgIGlmIChzZWxmLnBhdXNlX2FmdGVyX3Rlc3Qgb3IKKyAgICAgICAgICAg
IChzZWxmLnBhdXNlX29uX3VuZXhwZWN0ZWQgYW5kIChzdWJ0ZXN0X3VuZXhwZWN0ZWQgb3IgaXNf
dW5leHBlY3RlZCkpKToKKyAgICAgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oIlBhdXNpbmcgdW50
aWwgdGhlIGJyb3dzZXIgZXhpdHMiKQorICAgICAgICAgICAgc2VsZi5zZW5kX21lc3NhZ2UoIndh
aXQiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuYWZ0ZXJfdGVzdF9l
bmQocmVzdGFydF9iZWZvcmVfbmV4dCkKKworICAgIGRlZiB3YWl0X2ZpbmlzaGVkKHNlbGYpOgor
ICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShzZWxmLnN0YXRlLCBSdW5uZXJNYW5hZ2VyU3RhdGUu
cnVubmluZykKKyAgICAgICAgIyBUaGUgYnJvd3NlciBzaG91bGQgYmUgc3RvcHBlZCBhbHJlYWR5
LCBidXQgdGhpcyBlbnN1cmVzIHdlIGRvIGFueSBwb3N0LXN0b3AKKyAgICAgICAgIyBwcm9jZXNz
aW5nCisgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJXYWl0IGZpbmlzaGVkIikKKworICAgICAg
ICByZXR1cm4gc2VsZi5hZnRlcl90ZXN0X2VuZChUcnVlKQorCisgICAgZGVmIGFmdGVyX3Rlc3Rf
ZW5kKHNlbGYsIHJlc3RhcnQpOgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShzZWxmLnN0YXRl
LCBSdW5uZXJNYW5hZ2VyU3RhdGUucnVubmluZykKKyAgICAgICAgdGVzdCwgdGVzdF9ncm91cCwg
Z3JvdXBfbWV0YWRhdGEgPSBzZWxmLmdldF9uZXh0X3Rlc3QoKQorICAgICAgICBpZiB0ZXN0IGlz
IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gUnVubmVyTWFuYWdlclN0YXRlLnN0b3AoKQorICAg
ICAgICBpZiB0ZXN0X2dyb3VwICE9IHNlbGYuc3RhdGUudGVzdF9ncm91cDoKKyAgICAgICAgICAg
ICMgV2UgYXJlIHN0YXJ0aW5nIGEgbmV3IGdyb3VwIG9mIHRlc3RzLCBzbyBmb3JjZSBhIHJlc3Rh
cnQKKyAgICAgICAgICAgIHJlc3RhcnQgPSBUcnVlCisgICAgICAgIGlmIHJlc3RhcnQ6CisgICAg
ICAgICAgICByZXR1cm4gUnVubmVyTWFuYWdlclN0YXRlLnJlc3RhcnRpbmcodGVzdCwgdGVzdF9n
cm91cCwgZ3JvdXBfbWV0YWRhdGEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4g
UnVubmVyTWFuYWdlclN0YXRlLnJ1bm5pbmcodGVzdCwgdGVzdF9ncm91cCwgZ3JvdXBfbWV0YWRh
dGEpCisKKyAgICBkZWYgcmVzdGFydF9ydW5uZXIoc2VsZik6CisgICAgICAgICIiIlN0b3AgYW5k
IHJlc3RhcnQgdGhlIFRlc3RSdW5uZXIiIiIKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2Uoc2Vs
Zi5zdGF0ZSwgUnVubmVyTWFuYWdlclN0YXRlLnJlc3RhcnRpbmcpCisgICAgICAgIHNlbGYuc3Rv
cF9ydW5uZXIoKQorICAgICAgICByZXR1cm4gUnVubmVyTWFuYWdlclN0YXRlLmluaXRpYWxpemlu
ZyhzZWxmLnN0YXRlLnRlc3QsIHNlbGYuc3RhdGUudGVzdF9ncm91cCwgc2VsZi5zdGF0ZS5ncm91
cF9tZXRhZGF0YSwgMCkKKworICAgIGRlZiBsb2coc2VsZiwgYWN0aW9uLCBrd2FyZ3MpOgorICAg
ICAgICBnZXRhdHRyKHNlbGYubG9nZ2VyLCBhY3Rpb24pKCoqa3dhcmdzKQorCisgICAgZGVmIGVy
cm9yKHNlbGYsIG1lc3NhZ2UpOgorICAgICAgICBzZWxmLmxvZ2dlci5lcnJvcihtZXNzYWdlKQor
ICAgICAgICBzZWxmLnJlc3RhcnRfcnVubmVyKCkKKworICAgIGRlZiBzdG9wX3J1bm5lcihzZWxm
LCBmb3JjZT1GYWxzZSk6CisgICAgICAgICIiIlN0b3AgdGhlIFRlc3RSdW5uZXIgYW5kIHRoZSBi
cm93c2VyIGJpbmFyeS4iIiIKKyAgICAgICAgaWYgc2VsZi50ZXN0X3J1bm5lcl9wcm9jIGlzIE5v
bmU6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBzZWxmLnRlc3RfcnVubmVyX3By
b2MuaXNfYWxpdmUoKToKKyAgICAgICAgICAgIHNlbGYuc2VuZF9tZXNzYWdlKCJzdG9wIikKKyAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5icm93c2VyLnN0b3AoZm9yY2U9Zm9yY2UpCisg
ICAgICAgICAgICBzZWxmLmVuc3VyZV9ydW5uZXJfc3RvcHBlZCgpCisgICAgICAgIGZpbmFsbHk6
CisgICAgICAgICAgICBzZWxmLmNsZWFudXAoKQorCisgICAgZGVmIHRlYXJkb3duKHNlbGYpOgor
ICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1ZygidGVhcmRvd24gaW4gdGVzdHJ1bm5lcm1hbmFnZXIi
KQorICAgICAgICBzZWxmLnRlc3RfcnVubmVyX3Byb2MgPSBOb25lCisgICAgICAgIHNlbGYuY29t
bWFuZF9xdWV1ZS5jbG9zZSgpCisgICAgICAgIHNlbGYucmVtb3RlX3F1ZXVlLmNsb3NlKCkKKyAg
ICAgICAgc2VsZi5jb21tYW5kX3F1ZXVlID0gTm9uZQorICAgICAgICBzZWxmLnJlbW90ZV9xdWV1
ZSA9IE5vbmUKKworICAgIGRlZiBlbnN1cmVfcnVubmVyX3N0b3BwZWQoc2VsZik6CisgICAgICAg
IHNlbGYubG9nZ2VyLmRlYnVnKCJlbnN1cmVfcnVubmVyX3N0b3BwZWQiKQorICAgICAgICBpZiBz
ZWxmLnRlc3RfcnVubmVyX3Byb2MgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorCisgICAg
ICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJ3YWl0aW5nIGZvciBydW5uZXIgcHJvY2VzcyB0byBlbmQi
KQorICAgICAgICBzZWxmLnRlc3RfcnVubmVyX3Byb2Muam9pbigxMCkKKyAgICAgICAgc2VsZi5s
b2dnZXIuZGVidWcoIkFmdGVyIGpvaW4iKQorICAgICAgICBpZiBzZWxmLnRlc3RfcnVubmVyX3By
b2MuaXNfYWxpdmUoKToKKyAgICAgICAgICAgICMgVGhpcyBtaWdodCBsZWFrIGEgZmlsZSBoYW5k
bGUgZnJvbSB0aGUgcXVldWUKKyAgICAgICAgICAgIHNlbGYubG9nZ2VyLndhcm5pbmcoIkZvcmNp
Ymx5IHRlcm1pbmF0aW5nIHJ1bm5lciBwcm9jZXNzIikKKyAgICAgICAgICAgIHNlbGYudGVzdF9y
dW5uZXJfcHJvYy50ZXJtaW5hdGUoKQorICAgICAgICAgICAgc2VsZi50ZXN0X3J1bm5lcl9wcm9j
LmpvaW4oMTApCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1Zygi
VGVzdHJ1bm5lciBleGl0ZWQgd2l0aCBjb2RlICVpIiAlIHNlbGYudGVzdF9ydW5uZXJfcHJvYy5l
eGl0Y29kZSkKKworICAgIGRlZiBydW5uZXJfdGVhcmRvd24oc2VsZik6CisgICAgICAgIHNlbGYu
ZW5zdXJlX3J1bm5lcl9zdG9wcGVkKCkKKyAgICAgICAgcmV0dXJuIFJ1bm5lck1hbmFnZXJTdGF0
ZS5zdG9wKCkKKworICAgIGRlZiBzZW5kX21lc3NhZ2Uoc2VsZiwgY29tbWFuZCwgKmFyZ3MpOgor
ICAgICAgICBzZWxmLnJlbW90ZV9xdWV1ZS5wdXQoKGNvbW1hbmQsIGFyZ3MpKQorCisgICAgZGVm
IGNsZWFudXAoc2VsZik6CisgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJUZXN0TWFuYWdlciBj
bGVhbnVwIikKKyAgICAgICAgaWYgc2VsZi5icm93c2VyOgorICAgICAgICAgICAgc2VsZi5icm93
c2VyLmNsZWFudXAoKQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgICAgIHNlbGYubG9nZ2VyLndhcm5pbmcoIiAiLmpvaW4obWFwKHJlcHIsIHNlbGYu
Y29tbWFuZF9xdWV1ZS5nZXRfbm93YWl0KCkpKSkKKyAgICAgICAgICAgIGV4Y2VwdCBFbXB0eToK
KyAgICAgICAgICAgICAgICBicmVhaworCisKK2RlZiBtYWtlX3Rlc3RfcXVldWUodGVzdHMsIHRl
c3Rfc291cmNlX2NscywgKip0ZXN0X3NvdXJjZV9rd2FyZ3MpOgorICAgIHF1ZXVlID0gdGVzdF9z
b3VyY2VfY2xzLm1ha2VfcXVldWUodGVzdHMsICoqdGVzdF9zb3VyY2Vfa3dhcmdzKQorCisgICAg
IyBUaGVyZSBpcyBhIHJhY2UgY29uZGl0aW9uIHRoYXQgbWVhbnMgc29tZXRpbWVzIHdlIGNvbnRp
bnVlCisgICAgIyBiZWZvcmUgdGhlIHRlc3RzIGhhdmUgYmVlbiB3cml0dGVuIHRvIHRoZSB1bmRl
cmx5aW5nIHBpcGUuCisgICAgIyBQb2xsaW5nIHRoZSBwaXBlIGZvciBkYXRhIGhlcmUgYXZvaWRz
IHRoYXQKKyAgICBxdWV1ZS5fcmVhZGVyLnBvbGwoMTApCisgICAgYXNzZXJ0IG5vdCBxdWV1ZS5l
bXB0eSgpCisgICAgcmV0dXJuIHF1ZXVlCisKKworY2xhc3MgTWFuYWdlckdyb3VwKG9iamVjdCk6
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN1aXRlX25hbWUsIHNpemUsIHRlc3Rfc291cmNlX2Ns
cywgdGVzdF9zb3VyY2Vfa3dhcmdzLAorICAgICAgICAgICAgICAgICBicm93c2VyX2NscywgYnJv
d3Nlcl9rd2FyZ3MsCisgICAgICAgICAgICAgICAgIGV4ZWN1dG9yX2NscywgZXhlY3V0b3Jfa3dh
cmdzLAorICAgICAgICAgICAgICAgICBwYXVzZV9hZnRlcl90ZXN0PUZhbHNlLAorICAgICAgICAg
ICAgICAgICBwYXVzZV9vbl91bmV4cGVjdGVkPUZhbHNlLAorICAgICAgICAgICAgICAgICByZXN0
YXJ0X29uX3VuZXhwZWN0ZWQ9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgZGVidWdfaW5mbz1Ob25l
KToKKyAgICAgICAgIiIiTWFpbiB0aHJlYWQgb2JqZWN0IHRoYXQgb3ducyBhbGwgdGhlIFRlc3RN
YW5hZ2VyIHRocmVhZHMuIiIiCisgICAgICAgIHNlbGYuc3VpdGVfbmFtZSA9IHN1aXRlX25hbWUK
KyAgICAgICAgc2VsZi5zaXplID0gc2l6ZQorICAgICAgICBzZWxmLnRlc3Rfc291cmNlX2NscyA9
IHRlc3Rfc291cmNlX2NscworICAgICAgICBzZWxmLnRlc3Rfc291cmNlX2t3YXJncyA9IHRlc3Rf
c291cmNlX2t3YXJncworICAgICAgICBzZWxmLmJyb3dzZXJfY2xzID0gYnJvd3Nlcl9jbHMKKyAg
ICAgICAgc2VsZi5icm93c2VyX2t3YXJncyA9IGJyb3dzZXJfa3dhcmdzCisgICAgICAgIHNlbGYu
ZXhlY3V0b3JfY2xzID0gZXhlY3V0b3JfY2xzCisgICAgICAgIHNlbGYuZXhlY3V0b3Jfa3dhcmdz
ID0gZXhlY3V0b3Jfa3dhcmdzCisgICAgICAgIHNlbGYucGF1c2VfYWZ0ZXJfdGVzdCA9IHBhdXNl
X2FmdGVyX3Rlc3QKKyAgICAgICAgc2VsZi5wYXVzZV9vbl91bmV4cGVjdGVkID0gcGF1c2Vfb25f
dW5leHBlY3RlZAorICAgICAgICBzZWxmLnJlc3RhcnRfb25fdW5leHBlY3RlZCA9IHJlc3RhcnRf
b25fdW5leHBlY3RlZAorICAgICAgICBzZWxmLmRlYnVnX2luZm8gPSBkZWJ1Z19pbmZvCisKKyAg
ICAgICAgc2VsZi5wb29sID0gc2V0KCkKKyAgICAgICAgIyBFdmVudCB0aGF0IGlzIHBvbGxlZCBi
eSB0aHJlYWRzIHNvIHRoYXQgdGhleSBjYW4gZ3JhY2VmdWxseSBleGl0IGluIHRoZSBmYWNlCisg
ICAgICAgICMgb2Ygc2lnaW50CisgICAgICAgIHNlbGYuc3RvcF9mbGFnID0gdGhyZWFkaW5nLkV2
ZW50KCkKKyAgICAgICAgc2VsZi5sb2dnZXIgPSBzdHJ1Y3R1cmVkbG9nLlN0cnVjdHVyZWRMb2dn
ZXIoc3VpdGVfbmFtZSkKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVy
biBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgZXhjX3R5cGUsIGV4Y192YWwsIGV4Y190
Yik6CisgICAgICAgIHNlbGYuc3RvcCgpCisKKyAgICBkZWYgcnVuKHNlbGYsIHRlc3RfdHlwZSwg
dGVzdHMpOgorICAgICAgICAiIiJTdGFydCBhbGwgbWFuYWdlcnMgaW4gdGhlIGdyb3VwIiIiCisg
ICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJVc2luZyAlaSBwcm9jZXNzZXMiICUgc2VsZi5zaXpl
KQorICAgICAgICB0eXBlX3Rlc3RzID0gdGVzdHNbdGVzdF90eXBlXQorICAgICAgICBpZiBub3Qg
dHlwZV90ZXN0czoKKyAgICAgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oIk5vICVzIHRlc3RzIHRv
IHJ1biIgJSB0ZXN0X3R5cGUpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICB0ZXN0X3F1
ZXVlID0gbWFrZV90ZXN0X3F1ZXVlKHR5cGVfdGVzdHMsIHNlbGYudGVzdF9zb3VyY2VfY2xzLCAq
KnNlbGYudGVzdF9zb3VyY2Vfa3dhcmdzKQorCisgICAgICAgIGZvciBfIGluIHJhbmdlKHNlbGYu
c2l6ZSk6CisgICAgICAgICAgICBtYW5hZ2VyID0gVGVzdFJ1bm5lck1hbmFnZXIoc2VsZi5zdWl0
ZV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfcXVl
dWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50ZXN0X3Nv
dXJjZV9jbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5i
cm93c2VyX2NscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxm
LmJyb3dzZXJfa3dhcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGYuZXhlY3V0b3JfY2xzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGYuZXhlY3V0b3Jfa3dhcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbGYuc3RvcF9mbGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbGYucGF1c2VfYWZ0ZXJfdGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZWxmLnBhdXNlX29uX3VuZXhwZWN0ZWQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXN0YXJ0X29uX3VuZXhwZWN0ZWQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kZWJ1Z19pbmZvKQor
ICAgICAgICAgICAgbWFuYWdlci5zdGFydCgpCisgICAgICAgICAgICBzZWxmLnBvb2wuYWRkKG1h
bmFnZXIpCisgICAgICAgIHNlbGYud2FpdCgpCisKKyAgICBkZWYgaXNfYWxpdmUoc2VsZik6Cisg
ICAgICAgICIiIkJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIGFueSBtYW5hZ2VyIGluIHRoZSBn
cm91cCBpcyBzdGlsbCBhbGl2ZSIiIgorICAgICAgICByZXR1cm4gYW55KG1hbmFnZXIuaXNfYWxp
dmUoKSBmb3IgbWFuYWdlciBpbiBzZWxmLnBvb2wpCisKKyAgICBkZWYgd2FpdChzZWxmKToKKyAg
ICAgICAgIiIiV2FpdCBmb3IgYWxsIHRoZSBtYW5hZ2VycyBpbiB0aGUgZ3JvdXAgdG8gZmluaXNo
IiIiCisgICAgICAgIGZvciBpdGVtIGluIHNlbGYucG9vbDoKKyAgICAgICAgICAgIGl0ZW0uam9p
bigpCisKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgIiIiU2V0IHRoZSBzdG9wIGZsYWcg
c28gdGhhdCBhbGwgbWFuYWdlcnMgaW4gdGhlIGdyb3VwIHN0b3AgYXMgc29vbgorICAgICAgICBh
cyBwb3NzaWJsZSIiIgorICAgICAgICBzZWxmLnN0b3BfZmxhZy5zZXQoKQorICAgICAgICBzZWxm
LmxvZ2dlci5kZWJ1ZygiU3RvcCBmbGFnIHNldCBpbiBNYW5hZ2VyR3JvdXAiKQorCisgICAgZGVm
IHVuZXhwZWN0ZWRfY291bnQoc2VsZik6CisgICAgICAgIHJldHVybiBzdW0oaXRlbS51bmV4cGVj
dGVkX2NvdW50IGZvciBpdGVtIGluIHNlbGYucG9vbCkKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRl
c3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3Rlc3RzL19faW5pdF9f
LnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5u
ZXIvdGVzdHMvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLmU2OWRlMjliYjJkCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mv
dG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci90ZXN0cy90ZXN0X2NodW5rZXIucHkgYi9XZWJEcml2
ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci90ZXN0cy90ZXN0
X2NodW5rZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjA2MmI2
ODdmYWI5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rv
b2xzL3dwdHJ1bm5lci93cHRydW5uZXIvdGVzdHMvdGVzdF9jaHVua2VyLnB5CkBAIC0wLDAgKzEs
OTEgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHN5cworZnJvbSBvcy5wYXRoIGltcG9ydCBq
b2luLCBkaXJuYW1lCitmcm9tIG1vemxvZyBpbXBvcnQgc3RydWN0dXJlZAorCitpbXBvcnQgcHl0
ZXN0CisKK3N5cy5wYXRoLmluc2VydCgwLCBqb2luKGRpcm5hbWUoX19maWxlX18pLCAiLi4iLCAi
Li4iKSkKKworZnJvbSB3cHRydW5uZXIudGVzdGxvYWRlciBpbXBvcnQgRXF1YWxUaW1lQ2h1bmtl
cgorCitzdHJ1Y3R1cmVkLnNldF9kZWZhdWx0X2xvZ2dlcihzdHJ1Y3R1cmVkLnN0cnVjdHVyZWRs
b2cuU3RydWN0dXJlZExvZ2dlcigiVGVzdENodW5rZXIiKSkKKworY2xhc3MgTW9ja1Rlc3Qob2Jq
ZWN0KToKKyAgICBkZWZhdWx0X3RpbWVvdXQgPSAxMAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYs
IGlkLCB0aW1lb3V0PTEwKToKKyAgICAgICAgc2VsZi5pZCA9IGlkCisgICAgICAgIHNlbGYuaXRl
bV90eXBlID0gInRlc3RoYXJuZXNzIgorICAgICAgICBzZWxmLnRpbWVvdXQgPSB0aW1lb3V0CisK
KworZGVmIG1ha2VfbW9ja19tYW5pZmVzdCgqaXRlbXMpOgorICAgIHJ2ID0gW10KKyAgICBmb3Ig
dGVzdF90eXBlLCBkaXJfcGF0aCwgbnVtX3Rlc3RzIGluIGl0ZW1zOgorICAgICAgICBmb3IgaSBp
biByYW5nZShudW1fdGVzdHMpOgorICAgICAgICAgICAgcnYuYXBwZW5kKCh0ZXN0X3R5cGUsCisg
ICAgICAgICAgICAgICAgICAgICAgIGRpcl9wYXRoICsgIi8laS50ZXN0IiAlIGksCisgICAgICAg
ICAgICAgICAgICAgICAgIHNldChbTW9ja1Rlc3QoaSldKSkpCisgICAgcmV0dXJuIHJ2CisKKwor
Y2xhc3MgVGVzdEVxdWFsVGltZUNodW5rZXIodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVm
IHRlc3RfaW5jbHVkZV9hbGwoc2VsZik6CisgICAgICAgIHRlc3RzID0gbWFrZV9tb2NrX21hbmlm
ZXN0KCgidGVzdCIsICJhIiwgMTApLCAoInRlc3QiLCAiYS9iIiwgMTApLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoInRlc3QiLCAiYyIsIDEwKSkKKworICAgICAgICBjaHVu
a18xID0gbGlzdChFcXVhbFRpbWVDaHVua2VyKDMsIDEpKHRlc3RzKSkKKyAgICAgICAgY2h1bmtf
MiA9IGxpc3QoRXF1YWxUaW1lQ2h1bmtlcigzLCAyKSh0ZXN0cykpCisgICAgICAgIGNodW5rXzMg
PSBsaXN0KEVxdWFsVGltZUNodW5rZXIoMywgMykodGVzdHMpKQorCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKHRlc3RzWzoxMF0sIGNodW5rXzEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxz
KHRlc3RzWzEwOjIwXSwgY2h1bmtfMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModGVzdHNb
MjA6XSwgY2h1bmtfMykKKworICAgIGRlZiB0ZXN0X2luY2x1ZGVfYWxsXzEoc2VsZik6CisgICAg
ICAgIHRlc3RzID0gbWFrZV9tb2NrX21hbmlmZXN0KCgidGVzdCIsICJhIiwgNSksICgidGVzdCIs
ICJhL2IiLCA1KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJ0ZXN0Iiwg
ImMiLCAxMCksICgidGVzdCIsICJkIiwgMTApKQorCisgICAgICAgIGNodW5rXzEgPSBsaXN0KEVx
dWFsVGltZUNodW5rZXIoMywgMSkodGVzdHMpKQorICAgICAgICBjaHVua18yID0gbGlzdChFcXVh
bFRpbWVDaHVua2VyKDMsIDIpKHRlc3RzKSkKKyAgICAgICAgY2h1bmtfMyA9IGxpc3QoRXF1YWxU
aW1lQ2h1bmtlcigzLCAzKSh0ZXN0cykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModGVz
dHNbOjEwXSwgY2h1bmtfMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModGVzdHNbMTA6MjBd
LCBjaHVua18yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0ZXN0c1syMDpdLCBjaHVua18z
KQorCisgICAgZGVmIHRlc3RfbG9uZyhzZWxmKToKKyAgICAgICAgdGVzdHMgPSBtYWtlX21vY2tf
bWFuaWZlc3QoKCJ0ZXN0IiwgImEiLCAxMDApLCAoInRlc3QiLCAiYS9iIiwgMSksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICgidGVzdCIsICJjIiwgMSkpCisKKyAgICAgICAg
Y2h1bmtfMSA9IGxpc3QoRXF1YWxUaW1lQ2h1bmtlcigzLCAxKSh0ZXN0cykpCisgICAgICAgIGNo
dW5rXzIgPSBsaXN0KEVxdWFsVGltZUNodW5rZXIoMywgMikodGVzdHMpKQorICAgICAgICBjaHVu
a18zID0gbGlzdChFcXVhbFRpbWVDaHVua2VyKDMsIDMpKHRlc3RzKSkKKworICAgICAgICBzZWxm
LmFzc2VydEVxdWFscyh0ZXN0c1s6MTAwXSwgY2h1bmtfMSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbHModGVzdHNbMTAwOjEwMV0sIGNodW5rXzIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxz
KHRlc3RzWzEwMToxMDJdLCBjaHVua18zKQorCisgICAgZGVmIHRlc3RfbG9uZ18xKHNlbGYpOgor
ICAgICAgICB0ZXN0cyA9IG1ha2VfbW9ja19tYW5pZmVzdCgoInRlc3QiLCAiYSIsIDEpLCAoInRl
c3QiLCAiYS9iIiwgMTAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJ0
ZXN0IiwgImMiLCAxKSkKKworICAgICAgICBjaHVua18xID0gbGlzdChFcXVhbFRpbWVDaHVua2Vy
KDMsIDEpKHRlc3RzKSkKKyAgICAgICAgY2h1bmtfMiA9IGxpc3QoRXF1YWxUaW1lQ2h1bmtlcigz
LCAyKSh0ZXN0cykpCisgICAgICAgIGNodW5rXzMgPSBsaXN0KEVxdWFsVGltZUNodW5rZXIoMywg
MykodGVzdHMpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHRlc3RzWzoxXSwgY2h1bmtf
MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModGVzdHNbMToxMDFdLCBjaHVua18yKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFscyh0ZXN0c1sxMDE6MTAyXSwgY2h1bmtfMykKKworICAgIGRl
ZiB0ZXN0X3Rvb19mZXdfZGlycyhzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNl
cyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHRlc3RzID0gbWFrZV9tb2NrX21hbmlmZXN0KCgi
dGVzdCIsICJhIiwgMSksICgidGVzdCIsICJhL2IiLCAxMDApLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKCJ0ZXN0IiwgImMiLCAxKSkKKyAgICAgICAgICAgIGxpc3Qo
RXF1YWxUaW1lQ2h1bmtlcig0LCAxKSh0ZXN0cykpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFp
bl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2lt
cG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3Rlc3RzL3Rlc3RfaG9zdHMucHkg
Yi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci90
ZXN0cy90ZXN0X2hvc3RzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li44MDhiODE2MDZhZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVk
L3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3Rlc3RzL3Rlc3RfaG9zdHMucHkKQEAgLTAs
MCArMSw1NiBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgc3lzCitmcm9tIG9zLnBhdGggaW1w
b3J0IGpvaW4sIGRpcm5hbWUKK2Zyb20gY1N0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworCitzeXMu
cGF0aC5pbnNlcnQoMCwgam9pbihkaXJuYW1lKF9fZmlsZV9fKSwgIi4uIiwgIi4uIikpCisKK2Zy
b20gd3B0cnVubmVyIGltcG9ydCBob3N0cworCisKK2NsYXNzIEhvc3RzVGVzdCh1bml0dGVzdC5U
ZXN0Q2FzZSk6CisgICAgZGVmIGRvX3Rlc3Qoc2VsZiwgaW5wdXQsIGV4cGVjdGVkKToKKyAgICAg
ICAgaG9zdF9maWxlID0gaG9zdHMuSG9zdHNGaWxlLmZyb21fZmlsZShTdHJpbmdJTyhpbnB1dCkp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGhvc3RfZmlsZS50b19zdHJpbmcoKSwgZXhwZWN0
ZWQpCisKKyAgICBkZWYgdGVzdF9zaW1wbGUoc2VsZik6CisgICAgICAgIHNlbGYuZG9fdGVzdCgi
IiIxMjcuMC4wLjEgICAgXHRsb2NhbGhvc3QgIGFsaWFzICMgY29tbWVudAorIyBBbm90aGVyIGNv
bW1lbnQiIiIsCisgICAgICAgICAgICAgICAgICAgICAiIiIxMjcuMC4wLjEgbG9jYWxob3N0IGFs
aWFzICMgY29tbWVudAorIyBBbm90aGVyIGNvbW1lbnQKKyIiIikKKworICAgIGRlZiB0ZXN0X2Js
YW5rX2xpbmVzKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3QoIiIiMTI3LjAuMC4xICAgIFx0
bG9jYWxob3N0ICBhbGlhcyAjIGNvbW1lbnQKKworXHIKKyAgICBcdAorIyBBbm90aGVyIGNvbW1l
bnQiIiIsCisgICAgICAgICAgICAgICAgICAgICAiIiIxMjcuMC4wLjEgbG9jYWxob3N0IGFsaWFz
ICMgY29tbWVudAorIyBBbm90aGVyIGNvbW1lbnQKKyIiIikKKworICAgIGRlZiB0ZXN0X3doaXRl
c3BhY2Uoc2VsZik6CisgICAgICAgIHNlbGYuZG9fdGVzdCgiIiIgICAgXHQxMjcuMC4wLjEgICAg
XHRsb2NhbGhvc3QgIGFsaWFzICMgY29tbWVudCAgICAgXHIKKyAgICBcdCMgQW5vdGhlciBjb21t
ZW50IiIiLAorICAgICAgICAgICAgICAgICAgICAgIiIiMTI3LjAuMC4xIGxvY2FsaG9zdCBhbGlh
cyAjIGNvbW1lbnQKKyMgQW5vdGhlciBjb21tZW50CisiIiIpCisKKyAgICBkZWYgdGVzdF9hbGln
bm1lbnQoc2VsZik6CisgICAgICAgIHNlbGYuZG9fdGVzdCgiIiIxMjcuMC4wLjEgICAgXHRsb2Nh
bGhvc3QgIGFsaWFzCisxOTIuMTY4LjEuMSBhbm90aGVyX2hvc3QgICAgYW5vdGhlcl9hbGlhcwor
IiIiLCIiIjEyNy4wLjAuMSAgIGxvY2FsaG9zdCAgICBhbGlhcworMTkyLjE2OC4xLjEgYW5vdGhl
cl9ob3N0IGFub3RoZXJfYWxpYXMKKyIiIgorKQorCisgICAgZGVmIHRlc3RfbXVsdGlwbGVfc2Ft
ZV9uYW1lKHNlbGYpOgorICAgICAgICAjIFRoZSBzZW1hbnRpY3MgYXJlIHRoYXQgd2Ugb3Zlcndy
aXRlIGVhcmxpZXIgZW50cmllcyB3aXRoIHRoZSBzYW1lIG5hbWUKKyAgICAgICAgc2VsZi5kb190
ZXN0KCIiIjEyNy4wLjAuMSAgICBcdGxvY2FsaG9zdCAgYWxpYXMKKzE5Mi4xNjguMS4xIGxvY2Fs
aG9zdCAgICBhbm90aGVyX2FsaWFzIiIiLCIiIjE5Mi4xNjguMS4xIGxvY2FsaG9zdCBhbm90aGVy
X2FsaWFzCisiIiIKKykKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVz
dC5tYWluKCkKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93
cHRydW5uZXIvd3B0cnVubmVyL3Rlc3RzL3Rlc3RfdGVzdGxvYWRlci5weSBiL1dlYkRyaXZlclRl
c3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3Rlc3RzL3Rlc3RfdGVz
dGxvYWRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNTU2YjJi
N2YzZmEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9v
bHMvd3B0cnVubmVyL3dwdHJ1bm5lci90ZXN0cy90ZXN0X3Rlc3Rsb2FkZXIucHkKQEAgLTAsMCAr
MSwzMCBAQAorZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB1bmljb2RlX2xpdGVyYWxzCisKK2ltcG9y
dCBvcworaW1wb3J0IHN5cworaW1wb3J0IHRlbXBmaWxlCisKK3N5cy5wYXRoLmluc2VydCgwLCBv
cy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgIi4uIiwgIi4uIikpCisKK2Zy
b20gbW96bG9nIGltcG9ydCBzdHJ1Y3R1cmVkCitmcm9tIHdwdHJ1bm5lci50ZXN0bG9hZGVyIGlt
cG9ydCBUZXN0RmlsdGVyIGFzIEZpbHRlcgorZnJvbSAudGVzdF9jaHVua2VyIGltcG9ydCBtYWtl
X21vY2tfbWFuaWZlc3QKKworc3RydWN0dXJlZC5zZXRfZGVmYXVsdF9sb2dnZXIoc3RydWN0dXJl
ZC5zdHJ1Y3R1cmVkbG9nLlN0cnVjdHVyZWRMb2dnZXIoIlRlc3RMb2FkZXIiKSkKKworaW5jbHVk
ZV9pbmkgPSAiIiJcCitza2lwOiB0cnVlCitbdGVzdF9cdTUzRjBdCisgIHNraXA6IGZhbHNlCisi
IiIKKworCitkZWYgdGVzdF9maWx0ZXJfdW5pY29kZSgpOgorICAgIHRlc3RzID0gbWFrZV9tb2Nr
X21hbmlmZXN0KCgidGVzdCIsICJhIiwgMTApLCAoInRlc3QiLCAiYS9iIiwgMTApLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICgidGVzdCIsICJjIiwgMTApKQorCisgICAgd2l0aCB0
ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoIndiIiwgc3VmZml4PSIuaW5pIikgYXMgZjoKKyAg
ICAgICAgZi53cml0ZShpbmNsdWRlX2luaS5lbmNvZGUoJ3V0Zi04JykpCisgICAgICAgIGYuZmx1
c2goKQorCisgICAgICAgIEZpbHRlcihtYW5pZmVzdF9wYXRoPWYubmFtZSwgdGVzdF9tYW5pZmVz
dHM9dGVzdHMpCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMv
d3B0cnVubmVyL3dwdHJ1bm5lci90ZXN0cy90ZXN0X3VwZGF0ZS5weSBiL1dlYkRyaXZlclRlc3Rz
L2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3Rlc3RzL3Rlc3RfdXBkYXRl
LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lNWViNGNmNDljNwot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRy
dW5uZXIvd3B0cnVubmVyL3Rlc3RzL3Rlc3RfdXBkYXRlLnB5CkBAIC0wLDAgKzEsMzI4IEBACitp
bXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBTdHJpbmdJTworCitpbXBvcnQgcHl0ZXN0CisKK2Zyb20g
Li4gaW1wb3J0IG1ldGFkYXRhLCBtYW5pZmVzdHVwZGF0ZQorZnJvbSBtb3psb2cgaW1wb3J0IHN0
cnVjdHVyZWRsb2csIGhhbmRsZXJzLCBmb3JtYXR0ZXJzCisKKworY2xhc3MgVGVzdEV4cGVjdGVk
VXBkYXRlcih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIGNyZWF0ZV9tYW5pZmVzdChzZWxm
LCBkYXRhLCB0ZXN0X3BhdGg9InBhdGgvdG8vdGVzdC5pbmkiKToKKyAgICAgICAgZiA9IFN0cmlu
Z0lPLlN0cmluZ0lPKGRhdGEpCisgICAgICAgIHJldHVybiBtYW5pZmVzdHVwZGF0ZS5jb21waWxl
KGYsIHRlc3RfcGF0aCkKKworICAgIGRlZiBjcmVhdGVfdXBkYXRlcihzZWxmLCBkYXRhLCAqKmt3
YXJncyk6CisgICAgICAgIGV4cGVjdGVkX3RyZWUgPSB7fQorICAgICAgICBpZF9wYXRoX21hcCA9
IHt9CisgICAgICAgIGZvciB0ZXN0X3BhdGgsIHRlc3RfaWRzLCBtYW5pZmVzdF9zdHIgaW4gZGF0
YToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodGVzdF9pZHMsIChzdHIsIHVuaWNvZGUpKToK
KyAgICAgICAgICAgICAgICB0ZXN0X2lkcyA9IFt0ZXN0X2lkc10KKyAgICAgICAgICAgIGV4cGVj
dGVkX3RyZWVbdGVzdF9wYXRoXSA9IHNlbGYuY3JlYXRlX21hbmlmZXN0KG1hbmlmZXN0X3N0ciwg
dGVzdF9wYXRoKQorICAgICAgICAgICAgZm9yIHRlc3RfaWQgaW4gdGVzdF9pZHM6CisgICAgICAg
ICAgICAgICAgaWRfcGF0aF9tYXBbdGVzdF9pZF0gPSB0ZXN0X3BhdGgKKworICAgICAgICByZXR1
cm4gbWV0YWRhdGEuRXhwZWN0ZWRVcGRhdGVyKGV4cGVjdGVkX3RyZWUsIGlkX3BhdGhfbWFwLCAq
Kmt3YXJncykKKworICAgIGRlZiBjcmVhdGVfbG9nKHNlbGYsICphcmdzLCAqKmt3YXJncyk6Cisg
ICAgICAgIGxvZ2dlciA9IHN0cnVjdHVyZWRsb2cuU3RydWN0dXJlZExvZ2dlcigiZXhwZWN0ZWRf
dGVzdCIpCisgICAgICAgIGRhdGEgPSBTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgIGhhbmRs
ZXIgPSBoYW5kbGVycy5TdHJlYW1IYW5kbGVyKGRhdGEsIGZvcm1hdHRlcnMuSlNPTkZvcm1hdHRl
cigpKQorICAgICAgICBsb2dnZXIuYWRkX2hhbmRsZXIoaGFuZGxlcikKKworICAgICAgICBsb2df
ZW50cmllcyA9IChbKCJzdWl0ZV9zdGFydCIsIHsidGVzdHMiOiBbXSwgInJ1bl9pbmZvIjoga3dh
cmdzLmdldCgicnVuX2luZm8iLCB7fSl9KV0gKworICAgICAgICAgICAgICAgICAgICAgICBsaXN0
KGFyZ3MpICsKKyAgICAgICAgICAgICAgICAgICAgICAgWygic3VpdGVfZW5kIiwge30pXSkKKwor
ICAgICAgICBmb3IgaXRlbSBpbiBsb2dfZW50cmllczoKKyAgICAgICAgICAgIGFjdGlvbiwga3dh
cmdzID0gaXRlbQorICAgICAgICAgICAgZ2V0YXR0cihsb2dnZXIsIGFjdGlvbikoKiprd2FyZ3Mp
CisgICAgICAgIGxvZ2dlci5yZW1vdmVfaGFuZGxlcihoYW5kbGVyKQorICAgICAgICBkYXRhLnNl
ZWsoMCkKKyAgICAgICAgcmV0dXJuIGRhdGEKKworCisgICAgZGVmIGNvYWxlc2NlX3Jlc3VsdHMo
c2VsZiwgdHJlZXMpOgorICAgICAgICBmb3IgdHJlZSBpbiB0cmVlczoKKyAgICAgICAgICAgIGZv
ciB0ZXN0IGluIHRyZWUuaXRlcmNoaWxkcmVuKCk6CisgICAgICAgICAgICAgICAgZm9yIHN1YnRl
c3QgaW4gdGVzdC5pdGVyY2hpbGRyZW4oKToKKyAgICAgICAgICAgICAgICAgICAgc3VidGVzdC5j
b2FsZXNjZV9leHBlY3RlZCgpCisgICAgICAgICAgICAgICAgdGVzdC5jb2FsZXNjZV9leHBlY3Rl
ZCgpCisKKyAgICBAcHl0ZXN0Lm1hcmsueGZhaWwKKyAgICBkZWYgdGVzdF91cGRhdGVfMChzZWxm
KToKKyAgICAgICAgcHJldl9kYXRhID0gWygicGF0aC90by90ZXN0Lmh0bS5pbmkiLCBbIi9wYXRo
L3RvL3Rlc3QuaHRtIl0sICIiIlt0ZXN0Lmh0bV0KKyAgdHlwZTogdGVzdGhhcm5lc3MKKyAgW3Rl
c3QxXQorICAgIGV4cGVjdGVkOiBGQUlMIiIiKV0KKworICAgICAgICBuZXdfZGF0YSA9IHNlbGYu
Y3JlYXRlX2xvZygoInRlc3Rfc3RhcnQiLCB7InRlc3QiOiAiL3BhdGgvdG8vdGVzdC5odG0ifSks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgidGVzdF9zdGF0dXMiLCB7InRl
c3QiOiAiL3BhdGgvdG8vdGVzdC5odG0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJzdWJ0ZXN0IjogInRlc3QxIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3RhdHVzIjogIlBBU1MiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBl
Y3RlZCI6ICJGQUlMIn0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoInRl
c3RfZW5kIiwgeyJ0ZXN0IjogIi9wYXRoL3RvL3Rlc3QuaHRtIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3RhdHVzIjogIk9LIn0pKQorICAgICAg
ICB1cGRhdGVyID0gc2VsZi5jcmVhdGVfdXBkYXRlcihwcmV2X2RhdGEpCisgICAgICAgIHVwZGF0
ZXIudXBkYXRlX2Zyb21fbG9nKG5ld19kYXRhKQorCisgICAgICAgIG5ld19tYW5pZmVzdCA9IHVw
ZGF0ZXIuZXhwZWN0ZWRfdHJlZVsicGF0aC90by90ZXN0Lmh0bS5pbmkiXQorICAgICAgICBzZWxm
LmNvYWxlc2NlX3Jlc3VsdHMoW25ld19tYW5pZmVzdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZShuZXdfbWFuaWZlc3QuaXNfZW1wdHkpCisKKyAgICBAcHl0ZXN0Lm1hcmsueGZhaWwKKyAgICBk
ZWYgdGVzdF91cGRhdGVfMShzZWxmKToKKyAgICAgICAgdGVzdF9pZCA9ICIvcGF0aC90by90ZXN0
Lmh0bSIKKyAgICAgICAgcHJldl9kYXRhID0gWygicGF0aC90by90ZXN0Lmh0bS5pbmkiLCBbdGVz
dF9pZF0sICIiIlt0ZXN0Lmh0bV0KKyAgdHlwZTogdGVzdGhhcm5lc3MKKyAgW3Rlc3QxXQorICAg
IGV4cGVjdGVkOiBFUlJPUiIiIildCisKKyAgICAgICAgbmV3X2RhdGEgPSBzZWxmLmNyZWF0ZV9s
b2coKCJ0ZXN0X3N0YXJ0IiwgeyJ0ZXN0IjogdGVzdF9pZH0pLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoInRlc3Rfc3RhdHVzIiwgeyJ0ZXN0IjogdGVzdF9pZCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3VidGVzdCI6
ICJ0ZXN0MSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgInN0YXR1cyI6ICJGQUlMIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQiOiAiRVJST1IifSksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICgidGVzdF9lbmQiLCB7InRlc3QiOiB0ZXN0X2lkLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdGF0dXMiOiAi
T0sifSkpCisgICAgICAgIHVwZGF0ZXIgPSBzZWxmLmNyZWF0ZV91cGRhdGVyKHByZXZfZGF0YSkK
KyAgICAgICAgdXBkYXRlci51cGRhdGVfZnJvbV9sb2cobmV3X2RhdGEpCisKKyAgICAgICAgbmV3
X21hbmlmZXN0ID0gdXBkYXRlci5leHBlY3RlZF90cmVlWyJwYXRoL3RvL3Rlc3QuaHRtLmluaSJd
CisgICAgICAgIHNlbGYuY29hbGVzY2VfcmVzdWx0cyhbbmV3X21hbmlmZXN0XSkKKyAgICAgICAg
c2VsZi5hc3NlcnRGYWxzZShuZXdfbWFuaWZlc3QuaXNfZW1wdHkpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKG5ld19tYW5pZmVzdC5nZXRfdGVzdCh0ZXN0X2lkKS5jaGlsZHJlblswXS5nZXQo
ImV4cGVjdGVkIiksICJGQUlMIikKKworICAgIEBweXRlc3QubWFyay54ZmFpbAorICAgIGRlZiB0
ZXN0X25ld19zdWJ0ZXN0KHNlbGYpOgorICAgICAgICB0ZXN0X2lkID0gIi9wYXRoL3RvL3Rlc3Qu
aHRtIgorICAgICAgICBwcmV2X2RhdGEgPSBbKCJwYXRoL3RvL3Rlc3QuaHRtLmluaSIsIFt0ZXN0
X2lkXSwgIiIiW3Rlc3QuaHRtXQorICB0eXBlOiB0ZXN0aGFybmVzcworICBbdGVzdDFdCisgICAg
ZXhwZWN0ZWQ6IEZBSUwiIiIpXQorCisgICAgICAgIG5ld19kYXRhID0gc2VsZi5jcmVhdGVfbG9n
KCgidGVzdF9zdGFydCIsIHsidGVzdCI6IHRlc3RfaWR9KSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKCJ0ZXN0X3N0YXR1cyIsIHsidGVzdCI6IHRlc3RfaWQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YnRlc3QiOiAi
dGVzdDEiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJzdGF0dXMiOiAiRkFJTCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIjogIkZBSUwifSksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICgidGVzdF9zdGF0dXMiLCB7InRlc3QiOiB0ZXN0X2lkLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJ0ZXN0
IjogInRlc3QyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAic3RhdHVzIjogIkZBSUwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCI6ICJQQVNTIn0pLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoInRlc3RfZW5kIiwgeyJ0ZXN0IjogdGVzdF9pZCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3RhdHVzIjog
Ik9LIn0pKQorICAgICAgICB1cGRhdGVyID0gc2VsZi5jcmVhdGVfdXBkYXRlcihwcmV2X2RhdGEp
CisgICAgICAgIHVwZGF0ZXIudXBkYXRlX2Zyb21fbG9nKG5ld19kYXRhKQorCisgICAgICAgIG5l
d19tYW5pZmVzdCA9IHVwZGF0ZXIuZXhwZWN0ZWRfdHJlZVsicGF0aC90by90ZXN0Lmh0bS5pbmki
XQorICAgICAgICBzZWxmLmNvYWxlc2NlX3Jlc3VsdHMoW25ld19tYW5pZmVzdF0pCisgICAgICAg
IHNlbGYuYXNzZXJ0RmFsc2UobmV3X21hbmlmZXN0LmlzX2VtcHR5KQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFscyhuZXdfbWFuaWZlc3QuZ2V0X3Rlc3QodGVzdF9pZCkuY2hpbGRyZW5bMF0uZ2V0
KCJleHBlY3RlZCIpLCAiRkFJTCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG5ld19tYW5p
ZmVzdC5nZXRfdGVzdCh0ZXN0X2lkKS5jaGlsZHJlblsxXS5nZXQoImV4cGVjdGVkIiksICJGQUlM
IikKKworICAgIEBweXRlc3QubWFyay54ZmFpbAorICAgIGRlZiB0ZXN0X3VwZGF0ZV9tdWx0aXBs
ZV8wKHNlbGYpOgorICAgICAgICB0ZXN0X2lkID0gIi9wYXRoL3RvL3Rlc3QuaHRtIgorICAgICAg
ICBwcmV2X2RhdGEgPSBbKCJwYXRoL3RvL3Rlc3QuaHRtLmluaSIsIFt0ZXN0X2lkXSwgIiIiW3Rl
c3QuaHRtXQorICB0eXBlOiB0ZXN0aGFybmVzcworICBbdGVzdDFdCisgICAgZXhwZWN0ZWQ6IEZB
SUwiIiIpXQorCisgICAgICAgIG5ld19kYXRhXzAgPSBzZWxmLmNyZWF0ZV9sb2coKCJ0ZXN0X3N0
YXJ0IiwgeyJ0ZXN0IjogdGVzdF9pZH0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICgidGVzdF9zdGF0dXMiLCB7InRlc3QiOiB0ZXN0X2lkLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YnRlc3QiOiAidGVzdDEi
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
InN0YXR1cyI6ICJGQUlMIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJleHBlY3RlZCI6ICJGQUlMIn0pLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICgidGVzdF9lbmQiLCB7InRlc3QiOiB0ZXN0X2lkLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0YXR1cyI6ICJP
SyJ9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW5faW5mbz17ImRl
YnVnIjogRmFsc2UsICJvcyI6ICJvc3gifSkKKworICAgICAgICBuZXdfZGF0YV8xID0gc2VsZi5j
cmVhdGVfbG9nKCgidGVzdF9zdGFydCIsIHsidGVzdCI6IHRlc3RfaWR9KSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoInRlc3Rfc3RhdHVzIiwgeyJ0ZXN0IjogdGVzdF9p
ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJzdWJ0ZXN0IjogInRlc3QxIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJzdGF0dXMiOiAiVElNRU9VVCIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQiOiAiRkFJTCJ9
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoInRlc3RfZW5kIiwgeyJ0
ZXN0IjogdGVzdF9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJzdGF0dXMiOiAiT0sifSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcnVuX2luZm89eyJkZWJ1ZyI6IEZhbHNlLCAib3MiOiAibGludXgifSkKKyAgICAg
ICAgdXBkYXRlciA9IHNlbGYuY3JlYXRlX3VwZGF0ZXIocHJldl9kYXRhKQorCisgICAgICAgIHVw
ZGF0ZXIudXBkYXRlX2Zyb21fbG9nKG5ld19kYXRhXzApCisgICAgICAgIHVwZGF0ZXIudXBkYXRl
X2Zyb21fbG9nKG5ld19kYXRhXzEpCisKKyAgICAgICAgbmV3X21hbmlmZXN0ID0gdXBkYXRlci5l
eHBlY3RlZF90cmVlWyJwYXRoL3RvL3Rlc3QuaHRtLmluaSJdCisKKyAgICAgICAgc2VsZi5jb2Fs
ZXNjZV9yZXN1bHRzKFtuZXdfbWFuaWZlc3RdKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uo
bmV3X21hbmlmZXN0LmlzX2VtcHR5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhuZXdfbWFu
aWZlc3QuZ2V0X3Rlc3QodGVzdF9pZCkuY2hpbGRyZW5bMF0uZ2V0KAorICAgICAgICAgICAgImV4
cGVjdGVkIiwgeyJkZWJ1ZyI6IEZhbHNlLCAib3MiOiAib3N4In0pLCAiRkFJTCIpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWxzKG5ld19tYW5pZmVzdC5nZXRfdGVzdCh0ZXN0X2lkKS5jaGlsZHJl
blswXS5nZXQoCisgICAgICAgICAgICAiZXhwZWN0ZWQiLCB7ImRlYnVnIjogRmFsc2UsICJvcyI6
ICJsaW51eCJ9KSwgIlRJTUVPVVQiKQorCisgICAgQHB5dGVzdC5tYXJrLnhmYWlsCisgICAgZGVm
IHRlc3RfdXBkYXRlX211bHRpcGxlXzEoc2VsZik6CisgICAgICAgIHRlc3RfaWQgPSAiL3BhdGgv
dG8vdGVzdC5odG0iCisgICAgICAgIHByZXZfZGF0YSA9IFsoInBhdGgvdG8vdGVzdC5odG0uaW5p
IiwgW3Rlc3RfaWRdLCAiIiJbdGVzdC5odG1dCisgIHR5cGU6IHRlc3RoYXJuZXNzCisgIFt0ZXN0
MV0KKyAgICBleHBlY3RlZDogRkFJTCIiIildCisKKyAgICAgICAgbmV3X2RhdGFfMCA9IHNlbGYu
Y3JlYXRlX2xvZygoInRlc3Rfc3RhcnQiLCB7InRlc3QiOiB0ZXN0X2lkfSksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJ0ZXN0X3N0YXR1cyIsIHsidGVzdCI6IHRlc3Rf
aWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAic3VidGVzdCI6ICJ0ZXN0MSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAic3RhdHVzIjogIkZBSUwiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIjogIkZBSUwifSks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJ0ZXN0X2VuZCIsIHsidGVz
dCI6IHRlc3RfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAic3RhdHVzIjogIk9LIn0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJ1bl9pbmZvPXsiZGVidWciOiBGYWxzZSwgIm9zIjogIm9zeCJ9KQorCisgICAgICAg
IG5ld19kYXRhXzEgPSBzZWxmLmNyZWF0ZV9sb2coKCJ0ZXN0X3N0YXJ0IiwgeyJ0ZXN0IjogdGVz
dF9pZH0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgidGVzdF9zdGF0
dXMiLCB7InRlc3QiOiB0ZXN0X2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgInN1YnRlc3QiOiAidGVzdDEiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0YXR1cyI6ICJUSU1FT1VU
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJleHBlY3RlZCI6ICJGQUlMIn0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICgidGVzdF9lbmQiLCB7InRlc3QiOiB0ZXN0X2lkLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0YXR1cyI6ICJPSyJ9KSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW5faW5mbz17ImRlYnVnIjogRmFsc2UsICJv
cyI6ICJsaW51eCJ9KQorICAgICAgICB1cGRhdGVyID0gc2VsZi5jcmVhdGVfdXBkYXRlcihwcmV2
X2RhdGEpCisKKyAgICAgICAgdXBkYXRlci51cGRhdGVfZnJvbV9sb2cobmV3X2RhdGFfMCkKKyAg
ICAgICAgdXBkYXRlci51cGRhdGVfZnJvbV9sb2cobmV3X2RhdGFfMSkKKworICAgICAgICBuZXdf
bWFuaWZlc3QgPSB1cGRhdGVyLmV4cGVjdGVkX3RyZWVbInBhdGgvdG8vdGVzdC5odG0uaW5pIl0K
KworICAgICAgICBzZWxmLmNvYWxlc2NlX3Jlc3VsdHMoW25ld19tYW5pZmVzdF0pCisKKyAgICAg
ICAgc2VsZi5hc3NlcnRGYWxzZShuZXdfbWFuaWZlc3QuaXNfZW1wdHkpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWxzKG5ld19tYW5pZmVzdC5nZXRfdGVzdCh0ZXN0X2lkKS5jaGlsZHJlblswXS5n
ZXQoCisgICAgICAgICAgICAiZXhwZWN0ZWQiLCB7ImRlYnVnIjogRmFsc2UsICJvcyI6ICJvc3gi
fSksICJGQUlMIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobmV3X21hbmlmZXN0LmdldF90
ZXN0KHRlc3RfaWQpLmNoaWxkcmVuWzBdLmdldCgKKyAgICAgICAgICAgICJleHBlY3RlZCIsIHsi
ZGVidWciOiBGYWxzZSwgIm9zIjogImxpbnV4In0pLCAiVElNRU9VVCIpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWxzKG5ld19tYW5pZmVzdC5nZXRfdGVzdCh0ZXN0X2lkKS5jaGlsZHJlblswXS5n
ZXQoCisgICAgICAgICAgICAiZXhwZWN0ZWQiLCB7ImRlYnVnIjogRmFsc2UsICJvcyI6ICJ3aW5k
b3dzIn0pLCAiRkFJTCIpCisKKyAgICBAcHl0ZXN0Lm1hcmsueGZhaWwKKyAgICBkZWYgdGVzdF91
cGRhdGVfbXVsdGlwbGVfMihzZWxmKToKKyAgICAgICAgdGVzdF9pZCA9ICIvcGF0aC90by90ZXN0
Lmh0bSIKKyAgICAgICAgcHJldl9kYXRhID0gWygicGF0aC90by90ZXN0Lmh0bS5pbmkiLCBbdGVz
dF9pZF0sICIiIlt0ZXN0Lmh0bV0KKyAgdHlwZTogdGVzdGhhcm5lc3MKKyAgW3Rlc3QxXQorICAg
IGV4cGVjdGVkOiBGQUlMIiIiKV0KKworICAgICAgICBuZXdfZGF0YV8wID0gc2VsZi5jcmVhdGVf
bG9nKCgidGVzdF9zdGFydCIsIHsidGVzdCI6IHRlc3RfaWR9KSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoInRlc3Rfc3RhdHVzIiwgeyJ0ZXN0IjogdGVzdF9pZCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJ0
ZXN0IjogInRlc3QxIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJzdGF0dXMiOiAiRkFJTCIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQiOiAiRkFJTCJ9KSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoInRlc3RfZW5kIiwgeyJ0ZXN0IjogdGVz
dF9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJzdGF0dXMiOiAiT0sifSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cnVuX2luZm89eyJkZWJ1ZyI6IEZhbHNlLCAib3MiOiAib3N4In0pCisKKyAgICAgICAgbmV3X2Rh
dGFfMSA9IHNlbGYuY3JlYXRlX2xvZygoInRlc3Rfc3RhcnQiLCB7InRlc3QiOiB0ZXN0X2lkfSks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJ0ZXN0X3N0YXR1cyIsIHsi
dGVzdCI6IHRlc3RfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAic3VidGVzdCI6ICJ0ZXN0MSIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3RhdHVzIjogIlRJTUVPVVQiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVj
dGVkIjogIkZBSUwifSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJ0
ZXN0X2VuZCIsIHsidGVzdCI6IHRlc3RfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAic3RhdHVzIjogIk9LIn0pLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJ1bl9pbmZvPXsiZGVidWciOiBUcnVlLCAib3MiOiAib3N4
In0pCisgICAgICAgIHVwZGF0ZXIgPSBzZWxmLmNyZWF0ZV91cGRhdGVyKHByZXZfZGF0YSkKKwor
ICAgICAgICB1cGRhdGVyLnVwZGF0ZV9mcm9tX2xvZyhuZXdfZGF0YV8wKQorICAgICAgICB1cGRh
dGVyLnVwZGF0ZV9mcm9tX2xvZyhuZXdfZGF0YV8xKQorCisgICAgICAgIG5ld19tYW5pZmVzdCA9
IHVwZGF0ZXIuZXhwZWN0ZWRfdHJlZVsicGF0aC90by90ZXN0Lmh0bS5pbmkiXQorCisgICAgICAg
IHNlbGYuY29hbGVzY2VfcmVzdWx0cyhbbmV3X21hbmlmZXN0XSkKKworICAgICAgICBzZWxmLmFz
c2VydEZhbHNlKG5ld19tYW5pZmVzdC5pc19lbXB0eSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bHMobmV3X21hbmlmZXN0LmdldF90ZXN0KHRlc3RfaWQpLmNoaWxkcmVuWzBdLmdldCgKKyAgICAg
ICAgICAgICJleHBlY3RlZCIsIHsiZGVidWciOiBGYWxzZSwgIm9zIjogIm9zeCJ9KSwgIkZBSUwi
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhuZXdfbWFuaWZlc3QuZ2V0X3Rlc3QodGVzdF9p
ZCkuY2hpbGRyZW5bMF0uZ2V0KAorICAgICAgICAgICAgImV4cGVjdGVkIiwgeyJkZWJ1ZyI6IFRy
dWUsICJvcyI6ICJvc3gifSksICJUSU1FT1VUIikKKworICAgIEBweXRlc3QubWFyay54ZmFpbAor
ICAgIGRlZiB0ZXN0X3VwZGF0ZV9tdWx0aXBsZV8zKHNlbGYpOgorICAgICAgICB0ZXN0X2lkID0g
Ii9wYXRoL3RvL3Rlc3QuaHRtIgorICAgICAgICBwcmV2X2RhdGEgPSBbKCJwYXRoL3RvL3Rlc3Qu
aHRtLmluaSIsIFt0ZXN0X2lkXSwgIiIiW3Rlc3QuaHRtXQorICB0eXBlOiB0ZXN0aGFybmVzcwor
ICBbdGVzdDFdCisgICAgZXhwZWN0ZWQ6CisgICAgICBpZiBkZWJ1ZzogRkFJTAorICAgICAgaWYg
bm90IGRlYnVnIGFuZCBvcyA9PSAib3N4IjogVElNRU9VVCIiIildCisKKyAgICAgICAgbmV3X2Rh
dGFfMCA9IHNlbGYuY3JlYXRlX2xvZygoInRlc3Rfc3RhcnQiLCB7InRlc3QiOiB0ZXN0X2lkfSks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJ0ZXN0X3N0YXR1cyIsIHsi
dGVzdCI6IHRlc3RfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAic3VidGVzdCI6ICJ0ZXN0MSIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3RhdHVzIjogIkZBSUwiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVk
IjogIkZBSUwifSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJ0ZXN0
X2VuZCIsIHsidGVzdCI6IHRlc3RfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAic3RhdHVzIjogIk9LIn0pLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJ1bl9pbmZvPXsiZGVidWciOiBGYWxzZSwgIm9zIjogIm9zeCJ9
KQorCisgICAgICAgIG5ld19kYXRhXzEgPSBzZWxmLmNyZWF0ZV9sb2coKCJ0ZXN0X3N0YXJ0Iiwg
eyJ0ZXN0IjogdGVzdF9pZH0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICgidGVzdF9zdGF0dXMiLCB7InRlc3QiOiB0ZXN0X2lkLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YnRlc3QiOiAidGVzdDEiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0YXR1
cyI6ICJUSU1FT1VUIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJleHBlY3RlZCI6ICJGQUlMIn0pLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICgidGVzdF9lbmQiLCB7InRlc3QiOiB0ZXN0X2lkLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0YXR1cyI6ICJPSyJ9
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW5faW5mbz17ImRlYnVn
IjogVHJ1ZSwgIm9zIjogIm9zeCJ9KQorICAgICAgICB1cGRhdGVyID0gc2VsZi5jcmVhdGVfdXBk
YXRlcihwcmV2X2RhdGEpCisKKyAgICAgICAgdXBkYXRlci51cGRhdGVfZnJvbV9sb2cobmV3X2Rh
dGFfMCkKKyAgICAgICAgdXBkYXRlci51cGRhdGVfZnJvbV9sb2cobmV3X2RhdGFfMSkKKworICAg
ICAgICBuZXdfbWFuaWZlc3QgPSB1cGRhdGVyLmV4cGVjdGVkX3RyZWVbInBhdGgvdG8vdGVzdC5o
dG0uaW5pIl0KKworICAgICAgICBzZWxmLmNvYWxlc2NlX3Jlc3VsdHMoW25ld19tYW5pZmVzdF0p
CisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShuZXdfbWFuaWZlc3QuaXNfZW1wdHkpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG5ld19tYW5pZmVzdC5nZXRfdGVzdCh0ZXN0X2lkKS5jaGls
ZHJlblswXS5nZXQoCisgICAgICAgICAgICAiZXhwZWN0ZWQiLCB7ImRlYnVnIjogRmFsc2UsICJv
cyI6ICJvc3gifSksICJGQUlMIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobmV3X21hbmlm
ZXN0LmdldF90ZXN0KHRlc3RfaWQpLmNoaWxkcmVuWzBdLmdldCgKKyAgICAgICAgICAgICJleHBl
Y3RlZCIsIHsiZGVidWciOiBUcnVlLCAib3MiOiAib3N4In0pLCAiVElNRU9VVCIpCisKKyAgICBA
cHl0ZXN0Lm1hcmsueGZhaWwKKyAgICBkZWYgdGVzdF91cGRhdGVfaWdub3JlX2V4aXN0aW5nKHNl
bGYpOgorICAgICAgICB0ZXN0X2lkID0gIi9wYXRoL3RvL3Rlc3QuaHRtIgorICAgICAgICBwcmV2
X2RhdGEgPSBbKCJwYXRoL3RvL3Rlc3QuaHRtLmluaSIsIFt0ZXN0X2lkXSwgIiIiW3Rlc3QuaHRt
XQorICB0eXBlOiB0ZXN0aGFybmVzcworICBbdGVzdDFdCisgICAgZXhwZWN0ZWQ6CisgICAgICBp
ZiBkZWJ1ZzogVElNRU9VVAorICAgICAgaWYgbm90IGRlYnVnIGFuZCBvcyA9PSAib3N4IjogTk9U
UlVOIiIiKV0KKworICAgICAgICBuZXdfZGF0YV8wID0gc2VsZi5jcmVhdGVfbG9nKCgidGVzdF9z
dGFydCIsIHsidGVzdCI6IHRlc3RfaWR9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoInRlc3Rfc3RhdHVzIiwgeyJ0ZXN0IjogdGVzdF9pZCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJ0ZXN0IjogInRlc3Qx
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJzdGF0dXMiOiAiRkFJTCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQiOiAiUEFTUyJ9KSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoInRlc3RfZW5kIiwgeyJ0ZXN0IjogdGVzdF9pZCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdGF0dXMiOiAi
T0sifSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuX2luZm89eyJk
ZWJ1ZyI6IEZhbHNlLCAib3MiOiAibGludXgifSkKKworICAgICAgICBuZXdfZGF0YV8xID0gc2Vs
Zi5jcmVhdGVfbG9nKCgidGVzdF9zdGFydCIsIHsidGVzdCI6IHRlc3RfaWR9KSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoInRlc3Rfc3RhdHVzIiwgeyJ0ZXN0IjogdGVz
dF9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJzdWJ0ZXN0IjogInRlc3QxIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJzdGF0dXMiOiAiRkFJTCIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQiOiAiUEFTUyJ9
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoInRlc3RfZW5kIiwgeyJ0
ZXN0IjogdGVzdF9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJzdGF0dXMiOiAiT0sifSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcnVuX2luZm89eyJkZWJ1ZyI6IFRydWUsICJvcyI6ICJ3aW5kb3dzIn0pCisgICAg
ICAgIHVwZGF0ZXIgPSBzZWxmLmNyZWF0ZV91cGRhdGVyKHByZXZfZGF0YSwgaWdub3JlX2V4aXN0
aW5nPVRydWUpCisKKyAgICAgICAgdXBkYXRlci51cGRhdGVfZnJvbV9sb2cobmV3X2RhdGFfMCkK
KyAgICAgICAgdXBkYXRlci51cGRhdGVfZnJvbV9sb2cobmV3X2RhdGFfMSkKKworICAgICAgICBu
ZXdfbWFuaWZlc3QgPSB1cGRhdGVyLmV4cGVjdGVkX3RyZWVbInBhdGgvdG8vdGVzdC5odG0uaW5p
Il0KKworICAgICAgICBzZWxmLmNvYWxlc2NlX3Jlc3VsdHMoW25ld19tYW5pZmVzdF0pCisKKyAg
ICAgICAgc2VsZi5hc3NlcnRGYWxzZShuZXdfbWFuaWZlc3QuaXNfZW1wdHkpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWxzKG5ld19tYW5pZmVzdC5nZXRfdGVzdCh0ZXN0X2lkKS5jaGlsZHJlblsw
XS5nZXQoCisgICAgICAgICAgICAiZXhwZWN0ZWQiLCB7ImRlYnVnIjogVHJ1ZSwgIm9zIjogIm9z
eCJ9KSwgIkZBSUwiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhuZXdfbWFuaWZlc3QuZ2V0
X3Rlc3QodGVzdF9pZCkuY2hpbGRyZW5bMF0uZ2V0KAorICAgICAgICAgICAgImV4cGVjdGVkIiwg
eyJkZWJ1ZyI6IEZhbHNlLCAib3MiOiAib3N4In0pLCAiRkFJTCIpCmRpZmYgLS1naXQgYS9XZWJE
cml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci91cGRhdGUv
X19pbml0X18ucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVy
L3dwdHJ1bm5lci91cGRhdGUvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLjQ5N2NiMzRhZDBjCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVz
dHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvdXBkYXRlL19faW5pdF9f
LnB5CkBAIC0wLDAgKzEsNDcgQEAKK2ltcG9ydCBvcworaW1wb3J0IHN5cworCitmcm9tIG1vemxv
Zy5zdHJ1Y3R1cmVkIGltcG9ydCBzdHJ1Y3R1cmVkbG9nLCBjb21tYW5kbGluZQorCitmcm9tIC4u
IGltcG9ydCB3cHRjb21tYW5kbGluZQorCitmcm9tIHVwZGF0ZSBpbXBvcnQgV1BUVXBkYXRlCisK
K2RlZiByZW1vdmVfbG9nZ2luZ19hcmdzKGFyZ3MpOgorICAgICIiIlRha2UgbG9nZ2luZyBhcmdz
IG91dCBvZiB0aGUgZGljdGlvbmFyeSBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzIHNvCisgICAg
dGhleSBhcmUgbm90IHBhc3NlZCBpbiBhcyBrd2FyZ3MgdG8gdGhlIHVwZGF0ZSBjb2RlLiBUaGlz
IGlzIHBhcnRpY3VsYXJseQorICAgIG5lY2Vzc2FyeSBoZXJlIGJlY2F1c2UgdGhlIGFyZ3VtZW50
cyBhcmUgb2Z0ZW4gb2YgdHlwZSBmaWxlLCB3aGljaCBjYW5ub3QKKyAgICBiZSBzZXJpYWxpemVk
LgorCisgICAgOnBhcmFtIGFyZ3M6IERpY3Rpb25hcnkgb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50
cy4KKyAgICAiIiIKKyAgICBmb3IgbmFtZSBpbiBhcmdzLmtleXMoKToKKyAgICAgICAgaWYgbmFt
ZS5zdGFydHN3aXRoKCJsb2dfIik6CisgICAgICAgICAgICBhcmdzLnBvcChuYW1lKQorCisKK2Rl
ZiBzZXR1cF9sb2dnaW5nKGFyZ3MsIGRlZmF1bHRzKToKKyAgICAiIiJVc2UgdGhlIGNvbW1hbmQg
bGluZSBhcmd1bWVudHMgdG8gc2V0IHVwIHRoZSBsb2dnZXIuCisKKyAgICA6cGFyYW0gYXJnczog
RGljdGlvbmFyeSBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgorICAgIDpwYXJhbSBkZWZhdWx0
czogRGljdGlvbmFyeSBvZiB7Zm9ybWF0dGVyX25hbWU6IHN0cmVhbX0gdG8gdXNlIGlmCisgICAg
ICAgICAgICAgICAgICAgICBubyBjb21tYW5kIGxpbmUgbG9nZ2luZyBpcyBzcGVjaWZpZWQiIiIK
KyAgICBsb2dnZXIgPSBjb21tYW5kbGluZS5zZXR1cF9sb2dnaW5nKCJ3ZWItcGxhdGZvcm0tdGVz
dHMtdXBkYXRlIiwgYXJncywgZGVmYXVsdHMpCisKKyAgICByZW1vdmVfbG9nZ2luZ19hcmdzKGFy
Z3MpCisKKyAgICByZXR1cm4gbG9nZ2VyCisKKworZGVmIHJ1bl91cGRhdGUobG9nZ2VyLCAqKmt3
YXJncyk6CisgICAgdXBkYXRlciA9IFdQVFVwZGF0ZShsb2dnZXIsICoqa3dhcmdzKQorICAgIHJl
dHVybiB1cGRhdGVyLnJ1bigpCisKKworZGVmIG1haW4oKToKKyAgICBhcmdzID0gd3B0Y29tbWFu
ZGxpbmUucGFyc2VfYXJnc191cGRhdGUoKQorICAgIGxvZ2dlciA9IHNldHVwX2xvZ2dpbmcoYXJn
cywgeyJtYWNoIjogc3lzLnN0ZG91dH0pCisgICAgYXNzZXJ0IHN0cnVjdHVyZWRsb2cuZ2V0X2Rl
ZmF1bHRfbG9nZ2VyKCkgaXMgbm90IE5vbmUKKyAgICBzdWNjZXNzID0gcnVuX3VwZGF0ZShsb2dn
ZXIsICoqYXJncykKKyAgICBzeXMuZXhpdCgwIGlmIHN1Y2Nlc3MgZWxzZSAxKQorCmRpZmYgLS1n
aXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5l
ci91cGRhdGUvYmFzZS5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRy
dW5uZXIvd3B0cnVubmVyL3VwZGF0ZS9iYXNlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi41NDc4MDhlNTI5MwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRl
c3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3VwZGF0ZS9iYXNlLnB5
CkBAIC0wLDAgKzEsNjUgQEAKK2V4aXRfdW5jbGVhbiA9IG9iamVjdCgpCitleGl0X2NsZWFuID0g
b2JqZWN0KCkKKworCitjbGFzcyBTdGVwKG9iamVjdCk6CisgICAgcHJvdmlkZXMgPSBbXQorCisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvZ2dlcik6CisgICAgICAgIHNlbGYubG9nZ2VyID0gbG9n
Z2VyCisKKyAgICBkZWYgcnVuKHNlbGYsIHN0ZXBfaW5kZXgsIHN0YXRlKToKKyAgICAgICAgIiIi
QmFzZSBjbGFzcyBmb3Igc3RhdGUtY3JlYXRpbmcgc3RlcHMuCisKKyAgICAgICAgV2hlbiBhIFN0
ZXAgaXMgcnVuKCkgdGhlIGN1cnJlbnQgc3RhdGUgaXMgY2hlY2tlZCB0byBzZWUKKyAgICAgICAg
aWYgdGhlIHN0YXRlIGZyb20gdGhpcyBzdGVwIGhhcyBhbHJlYWR5IGJlZW4gY3JlYXRlZC4gSWYg
aXQKKyAgICAgICAgaGFzIHRoZSByZXN0b3JlKCkgbWV0aG9kIGlzIGludm9rZWQuIE90aGVyd2lz
ZSB0aGUgY3JlYXRlKCkKKyAgICAgICAgbWV0aG9kIGlzIGludm9rZWQgd2l0aCB0aGUgc3RhdGUg
b2JqZWN0LiBUaGlzIGlzIGV4cGVjdGVkIHRvCisgICAgICAgIGFkZCBpdGVtcyB3aXRoIGFsbCB0
aGUga2V5cyBpbiBfX2NsYXNzX18ucHJvdmlkZXMgdG8gdGhlIHN0YXRlCisgICAgICAgIG9iamVj
dC4KKyAgICAgICAgIiIiCisKKyAgICAgICAgbmFtZSA9IHNlbGYuX19jbGFzc19fLl9fbmFtZV9f
CisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3RvcmVkX3N0ZXAgPSBzdGF0ZS5zdGVwc1tz
dGVwX2luZGV4XQorICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgIHN0b3Jl
ZF9zdGVwID0gTm9uZQorCisgICAgICAgIGlmIHN0b3JlZF9zdGVwID09IG5hbWU6CisgICAgICAg
ICAgICBzZWxmLnJlc3RvcmUoc3RhdGUpCisgICAgICAgIGVsaWYgc3RvcmVkX3N0ZXAgaXMgTm9u
ZToKKyAgICAgICAgICAgIHNlbGYuY3JlYXRlKHN0YXRlKQorICAgICAgICAgICAgYXNzZXJ0IHNl
dChzZWxmLnByb3ZpZGVzKS5pc3N1YnNldChzZXQoc3RhdGUua2V5cygpKSkKKyAgICAgICAgICAg
IHN0YXRlLnN0ZXBzID0gc3RhdGUuc3RlcHMgKyBbbmFtZV0KKyAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkV4cGVjdGVkIGEgJXMgc3RlcCwgZ290IGEgJXMgc3Rl
cCIgJSAobmFtZSwgc3RvcmVkX3N0ZXApKQorCisgICAgZGVmIGNyZWF0ZShzZWxmLCBkYXRhKToK
KyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHJlc3RvcmUoc2Vs
Ziwgc3RhdGUpOgorICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1ZygiU3RlcCAlcyB1c2luZyBzdG9y
ZWQgc3RhdGUiICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCkpCisgICAgICAgIGZvciBrZXkg
aW4gc2VsZi5wcm92aWRlczoKKyAgICAgICAgICAgIGFzc2VydCBrZXkgaW4gc3RhdGUKKworCitj
bGFzcyBTdGVwUnVubmVyKG9iamVjdCk6CisgICAgc3RlcHMgPSBbXQorCisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIGxvZ2dlciwgc3RhdGUpOgorICAgICAgICAiIiJDbGFzcyB0aGF0IHJ1bnMgYSBz
cGVjaWZpZWQgc2VyaWVzIG9mIFN0ZXBzIHdpdGggYSBjb21tb24gU3RhdGUiIiIKKyAgICAgICAg
c2VsZi5zdGF0ZSA9IHN0YXRlCisgICAgICAgIHNlbGYubG9nZ2VyID0gbG9nZ2VyCisgICAgICAg
IGlmICJzdGVwcyIgbm90IGluIHN0YXRlOgorICAgICAgICAgICAgc3RhdGUuc3RlcHMgPSBbXQor
CisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgcnYgPSBOb25lCisgICAgICAgIGZvciBzdGVw
X2luZGV4LCBzdGVwIGluIGVudW1lcmF0ZShzZWxmLnN0ZXBzKToKKyAgICAgICAgICAgIHNlbGYu
bG9nZ2VyLmRlYnVnKCJTdGFydGluZyBzdGVwICVzIiAlIHN0ZXAuX19uYW1lX18pCisgICAgICAg
ICAgICBydiA9IHN0ZXAoc2VsZi5sb2dnZXIpLnJ1bihzdGVwX2luZGV4LCBzZWxmLnN0YXRlKQor
ICAgICAgICAgICAgaWYgcnYgaW4gKGV4aXRfY2xlYW4sIGV4aXRfdW5jbGVhbik6CisgICAgICAg
ICAgICAgICAgYnJlYWsKKworICAgICAgICByZXR1cm4gcnYKZGlmZiAtLWdpdCBhL1dlYkRyaXZl
clRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3VwZGF0ZS9tZXRh
ZGF0YS5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0
cnVubmVyL3VwZGF0ZS9tZXRhZGF0YS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMC4uNWY2OTI1ZTdmYTkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9p
bXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci91cGRhdGUvbWV0YWRhdGEucHkK
QEAgLTAsMCArMSw3MSBAQAoraW1wb3J0IG9zCisKK2Zyb20gLi4gaW1wb3J0IG1ldGFkYXRhLCBw
cm9kdWN0cworCitmcm9tIGJhc2UgaW1wb3J0IFN0ZXAsIFN0ZXBSdW5uZXIKKworY2xhc3MgR2V0
VXBkYXRlUHJvcGVydHlMaXN0KFN0ZXApOgorICAgIHByb3ZpZGVzID0gWyJwcm9wZXJ0eV9vcmRl
ciIsICJib29sZWFuX3Byb3BlcnRpZXMiXQorCisKKyAgICBkZWYgY3JlYXRlKHNlbGYsIHN0YXRl
KToKKyAgICAgICAgcHJvcGVydHlfb3JkZXIsIGJvb2xlYW5fcHJvcGVydGllcyA9IHByb2R1Y3Rz
LmxvYWRfcHJvZHVjdF91cGRhdGUoCisgICAgICAgICAgICBzdGF0ZS5jb25maWcsIHN0YXRlLnBy
b2R1Y3QpCisgICAgICAgIHN0YXRlLnByb3BlcnR5X29yZGVyID0gcHJvcGVydHlfb3JkZXIKKyAg
ICAgICAgc3RhdGUuYm9vbGVhbl9wcm9wZXJ0aWVzID0gYm9vbGVhbl9wcm9wZXJ0aWVzCisKKwor
Y2xhc3MgVXBkYXRlRXhwZWN0ZWQoU3RlcCk6CisgICAgIiIiRG8gdGhlIG1ldGFkYXRhIHVwZGF0
ZSBvbiB0aGUgbG9jYWwgY2hlY2tvdXQiIiIKKworICAgIHByb3ZpZGVzID0gWyJuZWVkc19odW1h
biJdCisKKyAgICBkZWYgY3JlYXRlKHNlbGYsIHN0YXRlKToKKyAgICAgICAgaWYgc3RhdGUuc3lu
Y190cmVlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc3luY19yb290ID0gc3RhdGUuc3luY190
cmVlLnJvb3QKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN5bmNfcm9vdCA9IE5vbmUKKwor
ICAgICAgICBzdGF0ZS5uZWVkc19odW1hbiA9IG1ldGFkYXRhLnVwZGF0ZV9leHBlY3RlZChzdGF0
ZS5wYXRocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGUuc2VydmVfcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdGUucnVuX2xvZywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV2X29sZD1Ob25lLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVfZXhpc3Rp
bmc9c3RhdGUuaWdub3JlX2V4aXN0aW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzeW5jX3Jvb3Q9c3luY19yb290LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eV9vcmRlcj1z
dGF0ZS5wcm9wZXJ0eV9vcmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbGVhbl9wcm9wZXJ0aWVzPXN0YXRlLmJvb2xlYW5fcHJvcGVy
dGllcykKKworCitjbGFzcyBDcmVhdGVNZXRhZGF0YVBhdGNoKFN0ZXApOgorICAgICIiIkNyZWF0
ZSBhIHBhdGNoL2NvbW1pdCBmb3IgdGhlIG1ldGFkYXRhIGNoZWNrb3V0IiIiCisKKyAgICBkZWYg
Y3JlYXRlKHNlbGYsIHN0YXRlKToKKyAgICAgICAgaWYgbm90IHN0YXRlLnBhdGNoOgorICAgICAg
ICAgICAgcmV0dXJuCisKKyAgICAgICAgbG9jYWxfdHJlZSA9IHN0YXRlLmxvY2FsX3RyZWUKKyAg
ICAgICAgc3luY190cmVlID0gc3RhdGUuc3luY190cmVlCisKKyAgICAgICAgaWYgc3luY190cmVl
IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgbmFtZSA9ICJ3ZWItcGxhdGZvcm0tdGVzdHNfdXBk
YXRlXyVzX21ldGFkYXRhIiAlIHN5bmNfdHJlZS5yZXYKKyAgICAgICAgICAgIG1lc3NhZ2UgPSAi
VXBkYXRlICVzIGV4cGVjdGVkIGRhdGEgdG8gcmV2aXNpb24gJXMiICUgKHN0YXRlLnN1aXRlX25h
bWUsIHN5bmNfdHJlZS5yZXYpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBuYW1lID0gIndl
Yi1wbGF0Zm9ybS10ZXN0c191cGRhdGVfbWV0YWRhdGEiCisgICAgICAgICAgICBtZXNzYWdlID0g
IlVwZGF0ZSAlcyBleHBlY3RlZCBkYXRhIiAlIHN0YXRlLnN1aXRlX25hbWUKKworICAgICAgICBs
b2NhbF90cmVlLmNyZWF0ZV9wYXRjaChuYW1lLCBtZXNzYWdlKQorCisgICAgICAgIGlmIG5vdCBs
b2NhbF90cmVlLmlzX2NsZWFuOgorICAgICAgICAgICAgbWV0YWRhdGFfcGF0aHMgPSBbbWFuaWZl
c3RfcGF0aFsibWV0YWRhdGFfcGF0aCJdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
b3IgbWFuaWZlc3RfcGF0aCBpbiBzdGF0ZS5wYXRocy5pdGVydmFsdWVzKCldCisgICAgICAgICAg
ICBmb3IgcGF0aCBpbiBtZXRhZGF0YV9wYXRoczoKKyAgICAgICAgICAgICAgICBsb2NhbF90cmVl
LmFkZF9uZXcob3MucGF0aC5yZWxwYXRoKHBhdGgsIGxvY2FsX3RyZWUucm9vdCkpCisgICAgICAg
ICAgICBsb2NhbF90cmVlLnVwZGF0ZV9wYXRjaChpbmNsdWRlPW1ldGFkYXRhX3BhdGhzKQorICAg
ICAgICAgICAgbG9jYWxfdHJlZS5jb21taXRfcGF0Y2goKQorCisKK2NsYXNzIE1ldGFkYXRhVXBk
YXRlUnVubmVyKFN0ZXBSdW5uZXIpOgorICAgICIiIihTdWIpUnVubmVyIGZvciB1cGRhdGluZyBt
ZXRhZGF0YSIiIgorICAgIHN0ZXBzID0gW0dldFVwZGF0ZVByb3BlcnR5TGlzdCwKKyAgICAgICAg
ICAgICBVcGRhdGVFeHBlY3RlZCwKKyAgICAgICAgICAgICBDcmVhdGVNZXRhZGF0YVBhdGNoXQpk
aWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93
cHRydW5uZXIvdXBkYXRlL3N0YXRlLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rv
b2xzL3dwdHJ1bm5lci93cHRydW5uZXIvdXBkYXRlL3N0YXRlLnB5Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45NDU0NDE0ZTY0MAotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3VwZGF0
ZS9zdGF0ZS5weQpAQCAtMCwwICsxLDEzMyBAQAoraW1wb3J0IG9zCitpbXBvcnQgY1BpY2tsZSBh
cyBwaWNrbGUKKworaGVyZSA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLnNwbGl0KF9fZmlsZV9f
KVswXSkKKworY2xhc3MgU3RhdGUob2JqZWN0KToKKyAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9p
bihoZXJlLCAiLndwdC11cGRhdGUubG9jayIpCisKKyAgICBkZWYgX19uZXdfXyhjbHMsIGxvZ2dl
cik6CisgICAgICAgIHJ2ID0gY2xzLmxvYWQobG9nZ2VyKQorICAgICAgICBpZiBydiBpcyBub3Qg
Tm9uZToKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiRXhpc3Rpbmcgc3RhdGUgZm91bmQiKQor
ICAgICAgICAgICAgcmV0dXJuIHJ2CisKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCJObyBleGlzdGlu
ZyBzdGF0ZSBmb3VuZCIpCisgICAgICAgIHJldHVybiBvYmplY3QuX19uZXdfXyhjbHMsIGxvZ2dl
cikKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2dnZXIpOgorICAgICAgICAiIiJPYmplY3Qg
Y29udGFpbmluZyBzdGF0ZSB2YXJpYWJsZXMgY3JlYXRlZCB3aGVuIHJ1bm5pbmcgU3RlcHMuCisK
KyAgICAgICAgT24gd3JpdGUgdGhlIHN0YXRlIGlzIHNlcmlhbGl6ZWQgdG8gZGlzaywgc3VjaCB0
aGF0IGl0IGNhbiBiZSByZXN0b3JlZCBpbgorICAgICAgICB0aGUgZXZlbnQgdGhhdCB0aGUgcHJv
Z3JhbSBpcyBpbnRlcnJ1cHRlZCBiZWZvcmUgYWxsIHN0ZXBzIGFyZSBjb21wbGV0ZS4KKyAgICAg
ICAgTm90ZSB0aGF0IHRoaXMgb25seSB3b3JrcyB3ZWxsIGlmIHRoZSB2YWx1ZXMgYXJlIGltbXV0
YWJsZTsgbXV0YXRpbmcgYW4KKyAgICAgICAgZXhpc3RpbmcgdmFsdWUgd2lsbCBub3QgY2F1c2Ug
dGhlIGRhdGEgdG8gYmUgc2VyaWFsaXplZC4KKworICAgICAgICBWYXJpYWJsZXMgYXJlIHNldCBh
bmQgZ2V0IGFzIGF0dHJpYnV0ZXMgZS5nLiBzdGF0ZV9vYmouc3BhbSA9ICJlZ2dzIi4KKworICAg
ICAgICA6cGFyYW0gcGFyZW50OiBQYXJlbnQgU3RhdGUgb2JqZWN0IG9yIE5vbmUgaWYgdGhpcyBp
cyB0aGUgcm9vdCBvYmplY3QuCisgICAgICAgICIiIgorCisgICAgICAgIGlmIGhhc2F0dHIoc2Vs
ZiwgIl9kYXRhIik6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmLl9kYXRhID0g
W3t9XQorICAgICAgICBzZWxmLl9sb2dnZXIgPSBsb2dnZXIKKyAgICAgICAgc2VsZi5faW5kZXgg
PSAwCisKKyAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgorICAgICAgICBydiA9IHNlbGYuX19k
aWN0X18uY29weSgpCisgICAgICAgIGRlbCBydlsiX2xvZ2dlciJdCisgICAgICAgIHJldHVybiBy
dgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGxvYWQoY2xzLCBsb2dnZXIpOgorICAgICAg
ICAiIiJMb2FkIHNhdmVkIHN0YXRlIGZyb20gYSBmaWxlIiIiCisgICAgICAgIHRyeToKKyAgICAg
ICAgICAgIHdpdGggb3BlbihjbHMuZmlsZW5hbWUpIGFzIGY6CisgICAgICAgICAgICAgICAgdHJ5
OgorICAgICAgICAgICAgICAgICAgICBydiA9IHBpY2tsZS5sb2FkKGYpCisgICAgICAgICAgICAg
ICAgICAgIGxvZ2dlci5kZWJ1ZygiTG9hZGluZyBkYXRhICVyIiAlIChydi5fZGF0YSwpKQorICAg
ICAgICAgICAgICAgICAgICBydi5fbG9nZ2VyID0gbG9nZ2VyCisgICAgICAgICAgICAgICAgICAg
IHJ2Ll9pbmRleCA9IDAKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJ2CisgICAgICAgICAg
ICAgICAgZXhjZXB0IEVPRkVycm9yOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2Fybmlu
ZygiRm91bmQgZW1wdHkgc3RhdGUgZmlsZSIpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAg
ICAgICAgICAgbG9nZ2VyLmRlYnVnKCJJT0Vycm9yIGxvYWRpbmcgc3RvcmVkIHN0YXRlIikKKwor
ICAgIGRlZiBwdXNoKHNlbGYsIGluaXRfdmFsdWVzKToKKyAgICAgICAgIiIiUHVzaCBhIG5ldyBj
bGVhbiBzdGF0ZSBkaWN0aW9uYXJ5CisKKyAgICAgICAgOnBhcmFtIGluaXRfdmFsdWVzOiBMaXN0
IG9mIHZhcmlhYmxlIG5hbWVzIGluIHRoZSBjdXJyZW50IHN0YXRlIGRpY3QgdG8gY29weQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludG8gdGhlIG5ldyBzdGF0ZSBkaWN0LiIiIgorCisg
ICAgICAgIHJldHVybiBTdGF0ZUNvbnRleHQoc2VsZiwgaW5pdF92YWx1ZXMpCisKKyAgICBkZWYg
c2F2ZShzZWxmKToKKyAgICAgICAgIiIiV3JpdGUgdGhlIHN0YXRlIHRvIGRpc2siIiIKKyAgICAg
ICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJ3IikgYXMgZjoKKyAgICAgICAgICAgIHBpY2ts
ZS5kdW1wKHNlbGYsIGYpCisKKyAgICBkZWYgaXNfZW1wdHkoc2VsZik6CisgICAgICAgIHJldHVy
biBsZW4oc2VsZi5fZGF0YSkgPT0gMSBhbmQgc2VsZi5fZGF0YVswXSA9PSB7fQorCisgICAgZGVm
IGNsZWFyKHNlbGYpOgorICAgICAgICAiIiJSZW1vdmUgYWxsIHN0YXRlIGFuZCBkZWxldGUgdGhl
IHN0b3JlZCBjb3B5LiIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy51bmxpbmsoc2Vs
Zi5maWxlbmFtZSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICBwYXNzCisg
ICAgICAgIHNlbGYuX2RhdGEgPSBbe31dCisKKworICAgIGRlZiBfX3NldGF0dHJfXyhzZWxmLCBr
ZXksIHZhbHVlKToKKyAgICAgICAgaWYga2V5LnN0YXJ0c3dpdGgoIl8iKToKKyAgICAgICAgICAg
IG9iamVjdC5fX3NldGF0dHJfXyhzZWxmLCBrZXksIHZhbHVlKQorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgc2VsZi5fZGF0YVtzZWxmLl9pbmRleF1ba2V5XSA9IHZhbHVlCisgICAgICAgICAg
ICBzZWxmLnNhdmUoKQorCisgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIGtleSk6CisgICAgICAg
IGlmIGtleS5zdGFydHN3aXRoKCJfIik6CisgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJv
cgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZGF0YVtzZWxmLl9pbmRl
eF1ba2V5XQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByYWlzZSBBdHRy
aWJ1dGVFcnJvcgorCisgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBrZXkpOgorICAgICAgICBy
ZXR1cm4ga2V5IGluIHNlbGYuX2RhdGFbc2VsZi5faW5kZXhdCisKKyAgICBkZWYgdXBkYXRlKHNl
bGYsIGl0ZW1zKToKKyAgICAgICAgIiIiQWRkIGEgZGljdGlvbmFyeSBvZiB7bmFtZTogdmFsdWV9
IHBhaXJzIHRvIHRoZSBzdGF0ZSIiIgorICAgICAgICBzZWxmLl9kYXRhW3NlbGYuX2luZGV4XS51
cGRhdGUoaXRlbXMpCisgICAgICAgIHNlbGYuc2F2ZSgpCisKKyAgICBkZWYga2V5cyhzZWxmKToK
KyAgICAgICAgcmV0dXJuIHNlbGYuX2RhdGFbc2VsZi5faW5kZXhdLmtleXMoKQorCitjbGFzcyBT
dGF0ZUNvbnRleHQob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3RhdGUsIGluaXRf
dmFsdWVzKToKKyAgICAgICAgc2VsZi5zdGF0ZSA9IHN0YXRlCisgICAgICAgIHNlbGYuaW5pdF92
YWx1ZXMgPSBpbml0X3ZhbHVlcworCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAg
aWYgbGVuKHNlbGYuc3RhdGUuX2RhdGEpID09IHNlbGYuc3RhdGUuX2luZGV4ICsgMToKKyAgICAg
ICAgICAgICMgVGhpcyBpcyB0aGUgY2FzZSB3aGVyZSB0aGVyZSBpcyBubyBzdG9yZWQgc3RhdGUK
KyAgICAgICAgICAgIG5ld19zdGF0ZSA9IHt9CisgICAgICAgICAgICBmb3Iga2V5IGluIHNlbGYu
aW5pdF92YWx1ZXM6CisgICAgICAgICAgICAgICAgbmV3X3N0YXRlW2tleV0gPSBzZWxmLnN0YXRl
Ll9kYXRhW3NlbGYuc3RhdGUuX2luZGV4XVtrZXldCisgICAgICAgICAgICBzZWxmLnN0YXRlLl9k
YXRhLmFwcGVuZChuZXdfc3RhdGUpCisgICAgICAgIHNlbGYuc3RhdGUuX2luZGV4ICs9IDEKKyAg
ICAgICAgc2VsZi5zdGF0ZS5fbG9nZ2VyLmRlYnVnKCJJbmNyZW1lbnRlZCBpbmRleCB0byAlcyIg
JSBzZWxmLnN0YXRlLl9pbmRleCkKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncywgKipr
d2FyZ3MpOgorICAgICAgICBpZiBsZW4oc2VsZi5zdGF0ZS5fZGF0YSkgPiAxOgorICAgICAgICAg
ICAgYXNzZXJ0IHNlbGYuc3RhdGUuX2luZGV4ID09IGxlbihzZWxmLnN0YXRlLl9kYXRhKSAtIDEK
KyAgICAgICAgICAgIHNlbGYuc3RhdGUuX2RhdGEucG9wKCkKKyAgICAgICAgICAgIHNlbGYuc3Rh
dGUuX2luZGV4IC09IDEKKyAgICAgICAgICAgIHNlbGYuc3RhdGUuX2xvZ2dlci5kZWJ1ZygiRGVj
cmVtZW50ZWQgaW5kZXggdG8gJXMiICUgc2VsZi5zdGF0ZS5faW5kZXgpCisgICAgICAgICAgICBh
c3NlcnQgc2VsZi5zdGF0ZS5faW5kZXggPj0gMAorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
cmFpc2UgVmFsdWVFcnJvcigiVHJpZWQgdG8gcG9wIHRoZSB0b3Agc3RhdGUiKQpkaWZmIC0tZ2l0
IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIv
dXBkYXRlL3N5bmMucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVu
bmVyL3dwdHJ1bm5lci91cGRhdGUvc3luYy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMC4uYjIwMWZlN2YxNjcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0
cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci91cGRhdGUvc3luYy5weQpA
QCAtMCwwICsxLDE5NyBAQAoraW1wb3J0IGZubWF0Y2gKK2ltcG9ydCBvcworaW1wb3J0IHJlCitp
bXBvcnQgc2h1dGlsCitpbXBvcnQgc3lzCitpbXBvcnQgdXVpZAorCitmcm9tIC4uIGltcG9ydCB0
ZXN0bG9hZGVyCisKK2Zyb20gYmFzZSBpbXBvcnQgU3RlcCwgU3RlcFJ1bm5lcgorZnJvbSB0cmVl
IGltcG9ydCBDb21taXQKKworaGVyZSA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLnNwbGl0KF9f
ZmlsZV9fKVswXSkKKworYnNkX2xpY2Vuc2UgPSAiIiJXM0MgMy1jbGF1c2UgQlNEIExpY2Vuc2UK
KworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCittZXQ6CisKKyogUmVkaXN0cmlidXRpb25zIG9m
IHdvcmtzIG11c3QgcmV0YWluIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisg
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgb3JpZ2luYWwg
Y29weXJpZ2h0CisgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIHRoZSBXM0Mgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZQor
ICB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyB3
b3JrIHdpdGhvdXQKKyAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCisKK1RI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMgIkFTCitJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRQorTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKK1NVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KK0NPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCitBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisiIiIKKworCitkZWYgY29weV93cHRfdHJlZSh0cmVlLCBk
ZXN0LCBleGNsdWRlcz1Ob25lLCBpbmNsdWRlcz1Ob25lKToKKyAgICAiIiJDb3B5IHRoZSB3b3Jr
aW5nIGNvcHkgb2YgYSBUcmVlIHRvIGEgZGVzdGluYXRpb24gZGlyZWN0b3J5LgorCisgICAgOnBh
cmFtIHRyZWU6IFRoZSBUcmVlIHRvIGNvcHkuCisgICAgOnBhcmFtIGRlc3Q6IFRoZSBkZXN0aW5h
dGlvbiBkaXJlY3RvcnkiIiIKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhkZXN0KToKKyAgICAgICAg
YXNzZXJ0IG9zLnBhdGguaXNkaXIoZGVzdCkKKworICAgIHNodXRpbC5ybXRyZWUoZGVzdCkKKwor
ICAgIG9zLm1rZGlyKGRlc3QpCisKKyAgICBpZiBleGNsdWRlcyBpcyBOb25lOgorICAgICAgICBl
eGNsdWRlcyA9IFtdCisKKyAgICBleGNsdWRlcyA9IFtyZS5jb21waWxlKGZubWF0Y2gudHJhbnNs
YXRlKGl0ZW0pKSBmb3IgaXRlbSBpbiBleGNsdWRlc10KKworICAgIGlmIGluY2x1ZGVzIGlzIE5v
bmU6CisgICAgICAgIGluY2x1ZGVzID0gW10KKworICAgIGluY2x1ZGVzID0gW3JlLmNvbXBpbGUo
Zm5tYXRjaC50cmFuc2xhdGUoaXRlbSkpIGZvciBpdGVtIGluIGluY2x1ZGVzXQorCisgICAgZm9y
IHRyZWVfcGF0aCBpbiB0cmVlLnBhdGhzKCk6CisgICAgICAgIGlmIChhbnkoaXRlbS5tYXRjaCh0
cmVlX3BhdGgpIGZvciBpdGVtIGluIGV4Y2x1ZGVzKSBhbmQKKyAgICAgICAgICAgIG5vdCBhbnko
aXRlbS5tYXRjaCh0cmVlX3BhdGgpIGZvciBpdGVtIGluIGluY2x1ZGVzKSk6CisgICAgICAgICAg
ICBjb250aW51ZQorCisgICAgICAgIHNvdXJjZV9wYXRoID0gb3MucGF0aC5qb2luKHRyZWUucm9v
dCwgdHJlZV9wYXRoKQorICAgICAgICBkZXN0X3BhdGggPSBvcy5wYXRoLmpvaW4oZGVzdCwgdHJl
ZV9wYXRoKQorCisgICAgICAgIGRlc3RfZGlyID0gb3MucGF0aC5zcGxpdChkZXN0X3BhdGgpWzBd
CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHNvdXJjZV9wYXRoKToKKyAgICAgICAgICAg
IGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkZXN0X2Rpcik6CisgICAgICAgICAgICAgICAgb3MubWFr
ZWRpcnMoZGVzdF9kaXIpCisgICAgICAgICAgICBzaHV0aWwuY29weTIoc291cmNlX3BhdGgsIGRl
c3RfcGF0aCkKKworICAgIGZvciBzb3VyY2UsIGRlc3RpbmF0aW9uIGluIFsoInRlc3RoYXJuZXNz
X3J1bm5lci5odG1sIiwgIiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoInRl
c3RoYXJuZXNzcmVwb3J0LmpzIiwgInJlc291cmNlcy8iKV06CisgICAgICAgIHNvdXJjZV9wYXRo
ID0gb3MucGF0aC5qb2luKGhlcmUsIG9zLnBhcmRpciwgc291cmNlKQorICAgICAgICBkZXN0X3Bh
dGggPSBvcy5wYXRoLmpvaW4oZGVzdCwgZGVzdGluYXRpb24sIG9zLnBhdGguc3BsaXQoc291cmNl
KVsxXSkKKyAgICAgICAgc2h1dGlsLmNvcHkyKHNvdXJjZV9wYXRoLCBkZXN0X3BhdGgpCisKKyAg
ICBhZGRfbGljZW5zZShkZXN0KQorCisKK2RlZiBhZGRfbGljZW5zZShkZXN0KToKKyAgICAiIiJX
cml0ZSB0aGUgYnNkIGxpY2Vuc2Ugc3RyaW5nIHRvIGEgTElDRU5TRSBmaWxlLgorCisgICAgOnBh
cmFtIGRlc3Q6IERpcmVjdG9yeSBpbiB3aGljaCB0byBwbGFjZSB0aGUgTElDRU5TRSBmaWxlLiIi
IgorICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oZGVzdCwgIkxJQ0VOU0UiKSwgInciKSBhcyBm
OgorICAgICAgICBmLndyaXRlKGJzZF9saWNlbnNlKQorCisKK2NsYXNzIFVwZGF0ZUNoZWNrb3V0
KFN0ZXApOgorICAgICIiIlB1bGwgY2hhbmdlcyBmcm9tIHVwc3RyZWFtIGludG8gdGhlIGxvY2Fs
IHN5bmMgdHJlZS4iIiIKKworICAgIHByb3ZpZGVzID0gWyJsb2NhbF9icmFuY2giXQorCisgICAg
ZGVmIGNyZWF0ZShzZWxmLCBzdGF0ZSk6CisgICAgICAgIHN5bmNfdHJlZSA9IHN0YXRlLnN5bmNf
dHJlZQorICAgICAgICBzdGF0ZS5sb2NhbF9icmFuY2ggPSB1dWlkLnV1aWQ0KCkuaGV4CisgICAg
ICAgIHN5bmNfdHJlZS51cGRhdGUoc3RhdGUuc3luY1sicmVtb3RlX3VybCJdLAorICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXRlLnN5bmNbImJyYW5jaCJdLAorICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXRlLmxvY2FsX2JyYW5jaCkKKyAgICAgICAgc3luY19wYXRoID0gb3MucGF0aC5h
YnNwYXRoKHN5bmNfdHJlZS5yb290KQorICAgICAgICBpZiBub3Qgc3luY19wYXRoIGluIHN5cy5w
YXRoOgorICAgICAgICAgICAgZnJvbSB1cGRhdGUgaW1wb3J0IHNldHVwX3BhdGhzCisgICAgICAg
ICAgICBzZXR1cF9wYXRocyhzeW5jX3BhdGgpCisKKyAgICBkZWYgcmVzdG9yZShzZWxmLCBzdGF0
ZSk6CisgICAgICAgIGFzc2VydCBvcy5wYXRoLmFic3BhdGgoc3RhdGUuc3luY190cmVlLnJvb3Qp
IGluIHN5cy5wYXRoCisgICAgICAgIFN0ZXAucmVzdG9yZShzZWxmLCBzdGF0ZSkKKworCitjbGFz
cyBHZXRTeW5jVGFyZ2V0Q29tbWl0KFN0ZXApOgorICAgICIiIkZpbmQgdGhlIGNvbW1pdCB0aGF0
IHdlIHdpbGwgc3luYyB0by4iIiIKKworICAgIHByb3ZpZGVzID0gWyJzeW5jX2NvbW1pdCJdCisK
KyAgICBkZWYgY3JlYXRlKHNlbGYsIHN0YXRlKToKKyAgICAgICAgaWYgc3RhdGUudGFyZ2V0X3Jl
diBpcyBOb25lOgorICAgICAgICAgICAgI1VzZSB1cHN0cmVhbSBicmFuY2ggSEVBRCBhcyB0aGUg
YmFzZSBjb21taXQKKyAgICAgICAgICAgIHN0YXRlLnN5bmNfY29tbWl0ID0gc3RhdGUuc3luY190
cmVlLmdldF9yZW1vdGVfc2hhMShzdGF0ZS5zeW5jWyJyZW1vdGVfdXJsIl0sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
dGUuc3luY1siYnJhbmNoIl0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzdGF0ZS5zeW5j
X2NvbW1pdCA9IENvbW1pdChzdGF0ZS5zeW5jX3RyZWUsIHN0YXRlLnJldikKKworICAgICAgICBz
dGF0ZS5zeW5jX3RyZWUuY2hlY2tvdXQoc3RhdGUuc3luY19jb21taXQuc2hhMSwgc3RhdGUubG9j
YWxfYnJhbmNoLCBmb3JjZT1UcnVlKQorICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1ZygiTmV3IGJh
c2UgY29tbWl0IGlzICVzIiAlIHN0YXRlLnN5bmNfY29tbWl0LnNoYTEpCisKKworY2xhc3MgTG9h
ZE1hbmlmZXN0KFN0ZXApOgorICAgICIiIkxvYWQgdGhlIHRlc3QgbWFuaWZlc3QiIiIKKworICAg
IHByb3ZpZGVzID0gWyJtYW5pZmVzdF9wYXRoIiwgInRlc3RfbWFuaWZlc3QiXQorCisgICAgZGVm
IGNyZWF0ZShzZWxmLCBzdGF0ZSk6CisgICAgICAgIGZyb20gbWFuaWZlc3QgaW1wb3J0IG1hbmlm
ZXN0CisgICAgICAgIHN0YXRlLm1hbmlmZXN0X3BhdGggPSBvcy5wYXRoLmpvaW4oc3RhdGUubWV0
YWRhdGFfcGF0aCwgIk1BTklGRVNULmpzb24iKQorICAgICAgICBzdGF0ZS50ZXN0X21hbmlmZXN0
ID0gbWFuaWZlc3QuTWFuaWZlc3QoIi8iKQorCisKK2NsYXNzIFVwZGF0ZU1hbmlmZXN0KFN0ZXAp
OgorICAgICIiIlVwZGF0ZSB0aGUgbWFuaWZlc3QgdG8gbWF0Y2ggdGhlIHRlc3RzIGluIHRoZSBz
eW5jIHRyZWUgY2hlY2tvdXQiIiIKKworICAgIGRlZiBjcmVhdGUoc2VsZiwgc3RhdGUpOgorICAg
ICAgICBmcm9tIG1hbmlmZXN0IGltcG9ydCBtYW5pZmVzdCwgdXBkYXRlCisgICAgICAgIHVwZGF0
ZS51cGRhdGUoc3RhdGUuc3luY1sicGF0aCJdLCBzdGF0ZS50ZXN0X21hbmlmZXN0KQorICAgICAg
ICBtYW5pZmVzdC53cml0ZShzdGF0ZS50ZXN0X21hbmlmZXN0LCBzdGF0ZS5tYW5pZmVzdF9wYXRo
KQorCisKK2NsYXNzIENvcHlXb3JrVHJlZShTdGVwKToKKyAgICAiIiJDb3B5IHRoZSBzeW5jIHRy
ZWUgb3ZlciB0byB0aGUgZGVzdGluYXRpb24gaW4gdGhlIGxvY2FsIHRyZWUiIiIKKworICAgIGRl
ZiBjcmVhdGUoc2VsZiwgc3RhdGUpOgorICAgICAgICBjb3B5X3dwdF90cmVlKHN0YXRlLnN5bmNf
dHJlZSwKKyAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS50ZXN0c19wYXRoLAorICAgICAgICAg
ICAgICAgICAgICAgIGV4Y2x1ZGVzPXN0YXRlLnBhdGhfZXhjbHVkZXMsCisgICAgICAgICAgICAg
ICAgICAgICAgaW5jbHVkZXM9c3RhdGUucGF0aF9pbmNsdWRlcykKKworCitjbGFzcyBDcmVhdGVT
eW5jUGF0Y2goU3RlcCk6CisgICAgIiIiQWRkIHRoZSB1cGRhdGVkIHRlc3QgZmlsZXMgdG8gYSBj
b21taXQvcGF0Y2ggaW4gdGhlIGxvY2FsIHRyZWUuIiIiCisKKyAgICBkZWYgY3JlYXRlKHNlbGYs
IHN0YXRlKToKKyAgICAgICAgaWYgbm90IHN0YXRlLnBhdGNoOgorICAgICAgICAgICAgcmV0dXJu
CisKKyAgICAgICAgbG9jYWxfdHJlZSA9IHN0YXRlLmxvY2FsX3RyZWUKKyAgICAgICAgc3luY190
cmVlID0gc3RhdGUuc3luY190cmVlCisKKyAgICAgICAgbG9jYWxfdHJlZS5jcmVhdGVfcGF0Y2go
IndlYi1wbGF0Zm9ybS10ZXN0c191cGRhdGVfJXMiICUgc3luY190cmVlLnJldiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIlVwZGF0ZSAlcyB0byByZXZpc2lvbiAlcyIgJSAoc3Rh
dGUuc3VpdGVfbmFtZSwgc3luY190cmVlLnJldikpCisgICAgICAgIGxvY2FsX3RyZWUuYWRkX25l
dyhvcy5wYXRoLnJlbHBhdGgoc3RhdGUudGVzdHNfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsb2NhbF90cmVlLnJvb3QpKQorICAgICAgICB1cGRhdGVk
ID0gbG9jYWxfdHJlZS51cGRhdGVfcGF0Y2goaW5jbHVkZT1bc3RhdGUudGVzdHNfcGF0aCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLm1l
dGFkYXRhX3BhdGhdKQorICAgICAgICBsb2NhbF90cmVlLmNvbW1pdF9wYXRjaCgpCisKKyAgICAg
ICAgaWYgbm90IHVwZGF0ZWQ6CisgICAgICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKCJOb3RoaW5n
IHRvIHN5bmMiKQorCisKK2NsYXNzIFN5bmNGcm9tVXBzdHJlYW1SdW5uZXIoU3RlcFJ1bm5lcik6
CisgICAgIiIiKFN1YilSdW5uZXIgZm9yIGRvaW5nIGFuIHVwc3RyZWFtIHN5bmMiIiIKKyAgICBz
dGVwcyA9IFtVcGRhdGVDaGVja291dCwKKyAgICAgICAgICAgICBHZXRTeW5jVGFyZ2V0Q29tbWl0
LAorICAgICAgICAgICAgIExvYWRNYW5pZmVzdCwKKyAgICAgICAgICAgICBVcGRhdGVNYW5pZmVz
dCwKKyAgICAgICAgICAgICBDb3B5V29ya1RyZWUsCisgICAgICAgICAgICAgQ3JlYXRlU3luY1Bh
dGNoXQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1
bm5lci93cHRydW5uZXIvdXBkYXRlL3RyZWUucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93
M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci91cGRhdGUvdHJlZS5weQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDFkZjBiNGY5NGEKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci91
cGRhdGUvdHJlZS5weQpAQCAtMCwwICsxLDM4MiBAQAoraW1wb3J0IG9zCitpbXBvcnQgcmUKK2lt
cG9ydCBzdWJwcm9jZXNzCisKK2Zyb20gLi4gaW1wb3J0IHZjcworZnJvbSAuLnZjcyBpbXBvcnQg
YmluZF90b19yZXBvLCBnaXQsIGhnCisKKworZGVmIGdldF91bmlxdWVfbmFtZShleGlzdGluZywg
aW5pdGlhbCk6CisgICAgIiIiR2V0IGEgbmFtZSBlaXRoZXIgZXF1YWwgdG8gaW5pdGlhbCBvciBv
ZiB0aGUgZm9ybSBpbml0aWFsX04sIGZvciBzb21lCisgICAgaW50ZWdlciBOLCB0aGF0IGlzIG5v
dCBpbiB0aGUgc2V0IGV4aXN0aW5nLgorCisKKyAgICA6cGFyYW0gZXhpc3Rpbmc6IFNldCBvZiBu
YW1lcyB0aGF0IG11c3Qgbm90IGJlIGNob3Nlbi4KKyAgICA6cGFyYW0gaW5pdGlhbDogTmFtZSwg
b3IgbmFtZSBwcmVmaXgsIHRvIHVzZSIiIgorICAgIGlmIGluaXRpYWwgbm90IGluIGV4aXN0aW5n
OgorICAgICAgICByZXR1cm4gaW5pdGlhbAorICAgIGZvciBpIGluIHhyYW5nZShsZW4oZXhpc3Rp
bmcpICsgMSk6CisgICAgICAgIHRlc3QgPSAiJXNfJXMiICUgKGluaXRpYWwsIGkgKyAxKQorICAg
ICAgICBpZiB0ZXN0IG5vdCBpbiBleGlzdGluZzoKKyAgICAgICAgICAgIHJldHVybiB0ZXN0Cisg
ICAgYXNzZXJ0IEZhbHNlCisKK2NsYXNzIE5vVkNTVHJlZShvYmplY3QpOgorICAgIG5hbWUgPSAi
bm9uLXZjcyIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCByb290PU5vbmUpOgorICAgICAgICBp
ZiByb290IGlzIE5vbmU6CisgICAgICAgICAgICByb290ID0gb3MucGF0aC5hYnNwYXRoKG9zLmN1
cmRpcikKKyAgICAgICAgc2VsZi5yb290ID0gcm9vdAorCisgICAgQGNsYXNzbWV0aG9kCisgICAg
ZGVmIGlzX3R5cGUoY2xzLCBwYXRoPU5vbmUpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAg
QHByb3BlcnR5CisgICAgZGVmIGlzX2NsZWFuKHNlbGYpOgorICAgICAgICByZXR1cm4gVHJ1ZQor
CisgICAgZGVmIGFkZF9uZXcoc2VsZiwgcHJlZml4PU5vbmUpOgorICAgICAgICBwYXNzCisKKyAg
ICBkZWYgY3JlYXRlX3BhdGNoKHNlbGYsIHBhdGNoX25hbWUsIG1lc3NhZ2UpOgorICAgICAgICBw
YXNzCisKKyAgICBkZWYgdXBkYXRlX3BhdGNoKHNlbGYsIGluY2x1ZGU9Tm9uZSk6CisgICAgICAg
IHBhc3MKKworICAgIGRlZiBjb21taXRfcGF0Y2goc2VsZik6CisgICAgICAgIHBhc3MKKworCitj
bGFzcyBIZ1RyZWUob2JqZWN0KToKKyAgICBuYW1lID0gIm1lcmN1cmlhbCIKKworICAgIGRlZiBf
X2luaXRfXyhzZWxmLCByb290PU5vbmUpOgorICAgICAgICBpZiByb290IGlzIE5vbmU6CisgICAg
ICAgICAgICByb290ID0gaGcoInJvb3QiKS5zdHJpcCgpCisgICAgICAgIHNlbGYucm9vdCA9IHJv
b3QKKyAgICAgICAgc2VsZi5oZyA9IHZjcy5iaW5kX3RvX3JlcG8oaGcsIHNlbGYucm9vdCkKKwor
ICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6CisgICAgICAgIHJ2ID0gc2VsZi5fX2RpY3RfXy5j
b3B5KCkKKyAgICAgICAgZGVsIHJ2WydoZyddCisgICAgICAgIHJldHVybiBydgorCisgICAgZGVm
IF9fc2V0c3RhdGVfXyhzZWxmLCBkaWN0KToKKyAgICAgICAgc2VsZi5fX2RpY3RfXy51cGRhdGUo
ZGljdCkKKyAgICAgICAgc2VsZi5oZyA9IHZjcy5iaW5kX3RvX3JlcG8odmNzLmhnLCBzZWxmLnJv
b3QpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgaXNfdHlwZShjbHMsIHBhdGg9Tm9uZSk6
CisgICAgICAgIGt3YXJncyA9IHsibG9nX2Vycm9yIjogRmFsc2V9CisgICAgICAgIGlmIHBhdGgg
aXMgbm90IE5vbmU6CisgICAgICAgICAgICBrd2FyZ3NbInJlcG8iXSA9IHBhdGgKKyAgICAgICAg
dHJ5OgorICAgICAgICAgICAgaGcoInJvb3QiLCAqKmt3YXJncykKKyAgICAgICAgZXhjZXB0Ogor
ICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBAcHJv
cGVydHkKKyAgICBkZWYgaXNfY2xlYW4oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmhnKCJz
dGF0dXMiKS5zdHJpcCgpID09ICIiCisKKyAgICBkZWYgYWRkX25ldyhzZWxmLCBwcmVmaXg9Tm9u
ZSk6CisgICAgICAgIGlmIHByZWZpeCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGFyZ3MgPSAo
Ii1JIiwgcHJlZml4KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYXJncyA9ICgpCisgICAg
ICAgIHNlbGYuaGcoImFkZCIsICphcmdzKQorCisgICAgZGVmIGNyZWF0ZV9wYXRjaChzZWxmLCBw
YXRjaF9uYW1lLCBtZXNzYWdlKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5oZygi
cWluaXQiLCBsb2dfZXJyb3I9RmFsc2UpCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxl
ZFByb2Nlc3NFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBwYXRjaF9uYW1lcyA9
IFtpdGVtLnN0cmlwKCkgZm9yIGl0ZW0gaW4gc2VsZi5oZygicXNlcmllcyIpLnNwbGl0KCJcbiIp
IGlmIGl0ZW0uc3RyaXAoKV0KKworICAgICAgICBzdWZmaXggPSAwCisgICAgICAgIHRlc3RfbmFt
ZSA9IHBhdGNoX25hbWUKKyAgICAgICAgd2hpbGUgdGVzdF9uYW1lIGluIHBhdGNoX25hbWVzOgor
ICAgICAgICAgICAgc3VmZml4ICs9IDEKKyAgICAgICAgICAgIHRlc3RfbmFtZSA9ICIlcy0laSIg
JSAocGF0Y2hfbmFtZSwgc3VmZml4KQorCisgICAgICAgIHNlbGYuaGcoInFuZXciLCB0ZXN0X25h
bWUsICItWCIsIHNlbGYucm9vdCwgIi1tIiwgbWVzc2FnZSkKKworICAgIGRlZiB1cGRhdGVfcGF0
Y2goc2VsZiwgaW5jbHVkZT1Ob25lKToKKyAgICAgICAgaWYgaW5jbHVkZSBpcyBub3QgTm9uZToK
KyAgICAgICAgICAgIGFyZ3MgPSBbXQorICAgICAgICAgICAgZm9yIGl0ZW0gaW4gaW5jbHVkZToK
KyAgICAgICAgICAgICAgICBhcmdzLmV4dGVuZChbIi1JIiwgaXRlbV0pCisgICAgICAgIGVsc2U6
CisgICAgICAgICAgICBhcmdzID0gKCkKKworICAgICAgICBzZWxmLmhnKCJxcmVmcmVzaCIsICph
cmdzKQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIGNvbW1pdF9wYXRjaChzZWxmKToK
KyAgICAgICAgc2VsZi5oZygicWZpbmlzaCIpCisKKyAgICBkZWYgY29udGFpbnNfY29tbWl0KHNl
bGYsIGNvbW1pdCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuaGcoImlkZW50aWZ5
IiwgIi1yIiwgY29tbWl0LnNoYTEpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBl
eGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3I6CisgICAgICAgICAgICByZXR1cm4g
RmFsc2UKKworCitjbGFzcyBHaXRUcmVlKG9iamVjdCk6CisgICAgbmFtZSA9ICJnaXQiCisKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgcm9vdD1Ob25lKToKKyAgICAgICAgaWYgcm9vdCBpcyBOb25l
OgorICAgICAgICAgICAgcm9vdCA9IGdpdCgicmV2LXBhcnNlIiwgIi0tc2hvdy10b3BsZXZlbCIp
LnN0cmlwKCkKKyAgICAgICAgc2VsZi5yb290ID0gcm9vdAorICAgICAgICBzZWxmLmdpdCA9IHZj
cy5iaW5kX3RvX3JlcG8oZ2l0LCBzZWxmLnJvb3QpCisgICAgICAgIHNlbGYubWVzc2FnZSA9IE5v
bmUKKyAgICAgICAgc2VsZi5jb21taXRfY2xzID0gQ29tbWl0CisKKyAgICBkZWYgX19nZXRzdGF0
ZV9fKHNlbGYpOgorICAgICAgICBydiA9IHNlbGYuX19kaWN0X18uY29weSgpCisgICAgICAgIGRl
bCBydlsnZ2l0J10KKyAgICAgICAgcmV0dXJuIHJ2CisKKyAgICBkZWYgX19zZXRzdGF0ZV9fKHNl
bGYsIGRpY3QpOgorICAgICAgICBzZWxmLl9fZGljdF9fLnVwZGF0ZShkaWN0KQorICAgICAgICBz
ZWxmLmdpdCA9IHZjcy5iaW5kX3RvX3JlcG8odmNzLmdpdCwgc2VsZi5yb290KQorCisgICAgQGNs
YXNzbWV0aG9kCisgICAgZGVmIGlzX3R5cGUoY2xzLCBwYXRoPU5vbmUpOgorICAgICAgICBrd2Fy
Z3MgPSB7ImxvZ19lcnJvciI6IEZhbHNlfQorICAgICAgICBpZiBwYXRoIGlzIG5vdCBOb25lOgor
ICAgICAgICAgICAga3dhcmdzWyJyZXBvIl0gPSBwYXRoCisgICAgICAgIHRyeToKKyAgICAgICAg
ICAgIGdpdCgicmV2LXBhcnNlIiwgIi0tc2hvdy10b3BsZXZlbCIsICoqa3dhcmdzKQorICAgICAg
ICBleGNlcHQ6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUK
KworICAgIEBwcm9wZXJ0eQorICAgIGRlZiByZXYoc2VsZik6CisgICAgICAgICIiIkN1cnJlbnQg
SEVBRCByZXZpc2lvbiIiIgorICAgICAgICBpZiB2Y3MuaXNfZ2l0X3Jvb3Qoc2VsZi5yb290KToK
KyAgICAgICAgICAgIHJldHVybiBzZWxmLmdpdCgicmV2LXBhcnNlIiwgIkhFQUQiKS5zdHJpcCgp
CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgQHByb3BlcnR5
CisgICAgZGVmIGlzX2NsZWFuKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5naXQoInN0YXR1
cyIpLnN0cmlwKCkgPT0gIiIKKworICAgIGRlZiBhZGRfbmV3KHNlbGYsIHByZWZpeD1Ob25lKToK
KyAgICAgICAgIiIiQWRkIGZpbGVzIHRvIHRoZSBzdGFnaW5nIGFyZWEuCisKKyAgICAgICAgOnBh
cmFtIHByZWZpeDogTm9uZSB0byBpbmNsdWRlIGFsbCBmaWxlcyBvciBhIHBhdGggcHJlZml4IHRv
CisgICAgICAgICAgICAgICAgICAgICAgIGFkZCBhbGwgZmlsZXMgdW5kZXIgdGhhdCBwYXRoLgor
ICAgICAgICAiIiIKKyAgICAgICAgaWYgcHJlZml4IGlzIE5vbmU6CisgICAgICAgICAgICBhcmdz
ID0gKCItYSIsKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYXJncyA9ICgiLS1uby1pZ25v
cmUtcmVtb3ZhbCIsIHByZWZpeCkKKyAgICAgICAgc2VsZi5naXQoImFkZCIsICphcmdzKQorCisg
ICAgZGVmIGxpc3RfcmVmcyhzZWxmLCByZWZfZmlsdGVyPU5vbmUpOgorICAgICAgICAiIiJHZXQg
YSBsaXN0IG9mIHNoYTEsIG5hbWUgdHVwbGVzIGZvciByZWZlcmVuY2VzIGluIGEgcmVwb3NpdG9y
eS4KKworICAgICAgICA6cGFyYW0gcmVmX2ZpbHRlcjogUGF0dGVybiB0aGF0IHJlZmVyZW5jZSBu
YW1lIG11c3QgbWF0Y2ggKGZyb20gdGhlIGVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1hdGNoaW5nIHdob2xlIC8tZGVsaW1pdGVkIHNlZ21lbnRzIG9ubHkKKyAgICAgICAgIiIiCisg
ICAgICAgIGFyZ3MgPSBbXQorICAgICAgICBpZiByZWZfZmlsdGVyIGlzIG5vdCBOb25lOgorICAg
ICAgICAgICAgYXJncy5hcHBlbmQocmVmX2ZpbHRlcikKKyAgICAgICAgZGF0YSA9IHNlbGYuZ2l0
KCJzaG93LXJlZiIsICphcmdzKQorICAgICAgICBydiA9IFtdCisgICAgICAgIGZvciBsaW5lIGlu
IGRhdGEuc3BsaXQoIlxuIik6CisgICAgICAgICAgICBpZiBub3QgbGluZS5zdHJpcCgpOgorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBzaGExLCByZWYgPSBsaW5lLnNwbGl0
KCkKKyAgICAgICAgICAgIHJ2LmFwcGVuZCgoc2hhMSwgcmVmKSkKKyAgICAgICAgcmV0dXJuIHJ2
CisKKyAgICBkZWYgbGlzdF9yZW1vdGUoc2VsZiwgcmVtb3RlLCByZWZfZmlsdGVyPU5vbmUpOgor
ICAgICAgICAiIiJSZXR1cm4gYSBsaXN0IG9mIChzaGExLCBuYW1lKSB0dXBlcyBmb3IgcmVmZXJl
bmNlcyBpbiBhIHJlbW90ZS4KKworICAgICAgICA6cGFyYW0gcmVtb3RlOiBVUkwgb2YgdGhlIHJl
bW90ZSB0byBsaXN0LgorICAgICAgICA6cGFyYW0gcmVmX2ZpbHRlcjogUGF0dGVybiB0aGF0IHRo
ZSByZWZlcmVuY2UgbmFtZSBtdXN0IG1hdGNoLgorICAgICAgICAiIiIKKyAgICAgICAgYXJncyA9
IFtdCisgICAgICAgIGlmIHJlZl9maWx0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBhcmdz
LmFwcGVuZChyZWZfZmlsdGVyKQorICAgICAgICBkYXRhID0gc2VsZi5naXQoImxzLXJlbW90ZSIs
IHJlbW90ZSwgKmFyZ3MpCisgICAgICAgIHJ2ID0gW10KKyAgICAgICAgZm9yIGxpbmUgaW4gZGF0
YS5zcGxpdCgiXG4iKToKKyAgICAgICAgICAgIGlmIG5vdCBsaW5lLnN0cmlwKCk6CisgICAgICAg
ICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHNoYTEsIHJlZiA9IGxpbmUuc3BsaXQoKQor
ICAgICAgICAgICAgcnYuYXBwZW5kKChzaGExLCByZWYpKQorICAgICAgICByZXR1cm4gcnYKKwor
ICAgIGRlZiBnZXRfcmVtb3RlX3NoYTEoc2VsZiwgcmVtb3RlLCBicmFuY2gpOgorICAgICAgICAi
IiJSZXR1cm4gdGhlIFNIQTEgb2YgYSBwYXJ0aWN1bGFyIGJyYW5jaCBpbiBhIHJlbW90ZS4KKwor
ICAgICAgICA6cGFyYW0gcmVtb3RlOiB0aGUgcmVtb3RlIFVSTAorICAgICAgICA6cGFyYW0gYnJh
bmNoOiB0aGUgYnJhbmNoIG5hbWUiIiIKKyAgICAgICAgZm9yIHNoYTEsIHJlZiBpbiBzZWxmLmxp
c3RfcmVtb3RlKHJlbW90ZSwgYnJhbmNoKToKKyAgICAgICAgICAgIGlmIHJlZiA9PSAicmVmcy9o
ZWFkcy8lcyIgJSBicmFuY2g6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuY29tbWl0X2Ns
cyhzZWxmLCBzaGExKQorICAgICAgICBhc3NlcnQgRmFsc2UKKworICAgIGRlZiBjcmVhdGVfcGF0
Y2goc2VsZiwgcGF0Y2hfbmFtZSwgbWVzc2FnZSk6CisgICAgICAgICMgSW4gZ2l0IGEgcGF0Y2gg
aXMgYWN0dWFsbHkgYSBjb21taXQKKyAgICAgICAgc2VsZi5tZXNzYWdlID0gbWVzc2FnZQorCisg
ICAgZGVmIHVwZGF0ZV9wYXRjaChzZWxmLCBpbmNsdWRlPU5vbmUpOgorICAgICAgICAiIiJDb21t
aXQgdGhlIHN0YWdlZCBjaGFuZ2VzLCBvciBjaGFuZ2VzIHRvIGxpc3RlZCBmaWxlcy4KKworICAg
ICAgICA6cGFyYW0gaW5jbHVkZTogRWl0aGVyIE5vbmUsIHRvIGNvbW1pdCBzdGFnZWQgY2hhbmdl
cywgb3IgYSBsaXN0CisgICAgICAgICAgICAgICAgICAgICAgICBvZiBmaWxlbmFtZXMgKHdoaWNo
IG11c3QgYWxyZWFkeSBiZSBpbiB0aGUgcmVwbykKKyAgICAgICAgICAgICAgICAgICAgICAgIHRv
IGNvbW1pdAorICAgICAgICAiIiIKKyAgICAgICAgaWYgaW5jbHVkZSBpcyBub3QgTm9uZToKKyAg
ICAgICAgICAgIGFyZ3MgPSB0dXBsZShpbmNsdWRlKQorICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgYXJncyA9ICgpCisKKyAgICAgICAgaWYgc2VsZi5naXQoInN0YXR1cyIsICItdW5vIiwgIi16
IiwgKmFyZ3MpLnN0cmlwKCk6CisgICAgICAgICAgICBzZWxmLmdpdCgiYWRkIiwgKmFyZ3MpCisg
ICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBj
b21taXRfcGF0Y2goc2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLm1lc3NhZ2UgaXMgbm90IE5v
bmUKKworICAgICAgICBpZiBzZWxmLmdpdCgiZGlmZiIsICItLW5hbWUtb25seSIsICItLXN0YWdl
ZCIsICIteiIpLnN0cmlwKCk6CisgICAgICAgICAgICBzZWxmLmdpdCgiY29tbWl0IiwgIi1tIiwg
c2VsZi5tZXNzYWdlKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICByZXR1cm4g
RmFsc2UKKworICAgIGRlZiBpbml0KHNlbGYpOgorICAgICAgICBzZWxmLmdpdCgiaW5pdCIpCisg
ICAgICAgIGFzc2VydCB2Y3MuaXNfZ2l0X3Jvb3Qoc2VsZi5yb290KQorCisgICAgZGVmIGNoZWNr
b3V0KHNlbGYsIHJldiwgYnJhbmNoPU5vbmUsIGZvcmNlPUZhbHNlKToKKyAgICAgICAgIiIiQ2hl
Y2tvdXQgYSBwYXJ0aWN1bGFyIHJldmlzaW9uLCBvcHRpb25hbGx5IGludG8gYSBuYW1lZCBicmFu
Y2guCisKKyAgICAgICAgOnBhcmFtIHJldjogUmV2aXNpb24gaWRlbnRpZmllciAoZS5nLiBTSEEx
KSB0byBjaGVja291dAorICAgICAgICA6cGFyYW0gYnJhbmNoOiBCcmFuY2ggbmFtZSB0byB1c2UK
KyAgICAgICAgOnBhcmFtIGZvcmNlOiBGb3JjZS1jaGVja291dAorICAgICAgICAiIiIKKyAgICAg
ICAgYXNzZXJ0IHJldiBpcyBub3QgTm9uZQorCisgICAgICAgIGFyZ3MgPSBbXQorICAgICAgICBp
ZiBicmFuY2g6CisgICAgICAgICAgICBicmFuY2hlcyA9IFtyZWZbbGVuKCJyZWZzL2hlYWRzLyIp
Ol0gZm9yIHNoYTEsIHJlZiBpbiBzZWxmLmxpc3RfcmVmcygpCisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiByZWYuc3RhcnRzd2l0aCgicmVmcy9oZWFkcy8iKV0KKyAgICAgICAgICAgIGJyYW5j
aCA9IGdldF91bmlxdWVfbmFtZShicmFuY2hlcywgYnJhbmNoKQorCisgICAgICAgICAgICBhcmdz
ICs9IFsiLWIiLCBicmFuY2hdCisKKyAgICAgICAgaWYgZm9yY2U6CisgICAgICAgICAgICBhcmdz
LmFwcGVuZCgiLWYiKQorICAgICAgICBhcmdzLmFwcGVuZChyZXYpCisgICAgICAgIHNlbGYuZ2l0
KCJjaGVja291dCIsICphcmdzKQorCisgICAgZGVmIHVwZGF0ZShzZWxmLCByZW1vdGUsIHJlbW90
ZV9icmFuY2gsIGxvY2FsX2JyYW5jaCk6CisgICAgICAgICIiIkZldGNoIGZyb20gdGhlIHJlbW90
ZSBhbmQgY2hlY2tvdXQgaW50byBhIGxvY2FsIGJyYW5jaC4KKworICAgICAgICA6cGFyYW0gcmVt
b3RlOiBVUkwgdG8gdGhlIHJlbW90ZSByZXBvc2l0b3J5CisgICAgICAgIDpwYXJhbSByZW1vdGVf
YnJhbmNoOiBCcmFuY2ggb24gdGhlIHJlbW90ZSByZXBvc2l0b3J5IHRvIGNoZWNrIG91dAorICAg
ICAgICA6cGFyYW0gbG9jYWxfYnJhbmNoOiBMb2NhbCBicmFuY2ggbmFtZSB0byBjaGVjayBvdXQg
aW50bworICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IHZjcy5pc19naXRfcm9vdChzZWxmLnJv
b3QpOgorICAgICAgICAgICAgc2VsZi5pbml0KCkKKyAgICAgICAgc2VsZi5naXQoImNsZWFuIiwg
Ii14ZGYiKQorICAgICAgICBzZWxmLmdpdCgiZmV0Y2giLCByZW1vdGUsICIlczolcyIgJSAocmVt
b3RlX2JyYW5jaCwgbG9jYWxfYnJhbmNoKSkKKyAgICAgICAgc2VsZi5jaGVja291dChsb2NhbF9i
cmFuY2gpCisgICAgICAgIHNlbGYuZ2l0KCJzdWJtb2R1bGUiLCAidXBkYXRlIiwgIi0taW5pdCIs
ICItLXJlY3Vyc2l2ZSIpCisKKyAgICBkZWYgY2xlYW4oc2VsZik6CisgICAgICAgIHNlbGYuZ2l0
KCJjaGVja291dCIsIHNlbGYucmV2KQorICAgICAgICBzZWxmLmdpdCgiYnJhbmNoIiwgIi1EIiwg
c2VsZi5sb2NhbF9icmFuY2gpCisKKyAgICBkZWYgcGF0aHMoc2VsZik6CisgICAgICAgICIiIkxp
c3QgcGF0aHMgaW4gdGhlIHRyZWUiIiIKKyAgICAgICAgcmVwb19wYXRocyA9IFtzZWxmLnJvb3Rd
ICsgIFtvcy5wYXRoLmpvaW4oc2VsZi5yb290LCBwYXRoKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciBwYXRoIGluIHNlbGYuc3VibW9kdWxlcygpXQorCisgICAgICAg
IHJ2ID0gW10KKworICAgICAgICBmb3IgcmVwb19wYXRoIGluIHJlcG9fcGF0aHM6CisgICAgICAg
ICAgICBwYXRocyA9IHZjcy5naXQoImxzLXRyZWUiLCAiLXIiLCAiLS1uYW1lLW9ubHkiLCAiSEVB
RCIsIHJlcG89cmVwb19wYXRoKS5zcGxpdCgiXG4iKQorICAgICAgICAgICAgcnYuZXh0ZW5kKG9z
LnBhdGgucmVscGF0aChvcy5wYXRoLmpvaW4ocmVwb19wYXRoLCBpdGVtKSwgc2VsZi5yb290KSBm
b3IgaXRlbSBpbiBwYXRocworICAgICAgICAgICAgICAgICAgICAgIGlmIGl0ZW0uc3RyaXAoKSkK
KyAgICAgICAgcmV0dXJuIHJ2CisKKyAgICBkZWYgc3VibW9kdWxlcyhzZWxmKToKKyAgICAgICAg
IiIiTGlzdCBzdWJtb2R1bGUgZGlyZWN0b3JpZXMiIiIKKyAgICAgICAgb3V0cHV0ID0gc2VsZi5n
aXQoInN1Ym1vZHVsZSIsICJzdGF0dXMiLCAiLS1yZWN1cnNpdmUiKQorICAgICAgICBydiA9IFtd
CisgICAgICAgIGZvciBsaW5lIGluIG91dHB1dC5zcGxpdCgiXG4iKToKKyAgICAgICAgICAgIGxp
bmUgPSBsaW5lLnN0cmlwKCkKKyAgICAgICAgICAgIGlmIG5vdCBsaW5lOgorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlCisgICAgICAgICAgICBwYXJ0cyA9IGxpbmUuc3BsaXQoIiAiKQorICAgICAg
ICAgICAgcnYuYXBwZW5kKHBhcnRzWzFdKQorICAgICAgICByZXR1cm4gcnYKKworICAgIGRlZiBj
b250YWluc19jb21taXQoc2VsZiwgY29tbWl0KToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAg
c2VsZi5naXQoInJldi1wYXJzZSIsICItLXZlcmlmeSIsIGNvbW1pdC5zaGExKQorICAgICAgICAg
ICAgcmV0dXJuIFRydWUKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vy
cm9yOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKworY2xhc3MgQ29tbWl0TWVzc2FnZShv
YmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXh0KToKKyAgICAgICAgc2VsZi50ZXh0
ID0gdGV4dAorICAgICAgICBzZWxmLl9wYXJzZV9tZXNzYWdlKCkKKworICAgIGRlZiBfX3N0cl9f
KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi50ZXh0CisKKyAgICBkZWYgX3BhcnNlX21lc3Nh
Z2Uoc2VsZik6CisgICAgICAgIGxpbmVzID0gc2VsZi50ZXh0LnNwbGl0bGluZXMoKQorICAgICAg
ICBzZWxmLmZ1bGxfc3VtbWFyeSA9IGxpbmVzWzBdCisgICAgICAgIHNlbGYuYm9keSA9ICJcbiIu
am9pbihsaW5lc1sxOl0pCisKKworY2xhc3MgQ29tbWl0KG9iamVjdCk6CisgICAgbXNnX2NscyA9
IENvbW1pdE1lc3NhZ2UKKworICAgIF9zaGExX3JlID0gcmUuY29tcGlsZSgiXlswLTlhLWZdezQw
fSQiKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRyZWUsIHNoYTEpOgorICAgICAgICAiIiJP
YmplY3QgcmVwcmVzZW50aW5nIGEgY29tbWl0IGluIGEgc3BlY2lmaWMgR2l0VHJlZS4KKworICAg
ICAgICA6cGFyYW0gdHJlZTogR2l0VHJlZSB0byB3aGljaCB0aGlzIGNvbW1pdCBiZWxvbmdzLgor
ICAgICAgICA6cGFyYW0gc2hhMTogRnVsbCBzaGExIHN0cmluZyBmb3IgdGhlIGNvbW1pdAorICAg
ICAgICAiIiIKKyAgICAgICAgYXNzZXJ0IHNlbGYuX3NoYTFfcmUubWF0Y2goc2hhMSkKKworICAg
ICAgICBzZWxmLnRyZWUgPSB0cmVlCisgICAgICAgIHNlbGYuZ2l0ID0gdHJlZS5naXQKKyAgICAg
ICAgc2VsZi5zaGExID0gc2hhMQorICAgICAgICBzZWxmLmF1dGhvciwgc2VsZi5lbWFpbCwgc2Vs
Zi5tZXNzYWdlID0gc2VsZi5fZ2V0X21ldGEoKQorCisgICAgZGVmIF9fZ2V0c3RhdGVfXyhzZWxm
KToKKyAgICAgICAgcnYgPSBzZWxmLl9fZGljdF9fLmNvcHkoKQorICAgICAgICBkZWwgcnZbJ2dp
dCddCisgICAgICAgIHJldHVybiBydgorCisgICAgZGVmIF9fc2V0c3RhdGVfXyhzZWxmLCBkaWN0
KToKKyAgICAgICAgc2VsZi5fX2RpY3RfXy51cGRhdGUoZGljdCkKKyAgICAgICAgc2VsZi5naXQg
PSBzZWxmLnRyZWUuZ2l0CisKKyAgICBkZWYgX2dldF9tZXRhKHNlbGYpOgorICAgICAgICBhdXRo
b3IsIGVtYWlsLCBtZXNzYWdlID0gc2VsZi5naXQoInNob3ciLCAiLXMiLCAiLS1mb3JtYXQ9Zm9y
bWF0OiVhblxuJWFlXG4lQiIsIHNlbGYuc2hhMSkuc3BsaXQoIlxuIiwgMikKKyAgICAgICAgcmV0
dXJuIGF1dGhvciwgZW1haWwsIHNlbGYubXNnX2NscyhtZXNzYWdlKQpkaWZmIC0tZ2l0IGEvV2Vi
RHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvdXBkYXRl
L3VwZGF0ZS5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIv
d3B0cnVubmVyL3VwZGF0ZS91cGRhdGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAuLjNkN2Q3NzIwODRiCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMv
aW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvdXBkYXRlL3VwZGF0ZS5weQpA
QCAtMCwwICsxLDE1OSBAQAoraW1wb3J0IG9zCitpbXBvcnQgc3lzCisKK2Zyb20gbWV0YWRhdGEg
aW1wb3J0IE1ldGFkYXRhVXBkYXRlUnVubmVyCitmcm9tIHN5bmMgaW1wb3J0IFN5bmNGcm9tVXBz
dHJlYW1SdW5uZXIKK2Zyb20gdHJlZSBpbXBvcnQgR2l0VHJlZSwgSGdUcmVlLCBOb1ZDU1RyZWUK
KworZnJvbSAuLiBpbXBvcnQgZW52aXJvbm1lbnQgYXMgZW52Citmcm9tIGJhc2UgaW1wb3J0IFN0
ZXAsIFN0ZXBSdW5uZXIsIGV4aXRfY2xlYW4sIGV4aXRfdW5jbGVhbgorZnJvbSBzdGF0ZSBpbXBv
cnQgU3RhdGUKKworZGVmIHNldHVwX3BhdGhzKHN5bmNfcGF0aCk6CisgICAgc3lzLnBhdGguaW5z
ZXJ0KDAsIG9zLnBhdGguYWJzcGF0aChzeW5jX3BhdGgpKQorICAgIHRyeToKKyAgICAgICAgZnJv
bSB0b29scyBpbXBvcnQgbG9jYWxwYXRocworICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAg
ICAgZnJvbSB3cHRfdG9vbHMgaW1wb3J0IGxvY2FscGF0aHMKKworY2xhc3MgTG9hZENvbmZpZyhT
dGVwKToKKyAgICAiIiJTdGVwIGZvciBsb2FkaW5nIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgaW5p
IGZpbGUgYW5kIGt3YXJncy4iIiIKKworICAgIHByb3ZpZGVzID0gWyJzeW5jIiwgInBhdGhzIiwg
Im1ldGFkYXRhX3BhdGgiLCAidGVzdHNfcGF0aCJdCisKKyAgICBkZWYgY3JlYXRlKHNlbGYsIHN0
YXRlKToKKyAgICAgICAgc3RhdGUuc3luYyA9IHsicmVtb3RlX3VybCI6IHN0YXRlLmt3YXJnc1si
cmVtb3RlX3VybCJdLAorICAgICAgICAgICAgICAgICAgICAgICJicmFuY2giOiBzdGF0ZS5rd2Fy
Z3NbImJyYW5jaCJdLAorICAgICAgICAgICAgICAgICAgICAgICJwYXRoIjogc3RhdGUua3dhcmdz
WyJzeW5jX3BhdGgiXX0KKworICAgICAgICBzdGF0ZS5wYXRocyA9IHN0YXRlLmt3YXJnc1sidGVz
dF9wYXRocyJdCisgICAgICAgIHN0YXRlLnRlc3RzX3BhdGggPSBzdGF0ZS5wYXRoc1siLyJdWyJ0
ZXN0c19wYXRoIl0KKyAgICAgICAgc3RhdGUubWV0YWRhdGFfcGF0aCA9IHN0YXRlLnBhdGhzWyIv
Il1bIm1ldGFkYXRhX3BhdGgiXQorCisgICAgICAgIGFzc2VydCBvcy5wYXRoLmlzYWJzKHN0YXRl
LnRlc3RzX3BhdGgpCisKKworY2xhc3MgTG9hZFRyZWVzKFN0ZXApOgorICAgICIiIlN0ZXAgZm9y
IGNyZWF0aW5nIGEgVHJlZSBmb3IgdGhlIGxvY2FsIGNvcHkgYW5kIGEgR2l0VHJlZSBmb3IgdGhl
CisgICAgdXBzdHJlYW0gc3luYy4iIiIKKworICAgIHByb3ZpZGVzID0gWyJsb2NhbF90cmVlIiwg
InN5bmNfdHJlZSJdCisKKyAgICBkZWYgY3JlYXRlKHNlbGYsIHN0YXRlKToKKyAgICAgICAgaWYg
b3MucGF0aC5leGlzdHMoc3RhdGUuc3luY1sicGF0aCJdKToKKyAgICAgICAgICAgIHN5bmNfdHJl
ZSA9IEdpdFRyZWUocm9vdD1zdGF0ZS5zeW5jWyJwYXRoIl0pCisgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICBzeW5jX3RyZWUgPSBOb25lCisKKyAgICAgICAgaWYgR2l0VHJlZS5pc190eXBlKCk6
CisgICAgICAgICAgICBsb2NhbF90cmVlID0gR2l0VHJlZSgpCisgICAgICAgIGVsaWYgSGdUcmVl
LmlzX3R5cGUoKToKKyAgICAgICAgICAgIGxvY2FsX3RyZWUgPSBIZ1RyZWUoKQorICAgICAgICBl
bHNlOgorICAgICAgICAgICAgbG9jYWxfdHJlZSA9IE5vVkNTVHJlZSgpCisKKyAgICAgICAgc3Rh
dGUudXBkYXRlKHsibG9jYWxfdHJlZSI6IGxvY2FsX3RyZWUsCisgICAgICAgICAgICAgICAgICAg
ICAgInN5bmNfdHJlZSI6IHN5bmNfdHJlZX0pCisKKworY2xhc3MgU3luY0Zyb21VcHN0cmVhbShT
dGVwKToKKyAgICAiIiJTdGVwIHRoYXQgc3luY2hyb25pc2VzIGEgbG9jYWwgY29weSBvZiB0aGUg
Y29kZSB3aXRoIHVwc3RyZWFtLiIiIgorCisgICAgZGVmIGNyZWF0ZShzZWxmLCBzdGF0ZSk6Cisg
ICAgICAgIGlmIG5vdCBzdGF0ZS5rd2FyZ3NbInN5bmMiXToKKyAgICAgICAgICAgIHJldHVybgor
CisgICAgICAgIGlmIG5vdCBzdGF0ZS5zeW5jX3RyZWU6CisgICAgICAgICAgICBvcy5ta2Rpcihz
dGF0ZS5zeW5jWyJwYXRoIl0pCisgICAgICAgICAgICBzdGF0ZS5zeW5jX3RyZWUgPSBHaXRUcmVl
KHJvb3Q9c3RhdGUuc3luY1sicGF0aCJdKQorCisgICAgICAgIGt3YXJncyA9IHN0YXRlLmt3YXJn
cworICAgICAgICB3aXRoIHN0YXRlLnB1c2goWyJzeW5jIiwgInBhdGhzIiwgIm1ldGFkYXRhX3Bh
dGgiLCAidGVzdHNfcGF0aCIsICJsb2NhbF90cmVlIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAic3luY190cmVlIl0pOgorICAgICAgICAgICAgc3RhdGUudGFyZ2V0X3JldiA9IGt3YXJnc1si
cmV2Il0KKyAgICAgICAgICAgIHN0YXRlLnBhdGNoID0ga3dhcmdzWyJwYXRjaCJdCisgICAgICAg
ICAgICBzdGF0ZS5zdWl0ZV9uYW1lID0ga3dhcmdzWyJzdWl0ZV9uYW1lIl0KKyAgICAgICAgICAg
IHN0YXRlLnBhdGhfZXhjbHVkZXMgPSBrd2FyZ3NbImV4Y2x1ZGUiXQorICAgICAgICAgICAgc3Rh
dGUucGF0aF9pbmNsdWRlcyA9IGt3YXJnc1siaW5jbHVkZSJdCisgICAgICAgICAgICBydW5uZXIg
PSBTeW5jRnJvbVVwc3RyZWFtUnVubmVyKHNlbGYubG9nZ2VyLCBzdGF0ZSkKKyAgICAgICAgICAg
IHJ1bm5lci5ydW4oKQorCisKK2NsYXNzIFVwZGF0ZU1ldGFkYXRhKFN0ZXApOgorICAgICIiIlVw
ZGF0ZSB0aGUgZXhwZWN0YXRpb24gbWV0YWRhdGEgZnJvbSBhIHNldCBvZiBydW4gbG9ncyIiIgor
CisgICAgZGVmIGNyZWF0ZShzZWxmLCBzdGF0ZSk6CisgICAgICAgIGlmIG5vdCBzdGF0ZS5rd2Fy
Z3NbInJ1bl9sb2ciXToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGt3YXJncyA9IHN0
YXRlLmt3YXJncworICAgICAgICB3aXRoIHN0YXRlLnB1c2goWyJsb2NhbF90cmVlIiwgInN5bmNf
dHJlZSIsICJwYXRocyIsICJzZXJ2ZV9yb290Il0pOgorICAgICAgICAgICAgc3RhdGUucnVuX2xv
ZyA9IGt3YXJnc1sicnVuX2xvZyJdCisgICAgICAgICAgICBzdGF0ZS5pZ25vcmVfZXhpc3Rpbmcg
PSBrd2FyZ3NbImlnbm9yZV9leGlzdGluZyJdCisgICAgICAgICAgICBzdGF0ZS5wYXRjaCA9IGt3
YXJnc1sicGF0Y2giXQorICAgICAgICAgICAgc3RhdGUuc3VpdGVfbmFtZSA9IGt3YXJnc1sic3Vp
dGVfbmFtZSJdCisgICAgICAgICAgICBzdGF0ZS5wcm9kdWN0ID0ga3dhcmdzWyJwcm9kdWN0Il0K
KyAgICAgICAgICAgIHN0YXRlLmNvbmZpZyA9IGt3YXJnc1siY29uZmlnIl0KKyAgICAgICAgICAg
IHJ1bm5lciA9IE1ldGFkYXRhVXBkYXRlUnVubmVyKHNlbGYubG9nZ2VyLCBzdGF0ZSkKKyAgICAg
ICAgICAgIHJ1bm5lci5ydW4oKQorCisKK2NsYXNzIFVwZGF0ZVJ1bm5lcihTdGVwUnVubmVyKToK
KyAgICAiIiJSdW5uZXIgZm9yIGRvaW5nIGFuIG92ZXJhbGwgdXBkYXRlLiIiIgorICAgIHN0ZXBz
ID0gW0xvYWRDb25maWcsCisgICAgICAgICAgICAgTG9hZFRyZWVzLAorICAgICAgICAgICAgIFN5
bmNGcm9tVXBzdHJlYW0sCisgICAgICAgICAgICAgVXBkYXRlTWV0YWRhdGFdCisKKworY2xhc3Mg
V1BUVXBkYXRlKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvZ2dlciwgcnVubmVy
X2Nscz1VcGRhdGVSdW5uZXIsICoqa3dhcmdzKToKKyAgICAgICAgIiIiT2JqZWN0IHRoYXQgY29u
dHJvbHMgdGhlIHJ1bm5pbmcgb2YgYSB3aG9sZSB3cHR1cGRhdGUuCisKKyAgICAgICAgOnBhcmFt
IHJ1bm5lcl9jbHM6IFJ1bm5lciBzdWJjbGFzcyBob2xkaW5nIHRoZSBvdmVyYWxsIGxpc3Qgb2YK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXBzIHRvIHJ1bi4KKyAgICAgICAgOnBhcmFt
IGt3YXJnczogQ29tbWFuZCBsaW5lIGFyZ3VtZW50cworICAgICAgICAiIiIKKyAgICAgICAgc2Vs
Zi5ydW5uZXJfY2xzID0gcnVubmVyX2NscworICAgICAgICBzZWxmLnNlcnZlX3Jvb3QgPSBrd2Fy
Z3NbInRlc3RfcGF0aHMiXVsiLyJdWyJ0ZXN0c19wYXRoIl0KKworICAgICAgICBpZiBub3Qga3dh
cmdzWyJzeW5jIl06CisgICAgICAgICAgICBzZXR1cF9wYXRocyhzZWxmLnNlcnZlX3Jvb3QpCisg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhrd2FyZ3NbInN5bmNf
cGF0aCJdKToKKyAgICAgICAgICAgICAgICAjIElmIHRoZSBzeW5jIHBhdGggZG9lc24ndCBleGlz
dCB3ZSBkZWZlciB0aGlzIHVudGlsIGl0IGRvZXMKKyAgICAgICAgICAgICAgICBzZXR1cF9wYXRo
cyhrd2FyZ3NbInN5bmNfcGF0aCJdKQorCisgICAgICAgIHNlbGYuc3RhdGUgPSBTdGF0ZShsb2dn
ZXIpCisgICAgICAgIHNlbGYua3dhcmdzID0ga3dhcmdzCisgICAgICAgIHNlbGYubG9nZ2VyID0g
bG9nZ2VyCisKKyAgICBkZWYgcnVuKHNlbGYsICoqa3dhcmdzKToKKyAgICAgICAgaWYgc2VsZi5r
d2FyZ3NbImFib3J0Il06CisgICAgICAgICAgICBzZWxmLmFib3J0KCkKKyAgICAgICAgICAgIHJl
dHVybiBleGl0X2NsZWFuCisKKyAgICAgICAgaWYgbm90IHNlbGYua3dhcmdzWyJjb250aW51ZSJd
IGFuZCBub3Qgc2VsZi5zdGF0ZS5pc19lbXB0eSgpOgorICAgICAgICAgICAgc2VsZi5sb2dnZXIu
ZXJyb3IoIkZvdW5kIGV4aXN0aW5nIHN0YXRlLiBSdW4gd2l0aCAtLWNvbnRpbnVlIHRvIHJlc3Vt
ZSBvciAtLWFib3J0IHRvIGNsZWFyIHN0YXRlIikKKyAgICAgICAgICAgIHJldHVybiBleGl0X3Vu
Y2xlYW4KKworICAgICAgICBpZiBzZWxmLmt3YXJnc1siY29udGludWUiXToKKyAgICAgICAgICAg
IGlmIHNlbGYuc3RhdGUuaXNfZW1wdHkoKToKKyAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5l
cnJvcigiTm8gc3luYyBpbiBwcm9ncmVzcz8iKQorICAgICAgICAgICAgICAgIHJldHVybiBleGl0
X2NsZWFuCisKKyAgICAgICAgICAgIHNlbGYua3dhcmdzID0gc2VsZi5zdGF0ZS5rd2FyZ3MKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc3RhdGUua3dhcmdzID0gc2VsZi5rd2FyZ3MK
KworICAgICAgICBzZWxmLnN0YXRlLnNlcnZlX3Jvb3QgPSBzZWxmLnNlcnZlX3Jvb3QKKworICAg
ICAgICB1cGRhdGVfcnVubmVyID0gc2VsZi5ydW5uZXJfY2xzKHNlbGYubG9nZ2VyLCBzZWxmLnN0
YXRlKQorICAgICAgICBydiA9IHVwZGF0ZV9ydW5uZXIucnVuKCkKKyAgICAgICAgaWYgcnYgaW4g
KGV4aXRfY2xlYW4sIE5vbmUpOgorICAgICAgICAgICAgc2VsZi5zdGF0ZS5jbGVhcigpCisKKyAg
ICAgICAgcmV0dXJuIHJ2CisKKyAgICBkZWYgYWJvcnQoc2VsZik6CisgICAgICAgIHNlbGYuc3Rh
dGUuY2xlYXIoKQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xz
L3dwdHJ1bm5lci93cHRydW5uZXIvdmNzLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNj
L3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvdmNzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi4xNmQ1M2FmYzhiZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZl
clRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3Zjcy5weQpAQCAt
MCwwICsxLDQ5IEBACitpbXBvcnQgc3VicHJvY2VzcworZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHBh
cnRpYWwKKworZnJvbSBtb3psb2cgaW1wb3J0IGdldF9kZWZhdWx0X2xvZ2dlcgorCitsb2dnZXIg
PSBOb25lCisKK2RlZiB2Y3MoYmluX25hbWUpOgorICAgIGRlZiBpbm5lcihjb21tYW5kLCAqYXJn
cywgKiprd2FyZ3MpOgorICAgICAgICBnbG9iYWwgbG9nZ2VyCisKKyAgICAgICAgaWYgbG9nZ2Vy
IGlzIE5vbmU6CisgICAgICAgICAgICBsb2dnZXIgPSBnZXRfZGVmYXVsdF9sb2dnZXIoInZjcyIp
CisKKyAgICAgICAgcmVwbyA9IGt3YXJncy5wb3AoInJlcG8iLCBOb25lKQorICAgICAgICBsb2df
ZXJyb3IgPSBrd2FyZ3MucG9wKCJsb2dfZXJyb3IiLCBUcnVlKQorICAgICAgICBpZiBrd2FyZ3M6
CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IsIGt3YXJncworCisgICAgICAgIGFyZ3MgPSBs
aXN0KGFyZ3MpCisKKyAgICAgICAgcHJvY19rd2FyZ3MgPSB7fQorICAgICAgICBpZiByZXBvIGlz
IG5vdCBOb25lOgorICAgICAgICAgICAgcHJvY19rd2FyZ3NbImN3ZCJdID0gcmVwbworCisgICAg
ICAgIGNvbW1hbmRfbGluZSA9IFtiaW5fbmFtZSwgY29tbWFuZF0gKyBhcmdzCisgICAgICAgIGxv
Z2dlci5kZWJ1ZygiICIuam9pbihjb21tYW5kX2xpbmUpKQorICAgICAgICB0cnk6CisgICAgICAg
ICAgICByZXR1cm4gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY29tbWFuZF9saW5lLCBzdGRlcnI9
c3VicHJvY2Vzcy5TVERPVVQsICoqcHJvY19rd2FyZ3MpCisgICAgICAgIGV4Y2VwdCBzdWJwcm9j
ZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgbG9nX2Vycm9yOgor
ICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihlLm91dHB1dCkKKyAgICAgICAgICAgIHJhaXNl
CisgICAgcmV0dXJuIGlubmVyCisKK2dpdCA9IHZjcygiZ2l0IikKK2hnID0gdmNzKCJoZyIpCisK
KworZGVmIGJpbmRfdG9fcmVwbyh2Y3NfZnVuYywgcmVwbyk6CisgICAgcmV0dXJuIHBhcnRpYWwo
dmNzX2Z1bmMsIHJlcG89cmVwbykKKworCitkZWYgaXNfZ2l0X3Jvb3QocGF0aCk6CisgICAgdHJ5
OgorICAgICAgICBydiA9IGdpdCgicmV2LXBhcnNlIiwgIi0tc2hvdy1jZHVwIiwgcmVwbz1wYXRo
KQorICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcjoKKyAgICAgICAgcmV0
dXJuIEZhbHNlCisgICAgcmV0dXJuIHJ2ID09ICJcbiIKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRl
c3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3dlYmRyaXZlcl9zZXJ2
ZXIucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1
bm5lci93ZWJkcml2ZXJfc2VydmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi5mNzg1OTNlNGU1OQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2lt
cG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3dlYmRyaXZlcl9zZXJ2ZXIucHkK
QEAgLTAsMCArMSwyNDQgQEAKK2ltcG9ydCBhYmMKK2ltcG9ydCBlcnJubworaW1wb3J0IG9zCitp
bXBvcnQgcGxhdGZvcm0KK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCB0
aW1lCitpbXBvcnQgdHJhY2ViYWNrCitpbXBvcnQgdXJscGFyc2UKKworaW1wb3J0IG1venByb2Nl
c3MKKworCitfX2FsbF9fID0gWyJTZWxlbml1bVNlcnZlciIsICJDaHJvbWVEcml2ZXJTZXJ2ZXIi
LAorICAgICAgICAgICAiR2Vja29Ecml2ZXJTZXJ2ZXIiLCAiSW50ZXJuZXRFeHBsb3JlckRyaXZl
clNlcnZlciIsCisgICAgICAgICAgICJTZXJ2b0RyaXZlclNlcnZlciIsICJXZWJEcml2ZXJTZXJ2
ZXIiXQorCisKK2NsYXNzIFdlYkRyaXZlclNlcnZlcihvYmplY3QpOgorICAgIF9fbWV0YWNsYXNz
X18gPSBhYmMuQUJDTWV0YQorCisgICAgZGVmYXVsdF9iYXNlX3BhdGggPSAiLyIKKyAgICBfdXNl
ZF9wb3J0cyA9IHNldCgpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9nZ2VyLCBiaW5hcnks
IGhvc3Q9IjEyNy4wLjAuMSIsIHBvcnQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgYmFzZV9wYXRo
PSIiLCBlbnY9Tm9uZSwgYXJncz1Ob25lKToKKyAgICAgICAgaWYgYmluYXJ5IGlzIE5vbmU6Cisg
ICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJXZWJEcml2ZXIgc2VydmVyIGJpbmFyeSBtdXN0
IGJlIGdpdmVuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRvIC0td2ViZHJpdmVy
LWJpbmFyeSBhcmd1bWVudCIpCisKKyAgICAgICAgc2VsZi5sb2dnZXIgPSBsb2dnZXIKKyAgICAg
ICAgc2VsZi5iaW5hcnkgPSBiaW5hcnkKKyAgICAgICAgc2VsZi5ob3N0ID0gaG9zdAorICAgICAg
ICBpZiBiYXNlX3BhdGggPT0gIiI6CisgICAgICAgICAgICBzZWxmLmJhc2VfcGF0aCA9IHNlbGYu
ZGVmYXVsdF9iYXNlX3BhdGgKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYmFzZV9w
YXRoID0gYmFzZV9wYXRoCisgICAgICAgIHNlbGYuZW52ID0gb3MuZW52aXJvbi5jb3B5KCkgaWYg
ZW52IGlzIE5vbmUgZWxzZSBlbnYKKworICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAorICAgICAg
ICBzZWxmLl9jbWQgPSBOb25lCisgICAgICAgIHNlbGYuX2FyZ3MgPSBhcmdzIGlmIGFyZ3MgaXMg
bm90IE5vbmUgZWxzZSBbXQorICAgICAgICBzZWxmLl9wcm9jID0gTm9uZQorCisgICAgQGFiYy5h
YnN0cmFjdG1ldGhvZAorICAgIGRlZiBtYWtlX2NvbW1hbmQoc2VsZik6CisgICAgICAgICIiIlJl
dHVybnMgdGhlIGZ1bGwgY29tbWFuZCBmb3Igc3RhcnRpbmcgdGhlIHNlcnZlciBwcm9jZXNzIGFz
IGEgbGlzdC4iIiIKKworICAgIGRlZiBzdGFydChzZWxmLCBibG9jaz1GYWxzZSk6CisgICAgICAg
IHRyeToKKyAgICAgICAgICAgIHNlbGYuX3J1bihibG9jaykKKyAgICAgICAgZXhjZXB0IEtleWJv
YXJkSW50ZXJydXB0OgorICAgICAgICAgICAgc2VsZi5zdG9wKCkKKworICAgIGRlZiBfcnVuKHNl
bGYsIGJsb2NrKToKKyAgICAgICAgc2VsZi5fY21kID0gc2VsZi5tYWtlX2NvbW1hbmQoKQorICAg
ICAgICBzZWxmLl9wcm9jID0gbW96cHJvY2Vzcy5Qcm9jZXNzSGFuZGxlcigKKyAgICAgICAgICAg
IHNlbGYuX2NtZCwKKyAgICAgICAgICAgIHByb2Nlc3NPdXRwdXRMaW5lPXNlbGYub25fb3V0cHV0
LAorICAgICAgICAgICAgZW52PXNlbGYuZW52LAorICAgICAgICAgICAgc3RvcmVPdXRwdXQ9RmFs
c2UpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fcHJvYy5ydW4oKQorICAgICAg
ICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5F
Tk9FTlQ6CisgICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigKKyAgICAgICAgICAgICAgICAg
ICAgIldlYkRyaXZlciBIVFRQIHNlcnZlciBleGVjdXRhYmxlIG5vdCBmb3VuZDogJXMiICUgc2Vs
Zi5iaW5hcnkpCisgICAgICAgICAgICByYWlzZQorCisgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVn
KAorICAgICAgICAgICAgIldhaXRpbmcgZm9yIHNlcnZlciB0byBiZWNvbWUgYWNjZXNzaWJsZTog
JXMiICUgc2VsZi51cmwpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdhaXRfZm9yX3NlcnZp
Y2UoKHNlbGYuaG9zdCwgc2VsZi5wb3J0KSkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAg
c2VsZi5sb2dnZXIuZXJyb3IoCisgICAgICAgICAgICAgICAgIldlYkRyaXZlciBIVFRQIHNlcnZl
ciB3YXMgbm90IGFjY2Vzc2libGUgIgorICAgICAgICAgICAgICAgICJ3aXRoaW4gdGhlIHRpbWVv
dXQ6XG4lcyIgJSB0cmFjZWJhY2suZm9ybWF0X2V4YygpKQorICAgICAgICAgICAgcmFpc2UKKwor
ICAgICAgICBpZiBibG9jazoKKyAgICAgICAgICAgIHNlbGYuX3Byb2Mud2FpdCgpCisKKyAgICBk
ZWYgc3RvcChzZWxmLCBmb3JjZT1GYWxzZSk6CisgICAgICAgIGlmIHNlbGYuaXNfYWxpdmU6Cisg
ICAgICAgICAgICByZXR1cm4gc2VsZi5fcHJvYy5raWxsKCkKKyAgICAgICAgcmV0dXJuIG5vdCBz
ZWxmLmlzX2FsaXZlCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaXNfYWxpdmUoc2VsZik6Cisg
ICAgICAgIHJldHVybiBoYXNhdHRyKHNlbGYuX3Byb2MsICJwcm9jIikgYW5kIHNlbGYuX3Byb2Mu
cG9sbCgpIGlzIE5vbmUKKworICAgIGRlZiBvbl9vdXRwdXQoc2VsZiwgbGluZSk6CisgICAgICAg
IHNlbGYubG9nZ2VyLnByb2Nlc3Nfb3V0cHV0KHNlbGYucGlkLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsaW5lLmRlY29kZSgidXRmOCIsICJyZXBsYWNlIiksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9IiAiLmpvaW4oc2VsZi5fY21kKSkK
KworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBwaWQoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX3By
b2MgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fcHJvYy5waWQKKworICAg
IEBwcm9wZXJ0eQorICAgIGRlZiB1cmwoc2VsZik6CisgICAgICAgIHJldHVybiAiaHR0cDovLyVz
OiVpJXMiICUgKHNlbGYuaG9zdCwgc2VsZi5wb3J0LCBzZWxmLmJhc2VfcGF0aCkKKworICAgIEBw
cm9wZXJ0eQorICAgIGRlZiBwb3J0KHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9wb3J0IGlzIE5v
bmU6CisgICAgICAgICAgICBzZWxmLl9wb3J0ID0gc2VsZi5fZmluZF9uZXh0X2ZyZWVfcG9ydCgp
CisgICAgICAgIHJldHVybiBzZWxmLl9wb3J0CisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVm
IF9maW5kX25leHRfZnJlZV9wb3J0KCk6CisgICAgICAgIHBvcnQgPSBnZXRfZnJlZV9wb3J0KDQ0
NDQsIGV4Y2x1ZGU9V2ViRHJpdmVyU2VydmVyLl91c2VkX3BvcnRzKQorICAgICAgICBXZWJEcml2
ZXJTZXJ2ZXIuX3VzZWRfcG9ydHMuYWRkKHBvcnQpCisgICAgICAgIHJldHVybiBwb3J0CisKKwor
Y2xhc3MgU2VsZW5pdW1TZXJ2ZXIoV2ViRHJpdmVyU2VydmVyKToKKyAgICBkZWZhdWx0X2Jhc2Vf
cGF0aCA9ICIvd2QvaHViIgorCisgICAgZGVmIG1ha2VfY29tbWFuZChzZWxmKToKKyAgICAgICAg
cmV0dXJuIFsiamF2YSIsICItamFyIiwgc2VsZi5iaW5hcnksICItcG9ydCIsIHN0cihzZWxmLnBv
cnQpXSArIHNlbGYuX2FyZ3MKKworCitjbGFzcyBDaHJvbWVEcml2ZXJTZXJ2ZXIoV2ViRHJpdmVy
U2VydmVyKToKKyAgICBkZWZhdWx0X2Jhc2VfcGF0aCA9ICIvIgorCisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIGxvZ2dlciwgYmluYXJ5PSJjaHJvbWVkcml2ZXIiLCBwb3J0PU5vbmUsCisgICAgICAg
ICAgICAgICAgIGJhc2VfcGF0aD0iIiwgYXJncz1Ob25lKToKKyAgICAgICAgV2ViRHJpdmVyU2Vy
dmVyLl9faW5pdF9fKAorICAgICAgICAgICAgc2VsZiwgbG9nZ2VyLCBiaW5hcnksIHBvcnQ9cG9y
dCwgYmFzZV9wYXRoPWJhc2VfcGF0aCwgYXJncz1hcmdzKQorCisgICAgZGVmIG1ha2VfY29tbWFu
ZChzZWxmKToKKyAgICAgICAgcmV0dXJuIFtzZWxmLmJpbmFyeSwKKyAgICAgICAgICAgICAgICBj
bWRfYXJnKCJwb3J0Iiwgc3RyKHNlbGYucG9ydCkpLAorICAgICAgICAgICAgICAgIGNtZF9hcmco
InVybC1iYXNlIiwgc2VsZi5iYXNlX3BhdGgpIGlmIHNlbGYuYmFzZV9wYXRoIGVsc2UgIiJdICsg
c2VsZi5fYXJncworCisKK2NsYXNzIEVkZ2VEcml2ZXJTZXJ2ZXIoV2ViRHJpdmVyU2VydmVyKToK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9nZ2VyLCBiaW5hcnk9Ik1pY3Jvc29mdFdlYkRyaXZl
ci5leGUiLCBwb3J0PU5vbmUsCisgICAgICAgICAgICAgICAgIGJhc2VfcGF0aD0iIiwgaG9zdD0i
bG9jYWxob3N0IiwgYXJncz1Ob25lKToKKyAgICAgICAgV2ViRHJpdmVyU2VydmVyLl9faW5pdF9f
KAorICAgICAgICAgICAgc2VsZiwgbG9nZ2VyLCBiaW5hcnksIGhvc3Q9aG9zdCwgcG9ydD1wb3J0
LCBhcmdzPWFyZ3MpCisKKyAgICBkZWYgbWFrZV9jb21tYW5kKHNlbGYpOgorICAgICAgICByZXR1
cm4gW3NlbGYuYmluYXJ5LAorICAgICAgICAgICAgICAgICItLXBvcnQ9JXMiICUgc3RyKHNlbGYu
cG9ydCldICsgc2VsZi5fYXJncworCisKK2NsYXNzIEludGVybmV0RXhwbG9yZXJEcml2ZXJTZXJ2
ZXIoV2ViRHJpdmVyU2VydmVyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9nZ2VyLCBiaW5h
cnk9IklFRHJpdmVyU2VydmVyLmV4ZSIsIHBvcnQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgYmFz
ZV9wYXRoPSIiLCBob3N0PSJsb2NhbGhvc3QiLCBhcmdzPU5vbmUpOgorICAgICAgICBXZWJEcml2
ZXJTZXJ2ZXIuX19pbml0X18oCisgICAgICAgICAgICBzZWxmLCBsb2dnZXIsIGJpbmFyeSwgaG9z
dD1ob3N0LCBwb3J0PXBvcnQsIGFyZ3M9YXJncykKKworICAgIGRlZiBtYWtlX2NvbW1hbmQoc2Vs
Zik6CisgICAgICAgIHJldHVybiBbc2VsZi5iaW5hcnksCisgICAgICAgICAgICAgICAgIi0tcG9y
dD0lcyIgJSBzdHIoc2VsZi5wb3J0KV0gKyBzZWxmLl9hcmdzCisKKworY2xhc3MgR2Vja29Ecml2
ZXJTZXJ2ZXIoV2ViRHJpdmVyU2VydmVyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9nZ2Vy
LCBtYXJpb25ldHRlX3BvcnQ9MjgyOCwgYmluYXJ5PSJnZWNrb2RyaXZlciIsCisgICAgICAgICAg
ICAgICAgIGhvc3Q9IjEyNy4wLjAuMSIsIHBvcnQ9Tm9uZSwgYXJncz1Ob25lKToKKyAgICAgICAg
ZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAgZW52WyJSVVNUX0JBQ0tUUkFDRSJdID0g
IjEiCisgICAgICAgIFdlYkRyaXZlclNlcnZlci5fX2luaXRfXyhzZWxmLCBsb2dnZXIsIGJpbmFy
eSwgaG9zdD1ob3N0LCBwb3J0PXBvcnQsIGVudj1lbnYsIGFyZ3M9YXJncykKKyAgICAgICAgc2Vs
Zi5tYXJpb25ldHRlX3BvcnQgPSBtYXJpb25ldHRlX3BvcnQKKworICAgIGRlZiBtYWtlX2NvbW1h
bmQoc2VsZik6CisgICAgICAgIHJldHVybiBbc2VsZi5iaW5hcnksCisgICAgICAgICAgICAgICAg
Ii0tbWFyaW9uZXR0ZS1wb3J0Iiwgc3RyKHNlbGYubWFyaW9uZXR0ZV9wb3J0KSwKKyAgICAgICAg
ICAgICAgICAiLS1ob3N0Iiwgc2VsZi5ob3N0LAorICAgICAgICAgICAgICAgICItLXBvcnQiLCBz
dHIoc2VsZi5wb3J0KV0gKyBzZWxmLl9hcmdzCisKKworY2xhc3MgU2Vydm9Ecml2ZXJTZXJ2ZXIo
V2ViRHJpdmVyU2VydmVyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9nZ2VyLCBiaW5hcnk9
InNlcnZvIiwgYmluYXJ5X2FyZ3M9Tm9uZSwgaG9zdD0iMTI3LjAuMC4xIiwgcG9ydD1Ob25lKToK
KyAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAgZW52WyJSVVNUX0JBQ0tU
UkFDRSJdID0gIjEiCisgICAgICAgIFdlYkRyaXZlclNlcnZlci5fX2luaXRfXyhzZWxmLCBsb2dn
ZXIsIGJpbmFyeSwgaG9zdD1ob3N0LCBwb3J0PXBvcnQsIGVudj1lbnYpCisgICAgICAgIHNlbGYu
YmluYXJ5X2FyZ3MgPSBiaW5hcnlfYXJncworCisgICAgZGVmIG1ha2VfY29tbWFuZChzZWxmKToK
KyAgICAgICAgY29tbWFuZCA9IFtzZWxmLmJpbmFyeSwKKyAgICAgICAgICAgICAgICAgICAiLS13
ZWJkcml2ZXIiLCBzdHIoc2VsZi5wb3J0KSwKKyAgICAgICAgICAgICAgICAgICAiLS1oYXJkLWZh
aWwiLAorICAgICAgICAgICAgICAgICAgICItLWhlYWRsZXNzIl0gKyBzZWxmLl9hcmdzCisgICAg
ICAgIGlmIHNlbGYuYmluYXJ5X2FyZ3M6CisgICAgICAgICAgICBjb21tYW5kICs9IHNlbGYuYmlu
YXJ5X2FyZ3MKKyAgICAgICAgcmV0dXJuIGNvbW1hbmQKKworCitkZWYgY21kX2FyZyhuYW1lLCB2
YWx1ZT1Ob25lKToKKyAgICBwcmVmaXggPSAiLSIgaWYgcGxhdGZvcm0uc3lzdGVtKCkgPT0gIldp
bmRvd3MiIGVsc2UgIi0tIgorICAgIHJ2ID0gcHJlZml4ICsgbmFtZQorICAgIGlmIHZhbHVlIGlz
IG5vdCBOb25lOgorICAgICAgICBydiArPSAiPSIgKyB2YWx1ZQorICAgIHJldHVybiBydgorCisK
K2RlZiBnZXRfZnJlZV9wb3J0KHN0YXJ0X3BvcnQsIGV4Y2x1ZGU9Tm9uZSk6CisgICAgIiIiR2V0
IHRoZSBmaXJzdCBwb3J0IG51bWJlciBhZnRlciBzdGFydF9wb3J0IChpbmNsdXNpdmUpIHRoYXQg
aXMKKyAgICBub3QgY3VycmVudGx5IGJvdW5kLgorCisgICAgOnBhcmFtIHN0YXJ0X3BvcnQ6IElu
dGVnZXIgcG9ydCBudW1iZXIgYXQgd2hpY2ggdG8gc3RhcnQgdGVzdGluZy4KKyAgICA6cGFyYW0g
ZXhjbHVkZTogU2V0IG9mIHBvcnQgbnVtYmVycyB0byBza2lwIiIiCisgICAgcG9ydCA9IHN0YXJ0
X3BvcnQKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICBpZiBleGNsdWRlIGFuZCBwb3J0IGluIGV4
Y2x1ZGU6CisgICAgICAgICAgICBwb3J0ICs9IDEKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAg
ICAgIHMgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcy5iaW5k
KCgiMTI3LjAuMC4xIiwgcG9ydCkpCisgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAg
ICAgICAgICBwb3J0ICs9IDEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBwb3J0
CisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzLmNsb3NlKCkKKworCitkZWYgd2FpdF9m
b3Jfc2VydmljZShhZGRyLCB0aW1lb3V0PTE1KToKKyAgICAiIiJXYWl0cyB1bnRpbCBuZXR3b3Jr
IHNlcnZpY2UgZ2l2ZW4gYXMgYSB0dXBsZSBvZiAoaG9zdCwgcG9ydCkgYmVjb21lcworICAgIGF2
YWlsYWJsZSBvciB0aGUgYHRpbWVvdXRgIGR1cmF0aW9uIGlzIHJlYWNoZWQsIGF0IHdoaWNoIHBv
aW50CisgICAgYGBzb2NrZXQuZXJyb3JgYCBpcyByYWlzZWQuIiIiCisgICAgZW5kID0gdGltZS50
aW1lKCkgKyB0aW1lb3V0CisgICAgd2hpbGUgZW5kID4gdGltZS50aW1lKCk6CisgICAgICAgIHNv
ID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNvLmNvbm5lY3Qo
YWRkcikKKyAgICAgICAgZXhjZXB0IHNvY2tldC50aW1lb3V0OgorICAgICAgICAgICAgcGFzcwor
ICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGU6CisgICAgICAgICAgICBpZiBlWzBdICE9
IGVycm5vLkVDT05OUkVGVVNFRDoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICBlbHNl
OgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAg
IHNvLmNsb3NlKCkKKyAgICAgICAgdGltZS5zbGVlcCgwLjUpCisgICAgcmFpc2Ugc29ja2V0LmVy
cm9yKCJTZXJ2aWNlIGlzIHVuYXZhaWxhYmxlOiAlczolaSIgJSBhZGRyKQpkaWZmIC0tZ2l0IGEv
V2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvd3B0
Y29tbWFuZGxpbmUucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVu
bmVyL3dwdHJ1bm5lci93cHRjb21tYW5kbGluZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uMDk2NGU2Y2YyZDMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJU
ZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci93cHRjb21tYW5kbGlu
ZS5weQpAQCAtMCwwICsxLDUwMSBAQAoraW1wb3J0IGFyZ3BhcnNlCitpbXBvcnQgYXN0CitpbXBv
cnQgb3MKK2ltcG9ydCBzeXMKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IE9yZGVyZWREaWN0Citm
cm9tIGRpc3R1dGlscy5zcGF3biBpbXBvcnQgZmluZF9leGVjdXRhYmxlCisKK2ltcG9ydCBjb25m
aWcKK2ltcG9ydCB3cHR0ZXN0CitpbXBvcnQgZm9ybWF0dGVycworCisKK2RlZiBhYnNfcGF0aChw
YXRoKToKKyAgICByZXR1cm4gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZXhwYW5kdXNlcihwYXRo
KSkKKworCitkZWYgdXJsX29yX3BhdGgocGF0aCk6CisgICAgaW1wb3J0IHVybHBhcnNlCisKKyAg
ICBwYXJzZWQgPSB1cmxwYXJzZS51cmxwYXJzZShwYXRoKQorICAgIGlmIGxlbihwYXJzZWQuc2No
ZW1lKSA+IDI6CisgICAgICAgIHJldHVybiBwYXRoCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJu
IGFic19wYXRoKHBhdGgpCisKKworZGVmIHJlcXVpcmVfYXJnKGt3YXJncywgbmFtZSwgdmFsdWVf
ZnVuYz1Ob25lKToKKyAgICBpZiB2YWx1ZV9mdW5jIGlzIE5vbmU6CisgICAgICAgIHZhbHVlX2Z1
bmMgPSBsYW1iZGEgeDogeCBpcyBub3QgTm9uZQorCisgICAgaWYgbm90IG5hbWUgaW4ga3dhcmdz
IG9yIG5vdCB2YWx1ZV9mdW5jKGt3YXJnc1tuYW1lXSk6CisgICAgICAgIHByaW50ID4+IHN5cy5z
dGRlcnIsICJNaXNzaW5nIHJlcXVpcmVkIGFyZ3VtZW50ICVzIiAlIG5hbWUKKyAgICAgICAgc3lz
LmV4aXQoMSkKKworCitkZWYgY3JlYXRlX3BhcnNlcihwcm9kdWN0X2Nob2ljZXM9Tm9uZSk6Cisg
ICAgZnJvbSBtb3psb2cgaW1wb3J0IGNvbW1hbmRsaW5lCisKKyAgICBpbXBvcnQgcHJvZHVjdHMK
KworICAgIGlmIHByb2R1Y3RfY2hvaWNlcyBpcyBOb25lOgorICAgICAgICBjb25maWdfZGF0YSA9
IGNvbmZpZy5sb2FkKCkKKyAgICAgICAgcHJvZHVjdF9jaG9pY2VzID0gcHJvZHVjdHMucHJvZHVj
dHNfZW5hYmxlZChjb25maWdfZGF0YSkKKworICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50
UGFyc2VyKGRlc2NyaXB0aW9uPSIiIlJ1bm5lciBmb3Igd2ViLXBsYXRmb3JtLXRlc3RzIHRlc3Rz
LiIiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2FnZT0iIiIlKHBy
b2cpcyBbT1BUSU9OXS4uLiBbVEVTVF0uLi4KKworVEVTVCBpcyBlaXRoZXIgdGhlIGZ1bGwgcGF0
aCB0byBhIHRlc3QgZmlsZSB0byBydW4sIG9yIHRoZSBVUkwgb2YgYSB0ZXN0IGV4Y2x1ZGluZwor
c2NoZW1lIGhvc3QgYW5kIHBvcnQuIiIiKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi0tbWFu
aWZlc3QtdXBkYXRlIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVmYXVsdD1Ob25lLAorICAgICAg
ICAgICAgICAgICAgICAgICAgaGVscD0iUmVnZW5lcmF0ZSB0aGUgdGVzdCBtYW5pZmVzdC4iKQor
ICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi0tbm8tbWFuaWZlc3QtdXBkYXRlIiwgYWN0aW9uPSJz
dG9yZV9mYWxzZSIsIGRlc3Q9Im1hbmlmZXN0X3VwZGF0ZSIsCisgICAgICAgICAgICAgICAgICAg
ICAgICBoZWxwPSJQcmV2ZW50IHJlZ2VuZXJhdGlvbiBvZiB0aGUgdGVzdCBtYW5pZmVzdC4iKQor
CisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLS10aW1lb3V0LW11bHRpcGxpZXIiLCBhY3Rpb249
InN0b3JlIiwgdHlwZT1mbG9hdCwgZGVmYXVsdD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAg
ICAgaGVscD0iTXVsdGlwbGllciByZWxhdGl2ZSB0byBzdGFuZGFyZCB0ZXN0IHRpbWVvdXQgdG8g
dXNlIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItLXJ1bi1ieS1kaXIiLCB0eXBlPWludCwg
bmFyZ3M9Ij8iLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0i
U3BsaXQgcnVuIGludG8gZ3JvdXBzIGJ5IGRpcmVjdG9yaWVzLiBXaXRoIGEgcGFyYW1ldGVyLCIK
KyAgICAgICAgICAgICAgICAgICAgICAgICJsaW1pdCB0aGUgZGVwdGggb2Ygc3BsaXRzIGUuZy4g
LS1ydW4tYnktZGlyPTEgdG8gc3BsaXQgYnkgdG9wLWxldmVsIgorICAgICAgICAgICAgICAgICAg
ICAgICAgImRpcmVjdG9yeSIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLS1wcm9jZXNzZXMi
LCBhY3Rpb249InN0b3JlIiwgdHlwZT1pbnQsIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGhlbHA9Ik51bWJlciBvZiBzaW11bHRhbmVvdXMgcHJvY2Vzc2VzIHRvIHVzZSIp
CisKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItLW5vLWNhcHR1cmUtc3RkaW8iLCBhY3Rpb249
InN0b3JlX3RydWUiLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVs
cD0iRG9uJ3QgY2FwdHVyZSBzdGRpbyBhbmQgd3JpdGUgdG8gbG9nZ2luZyIpCisKKyAgICBtb2Rl
X2dyb3VwID0gcGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cCgiTW9kZSIpCisgICAgbW9kZV9ncm91
cC5hZGRfYXJndW1lbnQoIi0tbGlzdC10ZXN0LWdyb3VwcyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBoZWxwPSJMaXN0IHRoZSB0b3AgbGV2ZWwgZGlyZWN0b3JpZXMgY29u
dGFpbmluZyB0ZXN0cyB0aGF0IHdpbGwgcnVuLiIpCisgICAgbW9kZV9ncm91cC5hZGRfYXJndW1l
bnQoIi0tbGlzdC1kaXNhYmxlZCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBoZWxwPSJMaXN0IHRoZSB0ZXN0cyB0aGF0IGFyZSBkaXNhYmxlZCBvbiB0aGUgY3VycmVudCBw
bGF0Zm9ybSIpCisgICAgbW9kZV9ncm91cC5hZGRfYXJndW1lbnQoIi0tbGlzdC10ZXN0cyIsIGFj
dGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1G
YWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJMaXN0IGFsbCB0ZXN0cyB0
aGF0IHdpbGwgcnVuIikKKworICAgIHRlc3Rfc2VsZWN0aW9uX2dyb3VwID0gcGFyc2VyLmFkZF9h
cmd1bWVudF9ncm91cCgiVGVzdCBTZWxlY3Rpb24iKQorICAgIHRlc3Rfc2VsZWN0aW9uX2dyb3Vw
LmFkZF9hcmd1bWVudCgiLS10ZXN0LXR5cGVzIiwgYWN0aW9uPSJzdG9yZSIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hcmdzPSIqIiwgZGVmYXVsdD13cHR0ZXN0LmVu
YWJsZWRfdGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNob2lj
ZXM9d3B0dGVzdC5lbmFibGVkX3Rlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBoZWxwPSJUZXN0IHR5cGVzIHRvIHJ1biIpCisgICAgdGVzdF9zZWxlY3Rpb25fZ3Jv
dXAuYWRkX2FyZ3VtZW50KCItLWluY2x1ZGUiLCBhY3Rpb249ImFwcGVuZCIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlVSTCBwcmVmaXggdG8gaW5jbHVkZSIp
CisgICAgdGVzdF9zZWxlY3Rpb25fZ3JvdXAuYWRkX2FyZ3VtZW50KCItLWV4Y2x1ZGUiLCBhY3Rp
b249ImFwcGVuZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9
IlVSTCBwcmVmaXggdG8gZXhjbHVkZSIpCisgICAgdGVzdF9zZWxlY3Rpb25fZ3JvdXAuYWRkX2Fy
Z3VtZW50KCItLWluY2x1ZGUtbWFuaWZlc3QiLCB0eXBlPWFic19wYXRoLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJQYXRoIHRvIG1hbmlmZXN0IGxpc3Rpbmcg
dGVzdHMgdG8gaW5jbHVkZSIpCisgICAgdGVzdF9zZWxlY3Rpb25fZ3JvdXAuYWRkX2FyZ3VtZW50
KCItLXRhZyIsIGFjdGlvbj0iYXBwZW5kIiwgZGVzdD0idGFncyIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkxhYmVscyBhcHBsaWVkIHRvIHRlc3RzIHRvIGlu
Y2x1ZGUgaW4gdGhlIHJ1bi4gTGFiZWxzIHN0YXJ0aW5nIGRpcjogYXJlIGVxdWl2YWxlbnQgdG8g
dG9wLWxldmVsIGRpcmVjdG9yaWVzLiIpCisKKyAgICBkZWJ1Z2dpbmdfZ3JvdXAgPSBwYXJzZXIu
YWRkX2FyZ3VtZW50X2dyb3VwKCJEZWJ1Z2dpbmciKQorICAgIGRlYnVnZ2luZ19ncm91cC5hZGRf
YXJndW1lbnQoJy0tZGVidWdnZXInLCBjb25zdD0iX19kZWZhdWx0X18iLCBuYXJncz0iPyIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJydW4gdW5kZXIgYSBkZWJ1Z2dl
ciwgZS5nLiBnZGIgb3IgdmFsZ3JpbmQiKQorICAgIGRlYnVnZ2luZ19ncm91cC5hZGRfYXJndW1l
bnQoJy0tZGVidWdnZXItYXJncycsIGhlbHA9ImFyZ3VtZW50cyB0byB0aGUgZGVidWdnZXIiKQor
ICAgIGRlYnVnZ2luZ19ncm91cC5hZGRfYXJndW1lbnQoIi0tcmVwZWF0IiwgYWN0aW9uPSJzdG9y
ZSIsIHR5cGU9aW50LCBkZWZhdWx0PTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBoZWxwPSJOdW1iZXIgb2YgdGltZXMgdG8gcnVuIHRoZSB0ZXN0cyIpCisgICAgZGVidWdnaW5n
X2dyb3VwLmFkZF9hcmd1bWVudCgiLS1yZXBlYXQtdW50aWwtdW5leHBlY3RlZCIsIGFjdGlvbj0i
c3RvcmVfdHJ1ZSIsIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGhlbHA9IlJ1biB0ZXN0cyBpbiBhIGxvb3AgdW50aWwgb25lIHJldHVybnMgYW4gdW5leHBl
Y3RlZCByZXN1bHQiKQorICAgIGRlYnVnZ2luZ19ncm91cC5hZGRfYXJndW1lbnQoJy0tcGF1c2Ut
YWZ0ZXItdGVzdCcsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkhhbHQgdGhlIHRlc3QgcnVubmVyIGFmdGVy
IGVhY2ggdGVzdCAodGhpcyBoYXBwZW5zIGJ5IGRlZmF1bHQgaWYgb25seSBhIHNpbmdsZSB0ZXN0
IGlzIHJ1bikiKQorICAgIGRlYnVnZ2luZ19ncm91cC5hZGRfYXJndW1lbnQoJy0tbm8tcGF1c2Ut
YWZ0ZXItdGVzdCcsIGRlc3Q9InBhdXNlX2FmdGVyX3Rlc3QiLCBhY3Rpb249InN0b3JlX2ZhbHNl
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkRvbid0IGhhbHQgdGhl
IHRlc3QgcnVubmVyIGlycmVzcGVjdGl2ZSBvZiB0aGUgbnVtYmVyIG9mIHRlc3RzIHJ1biIpCisK
KyAgICBkZWJ1Z2dpbmdfZ3JvdXAuYWRkX2FyZ3VtZW50KCctLXBhdXNlLW9uLXVuZXhwZWN0ZWQn
LCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aGVscD0iSGFsdCB0aGUgdGVzdCBydW5uZXIgd2hlbiBhbiB1bmV4cGVjdGVkIHJlc3VsdCBpcyBl
bmNvdW50ZXJlZCIpCisgICAgZGVidWdnaW5nX2dyb3VwLmFkZF9hcmd1bWVudCgnLS1uby1yZXN0
YXJ0LW9uLXVuZXhwZWN0ZWQnLCBkZXN0PSJyZXN0YXJ0X29uX3VuZXhwZWN0ZWQiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1UcnVlLCBhY3Rpb249InN0b3JlX2Zh
bHNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkRvbid0IHJlc3Rh
cnQgb24gYW4gdW5leHBlY3RlZCByZXN1bHQiKQorCisgICAgZGVidWdnaW5nX2dyb3VwLmFkZF9h
cmd1bWVudCgiLS1zeW1ib2xzLXBhdGgiLCBhY3Rpb249InN0b3JlIiwgdHlwZT11cmxfb3JfcGF0
aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlBhdGggb3IgdXJsIHRv
IHN5bWJvbHMgZmlsZSB1c2VkIHRvIGFuYWx5c2UgY3Jhc2ggbWluaWR1bXBzLiIpCisgICAgZGVi
dWdnaW5nX2dyb3VwLmFkZF9hcmd1bWVudCgiLS1zdGFja3dhbGstYmluYXJ5IiwgYWN0aW9uPSJz
dG9yZSIsIHR5cGU9YWJzX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBo
ZWxwPSJQYXRoIHRvIHN0YWNrd2Fsa2VyIHByb2dyYW0gdXNlZCB0byBhbmFseXNlIG1pbmlkdW1w
cy4iKQorCisgICAgZGVidWdnaW5nX2dyb3VwLmFkZF9hcmd1bWVudCgiLS1wZGIiLCBhY3Rpb249
InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iRHJv
cCBpbnRvIHBkYiBvbiBweXRob24gZXhjZXB0aW9uIikKKworICAgIGNvbmZpZ19ncm91cCA9IHBh
cnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoIkNvbmZpZ3VyYXRpb24iKQorICAgIGNvbmZpZ19ncm91
cC5hZGRfYXJndW1lbnQoIi0tYmluYXJ5IiwgYWN0aW9uPSJzdG9yZSIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0eXBlPWFic19wYXRoLCBoZWxwPSJCaW5hcnkgdG8gcnVuIHRlc3Rz
IGFnYWluc3QiKQorICAgIGNvbmZpZ19ncm91cC5hZGRfYXJndW1lbnQoJy0tYmluYXJ5LWFyZycs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PVtdLCBhY3Rpb249ImFwcGVu
ZCIsIGRlc3Q9ImJpbmFyeV9hcmdzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhl
bHA9IkV4dHJhIGFyZ3VtZW50IGZvciB0aGUgYmluYXJ5IikKKyAgICBjb25maWdfZ3JvdXAuYWRk
X2FyZ3VtZW50KCItLXdlYmRyaXZlci1iaW5hcnkiLCBhY3Rpb249InN0b3JlIiwgbWV0YXZhcj0i
QklOQVJZIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9YWJzX3BhdGgsIGhl
bHA9IldlYkRyaXZlciBzZXJ2ZXIgYmluYXJ5IHRvIHVzZSIpCisgICAgY29uZmlnX2dyb3VwLmFk
ZF9hcmd1bWVudCgnLS13ZWJkcml2ZXItYXJnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRlZmF1bHQ9W10sIGFjdGlvbj0iYXBwZW5kIiwgZGVzdD0id2ViZHJpdmVyX2FyZ3MiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iRXh0cmEgYXJndW1lbnQgZm9yIHRo
ZSBXZWJEcml2ZXIgYmluYXJ5IikKKworICAgIGNvbmZpZ19ncm91cC5hZGRfYXJndW1lbnQoIi0t
bWV0YWRhdGEiLCBhY3Rpb249InN0b3JlIiwgdHlwZT1hYnNfcGF0aCwgZGVzdD0ibWV0YWRhdGFf
cm9vdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJQYXRoIHRvIHJvb3Qg
ZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGVzdCBtZXRhZGF0YSIpLAorICAgIGNvbmZpZ19ncm91cC5h
ZGRfYXJndW1lbnQoIi0tdGVzdHMiLCBhY3Rpb249InN0b3JlIiwgdHlwZT1hYnNfcGF0aCwgZGVz
dD0idGVzdHNfcm9vdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJQYXRo
IHRvIHJvb3QgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGVzdCBmaWxlcyIpLAorICAgIGNvbmZpZ19n
cm91cC5hZGRfYXJndW1lbnQoIi0tcnVuLWluZm8iLCBhY3Rpb249InN0b3JlIiwgdHlwZT1hYnNf
cGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlBhdGggdG8gZGlyZWN0
b3J5IGNvbnRhaW5pbmcgZXh0cmEganNvbiBmaWxlcyB0byBhZGQgdG8gcnVuIGluZm8iKQorICAg
IGNvbmZpZ19ncm91cC5hZGRfYXJndW1lbnQoIi0tcHJvZHVjdCIsIGFjdGlvbj0ic3RvcmUiLCBj
aG9pY2VzPXByb2R1Y3RfY2hvaWNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ9Tm9uZSwgaGVscD0iQnJvd3NlciBhZ2FpbnN0IHdoaWNoIHRvIHJ1biB0ZXN0cyIpCisg
ICAgY29uZmlnX2dyb3VwLmFkZF9hcmd1bWVudCgiLS1jb25maWciLCBhY3Rpb249InN0b3JlIiwg
dHlwZT1hYnNfcGF0aCwgZGVzdD0iY29uZmlnIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGhlbHA9IlBhdGggdG8gY29uZmlnIGZpbGUiKQorICAgIGNvbmZpZ19ncm91cC5hZGRfYXJn
dW1lbnQoIi0taW5zdGFsbC1mb250cyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBoZWxwPSJBbGxvdyB0aGUgd3B0cnVubmVyIHRvIGluc3RhbGwgZm9udHMgb24geW91
ciBzeXN0ZW0iKQorICAgIGNvbmZpZ19ncm91cC5hZGRfYXJndW1lbnQoIi0tZm9udC1kaXIiLCBh
Y3Rpb249InN0b3JlIiwgdHlwZT1hYnNfcGF0aCwgZGVzdD0iZm9udF9kaXIiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaGVscD0iUGF0aCB0byBsb2NhbCBmb250IGluc3RhbGxhdGlv
biBkaXJlY3RvcnkiLCBkZWZhdWx0PU5vbmUpCisKKyAgICBidWlsZF90eXBlID0gcGFyc2VyLmFk
ZF9tdXR1YWxseV9leGNsdXNpdmVfZ3JvdXAoKQorICAgIGJ1aWxkX3R5cGUuYWRkX2FyZ3VtZW50
KCItLWRlYnVnLWJ1aWxkIiwgZGVzdD0iZGVidWciLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBoZWxwPSJCdWlsZCBpcyBhIGRlYnVnIGJ1aWxkIChvdmVycmlkZXMgYW55IG1v
emluZm8gZmlsZSkiKQorICAgIGJ1aWxkX3R5cGUuYWRkX2FyZ3VtZW50KCItLXJlbGVhc2UtYnVp
bGQiLCBkZXN0PSJkZWJ1ZyIsIGFjdGlvbj0ic3RvcmVfZmFsc2UiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBo
ZWxwPSJCdWlsZCBpcyBhIHJlbGVhc2UgKG92ZXJyaWRlcyBhbnkgbW96aW5mbyBmaWxlKSIpCisK
KworICAgIGNodW5raW5nX2dyb3VwID0gcGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cCgiVGVzdCBD
aHVua2luZyIpCisgICAgY2h1bmtpbmdfZ3JvdXAuYWRkX2FyZ3VtZW50KCItLXRvdGFsLWNodW5r
cyIsIGFjdGlvbj0ic3RvcmUiLCB0eXBlPWludCwgZGVmYXVsdD0xLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBoZWxwPSJUb3RhbCBudW1iZXIgb2YgY2h1bmtzIHRvIHVzZSIpCisg
ICAgY2h1bmtpbmdfZ3JvdXAuYWRkX2FyZ3VtZW50KCItLXRoaXMtY2h1bmsiLCBhY3Rpb249InN0
b3JlIiwgdHlwZT1pbnQsIGRlZmF1bHQ9MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaGVscD0iQ2h1bmsgbnVtYmVyIHRvIHJ1biIpCisgICAgY2h1bmtpbmdfZ3JvdXAuYWRkX2Fy
Z3VtZW50KCItLWNodW5rLXR5cGUiLCBhY3Rpb249InN0b3JlIiwgY2hvaWNlcz1bIm5vbmUiLCAi
ZXF1YWxfdGltZSIsICJoYXNoIiwgImRpcl9oYXNoIl0sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ9Tm9uZSwgaGVscD0iQ2h1bmtpbmcgdHlwZSB0byB1c2UiKQorCisg
ICAgc3NsX2dyb3VwID0gcGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cCgiU1NML1RMUyIpCisgICAg
c3NsX2dyb3VwLmFkZF9hcmd1bWVudCgiLS1zc2wtdHlwZSIsIGFjdGlvbj0ic3RvcmUiLCBkZWZh
dWx0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICBjaG9pY2VzPVsib3BlbnNzbCIsICJw
cmVnZW5lcmF0ZWQiLCAibm9uZSJdLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iVHlw
ZSBvZiBzc2wgc3VwcG9ydCB0byBlbmFibGUgKHJ1bm5pbmcgd2l0aG91dCBzc2wgbWF5IGxlYWQg
dG8gc3B1cmlvdXMgZXJyb3JzKSIpCisKKyAgICBzc2xfZ3JvdXAuYWRkX2FyZ3VtZW50KCItLW9w
ZW5zc2wtYmluYXJ5IiwgYWN0aW9uPSJzdG9yZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBo
ZWxwPSJQYXRoIHRvIG9wZW5zc2wgYmluYXJ5IiwgZGVmYXVsdD0ib3BlbnNzbCIpCisgICAgc3Ns
X2dyb3VwLmFkZF9hcmd1bWVudCgiLS1jZXJ0dXRpbC1iaW5hcnkiLCBhY3Rpb249InN0b3JlIiwK
KyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlBhdGggdG8gY2VydHV0aWwgYmluYXJ5IGZv
ciB1c2Ugd2l0aCBGaXJlZm94ICsgc3NsIikKKworICAgIHNzbF9ncm91cC5hZGRfYXJndW1lbnQo
Ii0tY2EtY2VydC1wYXRoIiwgYWN0aW9uPSJzdG9yZSIsIHR5cGU9YWJzX3BhdGgsCisgICAgICAg
ICAgICAgICAgICAgICAgICBoZWxwPSJQYXRoIHRvIGNhIGNlcnRpZmljYXRlIHdoZW4gdXNpbmcg
cHJlZ2VuZXJhdGVkIHNzbCBjZXJ0aWZpY2F0ZXMiKQorICAgIHNzbF9ncm91cC5hZGRfYXJndW1l
bnQoIi0taG9zdC1rZXktcGF0aCIsIGFjdGlvbj0ic3RvcmUiLCB0eXBlPWFic19wYXRoLAorICAg
ICAgICAgICAgICAgICAgICAgICAgaGVscD0iUGF0aCB0byBob3N0IHByaXZhdGUga2V5IHdoZW4g
dXNpbmcgcHJlZ2VuZXJhdGVkIHNzbCBjZXJ0aWZpY2F0ZXMiKQorICAgIHNzbF9ncm91cC5hZGRf
YXJndW1lbnQoIi0taG9zdC1jZXJ0LXBhdGgiLCBhY3Rpb249InN0b3JlIiwgdHlwZT1hYnNfcGF0
aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlBhdGggdG8gaG9zdCBjZXJ0aWZpY2F0
ZSB3aGVuIHVzaW5nIHByZWdlbmVyYXRlZCBzc2wgY2VydGlmaWNhdGVzIikKKworICAgIGdlY2tv
X2dyb3VwID0gcGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cCgiR2Vja28tc3BlY2lmaWMiKQorICAg
IGdlY2tvX2dyb3VwLmFkZF9hcmd1bWVudCgiLS1wcmVmcy1yb290IiwgZGVzdD0icHJlZnNfcm9v
dCIsIGFjdGlvbj0ic3RvcmUiLCB0eXBlPWFic19wYXRoLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBoZWxwPSJQYXRoIHRvIHRoZSBmb2xkZXIgY29udGFpbmluZyBicm93c2VyIHByZWZz
IikKKyAgICBnZWNrb19ncm91cC5hZGRfYXJndW1lbnQoIi0tZGlzYWJsZS1lMTBzIiwgZGVzdD0i
Z2Vja29fZTEwcyIsIGFjdGlvbj0ic3RvcmVfZmFsc2UiLCBkZWZhdWx0PVRydWUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlJ1biB0ZXN0cyB3aXRob3V0IGVsZWN0cm9seXNp
cyBwcmVmZXJlbmNlcyIpCisgICAgZ2Vja29fZ3JvdXAuYWRkX2FyZ3VtZW50KCItLXN0YWNrZml4
LWRpciIsIGRlc3Q9InN0YWNrZml4X2RpciIsIGFjdGlvbj0ic3RvcmUiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBoZWxwPSJQYXRoIHRvIGRpcmVjdG9yeSBjb250YWluaW5nIGFzc2Vy
dGlvbiBzdGFjayBmaXhpbmcgc2NyaXB0cyIpCisgICAgZ2Vja29fZ3JvdXAuYWRkX2FyZ3VtZW50
KCItLXNldHByZWYiLCBkZXN0PSJleHRyYV9wcmVmcyIsIGFjdGlvbj0nYXBwZW5kJywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1bXSwgbWV0YXZhcj0iUFJFRj1WQUxVRSIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkRlZmluZXMgYW4gZXh0cmEgdXNl
ciBwcmVmZXJlbmNlIChvdmVycmlkZXMgdGhvc2UgaW4gcHJlZnNfcm9vdCkiKQorICAgIGdlY2tv
X2dyb3VwLmFkZF9hcmd1bWVudCgiLS1sZWFrLWNoZWNrIiwgZGVzdD0ibGVha19jaGVjayIsIGFj
dGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkVu
YWJsZSBsZWFrIGNoZWNraW5nIikKKyAgICBnZWNrb19ncm91cC5hZGRfYXJndW1lbnQoIi0tc3R5
bG8tdGhyZWFkcyIsIGFjdGlvbj0ic3RvcmUiLCB0eXBlPWludCwgZGVmYXVsdD0xLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJOdW1iZXIgb2YgcGFyYWxsZWwgdGhyZWFkcyB0
byB1c2UgZm9yIHN0eWxvIikKKyAgICBnZWNrb19ncm91cC5hZGRfYXJndW1lbnQoIi0tcmVmdGVz
dC1pbnRlcm5hbCIsIGRlc3Q9InJlZnRlc3RfaW50ZXJuYWwiLCBhY3Rpb249InN0b3JlX3RydWUi
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PU5vbmUsIGhlbHA9IkVuYWJs
ZSByZWZ0ZXN0IHJ1bm5lciBpbXBsZW1lbnRlZCBpbnNpZGUgTWFyaW9uZXR0ZSIpCisgICAgZ2Vj
a29fZ3JvdXAuYWRkX2FyZ3VtZW50KCItLXJlZnRlc3QtZXh0ZXJuYWwiLCBkZXN0PSJyZWZ0ZXN0
X2ludGVybmFsIiwgYWN0aW9uPSJzdG9yZV9mYWxzZSIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGhlbHA9IkRpc2FibGUgcmVmdGVzdCBydW5uZXIgaW1wbGVtZW50ZWQgaW5zaWRlIE1h
cmlvbmV0dGUiKQorICAgIGdlY2tvX2dyb3VwLmFkZF9hcmd1bWVudCgiLS1yZWZ0ZXN0LXNjcmVl
bnNob3QiLCBkZXN0PSJyZWZ0ZXN0X3NjcmVlbnNob3QiLCBhY3Rpb249InN0b3JlIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2hvaWNlcz1bImFsd2F5cyIsICJmYWlsIiwgInVuZXhw
ZWN0ZWQiXSwgZGVmYXVsdD0idW5leHBlY3RlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGhlbHA9IldpdGggLS1yZWZ0ZXN0LWludGVybmFsLCB3aGVuIHRvIHRha2UgYSBzY3JlZW5z
aG90IikKKworICAgIHNlcnZvX2dyb3VwID0gcGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cCgiU2Vy
dm8tc3BlY2lmaWMiKQorICAgIHNlcnZvX2dyb3VwLmFkZF9hcmd1bWVudCgiLS11c2VyLXN0eWxl
c2hlZXQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PVtdLCBhY3Rpb249
ImFwcGVuZCIsIGRlc3Q9InVzZXJfc3R5bGVzaGVldHMiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBoZWxwPSJJbmplY3QgYSB1c2VyIENTUyBzdHlsZXNoZWV0IGludG8gZXZlcnkgdGVz
dC4iKQorCisgICAgc2F1Y2VfZ3JvdXAgPSBwYXJzZXIuYWRkX2FyZ3VtZW50X2dyb3VwKCJTYXVj
ZSBMYWJzLXNwZWNpZmljIikKKyAgICBzYXVjZV9ncm91cC5hZGRfYXJndW1lbnQoIi0tc2F1Y2Ut
YnJvd3NlciIsIGRlc3Q9InNhdWNlX2Jyb3dzZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBoZWxwPSJTYXVjZSBMYWJzIGJyb3dzZXIgbmFtZSIpCisgICAgc2F1Y2VfZ3JvdXAuYWRk
X2FyZ3VtZW50KCItLXNhdWNlLXBsYXRmb3JtIiwgZGVzdD0ic2F1Y2VfcGxhdGZvcm0iLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJTYXVjZSBMYWJzIE9TIHBsYXRmb3JtIikK
KyAgICBzYXVjZV9ncm91cC5hZGRfYXJndW1lbnQoIi0tc2F1Y2UtdmVyc2lvbiIsIGRlc3Q9InNh
dWNlX3ZlcnNpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJTYXVjZSBM
YWJzIGJyb3dzZXIgdmVyc2lvbiIpCisgICAgc2F1Y2VfZ3JvdXAuYWRkX2FyZ3VtZW50KCItLXNh
dWNlLWJ1aWxkIiwgZGVzdD0ic2F1Y2VfYnVpbGQiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBoZWxwPSJTYXVjZSBMYWJzIGJ1aWxkIGlkZW50aWZpZXIiKQorICAgIHNhdWNlX2dyb3Vw
LmFkZF9hcmd1bWVudCgiLS1zYXVjZS10YWdzIiwgZGVzdD0ic2F1Y2VfdGFncyIsIG5hcmdzPSIq
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iU2F1Y2UgTGFicyBpZGVudGlm
eWluZyB0YWciLCBkZWZhdWx0PVtdKQorICAgIHNhdWNlX2dyb3VwLmFkZF9hcmd1bWVudCgiLS1z
YXVjZS10dW5uZWwtaWQiLCBkZXN0PSJzYXVjZV90dW5uZWxfaWQiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBoZWxwPSJTYXVjZSBDb25uZWN0IHR1bm5lbCBpZGVudGlmaWVyIikKKyAg
ICBzYXVjZV9ncm91cC5hZGRfYXJndW1lbnQoIi0tc2F1Y2UtdXNlciIsIGRlc3Q9InNhdWNlX3Vz
ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJTYXVjZSBMYWJzIHVzZXIg
bmFtZSIpCisgICAgc2F1Y2VfZ3JvdXAuYWRkX2FyZ3VtZW50KCItLXNhdWNlLWtleSIsIGRlc3Q9
InNhdWNlX2tleSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9b3MuZW52
aXJvbi5nZXQoIlNBVUNFX0FDQ0VTU19LRVkiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaGVscD0iU2F1Y2UgTGFicyBhY2Nlc3Mga2V5IikKKyAgICBzYXVjZV9ncm91cC5hZGRfYXJn
dW1lbnQoIi0tc2F1Y2UtY29ubmVjdC1iaW5hcnkiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZXN0PSJzYXVjZV9jb25uZWN0X2JpbmFyeSIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGhlbHA9IlBhdGggdG8gU2F1Y2UgQ29ubmVjdCBiaW5hcnkiKQorCisgICAgcGFyc2Vy
LmFkZF9hcmd1bWVudCgidGVzdF9saXN0IiwgbmFyZ3M9IioiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgaGVscD0iTGlzdCBvZiBVUkxzIGZvciB0ZXN0cyB0byBydW4sIG9yIHBhdGhzIGluY2x1
ZGluZyB0ZXN0cyB0byBydW4uICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihlcXVp
dmFsZW50IHRvIC0taW5jbHVkZSkiKQorCisgICAgY29tbWFuZGxpbmUubG9nX2Zvcm1hdHRlcnNb
IndwdHJlcG9ydCJdID0gKGZvcm1hdHRlcnMuV3B0cmVwb3J0Rm9ybWF0dGVyLCAid3B0cmVwb3J0
IGZvcm1hdCIpCisKKyAgICBjb21tYW5kbGluZS5hZGRfbG9nZ2luZ19ncm91cChwYXJzZXIpCisg
ICAgcmV0dXJuIHBhcnNlcgorCisKK2RlZiBzZXRfZnJvbV9jb25maWcoa3dhcmdzKToKKyAgICBp
ZiBrd2FyZ3NbImNvbmZpZyJdIGlzIE5vbmU6CisgICAgICAgIGNvbmZpZ19wYXRoID0gY29uZmln
LnBhdGgoKQorICAgIGVsc2U6CisgICAgICAgIGNvbmZpZ19wYXRoID0ga3dhcmdzWyJjb25maWci
XQorCisgICAga3dhcmdzWyJjb25maWdfcGF0aCJdID0gY29uZmlnX3BhdGgKKworICAgIGt3YXJn
c1siY29uZmlnIl0gPSBjb25maWcucmVhZChrd2FyZ3NbImNvbmZpZ19wYXRoIl0pCisKKyAgICBr
ZXlzID0geyJwYXRocyI6IFsoInByZWZzIiwgInByZWZzX3Jvb3QiLCBUcnVlKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAoInJ1bl9pbmZvIiwgInJ1bl9pbmZvIiwgVHJ1ZSldLAorICAgICAgICAg
ICAgIndlYi1wbGF0Zm9ybS10ZXN0cyI6IFsoInJlbW90ZV91cmwiLCAicmVtb3RlX3VybCIsIEZh
bHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJicmFuY2giLCAiYnJh
bmNoIiwgRmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoInN5bmNf
cGF0aCIsICJzeW5jX3BhdGgiLCBUcnVlKV0sCisgICAgICAgICAgICAiU1NMIjogWygib3BlbnNz
bF9iaW5hcnkiLCAib3BlbnNzbF9iaW5hcnkiLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAg
KCJjZXJ0dXRpbF9iaW5hcnkiLCAiY2VydHV0aWxfYmluYXJ5IiwgVHJ1ZSksCisgICAgICAgICAg
ICAgICAgICAgICgiY2FfY2VydF9wYXRoIiwgImNhX2NlcnRfcGF0aCIsIFRydWUpLAorICAgICAg
ICAgICAgICAgICAgICAoImhvc3RfY2VydF9wYXRoIiwgImhvc3RfY2VydF9wYXRoIiwgVHJ1ZSks
CisgICAgICAgICAgICAgICAgICAgICgiaG9zdF9rZXlfcGF0aCIsICJob3N0X2tleV9wYXRoIiwg
VHJ1ZSldfQorCisgICAgZm9yIHNlY3Rpb24sIHZhbHVlcyBpbiBrZXlzLml0ZXJpdGVtcygpOgor
ICAgICAgICBmb3IgY29uZmlnX3ZhbHVlLCBrd192YWx1ZSwgaXNfcGF0aCBpbiB2YWx1ZXM6Cisg
ICAgICAgICAgICBpZiBrd192YWx1ZSBpbiBrd2FyZ3MgYW5kIGt3YXJnc1trd192YWx1ZV0gaXMg
Tm9uZToKKyAgICAgICAgICAgICAgICBpZiBub3QgaXNfcGF0aDoKKyAgICAgICAgICAgICAgICAg
ICAgbmV3X3ZhbHVlID0ga3dhcmdzWyJjb25maWciXS5nZXQoc2VjdGlvbiwgY29uZmlnLkNvbmZp
Z0RpY3Qoe30pKS5nZXQoY29uZmlnX3ZhbHVlKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICAgICAgICAgIG5ld192YWx1ZSA9IGt3YXJnc1siY29uZmlnIl0uZ2V0KHNlY3Rpb24s
IGNvbmZpZy5Db25maWdEaWN0KHt9KSkuZ2V0X3BhdGgoY29uZmlnX3ZhbHVlKQorICAgICAgICAg
ICAgICAgIGt3YXJnc1trd192YWx1ZV0gPSBuZXdfdmFsdWUKKworICAgIGt3YXJnc1sidGVzdF9w
YXRocyJdID0gZ2V0X3Rlc3RfcGF0aHMoa3dhcmdzWyJjb25maWciXSkKKworICAgIGlmIGt3YXJn
c1sidGVzdHNfcm9vdCJdOgorICAgICAgICBpZiAiLyIgbm90IGluIGt3YXJnc1sidGVzdF9wYXRo
cyJdOgorICAgICAgICAgICAga3dhcmdzWyJ0ZXN0X3BhdGhzIl1bIi8iXSA9IHt9CisgICAgICAg
IGt3YXJnc1sidGVzdF9wYXRocyJdWyIvIl1bInRlc3RzX3BhdGgiXSA9IGt3YXJnc1sidGVzdHNf
cm9vdCJdCisKKyAgICBpZiBrd2FyZ3NbIm1ldGFkYXRhX3Jvb3QiXToKKyAgICAgICAgaWYgIi8i
IG5vdCBpbiBrd2FyZ3NbInRlc3RfcGF0aHMiXToKKyAgICAgICAgICAgIGt3YXJnc1sidGVzdF9w
YXRocyJdWyIvIl0gPSB7fQorICAgICAgICBrd2FyZ3NbInRlc3RfcGF0aHMiXVsiLyJdWyJtZXRh
ZGF0YV9wYXRoIl0gPSBrd2FyZ3NbIm1ldGFkYXRhX3Jvb3QiXQorCisgICAga3dhcmdzWyJzdWl0
ZV9uYW1lIl0gPSBrd2FyZ3NbImNvbmZpZyJdLmdldCgid2ViLXBsYXRmb3JtLXRlc3RzIiwge30p
LmdldCgibmFtZSIsICJ3ZWItcGxhdGZvcm0tdGVzdHMiKQorCisKK2RlZiBnZXRfdGVzdF9wYXRo
cyhjb25maWcpOgorICAgICMgU2V0IHVwIHRlc3RfcGF0aHMKKyAgICB0ZXN0X3BhdGhzID0gT3Jk
ZXJlZERpY3QoKQorCisgICAgZm9yIHNlY3Rpb24gaW4gY29uZmlnLml0ZXJrZXlzKCk6CisgICAg
ICAgIGlmIHNlY3Rpb24uc3RhcnRzd2l0aCgibWFuaWZlc3Q6Iik6CisgICAgICAgICAgICBtYW5p
ZmVzdF9vcHRzID0gY29uZmlnLmdldChzZWN0aW9uKQorICAgICAgICAgICAgdXJsX2Jhc2UgPSBt
YW5pZmVzdF9vcHRzLmdldCgidXJsX2Jhc2UiLCAiLyIpCisgICAgICAgICAgICB0ZXN0X3BhdGhz
W3VybF9iYXNlXSA9IHsKKyAgICAgICAgICAgICAgICAidGVzdHNfcGF0aCI6IG1hbmlmZXN0X29w
dHMuZ2V0X3BhdGgoInRlc3RzIiksCisgICAgICAgICAgICAgICAgIm1ldGFkYXRhX3BhdGgiOiBt
YW5pZmVzdF9vcHRzLmdldF9wYXRoKCJtZXRhZGF0YSIpfQorCisgICAgcmV0dXJuIHRlc3RfcGF0
aHMKKworCitkZWYgZXhlX3BhdGgobmFtZSk6CisgICAgaWYgbmFtZSBpcyBOb25lOgorICAgICAg
ICByZXR1cm4KKworICAgIHBhdGggPSBmaW5kX2V4ZWN1dGFibGUobmFtZSkKKyAgICBpZiBvcy5h
Y2Nlc3MocGF0aCwgb3MuWF9PSyk6CisgICAgICAgIHJldHVybiBwYXRoCisKKworZGVmIGNoZWNr
X2FyZ3Moa3dhcmdzKToKKyAgICBzZXRfZnJvbV9jb25maWcoa3dhcmdzKQorCisgICAgZm9yIHRl
c3RfcGF0aHMgaW4ga3dhcmdzWyJ0ZXN0X3BhdGhzIl0uaXRlcnZhbHVlcygpOgorICAgICAgICBp
ZiBub3QgKCJ0ZXN0c19wYXRoIiBpbiB0ZXN0X3BhdGhzIGFuZAorICAgICAgICAgICAgICAgICJt
ZXRhZGF0YV9wYXRoIiBpbiB0ZXN0X3BhdGhzKToKKyAgICAgICAgICAgIHByaW50ICJGYXRhbDog
bXVzdCBzcGVjaWZ5IGJvdGggYSB0ZXN0IHBhdGggYW5kIG1ldGFkYXRhIHBhdGgiCisgICAgICAg
ICAgICBzeXMuZXhpdCgxKQorICAgICAgICBmb3Iga2V5LCBwYXRoIGluIHRlc3RfcGF0aHMuaXRl
cml0ZW1zKCk6CisgICAgICAgICAgICBuYW1lID0ga2V5LnNwbGl0KCJfIiwgMSlbMF0KKworICAg
ICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHBhdGgpOgorICAgICAgICAgICAgICAgIHBy
aW50ICJGYXRhbDogJXMgcGF0aCAlcyBkb2VzIG5vdCBleGlzdCIgJSAobmFtZSwgcGF0aCkKKyAg
ICAgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5p
c2RpcihwYXRoKToKKyAgICAgICAgICAgICAgICBwcmludCAiRmF0YWw6ICVzIHBhdGggJXMgaXMg
bm90IGEgZGlyZWN0b3J5IiAlIChuYW1lLCBwYXRoKQorICAgICAgICAgICAgICAgIHN5cy5leGl0
KDEpCisKKyAgICBpZiBrd2FyZ3NbInByb2R1Y3QiXSBpcyBOb25lOgorICAgICAgICBrd2FyZ3Nb
InByb2R1Y3QiXSA9ICJmaXJlZm94IgorCisgICAgaWYgInNhdWNlIiBpbiBrd2FyZ3NbInByb2R1
Y3QiXToKKyAgICAgICAga3dhcmdzWyJwYXVzZV9hZnRlcl90ZXN0Il0gPSBGYWxzZQorCisgICAg
aWYga3dhcmdzWyJ0ZXN0X2xpc3QiXToKKyAgICAgICAgaWYga3dhcmdzWyJpbmNsdWRlIl0gaXMg
bm90IE5vbmU6CisgICAgICAgICAgICBrd2FyZ3NbImluY2x1ZGUiXS5leHRlbmQoa3dhcmdzWyJ0
ZXN0X2xpc3QiXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGt3YXJnc1siaW5jbHVkZSJd
ID0ga3dhcmdzWyJ0ZXN0X2xpc3QiXQorCisgICAgaWYga3dhcmdzWyJydW5faW5mbyJdIGlzIE5v
bmU6CisgICAgICAgIGt3YXJnc1sicnVuX2luZm8iXSA9IGt3YXJnc1siY29uZmlnX3BhdGgiXQor
CisgICAgaWYga3dhcmdzWyJ0aGlzX2NodW5rIl0gPiAxOgorICAgICAgICByZXF1aXJlX2FyZyhr
d2FyZ3MsICJ0b3RhbF9jaHVua3MiLCBsYW1iZGEgeDogeCA+PSBrd2FyZ3NbInRoaXNfY2h1bmsi
XSkKKworICAgIGlmIGt3YXJnc1siY2h1bmtfdHlwZSJdIGlzIE5vbmU6CisgICAgICAgIGlmIGt3
YXJnc1sidG90YWxfY2h1bmtzIl0gPiAxOgorICAgICAgICAgICAga3dhcmdzWyJjaHVua190eXBl
Il0gPSAiZGlyX2hhc2giCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBrd2FyZ3NbImNodW5r
X3R5cGUiXSA9ICJub25lIgorCisgICAgaWYga3dhcmdzWyJwcm9jZXNzZXMiXSBpcyBOb25lOgor
ICAgICAgICBrd2FyZ3NbInByb2Nlc3NlcyJdID0gMQorCisgICAgaWYga3dhcmdzWyJkZWJ1Z2dl
ciJdIGlzIG5vdCBOb25lOgorICAgICAgICBpbXBvcnQgbW96ZGVidWcKKyAgICAgICAgaWYga3dh
cmdzWyJkZWJ1Z2dlciJdID09ICJfX2RlZmF1bHRfXyI6CisgICAgICAgICAgICBrd2FyZ3NbImRl
YnVnZ2VyIl0gPSBtb3pkZWJ1Zy5nZXRfZGVmYXVsdF9kZWJ1Z2dlcl9uYW1lKCkKKyAgICAgICAg
ZGVidWdfaW5mbyA9IG1vemRlYnVnLmdldF9kZWJ1Z2dlcl9pbmZvKGt3YXJnc1siZGVidWdnZXIi
XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3YXJn
c1siZGVidWdnZXJfYXJncyJdKQorICAgICAgICBpZiBkZWJ1Z19pbmZvIGFuZCBkZWJ1Z19pbmZv
LmludGVyYWN0aXZlOgorICAgICAgICAgICAgaWYga3dhcmdzWyJwcm9jZXNzZXMiXSAhPSAxOgor
ICAgICAgICAgICAgICAgIGt3YXJnc1sicHJvY2Vzc2VzIl0gPSAxCisgICAgICAgICAgICBrd2Fy
Z3NbIm5vX2NhcHR1cmVfc3RkaW8iXSA9IFRydWUKKyAgICAgICAga3dhcmdzWyJkZWJ1Z19pbmZv
Il0gPSBkZWJ1Z19pbmZvCisgICAgZWxzZToKKyAgICAgICAga3dhcmdzWyJkZWJ1Z19pbmZvIl0g
PSBOb25lCisKKyAgICBpZiBrd2FyZ3NbImJpbmFyeSJdIGlzIG5vdCBOb25lOgorICAgICAgICBp
ZiBub3Qgb3MucGF0aC5leGlzdHMoa3dhcmdzWyJiaW5hcnkiXSk6CisgICAgICAgICAgICBwcmlu
dCA+PiBzeXMuc3RkZXJyLCAiQmluYXJ5IHBhdGggJXMgZG9lcyBub3QgZXhpc3QiICUga3dhcmdz
WyJiaW5hcnkiXQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGlmIGt3YXJnc1sic3Ns
X3R5cGUiXSBpcyBOb25lOgorICAgICAgICBpZiBOb25lIG5vdCBpbiAoa3dhcmdzWyJjYV9jZXJ0
X3BhdGgiXSwga3dhcmdzWyJob3N0X2NlcnRfcGF0aCJdLCBrd2FyZ3NbImhvc3Rfa2V5X3BhdGgi
XSk6CisgICAgICAgICAgICBrd2FyZ3NbInNzbF90eXBlIl0gPSAicHJlZ2VuZXJhdGVkIgorICAg
ICAgICBlbGlmIGV4ZV9wYXRoKGt3YXJnc1sib3BlbnNzbF9iaW5hcnkiXSkgaXMgbm90IE5vbmU6
CisgICAgICAgICAgICBrd2FyZ3NbInNzbF90eXBlIl0gPSAib3BlbnNzbCIKKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIGt3YXJnc1sic3NsX3R5cGUiXSA9ICJub25lIgorCisgICAgaWYga3dh
cmdzWyJzc2xfdHlwZSJdID09ICJwcmVnZW5lcmF0ZWQiOgorICAgICAgICByZXF1aXJlX2FyZyhr
d2FyZ3MsICJjYV9jZXJ0X3BhdGgiLCBsYW1iZGEgeDpvcy5wYXRoLmV4aXN0cyh4KSkKKyAgICAg
ICAgcmVxdWlyZV9hcmcoa3dhcmdzLCAiaG9zdF9jZXJ0X3BhdGgiLCBsYW1iZGEgeDpvcy5wYXRo
LmV4aXN0cyh4KSkKKyAgICAgICAgcmVxdWlyZV9hcmcoa3dhcmdzLCAiaG9zdF9rZXlfcGF0aCIs
IGxhbWJkYSB4Om9zLnBhdGguZXhpc3RzKHgpKQorCisgICAgZWxpZiBrd2FyZ3NbInNzbF90eXBl
Il0gPT0gIm9wZW5zc2wiOgorICAgICAgICBwYXRoID0gZXhlX3BhdGgoa3dhcmdzWyJvcGVuc3Ns
X2JpbmFyeSJdKQorICAgICAgICBpZiBwYXRoIGlzIE5vbmU6CisgICAgICAgICAgICBwcmludCA+
PiBzeXMuc3RkZXJyLCAib3BlbnNzbC1iaW5hcnkgYXJndW1lbnQgbWlzc2luZyBvciBub3QgYSB2
YWxpZCBleGVjdXRhYmxlIgorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAga3dhcmdz
WyJvcGVuc3NsX2JpbmFyeSJdID0gcGF0aAorCisgICAgaWYga3dhcmdzWyJzc2xfdHlwZSJdICE9
ICJub25lIiBhbmQga3dhcmdzWyJwcm9kdWN0Il0gPT0gImZpcmVmb3giOgorICAgICAgICBwYXRo
ID0gZXhlX3BhdGgoa3dhcmdzWyJjZXJ0dXRpbF9iaW5hcnkiXSkKKyAgICAgICAgaWYgcGF0aCBp
cyBOb25lOgorICAgICAgICAgICAgcHJpbnQgPj4gc3lzLnN0ZGVyciwgImNlcnR1dGlsLWJpbmFy
eSBhcmd1bWVudCBtaXNzaW5nIG9yIG5vdCBhIHZhbGlkIGV4ZWN1dGFibGUiCisgICAgICAgICAg
ICBzeXMuZXhpdCgxKQorICAgICAgICBrd2FyZ3NbImNlcnR1dGlsX2JpbmFyeSJdID0gcGF0aAor
CisgICAgaWYga3dhcmdzWydleHRyYV9wcmVmcyddOgorICAgICAgICBtaXNzaW5nID0gYW55KCc9
JyBub3QgaW4gcHJlZmFyZyBmb3IgcHJlZmFyZyBpbiBrd2FyZ3NbJ2V4dHJhX3ByZWZzJ10pCisg
ICAgICAgIGlmIG1pc3Npbmc6CisgICAgICAgICAgICBwcmludCA+PiBzeXMuc3RkZXJyLCAiUHJl
ZmVyZW5jZXMgdmlhIC0tc2V0cHJlZiBtdXN0IGJlIGluIGtleT12YWx1ZSBmb3JtYXQiCisgICAg
ICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICBrd2FyZ3NbJ2V4dHJhX3ByZWZzJ10gPSBbdHVw
bGUocHJlZmFyZy5zcGxpdCgnPScsIDEpKSBmb3IgcHJlZmFyZyBpbgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAga3dhcmdzWydleHRyYV9wcmVmcyddXQorCisgICAgaWYga3dhcmdz
WyJyZWZ0ZXN0X2ludGVybmFsIl0gaXMgTm9uZToKKyAgICAgICAgIyBEZWZhdWx0IHRvIHRoZSBp
bnRlcm5hbCByZWZ0ZXN0IGltcGxlbWVudGF0aW9uIG9uIExpbnV4IGFuZCBPU1gKKyAgICAgICAg
a3dhcmdzWyJyZWZ0ZXN0X2ludGVybmFsIl0gPSBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgibGlu
dXgiKSBvciBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgiZGFyd2luIikKKworICAgIHJldHVybiBr
d2FyZ3MKKworCitkZWYgY2hlY2tfYXJnc191cGRhdGUoa3dhcmdzKToKKyAgICBzZXRfZnJvbV9j
b25maWcoa3dhcmdzKQorCisgICAgaWYga3dhcmdzWyJwcm9kdWN0Il0gaXMgTm9uZToKKyAgICAg
ICAga3dhcmdzWyJwcm9kdWN0Il0gPSAiZmlyZWZveCIKKyAgICBpZiBrd2FyZ3NbInBhdGNoIl0g
aXMgTm9uZToKKyAgICAgICAga3dhcmdzWyJwYXRjaCJdID0ga3dhcmdzWyJzeW5jIl0KKworICAg
IGZvciBpdGVtIGluIGt3YXJnc1sicnVuX2xvZyJdOgorICAgICAgICBpZiBvcy5wYXRoLmlzZGly
KGl0ZW0pOgorICAgICAgICAgICAgcHJpbnQgPj4gc3lzLnN0ZGVyciwgIkxvZyBmaWxlICVzIGlz
IGEgZGlyZWN0b3J5IiAlIGl0ZW0KKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICByZXR1
cm4ga3dhcmdzCisKKworZGVmIGNyZWF0ZV9wYXJzZXJfdXBkYXRlKHByb2R1Y3RfY2hvaWNlcz1O
b25lKToKKyAgICBmcm9tIG1vemxvZy5zdHJ1Y3R1cmVkIGltcG9ydCBjb21tYW5kbGluZQorCisg
ICAgaW1wb3J0IHByb2R1Y3RzCisKKyAgICBpZiBwcm9kdWN0X2Nob2ljZXMgaXMgTm9uZToKKyAg
ICAgICAgY29uZmlnX2RhdGEgPSBjb25maWcubG9hZCgpCisgICAgICAgIHByb2R1Y3RfY2hvaWNl
cyA9IHByb2R1Y3RzLnByb2R1Y3RzX2VuYWJsZWQoY29uZmlnX2RhdGEpCisKKyAgICBwYXJzZXIg
PSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigid2ViLXBsYXRmb3JtLXRlc3RzLXVwZGF0ZSIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249IlVwZGF0ZSBz
Y3JpcHQgZm9yIHdlYi1wbGF0Zm9ybS10ZXN0cyB0ZXN0cy4iKQorICAgIHBhcnNlci5hZGRfYXJn
dW1lbnQoIi0tcHJvZHVjdCIsIGFjdGlvbj0ic3RvcmUiLCBjaG9pY2VzPXByb2R1Y3RfY2hvaWNl
cywKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Tm9uZSwgaGVscD0iQnJvd3NlciBm
b3Igd2hpY2ggbWV0YWRhdGEgaXMgYmVpbmcgdXBkYXRlZCIpCisgICAgcGFyc2VyLmFkZF9hcmd1
bWVudCgiLS1jb25maWciLCBhY3Rpb249InN0b3JlIiwgdHlwZT1hYnNfcGF0aCwgaGVscD0iUGF0
aCB0byBjb25maWcgZmlsZSIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLS1tZXRhZGF0YSIs
IGFjdGlvbj0ic3RvcmUiLCB0eXBlPWFic19wYXRoLCBkZXN0PSJtZXRhZGF0YV9yb290IiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlBhdGggdG8gdGhlIGZvbGRlciBjb250YWluaW5n
IHRlc3QgbWV0YWRhdGEiKSwKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItLXRlc3RzIiwgYWN0
aW9uPSJzdG9yZSIsIHR5cGU9YWJzX3BhdGgsIGRlc3Q9InRlc3RzX3Jvb3QiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgaGVscD0iUGF0aCB0byB3ZWItcGxhdGZvcm0tdGVzdHMiKSwKKyAgICBw
YXJzZXIuYWRkX2FyZ3VtZW50KCItLXN5bmMtcGF0aCIsIGFjdGlvbj0ic3RvcmUiLCB0eXBlPWFi
c19wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iUGF0aCB0byBzdG9yZSBnaXQg
Y2hlY2tvdXQgb2Ygd2ViLXBsYXRmb3JtLXRlc3RzIGR1cmluZyB1cGRhdGUiKSwKKyAgICBwYXJz
ZXIuYWRkX2FyZ3VtZW50KCItLXJlbW90ZV91cmwiLCBhY3Rpb249InN0b3JlIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGhlbHA9IlVSTCBvZiB3ZWItcGxhdGZyb20tdGVzdHMgcmVwb3NpdG9y
eSB0byBzeW5jIGFnYWluc3QiKSwKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItLWJyYW5jaCIs
IGFjdGlvbj0ic3RvcmUiLCB0eXBlPWFic19wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAg
aGVscD0iUmVtb3RlIGJyYW5jaCB0byBzeW5jIGFnYWluc3QiKQorICAgIHBhcnNlci5hZGRfYXJn
dW1lbnQoIi0tcmV2IiwgYWN0aW9uPSJzdG9yZSIsIGhlbHA9IlJldmlzaW9uIHRvIHN5bmMgdG8i
KQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi0tcGF0Y2giLCBhY3Rpb249InN0b3JlX3RydWUi
LCBkZXN0PSJwYXRjaCIsIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhl
bHA9IkNyZWF0ZSBhIFZDUyBjb21taXQgY29udGFpbmluZyB0aGUgY2hhbmdlcy4iKQorICAgIHBh
cnNlci5hZGRfYXJndW1lbnQoIi0tbm8tcGF0Y2giLCBhY3Rpb249InN0b3JlX2ZhbHNlIiwgZGVz
dD0icGF0Y2giLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iRG9uJ3QgY3JlYXRlIGEg
VkNTIGNvbW1pdCBjb250YWluaW5nIHRoZSBjaGFuZ2VzLiIpCisgICAgcGFyc2VyLmFkZF9hcmd1
bWVudCgiLS1zeW5jIiwgZGVzdD0ic3luYyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlZmF1bHQ9
RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJTeW5jIHRoZSB0ZXN0cyB3aXRo
IHRoZSBsYXRlc3QgZnJvbSB1cHN0cmVhbSAoaW1wbGllcyAtLXBhdGNoKSIpCisgICAgcGFyc2Vy
LmFkZF9hcmd1bWVudCgiLS1pZ25vcmUtZXhpc3RpbmciLCBhY3Rpb249InN0b3JlX3RydWUiLCBo
ZWxwPSJXaGVuIHVwZGF0aW5nIHRlc3QgcmVzdWx0cyBvbmx5IGNvbnNpZGVyIHJlc3VsdHMgZnJv
bSB0aGUgbG9nZmlsZXMgcHJvdmlkZWQsIG5vdCBleGlzdGluZyBleHBlY3RhdGlvbnMuIikKKyAg
ICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItLWNvbnRpbnVlIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwg
aGVscD0iQ29udGludWUgYSBwcmV2aW91c2x5IHN0YXJ0ZWQgcnVuIG9mIHRoZSB1cGRhdGUgc2Ny
aXB0IikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItLWFib3J0IiwgYWN0aW9uPSJzdG9yZV90
cnVlIiwgaGVscD0iQ2xlYXIgc3RhdGUgZnJvbSBhIHByZXZpb3VzIGluY29tcGxldGUgcnVuIG9m
IHRoZSB1cGRhdGUgc2NyaXB0IikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItLWV4Y2x1ZGUi
LCBhY3Rpb249InN0b3JlIiwgbmFyZ3M9IioiLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVs
cD0iTGlzdCBvZiBnbG9iLXN0eWxlIHBhdGhzIHRvIGV4Y2x1ZGUgd2hlbiBzeW5jaW5nIHRlc3Rz
IikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItLWluY2x1ZGUiLCBhY3Rpb249InN0b3JlIiwg
bmFyZ3M9IioiLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iTGlzdCBvZiBnbG9iLXN0
eWxlIHBhdGhzIHRvIGluY2x1ZGUgd2hpY2ggd291bGQgb3RoZXJ3aXNlIGJlIGV4Y2x1ZGVkIHdo
ZW4gc3luY2luZyB0ZXN0cyIpCisgICAgIyBTaG91bGQgbWFrZSB0aGlzIHJlcXVpcmVkIGlmZiBy
dW49bG9nZmlsZQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoInJ1bl9sb2ciLCBuYXJncz0iKiIs
IHR5cGU9YWJzX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJMb2cgZmlsZSBm
cm9tIHJ1biBvZiB0ZXN0cyIpCisgICAgY29tbWFuZGxpbmUuYWRkX2xvZ2dpbmdfZ3JvdXAocGFy
c2VyKQorICAgIHJldHVybiBwYXJzZXIKKworCitkZWYgY3JlYXRlX3BhcnNlcl9yZWR1Y2UocHJv
ZHVjdF9jaG9pY2VzPU5vbmUpOgorICAgIHBhcnNlciA9IGNyZWF0ZV9wYXJzZXIocHJvZHVjdF9j
aG9pY2VzKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoInRhcmdldCIsIGFjdGlvbj0ic3RvcmUi
LCBoZWxwPSJUZXN0IGlkIHRoYXQgaXMgdW5zdGFibGUiKQorICAgIHJldHVybiBwYXJzZXIKKwor
CitkZWYgcGFyc2VfYXJncygpOgorICAgIHBhcnNlciA9IGNyZWF0ZV9wYXJzZXIoKQorICAgIHJ2
ID0gdmFycyhwYXJzZXIucGFyc2VfYXJncygpKQorICAgIGNoZWNrX2FyZ3MocnYpCisgICAgcmV0
dXJuIHJ2CisKKworZGVmIHBhcnNlX2FyZ3NfdXBkYXRlKCk6CisgICAgcGFyc2VyID0gY3JlYXRl
X3BhcnNlcl91cGRhdGUoKQorICAgIHJ2ID0gdmFycyhwYXJzZXIucGFyc2VfYXJncygpKQorICAg
IGNoZWNrX2FyZ3NfdXBkYXRlKHJ2KQorICAgIHJldHVybiBydgorCisKK2RlZiBwYXJzZV9hcmdz
X3JlZHVjZSgpOgorICAgIHBhcnNlciA9IGNyZWF0ZV9wYXJzZXJfcmVkdWNlKCkKKyAgICBydiA9
IHZhcnMocGFyc2VyLnBhcnNlX2FyZ3MoKSkKKyAgICBjaGVja19hcmdzKHJ2KQorICAgIHJldHVy
biBydgpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1
bm5lci93cHRydW5uZXIvd3B0bG9nZ2luZy5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3cz
Yy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3dwdGxvZ2dpbmcucHkKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjFhYjY3NTVjNDM1Ci0tLSAvZGV2L251bGwKKysrIGIv
V2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvd3B0
bG9nZ2luZy5weQpAQCAtMCwwICsxLDEyMSBAQAoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzeXMK
K2ltcG9ydCB0aHJlYWRpbmcKK2Zyb20gU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCitmcm9tIG11
bHRpcHJvY2Vzc2luZyBpbXBvcnQgUXVldWUKKworZnJvbSBtb3psb2cgaW1wb3J0IGNvbW1hbmRs
aW5lLCBzdGRhZGFwdGVyCisKK2RlZiBzZXR1cChhcmdzLCBkZWZhdWx0cyk6CisgICAgbG9nZ2Vy
ID0gY29tbWFuZGxpbmUuc2V0dXBfbG9nZ2luZygid2ViLXBsYXRmb3JtLXRlc3RzIiwgYXJncywg
ZGVmYXVsdHMpCisgICAgc2V0dXBfc3RkbGliX2xvZ2dlcigpCisKKyAgICBmb3IgbmFtZSBpbiBh
cmdzLmtleXMoKToKKyAgICAgICAgaWYgbmFtZS5zdGFydHN3aXRoKCJsb2dfIik6CisgICAgICAg
ICAgICBhcmdzLnBvcChuYW1lKQorCisgICAgcmV0dXJuIGxvZ2dlcgorCisKK2RlZiBzZXR1cF9z
dGRsaWJfbG9nZ2VyKCk6CisgICAgbG9nZ2luZy5yb290LmhhbmRsZXJzID0gW10KKyAgICBsb2dn
aW5nLnJvb3QgPSBzdGRhZGFwdGVyLnN0ZF9sb2dnaW5nX2FkYXB0ZXIobG9nZ2luZy5yb290KQor
CisKK2NsYXNzIExvZ0xldmVsUmV3cml0ZXIob2JqZWN0KToKKyAgICAiIiJGaWx0ZXIgdGhhdCBy
ZXBsYWNlcyBsb2cgbWVzc2FnZXMgYXQgc3BlY2lmaWVkIGxldmVscyB3aXRoIG1lc3NhZ2VzCisg
ICAgYXQgYSBkaWZmZXJlbnQgbGV2ZWwuCisKKyAgICBUaGlzIGNhbiBiZSB1c2VkIHRvIGUuZy4g
ZG93bmdyYWRlIGxvZyBtZXNzYWdlcyBmcm9tIEVSUk9SIHRvIFdBUk5JTkcKKyAgICBpbiBzb21l
IGNvbXBvbmVudCB3aGVyZSBFUlJPUnMgYXJlIG5vdCBjcml0aWNhbC4KKworICAgIDpwYXJhbSBp
bm5lcjogSGFuZGxlciB0byB1c2UgZm9yIG1lc3NhZ2VzIHRoYXQgcGFzcyB0aGlzIGZpbHRlcgor
ICAgIDpwYXJhbSBmcm9tX2xldmVsczogTGlzdCBvZiBsZXZlbHMgd2hpY2ggc2hvdWxkIGJlIGFm
ZmVjdGVkCisgICAgOnBhcmFtIHRvX2xldmVsOiBMb2cgbGV2ZWwgdG8gc2V0IGZvciB0aGUgYWZm
ZWN0ZWQgbWVzc2FnZXMKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaW5uZXIsIGZy
b21fbGV2ZWxzLCB0b19sZXZlbCk6CisgICAgICAgIHNlbGYuaW5uZXIgPSBpbm5lcgorICAgICAg
ICBzZWxmLmZyb21fbGV2ZWxzID0gW2l0ZW0udXBwZXIoKSBmb3IgaXRlbSBpbiBmcm9tX2xldmVs
c10KKyAgICAgICAgc2VsZi50b19sZXZlbCA9IHRvX2xldmVsLnVwcGVyKCkKKworICAgIGRlZiBf
X2NhbGxfXyhzZWxmLCBkYXRhKToKKyAgICAgICAgaWYgZGF0YVsiYWN0aW9uIl0gPT0gImxvZyIg
YW5kIGRhdGFbImxldmVsIl0udXBwZXIoKSBpbiBzZWxmLmZyb21fbGV2ZWxzOgorICAgICAgICAg
ICAgZGF0YSA9IGRhdGEuY29weSgpCisgICAgICAgICAgICBkYXRhWyJsZXZlbCJdID0gc2VsZi50
b19sZXZlbAorICAgICAgICByZXR1cm4gc2VsZi5pbm5lcihkYXRhKQorCisKKworY2xhc3MgTG9n
VGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBxdWV1ZSwg
bG9nZ2VyLCBsZXZlbCk6CisgICAgICAgIHNlbGYucXVldWUgPSBxdWV1ZQorICAgICAgICBzZWxm
LmxvZ19mdW5jID0gZ2V0YXR0cihsb2dnZXIsIGxldmVsKQorICAgICAgICB0aHJlYWRpbmcuVGhy
ZWFkLl9faW5pdF9fKHNlbGYsIG5hbWU9IlRocmVhZC1Mb2ciKQorICAgICAgICBzZWxmLmRhZW1v
biA9IFRydWUKKworICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgIHdoaWxlIFRydWU6CisgICAg
ICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbXNnID0gc2VsZi5xdWV1ZS5nZXQoKQorICAg
ICAgICAgICAgZXhjZXB0IChFT0ZFcnJvciwgSU9FcnJvcik6CisgICAgICAgICAgICAgICAgYnJl
YWsKKyAgICAgICAgICAgIGlmIG1zZyBpcyBOb25lOgorICAgICAgICAgICAgICAgIGJyZWFrCisg
ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYubG9nX2Z1bmMobXNnKQorCisK
K2NsYXNzIExvZ2dpbmdXcmFwcGVyKFN0cmluZ0lPKToKKyAgICAiIiJXcmFwcGVyIGZvciBmaWxl
IGxpa2Ugb2JqZWN0cyB0byByZWRpcmVjdCBvdXRwdXQgdG8gbG9nZ2VyCisgICAgaW5zdGVhZCIi
IgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHF1ZXVlLCBwcmVmaXg9Tm9uZSk6CisgICAgICAg
IFN0cmluZ0lPLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYucXVldWUgPSBxdWV1ZQorICAg
ICAgICBzZWxmLnByZWZpeCA9IHByZWZpeAorCisgICAgZGVmIHdyaXRlKHNlbGYsIGRhdGEpOgor
ICAgICAgICBpZiBpc2luc3RhbmNlKGRhdGEsIHN0cik6CisgICAgICAgICAgICBkYXRhID0gZGF0
YS5kZWNvZGUoInV0ZjgiKQorCisgICAgICAgIGlmIGRhdGEuZW5kc3dpdGgoIlxuIik6CisgICAg
ICAgICAgICBkYXRhID0gZGF0YVs6LTFdCisgICAgICAgIGlmIGRhdGEuZW5kc3dpdGgoIlxyIik6
CisgICAgICAgICAgICBkYXRhID0gZGF0YVs6LTFdCisgICAgICAgIGlmIG5vdCBkYXRhOgorICAg
ICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIHNlbGYucHJlZml4IGlzIG5vdCBOb25lOgorICAg
ICAgICAgICAgZGF0YSA9ICIlczogJXMiICUgKHNlbGYucHJlZml4LCBkYXRhKQorICAgICAgICBz
ZWxmLnF1ZXVlLnB1dChkYXRhKQorCisgICAgZGVmIGZsdXNoKHNlbGYpOgorICAgICAgICBwYXNz
CisKKworY2xhc3MgQ2FwdHVyZUlPKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxv
Z2dlciwgZG9fY2FwdHVyZSk6CisgICAgICAgIHNlbGYubG9nZ2VyID0gbG9nZ2VyCisgICAgICAg
IHNlbGYuZG9fY2FwdHVyZSA9IGRvX2NhcHR1cmUKKyAgICAgICAgc2VsZi5sb2dnaW5nX3F1ZXVl
ID0gTm9uZQorICAgICAgICBzZWxmLmxvZ2dpbmdfdGhyZWFkID0gTm9uZQorICAgICAgICBzZWxm
Lm9yaWdpbmFsX3N0ZGlvID0gTm9uZQorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAg
ICAgaWYgc2VsZi5kb19jYXB0dXJlOgorICAgICAgICAgICAgc2VsZi5vcmlnaW5hbF9zdGRpbyA9
IChzeXMuc3Rkb3V0LCBzeXMuc3RkZXJyKQorICAgICAgICAgICAgc2VsZi5sb2dnaW5nX3F1ZXVl
ID0gUXVldWUoKQorICAgICAgICAgICAgc2VsZi5sb2dnaW5nX3RocmVhZCA9IExvZ1RocmVhZChz
ZWxmLmxvZ2dpbmdfcXVldWUsIHNlbGYubG9nZ2VyLCAiaW5mbyIpCisgICAgICAgICAgICBzeXMu
c3Rkb3V0ID0gTG9nZ2luZ1dyYXBwZXIoc2VsZi5sb2dnaW5nX3F1ZXVlLCBwcmVmaXg9IlNURE9V
VCIpCisgICAgICAgICAgICBzeXMuc3RkZXJyID0gTG9nZ2luZ1dyYXBwZXIoc2VsZi5sb2dnaW5n
X3F1ZXVlLCBwcmVmaXg9IlNUREVSUiIpCisgICAgICAgICAgICBzZWxmLmxvZ2dpbmdfdGhyZWFk
LnN0YXJ0KCkKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAg
ICAgICBpZiBzZWxmLmRvX2NhcHR1cmU6CisgICAgICAgICAgICBzeXMuc3Rkb3V0LCBzeXMuc3Rk
ZXJyID0gc2VsZi5vcmlnaW5hbF9zdGRpbworICAgICAgICAgICAgaWYgc2VsZi5sb2dnaW5nX3F1
ZXVlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oIkNsb3Np
bmcgbG9nZ2luZyBxdWV1ZSIpCisgICAgICAgICAgICAgICAgc2VsZi5sb2dnaW5nX3F1ZXVlLnB1
dChOb25lKQorICAgICAgICAgICAgICAgIGlmIHNlbGYubG9nZ2luZ190aHJlYWQgaXMgbm90IE5v
bmU6CisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nZ2luZ190aHJlYWQuam9pbigxMCkKKyAg
ICAgICAgICAgICAgICBzZWxmLmxvZ2dpbmdfcXVldWUuY2xvc2UoKQorICAgICAgICAgICAgICAg
IHNlbGYubG9nZ2VyLmluZm8oInF1ZXVlIGNsb3NlZCIpCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJU
ZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci93cHRtYW5pZmVzdC9f
X2luaXRfXy5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIv
d3B0cnVubmVyL3dwdG1hbmlmZXN0L19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi42YjY0Nzg0YzdlNgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZl
clRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3dwdG1hbmlmZXN0
L19faW5pdF9fLnB5CkBAIC0wLDAgKzEsNCBAQAorZnJvbSBzZXJpYWxpemVyIGltcG9ydCBzZXJp
YWxpemUKK2Zyb20gcGFyc2VyIGltcG9ydCBwYXJzZQorZnJvbSBiYWNrZW5kcy5zdGF0aWMgaW1w
b3J0IGNvbXBpbGUgYXMgY29tcGlsZV9zdGF0aWMKK2Zyb20gYmFja2VuZHMuY29uZGl0aW9uYWwg
aW1wb3J0IGNvbXBpbGUgYXMgY29tcGlsZV9jb25kaXRpb24KZGlmZiAtLWdpdCBhL1dlYkRyaXZl
clRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3dwdG1hbmlmZXN0
L2JhY2tlbmRzL19faW5pdF9fLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xz
L3dwdHJ1bm5lci93cHRydW5uZXIvd3B0bWFuaWZlc3QvYmFja2VuZHMvX19pbml0X18ucHkKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmU2OWRlMjliYjJkCmRpZmYgLS1n
aXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5l
ci93cHRtYW5pZmVzdC9iYWNrZW5kcy9jb25kaXRpb25hbC5weSBiL1dlYkRyaXZlclRlc3RzL2lt
cG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3dwdG1hbmlmZXN0L2JhY2tlbmRz
L2NvbmRpdGlvbmFsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42
MjlkMDFkNzE1OAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3cz
Yy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3dwdG1hbmlmZXN0L2JhY2tlbmRzL2NvbmRpdGlv
bmFsLnB5CkBAIC0wLDAgKzEsMzMyIEBACitpbXBvcnQgb3BlcmF0b3IKKworZnJvbSAuLm5vZGUg
aW1wb3J0IE5vZGVWaXNpdG9yLCBEYXRhTm9kZSwgQ29uZGl0aW9uYWxOb2RlLCBLZXlWYWx1ZU5v
ZGUsIExpc3ROb2RlLCBWYWx1ZU5vZGUKK2Zyb20gLi5wYXJzZXIgaW1wb3J0IHBhcnNlCisKKwor
Y2xhc3MgQ29uZGl0aW9uYWxWYWx1ZShvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBu
b2RlLCBjb25kaXRpb25fZnVuYyk6CisgICAgICAgIHNlbGYubm9kZSA9IG5vZGUKKyAgICAgICAg
c2VsZi5jb25kaXRpb25fZnVuYyA9IGNvbmRpdGlvbl9mdW5jCisgICAgICAgIGlmIGlzaW5zdGFu
Y2Uobm9kZSwgQ29uZGl0aW9uYWxOb2RlKToKKyAgICAgICAgICAgIGFzc2VydCBsZW4obm9kZS5j
aGlsZHJlbikgPT0gMgorICAgICAgICAgICAgc2VsZi5jb25kaXRpb25fbm9kZSA9IHNlbGYubm9k
ZS5jaGlsZHJlblswXQorICAgICAgICAgICAgc2VsZi52YWx1ZV9ub2RlID0gc2VsZi5ub2RlLmNo
aWxkcmVuWzFdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShu
b2RlLCAoVmFsdWVOb2RlLCBMaXN0Tm9kZSkpCisgICAgICAgICAgICBzZWxmLmNvbmRpdGlvbl9u
b2RlID0gTm9uZQorICAgICAgICAgICAgc2VsZi52YWx1ZV9ub2RlID0gc2VsZi5ub2RlCisKKyAg
ICBAcHJvcGVydHkKKyAgICBkZWYgdmFsdWUoc2VsZik6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uo
c2VsZi52YWx1ZV9ub2RlLCBWYWx1ZU5vZGUpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFs
dWVfbm9kZS5kYXRhCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gW2l0ZW0uZGF0
YSBmb3IgaXRlbSBpbiBzZWxmLnZhbHVlX25vZGUuY2hpbGRyZW5dCisKKyAgICBAdmFsdWUuc2V0
dGVyCisgICAgZGVmIHZhbHVlKHNlbGYsIHZhbHVlKToKKyAgICAgICAgc2VsZi52YWx1ZV9ub2Rl
LmRhdGEgPSB2YWx1ZQorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIHJ1bl9pbmZvKToKKyAgICAg
ICAgcmV0dXJuIHNlbGYuY29uZGl0aW9uX2Z1bmMocnVuX2luZm8pCisKKyAgICBkZWYgc2V0X3Zh
bHVlKHNlbGYsIHZhbHVlKToKKyAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCisKKyAgICBkZWYg
cmVtb3ZlKHNlbGYpOgorICAgICAgICBpZiBsZW4oc2VsZi5ub2RlLnBhcmVudC5jaGlsZHJlbikg
PT0gMToKKyAgICAgICAgICAgIHNlbGYubm9kZS5wYXJlbnQucmVtb3ZlKCkKKyAgICAgICAgc2Vs
Zi5ub2RlLnJlbW92ZSgpCisKKworY2xhc3MgQ29tcGlsZXIoTm9kZVZpc2l0b3IpOgorICAgIGRl
ZiBjb21waWxlKHNlbGYsIHRyZWUsIGRhdGFfY2xzX2dldHRlcj1Ob25lLCAqKmt3YXJncyk6Cisg
ICAgICAgICIiIkNvbXBpbGUgYSByYXcgQVNUIGludG8gYSBmb3JtIHdoZXJlIGNvbmRpdGlvbmFs
IGV4cHJlc3Npb25zCisgICAgICAgIGFyZSByZXByZXNlbnRlZCBieSBDb25kaXRpb25hbFZhbHVl
IG9iamVjdHMgdGhhdCBjYW4gYmUgZXZhbHVhdGVkCisgICAgICAgIGF0IHJ1bnRpbWUuCisKKyAg
ICAgICAgdHJlZSAtIFRoZSByb290IG5vZGUgb2YgdGhlIHdwdG1hbmlmZXN0IEFTVCB0byBjb21w
aWxlCisKKyAgICAgICAgZGF0YV9jbHNfZ2V0dGVyIC0gQSBmdW5jdGlvbiB0YWtpbmcgdHdvIHBh
cmFtZXRlcnM7IHRoZSBwcmV2aW91cworICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQg
bm9kZSBhbmQgdGhlIGN1cnJlbnQgYXN0IG5vZGUgYW5kIHJldHVybmluZworICAgICAgICAgICAg
ICAgICAgICAgICAgICB0aGUgY2xhc3Mgb2YgdGhlIG91dHB1dCBub2RlIHRvIHVzZSBmb3IgdGhl
IGN1cnJlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYXN0IG5vZGUKKyAgICAgICAgIiIi
CisgICAgICAgIGlmIGRhdGFfY2xzX2dldHRlciBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5k
YXRhX2Nsc19nZXR0ZXIgPSBsYW1iZGEgeCwgeTogTWFuaWZlc3RJdGVtCisgICAgICAgIGVsc2U6
CisgICAgICAgICAgICBzZWxmLmRhdGFfY2xzX2dldHRlciA9IGRhdGFfY2xzX2dldHRlcgorCisg
ICAgICAgIHNlbGYudHJlZSA9IHRyZWUKKyAgICAgICAgc2VsZi5vdXRwdXRfbm9kZSA9IHNlbGYu
X2luaXRpYWxfb3V0cHV0X25vZGUodHJlZSwgKiprd2FyZ3MpCisgICAgICAgIHNlbGYudmlzaXQo
dHJlZSkKKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLm91dHB1dF9ub2RlLCAic2V0X2RlZmF1bHRz
Iik6CisgICAgICAgICAgICBzZWxmLm91dHB1dF9ub2RlLnNldF9kZWZhdWx0cygpCisgICAgICAg
IGFzc2VydCBzZWxmLm91dHB1dF9ub2RlIGlzIG5vdCBOb25lCisgICAgICAgIHJldHVybiBzZWxm
Lm91dHB1dF9ub2RlCisKKyAgICBkZWYgY29tcGlsZV9jb25kaXRpb24oc2VsZiwgY29uZGl0aW9u
KToKKyAgICAgICAgIiIiQ29tcGlsZSBhIENvbmRpdGlvbmFsTm9kZSBpbnRvIGEgQ29uZGl0aW9u
YWxWYWx1ZS4KKworICAgICAgICBjb25kaXRpb246IEEgQ29uZGl0aW9uYWxOb2RlIiIiCisgICAg
ICAgIGRhdGFfbm9kZSA9IERhdGFOb2RlKCkKKyAgICAgICAga2V5X3ZhbHVlX25vZGUgPSBLZXlW
YWx1ZU5vZGUoKQorICAgICAgICBrZXlfdmFsdWVfbm9kZS5hcHBlbmQoY29uZGl0aW9uLmNvcHko
KSkKKyAgICAgICAgZGF0YV9ub2RlLmFwcGVuZChrZXlfdmFsdWVfbm9kZSkKKyAgICAgICAgbWFu
aWZlc3RfaXRlbSA9IHNlbGYuY29tcGlsZShkYXRhX25vZGUpCisgICAgICAgIHJldHVybiBtYW5p
ZmVzdF9pdGVtLl9kYXRhW05vbmVdWzBdCisKKyAgICBkZWYgX2luaXRpYWxfb3V0cHV0X25vZGUo
c2VsZiwgbm9kZSwgKiprd2FyZ3MpOgorICAgICAgICByZXR1cm4gc2VsZi5kYXRhX2Nsc19nZXR0
ZXIoTm9uZSwgTm9uZSkobm9kZSwgKiprd2FyZ3MpCisKKyAgICBkZWYgdmlzaXRfRGF0YU5vZGUo
c2VsZiwgbm9kZSk6CisgICAgICAgIGlmIG5vZGUgIT0gc2VsZi50cmVlOgorICAgICAgICAgICAg
b3V0cHV0X3BhcmVudCA9IHNlbGYub3V0cHV0X25vZGUKKyAgICAgICAgICAgIHNlbGYub3V0cHV0
X25vZGUgPSBzZWxmLmRhdGFfY2xzX2dldHRlcihzZWxmLm91dHB1dF9ub2RlLCBub2RlKShub2Rl
KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3V0cHV0X3BhcmVudCA9IE5vbmUKKworICAg
ICAgICBhc3NlcnQgc2VsZi5vdXRwdXRfbm9kZSBpcyBub3QgTm9uZQorCisgICAgICAgIGZvciBj
aGlsZCBpbiBub2RlLmNoaWxkcmVuOgorICAgICAgICAgICAgc2VsZi52aXNpdChjaGlsZCkKKwor
ICAgICAgICBpZiBvdXRwdXRfcGFyZW50IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgIyBBcHBl
bmQgdG8gdGhlIHBhcmVudCAqYWZ0ZXIqIHByb2Nlc3NpbmcgYWxsIHRoZSBub2RlIGRhdGEKKyAg
ICAgICAgICAgIG91dHB1dF9wYXJlbnQuYXBwZW5kKHNlbGYub3V0cHV0X25vZGUpCisgICAgICAg
ICAgICBzZWxmLm91dHB1dF9ub2RlID0gc2VsZi5vdXRwdXRfbm9kZS5wYXJlbnQKKworICAgICAg
ICBhc3NlcnQgc2VsZi5vdXRwdXRfbm9kZSBpcyBub3QgTm9uZQorCisgICAgZGVmIHZpc2l0X0tl
eVZhbHVlTm9kZShzZWxmLCBub2RlKToKKyAgICAgICAga2V5X3ZhbHVlcyA9IFtdCisgICAgICAg
IGZvciBjaGlsZCBpbiBub2RlLmNoaWxkcmVuOgorICAgICAgICAgICAgY29uZGl0aW9uLCB2YWx1
ZSA9IHNlbGYudmlzaXQoY2hpbGQpCisgICAgICAgICAgICBrZXlfdmFsdWVzLmFwcGVuZChDb25k
aXRpb25hbFZhbHVlKGNoaWxkLCBjb25kaXRpb24pKQorCisgICAgICAgIHNlbGYub3V0cHV0X25v
ZGUuX2FkZF9rZXlfdmFsdWUobm9kZSwga2V5X3ZhbHVlcykKKworICAgIGRlZiB2aXNpdF9MaXN0
Tm9kZShzZWxmLCBub2RlKToKKyAgICAgICAgcmV0dXJuIChsYW1iZGEgeDpUcnVlLCBbc2VsZi52
aXNpdChjaGlsZCkgZm9yIGNoaWxkIGluIG5vZGUuY2hpbGRyZW5dKQorCisgICAgZGVmIHZpc2l0
X1ZhbHVlTm9kZShzZWxmLCBub2RlKToKKyAgICAgICAgcmV0dXJuIChsYW1iZGEgeDogVHJ1ZSwg
bm9kZS5kYXRhKQorCisgICAgZGVmIHZpc2l0X0F0b21Ob2RlKHNlbGYsIG5vZGUpOgorICAgICAg
ICByZXR1cm4gKGxhbWJkYSB4OiBUcnVlLCBub2RlLmRhdGEpCisKKyAgICBkZWYgdmlzaXRfQ29u
ZGl0aW9uYWxOb2RlKHNlbGYsIG5vZGUpOgorICAgICAgICByZXR1cm4gc2VsZi52aXNpdChub2Rl
LmNoaWxkcmVuWzBdKSwgc2VsZi52aXNpdChub2RlLmNoaWxkcmVuWzFdKQorCisgICAgZGVmIHZp
c2l0X1N0cmluZ05vZGUoc2VsZiwgbm9kZSk6CisgICAgICAgIGluZGV4ZXMgPSBbc2VsZi52aXNp
dChjaGlsZCkgZm9yIGNoaWxkIGluIG5vZGUuY2hpbGRyZW5dCisKKyAgICAgICAgZGVmIHZhbHVl
KHgpOgorICAgICAgICAgICAgcnYgPSBub2RlLmRhdGEKKyAgICAgICAgICAgIGZvciBpbmRleCBp
biBpbmRleGVzOgorICAgICAgICAgICAgICAgIHJ2ID0gcnZbaW5kZXgoeCldCisgICAgICAgICAg
ICByZXR1cm4gcnYKKyAgICAgICAgcmV0dXJuIHZhbHVlCisKKyAgICBkZWYgdmlzaXRfTnVtYmVy
Tm9kZShzZWxmLCBub2RlKToKKyAgICAgICAgaWYgIi4iIGluIG5vZGUuZGF0YToKKyAgICAgICAg
ICAgIHJldHVybiBsYW1iZGEgeDogZmxvYXQobm9kZS5kYXRhKQorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgcmV0dXJuIGxhbWJkYSB4OiBpbnQobm9kZS5kYXRhKQorCisgICAgZGVmIHZpc2l0
X1ZhcmlhYmxlTm9kZShzZWxmLCBub2RlKToKKyAgICAgICAgaW5kZXhlcyA9IFtzZWxmLnZpc2l0
KGNoaWxkKSBmb3IgY2hpbGQgaW4gbm9kZS5jaGlsZHJlbl0KKworICAgICAgICBkZWYgdmFsdWUo
eCk6CisgICAgICAgICAgICBkYXRhID0geFtub2RlLmRhdGFdCisgICAgICAgICAgICBmb3IgaW5k
ZXggaW4gaW5kZXhlczoKKyAgICAgICAgICAgICAgICBkYXRhID0gZGF0YVtpbmRleCh4KV0KKyAg
ICAgICAgICAgIHJldHVybiBkYXRhCisgICAgICAgIHJldHVybiB2YWx1ZQorCisgICAgZGVmIHZp
c2l0X0luZGV4Tm9kZShzZWxmLCBub2RlKToKKyAgICAgICAgYXNzZXJ0IGxlbihub2RlLmNoaWxk
cmVuKSA9PSAxCisgICAgICAgIHJldHVybiBzZWxmLnZpc2l0KG5vZGUuY2hpbGRyZW5bMF0pCisK
KyAgICBkZWYgdmlzaXRfVW5hcnlFeHByZXNzaW9uTm9kZShzZWxmLCBub2RlKToKKyAgICAgICAg
YXNzZXJ0IGxlbihub2RlLmNoaWxkcmVuKSA9PSAyCisgICAgICAgIG9wZXJhdG9yID0gc2VsZi52
aXNpdChub2RlLmNoaWxkcmVuWzBdKQorICAgICAgICBvcGVyYW5kID0gc2VsZi52aXNpdChub2Rl
LmNoaWxkcmVuWzFdKQorCisgICAgICAgIHJldHVybiBsYW1iZGEgeDogb3BlcmF0b3Iob3BlcmFu
ZCh4KSkKKworICAgIGRlZiB2aXNpdF9CaW5hcnlFeHByZXNzaW9uTm9kZShzZWxmLCBub2RlKToK
KyAgICAgICAgYXNzZXJ0IGxlbihub2RlLmNoaWxkcmVuKSA9PSAzCisgICAgICAgIG9wZXJhdG9y
ID0gc2VsZi52aXNpdChub2RlLmNoaWxkcmVuWzBdKQorICAgICAgICBvcGVyYW5kXzAgPSBzZWxm
LnZpc2l0KG5vZGUuY2hpbGRyZW5bMV0pCisgICAgICAgIG9wZXJhbmRfMSA9IHNlbGYudmlzaXQo
bm9kZS5jaGlsZHJlblsyXSkKKworICAgICAgICBhc3NlcnQgb3BlcmFuZF8wIGlzIG5vdCBOb25l
CisgICAgICAgIGFzc2VydCBvcGVyYW5kXzEgaXMgbm90IE5vbmUKKworICAgICAgICByZXR1cm4g
bGFtYmRhIHg6IG9wZXJhdG9yKG9wZXJhbmRfMCh4KSwgb3BlcmFuZF8xKHgpKQorCisgICAgZGVm
IHZpc2l0X1VuYXJ5T3BlcmF0b3JOb2RlKHNlbGYsIG5vZGUpOgorICAgICAgICByZXR1cm4geyJu
b3QiOiBvcGVyYXRvci5ub3RffVtub2RlLmRhdGFdCisKKyAgICBkZWYgdmlzaXRfQmluYXJ5T3Bl
cmF0b3JOb2RlKHNlbGYsIG5vZGUpOgorICAgICAgICByZXR1cm4geyJhbmQiOiBvcGVyYXRvci5h
bmRfLAorICAgICAgICAgICAgICAgICJvciI6IG9wZXJhdG9yLm9yXywKKyAgICAgICAgICAgICAg
ICAiPT0iOiBvcGVyYXRvci5lcSwKKyAgICAgICAgICAgICAgICAiIT0iOiBvcGVyYXRvci5uZX1b
bm9kZS5kYXRhXQorCisKK2NsYXNzIE1hbmlmZXN0SXRlbShvYmplY3QpOgorICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBub2RlPU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5ub2RlID0gbm9k
ZQorICAgICAgICBzZWxmLnBhcmVudCA9IE5vbmUKKyAgICAgICAgc2VsZi5jaGlsZHJlbiA9IFtd
CisgICAgICAgIHNlbGYuX2RhdGEgPSB7fQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAg
ICAgICByZXR1cm4gIjxNYW5pZmVzdEl0ZW0gJXM+IiAlIChzZWxmLm5vZGUuZGF0YSkKKworICAg
IGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICBydiA9IFtyZXByKHNlbGYpXQorICAgICAgICBm
b3IgaXRlbSBpbiBzZWxmLmNoaWxkcmVuOgorICAgICAgICAgICAgcnYuZXh0ZW5kKCIgICVzIiAl
IGxpbmUgZm9yIGxpbmUgaW4gc3RyKGl0ZW0pLnNwbGl0KCJcbiIpKQorICAgICAgICByZXR1cm4g
IlxuIi5qb2luKHJ2KQorCisgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBrZXkpOgorICAgICAg
ICByZXR1cm4ga2V5IGluIHNlbGYuX2RhdGEKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBpc19l
bXB0eShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fZGF0YToKKyAgICAgICAgICAgIHJldHVybiBG
YWxzZQorICAgICAgICByZXR1cm4gYWxsKGNoaWxkLmlzX2VtcHR5IGZvciBjaGlsZCBpbiBzZWxm
LmNoaWxkcmVuKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHJvb3Qoc2VsZik6CisgICAgICAg
IG5vZGUgPSBzZWxmCisgICAgICAgIHdoaWxlIG5vZGUucGFyZW50IGlzIG5vdCBOb25lOgorICAg
ICAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50CisgICAgICAgIHJldHVybiBub2RlCisKKyAgICBA
cHJvcGVydHkKKyAgICBkZWYgbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubm9kZS5k
YXRhCisKKyAgICBkZWYgaGFzX2tleShzZWxmLCBrZXkpOgorICAgICAgICBmb3Igbm9kZSBpbiBb
c2VsZiwgc2VsZi5yb290XToKKyAgICAgICAgICAgIGlmIGtleSBpbiBub2RlLl9kYXRhOgorICAg
ICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVm
IGdldChzZWxmLCBrZXksIHJ1bl9pbmZvPU5vbmUpOgorICAgICAgICBpZiBydW5faW5mbyBpcyBO
b25lOgorICAgICAgICAgICAgcnVuX2luZm8gPSB7fQorCisgICAgICAgIGZvciBub2RlIGluIFtz
ZWxmLCBzZWxmLnJvb3RdOgorICAgICAgICAgICAgaWYga2V5IGluIG5vZGUuX2RhdGE6CisgICAg
ICAgICAgICAgICAgZm9yIGNvbmRfdmFsdWUgaW4gbm9kZS5fZGF0YVtrZXldOgorICAgICAgICAg
ICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVzID0gY29uZF92
YWx1ZShydW5faW5mbykKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAg
ICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcyA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAg
IGlmIG1hdGNoZXM6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29uZF92YWx1ZS52
YWx1ZQorICAgICAgICByYWlzZSBLZXlFcnJvcgorCisgICAgZGVmIHNldChzZWxmLCBrZXksIHZh
bHVlLCBjb25kaXRpb249Tm9uZSk6CisgICAgICAgICMgRmlyc3QgdHJ5IHRvIHVwZGF0ZSB0aGUg
ZXhpc3RpbmcgdmFsdWUKKyAgICAgICAgaWYga2V5IGluIHNlbGYuX2RhdGE6CisgICAgICAgICAg
ICBjb25kX3ZhbHVlcyA9IHNlbGYuX2RhdGFba2V5XQorICAgICAgICAgICAgZm9yIGNvbmRfdmFs
dWUgaW4gY29uZF92YWx1ZXM6CisgICAgICAgICAgICAgICAgaWYgY29uZF92YWx1ZS5jb25kaXRp
b25fbm9kZSA9PSBjb25kaXRpb246CisgICAgICAgICAgICAgICAgICAgIGNvbmRfdmFsdWUudmFs
dWUgPSB2YWx1ZQorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICMgSWYg
dGhlcmUgaXNuJ3QgYSBjb25kaXRpb25hbCBtYXRjaCByZXVzZSB0aGUgZXhpc3RpbmcgS2V5VmFs
dWVOb2RlIGFzIHRoZQorICAgICAgICAgICAgIyBwYXJlbnQKKyAgICAgICAgICAgIG5vZGUgPSBO
b25lCisgICAgICAgICAgICBmb3IgY2hpbGQgaW4gc2VsZi5ub2RlLmNoaWxkcmVuOgorICAgICAg
ICAgICAgICAgIGlmIGNoaWxkLmRhdGEgPT0ga2V5OgorICAgICAgICAgICAgICAgICAgICBub2Rl
ID0gY2hpbGQKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGFzc2VydCBu
b2RlIGlzIG5vdCBOb25lCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG5vZGUgPSBLZXlW
YWx1ZU5vZGUoa2V5KQorICAgICAgICAgICAgc2VsZi5ub2RlLmFwcGVuZChub2RlKQorCisgICAg
ICAgIHZhbHVlX25vZGUgPSBWYWx1ZU5vZGUodmFsdWUpCisgICAgICAgIGlmIGNvbmRpdGlvbiBp
cyBub3QgTm9uZToKKyAgICAgICAgICAgIGNvbmRpdGlvbmFsX25vZGUgPSBDb25kaXRpb25hbE5v
ZGUoKQorICAgICAgICAgICAgY29uZGl0aW9uYWxfbm9kZS5hcHBlbmQoY29uZGl0aW9uKQorICAg
ICAgICAgICAgY29uZGl0aW9uYWxfbm9kZS5hcHBlbmQodmFsdWVfbm9kZSkKKyAgICAgICAgICAg
IG5vZGUuYXBwZW5kKGNvbmRpdGlvbmFsX25vZGUpCisgICAgICAgICAgICBjb25kX3ZhbHVlID0g
Q29tcGlsZXIoKS5jb21waWxlX2NvbmRpdGlvbihjb25kaXRpb25hbF9ub2RlKQorICAgICAgICBl
bHNlOgorICAgICAgICAgICAgbm9kZS5hcHBlbmQodmFsdWVfbm9kZSkKKyAgICAgICAgICAgIGNv
bmRfdmFsdWUgPSBDb25kaXRpb25hbFZhbHVlKHZhbHVlX25vZGUsIGxhbWJkYSB4OiBUcnVlKQor
CisgICAgICAgICMgVXBkYXRlIHRoZSBjYWNoZSBvZiBjaGlsZCB2YWx1ZXMuIFRoaXMgaXMgcHJl
dHR5IGFubm95aW5nIGFuZCBtYXliZQorICAgICAgICAjIGl0IHNob3VsZCBqdXN0IHdvcmsgZGly
ZWN0bHkgb24gdGhlIHRyZWUKKyAgICAgICAgaWYga2V5IG5vdCBpbiBzZWxmLl9kYXRhOgorICAg
ICAgICAgICAgc2VsZi5fZGF0YVtrZXldID0gW10KKyAgICAgICAgaWYgc2VsZi5fZGF0YVtrZXld
IGFuZCBzZWxmLl9kYXRhW2tleV1bLTFdLmNvbmRpdGlvbl9ub2RlIGlzIE5vbmU6CisgICAgICAg
ICAgICBzZWxmLl9kYXRhW2tleV0uaW5zZXJ0KGxlbihzZWxmLl9kYXRhW2tleV0pIC0gMSwgY29u
ZF92YWx1ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2RhdGFba2V5XS5hcHBl
bmQoY29uZF92YWx1ZSkKKworICAgIGRlZiBfYWRkX2tleV92YWx1ZShzZWxmLCBub2RlLCB2YWx1
ZXMpOgorICAgICAgICAiIiJDYWxsZWQgZHVyaW5nIGNvbnN0cnVjdGlvbiB0byBzZXQgYSBrZXkt
dmFsdWUgbm9kZSIiIgorICAgICAgICBzZWxmLl9kYXRhW25vZGUuZGF0YV0gPSB2YWx1ZXMKKwor
ICAgIGRlZiBhcHBlbmQoc2VsZiwgY2hpbGQpOgorICAgICAgICBzZWxmLmNoaWxkcmVuLmFwcGVu
ZChjaGlsZCkKKyAgICAgICAgY2hpbGQucGFyZW50ID0gc2VsZgorICAgICAgICBpZiBjaGlsZC5u
b2RlLnBhcmVudCAhPSBzZWxmLm5vZGU6CisgICAgICAgICAgICBzZWxmLm5vZGUuYXBwZW5kKGNo
aWxkLm5vZGUpCisgICAgICAgIHJldHVybiBjaGlsZAorCisgICAgZGVmIHJlbW92ZShzZWxmKToK
KyAgICAgICAgaWYgc2VsZi5wYXJlbnQ6CisgICAgICAgICAgICBzZWxmLnBhcmVudC5fcmVtb3Zl
X2NoaWxkKHNlbGYpCisKKyAgICBkZWYgX3JlbW92ZV9jaGlsZChzZWxmLCBjaGlsZCk6CisgICAg
ICAgIHNlbGYuY2hpbGRyZW4ucmVtb3ZlKGNoaWxkKQorICAgICAgICBjaGlsZC5wYXJlbnQgPSBO
b25lCisKKyAgICBkZWYgaXRlcmNoaWxkcmVuKHNlbGYsIG5hbWU9Tm9uZSk6CisgICAgICAgIGZv
ciBpdGVtIGluIHNlbGYuY2hpbGRyZW46CisgICAgICAgICAgICBpZiBpdGVtLm5hbWUgPT0gbmFt
ZSBvciBuYW1lIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgeWllbGQgaXRlbQorCisgICAgZGVm
IF9mbGF0dGVuKHNlbGYpOgorICAgICAgICBydiA9IHt9CisgICAgICAgIGZvciBub2RlIGluIFtz
ZWxmLCBzZWxmLnJvb3RdOgorICAgICAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIG5vZGUuX2Rh
dGEuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAgaWYgbmFtZSBub3QgaW4gcnY6CisgICAg
ICAgICAgICAgICAgICAgIHJ2W25hbWVdID0gdmFsdWUKKyAgICAgICAgcmV0dXJuIHJ2CisKKyAg
ICBkZWYgaXRlcml0ZW1zKHNlbGYpOgorICAgICAgICBmb3IgaXRlbSBpbiBzZWxmLl9mbGF0dGVu
KCkuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICB5aWVsZCBpdGVtCisKKyAgICBkZWYgaXRlcmtl
eXMoc2VsZik6CisgICAgICAgIGZvciBpdGVtIGluIHNlbGYuX2ZsYXR0ZW4oKS5pdGVya2V5cygp
OgorICAgICAgICAgICAgeWllbGQgaXRlbQorCisgICAgZGVmIHJlbW92ZV92YWx1ZShzZWxmLCBr
ZXksIHZhbHVlKToKKyAgICAgICAgc2VsZi5fZGF0YVtrZXldLnJlbW92ZSh2YWx1ZSkKKyAgICAg
ICAgaWYgbm90IHNlbGYuX2RhdGFba2V5XToKKyAgICAgICAgICAgIGRlbCBzZWxmLl9kYXRhW2tl
eV0KKyAgICAgICAgdmFsdWUucmVtb3ZlKCkKKworCitkZWYgY29tcGlsZV9hc3QoYXN0LCBkYXRh
X2Nsc19nZXR0ZXI9Tm9uZSwgKiprd2FyZ3MpOgorICAgIHJldHVybiBDb21waWxlcigpLmNvbXBp
bGUoYXN0LCBkYXRhX2Nsc19nZXR0ZXI9ZGF0YV9jbHNfZ2V0dGVyLCAqKmt3YXJncykKKworCitk
ZWYgY29tcGlsZShzdHJlYW0sIGRhdGFfY2xzX2dldHRlcj1Ob25lLCAqKmt3YXJncyk6CisgICAg
cmV0dXJuIGNvbXBpbGVfYXN0KHBhcnNlKHN0cmVhbSksCisgICAgICAgICAgICAgICAgICAgICAg
IGRhdGFfY2xzX2dldHRlcj1kYXRhX2Nsc19nZXR0ZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICoqa3dhcmdzKQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xz
L3dwdHJ1bm5lci93cHRydW5uZXIvd3B0bWFuaWZlc3QvYmFja2VuZHMvc3RhdGljLnB5IGIvV2Vi
RHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvd3B0bWFu
aWZlc3QvYmFja2VuZHMvc3RhdGljLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi5iM2NiZWRjMzgxOAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2lt
cG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3dwdG1hbmlmZXN0L2JhY2tlbmRz
L3N0YXRpYy5weQpAQCAtMCwwICsxLDIyMyBAQAoraW1wb3J0IG9wZXJhdG9yCisKK2Zyb20gLi5u
b2RlIGltcG9ydCBOb2RlVmlzaXRvcgorZnJvbSAuLnBhcnNlciBpbXBvcnQgcGFyc2UKKworCitj
bGFzcyBDb21waWxlcihOb2RlVmlzaXRvcik6CisgICAgIiIiQ29tcGlsZXIgYmFja2VuZCB0aGF0
IGV2YWx1YXRlcyBjb25kaXRpb25hbCBleHByZXNzaW9ucworICAgIHRvIGdpdmUgc3RhdGljIG91
dHB1dCIiIgorCisgICAgZGVmIGNvbXBpbGUoc2VsZiwgdHJlZSwgZXhwcl9kYXRhLCBkYXRhX2Ns
c19nZXR0ZXI9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICAiIiJDb21waWxlIGEgcmF3IEFTVCBp
bnRvIGEgZm9ybSB3aXRoIGNvbmRpdGlvbmFsIGV4cHJlc3Npb25zCisgICAgICAgIGV2YWx1YXRl
ZC4KKworICAgICAgICB0cmVlIC0gVGhlIHJvb3Qgbm9kZSBvZiB0aGUgd3B0bWFuaWZlc3QgQVNU
IHRvIGNvbXBpbGUKKworICAgICAgICBleHByX2RhdGEgLSBBIGRpY3Rpb25hcnkgb2Yga2V5IC8g
dmFsdWUgcGFpcnMgdG8gdXNlIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgZXZhbHVhdGluZyBj
b25kaXRpb25hbCBleHByZXNzaW9ucworCisgICAgICAgIGRhdGFfY2xzX2dldHRlciAtIEEgZnVu
Y3Rpb24gdGFraW5nIHR3byBwYXJhbWV0ZXJzOyB0aGUgcHJldmlvdXMKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgb3V0cHV0IG5vZGUgYW5kIHRoZSBjdXJyZW50IGFzdCBub2RlIGFuZCByZXR1
cm5pbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNsYXNzIG9mIHRoZSBvdXRwdXQg
bm9kZSB0byB1c2UgZm9yIHRoZSBjdXJyZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgIGFz
dCBub2RlCisgICAgICAgICIiIgorCisgICAgICAgIHNlbGYuX2t3YXJncyA9IGt3YXJncworICAg
ICAgICBzZWxmLmV4cHJfZGF0YSA9IGV4cHJfZGF0YQorCisgICAgICAgIGlmIGRhdGFfY2xzX2dl
dHRlciBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5kYXRhX2Nsc19nZXR0ZXIgPSBsYW1iZGEg
eCwgeTogTWFuaWZlc3RJdGVtCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmRhdGFf
Y2xzX2dldHRlciA9IGRhdGFfY2xzX2dldHRlcgorCisgICAgICAgIHNlbGYub3V0cHV0X25vZGUg
PSBOb25lCisgICAgICAgIHNlbGYudmlzaXQodHJlZSkKKyAgICAgICAgcmV0dXJuIHNlbGYub3V0
cHV0X25vZGUKKworICAgIGRlZiB2aXNpdF9EYXRhTm9kZShzZWxmLCBub2RlKToKKyAgICAgICAg
b3V0cHV0X3BhcmVudCA9IHNlbGYub3V0cHV0X25vZGUKKyAgICAgICAgaWYgc2VsZi5vdXRwdXRf
bm9kZSBpcyBOb25lOgorICAgICAgICAgICAgYXNzZXJ0IG5vZGUucGFyZW50IGlzIE5vbmUKKyAg
ICAgICAgICAgIHNlbGYub3V0cHV0X25vZGUgPSBzZWxmLmRhdGFfY2xzX2dldHRlcihOb25lLCBO
b25lKShOb25lLCAqKnNlbGYuX2t3YXJncykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNl
bGYub3V0cHV0X25vZGUgPSBzZWxmLmRhdGFfY2xzX2dldHRlcihzZWxmLm91dHB1dF9ub2RlLCBu
b2RlKShub2RlLmRhdGEpCisKKyAgICAgICAgZm9yIGNoaWxkIGluIG5vZGUuY2hpbGRyZW46Cisg
ICAgICAgICAgICBzZWxmLnZpc2l0KGNoaWxkKQorCisgICAgICAgIGlmIG91dHB1dF9wYXJlbnQg
aXMgbm90IE5vbmU6CisgICAgICAgICAgICBvdXRwdXRfcGFyZW50LmFwcGVuZChzZWxmLm91dHB1
dF9ub2RlKQorICAgICAgICAgICAgc2VsZi5vdXRwdXRfbm9kZSA9IHNlbGYub3V0cHV0X25vZGUu
cGFyZW50CisKKyAgICBkZWYgdmlzaXRfS2V5VmFsdWVOb2RlKHNlbGYsIG5vZGUpOgorICAgICAg
ICBrZXlfbmFtZSA9IG5vZGUuZGF0YQorICAgICAgICBrZXlfdmFsdWUgPSBOb25lCisgICAgICAg
IGZvciBjaGlsZCBpbiBub2RlLmNoaWxkcmVuOgorICAgICAgICAgICAgdmFsdWUgPSBzZWxmLnZp
c2l0KGNoaWxkKQorICAgICAgICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAgICAg
ICAgICAga2V5X3ZhbHVlID0gdmFsdWUKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBp
ZiBrZXlfdmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLm91dHB1dF9ub2RlLnNl
dChrZXlfbmFtZSwga2V5X3ZhbHVlKQorCisgICAgZGVmIHZpc2l0X1ZhbHVlTm9kZShzZWxmLCBu
b2RlKToKKyAgICAgICAgcmV0dXJuIG5vZGUuZGF0YQorCisgICAgZGVmIHZpc2l0X0F0b21Ob2Rl
KHNlbGYsIG5vZGUpOgorICAgICAgICByZXR1cm4gbm9kZS5kYXRhCisKKyAgICBkZWYgdmlzaXRf
TGlzdE5vZGUoc2VsZiwgbm9kZSk6CisgICAgICAgIHJldHVybiBbc2VsZi52aXNpdChjaGlsZCkg
Zm9yIGNoaWxkIGluIG5vZGUuY2hpbGRyZW5dCisKKyAgICBkZWYgdmlzaXRfQ29uZGl0aW9uYWxO
b2RlKHNlbGYsIG5vZGUpOgorICAgICAgICBhc3NlcnQgbGVuKG5vZGUuY2hpbGRyZW4pID09IDIK
KyAgICAgICAgaWYgc2VsZi52aXNpdChub2RlLmNoaWxkcmVuWzBdKToKKyAgICAgICAgICAgIHJl
dHVybiBzZWxmLnZpc2l0KG5vZGUuY2hpbGRyZW5bMV0pCisKKyAgICBkZWYgdmlzaXRfU3RyaW5n
Tm9kZShzZWxmLCBub2RlKToKKyAgICAgICAgdmFsdWUgPSBub2RlLmRhdGEKKyAgICAgICAgZm9y
IGNoaWxkIGluIG5vZGUuY2hpbGRyZW46CisgICAgICAgICAgICB2YWx1ZSA9IHNlbGYudmlzaXQo
Y2hpbGQpKHZhbHVlKQorICAgICAgICByZXR1cm4gdmFsdWUKKworICAgIGRlZiB2aXNpdF9OdW1i
ZXJOb2RlKHNlbGYsIG5vZGUpOgorICAgICAgICBpZiAiLiIgaW4gbm9kZS5kYXRhOgorICAgICAg
ICAgICAgcmV0dXJuIGZsb2F0KG5vZGUuZGF0YSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg
IHJldHVybiBpbnQobm9kZS5kYXRhKQorCisgICAgZGVmIHZpc2l0X1ZhcmlhYmxlTm9kZShzZWxm
LCBub2RlKToKKyAgICAgICAgdmFsdWUgPSBzZWxmLmV4cHJfZGF0YVtub2RlLmRhdGFdCisgICAg
ICAgIGZvciBjaGlsZCBpbiBub2RlLmNoaWxkcmVuOgorICAgICAgICAgICAgdmFsdWUgPSBzZWxm
LnZpc2l0KGNoaWxkKSh2YWx1ZSkKKyAgICAgICAgcmV0dXJuIHZhbHVlCisKKyAgICBkZWYgdmlz
aXRfSW5kZXhOb2RlKHNlbGYsIG5vZGUpOgorICAgICAgICBhc3NlcnQgbGVuKG5vZGUuY2hpbGRy
ZW4pID09IDEKKyAgICAgICAgaW5kZXggPSBzZWxmLnZpc2l0KG5vZGUuY2hpbGRyZW5bMF0pCisg
ICAgICAgIHJldHVybiBsYW1iZGEgeDogeFtpbmRleF0KKworICAgIGRlZiB2aXNpdF9VbmFyeUV4
cHJlc3Npb25Ob2RlKHNlbGYsIG5vZGUpOgorICAgICAgICBhc3NlcnQgbGVuKG5vZGUuY2hpbGRy
ZW4pID09IDIKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLnZpc2l0KG5vZGUuY2hpbGRyZW5bMF0p
CisgICAgICAgIG9wZXJhbmQgPSBzZWxmLnZpc2l0KG5vZGUuY2hpbGRyZW5bMV0pCisKKyAgICAg
ICAgcmV0dXJuIG9wZXJhdG9yKG9wZXJhbmQpCisKKyAgICBkZWYgdmlzaXRfQmluYXJ5RXhwcmVz
c2lvbk5vZGUoc2VsZiwgbm9kZSk6CisgICAgICAgIGFzc2VydCBsZW4obm9kZS5jaGlsZHJlbikg
PT0gMworICAgICAgICBvcGVyYXRvciA9IHNlbGYudmlzaXQobm9kZS5jaGlsZHJlblswXSkKKyAg
ICAgICAgb3BlcmFuZF8wID0gc2VsZi52aXNpdChub2RlLmNoaWxkcmVuWzFdKQorICAgICAgICBv
cGVyYW5kXzEgPSBzZWxmLnZpc2l0KG5vZGUuY2hpbGRyZW5bMl0pCisKKyAgICAgICAgcmV0dXJu
IG9wZXJhdG9yKG9wZXJhbmRfMCwgb3BlcmFuZF8xKQorCisgICAgZGVmIHZpc2l0X1VuYXJ5T3Bl
cmF0b3JOb2RlKHNlbGYsIG5vZGUpOgorICAgICAgICByZXR1cm4geyJub3QiOiBvcGVyYXRvci5u
b3RffVtub2RlLmRhdGFdCisKKyAgICBkZWYgdmlzaXRfQmluYXJ5T3BlcmF0b3JOb2RlKHNlbGYs
IG5vZGUpOgorICAgICAgICByZXR1cm4geyJhbmQiOiBvcGVyYXRvci5hbmRfLAorICAgICAgICAg
ICAgICAgICJvciI6IG9wZXJhdG9yLm9yXywKKyAgICAgICAgICAgICAgICAiPT0iOiBvcGVyYXRv
ci5lcSwKKyAgICAgICAgICAgICAgICAiIT0iOiBvcGVyYXRvci5uZX1bbm9kZS5kYXRhXQorCisK
K2NsYXNzIE1hbmlmZXN0SXRlbShvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1l
LCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYucGFyZW50ID0gTm9uZQorICAgICAgICBzZWxmLm5h
bWUgPSBuYW1lCisgICAgICAgIHNlbGYuY2hpbGRyZW4gPSBbXQorICAgICAgICBzZWxmLl9kYXRh
ID0ge30KKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICI8TWFuaWZl
c3RJdGVtICVzPiIgJSAoc2VsZi5uYW1lKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAg
ICAgIHJ2ID0gW3JlcHIoc2VsZildCisgICAgICAgIGZvciBpdGVtIGluIHNlbGYuY2hpbGRyZW46
CisgICAgICAgICAgICBydi5leHRlbmQoIiAgJXMiICUgbGluZSBmb3IgbGluZSBpbiBzdHIoaXRl
bSkuc3BsaXQoIlxuIikpCisgICAgICAgIHJldHVybiAiXG4iLmpvaW4ocnYpCisKKyAgICBkZWYg
c2V0X2RlZmF1bHRzKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBAcHJvcGVydHkKKyAgICBk
ZWYgaXNfZW1wdHkoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2RhdGE6CisgICAgICAgICAgICBy
ZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIGFsbChjaGlsZC5pc19lbXB0eSBmb3IgY2hpbGQg
aW4gc2VsZi5jaGlsZHJlbikKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiByb290KHNlbGYpOgor
ICAgICAgICBub2RlID0gc2VsZgorICAgICAgICB3aGlsZSBub2RlLnBhcmVudCBpcyBub3QgTm9u
ZToKKyAgICAgICAgICAgIG5vZGUgPSBub2RlLnBhcmVudAorICAgICAgICByZXR1cm4gbm9kZQor
CisgICAgZGVmIGhhc19rZXkoc2VsZiwga2V5KToKKyAgICAgICAgZm9yIG5vZGUgaW4gW3NlbGYs
IHNlbGYucm9vdF06CisgICAgICAgICAgICBpZiBrZXkgaW4gbm9kZS5fZGF0YToKKyAgICAgICAg
ICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBnZXQo
c2VsZiwga2V5KToKKyAgICAgICAgZm9yIG5vZGUgaW4gW3NlbGYsIHNlbGYucm9vdF06CisgICAg
ICAgICAgICBpZiBrZXkgaW4gbm9kZS5fZGF0YToKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9k
ZS5fZGF0YVtrZXldCisgICAgICAgIHJhaXNlIEtleUVycm9yCisKKyAgICBkZWYgc2V0KHNlbGYs
IG5hbWUsIHZhbHVlKToKKyAgICAgICAgc2VsZi5fZGF0YVtuYW1lXSA9IHZhbHVlCisKKyAgICBk
ZWYgcmVtb3ZlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnBhcmVudDoKKyAgICAgICAgICAgIHNl
bGYucGFyZW50Ll9yZW1vdmVfY2hpbGQoc2VsZikKKworICAgIGRlZiBfcmVtb3ZlX2NoaWxkKHNl
bGYsIGNoaWxkKToKKyAgICAgICAgc2VsZi5jaGlsZHJlbi5yZW1vdmUoY2hpbGQpCisgICAgICAg
IGNoaWxkLnBhcmVudCA9IE5vbmUKKworICAgIGRlZiBpdGVyY2hpbGRyZW4oc2VsZiwgbmFtZT1O
b25lKToKKyAgICAgICAgZm9yIGl0ZW0gaW4gc2VsZi5jaGlsZHJlbjoKKyAgICAgICAgICAgIGlm
IGl0ZW0ubmFtZSA9PSBuYW1lIG9yIG5hbWUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICB5aWVs
ZCBpdGVtCisKKyAgICBkZWYgX2ZsYXR0ZW4oc2VsZik6CisgICAgICAgIHJ2ID0ge30KKyAgICAg
ICAgZm9yIG5vZGUgaW4gW3NlbGYsIHNlbGYucm9vdF06CisgICAgICAgICAgICBmb3IgbmFtZSwg
dmFsdWUgaW4gbm9kZS5fZGF0YS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICBpZiBuYW1l
IG5vdCBpbiBydjoKKyAgICAgICAgICAgICAgICAgICAgcnZbbmFtZV0gPSB2YWx1ZQorICAgICAg
ICByZXR1cm4gcnYKKworICAgIGRlZiBpdGVyaXRlbXMoc2VsZik6CisgICAgICAgIGZvciBpdGVt
IGluIHNlbGYuX2ZsYXR0ZW4oKS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIHlpZWxkIGl0ZW0K
KworICAgIGRlZiBpdGVya2V5cyhzZWxmKToKKyAgICAgICAgZm9yIGl0ZW0gaW4gc2VsZi5fZmxh
dHRlbigpLml0ZXJrZXlzKCk6CisgICAgICAgICAgICB5aWVsZCBpdGVtCisKKyAgICBkZWYgaXRl
cnZhbHVlcyhzZWxmKToKKyAgICAgICAgZm9yIGl0ZW0gaW4gc2VsZi5fZmxhdHRlbigpLml0ZXJ2
YWx1ZXMoKToKKyAgICAgICAgICAgIHlpZWxkIGl0ZW0KKworICAgIGRlZiBhcHBlbmQoc2VsZiwg
Y2hpbGQpOgorICAgICAgICBjaGlsZC5wYXJlbnQgPSBzZWxmCisgICAgICAgIHNlbGYuY2hpbGRy
ZW4uYXBwZW5kKGNoaWxkKQorICAgICAgICByZXR1cm4gY2hpbGQKKworCitkZWYgY29tcGlsZV9h
c3QoYXN0LCBleHByX2RhdGEsIGRhdGFfY2xzX2dldHRlcj1Ob25lLCAqKmt3YXJncyk6CisgICAg
cmV0dXJuIENvbXBpbGVyKCkuY29tcGlsZShhc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBleHByX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX2Nsc19n
ZXR0ZXI9ZGF0YV9jbHNfZ2V0dGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKipr
d2FyZ3MpCisKKworZGVmIGNvbXBpbGUoc3RyZWFtLCBleHByX2RhdGEsIGRhdGFfY2xzX2dldHRl
cj1Ob25lLCAqKmt3YXJncyk6CisgICAgcmV0dXJuIGNvbXBpbGVfYXN0KHBhcnNlKHN0cmVhbSks
CisgICAgICAgICAgICAgICAgICAgICAgIGV4cHJfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgZGF0YV9jbHNfZ2V0dGVyPWRhdGFfY2xzX2dldHRlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgKiprd2FyZ3MpCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9v
bHMvd3B0cnVubmVyL3dwdHJ1bm5lci93cHRtYW5pZmVzdC9ub2RlLnB5IGIvV2ViRHJpdmVyVGVz
dHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvd3B0bWFuaWZlc3Qvbm9k
ZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMzNlOTc5NmM0MzAK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0
cnVubmVyL3dwdHJ1bm5lci93cHRtYW5pZmVzdC9ub2RlLnB5CkBAIC0wLDAgKzEsMTU3IEBACitj
bGFzcyBOb2RlVmlzaXRvcihvYmplY3QpOgorICAgIGRlZiB2aXNpdChzZWxmLCBub2RlKToKKyAg
ICAgICAgIyBUaGlzIGlzIHVnbHkgYXMgaGVsbCwgYnV0IHdlIGRvbid0IGhhdmUgbXVsdGltZXRo
b2RzIGFuZAorICAgICAgICAjIHRoZXkgYXJlbid0IHRyaXZpYWwgdG8gZmFrZSB3aXRob3V0IGFj
Y2VzcyB0byB0aGUgY2xhc3MKKyAgICAgICAgIyBvYmplY3QgZnJvbSB0aGUgY2xhc3MgYm9keQor
ICAgICAgICBmdW5jID0gZ2V0YXR0cihzZWxmLCAidmlzaXRfJXMiICUgKG5vZGUuX19jbGFzc19f
Ll9fbmFtZV9fKSkKKyAgICAgICAgcmV0dXJuIGZ1bmMobm9kZSkKKworCitjbGFzcyBOb2RlKG9i
amVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRhdGE9Tm9uZSk6CisgICAgICAgIHNlbGYu
ZGF0YSA9IGRhdGEKKyAgICAgICAgc2VsZi5wYXJlbnQgPSBOb25lCisgICAgICAgIHNlbGYuY2hp
bGRyZW4gPSBbXQorCisgICAgZGVmIGFwcGVuZChzZWxmLCBvdGhlcik6CisgICAgICAgIG90aGVy
LnBhcmVudCA9IHNlbGYKKyAgICAgICAgc2VsZi5jaGlsZHJlbi5hcHBlbmQob3RoZXIpCisKKyAg
ICBkZWYgcmVtb3ZlKHNlbGYpOgorICAgICAgICBzZWxmLnBhcmVudC5jaGlsZHJlbi5yZW1vdmUo
c2VsZikKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICI8JXMgJXM+
IiAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgc2VsZi5kYXRhKQorCisgICAgZGVmIF9fc3Ry
X18oc2VsZik6CisgICAgICAgIHJ2ID0gW3JlcHIoc2VsZildCisgICAgICAgIGZvciBpdGVtIGlu
IHNlbGYuY2hpbGRyZW46CisgICAgICAgICAgICBydi5leHRlbmQoIiAgJXMiICUgbGluZSBmb3Ig
bGluZSBpbiBzdHIoaXRlbSkuc3BsaXQoIlxuIikpCisgICAgICAgIHJldHVybiAiXG4iLmpvaW4o
cnYpCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IChzZWxm
Ll9fY2xhc3NfXyA9PSBvdGhlci5fX2NsYXNzX18gYW5kCisgICAgICAgICAgICAgICAgc2VsZi5k
YXRhID09IG90aGVyLmRhdGEgYW5kCisgICAgICAgICAgICAgICAgbGVuKHNlbGYuY2hpbGRyZW4p
ID09IGxlbihvdGhlci5jaGlsZHJlbikpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAg
ICAgIGZvciBjaGlsZCwgb3RoZXJfY2hpbGQgaW4gemlwKHNlbGYuY2hpbGRyZW4sIG90aGVyLmNo
aWxkcmVuKToKKyAgICAgICAgICAgIGlmIG5vdCBjaGlsZCA9PSBvdGhlcl9jaGlsZDoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBj
b3B5KHNlbGYpOgorICAgICAgICBuZXcgPSBzZWxmLl9fY2xhc3NfXyhzZWxmLmRhdGEpCisgICAg
ICAgIGZvciBpdGVtIGluIHNlbGYuY2hpbGRyZW46CisgICAgICAgICAgICBuZXcuYXBwZW5kKGl0
ZW0uY29weSgpKQorICAgICAgICByZXR1cm4gbmV3CisKKworY2xhc3MgRGF0YU5vZGUoTm9kZSk6
CisgICAgZGVmIGFwcGVuZChzZWxmLCBvdGhlcik6CisgICAgICAgICMgQXBwZW5kIHRoYXQgcmV0
YWlucyB0aGUgaW52YXJpYW50IHRoYXQgY2hpbGQgZGF0YSBub2RlcworICAgICAgICAjIGNvbWUg
YWZ0ZXIgY2hpbGQgbm9kZXMgb2Ygb3RoZXIgdHlwZXMKKyAgICAgICAgb3RoZXIucGFyZW50ID0g
c2VsZgorICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBEYXRhTm9kZSk6CisgICAgICAgICAg
ICBzZWxmLmNoaWxkcmVuLmFwcGVuZChvdGhlcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg
IGluZGV4ID0gbGVuKHNlbGYuY2hpbGRyZW4pCisgICAgICAgICAgICB3aGlsZSBpbmRleCA+IDAg
YW5kIGlzaW5zdGFuY2Uoc2VsZi5jaGlsZHJlbltpbmRleCAtIDFdLCBEYXRhTm9kZSk6CisgICAg
ICAgICAgICAgICAgaW5kZXggLT0gMQorICAgICAgICAgICAgZm9yIGkgaW4geHJhbmdlKGluZGV4
KToKKyAgICAgICAgICAgICAgICBhc3NlcnQgb3RoZXIuZGF0YSAhPSBzZWxmLmNoaWxkcmVuW2ld
LmRhdGEKKyAgICAgICAgICAgIHNlbGYuY2hpbGRyZW4uaW5zZXJ0KGluZGV4LCBvdGhlcikKKwor
CitjbGFzcyBLZXlWYWx1ZU5vZGUoTm9kZSk6CisgICAgZGVmIGFwcGVuZChzZWxmLCBvdGhlcik6
CisgICAgICAgICMgQXBwZW5kIHRoYXQgcmV0YWlucyB0aGUgaW52YXJpYW50IHRoYXQgY29uZGl0
aW9uYWwgbm9kZXMKKyAgICAgICAgIyBjb21lIGJlZm9yZSB1bmNvbmRpdGlvbmFsIG5vZGVzCisg
ICAgICAgIG90aGVyLnBhcmVudCA9IHNlbGYKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwg
VmFsdWVOb2RlKToKKyAgICAgICAgICAgIGlmIHNlbGYuY2hpbGRyZW46CisgICAgICAgICAgICAg
ICAgYXNzZXJ0IG5vdCBpc2luc3RhbmNlKHNlbGYuY2hpbGRyZW5bLTFdLCBWYWx1ZU5vZGUpCisg
ICAgICAgICAgICBzZWxmLmNoaWxkcmVuLmFwcGVuZChvdGhlcikKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIGlmIHNlbGYuY2hpbGRyZW4gYW5kIGlzaW5zdGFuY2Uoc2VsZi5jaGlsZHJlblst
MV0sIFZhbHVlTm9kZSk6CisgICAgICAgICAgICAgICAgc2VsZi5jaGlsZHJlbi5pbnNlcnQobGVu
KHNlbGYuY2hpbGRyZW4pIC0gMSwgb3RoZXIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgICAgIHNlbGYuY2hpbGRyZW4uYXBwZW5kKG90aGVyKQorCisKK2NsYXNzIExpc3ROb2RlKE5v
ZGUpOgorICAgIGRlZiBhcHBlbmQoc2VsZiwgb3RoZXIpOgorICAgICAgICBvdGhlci5wYXJlbnQg
PSBzZWxmCisgICAgICAgIHNlbGYuY2hpbGRyZW4uYXBwZW5kKG90aGVyKQorCisKK2NsYXNzIFZh
bHVlTm9kZShOb2RlKToKKyAgICBkZWYgYXBwZW5kKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmFp
c2UgVHlwZUVycm9yCisKKworY2xhc3MgQXRvbU5vZGUoVmFsdWVOb2RlKToKKyAgICBwYXNzCisK
KworY2xhc3MgQ29uZGl0aW9uYWxOb2RlKE5vZGUpOgorICAgIHBhc3MKKworCitjbGFzcyBVbmFy
eUV4cHJlc3Npb25Ob2RlKE5vZGUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvcGVyYXRvciwg
b3BlcmFuZCk6CisgICAgICAgIE5vZGUuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5hcHBl
bmQob3BlcmF0b3IpCisgICAgICAgIHNlbGYuYXBwZW5kKG9wZXJhbmQpCisKKyAgICBkZWYgYXBw
ZW5kKHNlbGYsIG90aGVyKToKKyAgICAgICAgTm9kZS5hcHBlbmQoc2VsZiwgb3RoZXIpCisgICAg
ICAgIGFzc2VydCBsZW4oc2VsZi5jaGlsZHJlbikgPD0gMgorCisgICAgZGVmIGNvcHkoc2VsZik6
CisgICAgICAgIG5ldyA9IHNlbGYuX19jbGFzc19fKHNlbGYuY2hpbGRyZW5bMF0uY29weSgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNoaWxkcmVuWzFdLmNvcHkoKSkKKyAg
ICAgICAgcmV0dXJuIG5ldworCisKK2NsYXNzIEJpbmFyeUV4cHJlc3Npb25Ob2RlKE5vZGUpOgor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvcGVyYXRvciwgb3BlcmFuZF8wLCBvcGVyYW5kXzEpOgor
ICAgICAgICBOb2RlLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuYXBwZW5kKG9wZXJhdG9y
KQorICAgICAgICBzZWxmLmFwcGVuZChvcGVyYW5kXzApCisgICAgICAgIHNlbGYuYXBwZW5kKG9w
ZXJhbmRfMSkKKworICAgIGRlZiBhcHBlbmQoc2VsZiwgb3RoZXIpOgorICAgICAgICBOb2RlLmFw
cGVuZChzZWxmLCBvdGhlcikKKyAgICAgICAgYXNzZXJ0IGxlbihzZWxmLmNoaWxkcmVuKSA8PSAz
CisKKyAgICBkZWYgY29weShzZWxmKToKKyAgICAgICAgbmV3ID0gc2VsZi5fX2NsYXNzX18oc2Vs
Zi5jaGlsZHJlblswXS5jb3B5KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYu
Y2hpbGRyZW5bMV0uY29weSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNo
aWxkcmVuWzJdLmNvcHkoKSkKKyAgICAgICAgcmV0dXJuIG5ldworCisKK2NsYXNzIFVuYXJ5T3Bl
cmF0b3JOb2RlKE5vZGUpOgorICAgIGRlZiBhcHBlbmQoc2VsZiwgb3RoZXIpOgorICAgICAgICBy
YWlzZSBUeXBlRXJyb3IKKworCitjbGFzcyBCaW5hcnlPcGVyYXRvck5vZGUoTm9kZSk6CisgICAg
ZGVmIGFwcGVuZChzZWxmLCBvdGhlcik6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcgorCisKK2Ns
YXNzIEluZGV4Tm9kZShOb2RlKToKKyAgICBwYXNzCisKKworY2xhc3MgVmFyaWFibGVOb2RlKE5v
ZGUpOgorICAgIHBhc3MKKworCitjbGFzcyBTdHJpbmdOb2RlKE5vZGUpOgorICAgIHBhc3MKKwor
CitjbGFzcyBOdW1iZXJOb2RlKFZhbHVlTm9kZSk6CisgICAgcGFzcwpkaWZmIC0tZ2l0IGEvV2Vi
RHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvd3B0bWFu
aWZlc3QvcGFyc2VyLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1
bm5lci93cHRydW5uZXIvd3B0bWFuaWZlc3QvcGFyc2VyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwLi5kODRhOTE0M2ZhNgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRy
aXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3dwdG1hbmlm
ZXN0L3BhcnNlci5weQpAQCAtMCwwICsxLDc0NiBAQAorI2RlZmF1bHRfdmFsdWU6Zm9vCisjaW5j
bHVkZTogb3RoZXIubWFuaWZlc3QKKyMKKyNbdGVzdF9uYW1lLmpzXQorIyAgZXhwZWN0ZWQ6IEVS
Uk9SCisjCisjICBbc3VidGVzdCAxXQorIyAgICBleHBlY3RlZDoKKyMgICAgICBvcyA9PSB3aW46
IEZBSUwgI1RoaXMgaXMgYSBjb21tZW50CisjICAgICAgUEFTUworIworCisjIFRPRE86IGtlZXAg
Y29tbWVudHMgaW4gdGhlIHRyZWUKKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB1bmljb2RlX2xp
dGVyYWxzCisKK2ltcG9ydCB0eXBlcworZnJvbSBjU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCisK
K2Zyb20gbm9kZSBpbXBvcnQgKgorCisKK2NsYXNzIFBhcnNlRXJyb3IoRXhjZXB0aW9uKToKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIGxpbmUsIGRldGFpbCk6CisgICAgICAgIHNl
bGYubGluZSA9IGxpbmUKKyAgICAgICAgc2VsZi5maWxlbmFtZSA9IGZpbGVuYW1lCisgICAgICAg
IHNlbGYuZGV0YWlsID0gZGV0YWlsCisgICAgICAgIHNlbGYubWVzc2FnZSA9ICIlczogJXMgbGlu
ZSAlcyIgJSAoc2VsZi5kZXRhaWwsIHNlbGYuZmlsZW5hbWUsIHNlbGYubGluZSkKKyAgICAgICAg
RXhjZXB0aW9uLl9faW5pdF9fKHNlbGYsIHNlbGYubWVzc2FnZSkKKworZW9sID0gb2JqZWN0Citn
cm91cF9zdGFydCA9IG9iamVjdAorZ3JvdXBfZW5kID0gb2JqZWN0CitkaWdpdHMgPSAiMDEyMzQ1
Njc4OSIKK29wZW5fcGFyZW5zID0gIlsoIgorY2xvc2VfcGFyZW5zID0gIl0pIgorcGFyZW5zID0g
b3Blbl9wYXJlbnMgKyBjbG9zZV9wYXJlbnMKK29wZXJhdG9yX2NoYXJzID0gIj0hIgorCit1bmFy
eV9vcGVyYXRvcnMgPSBbIm5vdCJdCitiaW5hcnlfb3BlcmF0b3JzID0gWyI9PSIsICIhPSIsICJh
bmQiLCAib3IiXQorCitvcGVyYXRvcnMgPSBbIj09IiwgIiE9IiwgIm5vdCIsICJhbmQiLCAib3Ii
XQorCithdG9tcyA9IHsiVHJ1ZSI6IFRydWUsCisgICAgICAgICAiRmFsc2UiOiBGYWxzZSwKKyAg
ICAgICAgICJSZXNldCI6IG9iamVjdCgpfQorCitkZWYgZGVjb2RlKHMpOgorICAgIGFzc2VydCBp
c2luc3RhbmNlKHMsIHVuaWNvZGUpCisgICAgcmV0dXJuIHMKKworCitkZWYgcHJlY2VkZW5jZShv
cGVyYXRvcl9ub2RlKToKKyAgICByZXR1cm4gbGVuKG9wZXJhdG9ycykgLSBvcGVyYXRvcnMuaW5k
ZXgob3BlcmF0b3Jfbm9kZS5kYXRhKQorCisKK2NsYXNzIFRva2VuVHlwZXMob2JqZWN0KToKKyAg
ICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIGZvciB0eXBlIGluIFsiZ3JvdXBfc3RhcnQi
LCAiZ3JvdXBfZW5kIiwgInBhcmVuIiwgImxpc3Rfc3RhcnQiLCAibGlzdF9lbmQiLCAic2VwYXJh
dG9yIiwgImlkZW50IiwgInN0cmluZyIsICJudW1iZXIiLCAiYXRvbSIsICJlb2YiXToKKyAgICAg
ICAgICAgIHNldGF0dHIoc2VsZiwgdHlwZSwgdHlwZSkKKwordG9rZW5fdHlwZXMgPSBUb2tlblR5
cGVzKCkKKworCitjbGFzcyBUb2tlbml6ZXIob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2Vs
Zik6CisgICAgICAgIHNlbGYucmVzZXQoKQorCisgICAgZGVmIHJlc2V0KHNlbGYpOgorICAgICAg
ICBzZWxmLmluZGVudF9sZXZlbHMgPSBbMF0KKyAgICAgICAgc2VsZi5zdGF0ZSA9IHNlbGYubGlu
ZV9zdGFydF9zdGF0ZQorICAgICAgICBzZWxmLm5leHRfc3RhdGUgPSBzZWxmLmRhdGFfbGluZV9z
dGF0ZQorICAgICAgICBzZWxmLmxpbmVfbnVtYmVyID0gMAorCisgICAgZGVmIHRva2VuaXplKHNl
bGYsIHN0cmVhbSk6CisgICAgICAgIHNlbGYucmVzZXQoKQorICAgICAgICBhc3NlcnQgbm90IGlz
aW5zdGFuY2Uoc3RyZWFtLCB1bmljb2RlKQorICAgICAgICBpZiBpc2luc3RhbmNlKHN0cmVhbSwg
c3RyKToKKyAgICAgICAgICAgIHN0cmVhbSA9IFN0cmluZ0lPKHN0cmVhbSkKKyAgICAgICAgaWYg
bm90IGhhc2F0dHIoc3RyZWFtLCAibmFtZSIpOgorICAgICAgICAgICAgc2VsZi5maWxlbmFtZSA9
ICIiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZpbGVuYW1lID0gc3RyZWFtLm5h
bWUKKworICAgICAgICBzZWxmLm5leHRfbGluZV9zdGF0ZSA9IHNlbGYubGluZV9zdGFydF9zdGF0
ZQorICAgICAgICBmb3IgaSwgbGluZSBpbiBlbnVtZXJhdGUoc3RyZWFtKToKKyAgICAgICAgICAg
IGFzc2VydCBpc2luc3RhbmNlKGxpbmUsIHN0cikKKyAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBz
ZWxmLm5leHRfbGluZV9zdGF0ZQorICAgICAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgaXMgbm90
IE5vbmUKKyAgICAgICAgICAgIHN0YXRlcyA9IFtdCisgICAgICAgICAgICBzZWxmLm5leHRfbGlu
ZV9zdGF0ZSA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYubGluZV9udW1iZXIgPSBpICsgMQorICAg
ICAgICAgICAgc2VsZi5pbmRleCA9IDAKKyAgICAgICAgICAgIHNlbGYubGluZSA9IGxpbmUuZGVj
b2RlKCd1dGYtOCcpLnJzdHJpcCgpCisgICAgICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShzZWxm
LmxpbmUsIHVuaWNvZGUpCisgICAgICAgICAgICB3aGlsZSBzZWxmLnN0YXRlICE9IHNlbGYuZW9s
X3N0YXRlOgorICAgICAgICAgICAgICAgIHN0YXRlcy5hcHBlbmQoc2VsZi5zdGF0ZSkKKyAgICAg
ICAgICAgICAgICB0b2tlbnMgPSBzZWxmLnN0YXRlKCkKKyAgICAgICAgICAgICAgICBpZiB0b2tl
bnM6CisgICAgICAgICAgICAgICAgICAgIGZvciB0b2tlbiBpbiB0b2tlbnM6CisgICAgICAgICAg
ICAgICAgICAgICAgICB5aWVsZCB0b2tlbgorICAgICAgICAgICAgc2VsZi5zdGF0ZSgpCisgICAg
ICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB5aWVsZCAodG9rZW5fdHlwZXMuZW9mLCBOb25l
KQorCisgICAgZGVmIGNoYXIoc2VsZik6CisgICAgICAgIGlmIHNlbGYuaW5kZXggPT0gbGVuKHNl
bGYubGluZSk6CisgICAgICAgICAgICByZXR1cm4gZW9sCisgICAgICAgIHJldHVybiBzZWxmLmxp
bmVbc2VsZi5pbmRleF0KKworICAgIGRlZiBjb25zdW1lKHNlbGYpOgorICAgICAgICBpZiBzZWxm
LmluZGV4IDwgbGVuKHNlbGYubGluZSk6CisgICAgICAgICAgICBzZWxmLmluZGV4ICs9IDEKKwor
ICAgIGRlZiBwZWVrKHNlbGYsIGxlbmd0aCk6CisgICAgICAgIHJldHVybiBzZWxmLmxpbmVbc2Vs
Zi5pbmRleDpzZWxmLmluZGV4ICsgbGVuZ3RoXQorCisgICAgZGVmIHNraXBfd2hpdGVzcGFjZShz
ZWxmKToKKyAgICAgICAgd2hpbGUgc2VsZi5jaGFyKCkgPT0gIiAiOgorICAgICAgICAgICAgc2Vs
Zi5jb25zdW1lKCkKKworICAgIGRlZiBlb2xfc3RhdGUoc2VsZik6CisgICAgICAgIGlmIHNlbGYu
bmV4dF9saW5lX3N0YXRlIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLm5leHRfbGluZV9zdGF0
ZSA9IHNlbGYubGluZV9zdGFydF9zdGF0ZQorCisgICAgZGVmIGxpbmVfc3RhcnRfc3RhdGUoc2Vs
Zik6CisgICAgICAgIHNlbGYuc2tpcF93aGl0ZXNwYWNlKCkKKyAgICAgICAgaWYgc2VsZi5jaGFy
KCkgPT0gZW9sOgorICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IHNlbGYuZW9sX3N0YXRlCisgICAg
ICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgc2VsZi5pbmRleCA+IHNlbGYuaW5kZW50X2xldmVs
c1stMV06CisgICAgICAgICAgICBzZWxmLmluZGVudF9sZXZlbHMuYXBwZW5kKHNlbGYuaW5kZXgp
CisgICAgICAgICAgICB5aWVsZCAodG9rZW5fdHlwZXMuZ3JvdXBfc3RhcnQsIE5vbmUpCisgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICB3aGlsZSBzZWxmLmluZGV4IDwgc2VsZi5pbmRlbnRfbGV2
ZWxzWy0xXToKKyAgICAgICAgICAgICAgICBzZWxmLmluZGVudF9sZXZlbHMucG9wKCkKKyAgICAg
ICAgICAgICAgICB5aWVsZCAodG9rZW5fdHlwZXMuZ3JvdXBfZW5kLCBOb25lKQorICAgICAgICAg
ICAgICAgICMgVGhpcyBpcyB0ZXJyaWJsZTsgaWYgd2Ugd2VyZSBwYXJzaW5nIGFuIGV4cHJlc3Np
b24KKyAgICAgICAgICAgICAgICAjIHRoZW4gdGhlIG5leHRfc3RhdGUgd2lsbCBiZSBleHByX29y
X3ZhbHVlIGJ1dCB3aGVuIHdlIGRlaW5kZW50CisgICAgICAgICAgICAgICAgIyBpdCBtdXN0IGFs
d2F5cyBiZSBhIGhlYWRpbmcgb3Iga2V5IG5leHQgc28gd2UgZ28gYmFjayB0byBkYXRhX2xpbmVf
c3RhdGUKKyAgICAgICAgICAgICAgICBzZWxmLm5leHRfc3RhdGUgPSBzZWxmLmRhdGFfbGluZV9z
dGF0ZQorICAgICAgICAgICAgaWYgc2VsZi5pbmRleCAhPSBzZWxmLmluZGVudF9sZXZlbHNbLTFd
OgorICAgICAgICAgICAgICAgIHJhaXNlIFBhcnNlRXJyb3Ioc2VsZi5maWxlbmFtZSwgc2VsZi5s
aW5lX251bWJlciwgIlVuZXhwZWN0ZWQgaW5kZW50IikKKworICAgICAgICBzZWxmLnN0YXRlID0g
c2VsZi5uZXh0X3N0YXRlCisKKyAgICBkZWYgZGF0YV9saW5lX3N0YXRlKHNlbGYpOgorICAgICAg
ICBpZiBzZWxmLmNoYXIoKSA9PSAiWyI6CisgICAgICAgICAgICB5aWVsZCAodG9rZW5fdHlwZXMu
cGFyZW4sIHNlbGYuY2hhcigpKQorICAgICAgICAgICAgc2VsZi5jb25zdW1lKCkKKyAgICAgICAg
ICAgIHNlbGYuc3RhdGUgPSBzZWxmLmhlYWRpbmdfc3RhdGUKKyAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgIHNlbGYuc3RhdGUgPSBzZWxmLmtleV9zdGF0ZQorCisgICAgZGVmIGhlYWRpbmdfc3Rh
dGUoc2VsZik6CisgICAgICAgIHJ2ID0gIiIKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAg
ICAgIGMgPSBzZWxmLmNoYXIoKQorICAgICAgICAgICAgaWYgYyA9PSAiXFwiOgorICAgICAgICAg
ICAgICAgIHJ2ICs9IHNlbGYuY29uc3VtZV9lc2NhcGUoKQorICAgICAgICAgICAgZWxpZiBjID09
ICJdIjoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxpZiBjID09IGVvbDoK
KyAgICAgICAgICAgICAgICByYWlzZSBQYXJzZUVycm9yKHNlbGYuZmlsZW5hbWUsIHNlbGYubGlu
ZV9udW1iZXIsICJFT0wgaW4gaGVhZGluZyIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgICAgIHJ2ICs9IGMKKyAgICAgICAgICAgICAgICBzZWxmLmNvbnN1bWUoKQorCisgICAgICAg
IHlpZWxkICh0b2tlbl90eXBlcy5zdHJpbmcsIGRlY29kZShydikpCisgICAgICAgIHlpZWxkICh0
b2tlbl90eXBlcy5wYXJlbiwgIl0iKQorICAgICAgICBzZWxmLmNvbnN1bWUoKQorICAgICAgICBz
ZWxmLnN0YXRlID0gc2VsZi5saW5lX2VuZF9zdGF0ZQorICAgICAgICBzZWxmLm5leHRfc3RhdGUg
PSBzZWxmLmRhdGFfbGluZV9zdGF0ZQorCisgICAgZGVmIGtleV9zdGF0ZShzZWxmKToKKyAgICAg
ICAgcnYgPSAiIgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgYyA9IHNlbGYuY2hh
cigpCisgICAgICAgICAgICBpZiBjID09ICIgIjoKKyAgICAgICAgICAgICAgICBzZWxmLnNraXBf
d2hpdGVzcGFjZSgpCisgICAgICAgICAgICAgICAgaWYgc2VsZi5jaGFyKCkgIT0gIjoiOgorICAg
ICAgICAgICAgICAgICAgICByYWlzZSBQYXJzZUVycm9yKHNlbGYuZmlsZW5hbWUsIHNlbGYubGlu
ZV9udW1iZXIsICJTcGFjZSBpbiBrZXkgbmFtZSIpCisgICAgICAgICAgICAgICAgYnJlYWsKKyAg
ICAgICAgICAgIGVsaWYgYyA9PSAiOiI6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAg
ICAgIGVsaWYgYyA9PSBlb2w6CisgICAgICAgICAgICAgICAgcmFpc2UgUGFyc2VFcnJvcihzZWxm
LmZpbGVuYW1lLCBzZWxmLmxpbmVfbnVtYmVyLCAiRU9MIGluIGtleSBuYW1lIChtaXNzaW5nICc6
Jz8pIikKKyAgICAgICAgICAgIGVsaWYgYyA9PSAiXFwiOgorICAgICAgICAgICAgICAgIHJ2ICs9
IHNlbGYuY29uc3VtZV9lc2NhcGUoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAg
ICBydiArPSBjCisgICAgICAgICAgICAgICAgc2VsZi5jb25zdW1lKCkKKyAgICAgICAgeWllbGQg
KHRva2VuX3R5cGVzLnN0cmluZywgZGVjb2RlKHJ2KSkKKyAgICAgICAgeWllbGQgKHRva2VuX3R5
cGVzLnNlcGFyYXRvciwgIjoiKQorICAgICAgICBzZWxmLmNvbnN1bWUoKQorICAgICAgICBzZWxm
LnN0YXRlID0gc2VsZi5hZnRlcl9rZXlfc3RhdGUKKworICAgIGRlZiBhZnRlcl9rZXlfc3RhdGUo
c2VsZik6CisgICAgICAgIHNlbGYuc2tpcF93aGl0ZXNwYWNlKCkKKyAgICAgICAgYyA9IHNlbGYu
Y2hhcigpCisgICAgICAgIGlmIGMgPT0gIiMiOgorICAgICAgICAgICAgc2VsZi5uZXh0X3N0YXRl
ID0gc2VsZi5leHByX29yX3ZhbHVlX3N0YXRlCisgICAgICAgICAgICBzZWxmLnN0YXRlID0gc2Vs
Zi5jb21tZW50X3N0YXRlCisgICAgICAgIGVsaWYgYyA9PSBlb2w6CisgICAgICAgICAgICBzZWxm
Lm5leHRfc3RhdGUgPSBzZWxmLmV4cHJfb3JfdmFsdWVfc3RhdGUKKyAgICAgICAgICAgIHNlbGYu
c3RhdGUgPSBzZWxmLmVvbF9zdGF0ZQorICAgICAgICBlbGlmIGMgPT0gIlsiOgorICAgICAgICAg
ICAgc2VsZi5zdGF0ZSA9IHNlbGYubGlzdF9zdGFydF9zdGF0ZQorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgc2VsZi5zdGF0ZSA9IHNlbGYudmFsdWVfc3RhdGUKKworICAgIGRlZiBsaXN0X3N0
YXJ0X3N0YXRlKHNlbGYpOgorICAgICAgICB5aWVsZCAodG9rZW5fdHlwZXMubGlzdF9zdGFydCwg
IlsiKQorICAgICAgICBzZWxmLmNvbnN1bWUoKQorICAgICAgICBzZWxmLnN0YXRlID0gc2VsZi5s
aXN0X3ZhbHVlX3N0YXJ0X3N0YXRlCisKKyAgICBkZWYgbGlzdF92YWx1ZV9zdGFydF9zdGF0ZShz
ZWxmKToKKyAgICAgICAgc2VsZi5za2lwX3doaXRlc3BhY2UoKQorICAgICAgICBpZiBzZWxmLmNo
YXIoKSA9PSAiXSI6CisgICAgICAgICAgICBzZWxmLnN0YXRlID0gc2VsZi5saXN0X2VuZF9zdGF0
ZQorICAgICAgICBlbGlmIHNlbGYuY2hhcigpIGluICgiJyIsICciJyk6CisgICAgICAgICAgICBx
dW90ZV9jaGFyID0gc2VsZi5jaGFyKCkKKyAgICAgICAgICAgIHNlbGYuY29uc3VtZSgpCisgICAg
ICAgICAgICB5aWVsZCAodG9rZW5fdHlwZXMuc3RyaW5nLCBzZWxmLmNvbnN1bWVfc3RyaW5nKHF1
b3RlX2NoYXIpKQorICAgICAgICAgICAgc2VsZi5za2lwX3doaXRlc3BhY2UoKQorICAgICAgICAg
ICAgaWYgc2VsZi5jaGFyKCkgPT0gIl0iOgorICAgICAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBz
ZWxmLmxpc3RfZW5kX3N0YXRlCisgICAgICAgICAgICBlbGlmIHNlbGYuY2hhcigpICE9ICIsIjoK
KyAgICAgICAgICAgICAgICByYWlzZSBQYXJzZUVycm9yKHNlbGYuZmlsZW5hbWUsIHNlbGYubGlu
ZV9udW1iZXIsICJKdW5rIGFmdGVyIHF1b3RlZCBzdHJpbmciKQorICAgICAgICAgICAgc2VsZi5j
b25zdW1lKCkKKyAgICAgICAgZWxpZiBzZWxmLmNoYXIoKSA9PSAiIyI6CisgICAgICAgICAgICBz
ZWxmLnN0YXRlID0gc2VsZi5jb21tZW50X3N0YXRlCisgICAgICAgICAgICBzZWxmLm5leHRfbGlu
ZV9zdGF0ZSA9IHNlbGYubGlzdF92YWx1ZV9zdGFydF9zdGF0ZQorICAgICAgICBlbGlmIHNlbGYu
Y2hhcigpID09IGVvbDoKKyAgICAgICAgICAgIHNlbGYubmV4dF9saW5lX3N0YXRlID0gc2VsZi5s
aXN0X3ZhbHVlX3N0YXJ0X3N0YXRlCisgICAgICAgICAgICBzZWxmLnN0YXRlID0gc2VsZi5lb2xf
c3RhdGUKKyAgICAgICAgZWxpZiBzZWxmLmNoYXIoKSA9PSAiLCI6CisgICAgICAgICAgICByYWlz
ZSBQYXJzZUVycm9yKHNlbGYuZmlsZW5hbWUsIHNlbGYubGluZV9udW1iZXIsICJMaXN0IGl0ZW0g
c3RhcnRlZCB3aXRoIHNlcGFyYXRvciIpCisgICAgICAgIGVsaWYgc2VsZi5jaGFyKCkgPT0gIkAi
OgorICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IHNlbGYubGlzdF92YWx1ZV9hdG9tX3N0YXRlCisg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnN0YXRlID0gc2VsZi5saXN0X3ZhbHVlX3N0
YXRlCisKKyAgICBkZWYgbGlzdF92YWx1ZV9zdGF0ZShzZWxmKToKKyAgICAgICAgcnYgPSAiIgor
ICAgICAgICBzcGFjZXMgPSAwCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBjID0g
c2VsZi5jaGFyKCkKKyAgICAgICAgICAgIGlmIGMgPT0gIlxcIjoKKyAgICAgICAgICAgICAgICBl
c2NhcGUgPSBzZWxmLmNvbnN1bWVfZXNjYXBlKCkKKyAgICAgICAgICAgICAgICBydiArPSBlc2Nh
cGUKKyAgICAgICAgICAgIGVsaWYgYyA9PSBlb2w6CisgICAgICAgICAgICAgICAgcmFpc2UgUGFy
c2VFcnJvcihzZWxmLmZpbGVuYW1lLCBzZWxmLmxpbmVfbnVtYmVyLCAiRU9MIGluIGxpc3QgdmFs
dWUiKQorICAgICAgICAgICAgZWxpZiBjID09ICIjIjoKKyAgICAgICAgICAgICAgICByYWlzZSBQ
YXJzZUVycm9yKHNlbGYuZmlsZW5hbWUsIHNlbGYubGluZV9udW1iZXIsICJFT0wgaW4gbGlzdCB2
YWx1ZSAoY29tbWVudCkiKQorICAgICAgICAgICAgZWxpZiBjID09ICIsIjoKKyAgICAgICAgICAg
ICAgICBzZWxmLnN0YXRlID0gc2VsZi5saXN0X3ZhbHVlX3N0YXJ0X3N0YXRlCisgICAgICAgICAg
ICAgICAgc2VsZi5jb25zdW1lKCkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAg
ZWxpZiBjID09ICIgIjoKKyAgICAgICAgICAgICAgICBzcGFjZXMgKz0gMQorICAgICAgICAgICAg
ICAgIHNlbGYuY29uc3VtZSgpCisgICAgICAgICAgICBlbGlmIGMgPT0gIl0iOgorICAgICAgICAg
ICAgICAgIHNlbGYuc3RhdGUgPSBzZWxmLmxpc3RfZW5kX3N0YXRlCisgICAgICAgICAgICAgICAg
c2VsZi5jb25zdW1lKCkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToK
KyAgICAgICAgICAgICAgICBydiArPSAiICIgKiBzcGFjZXMKKyAgICAgICAgICAgICAgICBzcGFj
ZXMgPSAwCisgICAgICAgICAgICAgICAgcnYgKz0gYworICAgICAgICAgICAgICAgIHNlbGYuY29u
c3VtZSgpCisKKyAgICAgICAgaWYgcnY6CisgICAgICAgICAgICB5aWVsZCAodG9rZW5fdHlwZXMu
c3RyaW5nLCBkZWNvZGUocnYpKQorCisgICAgZGVmIGxpc3RfdmFsdWVfYXRvbV9zdGF0ZShzZWxm
KToKKyAgICAgICAgc2VsZi5jb25zdW1lKCkKKyAgICAgICAgZm9yIF8sIHZhbHVlIGluIHNlbGYu
bGlzdF92YWx1ZV9zdGF0ZSgpOgorICAgICAgICAgICAgeWllbGQgdG9rZW5fdHlwZXMuYXRvbSwg
dmFsdWUKKworICAgIGRlZiBsaXN0X2VuZF9zdGF0ZShzZWxmKToKKyAgICAgICAgc2VsZi5jb25z
dW1lKCkKKyAgICAgICAgeWllbGQgKHRva2VuX3R5cGVzLmxpc3RfZW5kLCAiXSIpCisgICAgICAg
IHNlbGYuc3RhdGUgPSBzZWxmLmxpbmVfZW5kX3N0YXRlCisKKyAgICBkZWYgdmFsdWVfc3RhdGUo
c2VsZik6CisgICAgICAgIHNlbGYuc2tpcF93aGl0ZXNwYWNlKCkKKyAgICAgICAgaWYgc2VsZi5j
aGFyKCkgaW4gKCInIiwgJyInKToKKyAgICAgICAgICAgIHF1b3RlX2NoYXIgPSBzZWxmLmNoYXIo
KQorICAgICAgICAgICAgc2VsZi5jb25zdW1lKCkKKyAgICAgICAgICAgIHlpZWxkICh0b2tlbl90
eXBlcy5zdHJpbmcsIHNlbGYuY29uc3VtZV9zdHJpbmcocXVvdGVfY2hhcikpCisgICAgICAgICAg
ICBpZiBzZWxmLmNoYXIoKSA9PSAiIyI6CisgICAgICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IHNl
bGYuY29tbWVudF9zdGF0ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxm
LnN0YXRlID0gc2VsZi5saW5lX2VuZF9zdGF0ZQorICAgICAgICBlbGlmIHNlbGYuY2hhcigpID09
ICJAIjoKKyAgICAgICAgICAgIHNlbGYuY29uc3VtZSgpCisgICAgICAgICAgICBmb3IgXywgdmFs
dWUgaW4gc2VsZi52YWx1ZV9pbm5lcl9zdGF0ZSgpOgorICAgICAgICAgICAgICAgIHlpZWxkIHRv
a2VuX3R5cGVzLmF0b20sIHZhbHVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnN0
YXRlID0gc2VsZi52YWx1ZV9pbm5lcl9zdGF0ZQorCisgICAgZGVmIHZhbHVlX2lubmVyX3N0YXRl
KHNlbGYpOgorICAgICAgICBydiA9ICIiCisgICAgICAgIHNwYWNlcyA9IDAKKyAgICAgICAgd2hp
bGUgVHJ1ZToKKyAgICAgICAgICAgIGMgPSBzZWxmLmNoYXIoKQorICAgICAgICAgICAgaWYgYyA9
PSAiXFwiOgorICAgICAgICAgICAgICAgIHJ2ICs9IHNlbGYuY29uc3VtZV9lc2NhcGUoKQorICAg
ICAgICAgICAgZWxpZiBjID09ICIjIjoKKyAgICAgICAgICAgICAgICBzZWxmLnN0YXRlID0gc2Vs
Zi5jb21tZW50X3N0YXRlCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsaWYg
YyA9PSAiICI6CisgICAgICAgICAgICAgICAgIyBwcmV2ZW50IHdoaXRlc3BhY2UgYmVmb3JlIGNv
bW1lbnRzIGZyb20gYmVpbmcgaW5jbHVkZWQgaW4gdGhlIHZhbHVlCisgICAgICAgICAgICAgICAg
c3BhY2VzICs9IDEKKyAgICAgICAgICAgICAgICBzZWxmLmNvbnN1bWUoKQorICAgICAgICAgICAg
ZWxpZiBjID09IGVvbDoKKyAgICAgICAgICAgICAgICBzZWxmLnN0YXRlID0gc2VsZi5saW5lX2Vu
ZF9zdGF0ZQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgICAgIHJ2ICs9ICIgIiAqIHNwYWNlcworICAgICAgICAgICAgICAgIHNwYWNlcyA9IDAK
KyAgICAgICAgICAgICAgICBydiArPSBjCisgICAgICAgICAgICAgICAgc2VsZi5jb25zdW1lKCkK
KyAgICAgICAgeWllbGQgKHRva2VuX3R5cGVzLnN0cmluZywgZGVjb2RlKHJ2KSkKKworICAgIGRl
ZiBjb21tZW50X3N0YXRlKHNlbGYpOgorICAgICAgICB3aGlsZSBzZWxmLmNoYXIoKSBpcyBub3Qg
ZW9sOgorICAgICAgICAgICAgc2VsZi5jb25zdW1lKCkKKyAgICAgICAgc2VsZi5zdGF0ZSA9IHNl
bGYuZW9sX3N0YXRlCisKKyAgICBkZWYgbGluZV9lbmRfc3RhdGUoc2VsZik6CisgICAgICAgIHNl
bGYuc2tpcF93aGl0ZXNwYWNlKCkKKyAgICAgICAgYyA9IHNlbGYuY2hhcigpCisgICAgICAgIGlm
IGMgPT0gIiMiOgorICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IHNlbGYuY29tbWVudF9zdGF0ZQor
ICAgICAgICBlbGlmIGMgPT0gZW9sOgorICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IHNlbGYuZW9s
X3N0YXRlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBQYXJzZUVycm9yKHNlbGYu
ZmlsZW5hbWUsIHNlbGYubGluZV9udW1iZXIsICJKdW5rIGJlZm9yZSBFT0wgJXMiICUgYykKKwor
ICAgIGRlZiBjb25zdW1lX3N0cmluZyhzZWxmLCBxdW90ZV9jaGFyKToKKyAgICAgICAgcnYgPSAi
IgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgYyA9IHNlbGYuY2hhcigpCisgICAg
ICAgICAgICBpZiBjID09ICJcXCI6CisgICAgICAgICAgICAgICAgcnYgKz0gc2VsZi5jb25zdW1l
X2VzY2FwZSgpCisgICAgICAgICAgICBlbGlmIGMgPT0gcXVvdGVfY2hhcjoKKyAgICAgICAgICAg
ICAgICBzZWxmLmNvbnN1bWUoKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBl
bGlmIGMgPT0gZW9sOgorICAgICAgICAgICAgICAgIHJhaXNlIFBhcnNlRXJyb3Ioc2VsZi5maWxl
bmFtZSwgc2VsZi5saW5lX251bWJlciwgIkVPTCBpbiBxdW90ZWQgc3RyaW5nIikKKyAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcnYgKz0gYworICAgICAgICAgICAgICAgIHNlbGYu
Y29uc3VtZSgpCisKKyAgICAgICAgcmV0dXJuIGRlY29kZShydikKKworICAgIGRlZiBleHByX29y
X3ZhbHVlX3N0YXRlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnBlZWsoMykgPT0gImlmICI6Cisg
ICAgICAgICAgICBzZWxmLnN0YXRlID0gc2VsZi5leHByX3N0YXRlCisgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICBzZWxmLnN0YXRlID0gc2VsZi52YWx1ZV9zdGF0ZQorCisgICAgZGVmIGV4cHJf
c3RhdGUoc2VsZik6CisgICAgICAgIHNlbGYuc2tpcF93aGl0ZXNwYWNlKCkKKyAgICAgICAgYyA9
IHNlbGYuY2hhcigpCisgICAgICAgIGlmIGMgPT0gZW9sOgorICAgICAgICAgICAgcmFpc2UgUGFy
c2VFcnJvcihzZWxmLmZpbGVuYW1lLCBzZWxmLmxpbmVfbnVtYmVyLCAiRU9MIGluIGV4cHJlc3Np
b24iKQorICAgICAgICBlbGlmIGMgaW4gIidcIiI6CisgICAgICAgICAgICBzZWxmLmNvbnN1bWUo
KQorICAgICAgICAgICAgeWllbGQgKHRva2VuX3R5cGVzLnN0cmluZywgc2VsZi5jb25zdW1lX3N0
cmluZyhjKSkKKyAgICAgICAgZWxpZiBjID09ICIjIjoKKyAgICAgICAgICAgIHJhaXNlIFBhcnNl
RXJyb3Ioc2VsZi5maWxlbmFtZSwgc2VsZi5saW5lX251bWJlciwgIkNvbW1lbnQgYmVmb3JlIGVu
ZCBvZiBleHByZXNzaW9uIikKKyAgICAgICAgZWxpZiBjID09ICI6IjoKKyAgICAgICAgICAgIHlp
ZWxkICh0b2tlbl90eXBlcy5zZXBhcmF0b3IsIGMpCisgICAgICAgICAgICBzZWxmLmNvbnN1bWUo
KQorICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IHNlbGYudmFsdWVfc3RhdGUKKyAgICAgICAgZWxp
ZiBjIGluIHBhcmVuczoKKyAgICAgICAgICAgIHNlbGYuY29uc3VtZSgpCisgICAgICAgICAgICB5
aWVsZCAodG9rZW5fdHlwZXMucGFyZW4sIGMpCisgICAgICAgIGVsaWYgYyBpbiAoIiEiLCAiPSIp
OgorICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IHNlbGYub3BlcmF0b3Jfc3RhdGUKKyAgICAgICAg
ZWxpZiBjIGluIGRpZ2l0czoKKyAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBzZWxmLmRpZ2l0X3N0
YXRlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnN0YXRlID0gc2VsZi5pZGVudF9z
dGF0ZQorCisgICAgZGVmIG9wZXJhdG9yX3N0YXRlKHNlbGYpOgorICAgICAgICAjIE9ubHkgc3lt
Ym9saWMgb3BlcmF0b3JzCisgICAgICAgIGluZGV4XzAgPSBzZWxmLmluZGV4CisgICAgICAgIHdo
aWxlIFRydWU6CisgICAgICAgICAgICBjID0gc2VsZi5jaGFyKCkKKyAgICAgICAgICAgIGlmIGMg
PT0gZW9sOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbGlmIGMgaW4gb3Bl
cmF0b3JfY2hhcnM6CisgICAgICAgICAgICAgICAgc2VsZi5jb25zdW1lKCkKKyAgICAgICAgICAg
IGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IHNlbGYuZXhwcl9zdGF0ZQorICAg
ICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHlpZWxkICh0b2tlbl90eXBlcy5pZGVudCwgc2Vs
Zi5saW5lW2luZGV4XzA6c2VsZi5pbmRleF0pCisKKyAgICBkZWYgZGlnaXRfc3RhdGUoc2VsZik6
CisgICAgICAgIGluZGV4XzAgPSBzZWxmLmluZGV4CisgICAgICAgIHNlZW5fZG90ID0gRmFsc2UK
KyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGMgPSBzZWxmLmNoYXIoKQorICAgICAg
ICAgICAgaWYgYyA9PSBlb2w6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVs
aWYgYyBpbiBkaWdpdHM6CisgICAgICAgICAgICAgICAgc2VsZi5jb25zdW1lKCkKKyAgICAgICAg
ICAgIGVsaWYgYyA9PSAiLiI6CisgICAgICAgICAgICAgICAgaWYgc2Vlbl9kb3Q6CisgICAgICAg
ICAgICAgICAgICAgIHJhaXNlIFBhcnNlRXJyb3Ioc2VsZi5maWxlbmFtZSwgc2VsZi5saW5lX251
bWJlciwgIkludmFsaWQgbnVtYmVyIikKKyAgICAgICAgICAgICAgICBzZWxmLmNvbnN1bWUoKQor
ICAgICAgICAgICAgICAgIHNlZW5fZG90ID0gVHJ1ZQorICAgICAgICAgICAgZWxpZiBjIGluIHBh
cmVuczoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxpZiBjIGluIG9wZXJh
dG9yX2NoYXJzOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbGlmIGMgPT0g
IiAiOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbGlmIGMgPT0gIjoiOgor
ICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg
IHJhaXNlIFBhcnNlRXJyb3Ioc2VsZi5maWxlbmFtZSwgc2VsZi5saW5lX251bWJlciwgIkludmFs
aWQgY2hhcmFjdGVyIGluIG51bWJlciIpCisKKyAgICAgICAgc2VsZi5zdGF0ZSA9IHNlbGYuZXhw
cl9zdGF0ZQorICAgICAgICB5aWVsZCAodG9rZW5fdHlwZXMubnVtYmVyLCBzZWxmLmxpbmVbaW5k
ZXhfMDpzZWxmLmluZGV4XSkKKworICAgIGRlZiBpZGVudF9zdGF0ZShzZWxmKToKKyAgICAgICAg
aW5kZXhfMCA9IHNlbGYuaW5kZXgKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGMg
PSBzZWxmLmNoYXIoKQorICAgICAgICAgICAgaWYgYyA9PSBlb2w6CisgICAgICAgICAgICAgICAg
YnJlYWsKKyAgICAgICAgICAgIGVsaWYgYyA9PSAiLiI6CisgICAgICAgICAgICAgICAgYnJlYWsK
KyAgICAgICAgICAgIGVsaWYgYyBpbiBwYXJlbnM6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAg
ICAgICAgICAgIGVsaWYgYyBpbiBvcGVyYXRvcl9jaGFyczoKKyAgICAgICAgICAgICAgICBicmVh
aworICAgICAgICAgICAgZWxpZiBjID09ICIgIjoKKyAgICAgICAgICAgICAgICBicmVhaworICAg
ICAgICAgICAgZWxpZiBjID09ICI6IjoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmNvbnN1bWUoKQorICAgICAgICBzZWxmLnN0
YXRlID0gc2VsZi5leHByX3N0YXRlCisgICAgICAgIHlpZWxkICh0b2tlbl90eXBlcy5pZGVudCwg
c2VsZi5saW5lW2luZGV4XzA6c2VsZi5pbmRleF0pCisKKyAgICBkZWYgY29uc3VtZV9lc2NhcGUo
c2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLmNoYXIoKSA9PSAiXFwiCisgICAgICAgIHNlbGYu
Y29uc3VtZSgpCisgICAgICAgIGMgPSBzZWxmLmNoYXIoKQorICAgICAgICBzZWxmLmNvbnN1bWUo
KQorICAgICAgICBpZiBjID09ICJ4IjoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmRlY29kZV9l
c2NhcGUoMikKKyAgICAgICAgZWxpZiBjID09ICJ1IjoKKyAgICAgICAgICAgIHJldHVybiBzZWxm
LmRlY29kZV9lc2NhcGUoNCkKKyAgICAgICAgZWxpZiBjID09ICJVIjoKKyAgICAgICAgICAgIHJl
dHVybiBzZWxmLmRlY29kZV9lc2NhcGUoNikKKyAgICAgICAgZWxpZiBjIGluIFsiYSIsICJiIiwg
ImYiLCAibiIsICJyIiwgInQiLCAidiJdOgorICAgICAgICAgICAgcmV0dXJuIGV2YWwoIidcJXMn
IiAlIGMpCisgICAgICAgIGVsaWYgYyBpcyBlb2w6CisgICAgICAgICAgICByYWlzZSBQYXJzZUVy
cm9yKHNlbGYuZmlsZW5hbWUsIHNlbGYubGluZV9udW1iZXIsICJFT0wgaW4gZXNjYXBlIikKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBjCisKKyAgICBkZWYgZGVjb2RlX2VzY2Fw
ZShzZWxmLCBsZW5ndGgpOgorICAgICAgICB2YWx1ZSA9IDAKKyAgICAgICAgZm9yIGkgaW4geHJh
bmdlKGxlbmd0aCk6CisgICAgICAgICAgICBjID0gc2VsZi5jaGFyKCkKKyAgICAgICAgICAgIHZh
bHVlICo9IDE2CisgICAgICAgICAgICB2YWx1ZSArPSBzZWxmLmVzY2FwZV92YWx1ZShjKQorICAg
ICAgICAgICAgc2VsZi5jb25zdW1lKCkKKworICAgICAgICByZXR1cm4gdW5pY2hyKHZhbHVlKQor
CisgICAgZGVmIGVzY2FwZV92YWx1ZShzZWxmLCBjKToKKyAgICAgICAgaWYgJzAnIDw9IGMgPD0g
JzknOgorICAgICAgICAgICAgcmV0dXJuIG9yZChjKSAtIG9yZCgnMCcpCisgICAgICAgIGVsaWYg
J2EnIDw9IGMgPD0gJ2YnOgorICAgICAgICAgICAgcmV0dXJuIG9yZChjKSAtIG9yZCgnYScpICsg
MTAKKyAgICAgICAgZWxpZiAnQScgPD0gYyA8PSAnRic6CisgICAgICAgICAgICByZXR1cm4gb3Jk
KGMpIC0gb3JkKCdBJykgKyAxMAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgUGFy
c2VFcnJvcihzZWxmLmZpbGVuYW1lLCBzZWxmLmxpbmVfbnVtYmVyLCAiSW52YWxpZCBjaGFyYWN0
ZXIgZXNjYXBlIikKKworCitjbGFzcyBQYXJzZXIob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18o
c2VsZik6CisgICAgICAgIHNlbGYucmVzZXQoKQorCisgICAgZGVmIHJlc2V0KHNlbGYpOgorICAg
ICAgICBzZWxmLnRva2VuID0gTm9uZQorICAgICAgICBzZWxmLnVuYXJ5X29wZXJhdG9ycyA9ICIh
IgorICAgICAgICBzZWxmLmJpbmFyeV9vcGVyYXRvcnMgPSBmcm96ZW5zZXQoWyImJiIsICJ8fCIs
ICI9PSJdKQorICAgICAgICBzZWxmLnRva2VuaXplciA9IFRva2VuaXplcigpCisgICAgICAgIHNl
bGYudG9rZW5fZ2VuZXJhdG9yID0gTm9uZQorICAgICAgICBzZWxmLnRyZWUgPSBUcmVlYnVpbGRl
cihEYXRhTm9kZShOb25lKSkKKyAgICAgICAgc2VsZi5leHByX2J1aWxkZXIgPSBOb25lCisgICAg
ICAgIHNlbGYuZXhwcl9idWlsZGVycyA9IFtdCisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgaW5wdXQp
OgorICAgICAgICBzZWxmLnJlc2V0KCkKKyAgICAgICAgc2VsZi50b2tlbl9nZW5lcmF0b3IgPSBz
ZWxmLnRva2VuaXplci50b2tlbml6ZShpbnB1dCkKKyAgICAgICAgc2VsZi5jb25zdW1lKCkKKyAg
ICAgICAgc2VsZi5tYW5pZmVzdCgpCisgICAgICAgIHJldHVybiBzZWxmLnRyZWUubm9kZQorCisg
ICAgZGVmIGNvbnN1bWUoc2VsZik6CisgICAgICAgIHNlbGYudG9rZW4gPSBzZWxmLnRva2VuX2dl
bmVyYXRvci5uZXh0KCkKKworICAgIGRlZiBleHBlY3Qoc2VsZiwgdHlwZSwgdmFsdWU9Tm9uZSk6
CisgICAgICAgIGlmIHNlbGYudG9rZW5bMF0gIT0gdHlwZToKKyAgICAgICAgICAgIHJhaXNlIFBh
cnNlRXJyb3IKKyAgICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBz
ZWxmLnRva2VuWzFdICE9IHZhbHVlOgorICAgICAgICAgICAgICAgIHJhaXNlIFBhcnNlRXJyb3IK
KworICAgICAgICBzZWxmLmNvbnN1bWUoKQorCisgICAgZGVmIG1hbmlmZXN0KHNlbGYpOgorICAg
ICAgICBzZWxmLmRhdGFfYmxvY2soKQorICAgICAgICBzZWxmLmV4cGVjdCh0b2tlbl90eXBlcy5l
b2YpCisKKyAgICBkZWYgZGF0YV9ibG9jayhzZWxmKToKKyAgICAgICAgd2hpbGUgc2VsZi50b2tl
blswXSA9PSB0b2tlbl90eXBlcy5zdHJpbmc6CisgICAgICAgICAgICBzZWxmLnRyZWUuYXBwZW5k
KEtleVZhbHVlTm9kZShzZWxmLnRva2VuWzFdKSkKKyAgICAgICAgICAgIHNlbGYuY29uc3VtZSgp
CisgICAgICAgICAgICBzZWxmLmV4cGVjdCh0b2tlbl90eXBlcy5zZXBhcmF0b3IpCisgICAgICAg
ICAgICBzZWxmLnZhbHVlX2Jsb2NrKCkKKyAgICAgICAgICAgIHNlbGYudHJlZS5wb3AoKQorCisg
ICAgICAgIHdoaWxlIHNlbGYudG9rZW4gPT0gKHRva2VuX3R5cGVzLnBhcmVuLCAiWyIpOgorICAg
ICAgICAgICAgc2VsZi5jb25zdW1lKCkKKyAgICAgICAgICAgIGlmIHNlbGYudG9rZW5bMF0gIT0g
dG9rZW5fdHlwZXMuc3RyaW5nOgorICAgICAgICAgICAgICAgIHJhaXNlIFBhcnNlRXJyb3IKKyAg
ICAgICAgICAgIHNlbGYudHJlZS5hcHBlbmQoRGF0YU5vZGUoc2VsZi50b2tlblsxXSkpCisgICAg
ICAgICAgICBzZWxmLmNvbnN1bWUoKQorICAgICAgICAgICAgc2VsZi5leHBlY3QodG9rZW5fdHlw
ZXMucGFyZW4sICJdIikKKyAgICAgICAgICAgIGlmIHNlbGYudG9rZW5bMF0gPT0gdG9rZW5fdHlw
ZXMuZ3JvdXBfc3RhcnQ6CisgICAgICAgICAgICAgICAgc2VsZi5jb25zdW1lKCkKKyAgICAgICAg
ICAgICAgICBzZWxmLmRhdGFfYmxvY2soKQorICAgICAgICAgICAgICAgIHNlbGYuZW9mX29yX2Vu
ZF9ncm91cCgpCisgICAgICAgICAgICBzZWxmLnRyZWUucG9wKCkKKworICAgIGRlZiBlb2Zfb3Jf
ZW5kX2dyb3VwKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnRva2VuWzBdICE9IHRva2VuX3R5cGVz
LmVvZjoKKyAgICAgICAgICAgIHNlbGYuZXhwZWN0KHRva2VuX3R5cGVzLmdyb3VwX2VuZCkKKwor
ICAgIGRlZiB2YWx1ZV9ibG9jayhzZWxmKToKKyAgICAgICAgaWYgc2VsZi50b2tlblswXSA9PSB0
b2tlbl90eXBlcy5saXN0X3N0YXJ0OgorICAgICAgICAgICAgc2VsZi5jb25zdW1lKCkKKyAgICAg
ICAgICAgIHNlbGYubGlzdF92YWx1ZSgpCisgICAgICAgIGVsaWYgc2VsZi50b2tlblswXSA9PSB0
b2tlbl90eXBlcy5zdHJpbmc6CisgICAgICAgICAgICBzZWxmLnZhbHVlKCkKKyAgICAgICAgZWxp
ZiBzZWxmLnRva2VuWzBdID09IHRva2VuX3R5cGVzLmdyb3VwX3N0YXJ0OgorICAgICAgICAgICAg
c2VsZi5jb25zdW1lKCkKKyAgICAgICAgICAgIHNlbGYuZXhwcmVzc2lvbl92YWx1ZXMoKQorICAg
ICAgICAgICAgaWYgc2VsZi50b2tlblswXSA9PSB0b2tlbl90eXBlcy5zdHJpbmc6CisgICAgICAg
ICAgICAgICAgc2VsZi52YWx1ZSgpCisgICAgICAgICAgICBzZWxmLmVvZl9vcl9lbmRfZ3JvdXAo
KQorICAgICAgICBlbGlmIHNlbGYudG9rZW5bMF0gPT0gdG9rZW5fdHlwZXMuYXRvbToKKyAgICAg
ICAgICAgIHNlbGYuYXRvbSgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBQYXJz
ZUVycm9yCisKKyAgICBkZWYgbGlzdF92YWx1ZShzZWxmKToKKyAgICAgICAgc2VsZi50cmVlLmFw
cGVuZChMaXN0Tm9kZSgpKQorICAgICAgICB3aGlsZSBzZWxmLnRva2VuWzBdIGluICh0b2tlbl90
eXBlcy5hdG9tLCB0b2tlbl90eXBlcy5zdHJpbmcpOgorICAgICAgICAgICAgaWYgc2VsZi50b2tl
blswXSA9PSB0b2tlbl90eXBlcy5hdG9tOgorICAgICAgICAgICAgICAgIHNlbGYuYXRvbSgpCisg
ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYudmFsdWUoKQorICAgICAgICBz
ZWxmLmV4cGVjdCh0b2tlbl90eXBlcy5saXN0X2VuZCkKKyAgICAgICAgc2VsZi50cmVlLnBvcCgp
CisKKyAgICBkZWYgZXhwcmVzc2lvbl92YWx1ZXMoc2VsZik6CisgICAgICAgIHdoaWxlIHNlbGYu
dG9rZW4gPT0gKHRva2VuX3R5cGVzLmlkZW50LCAiaWYiKToKKyAgICAgICAgICAgIHNlbGYuY29u
c3VtZSgpCisgICAgICAgICAgICBzZWxmLnRyZWUuYXBwZW5kKENvbmRpdGlvbmFsTm9kZSgpKQor
ICAgICAgICAgICAgc2VsZi5leHByX3N0YXJ0KCkKKyAgICAgICAgICAgIHNlbGYuZXhwZWN0KHRv
a2VuX3R5cGVzLnNlcGFyYXRvcikKKyAgICAgICAgICAgIGlmIHNlbGYudG9rZW5bMF0gPT0gdG9r
ZW5fdHlwZXMuc3RyaW5nOgorICAgICAgICAgICAgICAgIHNlbGYudmFsdWUoKQorICAgICAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBQYXJzZUVycm9yCisgICAgICAgICAgICBz
ZWxmLnRyZWUucG9wKCkKKworICAgIGRlZiB2YWx1ZShzZWxmKToKKyAgICAgICAgc2VsZi50cmVl
LmFwcGVuZChWYWx1ZU5vZGUoc2VsZi50b2tlblsxXSkpCisgICAgICAgIHNlbGYuY29uc3VtZSgp
CisgICAgICAgIHNlbGYudHJlZS5wb3AoKQorCisgICAgZGVmIGF0b20oc2VsZik6CisgICAgICAg
IGlmIHNlbGYudG9rZW5bMV0gbm90IGluIGF0b21zOgorICAgICAgICAgICAgcmFpc2UgUGFyc2VF
cnJvcihzZWxmLnRva2VuaXplci5maWxlbmFtZSwgc2VsZi50b2tlbml6ZXIubGluZV9udW1iZXIs
ICJVbnJlY29nbmlzZWQgc3ltYm9sIEAlcyIgJSBzZWxmLnRva2VuWzFdKQorICAgICAgICBzZWxm
LnRyZWUuYXBwZW5kKEF0b21Ob2RlKGF0b21zW3NlbGYudG9rZW5bMV1dKSkKKyAgICAgICAgc2Vs
Zi5jb25zdW1lKCkKKyAgICAgICAgc2VsZi50cmVlLnBvcCgpCisKKyAgICBkZWYgZXhwcl9zdGFy
dChzZWxmKToKKyAgICAgICAgc2VsZi5leHByX2J1aWxkZXIgPSBFeHByZXNzaW9uQnVpbGRlcihz
ZWxmLnRva2VuaXplcikKKyAgICAgICAgc2VsZi5leHByX2J1aWxkZXJzLmFwcGVuZChzZWxmLmV4
cHJfYnVpbGRlcikKKyAgICAgICAgc2VsZi5leHByKCkKKyAgICAgICAgZXhwcmVzc2lvbiA9IHNl
bGYuZXhwcl9idWlsZGVyLmZpbmlzaCgpCisgICAgICAgIHNlbGYuZXhwcl9idWlsZGVycy5wb3Ao
KQorICAgICAgICBzZWxmLmV4cHJfYnVpbGRlciA9IHNlbGYuZXhwcl9idWlsZGVyc1stMV0gaWYg
c2VsZi5leHByX2J1aWxkZXJzIGVsc2UgTm9uZQorICAgICAgICBpZiBzZWxmLmV4cHJfYnVpbGRl
cjoKKyAgICAgICAgICAgIHNlbGYuZXhwcl9idWlsZGVyLm9wZXJhbmRzWy0xXS5jaGlsZHJlblst
MV0uYXBwZW5kKGV4cHJlc3Npb24pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnRy
ZWUuYXBwZW5kKGV4cHJlc3Npb24pCisgICAgICAgICAgICBzZWxmLnRyZWUucG9wKCkKKworICAg
IGRlZiBleHByKHNlbGYpOgorICAgICAgICBzZWxmLmV4cHJfb3BlcmFuZCgpCisgICAgICAgIHdo
aWxlIChzZWxmLnRva2VuWzBdID09IHRva2VuX3R5cGVzLmlkZW50IGFuZCBzZWxmLnRva2VuWzFd
IGluIGJpbmFyeV9vcGVyYXRvcnMpOgorICAgICAgICAgICAgc2VsZi5leHByX2Jpbl9vcCgpCisg
ICAgICAgICAgICBzZWxmLmV4cHJfb3BlcmFuZCgpCisKKyAgICBkZWYgZXhwcl9vcGVyYW5kKHNl
bGYpOgorICAgICAgICBpZiBzZWxmLnRva2VuID09ICh0b2tlbl90eXBlcy5wYXJlbiwgIigiKToK
KyAgICAgICAgICAgIHNlbGYuY29uc3VtZSgpCisgICAgICAgICAgICBzZWxmLmV4cHJfYnVpbGRl
ci5sZWZ0X3BhcmVuKCkKKyAgICAgICAgICAgIHNlbGYuZXhwcigpCisgICAgICAgICAgICBzZWxm
LmV4cGVjdCh0b2tlbl90eXBlcy5wYXJlbiwgIikiKQorICAgICAgICAgICAgc2VsZi5leHByX2J1
aWxkZXIucmlnaHRfcGFyZW4oKQorICAgICAgICBlbGlmIHNlbGYudG9rZW5bMF0gPT0gdG9rZW5f
dHlwZXMuaWRlbnQgYW5kIHNlbGYudG9rZW5bMV0gaW4gdW5hcnlfb3BlcmF0b3JzOgorICAgICAg
ICAgICAgc2VsZi5leHByX3VuYXJ5X29wKCkKKyAgICAgICAgICAgIHNlbGYuZXhwcl9vcGVyYW5k
KCkKKyAgICAgICAgZWxpZiBzZWxmLnRva2VuWzBdIGluIFt0b2tlbl90eXBlcy5zdHJpbmcsIHRv
a2VuX3R5cGVzLmlkZW50XToKKyAgICAgICAgICAgIHNlbGYuZXhwcl92YWx1ZSgpCisgICAgICAg
IGVsaWYgc2VsZi50b2tlblswXSA9PSB0b2tlbl90eXBlcy5udW1iZXI6CisgICAgICAgICAgICBz
ZWxmLmV4cHJfbnVtYmVyKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFBhcnNl
RXJyb3Ioc2VsZi50b2tlbml6ZXIuZmlsZW5hbWUsIHNlbGYudG9rZW5pemVyLmxpbmVfbnVtYmVy
LCAiVW5yZWNvZ25pc2VkIG9wZXJhbmQiKQorCisgICAgZGVmIGV4cHJfdW5hcnlfb3Aoc2VsZik6
CisgICAgICAgIGlmIHNlbGYudG9rZW5bMV0gaW4gdW5hcnlfb3BlcmF0b3JzOgorICAgICAgICAg
ICAgc2VsZi5leHByX2J1aWxkZXIucHVzaF9vcGVyYXRvcihVbmFyeU9wZXJhdG9yTm9kZShzZWxm
LnRva2VuWzFdKSkKKyAgICAgICAgICAgIHNlbGYuY29uc3VtZSgpCisgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICByYWlzZSBQYXJzZUVycm9yKHNlbGYudG9rZW5pemVyLmZpbGVuYW1lLCBzZWxm
LnRva2VuaXplci5saW5lX251bWJlciwgIkV4cGVjdGVkIHVuYXJ5IG9wZXJhdG9yIikKKworICAg
IGRlZiBleHByX2Jpbl9vcChzZWxmKToKKyAgICAgICAgaWYgc2VsZi50b2tlblsxXSBpbiBiaW5h
cnlfb3BlcmF0b3JzOgorICAgICAgICAgICAgc2VsZi5leHByX2J1aWxkZXIucHVzaF9vcGVyYXRv
cihCaW5hcnlPcGVyYXRvck5vZGUoc2VsZi50b2tlblsxXSkpCisgICAgICAgICAgICBzZWxmLmNv
bnN1bWUoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgUGFyc2VFcnJvcihzZWxm
LnRva2VuaXplci5maWxlbmFtZSwgc2VsZi50b2tlbml6ZXIubGluZV9udW1iZXIsICJFeHBlY3Rl
ZCBiaW5hcnkgb3BlcmF0b3IiKQorCisgICAgZGVmIGV4cHJfdmFsdWUoc2VsZik6CisgICAgICAg
IG5vZGVfdHlwZSA9IHt0b2tlbl90eXBlcy5zdHJpbmc6IFN0cmluZ05vZGUsCisgICAgICAgICAg
ICAgICAgICAgICB0b2tlbl90eXBlcy5pZGVudDogVmFyaWFibGVOb2RlfVtzZWxmLnRva2VuWzBd
XQorICAgICAgICBzZWxmLmV4cHJfYnVpbGRlci5wdXNoX29wZXJhbmQobm9kZV90eXBlKHNlbGYu
dG9rZW5bMV0pKQorICAgICAgICBzZWxmLmNvbnN1bWUoKQorICAgICAgICBpZiBzZWxmLnRva2Vu
ID09ICh0b2tlbl90eXBlcy5wYXJlbiwgIlsiKToKKyAgICAgICAgICAgIHNlbGYuY29uc3VtZSgp
CisgICAgICAgICAgICBzZWxmLmV4cHJfYnVpbGRlci5vcGVyYW5kc1stMV0uYXBwZW5kKEluZGV4
Tm9kZSgpKQorICAgICAgICAgICAgc2VsZi5leHByX3N0YXJ0KCkKKyAgICAgICAgICAgIHNlbGYu
ZXhwZWN0KHRva2VuX3R5cGVzLnBhcmVuLCAiXSIpCisKKyAgICBkZWYgZXhwcl9udW1iZXIoc2Vs
Zik6CisgICAgICAgIHNlbGYuZXhwcl9idWlsZGVyLnB1c2hfb3BlcmFuZChOdW1iZXJOb2RlKHNl
bGYudG9rZW5bMV0pKQorICAgICAgICBzZWxmLmNvbnN1bWUoKQorCisKK2NsYXNzIFRyZWVidWls
ZGVyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJvb3QpOgorICAgICAgICBzZWxm
LnJvb3QgPSByb290CisgICAgICAgIHNlbGYubm9kZSA9IHJvb3QKKworICAgIGRlZiBhcHBlbmQo
c2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYubm9kZS5hcHBlbmQobm9kZSkKKyAgICAgICAgc2Vs
Zi5ub2RlID0gbm9kZQorICAgICAgICByZXR1cm4gbm9kZQorCisgICAgZGVmIHBvcChzZWxmKToK
KyAgICAgICAgbm9kZSA9IHNlbGYubm9kZQorICAgICAgICBzZWxmLm5vZGUgPSBzZWxmLm5vZGUu
cGFyZW50CisgICAgICAgIHJldHVybiBub2RlCisKKworY2xhc3MgRXhwcmVzc2lvbkJ1aWxkZXIo
b2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdG9rZW5pemVyKToKKyAgICAgICAgc2Vs
Zi5vcGVyYW5kcyA9IFtdCisgICAgICAgIHNlbGYub3BlcmF0b3JzID0gW05vbmVdCisgICAgICAg
IHNlbGYudG9rZW5pemVyID0gdG9rZW5pemVyCisKKyAgICBkZWYgZmluaXNoKHNlbGYpOgorICAg
ICAgICB3aGlsZSBzZWxmLm9wZXJhdG9yc1stMV0gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBz
ZWxmLnBvcF9vcGVyYXRvcigpCisgICAgICAgIHJ2ID0gc2VsZi5wb3Bfb3BlcmFuZCgpCisgICAg
ICAgIGFzc2VydCBzZWxmLmlzX2VtcHR5KCkKKyAgICAgICAgcmV0dXJuIHJ2CisKKyAgICBkZWYg
bGVmdF9wYXJlbihzZWxmKToKKyAgICAgICAgc2VsZi5vcGVyYXRvcnMuYXBwZW5kKE5vbmUpCisK
KyAgICBkZWYgcmlnaHRfcGFyZW4oc2VsZik6CisgICAgICAgIHdoaWxlIHNlbGYub3BlcmF0b3Jz
Wy0xXSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYucG9wX29wZXJhdG9yKCkKKyAgICAg
ICAgICAgIGlmIG5vdCBzZWxmLm9wZXJhdG9yczoKKyAgICAgICAgICAgICAgICByYWlzZSBQYXJz
ZUVycm9yKHNlbGYudG9rZW5pemVyLmZpbGVuYW1lLCBzZWxmLnRva2VuaXplci5saW5lLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVuYmFsYW5jZWQgcGFyZW5zIikKKworICAg
ICAgICBhc3NlcnQgc2VsZi5vcGVyYXRvcnMucG9wKCkgaXMgTm9uZQorCisgICAgZGVmIHB1c2hf
b3BlcmF0b3Ioc2VsZiwgb3BlcmF0b3IpOgorICAgICAgICBhc3NlcnQgb3BlcmF0b3IgaXMgbm90
IE5vbmUKKyAgICAgICAgd2hpbGUgc2VsZi5wcmVjZWRlbmNlKHNlbGYub3BlcmF0b3JzWy0xXSkg
PiBzZWxmLnByZWNlZGVuY2Uob3BlcmF0b3IpOgorICAgICAgICAgICAgc2VsZi5wb3Bfb3BlcmF0
b3IoKQorCisgICAgICAgIHNlbGYub3BlcmF0b3JzLmFwcGVuZChvcGVyYXRvcikKKworICAgIGRl
ZiBwb3Bfb3BlcmF0b3Ioc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5vcGVyYXRvcnMu
cG9wKCkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvcGVyYXRvciwgQmluYXJ5T3BlcmF0b3JOb2Rl
KToKKyAgICAgICAgICAgIG9wZXJhbmRfMSA9IHNlbGYub3BlcmFuZHMucG9wKCkKKyAgICAgICAg
ICAgIG9wZXJhbmRfMCA9IHNlbGYub3BlcmFuZHMucG9wKCkKKyAgICAgICAgICAgIHNlbGYub3Bl
cmFuZHMuYXBwZW5kKEJpbmFyeUV4cHJlc3Npb25Ob2RlKG9wZXJhdG9yLCBvcGVyYW5kXzAsIG9w
ZXJhbmRfMSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvcGVyYW5kXzAgPSBzZWxmLm9w
ZXJhbmRzLnBvcCgpCisgICAgICAgICAgICBzZWxmLm9wZXJhbmRzLmFwcGVuZChVbmFyeUV4cHJl
c3Npb25Ob2RlKG9wZXJhdG9yLCBvcGVyYW5kXzApKQorCisgICAgZGVmIHB1c2hfb3BlcmFuZChz
ZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi5vcGVyYW5kcy5hcHBlbmQobm9kZSkKKworICAgIGRl
ZiBwb3Bfb3BlcmFuZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYub3BlcmFuZHMucG9wKCkK
KworICAgIGRlZiBpc19lbXB0eShzZWxmKToKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLm9wZXJh
bmRzKSA9PSAwIGFuZCBhbGwoaXRlbSBpcyBOb25lIGZvciBpdGVtIGluIHNlbGYub3BlcmF0b3Jz
KQorCisgICAgZGVmIHByZWNlZGVuY2Uoc2VsZiwgb3BlcmF0b3IpOgorICAgICAgICBpZiBvcGVy
YXRvciBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgcmV0dXJuIHByZWNl
ZGVuY2Uob3BlcmF0b3IpCisKKworZGVmIHBhcnNlKHN0cmVhbSk6CisgICAgcCA9IFBhcnNlcigp
CisgICAgcmV0dXJuIHAucGFyc2Uoc3RyZWFtKQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMv
aW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvd3B0bWFuaWZlc3Qvc2VyaWFs
aXplci5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0
cnVubmVyL3dwdG1hbmlmZXN0L3NlcmlhbGl6ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLjUyMjAzYWIyNDBhCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVy
VGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvd3B0bWFuaWZlc3Qv
c2VyaWFsaXplci5weQpAQCAtMCwwICsxLDEzNiBAQAorZnJvbSBub2RlIGltcG9ydCBOb2RlVmlz
aXRvciwgVmFsdWVOb2RlLCBMaXN0Tm9kZSwgQmluYXJ5RXhwcmVzc2lvbk5vZGUKK2Zyb20gcGFy
c2VyIGltcG9ydCBhdG9tcywgcHJlY2VkZW5jZQorCithdG9tX25hbWVzID0ge3Y6IkAlcyIgJSBr
IGZvciAoayx2KSBpbiBhdG9tcy5pdGVyaXRlbXMoKX0KKworbmFtZWRfZXNjYXBlcyA9IHNldChb
IlxhIiwgIlxiIiwgIlxmIiwgIlxuIiwgIlxyIiwgIlx0IiwgIlx2Il0pCisKK2RlZiBlc2NhcGUo
c3RyaW5nLCBleHRyYXM9IiIpOgorICAgIHJ2ID0gIiIKKyAgICBmb3IgYyBpbiBzdHJpbmc6Cisg
ICAgICAgIGlmIGMgaW4gbmFtZWRfZXNjYXBlczoKKyAgICAgICAgICAgIHJ2ICs9IGMuZW5jb2Rl
KCJ1bmljb2RlX2VzY2FwZSIpCisgICAgICAgIGVsaWYgYyA9PSAiXFwiOgorICAgICAgICAgICAg
cnYgKz0gIlxcXFwiCisgICAgICAgIGVsaWYgYyA8ICdceDIwJzoKKyAgICAgICAgICAgIHJ2ICs9
ICJcXHglMDJ4IiAlIG9yZChjKQorICAgICAgICBlbGlmIGMgaW4gZXh0cmFzOgorICAgICAgICAg
ICAgcnYgKz0gIlxcIiArIGMKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJ2ICs9IGMKKyAg
ICByZXR1cm4gcnYuZW5jb2RlKCJ1dGY4IikKKworCitjbGFzcyBNYW5pZmVzdFNlcmlhbGl6ZXIo
Tm9kZVZpc2l0b3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBza2lwX2VtcHR5X2RhdGE9RmFs
c2UpOgorICAgICAgICBzZWxmLnNraXBfZW1wdHlfZGF0YSA9IHNraXBfZW1wdHlfZGF0YQorCisg
ICAgZGVmIHNlcmlhbGl6ZShzZWxmLCByb290KToKKyAgICAgICAgc2VsZi5pbmRlbnQgPSAyCisg
ICAgICAgIHJ2ID0gIlxuIi5qb2luKHNlbGYudmlzaXQocm9vdCkpCisgICAgICAgIGlmIHJ2Wy0x
XSAhPSAiXG4iOgorICAgICAgICAgICAgcnYgPSBydiArICJcbiIKKyAgICAgICAgcmV0dXJuIHJ2
CisKKyAgICBkZWYgdmlzaXRfRGF0YU5vZGUoc2VsZiwgbm9kZSk6CisgICAgICAgIHJ2ID0gW10K
KyAgICAgICAgaWYgbm90IHNlbGYuc2tpcF9lbXB0eV9kYXRhIG9yIG5vZGUuY2hpbGRyZW46Cisg
ICAgICAgICAgICBpZiBub2RlLmRhdGE6CisgICAgICAgICAgICAgICAgcnYuYXBwZW5kKCJbJXNd
IiAlIGVzY2FwZShub2RlLmRhdGEsIGV4dHJhcz0iXSIpKQorICAgICAgICAgICAgICAgIGluZGVu
dCA9IHNlbGYuaW5kZW50ICogIiAiCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg
IGluZGVudCA9ICIiCisKKyAgICAgICAgICAgIGZvciBjaGlsZCBpbiBub2RlLmNoaWxkcmVuOgor
ICAgICAgICAgICAgICAgIHJ2LmV4dGVuZCgiJXMlcyIgJSAoaW5kZW50IGlmIGl0ZW0gZWxzZSAi
IiwgaXRlbSkgZm9yIGl0ZW0gaW4gc2VsZi52aXNpdChjaGlsZCkpCisKKyAgICAgICAgICAgIGlm
IG5vZGUucGFyZW50OgorICAgICAgICAgICAgICAgIHJ2LmFwcGVuZCgiIikKKworICAgICAgICBy
ZXR1cm4gcnYKKworICAgIGRlZiB2aXNpdF9LZXlWYWx1ZU5vZGUoc2VsZiwgbm9kZSk6CisgICAg
ICAgIHJ2ID0gW2VzY2FwZShub2RlLmRhdGEsICI6IikgKyAiOiJdCisgICAgICAgIGluZGVudCA9
ICIgIiAqIHNlbGYuaW5kZW50CisKKyAgICAgICAgaWYgbGVuKG5vZGUuY2hpbGRyZW4pID09IDEg
YW5kIGlzaW5zdGFuY2Uobm9kZS5jaGlsZHJlblswXSwgKFZhbHVlTm9kZSwgTGlzdE5vZGUpKToK
KyAgICAgICAgICAgIHJ2WzBdICs9ICIgJXMiICUgc2VsZi52aXNpdChub2RlLmNoaWxkcmVuWzBd
KVswXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm9yIGNoaWxkIGluIG5vZGUuY2hpbGRy
ZW46CisgICAgICAgICAgICAgICAgcnYuYXBwZW5kKGluZGVudCArIHNlbGYudmlzaXQoY2hpbGQp
WzBdKQorCisgICAgICAgIHJldHVybiBydgorCisgICAgZGVmIHZpc2l0X0xpc3ROb2RlKHNlbGYs
IG5vZGUpOgorICAgICAgICBydiA9IFsiWyJdCisgICAgICAgIHJ2LmV4dGVuZCgiLCAiLmpvaW4o
c2VsZi52aXNpdChjaGlsZClbMF0gZm9yIGNoaWxkIGluIG5vZGUuY2hpbGRyZW4pKQorICAgICAg
ICBydi5hcHBlbmQoIl0iKQorICAgICAgICByZXR1cm4gWyIiLmpvaW4ocnYpXQorCisgICAgZGVm
IHZpc2l0X1ZhbHVlTm9kZShzZWxmLCBub2RlKToKKyAgICAgICAgaWYgIiMiIGluIG5vZGUuZGF0
YSBvciAoaXNpbnN0YW5jZShub2RlLnBhcmVudCwgTGlzdE5vZGUpIGFuZAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoIiwiIGluIG5vZGUuZGF0YSBvciAiXSIgaW4gbm9kZS5kYXRh
KSk6CisgICAgICAgICAgICBpZiAiXCIiIGluIG5vZGUuZGF0YToKKyAgICAgICAgICAgICAgICBx
dW90ZSA9ICInIgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBxdW90ZSA9ICJc
IiIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHF1b3RlID0gIiIKKyAgICAgICAgcmV0dXJu
IFtxdW90ZSArIGVzY2FwZShub2RlLmRhdGEsIGV4dHJhcz1xdW90ZSkgKyBxdW90ZV0KKworICAg
IGRlZiB2aXNpdF9BdG9tTm9kZShzZWxmLCBub2RlKToKKyAgICAgICAgcmV0dXJuIFthdG9tX25h
bWVzW25vZGUuZGF0YV1dCisKKyAgICBkZWYgdmlzaXRfQ29uZGl0aW9uYWxOb2RlKHNlbGYsIG5v
ZGUpOgorICAgICAgICByZXR1cm4gWyJpZiAlczogJXMiICUgdHVwbGUoc2VsZi52aXNpdChpdGVt
KVswXSBmb3IgaXRlbSBpbiBub2RlLmNoaWxkcmVuKV0KKworICAgIGRlZiB2aXNpdF9TdHJpbmdO
b2RlKHNlbGYsIG5vZGUpOgorICAgICAgICBydiA9IFsiXCIlc1wiIiAlIGVzY2FwZShub2RlLmRh
dGEsIGV4dHJhcz0iXCIiKV0KKyAgICAgICAgZm9yIGNoaWxkIGluIG5vZGUuY2hpbGRyZW46Cisg
ICAgICAgICAgICBydlswXSArPSBzZWxmLnZpc2l0KGNoaWxkKVswXQorICAgICAgICByZXR1cm4g
cnYKKworICAgIGRlZiB2aXNpdF9OdW1iZXJOb2RlKHNlbGYsIG5vZGUpOgorICAgICAgICByZXR1
cm4gW3N0cihub2RlLmRhdGEpXQorCisgICAgZGVmIHZpc2l0X1ZhcmlhYmxlTm9kZShzZWxmLCBu
b2RlKToKKyAgICAgICAgcnYgPSBlc2NhcGUobm9kZS5kYXRhKQorICAgICAgICBmb3IgY2hpbGQg
aW4gbm9kZS5jaGlsZHJlbjoKKyAgICAgICAgICAgIHJ2ICs9IHNlbGYudmlzaXQoY2hpbGQpCisg
ICAgICAgIHJldHVybiBbcnZdCisKKyAgICBkZWYgdmlzaXRfSW5kZXhOb2RlKHNlbGYsIG5vZGUp
OgorICAgICAgICBhc3NlcnQgbGVuKG5vZGUuY2hpbGRyZW4pID09IDEKKyAgICAgICAgcmV0dXJu
IFsiWyVzXSIgJSBzZWxmLnZpc2l0KG5vZGUuY2hpbGRyZW5bMF0pWzBdXQorCisgICAgZGVmIHZp
c2l0X1VuYXJ5RXhwcmVzc2lvbk5vZGUoc2VsZiwgbm9kZSk6CisgICAgICAgIGNoaWxkcmVuID0g
W10KKyAgICAgICAgZm9yIGNoaWxkIGluIG5vZGUuY2hpbGRyZW46CisgICAgICAgICAgICBjaGls
ZF9zdHIgPSBzZWxmLnZpc2l0KGNoaWxkKVswXQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShj
aGlsZCwgQmluYXJ5RXhwcmVzc2lvbk5vZGUpOgorICAgICAgICAgICAgICAgIGNoaWxkX3N0ciA9
ICIoJXMpIiAlIGNoaWxkX3N0cgorICAgICAgICAgICAgY2hpbGRyZW4uYXBwZW5kKGNoaWxkX3N0
cikKKyAgICAgICAgcmV0dXJuIFsiICIuam9pbihjaGlsZHJlbildCisKKyAgICBkZWYgdmlzaXRf
QmluYXJ5RXhwcmVzc2lvbk5vZGUoc2VsZiwgbm9kZSk6CisgICAgICAgIGFzc2VydCBsZW4obm9k
ZS5jaGlsZHJlbikgPT0gMworICAgICAgICBjaGlsZHJlbiA9IFtdCisgICAgICAgIGZvciBjaGls
ZF9pbmRleCBpbiBbMSwgMCwgMl06CisgICAgICAgICAgICBjaGlsZCA9IG5vZGUuY2hpbGRyZW5b
Y2hpbGRfaW5kZXhdCisgICAgICAgICAgICBjaGlsZF9zdHIgPSBzZWxmLnZpc2l0KGNoaWxkKVsw
XQorICAgICAgICAgICAgaWYgKGlzaW5zdGFuY2UoY2hpbGQsIEJpbmFyeUV4cHJlc3Npb25Ob2Rl
KSBhbmQKKyAgICAgICAgICAgICAgICBwcmVjZWRlbmNlKG5vZGUuY2hpbGRyZW5bMF0pIDwgcHJl
Y2VkZW5jZShjaGlsZC5jaGlsZHJlblswXSkpOgorICAgICAgICAgICAgICAgIGNoaWxkX3N0ciA9
ICIoJXMpIiAlIGNoaWxkX3N0cgorICAgICAgICAgICAgY2hpbGRyZW4uYXBwZW5kKGNoaWxkX3N0
cikKKyAgICAgICAgcmV0dXJuIFsiICIuam9pbihjaGlsZHJlbildCisKKyAgICBkZWYgdmlzaXRf
VW5hcnlPcGVyYXRvck5vZGUoc2VsZiwgbm9kZSk6CisgICAgICAgIHJldHVybiBbc3RyKG5vZGUu
ZGF0YSldCisKKyAgICBkZWYgdmlzaXRfQmluYXJ5T3BlcmF0b3JOb2RlKHNlbGYsIG5vZGUpOgor
ICAgICAgICByZXR1cm4gW3N0cihub2RlLmRhdGEpXQorCisKK2RlZiBzZXJpYWxpemUodHJlZSwg
KmFyZ3MsICoqa3dhcmdzKToKKyAgICBzID0gTWFuaWZlc3RTZXJpYWxpemVyKCphcmdzLCAqKmt3
YXJncykKKyAgICByZXR1cm4gcy5zZXJpYWxpemUodHJlZSkKZGlmZiAtLWdpdCBhL1dlYkRyaXZl
clRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3dwdG1hbmlmZXN0
L3Rlc3RzL19faW5pdF9fLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dw
dHJ1bm5lci93cHRydW5uZXIvd3B0bWFuaWZlc3QvdGVzdHMvX19pbml0X18ucHkKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmU2OWRlMjliYjJkCmRpZmYgLS1naXQgYS9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci93cHRt
YW5pZmVzdC90ZXN0cy90ZXN0X2NvbmRpdGlvbmFsLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0
ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvd3B0bWFuaWZlc3QvdGVzdHMvdGVzdF9j
b25kaXRpb25hbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZDlm
ZmRmMjU1MDcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mv
dG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci93cHRtYW5pZmVzdC90ZXN0cy90ZXN0X2NvbmRpdGlv
bmFsLnB5CkBAIC0wLDAgKzEsMTQzIEBACitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBjU3RyaW5n
SU8gaW1wb3J0IFN0cmluZ0lPCisKK2Zyb20gLi5iYWNrZW5kcyBpbXBvcnQgY29uZGl0aW9uYWwK
K2Zyb20gLi5ub2RlIGltcG9ydCBCaW5hcnlFeHByZXNzaW9uTm9kZSwgQmluYXJ5T3BlcmF0b3JO
b2RlLCBWYXJpYWJsZU5vZGUsIE51bWJlck5vZGUKKworCitjbGFzcyBUZXN0Q29uZGl0aW9uYWwo
dW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBjb21waWxlKHNlbGYsIGlucHV0X3RleHQpOgor
ICAgICAgICByZXR1cm4gY29uZGl0aW9uYWwuY29tcGlsZShpbnB1dF90ZXh0KQorCisgICAgZGVm
IHRlc3RfZ2V0XzAoc2VsZik6CisgICAgICAgIGRhdGEgPSAiIiIKK2tleTogdmFsdWUKKworW0hl
YWRpbmcgMV0KKyAgb3RoZXJfa2V5OgorICAgIGlmIGEgPT0gMTogdmFsdWVfMQorICAgIGlmIGEg
PT0gMjogdmFsdWVfMgorICAgIHZhbHVlXzMKKyIiIgorCisgICAgICAgIG1hbmlmZXN0ID0gc2Vs
Zi5jb21waWxlKGRhdGEpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWFuaWZlc3QuZ2V0
KCJrZXkiKSwgInZhbHVlIikKKyAgICAgICAgY2hpbGRyZW4gPSBsaXN0KGl0ZW0gZm9yIGl0ZW0g
aW4gbWFuaWZlc3QuaXRlcmNoaWxkcmVuKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxl
bihjaGlsZHJlbiksIDEpCisgICAgICAgIHNlY3Rpb24gPSBjaGlsZHJlblswXQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFscyhzZWN0aW9uLm5hbWUsICJIZWFkaW5nIDEiKQorCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWxzKHNlY3Rpb24uZ2V0KCJvdGhlcl9rZXkiLCB7ImEiOiAxfSksICJ2YWx1
ZV8xIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VjdGlvbi5nZXQoIm90aGVyX2tleSIs
IHsiYSI6IDJ9KSwgInZhbHVlXzIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWN0aW9u
LmdldCgib3RoZXJfa2V5IiwgeyJhIjogN30pLCAidmFsdWVfMyIpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKHNlY3Rpb24uZ2V0KCJrZXkiKSwgInZhbHVlIikKKworICAgIGRlZiB0ZXN0X2dl
dF8xKHNlbGYpOgorICAgICAgICBkYXRhID0gIiIiCitrZXk6IHZhbHVlCisKK1tIZWFkaW5nIDFd
CisgIG90aGVyX2tleToKKyAgICBpZiBhID09ICIxIjogdmFsdWVfMQorICAgIGlmIGEgPT0gMjog
dmFsdWVfMgorICAgIHZhbHVlXzMKKyIiIgorCisgICAgICAgIG1hbmlmZXN0ID0gc2VsZi5jb21w
aWxlKGRhdGEpCisKKyAgICAgICAgY2hpbGRyZW4gPSBsaXN0KGl0ZW0gZm9yIGl0ZW0gaW4gbWFu
aWZlc3QuaXRlcmNoaWxkcmVuKCkpCisgICAgICAgIHNlY3Rpb24gPSBjaGlsZHJlblswXQorCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlY3Rpb24uZ2V0KCJvdGhlcl9rZXkiLCB7ImEiOiAi
MSJ9KSwgInZhbHVlXzEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWN0aW9uLmdldCgi
b3RoZXJfa2V5IiwgeyJhIjogMX0pLCAidmFsdWVfMyIpCisKKyAgICBkZWYgdGVzdF9nZXRfMihz
ZWxmKToKKyAgICAgICAgZGF0YSA9ICIiIgora2V5OgorICBpZiBhWzFdID09ICJiIjogdmFsdWVf
MQorICBpZiBhWzFdID09IDI6IHZhbHVlXzIKKyAgdmFsdWVfMworIiIiCisKKyAgICAgICAgbWFu
aWZlc3QgPSBzZWxmLmNvbXBpbGUoZGF0YSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFscyht
YW5pZmVzdC5nZXQoImtleSIsIHsiYSI6ICJhYiJ9KSwgInZhbHVlXzEiKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFscyhtYW5pZmVzdC5nZXQoImtleSIsIHsiYSI6IFsxLCAyXX0pLCAidmFsdWVf
MiIpCisKKyAgICBkZWYgdGVzdF9nZXRfMyhzZWxmKToKKyAgICAgICAgZGF0YSA9ICIiIgora2V5
OgorICBpZiBhWzFdID09ICJhYiJbMV06IHZhbHVlXzEKKyAgaWYgYVsxXSA9PSAyOiB2YWx1ZV8y
CisgIHZhbHVlXzMKKyIiIgorCisgICAgICAgIG1hbmlmZXN0ID0gc2VsZi5jb21waWxlKGRhdGEp
CisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWFuaWZlc3QuZ2V0KCJrZXkiLCB7ImEiOiAi
YWIifSksICJ2YWx1ZV8xIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWFuaWZlc3QuZ2V0
KCJrZXkiLCB7ImEiOiBbMSwgMl19KSwgInZhbHVlXzIiKQorCisgICAgZGVmIHRlc3Rfc2V0XzAo
c2VsZik6CisgICAgICAgIGRhdGEgPSAiIiIKK2tleToKKyAgaWYgYSA9PSAiYSI6IHZhbHVlXzEK
KyAgaWYgYSA9PSAiYiI6IHZhbHVlXzIKKyAgdmFsdWVfMworIiIiCisgICAgICAgIG1hbmlmZXN0
ID0gc2VsZi5jb21waWxlKGRhdGEpCisKKyAgICAgICAgbWFuaWZlc3Quc2V0KCJuZXdfa2V5Iiwg
InZhbHVlX25ldyIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWFuaWZlc3QuZ2V0KCJu
ZXdfa2V5IiksICJ2YWx1ZV9uZXciKQorCisgICAgZGVmIHRlc3Rfc2V0XzEoc2VsZik6CisgICAg
ICAgIGRhdGEgPSAiIiIKK2tleToKKyAgaWYgYSA9PSAiYSI6IHZhbHVlXzEKKyAgaWYgYSA9PSAi
YiI6IHZhbHVlXzIKKyAgdmFsdWVfMworIiIiCisKKyAgICAgICAgbWFuaWZlc3QgPSBzZWxmLmNv
bXBpbGUoZGF0YSkKKworICAgICAgICBtYW5pZmVzdC5zZXQoImtleSIsICJ2YWx1ZV9uZXciKQor
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1hbmlmZXN0LmdldCgia2V5IiksICJ2YWx1ZV9u
ZXciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtYW5pZmVzdC5nZXQoImtleSIsIHsiYSI6
ICJhIn0pLCAidmFsdWVfMSIpCisKKyAgICBkZWYgdGVzdF9zZXRfMihzZWxmKToKKyAgICAgICAg
ZGF0YSA9ICIiIgora2V5OgorICBpZiBhID09ICJhIjogdmFsdWVfMQorICBpZiBhID09ICJiIjog
dmFsdWVfMgorICB2YWx1ZV8zCisiIiIKKworICAgICAgICBtYW5pZmVzdCA9IHNlbGYuY29tcGls
ZShkYXRhKQorCisgICAgICAgIGV4cHIgPSBCaW5hcnlFeHByZXNzaW9uTm9kZShCaW5hcnlPcGVy
YXRvck5vZGUoIj09IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJp
YWJsZU5vZGUoImEiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJl
ck5vZGUoIjEiKSkKKworICAgICAgICBtYW5pZmVzdC5zZXQoImtleSIsICJ2YWx1ZV9uZXciLCBl
eHByKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1hbmlmZXN0LmdldCgia2V5IiwgeyJh
IjogMX0pLCAidmFsdWVfbmV3IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWFuaWZlc3Qu
Z2V0KCJrZXkiLCB7ImEiOiAiYSJ9KSwgInZhbHVlXzEiKQorCisgICAgZGVmIHRlc3RfYXBpXzAo
c2VsZik6CisgICAgICAgIGRhdGEgPSAiIiIKK2tleToKKyAgaWYgYSA9PSAxLjU6IHZhbHVlXzEK
KyAgdmFsdWVfMgora2V5XzE6IG90aGVyX3ZhbHVlCisiIiIKKyAgICAgICAgbWFuaWZlc3QgPSBz
ZWxmLmNvbXBpbGUoZGF0YSkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1hbmlmZXN0Lmlz
X2VtcHR5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtYW5pZmVzdC5yb290LCBtYW5pZmVz
dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hbmlmZXN0Lmhhc19rZXkoImtleV8xIikpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWFuaWZlc3QuaGFzX2tleSgia2V5XzIiKSkKKworICAg
ICAgICBzZWxmLmFzc2VydEVxdWFscyhzZXQobWFuaWZlc3QuaXRlcmtleXMoKSksIHNldChbImtl
eSIsICJrZXlfMSJdKSkKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90
b29scy93cHRydW5uZXIvd3B0cnVubmVyL3dwdG1hbmlmZXN0L3Rlc3RzL3Rlc3RfcGFyc2VyLnB5
IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIv
d3B0bWFuaWZlc3QvdGVzdHMvdGVzdF9wYXJzZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLjc2NWM5ODRmNDJmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVy
VGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvd3B0bWFuaWZlc3Qv
dGVzdHMvdGVzdF9wYXJzZXIucHkKQEAgLTAsMCArMSw3NSBAQAoraW1wb3J0IHVuaXR0ZXN0CisK
K2Zyb20gY1N0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworCitmcm9tIC4uIGltcG9ydCBwYXJzZXIK
KworIyBUaGVyZSBhcmVuJ3QgbWFueSB0ZXN0cyBoZXJlIGJlY2F1c2UgaXQgdHVybnMgb3V0IHRv
IGJlIHdheSBtb3JlIGNvbnZlbmllbnQgdG8KKyMgdXNlIHRlc3Rfc2VyaWFsaXplciBmb3IgdGhl
IG1ham9yaXR5IG9mIGNhc2VzCisKKworY2xhc3MgVGVzdEV4cHJlc3Npb24odW5pdHRlc3QuVGVz
dENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZXIgPSBwYXJz
ZXIuUGFyc2VyKCkKKworICAgIGRlZiBwYXJzZShzZWxmLCBpbnB1dF9zdHIpOgorICAgICAgICBy
ZXR1cm4gc2VsZi5wYXJzZXIucGFyc2UoU3RyaW5nSU8oaW5wdXRfc3RyKSkKKworICAgIGRlZiBj
b21wYXJlKHNlbGYsIGlucHV0X3RleHQsIGV4cGVjdGVkKToKKyAgICAgICAgYWN0dWFsID0gc2Vs
Zi5wYXJzZShpbnB1dF90ZXh0KQorICAgICAgICBzZWxmLm1hdGNoKGV4cGVjdGVkLCBhY3R1YWwp
CisKKyAgICBkZWYgbWF0Y2goc2VsZiwgZXhwZWN0ZWRfbm9kZSwgYWN0dWFsX25vZGUpOgorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFscyhleHBlY3RlZF9ub2RlWzBdLCBhY3R1YWxfbm9kZS5fX2Ns
YXNzX18uX19uYW1lX18pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGV4cGVjdGVkX25vZGVb
MV0sIGFjdHVhbF9ub2RlLmRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihleHBl
Y3RlZF9ub2RlWzJdKSwgbGVuKGFjdHVhbF9ub2RlLmNoaWxkcmVuKSkKKyAgICAgICAgZm9yIGV4
cGVjdGVkX2NoaWxkLCBhY3R1YWxfY2hpbGQgaW4gemlwKGV4cGVjdGVkX25vZGVbMl0sIGFjdHVh
bF9ub2RlLmNoaWxkcmVuKToKKyAgICAgICAgICAgIHNlbGYubWF0Y2goZXhwZWN0ZWRfY2hpbGQs
IGFjdHVhbF9jaGlsZCkKKworICAgIGRlZiB0ZXN0X2V4cHJfMChzZWxmKToKKyAgICAgICAgc2Vs
Zi5jb21wYXJlKAorICAgICAgICAgICAgIiIiCitrZXk6CisgIGlmIHggPT0gMSA6IHZhbHVlIiIi
LAorICAgICAgICAgICAgWyJEYXRhTm9kZSIsIE5vbmUsCisgICAgICAgICAgICAgW1siS2V5VmFs
dWVOb2RlIiwgImtleSIsCisgICAgICAgICAgICAgICBbWyJDb25kaXRpb25hbE5vZGUiLCBOb25l
LAorICAgICAgICAgICAgICAgICBbWyJCaW5hcnlFeHByZXNzaW9uTm9kZSIsIE5vbmUsCisgICAg
ICAgICAgICAgICAgICAgW1siQmluYXJ5T3BlcmF0b3JOb2RlIiwgIj09IiwgW11dLAorICAgICAg
ICAgICAgICAgICAgICBbIlZhcmlhYmxlTm9kZSIsICJ4IiwgW11dLAorICAgICAgICAgICAgICAg
ICAgICAgICBbIk51bWJlck5vZGUiLCAiMSIsIFtdXQorICAgICAgICAgICAgICAgICAgICBdXSwK
KyAgICAgICAgICAgICAgICAgICAgIFsiVmFsdWVOb2RlIiwgInZhbHVlIiwgW11dLAorICAgICAg
ICAgICAgICAgICAgXV1dXV1dCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2V4cHJfMShzZWxm
KToKKyAgICAgICAgc2VsZi5jb21wYXJlKAorICAgICAgICAgICAgIiIiCitrZXk6CisgIGlmIG5v
dCB4IGFuZCB5IDogdmFsdWUiIiIsCisgICAgICAgICAgICBbIkRhdGFOb2RlIiwgTm9uZSwKKyAg
ICAgICAgICAgICBbWyJLZXlWYWx1ZU5vZGUiLCAia2V5IiwKKyAgICAgICAgICAgICAgIFtbIkNv
bmRpdGlvbmFsTm9kZSIsIE5vbmUsCisgICAgICAgICAgICAgICAgIFtbIkJpbmFyeUV4cHJlc3Np
b25Ob2RlIiwgTm9uZSwKKyAgICAgICAgICAgICAgICAgICBbWyJCaW5hcnlPcGVyYXRvck5vZGUi
LCAiYW5kIiwgW11dLAorICAgICAgICAgICAgICAgICAgICBbIlVuYXJ5RXhwcmVzc2lvbk5vZGUi
LCBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICBbWyJVbmFyeU9wZXJhdG9yTm9kZSIsICJu
b3QiLCBbXV0sCisgICAgICAgICAgICAgICAgICAgICAgICBbIlZhcmlhYmxlTm9kZSIsICJ4Iiwg
W11dCisgICAgICAgICAgICAgICAgICAgICAgICBdXSwKKyAgICAgICAgICAgICAgICAgICAgICAg
WyJWYXJpYWJsZU5vZGUiLCAieSIsIFtdXQorICAgICAgICAgICAgICAgICAgICBdXSwKKyAgICAg
ICAgICAgICAgICAgICAgIFsiVmFsdWVOb2RlIiwgInZhbHVlIiwgW11dLAorICAgICAgICAgICAg
ICAgICAgXV1dXV1dCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2F0b21fMChzZWxmKToKKyAg
ICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhwYXJzZXIuUGFyc2VFcnJvcik6CisgICAgICAg
ICAgICBzZWxmLnBhcnNlKCJrZXk6IEBVbmtub3duIikKKworICAgIGRlZiB0ZXN0X2F0b21fMShz
ZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhwYXJzZXIuUGFyc2VFcnJvcik6
CisgICAgICAgICAgICBzZWxmLnBhcnNlKCJrZXk6IEB0cnVlIikKKworaWYgX19uYW1lX18gPT0g
Il9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRl
c3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3dwdG1hbmlmZXN0L3Rl
c3RzL3Rlc3Rfc2VyaWFsaXplci5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29s
cy93cHRydW5uZXIvd3B0cnVubmVyL3dwdG1hbmlmZXN0L3Rlc3RzL3Rlc3Rfc2VyaWFsaXplci5w
eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNmRiMmNiYmJiNDcKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVu
bmVyL3dwdHJ1bm5lci93cHRtYW5pZmVzdC90ZXN0cy90ZXN0X3NlcmlhbGl6ZXIucHkKQEAgLTAs
MCArMSwyMjcgQEAKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGNTdHJpbmdJ
TyBpbXBvcnQgU3RyaW5nSU8KKworaW1wb3J0IHB5dGVzdAorCitmcm9tIC4uIGltcG9ydCBwYXJz
ZXIsIHNlcmlhbGl6ZXIKKworCitjbGFzcyBUb2tlbml6ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNl
KToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc2VyaWFsaXplciA9IHNlcmlh
bGl6ZXIuTWFuaWZlc3RTZXJpYWxpemVyKCkKKyAgICAgICAgc2VsZi5wYXJzZXIgPSBwYXJzZXIu
UGFyc2VyKCkKKworICAgIGRlZiBzZXJpYWxpemUoc2VsZiwgaW5wdXRfc3RyKToKKyAgICAgICAg
cmV0dXJuIHNlbGYuc2VyaWFsaXplci5zZXJpYWxpemUoc2VsZi5wYXJzZXIucGFyc2UoaW5wdXRf
c3RyKSkKKworICAgIGRlZiBjb21wYXJlKHNlbGYsIGlucHV0X3N0ciwgZXhwZWN0ZWQ9Tm9uZSk6
CisgICAgICAgIGlmIGV4cGVjdGVkIGlzIE5vbmU6CisgICAgICAgICAgICBleHBlY3RlZCA9IGlu
cHV0X3N0cgorICAgICAgICBleHBlY3RlZCA9IGV4cGVjdGVkLmVuY29kZSgidXRmOCIpCisgICAg
ICAgIGFjdHVhbCA9IHNlbGYuc2VyaWFsaXplKGlucHV0X3N0cikKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbHMoYWN0dWFsLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0XzAoc2VsZik6CisgICAg
ICAgIHNlbGYuY29tcGFyZSgiIiJrZXk6IHZhbHVlCitbSGVhZGluZyAxXQorICBvdGhlcl9rZXk6
IG90aGVyX3ZhbHVlCisiIiIpCisKKyAgICBkZWYgdGVzdF8xKHNlbGYpOgorICAgICAgICBzZWxm
LmNvbXBhcmUoIiIia2V5OiB2YWx1ZQorW0hlYWRpbmcgMV0KKyAgb3RoZXJfa2V5OgorICAgIGlm
IGEgb3IgYjogb3RoZXJfdmFsdWUKKyIiIikKKworICAgIGRlZiB0ZXN0XzIoc2VsZik6CisgICAg
ICAgIHNlbGYuY29tcGFyZSgiIiJrZXk6IHZhbHVlCitbSGVhZGluZyAxXQorICBvdGhlcl9rZXk6
CisgICAgaWYgYSBvciBiOiBvdGhlcl92YWx1ZQorICAgIGZhbGxiYWNrX3ZhbHVlCisiIiIpCisK
KyAgICBkZWYgdGVzdF8zKHNlbGYpOgorICAgICAgICBzZWxmLmNvbXBhcmUoIiIia2V5OiB2YWx1
ZQorW0hlYWRpbmcgMV0KKyAgb3RoZXJfa2V5OgorICAgIGlmIGEgPT0gMTogb3RoZXJfdmFsdWUK
KyAgICBmYWxsYmFja192YWx1ZQorIiIiKQorCisgICAgZGVmIHRlc3RfNChzZWxmKToKKyAgICAg
ICAgc2VsZi5jb21wYXJlKCIiImtleTogdmFsdWUKK1tIZWFkaW5nIDFdCisgIG90aGVyX2tleToK
KyAgICBpZiBhID09ICIxIjogb3RoZXJfdmFsdWUKKyAgICBmYWxsYmFja192YWx1ZQorIiIiKQor
CisgICAgZGVmIHRlc3RfNShzZWxmKToKKyAgICAgICAgc2VsZi5jb21wYXJlKCIiImtleTogdmFs
dWUKK1tIZWFkaW5nIDFdCisgIG90aGVyX2tleToKKyAgICBpZiBhID09ICJhYmMiWzFdOiBvdGhl
cl92YWx1ZQorICAgIGZhbGxiYWNrX3ZhbHVlCisiIiIpCisKKyAgICBkZWYgdGVzdF82KHNlbGYp
OgorICAgICAgICBzZWxmLmNvbXBhcmUoIiIia2V5OiB2YWx1ZQorW0hlYWRpbmcgMV0KKyAgb3Ro
ZXJfa2V5OgorICAgIGlmIGEgPT0gImFiYyJbY106IG90aGVyX3ZhbHVlCisgICAgZmFsbGJhY2tf
dmFsdWUKKyIiIikKKworICAgIGRlZiB0ZXN0Xzcoc2VsZik6CisgICAgICAgIHNlbGYuY29tcGFy
ZSgiIiJrZXk6IHZhbHVlCitbSGVhZGluZyAxXQorICBvdGhlcl9rZXk6CisgICAgaWYgKGEgb3Ig
YikgYW5kIGM6IG90aGVyX3ZhbHVlCisgICAgZmFsbGJhY2tfdmFsdWUKKyIiIiwKKyIiImtleTog
dmFsdWUKK1tIZWFkaW5nIDFdCisgIG90aGVyX2tleToKKyAgICBpZiBhIG9yIGIgYW5kIGM6IG90
aGVyX3ZhbHVlCisgICAgZmFsbGJhY2tfdmFsdWUKKyIiIikKKworICAgIGRlZiB0ZXN0Xzgoc2Vs
Zik6CisgICAgICAgIHNlbGYuY29tcGFyZSgiIiJrZXk6IHZhbHVlCitbSGVhZGluZyAxXQorICBv
dGhlcl9rZXk6CisgICAgaWYgYSBvciAoYiBhbmQgYyk6IG90aGVyX3ZhbHVlCisgICAgZmFsbGJh
Y2tfdmFsdWUKKyIiIikKKworICAgIGRlZiB0ZXN0Xzkoc2VsZik6CisgICAgICAgIHNlbGYuY29t
cGFyZSgiIiJrZXk6IHZhbHVlCitbSGVhZGluZyAxXQorICBvdGhlcl9rZXk6CisgICAgaWYgbm90
IChhIGFuZCBiKTogb3RoZXJfdmFsdWUKKyAgICBmYWxsYmFja192YWx1ZQorIiIiKQorCisgICAg
ZGVmIHRlc3RfMTAoc2VsZik6CisgICAgICAgIHNlbGYuY29tcGFyZSgiIiJrZXk6IHZhbHVlCitb
SGVhZGluZyAxXQorICBzb21lX2tleTogc29tZV92YWx1ZQorCitbSGVhZGluZyAyXQorICBvdGhl
cl9rZXk6IG90aGVyX3ZhbHVlCisiIiIpCisKKyAgICBkZWYgdGVzdF8xMShzZWxmKToKKyAgICAg
ICAgc2VsZi5jb21wYXJlKCIiImtleToKKyAgaWYgbm90IGEgYW5kIGIgYW5kIGMgYW5kIGQ6IHRy
dWUKKyIiIikKKworICAgIGRlZiB0ZXN0XzEyKHNlbGYpOgorICAgICAgICBzZWxmLmNvbXBhcmUo
IiIiW0hlYWRpbmcgMV0KKyAga2V5OiBbYToxLCBiOjJdCisiIiIpCisKKyAgICBkZWYgdGVzdF8x
MyhzZWxmKToKKyAgICAgICAgc2VsZi5jb21wYXJlKCIiImtleTogW2E6MSwgImI6IyJdCisiIiIp
CisKKyAgICBkZWYgdGVzdF8xNChzZWxmKToKKyAgICAgICAgc2VsZi5jb21wYXJlKCIiImtleTog
WyIsIl0KKyIiIikKKworICAgIGRlZiB0ZXN0XzE1KHNlbGYpOgorICAgICAgICBzZWxmLmNvbXBh
cmUoIiIia2V5OiAsCisiIiIpCisKKyAgICBkZWYgdGVzdF8xNihzZWxmKToKKyAgICAgICAgc2Vs
Zi5jb21wYXJlKCIiImtleTogWyJdIiwgYl0KKyIiIikKKworICAgIGRlZiB0ZXN0XzE3KHNlbGYp
OgorICAgICAgICBzZWxmLmNvbXBhcmUoIiIia2V5OiBdCisiIiIpCisKKyAgICBkZWYgdGVzdF8x
OChzZWxmKToKKyAgICAgICAgc2VsZi5jb21wYXJlKCIiImtleTogXF0KKyAgICAgICAgIiIiLCAi
IiJrZXk6IF0KKyIiIikKKworICAgIGRlZiB0ZXN0X2VzY2FwZV8wKHNlbGYpOgorICAgICAgICBz
ZWxmLmNvbXBhcmUociIiImtcdFw6eTogXGFcYlxmXG5cclx0XHYiIiIsCisgICAgICAgICAgICAg
ICAgICAgICByIiIia1x0XDp5OiBceDA3XHgwOFx4MGNcblxyXHRceDBiCisiIiIpCisKKyAgICBk
ZWYgdGVzdF9lc2NhcGVfMShzZWxmKToKKyAgICAgICAgc2VsZi5jb21wYXJlKHIiIiJrXHgwMDog
XHgxMkFceDQ1IiIiLAorICAgICAgICAgICAgICAgICAgICAgciIiImtceDAwOiBceDEyQUUKKyIi
IikKKworICAgIGRlZiB0ZXN0X2VzY2FwZV8yKHNlbGYpOgorICAgICAgICBzZWxmLmNvbXBhcmUo
ciIiImtcdTAwNDV5OiBcdTEyMzRBXHVBQmM2IiIiLAorICAgICAgICAgICAgICAgICAgICAgdSIi
ImtFeTogXHUxMjM0QVx1YWJjNgorIiIiKQorCisgICAgZGVmIHRlc3RfZXNjYXBlXzMoc2VsZik6
CisgICAgICAgIHNlbGYuY29tcGFyZShyIiIia1x1MDA0NXk6IFx1MTIzNEFcdUFCYzYiIiIsCisg
ICAgICAgICAgICAgICAgICAgICB1IiIia0V5OiBcdTEyMzRBXHVhYmM2CisiIiIpCisKKyAgICBk
ZWYgdGVzdF9lc2NhcGVfNChzZWxmKToKKyAgICAgICAgc2VsZi5jb21wYXJlKHIiIiJrZXk6ICdc
dTEyMzRBXHVBQmM2JyIiIiwKKyAgICAgICAgICAgICAgICAgICAgIHUiIiJrZXk6IFx1MTIzNEFc
dWFiYzYKKyIiIikKKworICAgIGRlZiB0ZXN0X2VzY2FwZV81KHNlbGYpOgorICAgICAgICBzZWxm
LmNvbXBhcmUociIiImtleTogW1x1MTIzNEFcdUFCYzZdIiIiLAorICAgICAgICAgICAgICAgICAg
ICAgdSIiImtleTogW1x1MTIzNEFcdWFiYzZdCisiIiIpCisKKyAgICBkZWYgdGVzdF9lc2NhcGVf
NihzZWxmKToKKyAgICAgICAgc2VsZi5jb21wYXJlKHIiIiJrZXk6IFtcdTEyMzRBXHVBQmM2XCxd
IiIiLAorICAgICAgICAgICAgICAgICAgICAgdSIiImtleTogWyJcdTEyMzRBXHVhYmM2LCJdCisi
IiIpCisKKyAgICBkZWYgdGVzdF9lc2NhcGVfNyhzZWxmKToKKyAgICAgICAgc2VsZi5jb21wYXJl
KHIiIiJrZXk6IFtcLFxdXCNdIiIiLAorICAgICAgICAgICAgICAgICAgICAgciIiImtleTogWyIs
XSMiXQorIiIiKQorCisgICAgZGVmIHRlc3RfZXNjYXBlXzgoc2VsZik6CisgICAgICAgIHNlbGYu
Y29tcGFyZShyIiIia2V5OiBcIyIiIiwKKyAgICAgICAgICAgICAgICAgICAgIHIiIiJrZXk6ICIj
IgorIiIiKQorCisgICAgQHB5dGVzdC5tYXJrLnhmYWlsKHN5cy5tYXh1bmljb2RlID09IDB4RkZG
RiwgcmVhc29uPSJuYXJyb3cgdW5pY29kZSIpCisgICAgZGVmIHRlc3RfZXNjYXBlXzkoc2VsZik6
CisgICAgICAgIHNlbGYuY29tcGFyZShyIiIia2V5OiBcVTEwRkZGRmFiYyIiIiwKKyAgICAgICAg
ICAgICAgICAgICAgIHUiIiJrZXk6IFxVMDAxMEZGRkZhYmMKKyIiIikKKworICAgIGRlZiB0ZXN0
X2VzY2FwZV8xMChzZWxmKToKKyAgICAgICAgc2VsZi5jb21wYXJlKHIiIiJrZXk6IFx1MTBGRmFi
IiIiLAorICAgICAgICAgICAgICAgICAgICAgdSIiImtleTogXHUxMEZGYWIKKyIiIikKKworICAg
IGRlZiB0ZXN0X2VzY2FwZV8xMShzZWxmKToKKyAgICAgICAgc2VsZi5jb21wYXJlKHIiIiJrZXk6
IFxcYWIKKyIiIikKKworICAgIGRlZiB0ZXN0X2F0b21fMShzZWxmKToKKyAgICAgICAgICAgIHNl
bGYuY29tcGFyZShyIiIia2V5OiBAVHJ1ZQorIiIiKQorCisgICAgZGVmIHRlc3RfYXRvbV8yKHNl
bGYpOgorICAgICAgICAgICAgc2VsZi5jb21wYXJlKHIiIiJrZXk6IEBGYWxzZQorIiIiKQorCisg
ICAgZGVmIHRlc3RfYXRvbV8zKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5jb21wYXJlKHIiIiJr
ZXk6IEBSZXNldAorIiIiKQorCisgICAgZGVmIHRlc3RfYXRvbV80KHNlbGYpOgorICAgICAgICBz
ZWxmLmNvbXBhcmUociIiImtleTogW2EsIEBSZXNldCwgYl0KKyIiIikKZGlmZiAtLWdpdCBhL1dl
YkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3dwdG1h
bmlmZXN0L3Rlc3RzL3Rlc3Rfc3RhdGljLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNj
L3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvd3B0bWFuaWZlc3QvdGVzdHMvdGVzdF9zdGF0aWMu
cHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmVkMjg1NzhkM2JmCi0t
LSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1
bm5lci93cHRydW5uZXIvd3B0bWFuaWZlc3QvdGVzdHMvdGVzdF9zdGF0aWMucHkKQEAgLTAsMCAr
MSw5OCBAQAoraW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gY1N0cmluZ0lPIGltcG9ydCBTdHJpbmdJ
TworCitmcm9tIC4uYmFja2VuZHMgaW1wb3J0IHN0YXRpYworCisjIFRoZXJlIGFyZW4ndCBtYW55
IHRlc3RzIGhlcmUgYmVjYXVzZSBpdCB0dXJucyBvdXQgdG8gYmUgd2F5IG1vcmUgY29udmVuaWVu
dCB0bworIyB1c2UgdGVzdF9zZXJpYWxpemVyIGZvciB0aGUgbWFqb3JpdHkgb2YgY2FzZXMKKwor
CitjbGFzcyBUZXN0U3RhdGljKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgY29tcGlsZShz
ZWxmLCBpbnB1dF90ZXh0LCBpbnB1dF9kYXRhKToKKyAgICAgICAgcmV0dXJuIHN0YXRpYy5jb21w
aWxlKGlucHV0X3RleHQsIGlucHV0X2RhdGEpCisKKyAgICBkZWYgdGVzdF9nZXRfMChzZWxmKToK
KyAgICAgICAgZGF0YSA9ICIiIgora2V5OiB2YWx1ZQorCitbSGVhZGluZyAxXQorICBvdGhlcl9r
ZXk6CisgICAgaWYgYSA9PSAxOiB2YWx1ZV8xCisgICAgaWYgYSA9PSAyOiB2YWx1ZV8yCisgICAg
dmFsdWVfMworIiIiCisKKyAgICAgICAgbWFuaWZlc3QgPSBzZWxmLmNvbXBpbGUoZGF0YSwgeyJh
IjogMn0pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWFuaWZlc3QuZ2V0KCJrZXkiKSwg
InZhbHVlIikKKyAgICAgICAgY2hpbGRyZW4gPSBsaXN0KGl0ZW0gZm9yIGl0ZW0gaW4gbWFuaWZl
c3QuaXRlcmNoaWxkcmVuKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihjaGlsZHJl
biksIDEpCisgICAgICAgIHNlY3Rpb24gPSBjaGlsZHJlblswXQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFscyhzZWN0aW9uLm5hbWUsICJIZWFkaW5nIDEiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWxzKHNlY3Rpb24uZ2V0KCJvdGhlcl9rZXkiKSwgInZhbHVlXzIiKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFscyhzZWN0aW9uLmdldCgia2V5IiksICJ2YWx1ZSIpCisKKyAgICBkZWYgdGVz
dF9nZXRfMShzZWxmKToKKyAgICAgICAgZGF0YSA9ICIiIgora2V5OiB2YWx1ZQorCitbSGVhZGlu
ZyAxXQorICBvdGhlcl9rZXk6CisgICAgaWYgYSA9PSAxOiB2YWx1ZV8xCisgICAgaWYgYSA9PSAy
OiB2YWx1ZV8yCisgICAgdmFsdWVfMworIiIiCisgICAgICAgIG1hbmlmZXN0ID0gc2VsZi5jb21w
aWxlKGRhdGEsIHsiYSI6IDN9KQorCisgICAgICAgIGNoaWxkcmVuID0gbGlzdChpdGVtIGZvciBp
dGVtIGluIG1hbmlmZXN0Lml0ZXJjaGlsZHJlbigpKQorICAgICAgICBzZWN0aW9uID0gY2hpbGRy
ZW5bMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VjdGlvbi5nZXQoIm90aGVyX2tleSIp
LCAidmFsdWVfMyIpCisKKyAgICBkZWYgdGVzdF9nZXRfMyhzZWxmKToKKyAgICAgICAgZGF0YSA9
ICIiImtleToKKyAgaWYgYSA9PSAiMSI6IHZhbHVlXzEKKyAgaWYgYVswXSA9PSAiYWIiWzBdOiB2
YWx1ZV8yCisiIiIKKyAgICAgICAgbWFuaWZlc3QgPSBzZWxmLmNvbXBpbGUoZGF0YSwgeyJhIjog
IjEifSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWFuaWZlc3QuZ2V0KCJrZXkiKSwgInZh
bHVlXzEiKQorCisgICAgICAgIG1hbmlmZXN0ID0gc2VsZi5jb21waWxlKGRhdGEsIHsiYSI6ICJh
YyJ9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtYW5pZmVzdC5nZXQoImtleSIpLCAidmFs
dWVfMiIpCisKKyAgICBkZWYgdGVzdF9nZXRfNChzZWxmKToKKyAgICAgICAgZGF0YSA9ICIiImtl
eToKKyAgaWYgbm90IGE6IHZhbHVlXzEKKyAgdmFsdWVfMgorIiIiCisgICAgICAgIG1hbmlmZXN0
ID0gc2VsZi5jb21waWxlKGRhdGEsIHsiYSI6IFRydWV9KQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFscyhtYW5pZmVzdC5nZXQoImtleSIpLCAidmFsdWVfMiIpCisKKyAgICAgICAgbWFuaWZlc3Qg
PSBzZWxmLmNvbXBpbGUoZGF0YSwgeyJhIjogRmFsc2V9KQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFscyhtYW5pZmVzdC5nZXQoImtleSIpLCAidmFsdWVfMSIpCisKKyAgICBkZWYgdGVzdF9hcGko
c2VsZik6CisgICAgICAgIGRhdGEgPSAiIiJrZXk6CisgIGlmIGEgPT0gMS41OiB2YWx1ZV8xCisg
IHZhbHVlXzIKK2tleV8xOiBvdGhlcl92YWx1ZQorIiIiCisgICAgICAgIG1hbmlmZXN0ID0gc2Vs
Zi5jb21waWxlKGRhdGEsIHsiYSI6IDEuNX0pCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSht
YW5pZmVzdC5pc19lbXB0eSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWFuaWZlc3Qucm9v
dCwgbWFuaWZlc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYW5pZmVzdC5oYXNfa2V5KCJr
ZXlfMSIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1hbmlmZXN0Lmhhc19rZXkoImtleV8y
IikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2V0KG1hbmlmZXN0Lml0ZXJrZXlzKCkp
LCBzZXQoWyJrZXkiLCAia2V5XzEiXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNldCht
YW5pZmVzdC5pdGVydmFsdWVzKCkpLCBzZXQoWyJ2YWx1ZV8xIiwgIm90aGVyX3ZhbHVlIl0pKQor
CisgICAgZGVmIHRlc3RfaXNfZW1wdHlfMShzZWxmKToKKyAgICAgICAgZGF0YSA9ICIiIgorW1Nl
Y3Rpb25dCisgIFtTdWJzZWN0aW9uXQorIiIiCisgICAgICAgIG1hbmlmZXN0ID0gc2VsZi5jb21w
aWxlKGRhdGEsIHt9KQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYW5pZmVzdC5pc19lbXB0
eSkKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5u
ZXIvd3B0cnVubmVyL3dwdG1hbmlmZXN0L3Rlc3RzL3Rlc3RfdG9rZW5pemVyLnB5IGIvV2ViRHJp
dmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvd3B0bWFuaWZl
c3QvdGVzdHMvdGVzdF90b2tlbml6ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAuLjg4MTc2YzVhMTY5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMv
aW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvd3B0bWFuaWZlc3QvdGVzdHMv
dGVzdF90b2tlbml6ZXIucHkKQEAgLTAsMCArMSwzNTcgQEAKK2ltcG9ydCBzeXMKK2ltcG9ydCBv
cworaW1wb3J0IHVuaXR0ZXN0CisKK3N5cy5wYXRoLmluc2VydCgwLCBvcy5wYXRoLmFic3BhdGgo
Ii4uIikpCitmcm9tIGNTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KKworZnJvbSAuLiBpbXBvcnQg
cGFyc2VyCitmcm9tIC4ucGFyc2VyIGltcG9ydCB0b2tlbl90eXBlcworCisKK2NsYXNzIFRva2Vu
aXplclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAg
ICAgc2VsZi50b2tlbml6ZXIgPSBwYXJzZXIuVG9rZW5pemVyKCkKKworICAgIGRlZiB0b2tlbml6
ZShzZWxmLCBpbnB1dF9zdHIpOgorICAgICAgICBydiA9IFtdCisgICAgICAgIGZvciBpdGVtIGlu
IHNlbGYudG9rZW5pemVyLnRva2VuaXplKFN0cmluZ0lPKGlucHV0X3N0cikpOgorICAgICAgICAg
ICAgcnYuYXBwZW5kKGl0ZW0pCisgICAgICAgICAgICBpZiBpdGVtWzBdID09IHRva2VuX3R5cGVz
LmVvZjoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICByZXR1cm4gcnYKKworICAgIGRl
ZiBjb21wYXJlKHNlbGYsIGlucHV0X3RleHQsIGV4cGVjdGVkKToKKyAgICAgICAgZXhwZWN0ZWQg
PSBleHBlY3RlZCArIFsodG9rZW5fdHlwZXMuZW9mLCBOb25lKV0KKyAgICAgICAgYWN0dWFsID0g
c2VsZi50b2tlbml6ZShpbnB1dF90ZXh0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhY3R1
YWwsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfaGVhZGluZ18wKHNlbGYpOgorICAgICAgICBz
ZWxmLmNvbXBhcmUoIiIiW0hlYWRpbmcgdGV4dF0iIiIsCisgICAgICAgICAgICAgICAgICAgICBb
KHRva2VuX3R5cGVzLnBhcmVuLCAiWyIpLAorICAgICAgICAgICAgICAgICAgICAgICh0b2tlbl90
eXBlcy5zdHJpbmcsICJIZWFkaW5nIHRleHQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAodG9r
ZW5fdHlwZXMucGFyZW4sICJdIildKQorCisgICAgZGVmIHRlc3RfaGVhZGluZ18xKHNlbGYpOgor
ICAgICAgICBzZWxmLmNvbXBhcmUoIiIiW0hlYWRpbmcgW3RleHRcXV0iIiIsCisgICAgICAgICAg
ICAgICAgICAgICBbKHRva2VuX3R5cGVzLnBhcmVuLCAiWyIpLAorICAgICAgICAgICAgICAgICAg
ICAgICh0b2tlbl90eXBlcy5zdHJpbmcsICJIZWFkaW5nIFt0ZXh0XSIpLAorICAgICAgICAgICAg
ICAgICAgICAgICh0b2tlbl90eXBlcy5wYXJlbiwgIl0iKV0pCisKKyAgICBkZWYgdGVzdF9oZWFk
aW5nXzIoc2VsZik6CisgICAgICAgIHNlbGYuY29tcGFyZSgiIiJbSGVhZGluZyAjdGV4dF0iIiIs
CisgICAgICAgICAgICAgICAgICAgICBbKHRva2VuX3R5cGVzLnBhcmVuLCAiWyIpLAorICAgICAg
ICAgICAgICAgICAgICAgICh0b2tlbl90eXBlcy5zdHJpbmcsICJIZWFkaW5nICN0ZXh0IiksCisg
ICAgICAgICAgICAgICAgICAgICAgKHRva2VuX3R5cGVzLnBhcmVuLCAiXSIpXSkKKworICAgIGRl
ZiB0ZXN0X2hlYWRpbmdfMyhzZWxmKToKKyAgICAgICAgc2VsZi5jb21wYXJlKCIiIltIZWFkaW5n
IFtcXXRleHRdIiIiLAorICAgICAgICAgICAgICAgICAgICAgWyh0b2tlbl90eXBlcy5wYXJlbiwg
IlsiKSwKKyAgICAgICAgICAgICAgICAgICAgICAodG9rZW5fdHlwZXMuc3RyaW5nLCAiSGVhZGlu
ZyBbXXRleHQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAodG9rZW5fdHlwZXMucGFyZW4sICJd
IildKQorCisgICAgZGVmIHRlc3RfaGVhZGluZ180KHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYu
YXNzZXJ0UmFpc2VzKHBhcnNlci5QYXJzZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYudG9rZW5p
emUoIltIZWFkaW5nIikKKworICAgIGRlZiB0ZXN0X2hlYWRpbmdfNShzZWxmKToKKyAgICAgICAg
c2VsZi5jb21wYXJlKCIiIltIZWFkaW5nIFtcXXRleHRdICNjb21tZW50IiIiLAorICAgICAgICAg
ICAgICAgICAgICAgWyh0b2tlbl90eXBlcy5wYXJlbiwgIlsiKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAodG9rZW5fdHlwZXMuc3RyaW5nLCAiSGVhZGluZyBbXXRleHQiKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAodG9rZW5fdHlwZXMucGFyZW4sICJdIildKQorCisgICAgZGVmIHRlc3RfaGVh
ZGluZ182KHNlbGYpOgorICAgICAgICBzZWxmLmNvbXBhcmUociIiIltIZWFkaW5nIFx0dGV4dF0i
IiIsCisgICAgICAgICAgICAgICAgICAgICBbKHRva2VuX3R5cGVzLnBhcmVuLCAiWyIpLAorICAg
ICAgICAgICAgICAgICAgICAgICh0b2tlbl90eXBlcy5zdHJpbmcsICJIZWFkaW5nIFx0dGV4dCIp
LAorICAgICAgICAgICAgICAgICAgICAgICh0b2tlbl90eXBlcy5wYXJlbiwgIl0iKV0pCisKKyAg
ICBkZWYgdGVzdF9rZXlfMChzZWxmKToKKyAgICAgICAgc2VsZi5jb21wYXJlKCIiImtleTp2YWx1
ZSIiIiwKKyAgICAgICAgICAgICAgICAgICAgIFsodG9rZW5fdHlwZXMuc3RyaW5nLCAia2V5Iiks
CisgICAgICAgICAgICAgICAgICAgICAgKHRva2VuX3R5cGVzLnNlcGFyYXRvciwgIjoiKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAodG9rZW5fdHlwZXMuc3RyaW5nLCAidmFsdWUiKV0pCisKKyAg
ICBkZWYgdGVzdF9rZXlfMShzZWxmKToKKyAgICAgICAgc2VsZi5jb21wYXJlKCIiImtleSAgOiAg
dmFsdWUiIiIsCisgICAgICAgICAgICAgICAgICAgICBbKHRva2VuX3R5cGVzLnN0cmluZywgImtl
eSIpLAorICAgICAgICAgICAgICAgICAgICAgICh0b2tlbl90eXBlcy5zZXBhcmF0b3IsICI6Iiks
CisgICAgICAgICAgICAgICAgICAgICAgKHRva2VuX3R5cGVzLnN0cmluZywgInZhbHVlIildKQor
CisgICAgZGVmIHRlc3Rfa2V5XzIoc2VsZik6CisgICAgICAgIHNlbGYuY29tcGFyZSgiIiJrZXkg
IDogIHZhbCB1ZSIiIiwKKyAgICAgICAgICAgICAgICAgICAgIFsodG9rZW5fdHlwZXMuc3RyaW5n
LCAia2V5IiksCisgICAgICAgICAgICAgICAgICAgICAgKHRva2VuX3R5cGVzLnNlcGFyYXRvciwg
IjoiKSwKKyAgICAgICAgICAgICAgICAgICAgICAodG9rZW5fdHlwZXMuc3RyaW5nLCAidmFsIHVl
IildKQorCisgICAgZGVmIHRlc3Rfa2V5XzMoc2VsZik6CisgICAgICAgIHNlbGYuY29tcGFyZSgi
IiJrZXk6IHZhbHVlI2NvbW1lbnQiIiIsCisgICAgICAgICAgICAgICAgICAgICBbKHRva2VuX3R5
cGVzLnN0cmluZywgImtleSIpLAorICAgICAgICAgICAgICAgICAgICAgICh0b2tlbl90eXBlcy5z
ZXBhcmF0b3IsICI6IiksCisgICAgICAgICAgICAgICAgICAgICAgKHRva2VuX3R5cGVzLnN0cmlu
ZywgInZhbHVlIildKQorCisgICAgZGVmIHRlc3Rfa2V5XzQoc2VsZik6CisgICAgICAgIHdpdGgg
c2VsZi5hc3NlcnRSYWlzZXMocGFyc2VyLlBhcnNlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi50
b2tlbml6ZSgiIiJrZSB5OiB2YWx1ZSIiIikKKworICAgIGRlZiB0ZXN0X2tleV81KHNlbGYpOgor
ICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHBhcnNlci5QYXJzZUVycm9yKToKKyAgICAg
ICAgICAgIHNlbGYudG9rZW5pemUoIiIia2V5IiIiKQorCisgICAgZGVmIHRlc3Rfa2V5XzYoc2Vs
Zik6CisgICAgICAgIHNlbGYuY29tcGFyZSgiIiJrZXk6ICJ2YWx1ZVwiIiIiLAorICAgICAgICAg
ICAgICAgICAgICAgWyh0b2tlbl90eXBlcy5zdHJpbmcsICJrZXkiKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAodG9rZW5fdHlwZXMuc2VwYXJhdG9yLCAiOiIpLAorICAgICAgICAgICAgICAgICAg
ICAgICh0b2tlbl90eXBlcy5zdHJpbmcsICJ2YWx1ZSIpXSkKKworICAgIGRlZiB0ZXN0X2tleV83
KHNlbGYpOgorICAgICAgICBzZWxmLmNvbXBhcmUoIiIia2V5OiAndmFsdWUnIiIiLAorICAgICAg
ICAgICAgICAgICAgICAgWyh0b2tlbl90eXBlcy5zdHJpbmcsICJrZXkiKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAodG9rZW5fdHlwZXMuc2VwYXJhdG9yLCAiOiIpLAorICAgICAgICAgICAgICAg
ICAgICAgICh0b2tlbl90eXBlcy5zdHJpbmcsICJ2YWx1ZSIpXSkKKworICAgIGRlZiB0ZXN0X2tl
eV84KHNlbGYpOgorICAgICAgICBzZWxmLmNvbXBhcmUoIiIia2V5OiAiI3ZhbHVlXCIiIiIsCisg
ICAgICAgICAgICAgICAgICAgICBbKHRva2VuX3R5cGVzLnN0cmluZywgImtleSIpLAorICAgICAg
ICAgICAgICAgICAgICAgICh0b2tlbl90eXBlcy5zZXBhcmF0b3IsICI6IiksCisgICAgICAgICAg
ICAgICAgICAgICAgKHRva2VuX3R5cGVzLnN0cmluZywgIiN2YWx1ZSIpXSkKKworICAgIGRlZiB0
ZXN0X2tleV85KHNlbGYpOgorICAgICAgICBzZWxmLmNvbXBhcmUoIiIia2V5OiAnI3ZhbHVlXCci
IiIsCisgICAgICAgICAgICAgICAgICAgICBbKHRva2VuX3R5cGVzLnN0cmluZywgImtleSIpLAor
ICAgICAgICAgICAgICAgICAgICAgICh0b2tlbl90eXBlcy5zZXBhcmF0b3IsICI6IiksCisgICAg
ICAgICAgICAgICAgICAgICAgKHRva2VuX3R5cGVzLnN0cmluZywgIiN2YWx1ZSIpXSkKKworICAg
IGRlZiB0ZXN0X2tleV8xMChzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhw
YXJzZXIuUGFyc2VFcnJvcik6CisgICAgICAgICAgICBzZWxmLnRva2VuaXplKCIiImtleTogInZh
bHVlIiIiKQorCisgICAgZGVmIHRlc3Rfa2V5XzExKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYu
YXNzZXJ0UmFpc2VzKHBhcnNlci5QYXJzZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYudG9rZW5p
emUoIiIia2V5OiAndmFsdWUiIiIpCisKKyAgICBkZWYgdGVzdF9rZXlfMTIoc2VsZik6CisgICAg
ICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMocGFyc2VyLlBhcnNlRXJyb3IpOgorICAgICAgICAg
ICAgc2VsZi50b2tlbml6ZSgiIiJrZXk6ICd2YWx1ZSIiIikKKworICAgIGRlZiB0ZXN0X2tleV8x
MyhzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhwYXJzZXIuUGFyc2VFcnJv
cik6CisgICAgICAgICAgICBzZWxmLnRva2VuaXplKCIiImtleTogJ3ZhbHVlJyBhYmMiIiIpCisK
KyAgICBkZWYgdGVzdF9rZXlfMTQoc2VsZik6CisgICAgICAgIHNlbGYuY29tcGFyZShyIiIia2V5
OiBcXG5iIiIiLAorICAgICAgICAgICAgICAgICAgICAgWyh0b2tlbl90eXBlcy5zdHJpbmcsICJr
ZXkiKSwKKyAgICAgICAgICAgICAgICAgICAgICAodG9rZW5fdHlwZXMuc2VwYXJhdG9yLCAiOiIp
LAorICAgICAgICAgICAgICAgICAgICAgICh0b2tlbl90eXBlcy5zdHJpbmcsIHIiXG5iIildKQor
CisgICAgZGVmIHRlc3RfbGlzdF8wKHNlbGYpOgorICAgICAgICBzZWxmLmNvbXBhcmUoCisiIiIK
K2tleTogW10iIiIsCisgICAgICAgICAgICBbKHRva2VuX3R5cGVzLnN0cmluZywgImtleSIpLAor
ICAgICAgICAgICAgICh0b2tlbl90eXBlcy5zZXBhcmF0b3IsICI6IiksCisgICAgICAgICAgICAg
KHRva2VuX3R5cGVzLmxpc3Rfc3RhcnQsICJbIiksCisgICAgICAgICAgICAgKHRva2VuX3R5cGVz
Lmxpc3RfZW5kLCAiXSIpXSkKKworICAgIGRlZiB0ZXN0X2xpc3RfMShzZWxmKToKKyAgICAgICAg
c2VsZi5jb21wYXJlKAorIiIiCitrZXk6IFthLCAiYiJdIiIiLAorICAgICAgICAgICAgWyh0b2tl
bl90eXBlcy5zdHJpbmcsICJrZXkiKSwKKyAgICAgICAgICAgICAodG9rZW5fdHlwZXMuc2VwYXJh
dG9yLCAiOiIpLAorICAgICAgICAgICAgICh0b2tlbl90eXBlcy5saXN0X3N0YXJ0LCAiWyIpLAor
ICAgICAgICAgICAgICh0b2tlbl90eXBlcy5zdHJpbmcsICJhIiksCisgICAgICAgICAgICAgKHRv
a2VuX3R5cGVzLnN0cmluZywgImIiKSwKKyAgICAgICAgICAgICAodG9rZW5fdHlwZXMubGlzdF9l
bmQsICJdIildKQorCisgICAgZGVmIHRlc3RfbGlzdF8yKHNlbGYpOgorICAgICAgICBzZWxmLmNv
bXBhcmUoCisiIiIKK2tleTogW2EsCisgICAgICBiXSIiIiwKKyAgICAgICAgICAgIFsodG9rZW5f
dHlwZXMuc3RyaW5nLCAia2V5IiksCisgICAgICAgICAgICAgKHRva2VuX3R5cGVzLnNlcGFyYXRv
ciwgIjoiKSwKKyAgICAgICAgICAgICAodG9rZW5fdHlwZXMubGlzdF9zdGFydCwgIlsiKSwKKyAg
ICAgICAgICAgICAodG9rZW5fdHlwZXMuc3RyaW5nLCAiYSIpLAorICAgICAgICAgICAgICh0b2tl
bl90eXBlcy5zdHJpbmcsICJiIiksCisgICAgICAgICAgICAgKHRva2VuX3R5cGVzLmxpc3RfZW5k
LCAiXSIpXSkKKworICAgIGRlZiB0ZXN0X2xpc3RfMyhzZWxmKToKKyAgICAgICAgc2VsZi5jb21w
YXJlKAorIiIiCitrZXk6IFthLCAjYl0KKyAgICAgIGNdIiIiLAorICAgICAgICAgICAgWyh0b2tl
bl90eXBlcy5zdHJpbmcsICJrZXkiKSwKKyAgICAgICAgICAgICAodG9rZW5fdHlwZXMuc2VwYXJh
dG9yLCAiOiIpLAorICAgICAgICAgICAgICh0b2tlbl90eXBlcy5saXN0X3N0YXJ0LCAiWyIpLAor
ICAgICAgICAgICAgICh0b2tlbl90eXBlcy5zdHJpbmcsICJhIiksCisgICAgICAgICAgICAgKHRv
a2VuX3R5cGVzLnN0cmluZywgImMiKSwKKyAgICAgICAgICAgICAodG9rZW5fdHlwZXMubGlzdF9l
bmQsICJdIildKQorCisgICAgZGVmIHRlc3RfbGlzdF80KHNlbGYpOgorICAgICAgICB3aXRoIHNl
bGYuYXNzZXJ0UmFpc2VzKHBhcnNlci5QYXJzZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYudG9r
ZW5pemUoIiIia2V5OiBbYSAjYl0KKyAgICAgICAgICAgIGNdIiIiKQorCisgICAgZGVmIHRlc3Rf
bGlzdF81KHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHBhcnNlci5QYXJz
ZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYudG9rZW5pemUoIiIia2V5OiBbYSBcXAorICAgICAg
ICAgICAgY10iIiIpCisKKyAgICBkZWYgdGVzdF9saXN0XzYoc2VsZik6CisgICAgICAgIHNlbGYu
Y29tcGFyZSgKKyIiImtleTogW2EgLCBiXSIiIiwKKyAgICAgICAgWyh0b2tlbl90eXBlcy5zdHJp
bmcsICJrZXkiKSwKKyAgICAgICAgICh0b2tlbl90eXBlcy5zZXBhcmF0b3IsICI6IiksCisgICAg
ICAgICAodG9rZW5fdHlwZXMubGlzdF9zdGFydCwgIlsiKSwKKyAgICAgICAgICh0b2tlbl90eXBl
cy5zdHJpbmcsICJhIiksCisgICAgICAgICAodG9rZW5fdHlwZXMuc3RyaW5nLCAiYiIpLAorICAg
ICAgICAgKHRva2VuX3R5cGVzLmxpc3RfZW5kLCAiXSIpXSkKKworICAgIGRlZiB0ZXN0X2V4cHJf
MChzZWxmKToKKyAgICAgICAgc2VsZi5jb21wYXJlKAorIiIiCitrZXk6CisgIGlmIGNvbmQgPT0g
MTogdmFsdWUiIiIsCisgICAgICAgICAgICBbKHRva2VuX3R5cGVzLnN0cmluZywgImtleSIpLAor
ICAgICAgICAgICAgICh0b2tlbl90eXBlcy5zZXBhcmF0b3IsICI6IiksCisgICAgICAgICAgICAg
KHRva2VuX3R5cGVzLmdyb3VwX3N0YXJ0LCBOb25lKSwKKyAgICAgICAgICAgICAodG9rZW5fdHlw
ZXMuaWRlbnQsICJpZiIpLAorICAgICAgICAgICAgICh0b2tlbl90eXBlcy5pZGVudCwgImNvbmQi
KSwKKyAgICAgICAgICAgICAodG9rZW5fdHlwZXMuaWRlbnQsICI9PSIpLAorICAgICAgICAgICAg
ICh0b2tlbl90eXBlcy5udW1iZXIsICIxIiksCisgICAgICAgICAgICAgKHRva2VuX3R5cGVzLnNl
cGFyYXRvciwgIjoiKSwKKyAgICAgICAgICAgICAodG9rZW5fdHlwZXMuc3RyaW5nLCAidmFsdWUi
KV0pCisKKyAgICBkZWYgdGVzdF9leHByXzEoc2VsZik6CisgICAgICAgIHNlbGYuY29tcGFyZSgK
KyIiIgora2V5OgorICBpZiBjb25kID09IDE6IHZhbHVlMQorICB2YWx1ZTIiIiIsCisgICAgICAg
ICAgICBbKHRva2VuX3R5cGVzLnN0cmluZywgImtleSIpLAorICAgICAgICAgICAgICh0b2tlbl90
eXBlcy5zZXBhcmF0b3IsICI6IiksCisgICAgICAgICAgICAgKHRva2VuX3R5cGVzLmdyb3VwX3N0
YXJ0LCBOb25lKSwKKyAgICAgICAgICAgICAodG9rZW5fdHlwZXMuaWRlbnQsICJpZiIpLAorICAg
ICAgICAgICAgICh0b2tlbl90eXBlcy5pZGVudCwgImNvbmQiKSwKKyAgICAgICAgICAgICAodG9r
ZW5fdHlwZXMuaWRlbnQsICI9PSIpLAorICAgICAgICAgICAgICh0b2tlbl90eXBlcy5udW1iZXIs
ICIxIiksCisgICAgICAgICAgICAgKHRva2VuX3R5cGVzLnNlcGFyYXRvciwgIjoiKSwKKyAgICAg
ICAgICAgICAodG9rZW5fdHlwZXMuc3RyaW5nLCAidmFsdWUxIiksCisgICAgICAgICAgICAgKHRv
a2VuX3R5cGVzLnN0cmluZywgInZhbHVlMiIpXSkKKworICAgIGRlZiB0ZXN0X2V4cHJfMihzZWxm
KToKKyAgICAgICAgc2VsZi5jb21wYXJlKAorIiIiCitrZXk6CisgIGlmIGNvbmQ9PSIxIjogdmFs
dWUiIiIsCisgICAgICAgICAgICBbKHRva2VuX3R5cGVzLnN0cmluZywgImtleSIpLAorICAgICAg
ICAgICAgICh0b2tlbl90eXBlcy5zZXBhcmF0b3IsICI6IiksCisgICAgICAgICAgICAgKHRva2Vu
X3R5cGVzLmdyb3VwX3N0YXJ0LCBOb25lKSwKKyAgICAgICAgICAgICAodG9rZW5fdHlwZXMuaWRl
bnQsICJpZiIpLAorICAgICAgICAgICAgICh0b2tlbl90eXBlcy5pZGVudCwgImNvbmQiKSwKKyAg
ICAgICAgICAgICAodG9rZW5fdHlwZXMuaWRlbnQsICI9PSIpLAorICAgICAgICAgICAgICh0b2tl
bl90eXBlcy5zdHJpbmcsICIxIiksCisgICAgICAgICAgICAgKHRva2VuX3R5cGVzLnNlcGFyYXRv
ciwgIjoiKSwKKyAgICAgICAgICAgICAodG9rZW5fdHlwZXMuc3RyaW5nLCAidmFsdWUiKV0pCisK
KyAgICBkZWYgdGVzdF9leHByXzMoc2VsZik6CisgICAgICAgIHNlbGYuY29tcGFyZSgKKyIiIgor
a2V5OgorICBpZiBjb25kPT0xLjE6IHZhbHVlIiIiLAorICAgICAgICAgICAgWyh0b2tlbl90eXBl
cy5zdHJpbmcsICJrZXkiKSwKKyAgICAgICAgICAgICAodG9rZW5fdHlwZXMuc2VwYXJhdG9yLCAi
OiIpLAorICAgICAgICAgICAgICh0b2tlbl90eXBlcy5ncm91cF9zdGFydCwgTm9uZSksCisgICAg
ICAgICAgICAgKHRva2VuX3R5cGVzLmlkZW50LCAiaWYiKSwKKyAgICAgICAgICAgICAodG9rZW5f
dHlwZXMuaWRlbnQsICJjb25kIiksCisgICAgICAgICAgICAgKHRva2VuX3R5cGVzLmlkZW50LCAi
PT0iKSwKKyAgICAgICAgICAgICAodG9rZW5fdHlwZXMubnVtYmVyLCAiMS4xIiksCisgICAgICAg
ICAgICAgKHRva2VuX3R5cGVzLnNlcGFyYXRvciwgIjoiKSwKKyAgICAgICAgICAgICAodG9rZW5f
dHlwZXMuc3RyaW5nLCAidmFsdWUiKV0pCisKKyAgICBkZWYgdGVzdF9leHByXzQoc2VsZik6Cisg
ICAgICAgIHNlbGYuY29tcGFyZSgKKyAgICAgICAgICAgICIiIgora2V5OgorICBpZiBjb25kPT0x
LjEgYW5kIGNvbmQyID09ICJhIjogdmFsdWUiIiIsCisgICAgICAgICAgICBbKHRva2VuX3R5cGVz
LnN0cmluZywgImtleSIpLAorICAgICAgICAgICAgICh0b2tlbl90eXBlcy5zZXBhcmF0b3IsICI6
IiksCisgICAgICAgICAgICAgKHRva2VuX3R5cGVzLmdyb3VwX3N0YXJ0LCBOb25lKSwKKyAgICAg
ICAgICAgICAodG9rZW5fdHlwZXMuaWRlbnQsICJpZiIpLAorICAgICAgICAgICAgICh0b2tlbl90
eXBlcy5pZGVudCwgImNvbmQiKSwKKyAgICAgICAgICAgICAodG9rZW5fdHlwZXMuaWRlbnQsICI9
PSIpLAorICAgICAgICAgICAgICh0b2tlbl90eXBlcy5udW1iZXIsICIxLjEiKSwKKyAgICAgICAg
ICAgICAodG9rZW5fdHlwZXMuaWRlbnQsICJhbmQiKSwKKyAgICAgICAgICAgICAodG9rZW5fdHlw
ZXMuaWRlbnQsICJjb25kMiIpLAorICAgICAgICAgICAgICh0b2tlbl90eXBlcy5pZGVudCwgIj09
IiksCisgICAgICAgICAgICAgKHRva2VuX3R5cGVzLnN0cmluZywgImEiKSwKKyAgICAgICAgICAg
ICAodG9rZW5fdHlwZXMuc2VwYXJhdG9yLCAiOiIpLAorICAgICAgICAgICAgICh0b2tlbl90eXBl
cy5zdHJpbmcsICJ2YWx1ZSIpXSkKKworICAgIGRlZiB0ZXN0X2V4cHJfNShzZWxmKToKKyAgICAg
ICAgc2VsZi5jb21wYXJlKAorIiIiCitrZXk6CisgIGlmIChjb25kPT0xLjEgKTogdmFsdWUiIiIs
CisgICAgICAgICAgICBbKHRva2VuX3R5cGVzLnN0cmluZywgImtleSIpLAorICAgICAgICAgICAg
ICh0b2tlbl90eXBlcy5zZXBhcmF0b3IsICI6IiksCisgICAgICAgICAgICAgKHRva2VuX3R5cGVz
Lmdyb3VwX3N0YXJ0LCBOb25lKSwKKyAgICAgICAgICAgICAodG9rZW5fdHlwZXMuaWRlbnQsICJp
ZiIpLAorICAgICAgICAgICAgICh0b2tlbl90eXBlcy5wYXJlbiwgIigiKSwKKyAgICAgICAgICAg
ICAodG9rZW5fdHlwZXMuaWRlbnQsICJjb25kIiksCisgICAgICAgICAgICAgKHRva2VuX3R5cGVz
LmlkZW50LCAiPT0iKSwKKyAgICAgICAgICAgICAodG9rZW5fdHlwZXMubnVtYmVyLCAiMS4xIiks
CisgICAgICAgICAgICAgKHRva2VuX3R5cGVzLnBhcmVuLCAiKSIpLAorICAgICAgICAgICAgICh0
b2tlbl90eXBlcy5zZXBhcmF0b3IsICI6IiksCisgICAgICAgICAgICAgKHRva2VuX3R5cGVzLnN0
cmluZywgInZhbHVlIildKQorCisgICAgZGVmIHRlc3RfZXhwcl82KHNlbGYpOgorICAgICAgICBz
ZWxmLmNvbXBhcmUoCisiIiIKK2tleToKKyAgaWYgIlxcdHRlc3QiOiB2YWx1ZSIiIiwKKyAgICAg
ICAgICAgIFsodG9rZW5fdHlwZXMuc3RyaW5nLCAia2V5IiksCisgICAgICAgICAgICAgKHRva2Vu
X3R5cGVzLnNlcGFyYXRvciwgIjoiKSwKKyAgICAgICAgICAgICAodG9rZW5fdHlwZXMuZ3JvdXBf
c3RhcnQsIE5vbmUpLAorICAgICAgICAgICAgICh0b2tlbl90eXBlcy5pZGVudCwgImlmIiksCisg
ICAgICAgICAgICAgKHRva2VuX3R5cGVzLnN0cmluZywgIlx0dGVzdCIpLAorICAgICAgICAgICAg
ICh0b2tlbl90eXBlcy5zZXBhcmF0b3IsICI6IiksCisgICAgICAgICAgICAgKHRva2VuX3R5cGVz
LnN0cmluZywgInZhbHVlIildKQorCisgICAgZGVmIHRlc3RfZXhwcl83KHNlbGYpOgorICAgICAg
ICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHBhcnNlci5QYXJzZUVycm9yKToKKyAgICAgICAgICAg
IHNlbGYudG9rZW5pemUoCisiIiIKK2tleToKKyAgaWYgMUE6IHZhbHVlIiIiKQorCisgICAgZGVm
IHRlc3RfZXhwcl84KHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHBhcnNl
ci5QYXJzZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYudG9rZW5pemUoCisiIiIKK2tleToKKyAg
aWYgMWE6IHZhbHVlIiIiKQorCisgICAgZGVmIHRlc3RfZXhwcl85KHNlbGYpOgorICAgICAgICB3
aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHBhcnNlci5QYXJzZUVycm9yKToKKyAgICAgICAgICAgIHNl
bGYudG9rZW5pemUoCisiIiIKK2tleToKKyAgaWYgMS4xLjE6IHZhbHVlIiIiKQorCisgICAgZGVm
IHRlc3RfZXhwcl8xMChzZWxmKToKKyAgICAgICAgc2VsZi5jb21wYXJlKAorIiIiCitrZXk6Cisg
IGlmIDEuOiB2YWx1ZSIiIiwKKyAgICAgICAgICAgIFsodG9rZW5fdHlwZXMuc3RyaW5nLCAia2V5
IiksCisgICAgICAgICAgICAgKHRva2VuX3R5cGVzLnNlcGFyYXRvciwgIjoiKSwKKyAgICAgICAg
ICAgICAodG9rZW5fdHlwZXMuZ3JvdXBfc3RhcnQsIE5vbmUpLAorICAgICAgICAgICAgICh0b2tl
bl90eXBlcy5pZGVudCwgImlmIiksCisgICAgICAgICAgICAgKHRva2VuX3R5cGVzLm51bWJlciwg
IjEuIiksCisgICAgICAgICAgICAgKHRva2VuX3R5cGVzLnNlcGFyYXRvciwgIjoiKSwKKyAgICAg
ICAgICAgICAodG9rZW5fdHlwZXMuc3RyaW5nLCAidmFsdWUiKV0pCisKK2lmIF9fbmFtZV9fID09
ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJU
ZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci93cHRydW5uZXIucHkg
Yi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci93
cHRydW5uZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjk4NTVl
Y2M2NzJjCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rv
b2xzL3dwdHJ1bm5lci93cHRydW5uZXIvd3B0cnVubmVyLnB5CkBAIC0wLDAgKzEsMjkwIEBACitm
cm9tIF9fZnV0dXJlX18gaW1wb3J0IHVuaWNvZGVfbGl0ZXJhbHMKKworaW1wb3J0IGpzb24KK2lt
cG9ydCBvcworaW1wb3J0IHN5cworCitpbXBvcnQgZW52aXJvbm1lbnQgYXMgZW52CitpbXBvcnQg
cHJvZHVjdHMKK2ltcG9ydCB0ZXN0bG9hZGVyCitpbXBvcnQgd3B0Y29tbWFuZGxpbmUKK2ltcG9y
dCB3cHRsb2dnaW5nCitpbXBvcnQgd3B0dGVzdAorZnJvbSBmb250IGltcG9ydCBGb250SW5zdGFs
bGVyCitmcm9tIHRlc3RydW5uZXIgaW1wb3J0IE1hbmFnZXJHcm91cAorZnJvbSBicm93c2Vycy5i
YXNlIGltcG9ydCBOdWxsQnJvd3NlcgorCitoZXJlID0gb3MucGF0aC5zcGxpdChfX2ZpbGVfXylb
MF0KKworbG9nZ2VyID0gTm9uZQorCisiIiJSdW5uZXIgZm9yIHdlYi1wbGF0Zm9ybS10ZXN0cwor
CitUaGUgcnVubmVyIGhhcyBzZXZlcmFsIGRlc2lnbiBnb2FsczoKKworKiBUZXN0cyBzaG91bGQg
cnVuIHdpdGggbm8gbW9kaWZpY2F0aW9uIGZyb20gdXBzdHJlYW0uCisKKyogVGVzdHMgc2hvdWxk
IGJlIHJlZ2FyZGVkIGFzICJ1bnRydXN0ZWQiIHNvIHRoYXQgZXJyb3JzLCB0aW1lb3V0cyBhbmQg
ZXZlbgorICBjcmFzaGVzIGluIHRoZSB0ZXN0cyBjYW4gYmUgaGFuZGxlZCB3aXRob3V0IGZhaWxp
bmcgdGhlIGVudGlyZSB0ZXN0IHJ1bi4KKworKiBGb3IgcGVyZm9ybWFuY2UgdGVzdHMgY2FuIGJl
IHJ1biBpbiBtdWx0aXBsZSBicm93c2VycyBpbiBwYXJhbGxlbC4KKworVGhlIHVwc3RyZWFtIHJl
cG9zaXRvcnkgaGFzIHRoZSBmYWNpbGl0eSBmb3IgY3JlYXRpbmcgYSB0ZXN0IG1hbmlmZXN0IGlu
IEpTT04KK2Zvcm1hdC4gVGhpcyBtYW5pZmVzdCBpcyB1c2VkIGRpcmVjdGx5IHRvIGRldGVybWlu
ZSB3aGljaCB0ZXN0cyBleGlzdC4gTG9jYWwKK21ldGFkYXRhIGZpbGVzIGFyZSB1c2VkIHRvIHN0
b3JlIHRoZSBleHBlY3RlZCB0ZXN0IHJlc3VsdHMuCisiIiIKKworZGVmIHNldHVwX2xvZ2dpbmco
KmFyZ3MsICoqa3dhcmdzKToKKyAgICBnbG9iYWwgbG9nZ2VyCisgICAgbG9nZ2VyID0gd3B0bG9n
Z2luZy5zZXR1cCgqYXJncywgKiprd2FyZ3MpCisKK2RlZiBnZXRfbG9hZGVyKHRlc3RfcGF0aHMs
IHByb2R1Y3QsIHNzbF9lbnYsIGRlYnVnPU5vbmUsIHJ1bl9pbmZvX2V4dHJhcz1Ob25lLCAqKmt3
YXJncyk6CisgICAgaWYgcnVuX2luZm9fZXh0cmFzIGlzIE5vbmU6CisgICAgICAgIHJ1bl9pbmZv
X2V4dHJhcyA9IHt9CisKKyAgICBydW5faW5mbyA9IHdwdHRlc3QuZ2V0X3J1bl9pbmZvKGt3YXJn
c1sicnVuX2luZm8iXSwgcHJvZHVjdCwgZGVidWc9ZGVidWcsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBleHRyYXM9cnVuX2luZm9fZXh0cmFzKQorCisgICAgdGVzdF9tYW5p
ZmVzdHMgPSB0ZXN0bG9hZGVyLk1hbmlmZXN0TG9hZGVyKHRlc3RfcGF0aHMsIGZvcmNlX21hbmlm
ZXN0X3VwZGF0ZT1rd2FyZ3NbIm1hbmlmZXN0X3VwZGF0ZSJdKS5sb2FkKCkKKworICAgIG1hbmlm
ZXN0X2ZpbHRlcnMgPSBbXQorICAgIG1ldGFfZmlsdGVycyA9IFtdCisKKyAgICBpZiBrd2FyZ3Nb
ImluY2x1ZGUiXSBvciBrd2FyZ3NbImV4Y2x1ZGUiXSBvciBrd2FyZ3NbImluY2x1ZGVfbWFuaWZl
c3QiXToKKyAgICAgICAgbWFuaWZlc3RfZmlsdGVycy5hcHBlbmQodGVzdGxvYWRlci5UZXN0Rmls
dGVyKGluY2x1ZGU9a3dhcmdzWyJpbmNsdWRlIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNsdWRlPWt3YXJnc1siZXhjbHVkZSJdLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFu
aWZlc3RfcGF0aD1rd2FyZ3NbImluY2x1ZGVfbWFuaWZlc3QiXSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfbWFuaWZlc3RzPXRlc3Rf
bWFuaWZlc3RzKSkKKyAgICBpZiBrd2FyZ3NbInRhZ3MiXToKKyAgICAgICAgbWV0YV9maWx0ZXJz
LmFwcGVuZCh0ZXN0bG9hZGVyLlRhZ0ZpbHRlcih0YWdzPWt3YXJnc1sidGFncyJdKSkKKworICAg
IHRlc3RfbG9hZGVyID0gdGVzdGxvYWRlci5UZXN0TG9hZGVyKHRlc3RfbWFuaWZlc3RzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3YXJnc1sidGVzdF90eXBlcyJd
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bl9pbmZvLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hbmlmZXN0X2ZpbHRlcnM9bWFu
aWZlc3RfZmlsdGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
ZXRhX2ZpbHRlcnM9bWV0YV9maWx0ZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNodW5rX3R5cGU9a3dhcmdzWyJjaHVua190eXBlIl0sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxfY2h1bmtzPWt3YXJnc1sidG90YWxfY2h1
bmtzIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmtfbnVt
YmVyPWt3YXJnc1sidGhpc19jaHVuayJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluY2x1ZGVfaHR0cHM9c3NsX2Vudi5zc2xfZW5hYmxlZCkKKyAgICByZXR1cm4g
cnVuX2luZm8sIHRlc3RfbG9hZGVyCisKK2RlZiBsaXN0X3Rlc3RfZ3JvdXBzKHRlc3RfcGF0aHMs
IHByb2R1Y3QsICoqa3dhcmdzKToKKyAgICBlbnYuZG9fZGVsYXllZF9pbXBvcnRzKGxvZ2dlciwg
dGVzdF9wYXRocykKKworICAgIHNzbF9lbnYgPSBlbnYuc3NsX2Vudihsb2dnZXIsICoqa3dhcmdz
KQorCisgICAgcnVuX2luZm9fZXh0cmFzID0gcHJvZHVjdHMubG9hZF9wcm9kdWN0KGt3YXJnc1si
Y29uZmlnIl0sIHByb2R1Y3QpWy0xXSgqKmt3YXJncykKKworICAgIHJ1bl9pbmZvLCB0ZXN0X2xv
YWRlciA9IGdldF9sb2FkZXIodGVzdF9wYXRocywgcHJvZHVjdCwgc3NsX2VudiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bl9pbmZvX2V4dHJhcz1ydW5faW5mb19l
eHRyYXMsICoqa3dhcmdzKQorCisgICAgZm9yIGl0ZW0gaW4gc29ydGVkKHRlc3RfbG9hZGVyLmdy
b3Vwcyhrd2FyZ3NbInRlc3RfdHlwZXMiXSkpOgorICAgICAgICBwcmludCBpdGVtCisKKworZGVm
IGxpc3RfZGlzYWJsZWQodGVzdF9wYXRocywgcHJvZHVjdCwgKiprd2FyZ3MpOgorICAgIGVudi5k
b19kZWxheWVkX2ltcG9ydHMobG9nZ2VyLCB0ZXN0X3BhdGhzKQorCisgICAgcnYgPSBbXQorCisg
ICAgcnVuX2luZm9fZXh0cmFzID0gcHJvZHVjdHMubG9hZF9wcm9kdWN0KGt3YXJnc1siY29uZmln
Il0sIHByb2R1Y3QpWy0xXSgqKmt3YXJncykKKworICAgIHNzbF9lbnYgPSBlbnYuc3NsX2Vudihs
b2dnZXIsICoqa3dhcmdzKQorCisgICAgcnVuX2luZm8sIHRlc3RfbG9hZGVyID0gZ2V0X2xvYWRl
cih0ZXN0X3BhdGhzLCBwcm9kdWN0LCBzc2xfZW52LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcnVuX2luZm9fZXh0cmFzPXJ1bl9pbmZvX2V4dHJhcywgKiprd2FyZ3Mp
CisKKyAgICBmb3IgdGVzdF90eXBlLCB0ZXN0cyBpbiB0ZXN0X2xvYWRlci5kaXNhYmxlZF90ZXN0
cy5pdGVyaXRlbXMoKToKKyAgICAgICAgZm9yIHRlc3QgaW4gdGVzdHM6CisgICAgICAgICAgICBy
di5hcHBlbmQoeyJ0ZXN0IjogdGVzdC5pZCwgInJlYXNvbiI6IHRlc3QuZGlzYWJsZWQoKX0pCisg
ICAgcHJpbnQganNvbi5kdW1wcyhydiwgaW5kZW50PTIpCisKKworZGVmIGxpc3RfdGVzdHModGVz
dF9wYXRocywgcHJvZHVjdCwgKiprd2FyZ3MpOgorICAgIGVudi5kb19kZWxheWVkX2ltcG9ydHMo
bG9nZ2VyLCB0ZXN0X3BhdGhzKQorCisgICAgcnYgPSBbXQorCisgICAgc3NsX2VudiA9IGVudi5z
c2xfZW52KGxvZ2dlciwgKiprd2FyZ3MpCisKKyAgICBydW5faW5mb19leHRyYXMgPSBwcm9kdWN0
cy5sb2FkX3Byb2R1Y3Qoa3dhcmdzWyJjb25maWciXSwgcHJvZHVjdClbLTFdKCoqa3dhcmdzKQor
CisgICAgcnVuX2luZm8sIHRlc3RfbG9hZGVyID0gZ2V0X2xvYWRlcih0ZXN0X3BhdGhzLCBwcm9k
dWN0LCBzc2xfZW52LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVu
X2luZm9fZXh0cmFzPXJ1bl9pbmZvX2V4dHJhcywgKiprd2FyZ3MpCisKKyAgICBmb3IgdGVzdCBp
biB0ZXN0X2xvYWRlci50ZXN0X2lkczoKKyAgICAgICAgcHJpbnQgdGVzdAorCisKK2RlZiBnZXRf
cGF1c2VfYWZ0ZXJfdGVzdCh0ZXN0X2xvYWRlciwgKiprd2FyZ3MpOgorICAgIHRvdGFsX3Rlc3Rz
ID0gc3VtKGxlbihpdGVtKSBmb3IgaXRlbSBpbiB0ZXN0X2xvYWRlci50ZXN0cy5pdGVydmFsdWVz
KCkpCisgICAgaWYga3dhcmdzWyJwYXVzZV9hZnRlcl90ZXN0Il0gaXMgTm9uZToKKyAgICAgICAg
aWYga3dhcmdzWyJyZXBlYXRfdW50aWxfdW5leHBlY3RlZCJdOgorICAgICAgICAgICAgcmV0dXJu
IEZhbHNlCisgICAgICAgIGlmIGt3YXJnc1sicmVwZWF0Il0gPT0gMSBhbmQgdG90YWxfdGVzdHMg
PT0gMToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorICAg
IHJldHVybiBrd2FyZ3NbInBhdXNlX2FmdGVyX3Rlc3QiXQorCisKK2RlZiBydW5fdGVzdHMoY29u
ZmlnLCB0ZXN0X3BhdGhzLCBwcm9kdWN0LCAqKmt3YXJncyk6CisgICAgd2l0aCB3cHRsb2dnaW5n
LkNhcHR1cmVJTyhsb2dnZXIsIG5vdCBrd2FyZ3NbIm5vX2NhcHR1cmVfc3RkaW8iXSk6CisgICAg
ICAgIGVudi5kb19kZWxheWVkX2ltcG9ydHMobG9nZ2VyLCB0ZXN0X3BhdGhzKQorCisgICAgICAg
IChjaGVja19hcmdzLAorICAgICAgICAgdGFyZ2V0X2Jyb3dzZXJfY2xzLCBnZXRfYnJvd3Nlcl9r
d2FyZ3MsCisgICAgICAgICBleGVjdXRvcl9jbGFzc2VzLCBnZXRfZXhlY3V0b3Jfa3dhcmdzLAor
ICAgICAgICAgZW52X29wdGlvbnMsIGdldF9lbnZfZXh0cmFzLCBydW5faW5mb19leHRyYXMpID0g
cHJvZHVjdHMubG9hZF9wcm9kdWN0KGNvbmZpZywgcHJvZHVjdCkKKworICAgICAgICBzc2xfZW52
ID0gZW52LnNzbF9lbnYobG9nZ2VyLCAqKmt3YXJncykKKyAgICAgICAgZW52X2V4dHJhcyA9IGdl
dF9lbnZfZXh0cmFzKCoqa3dhcmdzKQorCisgICAgICAgIGNoZWNrX2FyZ3MoKiprd2FyZ3MpCisK
KyAgICAgICAgaWYga3dhcmdzWyJpbnN0YWxsX2ZvbnRzIl06CisgICAgICAgICAgICBlbnZfZXh0
cmFzLmFwcGVuZChGb250SW5zdGFsbGVyKAorICAgICAgICAgICAgICAgIGZvbnRfZGlyPWt3YXJn
c1siZm9udF9kaXIiXSwKKyAgICAgICAgICAgICAgICBhaGVtPW9zLnBhdGguam9pbihrd2FyZ3Nb
InRlc3RzX3Jvb3QiXSwgImZvbnRzL0FoZW0udHRmIikKKyAgICAgICAgICAgICkpCisKKyAgICAg
ICAgaWYgInRlc3RfbG9hZGVyIiBpbiBrd2FyZ3M6CisgICAgICAgICAgICBydW5faW5mbyA9IHdw
dHRlc3QuZ2V0X3J1bl9pbmZvKGt3YXJnc1sicnVuX2luZm8iXSwgcHJvZHVjdCwgZGVidWc9Tm9u
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFzPXJ1
bl9pbmZvX2V4dHJhcygqKmt3YXJncykpCisgICAgICAgICAgICB0ZXN0X2xvYWRlciA9IGt3YXJn
c1sidGVzdF9sb2FkZXIiXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcnVuX2luZm8sIHRl
c3RfbG9hZGVyID0gZ2V0X2xvYWRlcih0ZXN0X3BhdGhzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfZW52LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBydW5faW5mb19leHRyYXM9cnVuX2luZm9fZXh0cmFz
KCoqa3dhcmdzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKiprd2FyZ3MpCisKKyAgICAgICAgdGVzdF9zb3VyY2Vfa3dhcmdzID0geyJwcm9jZXNzZXMi
OiBrd2FyZ3NbInByb2Nlc3NlcyJdfQorICAgICAgICBpZiBrd2FyZ3NbInJ1bl9ieV9kaXIiXSBp
cyBGYWxzZToKKyAgICAgICAgICAgIHRlc3Rfc291cmNlX2NscyA9IHRlc3Rsb2FkZXIuU2luZ2xl
VGVzdFNvdXJjZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBBIHZhbHVlIG9mIE5vbmUg
aW5kaWNhdGVzIGluZmluaXRlIGRlcHRoCisgICAgICAgICAgICB0ZXN0X3NvdXJjZV9jbHMgPSB0
ZXN0bG9hZGVyLlBhdGhHcm91cGVkU291cmNlCisgICAgICAgICAgICB0ZXN0X3NvdXJjZV9rd2Fy
Z3NbImRlcHRoIl0gPSBrd2FyZ3NbInJ1bl9ieV9kaXIiXQorCisgICAgICAgIGxvZ2dlci5pbmZv
KCJVc2luZyAlaSBjbGllbnQgcHJvY2Vzc2VzIiAlIGt3YXJnc1sicHJvY2Vzc2VzIl0pCisKKyAg
ICAgICAgdW5leHBlY3RlZF90b3RhbCA9IDAKKworICAgICAgICBrd2FyZ3NbInBhdXNlX2FmdGVy
X3Rlc3QiXSA9IGdldF9wYXVzZV9hZnRlcl90ZXN0KHRlc3RfbG9hZGVyLCAqKmt3YXJncykKKwor
ICAgICAgICB3aXRoIGVudi5UZXN0RW52aXJvbm1lbnQodGVzdF9wYXRocywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNzbF9lbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBrd2FyZ3NbInBhdXNlX2FmdGVyX3Rlc3QiXSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGt3YXJnc1siZGVidWdfaW5mbyJdLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZW52X29wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbnZfZXh0cmFzKSBhcyB0ZXN0X2Vudmlyb25tZW50OgorICAgICAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgICAgIHRlc3RfZW52aXJvbm1lbnQuZW5zdXJlX3N0YXJ0ZWQoKQorICAgICAgICAg
ICAgZXhjZXB0IGVudi5UZXN0RW52aXJvbm1lbnRFcnJvciBhcyBlOgorICAgICAgICAgICAgICAg
IGxvZ2dlci5jcml0aWNhbCgiRXJyb3Igc3RhcnRpbmcgdGVzdCBlbnZpcm9ubWVudDogJXMiICUg
ZS5tZXNzYWdlKQorICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgICAgIHJlcGVhdCA9
IGt3YXJnc1sicmVwZWF0Il0KKyAgICAgICAgICAgIHJlcGVhdF9jb3VudCA9IDAKKyAgICAgICAg
ICAgIHJlcGVhdF91bnRpbF91bmV4cGVjdGVkID0ga3dhcmdzWyJyZXBlYXRfdW50aWxfdW5leHBl
Y3RlZCJdCisKKyAgICAgICAgICAgIHdoaWxlIHJlcGVhdF9jb3VudCA8IHJlcGVhdCBvciByZXBl
YXRfdW50aWxfdW5leHBlY3RlZDoKKyAgICAgICAgICAgICAgICByZXBlYXRfY291bnQgKz0gMQor
ICAgICAgICAgICAgICAgIGlmIHJlcGVhdF91bnRpbF91bmV4cGVjdGVkOgorICAgICAgICAgICAg
ICAgICAgICBsb2dnZXIuaW5mbygiUmVwZXRpdGlvbiAlaSIgJSAocmVwZWF0X2NvdW50KSkKKyAg
ICAgICAgICAgICAgICBlbGlmIHJlcGVhdCA+IDE6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dl
ci5pbmZvKCJSZXBldGl0aW9uICVpIC8gJWkiICUgKHJlcGVhdF9jb3VudCwgcmVwZWF0KSkKKwor
ICAgICAgICAgICAgICAgIHVuZXhwZWN0ZWRfY291bnQgPSAwCisgICAgICAgICAgICAgICAgbG9n
Z2VyLnN1aXRlX3N0YXJ0KHRlc3RfbG9hZGVyLnRlc3RfaWRzLCBydW5faW5mbykKKyAgICAgICAg
ICAgICAgICBmb3IgdGVzdF90eXBlIGluIGt3YXJnc1sidGVzdF90eXBlcyJdOgorICAgICAgICAg
ICAgICAgICAgICBsb2dnZXIuaW5mbygiUnVubmluZyAlcyB0ZXN0cyIgJSB0ZXN0X3R5cGUpCisK
KyAgICAgICAgICAgICAgICAgICAgIyBXZWJEcml2ZXIgdGVzdHMgbWF5IGNyZWF0ZSBhbmQgZGVz
dHJveSBtdWx0aXBsZSBicm93c2VyCisgICAgICAgICAgICAgICAgICAgICMgcHJvY2Vzc2VzIGFz
IHBhcnQgb2YgdGhlaXIgZXhwZWN0ZWQgYmVoYXZpb3IuIFRoZXNlCisgICAgICAgICAgICAgICAg
ICAgICMgcHJvY2Vzc2VzIGFyZSBtYW5hZ2VkIGJ5IGEgV2ViRHJpdmVyIHNlcnZlciBiaW5hcnku
IFRoaXMKKyAgICAgICAgICAgICAgICAgICAgIyBvYnZpYXRlcyB0aGUgbmVlZCBmb3Igd3B0cnVu
bmVyIHRvIHByb3ZpZGUgYSBicm93c2VyLCBzbworICAgICAgICAgICAgICAgICAgICAjIHRoZSBO
dWxsQnJvd3NlciBpcyB1c2VkIGluIHBsYWNlIG9mIHRoZSAidGFyZ2V0IiBicm93c2VyCisgICAg
ICAgICAgICAgICAgICAgIGlmIHRlc3RfdHlwZSA9PSAid2RzcGVjIjoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyb3dzZXJfY2xzID0gTnVsbEJyb3dzZXIKKyAgICAgICAgICAgICAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyb3dzZXJfY2xzID0gdGFyZ2V0X2Jyb3dz
ZXJfY2xzCisKKyAgICAgICAgICAgICAgICAgICAgYnJvd3Nlcl9rd2FyZ3MgPSBnZXRfYnJvd3Nl
cl9rd2FyZ3ModGVzdF90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBydW5faW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX2Vudj1zc2xfZW52LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKmt3YXJncykK
KworCisgICAgICAgICAgICAgICAgICAgIGV4ZWN1dG9yX2NscyA9IGV4ZWN1dG9yX2NsYXNzZXMu
Z2V0KHRlc3RfdHlwZSkKKyAgICAgICAgICAgICAgICAgICAgZXhlY3V0b3Jfa3dhcmdzID0gZ2V0
X2V4ZWN1dG9yX2t3YXJncyh0ZXN0X3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9lbnZpcm9ubWVudC5leHRlcm5hbF9j
b25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGVzdF9lbnZpcm9ubWVudC5jYWNoZV9tYW5hZ2VyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bl9pbmZvLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoq
a3dhcmdzKQorCisgICAgICAgICAgICAgICAgICAgIGlmIGV4ZWN1dG9yX2NscyBpcyBOb25lOgor
ICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJVbnN1cHBvcnRlZCB0ZXN0IHR5
cGUgJXMgZm9yIHByb2R1Y3QgJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAodGVzdF90eXBlLCBwcm9kdWN0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlCisKKyAgICAgICAgICAgICAgICAgICAgZm9yIHRlc3QgaW4gdGVzdF9sb2FkZXIuZGlzYWJs
ZWRfdGVzdHNbdGVzdF90eXBlXToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci50ZXN0
X3N0YXJ0KHRlc3QuaWQpCisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIudGVzdF9lbmQo
dGVzdC5pZCwgc3RhdHVzPSJTS0lQIikKKworICAgICAgICAgICAgICAgICAgICB3aXRoIE1hbmFn
ZXJHcm91cCgid2ViLXBsYXRmb3JtLXRlc3RzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAga3dhcmdzWyJwcm9jZXNzZXMiXSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGVzdF9zb3VyY2VfY2xzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0ZXN0X3NvdXJjZV9rd2FyZ3MsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyb3dzZXJfY2xzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicm93c2VyX2t3YXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZXhlY3V0b3JfY2xzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBleGVjdXRvcl9rd2FyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGt3YXJnc1sicGF1c2VfYWZ0ZXJfdGVzdCJdLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBrd2FyZ3NbInBhdXNlX29uX3VuZXhwZWN0ZWQiXSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAga3dhcmdzWyJyZXN0YXJ0X29uX3VuZXhwZWN0ZWQi
XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dhcmdzWyJkZWJ1Z19p
bmZvIl0pIGFzIG1hbmFnZXJfZ3JvdXA6CisgICAgICAgICAgICAgICAgICAgICAgICB0cnk6Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFuYWdlcl9ncm91cC5ydW4odGVzdF90eXBlLCB0
ZXN0X2xvYWRlci50ZXN0cykKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlib2Fy
ZEludGVycnVwdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuY3JpdGljYWwo
Ik1haW4gdGhyZWFkIGdvdCBzaWduYWwiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1h
bmFnZXJfZ3JvdXAuc3RvcCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAg
ICAgICAgICAgICAgICAgICAgdW5leHBlY3RlZF9jb3VudCArPSBtYW5hZ2VyX2dyb3VwLnVuZXhw
ZWN0ZWRfY291bnQoKQorCisgICAgICAgICAgICAgICAgdW5leHBlY3RlZF90b3RhbCArPSB1bmV4
cGVjdGVkX2NvdW50CisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkdvdCAlaSB1bmV4cGVj
dGVkIHJlc3VsdHMiICUgdW5leHBlY3RlZF9jb3VudCkKKyAgICAgICAgICAgICAgICBpZiByZXBl
YXRfdW50aWxfdW5leHBlY3RlZCBhbmQgdW5leHBlY3RlZF90b3RhbCA+IDA6CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgbG9nZ2VyLnN1aXRlX2VuZCgpCisgICAg
cmV0dXJuIHVuZXhwZWN0ZWRfdG90YWwgPT0gMAorCitkZWYgc3RhcnQoKiprd2FyZ3MpOgorICAg
IGlmIGt3YXJnc1sibGlzdF90ZXN0X2dyb3VwcyJdOgorICAgICAgICBsaXN0X3Rlc3RfZ3JvdXBz
KCoqa3dhcmdzKQorICAgIGVsaWYga3dhcmdzWyJsaXN0X2Rpc2FibGVkIl06CisgICAgICAgIGxp
c3RfZGlzYWJsZWQoKiprd2FyZ3MpCisgICAgZWxpZiBrd2FyZ3NbImxpc3RfdGVzdHMiXToKKyAg
ICAgICAgbGlzdF90ZXN0cygqKmt3YXJncykKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gbm90
IHJ1bl90ZXN0cygqKmt3YXJncykKKworZGVmIG1haW4oKToKKyAgICAiIiJNYWluIGVudHJ5IHBv
aW50IHdoZW4gY2FsbGluZyBmcm9tIHRoZSBjb21tYW5kIGxpbmUiIiIKKyAgICBrd2FyZ3MgPSB3
cHRjb21tYW5kbGluZS5wYXJzZV9hcmdzKCkKKworICAgIHRyeToKKyAgICAgICAgaWYga3dhcmdz
WyJwcmVmc19yb290Il0gaXMgTm9uZToKKyAgICAgICAgICAgIGt3YXJnc1sicHJlZnNfcm9vdCJd
ID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihoZXJlLCAicHJlZnMiKSkKKworICAgICAg
ICBzZXR1cF9sb2dnaW5nKGt3YXJncywgeyJyYXciOiBzeXMuc3Rkb3V0fSkKKworICAgICAgICBy
ZXR1cm4gc3RhcnQoKiprd2FyZ3MpCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgaWYg
a3dhcmdzWyJwZGIiXToKKyAgICAgICAgICAgIGltcG9ydCBwZGIsIHRyYWNlYmFjaworICAgICAg
ICAgICAgcHJpbnQgdHJhY2ViYWNrLmZvcm1hdF9leGMoKQorICAgICAgICAgICAgcGRiLnBvc3Rf
bW9ydGVtKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlCmRpZmYgLS1naXQgYS9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci93cHR0
ZXN0LnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRy
dW5uZXIvd3B0dGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u
ODYzMjBmOGZmODQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93
M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci93cHR0ZXN0LnB5CkBAIC0wLDAgKzEsMzc1IEBA
CitpbXBvcnQgb3MKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlZmF1bHRkaWN0CisKK2Zyb20g
d3B0bWFuaWZlc3QucGFyc2VyIGltcG9ydCBhdG9tcworCithdG9tX3Jlc2V0ID0gYXRvbXNbIlJl
c2V0Il0KK2VuYWJsZWRfdGVzdHMgPSBzZXQoWyJ0ZXN0aGFybmVzcyIsICJyZWZ0ZXN0IiwgIndk
c3BlYyJdKQorCisKK2NsYXNzIFJlc3VsdChvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBzdGF0dXMsIG1lc3NhZ2UsIGV4cGVjdGVkPU5vbmUsIGV4dHJhPU5vbmUpOgorICAgICAgICBp
ZiBzdGF0dXMgbm90IGluIHNlbGYuc3RhdHVzZXM6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVy
cm9yKCJVbnJlY29nbmlzZWQgc3RhdHVzICVzIiAlIHN0YXR1cykKKyAgICAgICAgc2VsZi5zdGF0
dXMgPSBzdGF0dXMKKyAgICAgICAgc2VsZi5tZXNzYWdlID0gbWVzc2FnZQorICAgICAgICBzZWxm
LmV4cGVjdGVkID0gZXhwZWN0ZWQKKyAgICAgICAgc2VsZi5leHRyYSA9IGV4dHJhCisKKyAgICBk
ZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiPCVzLiVzICVzPiIgJSAoc2VsZi5f
X21vZHVsZV9fLCBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgc2VsZi5zdGF0dXMpCisKKworY2xh
c3MgU3VidGVzdFJlc3VsdChvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBz
dGF0dXMsIG1lc3NhZ2UsIHN0YWNrPU5vbmUsIGV4cGVjdGVkPU5vbmUpOgorICAgICAgICBzZWxm
Lm5hbWUgPSBuYW1lCisgICAgICAgIGlmIHN0YXR1cyBub3QgaW4gc2VsZi5zdGF0dXNlczoKKyAg
ICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlVucmVjb2duaXNlZCBzdGF0dXMgJXMiICUgc3Rh
dHVzKQorICAgICAgICBzZWxmLnN0YXR1cyA9IHN0YXR1cworICAgICAgICBzZWxmLm1lc3NhZ2Ug
PSBtZXNzYWdlCisgICAgICAgIHNlbGYuc3RhY2sgPSBzdGFjaworICAgICAgICBzZWxmLmV4cGVj
dGVkID0gZXhwZWN0ZWQKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJu
ICI8JXMuJXMgJXMgJXM+IiAlIChzZWxmLl9fbW9kdWxlX18sIHNlbGYuX19jbGFzc19fLl9fbmFt
ZV9fLCBzZWxmLm5hbWUsIHNlbGYuc3RhdHVzKQorCisKK2NsYXNzIFRlc3RoYXJuZXNzUmVzdWx0
KFJlc3VsdCk6CisgICAgZGVmYXVsdF9leHBlY3RlZCA9ICJPSyIKKyAgICBzdGF0dXNlcyA9IHNl
dChbIk9LIiwgIkVSUk9SIiwgIlRJTUVPVVQiLCAiRVhURVJOQUwtVElNRU9VVCIsICJDUkFTSCJd
KQorCisKK2NsYXNzIFRlc3RoYXJuZXNzU3VidGVzdFJlc3VsdChTdWJ0ZXN0UmVzdWx0KToKKyAg
ICBkZWZhdWx0X2V4cGVjdGVkID0gIlBBU1MiCisgICAgc3RhdHVzZXMgPSBzZXQoWyJQQVNTIiwg
IkZBSUwiLCAiVElNRU9VVCIsICJOT1RSVU4iXSkKKworCitjbGFzcyBSZWZ0ZXN0UmVzdWx0KFJl
c3VsdCk6CisgICAgZGVmYXVsdF9leHBlY3RlZCA9ICJQQVNTIgorICAgIHN0YXR1c2VzID0gc2V0
KFsiUEFTUyIsICJGQUlMIiwgIkVSUk9SIiwgIlRJTUVPVVQiLCAiRVhURVJOQUwtVElNRU9VVCIs
ICJDUkFTSCJdKQorCisKK2NsYXNzIFdkc3BlY1Jlc3VsdChSZXN1bHQpOgorICAgIGRlZmF1bHRf
ZXhwZWN0ZWQgPSAiT0siCisgICAgc3RhdHVzZXMgPSBzZXQoWyJPSyIsICJFUlJPUiIsICJUSU1F
T1VUIiwgIkVYVEVSTkFMLVRJTUVPVVQiLCAiQ1JBU0giXSkKKworCitjbGFzcyBXZHNwZWNTdWJ0
ZXN0UmVzdWx0KFN1YnRlc3RSZXN1bHQpOgorICAgIGRlZmF1bHRfZXhwZWN0ZWQgPSAiUEFTUyIK
KyAgICBzdGF0dXNlcyA9IHNldChbIlBBU1MiLCAiRkFJTCIsICJFUlJPUiJdKQorCisKK2RlZiBn
ZXRfcnVuX2luZm8obWV0YWRhdGFfcm9vdCwgcHJvZHVjdCwgKiprd2FyZ3MpOgorICAgIHJldHVy
biBSdW5JbmZvKG1ldGFkYXRhX3Jvb3QsIHByb2R1Y3QsICoqa3dhcmdzKQorCisKK2NsYXNzIFJ1
bkluZm8oZGljdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1ldGFkYXRhX3Jvb3QsIHByb2R1
Y3QsIGRlYnVnLCBleHRyYXM9Tm9uZSk6CisgICAgICAgIGltcG9ydCBtb3ppbmZvCisKKyAgICAg
ICAgc2VsZi5fdXBkYXRlX21vemluZm8obWV0YWRhdGFfcm9vdCkKKyAgICAgICAgc2VsZi51cGRh
dGUobW96aW5mby5pbmZvKQorICAgICAgICBzZWxmWyJwcm9kdWN0Il0gPSBwcm9kdWN0CisgICAg
ICAgIGlmIGRlYnVnIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZlsiZGVidWciXSA9IGRl
YnVnCisgICAgICAgIGVsaWYgImRlYnVnIiBub3QgaW4gc2VsZjoKKyAgICAgICAgICAgICMgRGVm
YXVsdCB0byByZWxlYXNlCisgICAgICAgICAgICBzZWxmWyJkZWJ1ZyJdID0gRmFsc2UKKyAgICAg
ICAgaWYgcHJvZHVjdCA9PSAiZmlyZWZveCIgYW5kICJzdHlsbyIgbm90IGluIHNlbGY6CisgICAg
ICAgICAgICBzZWxmWyJzdHlsbyJdID0gRmFsc2UKKyAgICAgICAgaWYgIlNUWUxPX0ZPUkNFX0VO
QUJMRUQiIGluIG9zLmVudmlyb246CisgICAgICAgICAgICBzZWxmWyJzdHlsbyJdID0gVHJ1ZQor
ICAgICAgICBpZiAiU1RZTE9fRk9SQ0VfRElTQUJMRUQiIGluIG9zLmVudmlyb246CisgICAgICAg
ICAgICBzZWxmWyJzdHlsbyJdID0gRmFsc2UKKyAgICAgICAgaWYgZXh0cmFzIGlzIG5vdCBOb25l
OgorICAgICAgICAgICAgc2VsZi51cGRhdGUoZXh0cmFzKQorCisgICAgZGVmIF91cGRhdGVfbW96
aW5mbyhzZWxmLCBtZXRhZGF0YV9yb290KToKKyAgICAgICAgIiIiQWRkIGV4dHJhIGJ1aWxkIGlu
Zm9ybWF0aW9uIGZyb20gYSBtb3ppbmZvLmpzb24gZmlsZSBpbiBhIHBhcmVudAorICAgICAgICBk
aXJlY3RvcnkiIiIKKyAgICAgICAgaW1wb3J0IG1vemluZm8KKworICAgICAgICBwYXRoID0gbWV0
YWRhdGFfcm9vdAorICAgICAgICBkaXJzID0gc2V0KCkKKyAgICAgICAgd2hpbGUgcGF0aCAhPSBv
cy5wYXRoLmV4cGFuZHVzZXIoJ34nKToKKyAgICAgICAgICAgIGlmIHBhdGggaW4gZGlyczoKKyAg
ICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZGlycy5hZGQoc3RyKHBhdGgpKQorICAg
ICAgICAgICAgcGF0aCA9IG9zLnBhdGguc3BsaXQocGF0aClbMF0KKworICAgICAgICBtb3ppbmZv
LmZpbmRfYW5kX3VwZGF0ZV9mcm9tX2pzb24oKmRpcnMpCisKKworY2xhc3MgVGVzdChvYmplY3Qp
OgorCisgICAgcmVzdWx0X2NscyA9IE5vbmUKKyAgICBzdWJ0ZXN0X3Jlc3VsdF9jbHMgPSBOb25l
CisgICAgdGVzdF90eXBlID0gTm9uZQorCisgICAgZGVmYXVsdF90aW1lb3V0ID0gMTAgICMgc2Vj
b25kcworICAgIGxvbmdfdGltZW91dCA9IDYwICAjIHNlY29uZHMKKworICAgIGRlZiBfX2luaXRf
XyhzZWxmLCB0ZXN0c19yb290LCB1cmwsIGluaGVyaXRfbWV0YWRhdGEsIHRlc3RfbWV0YWRhdGEs
CisgICAgICAgICAgICAgICAgIHRpbWVvdXQ9Tm9uZSwgcGF0aD1Ob25lLCBwcm90b2NvbD0iaHR0
cCIpOgorICAgICAgICBzZWxmLnRlc3RzX3Jvb3QgPSB0ZXN0c19yb290CisgICAgICAgIHNlbGYu
dXJsID0gdXJsCisgICAgICAgIHNlbGYuX2luaGVyaXRfbWV0YWRhdGEgPSBpbmhlcml0X21ldGFk
YXRhCisgICAgICAgIHNlbGYuX3Rlc3RfbWV0YWRhdGEgPSB0ZXN0X21ldGFkYXRhCisgICAgICAg
IHNlbGYudGltZW91dCA9IHRpbWVvdXQgaWYgdGltZW91dCBpcyBub3QgTm9uZSBlbHNlIHNlbGYu
ZGVmYXVsdF90aW1lb3V0CisgICAgICAgIHNlbGYucGF0aCA9IHBhdGgKKyAgICAgICAgc2VsZi5l
bnZpcm9ubWVudCA9IHsicHJvdG9jb2wiOiBwcm90b2NvbCwgInByZWZzIjogc2VsZi5wcmVmc30K
KworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gc2VsZi5pZCA9
PSBvdGhlci5pZAorCisgICAgZGVmIHVwZGF0ZV9tZXRhZGF0YShzZWxmLCBtZXRhZGF0YT1Ob25l
KToKKyAgICAgICAgaWYgbWV0YWRhdGEgaXMgTm9uZToKKyAgICAgICAgICAgIG1ldGFkYXRhID0g
e30KKyAgICAgICAgcmV0dXJuIG1ldGFkYXRhCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYg
ZnJvbV9tYW5pZmVzdChjbHMsIG1hbmlmZXN0X2l0ZW0sIGluaGVyaXRfbWV0YWRhdGEsIHRlc3Rf
bWV0YWRhdGEpOgorICAgICAgICB0aW1lb3V0ID0gY2xzLmxvbmdfdGltZW91dCBpZiBtYW5pZmVz
dF9pdGVtLnRpbWVvdXQgPT0gImxvbmciIGVsc2UgY2xzLmRlZmF1bHRfdGltZW91dAorICAgICAg
ICBwcm90b2NvbCA9ICJodHRwcyIgaWYgaGFzYXR0cihtYW5pZmVzdF9pdGVtLCAiaHR0cHMiKSBh
bmQgbWFuaWZlc3RfaXRlbS5odHRwcyBlbHNlICJodHRwIgorICAgICAgICByZXR1cm4gY2xzKG1h
bmlmZXN0X2l0ZW0uc291cmNlX2ZpbGUudGVzdHNfcm9vdCwKKyAgICAgICAgICAgICAgICAgICBt
YW5pZmVzdF9pdGVtLnVybCwKKyAgICAgICAgICAgICAgICAgICBpbmhlcml0X21ldGFkYXRhLAor
ICAgICAgICAgICAgICAgICAgIHRlc3RfbWV0YWRhdGEsCisgICAgICAgICAgICAgICAgICAgdGlt
ZW91dD10aW1lb3V0LAorICAgICAgICAgICAgICAgICAgIHBhdGg9bWFuaWZlc3RfaXRlbS5zb3Vy
Y2VfZmlsZS5wYXRoLAorICAgICAgICAgICAgICAgICAgIHByb3RvY29sPXByb3RvY29sKQorCisg
ICAgQHByb3BlcnR5CisgICAgZGVmIGlkKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi51cmwK
KworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBrZXlzKHNlbGYpOgorICAgICAgICByZXR1cm4gdHVw
bGUoKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGFic19wYXRoKHNlbGYpOgorICAgICAgICBy
ZXR1cm4gb3MucGF0aC5qb2luKHNlbGYudGVzdHNfcm9vdCwgc2VsZi5wYXRoKQorCisgICAgZGVm
IF9nZXRfbWV0YWRhdGEoc2VsZiwgc3VidGVzdD1Ob25lKToKKyAgICAgICAgaWYgc2VsZi5fdGVz
dF9tZXRhZGF0YSBpcyBub3QgTm9uZSBhbmQgc3VidGVzdCBpcyBub3QgTm9uZToKKyAgICAgICAg
ICAgIHJldHVybiBzZWxmLl90ZXN0X21ldGFkYXRhLmdldF9zdWJ0ZXN0KHN1YnRlc3QpCisgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fdGVzdF9tZXRhZGF0YQorCisgICAg
ZGVmIGl0ZXJtZXRhKHNlbGYsIHN1YnRlc3Q9Tm9uZSk6CisgICAgICAgIGZvciBtZXRhZGF0YSBp
biBzZWxmLl9pbmhlcml0X21ldGFkYXRhOgorICAgICAgICAgICAgeWllbGQgbWV0YWRhdGEKKwor
ICAgICAgICBpZiBzZWxmLl90ZXN0X21ldGFkYXRhIGlzIG5vdCBOb25lOgorICAgICAgICAgICAg
eWllbGQgc2VsZi5fZ2V0X21ldGFkYXRhKCkKKyAgICAgICAgICAgIGlmIHN1YnRlc3QgaXMgbm90
IE5vbmU6CisgICAgICAgICAgICAgICAgc3VidGVzdF9tZXRhID0gc2VsZi5fZ2V0X21ldGFkYXRh
KHN1YnRlc3QpCisgICAgICAgICAgICAgICAgaWYgc3VidGVzdF9tZXRhIGlzIG5vdCBOb25lOgor
ICAgICAgICAgICAgICAgICAgICB5aWVsZCBzdWJ0ZXN0X21ldGEKKworICAgIGRlZiBkaXNhYmxl
ZChzZWxmLCBzdWJ0ZXN0PU5vbmUpOgorICAgICAgICBmb3IgbWV0YSBpbiBzZWxmLml0ZXJtZXRh
KHN1YnRlc3QpOgorICAgICAgICAgICAgZGlzYWJsZWQgPSBtZXRhLmRpc2FibGVkCisgICAgICAg
ICAgICBpZiBkaXNhYmxlZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByZXR1cm4gZGlz
YWJsZWQKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiByZXN0
YXJ0X2FmdGVyKHNlbGYpOgorICAgICAgICBmb3IgbWV0YSBpbiBzZWxmLml0ZXJtZXRhKE5vbmUp
OgorICAgICAgICAgICAgcmVzdGFydF9hZnRlciA9IG1ldGEucmVzdGFydF9hZnRlcgorICAgICAg
ICAgICAgaWYgcmVzdGFydF9hZnRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByZXR1
cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBs
ZWFrcyhzZWxmKToKKyAgICAgICAgZm9yIG1ldGEgaW4gc2VsZi5pdGVybWV0YShOb25lKToKKyAg
ICAgICAgICAgIGxlYWtzID0gbWV0YS5sZWFrcworICAgICAgICAgICAgaWYgbGVha3MgaXMgbm90
IE5vbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuIGxlYWtzCisgICAgICAgIHJldHVybiBGYWxz
ZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHRhZ3Moc2VsZik6CisgICAgICAgIHRhZ3MgPSBz
ZXQoKQorICAgICAgICBmb3IgbWV0YSBpbiBzZWxmLml0ZXJtZXRhKCk6CisgICAgICAgICAgICBt
ZXRhX3RhZ3MgPSBtZXRhLnRhZ3MKKyAgICAgICAgICAgIGlmIGF0b21fcmVzZXQgaW4gbWV0YV90
YWdzOgorICAgICAgICAgICAgICAgIHRhZ3MgPSBtZXRhX3RhZ3MuY29weSgpCisgICAgICAgICAg
ICAgICAgdGFncy5yZW1vdmUoYXRvbV9yZXNldCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICAgICAgdGFncyB8PSBtZXRhX3RhZ3MKKworICAgICAgICB0YWdzLmFkZCgiZGlyOiVzIiAl
IHNlbGYuaWQubHN0cmlwKCIvIikuc3BsaXQoIi8iKVswXSkKKworICAgICAgICByZXR1cm4gdGFn
cworCisgICAgQHByb3BlcnR5CisgICAgZGVmIHByZWZzKHNlbGYpOgorICAgICAgICBwcmVmcyA9
IHt9CisgICAgICAgIGZvciBtZXRhIGluIHNlbGYuaXRlcm1ldGEoKToKKyAgICAgICAgICAgIG1l
dGFfcHJlZnMgPSBtZXRhLnByZWZzCisgICAgICAgICAgICBpZiBhdG9tX3Jlc2V0IGluIHByZWZz
OgorICAgICAgICAgICAgICAgIHByZWZzID0gbWV0YV9wcmVmcy5jb3B5KCkKKyAgICAgICAgICAg
ICAgICBkZWwgcHJlZnNbYXRvbV9yZXNldF0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICAgICAgcHJlZnMudXBkYXRlKG1ldGFfcHJlZnMpCisgICAgICAgIHJldHVybiBwcmVmcworCisg
ICAgZGVmIGV4cGVjdGVkKHNlbGYsIHN1YnRlc3Q9Tm9uZSk6CisgICAgICAgIGlmIHN1YnRlc3Qg
aXMgTm9uZToKKyAgICAgICAgICAgIGRlZmF1bHQgPSBzZWxmLnJlc3VsdF9jbHMuZGVmYXVsdF9l
eHBlY3RlZAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGVmYXVsdCA9IHNlbGYuc3VidGVz
dF9yZXN1bHRfY2xzLmRlZmF1bHRfZXhwZWN0ZWQKKworICAgICAgICBtZXRhZGF0YSA9IHNlbGYu
X2dldF9tZXRhZGF0YShzdWJ0ZXN0KQorICAgICAgICBpZiBtZXRhZGF0YSBpcyBOb25lOgorICAg
ICAgICAgICAgcmV0dXJuIGRlZmF1bHQKKworICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1
cm4gbWV0YWRhdGEuZ2V0KCJleHBlY3RlZCIpCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAg
ICAgICAgICAgIHJldHVybiBkZWZhdWx0CisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAg
ICAgIHJldHVybiAiPCVzLiVzICVzPiIgJSAoc2VsZi5fX21vZHVsZV9fLCBzZWxmLl9fY2xhc3Nf
Xy5fX25hbWVfXywgc2VsZi5pZCkKKworCitjbGFzcyBUZXN0aGFybmVzc1Rlc3QoVGVzdCk6Cisg
ICAgcmVzdWx0X2NscyA9IFRlc3RoYXJuZXNzUmVzdWx0CisgICAgc3VidGVzdF9yZXN1bHRfY2xz
ID0gVGVzdGhhcm5lc3NTdWJ0ZXN0UmVzdWx0CisgICAgdGVzdF90eXBlID0gInRlc3RoYXJuZXNz
IgorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGlkKHNlbGYpOgorICAgICAgICByZXR1cm4gc2Vs
Zi51cmwKKworCitjbGFzcyBNYW51YWxUZXN0KFRlc3QpOgorICAgIHRlc3RfdHlwZSA9ICJtYW51
YWwiCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaWQoc2VsZik6CisgICAgICAgIHJldHVybiBz
ZWxmLnVybAorCisKK2NsYXNzIFJlZnRlc3RUZXN0KFRlc3QpOgorICAgIHJlc3VsdF9jbHMgPSBS
ZWZ0ZXN0UmVzdWx0CisgICAgdGVzdF90eXBlID0gInJlZnRlc3QiCisKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgdGVzdHNfcm9vdCwgdXJsLCBpbmhlcml0X21ldGFkYXRhLCB0ZXN0X21ldGFkYXRh
LCByZWZlcmVuY2VzLAorICAgICAgICAgICAgICAgICB0aW1lb3V0PU5vbmUsIHBhdGg9Tm9uZSwg
dmlld3BvcnRfc2l6ZT1Ob25lLCBkcGk9Tm9uZSwgcHJvdG9jb2w9Imh0dHAiKToKKyAgICAgICAg
VGVzdC5fX2luaXRfXyhzZWxmLCB0ZXN0c19yb290LCB1cmwsIGluaGVyaXRfbWV0YWRhdGEsIHRl
c3RfbWV0YWRhdGEsIHRpbWVvdXQsCisgICAgICAgICAgICAgICAgICAgICAgcGF0aCwgcHJvdG9j
b2wpCisKKyAgICAgICAgZm9yIF8sIHJlZl90eXBlIGluIHJlZmVyZW5jZXM6CisgICAgICAgICAg
ICBpZiByZWZfdHlwZSBub3QgaW4gKCI9PSIsICIhPSIpOgorICAgICAgICAgICAgICAgIHJhaXNl
IFZhbHVlRXJyb3IKKworICAgICAgICBzZWxmLnJlZmVyZW5jZXMgPSByZWZlcmVuY2VzCisgICAg
ICAgIHNlbGYudmlld3BvcnRfc2l6ZSA9IHZpZXdwb3J0X3NpemUKKyAgICAgICAgc2VsZi5kcGkg
PSBkcGkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBmcm9tX21hbmlmZXN0KGNscywKKyAg
ICAgICAgICAgICAgICAgICAgICBtYW5pZmVzdF90ZXN0LAorICAgICAgICAgICAgICAgICAgICAg
IGluaGVyaXRfbWV0YWRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgdGVzdF9tZXRhZGF0YSwK
KyAgICAgICAgICAgICAgICAgICAgICBub2Rlcz1Ob25lLAorICAgICAgICAgICAgICAgICAgICAg
IHJlZmVyZW5jZXNfc2Vlbj1Ob25lKToKKworICAgICAgICB0aW1lb3V0ID0gY2xzLmxvbmdfdGlt
ZW91dCBpZiBtYW5pZmVzdF90ZXN0LnRpbWVvdXQgPT0gImxvbmciIGVsc2UgY2xzLmRlZmF1bHRf
dGltZW91dAorCisgICAgICAgIGlmIG5vZGVzIGlzIE5vbmU6CisgICAgICAgICAgICBub2RlcyA9
IHt9CisgICAgICAgIGlmIHJlZmVyZW5jZXNfc2VlbiBpcyBOb25lOgorICAgICAgICAgICAgcmVm
ZXJlbmNlc19zZWVuID0gc2V0KCkKKworICAgICAgICB1cmwgPSBtYW5pZmVzdF90ZXN0LnVybAor
CisgICAgICAgIG5vZGUgPSBjbHMobWFuaWZlc3RfdGVzdC5zb3VyY2VfZmlsZS50ZXN0c19yb290
LAorICAgICAgICAgICAgICAgICAgIG1hbmlmZXN0X3Rlc3QudXJsLAorICAgICAgICAgICAgICAg
ICAgIGluaGVyaXRfbWV0YWRhdGEsCisgICAgICAgICAgICAgICAgICAgdGVzdF9tZXRhZGF0YSwK
KyAgICAgICAgICAgICAgICAgICBbXSwKKyAgICAgICAgICAgICAgICAgICB0aW1lb3V0PXRpbWVv
dXQsCisgICAgICAgICAgICAgICAgICAgcGF0aD1tYW5pZmVzdF90ZXN0LnBhdGgsCisgICAgICAg
ICAgICAgICAgICAgdmlld3BvcnRfc2l6ZT1tYW5pZmVzdF90ZXN0LnZpZXdwb3J0X3NpemUsCisg
ICAgICAgICAgICAgICAgICAgZHBpPW1hbmlmZXN0X3Rlc3QuZHBpLAorICAgICAgICAgICAgICAg
ICAgIHByb3RvY29sPSJodHRwcyIgaWYgaGFzYXR0cihtYW5pZmVzdF90ZXN0LCAiaHR0cHMiKSBh
bmQgbWFuaWZlc3RfdGVzdC5odHRwcyBlbHNlICJodHRwIikKKworICAgICAgICBub2Rlc1t1cmxd
ID0gbm9kZQorCisgICAgICAgIGZvciByZWZfdXJsLCByZWZfdHlwZSBpbiBtYW5pZmVzdF90ZXN0
LnJlZmVyZW5jZXM6CisgICAgICAgICAgICBjb21wYXJpc29uX2tleSA9IChyZWZfdHlwZSwpICsg
dHVwbGUoc29ydGVkKFt1cmwsIHJlZl91cmxdKSkKKyAgICAgICAgICAgIGlmIHJlZl91cmwgaW4g
bm9kZXM6CisgICAgICAgICAgICAgICAgbWFuaWZlc3Rfbm9kZSA9IHJlZl91cmwKKyAgICAgICAg
ICAgICAgICBpZiBjb21wYXJpc29uX2tleSBpbiByZWZlcmVuY2VzX3NlZW46CisgICAgICAgICAg
ICAgICAgICAgICMgV2UgaGF2ZSByZWFjaGVkIGEgY3ljbGUgc28gc3RvcCBoZXJlCisgICAgICAg
ICAgICAgICAgICAgICMgTm90ZSB0aGF0IGp1c3Qgc2VlaW5nIGEgbm9kZSBmb3IgdGhlIHNlY29u
ZCB0aW1lIGlzIG5vdAorICAgICAgICAgICAgICAgICAgICAjIGVub3VnaCB0byBkZXRlY3QgYSBj
eWNsZSBiZWNhdXNlCisgICAgICAgICAgICAgICAgICAgICMgQSAhPSBCICE9IEMgIT0gQSBtdXN0
IGluY2x1ZGUgQyAhPSBBCisgICAgICAgICAgICAgICAgICAgICMgYnV0IEEgPT0gQiA9PSBBIHNo
b3VsZCBub3QgaW5jbHVkZSB0aGUgcmVkdW5kYW50IEIgPT0gQS4KKyAgICAgICAgICAgICAgICAg
ICAgY29udGludWUKKworICAgICAgICAgICAgcmVmZXJlbmNlc19zZWVuLmFkZChjb21wYXJpc29u
X2tleSkKKworICAgICAgICAgICAgbWFuaWZlc3Rfbm9kZSA9IG1hbmlmZXN0X3Rlc3QubWFuaWZl
c3QuZ2V0X3JlZmVyZW5jZShyZWZfdXJsKQorICAgICAgICAgICAgaWYgbWFuaWZlc3Rfbm9kZToK
KyAgICAgICAgICAgICAgICByZWZlcmVuY2UgPSBSZWZ0ZXN0VGVzdC5mcm9tX21hbmlmZXN0KG1h
bmlmZXN0X25vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBub2RlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZXNfc2VlbikKKyAgICAgICAgICAgIGVsc2U6
CisgICAgICAgICAgICAgICAgcmVmZXJlbmNlID0gUmVmdGVzdFRlc3QobWFuaWZlc3RfdGVzdC5z
b3VyY2VfZmlsZS50ZXN0c19yb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlZl91cmwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
W10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSkKKworICAgICAgICAgICAgbm9k
ZS5yZWZlcmVuY2VzLmFwcGVuZCgocmVmZXJlbmNlLCByZWZfdHlwZSkpCisKKyAgICAgICAgcmV0
dXJuIG5vZGUKKworICAgIGRlZiB1cGRhdGVfbWV0YWRhdGEoc2VsZiwgbWV0YWRhdGEpOgorICAg
ICAgICBpZiBub3QgInVybF9jb3VudCIgaW4gbWV0YWRhdGE6CisgICAgICAgICAgICBtZXRhZGF0
YVsidXJsX2NvdW50Il0gPSBkZWZhdWx0ZGljdChpbnQpCisgICAgICAgIGZvciByZWZlcmVuY2Us
IF8gaW4gc2VsZi5yZWZlcmVuY2VzOgorICAgICAgICAgICAgIyBXZSBhc3N1bWUgYSBuYWl2ZSBp
bXBsZW1lbnRhdGlvbiBpbiB3aGljaCBhIHVybCB3aXRoIG11bHRpcGxlCisgICAgICAgICAgICAj
IHBvc3NpYmxlIHNjcmVlbnNob3RzIHdpbGwgbmVlZCB0byB0YWtlIGJvdGggdGhlIGxocyBhbmQg
cmhzIHNjcmVlbnNob3RzCisgICAgICAgICAgICAjIGZvciBlYWNoIHBvc3NpYmxlIG1hdGNoCisg
ICAgICAgICAgICBtZXRhZGF0YVsidXJsX2NvdW50Il1bKHNlbGYuZW52aXJvbm1lbnRbInByb3Rv
Y29sIl0sIHJlZmVyZW5jZS51cmwpXSArPSAxCisgICAgICAgICAgICByZWZlcmVuY2UudXBkYXRl
X21ldGFkYXRhKG1ldGFkYXRhKQorICAgICAgICByZXR1cm4gbWV0YWRhdGEKKworICAgIEBwcm9w
ZXJ0eQorICAgIGRlZiBpZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYudXJsCisKKyAgICBA
cHJvcGVydHkKKyAgICBkZWYga2V5cyhzZWxmKToKKyAgICAgICAgcmV0dXJuICgicmVmdHlwZSIs
ICJyZWZ1cmwiKQorCisKK2NsYXNzIFdkc3BlY1Rlc3QoVGVzdCk6CisKKyAgICByZXN1bHRfY2xz
ID0gV2RzcGVjUmVzdWx0CisgICAgc3VidGVzdF9yZXN1bHRfY2xzID0gV2RzcGVjU3VidGVzdFJl
c3VsdAorICAgIHRlc3RfdHlwZSA9ICJ3ZHNwZWMiCisKKyAgICBkZWZhdWx0X3RpbWVvdXQgPSAy
NQorICAgIGxvbmdfdGltZW91dCA9IDEyMAorCisKK21hbmlmZXN0X3Rlc3RfY2xzID0geyJyZWZ0
ZXN0IjogUmVmdGVzdFRlc3QsCisgICAgICAgICAgICAgICAgICAgICAidGVzdGhhcm5lc3MiOiBU
ZXN0aGFybmVzc1Rlc3QsCisgICAgICAgICAgICAgICAgICAgICAibWFudWFsIjogTWFudWFsVGVz
dCwKKyAgICAgICAgICAgICAgICAgICAgICJ3ZHNwZWMiOiBXZHNwZWNUZXN0fQorCisKK2RlZiBm
cm9tX21hbmlmZXN0KG1hbmlmZXN0X3Rlc3QsIGluaGVyaXRfbWV0YWRhdGEsIHRlc3RfbWV0YWRh
dGEpOgorICAgIHRlc3RfY2xzID0gbWFuaWZlc3RfdGVzdF9jbHNbbWFuaWZlc3RfdGVzdC5pdGVt
X3R5cGVdCisgICAgcmV0dXJuIHRlc3RfY2xzLmZyb21fbWFuaWZlc3QobWFuaWZlc3RfdGVzdCwg
aW5oZXJpdF9tZXRhZGF0YSwgdGVzdF9tZXRhZGF0YSkKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRl
c3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvT1dORVJTIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYmRyaXZlci9PV05FUlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLmE5OTcyNjM1Zjk4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYmRyaXZlci9PV05FUlMKQEAgLTAsMCArMSw1IEBACitAYW5kcmVhc3R0CitA
bHVrZWlzCitAQXV0b21hdGVkVGVzdGVyCitAc2hzOTZjCitAbWp6ZmZyCmRpZmYgLS1naXQgYS9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL1JFQURNRS5tZCBiL1dlYkRyaXZl
clRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43OGQ5YWJhN2I5YgotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvUkVBRE1FLm1kCkBAIC0wLDAgKzEs
MTcgQEAKKyMgV2ViRHJpdmVyIHNwZWNpZmljYXRpb24gdGVzdHMKKworSGVyZWluIGxpZXMgYSBz
ZXQgb2YgY29uZm9ybWFuY2UgdGVzdHMKK2ZvciB0aGUgVzNDIHdlYiBicm93c2VyIGF1dG9tYXRp
b24gc3BlY2lmaWNhdGlvbgora25vd24gYXMgW1dlYkRyaXZlcl0oaHR0cDovL3czYy5naXRodWIu
aW8vd2ViZHJpdmVyL3dlYmRyaXZlci1zcGVjLmh0bWwpLgorVGhlIHB1cnBvc2Ugb2YgdGhlc2Ug
dGVzdHMgaXMgZGV0ZXJtaW5lIGltcGxlbWVudGF0aW9uIGNvbXBsaWFuY2UKK3NvIHRoYXQgZGlm
ZmVyZW50IGRyaXZlciBpbXBsZW1lbnRhdGlvbnMgY2FuIGRldGVybWluZQord2hldGhlciB0aGV5
IG1lZXQgdGhlIHJlY29nbml6ZWQgc3RhbmRhcmQuCisKKyMjIENoYXB0ZXJzIG9mIHRoZSBTcGVj
IHRoYXQgc3RpbGwgbmVlZCB0ZXN0cworCitXZSBhcmUgdXNpbmcgYSBbdHJhY2tpbmcgc3ByZWFk
c2hlZXRdKGh0dHBzOi8vZG9jcy5nb29nbGUuY29tL3NwcmVhZHNoZWV0cy9kLzFHVUtfc2RZMmN2
NTlWQUpORHhaUUlmeXBuT3BhcFNRaE1qZmNKOVdjNDJVL2VkaXQjZ2lkPTApCit0byBjb29yZGlu
YXRlIHdvcmsgb24gdGhlc2UgdGVzdHMuIFBsZWFzZSBsb29rIHRoZXJlIHRvIHNlZSB3aG8KK2lz
IHdvcmtpbmcgb24gd2hhdCwgYW5kIHdoaWNoIGFyZWFzIGFyZSBjdXJyZW50bHkgdW5kZXItdGVz
dGVkLgorCitUaGUgc3BlYyBjb250cmlidXRvcnMgYW5kIGVkaXRvcnMgY2FuIGZyZXF1ZW50bHkg
YmUgZm91bmQgb24gdGhlIFczQworI3dlYmRyaXZlciBJUkMgY2hhbm5lbC4KZGlmZiAtLWdpdCBh
L1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvZWxlbWVudHMvYWN0aXZlLnB5
IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci9lbGVtZW50cy9hY3RpdmUu
cHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmY2Mzk3MjVmZTIyCi0t
LSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci9l
bGVtZW50cy9hY3RpdmUucHkKQEAgLTAsMCArMSwyNTIgQEAKK2ltcG9ydCBweXRlc3QKKworZnJv
bSBzdXBwb3J0LmFzc2VydHMgaW1wb3J0IGFzc2VydF9lcnJvciwgYXNzZXJ0X3N1Y2Nlc3MsIGFz
c2VydF9kaWFsb2dfaGFuZGxlZCwgYXNzZXJ0X3NhbWVfZWxlbWVudAorZnJvbSBzdXBwb3J0LmZp
eHR1cmVzIGltcG9ydCBjcmVhdGVfZGlhbG9nCitmcm9tIHN1cHBvcnQuaW5saW5lIGltcG9ydCBp
bmxpbmUKKworZGVmIGFzc2VydF9yZXN1bHRfaXNfYWN0aXZlX2VsZW1lbnQoc2Vzc2lvbiwgcmVz
dWx0KToKKyAgICAiIiJFbnN1cmUgdGhhdCB0aGUgcHJvdmlkZWQgb2JqZWN0IGlzIGEgc3VjY2Vz
c2Z1bCBXZWJEcml2ZXIgcmVzcG9uc2UKKyAgICBkZXNjcmliaW5nIGFuIGVsZW1lbnQgcmVmZXJl
bmNlIGFuZCB0aGF0IHRoZSByZWZlcmVuY2VkIGVsZW1lbnQgbWF0Y2hlcyB0aGUKKyAgICBlbGVt
ZW50IHJldHVybmVkIGJ5IHRoZSBgYWN0aXZlRWxlbWVudGAgYXR0cmlidXRlIG9mIHRoZSBjdXJy
ZW50IGJyb3dzaW5nCisgICAgY29udGV4dCdzIGFjdGl2ZSBkb2N1bWVudC4iIiIKKyAgICBhc3Nl
cnQgcmVzdWx0LnN0YXR1cyA9PSAyMDAKKworICAgIGZyb21fanMgPSBzZXNzaW9uLmV4ZWN1dGVf
c2NyaXB0KCJyZXR1cm4gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDsiKQorCisgICAgaWYgcmVzdWx0
LmJvZHlbInZhbHVlIl0gaXMgTm9uZToKKyAgICAgICAgYXNzZXJ0IGZyb21fanMgPT0gTm9uZQor
ICAgIGVsc2U6CisgICAgICAgIGFzc2VydF9zYW1lX2VsZW1lbnQoc2Vzc2lvbiwgcmVzdWx0LmJv
ZHlbInZhbHVlIl0sIGZyb21fanMpCisKKyMgPiAxLiBJZiB0aGUgY3VycmVudCBicm93c2luZyBj
b250ZXh0IGlzIG5vIGxvbmdlciBvcGVuLCByZXR1cm4gZXJyb3Igd2l0aAorIyA+ICAgIGVycm9y
IGNvZGUgbm8gc3VjaCB3aW5kb3cuCitkZWYgdGVzdF9jbG9zZWRfY29udGV4dChzZXNzaW9uLCBj
cmVhdGVfd2luZG93KToKKyAgICBuZXdfd2luZG93ID0gY3JlYXRlX3dpbmRvdygpCisgICAgc2Vz
c2lvbi53aW5kb3dfaGFuZGxlID0gbmV3X3dpbmRvdworICAgIHNlc3Npb24uY2xvc2UoKQorCisg
ICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJzZXNzaW9uLyVzL2VsZW1lbnQvYWN0aXZlIiAlIHNlc3Np
b24uc2Vzc2lvbl9pZCkKKworICAgIGFzc2VydF9lcnJvcihyZXN1bHQsICJubyBzdWNoIHdpbmRv
dyIpCisKKyMgWy4uLl0KKyMgMi4gSGFuZGxlIGFueSB1c2VyIHByb21wdHMgYW5kIHJldHVybiBp
dHMgdmFsdWUgaWYgaXQgaXMgYW4gZXJyb3IuCisjIFsuLi5dCisjIEluIG9yZGVyIHRvIGhhbmRs
ZSBhbnkgdXNlciBwcm9tcHRzIGEgcmVtb3RlIGVuZCBtdXN0IHRha2UgdGhlIGZvbGxvd2luZwor
IyBzdGVwczoKKyMgMi4gUnVuIHRoZSBzdWJzdGVwcyBvZiB0aGUgZmlyc3QgbWF0Y2hpbmcgdXNl
ciBwcm9tcHQgaGFuZGxlcjoKKyMKKyMgICAgWy4uLl0KKyMgICAgLSBkaXNtaXNzIHN0YXRlCisj
ICAgICAgMS4gRGlzbWlzcyB0aGUgY3VycmVudCB1c2VyIHByb21wdC4KKyMgICAgWy4uLl0KKyMK
KyMgMy4gUmV0dXJuIHN1Y2Nlc3MuCitkZWYgdGVzdF9oYW5kbGVfcHJvbXB0X2Rpc21pc3MobmV3
X3Nlc3Npb24pOgorICAgIF8sIHNlc3Npb24gPSBuZXdfc2Vzc2lvbih7ImFsd2F5c01hdGNoIjog
eyJ1bmhhbmRsZWRQcm9tcHRCZWhhdmlvciI6ICJkaXNtaXNzIn19KQorICAgIHNlc3Npb24udXJs
ID0gaW5saW5lKCI8Ym9keT48cD5IZWxsbywgV29ybGQhPC9wPjwvYm9keT4iKQorCisgICAgY3Jl
YXRlX2RpYWxvZyhzZXNzaW9uKSgiYWxlcnQiLCB0ZXh0PSJkaXNtaXNzICMxIiwgcmVzdWx0X3Zh
cj0iZGlzbWlzczEiKQorCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VU
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXNzaW9uLyVzL2VsZW1l
bnQvYWN0aXZlIiAlIHNlc3Npb24uc2Vzc2lvbl9pZCkKKworICAgIGFzc2VydF9yZXN1bHRfaXNf
YWN0aXZlX2VsZW1lbnQoc2Vzc2lvbiwgcmVzdWx0KQorICAgIGFzc2VydF9kaWFsb2dfaGFuZGxl
ZChzZXNzaW9uLCAiZGlzbWlzcyAjMSIpCisgICAgYXNzZXJ0IHNlc3Npb24uZXhlY3V0ZV9zY3Jp
cHQoInJldHVybiBkaXNtaXNzMTsiKSA9PSBOb25lCisKKyAgICBjcmVhdGVfZGlhbG9nKHNlc3Np
b24pKCJjb25maXJtIiwgdGV4dD0iZGlzbWlzcyAjMiIsIHJlc3VsdF92YXI9ImRpc21pc3MyIikK
KworICAgIHJlc3VsdCA9IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIkdFVCIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAic2Vzc2lvbi8lcy9lbGVtZW50L2FjdGl2ZSIgJSBz
ZXNzaW9uLnNlc3Npb25faWQpCisKKyAgICBhc3NlcnRfcmVzdWx0X2lzX2FjdGl2ZV9lbGVtZW50
KHNlc3Npb24sIHJlc3VsdCkKKyAgICBhc3NlcnRfZGlhbG9nX2hhbmRsZWQoc2Vzc2lvbiwgImRp
c21pc3MgIzIiKQorICAgIGFzc2VydCByZWFkX2dsb2JhbChzZXNzaW9uLCAiZGlzbWlzczIiKSA9
PSBOb25lCisKKyAgICBjcmVhdGVfZGlhbG9nKHNlc3Npb24pKCJwcm9tcHQiLCB0ZXh0PSJkaXNt
aXNzICMzIiwgcmVzdWx0X3Zhcj0iZGlzbWlzczMiKQorCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50
cmFuc3BvcnQuc2VuZCgiR0VUIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJzZXNzaW9uLyVzL2VsZW1lbnQvYWN0aXZlIiAlIHNlc3Npb24uc2Vzc2lvbl9pZCkKKworICAg
IGFzc2VydF9yZXN1bHRfaXNfYWN0aXZlX2VsZW1lbnQoc2Vzc2lvbiwgcmVzdWx0KQorICAgIGFz
c2VydF9kaWFsb2dfaGFuZGxlZChzZXNzaW9uLCAiZGlzbWlzcyAjMyIpCisgICAgYXNzZXJ0IHJl
YWRfZ2xvYmFsKHNlc3Npb24sICJkaXNtaXNzMyIpID09IE5vbmUKKworIyBbLi4uXQorIyAyLiBI
YW5kbGUgYW55IHVzZXIgcHJvbXB0cyBhbmQgcmV0dXJuIGl0cyB2YWx1ZSBpZiBpdCBpcyBhbiBl
cnJvci4KKyMgWy4uLl0KKyMgSW4gb3JkZXIgdG8gaGFuZGxlIGFueSB1c2VyIHByb21wdHMgYSBy
ZW1vdGUgZW5kIG11c3QgdGFrZSB0aGUgZm9sbG93aW5nCisjIHN0ZXBzOgorIyAyLiBSdW4gdGhl
IHN1YnN0ZXBzIG9mIHRoZSBmaXJzdCBtYXRjaGluZyB1c2VyIHByb21wdCBoYW5kbGVyOgorIwor
IyAgICBbLi4uXQorIyAgICAtIGFjY2VwdCBzdGF0ZQorIyAgICAgIDEuIEFjY2VwdCB0aGUgY3Vy
cmVudCB1c2VyIHByb21wdC4KKyMgICAgWy4uLl0KKyMKKyMgMy4gUmV0dXJuIHN1Y2Nlc3MuCitk
ZWYgdGVzdF9oYW5kbGVfcHJvbXB0X2FjY2VwdChuZXdfc2Vzc2lvbik6CisgICAgXywgc2Vzc2lv
biA9IG5ld19zZXNzaW9uKHsiYWx3YXlzTWF0Y2giOiB7InVuaGFuZGxlZFByb21wdEJlaGF2aW9y
IjogImFjY2VwdCJ9fSkKKyAgICBzZXNzaW9uLnVybCA9IGlubGluZSgiPGJvZHk+PHA+SGVsbG8s
IFdvcmxkITwvcD48L2JvZHk+IikKKyAgICBjcmVhdGVfZGlhbG9nKHNlc3Npb24pKCJhbGVydCIs
IHRleHQ9ImFjY2VwdCAjMSIsIHJlc3VsdF92YXI9ImFjY2VwdDEiKQorCisgICAgcmVzdWx0ID0g
c2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJzZXNzaW9uLyVzL2VsZW1lbnQvYWN0aXZlIiAlIHNlc3Npb24uc2Vzc2lvbl9p
ZCkKKworICAgIGFzc2VydF9yZXN1bHRfaXNfYWN0aXZlX2VsZW1lbnQoc2Vzc2lvbiwgcmVzdWx0
KQorICAgIGFzc2VydF9kaWFsb2dfaGFuZGxlZChzZXNzaW9uLCAiYWNjZXB0ICMxIikKKyAgICBh
c3NlcnQgcmVhZF9nbG9iYWwoc2Vzc2lvbiwgImFjY2VwdDEiKSA9PSBOb25lCisKKyAgICBjcmVh
dGVfZGlhbG9nKHNlc3Npb24pKCJjb25maXJtIiwgdGV4dD0iYWNjZXB0ICMyIiwgcmVzdWx0X3Zh
cj0iYWNjZXB0MiIpCisKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQi
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlc3Npb24vJXMvZWxlbWVu
dC9hY3RpdmUiICUgc2Vzc2lvbi5zZXNzaW9uX2lkKQorCisgICAgYXNzZXJ0X3Jlc3VsdF9pc19h
Y3RpdmVfZWxlbWVudChzZXNzaW9uLCByZXN1bHQpCisgICAgYXNzZXJ0X2RpYWxvZ19oYW5kbGVk
KHNlc3Npb24sICJhY2NlcHQgIzIiKQorICAgIGFzc2VydCByZWFkX2dsb2JhbChzZXNzaW9uLCAi
YWNjZXB0MiIpLCBUcnVlCisKKyAgICBjcmVhdGVfZGlhbG9nKHNlc3Npb24pKCJwcm9tcHQiLCB0
ZXh0PSJhY2NlcHQgIzMiLCByZXN1bHRfdmFyPSJhY2NlcHQzIikKKworICAgIHJlc3VsdCA9IHNl
c3Npb24udHJhbnNwb3J0LnNlbmQoIkdFVCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAic2Vzc2lvbi8lcy9lbGVtZW50L2FjdGl2ZSIgJSBzZXNzaW9uLnNlc3Npb25faWQp
CisKKyAgICBhc3NlcnRfcmVzdWx0X2lzX2FjdGl2ZV9lbGVtZW50KHNlc3Npb24sIHJlc3VsdCkK
KyAgICBhc3NlcnRfZGlhbG9nX2hhbmRsZWQoc2Vzc2lvbiwgImFjY2VwdCAjMyIpCisgICAgYXNz
ZXJ0IHJlYWRfZ2xvYmFsKHNlc3Npb24sICJhY2NlcHQzIikgPT0gIiIKKworIyBbLi4uXQorIyAy
LiBIYW5kbGUgYW55IHVzZXIgcHJvbXB0cyBhbmQgcmV0dXJuIGl0cyB2YWx1ZSBpZiBpdCBpcyBh
biBlcnJvci4KKyMgWy4uLl0KKyMgSW4gb3JkZXIgdG8gaGFuZGxlIGFueSB1c2VyIHByb21wdHMg
YSByZW1vdGUgZW5kIG11c3QgdGFrZSB0aGUgZm9sbG93aW5nCisjIHN0ZXBzOgorIyAyLiBSdW4g
dGhlIHN1YnN0ZXBzIG9mIHRoZSBmaXJzdCBtYXRjaGluZyB1c2VyIHByb21wdCBoYW5kbGVyOgor
IworIyAgICBbLi4uXQorIyAgICAtIG1pc3NpbmcgdmFsdWUgZGVmYXVsdCBzdGF0ZQorIyAgICAt
IG5vdCBpbiB0aGUgdGFibGUgb2Ygc2ltcGxlIGRpYWxvZ3MKKyMgICAgICAxLiBEaXNtaXNzIHRo
ZSBjdXJyZW50IHVzZXIgcHJvbXB0LgorIyAgICAgIDIuIFJldHVybiBlcnJvciB3aXRoIGVycm9y
IGNvZGUgdW5leHBlY3RlZCBhbGVydCBvcGVuLgorZGVmIHRlc3RfaGFuZGxlX3Byb21wdF9taXNz
aW5nX3ZhbHVlKHNlc3Npb24sIGNyZWF0ZV9kaWFsb2cpOgorICAgIHNlc3Npb24udXJsID0gaW5s
aW5lKCI8Ym9keT48cD5IZWxsbywgV29ybGQhPC9wPjwvYm9keT4iKQorCisgICAgY3JlYXRlX2Rp
YWxvZygiYWxlcnQiLCB0ZXh0PSJkaXNtaXNzICMxIiwgcmVzdWx0X3Zhcj0iZGlzbWlzczEiKQor
CisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJzZXNzaW9uLyVzL2VsZW1lbnQvYWN0aXZlIiAlIHNl
c3Npb24uc2Vzc2lvbl9pZCkKKworICAgIGFzc2VydF9lcnJvcihyZXN1bHQsICJ1bmV4cGVjdGVk
IGFsZXJ0IG9wZW4iKQorICAgIGFzc2VydF9kaWFsb2dfaGFuZGxlZChzZXNzaW9uLCAiZGlzbWlz
cyAjMSIpCisgICAgYXNzZXJ0IHNlc3Npb24uZXhlY3V0ZV9zY3JpcHQoInJldHVybiBhY2NlcHQx
OyIpID09IE5vbmUKKworICAgIGNyZWF0ZV9kaWFsb2coImNvbmZpcm0iLCB0ZXh0PSJkaXNtaXNz
ICMyIiwgcmVzdWx0X3Zhcj0iZGlzbWlzczIiKQorCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFu
c3BvcnQuc2VuZCgiR0VUIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJz
ZXNzaW9uLyVzL2VsZW1lbnQvYWN0aXZlIiAlIHNlc3Npb24uc2Vzc2lvbl9pZCkKKworICAgIGFz
c2VydF9lcnJvcihyZXN1bHQsICJ1bmV4cGVjdGVkIGFsZXJ0IG9wZW4iKQorICAgIGFzc2VydF9k
aWFsb2dfaGFuZGxlZChzZXNzaW9uLCAiZGlzbWlzcyAjMiIpCisgICAgYXNzZXJ0IHNlc3Npb24u
ZXhlY3V0ZV9zY3JpcHQoInJldHVybiBkaXNtaXNzMjsiKSA9PSBGYWxzZQorCisgICAgY3JlYXRl
X2RpYWxvZygicHJvbXB0IiwgdGV4dD0iZGlzbWlzcyAjMyIsIHJlc3VsdF92YXI9ImRpc21pc3Mz
IikKKworICAgIHJlc3VsdCA9IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIkdFVCIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2Vzc2lvbi8lcy9lbGVtZW50L2FjdGl2ZSIg
JSBzZXNzaW9uLnNlc3Npb25faWQpCisKKyAgICBhc3NlcnRfZXJyb3IocmVzdWx0LCAidW5leHBl
Y3RlZCBhbGVydCBvcGVuIikKKyAgICBhc3NlcnRfZGlhbG9nX2hhbmRsZWQoc2Vzc2lvbiwgImRp
c21pc3MgIzMiKQorICAgIGFzc2VydCBzZXNzaW9uLmV4ZWN1dGVfc2NyaXB0KCJyZXR1cm4gZGlz
bWlzczM7IikgPT0gTm9uZQorCisjID4gWy4uLl0KKyMgPiAzLiBMZXQgYWN0aXZlIGVsZW1lbnQg
YmUgdGhlIGFjdGl2ZSBlbGVtZW50IG9mIHRoZSBjdXJyZW50IGJyb3dzaW5nCisjID4gICAgY29u
dGV4dCdzIGRvY3VtZW50IGVsZW1lbnQuCisjID4gNC4gTGV0IGFjdGl2ZSB3ZWIgZWxlbWVudCBi
ZSB0aGUgSlNPTiBTZXJpYWxpemF0aW9uIG9mIGFjdGl2ZSBlbGVtZW50LgorIyA+IDUuIFJldHVy
biBzdWNjZXNzIHdpdGggZGF0YSBhY3RpdmUgd2ViIGVsZW1lbnQuCitkZWYgdGVzdF9zdWNjZXNz
X2RvY3VtZW50KHNlc3Npb24pOgorICAgIHNlc3Npb24udXJsID0gaW5saW5lKCIiIgorICAgICAg
ICA8Ym9keT4KKyAgICAgICAgICAgIDxoMT5IZWFkaW5nPC9oMT4KKyAgICAgICAgICAgIDxpbnB1
dCAvPgorICAgICAgICAgICAgPGlucHV0IC8+CisgICAgICAgICAgICA8aW5wdXQgc3R5bGU9Im9w
YWNpdHk6IDA7IiAvPgorICAgICAgICAgICAgPHA+QW5vdGhlciBlbGVtZW50PC9wPgorICAgICAg
ICA8L2JvZHk+IiIiKQorICAgIHJlc3VsdCA9IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIkdFVCIs
ICJzZXNzaW9uLyVzL2VsZW1lbnQvYWN0aXZlIiAlIHNlc3Npb24uc2Vzc2lvbl9pZCkKKworICAg
IGFzc2VydF9yZXN1bHRfaXNfYWN0aXZlX2VsZW1lbnQoc2Vzc2lvbiwgcmVzdWx0KQorCitkZWYg
dGVzdF9zdWNlc3NfaW5wdXQoc2Vzc2lvbik6CisgICAgc2Vzc2lvbi51cmwgPSBpbmxpbmUoIiIi
CisgICAgICAgIDxib2R5PgorICAgICAgICAgICAgPGgxPkhlYWRpbmc8L2gxPgorICAgICAgICAg
ICAgPGlucHV0IGF1dG9mb2N1cyAvPgorICAgICAgICAgICAgPGlucHV0IHN0eWxlPSJvcGFjaXR5
OiAwOyIgLz4KKyAgICAgICAgICAgIDxwPkFub3RoZXIgZWxlbWVudDwvcD4KKyAgICAgICAgPC9i
b2R5PiIiIikKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLCAic2Vz
c2lvbi8lcy9lbGVtZW50L2FjdGl2ZSIgJSBzZXNzaW9uLnNlc3Npb25faWQpCisKKyAgICBhc3Nl
cnRfcmVzdWx0X2lzX2FjdGl2ZV9lbGVtZW50KHNlc3Npb24sIHJlc3VsdCkKKworZGVmIHRlc3Rf
c3VjZXNzX2lucHV0X25vbl9pbnRlcmFjdGFibGUoc2Vzc2lvbik6CisgICAgc2Vzc2lvbi51cmwg
PSBpbmxpbmUoIiIiCisgICAgICAgIDxib2R5PgorICAgICAgICAgICAgPGgxPkhlYWRpbmc8L2gx
PgorICAgICAgICAgICAgPGlucHV0IC8+CisgICAgICAgICAgICA8aW5wdXQgc3R5bGU9Im9wYWNp
dHk6IDA7IiBhdXRvZm9jdXMgLz4KKyAgICAgICAgICAgIDxwPkFub3RoZXIgZWxlbWVudDwvcD4K
KyAgICAgICAgPC9ib2R5PiIiIikKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5k
KCJHRVQiLCAic2Vzc2lvbi8lcy9lbGVtZW50L2FjdGl2ZSIgJSBzZXNzaW9uLnNlc3Npb25faWQp
CisKKyAgICBhc3NlcnRfcmVzdWx0X2lzX2FjdGl2ZV9lbGVtZW50KHNlc3Npb24sIHJlc3VsdCkK
KworZGVmIHRlc3Rfc3VjY2Vzc19leHBsaWNpdF9mb2N1cyhzZXNzaW9uKToKKyAgICBzZXNzaW9u
LnVybCA9IGlubGluZSgiIiIKKyAgICAgICAgPGJvZHk+CisgICAgICAgICAgICA8aDE+SGVhZGlu
ZzwvaDE+CisgICAgICAgICAgICA8aW5wdXQgLz4KKyAgICAgICAgICAgIDxpZnJhbWU+PC9pZnJh
bWU+CisgICAgICAgIDwvYm9keT4iIiIpCisKKyAgICBzZXNzaW9uLmV4ZWN1dGVfc2NyaXB0KCJk
b2N1bWVudC5ib2R5LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoMScpWzBdLmZvY3VzKCk7IikKKyAg
ICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLCAic2Vzc2lvbi8lcy9lbGVt
ZW50L2FjdGl2ZSIgJSBzZXNzaW9uLnNlc3Npb25faWQpCisgICAgYXNzZXJ0X3Jlc3VsdF9pc19h
Y3RpdmVfZWxlbWVudChzZXNzaW9uLCByZXN1bHQpCisKKyAgICBzZXNzaW9uLmV4ZWN1dGVfc2Ny
aXB0KCJkb2N1bWVudC5ib2R5LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpWzBdLmZvY3Vz
KCk7IikKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLCAic2Vzc2lv
bi8lcy9lbGVtZW50L2FjdGl2ZSIgJSBzZXNzaW9uLnNlc3Npb25faWQpCisgICAgYXNzZXJ0X3Jl
c3VsdF9pc19hY3RpdmVfZWxlbWVudChzZXNzaW9uLCByZXN1bHQpCisKKyAgICBzZXNzaW9uLmV4
ZWN1dGVfc2NyaXB0KCJkb2N1bWVudC5ib2R5LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpZnJhbWUn
KVswXS5mb2N1cygpOyIpCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VU
IiwgInNlc3Npb24vJXMvZWxlbWVudC9hY3RpdmUiICUgc2Vzc2lvbi5zZXNzaW9uX2lkKQorICAg
IGFzc2VydF9yZXN1bHRfaXNfYWN0aXZlX2VsZW1lbnQoc2Vzc2lvbiwgcmVzdWx0KQorCisgICAg
c2Vzc2lvbi5leGVjdXRlX3NjcmlwdCgiZG9jdW1lbnQuYm9keS5nZXRFbGVtZW50c0J5VGFnTmFt
ZSgnaWZyYW1lJylbMF0uZm9jdXMoKTsiKQorICAgIHNlc3Npb24uZXhlY3V0ZV9zY3JpcHQoImRv
Y3VtZW50LmJvZHkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lmcmFtZScpWzBdLnJlbW92ZSgpOyIp
CisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwgInNlc3Npb24vJXMv
ZWxlbWVudC9hY3RpdmUiICUgc2Vzc2lvbi5zZXNzaW9uX2lkKQorICAgIGFzc2VydF9yZXN1bHRf
aXNfYWN0aXZlX2VsZW1lbnQoc2Vzc2lvbiwgcmVzdWx0KQorCisgICAgc2Vzc2lvbi5leGVjdXRl
X3NjcmlwdCgiZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCd0ZXh0YXJlYScpKTsiKQorICAgIHJlc3VsdCA9IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIkdF
VCIsICJzZXNzaW9uLyVzL2VsZW1lbnQvYWN0aXZlIiAlIHNlc3Npb24uc2Vzc2lvbl9pZCkKKyAg
ICBhc3NlcnRfcmVzdWx0X2lzX2FjdGl2ZV9lbGVtZW50KHNlc3Npb24sIHJlc3VsdCkKKworZGVm
IHRlc3Rfc3VjY2Vzc19pZnJhbWVfY29udGVudChzZXNzaW9uKToKKyAgICBzZXNzaW9uLnVybCA9
IGlubGluZSgiPGJvZHk+PC9ib2R5PiIpCisgICAgc2Vzc2lvbi5leGVjdXRlX3NjcmlwdCgiIiIK
KyAgICAgICAgdmFyIGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpOwor
ICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGlmcmFtZSk7CisgICAgICAgIHZhciBp
bnB1dCA9IGlmcmFtZS5jb250ZW50RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTsKKyAg
ICAgICAgaWZyYW1lLmNvbnRlbnREb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGlucHV0KTsKKyAg
ICAgICAgaW5wdXQuZm9jdXMoKTsiIiIpCisKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9y
dC5zZW5kKCJHRVQiLCAic2Vzc2lvbi8lcy9lbGVtZW50L2FjdGl2ZSIgJSBzZXNzaW9uLnNlc3Np
b25faWQpCisKKyAgICBhc3NlcnRfcmVzdWx0X2lzX2FjdGl2ZV9lbGVtZW50KHNlc3Npb24sIHJl
c3VsdCkKKworZGVmIHRlc3Rfc3VjZXNzX3dpdGhvdXRfYm9keShzZXNzaW9uKToKKyAgICBzZXNz
aW9uLnVybCA9IGlubGluZSgiPGJvZHk+PC9ib2R5PiIpCisgICAgc2Vzc2lvbi5leGVjdXRlX3Nj
cmlwdCgiZG9jdW1lbnQuYm9keS5yZW1vdmUoKTsiKQorCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50
cmFuc3BvcnQuc2VuZCgiR0VUIiwgInNlc3Npb24vJXMvZWxlbWVudC9hY3RpdmUiJSBzZXNzaW9u
LnNlc3Npb25faWQpCisKKyAgICBhc3NlcnRfcmVzdWx0X2lzX2FjdGl2ZV9lbGVtZW50KHNlc3Np
b24sIHJlc3VsdCkKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJk
cml2ZXIvdGVzdHMvX19pbml0X18ucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
ZHJpdmVyL3Rlc3RzL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi5lNjlkZTI5YmIyZApkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYmRyaXZlci90ZXN0cy9hY3Rpb25zL19faW5pdF9fLnB5IGIvV2ViRHJpdmVyVGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9hY3Rpb25zL19faW5pdF9fLnB5Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lNjlkZTI5YmIyZApkaWZmIC0tZ2l0IGEv
V2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9hY3Rpb25zL2NvbmZ0
ZXN0LnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9hY3Rp
b25zL2NvbmZ0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43
NTIwOTM4M2VhYgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWJkcml2ZXIvdGVzdHMvYWN0aW9ucy9jb25mdGVzdC5weQpAQCAtMCwwICsxLDM0IEBACitp
bXBvcnQgcHl0ZXN0CisKKworQHB5dGVzdC5maXh0dXJlCitkZWYga2V5X2NoYWluKHNlc3Npb24p
OgorICAgIHJldHVybiBzZXNzaW9uLmFjdGlvbnMuc2VxdWVuY2UoImtleSIsICJrZXlib2FyZF9p
ZCIpCisKKworQHB5dGVzdC5maXh0dXJlCitkZWYgbW91c2VfY2hhaW4oc2Vzc2lvbik6CisgICAg
cmV0dXJuIHNlc3Npb24uYWN0aW9ucy5zZXF1ZW5jZSgKKyAgICAgICAgInBvaW50ZXIiLAorICAg
ICAgICAicG9pbnRlcl9pZCIsCisgICAgICAgIHsicG9pbnRlclR5cGUiOiAibW91c2UifSkKKwor
CitAcHl0ZXN0LmZpeHR1cmUoYXV0b3VzZT1UcnVlKQorZGVmIHJlbGVhc2VfYWN0aW9ucyhzZXNz
aW9uLCByZXF1ZXN0KToKKyAgICAjIHJlbGVhc2UgYWxsIGFjdGlvbnMgYWZ0ZXIgZWFjaCB0ZXN0
CisgICAgIyBlcXVpdmFsZW50IHRvIGEgdGVhcmRvd25fZnVuY3Rpb24sIGJ1dCB3aXRoIGFjY2Vz
cyB0byBzZXNzaW9uIGZpeHR1cmUKKyAgICByZXF1ZXN0LmFkZGZpbmFsaXplcihzZXNzaW9uLmFj
dGlvbnMucmVsZWFzZSkKKworCitAcHl0ZXN0LmZpeHR1cmUKK2RlZiBrZXlfcmVwb3J0ZXIoc2Vz
c2lvbiwgdGVzdF9hY3Rpb25zX3BhZ2UsIHJlcXVlc3QpOgorICAgICIiIlJlcHJlc2VudHMgZm9j
dXNlZCBpbnB1dCBlbGVtZW50IGZyb20gYHRlc3Rfa2V5c19wYWdlYCBmaXh0dXJlLiIiIgorICAg
IGlucHV0X2VsID0gc2Vzc2lvbi5maW5kLmNzcygiI2tleXMiLCBhbGw9RmFsc2UpCisgICAgaW5w
dXRfZWwuY2xpY2soKQorICAgIHJldHVybiBpbnB1dF9lbAorCisKK0BweXRlc3QuZml4dHVyZQor
ZGVmIHRlc3RfYWN0aW9uc19wYWdlKHNlc3Npb24sIHVybCk6CisgICAgc2Vzc2lvbi51cmwgPSB1
cmwoIi93ZWJkcml2ZXIvdGVzdHMvYWN0aW9ucy9zdXBwb3J0L3Rlc3RfYWN0aW9uc193ZHNwZWMu
aHRtbCIpCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVy
L3Rlc3RzL2FjdGlvbnMva2V5LnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRy
aXZlci90ZXN0cy9hY3Rpb25zL2tleS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMC4uNDM4ODdlZDQzMmEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL2FjdGlvbnMva2V5LnB5CkBAIC0wLDAgKzEsMTU0
IEBACitpbXBvcnQgcHl0ZXN0CisKK2Zyb20gdGVzdHMuYWN0aW9ucy5zdXBwb3J0LmtleXMgaW1w
b3J0IEtleXMKK2Zyb20gdGVzdHMuYWN0aW9ucy5zdXBwb3J0LnJlZmluZSBpbXBvcnQgZmlsdGVy
X2RpY3QsIGdldF9rZXlzLCBnZXRfZXZlbnRzCisKKworZGVmIHRlc3RfbG9uZV9rZXl1cF9zZW5k
c19ub19ldmVudHMoc2Vzc2lvbiwga2V5X3JlcG9ydGVyLCBrZXlfY2hhaW4pOgorICAgIGtleV9j
aGFpbi5rZXlfdXAoImEiKS5wZXJmb3JtKCkKKyAgICBhc3NlcnQgbGVuKGdldF9rZXlzKGtleV9y
ZXBvcnRlcikpID09IDAKKyAgICBhc3NlcnQgbGVuKGdldF9ldmVudHMoc2Vzc2lvbikpID09IDAK
KyAgICBzZXNzaW9uLmFjdGlvbnMucmVsZWFzZSgpCisgICAgYXNzZXJ0IGxlbihnZXRfa2V5cyhr
ZXlfcmVwb3J0ZXIpKSA9PSAwCisgICAgYXNzZXJ0IGxlbihnZXRfZXZlbnRzKHNlc3Npb24pKSA9
PSAwCisKKworQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKCJ2YWx1ZSxjb2RlIiwgWworICAgICh1
ImEiLCAiS2V5QSIsKSwKKyAgICAoImEiLCAiS2V5QSIsKSwKKyAgICAodSJcIiIsICJRdW90ZSIp
LAorICAgICh1IiwiLCAiQ29tbWEiKSwKKyAgICAodSJcdTAwRTAiLCAiIiksCisgICAgKHUiXHUw
NDE2IiwgIiIpLAorICAgICh1IkAiLCAiRGlnaXQyIiksCisgICAgKHUiXHUyNjAzIiwgIiIpLAor
ICAgICh1Ilx1RjZDMiIsICIiKSwgICMgUFVBCitdKQorZGVmIHRlc3Rfc2luZ2xlX3ByaW50YWJs
ZV9rZXlfc2VuZHNfY29ycmVjdF9ldmVudHMoc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleV9yZXBvcnRlciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleV9jaGFpbiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSk6Cisg
ICAga2V5X2NoYWluIFwKKyAgICAgICAgLmtleV9kb3duKHZhbHVlKSBcCisgICAgICAgIC5rZXlf
dXAodmFsdWUpIFwKKyAgICAgICAgLnBlcmZvcm0oKQorICAgIGV4cGVjdGVkID0gWworICAgICAg
ICB7ImNvZGUiOiBjb2RlLCAia2V5IjogdmFsdWUsICJ0eXBlIjogImtleWRvd24ifSwKKyAgICAg
ICAgeyJjb2RlIjogY29kZSwgImtleSI6IHZhbHVlLCAidHlwZSI6ICJrZXlwcmVzcyJ9LAorICAg
ICAgICB7ImNvZGUiOiBjb2RlLCAia2V5IjogdmFsdWUsICJ0eXBlIjogImtleXVwIn0sCisgICAg
XQorICAgIGV2ZW50cyA9IFtmaWx0ZXJfZGljdChlLCBleHBlY3RlZFswXSkgZm9yIGUgaW4gZ2V0
X2V2ZW50cyhzZXNzaW9uKV0KKyAgICBhc3NlcnQgZXZlbnRzID09IGV4cGVjdGVkCisgICAgYXNz
ZXJ0IGdldF9rZXlzKGtleV9yZXBvcnRlcikgPT0gdmFsdWUKKworCitAcHl0ZXN0Lm1hcmsucGFy
YW1ldHJpemUoInZhbHVlIiwgWworICAgICh1IlxVMDAwMUY2MDQiKSwKKyAgICAodSJcVTAwMDFG
NjBEIiksCitdKQorZGVmIHRlc3Rfc2luZ2xlX2Vtb2ppX3JlY29yZHNfY29ycmVjdF9rZXkoc2Vz
c2lvbiwga2V5X3JlcG9ydGVyLCBrZXlfY2hhaW4sIHZhbHVlKToKKyAgICAjIE5vdCB1c2luZyBr
ZXlfY2hhaW4uc2VuZF9rZXlzKCkgYmVjYXVzZSB3ZSBhbHdheXMgd2FudCB0byB0cmVhdCB2YWx1
ZSBhcworICAgICMgb25lIGNoYXJhY3RlciBoZXJlLiBgbGVuKHZhbHVlKWAgdmFyaWVzIGJ5IHBs
YXRmb3JtIGZvciBub24tQk1QIGNoYXJhY3RlcnMsCisgICAgIyBzbyB3ZSBkb24ndCB3YW50IHRv
IGl0ZXJhdGUgb3ZlciB2YWx1ZS4KKyAgICBrZXlfY2hhaW4gXAorICAgICAgICAua2V5X2Rvd24o
dmFsdWUpIFwKKyAgICAgICAgLmtleV91cCh2YWx1ZSkgXAorICAgICAgICAucGVyZm9ybSgpCisg
ICAgIyBldmVudHMgc2VudCBieSBtYWpvciBicm93c2VycyBhcmUgaW5jb25zaXN0ZW50IHNvIG9u
bHkgY2hlY2sga2V5IHZhbHVlCisgICAgYXNzZXJ0IGdldF9rZXlzKGtleV9yZXBvcnRlcikgPT0g
dmFsdWUKKworCitAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoInZhbHVlLGNvZGUsa2V5IiwgWwor
ICAgICh1Ilx1RTA1MCIsICJTaGlmdFJpZ2h0IiwgIlNoaWZ0IiksCisgICAgKHUiXHVFMDUzIiwg
Ik9TUmlnaHQiLCAiTWV0YSIpLAorICAgIChLZXlzLkNPTlRST0wsICJDb250cm9sTGVmdCIsICJD
b250cm9sIiksCitdKQorZGVmIHRlc3Rfc2luZ2xlX21vZGlmaWVyX2tleV9zZW5kc19jb3JyZWN0
X2V2ZW50cyhzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBrZXlfcmVwb3J0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGtleV9jaGFpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGtleSk6CisgICAga2V5X2NoYWluIFwKKyAgICAgICAg
LmtleV9kb3duKHZhbHVlKSBcCisgICAgICAgIC5rZXlfdXAodmFsdWUpIFwKKyAgICAgICAgLnBl
cmZvcm0oKQorICAgIGFsbF9ldmVudHMgPSBnZXRfZXZlbnRzKHNlc3Npb24pCisgICAgZXhwZWN0
ZWQgPSBbCisgICAgICAgIHsiY29kZSI6IGNvZGUsICJrZXkiOiBrZXksICJ0eXBlIjogImtleWRv
d24ifSwKKyAgICAgICAgeyJjb2RlIjogY29kZSwgImtleSI6IGtleSwgInR5cGUiOiAia2V5dXAi
fSwKKyAgICBdCisgICAgZXZlbnRzID0gW2ZpbHRlcl9kaWN0KGUsIGV4cGVjdGVkWzBdKSBmb3Ig
ZSBpbiBhbGxfZXZlbnRzXQorICAgIGFzc2VydCBldmVudHMgPT0gZXhwZWN0ZWQKKyAgICBhc3Nl
cnQgbGVuKGdldF9rZXlzKGtleV9yZXBvcnRlcikpID09IDAKKworCitAcHl0ZXN0Lm1hcmsucGFy
YW1ldHJpemUoInZhbHVlLGNvZGUsa2V5IiwgWworICAgIChLZXlzLkVTQ0FQRSwgIkVzY2FwZSIs
ICJFc2NhcGUiKSwKKyAgICAoS2V5cy5SSUdIVCwgIkFycm93UmlnaHQiLCAiQXJyb3dSaWdodCIp
LAorXSkKK2RlZiB0ZXN0X3NpbmdsZV9ub25wcmludGFibGVfa2V5X3NlbmRzX2V2ZW50cyhzZXNz
aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleV9y
ZXBvcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBr
ZXlfY2hhaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29k
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkpOgor
ICAgIGtleV9jaGFpbiBcCisgICAgICAgIC5rZXlfZG93bih2YWx1ZSkgXAorICAgICAgICAua2V5
X3VwKHZhbHVlKSBcCisgICAgICAgIC5wZXJmb3JtKCkKKyAgICBleHBlY3RlZCA9IFsKKyAgICAg
ICAgeyJjb2RlIjogY29kZSwgImtleSI6IGtleSwgInR5cGUiOiAia2V5ZG93biJ9LAorICAgICAg
ICB7ImNvZGUiOiBjb2RlLCAia2V5Ijoga2V5LCAidHlwZSI6ICJrZXlwcmVzcyJ9LAorICAgICAg
ICB7ImNvZGUiOiBjb2RlLCAia2V5Ijoga2V5LCAidHlwZSI6ICJrZXl1cCJ9LAorICAgIF0KKyAg
ICBldmVudHMgPSBbZmlsdGVyX2RpY3QoZSwgZXhwZWN0ZWRbMF0pIGZvciBlIGluIGdldF9ldmVu
dHMoc2Vzc2lvbildCisgICAgaWYgbGVuKGV2ZW50cykgPT0gMjoKKyAgICAgICAgIyBtb3N0IGJy
b3dzZXJzIGRvbid0IHNlbmQgYSBrZXlwcmVzcyBmb3Igbm9uLXByaW50YWJsZSBrZXlzCisgICAg
ICAgIGFzc2VydCBldmVudHMgPT0gW2V4cGVjdGVkWzBdLCBleHBlY3RlZFsyXV0KKyAgICBlbHNl
OgorICAgICAgICBhc3NlcnQgZXZlbnRzID09IGV4cGVjdGVkCisgICAgYXNzZXJ0IGxlbihnZXRf
a2V5cyhrZXlfcmVwb3J0ZXIpKSA9PSAwCisKKworZGVmIHRlc3Rfc2VxdWVuY2Vfb2Zfa2V5ZG93
bl9wcmludGFibGVfa2V5c19zZW5kc19ldmVudHMoc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleV9yZXBvcnRlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtl
eV9jaGFpbik6CisgICAga2V5X2NoYWluIFwKKyAgICAgICAgLmtleV9kb3duKCJhIikgXAorICAg
ICAgICAua2V5X2Rvd24oImIiKSBcCisgICAgICAgIC5wZXJmb3JtKCkKKyAgICBleHBlY3RlZCA9
IFsKKyAgICAgICAgeyJjb2RlIjogIktleUEiLCAia2V5IjogImEiLCAidHlwZSI6ICJrZXlkb3du
In0sCisgICAgICAgIHsiY29kZSI6ICJLZXlBIiwgImtleSI6ICJhIiwgInR5cGUiOiAia2V5cHJl
c3MifSwKKyAgICAgICAgeyJjb2RlIjogIktleUIiLCAia2V5IjogImIiLCAidHlwZSI6ICJrZXlk
b3duIn0sCisgICAgICAgIHsiY29kZSI6ICJLZXlCIiwgImtleSI6ICJiIiwgInR5cGUiOiAia2V5
cHJlc3MifSwKKyAgICBdCisgICAgZXZlbnRzID0gW2ZpbHRlcl9kaWN0KGUsIGV4cGVjdGVkWzBd
KSBmb3IgZSBpbiBnZXRfZXZlbnRzKHNlc3Npb24pXQorICAgIGFzc2VydCBldmVudHMgPT0gZXhw
ZWN0ZWQKKyAgICBhc3NlcnQgZ2V0X2tleXMoa2V5X3JlcG9ydGVyKSA9PSAiYWIiCisKKworZGVm
IHRlc3Rfc2VxdWVuY2Vfb2Zfa2V5ZG93bl9jaGFyYWN0ZXJfa2V5cyhzZXNzaW9uLCBrZXlfcmVw
b3J0ZXIsIGtleV9jaGFpbik6CisgICAga2V5X2NoYWluLnNlbmRfa2V5cygiZWYiKS5wZXJmb3Jt
KCkKKyAgICBleHBlY3RlZCA9IFsKKyAgICAgICAgeyJjb2RlIjogIktleUUiLCAia2V5IjogImUi
LCAidHlwZSI6ICJrZXlkb3duIn0sCisgICAgICAgIHsiY29kZSI6ICJLZXlFIiwgImtleSI6ICJl
IiwgInR5cGUiOiAia2V5cHJlc3MifSwKKyAgICAgICAgeyJjb2RlIjogIktleUUiLCAia2V5Ijog
ImUiLCAidHlwZSI6ICJrZXl1cCJ9LAorICAgICAgICB7ImNvZGUiOiAiS2V5RiIsICJrZXkiOiAi
ZiIsICJ0eXBlIjogImtleWRvd24ifSwKKyAgICAgICAgeyJjb2RlIjogIktleUYiLCAia2V5Ijog
ImYiLCAidHlwZSI6ICJrZXlwcmVzcyJ9LAorICAgICAgICB7ImNvZGUiOiAiS2V5RiIsICJrZXki
OiAiZiIsICJ0eXBlIjogImtleXVwIn0sCisgICAgXQorICAgIGV2ZW50cyA9IFtmaWx0ZXJfZGlj
dChlLCBleHBlY3RlZFswXSkgZm9yIGUgaW4gZ2V0X2V2ZW50cyhzZXNzaW9uKV0KKyAgICBhc3Nl
cnQgZXZlbnRzID09IGV4cGVjdGVkCisgICAgYXNzZXJ0IGdldF9rZXlzKGtleV9yZXBvcnRlcikg
PT0gImVmIgorCisKK2RlZiB0ZXN0X2JhY2tzcGFjZV9lcmFzZXNfa2V5cyhzZXNzaW9uLCBrZXlf
cmVwb3J0ZXIsIGtleV9jaGFpbik6CisgICAga2V5X2NoYWluIFwKKyAgICAgICAgLnNlbmRfa2V5
cygiZWZjZCIpIFwKKyAgICAgICAgLnNlbmRfa2V5cyhbS2V5cy5CQUNLU1BBQ0UsIEtleXMuQkFD
S1NQQUNFXSkgXAorICAgICAgICAucGVyZm9ybSgpCisgICAgYXNzZXJ0IGdldF9rZXlzKGtleV9y
ZXBvcnRlcikgPT0gImVmIgorCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViZHJpdmVyL3Rlc3RzL2FjdGlvbnMvbW91c2UucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL2FjdGlvbnMvbW91c2UucHkKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjNmZjFlM2ViNWE3Ci0tLSAvZGV2L251bGwKKysrIGIv
V2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9hY3Rpb25zL21vdXNl
LnB5CkBAIC0wLDAgKzEsMTM2IEBACitpbXBvcnQgcHl0ZXN0CisKK2Zyb20gdGVzdHMuc3VwcG9y
dC5pbmxpbmUgaW1wb3J0IGlubGluZQorZnJvbSB0ZXN0cy5hY3Rpb25zLnN1cHBvcnQucmVmaW5l
IGltcG9ydCBnZXRfZXZlbnRzLCBmaWx0ZXJfZGljdAorZnJvbSB0ZXN0cy5zdXBwb3J0LndhaXQg
aW1wb3J0IHdhaXQKKworCitkZWYgbGlua19kb2MoZGVzdCk6CisgICAgY29udGVudCA9ICI8YSBo
cmVmPVwie31cIiBpZD1cImxpbmtcIj5kZXN0aW5hdGlvbjwvYT4iLmZvcm1hdChkZXN0KQorICAg
IHJldHVybiBpbmxpbmUoY29udGVudCkKKworCitkZWYgZ2V0X2NlbnRlcihyZWN0KToKKyAgICBy
ZXR1cm4geworICAgICAgICAieCI6IHJlY3RbIndpZHRoIl0gLyAyICsgcmVjdFsieCJdLAorICAg
ICAgICAieSI6IHJlY3RbImhlaWdodCJdIC8gMiArIHJlY3RbInkiXSwKKyAgICB9CisKKworIyBU
T0RPIHVzZSBweXRlc3QuYXBwcm94IG9uY2Ugd2UgdXBncmFkZSB0byBweXRlc3QgPiAzLjAKK2Rl
ZiBhcHByb3gobiwgbSwgdG9sZXJhbmNlPTEpOgorICAgIHJldHVybiBhYnMobiAtIG0pIDwgdG9s
ZXJhbmNlCisKKworZGVmIHRlc3RfY2xpY2tfYXRfY29vcmRpbmF0ZXMoc2Vzc2lvbiwgdGVzdF9h
Y3Rpb25zX3BhZ2UsIG1vdXNlX2NoYWluKToKKyAgICBkaXZfcG9pbnQgPSB7CisgICAgICAgICJ4
IjogODIsCisgICAgICAgICJ5IjogMTg3LAorICAgIH0KKyAgICBtb3VzZV9jaGFpbiBcCisgICAg
ICAgIC5wb2ludGVyX21vdmUoZGl2X3BvaW50WyJ4Il0sIGRpdl9wb2ludFsieSJdLCBkdXJhdGlv
bj0xMDAwKSBcCisgICAgICAgIC5jbGljaygpIFwKKyAgICAgICAgLnBlcmZvcm0oKQorICAgIGV2
ZW50cyA9IGdldF9ldmVudHMoc2Vzc2lvbikKKyAgICBhc3NlcnQgbGVuKGV2ZW50cykgPT0gNAor
ICAgIGZvciBlIGluIGV2ZW50czoKKyAgICAgICAgaWYgZVsidHlwZSJdICE9ICJtb3VzZW1vdmUi
OgorICAgICAgICAgICAgYXNzZXJ0IGVbInBhZ2VYIl0gPT0gZGl2X3BvaW50WyJ4Il0KKyAgICAg
ICAgICAgIGFzc2VydCBlWyJwYWdlWSJdID09IGRpdl9wb2ludFsieSJdCisgICAgICAgICAgICBh
c3NlcnQgZVsidGFyZ2V0Il0gPT0gIm91dGVyIgorICAgICAgICBpZiBlWyJ0eXBlIl0gIT0gIm1v
dXNlZG93biI6CisgICAgICAgICAgICBhc3NlcnQgZVsiYnV0dG9ucyJdID09IDAKKyAgICAgICAg
YXNzZXJ0IGVbImJ1dHRvbiJdID09IDAKKyAgICBleHBlY3RlZCA9IFsKKyAgICAgICAgeyJ0eXBl
IjogIm1vdXNlZG93biIsICJidXR0b25zIjogMX0sCisgICAgICAgIHsidHlwZSI6ICJtb3VzZXVw
IiwgICJidXR0b25zIjogMH0sCisgICAgICAgIHsidHlwZSI6ICJjbGljayIsICJidXR0b25zIjog
MH0sCisgICAgXQorICAgIGZpbHRlcmVkX2V2ZW50cyA9IFtmaWx0ZXJfZGljdChlLCBleHBlY3Rl
ZFswXSkgZm9yIGUgaW4gZXZlbnRzXQorICAgIGFzc2VydCBleHBlY3RlZCA9PSBmaWx0ZXJlZF9l
dmVudHNbMTpdCisKKworZGVmIHRlc3RfY29udGV4dF9tZW51X2F0X2Nvb3JkaW5hdGVzKHNlc3Np
b24sIHRlc3RfYWN0aW9uc19wYWdlLCBtb3VzZV9jaGFpbik6CisgICAgZGl2X3BvaW50ID0gewor
ICAgICAgICAieCI6IDgyLAorICAgICAgICAieSI6IDE4NywKKyAgICB9CisgICAgbW91c2VfY2hh
aW4gXAorICAgICAgICAucG9pbnRlcl9tb3ZlKGRpdl9wb2ludFsieCJdLCBkaXZfcG9pbnRbInki
XSkgXAorICAgICAgICAucG9pbnRlcl9kb3duKGJ1dHRvbj0yKSBcCisgICAgICAgIC5wb2ludGVy
X3VwKGJ1dHRvbj0yKSBcCisgICAgICAgIC5wZXJmb3JtKCkKKyAgICBldmVudHMgPSBnZXRfZXZl
bnRzKHNlc3Npb24pCisgICAgZXhwZWN0ZWQgPSBbCisgICAgICAgIHsidHlwZSI6ICJtb3VzZWRv
d24iLCAiYnV0dG9uIjogMn0sCisgICAgICAgIHsidHlwZSI6ICJjb250ZXh0bWVudSIsICAiYnV0
dG9uIjogMn0sCisgICAgXQorICAgIGFzc2VydCBsZW4oZXZlbnRzKSA9PSA0CisgICAgZmlsdGVy
ZWRfZXZlbnRzID0gW2ZpbHRlcl9kaWN0KGUsIGV4cGVjdGVkWzBdKSBmb3IgZSBpbiBldmVudHNd
CisgICAgbW91c2Vkb3duX2NvbnRleHRtZW51X2V2ZW50cyA9IFsKKyAgICAgICAgeCBmb3IgeCBp
biBmaWx0ZXJlZF9ldmVudHMKKyAgICAgICAgaWYgeFsidHlwZSJdIGluIFsibW91c2Vkb3duIiwg
ImNvbnRleHRtZW51Il0KKyAgICBdCisgICAgYXNzZXJ0IGV4cGVjdGVkID09IG1vdXNlZG93bl9j
b250ZXh0bWVudV9ldmVudHMKKworCitkZWYgdGVzdF9jbGlja19lbGVtZW50X2NlbnRlcihzZXNz
aW9uLCB0ZXN0X2FjdGlvbnNfcGFnZSwgbW91c2VfY2hhaW4pOgorICAgIG91dGVyID0gc2Vzc2lv
bi5maW5kLmNzcygiI291dGVyIiwgYWxsPUZhbHNlKQorICAgIGNlbnRlciA9IGdldF9jZW50ZXIo
b3V0ZXIucmVjdCkKKyAgICBtb3VzZV9jaGFpbi5jbGljayhlbGVtZW50PW91dGVyKS5wZXJmb3Jt
KCkKKyAgICBldmVudHMgPSBnZXRfZXZlbnRzKHNlc3Npb24pCisgICAgYXNzZXJ0IGxlbihldmVu
dHMpID09IDQKKyAgICBldmVudF90eXBlcyA9IFtlWyJ0eXBlIl0gZm9yIGUgaW4gZXZlbnRzXQor
ICAgIGFzc2VydCBbIm1vdXNlbW92ZSIsICJtb3VzZWRvd24iLCAibW91c2V1cCIsICJjbGljayJd
ID09IGV2ZW50X3R5cGVzCisgICAgZm9yIGUgaW4gZXZlbnRzOgorICAgICAgICBpZiBlWyJ0eXBl
Il0gIT0gIm1vdXNlbW92ZSI6CisgICAgICAgICAgICBhc3NlcnQgYXBwcm94KGVbInBhZ2VYIl0s
IGNlbnRlclsieCJdKQorICAgICAgICAgICAgYXNzZXJ0IGFwcHJveChlWyJwYWdlWSJdLCBjZW50
ZXJbInkiXSkKKyAgICAgICAgICAgIGFzc2VydCBlWyJ0YXJnZXQiXSA9PSAib3V0ZXIiCisKKwor
ZGVmIHRlc3RfY2xpY2tfbmF2aWdhdGlvbihzZXNzaW9uLCB1cmwpOgorICAgIGRlc3RpbmF0aW9u
ID0gdXJsKCIvd2ViZHJpdmVyL3Rlc3RzL2FjdGlvbnMvc3VwcG9ydC90ZXN0X2FjdGlvbnNfd2Rz
cGVjLmh0bWwiKQorICAgIHN0YXJ0ID0gbGlua19kb2MoZGVzdGluYXRpb24pCisKKyAgICBkZWYg
Y2xpY2sobGluayk6CisgICAgICAgIG1vdXNlX2NoYWluID0gc2Vzc2lvbi5hY3Rpb25zLnNlcXVl
bmNlKAorICAgICAgICAgICAgInBvaW50ZXIiLCAicG9pbnRlcl9pZCIsIHsicG9pbnRlclR5cGUi
OiAibW91c2UifSkKKyAgICAgICAgbW91c2VfY2hhaW4uY2xpY2soZWxlbWVudD1saW5rKS5wZXJm
b3JtKCkKKworICAgIHNlc3Npb24udXJsID0gc3RhcnQKKyAgICBlcnJvcl9tZXNzYWdlID0gIkRp
ZCBub3QgbmF2aWdhdGUgdG8gJXMiICUgZGVzdGluYXRpb24KKworICAgIGNsaWNrKHNlc3Npb24u
ZmluZC5jc3MoIiNsaW5rIiwgYWxsPUZhbHNlKSkKKyAgICB3YWl0KHNlc3Npb24sIGxhbWJkYSBz
OiBzLnVybCA9PSBkZXN0aW5hdGlvbiwgZXJyb3JfbWVzc2FnZSkKKyAgICAjIHJlcGVhdCBzdGVw
cyB0byBjaGVjayBiZWhhdmlvdXIgYWZ0ZXIgZG9jdW1lbnQgdW5sb2FkCisgICAgc2Vzc2lvbi51
cmwgPSBzdGFydAorICAgIGNsaWNrKHNlc3Npb24uZmluZC5jc3MoIiNsaW5rIiwgYWxsPUZhbHNl
KSkKKyAgICB3YWl0KHNlc3Npb24sIGxhbWJkYSBzOiBzLnVybCA9PSBkZXN0aW5hdGlvbiwgZXJy
b3JfbWVzc2FnZSkKKworCitAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoImRyYWdfZHVyYXRpb24i
LCBbMCwgMzAwLCA4MDBdKQorQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKCJkeCwgZHkiLAorICAg
IFsoMjAsIDApLCAoMCwgMTUpLCAoMTAsIDE1KSwgKC0yMCwgMCksICgxMCwgLTE1KSwgKC0xMCwg
LTE1KV0pCitkZWYgdGVzdF9kcmFnX2FuZF9kcm9wKHNlc3Npb24sIHRlc3RfYWN0aW9uc19wYWdl
LCBtb3VzZV9jaGFpbiwgZHgsIGR5LCBkcmFnX2R1cmF0aW9uKToKKyAgICBkcmFnX3RhcmdldCA9
IHNlc3Npb24uZmluZC5jc3MoIiNkcmFnVGFyZ2V0IiwgYWxsPUZhbHNlKQorICAgIGluaXRpYWxf
cmVjdCA9IGRyYWdfdGFyZ2V0LnJlY3QKKyAgICBpbml0aWFsX2NlbnRlciA9IGdldF9jZW50ZXIo
aW5pdGlhbF9yZWN0KQorICAgICMgQ29uY2x1ZGUgY2hhaW4gd2l0aCBleHRyYSBtb3ZlIHRvIGFs
bG93IHRpbWUgZm9yIGxhc3QgcXVldWVkCisgICAgIyBjb29yZGluYXRlLXVwZGF0ZSBvZiBkcmFn
X3RhcmdldCBhbmQgdG8gdGVzdCB0aGF0IGRyYWdfdGFyZ2V0IGlzICJkcm9wcGVkIi4KKyAgICBt
b3VzZV9jaGFpbiBcCisgICAgICAgIC5wb2ludGVyX21vdmUoMCwgMCwgb3JpZ2luPWRyYWdfdGFy
Z2V0KSBcCisgICAgICAgIC5wb2ludGVyX2Rvd24oKSBcCisgICAgICAgIC5wb2ludGVyX21vdmUo
ZHgsIGR5LCBkdXJhdGlvbj1kcmFnX2R1cmF0aW9uLCBvcmlnaW49InBvaW50ZXIiKSBcCisgICAg
ICAgIC5wb2ludGVyX3VwKCkgXAorICAgICAgICAucG9pbnRlcl9tb3ZlKDgwLCA1MCwgZHVyYXRp
b249MTAwLCBvcmlnaW49InBvaW50ZXIiKSBcCisgICAgICAgIC5wZXJmb3JtKCkKKyAgICAjIG1v
dXNldXAgdGhhdCBlbmRzIHRoZSBkcmFnIGlzIGF0IHRoZSBleHBlY3RlZCBkZXN0aW5hdGlvbgor
ICAgIGUgPSBnZXRfZXZlbnRzKHNlc3Npb24pWzFdCisgICAgYXNzZXJ0IGVbInR5cGUiXSA9PSAi
bW91c2V1cCIKKyAgICBhc3NlcnQgYXBwcm94KGVbInBhZ2VYIl0sIGluaXRpYWxfY2VudGVyWyJ4
Il0gKyBkeCkKKyAgICBhc3NlcnQgYXBwcm94KGVbInBhZ2VZIl0sIGluaXRpYWxfY2VudGVyWyJ5
Il0gKyBkeSkKKyAgICAjIGNoZWNrIHJlc3VsdGluZyBsb2NhdGlvbiBvZiB0aGUgZHJhZ2dlZCBl
bGVtZW50CisgICAgZmluYWxfcmVjdCA9IGRyYWdfdGFyZ2V0LnJlY3QKKyAgICBhc3NlcnQgaW5p
dGlhbF9yZWN0WyJ4Il0gKyBkeCA9PSBmaW5hbF9yZWN0WyJ4Il0KKyAgICBhc3NlcnQgaW5pdGlh
bF9yZWN0WyJ5Il0gKyBkeSA9PSBmaW5hbF9yZWN0WyJ5Il0KZGlmZiAtLWdpdCBhL1dlYkRyaXZl
clRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvYWN0aW9ucy9zZXF1ZW5jZS5weSBi
L1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvYWN0aW9ucy9zZXF1
ZW5jZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uM2U4M2IxNWIz
NTMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJp
dmVyL3Rlc3RzL2FjdGlvbnMvc2VxdWVuY2UucHkKQEAgLTAsMCArMSwxNDYgQEAKKyMgTUVUQTog
dGltZW91dD1sb25nCisKK2ltcG9ydCBweXRlc3QKKworZnJvbSB0ZXN0cy5hY3Rpb25zLnN1cHBv
cnQucmVmaW5lIGltcG9ydCBnZXRfa2V5cywgZmlsdGVyX2RpY3QsIGdldF9ldmVudHMKK2Zyb20g
dGVzdHMuYWN0aW9ucy5zdXBwb3J0LmtleXMgaW1wb3J0IEtleXMKKworCitkZWYgdGVzdF9ub19h
Y3Rpb25zX3NlbmRfbm9fZXZlbnRzKHNlc3Npb24sIGtleV9yZXBvcnRlciwga2V5X2NoYWluKToK
KyAgICBrZXlfY2hhaW4ucGVyZm9ybSgpCisgICAgYXNzZXJ0IGxlbihnZXRfa2V5cyhrZXlfcmVw
b3J0ZXIpKSA9PSAwCisgICAgYXNzZXJ0IGxlbihnZXRfZXZlbnRzKHNlc3Npb24pKSA9PSAwCisK
KworZGVmIHRlc3RfcmVsZWFzZV9jaGFyX3NlcXVlbmNlX3NlbmRzX2tleXVwX2V2ZW50c19pbl9y
ZXZlcnNlKHNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAga2V5X3JlcG9ydGVyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleV9jaGFpbik6CisgICAg
a2V5X2NoYWluIFwKKyAgICAgICAgLmtleV9kb3duKCJhIikgXAorICAgICAgICAua2V5X2Rvd24o
ImIiKSBcCisgICAgICAgIC5wZXJmb3JtKCkKKyAgICAjIHJlc2V0IHNvIHdlIG9ubHkgc2VlIHRo
ZSByZWxlYXNlIGV2ZW50cworICAgIHNlc3Npb24uZXhlY3V0ZV9zY3JpcHQoInJlc2V0RXZlbnRz
KCk7IikKKyAgICBzZXNzaW9uLmFjdGlvbnMucmVsZWFzZSgpCisgICAgZXhwZWN0ZWQgPSBbCisg
ICAgICAgIHsiY29kZSI6ICJLZXlCIiwgImtleSI6ICJiIiwgInR5cGUiOiAia2V5dXAifSwKKyAg
ICAgICAgeyJjb2RlIjogIktleUEiLCAia2V5IjogImEiLCAidHlwZSI6ICJrZXl1cCJ9LAorICAg
IF0KKyAgICBldmVudHMgPSBbZmlsdGVyX2RpY3QoZSwgZXhwZWN0ZWRbMF0pIGZvciBlIGluIGdl
dF9ldmVudHMoc2Vzc2lvbildCisgICAgYXNzZXJ0IGV2ZW50cyA9PSBleHBlY3RlZAorCisKK2Rl
ZiB0ZXN0X3JlbGVhc2Vfbm9fYWN0aW9uc19zZW5kc19ub19ldmVudHMoc2Vzc2lvbiwga2V5X3Jl
cG9ydGVyKToKKyAgICBzZXNzaW9uLmFjdGlvbnMucmVsZWFzZSgpCisgICAgYXNzZXJ0IGxlbihn
ZXRfa2V5cyhrZXlfcmVwb3J0ZXIpKSA9PSAwCisgICAgYXNzZXJ0IGxlbihnZXRfZXZlbnRzKHNl
c3Npb24pKSA9PSAwCisKKworQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKCJtb2RpZmllciwgcHJv
cCIsIFsKKyAgICAoS2V5cy5DT05UUk9MLCAiY3RybEtleSIpLAorICAgIChLZXlzLkFMVCwgImFs
dEtleSIpLAorICAgIChLZXlzLk1FVEEsICJtZXRhS2V5IiksCisgICAgKEtleXMuU0hJRlQsICJz
aGlmdEtleSIpLAorICAgIChLZXlzLlJfQ09OVFJPTCwgImN0cmxLZXkiKSwKKyAgICAoS2V5cy5S
X0FMVCwgImFsdEtleSIpLAorICAgIChLZXlzLlJfTUVUQSwgIm1ldGFLZXkiKSwKKyAgICAoS2V5
cy5SX1NISUZULCAic2hpZnRLZXkiKSwKK10pCitkZWYgdGVzdF9jb250cm9sX2NsaWNrKHNlc3Np
b24sCisgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfYWN0aW9uc19wYWdlLAorICAgICAgICAg
ICAgICAgICAgICAgICBrZXlfY2hhaW4sCisgICAgICAgICAgICAgICAgICAgICAgIG1vdXNlX2No
YWluLAorICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgcHJvcCk6CisgICAga2V5X2NoYWluIFwKKyAgICAgICAgLnBhdXNlKDApIFwKKyAgICAg
ICAgLmtleV9kb3duKG1vZGlmaWVyKSBcCisgICAgICAgIC5wYXVzZSgyMDApIFwKKyAgICAgICAg
LmtleV91cChtb2RpZmllcikKKyAgICBvdXRlciA9IHNlc3Npb24uZmluZC5jc3MoIiNvdXRlciIs
IGFsbD1GYWxzZSkKKyAgICBtb3VzZV9jaGFpbi5jbGljayhlbGVtZW50PW91dGVyKQorICAgIHNl
c3Npb24uYWN0aW9ucy5wZXJmb3JtKFtrZXlfY2hhaW4uZGljdCwgbW91c2VfY2hhaW4uZGljdF0p
CisgICAgZXhwZWN0ZWQgPSBbCisgICAgICAgIHsidHlwZSI6ICJtb3VzZW1vdmUifSwKKyAgICAg
ICAgeyJ0eXBlIjogIm1vdXNlZG93biJ9LAorICAgICAgICB7InR5cGUiOiAibW91c2V1cCJ9LAor
ICAgICAgICB7InR5cGUiOiAiY2xpY2sifSwKKyAgICBdCisgICAgZGVmYXVsdHMgPSB7CisgICAg
ICAgICJhbHRLZXkiOiBGYWxzZSwKKyAgICAgICAgIm1ldGFLZXkiOiBGYWxzZSwKKyAgICAgICAg
InNoaWZ0S2V5IjogRmFsc2UsCisgICAgICAgICJjdHJsS2V5IjogRmFsc2UKKyAgICB9CisgICAg
Zm9yIGUgaW4gZXhwZWN0ZWQ6CisgICAgICAgIGUudXBkYXRlKGRlZmF1bHRzKQorICAgICAgICBp
ZiBlWyJ0eXBlIl0gIT0gIm1vdXNlbW92ZSI6CisgICAgICAgICAgICBlW3Byb3BdID0gVHJ1ZQor
ICAgIGZpbHRlcmVkX2V2ZW50cyA9IFtmaWx0ZXJfZGljdChlLCBleHBlY3RlZFswXSkgZm9yIGUg
aW4gZ2V0X2V2ZW50cyhzZXNzaW9uKV0KKyAgICBhc3NlcnQgZXhwZWN0ZWQgPT0gZmlsdGVyZWRf
ZXZlbnRzCisKKworZGVmIHRlc3RfcmVsZWFzZV9jb250cm9sX2NsaWNrKHNlc3Npb24sIGtleV9y
ZXBvcnRlciwga2V5X2NoYWluLCBtb3VzZV9jaGFpbik6CisgICAga2V5X2NoYWluIFwKKyAgICAg
ICAgLnBhdXNlKDApIFwKKyAgICAgICAgLmtleV9kb3duKEtleXMuQ09OVFJPTCkKKyAgICBtb3Vz
ZV9jaGFpbiBcCisgICAgICAgIC5wb2ludGVyX21vdmUoMCwgMCwgb3JpZ2luPWtleV9yZXBvcnRl
cikgXAorICAgICAgICAucG9pbnRlcl9kb3duKCkKKyAgICBzZXNzaW9uLmFjdGlvbnMucGVyZm9y
bShba2V5X2NoYWluLmRpY3QsIG1vdXNlX2NoYWluLmRpY3RdKQorICAgIHNlc3Npb24uZXhlY3V0
ZV9zY3JpcHQoIiIiCisgICAgICAgIHZhciBrZXlSZXBvcnRlciA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJrZXlzIik7CisgICAgICAgIFsibW91c2Vkb3duIiwgIm1vdXNldXAiXS5mb3JFYWNo
KChlKSA9PiB7CisgICAgICAgICAgICBrZXlSZXBvcnRlci5hZGRFdmVudExpc3RlbmVyKGUsIHJl
Y29yZFBvaW50ZXJFdmVudCk7CisgICAgICAgICAgfSk7CisgICAgICAgIHJlc2V0RXZlbnRzKCk7
CisgICAgIiIiKQorICAgIHNlc3Npb24uYWN0aW9ucy5yZWxlYXNlKCkKKyAgICBleHBlY3RlZCA9
IFsKKyAgICAgICAgeyJ0eXBlIjogIm1vdXNldXAifSwKKyAgICAgICAgeyJ0eXBlIjogImtleXVw
In0sCisgICAgXQorICAgIGV2ZW50cyA9IFtmaWx0ZXJfZGljdChlLCBleHBlY3RlZFswXSkgZm9y
IGUgaW4gZ2V0X2V2ZW50cyhzZXNzaW9uKV0KKyAgICBhc3NlcnQgZXZlbnRzID09IGV4cGVjdGVk
CisKKworZGVmIHRlc3RfbWFueV9tb2RpZmllcnNfY2xpY2soc2Vzc2lvbiwgdGVzdF9hY3Rpb25z
X3BhZ2UsIGtleV9jaGFpbiwgbW91c2VfY2hhaW4pOgorICAgIG91dGVyID0gc2Vzc2lvbi5maW5k
LmNzcygiI291dGVyIiwgYWxsPUZhbHNlKQorICAgIGtleV9jaGFpbiBcCisgICAgICAgIC5wYXVz
ZSgwKSBcCisgICAgICAgIC5rZXlfZG93bihLZXlzLkNPTlRST0wpIFwKKyAgICAgICAgLmtleV9k
b3duKEtleXMuU0hJRlQpIFwKKyAgICAgICAgLnBhdXNlKDApIFwKKyAgICAgICAgLmtleV91cChL
ZXlzLkNPTlRST0wpIFwKKyAgICAgICAgLmtleV91cChLZXlzLlNISUZUKQorICAgIG1vdXNlX2No
YWluIFwKKyAgICAgICAgLnBvaW50ZXJfbW92ZSgwLCAwLCBvcmlnaW49b3V0ZXIpIFwKKyAgICAg
ICAgLnBhdXNlKDApIFwKKyAgICAgICAgLnBvaW50ZXJfZG93bigpIFwKKyAgICAgICAgLnBvaW50
ZXJfdXAoKSBcCisgICAgICAgIC5wYXVzZSgwKSBcCisgICAgICAgIC5wYXVzZSgwKSBcCisgICAg
ICAgIC5wb2ludGVyX2Rvd24oKQorICAgIHNlc3Npb24uYWN0aW9ucy5wZXJmb3JtKFtrZXlfY2hh
aW4uZGljdCwgbW91c2VfY2hhaW4uZGljdF0pCisgICAgZXhwZWN0ZWQgPSBbCisgICAgICAgIHsi
dHlwZSI6ICJtb3VzZW1vdmUifSwKKyAgICAgICAgIyBzaGlmdCBhbmQgY3RybCBwcmVzc2VzCisg
ICAgICAgIHsidHlwZSI6ICJtb3VzZWRvd24ifSwKKyAgICAgICAgeyJ0eXBlIjogIm1vdXNldXAi
fSwKKyAgICAgICAgeyJ0eXBlIjogImNsaWNrIn0sCisgICAgICAgICMgbm8gbW9kaWZpZXJzIHBy
ZXNzZWQKKyAgICAgICAgeyJ0eXBlIjogIm1vdXNlZG93biJ9LAorICAgIF0KKyAgICBkZWZhdWx0
cyA9IHsKKyAgICAgICAgImFsdEtleSI6IEZhbHNlLAorICAgICAgICAibWV0YUtleSI6IEZhbHNl
LAorICAgICAgICAic2hpZnRLZXkiOiBGYWxzZSwKKyAgICAgICAgImN0cmxLZXkiOiBGYWxzZQor
ICAgIH0KKyAgICBmb3IgZSBpbiBleHBlY3RlZDoKKyAgICAgICAgZS51cGRhdGUoZGVmYXVsdHMp
CisgICAgZm9yIGUgaW4gZXhwZWN0ZWRbMTo0XToKKyAgICAgICAgZVsic2hpZnRLZXkiXSA9IFRy
dWUKKyAgICAgICAgZVsiY3RybEtleSJdID0gVHJ1ZQorICAgIGV2ZW50cyA9IFtmaWx0ZXJfZGlj
dChlLCBleHBlY3RlZFswXSkgZm9yIGUgaW4gZ2V0X2V2ZW50cyhzZXNzaW9uKV0KKyAgICBhc3Nl
cnQgZXZlbnRzID09IGV4cGVjdGVkCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL2FjdGlvbnMvc3BlY2lhbF9rZXlzLnB5IGIvV2ViRHJpdmVy
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9hY3Rpb25zL3NwZWNpYWxfa2V5cy5w
eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZWUyZDEzZmFmNGUKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rl
c3RzL2FjdGlvbnMvc3BlY2lhbF9rZXlzLnB5CkBAIC0wLDAgKzEsMzkgQEAKKyMgTUVUQTogdGlt
ZW91dD1sb25nCisKK2ltcG9ydCBweXRlc3QKK2Zyb20gdGVzdHMuYWN0aW9ucy5zdXBwb3J0Lmtl
eXMgaW1wb3J0IEFMTF9FVkVOVFMsIEtleXMKK2Zyb20gdGVzdHMuYWN0aW9ucy5zdXBwb3J0LnJl
ZmluZSBpbXBvcnQgZmlsdGVyX2RpY3QsIGdldF9rZXlzLCBnZXRfZXZlbnRzCisKKworQHB5dGVz
dC5tYXJrLnBhcmFtZXRyaXplKCJuYW1lLGV4cGVjdGVkIiwgQUxMX0VWRU5UUy5pdGVtcygpKQor
ZGVmIHRlc3Rfd2ViZHJpdmVyX3NwZWNpYWxfa2V5X3NlbmRzX2tleWRvd24oc2Vzc2lvbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleV9yZXBvcnRlciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleV9jaGFpbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCk6CisgICAg
aWYgbmFtZS5zdGFydHN3aXRoKCJGIik6CisgICAgICAgICMgUHJldmVudCBkZWZhdWx0IGJlaGF2
aW9yIGZvciBGMSwgZXRjLiwgYnV0IG9ubHkgYWZ0ZXIga2V5ZG93bgorICAgICAgICAjIGJ1YmJs
ZXMgdXAgdG8gYm9keS4gKE90aGVyd2lzZSBhY3RpdmF0ZWQgYnJvd3NlciBtZW51cy9mdW5jdGlv
bnMKKyAgICAgICAgIyBtYXkgaW50ZXJmZXJlIHdpdGggc3Vic2VxdWVudCB0ZXN0cy4pCisgICAg
ICAgIHNlc3Npb24uZXhlY3V0ZV9zY3JpcHQoIiIiCisgICAgICAgICAgICBkb2N1bWVudC5ib2R5
LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLAorICAgICAgICAgICAgICAgICAgICAoZSkgPT4g
ZS5wcmV2ZW50RGVmYXVsdCgpKTsKKyAgICAgICAgIiIiKQorICAgIGtleV9jaGFpbi5rZXlfZG93
bihnZXRhdHRyKEtleXMsIG5hbWUpKS5wZXJmb3JtKCkKKyAgICAjIG9ubHkgaW50ZXJlc3RlZCBp
biBrZXlkb3duCisgICAgZmlyc3RfZXZlbnQgPSBnZXRfZXZlbnRzKHNlc3Npb24pWzBdCisgICAg
IyBtYWtlIGEgY29weSBzbyB3ZSBjYW4gdGhyb3cgb3V0IGlycmVsZXZhbnQga2V5cyBhbmQgY29t
cGFyZSB0byBldmVudHMKKyAgICBleHBlY3RlZCA9IGRpY3QoZXhwZWN0ZWQpCisKKyAgICBkZWwg
ZXhwZWN0ZWRbInZhbHVlIl0KKyAgICAjIGNoZWNrIGFuZCByZW1vdmUga2V5cyB0aGF0IGFyZW4n
dCBpbiBleHBlY3RlZAorICAgIGFzc2VydCBmaXJzdF9ldmVudFsidHlwZSJdID09ICJrZXlkb3du
IgorICAgIGFzc2VydCBmaXJzdF9ldmVudFsicmVwZWF0Il0gPT0gRmFsc2UKKyAgICBmaXJzdF9l
dmVudCA9IGZpbHRlcl9kaWN0KGZpcnN0X2V2ZW50LCBleHBlY3RlZCkKKyAgICBhc3NlcnQgZmly
c3RfZXZlbnQgPT0gZXhwZWN0ZWQKKyAgICAjIG9ubHkgcHJpbnRhYmxlIGNoYXJhY3RlcnMgc2hv
dWxkIGJlIHJlY29yZGVkIGluIGlucHV0IGZpZWxkCisgICAgZW50ZXJlZF9rZXlzID0gZ2V0X2tl
eXMoa2V5X3JlcG9ydGVyKQorICAgIGlmIGxlbihleHBlY3RlZFsia2V5Il0pID09IDE6CisgICAg
ICAgIGFzc2VydCBlbnRlcmVkX2tleXMgPT0gZXhwZWN0ZWRbImtleSJdCisgICAgZWxzZToKKyAg
ICAgICAgYXNzZXJ0IGxlbihlbnRlcmVkX2tleXMpID09IDAKZGlmZiAtLWdpdCBhL1dlYkRyaXZl
clRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvYWN0aW9ucy9zdXBwb3J0L19faW5p
dF9fLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9hY3Rp
b25zL3N1cHBvcnQvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLmU2OWRlMjliYjJkCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViZHJpdmVyL3Rlc3RzL2FjdGlvbnMvc3VwcG9ydC9rZXlzLnB5IGIvV2ViRHJpdmVyVGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9hY3Rpb25zL3N1cHBvcnQva2V5cy5weQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uODU1MTc5MTY2NzgKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3Rz
L2FjdGlvbnMvc3VwcG9ydC9rZXlzLnB5CkBAIC0wLDAgKzEsNzQyIEBACisjIExpY2Vuc2VkIHRv
IHRoZSBTb2Z0d2FyZSBGcmVlZG9tIENvbnNlcnZhbmN5IChTRkMpIHVuZGVyIG9uZQorIyBvciBt
b3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUK
KyMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24K
KyMgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgU0ZDIGxpY2Vuc2VzIHRoaXMg
ZmlsZQorIyB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhl
CisjICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBs
aWFuY2UKKyMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUg
TGljZW5zZSBhdAorIworIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNF
LTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRv
IGluIHdyaXRpbmcsCisjIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlz
IGRpc3RyaWJ1dGVkIG9uIGFuCisjICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBP
UiBDT05ESVRJT05TIE9GIEFOWQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAg
U2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyMgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBl
cm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworIyB1bmRlciB0aGUgTGljZW5zZS4KKworIiIiCitU
aGUgS2V5cyBpbXBsZW1lbnRhdGlvbi4KKyIiIgorCitmcm9tIGluc3BlY3QgaW1wb3J0IGdldG1l
bWJlcnMKKworCitjbGFzcyBLZXlzKG9iamVjdCk6CisgICAgIiIiCisgICAgU2V0IG9mIHNwZWNp
YWwga2V5cyBjb2Rlcy4KKworICAgIFNlZSBhbHNvIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJk
cml2ZXIvd2ViZHJpdmVyLXNwZWMuaHRtbCNoLWtleWJvYXJkLWFjdGlvbnMKKyAgICAiIiIKKwor
ICAgIE5VTEwgPSB1Ilx1ZTAwMCIKKyAgICBDQU5DRUwgPSB1Ilx1ZTAwMSIgICMgXmJyZWFrCisg
ICAgSEVMUCA9IHUiXHVlMDAyIgorICAgIEJBQ0tTUEFDRSA9IHUiXHVlMDAzIgorICAgIFRBQiA9
IHUiXHVlMDA0IgorICAgIENMRUFSID0gdSJcdWUwMDUiCisgICAgUkVUVVJOID0gdSJcdWUwMDYi
CisgICAgRU5URVIgPSB1Ilx1ZTAwNyIKKyAgICBTSElGVCA9IHUiXHVlMDA4IgorICAgIENPTlRS
T0wgPSB1Ilx1ZTAwOSIKKyAgICBBTFQgPSB1Ilx1ZTAwYSIKKyAgICBQQVVTRSA9IHUiXHVlMDBi
IgorICAgIEVTQ0FQRSA9IHUiXHVlMDBjIgorICAgIFNQQUNFID0gdSJcdWUwMGQiCisgICAgUEFH
RV9VUCA9IHUiXHVlMDBlIgorICAgIFBBR0VfRE9XTiA9IHUiXHVlMDBmIgorICAgIEVORCA9IHUi
XHVlMDEwIgorICAgIEhPTUUgPSB1Ilx1ZTAxMSIKKyAgICBMRUZUID0gdSJcdWUwMTIiCisgICAg
VVAgPSB1Ilx1ZTAxMyIKKyAgICBSSUdIVCA9IHUiXHVlMDE0IgorICAgIERPV04gPSB1Ilx1ZTAx
NSIKKyAgICBJTlNFUlQgPSB1Ilx1ZTAxNiIKKyAgICBERUxFVEUgPSB1Ilx1ZTAxNyIKKyAgICBT
RU1JQ09MT04gPSB1Ilx1ZTAxOCIKKyAgICBFUVVBTFMgPSB1Ilx1ZTAxOSIKKworICAgIE5VTVBB
RDAgPSB1Ilx1ZTAxYSIgICMgbnVtYmVyIHBhZCBrZXlzCisgICAgTlVNUEFEMSA9IHUiXHVlMDFi
IgorICAgIE5VTVBBRDIgPSB1Ilx1ZTAxYyIKKyAgICBOVU1QQUQzID0gdSJcdWUwMWQiCisgICAg
TlVNUEFENCA9IHUiXHVlMDFlIgorICAgIE5VTVBBRDUgPSB1Ilx1ZTAxZiIKKyAgICBOVU1QQUQ2
ID0gdSJcdWUwMjAiCisgICAgTlVNUEFENyA9IHUiXHVlMDIxIgorICAgIE5VTVBBRDggPSB1Ilx1
ZTAyMiIKKyAgICBOVU1QQUQ5ID0gdSJcdWUwMjMiCisgICAgTVVMVElQTFkgPSB1Ilx1ZTAyNCIK
KyAgICBBREQgPSB1Ilx1ZTAyNSIKKyAgICBTRVBBUkFUT1IgPSB1Ilx1ZTAyNiIKKyAgICBTVUJU
UkFDVCA9IHUiXHVlMDI3IgorICAgIERFQ0lNQUwgPSB1Ilx1ZTAyOCIKKyAgICBESVZJREUgPSB1
Ilx1ZTAyOSIKKworICAgIEYxID0gdSJcdWUwMzEiICAjIGZ1bmN0aW9uICBrZXlzCisgICAgRjIg
PSB1Ilx1ZTAzMiIKKyAgICBGMyA9IHUiXHVlMDMzIgorICAgIEY0ID0gdSJcdWUwMzQiCisgICAg
RjUgPSB1Ilx1ZTAzNSIKKyAgICBGNiA9IHUiXHVlMDM2IgorICAgIEY3ID0gdSJcdWUwMzciCisg
ICAgRjggPSB1Ilx1ZTAzOCIKKyAgICBGOSA9IHUiXHVlMDM5IgorICAgIEYxMCA9IHUiXHVlMDNh
IgorICAgIEYxMSA9IHUiXHVlMDNiIgorICAgIEYxMiA9IHUiXHVlMDNjIgorCisgICAgTUVUQSA9
IHUiXHVlMDNkIgorCisgICAgIyBNb3JlIGtleXMgZnJvbSB3ZWJkcml2ZXIgc3BlYworICAgIFpF
TktBS1VIQU5LQUtVID0gdSJcdUUwNDAiCisgICAgUl9TSElGVCA9IHUiXHVFMDUwIgorICAgIFJf
Q09OVFJPTCA9IHUiXHVFMDUxIgorICAgIFJfQUxUID0gdSJcdUUwNTIiCisgICAgUl9NRVRBID0g
dSJcdUUwNTMiCisgICAgUl9QQUdFVVAgPSB1Ilx1RTA1NCIKKyAgICBSX1BBR0VET1dOID0gdSJc
dUUwNTUiCisgICAgUl9FTkQgPSB1Ilx1RTA1NiIKKyAgICBSX0hPTUUgPSB1Ilx1RTA1NyIKKyAg
ICBSX0FSUk9XTEVGVCA9IHUiXHVFMDU4IgorICAgIFJfQVJST1dVUCA9IHUiXHVFMDU5IgorICAg
IFJfQVJST1dSSUdIVCA9IHUiXHVFMDVBIgorICAgIFJfQVJST1dET1dOID0gdSJcdUUwNUIiCisg
ICAgUl9JTlNFUlQgPSB1Ilx1RTA1QyIKKyAgICBSX0RFTEVURSA9IHUiXHVFMDVEIgorCisKK0FM
TF9LRVlTID0gZ2V0bWVtYmVycyhLZXlzLCBsYW1iZGEgeDogdHlwZSh4KSA9PSB1bmljb2RlKQor
CitBTExfRVZFTlRTID0geworICAgICJBREQiOiB7CisgICAgICAgICJjb2RlIjogIiIsCisgICAg
ICAgICJjdHJsIjogRmFsc2UsCisgICAgICAgICJrZXkiOiAiKyIsCisgICAgICAgICJsb2NhdGlv
biI6IDMsCisgICAgICAgICJtZXRhIjogRmFsc2UsCisgICAgICAgICJzaGlmdCI6IEZhbHNlLAor
ICAgICAgICAidmFsdWUiOiB1Ilx1ZTAyNSIsCisgICAgfSwKKyAgICAiQUxUIjogeworICAgICAg
ICAiY29kZSI6ICJBbHRMZWZ0IiwKKyAgICAgICAgImN0cmwiOiBGYWxzZSwKKyAgICAgICAgImtl
eSI6ICJBbHQiLAorICAgICAgICAibG9jYXRpb24iOiAxLAorICAgICAgICAibWV0YSI6IEZhbHNl
LAorICAgICAgICAic2hpZnQiOiBGYWxzZSwKKyAgICAgICAgInZhbHVlIjogdSJcdWUwMGEiLAor
ICAgIH0sCisgICAgIkJBQ0tTUEFDRSI6IHsKKyAgICAgICAgImNvZGUiOiAiQmFja3NwYWNlIiwK
KyAgICAgICAgImN0cmwiOiBGYWxzZSwKKyAgICAgICAgImtleSI6ICJCYWNrc3BhY2UiLAorICAg
ICAgICAibG9jYXRpb24iOiAwLAorICAgICAgICAibWV0YSI6IEZhbHNlLAorICAgICAgICAic2hp
ZnQiOiBGYWxzZSwKKyAgICAgICAgInZhbHVlIjogdSJcdWUwMDMiLAorICAgIH0sCisgICAgIkNB
TkNFTCI6IHsKKyAgICAgICAgImNvZGUiOiAiIiwKKyAgICAgICAgImN0cmwiOiBGYWxzZSwKKyAg
ICAgICAgImtleSI6ICJDYW5jZWwiLAorICAgICAgICAibG9jYXRpb24iOiAwLAorICAgICAgICAi
bWV0YSI6IEZhbHNlLAorICAgICAgICAic2hpZnQiOiBGYWxzZSwKKyAgICAgICAgInZhbHVlIjog
dSJcdWUwMDEiLAorICAgIH0sCisgICAgIkNMRUFSIjogeworICAgICAgICAiY29kZSI6ICIiLAor
ICAgICAgICAiY3RybCI6IEZhbHNlLAorICAgICAgICAia2V5IjogIkNsZWFyIiwKKyAgICAgICAg
ImxvY2F0aW9uIjogMCwKKyAgICAgICAgIm1ldGEiOiBGYWxzZSwKKyAgICAgICAgInNoaWZ0Ijog
RmFsc2UsCisgICAgICAgICJ2YWx1ZSI6IHUiXHVlMDA1IiwKKyAgICB9LAorICAgICJDT05UUk9M
IjogeworICAgICAgICAiY29kZSI6ICJDb250cm9sTGVmdCIsCisgICAgICAgICJjdHJsIjogVHJ1
ZSwKKyAgICAgICAgImtleSI6ICJDb250cm9sIiwKKyAgICAgICAgImxvY2F0aW9uIjogMSwKKyAg
ICAgICAgIm1ldGEiOiBGYWxzZSwKKyAgICAgICAgInNoaWZ0IjogRmFsc2UsCisgICAgICAgICJ2
YWx1ZSI6IHUiXHVlMDA5IiwKKyAgICB9LAorICAgICJERUNJTUFMIjogeworICAgICAgICAiY29k
ZSI6ICJOdW1wYWREZWNpbWFsIiwKKyAgICAgICAgImN0cmwiOiBGYWxzZSwKKyAgICAgICAgImtl
eSI6ICIuIiwKKyAgICAgICAgImxvY2F0aW9uIjogMywKKyAgICAgICAgIm1ldGEiOiBGYWxzZSwK
KyAgICAgICAgInNoaWZ0IjogRmFsc2UsCisgICAgICAgICJ2YWx1ZSI6IHUiXHVlMDI4IiwKKyAg
ICB9LAorICAgICJERUxFVEUiOiB7CisgICAgICAgICJjb2RlIjogIkRlbGV0ZSIsCisgICAgICAg
ICJjdHJsIjogRmFsc2UsCisgICAgICAgICJrZXkiOiAiRGVsZXRlIiwKKyAgICAgICAgImxvY2F0
aW9uIjogMCwKKyAgICAgICAgIm1ldGEiOiBGYWxzZSwKKyAgICAgICAgInNoaWZ0IjogRmFsc2Us
CisgICAgICAgICJ2YWx1ZSI6IHUiXHVlMDE3IiwKKyAgICB9LAorICAgICJESVZJREUiOiB7Cisg
ICAgICAgICJjb2RlIjogIk51bXBhZERpdmlkZSIsCisgICAgICAgICJjdHJsIjogRmFsc2UsCisg
ICAgICAgICJrZXkiOiAiLyIsCisgICAgICAgICJsb2NhdGlvbiI6IDMsCisgICAgICAgICJtZXRh
IjogRmFsc2UsCisgICAgICAgICJzaGlmdCI6IEZhbHNlLAorICAgICAgICAidmFsdWUiOiB1Ilx1
ZTAyOSIsCisgICAgfSwKKyAgICAiRE9XTiI6IHsKKyAgICAgICAgImNvZGUiOiAiQXJyb3dEb3du
IiwKKyAgICAgICAgImN0cmwiOiBGYWxzZSwKKyAgICAgICAgImtleSI6ICJBcnJvd0Rvd24iLAor
ICAgICAgICAibG9jYXRpb24iOiAwLAorICAgICAgICAibWV0YSI6IEZhbHNlLAorICAgICAgICAi
c2hpZnQiOiBGYWxzZSwKKyAgICAgICAgInZhbHVlIjogdSJcdWUwMTUiLAorICAgIH0sCisgICAg
IkVORCI6IHsKKyAgICAgICAgImNvZGUiOiAiRW5kIiwKKyAgICAgICAgImN0cmwiOiBGYWxzZSwK
KyAgICAgICAgImtleSI6ICJFbmQiLAorICAgICAgICAibG9jYXRpb24iOiAwLAorICAgICAgICAi
bWV0YSI6IEZhbHNlLAorICAgICAgICAic2hpZnQiOiBGYWxzZSwKKyAgICAgICAgInZhbHVlIjog
dSJcdWUwMTAiLAorICAgIH0sCisgICAgIkVOVEVSIjogeworICAgICAgICAiY29kZSI6ICJOdW1w
YWRFbnRlciIsCisgICAgICAgICJjdHJsIjogRmFsc2UsCisgICAgICAgICJrZXkiOiAiRW50ZXIi
LAorICAgICAgICAibG9jYXRpb24iOiAxLAorICAgICAgICAibWV0YSI6IEZhbHNlLAorICAgICAg
ICAic2hpZnQiOiBGYWxzZSwKKyAgICAgICAgInZhbHVlIjogdSJcdWUwMDciLAorICAgIH0sCisg
ICAgIkVRVUFMUyI6IHsKKyAgICAgICAgImNvZGUiOiAiIiwKKyAgICAgICAgImN0cmwiOiBGYWxz
ZSwKKyAgICAgICAgImtleSI6ICI9IiwKKyAgICAgICAgImxvY2F0aW9uIjogMCwKKyAgICAgICAg
Im1ldGEiOiBGYWxzZSwKKyAgICAgICAgInNoaWZ0IjogRmFsc2UsCisgICAgICAgICJ2YWx1ZSI6
IHUiXHVlMDE5IiwKKyAgICB9LAorICAgICJFU0NBUEUiOiB7CisgICAgICAgICJjb2RlIjogIkVz
Y2FwZSIsCisgICAgICAgICJjdHJsIjogRmFsc2UsCisgICAgICAgICJrZXkiOiAiRXNjYXBlIiwK
KyAgICAgICAgImxvY2F0aW9uIjogMCwKKyAgICAgICAgIm1ldGEiOiBGYWxzZSwKKyAgICAgICAg
InNoaWZ0IjogRmFsc2UsCisgICAgICAgICJ2YWx1ZSI6IHUiXHVlMDBjIiwKKyAgICB9LAorICAg
ICJGMSI6IHsKKyAgICAgICAgImNvZGUiOiAiRjEiLAorICAgICAgICAiY3RybCI6IEZhbHNlLAor
ICAgICAgICAia2V5IjogIkYxIiwKKyAgICAgICAgImxvY2F0aW9uIjogMCwKKyAgICAgICAgIm1l
dGEiOiBGYWxzZSwKKyAgICAgICAgInNoaWZ0IjogRmFsc2UsCisgICAgICAgICJ2YWx1ZSI6IHUi
XHVlMDMxIiwKKyAgICB9LAorICAgICJGMTAiOiB7CisgICAgICAgICJjb2RlIjogIkYxMCIsCisg
ICAgICAgICJjdHJsIjogRmFsc2UsCisgICAgICAgICJrZXkiOiAiRjEwIiwKKyAgICAgICAgImxv
Y2F0aW9uIjogMCwKKyAgICAgICAgIm1ldGEiOiBGYWxzZSwKKyAgICAgICAgInNoaWZ0IjogRmFs
c2UsCisgICAgICAgICJ2YWx1ZSI6IHUiXHVlMDNhIiwKKyAgICB9LAorICAgICJGMTEiOiB7Cisg
ICAgICAgICJjb2RlIjogIkYxMSIsCisgICAgICAgICJjdHJsIjogRmFsc2UsCisgICAgICAgICJr
ZXkiOiAiRjExIiwKKyAgICAgICAgImxvY2F0aW9uIjogMCwKKyAgICAgICAgIm1ldGEiOiBGYWxz
ZSwKKyAgICAgICAgInNoaWZ0IjogRmFsc2UsCisgICAgICAgICJ2YWx1ZSI6IHUiXHVlMDNiIiwK
KyAgICB9LAorICAgICJGMTIiOiB7CisgICAgICAgICJjb2RlIjogIkYxMiIsCisgICAgICAgICJj
dHJsIjogRmFsc2UsCisgICAgICAgICJrZXkiOiAiRjEyIiwKKyAgICAgICAgImxvY2F0aW9uIjog
MCwKKyAgICAgICAgIm1ldGEiOiBGYWxzZSwKKyAgICAgICAgInNoaWZ0IjogRmFsc2UsCisgICAg
ICAgICJ2YWx1ZSI6IHUiXHVlMDNjIiwKKyAgICB9LAorICAgICJGMiI6IHsKKyAgICAgICAgImNv
ZGUiOiAiRjIiLAorICAgICAgICAiY3RybCI6IEZhbHNlLAorICAgICAgICAia2V5IjogIkYyIiwK
KyAgICAgICAgImxvY2F0aW9uIjogMCwKKyAgICAgICAgIm1ldGEiOiBGYWxzZSwKKyAgICAgICAg
InNoaWZ0IjogRmFsc2UsCisgICAgICAgICJ2YWx1ZSI6IHUiXHVlMDMyIiwKKyAgICB9LAorICAg
ICJGMyI6IHsKKyAgICAgICAgImNvZGUiOiAiRjMiLAorICAgICAgICAiY3RybCI6IEZhbHNlLAor
ICAgICAgICAia2V5IjogIkYzIiwKKyAgICAgICAgImxvY2F0aW9uIjogMCwKKyAgICAgICAgIm1l
dGEiOiBGYWxzZSwKKyAgICAgICAgInNoaWZ0IjogRmFsc2UsCisgICAgICAgICJ2YWx1ZSI6IHUi
XHVlMDMzIiwKKyAgICB9LAorICAgICJGNCI6IHsKKyAgICAgICAgImNvZGUiOiAiRjQiLAorICAg
ICAgICAiY3RybCI6IEZhbHNlLAorICAgICAgICAia2V5IjogIkY0IiwKKyAgICAgICAgImxvY2F0
aW9uIjogMCwKKyAgICAgICAgIm1ldGEiOiBGYWxzZSwKKyAgICAgICAgInNoaWZ0IjogRmFsc2Us
CisgICAgICAgICJ2YWx1ZSI6IHUiXHVlMDM0IiwKKyAgICB9LAorICAgICJGNSI6IHsKKyAgICAg
ICAgImNvZGUiOiAiRjUiLAorICAgICAgICAiY3RybCI6IEZhbHNlLAorICAgICAgICAia2V5Ijog
IkY1IiwKKyAgICAgICAgImxvY2F0aW9uIjogMCwKKyAgICAgICAgIm1ldGEiOiBGYWxzZSwKKyAg
ICAgICAgInNoaWZ0IjogRmFsc2UsCisgICAgICAgICJ2YWx1ZSI6IHUiXHVlMDM1IiwKKyAgICB9
LAorICAgICJGNiI6IHsKKyAgICAgICAgImNvZGUiOiAiRjYiLAorICAgICAgICAiY3RybCI6IEZh
bHNlLAorICAgICAgICAia2V5IjogIkY2IiwKKyAgICAgICAgImxvY2F0aW9uIjogMCwKKyAgICAg
ICAgIm1ldGEiOiBGYWxzZSwKKyAgICAgICAgInNoaWZ0IjogRmFsc2UsCisgICAgICAgICJ2YWx1
ZSI6IHUiXHVlMDM2IiwKKyAgICB9LAorICAgICJGNyI6IHsKKyAgICAgICAgImNvZGUiOiAiRjci
LAorICAgICAgICAiY3RybCI6IEZhbHNlLAorICAgICAgICAia2V5IjogIkY3IiwKKyAgICAgICAg
ImxvY2F0aW9uIjogMCwKKyAgICAgICAgIm1ldGEiOiBGYWxzZSwKKyAgICAgICAgInNoaWZ0Ijog
RmFsc2UsCisgICAgICAgICJ2YWx1ZSI6IHUiXHVlMDM3IiwKKyAgICB9LAorICAgICJGOCI6IHsK
KyAgICAgICAgImNvZGUiOiAiRjgiLAorICAgICAgICAiY3RybCI6IEZhbHNlLAorICAgICAgICAi
a2V5IjogIkY4IiwKKyAgICAgICAgImxvY2F0aW9uIjogMCwKKyAgICAgICAgIm1ldGEiOiBGYWxz
ZSwKKyAgICAgICAgInNoaWZ0IjogRmFsc2UsCisgICAgICAgICJ2YWx1ZSI6IHUiXHVlMDM4IiwK
KyAgICB9LAorICAgICJGOSI6IHsKKyAgICAgICAgImNvZGUiOiAiRjkiLAorICAgICAgICAiY3Ry
bCI6IEZhbHNlLAorICAgICAgICAia2V5IjogIkY5IiwKKyAgICAgICAgImxvY2F0aW9uIjogMCwK
KyAgICAgICAgIm1ldGEiOiBGYWxzZSwKKyAgICAgICAgInNoaWZ0IjogRmFsc2UsCisgICAgICAg
ICJ2YWx1ZSI6IHUiXHVlMDM5IiwKKyAgICB9LAorICAgICJIRUxQIjogeworICAgICAgICAiY29k
ZSI6ICJIZWxwIiwKKyAgICAgICAgImN0cmwiOiBGYWxzZSwKKyAgICAgICAgImtleSI6ICJIZWxw
IiwKKyAgICAgICAgImxvY2F0aW9uIjogMCwKKyAgICAgICAgIm1ldGEiOiBGYWxzZSwKKyAgICAg
ICAgInNoaWZ0IjogRmFsc2UsCisgICAgICAgICJ2YWx1ZSI6IHUiXHVlMDAyIiwKKyAgICB9LAor
ICAgICJIT01FIjogeworICAgICAgICAiY29kZSI6ICJIb21lIiwKKyAgICAgICAgImN0cmwiOiBG
YWxzZSwKKyAgICAgICAgImtleSI6ICJIb21lIiwKKyAgICAgICAgImxvY2F0aW9uIjogMCwKKyAg
ICAgICAgIm1ldGEiOiBGYWxzZSwKKyAgICAgICAgInNoaWZ0IjogRmFsc2UsCisgICAgICAgICJ2
YWx1ZSI6IHUiXHVlMDExIiwKKyAgICB9LAorICAgICJJTlNFUlQiOiB7CisgICAgICAgICJjb2Rl
IjogIkluc2VydCIsCisgICAgICAgICJjdHJsIjogRmFsc2UsCisgICAgICAgICJrZXkiOiAiSW5z
ZXJ0IiwKKyAgICAgICAgImxvY2F0aW9uIjogMCwKKyAgICAgICAgIm1ldGEiOiBGYWxzZSwKKyAg
ICAgICAgInNoaWZ0IjogRmFsc2UsCisgICAgICAgICJ2YWx1ZSI6IHUiXHVlMDE2IiwKKyAgICB9
LAorICAgICJMRUZUIjogeworICAgICAgICAiY29kZSI6ICJBcnJvd0xlZnQiLAorICAgICAgICAi
Y3RybCI6IEZhbHNlLAorICAgICAgICAia2V5IjogIkFycm93TGVmdCIsCisgICAgICAgICJsb2Nh
dGlvbiI6IDAsCisgICAgICAgICJtZXRhIjogRmFsc2UsCisgICAgICAgICJzaGlmdCI6IEZhbHNl
LAorICAgICAgICAidmFsdWUiOiB1Ilx1ZTAxMiIsCisgICAgfSwKKyAgICAiTUVUQSI6IHsKKyAg
ICAgICAgImNvZGUiOiAiT1NMZWZ0IiwKKyAgICAgICAgImN0cmwiOiBGYWxzZSwKKyAgICAgICAg
ImtleSI6ICJNZXRhIiwKKyAgICAgICAgImxvY2F0aW9uIjogMSwKKyAgICAgICAgIm1ldGEiOiBU
cnVlLAorICAgICAgICAic2hpZnQiOiBGYWxzZSwKKyAgICAgICAgInZhbHVlIjogdSJcdWUwM2Qi
LAorICAgIH0sCisgICAgIk1VTFRJUExZIjogeworICAgICAgICAiY29kZSI6ICJOdW1wYWRNdWx0
aXBseSIsCisgICAgICAgICJjdHJsIjogRmFsc2UsCisgICAgICAgICJrZXkiOiAiKiIsCisgICAg
ICAgICJsb2NhdGlvbiI6IDMsCisgICAgICAgICJtZXRhIjogRmFsc2UsCisgICAgICAgICJzaGlm
dCI6IEZhbHNlLAorICAgICAgICAidmFsdWUiOiB1Ilx1ZTAyNCIsCisgICAgfSwKKyAgICAiTlVM
TCI6IHsKKyAgICAgICAgImNvZGUiOiAiIiwKKyAgICAgICAgImN0cmwiOiBGYWxzZSwKKyAgICAg
ICAgImtleSI6ICJVbmlkZW50aWZpZWQiLAorICAgICAgICAibG9jYXRpb24iOiAwLAorICAgICAg
ICAibWV0YSI6IEZhbHNlLAorICAgICAgICAic2hpZnQiOiBGYWxzZSwKKyAgICAgICAgInZhbHVl
IjogdSJcdWUwMDAiLAorICAgIH0sCisgICAgIk5VTVBBRDAiOiB7CisgICAgICAgICJjb2RlIjog
Ik51bXBhZDAiLAorICAgICAgICAiY3RybCI6IEZhbHNlLAorICAgICAgICAia2V5IjogIjAiLAor
ICAgICAgICAibG9jYXRpb24iOiAzLAorICAgICAgICAibWV0YSI6IEZhbHNlLAorICAgICAgICAi
c2hpZnQiOiBGYWxzZSwKKyAgICAgICAgInZhbHVlIjogdSJcdWUwMWEiLAorICAgIH0sCisgICAg
Ik5VTVBBRDEiOiB7CisgICAgICAgICJjb2RlIjogIk51bXBhZDEiLAorICAgICAgICAiY3RybCI6
IEZhbHNlLAorICAgICAgICAia2V5IjogIjEiLAorICAgICAgICAibG9jYXRpb24iOiAzLAorICAg
ICAgICAibWV0YSI6IEZhbHNlLAorICAgICAgICAic2hpZnQiOiBGYWxzZSwKKyAgICAgICAgInZh
bHVlIjogdSJcdWUwMWIiLAorICAgIH0sCisgICAgIk5VTVBBRDIiOiB7CisgICAgICAgICJjb2Rl
IjogIk51bXBhZDIiLAorICAgICAgICAiY3RybCI6IEZhbHNlLAorICAgICAgICAia2V5IjogIjIi
LAorICAgICAgICAibG9jYXRpb24iOiAzLAorICAgICAgICAibWV0YSI6IEZhbHNlLAorICAgICAg
ICAic2hpZnQiOiBGYWxzZSwKKyAgICAgICAgInZhbHVlIjogdSJcdWUwMWMiLAorICAgIH0sCisg
ICAgIk5VTVBBRDMiOiB7CisgICAgICAgICJjb2RlIjogIk51bXBhZDMiLAorICAgICAgICAiY3Ry
bCI6IEZhbHNlLAorICAgICAgICAia2V5IjogIjMiLAorICAgICAgICAibG9jYXRpb24iOiAzLAor
ICAgICAgICAibWV0YSI6IEZhbHNlLAorICAgICAgICAic2hpZnQiOiBGYWxzZSwKKyAgICAgICAg
InZhbHVlIjogdSJcdWUwMWQiLAorICAgIH0sCisgICAgIk5VTVBBRDQiOiB7CisgICAgICAgICJj
b2RlIjogIlBhZ2VEb3duIiwKKyAgICAgICAgImN0cmwiOiBGYWxzZSwKKyAgICAgICAgImtleSI6
ICI0IiwKKyAgICAgICAgImxvY2F0aW9uIjogMywKKyAgICAgICAgIm1ldGEiOiBGYWxzZSwKKyAg
ICAgICAgInNoaWZ0IjogRmFsc2UsCisgICAgICAgICJ2YWx1ZSI6IHUiXHVlMDFlIiwKKyAgICB9
LAorICAgICJOVU1QQUQ1IjogeworICAgICAgICAiY29kZSI6ICJQYWdlVXAiLAorICAgICAgICAi
Y3RybCI6IEZhbHNlLAorICAgICAgICAia2V5IjogIjUiLAorICAgICAgICAibG9jYXRpb24iOiAz
LAorICAgICAgICAibWV0YSI6IEZhbHNlLAorICAgICAgICAic2hpZnQiOiBGYWxzZSwKKyAgICAg
ICAgInZhbHVlIjogdSJcdWUwMWYiLAorICAgIH0sCisgICAgIk5VTVBBRDYiOiB7CisgICAgICAg
ICJjb2RlIjogIk51bXBhZDYiLAorICAgICAgICAiY3RybCI6IEZhbHNlLAorICAgICAgICAia2V5
IjogIjYiLAorICAgICAgICAibG9jYXRpb24iOiAzLAorICAgICAgICAibWV0YSI6IEZhbHNlLAor
ICAgICAgICAic2hpZnQiOiBGYWxzZSwKKyAgICAgICAgInZhbHVlIjogdSJcdWUwMjAiLAorICAg
IH0sCisgICAgIk5VTVBBRDciOiB7CisgICAgICAgICJjb2RlIjogIk51bXBhZDciLAorICAgICAg
ICAiY3RybCI6IEZhbHNlLAorICAgICAgICAia2V5IjogIjciLAorICAgICAgICAibG9jYXRpb24i
OiAzLAorICAgICAgICAibWV0YSI6IEZhbHNlLAorICAgICAgICAic2hpZnQiOiBGYWxzZSwKKyAg
ICAgICAgInZhbHVlIjogdSJcdWUwMjEiLAorICAgIH0sCisgICAgIk5VTVBBRDgiOiB7CisgICAg
ICAgICJjb2RlIjogIk51bXBhZDgiLAorICAgICAgICAiY3RybCI6IEZhbHNlLAorICAgICAgICAi
a2V5IjogIjgiLAorICAgICAgICAibG9jYXRpb24iOiAzLAorICAgICAgICAibWV0YSI6IEZhbHNl
LAorICAgICAgICAic2hpZnQiOiBGYWxzZSwKKyAgICAgICAgInZhbHVlIjogdSJcdWUwMjIiLAor
ICAgIH0sCisgICAgIk5VTVBBRDkiOiB7CisgICAgICAgICJjb2RlIjogIk51bXBhZDkiLAorICAg
ICAgICAiY3RybCI6IEZhbHNlLAorICAgICAgICAia2V5IjogIjkiLAorICAgICAgICAibG9jYXRp
b24iOiAzLAorICAgICAgICAibWV0YSI6IEZhbHNlLAorICAgICAgICAic2hpZnQiOiBGYWxzZSwK
KyAgICAgICAgInZhbHVlIjogdSJcdWUwMjMiLAorICAgIH0sCisgICAgIlBBR0VfRE9XTiI6IHsK
KyAgICAgICAgImNvZGUiOiAiIiwKKyAgICAgICAgImN0cmwiOiBGYWxzZSwKKyAgICAgICAgImtl
eSI6ICJQYWdlRG93biIsCisgICAgICAgICJsb2NhdGlvbiI6IDAsCisgICAgICAgICJtZXRhIjog
RmFsc2UsCisgICAgICAgICJzaGlmdCI6IEZhbHNlLAorICAgICAgICAidmFsdWUiOiB1Ilx1ZTAw
ZiIsCisgICAgfSwKKyAgICAiUEFHRV9VUCI6IHsKKyAgICAgICAgImNvZGUiOiAiIiwKKyAgICAg
ICAgImN0cmwiOiBGYWxzZSwKKyAgICAgICAgImtleSI6ICJQYWdlVXAiLAorICAgICAgICAibG9j
YXRpb24iOiAwLAorICAgICAgICAibWV0YSI6IEZhbHNlLAorICAgICAgICAic2hpZnQiOiBGYWxz
ZSwKKyAgICAgICAgInZhbHVlIjogdSJcdWUwMGUiLAorICAgIH0sCisgICAgIlBBVVNFIjogewor
ICAgICAgICAiY29kZSI6ICIiLAorICAgICAgICAiY3RybCI6IEZhbHNlLAorICAgICAgICAia2V5
IjogIlBhdXNlIiwKKyAgICAgICAgImxvY2F0aW9uIjogMCwKKyAgICAgICAgIm1ldGEiOiBGYWxz
ZSwKKyAgICAgICAgInNoaWZ0IjogRmFsc2UsCisgICAgICAgICJ2YWx1ZSI6IHUiXHVlMDBiIiwK
KyAgICB9LAorICAgICJSRVRVUk4iOiB7CisgICAgICAgICJjb2RlIjogIkVudGVyIiwKKyAgICAg
ICAgImN0cmwiOiBGYWxzZSwKKyAgICAgICAgImtleSI6ICJFbnRlciIsCisgICAgICAgICJsb2Nh
dGlvbiI6IDAsCisgICAgICAgICJtZXRhIjogRmFsc2UsCisgICAgICAgICJzaGlmdCI6IEZhbHNl
LAorICAgICAgICAidmFsdWUiOiB1Ilx1ZTAwNiIsCisgICAgfSwKKyAgICAiUklHSFQiOiB7Cisg
ICAgICAgICJjb2RlIjogIkFycm93UmlnaHQiLAorICAgICAgICAiY3RybCI6IEZhbHNlLAorICAg
ICAgICAia2V5IjogIkFycm93UmlnaHQiLAorICAgICAgICAibG9jYXRpb24iOiAwLAorICAgICAg
ICAibWV0YSI6IEZhbHNlLAorICAgICAgICAic2hpZnQiOiBGYWxzZSwKKyAgICAgICAgInZhbHVl
IjogdSJcdWUwMTQiLAorICAgIH0sCisgICAgIlJfQUxUIjogeworICAgICAgICAiY29kZSI6ICJB
bHRSaWdodCIsCisgICAgICAgICJjdHJsIjogRmFsc2UsCisgICAgICAgICJrZXkiOiAiQWx0IiwK
KyAgICAgICAgImxvY2F0aW9uIjogMiwKKyAgICAgICAgIm1ldGEiOiBGYWxzZSwKKyAgICAgICAg
InNoaWZ0IjogRmFsc2UsCisgICAgICAgICJ2YWx1ZSI6IHUiXHVlMDUyIiwKKyAgICB9LAorICAg
ICJSX0FSUk9XRE9XTiI6IHsKKyAgICAgICAgImNvZGUiOiAiTnVtcGFkMiIsCisgICAgICAgICJj
dHJsIjogRmFsc2UsCisgICAgICAgICJrZXkiOiAiQXJyb3dEb3duIiwKKyAgICAgICAgImxvY2F0
aW9uIjogMywKKyAgICAgICAgIm1ldGEiOiBGYWxzZSwKKyAgICAgICAgInNoaWZ0IjogRmFsc2Us
CisgICAgICAgICJ2YWx1ZSI6IHUiXHVlMDViIiwKKyAgICB9LAorICAgICJSX0FSUk9XTEVGVCI6
IHsKKyAgICAgICAgImNvZGUiOiAiTnVtcGFkNCIsCisgICAgICAgICJjdHJsIjogRmFsc2UsCisg
ICAgICAgICJrZXkiOiAiQXJyb3dMZWZ0IiwKKyAgICAgICAgImxvY2F0aW9uIjogMywKKyAgICAg
ICAgIm1ldGEiOiBGYWxzZSwKKyAgICAgICAgInNoaWZ0IjogRmFsc2UsCisgICAgICAgICJ2YWx1
ZSI6IHUiXHVlMDU4IiwKKyAgICB9LAorICAgICJSX0FSUk9XUklHSFQiOiB7CisgICAgICAgICJj
b2RlIjogIk51bXBhZDYiLAorICAgICAgICAiY3RybCI6IEZhbHNlLAorICAgICAgICAia2V5Ijog
IkFycm93UmlnaHQiLAorICAgICAgICAibG9jYXRpb24iOiAzLAorICAgICAgICAibWV0YSI6IEZh
bHNlLAorICAgICAgICAic2hpZnQiOiBGYWxzZSwKKyAgICAgICAgInZhbHVlIjogdSJcdWUwNWEi
LAorICAgIH0sCisgICAgIlJfQVJST1dVUCI6IHsKKyAgICAgICAgImNvZGUiOiAiTnVtcGFkOCIs
CisgICAgICAgICJjdHJsIjogRmFsc2UsCisgICAgICAgICJrZXkiOiAiQXJyb3dVcCIsCisgICAg
ICAgICJsb2NhdGlvbiI6IDMsCisgICAgICAgICJtZXRhIjogRmFsc2UsCisgICAgICAgICJzaGlm
dCI6IEZhbHNlLAorICAgICAgICAidmFsdWUiOiB1Ilx1ZTA1OSIsCisgICAgfSwKKyAgICAiUl9D
T05UUk9MIjogeworICAgICAgICAiY29kZSI6ICJDb250cm9sUmlnaHQiLAorICAgICAgICAiY3Ry
bCI6IFRydWUsCisgICAgICAgICJrZXkiOiAiQ29udHJvbCIsCisgICAgICAgICJsb2NhdGlvbiI6
IDIsCisgICAgICAgICJtZXRhIjogRmFsc2UsCisgICAgICAgICJzaGlmdCI6IEZhbHNlLAorICAg
ICAgICAidmFsdWUiOiB1Ilx1ZTA1MSIsCisgICAgfSwKKyAgICAiUl9ERUxFVEUiOiB7CisgICAg
ICAgICJjb2RlIjogIk51bXBhZERlY2ltYWwiLAorICAgICAgICAiY3RybCI6IEZhbHNlLAorICAg
ICAgICAia2V5IjogIkRlbGV0ZSIsCisgICAgICAgICJsb2NhdGlvbiI6IDMsCisgICAgICAgICJt
ZXRhIjogRmFsc2UsCisgICAgICAgICJzaGlmdCI6IEZhbHNlLAorICAgICAgICAidmFsdWUiOiB1
Ilx1ZTA1ZCIsCisgICAgfSwKKyAgICAiUl9FTkQiOiB7CisgICAgICAgICJjb2RlIjogIk51bXBh
ZDEiLAorICAgICAgICAiY3RybCI6IEZhbHNlLAorICAgICAgICAia2V5IjogIkVuZCIsCisgICAg
ICAgICJsb2NhdGlvbiI6IDMsCisgICAgICAgICJtZXRhIjogRmFsc2UsCisgICAgICAgICJzaGlm
dCI6IEZhbHNlLAorICAgICAgICAidmFsdWUiOiB1Ilx1ZTA1NiIsCisgICAgfSwKKyAgICAiUl9I
T01FIjogeworICAgICAgICAiY29kZSI6ICJOdW1wYWQ3IiwKKyAgICAgICAgImN0cmwiOiBGYWxz
ZSwKKyAgICAgICAgImtleSI6ICJIb21lIiwKKyAgICAgICAgImxvY2F0aW9uIjogMywKKyAgICAg
ICAgIm1ldGEiOiBGYWxzZSwKKyAgICAgICAgInNoaWZ0IjogRmFsc2UsCisgICAgICAgICJ2YWx1
ZSI6IHUiXHVlMDU3IiwKKyAgICB9LAorICAgICJSX0lOU0VSVCI6IHsKKyAgICAgICAgImNvZGUi
OiAiTnVtcGFkMCIsCisgICAgICAgICJjdHJsIjogRmFsc2UsCisgICAgICAgICJrZXkiOiAiSW5z
ZXJ0IiwKKyAgICAgICAgImxvY2F0aW9uIjogMywKKyAgICAgICAgIm1ldGEiOiBGYWxzZSwKKyAg
ICAgICAgInNoaWZ0IjogRmFsc2UsCisgICAgICAgICJ2YWx1ZSI6IHUiXHVlMDVjIiwKKyAgICB9
LAorICAgICJSX01FVEEiOiB7CisgICAgICAgICJjb2RlIjogIk9TUmlnaHQiLAorICAgICAgICAi
Y3RybCI6IEZhbHNlLAorICAgICAgICAia2V5IjogIk1ldGEiLAorICAgICAgICAibG9jYXRpb24i
OiAyLAorICAgICAgICAibWV0YSI6IFRydWUsCisgICAgICAgICJzaGlmdCI6IEZhbHNlLAorICAg
ICAgICAidmFsdWUiOiB1Ilx1ZTA1MyIsCisgICAgfSwKKyAgICAiUl9QQUdFRE9XTiI6IHsKKyAg
ICAgICAgImNvZGUiOiAiTnVtcGFkMyIsCisgICAgICAgICJjdHJsIjogRmFsc2UsCisgICAgICAg
ICJrZXkiOiAiUGFnZURvd24iLAorICAgICAgICAibG9jYXRpb24iOiAzLAorICAgICAgICAibWV0
YSI6IEZhbHNlLAorICAgICAgICAic2hpZnQiOiBGYWxzZSwKKyAgICAgICAgInZhbHVlIjogdSJc
dWUwNTUiLAorICAgIH0sCisgICAgIlJfUEFHRVVQIjogeworICAgICAgICAiY29kZSI6ICJOdW1w
YWQ5IiwKKyAgICAgICAgImN0cmwiOiBGYWxzZSwKKyAgICAgICAgImtleSI6ICJQYWdlVXAiLAor
ICAgICAgICAibG9jYXRpb24iOiAzLAorICAgICAgICAibWV0YSI6IEZhbHNlLAorICAgICAgICAi
c2hpZnQiOiBGYWxzZSwKKyAgICAgICAgInZhbHVlIjogdSJcdWUwNTQiLAorICAgIH0sCisgICAg
IlJfU0hJRlQiOiB7CisgICAgICAgICJjb2RlIjogIlNoaWZ0UmlnaHQiLAorICAgICAgICAiY3Ry
bCI6IEZhbHNlLAorICAgICAgICAia2V5IjogIlNoaWZ0IiwKKyAgICAgICAgImxvY2F0aW9uIjog
MiwKKyAgICAgICAgIm1ldGEiOiBGYWxzZSwKKyAgICAgICAgInNoaWZ0IjogVHJ1ZSwKKyAgICAg
ICAgInZhbHVlIjogdSJcdWUwNTAiLAorICAgIH0sCisgICAgIlNFTUlDT0xPTiI6IHsKKyAgICAg
ICAgImNvZGUiOiAiIiwKKyAgICAgICAgImN0cmwiOiBGYWxzZSwKKyAgICAgICAgImtleSI6ICI7
IiwKKyAgICAgICAgImxvY2F0aW9uIjogMCwKKyAgICAgICAgIm1ldGEiOiBGYWxzZSwKKyAgICAg
ICAgInNoaWZ0IjogRmFsc2UsCisgICAgICAgICJ2YWx1ZSI6IHUiXHVlMDE4IiwKKyAgICB9LAor
ICAgICJTRVBBUkFUT1IiOiB7CisgICAgICAgICJjb2RlIjogIk51bXBhZFN1YnRyYWN0IiwKKyAg
ICAgICAgImN0cmwiOiBGYWxzZSwKKyAgICAgICAgImtleSI6ICIsIiwKKyAgICAgICAgImxvY2F0
aW9uIjogMywKKyAgICAgICAgIm1ldGEiOiBGYWxzZSwKKyAgICAgICAgInNoaWZ0IjogRmFsc2Us
CisgICAgICAgICJ2YWx1ZSI6IHUiXHVlMDI2IiwKKyAgICB9LAorICAgICJTSElGVCI6IHsKKyAg
ICAgICAgImNvZGUiOiAiU2hpZnRMZWZ0IiwKKyAgICAgICAgImN0cmwiOiBGYWxzZSwKKyAgICAg
ICAgImtleSI6ICJTaGlmdCIsCisgICAgICAgICJsb2NhdGlvbiI6IDEsCisgICAgICAgICJtZXRh
IjogRmFsc2UsCisgICAgICAgICJzaGlmdCI6IFRydWUsCisgICAgICAgICJ2YWx1ZSI6IHUiXHVl
MDA4IiwKKyAgICB9LAorICAgICJTUEFDRSI6IHsKKyAgICAgICAgImNvZGUiOiAiU3BhY2UiLAor
ICAgICAgICAiY3RybCI6IEZhbHNlLAorICAgICAgICAia2V5IjogIiAiLAorICAgICAgICAibG9j
YXRpb24iOiAwLAorICAgICAgICAibWV0YSI6IEZhbHNlLAorICAgICAgICAic2hpZnQiOiBGYWxz
ZSwKKyAgICAgICAgInZhbHVlIjogdSJcdWUwMGQiLAorICAgIH0sCisgICAgIlNVQlRSQUNUIjog
eworICAgICAgICAiY29kZSI6ICIiLAorICAgICAgICAiY3RybCI6IEZhbHNlLAorICAgICAgICAi
a2V5IjogIi0iLAorICAgICAgICAibG9jYXRpb24iOiAzLAorICAgICAgICAibWV0YSI6IEZhbHNl
LAorICAgICAgICAic2hpZnQiOiBGYWxzZSwKKyAgICAgICAgInZhbHVlIjogdSJcdWUwMjciLAor
ICAgIH0sCisgICAgIlRBQiI6IHsKKyAgICAgICAgImNvZGUiOiAiVGFiIiwKKyAgICAgICAgImN0
cmwiOiBGYWxzZSwKKyAgICAgICAgImtleSI6ICJUYWIiLAorICAgICAgICAibG9jYXRpb24iOiAw
LAorICAgICAgICAibWV0YSI6IEZhbHNlLAorICAgICAgICAic2hpZnQiOiBGYWxzZSwKKyAgICAg
ICAgInZhbHVlIjogdSJcdWUwMDQiLAorICAgIH0sCisgICAgIlVQIjogeworICAgICAgICAiY29k
ZSI6ICJBcnJvd1VwIiwKKyAgICAgICAgImN0cmwiOiBGYWxzZSwKKyAgICAgICAgImtleSI6ICJB
cnJvd1VwIiwKKyAgICAgICAgImxvY2F0aW9uIjogMCwKKyAgICAgICAgIm1ldGEiOiBGYWxzZSwK
KyAgICAgICAgInNoaWZ0IjogRmFsc2UsCisgICAgICAgICJ2YWx1ZSI6IHUiXHVlMDEzIiwKKyAg
ICB9LAorICAgICJaRU5LQUtVSEFOS0FLVSI6IHsKKyAgICAgICAgImNvZGUiOiAiIiwKKyAgICAg
ICAgImN0cmwiOiBGYWxzZSwKKyAgICAgICAgImtleSI6ICJaZW5rYWt1SGFua2FrdSIsCisgICAg
ICAgICJsb2NhdGlvbiI6IDAsCisgICAgICAgICJtZXRhIjogRmFsc2UsCisgICAgICAgICJzaGlm
dCI6IEZhbHNlLAorICAgICAgICAidmFsdWUiOiB1Ilx1ZTA0MCIsCisgICAgfQorfQpkaWZmIC0t
Z2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9hY3Rpb25z
L3N1cHBvcnQvcmVmaW5lLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZl
ci90ZXN0cy9hY3Rpb25zL3N1cHBvcnQvcmVmaW5lLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi4zYTZkNjNlMDRjZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZl
clRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvYWN0aW9ucy9zdXBwb3J0L3JlZmlu
ZS5weQpAQCAtMCwwICsxLDMzIEBACitkZWYgZ2V0X2V2ZW50cyhzZXNzaW9uKToKKyAgICAiIiJS
ZXR1cm4gbGlzdCBvZiBrZXkgZXZlbnRzIHJlY29yZGVkIGluIHRoZSB0ZXN0X2tleXNfcGFnZSBm
aXh0dXJlLiIiIgorICAgIGV2ZW50cyA9IHNlc3Npb24uZXhlY3V0ZV9zY3JpcHQoInJldHVybiBh
bGxFdmVudHMuZXZlbnRzOyIpIG9yIFtdCisgICAgIyBga2V5YCB2YWx1ZXMgaW4gYGFsbEV2ZW50
c2AgbWF5IGJlIGVzY2FwZWQgKHNlZSBgZXNjYXBlU3Vycm9nYXRlSGFsZmAgaW4KKyAgICAjIHRl
c3Rfa2V5c193ZHNwZWMuaHRtbCksIHNvIHRoaXMgY29udmVydHMgdGhlbSBiYWNrIGludG8gdW5p
Y29kZSBsaXRlcmFscy4KKyAgICBmb3IgZSBpbiBldmVudHM6CisgICAgICAgICMgZXhhbXBsZTog
dHVybiAiVStkODNkIiAoNiBjaGFycykgaW50byB1Ilx1ZDgzZCIgKDEgY2hhcikKKyAgICAgICAg
aWYgImtleSIgaW4gZSBhbmQgZVsia2V5Il0uc3RhcnRzd2l0aCh1IlUrIik6CisgICAgICAgICAg
ICBrZXkgPSBlWyJrZXkiXQorICAgICAgICAgICAgaGV4X3N1ZmZpeCA9IGtleVtrZXkuaW5kZXgo
IisiKSArIDE6XQorICAgICAgICAgICAgZVsia2V5Il0gPSB1bmljaHIoaW50KGhleF9zdWZmaXgs
IDE2KSkKKyAgICByZXR1cm4gZXZlbnRzCisKKworZGVmIGdldF9rZXlzKGlucHV0X2VsKToKKyAg
ICAiIiJHZXQgcHJpbnRhYmxlIGNoYXJhY3RlcnMgZW50ZXJlZCBpbnRvIGBpbnB1dF9lbGAuCisK
KyAgICA6cGFyYW0gaW5wdXRfZWw6IEhUTUwgaW5wdXQgZWxlbWVudC4KKyAgICAiIiIKKyAgICBy
diA9IGlucHV0X2VsLnByb3BlcnR5KCJ2YWx1ZSIpCisgICAgaWYgcnYgaXMgTm9uZToKKyAgICAg
ICAgcmV0dXJuICIiCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIHJ2CisKKworZGVmIGZpbHRl
cl9kaWN0KHNvdXJjZSwgZCk6CisgICAgIiIiRmlsdGVyIGBzb3VyY2VgIGRpY3QgdG8gb25seSBj
b250YWluIHNhbWUga2V5cyBhcyBgZGAgZGljdC4KKworICAgIDpwYXJhbSBzb3VyY2U6IGRpY3Rp
b25hcnkgdG8gZmlsdGVyLgorICAgIDpwYXJhbSBkOiBkaWN0aW9uYXJ5IHdob3NlIGtleXMgZGV0
ZXJtaW5lIHRoZSBmaWx0ZXJpbmcuCisgICAgIiIiCisgICAgcmV0dXJuIHtrOiBzb3VyY2Vba10g
Zm9yIGsgaW4gZC5rZXlzKCl9CmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViZHJpdmVyL3Rlc3RzL2FjdGlvbnMvc3VwcG9ydC90ZXN0X2FjdGlvbnNfd2RzcGVjLmh0
bWwgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL2FjdGlvbnMv
c3VwcG9ydC90ZXN0X2FjdGlvbnNfd2RzcGVjLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLmJlMjczMjI5YTNiCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVy
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9hY3Rpb25zL3N1cHBvcnQvdGVzdF9h
Y3Rpb25zX3dkc3BlYy5odG1sCkBAIC0wLDAgKzEsMTgxIEBACis8IWRvY3R5cGUgaHRtbD4KKzxt
ZXRhIGNoYXJzZXQ9dXRmLTg+Cis8aGVhZD4KKyAgICA8dGl0bGU+VGVzdCBBY3Rpb25zPC90aXRs
ZT4KKyAgICA8c3R5bGU+CisgICAgICBkaXYgeyBwYWRkaW5nOjBweDsgbWFyZ2luOiAwcHg7IH0K
KyAgICAgICN0cmFja1BvaW50ZXIgeyBwb3NpdGlvbjogZml4ZWQ7IH0KKyAgICAgICNyZXN1bHRD
b250YWluZXIgeyB3aWR0aDogNjAwcHg7IGhlaWdodDogNjBweDsgfQorICAgICAgLmFyZWEgeyB3
aWR0aDogMTAwcHg7IGhlaWdodDogNTBweDsgYmFja2dyb3VuZC1jb2xvcjogI2NjYzsgfQorICAg
ICAgLmJsb2NrIHsgd2lkdGg6IDVweDsgaGVpZ2h0OiA1cHg7IGJvcmRlcjogc29saWQgMXB4IHJl
ZDsgfQorICAgICAgI2RyYWdBcmVhIHsgcG9zaXRpb246IHJlbGF0aXZlOyB9CisgICAgICAjZHJh
Z1RhcmdldCB7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOjIycHg7IGxlZnQ6NDdweDt9CisgICAg
PC9zdHlsZT4KKyAgICA8c2NyaXB0PgorICAgICAgICAidXNlIHN0cmljdCI7CisgICAgICAgIHZh
ciBlbHMgPSB7fTsKKyAgICAgICAgdmFyIGFsbEV2ZW50cyA9IHtldmVudHM6IFtdfTsKKyAgICAg
ICAgZnVuY3Rpb24gZGlzcGxheU1lc3NhZ2UobWVzc2FnZSkgeworICAgICAgICAgICAgZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoImV2ZW50cyIpLmlubmVySFRNTCA9ICI8cD4iICsgbWVzc2FnZSAr
ICI8L3A+IjsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGFwcGVuZE1lc3NhZ2UobWVz
c2FnZSkgeworICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImV2ZW50cyIpLmlu
bmVySFRNTCArPSAiPHA+IiArIG1lc3NhZ2UgKyAiPC9wPiI7CisgICAgICAgIH0KKworICAgICAg
ICAvKioKKyAgICAgICAgICogRXNjYXBlIHxrZXl8IGlmIGl0J3MgaW4gYSBzdXJyb2dhdGUtaGFs
ZiBjaGFyYWN0ZXIgcmFuZ2UuCisgICAgICAgICAqCisgICAgICAgICAqIEV4YW1wbGU6IGdpdmVu
ICJcdWQ4M2QiIHJldHVybiAiVStkODNkIi4KKyAgICAgICAgICoKKyAgICAgICAgICogT3RoZXJ3
aXNlIEpTT04uc3RyaW5naWZ5IHdpbGwgY29udmVydCBpdCB0byBVK0ZGRkQgKFJFUExBQ0VNRU5U
IENIQVJBQ1RFUikKKyAgICAgICAgICogd2hlbiByZXR1cm5pbmcgYSB2YWx1ZSBmcm9tIGV4ZWN1
dGVTY3JpcHQsIGZvciBleGFtcGxlLgorICAgICAgICAgKi8KKyAgICAgICAgZnVuY3Rpb24gZXNj
YXBlU3Vycm9nYXRlSGFsZihrZXkpIHsKKyAgICAgICAgICBpZiAodHlwZW9mIGtleSAhPT0gInVu
ZGVmaW5lZCIgJiYga2V5Lmxlbmd0aCA9PT0gMSkgeworICAgICAgICAgICAgdmFyIGNoYXJDb2Rl
ID0ga2V5LmNoYXJDb2RlQXQoMCk7CisgICAgICAgICAgICB2YXIgaGlnaFN1cnJvZ2F0ZSA9IGNo
YXJDb2RlID49IDB4RDgwMCAmJiBjaGFyQ29kZSA8PSAweERCRkY7CisgICAgICAgICAgICB2YXIg
c3Vycm9nYXRlID0gaGlnaFN1cnJvZ2F0ZSB8fCAoY2hhckNvZGUgPj0gMHhEQzAwICYmIGNoYXJD
b2RlIDw9IDB4REZGRik7CisgICAgICAgICAgICBpZiAoc3Vycm9nYXRlKSB7CisgICAgICAgICAg
ICAgIGtleSA9ICJVKyIgKyBjaGFyQ29kZS50b1N0cmluZygxNik7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgfQorICAgICAgICAgIHJldHVybiBrZXk7CisgICAgICAgIH0KKworICAgICAgICBm
dW5jdGlvbiByZWNvcmRLZXlib2FyZEV2ZW50KGV2ZW50KSB7CisgICAgICAgICAgdmFyIGtleSA9
IGVzY2FwZVN1cnJvZ2F0ZUhhbGYoZXZlbnQua2V5KTsKKyAgICAgICAgICBhbGxFdmVudHMuZXZl
bnRzLnB1c2goeworICAgICAgICAgICAgImNvZGUiOiBldmVudC5jb2RlLAorICAgICAgICAgICAg
ImtleSI6IGtleSwKKyAgICAgICAgICAgICJ3aGljaCI6IGV2ZW50LndoaWNoLAorICAgICAgICAg
ICAgImxvY2F0aW9uIjogZXZlbnQubG9jYXRpb24sCisgICAgICAgICAgICAiY3RybCI6IGV2ZW50
LmN0cmxLZXksCisgICAgICAgICAgICAibWV0YSI6IGV2ZW50Lm1ldGFLZXksCisgICAgICAgICAg
ICAic2hpZnQiOiBldmVudC5zaGlmdEtleSwKKyAgICAgICAgICAgICJyZXBlYXQiOiBldmVudC5y
ZXBlYXQsCisgICAgICAgICAgICAidHlwZSI6IGV2ZW50LnR5cGUKKyAgICAgICAgICB9KTsKKyAg
ICAgICAgICBhcHBlbmRNZXNzYWdlKGAke2V2ZW50LnR5cGV9KGAgKworICAgICAgICAgICAgICBg
Y29kZTogJHtldmVudC5jb2RlfSwgYCArCisgICAgICAgICAgICAgIGBrZXk6ICR7a2V5fSwgYCAr
CisgICAgICAgICAgICAgIGB3aGljaDogJHtldmVudC53aGljaH0sIGAgKworICAgICAgICAgICAg
ICBga2V5Q29kZTogJHtldmVudC5rZXlDb2RlfSlgKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1
bmN0aW9uIHJlY29yZFBvaW50ZXJFdmVudChldmVudCkgeworICAgICAgICAgIGlmIChldmVudC50
eXBlID09PSAiY29udGV4dG1lbnUiKSB7CisgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVs
dCgpOworICAgICAgICAgIH0KKyAgICAgICAgICBhbGxFdmVudHMuZXZlbnRzLnB1c2goeworICAg
ICAgICAgICAgInR5cGUiOiBldmVudC50eXBlLAorICAgICAgICAgICAgImJ1dHRvbiI6IGV2ZW50
LmJ1dHRvbiwKKyAgICAgICAgICAgICJidXR0b25zIjogZXZlbnQuYnV0dG9ucywKKyAgICAgICAg
ICAgICJwYWdlWCI6IGV2ZW50LnBhZ2VYLAorICAgICAgICAgICAgInBhZ2VZIjogZXZlbnQucGFn
ZVksCisgICAgICAgICAgICAiY3RybEtleSI6IGV2ZW50LmN0cmxLZXksCisgICAgICAgICAgICAi
bWV0YUtleSI6IGV2ZW50Lm1ldGFLZXksCisgICAgICAgICAgICAiYWx0S2V5IjogZXZlbnQuYWx0
S2V5LAorICAgICAgICAgICAgInNoaWZ0S2V5IjogZXZlbnQuc2hpZnRLZXksCisgICAgICAgICAg
ICAidGFyZ2V0IjogZXZlbnQudGFyZ2V0LmlkCisgICAgICAgICAgfSk7CisgICAgICAgICAgYXBw
ZW5kTWVzc2FnZShgJHtldmVudC50eXBlfShgICsKKyAgICAgICAgICAgICAgYGJ1dHRvbjogJHtl
dmVudC5idXR0b259LCBgICsKKyAgICAgICAgICAgICAgYHBhZ2VYOiAke2V2ZW50LnBhZ2VYfSwg
YCArCisgICAgICAgICAgICAgIGBwYWdlWTogJHtldmVudC5wYWdlWX0sIGAgKworICAgICAgICAg
ICAgICBgYnV0dG9uOiAke2V2ZW50LmJ1dHRvbn0sIGAgKworICAgICAgICAgICAgICBgYnV0dG9u
czogJHtldmVudC5idXR0b25zfSwgYCArCisgICAgICAgICAgICAgIGBjdHJsS2V5OiAke2V2ZW50
LmN0cmxLZXl9LCBgICsKKyAgICAgICAgICAgICAgYGFsdEtleTogJHtldmVudC5hbHRLZXl9LCBg
ICsKKyAgICAgICAgICAgICAgYG1ldGFLZXk6ICR7ZXZlbnQubWV0YUtleX0sIGAgKworICAgICAg
ICAgICAgICBgc2hpZnRLZXk6ICR7ZXZlbnQuc2hpZnRLZXl9LCBgICsKKyAgICAgICAgICAgICAg
YHRhcmdldCBpZDogJHtldmVudC50YXJnZXQuaWR9KWApOworICAgICAgICB9CisKKyAgICAgICAg
ZnVuY3Rpb24gcmVjb3JkRmlyc3RQb2ludGVyTW92ZShldmVudCkgeworICAgICAgICAgIHJlY29y
ZFBvaW50ZXJFdmVudChldmVudCk7CisgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVu
ZXIoIm1vdXNlbW92ZSIsIHJlY29yZEZpcnN0UG9pbnRlck1vdmUpOworICAgICAgICB9CisKKyAg
ICAgICAgZnVuY3Rpb24gcmVzZXRFdmVudHMoKSB7CisgICAgICAgICAgICBhbGxFdmVudHMuZXZl
bnRzLmxlbmd0aCA9IDA7CisgICAgICAgICAgICBkaXNwbGF5TWVzc2FnZSgiIik7CisgICAgICAg
IH0KKworICAgICAgICBmdW5jdGlvbiBkcm9wKG1vdmVIYW5kbGVyKSB7CisgICAgICAgICAgcmV0
dXJuIGZ1bmN0aW9uIChldmVudCkgeworICAgICAgICAgICAgZWxzLmRyYWdBcmVhLnJlbW92ZUV2
ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsIG1vdmVIYW5kbGVyKTsKKyAgICAgICAgICAgIGVscy5k
cmFnVGFyZ2V0LnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICJ5ZWxsb3ciOworICAgICAgICAgICAg
ZWxzLmRyYWdUYXJnZXQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgZ3JhYik7CisgICAg
ICAgICAgICByZWNvcmRQb2ludGVyRXZlbnQoZXZlbnQpOworICAgICAgICAgIH07CisgICAgICAg
IH0KKworICAgICAgICBmdW5jdGlvbiBtb3ZlKGVsLCBvZmZzZXRYLCBvZmZzZXRZLCB0aW1lb3V0
KSB7CisgICAgICAgICAgcmV0dXJuIChldmVudCkgPT4geworICAgICAgICAgICAgc2V0VGltZW91
dCgoKSA9PiB7CisgICAgICAgICAgICAgIGVsLnN0eWxlLnRvcCA9IGV2ZW50LmNsaWVudFkgKyBv
ZmZzZXRZICsgInB4IjsKKyAgICAgICAgICAgICAgZWwuc3R5bGUubGVmdCA9IGV2ZW50LmNsaWVu
dFggKyBvZmZzZXRYICsgInB4IjsKKyAgICAgICAgICAgIH0sIHRpbWVvdXQpOworICAgICAgICAg
IH07CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBncmFiKGV2ZW50KSB7CisgICAgICAg
ICAgZXZlbnQudGFyZ2V0LnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICJyZWQiOworICAgICAgICAg
IGxldCBib3hSZWN0ID0gZXZlbnQudGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOworICAg
ICAgICAgIGxldCBhcmVhUmVjdCA9IGV2ZW50LnRhcmdldC5wYXJlbnRFbGVtZW50LmdldEJvdW5k
aW5nQ2xpZW50UmVjdCgpOworICAgICAgICAgIGxldCBtb3ZlSGFuZGxlciA9IG1vdmUoCisgICAg
ICAgICAgICAgIGV2ZW50LnRhcmdldCwKKyAgICAgICAgICAgICAgLy8gY29vcmRpbmF0ZXMgb2Yg
ZHJhZ1RhcmdldCBtdXN0IGJlIHJlbGF0aXZlIHRvIGRyYWdBcmVhIHN1Y2ggdGhhdAorICAgICAg
ICAgICAgICAvLyBkcmFnVGFyZ2V0IHJlbWFpbnMgdW5kZXIgdGhlIHBvaW50ZXIKKyAgICAgICAg
ICAgICAgLShhcmVhUmVjdC5sZWZ0ICsgKGV2ZW50LmNsaWVudFggLSBib3hSZWN0LmxlZnQpKSwK
KyAgICAgICAgICAgICAgLShhcmVhUmVjdC50b3AgKyAoZXZlbnQuY2xpZW50WSAtIGJveFJlY3Qu
dG9wKSksCisgICAgICAgICAgICAgIDIwKTsKKyAgICAgICAgICBlbHMuZHJhZ0FyZWEuYWRkRXZl
bnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgbW92ZUhhbmRsZXIpOworICAgICAgICAgIGVscy5kcmFn
QXJlYS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIiwgZHJvcChtb3ZlSGFuZGxlciksIHtvbmNl
OiB0cnVlfSk7CisgICAgICAgIH0KKworICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVy
KCJET01Db250ZW50TG9hZGVkIiwgKCkgPT4geworICAgICAgICAgIHZhciBrZXlSZXBvcnRlciA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJrZXlzIik7CisgICAgICAgICAgWyJrZXl1cCIsICJr
ZXlwcmVzcyIsICJrZXlkb3duIl0uZm9yRWFjaCgoZSkgPT4geworICAgICAgICAgICAga2V5UmVw
b3J0ZXIuYWRkRXZlbnRMaXN0ZW5lcihlLCByZWNvcmRLZXlib2FyZEV2ZW50KTsKKyAgICAgICAg
ICB9KTsKKyAgICAgICAgICB2YXIgb3V0ZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgib3V0
ZXIiKTsKKyAgICAgICAgICBbImNsaWNrIiwgImRibGNsaWNrIiwgIm1vdXNlZG93biIsCisgICAg
ICAgICAgICAgICJtb3VzZXVwIiwgImNvbnRleHRtZW51Il0uZm9yRWFjaCgoZSkgPT4geworICAg
ICAgICAgICAgb3V0ZXIuYWRkRXZlbnRMaXN0ZW5lcihlLCByZWNvcmRQb2ludGVyRXZlbnQpOwor
ICAgICAgICAgIH0pOworICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1v
dmUiLCByZWNvcmRQb2ludGVyRXZlbnQsIHtvbmNlOiB0cnVlfSk7CisgICAgICAgICAgLy92aXN1
YWwgY3VlIGZvciBtb3VzZW1vdmUKKyAgICAgICAgICB2YXIgcG9pbnRlciA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJ0cmFja1BvaW50ZXIiKTsKKyAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRM
aXN0ZW5lcigibW91c2Vtb3ZlIiwgbW92ZShwb2ludGVyLCAxNSwgMTUsIDMwKSk7CisgICAgICAg
ICAgLy8gZHJhZyBhbmQgZHJvcAorICAgICAgICAgIGVscy5kcmFnQXJlYSA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJkcmFnQXJlYSIpOworICAgICAgICAgIGVscy5kcmFnVGFyZ2V0ID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRyYWdUYXJnZXQiKTsKKyAgICAgICAgICBlbHMuZHJhZ1Rh
cmdldC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCBncmFiLCB7b25jZTogdHJ1ZX0pOwor
ICAgICAgICB9KTsKKyAgICA8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorICA8ZGl2IGlkPSJ0
cmFja1BvaW50ZXIiIGNsYXNzPSJibG9jayI+PC9kaXY+CisgIDxkaXY+CisgICAgPGgyPktleVJl
cG9ydGVyPC9oMj4KKyAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImtleXMiIHNpemU9IjgwIj4K
KyAgPC9kaXY+CisgIDxkaXY+CisgICAgPGgyPkNsaWNrUmVwb3J0ZXI8L2gyPgorICAgIDxkaXYg
aWQ9Im91dGVyIiBjbGFzcz0iYXJlYSI+CisgICAgPC9kaXY+CisgIDwvZGl2PgorICA8ZGl2Pgor
ICAgIDxoMj5EcmFnUmVwb3J0ZXI8L2gyPgorICAgIDxkaXYgaWQ9ImRyYWdBcmVhIiBjbGFzcz0i
YXJlYSI+CisgICAgICA8ZGl2IGlkPSJkcmFnVGFyZ2V0IiBjbGFzcz0iYmxvY2siPjwvZGl2Pgor
ICAgIDwvZGl2PgorICA8L2Rpdj4KKyAgPGRpdiBpZD0icmVzdWx0Q29udGFpbmVyIj4KKyAgICA8
aDI+RXZlbnRzPC9oMj4KKyAgICA8ZGl2IGlkPSJldmVudHMiPjwvZGl2PgorICA8L2Rpdj4KKzwv
Ym9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93
ZWJkcml2ZXIvdGVzdHMvY29uZnRlc3QucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViZHJpdmVyL3Rlc3RzL2NvbmZ0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi5lMTQ5MWE2ODAyNgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3Rz
L2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvY29uZnRlc3QucHkKQEAgLTAsMCArMSwxNCBA
QAoraW1wb3J0IHB5dGVzdAorZnJvbSB0ZXN0cy5zdXBwb3J0LmZpeHR1cmVzIGltcG9ydCAoCisg
ICAgY29uZmlndXJhdGlvbiwgY3JlYXRlX2RpYWxvZywgY3JlYXRlX2ZyYW1lLCBjcmVhdGVfd2lu
ZG93LCBodHRwLAorICAgIG5ld19zZXNzaW9uLCBzZXJ2ZXJfY29uZmlnLCBzZXNzaW9uLCB1cmwp
CisKK3B5dGVzdC5maXh0dXJlKHNjb3BlPSJzZXNzaW9uIikoY29uZmlndXJhdGlvbikKK3B5dGVz
dC5maXh0dXJlKCkoY3JlYXRlX2RpYWxvZykKK3B5dGVzdC5maXh0dXJlKCkoY3JlYXRlX2ZyYW1l
KQorcHl0ZXN0LmZpeHR1cmUoKShjcmVhdGVfd2luZG93KQorcHl0ZXN0LmZpeHR1cmUoKShodHRw
KQorcHl0ZXN0LmZpeHR1cmUoc2NvcGU9ImZ1bmN0aW9uIikobmV3X3Nlc3Npb24pCitweXRlc3Qu
Zml4dHVyZSgpKHNlcnZlcl9jb25maWcpCitweXRlc3QuZml4dHVyZShzY29wZT0iZnVuY3Rpb24i
KShzZXNzaW9uKQorcHl0ZXN0LmZpeHR1cmUoKSh1cmwpCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL2NvbnRleHRzL21heGltaXplX3dpbmRv
dy5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvY29udGV4
dHMvbWF4aW1pemVfd2luZG93LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi40MTczYjE3MDg4MQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9y
dGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvY29udGV4dHMvbWF4aW1pemVfd2luZG93LnB5CkBAIC0w
LDAgKzEsMjc3IEBACisjIE1FVEE6IHRpbWVvdXQ9bG9uZworCitmcm9tIHRlc3RzLnN1cHBvcnQu
YXNzZXJ0cyBpbXBvcnQgYXNzZXJ0X2Vycm9yLCBhc3NlcnRfZGlhbG9nX2hhbmRsZWQsIGFzc2Vy
dF9zdWNjZXNzCitmcm9tIHRlc3RzLnN1cHBvcnQuZml4dHVyZXMgaW1wb3J0IGNyZWF0ZV9kaWFs
b2cKK2Zyb20gdGVzdHMuc3VwcG9ydC5pbmxpbmUgaW1wb3J0IGlubGluZQorCisKK2FsZXJ0X2Rv
YyA9IGlubGluZSgiPHNjcmlwdD53aW5kb3cuYWxlcnQoKTwvc2NyaXB0PiIpCisKKworZGVmIG1h
eGltaXplKHNlc3Npb24pOgorICAgIHJldHVybiBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJQT1NU
IiwgInNlc3Npb24vJXMvd2luZG93L21heGltaXplIiAlIHNlc3Npb24uc2Vzc2lvbl9pZCkKKwor
CisjIDEwLjcuMyBNYXhpbWl6ZSBXaW5kb3cKKworCitkZWYgdGVzdF9ub19icm93c2luZ19jb250
ZXh0KHNlc3Npb24sIGNyZWF0ZV93aW5kb3cpOgorICAgICIiIgorICAgIDIuIElmIHRoZSBjdXJy
ZW50IHRvcC1sZXZlbCBicm93c2luZyBjb250ZXh0IGlzIG5vIGxvbmdlciBvcGVuLAorICAgIHJl
dHVybiBlcnJvciB3aXRoIGVycm9yIGNvZGUgbm8gc3VjaCB3aW5kb3cuCisKKyAgICAiIiIKKyAg
ICBzZXNzaW9uLndpbmRvd19oYW5kbGUgPSBjcmVhdGVfd2luZG93KCkKKyAgICBzZXNzaW9uLmNs
b3NlKCkKKyAgICByZXNwb25zZSA9IG1heGltaXplKHNlc3Npb24pCisgICAgYXNzZXJ0X2Vycm9y
KHJlc3BvbnNlLCAibm8gc3VjaCB3aW5kb3ciKQorCisKK2RlZiB0ZXN0X2hhbmRsZV9wcm9tcHRf
ZGlzbWlzc19hbmRfbm90aWZ5KCk6CisgICAgIiIiVE9ETyIiIgorCisKK2RlZiB0ZXN0X2hhbmRs
ZV9wcm9tcHRfYWNjZXB0X2FuZF9ub3RpZnkoKToKKyAgICAiIiJUT0RPIiIiCisKKworZGVmIHRl
c3RfaGFuZGxlX3Byb21wdF9pZ25vcmUoKToKKyAgICAiIiJUT0RPIiIiCisKKworZGVmIHRlc3Rf
aGFuZGxlX3Byb21wdF9hY2NlcHQobmV3X3Nlc3Npb24pOgorICAgICIiIgorICAgIDMuIEhhbmRs
ZSBhbnkgdXNlciBwcm9tcHRzIGFuZCByZXR1cm4gaXRzIHZhbHVlIGlmIGl0IGlzIGFuIGVycm9y
LgorCisgICAgWy4uLl0KKworICAgIEluIG9yZGVyIHRvIGhhbmRsZSBhbnkgdXNlciBwcm9tcHRz
IGEgcmVtb3RlIGVuZCBtdXN0IHRha2UgdGhlCisgICAgZm9sbG93aW5nIHN0ZXBzOgorCisgICAg
ICBbLi4uXQorCisgICAgICAyLiBQZXJmb3JtIHRoZSBmb2xsb3dpbmcgc3Vic3RlcHMgYmFzZWQg
b24gdGhlIGN1cnJlbnQgc2Vzc2lvbidzCisgICAgICB1c2VyIHByb21wdCBoYW5kbGVyOgorCisg
ICAgICAgIFsuLi5dCisKKyAgICAgICAgLSBhY2NlcHQgc3RhdGUKKyAgICAgICAgICAgQWNjZXB0
IHRoZSBjdXJyZW50IHVzZXIgcHJvbXB0LgorCisgICAgIiIiCisgICAgXywgc2Vzc2lvbiA9IG5l
d19zZXNzaW9uKHsiYWx3YXlzTWF0Y2giOiB7InVuaGFuZGxlZFByb21wdEJlaGF2aW9yIjogImFj
Y2VwdCJ9fSkKKyAgICBzZXNzaW9uLnVybCA9IGlubGluZSgiPHRpdGxlPldEIGRvYyB0aXRsZTwv
dGl0bGU+IikKKworICAgIGNyZWF0ZV9kaWFsb2coc2Vzc2lvbikoImFsZXJ0IiwgdGV4dD0iZGlz
bWlzcyAjMSIsIHJlc3VsdF92YXI9ImRpc21pc3MxIikKKyAgICByZXNwb25zZSA9IG1heGltaXpl
KHNlc3Npb24pCisgICAgYXNzZXJ0IHJlc3BvbnNlLnN0YXR1cyA9PSAyMDAKKyAgICBhc3NlcnRf
ZGlhbG9nX2hhbmRsZWQoc2Vzc2lvbiwgImRpc21pc3MgIzEiKQorCisgICAgY3JlYXRlX2RpYWxv
ZyhzZXNzaW9uKSgiY29uZmlybSIsIHRleHQ9ImRpc21pc3MgIzIiLCByZXN1bHRfdmFyPSJkaXNt
aXNzMiIpCisgICAgcmVzcG9uc2UgPSBtYXhpbWl6ZShzZXNzaW9uKQorICAgIGFzc2VydCByZXNw
b25zZS5zdGF0dXMgPT0gMjAwCisgICAgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNlc3Npb24sICJk
aXNtaXNzICMyIikKKworICAgIGNyZWF0ZV9kaWFsb2coc2Vzc2lvbikoInByb21wdCIsIHRleHQ9
ImRpc21pc3MgIzMiLCByZXN1bHRfdmFyPSJkaXNtaXNzMyIpCisgICAgcmVzcG9uc2UgPSBtYXhp
bWl6ZShzZXNzaW9uKQorICAgIGFzc2VydCByZXNwb25zZS5zdGF0dXMgPT0gMjAwCisgICAgYXNz
ZXJ0X2RpYWxvZ19oYW5kbGVkKHNlc3Npb24sICJkaXNtaXNzICMzIikKKworCitkZWYgdGVzdF9o
YW5kbGVfcHJvbXB0X21pc3NpbmdfdmFsdWUoc2Vzc2lvbiwgY3JlYXRlX2RpYWxvZyk6CisgICAg
IiIiCisgICAgMy4gSGFuZGxlIGFueSB1c2VyIHByb21wdHMgYW5kIHJldHVybiBpdHMgdmFsdWUg
aWYgaXQgaXMgYW4gZXJyb3IuCisKKyAgICBbLi4uXQorCisgICAgSW4gb3JkZXIgdG8gaGFuZGxl
IGFueSB1c2VyIHByb21wdHMgYSByZW1vdGUgZW5kIG11c3QgdGFrZSB0aGUKKyAgICBmb2xsb3dp
bmcgc3RlcHM6CisKKyAgICAgIFsuLi5dCisKKyAgICAgIDIuIFBlcmZvcm0gdGhlIGZvbGxvd2lu
ZyBzdWJzdGVwcyBiYXNlZCBvbiB0aGUgY3VycmVudCBzZXNzaW9uJ3MKKyAgICAgIHVzZXIgcHJv
bXB0IGhhbmRsZXI6CisKKyAgICAgICAgWy4uLl0KKworICAgICAgICAtIG1pc3NpbmcgdmFsdWUg
ZGVmYXVsdCBzdGF0ZQorICAgICAgICAgICAxLiBEaXNtaXNzIHRoZSBjdXJyZW50IHVzZXIgcHJv
bXB0LgorICAgICAgICAgICAyLiBSZXR1cm4gZXJyb3Igd2l0aCBlcnJvciBjb2RlIHVuZXhwZWN0
ZWQgYWxlcnQgb3Blbi4KKworICAgICIiIgorICAgIHNlc3Npb24udXJsID0gaW5saW5lKCI8dGl0
bGU+V0QgZG9jIHRpdGxlPC90aXRsZT4iKQorICAgIGNyZWF0ZV9kaWFsb2coImFsZXJ0IiwgdGV4
dD0iZGlzbWlzcyAjMSIsIHJlc3VsdF92YXI9ImRpc21pc3MxIikKKworICAgIHJlc3BvbnNlID0g
bWF4aW1pemUoc2Vzc2lvbikKKworICAgIGFzc2VydF9lcnJvcihyZXNwb25zZSwgInVuZXhwZWN0
ZWQgYWxlcnQgb3BlbiIpCisgICAgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNlc3Npb24sICJkaXNt
aXNzICMxIikKKworICAgIGNyZWF0ZV9kaWFsb2coImNvbmZpcm0iLCB0ZXh0PSJkaXNtaXNzICMy
IiwgcmVzdWx0X3Zhcj0iZGlzbWlzczIiKQorCisgICAgcmVzcG9uc2UgPSBtYXhpbWl6ZShzZXNz
aW9uKQorICAgIGFzc2VydF9lcnJvcihyZXNwb25zZSwgInVuZXhwZWN0ZWQgYWxlcnQgb3BlbiIp
CisgICAgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNlc3Npb24sICJkaXNtaXNzICMyIikKKworICAg
IGNyZWF0ZV9kaWFsb2coInByb21wdCIsIHRleHQ9ImRpc21pc3MgIzMiLCByZXN1bHRfdmFyPSJk
aXNtaXNzMyIpCisKKyAgICByZXNwb25zZSA9IG1heGltaXplKHNlc3Npb24pCisgICAgYXNzZXJ0
X2Vycm9yKHJlc3BvbnNlLCAidW5leHBlY3RlZCBhbGVydCBvcGVuIikKKyAgICBhc3NlcnRfZGlh
bG9nX2hhbmRsZWQoc2Vzc2lvbiwgImRpc21pc3MgIzMiKQorCisKK2RlZiB0ZXN0X2Z1bGx5X2V4
aXRfZnVsbHNjcmVlbihzZXNzaW9uKToKKyAgICAiIiIKKyAgICA0LiBGdWxseSBleGl0IGZ1bGxz
Y3JlZW4uCisKKyAgICBbLi4uXQorCisgICAgVG8gZnVsbHkgZXhpdCBmdWxsc2NyZWVuIGEgZG9j
dW1lbnQgZG9jdW1lbnQsIHJ1biB0aGVzZSBzdGVwczoKKworICAgICAgMS4gSWYgZG9jdW1lbnQn
cyBmdWxsc2NyZWVuIGVsZW1lbnQgaXMgbnVsbCwgdGVybWluYXRlIHRoZXNlIHN0ZXBzLgorCisg
ICAgICAyLiBVbmZ1bGxzY3JlZW4gZWxlbWVudHMgd2hvc2UgZnVsbHNjcmVlbiBmbGFnIGlzIHNl
dCwgd2l0aGluCisgICAgICBkb2N1bWVudCdzIHRvcCBsYXllciwgZXhjZXB0IGZvciBkb2N1bWVu
dCdzIGZ1bGxzY3JlZW4gZWxlbWVudC4KKworICAgICAgMy4gRXhpdCBmdWxsc2NyZWVuIGRvY3Vt
ZW50LgorCisgICAgIiIiCisgICAgc2Vzc2lvbi53aW5kb3cuZnVsbHNjcmVlbigpCisgICAgYXNz
ZXJ0IHNlc3Npb24uZXhlY3V0ZV9zY3JpcHQoInJldHVybiB3aW5kb3cuZnVsbFNjcmVlbiIpIGlz
IFRydWUKKworICAgIHJlc3BvbnNlID0gbWF4aW1pemUoc2Vzc2lvbikKKyAgICBhc3NlcnRfc3Vj
Y2VzcyhyZXNwb25zZSkKKyAgICBhc3NlcnQgc2Vzc2lvbi5leGVjdXRlX3NjcmlwdCgicmV0dXJu
IHdpbmRvdy5mdWxsU2NyZWVuIikgaXMgRmFsc2UKKworCitkZWYgdGVzdF9yZXN0b3JlX3RoZV93
aW5kb3coc2Vzc2lvbik6CisgICAgIiIiCisgICAgNS4gUmVzdG9yZSB0aGUgd2luZG93LgorCisg
ICAgWy4uLl0KKworICAgIFRvIHJlc3RvcmUgdGhlIHdpbmRvdywgZ2l2ZW4gYW4gb3BlcmF0aW5n
IHN5c3RlbSBsZXZlbCB3aW5kb3cgd2l0aAorICAgIGFuIGFzc29jaWF0ZWQgdG9wLWxldmVsIGJy
b3dzaW5nIGNvbnRleHQsIHJ1biBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYworICAgIHN0ZXBzIHRv
IHJlc3RvcmUgb3IgdW5oaWRlIHRoZSB3aW5kb3cgdG8gdGhlIHZpc2libGUgc2NyZWVuLiAgRG8g
bm90CisgICAgcmV0dXJuIGZyb20gdGhpcyBvcGVyYXRpb24gdW50aWwgdGhlIHZpc2liaWxpdHkg
c3RhdGUgb2YgdGhlIHRvcC1sZXZlbAorICAgIGJyb3dzaW5nIGNvbnRleHQncyBhY3RpdmUgZG9j
dW1lbnQgaGFzIHJlYWNoZWQgdGhlIHZpc2libGUgc3RhdGUsCisgICAgb3IgdW50aWwgdGhlIG9w
ZXJhdGlvbiB0aW1lcyBvdXQuCisKKyAgICAiIiIKKyAgICBzZXNzaW9uLndpbmRvdy5taW5pbWl6
ZSgpCisgICAgYXNzZXJ0IHNlc3Npb24uZXhlY3V0ZV9zY3JpcHQoInJldHVybiBkb2N1bWVudC5o
aWRkZW4iKSBpcyBUcnVlCisKKyAgICByZXNwb25zZSA9IG1heGltaXplKHNlc3Npb24pCisgICAg
YXNzZXJ0X3N1Y2Nlc3MocmVzcG9uc2UpCisKKworZGVmIHRlc3RfbWF4aW1pemUoc2Vzc2lvbik6
CisgICAgIiIiCisgICAgNi4gTWF4aW1pemUgdGhlIHdpbmRvdyBvZiB0aGUgY3VycmVudCBicm93
c2luZyBjb250ZXh0LgorCisgICAgWy4uLl0KKworICAgIFRvIG1heGltaXplIHRoZSB3aW5kb3cs
IGdpdmVuIGFuIG9wZXJhdGluZyBzeXN0ZW0gbGV2ZWwgd2luZG93IHdpdGggYW4KKyAgICBhc3Nv
Y2lhdGVkIHRvcC1sZXZlbCBicm93c2luZyBjb250ZXh0LCBydW4gdGhlIGltcGxlbWVudGF0aW9u
LXNwZWNpZmljCisgICAgc3RlcHMgdG8gdHJhbnNpdGlvbiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBs
ZXZlbCB3aW5kb3cgaW50byB0aGUKKyAgICBtYXhpbWl6ZWQgd2luZG93IHN0YXRlLiAgSWYgdGhl
IHdpbmRvdyBtYW5hZ2VyIHN1cHBvcnRzIHdpbmRvdworICAgIHJlc2l6aW5nIGJ1dCBkb2VzIG5v
dCBoYXZlIGEgY29uY2VwdCBvZiB3aW5kb3cgbWF4aW1hdGlvbiwgdGhlIHdpbmRvdworICAgIGRp
bWVuc2lvbnMgbXVzdCBiZSBpbmNyZWFzZWQgdG8gdGhlIG1heGltdW0gYXZhaWxhYmxlIHNpemUg
cGVybWl0dGVkCisgICAgYnkgdGhlIHdpbmRvdyBtYW5hZ2VyIGZvciB0aGUgY3VycmVudCBzY3Jl
ZW4uICBSZXR1cm4gd2hlbiB0aGUgd2luZG93CisgICAgaGFzIGNvbXBsZXRlZCB0aGUgdHJhbnNp
dGlvbiwgb3Igd2l0aGluIGFuIGltcGxlbWVudGF0aW9uLWRlZmluZWQKKyAgICB0aW1lb3V0Lgor
CisgICAgIiIiCisgICAgYmVmb3JlX3NpemUgPSBzZXNzaW9uLndpbmRvdy5zaXplCisKKyAgICBy
ZXNwb25zZSA9IG1heGltaXplKHNlc3Npb24pCisgICAgYXNzZXJ0X3N1Y2Nlc3MocmVzcG9uc2Up
CisKKyAgICBhc3NlcnQgYmVmb3JlX3NpemUgIT0gc2Vzc2lvbi53aW5kb3cuc2l6ZQorCisKK2Rl
ZiB0ZXN0X3BheWxvYWQoc2Vzc2lvbik6CisgICAgIiIiCisgICAgNy4gUmV0dXJuIHN1Y2Nlc3Mg
d2l0aCB0aGUgSlNPTiBzZXJpYWxpemF0aW9uIG9mIHRoZSBjdXJyZW50IHRvcC1sZXZlbAorICAg
IGJyb3dzaW5nIGNvbnRleHQncyB3aW5kb3cgcmVjdC4KKworICAgIFsuLi5dCisKKyAgICBBIHRv
cC1sZXZlbCBicm93c2luZyBjb250ZXh0J3Mgd2luZG93IHJlY3QgaXMgZGVmaW5lZCBhcyBhCisg
ICAgZGljdGlvbmFyeSBvZiB0aGUgc2NyZWVuWCwgc2NyZWVuWSwgd2lkdGggYW5kIGhlaWdodCBh
dHRyaWJ1dGVzIG9mCisgICAgdGhlIFdpbmRvd1Byb3h5LiBJdHMgSlNPTiByZXByZXNlbnRhdGlv
biBpcyB0aGUgZm9sbG93aW5nOgorCisgICAgIngiCisgICAgICAgIFdpbmRvd1Byb3h5J3Mgc2Ny
ZWVuWCBhdHRyaWJ1dGUuCisKKyAgICAieSIKKyAgICAgICAgV2luZG93UHJveHkncyBzY3JlZW5Z
IGF0dHJpYnV0ZS4KKworICAgICJ3aWR0aCIKKyAgICAgICAgV2lkdGggb2YgdGhlIHRvcC1sZXZl
bCBicm93c2luZyBjb250ZXh0J3Mgb3V0ZXIgZGltZW5zaW9ucywKKyAgICAgICAgaW5jbHVkaW5n
IGFueSBicm93c2VyIGNocm9tZSBhbmQgZXh0ZXJuYWxseSBkcmF3biB3aW5kb3cKKyAgICAgICAg
ZGVjb3JhdGlvbnMgaW4gQ1NTIHJlZmVyZW5jZSBwaXhlbHMuCisKKyAgICAiaGVpZ2h0IgorICAg
ICAgICBIZWlnaHQgb2YgdGhlIHRvcC1sZXZlbCBicm93c2luZyBjb250ZXh0J3Mgb3V0ZXIgZGlt
ZW5zaW9ucywKKyAgICAgICAgaW5jbHVkaW5nIGFueSBicm93c2VyIGNocm9tZSBhbmQgZXh0ZXJu
YWxseSBkcmF3biB3aW5kb3cKKyAgICAgICAgZGVjb3JhdGlvbnMgaW4gQ1NTIHJlZmVyZW5jZSBw
aXhlbHMuCisKKyAgICAiIiIKKyAgICBiZWZvcmVfc2l6ZSA9IHNlc3Npb24ud2luZG93LnNpemUK
KworICAgIHJlc3BvbnNlID0gbWF4aW1pemUoc2Vzc2lvbikKKworICAgICMgc3RlcCA1CisgICAg
YXNzZXJ0IHJlc3BvbnNlLnN0YXR1cyA9PSAyMDAKKyAgICBhc3NlcnQgaXNpbnN0YW5jZShyZXNw
b25zZS5ib2R5WyJ2YWx1ZSJdLCBkaWN0KQorCisgICAgdmFsdWUgPSByZXNwb25zZS5ib2R5WyJ2
YWx1ZSJdCisgICAgYXNzZXJ0ICJ3aWR0aCIgaW4gdmFsdWUKKyAgICBhc3NlcnQgImhlaWdodCIg
aW4gdmFsdWUKKyAgICBhc3NlcnQgIngiIGluIHZhbHVlCisgICAgYXNzZXJ0ICJ5IiBpbiB2YWx1
ZQorICAgIGFzc2VydCBpc2luc3RhbmNlKHZhbHVlWyJ3aWR0aCJdLCBpbnQpCisgICAgYXNzZXJ0
IGlzaW5zdGFuY2UodmFsdWVbImhlaWdodCJdLCBpbnQpCisgICAgYXNzZXJ0IGlzaW5zdGFuY2Uo
dmFsdWVbIngiXSwgaW50KQorICAgIGFzc2VydCBpc2luc3RhbmNlKHZhbHVlWyJ5Il0sIGludCkK
KworICAgIGFzc2VydCBiZWZvcmVfc2l6ZSAhPSBzZXNzaW9uLndpbmRvdy5zaXplCisKKworZGVm
IHRlc3RfbWF4aW1pemVfdHdpY2VfaXNfaWRlbXBvdGVudChzZXNzaW9uKToKKyAgICBmaXJzdF9y
ZXNwb25zZSA9IG1heGltaXplKHNlc3Npb24pCisgICAgYXNzZXJ0X3N1Y2Nlc3MoZmlyc3RfcmVz
cG9uc2UpCisgICAgbWF4X3NpemUgPSBzZXNzaW9uLndpbmRvdy5zaXplCisKKyAgICBzZWNvbmRf
cmVzcG9uc2UgPSBtYXhpbWl6ZShzZXNzaW9uKQorICAgIGFzc2VydF9zdWNjZXNzKHNlY29uZF9y
ZXNwb25zZSkKKyAgICBhc3NlcnQgc2Vzc2lvbi53aW5kb3cuc2l6ZSA9PSBtYXhfc2l6ZQorCisK
KyIiIgorVE9ETyhhdG8pOiBJbXBsaWNpdCBzZXNzaW9uIHN0YXJ0IGRvZXMgbm90IHVzZSBjb25m
aWd1cmF0aW9uIHBhc3NlZCBvbgorZnJvbSB3cHRydW5uZXIuICBUaGlzIGNhdXNlcyBhbiBleGNl
cHRpb24uCisKK1NlZSBodHRwczovL2J1Z3ppbC5sYS8xMzk4NDU5LgorCitkZWYgdGVzdF9tYXhp
bWl6ZV93aGVuX3Jlc2l6ZWRfdG9fbWF4X3NpemUoc2Vzc2lvbik6CisgICAgIyBEZXRlcm1pbmUg
dGhlIGxhcmdlc3QgYXZhaWxhYmxlIHdpbmRvdyBzaXplIGJ5IGZpcnN0IG1heGltaXNpbmcKKyAg
ICAjIHRoZSB3aW5kb3cgYW5kIGdldHRpbmcgdGhlIHdpbmRvdyByZWN0IGRpbWVuc2lvbnMuCisg
ICAgIworICAgICMgVGhlbiByZXNpemUgdGhlIHdpbmRvdyB0byB0aGUgbWF4aW11bSBhdmFpbGFi
bGUgc2l6ZS4KKyAgICBzZXNzaW9uLmVuZCgpCisgICAgYXZhaWxhYmxlID0gc2Vzc2lvbi53aW5k
b3cubWF4aW1pemUoKQorICAgIHNlc3Npb24uZW5kKCkKKworICAgIHNlc3Npb24ud2luZG93LnNp
emUgPSBhdmFpbGFibGUKKworICAgICMgSW4gY2VydGFpbiB3aW5kb3cgbWFuYWdlcnMgYSB3aW5k
b3cgZXh0ZW5kaW5nIHRvIHRoZSBmdWxsIGF2YWlsYWJsZQorICAgICMgZGltZW5zaW9ucyBvZiB0
aGUgc2NyZWVuIG1heSBub3QgaW1wbHkgdGhhdCB0aGUgd2luZG93IGlzIG1heGltaXNlZCwKKyAg
ICAjIHNpbmNlIHRoaXMgaXMgb2Z0ZW4gYSBzcGVjaWFsIHN0YXRlLiAgSWYgYSByZW1vdGUgZW5k
IGV4cGVjdHMgYSBET00KKyAgICAjIHJlc2l6ZSBldmVudCwgdGhpcyBtYXkgbm90IGZpcmUgaWYg
dGhlIHdpbmRvdyBoYXMgYWxyZWFkeSByZWFjaGVkCisgICAgIyBpdHMgZXhwZWN0ZWQgZGltZW5z
aW9ucy4KKyAgICBiZWZvcmUgPSBzZXNzaW9uLndpbmRvdy5zaXplCisgICAgc2Vzc2lvbi53aW5k
b3cubWF4aW1pemUoKQorICAgIGFzc2VydCBzZXNzaW9uLndpbmRvdy5zaXplID09IGJlZm9yZQor
IiIiCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rl
c3RzL2NvbnRleHRzL3Jlc2l6aW5nX2FuZF9wb3NpdGlvbmluZy5weSBiL1dlYkRyaXZlclRlc3Rz
L2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvY29udGV4dHMvcmVzaXppbmdfYW5kX3Bvc2l0
aW9uaW5nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42NjMzMWZh
YTIyYgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJk
cml2ZXIvdGVzdHMvY29udGV4dHMvcmVzaXppbmdfYW5kX3Bvc2l0aW9uaW5nLnB5CkBAIC0wLDAg
KzEsNjEgQEAKK2ltcG9ydCBqc29uCitpbXBvcnQgcHl0ZXN0CitpbXBvcnQgd2ViZHJpdmVyCisK
KworZGVmIHdpbmRvd19zaXplX3N1cHBvcnRlZChzZXNzaW9uKToKKyAgICB0cnk6CisgICAgICAg
IHNlc3Npb24ud2luZG93LnNpemUgPSAoImEiLCAiYiIpCisgICAgZXhjZXB0IHdlYmRyaXZlci5V
bnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbjoKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAg
ZXhjZXB0IHdlYmRyaXZlci5JbnZhbGlkQXJndW1lbnRFeGNlcHRpb246CisgICAgICAgIHJldHVy
biBUcnVlCisKK2RlZiB3aW5kb3dfcG9zaXRpb25fc3VwcG9ydGVkKHNlc3Npb24pOgorICAgIHRy
eToKKyAgICAgICAgc2Vzc2lvbi53aW5kb3cucG9zaXRpb24gPSAoImEiLCAiYiIpCisgICAgZXhj
ZXB0IHdlYmRyaXZlci5VbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbjoKKyAgICAgICAgcmV0
dXJuIEZhbHNlCisgICAgZXhjZXB0IHdlYmRyaXZlci5JbnZhbGlkQXJndW1lbnRFeGNlcHRpb246
CisgICAgICAgIHJldHVybiBUcnVlCisKKworZGVmIHRlc3Rfd2luZG93X3Jlc2l6ZShzZXNzaW9u
KToKKyAgICBpZiBub3Qgd2luZG93X3NpemVfc3VwcG9ydGVkKHNlc3Npb24pOgorICAgICAgICBw
eXRlc3Quc2tpcCgpCisKKyAgICAjIHNldHRpbmcgdGhlIHdpbmRvdyBzaXplIGJ5IHdlYmRyaXZl
ciBpcyBzeW5jaHJvbm91cworICAgICMgc28gd2Ugc2hvdWxkIHNlZSB0aGUgcmVzdWx0cyBpbW1l
ZGlhdGVseQorCisgICAgc2Vzc2lvbi53aW5kb3cuc2l6ZSA9ICg0MDAsIDUwMCkKKyAgICBhc3Nl
cnQgc2Vzc2lvbi53aW5kb3cuc2l6ZSA9PSAoNDAwLCA1MDApCisKKyAgICBzZXNzaW9uLndpbmRv
dy5zaXplID0gKDUwMCwgNjAwKQorICAgIGFzc2VydCBzZXNzaW9uLndpbmRvdy5zaXplID09ICg1
MDAsIDYwMCkKKworCisiIiIKK1RPRE8oYXRvKToKKworICAgIERpc2FibGUgdGVzdCBiZWNhdXNl
IHRoZSB3aGlsZSBzdGF0ZW1lbnRzIGFyZSB3cm9uZy4KKyAgICBUbyBmaXggdGhpcyBwcm9wZXJs
eSB3ZSBuZWVkIHRvIHdyaXRlIGFuIGV4cGxpY2l0IHdhaXQgdXRpbGl0eS4KKworZGVmIHRlc3Rf
d2luZG93X3Jlc2l6ZV9ieV9zY3JpcHQoc2Vzc2lvbik6CisgICAgIyBzZXR0aW5nIHRoZSB3aW5k
b3cgc2l6ZSBieSBKUyBpcyBhc3luY2hyb25vdXMKKyAgICAjIHNvIHdlIHBvbGwgd2FpdGluZyBm
b3IgdGhlIHJlc3VsdHMKKworICAgIHNpemUwID0gc2Vzc2lvbi53aW5kb3cuc2l6ZQorCisgICAg
c2Vzc2lvbi5leGVjdXRlX3NjcmlwdCgid2luZG93LnJlc2l6ZVRvKDcwMCwgODAwKSIpCisgICAg
c2l6ZTEgPSBzZXNzaW9uLndpbmRvdy5zaXplCisgICAgd2hpbGUgc2l6ZTAgPT0gc2l6ZTE6Cisg
ICAgICAgIHNpemUxID0gc2Vzc2lvbi53aW5kb3cuc2l6ZQorICAgIGFzc2VydCBzaXplMSA9PSAo
NzAwLCA4MDApCisKKyAgICBzZXNzaW9uLmV4ZWN1dGVfc2NyaXB0KCJ3aW5kb3cucmVzaXplVG8o
ODAwLCA5MDApIikKKyAgICBzaXplMiA9IHNlc3Npb24ud2luZG93LnNpemUKKyAgICB3aGlsZSBz
aXplMSA9PSBzaXplMjoKKyAgICAgICAgc2l6ZTIgPSBzZXNzaW9uLndpbmRvdy5zaXplCisgICAg
ICAgIGFzc2VydCBzaXplMiA9PSAoODAwLCA5MDApCisgICAgYXNzZXJ0IHNpemUyID09IHsid2lk
dGgiOiAyMDAsICJoZWlnaHQiOiAxMDB9CisiIiIKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3Rz
L2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvY29va2llcy9jb29raWVzLnB5IGIvV2ViRHJp
dmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9jb29raWVzL2Nvb2tpZXMucHkK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQyYThjNDQ4MGY5Ci0tLSAv
ZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0
cy9jb29raWVzL2Nvb2tpZXMucHkKQEAgLTAsMCArMSwyOCBAQAorZGVmIHRlc3RfZ2V0X25hbWVk
X2Nvb2tpZShzZXNzaW9uLCB1cmwpOgorICAgIHNlc3Npb24udXJsID0gdXJsKCIvY29tbW9uL2Js
YW5rLmh0bWwiKQorICAgIHNlc3Npb24uZXhlY3V0ZV9zY3JpcHQoImRvY3VtZW50LmNvb2tpZSA9
ICdmb289YmFyJyIpCisKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQi
LCAic2Vzc2lvbi8lcy9jb29raWUvZm9vIiAlIHNlc3Npb24uc2Vzc2lvbl9pZCkKKyAgICBhc3Nl
cnQgcmVzdWx0LnN0YXR1cyA9PSAyMDAKKyAgICBhc3NlcnQgaXNpbnN0YW5jZShyZXN1bHQuYm9k
eVsidmFsdWUiXSwgZGljdCkKKworICAgICMgdGFibGUgZm9yIGNvb2tpZSBjb252ZXJzaW9uCisg
ICAgIyBodHRwczovL3czYy5naXRodWIuaW8vd2ViZHJpdmVyL3dlYmRyaXZlci1zcGVjLmh0bWwj
ZGZuLXRhYmxlLWZvci1jb29raWUtY29udmVyc2lvbgorICAgIGNvb2tpZSA9IHJlc3VsdC5ib2R5
WyJ2YWx1ZSJdCisgICAgYXNzZXJ0ICJuYW1lIiBpbiBjb29raWUKKyAgICBhc3NlcnQgaXNpbnN0
YW5jZShjb29raWVbIm5hbWUiXSwgYmFzZXN0cmluZykKKyAgICBhc3NlcnQgInZhbHVlIiBpbiBj
b29raWUKKyAgICBhc3NlcnQgaXNpbnN0YW5jZShjb29raWVbInZhbHVlIl0sIGJhc2VzdHJpbmcp
CisgICAgYXNzZXJ0ICJwYXRoIiBpbiBjb29raWUKKyAgICBhc3NlcnQgaXNpbnN0YW5jZShjb29r
aWVbInBhdGgiXSwgYmFzZXN0cmluZykKKyAgICBhc3NlcnQgImRvbWFpbiIgaW4gY29va2llCisg
ICAgYXNzZXJ0IGlzaW5zdGFuY2UoY29va2llWyJkb21haW4iXSwgYmFzZXN0cmluZykKKyAgICBh
c3NlcnQgInNlY3VyZSIgaW4gY29va2llCisgICAgYXNzZXJ0IGlzaW5zdGFuY2UoY29va2llWyJz
ZWN1cmUiXSwgYm9vbCkKKyAgICBhc3NlcnQgImh0dHBPbmx5IiBpbiBjb29raWUKKyAgICBhc3Nl
cnQgaXNpbnN0YW5jZShjb29raWVbImh0dHBPbmx5Il0sIGJvb2wpCisgICAgYXNzZXJ0ICJleHBp
cnkiIGluIGNvb2tpZQorICAgIGFzc2VydCBpc2luc3RhbmNlKGNvb2tpZVsiZXhwaXJ5Il0sIChp
bnQsIGxvbmcpKQorCisgICAgYXNzZXJ0IGNvb2tpZVsibmFtZSJdID09ICJmb28iCisgICAgYXNz
ZXJ0IGNvb2tpZVsidmFsdWUiXSA9PSAiYmFyIgpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9lbGVtZW50X2NsaWNrL19faW5pdF9fLnB5IGIv
V2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9lbGVtZW50X2NsaWNr
L19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lNjlk
ZTI5YmIyZApkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZl
ci90ZXN0cy9lbGVtZW50X2NsaWNrL3NlbGVjdC5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVk
L3czYy93ZWJkcml2ZXIvdGVzdHMvZWxlbWVudF9jbGljay9zZWxlY3QucHkKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjE1YzM2ZmM0NTRmCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9lbGVtZW50X2Ns
aWNrL3NlbGVjdC5weQpAQCAtMCwwICsxLDIxMyBAQAorZnJvbSB0ZXN0cy5zdXBwb3J0LmlubGlu
ZSBpbXBvcnQgaW5saW5lCisKKworZGVmIHRlc3RfY2xpY2tfb3B0aW9uKHNlc3Npb24pOgorICAg
IHNlc3Npb24udXJsID0gaW5saW5lKCIiIgorICAgICAgPHNlbGVjdD4KKyAgICAgICAgPG9wdGlv
bj5maXJzdAorICAgICAgICA8b3B0aW9uPnNlY29uZAorICAgICAgPC9zZWxlY3Q+IiIiKQorICAg
IG9wdGlvbnMgPSBzZXNzaW9uLmZpbmQuY3NzKCJvcHRpb24iKQorCisgICAgYXNzZXJ0IG9wdGlv
bnNbMF0uc2VsZWN0ZWQKKyAgICBhc3NlcnQgbm90IG9wdGlvbnNbMV0uc2VsZWN0ZWQKKworICAg
IG9wdGlvbnNbMV0uY2xpY2soKQorICAgIGFzc2VydCBvcHRpb25zWzFdLnNlbGVjdGVkCisgICAg
YXNzZXJ0IG5vdCBvcHRpb25zWzBdLnNlbGVjdGVkCisKKworZGVmIHRlc3RfY2xpY2tfbXVsdGlw
bGVfb3B0aW9uKHNlc3Npb24pOgorICAgIHNlc3Npb24udXJsID0gaW5saW5lKCIiIgorICAgICAg
PHNlbGVjdCBtdWx0aXBsZT4KKyAgICAgICAgPG9wdGlvbj5maXJzdAorICAgICAgICA8b3B0aW9u
PnNlY29uZAorICAgICAgPC9zZWxlY3Q+IiIiKQorICAgIG9wdGlvbnMgPSBzZXNzaW9uLmZpbmQu
Y3NzKCJvcHRpb24iKQorCisgICAgYXNzZXJ0IG5vdCBvcHRpb25zWzBdLnNlbGVjdGVkCisgICAg
YXNzZXJ0IG5vdCBvcHRpb25zWzFdLnNlbGVjdGVkCisKKyAgICBvcHRpb25zWzBdLmNsaWNrKCkK
KyAgICBhc3NlcnQgb3B0aW9uc1swXS5zZWxlY3RlZAorICAgIGFzc2VydCBub3Qgb3B0aW9uc1sx
XS5zZWxlY3RlZAorCisKK2RlZiB0ZXN0X2NsaWNrX3ByZXNlbGVjdGVkX29wdGlvbihzZXNzaW9u
KToKKyAgICBzZXNzaW9uLnVybCA9IGlubGluZSgiIiIKKyAgICAgIDxzZWxlY3Q+CisgICAgICAg
IDxvcHRpb24+Zmlyc3QKKyAgICAgICAgPG9wdGlvbiBzZWxlY3RlZD5zZWNvbmQKKyAgICAgIDwv
c2VsZWN0PiIiIikKKyAgICBvcHRpb25zID0gc2Vzc2lvbi5maW5kLmNzcygib3B0aW9uIikKKwor
ICAgIGFzc2VydCBub3Qgb3B0aW9uc1swXS5zZWxlY3RlZAorICAgIGFzc2VydCBvcHRpb25zWzFd
LnNlbGVjdGVkCisKKyAgICBvcHRpb25zWzFdLmNsaWNrKCkKKyAgICBhc3NlcnQgb3B0aW9uc1sx
XS5zZWxlY3RlZAorICAgIGFzc2VydCBub3Qgb3B0aW9uc1swXS5zZWxlY3RlZAorCisgICAgb3B0
aW9uc1swXS5jbGljaygpCisgICAgYXNzZXJ0IG9wdGlvbnNbMF0uc2VsZWN0ZWQKKyAgICBhc3Nl
cnQgbm90IG9wdGlvbnNbMV0uc2VsZWN0ZWQKKworCitkZWYgdGVzdF9jbGlja19wcmVzZWxlY3Rl
ZF9tdWx0aXBsZV9vcHRpb24oc2Vzc2lvbik6CisgICAgc2Vzc2lvbi51cmwgPSBpbmxpbmUoIiIi
CisgICAgICA8c2VsZWN0IG11bHRpcGxlPgorICAgICAgICA8b3B0aW9uPmZpcnN0CisgICAgICAg
IDxvcHRpb24gc2VsZWN0ZWQ+c2Vjb25kCisgICAgICA8L3NlbGVjdD4iIiIpCisgICAgb3B0aW9u
cyA9IHNlc3Npb24uZmluZC5jc3MoIm9wdGlvbiIpCisKKyAgICBhc3NlcnQgbm90IG9wdGlvbnNb
MF0uc2VsZWN0ZWQKKyAgICBhc3NlcnQgb3B0aW9uc1sxXS5zZWxlY3RlZAorCisgICAgb3B0aW9u
c1sxXS5jbGljaygpCisgICAgYXNzZXJ0IG5vdCBvcHRpb25zWzFdLnNlbGVjdGVkCisgICAgYXNz
ZXJ0IG5vdCBvcHRpb25zWzBdLnNlbGVjdGVkCisKKyAgICBvcHRpb25zWzBdLmNsaWNrKCkKKyAg
ICBhc3NlcnQgb3B0aW9uc1swXS5zZWxlY3RlZAorICAgIGFzc2VydCBub3Qgb3B0aW9uc1sxXS5z
ZWxlY3RlZAorCisKK2RlZiB0ZXN0X2NsaWNrX2Rlc2VsZWN0c19vdGhlcnMoc2Vzc2lvbik6Cisg
ICAgc2Vzc2lvbi51cmwgPSBpbmxpbmUoIiIiCisgICAgICA8c2VsZWN0PgorICAgICAgICA8b3B0
aW9uPmZpcnN0CisgICAgICAgIDxvcHRpb24+c2Vjb25kCisgICAgICAgIDxvcHRpb24+dGhpcmQK
KyAgICAgIDwvc2VsZWN0PiIiIikKKyAgICBvcHRpb25zID0gc2Vzc2lvbi5maW5kLmNzcygib3B0
aW9uIikKKworICAgIG9wdGlvbnNbMF0uY2xpY2soKQorICAgIGFzc2VydCBvcHRpb25zWzBdLnNl
bGVjdGVkCisgICAgb3B0aW9uc1sxXS5jbGljaygpCisgICAgYXNzZXJ0IG9wdGlvbnNbMV0uc2Vs
ZWN0ZWQKKyAgICBvcHRpb25zWzJdLmNsaWNrKCkKKyAgICBhc3NlcnQgb3B0aW9uc1syXS5zZWxl
Y3RlZAorICAgIG9wdGlvbnNbMF0uY2xpY2soKQorICAgIGFzc2VydCBvcHRpb25zWzBdLnNlbGVj
dGVkCisKKworZGVmIHRlc3RfY2xpY2tfbXVsdGlwbGVfZG9lc19ub3RfZGVzZWxlY3Rfb3RoZXJz
KHNlc3Npb24pOgorICAgIHNlc3Npb24udXJsID0gaW5saW5lKCIiIgorICAgICAgPHNlbGVjdCBt
dWx0aXBsZT4KKyAgICAgICAgPG9wdGlvbj5maXJzdAorICAgICAgICA8b3B0aW9uPnNlY29uZAor
ICAgICAgICA8b3B0aW9uPnRoaXJkCisgICAgICA8L3NlbGVjdD4iIiIpCisgICAgb3B0aW9ucyA9
IHNlc3Npb24uZmluZC5jc3MoIm9wdGlvbiIpCisKKyAgICBvcHRpb25zWzBdLmNsaWNrKCkKKyAg
ICBhc3NlcnQgb3B0aW9uc1swXS5zZWxlY3RlZAorICAgIG9wdGlvbnNbMV0uY2xpY2soKQorICAg
IGFzc2VydCBvcHRpb25zWzBdLnNlbGVjdGVkCisgICAgYXNzZXJ0IG9wdGlvbnNbMV0uc2VsZWN0
ZWQKKyAgICBvcHRpb25zWzJdLmNsaWNrKCkKKyAgICBhc3NlcnQgb3B0aW9uc1swXS5zZWxlY3Rl
ZAorICAgIGFzc2VydCBvcHRpb25zWzFdLnNlbGVjdGVkCisgICAgYXNzZXJ0IG9wdGlvbnNbMl0u
c2VsZWN0ZWQKKworCitkZWYgdGVzdF9jbGlja19zZWxlY3RlZF9vcHRpb24oc2Vzc2lvbik6Cisg
ICAgc2Vzc2lvbi51cmwgPSBpbmxpbmUoIiIiCisgICAgICA8c2VsZWN0PgorICAgICAgICA8b3B0
aW9uPmZpcnN0CisgICAgICAgIDxvcHRpb24+c2Vjb25kCisgICAgICA8L3NlbGVjdD4iIiIpCisg
ICAgb3B0aW9ucyA9IHNlc3Npb24uZmluZC5jc3MoIm9wdGlvbiIpCisKKyAgICAjIEZpcnN0IDxv
cHRpb24+IGlzIHNlbGVjdGVkIGluIGRyb3Bkb3duCisgICAgYXNzZXJ0IG9wdGlvbnNbMF0uc2Vs
ZWN0ZWQKKyAgICBhc3NlcnQgbm90IG9wdGlvbnNbMV0uc2VsZWN0ZWQKKworICAgIG9wdGlvbnNb
MV0uY2xpY2soKQorICAgIGFzc2VydCBvcHRpb25zWzFdLnNlbGVjdGVkCisgICAgb3B0aW9uc1sx
XS5jbGljaygpCisgICAgYXNzZXJ0IG9wdGlvbnNbMV0uc2VsZWN0ZWQKKworCitkZWYgdGVzdF9j
bGlja19zZWxlY3RlZF9tdWx0aXBsZV9vcHRpb24oc2Vzc2lvbik6CisgICAgc2Vzc2lvbi51cmwg
PSBpbmxpbmUoIiIiCisgICAgICA8c2VsZWN0IG11bHRpcGxlPgorICAgICAgICA8b3B0aW9uPmZp
cnN0CisgICAgICAgIDxvcHRpb24+c2Vjb25kCisgICAgICA8L3NlbGVjdD4iIiIpCisgICAgb3B0
aW9ucyA9IHNlc3Npb24uZmluZC5jc3MoIm9wdGlvbiIpCisKKyAgICAjIE5vIGltcGxpY2l0bHkg
c2VsZWN0ZWQgPG9wdGlvbj4gaW4gPHNlbGVjdCBtdWx0aXBsZT4KKyAgICBhc3NlcnQgbm90IG9w
dGlvbnNbMF0uc2VsZWN0ZWQKKyAgICBhc3NlcnQgbm90IG9wdGlvbnNbMV0uc2VsZWN0ZWQKKwor
ICAgIG9wdGlvbnNbMF0uY2xpY2soKQorICAgIGFzc2VydCBvcHRpb25zWzBdLnNlbGVjdGVkCisg
ICAgYXNzZXJ0IG5vdCBvcHRpb25zWzFdLnNlbGVjdGVkCisKKyAgICAjIFNlY29uZCBjbGljayBp
biA8c2VsZWN0IG11bHRpcGxlPiBkZXNlbGVjdHMKKyAgICBvcHRpb25zWzBdLmNsaWNrKCkKKyAg
ICBhc3NlcnQgbm90IG9wdGlvbnNbMF0uc2VsZWN0ZWQKKyAgICBhc3NlcnQgbm90IG9wdGlvbnNb
MV0uc2VsZWN0ZWQKKworCitkZWYgdGVzdF9vdXRfb2Zfdmlld19kcm9wZG93bihzZXNzaW9uKToK
KyAgICBzZXNzaW9uLnVybCA9IGlubGluZSgiIiIKKyAgICAgIDxzZWxlY3Q+CisgICAgICAgIDxv
cHRpb24+MQorICAgICAgICA8b3B0aW9uPjIKKyAgICAgICAgPG9wdGlvbj4zCisgICAgICAgIDxv
cHRpb24+NAorICAgICAgICA8b3B0aW9uPjUKKyAgICAgICAgPG9wdGlvbj42CisgICAgICAgIDxv
cHRpb24+NworICAgICAgICA8b3B0aW9uPjgKKyAgICAgICAgPG9wdGlvbj45CisgICAgICAgIDxv
cHRpb24+MTAKKyAgICAgICAgPG9wdGlvbj4xMQorICAgICAgICA8b3B0aW9uPjEyCisgICAgICAg
IDxvcHRpb24+MTMKKyAgICAgICAgPG9wdGlvbj4xNAorICAgICAgICA8b3B0aW9uPjE1CisgICAg
ICAgIDxvcHRpb24+MTYKKyAgICAgICAgPG9wdGlvbj4xNworICAgICAgICA8b3B0aW9uPjE4Cisg
ICAgICAgIDxvcHRpb24+MTkKKyAgICAgICAgPG9wdGlvbj4yMAorICAgICAgPC9zZWxlY3Q+IiIi
KQorICAgIG9wdGlvbnMgPSBzZXNzaW9uLmZpbmQuY3NzKCJvcHRpb24iKQorCisgICAgb3B0aW9u
c1sxNF0uY2xpY2soKQorICAgIGFzc2VydCBvcHRpb25zWzE0XS5zZWxlY3RlZAorCisKK2RlZiB0
ZXN0X291dF9vZl92aWV3X211bHRpcGxlKHNlc3Npb24pOgorICAgIHNlc3Npb24udXJsID0gaW5s
aW5lKCIiIgorICAgICAgPHNlbGVjdCBtdWx0aXBsZT4KKyAgICAgICAgPG9wdGlvbj4xCisgICAg
ICAgIDxvcHRpb24+MgorICAgICAgICA8b3B0aW9uPjMKKyAgICAgICAgPG9wdGlvbj40CisgICAg
ICAgIDxvcHRpb24+NQorICAgICAgICA8b3B0aW9uPjYKKyAgICAgICAgPG9wdGlvbj43CisgICAg
ICAgIDxvcHRpb24+OAorICAgICAgICA8b3B0aW9uPjkKKyAgICAgICAgPG9wdGlvbj4xMAorICAg
ICAgICA8b3B0aW9uPjExCisgICAgICAgIDxvcHRpb24+MTIKKyAgICAgICAgPG9wdGlvbj4xMwor
ICAgICAgICA8b3B0aW9uPjE0CisgICAgICAgIDxvcHRpb24+MTUKKyAgICAgICAgPG9wdGlvbj4x
NgorICAgICAgICA8b3B0aW9uPjE3CisgICAgICAgIDxvcHRpb24+MTgKKyAgICAgICAgPG9wdGlv
bj4xOQorICAgICAgICA8b3B0aW9uPjIwCisgICAgICA8L3NlbGVjdD4iIiIpCisgICAgb3B0aW9u
cyA9IHNlc3Npb24uZmluZC5jc3MoIm9wdGlvbiIpCisKKyAgICBsYXN0X29wdGlvbiA9IG9wdGlv
bnNbLTFdCisgICAgbGFzdF9vcHRpb24uY2xpY2soKQorICAgIGFzc2VydCBsYXN0X29wdGlvbi5z
ZWxlY3RlZApkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZl
ci90ZXN0cy9mdWxsc2NyZWVuX3dpbmRvdy5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWJkcml2ZXIvdGVzdHMvZnVsbHNjcmVlbl93aW5kb3cucHkKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAuLjY5NmM1NzljMjY2Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vi
RHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9mdWxsc2NyZWVuX3dpbmRv
dy5weQpAQCAtMCwwICsxLDIwOCBAQAorIyBNRVRBOiB0aW1lb3V0PWxvbmcKKworZnJvbSB0ZXN0
cy5zdXBwb3J0LmFzc2VydHMgaW1wb3J0IGFzc2VydF9lcnJvciwgYXNzZXJ0X3N1Y2Nlc3MsIGFz
c2VydF9kaWFsb2dfaGFuZGxlZAorZnJvbSB0ZXN0cy5zdXBwb3J0LmZpeHR1cmVzIGltcG9ydCBj
cmVhdGVfZGlhbG9nCitmcm9tIHRlc3RzLnN1cHBvcnQuaW5saW5lIGltcG9ydCBpbmxpbmUKKwor
CithbGVydF9kb2MgPSBpbmxpbmUoIjxzY3JpcHQ+d2luZG93LmFsZXJ0KCk8L3NjcmlwdD4iKQor
CisKK2RlZiByZWFkX2dsb2JhbChzZXNzaW9uLCBuYW1lKToKKyAgICByZXR1cm4gc2Vzc2lvbi5l
eGVjdXRlX3NjcmlwdCgicmV0dXJuICVzOyIgJSBuYW1lKQorCisKK2RlZiBmdWxsc2NyZWVuKHNl
c3Npb24pOgorICAgIHJldHVybiBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJQT1NUIiwgInNlc3Np
b24vJXMvd2luZG93L2Z1bGxzY3JlZW4iICUgc2Vzc2lvbi5zZXNzaW9uX2lkKQorCisKKyMgMTAu
Ny41IEZ1bGxzY3JlZW4gV2luZG93CisKKworZGVmIHRlc3Rfbm9fYnJvd3NpbmdfY29udGV4dChz
ZXNzaW9uLCBjcmVhdGVfd2luZG93KToKKyAgICAiIiIKKyAgICAxLiBJZiB0aGUgY3VycmVudCB0
b3AtbGV2ZWwgYnJvd3NpbmcgY29udGV4dCBpcyBubyBsb25nZXIgb3BlbiwKKyAgICByZXR1cm4g
ZXJyb3Igd2l0aCBlcnJvciBjb2RlIG5vIHN1Y2ggd2luZG93LgorCisgICAgIiIiCisgICAgc2Vz
c2lvbi53aW5kb3dfaGFuZGxlID0gY3JlYXRlX3dpbmRvdygpCisgICAgc2Vzc2lvbi5jbG9zZSgp
CisgICAgcmVzcG9uc2UgPSBmdWxsc2NyZWVuKHNlc3Npb24pCisgICAgYXNzZXJ0X2Vycm9yKHJl
c3BvbnNlLCAibm8gc3VjaCB3aW5kb3ciKQorCisKK2RlZiB0ZXN0X2hhbmRsZV9wcm9tcHRfZGlz
bWlzc19hbmRfbm90aWZ5KCk6CisgICAgIiIiVE9ETyIiIgorCisKK2RlZiB0ZXN0X2hhbmRsZV9w
cm9tcHRfYWNjZXB0X2FuZF9ub3RpZnkoKToKKyAgICAiIiJUT0RPIiIiCisKKworZGVmIHRlc3Rf
aGFuZGxlX3Byb21wdF9pZ25vcmUoKToKKyAgICAiIiJUT0RPIiIiCisKKworZGVmIHRlc3RfaGFu
ZGxlX3Byb21wdF9hY2NlcHQobmV3X3Nlc3Npb24pOgorICAgICIiIgorICAgIDIuIEhhbmRsZSBh
bnkgdXNlciBwcm9tcHRzIGFuZCByZXR1cm4gaXRzIHZhbHVlIGlmIGl0IGlzIGFuIGVycm9yLgor
CisgICAgWy4uLl0KKworICAgIEluIG9yZGVyIHRvIGhhbmRsZSBhbnkgdXNlciBwcm9tcHRzIGEg
cmVtb3RlIGVuZCBtdXN0IHRha2UgdGhlCisgICAgZm9sbG93aW5nIHN0ZXBzOgorCisgICAgICBb
Li4uXQorCisgICAgICAyLiBQZXJmb3JtIHRoZSBmb2xsb3dpbmcgc3Vic3RlcHMgYmFzZWQgb24g
dGhlIGN1cnJlbnQgc2Vzc2lvbidzCisgICAgICB1c2VyIHByb21wdCBoYW5kbGVyOgorCisgICAg
ICAgIFsuLi5dCisKKyAgICAgICAgLSBhY2NlcHQgc3RhdGUKKyAgICAgICAgICAgQWNjZXB0IHRo
ZSBjdXJyZW50IHVzZXIgcHJvbXB0LgorCisgICAgIiIiCisgICAgXywgc2Vzc2lvbiA9IG5ld19z
ZXNzaW9uKHsiYWx3YXlzTWF0Y2giOiB7InVuaGFuZGxlZFByb21wdEJlaGF2aW9yIjogImFjY2Vw
dCJ9fSkKKyAgICBzZXNzaW9uLnVybCA9IGlubGluZSgiPHRpdGxlPldEIGRvYyB0aXRsZTwvdGl0
bGU+IikKKyAgICBjcmVhdGVfZGlhbG9nKHNlc3Npb24pKCJhbGVydCIsIHRleHQ9ImFjY2VwdCAj
MSIsIHJlc3VsdF92YXI9ImFjY2VwdDEiKQorCisgICAgZXhwZWN0ZWRfdGl0bGUgPSByZWFkX2ds
b2JhbChzZXNzaW9uLCAiZG9jdW1lbnQudGl0bGUiKQorICAgIHJlc3BvbnNlID0gZnVsbHNjcmVl
bihzZXNzaW9uKQorCisgICAgYXNzZXJ0X3N1Y2Nlc3MocmVzcG9uc2UsIGV4cGVjdGVkX3RpdGxl
KQorICAgIGFzc2VydF9kaWFsb2dfaGFuZGxlZChzZXNzaW9uLCAiYWNjZXB0ICMxIikKKyAgICBh
c3NlcnQgcmVhZF9nbG9iYWwoc2Vzc2lvbiwgImFjY2VwdDEiKSA9PSBOb25lCisKKyAgICBleHBl
Y3RlZF90aXRsZSA9IHJlYWRfZ2xvYmFsKHNlc3Npb24sICJkb2N1bWVudC50aXRsZSIpCisgICAg
Y3JlYXRlX2RpYWxvZyhzZXNzaW9uKSgiY29uZmlybSIsIHRleHQ9ImFjY2VwdCAjMiIsIHJlc3Vs
dF92YXI9ImFjY2VwdDIiKQorCisgICAgcmVzcG9uc2UgPSBmdWxsc2NyZWVuKHNlc3Npb24pCisK
KyAgICBhc3NlcnRfc3VjY2VzcyhyZXNwb25zZSwgZXhwZWN0ZWRfdGl0bGUpCisgICAgYXNzZXJ0
X2RpYWxvZ19oYW5kbGVkKHNlc3Npb24sICJhY2NlcHQgIzIiKQorICAgIGFzc2VydCByZWFkX2ds
b2JhbChzZXNzaW9uLCAiYWNjZXB0MiIpLCBUcnVlCisKKyAgICBleHBlY3RlZF90aXRsZSA9IHJl
YWRfZ2xvYmFsKHNlc3Npb24sICJkb2N1bWVudC50aXRsZSIpCisgICAgY3JlYXRlX2RpYWxvZyhz
ZXNzaW9uKSgicHJvbXB0IiwgdGV4dD0iYWNjZXB0ICMzIiwgcmVzdWx0X3Zhcj0iYWNjZXB0MyIp
CisKKyAgICByZXNwb25zZSA9IGZ1bGxzY3JlZW4oc2Vzc2lvbikKKworICAgIGFzc2VydF9zdWNj
ZXNzKHJlc3BvbnNlLCBleHBlY3RlZF90aXRsZSkKKyAgICBhc3NlcnRfZGlhbG9nX2hhbmRsZWQo
c2Vzc2lvbiwgImFjY2VwdCAjMyIpCisgICAgYXNzZXJ0IHJlYWRfZ2xvYmFsKHNlc3Npb24sICJh
Y2NlcHQzIikgPT0gIiIKKworCitkZWYgdGVzdF9oYW5kbGVfcHJvbXB0X21pc3NpbmdfdmFsdWUo
c2Vzc2lvbiwgY3JlYXRlX2RpYWxvZyk6CisgICAgIiIiCisgICAgMi4gSGFuZGxlIGFueSB1c2Vy
IHByb21wdHMgYW5kIHJldHVybiBpdHMgdmFsdWUgaWYgaXQgaXMgYW4gZXJyb3IuCisKKyAgICBb
Li4uXQorCisgICAgSW4gb3JkZXIgdG8gaGFuZGxlIGFueSB1c2VyIHByb21wdHMgYSByZW1vdGUg
ZW5kIG11c3QgdGFrZSB0aGUKKyAgICBmb2xsb3dpbmcgc3RlcHM6CisKKyAgICAgIFsuLi5dCisK
KyAgICAgIDIuIFBlcmZvcm0gdGhlIGZvbGxvd2luZyBzdWJzdGVwcyBiYXNlZCBvbiB0aGUgY3Vy
cmVudCBzZXNzaW9uJ3MKKyAgICAgIHVzZXIgcHJvbXB0IGhhbmRsZXI6CisKKyAgICAgICAgWy4u
Ll0KKworICAgICAgICAtIG1pc3NpbmcgdmFsdWUgZGVmYXVsdCBzdGF0ZQorICAgICAgICAgICAx
LiBEaXNtaXNzIHRoZSBjdXJyZW50IHVzZXIgcHJvbXB0LgorICAgICAgICAgICAyLiBSZXR1cm4g
ZXJyb3Igd2l0aCBlcnJvciBjb2RlIHVuZXhwZWN0ZWQgYWxlcnQgb3Blbi4KKworICAgICIiIgor
ICAgIHNlc3Npb24udXJsID0gaW5saW5lKCI8dGl0bGU+V0QgZG9jIHRpdGxlPC90aXRsZT4iKQor
ICAgIGNyZWF0ZV9kaWFsb2coImFsZXJ0IiwgdGV4dD0iZGlzbWlzcyAjMSIsIHJlc3VsdF92YXI9
ImRpc21pc3MxIikKKworICAgIHJlc3BvbnNlID0gZnVsbHNjcmVlbihzZXNzaW9uKQorCisgICAg
YXNzZXJ0X2Vycm9yKHJlc3BvbnNlLCAidW5leHBlY3RlZCBhbGVydCBvcGVuIikKKyAgICBhc3Nl
cnRfZGlhbG9nX2hhbmRsZWQoc2Vzc2lvbiwgImRpc21pc3MgIzEiKQorICAgIGFzc2VydCByZWFk
X2dsb2JhbChzZXNzaW9uLCAiYWNjZXB0MSIpID09IE5vbmUKKworICAgIGNyZWF0ZV9kaWFsb2co
ImNvbmZpcm0iLCB0ZXh0PSJkaXNtaXNzICMyIiwgcmVzdWx0X3Zhcj0iZGlzbWlzczIiKQorCisg
ICAgcmVzcG9uc2UgPSBmdWxsc2NyZWVuKHNlc3Npb24pCisKKyAgICBhc3NlcnRfZXJyb3IocmVz
cG9uc2UsICJ1bmV4cGVjdGVkIGFsZXJ0IG9wZW4iKQorICAgIGFzc2VydF9kaWFsb2dfaGFuZGxl
ZChzZXNzaW9uLCAiZGlzbWlzcyAjMiIpCisgICAgYXNzZXJ0IHJlYWRfZ2xvYmFsKHNlc3Npb24s
ICJkaXNtaXNzMiIpID09IEZhbHNlCisKKyAgICBjcmVhdGVfZGlhbG9nKCJwcm9tcHQiLCB0ZXh0
PSJkaXNtaXNzICMzIiwgcmVzdWx0X3Zhcj0iZGlzbWlzczMiKQorCisgICAgcmVzcG9uc2UgPSBm
dWxsc2NyZWVuKHNlc3Npb24pCisKKyAgICBhc3NlcnRfZXJyb3IocmVzcG9uc2UsICJ1bmV4cGVj
dGVkIGFsZXJ0IG9wZW4iKQorICAgIGFzc2VydF9kaWFsb2dfaGFuZGxlZChzZXNzaW9uLCAiZGlz
bWlzcyAjMyIpCisgICAgYXNzZXJ0IHJlYWRfZ2xvYmFsKHNlc3Npb24sICJkaXNtaXNzMyIpID09
IE5vbmUKKworCitkZWYgdGVzdF9mdWxsc2NyZWVuKHNlc3Npb24pOgorICAgICIiIgorICAgIDQu
IENhbGwgZnVsbHNjcmVlbiBhbiBlbGVtZW50IHdpdGggdGhlIGN1cnJlbnQgdG9wLWxldmVsIGJy
b3dzaW5nCisgICAgY29udGV4dCdzIGFjdGl2ZSBkb2N1bWVudCdzIGRvY3VtZW50IGVsZW1lbnQu
CisKKyAgICAiIiIKKyAgICByZXNwb25zZSA9IGZ1bGxzY3JlZW4oc2Vzc2lvbikKKyAgICBhc3Nl
cnRfc3VjY2VzcyhyZXNwb25zZSkKKyAgICBhc3NlcnQgc2Vzc2lvbi5leGVjdXRlX3NjcmlwdCgi
cmV0dXJuIHdpbmRvdy5mdWxsU2NyZWVuIikgaXMgVHJ1ZQorCisKK2RlZiB0ZXN0X3BheWxvYWQo
c2Vzc2lvbik6CisgICAgIiIiCisgICAgNS4gUmV0dXJuIHN1Y2Nlc3Mgd2l0aCB0aGUgSlNPTiBz
ZXJpYWxpemF0aW9uIG9mIHRoZSBjdXJyZW50IHRvcC1sZXZlbAorICAgIGJyb3dzaW5nIGNvbnRl
eHQncyB3aW5kb3cgcmVjdC4KKworICAgIFsuLi5dCisKKyAgICBBIHRvcC1sZXZlbCBicm93c2lu
ZyBjb250ZXh0J3Mgd2luZG93IHJlY3QgaXMgZGVmaW5lZCBhcyBhCisgICAgZGljdGlvbmFyeSBv
ZiB0aGUgc2NyZWVuWCwgc2NyZWVuWSwgd2lkdGggYW5kIGhlaWdodCBhdHRyaWJ1dGVzIG9mCisg
ICAgdGhlIFdpbmRvd1Byb3h5LiBJdHMgSlNPTiByZXByZXNlbnRhdGlvbiBpcyB0aGUgZm9sbG93
aW5nOgorCisgICAgIngiCisgICAgICAgIFdpbmRvd1Byb3h5J3Mgc2NyZWVuWCBhdHRyaWJ1dGUu
CisKKyAgICAieSIKKyAgICAgICAgV2luZG93UHJveHkncyBzY3JlZW5ZIGF0dHJpYnV0ZS4KKwor
ICAgICJ3aWR0aCIKKyAgICAgICAgV2lkdGggb2YgdGhlIHRvcC1sZXZlbCBicm93c2luZyBjb250
ZXh0J3Mgb3V0ZXIgZGltZW5zaW9ucywKKyAgICAgICAgaW5jbHVkaW5nIGFueSBicm93c2VyIGNo
cm9tZSBhbmQgZXh0ZXJuYWxseSBkcmF3biB3aW5kb3cKKyAgICAgICAgZGVjb3JhdGlvbnMgaW4g
Q1NTIHJlZmVyZW5jZSBwaXhlbHMuCisKKyAgICAiaGVpZ2h0IgorICAgICAgICBIZWlnaHQgb2Yg
dGhlIHRvcC1sZXZlbCBicm93c2luZyBjb250ZXh0J3Mgb3V0ZXIgZGltZW5zaW9ucywKKyAgICAg
ICAgaW5jbHVkaW5nIGFueSBicm93c2VyIGNocm9tZSBhbmQgZXh0ZXJuYWxseSBkcmF3biB3aW5k
b3cKKyAgICAgICAgZGVjb3JhdGlvbnMgaW4gQ1NTIHJlZmVyZW5jZSBwaXhlbHMuCisKKyAgICAi
IiIKKyAgICByZXNwb25zZSA9IGZ1bGxzY3JlZW4oc2Vzc2lvbikKKworICAgICMgc3RlcCA1Cisg
ICAgYXNzZXJ0IHJlc3BvbnNlLnN0YXR1cyA9PSAyMDAKKyAgICBhc3NlcnQgaXNpbnN0YW5jZShy
ZXNwb25zZS5ib2R5WyJ2YWx1ZSJdLCBkaWN0KQorCisgICAgdmFsdWUgPSByZXNwb25zZS5ib2R5
WyJ2YWx1ZSJdCisgICAgYXNzZXJ0ICJ3aWR0aCIgaW4gdmFsdWUKKyAgICBhc3NlcnQgImhlaWdo
dCIgaW4gdmFsdWUKKyAgICBhc3NlcnQgIngiIGluIHZhbHVlCisgICAgYXNzZXJ0ICJ5IiBpbiB2
YWx1ZQorICAgIGFzc2VydCBpc2luc3RhbmNlKHZhbHVlWyJ3aWR0aCJdLCBpbnQpCisgICAgYXNz
ZXJ0IGlzaW5zdGFuY2UodmFsdWVbImhlaWdodCJdLCBpbnQpCisgICAgYXNzZXJ0IGlzaW5zdGFu
Y2UodmFsdWVbIngiXSwgaW50KQorICAgIGFzc2VydCBpc2luc3RhbmNlKHZhbHVlWyJ5Il0sIGlu
dCkKKworCitkZWYgdGVzdF9mdWxsc2NyZWVuX3R3aWNlX2lzX2lkZW1wb3RlbnQoc2Vzc2lvbik6
CisgICAgYXNzZXJ0IHNlc3Npb24uZXhlY3V0ZV9zY3JpcHQoInJldHVybiB3aW5kb3cuZnVsbFNj
cmVlbiIpIGlzIEZhbHNlCisKKyAgICBmaXJzdF9yZXNwb25zZSA9IGZ1bGxzY3JlZW4oc2Vzc2lv
bikKKyAgICBhc3NlcnRfc3VjY2VzcyhmaXJzdF9yZXNwb25zZSkKKyAgICBhc3NlcnQgc2Vzc2lv
bi5leGVjdXRlX3NjcmlwdCgicmV0dXJuIHdpbmRvdy5mdWxsU2NyZWVuIikgaXMgVHJ1ZQorCisg
ICAgc2Vjb25kX3Jlc3BvbnNlID0gZnVsbHNjcmVlbihzZXNzaW9uKQorICAgIGFzc2VydF9zdWNj
ZXNzKHNlY29uZF9yZXNwb25zZSkKKyAgICBhc3NlcnQgc2Vzc2lvbi5leGVjdXRlX3NjcmlwdCgi
cmV0dXJuIHdpbmRvdy5mdWxsU2NyZWVuIikgaXMgVHJ1ZQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVy
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9nZXRfd2luZG93X3JlY3QucHkgYi9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL2dldF93aW5kb3dfcmVj
dC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMjBmM2I1NGMwOWQK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVy
L3Rlc3RzL2dldF93aW5kb3dfcmVjdC5weQpAQCAtMCwwICsxLDE2MSBAQAorZnJvbSB0ZXN0cy5z
dXBwb3J0LmFzc2VydHMgaW1wb3J0IGFzc2VydF9lcnJvciwgYXNzZXJ0X2RpYWxvZ19oYW5kbGVk
LCBhc3NlcnRfc3VjY2VzcworZnJvbSB0ZXN0cy5zdXBwb3J0LmZpeHR1cmVzIGltcG9ydCBjcmVh
dGVfZGlhbG9nCitmcm9tIHRlc3RzLnN1cHBvcnQuaW5saW5lIGltcG9ydCBpbmxpbmUKKworCith
bGVydF9kb2MgPSBpbmxpbmUoIjxzY3JpcHQ+d2luZG93LmFsZXJ0KCk8L3NjcmlwdD4iKQorCisK
K2RlZiBnZXRfd2luZG93X3JlY3Qoc2Vzc2lvbik6CisgICAgcmV0dXJuIHNlc3Npb24udHJhbnNw
b3J0LnNlbmQoIlBPU1QiLCAic2Vzc2lvbi8lcy93aW5kb3cvcmVjdCIgJSBzZXNzaW9uLnNlc3Np
b25faWQpCisKKworIyAxMC43LjEgR2V0IFdpbmRvdyBSZWN0CisKKworZGVmIHRlc3Rfbm9fYnJv
d3NpbmdfY29udGV4dChzZXNzaW9uLCBjcmVhdGVfd2luZG93KToKKyAgICAiIiIKKyAgICAxLiBJ
ZiB0aGUgY3VycmVudCB0b3AtbGV2ZWwgYnJvd3NpbmcgY29udGV4dCBpcyBubyBsb25nZXIgb3Bl
biwKKyAgICByZXR1cm4gZXJyb3Igd2l0aCBlcnJvciBjb2RlIG5vIHN1Y2ggd2luZG93LgorCisg
ICAgIiIiCisgICAgc2Vzc2lvbi53aW5kb3dfaGFuZGxlID0gY3JlYXRlX3dpbmRvdygpCisgICAg
c2Vzc2lvbi5jbG9zZSgpCisgICAgcmVzcG9uc2UgPSBnZXRfd2luZG93X3JlY3Qoc2Vzc2lvbikK
KyAgICBhc3NlcnRfZXJyb3IocmVzcG9uc2UsICJubyBzdWNoIHdpbmRvdyIpCisKKworZGVmIHRl
c3RfaGFuZGxlX3Byb21wdF9kaXNtaXNzX2FuZF9ub3RpZnkoKToKKyAgICAiIiJUT0RPIiIiCisK
KworZGVmIHRlc3RfaGFuZGxlX3Byb21wdF9hY2NlcHRfYW5kX25vdGlmeSgpOgorICAgICIiIlRP
RE8iIiIKKworCitkZWYgdGVzdF9oYW5kbGVfcHJvbXB0X2lnbm9yZSgpOgorICAgICIiIlRPRE8i
IiIKKworCitkZWYgdGVzdF9oYW5kbGVfcHJvbXB0X2FjY2VwdChuZXdfc2Vzc2lvbik6CisgICAg
IiIiCisgICAgMi4gSGFuZGxlIGFueSB1c2VyIHByb21wdHMgYW5kIHJldHVybiBpdHMgdmFsdWUg
aWYgaXQgaXMgYW4gZXJyb3IuCisKKyAgICBbLi4uXQorCisgICAgSW4gb3JkZXIgdG8gaGFuZGxl
IGFueSB1c2VyIHByb21wdHMgYSByZW1vdGUgZW5kIG11c3QgdGFrZSB0aGUKKyAgICBmb2xsb3dp
bmcgc3RlcHM6CisKKyAgICAgIFsuLi5dCisKKyAgICAgIDIuIFBlcmZvcm0gdGhlIGZvbGxvd2lu
ZyBzdWJzdGVwcyBiYXNlZCBvbiB0aGUgY3VycmVudCBzZXNzaW9uJ3MKKyAgICAgIHVzZXIgcHJv
bXB0IGhhbmRsZXI6CisKKyAgICAgICAgWy4uLl0KKworICAgICAgICAtIGFjY2VwdCBzdGF0ZQor
ICAgICAgICAgICBBY2NlcHQgdGhlIGN1cnJlbnQgdXNlciBwcm9tcHQuCisKKyAgICAiIiIKKyAg
ICBfLCBzZXNzaW9uID0gbmV3X3Nlc3Npb24oeyJhbHdheXNNYXRjaCI6IHsidW5oYW5kbGVkUHJv
bXB0QmVoYXZpb3IiOiAiYWNjZXB0In19KQorICAgIHNlc3Npb24udXJsID0gaW5saW5lKCI8dGl0
bGU+V0QgZG9jIHRpdGxlPC90aXRsZT4iKQorCisgICAgY3JlYXRlX2RpYWxvZyhzZXNzaW9uKSgi
YWxlcnQiLCB0ZXh0PSJkaXNtaXNzICMxIiwgcmVzdWx0X3Zhcj0iZGlzbWlzczEiKQorICAgIHJl
c3BvbnNlID0gZ2V0X3dpbmRvd19yZWN0KHNlc3Npb24pCisgICAgYXNzZXJ0IHJlc3BvbnNlLnN0
YXR1cyA9PSAyMDAKKyAgICBhc3NlcnRfZGlhbG9nX2hhbmRsZWQoc2Vzc2lvbiwgImRpc21pc3Mg
IzEiKQorCisgICAgY3JlYXRlX2RpYWxvZyhzZXNzaW9uKSgiY29uZmlybSIsIHRleHQ9ImRpc21p
c3MgIzIiLCByZXN1bHRfdmFyPSJkaXNtaXNzMiIpCisgICAgcmVzcG9uc2UgPSBnZXRfd2luZG93
X3JlY3Qoc2Vzc2lvbikKKyAgICBhc3NlcnQgcmVzcG9uc2Uuc3RhdHVzID09IDIwMAorICAgIGFz
c2VydF9kaWFsb2dfaGFuZGxlZChzZXNzaW9uLCAiZGlzbWlzcyAjMiIpCisKKyAgICBjcmVhdGVf
ZGlhbG9nKHNlc3Npb24pKCJwcm9tcHQiLCB0ZXh0PSJkaXNtaXNzICMzIiwgcmVzdWx0X3Zhcj0i
ZGlzbWlzczMiKQorICAgIHJlc3BvbnNlID0gZ2V0X3dpbmRvd19yZWN0KHNlc3Npb24pCisgICAg
YXNzZXJ0IHJlc3BvbnNlLnN0YXR1cyA9PSAyMDAKKyAgICBhc3NlcnRfZGlhbG9nX2hhbmRsZWQo
c2Vzc2lvbiwgImRpc21pc3MgIzMiKQorCisKK2RlZiB0ZXN0X2hhbmRsZV9wcm9tcHRfbWlzc2lu
Z192YWx1ZShzZXNzaW9uLCBjcmVhdGVfZGlhbG9nKToKKyAgICAiIiIKKyAgICAyLiBIYW5kbGUg
YW55IHVzZXIgcHJvbXB0cyBhbmQgcmV0dXJuIGl0cyB2YWx1ZSBpZiBpdCBpcyBhbiBlcnJvci4K
KworICAgIFsuLi5dCisKKyAgICBJbiBvcmRlciB0byBoYW5kbGUgYW55IHVzZXIgcHJvbXB0cyBh
IHJlbW90ZSBlbmQgbXVzdCB0YWtlIHRoZQorICAgIGZvbGxvd2luZyBzdGVwczoKKworICAgICAg
Wy4uLl0KKworICAgICAgMi4gUGVyZm9ybSB0aGUgZm9sbG93aW5nIHN1YnN0ZXBzIGJhc2VkIG9u
IHRoZSBjdXJyZW50IHNlc3Npb24ncworICAgICAgdXNlciBwcm9tcHQgaGFuZGxlcjoKKworICAg
ICAgICBbLi4uXQorCisgICAgICAgIC0gbWlzc2luZyB2YWx1ZSBkZWZhdWx0IHN0YXRlCisgICAg
ICAgICAgIDEuIERpc21pc3MgdGhlIGN1cnJlbnQgdXNlciBwcm9tcHQuCisgICAgICAgICAgIDIu
IFJldHVybiBlcnJvciB3aXRoIGVycm9yIGNvZGUgdW5leHBlY3RlZCBhbGVydCBvcGVuLgorCisg
ICAgIiIiCisgICAgc2Vzc2lvbi51cmwgPSBpbmxpbmUoIjx0aXRsZT5XRCBkb2MgdGl0bGU8L3Rp
dGxlPiIpCisgICAgY3JlYXRlX2RpYWxvZygiYWxlcnQiLCB0ZXh0PSJkaXNtaXNzICMxIiwgcmVz
dWx0X3Zhcj0iZGlzbWlzczEiKQorCisgICAgcmVzcG9uc2UgPSBnZXRfd2luZG93X3JlY3Qoc2Vz
c2lvbikKKworICAgIGFzc2VydF9lcnJvcihyZXN1bHQsICJ1bmV4cGVjdGVkIGFsZXJ0IG9wZW4i
KQorICAgIGFzc2VydF9kaWFsb2dfaGFuZGxlZChzZXNzaW9uLCAiZGlzbWlzcyAjMSIpCisKKyAg
ICBjcmVhdGVfZGlhbG9nKCJjb25maXJtIiwgdGV4dD0iZGlzbWlzcyAjMiIsIHJlc3VsdF92YXI9
ImRpc21pc3MyIikKKworICAgIHJlc3BvbnNlID0gZ2V0X3dpbmRvd19yZWN0KHNlc3Npb24pCisg
ICAgYXNzZXJ0X2Vycm9yKHJlc3BvbnNlLCAidW5leHBlY3RlZCBhbGVydCBvcGVuIikKKyAgICBh
c3NlcnRfZGlhbG9nX2hhbmRsZWQoc2Vzc2lvbiwgImRpc21pc3MgIzIiKQorCisgICAgY3JlYXRl
X2RpYWxvZygicHJvbXB0IiwgdGV4dD0iZGlzbWlzcyAjMyIsIHJlc3VsdF92YXI9ImRpc21pc3Mz
IikKKworICAgIHJlc3BvbnNlID0gZ2V0X3dpbmRvd19yZWN0KHNlc3Npb24pCisgICAgYXNzZXJ0
X2Vycm9yKHJlc3BvbnNlLCAidW5leHBlY3RlZCBhbGVydCBvcGVuIikKKyAgICBhc3NlcnRfZGlh
bG9nX2hhbmRsZWQoc2Vzc2lvbiwgImRpc21pc3MgIzMiKQorCisKK2RlZiB0ZXN0X3BheWxvYWQo
c2Vzc2lvbik6CisgICAgIiIiCisgICAgMy4gUmV0dXJuIHN1Y2Nlc3Mgd2l0aCB0aGUgSlNPTiBz
ZXJpYWxpemF0aW9uIG9mIHRoZSBjdXJyZW50IHRvcC1sZXZlbAorICAgIGJyb3dzaW5nIGNvbnRl
eHQncyB3aW5kb3cgcmVjdC4KKworICAgIFsuLi5dCisKKyAgICBBIHRvcC1sZXZlbCBicm93c2lu
ZyBjb250ZXh0J3Mgd2luZG93IHJlY3QgaXMgZGVmaW5lZCBhcyBhCisgICAgZGljdGlvbmFyeSBv
ZiB0aGUgc2NyZWVuWCwgc2NyZWVuWSwgd2lkdGggYW5kIGhlaWdodCBhdHRyaWJ1dGVzIG9mCisg
ICAgdGhlIFdpbmRvd1Byb3h5LiBJdHMgSlNPTiByZXByZXNlbnRhdGlvbiBpcyB0aGUgZm9sbG93
aW5nOgorCisgICAgIngiCisgICAgICAgIFdpbmRvd1Byb3h5J3Mgc2NyZWVuWCBhdHRyaWJ1dGUu
CisKKyAgICAieSIKKyAgICAgICAgV2luZG93UHJveHkncyBzY3JlZW5ZIGF0dHJpYnV0ZS4KKwor
ICAgICJ3aWR0aCIKKyAgICAgICAgV2lkdGggb2YgdGhlIHRvcC1sZXZlbCBicm93c2luZyBjb250
ZXh0J3Mgb3V0ZXIgZGltZW5zaW9ucywKKyAgICAgICAgaW5jbHVkaW5nIGFueSBicm93c2VyIGNo
cm9tZSBhbmQgZXh0ZXJuYWxseSBkcmF3biB3aW5kb3cKKyAgICAgICAgZGVjb3JhdGlvbnMgaW4g
Q1NTIHJlZmVyZW5jZSBwaXhlbHMuCisKKyAgICAiaGVpZ2h0IgorICAgICAgICBIZWlnaHQgb2Yg
dGhlIHRvcC1sZXZlbCBicm93c2luZyBjb250ZXh0J3Mgb3V0ZXIgZGltZW5zaW9ucywKKyAgICAg
ICAgaW5jbHVkaW5nIGFueSBicm93c2VyIGNocm9tZSBhbmQgZXh0ZXJuYWxseSBkcmF3biB3aW5k
b3cKKyAgICAgICAgZGVjb3JhdGlvbnMgaW4gQ1NTIHJlZmVyZW5jZSBwaXhlbHMuCisKKyAgICAi
IiIKKyAgICByZXNwb25zZSA9IGdldF93aW5kb3dfcmVjdChzZXNzaW9uKQorCisgICAgYXNzZXJ0
IHJlc3BvbnNlLnN0YXR1cyA9PSAyMDAKKyAgICBhc3NlcnQgaXNpbnN0YW5jZShyZXNwb25zZS5i
b2R5WyJ2YWx1ZSJdLCBkaWN0KQorICAgIHZhbHVlID0gcmVzcG9uc2UuYm9keVsidmFsdWUiXQor
ICAgIGFzc2VydCAid2lkdGgiIGluIHZhbHVlCisgICAgYXNzZXJ0ICJoZWlnaHQiIGluIHZhbHVl
CisgICAgYXNzZXJ0ICJ4IiBpbiB2YWx1ZQorICAgIGFzc2VydCAieSIgaW4gdmFsdWUKKyAgICBh
c3NlcnQgaXNpbnN0YW5jZSh2YWx1ZVsid2lkdGgiXSwgaW50KQorICAgIGFzc2VydCBpc2luc3Rh
bmNlKHZhbHVlWyJoZWlnaHQiXSwgaW50KQorICAgIGFzc2VydCBpc2luc3RhbmNlKHZhbHVlWyJ4
Il0sIGludCkKKyAgICBhc3NlcnQgaXNpbnN0YW5jZSh2YWx1ZVsieSJdLCBpbnQpCmRpZmYgLS1n
aXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL2ludGVyYWN0
aW9uL3NlbmRfa2V5c19jb250ZW50X2VkaXRhYmxlLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9pbnRlcmFjdGlvbi9zZW5kX2tleXNfY29udGVudF9lZGl0
YWJsZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYTRiYmE4ZTUz
NGYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJp
dmVyL3Rlc3RzL2ludGVyYWN0aW9uL3NlbmRfa2V5c19jb250ZW50X2VkaXRhYmxlLnB5CkBAIC0w
LDAgKzEsMjMgQEAKK2ltcG9ydCBweXRlc3QKKworZnJvbSB0ZXN0cy5zdXBwb3J0LmlubGluZSBp
bXBvcnQgaW5saW5lCisKKworZGVmIHRlc3Rfc2V0c19pbnNlcnRpb25fcG9pbnRfdG9fZW5kKHNl
c3Npb24pOgorICAgIHNlc3Npb24udXJsID0gaW5saW5lKCc8ZGl2IGNvbnRlbnRlZGl0YWJsZT10
cnVlPkhlbGxvLDwvZGl2PicpCisgICAgaW5wdXQgPSBzZXNzaW9uLmZpbmQuY3NzKCJkaXYiLCBh
bGw9RmFsc2UpCisgICAgaW5wdXQuc2VuZF9rZXlzKCcgd29ybGQhJykKKyAgICB0ZXh0ID0gc2Vz
c2lvbi5leGVjdXRlX3NjcmlwdCgncmV0dXJuIGFyZ3VtZW50c1swXS5pbm5lclRleHQnLCBhcmdz
PVtpbnB1dF0pCisgICAgYXNzZXJ0ICJIZWxsbywgd29ybGQhIiA9PSB0ZXh0LnN0cmlwKCkKKwor
CisjIDEyLiBMZXQgY3VycmVudCB0ZXh0IGxlbmd0aCBiZSB0aGUgZWxlbWVudOKAmXMgbGVuZ3Ro
LgorIworIyAxMy4gU2V0IHRoZSB0ZXh0IGluc2VydGlvbiBjYXJldCB1c2luZyBzZXQgc2VsZWN0
aW9uIHJhbmdlIHVzaW5nIGN1cnJlbnQKKyMgICAgIHRleHQgbGVuZ3RoIGZvciBib3RoIHRoZSBz
dGFydCBhbmQgZW5kIHBhcmFtZXRlcnMuCitkZWYgdGVzdF9zZXRzX2luc2VydGlvbl9wb2ludF90
b19hZnRlcl9sYXN0X3RleHRfbm9kZShzZXNzaW9uKToKKyAgICBzZXNzaW9uLnVybCA9IGlubGlu
ZSgnPGRpdiBjb250ZW50ZWRpdGFibGU9dHJ1ZT5IZWw8c3Bhbj5sbzwvc3Bhbj4sPC9kaXY+JykK
KyAgICBpbnB1dCA9IHNlc3Npb24uZmluZC5jc3MoImRpdiIsIGFsbD1GYWxzZSkKKyAgICBpbnB1
dC5zZW5kX2tleXMoIiB3b3JsZCEiKQorICAgIHRleHQgPSBzZXNzaW9uLmV4ZWN1dGVfc2NyaXB0
KCJyZXR1cm4gYXJndW1lbnRzWzBdLmlubmVyVGV4dCIsIGFyZ3M9W2lucHV0XSkKKyAgICBhc3Nl
cnQgIkhlbGxvLCB3b3JsZCEiID09IHRleHQuc3RyaXAoKQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVy
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9pbnRlcmZhY2UuaHRtbCBiL1dlYkRy
aXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvaW50ZXJmYWNlLmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjE0M2E4NjQzZjNjCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9p
bnRlcmZhY2UuaHRtbApAQCAtMCwwICsxLDE1IEBACis8IWRvY3R5cGUgaHRtbD4KKzxtZXRhIGNo
YXJzZXQ9dXRmLTg+Cis8dGl0bGU+V2ViRHJpdmVyIGludGVyZmFjZSB0ZXN0PC90aXRsZT4KKzxz
Y3JpcHQgc3JjPS9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanM+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
L3Jlc291cmNlcy9XZWJJRExQYXJzZXIuanM+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0vcmVzb3Vy
Y2VzL2lkbGhhcm5lc3MuanM+PC9zY3JpcHQ+CisKKzxzY3JpcHQ+Cit2YXIgdCA9IG5ldyBJZGxB
cnJheSgpOwordC5hZGRfdW50ZXN0ZWRfaWRscygiaW50ZXJmYWNlIE5hdmlnYXRvciB7fTsiKTsK
K3QuYWRkX2lkbHMoInBhcnRpYWwgaW50ZXJmYWNlIE5hdmlnYXRvciB7IHJlYWRvbmx5IGF0dHJp
YnV0ZSBib29sZWFuIHdlYmRyaXZlcjsgfTsiKTsKK3QuYWRkX29iamVjdHMoe05hdmlnYXRvcjog
WyJuYXZpZ2F0b3IiXX0pOwordC50ZXN0KCk7Cis8L3NjcmlwdD4KZGlmZiAtLWdpdCBhL1dlYkRy
aXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvbWluaW1pemVfd2luZG93LnB5
IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9taW5pbWl6ZV93
aW5kb3cucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQ5N2Q5Njdk
OTgyCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRy
aXZlci90ZXN0cy9taW5pbWl6ZV93aW5kb3cucHkKQEAgLTAsMCArMSwyMjUgQEAKK2Zyb20gdGVz
dHMuc3VwcG9ydC5hc3NlcnRzIGltcG9ydCBhc3NlcnRfZXJyb3IsIGFzc2VydF9zdWNjZXNzLCBh
c3NlcnRfZGlhbG9nX2hhbmRsZWQKK2Zyb20gdGVzdHMuc3VwcG9ydC5maXh0dXJlcyBpbXBvcnQg
Y3JlYXRlX2RpYWxvZworZnJvbSB0ZXN0cy5zdXBwb3J0LmlubGluZSBpbXBvcnQgaW5saW5lCisK
KworYWxlcnRfZG9jID0gaW5saW5lKCI8c2NyaXB0PndpbmRvdy5hbGVydCgpPC9zY3JpcHQ+IikK
KworCitkZWYgbWluaW1pemUoc2Vzc2lvbik6CisgICAgcmV0dXJuIHNlc3Npb24udHJhbnNwb3J0
LnNlbmQoIlBPU1QiLCAic2Vzc2lvbi8lcy93aW5kb3cvbWluaW1pemUiICUgc2Vzc2lvbi5zZXNz
aW9uX2lkKQorCisKKyMgMTAuNy40IE1pbmltaXplIFdpbmRvdworCisKK2RlZiB0ZXN0X25vX2Jy
b3dzaW5nX2NvbnRleHQoc2Vzc2lvbiwgY3JlYXRlX3dpbmRvdyk6CisgICAgIiIiCisgICAgMS4g
SWYgdGhlIGN1cnJlbnQgdG9wLWxldmVsIGJyb3dzaW5nIGNvbnRleHQgaXMgbm8gbG9uZ2VyIG9w
ZW4sCisgICAgcmV0dXJuIGVycm9yIHdpdGggZXJyb3IgY29kZSBubyBzdWNoIHdpbmRvdy4KKwor
ICAgICIiIgorICAgIHNlc3Npb24ud2luZG93X2hhbmRsZSA9IGNyZWF0ZV93aW5kb3coKQorICAg
IHNlc3Npb24uY2xvc2UoKQorICAgIHJlc3BvbnNlID0gbWluaW1pemUoc2Vzc2lvbikKKyAgICBh
c3NlcnRfZXJyb3IocmVzcG9uc2UsICJubyBzdWNoIHdpbmRvdyIpCisKKworZGVmIHRlc3RfaGFu
ZGxlX3Byb21wdF9kaXNtaXNzX2FuZF9ub3RpZnkoKToKKyAgICAiIiJUT0RPIiIiCisKKworZGVm
IHRlc3RfaGFuZGxlX3Byb21wdF9hY2NlcHRfYW5kX25vdGlmeSgpOgorICAgICIiIlRPRE8iIiIK
KworCitkZWYgdGVzdF9oYW5kbGVfcHJvbXB0X2lnbm9yZSgpOgorICAgICIiIlRPRE8iIiIKKwor
CitkZWYgdGVzdF9oYW5kbGVfcHJvbXB0X2FjY2VwdChuZXdfc2Vzc2lvbik6CisgICAgIiIiCisg
ICAgMi4gSGFuZGxlIGFueSB1c2VyIHByb21wdHMgYW5kIHJldHVybiBpdHMgdmFsdWUgaWYgaXQg
aXMgYW4gZXJyb3IuCisKKyAgICBbLi4uXQorCisgICAgSW4gb3JkZXIgdG8gaGFuZGxlIGFueSB1
c2VyIHByb21wdHMgYSByZW1vdGUgZW5kIG11c3QgdGFrZSB0aGUKKyAgICBmb2xsb3dpbmcgc3Rl
cHM6CisKKyAgICAgIFsuLi5dCisKKyAgICAgIDIuIFBlcmZvcm0gdGhlIGZvbGxvd2luZyBzdWJz
dGVwcyBiYXNlZCBvbiB0aGUgY3VycmVudCBzZXNzaW9uJ3MKKyAgICAgIHVzZXIgcHJvbXB0IGhh
bmRsZXI6CisKKyAgICAgICAgWy4uLl0KKworICAgICAgICAtIGFjY2VwdCBzdGF0ZQorICAgICAg
ICAgICBBY2NlcHQgdGhlIGN1cnJlbnQgdXNlciBwcm9tcHQuCisKKyAgICAiIiIKKyAgICBfLCBz
ZXNzaW9uID0gbmV3X3Nlc3Npb24oeyJhbHdheXNNYXRjaCI6IHsidW5oYW5kbGVkUHJvbXB0QmVo
YXZpb3IiOiAiYWNjZXB0In19KQorICAgIHNlc3Npb24udXJsID0gaW5saW5lKCI8dGl0bGU+V0Qg
ZG9jIHRpdGxlPC90aXRsZT4iKQorCisgICAgY3JlYXRlX2RpYWxvZyhzZXNzaW9uKSgiYWxlcnQi
LCB0ZXh0PSJkaXNtaXNzICMxIiwgcmVzdWx0X3Zhcj0iZGlzbWlzczEiKQorICAgIHJlc3BvbnNl
ID0gbWluaW1pemUoc2Vzc2lvbikKKyAgICBhc3NlcnQgcmVzcG9uc2Uuc3RhdHVzID09IDIwMAor
ICAgIGFzc2VydF9kaWFsb2dfaGFuZGxlZChzZXNzaW9uLCAiZGlzbWlzcyAjMSIpCisKKyAgICBj
cmVhdGVfZGlhbG9nKHNlc3Npb24pKCJjb25maXJtIiwgdGV4dD0iZGlzbWlzcyAjMiIsIHJlc3Vs
dF92YXI9ImRpc21pc3MyIikKKyAgICByZXNwb25zZSA9IG1pbmltaXplKHNlc3Npb24pCisgICAg
YXNzZXJ0IHJlc3BvbnNlLnN0YXR1cyA9PSAyMDAKKyAgICBhc3NlcnRfZGlhbG9nX2hhbmRsZWQo
c2Vzc2lvbiwgImRpc21pc3MgIzIiKQorCisgICAgY3JlYXRlX2RpYWxvZyhzZXNzaW9uKSgicHJv
bXB0IiwgdGV4dD0iZGlzbWlzcyAjMyIsIHJlc3VsdF92YXI9ImRpc21pc3MzIikKKyAgICByZXNw
b25zZSA9IG1pbmltaXplKHNlc3Npb24pCisgICAgYXNzZXJ0IHJlc3BvbnNlLnN0YXR1cyA9PSAy
MDAKKyAgICBhc3NlcnRfZGlhbG9nX2hhbmRsZWQoc2Vzc2lvbiwgImRpc21pc3MgIzMiKQorCisK
K2RlZiB0ZXN0X2hhbmRsZV9wcm9tcHRfbWlzc2luZ192YWx1ZShzZXNzaW9uLCBjcmVhdGVfZGlh
bG9nKToKKyAgICAiIiIKKyAgICAyLiBIYW5kbGUgYW55IHVzZXIgcHJvbXB0cyBhbmQgcmV0dXJu
IGl0cyB2YWx1ZSBpZiBpdCBpcyBhbiBlcnJvci4KKworICAgIFsuLi5dCisKKyAgICBJbiBvcmRl
ciB0byBoYW5kbGUgYW55IHVzZXIgcHJvbXB0cyBhIHJlbW90ZSBlbmQgbXVzdCB0YWtlIHRoZQor
ICAgIGZvbGxvd2luZyBzdGVwczoKKworICAgICAgWy4uLl0KKworICAgICAgMi4gUGVyZm9ybSB0
aGUgZm9sbG93aW5nIHN1YnN0ZXBzIGJhc2VkIG9uIHRoZSBjdXJyZW50IHNlc3Npb24ncworICAg
ICAgdXNlciBwcm9tcHQgaGFuZGxlcjoKKworICAgICAgICBbLi4uXQorCisgICAgICAgIC0gbWlz
c2luZyB2YWx1ZSBkZWZhdWx0IHN0YXRlCisgICAgICAgICAgIDEuIERpc21pc3MgdGhlIGN1cnJl
bnQgdXNlciBwcm9tcHQuCisgICAgICAgICAgIDIuIFJldHVybiBlcnJvciB3aXRoIGVycm9yIGNv
ZGUgdW5leHBlY3RlZCBhbGVydCBvcGVuLgorCisgICAgIiIiCisgICAgc2Vzc2lvbi51cmwgPSBp
bmxpbmUoIjx0aXRsZT5XRCBkb2MgdGl0bGU8L3RpdGxlPiIpCisgICAgY3JlYXRlX2RpYWxvZygi
YWxlcnQiLCB0ZXh0PSJkaXNtaXNzICMxIiwgcmVzdWx0X3Zhcj0iZGlzbWlzczEiKQorCisgICAg
cmVzcG9uc2UgPSBtaW5pbWl6ZShzZXNzaW9uKQorCisgICAgYXNzZXJ0X2Vycm9yKHJlc3BvbnNl
LCAidW5leHBlY3RlZCBhbGVydCBvcGVuIikKKyAgICBhc3NlcnRfZGlhbG9nX2hhbmRsZWQoc2Vz
c2lvbiwgImRpc21pc3MgIzEiKQorCisgICAgY3JlYXRlX2RpYWxvZygiY29uZmlybSIsIHRleHQ9
ImRpc21pc3MgIzIiLCByZXN1bHRfdmFyPSJkaXNtaXNzMiIpCisKKyAgICByZXNwb25zZSA9IG1p
bmltaXplKHNlc3Npb24pCisgICAgYXNzZXJ0X2Vycm9yKHJlc3BvbnNlLCAidW5leHBlY3RlZCBh
bGVydCBvcGVuIikKKyAgICBhc3NlcnRfZGlhbG9nX2hhbmRsZWQoc2Vzc2lvbiwgImRpc21pc3Mg
IzIiKQorCisgICAgY3JlYXRlX2RpYWxvZygicHJvbXB0IiwgdGV4dD0iZGlzbWlzcyAjMyIsIHJl
c3VsdF92YXI9ImRpc21pc3MzIikKKworICAgIHJlc3BvbnNlID0gbWluaW1pemUoc2Vzc2lvbikK
KyAgICBhc3NlcnRfZXJyb3IocmVzcG9uc2UsICJ1bmV4cGVjdGVkIGFsZXJ0IG9wZW4iKQorICAg
IGFzc2VydF9kaWFsb2dfaGFuZGxlZChzZXNzaW9uLCAiZGlzbWlzcyAjMyIpCisKKworZGVmIHRl
c3RfZnVsbHlfZXhpdF9mdWxsc2NyZWVuKHNlc3Npb24pOgorICAgICIiIgorICAgIDQuIEZ1bGx5
IGV4aXQgZnVsbHNjcmVlbi4KKworICAgIFsuLi5dCisKKyAgICBUbyBmdWxseSBleGl0IGZ1bGxz
Y3JlZW4gYSBkb2N1bWVudCBkb2N1bWVudCwgcnVuIHRoZXNlIHN0ZXBzOgorCisgICAgICAxLiBJ
ZiBkb2N1bWVudCdzIGZ1bGxzY3JlZW4gZWxlbWVudCBpcyBudWxsLCB0ZXJtaW5hdGUgdGhlc2Ug
c3RlcHMuCisKKyAgICAgIDIuIFVuZnVsbHNjcmVlbiBlbGVtZW50cyB3aG9zZSBmdWxsc2NyZWVu
IGZsYWcgaXMgc2V0LCB3aXRoaW4KKyAgICAgIGRvY3VtZW50J3MgdG9wIGxheWVyLCBleGNlcHQg
Zm9yIGRvY3VtZW50J3MgZnVsbHNjcmVlbiBlbGVtZW50LgorCisgICAgICAzLiBFeGl0IGZ1bGxz
Y3JlZW4gZG9jdW1lbnQuCisKKyAgICAiIiIKKyAgICBzZXNzaW9uLndpbmRvdy5mdWxsc2NyZWVu
KCkKKyAgICBhc3NlcnQgc2Vzc2lvbi5leGVjdXRlX3NjcmlwdCgicmV0dXJuIHdpbmRvdy5mdWxs
U2NyZWVuIikgaXMgVHJ1ZQorCisgICAgcmVzcG9uc2UgPSBtaW5pbWl6ZShzZXNzaW9uKQorICAg
IGFzc2VydF9zdWNjZXNzKHJlc3BvbnNlKQorICAgIGFzc2VydCBzZXNzaW9uLmV4ZWN1dGVfc2Ny
aXB0KCJyZXR1cm4gd2luZG93LmZ1bGxTY3JlZW4iKSBpcyBGYWxzZQorICAgIGFzc2VydCBzZXNz
aW9uLmV4ZWN1dGVfc2NyaXB0KCJyZXR1cm4gZG9jdW1lbnQuaGlkZGVuIikgaXMgVHJ1ZQorCisK
K2RlZiB0ZXN0X21pbmltaXplKHNlc3Npb24pOgorICAgICIiIgorICAgIDUuIEljb25pZnkgdGhl
IHdpbmRvdy4KKworICAgIFsuLi5dCisKKyAgICBUbyBpY29uaWZ5IHRoZSB3aW5kb3csIGdpdmVu
IGFuIG9wZXJhdGluZyBzeXN0ZW0gbGV2ZWwgd2luZG93IHdpdGggYW4KKyAgICBhc3NvY2lhdGVk
IHRvcC1sZXZlbCBicm93c2luZyBjb250ZXh0LCBydW4gaW1wbGVtZW50YXRpb24tc3BlY2lmaWMK
KyAgICBzdGVwcyB0byBpY29uaWZ5LCBtaW5pbWl6ZSwgb3IgaGlkZSB0aGUgd2luZG93IGZyb20g
dGhlIHZpc2libGUKKyAgICBzY3JlZW4uIERvIG5vdCByZXR1cm4gZnJvbSB0aGlzIG9wZXJhdGlv
biB1bnRpbCB0aGUgdmlzaWJpbGl0eSBzdGF0ZQorICAgIG9mIHRoZSB0b3AtbGV2ZWwgYnJvd3Np
bmcgY29udGV4dCdzIGFjdGl2ZSBkb2N1bWVudCBoYXMgcmVhY2hlZCB0aGUKKyAgICBoaWRkZW4g
c3RhdGUsIG9yIHVudGlsIHRoZSBvcGVyYXRpb24gdGltZXMgb3V0LgorCisgICAgIiIiCisgICAg
YXNzZXJ0IG5vdCBzZXNzaW9uLmV4ZWN1dGVfc2NyaXB0KCJyZXR1cm4gZG9jdW1lbnQuaGlkZGVu
IikKKworICAgIHJlc3BvbnNlID0gbWluaW1pemUoc2Vzc2lvbikKKyAgICBhc3NlcnRfc3VjY2Vz
cyhyZXNwb25zZSkKKworICAgIGFzc2VydCBzZXNzaW9uLmV4ZWN1dGVfc2NyaXB0KCJyZXR1cm4g
ZG9jdW1lbnQuaGlkZGVuIikKKworCitkZWYgdGVzdF9wYXlsb2FkKHNlc3Npb24pOgorICAgICIi
IgorICAgIDYuIFJldHVybiBzdWNjZXNzIHdpdGggdGhlIEpTT04gc2VyaWFsaXphdGlvbiBvZiB0
aGUgY3VycmVudCB0b3AtbGV2ZWwKKyAgICBicm93c2luZyBjb250ZXh0J3Mgd2luZG93IHJlY3Qu
CisKKyAgICBbLi4uXQorCisgICAgQSB0b3AtbGV2ZWwgYnJvd3NpbmcgY29udGV4dCdzIHdpbmRv
dyByZWN0IGlzIGRlZmluZWQgYXMgYQorICAgIGRpY3Rpb25hcnkgb2YgdGhlIHNjcmVlblgsIHNj
cmVlblksIHdpZHRoIGFuZCBoZWlnaHQgYXR0cmlidXRlcyBvZgorICAgIHRoZSBXaW5kb3dQcm94
eS4gSXRzIEpTT04gcmVwcmVzZW50YXRpb24gaXMgdGhlIGZvbGxvd2luZzoKKworICAgICJ4Igor
ICAgICAgICBXaW5kb3dQcm94eSdzIHNjcmVlblggYXR0cmlidXRlLgorCisgICAgInkiCisgICAg
ICAgIFdpbmRvd1Byb3h5J3Mgc2NyZWVuWSBhdHRyaWJ1dGUuCisKKyAgICAid2lkdGgiCisgICAg
ICAgIFdpZHRoIG9mIHRoZSB0b3AtbGV2ZWwgYnJvd3NpbmcgY29udGV4dCdzIG91dGVyIGRpbWVu
c2lvbnMsCisgICAgICAgIGluY2x1ZGluZyBhbnkgYnJvd3NlciBjaHJvbWUgYW5kIGV4dGVybmFs
bHkgZHJhd24gd2luZG93CisgICAgICAgIGRlY29yYXRpb25zIGluIENTUyByZWZlcmVuY2UgcGl4
ZWxzLgorCisgICAgImhlaWdodCIKKyAgICAgICAgSGVpZ2h0IG9mIHRoZSB0b3AtbGV2ZWwgYnJv
d3NpbmcgY29udGV4dCdzIG91dGVyIGRpbWVuc2lvbnMsCisgICAgICAgIGluY2x1ZGluZyBhbnkg
YnJvd3NlciBjaHJvbWUgYW5kIGV4dGVybmFsbHkgZHJhd24gd2luZG93CisgICAgICAgIGRlY29y
YXRpb25zIGluIENTUyByZWZlcmVuY2UgcGl4ZWxzLgorCisgICAgIiIiCisgICAgYXNzZXJ0IG5v
dCBzZXNzaW9uLmV4ZWN1dGVfc2NyaXB0KCJyZXR1cm4gZG9jdW1lbnQuaGlkZGVuIikKKworICAg
IHJlc3BvbnNlID0gbWluaW1pemUoc2Vzc2lvbikKKworICAgIGFzc2VydCByZXNwb25zZS5zdGF0
dXMgPT0gMjAwCisgICAgYXNzZXJ0IGlzaW5zdGFuY2UocmVzcG9uc2UuYm9keVsidmFsdWUiXSwg
ZGljdCkKKworICAgIHZhbHVlID0gcmVzcG9uc2UuYm9keVsidmFsdWUiXQorICAgIGFzc2VydCAi
d2lkdGgiIGluIHZhbHVlCisgICAgYXNzZXJ0ICJoZWlnaHQiIGluIHZhbHVlCisgICAgYXNzZXJ0
ICJ4IiBpbiB2YWx1ZQorICAgIGFzc2VydCAieSIgaW4gdmFsdWUKKyAgICBhc3NlcnQgaXNpbnN0
YW5jZSh2YWx1ZVsid2lkdGgiXSwgaW50KQorICAgIGFzc2VydCBpc2luc3RhbmNlKHZhbHVlWyJo
ZWlnaHQiXSwgaW50KQorICAgIGFzc2VydCBpc2luc3RhbmNlKHZhbHVlWyJ4Il0sIGludCkKKyAg
ICBhc3NlcnQgaXNpbnN0YW5jZSh2YWx1ZVsieSJdLCBpbnQpCisKKyAgICBhc3NlcnQgc2Vzc2lv
bi5leGVjdXRlX3NjcmlwdCgicmV0dXJuIGRvY3VtZW50LmhpZGRlbiIpCisKKworZGVmIHRlc3Rf
bWluaW1pemVfdHdpY2VfaXNfaWRlbXBvdGVudChzZXNzaW9uKToKKyAgICBhc3NlcnQgbm90IHNl
c3Npb24uZXhlY3V0ZV9zY3JpcHQoInJldHVybiBkb2N1bWVudC5oaWRkZW4iKQorCisgICAgZmly
c3RfcmVzcG9uc2UgPSBtaW5pbWl6ZShzZXNzaW9uKQorICAgIGFzc2VydF9zdWNjZXNzKGZpcnN0
X3Jlc3BvbnNlKQorICAgIGFzc2VydCBzZXNzaW9uLmV4ZWN1dGVfc2NyaXB0KCJyZXR1cm4gZG9j
dW1lbnQuaGlkZGVuIikKKworICAgIHNlY29uZF9yZXNwb25zZSA9IG1pbmltaXplKHNlc3Npb24p
CisgICAgYXNzZXJ0X3N1Y2Nlc3Moc2Vjb25kX3Jlc3BvbnNlKQorICAgIGFzc2VydCBzZXNzaW9u
LmV4ZWN1dGVfc2NyaXB0KCJyZXR1cm4gZG9jdW1lbnQuaGlkZGVuIikKZGlmZiAtLWdpdCBhL1dl
YkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvbmF2aWdhdGlvbi9jdXJy
ZW50X3VybC5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMv
bmF2aWdhdGlvbi9jdXJyZW50X3VybC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMC4uNDVlNDYyZmI4ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL25hdmlnYXRpb24vY3VycmVudF91cmwucHkKQEAg
LTAsMCArMSwxMDIgQEAKK2ltcG9ydCBqc29uCitpbXBvcnQgcHl0ZXN0CitpbXBvcnQgdHlwZXMK
KworZnJvbSB0ZXN0cy5zdXBwb3J0LmlubGluZSBpbXBvcnQgaW5saW5lCitmcm9tIHRlc3RzLnN1
cHBvcnQuYXNzZXJ0cyBpbXBvcnQgYXNzZXJ0X2Vycm9yLCBhc3NlcnRfc3VjY2VzcworCithbGVy
dF9kb2MgPSBpbmxpbmUoIjxzY3JpcHQ+d2luZG93LmFsZXJ0KCk8L3NjcmlwdD4iKQorZnJhbWVf
ZG9jID0gaW5saW5lKCI8cD5mcmFtZSIpCitvbmVfZnJhbWVfZG9jID0gaW5saW5lKCI8aWZyYW1l
IHNyYz0nJXMnPjwvaWZyYW1lPiIgJSBmcmFtZV9kb2MpCit0d29fZnJhbWVzX2RvYyA9IGlubGlu
ZSgiPGlmcmFtZSBzcmM9JyVzJz48L2lmcmFtZT4iICUgb25lX2ZyYW1lX2RvYykKKworCisjIFRP
RE8oYXRvKTogNy4xIEdldAorCisKK2RlZiB0ZXN0X2dldF9jdXJyZW50X3VybF9ub19icm93c2lu
Z19jb250ZXh0KHNlc3Npb24sIGNyZWF0ZV93aW5kb3cpOgorICAgICMgNy4yIHN0ZXAgMQorICAg
IHNlc3Npb24ud2luZG93X2hhbmRsZSA9IGNyZWF0ZV93aW5kb3coKQorICAgIHNlc3Npb24uY2xv
c2UoKQorCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwgInNlc3Np
b24vJXMvdXJsIiAlIHNlc3Npb24uc2Vzc2lvbl9pZCkKKworICAgIGFzc2VydF9lcnJvcihyZXN1
bHQsICJubyBzdWNoIHdpbmRvdyIpCisKKworZGVmIHRlc3RfZ2V0X2N1cnJlbnRfdXJsX2FsZXJ0
X3Byb21wdChzZXNzaW9uKToKKyAgICAjIDcuMiBzdGVwIDIKKyAgICBzZXNzaW9uLnVybCA9IGFs
ZXJ0X2RvYworCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwgInNl
c3Npb24vJXMvdXJsIiAlIHNlc3Npb24uc2Vzc2lvbl9pZCkKKworICAgIGFzc2VydF9lcnJvcihy
ZXN1bHQsICJ1bmV4cGVjdGVkIGFsZXJ0IG9wZW4iKQorCitkZWYgdGVzdF9nZXRfY3VycmVudF91
cmxfbWF0Y2hlc19sb2NhdGlvbihzZXNzaW9uKToKKyAgICAjIDcuMiBzdGVwIDMKKyAgICB1cmwg
PSBzZXNzaW9uLmV4ZWN1dGVfc2NyaXB0KCJyZXR1cm4gd2luZG93LmxvY2F0aW9uLmhyZWYiKQor
ICAgIGFzc2VydCBzZXNzaW9uLnVybCA9PSB1cmwKKworZGVmIHRlc3RfZ2V0X2N1cnJlbnRfdXJs
X3BheWxvYWQoc2Vzc2lvbik6CisgICAgIyA3LjIgc3RlcCA0LTUKKyAgICBzZXNzaW9uLnN0YXJ0
KCkKKworICAgIHJlc3VsdCA9IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIkdFVCIsICJzZXNzaW9u
LyVzL3VybCIgJSBzZXNzaW9uLnNlc3Npb25faWQpCisKKyAgICBhc3NlcnQgcmVzdWx0LnN0YXR1
cyA9PSAyMDAKKyAgICBhc3NlcnQgaXNpbnN0YW5jZShyZXN1bHQuYm9keVsidmFsdWUiXSwgYmFz
ZXN0cmluZykKKworZGVmIHRlc3RfZ2V0X2N1cnJlbnRfdXJsX3NwZWNpYWxfcGFnZXMoc2Vzc2lv
bik6CisgICAgc2Vzc2lvbi51cmwgPSAiYWJvdXQ6YmxhbmsiCisKKyAgICByZXN1bHQgPSBzZXNz
aW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLCAic2Vzc2lvbi8lcy91cmwiICUgc2Vzc2lvbi5zZXNz
aW9uX2lkKQorCisgICAgYXNzZXJ0X3N1Y2Nlc3MocmVzdWx0LCAiYWJvdXQ6YmxhbmsiKQorCisj
IFRPRE8oYXRvKTogVGhpcyB0ZXN0IHJlcXVpcmVzIG1vZGlmaWNhdGlvbiB0byBwYXNzIG9uIFdp
bmRvd3MKK2RlZiB0ZXN0X2dldF9jdXJyZW50X3VybF9maWxlX3Byb3RvY29sKHNlc3Npb24pOgor
ICAgICMgdGVzdHMgdGhhdCB0aGUgYnJvd3NpbmcgY29udGV4dCByZW1haW5zIHRoZSBzYW1lCisg
ICAgIyB3aGVuIG5hdmlnYXRlZCBwcml2aWxlZ2VkIGRvY3VtZW50cworICAgIHNlc3Npb24udXJs
ID0gImZpbGU6Ly8vIgorCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VU
IiwgInNlc3Npb24vJXMvdXJsIiAlIHNlc3Npb24uc2Vzc2lvbl9pZCkKKworICAgIGFzc2VydF9z
dWNjZXNzKHJlc3VsdCwgImZpbGU6Ly8vIikKKworIyBUT0RPKGF0byk6IFRlc3QgZm9yIGh0dHA6
Ly8gYW5kIGh0dHBzOi8vIHByb3RvY29scy4KKyMgV2UgbmVlZCB0byBleHBvc2UgYSBmaXh0dXJl
IGZvciBhY2Nlc3NpbmcKKyMgZG9jdW1lbnRzIHNlcnZlZCBieSB3cHRzZXJ2ZSBpbiBvcmRlciB0
byB0ZXN0IHRoaXMuCisKK2RlZiB0ZXN0X3NldF9tYWxmb3JtZWRfdXJsKHNlc3Npb24pOgorICAg
IHJlc3VsdCA9IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIlBPU1QiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgInNlc3Npb24vJXMvdXJsIiAlIHNlc3Npb24uc2Vzc2lvbl9p
ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsidXJsIjogImZvbyJ9KQor
CisgICAgYXNzZXJ0X2Vycm9yKHJlc3VsdCwgImludmFsaWQgYXJndW1lbnQiKQorCitkZWYgdGVz
dF9nZXRfY3VycmVudF91cmxfYWZ0ZXJfbW9kaWZpZWRfbG9jYXRpb24oc2Vzc2lvbik6CisgICAg
c2Vzc2lvbi5leGVjdXRlX3NjcmlwdCgid2luZG93LmxvY2F0aW9uLmhyZWYgPSAnYWJvdXQ6Ymxh
bmsjd2RfdGVzdF9tb2RpZmljYXRpb24nIikKKworICAgIHJlc3VsdCA9IHNlc3Npb24udHJhbnNw
b3J0LnNlbmQoIkdFVCIsICJzZXNzaW9uLyVzL3VybCIgJSBzZXNzaW9uLnNlc3Npb25faWQpCisK
KyAgICBhc3NlcnRfc3VjY2VzcyhyZXN1bHQsICJhYm91dDpibGFuayN3ZF90ZXN0X21vZGlmaWNh
dGlvbiIpCisKK2RlZiB0ZXN0X2dldF9jdXJyZW50X3VybF9uZXN0ZWRfYnJvd3NpbmdfY29udGV4
dChzZXNzaW9uLCBjcmVhdGVfZnJhbWUpOgorICAgIHNlc3Npb24udXJsID0gImFib3V0OmJsYW5r
I3dkX2Zyb21fd2l0aGluX2ZyYW1lIgorICAgIHNlc3Npb24uc3dpdGNoX2ZyYW1lKGNyZWF0ZV9m
cmFtZSgpKQorCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwgInNl
c3Npb24vJXMvdXJsIiAlIHNlc3Npb24uc2Vzc2lvbl9pZCkKKworICAgIGFzc2VydF9zdWNjZXNz
KHJlc3VsdCwgImFib3V0OmJsYW5rI3dkX2Zyb21fd2l0aGluX2ZyYW1lIikKKworZGVmIHRlc3Rf
Z2V0X2N1cnJlbnRfdXJsX25lc3RlZF9icm93c2luZ19jb250ZXh0cyhzZXNzaW9uKToKKyAgICBz
ZXNzaW9uLnVybCA9IHR3b19mcmFtZXNfZG9jCisgICAgdG9wX2xldmVsX3VybCA9IHNlc3Npb24u
dXJsCisKKyAgICBvdXRlcl9mcmFtZSA9IHNlc3Npb24uZmluZC5jc3MoImlmcmFtZSIsIGFsbD1G
YWxzZSkKKyAgICBzZXNzaW9uLnN3aXRjaF9mcmFtZShvdXRlcl9mcmFtZSkKKworICAgIGlubmVy
X2ZyYW1lID0gc2Vzc2lvbi5maW5kLmNzcygiaWZyYW1lIiwgYWxsPUZhbHNlKQorICAgIHNlc3Np
b24uc3dpdGNoX2ZyYW1lKGlubmVyX2ZyYW1lKQorCisgICAgYXNzZXJ0IHNlc3Npb24udXJsID09
IHRvcF9sZXZlbF91cmwKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93
ZWJkcml2ZXIvdGVzdHMvbmF2aWdhdGlvbi9nZXRfdGl0bGUucHkgYi9XZWJEcml2ZXJUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL25hdmlnYXRpb24vZ2V0X3RpdGxlLnB5Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jNDY1OWY5YjlmNwotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvbmF2
aWdhdGlvbi9nZXRfdGl0bGUucHkKQEAgLTAsMCArMSwyODIgQEAKK2ltcG9ydCBweXRlc3QKK2lt
cG9ydCB0aW1lCisKK2Zyb20gdGVzdHMuc3VwcG9ydC5hc3NlcnRzIGltcG9ydCBhc3NlcnRfZXJy
b3IsIGFzc2VydF9zdWNjZXNzLCBhc3NlcnRfZGlhbG9nX2hhbmRsZWQKK2Zyb20gdGVzdHMuc3Vw
cG9ydC5maXh0dXJlcyBpbXBvcnQgY3JlYXRlX2RpYWxvZworZnJvbSB0ZXN0cy5zdXBwb3J0Lmlu
bGluZSBpbXBvcnQgaW5saW5lCisKK2RlZiByZWFkX2dsb2JhbChzZXNzaW9uLCBuYW1lKToKKyAg
ICByZXR1cm4gc2Vzc2lvbi5leGVjdXRlX3NjcmlwdCgicmV0dXJuICVzOyIgJSBuYW1lKQorCisj
IDEuIElmIHRoZSBjdXJyZW50IHRvcC1sZXZlbCBicm93c2luZyBjb250ZXh0IGlzIG5vIGxvbmdl
ciBvcGVuLCByZXR1cm4gZXJyb3IKKyMgICAgd2l0aCBlcnJvciBjb2RlIG5vIHN1Y2ggd2luZG93
LgorZGVmIHRlc3RfdGl0bGVfZnJvbV9jbG9zZWRfY29udGV4dChzZXNzaW9uLCBjcmVhdGVfd2lu
ZG93KToKKyAgICBuZXdfd2luZG93ID0gY3JlYXRlX3dpbmRvdygpCisgICAgc2Vzc2lvbi53aW5k
b3dfaGFuZGxlID0gbmV3X3dpbmRvdworICAgIHNlc3Npb24uY2xvc2UoKQorCisgICAgcmVzdWx0
ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJzZXNzaW9uLyVzL3RpdGxlIiAlIHNlc3Npb24uc2Vzc2lvbl9pZCkKKwor
ICAgIGFzc2VydF9lcnJvcihyZXN1bHQsICJubyBzdWNoIHdpbmRvdyIpCisKKyMgWy4uLl0KKyMg
Mi4gSGFuZGxlIGFueSB1c2VyIHByb21wdHMgYW5kIHJldHVybiBpdHMgdmFsdWUgaWYgaXQgaXMg
YW4gZXJyb3IuCisjIFsuLi5dCisjIEluIG9yZGVyIHRvIGhhbmRsZSBhbnkgdXNlciBwcm9tcHRz
IGEgcmVtb3RlIGVuZCBtdXN0IHRha2UgdGhlIGZvbGxvd2luZworIyBzdGVwczoKKyMgMi4gUnVu
IHRoZSBzdWJzdGVwcyBvZiB0aGUgZmlyc3QgbWF0Y2hpbmcgdXNlciBwcm9tcHQgaGFuZGxlcjoK
KyMKKyMgICAgWy4uLl0KKyMgICAgLSBkaXNtaXNzIHN0YXRlCisjICAgICAgMS4gRGlzbWlzcyB0
aGUgY3VycmVudCB1c2VyIHByb21wdC4KKyMgICAgWy4uLl0KKyMKKyMgMy4gUmV0dXJuIHN1Y2Nl
c3MuCitkZWYgdGVzdF90aXRsZV9oYW5kbGVfcHJvbXB0X2Rpc21pc3MobmV3X3Nlc3Npb24pOgor
ICAgIF8sIHNlc3Npb24gPSBuZXdfc2Vzc2lvbih7ImFsd2F5c01hdGNoIjogeyJ1bmhhbmRsZWRQ
cm9tcHRCZWhhdmlvciI6ICJkaXNtaXNzIn19KQorICAgIHNlc3Npb24udXJsID0gaW5saW5lKCI8
dGl0bGU+V0QgZG9jIHRpdGxlPC90aXRsZT4iKQorCisgICAgZXhwZWN0ZWRfdGl0bGUgPSByZWFk
X2dsb2JhbChzZXNzaW9uLCAiZG9jdW1lbnQudGl0bGUiKQorICAgIGNyZWF0ZV9kaWFsb2coc2Vz
c2lvbikoImFsZXJ0IiwgdGV4dD0iZGlzbWlzcyAjMSIsIHJlc3VsdF92YXI9ImRpc21pc3MxIikK
KworICAgIHJlc3VsdCA9IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIkdFVCIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAic2Vzc2lvbi8lcy90aXRsZSIgJSBzZXNzaW9uLnNl
c3Npb25faWQpCisKKyAgICBhc3NlcnRfc3VjY2VzcyhyZXN1bHQsIGV4cGVjdGVkX3RpdGxlKQor
ICAgIGFzc2VydF9kaWFsb2dfaGFuZGxlZChzZXNzaW9uLCAiZGlzbWlzcyAjMSIpCisgICAgYXNz
ZXJ0IHJlYWRfZ2xvYmFsKHNlc3Npb24sICJkaXNtaXNzMSIpID09IE5vbmUKKworICAgIGV4cGVj
dGVkX3RpdGxlID0gcmVhZF9nbG9iYWwoc2Vzc2lvbiwgImRvY3VtZW50LnRpdGxlIikKKyAgICBj
cmVhdGVfZGlhbG9nKHNlc3Npb24pKCJjb25maXJtIiwgdGV4dD0iZGlzbWlzcyAjMiIsIHJlc3Vs
dF92YXI9ImRpc21pc3MyIikKKworICAgIHJlc3VsdCA9IHNlc3Npb24udHJhbnNwb3J0LnNlbmQo
IkdFVCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2Vzc2lvbi8lcy90
aXRsZSIgJSBzZXNzaW9uLnNlc3Npb25faWQpCisKKyAgICBhc3NlcnRfc3VjY2VzcyhyZXN1bHQs
IGV4cGVjdGVkX3RpdGxlKQorICAgIGFzc2VydF9kaWFsb2dfaGFuZGxlZChzZXNzaW9uLCAiZGlz
bWlzcyAjMiIpCisgICAgYXNzZXJ0IHJlYWRfZ2xvYmFsKHNlc3Npb24sICJkaXNtaXNzMiIpID09
IE5vbmUKKworICAgIGV4cGVjdGVkX3RpdGxlID0gcmVhZF9nbG9iYWwoc2Vzc2lvbiwgImRvY3Vt
ZW50LnRpdGxlIikKKyAgICBjcmVhdGVfZGlhbG9nKHNlc3Npb24pKCJwcm9tcHQiLCB0ZXh0PSJk
aXNtaXNzICMzIiwgcmVzdWx0X3Zhcj0iZGlzbWlzczMiKQorCisgICAgcmVzdWx0ID0gc2Vzc2lv
bi50cmFuc3BvcnQuc2VuZCgiR0VUIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJzZXNzaW9uLyVzL3RpdGxlIiAlIHNlc3Npb24uc2Vzc2lvbl9pZCkKKworICAgIGFzc2Vy
dF9zdWNjZXNzKHJlc3VsdCwgZXhwZWN0ZWRfdGl0bGUpCisgICAgYXNzZXJ0X2RpYWxvZ19oYW5k
bGVkKHNlc3Npb24sICJkaXNtaXNzICMzIikKKyAgICBhc3NlcnQgcmVhZF9nbG9iYWwoc2Vzc2lv
biwgImRpc21pc3MzIikgPT0gTm9uZQorCisjIFsuLi5dCisjIDIuIEhhbmRsZSBhbnkgdXNlciBw
cm9tcHRzIGFuZCByZXR1cm4gaXRzIHZhbHVlIGlmIGl0IGlzIGFuIGVycm9yLgorIyBbLi4uXQor
IyBJbiBvcmRlciB0byBoYW5kbGUgYW55IHVzZXIgcHJvbXB0cyBhIHJlbW90ZSBlbmQgbXVzdCB0
YWtlIHRoZSBmb2xsb3dpbmcKKyMgc3RlcHM6CisjIDIuIFJ1biB0aGUgc3Vic3RlcHMgb2YgdGhl
IGZpcnN0IG1hdGNoaW5nIHVzZXIgcHJvbXB0IGhhbmRsZXI6CisjCisjICAgIFsuLi5dCisjICAg
IC0gYWNjZXB0IHN0YXRlCisjICAgICAgMS4gQWNjZXB0IHRoZSBjdXJyZW50IHVzZXIgcHJvbXB0
LgorIyAgICBbLi4uXQorIworIyAzLiBSZXR1cm4gc3VjY2Vzcy4KK2RlZiB0ZXN0X3RpdGxlX2hh
bmRsZV9wcm9tcHRfYWNjZXB0KG5ld19zZXNzaW9uKToKKyAgICBfLCBzZXNzaW9uID0gbmV3X3Nl
c3Npb24oeyJhbHdheXNNYXRjaCI6IHsidW5oYW5kbGVkUHJvbXB0QmVoYXZpb3IiOiAiYWNjZXB0
In19KQorICAgIHNlc3Npb24udXJsID0gaW5saW5lKCI8dGl0bGU+V0QgZG9jIHRpdGxlPC90aXRs
ZT4iKQorICAgIGNyZWF0ZV9kaWFsb2coc2Vzc2lvbikoImFsZXJ0IiwgdGV4dD0iYWNjZXB0ICMx
IiwgcmVzdWx0X3Zhcj0iYWNjZXB0MSIpCisKKyAgICBleHBlY3RlZF90aXRsZSA9IHJlYWRfZ2xv
YmFsKHNlc3Npb24sICJkb2N1bWVudC50aXRsZSIpCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFu
c3BvcnQuc2VuZCgiR0VUIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJz
ZXNzaW9uLyVzL3RpdGxlIiAlIHNlc3Npb24uc2Vzc2lvbl9pZCkKKworICAgIGFzc2VydF9zdWNj
ZXNzKHJlc3VsdCwgZXhwZWN0ZWRfdGl0bGUpCisgICAgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNl
c3Npb24sICJhY2NlcHQgIzEiKQorICAgIGFzc2VydCByZWFkX2dsb2JhbChzZXNzaW9uLCAiYWNj
ZXB0MSIpID09IE5vbmUKKworICAgIGV4cGVjdGVkX3RpdGxlID0gcmVhZF9nbG9iYWwoc2Vzc2lv
biwgImRvY3VtZW50LnRpdGxlIikKKyAgICBjcmVhdGVfZGlhbG9nKHNlc3Npb24pKCJjb25maXJt
IiwgdGV4dD0iYWNjZXB0ICMyIiwgcmVzdWx0X3Zhcj0iYWNjZXB0MiIpCisKKyAgICByZXN1bHQg
PSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgInNlc3Npb24vJXMvdGl0bGUiICUgc2Vzc2lvbi5zZXNzaW9uX2lkKQorCisg
ICAgYXNzZXJ0X3N1Y2Nlc3MocmVzdWx0LCBleHBlY3RlZF90aXRsZSkKKyAgICBhc3NlcnRfZGlh
bG9nX2hhbmRsZWQoc2Vzc2lvbiwgImFjY2VwdCAjMiIpCisgICAgYXNzZXJ0IHJlYWRfZ2xvYmFs
KHNlc3Npb24sICJhY2NlcHQyIiksIFRydWUKKworICAgIGV4cGVjdGVkX3RpdGxlID0gcmVhZF9n
bG9iYWwoc2Vzc2lvbiwgImRvY3VtZW50LnRpdGxlIikKKyAgICBjcmVhdGVfZGlhbG9nKHNlc3Np
b24pKCJwcm9tcHQiLCB0ZXh0PSJhY2NlcHQgIzMiLCByZXN1bHRfdmFyPSJhY2NlcHQzIikKKwor
ICAgIHJlc3VsdCA9IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIkdFVCIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAic2Vzc2lvbi8lcy90aXRsZSIgJSBzZXNzaW9uLnNlc3Np
b25faWQpCisKKyAgICBhc3NlcnRfc3VjY2VzcyhyZXN1bHQsIGV4cGVjdGVkX3RpdGxlKQorICAg
IGFzc2VydF9kaWFsb2dfaGFuZGxlZChzZXNzaW9uLCAiYWNjZXB0ICMzIikKKyAgICBhc3NlcnQg
cmVhZF9nbG9iYWwoc2Vzc2lvbiwgImFjY2VwdDMiKSA9PSAiIgorCisjIFsuLi5dCisjIDIuIEhh
bmRsZSBhbnkgdXNlciBwcm9tcHRzIGFuZCByZXR1cm4gaXRzIHZhbHVlIGlmIGl0IGlzIGFuIGVy
cm9yLgorIyBbLi4uXQorIyBJbiBvcmRlciB0byBoYW5kbGUgYW55IHVzZXIgcHJvbXB0cyBhIHJl
bW90ZSBlbmQgbXVzdCB0YWtlIHRoZSBmb2xsb3dpbmcKKyMgc3RlcHM6CisjIDIuIFJ1biB0aGUg
c3Vic3RlcHMgb2YgdGhlIGZpcnN0IG1hdGNoaW5nIHVzZXIgcHJvbXB0IGhhbmRsZXI6CisjCisj
ICAgIFsuLi5dCisjICAgIC0gbWlzc2luZyB2YWx1ZSBkZWZhdWx0IHN0YXRlCisjICAgIC0gbm90
IGluIHRoZSB0YWJsZSBvZiBzaW1wbGUgZGlhbG9ncworIyAgICAgIDEuIERpc21pc3MgdGhlIGN1
cnJlbnQgdXNlciBwcm9tcHQuCisjICAgICAgMi4gUmV0dXJuIGVycm9yIHdpdGggZXJyb3IgY29k
ZSB1bmV4cGVjdGVkIGFsZXJ0IG9wZW4uCitkZWYgdGVzdF90aXRsZV9oYW5kbGVfcHJvbXB0X21p
c3NpbmdfdmFsdWUoc2Vzc2lvbiwgY3JlYXRlX2RpYWxvZyk6CisgICAgc2Vzc2lvbi51cmwgPSBp
bmxpbmUoIjx0aXRsZT5XRCBkb2MgdGl0bGU8L3RpdGxlPiIpCisgICAgY3JlYXRlX2RpYWxvZygi
YWxlcnQiLCB0ZXh0PSJkaXNtaXNzICMxIiwgcmVzdWx0X3Zhcj0iZGlzbWlzczEiKQorCisgICAg
cmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJzZXNzaW9uLyVzL3RpdGxlIiAlIHNlc3Npb24uc2Vzc2lvbl9p
ZCkKKworICAgIGFzc2VydF9lcnJvcihyZXN1bHQsICJ1bmV4cGVjdGVkIGFsZXJ0IG9wZW4iKQor
ICAgIGFzc2VydF9kaWFsb2dfaGFuZGxlZChzZXNzaW9uLCAiZGlzbWlzcyAjMSIpCisgICAgYXNz
ZXJ0IHJlYWRfZ2xvYmFsKHNlc3Npb24sICJhY2NlcHQxIikgPT0gTm9uZQorCisgICAgY3JlYXRl
X2RpYWxvZygiY29uZmlybSIsIHRleHQ9ImRpc21pc3MgIzIiLCByZXN1bHRfdmFyPSJkaXNtaXNz
MiIpCisKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlc3Npb24vJXMvdGl0bGUiICUgc2Vzc2lv
bi5zZXNzaW9uX2lkKQorCisgICAgYXNzZXJ0X2Vycm9yKHJlc3VsdCwgInVuZXhwZWN0ZWQgYWxl
cnQgb3BlbiIpCisgICAgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNlc3Npb24sICJkaXNtaXNzICMy
IikKKyAgICBhc3NlcnQgcmVhZF9nbG9iYWwoc2Vzc2lvbiwgImRpc21pc3MyIikgPT0gRmFsc2UK
KworICAgIGNyZWF0ZV9kaWFsb2coInByb21wdCIsIHRleHQ9ImRpc21pc3MgIzMiLCByZXN1bHRf
dmFyPSJkaXNtaXNzMyIpCisKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJH
RVQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlc3Npb24vJXMvdGl0
bGUiICUgc2Vzc2lvbi5zZXNzaW9uX2lkKQorCisgICAgYXNzZXJ0X2Vycm9yKHJlc3VsdCwgInVu
ZXhwZWN0ZWQgYWxlcnQgb3BlbiIpCisgICAgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNlc3Npb24s
ICJkaXNtaXNzICMzIikKKyAgICBhc3NlcnQgcmVhZF9nbG9iYWwoc2Vzc2lvbiwgImRpc21pc3Mz
IikgPT0gTm9uZQorCisjIFRoZSBiZWhhdmlvciBvZiB0aGUgYHdpbmRvdy5wcmludGAgZnVuY3Rp
b24gaXMgcGxhdGZvcm0tZGVwZW5kZW50IGFuZCBtYXkgbm90CisjIHRyaWdnZXIgdGhlIGNyZWF0
aW9uIG9mIGEgZGlhbG9nIGF0IGFsbC4gVGhlcmVmb3JlLCB0aGlzIHRlc3Qgc2hvdWxkIG9ubHkg
YmUKKyMgcnVuIGluIGNvbnRleHRzIHRoYXQgc3VwcG9ydCB0aGUgZGlhbG9nIChhIGNvbmRpdGlv
biB0aGF0IG1heSBub3QgYmUKKyMgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5KS4KKyNkZWYgdGVz
dF90aXRsZV93aXRoX25vbl9zaW1wbGVfZGlhbG9nKHNlc3Npb24pOgorIyAgICBkb2N1bWVudCA9
ICI8dGl0bGU+V2l0aCBub24tc2ltcGxlIGRpYWxvZzwvdGl0bGU+PGgyPkhlbGxvPC9oMj4iCisj
ICAgIHNwYXduID0gIiIiCisjICAgICAgICB2YXIgZG9uZSA9IGFyZ3VtZW50c1swXTsKKyMgICAg
ICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisjICAgICAgICAgICAgZG9uZSgpOworIyAgICAg
ICAgfSwgMCk7CisjICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworIyAgICAgICAgICAg
IHdpbmRvd1sncHJpbnQnXSgpOworIyAgICAgICAgfSwgMCk7CisjICAgICIiIgorIyAgICBzZXNz
aW9uLnVybCA9IGlubGluZShkb2N1bWVudCkKKyMgICAgc2Vzc2lvbi5leGVjdXRlX2FzeW5jX3Nj
cmlwdChzcGF3bikKKyMKKyMgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VU
IiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2Vzc2lvbi8lcy90aXRs
ZSIgJSBzZXNzaW9uLnNlc3Npb25faWQpCisjICAgIGFzc2VydF9lcnJvcihyZXN1bHQsICJ1bmV4
cGVjdGVkIGFsZXJ0IG9wZW4iKQorCisjIFsuLi5dCisjIDMuIExldCB0aXRsZSBiZSB0aGUgaW5p
dGlhbCB2YWx1ZSBvZiB0aGUgdGl0bGUgSURMIGF0dHJpYnV0ZSBvZiB0aGUgY3VycmVudAorIyAg
ICB0b3AtbGV2ZWwgYnJvd3NpbmcgY29udGV4dCdzIGFjdGl2ZSBkb2N1bWVudC4KKyMgNC4gUmV0
dXJuIHN1Y2Nlc3Mgd2l0aCBkYXRhIHRpdGxlLgorIyBbLi4uXQorIyBUaGUgdGl0bGUgYXR0cmli
dXRlIG11c3QsIG9uIGdldHRpbmcsIHJ1biB0aGUgZm9sbG93aW5nIGFsZ29yaXRobToKKyMgWy4u
Ll0KKyMgMi4gT3RoZXJ3aXNlLCBsZXQgdmFsdWUgYmUgdGhlIGNoaWxkIHRleHQgY29udGVudCBv
ZiB0aGUgdGl0bGUgZWxlbWVudCBbLi4uXQorIyBbLi4uXQorIyA0LiBSZXR1cm4gdmFsdWUuCitk
ZWYgdGVzdF90aXRsZV9mcm9tX3RvcF9jb250ZXh0KHNlc3Npb24pOgorICAgIHNlc3Npb24udXJs
ID0gaW5saW5lKCI8dGl0bGU+Rm9vYmFyPC90aXRsZT48aDI+SGVsbG88L2gyPiIpCisKKyAgICBy
ZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgInNlc3Npb24vJXMvdGl0bGUiICUgc2Vzc2lvbi5zZXNzaW9uX2lk
KQorICAgIGFzc2VydF9zdWNjZXNzKHJlc3VsdCwgcmVhZF9nbG9iYWwoc2Vzc2lvbiwgImRvY3Vt
ZW50LnRpdGxlIikpCisKKyMgWy4uLl0KKyMgMy4gTGV0IHRpdGxlIGJlIHRoZSBpbml0aWFsIHZh
bHVlIG9mIHRoZSB0aXRsZSBJREwgYXR0cmlidXRlIG9mIHRoZSBjdXJyZW50CisjICAgIHRvcC1s
ZXZlbCBicm93c2luZyBjb250ZXh0J3MgYWN0aXZlIGRvY3VtZW50LgorIyA0LiBSZXR1cm4gc3Vj
Y2VzcyB3aXRoIGRhdGEgdGl0bGUuCisjIFsuLi5dCisjIFRoZSB0aXRsZSBhdHRyaWJ1dGUgbXVz
dCwgb24gZ2V0dGluZywgcnVuIHRoZSBmb2xsb3dpbmcgYWxnb3JpdGhtOgorIyBbLi4uXQorIyAy
LiBPdGhlcndpc2UsIGxldCB2YWx1ZSBiZSB0aGUgY2hpbGQgdGV4dCBjb250ZW50IG9mIHRoZSB0
aXRsZSBlbGVtZW50IFsuLi5dCisjCisjICAgIFRoZSB0aXRsZSBlbGVtZW50IG9mIGEgZG9jdW1l
bnQgaXMgdGhlIGZpcnN0IHRpdGxlIGVsZW1lbnQgaW4gdGhlIGRvY3VtZW50CisjICAgIChpbiB0
cmVlIG9yZGVyKSwgaWYgdGhlcmUgaXMgb25lLCBvciBudWxsIG90aGVyd2lzZS4KKyMKKyMgWy4u
Ll0KKyMgNC4gUmV0dXJuIHZhbHVlLgorZGVmIHRlc3RfdGl0bGVfd2l0aF9kdXBsaWNhdGVfZWxl
bWVudChzZXNzaW9uKToKKyAgICBzZXNzaW9uLnVybCA9IGlubGluZSgiPHRpdGxlPkZpcnN0PC90
aXRsZT48dGl0bGU+U2Vjb25kPC90aXRsZT4iKQorCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFu
c3BvcnQuc2VuZCgiR0VUIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJz
ZXNzaW9uLyVzL3RpdGxlIiAlIHNlc3Npb24uc2Vzc2lvbl9pZCkKKworICAgIGFzc2VydF9zdWNj
ZXNzKHJlc3VsdCwgcmVhZF9nbG9iYWwoc2Vzc2lvbiwgImRvY3VtZW50LnRpdGxlIikpCisKKyMg
Wy4uLl0KKyMgMy4gTGV0IHRpdGxlIGJlIHRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSB0aXRsZSBJ
REwgYXR0cmlidXRlIG9mIHRoZSBjdXJyZW50CisjICAgIHRvcC1sZXZlbCBicm93c2luZyBjb250
ZXh0J3MgYWN0aXZlIGRvY3VtZW50LgorIyA0LiBSZXR1cm4gc3VjY2VzcyB3aXRoIGRhdGEgdGl0
bGUuCisjIFsuLi5dCisjIFRoZSB0aXRsZSBhdHRyaWJ1dGUgbXVzdCwgb24gZ2V0dGluZywgcnVu
IHRoZSBmb2xsb3dpbmcgYWxnb3JpdGhtOgorIyBbLi4uXQorIyAyLiBPdGhlcndpc2UsIGxldCB2
YWx1ZSBiZSB0aGUgY2hpbGQgdGV4dCBjb250ZW50IG9mIHRoZSB0aXRsZSBlbGVtZW50LCBvcgor
IyAgICB0aGUgZW1wdHkgc3RyaW5nIGlmIHRoZSB0aXRsZSBlbGVtZW50IGlzIG51bGwuCisjIFsu
Li5dCisjIDQuIFJldHVybiB2YWx1ZS4KK2RlZiB0ZXN0X3RpdGxlX3dpdGhvdXRfZWxlbWVudChz
ZXNzaW9uKToKKyAgICBzZXNzaW9uLnVybCA9IGlubGluZSgiPGgyPkhlbGxvPC9oMj4iKQorCisg
ICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJzZXNzaW9uLyVzL3RpdGxlIiAlIHNlc3Npb24uc2Vzc2lv
bl9pZCkKKworICAgIGFzc2VydF9zdWNjZXNzKHJlc3VsdCwgcmVhZF9nbG9iYWwoc2Vzc2lvbiwg
ImRvY3VtZW50LnRpdGxlIikpCisKKyMgWy4uLl0KKyMgMy4gTGV0IHRpdGxlIGJlIHRoZSBpbml0
aWFsIHZhbHVlIG9mIHRoZSB0aXRsZSBJREwgYXR0cmlidXRlIG9mIHRoZSBjdXJyZW50CisjICAg
IHRvcC1sZXZlbCBicm93c2luZyBjb250ZXh0J3MgYWN0aXZlIGRvY3VtZW50LgorIyA0LiBSZXR1
cm4gc3VjY2VzcyB3aXRoIGRhdGEgdGl0bGUuCitkZWYgdGVzdF90aXRsZV9hZnRlcl9tb2RpZmlj
YXRpb24oc2Vzc2lvbik6CisgICAgc2Vzc2lvbi51cmwgPSBpbmxpbmUoIjx0aXRsZT5Jbml0aWFs
PC90aXRsZT48aDI+SGVsbG88L2gyPiIpCisgICAgc2Vzc2lvbi5leGVjdXRlX3NjcmlwdCgiZG9j
dW1lbnQudGl0bGUgPSAndXBkYXRlZCciKQorCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3Bv
cnQuc2VuZCgiR0VUIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXNz
aW9uLyVzL3RpdGxlIiAlIHNlc3Npb24uc2Vzc2lvbl9pZCkKKworICAgIGFzc2VydF9zdWNjZXNz
KHJlc3VsdCwgcmVhZF9nbG9iYWwoc2Vzc2lvbiwgImRvY3VtZW50LnRpdGxlIikpCisKKyMgWy4u
Ll0KKyMgMy4gTGV0IHRpdGxlIGJlIHRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSB0aXRsZSBJREwg
YXR0cmlidXRlIG9mIHRoZSBjdXJyZW50CisjICAgIHRvcC1sZXZlbCBicm93c2luZyBjb250ZXh0
J3MgYWN0aXZlIGRvY3VtZW50LgorIyA0LiBSZXR1cm4gc3VjY2VzcyB3aXRoIGRhdGEgdGl0bGUu
CisjIFsuLi5dCisjIFRoZSB0aXRsZSBhdHRyaWJ1dGUgbXVzdCwgb24gZ2V0dGluZywgcnVuIHRo
ZSBmb2xsb3dpbmcgYWxnb3JpdGhtOgorIyBbLi4uXQorIyAyLiBPdGhlcndpc2UsIGxldCB2YWx1
ZSBiZSB0aGUgY2hpbGQgdGV4dCBjb250ZW50IG9mIHRoZSB0aXRsZSBlbGVtZW50IFsuLi5dCisj
IDMuIFN0cmlwIGFuZCBjb2xsYXBzZSBBU0NJSSB3aGl0ZXNwYWNlIGluIHZhbHVlLgorIyA0LiBS
ZXR1cm4gdmFsdWUuCitkZWYgdGVzdF90aXRsZV9zdHJpcF9hbmRfY29sbGFwc2Uoc2Vzc2lvbik6
CisgICAgZG9jdW1lbnQgPSAiPHRpdGxlPiAgIGEgYlx0Y1xuZFx0IFxuIGVcdFxuIDwvdGl0bGU+
PGgyPkhlbGxvPC9oMj4iCisgICAgc2Vzc2lvbi51cmwgPSBpbmxpbmUoZG9jdW1lbnQpCisKKyAg
ICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgInNlc3Npb24vJXMvdGl0bGUiICUgc2Vzc2lvbi5zZXNzaW9u
X2lkKQorCisgICAgYXNzZXJ0X3N1Y2Nlc3MocmVzdWx0LCByZWFkX2dsb2JhbChzZXNzaW9uLCAi
ZG9jdW1lbnQudGl0bGUiKSkKKworIyBbLi4uXQorIyAzLiBMZXQgdGl0bGUgYmUgdGhlIGluaXRp
YWwgdmFsdWUgb2YgdGhlIHRpdGxlIElETCBhdHRyaWJ1dGUgb2YgdGhlIGN1cnJlbnQKKyMgICAg
dG9wLWxldmVsIGJyb3dzaW5nIGNvbnRleHQncyBhY3RpdmUgZG9jdW1lbnQuCisjIDQuIFJldHVy
biBzdWNjZXNzIHdpdGggZGF0YSB0aXRsZS4KK2RlZiB0ZXN0X3RpdGxlX2Zyb21fZnJhbWUoc2Vz
c2lvbiwgY3JlYXRlX2ZyYW1lKToKKyAgICBzZXNzaW9uLnVybCA9IGlubGluZSgiPHRpdGxlPlBh
cmVudDwvdGl0bGU+cGFyZW50IikKKworICAgIHNlc3Npb24uc3dpdGNoX2ZyYW1lKGNyZWF0ZV9m
cmFtZSgpKQorICAgIHNlc3Npb24uc3dpdGNoX2ZyYW1lKGNyZWF0ZV9mcmFtZSgpKQorCisgICAg
cmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJzZXNzaW9uLyVzL3RpdGxlIiAlIHNlc3Npb24uc2Vzc2lvbl9p
ZCkKKworICAgIGFzc2VydF9zdWNjZXNzKHJlc3VsdCwgcmVhZF9nbG9iYWwoc2Vzc2lvbiwgImRv
Y3VtZW50LnRpdGxlIikpCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViZHJpdmVyL3Rlc3RzL3JldHJpZXZhbC9fX2luaXRfXy5weSBiL1dlYkRyaXZlclRlc3RzL2lt
cG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvcmV0cmlldmFsL19faW5pdF9fLnB5Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lNjlkZTI5YmIyZApkaWZmIC0tZ2l0IGEv
V2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9yZXRyaWV2YWwvZmlu
ZF9lbGVtZW50LnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0
cy9yZXRyaWV2YWwvZmluZF9lbGVtZW50LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi5kNTljNzgyMzQyMQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3Rz
L2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvcmV0cmlldmFsL2ZpbmRfZWxlbWVudC5weQpA
QCAtMCwwICsxLDU5IEBACitpbXBvcnQgcHl0ZXN0CisKKworZnJvbSB0ZXN0cy5zdXBwb3J0LmFz
c2VydHMgaW1wb3J0IGFzc2VydF9lcnJvciwgYXNzZXJ0X3N1Y2Nlc3MKK2Zyb20gdGVzdHMuc3Vw
cG9ydC5pbmxpbmUgaW1wb3J0IGlubGluZQorCisKK2RlZiBmaW5kX2VsZW1lbnQoc2Vzc2lvbiwg
dXNpbmcsIHZhbHVlKToKKyAgICByZXR1cm4gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiUE9TVCIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlc3Npb24vJXMvZWxlbWVudCIg
JSBzZXNzaW9uLnNlc3Npb25faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
eyJ1c2luZyI6IHVzaW5nLCAidmFsdWUiOiB2YWx1ZX0pCisKKworIyAxMi4yIEZpbmQgRWxlbWVu
dAorCitAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoInVzaW5nIiwgWyJhIiwgVHJ1ZSwgTm9uZSwg
MSwgW10sIHt9XSkKK2RlZiB0ZXN0X2ludmFsaWRfdXNpbmdfYXJndW1lbnQoc2Vzc2lvbiwgdXNp
bmcpOgorICAgICMgU3RlcCAxIC0gMgorICAgIHJlc3BvbnNlID0gZmluZF9lbGVtZW50KHNlc3Np
b24sIHVzaW5nLCAidmFsdWUiKQorICAgIGFzc2VydF9lcnJvcihyZXNwb25zZSwgImludmFsaWQg
YXJndW1lbnQiKQorCisKK0BweXRlc3QubWFyay5wYXJhbWV0cml6ZSgidmFsdWUiLCBbTm9uZSwg
W10sIHt9XSkKK2RlZiB0ZXN0X2ludmFsaWRfc2VsZWN0b3JfYXJndW1lbnQoc2Vzc2lvbiwgdmFs
dWUpOgorICAgICMgU3RlcCAzIC0gNAorICAgIHJlc3BvbnNlID0gZmluZF9lbGVtZW50KHNlc3Np
b24sICJjc3Mgc2VsZWN0b3IiLCB2YWx1ZSkKKyAgICBhc3NlcnRfZXJyb3IocmVzcG9uc2UsICJp
bnZhbGlkIGFyZ3VtZW50IikKKworCitkZWYgdGVzdF9jbG9zZWRfY29udGV4dChzZXNzaW9uLCBj
cmVhdGVfd2luZG93KToKKyAgICAjIFN0ZXAgNQorICAgIG5ld193aW5kb3cgPSBjcmVhdGVfd2lu
ZG93KCkKKyAgICBzZXNzaW9uLndpbmRvd19oYW5kbGUgPSBuZXdfd2luZG93CisgICAgc2Vzc2lv
bi5jbG9zZSgpCisKKyAgICByZXNwb25zZSA9IGZpbmRfZWxlbWVudChzZXNzaW9uLCAiY3NzIHNl
bGVjdG9yIiwgImZvbyIpCisKKyAgICBhc3NlcnRfZXJyb3IocmVzcG9uc2UsICJubyBzdWNoIHdp
bmRvdyIpCisKKworQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKCJ1c2luZyx2YWx1ZSIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgWygiY3NzIHNlbGVjdG9yIiwgIiNsaW5rVGV4dCIpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAoImxpbmsgdGV4dCIsICJmdWxsIGxpbmsgdGV4dCIpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAoInBhcnRpYWwgbGluayB0ZXh0IiwgImxpbmsgdGV4
dCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoInRhZyBuYW1lIiwgImEiKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgKCJ4cGF0aCIsICIvL2EiKV0pCitkZWYgdGVzdF9maW5kX2Vs
ZW1lbnQoc2Vzc2lvbiwgdXNpbmcsIHZhbHVlKToKKyAgICAjIFN0ZXAgOCAtIDkKKyAgICBzZXNz
aW9uLnVybCA9IGlubGluZSgiPGEgaHJlZj0jIGlkPWxpbmtUZXh0PmZ1bGwgbGluayB0ZXh0PC9h
PiIpCisKKyAgICByZXNwb25zZSA9IGZpbmRfZWxlbWVudChzZXNzaW9uLCB1c2luZywgdmFsdWUp
CisgICAgYXNzZXJ0X3N1Y2Nlc3MocmVzcG9uc2UpCisKKworQHB5dGVzdC5tYXJrLnBhcmFtZXRy
aXplKCJ1c2luZyx2YWx1ZSIsIFsoImNzcyBzZWxlY3RvciIsICIjd29udEV4aXN0IildKQorZGVm
IHRlc3Rfbm9fZWxlbWVudChzZXNzaW9uLCB1c2luZywgdmFsdWUpOgorICAgICMgU3RlcCA4IC0g
OQorICAgIHJlc3BvbnNlID0gZmluZF9lbGVtZW50KHNlc3Npb24sIHVzaW5nLCB2YWx1ZSkKKyAg
ICBhc3NlcnRfZXJyb3IocmVzcG9uc2UsICJubyBzdWNoIGVsZW1lbnQiKQpkaWZmIC0tZ2l0IGEv
V2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9yZXRyaWV2YWwvZmlu
ZF9lbGVtZW50X2Zyb21fZWxlbWVudC5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93
ZWJkcml2ZXIvdGVzdHMvcmV0cmlldmFsL2ZpbmRfZWxlbWVudF9mcm9tX2VsZW1lbnQucHkKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmQxZDhkZDU3MWRmCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9y
ZXRyaWV2YWwvZmluZF9lbGVtZW50X2Zyb21fZWxlbWVudC5weQpAQCAtMCwwICsxLDU5IEBACitp
bXBvcnQgcHl0ZXN0CisKKworZnJvbSB0ZXN0cy5zdXBwb3J0LmFzc2VydHMgaW1wb3J0IGFzc2Vy
dF9lcnJvciwgYXNzZXJ0X3N1Y2Nlc3MKK2Zyb20gdGVzdHMuc3VwcG9ydC5pbmxpbmUgaW1wb3J0
IGlubGluZQorCisKK2RlZiBmaW5kX2VsZW1lbnQoc2Vzc2lvbiwgZWxlbWVudCwgdXNpbmcsIHZh
bHVlKToKKyAgICByZXR1cm4gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiUE9TVCIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlc3Npb24vJXMvZWxlbWVudC8lcy9lbGVtZW50
IiAlIChzZXNzaW9uLnNlc3Npb25faWQsIGVsZW1lbnQpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHsidXNpbmciOiB1c2luZywgInZhbHVlIjogdmFsdWV9KQorCisKK0BweXRl
c3QubWFyay5wYXJhbWV0cml6ZSgidXNpbmciLCBbImEiLCBUcnVlLCBOb25lLCAxLCBbXSwge31d
KQorZGVmIHRlc3RfaW52YWxpZF91c2luZ19hcmd1bWVudChzZXNzaW9uLCB1c2luZyk6CisgICAg
IyBTdGVwIDEgLSAyCisgICAgcmVzcG9uc2UgPSBmaW5kX2VsZW1lbnQoc2Vzc2lvbiwgIm5vdFJl
YWwiLCB1c2luZywgInZhbHVlIikKKyAgICBhc3NlcnRfZXJyb3IocmVzcG9uc2UsICJpbnZhbGlk
IGFyZ3VtZW50IikKKworCitAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoInZhbHVlIiwgW05vbmUs
IFtdLCB7fV0pCitkZWYgdGVzdF9pbnZhbGlkX3NlbGVjdG9yX2FyZ3VtZW50KHNlc3Npb24sIHZh
bHVlKToKKyAgICAjIFN0ZXAgMyAtIDQKKyAgICByZXNwb25zZSA9IGZpbmRfZWxlbWVudChzZXNz
aW9uLCAibm90UmVhbCIsICJjc3Mgc2VsZWN0b3IiLCB2YWx1ZSkKKyAgICBhc3NlcnRfZXJyb3Io
cmVzcG9uc2UsICJpbnZhbGlkIGFyZ3VtZW50IikKKworCitkZWYgdGVzdF9jbG9zZWRfY29udGV4
dChzZXNzaW9uLCBjcmVhdGVfd2luZG93KToKKyAgICAjIFN0ZXAgNQorICAgIG5ld193aW5kb3cg
PSBjcmVhdGVfd2luZG93KCkKKyAgICBzZXNzaW9uLndpbmRvd19oYW5kbGUgPSBuZXdfd2luZG93
CisgICAgc2Vzc2lvbi5jbG9zZSgpCisKKyAgICByZXNwb25zZSA9IGZpbmRfZWxlbWVudChzZXNz
aW9uLCAibm90UmVhbCIsICJjc3Mgc2VsZWN0b3IiLCAiZm9vIikKKworICAgIGFzc2VydF9lcnJv
cihyZXNwb25zZSwgIm5vIHN1Y2ggd2luZG93IikKKworCitAcHl0ZXN0Lm1hcmsucGFyYW1ldHJp
emUoInVzaW5nLHZhbHVlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbKCJjc3Mgc2VsZWN0
b3IiLCAiI2xpbmtUZXh0IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgibGluayB0ZXh0
IiwgImZ1bGwgbGluayB0ZXh0IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgicGFydGlh
bCBsaW5rIHRleHQiLCAibGluayB0ZXh0IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgi
dGFnIG5hbWUiLCAiYSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoInhwYXRoIiwgIi8v
YSIpXSkKK2RlZiB0ZXN0X2ZpbmRfZWxlbWVudChzZXNzaW9uLCB1c2luZywgdmFsdWUpOgorICAg
ICMgU3RlcCA4IC0gOQorICAgIHNlc3Npb24udXJsID0gaW5saW5lKCI8ZGl2PjxhIGhyZWY9IyBp
ZD1saW5rVGV4dD5mdWxsIGxpbmsgdGV4dDwvYT48L2Rpdj4iKQorICAgIGVsZW1lbnQgPSBzZXNz
aW9uLmZpbmQuY3NzKCJkaXYiLCBhbGw9RmFsc2UpCisgICAgcmVzcG9uc2UgPSBmaW5kX2VsZW1l
bnQoc2Vzc2lvbiwgZWxlbWVudC5pZCwgdXNpbmcsIHZhbHVlKQorICAgIGFzc2VydF9zdWNjZXNz
KHJlc3BvbnNlKQorCisKK0BweXRlc3QubWFyay5wYXJhbWV0cml6ZSgidXNpbmcsdmFsdWUiLFso
ImNzcyBzZWxlY3RvciIsICIjd29udEV4aXN0IildKQorZGVmIHRlc3Rfbm9fZWxlbWVudChzZXNz
aW9uLCB1c2luZywgdmFsdWUpOgorICAgICMgU3RlcCA4IC0gOQorICAgIHNlc3Npb24udXJsID0g
aW5saW5lKCI8ZGl2PjwvZGl2PiIpCisgICAgZWxlbWVudCA9IHNlc3Npb24uZmluZC5jc3MoImRp
diIsIGFsbD1GYWxzZSkKKyAgICByZXNwb25zZSA9IGZpbmRfZWxlbWVudChzZXNzaW9uLCBlbGVt
ZW50LmlkLCB1c2luZywgdmFsdWUpCisgICAgYXNzZXJ0X2Vycm9yKHJlc3BvbnNlLCAibm8gc3Vj
aCBlbGVtZW50IikKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJk
cml2ZXIvdGVzdHMvcmV0cmlldmFsL2ZpbmRfZWxlbWVudF9mcm9tX2VsZW1lbnRzLnB5IGIvV2Vi
RHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9yZXRyaWV2YWwvZmluZF9l
bGVtZW50X2Zyb21fZWxlbWVudHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLjExNmY1ZGRiZWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9yZXRyaWV2YWwvZmluZF9lbGVtZW50X2Zyb21fZWxl
bWVudHMucHkKQEAgLTAsMCArMSw1OCBAQAoraW1wb3J0IHB5dGVzdAorCisKK2Zyb20gdGVzdHMu
c3VwcG9ydC5hc3NlcnRzIGltcG9ydCBhc3NlcnRfZXJyb3IsIGFzc2VydF9zdWNjZXNzCitmcm9t
IHRlc3RzLnN1cHBvcnQuaW5saW5lIGltcG9ydCBpbmxpbmUKKworCitkZWYgZmluZF9lbGVtZW50
cyhzZXNzaW9uLCBlbGVtZW50LCB1c2luZywgdmFsdWUpOgorICAgIHJldHVybiBzZXNzaW9uLnRy
YW5zcG9ydC5zZW5kKCJQT1NUIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
c2Vzc2lvbi8lcy9lbGVtZW50LyVzL2VsZW1lbnRzIiAlIChzZXNzaW9uLnNlc3Npb25faWQsIGVs
ZW1lbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsidXNpbmciOiB1c2lu
ZywgInZhbHVlIjogdmFsdWV9KQorCitAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoInVzaW5nIiwg
WygiYSIpLCAoVHJ1ZSksIChOb25lKSwgKDEpLCAoW10pLCAoe30pXSkKK2RlZiB0ZXN0X2ludmFs
aWRfdXNpbmdfYXJndW1lbnQoc2Vzc2lvbiwgdXNpbmcpOgorICAgICMgU3RlcCAxIC0gMgorICAg
IHJlc3BvbnNlID0gZmluZF9lbGVtZW50cyhzZXNzaW9uLCAibm90UmVhbCIsIHVzaW5nLCAidmFs
dWUiKQorICAgIGFzc2VydF9lcnJvcihyZXNwb25zZSwgImludmFsaWQgYXJndW1lbnQiKQorCisK
K0BweXRlc3QubWFyay5wYXJhbWV0cml6ZSgidmFsdWUiLCBbTm9uZSwgW10sIHt9XSkKK2RlZiB0
ZXN0X2ludmFsaWRfc2VsZWN0b3JfYXJndW1lbnQoc2Vzc2lvbiwgdmFsdWUpOgorICAgICMgU3Rl
cCAzIC0gNAorICAgIHJlc3BvbnNlID0gZmluZF9lbGVtZW50cyhzZXNzaW9uLCAibm90UmVhbCIs
ICJjc3Mgc2VsZWN0b3IiLCB2YWx1ZSkKKyAgICBhc3NlcnRfZXJyb3IocmVzcG9uc2UsICJpbnZh
bGlkIGFyZ3VtZW50IikKKworCitkZWYgdGVzdF9jbG9zZWRfY29udGV4dChzZXNzaW9uLCBjcmVh
dGVfd2luZG93KToKKyAgICAjIFN0ZXAgNQorICAgIG5ld193aW5kb3cgPSBjcmVhdGVfd2luZG93
KCkKKyAgICBzZXNzaW9uLndpbmRvd19oYW5kbGUgPSBuZXdfd2luZG93CisgICAgc2Vzc2lvbi5j
bG9zZSgpCisKKyAgICByZXNwb25zZSA9IGZpbmRfZWxlbWVudHMoc2Vzc2lvbiwgIm5vdFJlYWwi
LCAiY3NzIHNlbGVjdG9yIiwgImZvbyIpCisKKyAgICBhc3NlcnRfZXJyb3IocmVzcG9uc2UsICJu
byBzdWNoIHdpbmRvdyIpCisKKworQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKCJ1c2luZyx2YWx1
ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgWygiY3NzIHNlbGVjdG9yIiwgIiNsaW5rVGV4
dCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoImxpbmsgdGV4dCIsICJmdWxsIGxpbmsg
dGV4dCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoInBhcnRpYWwgbGluayB0ZXh0Iiwg
ImxpbmsgdGV4dCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoInRhZyBuYW1lIiwgImEi
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCJ4cGF0aCIsICIvL2EiKV0pCitkZWYgdGVz
dF9maW5kX2VsZW1lbnRzKHNlc3Npb24sIHVzaW5nLCB2YWx1ZSk6CisgICAgIyBTdGVwIDggLSA5
CisgICAgc2Vzc2lvbi51cmwgPSBpbmxpbmUoIjxkaXY+PGEgaHJlZj0jIGlkPWxpbmtUZXh0PmZ1
bGwgbGluayB0ZXh0PC9hPjwvZGl2PiIpCisgICAgZWxlbWVudCA9IHNlc3Npb24uZmluZC5jc3Mo
ImRpdiIsIGFsbD1GYWxzZSkKKyAgICByZXNwb25zZSA9IGZpbmRfZWxlbWVudHMoc2Vzc2lvbiwg
ZWxlbWVudC5pZCwgdXNpbmcsIHZhbHVlKQorICAgIGFzc2VydF9zdWNjZXNzKHJlc3BvbnNlKQor
CisKK0BweXRlc3QubWFyay5wYXJhbWV0cml6ZSgidXNpbmcsdmFsdWUiLCBbKCJjc3Mgc2VsZWN0
b3IiLCAiI3dvbnRFeGlzdCIpXSkKK2RlZiB0ZXN0X25vX2VsZW1lbnQoc2Vzc2lvbiwgdXNpbmcs
IHZhbHVlKToKKyAgICAjIFN0ZXAgOCAtIDkKKyAgICBzZXNzaW9uLnVybCA9IGlubGluZSgiPGRp
dj48L2Rpdj4iKQorICAgIGVsZW1lbnQgPSBzZXNzaW9uLmZpbmQuY3NzKCJkaXYiLCBhbGw9RmFs
c2UpCisgICAgcmVzcG9uc2UgPSBmaW5kX2VsZW1lbnRzKHNlc3Npb24sIGVsZW1lbnQuaWQsIHVz
aW5nLCB2YWx1ZSkKKyAgICBhc3NlcnQgcmVzcG9uc2UuYm9keVsidmFsdWUiXSA9PSBbXQpkaWZm
IC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9yZXRy
aWV2YWwvZmluZF9lbGVtZW50cy5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJk
cml2ZXIvdGVzdHMvcmV0cmlldmFsL2ZpbmRfZWxlbWVudHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAuLjM4MTI2OTRmOWY2Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vi
RHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9yZXRyaWV2YWwvZmluZF9l
bGVtZW50cy5weQpAQCAtMCwwICsxLDYwIEBACitpbXBvcnQgcHl0ZXN0CisKK2Zyb20gdGVzdHMu
c3VwcG9ydC5hc3NlcnRzIGltcG9ydCBhc3NlcnRfZXJyb3IsIGFzc2VydF9zdWNjZXNzCitmcm9t
IHRlc3RzLnN1cHBvcnQuaW5saW5lIGltcG9ydCBpbmxpbmUKKworCitkZWYgZmluZF9lbGVtZW50
cyhzZXNzaW9uLCB1c2luZywgdmFsdWUpOgorICAgIHJldHVybiBzZXNzaW9uLnRyYW5zcG9ydC5z
ZW5kKCJQT1NUIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2Vzc2lvbi8l
cy9lbGVtZW50cyIgJSBzZXNzaW9uLnNlc3Npb25faWQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeyJ1c2luZyI6IHVzaW5nLCAidmFsdWUiOiB2YWx1ZX0pCisKKworQHB5dGVz
dC5tYXJrLnBhcmFtZXRyaXplKCJ1c2luZyIsIFsiYSIsIFRydWUsIE5vbmUsIDEsIFtdLCB7fV0p
CitkZWYgdGVzdF9pbnZhbGlkX3VzaW5nX2FyZ3VtZW50KHNlc3Npb24sIHVzaW5nKToKKyAgICAj
IFN0ZXAgMSAtIDIKKyAgICByZXNwb25zZSA9IGZpbmRfZWxlbWVudHMoc2Vzc2lvbiwgdXNpbmcs
ICJ2YWx1ZSIpCisgICAgYXNzZXJ0X2Vycm9yKHJlc3BvbnNlLCAiaW52YWxpZCBhcmd1bWVudCIp
CisKKworQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKCJ2YWx1ZSIsIFtOb25lLCBbXSwge31dKQor
ZGVmIHRlc3RfaW52YWxpZF9zZWxlY3Rvcl9hcmd1bWVudChzZXNzaW9uLCB2YWx1ZSk6CisgICAg
IyBTdGVwIDMgLSA0CisgICAgcmVzcG9uc2UgPSBmaW5kX2VsZW1lbnRzKHNlc3Npb24sICJjc3Mg
c2VsZWN0b3IiLCB2YWx1ZSkKKyAgICBhc3NlcnRfZXJyb3IocmVzcG9uc2UsICJpbnZhbGlkIGFy
Z3VtZW50IikKKworCitkZWYgdGVzdF9jbG9zZWRfY29udGV4dChzZXNzaW9uLCBjcmVhdGVfd2lu
ZG93KToKKyAgICAjIFN0ZXAgNQorICAgIG5ld193aW5kb3cgPSBjcmVhdGVfd2luZG93KCkKKyAg
ICBzZXNzaW9uLndpbmRvd19oYW5kbGUgPSBuZXdfd2luZG93CisgICAgc2Vzc2lvbi5jbG9zZSgp
CisKKyAgICByZXNwb25zZSA9IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIlBPU1QiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2Vzc2lvbi8lcy9lbGVtZW50cyIgJSBz
ZXNzaW9uLnNlc3Npb25faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHsidXNpbmciOiAiY3NzIHNlbGVjdG9yIiwgInZhbHVlIjogImZvbyJ9KQorCisgICAgYXNzZXJ0
X2Vycm9yKHJlc3BvbnNlLCAibm8gc3VjaCB3aW5kb3ciKQorCisKK0BweXRlc3QubWFyay5wYXJh
bWV0cml6ZSgidXNpbmcsdmFsdWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsoImNzcyBz
ZWxlY3RvciIsICIjbGlua1RleHQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCJsaW5r
IHRleHQiLCAiZnVsbCBsaW5rIHRleHQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCJw
YXJ0aWFsIGxpbmsgdGV4dCIsICJsaW5rIHRleHQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgKCJ0YWcgbmFtZSIsICJhIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgieHBhdGgi
LCAiLy9hIildKQorZGVmIHRlc3RfZmluZF9lbGVtZW50cyhzZXNzaW9uLCB1c2luZywgdmFsdWUp
OgorICAgICMgU3RlcCA4IC0gOQorICAgIHNlc3Npb24udXJsID0gaW5saW5lKCI8YSBocmVmPSMg
aWQ9bGlua1RleHQ+ZnVsbCBsaW5rIHRleHQ8L2E+IikKKworICAgIHJlc3BvbnNlID0gZmluZF9l
bGVtZW50cyhzZXNzaW9uLCB1c2luZywgdmFsdWUpCisgICAgYXNzZXJ0X3N1Y2Nlc3MocmVzcG9u
c2UpCisgICAgYXNzZXJ0IGxlbihyZXNwb25zZS5ib2R5WyJ2YWx1ZSJdKSA9PSAxCisKKworQHB5
dGVzdC5tYXJrLnBhcmFtZXRyaXplKCJ1c2luZyx2YWx1ZSIsIFsoImNzcyBzZWxlY3RvciIsICIj
d29udEV4aXN0IildKQorZGVmIHRlc3Rfbm9fZWxlbWVudChzZXNzaW9uLCB1c2luZywgdmFsdWUp
OgorICAgICMgU3RlcCA4IC0gOQorICAgIHJlc3BvbnNlID0gZmluZF9lbGVtZW50cyhzZXNzaW9u
LCB1c2luZywgdmFsdWUpCisgICAgYXNzZXJ0X3N1Y2Nlc3MocmVzcG9uc2UpCisgICAgYXNzZXJ0
IHJlc3BvbnNlLmJvZHlbInZhbHVlIl0gPT0gW10KZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3Rz
L2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvc2Vzc2lvbnMvbmV3X3Nlc3Npb24vY29uZnRl
c3QucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL3Nlc3Np
b25zL25ld19zZXNzaW9uL2NvbmZ0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi5kM2VlMTk5ZmIyOAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3Rz
L2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvc2Vzc2lvbnMvbmV3X3Nlc3Npb24vY29uZnRl
c3QucHkKQEAgLTAsMCArMSwyMiBAQAoraW1wb3J0IHB5dGVzdAoraW1wb3J0IHN5cworCitpbXBv
cnQgd2ViZHJpdmVyCisKKworZGVmIHByb2R1Y3QoYSwgYik6CisgICAgcmV0dXJuIFsoYSwgaXRl
bSkgZm9yIGl0ZW0gaW4gYl0KKworCitkZWYgZmxhdHRlbihsKToKKyAgICByZXR1cm4gW2l0ZW0g
Zm9yIHggaW4gbCBmb3IgaXRlbSBpbiB4XQorCitAcHl0ZXN0LmZpeHR1cmUoc2NvcGU9InNlc3Np
b24iKQorZGVmIHBsYXRmb3JtX25hbWUoKToKKyAgICByZXR1cm4geworICAgICAgICAibGludXgy
IjogImxpbnV4IiwKKyAgICAgICAgIndpbjMyIjogIndpbmRvd3MiLAorICAgICAgICAiY3lnd2lu
IjogIndpbmRvd3MiLAorICAgICAgICAiZGFyd2luIjogIm1hYyIKKyAgICB9LmdldChzeXMucGxh
dGZvcm0pCisKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2
ZXIvdGVzdHMvc2Vzc2lvbnMvbmV3X3Nlc3Npb24vY3JlYXRlLnB5IGIvV2ViRHJpdmVyVGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9zZXNzaW9ucy9uZXdfc2Vzc2lvbi9jcmVhdGUu
cHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjU3NjZkYmRhOGZkCi0t
LSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90
ZXN0cy9zZXNzaW9ucy9uZXdfc2Vzc2lvbi9jcmVhdGUucHkKQEAgLTAsMCArMSwyNyBAQAorI01F
VEE6IHRpbWVvdXQ9bG9uZworCitpbXBvcnQgcHl0ZXN0CisKK2Zyb20gY29uZnRlc3QgaW1wb3J0
IHByb2R1Y3QsIGZsYXR0ZW4KKworCisjIE5vdGUgdGhhdCB3ZSBjYW4gb25seSB0ZXN0IHRoaW5n
cyBoZXJlIGFsbCBpbXBsZW1lbnRhdGlvbnMgbXVzdCBzdXBwb3J0Cit2YWxpZF9kYXRhID0gWwor
ICAgICgiYWNjZXB0SW5zZWN1cmVDZXJ0cyIsIFtGYWxzZSwgTm9uZV0pLAorICAgICgiYnJvd3Nl
ck5hbWUiLCBbTm9uZV0pLAorICAgICgiYnJvd3NlclZlcnNpb24iLCBbTm9uZV0pLAorICAgICgi
cGxhdGZvcm1OYW1lIiwgW05vbmVdKSwKKyAgICAoInBhZ2VMb2FkU3RyYXRlZ3kiLCBbIm5vbmUi
LCAiZWFnZXIiLCAibm9ybWFsIiwgTm9uZV0pLAorICAgICgicHJveHkiLCBbTm9uZV0pLAorICAg
ICgidW5oYW5kbGVkUHJvbXB0QmVoYXZpb3IiLCBbImRpc21pc3MiLCAiYWNjZXB0IiwgTm9uZV0p
LAorICAgICgidGVzdDpleHRlbnNpb24iLCBbVHJ1ZSwgImFiYyIsIDEyMywgW10sIHsia2V5Ijog
InZhbHVlIn0sIE5vbmVdKSwKK10KKworCitAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoImJvZHki
LCBbbGFtYmRhIGtleSwgdmFsdWU6IHsiYWx3YXlzTWF0Y2giOiB7a2V5OiB2YWx1ZX19LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSBrZXksIHZhbHVlOiB7ImZpcnN0
TWF0Y2giOiBbe2tleTogdmFsdWV9XX1dKQorQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKCJrZXks
dmFsdWUiLCBmbGF0dGVuKHByb2R1Y3QoKml0ZW0pIGZvciBpdGVtIGluIHZhbGlkX2RhdGEpKQor
ZGVmIHRlc3RfdmFsaWQobmV3X3Nlc3Npb24sIGJvZHksIGtleSwgdmFsdWUpOgorICAgIHJlc3Ag
PSBuZXdfc2Vzc2lvbih7ImNhcGFiaWxpdGllcyI6IGJvZHkoa2V5LCB2YWx1ZSl9KQorCisjIENv
bnRpbnVlZCBpbiBjcmVhdGUtMS5weSB0byBhdm9pZCB0aW1lb3V0cwpkaWZmIC0tZ2l0IGEvV2Vi
RHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9zZXNzaW9ucy9uZXdfc2Vz
c2lvbi9kZWZhdWx0X3ZhbHVlcy5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJk
cml2ZXIvdGVzdHMvc2Vzc2lvbnMvbmV3X3Nlc3Npb24vZGVmYXVsdF92YWx1ZXMucHkKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmJmZTQxNDRmNWEzCi0tLSAvZGV2L251
bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9zZXNz
aW9ucy9uZXdfc2Vzc2lvbi9kZWZhdWx0X3ZhbHVlcy5weQpAQCAtMCwwICsxLDQ4IEBACisjIE1F
VEE6IHRpbWVvdXQ9bG9uZworCitpbXBvcnQgdXVpZAorCitpbXBvcnQgcHl0ZXN0CisKK2Zyb20g
d2ViZHJpdmVyIGltcG9ydCBlcnJvcgorCisKK2RlZiB0ZXN0X2Jhc2ljKG5ld19zZXNzaW9uKToK
KyAgICByZXNwLCBfID0gbmV3X3Nlc3Npb24oeyJjYXBhYmlsaXRpZXMiOiB7fX0pCisgICAgYXNz
ZXJ0IHNldChyZXNwLmtleXMoKSkgPT0geyJzZXNzaW9uSWQiLCAiY2FwYWJpbGl0aWVzIn0KKwor
CitkZWYgdGVzdF9yZXBlYXRfbmV3X3Nlc3Npb24obmV3X3Nlc3Npb24pOgorICAgIHJlc3AsIF8g
PSBuZXdfc2Vzc2lvbih7ImNhcGFiaWxpdGllcyI6IHt9fSkKKyAgICB3aXRoIHB5dGVzdC5yYWlz
ZXMoZXJyb3IuU2Vzc2lvbk5vdENyZWF0ZWRFeGNlcHRpb24pOgorICAgICAgICBuZXdfc2Vzc2lv
bih7ImNhcGFiaWxpdGllcyI6IHt9fSkKKworCitkZWYgdGVzdF9ub19jYXBhYmlsaXRlcyhuZXdf
c2Vzc2lvbik6CisgICAgd2l0aCBweXRlc3QucmFpc2VzKGVycm9yLkludmFsaWRBcmd1bWVudEV4
Y2VwdGlvbik6CisgICAgICAgIG5ld19zZXNzaW9uKHt9KQorCisKK2RlZiB0ZXN0X21pc3Npbmdf
Zmlyc3RfbWF0Y2gobmV3X3Nlc3Npb24pOgorICAgIHJlc3AsIF8gPSBuZXdfc2Vzc2lvbih7ImNh
cGFiaWxpdGllcyI6IHsiYWx3YXlzTWF0Y2giOiB7fX19KQorCisKK2RlZiB0ZXN0X21pc3Npbmdf
YWx3YXlzX21hdGNoKG5ld19zZXNzaW9uKToKKyAgICByZXNwLCBfID0gbmV3X3Nlc3Npb24oeyJj
YXBhYmlsaXRpZXMiOiB7ImZpcnN0TWF0Y2giOiBbe31dfX0pCisKKworZGVmIHRlc3RfZGVzaXJl
ZChuZXdfc2Vzc2lvbik6CisgICAgd2l0aCBweXRlc3QucmFpc2VzKGVycm9yLkludmFsaWRBcmd1
bWVudEV4Y2VwdGlvbik6CisgICAgICAgIHJlc3AsIF8gPSBuZXdfc2Vzc2lvbih7ImRlc2lyZWRD
YXBiaWxpdGllcyI6IHt9fSkKKworCitkZWYgdGVzdF9pZ25vcmVfbm9uX3NwZWNfZmllbGRzX2lu
X2NhcGFiaWxpdGllcyhuZXdfc2Vzc2lvbik6CisgICAgcmVzcCwgXyA9IG5ld19zZXNzaW9uKHsi
Y2FwYWJpbGl0aWVzIjogeyJkZXNpcmVkQ2FwYmlsaXRpZXMiOiB7InBhZ2VMb2FkU3RyYXRlZ3ki
OiAiZWFnZXIifX19KQorICAgIGFzc2VydCByZXNwWyJjYXBhYmlsaXRpZXMiXVsicGFnZUxvYWRT
dHJhdGVneSJdID09ICJub3JtYWwiCisKKworZGVmIHRlc3RfdmFsaWRfYnV0X3VubWF0Y2hhYmxl
X2tleShuZXdfc2Vzc2lvbik6CisgICAgcmVzcCwgXyA9IG5ld19zZXNzaW9uKHsiY2FwYWJpbGl0
aWVzIjogeworICAgICAgImZpcnN0TWF0Y2giOiBbeyJwYWdlTG9hZFN0cmF0ZWd5IjogImVhZ2Vy
IiwgImZvbzp1bm1hdGNoYWJsZSI6IFRydWV9LAorICAgICAgICAgICAgICAgICAgICAgeyJwYWdl
TG9hZFN0cmF0ZWd5IjogIm5vbmUifV19fSkKKyAgICBhc3NlcnQgcmVzcFsiY2FwYWJpbGl0aWVz
Il1bInBhZ2VMb2FkU3RyYXRlZ3kiXSA9PSAibm9uZSIKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRl
c3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvc2Vzc2lvbnMvbmV3X3Nlc3Npb24vaW52
YWxpZF9jYXBhYmlsaXRpZXMucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJp
dmVyL3Rlc3RzL3Nlc3Npb25zL25ld19zZXNzaW9uL2ludmFsaWRfY2FwYWJpbGl0aWVzLnB5Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zMjVjOWIyODFhZgotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMv
c2Vzc2lvbnMvbmV3X3Nlc3Npb24vaW52YWxpZF9jYXBhYmlsaXRpZXMucHkKQEAgLTAsMCArMSw4
OCBAQAorI01FVEE6IHRpbWVvdXQ9bG9uZworCitpbXBvcnQgcHl0ZXN0Citmcm9tIHdlYmRyaXZl
ciBpbXBvcnQgZXJyb3IKKworZnJvbSBjb25mdGVzdCBpbXBvcnQgcHJvZHVjdCwgZmxhdHRlbgor
CisKK0BweXRlc3QubWFyay5wYXJhbWV0cml6ZSgidmFsdWUiLCBbTm9uZSwgMSwgInt9IiwgW11d
KQorZGVmIHRlc3RfaW52YWxpZF9jYXBhYmlsaXRlcyhuZXdfc2Vzc2lvbiwgdmFsdWUpOgorICAg
IHdpdGggcHl0ZXN0LnJhaXNlcyhlcnJvci5JbnZhbGlkQXJndW1lbnRFeGNlcHRpb24pOgorICAg
ICAgICBuZXdfc2Vzc2lvbih7ImNhcGFiaWxpdGllcyI6IHZhbHVlfSkKKworCitAcHl0ZXN0Lm1h
cmsucGFyYW1ldHJpemUoInZhbHVlIiwgW05vbmUsIDEsICJ7fSIsIFtdXSkKK2RlZiB0ZXN0X2lu
dmFsaWRfYWx3YXlzX21hdGNoKG5ld19zZXNzaW9uLCB2YWx1ZSk6CisgICAgd2l0aCBweXRlc3Qu
cmFpc2VzKGVycm9yLkludmFsaWRBcmd1bWVudEV4Y2VwdGlvbik6CisgICAgICAgIG5ld19zZXNz
aW9uKHsiY2FwYWJpbGl0aWVzIjogeyJhbHdheXNNYXRjaCI6IHZhbHVlfX0pCisKKworQHB5dGVz
dC5tYXJrLnBhcmFtZXRyaXplKCJ2YWx1ZSIsIFtOb25lLCAxLCAiW10iLCB7fV0pCitkZWYgdGVz
dF9pbnZhbGlkX2ZpcnN0X21hdGNoKG5ld19zZXNzaW9uLCB2YWx1ZSk6CisgICAgd2l0aCBweXRl
c3QucmFpc2VzKGVycm9yLkludmFsaWRBcmd1bWVudEV4Y2VwdGlvbik6CisgICAgICAgIG5ld19z
ZXNzaW9uKHsiY2FwYWJpbGl0aWVzIjogeyJmaXJzdE1hdGNoIjogdmFsdWV9fSkKKworCitpbnZh
bGlkX2RhdGEgPSBbCisgICAgKCJhY2NlcHRJbnNlY3VyZUNlcnRzIiwgWzEsIFtdLCB7fSwgImZh
bHNlIl0pLAorICAgICgiYnJvd3Nlck5hbWUiLCBbMSwgW10sIHt9LCBGYWxzZV0pLAorICAgICgi
YnJvd3NlclZlcnNpb24iLCBbMSwgW10sIHt9LCBGYWxzZV0pLAorICAgICgicGxhdGZvcm1OYW1l
IiwgWzEsIFtdLCB7fSwgRmFsc2VdKSwKKyAgICAoInBhZ2VMb2FkU3RyYXRlZ3kiLCBbMSwgW10s
IHt9LCBGYWxzZSwgImludmFsaWQiLCAiTk9ORSIsICJFYWdlciIsICJlYWdlcmJsYWgiLCAiaW50
ZXJhY3RpdmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiIGVhZ2VyIiwgImVhZ2VyICJd
KSwKKyAgICAoInByb3h5IiwgWzEsIFtdLCAie30iLCB7InByb3h5VHlwZSI6ICJTWVNURU0ifSwg
eyJwcm94eVR5cGUiOiAic3lzdGVtU29tZXRoaW5nIn0sCisgICAgICAgICAgICAgICB7InByb3h5
IHR5cGUiOiAicGFjIn0sIHsicHJveHktVHlwZSI6ICJzeXN0ZW0ifSwgeyJwcm94eV90eXBlIjog
InN5c3RlbSJ9LAorICAgICAgICAgICAgICAgeyJwcm94eXR5cGUiOiAic3lzdGVtIn0sIHsiUFJP
WFlUWVBFIjogInN5c3RlbSJ9LCB7InByb3h5VHlwZSI6IE5vbmV9LAorICAgICAgICAgICAgICAg
eyJwcm94eVR5cGUiOiAxfSwgeyJwcm94eVR5cGUiOiBbXX0sIHsicHJveHlUeXBlIjogeyJ2YWx1
ZSI6ICJzeXN0ZW0ifX0sCisgICAgICAgICAgICAgICB7IiBwcm94eVR5cGUiOiAic3lzdGVtIn0s
IHsicHJveHlUeXBlICI6ICJzeXN0ZW0ifSwgeyJwcm94eVR5cGUgIjogIiBzeXN0ZW0ifSwKKyAg
ICAgICAgICAgICAgIHsicHJveHlUeXBlIjogInN5c3RlbSAifV0pLAorICAgICgidGltZW91dHMi
LCBbMSwgW10sICJ7fSIsIHt9LCBGYWxzZSwgeyJwYWdlTE9BRCI6IDEwfSwgeyJwYWdlIGxvYWQi
OiAxMH0sCisgICAgICAgICAgICAgICAgICB7InBhZ2UgbG9hZCI6IDEwfSwgeyJwYWdlTG9hZCI6
ICIxMCJ9LCB7InBhZ2VMb2FkIjogeyJ2YWx1ZSI6IDEwfX0sCisgICAgICAgICAgICAgICAgICB7
ImludmFsaWQiOiAxMH0sIHsicGFnZUxvYWQiOiAtMX0sIHsicGFnZUxvYWQiOiAyKio2NH0sCisg
ICAgICAgICAgICAgICAgICB7InBhZ2VMb2FkIjogTm9uZX0sIHsicGFnZUxvYWQiOiAxLjF9LCB7
InBhZ2VMb2FkIjogMTAsICJpbnZhbGlkIjogMTB9LAorICAgICAgICAgICAgICAgICAgeyIgcGFn
ZUxvYWQiOiAxMH0sIHsicGFnZUxvYWQgIjogMTB9XSksCisgICAgKCJ1bmhhbmRsZWRQcm9tcHRC
ZWhhdmlvciIsIFsxLCBbXSwge30sIEZhbHNlLCAiRElTTUlTUyIsICJkaXNtaXNzQUJDIiwgIkFj
Y2VwdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGRpc21pc3MiLCAiZGlz
bWlzcyAiXSkKK10KKworQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKCJib2R5IiwgW2xhbWJkYSBr
ZXksIHZhbHVlOiB7ImFsd2F5c01hdGNoIjoge2tleTogdmFsdWV9fSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsYW1iZGEga2V5LCB2YWx1ZTogeyJmaXJzdE1hdGNoIjogW3tr
ZXk6IHZhbHVlfV19XSkKK0BweXRlc3QubWFyay5wYXJhbWV0cml6ZSgia2V5LHZhbHVlIiwgZmxh
dHRlbihwcm9kdWN0KCppdGVtKSBmb3IgaXRlbSBpbiBpbnZhbGlkX2RhdGEpKQorZGVmIHRlc3Rf
aW52YWxpZChuZXdfc2Vzc2lvbiwgYm9keSwga2V5LCB2YWx1ZSk6CisgICAgd2l0aCBweXRlc3Qu
cmFpc2VzKGVycm9yLkludmFsaWRBcmd1bWVudEV4Y2VwdGlvbik6CisgICAgICAgIHJlc3AgPSBu
ZXdfc2Vzc2lvbih7ImNhcGFiaWxpdGllcyI6IGJvZHkoa2V5LCB2YWx1ZSl9KQorCisKK2ludmFs
aWRfZXh0ZW5zaW9ucyA9IFsKKyAgICAiZmlyZWZveCIsCisgICAgImZpcmVmb3hfYmluYXJ5IiwK
KyAgICAiZmlyZWZveE9wdGlvbnMiLAorICAgICJjaHJvbWVPcHRpb25zIiwKKyAgICAiYXV0b21h
dGljSW5zcGVjdGlvbiIsCisgICAgImF1dG9tYXRpY1Byb2ZpbGluZyIsCisgICAgInBsYXRmb3Jt
IiwKKyAgICAidmVyc2lvbiIsCisgICAgImJyb3dzZXIiLAorICAgICJwbGF0Zm9ybVZlcnNpb24i
LAorICAgICJqYXZhc2NyaXB0RW5hYmxlZCIsCisgICAgIm5hdGl2ZUV2ZW50cyIsCisgICAgInNl
bGVuaXVtUHJvdG9jb2wiLAorICAgICJwcm9maWxlIiwKKyAgICAidHJ1c3RBbGxTU0xDZXJ0aWZp
Y2F0ZXMiLAorICAgICJpbml0aWFsQnJvd3NlclVybCIsCisgICAgInJlcXVpcmVXaW5kb3dGb2N1
cyIsCisgICAgImxvZ0ZpbGUiLAorICAgICJsb2dMZXZlbCIsCisgICAgInNhZmFyaS5vcHRpb25z
IiwKKyAgICAiZW5zdXJlQ2xlYW5TZXNzaW9uIiwKK10KKworCitAcHl0ZXN0Lm1hcmsucGFyYW1l
dHJpemUoImJvZHkiLCBbbGFtYmRhIGtleSwgdmFsdWU6IHsiYWx3YXlzTWF0Y2giOiB7a2V5OiB2
YWx1ZX19LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSBrZXksIHZh
bHVlOiB7ImZpcnN0TWF0Y2giOiBbe2tleTogdmFsdWV9XX1dKQorQHB5dGVzdC5tYXJrLnBhcmFt
ZXRyaXplKCJrZXkiLCBpbnZhbGlkX2V4dGVuc2lvbnMpCitkZWYgdGVzdF9pbnZhbGlkKG5ld19z
ZXNzaW9uLCBib2R5LCBrZXkpOgorICAgIHdpdGggcHl0ZXN0LnJhaXNlcyhlcnJvci5JbnZhbGlk
QXJndW1lbnRFeGNlcHRpb24pOgorICAgICAgICByZXNwID0gbmV3X3Nlc3Npb24oeyJjYXBhYmls
aXRpZXMiOiBib2R5KGtleSwge30pfSkKKwpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9zZXNzaW9ucy9uZXdfc2Vzc2lvbi9tZXJnZS5weSBi
L1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvc2Vzc2lvbnMvbmV3
X3Nlc3Npb24vbWVyZ2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LjJlNjQ2MjA0NTVjCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYmRyaXZlci90ZXN0cy9zZXNzaW9ucy9uZXdfc2Vzc2lvbi9tZXJnZS5weQpAQCAtMCww
ICsxLDc2IEBACisjTUVUQTogdGltZW91dD1sb25nCisKK2ltcG9ydCBweXRlc3QKK2Zyb20gd2Vi
ZHJpdmVyIGltcG9ydCBlcnJvcgorCitmcm9tIGNvbmZ0ZXN0IGltcG9ydCBwbGF0Zm9ybV9uYW1l
CisKKworQHB5dGVzdC5tYXJrLnNraXBpZihwbGF0Zm9ybV9uYW1lKCkgaXMgTm9uZSwgcmVhc29u
PSJVbnN1cHBvcnRlZCBwbGF0Zm9ybSIpCitAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoImJvZHki
LCBbbGFtYmRhIGtleSwgdmFsdWU6IHsiYWx3YXlzTWF0Y2giOiB7a2V5OiB2YWx1ZX19LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSBrZXksIHZhbHVlOiB7ImZpcnN0
TWF0Y2giOiBbe2tleTogdmFsdWV9XX1dKQorZGVmIHRlc3RfcGxhdGZvcm1fbmFtZShuZXdfc2Vz
c2lvbiwgcGxhdGZvcm1fbmFtZSwgYm9keSk6CisgICAgcmVzcCwgXyA9IG5ld19zZXNzaW9uKHsi
Y2FwYWJpbGl0aWVzIjogYm9keSgicGxhdGZvcm1OYW1lIiwgcGxhdGZvcm1fbmFtZSl9KQorICAg
IGFzc2VydCByZXNwWyJjYXBhYmlsaXRpZXMiXVsicGxhdGZvcm1OYW1lIl0gPT0gcGxhdGZvcm1f
bmFtZQorCisKK2ludmFsaWRfbWVyZ2UgPSBbCisgICAgKCJhY2NlcHRJbnNlY3VyZUNlcnRzIiwg
KFRydWUsIFRydWUpKSwKKyAgICAoInVuaGFuZGxlZFByb21wdEJlaGF2aW9yIiwgKCJhY2NlcHQi
LCAiYWNjZXB0IikpLAorICAgICgidW5oYW5kbGVkUHJvbXB0QmVoYXZpb3IiLCAoImFjY2VwdCIs
ICJkaXNtaXNzIikpLAorICAgICgidGltZW91dHMiLCAoeyJzY3JpcHQiOiAxMH0sIHsic2NyaXB0
IjogMTB9KSksCisgICAgKCJ0aW1lb3V0cyIsICh7InNjcmlwdCI6IDEwfSwgeyJwYWdlTG9hZCI6
IDEwfSkpLAorXQorCisKK0BweXRlc3QubWFyay5wYXJhbWV0cml6ZSgia2V5LHZhbHVlIiwgaW52
YWxpZF9tZXJnZSkKK2RlZiB0ZXN0X21lcmdlX2ludmFsaWQobmV3X3Nlc3Npb24sIGtleSwgdmFs
dWUpOgorICAgIHdpdGggcHl0ZXN0LnJhaXNlcyhlcnJvci5JbnZhbGlkQXJndW1lbnRFeGNlcHRp
b24pOgorICAgICAgICAgbmV3X3Nlc3Npb24oeyJjYXBhYmlsaXRpZXMiOgorICAgICAgICAgICAg
ICAgICAgICAgIHsiYWx3YXlzTWF0Y2giOiB7a2V5OiB2YWx1ZVswXX0sCisgICAgICAgICAgICAg
ICAgICAgICAgICJmaXJzdE1hdGNoIjogW3t9LCB7a2V5OiB2YWx1ZVsxXX1dfX0pCisKKworQHB5
dGVzdC5tYXJrLnNraXBpZihwbGF0Zm9ybV9uYW1lKCkgaXMgTm9uZSwgcmVhc29uPSJVbnN1cHBv
cnRlZCBwbGF0Zm9ybSIpCitkZWYgdGVzdF9tZXJnZV9wbGF0Zm9ybU5hbWUobmV3X3Nlc3Npb24s
IHBsYXRmb3JtX25hbWUpOgorICAgIHJlc3AsIF8gPSBuZXdfc2Vzc2lvbih7ImNhcGFiaWxpdGll
cyI6CisgICAgICAgICAgICAgICAgICAgICAgICB7ImFsd2F5c01hdGNoIjogeyJ0aW1lb3V0cyI6
IHsic2NyaXB0IjogMTB9fX0sCisgICAgICAgICAgICAgICAgICAgICAgICAiZmlyc3RNYXRjaCI6
IFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJwbGF0Zm9ybU5hbWUiOiBwbGF0Zm9ybV9uYW1lLnVwcGVyKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJwYWdlTG9hZFN0cmF0ZWd5IjogIm5vbmUiCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwbGF0Zm9ybU5hbWUiOiBwbGF0Zm9y
bV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFnZUxvYWRTdHJhdGVn
eSI6ICJlYWdlciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICBdfSkKKworICAgIGFzc2VydCByZXNwWyJjYXBhYmlsaXRpZXMiXVsicGxhdGZv
cm1OYW1lIl0gPT0gcGxhdGZvcm1fbmFtZQorICAgIGFzc2VydCByZXNwWyJjYXBhYmlsaXRpZXMi
XVsicGFnZUxvYWRTdHJhdGVneSJdID09ICJlYWdlciIKKworCitkZWYgdGVzdF9tZXJnZV9icm93
c2VyTmFtZShuZXdfc2Vzc2lvbik6CisgICAgcmVzcCwgc2Vzc2lvbiA9IG5ld19zZXNzaW9uKHt9
KQorICAgIGJyb3dzZXJfc2V0dGluZ3MgPSB7CisgICAgICAgICJicm93c2VyTmFtZSI6IHJlc3Bb
ImNhcGFiaWxpdGllcyJdWyJicm93c2VyTmFtZSJdLAorICAgICAgICAiYnJvd3NlclZlcnNpb24i
OiByZXNwWyJjYXBhYmlsaXRpZXMiXVsiYnJvd3NlclZlcnNpb24iXSwKKyAgICAgICAgInBsYXRm
b3JtTmFtZSI6IHJlc3BbImNhcGFiaWxpdGllcyJdWyJwbGF0Zm9ybU5hbWUiXQorICAgIH0KKyAg
ICBzZXNzaW9uLmVuZCgpCisKKyAgICByZXNwLCBfID0gbmV3X3Nlc3Npb24oeyJjYXBhYmlsaXRp
ZXMiOgorICAgICAgICAgICAgICAgICAgICAgICAgeyJhbHdheXNNYXRjaCI6IHsidGltZW91dHMi
OiB7InNjcmlwdCI6IDEwfX19LAorICAgICAgICAgICAgICAgICAgICAgICAgImZpcnN0TWF0Y2gi
OiBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiYnJvd3Nlck5hbWUiOiBicm93c2VyX3NldHRpbmdzWyJicm93c2VyTmFtZSJd
ICsgImludmFsaWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFnZUxvYWRT
dHJhdGVneSI6ICJub25lIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
YnJvd3Nlck5hbWUiOiBicm93c2VyX3NldHRpbmdzWyJicm93c2VyTmFtZSJdLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAicGFnZUxvYWRTdHJhdGVneSI6ICJlYWdlciIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBdfSkKKwor
ICAgIGFzc2VydCByZXNwWyJjYXBhYmlsaXRpZXMiXVsiYnJvd3Nlck5hbWUiXSA9PSBicm93c2Vy
X3NldHRpbmdzWydicm93c2VyTmFtZSddCisgICAgYXNzZXJ0IHJlc3BbImNhcGFiaWxpdGllcyJd
WyJwYWdlTG9hZFN0cmF0ZWd5Il0gPT0gImVhZ2VyIgpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9zZXNzaW9ucy9uZXdfc2Vzc2lvbi9yZXNw
b25zZS5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvc2Vz
c2lvbnMvbmV3X3Nlc3Npb24vcmVzcG9uc2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLjY2Njk1NzNiYTJjCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9zZXNzaW9ucy9uZXdfc2Vzc2lvbi9yZXNw
b25zZS5weQpAQCAtMCwwICsxLDU0IEBACisjIE1FVEE6IHRpbWVvdXQ9bG9uZworCitpbXBvcnQg
dXVpZAorCitkZWYgdGVzdF9yZXNwX3Nlc3Npb25pZChuZXdfc2Vzc2lvbik6CisgICAgcmVzcCwg
XyA9IG5ld19zZXNzaW9uKHsiY2FwYWJpbGl0aWVzIjoge319KQorICAgIGFzc2VydCBpc2luc3Rh
bmNlKHJlc3BbInNlc3Npb25JZCJdLCB1bmljb2RlKQorICAgIHV1aWQuVVVJRChoZXg9cmVzcFsi
c2Vzc2lvbklkIl0pCisKKworZGVmIHRlc3RfcmVzcF9jYXBhYmlsaXRlcyhuZXdfc2Vzc2lvbik6
CisgICAgcmVzcCwgXyA9IG5ld19zZXNzaW9uKHsiY2FwYWJpbGl0aWVzIjoge319KQorICAgIGFz
c2VydCBpc2luc3RhbmNlKHJlc3BbInNlc3Npb25JZCJdLCB1bmljb2RlKQorICAgIGFzc2VydCBp
c2luc3RhbmNlKHJlc3BbImNhcGFiaWxpdGllcyJdLCBkaWN0KQorICAgIGFzc2VydCB7ImJyb3dz
ZXJOYW1lIiwKKyAgICAgICAgICAgICJicm93c2VyVmVyc2lvbiIsCisgICAgICAgICAgICAicGxh
dGZvcm1OYW1lIiwKKyAgICAgICAgICAgICJhY2NlcHRJbnNlY3VyZUNlcnRzIiwKKyAgICAgICAg
ICAgICJzZXRXaW5kb3dSZWN0IiwKKyAgICAgICAgICAgICJ0aW1lb3V0cyIsCisgICAgICAgICAg
ICAicHJveHkiLAorICAgICAgICAgICAgInBhZ2VMb2FkU3RyYXRlZ3kifS5pc3N1YnNldCgKKyAg
ICAgICAgICAgICAgICBzZXQocmVzcFsiY2FwYWJpbGl0aWVzIl0ua2V5cygpKSkKKworCitkZWYg
dGVzdF9yZXNwX2RhdGEobmV3X3Nlc3Npb24sIHBsYXRmb3JtX25hbWUpOgorICAgIHJlc3AsIF8g
PSBuZXdfc2Vzc2lvbih7ImNhcGFiaWxpdGllcyI6IHt9fSkKKworICAgIGFzc2VydCBpc2luc3Rh
bmNlKHJlc3BbImNhcGFiaWxpdGllcyJdWyJicm93c2VyTmFtZSJdLCB1bmljb2RlKQorICAgIGFz
c2VydCBpc2luc3RhbmNlKHJlc3BbImNhcGFiaWxpdGllcyJdWyJicm93c2VyVmVyc2lvbiJdLCB1
bmljb2RlKQorICAgIGlmIHBsYXRmb3JtX25hbWU6CisgICAgICAgIGFzc2VydCByZXNwWyJjYXBh
YmlsaXRpZXMiXVsicGxhdGZvcm1OYW1lIl0gPT0gcGxhdGZvcm1fbmFtZQorICAgIGVsc2U6Cisg
ICAgICAgIGFzc2VydCAicGxhdGZvcm1OYW1lIiBpbiByZXNwWyJjYXBhYmlsaXRpZXMiXQorICAg
IGFzc2VydCByZXNwWyJjYXBhYmlsaXRpZXMiXVsiYWNjZXB0SW5zZWN1cmVDZXJ0cyJdIGlzIEZh
bHNlCisgICAgYXNzZXJ0IGlzaW5zdGFuY2UocmVzcFsiY2FwYWJpbGl0aWVzIl1bInNldFdpbmRv
d1JlY3QiXSwgYm9vbCkKKyAgICBhc3NlcnQgcmVzcFsiY2FwYWJpbGl0aWVzIl1bInRpbWVvdXRz
Il1bImltcGxpY2l0Il0gPT0gMAorICAgIGFzc2VydCByZXNwWyJjYXBhYmlsaXRpZXMiXVsidGlt
ZW91dHMiXVsicGFnZUxvYWQiXSA9PSAzMDAwMDAKKyAgICBhc3NlcnQgcmVzcFsiY2FwYWJpbGl0
aWVzIl1bInRpbWVvdXRzIl1bInNjcmlwdCJdID09IDMwMDAwCisgICAgYXNzZXJ0IHJlc3BbImNh
cGFiaWxpdGllcyJdWyJwcm94eSJdID09IHt9CisgICAgYXNzZXJ0IHJlc3BbImNhcGFiaWxpdGll
cyJdWyJwYWdlTG9hZFN0cmF0ZWd5Il0gPT0gIm5vcm1hbCIKKworCitkZWYgdGVzdF90aW1lb3V0
cyhuZXdfc2Vzc2lvbiwgcGxhdGZvcm1fbmFtZSk6CisgICAgcmVzcCwgXyA9IG5ld19zZXNzaW9u
KHsiY2FwYWJpbGl0aWVzIjogeyJhbHdheXNNYXRjaCI6IHsidGltZW91dHMiOiB7ImltcGxpY2l0
IjogMTAwMH19fX0pCisgICAgYXNzZXJ0IHJlc3BbImNhcGFiaWxpdGllcyJdWyJ0aW1lb3V0cyJd
ID09IHsKKyAgICAgICAgImltcGxpY2l0IjogMTAwMCwKKyAgICAgICAgInBhZ2VMb2FkIjogMzAw
MDAwLAorICAgICAgICAic2NyaXB0IjogMzAwMDAKKyAgICB9CisKK2RlZiB0ZXN0X3BhZ2VMb2Fk
U3RyYXRlZ3kobmV3X3Nlc3Npb24sIHBsYXRmb3JtX25hbWUpOgorICAgIHJlc3AsIF8gPSBuZXdf
c2Vzc2lvbih7ImNhcGFiaWxpdGllcyI6IHsiYWx3YXlzTWF0Y2giOiB7InBhZ2VMb2FkU3RyYXRl
Z3kiOiAiZWFnZXIifX19KQorICAgIGFzc2VydCByZXNwWyJjYXBhYmlsaXRpZXMiXVsicGFnZUxv
YWRTdHJhdGVneSJdID09ICJlYWdlciIKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9y
dGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvc2V0X3dpbmRvd19yZWN0LnB5IGIvV2ViRHJpdmVyVGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9zZXRfd2luZG93X3JlY3QucHkKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmIzMDBkMDlkMTExCi0tLSAvZGV2L251
bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9zZXRf
d2luZG93X3JlY3QucHkKQEAgLTAsMCArMSw1MDYgQEAKKyMgTUVUQTogdGltZW91dD1sb25nCisK
K2ltcG9ydCBweXRlc3QKKworZnJvbSB0ZXN0cy5zdXBwb3J0LmFzc2VydHMgaW1wb3J0IGFzc2Vy
dF9lcnJvciwgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkLCBhc3NlcnRfc3VjY2VzcworZnJvbSB0ZXN0
cy5zdXBwb3J0LmZpeHR1cmVzIGltcG9ydCBjcmVhdGVfZGlhbG9nCitmcm9tIHRlc3RzLnN1cHBv
cnQuaW5saW5lIGltcG9ydCBpbmxpbmUKKworCithbGVydF9kb2MgPSBpbmxpbmUoIjxzY3JpcHQ+
d2luZG93LmFsZXJ0KCk8L3NjcmlwdD4iKQorCisKK2RlZiBzZXRfd2luZG93X3JlY3Qoc2Vzc2lv
biwgcmVjdCk6CisgICAgcmV0dXJuIHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIlBPU1QiLCAic2Vz
c2lvbi8lcy93aW5kb3cvcmVjdCIgJSBzZXNzaW9uLnNlc3Npb25faWQsIHJlY3QpCisKKworIyAx
MC43LjIgU2V0IFdpbmRvdyBSZWN0CisKKworZGVmIHRlc3RfY3VycmVudF90b3BfbGV2ZWxfYnJv
d3NpbmdfY29udGV4dF9ub19sb25nZXJfb3BlbihzZXNzaW9uLCBjcmVhdGVfd2luZG93KToKKyAg
ICAiIiIKKyAgICAxLiBJZiB0aGUgY3VycmVudCB0b3AtbGV2ZWwgYnJvd3NpbmcgY29udGV4dCBp
cyBubyBsb25nZXIgb3BlbiwKKyAgICByZXR1cm4gZXJyb3Igd2l0aCBlcnJvciBjb2RlIG5vIHN1
Y2ggd2luZG93LgorCisgICAgIiIiCisgICAgc2Vzc2lvbi53aW5kb3dfaGFuZGxlID0gY3JlYXRl
X3dpbmRvdygpCisgICAgc2Vzc2lvbi5jbG9zZSgpCisgICAgcmVzcG9uc2UgPSBzZXRfd2luZG93
X3JlY3Qoc2Vzc2lvbiwge30pCisgICAgYXNzZXJ0X2Vycm9yKHJlc3BvbnNlLCAibm8gc3VjaCB3
aW5kb3ciKQorCisKK2RlZiB0ZXN0X2hhbmRsZV9wcm9tcHRfZGlzbWlzcygpOgorICAgICIiIlRP
RE8iIiIKKworCitkZWYgdGVzdF9oYW5kbGVfcHJvbXB0X2FjY2VwdChuZXdfc2Vzc2lvbik6Cisg
ICAgIiIiCisgICAgMi4gSGFuZGxlIGFueSB1c2VyIHByb21wdHMgYW5kIHJldHVybiBpdHMgdmFs
dWUgaWYgaXQgaXMgYW4gZXJyb3IuCisKKyAgICBbLi4uXQorCisgICAgSW4gb3JkZXIgdG8gaGFu
ZGxlIGFueSB1c2VyIHByb21wdHMgYSByZW1vdGUgZW5kIG11c3QgdGFrZSB0aGUKKyAgICBmb2xs
b3dpbmcgc3RlcHM6CisKKyAgICAgIFsuLi5dCisKKyAgICAgIDIuIFBlcmZvcm0gdGhlIGZvbGxv
d2luZyBzdWJzdGVwcyBiYXNlZCBvbiB0aGUgY3VycmVudCBzZXNzaW9uJ3MKKyAgICAgIHVzZXIg
cHJvbXB0IGhhbmRsZXI6CisKKyAgICAgICAgWy4uLl0KKworICAgICAgICAtIGFjY2VwdCBzdGF0
ZQorICAgICAgICAgICBBY2NlcHQgdGhlIGN1cnJlbnQgdXNlciBwcm9tcHQuCisKKyAgICAiIiIK
KyAgICBfLCBzZXNzaW9uID0gbmV3X3Nlc3Npb24oCisgICAgICAgIHsiYWx3YXlzTWF0Y2giOiB7
InVuaGFuZGxlZFByb21wdEJlaGF2aW9yIjogImFjY2VwdCJ9fSkKKyAgICBvcmlnaW5hbCA9IHNl
c3Npb24ud2luZG93LnJlY3QKKworICAgICMgc3RlcCAyCisgICAgY3JlYXRlX2RpYWxvZyhzZXNz
aW9uKSgiYWxlcnQiLCB0ZXh0PSJkaXNtaXNzICMxIiwgcmVzdWx0X3Zhcj0iZGlzbWlzczEiKQor
ICAgIHJlc3VsdCA9IHNldF93aW5kb3dfcmVjdChzZXNzaW9uLCB7IngiOiBvcmlnaW5hbFsieCJd
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInkiOiBvcmlnaW5hbFsi
eSJdfSkKKyAgICBhc3NlcnQgcmVzdWx0LnN0YXR1cyA9PSAyMDAKKyAgICBhc3NlcnRfZGlhbG9n
X2hhbmRsZWQoc2Vzc2lvbiwgImRpc21pc3MgIzEiKQorCisgICAgY3JlYXRlX2RpYWxvZyhzZXNz
aW9uKSgiY29uZmlybSIsIHRleHQ9ImRpc21pc3MgIzIiLCByZXN1bHRfdmFyPSJkaXNtaXNzMiIp
CisgICAgcmVzdWx0ID0gc2V0X3dpbmRvd19yZWN0KHNlc3Npb24sIHsieCI6IG9yaWdpbmFsWyJ4
Il0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieSI6IG9yaWdpbmFs
WyJ5Il19KQorICAgIGFzc2VydCByZXN1bHQuc3RhdHVzID09IDIwMAorICAgIGFzc2VydF9kaWFs
b2dfaGFuZGxlZChzZXNzaW9uLCAiZGlzbWlzcyAjMiIpCisKKyAgICBjcmVhdGVfZGlhbG9nKHNl
c3Npb24pKCJwcm9tcHQiLCB0ZXh0PSJkaXNtaXNzICMzIiwgcmVzdWx0X3Zhcj0iZGlzbWlzczMi
KQorICAgIHJlc3VsdCA9IHNldF93aW5kb3dfcmVjdChzZXNzaW9uLCB7IngiOiBvcmlnaW5hbFsi
eCJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInkiOiBvcmlnaW5h
bFsieSJdfSkKKyAgICBhc3NlcnRfc3VjY2VzcyhyZXN1bHQpCisgICAgYXNzZXJ0X2RpYWxvZ19o
YW5kbGVkKHNlc3Npb24sICJkaXNtaXNzICMzIikKKworCitkZWYgdGVzdF9oYW5kbGVfcHJvbXB0
X2Rpc21pc3NfYW5kX25vdGlmeSgpOgorICAgICIiIlRPRE8iIiIKKworCitkZWYgdGVzdF9oYW5k
bGVfcHJvbXB0X2FjY2VwdF9hbmRfbm90aWZ5KCk6CisgICAgIiIiVE9ETyIiIgorCisKK2RlZiB0
ZXN0X2hhbmRsZV9wcm9tcHRfaWdub3JlKCk6CisgICAgIiIiVE9ETyIiIgorCisKK2RlZiB0ZXN0
X2hhbmRsZV9wcm9tcHRfbWlzc2luZ192YWx1ZShzZXNzaW9uLCBjcmVhdGVfZGlhbG9nKToKKyAg
ICAiIiIKKyAgICAyLiBIYW5kbGUgYW55IHVzZXIgcHJvbXB0cyBhbmQgcmV0dXJuIGl0cyB2YWx1
ZSBpZiBpdCBpcyBhbiBlcnJvci4KKworICAgIFsuLi5dCisKKyAgICBJbiBvcmRlciB0byBoYW5k
bGUgYW55IHVzZXIgcHJvbXB0cyBhIHJlbW90ZSBlbmQgbXVzdCB0YWtlIHRoZQorICAgIGZvbGxv
d2luZyBzdGVwczoKKworICAgICAgWy4uLl0KKworICAgICAgMi4gUGVyZm9ybSB0aGUgZm9sbG93
aW5nIHN1YnN0ZXBzIGJhc2VkIG9uIHRoZSBjdXJyZW50IHNlc3Npb24ncworICAgICAgdXNlciBw
cm9tcHQgaGFuZGxlcjoKKworICAgICAgICBbLi4uXQorCisgICAgICAgIC0gbWlzc2luZyB2YWx1
ZSBkZWZhdWx0IHN0YXRlCisgICAgICAgICAgIDEuIERpc21pc3MgdGhlIGN1cnJlbnQgdXNlciBw
cm9tcHQuCisgICAgICAgICAgIDIuIFJldHVybiBlcnJvciB3aXRoIGVycm9yIGNvZGUgdW5leHBl
Y3RlZCBhbGVydCBvcGVuLgorCisgICAgIiIiCisKKyAgICBvcmlnaW5hbCA9IHNlc3Npb24ud2lu
ZG93LnJlY3QKKworICAgICMgc3RlcCAyCisgICAgY3JlYXRlX2RpYWxvZygiYWxlcnQiLCB0ZXh0
PSJkaXNtaXNzICMxIiwgcmVzdWx0X3Zhcj0iZGlzbWlzczEiKQorCisgICAgcmVzdWx0ID0gc2V0
X3dpbmRvd19yZWN0KHNlc3Npb24sIHsieCI6IG9yaWdpbmFsWyJ4Il0sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAieSI6IG9yaWdpbmFsWyJ5Il19KQorICAgIGFzc2Vy
dF9lcnJvcihyZXN1bHQsICJ1bmV4cGVjdGVkIGFsZXJ0IG9wZW4iKQorICAgIGFzc2VydF9kaWFs
b2dfaGFuZGxlZChzZXNzaW9uLCAiZGlzbWlzcyAjMSIpCisKKyAgICBjcmVhdGVfZGlhbG9nKCJj
b25maXJtIiwgdGV4dD0iZGlzbWlzcyAjMiIsIHJlc3VsdF92YXI9ImRpc21pc3MyIikKKworICAg
IHJlc3VsdCA9IHNldF93aW5kb3dfcmVjdChzZXNzaW9uLCB7IngiOiBvcmlnaW5hbFsieCJdLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInkiOiBvcmlnaW5hbFsieSJd
fSkKKyAgICBhc3NlcnRfZXJyb3IocmVzdWx0LCAidW5leHBlY3RlZCBhbGVydCBvcGVuIikKKyAg
ICBhc3NlcnRfZGlhbG9nX2hhbmRsZWQoc2Vzc2lvbiwgImRpc21pc3MgIzIiKQorCisgICAgY3Jl
YXRlX2RpYWxvZygicHJvbXB0IiwgdGV4dD0iZGlzbWlzcyAjMyIsIHJlc3VsdF92YXI9ImRpc21p
c3MzIikKKworICAgIHJlc3VsdCA9IHNldF93aW5kb3dfcmVjdChzZXNzaW9uLCB7IngiOiBvcmln
aW5hbFsieCJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInkiOiBv
cmlnaW5hbFsieSJdfSkKKyAgICBhc3NlcnRfZXJyb3IocmVzdWx0LCAidW5leHBlY3RlZCBhbGVy
dCBvcGVuIikKKyAgICBhc3NlcnRfZGlhbG9nX2hhbmRsZWQoc2Vzc2lvbiwgImRpc21pc3MgIzMi
KQorCisKK0BweXRlc3QubWFyay5wYXJhbWV0cml6ZSgicmVjdCIsIFsKKyAgICB7IndpZHRoIjog
ImEifSwKKyAgICB7ImhlaWdodCI6ICJiIn0sCisgICAgeyJ3aWR0aCI6ICJhIiwgImhlaWdodCI6
ICJiIn0sCisgICAgeyJ4IjogImEifSwKKyAgICB7InkiOiAiYiJ9LAorICAgIHsieCI6ICJhIiwg
InkiOiAiYiJ9LAorICAgIHsid2lkdGgiOiAiYSIsICJoZWlnaHQiOiAiYiIsICJ4IjogImEiLCAi
eSI6ICJiIn0sCisKKyAgICB7IndpZHRoIjogVHJ1ZX0sCisgICAgeyJoZWlnaHQiOiBGYWxzZX0s
CisgICAgeyJ3aWR0aCI6IFRydWUsICJoZWlnaHQiOiBGYWxzZX0sCisgICAgeyJ4IjogVHJ1ZX0s
CisgICAgeyJ5IjogRmFsc2V9LAorICAgIHsieCI6IFRydWUsICJ5IjogRmFsc2V9LAorICAgIHsi
d2lkdGgiOiBUcnVlLCAiaGVpZ2h0IjogRmFsc2UsICJ4IjogVHJ1ZSwgInkiOiBGYWxzZX0sCisK
KyAgICB7IndpZHRoIjogW119LAorICAgIHsiaGVpZ2h0IjogW119LAorICAgIHsid2lkdGgiOiBb
XSwgImhlaWdodCI6IFtdfSwKKyAgICB7IngiOiBbXX0sCisgICAgeyJ5IjogW119LAorICAgIHsi
eCI6IFtdLCAieSI6IFtdfSwKKyAgICB7IndpZHRoIjogW10sICJoZWlnaHQiOiBbXSwgIngiOiBb
XSwgInkiOiBbXX0sCisKKyAgICB7ImhlaWdodCI6IHt9fSwKKyAgICB7IndpZHRoIjoge319LAor
ICAgIHsiaGVpZ2h0Ijoge30sICJ3aWR0aCI6IHt9fSwKKyAgICB7IngiOiB7fX0sCisgICAgeyJ5
Ijoge319LAorICAgIHsieCI6IHt9LCAieSI6IHt9fSwKKyAgICB7IndpZHRoIjoge30sICJoZWln
aHQiOiB7fSwgIngiOiB7fSwgInkiOiB7fX0sCitdKQorZGVmIHRlc3RfaW52YWxpZF90eXBlcyhz
ZXNzaW9uLCByZWN0KToKKyAgICAiIiIKKyAgICA4LiBJZiB3aWR0aCBvciBoZWlnaHQgaXMgbmVp
dGhlciBudWxsIG5vciBhIE51bWJlciBmcm9tIDAgdG8gMl4zMSAtCisgICAgMSwgcmV0dXJuIGVy
cm9yIHdpdGggZXJyb3IgY29kZSBpbnZhbGlkIGFyZ3VtZW50LgorCisgICAgOS4gSWYgeCBvciB5
IGlzIG5laXRoZXIgbnVsbCBub3IgYSBOdW1iZXIgZnJvbSAtKDJeMzEpIHRvIDJeMzEgLSAxLAor
ICAgIHJldHVybiBlcnJvciB3aXRoIGVycm9yIGNvZGUgaW52YWxpZCBhcmd1bWVudC4KKyAgICAi
IiIKKyAgICByZXNwb25zZSA9IHNldF93aW5kb3dfcmVjdChzZXNzaW9uLCByZWN0KQorICAgIGFz
c2VydF9lcnJvcihyZXNwb25zZSwgImludmFsaWQgYXJndW1lbnQiKQorCisKK0BweXRlc3QubWFy
ay5wYXJhbWV0cml6ZSgicmVjdCIsIFsKKyAgICB7IndpZHRoIjogLTF9LAorICAgIHsiaGVpZ2h0
IjogLTJ9LAorICAgIHsid2lkdGgiOiAtMSwgImhlaWdodCI6IC0yfSwKK10pCitkZWYgdGVzdF9v
dXRfb2ZfYm91bmRzKHNlc3Npb24sIHJlY3QpOgorICAgICIiIgorICAgIDguIElmIHdpZHRoIG9y
IGhlaWdodCBpcyBuZWl0aGVyIG51bGwgbm9yIGEgTnVtYmVyIGZyb20gMCB0byAyXjMxIC0KKyAg
ICAxLCByZXR1cm4gZXJyb3Igd2l0aCBlcnJvciBjb2RlIGludmFsaWQgYXJndW1lbnQuCisKKyAg
ICA5LiBJZiB4IG9yIHkgaXMgbmVpdGhlciBudWxsIG5vciBhIE51bWJlciBmcm9tIC0oMl4zMSkg
dG8gMl4zMSAtIDEsCisgICAgcmV0dXJuIGVycm9yIHdpdGggZXJyb3IgY29kZSBpbnZhbGlkIGFy
Z3VtZW50LgorICAgICIiIgorICAgIHJlc3BvbnNlID0gc2V0X3dpbmRvd19yZWN0KHNlc3Npb24s
IHJlY3QpCisgICAgYXNzZXJ0X2Vycm9yKHJlc3BvbnNlLCAiaW52YWxpZCBhcmd1bWVudCIpCisK
KworZGVmIHRlc3Rfd2lkdGhfaGVpZ2h0X2Zsb2F0cyhzZXNzaW9uKToKKyAgICAiIiIKKyAgICA4
LiBJZiB3aWR0aCBvciBoZWlnaHQgaXMgbmVpdGhlciBudWxsIG5vciBhIE51bWJlciBmcm9tIDAg
dG8gMl4zMSAtCisgICAgMSwgcmV0dXJuIGVycm9yIHdpdGggZXJyb3IgY29kZSBpbnZhbGlkIGFy
Z3VtZW50LgorICAgICIiIgorCisgICAgcmVzcG9uc2UgPSBzZXRfd2luZG93X3JlY3Qoc2Vzc2lv
biwgeyJ3aWR0aCI6IDUwMC41LCAiaGVpZ2h0IjogNDIwfSkKKyAgICB2YWx1ZSA9IGFzc2VydF9z
dWNjZXNzKHJlc3BvbnNlKQorICAgIGFzc2VydCB2YWx1ZVsid2lkdGgiXSA9PSA1MDAKKyAgICBh
c3NlcnQgdmFsdWVbImhlaWdodCJdID09IDQyMAorCisgICAgcmVzcG9uc2UgPSBzZXRfd2luZG93
X3JlY3Qoc2Vzc2lvbiwgeyJ3aWR0aCI6IDUwMCwgImhlaWdodCI6IDQ1MC41fSkKKyAgICB2YWx1
ZSA9IGFzc2VydF9zdWNjZXNzKHJlc3BvbnNlKQorICAgIGFzc2VydCB2YWx1ZVsid2lkdGgiXSA9
PSA1MDAKKyAgICBhc3NlcnQgdmFsdWVbImhlaWdodCJdID09IDQ1MAorCisKK2RlZiB0ZXN0X3hf
eV9mbG9hdHMoc2Vzc2lvbik6CisgICAgIiIiCisgICAgOS4gSWYgeCBvciB5IGlzIG5laXRoZXIg
bnVsbCBub3IgYSBOdW1iZXIgZnJvbSAtKDJeMzEpIHRvIDJeMzEgLSAxLAorICAgIHJldHVybiBl
cnJvciB3aXRoIGVycm9yIGNvZGUgaW52YWxpZCBhcmd1bWVudC4KKyAgICAiIiIKKworICAgIHJl
c3BvbnNlID0gc2V0X3dpbmRvd19yZWN0KHNlc3Npb24sIHsieCI6IDAuNSwgInkiOiA0MjB9KQor
ICAgIHZhbHVlID0gYXNzZXJ0X3N1Y2Nlc3MocmVzcG9uc2UpCisgICAgYXNzZXJ0IHZhbHVlWyJ4
Il0gPT0gMAorICAgIGFzc2VydCB2YWx1ZVsieSJdID09IDQyMAorCisgICAgcmVzcG9uc2UgPSBz
ZXRfd2luZG93X3JlY3Qoc2Vzc2lvbiwgeyJ4IjogMTAwLCAieSI6IDQ1MC41fSkKKyAgICB2YWx1
ZSA9IGFzc2VydF9zdWNjZXNzKHJlc3BvbnNlKQorICAgIGFzc2VydCB2YWx1ZVsieCJdID09IDEw
MAorICAgIGFzc2VydCB2YWx1ZVsieSJdID09IDQ1MAorCisKK0BweXRlc3QubWFyay5wYXJhbWV0
cml6ZSgicmVjdCIsIFsKKyAgICB7fSwKKworICAgIHsid2lkdGgiOiBOb25lfSwKKyAgICB7Imhl
aWdodCI6IE5vbmV9LAorICAgIHsid2lkdGgiOiBOb25lLCAiaGVpZ2h0IjogTm9uZX0sCisKKyAg
ICB7IngiOiBOb25lfSwKKyAgICB7InkiOiBOb25lfSwKKyAgICB7IngiOiBOb25lLCAieSI6IE5v
bmV9LAorCisgICAgeyJ3aWR0aCI6IE5vbmUsICJ4IjogTm9uZX0sCisgICAgeyJ3aWR0aCI6IE5v
bmUsICJ5IjogTm9uZX0sCisgICAgeyJoZWlnaHQiOiBOb25lLCAieCI6IE5vbmV9LAorICAgIHsi
aGVpZ2h0IjogTm9uZSwgIlkiOiBOb25lfSwKKworICAgIHsid2lkdGgiOiBOb25lLCAiaGVpZ2h0
IjogTm9uZSwgIngiOiBOb25lLCAieSI6IE5vbmV9LAorCisgICAgeyJ3aWR0aCI6IDIwMH0sCisg
ICAgeyJoZWlnaHQiOiAyMDB9LAorICAgIHsieCI6IDIwMH0sCisgICAgeyJ5IjogMjAwfSwKKyAg
ICB7IndpZHRoIjogMjAwLCAieCI6IDIwMH0sCisgICAgeyJoZWlnaHQiOiAyMDAsICJ4IjogMjAw
fSwKKyAgICB7IndpZHRoIjogMjAwLCAieSI6IDIwMH0sCisgICAgeyJoZWlnaHQiOiAyMDAsICJ5
IjogMjAwfSwKK10pCitkZWYgdGVzdF9ub19jaGFuZ2Uoc2Vzc2lvbiwgcmVjdCk6CisgICAgIiIi
CisgICAgMTMuIElmIHdpZHRoIGFuZCBoZWlnaHQgYXJlIG5vdCBudWxsOgorCisgICAgWy4uLl0K
KworICAgIDE0LiBJZiB4IGFuZCB5IGFyZSBub3QgbnVsbDoKKworICAgIFsuLi5dCisKKyAgICAx
NS4gUmV0dXJuIHN1Y2Nlc3Mgd2l0aCB0aGUgSlNPTiBzZXJpYWxpemF0aW9uIG9mIHRoZSBjdXJy
ZW50CisgICAgdG9wLWxldmVsIGJyb3dzaW5nIGNvbnRleHQncyB3aW5kb3cgcmVjdC4KKyAgICAi
IiIKKworICAgIG9yaWdpbmFsID0gc2Vzc2lvbi53aW5kb3cucmVjdAorICAgIHJlc3BvbnNlID0g
c2V0X3dpbmRvd19yZWN0KHNlc3Npb24sIHJlY3QpCisgICAgYXNzZXJ0X3N1Y2Nlc3MocmVzcG9u
c2UsIG9yaWdpbmFsKQorCisKK2RlZiB0ZXN0X2Z1bGx5X2V4aXRfZnVsbHNjcmVlbihzZXNzaW9u
KToKKyAgICAiIiIKKyAgICAxMC4gRnVsbHkgZXhpdCBmdWxsc2NyZWVuLgorCisgICAgWy4uLl0K
KworICAgIFRvIGZ1bGx5IGV4aXQgZnVsbHNjcmVlbiBhIGRvY3VtZW50IGRvY3VtZW50LCBydW4g
dGhlc2Ugc3RlcHM6CisKKyAgICAgIDEuIElmIGRvY3VtZW50J3MgZnVsbHNjcmVlbiBlbGVtZW50
IGlzIG51bGwsIHRlcm1pbmF0ZSB0aGVzZSBzdGVwcy4KKworICAgICAgMi4gVW5mdWxsc2NyZWVu
IGVsZW1lbnRzIHdob3NlIGZ1bGxzY3JlZW4gZmxhZyBpcyBzZXQsIHdpdGhpbgorICAgICAgZG9j
dW1lbnQncyB0b3AgbGF5ZXIsIGV4Y2VwdCBmb3IgZG9jdW1lbnQncyBmdWxsc2NyZWVuIGVsZW1l
bnQuCisKKyAgICAgIDMuIEV4aXQgZnVsbHNjcmVlbiBkb2N1bWVudC4KKyAgICAiIiIKKyAgICBz
ZXNzaW9uLndpbmRvdy5mdWxsc2NyZWVuKCkKKyAgICBhc3NlcnQgc2Vzc2lvbi5leGVjdXRlX3Nj
cmlwdCgicmV0dXJuIHdpbmRvdy5mdWxsU2NyZWVuIikgaXMgVHJ1ZQorCisgICAgcmVzcG9uc2Ug
PSBzZXRfd2luZG93X3JlY3Qoc2Vzc2lvbiwgeyJ3aWR0aCI6IDQwMCwgImhlaWdodCI6IDQwMH0p
CisgICAgdmFsdWUgPSBhc3NlcnRfc3VjY2VzcyhyZXNwb25zZSkKKyAgICBhc3NlcnQgdmFsdWVb
IndpZHRoIl0gPT0gNDAwCisgICAgYXNzZXJ0IHZhbHVlWyJoZWlnaHQiXSA9PSA0MDAKKworICAg
IGFzc2VydCBzZXNzaW9uLmV4ZWN1dGVfc2NyaXB0KCJyZXR1cm4gd2luZG93LmZ1bGxTY3JlZW4i
KSBpcyBGYWxzZQorCisKK2RlZiB0ZXN0X3Jlc3RvcmVfZnJvbV9taW5pbWl6ZWQoc2Vzc2lvbik6
CisgICAgIiIiCisgICAgMTIuIElmIHRoZSB2aXNpYmlsaXR5IHN0YXRlIG9mIHRoZSB0b3AtbGV2
ZWwgYnJvd3NpbmcgY29udGV4dCdzCisgICAgYWN0aXZlIGRvY3VtZW50IGlzIGhpZGRlbiwgcmVz
dG9yZSB0aGUgd2luZG93LgorCisgICAgWy4uLl0KKworICAgIFRvIHJlc3RvcmUgdGhlIHdpbmRv
dywgZ2l2ZW4gYW4gb3BlcmF0aW5nIHN5c3RlbSBsZXZlbCB3aW5kb3cgd2l0aAorICAgIGFuIGFz
c29jaWF0ZWQgdG9wLWxldmVsIGJyb3dzaW5nIGNvbnRleHQsIHJ1biBpbXBsZW1lbnRhdGlvbi1z
cGVjaWZpYworICAgIHN0ZXBzIHRvIHJlc3RvcmUgb3IgdW5oaWRlIHRoZSB3aW5kb3cgdG8gdGhl
IHZpc2libGUgc2NyZWVuLiBEbyBub3QKKyAgICByZXR1cm4gZnJvbSB0aGlzIG9wZXJhdGlvbiB1
bnRpbCB0aGUgdmlzaWJpbGl0eSBzdGF0ZSBvZiB0aGUgdG9wLWxldmVsCisgICAgYnJvd3Npbmcg
Y29udGV4dCdzIGFjdGl2ZSBkb2N1bWVudCBoYXMgcmVhY2hlZCB0aGUgdmlzaWJsZSBzdGF0ZSwK
KyAgICBvciB1bnRpbCB0aGUgb3BlcmF0aW9uIHRpbWVzIG91dC4KKyAgICAiIiIKKworICAgIHNl
c3Npb24ud2luZG93Lm1pbmltaXplKCkKKyAgICBhc3NlcnQgc2Vzc2lvbi5leGVjdXRlX3Njcmlw
dCgicmV0dXJuIGRvY3VtZW50LmhpZGRlbiIpIGlzIFRydWUKKworICAgIHJlc3BvbnNlID0gc2V0
X3dpbmRvd19yZWN0KHNlc3Npb24sIHsid2lkdGgiOiA0NTAsICJoZWlnaHQiOiA0NTB9KQorICAg
IHZhbHVlID0gYXNzZXJ0X3N1Y2Nlc3MocmVzcG9uc2UpCisgICAgYXNzZXJ0IHZhbHVlWyJ3aWR0
aCJdID09IDQ1MAorICAgIGFzc2VydCB2YWx1ZVsiaGVpZ2h0Il0gPT0gNDUwCisKKyAgICBhc3Nl
cnQgc2Vzc2lvbi5leGVjdXRlX3NjcmlwdCgicmV0dXJuIGRvY3VtZW50LmhpZGRlbiIpIGlzIEZh
bHNlCisKKworZGVmIHRlc3RfcmVzdG9yZV9mcm9tX21heGltaXplZChzZXNzaW9uKToKKyAgICAi
IiIKKyAgICAxMi4gSWYgdGhlIHZpc2liaWxpdHkgc3RhdGUgb2YgdGhlIHRvcC1sZXZlbCBicm93
c2luZyBjb250ZXh0J3MKKyAgICBhY3RpdmUgZG9jdW1lbnQgaXMgaGlkZGVuLCByZXN0b3JlIHRo
ZSB3aW5kb3cuCisKKyAgICBbLi4uXQorCisgICAgVG8gcmVzdG9yZSB0aGUgd2luZG93LCBnaXZl
biBhbiBvcGVyYXRpbmcgc3lzdGVtIGxldmVsIHdpbmRvdyB3aXRoCisgICAgYW4gYXNzb2NpYXRl
ZCB0b3AtbGV2ZWwgYnJvd3NpbmcgY29udGV4dCwgcnVuIGltcGxlbWVudGF0aW9uLXNwZWNpZmlj
CisgICAgc3RlcHMgdG8gcmVzdG9yZSBvciB1bmhpZGUgdGhlIHdpbmRvdyB0byB0aGUgdmlzaWJs
ZSBzY3JlZW4uIERvIG5vdAorICAgIHJldHVybiBmcm9tIHRoaXMgb3BlcmF0aW9uIHVudGlsIHRo
ZSB2aXNpYmlsaXR5IHN0YXRlIG9mIHRoZSB0b3AtbGV2ZWwKKyAgICBicm93c2luZyBjb250ZXh0
J3MgYWN0aXZlIGRvY3VtZW50IGhhcyByZWFjaGVkIHRoZSB2aXNpYmxlIHN0YXRlLAorICAgIG9y
IHVudGlsIHRoZSBvcGVyYXRpb24gdGltZXMgb3V0LgorICAgICIiIgorCisgICAgb3JpZ2luYWxf
c2l6ZSA9IHNlc3Npb24ud2luZG93LnNpemUKKyAgICBzZXNzaW9uLndpbmRvdy5tYXhpbWl6ZSgp
CisgICAgYXNzZXJ0IHNlc3Npb24ud2luZG93LnNpemUgIT0gb3JpZ2luYWxfc2l6ZQorCisgICAg
cmVzcG9uc2UgPSBzZXRfd2luZG93X3JlY3Qoc2Vzc2lvbiwgeyJ3aWR0aCI6IDQwMCwgImhlaWdo
dCI6IDQwMH0pCisgICAgdmFsdWUgPSBhc3NlcnRfc3VjY2VzcyhyZXNwb25zZSkKKyAgICBhc3Nl
cnQgdmFsdWVbIndpZHRoIl0gPT0gNDAwCisgICAgYXNzZXJ0IHZhbHVlWyJoZWlnaHQiXSA9PSA0
MDAKKworCitkZWYgdGVzdF9oZWlnaHRfd2lkdGgoc2Vzc2lvbik6CisgICAgb3JpZ2luYWwgPSBz
ZXNzaW9uLndpbmRvdy5yZWN0CisgICAgbWF4ID0gc2Vzc2lvbi5leGVjdXRlX3NjcmlwdCgiIiIK
KyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICB3aWR0aDogd2luZG93LnNjcmVlbi5hdmFpbFdp
ZHRoLAorICAgICAgICAgIGhlaWdodDogd2luZG93LnNjcmVlbi5hdmFpbEhlaWdodCwKKyAgICAg
ICAgfSIiIikKKworICAgICMgc3RlcCAxMgorICAgIHJlc3BvbnNlID0gc2V0X3dpbmRvd19yZWN0
KHNlc3Npb24sIHsid2lkdGgiOiBtYXhbIndpZHRoIl0gLSAxMDAsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJoZWlnaHQiOiBtYXhbImhlaWdodCJdIC0gMTAwfSkK
KworICAgICMgc3RlcCAxNAorICAgIGFzc2VydF9zdWNjZXNzKHJlc3BvbnNlLCB7IngiOiBvcmln
aW5hbFsieCJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInkiOiBvcmlnaW5hbFsi
eSJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndpZHRoIjogbWF4WyJ3aWR0aCJd
IC0gMTAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhlaWdodCI6IG1heFsiaGVp
Z2h0Il0gLSAxMDB9KQorCisKK2RlZiB0ZXN0X2hlaWdodF93aWR0aF9sYXJnZXJfdGhhbl9tYXgo
c2Vzc2lvbik6CisgICAgbWF4ID0gc2Vzc2lvbi5leGVjdXRlX3NjcmlwdCgiIiIKKyAgICAgICAg
cmV0dXJuIHsKKyAgICAgICAgICB3aWR0aDogd2luZG93LnNjcmVlbi5hdmFpbFdpZHRoLAorICAg
ICAgICAgIGhlaWdodDogd2luZG93LnNjcmVlbi5hdmFpbEhlaWdodCwKKyAgICAgICAgfSIiIikK
KworICAgICMgc3RlcCAxMgorICAgIHJlc3BvbnNlID0gc2V0X3dpbmRvd19yZWN0KHNlc3Npb24s
IHsid2lkdGgiOiBtYXhbIndpZHRoIl0gKyAxMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJoZWlnaHQiOiBtYXhbImhlaWdodCJdICsgMTAwfSkKKworICAgICMg
c3RlcCAxNAorICAgIHJlY3QgPSBhc3NlcnRfc3VjY2VzcyhyZXNwb25zZSkKKyAgICBhc3NlcnQg
cmVjdFsid2lkdGgiXSA+PSBtYXhbIndpZHRoIl0KKyAgICBhc3NlcnQgcmVjdFsiaGVpZ2h0Il0g
Pj0gbWF4WyJoZWlnaHQiXQorCisKK2RlZiB0ZXN0X2hlaWdodF93aWR0aF9hc19jdXJyZW50KHNl
c3Npb24pOgorICAgIG9yaWdpbmFsID0gc2Vzc2lvbi53aW5kb3cucmVjdAorCisgICAgIyBzdGVw
IDEyCisgICAgcmVzcG9uc2UgPSBzZXRfd2luZG93X3JlY3Qoc2Vzc2lvbiwgeyJ3aWR0aCI6IG9y
aWdpbmFsWyJ3aWR0aCJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiaGVpZ2h0Ijogb3JpZ2luYWxbImhlaWdodCJdfSkKKworICAgICMgc3RlcCAxNAorICAgIGFz
c2VydF9zdWNjZXNzKHJlc3BvbnNlLCB7IngiOiBvcmlnaW5hbFsieCJdLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgInkiOiBvcmlnaW5hbFsieSJdLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIndpZHRoIjogb3JpZ2luYWxbIndpZHRoIl0sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiaGVpZ2h0Ijogb3JpZ2luYWxbImhlaWdodCJdfSkKKworCitkZWYgdGVz
dF94X3koc2Vzc2lvbik6CisgICAgb3JpZ2luYWwgPSBzZXNzaW9uLndpbmRvdy5yZWN0CisKKyAg
ICAjIHN0ZXAgMTMKKyAgICByZXNwb25zZSA9IHNldF93aW5kb3dfcmVjdChzZXNzaW9uLCB7Ingi
OiBvcmlnaW5hbFsieCJdICsgMTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJ5Ijogb3JpZ2luYWxbInkiXSArIDEwfSkKKworICAgICMgc3RlcCAxNAorICAgIGFz
c2VydF9zdWNjZXNzKHJlc3BvbnNlLCB7IngiOiBvcmlnaW5hbFsieCJdICsgMTAsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAieSI6IG9yaWdpbmFsWyJ5Il0gKyAxMCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJ3aWR0aCI6IG9yaWdpbmFsWyJ3aWR0aCJdLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgImhlaWdodCI6IG9yaWdpbmFsWyJoZWlnaHQiXX0pCisK
KworZGVmIHRlc3RfbmVnYXRpdmVfeF95KHNlc3Npb24pOgorICAgIG9yaWdpbmFsID0gc2Vzc2lv
bi53aW5kb3cucmVjdAorCisgICAgIyBzdGVwIDEzCisgICAgcmVzcG9uc2UgPSBzZXRfd2luZG93
X3JlY3Qoc2Vzc2lvbiwgeyJ4IjogLSA4LCAieSI6IC0gOH0pCisKKyAgICAjIHN0ZXAgMTQKKyAg
ICBvcyA9IHNlc3Npb24uY2FwYWJpbGl0aWVzWyJwbGF0Zm9ybU5hbWUiXQorICAgICMgY2VydGFp
biBXTXMgcHJvaGliaXQgd2luZG93cyBmcm9tIGJlaW5nIG1vdmVkIG9mZi1zY3JlZW4KKyAgICBp
ZiBvcyA9PSAibGludXgiOgorICAgICAgICByZWN0ID0gYXNzZXJ0X3N1Y2Nlc3MocmVzcG9uc2Up
CisgICAgICAgIGFzc2VydCByZWN0WyJ4Il0gPD0gMAorICAgICAgICBhc3NlcnQgcmVjdFsieSJd
IDw9IDAKKyAgICAgICAgYXNzZXJ0IHJlY3RbIndpZHRoIl0gPT0gb3JpZ2luYWxbIndpZHRoIl0K
KyAgICAgICAgYXNzZXJ0IHJlY3RbImhlaWdodCJdID09IG9yaWdpbmFsWyJoZWlnaHQiXQorCisg
ICAgIyBPbiBtYWNPUywgd2luZG93cyBjYW4gb25seSBiZSBtb3ZlZCBvZmYgdGhlIHNjcmVlbiBv
biB0aGUKKyAgICAjIGhvcml6b250YWwgYXhpcy4gIFRoZSBzeXN0ZW0gbWVudSBiYXIgYWxzbyBi
bG9ja3Mgd2luZG93cyBmcm9tCisgICAgIyBiZWluZyBtb3ZlZCB0byAoMCwwKS4KKyAgICBlbGlm
IG9zID09ICJkYXJ3aW4iOgorICAgICAgICBhc3NlcnRfc3VjY2VzcyhyZXNwb25zZSwgeyJ4Ijog
LTgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInkiOiAyMywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAid2lkdGgiOiBvcmlnaW5hbFsid2lkdGgiXSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGVpZ2h0Ijogb3JpZ2luYWxbImhlaWdo
dCJdfSkKKworICAgICMgSXQgdHVybnMgb3V0IHRoYXQgV2luZG93cyBpcyB0aGUgb25seSBwbGF0
Zm9ybSBvbiB3aGljaCB0aGUKKyAgICAjIHdpbmRvdyBjYW4gYmUgcmVsaWFibHkgcG9zaXRpb25l
ZCBvZmYtc2NyZWVuLgorICAgIGVsaWYgb3MgPT0gIndpbmRvd3NfbnQiOgorICAgICAgICBhc3Nl
cnRfc3VjY2VzcyhyZXNwb25zZSwgeyJ4IjogLTgsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgInkiOiAtOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2lk
dGgiOiBvcmlnaW5hbFsid2lkdGgiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiaGVpZ2h0Ijogb3JpZ2luYWxbImhlaWdodCJdfSkKKworCitkZWYgdGVzdF9tb3ZlX3RvX3Nh
bWVfcG9zaXRpb24oc2Vzc2lvbik6CisgICAgb3JpZ2luYWxfcG9zaXRpb24gPSBzZXNzaW9uLndp
bmRvdy5wb3NpdGlvbgorICAgIHBvc2l0aW9uID0gc2Vzc2lvbi53aW5kb3cucG9zaXRpb24gPSBv
cmlnaW5hbF9wb3NpdGlvbgorICAgIGFzc2VydCBwb3NpdGlvbiA9PSBvcmlnaW5hbF9wb3NpdGlv
bgorCisKK2RlZiB0ZXN0X21vdmVfdG9fc2FtZV94KHNlc3Npb24pOgorICAgIG9yaWdpbmFsX3gg
PSBzZXNzaW9uLndpbmRvdy5wb3NpdGlvblswXQorICAgIHBvc2l0aW9uID0gc2Vzc2lvbi53aW5k
b3cucG9zaXRpb24gPSAob3JpZ2luYWxfeCwgMzQ1KQorICAgIGFzc2VydCBwb3NpdGlvbiA9PSAo
b3JpZ2luYWxfeCwgMzQ1KQorCisKK2RlZiB0ZXN0X21vdmVfdG9fc2FtZV95KHNlc3Npb24pOgor
ICAgIG9yaWdpbmFsX3kgPSBzZXNzaW9uLndpbmRvdy5wb3NpdGlvblsxXQorICAgIHBvc2l0aW9u
ID0gc2Vzc2lvbi53aW5kb3cucG9zaXRpb24gPSAoNDU2LCBvcmlnaW5hbF95KQorICAgIGFzc2Vy
dCBwb3NpdGlvbiA9PSAoNDU2LCBvcmlnaW5hbF95KQorCisKK2RlZiB0ZXN0X3Jlc2l6ZV90b19z
YW1lX3NpemUoc2Vzc2lvbik6CisgICAgb3JpZ2luYWxfc2l6ZSA9IHNlc3Npb24ud2luZG93LnNp
emUKKyAgICBzaXplID0gc2Vzc2lvbi53aW5kb3cuc2l6ZSA9IG9yaWdpbmFsX3NpemUKKyAgICBh
c3NlcnQgc2l6ZSA9PSBvcmlnaW5hbF9zaXplCisKKworZGVmIHRlc3RfcmVzaXplX3RvX3NhbWVf
d2lkdGgoc2Vzc2lvbik6CisgICAgb3JpZ2luYWxfd2lkdGggPSBzZXNzaW9uLndpbmRvdy5zaXpl
WzBdCisgICAgc2l6ZSA9IHNlc3Npb24ud2luZG93LnNpemUgPSAob3JpZ2luYWxfd2lkdGgsIDM0
NSkKKyAgICBhc3NlcnQgc2l6ZSA9PSAob3JpZ2luYWxfd2lkdGgsIDM0NSkKKworCitkZWYgdGVz
dF9yZXNpemVfdG9fc2FtZV9oZWlnaHQoc2Vzc2lvbik6CisgICAgb3JpZ2luYWxfaGVpZ2h0ID0g
c2Vzc2lvbi53aW5kb3cuc2l6ZVsxXQorICAgIHNpemUgPSBzZXNzaW9uLndpbmRvdy5zaXplID0g
KDQ1Niwgb3JpZ2luYWxfaGVpZ2h0KQorICAgIGFzc2VydCBzaXplID09ICg0NTYsIG9yaWdpbmFs
X2hlaWdodCkKKworCitkZWYgdGVzdF9wYXlsb2FkKHNlc3Npb24pOgorICAgICMgc3RlcCAxNAor
ICAgIHJlc3BvbnNlID0gc2V0X3dpbmRvd19yZWN0KHNlc3Npb24sIHsieCI6IDQwMCwgInkiOiA0
MDB9KQorCisgICAgYXNzZXJ0IHJlc3BvbnNlLnN0YXR1cyA9PSAyMDAKKyAgICBhc3NlcnQgaXNp
bnN0YW5jZShyZXNwb25zZS5ib2R5WyJ2YWx1ZSJdLCBkaWN0KQorICAgIHZhbHVlID0gcmVzcG9u
c2UuYm9keVsidmFsdWUiXQorICAgIGFzc2VydCAid2lkdGgiIGluIHZhbHVlCisgICAgYXNzZXJ0
ICJoZWlnaHQiIGluIHZhbHVlCisgICAgYXNzZXJ0ICJ4IiBpbiB2YWx1ZQorICAgIGFzc2VydCAi
eSIgaW4gdmFsdWUKKyAgICBhc3NlcnQgaXNpbnN0YW5jZSh2YWx1ZVsid2lkdGgiXSwgaW50KQor
ICAgIGFzc2VydCBpc2luc3RhbmNlKHZhbHVlWyJoZWlnaHQiXSwgaW50KQorICAgIGFzc2VydCBp
c2luc3RhbmNlKHZhbHVlWyJ4Il0sIGludCkKKyAgICBhc3NlcnQgaXNpbnN0YW5jZSh2YWx1ZVsi
eSJdLCBpbnQpCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJp
dmVyL3Rlc3RzL3N0YXRlL19faW5pdF9fLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYmRyaXZlci90ZXN0cy9zdGF0ZS9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uZTY5ZGUyOWJiMmQKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3Rz
L2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvc3RhdGUvZ2V0X2VsZW1lbnRfYXR0cmlidXRl
LnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9zdGF0ZS9n
ZXRfZWxlbWVudF9hdHRyaWJ1dGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLmU2NjJkOTVhOWM3Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9zdGF0ZS9nZXRfZWxlbWVudF9hdHRyaWJ1dGUucHkK
QEAgLTAsMCArMSwxOTIgQEAKK2ltcG9ydCBweXRlc3QKKworZnJvbSB0ZXN0cy5zdXBwb3J0LmFz
c2VydHMgaW1wb3J0IGFzc2VydF9lcnJvciwgYXNzZXJ0X3N1Y2Nlc3MsIGFzc2VydF9kaWFsb2df
aGFuZGxlZAorZnJvbSB0ZXN0cy5zdXBwb3J0LmZpeHR1cmVzIGltcG9ydCBjcmVhdGVfZGlhbG9n
Citmcm9tIHRlc3RzLnN1cHBvcnQuaW5saW5lIGltcG9ydCBpbmxpbmUKKworCitkZWYgZ2V0X2F0
dHJpYnV0ZShzZXNzaW9uLCBlbGVtZW50LCBhdHRyKToKKyAgICByZXR1cm4gc2Vzc2lvbi50cmFu
c3BvcnQuc2VuZCgiR0VUIiwgInNlc3Npb24ve3Nlc3Npb25faWR9L2VsZW1lbnQve2VsZW1lbnRf
aWR9L2F0dHJpYnV0ZS97YXR0cn0iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LmZvcm1hdChzZXNzaW9uX2lkPXNlc3Npb24uc2Vzc2lvbl9pZCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRfaWQ9ZWxlbWVudCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHI9YXR0cikpCisKKworIyAxMy4yIEdl
dCBFbGVtZW50IEF0dHJpYnV0ZQorCitkZWYgdGVzdF9ub19icm93c2luZ19jb250ZXh0KHNlc3Np
b24sIGNyZWF0ZV93aW5kb3cpOgorICAgICMgMTMuMiBzdGVwIDEKKyAgICBzZXNzaW9uLndpbmRv
d19oYW5kbGUgPSBjcmVhdGVfd2luZG93KCkKKyAgICBzZXNzaW9uLmNsb3NlKCkKKworICAgIHJl
c3VsdCA9IGdldF9hdHRyaWJ1dGUoc2Vzc2lvbiwgImZvbyIsICJpZCIpCisKKyAgICBhc3NlcnRf
ZXJyb3IocmVzdWx0LCAibm8gc3VjaCB3aW5kb3ciKQorCisKK2RlZiB0ZXN0X2hhbmRsZV9wcm9t
cHRfZGlzbWlzcyhuZXdfc2Vzc2lvbik6CisgICAgIyAxMy4yIHN0ZXAgMgorICAgIF8sIHNlc3Np
b24gPSBuZXdfc2Vzc2lvbih7ImFsd2F5c01hdGNoIjogeyJ1bmhhbmRsZWRQcm9tcHRCZWhhdmlv
ciI6ICJkaXNtaXNzIn19KQorICAgIHNlc3Npb24udXJsID0gaW5saW5lKCI8aW5wdXQgaWQ9Zm9v
PiIpCisKKyAgICBjcmVhdGVfZGlhbG9nKHNlc3Npb24pKCJhbGVydCIsIHRleHQ9ImRpc21pc3Mg
IzEiLCByZXN1bHRfdmFyPSJkaXNtaXNzMSIpCisKKyAgICByZXN1bHQgPSBnZXRfYXR0cmlidXRl
KHNlc3Npb24sICJmb28iLCAiaWQiKQorCisgICAgYXNzZXJ0X3N1Y2Nlc3MocmVzdWx0LCAiZm9v
IikKKyAgICBhc3NlcnRfZGlhbG9nX2hhbmRsZWQoc2Vzc2lvbiwgImRpc21pc3MgIzEiKQorCisg
ICAgY3JlYXRlX2RpYWxvZyhzZXNzaW9uKSgiY29uZmlybSIsIHRleHQ9ImRpc21pc3MgIzIiLCBy
ZXN1bHRfdmFyPSJkaXNtaXNzMiIpCisKKyAgICByZXN1bHQgPSBnZXRfYXR0cmlidXRlKHNlc3Np
b24sICJmb28iLCAiaWQiKQorCisgICAgYXNzZXJ0X3N1Y2Nlc3MocmVzdWx0LCAiZm9vIikKKyAg
ICBhc3NlcnRfZGlhbG9nX2hhbmRsZWQoc2Vzc2lvbiwgImRpc21pc3MgIzIiKQorCisgICAgY3Jl
YXRlX2RpYWxvZyhzZXNzaW9uKSgicHJvbXB0IiwgdGV4dD0iZGlzbWlzcyAjMyIsIHJlc3VsdF92
YXI9ImRpc21pc3MzIikKKworICAgIHJlc3VsdCA9IGdldF9hdHRyaWJ1dGUoc2Vzc2lvbiwgImZv
byIsICJpZCIpCisKKyAgICBhc3NlcnRfc3VjY2VzcyhyZXN1bHQsICJmb28iKQorICAgIGFzc2Vy
dF9kaWFsb2dfaGFuZGxlZChzZXNzaW9uLCAiZGlzbWlzcyAjMyIpCisKKworZGVmIHRlc3RfaGFu
ZGxlX3Byb21wdF9hY2NlcHQobmV3X3Nlc3Npb24pOgorICAgICMgMTMuMiBzdGVwIDIKKyAgICBf
LCBzZXNzaW9uID0gbmV3X3Nlc3Npb24oeyJhbHdheXNNYXRjaCI6IHsidW5oYW5kbGVkUHJvbXB0
QmVoYXZpb3IiOiAiYWNjZXB0In19KQorICAgIHNlc3Npb24udXJsID0gaW5saW5lKCI8aW5wdXQg
aWQ9Zm9vPiIpCisKKyAgICBjcmVhdGVfZGlhbG9nKHNlc3Npb24pKCJhbGVydCIsIHRleHQ9ImRp
c21pc3MgIzEiLCByZXN1bHRfdmFyPSJkaXNtaXNzMSIpCisKKyAgICByZXN1bHQgPSBnZXRfYXR0
cmlidXRlKHNlc3Npb24sICJmb28iLCAiaWQiKQorCisgICAgYXNzZXJ0X3N1Y2Nlc3MocmVzdWx0
LCAiZm9vIikKKyAgICBhc3NlcnRfZGlhbG9nX2hhbmRsZWQoc2Vzc2lvbiwgImRpc21pc3MgIzEi
KQorCisgICAgY3JlYXRlX2RpYWxvZyhzZXNzaW9uKSgiY29uZmlybSIsIHRleHQ9ImRpc21pc3Mg
IzIiLCByZXN1bHRfdmFyPSJkaXNtaXNzMiIpCisKKyAgICByZXN1bHQgPSBnZXRfYXR0cmlidXRl
KHNlc3Npb24sICJmb28iLCAiaWQiKQorCisgICAgYXNzZXJ0X3N1Y2Nlc3MocmVzdWx0LCAiZm9v
IikKKyAgICBhc3NlcnRfZGlhbG9nX2hhbmRsZWQoc2Vzc2lvbiwgImRpc21pc3MgIzIiKQorCisg
ICAgY3JlYXRlX2RpYWxvZyhzZXNzaW9uKSgicHJvbXB0IiwgdGV4dD0iZGlzbWlzcyAjMyIsIHJl
c3VsdF92YXI9ImRpc21pc3MzIikKKworICAgIHJlc3VsdCA9IGdldF9hdHRyaWJ1dGUoc2Vzc2lv
biwgImZvbyIsICJpZCIpCisKKyAgICBhc3NlcnRfc3VjY2VzcyhyZXN1bHQsICJmb28iKQorICAg
IGFzc2VydF9kaWFsb2dfaGFuZGxlZChzZXNzaW9uLCAiZGlzbWlzcyAjMyIpCisKKworZGVmIHRl
c3RfaGFuZGxlX3Byb21wdF9taXNzaW5nX3ZhbHVlKHNlc3Npb24sIGNyZWF0ZV9kaWFsb2cpOgor
ICAgICMgMTMuMiBzdGVwIDIKKyAgICBzZXNzaW9uLnVybCA9IGlubGluZSgiPGlucHV0IGlkPWZv
bz4iKQorCisgICAgY3JlYXRlX2RpYWxvZyhzZXNzaW9uKSgiYWxlcnQiLCB0ZXh0PSJkaXNtaXNz
ICMxIiwgcmVzdWx0X3Zhcj0iZGlzbWlzczEiKQorCisgICAgcmVzdWx0ID0gZ2V0X2F0dHJpYnV0
ZShzZXNzaW9uLCAiZm9vIiwgImlkIikKKworICAgIGFzc2VydF9lcnJvcihyZXN1bHQsICJ1bmV4
cGVjdGVkIGFsZXJ0IG9wZW4iKQorICAgIGFzc2VydF9kaWFsb2dfaGFuZGxlZChzZXNzaW9uLCAi
ZGlzbWlzcyAjMSIpCisKKyAgICBjcmVhdGVfZGlhbG9nKHNlc3Npb24pKCJjb25maXJtIiwgdGV4
dD0iZGlzbWlzcyAjMiIsIHJlc3VsdF92YXI9ImRpc21pc3MyIikKKworICAgIHJlc3VsdCA9IGdl
dF9hdHRyaWJ1dGUoc2Vzc2lvbiwgImZvbyIsICJpZCIpCisKKyAgICBhc3NlcnRfZXJyb3IocmVz
dWx0LCAidW5leHBlY3RlZCBhbGVydCBvcGVuIikKKyAgICBhc3NlcnRfZGlhbG9nX2hhbmRsZWQo
c2Vzc2lvbiwgImRpc21pc3MgIzIiKQorCisgICAgY3JlYXRlX2RpYWxvZyhzZXNzaW9uKSgicHJv
bXB0IiwgdGV4dD0iZGlzbWlzcyAjMyIsIHJlc3VsdF92YXI9ImRpc21pc3MzIikKKworICAgIHJl
c3VsdCA9IGdldF9hdHRyaWJ1dGUoc2Vzc2lvbiwgImZvbyIsICJpZCIpCisKKyAgICBhc3NlcnRf
ZXJyb3IocmVzdWx0LCAidW5leHBlY3RlZCBhbGVydCBvcGVuIikKKyAgICBhc3NlcnRfZGlhbG9n
X2hhbmRsZWQoc2Vzc2lvbiwgImRpc21pc3MgIzMiKQorCisKK2RlZiB0ZXN0X2VsZW1lbnRfbm90
X2ZvdW5kKHNlc3Npb24pOgorICAgICMgMTMuMiBTdGVwIDMKKyAgICByZXN1bHQgPSBnZXRfYXR0
cmlidXRlKHNlc3Npb24sICJmb28iLCAiaWQiKQorCisgICAgYXNzZXJ0X2Vycm9yKHJlc3VsdCwg
Im5vIHN1Y2ggZWxlbWVudCIpCisKKworZGVmIHRlc3RfZWxlbWVudF9zdGFsZShzZXNzaW9uKToK
KyAgICAjIDEzLjIgc3RlcCA0CisgICAgc2Vzc2lvbi51cmwgPSBpbmxpbmUoIjxpbnB1dCBpZD1m
b28+IikKKyAgICBlbGVtZW50ID0gc2Vzc2lvbi5maW5kLmNzcygiaW5wdXQiLCBhbGw9RmFsc2Up
CisgICAgc2Vzc2lvbi5yZWZyZXNoKCkKKyAgICByZXN1bHQgPSBnZXRfYXR0cmlidXRlKHNlc3Np
b24sIGVsZW1lbnQuaWQsICJpZCIpCisKKyAgICBhc3NlcnRfZXJyb3IocmVzdWx0LCAic3RhbGUg
ZWxlbWVudCByZWZlcmVuY2UiKQorCisKK2RlZiB0ZXN0X25vcm1hbChzZXNzaW9uKToKKyAgICAj
IDEzLjIgU3RlcCA1CisgICAgc2Vzc2lvbi51cmwgPSBpbmxpbmUoIjxpbnB1dCB0eXBlPWNoZWNr
Ym94PiIpCisgICAgZWxlbWVudCA9IHNlc3Npb24uZmluZC5jc3MoImlucHV0IiwgYWxsPUZhbHNl
KQorICAgIHJlc3VsdCA9IGdldF9hdHRyaWJ1dGUoc2Vzc2lvbiwgZWxlbWVudC5pZCwgImlucHV0
IikKKyAgICBhc3NlcnRfc3VjY2VzcyhyZXN1bHQsIE5vbmUpCisgICAgYXNzZXJ0IEZhbHNlID09
IHNlc3Npb24uZXhlY3V0ZV9zY3JpcHQoInJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdp
bnB1dCcpLmNoZWNrZWQiKQorCisgICAgIyBDaGVjayB3ZSBhcmUgbm90IHJldHVybmluZyB0aGUg
cHJvcGVydHkgd2hpY2ggd2lsbCBoYXZlIGEgZGlmZmVyZW50IHZhbHVlCisgICAgZWxlbWVudC5j
bGljaygpCisgICAgYXNzZXJ0IFRydWUgPT0gc2Vzc2lvbi5leGVjdXRlX3NjcmlwdCgicmV0dXJu
IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JykuY2hlY2tlZCIpCisgICAgcmVzdWx0ID0g
Z2V0X2F0dHJpYnV0ZShzZXNzaW9uLCBlbGVtZW50LmlkLCAiaW5wdXQiKQorICAgIGFzc2VydF9z
dWNjZXNzKHJlc3VsdCwgTm9uZSkKKworCitAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoInRhZyxh
dHRycyIsIFsKKyAgICAoImF1ZGlvIiwgWyJhdXRvcGxheSIsICJjb250cm9scyIsICJsb29wIiwg
Im11dGVkIl0pLAorICAgICgiYnV0dG9uIiwgWyJhdXRvZm9jdXMiLCAiZGlzYWJsZWQiLCAiZm9y
bW5vdmFsaWRhdGUiXSksCisgICAgKCJkZXRhaWxzIiwgWyJvcGVuIl0pLAorICAgICgiZGlhbG9n
IiwgWyJvcGVuIl0pLAorICAgICgiZmllbGRzZXQiLCBbImRpc2FibGVkIl0pLAorICAgICgiZm9y
bSIsIFsibm92YWxpZGF0ZSJdKSwKKyAgICAoImlmcmFtZSIsIFsiYWxsb3dmdWxsc2NyZWVuIl0p
LAorICAgICgiaW1nIiwgWyJpc21hcCJdKSwKKyAgICAoImlucHV0IiwgWyJhdXRvZm9jdXMiLCAi
Y2hlY2tlZCIsICJkaXNhYmxlZCIsICJmb3Jtbm92YWxpZGF0ZSIsICJtdWx0aXBsZSIsICJyZWFk
b25seSIsICJyZXF1aXJlZCJdKSwKKyAgICAoIm1lbnVpdGVtIiwgWyJjaGVja2VkIiwgImRlZmF1
bHQiLCAiZGlzYWJsZWQiXSksCisgICAgKCJvYmplY3QiLCBbInR5cGVtdXN0bWF0Y2giXSksCisg
ICAgKCJvbCIsIFsicmV2ZXJzZWQiXSksCisgICAgKCJvcHRncm91cCIsIFsiZGlzYWJsZWQiXSks
CisgICAgKCJvcHRpb24iLCBbImRpc2FibGVkIiwgInNlbGVjdGVkIl0pLAorICAgICgic2NyaXB0
IiwgWyJhc3luYyIsICJkZWZlciJdKSwKKyAgICAoInNlbGVjdCIsIFsiYXV0b2ZvY3VzIiwgImRp
c2FibGVkIiwgIm11bHRpcGxlIiwgInJlcXVpcmVkIl0pLAorICAgICgidGV4dGFyZWEiLCBbImF1
dG9mb2N1cyIsICJkaXNhYmxlZCIsICJyZWFkb25seSIsICJyZXF1aXJlZCJdKSwKKyAgICAoInRy
YWNrIiwgWyJkZWZhdWx0Il0pLAorICAgICgidmlkZW8iLCBbImF1dG9wbGF5IiwgImNvbnRyb2xz
IiwgImxvb3AiLCAibXV0ZWQiXSkKK10pCitkZWYgdGVzdF9ib29sZWFuX2F0dHJpYnV0ZShzZXNz
aW9uLCB0YWcsIGF0dHJzKToKKyAgICAjIDEzLjIgU3RlcCA1CisgICAgZm9yIGF0dHIgaW4gYXR0
cnM6CisgICAgICAgIHNlc3Npb24udXJsID0gaW5saW5lKCI8ezB9IHsxfT4iLmZvcm1hdCh0YWcs
IGF0dHIpKQorCisgICAgICAgIGVsZW1lbnQgPSBzZXNzaW9uLmZpbmQuY3NzKHRhZywgYWxsPUZh
bHNlKQorICAgICAgICByZXN1bHQgPSByZXN1bHQgPSBnZXRfYXR0cmlidXRlKHNlc3Npb24sIGVs
ZW1lbnQuaWQsIGF0dHIpCisgICAgICAgIGFzc2VydF9zdWNjZXNzKHJlc3VsdCwgInRydWUiKQor
CisKK2RlZiB0ZXN0X2dsb2JhbF9ib29sZWFuX2F0dHJpYnV0ZXMoc2Vzc2lvbik6CisgICAgIyAx
My4yIFN0ZXAgNQorICAgIHNlc3Npb24udXJsID0gaW5saW5lKCI8cCBoaWRkZW4+Zm9vIikKKyAg
ICBlbGVtZW50ID0gc2Vzc2lvbi5maW5kLmNzcygicCIsIGFsbD1GYWxzZSkKKyAgICByZXN1bHQg
PSByZXN1bHQgPSBnZXRfYXR0cmlidXRlKHNlc3Npb24sIGVsZW1lbnQuaWQsICJoaWRkZW4iKQor
CisgICAgYXNzZXJ0X3N1Y2Nlc3MocmVzdWx0LCAidHJ1ZSIpCisKKyAgICBzZXNzaW9uLnVybCA9
IGlubGluZSgiPHA+Zm9vIikKKyAgICBlbGVtZW50ID0gc2Vzc2lvbi5maW5kLmNzcygicCIsIGFs
bD1GYWxzZSkKKyAgICByZXN1bHQgPSByZXN1bHQgPSBnZXRfYXR0cmlidXRlKHNlc3Npb24sIGVs
ZW1lbnQuaWQsICJoaWRkZW4iKQorICAgIGFzc2VydF9zdWNjZXNzKHJlc3VsdCwgTm9uZSkKKwor
ICAgIHNlc3Npb24udXJsID0gaW5saW5lKCI8cCBpdGVtc2NvcGU+Zm9vIikKKyAgICBlbGVtZW50
ID0gc2Vzc2lvbi5maW5kLmNzcygicCIsIGFsbD1GYWxzZSkKKyAgICByZXN1bHQgPSByZXN1bHQg
PSBnZXRfYXR0cmlidXRlKHNlc3Npb24sIGVsZW1lbnQuaWQsICJpdGVtc2NvcGUiKQorCisgICAg
YXNzZXJ0X3N1Y2Nlc3MocmVzdWx0LCAidHJ1ZSIpCisKKyAgICBzZXNzaW9uLnVybCA9IGlubGlu
ZSgiPHA+Zm9vIikKKyAgICBlbGVtZW50ID0gc2Vzc2lvbi5maW5kLmNzcygicCIsIGFsbD1GYWxz
ZSkKKyAgICByZXN1bHQgPSByZXN1bHQgPSBnZXRfYXR0cmlidXRlKHNlc3Npb24sIGVsZW1lbnQu
aWQsICJpdGVtc2NvcGUiKQorICAgIGFzc2VydF9zdWNjZXNzKHJlc3VsdCwgTm9uZSkKZGlmZiAt
LWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvc3RhdGUv
Z2V0X2VsZW1lbnRfcHJvcGVydHkucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
ZHJpdmVyL3Rlc3RzL3N0YXRlL2dldF9lbGVtZW50X3Byb3BlcnR5LnB5Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wMGE4NWFmNjliNQotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvc3RhdGUvZ2V0X2Vs
ZW1lbnRfcHJvcGVydHkucHkKQEAgLTAsMCArMSwxNjQgQEAKK2Zyb20gdGVzdHMuc3VwcG9ydC5h
c3NlcnRzIGltcG9ydCBhc3NlcnRfZXJyb3IsIGFzc2VydF9kaWFsb2dfaGFuZGxlZCwgYXNzZXJ0
X3N1Y2Nlc3MKK2Zyb20gdGVzdHMuc3VwcG9ydC5pbmxpbmUgaW1wb3J0IGlubGluZQorZnJvbSB0
ZXN0cy5zdXBwb3J0LmZpeHR1cmVzIGltcG9ydCBjcmVhdGVfZGlhbG9nCisKK19pbnB1dCA9IGlu
bGluZSgiPGlucHV0IGlkPWkxPiIpCisKKworIyAxMy4zIEdldCBFbGVtZW50IFByb3BlcnR5CisK
K2RlZiB0ZXN0X25vX2Jyb3dzaW5nX2NvbnRleHQoc2Vzc2lvbiwgY3JlYXRlX3dpbmRvdyk6Cisg
ICAgIyAxMy4zIHN0ZXAgMQorICAgIHNlc3Npb24ud2luZG93X2hhbmRsZSA9IGNyZWF0ZV93aW5k
b3coKQorICAgIHNlc3Npb24uY2xvc2UoKQorCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3Bv
cnQuc2VuZCgiR0VUIiwgInNlc3Npb24ve3Nlc3Npb25faWR9L2VsZW1lbnQve2VsZW1lbnRfaWR9
L3Byb3BlcnR5L2lkIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1h
dChzZXNzaW9uX2lkPXNlc3Npb24uc2Vzc2lvbl9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZWxlbWVudF9pZD0iZm9vIikpCisKKyAgICBhc3NlcnRfZXJy
b3IocmVzdWx0LCAibm8gc3VjaCB3aW5kb3ciKQorCisKK2RlZiB0ZXN0X2hhbmRsZV9wcm9tcHRf
ZGlzbWlzcyhuZXdfc2Vzc2lvbik6CisgICAgIyAxMy4zIHN0ZXAgMgorICAgIF8sIHNlc3Npb24g
PSBuZXdfc2Vzc2lvbih7ImFsd2F5c01hdGNoIjogeyJ1bmhhbmRsZWRQcm9tcHRCZWhhdmlvciI6
ICJkaXNtaXNzIn19KQorICAgIHNlc3Npb24udXJsID0gaW5saW5lKCI8aW5wdXQgaWQ9Zm9vPiIp
CisKKyAgICBjcmVhdGVfZGlhbG9nKHNlc3Npb24pKCJhbGVydCIsIHRleHQ9ImRpc21pc3MgIzEi
LCByZXN1bHRfdmFyPSJkaXNtaXNzMSIpCisKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9y
dC5zZW5kKCJHRVQiLCAic2Vzc2lvbi97c2Vzc2lvbl9pZH0vZWxlbWVudC97ZWxlbWVudF9pZH0v
cHJvcGVydHkvaWQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0
KHNlc3Npb25faWQ9c2Vzc2lvbi5zZXNzaW9uX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbGVtZW50X2lkPSJmb28iKSkKKworICAgIGFzc2VydF9zdWNj
ZXNzKHJlc3VsdCwgImZvbyIpCisgICAgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNlc3Npb24sICJk
aXNtaXNzICMxIikKKworICAgIGNyZWF0ZV9kaWFsb2coc2Vzc2lvbikoImNvbmZpcm0iLCB0ZXh0
PSJkaXNtaXNzICMyIiwgcmVzdWx0X3Zhcj0iZGlzbWlzczIiKQorCisgICAgcmVzdWx0ID0gc2Vz
c2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwgInNlc3Npb24ve3Nlc3Npb25faWR9L2VsZW1lbnQv
e2VsZW1lbnRfaWR9L3Byb3BlcnR5L2lkIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLmZvcm1hdChzZXNzaW9uX2lkPXNlc3Npb24uc2Vzc2lvbl9pZCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudF9pZD0iZm9vIikpCisKKyAg
ICBhc3NlcnRfc3VjY2VzcyhyZXN1bHQsICJmb28iKQorICAgIGFzc2VydF9kaWFsb2dfaGFuZGxl
ZChzZXNzaW9uLCAiZGlzbWlzcyAjMiIpCisKKyAgICBjcmVhdGVfZGlhbG9nKHNlc3Npb24pKCJw
cm9tcHQiLCB0ZXh0PSJkaXNtaXNzICMzIiwgcmVzdWx0X3Zhcj0iZGlzbWlzczMiKQorCisgICAg
cmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwgInNlc3Npb24ve3Nlc3Npb25f
aWR9L2VsZW1lbnQve2VsZW1lbnRfaWR9L3Byb3BlcnR5L2lkIgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLmZvcm1hdChzZXNzaW9uX2lkPXNlc3Npb24uc2Vzc2lvbl9pZCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudF9pZD0i
Zm9vIikpCisKKyAgICBhc3NlcnRfc3VjY2VzcyhyZXN1bHQsICJmb28iKQorICAgIGFzc2VydF9k
aWFsb2dfaGFuZGxlZChzZXNzaW9uLCAiZGlzbWlzcyAjMyIpCisKKworCitkZWYgdGVzdF9oYW5k
bGVfcHJvbXB0X2FjY2VwdChuZXdfc2Vzc2lvbik6CisgICAgIyAxMy4zIHN0ZXAgMgorICAgIF8s
IHNlc3Npb24gPSBuZXdfc2Vzc2lvbih7ImFsd2F5c01hdGNoIjogeyJ1bmhhbmRsZWRQcm9tcHRC
ZWhhdmlvciI6ICJhY2NlcHQifX0pCisgICAgc2Vzc2lvbi51cmwgPSBpbmxpbmUoIjxpbnB1dCBp
ZD1mb28+IikKKworICAgIGNyZWF0ZV9kaWFsb2coc2Vzc2lvbikoImFsZXJ0IiwgdGV4dD0iZGlz
bWlzcyAjMSIsIHJlc3VsdF92YXI9ImRpc21pc3MxIikKKworICAgIHJlc3VsdCA9IHNlc3Npb24u
dHJhbnNwb3J0LnNlbmQoIkdFVCIsICJzZXNzaW9uL3tzZXNzaW9uX2lkfS9lbGVtZW50L3tlbGVt
ZW50X2lkfS9wcm9wZXJ0eS9pZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC5mb3JtYXQoc2Vzc2lvbl9pZD1zZXNzaW9uLnNlc3Npb25faWQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRfaWQ9ImZvbyIpKQorCisgICAgYXNz
ZXJ0X3N1Y2Nlc3MocmVzdWx0LCAiZm9vIikKKyAgICBhc3NlcnRfZGlhbG9nX2hhbmRsZWQoc2Vz
c2lvbiwgImRpc21pc3MgIzEiKQorCisgICAgY3JlYXRlX2RpYWxvZyhzZXNzaW9uKSgiY29uZmly
bSIsIHRleHQ9ImRpc21pc3MgIzIiLCByZXN1bHRfdmFyPSJkaXNtaXNzMiIpCisKKyAgICByZXN1
bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLCAic2Vzc2lvbi97c2Vzc2lvbl9pZH0v
ZWxlbWVudC97ZWxlbWVudF9pZH0vcHJvcGVydHkvaWQiCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAuZm9ybWF0KHNlc3Npb25faWQ9c2Vzc2lvbi5zZXNzaW9uX2lkLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50X2lkPSJmb28i
KSkKKworICAgIGFzc2VydF9zdWNjZXNzKHJlc3VsdCwgImZvbyIpCisgICAgYXNzZXJ0X2RpYWxv
Z19oYW5kbGVkKHNlc3Npb24sICJkaXNtaXNzICMyIikKKworICAgIGNyZWF0ZV9kaWFsb2coc2Vz
c2lvbikoInByb21wdCIsIHRleHQ9ImRpc21pc3MgIzMiLCByZXN1bHRfdmFyPSJkaXNtaXNzMyIp
CisKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLCAic2Vzc2lvbi97
c2Vzc2lvbl9pZH0vZWxlbWVudC97ZWxlbWVudF9pZH0vcHJvcGVydHkvaWQiCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHNlc3Npb25faWQ9c2Vzc2lvbi5zZXNz
aW9uX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVt
ZW50X2lkPSJmb28iKSkKKworICAgIGFzc2VydF9zdWNjZXNzKHJlc3VsdCwgImZvbyIpCisgICAg
YXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNlc3Npb24sICJkaXNtaXNzICMzIikKKworCitkZWYgdGVz
dF9oYW5kbGVfcHJvbXB0X21pc3NpbmdfdmFsdWUoc2Vzc2lvbiwgY3JlYXRlX2RpYWxvZyk6Cisg
ICAgIyAxMy4zIHN0ZXAgMgorICAgIHNlc3Npb24udXJsID0gaW5saW5lKCI8aW5wdXQgaWQ9Zm9v
PiIpCisKKyAgICBjcmVhdGVfZGlhbG9nKHNlc3Npb24pKCJhbGVydCIsIHRleHQ9ImRpc21pc3Mg
IzEiLCByZXN1bHRfdmFyPSJkaXNtaXNzMSIpCisKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5z
cG9ydC5zZW5kKCJHRVQiLCAic2Vzc2lvbi97c2Vzc2lvbl9pZH0vZWxlbWVudC97ZWxlbWVudF9p
ZH0vcHJvcGVydHkvaWQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9y
bWF0KHNlc3Npb25faWQ9c2Vzc2lvbi5zZXNzaW9uX2lkLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50X2lkPSJmb28iKSkKKworICAgIGFzc2VydF9l
cnJvcihyZXN1bHQsICJ1bmV4cGVjdGVkIGFsZXJ0IG9wZW4iKQorICAgIGFzc2VydF9kaWFsb2df
aGFuZGxlZChzZXNzaW9uLCAiZGlzbWlzcyAjMSIpCisKKyAgICBjcmVhdGVfZGlhbG9nKHNlc3Np
b24pKCJjb25maXJtIiwgdGV4dD0iZGlzbWlzcyAjMiIsIHJlc3VsdF92YXI9ImRpc21pc3MyIikK
KworICAgIHJlc3VsdCA9IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIkdFVCIsICJzZXNzaW9uL3tz
ZXNzaW9uX2lkfS9lbGVtZW50L3tlbGVtZW50X2lkfS9wcm9wZXJ0eS9pZCIKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoc2Vzc2lvbl9pZD1zZXNzaW9uLnNlc3Np
b25faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1l
bnRfaWQ9ImZvbyIpKQorCisgICAgYXNzZXJ0X2Vycm9yKHJlc3VsdCwgInVuZXhwZWN0ZWQgYWxl
cnQgb3BlbiIpCisgICAgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNlc3Npb24sICJkaXNtaXNzICMy
IikKKworICAgIGNyZWF0ZV9kaWFsb2coc2Vzc2lvbikoInByb21wdCIsIHRleHQ9ImRpc21pc3Mg
IzMiLCByZXN1bHRfdmFyPSJkaXNtaXNzMyIpCisKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5z
cG9ydC5zZW5kKCJHRVQiLCAic2Vzc2lvbi97c2Vzc2lvbl9pZH0vZWxlbWVudC97ZWxlbWVudF9p
ZH0vcHJvcGVydHkvaWQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9y
bWF0KHNlc3Npb25faWQ9c2Vzc2lvbi5zZXNzaW9uX2lkLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50X2lkPSJmb28iKSkKKworICAgIGFzc2VydF9l
cnJvcihyZXN1bHQsICJ1bmV4cGVjdGVkIGFsZXJ0IG9wZW4iKQorICAgIGFzc2VydF9kaWFsb2df
aGFuZGxlZChzZXNzaW9uLCAiZGlzbWlzcyAjMyIpCisKK2RlZiB0ZXN0X2VsZW1lbnRfbm90X2Zv
dW5kKHNlc3Npb24pOgorICAgICMgMTMuMyBTdGVwIDMKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRy
YW5zcG9ydC5zZW5kKCJHRVQiLCAic2Vzc2lvbi97c2Vzc2lvbl9pZH0vZWxlbWVudC97ZWxlbWVu
dF9pZH0vcHJvcGVydHkvaWQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAu
Zm9ybWF0KHNlc3Npb25faWQ9c2Vzc2lvbi5zZXNzaW9uX2lkLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50X2lkPSJmb28iKSkKKworICAgIGFzc2Vy
dF9lcnJvcihyZXN1bHQsICJubyBzdWNoIGVsZW1lbnQiKQorCisKK2RlZiB0ZXN0X2VsZW1lbnRf
c3RhbGUoc2Vzc2lvbik6CisgICAgIyAxMy4zIHN0ZXAgNAorICAgIHNlc3Npb24udXJsID0gX2lu
cHV0CisgICAgZWxlbWVudCA9IHNlc3Npb24uZmluZC5jc3MoImlucHV0IiwgYWxsPUZhbHNlKQor
ICAgIHNlc3Npb24ucmVmcmVzaCgpCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2Vu
ZCgiR0VUIiwgInNlc3Npb24ve3Nlc3Npb25faWR9L2VsZW1lbnQve2VsZW1lbnRfaWR9L3Byb3Bl
cnR5L2lkIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChzZXNz
aW9uX2lkPXNlc3Npb24uc2Vzc2lvbl9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWxlbWVudF9pZD1lbGVtZW50LmlkKSkKKworICAgIGFzc2VydF9lcnJv
cihyZXN1bHQsICJzdGFsZSBlbGVtZW50IHJlZmVyZW5jZSIpCisKKworZGVmIHRlc3RfZWxlbWVu
dF9ub25fZXhpc3RlbnQoc2Vzc2lvbik6CisgICAgIyAxMy4zIHN0ZXAgNS03CisgICAgc2Vzc2lv
bi51cmwgPSBfaW5wdXQKKyAgICBlbGVtZW50ID0gc2Vzc2lvbi5maW5kLmNzcygiaW5wdXQiLCBh
bGw9RmFsc2UpCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwgInNl
c3Npb24ve3Nlc3Npb25faWR9L2VsZW1lbnQve2VsZW1lbnRfaWR9L3Byb3BlcnR5L2ZvbyIKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoc2Vzc2lvbl9pZD1zZXNz
aW9uLnNlc3Npb25faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVsZW1lbnRfaWQ9ZWxlbWVudC5pZCkpCisKKyAgICBhc3NlcnRfc3VjY2VzcyhyZXN1bHQs
IE5vbmUpCisgICAgYXNzZXJ0IE5vbmUgPT0gc2Vzc2lvbi5leGVjdXRlX3NjcmlwdCgicmV0dXJu
IGFyZ3VtZW50c1swXS5mb28iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYXJncz1bZWxlbWVudF0pCisKKworZGVmIHRlc3RfZWxlbWVudChzZXNzaW9uKToKKyAg
ICAjIDEzLjMgc3RlcCA1LTcKKyAgICBzZXNzaW9uLnVybCA9IGlubGluZSgiPGlucHV0IHR5cGU9
Y2hlY2tib3g+IikKKyAgICBlbGVtZW50ID0gc2Vzc2lvbi5maW5kLmNzcygiaW5wdXQiLCBhbGw9
RmFsc2UpCisgICAgZWxlbWVudC5jbGljaygpCisgICAgYXNzZXJ0IE5vbmUgPT0gc2Vzc2lvbi5l
eGVjdXRlX3NjcmlwdCgicmV0dXJuIGFyZ3VtZW50c1swXS5oYXNBdHRyaWJ1dGUoJ2NoZWNrZWQn
KSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzPVtlbGVt
ZW50XSkKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLCAic2Vzc2lv
bi97c2Vzc2lvbl9pZH0vZWxlbWVudC97ZWxlbWVudF9pZH0vcHJvcGVydHkvaWQiCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHNlc3Npb25faWQ9c2Vzc2lvbi5z
ZXNzaW9uX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
bGVtZW50X2lkPWVsZW1lbnQuaWQpKQorICAgIGFzc2VydF9zdWNjZXNzKHJlc3VsdCwgVHJ1ZSkK
ZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMv
c3RhdGUvZ2V0X2VsZW1lbnRfdGFnX25hbWUucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViZHJpdmVyL3Rlc3RzL3N0YXRlL2dldF9lbGVtZW50X3RhZ19uYW1lLnB5Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40MTAwZTliMWUxNwotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvc3RhdGUv
Z2V0X2VsZW1lbnRfdGFnX25hbWUucHkKQEAgLTAsMCArMSwxNDYgQEAKK2Zyb20gdGVzdHMuc3Vw
cG9ydC5hc3NlcnRzIGltcG9ydCBhc3NlcnRfZXJyb3IsIGFzc2VydF9kaWFsb2dfaGFuZGxlZCwg
YXNzZXJ0X3N1Y2Nlc3MKK2Zyb20gdGVzdHMuc3VwcG9ydC5pbmxpbmUgaW1wb3J0IGlubGluZQor
ZnJvbSB0ZXN0cy5zdXBwb3J0LmZpeHR1cmVzIGltcG9ydCBjcmVhdGVfZGlhbG9nCisKKworIyAx
My42IEdldCBFbGVtZW50IFRhZyBOYW1lCisKK2RlZiB0ZXN0X25vX2Jyb3dzaW5nX2NvbnRleHQo
c2Vzc2lvbiwgY3JlYXRlX3dpbmRvdyk6CisgICAgIyAxMy42IHN0ZXAgMQorICAgIHNlc3Npb24u
d2luZG93X2hhbmRsZSA9IGNyZWF0ZV93aW5kb3coKQorICAgIHNlc3Npb24uY2xvc2UoKQorCisg
ICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwgInNlc3Npb24ve3Nlc3Np
b25faWR9L2VsZW1lbnQve2VsZW1lbnRfaWR9L25hbWUiCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAuZm9ybWF0KHNlc3Npb25faWQ9c2Vzc2lvbi5zZXNzaW9uX2lkLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50X2lkPSJmb28i
KSkKKworICAgIGFzc2VydF9lcnJvcihyZXN1bHQsICJubyBzdWNoIHdpbmRvdyIpCisKKworZGVm
IHRlc3RfaGFuZGxlX3Byb21wdF9kaXNtaXNzKG5ld19zZXNzaW9uKToKKyAgICAjIDEzLjYgc3Rl
cCAyCisgICAgXywgc2Vzc2lvbiA9IG5ld19zZXNzaW9uKHsiYWx3YXlzTWF0Y2giOiB7InVuaGFu
ZGxlZFByb21wdEJlaGF2aW9yIjogImRpc21pc3MifX0pCisgICAgc2Vzc2lvbi51cmwgPSBpbmxp
bmUoIjxpbnB1dCBpZD1mb28+IikKKworICAgIGNyZWF0ZV9kaWFsb2coc2Vzc2lvbikoImFsZXJ0
IiwgdGV4dD0iZGlzbWlzcyAjMSIsIHJlc3VsdF92YXI9ImRpc21pc3MxIikKKworICAgIHJlc3Vs
dCA9IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIkdFVCIsICJzZXNzaW9uL3tzZXNzaW9uX2lkfS9l
bGVtZW50L3tlbGVtZW50X2lkfS9uYW1lIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLmZvcm1hdChzZXNzaW9uX2lkPXNlc3Npb24uc2Vzc2lvbl9pZCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudF9pZD0iZm9vIikpCisKKyAg
ICBhc3NlcnRfc3VjY2VzcyhyZXN1bHQsICJmb28iKQorICAgIGFzc2VydF9kaWFsb2dfaGFuZGxl
ZChzZXNzaW9uLCAiZGlzbWlzcyAjMSIpCisKKyAgICBjcmVhdGVfZGlhbG9nKHNlc3Npb24pKCJj
b25maXJtIiwgdGV4dD0iZGlzbWlzcyAjMiIsIHJlc3VsdF92YXI9ImRpc21pc3MyIikKKworICAg
IHJlc3VsdCA9IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIkdFVCIsICJzZXNzaW9uL3tzZXNzaW9u
X2lkfS9lbGVtZW50L3tlbGVtZW50X2lkfS9uYW1lIgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLmZvcm1hdChzZXNzaW9uX2lkPXNlc3Npb24uc2Vzc2lvbl9pZCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudF9pZD0iZm9vIikp
CisKKyAgICBhc3NlcnRfc3VjY2VzcyhyZXN1bHQsICJmb28iKQorICAgIGFzc2VydF9kaWFsb2df
aGFuZGxlZChzZXNzaW9uLCAiZGlzbWlzcyAjMiIpCisKKyAgICBjcmVhdGVfZGlhbG9nKHNlc3Np
b24pKCJwcm9tcHQiLCB0ZXh0PSJkaXNtaXNzICMzIiwgcmVzdWx0X3Zhcj0iZGlzbWlzczMiKQor
CisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwgInNlc3Npb24ve3Nl
c3Npb25faWR9L2VsZW1lbnQve2VsZW1lbnRfaWR9L25hbWUiCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAuZm9ybWF0KHNlc3Npb25faWQ9c2Vzc2lvbi5zZXNzaW9uX2lkLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50X2lkPSJm
b28iKSkKKworICAgIGFzc2VydF9zdWNjZXNzKHJlc3VsdCwgImZvbyIpCisgICAgYXNzZXJ0X2Rp
YWxvZ19oYW5kbGVkKHNlc3Npb24sICJkaXNtaXNzICMzIikKKworCitkZWYgdGVzdF9oYW5kbGVf
cHJvbXB0X2FjY2VwdChuZXdfc2Vzc2lvbik6CisgICAgIyAxMy42IHN0ZXAgMgorICAgIF8sIHNl
c3Npb24gPSBuZXdfc2Vzc2lvbih7ImFsd2F5c01hdGNoIjogeyJ1bmhhbmRsZWRQcm9tcHRCZWhh
dmlvciI6ICJhY2NlcHQifX0pCisgICAgc2Vzc2lvbi51cmwgPSBpbmxpbmUoIjxpbnB1dCBpZD1m
b28+IikKKworICAgIGNyZWF0ZV9kaWFsb2coc2Vzc2lvbikoImFsZXJ0IiwgdGV4dD0iZGlzbWlz
cyAjMSIsIHJlc3VsdF92YXI9ImRpc21pc3MxIikKKworICAgIHJlc3VsdCA9IHNlc3Npb24udHJh
bnNwb3J0LnNlbmQoIkdFVCIsICJzZXNzaW9uL3tzZXNzaW9uX2lkfS9lbGVtZW50L3tlbGVtZW50
X2lkfS9uYW1lIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChz
ZXNzaW9uX2lkPXNlc3Npb24uc2Vzc2lvbl9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZWxlbWVudF9pZD0iZm9vIikpCisKKyAgICBhc3NlcnRfc3VjY2Vz
cyhyZXN1bHQsICJmb28iKQorICAgIGFzc2VydF9kaWFsb2dfaGFuZGxlZChzZXNzaW9uLCAiZGlz
bWlzcyAjMSIpCisKKyAgICBjcmVhdGVfZGlhbG9nKHNlc3Npb24pKCJjb25maXJtIiwgdGV4dD0i
ZGlzbWlzcyAjMiIsIHJlc3VsdF92YXI9ImRpc21pc3MyIikKKworICAgIHJlc3VsdCA9IHNlc3Np
b24udHJhbnNwb3J0LnNlbmQoIkdFVCIsICJzZXNzaW9uL3tzZXNzaW9uX2lkfS9lbGVtZW50L3tl
bGVtZW50X2lkfS9uYW1lIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZv
cm1hdChzZXNzaW9uX2lkPXNlc3Npb24uc2Vzc2lvbl9pZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudF9pZD0iZm9vIikpCisKKyAgICBhc3NlcnRf
c3VjY2VzcyhyZXN1bHQsICJmb28iKQorICAgIGFzc2VydF9kaWFsb2dfaGFuZGxlZChzZXNzaW9u
LCAiZGlzbWlzcyAjMiIpCisKKyAgICBjcmVhdGVfZGlhbG9nKHNlc3Npb24pKCJwcm9tcHQiLCB0
ZXh0PSJkaXNtaXNzICMzIiwgcmVzdWx0X3Zhcj0iZGlzbWlzczMiKQorCisgICAgcmVzdWx0ID0g
c2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwgInNlc3Npb24ve3Nlc3Npb25faWR9L2VsZW1l
bnQve2VsZW1lbnRfaWR9L25hbWUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAuZm9ybWF0KHNlc3Npb25faWQ9c2Vzc2lvbi5zZXNzaW9uX2lkLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50X2lkPSJmb28iKSkKKworICAgIGFz
c2VydF9zdWNjZXNzKHJlc3VsdCwgImZvbyIpCisgICAgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNl
c3Npb24sICJkaXNtaXNzICMzIikKKworCitkZWYgdGVzdF9oYW5kbGVfcHJvbXB0X21pc3Npbmdf
dmFsdWUoc2Vzc2lvbiwgY3JlYXRlX2RpYWxvZyk6CisgICAgIyAxMy42IHN0ZXAgMgorICAgIHNl
c3Npb24udXJsID0gaW5saW5lKCI8aW5wdXQgaWQ9Zm9vPiIpCisKKyAgICBjcmVhdGVfZGlhbG9n
KHNlc3Npb24pKCJhbGVydCIsIHRleHQ9ImRpc21pc3MgIzEiLCByZXN1bHRfdmFyPSJkaXNtaXNz
MSIpCisKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLCAic2Vzc2lv
bi97c2Vzc2lvbl9pZH0vZWxlbWVudC97ZWxlbWVudF9pZH0vbmFtZSIKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoc2Vzc2lvbl9pZD1zZXNzaW9uLnNlc3Npb25f
aWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRf
aWQ9ImZvbyIpKQorCisgICAgYXNzZXJ0X2Vycm9yKHJlc3VsdCwgInVuZXhwZWN0ZWQgYWxlcnQg
b3BlbiIpCisgICAgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNlc3Npb24sICJkaXNtaXNzICMxIikK
KworICAgIGNyZWF0ZV9kaWFsb2coc2Vzc2lvbikoImNvbmZpcm0iLCB0ZXh0PSJkaXNtaXNzICMy
IiwgcmVzdWx0X3Zhcj0iZGlzbWlzczIiKQorCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3Bv
cnQuc2VuZCgiR0VUIiwgInNlc3Npb24ve3Nlc3Npb25faWR9L2VsZW1lbnQve2VsZW1lbnRfaWR9
L25hbWUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHNlc3Np
b25faWQ9c2Vzc2lvbi5zZXNzaW9uX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbGVtZW50X2lkPSJmb28iKSkKKworICAgIGFzc2VydF9lcnJvcihyZXN1
bHQsICJ1bmV4cGVjdGVkIGFsZXJ0IG9wZW4iKQorICAgIGFzc2VydF9kaWFsb2dfaGFuZGxlZChz
ZXNzaW9uLCAiZGlzbWlzcyAjMiIpCisKKyAgICBjcmVhdGVfZGlhbG9nKHNlc3Npb24pKCJwcm9t
cHQiLCB0ZXh0PSJkaXNtaXNzICMzIiwgcmVzdWx0X3Zhcj0iZGlzbWlzczMiKQorCisgICAgcmVz
dWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwgInNlc3Npb24ve3Nlc3Npb25faWR9
L2VsZW1lbnQve2VsZW1lbnRfaWR9L25hbWUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAuZm9ybWF0KHNlc3Npb25faWQ9c2Vzc2lvbi5zZXNzaW9uX2lkLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50X2lkPSJmb28iKSkKKwor
ICAgIGFzc2VydF9lcnJvcihyZXN1bHQsICJ1bmV4cGVjdGVkIGFsZXJ0IG9wZW4iKQorICAgIGFz
c2VydF9kaWFsb2dfaGFuZGxlZChzZXNzaW9uLCAiZGlzbWlzcyAjMyIpCisKKworZGVmIHRlc3Rf
ZWxlbWVudF9ub3RfZm91bmQoc2Vzc2lvbik6CisgICAgIyAxMy42IFN0ZXAgMworICAgIHJlc3Vs
dCA9IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIkdFVCIsICJzZXNzaW9uL3tzZXNzaW9uX2lkfS9l
bGVtZW50L3tlbGVtZW50X2lkfS9uYW1lIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLmZvcm1hdChzZXNzaW9uX2lkPXNlc3Npb24uc2Vzc2lvbl9pZCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudF9pZD0iZm9vIikpCisKKyAg
ICBhc3NlcnRfZXJyb3IocmVzdWx0LCAibm8gc3VjaCBlbGVtZW50IikKKworCitkZWYgdGVzdF9l
bGVtZW50X3N0YWxlKHNlc3Npb24pOgorICAgICMgMTMuNiBzdGVwIDQKKyAgICBzZXNzaW9uLnVy
bCA9IGlubGluZSgiPGlucHV0IGlkPWZvbz4iKQorICAgIGVsZW1lbnQgPSBzZXNzaW9uLmZpbmQu
Y3NzKCJpbnB1dCIsIGFsbD1GYWxzZSkKKyAgICBzZXNzaW9uLnJlZnJlc2goKQorICAgIHJlc3Vs
dCA9IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIkdFVCIsICJzZXNzaW9uL3tzZXNzaW9uX2lkfS9l
bGVtZW50L3tlbGVtZW50X2lkfS9uYW1lIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLmZvcm1hdChzZXNzaW9uX2lkPXNlc3Npb24uc2Vzc2lvbl9pZCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudF9pZD1lbGVtZW50LmlkKSkK
KworICAgIGFzc2VydF9lcnJvcihyZXN1bHQsICJzdGFsZSBlbGVtZW50IHJlZmVyZW5jZSIpCisK
KworZGVmIHRlc3RfZ2V0X2VsZW1lbnRfdGFnX25hbWUoc2Vzc2lvbik6CisgICAgIyAxMy42IHN0
ZXAgNgorICAgIHNlc3Npb24udXJsID0gaW5saW5lKCI8aW5wdXQgaWQ9Zm9vPiIpCisgICAgZWxl
bWVudCA9IHNlc3Npb24uZmluZC5jc3MoImlucHV0IiwgYWxsPUZhbHNlKQorICAgIHJlc3VsdCA9
IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIkdFVCIsICJzZXNzaW9uL3tzZXNzaW9uX2lkfS9lbGVt
ZW50L3tlbGVtZW50X2lkfS9uYW1lIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLmZvcm1hdChzZXNzaW9uX2lkPXNlc3Npb24uc2Vzc2lvbl9pZCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudF9pZD1lbGVtZW50LmlkKSkKKyAg
ICBhc3NlcnRfc3VjY2VzcyhyZXN1bHQsICJpbnB1dCIpCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL3N0YXRlL2lzX2VsZW1lbnRfc2VsZWN0
ZWQucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL3N0YXRl
L2lzX2VsZW1lbnRfc2VsZWN0ZWQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLmM4MmYyNmZhOTEyCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9zdGF0ZS9pc19lbGVtZW50X3NlbGVjdGVkLnB5CkBA
IC0wLDAgKzEsMTgwIEBACitmcm9tIHRlc3RzLnN1cHBvcnQuYXNzZXJ0cyBpbXBvcnQgYXNzZXJ0
X2Vycm9yLCBhc3NlcnRfZGlhbG9nX2hhbmRsZWQsIGFzc2VydF9zdWNjZXNzCitmcm9tIHRlc3Rz
LnN1cHBvcnQuaW5saW5lIGltcG9ydCBpbmxpbmUKK2Zyb20gdGVzdHMuc3VwcG9ydC5maXh0dXJl
cyBpbXBvcnQgY3JlYXRlX2RpYWxvZworCisKK2FsZXJ0X2RvYyA9IGlubGluZSgiPHNjcmlwdD53
aW5kb3cuYWxlcnQoKTwvc2NyaXB0PiIpCitjaGVja19kb2MgPSBpbmxpbmUoIjxpbnB1dCBpZD1j
aGVja2VkIHR5cGU9Y2hlY2tib3ggY2hlY2tlZC8+PGlucHV0IGlkPW5vdENoZWNrZWQgdHlwZT1j
aGVja2JveC8+IikKK29wdGlvbl9kb2MgPSBpbmxpbmUoIiIiPHNlbGVjdD4KKyAgICAgICAgICAg
ICAgICAgICAgICAgIDxvcHRpb24gaWQ9bm90U2VsZWN0ZWQ+ci08L29wdGlvbj4KKyAgICAgICAg
ICAgICAgICAgICAgICAgIDxvcHRpb24gaWQ9c2VsZWN0ZWQgc2VsZWN0ZWQ+cis8L29wdGlvbj4K
KyAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+CisgICAgICAgICAgICAgICAgICAgICIi
IikKKworCisjIDEzLjEgSXMgRWxlbWVudCBTZWxlY3RlZAorCitkZWYgdGVzdF9ub19icm93c2lu
Z19jb250ZXh0KHNlc3Npb24sIGNyZWF0ZV93aW5kb3cpOgorICAgICMgMTMuMSBzdGVwIDEKKyAg
ICBzZXNzaW9uLndpbmRvd19oYW5kbGUgPSBjcmVhdGVfd2luZG93KCkKKyAgICBzZXNzaW9uLmNs
b3NlKCkKKworICAgIHJlc3VsdCA9IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIkdFVCIsICJzZXNz
aW9uL3tzZXNzaW9uX2lkfS9lbGVtZW50L3tlbGVtZW50X2lkfS9zZWxlY3RlZCIKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoc2Vzc2lvbl9pZD1zZXNzaW9uLnNl
c3Npb25faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVs
ZW1lbnRfaWQ9ImZvbyIpKQorCisgICAgYXNzZXJ0X2Vycm9yKHJlc3VsdCwgIm5vIHN1Y2ggd2lu
ZG93IikKKworCitkZWYgdGVzdF9oYW5kbGVfcHJvbXB0X2Rpc21pc3MobmV3X3Nlc3Npb24pOgor
ICAgICMgMTMuMSBzdGVwIDIKKyAgICBfLCBzZXNzaW9uID0gbmV3X3Nlc3Npb24oeyJhbHdheXNN
YXRjaCI6IHsidW5oYW5kbGVkUHJvbXB0QmVoYXZpb3IiOiAiZGlzbWlzcyJ9fSkKKyAgICBzZXNz
aW9uLnVybCA9IGlubGluZSgiPGlucHV0IGlkPWZvbz4iKQorCisgICAgY3JlYXRlX2RpYWxvZyhz
ZXNzaW9uKSgiYWxlcnQiLCB0ZXh0PSJkaXNtaXNzICMxIiwgcmVzdWx0X3Zhcj0iZGlzbWlzczEi
KQorCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwgInNlc3Npb24v
e3Nlc3Npb25faWR9L2VsZW1lbnQve2VsZW1lbnRfaWR9L3NlbGVjdGVkIgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChzZXNzaW9uX2lkPXNlc3Npb24uc2Vzc2lv
bl9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVu
dF9pZD0iZm9vIikpCisKKyAgICBhc3NlcnRfc3VjY2VzcyhyZXN1bHQsICJmb28iKQorICAgIGFz
c2VydF9kaWFsb2dfaGFuZGxlZChzZXNzaW9uLCAiZGlzbWlzcyAjMSIpCisKKyAgICBjcmVhdGVf
ZGlhbG9nKHNlc3Npb24pKCJjb25maXJtIiwgdGV4dD0iZGlzbWlzcyAjMiIsIHJlc3VsdF92YXI9
ImRpc21pc3MyIikKKworICAgIHJlc3VsdCA9IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIkdFVCIs
ICJzZXNzaW9uL3tzZXNzaW9uX2lkfS9lbGVtZW50L3tlbGVtZW50X2lkfS9zZWxlY3RlZCIKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoc2Vzc2lvbl9pZD1zZXNz
aW9uLnNlc3Npb25faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVsZW1lbnRfaWQ9ImZvbyIpKQorCisgICAgYXNzZXJ0X3N1Y2Nlc3MocmVzdWx0LCAiZm9v
IikKKyAgICBhc3NlcnRfZGlhbG9nX2hhbmRsZWQoc2Vzc2lvbiwgImRpc21pc3MgIzIiKQorCisg
ICAgY3JlYXRlX2RpYWxvZyhzZXNzaW9uKSgicHJvbXB0IiwgdGV4dD0iZGlzbWlzcyAjMyIsIHJl
c3VsdF92YXI9ImRpc21pc3MzIikKKworICAgIHJlc3VsdCA9IHNlc3Npb24udHJhbnNwb3J0LnNl
bmQoIkdFVCIsICJzZXNzaW9uL3tzZXNzaW9uX2lkfS9lbGVtZW50L3tlbGVtZW50X2lkfS9zZWxl
Y3RlZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoc2Vzc2lv
bl9pZD1zZXNzaW9uLnNlc3Npb25faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVsZW1lbnRfaWQ9ImZvbyIpKQorCisgICAgYXNzZXJ0X3N1Y2Nlc3MocmVz
dWx0LCAiZm9vIikKKyAgICBhc3NlcnRfZGlhbG9nX2hhbmRsZWQoc2Vzc2lvbiwgImRpc21pc3Mg
IzMiKQorCisKK2RlZiB0ZXN0X2hhbmRsZV9wcm9tcHRfYWNjZXB0KG5ld19zZXNzaW9uKToKKyAg
ICAjIDEzLjEgc3RlcCAyCisgICAgXywgc2Vzc2lvbiA9IG5ld19zZXNzaW9uKHsiYWx3YXlzTWF0
Y2giOiB7InVuaGFuZGxlZFByb21wdEJlaGF2aW9yIjogImFjY2VwdCJ9fSkKKyAgICBzZXNzaW9u
LnVybCA9IGlubGluZSgiPGlucHV0IGlkPWZvbz4iKQorCisgICAgY3JlYXRlX2RpYWxvZyhzZXNz
aW9uKSgiYWxlcnQiLCB0ZXh0PSJkaXNtaXNzICMxIiwgcmVzdWx0X3Zhcj0iZGlzbWlzczEiKQor
CisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwgInNlc3Npb24ve3Nl
c3Npb25faWR9L2VsZW1lbnQve2VsZW1lbnRfaWR9L3NlbGVjdGVkIgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChzZXNzaW9uX2lkPXNlc3Npb24uc2Vzc2lvbl9p
ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudF9p
ZD0iZm9vIikpCisKKyAgICBhc3NlcnRfc3VjY2VzcyhyZXN1bHQsICJmb28iKQorICAgIGFzc2Vy
dF9kaWFsb2dfaGFuZGxlZChzZXNzaW9uLCAiZGlzbWlzcyAjMSIpCisKKyAgICBjcmVhdGVfZGlh
bG9nKHNlc3Npb24pKCJjb25maXJtIiwgdGV4dD0iZGlzbWlzcyAjMiIsIHJlc3VsdF92YXI9ImRp
c21pc3MyIikKKworICAgIHJlc3VsdCA9IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIkdFVCIsICJz
ZXNzaW9uL3tzZXNzaW9uX2lkfS9lbGVtZW50L3tlbGVtZW50X2lkfS9zZWxlY3RlZCIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoc2Vzc2lvbl9pZD1zZXNzaW9u
LnNlc3Npb25faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVsZW1lbnRfaWQ9ImZvbyIpKQorCisgICAgYXNzZXJ0X3N1Y2Nlc3MocmVzdWx0LCAiZm9vIikK
KyAgICBhc3NlcnRfZGlhbG9nX2hhbmRsZWQoc2Vzc2lvbiwgImRpc21pc3MgIzIiKQorCisgICAg
Y3JlYXRlX2RpYWxvZyhzZXNzaW9uKSgicHJvbXB0IiwgdGV4dD0iZGlzbWlzcyAjMyIsIHJlc3Vs
dF92YXI9ImRpc21pc3MzIikKKworICAgIHJlc3VsdCA9IHNlc3Npb24udHJhbnNwb3J0LnNlbmQo
IkdFVCIsICJzZXNzaW9uL3tzZXNzaW9uX2lkfS9lbGVtZW50L3tlbGVtZW50X2lkfS9zZWxlY3Rl
ZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoc2Vzc2lvbl9p
ZD1zZXNzaW9uLnNlc3Npb25faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVsZW1lbnRfaWQ9ImZvbyIpKQorCisgICAgYXNzZXJ0X3N1Y2Nlc3MocmVzdWx0
LCAiZm9vIikKKyAgICBhc3NlcnRfZGlhbG9nX2hhbmRsZWQoc2Vzc2lvbiwgImRpc21pc3MgIzMi
KQorCisKK2RlZiB0ZXN0X2hhbmRsZV9wcm9tcHRfbWlzc2luZ192YWx1ZShzZXNzaW9uLCBjcmVh
dGVfZGlhbG9nKToKKyAgICAjIDEzLjEgc3RlcCAyCisgICAgc2Vzc2lvbi51cmwgPSBpbmxpbmUo
IjxpbnB1dCBpZD1mb28+IikKKworICAgIGNyZWF0ZV9kaWFsb2coc2Vzc2lvbikoImFsZXJ0Iiwg
dGV4dD0iZGlzbWlzcyAjMSIsIHJlc3VsdF92YXI9ImRpc21pc3MxIikKKworICAgIHJlc3VsdCA9
IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIkdFVCIsICJzZXNzaW9uL3tzZXNzaW9uX2lkfS9lbGVt
ZW50L3tlbGVtZW50X2lkfS9zZWxlY3RlZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC5mb3JtYXQoc2Vzc2lvbl9pZD1zZXNzaW9uLnNlc3Npb25faWQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRfaWQ9ImZvbyIpKQorCisg
ICAgYXNzZXJ0X2Vycm9yKHJlc3VsdCwgInVuZXhwZWN0ZWQgYWxlcnQgb3BlbiIpCisgICAgYXNz
ZXJ0X2RpYWxvZ19oYW5kbGVkKHNlc3Npb24sICJkaXNtaXNzICMxIikKKworICAgIGNyZWF0ZV9k
aWFsb2coc2Vzc2lvbikoImNvbmZpcm0iLCB0ZXh0PSJkaXNtaXNzICMyIiwgcmVzdWx0X3Zhcj0i
ZGlzbWlzczIiKQorCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwg
InNlc3Npb24ve3Nlc3Npb25faWR9L2VsZW1lbnQve2VsZW1lbnRfaWR9L3NlbGVjdGVkIgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChzZXNzaW9uX2lkPXNlc3Np
b24uc2Vzc2lvbl9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWxlbWVudF9pZD0iZm9vIikpCisKKyAgICBhc3NlcnRfZXJyb3IocmVzdWx0LCAidW5leHBl
Y3RlZCBhbGVydCBvcGVuIikKKyAgICBhc3NlcnRfZGlhbG9nX2hhbmRsZWQoc2Vzc2lvbiwgImRp
c21pc3MgIzIiKQorCisgICAgY3JlYXRlX2RpYWxvZyhzZXNzaW9uKSgicHJvbXB0IiwgdGV4dD0i
ZGlzbWlzcyAjMyIsIHJlc3VsdF92YXI9ImRpc21pc3MzIikKKworICAgIHJlc3VsdCA9IHNlc3Np
b24udHJhbnNwb3J0LnNlbmQoIkdFVCIsICJzZXNzaW9uL3tzZXNzaW9uX2lkfS9lbGVtZW50L3tl
bGVtZW50X2lkfS9zZWxlY3RlZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC5mb3JtYXQoc2Vzc2lvbl9pZD1zZXNzaW9uLnNlc3Npb25faWQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRfaWQ9ImZvbyIpKQorCisgICAgYXNz
ZXJ0X2Vycm9yKHJlc3VsdCwgInVuZXhwZWN0ZWQgYWxlcnQgb3BlbiIpCisgICAgYXNzZXJ0X2Rp
YWxvZ19oYW5kbGVkKHNlc3Npb24sICJkaXNtaXNzICMzIikKKworCitkZWYgdGVzdF9lbGVtZW50
X3N0YWxlKHNlc3Npb24pOgorICAgICMgMTMuMSBzdGVwIDQKKyAgICBzZXNzaW9uLnVybCA9IGNo
ZWNrX2RvYworICAgIGVsZW1lbnQgPSBzZXNzaW9uLmZpbmQuY3NzKCIjY2hlY2tlZCIsIGFsbD1G
YWxzZSkKKyAgICBzZXNzaW9uLnJlZnJlc2goKQorICAgIHJlc3VsdCA9IHNlc3Npb24udHJhbnNw
b3J0LnNlbmQoIkdFVCIsICJzZXNzaW9uL3tzZXNzaW9uX2lkfS9lbGVtZW50L3tlbGVtZW50X2lk
fS9zZWxlY3RlZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQo
c2Vzc2lvbl9pZD1zZXNzaW9uLnNlc3Npb25faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVsZW1lbnRfaWQ9ZWxlbWVudC5pZCkpCisKKyAgICBhc3NlcnRf
ZXJyb3IocmVzdWx0LCAic3RhbGUgZWxlbWVudCByZWZlcmVuY2UiKQorCisKK2RlZiB0ZXN0X2Vs
ZW1lbnRfY2hlY2tlZChzZXNzaW9uKToKKyAgICAjIDEzLjEgc3RlcCA1CisgICAgc2Vzc2lvbi51
cmwgPSBjaGVja19kb2MKKyAgICBlbGVtZW50ID0gc2Vzc2lvbi5maW5kLmNzcygiI2NoZWNrZWQi
LCBhbGw9RmFsc2UpCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwg
InNlc3Npb24ve3Nlc3Npb25faWR9L2VsZW1lbnQve2VsZW1lbnRfaWR9L3NlbGVjdGVkIgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChzZXNzaW9uX2lkPXNlc3Np
b24uc2Vzc2lvbl9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWxlbWVudF9pZD1lbGVtZW50LmlkKSkKKworICAgIGFzc2VydF9zdWNjZXNzKHJlc3VsdCwg
VHJ1ZSkKKworCitkZWYgdGVzdF9jaGVja2JveF9ub3Rfc2VsZWN0ZWQoc2Vzc2lvbik6CisgICAg
IyAxMy4xIHN0ZXAgNQorICAgIHNlc3Npb24udXJsID0gY2hlY2tfZG9jCisgICAgZWxlbWVudCA9
IHNlc3Npb24uZmluZC5jc3MoIiNub3RDaGVja2VkIiwgYWxsPUZhbHNlKQorICAgIHJlc3VsdCA9
IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIkdFVCIsICJzZXNzaW9uL3tzZXNzaW9uX2lkfS9lbGVt
ZW50L3tlbGVtZW50X2lkfS9zZWxlY3RlZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC5mb3JtYXQoc2Vzc2lvbl9pZD1zZXNzaW9uLnNlc3Npb25faWQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRfaWQ9ZWxlbWVudC5pZCkp
CisKKyAgICBhc3NlcnRfc3VjY2VzcyhyZXN1bHQsIEZhbHNlKQorCisKK2RlZiB0ZXN0X2VsZW1l
bnRfc2VsZWN0ZWQoc2Vzc2lvbik6CisgICAgIyAxMy4xIHN0ZXAgNQorICAgIHNlc3Npb24udXJs
ID0gb3B0aW9uX2RvYworICAgIGVsZW1lbnQgPSBzZXNzaW9uLmZpbmQuY3NzKCIjc2VsZWN0ZWQi
LCBhbGw9RmFsc2UpCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwg
InNlc3Npb24ve3Nlc3Npb25faWR9L2VsZW1lbnQve2VsZW1lbnRfaWR9L3NlbGVjdGVkIgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChzZXNzaW9uX2lkPXNlc3Np
b24uc2Vzc2lvbl9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWxlbWVudF9pZD1lbGVtZW50LmlkKSkKKworICAgIGFzc2VydF9zdWNjZXNzKHJlc3VsdCwg
VHJ1ZSkKKworCitkZWYgdGVzdF9lbGVtZW50X25vdF9zZWxlY3RlZChzZXNzaW9uKToKKyAgICAj
IDEzLjEgc3RlcCA1CisgICAgc2Vzc2lvbi51cmwgPSBvcHRpb25fZG9jCisgICAgZWxlbWVudCA9
IHNlc3Npb24uZmluZC5jc3MoIiNub3RTZWxlY3RlZCIsIGFsbD1GYWxzZSkKKyAgICByZXN1bHQg
PSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLCAic2Vzc2lvbi97c2Vzc2lvbl9pZH0vZWxl
bWVudC97ZWxlbWVudF9pZH0vc2VsZWN0ZWQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAuZm9ybWF0KHNlc3Npb25faWQ9c2Vzc2lvbi5zZXNzaW9uX2lkLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50X2lkPWVsZW1lbnQuaWQp
KQorCisgICAgYXNzZXJ0X3N1Y2Nlc3MocmVzdWx0LCBGYWxzZSkKZGlmZiAtLWdpdCBhL1dlYkRy
aXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvc3RhdGUvdGV4dC9fX2luaXRf
Xy5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvc3RhdGUv
dGV4dC9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u
ZTY5ZGUyOWJiMmQKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJk
cml2ZXIvdGVzdHMvc3RhdGUvdGV4dC9nZXRfdGV4dC5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9y
dGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvc3RhdGUvdGV4dC9nZXRfdGV4dC5weQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYWEwN2I4ZGMxZjQKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL3N0YXRlL3Rl
eHQvZ2V0X3RleHQucHkKQEAgLTAsMCArMSwyOSBAQAoraW1wb3J0IHB5dGVzdAoraW1wb3J0IHV1
aWQKKworZnJvbSB0ZXN0cy5zdXBwb3J0LmFzc2VydHMgaW1wb3J0IGFzc2VydF9lcnJvciwgYXNz
ZXJ0X3N1Y2Nlc3MKK2Zyb20gdGVzdHMuc3VwcG9ydC5pbmxpbmUgaW1wb3J0IGlubGluZQorCisj
IEZvciBmYWlsaW5nIHRlc3RzLCB0aGUgR2V0IEVsZW1lbnQgVGV4dCBlbmQtcG9pbnQgaXMgdXNl
ZAorIyBkaXJlY3RseS4gSW4gYWxsIG90aGVyIGNhc2VzLCB0aGUgRWxlbWVudC50ZXh0KCkgZnVu
Y3Rpb24gaXMgdXNlZC4KKworZGVmIHRlc3RfZ2V0dGluZ190ZXh0X29mX2Ffbm9uX2V4aXN0YW50
X2VsZW1lbnRfaXNfYW5fZXJyb3Ioc2Vzc2lvbik6CisgICBzZXNzaW9uLnVybCA9IGlubGluZSgi
IiI8Ym9keT5IZWxsbyB3b3JsZDwvYm9keT4iIiIpCisgICBpZCA9IHV1aWQudXVpZDQoKQorCisg
ICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKAorICAgICAgICJHRVQiLAorICAgICAg
ICJzZXNzaW9uLyVzL2VsZW1lbnQvJXMvdGV4dCIgJSAoc2Vzc2lvbi5zZXNzaW9uX2lkLCBpZCkp
CisKKyAgIGFzc2VydF9lcnJvcihyZXN1bHQsICJubyBzdWNoIGVsZW1lbnQiKQorCisKK2RlZiB0
ZXN0X3JlYWRfZWxlbWVudF90ZXh0KHNlc3Npb24pOgorICAgIHNlc3Npb24udXJsID0gaW5saW5l
KCIiIgorICAgICAgICA8Ym9keT4KKyAgICAgICAgICBOb2lzZSBiZWZvcmUgPHNwYW4gaWQ9J2lk
Jz5UaGlzIGhhcyBhbiBJRDwvc3Bhbj4uIE5vaXNlIGFmdGVyCisgICAgICAgIDwvYm9keT4iIiIp
CisKKyAgICBlbGVtZW50ID0gc2Vzc2lvbi5maW5kLmNzcygiI2lkIiwgYWxsPUZhbHNlKQorCisg
ICAgYXNzZXJ0IGVsZW1lbnQudGV4dCA9PSAiVGhpcyBoYXMgYW4gSUQiCmRpZmYgLS1naXQgYS9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL3N0YXR1cy5weSBiL1dl
YkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvc3RhdHVzLnB5Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45NDcyZjhhODBiYgotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvc3Rh
dHVzLnB5CkBAIC0wLDAgKzEsMjEgQEAKK2ltcG9ydCBweXRlc3QKK2ltcG9ydCBqc29uCisKKwor
ZGVmIHRlc3RfZ2V0X3N0YXR1c19ub19zZXNzaW9uKGh0dHApOgorICAgIHdpdGggaHR0cC5nZXQo
Ii9zdGF0dXMiKSBhcyByZXNwb25zZToKKyAgICAgICAgIyBHRVQgL3N0YXR1cyBzaG91bGQgbmV2
ZXIgcmV0dXJuIGFuIGVycm9yCisgICAgICAgIGFzc2VydCByZXNwb25zZS5zdGF0dXMgPT0gMjAw
CisKKyAgICAgICAgIyBwYXJzZSBKU09OIHJlc3BvbnNlIGFuZCB1bndyYXAgJ3ZhbHVlJyBwcm9w
ZXJ0eQorICAgICAgICBwYXJzZWRfb2JqID0ganNvbi5sb2FkcyhyZXNwb25zZS5yZWFkKCkuZGVj
b2RlKCd1dGYtOCcpKQorICAgICAgICB2YWx1ZSA9IHBhcnNlZF9vYmpbInZhbHVlIl0KKworICAg
ICAgICAjIExldCBib2R5IGJlIGEgbmV3IEpTT04gT2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBw
cm9wZXJ0aWVzOgorICAgICAgICAjICJyZWFkeSIKKyAgICAgICAgIyAgICAgICBUaGUgcmVtb3Rl
IGVuZCdzIHJlYWRpbmVzcyBzdGF0ZS4KKyAgICAgICAgYXNzZXJ0IHZhbHVlWyJyZWFkeSJdIGlu
IFtUcnVlLCBGYWxzZV0KKyAgICAgICAgIyAibWVzc2FnZSIKKyAgICAgICAgIyAgICAgICBBbiBp
bXBsZW1lbnRhdGlvbi1kZWZpbmVkIHN0cmluZyBleHBsYWluaW5nIHRoZSByZW1vdGUgZW5kJ3MK
KyAgICAgICAgIyAgICAgICByZWFkaW5lc3Mgc3RhdGUuCisgICAgICAgIGFzc2VydCBpc2luc3Rh
bmNlKHZhbHVlWyJtZXNzYWdlIl0sIGJhc2VzdHJpbmcpCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL3N1cHBvcnQvX19pbml0X18ucHkgYi9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL3N1cHBvcnQvX19pbml0
X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmQzN2ZhZjZkYTA0
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZl
ci90ZXN0cy9zdXBwb3J0L19faW5pdF9fLnB5CkBAIC0wLDAgKzEgQEAKK2Zyb20gbWVyZ2VfZGlj
dGlvbmFyaWVzIGltcG9ydCBtZXJnZV9kaWN0aW9uYXJpZXMKZGlmZiAtLWdpdCBhL1dlYkRyaXZl
clRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvc3VwcG9ydC9hc3NlcnRzLnB5IGIv
V2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9zdXBwb3J0L2Fzc2Vy
dHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjIxY2MwN2I5Yzgx
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZl
ci90ZXN0cy9zdXBwb3J0L2Fzc2VydHMucHkKQEAgLTAsMCArMSwxMjIgQEAKK2Zyb20gd2ViZHJp
dmVyLmNsaWVudCBpbXBvcnQgRWxlbWVudCwgZWxlbWVudF9rZXkKK2Zyb20gd2ViZHJpdmVyLmVy
cm9yIGltcG9ydCBXZWJEcml2ZXJFeGNlcHRpb24KKworIyBXZWJEcml2ZXIgc3BlY2lmaWNhdGlv
biBJRDogZGZuLWVycm9yLXJlc3BvbnNlLWRhdGEKK2Vycm9ycyA9IHsKKyAgICAiZWxlbWVudCBj
bGljayBpbnRlcmNlcHRlZCI6IDQwMCwKKyAgICAiZWxlbWVudCBub3Qgc2VsZWN0YWJsZSI6IDQw
MCwKKyAgICAiZWxlbWVudCBub3QgaW50ZXJhY3RhYmxlIjogNDAwLAorICAgICJpbnNlY3VyZSBj
ZXJ0aWZpY2F0ZSI6IDQwMCwKKyAgICAiaW52YWxpZCBhcmd1bWVudCI6IDQwMCwKKyAgICAiaW52
YWxpZCBjb29raWUgZG9tYWluIjogNDAwLAorICAgICJpbnZhbGlkIGNvb3JkaW5hdGVzIjogNDAw
LAorICAgICJpbnZhbGlkIGVsZW1lbnQgc3RhdGUiOiA0MDAsCisgICAgImludmFsaWQgc2VsZWN0
b3IiOiA0MDAsCisgICAgImludmFsaWQgc2Vzc2lvbiBpZCI6IDQwNCwKKyAgICAiamF2YXNjcmlw
dCBlcnJvciI6IDUwMCwKKyAgICAibW92ZSB0YXJnZXQgb3V0IG9mIGJvdW5kcyI6IDUwMCwKKyAg
ICAibm8gc3VjaCBhbGVydCI6IDQwNCwKKyAgICAibm8gc3VjaCBjb29raWUiOiA0MDQsCisgICAg
Im5vIHN1Y2ggZWxlbWVudCI6IDQwNCwKKyAgICAibm8gc3VjaCBmcmFtZSI6IDQwNCwKKyAgICAi
bm8gc3VjaCB3aW5kb3ciOiA0MDQsCisgICAgInNjcmlwdCB0aW1lb3V0IjogNDA4LAorICAgICJz
ZXNzaW9uIG5vdCBjcmVhdGVkIjogNTAwLAorICAgICJzdGFsZSBlbGVtZW50IHJlZmVyZW5jZSI6
IDQwMCwKKyAgICAidGltZW91dCI6IDQwOCwKKyAgICAidW5hYmxlIHRvIHNldCBjb29raWUiOiA1
MDAsCisgICAgInVuYWJsZSB0byBjYXB0dXJlIHNjcmVlbiI6IDUwMCwKKyAgICAidW5leHBlY3Rl
ZCBhbGVydCBvcGVuIjogNTAwLAorICAgICJ1bmtub3duIGNvbW1hbmQiOiA0MDQsCisgICAgInVu
a25vd24gZXJyb3IiOiA1MDAsCisgICAgInVua25vd24gbWV0aG9kIjogNDA1LAorICAgICJ1bnN1
cHBvcnRlZCBvcGVyYXRpb24iOiA1MDAsCit9CisKKyMgV2ViRHJpdmVyIHNwZWNpZmljYXRpb24g
SUQ6IGRmbi1zZW5kLWFuLWVycm9yCisjCisjID4gV2hlbiByZXF1aXJlZCB0byBzZW5kIGFuIGVy
cm9yLCB3aXRoIGVycm9yIGNvZGUsIGEgcmVtb3RlIGVuZCBtdXN0IHJ1biB0aGUKKyMgPiBmb2xs
b3dpbmcgc3RlcHM6CisjID4KKyMgPiAxLiBMZXQgaHR0cCBzdGF0dXMgYW5kIG5hbWUgYmUgdGhl
IGVycm9yIHJlc3BvbnNlIGRhdGEgZm9yIGVycm9yIGNvZGUuCisjID4gMi4gTGV0IG1lc3NhZ2Ug
YmUgYW4gaW1wbGVtZW50YXRpb24tZGVmaW5lZCBzdHJpbmcgY29udGFpbmluZyBhCisjID4gICAg
aHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gb2YgdGhlIHJlYXNvbiBmb3IgdGhlIGVycm9yLgor
IyA+IDMuIExldCBzdGFja3RyYWNlIGJlIGFuIGltcGxlbWVudGF0aW9uLWRlZmluZWQgc3RyaW5n
IGNvbnRhaW5pbmcgYSBzdGFjaworIyA+ICAgIHRyYWNlIHJlcG9ydCBvZiB0aGUgYWN0aXZlIHN0
YWNrIGZyYW1lcyBhdCB0aGUgdGltZSB3aGVuIHRoZSBlcnJvcgorIyA+ICAgIG9jY3VycmVkLgor
IyA+IDQuIExldCBkYXRhIGJlIGEgbmV3IEpTT04gT2JqZWN0IGluaXRpYWxpc2VkIHdpdGggdGhl
IGZvbGxvd2luZyBwcm9wZXJ0aWVzOgorIyA+CisjID4gICAgIGVycm9yCisjID4gICAgICAgICBu
YW1lCisjID4gICAgIG1lc3NhZ2UKKyMgPiAgICAgICAgIG1lc3NhZ2UKKyMgPiAgICAgc3RhY2t0
cmFjZQorIyA+ICAgICAgICAgc3RhY2t0cmFjZQorIyA+CisjID4gNS4gU2VuZCBhIHJlc3BvbnNl
IHdpdGggc3RhdHVzIGFuZCBkYXRhIGFzIGFyZ3VtZW50cy4KK2RlZiBhc3NlcnRfZXJyb3IocmVz
cG9uc2UsIGVycm9yX2NvZGUpOgorICAgICIiIlZlcmlmeSB0aGF0IHRoZSBwcm92aWRlZCB3ZGNs
aWVudC5SZXNwb25zZSBpbnN0YW5jZSBkZXNjcmliZWQgYSB2YWxpZAorICAgIGVycm9yIHJlc3Bv
bnNlIGFzIGRlZmluZWQgYnkgYGRmbi1zZW5kLWFuLWVycm9yYCBhbmQgdGhlIHByb3ZpZGVkIGVy
cm9yCisgICAgY29kZS4KKworICAgIDpwYXJhbSByZXNwb25zZTogd2RjbGllbnQuUmVzcG9uc2Ug
aW5zdGFuY2UKKyAgICA6cGFyYW0gZXJyb3JfY29kZTogc3RyaW5nIHZhbHVlIG9mIHRoZSBleHBl
Y3RlZCAiZXJyb3IgY29kZSIKKyAgICAiIiIKKyAgICBhc3NlcnQgcmVzcG9uc2Uuc3RhdHVzID09
IGVycm9yc1tlcnJvcl9jb2RlXQorICAgIGFzc2VydCAidmFsdWUiIGluIHJlc3BvbnNlLmJvZHkK
KyAgICBhc3NlcnQgcmVzcG9uc2UuYm9keVsidmFsdWUiXVsiZXJyb3IiXSA9PSBlcnJvcl9jb2Rl
CisgICAgYXNzZXJ0IGlzaW5zdGFuY2UocmVzcG9uc2UuYm9keVsidmFsdWUiXVsibWVzc2FnZSJd
LCBiYXNlc3RyaW5nKQorICAgIGFzc2VydCBpc2luc3RhbmNlKHJlc3BvbnNlLmJvZHlbInZhbHVl
Il1bInN0YWNrdHJhY2UiXSwgYmFzZXN0cmluZykKKworZGVmIGFzc2VydF9zdWNjZXNzKHJlc3Bv
bnNlLCB2YWx1ZT1Ob25lKToKKyAgICAiIiJWZXJpZnkgdGhhdCB0aGUgcHJvdmlkZWQgd2RjbGll
bnQuUmVzcG9uc2UgaW5zdGFuY2UgZGVzY3JpYmVkIGEgdmFsaWQKKyAgICBlcnJvciByZXNwb25z
ZSBhcyBkZWZpbmVkIGJ5IGBkZm4tc2VuZC1hbi1lcnJvcmAgYW5kIHRoZSBwcm92aWRlZCBlcnJv
cgorICAgIGNvZGUuCisKKyAgICA6cGFyYW0gcmVzcG9uc2U6IHdkY2xpZW50LlJlc3BvbnNlIGlu
c3RhbmNlLgorICAgIDpwYXJhbSB2YWx1ZTogRXhwZWN0ZWQgdmFsdWUgb2YgdGhlIHJlc3BvbnNl
IGJvZHksIGlmIGFueS4KKworICAgICIiIgorICAgIGFzc2VydCByZXNwb25zZS5zdGF0dXMgPT0g
MjAwCisgICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAgIGFzc2VydCByZXNwb25zZS5i
b2R5WyJ2YWx1ZSJdID09IHZhbHVlCisgICAgcmV0dXJuIHJlc3BvbnNlLmJvZHkuZ2V0KCJ2YWx1
ZSIpCisKK2RlZiBhc3NlcnRfZGlhbG9nX2hhbmRsZWQoc2Vzc2lvbiwgZXhwZWN0ZWRfdGV4dCk6
CisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJzZXNzaW9uLyVzL2FsZXJ0L3RleHQiICUgc2Vzc2lv
bi5zZXNzaW9uX2lkKQorCisgICAgIyBJZiB0aGVyZSB3ZXJlIGFueSBleGlzdGluZyBkaWFsb2dz
IHByaW9yIHRvIHRoZSBjcmVhdGlvbiBvZiB0aGlzCisgICAgIyBmaXh0dXJlJ3MgZGlhbG9nLCB0
aGVuIHRoZSAiR2V0IEFsZXJ0IFRleHQiIGNvbW1hbmQgd2lsbCByZXR1cm4KKyAgICAjIHN1Y2Nl
c3NmdWxseS4gSW4gdGhhdCBjYXNlLCB0aGUgdGV4dCBtdXN0IGJlIGRpZmZlcmVudCB0aGFuIHRo
YXQKKyAgICAjIG9mIHRoaXMgZml4dHVyZSdzIGRpYWxvZy4KKyAgICB0cnk6CisgICAgICAgIGFz
c2VydF9lcnJvcihyZXN1bHQsICJubyBzdWNoIGFsZXJ0IikKKyAgICBleGNlcHQ6CisgICAgICAg
IGFzc2VydCAocmVzdWx0LnN0YXR1cyA9PSAyMDAgYW5kCisgICAgICAgICAgICAgICAgcmVzdWx0
LmJvZHlbInZhbHVlIl0gIT0gZXhwZWN0ZWRfdGV4dCksICgKKyAgICAgICAgICAgICAgICJEaWFs
b2cgd2l0aCB0ZXh0ICclcycgd2FzIG5vdCBoYW5kbGVkLiIgJSBleHBlY3RlZF90ZXh0KQorCitk
ZWYgYXNzZXJ0X3NhbWVfZWxlbWVudChzZXNzaW9uLCBhLCBiKToKKyAgICAiIiJWZXJpZnkgdGhh
dCB0d28gZWxlbWVudCByZWZlcmVuY2VzIGRlc2NyaWJlIHRoZSBzYW1lIGVsZW1lbnQuIiIiCisg
ICAgYXNzZXJ0IGlzaW5zdGFuY2UoYSwgZGljdCksICJBY3R1YWwgdmFsdWUgaXMgbm90IGEgZGlj
dGlvbmFyeSIKKyAgICBhc3NlcnQgaXNpbnN0YW5jZShiLCBkaWN0KSwgIkV4cGVjdGVkIHZhbHVl
IGlzIG5vdCBhIGRpY3Rpb25hcnkiCisgICAgYXNzZXJ0IGVsZW1lbnRfa2V5IGluIGEsICJBY3R1
YWwgdmFsdWUgZG9lcyBub3QgZGVzY3JpYmUgYW4gZWxlbWVudCIKKyAgICBhc3NlcnQgZWxlbWVu
dF9rZXkgaW4gYiwgIkV4cGVjdGVkIHZhbHVlIGRvZXMgbm90IGRlc2NyaWJlIGFuIGVsZW1lbnQi
CisKKyAgICBpZiBhW2VsZW1lbnRfa2V5XSA9PSBiW2VsZW1lbnRfa2V5XToKKyAgICAgICAgcmV0
dXJuCisKKyAgICBtZXNzYWdlID0gKCJFeHBlY3RlZCBlbGVtZW50IHJlZmVyZW5jZXMgdG8gZGVz
Y3JpYmUgdGhlIHNhbWUgZWxlbWVudCwgIiArCisgICAgICAgICJidXQgdGhleSBkaWQgbm90LiIp
CisKKyAgICAjIEF0dGVtcHQgdG8gcHJvdmlkZSBtb3JlIGluZm9ybWF0aW9uLCBhY2NvdW50aW5n
IGZvciBwb3NzaWJsZSBlcnJvcnMgc3VjaAorICAgICMgYXMgc3RhbGUgZWxlbWVudCByZWZlcmVu
Y2VzIG9yIG5vdCB2aXNpYmxlIGVsZW1lbnRzLgorICAgIHRyeToKKyAgICAgICAgYV9tYXJrdXAg
PSBzZXNzaW9uLmV4ZWN1dGVfc2NyaXB0KCJyZXR1cm4gYXJndW1lbnRzWzBdLm91dGVySFRNTDsi
LCBhcmdzPVthXSkKKyAgICAgICAgYl9tYXJrdXAgPSBzZXNzaW9uLmV4ZWN1dGVfc2NyaXB0KCJy
ZXR1cm4gYXJndW1lbnRzWzBdLm91dGVySFRNTDsiLCBhcmdzPVtiXSkKKyAgICAgICAgbWVzc2Fn
ZSArPSAiIEFjdHVhbDogYCVzYC4gRXhwZWN0ZWQ6IGAlc2AuIiAlIChhX21hcmt1cCwgYl9tYXJr
dXApCisgICAgZXhjZXB0IFdlYkRyaXZlckV4Y2VwdGlvbjoKKyAgICAgICAgcGFzcworCisgICAg
cmFpc2UgQXNzZXJ0aW9uRXJyb3IobWVzc2FnZSkKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3Rz
L2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvc3VwcG9ydC9maXh0dXJlcy5weSBiL1dlYkRy
aXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvc3VwcG9ydC9maXh0dXJlcy5w
eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZjUxYzQ5ODI3NGYKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rl
c3RzL3N1cHBvcnQvZml4dHVyZXMucHkKQEAgLTAsMCArMSwyNTAgQEAKK2ltcG9ydCBqc29uCitp
bXBvcnQgb3MKK2ltcG9ydCB1cmxwYXJzZQoraW1wb3J0IHJlCisKK2ltcG9ydCB3ZWJkcml2ZXIK
K2ltcG9ydCBtb3psb2cKKworZnJvbSB0ZXN0cy5zdXBwb3J0LmFzc2VydHMgaW1wb3J0IGFzc2Vy
dF9lcnJvcgorZnJvbSB0ZXN0cy5zdXBwb3J0Lmh0dHBfcmVxdWVzdCBpbXBvcnQgSFRUUFJlcXVl
c3QKK2Zyb20gdGVzdHMuc3VwcG9ydCBpbXBvcnQgbWVyZ2VfZGljdGlvbmFyaWVzCisKK2RlZmF1
bHRfaG9zdCA9ICJodHRwOi8vMTI3LjAuMC4xIgorZGVmYXVsdF9wb3J0ID0gIjQ0NDQiCisKK2xv
Z2dlciA9IG1vemxvZy5nZXRfZGVmYXVsdF9sb2dnZXIoKQorCisKK2RlZiBpZ25vcmVfZXhjZXB0
aW9ucyhmKToKKyAgICBkZWYgaW5uZXIoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgdHJ5Ogor
ICAgICAgICAgICAgcmV0dXJuIGYoKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBleGNlcHQgd2Vi
ZHJpdmVyLmVycm9yLldlYkRyaXZlckV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgbG9nZ2Vy
Lndhcm5pbmcoIklnbm9yZWQgZXhjZXB0aW9uICVzIiAlIGUpCisgICAgaW5uZXIuX19uYW1lX18g
PSBmLl9fbmFtZV9fCisgICAgcmV0dXJuIGlubmVyCisKKworQGlnbm9yZV9leGNlcHRpb25zCitk
ZWYgX2Vuc3VyZV92YWxpZF93aW5kb3coc2Vzc2lvbik6CisgICAgIiIiSWYgY3VycmVudCB3aW5k
b3cgaXMgbm90IG9wZW4gYW55bW9yZSwgZW5zdXJlIHRvIGhhdmUgYSB2YWxpZAorICAgIG9uZSBz
ZWxlY3RlZC4KKworICAgICIiIgorICAgIHRyeToKKyAgICAgICAgc2Vzc2lvbi53aW5kb3dfaGFu
ZGxlCisgICAgZXhjZXB0IHdlYmRyaXZlci5Ob1N1Y2hXaW5kb3dFeGNlcHRpb246CisgICAgICAg
IHNlc3Npb24ud2luZG93X2hhbmRsZSA9IHNlc3Npb24uaGFuZGxlc1swXQorCisKK0BpZ25vcmVf
ZXhjZXB0aW9ucworZGVmIF9kaXNtaXNzX3VzZXJfcHJvbXB0cyhzZXNzaW9uKToKKyAgICAiIiJE
aXNtaXNzZXMgYW55IG9wZW4gdXNlciBwcm9tcHRzIGluIHdpbmRvd3MuIiIiCisgICAgY3VycmVu
dF93aW5kb3cgPSBzZXNzaW9uLndpbmRvd19oYW5kbGUKKworICAgIGZvciB3aW5kb3cgaW4gX3dp
bmRvd3Moc2Vzc2lvbik6CisgICAgICAgIHNlc3Npb24ud2luZG93X2hhbmRsZSA9IHdpbmRvdwor
ICAgICAgICB0cnk6CisgICAgICAgICAgICBzZXNzaW9uLmFsZXJ0LmRpc21pc3MoKQorICAgICAg
ICBleGNlcHQgd2ViZHJpdmVyLk5vU3VjaEFsZXJ0RXhjZXB0aW9uOgorICAgICAgICAgICAgcGFz
cworCisgICAgc2Vzc2lvbi53aW5kb3dfaGFuZGxlID0gY3VycmVudF93aW5kb3cKKworCitAaWdu
b3JlX2V4Y2VwdGlvbnMKK2RlZiBfcmVzdG9yZV93aW5kb3dfc3RhdGUoc2Vzc2lvbik6CisgICAg
IiIiUmVzZXQgd2luZG93IHRvIGFuIGFjY2VwdGFibGUgc2l6ZSwgYnJpbmdpbmcgaXQgb3V0IG9m
IG1heGltaXplZCwKKyAgICBtaW5pbWl6ZWQsIG9yIGZ1bGxzY3JlZW5lZCBzdGF0ZQorCisgICAg
IiIiCisgICAgc2Vzc2lvbi53aW5kb3cuc2l6ZSA9ICg4MDAsIDYwMCkKKworCitAaWdub3JlX2V4
Y2VwdGlvbnMKK2RlZiBfcmVzdG9yZV93aW5kb3dzKHNlc3Npb24pOgorICAgICIiIkNsb3NlcyBz
dXBlcmZsdW91cyB3aW5kb3dzIG9wZW5lZCBieSB0aGUgdGVzdCB3aXRob3V0IGVuZGluZworICAg
IHRoZSBzZXNzaW9uIGltcGxpY2l0bHkgYnkgY2xvc2luZyB0aGUgbGFzdCB3aW5kb3cuCisgICAg
IiIiCisgICAgY3VycmVudF93aW5kb3cgPSBzZXNzaW9uLndpbmRvd19oYW5kbGUKKworICAgIGZv
ciB3aW5kb3cgaW4gX3dpbmRvd3Moc2Vzc2lvbiwgZXhjbHVkZT1bY3VycmVudF93aW5kb3ddKToK
KyAgICAgICAgc2Vzc2lvbi53aW5kb3dfaGFuZGxlID0gd2luZG93CisgICAgICAgIGlmIGxlbihz
ZXNzaW9uLmhhbmRsZXMpID4gMToKKyAgICAgICAgICAgIHNlc3Npb24uY2xvc2UoKQorCisgICAg
c2Vzc2lvbi53aW5kb3dfaGFuZGxlID0gY3VycmVudF93aW5kb3cKKworCitkZWYgX3N3aXRjaF90
b190b3BfbGV2ZWxfYnJvd3NpbmdfY29udGV4dChzZXNzaW9uKToKKyAgICAiIiJJZiB0aGUgY3Vy
cmVudCBicm93c2luZyBjb250ZXh0IHNlbGVjdGVkIGJ5IFdlYkRyaXZlciBpcyBhCisgICAgYDxm
cmFtZT5gIG9yIGFuIGA8aWZyYW1lPmAsIHN3aXRjaCBpdCBiYWNrIHRvIHRoZSB0b3AtbGV2ZWwK
KyAgICBicm93c2luZyBjb250ZXh0LgorICAgICIiIgorICAgIHNlc3Npb24uc3dpdGNoX2ZyYW1l
KE5vbmUpCisKKworZGVmIF93aW5kb3dzKHNlc3Npb24sIGV4Y2x1ZGU9Tm9uZSk6CisgICAgIiIi
U2V0IG9mIHdpbmRvdyBoYW5kbGVzLCBmaWx0ZXJlZCBieSBhbiBgZXhjbHVkZWAgbGlzdCBpZgor
ICAgIHByb3ZpZGVkLgorICAgICIiIgorICAgIGlmIGV4Y2x1ZGUgaXMgTm9uZToKKyAgICAgICAg
ZXhjbHVkZSA9IFtdCisgICAgd2lucyA9IFt3IGZvciB3IGluIHNlc3Npb24uaGFuZGxlcyBpZiB3
IG5vdCBpbiBleGNsdWRlXQorICAgIHJldHVybiBzZXQod2lucykKKworCitkZWYgY3JlYXRlX2Zy
YW1lKHNlc3Npb24pOgorICAgICIiIkNyZWF0ZSBhbiBgaWZyYW1lYCBlbGVtZW50IGluIHRoZSBj
dXJyZW50IGJyb3dzaW5nIGNvbnRleHQgYW5kIGluc2VydCBpdAorICAgIGludG8gdGhlIGRvY3Vt
ZW50LiBSZXR1cm4gYSByZWZlcmVuY2UgdG8gdGhlIG5ld2x5LWNyZWF0ZWQgZWxlbWVudC4iIiIK
KyAgICBkZWYgY3JlYXRlX2ZyYW1lKCk6CisgICAgICAgIGFwcGVuZCA9ICIiIgorICAgICAgICAg
ICAgdmFyIGZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7CisgICAgICAg
ICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGZyYW1lKTsKKyAgICAgICAgICAgIHJldHVy
biBmcmFtZTsKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZXNzaW9uLmV4ZWN1dGVfc2Ny
aXB0KGFwcGVuZCkKKworICAgIHJldHVybiBjcmVhdGVfZnJhbWUKKworCitkZWYgY3JlYXRlX3dp
bmRvdyhzZXNzaW9uKToKKyAgICAiIiJPcGVuIG5ldyB3aW5kb3cgYW5kIHJldHVybiB0aGUgd2lu
ZG93IGhhbmRsZS4iIiIKKyAgICBkZWYgY3JlYXRlX3dpbmRvdygpOgorICAgICAgICB3aW5kb3dz
X2JlZm9yZSA9IHNlc3Npb24uaGFuZGxlcworICAgICAgICBuYW1lID0gc2Vzc2lvbi5leGVjdXRl
X3NjcmlwdCgid2luZG93Lm9wZW4oKSIpCisgICAgICAgIGFzc2VydCBsZW4oc2Vzc2lvbi5oYW5k
bGVzKSA9PSBsZW4od2luZG93c19iZWZvcmUpICsgMQorICAgICAgICBuZXdfd2luZG93cyA9IGxp
c3Qoc2V0KHNlc3Npb24uaGFuZGxlcykgLSBzZXQod2luZG93c19iZWZvcmUpKQorICAgICAgICBy
ZXR1cm4gbmV3X3dpbmRvd3MucG9wKCkKKyAgICByZXR1cm4gY3JlYXRlX3dpbmRvdworCisKK2Rl
ZiBodHRwKGNvbmZpZ3VyYXRpb24pOgorICAgIHJldHVybiBIVFRQUmVxdWVzdChjb25maWd1cmF0
aW9uWyJob3N0Il0sIGNvbmZpZ3VyYXRpb25bInBvcnQiXSkKKworCitkZWYgc2VydmVyX2NvbmZp
ZygpOgorICAgIHJldHVybiBqc29uLmxvYWRzKG9zLmVudmlyb24uZ2V0KCJXRF9TRVJWRVJfQ09O
RklHIikpCisKKworZGVmIGNvbmZpZ3VyYXRpb24oKToKKyAgICBob3N0ID0gb3MuZW52aXJvbi5n
ZXQoIldEX0hPU1QiLCBkZWZhdWx0X2hvc3QpCisgICAgcG9ydCA9IGludChvcy5lbnZpcm9uLmdl
dCgiV0RfUE9SVCIsIGRlZmF1bHRfcG9ydCkpCisgICAgY2FwYWJpbGl0aWVzID0ganNvbi5sb2Fk
cyhvcy5lbnZpcm9uLmdldCgiV0RfQ0FQQUJJTElUSUVTIiwgInt9IikpCisKKyAgICByZXR1cm4g
eworICAgICAgICAiaG9zdCI6IGhvc3QsCisgICAgICAgICJwb3J0IjogcG9ydCwKKyAgICAgICAg
ImNhcGFiaWxpdGllcyI6IGNhcGFiaWxpdGllcworICAgIH0KKworCitfY3VycmVudF9zZXNzaW9u
ID0gTm9uZQorCisKK2RlZiBzZXNzaW9uKGNvbmZpZ3VyYXRpb24sIHJlcXVlc3QpOgorICAgICIi
IkNyZWF0ZSBhbmQgc3RhcnQgYSBzZXNzaW9uIGZvciBhIHRlc3QgdGhhdCBkb2VzIG5vdCBpdHNl
bGYgdGVzdCBzZXNzaW9uIGNyZWF0aW9uLgorCisgICAgQnkgZGVmYXVsdCB0aGUgc2Vzc2lvbiB3
aWxsIHN0YXkgb3BlbiBhZnRlciBlYWNoIHRlc3QsIGJ1dCB3ZSBhbHdheXMgdHJ5IHRvIHN0YXJ0
IGEKKyAgICBuZXcgb25lIGFuZCBhc3N1bWUgdGhhdCBpZiB0aGF0IGZhaWxzIHRoZXJlIGlzIGFs
cmVhZHkgYSB2YWxpZCBzZXNzaW9uLiBUaGlzIG1ha2VzIGl0CisgICAgcG9zc2libGUgdG8gcmVj
b3ZlciBmcm9tIHNvbWUgZXJyb3JzIHRoYXQgbWlnaHQgbGVhdmUgdGhlIHNlc3Npb24gaW4gYSBi
YWQgc3RhdGUsIGJ1dAorICAgIGRvZXMgbm90IGRlbWFuZCB0aGF0IHdlIHN0YXJ0IGEgbmV3IHNl
c3Npb24gcGVyIHRlc3QuIiIiCisgICAgZ2xvYmFsIF9jdXJyZW50X3Nlc3Npb24KKyAgICBpZiBf
Y3VycmVudF9zZXNzaW9uIGlzIE5vbmU6CisgICAgICAgIF9jdXJyZW50X3Nlc3Npb24gPSB3ZWJk
cml2ZXIuU2Vzc2lvbihjb25maWd1cmF0aW9uWyJob3N0Il0sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uWyJwb3J0Il0sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXBhYmlsaXRpZXM9eyJhbHdh
eXNNYXRjaCI6IGNvbmZpZ3VyYXRpb25bImNhcGFiaWxpdGllcyJdfSkKKyAgICB0cnk6CisgICAg
ICAgIF9jdXJyZW50X3Nlc3Npb24uc3RhcnQoKQorICAgIGV4Y2VwdCB3ZWJkcml2ZXIuZXJyb3Iu
U2Vzc2lvbk5vdENyZWF0ZWRFeGNlcHRpb246CisgICAgICAgIGlmIG5vdCBfY3VycmVudF9zZXNz
aW9uLnNlc3Npb25faWQ6CisgICAgICAgICAgICByYWlzZQorCisgICAgIyBmaW5hbGlzZXJzIGFy
ZSBwb3BwZWQgb2ZmIGEgc3RhY2ssCisgICAgIyBtYWtpbmcgdGhlaXIgb3JkZXJpbmcgcmV2ZXJz
ZQorICAgIHJlcXVlc3QuYWRkZmluYWxpemVyKGxhbWJkYTogX3N3aXRjaF90b190b3BfbGV2ZWxf
YnJvd3NpbmdfY29udGV4dChfY3VycmVudF9zZXNzaW9uKSkKKyAgICByZXF1ZXN0LmFkZGZpbmFs
aXplcihsYW1iZGE6IF9yZXN0b3JlX3dpbmRvd19zdGF0ZShfY3VycmVudF9zZXNzaW9uKSkKKyAg
ICByZXF1ZXN0LmFkZGZpbmFsaXplcihsYW1iZGE6IF9yZXN0b3JlX3dpbmRvd3MoX2N1cnJlbnRf
c2Vzc2lvbikpCisgICAgcmVxdWVzdC5hZGRmaW5hbGl6ZXIobGFtYmRhOiBfZGlzbWlzc191c2Vy
X3Byb21wdHMoX2N1cnJlbnRfc2Vzc2lvbikpCisgICAgcmVxdWVzdC5hZGRmaW5hbGl6ZXIobGFt
YmRhOiBfZW5zdXJlX3ZhbGlkX3dpbmRvdyhfY3VycmVudF9zZXNzaW9uKSkKKworICAgIHJldHVy
biBfY3VycmVudF9zZXNzaW9uCisKKworZGVmIG5ld19zZXNzaW9uKGNvbmZpZ3VyYXRpb24sIHJl
cXVlc3QpOgorICAgICIiIlJldHVybiBhIGZhY3RvcnkgZnVuY3Rpb24gdGhhdCB3aWxsIGF0dGVt
cHQgdG8gc3RhcnQgYSBzZXNzaW9uIHdpdGggYSBnaXZlbiBib2R5LgorCisgICAgVGhpcyBpcyBp
bnRlbmRlZCBmb3IgdGVzdHMgdGhhdCBhcmUgdGhlbXNlbHZlcyB0ZXN0aW5nIG5ldyBzZXNzaW9u
IGNyZWF0aW9uLCBhbmQgdGhlCisgICAgc2Vzc2lvbiBjcmVhdGVkIGlzIGNsb3NlZCBhdCB0aGUg
ZW5kIG9mIHRoZSB0ZXN0LiIiIgorICAgIGRlZiBlbmQoKToKKyAgICAgICAgZ2xvYmFsIF9jdXJy
ZW50X3Nlc3Npb24KKyAgICAgICAgaWYgX2N1cnJlbnRfc2Vzc2lvbiBpcyBub3QgTm9uZSBhbmQg
X2N1cnJlbnRfc2Vzc2lvbi5zZXNzaW9uX2lkOgorICAgICAgICAgICAgX2N1cnJlbnRfc2Vzc2lv
bi5lbmQoKQorICAgICAgICAgICAgX2N1cnJlbnRfc2Vzc2lvbiA9IE5vbmUKKworICAgIGRlZiBj
cmVhdGVfc2Vzc2lvbihib2R5KToKKyAgICAgICAgZ2xvYmFsIF9jdXJyZW50X3Nlc3Npb24KKyAg
ICAgICAgX3Nlc3Npb24gPSB3ZWJkcml2ZXIuU2Vzc2lvbihjb25maWd1cmF0aW9uWyJob3N0Il0s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvblsicG9y
dCJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcGFiaWxpdGllcz1O
b25lKQorICAgICAgICAjIFRPRE86IG1lcmdlIGluIHNvbWUgY2FwYWJpbGl0aWVzIGZyb20gdGhl
IGNvbmZndXJhdGlvbiBjYXBhYmlsaXRpZXMKKyAgICAgICAgIyBzaW5jZSB0aGVzZSBtaWdodCBi
ZSBuZWVkZWQgdG8gc3RhcnQgdGhlIGJyb3dzZXIKKyAgICAgICAgdmFsdWUgPSBfc2Vzc2lvbi5z
ZW5kX2NvbW1hbmQoIlBPU1QiLCAic2Vzc2lvbiIsIGJvZHk9Ym9keSkKKyAgICAgICAgIyBEb24n
dCBzZXQgdGhlIGdsb2JhbCBzZXNzaW9uIHVudGlsIHdlIGFyZSBzdXJlIHRoaXMgc3VjY2VlZGVk
CisgICAgICAgIF9jdXJyZW50X3Nlc3Npb24gPSBfc2Vzc2lvbgorICAgICAgICBfc2Vzc2lvbi5z
ZXNzaW9uX2lkID0gdmFsdWVbInNlc3Npb25JZCJdCisKKyAgICAgICAgcmV0dXJuIHZhbHVlLCBf
Y3VycmVudF9zZXNzaW9uCisKKyAgICBlbmQoKQorICAgIHJlcXVlc3QuYWRkZmluYWxpemVyKGVu
ZCkKKworICAgIHJldHVybiBjcmVhdGVfc2Vzc2lvbgorCisKK2RlZiB1cmwoc2VydmVyX2NvbmZp
Zyk6CisgICAgZGVmIGlubmVyKHBhdGgsIHByb3RvY29sPSJodHRwIiwgcXVlcnk9IiIsIGZyYWdt
ZW50PSIiKToKKyAgICAgICAgcG9ydCA9IHNlcnZlcl9jb25maWdbInBvcnRzIl1bcHJvdG9jb2xd
WzBdCisgICAgICAgIGhvc3QgPSAiJXM6JXMiICUgKHNlcnZlcl9jb25maWdbImhvc3QiXSwgcG9y
dCkKKyAgICAgICAgcmV0dXJuIHVybHBhcnNlLnVybHVuc3BsaXQoKHByb3RvY29sLCBob3N0LCBw
YXRoLCBxdWVyeSwgZnJhZ21lbnQpKQorCisgICAgaW5uZXIuX19uYW1lX18gPSAidXJsIgorICAg
IHJldHVybiBpbm5lcgorCitkZWYgY3JlYXRlX2RpYWxvZyhzZXNzaW9uKToKKyAgICAiIiJDcmVh
dGUgYSBkaWFsb2cgKG9uZSBvZiAiYWxlcnQiLCAicHJvbXB0Iiwgb3IgImNvbmZpcm0iKSBhbmQg
cHJvdmlkZSBhCisgICAgZnVuY3Rpb24gdG8gdmFsaWRhdGUgdGhhdCB0aGUgZGlhbG9nIGhhcyBi
ZWVuICJoYW5kbGVkIiAoZWl0aGVyIGFjY2VwdGVkIG9yCisgICAgZGlzbWlzc2VkKSBieSByZXR1
cm5pbmcgc29tZSB2YWx1ZS4iIiIKKworICAgIGRlZiBjcmVhdGVfZGlhbG9nKGRpYWxvZ190eXBl
LCB0ZXh0PU5vbmUsIHJlc3VsdF92YXI9Tm9uZSk6CisgICAgICAgIGFzc2VydCBkaWFsb2dfdHlw
ZSBpbiAoImFsZXJ0IiwgImNvbmZpcm0iLCAicHJvbXB0IiksICgKKyAgICAgICAgICAgICAgICJJ
bnZhbGlkIGRpYWxvZyB0eXBlOiAnJXMnIiAlIGRpYWxvZ190eXBlKQorCisgICAgICAgIGlmIHRl
eHQgaXMgTm9uZToKKyAgICAgICAgICAgIHRleHQgPSAiIgorCisgICAgICAgIGFzc2VydCBpc2lu
c3RhbmNlKHRleHQsIGJhc2VzdHJpbmcpLCAiYHRleHRgIHBhcmFtZXRlciBtdXN0IGJlIGEgc3Ry
aW5nIgorCisgICAgICAgIGlmIHJlc3VsdF92YXIgaXMgTm9uZToKKyAgICAgICAgICAgIHJlc3Vs
dF92YXIgPSAiX19XRUJEUklWRVIiCisKKyAgICAgICAgYXNzZXJ0IHJlLnNlYXJjaChyIl5bXyRh
LXokXVtfJGEtejAtOV0qJCIsIHJlc3VsdF92YXIsIHJlLklHTk9SRUNBU0UpLCAoCisgICAgICAg
ICAgICAnVGhlIGByZXN1bHRfdmFyYCBtdXN0IGJlIGEgdmFsaWQgSmF2YVNjcmlwdCBpZGVudGlm
aWVyJykKKworICAgICAgICAjIFNjcmlwdCBjb21wbGV0aW9uIGFuZCBtb2RhbCBzdW1tb25pbmcg
YXJlIHNjaGVkdWxlZCBvbiB0d28gc2VwYXJhdGUKKyAgICAgICAgIyB0dXJucyBvZiB0aGUgZXZl
bnQgbG9vcCB0byBlbnN1cmUgdGhhdCBib3RoIG9jY3VyIHJlZ2FyZGxlc3Mgb2YgaG93CisgICAg
ICAgICMgdGhlIHVzZXIgYWdlbnQgbWFuYWdlcyBzY3JpcHQgZXhlY3V0aW9uLgorICAgICAgICBz
cGF3biA9ICIiIgorICAgICAgICAgICAgdmFyIGRvbmUgPSBhcmd1bWVudHNbMF07CisgICAgICAg
ICAgICBzZXRUaW1lb3V0KGRvbmUsIDApOworICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlv
bigpIHt7CisgICAgICAgICAgICAgICAgd2luZG93LnswfSA9IHdpbmRvdy57MX0oInsyfSIpOwor
ICAgICAgICAgICAgfX0sIDApOworICAgICAgICAiIiIuZm9ybWF0KHJlc3VsdF92YXIsIGRpYWxv
Z190eXBlLCB0ZXh0KQorCisgICAgICAgIHNlc3Npb24uc2VuZF9zZXNzaW9uX2NvbW1hbmQoIlBP
U1QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleGVjdXRlL2FzeW5j
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7InNjcmlwdCI6IHNwYXdu
LCAiYXJncyI6IFtdfSkKKworICAgIHJldHVybiBjcmVhdGVfZGlhbG9nCmRpZmYgLS1naXQgYS9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL3N1cHBvcnQvaHR0cF9y
ZXF1ZXN0LnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9z
dXBwb3J0L2h0dHBfcmVxdWVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uYWUyOGE2NDg2YjEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL3N1cHBvcnQvaHR0cF9yZXF1ZXN0LnB5CkBAIC0wLDAg
KzEsMjMgQEAKK2ltcG9ydCBjb250ZXh0bGliCitpbXBvcnQgaHR0cGxpYgorCisKK2NsYXNzIEhU
VFBSZXF1ZXN0KG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnQpOgor
ICAgICAgICBzZWxmLmhvc3QgPSBob3N0CisgICAgICAgIHNlbGYucG9ydCA9IHBvcnQKKworICAg
IGRlZiBoZWFkKHNlbGYsIHBhdGgpOgorICAgICAgICByZXR1cm4gc2VsZi5fcmVxdWVzdCgiSEVB
RCIsIHBhdGgpCisKKyAgICBkZWYgZ2V0KHNlbGYsIHBhdGgpOgorICAgICAgICByZXR1cm4gc2Vs
Zi5fcmVxdWVzdCgiR0VUIiwgcGF0aCkKKworICAgIEBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2Vy
CisgICAgZGVmIF9yZXF1ZXN0KHNlbGYsIG1ldGhvZCwgcGF0aCk6CisgICAgICAgIGNvbm4gPSBo
dHRwbGliLkhUVFBDb25uZWN0aW9uKHNlbGYuaG9zdCwgc2VsZi5wb3J0KQorICAgICAgICB0cnk6
CisgICAgICAgICAgICBjb25uLnJlcXVlc3QobWV0aG9kLCBwYXRoKQorICAgICAgICAgICAgeWll
bGQgY29ubi5nZXRyZXNwb25zZSgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBjb25u
LmNsb3NlKCkKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2
ZXIvdGVzdHMvc3VwcG9ydC9pbmxpbmUucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViZHJpdmVyL3Rlc3RzL3N1cHBvcnQvaW5saW5lLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi45OTQxOGQ5NzRkMwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZl
clRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvc3VwcG9ydC9pbmxpbmUucHkKQEAg
LTAsMCArMSw0MCBAQAoraW1wb3J0IHVybGxpYgorCisKK2RlZiBpbmxpbmUoZG9jLCBkb2N0eXBl
PSJodG1sIiwgbWltZT0idGV4dC9odG1sO2NoYXJzZXQ9dXRmLTgiLCBwcm90b2NvbD0iaHR0cCIp
OgorICAgIGZyb20gLmZpeHR1cmVzIGltcG9ydCBzZXJ2ZXJfY29uZmlnLCB1cmwKKyAgICBidWls
ZF91cmwgPSB1cmwoc2VydmVyX2NvbmZpZygpKQorCisgICAgaWYgZG9jdHlwZSA9PSAiaHRtbCI6
CisgICAgICAgIG1pbWUgPSAidGV4dC9odG1sO2NoYXJzZXQ9dXRmLTgiCisgICAgZWxpZiBkb2N0
eXBlID09ICJ4aHRtbCI6CisgICAgICAgIG1pbWUgPSAiYXBwbGljYXRpb24veGh0bWwreG1sIgor
ICAgICAgICBkb2MgPSByIiIiPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRN
TCAxLjAgU3RyaWN0Ly9FTiIKKyAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94
aHRtbDEtc3RyaWN0LmR0ZCI+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94
aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+CisgIDxoZWFkPgorICAgIDx0aXRsZT5YSFRN
TCBtaWdodCBiZSB0aGUgZnV0dXJlPC90aXRsZT4KKyAgPC9oZWFkPgorCisgIDxib2R5PgorICAg
IHt9CisgIDwvYm9keT4KKzwvaHRtbD4iIiIuZm9ybWF0KGRvYykKKworICAgIHF1ZXJ5ID0geyJk
b2MiOiBkb2N9CisgICAgaWYgbWltZSAhPSAidGV4dC9odG1sO2NoYXJzZXQ9dXRmOCI6CisgICAg
ICAgIHF1ZXJ5WyJjb250ZW50LXR5cGUiXSA9IG1pbWUKKworICAgIHJldHVybiBidWlsZF91cmwo
Ii93ZWJkcml2ZXIvdGVzdHMvc3VwcG9ydC9pbmxpbmUucHkiLAorICAgICAgICAgICAgICAgICAg
ICAgcXVlcnk9dXJsbGliLnVybGVuY29kZShxdWVyeSksCisgICAgICAgICAgICAgICAgICAgICBw
cm90b2NvbD1wcm90b2NvbCkKKworCitkZWYgbWFpbihyZXF1ZXN0LCByZXNwb25zZSk6CisgICAg
ZG9jID0gcmVxdWVzdC5HRVQuZmlyc3QoImRvYyIsIE5vbmUpCisgICAgY29udGVudF90eXBlID0g
cmVxdWVzdC5HRVQuZmlyc3QoImNvbnRlbnQtdHlwZSIsICJ0ZXh0L2h0bWw7Y2hhcnNldD11dGY4
IikKKyAgICBpZiBkb2MgaXMgTm9uZToKKyAgICAgICAgcnYgPSA0MDQsIFsoIkNvbnRlbnQtVHlw
ZSIsICJ0ZXh0L3BsYWluIildLCAiTWlzc2luZyBkb2MgcGFyYW1ldGVyIGluIHF1ZXJ5IgorICAg
IGVsc2U6CisgICAgICAgIHJ2ID0gWygiQ29udGVudC1UeXBlIiwgY29udGVudF90eXBlKV0sIGRv
YworICAgIHJldHVybiBydgpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYmRyaXZlci90ZXN0cy9zdXBwb3J0L21lcmdlX2RpY3Rpb25hcmllcy5weSBiL1dlYkRyaXZl
clRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvc3VwcG9ydC9tZXJnZV9kaWN0aW9u
YXJpZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmNmMDZjOWI0
MzNjCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRy
aXZlci90ZXN0cy9zdXBwb3J0L21lcmdlX2RpY3Rpb25hcmllcy5weQpAQCAtMCwwICsxLDQ5IEBA
CitkZWYgaXRlcml0ZW1zKGQpOgorICAgICIiIkNyZWF0ZSBhIGtleS12YWx1ZSBpdGVyYXRvciBm
b3IgdGhlIGdpdmVuIGRpY3QgaW4gYm90aCBQeXRob24gMi54IGFuZAorICAgIFB5dGhvbiAzLngg
ZW52aXJvbm1lbnRzIiIiCisgICAgaWYgaGFzYXR0cihkLCAiaXRlcml0ZW1zIik6CisgICAgICAg
IHJldHVybiBkLml0ZXJpdGVtcygpCisgICAgcmV0dXJuIGQuaXRlbXMoKQorCitkZWYgbWVyZ2Vf
ZGljdGlvbmFyaWVzKGZpcnN0LCBzZWNvbmQpOgorICAgICIiIkdpdmVuIHR3byBkaWN0aW9uYXJp
ZXMsIGNyZWF0ZSBhIHRoaXJkIHRoYXQgZGVmaW5lcyBhbGwgc3BlY2lmaWVkCisgICAga2V5L3Zh
bHVlIHBhaXJzLiBUaGlzIG1lcmdlX2RpY3Rpb25hcmllcyBpcyBwZXJmb3JtZWQgImRlZXBseSIg
b24gYW55IG5lc3RlZAorICAgIGRpY3Rpb25hcmllcy4gSWYgYSB2YWx1ZSBpcyBkZWZpbmVkIGZv
ciB0aGUgc2FtZSBrZXkgYnkgYm90aCBkaWN0aW9uYXJpZXMsCisgICAgYW4gZXhjZXB0aW9uIHdp
bGwgYmUgcmFpc2VkLiIiIgorICAgIHJlc3VsdCA9IGRpY3QoZmlyc3QpCisKKyAgICBmb3Iga2V5
LCB2YWx1ZSBpbiBpdGVyaXRlbXMoc2Vjb25kKToKKyAgICAgICAgaWYga2V5IGluIHJlc3VsdCBh
bmQgcmVzdWx0W2tleV0gIT0gdmFsdWU6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHJlc3Vs
dFtrZXldLCBkaWN0KSBhbmQgaXNpbnN0YW5jZSh2YWx1ZSwgZGljdCk6CisgICAgICAgICAgICAg
ICAgcmVzdWx0W2tleV0gPSBtZXJnZV9kaWN0aW9uYXJpZXMocmVzdWx0W2tleV0sIHZhbHVlKQor
ICAgICAgICAgICAgZWxpZiByZXN1bHRba2V5XSAhPSB2YWx1ZToKKyAgICAgICAgICAgICAgICBy
YWlzZSBUeXBlRXJyb3IoIm1lcmdlX2RpY3Rpb25hcmllczogcmVmdXNpbmcgdG8gb3ZlcndyaXRl
ICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhdHRyaWJ1dGU6IGAlc2Ai
ICUga2V5KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZQor
CisgICAgcmV0dXJuIHJlc3VsdAorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIGFz
c2VydCBtZXJnZV9kaWN0aW9uYXJpZXMoe30sIHt9KSA9PSB7fQorICAgIGFzc2VydCBtZXJnZV9k
aWN0aW9uYXJpZXMoe30sIHsiYSI6IDIzfSkgPT0geyJhIjogMjN9CisgICAgYXNzZXJ0IG1lcmdl
X2RpY3Rpb25hcmllcyh7ImEiOiAyM30sIHsiYiI6IDQ1fSkgPT0geyJhIjogMjMsICJiIjogNDV9
CisKKyAgICBlID0gTm9uZQorICAgIHRyeToKKyAgICAgICAgbWVyZ2VfZGljdGlvbmFyaWVzKHsi
YSI6IDIzfSwgeyJhIjogNDV9KQorICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgX2U6CisgICAgICAg
IGUgPSBfZQorICAgIGFzc2VydCBpc2luc3RhbmNlKGUsIFR5cGVFcnJvcikKKworICAgIGFzc2Vy
dCBtZXJnZV9kaWN0aW9uYXJpZXMoeyJhIjogMjN9LCB7ImEiOiAyM30pID09IHsiYSI6IDIzfQor
CisgICAgYXNzZXJ0IG1lcmdlX2RpY3Rpb25hcmllcyh7ImEiOiB7ImIiOiAyM319LCB7ImEiOiB7
ImMiOiA0NX19KSA9PSB7ImEiOiB7ImIiOiAyMywgImMiOiA0NX19CisgICAgYXNzZXJ0IG1lcmdl
X2RpY3Rpb25hcmllcyh7ImEiOiB7ImIiOiAyM319LCB7ImEiOiB7ImIiOiAyM319KSA9PSB7ImEi
OiB7ImIiOiAyM319CisKKyAgICBlID0gTm9uZQorICAgIHRyeToKKyAgICAgICAgbWVyZ2VfZGlj
dGlvbmFyaWVzKHsiYSI6IHsiYiI6IDIzfX0sIHsiYSI6IHsiYiI6IDQ1fX0pCisgICAgZXhjZXB0
IEV4Y2VwdGlvbiBhcyBfZToKKyAgICAgICAgZSA9IF9lCisgICAgYXNzZXJ0IGlzaW5zdGFuY2Uo
ZSwgVHlwZUVycm9yKQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dl
YmRyaXZlci90ZXN0cy9zdXBwb3J0L3dhaXQucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViZHJpdmVyL3Rlc3RzL3N1cHBvcnQvd2FpdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uZjY0NWFiZTczNjcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2
ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL3N1cHBvcnQvd2FpdC5weQpAQCAt
MCwwICsxLDI4IEBACitpbXBvcnQgdGltZQorCitjbGFzcyBUaW1lb3V0RXhjZXB0aW9uKEV4Y2Vw
dGlvbik6CisgICAgcGFzcworCisKK2RlZiB3YWl0KHNlc3Npb24sIGNvbmRpdGlvbiwgbWVzc2Fn
ZSwgaW50ZXJ2YWw9MC4xLCB0aW1lb3V0PTUpOgorICAgICIiIiBQb2xsIGEgY29uZGl0aW9uIHVu
dGlsIGl0J3MgdHJ1ZSBvciB0aGUgdGltZW91dCBlbGxhcHNlcy4KKworICAgIDpwYXJhbSBzZXNz
aW9uOiBXZWJEcml2ZXIgc2Vzc2lvbiB0byB1c2Ugd2l0aCBgY29uZGl0aW9uYAorICAgIDpwYXJh
bSBjb25kaXRpb246IGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyBhIFdlYkRyaXZlciBzZXNzaW9uIGFu
ZCByZXR1cm5zIGEgYm9vbGVhbgorICAgIDpwYXJhbSBtZXNzYWdlOiBmYWlsdXJlIGRlc2NyaXB0
aW9uIHRvIGRpc3BsYXkgaW4gY2FzZSB0aGUgdGltZW91dCBpcyByZWFjaGVkCisgICAgOnBhcmFt
IGludGVydmFsOiBzZWNvbmRzIGJldHdlZW4gZWFjaCBjYWxsIHRvIGBjb25kaXRpb25gLiBEZWZh
dWx0OiAwLjEKKyAgICA6cGFyYW0gdGltZW91dDogc2Vjb25kcyB1bnRpbCB3ZSBzdG9wIHBvbGxp
bmcuIERlZmF1bHQ6IDUKKyAgICAiIiIKKworICAgIHN0YXJ0ID0gdGltZS50aW1lKCkKKyAgICBl
bmQgPSBzdGFydCArIHRpbWVvdXQKKworICAgIHdoaWxlIG5vdCAodGltZS50aW1lKCkgPj0gZW5k
KToKKyAgICAgICAgbmV4dF9zdGVwID0gdGltZS50aW1lKCkgKyBpbnRlcnZhbAorICAgICAgICBz
dWNjZXNzID0gY29uZGl0aW9uKHNlc3Npb24pCisgICAgICAgIG5leHRfaW50ZXJ2YWwgPSBtYXgo
bmV4dF9zdGVwIC0gdGltZS50aW1lKCksIDApCisgICAgICAgIGlmIG5vdCBzdWNjZXNzOgorICAg
ICAgICAgICAgdGltZS5zbGVlcChuZXh0X2ludGVydmFsKQorICAgICAgICAgICAgY29udGludWUK
KyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MKKyAgICByYWlzZSBUaW1lb3V0RXhjZXB0aW9uKCJUaW1l
ZCBvdXQgYWZ0ZXIgJWQgc2Vjb25kczogJXMiICUgKHRpbWVvdXQsIG1lc3NhZ2UpKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321564</attachid>
            <date>2017-09-22 10:42:03 -0700</date>
            <delta_ts>2017-09-25 12:08:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wd-w3c-tests.diff</filename>
            <type>text/plain</type>
            <size>1561405</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAyMTUw
Nzg4NDJjYi4uZDg0ODdhOTBlNWIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9U
b29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNSBAQAorMjAxNy0wOS0yMSAgQ2FybG9zIEdhcmNp
YSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgV2ViRHJpdmVyOiBBZGQg
c3VwcG9ydCB0byBpbXBvcnQgYW5kIHJ1biBXM0MgdGVzdHMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzMwNAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdQVCBoYXMgbm93IHNldmVyYWwgV2ViRHJpdmVy
IHRlc3RzLCBhbmQgbmV3IG9uZXMgYXJlIGdvaW5nIHRvIGJlIGFkZGVkIHRvIGNvdmVyIHRoZSB3
aG9sZSBzcGVjLiBUaGlzIHBhdGNoCisgICAgICAgIGFkZHMgdGhlIGluaXRpYWwgc3VwcG9ydCBm
b3IgcnVubmluZyBXM0MgdGVzdHMuIFRoZSBzY3JpcHQgaW1wb3J0LXczYy13ZWJkcml2ZXItdGVz
dHMgcmV1c2VzIHBhcnRzIG9mIHRoZSAgVzNDCisgICAgICAgIHRlc3QgZG93bmxvYWRlciB0byBk
b3dubG9hZCB0aGUgdGVzdHMgYW5kIHJlcXVpcmVkIHRvb2xzIGZyb20gV1BUIHJlcG9zaXRvcnkg
aW50byBXZWJEcml2ZXJUZXN0cworICAgICAgICBkaXJlY3RvcnkuIFRlc3RzIGNhbiBiZSBydW4g
d2l0aCBydW4td2ViZHJpdmVyLXRlc3RzLCBhIG5ldyBzY3JpcHQgdGhhdCB3b3JrcyBzaW1pbGFy
IHRvIG90aGVyIHRlc3QgcnVubmVyCisgICAgICAgIHNjcmlwdHMuIEZvciBub3cgaXQgc2hvd3Mg
YSBzdW1tYXJ5IGF0IHRoZSBlbmQgb2YgdGhlIGV4ZWN1dGlvbiwgdGhlcmUgYXJlbid0IGV4cGVj
dGF0aW9ucyB5ZXQsIHNpbmNlIHdlIGFyZSBub3QKKyAgICAgICAgcmVhZHkgdG8gcnVuIHRob3Nl
IHRlc3RzIGluIHRoZSBib3RzLiBOb3Qgb25seSBiZWNhdXNlIG9mIGJ1Z3MgYW5kIG1pc3Npbmcg
Y29tbWFuZHMgaW4gb3VyIFdlYkRyaXZlcgorICAgICAgICBpbXBsZW1lbnRhdGlvbiwgYnV0IGFs
c28gYmVjYXVzZSB0aGUgdGVzdHMgdGhlbXNldmVzIGFyZSBub3Qgc3BlYyBjb21wbGlhbnQuIEhv
d2V2ZXIsIHRoaXMgaXMgc3RpbGwgdXNlZnVsIHRvCisgICAgICAgIHJ1biB0aGUgdGVzdHMgdG8g
Zml4IHRoZSBidWdzIGFuZCBpbXBsZW1lbnQgdGhlIG1pc3NpbmcgZmVhdHVyZXMuIE9uY2Ugd2Ug
YXJlIHJlYWR5IHRvIHByb3Blcmx5IHJ1biB0aGUgdGVzdHMsCisgICAgICAgIHdlIGNhbiBhZGQg
dGhlIGV4cGVjdGF0aW9ucyBzdXBwb3J0IGFuZCBydW4gdGhlIHRlc3RzIGluIHRoZSBib3RzLgor
CisgICAgICAgICogU2NyaXB0cy9pbXBvcnQtdzNjLXdlYmRyaXZlci10ZXN0czogQWRkZWQuCisg
ICAgICAgICogU2NyaXB0cy9ydW4td2ViZHJpdmVyLXRlc3RzOiBBZGRlZC4KKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHk6IFNraXAgV2ViRHJpdmVyVGVzdHMgZGly
ZWN0b3J5IHNpbmNlIGl0IG9ubHkgY29udGFpbnMgdGhpcmQtcGFydHkgcHl0aG9uCisgICAgICAg
IGNvZGUuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L19faW5pdF9fLnB5
OiBBZGQgc3VwcG9ydCB0byBhdXRvZG93bmxvYWQgbW96bG9nIGFuZCBtb3pwcm9jZXNzIHNpbmNl
IHRoZXkgcmVxdWlyZWQKKyAgICAgICAgYnkgdGhlIFdlYkRyaXZlciB0ZXN0cy4KKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZlcl90ZXN0cy9fX2luaXRfXy5weTogQWRkZWQuCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJfdGVzdHMvd2ViZHJpdmVyX2RyaXZl
ci5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJfdGVzdHMv
d2ViZHJpdmVyX2RyaXZlcl9ndGsucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvd2ViZHJpdmVyX3Rlc3RzL3dlYmRyaXZlcl90ZXN0X3Jlc3VsdC5weTogQWRkZWQuCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJfdGVzdHMvd2ViZHJpdmVyX3Rlc3RfcnVu
bmVyLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZlcl90ZXN0
cy93ZWJkcml2ZXJfdGVzdF9ydW5uZXJfdzNjLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L3dlYmRyaXZlcl90ZXN0cy93ZWJkcml2ZXJfdzNjX2V4ZWN1dG9yLnB5OiBBZGRl
ZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZlcl90ZXN0cy93ZWJkcml2ZXJf
dzNjX3dlYl9zZXJ2ZXIucHk6IEFkZGVkLgorCiAyMDE3LTA5LTIxICBKb3NlcGggUGVjb3Jhcm8g
IDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgYWRkIHRoZSBhYmls
aXR5IHRvIHNraXAgYSB0ZXN0MjYyIHRlc3QuCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL2lt
cG9ydC13M2Mtd2ViZHJpdmVyLXRlc3RzIGIvVG9vbHMvU2NyaXB0cy9pbXBvcnQtdzNjLXdlYmRy
aXZlci10ZXN0cwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMC4uMWZkNzc5
NDYwMjIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL2ltcG9ydC13M2Mtd2ViZHJp
dmVyLXRlc3RzCkBAIC0wLDAgKzEsODAgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisjIENv
cHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisjIGFyZSBtZXQ6CisjCisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUKKyMgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyMgICAgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyAgICBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZworIyAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMKKyMgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSICJBUyBJUyIgQU5EIEFO
WQorIyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUKKyMgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAorIyBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyMgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCisjIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRgorIyBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyMgU1VDSCBE
QU1BR0UuCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQganNvbgoraW1wb3J0IG9zCisKK2Zyb20g
d2Via2l0cHkuY29tbW9uLmhvc3QgaW1wb3J0IEhvc3QKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5
c3RlbS5maWxlc3lzdGVtIGltcG9ydCBGaWxlU3lzdGVtCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5z
eXN0ZW0ubG9ndXRpbHMgaW1wb3J0IGNvbmZpZ3VyZV9sb2dnaW5nCitmcm9tIHdlYmtpdHB5LmNv
bW1vbi53ZWJraXRfZmluZGVyIGltcG9ydCBXZWJLaXRGaW5kZXIKK2Zyb20gd2Via2l0cHkuY29t
bW9uLmNoZWNrb3V0LnNjbS5naXQgaW1wb3J0IEdpdAorZnJvbSB3ZWJraXRweS53M2MudGVzdF9k
b3dubG9hZGVyIGltcG9ydCBUZXN0RG93bmxvYWRlcgorCitfbG9nID0gbG9nZ2luZy5nZXRMb2dn
ZXIoX19uYW1lX18pCisKK2RlZiBkb3dubG9hZF90ZXN0cyhob3N0LCB1cmwsIHJldmlzaW9uLCBk
ZXN0X2RpcmVjdG9yeSk6CisgICAgZG93bmxvYWRlciA9IFRlc3REb3dubG9hZGVyKE5vbmUsIGhv
c3QsIFRlc3REb3dubG9hZGVyLmRlZmF1bHRfb3B0aW9ucygpKQorICAgIGRvd25sb2FkZXIuY2hl
Y2tvdXRfdGVzdF9yZXBvc2l0b3J5KHJldmlzaW9uLCB1cmwsIGRlc3RfZGlyZWN0b3J5KQorICAg
IGRvd25sb2FkZXIuZ2l0KGRlc3RfZGlyZWN0b3J5KS5jaGVja291dChyZXZpc2lvbiwgRmFsc2Up
CisKK2RlZiBzaG91bGRfc2tpcF9maWxlKHNvdXJjZV9wYXRoLCBmdWxsX3BhdGhzX3RvX3NraXAp
OgorICAgIGZvciBwYXRoIGluIGZ1bGxfcGF0aHNfdG9fc2tpcDoKKyAgICAgICAgaWYgc291cmNl
X3BhdGguc3RhcnRzd2l0aChwYXRoKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgcmV0
dXJuIEZhbHNlCisKK2RlZiBpbXBvcnRfdGVzdHMoaG9zdCwgcGF0aHNfdG9faW1wb3J0LCBwYXRo
c190b19za2lwLCBzcmNfZGlyZWN0b3J5LCBkZXN0X2RpcmVjdG9yeSk6CisgICAgX2xvZy5pbmZv
KCdJbXBvcnRpbmcgdGVzdHMnKQorICAgIGZ1bGxfcGF0aHNfdG9fc2tpcCA9IFtob3N0LmZpbGVz
eXN0ZW0uam9pbihzcmNfZGlyZWN0b3J5LCBwYXRoKSBmb3IgcGF0aCBpbiBwYXRoc190b19za2lw
XQorICAgIGZvciBwYXRoIGluIHBhdGhzX3RvX2ltcG9ydDoKKyAgICAgICAgc291cmNlX2RpcmVj
dG9yeSA9IGhvc3QuZmlsZXN5c3RlbS5qb2luKHNyY19kaXJlY3RvcnksIHBhdGgpCisgICAgICAg
IGZvciBzb3VyY2VfcGF0aCBpbiBob3N0LmZpbGVzeXN0ZW0uZmlsZXNfdW5kZXIoc291cmNlX2Rp
cmVjdG9yeSk6CisgICAgICAgICAgICBpZiBzaG91bGRfc2tpcF9maWxlKHNvdXJjZV9wYXRoLCBm
dWxsX3BhdGhzX3RvX3NraXApOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAg
ICBkZXN0aW5hdGlvbl9wYXRoID0gaG9zdC5maWxlc3lzdGVtLmpvaW4oZGVzdF9kaXJlY3Rvcnks
IGhvc3QuZmlsZXN5c3RlbS5yZWxwYXRoKHNvdXJjZV9wYXRoLCBzcmNfZGlyZWN0b3J5KSkKKyAg
ICAgICAgICAgIGhvc3QuZmlsZXN5c3RlbS5tYXliZV9tYWtlX2RpcmVjdG9yeShob3N0LmZpbGVz
eXN0ZW0uZGlybmFtZShkZXN0aW5hdGlvbl9wYXRoKSkKKyAgICAgICAgICAgIGhvc3QuZmlsZXN5
c3RlbS5jb3B5ZmlsZShzb3VyY2VfcGF0aCwgZGVzdGluYXRpb25fcGF0aCkKKworCitjb25maWd1
cmVfbG9nZ2luZygpCisKK2hvc3QgPSBIb3N0KCkKK2hvc3QuaW5pdGlhbGl6ZV9zY20oKQord2Vi
a2l0X2ZpbmRlciA9IFdlYktpdEZpbmRlcihob3N0LmZpbGVzeXN0ZW0pCitpbXBvcnRlcl9jb25m
aWdfcGF0aCA9IHdlYmtpdF9maW5kZXIucGF0aF9mcm9tX3dlYmtpdF9iYXNlKCdXZWJEcml2ZXJU
ZXN0cycsICdpbXBvcnRlZCcsICd3M2MnLCAnaW1wb3J0ZXIuanNvbicpCitjb25maWcgPSBqc29u
LmxvYWRzKGhvc3QuZmlsZXN5c3RlbS5yZWFkX3RleHRfZmlsZShpbXBvcnRlcl9jb25maWdfcGF0
aCkpCisKK2Rvd25sb2FkX3BhdGggPSB3ZWJraXRfZmluZGVyLnBhdGhfZnJvbV93ZWJraXRfYmFz
ZSgnV2ViS2l0QnVpbGQnLCAndzNjLXRlc3RzJywgJ3dlYi1wbGF0Zm9ybS10ZXN0cycpCitob3N0
LmZpbGVzeXN0ZW0ubWF5YmVfbWFrZV9kaXJlY3RvcnkoaG9zdC5maWxlc3lzdGVtLmRpcm5hbWUo
ZG93bmxvYWRfcGF0aCkpCitkb3dubG9hZF90ZXN0cyhob3N0LCBjb25maWdbJ3JlcG9zaXRvcnkn
XSwgY29uZmlnWydyZXZpc2lvbiddLCBkb3dubG9hZF9wYXRoKQorCitpbXBvcnRfcGF0aCA9IHdl
YmtpdF9maW5kZXIucGF0aF9mcm9tX3dlYmtpdF9iYXNlKCdXZWJEcml2ZXJUZXN0cycsICdpbXBv
cnRlZCcsICd3M2MnKQoraW1wb3J0X3Rlc3RzKGhvc3QsIGNvbmZpZ1sncGF0aHNfdG9faW1wb3J0
J10sIGNvbmZpZ1sncGF0aHNfdG9fc2tpcCddLCBkb3dubG9hZF9wYXRoLCBpbXBvcnRfcGF0aCkK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvcnVuLXdlYmRyaXZlci10ZXN0cyBiL1Rvb2xzL1Nj
cmlwdHMvcnVuLXdlYmRyaXZlci10ZXN0cwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAw
MDAwMDAwMC4uOTRlMmMxNDc5NzkKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3J1
bi13ZWJkcml2ZXItdGVzdHMKQEAgLTAsMCArMSw2NiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9u
CisKKyMgQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCisjCisjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyMgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworIyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyMgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMKKyMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3B0cGFyc2UK
K2ltcG9ydCBzeXMKKworZnJvbSB3ZWJraXRweS5jb21tb24uaG9zdCBpbXBvcnQgSG9zdAorZnJv
bSB3ZWJraXRweS53ZWJkcml2ZXJfdGVzdHMud2ViZHJpdmVyX3Rlc3RfcnVubmVyIGltcG9ydCBX
ZWJEcml2ZXJUZXN0UnVubmVyCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ubG9ndXRpbHMg
aW1wb3J0IGNvbmZpZ3VyZV9sb2dnaW5nCisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25h
bWVfXykKKworb3B0aW9uX3BhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcih1c2FnZT0ndXNh
Z2U6ICVwcm9nIFtvcHRpb25zXSBbdGVzdC4uLl0nKQorb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9u
KCctLXZlcmJvc2UnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZXN0PSd2ZXJib3NlJywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBoZWxwPSdTaG93IGRlYnVnIG1lc3NhZ2UnKQorb3B0aW9uX3Bh
cnNlci5hZGRfb3B0aW9uKCctLXBsYXRmb3JtJywgYWN0aW9uPSdzdG9yZScsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgaGVscD0nUGxhdGZvcm0gdG8gdXNlIChlLmcuLCAiZ3RrIiknKQorb3B0
aW9uX3BhcnNlci5hZGRfb3B0aW9uKCctLWd0aycsIGFjdGlvbj0nc3RvcmVfY29uc3QnLCBkZXN0
PSdwbGF0Zm9ybScsIGNvbnN0PSdndGsnLAorICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9
J0FsaWFzIGZvciAtLXBsYXRmb3JtPWd0aycpCitvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy0t
cmVsZWFzZScsIGFjdGlvbj0nc3RvcmVfY29uc3QnLCBjb25zdD0nUmVsZWFzZScsIGRlc3Q9ImNv
bmZpZ3VyYXRpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1NldCB0aGUgY29u
ZmlndXJhdGlvbiB0byBSZWxlYXNlJykKK29wdGlvbl9wYXJzZXIuYWRkX29wdGlvbignLS1kZWJ1
ZycsIGFjdGlvbj0nc3RvcmVfY29uc3QnLCBjb25zdD0nRGVidWcnLCBkZXN0PSJjb25maWd1cmF0
aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdTZXQgdGhlIGNvbmZpZ3VyYXRp
b24gdG8gRGVidWcnKQorb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCctLWRpc3BsYXktc2VydmVy
JywgY2hvaWNlcz1bJ3h2ZmInLCAneG9yZycsICd3ZXN0b24nLCAnd2F5bGFuZCddLCBkZWZhdWx0
PSd4dmZiJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPScieHZmYiI6IFVzZSBhIHZp
cnR1YWxpemVkIFgxMSBzZXJ2ZXIuICJ4b3JnIjogVXNlIHRoZSBjdXJyZW50IFgxMSBzZXNzaW9u
LiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIndlc3RvbiI6IFVzZSBhIHZpcnR1
YWxpemVkIFdlc3RvbiBzZXJ2ZXIuICJ3YXlsYW5kIjogVXNlIHRoZSBjdXJyZW50IHdheWxhbmQg
c2Vzc2lvbi4nKQorCitvcHRpb25zLCBhcmdzID0gb3B0aW9uX3BhcnNlci5wYXJzZV9hcmdzKCkK
KworY29uZmlndXJlX2xvZ2dpbmcobG9nZ2luZy5ERUJVRyBpZiBvcHRpb25zLnZlcmJvc2UgZWxz
ZSBsb2dnaW5nLklORk8pCisKK3RyeToKKyAgICBwb3J0ID0gSG9zdCgpLnBvcnRfZmFjdG9yeS5n
ZXQob3B0aW9ucy5wbGF0Zm9ybSwgb3B0aW9ucykKK2V4Y2VwdCBOb3RJbXBsZW1lbnRlZEVycm9y
LCBlOgorICAgIF9sb2cuZXJyb3Ioc3RyKGUpKQorICAgIHN5cy5leGl0KC0xKQorCitwb3J0Ll9k
aXNwbGF5X3NlcnZlciA9IG9wdGlvbnMuZGlzcGxheV9zZXJ2ZXIKK3J1bm5lciA9IFdlYkRyaXZl
clRlc3RSdW5uZXIocG9ydCkKK3JldHZhbCA9IHJ1bm5lci5ydW4oYXJncykKK3J1bm5lci5wcmlu
dF9yZXN1bHRzKCkKKworc3lzLmV4aXQocmV0dmFsKQorCmRpZmYgLS1naXQgYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0
eWxlL2NoZWNrZXIucHkKaW5kZXggYmFkNTc2Y2QzZjQuLmQxZTBhZjY4Yzk1IDEwMDY0NAotLS0g
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkKKysrIGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CkBAIC0zNDYsNiArMzQ2LDggQEAgX1NLSVBQ
RURfRklMRVNfV0lUSF9XQVJOSU5HID0gWwogX1NLSVBQRURfRklMRVNfV0lUSE9VVF9XQVJOSU5H
ID0gWwogICAgICJMYXlvdXRUZXN0cyIgKyBvcy5wYXRoLnNlcCwKIAorICAgICJXZWJEcml2ZXJU
ZXN0cyIgKyBvcy5wYXRoLnNlcCwKKwogICAgICMgRmlsZXMgZ2VuZXJhdGVkIGJ5IHRoZSBiaW5k
aW5ncyBzY3JpcHQgc2hvdWxkIG5vdCBiZSBjaGVja2VkIGZvciBzdHlsZS4KICAgICBvcy5wYXRo
LmpvaW4oJ1NvdXJjZScsICdXZWJDb3JlJywgJ2JpbmRpbmdzJywgJ3NjcmlwdHMnLCAndGVzdCcp
LAogCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvX19pbml0
X18ucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvX19pbml0X18ucHkKaW5k
ZXggZmM0NzE4MmRiYTMuLjEwZDVkMWU5NzVhIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L3RoaXJkcGFydHkvX19pbml0X18ucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS90aGlyZHBhcnR5L19faW5pdF9fLnB5CkBAIC0xMDYsNiArMTA2LDEwIEBAIGNsYXNzIEF1dG9p
bnN0YWxsSW1wb3J0SG9vayhvYmplY3QpOgogICAgICAgICAgICAgc2VsZi5pbnN0YWxsX2Nocm9t
ZWRyaXZlcigpCiAgICAgICAgIGVsaWYgJy5nZWNrb2RyaXZlcicgaW4gZnVsbG5hbWU6CiAgICAg
ICAgICAgICBzZWxmLmluc3RhbGxfZ2Vja29kcml2ZXIoKQorICAgICAgICBlbGlmICcubW96bG9n
JyBpbiBmdWxsbmFtZToKKyAgICAgICAgICAgIHNlbGYuX2luc3RhbGxfbW96bG9nKCkKKyAgICAg
ICAgZWxpZiAnLm1venByb2Nlc3MnIGluIGZ1bGxuYW1lOgorICAgICAgICAgICAgc2VsZi5faW5z
dGFsbF9tb3pwcm9jZXNzKCkKIAogICAgIGRlZiBfaW5zdGFsbF9tZWNoYW5pemUoc2VsZik6CiAg
ICAgICAgIHNlbGYuX2luc3RhbGwoImh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvc291
cmNlL20vbWVjaGFuaXplL21lY2hhbml6ZS0wLjIuNS50YXIuZ3oiLApAQCAtMTE5LDYgKzEyMywx
NiBAQCBjbGFzcyBBdXRvaW5zdGFsbEltcG9ydEhvb2sob2JqZWN0KToKICAgICAgICAgc2VsZi5f
aW5zdGFsbCgiaHR0cDovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2UvcC9wZXA4L3Bl
cDgtMC41LjAudGFyLmd6I21kNT01MTJhODE4YWY5OTc5MjkwY2Q2MTljY2U4ZTljMmUyYiIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwZXA4LTAuNS4wL3BlcDgucHkiKQogCisgICAg
ZGVmIF9pbnN0YWxsX21vemxvZyhzZWxmKToKKyAgICAgICAgc2VsZi5fZW5zdXJlX2F1dG9pbnN0
YWxsZWRfZGlyX2lzX2luX3N5c19wYXRoKCkKKyAgICAgICAgc2VsZi5faW5zdGFsbCgiaHR0cHM6
Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvMTAvZDUvZDI4NmI1ZGMzZjQwZTMyZDJhOWIzY2Fi
MGI1YjIwYTA1ZDcwNDk1OGI0NGI0YzVhOWFlZDY0NzJkZWFiL21vemxvZy0zLjUudGFyLmd6I21k
NT0zMjgyYzcwZTcwMzcyNjZmODNkOGM4MDExOTEyOWI3NSIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAibW96bG9nLTMuNS9tb3psb2ciKQorCisgICAgZGVmIF9pbnN0YWxsX21venBy
b2Nlc3Moc2VsZik6CisgICAgICAgIHNlbGYuX2Vuc3VyZV9hdXRvaW5zdGFsbGVkX2Rpcl9pc19p
bl9zeXNfcGF0aCgpCisgICAgICAgIHNlbGYuX2luc3RhbGwoImh0dHBzOi8vcHlwaS5weXRob24u
b3JnL3BhY2thZ2VzL2NiLzI2LzE0NGRiYzI4ZDFmNDBlMzkyZjhhMGNiZWU3NzFiYTYyNGE2MTAx
N2YwMTZjNzdhZDg4NDI0ZDg0YjIzMC9tb3pwcm9jZXNzLTAuMjUudGFyLmd6I21kNT0wN2EwNGU2
YWUxYTcwNTcwNWU0YjQ0OTY5ZmU3YTE4MiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAibW96cHJvY2Vzcy0wLjI1L21venByb2Nlc3MiKQorCiAgICAgZGVmIF9pbnN0YWxsX3B5bGlu
dChzZWxmKToKICAgICAgICAgc2VsZi5fZW5zdXJlX2F1dG9pbnN0YWxsZWRfZGlyX2lzX2luX3N5
c19wYXRoKCkKICAgICAgICAgaWYgKG5vdCBzZWxmLl9mcy5leGlzdHMoc2VsZi5fZnMuam9pbihf
QVVUT0lOU1RBTExFRF9ESVIsICJweWxpbnQiKSkgb3IKZGlmZiAtLWdpdCBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvd2ViZHJpdmVyX3Rlc3RzL19faW5pdF9fLnB5IGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS93ZWJkcml2ZXJfdGVzdHMvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAuLmVmNjViZWU1YmI3Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJfdGVzdHMvX19pbml0X18ucHkKQEAgLTAsMCArMSBA
QAorIyBSZXF1aXJlZCBmb3IgUHl0aG9uIHRvIHNlYXJjaCB0aGlzIGRpcmVjdG9yeSBmb3IgbW9k
dWxlIGZpbGVzCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZlcl90
ZXN0cy93ZWJkcml2ZXJfZHJpdmVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93ZWJkcml2
ZXJfdGVzdHMvd2ViZHJpdmVyX2RyaXZlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMC4uOWVlMmI0NGRmYjQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3dlYmRyaXZlcl90ZXN0cy93ZWJkcml2ZXJfZHJpdmVyLnB5CkBAIC0wLDAgKzEs
NDkgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCisjCisjIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyMgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworIyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyMgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKKyMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworY2xhc3MgV2ViRHJpdmVyKG9iamVjdCk6Cisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQpOgorICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAor
CisgICAgZGVmIGJpbmFyeV9wYXRoKHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRl
ZEVycm9yCisKKyAgICBkZWYgYnJvd3Nlcl9uYW1lKHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJ
bXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgY2FwYWJpbGl0aWVzKHNlbGYpOgorICAgICAgICBy
YWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKworX2RyaXZlcnMgPSB7fQorCisKK2RlZiByZWdp
c3Rlcl9kcml2ZXIocG9ydF9uYW1lLCBkcml2ZXJfY2xzKToKKyAgICBfZHJpdmVyc1twb3J0X25h
bWVdID0gZHJpdmVyX2NscworCisKK2RlZiBjcmVhdGVfZHJpdmVyKHBvcnQpOgorICAgIGlmIHBv
cnQubmFtZSgpIG5vdCBpbiBfZHJpdmVyczoKKyAgICAgICAgX19pbXBvcnRfXygnd2Via2l0cHku
d2ViZHJpdmVyX3Rlc3RzLndlYmRyaXZlcl9kcml2ZXJfJXMnICUgcG9ydC5uYW1lKCkpCisKKyAg
ICByZXR1cm4gX2RyaXZlcnNbcG9ydC5uYW1lKCldKHBvcnQpCmRpZmYgLS1naXQgYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZlcl90ZXN0cy93ZWJkcml2ZXJfZHJpdmVyX2d0ay5weSBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvd2ViZHJpdmVyX3Rlc3RzL3dlYmRyaXZlcl9kcml2ZXJf
Z3RrLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40OTllNmY4YTgy
NQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvd2ViZHJpdmVyX3Rl
c3RzL3dlYmRyaXZlcl9kcml2ZXJfZ3RrLnB5CkBAIC0wLDAgKzEsNDQgQEAKKyMgQ29weXJpZ2h0
IChDKSAyMDE3IElnYWxpYSBTLkwuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJl
IG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisj
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyMgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworIyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04KKyMgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMK
KyMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisKK2Zyb20gd2Via2l0cHkud2ViZHJpdmVyX3Rlc3RzLndlYmRyaXZlcl9kcml2ZXIg
aW1wb3J0IFdlYkRyaXZlciwgcmVnaXN0ZXJfZHJpdmVyCisKKworY2xhc3MgV2ViRHJpdmVyR3Rr
KFdlYkRyaXZlcik6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCk6CisgICAgICAgIHN1
cGVyKFdlYkRyaXZlckd0aywgc2VsZikuX19pbml0X18ocG9ydCkKKworICAgIGRlZiBiaW5hcnlf
cGF0aChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3BvcnQuX2J1aWxkX3BhdGgoJ2Jpbics
ICdXZWJLaXRXZWJEcml2ZXInKQorCisgICAgZGVmIGJyb3dzZXJfbmFtZShzZWxmKToKKyAgICAg
ICAgcmV0dXJuICdNaW5pQnJvd3NlcicKKworICAgIGRlZiBjYXBhYmlsaXRpZXMoc2VsZik6Cisg
ICAgICAgIHJldHVybiB7J2Jyb3dzZXJOYW1lJzogc2VsZi5icm93c2VyX25hbWUoKSwKKyAgICAg
ICAgICAgICAgICAnd2Via2l0Z3RrOmJyb3dzZXJPcHRpb25zJzogeworICAgICAgICAgICAgICAg
ICAgICAnYmluYXJ5Jzogc2VsZi5fcG9ydC5fYnVpbGRfcGF0aCgnYmluJywgJ01pbmlCcm93c2Vy
JyksCisgICAgICAgICAgICAgICAgICAgICdhcmdzJzogWyctLWF1dG9tYXRpb24nLCAnLS1qYXZh
c2NyaXB0LWNhbi1vcGVuLXdpbmRvd3MtYXV0b21hdGljYWxseT10cnVlJ119fQorCisKK3JlZ2lz
dGVyX2RyaXZlcignZ3RrJywgV2ViRHJpdmVyR3RrKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS93ZWJkcml2ZXJfdGVzdHMvd2ViZHJpdmVyX3Rlc3RfcmVzdWx0LnB5IGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJfdGVzdHMvd2ViZHJpdmVyX3Rlc3RfcmVzdWx0
LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41ZTUwN2NmYmZlYgot
LS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvd2ViZHJpdmVyX3Rlc3Rz
L3dlYmRyaXZlcl90ZXN0X3Jlc3VsdC5weQpAQCAtMCwwICsxLDM1IEBACisjIENvcHlyaWdodCAo
QykgMjAxNyBJZ2FsaWEgUy5MLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBt
ZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorIyBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisjIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisjIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyMgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OCisjIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisj
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorCitpbXBvcnQgb3MKKworCitjbGFzcyBXZWJEcml2ZXJUZXN0UmVzdWx0KG9iamVjdCk6
CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGVzdF9wcmVmaXgsIHRlc3QsIHN0YXR1cywgbWVz
c2FnZSwgYmFja3RyYWNlPU5vbmUpOgorICAgICAgICBzZWxmLnRlc3QgPSBvcy5wYXRoLmpvaW4o
dGVzdF9wcmVmaXgsIHRlc3QpCisgICAgICAgIHNlbGYuc3RhdHVzID0gc3RhdHVzCisgICAgICAg
IHNlbGYubWVzc2FnZSA9IG1lc3NhZ2UKKyAgICAgICAgc2VsZi5iYWNrdHJhY2UgPSBiYWNrdHJh
Y2UKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICI8JXMuJXMgJXMg
JXM+IiAlIChzZWxmLl9fbW9kdWxlX18sIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBzZWxmLnRl
c3QsIHNlbGYuc3RhdHVzKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93ZWJk
cml2ZXJfdGVzdHMvd2ViZHJpdmVyX3Rlc3RfcnVubmVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS93ZWJkcml2ZXJfdGVzdHMvd2ViZHJpdmVyX3Rlc3RfcnVubmVyLnB5Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42NDY2MWVhOTJiYQotLS0gL2Rldi9udWxsCisr
KyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvd2ViZHJpdmVyX3Rlc3RzL3dlYmRyaXZlcl90ZXN0
X3J1bm5lci5weQpAQCAtMCwwICsxLDc1IEBACisjIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEg
Uy5MLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorIyBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisjIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisjIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyMgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisj
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisjIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQg
bG9nZ2luZworCitmcm9tIHdlYmtpdHB5LndlYmRyaXZlcl90ZXN0cy53ZWJkcml2ZXJfdGVzdF9y
dW5uZXJfdzNjIGltcG9ydCBXZWJEcml2ZXJUZXN0UnVubmVyVzNDCisKK19sb2cgPSBsb2dnaW5n
LmdldExvZ2dlcihfX25hbWVfXykKKworCitjbGFzcyBXZWJEcml2ZXJUZXN0UnVubmVyKG9iamVj
dCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCk6CisgICAgICAgIHNlbGYuX3BvcnQg
PSBwb3J0CisgICAgICAgIF9sb2cuaW5mbygnVXNpbmcgcG9ydCAlcycgJSBzZWxmLl9wb3J0Lm5h
bWUoKSkKKyAgICAgICAgX2xvZy5pbmZvKCdUZXN0IGNvbmZpZ3VyYXRpb246ICVzJyAlIHNlbGYu
X3BvcnQudGVzdF9jb25maWd1cmF0aW9uKCkpCisgICAgICAgIF9sb2cuaW5mbygnVXNpbmcgZGlz
cGxheSBzZXJ2ZXIgJXMnICUgKHNlbGYuX3BvcnQuX2Rpc3BsYXlfc2VydmVyKSkKKworICAgICAg
ICBzZWxmLl9kaXNwbGF5X2RyaXZlciA9IHNlbGYuX3BvcnQuY3JlYXRlX2RyaXZlcih3b3JrZXJf
bnVtYmVyPTAsIG5vX3RpbWVvdXQ9VHJ1ZSkuX21ha2VfZHJpdmVyKHBpeGVsX3Rlc3RzPUZhbHNl
KQorICAgICAgICBpZiBub3Qgc2VsZi5fZGlzcGxheV9kcml2ZXIuY2hlY2tfZHJpdmVyKHNlbGYu
X3BvcnQpOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJGYWlsZWQgdG8gY2hlY2sg
ZHJpdmVyICVzIiAlIHNlbGYuX2Rpc3BsYXlfZHJpdmVyLl9fY2xhc3NfXy5fX25hbWVfXykKKyAg
ICAgICAgc2VsZi5fcnVubmVyID0gV2ViRHJpdmVyVGVzdFJ1bm5lclczQyhzZWxmLl9wb3J0LCBz
ZWxmLl9kaXNwbGF5X2RyaXZlcikKKworICAgIGRlZiBydW4oc2VsZiwgdGVzdHM9W10pOgorICAg
ICAgICBydW5uZXJfdGVzdHMgPSBzZWxmLl9ydW5uZXIuY29sbGVjdF90ZXN0cyh0ZXN0cykKKyAg
ICAgICAgaWYgcnVubmVyX3Rlc3RzOgorICAgICAgICAgICAgX2xvZy5pbmZvKCdDb2xsZWN0ZWQg
JWQgdGVzdHMnICUgbGVuKHJ1bm5lcl90ZXN0cykpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5f
cnVubmVyLnJ1bihydW5uZXJfdGVzdHMpCisKKyAgICAgICAgX2xvZy5pbmZvKCdObyB0ZXN0cyBm
b3VuZCcpCisgICAgICAgIHJldHVybiAwCisKKyAgICBkZWYgcHJpbnRfcmVzdWx0cyhzZWxmKToK
KyAgICAgICAgcmVzdWx0cyA9IHt9CisgICAgICAgIHBhc3NlZF9jb3VudCA9IDAKKyAgICAgICAg
ZmFpbHVyZXNfY291bnQgPSAwCisgICAgICAgIGZvciByZXN1bHQgaW4gc2VsZi5fcnVubmVyLnJl
c3VsdHMoKToKKyAgICAgICAgICAgIGlmIHJlc3VsdC5zdGF0dXMgPT0gJ1BBU1MnOgorICAgICAg
ICAgICAgICAgIHBhc3NlZF9jb3VudCArPSAxCisgICAgICAgICAgICBlbGlmIHJlc3VsdC5zdGF0
dXMgPT0gJ0ZBSUwnOgorICAgICAgICAgICAgICAgIHJlc3VsdHMuc2V0ZGVmYXVsdChyZXN1bHQu
c3RhdHVzLCBbXSkuYXBwZW5kKHJlc3VsdC50ZXN0KQorICAgICAgICAgICAgICAgIGZhaWx1cmVz
X2NvdW50ICs9IDEKKworICAgICAgICBfbG9nLmluZm8oJycpCisKKyAgICAgICAgaWYgbm90IHJl
c3VsdHM6CisgICAgICAgICAgICBfbG9nLmluZm8oJ0FsbCB0ZXN0cyBydW4gYXMgZXhwZWN0ZWQn
KQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgX2xvZy5pbmZvKCclZCB0ZXN0cyByYW4g
YXMgZXhwZWN0ZWQsICVkIGRpZG5cJ3RcbicgJSAocGFzc2VkX2NvdW50LCBmYWlsdXJlc19jb3Vu
dCkpCisKKyAgICAgICAgaWYgJ0ZBSUwnIGluIHJlc3VsdHM6CisgICAgICAgICAgICBmYWlsZWQg
PSByZXN1bHRzWydGQUlMJ10KKyAgICAgICAgICAgIF9sb2cuaW5mbygnVW5leHBlY3RlZCBmYWls
dXJlcyAoJWQpJyAlIGxlbihmYWlsZWQpKQorICAgICAgICAgICAgZm9yIHRlc3QgaW4gZmFpbGVk
OgorICAgICAgICAgICAgICAgIF9sb2cuaW5mbygnICAlcycgJSB0ZXN0KQpkaWZmIC0tZ2l0IGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJfdGVzdHMvd2ViZHJpdmVyX3Rlc3RfcnVu
bmVyX3czYy5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvd2ViZHJpdmVyX3Rlc3RzL3dlYmRy
aXZlcl90ZXN0X3J1bm5lcl93M2MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLjZjOWFiMTRkNmYxCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS93ZWJkcml2ZXJfdGVzdHMvd2ViZHJpdmVyX3Rlc3RfcnVubmVyX3czYy5weQpAQCAtMCww
ICsxLDEwOSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4KKyMKKyMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorIyBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworIyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisjIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorIyBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
IyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUworIyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBv
cworaW1wb3J0IHN5cworaW1wb3J0IHRpbWUKKworZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVt
LmZpbGVzeXN0ZW0gaW1wb3J0IEZpbGVTeXN0ZW0KK2Zyb20gd2Via2l0cHkuY29tbW9uLndlYmtp
dF9maW5kZXIgaW1wb3J0IFdlYktpdEZpbmRlcgorZnJvbSB3ZWJraXRweS53ZWJkcml2ZXJfdGVz
dHMud2ViZHJpdmVyX3czY19leGVjdXRvciBpbXBvcnQgV2ViRHJpdmVyVzNDRXhlY3V0b3IKK2Zy
b20gd2Via2l0cHkud2ViZHJpdmVyX3Rlc3RzLndlYmRyaXZlcl9kcml2ZXIgaW1wb3J0IGNyZWF0
ZV9kcml2ZXIKK2Zyb20gd2Via2l0cHkud2ViZHJpdmVyX3Rlc3RzLndlYmRyaXZlcl90ZXN0X3Jl
c3VsdCBpbXBvcnQgV2ViRHJpdmVyVGVzdFJlc3VsdAorZnJvbSB3ZWJraXRweS53ZWJkcml2ZXJf
dGVzdHMud2ViZHJpdmVyX3czY193ZWJfc2VydmVyIGltcG9ydCBXZWJEcml2ZXJXM0NXZWJTZXJ2
ZXIKKworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCisKK2NsYXNzIFdlYkRy
aXZlclRlc3RSdW5uZXJXM0Mob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0
LCBkaXNwbGF5X2RyaXZlcik6CisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CisgICAgICAgIHNl
bGYuX2Rpc3BsYXlfZHJpdmVyID0gZGlzcGxheV9kcml2ZXIKKyAgICAgICAgc2VsZi5fZHJpdmVy
ID0gY3JlYXRlX2RyaXZlcihzZWxmLl9wb3J0KQorICAgICAgICBfbG9nLmluZm8oJ1VzaW5nIGRy
aXZlciBhdCAlcycgJSAoc2VsZi5fZHJpdmVyLmJpbmFyeV9wYXRoKCkpKQorICAgICAgICBfbG9n
LmluZm8oJ0Jyb3dzZXI6ICVzJyAlIChzZWxmLl9kcml2ZXIuYnJvd3Nlcl9uYW1lKCkpKQorCisg
ICAgICAgIHNlbGYuX3Jlc3VsdHMgPSBbXQorICAgICAgICBzZWxmLl9zZXJ2ZXIgPSBXZWJEcml2
ZXJXM0NXZWJTZXJ2ZXIoc2VsZi5fcG9ydCkKKworICAgIGRlZiBfdGVzdHNfZGlyKHNlbGYpOgor
ICAgICAgICByZXR1cm4gV2ViS2l0RmluZGVyKHNlbGYuX3BvcnQuaG9zdC5maWxlc3lzdGVtKS5w
YXRoX2Zyb21fd2Via2l0X2Jhc2UoJ1dlYkRyaXZlclRlc3RzJykKKworICAgIGRlZiBjb2xsZWN0
X3Rlc3RzKHNlbGYsIHRlc3RzPVtdKToKKyAgICAgICAgcmVsYXRpdmVfdGVzdHNfZGlyID0gb3Mu
cGF0aC5qb2luKCdpbXBvcnRlZCcsICd3M2MnLCAnd2ViZHJpdmVyJywgJ3Rlc3RzJykKKyAgICAg
ICAgdzNjX3Rlc3RzID0gW10KKyAgICAgICAgaWYgbm90IHRlc3RzOgorICAgICAgICAgICAgdGVz
dHMgPSBbcmVsYXRpdmVfdGVzdHNfZGlyXQorICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0czoKKyAg
ICAgICAgICAgIGlmIG5vdCB0ZXN0LnN0YXJ0c3dpdGgocmVsYXRpdmVfdGVzdHNfZGlyKToKKyAg
ICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgdGVzdF9wYXRoID0gb3MucGF0aC5q
b2luKHNlbGYuX3Rlc3RzX2RpcigpLCB0ZXN0KQorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2Rp
cih0ZXN0X3BhdGgpOgorICAgICAgICAgICAgICAgIHczY190ZXN0cy5leHRlbmQoc2VsZi5fc2Nh
bl9kaXJlY3RvcnkodGVzdF9wYXRoKSkKKyAgICAgICAgICAgIGVsaWYgc2VsZi5faXNfdGVzdCh0
ZXN0X3BhdGgpOgorICAgICAgICAgICAgICAgIHczY190ZXN0cy5hcHBlbmQodGVzdF9wYXRoKQor
ICAgICAgICByZXR1cm4gdzNjX3Rlc3RzCisKKyAgICBkZWYgX2lzX3Rlc3Qoc2VsZiwgdGVzdCk6
CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZSh0ZXN0KToKKyAgICAgICAgICAgIHJldHVy
biBGYWxzZQorICAgICAgICBpZiBvcy5wYXRoLnNwbGl0ZXh0KHRlc3QpWzFdICE9ICcucHknOgor
ICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIG9zLnBhdGguYmFzZW5hbWUodGVz
dCkgaW4gWydjb25mdGVzdC5weScsICdfX2luaXRfXy5weSddOgorICAgICAgICAgICAgcmV0dXJu
IEZhbHNlCisgICAgICAgIGlmIG9zLnBhdGguZGlybmFtZSh0ZXN0KSA9PSAnc3VwcG9ydCc6Cisg
ICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBf
c2Nhbl9kaXJlY3Rvcnkoc2VsZiwgZGlyZWN0b3J5KToKKyAgICAgICAgdGVzdHMgPSBbXQorICAg
ICAgICBmb3IgcGF0aCBpbiBzZWxmLl9wb3J0Lmhvc3QuZmlsZXN5c3RlbS5maWxlc191bmRlcihk
aXJlY3RvcnkpOgorICAgICAgICAgICAgaWYgc2VsZi5faXNfdGVzdChwYXRoKToKKyAgICAgICAg
ICAgICAgICB0ZXN0cy5hcHBlbmQocGF0aCkKKyAgICAgICAgcmV0dXJuIHRlc3RzCisKKyAgICBk
ZWYgcnVuKHNlbGYsIHRlc3RzPVtdKToKKyAgICAgICAgc2VsZi5fc2VydmVyLnN0YXJ0KCkKKwor
ICAgICAgICBleGVjdXRvciA9IFdlYkRyaXZlclczQ0V4ZWN1dG9yKHNlbGYuX2RyaXZlciwgc2Vs
Zi5fc2VydmVyLCBzZWxmLl9kaXNwbGF5X2RyaXZlcikKKyAgICAgICAgZXhlY3V0b3Iuc2V0dXAo
KQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0czoKKyAgICAgICAg
ICAgICAgICB0ZXN0X25hbWUgPSBvcy5wYXRoLnJlbHBhdGgodGVzdCwgc2VsZi5fdGVzdHNfZGly
KCkpCisgICAgICAgICAgICAgICAgaGFybmVzc19yZXN1bHQsIHRlc3RfcmVzdWx0cyA9IGV4ZWN1
dG9yLnJ1bih0ZXN0KQorICAgICAgICAgICAgICAgIGlmIGhhcm5lc3NfcmVzdWx0WzBdICE9ICdP
Syc6CisgICAgICAgICAgICAgICAgICAgIF9sb2cuZXJyb3IoIkZhaWxlZCB0byBydW4gdGVzdCAl
czogJXMiICUgKHRlc3RfbmFtZSwgaGFybmVzc19yZXN1bHRbMV0pKQorICAgICAgICAgICAgICAg
IGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2FkZF9yZXN1bHRzKG9zLnBhdGguZGly
bmFtZSh0ZXN0X25hbWUpLCB0ZXN0X3Jlc3VsdHMpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAg
ICAgICBleGVjdXRvci50ZWFyZG93bigpCisgICAgICAgICAgICBzZWxmLl9zZXJ2ZXIuc3RvcCgp
CisKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9yZXN1bHRzKQorCisgICAgZGVmIF9hZGRfcmVz
dWx0cyhzZWxmLCB0ZXN0X3ByZWZpeCwgcmVzdWx0cyk6CisgICAgICAgIHNlbGYuX3Jlc3VsdHMu
ZXh0ZW5kKFtXZWJEcml2ZXJUZXN0UmVzdWx0KHRlc3RfcHJlZml4LCAqcmVzdWx0KSBmb3IgcmVz
dWx0IGluIHJlc3VsdHNdKQorCisgICAgZGVmIHJlc3VsdHMoc2VsZik6CisgICAgICAgIHJldHVy
biBzZWxmLl9yZXN1bHRzCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3dlYmRy
aXZlcl90ZXN0cy93ZWJkcml2ZXJfdzNjX2V4ZWN1dG9yLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS93ZWJkcml2ZXJfdGVzdHMvd2ViZHJpdmVyX3czY19leGVjdXRvci5weQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZDZjYmRmMzQxYTcKLS0tIC9kZXYvbnVsbAor
KysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZlcl90ZXN0cy93ZWJkcml2ZXJfdzNj
X2V4ZWN1dG9yLnB5CkBAIC0wLDAgKzEsMTM4IEBACisjIENvcHlyaWdodCAoQykgMjAxNyBJZ2Fs
aWEgUy5MLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorIyBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisjIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisjIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyMgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
CisjIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisjIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBv
cnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgc3lzCisKK2Zyb20gd2Via2l0cHkuY29tbW9u
LnN5c3RlbS5maWxlc3lzdGVtIGltcG9ydCBGaWxlU3lzdGVtCitmcm9tIHdlYmtpdHB5LmNvbW1v
bi53ZWJraXRfZmluZGVyIGltcG9ydCBXZWJLaXRGaW5kZXIKK2ltcG9ydCB3ZWJraXRweS50aGly
ZHBhcnR5LmF1dG9pbnN0YWxsZWQubW96bG9nCitpbXBvcnQgd2Via2l0cHkudGhpcmRwYXJ0eS5h
dXRvaW5zdGFsbGVkLm1venByb2Nlc3MKK2Zyb20gbW96bG9nIGltcG9ydCBzdHJ1Y3R1cmVkbG9n
CisKK3czY190b29sc19kaXIgPSBXZWJLaXRGaW5kZXIoRmlsZVN5c3RlbSgpKS5wYXRoX2Zyb21f
d2Via2l0X2Jhc2UoJ1dlYkRyaXZlclRlc3RzJywgJ2ltcG9ydGVkJywgJ3czYycsICd0b29scycp
CisKKworZGVmIF9lbnN1cmVfZGlyZWN0b3J5X2luX3BhdGgoZGlyZWN0b3J5KToKKyAgICBpZiBu
b3QgZGlyZWN0b3J5IGluIHN5cy5wYXRoOgorICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgZGly
ZWN0b3J5KQorX2Vuc3VyZV9kaXJlY3RvcnlfaW5fcGF0aChvcy5wYXRoLmpvaW4odzNjX3Rvb2xz
X2RpciwgJ3B5dGVzdCcpKQorX2Vuc3VyZV9kaXJlY3RvcnlfaW5fcGF0aChvcy5wYXRoLmpvaW4o
dzNjX3Rvb2xzX2RpciwgJ3dlYmRyaXZlcicpKQorX2Vuc3VyZV9kaXJlY3RvcnlfaW5fcGF0aChv
cy5wYXRoLmpvaW4odzNjX3Rvb2xzX2RpciwgJ3dwdHJ1bm5lcicpKQorX2Vuc3VyZV9kaXJlY3Rv
cnlfaW5fcGF0aChvcy5wYXRoLmpvaW4odzNjX3Rvb2xzX2RpciwgIndlYmRyaXZlciIpKQorCitm
cm9tIHdwdHJ1bm5lci5leGVjdXRvcnMuYmFzZSBpbXBvcnQgV2RzcGVjRXhlY3V0b3IsIFdlYkRy
aXZlclByb3RvY29sCitmcm9tIHdwdHJ1bm5lci53ZWJkcml2ZXJfc2VydmVyIGltcG9ydCBXZWJE
cml2ZXJTZXJ2ZXIKKworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCisKK2Ns
YXNzIE1lc3NhZ2VMb2dnZXIob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXNz
YWdlX2Z1bmMpOgorICAgICAgICBzZWxmLm5hbWUgPSAnV2ViS2l0IFdlYkRyaXZlciBXUFQgbG9n
Z2VyJworICAgICAgICBzZWxmLnNlbmRfbWVzc2FnZSA9IG1lc3NhZ2VfZnVuYworCisgICAgZGVm
IF9sb2dfZGF0YShzZWxmLCBhY3Rpb24sICoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5zZW5kX21l
c3NhZ2UoJ2xvZycsIGFjdGlvbiwga3dhcmdzKQorCisgICAgZGVmIHByb2Nlc3Nfb3V0cHV0KHNl
bGYsIHByb2Nlc3MsIGRhdGEsIGNvbW1hbmQpOgorICAgICAgICBzZWxmLl9sb2dfZGF0YSgncHJv
Y2Vzc19vdXRwdXQnLCBwcm9jZXNzPXByb2Nlc3MsIGRhdGE9ZGF0YSwgY29tbWFuZD1jb21tYW5k
KQorCisKK2NsYXNzIFRlc3RSdW5uZXIob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxm
KToKKyAgICAgICAgc2VsZi5sb2dnZXIgPSBNZXNzYWdlTG9nZ2VyKHNlbGYuc2VuZF9tZXNzYWdl
KQorICAgICAgICBzdHJ1Y3R1cmVkbG9nLnNldF9kZWZhdWx0X2xvZ2dlcihzZWxmLmxvZ2dlcikK
KworICAgIGRlZiBzZW5kX21lc3NhZ2Uoc2VsZiwgY29tbWFuZCwgKmFyZ3MpOgorICAgICAgICBp
ZiBjb21tYW5kID09ICdsb2cnOgorICAgICAgICAgICAgc2VsZi5fbG9nKCphcmdzKQorCisgICAg
ZGVmIF9sb2coc2VsZiwgbGV2ZWwsIGRldGFpbHMpOgorICAgICAgICBpZiBsZXZlbCA9PSAncHJv
Y2Vzc19vdXRwdXQnOgorICAgICAgICAgICAgc2VsZi5fcHJvY2Vzc19vdXRwdXQoZGV0YWlsc1sn
cHJvY2VzcyddLCBkZXRhaWxzWydjb21tYW5kJ10sIGRldGFpbHNbJ2RhdGEnXSkKKyAgICAgICAg
ICAgIHJldHVybgorCisgICAgICAgIGlmIG5vdCAnbWVzc2FnZScgaW4gZGV0YWlsczoKKyAgICAg
ICAgICAgIHJldHVybgorICAgICAgICBtZXNzYWdlID0gZGV0YWlsc1snbWVzc2FnZSddCisgICAg
ICAgIGlmIGxldmVsID09ICdpbmZvJzoKKyAgICAgICAgICAgIF9sb2cuaW5mbyhtZXNzYWdlKQor
ICAgICAgICBlbGlmIGxldmVsID09ICdkZWJ1Zyc6CisgICAgICAgICAgICBfbG9nLmRlYnVnKG1l
c3NhZ2UpCisgICAgICAgIGVsaWYgbGV2ZWwgPT0gJ2Vycm9yJzoKKyAgICAgICAgICAgIF9sb2cu
ZXJyb3IobWVzc2FnZSkKKyAgICAgICAgZWxpZiBsZXZlbCA9PSAnY3JpdGljaWFsJzoKKyAgICAg
ICAgICAgIF9sb2cuY3JpdGljYWwobWVzc2FnZSkKKyAgICAgICAgZWxpZiBsZXZlbCA9PSAnd2Fy
bmluZyc6CisgICAgICAgICAgICBfbG9nLndhcm5pbmcobWVzc2FnZSkKKworICAgIGRlZiBfcHJv
Y2Vzc19vdXRwdXQoc2VsZiwgcGlkLCBjb21tYW5kLCBkYXRhKToKKyAgICAgICAgX2xvZy5kZWJ1
ZygnKCVzOiVkKTogJXMnICUgKG9zLnBhdGguYmFzZW5hbWUoY29tbWFuZCkuc3BsaXQoKVswXSwg
cGlkLCBkYXRhKSkKKworCitkZWYgX2xvZ19mdW5jKGxldmVsX25hbWUpOgorICAgIGRlZiBsb2co
c2VsZiwgbWVzc2FnZSk6CisgICAgICAgIHNlbGYuX2xvZ19kYXRhKGxldmVsX25hbWUubG93ZXIo
KSwgbWVzc2FnZT1tZXNzYWdlKQorICAgIGxvZy5fX25hbWVfXyA9IHN0cihsZXZlbF9uYW1lKS5s
b3dlcigpCisgICAgcmV0dXJuIGxvZworCisjIENyZWF0ZSBhbGwgdGhlIG1ldGhvZHMgb24gU3Ry
dWN0dXJlZExvZyBmb3IgZGVidWcgbGV2ZWxzLgorZm9yIGxldmVsX25hbWUgaW4gc3RydWN0dXJl
ZGxvZy5sb2dfbGV2ZWxzOgorICAgIHNldGF0dHIoTWVzc2FnZUxvZ2dlciwgbGV2ZWxfbmFtZS5s
b3dlcigpLCBfbG9nX2Z1bmMobGV2ZWxfbmFtZSkpCisKKworY2xhc3MgV2ViS2l0RHJpdmVyU2Vy
dmVyKFdlYkRyaXZlclNlcnZlcik6CisgICAgZGVmYXVsdF9iYXNlX3BhdGggPSAnLycKKyAgICB0
ZXN0X2VudiA9IE5vbmUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2dnZXIsIGJpbmFyeT1O
b25lLCBwb3J0PU5vbmUsIGJhc2VfcGF0aD0nJywgYXJncz1Ob25lKToKKyAgICAgICAgV2ViRHJp
dmVyU2VydmVyLl9faW5pdF9fKHNlbGYsIGxvZ2dlciwgYmluYXJ5LCBwb3J0PXBvcnQsIGJhc2Vf
cGF0aD1iYXNlX3BhdGgsIGFyZ3M9YXJncywgZW52PXNlbGYudGVzdF9lbnYpCisKKyAgICBkZWYg
bWFrZV9jb21tYW5kKHNlbGYpOgorICAgICAgICByZXR1cm4gW3NlbGYuYmluYXJ5LCAnLS1wb3J0
PSVzJyAlIHN0cihzZWxmLnBvcnQpXSArIHNlbGYuX2FyZ3MKKworCitjbGFzcyBXZWJLaXREcml2
ZXJQcm90b2NvbChXZWJEcml2ZXJQcm90b2NvbCk6CisgICAgc2VydmVyX2NscyA9IFdlYktpdERy
aXZlclNlcnZlcgorCisKK2NsYXNzIFdlYkRyaXZlclczQ0V4ZWN1dG9yKFdkc3BlY0V4ZWN1dG9y
KToKKyAgICBwcm90b2NvbF9jbHMgPSBXZWJLaXREcml2ZXJQcm90b2NvbAorCisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIGRyaXZlciwgc2VydmVyLCBkaXNwbGF5X2RyaXZlcik6CisgICAgICAgIFdl
YktpdERyaXZlclNlcnZlci50ZXN0X2VudiA9IGRpc3BsYXlfZHJpdmVyLl9zZXR1cF9lbnZpcm9u
X2Zvcl90ZXN0KCkKKyAgICAgICAgc2VydmVyX2NvbmZpZyA9IHsnaG9zdCc6IHNlcnZlci5ob3N0
KCksICdwb3J0cyc6IHsnaHR0cCc6IFtzdHIoc2VydmVyLnBvcnQoKSldfX0KKyAgICAgICAgV2Rz
cGVjRXhlY3V0b3IuX19pbml0X18oc2VsZiwgZHJpdmVyLmJyb3dzZXJfbmFtZSgpLCBzZXJ2ZXJf
Y29uZmlnLCBkcml2ZXIuYmluYXJ5X3BhdGgoKSwgTm9uZSwgY2FwYWJpbGl0aWVzPWRyaXZlci5j
YXBhYmlsaXRpZXMoKSkKKworICAgIGRlZiBzZXR1cChzZWxmKToKKyAgICAgICAgc2VsZi5ydW5u
ZXIgPSBUZXN0UnVubmVyKCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5zZXR1cChzZWxmLnJ1bm5l
cikKKworICAgIGRlZiB0ZWFyZG93bihzZWxmKToKKyAgICAgICAgc2VsZi5wcm90b2NvbC50ZWFy
ZG93bigpCisKKyAgICBkZWYgcnVuKHNlbGYsIHBhdGgpOgorICAgICAgICByZXR1cm4gc2VsZi5k
b193ZHNwZWMoc2VsZi5wcm90b2NvbC5zZXNzaW9uX2NvbmZpZywgcGF0aCwgMjUpCmRpZmYgLS1n
aXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZlcl90ZXN0cy93ZWJkcml2ZXJfdzNj
X3dlYl9zZXJ2ZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZlcl90ZXN0cy93
ZWJkcml2ZXJfdzNjX3dlYl9zZXJ2ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAuLjU1MTViMDAxMTYxCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS93ZWJkcml2ZXJfdGVzdHMvd2ViZHJpdmVyX3czY193ZWJfc2VydmVyLnB5CkBAIC0w
LDAgKzEsMTM0IEBACisjIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLgorIworIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
IyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisj
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5EIEFOWQorIyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisjIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisjIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyMgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisjIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisjIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgZXJybm8KK2ltcG9ydCBq
c29uCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgc29ja2V0CitpbXBvcnQgdGVt
cGZpbGUKK2ltcG9ydCB0aW1lCisKK2Zyb20gd2Via2l0cHkuY29tbW9uLndlYmtpdF9maW5kZXIg
aW1wb3J0IFdlYktpdEZpbmRlcgorCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18p
CisKKworY2xhc3MgV2ViRHJpdmVyVzNDV2ViU2VydmVyKG9iamVjdCk6CisKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgcG9ydCk6CisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CisgICAgICAgIHNl
bGYuX25hbWUgPSAid3B0d2QiCisKKyAgICAgICAgbGF5b3V0X3Jvb3QgPSBzZWxmLl9wb3J0Lmxh
eW91dF90ZXN0c19kaXIoKQorICAgICAgICBzZWxmLl9sYXlvdXRfZG9jX3Jvb3QgPSBvcy5wYXRo
LmpvaW4obGF5b3V0X3Jvb3QsICdpbXBvcnRlZCcsICd3M2MnLCAnd2ViLXBsYXRmb3JtLXRlc3Rz
JykKKyAgICAgICAgc2VsZi5fcHJvY2VzcyA9IE5vbmUKKyAgICAgICAgc2VsZi5fcGlkID0gTm9u
ZQorCisgICAgICAgIHRtcGRpciA9IHRlbXBmaWxlLmdldHRlbXBkaXIoKQorICAgICAgICBpZiBz
ZWxmLl9wb3J0Lmhvc3QucGxhdGZvcm0uaXNfbWFjKCk6CisgICAgICAgICAgICB0bXBkaXIgPSAn
L3RtcCcKKyAgICAgICAgc2VsZi5fcnVudGltZV9wYXRoID0gb3MucGF0aC5qb2luKHRtcGRpciwg
IldlYktpdFdlYkRyaXZlclRlc3RzIikKKyAgICAgICAgc2VsZi5fcG9ydC5ob3N0LmZpbGVzeXN0
ZW0ubWF5YmVfbWFrZV9kaXJlY3Rvcnkoc2VsZi5fcnVudGltZV9wYXRoKQorCisgICAgICAgIHNl
bGYuX3BpZF9maWxlID0gb3MucGF0aC5qb2luKHNlbGYuX3J1bnRpbWVfcGF0aCwgJyVzLnBpZCcg
JSBzZWxmLl9uYW1lKQorICAgICAgICBzZWxmLl9zZXJ2ZXJzX2ZpbGUgPSBvcy5wYXRoLmpvaW4o
c2VsZi5fcnVudGltZV9wYXRoLCAnJXNfc2VydmVycy5qc29uJyAlIChzZWxmLl9uYW1lKSkKKwor
ICAgICAgICAjIEZJWE1FOiBXZSB1c2UgdGhlIHJ1bnRpbWUgcGF0aCBmb3Igbm93IGZvciBsb2cg
b3V0cHV0LCBzaW5jZSB3ZSBkb24ndCBoYXZlIGEgcmVzdWx0cyBkaXJlY3RvcnkgeWV0LgorICAg
ICAgICBzZWxmLl9vdXRwdXRfbG9nX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5fcnVudGltZV9w
YXRoLCAnJXNfcHJvY2Vzc19sb2cub3V0LnR4dCcgJSAoc2VsZi5fbmFtZSkpCisKKyAgICBkZWYg
X3dhaXRfZm9yX3NlcnZlcihzZWxmLCB3YWl0X3NlY3M9MjAsIHNsZWVwX3NlY3M9MSk6CisgICAg
ICAgIGRlZiBjaGVja19wb3J0KGhvc3QsIHBvcnQpOgorICAgICAgICAgICAgcyA9IHNvY2tldC5z
b2NrZXQoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHMuY29ubmVjdCgoaG9z
dCwgcG9ydCkpCisgICAgICAgICAgICBleGNlcHQgSU9FcnJvciwgZToKKyAgICAgICAgICAgICAg
ICBpZiBlLmVycm5vIG5vdCBpbiAoZXJybm8uRUNPTk5SRUZVU0VELCBlcnJuby5FQ09OTlJFU0VU
KToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFs
c2UKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgcy5jbG9zZSgpCisgICAg
ICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQor
ICAgICAgICB3aGlsZSB0aW1lLnRpbWUoKSAtIHN0YXJ0X3RpbWUgPCB3YWl0X3NlY3M6CisgICAg
ICAgICAgICBpZiBzZWxmLl9wb3J0Ll9leGVjdXRpdmUuY2hlY2tfcnVubmluZ19waWQoc2VsZi5f
cGlkKSBhbmQgY2hlY2tfcG9ydChzZWxmLl9zZXJ2ZXJfaG9zdCwgc2VsZi5fc2VydmVyX3BvcnQp
OgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICB0aW1lLnNsZWVwKHNs
ZWVwX3NlY3MpCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIHN0YXJ0KHNlbGYpOgor
ICAgICAgICBhc3NlcnQgbm90IHNlbGYuX3BpZCwgJyVzIHNlcnZlciBpcyBhbHJlYWR5IHJ1bm5p
bmcnICUgc2VsZi5fbmFtZQorCisgICAgICAgICMgU3RvcCBhbnkgc3RhbGUgc2VydmVycyBsZWZ0
IG92ZXIgZnJvbSBwcmV2aW91cyBpbnN0YW5jZXMuCisgICAgICAgIGlmIHNlbGYuX3BvcnQuaG9z
dC5maWxlc3lzdGVtLmV4aXN0cyhzZWxmLl9waWRfZmlsZSk6CisgICAgICAgICAgICB0cnk6Cisg
ICAgICAgICAgICAgICAgc2VsZi5fcGlkID0gaW50KHNlbGYuX3BvcnQuaG9zdC5maWxlc3lzdGVt
LnJlYWRfdGV4dF9maWxlKHNlbGYuX3BpZF9maWxlKSkKKyAgICAgICAgICAgICAgICBzZWxmLnN0
b3AoKQorICAgICAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBVbmljb2RlRGVjb2RlRXJyb3Ip
OgorICAgICAgICAgICAgICAgICMgVGhlc2UgY291bGQgYmUgcmFpc2VkIGlmIHRoZSBwaWQgZmls
ZSBpcyBjb3JydXB0LgorICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQuaG9zdC5maWxlc3lzdGVt
LnJlbW92ZShzZWxmLl9waWRfZmlsZSkKKyAgICAgICAgICAgICAgICBzZWxmLl9waWQgPSBOb25l
CisKKyAgICAgICAgX2xvZy5kZWJ1ZygnQ29weWluZyBXZWJEcml2ZXIgV1BUIHNlcnZlciBjb25m
aWcuanNvbicpCisgICAgICAgIGRvY19yb290ID0gb3MucGF0aC5qb2luKFdlYktpdEZpbmRlcihz
ZWxmLl9wb3J0Lmhvc3QuZmlsZXN5c3RlbSkucGF0aF9mcm9tX3dlYmtpdF9iYXNlKCdXZWJEcml2
ZXJUZXN0cycpLCAnaW1wb3J0ZWQnLCAndzNjJykKKyAgICAgICAgY29uZmlnX2ZpbGVuYW1lID0g
b3MucGF0aC5qb2luKGRvY19yb290LCAnY29uZmlnLmpzb24nKQorICAgICAgICBjb25maWdfanNv
biA9IHNlbGYuX3BvcnQuaG9zdC5maWxlc3lzdGVtLnJlYWRfdGV4dF9maWxlKGNvbmZpZ19maWxl
bmFtZSkucmVwbGFjZSgiJURPQ19ST09UJSIsIGRvY19yb290KQorICAgICAgICBzZWxmLl9wb3J0
Lmhvc3QuZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUob3MucGF0aC5qb2luKHNlbGYuX2xheW91
dF9kb2Nfcm9vdCwgJ2NvbmZpZy5qc29uJyksIGNvbmZpZ19qc29uKQorICAgICAgICBjb25maWcg
PSBqc29uLmxvYWRzKGNvbmZpZ19qc29uKQorICAgICAgICBzZWxmLl9zZXJ2ZXJfaG9zdCA9IGNv
bmZpZ1snaG9zdCddCisgICAgICAgIHNlbGYuX3NlcnZlcl9wb3J0ID0gY29uZmlnWydwb3J0cydd
WydodHRwJ11bMF0KKworICAgICAgICBzZWxmLl93c291dCA9IHNlbGYuX3BvcnQuaG9zdC5maWxl
c3lzdGVtLm9wZW5fdGV4dF9maWxlX2Zvcl93cml0aW5nKHNlbGYuX291dHB1dF9sb2dfcGF0aCkK
KyAgICAgICAgbGF1bmNoZXIgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKG9zLnBhdGgu
ZGlybmFtZShfX2ZpbGVfXyksICcuLicsICdsYXlvdXRfdGVzdHMnLCAnc2VydmVycycsICd3ZWJf
cGxhdGZvcm1fdGVzdF9sYXVuY2hlci5weScpKQorICAgICAgICBjbWQgPSBbJ3B5dGhvbicsIGxh
dW5jaGVyLCBzZWxmLl9zZXJ2ZXJzX2ZpbGVdCisgICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBzZWxm
Ll9wb3J0Ll9leGVjdXRpdmUucG9wZW4oY21kLCBjd2Q9c2VsZi5fbGF5b3V0X2RvY19yb290LCBz
aGVsbD1GYWxzZSwgc3RkaW49c2VsZi5fcG9ydC5fZXhlY3V0aXZlLlBJUEUsIHN0ZG91dD1zZWxm
Ll93c291dCwgc3RkZXJyPXNlbGYuX3dzb3V0KQorICAgICAgICBzZWxmLl9waWQgPSBzZWxmLl9w
cm9jZXNzLnBpZAorICAgICAgICBzZWxmLl9wb3J0Lmhvc3QuZmlsZXN5c3RlbS53cml0ZV90ZXh0
X2ZpbGUoc2VsZi5fcGlkX2ZpbGUsIHN0cihzZWxmLl9waWQpKQorCisgICAgICAgIGlmIG5vdCBz
ZWxmLl93YWl0X2Zvcl9zZXJ2ZXIoKToKKyAgICAgICAgICAgIF9sb2cuZXJyb3IoJ1dQVCBTZXJ2
ZXIgcHJvY2VzcyBleGl0ZWQgcHJlbWF0dXJlbHkgd2l0aCBzdGF0dXMgY29kZSAlcycgJSBzZWxm
Ll9wcm9jZXNzLnJldHVybmNvZGUpCisgICAgICAgICAgICBzZWxmLnN0b3AoKQorICAgICAgICAg
ICAgcmFpc2UgUnVudGltZUVycm9yCisKKyAgICAgICAgX2xvZy5pbmZvKCdXZWJEcml2ZXIgV1BU
IHNlcnZlciBsaXN0ZW5pbmcgYXQgaHR0cDovLyVzOiVzLycgJSAoc2VsZi5fc2VydmVyX2hvc3Qs
IHNlbGYuX3NlcnZlcl9wb3J0KSkKKworICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICBfbG9n
LmRlYnVnKCdDbGVhbmluZyBXZWJEcml2ZXIgV1BUIHNlcnZlciBjb25maWcuanNvbicpCisgICAg
ICAgIHNlbGYuX3BvcnQuaG9zdC5maWxlc3lzdGVtLnJlbW92ZShvcy5wYXRoLmpvaW4oc2VsZi5f
bGF5b3V0X2RvY19yb290LCAnY29uZmlnLmpzb24nKSkKKyAgICAgICAgaWYgc2VsZi5fcHJvY2Vz
czoKKyAgICAgICAgICAgIHNlbGYuX3Byb2Nlc3MuY29tbXVuaWNhdGUoaW5wdXQ9J1xuJykKKyAg
ICAgICAgaWYgc2VsZi5fd3NvdXQ6CisgICAgICAgICAgICBzZWxmLl93c291dC5jbG9zZSgpCisg
ICAgICAgICAgICBzZWxmLl93c291dCA9IE5vbmUKKyAgICAgICAgaWYgc2VsZi5fcGlkIGFuZCBz
ZWxmLl9wb3J0Ll9leGVjdXRpdmUuY2hlY2tfcnVubmluZ19waWQoc2VsZi5fcGlkKToKKyAgICAg
ICAgICAgIF9sb2cud2FybmluZygnQ2Fubm90IHN0b3AgJXMgc2VydmVyIG5vcm1hbGx5LicgJSAo
c2VsZi5fbmFtZSkpCisgICAgICAgICAgICBfbG9nLndhcm5pbmcoJ0tpbGxpbmcgc2VydmVyIGxh
dW5jaGVyIHByb2Nlc3MgKHBpZDogJWQpLicgJSAoc2VsZi5fcGlkKSkKKyAgICAgICAgICAgIHNl
bGYuX3BvcnQuX2V4ZWN1dGl2ZS5raWxsX3Byb2Nlc3Moc2VsZi5fcGlkKQorICAgICAgICBzZWxm
Ll9wb3J0Lmhvc3QuZmlsZXN5c3RlbS5yZW1vdmUoc2VsZi5fcGlkX2ZpbGUpCisgICAgICAgIHNl
bGYuX3BpZCA9IE5vbmUKKworICAgIGRlZiBob3N0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2Vs
Zi5fc2VydmVyX2hvc3QKKworICAgIGRlZiBwb3J0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2Vs
Zi5fc2VydmVyX3BvcnQKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL0NoYW5nZUxvZyBiL1dl
YkRyaXZlclRlc3RzL0NoYW5nZUxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uNGJhNTA3NjE4ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9DaGFu
Z2VMb2cKQEAgLTAsMCArMSwxNCBAQAorMjAxNy0wOS0yMSAgQ2FybG9zIEdhcmNpYSBDYW1wb3Mg
IDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgV2ViRHJpdmVyOiBBZGQgc3VwcG9ydCB0
byBpbXBvcnQgYW5kIHJ1biBXM0MgdGVzdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3NzMwNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEFkZCBqc29uIGZpbGUgdXNlZCBieSB0aGUgaW1wb3J0ZXIgYW5k
IHRoZSByZXN1bHQgb2YgcnVubmluZyB0aGUgaW1wb3J0ZXIuCisKKyAgICAgICAgKiBpbXBvcnRl
ZC93M2MvaW1wb3J0ZXIuanNvbjogQWRkZWQuCisgICAgICAgICogaW1wb3J0ZWQvdzNjL3Rvb2xz
L3B5dGVzdC86IEFkZGVkLgorICAgICAgICAqIGltcG9ydGVkL3czYy90b29scy93ZWJkcml2ZXIv
OiBBZGRlZC4KKyAgICAgICAgKiBpbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyLzogQWRkZWQu
CisgICAgICAgICogaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci86IEFkZGVkLgpkaWZmIC0tZ2l0IGEv
V2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL2NvbmZpZy5qc29uIGIvV2ViRHJpdmVyVGVzdHMv
aW1wb3J0ZWQvdzNjL2NvbmZpZy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi42MTBhMGI2ZGFiOQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2lt
cG9ydGVkL3czYy9jb25maWcuanNvbgpAQCAtMCwwICsxLDEwIEBACit7Imhvc3QiOiAibG9jYWxo
b3N0IiwKKyAicG9ydHMiOnsiaHR0cCI6Wzg4MDIsIG51bGxdLAorICAgICAgICAgICJodHRwcyI6
IFtudWxsXSwKKyAgICAgICAgICAid3MiOiBbbnVsbF0sCisgICAgICAgICAgIndzcyI6IFtudWxs
XX0sCisgImRvY19yb290IjogIiVET0NfUk9PVCUiLAorICJjaGVja19zdWJkb21haW5zIjogZmFs
c2UsCisgImxvZ19sZXZlbCI6ImRlYnVnIiwKKyAiYmluZF9ob3N0bmFtZSI6IGZhbHNlCit9CmRp
ZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvaW1wb3J0ZXIuanNvbiBiL1dl
YkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy9pbXBvcnRlci5qc29uCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40NGJhY2E2NDIxYgotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy9pbXBvcnRlci5qc29uCkBAIC0wLDAgKzEsMTUgQEAK
K3sKKyAgICAicmVwb3NpdG9yeSI6ICJodHRwczovL2dpdGh1Yi5jb20vdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy5naXQiLAorICAgICJyZXZpc2lvbiI6ICIzYWVlZjcxYmI5OTdiM2MyODUzMGZjOGY3
NzhlNjJhMDE4MTJmNTQxIiwKKyAgICAicGF0aHNfdG9faW1wb3J0IjogWworICAgICAgICAidG9v
bHMvcHl0ZXN0IiwKKyAgICAgICAgInRvb2xzL3dlYmRyaXZlciIsCisgICAgICAgICJ0b29scy93
cHRydW5uZXIiLAorICAgICAgICAid2ViZHJpdmVyIgorICAgIF0sCisgICAgInBhdGhzX3RvX3Nr
aXAiOiBbCisgICAgICAgICJ0b29scy9weXRlc3QvZG9jIiwKKyAgICAgICAgInRvb2xzL3B5dGVz
dC90ZXN0aW5nIiwKKyAgICAgICAgInRvb2xzL3dwdHJ1bm5lci90ZXN0IgorICAgIF0KK30KZGlm
ZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvLmNvdmVy
YWdlcmMgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0Ly5jb3ZlcmFn
ZXJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yN2RiNjRlMDljMQot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRl
c3QvLmNvdmVyYWdlcmMKQEAgLTAsMCArMSw3IEBACitbcnVuXQorb21pdCA9IAorICAgICMgc3Rh
bmRsb25ldGVtcGxhdGUgaXMgcmVhZCBkeW5hbWljYWxseSBhbmQgdGVzdGVkIGJ5IHRlc3RfZ2Vu
c2NyaXB0CisgICAgKnN0YW5kYWxvbmV0ZW1wbGF0ZS5weQorICAgICMgb2xkaW50ZXJwcmV0IGNv
dWxkIGJlIHJlbW92ZWQsIGFzIGl0IGlzIG5vIGxvbmdlciB1c2VkIGluIHB5MjYrCisgICAgKm9s
ZGludGVycHJldC5weQorICAgIHZlbmRvcmVkX3BhY2thZ2VzCmRpZmYgLS1naXQgYS9XZWJEcml2
ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0Ly5naXRhdHRyaWJ1dGVzIGIvV2ViRHJp
dmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC8uZ2l0YXR0cmlidXRlcwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMjQyZDNkYTBkNzQKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0Ly5naXRhdHRy
aWJ1dGVzCkBAIC0wLDAgKzEgQEAKK0NIQU5HRUxPRyAgICBtZXJnZT11bmlvbgpkaWZmIC0tZ2l0
IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC8uZ2l0aHViL0lTU1VF
X1RFTVBMQVRFLm1kIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC8u
Z2l0aHViL0lTU1VFX1RFTVBMQVRFLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi5iYzYyZThhM2Y3ZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2lt
cG9ydGVkL3czYy90b29scy9weXRlc3QvLmdpdGh1Yi9JU1NVRV9URU1QTEFURS5tZApAQCAtMCww
ICsxLDggQEAKK1RoYW5rcyBmb3Igc3VibWl0dGluZyBhbiBpc3N1ZSEKKworSGVyZSdzIGEgcXVp
Y2sgY2hlY2tsaXN0IGluIHdoYXQgdG8gaW5jbHVkZToKKworLSBbIF0gSW5jbHVkZSBhIGRldGFp
bGVkIGRlc2NyaXB0aW9uIG9mIHRoZSBidWcgb3Igc3VnZ2VzdGlvbgorLSBbIF0gYHBpcCBsaXN0
YCBvZiB0aGUgdmlydHVhbCBlbnZpcm9ubWVudCB5b3UgYXJlIHVzaW5nCistIFsgXSBweS50ZXN0
IGFuZCBvcGVyYXRpbmcgc3lzdGVtIHZlcnNpb25zCistIFsgXSBNaW5pbWFsIGV4YW1wbGUgaWYg
cG9zc2libGUKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9w
eXRlc3QvLmdpdGh1Yi9QVUxMX1JFUVVFU1RfVEVNUExBVEUubWQgYi9XZWJEcml2ZXJUZXN0cy9p
bXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0Ly5naXRodWIvUFVMTF9SRVFVRVNUX1RFTVBMQVRFLm1k
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kMDllZGNlNDNkMwotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3Qv
LmdpdGh1Yi9QVUxMX1JFUVVFU1RfVEVNUExBVEUubWQKQEAgLTAsMCArMSw4IEBACitUaGFua3Mg
Zm9yIHN1Ym1pdHRpbmcgYSBQUiwgeW91ciBjb250cmlidXRpb24gaXMgcmVhbGx5IGFwcHJlY2lh
dGVkIQorCitIZXJlJ3MgYSBxdWljayBjaGVja2xpc3QgdGhhdCBzaG91bGQgYmUgcHJlc2VudCBp
biBQUnM6CisKKy0gWyBdIFRhcmdldDogZm9yIGJ1ZyBvciBkb2MgZml4ZXMsIHRhcmdldCBgbWFz
dGVyYDsgZm9yIG5ldyBmZWF0dXJlcywgdGFyZ2V0IGBmZWF0dXJlc2AKKy0gWyBdIE1ha2Ugc3Vy
ZSB0byBpbmNsdWRlIG9uZSBvciBtb3JlIHRlc3RzIGZvciB5b3VyIGNoYW5nZQorLSBbIF0gQWRk
IHlvdXJzZWxmIHRvIGBBVVRIT1JTYAorLSBbIF0gQWRkIGEgbmV3IGVudHJ5IHRvIHRoZSBgQ0hB
TkdFTE9HYCAoY2hvb3NlIGFueSBvcGVuIHBvc2l0aW9uIHRvIGF2b2lkIG1lcmdlIGNvbmZsaWN0
cyB3aXRoIG90aGVyIFBScykgCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93
M2MvdG9vbHMvcHl0ZXN0Ly5naXRpZ25vcmUgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mv
dG9vbHMvcHl0ZXN0Ly5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLmU0MzU1Yjg1OWNjCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1w
b3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMzQgQEAKKyMgQXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgYGhnaW1wb3J0c3ZuYAorLnN2bgorLmhnc3ZuCisKKyMg
SWdub3JlIGxvY2FsIHZpcnR1YWxlbnZzCitsaWIvCitiaW4vCitpbmNsdWRlLworLlB5dGhvbi8K
KworIyBUaGVzZSBsaW5lcyBhcmUgc3VnZ2VzdGVkIGFjY29yZGluZyB0byB0aGUgc3ZuOmlnbm9y
ZSBwcm9wZXJ0eQorIyBGZWVsIGZyZWUgdG8gZW5hYmxlIHRoZW0gYnkgdW5jb21tZW50aW5nIHRo
ZW0KKyoucHljCisqLnB5bworKi5zd3AKKyouY2xhc3MKKyoub3JpZworKn4KKworLmVnZ3MvCisK
K2RvYy8qL19idWlsZAorYnVpbGQvCitkaXN0LworKi5lZ2ctaW5mbworaXNzdWUvCitlbnYvCisu
ZW52LworM3JkcGFydHkvCisudG94CisuY2FjaGUKKy5jb3ZlcmFnZQorLnJvcGVwcm9qZWN0Cisu
aWRlYQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVz
dC8udHJhdmlzLnltbCBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3Qv
LnRyYXZpcy55bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjNhOGYz
NmU5NWY4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rv
b2xzL3B5dGVzdC8udHJhdmlzLnltbApAQCAtMCwwICsxLDQwIEBACitzdWRvOiBmYWxzZQorbGFu
Z3VhZ2U6IHB5dGhvbgorcHl0aG9uOgorICAgIC0gJzMuNScKKyMgY29tbWFuZCB0byBpbnN0YWxs
IGRlcGVuZGVuY2llcworaW5zdGFsbDogInBpcCBpbnN0YWxsIC1VIHRveCIKKyMgIyBjb21tYW5k
IHRvIHJ1biB0ZXN0cworZW52OgorICBtYXRyaXg6CisgICAgIyBjb3ZlcmFsbHMgaXMgbm90IGxp
c3RlZCBpbiB0b3gncyBlbnZsaXN0LCBidXQgc2hvdWxkIHJ1biBpbiB0cmF2aXMKKyAgICAtIFRF
U1RFTlY9Y292ZXJhbGxzCisgICAgIyBub3RlOiBwbGVhc2UgdXNlICJ0b3ggLS1saXN0ZW52cyIg
dG8gcG9wdWxhdGUgdGhlIGJ1aWxkIG1hdHJpeCBiZWxvdworICAgIC0gVEVTVEVOVj1saW50aW5n
CisgICAgLSBURVNURU5WPXB5MjYKKyAgICAtIFRFU1RFTlY9cHkyNworICAgIC0gVEVTVEVOVj1w
eTMzCisgICAgLSBURVNURU5WPXB5MzQKKyAgICAtIFRFU1RFTlY9cHkzNQorICAgIC0gVEVTVEVO
Vj1weXB5CisgICAgLSBURVNURU5WPXB5MjctcGV4cGVjdAorICAgIC0gVEVTVEVOVj1weTI3LXhk
aXN0CisgICAgLSBURVNURU5WPXB5MjctdHJpYWwKKyAgICAtIFRFU1RFTlY9cHkzNS1wZXhwZWN0
CisgICAgLSBURVNURU5WPXB5MzUteGRpc3QKKyAgICAtIFRFU1RFTlY9cHkzNS10cmlhbAorICAg
IC0gVEVTVEVOVj1weTI3LW5vYnl0ZQorICAgIC0gVEVTVEVOVj1kb2N0ZXN0aW5nCisgICAgLSBU
RVNURU5WPXB5MjctY3hmcmVlemUKKworc2NyaXB0OiB0b3ggLS1yZWNyZWF0ZSAtZSAkVEVTVEVO
VgorCitub3RpZmljYXRpb25zOgorICBpcmM6CisgICAgY2hhbm5lbHM6CisgICAgICAtICJjaGF0
LmZyZWVub2RlLm5ldCNweXRlc3QiCisgICAgb25fc3VjY2VzczogY2hhbmdlCisgICAgb25fZmFp
bHVyZTogY2hhbmdlCisgICAgc2tpcF9qb2luOiB0cnVlCisgIGVtYWlsOgorICAgIC0gcHl0ZXN0
LWNvbW1pdEBweXRob24ub3JnCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93
M2MvdG9vbHMvcHl0ZXN0L0FVVEhPUlMgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9v
bHMvcHl0ZXN0L0FVVEhPUlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LmRmYzBhNTQyZWM1Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQv
dzNjL3Rvb2xzL3B5dGVzdC9BVVRIT1JTCkBAIC0wLDAgKzEsODcgQEAKK0hvbGdlciBLcmVrZWws
IGhvbGdlciBhdCBtZXJsaW51eCBldQorbWVybGludXggR21iSCwgR2VybWFueSwgb2ZmaWNlIGF0
IG1lcmxpbnV4IGV1CisKK0NvbnRyaWJ1dG9ycyBpbmNsdWRlOjoKKworQWJoaWplZXQgS2FzdXJk
ZQorQW5hdG9seSBCdWJlbmtvZmYKK0FuZHJlYXMgWmVpZGxlcgorQW5keSBGcmVlbGFuZAorQW50
aG9uIHZhbiBkZXIgTmV1dAorQXJtaW4gUmlnbworQXJvbiBDdXJ6b24KK0F2aXYgUGFsaXZvZGEK
K0JlbmphbWluIFBldGVyc29uCitCb2IgSXBwb2xpdG8KK0JyaWFuIERvcnNleQorQnJpYW4gT2tr
ZW4KK0JyaWFubmEgTGF1Z2hlcgorQnJ1bm8gT2xpdmVpcmEKK0NhcmwgRnJpZWRyaWNoIEJvbHoK
K0NoYXJsZXMgQ2xvdWQKK0NocmlzIExhbWIKK0NocmlzdGlhbiBUaGV1bmVydAorQ2hyaXN0aWFu
IFRpc21lcgorQ2hyaXN0b3BoZXIgR2lsbGluZworRGFuaWVsIEdyYW5hCitEYW5pZWwgSGFobGVy
CitEYW5pZWwgTnVyaQorRGF2ZSBIdW50CitEYXZpZCBNb2hyCitEYXZpZCBWaWVycmEKK0VkaXNv
biBHdXN0YXZvIE11ZW56CitFZHVhcmRvIFNjaGV0dGlubworRW5kcmUgR2FsYWN6aQorRWxpemF2
ZXRhIFNoYXNoa292YQorRXJpYyBIdW5zYmVyZ2VyCitFcmljIFNpZWdlcm1hbgorRXJpayBNLiBC
cmF5CitGbG9yaWFuIEJydWhpbgorRmxvcmlzIEJydXlub29naGUKK0dhYnJpZWwgUmVpcworR2Vv
cmd5IER5dWxkaW4KK0dyYWhhbSBIb3JsZXIKK0dyaWcgR2hlb3JnaGl1CitHdWlkbyBXZXNkb3Jw
CitIYXJhbGQgQXJtaW4gTWFzc2EKK0lhbiBCaWNraW5nCitKYWFwIEJyb2VraHVpemVuCitKYW4g
QmFsc3RlcgorSmFubmUgVmFuaGFsYQorSmFzb24gUi4gQ29vbWJzCitKb3NodWEgQnJvbnNvbgor
SnVya28gR29zcG9kbmV0acSHCitLYXRhcnp5bmEgSmFjaGltCitLZXZpbiBDb3gKK0xlZSBLYW1l
bnRza3kKK0x1a2FzIEJlZG5hcgorTWFjaWVrIEZpamFsa293c2tpCitNYWhvCitNYXJjIFNjaGxh
aWNoCitNYXJrIEFicmFtb3dpdHoKK01hcmt1cyBVbnRlcndhZGl0emVyCitNYXJ0aWpuIEZhYXNz
ZW4KK01hdHQgQmFjaG1hbm4KK01pY2hhZWwgQXF1aWxpbmEKK01pY2hhZWwgQmlydHdlbGwKK01p
Y2hhZWwgRHJvZXR0Ym9vbQorTmljb2xhcyBEZWxhYnkKK1BpZXRlciBNdWxkZXIKK1Bpb3RyIEJh
bmFzemtpZXdpY3oKK1B1bnlhc2hsb2thIEJpc3dhbAorUmFsZiBTY2htaXR0CitSYXBoYWVsIFBp
ZXJ6aW5hCitSb25ueSBQZmFubnNjaG1pZHQKK1Jvc3MgTGF3bGV5CitSeWFuIFdvb2RlbgorU2Ft
dWVsZSBQZWRyb25pCitUb20gVmluZXIKK1RyZXZvciBCZWtvbGF5CitXb3V0ZXIgdmFuIEFja29v
eQorRGF2aWQgRMOtYXotQmFycXVlcm8KK0VyaWMgSHVuc2JlcmdlcgorU2ltb24gR29taXplbGoK
K1J1c3NlbCBXaW5kZXIKK0JlbiBXZWJiCitBbGV4ZWkgS296bGVub2sKK0NhbCBMZWVtaW5nCmRp
ZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L0NIQU5H
RUxPRy5yc3QgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L0NIQU5H
RUxPRy5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmYxOGY2NDZm
MDA4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xz
L3B5dGVzdC9DSEFOR0VMT0cucnN0CkBAIC0wLDAgKzEsMjU4NiBAQAorMi45LjEKKz09PT09CisK
KyoqQnVnIEZpeGVzKioKKworKiBJbXByb3ZlIGVycm9yIG1lc3NhZ2Ugd2hlbiBhIHBsdWdpbiBm
YWlscyB0byBsb2FkLgorICBUaGFua3MgYEBuaWNvZGRlbXVzYF8gZm9yIHRoZSBQUi4KKworKiBG
aXggKGAjMTE3OCA8aHR0cHM6Ly9naXRodWIuY29tL3B5dGVzdC1kZXYvcHl0ZXN0L2lzc3Vlcy8x
MTc4PmBfKToKKyAgYGBweXRlc3QuZmFpbGBgIHdpdGggbm9uLWFzY2lpIGNoYXJhY3RlcnMgcmFp
c2VzIGFuIGludGVybmFsIHB5dGVzdCBlcnJvci4KKyAgVGhhbmtzIGBAbmljb2RkZW11c2BfIGZv
ciB0aGUgUFIuCisKKyogRml4IChgIzQ2OWBfKToganVuaXQgcGFyc2VzIHJlcG9ydC5ub2RlaWQg
aW5jb3JyZWN0bHksIHdoZW4gcGFyYW1zIElEcworICBjb250YWluIGBgOjpgYC4gVGhhbmtzIGBA
dG9tdmluZXJgXyBmb3IgdGhlIFBSIChgIzE0MzFgXykuCisKKyogRml4IChgIzU3OCA8aHR0cHM6
Ly9naXRodWIuY29tL3B5dGVzdC1kZXYvcHl0ZXN0L2lzc3Vlcy81Nzg+YF8pOiBTeW50YXhFcnJv
cnMKKyAgY29udGFpbmluZyBub24tYXNjaWkgbGluZXMgYXQgdGhlIHBvaW50IG9mIGZhaWx1cmUg
Z2VuZXJhdGVkIGFuIGludGVybmFsCisgIHB5LnRlc3QgZXJyb3IuCisgIFRoYW5rcyBgQGFzb3R0
aWxlYF8gZm9yIHRoZSByZXBvcnQgYW5kIGBAbmljb2RkZW11c2BfIGZvciB0aGUgUFIuCisKKyog
Rml4IChgIzE0MzdgXyk6IFdoZW4gcGFzc2luZyBpbiBhIGJ5dGVzdHJpbmcgcmVnZXggcGF0dGVy
biB0byBwYXJhbWV0ZXJpemUKKyAgYXR0ZW1wdCB0byBkZWNvZGUgaXQgYXMgdXRmLTggaWdub3Jp
bmcgZXJyb3JzLgorCisqIEZpeCAoYCM2NDlgXyk6IHBhcmFtZXRyaXplZCB0ZXN0IG5vZGVzIGNh
bm5vdCBiZSBzcGVjaWZpZWQgdG8gcnVuIG9uIHRoZSBjb21tYW5kIGxpbmUuCisKKworLi4gXyMx
NDM3OiBodHRwczovL2dpdGh1Yi5jb20vcHl0ZXN0LWRldi9weXRlc3QvaXNzdWVzLzE0MzcKKy4u
IF8jNDY5OiBodHRwczovL2dpdGh1Yi5jb20vcHl0ZXN0LWRldi9weXRlc3QvaXNzdWVzLzQ2OQor
Li4gXyMxNDMxOiBodHRwczovL2dpdGh1Yi5jb20vcHl0ZXN0LWRldi9weXRlc3QvcHVsbC8xNDMx
CisuLiBfIzY0OTogaHR0cHM6Ly9naXRodWIuY29tL3B5dGVzdC1kZXYvcHl0ZXN0L2lzc3Vlcy82
NDkKKworLi4gX0Bhc290dGlsZTogaHR0cHM6Ly9naXRodWIuY29tL2Fzb3R0aWxlCisKKworMi45
LjAKKz09PT09CisKKyoqTmV3IEZlYXR1cmVzKioKKworKiBOZXcgYGBweXRlc3QubWFyay5za2lw
YGAgbWFyaywgd2hpY2ggdW5jb25kaXRpb25hbGx5IHNraXBzIG1hcmtlZCB0ZXN0cy4KKyAgVGhh
bmtzIGBATWljaGFlbEFxdWlsaW5hYF8gZm9yIHRoZSBjb21wbGV0ZSBQUiAoYCMxMDQwYF8pLgor
CisqIGBgLS1kb2N0ZXN0LWdsb2JgYCBtYXkgbm93IGJlIHBhc3NlZCBtdWx0aXBsZSB0aW1lcyBp
biB0aGUgY29tbWFuZC1saW5lLgorICBUaGFua3MgYEBqYWJgXyBhbmQgYEBuaWNvZGRlbXVzYF8g
Zm9yIHRoZSBQUi4KKworKiBOZXcgYGAtcnBgYCBhbmQgYGAtclBgYCByZXBvcnRpbmcgb3B0aW9u
cyBnaXZlIHRoZSBzdW1tYXJ5IGFuZCBmdWxsIG91dHB1dAorICBvZiBwYXNzaW5nIHRlc3RzLCBy
ZXNwZWN0aXZlbHkuIFRoYW5rcyB0byBgQGNvZGV3YXJyaW9yMGBfIGZvciB0aGUgUFIuCisKKyog
YGBweXRlc3QubWFyay54ZmFpbGBgIG5vdyBoYXMgYSBgYHN0cmljdGBgIG9wdGlvbiwgd2hpY2gg
bWFrZXMgYGBYUEFTU2BgCisgIHRlc3RzIHRvIGZhaWwgdGhlIHRlc3Qgc3VpdGUgKGRlZmF1bHRp
bmcgdG8gYGBGYWxzZWBgKS4gVGhlcmUncyBhbHNvIGEKKyAgYGB4ZmFpbF9zdHJpY3RgYCBpbmkg
b3B0aW9uIHRoYXQgY2FuIGJlIHVzZWQgdG8gY29uZmlndXJlIGl0IHByb2plY3Qtd2lzZS4KKyAg
VGhhbmtzIGBAcmFiYmJpdGBfIGZvciB0aGUgcmVxdWVzdCBhbmQgYEBuaWNvZGRlbXVzYF8gZm9y
IHRoZSBQUiAoYCMxMzU1YF8pLgorCisqIGBgUGFyc2VyLmFkZGluaWBgIG5vdyBzdXBwb3J0cyBv
cHRpb25zIG9mIHR5cGUgYGBib29sYGAuIAorICBUaGFua3MgYEBuaWNvZGRlbXVzYF8gZm9yIHRo
ZSBQUi4KKworKiBOZXcgYGBBTExPV19CWVRFU2BgIGRvY3Rlc3Qgb3B0aW9uLiBUaGlzIHN0cmlw
cyBgYGJgYCBwcmVmaXhlcyBmcm9tIGJ5dGUgc3RyaW5ncworICBpbiBkb2N0ZXN0IG91dHB1dCAo
c2ltaWxhciB0byBgYEFMTE9XX1VOSUNPREVgYCkuCisgIFRoYW5rcyBgQGphcmFjb2BfIGZvciB0
aGUgcmVxdWVzdCBhbmQgYEBuaWNvZGRlbXVzYF8gZm9yIHRoZSBQUiAoYCMxMjg3YF8pLgorCisq
IEdpdmUgYSBoaW50IG9uIGBgS2V5Ym9hcmRJbnRlcnJ1cHRgYCB0byB1c2UgdGhlIGBgLS1mdWxs
dHJhY2VgYCBvcHRpb24gdG8gc2hvdyB0aGUgZXJyb3JzLgorICBGaXhlcyBgIzEzNjZgXy4KKyAg
VGhhbmtzIHRvIGBAaHBrNDJgXyBmb3IgdGhlIHJlcG9ydCBhbmQgYEBSb25ueVBmYW5uc2NobWlk
dGBfIGZvciB0aGUgUFIuCisKKyogQ2F0Y2ggYGBJbmRleEVycm9yYGAgZXhjZXB0aW9ucyB3aGVu
IGdldHRpbmcgZXhjZXB0aW9uIHNvdXJjZSBsb2NhdGlvbi4gCisgIEZpeGVzIGEgcHl0ZXN0IGlu
dGVybmFsIGVycm9yIGZvciBkeW5hbWljYWxseSBnZW5lcmF0ZWQgY29kZSAoZml4dHVyZXMgYW5k
IHRlc3RzKQorICB3aGVyZSBzb3VyY2UgbGluZXMgYXJlIGZha2UgYnkgaW50ZW50aW9uLgorCisq
KkNoYW5nZXMqKgorCisqICoqSW1wb3J0YW50Kio6IGBweS5jb2RlIDxodHRwOi8vcHlsaWIucmVh
ZHRoZWRvY3Mub3JnL2VuL2xhdGVzdC9jb2RlLmh0bWw+YF8gaGFzIGJlZW4KKyAgbWVyZ2VkIGlu
dG8gdGhlIGBgcHl0ZXN0YGAgcmVwb3NpdG9yeSBhcyBgYHB5dGVzdC5fY29kZWBgLiBUaGlzIGRl
Y2lzaW9uIAorICB3YXMgbWFkZSBiZWNhdXNlIGBgcHkuY29kZWBgIGhhZCB2ZXJ5IGZldyB1c2Vz
IG91dHNpZGUgYGBweXRlc3RgYCBhbmQgdGhlIAorICBmYWN0IHRoYXQgaXQgd2FzIGluIGEgZGlm
ZmVyZW50IHJlcG9zaXRvcnkgbWFkZSBpdCBkaWZmaWN1bHQgdG8gZml4IGJ1Z3Mgb24gCisgIGl0
cyBjb2RlIGluIGEgdGltZWx5IG1hbm5lci4gVGhlIHRlYW0gaG9wZXMgd2l0aCB0aGlzIHRvIGJl
IGFibGUgdG8gYmV0dGVyCisgIHJlZmFjdG9yIG91dCBhbmQgaW1wcm92ZSB0aGF0IGNvZGUuCisg
IFRoaXMgY2hhbmdlIHNob3VsZG4ndCBhZmZlY3QgdXNlcnMsIGJ1dCBpdCBpcyB1c2VmdWwgdG8g
bGV0IHVzZXJzIGF3YXJlCisgIGlmIHRoZXkgZW5jb3VudGVyIGFueSBzdHJhbmdlIGJlaGF2aW9y
LgorICAKKyAgS2VlcCBpbiBtaW5kIHRoYXQgdGhlIGNvZGUgZm9yIGBgcHl0ZXN0Ll9jb2RlYGAg
aXMgKipwcml2YXRlKiogYW5kIAorICAqKmV4cGVyaW1lbnRhbCoqLCBzbyB5b3UgZGVmaW5pdGVs
eSBzaG91bGQgbm90IGltcG9ydCBpdCBleHBsaWNpdGx5IQorCisgIFBsZWFzZSBub3RlIHRoYXQg
dGhlIG9yaWdpbmFsIGBgcHkuY29kZWBgIGlzIHN0aWxsIGF2YWlsYWJsZSBpbiAKKyAgYHB5bGli
IDxodHRwOi8vcHlsaWIucmVhZHRoZWRvY3Mub3JnPmBfLgorCisqIGBgcHl0ZXN0X2VudGVyX3Bk
YmBgIG5vdyBvcHRpb25hbGx5IHJlY2VpdmVzIHRoZSBweXRlc3QgY29uZmlnIG9iamVjdC4KKyAg
VGhhbmtzIGBAbmljb2RkZW11c2BfIGZvciB0aGUgUFIuCisKKyogUmVtb3ZlZCBjb2RlIGFuZCBk
b2N1bWVudGF0aW9uIGZvciBQeXRob24gMi41IG9yIGxvd2VyIHZlcnNpb25zLAorICBpbmNsdWRp
bmcgcmVtb3ZhbCBvZiB0aGUgb2Jzb2xldGUgYGBfcHl0ZXN0LmFzc2VydGlvbi5vbGRpbnRlcnBy
ZXRgYCBtb2R1bGUuCisgIFRoYW5rcyBgQG5pY29kZGVtdXNgXyBmb3IgdGhlIFBSIChgIzEyMjZg
XykuCisKKyogQ29tcGFyaXNvbnMgbm93IGFsd2F5cyBzaG93IHVwIGluIGZ1bGwgd2hlbiBgYENJ
YGAgb3IgYGBCVUlMRF9OVU1CRVJgYCBpcworICBmb3VuZCBpbiB0aGUgZW52aXJvbm1lbnQsIGV2
ZW4gd2hlbiBgYC12dmBgIGlzbid0IHVzZWQuCisgIFRoYW5rcyBgQFRoZS1Db21waWxlcmBfIGZv
ciB0aGUgUFIuCisKKyogYGAtLWxmYGAgYW5kIGBgLS1mZmBgIG5vdyBzdXBwb3J0IGxvbmcgbmFt
ZXM6IGBgLS1sYXN0LWZhaWxlZGBgIGFuZAorICBgYC0tZmFpbGVkLWZpcnN0YGAgcmVzcGVjdGl2
ZWx5LgorICBUaGFua3MgYEBNaWNoYWVsQXF1aWxpbmFgXyBmb3IgdGhlIFBSLgorCisqIEFkZGVk
IGV4cGVjdGVkIGV4Y2VwdGlvbnMgdG8gYGBweXRlc3QucmFpc2VzYGAgZmFpbCBtZXNzYWdlLgor
CisqIENvbGxlY3Rpb24gb25seSBkaXNwbGF5cyBwcm9ncmVzcyAoImNvbGxlY3RpbmcgWCBpdGVt
cyIpIHdoZW4gaW4gYSB0ZXJtaW5hbC4KKyAgVGhpcyBhdm9pZHMgY2x1dHRlcmluZyB0aGUgb3V0
cHV0IHdoZW4gdXNpbmcgYGAtLWNvbG9yPXllc2BgIHRvIG9idGFpbgorICBjb2xvcnMgaW4gQ0kg
aW50ZWdyYXRpb25zIHN5c3RlbXMgKGAjMTM5N2BfKS4KKworKipCdWcgRml4ZXMqKgorCisqIFRo
ZSBgYC1zYGAgYW5kIGBgLWNgYCBvcHRpb25zIHNob3VsZCBub3cgd29yayB1bmRlciBgYHhkaXN0
YGA7CisgIGBgQ29uZmlnLmZyb21kaWN0YXJnc2BgIG5vdyByZXByZXNlbnRzIGl0cyBpbnB1dCBt
dWNoIG1vcmUgZmFpdGhmdWxseS4KKyAgVGhhbmtzIHRvIGBAYnVrem9yYF8gZm9yIHRoZSBjb21w
bGV0ZSBQUiAoYCM2ODBgXykuCisKKyogRml4IChgIzEyOTBgXyk6IHN1cHBvcnQgUHl0aG9uIDMu
NSdzIGBgQGBgIG9wZXJhdG9yIGluIGFzc2VydGlvbiByZXdyaXRpbmcuCisgIFRoYW5rcyBgQFNo
aW5rZW5qb2VgXyBmb3IgcmVwb3J0IHdpdGggdGVzdCBjYXNlIGFuZCBgQHRvbXZpbmVyYF8gZm9y
IHRoZSBQUi4KKworKiBGaXggZm9ybWF0dGluZyB1dGYtOCBleHBsYW5hdGlvbiBtZXNzYWdlcyAo
YCMxMzc5YF8pLgorICBUaGFua3MgYEBiaWVybmBfIGZvciB0aGUgUFIuCisKKyogRml4IGB0cmFj
ZWJhY2sgc3R5bGUgZG9jc2BfIHRvIGRlc2NyaWJlIGFsbCBvZiB0aGUgYXZhaWxhYmxlIG9wdGlv
bnMKKyAgKGF1dG8vbG9uZy9zaG9ydC9saW5lL25hdGl2ZS9ubyksIHdpdGggYGF1dG9gIGJlaW5n
IHRoZSBkZWZhdWx0IHNpbmNlIHYyLjYuCisgIFRoYW5rcyBgQGhhY2tlYnJvdGBfIGZvciB0aGUg
UFIuCisKKyogRml4IChgIzE0MjJgXyk6IGp1bml0IHJlY29yZF94bWxfcHJvcGVydHkgZG9lc24n
dCBhbGxvdyBtdWx0aXBsZSByZWNvcmRzCisgIHdpdGggc2FtZSBuYW1lLgorCisuLiBfYHRyYWNl
YmFjayBzdHlsZSBkb2NzYDogaHR0cHM6Ly9weXRlc3Qub3JnL2xhdGVzdC91c2FnZS5odG1sI21v
ZGlmeWluZy1weXRob24tdHJhY2ViYWNrLXByaW50aW5nCisKKy4uIF8jMTQyMjogaHR0cHM6Ly9n
aXRodWIuY29tL3B5dGVzdC1kZXYvcHl0ZXN0L2lzc3Vlcy8xNDIyCisuLiBfIzEzNzk6IGh0dHBz
Oi8vZ2l0aHViLmNvbS9weXRlc3QtZGV2L3B5dGVzdC9pc3N1ZXMvMTM3OQorLi4gXyMxMzY2OiBo
dHRwczovL2dpdGh1Yi5jb20vcHl0ZXN0LWRldi9weXRlc3QvaXNzdWVzLzEzNjYKKy4uIF8jMTA0
MDogaHR0cHM6Ly9naXRodWIuY29tL3B5dGVzdC1kZXYvcHl0ZXN0L3B1bGwvMTA0MAorLi4gXyM2
ODA6IGh0dHBzOi8vZ2l0aHViLmNvbS9weXRlc3QtZGV2L3B5dGVzdC9pc3N1ZXMvNjgwCisuLiBf
IzEyODc6IGh0dHBzOi8vZ2l0aHViLmNvbS9weXRlc3QtZGV2L3B5dGVzdC9wdWxsLzEyODcKKy4u
IF8jMTIyNjogaHR0cHM6Ly9naXRodWIuY29tL3B5dGVzdC1kZXYvcHl0ZXN0L3B1bGwvMTIyNgor
Li4gXyMxMjkwOiBodHRwczovL2dpdGh1Yi5jb20vcHl0ZXN0LWRldi9weXRlc3QvcHVsbC8xMjkw
CisuLiBfIzEzNTU6IGh0dHBzOi8vZ2l0aHViLmNvbS9weXRlc3QtZGV2L3B5dGVzdC9wdWxsLzEz
NTUKKy4uIF8jMTM5NzogaHR0cHM6Ly9naXRodWIuY29tL3B5dGVzdC1kZXYvcHl0ZXN0L2lzc3Vl
cy8xMzk3CisuLiBfQGJpZXJuOiBodHRwczovL2dpdGh1Yi5jb20vYmllcm4KKy4uIF9ATWljaGFl
bEFxdWlsaW5hOiBodHRwczovL2dpdGh1Yi5jb20vTWljaGFlbEFxdWlsaW5hCisuLiBfQGJ1a3pv
cjogaHR0cHM6Ly9naXRodWIuY29tL2J1a3pvcgorLi4gX0BocGs0MjogaHR0cHM6Ly9naXRodWIu
Y29tL2hwazQyCisuLiBfQG5pY29kZGVtdXM6IGh0dHBzOi8vZ2l0aHViLmNvbS9uaWNvZGRlbXVz
CisuLiBfQGphYjogaHR0cHM6Ly9naXRodWIuY29tL2phYgorLi4gX0Bjb2Rld2FycmlvcjA6IGh0
dHBzOi8vZ2l0aHViLmNvbS9jb2Rld2FycmlvcjAKKy4uIF9AamFyYWNvOiBodHRwczovL2dpdGh1
Yi5jb20vamFyYWNvCisuLiBfQFRoZS1Db21waWxlcjogaHR0cHM6Ly9naXRodWIuY29tL1RoZS1D
b21waWxlcgorLi4gX0BTaGlua2Vuam9lOiBodHRwczovL2dpdGh1Yi5jb20vU2hpbmtlbmpvZQor
Li4gX0B0b212aW5lcjogaHR0cHM6Ly9naXRodWIuY29tL3RvbXZpbmVyCisuLiBfQFJvbm55UGZh
bm5zY2htaWR0OiBodHRwczovL2dpdGh1Yi5jb20vUm9ubnlQZmFubnNjaG1pZHQKKy4uIF9AcmFi
YmJpdDogaHR0cHM6Ly9naXRodWIuY29tL3JhYmJiaXQKKy4uIF9AaGFja2Vicm90OiBodHRwczov
L2dpdGh1Yi5jb20vaGFja2Vicm90CisKKzIuOC43Cis9PT09PQorCistIGZpeCAjMTMzODogdXNl
IHByZWRpY3RhYmxlIG9iamVjdCByZXNvbHV0aW9uIGZvciBtb25rZXlwYXRjaAorCisyLjguNgor
PT09PT0KKworLSBmaXggIzEyNTk6IGFsbG93IGZvciBkb3VibGUgbm9kZWlkcyBpbiBqdW5pdHht
bCwKKyAgdGhpcyB3YXMgYSByZWdyZXNzaW9uIGZhaWxpbmcgcGx1Z2lucyBjb21iaW5hdGlvbnMK
KyAgbGlrZSBweXRlc3QtcGVwOCArIHB5dGVzdC1mbGFrZXMKKworLSBXb3JrYXJvdW5kIGZvciBl
eGNlcHRpb24gdGhhdCBvY2N1cnMgaW4gcHlyZWFkbGluZSB3aGVuIHVzaW5nCisgIGBgLS1wZGJg
YCB3aXRoIHN0YW5kYXJkIEkvTyBjYXB0dXJlIGVuYWJsZWQuCisgIFRoYW5rcyBFcmlrIE0uIEJy
YXkgZm9yIHRoZSBQUi4KKworLSBmaXggIzkwMDogQmV0dGVyIGVycm9yIG1lc3NhZ2UgaW4gY2Fz
ZSB0aGUgdGFyZ2V0IG9mIGEgYGBtb25rZXlwYXRjaGBgIGNhbGwKKyAgcmFpc2VzIGFuIGBgSW1w
b3J0RXJyb3JgYC4KKworLSBmaXggIzEyOTI6IG1vbmtleXBhdGNoIGNhbGxzIChzZXRhdHRyLCBz
ZXRlbnYsIGV0Yy4pIGFyZSBub3cgTygxKS4KKyAgVGhhbmtzIERhdmlkIFIuIE1hY0l2ZXIgZm9y
IHRoZSByZXBvcnQgYW5kIEJydW5vIE9saXZlaXJhIGZvciB0aGUgUFIuCisKKy0gZml4ICMxMjIz
OiBjYXB0dXJlZCBzdGRvdXQgYW5kIHN0ZGVyciBhcmUgbm93IHByb3Blcmx5IGRpc3BsYXllZCBi
ZWZvcmUgCisgIGVudGVyaW5nIHBkYiB3aGVuIGBgLS1wZGJgYCBpcyB1c2VkIGluc3RlYWQgb2Yg
YmVpbmcgdGhyb3duIGF3YXkuCisgIFRoYW5rcyBDYWwgTGVlbWluZyBmb3IgdGhlIFBSLgorCist
IGZpeCAjMTMwNTogcHl0ZXN0IHdhcm5pbmdzIGVtaXR0ZWQgZHVyaW5nIGBgcHl0ZXN0X3Rlcm1p
bmFsX3N1bW1hcnlgYCBhcmUgbm93CisgIHByb3Blcmx5IGRpc3BsYXllZC4KKyAgVGhhbmtzIElv
bmVsIE1hcmllcyBDcmlzdGlhbiBmb3IgdGhlIHJlcG9ydCBhbmQgQnJ1bm8gT2xpdmVpcmEgZm9y
IHRoZSBQUi4KKworLSBmaXggIzYyODogZml4ZWQgaW50ZXJuYWwgVW5pY29kZURlY29kZUVycm9y
IHdoZW4gZG9jdGVzdHMgY29udGFpbiB1bmljb2RlLgorICBUaGFua3MgSmFzb24gUi4gQ29vbWJz
IGZvciB0aGUgcmVwb3J0IGFuZCBCcnVubyBPbGl2ZWlyYSBmb3IgdGhlIFBSLgorCistIGZpeCAj
MTMzNDogQWRkIGNhcHR1cmVkIHN0ZG91dCB0byBqVW5pdCBYTUwgcmVwb3J0IG9uIHNldHVwIGVy
cm9yLgorICBUaGFua3MgR2Vvcmd5IER5dWxkaW4gZm9yIHRoZSBQUi4KKworCisyLjguNQorPT09
PT0KKworLSBmaXggIzEyNDM6IGZpeGVkIGlzc3VlIHdoZXJlIGNsYXNzIGF0dHJpYnV0ZXMgaW5q
ZWN0ZWQgZHVyaW5nIGNvbGxlY3Rpb24gY291bGQgYnJlYWsgcHl0ZXN0LgorICBQUiBieSBBbGV4
ZWkgS296bGVub2ssIHRoYW5rcyBSb25ueSBQZmFubnNjaG1pZHQgYW5kIEJydW5vIE9saXZlaXJh
IGZvciB0aGUgcmV2aWV3IGFuZCBoZWxwLgorCistIGZpeCAjMTA3NDogcHJlY29tcHV0ZSBqdW5p
dHhtbCBjaHVua3MgaW5zdGVhZCBvZiBzdG9yaW5nIHRoZSB3aG9sZSB0cmVlIGluIG9iamVjdHMK
KyAgVGhhbmtzIEJydW5vIE9saXZlaXJhIGZvciB0aGUgcmVwb3J0IGFuZCBSb25ueSBQZmFubnNj
aG1pZHQgZm9yIHRoZSBQUgorCistIGZpeCAjMTIzODogZml4IGBgcHl0ZXN0LmRlcHJlY2F0ZWRf
Y2FsbCgpYGAgcmVjZWl2aW5nIG11bHRpcGxlIGFyZ3VtZW50cworICAoUmVncmVzc2lvbiBpbnRy
b2R1Y2VkIGluIDIuOC40KS4gVGhhbmtzIEFsZXggR2F5bm9yIGZvciB0aGUgcmVwb3J0IGFuZAor
ICBCcnVubyBPbGl2ZWlyYSBmb3IgdGhlIFBSLgorCisKKzIuOC40Cis9PT09PQorCistIGZpeCAj
MTE5MDogYGBkZXByZWNhdGVkX2NhbGwoKWBgIG5vdyB3b3JrcyB3aGVuIHRoZSBkZXByZWNhdGVk
CisgIGZ1bmN0aW9uIGhhcyBiZWVuIGFscmVhZHkgY2FsbGVkIGJ5IGFub3RoZXIgdGVzdCBpbiB0
aGUgc2FtZQorICBtb2R1bGUuIFRoYW5rcyBNaWtoYWlsIENoZXJueWtoIGZvciB0aGUgcmVwb3J0
IGFuZCBCcnVubyBPbGl2ZWlyYSBmb3IgdGhlCisgIFBSLgorCistIGZpeCAjMTE5ODogYGAtLXBh
c3RlYmluYGAgb3B0aW9uIG5vdyB3b3JrcyBvbiBQeXRob24gMy4gVGhhbmtzCisgIE1laGR5IEto
b3Nobm9vZHkgZm9yIHRoZSBQUi4KKworLSBmaXggIzEyMTk6IGBgLS1wYXN0ZWJpbmBgIG5vdyB3
b3JrcyBjb3JyZWN0bHkgd2hlbiBjYXB0dXJlZCBvdXRwdXQgY29udGFpbnMKKyAgbm9uLWFzY2lp
IGNoYXJhY3RlcnMuIFRoYW5rcyBCcnVubyBPbGl2ZWlyYSBmb3IgdGhlIFBSLgorCistIGZpeCAj
MTIwNDogYW5vdGhlciBlcnJvciB3aGVuIGNvbGxlY3Rpbmcgd2l0aCBhIG5hc3R5IF9fZ2V0YXR0
cl9fKCkuCisgIFRoYW5rcyBGbG9yaWFuIEJydWhpbiBmb3IgdGhlIFBSLgorCistIGZpeCB0aGUg
c3VtbWFyeSBwcmludGVkIHdoZW4gbm8gdGVzdHMgZGlkIHJ1bi4KKyAgVGhhbmtzIEZsb3JpYW4g
QnJ1aGluIGZvciB0aGUgUFIuCistIGZpeCAjMTE4NSAtIGVuc3VyZSBNQU5JRkVTVC5pbiBleGFj
dGx5IG1hdGNoZXMgd2hhdCBzaG91bGQgZ28gdG8gYSBzZGlzdAorCistIGEgbnVtYmVyIG9mIGRv
Y3VtZW50YXRpb24gbW9kZXJuaXphdGlvbnMgd3J0IGdvb2QgcHJhY3RpY2VzLgorICBUaGFua3Mg
QnJ1bm8gT2xpdmVpcmEgZm9yIHRoZSBQUi4KKworMi44LjMKKz09PT09CisKKy0gZml4ICMxMTY5
OiBhZGQgX19uYW1lX18gYXR0cmlidXRlIHRvIHRlc3RjYXNlcyBpbiBUZXN0Q2FzZUZ1bmN0aW9u
IHRvCisgIHN1cHBvcnQgdGhlIEB1bml0dGVzdC5za2lwIGRlY29yYXRvciBvbiBmdW5jdGlvbnMg
YW5kIG1ldGhvZHMuCisgIFRoYW5rcyBMZWUgS2FtZW50c2t5IGZvciB0aGUgUFIuCisKKy0gZml4
ICMxMDM1OiBjb2xsZWN0aW5nIHRlc3RzIGlmIHRlc3QgbW9kdWxlIGxldmVsIG9iaiBoYXMgX19n
ZXRhdHRyX18oKS4KKyAgVGhhbmtzIFN1b3IgZm9yIHRoZSByZXBvcnQgYW5kIEJydW5vIE9saXZl
aXJhIC8gVG9tIFZpbmVyIGZvciB0aGUgUFIuCisKKy0gZml4ICMzMzE6IGRvbid0IGNvbGxlY3Qg
dGVzdHMgaWYgdGhlaXIgZmFpbHVyZSBjYW5ub3QgYmUgcmVwb3J0ZWQgY29ycmVjdGx5CisgIGUu
Zy4gdGhleSBhcmUgYSBjYWxsYWJsZSBpbnN0YW5jZSBvZiBhIGNsYXNzLgorCistIGZpeCAjMTEz
MzogZml4ZWQgaW50ZXJuYWwgZXJyb3Igd2hlbiBmaWx0ZXJpbmcgdHJhY2ViYWNrcyB3aGVyZSBv
bmUgZW50cnkKKyAgYmVsb25ncyB0byBhIGZpbGUgd2hpY2ggaXMgbm8gbG9uZ2VyIGF2YWlsYWJs
ZS4KKyAgVGhhbmtzIEJydW5vIE9saXZlaXJhIGZvciB0aGUgUFIuCisKKy0gZW5oYW5jZW1lbnQg
bWFkZSB0byBoaWdobGlnaHQgaW4gcmVkIHRoZSBuYW1lIG9mIHRoZSBmYWlsaW5nIHRlc3RzIHNv
CisgIHRoZXkgc3RhbmQgb3V0IGluIHRoZSBvdXRwdXQuCisgIFRoYW5rcyBHYWJyaWVsIFJlaXMg
Zm9yIHRoZSBQUi4KKworLSBhZGQgbW9yZSB0YWxrcyB0byB0aGUgZG9jdW1lbnRhdGlvbgorLSBl
eHRlbmQgZG9jdW1lbnRhdGlvbiBvbiB0aGUgLS1pZ25vcmUgY2xpIG9wdGlvbiAKKy0gdXNlIHB5
dGVzdC1ydW5uZXIgZm9yIHNldHVwdG9vbHMgaW50ZWdyYXRpb24gCistIG1pbm9yIGZpeGVzIGZv
ciBpbnRlcmFjdGlvbiB3aXRoIE9TIFggRWwgQ2FwaXRhbgorICBzeXN0ZW0gaW50ZWdyaXR5IHBy
b3RlY3Rpb24gKHRoYW5rcyBGbG9yaWFuKQorCisKKzIuOC4yCis9PT09PQorCistIGZpeCAjMTA4
NTogcHJvcGVyIGhhbmRsaW5nIG9mIGVuY29kaW5nIGVycm9ycyB3aGVuIHBhc3NpbmcgZW5jb2Rl
ZCBieXRlCisgIHN0cmluZ3MgdG8gcHl0ZXN0LnBhcmFtZXRyaXplIGluIFB5dGhvbiAyLgorICBU
aGFua3MgVGhlbWFud2l0aG91dGFwbGFuIGZvciB0aGUgcmVwb3J0IGFuZCBCcnVubyBPbGl2ZWly
YSBmb3IgdGhlIFBSLgorCistIGZpeCAjMTA4NzogaGFuZGxpbmcgU3lzdGVtRXJyb3Igd2hlbiBw
YXNzaW5nIGVtcHR5IGJ5dGUgc3RyaW5ncyB0bworICBweXRlc3QucGFyYW1ldHJpemUgaW4gUHl0
aG9uIDMuCisgIFRoYW5rcyBQYXVsIEtlaHJlciBmb3IgdGhlIHJlcG9ydCBhbmQgQnJ1bm8gT2xp
dmVpcmEgZm9yIHRoZSBQUi4KKworLSBmaXggIzk5NTogZml4ZWQgaW50ZXJuYWwgZXJyb3Igd2hl
biBmaWx0ZXJpbmcgdHJhY2ViYWNrcyB3aGVyZSBvbmUgZW50cnkKKyAgd2FzIGdlbmVyYXRlZCBi
eSBhbiBleGVjKCkgc3RhdGVtZW50LgorICBUaGFua3MgRGFuaWVsIEhhaGxlciwgQXNobGV5IEMg
U3RyYXcsIFBoaWxpcHBlIEdhdXRoaWVyIGFuZCBQYXZlbCBTYXZjaGVua28KKyAgZm9yIGNvbnRy
aWJ1dGluZyBhbmQgQnJ1bm8gT2xpdmVpcmEgZm9yIHRoZSBQUi4KKworLSBmaXggIzExMDAgYW5k
ICMxMDU3OiBlcnJvcnMgd2hlbiB1c2luZyBhdXRvdXNlIGZpeHR1cmVzIGFuZCBkb2N0ZXN0IG1v
ZHVsZXMuCisgIFRoYW5rcyBTZXJnZXkgQiBLaXJwaWNoZXYgYW5kIFZpdGFsIEt1ZHplbGthIGZv
ciBjb250cmlidXRpbmcgYW5kIEJydW5vCisgIE9saXZlaXJhIGZvciB0aGUgUFIuCisKKzIuOC4x
Cis9PT09PQorCistIGZpeCAjMTAzNDogQWRkIG1pc3Npbmcgbm9kZWlkIG9uIHB5dGVzdF9sb2d3
YXJuaW5nIGNhbGwgaW4KKyAgYWRkaG9vay4gIFRoYW5rcyBTaW1vbiBHb21pemVsaiBmb3IgdGhl
IFBSLgorCistICdkZXByZWNhdGVkX2NhbGwnIGlzIG5vdyBvbmx5IHNhdGlzZmllZCB3aXRoIGEg
RGVwcmVjYXRpb25XYXJuaW5nIG9yCisgIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcuIEJlZm9y
ZSAyLjguMCwgaXQgYWNjZXB0ZWQgYW55IHdhcm5pbmcsIGFuZCAyLjguMAorICBtYWRlIGl0IGFj
Y2VwdCBvbmx5IERlcHJlY2F0aW9uV2FybmluZyAoYnV0IG5vdCBQZW5kaW5nRGVwcmVjYXRpb25X
YXJuaW5nKS4KKyAgVGhhbmtzIEFsZXggR2F5bm9yIGZvciB0aGUgaXNzdWUgYW5kIEVyaWMgSHVu
c2JlcmdlciBmb3IgdGhlIFBSLgorCistIGZpeCBpc3N1ZSAjMTA3MzogYXZvaWQgY2FsbGluZyBf
X2dldGF0dHJfXyBvbiBwb3RlbnRpYWwgcGx1Z2luIG9iamVjdHMuCisgIFRoaXMgZml4ZXMgYW4g
aW5jb21wYXRpYmlsaXR5IHdpdGggcHl0ZXN0LWRqYW5nby4gIFRoYW5rcyBBbmRyZWFzIFBlbG1l
LAorICBCcnVubyBPbGl2ZWlyYSBhbmQgUm9ubnkgUGZhbm5zY2htaWR0IGZvciBjb250cmlidXRp
bmcgYW5kIEhvbGdlciBLcmVrZWwKKyAgZm9yIHRoZSBmaXguCisKKy0gRml4IGlzc3VlICM3MDQ6
IGhhbmRsZSB2ZXJzaW9uY29uZmxpY3QgZHVyaW5nIHBsdWdpbiBsb2FkaW5nIG1vcmUKKyAgZ3Jh
Y2VmdWxseS4gIFRoYW5rcyBCcnVubyBPbGl2ZWlyYSBmb3IgdGhlIFBSLgorCistIEZpeCBpc3N1
ZSAjMTA2NDogIiItLWp1bml0eG1sIiByZWdyZXNzaW9uIHdoZW4gdXNlZCB3aXRoIHRoZQorICAi
cHl0ZXN0LXhkaXN0IiBwbHVnaW4sIHdpdGggdGVzdCByZXBvcnRzIGJlaW5nIGFzc2lnbmVkIHRv
IHRoZSB3cm9uZyB0ZXN0cy4KKyAgVGhhbmtzIERhbmllbCBHcnVud2FsZCBmb3IgdGhlIHJlcG9y
dCBhbmQgQnJ1bm8gT2xpdmVpcmEgZm9yIHRoZSBQUi4KKworLSAoZXhwZXJpbWVudGFsKSBhZGFw
dCBtb3JlIFNFTVZFUiBzdHlsZSB2ZXJzaW9uaW5nIGFuZCBjaGFuZ2UgbWVhbmluZyBvZgorICBt
YXN0ZXIgYnJhbmNoIGluIGdpdCByZXBvOiAibWFzdGVyIiBicmFuY2ggbm93IGtlZXBzIHRoZSBi
dWdmaXhlcywgY2hhbmdlcworICBhaW1lZCBmb3IgbWljcm8gcmVsZWFzZXMuICAiZmVhdHVyZXMi
IGJyYW5jaCB3aWxsIG9ubHkgYmUgYmUgcmVsZWFzZWQKKyAgd2l0aCBtaW5vciBvciBtYWpvciBw
eXRlc3QgcmVsZWFzZXMuCisKKy0gRml4IGlzc3VlICM3NjYgYnkgcmVtb3ZpbmcgZG9jdW1lbnRh
dGlvbiByZWZlcmVuY2VzIHRvIGRpc3R1dGlscy4KKyAgVGhhbmtzIFJ1c3NlbCBXaW5kZXIuCisK
Ky0gRml4IGlzc3VlICMxMDMwOiBub3cgYnl0ZS1zdHJpbmdzIGFyZSBlc2NhcGVkIHRvIHByb2R1
Y2UgaXRlbSBub2RlIGlkcworICB0byBtYWtlIHRoZW0gYWx3YXlzIHNlcmlhbGl6YWJsZS4KKyAg
VGhhbmtzIEFuZHkgRnJlZWxhbmQgZm9yIHRoZSByZXBvcnQgYW5kIEJydW5vIE9saXZlaXJhIGZv
ciB0aGUgUFIuCisKKy0gUHl0aG9uIDI6IGlmIHVuaWNvZGUgcGFyYW1ldHJpemVkIHZhbHVlcyBh
cmUgY29udmVydGlibGUgdG8gYXNjaWksIHRoZWlyCisgIGFzY2lpIHJlcHJlc2VudGF0aW9uIGlz
IHVzZWQgZm9yIHRoZSBub2RlIGlkLgorCistIEZpeCBpc3N1ZSAjNDExOiBBZGQgX19lcV9fIG1l
dGhvZCB0byBhc3NlcnRpb24gY29tcGFyaXNvbiBleGFtcGxlLgorICBUaGFua3MgQmVuIFdlYmIu
CistIEZpeCBpc3N1ZSAjNjUzOiBkZXByZWNhdGVkX2NhbGwgY2FuIGJlIHVzZWQgYXMgY29udGV4
dCBtYW5hZ2VyLgorCistIGZpeCBpc3N1ZSA4Nzc6IHByb3Blcmx5IGhhbmRsZSBhc3NlcnRpb24g
ZXhwbGFuYXRpb25zIHdpdGggbm9uLWFzY2lpIHJlcHIKKyAgVGhhbmtzIE1hdGhpZXUgQWdvcGlh
biBmb3IgdGhlIHJlcG9ydCBhbmQgUm9ubnkgUGZhbm5zY2htaWR0IGZvciB0aGUgUFIuCisKKy0g
Zml4IGlzc3VlIDEwMjk6IHRyYW5zZm9ybSBlcnJvcnMgd2hlbiB3cml0aW5nIGNhY2hlIHZhbHVl
cyBpbnRvIHB5dGVzdC13YXJuaW5ncworCisyLjguMAorPT09PT0KKworLSBuZXcgYGAtLWxmYGAg
YW5kIGBgLWZmYGAgb3B0aW9ucyB0byBydW4gb25seSB0aGUgbGFzdCBmYWlsaW5nIHRlc3RzIG9y
CisgICJmYWlsaW5nIHRlc3RzIGZpcnN0IiBmcm9tIHRoZSBsYXN0IHJ1bi4gIFRoaXMgZnVuY3Rp
b25hbGl0eSBpcyBwcm92aWRlZAorICB0aHJvdWdoIHBvcnRpbmcgdGhlIGZvcm1lcmx5IGV4dGVy
bmFsIHB5dGVzdC1jYWNoZSBwbHVnaW4gaW50byBweXRlc3QgY29yZS4KKyAgQkFDS1dBUkQgSU5D
T01QQVQ6IGlmIHlvdSB1c2VkIHB5dGVzdC1jYWNoZSdzIGZ1bmN0aW9uYWxpdHkgdG8gcGVyc2lz
dAorICBkYXRhIGJldHdlZW4gdGVzdCBydW5zIGJlIGF3YXJlIHRoYXQgd2UgZG9uJ3Qgc2VyaWFs
aXplIHNldHMgYW55bW9yZS4KKyAgVGhhbmtzIFJvbm55IFBmYW5uc2NobWlkdCBmb3IgbW9zdCBv
ZiB0aGUgbWVyZ2luZyB3b3JrLgorCistICItciIgb3B0aW9uIG5vdyBhY2NlcHRzICJhIiB0byBp
bmNsdWRlIGFsbCBwb3NzaWJsZSByZXBvcnRzLCBzaW1pbGFyCisgIHRvIHBhc3NpbmcgImZFc3hY
dyIgZXhwbGljaXRseSAoaXNzZTk2MCkuCisgIFRoYW5rcyBBYmhpamVldCBLYXN1cmRlIGZvciB0
aGUgUFIuCisKKy0gYXZvaWQgcHl0aG9uMy41IGRlcHJlY2F0aW9uIHdhcm5pbmdzIGJ5IGludHJv
ZHVjaW5nIHZlcnNpb24KKyAgc3BlY2lmaWMgaW5zcGVjdGlvbiBoZWxwZXJzLCB0aGFua3MgTWlj
aGFlbCBEcm9ldHRib29tLgorCistIGZpeCBpc3N1ZTU2MjogQG5vc2UudG9vbHMuaXN0ZXN0IG5v
dyBmdWxseSByZXNwZWN0ZWQuCisKKy0gZml4IGlzc3VlOTM0OiB3aGVuIHN0cmluZyBjb21wYXJp
c29uIGZhaWxzIGFuZCBhIGRpZmYgaXMgdG9vIGxhcmdlIHRvIGRpc3BsYXkKKyAgd2l0aG91dCBw
YXNzaW5nIC12diwgc3RpbGwgc2hvdyBhIGZldyBsaW5lcyBvZiB0aGUgZGlmZi4KKyAgVGhhbmtz
IEZsb3JpYW4gQnJ1aGluIGZvciB0aGUgcmVwb3J0IGFuZCBCcnVubyBPbGl2ZWlyYSBmb3IgdGhl
IFBSLgorCistIGZpeCBpc3N1ZTczNjogRml4IGEgYnVnIHdoZXJlIGZpeHR1cmUgcGFyYW1zIHdv
dWxkIGJlIGRpc2NhcmRlZCB3aGVuIGNvbWJpbmVkCisgIHdpdGggcGFyYW1ldHJpemF0aW9uIG1h
cmtlcnMuCisgIFRoYW5rcyB0byBNYXJrdXMgVW50ZXJ3YWRpdHplciBmb3IgdGhlIFBSLgorCist
IGZpeCBpc3N1ZTcxMDogaW50cm9kdWNlIEFMTE9XX1VOSUNPREUgZG9jdGVzdCBvcHRpb246IHdo
ZW4gZW5hYmxlZCwgdGhlCisgIGBgdWBgIHByZWZpeCBpcyBzdHJpcHBlZCBmcm9tIHVuaWNvZGUg
c3RyaW5ncyBpbiBleHBlY3RlZCBkb2N0ZXN0IG91dHB1dC4gVGhpcworICBhbGxvd3MgZG9jdGVz
dHMgd2hpY2ggdXNlIHVuaWNvZGUgdG8gcnVuIGluIFB5dGhvbiAyIGFuZCAzIHVuY2hhbmdlZC4K
KyAgVGhhbmtzIEphc29uIFIuIENvb21icyBmb3IgdGhlIHJlcG9ydCBhbmQgQnJ1bm8gT2xpdmVp
cmEgZm9yIHRoZSBQUi4KKworLSBwYXJhbWV0cml6ZSBub3cgYWxzbyBnZW5lcmF0ZXMgbWVhbmlu
Z2Z1bCB0ZXN0IElEcyBmb3IgZW51bSwgcmVnZXggYW5kIGNsYXNzCisgIG9iamVjdHMgKGFzIG9w
cG9zZWQgdG8gY2xhc3MgaW5zdGFuY2VzKS4KKyAgVGhhbmtzIHRvIEZsb3JpYW4gQnJ1aGluIGZv
ciB0aGUgUFIuCisKKy0gQWRkICd3YXJucycgdG8gYXNzZXJ0IHRoYXQgd2FybmluZ3MgYXJlIHRo
cm93biAobGlrZSAncmFpc2VzJykuCisgIFRoYW5rcyB0byBFcmljIEh1bnNiZXJnZXIgZm9yIHRo
ZSBQUi4KKworLSBGaXggaXNzdWU2ODM6IERvIG5vdCBhcHBseSBhbiBhbHJlYWR5IGFwcGxpZWQg
bWFyay4gIFRoYW5rcyBvamFrZSBmb3IgdGhlIFBSLgorCistIERlYWwgd2l0aCBjYXB0dXJpbmcg
ZmFpbHVyZXMgYmV0dGVyIHNvIGZld2VyIGV4Y2VwdGlvbnMgZ2V0IGxvc3QgdG8KKyAgL2Rldi9u
dWxsLiAgVGhhbmtzIERhdmlkIFN6b3R0ZW4gZm9yIHRoZSBQUi4KKworLSBmaXggaXNzdWU3MzA6
IGRlcHJlY2F0ZSBhbmQgd2FybiBhYm91dCB0aGUgLS1nZW5zY3JpcHQgb3B0aW9uLgorICBUaGFu
a3MgUm9ubnkgUGZhbm5zY2htaWR0IGZvciB0aGUgcmVwb3J0IGFuZCBDaHJpc3RpYW4gUG9tbXJh
bnogZm9yIHRoZSBQUi4KKworLSBmaXggaXNzdWU3NTE6IG11bHRpcGxlIHBhcmFtZXRyaXplIHdp
dGggaWRzIGJ1ZyBpZiBpdCBwYXJhbWV0cml6ZXMgY2xhc3Mgd2l0aAorICB0d28gb3IgbW9yZSB0
ZXN0IG1ldGhvZHMuIFRoYW5rcyBTZXJnZXkgQ2hpcGlnYSBmb3IgcmVwb3J0aW5nIGFuZCBKYW4K
KyAgQmVkbmFyaWsgZm9yIFBSLgorCistIGZpeCBpc3N1ZTgyOiBhdm9pZCBsb2FkaW5nIGNvbmZ0
ZXN0IGZpbGVzIGZyb20gc2V0dXAuY2ZnL3B5dGVzdC5pbmkvdG94LmluaQorICBmaWxlcyBhbmQg
dXB3YXJkcyBieSBkZWZhdWx0ICgtLWNvbmZjdXRkaXIgY2FuIHN0aWxsIGJlIHNldCB0byBvdmVy
cmlkZSB0aGlzKS4KKyAgVGhhbmtzIEJydW5vIE9saXZlaXJhIGZvciB0aGUgUFIuCisKKy0gZml4
IGlzc3VlNzY4OiBkb2NzdHJpbmdzIGZvdW5kIGluIHB5dGhvbiBtb2R1bGVzIHdlcmUgbm90IHNl
dHRpbmcgdXAgc2Vzc2lvbgorICBmaXh0dXJlcy4gVGhhbmtzIEphc29uIFIuIENvb21icyBmb3Ig
cmVwb3J0aW5nIGFuZCBCcnVubyBPbGl2ZWlyYSBmb3IgdGhlIFBSLgorCistIGFkZGVkIGBgdG1w
ZGlyX2ZhY3RvcnlgYCwgYSBzZXNzaW9uLXNjb3BlZCBmaXh0dXJlIHRoYXQgY2FuIGJlIHVzZWQg
dG8gY3JlYXRlCisgIGRpcmVjdG9yaWVzIHVuZGVyIHRoZSBiYXNlIHRlbXBvcmFyeSBkaXJlY3Rv
cnkuIFByZXZpb3VzbHkgdGhpcyBvYmplY3Qgd2FzCisgIGluc3RhbGxlZCBhcyBhIGBgX3RtcGRp
cmhhbmRsZXJgYCBhdHRyaWJ1dGUgb2YgdGhlIGBgY29uZmlnYGAgb2JqZWN0LCBidXQgbm93IGl0
CisgIGlzIHBhcnQgb2YgdGhlIG9mZmljaWFsIEFQSSBhbmQgdXNpbmcgYGBjb25maWcuX3RtcGRp
cmhhbmRsZXJgYCBpcworICBkZXByZWNhdGVkLgorICBUaGFua3MgQnJ1bm8gT2xpdmVpcmEgZm9y
IHRoZSBQUi4KKworLSBmaXggaXNzdWU4MDg6IHB5dGVzdCdzIGludGVybmFsIGFzc2VydGlvbiBy
ZXdyaXRlIGhvb2sgbm93IGltcGxlbWVudHMgdGhlCisgIG9wdGlvbmFsIFBFUDMwMiBnZXRfZGF0
YSBBUEkgc28gdGVzdHMgY2FuIGFjY2VzcyBkYXRhIGZpbGVzIG5leHQgdG8gdGhlbS4KKyAgVGhh
bmtzIHhtby1vZG9vIGZvciByZXF1ZXN0IGFuZCBleGFtcGxlIGFuZCBCcnVubyBPbGl2ZWlyYSBm
b3IKKyAgdGhlIFBSLgorCistIHJvb3RkaXIgYW5kIGluaWZpbGUgYXJlIG5vdyBkaXNwbGF5ZWQg
ZHVyaW5nIHVzYWdlIGVycm9ycyB0byBoZWxwCisgIHVzZXJzIGRpYWdub3NlIHByb2JsZW1zIHN1
Y2ggYXMgdW5leHBlY3RlZCBpbmkgZmlsZXMgd2hpY2ggYWRkCisgIHVua25vd24gb3B0aW9ucyBi
ZWluZyBwaWNrZWQgdXAgYnkgcHl0ZXN0LiBUaGFua3MgdG8gUGF2ZWwgU2F2Y2hlbmtvIGZvcgor
ICBicmluZ2luZyB0aGUgcHJvYmxlbSB0byBhdHRlbnRpb24gaW4gIzgyMSBhbmQgQnJ1bm8gT2xp
dmVpcmEgZm9yIHRoZSBQUi4KKworLSBTdW1tYXJ5IGJhciBub3cgaXMgY29sb3JlZCB5ZWxsb3cg
Zm9yIHdhcm5pbmcKKyAgc2l0dWF0aW9ucyBzdWNoIGFzOiBhbGwgdGVzdHMgZWl0aGVyIHdlcmUg
c2tpcHBlZCBvciB4cGFzcy94ZmFpbGVkLAorICBvciBubyB0ZXN0cyB3ZXJlIHJ1biBhdCBhbGwg
KHRoaXMgaXMgYSBwYXJ0aWFsIGZpeCBmb3IgaXNzdWU1MDApLgorCistIGZpeCBpc3N1ZTgxMjog
cHl0ZXN0IG5vdyBleGl0cyB3aXRoIHN0YXR1cyBjb2RlIDUgaW4gc2l0dWF0aW9ucyB3aGVyZSBu
bworICB0ZXN0cyB3ZXJlIHJ1biBhdCBhbGwsIHN1Y2ggYXMgdGhlIGRpcmVjdG9yeSBnaXZlbiBp
biB0aGUgY29tbWFuZCBsaW5lIGRvZXMKKyAgbm90IGNvbnRhaW4gYW55IHRlc3RzIG9yIGFzIHJl
c3VsdCBvZiBhIGNvbW1hbmQgbGluZSBvcHRpb24gZmlsdGVycworICBhbGwgb3V0IGFsbCB0ZXN0
cyAoLWsgZm9yIGV4YW1wbGUpLgorICBUaGFua3MgRXJpYyBTaWVnZXJtYW4gKGlzc3VlODEyKSBh
bmQgQnJ1bm8gT2xpdmVpcmEgZm9yIHRoZSBQUi4KKworLSBTdW1tYXJ5IGJhciBub3cgaXMgY29s
b3JlZCB5ZWxsb3cgZm9yIHdhcm5pbmcKKyAgc2l0dWF0aW9ucyBzdWNoIGFzOiBhbGwgdGVzdHMg
ZWl0aGVyIHdlcmUgc2tpcHBlZCBvciB4cGFzcy94ZmFpbGVkLAorICBvciBubyB0ZXN0cyB3ZXJl
IHJ1biBhdCBhbGwgKHJlbGF0ZWQgdG8gaXNzdWU1MDApLgorICBUaGFua3MgRXJpYyBTaWVnZXJt
YW4uCisKKy0gTmV3IGBgdGVzdHBhdGhzYGAgaW5pIG9wdGlvbjogbGlzdCBvZiBkaXJlY3Rvcmll
cyB0byBzZWFyY2ggZm9yIHRlc3RzCisgIHdoZW4gZXhlY3V0aW5nIHB5dGVzdCBmcm9tIHRoZSBy
b290IGRpcmVjdG9yeS4gVGhpcyBjYW4gYmUgdXNlZAorICB0byBzcGVlZCB1cCB0ZXN0IGNvbGxl
Y3Rpb24gd2hlbiBhIHByb2plY3QgaGFzIHdlbGwgc3BlY2lmaWVkIGRpcmVjdG9yaWVzCisgIGZv
ciB0ZXN0cywgYmVpbmcgdXN1YWxseSBtb3JlIHByYWN0aWNhbCB0aGFuIGNvbmZpZ3VyaW5nIG5v
cmVjdXJzZWRpcnMgZm9yCisgIGFsbCBkaXJlY3RvcmllcyB0aGF0IGRvIG5vdCBjb250YWluIHRl
c3RzLgorICBUaGFua3MgdG8gQWRyaWFuIGZvciBpZGVhICgjNjk0KSBhbmQgQnJ1bm8gT2xpdmVp
cmEgZm9yIHRoZSBQUi4KKworLSBmaXggaXNzdWU3MTM6IEpVbml0IFhNTCByZXBvcnRzIGZvciBk
b2N0ZXN0IGZhaWx1cmVzLgorICBUaGFua3MgUHVueWFzaGxva2EgQmlzd2FsLgorCistIGZpeCBp
c3N1ZTk3MDogaW50ZXJuYWwgcHl0ZXN0IHdhcm5pbmdzIG5vdyBhcHBlYXIgYXMgInB5dGVzdC13
YXJuaW5ncyIgaW4KKyAgdGhlIHRlcm1pbmFsIGluc3RlYWQgb2YgIndhcm5pbmdzIiwgc28gaXQg
aXMgY2xlYXIgZm9yIHVzZXJzIHRoYXQgdGhvc2UKKyAgd2FybmluZ3MgYXJlIGZyb20gcHl0ZXN0
IGFuZCBub3QgZnJvbSB0aGUgYnVpbHRpbiAid2FybmluZ3MiIG1vZHVsZS4KKyAgVGhhbmtzIEJy
dW5vIE9saXZlaXJhLgorCistIEluY2x1ZGUgc2V0dXAgYW5kIHRlYXJkb3duIGluIGp1bml0eG1s
IHRlc3QgZHVyYXRpb25zLgorICBUaGFua3MgSmFubmUgVmFuaGFsYS4KKworLSBmaXggaXNzdWU3
MzU6IGFzc2VydGlvbiBmYWlsdXJlcyBvbiBkZWJ1ZyB2ZXJzaW9ucyBvZiBQeXRob24gMy40Kwor
CistIG5ldyBvcHRpb24gYGAtLWltcG9ydC1tb2RlYGAgdG8gYWxsb3cgdG8gY2hhbmdlIHRlc3Qg
bW9kdWxlIGltcG9ydGluZworICBiZWhhdmlvdXIgdG8gYXBwZW5kIHRvIHN5cy5wYXRoIGluc3Rl
YWQgb2YgcHJlcGVuZGluZy4gIFRoaXMgYmV0dGVyIGFsbG93cworICB0byBydW4gdGVzdCBtb2R1
bGVzIGFnYWluc3QgaW5zdGFsbGF0ZWQgdmVyc2lvbnMgb2YgYSBwYWNrYWdlIGV2ZW4gaWYgdGhl
CisgIHBhY2thZ2UgdW5kZXIgdGVzdCBoYXMgdGhlIHNhbWUgaW1wb3J0IHJvb3QuICBJbiB0aGlz
IGV4YW1wbGU6OgorCisgICAgICAgIHRlc3RpbmcvX19pbml0X18ucHkKKyAgICAgICAgdGVzdGlu
Zy90ZXN0X3BrZ191bmRlcl90ZXN0LnB5CisgICAgICAgIHBrZ191bmRlcl90ZXN0LworCisgIHRo
ZSB0ZXN0cyB3aWxsIHJ1biBhZ2FpbnN0IHRoZSBpbnN0YWxsZWQgdmVyc2lvbgorICBvZiBwa2df
dW5kZXJfdGVzdCB3aGVuIGBgLS1pbXBvcnQtbW9kZT1hcHBlbmRgYCBpcyB1c2VkIHdoZXJlYXMK
KyAgYnkgZGVmYXVsdCB0aGV5IHdvdWxkIGFsd2F5cyBwaWNrIHVwIHRoZSBsb2NhbCB2ZXJzaW9u
LiAgVGhhbmtzIEhvbGdlciBLcmVrZWwuCisKKy0gcHl0ZXN0ZXI6IGFkZCBtZXRob2QgYGBUbXBU
ZXN0ZGlyLmRlbGV0ZV9sb2FkZWRfbW9kdWxlcygpYGAsIGFuZCBjYWxsIGl0CisgIGZyb20gYGBp
bmxpbmVfcnVuKClgYCB0byBhbGxvdyB0ZW1wb3JhcnkgbW9kdWxlcyB0byBiZSByZWxvYWRlZC4K
KyAgVGhhbmtzIEVkdWFyZG8gU2NoZXR0aW5vLgorCistIGludGVybmFsbHkgcmVmYWN0b3IgcGx1
Z2lubWFuYWdlciBBUEkgYW5kIGNvZGUgc28gdGhhdCB0aGVyZQorICBpcyBhIGNsZWFyIGRpc3Rp
bmN0aW9uIGJldHdlZW4gYSBweXRlc3QtYWdub3N0aWMgcmF0aGVyIHNpbXBsZQorICBwbHVnaW5t
YW5hZ2VyIGFuZCB0aGUgUHl0ZXN0UGx1Z2luTWFuYWdlciB3aGljaCBhZGRzIGEgbG90IG9mCisg
IGJlaGF2aW91ciwgYW1vbmcgaXQgaGFuZGxpbmcgb2YgdGhlIGxvY2FsIGNvbmZ0ZXN0IGZpbGVz
LgorICBJbiB0ZXJtcyBvZiBkb2N1bWVudGVkIG1ldGhvZHMgdGhpcyBpcyBhIGJhY2t3YXJkIGNv
bXBhdGlibGUKKyAgY2hhbmdlIGJ1dCBpdCBtaWdodCBzdGlsbCBicmVhayAzcmQgcGFydHkgcGx1
Z2lucyB3aGljaCByZWxpZWQgb24KKyAgZGV0YWlscyBsaWtlIGVzcGVjaWFsbHkgdGhlIHBsdWdp
bm1hbmFnZXIuYWRkX3NodXRkb3duKCkgQVBJLgorICBUaGFua3MgSG9sZ2VyIEtyZWtlbC4KKwor
LSBwbHVnaW5tYW5hZ2VtZW50OiBpbnRyb2R1Y2UgYGBweXRlc3QuaG9va2ltcGxgYCBhbmQKKyAg
YGBweXRlc3QuaG9va3NwZWNgYCBkZWNvcmF0b3JzIGZvciBzZXR0aW5nIGltcGwvc3BlYworICBz
cGVjaWZpYyBwYXJhbWV0ZXJzLiAgVGhpcyBzdWJzdGl0dXRlcyB0aGUgcHJldmlvdXMKKyAgbm93
IGRlcHJlY2F0ZWQgdXNlIG9mIGBgcHl0ZXN0Lm1hcmtgYCB3aGljaCBpcyBtZWFudCB0bworICBj
b250YWluIG1hcmtlcnMgZm9yIHRlc3QgZnVuY3Rpb25zIG9ubHkuCisKKy0gd3JpdGUvcmVmaW5l
IGRvY3MgZm9yICJ3cml0aW5nIHBsdWdpbnMiIHdoaWNoIG5vdyBoYXZlIHRoZWlyCisgIG93biBw
YWdlIGFuZCBhcmUgc2VwYXJhdGUgZnJvbSB0aGUgInVzaW5nL2luc3RhbGxpbmcgcGx1Z2luc2Bg
IHBhZ2UuCisKKy0gZml4IGlzc3VlNzMyOiBwcm9wZXJseSB1bnJlZ2lzdGVyIHBsdWdpbnMgZnJv
bSBhbnkgaG9vayBjYWxsaW5nCisgIHNpdGVzIGFsbG93aW5nIHRvIGhhdmUgdGVtcG9yYXJ5IHBs
dWdpbnMgZHVyaW5nIHRlc3QgZXhlY3V0aW9uLgorCistIGRlcHJlY2F0ZSBhbmQgd2FybiBhYm91
dCBgYF9fbXVsdGljYWxsX19gYCBhcmd1bWVudCBpbiBob29rCisgIGltcGxlbWVudGF0aW9ucy4g
IFVzZSB0aGUgYGBob29rd3JhcHBlcmBgIG1lY2hhbmlzbSBpbnN0ZWFkIGFscmVhZHkKKyAgaW50
cm9kdWNlZCB3aXRoIHB5dGVzdC0yLjcuCisKKy0gc3BlZWQgdXAgcHl0ZXN0J3Mgb3duIHRlc3Qg
c3VpdGUgY29uc2lkZXJhYmx5IGJ5IHVzaW5nIGlucHJvY2VzcworICB0ZXN0cyBieSBkZWZhdWx0
ICh0ZXN0cnVuIGNhbiBiZSBtb2RpZmllZCB3aXRoIC0tcnVucHl0ZXN0PXN1YnByb2Nlc3MKKyAg
dG8gY3JlYXRlIHN1YnByb2Nlc3NlcyBpbiBtYW55IHBsYWNlcyBpbnN0ZWFkKS4gIFRoZSBtYWlu
CisgIEFQSXMgdG8gcnVuIHB5dGVzdCBpbiBhIHRlc3QgaXMgInJ1bnB5dGVzdCgpIiBvciAicnVu
cHl0ZXN0X3N1YnByb2Nlc3MiCisgIGFuZCAicnVucHl0ZXN0X2lucHJvY2VzcyIgaWYgeW91IG5l
ZWQgYSBwYXJ0aWN1bGFyIHdheSBvZiBydW5uaW5nCisgIHRoZSB0ZXN0LiAgSW4gYWxsIGNhc2Vz
IHlvdSBnZXQgYmFjayBhIFJ1blJlc3VsdCBidXQgdGhlIGlucHJvY2VzcworICBvbmUgd2lsbCBh
bHNvIGhhdmUgYSAicmVwcmVjIiBhdHRyaWJ1dGUgd2l0aCB0aGUgcmVjb3JkZWQgZXZlbnRzL3Jl
cG9ydHMuCisKKy0gZml4IG1vbmtleXBhdGNoLnNldGF0dHIoIngueSIsIHJhaXNpbmc9RmFsc2Up
IHRvIGFjdHVhbGx5IG5vdCByYWlzZQorICBpZiAieSIgaXMgbm90IGEgcHJlLWV4aXN0aW5nIGF0
dHJpYnV0ZS4gVGhhbmtzIEZsb3JpYW4gQnJ1aGluLgorCistIGZpeCBpc3N1ZTc0MTogbWFrZSBy
dW5uaW5nIG91dHB1dCBmcm9tIHRlc3RkaXIucnVuIGNvcHkvcGFzdGVhYmxlCisgIFRoYW5rcyBC
cnVubyBPbGl2ZWlyYS4KKworLSBhZGQgYSBuZXcgYGAtLW5vY29uZnRlc3RgYCBhcmd1bWVudCB3
aGljaCBpZ25vcmVzIGFsbCBgYGNvbmZ0ZXN0LnB5YGAgZmlsZXMuCisKKy0gYWRkIGBgZmlsZWBg
IGFuZCBgYGxpbmVgYCBhdHRyaWJ1dGVzIHRvIEpVbml0LVhNTCBvdXRwdXQuCisKKy0gZml4IGlz
c3VlODkwOiBjaGFuZ2VkIGV4dGVuc2lvbiBvZiBhbGwgZG9jdW1lbnRhdGlvbiBmaWxlcyBmcm9t
IGBgdHh0YGAgdG8KKyAgYGByc3RgYC4gVGhhbmtzIHRvIEFiaGlqZWV0IGZvciB0aGUgUFIuCisK
Ky0gZml4IGlzc3VlNzE0OiBhZGQgYWJpbGl0eSB0byBhcHBseSBpbmRpcmVjdD1UcnVlIHBhcmFt
ZXRlciBvbiBwYXJ0aWN1bGFyIGFyZ25hbWVzLgorICBUaGFua3MgRWxpemF2ZXRhMjM5LgorCist
IGZpeCBpc3N1ZTg5MDogY2hhbmdlZCBleHRlbnNpb24gb2YgYWxsIGRvY3VtZW50YXRpb24gZmls
ZXMgZnJvbSBgYHR4dGBgIHRvCisgIGBgcnN0YGAuIFRoYW5rcyB0byBBYmhpamVldCBmb3IgdGhl
IFBSLgorCistIGZpeCBpc3N1ZTk1NzogIiMgZG9jdGVzdDogU0tJUCIgb3B0aW9uIHdpbGwgbm93
IHJlZ2lzdGVyIGRvY3Rlc3RzIGFzIFNLSVBQRUQKKyAgcmF0aGVyIHRoYW4gUEFTU0VELgorICBU
aGFua3MgVGhvbWFzIEdyYWluZ2VyIGZvciB0aGUgcmVwb3J0IGFuZCBCcnVubyBPbGl2ZWlyYSBm
b3IgdGhlIFBSLgorCistIGlzc3VlOTUxOiBhZGQgbmV3IHJlY29yZF94bWxfcHJvcGVydHkgZml4
dHVyZSwgdGhhdCBzdXBwb3J0cyBsb2dnaW5nCisgIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24g
eG1sIG91dHB1dC4gVGhhbmtzIERhdmlkIERpYXogZm9yIHRoZSBQUi4KKworLSBpc3N1ZTk0OTog
cGF0aHMgYWZ0ZXIgbm9ybWFsIG9wdGlvbnMgKGZvciBleGFtcGxlIGBgLXNgYCwgYGAtdmBgLCBl
dGMpIGFyZSBub3cKKyAgcHJvcGVybHkgdXNlZCB0byBkaXNjb3ZlciBgYHJvb3RkaXJgYCBhbmQg
YGBpbmlgYCBmaWxlcy4KKyAgVGhhbmtzIFBldGVyIExhdXJpIGZvciB0aGUgcmVwb3J0IGFuZCBC
cnVubyBPbGl2ZWlyYSBmb3IgdGhlIFBSLgorCisyLjcuMyAoY29tcGFyZWQgdG8gMi43LjIpCis9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCistIEFsbG93ICdkZXYnLCAncmMnLCBvciBv
dGhlciBub24taW50ZWdlciB2ZXJzaW9uIHN0cmluZ3MgaW4gYGBpbXBvcnRvcnNraXBgYC4KKyAg
VGhhbmtzIHRvIEVyaWMgSHVuc2JlcmdlciBmb3IgdGhlIFBSLgorCistIGZpeCBpc3N1ZTg1Njog
Y29uc2lkZXIgLS1jb2xvciBwYXJhbWV0ZXIgaW4gYWxsIG91dHB1dHMgKGZvciBleGFtcGxlCisg
IC0tZml4dHVyZXMpLiBUaGFua3MgQmFybmV5IEdhbGUgZm9yIHRoZSByZXBvcnQgYW5kIEJydW5v
IE9saXZlaXJhIGZvciB0aGUgUFIuCisKKy0gZml4IGlzc3VlODU1OiBwYXNzaW5nIHN0ciBvYmpl
Y3RzIGFzIGBgcGx1Z2luc2BgIGFyZ3VtZW50IHRvIHB5dGVzdC5tYWluCisgIGlzIG5vdyBpbnRl
cnByZXRlZCBhcyBhIG1vZHVsZSBuYW1lIHRvIGJlIGltcG9ydGVkIGFuZCByZWdpc3RlcmVkIGFz
IGEKKyAgcGx1Z2luLCBpbnN0ZWFkIG9mIHNpbGVudGx5IGhhdmluZyBubyBlZmZlY3QuCisgIFRo
YW5rcyB4bW8tb2RvbyBmb3IgdGhlIHJlcG9ydCBhbmQgQnJ1bm8gT2xpdmVpcmEgZm9yIHRoZSBQ
Ui4KKworLSBmaXggaXNzdWU3NDQ6IGZpeCBmb3IgYXN0LkNhbGwgY2hhbmdlcyBpbiBQeXRob24g
My41Ky4gIFRoYW5rcworICBHdWlkbyB2YW4gUm9zc3VtLCBNYXR0aGlhcyBCdXNzb25uaWVyLCBT
dGVmYW4gWmltbWVybWFubiBhbmQKKyAgVGhvbWFzIEtsdXl2ZXIuCisKKy0gZml4IGlzc3VlODQy
OiBhcHBseWluZyBtYXJrZXJzIGluIGNsYXNzZXMgbm8gbG9uZ2VyIHByb3BhZ2F0ZSB0aGlzIG1h
cmtlcnMKKyAgdG8gc3VwZXJjbGFzc2VzIHdoaWNoIGFsc28gaGF2ZSBtYXJrZXJzLgorICBUaGFu
a3MgeG1vLW9kb28gZm9yIHRoZSByZXBvcnQgYW5kIEJydW5vIE9saXZlaXJhIGZvciB0aGUgUFIu
CisKKy0gcHJlc2VydmUgd2FybmluZyBmdW5jdGlvbnMgYWZ0ZXIgY2FsbCB0byBweXRlc3QuZGVw
cmVjYXRlZF9jYWxsLiBUaGFua3MKKyAgUGlldGVyIE11bGRlciBmb3IgUFIuCisKKy0gZml4IGlz
c3VlODU0OiBhdXRvdXNlIHlpZWxkX2ZpeHR1cmVzIGRlZmluZWQgYXMgY2xhc3MgbWVtYmVycyBv
ZgorICB1bml0dGVzdC5UZXN0Q2FzZSBzdWJjbGFzc2VzIG5vdyB3b3JrIGFzIGV4cGVjdGVkLgor
ICBUaGFubmtzIHhtby1vZG9vIGZvciB0aGUgcmVwb3J0IGFuZCBCcnVubyBPbGl2ZWlyYSBmb3Ig
dGhlIFBSLgorCistIGZpeCBpc3N1ZTgzMzogLS1maXh0dXJlcyBub3cgc2hvd3MgYWxsIGZpeHR1
cmVzIG9mIGNvbGxlY3RlZCB0ZXN0IGZpbGVzLCBpbnN0ZWFkIG9mIGp1c3QgdGhlCisgIGZpeHR1
cmVzIGRlY2xhcmVkIG9uIHRoZSBmaXJzdCBvbmUuCisgIFRoYW5rcyBGbG9yaWFuIEJydWhpbiBm
b3IgcmVwb3J0aW5nIGFuZCBCcnVubyBPbGl2ZWlyYSBmb3IgdGhlIFBSLgorCistIGZpeCBpc3N1
ZTg2Mzogc2tpcHBlZCB0ZXN0cyBub3cgcmVwb3J0IHRoZSBjb3JyZWN0IHJlYXNvbiB3aGVuIGEg
c2tpcC94ZmFpbAorICBjb25kaXRpb24gaXMgbWV0IHdoZW4gdXNpbmcgbXVsdGlwbGUgbWFya2Vy
cy4KKyAgVGhhbmtzIFJhcGhhZWwgUGllcnppbmEgZm9yIHJlcG9ydGluZyBhbmQgQnJ1bm8gT2xp
dmVpcmEgZm9yIHRoZSBQUi4KKworLSBvcHRpbWl6ZWQgdG1wZGlyIGZpeHR1cmUgaW5pdGlhbGl6
YXRpb24sIHdoaWNoIHNob3VsZCBtYWtlIHRlc3Qgc2Vzc2lvbnMKKyAgZmFzdGVyIChzcGVjaWFs
bHkgd2hlbiB1c2luZyBweXRlc3QteGRpc3QpLiBUaGUgb25seSB2aXNpYmxlIGVmZmVjdAorICBp
cyB0aGF0IG5vdyBweXRlc3QgdXNlcyBhIHN1YmRpcmVjdG9yeSBpbiB0aGUgJFRFTVAgZGlyZWN0
b3J5IGZvciBhbGwKKyAgZGlyZWN0b3JpZXMgY3JlYXRlZCBieSB0aGlzIGZpeHR1cmUgKGRlZmF1
bHRzIHRvICRURU1QL3B5dGVzdC0kVVNFUikuCisgIFRoYW5rcyBCcnVubyBPbGl2ZWlyYSBmb3Ig
dGhlIFBSLgorCisyLjcuMiAoY29tcGFyZWQgdG8gMi43LjEpCis9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQorCistIGZpeCBpc3N1ZTc2NzogcHl0ZXN0LnJhaXNlcyB2YWx1ZSBhdHRyaWJ1
dGUgZG9lcyBub3QgY29udGFpbiB0aGUgZXhjZXB0aW9uCisgIGluc3RhbmNlIG9uIFB5dGhvbiAy
LjYuIFRoYW5rcyBFcmljIFNpZWdlcm1hbiBmb3IgcHJvdmlkaW5nIHRoZSB0ZXN0CisgIGNhc2Ug
YW5kIEJydW5vIE9saXZlaXJhIGZvciBQUi4KKworLSBBdXRvbWF0aWNhbGx5IGNyZWF0ZSBkaXJl
Y3RvcnkgZm9yIGp1bml0eG1sIGFuZCByZXN1bHRzIGxvZy4KKyAgVGhhbmtzIEFyb24gQ3Vyem9u
LgorCistIGZpeCBpc3N1ZTcxMzogSlVuaXQgWE1MIHJlcG9ydHMgZm9yIGRvY3Rlc3QgZmFpbHVy
ZXMuCisgIFRoYW5rcyBQdW55YXNobG9rYSBCaXN3YWwuCisKKy0gZml4IGlzc3VlNzM1OiBhc3Nl
cnRpb24gZmFpbHVyZXMgb24gZGVidWcgdmVyc2lvbnMgb2YgUHl0aG9uIDMuNCsKKyAgVGhhbmtz
IEJlbmphbWluIFBldGVyc29uLgorCistIGZpeCBpc3N1ZTExNDogc2tpcGlmIG1hcmtlciByZXBv
cnRzIHRvIGludGVybmFsIHNraXBwaW5nIHBsdWdpbjsKKyAgVGhhbmtzIEZsb3JpcyBCcnV5bm9v
Z2hlIGZvciByZXBvcnRpbmcgYW5kIEJydW5vIE9saXZlaXJhIGZvciB0aGUgUFIuCisKKy0gZml4
IGlzc3VlNzQ4OiB1bml0dGVzdC5Ta2lwVGVzdCByZXBvcnRzIHRvIGludGVybmFsIHB5dGVzdCB1
bml0dGVzdCBwbHVnaW4uCisgIFRoYW5rcyBUaG9tYXMgRGUgU2NoYW1waGVsZWlyZSBmb3IgcmVw
b3J0aW5nIGFuZCBCcnVubyBPbGl2ZWlyYSBmb3IgdGhlIFBSLgorCistIGZpeCBpc3N1ZTcxODog
ZmFpbGVkIHRvIGNyZWF0ZSByZXByZXNlbnRhdGlvbiBvZiBzZXRzIGNvbnRhaW5pbmcgdW5zb3J0
YWJsZQorICBlbGVtZW50cyBpbiBweXRob24gMi4gVGhhbmtzIEVkaXNvbiBHdXN0YXZvIE11ZW56
LgorCistIGZpeCBpc3N1ZTc1NiwgZml4IGlzc3VlNzUyIChhbmQgc2ltaWxhciBpc3N1ZXMpOiBk
ZXBlbmQgb24gcHktMS40LjI5CisgIHdoaWNoIGhhcyBhIHJlZmluZWQgYWxnb3JpdGhtIGZvciB0
cmFjZWJhY2sgZ2VuZXJhdGlvbi4KKworCisyLjcuMSAoY29tcGFyZWQgdG8gMi43LjApCis9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQorCistIGZpeCBpc3N1ZTczMTogZG8gbm90IGdldCBj
b25mdXNlZCBieSB0aGUgYnJhY2VzIHdoaWNoIG1heSBiZSBwcmVzZW50CisgIGFuZCB1bmJhbGFu
Y2VkIGluIGFuIG9iamVjdCdzIHJlcHIgd2hpbGUgY29sbGFwc2luZyBGYWxzZQorICBleHBsYW5h
dGlvbnMuICBUaGFua3MgQ2FybCBNZXllciBmb3IgdGhlIHJlcG9ydCBhbmQgdGVzdCBjYXNlLgor
CistIGZpeCBpc3N1ZTU1MzogcHJvcGVybHkgaGFuZGxpbmcgaW5zcGVjdC5nZXRzb3VyY2VsaW5l
cyBmYWlsdXJlcyBpbgorICBGaXh0dXJlTG9va3VwRXJyb3Igd2hpY2ggd291bGQgbGVhZCB0byB0
byBhbiBpbnRlcm5hbCBlcnJvciwKKyAgb2JmdXNjYXRpbmcgdGhlIG9yaWdpbmFsIHByb2JsZW0u
IFRoYW5rcyB0YWxsam9zaCBmb3IgaW5pdGlhbAorICBkaWFnbm9zZS9wYXRjaCBhbmQgQnJ1bm8g
T2xpdmVpcmEgZm9yIGZpbmFsIHBhdGNoLgorCistIGZpeCBpc3N1ZTY2MDogcHJvcGVybHkgcmVw
b3J0IHNjb3BlLW1pc21hdGNoLWFjY2VzcyBlcnJvcnMKKyAgaW5kZXBlbmRlbnRseSBmcm9tIG9y
ZGVyaW5nIG9mIGZpeHR1cmUgYXJndW1lbnRzLiAgQWxzbworICBhdm9pZCB0aGUgcHl0ZXN0IGlu
dGVybmFsIHRyYWNlYmFjayB3aGljaCBkb2VzIG5vdCBwcm92aWRlCisgIGluZm9ybWF0aW9uIHRv
IHRoZSB1c2VyLiBUaGFua3MgSG9sZ2VyIEtyZWtlbC4KKworLSBzdHJlYW1saW5lZCBhbmQgZG9j
dW1lbnRlZCByZWxlYXNlIHByb2Nlc3MuICBBbHNvIGFsbCB2ZXJzaW9ucworICAoaW4gc2V0dXAu
cHkgYW5kIGRvY3VtZW50YXRpb24gZ2VuZXJhdGlvbikgYXJlIG5vdyByZWFkCisgIGZyb20gX3B5
dGVzdC9fX2luaXRfXy5weS4gVGhhbmtzIEhvbGdlciBLcmVrZWwuCisKKy0gZml4ZWQgZG9jcyB0
byByZW1vdmUgdGhlIG5vdGlvbiB0aGF0IHlpZWxkLWZpeHR1cmVzIGFyZSBleHBlcmltZW50YWwu
CisgIFRoZXkgYXJlIGhlcmUgdG8gc3RheSA6KSAgVGhhbmtzIEJydW5vIE9saXZlaXJhLgorCist
IFN1cHBvcnQgYnVpbGRpbmcgd2hlZWxzIGJ5IHVzaW5nIGVudmlyb25tZW50IG1hcmtlcnMgZm9y
IHRoZQorICByZXF1aXJlbWVudHMuICBUaGFua3MgSW9uZWwgTWFyaWVzIENyaXN0aWFuLgorCist
IGZpeGVkIHJlZ3Jlc3Npb24gdG8gMi42LjQgd2hpY2ggc3VyZmFjZWQgZS5nLiBpbiBsb3N0IHN0
ZG91dCBjYXB0dXJlIHByaW50aW5nCisgIHdoZW4gdGVzdHMgcmFpc2VkIFN5c3RlbUV4aXQuIFRo
YW5rcyBIb2xnZXIgS3Jla2VsLgorCistIHJlaW50cm9kdWNlZCBfcHl0ZXN0IGZpeHR1cmUgb2Yg
dGhlIHB5dGVzdGVyIHBsdWdpbiB3aGljaCBpcyB1c2VkCisgIGF0IGxlYXN0IGJ5IHB5dGVzdC14
ZGlzdC4KKworMi43LjAgKGNvbXBhcmVkIHRvIDIuNi40KQorPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KKworLSBmaXggaXNzdWU0MzU6IG1ha2UgcmVsb2FkKCkgd29yayB3aGVuIGFzc2Vy
dCByZXdyaXRpbmcgaXMgYWN0aXZlLgorICBUaGFua3MgRGFuaWVsIEhhaGxlci4KKworLSBmaXgg
aXNzdWU2MTY6IGNvbmZ0ZXN0LnB5IGZpbGVzIGFuZCB0aGVpciBjb250YWluZWQgZml4dXRyZXMg
YXJlIG5vdworICBwcm9wZXJseSBjb25zaWRlcmVkIGZvciB2aXNpYmlsaXR5LCBpbmRlcGVuZGVu
dGx5IGZyb20gdGhlIGV4YWN0CisgIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgYW5kIHRlc3Qg
YXJndW1lbnRzIHRoYXQgYXJlIHVzZWQuCisgIE1hbnkgdGhhbmtzIHRvIEVyaWMgU2llZ2VybWFu
IGFuZCBoaXMgUFIyMzUgd2hpY2ggY29udGFpbnMKKyAgc3lzdGVtYXRpYyB0ZXN0cyBmb3IgY29u
ZnRlc3QgdmlzaWJpbGl0eSBhbmQgbm93IHBhc3Nlcy4KKyAgVGhpcyBjaGFuZ2UgYWxzbyBpbnRy
b2R1Y2VzIHRoZSBjb25jZXB0IG9mIGEgYGByb290ZGlyYGAgd2hpY2gKKyAgaXMgcHJpbnRlZCBh
cyBhIG5ldyBweXRlc3QgaGVhZGVyIGFuZCBkb2N1bWVudGVkIGluIHRoZSBweXRlc3QKKyAgY3Vz
dG9taXplIHdlYiBwYWdlLgorCistIGNoYW5nZSByZXBvcnRpbmcgb2YgImRpdmVydGVkIiB0ZXN0
cywgaS5lLiB0ZXN0cyB0aGF0IGFyZSBjb2xsZWN0ZWQKKyAgaW4gb25lIGZpbGUgYnV0IGFjdHVh
bGx5IGNvbWUgZnJvbSBhbm90aGVyIChlLmcuIHdoZW4gdGVzdHMgaW4gYSB0ZXN0IGNsYXNzCisg
IGNvbWUgZnJvbSBhIGJhc2UgY2xhc3MgaW4gYSBkaWZmZXJlbnQgZmlsZSkuICBXZSBub3cgc2hv
dyB0aGUgbm9kZWlkCisgIGFuZCBpbmRpY2F0ZSB2aWEgYSBwb3N0Zml4IHRoZSBvdGhlciBmaWxl
LgorCistIGFkZCBhYmlsaXR5IHRvIHNldCBjb21tYW5kIGxpbmUgb3B0aW9ucyBieSBlbnZpcm9u
bWVudCB2YXJpYWJsZSBQWVRFU1RfQURET1BUUy4KKworLSBhZGRlZCBkb2N1bWVudGF0aW9uIG9u
IHRoZSBuZXcgcHl0ZXN0LWRldiB0ZWFtcyBvbiBiaXRidWNrZXQgYW5kCisgIGdpdGh1Yi4gIFNl
ZSBodHRwczovL3B5dGVzdC5vcmcvbGF0ZXN0L2NvbnRyaWJ1dGluZy5odG1sIC4KKyAgVGhhbmtz
IHRvIEFuYXRvbHkgZm9yIHB1c2hpbmcgYW5kIGluaXRpYWwgd29yayBvbiB0aGlzLgorCistIGZp
eCBpc3N1ZTY1MDogbmV3IG9wdGlvbiBgYC0tZG9jdHRlc3QtaWdub3JlLWltcG9ydC1lcnJvcnNg
YCB3aGljaAorICB3aWxsIHR1cm4gaW1wb3J0IGVycm9ycyBpbiBkb2N0ZXN0cyBpbnRvIHNraXBz
LiAgVGhhbmtzIENoYXJsZXMgQ2xvdWQKKyAgZm9yIHRoZSBjb21wbGV0ZSBQUi4KKworLSBmaXgg
aXNzdWU2NTU6IHdvcmsgYXJvdW5kIGRpZmZlcmVudCB3YXlzIHRoYXQgY2F1c2UgcHl0aG9uMi8z
CisgIHRvIGxlYWsgc3lzLmV4Y19pbmZvIGludG8gZml4dHVyZXMvdGVzdHMgY2F1c2luZyBmYWls
dXJlcyBpbiAzcmQgcGFydHkgY29kZQorCistIGZpeCBpc3N1ZTYxNTogYXNzZXJ0aW9uIHJlLXdy
aXRpbmcgZGlkIG5vdCBjb3JyZWN0bHkgZXNjYXBlICUgc2lnbnMKKyAgd2hlbiBmb3JtYXR0aW5n
IGJvb2xlYW4gb3BlcmF0aW9ucywgd2hpY2ggdHJpcHBlZCBvdmVyIG1peGluZworICBib29sZWFu
cyB3aXRoIG1vZHVsbyBvcGVyYXRvcnMuICBUaGFua3MgdG8gVG9tIFZpbmVyIGZvciB0aGUgcmVw
b3J0LAorICB0cmlhZ2luZyBhbmQgZml4LgorCistIGltcGxlbWVudCBpc3N1ZTM1MTogYWRkIGFi
aWxpdHkgdG8gc3BlY2lmeSBwYXJhbWV0cml6ZSBpZHMgYXMgYSBjYWxsYWJsZQorICB0byBnZW5l
cmF0ZSBjdXN0b20gdGVzdCBpZHMuICBUaGFua3MgQnJpYW5uYSBMYXVnaGVyIGZvciB0aGUgaWRl
YSBhbmQKKyAgaW1wbGVtZW50YXRpb24uCisKKy0gaW50cm9kdWNlIGFuZCBkb2N1bWVudCBuZXcg
aG9va3dyYXBwZXIgbWVjaGFuaXNtIHVzZWZ1bCBmb3IgcGx1Z2lucworICB3aGljaCB3YW50IHRv
IHdyYXAgdGhlIGV4ZWN1dGlvbiBvZiBjZXJ0YWluIGhvb2tzIGZvciB0aGVpciBwdXJwb3Nlcy4K
KyAgVGhpcyBzdXBlcnNlZGVzIHRoZSB1bmRvY3VtZW50ZWQgYGBfX211bHRpY2FsbF9fYGAgcHJv
dG9jb2wgd2hpY2gKKyAgcHl0ZXN0IGl0c2VsZiBhbmQgc29tZSBleHRlcm5hbCBwbHVnaW5zIHVz
ZS4gIE5vdGUgdGhhdCBweXRlc3QtMi44CisgIGlzIHNjaGVkdWxlZCB0byBkcm9wIHN1cHBvcnRp
bmcgdGhlIG9sZCBgYF9fbXVsdGljYWxsX19gYAorICBhbmQgb25seSBzdXBwb3J0IHRoZSBob29r
d3JhcHBlciBwcm90b2NvbC4KKworLSBtYWpvcmx5IHNwZWVkIHVwIGludm9jYXRpb24gb2YgcGx1
Z2luIGhvb2tzCisKKy0gdXNlIGhvb2t3cmFwcGVyIG1lY2hhbmlzbSBpbiBidWlsdGluIHB5dGVz
dCBwbHVnaW5zLgorCistIGFkZCBhIGRvY3Rlc3QgaW5pIG9wdGlvbiBmb3IgZG9jdGVzdCBmbGFn
cywgdGhhbmtzIEhvbGdlciBQZXRlcnMuCisKKy0gYWRkIG5vdGUgdG8gZG9jcyB0aGF0IGlmIHlv
dSB3YW50IHRvIG1hcmsgYSBwYXJhbWV0ZXIgYW5kIHRoZQorICBwYXJhbWV0ZXIgaXMgYSBjYWxs
YWJsZSwgeW91IGFsc28gbmVlZCB0byBwYXNzIGluIGEgcmVhc29uIHRvIGRpc2FtYmlndWF0ZQor
ICBpdCBmcm9tIHRoZSAiZGVjb3JhdG9yIiBjYXNlLiAgVGhhbmtzIFRvbSBWaW5lci4KKworLSAi
cHl0aG9uX2NsYXNzZXMiIGFuZCAicHl0aG9uX2Z1bmN0aW9ucyIgb3B0aW9ucyBub3cgc3VwcG9y
dCBnbG9iLXBhdHRlcm5zCisgIGZvciB0ZXN0IGRpc2NvdmVyeSwgYXMgZGlzY3Vzc2VkIGluIGlz
c3VlNjAwLiBUaGFua3MgTGRpYXJ5IFRyYW5zbGF0aW9ucy4KKworLSBhbGxvdyB0byBvdmVycmlk
ZSBwYXJhbWV0cml6ZWQgZml4dHVyZXMgd2l0aCBub24tcGFyYW1ldHJpemVkIG9uZXMgYW5kIHZp
Y2UgdmVyc2EgKGJ1YmVua29mZikuCisKKy0gZml4IGlzc3VlNDYzOiByYWlzZSBzcGVjaWZpYyBl
cnJvciBmb3IgJ3BhcmFtZXRlcml6ZScgbWlzc3BlbGxpbmcgKHBmY3RkYXllbGlzZSkuCisKKy0g
T24gZmFpbHVyZSwgdGhlIGBgc3lzLmxhc3RfdmFsdWVgYCwgYGBzeXMubGFzdF90eXBlYGAgYW5k
CisgIGBgc3lzLmxhc3RfdHJhY2ViYWNrYGAgYXJlIHNldCwgc28gdGhhdCBhIHVzZXIgY2FuIGlu
c3BlY3QgdGhlIGVycm9yCisgIHZpYSBwb3N0bW9ydGVtIGRlYnVnZ2luZyAoYWxtYXJrbGVpbiku
CisKKzIuNi40Cis9PT09PQorCistIEltcHJvdmUgYXNzZXJ0aW9uIGZhaWx1cmUgcmVwb3J0aW5n
IG9uIGl0ZXJhYmxlcywgYnkgdXNpbmcgbmRpZmYgYW5kCisgIHBwcmludC4KKworLSByZW1vdmVk
IG91dGRhdGVkIGphcGFuZXNlIGRvY3MgZnJvbSBzb3VyY2UgdHJlZS4KKworLSBkb2NzIGZvciAi
cHl0ZXN0X2FkZGhvb2tzIiBob29rLiAgVGhhbmtzIEJydW5vIE9saXZlaXJhLgorCistIHVwZGF0
ZWQgcGx1Z2luIGluZGV4IGRvY3MuICBUaGFua3MgQnJ1bm8gT2xpdmVpcmEuCisKKy0gZml4IGlz
c3VlNTU3OiB3aXRoICItayIgd2Ugb25seSBhbGxvdyB0aGUgb2xkIHN0eWxlICItIiBmb3IgbmVn
YXRpb24KKyAgYXQgdGhlIGJlZ2lubmluZyBvZiBzdHJpbmdzIGFuZCBldmVuIHRoYXQgaXMgZGVw
cmVjYXRlZC4gIFVzZSAibm90IiBpbnN0ZWFkLgorICBUaGlzIHNob3VsZCBhbGxvdyB0byBwaWNr
IHBhcmFtZXRyaXplZCB0ZXN0cyB3aGVyZSAiLSIgYXBwZWFyZWQgaW4gdGhlIHBhcmFtZXRlci4K
KworLSBmaXggaXNzdWU2MDQ6IEVzY2FwZSAlIGNoYXJhY3RlciBpbiB0aGUgYXNzZXJ0aW9uIG1l
c3NhZ2UuCisKKy0gZml4IGlzc3VlNjIwOiBhZGQgZXhwbGFuYXRpb24gaW4gdGhlIC0tZ2Vuc2Ny
aXB0IHRhcmdldCBhYm91dCB3aGF0CisgIHRoZSBiaW5hcnkgYmxvYiBtZWFucy4gVGhhbmtzIERp
bnUgR2hlcm1hbi4KKworLSBmaXggaXNzdWU2MTQ6IGZpeGVkIHBhc3RlYmluIHN1cHBvcnQuCisK
KworLSBmaXggaXNzdWU2MjA6IGFkZCBleHBsYW5hdGlvbiBpbiB0aGUgLS1nZW5zY3JpcHQgdGFy
Z2V0IGFib3V0IHdoYXQKKyAgdGhlIGJpbmFyeSBibG9iIG1lYW5zLiBUaGFua3MgRGludSBHaGVy
bWFuLgorCistIGZpeCBpc3N1ZTYxNDogZml4ZWQgcGFzdGViaW4gc3VwcG9ydC4KKworMi42LjMK
Kz09PT09CisKKy0gZml4IGlzc3VlNTc1OiB4dW5pdC14bWwgd2FzIHJlcG9ydGluZyBjb2xsZWN0
aW9uIGVycm9ycyBhcyBmYWlsdXJlcworICBpbnN0ZWFkIG9mIGVycm9ycywgdGhhbmtzIE9sZWcg
U2lueWF2c2tpeS4KKworLSBmaXggaXNzdWU1ODI6IGZpeCBzZXR1cHRvb2xzIGV4YW1wbGUsIHRo
YW5rcyBMYXN6bG8gUGFwcCBhbmQgUm9ubnkKKyAgUGZhbm5zY2htaWR0LgorCistIEZpeCBpbmZp
bml0ZSByZWN1cnNpb24gYnVnIHdoZW4gcGlja2xpbmcgY2FwdHVyZS5FbmNvZGVkRmlsZSwgdGhh
bmtzCisgIFV3ZSBTY2htaXR0LgorCistIGZpeCBpc3N1ZTU4OTogZml4IGJhZCBpbnRlcmFjdGlv
biB3aXRoIG51bXB5IGFuZCBvdGhlcnMgd2hlbiBzaG93aW5nCisgIGV4Y2VwdGlvbnMuICBDaGVj
ayBmb3IgcHJlY2lzZSAibWF4aW11bSByZWN1cnNpb24gZGVwdGggZXhjZWVkIiBleGNlcHRpb24K
KyAgaW5zdGVhZCBvZiBwcmVzdW1pbmcgYW55IFJ1bnRpbWVFcnJvciBpcyB0aGF0IG9uZSAoaW1w
bGVtZW50ZWQgaW4gcHkKKyAgZGVwKS4gIFRoYW5rcyBDaGFybGVzIENsb3VkIGZvciBhbmFseXNp
bmcgdGhlIGlzc3VlLgorCistIGZpeCBjb25mdGVzdCByZWxhdGVkIGZpeHR1cmUgdmlzaWJpbGl0
eSBpc3N1ZTogd2hlbiBydW5uaW5nIHdpdGggYQorICBDV0Qgb3V0c2lkZSBhIHRlc3QgcGFja2Fn
ZSBweXRlc3Qgd291bGQgZ2V0IGZpeHR1cmUgZGlzY292ZXJ5IHdyb25nLgorICBUaGFua3MgdG8g
V29sZmdhbmcgU2NobmVycmluZyBmb3IgZmlndXJpbmcgb3V0IGEgcmVwcm9kdWNhYmxlIGV4YW1w
bGUuCisKKy0gSW50cm9kdWNlIHB5dGVzdF9lbnRlcl9wZGIgaG9vayAobmVlZGVkIGUuZy4gYnkg
cHl0ZXN0X3RpbWVvdXQgdG8gY2FuY2VsIHRoZQorICB0aW1lb3V0IHdoZW4gaW50ZXJhY3RpdmVs
eSBlbnRlcmluZyBwZGIpLiAgVGhhbmtzIFdvbGZnYW5nIFNjaG5lcnJpbmcuCisKKy0gY2hlY2sg
eGZhaWwvc2tpcCBhbHNvIHdpdGggbm9uLXB5dGhvbiBmdW5jdGlvbiB0ZXN0IGl0ZW1zLiBUaGFu
a3MKKyAgRmxvcmlzIEJydXlub29naGUuCisKKzIuNi4yCis9PT09PQorCistIEFkZGVkIGZ1bmN0
aW9uIHB5dGVzdC5mcmVlemVfaW5jbHVkZXMoKSwgd2hpY2ggbWFrZXMgaXQgZWFzeSB0byBlbWJl
ZAorICBweXRlc3QgaW50byBleGVjdXRhYmxlcyB1c2luZyB0b29scyBsaWtlIGN4X2ZyZWV6ZS4K
KyAgU2VlIGRvY3MgZm9yIGV4YW1wbGVzIGFuZCByYXRpb25hbGUuIFRoYW5rcyBCcnVubyBPbGl2
ZWlyYS4KKworLSBJbXByb3ZlIGFzc2VydGlvbiByZXdyaXRpbmcgY2FjaGUgaW52YWxpZGF0aW9u
IHByZWNpc2lvbi4KKworLSBmaXhlZCBpc3N1ZTU2MTogYWRhcHQgYXV0b3VzZSBmaXh0dXJlIGV4
YW1wbGUgZm9yIHB5dGhvbjMuCisKKy0gZml4ZWQgaXNzdWU0NTM6IGFzc2VydGlvbiByZXdyaXRp
bmcgaXNzdWUgd2l0aCBfX3JlcHJfXyBjb250YWluaW5nCisgICJcbnsiLCAiXG59IiBhbmQgIlxu
fiIuCisKKy0gZml4IGlzc3VlNTYwOiBjb3JyZWN0bHkgZGlzcGxheSBjb2RlIGlmIGFuICJlbHNl
OiIgb3IgImZpbmFsbHk6IiBpcworICBmb2xsb3dlZCBieSBzdGF0ZW1lbnRzIG9uIHRoZSBzYW1l
IGxpbmUuCisKKy0gRml4IGV4YW1wbGUgaW4gbW9ua2V5cGF0Y2ggZG9jdW1lbnRhdGlvbiwgdGhh
bmtzIHQtOGNoLgorCistIGZpeCBpc3N1ZTU3MjogY29ycmVjdCB0bXBkaXIgZG9jIGV4YW1wbGUg
Zm9yIHB5dGhvbjMuCisKKy0gRG8gbm90IG1hcmsgYXMgdW5pdmVyc2FsIHdoZWVsIGJlY2F1c2Ug
UHl0aG9uIDIuNiBpcyBkaWZmZXJlbnQgZnJvbQorICBvdGhlciBidWlsZHMgZHVlIHRvIHRoZSBl
eHRyYSBhcmdwYXJzZSBkZXBlbmRlbmN5LiAgRml4ZXMgaXNzdWU1NjYuCisgIFRoYW5rcyBzb250
ZWsuCisKKy0gSW1wbGVtZW50IGlzc3VlNTQ5OiB1c2VyLXByb3ZpZGVkIGFzc2VydGlvbiBtZXNz
YWdlcyBub3cgbm8gbG9uZ2VyCisgIHJlcGxhY2UgdGhlIHB5LnRlc3QgaW50cm9zcGVjdGlvbiBt
ZXNzYWdlIGJ1dCBhcmUgc2hvd24gaW4gYWRkaXRpb24KKyAgdG8gdGhlbS4KKworMi42LjEKKz09
PT09CisKKy0gTm8gbG9uZ2VyIHNob3cgbGluZSBudW1iZXJzIGluIHRoZSAtLXZlcmJvc2Ugb3V0
cHV0LCB0aGUgb3V0cHV0IGlzIG5vdworICBwdXJlbHkgdGhlIG5vZGVpZC4gIFRoZSBsaW5lIG51
bWJlciBpcyBzdGlsbCBzaG93biBpbiBmYWlsdXJlIHJlcG9ydHMuCisgIFRoYW5rcyBGbG9yaXMg
QnJ1eW5vb2doZS4KKworLSBmaXggaXNzdWU0Mzcgd2hlcmUgYXNzZXJ0aW9uIHJld3JpdGluZyBj
b3VsZCBjYXVzZSBweXRlc3QteGRpc3Qgc2xhdmVzCisgIHRvIGNvbGxlY3QgZGlmZmVyZW50IHRl
c3RzLiBUaGFua3MgQnJ1bm8gT2xpdmVpcmEuCisKKy0gZml4IGlzc3VlNTU1OiBhZGQgImVycm9y
cyIgYXR0cmlidXRlIHRvIGNhcHR1cmUtc3RyZWFtcyB0byBzYXRpc2Z5CisgIHNvbWUgZGlzdHV0
aWxzIGFuZCBwb3NzaWJseSBvdGhlciBjb2RlIGFjY2Vzc2luZyBzeXMuc3Rkb3V0LmVycm9ycy4K
KworLSBmaXggaXNzdWU1NDcgY2Fwc3lzL2NhcGZkIGFsc28gd29yayB3aGVuIG91dHB1dCBjYXB0
dXJpbmcgKCItcyIpIGlzIGRpc2FibGVkLgorCistIGFkZHJlc3MgaXNzdWUxNzA6IGFsbG93IHB5
dGVzdC5tYXJrLnhmYWlsKC4uLikgdG8gc3BlY2lmeSBleHBlY3RlZCBleGNlcHRpb25zIHZpYQor
ICBhbiBvcHRpb25hbCAicmFpc2VzPUVYQyIgYXJndW1lbnQgd2hlcmUgRVhDIGNhbiBiZSBhIHNp
bmdsZSBleGNlcHRpb24KKyAgb3IgYSB0dXBsZSBvZiBleGNlcHRpb24gY2xhc3Nlcy4gIFRoYW5r
cyBEYXZpZCBNb2hyIGZvciB0aGUgY29tcGxldGUKKyAgUFIuCisKKy0gZml4IGludGVncmF0aW9u
IG9mIHB5dGVzdCB3aXRoIHVuaXR0ZXN0Lm1vY2sucGF0Y2ggZGVjb3JhdG9yIHdoZW4KKyAgaXQg
dXNlcyB0aGUgIm5ldyIgYXJndW1lbnQuICBUaGFua3MgTmljb2xhcyBEZWxhYnkgZm9yIHRlc3Qg
YW5kIFBSLgorCistIGZpeCBpc3N1ZSB3aXRoIGRldGVjdGluZyBjb25mdGVzdCBmaWxlcyBpZiB0
aGUgYXJndW1lbnRzIGNvbnRhaW4KKyAgIjo6IiBub2RlIGlkIHNwZWNpZmljYXRpb25zIChjb3B5
IHBhc3RlZCBmcm9tICItdiIgb3V0cHV0KQorCistIGZpeCBpc3N1ZTU0NCBieSBvbmx5IHJlbW92
aW5nICJATlVNIiBhdCB0aGUgZW5kIG9mICI6OiIgc2VwYXJhdGVkIHBhcnRzCisgIGFuZCBpZiB0
aGUgcGFydCBoYXMgYW4gIi5weSIgZXh0ZW5zaW9uCisKKy0gZG9uJ3QgdXNlIHB5LnN0ZCBpbXBv
cnQgaGVscGVyLCByYXRoZXIgaW1wb3J0IHRoaW5ncyBkaXJlY3RseS4KKyAgVGhhbmtzIEJydW5v
IE9saXZlaXJhLgorCisyLjYKKz09PQorCistIENhY2hlIGV4Y2VwdGlvbnMgZnJvbSBmaXh0dXJl
cyBhY2NvcmRpbmcgdG8gdGhlaXIgc2NvcGUgKGlzc3VlIDQ2NykuCisKKy0gZml4IGlzc3VlNTM3
OiBBdm9pZCBpbXBvcnRpbmcgb2xkIGFzc2VydGlvbiByZWludGVycHJldGF0aW9uIGNvZGUgYnkg
ZGVmYXVsdC4KKworLSBmaXggaXNzdWUzNjQ6IHNob3J0ZW4gYW5kIGVuaGFuY2UgdHJhY2ViYWNr
cyByZXByZXNlbnRhdGlvbiBieSBkZWZhdWx0LgorICBUaGUgbmV3ICItLXRiPWF1dG8iIG9wdGlv
biAoZGVmYXVsdCkgd2lsbCBvbmx5IGRpc3BsYXkgbG9uZyB0cmFjZWJhY2tzCisgIGZvciB0aGUg
Zmlyc3QgYW5kIGxhc3QgZW50cnkuICBZb3UgY2FuIGdldCB0aGUgb2xkIGJlaGF2aW91ciBvZiBw
cmludGluZworICBhbGwgZW50cmllcyBhcyBsb25nIGVudHJpZXMgd2l0aCAiLS10Yj1sb25nIi4g
IEFsc28gc2hvcnQgZW50cmllcyBieQorICBkZWZhdWx0IGFyZSBub3cgcHJpbnRlZCB2ZXJ5IHNp
bWlsYXJseSB0byAiLS10Yj1uYXRpdmUiIG9uZXMuCisKKy0gZml4IGlzc3VlNTE0OiB0ZWFjaCBh
c3NlcnRpb24gcmVpbnRlcnByZXRhdGlvbiBhYm91dCBwcml2YXRlIGNsYXNzIGF0dHJpYnV0ZXMK
KworLSBjaGFuZ2UgLXYgb3V0cHV0IHRvIGluY2x1ZGUgZnVsbCBub2RlIElEcyBvZiB0ZXN0cy4g
IFVzZXJzIGNhbiBjb3B5CisgIGEgbm9kZSBJRCBmcm9tIGEgdGVzdCBydW4sIGluY2x1ZGluZyBs
aW5lIG51bWJlciwgYW5kIHVzZSBpdCBhcyBhCisgIHBvc2l0aW9uYWwgYXJndW1lbnQgaW4gb3Jk
ZXIgdG8gcnVuIG9ubHkgYSBzaW5nbGUgdGVzdC4KKworLSBmaXggaXNzdWUgNDc1OiBmYWlsIGVh
cmx5IGFuZCBjb21wcmVoZW5zaWJsZSBpZiBjYWxsaW5nCisgIHB5dGVzdC5yYWlzZXMgd2l0aCB3
cm9uZyBleGNlcHRpb24gdHlwZS4KKworLSBmaXggaXNzdWU1MTY6IHRlbGwgaW4gZ2V0dGluZy1z
dGFydGVkIGFib3V0IGN1cnJlbnQgZGVwZW5kZW5jaWVzLgorCistIGNsZWFudXAgc2V0dXAucHkg
YSBiaXQgYW5kIHNwZWNpZnkgc3VwcG9ydGVkIHZlcnNpb25zLiBUaGFua3MgSnVya28KKyAgR29z
cG9kbmV0aWMgZm9yIHRoZSBQUi4KKworLSBjaGFuZ2UgWFBBU1MgY29sb3VyIHRvIHllbGxvdyBy
YXRoZXIgdGhlbiByZWQgd2hlbiB0ZXN0cyBhcmUgcnVuCisgIHdpdGggLXYuCisKKy0gZml4IGlz
c3VlNDczOiB3b3JrIGFyb3VuZCBtb2NrIHB1dHRpbmcgYW4gdW5ib3VuZCBtZXRob2QgaW50byBh
IGNsYXNzCisgIGRpY3Qgd2hlbiBkb3VibGUtcGF0Y2hpbmcuCisKKy0gZml4IGlzc3VlNDk4OiBp
ZiBhIGZpeHR1cmUgZmluYWxpemVyIGZhaWxzLCBtYWtlIHN1cmUgdGhhdAorICB0aGUgZml4dHVy
ZSBpcyBzdGlsbCBpbnZhbGlkYXRlZC4KKworLSBmaXggaXNzdWU0NTM6IHRoZSByZXN1bHQgb2Yg
dGhlIHB5dGVzdF9hc3NlcnRyZXByX2NvbXBhcmUgaG9vayBub3cgZ2V0cworICBpdCdzIG5ld2xp
bmVzIGVzY2FwZWQgc28gdGhhdCBmb3JtYXRfZXhjZXB0aW9uIGRvZXMgbm90IGJsb3cgdXAuCisK
Ky0gaW50ZXJuYWwgbmV3IHdhcm5pbmcgc3lzdGVtOiBweXRlc3Qgd2lsbCBub3cgcHJvZHVjZSB3
YXJuaW5ncyB3aGVuCisgIGl0IGRldGVjdHMgb2RkaXRpZXMgaW4geW91ciB0ZXN0IGNvbGxlY3Rp
b24gb3IgZXhlY3V0aW9uLgorICBXYXJuaW5ncyBhcmUgdWx0aW1hdGVseSBzZW50IHRvIGEgbmV3
IHB5dGVzdF9sb2d3YXJuaW5nIGhvb2sgd2hpY2ggaXMKKyAgY3VycmVudGx5IG9ubHkgaW1wbGVt
ZW50ZWQgYnkgdGhlIHRlcm1pbmFsIHBsdWdpbiB3aGljaCBkaXNwbGF5cworICB3YXJuaW5ncyBp
biB0aGUgc3VtbWFyeSBsaW5lIGFuZCBzaG93cyBtb3JlIGRldGFpbHMgd2hlbiAtcncgKHJlcG9y
dCBvbgorICB3YXJuaW5ncykgaXMgc3BlY2lmaWVkLgorCistIGNoYW5nZSBza2lwcyBpbnRvIHdh
cm5pbmdzIGZvciB0ZXN0IGNsYXNzZXMgd2l0aCBhbiBfX2luaXRfXyBhbmQKKyAgY2FsbGFibGVz
IGluIHRlc3QgbW9kdWxlcyB3aGljaCBsb29rIGxpa2UgYSB0ZXN0IGJ1dCBhcmUgbm90IGZ1bmN0
aW9ucy4KKworLSBmaXggaXNzdWU0MzY6IGltcHJvdmVkIGZpbmRpbmcgb2YgaW5pdGlhbCBjb25m
dGVzdCBmaWxlcyBmcm9tIGNvbW1hbmQKKyAgbGluZSBhcmd1bWVudHMgYnkgdXNpbmcgdGhlIHJl
c3VsdCBvZiBwYXJzZV9rbm93bl9hcmdzIHJhdGhlciB0aGFuCisgIHRoZSBwcmV2aW91cyBmbGFr
eSBoZXVyaXN0aWNzLiAgVGhhbmtzIE1hcmMgQWJyYW1vd2l0eiBmb3IgdGVzdHMKKyAgYW5kIGlu
aXRpYWwgZml4aW5nIGFwcHJvYWNoZXMgaW4gdGhpcyBhcmVhLgorCistIGZpeCBpc3N1ZSAjNDc5
OiBwcm9wZXJseSBoYW5kbGUgbm9zZS91bml0dGVzdCgyKSBTa2lwVGVzdCBleGNlcHRpb25zCisg
IGR1cmluZyBjb2xsZWN0aW9uL2xvYWRpbmcgb2YgdGVzdCBtb2R1bGVzLiAgVGhhbmtzIHRvIE1h
cmMgU2NobGFpY2gKKyAgZm9yIHRoZSBjb21wbGV0ZSBQUi4KKworLSBmaXggaXNzdWU0OTA6IGlu
Y2x1ZGUgcHl0ZXN0X2xvYWRfaW5pdGlhbF9jb25mdGVzdHMgaW4gZG9jdW1lbnRhdGlvbgorICBh
bmQgaW1wcm92ZSBkb2NzdHJpbmcuCisKKy0gZml4IGlzc3VlNDcyOiBjbGFyaWZ5IHRoYXQgYGBw
eXRlc3QuY29uZmlnLmdldHZhbHVlKClgYCBjYW5ub3Qgd29yaworICBpZiBpdCdzIHRyaWdnZXJl
ZCBhaGVhZCBvZiBjb21tYW5kIGxpbmUgcGFyc2luZy4KKworLSBtZXJnZSBQUjEyMzogaW1wcm92
ZWQgaW50ZWdyYXRpb24gd2l0aCBtb2NrLnBhdGNoIGRlY29yYXRvciBvbiB0ZXN0cy4KKworLSBm
aXggaXNzdWU0MTI6IG1lc3Npbmcgd2l0aCBzdGRvdXQvc3RkZXJyIEZELWxldmVsIHN0cmVhbXMg
aXMgbm93CisgIGNhcHR1cmVkIHdpdGhvdXQgY3Jhc2hlcy4KKworLSBmaXggaXNzdWU0ODM6IHRy
aWFsL3B5MzMgd29ya3Mgbm93IHByb3Blcmx5LiAgVGhhbmtzIERhbmllbCBHcmFuYSBmb3IgUFIu
CisKKy0gaW1wcm92ZSBleGFtcGxlIGZvciBweXRlc3QgaW50ZWdyYXRpb24gd2l0aCAicHl0aG9u
IHNldHVwLnB5IHRlc3QiCisgIHdoaWNoIG5vdyBoYXMgYSBnZW5lcmljICItYSIgb3IgIi0tcHl0
ZXN0LWFyZ3MiIG9wdGlvbiB3aGVyZSB5b3UKKyAgY2FuIHBhc3MgYWRkaXRpb25hbCBvcHRpb25z
IGFzIGEgcXVvdGVkIHN0cmluZy4gIFRoYW5rcyBUcmV2b3IgQmVrb2xheS4KKworLSBzaW1wbGlm
aWVkIGludGVybmFsIGNhcHR1cmluZyBtZWNoYW5pc20gYW5kIG1hZGUgaXQgbW9yZSByb2J1c3QK
KyAgYWdhaW5zdCB0ZXN0cyBvciBzZXR1cHMgY2hhbmdpbmcgRkQxL0ZEMiwgYWxzbyBiZXR0ZXIg
aW50ZWdyYXRlZAorICBub3cgd2l0aCBweXRlc3QucGRiKCkgaW4gc2luZ2xlIHRlc3RzLgorCist
IGltcHJvdmVtZW50cyB0byBweXRlc3QncyBvd24gdGVzdC1zdWl0ZSBsZWFrYWdlIGRldGVjdGlv
biwgY291cnRlc3kgb2YgUFJzCisgIGZyb20gTWFyYyBBYnJhbW93aXR6CisKKy0gZml4IGlzc3Vl
NDkyOiBhdm9pZCBsZWFrIGluIHRlc3Rfd3JpdGVvcmcuICBUaGFua3MgTWFyYyBBYnJhbW93aXR6
LgorCistIGZpeCBpc3N1ZTQ5MzogZG9uJ3QgcnVuIHRlc3RzIGluIGRvYyBkaXJlY3Rvcnkgd2l0
aCBgYHB5dGhvbiBzZXR1cC5weSB0ZXN0YGAKKyAgKHVzZSB0b3ggLWUgZG9jdGVzdGluZyBmb3Ig
dGhhdCkKKworLSBmaXggaXNzdWU0ODY6IGJldHRlciByZXBvcnRpbmcgYW5kIGhhbmRsaW5nIG9m
IGVhcmx5IGNvbmZ0ZXN0IGxvYWRpbmcgZmFpbHVyZXMKKworLSBzb21lIGNsZWFudXAgYW5kIHNp
bXBsaWZpY2F0aW9uIG9mIGludGVybmFsIGNvbmZ0ZXN0IGhhbmRsaW5nLgorCistIHdvcmsgYSBi
aXQgaGFyZGVyIHRvIGJyZWFrIHJlZmVyZW5jZSBjeWNsZXMgd2hlbiBjYXRjaGluZyBleGNlcHRp
b25zLgorICBUaGFua3MgSnVya28gR29zcG9kbmV0aWMuCisKKy0gZml4IGlzc3VlNDQzOiBmaXgg
c2tpcCBleGFtcGxlcyB0byB1c2UgcHJvcGVyIGNvbXBhcmlzb24uICBUaGFua3MgQWxleAorICBH
cm9lbmhvbG0uCisKKy0gc3VwcG9ydCBub3NlLXN0eWxlIGBgX190ZXN0X19gYCBhdHRyaWJ1dGUg
b24gbW9kdWxlcywgY2xhc3NlcyBhbmQKKyAgZnVuY3Rpb25zLCBpbmNsdWRpbmcgdW5pdHRlc3Qt
c3R5bGUgQ2xhc3Nlcy4gIElmIHNldCB0byBGYWxzZSwgdGhlCisgIHRlc3Qgd2lsbCBub3QgYmUg
Y29sbGVjdGVkLgorCistIGZpeCBpc3N1ZTUxMjogc2hvdyAiPG5vdHNldD4iIGZvciBhcmd1bWVu
dHMgd2hpY2ggbWlnaHQgbm90IGJlIHNldAorICBpbiBtb25rZXlwYXRjaCBwbHVnaW4uICBJbXBy
b3ZlcyBvdXRwdXQgaW4gZG9jdW1lbnRhdGlvbi4KKworCisyLjUuMgorPT09PT0KKworLSBmaXgg
aXNzdWU0MDkgLS0gYmV0dGVyIGludGVyb3BlcmF0ZSB3aXRoIGN4X2ZyZWV6ZSBieSBub3QKKyAg
dHJ5aW5nIHRvIGltcG9ydCBmcm9tIGNvbGxlY3Rpb25zLmFiYyB3aGljaCBjYXVzZXMgcHJvYmxl
bXMKKyAgZm9yIHB5MjcvY3hfZnJlZXplLiAgVGhhbmtzIFdvbGZnYW5nIEwuIGZvciByZXBvcnRp
bmcgYW5kIHRyYWNraW5nIGl0IGRvd24uCisKKy0gZml4ZWQgZG9jcyBhbmQgY29kZSB0byB1c2Ug
InB5dGVzdCIgaW5zdGVhZCBvZiAicHkudGVzdCIgYWxtb3N0IGV2ZXJ5d2hlcmUuCisgIFRoYW5r
cyBKdXJrbyBHb3Nwb2RuZXRpYyBmb3IgdGhlIGNvbXBsZXRlIFBSLgorCistIGZpeCBpc3N1ZTQy
NTogbWVudGlvbiBhdCBlbmQgb2YgInB5LnRlc3QgLWgiIHRoYXQgLS1tYXJrZXJzCisgIGFuZCAt
LWZpeHR1cmVzIHdvcmsgYWNjb3JkaW5nIHRvIHNwZWNpZmllZCB0ZXN0IHBhdGggKG9yIGN1cnJl
bnQgZGlyKQorCistIGZpeCBpc3N1ZTQxMzogZXhjZXB0aW9ucyB3aXRoIHVuaWNvZGUgYXR0cmli
dXRlcyBhcmUgbm93IHByaW50ZWQKKyAgY29ycmVjdGx5IGFsc28gb24gcHl0aG9uMiBhbmQgd2l0
aCBweXRlc3QteGRpc3QgcnVucy4gKHRoZSBmaXgKKyAgcmVxdWlyZXMgcHktMS40LjIwKQorCist
IGNvcHksIGNsZWFudXAgYW5kIGludGVncmF0ZSBweS5pbyBjYXB0dXJlCisgIGZyb20gcHlsaWIg
MS40LjIwLmRldjIgKHJldiAxM2Q5YWY5NTU0N2UpCisKKy0gYWRkcmVzcyBpc3N1ZTQxNjogY2xh
cmlmeSBkb2NzIGFzIHRvIGNvbmZ0ZXN0LnB5IGxvYWRpbmcgc2VtYW50aWNzCisKKy0gZml4IGlz
c3VlNDI5OiBjb21wYXJpbmcgYnl0ZSBzdHJpbmdzIHdpdGggbm9uLWFzY2lpIGNoYXJzIGluIGFz
c2VydAorICBleHByZXNzaW9ucyBub3cgd29yayBiZXR0ZXIuICBUaGFua3MgRmxvcmlzIEJydXlu
b29naGUuCisKKy0gbWFrZSBjYXBmZC9jYXBzeXMuY2FwdHVyZSBwcml2YXRlLCBpdHMgdW51c2Vk
IGFuZCBzaG91bGRudCBiZSBleHBvc2VkCisKKworMi41LjEKKz09PT09CisKKy0gbWVyZ2UgbmV3
IGRvY3VtZW50YXRpb24gc3R5bGluZyBQUiBmcm9tIFRvYmlhcyBCaWVuaWVrLgorCistIGZpeCBp
c3N1ZTQwMzogYWxsb3cgcGFyYW1ldHJpemUgb2YgbXVsdGlwbGUgc2FtZS1uYW1lIGZ1bmN0aW9u
cyB3aXRoaW4KKyAgYSBjb2xsZWN0aW9uIG5vZGUuICBUaGFua3MgQW5kcmVhcyBLbG9lY2tuZXIg
YW5kIEFsZXggR2F5bm9yIGZvciByZXBvcnRpbmcKKyAgYW5kIGFuYWx5c2lzLgorCistIEFsbG93
IHBhcmFtZXRlcml6ZWQgZml4dHVyZXMgdG8gc3BlY2lmeSB0aGUgSUQgb2YgdGhlIHBhcmFtZXRl
cnMgYnkKKyAgYWRkaW5nIGFuIGlkcyBhcmd1bWVudCB0byBweXRlc3QuZml4dHVyZSgpIGFuZCBw
eXRlc3QueWllbGRfZml4dHVyZSgpLgorICBUaGFua3MgRmxvcmlzIEJydXlub29naGUuCisKKy0g
Zml4IGlzc3VlNDA0IGJ5IGFsd2F5cyB1c2luZyB0aGUgYmluYXJ5IHhtbCBlc2NhcGUgaW4gdGhl
IGp1bml0eG1sCisgIHBsdWdpbi4gIFRoYW5rcyBSb25ueSBQZmFubnNjaG1pZHQuCisKKy0gZml4
IGlzc3VlNDA3OiBmaXggYWRkb3B0aW9uIGRvY3N0cmluZyB0byBwb2ludCB0byBhcmdwYXJzZSBp
bnN0ZWFkIG9mCisgIG9wdHBhcnNlLiBUaGFua3MgRGFuaWVsIEQuIFdyaWdodC4KKworCisKKzIu
NS4wCis9PT09PQorCistIGRyb3BwZWQgcHl0aG9uMi41IGZyb20gYXV0b21hdGVkIHJlbGVhc2Ug
dGVzdGluZyBvZiBweXRlc3QgaXRzZWxmCisgIHdoaWNoIG1lYW5zIGl0J3MgcHJvYmFibHkgZ29p
bmcgdG8gYnJlYWsgc29vbiAoYnV0IHN0aWxsIHdvcmtzCisgIHdpdGggdGhpcyByZWxlYXNlIHdl
IGJlbGlldmUpLgorCistIHNpbXBsaWZpZWQgYW5kIGZpeGVkIGltcGxlbWVudGF0aW9uIGZvciBj
YWxsaW5nIGZpbmFsaXplcnMgd2hlbgorICBwYXJhbWV0cml6ZWQgZml4dHVyZXMgb3IgZnVuY3Rp
b24gYXJndW1lbnRzIGFyZSBpbnZvbHZlZC4gIGZpbmFsaXphdGlvbgorICBpcyBub3cgcGVyZm9y
bWVkIGxhemlseSBhdCBzZXR1cCB0aW1lIGluc3RlYWQgb2YgaW4gdGhlICJ0ZWFyZG93biBwaGFz
ZSIuCisgIFdoaWxlIHRoaXMgbWlnaHQgc291bmQgb2RkIGF0IGZpcnN0LCBpdCBoZWxwcyB0byBl
bnN1cmUgdGhhdCB3ZSBhcmUKKyAgY29ycmVjdGx5IGhhbmRsaW5nIHNldHVwL3RlYXJkb3duIGV2
ZW4gaW4gY29tcGxleCBjb2RlLiAgVXNlci1sZXZlbCBjb2RlCisgIHNob3VsZCBub3QgYmUgYWZm
ZWN0ZWQgdW5sZXNzIGl0J3MgaW1wbGVtZW50aW5nIHRoZSBweXRlc3RfcnVudGVzdF90ZWFyZG93
bgorICBob29rIGFuZCBleHBlY3RpbmcgY2VydGFpbiBmaXh0dXJlIGluc3RhbmNlcyBhcmUgdG9y
biBkb3duIHdpdGhpbiAodmVyeQorICB1bmxpa2VseSBhbmQgd291bGQgaGF2ZSBiZWVuIHVucmVs
aWFibGUgYW55d2F5KS4KKworLSBQUjkwOiBhZGQgLS1jb2xvcj15ZXN8bm98YXV0byBvcHRpb24g
dG8gZm9yY2UgdGVybWluYWwgY29sb3JpbmcKKyAgbW9kZSAoImF1dG8iIGlzIGRlZmF1bHQpLiAg
VGhhbmtzIE1hcmMgQWJyYW1vd2l0ei4KKworLSBmaXggaXNzdWUzMTkgLSBjb3JyZWN0bHkgc2hv
dyB1bmljb2RlIGluIGFzc2VydGlvbiBlcnJvcnMuICBNYW55CisgIHRoYW5rcyB0byBGbG9yaXMg
QnJ1eW5vb2doZSBmb3IgdGhlIGNvbXBsZXRlIFBSLiAgQWxzbyBtZWFucworICB3ZSBkZXBlbmQg
b24gcHk+PTEuNC4xOSBub3cuCisKKy0gZml4IGlzc3VlMzk2IC0gY29ycmVjdGx5IHNvcnQgYW5k
IGZpbmFsaXplIGNsYXNzLXNjb3BlZCBwYXJhbWV0cml6ZWQKKyAgdGVzdHMgaW5kZXBlbmRlbnRs
eSBmcm9tIG51bWJlciBvZiBtZXRob2RzIG9uIHRoZSBjbGFzcy4KKworLSByZWZpeCBpc3N1ZTMy
MyBpbiBhIGJldHRlciB3YXkgLS0gcGFyYW1ldHJpemF0aW9uIHNob3VsZCBub3cgbmV2ZXIKKyAg
Y2F1c2UgUnVudGltZSBSZWN1cnNpb24gZXJyb3JzIGJlY2F1c2UgdGhlIHVuZGVybHlpbmcgYWxn
b3JpdGhtCisgIGZvciByZS1vcmRlcmluZyB0ZXN0cyBwZXItc2NvcGUvcGVyLWZpeHR1cmUgaXMg
bm90IHJlY3Vyc2l2ZQorICBhbnltb3JlIChpdCB3YXMgdGFpbC1jYWxsIHJlY3Vyc2l2ZSBiZWZv
cmUgd2hpY2ggY291bGQgbGVhZAorICB0byBwcm9ibGVtcyBmb3IgbW9yZSB0aGFuID45NjYgbm9u
LWZ1bmN0aW9uIHNjb3BlZCBwYXJhbWV0ZXJzKS4KKworLSBmaXggaXNzdWUyOTAgLSB0aGVyZSBp
cyBwcmVsaW1pbmFyeSBzdXBwb3J0IG5vdyBmb3IgcGFyYW1ldHJpemluZworICB3aXRoIHJlcGVh
dGVkIHNhbWUgdmFsdWVzIChzb21ldGltZXMgdXNlZnVsIHRvIHRvIHRlc3QgaWYgY2FsbGluZwor
ICBhIHNlY29uZCB0aW1lIHdvcmtzIGFzIHdpdGggdGhlIGZpcnN0IHRpbWUpLgorCistIGNsb3Nl
IGlzc3VlMjQwIC0gZG9jdW1lbnQgcHJlY2lzZWx5IGhvdyBweXRlc3QgbW9kdWxlIGltcG9ydGlu
ZworICB3b3JrcywgZGlzY3VzcyB0aGUgdHdvIGNvbW1vbiB0ZXN0IGRpcmVjdG9yeSBsYXlvdXRz
LCBhbmQgaG93IGl0CisgIGludGVyYWN0cyB3aXRoIFBFUDQyMC1uYW1lc3BhY2UgcGFja2FnZXMu
CisKKy0gZml4IGlzc3VlMjQ2IGZpeCBmaW5hbGl6ZXIgb3JkZXIgdG8gYmUgTElGTyBvbiBpbmRl
cGVuZGVudCBmaXh0dXJlcworICBkZXBlbmRpbmcgb24gYSBwYXJhbWV0cml6ZWQgaGlnaGVyLXRo
YW4tZnVuY3Rpb24gc2NvcGVkIGZpeHR1cmUuCisgICh3YXMgcXVpdGUgc29tZSBlZmZvcnQgc28g
cGxlYXNlIGJlYXIgd2l0aCB0aGUgY29tcGxleGl0eSBvZiB0aGlzIHNlbnRlbmNlIDopCisgIFRo
YW5rcyBSYWxwaCBTY2htaXR0IGZvciB0aGUgcHJlY2lzZSBmYWlsdXJlIGV4YW1wbGUuCisKKy0g
Zml4IGlzc3VlMjQ0IGJ5IGltcGxlbWVudGluZyBzcGVjaWFsIGluZGV4IGZvciBwYXJhbWV0ZXJz
IHRvIG9ubHkgdXNlCisgIGluZGljZXMgZm9yIHBhcmFtZW50cml6ZWQgdGVzdCBpZHMKKworLSBm
aXggaXNzdWUyODcgYnkgcnVubmluZyBhbGwgZmluYWxpemVycyBidXQgc2F2aW5nIHRoZSBleGNl
cHRpb24KKyAgZnJvbSB0aGUgZmlyc3QgZmFpbGluZyBmaW5hbGl6ZXIgYW5kIHJlLXJhaXNpbmcg
aXQgc28gdGVhcmRvd24gd2lsbAorICBzdGlsbCBoYXZlIGZhaWxlZC4gIFdlIHJlcmFpc2UgdGhl
IGZpcnN0IGZhaWxpbmcgZXhjZXB0aW9uIGJlY2F1c2UKKyAgaXQgbWlnaHQgYmUgdGhlIGNhdXNl
IGZvciBvdGhlciBmaW5hbGl6ZXJzIHRvIGZhaWwuCisKKy0gZml4IG9yZGVyaW5nIHdoZW4gbW9j
ay5wYXRjaCBvciBvdGhlciBzdGFuZGFyZCBkZWNvcmF0b3Itd3JhcHBpbmdzCisgIGFyZSB1c2Vk
IHdpdGggdGVzdCBtZXRob2RzLiAgVGhpcyBmaXh1ZXMgaXNzdWUzNDYgYW5kIHNob3VsZAorICBo
ZWxwIHdpdGggcmFuZG9tICJ4ZGlzdCIgY29sbGVjdGlvbiBmYWlsdXJlcy4gIFRoYW5rcyB0bwor
ICBSb25ueSBQZmFubnNjaG1pZHQgYW5kIERvbmFsZCBTdHVmZnQgZm9yIGhlbHBpbmcgdG8gaXNv
bGF0ZSBpdC4KKworLSBmaXggaXNzdWUzNTcgLSBzcGVjaWFsIGNhc2UgIi1rIiBleHByZXNzaW9u
cyB0byBhbGxvdyBmb3IKKyAgZmlsdGVyaW5nIHdpdGggc2ltcGxlIHN0cmluZ3MgdGhhdCBhcmUg
bm90IHZhbGlkIHB5dGhvbiBleHByZXNzaW9ucy4KKyAgRXhhbXBsZXM6ICItayAxLjMiIG1hdGNo
ZXMgYWxsIHRlc3RzIHBhcmFtZXRyaXplZCB3aXRoIDEuMy4KKyAgIi1rIE5vbmUiIGZpbHRlcnMg
YWxsIHRlc3RzIHRoYXQgaGF2ZSAiTm9uZSIgaW4gdGhlaXIgbmFtZQorICBhbmQgY29udmVyc2Vs
eSAiLWsgJ25vdCBOb25lJyIuCisgIFByZXZpb3VzbHkgdGhlc2UgZXhhbXBsZXMgd291bGQgcmFp
c2Ugc3ludGF4IGVycm9ycy4KKworLSBmaXggaXNzdWUzODQgYnkgcmVtb3ZpbmcgdGhlIHRyaWFs
IHN1cHBvcnQgY29kZQorICBzaW5jZSB0aGUgdW5pdHRlc3QgY29tcGF0IGVuaGFuY2VtZW50cyBh
bGxvdworICB0cmlhbCB0byBoYW5kbGUgaXQgb24gaXRzIG93bgorCistIGRvbid0IGhpZGUgYW4g
SW1wb3J0RXJyb3Igd2hlbiBpbXBvcnRpbmcgYSBwbHVnaW4gcHJvZHVjZXMgb25lLgorICBmaXhl
cyBpc3N1ZTM3NS4KKworLSBmaXggaXNzdWUyNzUgLSBhbGxvdyB1c2VmaXh0dXJlcyBhbmQgYXV0
b3VzZSBmaXh0dXJlcworICBmb3IgcnVubmluZyBkb2N0ZXN0IHRleHQgZmlsZXMuCisKKy0gZml4
IGlzc3VlMzgwIGJ5IG1ha2luZyAtLXJlc3VsdGxvZyBvbmx5IHJlbHkgb24gbG9uZ3JlcHIgaW5z
dGVhZAorICBvZiB0aGUgInJlcHJjcmFzaCIgYXR0cmlidXRlIHdoaWNoIG9ubHkgZXhpc3RzIHNv
bWV0aW1lcy4KKworLSBhZGRyZXNzIGlzc3VlMTIyOiBhbGxvdyBAcHl0ZXN0LmZpeHR1cmUocGFy
YW1zPWl0ZXJhdG9yKSBieSBleHBsb2RpbmcKKyAgaW50byBhIGxpc3QgZWFybHkgb24uCisKKy0g
Zml4IHBleHBlY3QtMy4wIGNvbXBhdGliaWxpdHkgZm9yIHB5dGVzdCdzIG93biB0ZXN0cy4KKyAg
KGZpeGVzIGlzc3VlMzg2KQorCistIGFsbG93IG5lc3RlZCBwYXJhbWV0cml6ZS12YWx1ZSBtYXJr
ZXJzLCB0aGFua3MgSmFtZXMgTGFuIGZvciB0aGUgUFIuCisKKy0gZml4IHVuaWNvZGUgaGFuZGxp
bmcgd2l0aCBuZXcgbW9ua2V5cGF0Y2guc2V0YXR0cihpbXBvcnRfcGF0aCwgdmFsdWUpCisgIEFQ
SS4gIFRoYW5rcyBSb2IgRGVubmlzLiAgRml4ZXMgaXNzdWUzNzEuCisKKy0gZml4IHVuaWNvZGUg
aGFuZGxpbmcgd2l0aCBqdW5pdHhtbCwgZml4ZXMgaXNzdWUzNjguCisKKy0gSW4gYXNzZXJ0aW9u
IHJld3JpdGluZyBtb2RlIG9uIFB5dGhvbiAyLCBmaXggdGhlIGRldGVjdGlvbiBvZiBjb2RpbmcK
KyAgY29va2llcy4gU2VlIGlzc3VlICMzMzAuCisKKy0gbWFrZSAiLS1ydW54ZmFpbCIgdHVybiBp
bXBlcmF0aXZlIHB5dGVzdC54ZmFpbCBjYWxscyBpbnRvIG5vIG9wcworICAoaXQgYWxyZWFkeSBk
aWQgbmV1dHJhbGl6ZSBweXRlc3QubWFyay54ZmFpbCBtYXJrZXJzKQorCistIHJlZmluZSBweXRl
c3QgLyBwa2dfcmVzb3VyY2VzIGludGVyYWN0aW9uczogVGhlIEFzc2VydGlvblJld3JpdGluZ0hv
b2sKKyAgUEVQMzAyIGNvbXBsaWFudCBsb2FkZXIgbm93IHJlZ2lzdGVycyBpdHNlbGYgd2l0aCBz
ZXR1cHRvb2xzL3BrZ19yZXNvdXJjZXMKKyAgcHJvcGVybHkgc28gdGhhdCB0aGUgcGtnX3Jlc291
cmNlcy5yZXNvdXJjZV9zdHJlYW0gbWV0aG9kIHdvcmtzIHByb3Blcmx5LgorICBGaXhlcyBpc3N1
ZTM2Ni4gIFRoYW5rcyBmb3IgdGhlIGludmVzdGlnYXRpb25zIGFuZCBmdWxsIFBSIHRvIEphc29u
IFIuIENvb21icy4KKworLSBweXRlc3Rjb25maWcgZml4dHVyZSBpcyBub3cgc2Vzc2lvbi1zY29w
ZWQgYXMgaXQgaXMgdGhlIHNhbWUgb2JqZWN0IGR1cmluZyB0aGUKKyAgd2hvbGUgdGVzdCBydW4u
ICBGaXhlcyBpc3N1ZTM3MC4KKworLSBhdm9pZCBvbmUgc3VycHJpc2luZyBjYXNlIG9mIG1hcmtl
ciBtYWxmdW5jdGlvbi9jb25mdXNpb246OgorCisgICAgICBAcHl0ZXN0Lm1hcmsuc29tZShsYW1i
ZGEgYXJnOiAuLi4pCisgICAgICBkZWYgdGVzdF9mdW5jdGlvbigpOgorCisgIHdvdWxkIG5vdCB3
b3JrIGNvcnJlY3RseSBiZWNhdXNlIHB5dGVzdCBhc3N1bWVzIEBweXRlc3QubWFyay5zb21lCisg
IGdldHMgYSBmdW5jdGlvbiB0byBiZSBkZWNvcmF0ZWQgYWxyZWFkeS4gIFdlIG5vdyBhdCBsZWFz
dCBkZXRlY3QgaWYgdGhpcworICBhcmcgaXMgYW4gbGFtYmRhIGFuZCB0aHVzIHRoZSBleGFtcGxl
IHdpbGwgd29yay4gIFRoYW5rcyBBbGV4IEdheW5vcgorICBmb3IgYnJpbmdpbmcgaXQgdXAuCisK
Ky0geGZhaWwgYSB0ZXN0IG9uIHB5cHkgdGhhdCBjaGVja3Mgd3JvbmcgZW5jb2RpbmcvYXNjaWkg
KHB5cHkgZG9lcworICBub3QgZXJyb3Igb3V0KS4gZml4ZXMgaXNzdWUzODUuCisKKy0gaW50ZXJu
YWxseSBtYWtlIHZhcm5hbWVzKCkgZGVhbCB3aXRoIGNsYXNzZXMncyBfX2luaXRfXywKKyAgYWx0
aG91Z2ggaXQncyBub3QgbmVlZGVkIGJ5IHB5dGVzdCBpdHNlbGYgYXRtLiAgQWxzbworICBmaXgg
Y2FjaGluZy4gIEZpeGVzIGlzc3VlMzc2LgorCistIGZpeCBpc3N1ZTIyMSAtIGhhbmRsZSBpbXBv
cnRpbmcgb2YgbmFtZXNwYWNlLXBhY2thZ2Ugd2l0aCBubworICBfX2luaXRfXy5weSBwcm9wZXJs
eS4KKworLSByZWZhY3RvciBpbnRlcm5hbCBGaXh0dXJlUmVxdWVzdCBoYW5kbGluZyB0byBhdm9p
ZCBtb25rZXlwYXRjaGluZy4KKyAgT25lIG9mIHRoZSBwb3NpdGl2ZSB1c2VyLWZhY2luZyBlZmZl
Y3RzIGlzIHRoYXQgdGhlICJyZXF1ZXN0IiBvYmplY3QKKyAgY2FuIG5vdyBiZSB1c2VkIGluIGNs
b3N1cmVzLgorCistIGZpeGVkIHZlcnNpb24gY29tcGFyaXNvbiBpbiBweXRlc3QuaW1wb3J0c2tp
cChtb2RuYW1lLCBtaW52ZXJzdHJpbmcpCisKKy0gZml4IGlzc3VlMzc3IGJ5IGNsYXJpZnlpbmcg
aW4gdGhlIG5vc2UtY29tcGF0IGRvY3MgdGhhdCBweXRlc3QKKyAgZG9lcyBub3QgZHVwbGljYXRl
IHRoZSB1bml0dGVzdC1BUEkgaW50byB0aGUgInBsYWluIiBuYW1lc3BhY2UuCisKKy0gZml4IHZl
cmJvc2UgcmVwb3J0aW5nIGZvciBAbW9jaydkIHRlc3QgZnVuY3Rpb25zCisKKzIuNC4yCis9PT09
PQorCistIG9uIFdpbmRvd3MgcmVxdWlyZSBjb2xvcmFtYSBhbmQgYSBuZXdlciBweSBsaWIgc28g
dGhhdCBweS5pby5UZXJtaW5hbFdyaXRlcigpCisgIG5vdyB1c2VzIGNvbG9yYW1hIGluc3RlYWQg
b2YgaXRzIG93biBjdHlwZXMgaGFja3MuIChmaXhlcyBpc3N1ZTM2NSkKKyAgdGhhbmtzIFBhdWwg
TW9vcmUgZm9yIGJyaW5naW5nIGl0IHVwLgorCistIGZpeCAiLWsiIG1hdGNoaW5nIG9mIHRlc3Rz
IHdoZXJlICJyZXByIiBhbmQgImF0dHIiIGFuZCBvdGhlciBuYW1lcyB3b3VsZAorICBjYXVzZSB3
cm9uZyBtYXRjaGVzIGJlY2F1c2Ugb2YgYW4gaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gcXVpcmsK
KyAgKGRvbid0IGFzaykgd2hpY2ggaXMgbm93IHByb3Blcmx5IGltcGxlbWVudGVkLiBmaXhlcyBp
c3N1ZTM0NS4KKworLSBhdm9pZCB0bXBkaXIgZml4dHVyZSB0byBjcmVhdGUgdG9vIGxvbmcgZmls
ZW5hbWVzIGVzcGVjaWFsbHkKKyAgd2hlbiBwYXJhbWV0cml6YXRpb24gaXMgdXNlZCAoaXNzdWUz
NTQpCisKKy0gZml4IHB5dGVzdC1wZXA4IGFuZCBweXRlc3QtZmxha2VzIC8gcHl0ZXN0IGludGVy
YWN0aW9ucworICAoY29sbGVjdGlvbiBuYW1lcyBpbiBtYXJrIHBsdWdpbiB3YXMgYXNzdW1pbmcg
YW4gaXRlbSBhbHdheXMKKyAgaGFzIGEgZnVuY3Rpb24gd2hpY2ggaXMgbm90IHRydWUgZm9yIHRo
b3NlIHBsdWdpbnMgZXRjLikKKyAgVGhhbmtzIEFuZGkgWmVpZGxlci4KKworLSBpbnRyb2R1Y2Ug
bm9kZS5nZXRfbWFya2VyL25vZGUuYWRkX21hcmtlciBBUEkgZm9yIHBsdWdpbnMKKyAgbGlrZSBw
eXRlc3QtcGVwOCBhbmQgcHl0ZXN0LWZsYWtlcyB0byBhdm9pZCB0aGUgbWVzc3kKKyAgZGV0YWls
cyBvZiB0aGUgbm9kZS5rZXl3b3JkcyAgcHNldWRvLWRpY3RzLiAgQWRhcHRlZAorICBkb2NzLgor
CistIHJlbW92ZSBhdHRlbXB0IHRvICJkdXAiIHN0ZG91dCBhdCBzdGFydHVwIGFzIGl0J3MgaWNr
eS4KKyAgdGhlIG5vcm1hbCBjYXB0dXJpbmcgc2hvdWxkIGNhdGNoIGVub3VnaCBwb3NzaWJpbGl0
aWVzCisgIG9mIHRlc3RzIG1lc3NpbmcgdXAgc3RhbmRhcmQgRkRzLgorCistIGFkZCBwbHVnaW5t
YW5hZ2VyLmRvX2NvbmZpZ3VyZShjb25maWcpIGFzIGEgbGluayB0bworICBjb25maWcuZG9fY29u
ZmlndXJlKCkgZm9yIHBsdWdpbi1jb21wYXRpYmlsaXR5CisKKzIuNC4xCis9PT09PQorCistIFdo
ZW4gdXNpbmcgcGFyc2VyLmFkZG9wdGlvbigpIHVuaWNvZGUgYXJndW1lbnRzIHRvIHRoZQorICAi
dHlwZSIga2V5d29yZCBzaG91bGQgYWxzbyBiZSBjb252ZXJ0ZWQgdG8gdGhlIHJlc3BlY3RpdmUg
dHlwZXMuCisgIHRoYW5rcyBGbG9yaXMgQnJ1eW5vb2doZSwgQGRub3pheS4gKGZpeGVzIGlzc3Vl
MzYwIGFuZCBpc3N1ZTM2MikKKworLSBmaXggZG90dGVkIGZpbGVuYW1lIGNvbXBsZXRpb24gd2hl
biB1c2luZyBhcmdjb21wbGV0ZQorICB0aGFua3MgQW50aG9uIHZhbiBkZXIgTmV1dGguIChmaXhl
cyBpc3N1ZTM2MSkKKworLSBmaXggcmVncmVzc2lvbiB3aGVuIGEgMS10dXBsZSAoImFyZyIsKSBp
cyB1c2VkIGZvciBzcGVjaWZ5aW5nCisgIHBhcmFtZXRyaXphdGlvbiAodGhlIHZhbHVlcyBvZiB0
aGUgcGFyYW1ldHJpemF0aW9uIHdlcmUgcGFzc2VkCisgIG5lc3RlZCBpbiBhIHR1cGxlKS4gIFRo
YW5rcyBEb25hbGQgU3R1ZmZ0LgorCistIG1lcmdlIGRvYyB0eXBvIGZpeGVzLCB0aGFua3MgQW5k
eSBEaXJuYmVyZ2VyCisKKzIuNAorPT09CisKK2tub3duIGluY29tcGF0aWJpbGl0aWVzOgorCist
IGlmIGNhbGxpbmcgLS1nZW5zY3JpcHQgZnJvbSBweXRob24yLjcgb3IgYWJvdmUsIHlvdSBvbmx5
IGdldCBhCisgIHN0YW5kYWxvbmUgc2NyaXB0IHdoaWNoIHdvcmtzIG9uIHB5dGhvbjIuNyBvciBh
Ym92ZS4gIFVzZSBQeXRob24yLjYKKyAgdG8gYWxzbyBnZXQgYSBweXRob24yLjUgY29tcGF0aWJs
ZSB2ZXJzaW9uLgorCistIGFsbCB4dW5pdC1zdHlsZSB0ZWFyZG93biBtZXRob2RzIChub3NlLXN0
eWxlLCBweXRlc3Qtc3R5bGUsCisgIHVuaXR0ZXN0LXN0eWxlKSB3aWxsIG5vdCBiZSBjYWxsZWQg
aWYgdGhlIGNvcnJlc3BvbmRpbmcgc2V0dXAgbWV0aG9kIGZhaWxlZCwKKyAgc2VlIGlzc3VlMzIy
IGJlbG93LgorCistIHRoZSBweXRlc3RfcGx1Z2luX3VucmVnaXN0ZXIgaG9vayB3YXNuJ3QgZXZl
ciBwcm9wZXJseSBjYWxsZWQKKyAgYW5kIHRoZXJlIGlzIG5vIGtub3duIGltcGxlbWVudGF0aW9u
IG9mIHRoZSBob29rIC0gc28gaXQgZ290IHJlbW92ZWQuCisKKy0gcHl0ZXN0LmZpeHR1cmUtZGVj
b3JhdGVkIGZ1bmN0aW9ucyBjYW5ub3QgYmUgZ2VuZXJhdG9ycyAoaS5lLiB1c2UKKyAgeWllbGQp
IGFueW1vcmUuICBUaGlzIGNoYW5nZSBtaWdodCBiZSByZXZlcnNlZCBpbiAyLjQuMSBpZiBpdCBj
YXVzZXMKKyAgdW5mb3Jlc2VlbiByZWFsLWxpZmUgaXNzdWVzLiAgSG93ZXZlciwgeW91IGNhbiBh
bHdheXMgd3JpdGUgYW5kIHJldHVybgorICBhbiBpbm5lciBmdW5jdGlvbi9nZW5lcmF0b3IgYW5k
IGNoYW5nZSB0aGUgZml4dHVyZSBjb25zdW1lciB0byBpdGVyYXRlCisgIG92ZXIgdGhlIHJldHVy
bmVkIGdlbmVyYXRvci4gIFRoaXMgY2hhbmdlIHdhcyBkb25lIGluIGxpZXUgb2YgdGhlIG5ldwor
ICBgYHB5dGVzdC55aWVsZF9maXh0dXJlYGAgZGVjb3JhdG9yLCBzZWUgYmVsb3cuCisKK25ldyBm
ZWF0dXJlczoKKworLSBleHBlcmltZW50YWxseSBpbnRyb2R1Y2UgYSBuZXcgYGBweXRlc3QueWll
bGRfZml4dHVyZWBgIGRlY29yYXRvcgorICB3aGljaCBhY2NlcHRzIGV4YWN0bHkgdGhlIHNhbWUg
cGFyYW1ldGVycyBhcyBweXRlc3QuZml4dHVyZSBidXQKKyAgbWFuZGF0ZXMgYSBgYHlpZWxkYGAg
c3RhdGVtZW50IGluc3RlYWQgb2YgYSBgYHJldHVybiBzdGF0ZW1lbnRgYCBmcm9tCisgIGZpeHR1
cmUgZnVuY3Rpb25zLiAgVGhpcyBhbGxvd3MgZGlyZWN0IGludGVncmF0aW9uIHdpdGggIndpdGgt
c3R5bGUiCisgIGNvbnRleHQgbWFuYWdlcnMgaW4gZml4dHVyZSBmdW5jdGlvbnMgYW5kIGdlbmVy
YWxseSBhdm9pZHMgcmVnaXN0ZXJpbmcKKyAgb2YgZmluYWxpemF0aW9uIGNhbGxiYWNrcyBpbiBm
YXZvdXIgb2YgdHJlYXRpbmcgdGhlICJhZnRlci15aWVsZCIgYXMKKyAgdGVhcmRvd24gY29kZS4g
IFRoYW5rcyBBbmRyZWFzIFBlbG1lLCBWbGFkaW1pciBLZWxlc2hldiwgRmxvcmlzCisgIEJydXlu
b29naGUsIFJvbm55IFBmYW5uc2NobWlkdCBhbmQgbWFueSBvdGhlcnMgZm9yIGRpc2N1c3Npb25z
LgorCistIGFsbG93IGJvb2xlYW4gZXhwcmVzc2lvbiBkaXJlY3RseSB3aXRoIHNraXBpZi94ZmFp
bAorICBpZiBhICJyZWFzb24iIGlzIGFsc28gc3BlY2lmaWVkLiAgUmV3b3JrIHNraXBwaW5nIGRv
Y3VtZW50YXRpb24KKyAgdG8gcmVjb21tZW5kICJjb25kaXRpb24gYXMgYm9vbGVhbnMiIGJlY2F1
c2UgaXQgcHJldmVudHMgc3VycHJpc2VzCisgIHdoZW4gaW1wb3J0aW5nIG1hcmtlcnMgYmV0d2Vl
biBtb2R1bGVzLiAgU3BlY2lmeWluZyBjb25kaXRpb25zCisgIGFzIHN0cmluZ3Mgd2lsbCByZW1h
aW4gZnVsbHkgc3VwcG9ydGVkLgorCistIHJlcG9ydGluZzogY29sb3IgdGhlIGxhc3QgbGluZSBy
ZWQgb3IgZ3JlZW4gZGVwZW5kaW5nIGlmCisgIGZhaWx1cmVzL2Vycm9ycyBvY2N1cnJlZCBvciBl
dmVyeXRoaW5nIHBhc3NlZC4gIHRoYW5rcyBDaHJpc3RpYW4KKyAgVGhldW5lcnQuCisKKy0gbWFr
ZSAiaW1wb3J0IHBkYiA7IHBkYi5zZXRfdHJhY2UoKSIgd29yayBuYXRpdmVseSB3cnQgY2FwdHVy
aW5nIChubworICAiLXMiIG5lZWRlZCBhbnltb3JlKSwgbWFraW5nIGBgcHl0ZXN0LnNldF90cmFj
ZSgpYGAgYSBtZXJlIHNob3J0Y3V0LgorCistIGZpeCBpc3N1ZTE4MTogLS1wZGIgbm93IGFsc28g
d29ya3Mgb24gY29sbGVjdCBlcnJvcnMgKGFuZAorICBvbiBpbnRlcm5hbCBlcnJvcnMpIC4gIFRo
aXMgd2FzIGltcGxlbWVudGVkIGJ5IGEgc2xpZ2h0IGludGVybmFsCisgIHJlZmFjdG9yaW5nIGFu
ZCB0aGUgaW50cm9kdWN0aW9uIG9mIGEgbmV3IGhvb2sKKyAgYGBweXRlc3RfZXhjZXB0aW9uX2lu
dGVyYWN0YGAgaG9vayAoc2VlIG5leHQgaXRlbSkuCisKKy0gZml4IGlzc3VlMzQxOiBpbnRyb2R1
Y2UgbmV3IGV4cGVyaW1lbnRhbCBob29rIGZvciBJREVzL3Rlcm1pbmFscyB0bworICBpbnRlcmNl
cHQgZGVidWdnaW5nOiBgYHB5dGVzdF9leGNlcHRpb25faW50ZXJhY3Qobm9kZSwgY2FsbCwgcmVw
b3J0KWBgLgorCistIG5ldyBtb25rZXlwYXRjaC5zZXRhdHRyKCkgdmFyaWFudCB0byBwcm92aWRl
IGEgc2hvcnRlcgorICBpbnZvY2F0aW9uIGZvciBwYXRjaGluZyBvdXQgY2xhc3Nlcy9mdW5jdGlv
bnMgZnJvbSBtb2R1bGVzOgorCisgICAgIG1vbmtleXBhdGNoLnNldGF0dHIoInJlcXVlc3RzLmdl
dCIsIG15ZnVuYykKKworICB3aWxsIHJlcGxhY2UgdGhlICJnZXQiIGZ1bmN0aW9uIG9mIHRoZSAi
cmVxdWVzdHMiIG1vZHVsZSB3aXRoIGBgbXlmdW5jYGAuCisKKy0gZml4IGlzc3VlMzIyOiB0ZWFy
RG93bkNsYXNzIGlzIG5vdCBydW4gaWYgc2V0VXBDbGFzcyBmYWlsZWQuIFRoYW5rcworICBNYXRo
aWV1IEFnb3BpYW4gZm9yIHRoZSBpbml0aWFsIGZpeC4gIEFsc28gbWFrZSBhbGwgb2YgcHl0ZXN0
L25vc2UKKyAgZmluYWxpemVyIG1pbWljayB0aGUgc2FtZSBnZW5lcmljIGJlaGF2aW91cjogaWYg
YSBzZXR1cFggZXhpc3RzIGFuZAorICBmYWlscywgZG9uJ3QgcnVuIHRlYXJkb3duWC4gIFRoaXMg
aW50ZXJuYWxseSBpbnRyb2R1Y2VzIGEgbmV3IG1ldGhvZAorICAibm9kZS5hZGRmaW5hbGl6ZXIo
KSIgaGVscGVyIHdoaWNoIGNhbiBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgdGhlIHNldHVwCisgIHBo
YXNlIG9mIGEgbm9kZS4KKworLSBzaW1wbGlmeSBweXRlc3QubWFyay5wYXJhbWV0cml6ZSgpIHNp
Z25hdHVyZTogYWxsb3cgdG8gcGFzcyBhCisgIENTVi1zZXBhcmF0ZWQgc3RyaW5nIHRvIHNwZWNp
ZnkgYXJnbmFtZXMuICBGb3IgZXhhbXBsZToKKyAgYGBweXRlc3QubWFyay5wYXJhbWV0cml6ZSgi
aW5wdXQsZXhwZWN0ZWQiLCAgWygxLDIpLCAoMiwzKV0pYGAKKyAgd29ya3MgYXMgd2VsbCBhcyB0
aGUgcHJldmlvdXM6CisgIGBgcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoKCJpbnB1dCIsICJleHBl
Y3RlZCIpLCAuLi4pYGAuCisKKy0gYWRkIHN1cHBvcnQgZm9yIHNldFVwTW9kdWxlL3RlYXJEb3du
TW9kdWxlIGRldGVjdGlvbiwgdGhhbmtzIEJyaWFuIE9ra2VuLgorCistIGludGVncmF0ZSB0YWIt
Y29tcGxldGlvbiBvbiBvcHRpb25zIHRocm91Z2ggdXNlIG9mICJhcmdjb21wbGV0ZSIuCisgIFRo
YW5rcyBBbnRob24gdmFuIGRlciBOZXV0IGZvciB0aGUgUFIuCisKKy0gY2hhbmdlIG9wdGlvbiBu
YW1lcyB0byBiZSBoeXBoZW4tc2VwYXJhdGVkIGxvbmcgb3B0aW9ucyBidXQga2VlcCB0aGUKKyAg
b2xkIHNwZWxsaW5nIGJhY2t3YXJkIGNvbXBhdGlibGUuICBweS50ZXN0IC1oIHdpbGwgb25seSBz
aG93IHRoZQorICBoeXBoZW5hdGVkIHZlcnNpb24sIGZvciBleGFtcGxlICItLWNvbGxlY3Qtb25s
eSIgYnV0ICItLWNvbGxlY3Rvbmx5IgorICB3aWxsIHJlbWFpbiB2YWxpZCBhcyB3ZWxsIChmb3Ig
YmFja3dhcmQtY29tcGF0IHJlYXNvbnMpLiAgTWFueSB0aGFua3MgdG8KKyAgQW50aG9uIHZhbiBk
ZXIgTmV1dCBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGFuZCB0byBIeW5layBTY2hsYXdhY2sgZm9y
CisgIHB1c2hpbmcgdXMuCisKKy0gZml4IGlzc3VlIDMwOCAtIGFsbG93IHRvIG1hcmsveGZhaWwv
c2tpcCBpbmRpdmlkdWFsIHBhcmFtZXRlciBzZXRzCisgIHdoZW4gcGFyYW1ldHJpemluZy4gIFRo
YW5rcyBCcmlhbm5hIExhdWdoZXIuCisKKy0gY2FsbCBuZXcgZXhwZXJpbWVudGFsIHB5dGVzdF9s
b2FkX2luaXRpYWxfY29uZnRlc3RzIGhvb2sgdG8gYWxsb3cKKyAgM3JkIHBhcnR5IHBsdWdpbnMg
dG8gZG8gc29tZXRoaW5nIGJlZm9yZSBhIGNvbmZ0ZXN0IGlzIGxvYWRlZC4KKworQnVnIGZpeGVz
OgorCistIGZpeCBpc3N1ZTM1OCAtIGNhcHR1cmluZyBvcHRpb25zIGFyZSBub3cgcGFyc2VkIG1v
cmUgcHJvcGVybHkKKyAgYnkgdXNpbmcgYSBuZXcgcGFyc2VyLnBhcnNlX2tub3duX2FyZ3MgbWV0
aG9kLgorCistIHB5dGVzdCBub3cgdXNlcyBhcmdwYXJzZSBpbnN0ZWFkIG9mIG9wdHBhcnNlICh0
aGFua3MgQW50aG9uKSB3aGljaAorICBtZWFucyB0aGF0ICJhcmdwYXJzZSIgaXMgYWRkZWQgYXMg
YSBkZXBlbmRlbmN5IGlmIGluc3RhbGxpbmcgaW50byBweXRob24yLjYKKyAgZW52aXJvbm1lbnRz
IG9yIGJlbG93LgorCistIGZpeCBpc3N1ZTMzMzogZml4IGEgY2FzZSBvZiBiYWQgdW5pdHRlc3Qv
cHl0ZXN0IGhvb2sgaW50ZXJhY3Rpb24uCisKKy0gUFIyNzogY29ycmVjdGx5IGhhbmRsZSBub3Nl
LlNraXBUZXN0IGR1cmluZyBjb2xsZWN0aW9uLiAgVGhhbmtzCisgIEFudG9uaW8gQ3VuaSwgUm9u
bnkgUGZhbm5zY2htaWR0LgorCistIGZpeCBpc3N1ZTM1NToganVuaXR4bWwgcHV0cyBuYW1lPSJw
eXRlc3QiIGF0dHJpYnV0ZSB0byB0ZXN0c3VpdGUgdGFnLgorCistIGZpeCBpc3N1ZTMzNjogYXV0
b3VzZSBmaXh0dXJlIGluIHBsdWdpbnMgc2hvdWxkIHdvcmsgYWdhaW4uCisKKy0gZml4IGlzc3Vl
Mjc5OiBpbXByb3ZlIG9iamVjdCBjb21wYXJpc29ucyBvbiBhc3NlcnRpb24gZmFpbHVyZQorICBm
b3Igc3RhbmRhcmQgZGF0YXR5cGVzIGFuZCByZWNvZ25pc2UgY29sbGVjdGlvbnMuYWJjLiAgVGhh
bmtzIHRvCisgIEJyaWFubmEgTGF1Z2hlciBhbmQgTWF0aGlldSBBZ29waWFuLgorCistIGZpeCBp
c3N1ZTMxNzogYXNzZXJ0aW9uIHJld3JpdGVyIHN1cHBvcnQgZm9yIHRoZSBpc19wYWNrYWdlIG1l
dGhvZAorCistIGZpeCBpc3N1ZTMzNTogZG9jdW1lbnQgcHkuY29kZS5FeGNlcHRpb25JbmZvKCkg
b2JqZWN0IHJldHVybmVkCisgIGZyb20gcHl0ZXN0LnJhaXNlcygpLCB0aGFua3MgTWF0aGlldSBB
Z29waWFuLgorCistIHJlbW92ZSBpbXBsaWNpdCBkaXN0cmlidXRlX3NldHVwIHN1cHBvcnQgZnJv
bSBzZXR1cC5weS4KKworLSBmaXggaXNzdWUzMDU6IGlnbm9yZSBhbnkgcHJvYmxlbXMgd2hlbiB3
cml0aW5nIHB5YyBmaWxlcy4KKworLSBTTy0xNzY2NDcwMjogY2FsbCBmaXh0dXJlIGZpbmFsaXpl
cnMgZXZlbiBpZiB0aGUgZml4dHVyZSBmdW5jdGlvbgorICBwYXJ0aWFsbHkgZmFpbGVkIChmaW5h
bGl6ZXJzIHdvdWxkIG5vdCBhbHdheXMgYmUgY2FsbGVkIGJlZm9yZSkKKworLSBmaXggaXNzdWUz
MjAgLSBmaXggY2xhc3Mgc2NvcGUgZm9yIGZpeHR1cmVzIHdoZW4gbWl4ZWQgd2l0aAorICBtb2R1
bGUtbGV2ZWwgZnVuY3Rpb25zLiAgVGhhbmtzIEFuYXRsb3kgQnViZW5rb2ZmLgorCistIHlvdSBj
YW4gc3BlY2lmeSAiLXEiIG9yICItcXEiIHRvIGdldCBkaWZmZXJlbnQgbGV2ZWxzIG9mICJxdWll
dGVyIgorICByZXBvcnRpbmcgKHRoYW5rcyBLYXRhcnp5bmEgSmFjaGltKQorCistIGZpeCBpc3N1
ZTMwMCAtIEZpeCBvcmRlciBvZiBjb25mdGVzdCBsb2FkaW5nIHdoZW4gc3RhcnRpbmcgcHkudGVz
dAorICBpbiBhIHN1YmRpcmVjdG9yeS4KKworLSBmaXggaXNzdWUzMjMgLSBzb3J0aW5nIG9mIG1h
bnkgbW9kdWxlLXNjb3BlZCBhcmcgcGFyYW1ldHJpemF0aW9ucworCistIG1ha2Ugc2Vzc2lvbmZp
bmlzaCBob29rcyBleGVjdXRlIHdpdGggdGhlIHNhbWUgY3dkLWNvbnRleHQgYXMgYXQKKyAgc2Vz
c2lvbiBzdGFydCAoaGVscHMgZml4IHBsdWdpbiBiZWhhdmlvdXIgd2hpY2ggd3JpdGUgb3V0cHV0
IGZpbGVzCisgIHdpdGggcmVsYXRpdmUgcGF0aCBzdWNoIGFzIHB5dGVzdC1jb3YpCisKKy0gZml4
IGlzc3VlMzE2IC0gcHJvcGVybHkgcmVmZXJlbmNlIGNvbGxlY3Rpb24gaG9va3MgaW4gZG9jcwor
CistIGZpeCBpc3N1ZSAzMDYgLSBjbGVhbnVwIG9mIC1rLy1tIG9wdGlvbnMgdG8gb25seSBtYXRj
aCBtYXJrZXJzL3Rlc3QKKyAgbmFtZXMva2V5d29yZHMgcmVzcGVjdGl2ZWx5LiAgVGhhbmtzIFdv
dXRlciB2YW4gQWNrb295LgorCistIGltcHJvdmVkIGRvY3Rlc3QgY291bnRpbmcgZm9yIGRvY3Rl
c3RzIGluIHB5dGhvbiBtb2R1bGVzIC0tCisgIGZpbGVzIHdpdGhvdXQgYW55IGRvY3Rlc3QgaXRl
bXMgd2lsbCBub3Qgc2hvdyB1cCBhbnltb3JlCisgIGFuZCBkb2N0ZXN0IGV4YW1wbGVzIGFyZSBj
b3VudGVkIGFzIHNlcGFyYXRlIHRlc3QgaXRlbXMuCisgIHRoYW5rcyBEYW5pbG8gQmVsbGluaS4K
KworLSBmaXggaXNzdWUyNDUgYnkgZGVwZW5kaW5nIG9uIHRoZSByZWxlYXNlZCBweS0xLjQuMTQK
KyAgd2hpY2ggZml4ZXMgcHkuaW8uZHVwZmlsZSB0byB3b3JrIHdpdGggZmlsZXMgd2l0aCBubwor
ICBtb2RlLiBUaGFua3MgSmFzb24gUi4gQ29vbWJzLgorCistIGZpeCBqdW5pdHhtbCBnZW5lcmF0
aW9uIHdoZW4gdGVzdCBvdXRwdXQgY29udGFpbnMgY29udHJvbCBjaGFyYWN0ZXJzLAorICBhZGRy
ZXNzaW5nIGlzc3VlMjY3LCB0aGFua3MgSmFhcCBCcm9la2h1aXplbgorCistIGZpeCBpc3N1ZTMz
ODogaG9ub3IgLS10YiBzdHlsZSBmb3Igc2V0dXAvdGVhcmRvd24gZXJyb3JzIGFzIHdlbGwuICBU
aGFua3MgTWFoby4KKworLSBmaXggaXNzdWUzMDcgLSB1c2UgeWFtbC5zYWZlX2xvYWQgaW4gZXhh
bXBsZSwgdGhhbmtzIE1hcmsgRWljaGluLgorCistIGJldHRlciBwYXJhbWV0cml6ZSBlcnJvciBt
ZXNzYWdlcywgdGhhbmtzIEJyaWFubmEgTGF1Z2hlcgorCistIHB5dGVzdF90ZXJtaW5hbF9zdW1t
YXJ5KHRlcm1pbmFscmVwb3J0ZXIpIGhvb2tzIGNhbiBub3cgdXNlCisgICIuc2VjdGlvbih0aXRs
ZSkiIGFuZCAiLmxpbmUobXNnKSIgbWV0aG9kcyB0byBwcmludCBleHRyYQorICBpbmZvcm1hdGlv
biBhdCB0aGUgZW5kIG9mIGEgdGVzdCBydW4uCisKKzIuMy41Cis9PT09PQorCistIGZpeCBpc3N1
ZTE2OTogcmVzcGVjdCAtLXRiPXN0eWxlIHdpdGggc2V0dXAvdGVhcmRvd24gZXJyb3JzIGFzIHdl
bGwuCisKKy0gbmV2ZXIgY29uc2lkZXIgYSBmaXh0dXJlIGZ1bmN0aW9uIGZvciB0ZXN0IGZ1bmN0
aW9uIGNvbGxlY3Rpb24KKworLSBhbGxvdyByZS1ydW5uaW5nIG9mIHRlc3QgaXRlbXMgLyBoZWxw
cyB0byBmaXggcHl0ZXN0LXJlcnVudGVzdHMgcGx1Z2luCisgIGFuZCBhbHNvIGhlbHAgdG8ga2Vl
cCBsZXNzIGZpeHR1cmUvcmVzb3VyY2UgcmVmZXJlbmNlcyBhbGl2ZQorCistIHB1dCBjYXB0dXJl
ZCBzdGRvdXQvc3RkZXJyIGludG8ganVuaXR4bWwgb3V0cHV0IGV2ZW4gZm9yIHBhc3NpbmcgdGVz
dHMKKyAgKHRoYW5rcyBBZGFtIEdvdWNoZXIpCisKKy0gSXNzdWUgMjY1IC0gaW50ZWdyYXRlIG5v
c2Ugc2V0dXAvdGVhcmRvd24gd2l0aCBzZXR1cHN0YXRlCisgIHNvIGl0IGRvZXNudCB0cnkgdG8g
dGVhcmRvd24gaWYgaXQgZGlkIG5vdCBzZXR1cAorCistIGlzc3VlIDI3MSAtIGRvbnQgd3JpdGUg
anVuaXR4bWwgb24gc2xhdmUgbm9kZXMKKworLSBJc3N1ZSAyNzQgLSBkb250IHRyeSB0byBzaG93
IGZ1bGwgZG9jdGVzdCBleGFtcGxlCisgIHdoZW4gZG9jdGVzdCBkb2VzIG5vdCBrbm93IHRoZSBl
eGFtcGxlIGxvY2F0aW9uCisKKy0gaXNzdWUgMjgwIC0gZGlzYWJsZSBhc3NlcnRpb24gcmV3cml0
aW5nIG9uIGJ1Z2d5IENQeXRob24gMi42LjAKKworLSBpbmplY3QgImdldGZpeHR1cmUoKSIgaGVs
cGVyIHRvIHJldHJpZXZlIGZpeHR1cmVzIGZyb20gZG9jdGVzdHMsCisgIHRoYW5rcyBBbmRyZWFz
IFplaWRsZXIKKworLSBpc3N1ZSAyNTkgLSB3aGVuIGFzc2VydGlvbiByZXdyaXRpbmcsIGJlIGNv
bnNpc3RlbnQgd2l0aCB0aGUgZGVmYXVsdAorICBzb3VyY2UgZW5jb2Rpbmcgb2YgQVNDSUkgb24g
UHl0aG9uIDIKKworLSBpc3N1ZSAyNTEgLSByZXBvcnQgYSBza2lwIGluc3RlYWQgb2YgaWdub3Jp
bmcgY2xhc3NlcyB3aXRoIGluaXQKKworLSBpc3N1ZTI1MCB1bmljb2RlL3N0ciBtaXhlcyBpbiBw
YXJhbWV0cml6YXRpb24gbmFtZXMgYW5kIHZhbHVlcyBub3cgd29ya3MKKworLSBpc3N1ZTI1Nywg
YXNzZXJ0aW9uLXRyaWdnZXJlZCBjb21waWxhdGlvbiBvZiBzb3VyY2UgZW5kaW5nIGluIGEKKyAg
Y29tbWVudCBsaW5lIGRvZXNuJ3QgYmxvdyB1cCBpbiBweXRob24yLjUgKGZpeGVkIHRocm91Z2gg
cHk+PTEuNC4xMy5kZXY2KQorCistIGZpeCAtLWdlbnNjcmlwdCBvcHRpb24gdG8gZ2VuZXJhdGUg
c3RhbmRhbG9uZSBzY3JpcHRzIHRoYXQgYWxzbworICB3b3JrIHdpdGggcHl0aG9uMy4zIChpbXBv
cnRlciBvcmRlcmluZykKKworLSBpc3N1ZTE3MSAtIGluIGFzc2VydGlvbiByZXdyaXRpbmcsIHNo
b3cgdGhlIHJlcHIgb2Ygc29tZQorICBnbG9iYWwgdmFyaWFibGVzCisKKy0gZml4IG9wdGlvbiBo
ZWxwIGZvciAiLWsiCisKKy0gbW92ZSBsb25nIGRlc2NyaXB0aW9uIG9mIGRpc3RyaWJ1dGlvbiBp
bnRvIFJFQURNRS5yc3QKKworLSBpbXByb3ZlIGRvY3N0cmluZyBmb3IgbWV0YWZ1bmMucGFyYW1l
dHJpemUoKQorCistIGZpeCBidWcgd2hlcmUgdXNpbmcgY2Fwc3lzIHdpdGggcHl0ZXN0LnNldF90
cmFjZSgpIGluIGEgdGVzdAorICBmdW5jdGlvbiB3b3VsZCBicmVhayB3aGVuIGxvb2tpbmcgYXQg
Y2Fwc3lzLnJlYWRvdXRlcnIoKQorCistIGFsbG93IHRvIHNwZWNpZnkgcHJlZml4ZXMgc3RhcnRp
bmcgd2l0aCAiXyIgd2hlbgorICBjdXN0b21pemluZyBweXRob25fZnVuY3Rpb25zIHRlc3QgZGlz
Y292ZXJ5LiAodGhhbmtzIEdyYWhhbSBIb3JsZXIpCisKKy0gaW1wcm92ZSBQWVRFU1RfREVCVUcg
dHJhY2luZyBvdXRwdXQgYnkgcHV0aW5nCisgIGV4dHJhIGRhdGEgb24gYSBuZXcgbGluZXMgd2l0
aCBhZGRpdGlvbmFsIGluZGVudAorCistIGVuc3VyZSBPdXRjb21lRXhjZXB0aW9ucyBsaWtlIHNr
aXAvZmFpbCBoYXZlIGluaXRpYWxpemVkIGV4Y2VwdGlvbiBhdHRyaWJ1dGVzCisKKy0gaXNzdWUg
MjYwIC0gZG9uJ3QgdXNlIG5vc2Ugc3BlY2lhbCBzZXR1cCBvbiBwbGFpbiB1bml0dGVzdCBjYXNl
cworCistIGZpeCBpc3N1ZTEzNCAtIHByaW50IHRoZSBjb2xsZWN0IGVycm9ycyB0aGF0IHByZXZl
bnQgcnVubmluZyBzcGVjaWZpZWQgdGVzdCBpdGVtcworCistIGZpeCBpc3N1ZTI2NiAtIGFjY2Vw
dCB1bmljb2RlIGluIE1hcmtFdmFsdWF0b3IgZXhwcmVzc2lvbnMKKworMi4zLjQKKz09PT09CisK
Ky0geWllbGRlZCB0ZXN0IGZ1bmN0aW9ucyB3aWxsIG5vdyBoYXZlIGF1dG91c2UtZml4dHVyZXMg
YWN0aXZlIGJ1dAorICBjYW5ub3QgYWNjZXB0IGZpeHR1cmVzIGFzIGZ1bmNhcmdzIC0gaXQncyBh
bnl3YXkgcmVjb21tZW5kZWQgdG8KKyAgcmF0aGVyIHVzZSB0aGUgcG9zdC0yLjAgcGFyYW1ldHJp
emUgZmVhdHVyZXMgaW5zdGVhZCBvZiB5aWVsZCwgc2VlOgorICBodHRwOi8vcHl0ZXN0Lm9yZy9s
YXRlc3QvZXhhbXBsZS9wYXJhbWV0cml6ZS5odG1sCistIGZpeCBhdXRvdXNlLWlzc3VlIHdoZXJl
IGF1dG91c2UtZml4dHVyZXMgd291bGQgbm90IGJlIGRpc2NvdmVyZWQKKyAgaWYgZGVmaW5lZCBp
biBhIGEvY29uZnRlc3QucHkgZmlsZSBhbmQgdGVzdHMgaW4gYS90ZXN0cy90ZXN0X3NvbWUucHkK
Ky0gZml4IGlzc3VlMjI2IC0gTElGTyBvcmRlcmluZyBmb3IgZml4dHVyZSB0ZWFyZG93bnMKKy0g
Zml4IGlzc3VlMjI0IC0gaW52b2NhdGlvbnMgd2l0aCA+MjU2IGNoYXIgYXJndW1lbnRzIG5vdyB3
b3JrCistIGZpeCBpc3N1ZTkxIC0gYWRkL2Rpc2N1c3MgcGFja2FnZS9kaXJlY3RvcnkgbGV2ZWwg
c2V0dXBzIGluIGV4YW1wbGUKKy0gYWxsb3cgdG8gZHluYW1pY2FsbHkgZGVmaW5lIG1hcmtlcnMg
dmlhCisgIGl0ZW0ua2V5d29yZHNbLi4uXT1hc3NpZ25tZW50IGludGVncmF0aW5nIHdpdGggIi1t
IiBvcHRpb24KKy0gbWFrZSAiLWsiIGFjY2VwdCBhbiBleHByZXNzaW9ucyB0aGUgc2FtZSBhcyB3
aXRoICItbSIgc28gdGhhdCBvbmUKKyAgY2FuIHdyaXRlOiAtayAibmFtZTEgb3IgbmFtZTIiIGV0
Yy4gIFRoaXMgaXMgYSBzbGlnaHQgaW5jb21wYXRpYmlsaXR5CisgIGlmIHlvdSB1c2VkIHNwZWNp
YWwgc3ludGF4IGxpa2UgIlRlc3RDbGFzcy50ZXN0X21ldGhvZCIgd2hpY2ggeW91IG5vdworICBu
ZWVkIHRvIHdyaXRlIGFzIC1rICJUZXN0Q2xhc3MgYW5kIHRlc3RfbWV0aG9kIiB0byBtYXRjaCBh
IGNlcnRhaW4KKyAgbWV0aG9kIGluIGEgY2VydGFpbiB0ZXN0IGNsYXNzLgorCisyLjMuMworPT09
PT0KKworLSBmaXggaXNzdWUyMTQgLSBwYXJzZSBtb2R1bGVzIHRoYXQgY29udGFpbiBzcGVjaWFs
IG9iamVjdHMgbGlrZSBlLiBnLgorICBmbGFzaydzIHJlcXVlc3Qgb2JqZWN0IHdoaWNoIGJsb3dz
IHVwIG9uIGdldGF0dHIgYWNjZXNzIGlmIG5vIHJlcXVlc3QKKyAgaXMgYWN0aXZlLiB0aGFua3Mg
VGhvbWFzIFdhbGRtYW5uLgorCistIGZpeCBpc3N1ZTIxMyAtIGFsbG93IHRvIHBhcmFtZXRyaXpl
IHdpdGggdmFsdWVzIGxpa2UgbnVtcHkgYXJyYXlzIHRoYXQKKyAgZG8gbm90IHN1cHBvcnQgYW4g
X19lcV9fIG9wZXJhdG9yCisKKy0gZml4IGlzc3VlMjE1IC0gc3BsaXQgdGVzdF9weXRob24ub3Jn
IGludG8gbXVsdGlwbGUgZmlsZXMKKworLSBmaXggaXNzdWUxNDggLSBAdW5pdHRlc3Quc2tpcCBv
biBjbGFzc2VzIGlzIG5vdyByZWNvZ25pemVkIGFuZCBhdm9pZHMKKyAgY2FsbGluZyBzZXRVcENs
YXNzL3RlYXJEb3duQ2xhc3MsIHRoYW5rcyBQYXZlbCBSZXBpbgorCistIGZpeCBpc3N1ZTIwOSAt
IHJlaW50cm9kdWNlIHB5dGhvbjIuNCBzdXBwb3J0IGJ5IGRlcGVuZGluZyBvbiBuZXdlcgorICBw
eWxpYiB3aGljaCByZS1pbnRyb2R1Y2VkIHN0YXRlbWVudC1maW5kaW5nIGZvciBwcmUtQVNUIGlu
dGVycHJldGVycworCistIG5vc2Ugc3VwcG9ydDogb25seSBjYWxsIHNldHVwIGlmIGl0cyBhIGNh
bGxhYmxlLCB0aGFua3MgQW5kcmV3CisgIFRhdW1vZWZvbGF1CisKKy0gZml4IGlzc3VlMjE5IC0g
YWRkIHB5Mi40LTMuMyBjbGFzc2lmaWVycyB0byBUUk9WRSBsaXN0CisKKy0gaW4gdHJhY2ViYWNr
cyAqLCoqIGFyZyB2YWx1ZXMgYXJlIG5vdyBzaG93biBuZXh0IHRvIG5vcm1hbCBhcmd1bWVudHMK
KyAgKHRoYW5rcyBNYW51ZWwgSmFjb2IpCisKKy0gZml4IGlzc3VlMjE3IC0gc3VwcG9ydCBtb2Nr
LnBhdGNoIHdpdGggcHl0ZXN0J3MgZml4dHVyZXMgLSBub3RlIHRoYXQKKyAgeW91IG5lZWQgZWl0
aGVyIG1vY2stMS4wLjEgb3IgdGhlIHB5dGhvbjMuMyBidWlsdGluIHVuaXR0ZXN0Lm1vY2suCisK
Ky0gZml4IGlzc3VlMTI3IC0gaW1wcm92ZSBkb2N1bWVudGF0aW9uIGZvciBweXRlc3RfYWRkb3B0
aW9uKCkgYW5kCisgIGFkZCBhIGBgY29uZmlnLmdldG9wdGlvbihuYW1lKWBgIGhlbHBlciBmdW5j
dGlvbiBmb3IgY29uc2lzdGVuY3kuCisKKzIuMy4yCis9PT09PQorCistIGZpeCBpc3N1ZTIwOCBh
bmQgZml4IGlzc3VlMjkgdXNlIG5ldyBweSB2ZXJzaW9uIHRvIGF2b2lkIGxvbmcgcGF1c2VzCisg
IHdoZW4gcHJpbnRpbmcgdHJhY2ViYWNrcyBpbiBsb25nIG1vZHVsZXMKKworLSBmaXggaXNzdWUy
MDUgLSBjb25mdGVzdHMgaW4gc3ViZGlycyBjdXN0b21pemluZworICBweXRlc3RfcHljb2xsZWN0
X21ha2Vtb2R1bGUgYW5kIHB5dGVzdF9weWNvbGxlY3RfbWFrZWl0ZW0KKyAgbm93IHdvcmsgcHJv
cGVybHkKKworLSBmaXggdGVhcmRvd24tb3JkZXJpbmcgZm9yIHBhcmFtZXRyaXplZCBzZXR1cHMK
KworLSBmaXggaXNzdWUxMjcgLSBiZXR0ZXIgZG9jdW1lbnRhdGlvbiBmb3IgcHl0ZXN0X2FkZG9w
dGlvbgorICBhbmQgcmVsYXRlZCBvYmplY3RzLgorCistIGZpeCB1bml0dGVzdCBiZWhhdmlvdXI6
IFRlc3RDYXNlLnJ1bnRlc3Qgb25seSBjYWxsZWQgaWYgdGhlcmUgYXJlCisgIHRlc3QgbWV0aG9k
cyBkZWZpbmVkCisKKy0gaW1wcm92ZSB0cmlhbCBzdXBwb3J0OiBkb24ndCBjb2xsZWN0IGl0cyBl
bXB0eQorICB1bml0dGVzdC5UZXN0Q2FzZS5ydW5UZXN0KCkgbWV0aG9kCisKKy0gInB5dGhvbiBz
ZXR1cC5weSB0ZXN0IiBub3cgd29ya3Mgd2l0aCBweXRlc3QgaXRzZWxmCisKKy0gZml4L2ltcHJv
dmUgaW50ZXJuYWwvcGFja2FnaW5nIHJlbGF0ZWQgYml0czoKKworICAtIGV4Y2VwdGlvbiBtZXNz
YWdlIGNoZWNrIG9mIHRlc3Rfbm9zZS5weSBub3cgcGFzc2VzIG9uIHB5dGhvbjMzIGFzIHdlbGwK
KworICAtIGlzc3VlMjA2IC0gZml4IHRlc3RfYXNzZXJ0cmV3cml0ZS5weSB0byB3b3JrIHdoZW4g
YSBnbG9iYWwKKyAgICBQWVRIT05ET05UV1JJVEVCWVRFQ09ERT0xIGlzIHByZXNlbnQKKworICAt
IGFkZCB0b3guaW5pIHRvIHB5dGVzdCBkaXN0cmlidXRpb24gc28gdGhhdCBpZ25vcmUtZGlycyBh
bmQgb3RoZXJzIGNvbmZpZworICAgIGJpdHMgYXJlIHByb3Blcmx5IGRpc3RyaWJ1dGVkIGZvciBt
YWludGFpbmVycyB3aG8gcnVuIHB5dGVzdC1vd24gdGVzdHMKKworMi4zLjEKKz09PT09CisKKy0g
Zml4IGlzc3VlMjAyIC0gZml4IHJlZ3Jlc3Npb246IHVzaW5nICJzZWxmIiBmcm9tIGZpeHR1cmUg
ZnVuY3Rpb25zIG5vdworICB3b3JrcyBhcyBleHBlY3RlZCAoaXQncyB0aGUgc2FtZSAic2VsZiIg
aW5zdGFuY2UgdGhhdCBhIHRlc3QgbWV0aG9kCisgIHdoaWNoIHVzZXMgdGhlIGZpeHR1cmUgc2Vl
cykKKworLSBza2lwIHBleHBlY3QgdXNpbmcgdGVzdHMgKHRlc3RfcGRiLnB5IG1vc3RseSkgb24g
ZnJlZWJzZCogc3lzdGVtcworICBkdWUgdG8gcGV4cGVjdCBub3Qgc3VwcG9ydGluZyBpdCBwcm9w
ZXJseSAoaGFuZ2luZykKKworLSBsaW5rIHRvIHdlYiBwYWdlcyBmcm9tIC0tbWFya2VycyBvdXRw
dXQgd2hpY2ggcHJvdmlkZXMgaGVscCBmb3IKKyAgcHl0ZXN0Lm1hcmsuKiB1c2FnZS4KKworMi4z
LjAKKz09PT09CisKKy0gZml4IGlzc3VlMjAyIC0gYmV0dGVyIGF1dG9tYXRpYyBuYW1lcyBmb3Ig
cGFyYW1ldHJpemVkIHRlc3QgZnVuY3Rpb25zCistIGZpeCBpc3N1ZTEzOSAtIGludHJvZHVjZSBA
cHl0ZXN0LmZpeHR1cmUgd2hpY2ggYWxsb3dzIGRpcmVjdCBzY29waW5nCisgIGFuZCBwYXJhbWV0
cml6YXRpb24gb2YgZnVuY2FyZyBmYWN0b3JpZXMuCistIGZpeCBpc3N1ZTE5OCAtIGNvbmZ0ZXN0
IGZpeHR1cmVzIHdlcmUgbm90IGZvdW5kIG9uIHdpbmRvd3MzMiBpbiBzb21lCisgIGNpcmN1bXN0
YW5jZXMgd2l0aCBuZXN0ZWQgZGlyZWN0b3J5IHN0cnVjdHVyZXMgZHVlIHRvIHBhdGggbWFuaXB1
bGF0aW9uIGlzc3VlcworLSBmaXggaXNzdWUxOTMgc2tpcCB0ZXN0IGZ1bmN0aW9ucyB3aXRoIHdl
cmUgcGFyYW1ldHJpemVkIHdpdGggZW1wdHkKKyAgcGFyYW1ldGVyIHNldHMKKy0gZml4IHB5dGhv
bjMuMyBjb21wYXQsIG1vc3RseSByZXBvcnRpbmcgYml0cyB0aGF0IHByZXZpb3VzbHkgZGVwZW5k
ZWQKKyAgb24gZGljdCBvcmRlcmluZworLSBpbnRyb2R1Y2UgcmUtb3JkZXJpbmcgb2YgdGVzdHMg
YnkgcmVzb3VyY2UgYW5kIHBhcmFtZXRyaXphdGlvbiBzZXR1cAorICB3aGljaCB0YWtlcyBwcmVj
ZWRlbmNlIHRvIHRoZSB1c3VhbCBmaWxlLW9yZGVyaW5nCistIGZpeCBpc3N1ZTE4NSBtb25rZXlw
YXRjaGluZyB0aW1lLnRpbWUgZG9lcyBub3QgY2F1c2UgcHl0ZXN0IHRvIGZhaWwKKy0gZml4IGlz
c3VlMTcyIGR1cGxpY2F0ZSBjYWxsIG9mIHB5dGVzdC5maXh0dXJlIGRlY29yYXRvcmVkIHNldHVw
X21vZHVsZQorICBmdW5jdGlvbnMKKy0gZml4IGp1bml0eG1sPXBhdGggY29uc3RydWN0aW9uIHNv
IHRoYXQgaWYgdGVzdHMgY2hhbmdlIHRoZQorICBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGFu
ZCB0aGUgcGF0aCBpcyBhIHJlbGF0aXZlIHBhdGgKKyAgaXQgaXMgY29uc3RydWN0ZWQgY29ycmVj
dGx5IGZyb20gdGhlIG9yaWdpbmFsIGN1cnJlbnQgd29ya2luZyBkaXIuCistIGZpeCAicHl0aG9u
IHNldHVwLnB5IHRlc3QiIGV4YW1wbGUgdG8gY2F1c2UgYSBwcm9wZXIgImVycm5vIiByZXR1cm4K
Ky0gZml4IGlzc3VlMTY1IC0gZml4IGJyb2tlbiBkb2MgbGlua3MgYW5kIG1lbnRpb24gc3RhY2tv
dmVyZmxvdyBmb3IgRkFRCistIGNhdGNoIHVuaWNvZGUtaXNzdWVzIHdoZW4gd3JpdGluZyBmYWls
dXJlIHJlcHJlc2VudGF0aW9ucworICB0byB0ZXJtaW5hbCB0byBwcmV2ZW50IHRoZSB3aG9sZSBz
ZXNzaW9uIGZyb20gY3Jhc2hpbmcKKy0gZml4IHhmYWlsL3NraXAgY29uZnVzaW9uOiBhIHNraXAt
bWFyayBvciBhbiBpbXBlcmF0aXZlIHB5dGVzdC5za2lwCisgIHdpbGwgbm93IHRha2UgcHJlY2Vk
ZW5jZSBiZWZvcmUgeGZhaWwtbWFya2VycyBiZWNhdXNlIHdlCisgIGNhbid0IGRldGVybWluZSB4
ZmFpbC94cGFzcyBzdGF0dXMgaW4gY2FzZSBvZiBhIHNraXAuIHNlZSBhbHNvOgorICBodHRwOi8v
c3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzExMTA1ODI4L2luLXB5LXRlc3Qtd2hlbi1pLWV4
cGxpY2l0bHktc2tpcC1hLXRlc3QtdGhhdC1pcy1tYXJrZWQtYXMteGZhaWwtaG93LWNhbi1pLWdl
dAorCistIGFsd2F5cyByZXBvcnQgaW5zdGFsbGVkIDNyZCBwYXJ0eSBwbHVnaW5zIGluIHRoZSBo
ZWFkZXIgb2YgYSB0ZXN0IHJ1bgorCistIGZpeCBpc3N1ZTE2MDogYSBmYWlsaW5nIHNldHVwIG9m
IGFuIHhmYWlsLW1hcmtlZCB0ZXN0cyBzaG91bGQKKyAgYmUgcmVwb3J0ZWQgYXMgeGZhaWwgKG5v
dCB4cGFzcykKKworLSBmaXggaXNzdWUxMjg6IHNob3cgY2FwdHVyZWQgb3V0cHV0IHdoZW4gY2Fw
c3lzL2NhcGZkIGFyZSB1c2VkCisKKy0gZml4IGlzc3VlMTc5OiBwcm9wcGVybHkgc2hvdyB0aGUg
ZGVwZW5kZW5jeSBjaGFpbiBvZiBmYWN0b3JpZXMKKworLSBwbHVnaW5tYW5hZ2VyLnJlZ2lzdGVy
KC4uLikgbm93IHJhaXNlcyBWYWx1ZUVycm9yIGlmIHRoZQorICBwbHVnaW4gaGFzIGJlZW4gYWxy
ZWFkeSByZWdpc3RlcmVkIG9yIHRoZSBuYW1lIGlzIHRha2VuCisKKy0gZml4IGlzc3VlMTU5OiBp
bXByb3ZlIGh0dHA6Ly9weXRlc3Qub3JnL2xhdGVzdC9mYXEuaHRtbAorICBlc3BlY2lhbGx5IHdp
dGggcmVzcGVjdCB0byB0aGUgIm1hZ2ljIiBoaXN0b3J5LCBhbHNvIG1lbnRpb24KKyAgcHl0ZXN0
LWRqYW5nbywgdHJpYWwgYW5kIHVuaXR0ZXN0IGludGVncmF0aW9uLgorCistIG1ha2UgcmVxdWVz
dC5rZXl3b3JkcyBhbmQgbm9kZS5rZXl3b3JkcyB3cml0YWJsZS4gIEFsbCBkZXNjZW5kYW50Cisg
IGNvbGxlY3Rpb24gbm9kZXMgd2lsbCBzZWUga2V5d29yZCB2YWx1ZXMuICBLZXl3b3JkcyBhcmUg
ZGljdGlvbmFyaWVzCisgIGNvbnRhaW5pbmcgbWFya2VycyBhbmQgb3RoZXIgaW5mby4KKworLSBm
aXggaXNzdWUgMTc4OiB4bWwgYmluYXJ5IGVzY2FwZXMgYXJlIG5vdyB3cmFwcGVkIGluIHB5Lnht
bC5yYXcKKworLSBmaXggaXNzdWUgMTc2OiBjb3JyZWN0bHkgY2F0Y2ggdGhlIGJ1aWx0aW4gQXNz
ZXJ0aW9uRXJyb3IKKyAgZXZlbiB3aGVuIHdlIHJlcGxhY2VkIEFzc2VydGlvbkVycm9yIHdpdGgg
YSBzdWJjbGFzcyBvbiB0aGUKKyAgcHl0aG9uIGxldmVsCisKKy0gZmFjdG9yeSBkaXNjb3Zlcnkg
bm8gbG9uZ2VyIGZhaWxzIHdpdGggbWFnaWMgZ2xvYmFsIGNhbGxhYmxlcworICB0aGF0IHByb3Zp
ZGUgbm8gc2FuZSBfX2NvZGVfXyBvYmplY3QgKG1vY2suY2FsbCBmb3IgZXhhbXBsZSkKKworLSBm
aXggaXNzdWUgMTgyOiB0ZXN0ZGlyLmlucHJvY2Vzc19ydW4gbm93IGNvbnNpZGVycyBwYXNzZWQg
cGx1Z2lucworCistIGZpeCBpc3N1ZSAxODg6IGVuc3VyZSBzeXMuZXhjX2luZm8gaXMgY2xlYXIg
b24gcHl0aG9uMgorICAgICAgICAgICAgICAgICBiZWZvcmUgY2FsbGluZyBpbnRvIGEgdGVzdAor
CistIGZpeCBpc3N1ZSAxOTE6IGFkZCB1bml0dGVzdCBUZXN0Q2FzZSBydW5UZXN0IG1ldGhvZCBz
dXBwb3J0CistIGZpeCBpc3N1ZSAxNTY6IG1vbmtleXBhdGNoIGNvcnJlY3RseSBoYW5kbGVzIGNs
YXNzIGxldmVsIGRlc2NyaXB0b3JzCisKKy0gcmVwb3J0aW5nIHJlZmluZW1lbnRzOgorCisgIC0g
cHl0ZXN0X3JlcG9ydF9oZWFkZXIgbm93IHJlY2VpdmVzIGEgInN0YXJ0ZGlyIiBzbyB0aGF0Cisg
ICAgeW91IGNhbiB1c2Ugc3RhcnRkaXIuYmVzdHJlbHBhdGgoeW91cnBhdGgpIHRvIHNob3cKKyAg
ICBuaWNlIHJlbGF0aXZlIHBhdGgKKworICAtIGFsbG93IHBsdWdpbnMgdG8gaW1wbGVtZW50IGJv
dGggcHl0ZXN0X3JlcG9ydF9oZWFkZXIgYW5kCisgICAgcHl0ZXN0X3Nlc3Npb25zdGFydCAoc2Vz
c2lvbnN0YXJ0IGlzIGludm9rZWQgZmlyc3QpLgorCisgIC0gZG9uJ3Qgc2hvdyBkZXNlbGVjdGVk
IHJlYXNvbiBsaW5lIGlmIHRoZXJlIGlzIG5vbmUKKworICAtIHB5LnRlc3QgLXZ2IHdpbGwgc2hv
dyBhbGwgb2YgYXNzZXJ0IGNvbXBhcmlzYXRpb25zIGluc3RlYWQgb2YgdHJ1bmNhdGluZworCisy
LjIuNAorPT09PT0KKworLSBmaXggZXJyb3IgbWVzc2FnZSBmb3IgcmV3cml0dGVuIGFzc2VydGlv
bnMgaW52b2x2aW5nIHRoZSAlIG9wZXJhdG9yCistIGZpeCBpc3N1ZSAxMjY6IGNvcnJlY3RseSBt
YXRjaCBhbGwgaW52YWxpZCB4bWwgY2hhcmFjdGVycyBmb3IganVuaXR4bWwKKyAgYmluYXJ5IGVz
Y2FwZQorLSBmaXggaXNzdWUgd2l0aCB1bml0dGVzdDogbm93IEB1bml0dGVzdC5leHBlY3RlZEZh
aWx1cmUgbWFya2VycyBzaG91bGQKKyAgYmUgcHJvY2Vzc2VkIGNvcnJlY3RseSAoeW91IGNhbiBh
bHNvIHVzZSBAcHl0ZXN0Lm1hcmsgbWFya2VycykKKy0gZG9jdW1lbnQgaW50ZWdyYXRpb24gd2l0
aCB0aGUgZXh0ZW5kZWQgZGlzdHJpYnV0ZS9zZXR1cHRvb2xzIHRlc3QgY29tbWFuZHMKKy0gZml4
IGlzc3VlIDE0MDogcHJvcHBlcmx5IGdldCB0aGUgcmVhbCBmdW5jdGlvbnMKKyAgb2YgYm91bmQg
Y2xhc3NtZXRob2RzIGZvciBzZXR1cC90ZWFyZG93bl9jbGFzcworLSBmaXggaXNzdWUgIzE0MTog
c3dpdGNoIGZyb20gdGhlIGRlY2Vhc2VkIHBhc3RlLnBvY29vLm9yZyB0byBicGFzdGUubmV0Cist
IGZpeCBpc3N1ZSAjMTQzOiBjYWxsIHVuY29uZmlndXJlL3Nlc3Npb25maW5pc2ggYWx3YXlzIHdo
ZW4KKyAgY29uZmlndXJlL3Nlc3Npb25zdGFydCB3aGVyZSBjYWxsZWQKKy0gZml4IGlzc3VlICMx
NDQ6IGJldHRlciBtYW5nbGUgdGVzdCBpZHMgdG8ganVuaXR4bWwgY2xhc3NuYW1lcworLSB1cGdy
YWRlIGRpc3RyaWJ1dGVfc2V0dXAucHkgdG8gMC42LjI3CisKKzIuMi4zCis9PT09PQorCistIGZp
eCB1cGxvYWRlZCBwYWNrYWdlIHRvIG9ubHkgaW5jbHVkZSBuZWNjZXNhcnkgZmlsZXMKKworMi4y
LjIKKz09PT09CisKKy0gZml4IGlzc3VlMTAxOiB3cm9uZyBhcmdzIHRvIHVuaXR0ZXN0LlRlc3RD
YXNlIHRlc3QgZnVuY3Rpb24gbm93CisgIHByb2R1Y2UgYmV0dGVyIG91dHB1dAorLSBmaXggaXNz
dWUxMDI6IHJlcG9ydCBtb3JlIHVzZWZ1bCBlcnJvcnMgYW5kIGhpbnRzIGZvciB3aGVuIGEKKyAg
dGVzdCBkaXJlY3Rvcnkgd2FzIHJlbmFtZWQgYW5kIHNvbWUgcHljL19fcHljYWNoZV9fIHJlbWFp
bgorLSBmaXggaXNzdWUxMDY6IGFsbG93IHBhcmFtZXRyaXplIHRvIGJlIGFwcGxpZWQgbXVsdGlw
bGUgdGltZXMKKyAgZS5nLiBmcm9tIG1vZHVsZSwgY2xhc3MgYW5kIGF0IGZ1bmN0aW9uIGxldmVs
LgorLSBmaXggaXNzdWUxMDc6IGFjdHVhbGx5IHBlcmZvcm0gc2Vzc2lvbiBzY29wZSBmaW5hbGl6
YXRpb24KKy0gZG9uJ3QgY2hlY2sgaW4gcGFyYW1ldHJpemUgaWYgaW5kaXJlY3QgcGFyYW1ldGVy
cyBhcmUgZnVuY2FyZyBuYW1lcworLSBhZGQgY2hkaXIgbWV0aG9kIHRvIG1vbmtleXBhdGNoIGZ1
bmNhcmcKKy0gZml4IGNyYXNoIHJlc3VsdGluZyBmcm9tIGNhbGxpbmcgbW9ua2V5cGF0Y2ggdW5k
byBhIHNlY29uZCB0aW1lCistIGZpeCBpc3N1ZTExNTogbWFrZSAtLWNvbGxlY3Rvbmx5IHJvYnVz
dCBhZ2FpbnN0IGVhcmx5IGZhaWx1cmUKKyAgKG1pc3NpbmcgZmlsZXMvZGlyZWN0b3JpZXMpCist
ICItcXEgLS1jb2xsZWN0b25seSIgbm93IHNob3dzIG9ubHkgZmlsZXMgYW5kIHRoZSBudW1iZXIg
b2YgdGVzdHMgaW4gdGhlbQorLSAiLXEgLS1jb2xsZWN0b25seSIgbm93IHNob3dzIHRlc3QgaWRz
CistIGFsbG93IGFkZGluZyBvZiBhdHRyaWJ1dGVzIHRvIHRlc3QgcmVwb3J0cyBzdWNoIHRoYXQg
aXQgYWxzbyB3b3JrcworICB3aXRoIGRpc3RyaWJ1dGVkIHRlc3RpbmcgKG5vIHVwZ3JhZGUgb2Yg
cHl0ZXN0LXhkaXN0IG5lZWRlZCkKKworMi4yLjEKKz09PT09CisKKy0gZml4IGlzc3VlOTkgKGlu
IHB5dGVzdCBhbmQgcHkpIGludGVybmFsbGVycm9ycyB3aXRoIHJlc3VsdGxvZyBub3cKKyAgcHJv
ZHVjZSBiZXR0ZXIgb3V0cHV0IC0gZml4ZWQgYnkgbm9ybWFsaXppbmcgcHl0ZXN0X2ludGVybmFs
ZXJyb3IKKyAgaW5wdXQgYXJndW1lbnRzLgorLSBmaXggaXNzdWU5NyAvIHRyYWNlYmFjayBpc3N1
ZXMgKGluIHB5dGVzdCBhbmQgcHkpIGltcHJvdmUgdHJhY2ViYWNrIG91dHB1dAorICBpbiBjb25q
dW5jdGlvbiB3aXRoIGppbmphMiBhbmQgY3l0aG9uIHdoaWNoIGhhY2sgdHJhY2ViYWNrcworLSBm
aXggaXNzdWU5MyAoaW4gcHl0ZXN0IGFuZCBweXRlc3QteGRpc3QpIGF2b2lkICJkZWxheWVkIHRl
YXJkb3ducyI6CisgIHRoZSBmaW5hbCB0ZXN0IGluIGEgdGVzdCBub2RlIHdpbGwgbm93IHJ1biBp
dHMgdGVhcmRvd24gZGlyZWN0bHkKKyAgaW5zdGVhZCBvZiB3YWl0aW5nIGZvciB0aGUgZW5kIG9m
IHRoZSBzZXNzaW9uLiBUaGFua3MgRGF2ZSBIdW50IGZvcgorICB0aGUgZ29vZCByZXBvcnRpbmcg
YW5kIGZlZWRiYWNrLiAgVGhlIHB5dGVzdF9ydW50ZXN0X3Byb3RvY29sIGFzIHdlbGwKKyAgYXMg
dGhlIHB5dGVzdF9ydW50ZXN0X3RlYXJkb3duIGhvb2tzIG5vdyBoYXZlICJuZXh0aXRlbSIgYXZh
aWxhYmxlCisgIHdoaWNoIHdpbGwgYmUgTm9uZSBpbmRpY2F0aW5nIHRoZSBlbmQgb2YgdGhlIHRl
c3QgcnVuLgorLSBmaXggY29sbGVjdGlvbiBjcmFzaCBkdWUgdG8gdW5rbm93bi1zb3VyY2UgY29s
bGVjdGVkIGl0ZW1zLCB0aGFua3MKKyAgdG8gUmFsZiBTY2htaXR0IChmaXhlZCBieSBkZXBlbmRp
bmcgb24gYSBtb3JlIHJlY2VudCBweWxpYikKKworMi4yLjAKKz09PT09CisKKy0gZml4IGlzc3Vl
OTA6IGludHJvZHVjZSBlYWdlciB0ZWFyaW5nIGRvd24gb2YgdGVzdCBpdGVtcyBzbyB0aGF0Cisg
IHRlYXJkb3duIGZ1bmN0aW9uIGFyZSBjYWxsZWQgZWFybGllci4KKy0gYWRkIGFuIGFsbC1wb3dl
cmZ1bCBtZXRhZnVuYy5wYXJhbWV0cml6ZSBmdW5jdGlvbiB3aGljaCBhbGxvd3MgdG8KKyAgcGFy
YW1ldHJpemUgdGVzdCBmdW5jdGlvbiBhcmd1bWVudHMgaW4gbXVsdGlwbGUgc3RlcHMgYW5kIHRo
ZXJlZm9yZQorICBmcm9tIGluZGVwZGVuZW50IHBsdWdpbnMgYW5kIHBhbGNlcy4KKy0gYWRkIGEg
QHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplIGhlbHBlciB3aGljaCBhbGxvd3MgdG8gZWFzaWx5Cisg
IGNhbGwgYSB0ZXN0IGZ1bmN0aW9uIHdpdGggZGlmZmVyZW50IGFyZ3VtZW50IHZhbHVlcworLSBB
ZGQgZXhhbXBsZXMgdG8gdGhlICJwYXJhbWV0cml6ZSIgZXhhbXBsZSBwYWdlLCBpbmNsdWRpbmcg
YSBxdWljayBwb3J0CisgIG9mIFRlc3Qgc2NlbmFyaW9zIGFuZCB0aGUgbmV3IHBhcmFtZXRyaXpl
IGZ1bmN0aW9uIGFuZCBkZWNvcmF0b3IuCistIGludHJvZHVjZSByZWdpc3RyYXRpb24gZm9yICJw
eXRlc3QubWFyay4qIiBoZWxwZXJzIHZpYSBpbmktZmlsZXMKKyAgb3IgdGhyb3VnaCBwbHVnaW4g
aG9va3MuICBBbHNvIGludHJvZHVjZSBhICItLXN0cmljdCIgb3B0aW9uIHdoaWNoCisgIHdpbGwg
dHJlYXQgdW5yZWdpc3RlcmVkIG1hcmtlcnMgYXMgZXJyb3JzCisgIGFsbG93aW5nIHRvIGF2b2lk
IHR5cG9zIGFuZCBtYWludGFpbiBhIHdlbGwgZGVzY3JpYmVkIHNldCBvZiBtYXJrZXJzCisgIGZv
ciB5b3VyIHRlc3Qgc3VpdGUuICBTZWUgZXhhcGxlcyBhdCBodHRwOi8vcHl0ZXN0Lm9yZy9sYXRl
c3QvbWFyay5odG1sCisgIGFuZCBpdHMgbGlua3MuCistIGlzc3VlNTA6IGludHJvZHVjZSAiLW0g
bWFya2VyIiBvcHRpb24gdG8gc2VsZWN0IHRlc3RzIGJhc2VkIG9uIG1hcmtlcnMKKyAgKHRoaXMg
aXMgYSBzdHJpY3RlciBhbmQgbW9yZSBwcmVkaWN0YWJsZSB2ZXJzaW9uIG9mICctaycgaW4gdGhh
dCAiLW0iCisgIG9ubHkgbWF0Y2hlcyBjb21wbGV0ZSBtYXJrZXJzIGFuZCBoYXMgbW9yZSBvYnZp
b3VzIHJ1bGVzIGZvciBhbmQvb3IKKyAgc2VtYW50aWNzLgorLSBuZXcgZmVhdHVyZSB0byBoZWxw
IG9wdGltaXppbmcgdGhlIHNwZWVkIG9mIHlvdXIgdGVzdHM6CisgIC0tZHVyYXRpb25zPU4gb3B0
aW9uIGZvciBkaXNwbGF5aW5nIE4gc2xvd2VzdCB0ZXN0IGNhbGxzCisgIGFuZCBzZXR1cC90ZWFy
ZG93biBtZXRob2RzLgorLSBmaXggaXNzdWU4NzogLS1wYXN0ZWJpbiBub3cgd29ya3Mgd2l0aCBw
eXRob24zCistIGZpeCBpc3N1ZTg5OiAtLXBkYiB3aXRoIHVuZXhwZWN0ZWQgZXhjZXB0aW9ucyBp
biBkb2N0ZXN0IHdvcmsgbW9yZSBzZW5zaWJseQorLSBmaXggYW5kIGNsZWFudXAgcHl0ZXN0J3Mg
b3duIHRlc3Qgc3VpdGUgdG8gbm90IGxlYWsgRkRzCistIGZpeCBpc3N1ZTgzOiBsaW5rIHRvIGdl
bmVyYXRlZCBmdW5jYXJnIGxpc3QKKy0gZml4IGlzc3VlNzQ6IHB5YXJnIG1vZHVsZSBuYW1lcyBh
cmUgbm93IGNoZWNrZWQgYWdhaW5zdCBpbXAuZmluZF9tb2R1bGUgZmFsc2UgcG9zaXRpdmVzCist
IGZpeCBjb21wYXRpYmlsaXR5IHdpdGggdHdpc3RlZC90cmlhbC0xMS4xLjAgdXNlIGNhc2VzCist
IHNpbXBsaWZ5IE5vZGUubGlzdGNoYWluCistIHNpbXBsaWZ5IGp1bml0eG1sIG91dHB1dCBjb2Rl
IGJ5IHJlbHlpbmcgb24gcHkueG1sCistIGFkZCBzdXBwb3J0IGZvciBza2lwIHByb3BlcnRpZXMg
b24gdW5pdHRlc3QgY2xhc3NlcyBhbmQgZnVuY3Rpb25zCisKKzIuMS4zCis9PT09PQorCistIGZp
eCBpc3N1ZTc5OiBhc3NlcnRpb24gcmV3cml0aW5nIGZhaWxlZCBvbiBzb21lIGNvbXBhcmlzb25z
IGluIGJvb2xvcHMKKy0gY29ycmVjdGx5IGhhbmRsZSB6ZXJvIGxlbmd0aCBhcmd1bWVudHMgKGEg
bGEgcHl0ZXN0ICcnKQorLSBmaXggaXNzdWU2NyAvIGp1bml0eG1sIG5vdyBjb250YWlucyBjb3Jy
ZWN0IHRlc3QgZHVyYXRpb25zLCB0aGFua3Mgcm9ubnkKKy0gZml4IGlzc3VlNzUgLyBza2lwcGlu
ZyB0ZXN0IGZhaWx1cmUgb24ganl0aG9uCistIGZpeCBpc3N1ZTc3IC8gQWxsb3cgYXNzZXJ0cmVw
cl9jb21wYXJlIGhvb2sgdG8gYXBwbHkgdG8gYSBzdWJzZXQgb2YgdGVzdHMKKworMi4xLjIKKz09
PT09CisKKy0gZml4IGFzc2VydGlvbiByZXdyaXRpbmcgb24gZmlsZXMgd2l0aCB3aW5kb3dzIG5l
d2xpbmVzIG9uIHNvbWUgUHl0aG9uIHZlcnNpb25zCistIHJlZmluZSB0ZXN0IGRpc2NvdmVyeSBi
eSBwYWNrYWdlL21vZHVsZSBuYW1lICgtLXB5YXJncyksIHRoYW5rcyBGbG9yaWFuIE1heWVyCist
IGZpeCBpc3N1ZTY5IC8gYXNzZXJ0aW9uIHJld3JpdGluZyBmaXhlZCBvbiBzb21lIGJvb2xlYW4g
b3BlcmF0aW9ucworLSBmaXggaXNzdWU2OCAvIHBhY2thZ2VzIG5vdyB3b3JrIHdpdGggYXNzZXJ0
aW9uIHJld3JpdGluZworLSBmaXggaXNzdWU2NjogdXNlIGRpZmZlcmVudCBhc3NlcnRpb24gcmV3
cml0aW5nIGNhY2hlcyB3aGVuIHRoZSAtTyBvcHRpb24gaXMgcGFzc2VkCistIGRvbid0IHRyeSBh
c3NlcnRpb24gcmV3cml0aW5nIG9uIEp5dGhvbiwgdXNlIHJlaW50ZXJwCisKKzIuMS4xCis9PT09
PQorCistIGZpeCBpc3N1ZTY0IC8gcHl0ZXN0LnNldF90cmFjZSBub3cgd29ya3Mgd2l0aGluIHB5
dGVzdF9nZW5lcmF0ZV90ZXN0cyBob29rcworLSBmaXggaXNzdWU2MCAvIGZpeCBlcnJvciBjb25k
aXRpb25zIGludm9sdmluZyB0aGUgY3JlYXRpb24gb2YgX19weWNhY2hlX18KKy0gZml4IGlzc3Vl
NjMgLyBhc3NlcnRpb24gcmV3cml0aW5nIG9uIGluc2VydHMgaW52b2x2aW5nIHN0cmluZ3MgY29u
dGFpbmluZyAnJScKKy0gZml4IGFzc2VydGlvbiByZXdyaXRpbmcgb24gY2FsbHMgd2l0aCBhICoq
IGFyZworLSBkb24ndCBjYWNoZSByZXdyaXR0ZW4gbW9kdWxlcyBpZiBieXRlY29kZSBnZW5lcmF0
aW9uIGlzIGRpc2FibGVkCistIGZpeCBhc3NlcnRpb24gcmV3cml0aW5nIGluIHJlYWQtb25seSBk
aXJlY3RvcmllcworLSBmaXggaXNzdWU1OTogcHJvdmlkZSBzeXN0ZW0tb3V0L2VyciB0YWdzIGZv
ciBqdW5pdHhtbCBvdXRwdXQKKy0gZml4IGlzc3VlNjE6IGFzc2VydGlvbiByZXdyaXRpbmcgb24g
Ym9vbGVhbiBvcGVyYXRpb25zIHdpdGggMyBvciBtb3JlIG9wZXJhbmRzCistIHlvdSBjYW4gbm93
IGJ1aWxkIGEgbWFuIHBhZ2Ugd2l0aCAiY2QgZG9jIDsgbWFrZSBtYW4iCisKKzIuMS4wCis9PT09
PQorCistIGZpeCBpc3N1ZTUzIGNhbGwgbm9zZXN0eWxlIHNldHVwIGZ1bmN0aW9ucyB3aXRoIGNv
cnJlY3Qgb3JkZXJpbmcKKy0gZml4IGlzc3VlNTggYW5kIGlzc3VlNTk6IG5ldyBhc3NlcnRpb24g
Y29kZSBmaXhlcworLSBtZXJnZSBCZW5qYW1pbidzIGFzc2VydGlvbnJld3JpdGUgYnJhbmNoOiBu
b3cgYXNzZXJ0aW9ucworICBmb3IgdGVzdCBtb2R1bGVzIG9uIHB5dGhvbiAyLjYgYW5kIGFib3Zl
IGFyZSBkb25lIGJ5IHJld3JpdGluZworICB0aGUgQVNUIGFuZCBzYXZpbmcgdGhlIHB5YyBmaWxl
IGJlZm9yZSB0aGUgdGVzdCBtb2R1bGUgaXMgaW1wb3J0ZWQuCisgIHNlZSBkb2MvYXNzZXJ0LnR4
dCBmb3IgbW9yZSBpbmZvLgorLSBmaXggaXNzdWU0MzogaW1wcm92ZSBkb2N0ZXN0cyB3aXRoIGJl
dHRlciB0cmFjZWJhY2sgcmVwb3J0aW5nIG9uCisgIHVuZXhwZWN0ZWQgZXhjZXB0aW9ucworLSBm
aXggaXNzdWU0NzogdGltaW5nIG91dHB1dCBpbiBqdW5pdHhtbCBmb3IgdGVzdCBjYXNlcyBpcyBu
b3cgY29ycmVjdAorLSBmaXggaXNzdWU0ODogdHlwbyBpbiBNYXJrSW5mbyByZXByIGxlYWRpbmcg
dG8gZXhjZXB0aW9uCistIGZpeCBpc3N1ZTQ5OiBhdm9pZCBjb25mdXNpbmcgZXJyb3Igd2hlbiBp
bml0aXphbGlhdGlvbiBwYXJ0aWFsbHkgZmFpbHMKKy0gZml4IGlzc3VlNDQ6IGVudi91c2VybmFt
ZSBleHBhbnNpb24gZm9yIGp1bml0eG1sIGZpbGUgcGF0aAorLSBzaG93IHJlbGVhc2VsZXZlbCBp
bmZvcm1hdGlvbiBpbiB0ZXN0IHJ1bnMgZm9yIHB5cHkKKy0gcmV3b3JrZWQgZG9jIHBhZ2VzIGZv
ciBiZXR0ZXIgbmF2aWdhdGlvbiBhbmQgUERGIGdlbmVyYXRpb24KKy0gcmVwb3J0IEtleWJvYXJk
SW50ZXJydXB0IGV2ZW4gaWYgaW50ZXJydXB0ZWQgZHVyaW5nIHNlc3Npb24gc3RhcnR1cAorLSBm
aXggaXNzdWUgMzUgLSBwcm92aWRlIFBERiBkb2MgdmVyc2lvbiBhbmQgZG93bmxvYWQgbGluayBm
cm9tIGluZGV4IHBhZ2UKKworMi4wLjMKKz09PT09CisKKy0gZml4IGlzc3VlMzg6IG5pY2VyIHRy
YWNlYmFja3Mgb24gY2FsbHMgdG8gaG9va3MsIHBhcnRpY3VsYXJseSBlYXJseQorICBjb25maWd1
cmUvc2Vzc2lvbnN0YXJ0IG9uZXMKKworLSBmaXggbWlzc2luZyBza2lwIHJlYXNvbi9tZXRhIGlu
Zm9ybWF0aW9uIGluIGp1bml0eG1sIGZpbGVzLCByZXBvcnRlZAorICB2aWEgaHR0cDovL2xpc3Rz
LmlkeWxsLm9yZy9waXBlcm1haWwvdGVzdGluZy1pbi1weXRob24vMjAxMS1NYXJjaC8wMDM5Mjgu
aHRtbAorCistIGZpeCBpc3N1ZTM0OiBhdm9pZCBjb2xsZWN0aW9uIGZhaWx1cmUgd2l0aCAidGVz
dCIgcHJlZml4ZWQgY2xhc3NlcworICBkZXJpdmluZyBmcm9tIG9iamVjdC4KKworLSBkb24ndCBy
ZXF1aXJlIHpsaWIgKGFuZCBvdGhlciBsaWJzKSBmb3IgZ2Vuc2NyaXB0IHBsdWdpbiB3aXRob3V0
CisgIC0tZ2Vuc2NyaXB0IGFjdHVhbGx5IGJlaW5nIHVzZWQuCisKKy0gc3BlZWQgdXAgc2tpcHMg
KGJ5IG5vdCBkb2luZyBhIGZ1bGwgdHJhY2ViYWNrIHJlcHJlc2VuYXRpb24KKyAgaW50ZXJuYWxs
eSkKKworLSBmaXggaXNzdWUzNzogYXZvaWQgaW52YWxpZCBjaGFyYWN0ZXJzIGluIGp1bml0eG1s
J3Mgb3V0cHV0CisKKzIuMC4yCis9PT09PQorCistIHRhY2tsZSBpc3N1ZTMyIC0gc3BlZWQgdXAg
dGVzdCBydW5zIG9mIHZlcnkgcXVpY2sgdGVzdCBmdW5jdGlvbnMKKyAgYnkgcmVkdWNpbmcgdGhl
IHJlbGF0aXZlIG92ZXJoZWFkCisKKy0gZml4IGlzc3VlMzAgLSBleHRlbmRlZCB4ZmFpbC9za2lw
aWYgaGFuZGxpbmcgYW5kIGltcHJvdmVkIHJlcG9ydGluZy4KKyAgSWYgeW91IGhhdmUgYSBzeW50
YXggZXJyb3IgaW4geW91ciBza2lwL3hmYWlsCisgIGV4cHJlc3Npb25zIHlvdSBub3cgZ2V0IG5p
Y2UgZXJyb3IgcmVwb3J0cy4KKworICBBbHNvIHlvdSBjYW4gbm93IGFjY2VzcyBtb2R1bGUgZ2xv
YmFscyBmcm9tIHhmYWlsL3NraXBpZgorICBleHByZXNzaW9ucyBzbyB0aGF0IHRoaXMgZm9yIGV4
YW1wbGUgd29ya3Mgbm93OjoKKworICAgIGltcG9ydCBweXRlc3QKKyAgICBpbXBvcnQgbXltb2R1
bGUKKyAgICBAcHl0ZXN0Lm1hcmsuc2tpcGlmKCJteW1vZHVsZS5fX3ZlcnNpb25fX1swXSA9PSAi
MSIpCisgICAgZGVmIHRlc3RfZnVuY3Rpb24oKToKKyAgICAgICAgcGFzcworCisgIFRoaXMgd2ls
bCBub3QgcnVuIHRoZSB0ZXN0IGZ1bmN0aW9uIGlmIHRoZSBtb2R1bGUncyB2ZXJzaW9uIHN0cmlu
ZworICBkb2VzIG5vdCBzdGFydCB3aXRoIGEgIjEiLiAgTm90ZSB0aGF0IHNwZWNpZnlpbmcgYSBz
dHJpbmcgaW5zdGVhZAorICBvZiBhIGJvb2xlYW4gZXhwcmVzc2lvbnMgYWxsb3dzIHB5LnRlc3Qg
dG8gcmVwb3J0IG1lYW5pbmdmdWwgaW5mb3JtYXRpb24KKyAgd2hlbiBzdW1tYXJpemluZyBhIHRl
c3QgcnVuIGFzIHRvIHdoYXQgY29uZGl0aW9ucyBsZWFkIHRvIHNraXBwaW5nCisgIChvciB4ZmFp
bC1pbmcpIHRlc3RzLgorCistIGZpeCBpc3N1ZTI4IC0gc2V0dXBfbWV0aG9kIGFuZCBweXRlc3Rf
Z2VuZXJhdGVfdGVzdHMgd29yayB0b2dldGhlcgorICBUaGUgc2V0dXBfbWV0aG9kIGZpeHR1cmUg
bWV0aG9kIG5vdyBnZXRzIGNhbGxlZCBhbHNvIGZvcgorICB0ZXN0IGZ1bmN0aW9uIGludm9jYXRp
b25zIGdlbmVyYXRlZCBmcm9tIHRoZSBweXRlc3RfZ2VuZXJhdGVfdGVzdHMKKyAgaG9vay4KKwor
LSBmaXggaXNzdWUyNyAtIGNvbGxlY3Rvbmx5IGFuZCBrZXl3b3JkLXNlbGVjdGlvbiAoLWspIG5v
dyB3b3JrIHRvZ2V0aGVyCisgIEFsc28sIGlmIHlvdSBkbyAicHkudGVzdCAtLWNvbGxlY3Rvbmx5
IC1xIiB5b3Ugbm93IGdldCBhIGZsYXQgbGlzdAorICBvZiB0ZXN0IGlkcyB0aGF0IHlvdSBjYW4g
dXNlIHRvIHBhc3RlIHRvIHRoZSBweS50ZXN0IGNvbW1hbmRsaW5lCisgIGluIG9yZGVyIHRvIGV4
ZWN1dGUgYSBwYXJ0aWN1bGFyIHRlc3QuCisKKy0gZml4IGlzc3VlMjUgYXZvaWQgcmVwb3J0ZWQg
cHJvYmxlbXMgd2l0aCAtLXBkYiBhbmQgcHl0aG9uMy4yL2VuY29kaW5ncyBvdXRwdXQKKworLSBm
aXggaXNzdWUyMyAtIHRtcGRpciBhcmd1bWVudCBub3cgd29ya3Mgb24gUHl0aG9uMy4yIGFuZCBX
aW5kb3dzWFAKKyAgU3RhcnRpbmcgd2l0aCBQeXRob24zLjIgb3Muc3ltbGluayBtYXkgYmUgc3Vw
cG9ydGVkLiBCeSByZXF1aXJpbmcKKyAgYSBuZXdlciBweSBsaWIgdmVyc2lvbiB0aGUgcHkucGF0
aC5sb2NhbCgpIGltcGxlbWVudGF0aW9uIGFja25vd2xlZGdlcworICB0aGlzLgorCistIGZpeGVk
IHR5cG9zIGluIHRoZSBkb2NzICh0aGFua3MgVmljdG9yIEdhcmNpYSwgQnJpYW5uYSBMYXVnaGVy
KSBhbmQgcGFydGljdWxhcgorICB0aGFua3MgdG8gTGF1cmEgQ3JlaWdodG9uIHdobyBhbHNvIHJl
dmlldmVkIHBhcnRzIG9mIHRoZSBkb2N1bWVudGF0aW9uLgorCistIGZpeCBzbGlnaGx5IHdyb25n
IG91dHB1dCBvZiB2ZXJib3NlIHByb2dyZXNzIHJlcG9ydGluZyBmb3IgY2xhc3NlcworICAodGhh
bmtzIEFtYXVyeSkKKworLSBtb3JlIHByZWNpc2UgKGF2b2lkaW5nIG9mKSBkZXByZWNhdGlvbiB3
YXJuaW5ncyBmb3Igbm9kZS5DbGFzc3xGdW5jdGlvbiBhY2Nlc3NlcworCistIGF2b2lkIHN0ZCB1
bml0dGVzdCBhc3NlcnRpb24gaGVscGVyIGNvZGUgaW4gdHJhY2ViYWNrcyAodGhhbmtzIFJvbm55
KQorCisyLjAuMQorPT09PT0KKworLSByZWZpbmUgYW5kIHVuaWZ5IGluaXRpYWwgY2FwdHVyaW5n
IHNvIHRoYXQgaXQgd29ya3MgbmljZWx5CisgIGV2ZW4gaWYgdGhlIGxvZ2dpbmcgbW9kdWxlIGlz
IHVzZWQgb24gYW4gZWFybHktbG9hZGVkIGNvbmZ0ZXN0LnB5CisgIGZpbGUgb3IgcGx1Z2luLgor
LSBhbGxvdyB0byBvbWl0ICIoKSIgaW4gdGVzdCBpZHMgdG8gYWxsb3cgZm9yIHVuaWZvcm0gdGVz
dCBpZHMKKyAgYXMgcHJvZHVjZWQgYnkgQWxmcmVkbydzIG5pY2UgcHl0ZXN0LnZpbSBwbHVnaW4u
CistIGZpeCBpc3N1ZTEyIC0gc2hvdyBwbHVnaW4gdmVyc2lvbnMgd2l0aCAiLS12ZXJzaW9uIiBh
bmQKKyAgIi0tdHJhY2Vjb25maWciIGFuZCBhbHNvIGRvY3VtZW50IGhvdyB0byBhZGQgZXh0cmEg
aW5mb3JtYXRpb24KKyAgdG8gcmVwb3J0aW5nIHRlc3QgaGVhZGVyCistIGZpeCBpc3N1ZTE3IChp
bXBvcnQtKiByZXBvcnRpbmcgaXNzdWUgb24gcHl0aG9uMykgYnkKKyAgcmVxdWlyaW5nIHB5PjEu
NC4wICgxLjQuMSBpcyBnb2luZyB0byBpbmNsdWRlIGl0KQorLSBmaXggaXNzdWUxMCAobnVtcHkg
YXJyYXlzIHRydXRoIGNoZWNraW5nKSBieSByZWZpbmluZworICBhc3NlcnRpb24gaW50ZXJwcmV0
YXRpb24gaW4gcHkgbGliCistIGZpeCBpc3N1ZTE1OiBtYWtlIG5vc2UgY29tcGF0aWJpbGl0eSB0
ZXN0cyBjb21wYXRpYmxlCisgIHdpdGggcHl0aG9uMyAobm93IHRoYXQgbm9zZS0xLjAgc3VwcG9y
dHMgcHl0aG9uMykKKy0gcmVtb3ZlIHNvbWV3aGF0IHN1cnByaXNpbmcgInNhbWUtY29uZnRlc3Qi
IGRldGVjdGlvbiBiZWNhdXNlCisgIGl0IGlnbm9yZXMgY29uZnRlc3QucHkgd2hlbiB0aGV5IGFw
cGVhciBpbiBzZXZlcmFsIHN1YmRpcnMuCistIGltcHJvdmUgYXNzZXJ0aW9ucyAoIm5vdCBpbiIp
LCB0aGFua3MgRmxvcmlzIEJydXlub29naGUKKy0gaW1wcm92ZSBiZWhhdmlvdXIvd2FybmluZ3Mg
d2hlbiBydW5uaW5nIG9uIHRvcCBvZiAicHl0aG9uIC1PTyIKKyAgKGFzc2VydGlvbnMgYW5kIGRv
Y3N0cmluZ3MgYXJlIHR1cm5lZCBvZmYsIGxlYWRpbmcgdG8gcG90ZW50aWFsCisgIGZhbHNlIHBv
c2l0aXZlcykKKy0gaW50cm9kdWNlIGEgcHl0ZXN0X2NtZGxpbmVfcHJvY2Vzc2FyZ3MoYXJncykg
aG9vaworICB0byBhbGxvdyBkeW5hbWljIGNvbXB1dGF0aW9uIG9mIGNvbW1hbmQgbGluZSBhcmd1
bWVudHMuCisgIFRoaXMgZml4ZXMgYSByZWdyZXNzaW9uIGJlY2F1c2UgcHkudGVzdCBwcmlvciB0
byAyLjAKKyAgYWxsb3dlZCB0byBzZXQgY29tbWFuZCBsaW5lIG9wdGlvbnMgZnJvbSBjb25mdGVz
dC5weQorICBmaWxlcyB3aGljaCBzbyBmYXIgcHl0ZXN0LTIuMCBvbmx5IGFsbG93ZWQgZnJvbSBp
bmktZmlsZXMgbm93LgorLSBmaXggaXNzdWU3OiBhc3NlcnQgZmFpbHVyZXMgaW4gZG9jdGVzdCBt
b2R1bGVzLgorICB1bmV4cGVjdGVkIGZhaWx1cmVzIGluIGRvY3Rlc3RzIHdpbGwgbm90IGdlbmVy
YWxseQorICBzaG93IG5pY2VyLCBpLmUuIHdpdGhpbiB0aGUgZG9jdGVzdCBmYWlsaW5nIGNvbnRl
eHQuCistIGZpeCBpc3N1ZTk6IHNldHVwL3RlYXJkb3duIGZ1bmN0aW9ucyBmb3IgYW4geGZhaWwt
bWFya2VkCisgIHRlc3Qgd2lsbCByZXBvcnQgYXMgeGZhaWwgaWYgdGhleSBmYWlsIGJ1dCByZXBv
cnQgYXMgbm9ybWFsbHkKKyAgcGFzc2luZyAobm90IHhwYXNzaW5nKSBpZiB0aGV5IHN1Y2NlZWQu
ICBUaGlzIG9ubHkgaXMgdHJ1ZQorICBmb3IgImRpcmVjdCIgc2V0dXAvdGVhcmRvd24gaW52b2Nh
dGlvbnMgYmVjYXVzZSB0ZWFyZG93bl9jbGFzcy8KKyAgdGVhcmRvd25fbW9kdWxlIGNhbm5vdCBj
bG9zZWx5IHJlbGF0ZSB0byBhIHNpbmdsZSB0ZXN0LgorLSBmaXggaXNzdWUxNDogbm8gbG9nZ2lu
ZyBlcnJvcnMgYXQgcHJvY2VzcyBleGl0CistIHJlZmluZW1lbnRzIHRvICJjb2xsZWN0aW5nIiBv
dXRwdXQgb24gbm9uLXR0eXMKKy0gcmVmaW5lIGludGVybmFsIHBsdWdpbiByZWdpc3RyYXRpb24g
YW5kIC0tdHJhY2Vjb25maWcgb3V0cHV0CistIGludHJvZHVjZSBhIG1lY2hhbmlzbSB0byBwcmV2
ZW50L3VucmVnaXN0ZXIgcGx1Z2lucyBmcm9tIHRoZQorICBjb21tYW5kIGxpbmUsIHNlZSBodHRw
Oi8vcHl0ZXN0Lm9yZy9wbHVnaW5zLmh0bWwjY21kdW5yZWdpc3RlcgorLSBhY3RpdmF0ZSByZXN1
bHRsb2cgcGx1Z2luIGJ5IGRlZmF1bHQKKy0gZml4IHJlZ3Jlc3Npb24gd3J0IHlpZWxkZWQgdGVz
dHMgd2hpY2ggZHVlIHRvIHRoZQorICBjb2xsZWN0aW9uLWJlZm9yZS1ydW5uaW5nIHNlbWFudGlj
cyB3ZXJlIG5vdAorICBzZXR1cCBhcyB3aXRoIHB5dGVzdCAxLjMuNC4gIE5vdGUsIGhvd2V2ZXIs
IHRoYXQKKyAgdGhlIHJlY29tbWVuZGVkIGFuZCBtdWNoIGNsZWFuZXIgd2F5IHRvIGRvIHRlc3QK
KyAgcGFyYW1ldHJhaXphdGlvbiByZW1haW5zIHRoZSAicHl0ZXN0X2dlbmVyYXRlX3Rlc3RzIgor
ICBtZWNoYW5pc20sIHNlZSB0aGUgZG9jcy4KKworMi4wLjAKKz09PT09CisKKy0gcHl0ZXN0LTIu
MCBpcyBub3cgaXRzIG93biBwYWNrYWdlIGFuZCBkZXBlbmRzIG9uIHB5bGliLTIuMAorLSBuZXcg
YWJpbGl0eTogcHl0aG9uIC1tIHB5dGVzdCAvIHB5dGhvbiAtbSBweXRlc3QubWFpbiBhYmlsaXR5
CistIG5ldyBweXRob24gaW52Y2F0aW9uOiBweXRlc3QubWFpbihhcmdzLCBwbHVnaW5zKSB0byBs
b2FkCisgIHNvbWUgY3VzdG9tIHBsdWdpbnMgZWFybHkuCistIHRyeSBoYXJkZXIgdG8gcnVuIHVu
aXR0ZXN0IHRlc3Qgc3VpdGVzIGluIGEgbW9yZSBjb21wYXRpYmxlIG1hbm5lcgorICBieSBkZWZl
cnJpbmcgc2V0dXAvdGVhcmRvd24gc2VtYW50aWNzIHRvIHRoZSB1bml0dGVzdCBwYWNrYWdlLgor
ICBhbHNvIHdvcmsgaGFyZGVyIHRvIHJ1biB0d2lzdGVkL3RyaWFsIGFuZCBEamFuZ28gdGVzdHMg
d2hpY2gKKyAgc2hvdWxkIG5vdyBiYXNpY2FsbHkgd29yayBieSBkZWZhdWx0LgorLSBpbnRyb2R1
Y2UgYSBuZXcgd2F5IHRvIHNldCBjb25maWcgb3B0aW9ucyB2aWEgaW5pLXN0eWxlIGZpbGVzLAor
ICBieSBkZWZhdWx0IHNldHVwLmNmZyBhbmQgdG94LmluaSBmaWxlcyBhcmUgc2VhcmNoZWQuICBU
aGUgb2xkCisgIHdheXMgKGNlcnRhaW4gZW52aXJvbm1lbnQgdmFyaWFibGVzLCBkeW5hbWljIGNv
bmZ0ZXN0LnB5IHJlYWRpbmcKKyAgaXMgcmVtb3ZlZCkuCistIGFkZCBhIG5ldyAiLXEiIG9wdGlv
biB3aGljaCBkZWNyZWFzZXMgdmVyYm9zaXR5IGFuZCBwcmludHMgYSBtb3JlCisgIG5vc2UvdW5p
dHRlc3Qtc3R5bGUgImRvdCIgb3V0cHV0LgorLSBmaXggaXNzdWUxMzUgLSBtYXJrcyBub3cgd29y
ayB3aXRoIHVuaXR0ZXN0IHRlc3QgY2FzZXMgYXMgd2VsbAorLSBmaXggaXNzdWUxMjYgLSBpbnRy
b2R1Y2UgcHkudGVzdC5zZXRfdHJhY2UoKSB0byB0cmFjZSBleGVjdXRpb24gdmlhCisgIFBEQiBk
dXJpbmcgdGhlIHJ1bm5pbmcgb2YgdGVzdHMgZXZlbiBpZiBjYXB0dXJpbmcgaXMgb25nb2luZy4K
Ky0gZml4IGlzc3VlMTIzIC0gbmV3ICJweXRob24gLW0gcHkudGVzdCIgaW52b2NhdGlvbiBmb3Ig
cHkudGVzdAorICAocmVxdWlyZXMgUHl0aG9uIDIuNSBvciBhYm92ZSkKKy0gZml4IGlzc3VlMTI0
IC0gbWFrZSByZXBvcnRpbmcgbW9yZSByZXNpbGllbnQgYWdhaW5zdCB0ZXN0cyBvcGVuaW5nCisg
IGZpbGVzIG9uIGZpbGVkZXNjcmlwdG9yIDEgKHN0ZG91dCkuCistIGZpeCBpc3N1ZTEwOSAtIHNp
YmxpbmcgY29uZnRlc3QucHkgZmlsZXMgd2lsbCBub3QgYmUgbG9hZGVkLgorICAoYW5kIERpcmVj
dG9yeSBjb2xsZWN0b3JzIGNhbm5vdCBiZSBjdXN0b21pemVkIGFueW1vcmUgZnJvbSBhIERpcmVj
dG9yeSdzCisgIGNvbmZ0ZXN0LnB5IC0gdGhpcyBuZWVkcyB0byBoYXBwZW4gYXQgbGVhc3Qgb25l
IGxldmVsIHVwKS4KKy0gaW50cm9kdWNlIChjdXN0b21pemFibGUpIGFzc2VydGlvbiBmYWlsdXJl
IHJlcHJlc2VudGF0aW9ucyBhbmQgZW5oYW5jZQorICBvdXRwdXQgb24gYXNzZXJ0aW9uIGZhaWx1
cmVzIGZvciBjb21wYXJpc29ucyBhbmQgb3RoZXIgY2FzZXMgKEZsb3JpcyBCcnV5bm9vZ2hlKQor
LSBub3NlLXBsdWdpbjogcGFzcyB0aHJvdWdoIHR5cGUtc2lnbmF0dXJlIGZhaWx1cmVzIGluIHNl
dHVwL3RlYXJkb3duCisgIGZ1bmN0aW9ucyBpbnN0ZWFkIG9mIG5vdCBjYWxsaW5nIHRoZW0gKEVk
IFNpbmdsZXRvbikKKy0gcmVtb3ZlIHB5LnRlc3QuY29sbGVjdC5EaXJlY3RvcnkgKGZvbGxvd3Mg
ZnJvbSBhIG1ham9yIHJlZmFjdG9yaW5nCisgIGFuZCBzaW1wbGlmaWNhdGlvbiBvZiB0aGUgY29s
bGVjdGlvbiBwcm9jZXNzKQorLSBtYWpvcmx5IHJlZHVjZSBweS50ZXN0IGNvcmUgY29kZSwgc2hp
ZnQgZnVuY3Rpb24vcHl0aG9uIHRlc3RpbmcgdG8gb3duIHBsdWdpbgorLSBmaXggaXNzdWU4OCAo
ZmluZGluZyBjdXN0b20gdGVzdCBub2RlcyBmcm9tIGNvbW1hbmQgbGluZSBhcmcpCistIHJlZmlu
ZSAndG1wZGlyJyBjcmVhdGlvbiwgd2lsbCBub3cgY3JlYXRlIGJhc2VuYW1lcyBiZXR0ZXIgYXNz
b2NpYXRlZAorICB3aXRoIHRlc3QgbmFtZXMgKHRoYW5rcyBSb25ueSkKKy0gInhwYXNzIiAodW5l
eHBlY3RlZCBwYXNzKSB0ZXN0cyBkb24ndCBjYXVzZSBleGl0Y29kZSE9MAorLSBmaXggaXNzdWUx
MzEgLyBpc3N1ZTYwIC0gaW1wb3J0aW5nIGRvY3Rlc3RzIGluIF9faW5pdF9fIGZpbGVzIHVzZWQg
YXMgbmFtZXNwYWNlIHBhY2thZ2VzCistIGZpeCBpc3N1ZTkzIHN0ZG91dC9zdGRlcnIgaXMgY2Fw
dHVyZWQgd2hpbGUgaW1wb3J0aW5nIGNvbmZ0ZXN0LnB5CistIGZpeCBidWc6IHVuaXR0ZXN0IGNv
bGxlY3RlZCBmdW5jdGlvbnMgbm93IGFsc28gY2FuIGhhdmUgInB5dGVzdG1hcmsiCisgIGFwcGxp
ZWQgYXQgY2xhc3MvbW9kdWxlIGxldmVsCistIGFkZCBhYmlsaXR5IHRvIHVzZSAiY2xhc3MiIGxl
dmVsIGZvciBjYWNoZWRfc2V0dXAgaGVscGVyCistIGZpeCBzdHJhbmdlbmVzczogbWFyay4qIG9i
amVjdHMgYXJlIG5vdyBpbW11dGFibGUsIGNyZWF0ZSBuZXcgaW5zdGFuY2VzCisKKzEuMy40Cis9
PT09PQorCistIGZpeCBpc3N1ZTExMTogaW1wcm92ZSBpbnN0YWxsIGRvY3VtZW50YXRpb24gZm9y
IHdpbmRvd3MKKy0gZml4IGlzc3VlMTE5OiBmaXggY3VzdG9tIGNvbGxlY3RhYmlsaXR5IG9mIF9f
aW5pdF9fLnB5IGFzIGEgbW9kdWxlCistIGZpeCBpc3N1ZTExNjogLS1kb2N0ZXN0bW9kdWxlcyB3
b3JrIHdpdGggX19pbml0X18ucHkgZmlsZXMgYXMgd2VsbAorLSBmaXggaXNzdWUxMTU6IHVuaWZ5
IGludGVybmFsIGV4Y2VwdGlvbiBwYXNzdGhyb3VnaC9jYXRjaGluZy9HZW5lcmF0b3JFeGl0Cist
IGZpeCBpc3N1ZTExODogbmV3IC0tdGI9bmF0aXZlIGZvciBwcmVzZW50aW5nIGNweXRob24tc3Rh
bmRhcmQgZXhjZXB0aW9ucworCisxLjMuMworPT09PT0KKworLSBmaXggaXNzdWUxMTM6IGFzc2Vy
dGlvbiByZXByZXNlbnRhdGlvbiBwcm9ibGVtIHdpdGggdHJpcGxlLXF1b3RlZCBzdHJpbmdzCisg
IChhbmQgcG9zc2libHkgb3RoZXIgY2FzZXMpCistIG1ha2UgY29uZnRlc3QgbG9hZGluZyBkZXRl
Y3QgdGhhdCBhIGNvbmZ0ZXN0IGZpbGUgd2l0aCB0aGUgc2FtZQorICBjb250ZW50IHdhcyBhbHJl
YWR5IGxvYWRlZCwgYXZvaWRzIHN1cnByaXNlcyBpbiBuZXN0ZWQgZGlyZWN0b3J5IHN0cnVjdHVy
ZXMKKyAgd2hpY2ggY2FuIGJlIHByb2R1Y2VkIGUuZy4gYnkgSHVkc29uLiBJdCBwcm9iYWJseSBy
ZW1vdmVzIHRoZSBuZWVkIHRvIHVzZQorICAtLWNvbmZjdXRkaXIgaW4gbW9zdCBjYXNlcy4KKy0g
Zml4IHRlcm1pbmFsIGNvbG9yaW5nIGZvciB3aW4zMgorICAodGhhbmtzIE1pY2hhZWwgRm9vcmQg
Zm9yIHJlcG9ydGluZykKKy0gZml4IHdlaXJkbmVzczogbWFrZSB0ZXJtaW5hbCB3aWR0aCBkZXRl
Y3Rpb24gd29yayBvbiBzdGRvdXQgaW5zdGVhZCBvZiBzdGRpbgorICAodGhhbmtzIEFybWluIFJv
bmFjaGVyIGZvciByZXBvcnRpbmcpCistIHJlbW92ZSB0cmFpbGluZyB3aGl0ZXNwYWNlIGluIGFs
bCBweS90ZXh0IGRpc3RyaWJ1dGlvbiBmaWxlcworCisxLjMuMgorPT09PT0KKworKipOZXcgZmVh
dHVyZXMqKgorCistIGZpeCBpc3N1ZTEwMzogIGludHJvZHVjZSBweS50ZXN0LnJhaXNlcyBhcyBj
b250ZXh0IG1hbmFnZXIsIGV4YW1wbGVzOjoKKworICAgIHdpdGggcHkudGVzdC5yYWlzZXMoWmVy
b0RpdmlzaW9uRXJyb3IpOgorICAgICAgICB4ID0gMAorICAgICAgICAxIC8geAorCisgICAgd2l0
aCBweS50ZXN0LnJhaXNlcyhSdW50aW1lRXJyb3IpIGFzIGV4Y2luZm86CisgICAgICAgIGNhbGxf
c29tZXRoaW5nKCkKKworICAgICMgeW91IG1heSBkbyBleHRyYSBjaGVja3Mgb24gZXhjaW5mby52
YWx1ZXx0eXBlfHRyYWNlYmFjayBoZXJlCisKKyAgKHRoYW5rcyBSb25ueSBQZmFubnNjaG1pZHQp
CisKKy0gRnVuY2FyZyBmYWN0b3JpZXMgY2FuIG5vdyBkeW5hbWljYWxseSBhcHBseSBhIG1hcmtl
ciB0byBhCisgIHRlc3QgaW52b2NhdGlvbi4gIFRoaXMgaXMgZm9yIGV4YW1wbGUgdXNlZnVsIGlm
IGEgZmFjdG9yeQorICBwcm92aWRlcyBwYXJhbWV0ZXJzIHRvIGEgdGVzdCB3aGljaCBhcmUgZXhw
ZWN0ZWQtdG8tZmFpbDo6CisKKyAgICBkZWYgcHl0ZXN0X2Z1bmNhcmdfX2FyZyhyZXF1ZXN0KToK
KyAgICAgICAgcmVxdWVzdC5hcHBseW1hcmtlcihweS50ZXN0Lm1hcmsueGZhaWwocmVhc29uPSJm
bGFreSBjb25maWciKSkKKyAgICAgICAgLi4uCisKKyAgICBkZWYgdGVzdF9mdW5jdGlvbihhcmcp
OgorICAgICAgICAuLi4KKworLSBpbXByb3ZlZCBlcnJvciByZXBvcnRpbmcgb24gY29sbGVjdGlv
biBhbmQgaW1wb3J0IGVycm9ycy4gVGhpcyBtYWtlcworICB1c2Ugb2YgYSBtb3JlIGdlbmVyYWwg
bWVjaGFuaXNtLCBuYW1lbHkgdGhhdCBmb3IgY3VzdG9tIHRlc3QgaXRlbS9jb2xsZWN0CisgIG5v
ZGVzIGBgbm9kZS5yZXByX2ZhaWx1cmUoZXhjaW5mbylgYCBpcyBub3cgdW5pZm9ybWx5IGNhbGxl
ZCBzbyB0aGF0IHlvdSBjYW4KKyAgb3ZlcnJpZGUgaXQgdG8gcmV0dXJuIGEgc3RyaW5nIGVycm9y
IHJlcHJlc2VudGF0aW9uIG9mIHlvdXIgY2hvaWNlCisgIHdoaWNoIGlzIGdvaW5nIHRvIGJlIHJl
cG9ydGVkIGFzIGEgKHJlZCkgc3RyaW5nLgorCistIGludHJvZHVjZSAnLS1qdW5pdHByZWZpeD1T
VFInIG9wdGlvbiB0byBwcmVwZW5kIGEgcHJlZml4CisgIHRvIGFsbCByZXBvcnRzIGluIHRoZSBq
dW5pdHhtbCBmaWxlLgorCisqKkJ1ZyBmaXhlcyoqCisKKy0gbWFrZSB0ZXN0cyBhbmQgdGhlIGBg
cHl0ZXN0X3JlY3dhcm5gYCBwbHVnaW4gaW4gcGFydGljdWxhciBmdWxseSBjb21wYXRpYmxlCisg
IHRvIFB5dGhvbjIuNyAoaWYgeW91IHVzZSB0aGUgYGByZWN3YXJuYGAgZnVuY2FyZyB3YXJuaW5n
cyB3aWxsIGJlIGVuYWJsZWQgc28gdGhhdAorICB5b3UgY2FuIHByb3Blcmx5IGNoZWNrIGZvciB0
aGVpciBleGlzdGVuY2UgaW4gYSBjcm9zcy1weXRob24gbWFubmVyKS4KKy0gcmVmaW5lIC0tcGRi
OiBpZ25vcmUgeGZhaWxlZCB0ZXN0cywgdW5pZnkgaXRzIFRCLXJlcG9ydGluZyBhbmQKKyAgZG9u
J3QgZGlzcGxheSBmYWlsdXJlcyBhZ2FpbiBhdCB0aGUgZW5kLgorLSBmaXggYXNzZXJ0aW9uIGlu
dGVycHJldGF0aW9uIHdpdGggdGhlICoqIG9wZXJhdG9yICh0aGFua3MgQmVuamFtaW4gUGV0ZXJz
b24pCistIGZpeCBpc3N1ZTEwNSBhc3NpZ25tZW50IG9uIHRoZSBzYW1lIGxpbmUgYXMgYSBmYWls
aW5nIGFzc2VydGlvbiAodGhhbmtzIEJlbmphbWluIFBldGVyc29uKQorLSBmaXggaXNzdWUxMDQg
cHJvcGVyIGVzY2FwaW5nIGZvciB0ZXN0IG5hbWVzIGluIGp1bml0eG1sIHBsdWdpbiAodGhhbmtz
IGFub255bW91cykKKy0gZml4IGlzc3VlNTcgLWZ8LS1sb29wb25mYWlsIHRvIHdvcmsgd2l0aCB4
cGFzc2luZyB0ZXN0cyAodGhhbmtzIFJvbm55KQorLSBmaXggaXNzdWU5MiBjb2xsZWN0b25seSBy
ZXBvcnRlciBhbmQgLS1wYXN0ZWJpbiAodGhhbmtzIEJlbmphbWluIFBldGVyc29uKQorLSBmaXgg
cHkuY29kZS5jb21waWxlKHNvdXJjZSkgdG8gZ2VuZXJhdGUgdW5pcXVlIGZpbGVuYW1lcworLSBm
aXggYXNzZXJ0aW9uIHJlLWludGVycCBwcm9ibGVtcyBvbiBQeVB5LCBieSBkZWZlcmluZyBjb2Rl
CisgIGNvbXBpbGF0aW9uIHRvIHRoZSAob3ZlcnJpZGFibGUpIEZyYW1lLmV2YWwgY2xhc3MuICh0
aGFua3MgQW1hdXJ5IEZvcmdlb3QpCistIGZpeCBweS5wYXRoLmxvY2FsLnB5aW1wb3J0KCkgdG8g
d29yayB3aXRoIGRpcmVjdG9yaWVzCistIHN0cmVhbWxpbmUgcHkucGF0aC5sb2NhbC5ta2R0ZW1w
IGltcGxlbWVudGF0aW9uIGFuZCB1c2FnZQorLSBkb24ndCBwcmludCBlbXB0eSBsaW5lcyB3aGVu
IHNob3dpbmcganVuaXR4bWwtZmlsZW5hbWUKKy0gYWRkIG9wdGlvbmFsIGJvb2xlYW4gaWdub3Jl
X2Vycm9ycyBwYXJhbWV0ZXIgdG8gcHkucGF0aC5sb2NhbC5yZW1vdmUKKy0gZml4IHRlcm1pbmFs
IHdyaXRpbmcgb24gd2luMzIvcHl0aG9uMi40CistIHB5LnByb2Nlc3MuY21kZXhlYygpIG5vdyB0
cmllcyBoYXJkZXIgdG8gcmV0dXJuIHByb3Blcmx5IGVuY29kZWQgdW5pY29kZSBvYmplY3RzCisg
IG9uIGFsbCBweXRob24gdmVyc2lvbnMKKy0gaW5zdGFsbCBwbGFpbiBweS50ZXN0L3B5LndoaWNo
IHNjcmlwdHMgYWxzbyBmb3IgSnl0aG9uLCB0aGlzIGhlbHBzIHRvCisgIGdldCBjYW5vbmljYWwg
c2NyaXB0IHBhdGhzIGluIHZpcnR1YWxlbnYgc2l0dWF0aW9ucworLSBtYWtlIHBhdGguYmVzdHJl
bHBhdGgocGF0aCkgcmV0dXJuICIuIiwgbm90ZSB0aGF0IHdoZW4gY2FsbGluZworICBYLmJlc3Ry
ZWxwYXRoIHRoZSBhc3N1bXB0aW9uIGlzIHRoYXQgWCBpcyBhIGRpcmVjdG9yeS4KKy0gbWFrZSBp
bml0aWFsIGNvbmZ0ZXN0IGRpc2NvdmVyeSBpZ25vcmUgIi0tIiBwcmVmaXhlZCBhcmd1bWVudHMK
Ky0gZml4IHJlc3VsdGxvZyBwbHVnaW4gd2hlbiB1c2VkIGluIGFuIG11bHRpY3B1L211bHRpaG9z
dCB4ZGlzdCBzaXR1YXRpb24KKyAgKHRoYW5rcyBKYWt1YiBHdXN0YWspCistIHBlcmZvcm0gZGlz
dHJpYnV0ZWQgdGVzdGluZyByZWxhdGVkIHJlcG9ydGluZyBpbiB0aGUgeGRpc3QtcGx1Z2luCisg
IHJhdGhlciB0aGFuIGhhdmluZyBkaXN0LXJlbGF0ZWQgY29kZSBpbiB0aGUgZ2VuZXJpYyBweS50
ZXN0CisgIGRpc3RyaWJ1dGlvbgorLSBmaXggaG9tZWRpciBkZXRlY3Rpb24gb24gV2luZG93cwor
LSBzaGlwIGRpc3RyaWJ1dGVfc2V0dXAucHkgdmVyc2lvbiAwLjYuMTMKKworMS4zLjEKKz09PT09
CisKKyoqTmV3IGZlYXR1cmVzKioKKworLSBpc3N1ZTkxOiBpbnRyb2R1Y2UgbmV3IHB5LnRlc3Qu
eGZhaWwocmVhc29uKSBoZWxwZXIKKyAgdG8gaW1wZXJhdGl2ZWx5IG1hcmsgYSB0ZXN0IGFzIGV4
cGVjdGVkIHRvIGZhaWwuIENhbgorICBiZSB1c2VkIGZyb20gd2l0aGluIHNldHVwIGFuZCB0ZXN0
IGZ1bmN0aW9ucy4gVGhpcyBpcworICB1c2VmdWwgZXNwZWNpYWxseSBmb3IgcGFyYW1ldHJpemVk
IHRlc3RzIHdoZW4gY2VydGFpbgorICBjb25maWd1cmF0aW9ucyBhcmUgZXhwZWN0ZWQtdG8tZmFp
bC4gIEluIHRoaXMgY2FzZSB0aGUKKyAgZGVjbGFyYXRpdmUgYXBwcm9hY2ggd2l0aCB0aGUgQHB5
LnRlc3QubWFyay54ZmFpbCBjYW5ub3QKKyAgYmUgdXNlZCBhcyBpdCB3b3VsZCBtYXJrIGFsbCBj
b25maWd1cmF0aW9ucyBhcyB4ZmFpbC4KKworLSBpc3N1ZTEwMjogaW50cm9kdWNlIG5ldyAtLW1h
eGZhaWw9TlVNIG9wdGlvbiB0byBzdG9wCisgIHRlc3QgcnVucyBhZnRlciBOVU0gZmFpbHVyZXMu
ICBUaGlzIGlzIGEgZ2VuZXJhbGl6YXRpb24KKyAgb2YgdGhlICcteCcgb3IgJy0tZXhpdGZpcnN0
JyBvcHRpb24gd2hpY2ggaXMgbm93IGVxdWl2YWxlbnQKKyAgdG8gJy0tbWF4ZmFpbD0xJy4gIEJv
dGggJy14JyBhbmQgJy0tbWF4ZmFpbCcgd2lsbAorICBub3cgYWxzbyBwcmludCBhIGxpbmUgbmVh
ciB0aGUgZW5kIGluZGljYXRpbmcgdGhlIEludGVycnVwdGlvbi4KKworLSBpc3N1ZTg5OiBhbGxv
dyBweS50ZXN0Lm1hcmsgZGVjb3JhdG9ycyB0byBiZSB1c2VkIG9uIGNsYXNzZXMKKyAgKGNsYXNz
IGRlY29yYXRvcnMgd2VyZSBpbnRyb2R1Y2VkIHdpdGggcHl0aG9uMi42KSBhbmQKKyAgYWxzbyBh
bGxvdyB0byBoYXZlIG11bHRpcGxlIG1hcmtlcnMgYXBwbGllZCBhdCBjbGFzcy9tb2R1bGUgbGV2
ZWwKKyAgYnkgc3BlY2lmeWluZyBhIGxpc3QuCisKKy0gaW1wcm92ZSBhbmQgcmVmaW5lIGxldHRl
ciByZXBvcnRpbmcgaW4gdGhlIHByb2dyZXNzIGJhcjoKKyAgLiAgcGFzcworICBmICBmYWlsZWQg
dGVzdAorICBzICBza2lwcGVkIHRlc3RzIChyZW1pbmRlcjogdXNlIGZvciBkZXBlbmRlbmN5L3Bs
YXRmb3JtIG1pc21hdGNoIG9ubHkpCisgIHggIHhmYWlsZWQgdGVzdCAodGVzdCB0aGF0IHdhcyBl
eHBlY3RlZCB0byBmYWlsKQorICBYICB4cGFzc2VkIHRlc3QgKHRlc3QgdGhhdCB3YXMgZXhwZWN0
ZWQgdG8gZmFpbCBidXQgcGFzc2VkKQorCisgIFlvdSBjYW4gdXNlIGFueSBjb21iaW5hdGlvbiBv
ZiAnZnN4WCcgd2l0aCB0aGUgJy1yJyBleHRlbmRlZAorICByZXBvcnRpbmcgb3B0aW9uLiBUaGUg
eGZhaWwveHBhc3MgcmVzdWx0cyB3aWxsIHNob3cgdXAgYXMKKyAgc2tpcHBlZCB0ZXN0cyBpbiB0
aGUganVuaXR4bWwgb3V0cHV0IC0gd2hpY2ggYWxzbyBmaXhlcworICBpc3N1ZTk5LgorCistIG1h
a2UgcHkudGVzdC5jbWRsaW5lLm1haW4oKSByZXR1cm4gdGhlIGV4aXRzdGF0dXMgaW5zdGVhZCBv
ZiByYWlzaW5nCisgIFN5c3RlbUV4aXQgYW5kIGFsc28gYWxsb3cgaXQgdG8gYmUgY2FsbGVkIG11
bHRpcGxlIHRpbWVzLiAgVGhpcyBvZgorICBjb3Vyc2UgcmVxdWlyZXMgdGhhdCB5b3VyIGFwcGxp
Y2F0aW9uIGFuZCB0ZXN0cyBhcmUgcHJvcGVybHkgdGVhcmVkCisgIGRvd24gYW5kIGRvbid0IGhh
dmUgZ2xvYmFsIHN0YXRlLgorCisqKkJ1ZyBGaXhlcyoqCisKKy0gaW1wcm92ZWQgdHJhY2ViYWNr
IHByZXNlbnRhdGlvbjoKKyAgLSBpbXByb3ZlZCBhbmQgdW5pZmllZCByZXBvcnRpbmcgZm9yICIt
LXRiPXNob3J0IiBvcHRpb24KKyAgLSBFcnJvcnMgZHVyaW5nIHRlc3QgbW9kdWxlIGltcG9ydHMg
YXJlIG11Y2ggc2hvcnRlciwgKHVzaW5nIC0tdGI9c2hvcnQgc3R5bGUpCisgIC0gcmFpc2VzIHNo
b3dzIHNob3J0ZXIgbW9yZSByZWxldmFudCB0cmFjZWJhY2tzCisgIC0gLS1mdWxsdHJhY2Ugbm93
IG1vcmUgc3lzdGVtYXRpY2FsbHkgbWFrZXMgdHJhY2VzIGxvbmdlciAvIGluaGliaXRzIGN1dHRp
bmcKKworLSBpbXByb3ZlIHN1cHBvcnQgZm9yIHJhaXNlcyBhbmQgb3RoZXIgZHluYW1pY2FsbHkg
Y29tcGlsZWQgY29kZSBieQorICBtYW5pcHVsYXRpbmcgcHl0aG9uJ3MgbGluZWNhY2hlLmNhY2hl
IGluc3RlYWQgb2YgdGhlIHByZXZpb3VzCisgIHJhdGhlciBoYWNreSB3YXkgb2YgY3JlYXRpbmcg
Y3VzdG9tIGNvZGUgb2JqZWN0cy4gIFRoaXMgbWFrZXMKKyAgaXQgc2VlbWxlc3NseSB3b3JrIG9u
IEp5dGhvbiBhbmQgUHlQeSB3aGVyZSBpdCBwcmV2aW91c2x5IGRpZG4ndC4KKworLSBmaXggaXNz
dWU5NjogbWFrZSBjYXB0dXJpbmcgbW9yZSByZXNpbGllbnQgYWdhaW5zdCBDb250cm9sLUMKKyAg
aW50ZXJydXB0aW9ucyAoaW52b2x2ZWQgc29tZXdoYXQgc3Vic3RhbnRpYWwgcmVmYWN0b3JpbmcK
KyAgdG8gdGhlIHVuZGVybHlpbmcgY2FwdHVyaW5nIGZ1bmN0aW9uYWxpdHkgdG8gYXZvaWQgcmFj
ZQorICBjb25kaXRpb25zKS4KKworLSBmaXggY2hhaW5pbmcgb2YgY29uZGl0aW9uYWwgc2tpcGlm
L3hmYWlsIGRlY29yYXRvcnMgLSBzbyBpdCB3b3JrcyBub3cKKyAgYXMgZXhwZWN0ZWQgdG8gdXNl
IG11bHRpcGxlIEBweS50ZXN0Lm1hcmsuc2tpcGlmKGNvbmRpdGlvbikgZGVjb3JhdG9ycywKKyAg
aW5jbHVkaW5nIHNwZWNpZmljIHJlcG9ydGluZyB3aGljaCBvZiB0aGUgY29uZGl0aW9ucyBsZWFk
IHRvIHNraXBwaW5nLgorCistIGZpeCBpc3N1ZTk1OiBsYXRlLWltcG9ydCB6bGliIHNvIHRoYXQg
aXQncyBub3QgcmVxdWlyZWQKKyAgZm9yIGdlbmVyYWwgcHkudGVzdCBzdGFydHVwLgorCistIGZp
eCBpc3N1ZTk0OiBtYWtlIHJlcG9ydGluZyBtb3JlIHJvYnVzdCBhZ2FpbnN0IGJvZ3VzIHNvdXJj
ZSBjb2RlCisgIChhbmQgaW50ZXJuYWxseSBiZSBtb3JlIGNhcmVmdWwgd2hlbiBwcmVzZW50aW5n
IHVuZXhwZWN0ZWQgYnl0ZSBzZXF1ZW5jZXMpCisKKworMS4zLjAKKz09PT09CisKKy0gZGVwcmVj
YXRlIC0tcmVwb3J0IG9wdGlvbiBpbiBmYXZvdXIgb2YgYSBuZXcgc2hvcnRlciBhbmQgZWFzaWVy
IHRvCisgIHJlbWVtYmVyIC1yIG9wdGlvbjogaXQgdGFrZXMgYSBzdHJpbmcgYXJndW1lbnQgY29u
c2lzdGluZyBvZiBhbnkKKyAgY29tYmluYXRpb24gb2YgJ3hmc1gnIGNoYXJhY3RlcnMuICBUaGV5
IHJlbGF0ZSB0byB0aGUgc2luZ2xlIGNoYXJzCisgIHlvdSBzZWUgZHVyaW5nIHRoZSBkb3R0ZWQg
cHJvZ3Jlc3MgcHJpbnRpbmcgYW5kIHdpbGwgcHJpbnQgYW4gZXh0cmEgbGluZQorICBwZXIgdGVz
dCBhdCB0aGUgZW5kIG9mIHRoZSB0ZXN0IHJ1bi4gIFRoaXMgZXh0cmEgbGluZSBpbmRpY2F0ZXMg
dGhlIGV4YWN0CisgIHBvc2l0aW9uIG9yIHRlc3QgSUQgdGhhdCB5b3UgZGlyZWN0bHkgcGFzdGUg
dG8gdGhlIHB5LnRlc3QgY21kbGluZSBpbiBvcmRlcgorICB0byByZS1ydW4gYSBwYXJ0aWN1bGFy
IHRlc3QuCisKKy0gYWxsb3cgZXh0ZXJuYWwgcGx1Z2lucyB0byByZWdpc3RlciBuZXcgaG9va3Mg
dmlhIHRoZSBuZXcKKyAgcHl0ZXN0X2FkZGhvb2tzKHBsdWdpbm1hbmFnZXIpIGhvb2suICBUaGUg
bmV3IHJlbGVhc2Ugb2YKKyAgdGhlIHB5dGVzdC14ZGlzdCBwbHVnaW4gZm9yIGRpc3RyaWJ1dGVk
IGFuZCBsb29wb25mYWlsaW5nCisgIHRlc3RpbmcgcmVxdWlyZXMgdGhpcyBmZWF0dXJlLgorCist
IGFkZCBhIG5ldyBweXRlc3RfaWdub3JlX2NvbGxlY3QocGF0aCwgY29uZmlnKSBob29rIHRvIGFs
bG93IHByb2plY3RzIGFuZAorICBwbHVnaW5zIHRvIGRlZmluZSBleGNsdXNpb24gYmVoYXZpb3Vy
IGZvciB0aGVpciBkaXJlY3Rvcnkgc3RydWN0dXJlIC0KKyAgZm9yIGV4YW1wbGUgeW91IG1heSBk
ZWZpbmUgaW4gYSBjb25mdGVzdC5weSB0aGlzIG1ldGhvZDo6CisKKyAgICAgICAgZGVmIHB5dGVz
dF9pZ25vcmVfY29sbGVjdChwYXRoKToKKyAgICAgICAgICAgIHJldHVybiBwYXRoLmNoZWNrKGxp
bms9MSkKKworICB0byBwcmV2ZW50IGV2ZW4gYSBjb2xsZWN0aW9uIHRyeSBvZiBhbnkgdGVzdHMg
aW4gc3ltbGlua2VkIGRpcnMuCisKKy0gbmV3IHB5dGVzdF9weWNvbGxlY3RfbWFrZW1vZHVsZShw
YXRoLCBwYXJlbnQpIGhvb2sgZm9yCisgIGFsbG93aW5nIGN1c3RvbWl6YXRpb24gb2YgdGhlIE1v
ZHVsZSBjb2xsZWN0aW9uIG9iamVjdCBmb3IgYQorICBtYXRjaGluZyB0ZXN0IG1vZHVsZS4KKwor
LSBleHRlbmQgYW5kIHJlZmluZSB4ZmFpbCBtZWNoYW5pc206CisgIGBgQHB5LnRlc3QubWFyay54
ZmFpbChydW49RmFsc2UpYGAgZG8gbm90IHJ1biB0aGUgZGVjb3JhdGVkIHRlc3QKKyAgYGBAcHku
dGVzdC5tYXJrLnhmYWlsKHJlYXNvbj0iLi4uIilgYCBwcmludHMgdGhlIHJlYXNvbiBzdHJpbmcg
aW4geGZhaWwgc3VtbWFyaWVzCisgIHNwZWNpZml5aW5nIGBgLS1ydW54ZmFpbGBgIG9uIGNvbW1h
bmQgbGluZSB2aXJ0dWFsbHkgaWdub3JlcyB4ZmFpbCBtYXJrZXJzCisKKy0gZXhwb3NlIChwcmV2
aW91c2x5IGludGVybmFsKSBjb21tb25seSB1c2VmdWwgbWV0aG9kczoKKyAgcHkuaW8uZ2V0X3Rl
cm1pbmFsX3dpdGgoKSAtPiByZXR1cm4gdGVybWluYWwgd2lkdGgKKyAgcHkuaW8uYW5zaV9wcmlu
dCguLi4pIC0+IHByaW50IGNvbG9yZWQvYm9sZCB0ZXh0IG9uIGxpbnV4L3dpbjMyCisgIHB5Lmlv
LnNhZmVyZXByKG9iaikgLT4gcmV0dXJuIGxpbWl0ZWQgcmVwcmVzZW50YXRpb24gc3RyaW5nCisK
Ky0gZXhwb3NlIHRlc3Qgb3V0Y29tZSByZWxhdGVkIGV4Y2VwdGlvbnMgYXMgcHkudGVzdC5za2lw
LkV4Y2VwdGlvbiwKKyAgcHkudGVzdC5yYWlzZXMuRXhjZXB0aW9uIGV0Yy4sIHVzZWZ1bCBtb3N0
bHkgZm9yIHBsdWdpbnMKKyAgZG9pbmcgc3BlY2lhbCBvdXRjb21lIGludGVycHJldGF0aW9uL3R3
ZWFraW5nCisKKy0gKGlzc3VlODUpIGZpeCBqdW5pdHhtbCBwbHVnaW4gdG8gaGFuZGxlIHRlc3Rz
IHdpdGggbm9uLWFzY2lpIG91dHB1dAorCistIGZpeC9yZWZpbmUgcHl0aG9uMyBjb21wYXRpYmls
aXR5ICh0aGFua3MgQmVuamFtaW4gUGV0ZXJzb24pCisKKy0gZml4ZXMgZm9yIG1ha2luZyB0aGUg
anl0aG9uL3dpbjMyIGNvbWJpbmF0aW9uIHdvcmssIG5vdGUgaG93ZXZlcjoKKyAganl0aG9uMi41
LjEvd2luMzIgZG9lcyBub3QgcHJvdmlkZSBhIGNvbW1hbmQgbGluZSBsYXVuY2hlciwgc2VlCisg
IGh0dHA6Ly9idWdzLmp5dGhvbi5vcmcvaXNzdWUxNDkxIC4gU2VlIHB5bGliIGluc3RhbGwgZG9j
dW1lbnRhdGlvbgorICBmb3IgaG93IHRvIHdvcmsgYXJvdW5kLgorCistIGZpeGVzIGZvciBoYW5k
bGluZyBvZiB1bmljb2RlIGV4Y2VwdGlvbiB2YWx1ZXMgYW5kIHVucHJpbnRhYmxlIG9iamVjdHMK
KworLSAoaXNzdWU4NykgZml4IHVuYm91bmRsb2NhbCBlcnJvciBpbiBhc3NlcnRpb25vbGQgY29k
ZQorCistIChpc3N1ZTg2KSBpbXByb3ZlIGRvY3VtZW50YXRpb24gZm9yIGxvb3BvbmZhaWxpbmcK
KworLSByZWZpbmUgSU8gY2FwdHVyaW5nOiBzdGRpbi1yZWRpcmVjdCBwc2V1ZG8tZmlsZSBub3cg
aGFzIGEgTk9QIGNsb3NlKCkgbWV0aG9kCisKKy0gc2hpcCBkaXN0cmlidXRlX3NldHVwLnB5IHZl
cnNpb24gMC42LjEwCisKKy0gYWRkZWQgbGlua3MgdG8gdGhlIG5ldyBjYXB0dXJlbG9nIGFuZCBj
b3ZlcmFnZSBwbHVnaW5zCisKKworMS4yLjAKKz09PT09CisKKy0gcmVmaW5lZCB1c2FnZSBhbmQg
b3B0aW9ucyBmb3IgInB5LmNsZWFudXAiOjoKKworICAgIHB5LmNsZWFudXAgICAgICMgcmVtb3Zl
ICIqLnB5YyIgYW5kICIqJHB5LmNsYXNzIiAoanl0aG9uKSBmaWxlcworICAgIHB5LmNsZWFudXAg
LWUgLnN3cCAtZSAuY2FjaGUgIyBhbHNvIHJlbW92ZSBmaWxlcyB3aXRoIHRoZXNlIGV4dGVuc2lv
bnMKKyAgICBweS5jbGVhbnVwIC1zICAjIHJlbW92ZSAiYnVpbGQiIGFuZCAiZGlzdCIgZGlyZWN0
b3J5IG5leHQgdG8gc2V0dXAucHkgZmlsZXMKKyAgICBweS5jbGVhbnVwIC1kICAjIGFsc28gcmVt
b3ZlIGVtcHR5IGRpcmVjdG9yaWVzCisgICAgcHkuY2xlYW51cCAtYSAgIyBzeW5vbnltIGZvciAi
LXMgLWQgLWUgJ3BpcC1sb2cudHh0JyIKKyAgICBweS5jbGVhbnVwIC1uICAjIGRyeSBydW4sIG9u
bHkgc2hvdyB3aGF0IHdvdWxkIGJlIHJlbW92ZWQKKworLSBhZGQgYSBuZXcgb3B0aW9uICJweS50
ZXN0IC0tZnVuY2FyZ3MiIHdoaWNoIHNob3dzIGF2YWlsYWJsZSBmdW5jYXJncworICBhbmQgdGhl
aXIgaGVscCBzdHJpbmdzIChkb2NzdHJpbmdzIG9uIHRoZWlyIHJlc3BlY3RpdmUgZmFjdG9yeSBm
dW5jdGlvbikKKyAgZm9yIGEgZ2l2ZW4gdGVzdCBwYXRoCisKKy0gZGlzcGxheSBhIHNob3J0IGFu
ZCBjb25jaXNlIHRyYWNlYmFjayBpZiBhIGZ1bmNhcmcgbG9va3VwIGZhaWxzCisKKy0gZWFybHkt
bG9hZCAiY29uZnRlc3QucHkiIGZpbGVzIGluIG5vbi1kb3QgZmlyc3QtbGV2ZWwgc3ViIGRpcmVj
dG9yaWVzLgorICBhbGxvd3MgdG8gY29udmVuaWVudGx5IGtlZXAgYW5kIGFjY2VzcyB0ZXN0LXJl
bGF0ZWQgb3B0aW9ucyBpbiBhIGBgdGVzdGBgCisgIHN1YmRpciBhbmQgc3RpbGwgYWRkIGNvbW1h
bmQgbGluZSBvcHRpb25zLgorCistIGZpeCBpc3N1ZTY3OiBuZXcgc3VwZXItc2hvcnQgdHJhY2Vi
YWNrLXByaW50aW5nIG9wdGlvbjogIi0tdGI9bGluZSIgd2lsbCBwcmludCBhIHNpbmdsZSBsaW5l
IGZvciBlYWNoIGZhaWxpbmcgKHB5dGhvbikgdGVzdCBpbmRpY2F0aW5nIGl0cyBmaWxlbmFtZSwg
bGluZW5vIGFuZCB0aGUgZmFpbHVyZSB2YWx1ZQorCistIGZpeCBpc3N1ZTc4OiBhbHdheXMgY2Fs
bCBweXRob24tbGV2ZWwgdGVhcmRvd24gZnVuY3Rpb25zIGV2ZW4gaWYgdGhlCisgIGFjY29yZGlu
ZyBzZXR1cCBmYWlsZWQuICBUaGlzIGluY2x1ZGVzIHJlZmluZW1lbnRzIGZvciBjYWxsaW5nIHNl
dHVwX21vZHVsZS9jbGFzcyBmdW5jdGlvbnMKKyAgd2hpY2ggd2lsbCBub3cgb25seSBiZSBjYWxs
ZWQgb25jZSBpbnN0ZWFkIG9mIHRoZSBwcmV2aW91cyBiZWhhdmlvdXIgd2hlcmUgdGhleSdkIGJl
IGNhbGxlZAorICBtdWx0aXBsZSB0aW1lcyBpZiB0aGV5IHJhaXNlIGFuIGV4Y2VwdGlvbiAoaW5j
bHVkaW5nIGEgU2tpcHBlZCBleGNlcHRpb24pLiAgQW55IGV4Y2VwdGlvbgorICB3aWxsIGJlIHJl
LWNvcmRlZCBhbmQgYXNzb2NpYXRlZCB3aXRoIGFsbCB0ZXN0cyBpbiB0aGUgYWNjb3JkaW5nIG1v
ZHVsZS9jbGFzcyBzY29wZS4KKworLSBmaXggaXNzdWU2MzogYXNzdW1lIDw0MCBjb2x1bW5zIHRv
IGJlIGEgYm9ndXMgdGVybWluYWwgd2lkdGgsIGRlZmF1bHQgdG8gODAKKworLSBmaXggcGRiIGRl
YnVnZ2luZyB0byBiZSBpbiB0aGUgY29ycmVjdCBmcmFtZSBvbiByYWlzZXMtcmVsYXRlZCBlcnJv
cnMKKworLSB1cGRhdGUgYXBpcGtnLnB5IHRvIGZpeCBhbiBpc3N1ZSB3aGVyZSByZWN1cnNpdmUg
aW1wb3J0cyBtaWdodAorICB1bm5lY2Vzc2FyaWx5IGJyZWFrIGltcG9ydGluZworCistIGZpeCBw
bHVnaW4gbGlua3MKKworMS4xLjEKKz09PT09CisKKy0gbW92ZWQgZGlzdC9sb29wb25mYWlsaW5n
IGZyb20gcHkudGVzdCBjb3JlIGludG8gYSBuZXcKKyAgc2VwYXJhdGVseSByZWxlYXNlZCBweXRl
c3QteGRpc3QgcGx1Z2luLgorCistIG5ldyBqdW5pdHhtbCBwbHVnaW46IC0tanVuaXR4bWw9cGF0
aCB3aWxsIGdlbmVyYXRlIGEganVuaXQgc3R5bGUgeG1sIGZpbGUKKyAgd2hpY2ggaXMgcHJvY2Vz
c2FibGUgZS5nLiBieSB0aGUgSHVkc29uIENJIHN5c3RlbS4KKworLSBuZXcgb3B0aW9uOiAtLWdl
bnNjcmlwdD1wYXRoIHdpbGwgZ2VuZXJhdGUgYSBzdGFuZGFsb25lIHB5LnRlc3Qgc2NyaXB0Cisg
IHdoaWNoIHdpbGwgbm90IG5lZWQgYW55IGxpYnJhcmllcyBpbnN0YWxsZWQuICB0aGFua3MgdG8g
UmFsZiBTY2htaXR0LgorCistIG5ldyBvcHRpb246IC0taWdub3JlIHdpbGwgcHJldmVudCBzcGVj
aWZpZWQgcGF0aCBmcm9tIGNvbGxlY3Rpb24uCisgIENhbiBiZSBzcGVjaWZpZWQgbXVsdGlwbGUg
dGltZXMuCisKKy0gbmV3IG9wdGlvbjogLS1jb25mY3V0ZGlyPWRpciB3aWxsIG1ha2UgcHkudGVz
dCBvbmx5IGNvbnNpZGVyIGNvbmZ0ZXN0CisgIGZpbGVzIHRoYXQgYXJlIHJlbGF0aXZlIHRvIHRo
ZSBzcGVjaWZpZWQgZGlyLgorCistIG5ldyBmdW5jYXJnOiAicHl0ZXN0Y29uZmlnIiBpcyB0aGUg
cHl0ZXN0IGNvbmZpZyBvYmplY3QgZm9yIGFjY2VzcworICB0byBjb21tYW5kIGxpbmUgYXJncyBh
bmQgY2FuIG5vdyBiZSBlYXNpbHkgdXNlZCBpbiBhIHRlc3QuCisKKy0gaW5zdGFsbCBgYHB5LnRl
c3RgYCBhbmQgYGBweS53aGljaGBgIHdpdGggYSBgYC0kVkVSU0lPTmBgIHN1ZmZpeCB0bworICBk
aXNhbWJpZ3VhdGUgYmV0d2VlbiBQeXRob24zLCBweXRob24yLlgsIEp5dGhvbiBhbmQgUHlQeSBp
bnN0YWxsZWQgdmVyc2lvbnMuCisKKy0gbmV3ICJweXRlc3Rjb25maWciIGZ1bmNhcmcgYWxsb3dz
IGFjY2VzcyB0byB0ZXN0IGNvbmZpZyBvYmplY3QKKworLSBuZXcgInB5dGVzdF9yZXBvcnRfaGVh
ZGVyIiBob29rIGNhbiByZXR1cm4gYWRkaXRpb25hbCBsaW5lcworICB0byBiZSBkaXNwbGF5ZWQg
YXQgdGhlIGhlYWRlciBvZiBhIHRlc3QgcnVuLgorCistIChleHBlcmltZW50YWwpIGFsbG93ICJw
eS50ZXN0IHBhdGg6Om5hbWUxOjpuYW1lMjo6Li4uIiBmb3IgcG9pbnRpbmcKKyAgdG8gYSB0ZXN0
IHdpdGhpbiBhIHRlc3QgY29sbGVjdGlvbiBkaXJlY3RseS4gIFRoaXMgbWlnaHQgZXZlbnR1YWxs
eQorICBldm9sdmUgYXMgYSBmdWxsIHN1YnN0aXR1dGUgdG8gIi1rIiBzcGVjaWZpY2F0aW9ucy4K
KworLSBzdHJlYW1saW5lZCBwbHVnaW4gbG9hZGluZzogb3JkZXIgaXMgbm93IGFzIGRvY3VtZW50
ZWQgaW4KKyAgY3VzdG9taXplLmh0bWw6IHNldHVwdG9vbHMsIEVOViwgY29tbWFuZGxpbmUsIGNv
bmZ0ZXN0LgorICBhbHNvIHNldHVwdG9vbHMgZW50cnkgcG9pbnQgbmFtZXMgYXJlIHR1cm5lZCB0
byBjYW5vbmljYWwgbmFtZWVzICgicHl0ZXN0XyoiKQorCistIGF1dG9tYXRpY2FsbHkgc2tpcCB0
ZXN0cyB0aGF0IG5lZWQgJ2NhcGZkJyBidXQgaGF2ZSBubyBvcy5kdXAKKworLSBhbGxvdyBweXRl
c3RfZ2VuZXJhdGVfdGVzdHMgdG8gYmUgZGVmaW5lZCBpbiBjbGFzc2VzIGFzIHdlbGwKKworLSBk
ZXByZWNhdGUgdXNhZ2Ugb2YgJ2Rpc2FibGVkJyBhdHRyaWJ1dGUgaW4gZmF2b3VyIG9mIHB5dGVz
dG1hcmsKKy0gZGVwcmVjYXRlIGRlZmluaXRpb24gb2YgRGlyZWN0b3J5LCBNb2R1bGUsIENsYXNz
IGFuZCBGdW5jdGlvbiBub2RlcworICBpbiBjb25mdGVzdC5weSBmaWxlcy4gIFVzZSBweXRlc3Qg
Y29sbGVjdCBob29rcyBpbnN0ZWFkLgorCistIGNvbGxlY3Rpb24vaXRlbSBub2RlIHNwZWNpZmlj
IHJ1bnRlc3QvY29sbGVjdCBob29rcyBhcmUgb25seSBjYWxsZWQgZXhhY3RseQorICBvbiBtYXRj
aGluZyBjb25mdGVzdC5weSBmaWxlcywgaS5lLiBvbmVzIHdoaWNoIGFyZSBleGFjdGx5IGJlbG93
CisgIHRoZSBmaWxlc3lzdGVtIHBhdGggb2YgYW4gaXRlbQorCistIGNoYW5nZTogdGhlIGZpcnN0
IHB5dGVzdF9jb2xsZWN0X2RpcmVjdG9yeSBob29rIHRvIHJldHVybiBzb21ldGhpbmcKKyAgd2ls
bCBub3cgcHJldmVudCBmdXJ0aGVyIGhvb2tzIHRvIGJlIGNhbGxlZC4KKworLSBjaGFuZ2U6IGZp
Z2xlYWYgcGx1Z2luIG5vdyByZXF1aXJlcyAtLWZpZ2xlYWYgdG8gcnVuLiAgQWxzbworICBjaGFu
Z2UgaXRzIGxvbmcgY29tbWFuZCBsaW5lIG9wdGlvbnMgdG8gYmUgYSBiaXQgc2hvcnRlciAoc2Vl
IHB5LnRlc3QgLWgpLgorCistIGNoYW5nZTogcHl0ZXN0IGRvY3Rlc3QgcGx1Z2luIGlzIG5vdyBl
bmFibGVkIGJ5IGRlZmF1bHQgYW5kIGhhcyBhCisgIG5ldyBvcHRpb24gLS1kb2N0ZXN0LWdsb2Ig
dG8gc2V0IGEgcGF0dGVybiBmb3IgZmlsZSBtYXRjaGVzLgorCistIGNoYW5nZTogcmVtb3ZlIGlu
dGVybmFsIHB5Ll8qIGhlbHBlciB2YXJzLCBvbmx5IGtlZXAgcHkuX3B5ZGlyCisKKy0gcm9idXN0
aWZ5IGNhcHR1cmluZyB0byBzdXJ2aXZlIGlmIGN1c3RvbSBweXRlc3RfcnVudGVzdF9zZXR1cAor
ICBjb2RlIGZhaWxlZCBhbmQgcHJldmVudGVkIHRoZSBjYXB0dXJpbmcgc2V0dXAgY29kZSBmcm9t
IHJ1bm5pbmcuCisKKy0gbWFrZSBweS50ZXN0LiogaGVscGVycyBwcm92aWRlZCBieSBkZWZhdWx0
IHBsdWdpbnMgdmlzaWJsZSBlYXJseSAtCisgIHdvcmtzIHRyYW5zcGFyZW50bHkgYm90aCBmb3Ig
cHlkb2MgYW5kIGZvciBpbnRlcmFjdGl2ZSBzZXNzaW9ucworICB3aGljaCB3aWxsIHJlZ3VsYXJs
eSBzZWUgZS5nLiBweS50ZXN0Lm1hcmsgYW5kIHB5LnRlc3QuaW1wb3J0b3Jza2lwLgorCistIHNp
bXBsaWZ5IGludGVybmFsIHBsdWdpbiBtYW5hZ2VyIG1hY2hpbmVyeQorLSBzaW1wbGlmeSBpbnRl
cm5hbCBjb2xsZWN0aW9uIHRyZWUgYnkgaW50cm9kdWNpbmcgYSBSb290Q29sbGVjdG9yIG5vZGUK
KworLSBmaXggYXNzZXJ0IHJlaW50ZXJwcmVhdGlvbiB0aGF0IHNlZXMgYSBjYWxsIGNvbnRhaW5p
bmcgImtleXdvcmQ9Li4uIgorCistIGZpeCBpc3N1ZTY2OiBpbnZva2UgcHl0ZXN0X3Nlc3Npb25z
dGFydCBhbmQgcHl0ZXN0X3Nlc3Npb25maW5pc2gKKyAgaG9va3Mgb24gc2xhdmVzIGR1cmluZyBk
aXN0LXRlc3RpbmcsIHJlcG9ydCBtb2R1bGUvc2Vzc2lvbiB0ZWFyZG93bgorICBob29rcyBjb3Jy
ZWN0bHkuCisKKy0gZml4IGlzc3VlNjU6IHByb3Blcmx5IGhhbmRsZSBkaXN0LXRlc3RpbmcgaWYg
bm8KKyAgZXhlY25ldC9weSBsaWIgaW5zdGFsbGVkIHJlbW90ZWx5LgorCistIHNraXAgc29tZSBp
bnN0YWxsLXRlc3RzIGlmIG5vIGV4ZWNuZXQgaXMgYXZhaWxhYmxlCisKKy0gZml4IGRvY3MsIGZp
eCBpbnRlcm5hbCBiaW4vIHNjcmlwdCBnZW5lcmF0aW9uCisKKworMS4xLjAKKz09PT09CisKKy0g
aW50cm9kdWNlIGF1dG9tYXRpYyBwbHVnaW4gcmVnaXN0cmF0aW9uIHZpYSAncHl0ZXN0MTEnCisg
IGVudHJ5cG9pbnRzIHZpYSBzZXR1cHRvb2xzJyBwa2dfcmVzb3VyY2VzLml0ZXJfZW50cnlfcG9p
bnRzCisKKy0gZml4IHB5LnRlc3QgZGlzdC10ZXN0aW5nIHRvIHdvcmsgd2l0aCBleGVjbmV0ID49
IDEuMC4wYjQKKworLSByZS1pbnRyb2R1Y2UgcHkudGVzdC5jbWRsaW5lLm1haW4oKSBmb3IgYmV0
dGVyIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKKworLSBzdm4gcGF0aHM6IGZpeCBhIGJ1ZyB3aXRo
IHBhdGguY2hlY2sodmVyc2lvbmVkPVRydWUpIGZvciBzdm4gcGF0aHMsCisgIGFsbG93ICclJyBp
biBzdm4gcGF0aHMsIG1ha2Ugc3Zud2MudXBkYXRlKCkgZGVmYXVsdCB0byBpbnRlcmFjdGl2ZSBt
b2RlCisgIGxpa2UgaW4gMS4wLnggYW5kIGFkZCBzdm53Yy51cGRhdGUoaW50ZXJhY3RpdmU9RmFs
c2UpIHRvIGluaGliaXQgaW50ZXJhY3Rpb24uCisKKy0gcmVmaW5lIGRpc3RyaWJ1dGVkIHRhcmJh
bGwgdG8gY29udGFpbiB0ZXN0IGFuZCBubyBweWMgZmlsZXMKKworLSB0cnkgaGFyZGVyIHRvIGhh
dmUgZGVwcmVjYXRpb24gd2FybmluZ3MgZm9yIHB5LmNvbXBhdC4qIGFjY2Vzc2VzCisgIHJlcG9y
dCBhIGNvcnJlY3QgbG9jYXRpb24KKworMS4wLjMKKz09PT09CisKKyogYWRqdXN0IGFuZCBpbXBy
b3ZlIGRvY3MKKworKiByZW1vdmUgcHkucmVzdCB0b29sIGFuZCBpbnRlcm5hbCBuYW1lc3BhY2Ug
LSBpdCB3YXMKKyAgbmV2ZXIgcmVhbGx5IGFkdmVydGlzZWQgYW5kIGNhbiBzdGlsbCBiZSB1c2Vk
IHdpdGgKKyAgdGhlIG9sZCByZWxlYXNlIGlmIG5lZWRlZC4gIElmIHRoZXJlIGlzIGludGVyZXN0
CisgIGl0IGNvdWxkIGJlIHJldml2ZWQgaW50byBpdHMgb3duIHRvb2wgaSBndWVzcy4KKworKiBm
aXggaXNzdWU0OCBhbmQgaXNzdWU1OTogcmFpc2UgYW4gRXJyb3IgaWYgdGhlIG1vZHVsZQorICBm
cm9tIGFuIGltcG9ydGVkIHRlc3QgZmlsZSBkb2VzIG5vdCBzZWVtIHRvIGNvbWUgZnJvbQorICB0
aGUgZmlsZXBhdGggLSBhdm9pZHMgInNhbWUtbmFtZSIgY29uZnVzaW9uIHRoYXQgaGFzCisgIGJl
ZW4gcmVwb3J0ZWQgcmVwZWF0ZWRseQorCisqIG1lcmdlZCBSb25ueSdzIG5vc2UtY29tcGF0aWJp
bGl0eSBoYWNrczogbm93CisgIG5vc2Utc3R5bGUgc2V0dXBfbW9kdWxlKCkgYW5kIHNldHVwKCkg
ZnVuY3Rpb25zIGFyZQorICBzdXBwb3J0ZWQKKworKiBpbnRyb2R1Y2UgZ2VuZXJhbGl6ZWQgcHku
dGVzdC5tYXJrIGZ1bmN0aW9uIG1hcmtpbmcKKworKiByZXNodWZmbGUgLyByZWZpbmUgY29tbWFu
ZCBsaW5lIGdyb3VwaW5nCisKKyogZGVwcmVjYXRlIHBhcnNlci5hZGRncm91cCBpbiBmYXZvdXIg
b2YgZ2V0Z3JvdXAgd2hpY2ggY3JlYXRlcyBvcHRpb24gZ3JvdXAKKworKiBhZGQgLS1yZXBvcnQg
Y29tbWFuZCBsaW5lIG9wdGlvbiB0aGF0IGFsbG93cyB0byBjb250cm9sIHNob3dpbmcgb2Ygc2tp
cHBlZC94ZmFpbGVkIHNlY3Rpb25zCisKKyogZ2VuZXJhbGl6ZWQgc2tpcHBpbmc6IGEgbmV3IHdh
eSB0byBtYXJrIHB5dGhvbiBmdW5jdGlvbnMgd2l0aCBza2lwaWYgb3IgeGZhaWwKKyAgYXQgZnVu
Y3Rpb24sIGNsYXNzIGFuZCBtb2R1bGVzIGxldmVsIGJhc2VkIG9uIHBsYXRmb3JtIG9yIHN5cy1t
b2R1bGUgYXR0cmlidXRlcy4KKworKiBleHRlbmQgcHkudGVzdC5tYXJrIGRlY29yYXRvciB0byBh
bGxvdyBmb3IgcG9zaXRpb25hbCBhcmdzCisKKyogaW50cm9kdWNlIGFuZCB0ZXN0ICJweS5jbGVh
bnVwIC1kIiB0byByZW1vdmUgZW1wdHkgZGlyZWN0b3JpZXMKKworKiBmaXggaXNzdWUgIzU5IC0g
cm9idXN0aWZ5IHVuaXR0ZXN0IHRlc3QgY29sbGVjdGlvbgorCisqIG1ha2UgYnB5dGhvbi9oZWxw
IGludGVyYWN0aW9uIHdvcmsgYnkgYWRkaW5nIGFuIF9fYWxsX18gYXR0cmlidXRlCisgIHRvIEFw
aU1vZHVsZSwgY2xlYW51cCBpbml0cGtnCisKKyogdXNlIE1JVCBsaWNlbnNlIGZvciBweWxpYiwg
YWRkIHNvbWUgY29udHJpYnV0b3JzCisKKyogcmVtb3ZlIHB5LmV4ZWNuZXQgY29kZSBhbmQgc3Vi
c3RpdHV0ZSBhbGwgdXNhZ2VzIHdpdGggJ2V4ZWNuZXQnIHByb3BlcgorCisqIGZpeCBpc3N1ZTUw
IC0gY2FjaGVkX3NldHVwIG5vdyBjYWNoZXMgbW9yZSB0byBleHBlY3RhdGlvbnMKKyAgZm9yIHRl
c3QgZnVuY3Rpb25zIHdpdGggbXVsdGlwbGUgYXJndW1lbnRzLgorCisqIG1lcmdlIEphcmtvJ3Mg
Zml4ZXMsIGlzc3VlICM0NSBhbmQgIzQ2CisKKyogYWRkIHRoZSBhYmlsaXR5IHRvIHNwZWNpZnkg
YSBwYXRoIGZvciBweS5sb29rdXAgdG8gc2VhcmNoIGluCisKKyogZml4IGEgZnVuY2FyZyBjYWNo
ZWRfc2V0dXAgYnVnIHByb2JhYmx5IG9ubHkgb2NjdXJpbmcKKyAgaW4gZGlzdHJpYnV0ZWQgdGVz
dGluZyBhbmQgIm1vZHVsZSIgc2NvcGUgd2l0aCB0ZWFyZG93bi4KKworKiBtYW55IGZpeGVzIGFu
ZCBjaGFuZ2VzIGZvciBtYWtpbmcgdGhlIGNvZGUgYmFzZSBweXRob24zIGNvbXBhdGlibGUsCisg
IG1hbnkgdGhhbmtzIHRvIEJlbmphbWluIFBldGVyc29uIGZvciBoZWxwaW5nIHdpdGggdGhpcy4K
KworKiBjb25zb2xpZGF0ZSBidWlsdGlucyBpbXBsZW1lbnRhdGlvbiB0byBiZSBjb21wYXRpYmxl
IHdpdGggPj0yLjMsCisgIGFkZCBoZWxwZXJzIHRvIGVhc2Uga2VlcGluZyAyIGFuZCAzayBjb21w
YXRpYmxlIGNvZGUKKworKiBkZXByZWNhdGUgcHkuY29tcGF0LmRvY3Rlc3R8c3VicHJvY2Vzc3x0
ZXh0d3JhcHxvcHRwYXJzZQorCisqIGRlcHJlY2F0ZSBweS5tYWdpYy5hdXRvcGF0aCwgcmVtb3Zl
IHB5L21hZ2ljIGRpcmVjdG9yeQorCisqIG1vdmUgcHl0ZXN0IGFzc2VydGlvbiBoYW5kbGluZyB0
byBweS9jb2RlIGFuZCBhIHB5dGVzdF9hc3NlcnRpb24KKyAgcGx1Z2luLCBhZGQgIi0tbm8tYXNz
ZXJ0IiBvcHRpb24sIGRlcHJlY2F0ZSBweS5tYWdpYyBuYW1lc3BhY2VzCisgIGluIGZhdm91ciBv
ZiAobGVzcykgcHkuY29kZSBvbmVzLgorCisqIGNvbnNvbGlkYXRlIGFuZCBjbGVhbnVwIHB5L2Nv
ZGUgY2xhc3NlcyBhbmQgZmlsZXMKKworKiBjbGVhbnVwIHB5L21pc2MsIG1vdmUgdGVzdHMgdG8g
YmluLWZvci1kaXN0CisKKyogaW50cm9kdWNlIGRlbGF0dHIvZGVsaXRlbS9kZWxlbnYgbWV0aG9k
cyB0byBweS50ZXN0J3MgbW9ua2V5cGF0Y2ggZnVuY2FyZworCisqIGNvbnNvbGlkYXRlIHB5Lmxv
ZyBpbXBsZW1lbnRhdGlvbiwgcmVtb3ZlIG9sZCBhcHByb2FjaC4KKworKiBpbnRyb2R1Y2UgcHku
aW8uVGV4dElPIGFuZCBweS5pby5CeXRlc0lPIGZvciBkaXN0aW5ndWlzaGluZyBiZXR3ZWVuCisg
IHRleHQvdW5pY29kZSBhbmQgYnl0ZS1zdHJlYW1zICh1c2VzIHVuZGVybHlpbmcgc3RhbmRhcmQg
bGliIGlvLioKKyAgaWYgYXZhaWxhYmxlKQorCisqIG1ha2UgcHkudW5pdHRlc3RfY29udmVydCBo
ZWxwZXIgc2NyaXB0IGF2YWlsYWJsZSB3aGljaCBjb252ZXJ0cyAidW5pdHRlc3QucHkiCisgIHN0
eWxlIGZpbGVzIGludG8gdGhlIHNpbXBsZXIgYXNzZXJ0L2RpcmVjdC10ZXN0LWNsYXNzZXMgcHku
dGVzdC9ub3NldGVzdHMKKyAgc3R5bGUuICBUaGUgc2NyaXB0IHdhcyB3cml0dGVuIGJ5IExhdXJh
IENyZWlnaHRvbi4KKworKiBzaW1wbGlmaWVkIGludGVybmFsIGxvY2FscGF0aCBpbXBsZW1lbnRh
dGlvbgorCisxLjAuMgorPT09PT0KKworKiBmaXhpbmcgcGFja2FnaW5nIGlzc3VlcywgdHJpZ2dl
cmVkIGJ5IGZlZG9yYSByZWRoYXQgcGFja2FnaW5nLAorICBhbHNvIGFkZGVkIGRvYywgZXhhbXBs
ZXMgYW5kIGNvbnRyaWIgZGlycyB0byB0aGUgdGFyYmFsbC4KKworKiBhZGRlZCBhIGRvY3VtZW50
YXRpb24gbGluayB0byB0aGUgbmV3IGRqYW5nbyBwbHVnaW4uCisKKzEuMC4xCis9PT09PQorCisq
IGFkZGVkIGEgJ3B5dGVzdF9ub3NlJyBwbHVnaW4gd2hpY2ggaGFuZGxlcyBub3NlLlNraXBUZXN0
LAorICBub3NlLXN0eWxlIGZ1bmN0aW9uL21ldGhvZC9nZW5lcmF0b3Igc2V0dXAvdGVhcmRvd24g
YW5kCisgIHRyaWVzIHRvIHJlcG9ydCBmdW5jdGlvbnMgY29ycmVjdGx5LgorCisqIGNhcHR1cmlu
ZyBvZiB1bmljb2RlIHdyaXRlcyBvciBlbmNvZGVkIHN0cmluZ3MgdG8gc3lzLnN0ZG91dC9lcnIK
KyAgd29yayBiZXR0ZXIsIGFsc28gdGVybWluYWx3cml0aW5nIHdhcyBhZGFwdGVkIGFuZCBzb21l
d2hhdAorICB1bmlmaWVkIGJldHdlZW4gd2luZG93cyBhbmQgbGludXguCisKKyogaW1wcm92ZWQg
ZG9jdW1lbnRhdGlvbiBsYXlvdXQgYW5kIGNvbnRlbnQgYSBsb3QKKworKiBhZGRlZCBhICItLWhl
bHAtY29uZmlnIiBvcHRpb24gdG8gc2hvdyBjb25mdGVzdC5weSAvIEVOVi12YXIgbmFtZXMgZm9y
CisgIGFsbCBsb25nb3B0IGNtZGxpbmUgb3B0aW9ucywgYW5kIHNvbWUgc3BlY2lhbCBjb25mdGVz
dC5weSB2YXJpYWJsZXMuCisgIHJlbmFtZWQgJ2NvbmZfY2FwdHVyZScgY29uZnRlc3Qgc2V0dGlu
ZyB0byAnb3B0aW9uX2NhcHR1cmUnIGFjY29yZGluZ2x5LgorCisqIGZpeCBpc3N1ZSAjMjc6IGJl
dHRlciByZXBvcnRpbmcgb24gbm9uLWNvbGxlY3RhYmxlIGl0ZW1zIGdpdmVuIG9uIGNvbW1hbmRs
aW5lCisgIChlLmcuIHB5YyBmaWxlcykKKworKiBmaXggaXNzdWUgIzMzOiBhZGRlZCAtLXZlcnNp
b24gZmxhZyAodGhhbmtzIEJlbmphbWluIFBldGVyc29uKQorCisqIGZpeCBpc3N1ZSAjMzI6IGFk
ZGluZyBzdXBwb3J0IGZvciAiaW5jb21wbGV0ZSIgcGF0aHMgdG8gd2NwYXRoLnN0YXR1cygpCisK
KyogIlRlc3QiIHByZWZpeGVkIGNsYXNzZXMgYXJlICpub3QqIGNvbGxlY3RlZCBieSBkZWZhdWx0
IGFueW1vcmUgaWYgdGhleQorICBoYXZlIGFuIF9faW5pdF9fIG1ldGhvZAorCisqIG1vbmtleXBh
dGNoIHNldGVudigpIG5vdyBhY2NlcHRzIGEgInByZXBlbmQiIHBhcmFtZXRlcgorCisqIGltcHJv
dmVkIHJlcG9ydGluZyBvZiBjb2xsZWN0aW9uIGVycm9yIHRyYWNlYmFja3MKKworKiBzaW1wbGlm
aWVkIG11bHRpY2FsbCBtZWNoYW5pc20gYW5kIHBsdWdpbiBhcmNoaXRlY3R1cmUsCisgIHJlbmFt
ZWQgc29tZSBpbnRlcm5hbCBtZXRob2RzIGFuZCBhcmduYW1lcworCisxLjAuMAorPT09PT0KKwor
KiBtb3JlIHRlcnNlIHJlcG9ydGluZyB0cnkgdG8gc2hvdyBmaWxlc3lzdGVtIHBhdGggcmVsYXRp
dmVseSB0byBjdXJyZW50IGRpcgorKiBpbXByb3ZlIHhmYWlsIG91dHB1dCBhIGJpdAorCisxLjAu
MGI5Cis9PT09PT09CisKKyogY2xlYW5seSBoYW5kbGUgYW5kIHJlcG9ydCBmaW5hbCB0ZWFyZG93
biBvZiB0ZXN0IHNldHVwCisKKyogZml4IHN2bi0xLjYgY29tcGF0IGlzc3VlIHdpdGggcHkucGF0
aC5zdm53YygpLnZlcnNpb25lZCgpCisgICh0aGFua3MgV291dGVyIFZhbmRlbiBIb3ZlKQorCisq
IHNldHVwL3RlYXJkb3duIG9yIGNvbGxlY3Rpb24gcHJvYmxlbXMgbm93IHNob3cgYXMgRVJST1Jz
CisgIG9yIHdpdGggYmlnICJFIidzIGluIHRoZSBwcm9ncmVzcyBsaW5lcy4gIHRoZXkgYXJlIHJl
cG9ydGVkCisgIGFuZCBjb3VudGVkIHNlcGFyYXRlbHkuCisKKyogZGlzdC10ZXN0aW5nOiBwcm9w
ZXJseSBoYW5kbGUgdGVzdCBpdGVtcyB0aGF0IGdldCBsb2NhbGx5CisgIGNvbGxlY3RlZCBidXQg
Y2Fubm90IGJlIGNvbGxlY3RlZCBvbiB0aGUgcmVtb3RlIHNpZGUgLSBvZnRlbgorICBkdWUgdG8g
cGxhdGZvcm0vZGVwZW5kZW5jeSByZWFzb25zCisKKyogc2ltcGxpZmllZCBweS50ZXN0Lm1hcmsg
QVBJIC0gc2VlIGtleXdvcmQgcGx1Z2luIGRvY3VtZW50YXRpb24KKworKiBpbnRlZ3JhdGUgYmV0
dGVyIHdpdGggbG9nZ2luZzogY2FwdHVyaW5nIG5vdyBieSBkZWZhdWx0IGNhcHR1cmVzCisgIHRl
c3QgZnVuY3Rpb25zIGFuZCB0aGVpciBpbW1lZGlhdGUgc2V0dXAvdGVhcmRvd24gaW4gYSBzaW5n
bGUgc3RyZWFtCisKKyogY2Fwc3lzIGFuZCBjYXBmZCBmdW5jYXJncyBub3cgaGF2ZSBhIHJlYWRv
dXRlcnIoKSBhbmQgYSBjbG9zZSgpIG1ldGhvZAorICAodW5kZXJseWluZ2x5IHB5LmlvLlN0ZENh
cHR1cmUvRkQgb2JqZWN0cyBhcmUgdXNlZCB3aGljaCBncmV3IGEKKyAgcmVhZG91dGVycigpIG1l
dGhvZCBhcyB3ZWxsIHRvIHJldHVybiBzbmFwc2hvdHMgb2YgY2FwdHVyZWQgb3V0L2VycikKKwor
KiBtYWtlIGFzc2VydC1yZWludGVycHJldGF0aW9uIHdvcmsgYmV0dGVyIHdpdGggY29tcGFyaXNv
bnMgbm90CisgIHJldHVybmluZyBib29scyAocmVwb3J0ZWQgd2l0aCBudW1weSBmcm9tIHRoYW5r
cyBtYWNpZWogZmlqYWxrb3dza2kpCisKKyogcmV3b3JrZWQgcGVyLXRlc3Qgb3V0cHV0IGNhcHR1
cmluZyBpbnRvIHRoZSBweXRlc3RfaW9jYXB0dXJlLnB5IHBsdWdpbgorICBhbmQgdGh1cyByZW1v
dmVkIGNhcHR1cmluZyBjb2RlIGZyb20gY29uZmlnIG9iamVjdAorCisqIGl0ZW0ucmVwcl9mYWls
dXJlKGV4Y2luZm8pIGluc3RlYWQgb2YgaXRlbS5yZXByX2ZhaWx1cmUoZXhjaW5mbywgb3V0ZXJy
KQorCisKKzEuMC4wYjgKKz09PT09PT0KKworKiBweXRlc3RfdW5pdHRlc3QtcGx1Z2luIGlzIG5v
dyBlbmFibGVkIGJ5IGRlZmF1bHQKKworKiBpbnRyb2R1Y2VkIHB5dGVzdF9rZXlib2FyZGludGVy
cnVwdCBob29rIGFuZAorICByZWZpbmVkIHB5dGVzdF9zZXNzaW9uZmluaXNoIGhvb2tlZCwgYWRk
ZWQgdGVzdHMuCisKKyogd29ya2Fyb3VuZCBhIGJ1Z2d5IGxvZ2dpbmcgbW9kdWxlIGludGVyYWN0
aW9uICgiY2xvc2luZyBhbHJlYWR5IGNsb3NlZAorICBmaWxlcyIpLiAgVGhhbmtzIHRvIFNyaWRo
YXIgUmF0bmFrdW1hciBmb3IgdHJpZ2dlcmluZy4KKworKiBpZiBwbHVnaW5zIHVzZSAicHkudGVz
dC5pbXBvcnRvcnNraXAiIGZvciBpbXBvcnRpbmcKKyAgYSBkZXBlbmRlbmN5IG9ubHkgYSB3YXJu
aW5nIHdpbGwgYmUgaXNzdWVkIGluc3RlYWQKKyAgb2YgZXhpdGluZyB0aGUgdGVzdGluZyBwcm9j
ZXNzLgorCisqIG1hbnkgaW1wcm92ZW1lbnRzIHRvIGRvY3M6CisgIC0gcmVmaW5lZCBmdW5jYXJn
cyBkb2MgLCB1c2UgdGhlIHRlcm0gImZhY3RvcnkiIGluc3RlYWQgb2YgInByb3ZpZGVyIgorICAt
IGFkZGVkIGEgbmV3IHRhbGsvdHV0b3JpYWwgZG9jIHBhZ2UKKyAgLSBiZXR0ZXIgZG93bmxvYWQg
cGFnZQorICAtIGJldHRlciBwbHVnaW4gZG9jc3RyaW5ncworICAtIGFkZGVkIG5ldyBwbHVnaW5z
IHBhZ2UgYW5kIGF1dG9tYXRpYyBkb2MgZ2VuZXJhdGlvbiBzY3JpcHQKKworKiBmaXhlZCB0ZWFy
ZG93biBwcm9ibGVtIHJlbGF0ZWQgdG8gcGFydGlhbGx5IGZhaWxpbmcgZnVuY2FyZyBzZXR1cHMK
KyAgKHRoYW5rcyBNclRvcGYgZm9yIHJlcG9ydGluZyksICJweXRlc3RfcnVudGVzdF90ZWFyZG93
biIgaXMgbm93CisgIGFsd2F5cyBpbnZva2VkIGV2ZW4gaWYgdGhlICJweXRlc3RfcnVudGVzdF9z
ZXR1cCIgZmFpbGVkLgorCisqIHR3ZWFrZWQgZG9jdGVzdCBvdXRwdXQgZm9yIGRvY3N0cmluZ3Mg
aW4gcHkgbW9kdWxlcywKKyAgdGhhbmtzIFJhZG9taXIuCisKKzEuMC4wYjcKKz09PT09PT0KKwor
KiByZW5hbWVkIHB5LnRlc3QueGZhaWwgYmFjayB0byBweS50ZXN0Lm1hcmsueGZhaWwgdG8gYXZv
aWQKKyAgdHdvIHdheXMgdG8gZGVjb3JhdGUgZm9yIHhmYWlsCisKKyogcmUtYWRkZWQgcHkudGVz
dC5tYXJrIGRlY29yYXRvciBmb3Igc2V0dGluZyBrZXl3b3JkcyBvbiBmdW5jdGlvbnMKKyAgKGl0
IHdhcyBhY3R1YWxseSBkb2N1bWVudGVkIHNvIHJlbW92aW5nIGl0IHdhcyBub3QgbmljZSkKKwor
KiByZW1vdmUgc2NvcGUtYXJndW1lbnQgZnJvbSByZXF1ZXN0LmFkZGZpbmFsaXplcigpIGJlY2F1
c2UKKyAgcmVxdWVzdC5jYWNoZWRfc2V0dXAgaGFzIHRoZSBzY29wZSBhcmcuIFRPT1dUREkuCisK
KyogcGVyZm9ybSBzZXR1cCBmaW5hbGl6YXRpb24gYmVmb3JlIHJlcG9ydGluZyBmYWlsdXJlcwor
CisqIGFwcGx5IG1vZGlmaWVkIHBhdGNoZXMgZnJvbSBBbmRyZWFzIEtsb2Vja25lciB0byBhbGxv
dworICB0ZXN0IGZ1bmN0aW9ucyB0byBoYXZlIG5vIGZ1bmNfY29kZSAoIzIyKSBhbmQgdG8gbWFr
ZQorICAiLWsiIGFuZCBmdW5jdGlvbiBrZXl3b3JkcyB3b3JrICAoIzIwKQorCisqIGFwcGx5IHBh
dGNoIGZyb20gRGFuaWVsIFBlb2x6bGVpdGhuZXIgKGlzc3VlICMyMykKKworKiByZXNvbHZlIGlz
c3VlICMxOCwgbXVsdGlwcm9jZXNzaW5nLk1hbmFnZXIoKSBhbmQKKyAgcmVkaXJlY3Rpb24gY2xh
c2gKKworKiBtYWtlIF9fbmFtZV9fID09ICJfX2NoYW5uZWxleGVjX18iIGZvciByZW1vdGVfZXhl
YyBjb2RlCisKKzEuMC4wYjMKKz09PT09PT0KKworKiBwbHVnaW4gY2xhc3NlcyBhcmUgcmVtb3Zl
ZDogb25lIG5vdyBkZWZpbmVzCisgIGhvb2tzIGRpcmVjdGx5IGluIGNvbmZ0ZXN0LnB5IG9yIGds
b2JhbCBweXRlc3RfKi5weQorICBmaWxlcy4KKworKiBhZGRlZCBuZXcgcHl0ZXN0X25hbWVzcGFj
ZShjb25maWcpIGhvb2sgdGhhdCBhbGxvd3MKKyAgdG8gaW5qZWN0IGhlbHBlcnMgZGlyZWN0bHkg
dG8gdGhlIHB5LnRlc3QuKiBuYW1lc3BhY2UuCisKKyogZG9jdW1lbnRlZCBhbmQgcmVmaW5lZCBt
YW55IGhvb2tzCisKKyogYWRkZWQgbmV3IHN0eWxlIG9mIGdlbmVyYXRpdmUgdGVzdHMgdmlhCisg
IHB5dGVzdF9nZW5lcmF0ZV90ZXN0cyBob29rIHRoYXQgaW50ZWdyYXRlcworICB3ZWxsIHdpdGgg
ZnVuY3Rpb24gYXJndW1lbnRzLgorCisKKzEuMC4wYjEKKz09PT09PT0KKworKiBpbnRyb2R1Y2Vk
IG5ldyAiZnVuY2FyZyIgc2V0dXAgbWV0aG9kLAorICBzZWUgZG9jL3Rlc3QvZnVuY2FyZy50eHQK
KworKiBpbnRyb2R1Y2VkIHBsdWdpbiBhcmNoaXRlY3R1cmUgYW5kIG1hbnkKKyAgbmV3IHB5LnRl
c3QgcGx1Z2lucywgc2VlCisgIGRvYy90ZXN0L3BsdWdpbnMudHh0CisKKyogdGVhcmRvd25fbWV0
aG9kIGlzIG5vdyBndWFyYW50ZWVkIHRvIGdldAorICBjYWxsZWQgYWZ0ZXIgYSB0ZXN0IG1ldGhv
ZCBoYXMgcnVuLgorCisqIG5ldyBtZXRob2Q6IHB5LnRlc3QuaW1wb3J0b3Jza2lwKG1vZCxtaW52
ZXJzaW9uKQorICB3aWxsIGVpdGhlciBpbXBvcnQgb3IgY2FsbCBweS50ZXN0LnNraXAoKQorCisq
IGNvbXBsZXRlbHkgcmV2aXNlZCBpbnRlcm5hbCBweS50ZXN0IGFyY2hpdGVjdHVyZQorCisqIG5l
dyBweS5wcm9jZXNzLkZvcmtlZEZ1bmMgb2JqZWN0IGFsbG93aW5nIHRvCisgIGZvcmsgZXhlY3V0
aW9uIG9mIGEgZnVuY3Rpb24gdG8gYSBzdWIgcHJvY2VzcworICBhbmQgZ2V0dGluZyBhIHJlc3Vs
dCBiYWNrLgorCitYWFggbG90cyBvZiB0aGluZ3MgbWlzc2luZyBoZXJlIFhYWAorCiswLjkuMgor
PT09PT0KKworKiByZWZpbmVkIGluc3RhbGxhdGlvbiBhbmQgbWV0YWRhdGEsIGNyZWF0ZWQgbmV3
IHNldHVwLnB5LAorICBub3cgYmFzZWQgb24gc2V0dXB0b29scy9lel9zZXR1cCAodGhhbmtzIHRv
IFJhbGYgU2NobWl0dAorICBmb3IgaGlzIHN1cHBvcnQpLgorCisqIGltcHJvdmVkIHRoZSB3YXkg
b2YgbWFraW5nIHB5Liogc2NyaXB0cyBhdmFpbGFibGUgaW4KKyAgd2luZG93cyBlbnZpcm9ubWVu
dHMsIHRoZXkgYXJlIG5vdyBhZGRlZCB0byB0aGUKKyAgU2NyaXB0cyBkaXJlY3RvcnkgYXMgIi5j
bWQiIGZpbGVzLgorCisqIHB5LnBhdGguc3Zud2Muc3RhdHVzKCkgbm93IGlzIG1vcmUgY29tcGxl
dGUgYW5kCisgIHVzZXMgeG1sIG91dHB1dCBmcm9tIHRoZSAnc3ZuJyBjb21tYW5kIGlmIGF2YWls
YWJsZQorICAoR3VpZG8gV2VzZG9ycCkKKworKiBmaXggZm9yIHB5LnBhdGguc3ZuKiB0byB3b3Jr
IHdpdGggc3ZuIDEuNQorICAoQ2hyaXMgTGFtYikKKworKiBmaXggcGF0aC5yZWx0byhvdGhlcnBh
dGgpIG1ldGhvZCBvbiB3aW5kb3dzIHRvCisgIHVzZSBub3JtY2FzZSBmb3IgY2hlY2tpbmcgaWYg
YSBwYXRoIGlzIHJlbGF0aXZlLgorCisqIHB5LnRlc3QncyB0cmFjZWJhY2sgaXMgYmV0dGVyIHBh
cnNlYWJsZSBmcm9tIGVkaXRvcnMKKyAgKGZvbGxvd3MgdGhlIGZpbGVuYW1lczpMSU5FTk86IE1T
RyBjb252ZW50aW9uKQorICAodGhhbmtzIHRvIE9zbW8gU2Fsb21hYSkKKworKiBmaXggdG8gamF2
YXNjcmlwdC1nZW5lcmF0aW9uLCAicHkudGVzdCAtLXJ1bmJyb3dzZXIiCisgIHNob3VsZCB3b3Jr
IG1vcmUgcmVsaWFibHkgbm93CisKKyogcmVtb3ZlZCBwcmV2aW91c2x5IGFjY2lkZW50YWxseSBh
ZGRlZAorICBweS50ZXN0LmJyb2tlbiBhbmQgcHkudGVzdC5ub3RpbXBsZW1lbnRlZCBoZWxwZXJz
LgorCisqIHRoZXJlIG5vdyBpcyBhIHB5Ll9fdmVyc2lvbl9fIGF0dHJpYnV0ZQorCiswLjkuMQor
PT09PT0KKworVGhpcyBpcyBhIGZhaXJseSBjb21wbGV0ZSBsaXN0IG9mIHYwLjkuMSwgd2hpY2gg
Y2FuCitzZXJ2ZSBhcyBhIHJlZmVyZW5jZSBmb3IgZGV2ZWxvcGVycy4KKworKiBhbGxvd2luZyAr
IHNpZ25zIGluIHB5LnBhdGguc3ZuIHVybHMgWzM5MTA2XQorKiBmaXhlZCBzdXBwb3J0IGZvciBG
YWlsZWQgZXhjZXB0aW9ucyB3aXRob3V0IGV4Y2luZm8gaW4gcHkudGVzdCBbMzkzNDBdCisqIGFk
ZGVkIHN1cHBvcnQgZm9yIGtpbGxpbmcgcHJvY2Vzc2VzIGZvciBXaW5kb3dzIChhcyB3ZWxsIGFz
IHBsYXRmb3JtcyB0aGF0CisgIHN1cHBvcnQgb3Mua2lsbCkgaW4gcHkubWlzYy5raWxscHJvYyBb
Mzk2NTVdCisqIGFkZGVkIHNldHVwL3RlYXJkb3duIGZvciBnZW5lcmF0aXZlIHRlc3RzIHRvIHB5
LnRlc3QgWzQwNzAyXQorKiBhZGRlZCBkZXRlY3Rpb24gb2YgRkFJTEVEIFRPIExPQUQgTU9EVUxF
IHRvIHB5LnRlc3QgWzQwNzAzLCA0MDczOCwgNDA3MzldCisqIGZpeGVkIHByb2JsZW0gd2l0aCBj
YWxsaW5nIC5yZW1vdmUoKSBvbiB3Y3BhdGhzIG9mIG5vbi12ZXJzaW9uZWQgZmlsZXMgaW4KKyAg
cHkucGF0aCBbNDQyNDhdCisqIGZpeGVkIHNvbWUgaW1wb3J0IGFuZCBpbmhlcml0YW5jZSBpc3N1
ZXMgaW4gcHkudGVzdCBbNDE0ODAsIDQ0NjQ4LCA0NDY1NV0KKyogZmFpbCB0byBydW4gZ3JlZW5s
ZXQgdGVzdHMgd2hlbiBweXB5IGlzIGF2YWlsYWJsZSwgYnV0IHdpdGhvdXQgc3RhY2tsZXNzCisg
IFs0NTI5NF0KKyogc21hbGwgZml4ZXMgaW4gcnNlc3Npb24gdGVzdHMgWzQ1Mjk1XQorKiBmaXhl
ZCBpc3N1ZSB3aXRoIDIuNSB0eXBlIHJlcHJlc2VudGF0aW9ucyBpbiBweS50ZXN0IFs0NTQ4Mywg
NDU0ODRdCisqIG1hZGUgdGhhdCBpbnRlcm5hbCByZXBvcnRpbmcgaXNzdWVzIGRpc3BsYXlpbmcg
aXMgZG9uZSBhdG9taWNhbGx5IGluIHB5LnRlc3QKKyAgWzQ1NTE4XQorKiBtYWRlIHRoYXQgbm9u
LWV4aXN0aW5nIGZpbGVzIGFyZSBpZ29yZWQgYnkgdGhlIHB5Lmxvb2t1cCBzY3JpcHQgWzQ1NTE5
XQorKiBpbXByb3ZlZCBleGNlcHRpb24gbmFtZSBjcmVhdGlvbiBpbiBweS50ZXN0IFs0NTUzNV0K
KyogbWFkZSB0aGF0IGxlc3MgdGhyZWFkcyBhcmUgdXNlZCBpbiBleGVjbmV0IFttZXJnZSBpbiA0
NTUzOV0KKyogcmVtb3ZlZCBsb2NrIHJlcXVpcmVkIGZvciBhdG9taWNhbCByZXBvcnRpbmcgaXNz
dWUgZGlzcGxheWluZyBpbiBweS50ZXN0CisgIFs0NTU0NV0KKyogcmVtb3ZlZCBnbG9iYWxzIGZy
b20gZXhlY25ldCBbNDU1NDEsIDQ1NTQ3XQorKiByZWZhY3RvcmVkIGNsZWFudXAgbWVjaGFuaWNz
LCBtYWRlIHRoYXQgc2V0RGFlbW9uIGlzIHNldCB0byAxIHRvIG1ha2UgYXRleGl0CisgIGdldCBj
YWxsZWQgaW4gMi41IChweS5leGVjbmV0KSBbNDU1NDhdCisqIGZpeGVkIGJ1ZyBpbiBqb2luaW5n
IHRocmVhZHMgaW4gcHkuZXhlY25ldCdzIHNlcnZlbWFpbiBbNDU1NDldCisqIHJlZmFjdG9yZWQg
cHkudGVzdC5yc2Vzc2lvbiB0ZXN0cyB0byBub3QgcmVseSBvbiBleGFjdCBvdXRwdXQgZm9ybWF0
IGFueW1vcmUKKyAgWzQ1NjQ2XQorKiB1c2luZyByZXByKCkgb24gdGVzdCBvdXRjb21lIFs0NTY0
N10KKyogYWRkZWQgJ1JlYXNvbicgY2xhc3NlcyBmb3IgcHkudGVzdC5za2lwKCkgWzQ1NjQ4LCA0
NTY0OV0KKyoga2lsbGVkIHNvbWUgdW5uZWNlc3Nhcnkgc2FuaXR5IGNoZWNrIGluIHB5LnRlc3Qu
Y29sbGVjdCBbNDU2NTVdCisqIGF2b2lkIHVzaW5nIG9zLnRtcGZpbGUoKSBpbiBweS5pby5mZGNh
cHR1cmUgYmVjYXVzZSBvbiBXaW5kb3dzIGl0J3Mgb25seQorICB1c2FibGUgYnkgQWRtaW5pc3Ry
YXRvcnMgWzQ1OTAxXQorKiBhZGRlZCBzdXBwb3J0IGZvciBsb2NraW5nIGFuZCBub24tcmVjdXJz
aXZlIGNvbW1pdHMgdG8gcHkucGF0aC5zdm53YyBbNDU5OTRdCisqIGxvY2tpbmcgZmlsZXMgaW4g
cHkuZXhlY25ldCB0byBwcmV2ZW50IENQeXRob24gZnJvbSBzZWdmYXVsdGluZyBbNDYwMTBdCisq
IGFkZGVkIGV4cG9ydCgpIG1ldGhvZCB0byBweS5wYXRoLnN2bnVybAorKiBmaXhlZCAtZCAteCBp
biBweS50ZXN0IFs0NzI3N10KKyogZml4ZWQgYXJndW1lbnQgY29uY2F0ZW5hdGlvbiBwcm9ibGVt
IGluIHB5LnBhdGguc3Zud2MgWzQ5NDIzXQorKiByZXN0b3JlIHB5LnRlc3QgYmVoYXZpb3VyIHRo
YXQgaXQgZXhpdHMgd2l0aCBjb2RlIDEgd2hlbiB0aGVyZSBhcmUgZmFpbHVyZXMKKyAgWzQ5OTc0
XQorKiBkb24ndCBmYWlsIG9uIGh0bWwgZmlsZXMgdGhhdCBkb24ndCBoYXZlIGFuIGFjY29tcGFu
eWluZyAudHh0IGZpbGUgWzUwNjA2XQorKiBmaXhlZCAndXRlc3Rjb252ZXJ0LnB5IDwgaW5wdXQn
IFs1MDY0NV0KKyogc21hbGwgZml4IGZvciBjb2RlIGluZGVudGF0aW9uIGluIHB5LmNvZGUuc291
cmNlIFs1MDc1NV0KKyogZml4IF9kb2NnZW4ucHkgZG9jdW1lbnRhdGlvbiBidWlsZGluZyBbNTEy
ODVdCisqIGltcHJvdmVkIGNoZWNrcyBmb3Igc291cmNlIHJlcHJlc2VudGF0aW9uIG9mIGNvZGUg
YmxvY2tzIGluIHB5LnRlc3QgWzUxMjkyXQorKiBhZGRlZCBzdXBwb3J0IGZvciBwYXNzaW5nIGF1
dGhlbnRpY2F0aW9uIHRvIHB5LnBhdGguc3ZuKiBvYmplY3RzIFs1MjAwMCwKKyAgNTIwMDFdCisq
IHJlbW92ZWQgc29ydGVkKCkgY2FsbCBmb3IgcHkuYXBpZ2VuIHRlc3RzIGluIGZhdm91ciBvZiBb
XS5zb3J0KCkgdG8gc3VwcG9ydAorICBQeXRob24gMi4zIFs1MjQ4MV0KZGlmZiAtLWdpdCBhL1dl
YkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvQ09OVFJJQlVUSU5HLnJzdCBi
L1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvQ09OVFJJQlVUSU5HLnJz
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNzVlZTNlYzMyZDMKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0
L0NPTlRSSUJVVElORy5yc3QKQEAgLTAsMCArMSwyNTMgQEAKKz09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KK0NvbnRyaWJ1dGlvbiBnZXR0aW5nIHN0YXJ0ZWQKKz09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KKworQ29udHJpYnV0aW9ucyBhcmUgaGlnaGx5IHdlbGNvbWVkIGFuZCBhcHBy
ZWNpYXRlZC4gIEV2ZXJ5IGxpdHRsZSBoZWxwIGNvdW50cywKK3NvIGRvIG5vdCBoZXNpdGF0ZSEK
KworLi4gY29udGVudHM6OiBDb250cmlidXRpb24gbGlua3MKKyAgIDpkZXB0aDogMgorCisKKy4u
IF9zdWJtaXRmZWVkYmFjazoKKworRmVhdHVyZSByZXF1ZXN0cyBhbmQgZmVlZGJhY2sKKy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RvIHlvdSBsaWtlIHB5dGVzdD8gIFNoYXJlIHNv
bWUgbG92ZSBvbiBUd2l0dGVyIG9yIGluIHlvdXIgYmxvZyBwb3N0cyEKKworV2UnZCBhbHNvIGxp
a2UgdG8gaGVhciBhYm91dCB5b3VyIHByb3Bvc2l0aW9ucyBhbmQgc3VnZ2VzdGlvbnMuICBGZWVs
IGZyZWUgdG8KK2BzdWJtaXQgdGhlbSBhcyBpc3N1ZXMgPGh0dHBzOi8vZ2l0aHViLmNvbS9weXRl
c3QtZGV2L3B5dGVzdC9pc3N1ZXM+YF8gYW5kOgorCisqIEV4cGxhaW4gaW4gZGV0YWlsIGhvdyB0
aGV5IHNob3VsZCB3b3JrLgorKiBLZWVwIHRoZSBzY29wZSBhcyBuYXJyb3cgYXMgcG9zc2libGUu
ICBUaGlzIHdpbGwgbWFrZSBpdCBlYXNpZXIgdG8gaW1wbGVtZW50LgorCisKKy4uIF9yZXBvcnRi
dWdzOgorCitSZXBvcnQgYnVncworLS0tLS0tLS0tLS0KKworUmVwb3J0IGJ1Z3MgZm9yIHB5dGVz
dCBpbiB0aGUgYGlzc3VlIHRyYWNrZXIgPGh0dHBzOi8vZ2l0aHViLmNvbS9weXRlc3QtZGV2L3B5
dGVzdC9pc3N1ZXM+YF8uCisKK0lmIHlvdSBhcmUgcmVwb3J0aW5nIGEgYnVnLCBwbGVhc2UgaW5j
bHVkZToKKworKiBZb3VyIG9wZXJhdGluZyBzeXN0ZW0gbmFtZSBhbmQgdmVyc2lvbi4KKyogQW55
IGRldGFpbHMgYWJvdXQgeW91ciBsb2NhbCBzZXR1cCB0aGF0IG1pZ2h0IGJlIGhlbHBmdWwgaW4g
dHJvdWJsZXNob290aW5nLAorICBzcGVjaWZpY2FsbHkgUHl0aG9uIGludGVycHJldGVyIHZlcnNp
b24sCisgIGluc3RhbGxlZCBsaWJyYXJpZXMgYW5kIHB5dGVzdCB2ZXJzaW9uLgorKiBEZXRhaWxl
ZCBzdGVwcyB0byByZXByb2R1Y2UgdGhlIGJ1Zy4KKworSWYgeW91IGNhbiB3cml0ZSBhIGRlbW9u
c3RyYXRpb24gdGVzdCB0aGF0IGN1cnJlbnRseSBmYWlscyBidXQgc2hvdWxkIHBhc3MgKHhmYWls
KSwKK3RoYXQgaXMgYSB2ZXJ5IHVzZWZ1bCBjb21taXQgdG8gbWFrZSBhcyB3ZWxsLCBldmVuIGlm
IHlvdSBjYW4ndCBmaW5kIGhvdwordG8gZml4IHRoZSBidWcgeWV0LgorCisKKy4uIF9maXhidWdz
OgorCitGaXggYnVncworLS0tLS0tLS0KKworTG9vayB0aHJvdWdoIHRoZSBHaXRIdWIgaXNzdWVz
IGZvciBidWdzLiAgSGVyZSBpcyBzYW1wbGUgZmlsdGVyIHlvdSBjYW4gdXNlOgoraHR0cHM6Ly9n
aXRodWIuY29tL3B5dGVzdC1kZXYvcHl0ZXN0L2xhYmVscy9idWcKKworOnJlZjpgVGFsayA8Y29u
dGFjdD5gIHRvIGRldmVsb3BlcnMgdG8gZmluZCBvdXQgaG93IHlvdSBjYW4gZml4IHNwZWNpZmlj
IGJ1Z3MuCisKK0Rvbid0IGZvcmdldCB0byBjaGVjayB0aGUgaXNzdWUgdHJhY2tlcnMgb2YgeW91
ciBmYXZvdXJpdGUgcGx1Z2lucywgdG9vIQorCisuLiBfd3JpdGVwbHVnaW5zOgorCitJbXBsZW1l
bnQgZmVhdHVyZXMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitMb29rIHRocm91Z2ggdGhlIEdpdEh1
YiBpc3N1ZXMgZm9yIGVuaGFuY2VtZW50cy4gIEhlcmUgaXMgc2FtcGxlIGZpbHRlciB5b3UKK2Nh
biB1c2U6CitodHRwczovL2dpdGh1Yi5jb20vcHl0ZXN0LWRldi9weXRlc3QvbGFiZWxzL2VuaGFu
Y2VtZW50CisKKzpyZWY6YFRhbGsgPGNvbnRhY3Q+YCB0byBkZXZlbG9wZXJzIHRvIGZpbmQgb3V0
IGhvdyB5b3UgY2FuIGltcGxlbWVudCBzcGVjaWZpYworZmVhdHVyZXMuCisKK1dyaXRlIGRvY3Vt
ZW50YXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworcHl0ZXN0IGNvdWxkIGFsd2F5cyB1c2Ug
bW9yZSBkb2N1bWVudGF0aW9uLiAgV2hhdCBleGFjdGx5IGlzIG5lZWRlZD8KKworKiBNb3JlIGNv
bXBsZW1lbnRhcnkgZG9jdW1lbnRhdGlvbi4gIEhhdmUgeW91IHBlcmhhcHMgZm91bmQgc29tZXRo
aW5nIHVuY2xlYXI/CisqIERvY3VtZW50YXRpb24gdHJhbnNsYXRpb25zLiAgV2UgY3VycmVudGx5
IGhhdmUgb25seSBFbmdsaXNoLgorKiBEb2NzdHJpbmdzLiAgVGhlcmUgY2FuIG5ldmVyIGJlIHRv
byBtYW55IG9mIHRoZW0uCisqIEJsb2cgcG9zdHMsIGFydGljbGVzIGFuZCBzdWNoIC0tIHRoZXkn
cmUgYWxsIHZlcnkgYXBwcmVjaWF0ZWQuCisKK1lvdSBjYW4gYWxzbyBlZGl0IGRvY3VtZW50YXRp
b24gZmlsZXMgZGlyZWN0bHkgaW4gdGhlIEdpdGh1YiB3ZWIgaW50ZXJmYWNlCit3aXRob3V0IG5l
ZWRpbmcgdG8gbWFrZSBhIGZvcmsgYW5kIGxvY2FsIGNvcHkuIFRoaXMgY2FuIGJlIGNvbnZlbmll
bnQgZm9yCitzbWFsbCBmaXhlcy4KKworCisuLiBfc3VibWl0cGx1Z2luOgorCitTdWJtaXR0aW5n
IFBsdWdpbnMgdG8gcHl0ZXN0LWRldgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KworUHl0ZXN0IGRldmVsb3BtZW50IG9mIHRoZSBjb3JlLCBzb21lIHBsdWdpbnMgYW5kIHN1cHBv
cnQgY29kZSBoYXBwZW5zCitpbiByZXBvc2l0b3JpZXMgbGl2aW5nIHVuZGVyIHRoZSBgYHB5dGVz
dC1kZXZgYCBvcmdhbmlzYXRpb25zOgorCistIGBweXRlc3QtZGV2IG9uIEdpdEh1YiA8aHR0cHM6
Ly9naXRodWIuY29tL3B5dGVzdC1kZXY+YF8KKworLSBgcHl0ZXN0LWRldiBvbiBCaXRidWNrZXQg
PGh0dHBzOi8vYml0YnVja2V0Lm9yZy9weXRlc3QtZGV2PmBfCisKK0FsbCBweXRlc3QtZGV2IENv
bnRyaWJ1dG9ycyB0ZWFtIG1lbWJlcnMgaGF2ZSB3cml0ZSBhY2Nlc3MgdG8gYWxsIGNvbnRhaW5l
ZAorcmVwb3NpdG9yaWVzLiAgcHl0ZXN0IGNvcmUgYW5kIHBsdWdpbnMgYXJlIGdlbmVyYWxseSBk
ZXZlbG9wZWQKK3VzaW5nIGBwdWxsIHJlcXVlc3RzYF8gdG8gcmVzcGVjdGl2ZSByZXBvc2l0b3Jp
ZXMuCisKK1RoZSBvYmplY3RpdmVzIG9mIHRoZSBgYHB5dGVzdC1kZXZgYCBvcmdhbmlzYXRpb24g
YXJlOgorCisqIEhhdmluZyBhIGNlbnRyYWwgbG9jYXRpb24gZm9yIHBvcHVsYXIgcHl0ZXN0IHBs
dWdpbnMKKyogU2hhcmluZyBzb21lIG9mIHRoZSBtYWludGVuYW5jZSByZXNwb25zaWJpbGl0eSAo
aW4gY2FzZSBhIG1haW50YWluZXIgbm8gbG9uZ2VyIHdoaXNoZXMgdG8gbWFpbnRhaW4gYSBwbHVn
aW4pCisKK1lvdSBjYW4gc3VibWl0IHlvdXIgcGx1Z2luIGJ5IHN1YnNjcmliaW5nIHRvIHRoZSBg
cHl0ZXN0LWRldiBtYWlsIGxpc3QKKzxodHRwczovL21haWwucHl0aG9uLm9yZy9tYWlsbWFuL2xp
c3RpbmZvL3B5dGVzdC1kZXY+YF8gYW5kIHdyaXRpbmcgYQorbWFpbCBwb2ludGluZyB0byB5b3Vy
IGV4aXN0aW5nIHB5dGVzdCBwbHVnaW4gcmVwb3NpdG9yeSB3aGljaCBtdXN0IGhhdmUKK3RoZSBm
b2xsb3dpbmc6CisKKy0gUHlQSSBwcmVzZW5jZSB3aXRoIGEgYGBzZXR1cC5weWBgIHRoYXQgY29u
dGFpbnMgYSBsaWNlbnNlLCBgYHB5dGVzdC1gYAorICBwcmVmaXhlZCBuYW1lLCB2ZXJzaW9uIG51
bWJlciwgYXV0aG9ycywgc2hvcnQgYW5kIGxvbmcgZGVzY3JpcHRpb24uCisKKy0gYSBgYHRveC5p
bmlgYCBmb3IgcnVubmluZyB0ZXN0cyB1c2luZyBgdG94IDxodHRwOi8vdG94LnRlc3RydW4ub3Jn
PmBfLgorCistIGEgYGBSRUFETUUudHh0YGAgZGVzY3JpYmluZyBob3cgdG8gdXNlIHRoZSBwbHVn
aW4gYW5kIG9uIHdoaWNoCisgIHBsYXRmb3JtcyBpdCBydW5zLgorCistIGEgYGBMSUNFTlNFLnR4
dGBgIGZpbGUgb3IgZXF1aXZhbGVudCBjb250YWluaW5nIHRoZSBsaWNlbnNpbmcKKyAgaW5mb3Jt
YXRpb24sIHdpdGggbWF0Y2hpbmcgaW5mbyBpbiBgYHNldHVwLnB5YGAuCisKKy0gYW4gaXNzdWUg
dHJhY2tlciBmb3IgYnVnIHJlcG9ydHMgYW5kIGVuaGFuY2VtZW50IHJlcXVlc3RzLgorCitJZiBu
byBjb250cmlidXRvciBzdHJvbmdseSBvYmplY3RzIGFuZCB0d28gYWdyZWUsIHRoZSByZXBvc2l0
b3J5IGNhbiB0aGVuIGJlCit0cmFuc2ZlcnJlZCB0byB0aGUgYGBweXRlc3QtZGV2YGAgb3JnYW5p
c2F0aW9uLgorCitIZXJlJ3MgYSBydW5kb3duIG9mIGhvdyBhIHJlcG9zaXRvcnkgdHJhbnNmZXIg
dXN1YWxseSBwcm9jZWVkcworKHVzaW5nIGEgcmVwb3NpdG9yeSBuYW1lZCBgYGpvZWRvZS9weXRl
c3QteHl6YGAgYXMgZXhhbXBsZSk6CisKKyogT25lIG9mIHRoZSBgYHB5dGVzdC1kZXZgYCBhZG1p
bmlzdHJhdG9ycyBjcmVhdGVzOgorCisgIC0gYGBweXRlc3QteHl6LWFkbWluYGAgdGVhbSwgd2l0
aCBmdWxsIGFkbWluaXN0cmF0aW9uIHJpZ2h0cyB0bworICAgIGBgcHl0ZXN0LWRldi9weXRlc3Qt
eHl6YGAuCisgIC0gYGBweXRlc3QteHl6LWRldmVsb3BlcnNgYCB0ZWFtLCB3aXRoIHdyaXRlIGFj
Y2VzcyB0bworICAgIGBgcHl0ZXN0LWRldi9weXRlc3QteHl6YGAuCisKKyogYGBqb2Vkb2VgYCBp
cyBpbnZpdGVkIHRvIHRoZSBgYHB5dGVzdC14eXotYWRtaW5gYCB0ZWFtOworCisqIEFmdGVyIGFj
Y2VwdGluZyB0aGUgaW52aXRhdGlvbiwgYGBqb2Vkb2VgYCB0cmFuc2ZlcnMgdGhlIHJlcG9zaXRv
cnkgZnJvbSBpdHMKKyAgb3JpZ2luYWwgbG9jYXRpb24gdG8gYGBweXRlc3QtZGV2L3B5dGVzdC14
eXpgYCAoQSBuaWNlIGZlYXR1cmUgaXMgdGhhdCBHaXRIdWIgaGFuZGxlcyBVUkwgcmVkaXJlY3Rp
b24gZnJvbQorICB0aGUgb2xkIHRvIHRoZSBuZXcgbG9jYXRpb24gYXV0b21hdGljYWxseSkuCisK
KyogYGBqb2Vkb2VgYCBpcyBmcmVlIHRvIGFkZCBhbnkgb3RoZXIgY29sbGFib3JhdG9ycyB0byB0
aGUKKyAgYGBweXRlc3QteHl6LWFkbWluYGAgb3IgYGBweXRlc3QteHl6LWRldmVsb3BlcnNgYCB0
ZWFtIGFzIGRlc2lyZWQuCisKK1RoZSBgYHB5dGVzdC1kZXYvQ29udHJpYnV0b3JzYGAgdGVhbSBo
YXMgd3JpdGUgYWNjZXNzIHRvIGFsbCBwcm9qZWN0cywgYW5kCitldmVyeSBwcm9qZWN0IGFkbWlu
aXN0cmF0b3IgaXMgaW4gaXQuIFdlIHJlY29tbWVuZCB0aGF0IGVhY2ggcGx1Z2luIGhhcyBhdCBs
ZWFzdCB0aHJlZQorcGVvcGxlIHdobyBoYXZlIHRoZSByaWdodCB0byByZWxlYXNlIHRvIFB5UEku
CisKK1JlcG9zaXRvcnkgb3duZXJzIGNhbiBiZSBhc3N1cmVkIHRoYXQgbm8gYGBweXRlc3QtZGV2
YGAgYWRtaW5pc3RyYXRvciB3aWxsIGV2ZXIgbWFrZQorcmVsZWFzZXMgb2YgeW91ciByZXBvc2l0
b3J5IG9yIHRha2Ugb3duZXJzaGlwIGluIGFueSB3YXksIGV4Y2VwdCBpbiByYXJlIGNhc2VzCit3
aGVyZSBzb21lb25lIGJlY29tZXMgdW5yZXNwb25zaXZlIGFmdGVyIG1vbnRocyBvZiBjb250YWN0
IGF0dGVtcHRzLgorQXMgc3RhdGVkLCB0aGUgb2JqZWN0aXZlIGlzIHRvIHNoYXJlIG1haW50ZW5h
bmNlIGFuZCBhdm9pZCAicGx1Z2luLWFiYW5kb24iLgorCisKKy4uIF9gcHVsbCByZXF1ZXN0c2A6
CisuLiBfcHVsbC1yZXF1ZXN0czoKKworUHJlcGFyaW5nIFB1bGwgUmVxdWVzdHMgb24gR2l0SHVi
CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlcmUncyBhbiBleGNlbGxl
bnQgdHV0b3JpYWwgb24gaG93IFB1bGwgUmVxdWVzdHMgd29yayBpbiB0aGUKK2BHaXRIdWIgSGVs
cCBDZW50ZXIgPGh0dHBzOi8vaGVscC5naXRodWIuY29tL2FydGljbGVzL3VzaW5nLXB1bGwtcmVx
dWVzdHMvPmBfCisKKworLi4gbm90ZTo6CisgIFdoYXQgaXMgYSAicHVsbCByZXF1ZXN0Ij8gIEl0
IGluZm9ybXMgcHJvamVjdCdzIGNvcmUgZGV2ZWxvcGVycyBhYm91dCB0aGUKKyAgY2hhbmdlcyB5
b3Ugd2FudCB0byByZXZpZXcgYW5kIG1lcmdlLiAgUHVsbCByZXF1ZXN0cyBhcmUgc3RvcmVkIG9u
CisgIGBHaXRIdWIgc2VydmVycyA8aHR0cHM6Ly9naXRodWIuY29tL3B5dGVzdC1kZXYvcHl0ZXN0
L3B1bGxzPmBfLgorICBPbmNlIHlvdSBzZW5kIHB1bGwgcmVxdWVzdCwgd2UgY2FuIGRpc2N1c3Mg
aXQncyBwb3RlbnRpYWwgbW9kaWZpY2F0aW9ucyBhbmQKKyAgZXZlbiBhZGQgbW9yZSBjb21taXRz
IHRvIGl0IGxhdGVyIG9uLgorCitUaGVyZSdzIGFuIGV4Y2VsbGVudCB0dXRvcmlhbCBvbiBob3cg
UHVsbCBSZXF1ZXN0cyB3b3JrIGluIHRoZQorYEdpdEh1YiBIZWxwIENlbnRlciA8aHR0cHM6Ly9o
ZWxwLmdpdGh1Yi5jb20vYXJ0aWNsZXMvdXNpbmctcHVsbC1yZXF1ZXN0cy8+YF8sCitidXQgaGVy
ZSBpcyBhIHNpbXBsZSBvdmVydmlldzoKKworIy4gRm9yayB0aGUKKyAgIGBweXRlc3QgR2l0SHVi
IHJlcG9zaXRvcnkgPGh0dHBzOi8vZ2l0aHViLmNvbS9weXRlc3QtZGV2L3B5dGVzdD5gX18uICBJ
dCdzCisgICBmaW5lIHRvIHVzZSBgYHB5dGVzdGBgIGFzIHlvdXIgZm9yayByZXBvc2l0b3J5IG5h
bWUgYmVjYXVzZSBpdCB3aWxsIGxpdmUKKyAgIHVuZGVyIHlvdXIgdXNlci4KKworIy4gQ2xvbmUg
eW91ciBmb3JrIGxvY2FsbHkgdXNpbmcgYGdpdCA8aHR0cHM6Ly9naXQtc2NtLmNvbS8+YF8gYW5k
IGNyZWF0ZSBhIGJyYW5jaDo6CisKKyAgICAkIGdpdCBjbG9uZSBnaXRAZ2l0aHViLmNvbTpZT1VS
X0dJVEhVQl9VU0VSTkFNRS9weXRlc3QuZ2l0CisgICAgJCBjZCBweXRlc3QKKyAgICAjIG5vdywg
dG8gZml4IGEgYnVnIGNyZWF0ZSB5b3VyIG93biBicmFuY2ggb2ZmICJtYXN0ZXIiOgorICAgIAor
ICAgICAgICAkIGdpdCBjaGVja291dCAtYiB5b3VyLWJ1Z2ZpeC1icmFuY2gtbmFtZSBtYXN0ZXIK
KworICAgICMgb3IgdG8gaW5zdGVhZCBhZGQgYSBmZWF0dXJlIGNyZWF0ZSB5b3VyIG93biBicmFu
Y2ggb2ZmICJmZWF0dXJlcyI6CisgICAgCisgICAgICAgICQgZ2l0IGNoZWNrb3V0IC1iIHlvdXIt
ZmVhdHVyZS1icmFuY2gtbmFtZSBmZWF0dXJlcworCisgICBHaXZlbiB3ZSBoYXZlICJtYWpvci5t
aW5vci5taWNybyIgdmVyc2lvbiBudW1iZXJzLCBidWdmaXhlcyB3aWxsIHVzdWFsbHkgCisgICBi
ZSByZWxlYXNlZCBpbiBtaWNybyByZWxlYXNlcyB3aGVyZWFzIGZlYXR1cmVzIHdpbGwgYmUgcmVs
ZWFzZWQgaW4gCisgICBtaW5vciByZWxlYXNlcyBhbmQgaW5jb21wYXRpYmxlIGNoYW5nZXMgaW4g
bWFqb3IgcmVsZWFzZXMuCisKKyAgIElmIHlvdSBuZWVkIHNvbWUgaGVscCB3aXRoIEdpdCwgZm9s
bG93IHRoaXMgcXVpY2sgc3RhcnQKKyAgIGd1aWRlOiBodHRwczovL2dpdC53aWtpLmtlcm5lbC5v
cmcvaW5kZXgucGhwL1F1aWNrU3RhcnQKKworIy4gSW5zdGFsbCB0b3gKKworICAgVG94IGlzIHVz
ZWQgdG8gcnVuIGFsbCB0aGUgdGVzdHMgYW5kIHdpbGwgYXV0b21hdGljYWxseSBzZXR1cCB2aXJ0
dWFsZW52cworICAgdG8gcnVuIHRoZSB0ZXN0cyBpbi4KKyAgICh3aWxsIGltcGxpY2l0bHkgdXNl
IGh0dHA6Ly93d3cudmlydHVhbGVudi5vcmcvZW4vbGF0ZXN0Lyk6OgorCisgICAgJCBwaXAgaW5z
dGFsbCB0b3gKKworIy4gUnVuIGFsbCB0aGUgdGVzdHMKKworICAgWW91IG5lZWQgdG8gaGF2ZSBQ
eXRob24gMi43IGFuZCAzLjUgYXZhaWxhYmxlIGluIHlvdXIgc3lzdGVtLiAgTm93CisgICBydW5u
aW5nIHRlc3RzIGlzIGFzIHNpbXBsZSBhcyBpc3N1aW5nIHRoaXMgY29tbWFuZDo6CisKKyAgICAk
IHB5dGhvbiBydW50b3gucHkgLWUgbGludGluZyxweTI3LHB5MzUKKworICAgVGhpcyBjb21tYW5k
IHdpbGwgcnVuIHRlc3RzIHZpYSB0aGUgInRveCIgdG9vbCBhZ2FpbnN0IFB5dGhvbiAyLjcgYW5k
IDMuNQorICAgYW5kIGFsc28gcGVyZm9ybSAibGludCIgY29kaW5nLXN0eWxlIGNoZWNrcy4gIGBg
cnVudG94LnB5YGAgaXMKKyAgIGEgdGhpbiB3cmFwcGVyIGFyb3VuZCBgYHRveGBgIHdoaWNoIGlu
c3RhbGxzIGZyb20gYSBkZXZlbG9wbWVudCBwYWNrYWdlCisgICBpbmRleCB3aGVyZSBuZXdlciAo
bm90IHlldCByZWxlYXNlZCB0byBweXBpKSB2ZXJzaW9ucyBvZiBkZXBlbmRlbmNpZXMKKyAgIChl
c3BlY2lhbGx5IGBgcHlgYCkgbWlnaHQgYmUgcHJlc2VudC4KKworIy4gWW91IGNhbiBub3cgZWRp
dCB5b3VyIGxvY2FsIHdvcmtpbmcgY29weS4KKworICAgWW91IGNhbiBub3cgbWFrZSB0aGUgY2hh
bmdlcyB5b3Ugd2FudCBhbmQgcnVuIHRoZSB0ZXN0cyBhZ2FpbiBhcyBuZWNlc3NhcnkuCisKKyAg
IFRvIHJ1biB0ZXN0cyBvbiBweTI3IGFuZCBwYXNzIG9wdGlvbnMgdG8gcHl0ZXN0IChlLmcuIGVu
dGVyIHBkYiBvbiBmYWlsdXJlKQorICAgdG8gcHl0ZXN0IHlvdSBjYW4gZG86OgorCisgICAgJCBw
eXRob24gcnVudG94LnB5IC1lIHB5MjcgLS0gLS1wZGIKKworICAgb3IgdG8gb25seSBydW4gdGVz
dHMgaW4gYSBwYXJ0aWN1bGFyIHRlc3QgbW9kdWxlIG9uIHB5MzU6OgorCisgICAgJCBweXRob24g
cnVudG94LnB5IC1lIHB5MzUgLS0gdGVzdGluZy90ZXN0X2NvbmZpZy5weQorCisjLiBDb21taXQg
YW5kIHB1c2ggb25jZSB5b3VyIHRlc3RzIHBhc3MgYW5kIHlvdSBhcmUgaGFwcHkgd2l0aCB5b3Vy
IGNoYW5nZShzKTo6CisKKyAgICAkIGdpdCBjb21taXQgLWEgLW0gIjxjb21taXQgbWVzc2FnZT4i
CisgICAgJCBnaXQgcHVzaCAtdQorCisgICBNYWtlIHN1cmUgeW91IGFkZCBhIENIQU5HRUxPRyBt
ZXNzYWdlLCBhbmQgYWRkIHlvdXJzZWxmIHRvIEFVVEhPUlMuIElmIHlvdQorICAgYXJlIHVuc3Vy
ZSBhYm91dCBlaXRoZXIgb2YgdGhlc2Ugc3RlcHMsIHN1Ym1pdCB5b3VyIHB1bGwgcmVxdWVzdCBh
bmQgd2UnbGwKKyAgIGhlbHAgeW91IGZpeCBpdCB1cC4KKworIy4gRmluYWxseSwgc3VibWl0IGEg
cHVsbCByZXF1ZXN0IHRocm91Z2ggdGhlIEdpdEh1YiB3ZWJzaXRlIHVzaW5nIHRoaXMgZGF0YTo6
CisKKyAgICBoZWFkLWZvcms6IFlPVVJfR0lUSFVCX1VTRVJOQU1FL3B5dGVzdAorICAgIGNvbXBh
cmU6IHlvdXItYnJhbmNoLW5hbWUKKworICAgIGJhc2UtZm9yazogcHl0ZXN0LWRldi9weXRlc3QK
KyAgICBiYXNlOiBtYXN0ZXIgICAgICAgICAgIyBpZiBpdCdzIGEgYnVnZml4CisgICAgYmFzZTog
ZmVhdHVyZSAgICAgICAgICMgaWYgaXQncyBhIGZlYXR1cmUKKworCmRpZmYgLS1naXQgYS9XZWJE
cml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L0hPV1RPUkVMRUFTRS5yc3QgYi9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L0hPV1RPUkVMRUFTRS5yc3QK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjNlYmZhMjhiMWVkCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9I
T1dUT1JFTEVBU0UucnN0CkBAIC0wLDAgKzEsOTIgQEAKK0hvdyB0byByZWxlYXNlIHB5dGVzdAor
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTm90ZTogdGhp
cyBhc3N1bWVzIHlvdSBoYXZlIGFscmVhZHkgcmVnaXN0ZXJlZCBvbiBweXBpLgorCiswLiBjcmVh
dGUgdGhlIGJyYW5jaCByZWxlYXNlLVZFUlNJT04KKyAgIHVzZSBmZWF0dXJlcyBhcyBiYXNlIGZv
ciBtaW5vci9tYWpvciByZWxlYXNlcworICAgYW5kIG1hc3RlciBhcyBiYXNlIGZvciBidWdmaXgg
cmVsZWFzZXMKKworMS4gQnVtcCB2ZXJzaW9uIG51bWJlcnMgaW4gX3B5dGVzdC9fX2luaXRfXy5w
eSAoc2V0dXAucHkgcmVhZHMgaXQpCisKKzIuIENoZWNrIGFuZCBmaW5hbGl6ZSBDSEFOR0VMT0cK
KworMy4gV3JpdGUgZG9jL2VuL2Fubm91bmNlL3JlbGVhc2UtVkVSU0lPTi50eHQgYW5kIGluY2x1
ZGUKKyAgIGl0IGluIGRvYy9lbi9hbm5vdW5jZS9pbmRleC50eHQ6OgorCisgICAgICAgIGdpdCBs
b2cgMi44LjIuLkhFQUQgLS1mb3JtYXQ9JyVhTicgfCBzb3J0IC11ICMgbGlzdHMgdGhlIG5hbWVz
IG9mIGF1dGhvcnMgaW52b2x2ZWQKKworNC4gVXNlIGRldnBpIGZvciB1cGxvYWRpbmcgYSByZWxl
YXNlIHRhcmJhbGwgdG8gYSBzdGFnaW5nIGFyZWE6OgorCisgICAgIGRldnBpIHVzZSBodHRwczov
L2RldnBpLm5ldC9VU0VSL2RldgorICAgICBkZXZwaSB1cGxvYWQgLS1mb3JtYXRzIHNkaXN0LGJk
aXN0X3doZWVsCisKKzUuIFJ1biBmcm9tIG11bHRpcGxlIG1hY2hpbmVzOjoKKworICAgICBkZXZw
aSB1c2UgaHR0cHM6Ly9kZXZwaS5uZXQvVVNFUi9kZXYKKyAgICAgZGV2cGkgdGVzdCBweXRlc3Q9
PVZFUlNJT04KKworNi4gQ2hlY2sgdGhhdCB0ZXN0cyBwYXNzIGZvciByZWxldmFudCBjb21iaW5h
dGlvbnMgd2l0aDo6CisKKyAgICAgICBkZXZwaSBsaXN0IHB5dGVzdAorCisgICBvciBsb29rIGF0
IGZhaWx1cmVzIHdpdGggImRldnBpIGxpc3QgLWYgcHl0ZXN0Ii4KKworNy4gUmVnZW5lcmF0ZSB0
aGUgZG9jcyBleGFtcGxlcyB1c2luZyB0b3gsIGFuZCBjaGVjayBmb3IgcmVncmVzc2lvbnM6Ogor
CisgICAgICB0b3ggLWUgcmVnZW4KKyAgICAgIGdpdCBkaWZmCisKKworOC4gQnVpbGQgdGhlIGRv
Y3MsIHlvdSBuZWVkIGEgdmlydHVhbGVudiB3aXRoIHB5IGFuZCBzcGhpbngKKyAgIGluc3RhbGxl
ZDo6CisKKyAgICAgIGNkIGRvYy9lbiAgICAgIAorICAgICAgbWFrZSBodG1sCisKKyAgIENvbW1p
dCBhbnkgY2hhbmdlcyBiZWZvcmUgdGFnZ2luZyB0aGUgcmVsZWFzZS4KKworOS4gVGFnIHRoZSBy
ZWxlYXNlOjoKKworICAgICAgZ2l0IHRhZyBWRVJTSU9OCisgICAgICBnaXQgcHVzaAorCisxMC4g
VXBsb2FkIHRoZSBkb2NzIHVzaW5nIGRvYy9lbi9NYWtlZmlsZTo6CisKKyAgICAgIGNkIGRvYy9l
bgorICAgICAgbWFrZSBpbnN0YWxsICAjIG9yICJpbnN0YWxsYWxsIiBpZiB5b3UgaGF2ZSBMYVRl
WCBpbnN0YWxsZWQgZm9yIFBERgorCisgICAgVGhpcyByZXF1aXJlcyBzc2gtbG9naW4gcGVybWlz
c2lvbiBvbiBweXRlc3Qub3JnIGJlY2F1c2UgaXQgdXNlcworICAgIHJzeW5jLgorICAgIE5vdGUg
dGhhdCB0aGUgYGBpbnN0YWxsYGAgdGFyZ2V0IG9mIGBgZG9jL2VuL01ha2VmaWxlYGAgZGVmaW5l
cyB3aGVyZSB0aGUKKyAgICByc3luYyBnb2VzIHRvLCB0eXBpY2FsbHkgdG8gdGhlICJsYXRlc3Qi
IHNlY3Rpb24gb2YgcHl0ZXN0Lm9yZy4KKworICAgIElmIHlvdSBhcmUgbWFraW5nIGEgbWlub3Ig
cmVsZWFzZSAoZS5nLiA1LjQpLCB5b3UgYWxzbyBuZWVkIHRvIG1hbnVhbGx5CisgICAgY3JlYXRl
IGEgc3ltbGluayBmb3IgImxhdGVzdCI6OgorCisgICAgICAgc3NoIHB5dGVzdC1kZXZAcHl0ZXN0
Lm9yZworICAgICAgIGxuIC1zIDUuNCBsYXRlc3QKKworICAgIEJyb3dzZSB0byBweXRlc3Qub3Jn
IHRvIHZlcmlmeS4KKworMTEuIFB1Ymxpc2ggdG8gcHlwaTo6CisKKyAgICAgIGRldnBpIHB1c2gg
cHl0ZXN0LVZFUlNJT04gcHlwaTpOQU1FCisKKyAgICB3aGVyZSBOQU1FIGlzIHRoZSBuYW1lIG9m
IHB5cGkucHl0aG9uLm9yZyBhcyBjb25maWd1cmVkIGluIHlvdXIgYGB+Ly5weXBpcmNgYAorICAg
IGZpbGUgYGZvciBkZXZwaSA8aHR0cDovL2RvYy5kZXZwaS5uZXQvbGF0ZXN0L3F1aWNrc3RhcnQt
cmVsZWFzZXByb2Nlc3MuaHRtbD9oaWdobGlnaHQ9cHlwaXJjI2RldnBpLXB1c2gtcmVsZWFzaW5n
LXRvLWFuLWV4dGVybmFsLWluZGV4PmBfLgorCisKKzEyLiBTZW5kIHJlbGVhc2UgYW5ub3VuY2Vt
ZW50IHRvIG1haWxpbmcgbGlzdHM6CisKKyAgICAtIHB5dGVzdC1kZXYKKyAgICAtIHRlc3Rpbmct
aW4tcHl0aG9uCisgICAgLSBweXRob24tYW5ub3VuY2UtbGlzdEBweXRob24ub3JnCisKKworMTMu
ICoqYWZ0ZXIgdGhlIHJlbGVhc2UqKiBCdW1wIHRoZSB2ZXJzaW9uIG51bWJlciBpbiBgYF9weXRl
c3QvX19pbml0X18ucHlgYCwKKyAgICB0byB0aGUgbmV4dCBNaW5vciByZWxlYXNlIHZlcnNpb24g
KGkuZS4gaWYgeW91IHJlbGVhc2VkIGBgcHl0ZXN0LTIuOC4wYGAsCisgICAgc2V0IGl0IHRvIGBg
cHl0ZXN0LTIuOS4wLmRldjFgYCkuCisKKzE0LiBtZXJnZSB0aGUgYWN0dWFsIHJlbGVhc2UgaW50
byB0aGUgbWFzdGVyIGJyYW5jaCBhbmQgZG8gYSBwdWxsIHJlcXVlc3QgYWdhaW5zdCBpdAorMTUu
IG1lcmdlIGZyb20gbWFzdGVyIHRvIGZlYXR1cmVzCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0
cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L0lTU1VFUy50eHQgYi9XZWJEcml2ZXJUZXN0cy9p
bXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L0lTU1VFUy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAuLjA4MWQ3MjdlODZhCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJp
dmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9JU1NVRVMudHh0CkBAIC0wLDAgKzEs
MzY1IEBACisKKworcmVjb3JkZXIgPSBtb25rZXlwYXRjaC5mdW5jdGlvbigiLi4uLi4uLiIpCist
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCit0YWdzOiBuaWNlIGZlYXR1cmUgCisKK0xpa2UgbW9ua2V5cGF0Y2gucmVwbGFjZSBidXQg
c2V0cyBhIG1vY2stbGlrZSBjYWxsIHJlY29yZGVyOgorCisgICAgcmVjb3JkZXIgPSBtb25rZXlw
YXRjaC5mdW5jdGlvbigib3MucGF0aC5hYnNwYXRoIikKKyAgICByZWNvcmRlci5zZXRfcmV0dXJu
KCIvaGVsbG8iKQorICAgIG9zLnBhdGguYWJzcGF0aCgiaGVsbG8iKQorICAgIGNhbGwsID0gcmVj
b3JkZXIuY2FsbHMKKyAgICBhc3NlcnQgY2FsbC5hcmdzLnBhdGggPT0gImhlbGxvIgorICAgIGFz
c2VydCBjYWxsLnJldHVybmVkID09ICIvaGVsbG8iCisgICAgLi4uCisKK1VubGlrZSBtb2NrLCAi
YXJncy5wYXRoIiBhY3RzIG9uIHRoZSBwYXJzZWQgYXV0by1zcGVjJ2VkIGBgb3MucGF0aC5hYnNw
YXRoYGAKK3NvIGl0J3MgaW5kZXBlbmRlbnQgZnJvbSBpZiB0aGUgY2xpZW50IHNpZGUgY2FsbGVk
ICJvcy5wYXRoLmFic3BhdGgocGF0aD0uLi4pIgorb3IgIm9zLnBhdGguYWJzcGF0aCgncG9zaXRp
b25hbCcpIi4KKworCityZWZpbmUgcGFyYW1ldHJpemUgQVBJCistLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0YWdzOiBjcml0aWNh
bCBmZWF0dXJlIAorCitleHRlbmQgbWV0YWZ1bmMucGFyYW1ldHJpemUgdG8gZGlyZWN0bHkgc3Vw
cG9ydCBpbmRpcmVjdGlvbiwgZXhhbXBsZToKKworICAgIGRlZiBzZXR1cGRiKHJlcXVlc3QsIGNv
bmZpZyk6CisgICAgICAgICMgc2V0dXAgInJlc291cmNlIiBiYXNlZCBvbiB0ZXN0IHJlcXVlc3Qg
YW5kIHRoZSB2YWx1ZXMgcGFzc2VkIAorICAgICAgICAjIGluIHRvIHBhcmFtZXRyaXplLiAgc2V0
dXBmdW5jIGlzIGNhbGxlZCBmb3IgZWFjaCBzdWNoIHZhbHVlLgorICAgICAgICAjIHlvdSBtYXkg
dXNlIHJlcXVlc3QuYWRkZmluYWxpemVyKCkgb3IgcmVxdWVzdC5jYWNoZWRfc2V0dXAgLi4uCisg
ICAgICAgIHJldHVybiBkeW5hbWljX3NldHVwX2RhdGFiYXNlKHZhbCkKKworICAgIEBweXRlc3Qu
bWFyay5wYXJhbWV0cml6ZSgiZGIiLCBbInBnIiwgIm15c3FsIl0sIHNldHVwZnVuYz1zZXR1cGRi
KQorICAgIGRlZiB0ZXN0X2hlYXZ5X2Z1bmN0aW9uYWxfdGVzdChkYik6CisgICAgICAgIC4uLgor
CitUaGVyZSB3b3VsZCBiZSBubyBuZWVkIHRvIHdyaXRlIG9yIGV4cGxhaW4gZnVuY2FyZyBmYWN0
b3JpZXMgYW5kCit0aGVpciBzcGVjaWFsIF9fIHN5bnRheC4KKworVGhlIGV4YW1wbGVzIGFuZCBp
bXByb3ZlbWVudHMgc2hvdWxkIGFsc28gc2hvdyBob3cgdG8gcHV0IHRoZSBwYXJhbWV0cml6ZQor
ZGVjb3JhdG9yIHRvIGEgY2xhc3MsIHRvIGEgbW9kdWxlIG9yIGV2ZW4gdG8gYSBkaXJlY3Rvcnku
ICBGb3IgdGhlIGRpcmVjdG9yeQorcGFydCBhIGNvbmZ0ZXN0LnB5IGNvbnRlbnQgbGlrZSB0aGlz
OjoKKworICAgIHB5dGVzdG1hcmsgPSBbCisgICAgICAgIEBweXRlc3QubWFyay5wYXJhbWV0cml6
ZV9zZXR1cCgiZGIiLCAuLi4pLAorICAgIF0KKworcHJvYmFibHkgbWFrZXMgc2Vuc2UgaW4gb3Jk
ZXIgdG8ga2VlcCB0aGUgZGVjbGFyYXRpdmUgbmF0dXJlLiAgIFRoaXMgbWlycm9ycwordGhlIG1h
cmtlci1tZWNoYW5pc20gd2l0aCByZXNwZWN0IHRvIGEgdGVzdCBtb2R1bGUgYnV0IHB1dHMgaXQg
dG8gYSBkaXJlY3RvcnkKK3NjYWxlLgorCitXaGVuIGRvaW5nIGxhcmdlciBzY29wZWQgcGFyYW1l
dHJpemF0aW9uIGl0IHByb2JhYmx5IGJlY29tZXMgbmVjZXNzYXJ5Cit0byBhbGxvdyBwYXJhbWV0
cml6YXRpb24gdG8gYmUgaWdub3JlZCBpZiB0aGUgYWNjb3JkaW5nIHBhcmFtZXRlciBpcyBub3QK
K3VzZWQgKGN1cnJlbnRseSBhbnkgcGFyYW1ldHJpemVkIGFyZ3VtZW50IHRoYXQgaXMgbm90IHBy
ZXNlbnQgaW4gYSBmdW5jdGlvbiB3aWxsIGNhdXNlIGEgVmFsdWVFcnJvcikuIEV4YW1wbGU6CisK
KyAgICAgICAgQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKCJkYiIsIC4uLiwgbXVzdG1hdGNoPUZh
bHNlKQorCittZWFucyB0byBub3QgcmFpc2UgYW4gZXJyb3IgYnV0IHNpbXBseSBpZ25vcmUgdGhl
IHBhcmFtZXRyaXphdGlvbgoraWYgdGhlIHNpZ25hdHVyZSBvZiBhIGRlY29yYXRlZCBmdW5jdGlv
biBkb2VzIG5vdCBtYXRjaC4gWFhYIGlzIGl0Citub3Qgc3VmZmljaWVudCB0byBhbHdheXMgYWxs
b3cgbm9uLW1hdGNoZXM/CisKKworYWxsb3cgcGFyYW1ldHJpemVkIGF0dHJpYnV0ZXMgb24gY2xh
c3NlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
CisKK3RhZ3M6IHdpc2ggMi40CisKK2V4YW1wbGU6CisKKyAgICBAcHl0ZXN0Lm1hcmsucGFyYW1l
dHJpemVfYXR0cigiZGIiLCBzZXR1cGZ1bmMsIFsxLDIsM10sIHNjb3BlPSJjbGFzcyIpCisgICAg
QHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplX2F0dHIoInRtcCIsIHNldHVwZnVuYywgc2NvcGU9Ii4u
LiIpCisgICAgY2xhc3MgVGVzdE1lOgorICAgICAgICBkZWYgdGVzdF9oZWxsbyhzZWxmKToKKyAg
ICAgICAgICAgIGFjY2VzcyBzZWxmLmRiIC4uLgorCit0aGlzIHdvdWxkIHJ1biB0aGUgdGVzdF9o
ZWxsbygpIGZ1bmN0aW9uIHRocmVlIHRpbWVzIHdpdGggdGhyZWUKK2RpZmZlcmVudCB2YWx1ZXMg
Zm9yIHNlbGYuZGIuIFRoaXMgY291bGQgYWxzbyB3b3JrIHdpdGggdW5pdHRlc3Qvbm9zZQorc3R5
bGUgdGVzdHMsIGkuZS4gaXQgbGV2ZXJhZ2VzIGV4aXN0aW5nIHRlc3Qgc3VpdGVzIHdpdGhvdXQg
bmVlZGluZwordG8gcmV3cml0ZSB0aGVtLiBUb2dldGhlciB3aXRoIHRoZSBwcmV2aW91c2x5IG1l
bnRpb25lZCBzZXR1cF90ZXN0KCkKK21heWJlIHRoZSBzZXR1cGZ1bmMgY291bGQgYmUgb21pdHRl
ZD8KKworb3B0aW1pemF0aW9ucyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordGFnczogMi40IGNvcmUKKworLSBsb29rIGF0
IGlob29rIG9wdGltaXphdGlvbiBzdWNoIHRoYXQgYWxsIGxvb2t1cHMgZm9yCisgIGhvb2tzIHJl
bGF0aW5nIHRvIHRoZSBzYW1lIGZzcGF0aCBhcmUgY2FjaGVkLgorCitmaXggc3RhcnQvZmluaXNo
IHBhcnRpYWwgZmluYWlsaXphdGlvbiBwcm9ibGVtCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3RhZ3M6IGJ1ZyBjb3JlCisK
K2lmIGEgY29uZmlndXJlL3J1bnRlc3Rfc2V0dXAvc2Vzc2lvbnN0YXJ0Ly4uLiBob29rIGludm9j
YXRpb24gcGFydGlhbGx5CitmYWlscyB0aGUgc2Vzc2lvbmZpbmlzaGVzIGlzIG5vdCBjYWxsZWQu
ICBFYWNoIGhvb2sgaW1wbGVtZW50YXRpb24KK3Nob3VsZCBiZXR0ZXIgYmUgcmVwc29uc2libGUg
Zm9yIHJlZ2lzdGVyaW5nIGEgY2xlYW51cC9maW5hbGl6ZXIKK2FwcHJvcHJpYXRlbHkgdG8gYXZv
aWQgdGhpcyBpc3N1ZS4gIE1vcmVvdmVyL0FsdGVybmF0aXZlbHksIHdlIGNvdWxkIAorcmVjb3Jk
IHdoaWNoIGltcGxlbWVudGF0aW9ucyBvZiBhIGhvb2sgc3VjY2VlZGVkIGFuZCBvbmx5IGNhbGwg
dGhlaXIKK3RlYXJkb3duLgorCisKK3JlbGF4IHJlcXVpcmVtZW50IHRvIGhhdmUgdGVzdHMvdGVz
dGluZyBjb250YWluIGFuIF9faW5pdF9fCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0YWdzOiBmZWF0dXJlIAorYmI6IGh0
dHA6Ly9iaXRidWNrZXQub3JnL2hwazQyL3B5LXRydW5rL2lzc3VlLzY0CisKK0EgbG9jYWwgdGVz
dCBydW4gb2YgYSAidGVzdHMiIGRpcmVjdG9yeSBtYXkgd29yaworYnV0IGEgcmVtb3RlIG9uZSBm
YWlsIGJlY2F1c2UgdGhlIHRlc3RzIGRpcmVjdG9yeQorZG9lcyBub3QgY29udGFpbiBhbiAiX19p
bml0X18ucHkiLiBFaXRoZXIgZ2l2ZQorYW4gZXJyb3Igb3IgbWFrZSBpdCB3b3JrIHdpdGhvdXQg
dGhlIF9faW5pdF9fLnB5CitpLmUuIHBvcnQgdGhlIG5vc2UtbG9naWMgb2YgdW5sb2FkaW5nIGEg
dGVzdCBtb2R1bGUuCisKK2N1c3RvbWl6ZSB0ZXN0IGZ1bmN0aW9uIGNvbGxlY3Rpb24KKy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3RhZ3M6
IGZlYXR1cmUgCisKKy0gaW50cm9kdWNlIHB5dGVzdC5tYXJrLm5vY29sbGVjdCBmb3Igbm90IGNv
bnNpZGVyaW5nIGEgZnVuY3Rpb24gZm9yCisgIHRlc3QgY29sbGVjdGlvbiBhdCBhbGwuICBtYXli
ZSBhbHNvIGludHJvZHVjZSBhIHB5dGVzdC5tYXJrLnRlc3QgdG8KKyAgZXhwbGljaXRseSBtYXJr
IGEgZnVuY3Rpb24gdG8gYmVjb21lIGEgdGVzdGVkIG9uZS4gIExvb2t1cCBKVW5pdCB3YXlzCisg
IG9mIHRhZ2dpbmcgdGVzdHMuCisKK2ludHJvZHVjZSBweXRlc3QubWFyay5pbXBvcnRvcnNraXAK
Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
K3RhZ3M6IGZlYXR1cmUgCisKK2luIGFkZGl0aW9uIHRvIHRoZSBpbXBlcmF0aXZlIHB5dGVzdC5p
bXBvcnRvcnNraXAgYWxzbyBpbnRyb2R1Y2UKK2EgcHl0ZXN0Lm1hcmsuaW1wb3J0b3Jza2lwIHNv
IHRoYXQgdGhlIHRlc3QgY291bnQgaXMgbW9yZSBjb3JyZWN0LgorCisKK2ludHJvZHVjZSBweXRl
c3QubWFyay5wbGF0Zm9ybQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQordGFnczogZmVhdHVyZSAKKworSW50cm9kdWNlIG5pY2UtdG8tc3Bl
bGwgcGxhdGZvcm0tc2tpcHBpbmcsIGV4YW1wbGVzOgorCisgICAgQHB5dGVzdC5tYXJrLnBsYXRm
b3JtKCJweXRob24zIikKKyAgICBAcHl0ZXN0Lm1hcmsucGxhdGZvcm0oIm5vdCBweXRob24zIikK
KyAgICBAcHl0ZXN0Lm1hcmsucGxhdGZvcm0oIndpbjMyIGFuZCBub3QgcHl0aG9uMyIpCisgICAg
QHB5dGVzdC5tYXJrLnBsYXRmb3JtKCJkYXJ3aW4iKQorICAgIEBweXRlc3QubWFyay5wbGF0Zm9y
bSgibm90IChqeXRob24gYW5kIHdpbjMyKSIpCisgICAgQHB5dGVzdC5tYXJrLnBsYXRmb3JtKCJu
b3QgKGp5dGhvbiBhbmQgd2luMzIpIiwgeGZhaWw9VHJ1ZSkKKworZXRjLiBJZGVhIGlzIHRvIGFs
bG93IFB5dGhvbiBleHByZXNzaW9ucyB3aGljaCBjYW4gb3BlcmF0ZQorb24gY29tbW9uIHNwZWxs
aW5ncyBmb3Igb3BlcmF0aW5nIHN5c3RlbXMgYW5kIHB5dGhvbgoraW50ZXJwcmV0ZXIgdmVyc2lv
bnMuCisKK3B5dGVzdC5tYXJrLnhmYWlsIHNpZ25hdHVyZSBjaGFuZ2UKKy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3RhZ3M6IGZlYXR1cmUg
CisKK2NoYW5nZSB0byBweXRlc3QubWFyay54ZmFpbChyZWFzb24sIChvcHRpb25hbCljb25kaXRp
b24pCit0byBiZXR0ZXIgaW1wbGVtZW50IHRoZSB3b3JkIG1lYW5pbmcuICBJdCBhbHNvIHNpZ25h
bHMKK2JldHRlciB0aGF0IHdlIGFsd2F5cyBoYXZlIHNvbWUga2luZCBvZiBhbiBpbXBsZW1lbnRh
dGlvbgorcmVhc29uIHRoYXQgY2FuIGJlIGZvcm11YWxhdGVkLgorQ29tcGF0aWJpbGl0eT8gaG93
IHRvIGludHJvZHVjZSBhIG5ldyBuYW1lL2tlZXAgY29tcGF0PworCithbGxvdyB0byBub24taW50
cnVzaXZlbHkgYXBwbHkgc2tpcGZzL3hmYWlsL21hcmtzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3RhZ3M6IGZlYXR1cmUgCisKK3VzZSBjYXNl
OiBtYXJrIGEgbW9kdWxlIG9yIGRpcmVjdG9yeSBzdHJ1Y3R1cmVzCit0byBiZSBza2lwcGVkIG9u
IGNlcnRhaW4gcGxhdGZvcm1zIChpLmUuIG5vIGltcG9ydAorYXR0ZW1wdCB3aWxsIGJlIG1hZGUp
LgorCitjb25zaWRlciBpbnRyb2R1Y2luZyBhIGhvb2svbWVjaGFuaXNtIHRoYXQgYWxsb3dzIHRv
IGFwcGx5IG1hcmtzCitmcm9tIGNvbmZ0ZXN0cyBvciBwbHVnaW5zLiAoU2VlIGV4dGVuZGVkIHBh
cmFtZXRyaXphdGlvbikKKworCitleHBsaWNpdCByZWZlcmVuY2luZyBvZiBjb25mdGVzdC5weSBm
aWxlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3RhZ3M6IGZl
YXR1cmUgCisKK2FsbG93IHRvIG5hbWUgY29uZnRlc3QucHkgZmlsZXMgKGluIHN1YiBkaXJlY3Rv
cmllcykgdGhhdCBzaG91bGQKK2JlIGltcG9ydGVkIGVhcmx5LCBhcyB0byBpbmNsdWRlIGNvbW1h
bmQgbGluZSBvcHRpb25zLgorCitpbXByb3ZlIGNlbnRyYWwgcHl0ZXN0IGluaSBmaWxlCistLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0YWdzOiBmZWF0dXJlIAorCitpbnRyb2R1Y2Ug
bW9yZSBkZWNsYXJhdGl2ZSBjb25maWd1cmF0aW9uIG9wdGlvbnM6CistICh0by1iZS1jb2xsZWN0
ZWQgdGVzdCBkaXJlY3RvcmllcykKKy0gcmVxdWlyZWQgcGx1Z2lucworLSB0ZXN0IGZ1bmMvY2xh
c3MvZmlsZSBtYXRjaGluZyBwYXR0ZXJucworLSBza2lwL3hmYWlsIChub24taW50cnVzaXZlKQor
LSBweXRlc3QuaW5pIGFuZCB0b3guaW5pIGFuZCBzZXR1cC5jZmcgY29uZmlndXJhdGlvbiBpbiB0
aGUgc2FtZSBmaWxlCisKK25ldyBkb2N1bWVudGF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCit0YWdzOiBmZWF0dXJlIAorCistIGxvZ28gcHl0ZXN0CistIGV4YW1wbGVz
IGZvciB1bml0dGVzdCBvciBmdW5jdGlvbmFsIHRlc3RpbmcKKy0gcmVzb3VyY2UgbWFuYWdlbWVu
dCBmb3IgZnVuY3Rpb25hbCB0ZXN0aW5nCistIHBhdHRlcm5zOiBwYWdlIG9iamVjdAorCitoYXZl
IGltcG9ydGVkIG1vZHVsZSBtaXNtYXRjaCBob25vdXIgcmVsYXRpdmUgcGF0aHMKKy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0YWdzOiBi
dWcgCisKK1dpdGggMS4xLjEgcHl0ZXN0IGZhaWxzIGF0IGxlYXN0IG9uIHdpbmRvd3MgaWYgYW4g
aW1wb3J0CitpcyByZWxhdGl2ZSBhbmQgY29tcGFyZWQgYWdhaW5zdCBhbiBhYnNvbHV0ZSBjb25m
dGVzdC5weQorcGF0aC4gTm9ybWFsaXplLgorCitjb25zaWRlciBnbG9iYWxzOiBweXRlc3QuZW5z
dXJldGVtcCBhbmQgY29uZmlnCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordGFnczogZXhwZXJpbWVudGFsLXdpc2ggCisKK2Nv
bnNpZGVyIGRlcHJlY2F0aW5nIHB5dGVzdC5lbnN1cmV0ZW1wIGFuZCBweXRlc3QuY29uZmlnCit0
byBmdXJ0aGVyIHJlZHVjZSBweXRlc3QgZ2xvYmFsaXR5LiAgQWxzbyBjb25zaWRlcgoraGF2aW5n
IHB5dGVzdC5jb25maWcgYW5kIGVuc3VyZXRlbXAgY29taW5nIGZyb20KK2EgcGx1Z2luIHJhdGhl
ciB0aGFuIGJlaW5nIHRoZXJlIGZyb20gdGhlIHN0YXJ0LgorCisKK2NvbnNpZGVyIHB5dGVzdF9h
ZGRzeXNwYXRoIGhvb2sKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Cit0YWdzOiB3aXNoCisKK3B5dGVzdCBjb3VsZCBjYWxsIGEgbmV3IHB5dGVzdF9hZGRzeXNwYXRo
KCkgaW4gb3JkZXIgdG8gc3lzdGVtYXRpY2FsbHkKK2FsbG93IG1hbmlwdWxhdGlvbiBvZiBzeXMu
cGF0aCBhbmQgdG8gaW5oaWJpdCBpdCB2aWEgLS1uby1hZGRzeXNwYXRoCitpbiBvcmRlciB0byBt
b3JlIGVhc2lseSBydW4gYWdhaW5zdCBpbnN0YWxsZWQgcGFja2FnZXMuCisKK0FsdGVybmF0aXZl
bHkgaXQgY291bGQgYWxzbyBiZSBkb25lIHZpYSB0aGUgY29uZmlnIG9iamVjdAorYW5kIHB5dGVz
dF9jb25maWd1cmUuCisKKworCitkZXByZWNhdGUgZ2xvYmFsIHB5dGVzdC5jb25maWcgdXNhZ2UK
Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KK3RhZ3M6IGZlYXR1cmUgCisKK3B5dGVzdC5lbnN1cmV0ZW1wIGFuZCBweXRlc3Qu
Y29uZmlnIGFyZSBwcm9iYWJseSB0aGUgbGFzdAorb2JqZWN0cyBjb250YWluaW5nIGdsb2JhbCBz
dGF0ZS4gIE9mdGVuIHVzaW5nIHRoZW0gaXMgbm90CituZWNlc3NhcnkuICBUaGlzIGlzIGFib3V0
IHRyeWluZyB0byBnZXQgcmlkIG9mIHRoZW0sIGkuZS4KK2RlcHJlY2F0aW5nIHRoZW0gYW5kIGNo
ZWNraW5nIHdpdGggUHlQeSdzIHVzYWdlcyBhcyB3ZWxsCithcyBvdGhlcnMuCisKK3JlbW92ZSBk
ZXByZWNhdGVkIGJpdHMgaW4gY29sbGVjdC5weQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordGFnczogZmVhdHVyZSAK
KworSW4gYW4gZWZmb3J0IHRvIGZ1cnRoZXIgc2ltcGxpZnkgY29kZSwgcmV2aWV3IGFuZCByZW1v
dmUgZGVwcmVjYXRlZCBiaXRzCitpbiBjb2xsZWN0LnB5LiAgUHJvYmFibHkgZ29vZDoKKy0gaW5s
aW5lIGNvbnNpZGVyX2ZpbGUvZGlyIG1ldGhvZHMsIG5vIG5lZWQgdG8gaGF2ZSB0aGVtCisgIHN1
YmNsYXNzLW92ZXJyaWRhYmxlIGJlY2F1c2Ugb2YgaG9va3MKKworaW1wbGVtZW50IGZzbGF5b3V0
IGRlY29yYXRvcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0YWdzOiBmZWF0
dXJlIAorCitJbXByb3ZlIHRoZSB3YXkgaG93IHRlc3RzIGNhbiB3b3JrIHdpdGggcHJlLW1hZGUg
ZXhhbXBsZXMsCitrZWVwaW5nIHRoZSBsYXlvdXQgY2xvc2UgdG8gdGhlIHRlc3QgZnVuY3Rpb246
CisKK0BweXRlc3QubWFyay5mc2xheW91dCgiIiIKKyAgICBjb25mdGVzdC5weToKKyAgICAgICAg
IyAgZW1wdHkKKyAgICB0ZXN0cy8KKyAgICAgICAgdGVzdF8lKE5BTUUpczogICMgYmVjb21lcyB0
ZXN0X3J1bjEucHkKKyAgICAgICAgICAgIGRlZiB0ZXN0X2Z1bmN0aW9uKHNlbGYpOgorICAgICAg
ICAgICAgICAgIHBhc3MKKyIiIikKK2RlZiB0ZXN0X3J1bihweXRlc3RlciwgZnNsYXlvdXQpOgor
ICAgIHAgPSBmc2xheW91dC5maW5kb25lKCJ0ZXN0XyoucHkiKQorICAgIHJlc3VsdCA9IHB5dGVz
dGVyLnJ1bnB5dGVzdChwKQorICAgIGFzc2VydCByZXN1bHQucmV0ID09IDAKKyAgICBhc3NlcnQg
cmVzdWx0LnBhc3NlZCA9PSAxCisKK0Fub3RoZXIgaWRlYSBpcyB0byBhbGxvdyB0byBkZWZpbmUg
YSBmdWxsIHNjZW5hcmlvIGluY2x1ZGluZyB0aGUgcnVuCitpbiBvbmUgY29udGVudCBzdHJpbmc6
OgorCisgICAgcnVuc2NlbmFyaW8oIiIiCisgICAgICAgIHRlc3Rfe1RFU1ROQU1FfS5weToKKyAg
ICAgICAgICAgIGltcG9ydCBweXRlc3QKKyAgICAgICAgICAgIEBweXRlc3QubWFyay54ZmFpbAor
ICAgICAgICAgICAgZGVmIHRlc3RfdGhhdF9mYWlscygpOgorICAgICAgICAgICAgICAgIGFzc2Vy
dCAwCisKKyAgICAgICAgICAgIEBweXRlc3QubWFyay5za2lwaWYoIlRydWUiKQorICAgICAgICAg
ICAgZGVmIHRlc3RfaGVsbG8oKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY29u
ZnRlc3QucHk6CisgICAgICAgICAgICBpbXBvcnQgcHl0ZXN0CisgICAgICAgICAgICBkZWYgcHl0
ZXN0X3J1bnNldHVwX3NldHVwKGl0ZW0pOgorICAgICAgICAgICAgICAgIHB5dGVzdC5za2lwKCJh
YmMiKQorCisgICAgICAgIHJ1bnB5dGVzdCAtcnN4WAorICAgICAgICAqU0tJUCp7VEVTVE5BTUV9
KgorICAgICAgICAqMSBza2lwcGVkKiAKKyAgICAiIiIpCisKK1RoaXMgY291bGQgYmUgcnVuIHdp
dGggYXQgbGVhc3QgdGhyZWUgZGlmZmVyZW50IHdheXMgdG8gaW52b2tlIHB5dGVzdDoKK3Rocm91
Z2ggdGhlIHNoZWxsLCB0aHJvdWdoICJweXRob24gLW0gcHl0ZXN0IiBhbmQgaW5saW5lZC4gQXMg
aW5saW5lZAord291bGQgYmUgdGhlIGZhc3Rlc3QgaXQgY291bGQgYmUgcnVuIGZpcnN0IChvciAi
LS1mYXN0IiBtb2RlKS4KKworCitDcmVhdGUgaXNvbGF0ZSBwbHVnaW4KKy0tLS0tLS0tLS0tLS0t
LS0tLS0tLQordGFnczogZmVhdHVyZQorCitUaGUgaWRlYSBpcyB0aGF0IHlvdSBjYW4gZS5nLiBp
bXBvcnQgbW9kdWxlcyBpbiBhIHRlc3QgYW5kIGFmdGVyd2FyZHMKK3N5cy5tb2R1bGVzLCBzeXMu
bWV0YV9wYXRoIGV0YyB3b3VsZCBiZSByZXZlcnRlZC4gIEl0IGNhbiBnbyBmdXJ0aGVyCit0aGVu
IGp1c3QgaW1wb3J0aW5nIGhvd2V2ZXIsIGUuZy4gY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSwg
ZmlsZQorZGVzY3JpcHRvcnMsIC4uLgorCitUaGlzIHdvdWxkIHByb2JhYmx5IGJlIGRvbmUgYnkg
bWFya2luZzo6CisKKyAgICBAcHl0ZXN0Lm1hcmsuaXNvbGF0ZShpbXBvcnRpbmc9VHJ1ZSwgY3dk
PVRydWUsIGZkcz1GYWxzZSkKKyAgICBkZWYgdGVzdF9mb28oKToKKyAgICAgICAgLi4uCisKK1dp
dGggdGhlIHBvc3NpYmlsaXR5IG9mIGRvaW5nIHRoaXMgZ2xvYmFsbHkgaW4gYW4gaW5pLWZpbGUu
CisKKworZm5tYXRjaCBmb3IgdGVzdCBuYW1lcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordGFn
czogZmVhdHVyZS13aXNoCisKK3ZhcmlvdXMgdGVzdHN1aXRlcyB1c2Ugc3VmZml4ZXMgaW5zdGVh
ZCBvZiBwcmVmaXhlcyBmb3IgdGVzdCBjbGFzc2VzCithbHNvIGl0IGxlbmRzIGl0c2VsZiB0byBi
ZGQgc3R5bGUgdGVzdCBuYW1lczo6CisKKyAgICBjbGFzcyBVc2VyQmVoYXZpb3VyOgorICAgICAg
ICBkZWYgYW5vbnltb3VzX3Nob3VsZF9ub3RfaGF2ZV9pbmJveCh1c2VyKToKKyAgICAgICAgICAg
IC4uLgorICAgICAgICBkZWYgcmVnaXN0cmVkX3Nob3VsZF9oYXZlX2luYm94KHVzZXIpOgorICAg
ICAgICAgICAgLi4KKwordXNpbmcgdGhlIGZvbGxvd2luZyBpbiBweXRlc3QuaW5pOjoKKworICAg
IFtweXRlc3RdCisgICAgcHl0aG9uX2NsYXNzZXMgPSBUZXN0ICpCZWhhdmlvdXIgKlRlc3QKKyAg
ICBweXRob25fZnVuY3Rpb25zID0gdGVzdCAqX3Nob3VsZF8qCisKKworbWVjaGFuaXNtIGZvciBy
dW5uaW5nIG5hbWVkIHBhcnRzIG9mIHRlc3RzIHdpdGggZGlmZmVyZW50IHJlcG9ydGluZyBiZWhh
dmlvdXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordGFnczogZmVhdHVyZS13aXNoLWluY29tcGxl
dGUKKworYSBmZXcgdXNlLWNhc2VzIGNvbWUgdG8gbWluZDoKKworKiBmYWlsIGFzc2VydGlvbnMg
YW5kIHJlY29yZCB0aGF0IHdpdGhvdXQgc3RvcHBpbmcgYSBjb21wbGV0ZSB0ZXN0CisKKyAgKiB0
aGlzIGlzIGluIHBhcnRpY3VsYXIgaGVwZnVsbCBpZiBhIHNtYWxsIGJpdCBvZiBhIHRlc3QgaXMg
a25vd24gdG8gZmFpbC94ZmFpbDo6CisKKyAgICBkZWYgdGVzdF9mdW4oKToKKyAgICAgICAgd2l0
aCBweXRlc3Quc2VjdGlvbignZmRjaGVjaywgbWFya3M9cHl0ZXN0Lm1hcmsueGZhaWxfaWYoLi4u
KSk6CisgICAgICAgICAgICBicmVha3Nfb25fd2luZG93cygpCisKKyogZGl2aWRlIGZ1bmN0aW9u
YWwvYWNjZXB0YW5jZSB0ZXN0cyBpbnRvIHNlY3Rpb25zCisqIHByb3ZpZGUgYSBkaWZmZXJlbnQg
bWVjaGFuaXNtIGZvciBnZW5lcmF0b3JzLCBtYXliZSBzb21ldGhpbmcgbGlrZTo6CisKKyAgICBk
ZWYgcHl0ZXN0X3J1bnRlc3RfY2FsbChpdGVtKQorICAgICAgICBpZiBub3QgZ2VuZXJhdG9yOgor
ICAgICAgICAgICAgLi4uCisgICAgICAgIHByZXBhcmVfY2hlY2sgPSBHZW5lcmF0b3JDaGVja3By
ZXBhcmUoKQorCisgICAgICAgIGdlbiA9IGl0ZW0ub2JqKCoqZml4dHVyZXMpCisgICAgICAgIGZv
ciBjaGVjayBpbiBnZW4KKyAgICAgICAgICAgIGlkLCBjYWxsID0gcHJlcGFyZV9jaGVjayhjaGVj
aykKKyAgICAgICAgICAgICMgYnViYmxlIHNob3VsZCBvbmx5IHByZXZlbnQgZXhjZXB0aW9uIHBy
b3BhZ2F0aW9uIGFmdGVyIGEgZmFpbHVyZQorICAgICAgICAgICAgIyB0aGUgd2hvbGUgdGVzdCBz
aG91bGQgc3RpbGwgZmFpbAorICAgICAgICAgICAgIyB0aGVyZSBtaWdodCBiZSBuZWVkIGZvciBh
IGxvd2VyIGxldmVsIGFwaSBhbmQgdGFraW5nIGN1c3RvbSBtYXJrZXJzIGludG8gYWNjb3VudAor
ICAgICAgICAgICAgd2l0aCBweXRlc3Quc2VjdGlvbihpZCwgYnViYmxlPUZhbHNlKToKKyAgICAg
ICAgICAgICAgICBjYWxsKCkKKworCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRl
ZC93M2MvdG9vbHMvcHl0ZXN0L0xJQ0VOU0UgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mv
dG9vbHMvcHl0ZXN0L0xJQ0VOU0UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLjllMjdiZDc4NDE5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0
ZWQvdzNjL3Rvb2xzL3B5dGVzdC9MSUNFTlNFCkBAIC0wLDAgKzEsMjEgQEAKK1RoZSBNSVQgTGlj
ZW5zZSAoTUlUKQorCitDb3B5cmlnaHQgKGMpIDIwMDQtMjAxNiBIb2xnZXIgS3Jla2VsIGFuZCBv
dGhlcnMKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRv
IGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZgordGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2Np
YXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4KK3Ro
ZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0
aW9uIHRoZSByaWdodHMgdG8KK3VzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlz
dHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzCitvZiB0aGUgU29mdHdhcmUs
IGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQg
dG8gZG8KK3NvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFi
b3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUg
aW5jbHVkZWQgaW4gYWxsCitjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNv
ZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJS
QU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1Qg
TElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUKK0FVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkg
Q0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04g
T0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCitPVVQgT0YgT1Ig
SU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJ
TkdTIElOIFRIRQorU09GVFdBUkUuCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRl
ZC93M2MvdG9vbHMvcHl0ZXN0L01BTklGRVNULmluIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQv
dzNjL3Rvb2xzL3B5dGVzdC9NQU5JRkVTVC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMC4uMjY2YTkxODRkYzMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0
cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L01BTklGRVNULmluCkBAIC0wLDAgKzEsMzQgQEAK
K2luY2x1ZGUgQ0hBTkdFTE9HLnJzdAoraW5jbHVkZSBMSUNFTlNFCitpbmNsdWRlIEFVVEhPUlMK
KworaW5jbHVkZSBSRUFETUUucnN0CitpbmNsdWRlIENPTlRSSUJVVElORy5yc3QKKworaW5jbHVk
ZSB0b3guaW5pCitpbmNsdWRlIHNldHVwLnB5CisKK2luY2x1ZGUgLmNvdmVyYWdlcmMKKworaW5j
bHVkZSBwbHVnaW4tdGVzdC5zaAoraW5jbHVkZSByZXF1aXJlbWVudHMtZG9jcy50eHQKK2luY2x1
ZGUgcnVudG94LnB5CisKK3JlY3Vyc2l2ZS1pbmNsdWRlIGJlbmNoICoucHkKK3JlY3Vyc2l2ZS1p
bmNsdWRlIGV4dHJhICoucHkKKworZ3JhZnQgdGVzdGluZworZ3JhZnQgZG9jCisKK2V4Y2x1ZGUg
X3B5dGVzdC9pbXBsCisKK2dyYWZ0IF9weXRlc3QvdmVuZG9yZWRfcGFja2FnZXMKKworcmVjdXJz
aXZlLWV4Y2x1ZGUgKiAqLnB5YyAqLnB5bworCitleGNsdWRlIGFwcHZleW9yL2luc3RhbGwucHMx
CitleGNsdWRlIGFwcHZleW9yLnltbAorZXhjbHVkZSBhcHB2ZXlvcgorCitleGNsdWRlIElTU1VF
Uy50eHQKK2V4Y2x1ZGUgSE9XVE9SRUxFQVNFLnJzdApkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVz
dHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9SRUFETUUucnN0IGIvV2ViRHJpdmVyVGVzdHMv
aW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9SRUFETUUucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwLi42OGZjOTIyMTFkOAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRy
aXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvUkVBRE1FLnJzdApAQCAtMCwwICsx
LDEwMiBAQAorLi4gaW1hZ2U6OiBodHRwOi8vcHl0ZXN0Lm9yZy9sYXRlc3QvX3N0YXRpYy9weXRl
c3QxLnBuZworICAgOnRhcmdldDogaHR0cDovL3B5dGVzdC5vcmcKKyAgIDphbGlnbjogY2VudGVy
CisgICA6YWx0OiBweXRlc3QKKworLS0tLS0tCisKKy4uIGltYWdlOjogaHR0cHM6Ly9pbWcuc2hp
ZWxkcy5pby9weXBpL3YvcHl0ZXN0LnN2ZworICAgOnRhcmdldDogaHR0cHM6Ly9weXBpLnB5dGhv
bi5vcmcvcHlwaS9weXRlc3QKKy4uIGltYWdlOjogaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9weXBp
L3B5dmVyc2lvbnMvcHl0ZXN0LnN2ZworICA6dGFyZ2V0OiBodHRwczovL3B5cGkucHl0aG9uLm9y
Zy9weXBpL3B5dGVzdAorLi4gaW1hZ2U6OiBodHRwczovL2ltZy5zaGllbGRzLmlvL2NvdmVyYWxs
cy9weXRlc3QtZGV2L3B5dGVzdC9tYXN0ZXIuc3ZnCisgICA6dGFyZ2V0OiBodHRwczovL2NvdmVy
YWxscy5pby9yL3B5dGVzdC1kZXYvcHl0ZXN0CisuLiBpbWFnZTo6IGh0dHBzOi8vdHJhdmlzLWNp
Lm9yZy9weXRlc3QtZGV2L3B5dGVzdC5zdmc/YnJhbmNoPW1hc3RlcgorICAgIDp0YXJnZXQ6IGh0
dHBzOi8vdHJhdmlzLWNpLm9yZy9weXRlc3QtZGV2L3B5dGVzdAorLi4gaW1hZ2U6OiBodHRwczov
L2NpLmFwcHZleW9yLmNvbS9hcGkvcHJvamVjdHMvc3RhdHVzL21yZ2JqYXVhN3QzM3BnNmI/c3Zn
PXRydWUKKyAgICA6dGFyZ2V0OiBodHRwczovL2NpLmFwcHZleW9yLmNvbS9wcm9qZWN0L3B5dGVz
dGJvdC9weXRlc3QKKworVGhlIGBgcHl0ZXN0YGAgZnJhbWV3b3JrIG1ha2VzIGl0IGVhc3kgdG8g
d3JpdGUgc21hbGwgdGVzdHMsIHlldAorc2NhbGVzIHRvIHN1cHBvcnQgY29tcGxleCBmdW5jdGlv
bmFsIHRlc3RpbmcgZm9yIGFwcGxpY2F0aW9ucyBhbmQgbGlicmFyaWVzLiAgICAKKworQW4gZXhh
bXBsZSBvZiBhIHNpbXBsZSB0ZXN0OgorCisuLiBjb2RlLWJsb2NrOjogcHl0aG9uCisKKyAgICAj
IGNvbnRlbnQgb2YgdGVzdF9zYW1wbGUucHkKKyAgICBkZWYgZnVuYyh4KToKKyAgICAgICAgcmV0
dXJuIHggKyAxCisKKyAgICBkZWYgdGVzdF9hbnN3ZXIoKToKKyAgICAgICAgYXNzZXJ0IGZ1bmMo
MykgPT0gNQorCisKK1RvIGV4ZWN1dGUgaXQ6OgorCisgICAgJCBweS50ZXN0CisgICAgPT09PT09
PSB0ZXN0IHNlc3Npb24gc3RhcnRzID09PT09PT09CisgICAgcGxhdGZvcm0gbGludXggLS0gUHl0
aG9uIDMuNC4zLCBweXRlc3QtMi44LjUsIHB5LTEuNC4zMSwgcGx1Z2d5LTAuMy4xICAgIAorICAg
IGNvbGxlY3RlZCAxIGl0ZW1zCisKKyAgICB0ZXN0X3NhbXBsZS5weSBGCisKKyAgICA9PT09PT09
IEZBSUxVUkVTID09PT09PT09CisgICAgX19fX19fXyB0ZXN0X2Fuc3dlciBfX19fX19fXworCisg
ICAgICAgIGRlZiB0ZXN0X2Fuc3dlcigpOgorICAgID4gICAgICAgYXNzZXJ0IGZ1bmMoMykgPT0g
NQorICAgIEUgICAgICAgYXNzZXJ0IDQgPT0gNQorICAgIEUgICAgICAgICsgIHdoZXJlIDQgPSBm
dW5jKDMpCisKKyAgICB0ZXN0X3NhbXBsZS5weTo1OiBBc3NlcnRpb25FcnJvcgorICAgID09PT09
PT0gMSBmYWlsZWQgaW4gMC4xMiBzZWNvbmRzID09PT09PT09CisKK0R1ZSB0byBgYHB5LnRlc3Rg
YCdzIGRldGFpbGVkIGFzc2VydGlvbiBpbnRyb3NwZWN0aW9uLCBvbmx5IHBsYWluIGBgYXNzZXJ0
YGAgc3RhdGVtZW50cyBhcmUgdXNlZC4gU2VlIGBnZXR0aW5nLXN0YXJ0ZWQgPGh0dHA6Ly9weXRl
c3Qub3JnL2xhdGVzdC9nZXR0aW5nLXN0YXJ0ZWQuaHRtbCNvdXItZmlyc3QtdGVzdC1ydW4+YF8g
Zm9yIG1vcmUgZXhhbXBsZXMuCisgICAgICAgIAorCitGZWF0dXJlcworLS0tLS0tLS0KKworLSBE
ZXRhaWxlZCBpbmZvIG9uIGZhaWxpbmcgYGFzc2VydCBzdGF0ZW1lbnRzIDxodHRwOi8vcHl0ZXN0
Lm9yZy9sYXRlc3QvYXNzZXJ0Lmh0bWw+YF8gKG5vIG5lZWQgdG8gcmVtZW1iZXIgYGBzZWxmLmFz
c2VydCpgYCBuYW1lcyk7CisKKy0gYEF1dG8tZGlzY292ZXJ5CisgIDxodHRwOi8vcHl0ZXN0Lm9y
Zy9sYXRlc3QvZ29vZHByYWN0aWNlcy5odG1sI3B5dGhvbi10ZXN0LWRpc2NvdmVyeT5gXworICBv
ZiB0ZXN0IG1vZHVsZXMgYW5kIGZ1bmN0aW9uczsKKworLSBgTW9kdWxhciBmaXh0dXJlcyA8aHR0
cDovL3B5dGVzdC5vcmcvbGF0ZXN0L2ZpeHR1cmUuaHRtbD5gXyAgZm9yCisgIG1hbmFnaW5nIHNt
YWxsIG9yIHBhcmFtZXRyaXplZCBsb25nLWxpdmVkIHRlc3QgcmVzb3VyY2VzOworCistIENhbiBy
dW4gYHVuaXR0ZXN0IDxodHRwOi8vcHl0ZXN0Lm9yZy9sYXRlc3QvdW5pdHRlc3QuaHRtbD5gXyAo
b3IgdHJpYWwpLAorICBgbm9zZSA8aHR0cDovL3B5dGVzdC5vcmcvbGF0ZXN0L25vc2UuaHRtbD5g
XyB0ZXN0IHN1aXRlcyBvdXQgb2YgdGhlIGJveDsKKworLSBQeXRob24yLjYrLCBQeXRob24zLjIr
LCBQeVB5LTIuMywgSnl0aG9uLTIuNSAodW50ZXN0ZWQpOworCistIFJpY2ggcGx1Z2luIGFyY2hp
dGVjdHVyZSwgd2l0aCBvdmVyIDE1MCsgYGV4dGVybmFsIHBsdWdpbnMgPGh0dHA6Ly9weXRlc3Qu
b3JnL2xhdGVzdC9wbHVnaW5zLmh0bWwjaW5zdGFsbGluZy1leHRlcm5hbC1wbHVnaW5zLXNlYXJj
aGluZz5gXyBhbmQgdGhyaXZpbmcgY29tbXVuaXR5OworCisKK0RvY3VtZW50YXRpb24KKy0tLS0t
LS0tLS0tLS0KKworRm9yIGZ1bGwgZG9jdW1lbnRhdGlvbiwgaW5jbHVkaW5nIGluc3RhbGxhdGlv
biwgdHV0b3JpYWxzIGFuZCBQREYgZG9jdW1lbnRzLCBwbGVhc2Ugc2VlIGh0dHA6Ly9weXRlc3Qu
b3JnLgorCisKK0J1Z3MvUmVxdWVzdHMKKy0tLS0tLS0tLS0tLS0KKworUGxlYXNlIHVzZSB0aGUg
YEdpdEh1YiBpc3N1ZSB0cmFja2VyIDxodHRwczovL2dpdGh1Yi5jb20vcHl0ZXN0LWRldi9weXRl
c3QvaXNzdWVzPmBfIHRvIHN1Ym1pdCBidWdzIG9yIHJlcXVlc3QgZmVhdHVyZXMuCisKKworQ2hh
bmdlbG9nCistLS0tLS0tLS0KKworQ29uc3VsdCB0aGUgYENoYW5nZWxvZyA8aHR0cDovL3B5dGVz
dC5vcmcvbGF0ZXN0L2NoYW5nZWxvZy5odG1sPmBfIHBhZ2UgZm9yIGZpeGVzIGFuZCBlbmhhbmNl
bWVudHMgb2YgZWFjaCB2ZXJzaW9uLgorCisKK0xpY2Vuc2UKKy0tLS0tLS0KKworQ29weXJpZ2h0
IEhvbGdlciBLcmVrZWwgYW5kIG90aGVycywgMjAwNC0yMDE2LgorCitEaXN0cmlidXRlZCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIGBNSVRgXyBsaWNlbnNlLCBweXRlc3QgaXMgZnJlZSBhbmQgb3Bl
biBzb3VyY2Ugc29mdHdhcmUuCisKKy4uIF9gTUlUYDogaHR0cHM6Ly9naXRodWIuY29tL3B5dGVz
dC1kZXYvcHl0ZXN0L2Jsb2IvbWFzdGVyL0xJQ0VOU0UKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRl
c3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9fX2luaXRfXy5weSBiL1dlYkRy
aXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9fX2luaXRfXy5weQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNzIzZmI5ZTg1NWEKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19w
eXRlc3QvX19pbml0X18ucHkKQEAgLTAsMCArMSwyIEBACisjCitfX3ZlcnNpb25fXyA9ICcyLjku
MScKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3Qv
X3B5dGVzdC9fYXJnY29tcGxldGUucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9v
bHMvcHl0ZXN0L19weXRlc3QvX2FyZ2NvbXBsZXRlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi45NTU4NTVhOTY0OAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZl
clRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9fYXJnY29tcGxldGUucHkK
QEAgLTAsMCArMSwxMDEgQEAKKworIiIiYWxsb3cgYmFzaC1jb21wbGV0aW9uIGZvciBhcmdwYXJz
ZSB3aXRoIGFyZ2NvbXBsZXRlIGlmIGluc3RhbGxlZAorbmVlZHMgYXJnY29tcGxldGU+PTAuNS42
IGZvciBweXRob24gMy4yLzMuMyAob2xkZXIgdmVyc2lvbnMgZmFpbAordG8gZmluZCB0aGUgbWFn
aWMgc3RyaW5nLCBzbyBfQVJHQ09NUExFVEUgZW52LiB2YXIgaXMgbmV2ZXIgc2V0LCBhbmQKK3Ro
aXMgZG9lcyBub3QgbmVlZCBzcGVjaWFsIGNvZGUuCisKK2FyZ2NvbXBsZXRlIGRvZXMgbm90IHN1
cHBvcnQgcHl0aG9uIDIuNSAoYWx0aG91Z2ggdGhlIGNoYW5nZXMgZm9yIHRoYXQKK2FyZSBtaW5v
cikuCisKK0Z1bmN0aW9uIHRyeV9hcmdjb21wbGV0ZShwYXJzZXIpIHNob3VsZCBiZSBjYWxsZWQg
ZGlyZWN0bHkgYmVmb3JlCit0aGUgY2FsbCB0byBBcmd1bWVudFBhcnNlci5wYXJzZV9hcmdzKCku
CisKK1RoZSBmaWxlc2NvbXBsZXRlciBpcyB3aGF0IHlvdSBub3JtYWxseSB3b3VsZCB1c2Ugb24g
dGhlIHBvc2l0aW9uYWwKK2FyZ3VtZW50cyBzcGVjaWZpY2F0aW9uLCBpbiBvcmRlciB0byBnZXQg
ImRpcm5hbWUvIiBhZnRlciAiZGlybjxUQUI+IgoraW5zdGVhZCBvZiB0aGUgZGVmYXVsdCAiZGly
bmFtZSAiOgorCisgICBvcHRwYXJzZXIuYWRkX2FyZ3VtZW50KENvbmZpZy5fZmlsZV9vcl9kaXIs
IG5hcmdzPScqJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkuY29tcGxldGVyPWZp
bGVzY29tcGxldGVyCisKK090aGVyLCBhcHBsaWNhdGlvbiBzcGVjaWZpYywgY29tcGxldGVycyBz
aG91bGQgZ28gaW4gdGhlIGZpbGUKK2RvaW5nIHRoZSBhZGRfYXJndW1lbnQgY2FsbHMgYXMgdGhl
eSBuZWVkIHRvIGJlIHNwZWNpZmllZCBhcyAuY29tcGxldGVyCithdHRyaWJ1dGVzIGFzIHdlbGwu
IChJZiBhcmdjb21wbGV0ZSBpcyBub3QgaW5zdGFsbGVkLCB0aGUgZnVuY3Rpb24gdGhlCithdHRy
aWJ1dGUgcG9pbnRzIHRvIHdpbGwgbm90IGJlIHVzZWQpLgorCitTUEVFRFVQCis9PT09PT09CitU
aGUgZ2VuZXJpYyBhcmdjb21wbGV0ZSBzY3JpcHQgZm9yIGJhc2gtY29tcGxldGlvbgorKC9ldGMv
YmFzaF9jb21wbGV0aW9uLmQvcHl0aG9uLWFyZ2NvbXBsZXRlLnNoICkKK3VzZXMgYSBweXRob24g
cHJvZ3JhbSB0byBkZXRlcm1pbmUgc3RhcnR1cCBzY3JpcHQgZ2VuZXJhdGVkIGJ5IHBpcC4KK1lv
dSBjYW4gc3BlZWQgdXAgY29tcGxldGlvbiBzb21ld2hhdCBieSBjaGFuZ2luZyB0aGlzIHNjcmlw
dCB0byBpbmNsdWRlCisgICMgUFlUSE9OX0FSR0NPTVBMRVRFX09LCitzbyB0aGUgdGhlIHB5dGhv
bi1hcmdjb21wbGV0ZS1jaGVjay1lYXN5LWluc3RhbGwtc2NyaXB0IGRvZXMgbm90CituZWVkIHRv
IGJlIGNhbGxlZCB0byBmaW5kIHRoZSBlbnRyeSBwb2ludCBvZiB0aGUgY29kZSBhbmQgc2VlIGlm
IHRoYXQgaXMKK21hcmtlZCAgd2l0aCBQWVRIT05fQVJHQ09NUExFVEVfT0sKKworSU5TVEFMTC9E
RUJVR0dJTkcKKz09PT09PT09PT09PT09PT09CitUbyBpbmNsdWRlIHRoaXMgc3VwcG9ydCBpbiBh
bm90aGVyIGFwcGxpY2F0aW9uIHRoYXQgaGFzIHNldHVwLnB5IGdlbmVyYXRlZAorc2NyaXB0czoK
Ky0gYWRkIHRoZSBsaW5lOgorICAgICMgUFlUSE9OX0FSR0NPTVBMRVRFX09LCisgIG5lYXIgdGhl
IHRvcCBvZiB0aGUgbWFpbiBweXRob24gZW50cnkgcG9pbnQKKy0gaW5jbHVkZSBpbiB0aGUgZmls
ZSBjYWxsaW5nIHBhcnNlX2FyZ3MoKToKKyAgICBmcm9tIF9hcmdjb21wbGV0ZSBpbXBvcnQgdHJ5
X2FyZ2NvbXBsZXRlLCBmaWxlc2NvbXBsZXRlcgorICAgLCBjYWxsIHRyeV9hcmdjb21wbGV0ZSBq
dXN0IGJlZm9yZSBwYXJzZV9hcmdzKCksIGFuZCBvcHRpb25hbGx5IGFkZAorICAgZmlsZXNjb21w
bGV0ZXIgdG8gdGhlIHBvc2l0aW9uYWwgYXJndW1lbnRzJyBhZGRfYXJndW1lbnQoKQorSWYgdGhp
bmdzIGRvIG5vdCB3b3JrIHJpZ2h0IGF3YXk6CistIHN3aXRjaCBvbiBhcmdjb21wbGV0ZSBkZWJ1
Z2dpbmcgd2l0aCAoYWxzbyBoZWxwZnVsIHdoZW4gZG9pbmcgY3VzdG9tCisgIGNvbXBsZXRlcnMp
OgorICAgIGV4cG9ydCBfQVJDX0RFQlVHPTEKKy0gcnVuOgorICAgIHB5dGhvbi1hcmdjb21wbGV0
ZS1jaGVjay1lYXN5LWluc3RhbGwtc2NyaXB0ICQod2hpY2ggYXBwbmFtZSkKKyAgICBlY2hvICQ/
CisgIHdpbGwgZWNobyAwIGlmIHRoZSBtYWdpYyBsaW5lIGhhcyBiZWVuIGZvdW5kLCAxIGlmIG5v
dAorLSBzb21ldGltZXMgaXQgaGVscHMgdG8gZmluZCBlYXJseSBvbiBlcnJvcnMgdXNpbmc6Cisg
ICAgX0FSR0NPTVBMRVRFPTEgX0FSQ19ERUJVRz0xIGFwcG5hbWUKKyAgd2hpY2ggc2hvdWxkIHRo
cm93IGEgS2V5RXJyb3I6ICdDT01QTElORScgKHdoaWNoIGlzIHByb3Blcmx5IHNldCBieSB0aGUK
KyAgZ2xvYmFsIGFyZ2NvbXBsZXRlIHNjcmlwdCkuCisiIiIKKworaW1wb3J0IHN5cworaW1wb3J0
IG9zCitmcm9tIGdsb2IgaW1wb3J0IGdsb2IKKworY2xhc3MgRmFzdEZpbGVzQ29tcGxldGVyOgor
ICAgICdGYXN0IGZpbGUgY29tcGxldGVyIGNsYXNzJworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBk
aXJlY3Rvcmllcz1UcnVlKToKKyAgICAgICAgc2VsZi5kaXJlY3RvcmllcyA9IGRpcmVjdG9yaWVz
CisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgcHJlZml4LCAqKmt3YXJncyk6CisgICAgICAgICIi
Im9ubHkgY2FsbGVkIG9uIG5vbiBvcHRpb24gY29tcGxldGlvbnMiIiIKKyAgICAgICAgaWYgb3Mu
cGF0aC5zZXAgaW4gcHJlZml4WzE6XTogIworICAgICAgICAgICAgcHJlZml4X2RpciA9IGxlbihv
cy5wYXRoLmRpcm5hbWUocHJlZml4KSArIG9zLnBhdGguc2VwKQorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgcHJlZml4X2RpciA9IDAKKyAgICAgICAgY29tcGxldGlvbiA9IFtdCisgICAgICAg
IGdsb2JiZWQgPSBbXQorICAgICAgICBpZiAnKicgbm90IGluIHByZWZpeCBhbmQgJz8nIG5vdCBp
biBwcmVmaXg6CisgICAgICAgICAgICBpZiBwcmVmaXhbLTFdID09IG9zLnBhdGguc2VwOiAgIyB3
ZSBhcmUgb24gdW5peCwgb3RoZXJ3aXNlIG5vIGJhc2gKKyAgICAgICAgICAgICAgICBnbG9iYmVk
LmV4dGVuZChnbG9iKHByZWZpeCArICcuKicpKQorICAgICAgICAgICAgcHJlZml4ICs9ICcqJwor
ICAgICAgICBnbG9iYmVkLmV4dGVuZChnbG9iKHByZWZpeCkpCisgICAgICAgIGZvciB4IGluIHNv
cnRlZChnbG9iYmVkKToKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoeCk6CisgICAgICAg
ICAgICAgICAgeCArPSAnLycKKyAgICAgICAgICAgICMgYXBwZW5kIHN0cmlwcGluZyB0aGUgcHJl
Zml4IChsaWtlIGJhc2gsIG5vdCBsaWtlIGNvbXBnZW4pCisgICAgICAgICAgICBjb21wbGV0aW9u
LmFwcGVuZCh4W3ByZWZpeF9kaXI6XSkKKyAgICAgICAgcmV0dXJuIGNvbXBsZXRpb24KKworaWYg
b3MuZW52aXJvbi5nZXQoJ19BUkdDT01QTEVURScpOgorICAgIHRyeToKKyAgICAgICAgaW1wb3J0
IGFyZ2NvbXBsZXRlLmNvbXBsZXRlcnMKKyAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAg
IHN5cy5leGl0KC0xKQorICAgIGZpbGVzY29tcGxldGVyID0gRmFzdEZpbGVzQ29tcGxldGVyKCkK
KworICAgIGRlZiB0cnlfYXJnY29tcGxldGUocGFyc2VyKToKKyAgICAgICAgYXJnY29tcGxldGUu
YXV0b2NvbXBsZXRlKHBhcnNlcikKK2Vsc2U6CisgICAgZGVmIHRyeV9hcmdjb21wbGV0ZShwYXJz
ZXIpOiBwYXNzCisgICAgZmlsZXNjb21wbGV0ZXIgPSBOb25lCmRpZmYgLS1naXQgYS9XZWJEcml2
ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvX2NvZGUvX19pbml0X18u
cHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvX2Nv
ZGUvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmMw
NDZiOTcxNmNhCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNj
L3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L19jb2RlL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMTIgQEAK
KyIiIiBweXRob24gaW5zcGVjdGlvbi9jb2RlIGdlbmVyYXRpb24gQVBJICIiIgorZnJvbSAuY29k
ZSBpbXBvcnQgQ29kZSAgIyBub3FhCitmcm9tIC5jb2RlIGltcG9ydCBFeGNlcHRpb25JbmZvICAj
IG5vcWEKK2Zyb20gLmNvZGUgaW1wb3J0IEZyYW1lICAjIG5vcWEKK2Zyb20gLmNvZGUgaW1wb3J0
IFRyYWNlYmFjayAgIyBub3FhCitmcm9tIC5jb2RlIGltcG9ydCBnZXRyYXdjb2RlICAjIG5vcWEK
K2Zyb20gLmNvZGUgaW1wb3J0IHBhdGNoX2J1aWx0aW5zICAjIG5vcWEKK2Zyb20gLmNvZGUgaW1w
b3J0IHVucGF0Y2hfYnVpbHRpbnMgICMgbm9xYQorZnJvbSAuc291cmNlIGltcG9ydCBTb3VyY2Ug
ICMgbm9xYQorZnJvbSAuc291cmNlIGltcG9ydCBjb21waWxlXyBhcyBjb21waWxlICAjIG5vcWEK
K2Zyb20gLnNvdXJjZSBpbXBvcnQgZ2V0ZnNsaW5lbm8gICMgbm9xYQorCmRpZmYgLS1naXQgYS9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvX2NvZGUvX3B5
MnRyYWNlYmFjay5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3Qv
X3B5dGVzdC9fY29kZS9fcHkydHJhY2ViYWNrLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi5hODMwZDk4OTlhZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRl
c3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9fY29kZS9fcHkydHJhY2ViYWNr
LnB5CkBAIC0wLDAgKzEsODEgQEAKKyMgY29waWVkIGZyb20gcHl0aG9uLTIuNy4zJ3MgdHJhY2Vi
YWNrLnB5CisjIENIQU5HRVM6CisjIC0gc29tZV9zdHIgaXMgcmVwbGFjZWQsIHRyeWluZyB0byBj
cmVhdGUgdW5pY29kZSBzdHJpbmdzCisjCitpbXBvcnQgdHlwZXMKKworZGVmIGZvcm1hdF9leGNl
cHRpb25fb25seShldHlwZSwgdmFsdWUpOgorICAgICIiIkZvcm1hdCB0aGUgZXhjZXB0aW9uIHBh
cnQgb2YgYSB0cmFjZWJhY2suCisKKyAgICBUaGUgYXJndW1lbnRzIGFyZSB0aGUgZXhjZXB0aW9u
IHR5cGUgYW5kIHZhbHVlIHN1Y2ggYXMgZ2l2ZW4gYnkKKyAgICBzeXMubGFzdF90eXBlIGFuZCBz
eXMubGFzdF92YWx1ZS4gVGhlIHJldHVybiB2YWx1ZSBpcyBhIGxpc3Qgb2YKKyAgICBzdHJpbmdz
LCBlYWNoIGVuZGluZyBpbiBhIG5ld2xpbmUuCisKKyAgICBOb3JtYWxseSwgdGhlIGxpc3QgY29u
dGFpbnMgYSBzaW5nbGUgc3RyaW5nOyBob3dldmVyLCBmb3IKKyAgICBTeW50YXhFcnJvciBleGNl
cHRpb25zLCBpdCBjb250YWlucyBzZXZlcmFsIGxpbmVzIHRoYXQgKHdoZW4KKyAgICBwcmludGVk
KSBkaXNwbGF5IGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IHdoZXJlIHRoZSBzeW50YXgKKyAg
ICBlcnJvciBvY2N1cnJlZC4KKworICAgIFRoZSBtZXNzYWdlIGluZGljYXRpbmcgd2hpY2ggZXhj
ZXB0aW9uIG9jY3VycmVkIGlzIGFsd2F5cyB0aGUgbGFzdAorICAgIHN0cmluZyBpbiB0aGUgbGlz
dC4KKworICAgICIiIgorCisgICAgIyBBbiBpbnN0YW5jZSBzaG91bGQgbm90IGhhdmUgYSBtZWFu
aW5nZnVsIHZhbHVlIHBhcmFtZXRlciwgYnV0CisgICAgIyBzb21ldGltZXMgZG9lcywgcGFydGlj
dWxhcmx5IGZvciBzdHJpbmcgZXhjZXB0aW9ucywgc3VjaCBhcworICAgICMgPj4+IHJhaXNlIHN0
cmluZzEsIHN0cmluZzIgICMgZGVwcmVjYXRlZAorICAgICMKKyAgICAjIENsZWFyIHRoZXNlIG91
dCBmaXJzdCBiZWNhdXNlIGlzc3VidHlwZShzdHJpbmcxLCBTeW50YXhFcnJvcikKKyAgICAjIHdv
dWxkIHRocm93IGFub3RoZXIgZXhjZXB0aW9uIGFuZCBtYXNrIHRoZSBvcmlnaW5hbCBwcm9ibGVt
LgorICAgIGlmIChpc2luc3RhbmNlKGV0eXBlLCBCYXNlRXhjZXB0aW9uKSBvcgorICAgICAgICBp
c2luc3RhbmNlKGV0eXBlLCB0eXBlcy5JbnN0YW5jZVR5cGUpIG9yCisgICAgICAgIGV0eXBlIGlz
IE5vbmUgb3IgdHlwZShldHlwZSkgaXMgc3RyKToKKyAgICAgICAgcmV0dXJuIFtfZm9ybWF0X2Zp
bmFsX2V4Y19saW5lKGV0eXBlLCB2YWx1ZSldCisKKyAgICBzdHlwZSA9IGV0eXBlLl9fbmFtZV9f
CisKKyAgICBpZiBub3QgaXNzdWJjbGFzcyhldHlwZSwgU3ludGF4RXJyb3IpOgorICAgICAgICBy
ZXR1cm4gW19mb3JtYXRfZmluYWxfZXhjX2xpbmUoc3R5cGUsIHZhbHVlKV0KKworICAgICMgSXQg
d2FzIGEgc3ludGF4IGVycm9yOyBzaG93IGV4YWN0bHkgd2hlcmUgdGhlIHByb2JsZW0gd2FzIGZv
dW5kLgorICAgIGxpbmVzID0gW10KKyAgICB0cnk6CisgICAgICAgIG1zZywgKGZpbGVuYW1lLCBs
aW5lbm8sIG9mZnNldCwgYmFkbGluZSkgPSB2YWx1ZS5hcmdzCisgICAgZXhjZXB0IEV4Y2VwdGlv
bjoKKyAgICAgICAgcGFzcworICAgIGVsc2U6CisgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWUg
b3IgIjxzdHJpbmc+IgorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgRmlsZSAiJXMiLCBsaW5lICVk
XG4nICUgKGZpbGVuYW1lLCBsaW5lbm8pKQorICAgICAgICBpZiBiYWRsaW5lIGlzIG5vdCBOb25l
OgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShiYWRsaW5lLCBieXRlcyk6ICAjIHB5dGhvbiAy
IG9ubHkKKyAgICAgICAgICAgICAgICBiYWRsaW5lID0gYmFkbGluZS5kZWNvZGUoJ3V0Zi04Jywg
J3JlcGxhY2UnKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKHUnICAgICVzXG4nICUgYmFkbGlu
ZS5zdHJpcCgpKQorICAgICAgICAgICAgaWYgb2Zmc2V0IGlzIG5vdCBOb25lOgorICAgICAgICAg
ICAgICAgIGNhcmV0c3BhY2UgPSBiYWRsaW5lLnJzdHJpcCgnXG4nKVs6b2Zmc2V0XS5sc3RyaXAo
KQorICAgICAgICAgICAgICAgICMgbm9uLXNwYWNlIHdoaXRlc3BhY2UgKGxpa2VzIHRhYnMpIG11
c3QgYmUga2VwdCBmb3IgYWxpZ25tZW50CisgICAgICAgICAgICAgICAgY2FyZXRzcGFjZSA9ICgo
Yy5pc3NwYWNlKCkgYW5kIGMgb3IgJyAnKSBmb3IgYyBpbiBjYXJldHNwYWNlKQorICAgICAgICAg
ICAgICAgICMgb25seSB0aHJlZSBzcGFjZXMgdG8gYWNjb3VudCBmb3Igb2Zmc2V0MSA9PSBwb3Mg
MAorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgJXNeXG4nICUgJycuam9pbihjYXJl
dHNwYWNlKSkKKyAgICAgICAgdmFsdWUgPSBtc2cKKworICAgIGxpbmVzLmFwcGVuZChfZm9ybWF0
X2ZpbmFsX2V4Y19saW5lKHN0eXBlLCB2YWx1ZSkpCisgICAgcmV0dXJuIGxpbmVzCisKK2RlZiBf
Zm9ybWF0X2ZpbmFsX2V4Y19saW5lKGV0eXBlLCB2YWx1ZSk6CisgICAgIiIiUmV0dXJuIGEgbGlz
dCBvZiBhIHNpbmdsZSBsaW5lIC0tIG5vcm1hbCBjYXNlIGZvciBmb3JtYXRfZXhjZXB0aW9uX29u
bHkiIiIKKyAgICB2YWx1ZXN0ciA9IF9zb21lX3N0cih2YWx1ZSkKKyAgICBpZiB2YWx1ZSBpcyBO
b25lIG9yIG5vdCB2YWx1ZXN0cjoKKyAgICAgICAgbGluZSA9ICIlc1xuIiAlIGV0eXBlCisgICAg
ZWxzZToKKyAgICAgICAgbGluZSA9ICIlczogJXNcbiIgJSAoZXR5cGUsIHZhbHVlc3RyKQorICAg
IHJldHVybiBsaW5lCisKK2RlZiBfc29tZV9zdHIodmFsdWUpOgorICAgIHRyeToKKyAgICAgICAg
cmV0dXJuIHVuaWNvZGUodmFsdWUpCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgdHJ5
OgorICAgICAgICAgICAgcmV0dXJuIHN0cih2YWx1ZSkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlv
bjoKKyAgICAgICAgICAgIHBhc3MKKyAgICByZXR1cm4gJzx1bnByaW50YWJsZSAlcyBvYmplY3Q+
JyAlIHR5cGUodmFsdWUpLl9fbmFtZV9fCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBv
cnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvX2NvZGUvY29kZS5weSBiL1dlYkRyaXZlclRl
c3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9fY29kZS9jb2RlLnB5Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iYzY4YWFjNTU0OAotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVz
dC9fY29kZS9jb2RlLnB5CkBAIC0wLDAgKzEsNzk1IEBACitpbXBvcnQgc3lzCitmcm9tIGluc3Bl
Y3QgaW1wb3J0IENPX1ZBUkFSR1MsIENPX1ZBUktFWVdPUkRTCisKK2ltcG9ydCBweQorCitidWls
dGluX3JlcHIgPSByZXByCisKK3JlcHJsaWIgPSBweS5idWlsdGluLl90cnlpbXBvcnQoJ3JlcHIn
LCAncmVwcmxpYicpCisKK2lmIHN5cy52ZXJzaW9uX2luZm9bMF0gPj0gMzoKKyAgICBmcm9tIHRy
YWNlYmFjayBpbXBvcnQgZm9ybWF0X2V4Y2VwdGlvbl9vbmx5CitlbHNlOgorICAgIGZyb20gLl9w
eTJ0cmFjZWJhY2sgaW1wb3J0IGZvcm1hdF9leGNlcHRpb25fb25seQorCitjbGFzcyBDb2RlKG9i
amVjdCk6CisgICAgIiIiIHdyYXBwZXIgYXJvdW5kIFB5dGhvbiBjb2RlIG9iamVjdHMgIiIiCisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIHJhd2NvZGUpOgorICAgICAgICBpZiBub3QgaGFzYXR0cihy
YXdjb2RlLCAiY29fZmlsZW5hbWUiKToKKyAgICAgICAgICAgIHJhd2NvZGUgPSBnZXRyYXdjb2Rl
KHJhd2NvZGUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuZmlsZW5hbWUgPSByYXdj
b2RlLmNvX2ZpbGVuYW1lCisgICAgICAgICAgICBzZWxmLmZpcnN0bGluZW5vID0gcmF3Y29kZS5j
b19maXJzdGxpbmVubyAtIDEKKyAgICAgICAgICAgIHNlbGYubmFtZSA9IHJhd2NvZGUuY29fbmFt
ZQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICByYWlzZSBUeXBl
RXJyb3IoIm5vdCBhIGNvZGUgb2JqZWN0OiAlciIgJShyYXdjb2RlLCkpCisgICAgICAgIHNlbGYu
cmF3ID0gcmF3Y29kZQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJl
dHVybiBzZWxmLnJhdyA9PSBvdGhlci5yYXcKKworICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIp
OgorICAgICAgICByZXR1cm4gbm90IHNlbGYgPT0gb3RoZXIKKworICAgIEBwcm9wZXJ0eQorICAg
IGRlZiBwYXRoKHNlbGYpOgorICAgICAgICAiIiIgcmV0dXJuIGEgcGF0aCBvYmplY3QgcG9pbnRp
bmcgdG8gc291cmNlIGNvZGUgKG5vdGUgdGhhdCBpdAorICAgICAgICBtaWdodCBub3QgcG9pbnQg
dG8gYW4gYWN0dWFsbHkgZXhpc3RpbmcgZmlsZSkuICIiIgorICAgICAgICBwID0gcHkucGF0aC5s
b2NhbChzZWxmLnJhdy5jb19maWxlbmFtZSkKKyAgICAgICAgIyBtYXliZSBkb24ndCB0cnkgdGhp
cyBjaGVja2luZworICAgICAgICBpZiBub3QgcC5jaGVjaygpOgorICAgICAgICAgICAgIyBYWFgg
bWF5YmUgdHJ5IGhhcmRlciBsaWtlIHRoZSB3ZWlyZCBsb2dpYworICAgICAgICAgICAgIyBpbiB0
aGUgc3RhbmRhcmQgbGliIFtsaW5lY2FjaGUudXBkYXRlY2FjaGVdIGRvZXM/CisgICAgICAgICAg
ICBwID0gc2VsZi5yYXcuY29fZmlsZW5hbWUKKyAgICAgICAgcmV0dXJuIHAKKworICAgIEBwcm9w
ZXJ0eQorICAgIGRlZiBmdWxsc291cmNlKHNlbGYpOgorICAgICAgICAiIiIgcmV0dXJuIGEgX3B5
dGVzdC5fY29kZS5Tb3VyY2Ugb2JqZWN0IGZvciB0aGUgZnVsbCBzb3VyY2UgZmlsZSBvZiB0aGUg
Y29kZQorICAgICAgICAiIiIKKyAgICAgICAgZnJvbSBfcHl0ZXN0Ll9jb2RlIGltcG9ydCBzb3Vy
Y2UKKyAgICAgICAgZnVsbCwgXyA9IHNvdXJjZS5maW5kc291cmNlKHNlbGYucmF3KQorICAgICAg
ICByZXR1cm4gZnVsbAorCisgICAgZGVmIHNvdXJjZShzZWxmKToKKyAgICAgICAgIiIiIHJldHVy
biBhIF9weXRlc3QuX2NvZGUuU291cmNlIG9iamVjdCBmb3IgdGhlIGNvZGUgb2JqZWN0J3Mgc291
cmNlIG9ubHkKKyAgICAgICAgIiIiCisgICAgICAgICMgcmV0dXJuIHNvdXJjZSBvbmx5IGZvciB0
aGF0IHBhcnQgb2YgY29kZQorICAgICAgICBpbXBvcnQgX3B5dGVzdC5fY29kZQorICAgICAgICBy
ZXR1cm4gX3B5dGVzdC5fY29kZS5Tb3VyY2Uoc2VsZi5yYXcpCisKKyAgICBkZWYgZ2V0YXJncyhz
ZWxmLCB2YXI9RmFsc2UpOgorICAgICAgICAiIiIgcmV0dXJuIGEgdHVwbGUgd2l0aCB0aGUgYXJn
dW1lbnQgbmFtZXMgZm9yIHRoZSBjb2RlIG9iamVjdAorCisgICAgICAgICAgICBpZiAndmFyJyBp
cyBzZXQgVHJ1ZSBhbHNvIHJldHVybiB0aGUgbmFtZXMgb2YgdGhlIHZhcmlhYmxlIGFuZAorICAg
ICAgICAgICAga2V5d29yZCBhcmd1bWVudHMgd2hlbiBwcmVzZW50CisgICAgICAgICIiIgorICAg
ICAgICAjIGhhbmRmdWxsIHNob3J0Y3V0IGZvciBnZXR0aW5nIGFyZ3MKKyAgICAgICAgcmF3ID0g
c2VsZi5yYXcKKyAgICAgICAgYXJnY291bnQgPSByYXcuY29fYXJnY291bnQKKyAgICAgICAgaWYg
dmFyOgorICAgICAgICAgICAgYXJnY291bnQgKz0gcmF3LmNvX2ZsYWdzICYgQ09fVkFSQVJHUwor
ICAgICAgICAgICAgYXJnY291bnQgKz0gcmF3LmNvX2ZsYWdzICYgQ09fVkFSS0VZV09SRFMKKyAg
ICAgICAgcmV0dXJuIHJhdy5jb192YXJuYW1lc1s6YXJnY291bnRdCisKK2NsYXNzIEZyYW1lKG9i
amVjdCk6CisgICAgIiIiV3JhcHBlciBhcm91bmQgYSBQeXRob24gZnJhbWUgaG9sZGluZyBmX2xv
Y2FscyBhbmQgZl9nbG9iYWxzCisgICAgaW4gd2hpY2ggZXhwcmVzc2lvbnMgY2FuIGJlIGV2YWx1
YXRlZC4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmcmFtZSk6CisgICAgICAgIHNlbGYu
bGluZW5vID0gZnJhbWUuZl9saW5lbm8gLSAxCisgICAgICAgIHNlbGYuZl9nbG9iYWxzID0gZnJh
bWUuZl9nbG9iYWxzCisgICAgICAgIHNlbGYuZl9sb2NhbHMgPSBmcmFtZS5mX2xvY2FscworICAg
ICAgICBzZWxmLnJhdyA9IGZyYW1lCisgICAgICAgIHNlbGYuY29kZSA9IENvZGUoZnJhbWUuZl9j
b2RlKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHN0YXRlbWVudChzZWxmKToKKyAgICAgICAg
IiIiIHN0YXRlbWVudCB0aGlzIGZyYW1lIGlzIGF0ICIiIgorICAgICAgICBpbXBvcnQgX3B5dGVz
dC5fY29kZQorICAgICAgICBpZiBzZWxmLmNvZGUuZnVsbHNvdXJjZSBpcyBOb25lOgorICAgICAg
ICAgICAgcmV0dXJuIF9weXRlc3QuX2NvZGUuU291cmNlKCIiKQorICAgICAgICByZXR1cm4gc2Vs
Zi5jb2RlLmZ1bGxzb3VyY2UuZ2V0c3RhdGVtZW50KHNlbGYubGluZW5vKQorCisgICAgZGVmIGV2
YWwoc2VsZiwgY29kZSwgKip2YXJzKToKKyAgICAgICAgIiIiIGV2YWx1YXRlICdjb2RlJyBpbiB0
aGUgZnJhbWUKKworICAgICAgICAgICAgJ3ZhcnMnIGFyZSBvcHRpb25hbCBhZGRpdGlvbmFsIGxv
Y2FsIHZhcmlhYmxlcworCisgICAgICAgICAgICByZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGV2
YWx1YXRpb24KKyAgICAgICAgIiIiCisgICAgICAgIGZfbG9jYWxzID0gc2VsZi5mX2xvY2Fscy5j
b3B5KCkKKyAgICAgICAgZl9sb2NhbHMudXBkYXRlKHZhcnMpCisgICAgICAgIHJldHVybiBldmFs
KGNvZGUsIHNlbGYuZl9nbG9iYWxzLCBmX2xvY2FscykKKworICAgIGRlZiBleGVjXyhzZWxmLCBj
b2RlLCAqKnZhcnMpOgorICAgICAgICAiIiIgZXhlYyAnY29kZScgaW4gdGhlIGZyYW1lCisKKyAg
ICAgICAgICAgICd2YXJzJyBhcmUgb3B0aW9uYTsgYWRkaXRpb25hbCBsb2NhbCB2YXJpYWJsZXMK
KyAgICAgICAgIiIiCisgICAgICAgIGZfbG9jYWxzID0gc2VsZi5mX2xvY2Fscy5jb3B5KCkKKyAg
ICAgICAgZl9sb2NhbHMudXBkYXRlKHZhcnMpCisgICAgICAgIHB5LmJ1aWx0aW4uZXhlY18oY29k
ZSwgc2VsZi5mX2dsb2JhbHMsIGZfbG9jYWxzICkKKworICAgIGRlZiByZXByKHNlbGYsIG9iamVj
dCk6CisgICAgICAgICIiIiByZXR1cm4gYSAnc2FmZScgKG5vbi1yZWN1cnNpdmUsIG9uZS1saW5l
KSBzdHJpbmcgcmVwciBmb3IgJ29iamVjdCcKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBw
eS5pby5zYWZlcmVwcihvYmplY3QpCisKKyAgICBkZWYgaXNfdHJ1ZShzZWxmLCBvYmplY3QpOgor
ICAgICAgICByZXR1cm4gb2JqZWN0CisKKyAgICBkZWYgZ2V0YXJncyhzZWxmLCB2YXI9RmFsc2Up
OgorICAgICAgICAiIiIgcmV0dXJuIGEgbGlzdCBvZiB0dXBsZXMgKG5hbWUsIHZhbHVlKSBmb3Ig
YWxsIGFyZ3VtZW50cworCisgICAgICAgICAgICBpZiAndmFyJyBpcyBzZXQgVHJ1ZSBhbHNvIGlu
Y2x1ZGUgdGhlIHZhcmlhYmxlIGFuZCBrZXl3b3JkCisgICAgICAgICAgICBhcmd1bWVudHMgd2hl
biBwcmVzZW50CisgICAgICAgICIiIgorICAgICAgICByZXR2YWwgPSBbXQorICAgICAgICBmb3Ig
YXJnIGluIHNlbGYuY29kZS5nZXRhcmdzKHZhcik6CisgICAgICAgICAgICB0cnk6CisgICAgICAg
ICAgICAgICAgcmV0dmFsLmFwcGVuZCgoYXJnLCBzZWxmLmZfbG9jYWxzW2FyZ10pKQorICAgICAg
ICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MgICAgICMgdGhpcyBj
YW4gb2NjdXIgd2hlbiB1c2luZyBQc3ljbworICAgICAgICByZXR1cm4gcmV0dmFsCisKK2NsYXNz
IFRyYWNlYmFja0VudHJ5KG9iamVjdCk6CisgICAgIiIiIGEgc2luZ2xlIGVudHJ5IGluIGEgdHJh
Y2ViYWNrICIiIgorCisgICAgX3JlcHJfc3R5bGUgPSBOb25lCisgICAgZXhwcmluZm8gPSBOb25l
CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmF3ZW50cnkpOgorICAgICAgICBzZWxmLl9yYXdl
bnRyeSA9IHJhd2VudHJ5CisgICAgICAgIHNlbGYubGluZW5vID0gcmF3ZW50cnkudGJfbGluZW5v
IC0gMQorCisgICAgZGVmIHNldF9yZXByX3N0eWxlKHNlbGYsIG1vZGUpOgorICAgICAgICBhc3Nl
cnQgbW9kZSBpbiAoInNob3J0IiwgImxvbmciKQorICAgICAgICBzZWxmLl9yZXByX3N0eWxlID0g
bW9kZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGZyYW1lKHNlbGYpOgorICAgICAgICBpbXBv
cnQgX3B5dGVzdC5fY29kZQorICAgICAgICByZXR1cm4gX3B5dGVzdC5fY29kZS5GcmFtZShzZWxm
Ll9yYXdlbnRyeS50Yl9mcmFtZSkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiByZWxsaW5lKHNl
bGYpOgorICAgICAgICByZXR1cm4gc2VsZi5saW5lbm8gLSBzZWxmLmZyYW1lLmNvZGUuZmlyc3Rs
aW5lbm8KKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICI8VHJhY2Vi
YWNrRW50cnkgJXM6JWQ+IiAlKHNlbGYuZnJhbWUuY29kZS5wYXRoLCBzZWxmLmxpbmVubysxKQor
CisgICAgQHByb3BlcnR5CisgICAgZGVmIHN0YXRlbWVudChzZWxmKToKKyAgICAgICAgIiIiIF9w
eXRlc3QuX2NvZGUuU291cmNlIG9iamVjdCBmb3IgdGhlIGN1cnJlbnQgc3RhdGVtZW50ICIiIgor
ICAgICAgICBzb3VyY2UgPSBzZWxmLmZyYW1lLmNvZGUuZnVsbHNvdXJjZQorICAgICAgICByZXR1
cm4gc291cmNlLmdldHN0YXRlbWVudChzZWxmLmxpbmVubykKKworICAgIEBwcm9wZXJ0eQorICAg
IGRlZiBwYXRoKHNlbGYpOgorICAgICAgICAiIiIgcGF0aCB0byB0aGUgc291cmNlIGNvZGUgIiIi
CisgICAgICAgIHJldHVybiBzZWxmLmZyYW1lLmNvZGUucGF0aAorCisgICAgZGVmIGdldGxvY2Fs
cyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZnJhbWUuZl9sb2NhbHMKKyAgICBsb2NhbHMg
PSBwcm9wZXJ0eShnZXRsb2NhbHMsIE5vbmUsIE5vbmUsICJsb2NhbHMgb2YgdW5kZXJsYXlpbmcg
ZnJhbWUiKQorCisgICAgZGVmIHJlaW50ZXJwcmV0KHNlbGYpOgorICAgICAgICAiIiJSZWludGVy
cHJldCB0aGUgZmFpbGluZyBzdGF0ZW1lbnQgYW5kIHJldHVybnMgYSBkZXRhaWxlZCBpbmZvcm1h
dGlvbgorICAgICAgICAgICBhYm91dCB3aGF0IG9wZXJhdGlvbnMgYXJlIHBlcmZvcm1lZC4iIiIK
KyAgICAgICAgZnJvbSBfcHl0ZXN0LmFzc2VydGlvbi5yZWludGVycHJldCBpbXBvcnQgcmVpbnRl
cnByZXQKKyAgICAgICAgaWYgc2VsZi5leHByaW5mbyBpcyBOb25lOgorICAgICAgICAgICAgc291
cmNlID0gcHkuYnVpbHRpbi5fdG90ZXh0KHNlbGYuc3RhdGVtZW50KS5zdHJpcCgpCisgICAgICAg
ICAgICB4ID0gcmVpbnRlcnByZXQoc291cmNlLCBzZWxmLmZyYW1lLCBzaG91bGRfZmFpbD1UcnVl
KQorICAgICAgICAgICAgaWYgbm90IHB5LmJ1aWx0aW4uX2lzdGV4dCh4KToKKyAgICAgICAgICAg
ICAgICByYWlzZSBUeXBlRXJyb3IoImludGVycHJldCByZXR1cm5lZCBub24tc3RyaW5nICVyIiAl
ICh4LCkpCisgICAgICAgICAgICBzZWxmLmV4cHJpbmZvID0geAorICAgICAgICByZXR1cm4gc2Vs
Zi5leHByaW5mbworCisgICAgZGVmIGdldGZpcnN0bGluZXNvdXJjZShzZWxmKToKKyAgICAgICAg
IyBvbiBKeXRob24gdGhpcyBmaXJzdGxpbmVubyBjYW4gYmUgLTEgYXBwYXJlbnRseQorICAgICAg
ICByZXR1cm4gbWF4KHNlbGYuZnJhbWUuY29kZS5maXJzdGxpbmVubywgMCkKKworICAgIGRlZiBn
ZXRzb3VyY2Uoc2VsZiwgYXN0Y2FjaGU9Tm9uZSk6CisgICAgICAgICIiIiByZXR1cm4gZmFpbGlu
ZyBzb3VyY2UgY29kZS4gIiIiCisgICAgICAgICMgd2UgdXNlIHRoZSBwYXNzZWQgaW4gYXN0Y2Fj
aGUgdG8gbm90IHJlcGFyc2UgYXN0dHJlZXMKKyAgICAgICAgIyB3aXRoaW4gZXhjZXB0aW9uIGlu
Zm8gcHJpbnRpbmcKKyAgICAgICAgZnJvbSBfcHl0ZXN0Ll9jb2RlLnNvdXJjZSBpbXBvcnQgZ2V0
c3RhdGVtZW50cmFuZ2VfYXN0CisgICAgICAgIHNvdXJjZSA9IHNlbGYuZnJhbWUuY29kZS5mdWxs
c291cmNlCisgICAgICAgIGlmIHNvdXJjZSBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5v
bmUKKyAgICAgICAga2V5ID0gYXN0bm9kZSA9IE5vbmUKKyAgICAgICAgaWYgYXN0Y2FjaGUgaXMg
bm90IE5vbmU6CisgICAgICAgICAgICBrZXkgPSBzZWxmLmZyYW1lLmNvZGUucGF0aAorICAgICAg
ICAgICAgaWYga2V5IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGFzdG5vZGUgPSBhc3Rj
YWNoZS5nZXQoa2V5LCBOb25lKQorICAgICAgICBzdGFydCA9IHNlbGYuZ2V0Zmlyc3RsaW5lc291
cmNlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYXN0bm9kZSwgXywgZW5kID0gZ2V0c3Rh
dGVtZW50cmFuZ2VfYXN0KHNlbGYubGluZW5vLCBzb3VyY2UsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXN0bm9kZT1hc3Rub2RlKQorICAgICAg
ICBleGNlcHQgU3ludGF4RXJyb3I6CisgICAgICAgICAgICBlbmQgPSBzZWxmLmxpbmVubyArIDEK
KyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGtleSBpcyBub3QgTm9uZToKKyAgICAgICAg
ICAgICAgICBhc3RjYWNoZVtrZXldID0gYXN0bm9kZQorICAgICAgICByZXR1cm4gc291cmNlW3N0
YXJ0OmVuZF0KKworICAgIHNvdXJjZSA9IHByb3BlcnR5KGdldHNvdXJjZSkKKworICAgIGRlZiBp
c2hpZGRlbihzZWxmKToKKyAgICAgICAgIiIiIHJldHVybiBUcnVlIGlmIHRoZSBjdXJyZW50IGZy
YW1lIGhhcyBhIHZhciBfX3RyYWNlYmFja2hpZGVfXworICAgICAgICAgICAgcmVzb2x2aW5nIHRv
IFRydWUKKworICAgICAgICAgICAgbW9zdGx5IGZvciBpbnRlcm5hbCB1c2UKKyAgICAgICAgIiIi
CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmZyYW1lLmZfbG9jYWxzWydf
X3RyYWNlYmFja2hpZGVfXyddCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAg
IHRyeToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5mcmFtZS5mX2dsb2JhbHNbJ19fdHJh
Y2ViYWNraGlkZV9fJ10KKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICB0cnk6
CisgICAgICAgICAgICBmbiA9IHN0cihzZWxmLnBhdGgpCisgICAgICAgIGV4Y2VwdCBweS5lcnJv
ci5FcnJvcjoKKyAgICAgICAgICAgIGZuID0gJz8/PycKKyAgICAgICAgbmFtZSA9IHNlbGYuZnJh
bWUuY29kZS5uYW1lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxpbmUgPSBzdHIoc2VsZi5z
dGF0ZW1lbnQpLmxzdHJpcCgpCisgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAg
ICAgICAgICAgIHJhaXNlCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGxpbmUgPSAiPz8/
IgorICAgICAgICByZXR1cm4gIiAgRmlsZSAlcjolZCBpbiAlc1xuICAlc1xuIiAlKGZuLCBzZWxm
LmxpbmVubysxLCBuYW1lLCBsaW5lKQorCisgICAgZGVmIG5hbWUoc2VsZik6CisgICAgICAgIHJl
dHVybiBzZWxmLmZyYW1lLmNvZGUucmF3LmNvX25hbWUKKyAgICBuYW1lID0gcHJvcGVydHkobmFt
ZSwgTm9uZSwgTm9uZSwgImNvX25hbWUgb2YgdW5kZXJsYXlpbmcgY29kZSIpCisKK2NsYXNzIFRy
YWNlYmFjayhsaXN0KToKKyAgICAiIiIgVHJhY2ViYWNrIG9iamVjdHMgZW5jYXBzdWxhdGUgYW5k
IG9mZmVyIGhpZ2hlciBsZXZlbAorICAgICAgICBhY2Nlc3MgdG8gVHJhY2ViYWNrIGVudHJpZXMu
CisgICAgIiIiCisgICAgRW50cnkgPSBUcmFjZWJhY2tFbnRyeQorICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCB0Yik6CisgICAgICAgICIiIiBpbml0aWFsaXplIGZyb20gZ2l2ZW4gcHl0aG9uIHRyYWNl
YmFjayBvYmplY3QuICIiIgorICAgICAgICBpZiBoYXNhdHRyKHRiLCAndGJfbmV4dCcpOgorICAg
ICAgICAgICAgZGVmIGYoY3VyKToKKyAgICAgICAgICAgICAgICB3aGlsZSBjdXIgaXMgbm90IE5v
bmU6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIHNlbGYuRW50cnkoY3VyKQorICAgICAgICAg
ICAgICAgICAgICBjdXIgPSBjdXIudGJfbmV4dAorICAgICAgICAgICAgbGlzdC5fX2luaXRfXyhz
ZWxmLCBmKHRiKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxpc3QuX19pbml0X18oc2Vs
ZiwgdGIpCisKKyAgICBkZWYgY3V0KHNlbGYsIHBhdGg9Tm9uZSwgbGluZW5vPU5vbmUsIGZpcnN0
bGluZW5vPU5vbmUsIGV4Y2x1ZGVwYXRoPU5vbmUpOgorICAgICAgICAiIiIgcmV0dXJuIGEgVHJh
Y2ViYWNrIGluc3RhbmNlIHdyYXBwaW5nIHBhcnQgb2YgdGhpcyBUcmFjZWJhY2sKKworICAgICAg
ICAgICAgYnkgcHJvdmRpbmcgYW55IGNvbWJpbmF0aW9uIG9mIHBhdGgsIGxpbmVubyBhbmQgZmly
c3RsaW5lbm8sIHRoZQorICAgICAgICAgICAgZmlyc3QgZnJhbWUgdG8gc3RhcnQgdGhlIHRvLWJl
LXJldHVybmVkIHRyYWNlYmFjayBpcyBkZXRlcm1pbmVkCisKKyAgICAgICAgICAgIHRoaXMgYWxs
b3dzIGN1dHRpbmcgdGhlIGZpcnN0IHBhcnQgb2YgYSBUcmFjZWJhY2sgaW5zdGFuY2UgZS5nLgor
ICAgICAgICAgICAgZm9yIGZvcm1hdHRpbmcgcmVhc29ucyAocmVtb3Zpbmcgc29tZSB1bmludGVy
ZXN0aW5nIGJpdHMgdGhhdCBkZWFsCisgICAgICAgICAgICB3aXRoIGhhbmRsaW5nIG9mIHRoZSBl
eGNlcHRpb24vdHJhY2ViYWNrKQorICAgICAgICAiIiIKKyAgICAgICAgZm9yIHggaW4gc2VsZjoK
KyAgICAgICAgICAgIGNvZGUgPSB4LmZyYW1lLmNvZGUKKyAgICAgICAgICAgIGNvZGVwYXRoID0g
Y29kZS5wYXRoCisgICAgICAgICAgICBpZiAoKHBhdGggaXMgTm9uZSBvciBjb2RlcGF0aCA9PSBw
YXRoKSBhbmQKKyAgICAgICAgICAgICAgICAoZXhjbHVkZXBhdGggaXMgTm9uZSBvciBub3QgaGFz
YXR0cihjb2RlcGF0aCwgJ3JlbHRvJykgb3IKKyAgICAgICAgICAgICAgICAgbm90IGNvZGVwYXRo
LnJlbHRvKGV4Y2x1ZGVwYXRoKSkgYW5kCisgICAgICAgICAgICAgICAgKGxpbmVubyBpcyBOb25l
IG9yIHgubGluZW5vID09IGxpbmVubykgYW5kCisgICAgICAgICAgICAgICAgKGZpcnN0bGluZW5v
IGlzIE5vbmUgb3IgeC5mcmFtZS5jb2RlLmZpcnN0bGluZW5vID09IGZpcnN0bGluZW5vKSk6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIFRyYWNlYmFjayh4Ll9yYXdlbnRyeSkKKyAgICAgICAgcmV0
dXJuIHNlbGYKKworICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICB2YWwg
PSBzdXBlcihUcmFjZWJhY2ssIHNlbGYpLl9fZ2V0aXRlbV9fKGtleSkKKyAgICAgICAgaWYgaXNp
bnN0YW5jZShrZXksIHR5cGUoc2xpY2UoMCkpKToKKyAgICAgICAgICAgIHZhbCA9IHNlbGYuX19j
bGFzc19fKHZhbCkKKyAgICAgICAgcmV0dXJuIHZhbAorCisgICAgZGVmIGZpbHRlcihzZWxmLCBm
bj1sYW1iZGEgeDogbm90IHguaXNoaWRkZW4oKSk6CisgICAgICAgICIiIiByZXR1cm4gYSBUcmFj
ZWJhY2sgaW5zdGFuY2Ugd2l0aCBjZXJ0YWluIGl0ZW1zIHJlbW92ZWQKKworICAgICAgICAgICAg
Zm4gaXMgYSBmdW5jdGlvbiB0aGF0IGdldHMgYSBzaW5nbGUgYXJndW1lbnQsIGEgVHJhY2ViYWNr
SXRlbQorICAgICAgICAgICAgaW5zdGFuY2UsIGFuZCBzaG91bGQgcmV0dXJuIFRydWUgd2hlbiB0
aGUgaXRlbSBzaG91bGQgYmUgYWRkZWQKKyAgICAgICAgICAgIHRvIHRoZSBUcmFjZWJhY2ssIEZh
bHNlIHdoZW4gbm90CisKKyAgICAgICAgICAgIGJ5IGRlZmF1bHQgdGhpcyByZW1vdmVzIGFsbCB0
aGUgVHJhY2ViYWNrSXRlbXMgd2hpY2ggYXJlIGhpZGRlbgorICAgICAgICAgICAgKHNlZSBpc2hp
ZGRlbigpIGFib3ZlKQorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIFRyYWNlYmFjayhmaWx0
ZXIoZm4sIHNlbGYpKQorCisgICAgZGVmIGdldGNyYXNoZW50cnkoc2VsZik6CisgICAgICAgICIi
IiByZXR1cm4gbGFzdCBub24taGlkZGVuIHRyYWNlYmFjayBlbnRyeSB0aGF0IGxlYWQKKyAgICAg
ICAgdG8gdGhlIGV4Y2VwdGlvbiBvZiBhIHRyYWNlYmFjay4KKyAgICAgICAgIiIiCisgICAgICAg
IGZvciBpIGluIHJhbmdlKC0xLCAtbGVuKHNlbGYpLTEsIC0xKToKKyAgICAgICAgICAgIGVudHJ5
ID0gc2VsZltpXQorICAgICAgICAgICAgaWYgbm90IGVudHJ5LmlzaGlkZGVuKCk6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGVudHJ5CisgICAgICAgIHJldHVybiBzZWxmWy0xXQorCisgICAgZGVm
IHJlY3Vyc2lvbmluZGV4KHNlbGYpOgorICAgICAgICAiIiIgcmV0dXJuIHRoZSBpbmRleCBvZiB0
aGUgZnJhbWUvVHJhY2ViYWNrSXRlbSB3aGVyZSByZWN1cnNpb24KKyAgICAgICAgICAgIG9yaWdp
bmF0ZXMgaWYgYXBwcm9wcmlhdGUsIE5vbmUgaWYgbm8gcmVjdXJzaW9uIG9jY3VycmVkCisgICAg
ICAgICIiIgorICAgICAgICBjYWNoZSA9IHt9CisgICAgICAgIGZvciBpLCBlbnRyeSBpbiBlbnVt
ZXJhdGUoc2VsZik6CisgICAgICAgICAgICAjIGlkIGZvciB0aGUgY29kZS5yYXcgaXMgbmVlZGVk
IHRvIHdvcmsgYXJvdW5kCisgICAgICAgICAgICAjIHRoZSBzdHJhbmdlIG1ldGFwcm9ncmFtbWlu
ZyBpbiB0aGUgZGVjb3JhdG9yIGxpYiBmcm9tIHB5cGkKKyAgICAgICAgICAgICMgd2hpY2ggZ2Vu
ZXJhdGVzIGNvZGUgb2JqZWN0cyB0aGF0IGhhdmUgaGFzaC92YWx1ZSBlcXVhbGl0eQorICAgICAg
ICAgICAgI1hYWCBuZWVkcyBhIHRlc3QKKyAgICAgICAgICAgIGtleSA9IGVudHJ5LmZyYW1lLmNv
ZGUucGF0aCwgaWQoZW50cnkuZnJhbWUuY29kZS5yYXcpLCBlbnRyeS5saW5lbm8KKyAgICAgICAg
ICAgICNwcmludCAiY2hlY2tpbmcgZm9yIHJlY3Vyc2lvbiBhdCIsIGtleQorICAgICAgICAgICAg
bCA9IGNhY2hlLnNldGRlZmF1bHQoa2V5LCBbXSkKKyAgICAgICAgICAgIGlmIGw6CisgICAgICAg
ICAgICAgICAgZiA9IGVudHJ5LmZyYW1lCisgICAgICAgICAgICAgICAgbG9jID0gZi5mX2xvY2Fs
cworICAgICAgICAgICAgICAgIGZvciBvdGhlcmxvYyBpbiBsOgorICAgICAgICAgICAgICAgICAg
ICBpZiBmLmlzX3RydWUoZi5ldmFsKGNvX2VxdWFsLAorICAgICAgICAgICAgICAgICAgICAgICAg
X19yZWN1cnNpb25jYWNoZV9sb2NhbHNfMT1sb2MsCisgICAgICAgICAgICAgICAgICAgICAgICBf
X3JlY3Vyc2lvbmNhY2hlX2xvY2Fsc18yPW90aGVybG9jKSk6CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gaQorICAgICAgICAgICAgbC5hcHBlbmQoZW50cnkuZnJhbWUuZl9sb2NhbHMp
CisgICAgICAgIHJldHVybiBOb25lCisKK2NvX2VxdWFsID0gY29tcGlsZSgnX19yZWN1cnNpb25j
YWNoZV9sb2NhbHNfMSA9PSBfX3JlY3Vyc2lvbmNhY2hlX2xvY2Fsc18yJywKKyAgICAgICAgICAg
ICAgICAgICAnPycsICdldmFsJykKKworY2xhc3MgRXhjZXB0aW9uSW5mbyhvYmplY3QpOgorICAg
ICIiIiB3cmFwcyBzeXMuZXhjX2luZm8oKSBvYmplY3RzIGFuZCBvZmZlcnMKKyAgICAgICAgaGVs
cCBmb3IgbmF2aWdhdGluZyB0aGUgdHJhY2ViYWNrLgorICAgICIiIgorICAgIF9zdHJpcHRleHQg
PSAnJworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0dXA9Tm9uZSwgZXhwcmluZm89Tm9uZSk6Cisg
ICAgICAgIGltcG9ydCBfcHl0ZXN0Ll9jb2RlCisgICAgICAgIGlmIHR1cCBpcyBOb25lOgorICAg
ICAgICAgICAgdHVwID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgICAgIGlmIGV4cHJpbmZvIGlz
IE5vbmUgYW5kIGlzaW5zdGFuY2UodHVwWzFdLCBBc3NlcnRpb25FcnJvcik6CisgICAgICAgICAg
ICAgICAgZXhwcmluZm8gPSBnZXRhdHRyKHR1cFsxXSwgJ21zZycsIE5vbmUpCisgICAgICAgICAg
ICAgICAgaWYgZXhwcmluZm8gaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgZXhwcmluZm8g
PSBzdHIodHVwWzFdKQorICAgICAgICAgICAgICAgIGlmIGV4cHJpbmZvIGFuZCBleHByaW5mby5z
dGFydHN3aXRoKCdhc3NlcnQgJyk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0cmlwdGV4
dCA9ICdBc3NlcnRpb25FcnJvcjogJworICAgICAgICBzZWxmLl9leGNpbmZvID0gdHVwCisgICAg
ICAgICM6IHRoZSBleGNlcHRpb24gY2xhc3MKKyAgICAgICAgc2VsZi50eXBlID0gdHVwWzBdCisg
ICAgICAgICM6IHRoZSBleGNlcHRpb24gaW5zdGFuY2UKKyAgICAgICAgc2VsZi52YWx1ZSA9IHR1
cFsxXQorICAgICAgICAjOiB0aGUgZXhjZXB0aW9uIHJhdyB0cmFjZWJhY2sKKyAgICAgICAgc2Vs
Zi50YiA9IHR1cFsyXQorICAgICAgICAjOiB0aGUgZXhjZXB0aW9uIHR5cGUgbmFtZQorICAgICAg
ICBzZWxmLnR5cGVuYW1lID0gc2VsZi50eXBlLl9fbmFtZV9fCisgICAgICAgICM6IHRoZSBleGNl
cHRpb24gdHJhY2ViYWNrIChfcHl0ZXN0Ll9jb2RlLlRyYWNlYmFjayBpbnN0YW5jZSkKKyAgICAg
ICAgc2VsZi50cmFjZWJhY2sgPSBfcHl0ZXN0Ll9jb2RlLlRyYWNlYmFjayhzZWxmLnRiKQorCisg
ICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIjxFeGNlcHRpb25JbmZvICVz
IHRibGVuPSVkPiIgJSAoc2VsZi50eXBlbmFtZSwgbGVuKHNlbGYudHJhY2ViYWNrKSkKKworICAg
IGRlZiBleGNvbmx5KHNlbGYsIHRyeXNob3J0PUZhbHNlKToKKyAgICAgICAgIiIiIHJldHVybiB0
aGUgZXhjZXB0aW9uIGFzIGEgc3RyaW5nCisKKyAgICAgICAgICAgIHdoZW4gJ3RyeXNob3J0JyBy
ZXNvbHZlcyB0byBUcnVlLCBhbmQgdGhlIGV4Y2VwdGlvbiBpcyBhCisgICAgICAgICAgICBfcHl0
ZXN0Ll9jb2RlLl9Bc3NlcnRpb25FcnJvciwgb25seSB0aGUgYWN0dWFsIGV4Y2VwdGlvbiBwYXJ0
IG9mCisgICAgICAgICAgICB0aGUgZXhjZXB0aW9uIHJlcHJlc2VudGF0aW9uIGlzIHJldHVybmVk
IChzbyAnQXNzZXJ0aW9uRXJyb3I6ICcgaXMKKyAgICAgICAgICAgIHJlbW92ZWQgZnJvbSB0aGUg
YmVnaW5uaW5nKQorICAgICAgICAiIiIKKyAgICAgICAgbGluZXMgPSBmb3JtYXRfZXhjZXB0aW9u
X29ubHkoc2VsZi50eXBlLCBzZWxmLnZhbHVlKQorICAgICAgICB0ZXh0ID0gJycuam9pbihsaW5l
cykKKyAgICAgICAgdGV4dCA9IHRleHQucnN0cmlwKCkKKyAgICAgICAgaWYgdHJ5c2hvcnQ6Cisg
ICAgICAgICAgICBpZiB0ZXh0LnN0YXJ0c3dpdGgoc2VsZi5fc3RyaXB0ZXh0KToKKyAgICAgICAg
ICAgICAgICB0ZXh0ID0gdGV4dFtsZW4oc2VsZi5fc3RyaXB0ZXh0KTpdCisgICAgICAgIHJldHVy
biB0ZXh0CisKKyAgICBkZWYgZXJyaXNpbnN0YW5jZShzZWxmLCBleGMpOgorICAgICAgICAiIiIg
cmV0dXJuIFRydWUgaWYgdGhlIGV4Y2VwdGlvbiBpcyBhbiBpbnN0YW5jZSBvZiBleGMgIiIiCisg
ICAgICAgIHJldHVybiBpc2luc3RhbmNlKHNlbGYudmFsdWUsIGV4YykKKworICAgIGRlZiBfZ2V0
cmVwcmNyYXNoKHNlbGYpOgorICAgICAgICBleGNvbmx5ID0gc2VsZi5leGNvbmx5KHRyeXNob3J0
PVRydWUpCisgICAgICAgIGVudHJ5ID0gc2VsZi50cmFjZWJhY2suZ2V0Y3Jhc2hlbnRyeSgpCisg
ICAgICAgIHBhdGgsIGxpbmVubyA9IGVudHJ5LmZyYW1lLmNvZGUucmF3LmNvX2ZpbGVuYW1lLCBl
bnRyeS5saW5lbm8KKyAgICAgICAgcmV0dXJuIFJlcHJGaWxlTG9jYXRpb24ocGF0aCwgbGluZW5v
KzEsIGV4Y29ubHkpCisKKyAgICBkZWYgZ2V0cmVwcihzZWxmLCBzaG93bG9jYWxzPUZhbHNlLCBz
dHlsZT0ibG9uZyIsCisgICAgICAgICAgICBhYnNwYXRoPUZhbHNlLCB0YmZpbHRlcj1UcnVlLCBm
dW5jYXJncz1GYWxzZSk6CisgICAgICAgICIiIiByZXR1cm4gc3RyKClhYmxlIHJlcHJlc2VudGF0
aW9uIG9mIHRoaXMgZXhjZXB0aW9uIGluZm8uCisgICAgICAgICAgICBzaG93bG9jYWxzOiBzaG93
IGxvY2FscyBwZXIgdHJhY2ViYWNrIGVudHJ5CisgICAgICAgICAgICBzdHlsZTogbG9uZ3xzaG9y
dHxub3xuYXRpdmUgdHJhY2ViYWNrIHN0eWxlCisgICAgICAgICAgICB0YmZpbHRlcjogaGlkZSBl
bnRyaWVzICh3aGVyZSBfX3RyYWNlYmFja2hpZGVfXyBpcyB0cnVlKQorCisgICAgICAgICAgICBp
biBjYXNlIG9mIHN0eWxlPT1uYXRpdmUsIHRiZmlsdGVyIGFuZCBzaG93bG9jYWxzIGlzIGlnbm9y
ZWQuCisgICAgICAgICIiIgorICAgICAgICBpZiBzdHlsZSA9PSAnbmF0aXZlJzoKKyAgICAgICAg
ICAgIHJldHVybiBSZXByRXhjZXB0aW9uSW5mbyhSZXByVHJhY2ViYWNrTmF0aXZlKAorICAgICAg
ICAgICAgICAgIHB5LnN0ZC50cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbigKKyAgICAgICAgICAg
ICAgICAgICAgc2VsZi50eXBlLAorICAgICAgICAgICAgICAgICAgICBzZWxmLnZhbHVlLAorICAg
ICAgICAgICAgICAgICAgICBzZWxmLnRyYWNlYmFja1swXS5fcmF3ZW50cnksCisgICAgICAgICAg
ICAgICAgKSksIHNlbGYuX2dldHJlcHJjcmFzaCgpKQorCisgICAgICAgIGZtdCA9IEZvcm1hdHRl
ZEV4Y2luZm8oc2hvd2xvY2Fscz1zaG93bG9jYWxzLCBzdHlsZT1zdHlsZSwKKyAgICAgICAgICAg
IGFic3BhdGg9YWJzcGF0aCwgdGJmaWx0ZXI9dGJmaWx0ZXIsIGZ1bmNhcmdzPWZ1bmNhcmdzKQor
ICAgICAgICByZXR1cm4gZm10LnJlcHJfZXhjaW5mbyhzZWxmKQorCisgICAgZGVmIF9fc3RyX18o
c2VsZik6CisgICAgICAgIGVudHJ5ID0gc2VsZi50cmFjZWJhY2tbLTFdCisgICAgICAgIGxvYyA9
IFJlcHJGaWxlTG9jYXRpb24oZW50cnkucGF0aCwgZW50cnkubGluZW5vICsgMSwgc2VsZi5leGNv
bmx5KCkpCisgICAgICAgIHJldHVybiBzdHIobG9jKQorCisgICAgZGVmIF9fdW5pY29kZV9fKHNl
bGYpOgorICAgICAgICBlbnRyeSA9IHNlbGYudHJhY2ViYWNrWy0xXQorICAgICAgICBsb2MgPSBS
ZXByRmlsZUxvY2F0aW9uKGVudHJ5LnBhdGgsIGVudHJ5LmxpbmVubyArIDEsIHNlbGYuZXhjb25s
eSgpKQorICAgICAgICByZXR1cm4gdW5pY29kZShsb2MpCisKKworY2xhc3MgRm9ybWF0dGVkRXhj
aW5mbyhvYmplY3QpOgorICAgICIiIiBwcmVzZW50aW5nIGluZm9ybWF0aW9uIGFib3V0IGZhaWxp
bmcgRnVuY3Rpb25zIGFuZCBHZW5lcmF0b3JzLiAiIiIKKyAgICAjIGZvciB0cmFjZWJhY2sgZW50
cmllcworICAgIGZsb3dfbWFya2VyID0gIj4iCisgICAgZmFpbF9tYXJrZXIgPSAiRSIKKworICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBzaG93bG9jYWxzPUZhbHNlLCBzdHlsZT0ibG9uZyIsIGFic3Bh
dGg9VHJ1ZSwgdGJmaWx0ZXI9VHJ1ZSwgZnVuY2FyZ3M9RmFsc2UpOgorICAgICAgICBzZWxmLnNo
b3dsb2NhbHMgPSBzaG93bG9jYWxzCisgICAgICAgIHNlbGYuc3R5bGUgPSBzdHlsZQorICAgICAg
ICBzZWxmLnRiZmlsdGVyID0gdGJmaWx0ZXIKKyAgICAgICAgc2VsZi5mdW5jYXJncyA9IGZ1bmNh
cmdzCisgICAgICAgIHNlbGYuYWJzcGF0aCA9IGFic3BhdGgKKyAgICAgICAgc2VsZi5hc3RjYWNo
ZSA9IHt9CisKKyAgICBkZWYgX2dldGluZGVudChzZWxmLCBzb3VyY2UpOgorICAgICAgICAjIGZp
Z3VyZSBvdXQgaW5kZW50IGZvciBnaXZlbiBzb3VyY2UKKyAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgcyA9IHN0cihzb3VyY2UuZ2V0c3RhdGVtZW50KGxlbihzb3VyY2UpLTEpKQorICAgICAgICBl
eGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICByYWlzZQorICAgICAgICBleGNl
cHQ6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcyA9IHN0cihzb3VyY2VbLTFd
KQorICAgICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgICAg
IHJhaXNlCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIDAKKyAg
ICAgICAgcmV0dXJuIDQgKyAobGVuKHMpIC0gbGVuKHMubHN0cmlwKCkpKQorCisgICAgZGVmIF9n
ZXRlbnRyeXNvdXJjZShzZWxmLCBlbnRyeSk6CisgICAgICAgIHNvdXJjZSA9IGVudHJ5LmdldHNv
dXJjZShzZWxmLmFzdGNhY2hlKQorICAgICAgICBpZiBzb3VyY2UgaXMgbm90IE5vbmU6CisgICAg
ICAgICAgICBzb3VyY2UgPSBzb3VyY2UuZGVpbmRlbnQoKQorICAgICAgICByZXR1cm4gc291cmNl
CisKKyAgICBkZWYgX3NhZmVyZXByKHNlbGYsIG9iaik6CisgICAgICAgIHJldHVybiBweS5pby5z
YWZlcmVwcihvYmopCisKKyAgICBkZWYgcmVwcl9hcmdzKHNlbGYsIGVudHJ5KToKKyAgICAgICAg
aWYgc2VsZi5mdW5jYXJnczoKKyAgICAgICAgICAgIGFyZ3MgPSBbXQorICAgICAgICAgICAgZm9y
IGFyZ25hbWUsIGFyZ3ZhbHVlIGluIGVudHJ5LmZyYW1lLmdldGFyZ3ModmFyPVRydWUpOgorICAg
ICAgICAgICAgICAgIGFyZ3MuYXBwZW5kKChhcmduYW1lLCBzZWxmLl9zYWZlcmVwcihhcmd2YWx1
ZSkpKQorICAgICAgICAgICAgcmV0dXJuIFJlcHJGdW5jQXJncyhhcmdzKQorCisgICAgZGVmIGdl
dF9zb3VyY2Uoc2VsZiwgc291cmNlLCBsaW5lX2luZGV4PS0xLCBleGNpbmZvPU5vbmUsIHNob3J0
PUZhbHNlKToKKyAgICAgICAgIiIiIHJldHVybiBmb3JtYXR0ZWQgYW5kIG1hcmtlZCB1cCBzb3Vy
Y2UgbGluZXMuICIiIgorICAgICAgICBpbXBvcnQgX3B5dGVzdC5fY29kZQorICAgICAgICBsaW5l
cyA9IFtdCisgICAgICAgIGlmIHNvdXJjZSBpcyBOb25lIG9yIGxpbmVfaW5kZXggPj0gbGVuKHNv
dXJjZS5saW5lcyk6CisgICAgICAgICAgICBzb3VyY2UgPSBfcHl0ZXN0Ll9jb2RlLlNvdXJjZSgi
Pz8/IikKKyAgICAgICAgICAgIGxpbmVfaW5kZXggPSAwCisgICAgICAgIGlmIGxpbmVfaW5kZXgg
PCAwOgorICAgICAgICAgICAgbGluZV9pbmRleCArPSBsZW4oc291cmNlKQorICAgICAgICBzcGFj
ZV9wcmVmaXggPSAiICAgICIKKyAgICAgICAgaWYgc2hvcnQ6CisgICAgICAgICAgICBsaW5lcy5h
cHBlbmQoc3BhY2VfcHJlZml4ICsgc291cmNlLmxpbmVzW2xpbmVfaW5kZXhdLnN0cmlwKCkpCisg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBzb3VyY2UubGluZXNbOmxpbmVf
aW5kZXhdOgorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzcGFjZV9wcmVmaXggKyBsaW5l
KQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuZmxvd19tYXJrZXIgKyAiICAgIiArIHNv
dXJjZS5saW5lc1tsaW5lX2luZGV4XSkKKyAgICAgICAgICAgIGZvciBsaW5lIGluIHNvdXJjZS5s
aW5lc1tsaW5lX2luZGV4KzE6XToKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc3BhY2Vf
cHJlZml4ICsgbGluZSkKKyAgICAgICAgaWYgZXhjaW5mbyBpcyBub3QgTm9uZToKKyAgICAgICAg
ICAgIGluZGVudCA9IDQgaWYgc2hvcnQgZWxzZSBzZWxmLl9nZXRpbmRlbnQoc291cmNlKQorICAg
ICAgICAgICAgbGluZXMuZXh0ZW5kKHNlbGYuZ2V0X2V4Y29ubHkoZXhjaW5mbywgaW5kZW50PWlu
ZGVudCwgbWFya2FsbD1UcnVlKSkKKyAgICAgICAgcmV0dXJuIGxpbmVzCisKKyAgICBkZWYgZ2V0
X2V4Y29ubHkoc2VsZiwgZXhjaW5mbywgaW5kZW50PTQsIG1hcmthbGw9RmFsc2UpOgorICAgICAg
ICBsaW5lcyA9IFtdCisgICAgICAgIGluZGVudCA9ICIgIiAqIGluZGVudAorICAgICAgICAjIGdl
dCB0aGUgcmVhbCBleGNlcHRpb24gaW5mb3JtYXRpb24gb3V0CisgICAgICAgIGV4bGluZXMgPSBl
eGNpbmZvLmV4Y29ubHkodHJ5c2hvcnQ9VHJ1ZSkuc3BsaXQoJ1xuJykKKyAgICAgICAgZmFpbGlu
ZGVudCA9IHNlbGYuZmFpbF9tYXJrZXIgKyBpbmRlbnRbMTpdCisgICAgICAgIGZvciBsaW5lIGlu
IGV4bGluZXM6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoZmFpbGluZGVudCArIGxpbmUpCisg
ICAgICAgICAgICBpZiBub3QgbWFya2FsbDoKKyAgICAgICAgICAgICAgICBmYWlsaW5kZW50ID0g
aW5kZW50CisgICAgICAgIHJldHVybiBsaW5lcworCisgICAgZGVmIHJlcHJfbG9jYWxzKHNlbGYs
IGxvY2Fscyk6CisgICAgICAgIGlmIHNlbGYuc2hvd2xvY2FsczoKKyAgICAgICAgICAgIGxpbmVz
ID0gW10KKyAgICAgICAgICAgIGtleXMgPSBbbG9jIGZvciBsb2MgaW4gbG9jYWxzIGlmIGxvY1sw
XSAhPSAiQCJdCisgICAgICAgICAgICBrZXlzLnNvcnQoKQorICAgICAgICAgICAgZm9yIG5hbWUg
aW4ga2V5czoKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGxvY2Fsc1tuYW1lXQorICAgICAgICAg
ICAgICAgIGlmIG5hbWUgPT0gJ19fYnVpbHRpbnNfXyc6CisgICAgICAgICAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgiX19idWlsdGluc19fID0gPGJ1aWx0aW5zPiIpCisgICAgICAgICAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGZvcm1hdHRpbmcgY291bGQgYWxsIGJl
IGhhbmRsZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgICMgX3JlcHIoKSBmdW5jdGlvbiwg
d2hpY2ggaXMgb25seSByZXBybGliLlJlcHIgaW4KKyAgICAgICAgICAgICAgICAgICAgIyBkaXNn
dWlzZSwgc28gaXMgdmVyeSBjb25maWd1cmFibGUuCisgICAgICAgICAgICAgICAgICAgIHN0cl9y
ZXByID0gc2VsZi5fc2FmZXJlcHIodmFsdWUpCisgICAgICAgICAgICAgICAgICAgICNpZiBsZW4o
c3RyX3JlcHIpIDwgNzAgb3Igbm90IGlzaW5zdGFuY2UodmFsdWUsCisgICAgICAgICAgICAgICAg
ICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpc3QsIHR1cGxlLCBkaWN0KSk6Cisg
ICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgiJS0xMHMgPSAlcyIgJShuYW1lLCBzdHJf
cmVwcikpCisgICAgICAgICAgICAgICAgICAgICNlbHNlOgorICAgICAgICAgICAgICAgICAgICAj
ICAgIHNlbGYuX2xpbmUoIiUtMTBzID1cXCIgJSAobmFtZSwpKQorICAgICAgICAgICAgICAgICAg
ICAjICAgICMgWFhYCisgICAgICAgICAgICAgICAgICAgICMgICAgcHkuc3RkLnBwcmludC5wcHJp
bnQodmFsdWUsIHN0cmVhbT1zZWxmLmV4Y2luZm93cml0ZXIpCisgICAgICAgICAgICByZXR1cm4g
UmVwckxvY2FscyhsaW5lcykKKworICAgIGRlZiByZXByX3RyYWNlYmFja19lbnRyeShzZWxmLCBl
bnRyeSwgZXhjaW5mbz1Ob25lKToKKyAgICAgICAgaW1wb3J0IF9weXRlc3QuX2NvZGUKKyAgICAg
ICAgc291cmNlID0gc2VsZi5fZ2V0ZW50cnlzb3VyY2UoZW50cnkpCisgICAgICAgIGlmIHNvdXJj
ZSBpcyBOb25lOgorICAgICAgICAgICAgc291cmNlID0gX3B5dGVzdC5fY29kZS5Tb3VyY2UoIj8/
PyIpCisgICAgICAgICAgICBsaW5lX2luZGV4ID0gMAorICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgIyBlbnRyeS5nZXRmaXJzdGxpbmVzb3VyY2UoKSBjYW4gYmUgLTEsIHNob3VsZCBiZSAwIG9u
IGp5dGhvbgorICAgICAgICAgICAgbGluZV9pbmRleCA9IGVudHJ5LmxpbmVubyAtIG1heChlbnRy
eS5nZXRmaXJzdGxpbmVzb3VyY2UoKSwgMCkKKworICAgICAgICBsaW5lcyA9IFtdCisgICAgICAg
IHN0eWxlID0gZW50cnkuX3JlcHJfc3R5bGUKKyAgICAgICAgaWYgc3R5bGUgaXMgTm9uZToKKyAg
ICAgICAgICAgIHN0eWxlID0gc2VsZi5zdHlsZQorICAgICAgICBpZiBzdHlsZSBpbiAoInNob3J0
IiwgImxvbmciKToKKyAgICAgICAgICAgIHNob3J0ID0gc3R5bGUgPT0gInNob3J0IgorICAgICAg
ICAgICAgcmVwcmFyZ3MgPSBzZWxmLnJlcHJfYXJncyhlbnRyeSkgaWYgbm90IHNob3J0IGVsc2Ug
Tm9uZQorICAgICAgICAgICAgcyA9IHNlbGYuZ2V0X3NvdXJjZShzb3VyY2UsIGxpbmVfaW5kZXgs
IGV4Y2luZm8sIHNob3J0PXNob3J0KQorICAgICAgICAgICAgbGluZXMuZXh0ZW5kKHMpCisgICAg
ICAgICAgICBpZiBzaG9ydDoKKyAgICAgICAgICAgICAgICBtZXNzYWdlID0gImluICVzIiAlKGVu
dHJ5Lm5hbWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBl
eGNpbmZvIGFuZCBleGNpbmZvLnR5cGVuYW1lIG9yICIiCisgICAgICAgICAgICBwYXRoID0gc2Vs
Zi5fbWFrZXBhdGgoZW50cnkucGF0aCkKKyAgICAgICAgICAgIGZpbGVsb2NyZXByID0gUmVwckZp
bGVMb2NhdGlvbihwYXRoLCBlbnRyeS5saW5lbm8rMSwgbWVzc2FnZSkKKyAgICAgICAgICAgIGxv
Y2Fsc3JlcHIgPSBOb25lCisgICAgICAgICAgICBpZiBub3Qgc2hvcnQ6CisgICAgICAgICAgICAg
ICAgbG9jYWxzcmVwciA9ICBzZWxmLnJlcHJfbG9jYWxzKGVudHJ5LmxvY2FscykKKyAgICAgICAg
ICAgIHJldHVybiBSZXByRW50cnkobGluZXMsIHJlcHJhcmdzLCBsb2NhbHNyZXByLCBmaWxlbG9j
cmVwciwgc3R5bGUpCisgICAgICAgIGlmIGV4Y2luZm86CisgICAgICAgICAgICBsaW5lcy5leHRl
bmQoc2VsZi5nZXRfZXhjb25seShleGNpbmZvLCBpbmRlbnQ9NCkpCisgICAgICAgIHJldHVybiBS
ZXByRW50cnkobGluZXMsIE5vbmUsIE5vbmUsIE5vbmUsIHN0eWxlKQorCisgICAgZGVmIF9tYWtl
cGF0aChzZWxmLCBwYXRoKToKKyAgICAgICAgaWYgbm90IHNlbGYuYWJzcGF0aDoKKyAgICAgICAg
ICAgIHRyeToKKyAgICAgICAgICAgICAgICBucCA9IHB5LnBhdGgubG9jYWwoKS5iZXN0cmVscGF0
aChwYXRoKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgcmV0
dXJuIHBhdGgKKyAgICAgICAgICAgIGlmIGxlbihucCkgPCBsZW4oc3RyKHBhdGgpKToKKyAgICAg
ICAgICAgICAgICBwYXRoID0gbnAKKyAgICAgICAgcmV0dXJuIHBhdGgKKworICAgIGRlZiByZXBy
X3RyYWNlYmFjayhzZWxmLCBleGNpbmZvKToKKyAgICAgICAgdHJhY2ViYWNrID0gZXhjaW5mby50
cmFjZWJhY2sKKyAgICAgICAgaWYgc2VsZi50YmZpbHRlcjoKKyAgICAgICAgICAgIHRyYWNlYmFj
ayA9IHRyYWNlYmFjay5maWx0ZXIoKQorICAgICAgICByZWN1cnNpb25pbmRleCA9IE5vbmUKKyAg
ICAgICAgaWYgZXhjaW5mby5lcnJpc2luc3RhbmNlKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAg
ICBpZiAibWF4aW11bSByZWN1cnNpb24gZGVwdGggZXhjZWVkZWQiIGluIHN0cihleGNpbmZvLnZh
bHVlKToKKyAgICAgICAgICAgICAgICByZWN1cnNpb25pbmRleCA9IHRyYWNlYmFjay5yZWN1cnNp
b25pbmRleCgpCisgICAgICAgIGxhc3QgPSB0cmFjZWJhY2tbLTFdCisgICAgICAgIGVudHJpZXMg
PSBbXQorICAgICAgICBleHRyYWxpbmUgPSBOb25lCisgICAgICAgIGZvciBpbmRleCwgZW50cnkg
aW4gZW51bWVyYXRlKHRyYWNlYmFjayk6CisgICAgICAgICAgICBlaW5mbyA9IChsYXN0ID09IGVu
dHJ5KSBhbmQgZXhjaW5mbyBvciBOb25lCisgICAgICAgICAgICByZXByZW50cnkgPSBzZWxmLnJl
cHJfdHJhY2ViYWNrX2VudHJ5KGVudHJ5LCBlaW5mbykKKyAgICAgICAgICAgIGVudHJpZXMuYXBw
ZW5kKHJlcHJlbnRyeSkKKyAgICAgICAgICAgIGlmIGluZGV4ID09IHJlY3Vyc2lvbmluZGV4Ogor
ICAgICAgICAgICAgICAgIGV4dHJhbGluZSA9ICIhISEgUmVjdXJzaW9uIGRldGVjdGVkIChzYW1l
IGxvY2FscyAmIHBvc2l0aW9uKSIKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICByZXR1
cm4gUmVwclRyYWNlYmFjayhlbnRyaWVzLCBleHRyYWxpbmUsIHN0eWxlPXNlbGYuc3R5bGUpCisK
KyAgICBkZWYgcmVwcl9leGNpbmZvKHNlbGYsIGV4Y2luZm8pOgorICAgICAgICByZXBydHJhY2Vi
YWNrID0gc2VsZi5yZXByX3RyYWNlYmFjayhleGNpbmZvKQorICAgICAgICByZXByY3Jhc2ggPSBl
eGNpbmZvLl9nZXRyZXByY3Jhc2goKQorICAgICAgICByZXR1cm4gUmVwckV4Y2VwdGlvbkluZm8o
cmVwcnRyYWNlYmFjaywgcmVwcmNyYXNoKQorCitjbGFzcyBUZXJtaW5hbFJlcHI6CisgICAgZGVm
IF9fc3RyX18oc2VsZik6CisgICAgICAgIHMgPSBzZWxmLl9fdW5pY29kZV9fKCkKKyAgICAgICAg
aWYgc3lzLnZlcnNpb25faW5mb1swXSA8IDM6CisgICAgICAgICAgICBzID0gcy5lbmNvZGUoJ3V0
Zi04JykKKyAgICAgICAgcmV0dXJuIHMKKworICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKKyAg
ICAgICAgIyBGWUkgdGhpcyBpcyBjYWxsZWQgZnJvbSBweXRlc3QteGRpc3QncyBzZXJpYWxpemF0
aW9uIG9mIGV4Y2VwdGlvbgorICAgICAgICAjIGluZm9ybWF0aW9uLgorICAgICAgICBpbyA9IHB5
LmlvLlRleHRJTygpCisgICAgICAgIHR3ID0gcHkuaW8uVGVybWluYWxXcml0ZXIoZmlsZT1pbykK
KyAgICAgICAgc2VsZi50b3Rlcm1pbmFsKHR3KQorICAgICAgICByZXR1cm4gaW8uZ2V0dmFsdWUo
KS5zdHJpcCgpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiPCVz
IGluc3RhbmNlIGF0ICUweD4iICUoc2VsZi5fX2NsYXNzX18sIGlkKHNlbGYpKQorCisKK2NsYXNz
IFJlcHJFeGNlcHRpb25JbmZvKFRlcm1pbmFsUmVwcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYs
IHJlcHJ0cmFjZWJhY2ssIHJlcHJjcmFzaCk6CisgICAgICAgIHNlbGYucmVwcnRyYWNlYmFjayA9
IHJlcHJ0cmFjZWJhY2sKKyAgICAgICAgc2VsZi5yZXByY3Jhc2ggPSByZXByY3Jhc2gKKyAgICAg
ICAgc2VsZi5zZWN0aW9ucyA9IFtdCisKKyAgICBkZWYgYWRkc2VjdGlvbihzZWxmLCBuYW1lLCBj
b250ZW50LCBzZXA9Ii0iKToKKyAgICAgICAgc2VsZi5zZWN0aW9ucy5hcHBlbmQoKG5hbWUsIGNv
bnRlbnQsIHNlcCkpCisKKyAgICBkZWYgdG90ZXJtaW5hbChzZWxmLCB0dyk6CisgICAgICAgIHNl
bGYucmVwcnRyYWNlYmFjay50b3Rlcm1pbmFsKHR3KQorICAgICAgICBmb3IgbmFtZSwgY29udGVu
dCwgc2VwIGluIHNlbGYuc2VjdGlvbnM6CisgICAgICAgICAgICB0dy5zZXAoc2VwLCBuYW1lKQor
ICAgICAgICAgICAgdHcubGluZShjb250ZW50KQorCitjbGFzcyBSZXByVHJhY2ViYWNrKFRlcm1p
bmFsUmVwcik6CisgICAgZW50cnlzZXAgPSAiXyAiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
cmVwcmVudHJpZXMsIGV4dHJhbGluZSwgc3R5bGUpOgorICAgICAgICBzZWxmLnJlcHJlbnRyaWVz
ID0gcmVwcmVudHJpZXMKKyAgICAgICAgc2VsZi5leHRyYWxpbmUgPSBleHRyYWxpbmUKKyAgICAg
ICAgc2VsZi5zdHlsZSA9IHN0eWxlCisKKyAgICBkZWYgdG90ZXJtaW5hbChzZWxmLCB0dyk6Cisg
ICAgICAgICMgdGhlIGVudHJpZXMgbWlnaHQgaGF2ZSBkaWZmZXJlbnQgc3R5bGVzCisgICAgICAg
IGZvciBpLCBlbnRyeSBpbiBlbnVtZXJhdGUoc2VsZi5yZXByZW50cmllcyk6CisgICAgICAgICAg
ICBpZiBlbnRyeS5zdHlsZSA9PSAibG9uZyI6CisgICAgICAgICAgICAgICAgdHcubGluZSgiIikK
KyAgICAgICAgICAgIGVudHJ5LnRvdGVybWluYWwodHcpCisgICAgICAgICAgICBpZiBpIDwgbGVu
KHNlbGYucmVwcmVudHJpZXMpIC0gMToKKyAgICAgICAgICAgICAgICBuZXh0X2VudHJ5ID0gc2Vs
Zi5yZXByZW50cmllc1tpKzFdCisgICAgICAgICAgICAgICAgaWYgZW50cnkuc3R5bGUgPT0gImxv
bmciIG9yIFwKKyAgICAgICAgICAgICAgICAgICBlbnRyeS5zdHlsZSA9PSAic2hvcnQiIGFuZCBu
ZXh0X2VudHJ5LnN0eWxlID09ICJsb25nIjoKKyAgICAgICAgICAgICAgICAgICAgdHcuc2VwKHNl
bGYuZW50cnlzZXApCisKKyAgICAgICAgaWYgc2VsZi5leHRyYWxpbmU6CisgICAgICAgICAgICB0
dy5saW5lKHNlbGYuZXh0cmFsaW5lKQorCitjbGFzcyBSZXByVHJhY2ViYWNrTmF0aXZlKFJlcHJU
cmFjZWJhY2spOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0YmxpbmVzKToKKyAgICAgICAgc2Vs
Zi5zdHlsZSA9ICJuYXRpdmUiCisgICAgICAgIHNlbGYucmVwcmVudHJpZXMgPSBbUmVwckVudHJ5
TmF0aXZlKHRibGluZXMpXQorICAgICAgICBzZWxmLmV4dHJhbGluZSA9IE5vbmUKKworY2xhc3Mg
UmVwckVudHJ5TmF0aXZlKFRlcm1pbmFsUmVwcik6CisgICAgc3R5bGUgPSAibmF0aXZlIgorCisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIHRibGluZXMpOgorICAgICAgICBzZWxmLmxpbmVzID0gdGJs
aW5lcworCisgICAgZGVmIHRvdGVybWluYWwoc2VsZiwgdHcpOgorICAgICAgICB0dy53cml0ZSgi
Ii5qb2luKHNlbGYubGluZXMpKQorCitjbGFzcyBSZXByRW50cnkoVGVybWluYWxSZXByKToKKyAg
ICBsb2NhbHNzZXAgPSAiXyAiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbGluZXMsIHJlcHJm
dW5jYXJncywgcmVwcmxvY2FscywgZmlsZWxvY3JlcHIsIHN0eWxlKToKKyAgICAgICAgc2VsZi5s
aW5lcyA9IGxpbmVzCisgICAgICAgIHNlbGYucmVwcmZ1bmNhcmdzID0gcmVwcmZ1bmNhcmdzCisg
ICAgICAgIHNlbGYucmVwcmxvY2FscyA9IHJlcHJsb2NhbHMKKyAgICAgICAgc2VsZi5yZXByZmls
ZWxvYyA9IGZpbGVsb2NyZXByCisgICAgICAgIHNlbGYuc3R5bGUgPSBzdHlsZQorCisgICAgZGVm
IHRvdGVybWluYWwoc2VsZiwgdHcpOgorICAgICAgICBpZiBzZWxmLnN0eWxlID09ICJzaG9ydCI6
CisgICAgICAgICAgICBzZWxmLnJlcHJmaWxlbG9jLnRvdGVybWluYWwodHcpCisgICAgICAgICAg
ICBmb3IgbGluZSBpbiBzZWxmLmxpbmVzOgorICAgICAgICAgICAgICAgIHJlZCA9IGxpbmUuc3Rh
cnRzd2l0aCgiRSAgICIpCisgICAgICAgICAgICAgICAgdHcubGluZShsaW5lLCBib2xkPVRydWUs
IHJlZD1yZWQpCisgICAgICAgICAgICAjdHcubGluZSgiIikKKyAgICAgICAgICAgIHJldHVybgor
ICAgICAgICBpZiBzZWxmLnJlcHJmdW5jYXJnczoKKyAgICAgICAgICAgIHNlbGYucmVwcmZ1bmNh
cmdzLnRvdGVybWluYWwodHcpCisgICAgICAgIGZvciBsaW5lIGluIHNlbGYubGluZXM6CisgICAg
ICAgICAgICByZWQgPSBsaW5lLnN0YXJ0c3dpdGgoIkUgICAiKQorICAgICAgICAgICAgdHcubGlu
ZShsaW5lLCBib2xkPVRydWUsIHJlZD1yZWQpCisgICAgICAgIGlmIHNlbGYucmVwcmxvY2FsczoK
KyAgICAgICAgICAgICN0dy5zZXAoc2VsZi5sb2NhbHNzZXAsICJMb2NhbHMiKQorICAgICAgICAg
ICAgdHcubGluZSgiIikKKyAgICAgICAgICAgIHNlbGYucmVwcmxvY2Fscy50b3Rlcm1pbmFsKHR3
KQorICAgICAgICBpZiBzZWxmLnJlcHJmaWxlbG9jOgorICAgICAgICAgICAgaWYgc2VsZi5saW5l
czoKKyAgICAgICAgICAgICAgICB0dy5saW5lKCIiKQorICAgICAgICAgICAgc2VsZi5yZXByZmls
ZWxvYy50b3Rlcm1pbmFsKHR3KQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJl
dHVybiAiJXNcbiVzXG4lcyIgJSAoIlxuIi5qb2luKHNlbGYubGluZXMpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNlbGYucmVwcmxvY2FscywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxmLnJlcHJmaWxlbG9jKQorCitjbGFzcyBSZXByRmlsZUxvY2F0aW9uKFRl
cm1pbmFsUmVwcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgsIGxpbmVubywgbWVzc2Fn
ZSk6CisgICAgICAgIHNlbGYucGF0aCA9IHN0cihwYXRoKQorICAgICAgICBzZWxmLmxpbmVubyA9
IGxpbmVubworICAgICAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlCisKKyAgICBkZWYgdG90ZXJt
aW5hbChzZWxmLCB0dyk6CisgICAgICAgICMgZmlsZW5hbWUgYW5kIGxpbmVubyBvdXRwdXQgZm9y
IGVhY2ggZW50cnksCisgICAgICAgICMgdXNpbmcgYW4gb3V0cHV0IGZvcm1hdCB0aGF0IG1vc3Qg
ZWRpdG9ycyB1bnRlcnN0YW5kCisgICAgICAgIG1zZyA9IHNlbGYubWVzc2FnZQorICAgICAgICBp
ID0gbXNnLmZpbmQoIlxuIikKKyAgICAgICAgaWYgaSAhPSAtMToKKyAgICAgICAgICAgIG1zZyA9
IG1zZ1s6aV0KKyAgICAgICAgdHcubGluZSgiJXM6JXM6ICVzIiAlKHNlbGYucGF0aCwgc2VsZi5s
aW5lbm8sIG1zZykpCisKK2NsYXNzIFJlcHJMb2NhbHMoVGVybWluYWxSZXByKToKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgbGluZXMpOgorICAgICAgICBzZWxmLmxpbmVzID0gbGluZXMKKworICAg
IGRlZiB0b3Rlcm1pbmFsKHNlbGYsIHR3KToKKyAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5saW5l
czoKKyAgICAgICAgICAgIHR3LmxpbmUobGluZSkKKworY2xhc3MgUmVwckZ1bmNBcmdzKFRlcm1p
bmFsUmVwcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFyZ3MpOgorICAgICAgICBzZWxmLmFy
Z3MgPSBhcmdzCisKKyAgICBkZWYgdG90ZXJtaW5hbChzZWxmLCB0dyk6CisgICAgICAgIGlmIHNl
bGYuYXJnczoKKyAgICAgICAgICAgIGxpbmVzb2ZhciA9ICIiCisgICAgICAgICAgICBmb3IgbmFt
ZSwgdmFsdWUgaW4gc2VsZi5hcmdzOgorICAgICAgICAgICAgICAgIG5zID0gIiVzID0gJXMiICUo
bmFtZSwgdmFsdWUpCisgICAgICAgICAgICAgICAgaWYgbGVuKG5zKSArIGxlbihsaW5lc29mYXIp
ICsgMiA+IHR3LmZ1bGx3aWR0aDoKKyAgICAgICAgICAgICAgICAgICAgaWYgbGluZXNvZmFyOgor
ICAgICAgICAgICAgICAgICAgICAgICAgdHcubGluZShsaW5lc29mYXIpCisgICAgICAgICAgICAg
ICAgICAgIGxpbmVzb2ZhciA9ICBucworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICAgICAgICAgIGlmIGxpbmVzb2ZhcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzb2Zh
ciArPSAiLCAiICsgbnMKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGxpbmVzb2ZhciA9IG5zCisgICAgICAgICAgICBpZiBsaW5lc29mYXI6CisgICAg
ICAgICAgICAgICAgdHcubGluZShsaW5lc29mYXIpCisgICAgICAgICAgICB0dy5saW5lKCIiKQor
CisKKworb2xkYnVpbHRpbnMgPSB7fQorCitkZWYgcGF0Y2hfYnVpbHRpbnMoYXNzZXJ0aW9uPVRy
dWUsIGNvbXBpbGU9VHJ1ZSk6CisgICAgIiIiIHB1dCBjb21waWxlIGFuZCBBc3NlcnRpb25FcnJv
ciBidWlsdGlucyB0byBQeXRob24ncyBidWlsdGlucy4gIiIiCisgICAgaWYgYXNzZXJ0aW9uOgor
ICAgICAgICBmcm9tIF9weXRlc3QuYXNzZXJ0aW9uIGltcG9ydCByZWludGVycHJldAorICAgICAg
ICBsID0gb2xkYnVpbHRpbnMuc2V0ZGVmYXVsdCgnQXNzZXJ0aW9uRXJyb3InLCBbXSkKKyAgICAg
ICAgbC5hcHBlbmQocHkuYnVpbHRpbi5idWlsdGlucy5Bc3NlcnRpb25FcnJvcikKKyAgICAgICAg
cHkuYnVpbHRpbi5idWlsdGlucy5Bc3NlcnRpb25FcnJvciA9IHJlaW50ZXJwcmV0LkFzc2VydGlv
bkVycm9yCisgICAgaWYgY29tcGlsZToKKyAgICAgICAgaW1wb3J0IF9weXRlc3QuX2NvZGUKKyAg
ICAgICAgbCA9IG9sZGJ1aWx0aW5zLnNldGRlZmF1bHQoJ2NvbXBpbGUnLCBbXSkKKyAgICAgICAg
bC5hcHBlbmQocHkuYnVpbHRpbi5idWlsdGlucy5jb21waWxlKQorICAgICAgICBweS5idWlsdGlu
LmJ1aWx0aW5zLmNvbXBpbGUgPSBfcHl0ZXN0Ll9jb2RlLmNvbXBpbGUKKworZGVmIHVucGF0Y2hf
YnVpbHRpbnMoYXNzZXJ0aW9uPVRydWUsIGNvbXBpbGU9VHJ1ZSk6CisgICAgIiIiIHJlbW92ZSBj
b21waWxlIGFuZCBBc3NlcnRpb25FcnJvciBidWlsdGlucyBmcm9tIFB5dGhvbiBidWlsdGlucy4g
IiIiCisgICAgaWYgYXNzZXJ0aW9uOgorICAgICAgICBweS5idWlsdGluLmJ1aWx0aW5zLkFzc2Vy
dGlvbkVycm9yID0gb2xkYnVpbHRpbnNbJ0Fzc2VydGlvbkVycm9yJ10ucG9wKCkKKyAgICBpZiBj
b21waWxlOgorICAgICAgICBweS5idWlsdGluLmJ1aWx0aW5zLmNvbXBpbGUgPSBvbGRidWlsdGlu
c1snY29tcGlsZSddLnBvcCgpCisKK2RlZiBnZXRyYXdjb2RlKG9iaiwgdHJ5Y2FsbD1UcnVlKToK
KyAgICAiIiIgcmV0dXJuIGNvZGUgb2JqZWN0IGZvciBnaXZlbiBmdW5jdGlvbi4gIiIiCisgICAg
dHJ5OgorICAgICAgICByZXR1cm4gb2JqLl9fY29kZV9fCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVy
cm9yOgorICAgICAgICBvYmogPSBnZXRhdHRyKG9iaiwgJ2ltX2Z1bmMnLCBvYmopCisgICAgICAg
IG9iaiA9IGdldGF0dHIob2JqLCAnZnVuY19jb2RlJywgb2JqKQorICAgICAgICBvYmogPSBnZXRh
dHRyKG9iaiwgJ2ZfY29kZScsIG9iaikKKyAgICAgICAgb2JqID0gZ2V0YXR0cihvYmosICdfX2Nv
ZGVfXycsIG9iaikKKyAgICAgICAgaWYgdHJ5Y2FsbCBhbmQgbm90IGhhc2F0dHIob2JqLCAnY29f
Zmlyc3RsaW5lbm8nKToKKyAgICAgICAgICAgIGlmIGhhc2F0dHIob2JqLCAnX19jYWxsX18nKSBh
bmQgbm90IHB5LnN0ZC5pbnNwZWN0LmlzY2xhc3Mob2JqKToKKyAgICAgICAgICAgICAgICB4ID0g
Z2V0cmF3Y29kZShvYmouX19jYWxsX18sIHRyeWNhbGw9RmFsc2UpCisgICAgICAgICAgICAgICAg
aWYgaGFzYXR0cih4LCAnY29fZmlyc3RsaW5lbm8nKToKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHgKKyAgICAgICAgcmV0dXJuIG9iagorCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9p
bXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvX2NvZGUvc291cmNlLnB5IGIvV2ViRHJp
dmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L19jb2RlL3NvdXJjZS5w
eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYTE1MjFmOGEyMTIKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0
L19weXRlc3QvX2NvZGUvc291cmNlLnB5CkBAIC0wLDAgKzEsNDIxIEBACitmcm9tIF9fZnV0dXJl
X18gaW1wb3J0IGdlbmVyYXRvcnMKKworZnJvbSBiaXNlY3QgaW1wb3J0IGJpc2VjdF9yaWdodAor
aW1wb3J0IHN5cworaW1wb3J0IGluc3BlY3QsIHRva2VuaXplCitpbXBvcnQgcHkKK2Zyb20gdHlw
ZXMgaW1wb3J0IE1vZHVsZVR5cGUKK2NweV9jb21waWxlID0gY29tcGlsZQorCit0cnk6CisgICAg
aW1wb3J0IF9hc3QKKyAgICBmcm9tIF9hc3QgaW1wb3J0IFB5Q0ZfT05MWV9BU1QgYXMgX0FTVF9G
TEFHCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgX0FTVF9GTEFHID0gMAorICAgIF9hc3QgPSBO
b25lCisKKworY2xhc3MgU291cmNlKG9iamVjdCk6CisgICAgIiIiIGEgaW1tdXRhYmxlIG9iamVj
dCBob2xkaW5nIGEgc291cmNlIGNvZGUgZnJhZ21lbnQsCisgICAgICAgIHBvc3NpYmx5IGRlaW5k
ZW50aW5nIGl0LgorICAgICIiIgorICAgIF9jb21waWxlY291bnRlciA9IDAKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgKnBhcnRzLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYubGluZXMgPSBsaW5l
cyA9IFtdCisgICAgICAgIGRlID0ga3dhcmdzLmdldCgnZGVpbmRlbnQnLCBUcnVlKQorICAgICAg
ICByc3RyaXAgPSBrd2FyZ3MuZ2V0KCdyc3RyaXAnLCBUcnVlKQorICAgICAgICBmb3IgcGFydCBp
biBwYXJ0czoKKyAgICAgICAgICAgIGlmIG5vdCBwYXJ0OgorICAgICAgICAgICAgICAgIHBhcnRs
aW5lcyA9IFtdCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHBhcnQsIFNvdXJjZSk6CisgICAg
ICAgICAgICAgICAgcGFydGxpbmVzID0gcGFydC5saW5lcworICAgICAgICAgICAgZWxpZiBpc2lu
c3RhbmNlKHBhcnQsICh0dXBsZSwgbGlzdCkpOgorICAgICAgICAgICAgICAgIHBhcnRsaW5lcyA9
IFt4LnJzdHJpcCgiXG4iKSBmb3IgeCBpbiBwYXJ0XQorICAgICAgICAgICAgZWxpZiBpc2luc3Rh
bmNlKHBhcnQsIHB5LmJ1aWx0aW4uX2Jhc2VzdHJpbmcpOgorICAgICAgICAgICAgICAgIHBhcnRs
aW5lcyA9IHBhcnQuc3BsaXQoJ1xuJykKKyAgICAgICAgICAgICAgICBpZiByc3RyaXA6CisgICAg
ICAgICAgICAgICAgICAgIHdoaWxlIHBhcnRsaW5lczoKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIHBhcnRsaW5lc1stMV0uc3RyaXAoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhaworICAgICAgICAgICAgICAgICAgICAgICAgcGFydGxpbmVzLnBvcCgpCisgICAgICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgICAgIHBhcnRsaW5lcyA9IGdldHNvdXJjZShwYXJ0LCBkZWlu
ZGVudD1kZSkubGluZXMKKyAgICAgICAgICAgIGlmIGRlOgorICAgICAgICAgICAgICAgIHBhcnRs
aW5lcyA9IGRlaW5kZW50KHBhcnRsaW5lcykKKyAgICAgICAgICAgIGxpbmVzLmV4dGVuZChwYXJ0
bGluZXMpCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgcmV0dXJuIHNlbGYubGluZXMgPT0gb3RoZXIubGluZXMKKyAgICAgICAgZXhjZXB0
IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgc3RyKToK
KyAgICAgICAgICAgICAgICByZXR1cm4gc3RyKHNlbGYpID09IG90aGVyCisgICAgICAgICAgICBy
ZXR1cm4gRmFsc2UKKworICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICBp
ZiBpc2luc3RhbmNlKGtleSwgaW50KToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmxpbmVzW2tl
eV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGtleS5zdGVwIG5vdCBpbiAoTm9uZSwg
MSk6CisgICAgICAgICAgICAgICAgcmFpc2UgSW5kZXhFcnJvcigiY2Fubm90IHNsaWNlIGEgU291
cmNlIHdpdGggYSBzdGVwIikKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9fZ2V0c2xpY2VfXyhr
ZXkuc3RhcnQsIGtleS5zdG9wKQorCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJl
dHVybiBsZW4oc2VsZi5saW5lcykKKworICAgIGRlZiBfX2dldHNsaWNlX18oc2VsZiwgc3RhcnQs
IGVuZCk6CisgICAgICAgIG5ld3NvdXJjZSA9IFNvdXJjZSgpCisgICAgICAgIG5ld3NvdXJjZS5s
aW5lcyA9IHNlbGYubGluZXNbc3RhcnQ6ZW5kXQorICAgICAgICByZXR1cm4gbmV3c291cmNlCisK
KyAgICBkZWYgc3RyaXAoc2VsZik6CisgICAgICAgICIiIiByZXR1cm4gbmV3IHNvdXJjZSBvYmpl
Y3Qgd2l0aCB0cmFpbGluZworICAgICAgICAgICAgYW5kIGxlYWRpbmcgYmxhbmsgbGluZXMgcmVt
b3ZlZC4KKyAgICAgICAgIiIiCisgICAgICAgIHN0YXJ0LCBlbmQgPSAwLCBsZW4oc2VsZikKKyAg
ICAgICAgd2hpbGUgc3RhcnQgPCBlbmQgYW5kIG5vdCBzZWxmLmxpbmVzW3N0YXJ0XS5zdHJpcCgp
OgorICAgICAgICAgICAgc3RhcnQgKz0gMQorICAgICAgICB3aGlsZSBlbmQgPiBzdGFydCBhbmQg
bm90IHNlbGYubGluZXNbZW5kLTFdLnN0cmlwKCk6CisgICAgICAgICAgICBlbmQgLT0gMQorICAg
ICAgICBzb3VyY2UgPSBTb3VyY2UoKQorICAgICAgICBzb3VyY2UubGluZXNbOl0gPSBzZWxmLmxp
bmVzW3N0YXJ0OmVuZF0KKyAgICAgICAgcmV0dXJuIHNvdXJjZQorCisgICAgZGVmIHB1dGFyb3Vu
ZChzZWxmLCBiZWZvcmU9JycsIGFmdGVyPScnLCBpbmRlbnQ9JyAnICogNCk6CisgICAgICAgICIi
IiByZXR1cm4gYSBjb3B5IG9mIHRoZSBzb3VyY2Ugb2JqZWN0IHdpdGgKKyAgICAgICAgICAgICdi
ZWZvcmUnIGFuZCAnYWZ0ZXInIHdyYXBwZWQgYXJvdW5kIGl0LgorICAgICAgICAiIiIKKyAgICAg
ICAgYmVmb3JlID0gU291cmNlKGJlZm9yZSkKKyAgICAgICAgYWZ0ZXIgPSBTb3VyY2UoYWZ0ZXIp
CisgICAgICAgIG5ld3NvdXJjZSA9IFNvdXJjZSgpCisgICAgICAgIGxpbmVzID0gWyAoaW5kZW50
ICsgbGluZSkgZm9yIGxpbmUgaW4gc2VsZi5saW5lc10KKyAgICAgICAgbmV3c291cmNlLmxpbmVz
ID0gYmVmb3JlLmxpbmVzICsgbGluZXMgKyAgYWZ0ZXIubGluZXMKKyAgICAgICAgcmV0dXJuIG5l
d3NvdXJjZQorCisgICAgZGVmIGluZGVudChzZWxmLCBpbmRlbnQ9JyAnICogNCk6CisgICAgICAg
ICIiIiByZXR1cm4gYSBjb3B5IG9mIHRoZSBzb3VyY2Ugb2JqZWN0IHdpdGgKKyAgICAgICAgICAg
IGFsbCBsaW5lcyBpbmRlbnRlZCBieSB0aGUgZ2l2ZW4gaW5kZW50LXN0cmluZy4KKyAgICAgICAg
IiIiCisgICAgICAgIG5ld3NvdXJjZSA9IFNvdXJjZSgpCisgICAgICAgIG5ld3NvdXJjZS5saW5l
cyA9IFsoaW5kZW50K2xpbmUpIGZvciBsaW5lIGluIHNlbGYubGluZXNdCisgICAgICAgIHJldHVy
biBuZXdzb3VyY2UKKworICAgIGRlZiBnZXRzdGF0ZW1lbnQoc2VsZiwgbGluZW5vLCBhc3NlcnRp
b249RmFsc2UpOgorICAgICAgICAiIiIgcmV0dXJuIFNvdXJjZSBzdGF0ZW1lbnQgd2hpY2ggY29u
dGFpbnMgdGhlCisgICAgICAgICAgICBnaXZlbiBsaW5lbnVtYmVyIChjb3VudGVkIGZyb20gMCku
CisgICAgICAgICIiIgorICAgICAgICBzdGFydCwgZW5kID0gc2VsZi5nZXRzdGF0ZW1lbnRyYW5n
ZShsaW5lbm8sIGFzc2VydGlvbikKKyAgICAgICAgcmV0dXJuIHNlbGZbc3RhcnQ6ZW5kXQorCisg
ICAgZGVmIGdldHN0YXRlbWVudHJhbmdlKHNlbGYsIGxpbmVubywgYXNzZXJ0aW9uPUZhbHNlKToK
KyAgICAgICAgIiIiIHJldHVybiAoc3RhcnQsIGVuZCkgdHVwbGUgd2hpY2ggc3BhbnMgdGhlIG1p
bmltYWwKKyAgICAgICAgICAgIHN0YXRlbWVudCByZWdpb24gd2hpY2ggY29udGFpbmluZyB0aGUg
Z2l2ZW4gbGluZW5vLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90ICgwIDw9IGxpbmVubyA8
IGxlbihzZWxmKSk6CisgICAgICAgICAgICByYWlzZSBJbmRleEVycm9yKCJsaW5lbm8gb3V0IG9m
IHJhbmdlIikKKyAgICAgICAgYXN0LCBzdGFydCwgZW5kID0gZ2V0c3RhdGVtZW50cmFuZ2VfYXN0
KGxpbmVubywgc2VsZikKKyAgICAgICAgcmV0dXJuIHN0YXJ0LCBlbmQKKworICAgIGRlZiBkZWlu
ZGVudChzZWxmLCBvZmZzZXQ9Tm9uZSk6CisgICAgICAgICIiIiByZXR1cm4gYSBuZXcgc291cmNl
IG9iamVjdCBkZWluZGVudGVkIGJ5IG9mZnNldC4KKyAgICAgICAgICAgIElmIG9mZnNldCBpcyBO
b25lIHRoZW4gZ3Vlc3MgYW4gaW5kZW50YXRpb24gb2Zmc2V0IGZyb20KKyAgICAgICAgICAgIHRo
ZSBmaXJzdCBub24tYmxhbmsgbGluZS4gIFN1YnNlcXVlbnQgbGluZXMgd2hpY2ggaGF2ZSBhCisg
ICAgICAgICAgICBsb3dlciBpbmRlbnRhdGlvbiBvZmZzZXQgd2lsbCBiZSBjb3BpZWQgdmVyYmF0
aW0gYXMKKyAgICAgICAgICAgIHRoZXkgYXJlIGFzc3VtZWQgdG8gYmUgcGFydCBvZiBtdWx0aWxp
bmVzLgorICAgICAgICAiIiIKKyAgICAgICAgIyBYWFggbWF5YmUgdXNlIHRoZSB0b2tlbml6ZXIg
dG8gcHJvcGVybHkgaGFuZGxlIG11bHRpbGluZQorICAgICAgICAjICAgICBzdHJpbmdzIGV0Yy5w
cD8KKyAgICAgICAgbmV3c291cmNlID0gU291cmNlKCkKKyAgICAgICAgbmV3c291cmNlLmxpbmVz
WzpdID0gZGVpbmRlbnQoc2VsZi5saW5lcywgb2Zmc2V0KQorICAgICAgICByZXR1cm4gbmV3c291
cmNlCisKKyAgICBkZWYgaXNwYXJzZWFibGUoc2VsZiwgZGVpbmRlbnQ9VHJ1ZSk6CisgICAgICAg
ICIiIiByZXR1cm4gVHJ1ZSBpZiBzb3VyY2UgaXMgcGFyc2VhYmxlLCBoZXVyaXN0aWNhbGx5Cisg
ICAgICAgICAgICBkZWluZGVudGluZyBpdCBieSBkZWZhdWx0LgorICAgICAgICAiIiIKKyAgICAg
ICAgdHJ5OgorICAgICAgICAgICAgaW1wb3J0IHBhcnNlcgorICAgICAgICBleGNlcHQgSW1wb3J0
RXJyb3I6CisgICAgICAgICAgICBzeW50YXhfY2hlY2tlciA9IGxhbWJkYSB4OiBjb21waWxlKHgs
ICdhc2QnLCAnZXhlYycpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzeW50YXhfY2hlY2tl
ciA9IHBhcnNlci5zdWl0ZQorCisgICAgICAgIGlmIGRlaW5kZW50OgorICAgICAgICAgICAgc291
cmNlID0gc3RyKHNlbGYuZGVpbmRlbnQoKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNv
dXJjZSA9IHN0cihzZWxmKQorICAgICAgICB0cnk6CisgICAgICAgICAgICAjY29tcGlsZShzb3Vy
Y2UrJ1xuJywgIngiLCAiZXhlYyIpCisgICAgICAgICAgICBzeW50YXhfY2hlY2tlcihzb3VyY2Ur
J1xuJykKKyAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgcmFp
c2UKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQor
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfX3N0cl9f
KHNlbGYpOgorICAgICAgICByZXR1cm4gIlxuIi5qb2luKHNlbGYubGluZXMpCisKKyAgICBkZWYg
Y29tcGlsZShzZWxmLCBmaWxlbmFtZT1Ob25lLCBtb2RlPSdleGVjJywKKyAgICAgICAgICAgICAg
ICBmbGFnPWdlbmVyYXRvcnMuY29tcGlsZXJfZmxhZywKKyAgICAgICAgICAgICAgICBkb250X2lu
aGVyaXQ9MCwgX2dlbmZyYW1lPU5vbmUpOgorICAgICAgICAiIiIgcmV0dXJuIGNvbXBpbGVkIGNv
ZGUgb2JqZWN0LiBpZiBmaWxlbmFtZSBpcyBOb25lCisgICAgICAgICAgICBpbnZlbnQgYW4gYXJ0
aWZpY2lhbCBmaWxlbmFtZSB3aGljaCBkaXNwbGF5cworICAgICAgICAgICAgdGhlIHNvdXJjZS9s
aW5lIHBvc2l0aW9uIG9mIHRoZSBjYWxsZXIgZnJhbWUuCisgICAgICAgICIiIgorICAgICAgICBp
ZiBub3QgZmlsZW5hbWUgb3IgcHkucGF0aC5sb2NhbChmaWxlbmFtZSkuY2hlY2soZmlsZT0wKToK
KyAgICAgICAgICAgIGlmIF9nZW5mcmFtZSBpcyBOb25lOgorICAgICAgICAgICAgICAgIF9nZW5m
cmFtZSA9IHN5cy5fZ2V0ZnJhbWUoMSkgIyB0aGUgY2FsbGVyCisgICAgICAgICAgICBmbixsaW5l
bm8gPSBfZ2VuZnJhbWUuZl9jb2RlLmNvX2ZpbGVuYW1lLCBfZ2VuZnJhbWUuZl9saW5lbm8KKyAg
ICAgICAgICAgIGJhc2UgPSAiPCVkLWNvZGVnZW4gIiAlIHNlbGYuX2NvbXBpbGVjb3VudGVyCisg
ICAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5fY29tcGlsZWNvdW50ZXIgKz0gMQorICAgICAgICAg
ICAgaWYgbm90IGZpbGVuYW1lOgorICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gYmFzZSArICcl
czolZD4nICUgKGZuLCBsaW5lbm8pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg
IGZpbGVuYW1lID0gYmFzZSArICclciAlczolZD4nICUgKGZpbGVuYW1lLCBmbiwgbGluZW5vKQor
ICAgICAgICBzb3VyY2UgPSAiXG4iLmpvaW4oc2VsZi5saW5lcykgKyAnXG4nCisgICAgICAgIHRy
eToKKyAgICAgICAgICAgIGNvID0gY3B5X2NvbXBpbGUoc291cmNlLCBmaWxlbmFtZSwgbW9kZSwg
ZmxhZykKKyAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yOgorICAgICAgICAgICAgZXggPSBzeXMu
ZXhjX2luZm8oKVsxXQorICAgICAgICAgICAgIyByZS1yZXByZXNlbnQgc3ludGF4IGVycm9ycyBm
cm9tIHBhcnNpbmcgcHl0aG9uIHN0cmluZ3MKKyAgICAgICAgICAgIG1zZ2xpbmVzID0gc2VsZi5s
aW5lc1s6ZXgubGluZW5vXQorICAgICAgICAgICAgaWYgZXgub2Zmc2V0OgorICAgICAgICAgICAg
ICAgIG1zZ2xpbmVzLmFwcGVuZCgiICIqZXgub2Zmc2V0ICsgJ14nKQorICAgICAgICAgICAgbXNn
bGluZXMuYXBwZW5kKCIoY29kZSB3YXMgY29tcGlsZWQgcHJvYmFibHkgZnJvbSBoZXJlOiAlcyki
ICUgZmlsZW5hbWUpCisgICAgICAgICAgICBuZXdleCA9IFN5bnRheEVycm9yKCdcbicuam9pbiht
c2dsaW5lcykpCisgICAgICAgICAgICBuZXdleC5vZmZzZXQgPSBleC5vZmZzZXQKKyAgICAgICAg
ICAgIG5ld2V4LmxpbmVubyA9IGV4LmxpbmVubworICAgICAgICAgICAgbmV3ZXgudGV4dCA9IGV4
LnRleHQKKyAgICAgICAgICAgIHJhaXNlIG5ld2V4CisgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICBpZiBmbGFnICYgX0FTVF9GTEFHOgorICAgICAgICAgICAgICAgIHJldHVybiBjbworICAgICAg
ICAgICAgbGluZXMgPSBbKHggKyAiXG4iKSBmb3IgeCBpbiBzZWxmLmxpbmVzXQorICAgICAgICAg
ICAgaWYgc3lzLnZlcnNpb25faW5mb1swXSA+PSAzOgorICAgICAgICAgICAgICAgICMgWFhYIHB5
MydzIGluc3BlY3QuZ2V0c291cmNlZmlsZSgpIGNoZWNrcyBmb3IgYSBtb2R1bGUKKyAgICAgICAg
ICAgICAgICAjIGFuZCBhIHBlcDMwMiBfX2xvYWRlcl9fIC4uLiB3ZSBkb24ndCBoYXZlIGEgbW9k
dWxlCisgICAgICAgICAgICAgICAgIyBhdCBjb2RlIGNvbXBpbGUtdGltZSBzbyB3ZSBuZWVkIHRv
IGZha2UgaXQgaGVyZQorICAgICAgICAgICAgICAgIG0gPSBNb2R1bGVUeXBlKCJfcHljb2RlY29t
cGlsZV9wc2V1ZG9fbW9kdWxlIikKKyAgICAgICAgICAgICAgICBweS5zdGQuaW5zcGVjdC5tb2R1
bGVzYnlmaWxlW2ZpbGVuYW1lXSA9IE5vbmUKKyAgICAgICAgICAgICAgICBweS5zdGQuc3lzLm1v
ZHVsZXNbTm9uZV0gPSBtCisgICAgICAgICAgICAgICAgbS5fX2xvYWRlcl9fID0gMQorICAgICAg
ICAgICAgcHkuc3RkLmxpbmVjYWNoZS5jYWNoZVtmaWxlbmFtZV0gPSAoMSwgTm9uZSwgbGluZXMs
IGZpbGVuYW1lKQorICAgICAgICAgICAgcmV0dXJuIGNvCisKKyMKKyMgcHVibGljIEFQSSBzaG9y
dGN1dCBmdW5jdGlvbnMKKyMKKworZGVmIGNvbXBpbGVfKHNvdXJjZSwgZmlsZW5hbWU9Tm9uZSwg
bW9kZT0nZXhlYycsIGZsYWdzPQorICAgICAgICAgICAgZ2VuZXJhdG9ycy5jb21waWxlcl9mbGFn
LCBkb250X2luaGVyaXQ9MCk6CisgICAgIiIiIGNvbXBpbGUgdGhlIGdpdmVuIHNvdXJjZSB0byBh
IHJhdyBjb2RlIG9iamVjdCwKKyAgICAgICAgYW5kIG1haW50YWluIGFuIGludGVybmFsIGNhY2hl
IHdoaWNoIGFsbG93cyBsYXRlcgorICAgICAgICByZXRyaWV2YWwgb2YgdGhlIHNvdXJjZSBjb2Rl
IGZvciB0aGUgY29kZSBvYmplY3QKKyAgICAgICAgYW5kIGFueSByZWN1cnNpdmVseSBjcmVhdGVk
IGNvZGUgb2JqZWN0cy4KKyAgICAiIiIKKyAgICBpZiBfYXN0IGlzIG5vdCBOb25lIGFuZCBpc2lu
c3RhbmNlKHNvdXJjZSwgX2FzdC5BU1QpOgorICAgICAgICAjIFhYWCBzaG91bGQgU291cmNlIHN1
cHBvcnQgaGF2aW5nIEFTVD8KKyAgICAgICAgcmV0dXJuIGNweV9jb21waWxlKHNvdXJjZSwgZmls
ZW5hbWUsIG1vZGUsIGZsYWdzLCBkb250X2luaGVyaXQpCisgICAgX2dlbmZyYW1lID0gc3lzLl9n
ZXRmcmFtZSgxKSAjIHRoZSBjYWxsZXIKKyAgICBzID0gU291cmNlKHNvdXJjZSkKKyAgICBjbyA9
IHMuY29tcGlsZShmaWxlbmFtZSwgbW9kZSwgZmxhZ3MsIF9nZW5mcmFtZT1fZ2VuZnJhbWUpCisg
ICAgcmV0dXJuIGNvCisKKworZGVmIGdldGZzbGluZW5vKG9iaik6CisgICAgIiIiIFJldHVybiBz
b3VyY2UgbG9jYXRpb24gKHBhdGgsIGxpbmVubykgZm9yIHRoZSBnaXZlbiBvYmplY3QuCisgICAg
SWYgdGhlIHNvdXJjZSBjYW5ub3QgYmUgZGV0ZXJtaW5lZCByZXR1cm4gKCIiLCAtMSkKKyAgICAi
IiIKKyAgICBpbXBvcnQgX3B5dGVzdC5fY29kZQorICAgIHRyeToKKyAgICAgICAgY29kZSA9IF9w
eXRlc3QuX2NvZGUuQ29kZShvYmopCisgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgdHJ5
OgorICAgICAgICAgICAgZm4gPSAocHkuc3RkLmluc3BlY3QuZ2V0c291cmNlZmlsZShvYmopIG9y
CisgICAgICAgICAgICAgICAgICBweS5zdGQuaW5zcGVjdC5nZXRmaWxlKG9iaikpCisgICAgICAg
IGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gIiIsIC0xCisKKyAgICAgICAg
ZnNwYXRoID0gZm4gYW5kIHB5LnBhdGgubG9jYWwoZm4pIG9yIE5vbmUKKyAgICAgICAgbGluZW5v
ID0gLTEKKyAgICAgICAgaWYgZnNwYXRoOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAg
ICAgIF8sIGxpbmVubyA9IGZpbmRzb3VyY2Uob2JqKQorICAgICAgICAgICAgZXhjZXB0IElPRXJy
b3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgIGVsc2U6CisgICAgICAgIGZzcGF0aCA9IGNv
ZGUucGF0aAorICAgICAgICBsaW5lbm8gPSBjb2RlLmZpcnN0bGluZW5vCisgICAgYXNzZXJ0IGlz
aW5zdGFuY2UobGluZW5vLCBpbnQpCisgICAgcmV0dXJuIGZzcGF0aCwgbGluZW5vCisKKyMKKyMg
aGVscGVyIGZ1bmN0aW9ucworIworCitkZWYgZmluZHNvdXJjZShvYmopOgorICAgIHRyeToKKyAg
ICAgICAgc291cmNlbGluZXMsIGxpbmVubyA9IHB5LnN0ZC5pbnNwZWN0LmZpbmRzb3VyY2Uob2Jq
KQorICAgIGV4Y2VwdCBweS5idWlsdGluLl9zeXNleDoKKyAgICAgICAgcmFpc2UKKyAgICBleGNl
cHQ6CisgICAgICAgIHJldHVybiBOb25lLCAtMQorICAgIHNvdXJjZSA9IFNvdXJjZSgpCisgICAg
c291cmNlLmxpbmVzID0gW2xpbmUucnN0cmlwKCkgZm9yIGxpbmUgaW4gc291cmNlbGluZXNdCisg
ICAgcmV0dXJuIHNvdXJjZSwgbGluZW5vCisKK2RlZiBnZXRzb3VyY2Uob2JqLCAqKmt3YXJncyk6
CisgICAgaW1wb3J0IF9weXRlc3QuX2NvZGUKKyAgICBvYmogPSBfcHl0ZXN0Ll9jb2RlLmdldHJh
d2NvZGUob2JqKQorICAgIHRyeToKKyAgICAgICAgc3Ryc3JjID0gaW5zcGVjdC5nZXRzb3VyY2Uo
b2JqKQorICAgIGV4Y2VwdCBJbmRlbnRhdGlvbkVycm9yOgorICAgICAgICBzdHJzcmMgPSAiXCJC
dWdneSBweXRob24gdmVyc2lvbiBjb25zaWRlciB1cGdyYWRpbmcsIGNhbm5vdCBnZXQgc291cmNl
XCIiCisgICAgYXNzZXJ0IGlzaW5zdGFuY2Uoc3Ryc3JjLCBzdHIpCisgICAgcmV0dXJuIFNvdXJj
ZShzdHJzcmMsICoqa3dhcmdzKQorCitkZWYgZGVpbmRlbnQobGluZXMsIG9mZnNldD1Ob25lKToK
KyAgICBpZiBvZmZzZXQgaXMgTm9uZToKKyAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAg
ICAgICAgICBsaW5lID0gbGluZS5leHBhbmR0YWJzKCkKKyAgICAgICAgICAgIHMgPSBsaW5lLmxz
dHJpcCgpCisgICAgICAgICAgICBpZiBzOgorICAgICAgICAgICAgICAgIG9mZnNldCA9IGxlbihs
aW5lKS1sZW4ocykKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgb2Zmc2V0ID0gMAorICAgIGlmIG9mZnNldCA9PSAwOgorICAgICAgICByZXR1cm4gbGlz
dChsaW5lcykKKyAgICBuZXdsaW5lcyA9IFtdCisgICAgZGVmIHJlYWRsaW5lX2dlbmVyYXRvcihs
aW5lcyk6CisgICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICAgICAgeWllbGQgbGlu
ZSArICdcbicKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHlpZWxkICcnCisKKyAg
ICBpdCA9IHJlYWRsaW5lX2dlbmVyYXRvcihsaW5lcykKKworICAgIHRyeToKKyAgICAgICAgZm9y
IF8sIF8sIChzbGluZSwgXyksIChlbGluZSwgXyksIF8gaW4gdG9rZW5pemUuZ2VuZXJhdGVfdG9r
ZW5zKGxhbWJkYTogbmV4dChpdCkpOgorICAgICAgICAgICAgaWYgc2xpbmUgPiBsZW4obGluZXMp
OgorICAgICAgICAgICAgICAgIGJyZWFrICMgRW5kIG9mIGlucHV0IHJlYWNoZWQKKyAgICAgICAg
ICAgIGlmIHNsaW5lID4gbGVuKG5ld2xpbmVzKToKKyAgICAgICAgICAgICAgICBsaW5lID0gbGlu
ZXNbc2xpbmUgLSAxXS5leHBhbmR0YWJzKCkKKyAgICAgICAgICAgICAgICBpZiBsaW5lLmxzdHJp
cCgpIGFuZCBsaW5lWzpvZmZzZXRdLmlzc3BhY2UoKToKKyAgICAgICAgICAgICAgICAgICAgbGlu
ZSA9IGxpbmVbb2Zmc2V0Ol0gIyBEZWluZGVudAorICAgICAgICAgICAgICAgIG5ld2xpbmVzLmFw
cGVuZChsaW5lKQorCisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShzbGluZSwgZWxpbmUpOgor
ICAgICAgICAgICAgICAgICMgRG9uJ3QgZGVpbmRlbnQgY29udGludWluZyBsaW5lcyBvZgorICAg
ICAgICAgICAgICAgICMgbXVsdGlsaW5lIHRva2VucyAoaS5lLiBtdWx0aWxpbmUgc3RyaW5ncykK
KyAgICAgICAgICAgICAgICBuZXdsaW5lcy5hcHBlbmQobGluZXNbaV0pCisgICAgZXhjZXB0IChJ
bmRlbnRhdGlvbkVycm9yLCB0b2tlbml6ZS5Ub2tlbkVycm9yKToKKyAgICAgICAgcGFzcworICAg
ICMgQWRkIGFueSBsaW5lcyB3ZSBkaWRuJ3Qgc2VlLiBFLmcuIGlmIGFuIGV4Y2VwdGlvbiB3YXMg
cmFpc2VkLgorICAgIG5ld2xpbmVzLmV4dGVuZChsaW5lc1tsZW4obmV3bGluZXMpOl0pCisgICAg
cmV0dXJuIG5ld2xpbmVzCisKKworZGVmIGdldF9zdGF0ZW1lbnRfc3RhcnRlbmQyKGxpbmVubywg
bm9kZSk6CisgICAgaW1wb3J0IGFzdAorICAgICMgZmxhdHRlbiBhbGwgc3RhdGVtZW50cyBhbmQg
ZXhjZXB0IGhhbmRsZXJzIGludG8gb25lIGxpbmVuby1saXN0CisgICAgIyBBU1QncyBsaW5lIG51
bWJlcnMgc3RhcnQgaW5kZXhpbmcgYXQgMQorICAgIGwgPSBbXQorICAgIGZvciB4IGluIGFzdC53
YWxrKG5vZGUpOgorICAgICAgICBpZiBpc2luc3RhbmNlKHgsIF9hc3Quc3RtdCkgb3IgaXNpbnN0
YW5jZSh4LCBfYXN0LkV4Y2VwdEhhbmRsZXIpOgorICAgICAgICAgICAgbC5hcHBlbmQoeC5saW5l
bm8gLSAxKQorICAgICAgICAgICAgZm9yIG5hbWUgaW4gImZpbmFsYm9keSIsICJvcmVsc2UiOgor
ICAgICAgICAgICAgICAgIHZhbCA9IGdldGF0dHIoeCwgbmFtZSwgTm9uZSkKKyAgICAgICAgICAg
ICAgICBpZiB2YWw6CisgICAgICAgICAgICAgICAgICAgICMgdHJlYXQgdGhlIGZpbmFsbHkvb3Jl
bHNlIHBhcnQgYXMgaXRzIG93biBzdGF0ZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgbC5hcHBl
bmQodmFsWzBdLmxpbmVubyAtIDEgLSAxKQorICAgIGwuc29ydCgpCisgICAgaW5zZXJ0X2luZGV4
ID0gYmlzZWN0X3JpZ2h0KGwsIGxpbmVubykKKyAgICBzdGFydCA9IGxbaW5zZXJ0X2luZGV4IC0g
MV0KKyAgICBpZiBpbnNlcnRfaW5kZXggPj0gbGVuKGwpOgorICAgICAgICBlbmQgPSBOb25lCisg
ICAgZWxzZToKKyAgICAgICAgZW5kID0gbFtpbnNlcnRfaW5kZXhdCisgICAgcmV0dXJuIHN0YXJ0
LCBlbmQKKworCitkZWYgZ2V0c3RhdGVtZW50cmFuZ2VfYXN0KGxpbmVubywgc291cmNlLCBhc3Nl
cnRpb249RmFsc2UsIGFzdG5vZGU9Tm9uZSk6CisgICAgaWYgYXN0bm9kZSBpcyBOb25lOgorICAg
ICAgICBjb250ZW50ID0gc3RyKHNvdXJjZSkKKyAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mbyA8
ICgyLDcpOgorICAgICAgICAgICAgY29udGVudCArPSAiXG4iCisgICAgICAgIHRyeToKKyAgICAg
ICAgICAgIGFzdG5vZGUgPSBjb21waWxlKGNvbnRlbnQsICJzb3VyY2UiLCAiZXhlYyIsIDEwMjQp
ICAjIDEwMjQgZm9yIEFTVAorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAg
IHN0YXJ0LCBlbmQgPSBnZXRzdGF0ZW1lbnRyYW5nZV9vbGQobGluZW5vLCBzb3VyY2UsIGFzc2Vy
dGlvbikKKyAgICAgICAgICAgIHJldHVybiBOb25lLCBzdGFydCwgZW5kCisgICAgc3RhcnQsIGVu
ZCA9IGdldF9zdGF0ZW1lbnRfc3RhcnRlbmQyKGxpbmVubywgYXN0bm9kZSkKKyAgICAjIHdlIG5l
ZWQgdG8gY29ycmVjdCB0aGUgZW5kOgorICAgICMgLSBhc3QtcGFyc2luZyBzdHJpcHMgY29tbWVu
dHMKKyAgICAjIC0gdGhlcmUgbWlnaHQgYmUgZW1wdHkgbGluZXMKKyAgICAjIC0gd2UgbWlnaHQg
aGF2ZSBsZXNzZXIgaW5kZW50ZWQgY29kZSBibG9ja3MgYXQgdGhlIGVuZAorICAgIGlmIGVuZCBp
cyBOb25lOgorICAgICAgICBlbmQgPSBsZW4oc291cmNlLmxpbmVzKQorCisgICAgaWYgZW5kID4g
c3RhcnQgKyAxOgorICAgICAgICAjIG1ha2Ugc3VyZSB3ZSBkb24ndCBzcGFuIGRpZmZlcmVudGx5
IGluZGVudGVkIGNvZGUgYmxvY2tzCisgICAgICAgICMgYnkgdXNpbmcgdGhlIEJsb2NrRmluZGVy
IGhlbHBlciB1c2VkIHdoaWNoIGluc3BlY3QuZ2V0c291cmNlKCkgdXNlcyBpdHNlbGYKKyAgICAg
ICAgYmxvY2tfZmluZGVyID0gaW5zcGVjdC5CbG9ja0ZpbmRlcigpCisgICAgICAgICMgaWYgd2Ug
c3RhcnQgd2l0aCBhbiBpbmRlbnRlZCBsaW5lLCBwdXQgYmxvY2tmaW5kZXIgdG8gInN0YXJ0ZWQi
IG1vZGUKKyAgICAgICAgYmxvY2tfZmluZGVyLnN0YXJ0ZWQgPSBzb3VyY2UubGluZXNbc3RhcnRd
WzBdLmlzc3BhY2UoKQorICAgICAgICBpdCA9ICgoeCArICJcbiIpIGZvciB4IGluIHNvdXJjZS5s
aW5lc1tzdGFydDplbmRdKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgdG9rIGluIHRv
a2VuaXplLmdlbmVyYXRlX3Rva2VucyhsYW1iZGE6IG5leHQoaXQpKToKKyAgICAgICAgICAgICAg
ICBibG9ja19maW5kZXIudG9rZW5lYXRlcigqdG9rKQorICAgICAgICBleGNlcHQgKGluc3BlY3Qu
RW5kT2ZCbG9jaywgSW5kZW50YXRpb25FcnJvcik6CisgICAgICAgICAgICBlbmQgPSBibG9ja19m
aW5kZXIubGFzdCArIHN0YXJ0CisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAg
ICBwYXNzCisKKyAgICAjIHRoZSBlbmQgbWlnaHQgc3RpbGwgcG9pbnQgdG8gYSBjb21tZW50IG9y
IGVtcHR5IGxpbmUsIGNvcnJlY3QgaXQKKyAgICB3aGlsZSBlbmQ6CisgICAgICAgIGxpbmUgPSBz
b3VyY2UubGluZXNbZW5kIC0gMV0ubHN0cmlwKCkKKyAgICAgICAgaWYgbGluZS5zdGFydHN3aXRo
KCIjIikgb3Igbm90IGxpbmU6CisgICAgICAgICAgICBlbmQgLT0gMQorICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgYnJlYWsKKyAgICByZXR1cm4gYXN0bm9kZSwgc3RhcnQsIGVuZAorCisKK2Rl
ZiBnZXRzdGF0ZW1lbnRyYW5nZV9vbGQobGluZW5vLCBzb3VyY2UsIGFzc2VydGlvbj1GYWxzZSk6
CisgICAgIiIiIHJldHVybiAoc3RhcnQsIGVuZCkgdHVwbGUgd2hpY2ggc3BhbnMgdGhlIG1pbmlt
YWwKKyAgICAgICAgc3RhdGVtZW50IHJlZ2lvbiB3aGljaCBjb250YWluaW5nIHRoZSBnaXZlbiBs
aW5lbm8uCisgICAgICAgIHJhaXNlIGFuIEluZGV4RXJyb3IgaWYgbm8gc3VjaCBzdGF0ZW1lbnRy
YW5nZSBjYW4gYmUgZm91bmQuCisgICAgIiIiCisgICAgIyBYWFggdGhpcyBsb2dpYyBpcyBvbmx5
IHVzZWQgb24gcHl0aG9uMi40IGFuZCBiZWxvdworICAgICMgMS4gZmluZCB0aGUgc3RhcnQgb2Yg
dGhlIHN0YXRlbWVudAorICAgIGZyb20gY29kZW9wIGltcG9ydCBjb21waWxlX2NvbW1hbmQKKyAg
ICBmb3Igc3RhcnQgaW4gcmFuZ2UobGluZW5vLCAtMSwgLTEpOgorICAgICAgICBpZiBhc3NlcnRp
b246CisgICAgICAgICAgICBsaW5lID0gc291cmNlLmxpbmVzW3N0YXJ0XQorICAgICAgICAgICAg
IyB0aGUgZm9sbG93aW5nIGxpbmVzIGFyZSBub3QgZnVsbHkgdGVzdGVkLCBjaGFuZ2Ugd2l0aCBj
YXJlCisgICAgICAgICAgICBpZiAnc3VwZXInIGluIGxpbmUgYW5kICdzZWxmJyBpbiBsaW5lIGFu
ZCAnX19pbml0X18nIGluIGxpbmU6CisgICAgICAgICAgICAgICAgcmFpc2UgSW5kZXhFcnJvcigi
bGlrZWx5IGEgc3ViY2xhc3MiKQorICAgICAgICAgICAgaWYgImFzc2VydCIgbm90IGluIGxpbmUg
YW5kICJyYWlzZSIgbm90IGluIGxpbmU6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAg
ICAgdHJ5bGluZXMgPSBzb3VyY2UubGluZXNbc3RhcnQ6bGluZW5vKzFdCisgICAgICAgICMgcXVp
Y2sgaGFjayB0byBwcmVwYXJlIHBhcnNpbmcgYW4gaW5kZW50ZWQgbGluZSB3aXRoCisgICAgICAg
ICMgY29tcGlsZV9jb21tYW5kKCkgKHdoaWNoIGVycm9ycyBvbiAicmV0dXJuIiBvdXRzaWRlIGRl
ZnMpCisgICAgICAgIHRyeWxpbmVzLmluc2VydCgwLCAnZGVmIHh4eCgpOicpCisgICAgICAgIHRy
eXNvdXJjZSA9ICdcbiAnLmpvaW4odHJ5bGluZXMpCisgICAgICAgICMgICAgICAgICAgICAgIF4g
c3BhY2UgaGVyZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjb21waWxlX2NvbW1hbmQodHJ5
c291cmNlKQorICAgICAgICBleGNlcHQgKFN5bnRheEVycm9yLCBPdmVyZmxvd0Vycm9yLCBWYWx1
ZUVycm9yKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgIyAyLiBmaW5kIHRoZSBl
bmQgb2YgdGhlIHN0YXRlbWVudAorICAgICAgICBmb3IgZW5kIGluIHJhbmdlKGxpbmVubysxLCBs
ZW4oc291cmNlKSsxKToKKyAgICAgICAgICAgIHRyeXNvdXJjZSA9IHNvdXJjZVtzdGFydDplbmRd
CisgICAgICAgICAgICBpZiB0cnlzb3VyY2UuaXNwYXJzZWFibGUoKToKKyAgICAgICAgICAgICAg
ICByZXR1cm4gc3RhcnQsIGVuZAorICAgIHJhaXNlIFN5bnRheEVycm9yKCJubyB2YWxpZCBzb3Vy
Y2UgcmFuZ2UgYXJvdW5kIGxpbmUgJWQgIiAlIChsaW5lbm8sKSkKKworCmRpZmYgLS1naXQgYS9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvX3BsdWdneS5w
eSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9fcGx1
Z2d5LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44N2QzMmNmOGRk
MQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9w
eXRlc3QvX3B5dGVzdC9fcGx1Z2d5LnB5CkBAIC0wLDAgKzEsMTEgQEAKKyIiIgoraW1wb3J0cyBz
eW1ib2xzIGZyb20gdmVuZG9yZWQgInBsdWdneSIgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UKK2Zh
bGxzIGJhY2sgdG8gaW1wb3J0aW5nICJwbHVnZ3kiIGZyb20gdGhlIGRlZmF1bHQgbmFtZXNwYWNl
LgorIiIiCisKK3RyeToKKyAgICBmcm9tIF9weXRlc3QudmVuZG9yZWRfcGFja2FnZXMucGx1Z2d5
IGltcG9ydCAqICAjIG5vcWEKKyAgICBmcm9tIF9weXRlc3QudmVuZG9yZWRfcGFja2FnZXMucGx1
Z2d5IGltcG9ydCBfX3ZlcnNpb25fXyAgIyBub3FhCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAg
ZnJvbSBwbHVnZ3kgaW1wb3J0ICogICMgbm9xYQorICAgIGZyb20gcGx1Z2d5IGltcG9ydCBfX3Zl
cnNpb25fXyAgIyBub3FhCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mv
dG9vbHMvcHl0ZXN0L19weXRlc3QvYXNzZXJ0aW9uL19faW5pdF9fLnB5IGIvV2ViRHJpdmVyVGVz
dHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L2Fzc2VydGlvbi9fX2luaXRfXy5w
eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNjkyMWRlYjJhNjAKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0
L19weXRlc3QvYXNzZXJ0aW9uL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMTc2IEBACisiIiIKK3N1
cHBvcnQgZm9yIHByZXNlbnRpbmcgZGV0YWlsZWQgaW5mb3JtYXRpb24gaW4gZmFpbGluZyBhc3Nl
cnRpb25zLgorIiIiCitpbXBvcnQgcHkKK2ltcG9ydCBvcworaW1wb3J0IHN5cworZnJvbSBfcHl0
ZXN0Lm1vbmtleXBhdGNoIGltcG9ydCBtb25rZXlwYXRjaAorZnJvbSBfcHl0ZXN0LmFzc2VydGlv
biBpbXBvcnQgdXRpbAorCisKK2RlZiBweXRlc3RfYWRkb3B0aW9uKHBhcnNlcik6CisgICAgZ3Jv
dXAgPSBwYXJzZXIuZ2V0Z3JvdXAoImRlYnVnY29uZmlnIikKKyAgICBncm91cC5hZGRvcHRpb24o
Jy0tYXNzZXJ0JywKKyAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZSIsCisgICAgICAg
ICAgICAgICAgICAgIGRlc3Q9ImFzc2VydG1vZGUiLAorICAgICAgICAgICAgICAgICAgICBjaG9p
Y2VzPSgicmV3cml0ZSIsICJyZWludGVycCIsICJwbGFpbiIsKSwKKyAgICAgICAgICAgICAgICAg
ICAgZGVmYXVsdD0icmV3cml0ZSIsCisgICAgICAgICAgICAgICAgICAgIG1ldGF2YXI9Ik1PREUi
LAorICAgICAgICAgICAgICAgICAgICBoZWxwPSIiImNvbnRyb2wgYXNzZXJ0aW9uIGRlYnVnZ2lu
ZyB0b29scy4gICdwbGFpbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJmb3JtcyBu
byBhc3NlcnRpb24gZGVidWdnaW5nLiAgJ3JlaW50ZXJwJworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlaW50ZXJwcmV0cyBhc3NlcnQgc3RhdGVtZW50cyBhZnRlciB0aGV5IGZhaWxlZAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHByb3ZpZGUgYXNzZXJ0aW9uIGV4cHJlc3Np
b24gaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Jld3JpdGUnICh0
aGUgZGVmYXVsdCkgcmV3cml0ZXMgYXNzZXJ0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGVtZW50cyBpbiB0ZXN0IG1vZHVsZXMgb24gaW1wb3J0IHRvCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHJvdmlkZSBhc3NlcnQgZXhwcmVzc2lvbiBpbmZvcm1hdGlvbi4gIiIiKQor
ICAgIGdyb3VwLmFkZG9wdGlvbignLS1uby1hc3NlcnQnLAorICAgICAgICAgICAgICAgICAgICBh
Y3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlLAor
ICAgICAgICAgICAgICAgICAgICBkZXN0PSJub2Fzc2VydCIsCisgICAgICAgICAgICAgICAgICAg
IGhlbHA9IkRFUFJFQ0FURUQgZXF1aXZhbGVudCB0byAtLWFzc2VydD1wbGFpbiIpCisgICAgZ3Jv
dXAuYWRkb3B0aW9uKCctLW5vbWFnaWMnLCAnLS1uby1tYWdpYycsCisgICAgICAgICAgICAgICAg
ICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFs
c2UsCisgICAgICAgICAgICAgICAgICAgIGhlbHA9IkRFUFJFQ0FURUQgZXF1aXZhbGVudCB0byAt
LWFzc2VydD1wbGFpbiIpCisKKworY2xhc3MgQXNzZXJ0aW9uU3RhdGU6CisgICAgIiIiU3RhdGUg
Zm9yIHRoZSBhc3NlcnRpb24gcGx1Z2luLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNv
bmZpZywgbW9kZSk6CisgICAgICAgIHNlbGYubW9kZSA9IG1vZGUKKyAgICAgICAgc2VsZi50cmFj
ZSA9IGNvbmZpZy50cmFjZS5yb290LmdldCgiYXNzZXJ0aW9uIikKKworCitkZWYgcHl0ZXN0X2Nv
bmZpZ3VyZShjb25maWcpOgorICAgIG1vZGUgPSBjb25maWcuZ2V0dmFsdWUoImFzc2VydG1vZGUi
KQorICAgIGlmIGNvbmZpZy5nZXR2YWx1ZSgibm9hc3NlcnQiKSBvciBjb25maWcuZ2V0dmFsdWUo
Im5vbWFnaWMiKToKKyAgICAgICAgbW9kZSA9ICJwbGFpbiIKKyAgICBpZiBtb2RlID09ICJyZXdy
aXRlIjoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaW1wb3J0IGFzdCAgIyBub3FhCisgICAg
ICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIG1vZGUgPSAicmVpbnRlcnAiCisg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIEJvdGggSnl0aG9uIGFuZCBDUHl0aG9uIDIuNi4w
IGhhdmUgQVNUIGJ1Z3MgdGhhdCBtYWtlIHRoZQorICAgICAgICAgICAgIyBhc3NlcnRpb24gcmV3
cml0aW5nIGhvb2sgbWFsZnVuY3Rpb24uCisgICAgICAgICAgICBpZiAoc3lzLnBsYXRmb3JtLnN0
YXJ0c3dpdGgoJ2phdmEnKSBvcgorICAgICAgICAgICAgICAgICAgICBzeXMudmVyc2lvbl9pbmZv
WzozXSA9PSAoMiwgNiwgMCkpOgorICAgICAgICAgICAgICAgIG1vZGUgPSAicmVpbnRlcnAiCisg
ICAgaWYgbW9kZSAhPSAicGxhaW4iOgorICAgICAgICBfbG9hZF9tb2R1bGVzKG1vZGUpCisgICAg
ICAgIG0gPSBtb25rZXlwYXRjaCgpCisgICAgICAgIGNvbmZpZy5fY2xlYW51cC5hcHBlbmQobS51
bmRvKQorICAgICAgICBtLnNldGF0dHIocHkuYnVpbHRpbi5idWlsdGlucywgJ0Fzc2VydGlvbkVy
cm9yJywKKyAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0LkFzc2VydGlvbkVycm9yKSAgIyBu
b3FhCisgICAgaG9vayA9IE5vbmUKKyAgICBpZiBtb2RlID09ICJyZXdyaXRlIjoKKyAgICAgICAg
aG9vayA9IHJld3JpdGUuQXNzZXJ0aW9uUmV3cml0aW5nSG9vaygpICAjIG5vcWEKKyAgICAgICAg
c3lzLm1ldGFfcGF0aC5pbnNlcnQoMCwgaG9vaykKKyAgICB3YXJuX2Fib3V0X21pc3NpbmdfYXNz
ZXJ0aW9uKG1vZGUpCisgICAgY29uZmlnLl9hc3NlcnRzdGF0ZSA9IEFzc2VydGlvblN0YXRlKGNv
bmZpZywgbW9kZSkKKyAgICBjb25maWcuX2Fzc2VydHN0YXRlLmhvb2sgPSBob29rCisgICAgY29u
ZmlnLl9hc3NlcnRzdGF0ZS50cmFjZSgiY29uZmlndXJlZCB3aXRoIG1vZGUgc2V0IHRvICVyIiAl
IChtb2RlLCkpCisgICAgZGVmIHVuZG8oKToKKyAgICAgICAgaG9vayA9IGNvbmZpZy5fYXNzZXJ0
c3RhdGUuaG9vaworICAgICAgICBpZiBob29rIGlzIG5vdCBOb25lIGFuZCBob29rIGluIHN5cy5t
ZXRhX3BhdGg6CisgICAgICAgICAgICBzeXMubWV0YV9wYXRoLnJlbW92ZShob29rKQorICAgIGNv
bmZpZy5hZGRfY2xlYW51cCh1bmRvKQorCisKK2RlZiBweXRlc3RfY29sbGVjdGlvbihzZXNzaW9u
KToKKyAgICAjIHRoaXMgaG9vayBpcyBvbmx5IGNhbGxlZCB3aGVuIHRlc3QgbW9kdWxlcyBhcmUg
Y29sbGVjdGVkCisgICAgIyBzbyBmb3IgZXhhbXBsZSBub3QgaW4gdGhlIG1hc3RlciBwcm9jZXNz
IG9mIHB5dGVzdC14ZGlzdAorICAgICMgKHdoaWNoIGRvZXMgbm90IGNvbGxlY3QgdGVzdCBtb2R1
bGVzKQorICAgIGhvb2sgPSBzZXNzaW9uLmNvbmZpZy5fYXNzZXJ0c3RhdGUuaG9vaworICAgIGlm
IGhvb2sgaXMgbm90IE5vbmU6CisgICAgICAgIGhvb2suc2V0X3Nlc3Npb24oc2Vzc2lvbikKKwor
CitkZWYgX3J1bm5pbmdfb25fY2koKToKKyAgICAiIiJDaGVjayBpZiB3ZSdyZSBjdXJyZW50bHkg
cnVubmluZyBvbiBhIENJIHN5c3RlbS4iIiIKKyAgICBlbnZfdmFycyA9IFsnQ0knLCAnQlVJTERf
TlVNQkVSJ10KKyAgICByZXR1cm4gYW55KHZhciBpbiBvcy5lbnZpcm9uIGZvciB2YXIgaW4gZW52
X3ZhcnMpCisKKworZGVmIHB5dGVzdF9ydW50ZXN0X3NldHVwKGl0ZW0pOgorICAgICIiIlNldHVw
IHRoZSBweXRlc3RfYXNzZXJ0cmVwcl9jb21wYXJlIGhvb2sKKworICAgIFRoZSBuZXdpbnRlcnBy
ZXQgYW5kIHJld3JpdGUgbW9kdWxlcyB3aWxsIHVzZSB1dGlsLl9yZXByY29tcGFyZSBpZgorICAg
IGl0IGV4aXN0cyB0byB1c2UgY3VzdG9tIHJlcG9ydGluZyB2aWEgdGhlCisgICAgcHl0ZXN0X2Fz
c2VydHJlcHJfY29tcGFyZSBob29rLiAgVGhpcyBzZXRzIHVwIHRoaXMgY3VzdG9tCisgICAgY29t
cGFyaXNvbiBmb3IgdGhlIHRlc3QuCisgICAgIiIiCisgICAgZGVmIGNhbGxiaW5yZXByKG9wLCBs
ZWZ0LCByaWdodCk6CisgICAgICAgICIiIkNhbGwgdGhlIHB5dGVzdF9hc3NlcnRyZXByX2NvbXBh
cmUgaG9vayBhbmQgcHJlcGFyZSB0aGUgcmVzdWx0CisKKyAgICAgICAgVGhpcyB1c2VzIHRoZSBm
aXJzdCByZXN1bHQgZnJvbSB0aGUgaG9vayBhbmQgdGhlbiBlbnN1cmVzIHRoZQorICAgICAgICBm
b2xsb3dpbmc6CisgICAgICAgICogT3Zlcmx5IHZlcmJvc2UgZXhwbGFuYXRpb25zIGFyZSBkcm9w
cGVkIHVubGVzcyAtdnYgd2FzIHVzZWQgb3IKKyAgICAgICAgICBydW5uaW5nIG9uIGEgQ0kuCisg
ICAgICAgICogRW1iZWRkZWQgbmV3bGluZXMgYXJlIGVzY2FwZWQgdG8gaGVscCB1dGlsLmZvcm1h
dF9leHBsYW5hdGlvbigpCisgICAgICAgICAgbGF0ZXIuCisgICAgICAgICogSWYgdGhlIHJld3Jp
dGUgbW9kZSBpcyB1c2VkIGVtYmVkZGVkICUtY2hhcmFjdGVycyBhcmUgcmVwbGFjZWQKKyAgICAg
ICAgICB0byBwcm90ZWN0IGxhdGVyICUgZm9ybWF0dGluZy4KKworICAgICAgICBUaGUgcmVzdWx0
IGNhbiBiZSBmb3JtYXR0ZWQgYnkgdXRpbC5mb3JtYXRfZXhwbGFuYXRpb24oKSBmb3IKKyAgICAg
ICAgcHJldHR5IHByaW50aW5nLgorICAgICAgICAiIiIKKyAgICAgICAgaG9va19yZXN1bHQgPSBp
dGVtLmlob29rLnB5dGVzdF9hc3NlcnRyZXByX2NvbXBhcmUoCisgICAgICAgICAgICBjb25maWc9
aXRlbS5jb25maWcsIG9wPW9wLCBsZWZ0PWxlZnQsIHJpZ2h0PXJpZ2h0KQorICAgICAgICBmb3Ig
bmV3X2V4cGwgaW4gaG9va19yZXN1bHQ6CisgICAgICAgICAgICBpZiBuZXdfZXhwbDoKKyAgICAg
ICAgICAgICAgICBpZiAoc3VtKGxlbihwKSBmb3IgcCBpbiBuZXdfZXhwbFsxOl0pID4gODAqOCBh
bmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uY29uZmlnLm9wdGlvbi52ZXJib3NlIDwg
MiBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBfcnVubmluZ19vbl9jaSgpKToKKyAg
ICAgICAgICAgICAgICAgICAgc2hvd19tYXggPSAxMAorICAgICAgICAgICAgICAgICAgICB0cnVu
Y2F0ZWRfbGluZXMgPSBsZW4obmV3X2V4cGwpIC0gc2hvd19tYXgKKyAgICAgICAgICAgICAgICAg
ICAgbmV3X2V4cGxbc2hvd19tYXg6XSA9IFtweS5idWlsdGluLl90b3RleHQoCisgICAgICAgICAg
ICAgICAgICAgICAgICAnRGV0YWlsZWQgaW5mb3JtYXRpb24gdHJ1bmNhdGVkICglZCBtb3JlIGxp
bmVzKScKKyAgICAgICAgICAgICAgICAgICAgICAgICcsIHVzZSAiLXZ2IiB0byBzaG93JyAlIHRy
dW5jYXRlZF9saW5lcyldCisgICAgICAgICAgICAgICAgbmV3X2V4cGwgPSBbbGluZS5yZXBsYWNl
KCJcbiIsICJcXG4iKSBmb3IgbGluZSBpbiBuZXdfZXhwbF0KKyAgICAgICAgICAgICAgICByZXMg
PSBweS5idWlsdGluLl90b3RleHQoIlxufiIpLmpvaW4obmV3X2V4cGwpCisgICAgICAgICAgICAg
ICAgaWYgaXRlbS5jb25maWcuZ2V0dmFsdWUoImFzc2VydG1vZGUiKSA9PSAicmV3cml0ZSI6Cisg
ICAgICAgICAgICAgICAgICAgIHJlcyA9IHJlcy5yZXBsYWNlKCIlIiwgIiUlIikKKyAgICAgICAg
ICAgICAgICByZXR1cm4gcmVzCisgICAgdXRpbC5fcmVwcmNvbXBhcmUgPSBjYWxsYmlucmVwcgor
CisKK2RlZiBweXRlc3RfcnVudGVzdF90ZWFyZG93bihpdGVtKToKKyAgICB1dGlsLl9yZXByY29t
cGFyZSA9IE5vbmUKKworCitkZWYgcHl0ZXN0X3Nlc3Npb25maW5pc2goc2Vzc2lvbik6CisgICAg
aG9vayA9IHNlc3Npb24uY29uZmlnLl9hc3NlcnRzdGF0ZS5ob29rCisgICAgaWYgaG9vayBpcyBu
b3QgTm9uZToKKyAgICAgICAgaG9vay5zZXNzaW9uID0gTm9uZQorCisKK2RlZiBfbG9hZF9tb2R1
bGVzKG1vZGUpOgorICAgICIiIkxhemlseSBpbXBvcnQgYXNzZXJ0aW9uIHJlbGF0ZWQgY29kZS4i
IiIKKyAgICBnbG9iYWwgcmV3cml0ZSwgcmVpbnRlcnByZXQKKyAgICBmcm9tIF9weXRlc3QuYXNz
ZXJ0aW9uIGltcG9ydCByZWludGVycHJldCAgIyBub3FhCisgICAgaWYgbW9kZSA9PSAicmV3cml0
ZSI6CisgICAgICAgIGZyb20gX3B5dGVzdC5hc3NlcnRpb24gaW1wb3J0IHJld3JpdGUgICMgbm9x
YQorCisKK2RlZiB3YXJuX2Fib3V0X21pc3NpbmdfYXNzZXJ0aW9uKG1vZGUpOgorICAgIHRyeToK
KyAgICAgICAgYXNzZXJ0IEZhbHNlCisgICAgZXhjZXB0IEFzc2VydGlvbkVycm9yOgorICAgICAg
ICBwYXNzCisgICAgZWxzZToKKyAgICAgICAgaWYgbW9kZSA9PSAicmV3cml0ZSI6CisgICAgICAg
ICAgICBzcGVjaWZpY2FsbHkgPSAoImFzc2VydGlvbnMgd2hpY2ggYXJlIG5vdCBpbiB0ZXN0IG1v
ZHVsZXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aWxsIGJlIGlnbm9yZWQiKQor
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3BlY2lmaWNhbGx5ID0gImZhaWxpbmcgdGVzdHMg
bWF5IHJlcG9ydCBhcyBwYXNzaW5nIgorCisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIldBUk5J
Tkc6ICIgKyBzcGVjaWZpY2FsbHkgKworICAgICAgICAgICAgICAgICAgICAgICAgICIgYmVjYXVz
ZSBhc3NlcnQgc3RhdGVtZW50cyBhcmUgbm90IGV4ZWN1dGVkICIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAiYnkgdGhlIHVuZGVybHlpbmcgUHl0aG9uIGludGVycHJldGVyICIKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAiKGFyZSB5b3UgdXNpbmcgcHl0aG9uIC1PPylcbiIpCisKKworIyBF
eHBvc2UgdGhpcyBwbHVnaW4ncyBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIHB5dGVzdF9hc3NlcnRy
ZXByX2NvbXBhcmUgaG9vaworcHl0ZXN0X2Fzc2VydHJlcHJfY29tcGFyZSA9IHV0aWwuYXNzZXJ0
cmVwcl9jb21wYXJlCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9v
bHMvcHl0ZXN0L19weXRlc3QvYXNzZXJ0aW9uL3JlaW50ZXJwcmV0LnB5IGIvV2ViRHJpdmVyVGVz
dHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L2Fzc2VydGlvbi9yZWludGVycHJl
dC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZjQyNjJjM2FjZWQK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0
ZXN0L19weXRlc3QvYXNzZXJ0aW9uL3JlaW50ZXJwcmV0LnB5CkBAIC0wLDAgKzEsNDA3IEBACisi
IiIKK0ZpbmQgaW50ZXJtZWRpYXRlIGV2YWx1dGF0aW9uIHJlc3VsdHMgaW4gYXNzZXJ0IHN0YXRl
bWVudHMgdGhyb3VnaCBidWlsdGluIEFTVC4KKyIiIgoraW1wb3J0IGFzdAoraW1wb3J0IHN5cwor
CitpbXBvcnQgX3B5dGVzdC5fY29kZQoraW1wb3J0IHB5Citmcm9tIF9weXRlc3QuYXNzZXJ0aW9u
IGltcG9ydCB1dGlsCit1ID0gcHkuYnVpbHRpbi5fdG90ZXh0CisKKworY2xhc3MgQXNzZXJ0aW9u
RXJyb3IodXRpbC5CdWlsdGluQXNzZXJ0aW9uRXJyb3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxm
LCAqYXJncyk6CisgICAgICAgIHV0aWwuQnVpbHRpbkFzc2VydGlvbkVycm9yLl9faW5pdF9fKHNl
bGYsICphcmdzKQorICAgICAgICBpZiBhcmdzOgorICAgICAgICAgICAgIyBvbiBQeXRob24yLjYg
d2UgZ2V0IGxlbihhcmdzKT09MiBmb3I6IGFzc2VydCAwLCAoeCx5KQorICAgICAgICAgICAgIyBv
biBQeXRob24yLjcgYW5kIGFib3ZlIHdlIGFsd2F5cyBnZXQgbGVuKGFyZ3MpID09IDEKKyAgICAg
ICAgICAgICMgd2l0aCBhcmdzWzBdIGJlaW5nIHRoZSAoeCx5KSB0dXBsZS4KKyAgICAgICAgICAg
IGlmIGxlbihhcmdzKSA+IDE6CisgICAgICAgICAgICAgICAgdG9wcmludCA9IGFyZ3MKKyAgICAg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdG9wcmludCA9IGFyZ3NbMF0KKyAgICAgICAg
ICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLm1zZyA9IHUodG9wcmludCkKKyAgICAgICAg
ICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgc2VsZi5tc2cgPSB1KAorICAg
ICAgICAgICAgICAgICAgICAiPFticm9rZW4gX19yZXByX19dICVzIGF0ICUweGQ+IgorICAgICAg
ICAgICAgICAgICAgICAlICh0b3ByaW50Ll9fY2xhc3NfXywgaWQodG9wcmludCkpKQorICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgZiA9IF9weXRlc3QuX2NvZGUuRnJhbWUoc3lzLl9nZXRmcmFt
ZSgxKSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzb3VyY2UgPSBmLmNvZGUu
ZnVsbHNvdXJjZQorICAgICAgICAgICAgICAgIGlmIHNvdXJjZSBpcyBub3QgTm9uZToKKyAgICAg
ICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlID0gc291
cmNlLmdldHN0YXRlbWVudChmLmxpbmVubywgYXNzZXJ0aW9uPVRydWUpCisgICAgICAgICAgICAg
ICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgc291cmNl
ID0gTm9uZQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAg
ICAgc291cmNlID0gc3RyKHNvdXJjZS5kZWluZGVudCgpKS5zdHJpcCgpCisgICAgICAgICAgICBl
eGNlcHQgcHkuZXJyb3IuRU5PRU5UOgorICAgICAgICAgICAgICAgIHNvdXJjZSA9IE5vbmUKKyAg
ICAgICAgICAgICAgICAjIHRoaXMgY2FuIGFsc28gb2NjdXIgZHVyaW5nIHJlaW50ZXJwcmV0YXRp
b24sIHdoZW4gdGhlCisgICAgICAgICAgICAgICAgIyBjb19maWxlbmFtZSBpcyBzZXQgdG8gIjxy
dW4+Ii4KKyAgICAgICAgICAgIGlmIHNvdXJjZToKKyAgICAgICAgICAgICAgICBzZWxmLm1zZyA9
IHJlaW50ZXJwcmV0KHNvdXJjZSwgZiwgc2hvdWxkX2ZhaWw9VHJ1ZSkKKyAgICAgICAgICAgIGVs
c2U6CisgICAgICAgICAgICAgICAgc2VsZi5tc2cgPSAiPGNvdWxkIG5vdCBkZXRlcm1pbmUgaW5m
b3JtYXRpb24+IgorICAgICAgICAgICAgaWYgbm90IHNlbGYuYXJnczoKKyAgICAgICAgICAgICAg
ICBzZWxmLmFyZ3MgPSAoc2VsZi5tc2csKQorCitpZiBzeXMudmVyc2lvbl9pbmZvID4gKDMsIDAp
OgorICAgIEFzc2VydGlvbkVycm9yLl9fbW9kdWxlX18gPSAiYnVpbHRpbnMiCisKK2lmIHN5cy5w
bGF0Zm9ybS5zdGFydHN3aXRoKCJqYXZhIik6CisgICAgIyBTZWUgaHR0cDovL2J1Z3Muanl0aG9u
Lm9yZy9pc3N1ZTE0OTcKKyAgICBfZXhwcnMgPSAoIkJvb2xPcCIsICJCaW5PcCIsICJVbmFyeU9w
IiwgIkxhbWJkYSIsICJJZkV4cCIsICJEaWN0IiwKKyAgICAgICAgICAgICAgIkxpc3RDb21wIiwg
IkdlbmVyYXRvckV4cCIsICJZaWVsZCIsICJDb21wYXJlIiwgIkNhbGwiLAorICAgICAgICAgICAg
ICAiUmVwciIsICJOdW0iLCAiU3RyIiwgIkF0dHJpYnV0ZSIsICJTdWJzY3JpcHQiLCAiTmFtZSIs
CisgICAgICAgICAgICAgICJMaXN0IiwgIlR1cGxlIikKKyAgICBfc3RtdHMgPSAoIkZ1bmN0aW9u
RGVmIiwgIkNsYXNzRGVmIiwgIlJldHVybiIsICJEZWxldGUiLCAiQXNzaWduIiwKKyAgICAgICAg
ICAgICAgIkF1Z0Fzc2lnbiIsICJQcmludCIsICJGb3IiLCAiV2hpbGUiLCAiSWYiLCAiV2l0aCIs
ICJSYWlzZSIsCisgICAgICAgICAgICAgICJUcnlFeGNlcHQiLCAiVHJ5RmluYWxseSIsICJBc3Nl
cnQiLCAiSW1wb3J0IiwgIkltcG9ydEZyb20iLAorICAgICAgICAgICAgICAiRXhlYyIsICJHbG9i
YWwiLCAiRXhwciIsICJQYXNzIiwgIkJyZWFrIiwgIkNvbnRpbnVlIikKKyAgICBfZXhwcl9ub2Rl
cyA9IHNldChnZXRhdHRyKGFzdCwgbmFtZSkgZm9yIG5hbWUgaW4gX2V4cHJzKQorICAgIF9zdG10
X25vZGVzID0gc2V0KGdldGF0dHIoYXN0LCBuYW1lKSBmb3IgbmFtZSBpbiBfc3RtdHMpCisgICAg
ZGVmIF9pc19hc3RfZXhwcihub2RlKToKKyAgICAgICAgcmV0dXJuIG5vZGUuX19jbGFzc19fIGlu
IF9leHByX25vZGVzCisgICAgZGVmIF9pc19hc3Rfc3RtdChub2RlKToKKyAgICAgICAgcmV0dXJu
IG5vZGUuX19jbGFzc19fIGluIF9zdG10X25vZGVzCitlbHNlOgorICAgIGRlZiBfaXNfYXN0X2V4
cHIobm9kZSk6CisgICAgICAgIHJldHVybiBpc2luc3RhbmNlKG5vZGUsIGFzdC5leHByKQorICAg
IGRlZiBfaXNfYXN0X3N0bXQobm9kZSk6CisgICAgICAgIHJldHVybiBpc2luc3RhbmNlKG5vZGUs
IGFzdC5zdG10KQorCit0cnk6CisgICAgX1N0YXJyZWQgPSBhc3QuU3RhcnJlZAorZXhjZXB0IEF0
dHJpYnV0ZUVycm9yOgorICAgICMgUHl0aG9uIDIuIERlZmluZSBhIGR1bW15IGNsYXNzIHNvIGlz
aW5zdGFuY2UoKSB3aWxsIGFsd2F5cyBiZSBGYWxzZS4KKyAgICBjbGFzcyBfU3RhcnJlZChvYmpl
Y3QpOiBwYXNzCisKKworY2xhc3MgRmFpbHVyZShFeGNlcHRpb24pOgorICAgICIiIkVycm9yIGZv
dW5kIHdoaWxlIGludGVycHJldGluZyBBU1QuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
ZXhwbGFuYXRpb249IiIpOgorICAgICAgICBzZWxmLmNhdXNlID0gc3lzLmV4Y19pbmZvKCkKKyAg
ICAgICAgc2VsZi5leHBsYW5hdGlvbiA9IGV4cGxhbmF0aW9uCisKKworZGVmIHJlaW50ZXJwcmV0
KHNvdXJjZSwgZnJhbWUsIHNob3VsZF9mYWlsPUZhbHNlKToKKyAgICBtb2QgPSBhc3QucGFyc2Uo
c291cmNlKQorICAgIHZpc2l0b3IgPSBEZWJ1Z0ludGVycHJldGVyKGZyYW1lKQorICAgIHRyeToK
KyAgICAgICAgdmlzaXRvci52aXNpdChtb2QpCisgICAgZXhjZXB0IEZhaWx1cmU6CisgICAgICAg
IGZhaWx1cmUgPSBzeXMuZXhjX2luZm8oKVsxXQorICAgICAgICByZXR1cm4gZ2V0ZmFpbHVyZShm
YWlsdXJlKQorICAgIGlmIHNob3VsZF9mYWlsOgorICAgICAgICByZXR1cm4gKCIoYXNzZXJ0aW9u
IGZhaWxlZCwgYnV0IHdoZW4gaXQgd2FzIHJlLXJ1biBmb3IgIgorICAgICAgICAgICAgICAgICJw
cmludGluZyBpbnRlcm1lZGlhdGUgdmFsdWVzLCBpdCBkaWQgbm90IGZhaWwuICBTdWdnZXN0aW9u
czogIgorICAgICAgICAgICAgICAgICJjb21wdXRlIGFzc2VydCBleHByZXNzaW9uIGJlZm9yZSB0
aGUgYXNzZXJ0IG9yIHVzZSAtLWFzc2VydD1wbGFpbikiKQorCitkZWYgcnVuKG9mZmVuZGluZ19s
aW5lLCBmcmFtZT1Ob25lKToKKyAgICBpZiBmcmFtZSBpcyBOb25lOgorICAgICAgICBmcmFtZSA9
IF9weXRlc3QuX2NvZGUuRnJhbWUoc3lzLl9nZXRmcmFtZSgxKSkKKyAgICByZXR1cm4gcmVpbnRl
cnByZXQob2ZmZW5kaW5nX2xpbmUsIGZyYW1lKQorCitkZWYgZ2V0ZmFpbHVyZShlKToKKyAgICBl
eHBsYW5hdGlvbiA9IHV0aWwuZm9ybWF0X2V4cGxhbmF0aW9uKGUuZXhwbGFuYXRpb24pCisgICAg
dmFsdWUgPSBlLmNhdXNlWzFdCisgICAgaWYgc3RyKHZhbHVlKToKKyAgICAgICAgbGluZXMgPSBl
eHBsYW5hdGlvbi5zcGxpdCgnXG4nKQorICAgICAgICBsaW5lc1swXSArPSAiICA8PCAlcyIgJSAo
dmFsdWUsKQorICAgICAgICBleHBsYW5hdGlvbiA9ICdcbicuam9pbihsaW5lcykKKyAgICB0ZXh0
ID0gIiVzOiAlcyIgJSAoZS5jYXVzZVswXS5fX25hbWVfXywgZXhwbGFuYXRpb24pCisgICAgaWYg
dGV4dC5zdGFydHN3aXRoKCdBc3NlcnRpb25FcnJvcjogYXNzZXJ0ICcpOgorICAgICAgICB0ZXh0
ID0gdGV4dFsxNjpdCisgICAgcmV0dXJuIHRleHQKKworb3BlcmF0b3JfbWFwID0geworICAgIGFz
dC5CaXRPciA6ICJ8IiwKKyAgICBhc3QuQml0WG9yIDogIl4iLAorICAgIGFzdC5CaXRBbmQgOiAi
JiIsCisgICAgYXN0LkxTaGlmdCA6ICI8PCIsCisgICAgYXN0LlJTaGlmdCA6ICI+PiIsCisgICAg
YXN0LkFkZCA6ICIrIiwKKyAgICBhc3QuU3ViIDogIi0iLAorICAgIGFzdC5NdWx0IDogIioiLAor
ICAgIGFzdC5EaXYgOiAiLyIsCisgICAgYXN0LkZsb29yRGl2IDogIi8vIiwKKyAgICBhc3QuTW9k
IDogIiUiLAorICAgIGFzdC5FcSA6ICI9PSIsCisgICAgYXN0Lk5vdEVxIDogIiE9IiwKKyAgICBh
c3QuTHQgOiAiPCIsCisgICAgYXN0Lkx0RSA6ICI8PSIsCisgICAgYXN0Lkd0IDogIj4iLAorICAg
IGFzdC5HdEUgOiAiPj0iLAorICAgIGFzdC5Qb3cgOiAiKioiLAorICAgIGFzdC5JcyA6ICJpcyIs
CisgICAgYXN0LklzTm90IDogImlzIG5vdCIsCisgICAgYXN0LkluIDogImluIiwKKyAgICBhc3Qu
Tm90SW4gOiAibm90IGluIgorfQorCit1bmFyeV9tYXAgPSB7CisgICAgYXN0Lk5vdCA6ICJub3Qg
JXMiLAorICAgIGFzdC5JbnZlcnQgOiAifiVzIiwKKyAgICBhc3QuVVN1YiA6ICItJXMiLAorICAg
IGFzdC5VQWRkIDogIislcyIKK30KKworCitjbGFzcyBEZWJ1Z0ludGVycHJldGVyKGFzdC5Ob2Rl
VmlzaXRvcik6CisgICAgIiIiSW50ZXJwcmV0IEFTVCBub2RlcyB0byBnbGVhbSB1c2VmdWwgZGVi
dWdnaW5nIGluZm9ybWF0aW9uLiAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmcmFtZSk6
CisgICAgICAgIHNlbGYuZnJhbWUgPSBmcmFtZQorCisgICAgZGVmIGdlbmVyaWNfdmlzaXQoc2Vs
Ziwgbm9kZSk6CisgICAgICAgICMgRmFsbGJhY2sgd2hlbiB3ZSBkb24ndCBoYXZlIGEgc3BlY2lh
bCBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgaWYgX2lzX2FzdF9leHByKG5vZGUpOgorICAgICAg
ICAgICAgbW9kID0gYXN0LkV4cHJlc3Npb24obm9kZSkKKyAgICAgICAgICAgIGNvID0gc2VsZi5f
Y29tcGlsZShtb2QpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0g
c2VsZi5mcmFtZS5ldmFsKGNvKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAg
ICAgICAgICAgICByYWlzZSBGYWlsdXJlKCkKKyAgICAgICAgICAgIGV4cGxhbmF0aW9uID0gc2Vs
Zi5mcmFtZS5yZXByKHJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiBleHBsYW5hdGlvbiwgcmVz
dWx0CisgICAgICAgIGVsaWYgX2lzX2FzdF9zdG10KG5vZGUpOgorICAgICAgICAgICAgbW9kID0g
YXN0Lk1vZHVsZShbbm9kZV0pCisgICAgICAgICAgICBjbyA9IHNlbGYuX2NvbXBpbGUobW9kLCAi
ZXhlYyIpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5mcmFtZS5leGVj
XyhjbykKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgcmFp
c2UgRmFpbHVyZSgpCisgICAgICAgICAgICByZXR1cm4gTm9uZSwgTm9uZQorICAgICAgICBlbHNl
OgorICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoImNhbid0IGhhbmRsZSAlcyIgJShu
b2RlLCkpCisKKyAgICBkZWYgX2NvbXBpbGUoc2VsZiwgc291cmNlLCBtb2RlPSJldmFsIik6Cisg
ICAgICAgIHJldHVybiBjb21waWxlKHNvdXJjZSwgIjxhc3NlcnRpb24gaW50ZXJwcmV0YXRpb24+
IiwgbW9kZSkKKworICAgIGRlZiB2aXNpdF9FeHByKHNlbGYsIGV4cHIpOgorICAgICAgICByZXR1
cm4gc2VsZi52aXNpdChleHByLnZhbHVlKQorCisgICAgZGVmIHZpc2l0X01vZHVsZShzZWxmLCBt
b2QpOgorICAgICAgICBmb3Igc3RtdCBpbiBtb2QuYm9keToKKyAgICAgICAgICAgIHNlbGYudmlz
aXQoc3RtdCkKKworICAgIGRlZiB2aXNpdF9OYW1lKHNlbGYsIG5hbWUpOgorICAgICAgICBleHBs
YW5hdGlvbiwgcmVzdWx0ID0gc2VsZi5nZW5lcmljX3Zpc2l0KG5hbWUpCisgICAgICAgICMgU2Vl
IGlmIHRoZSBuYW1lIGlzIGxvY2FsLgorICAgICAgICBzb3VyY2UgPSAiJXIgaW4gbG9jYWxzKCkg
aXMgbm90IGdsb2JhbHMoKSIgJSAobmFtZS5pZCwpCisgICAgICAgIGNvID0gc2VsZi5fY29tcGls
ZShzb3VyY2UpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxvY2FsID0gc2VsZi5mcmFtZS5l
dmFsKGNvKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgIyBoYXZlIHRv
IGFzc3VtZSBpdCBpc24ndAorICAgICAgICAgICAgbG9jYWwgPSBOb25lCisgICAgICAgIGlmIGxv
Y2FsIGlzIE5vbmUgb3Igbm90IHNlbGYuZnJhbWUuaXNfdHJ1ZShsb2NhbCk6CisgICAgICAgICAg
ICByZXR1cm4gbmFtZS5pZCwgcmVzdWx0CisgICAgICAgIHJldHVybiBleHBsYW5hdGlvbiwgcmVz
dWx0CisKKyAgICBkZWYgdmlzaXRfQ29tcGFyZShzZWxmLCBjb21wKToKKyAgICAgICAgbGVmdCA9
IGNvbXAubGVmdAorICAgICAgICBsZWZ0X2V4cGxhbmF0aW9uLCBsZWZ0X3Jlc3VsdCA9IHNlbGYu
dmlzaXQobGVmdCkKKyAgICAgICAgZm9yIG9wLCBuZXh0X29wIGluIHppcChjb21wLm9wcywgY29t
cC5jb21wYXJhdG9ycyk6CisgICAgICAgICAgICBuZXh0X2V4cGxhbmF0aW9uLCBuZXh0X3Jlc3Vs
dCA9IHNlbGYudmlzaXQobmV4dF9vcCkKKyAgICAgICAgICAgIG9wX3N5bWJvbCA9IG9wZXJhdG9y
X21hcFtvcC5fX2NsYXNzX19dCisgICAgICAgICAgICBleHBsYW5hdGlvbiA9ICIlcyAlcyAlcyIg
JSAobGVmdF9leHBsYW5hdGlvbiwgb3Bfc3ltYm9sLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5leHRfZXhwbGFuYXRpb24pCisgICAgICAgICAgICBzb3VyY2UgPSAi
X19leHByaW5mb19sZWZ0ICVzIF9fZXhwcmluZm9fcmlnaHQiICUgKG9wX3N5bWJvbCwpCisgICAg
ICAgICAgICBjbyA9IHNlbGYuX2NvbXBpbGUoc291cmNlKQorICAgICAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuZnJhbWUuZXZhbChjbywgX19leHByaW5mb19sZWZ0
PWxlZnRfcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2V4cHJpbmZvX3JpZ2h0PW5leHRfcmVzdWx0KQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlv
bjoKKyAgICAgICAgICAgICAgICByYWlzZSBGYWlsdXJlKGV4cGxhbmF0aW9uKQorICAgICAgICAg
ICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLmZyYW1lLmlzX3RydWUocmVzdWx0
KToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGV4Y2VwdCBLZXlib2Fy
ZEludGVycnVwdDoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZXhjZXB0Ogor
ICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBsZWZ0X2V4cGxhbmF0aW9uLCBsZWZ0
X3Jlc3VsdCA9IG5leHRfZXhwbGFuYXRpb24sIG5leHRfcmVzdWx0CisKKyAgICAgICAgaWYgdXRp
bC5fcmVwcmNvbXBhcmUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXMgPSB1dGlsLl9yZXBy
Y29tcGFyZShvcF9zeW1ib2wsIGxlZnRfcmVzdWx0LCBuZXh0X3Jlc3VsdCkKKyAgICAgICAgICAg
IGlmIHJlczoKKyAgICAgICAgICAgICAgICBleHBsYW5hdGlvbiA9IHJlcworICAgICAgICByZXR1
cm4gZXhwbGFuYXRpb24sIHJlc3VsdAorCisgICAgZGVmIHZpc2l0X0Jvb2xPcChzZWxmLCBib29s
b3ApOgorICAgICAgICBpc19vciA9IGlzaW5zdGFuY2UoYm9vbG9wLm9wLCBhc3QuT3IpCisgICAg
ICAgIGV4cGxhbmF0aW9ucyA9IFtdCisgICAgICAgIGZvciBvcGVyYW5kIGluIGJvb2xvcC52YWx1
ZXM6CisgICAgICAgICAgICBleHBsYW5hdGlvbiwgcmVzdWx0ID0gc2VsZi52aXNpdChvcGVyYW5k
KQorICAgICAgICAgICAgZXhwbGFuYXRpb25zLmFwcGVuZChleHBsYW5hdGlvbikKKyAgICAgICAg
ICAgIGlmIHJlc3VsdCA9PSBpc19vcjoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBu
YW1lID0gaXNfb3IgYW5kICIgb3IgIiBvciAiIGFuZCAiCisgICAgICAgIGV4cGxhbmF0aW9uID0g
IigiICsgbmFtZS5qb2luKGV4cGxhbmF0aW9ucykgKyAiKSIKKyAgICAgICAgcmV0dXJuIGV4cGxh
bmF0aW9uLCByZXN1bHQKKworICAgIGRlZiB2aXNpdF9VbmFyeU9wKHNlbGYsIHVuYXJ5KToKKyAg
ICAgICAgcGF0dGVybiA9IHVuYXJ5X21hcFt1bmFyeS5vcC5fX2NsYXNzX19dCisgICAgICAgIG9w
ZXJhbmRfZXhwbGFuYXRpb24sIG9wZXJhbmRfcmVzdWx0ID0gc2VsZi52aXNpdCh1bmFyeS5vcGVy
YW5kKQorICAgICAgICBleHBsYW5hdGlvbiA9IHBhdHRlcm4gJSAob3BlcmFuZF9leHBsYW5hdGlv
biwpCisgICAgICAgIGNvID0gc2VsZi5fY29tcGlsZShwYXR0ZXJuICUgKCJfX2V4cHJpbmZvX2V4
cHIiLCkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuZnJhbWUuZXZh
bChjbywgX19leHByaW5mb19leHByPW9wZXJhbmRfcmVzdWx0KQorICAgICAgICBleGNlcHQgRXhj
ZXB0aW9uOgorICAgICAgICAgICAgcmFpc2UgRmFpbHVyZShleHBsYW5hdGlvbikKKyAgICAgICAg
cmV0dXJuIGV4cGxhbmF0aW9uLCByZXN1bHQKKworICAgIGRlZiB2aXNpdF9CaW5PcChzZWxmLCBi
aW5vcCk6CisgICAgICAgIGxlZnRfZXhwbGFuYXRpb24sIGxlZnRfcmVzdWx0ID0gc2VsZi52aXNp
dChiaW5vcC5sZWZ0KQorICAgICAgICByaWdodF9leHBsYW5hdGlvbiwgcmlnaHRfcmVzdWx0ID0g
c2VsZi52aXNpdChiaW5vcC5yaWdodCkKKyAgICAgICAgc3ltYm9sID0gb3BlcmF0b3JfbWFwW2Jp
bm9wLm9wLl9fY2xhc3NfX10KKyAgICAgICAgZXhwbGFuYXRpb24gPSAiKCVzICVzICVzKSIgJSAo
bGVmdF9leHBsYW5hdGlvbiwgc3ltYm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByaWdodF9leHBsYW5hdGlvbikKKyAgICAgICAgc291cmNlID0gIl9fZXhwcmluZm9f
bGVmdCAlcyBfX2V4cHJpbmZvX3JpZ2h0IiAlIChzeW1ib2wsKQorICAgICAgICBjbyA9IHNlbGYu
X2NvbXBpbGUoc291cmNlKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXN1bHQgPSBzZWxm
LmZyYW1lLmV2YWwoY28sIF9fZXhwcmluZm9fbGVmdD1sZWZ0X3Jlc3VsdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2V4cHJpbmZvX3JpZ2h0PXJpZ2h0X3Jlc3VsdCkK
KyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHJhaXNlIEZhaWx1cmUoZXhw
bGFuYXRpb24pCisgICAgICAgIHJldHVybiBleHBsYW5hdGlvbiwgcmVzdWx0CisKKyAgICBkZWYg
dmlzaXRfQ2FsbChzZWxmLCBjYWxsKToKKyAgICAgICAgZnVuY19leHBsYW5hdGlvbiwgZnVuYyA9
IHNlbGYudmlzaXQoY2FsbC5mdW5jKQorICAgICAgICBhcmdfZXhwbGFuYXRpb25zID0gW10KKyAg
ICAgICAgbnMgPSB7Il9fZXhwcmluZm9fZnVuYyIgOiBmdW5jfQorICAgICAgICBhcmd1bWVudHMg
PSBbXQorICAgICAgICBmb3IgYXJnIGluIGNhbGwuYXJnczoKKyAgICAgICAgICAgIGFyZ19leHBs
YW5hdGlvbiwgYXJnX3Jlc3VsdCA9IHNlbGYudmlzaXQoYXJnKQorICAgICAgICAgICAgaWYgaXNp
bnN0YW5jZShhcmcsIF9TdGFycmVkKToKKyAgICAgICAgICAgICAgICBhcmdfbmFtZSA9ICJfX2V4
cHJpbmZvX3N0YXIiCisgICAgICAgICAgICAgICAgbnNbYXJnX25hbWVdID0gYXJnX3Jlc3VsdAor
ICAgICAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoIiolcyIgJSAoYXJnX25hbWUsKSkKKyAg
ICAgICAgICAgICAgICBhcmdfZXhwbGFuYXRpb25zLmFwcGVuZCgiKiVzIiAlIChhcmdfZXhwbGFu
YXRpb24sKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYXJnX25hbWUgPSAi
X19leHByaW5mb18lcyIgJSAobGVuKG5zKSwpCisgICAgICAgICAgICAgICAgbnNbYXJnX25hbWVd
ID0gYXJnX3Jlc3VsdAorICAgICAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoYXJnX25hbWUp
CisgICAgICAgICAgICAgICAgYXJnX2V4cGxhbmF0aW9ucy5hcHBlbmQoYXJnX2V4cGxhbmF0aW9u
KQorICAgICAgICBmb3Iga2V5d29yZCBpbiBjYWxsLmtleXdvcmRzOgorICAgICAgICAgICAgYXJn
X2V4cGxhbmF0aW9uLCBhcmdfcmVzdWx0ID0gc2VsZi52aXNpdChrZXl3b3JkLnZhbHVlKQorICAg
ICAgICAgICAgaWYga2V5d29yZC5hcmc6CisgICAgICAgICAgICAgICAgYXJnX25hbWUgPSAiX19l
eHByaW5mb18lcyIgJSAobGVuKG5zKSwpCisgICAgICAgICAgICAgICAga2V5d29yZF9zb3VyY2Ug
PSAiJXM9JSVzIiAlIChrZXl3b3JkLmFyZykKKyAgICAgICAgICAgICAgICBhcmd1bWVudHMuYXBw
ZW5kKGtleXdvcmRfc291cmNlICUgKGFyZ19uYW1lLCkpCisgICAgICAgICAgICAgICAgYXJnX2V4
cGxhbmF0aW9ucy5hcHBlbmQoa2V5d29yZF9zb3VyY2UgJSAoYXJnX2V4cGxhbmF0aW9uLCkpCisg
ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGFyZ19uYW1lID0gIl9fZXhwcmluZm9f
a3dkcyIKKyAgICAgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKCIqKiVzIiAlIChhcmdfbmFt
ZSwpKQorICAgICAgICAgICAgICAgIGFyZ19leHBsYW5hdGlvbnMuYXBwZW5kKCIqKiVzIiAlIChh
cmdfZXhwbGFuYXRpb24sKSkKKworICAgICAgICAgICAgbnNbYXJnX25hbWVdID0gYXJnX3Jlc3Vs
dAorCisgICAgICAgIGlmIGdldGF0dHIoY2FsbCwgJ3N0YXJhcmdzJywgTm9uZSk6CisgICAgICAg
ICAgICBhcmdfZXhwbGFuYXRpb24sIGFyZ19yZXN1bHQgPSBzZWxmLnZpc2l0KGNhbGwuc3RhcmFy
Z3MpCisgICAgICAgICAgICBhcmdfbmFtZSA9ICJfX2V4cHJpbmZvX3N0YXIiCisgICAgICAgICAg
ICBuc1thcmdfbmFtZV0gPSBhcmdfcmVzdWx0CisgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5k
KCIqJXMiICUgKGFyZ19uYW1lLCkpCisgICAgICAgICAgICBhcmdfZXhwbGFuYXRpb25zLmFwcGVu
ZCgiKiVzIiAlIChhcmdfZXhwbGFuYXRpb24sKSkKKworICAgICAgICBpZiBnZXRhdHRyKGNhbGws
ICdrd2FyZ3MnLCBOb25lKToKKyAgICAgICAgICAgIGFyZ19leHBsYW5hdGlvbiwgYXJnX3Jlc3Vs
dCA9IHNlbGYudmlzaXQoY2FsbC5rd2FyZ3MpCisgICAgICAgICAgICBhcmdfbmFtZSA9ICJfX2V4
cHJpbmZvX2t3ZHMiCisgICAgICAgICAgICBuc1thcmdfbmFtZV0gPSBhcmdfcmVzdWx0CisgICAg
ICAgICAgICBhcmd1bWVudHMuYXBwZW5kKCIqKiVzIiAlIChhcmdfbmFtZSwpKQorICAgICAgICAg
ICAgYXJnX2V4cGxhbmF0aW9ucy5hcHBlbmQoIioqJXMiICUgKGFyZ19leHBsYW5hdGlvbiwpKQor
ICAgICAgICBhcmdzX2V4cGxhaW5lZCA9ICIsICIuam9pbihhcmdfZXhwbGFuYXRpb25zKQorICAg
ICAgICBleHBsYW5hdGlvbiA9ICIlcyglcykiICUgKGZ1bmNfZXhwbGFuYXRpb24sIGFyZ3NfZXhw
bGFpbmVkKQorICAgICAgICBhcmdzID0gIiwgIi5qb2luKGFyZ3VtZW50cykKKyAgICAgICAgc291
cmNlID0gIl9fZXhwcmluZm9fZnVuYyglcykiICUgKGFyZ3MsKQorICAgICAgICBjbyA9IHNlbGYu
X2NvbXBpbGUoc291cmNlKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXN1bHQgPSBzZWxm
LmZyYW1lLmV2YWwoY28sICoqbnMpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAg
ICAgICByYWlzZSBGYWlsdXJlKGV4cGxhbmF0aW9uKQorICAgICAgICBwYXR0ZXJuID0gIiVzXG57
JXMgPSAlc1xufSIKKyAgICAgICAgcmVwID0gc2VsZi5mcmFtZS5yZXByKHJlc3VsdCkKKyAgICAg
ICAgZXhwbGFuYXRpb24gPSBwYXR0ZXJuICUgKHJlcCwgcmVwLCBleHBsYW5hdGlvbikKKyAgICAg
ICAgcmV0dXJuIGV4cGxhbmF0aW9uLCByZXN1bHQKKworICAgIGRlZiBfaXNfYnVpbHRpbl9uYW1l
KHNlbGYsIG5hbWUpOgorICAgICAgICBwYXR0ZXJuID0gIiVyIG5vdCBpbiBnbG9iYWxzKCkgYW5k
ICVyIG5vdCBpbiBsb2NhbHMoKSIKKyAgICAgICAgc291cmNlID0gcGF0dGVybiAlIChuYW1lLmlk
LCBuYW1lLmlkKQorICAgICAgICBjbyA9IHNlbGYuX2NvbXBpbGUoc291cmNlKQorICAgICAgICB0
cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5mcmFtZS5ldmFsKGNvKQorICAgICAgICBleGNl
cHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgdmlzaXRf
QXR0cmlidXRlKHNlbGYsIGF0dHIpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShhdHRyLmN0
eCwgYXN0LkxvYWQpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2VuZXJpY192aXNpdChhdHRy
KQorICAgICAgICBzb3VyY2VfZXhwbGFuYXRpb24sIHNvdXJjZV9yZXN1bHQgPSBzZWxmLnZpc2l0
KGF0dHIudmFsdWUpCisgICAgICAgIGV4cGxhbmF0aW9uID0gIiVzLiVzIiAlIChzb3VyY2VfZXhw
bGFuYXRpb24sIGF0dHIuYXR0cikKKyAgICAgICAgc291cmNlID0gIl9fZXhwcmluZm9fZXhwci4l
cyIgJSAoYXR0ci5hdHRyLCkKKyAgICAgICAgY28gPSBzZWxmLl9jb21waWxlKHNvdXJjZSkKKyAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNl
bGYuZnJhbWUuZXZhbChjbywgX19leHByaW5mb19leHByPXNvdXJjZV9yZXN1bHQpCisgICAgICAg
ICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgIyBNYXliZSB0aGUg
YXR0cmlidXRlIG5hbWUgbmVlZHMgdG8gYmUgbWFuZ2xlZD8KKyAgICAgICAgICAgICAgICBpZiBu
b3QgYXR0ci5hdHRyLnN0YXJ0c3dpdGgoIl9fIikgb3IgYXR0ci5hdHRyLmVuZHN3aXRoKCJfXyIp
OgorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgIHNvdXJjZSA9ICJn
ZXRhdHRyKF9fZXhwcmluZm9fZXhwci5fX2NsYXNzX18sICdfX25hbWVfXycsICcnKSIKKyAgICAg
ICAgICAgICAgICBjbyA9IHNlbGYuX2NvbXBpbGUoc291cmNlKQorICAgICAgICAgICAgICAgIGNs
YXNzX25hbWUgPSBzZWxmLmZyYW1lLmV2YWwoY28sIF9fZXhwcmluZm9fZXhwcj1zb3VyY2VfcmVz
dWx0KQorICAgICAgICAgICAgICAgIG1hbmdsZWRfYXR0ciA9ICJfIiArIGNsYXNzX25hbWUgKyAg
YXR0ci5hdHRyCisgICAgICAgICAgICAgICAgc291cmNlID0gIl9fZXhwcmluZm9fZXhwci4lcyIg
JSAobWFuZ2xlZF9hdHRyLCkKKyAgICAgICAgICAgICAgICBjbyA9IHNlbGYuX2NvbXBpbGUoc291
cmNlKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuZnJhbWUuZXZhbChjbywgX19leHBy
aW5mb19leHByPXNvdXJjZV9yZXN1bHQpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAg
ICAgICAgICByYWlzZSBGYWlsdXJlKGV4cGxhbmF0aW9uKQorICAgICAgICBleHBsYW5hdGlvbiA9
ICIlc1xueyVzID0gJXMuJXNcbn0iICUgKHNlbGYuZnJhbWUucmVwcihyZXN1bHQpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZnJhbWUucmVwcihy
ZXN1bHQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNv
dXJjZV9leHBsYW5hdGlvbiwgYXR0ci5hdHRyKQorICAgICAgICAjIENoZWNrIGlmIHRoZSBhdHRy
IGlzIGZyb20gYW4gaW5zdGFuY2UuCisgICAgICAgIHNvdXJjZSA9ICIlciBpbiBnZXRhdHRyKF9f
ZXhwcmluZm9fZXhwciwgJ19fZGljdF9fJywge30pIgorICAgICAgICBzb3VyY2UgPSBzb3VyY2Ug
JSAoYXR0ci5hdHRyLCkKKyAgICAgICAgY28gPSBzZWxmLl9jb21waWxlKHNvdXJjZSkKKyAgICAg
ICAgdHJ5OgorICAgICAgICAgICAgZnJvbV9pbnN0YW5jZSA9IHNlbGYuZnJhbWUuZXZhbChjbywg
X19leHByaW5mb19leHByPXNvdXJjZV9yZXN1bHQpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246
CisgICAgICAgICAgICBmcm9tX2luc3RhbmNlID0gTm9uZQorICAgICAgICBpZiBmcm9tX2luc3Rh
bmNlIGlzIE5vbmUgb3Igc2VsZi5mcmFtZS5pc190cnVlKGZyb21faW5zdGFuY2UpOgorICAgICAg
ICAgICAgcmVwID0gc2VsZi5mcmFtZS5yZXByKHJlc3VsdCkKKyAgICAgICAgICAgIHBhdHRlcm4g
PSAiJXNcbnslcyA9ICVzXG59IgorICAgICAgICAgICAgZXhwbGFuYXRpb24gPSBwYXR0ZXJuICUg
KHJlcCwgcmVwLCBleHBsYW5hdGlvbikKKyAgICAgICAgcmV0dXJuIGV4cGxhbmF0aW9uLCByZXN1
bHQKKworICAgIGRlZiB2aXNpdF9Bc3NlcnQoc2VsZiwgYXNzcnQpOgorICAgICAgICB0ZXN0X2V4
cGxhbmF0aW9uLCB0ZXN0X3Jlc3VsdCA9IHNlbGYudmlzaXQoYXNzcnQudGVzdCkKKyAgICAgICAg
ZXhwbGFuYXRpb24gPSAiYXNzZXJ0ICVzIiAlICh0ZXN0X2V4cGxhbmF0aW9uLCkKKyAgICAgICAg
aWYgbm90IHNlbGYuZnJhbWUuaXNfdHJ1ZSh0ZXN0X3Jlc3VsdCk6CisgICAgICAgICAgICB0cnk6
CisgICAgICAgICAgICAgICAgcmFpc2UgdXRpbC5CdWlsdGluQXNzZXJ0aW9uRXJyb3IKKyAgICAg
ICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgcmFpc2UgRmFpbHVyZShl
eHBsYW5hdGlvbikKKyAgICAgICAgcmV0dXJuIGV4cGxhbmF0aW9uLCB0ZXN0X3Jlc3VsdAorCisg
ICAgZGVmIHZpc2l0X0Fzc2lnbihzZWxmLCBhc3NpZ24pOgorICAgICAgICB2YWx1ZV9leHBsYW5h
dGlvbiwgdmFsdWVfcmVzdWx0ID0gc2VsZi52aXNpdChhc3NpZ24udmFsdWUpCisgICAgICAgIGV4
cGxhbmF0aW9uID0gIi4uLiA9ICVzIiAlICh2YWx1ZV9leHBsYW5hdGlvbiwpCisgICAgICAgIG5h
bWUgPSBhc3QuTmFtZSgiX19leHByaW5mb19leHByIiwgYXN0LkxvYWQoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGxpbmVubz1hc3NpZ24udmFsdWUubGluZW5vLAorICAgICAgICAgICAgICAg
ICAgICAgICAgY29sX29mZnNldD1hc3NpZ24udmFsdWUuY29sX29mZnNldCkKKyAgICAgICAgbmV3
X2Fzc2lnbiA9IGFzdC5Bc3NpZ24oYXNzaWduLnRhcmdldHMsIG5hbWUsIGxpbmVubz1hc3NpZ24u
bGluZW5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfb2Zmc2V0PWFzc2ln
bi5jb2xfb2Zmc2V0KQorICAgICAgICBtb2QgPSBhc3QuTW9kdWxlKFtuZXdfYXNzaWduXSkKKyAg
ICAgICAgY28gPSBzZWxmLl9jb21waWxlKG1vZCwgImV4ZWMiKQorICAgICAgICB0cnk6CisgICAg
ICAgICAgICBzZWxmLmZyYW1lLmV4ZWNfKGNvLCBfX2V4cHJpbmZvX2V4cHI9dmFsdWVfcmVzdWx0
KQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgcmFpc2UgRmFpbHVyZShl
eHBsYW5hdGlvbikKKyAgICAgICAgcmV0dXJuIGV4cGxhbmF0aW9uLCB2YWx1ZV9yZXN1bHQKKwpk
aWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0
ZXN0L2Fzc2VydGlvbi9yZXdyaXRlLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rv
b2xzL3B5dGVzdC9fcHl0ZXN0L2Fzc2VydGlvbi9yZXdyaXRlLnB5Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xNGI4ZTQ5ZGIyYgotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9hc3NlcnRpb24v
cmV3cml0ZS5weQpAQCAtMCwwICsxLDg4NSBAQAorIiIiUmV3cml0ZSBhc3NlcnRpb24gQVNUIHRv
IHByb2R1Y2UgbmljZSBlcnJvciBtZXNzYWdlcyIiIgorCitpbXBvcnQgYXN0CitpbXBvcnQgZXJy
bm8KK2ltcG9ydCBpdGVydG9vbHMKK2ltcG9ydCBpbXAKK2ltcG9ydCBtYXJzaGFsCitpbXBvcnQg
b3MKK2ltcG9ydCByZQoraW1wb3J0IHN0cnVjdAoraW1wb3J0IHN5cworaW1wb3J0IHR5cGVzCisK
K2ltcG9ydCBweQorZnJvbSBfcHl0ZXN0LmFzc2VydGlvbiBpbXBvcnQgdXRpbAorCisKKyMgcHl0
ZXN0IGNhY2hlcyByZXdyaXR0ZW4gcHljcyBpbiBfX3B5Y2FjaGVfXy4KK2lmIGhhc2F0dHIoaW1w
LCAiZ2V0X3RhZyIpOgorICAgIFBZVEVTVF9UQUcgPSBpbXAuZ2V0X3RhZygpICsgIi1QWVRFU1Qi
CitlbHNlOgorICAgIGlmIGhhc2F0dHIoc3lzLCAicHlweV92ZXJzaW9uX2luZm8iKToKKyAgICAg
ICAgaW1wbCA9ICJweXB5IgorICAgIGVsaWYgc3lzLnBsYXRmb3JtID09ICJqYXZhIjoKKyAgICAg
ICAgaW1wbCA9ICJqeXRob24iCisgICAgZWxzZToKKyAgICAgICAgaW1wbCA9ICJjcHl0aG9uIgor
ICAgIHZlciA9IHN5cy52ZXJzaW9uX2luZm8KKyAgICBQWVRFU1RfVEFHID0gIiVzLSVzJXMtUFlU
RVNUIiAlIChpbXBsLCB2ZXJbMF0sIHZlclsxXSkKKyAgICBkZWwgdmVyLCBpbXBsCisKK1BZQ19F
WFQgPSAiLnB5IiArIChfX2RlYnVnX18gYW5kICJjIiBvciAibyIpCitQWUNfVEFJTCA9ICIuIiAr
IFBZVEVTVF9UQUcgKyBQWUNfRVhUCisKK1JFV1JJVEVfTkVXTElORVMgPSBzeXMudmVyc2lvbl9p
bmZvWzoyXSAhPSAoMiwgNykgYW5kIHN5cy52ZXJzaW9uX2luZm8gPCAoMywgMikKK0FTQ0lJX0lT
X0RFRkFVTFRfRU5DT0RJTkcgPSBzeXMudmVyc2lvbl9pbmZvWzBdIDwgMworCitpZiBzeXMudmVy
c2lvbl9pbmZvID49ICgzLDUpOgorICAgIGFzdF9DYWxsID0gYXN0LkNhbGwKK2Vsc2U6CisgICAg
YXN0X0NhbGwgPSBsYW1iZGEgYSxiLGM6IGFzdC5DYWxsKGEsIGIsIGMsIE5vbmUsIE5vbmUpCisK
KworY2xhc3MgQXNzZXJ0aW9uUmV3cml0aW5nSG9vayhvYmplY3QpOgorICAgICIiIlBFUDMwMiBJ
bXBvcnQgaG9vayB3aGljaCByZXdyaXRlcyBhc3NlcnRzLiIiIgorCisgICAgZGVmIF9faW5pdF9f
KHNlbGYpOgorICAgICAgICBzZWxmLnNlc3Npb24gPSBOb25lCisgICAgICAgIHNlbGYubW9kdWxl
cyA9IHt9CisgICAgICAgIHNlbGYuX3JlZ2lzdGVyX3dpdGhfcGtnX3Jlc291cmNlcygpCisKKyAg
ICBkZWYgc2V0X3Nlc3Npb24oc2VsZiwgc2Vzc2lvbik6CisgICAgICAgIHNlbGYuZm5wYXRzID0g
c2Vzc2lvbi5jb25maWcuZ2V0aW5pKCJweXRob25fZmlsZXMiKQorICAgICAgICBzZWxmLnNlc3Np
b24gPSBzZXNzaW9uCisKKyAgICBkZWYgZmluZF9tb2R1bGUoc2VsZiwgbmFtZSwgcGF0aD1Ob25l
KToKKyAgICAgICAgaWYgc2VsZi5zZXNzaW9uIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4g
Tm9uZQorICAgICAgICBzZXNzID0gc2VsZi5zZXNzaW9uCisgICAgICAgIHN0YXRlID0gc2Vzcy5j
b25maWcuX2Fzc2VydHN0YXRlCisgICAgICAgIHN0YXRlLnRyYWNlKCJmaW5kX21vZHVsZSBjYWxs
ZWQgZm9yOiAlcyIgJSBuYW1lKQorICAgICAgICBuYW1lcyA9IG5hbWUucnNwbGl0KCIuIiwgMSkK
KyAgICAgICAgbGFzdG5hbWUgPSBuYW1lc1stMV0KKyAgICAgICAgcHRoID0gTm9uZQorICAgICAg
ICBpZiBwYXRoIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgIyBTdGFydGluZyB3aXRoIFB5dGhv
biAzLjMsIHBhdGggaXMgYSBfTmFtZXNwYWNlUGF0aCgpLCB3aGljaAorICAgICAgICAgICAgIyBj
YXVzZXMgcHJvYmxlbXMgaWYgbm90IGNvbnZlcnRlZCB0byBsaXN0LgorICAgICAgICAgICAgcGF0
aCA9IGxpc3QocGF0aCkKKyAgICAgICAgICAgIGlmIGxlbihwYXRoKSA9PSAxOgorICAgICAgICAg
ICAgICAgIHB0aCA9IHBhdGhbMF0KKyAgICAgICAgaWYgcHRoIGlzIE5vbmU6CisgICAgICAgICAg
ICB0cnk6CisgICAgICAgICAgICAgICAgZmQsIGZuLCBkZXNjID0gaW1wLmZpbmRfbW9kdWxlKGxh
c3RuYW1lLCBwYXRoKQorICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAg
ICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICBpZiBmZCBpcyBub3QgTm9uZToKKyAgICAg
ICAgICAgICAgICBmZC5jbG9zZSgpCisgICAgICAgICAgICB0cCA9IGRlc2NbMl0KKyAgICAgICAg
ICAgIGlmIHRwID09IGltcC5QWV9DT01QSUxFRDoKKyAgICAgICAgICAgICAgICBpZiBoYXNhdHRy
KGltcCwgInNvdXJjZV9mcm9tX2NhY2hlIik6CisgICAgICAgICAgICAgICAgICAgIGZuID0gaW1w
LnNvdXJjZV9mcm9tX2NhY2hlKGZuKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICAgICAgICAgIGZuID0gZm5bOi0xXQorICAgICAgICAgICAgZWxpZiB0cCAhPSBpbXAuUFlfU09V
UkNFOgorICAgICAgICAgICAgICAgICMgRG9uJ3Qga25vdyB3aGF0IHRoaXMgaXMuCisgICAgICAg
ICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZuID0gb3Mu
cGF0aC5qb2luKHB0aCwgbmFtZS5ycGFydGl0aW9uKCIuIilbMl0gKyAiLnB5IikKKyAgICAgICAg
Zm5fcHlwYXRoID0gcHkucGF0aC5sb2NhbChmbikKKyAgICAgICAgIyBJcyB0aGlzIGEgdGVzdCBm
aWxlPworICAgICAgICBpZiBub3Qgc2Vzcy5pc2luaXRwYXRoKGZuKToKKyAgICAgICAgICAgICMg
V2UgaGF2ZSB0byBiZSB2ZXJ5IGNhcmVmdWwgaGVyZSBiZWNhdXNlIGltcG9ydHMgaW4gdGhpcyBj
b2RlIGNhbgorICAgICAgICAgICAgIyB0cmlnZ2VyIGEgY3ljbGUuCisgICAgICAgICAgICBzZWxm
LnNlc3Npb24gPSBOb25lCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZm9yIHBh
dCBpbiBzZWxmLmZucGF0czoKKyAgICAgICAgICAgICAgICAgICAgaWYgZm5fcHlwYXRoLmZubWF0
Y2gocGF0KToKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnRyYWNlKCJtYXRjaGVkIHRl
c3QgZmlsZSAlciIgJSAoZm4sKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAg
ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAg
ICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc2VsZi5zZXNzaW9uID0gc2VzcworICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgc3RhdGUudHJhY2UoIm1hdGNoZWQgdGVzdCBmaWxlICh3
YXMgc3BlY2lmaWVkIG9uIGNtZGxpbmUpOiAlciIgJQorICAgICAgICAgICAgICAgICAgICAgICAg
KGZuLCkpCisgICAgICAgICMgVGhlIHJlcXVlc3RlZCBtb2R1bGUgbG9va3MgbGlrZSBhIHRlc3Qg
ZmlsZSwgc28gcmV3cml0ZSBpdC4gVGhpcyBpcworICAgICAgICAjIHRoZSBtb3N0IG1hZ2ljYWwg
cGFydCBvZiB0aGUgcHJvY2VzczogbG9hZCB0aGUgc291cmNlLCByZXdyaXRlIHRoZQorICAgICAg
ICAjIGFzc2VydHMsIGFuZCBsb2FkIHRoZSByZXdyaXR0ZW4gc291cmNlLiBXZSBhbHNvIGNhY2hl
IHRoZSByZXdyaXR0ZW4KKyAgICAgICAgIyBtb2R1bGUgY29kZSBpbiBhIHNwZWNpYWwgcHljLiBX
ZSBtdXN0IGJlIGF3YXJlIG9mIHRoZSBwb3NzaWJpbGl0eSBvZgorICAgICAgICAjIGNvbmN1cnJl
bnQgcHl0ZXN0IHByb2Nlc3NlcyByZXdyaXRpbmcgYW5kIGxvYWRpbmcgcHljcy4gVG8gYXZvaWQK
KyAgICAgICAgIyB0cmlja3kgcmFjZSBjb25kaXRpb25zLCB3ZSBtYWludGFpbiB0aGUgZm9sbG93
aW5nIGludmFyaWFudDogVGhlCisgICAgICAgICMgY2FjaGVkIHB5YyBpcyBhbHdheXMgYSBjb21w
bGV0ZSwgdmFsaWQgcHljLiBPcGVyYXRpb25zIG9uIGl0IG11c3QgYmUKKyAgICAgICAgIyBhdG9t
aWMuIFBPU0lYJ3MgYXRvbWljIHJlbmFtZSBjb21lcyBpbiBoYW5keS4KKyAgICAgICAgd3JpdGUg
PSBub3Qgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUKKyAgICAgICAgY2FjaGVfZGlyID0gb3MucGF0
aC5qb2luKGZuX3B5cGF0aC5kaXJuYW1lLCAiX19weWNhY2hlX18iKQorICAgICAgICBpZiB3cml0
ZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvcy5ta2RpcihjYWNoZV9kaXIp
CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBlID0gc3lzLmV4
Y19pbmZvKClbMV0uZXJybm8KKyAgICAgICAgICAgICAgICBpZiBlID09IGVycm5vLkVFWElTVDoK
KyAgICAgICAgICAgICAgICAgICAgIyBFaXRoZXIgdGhlIF9fcHljYWNoZV9fIGRpcmVjdG9yeSBh
bHJlYWR5IGV4aXN0cyAodGhlCisgICAgICAgICAgICAgICAgICAgICMgY29tbW9uIGNhc2UpIG9y
IGl0J3MgYmxvY2tlZCBieSBhIG5vbi1kaXIgbm9kZS4gSW4gdGhlCisgICAgICAgICAgICAgICAg
ICAgICMgbGF0dGVyIGNhc2UsIHdlJ2xsIGlnbm9yZSBpdCBpbiBfd3JpdGVfcHljLgorICAgICAg
ICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgZWxpZiBlIGluIFtlcnJuby5FTk9F
TlQsIGVycm5vLkVOT1RESVJdOgorICAgICAgICAgICAgICAgICAgICAjIE9uZSBvZiB0aGUgcGF0
aCBjb21wb25lbnRzIHdhcyBub3QgYSBkaXJlY3RvcnksIGxpa2VseQorICAgICAgICAgICAgICAg
ICAgICAjIGJlY2F1c2Ugd2UncmUgaW4gYSB6aXAgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAg
d3JpdGUgPSBGYWxzZQorICAgICAgICAgICAgICAgIGVsaWYgZSBpbiBbZXJybm8uRUFDQ0VTLCBl
cnJuby5FUk9GUywgZXJybm8uRVBFUk1dOgorICAgICAgICAgICAgICAgICAgICBzdGF0ZS50cmFj
ZSgicmVhZCBvbmx5IGRpcmVjdG9yeTogJXIiICUgZm5fcHlwYXRoLmRpcm5hbWUpCisgICAgICAg
ICAgICAgICAgICAgIHdyaXRlID0gRmFsc2UKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgICAgICAgICByYWlzZQorICAgICAgICBjYWNoZV9uYW1lID0gZm5fcHlwYXRoLmJhc2Vu
YW1lWzotM10gKyBQWUNfVEFJTAorICAgICAgICBweWMgPSBvcy5wYXRoLmpvaW4oY2FjaGVfZGly
LCBjYWNoZV9uYW1lKQorICAgICAgICAjIE5vdGljZSB0aGF0IGV2ZW4gaWYgd2UncmUgaW4gYSBy
ZWFkLW9ubHkgZGlyZWN0b3J5LCBJJ20gZ29pbmcKKyAgICAgICAgIyB0byBjaGVjayBmb3IgYSBj
YWNoZWQgcHljLiBUaGlzIG1heSBub3QgYmUgb3B0aW1hbC4uLgorICAgICAgICBjbyA9IF9yZWFk
X3B5Yyhmbl9weXBhdGgsIHB5Yywgc3RhdGUudHJhY2UpCisgICAgICAgIGlmIGNvIGlzIE5vbmU6
CisgICAgICAgICAgICBzdGF0ZS50cmFjZSgicmV3cml0aW5nICVyIiAlIChmbiwpKQorICAgICAg
ICAgICAgc291cmNlX3N0YXQsIGNvID0gX3Jld3JpdGVfdGVzdChzdGF0ZSwgZm5fcHlwYXRoKQor
ICAgICAgICAgICAgaWYgY28gaXMgTm9uZToKKyAgICAgICAgICAgICAgICAjIFByb2JhYmx5IGEg
U3ludGF4RXJyb3IgaW4gdGhlIHRlc3QuCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAg
ICAgICAgICAgIGlmIHdyaXRlOgorICAgICAgICAgICAgICAgIF9tYWtlX3Jld3JpdHRlbl9weWMo
c3RhdGUsIHNvdXJjZV9zdGF0LCBweWMsIGNvKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
c3RhdGUudHJhY2UoImZvdW5kIGNhY2hlZCByZXdyaXR0ZW4gcHljIGZvciAlciIgJSAoZm4sKSkK
KyAgICAgICAgc2VsZi5tb2R1bGVzW25hbWVdID0gY28sIHB5YworICAgICAgICByZXR1cm4gc2Vs
ZgorCisgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIG5hbWUpOgorICAgICAgICAjIElmIHRoZXJl
IGlzIGFuIGV4aXN0aW5nIG1vZHVsZSBvYmplY3QgbmFtZWQgJ2Z1bGxuYW1lJyBpbgorICAgICAg
ICAjIHN5cy5tb2R1bGVzLCB0aGUgbG9hZGVyIG11c3QgdXNlIHRoYXQgZXhpc3RpbmcgbW9kdWxl
LiAoT3RoZXJ3aXNlLAorICAgICAgICAjIHRoZSByZWxvYWQoKSBidWlsdGluIHdpbGwgbm90IHdv
cmsgY29ycmVjdGx5LikKKyAgICAgICAgaWYgbmFtZSBpbiBzeXMubW9kdWxlczoKKyAgICAgICAg
ICAgIHJldHVybiBzeXMubW9kdWxlc1tuYW1lXQorCisgICAgICAgIGNvLCBweWMgPSBzZWxmLm1v
ZHVsZXMucG9wKG5hbWUpCisgICAgICAgICMgSSB3aXNoIEkgY291bGQganVzdCBjYWxsIGltcC5s
b2FkX2NvbXBpbGVkIGhlcmUsIGJ1dCBfX2ZpbGVfXyBoYXMgdG8KKyAgICAgICAgIyBiZSBzZXQg
cHJvcGVybHkuIEluIFB5dGhvbiAzLjIrLCB0aGlzIGFsbCB3b3VsZCBiZSBoYW5kbGVkIGNvcnJl
Y3RseQorICAgICAgICAjIGJ5IGxvYWRfY29tcGlsZWQuCisgICAgICAgIG1vZCA9IHN5cy5tb2R1
bGVzW25hbWVdID0gaW1wLm5ld19tb2R1bGUobmFtZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgbW9kLl9fZmlsZV9fID0gY28uY29fZmlsZW5hbWUKKyAgICAgICAgICAgICMgTm9ybWFsbHks
IHRoaXMgYXR0cmlidXRlIGlzIDMuMisuCisgICAgICAgICAgICBtb2QuX19jYWNoZWRfXyA9IHB5
YworICAgICAgICAgICAgbW9kLl9fbG9hZGVyX18gPSBzZWxmCisgICAgICAgICAgICBweS5idWls
dGluLmV4ZWNfKGNvLCBtb2QuX19kaWN0X18pCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAg
IGRlbCBzeXMubW9kdWxlc1tuYW1lXQorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgcmV0dXJu
IHN5cy5tb2R1bGVzW25hbWVdCisKKworCisgICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgbmFtZSk6
CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZkLCBmbiwgZGVzYyA9IGltcC5maW5kX21vZHVs
ZShuYW1lKQorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICByZXR1cm4g
RmFsc2UKKyAgICAgICAgaWYgZmQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBmZC5jbG9zZSgp
CisgICAgICAgIHRwID0gZGVzY1syXQorICAgICAgICByZXR1cm4gdHAgPT0gaW1wLlBLR19ESVJF
Q1RPUlkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfcmVnaXN0ZXJfd2l0aF9wa2dfcmVz
b3VyY2VzKGNscyk6CisgICAgICAgICIiIgorICAgICAgICBFbnN1cmUgcGFja2FnZSByZXNvdXJj
ZXMgY2FuIGJlIGxvYWRlZCBmcm9tIHRoaXMgbG9hZGVyLiBNYXkgYmUgY2FsbGVkCisgICAgICAg
IG11bHRpcGxlIHRpbWVzLCBhcyB0aGUgb3BlcmF0aW9uIGlzIGlkZW1wb3RlbnQuCisgICAgICAg
ICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpbXBvcnQgcGtnX3Jlc291cmNlcworICAg
ICAgICAgICAgIyBhY2Nlc3MgYW4gYXR0cmlidXRlIGluIGNhc2UgYSBkZWZlcnJlZCBpbXBvcnRl
ciBpcyBwcmVzZW50CisgICAgICAgICAgICBwa2dfcmVzb3VyY2VzLl9fbmFtZV9fCisgICAgICAg
IGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgU2lu
Y2UgcHl0ZXN0IHRlc3RzIGFyZSBhbHdheXMgbG9jYXRlZCBpbiB0aGUgZmlsZSBzeXN0ZW0sIHRo
ZQorICAgICAgICAjICBEZWZhdWx0UHJvdmlkZXIgaXMgYXBwcm9wcmlhdGUuCisgICAgICAgIHBr
Z19yZXNvdXJjZXMucmVnaXN0ZXJfbG9hZGVyX3R5cGUoY2xzLCBwa2dfcmVzb3VyY2VzLkRlZmF1
bHRQcm92aWRlcikKKworICAgIGRlZiBnZXRfZGF0YShzZWxmLCBwYXRobmFtZSk6CisgICAgICAg
ICIiIk9wdGlvbmFsIFBFUDMwMiBnZXRfZGF0YSBBUEkuCisgICAgICAgICIiIgorICAgICAgICB3
aXRoIG9wZW4ocGF0aG5hbWUsICdyYicpIGFzIGY6CisgICAgICAgICAgICByZXR1cm4gZi5yZWFk
KCkKKworCitkZWYgX3dyaXRlX3B5YyhzdGF0ZSwgY28sIHNvdXJjZV9zdGF0LCBweWMpOgorICAg
ICMgVGVjaG5pY2FsbHksIHdlIGRvbid0IGhhdmUgdG8gaGF2ZSB0aGUgc2FtZSBweWMgZm9ybWF0
IGFzCisgICAgIyAoQylQeXRob24sIHNpbmNlIHRoZXNlICJweWNzIiBzaG91bGQgbmV2ZXIgYmUg
c2VlbiBieSBidWlsdGluCisgICAgIyBpbXBvcnQuIEhvd2V2ZXIsIHRoZXJlJ3MgbGl0dGxlIHJl
YXNvbiBkZXZpYXRlLCBhbmQgSSBob3BlCisgICAgIyBzb21ldGltZSB0byBiZSBhYmxlIHRvIHVz
ZSBpbXAubG9hZF9jb21waWxlZCB0byBsb2FkIHRoZW0uIChTZWUKKyAgICAjIHRoZSBjb21tZW50
IGluIGxvYWRfbW9kdWxlIGFib3ZlLikKKyAgICB0cnk6CisgICAgICAgIGZwID0gb3BlbihweWMs
ICJ3YiIpCisgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIGVyciA9IHN5cy5leGNfaW5mbygp
WzFdLmVycm5vCisgICAgICAgIHN0YXRlLnRyYWNlKCJlcnJvciB3cml0aW5nIHB5YyBmaWxlIGF0
ICVzOiBlcnJubz0lcyIgJShweWMsIGVycikpCisgICAgICAgICMgd2UgaWdub3JlIGFueSBmYWls
dXJlIHRvIHdyaXRlIHRoZSBjYWNoZSBmaWxlCisgICAgICAgICMgdGhlcmUgYXJlIG1hbnkgcmVh
c29ucywgcGVybWlzc2lvbi1kZW5pZWQsIF9fcHljYWNoZV9fIGJlaW5nIGEKKyAgICAgICAgIyBm
aWxlIGV0Yy4KKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgdHJ5OgorICAgICAgICBmcC53cml0
ZShpbXAuZ2V0X21hZ2ljKCkpCisgICAgICAgIG10aW1lID0gaW50KHNvdXJjZV9zdGF0Lm10aW1l
KQorICAgICAgICBzaXplID0gc291cmNlX3N0YXQuc2l6ZSAmIDB4RkZGRkZGRkYKKyAgICAgICAg
ZnAud3JpdGUoc3RydWN0LnBhY2soIjxsbCIsIG10aW1lLCBzaXplKSkKKyAgICAgICAgbWFyc2hh
bC5kdW1wKGNvLCBmcCkKKyAgICBmaW5hbGx5OgorICAgICAgICBmcC5jbG9zZSgpCisgICAgcmV0
dXJuIFRydWUKKworUk4gPSAiXHJcbiIuZW5jb2RlKCJ1dGYtOCIpCitOID0gIlxuIi5lbmNvZGUo
InV0Zi04IikKKworY29va2llX3JlID0gcmUuY29tcGlsZShyIl5bIFx0XGZdKiMuKmNvZGluZ1s6
PV1bIFx0XSpbLVx3Ll0rIikKK0JPTV9VVEY4ID0gJ1x4ZWZceGJiXHhiZicKKworZGVmIF9yZXdy
aXRlX3Rlc3Qoc3RhdGUsIGZuKToKKyAgICAiIiJUcnkgdG8gcmVhZCBhbmQgcmV3cml0ZSAqZm4q
IGFuZCByZXR1cm4gdGhlIGNvZGUgb2JqZWN0LiIiIgorICAgIHRyeToKKyAgICAgICAgc3RhdCA9
IGZuLnN0YXQoKQorICAgICAgICBzb3VyY2UgPSBmbi5yZWFkKCJyYiIpCisgICAgZXhjZXB0IEVu
dmlyb25tZW50RXJyb3I6CisgICAgICAgIHJldHVybiBOb25lLCBOb25lCisgICAgaWYgQVNDSUlf
SVNfREVGQVVMVF9FTkNPRElORzoKKyAgICAgICAgIyBBU0NJSSBpcyB0aGUgZGVmYXVsdCBlbmNv
ZGluZyBpbiBQeXRob24gMi4gV2l0aG91dCBhIGNvZGluZworICAgICAgICAjIGRlY2xhcmF0aW9u
LCBQeXRob24gMiB3aWxsIGNvbXBsYWluIGFib3V0IGFueSBieXRlcyBpbiB0aGUgZmlsZQorICAg
ICAgICAjIG91dHNpZGUgdGhlIEFTQ0lJIHJhbmdlLiBTYWRseSwgdGhpcyBiZWhhdmlvciBkb2Vz
IG5vdCBleHRlbmQgdG8KKyAgICAgICAgIyBjb21waWxlKCkgb3IgYXN0LnBhcnNlKCksIHdoaWNo
IHByZWZlciB0byBpbnRlcnByZXQgdGhlIGJ5dGVzIGFzCisgICAgICAgICMgbGF0aW4tMS4gKEF0
IGxlYXN0IHRoZXkgcHJvcGVybHkgaGFuZGxlIGV4cGxpY2l0IGNvZGluZyBjb29raWVzLikgVG8K
KyAgICAgICAgIyBwcmVzZXJ2ZSB0aGlzIGVycm9yIGJlaGF2aW9yLCB3ZSBjb3VsZCBmb3JjZSBh
c3QucGFyc2UoKSB0byB1c2UgQVNDSUkKKyAgICAgICAgIyBhcyB0aGUgZW5jb2RpbmcgYnkgaW5z
ZXJ0aW5nIGEgY29kaW5nIGNvb2tpZS4gVW5mb3J0dW5hdGVseSwgdGhhdAorICAgICAgICAjIG1l
c3NlcyB1cCBsaW5lIG51bWJlcnMuIFRodXMsIHdlIGhhdmUgdG8gY2hlY2sgb3Vyc2VsdmVzIGlm
IGFueXRoaW5nCisgICAgICAgICMgaXMgb3V0c2lkZSB0aGUgQVNDSUkgcmFuZ2UgaW4gdGhlIGNh
c2Ugbm8gZW5jb2RpbmcgaXMgZXhwbGljaXRseQorICAgICAgICAjIGRlY2xhcmVkLiBGb3IgbW9y
ZSBjb250ZXh0LCBzZWUgaXNzdWUgIzI2OS4gWWF5IGZvciBQeXRob24gMyB3aGljaAorICAgICAg
ICAjIGdldHMgdGhpcyByaWdodC4KKyAgICAgICAgZW5kMSA9IHNvdXJjZS5maW5kKCJcbiIpCisg
ICAgICAgIGVuZDIgPSBzb3VyY2UuZmluZCgiXG4iLCBlbmQxICsgMSkKKyAgICAgICAgaWYgKG5v
dCBzb3VyY2Uuc3RhcnRzd2l0aChCT01fVVRGOCkgYW5kCisgICAgICAgICAgICBjb29raWVfcmUu
bWF0Y2goc291cmNlWzA6ZW5kMV0pIGlzIE5vbmUgYW5kCisgICAgICAgICAgICBjb29raWVfcmUu
bWF0Y2goc291cmNlW2VuZDEgKyAxOmVuZDJdKSBpcyBOb25lKToKKyAgICAgICAgICAgIGlmIGhh
c2F0dHIoc3RhdGUsICJfaW5kZWNvZGUiKToKKyAgICAgICAgICAgICAgICAjIGVuY29kaW5ncyBp
bXBvcnRlZCB1cyBhZ2Fpbiwgc28gZG9uJ3QgcmV3cml0ZS4KKyAgICAgICAgICAgICAgICByZXR1
cm4gTm9uZSwgTm9uZQorICAgICAgICAgICAgc3RhdGUuX2luZGVjb2RlID0gVHJ1ZQorICAgICAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc291
cmNlLmRlY29kZSgiYXNjaWkiKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBVbmljb2RlRGVjb2Rl
RXJyb3I6CisgICAgICAgICAgICAgICAgICAgICMgTGV0IGl0IGZhaWwgaW4gcmVhbCBpbXBvcnQu
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lLCBOb25lCisgICAgICAgICAgICBmaW5h
bGx5OgorICAgICAgICAgICAgICAgIGRlbCBzdGF0ZS5faW5kZWNvZGUKKyAgICAjIE9uIFB5dGhv
biB2ZXJzaW9ucyB3aGljaCBhcmUgbm90IDIuNyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDMu
MSwgdGhlCisgICAgIyBwYXJzZXIgZXhwZWN0cyAqbml4IG5ld2xpbmVzLgorICAgIGlmIFJFV1JJ
VEVfTkVXTElORVM6CisgICAgICAgIHNvdXJjZSA9IHNvdXJjZS5yZXBsYWNlKFJOLCBOKSArIE4K
KyAgICB0cnk6CisgICAgICAgIHRyZWUgPSBhc3QucGFyc2Uoc291cmNlKQorICAgIGV4Y2VwdCBT
eW50YXhFcnJvcjoKKyAgICAgICAgIyBMZXQgdGhpcyBwb3AgdXAgYWdhaW4gaW4gdGhlIHJlYWwg
aW1wb3J0LgorICAgICAgICBzdGF0ZS50cmFjZSgiZmFpbGVkIHRvIHBhcnNlOiAlciIgJSAoZm4s
KSkKKyAgICAgICAgcmV0dXJuIE5vbmUsIE5vbmUKKyAgICByZXdyaXRlX2Fzc2VydHModHJlZSkK
KyAgICB0cnk6CisgICAgICAgIGNvID0gY29tcGlsZSh0cmVlLCBmbi5zdHJwYXRoLCAiZXhlYyIp
CisgICAgZXhjZXB0IFN5bnRheEVycm9yOgorICAgICAgICAjIEl0J3MgcG9zc2libGUgdGhhdCB0
aGlzIGVycm9yIGlzIGZyb20gc29tZSBidWcgaW4gdGhlCisgICAgICAgICMgYXNzZXJ0aW9uIHJl
d3JpdGluZywgYnV0IEkgZG9uJ3Qga25vdyBvZiBhIGZhc3Qgd2F5IHRvIHRlbGwuCisgICAgICAg
IHN0YXRlLnRyYWNlKCJmYWlsZWQgdG8gY29tcGlsZTogJXIiICUgKGZuLCkpCisgICAgICAgIHJl
dHVybiBOb25lLCBOb25lCisgICAgcmV0dXJuIHN0YXQsIGNvCisKK2RlZiBfbWFrZV9yZXdyaXR0
ZW5fcHljKHN0YXRlLCBzb3VyY2Vfc3RhdCwgcHljLCBjbyk6CisgICAgIiIiVHJ5IHRvIGR1bXAg
cmV3cml0dGVuIGNvZGUgdG8gKnB5YyouIiIiCisgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dp
dGgoIndpbiIpOgorICAgICAgICAjIFdpbmRvd3MgZ3JhbnRzIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8g
b3BlbiBmaWxlcyBhbmQgZG9lc24ndCBoYXZlIGF0b21pYworICAgICAgICAjIHJlbmFtZSwgc28g
anVzdCB3cml0ZSBpbnRvIHRoZSBmaW5hbCBmaWxlLgorICAgICAgICBfd3JpdGVfcHljKHN0YXRl
LCBjbywgc291cmNlX3N0YXQsIHB5YykKKyAgICBlbHNlOgorICAgICAgICAjIFdoZW4gbm90IG9u
IHdpbmRvd3MsIGFzc3VtZSByZW5hbWUgaXMgYXRvbWljLiBEdW1wIHRoZSBjb2RlIG9iamVjdAor
ICAgICAgICAjIGludG8gYSBmaWxlIHNwZWNpZmljIHRvIHRoaXMgcHJvY2VzcyBhbmQgYXRvbWlj
YWxseSByZXBsYWNlIGl0LgorICAgICAgICBwcm9jX3B5YyA9IHB5YyArICIuIiArIHN0cihvcy5n
ZXRwaWQoKSkKKyAgICAgICAgaWYgX3dyaXRlX3B5YyhzdGF0ZSwgY28sIHNvdXJjZV9zdGF0LCBw
cm9jX3B5Yyk6CisgICAgICAgICAgICBvcy5yZW5hbWUocHJvY19weWMsIHB5YykKKworZGVmIF9y
ZWFkX3B5Yyhzb3VyY2UsIHB5YywgdHJhY2U9bGFtYmRhIHg6IE5vbmUpOgorICAgICIiIlBvc3Np
Ymx5IHJlYWQgYSBweXRlc3QgcHljIGNvbnRhaW5pbmcgcmV3cml0dGVuIGNvZGUuCisKKyAgICBS
ZXR1cm4gcmV3cml0dGVuIGNvZGUgaWYgc3VjY2Vzc2Z1bCBvciBOb25lIGlmIG5vdC4KKyAgICAi
IiIKKyAgICB0cnk6CisgICAgICAgIGZwID0gb3BlbihweWMsICJyYiIpCisgICAgZXhjZXB0IElP
RXJyb3I6CisgICAgICAgIHJldHVybiBOb25lCisgICAgd2l0aCBmcDoKKyAgICAgICAgdHJ5Ogor
ICAgICAgICAgICAgbXRpbWUgPSBpbnQoc291cmNlLm10aW1lKCkpCisgICAgICAgICAgICBzaXpl
ID0gc291cmNlLnNpemUoKQorICAgICAgICAgICAgZGF0YSA9IGZwLnJlYWQoMTIpCisgICAgICAg
IGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yIGFzIGU6CisgICAgICAgICAgICB0cmFjZSgnX3JlYWRf
cHljKCVzKTogRW52aXJvbm1lbnRFcnJvciAlcycgJSAoc291cmNlLCBlKSkKKyAgICAgICAgICAg
IHJldHVybiBOb25lCisgICAgICAgICMgQ2hlY2sgZm9yIGludmFsaWQgb3Igb3V0IG9mIGRhdGUg
cHljIGZpbGUuCisgICAgICAgIGlmIChsZW4oZGF0YSkgIT0gMTIgb3IgZGF0YVs6NF0gIT0gaW1w
LmdldF9tYWdpYygpIG9yCisgICAgICAgICAgICAgICAgc3RydWN0LnVucGFjaygiPGxsIiwgZGF0
YVs0Ol0pICE9IChtdGltZSwgc2l6ZSkpOgorICAgICAgICAgICAgdHJhY2UoJ19yZWFkX3B5Yygl
cyk6IGludmFsaWQgb3Igb3V0IG9mIGRhdGUgcHljJyAlIHNvdXJjZSkKKyAgICAgICAgICAgIHJl
dHVybiBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvID0gbWFyc2hhbC5sb2FkKGZw
KQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICB0cmFjZSgnX3Jl
YWRfcHljKCVzKTogbWFyc2hhbC5sb2FkIGVycm9yICVzJyAlIChzb3VyY2UsIGUpKQorICAgICAg
ICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoY28sIHR5cGVzLkNv
ZGVUeXBlKToKKyAgICAgICAgICAgIHRyYWNlKCdfcmVhZF9weWMoJXMpOiBub3QgYSBjb2RlIG9i
amVjdCcgJSBzb3VyY2UpCisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4g
Y28KKworCitkZWYgcmV3cml0ZV9hc3NlcnRzKG1vZCk6CisgICAgIiIiUmV3cml0ZSB0aGUgYXNz
ZXJ0IHN0YXRlbWVudHMgaW4gbW9kLiIiIgorICAgIEFzc2VydGlvblJld3JpdGVyKCkucnVuKG1v
ZCkKKworCitkZWYgX3NhZmVyZXByKG9iaik6CisgICAgIiIiR2V0IGEgc2FmZSByZXByIG9mIGFu
IG9iamVjdCBmb3IgYXNzZXJ0aW9uIGVycm9yIG1lc3NhZ2VzLgorCisgICAgVGhlIGFzc2VydGlv
biBmb3JtYXR0aW5nICh1dGlsLmZvcm1hdF9leHBsYW5hdGlvbigpKSByZXF1aXJlcworICAgIG5l
d2xpbmVzIHRvIGJlIGVzY2FwZWQgc2luY2UgdGhleSBhcmUgYSBzcGVjaWFsIGNoYXJhY3RlciBm
b3IgaXQuCisgICAgTm9ybWFsbHkgYXNzZXJ0aW9uLnV0aWwuZm9ybWF0X2V4cGxhbmF0aW9uKCkg
ZG9lcyB0aGlzIGJ1dCBmb3IgYQorICAgIGN1c3RvbSByZXByIGl0IGlzIHBvc3NpYmxlIHRvIGNv
bnRhaW4gb25lIG9mIHRoZSBzcGVjaWFsIGVzY2FwZQorICAgIHNlcXVlbmNlcywgZXNwZWNpYWxs
eSAnXG57JyBhbmQgJ1xufScgYXJlIGxpa2VseSB0byBiZSBwcmVzZW50IGluCisgICAgSlNPTiBy
ZXBycy4KKworICAgICIiIgorICAgIHJlcHIgPSBweS5pby5zYWZlcmVwcihvYmopCisgICAgaWYg
cHkuYnVpbHRpbi5faXN0ZXh0KHJlcHIpOgorICAgICAgICB0ID0gcHkuYnVpbHRpbi50ZXh0Cisg
ICAgZWxzZToKKyAgICAgICAgdCA9IHB5LmJ1aWx0aW4uYnl0ZXMKKyAgICByZXR1cm4gcmVwci5y
ZXBsYWNlKHQoIlxuIiksIHQoIlxcbiIpKQorCisKK2Zyb20gX3B5dGVzdC5hc3NlcnRpb24udXRp
bCBpbXBvcnQgZm9ybWF0X2V4cGxhbmF0aW9uIGFzIF9mb3JtYXRfZXhwbGFuYXRpb24gIyBub3Fh
CisKK2RlZiBfZm9ybWF0X2Fzc2VydG1zZyhvYmopOgorICAgICIiIkZvcm1hdCB0aGUgY3VzdG9t
IGFzc2VydGlvbiBtZXNzYWdlIGdpdmVuLgorCisgICAgRm9yIHN0cmluZ3MgdGhpcyBzaW1wbHkg
cmVwbGFjZXMgbmV3bGluZXMgd2l0aCAnXG5+JyBzbyB0aGF0CisgICAgdXRpbC5mb3JtYXRfZXhw
bGFuYXRpb24oKSB3aWxsIHByZXNlcnZlIHRoZW0gaW5zdGVhZCBvZiBlc2NhcGluZworICAgIG5l
d2xpbmVzLiAgRm9yIG90aGVyIG9iamVjdHMgcHkuaW8uc2FmZXJlcHIoKSBpcyB1c2VkIGZpcnN0
LgorCisgICAgIiIiCisgICAgIyByZXBybGliIGFwcGVhcnMgdG8gaGF2ZSBhIGJ1ZyB3aGljaCBt
ZWFucyB0aGF0IGlmIGEgc3RyaW5nCisgICAgIyBjb250YWlucyBhIG5ld2xpbmUgaXQgZ2V0cyBl
c2NhcGVkLCBob3dldmVyIGlmIGFuIG9iamVjdCBoYXMgYQorICAgICMgLl9fcmVwcl9fKCkgd2hp
Y2ggY29udGFpbnMgbmV3bGluZXMgaXQgZG9lcyBub3QgZ2V0IGVzY2FwZWQuCisgICAgIyBIb3dl
dmVyIGluIGVpdGhlciBjYXNlIHdlIHdhbnQgdG8gcHJlc2VydmUgdGhlIG5ld2xpbmUuCisgICAg
aWYgcHkuYnVpbHRpbi5faXN0ZXh0KG9iaikgb3IgcHkuYnVpbHRpbi5faXNieXRlcyhvYmopOgor
ICAgICAgICBzID0gb2JqCisgICAgICAgIGlzX3JlcHIgPSBGYWxzZQorICAgIGVsc2U6CisgICAg
ICAgIHMgPSBweS5pby5zYWZlcmVwcihvYmopCisgICAgICAgIGlzX3JlcHIgPSBUcnVlCisgICAg
aWYgcHkuYnVpbHRpbi5faXN0ZXh0KHMpOgorICAgICAgICB0ID0gcHkuYnVpbHRpbi50ZXh0Cisg
ICAgZWxzZToKKyAgICAgICAgdCA9IHB5LmJ1aWx0aW4uYnl0ZXMKKyAgICBzID0gcy5yZXBsYWNl
KHQoIlxuIiksIHQoIlxufiIpKS5yZXBsYWNlKHQoIiUiKSwgdCgiJSUiKSkKKyAgICBpZiBpc19y
ZXByOgorICAgICAgICBzID0gcy5yZXBsYWNlKHQoIlxcbiIpLCB0KCJcbn4iKSkKKyAgICByZXR1
cm4gcworCitkZWYgX3Nob3VsZF9yZXByX2dsb2JhbF9uYW1lKG9iaik6CisgICAgcmV0dXJuIG5v
dCBoYXNhdHRyKG9iaiwgIl9fbmFtZV9fIikgYW5kIG5vdCBweS5idWlsdGluLmNhbGxhYmxlKG9i
aikKKworZGVmIF9mb3JtYXRfYm9vbG9wKGV4cGxhbmF0aW9ucywgaXNfb3IpOgorICAgIGV4cGxh
bmF0aW9uID0gIigiICsgKGlzX29yIGFuZCAiIG9yICIgb3IgIiBhbmQgIikuam9pbihleHBsYW5h
dGlvbnMpICsgIikiCisgICAgaWYgcHkuYnVpbHRpbi5faXN0ZXh0KGV4cGxhbmF0aW9uKToKKyAg
ICAgICAgdCA9IHB5LmJ1aWx0aW4udGV4dAorICAgIGVsc2U6CisgICAgICAgIHQgPSBweS5idWls
dGluLmJ5dGVzCisgICAgcmV0dXJuIGV4cGxhbmF0aW9uLnJlcGxhY2UodCgnJScpLCB0KCclJScp
KQorCitkZWYgX2NhbGxfcmVwcmNvbXBhcmUob3BzLCByZXN1bHRzLCBleHBscywgZWFjaF9vYmop
OgorICAgIGZvciBpLCByZXMsIGV4cGwgaW4gemlwKHJhbmdlKGxlbihvcHMpKSwgcmVzdWx0cywg
ZXhwbHMpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBkb25lID0gbm90IHJlcworICAgICAg
ICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgZG9uZSA9IFRydWUKKyAgICAgICAgaWYg
ZG9uZToKKyAgICAgICAgICAgIGJyZWFrCisgICAgaWYgdXRpbC5fcmVwcmNvbXBhcmUgaXMgbm90
IE5vbmU6CisgICAgICAgIGN1c3RvbSA9IHV0aWwuX3JlcHJjb21wYXJlKG9wc1tpXSwgZWFjaF9v
YmpbaV0sIGVhY2hfb2JqW2kgKyAxXSkKKyAgICAgICAgaWYgY3VzdG9tIGlzIG5vdCBOb25lOgor
ICAgICAgICAgICAgcmV0dXJuIGN1c3RvbQorICAgIHJldHVybiBleHBsCisKKwordW5hcnlfbWFw
ID0geworICAgIGFzdC5Ob3Q6ICJub3QgJXMiLAorICAgIGFzdC5JbnZlcnQ6ICJ+JXMiLAorICAg
IGFzdC5VU3ViOiAiLSVzIiwKKyAgICBhc3QuVUFkZDogIislcyIKK30KKworYmlub3BfbWFwID0g
eworICAgIGFzdC5CaXRPcjogInwiLAorICAgIGFzdC5CaXRYb3I6ICJeIiwKKyAgICBhc3QuQml0
QW5kOiAiJiIsCisgICAgYXN0LkxTaGlmdDogIjw8IiwKKyAgICBhc3QuUlNoaWZ0OiAiPj4iLAor
ICAgIGFzdC5BZGQ6ICIrIiwKKyAgICBhc3QuU3ViOiAiLSIsCisgICAgYXN0Lk11bHQ6ICIqIiwK
KyAgICBhc3QuRGl2OiAiLyIsCisgICAgYXN0LkZsb29yRGl2OiAiLy8iLAorICAgIGFzdC5Nb2Q6
ICIlJSIsICMgZXNjYXBlZCBmb3Igc3RyaW5nIGZvcm1hdHRpbmcKKyAgICBhc3QuRXE6ICI9PSIs
CisgICAgYXN0Lk5vdEVxOiAiIT0iLAorICAgIGFzdC5MdDogIjwiLAorICAgIGFzdC5MdEU6ICI8
PSIsCisgICAgYXN0Lkd0OiAiPiIsCisgICAgYXN0Lkd0RTogIj49IiwKKyAgICBhc3QuUG93OiAi
KioiLAorICAgIGFzdC5JczogImlzIiwKKyAgICBhc3QuSXNOb3Q6ICJpcyBub3QiLAorICAgIGFz
dC5JbjogImluIiwKKyAgICBhc3QuTm90SW46ICJub3QgaW4iCit9CisjIFB5dGhvbiAzLjUrIGNv
bXBhdGliaWxpdHkKK3RyeToKKyAgICBiaW5vcF9tYXBbYXN0Lk1hdE11bHRdID0gIkAiCitleGNl
cHQgQXR0cmlidXRlRXJyb3I6CisgICAgcGFzcworCisjIFB5dGhvbiAzLjQrIGNvbXBhdGliaWxp
dHkKK2lmIGhhc2F0dHIoYXN0LCAiTmFtZUNvbnN0YW50Iik6CisgICAgX05hbWVDb25zdGFudCA9
IGFzdC5OYW1lQ29uc3RhbnQKK2Vsc2U6CisgICAgZGVmIF9OYW1lQ29uc3RhbnQoYyk6CisgICAg
ICAgIHJldHVybiBhc3QuTmFtZShzdHIoYyksIGFzdC5Mb2FkKCkpCisKKworZGVmIHNldF9sb2Nh
dGlvbihub2RlLCBsaW5lbm8sIGNvbF9vZmZzZXQpOgorICAgICIiIlNldCBub2RlIGxvY2F0aW9u
IGluZm9ybWF0aW9uIHJlY3Vyc2l2ZWx5LiIiIgorICAgIGRlZiBfZml4KG5vZGUsIGxpbmVubywg
Y29sX29mZnNldCk6CisgICAgICAgIGlmICJsaW5lbm8iIGluIG5vZGUuX2F0dHJpYnV0ZXM6Cisg
ICAgICAgICAgICBub2RlLmxpbmVubyA9IGxpbmVubworICAgICAgICBpZiAiY29sX29mZnNldCIg
aW4gbm9kZS5fYXR0cmlidXRlczoKKyAgICAgICAgICAgIG5vZGUuY29sX29mZnNldCA9IGNvbF9v
ZmZzZXQKKyAgICAgICAgZm9yIGNoaWxkIGluIGFzdC5pdGVyX2NoaWxkX25vZGVzKG5vZGUpOgor
ICAgICAgICAgICAgX2ZpeChjaGlsZCwgbGluZW5vLCBjb2xfb2Zmc2V0KQorICAgIF9maXgobm9k
ZSwgbGluZW5vLCBjb2xfb2Zmc2V0KQorICAgIHJldHVybiBub2RlCisKKworY2xhc3MgQXNzZXJ0
aW9uUmV3cml0ZXIoYXN0Lk5vZGVWaXNpdG9yKToKKyAgICAiIiJBc3NlcnRpb24gcmV3cml0aW5n
IGltcGxlbWVudGF0aW9uLgorCisgICAgVGhlIG1haW4gZW50cnlwb2ludCBpcyB0byBjYWxsIC5y
dW4oKSB3aXRoIGFuIGFzdC5Nb2R1bGUgaW5zdGFuY2UsCisgICAgdGhpcyB3aWxsIHRoZW4gZmlu
ZCBhbGwgdGhlIGFzc2VydCBzdGF0ZW1lbnRzIGFuZCByZS13cml0ZSB0aGVtIHRvCisgICAgcHJv
dmlkZSBpbnRlcm1lZGlhdGUgdmFsdWVzIGFuZCBhIGRldGFpbGVkIGFzc2VydGlvbiBlcnJvci4g
IFNlZQorICAgIGh0dHA6Ly9weWJpdGVzLmJsb2dzcG90LmJlLzIwMTEvMDcvYmVoaW5kLXNjZW5l
cy1vZi1weXRlc3RzLW5ldy1hc3NlcnRpb24uaHRtbAorICAgIGZvciBhbiBvdmVydmlldyBvZiBo
b3cgdGhpcyB3b3Jrcy4KKworICAgIFRoZSBlbnRyeSBwb2ludCBoZXJlIGlzIC5ydW4oKSB3aGlj
aCB3aWxsIGl0ZXJhdGUgb3ZlciBhbGwgdGhlCisgICAgc3RhdGVtZW50cyBpbiBhbiBhc3QuTW9k
dWxlIGFuZCBmb3IgZWFjaCBhc3QuQXNzZXJ0IHN0YXRlbWVudCBpdAorICAgIGZpbmRzIGNhbGwg
LnZpc2l0KCkgd2l0aCBpdC4gIFRoZW4gLnZpc2l0X0Fzc2VydCgpIHRha2VzIG92ZXIgYW5kCisg
ICAgaXMgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIG5ldyBhc3Qgc3RhdGVtZW50cyB0byByZXBs
YWNlIHRoZQorICAgIG9yaWdpbmFsIGFzc2VydCBzdGF0ZW1lbnQ6IGl0IHJlLXdyaXRlcyB0aGUg
dGVzdCBvZiBhbiBhc3NlcnRpb24KKyAgICB0byBwcm92aWRlIGludGVybWVkaWF0ZSB2YWx1ZXMg
YW5kIHJlcGxhY2UgaXQgd2l0aCBhbiBpZiBzdGF0ZW1lbnQKKyAgICB3aGljaCByYWlzZXMgYW4g
YXNzZXJ0aW9uIGVycm9yIHdpdGggYSBkZXRhaWxlZCBleHBsYW5hdGlvbiBpbgorICAgIGNhc2Ug
dGhlIGV4cHJlc3Npb24gaXMgZmFsc2UuCisKKyAgICBGb3IgdGhpcyAudmlzaXRfQXNzZXJ0KCkg
dXNlcyB0aGUgdmlzaXRvciBwYXR0ZXJuIHRvIHZpc2l0IGFsbCB0aGUKKyAgICBBU1Qgbm9kZXMg
b2YgdGhlIGFzdC5Bc3NlcnQudGVzdCBmaWVsZCwgZWFjaCB2aXNpdCBjYWxsIHJldHVybmluZwor
ICAgIGFuIEFTVCBub2RlIGFuZCB0aGUgY29ycmVzcG9uZGluZyBleHBsYW5hdGlvbiBzdHJpbmcu
ICBEdXJpbmcgdGhpcworICAgIHN0YXRlIGlzIGtlcHQgaW4gc2V2ZXJhbCBpbnN0YW5jZSBhdHRy
aWJ1dGVzOgorCisgICAgOnN0YXRlbWVudHM6IEFsbCB0aGUgQVNUIHN0YXRlbWVudHMgd2hpY2gg
d2lsbCByZXBsYWNlIHRoZSBhc3NlcnQKKyAgICAgICBzdGF0ZW1lbnQuCisKKyAgICA6dmFyaWFi
bGVzOiBUaGlzIGlzIHBvcHVsYXRlZCBieSAudmFyaWFibGUoKSB3aXRoIGVhY2ggdmFyaWFibGUK
KyAgICAgICB1c2VkIGJ5IHRoZSBzdGF0ZW1lbnRzIHNvIHRoYXQgdGhleSBjYW4gYWxsIGJlIHNl
dCB0byBOb25lIGF0CisgICAgICAgdGhlIGVuZCBvZiB0aGUgc3RhdGVtZW50cy4KKworICAgIDp2
YXJpYWJsZV9jb3VudGVyOiBDb3VudGVyIHRvIGNyZWF0ZSBuZXcgdW5pcXVlIHZhcmlhYmxlcyBu
ZWVkZWQKKyAgICAgICBieSBzdGF0ZW1lbnRzLiAgVmFyaWFibGVzIGFyZSBjcmVhdGVkIHVzaW5n
IC52YXJpYWJsZSgpIGFuZAorICAgICAgIGhhdmUgdGhlIGZvcm0gb2YgIkBweV9hc3NlcnQwIi4K
KworICAgIDpvbl9mYWlsdXJlOiBUaGUgQVNUIHN0YXRlbWVudHMgd2hpY2ggd2lsbCBiZSBleGVj
dXRlZCBpZiB0aGUKKyAgICAgICBhc3NlcnRpb24gdGVzdCBmYWlscy4gIFRoaXMgaXMgdGhlIGNv
ZGUgd2hpY2ggd2lsbCBjb25zdHJ1Y3QKKyAgICAgICB0aGUgZmFpbHVyZSBtZXNzYWdlIGFuZCBy
YWlzZXMgdGhlIEFzc2VydGlvbkVycm9yLgorCisgICAgOmV4cGxhbmF0aW9uX3NwZWNpZmllcnM6
IEEgZGljdCBmaWxsZWQgYnkgLmV4cGxhbmF0aW9uX3BhcmFtKCkKKyAgICAgICB3aXRoICUtZm9y
bWF0dGluZyBwbGFjZWhvbGRlcnMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcKKyAgICAgICBleHBy
ZXNzaW9ucyB0byB1c2UgaW4gdGhlIGJ1aWxkaW5nIG9mIGFuIGFzc2VydGlvbiBtZXNzYWdlLgor
ICAgICAgIFRoaXMgaXMgdXNlZCBieSAucG9wX2Zvcm1hdF9jb250ZXh0KCkgdG8gYnVpbGQgYSBt
ZXNzYWdlLgorCisgICAgOnN0YWNrOiBBIHN0YWNrIG9mIHRoZSBleHBsYW5hdGlvbl9zcGVjaWZp
ZXJzIGRpY3RzIG1haW50YWluZWQgYnkKKyAgICAgICAucHVzaF9mb3JtYXRfY29udGV4dCgpIGFu
ZCAucG9wX2Zvcm1hdF9jb250ZXh0KCkgd2hpY2ggYWxsb3dzCisgICAgICAgdG8gYnVpbGQgYW5v
dGhlciAlLWZvcm1hdHRlZCBzdHJpbmcgd2hpbGUgYWxyZWFkeSBidWlsZGluZyBvbmUuCisKKyAg
ICBUaGlzIHN0YXRlIGlzIHJlc2V0IG9uIGV2ZXJ5IG5ldyBhc3NlcnQgc3RhdGVtZW50IHZpc2l0
ZWQgYW5kIHVzZWQKKyAgICBieSB0aGUgb3RoZXIgdmlzaXRvcnMuCisKKyAgICAiIiIKKworICAg
IGRlZiBydW4oc2VsZiwgbW9kKToKKyAgICAgICAgIiIiRmluZCBhbGwgYXNzZXJ0IHN0YXRlbWVu
dHMgaW4gKm1vZCogYW5kIHJld3JpdGUgdGhlbS4iIiIKKyAgICAgICAgaWYgbm90IG1vZC5ib2R5
OgorICAgICAgICAgICAgIyBOb3RoaW5nIHRvIGRvLgorICAgICAgICAgICAgcmV0dXJuCisgICAg
ICAgICMgSW5zZXJ0IHNvbWUgc3BlY2lhbCBpbXBvcnRzIGF0IHRoZSB0b3Agb2YgdGhlIG1vZHVs
ZSBidXQgYWZ0ZXIgYW55CisgICAgICAgICMgZG9jc3RyaW5ncyBhbmQgX19mdXR1cmVfXyBpbXBv
cnRzLgorICAgICAgICBhbGlhc2VzID0gW2FzdC5hbGlhcyhweS5idWlsdGluLmJ1aWx0aW5zLl9f
bmFtZV9fLCAiQHB5X2J1aWx0aW5zIiksCisgICAgICAgICAgICAgICAgICAgYXN0LmFsaWFzKCJf
cHl0ZXN0LmFzc2VydGlvbi5yZXdyaXRlIiwgIkBweXRlc3RfYXIiKV0KKyAgICAgICAgZXhwZWN0
X2RvY3N0cmluZyA9IFRydWUKKyAgICAgICAgcG9zID0gMAorICAgICAgICBsaW5lbm8gPSAwCisg
ICAgICAgIGZvciBpdGVtIGluIG1vZC5ib2R5OgorICAgICAgICAgICAgaWYgKGV4cGVjdF9kb2Nz
dHJpbmcgYW5kIGlzaW5zdGFuY2UoaXRlbSwgYXN0LkV4cHIpIGFuZAorICAgICAgICAgICAgICAg
ICAgICBpc2luc3RhbmNlKGl0ZW0udmFsdWUsIGFzdC5TdHIpKToKKyAgICAgICAgICAgICAgICBk
b2MgPSBpdGVtLnZhbHVlLnMKKyAgICAgICAgICAgICAgICBpZiAiUFlURVNUX0RPTlRfUkVXUklU
RSIgaW4gZG9jOgorICAgICAgICAgICAgICAgICAgICAjIFRoZSBtb2R1bGUgaGFzIGRpc2FibGVk
IGFzc2VydGlvbiByZXdyaXRpbmcuCisgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAg
ICAgICAgICAgIGxpbmVubyArPSBsZW4oZG9jKSAtIDEKKyAgICAgICAgICAgICAgICBleHBlY3Rf
ZG9jc3RyaW5nID0gRmFsc2UKKyAgICAgICAgICAgIGVsaWYgKG5vdCBpc2luc3RhbmNlKGl0ZW0s
IGFzdC5JbXBvcnRGcm9tKSBvciBpdGVtLmxldmVsID4gMCBvcgorICAgICAgICAgICAgICAgICAg
aXRlbS5tb2R1bGUgIT0gIl9fZnV0dXJlX18iKToKKyAgICAgICAgICAgICAgICBsaW5lbm8gPSBp
dGVtLmxpbmVubworICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBwb3MgKz0gMQor
ICAgICAgICBpbXBvcnRzID0gW2FzdC5JbXBvcnQoW2FsaWFzXSwgbGluZW5vPWxpbmVubywgY29s
X29mZnNldD0wKQorICAgICAgICAgICAgICAgICAgIGZvciBhbGlhcyBpbiBhbGlhc2VzXQorICAg
ICAgICBtb2QuYm9keVtwb3M6cG9zXSA9IGltcG9ydHMKKyAgICAgICAgIyBDb2xsZWN0IGFzc2Vy
dHMuCisgICAgICAgIG5vZGVzID0gW21vZF0KKyAgICAgICAgd2hpbGUgbm9kZXM6CisgICAgICAg
ICAgICBub2RlID0gbm9kZXMucG9wKCkKKyAgICAgICAgICAgIGZvciBuYW1lLCBmaWVsZCBpbiBh
c3QuaXRlcl9maWVsZHMobm9kZSk6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShmaWVs
ZCwgbGlzdCk6CisgICAgICAgICAgICAgICAgICAgIG5ldyA9IFtdCisgICAgICAgICAgICAgICAg
ICAgIGZvciBpLCBjaGlsZCBpbiBlbnVtZXJhdGUoZmllbGQpOgorICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgaXNpbnN0YW5jZShjaGlsZCwgYXN0LkFzc2VydCk6CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIyBUcmFuc2Zvcm0gYXNzZXJ0LgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5ldy5leHRlbmQoc2VsZi52aXNpdChjaGlsZCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldy5hcHBlbmQoY2hpbGQpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShjaGlsZCwgYXN0LkFTVCk6
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChjaGlsZCkKKyAg
ICAgICAgICAgICAgICAgICAgc2V0YXR0cihub2RlLCBuYW1lLCBuZXcpCisgICAgICAgICAgICAg
ICAgZWxpZiAoaXNpbnN0YW5jZShmaWVsZCwgYXN0LkFTVCkgYW5kCisgICAgICAgICAgICAgICAg
ICAgICAgIyBEb24ndCByZWN1cnNlIGludG8gZXhwcmVzc2lvbnMgYXMgdGhleSBjYW4ndCBjb250
YWluCisgICAgICAgICAgICAgICAgICAgICAgIyBhc3NlcnRzLgorICAgICAgICAgICAgICAgICAg
ICAgIG5vdCBpc2luc3RhbmNlKGZpZWxkLCBhc3QuZXhwcikpOgorICAgICAgICAgICAgICAgICAg
ICBub2Rlcy5hcHBlbmQoZmllbGQpCisKKyAgICBkZWYgdmFyaWFibGUoc2VsZik6CisgICAgICAg
ICIiIkdldCBhIG5ldyB2YXJpYWJsZS4iIiIKKyAgICAgICAgIyBVc2UgYSBjaGFyYWN0ZXIgaW52
YWxpZCBpbiBweXRob24gaWRlbnRpZmllcnMgdG8gYXZvaWQgY2xhc2hpbmcuCisgICAgICAgIG5h
bWUgPSAiQHB5X2Fzc2VydCIgKyBzdHIobmV4dChzZWxmLnZhcmlhYmxlX2NvdW50ZXIpKQorICAg
ICAgICBzZWxmLnZhcmlhYmxlcy5hcHBlbmQobmFtZSkKKyAgICAgICAgcmV0dXJuIG5hbWUKKwor
ICAgIGRlZiBhc3NpZ24oc2VsZiwgZXhwcik6CisgICAgICAgICIiIkdpdmUgKmV4cHIqIGEgbmFt
ZS4iIiIKKyAgICAgICAgbmFtZSA9IHNlbGYudmFyaWFibGUoKQorICAgICAgICBzZWxmLnN0YXRl
bWVudHMuYXBwZW5kKGFzdC5Bc3NpZ24oW2FzdC5OYW1lKG5hbWUsIGFzdC5TdG9yZSgpKV0sIGV4
cHIpKQorICAgICAgICByZXR1cm4gYXN0Lk5hbWUobmFtZSwgYXN0LkxvYWQoKSkKKworICAgIGRl
ZiBkaXNwbGF5KHNlbGYsIGV4cHIpOgorICAgICAgICAiIiJDYWxsIHB5LmlvLnNhZmVyZXByIG9u
IHRoZSBleHByZXNzaW9uLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5oZWxwZXIoInNhZmVyZXBy
IiwgZXhwcikKKworICAgIGRlZiBoZWxwZXIoc2VsZiwgbmFtZSwgKmFyZ3MpOgorICAgICAgICAi
IiJDYWxsIGEgaGVscGVyIGluIHRoaXMgbW9kdWxlLiIiIgorICAgICAgICBweV9uYW1lID0gYXN0
Lk5hbWUoIkBweXRlc3RfYXIiLCBhc3QuTG9hZCgpKQorICAgICAgICBhdHRyID0gYXN0LkF0dHJp
YnV0ZShweV9uYW1lLCAiXyIgKyBuYW1lLCBhc3QuTG9hZCgpKQorICAgICAgICByZXR1cm4gYXN0
X0NhbGwoYXR0ciwgbGlzdChhcmdzKSwgW10pCisKKyAgICBkZWYgYnVpbHRpbihzZWxmLCBuYW1l
KToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBidWlsdGluIGNhbGxlZCAqbmFtZSouIiIiCisgICAg
ICAgIGJ1aWx0aW5fbmFtZSA9IGFzdC5OYW1lKCJAcHlfYnVpbHRpbnMiLCBhc3QuTG9hZCgpKQor
ICAgICAgICByZXR1cm4gYXN0LkF0dHJpYnV0ZShidWlsdGluX25hbWUsIG5hbWUsIGFzdC5Mb2Fk
KCkpCisKKyAgICBkZWYgZXhwbGFuYXRpb25fcGFyYW0oc2VsZiwgZXhwcik6CisgICAgICAgICIi
IlJldHVybiBhIG5ldyBuYW1lZCAlLWZvcm1hdHRpbmcgcGxhY2Vob2xkZXIgZm9yIGV4cHIuCisK
KyAgICAgICAgVGhpcyBjcmVhdGVzIGEgJS1mb3JtYXR0aW5nIHBsYWNlaG9sZGVyIGZvciBleHBy
IGluIHRoZQorICAgICAgICBjdXJyZW50IGZvcm1hdHRpbmcgY29udGV4dCwgZS5nLiBgYCUocHkw
KXNgYC4gIFRoZSBwbGFjZWhvbGRlcgorICAgICAgICBhbmQgZXhwciBhcmUgcGxhY2VkIGluIHRo
ZSBjdXJyZW50IGZvcm1hdCBjb250ZXh0IHNvIHRoYXQgaXQKKyAgICAgICAgY2FuIGJlIHVzZWQg
b24gdGhlIG5leHQgY2FsbCB0byAucG9wX2Zvcm1hdF9jb250ZXh0KCkuCisKKyAgICAgICAgIiIi
CisgICAgICAgIHNwZWNpZmllciA9ICJweSIgKyBzdHIobmV4dChzZWxmLnZhcmlhYmxlX2NvdW50
ZXIpKQorICAgICAgICBzZWxmLmV4cGxhbmF0aW9uX3NwZWNpZmllcnNbc3BlY2lmaWVyXSA9IGV4
cHIKKyAgICAgICAgcmV0dXJuICIlKCIgKyBzcGVjaWZpZXIgKyAiKXMiCisKKyAgICBkZWYgcHVz
aF9mb3JtYXRfY29udGV4dChzZWxmKToKKyAgICAgICAgIiIiQ3JlYXRlIGEgbmV3IGZvcm1hdHRp
bmcgY29udGV4dC4KKworICAgICAgICBUaGUgZm9ybWF0IGNvbnRleHQgaXMgdXNlZCBmb3Igd2hl
biBhbiBleHBsYW5hdGlvbiB3YW50cyB0bworICAgICAgICBoYXZlIGEgdmFyaWFibGUgdmFsdWUg
Zm9ybWF0dGVkIGluIHRoZSBhc3NlcnRpb24gbWVzc2FnZS4gIEluCisgICAgICAgIHRoaXMgY2Fz
ZSB0aGUgdmFsdWUgcmVxdWlyZWQgY2FuIGJlIGFkZGVkIHVzaW5nCisgICAgICAgIC5leHBsYW5h
dGlvbl9wYXJhbSgpLiAgRmluYWxseSAucG9wX2Zvcm1hdF9jb250ZXh0KCkgaXMgdXNlZAorICAg
ICAgICB0byBmb3JtYXQgYSBzdHJpbmcgb2YgJS1mb3JtYXR0ZWQgdmFsdWVzIGFzIGFkZGVkIGJ5
CisgICAgICAgIC5leHBsYW5hdGlvbl9wYXJhbSgpLgorCisgICAgICAgICIiIgorICAgICAgICBz
ZWxmLmV4cGxhbmF0aW9uX3NwZWNpZmllcnMgPSB7fQorICAgICAgICBzZWxmLnN0YWNrLmFwcGVu
ZChzZWxmLmV4cGxhbmF0aW9uX3NwZWNpZmllcnMpCisKKyAgICBkZWYgcG9wX2Zvcm1hdF9jb250
ZXh0KHNlbGYsIGV4cGxfZXhwcik6CisgICAgICAgICIiIkZvcm1hdCB0aGUgJS1mb3JtYXR0ZWQg
c3RyaW5nIHdpdGggY3VycmVudCBmb3JtYXQgY29udGV4dC4KKworICAgICAgICBUaGUgZXhwbF9l
eHByIHNob3VsZCBiZSBhbiBhc3QuU3RyIGluc3RhbmNlIGNvbnN0cnVjdGVkIGZyb20KKyAgICAg
ICAgdGhlICUtcGxhY2Vob2xkZXJzIGNyZWF0ZWQgYnkgLmV4cGxhbmF0aW9uX3BhcmFtKCkuICBU
aGlzIHdpbGwKKyAgICAgICAgYWRkIHRoZSByZXF1aXJlZCBjb2RlIHRvIGZvcm1hdCBzYWlkIHN0
cmluZyB0byAub25fZmFpbHVyZSBhbmQKKyAgICAgICAgcmV0dXJuIHRoZSBhc3QuTmFtZSBpbnN0
YW5jZSBvZiB0aGUgZm9ybWF0dGVkIHN0cmluZy4KKworICAgICAgICAiIiIKKyAgICAgICAgY3Vy
cmVudCA9IHNlbGYuc3RhY2sucG9wKCkKKyAgICAgICAgaWYgc2VsZi5zdGFjazoKKyAgICAgICAg
ICAgIHNlbGYuZXhwbGFuYXRpb25fc3BlY2lmaWVycyA9IHNlbGYuc3RhY2tbLTFdCisgICAgICAg
IGtleXMgPSBbYXN0LlN0cihrZXkpIGZvciBrZXkgaW4gY3VycmVudC5rZXlzKCldCisgICAgICAg
IGZvcm1hdF9kaWN0ID0gYXN0LkRpY3Qoa2V5cywgbGlzdChjdXJyZW50LnZhbHVlcygpKSkKKyAg
ICAgICAgZm9ybSA9IGFzdC5CaW5PcChleHBsX2V4cHIsIGFzdC5Nb2QoKSwgZm9ybWF0X2RpY3Qp
CisgICAgICAgIG5hbWUgPSAiQHB5X2Zvcm1hdCIgKyBzdHIobmV4dChzZWxmLnZhcmlhYmxlX2Nv
dW50ZXIpKQorICAgICAgICBzZWxmLm9uX2ZhaWx1cmUuYXBwZW5kKGFzdC5Bc3NpZ24oW2FzdC5O
YW1lKG5hbWUsIGFzdC5TdG9yZSgpKV0sIGZvcm0pKQorICAgICAgICByZXR1cm4gYXN0Lk5hbWUo
bmFtZSwgYXN0LkxvYWQoKSkKKworICAgIGRlZiBnZW5lcmljX3Zpc2l0KHNlbGYsIG5vZGUpOgor
ICAgICAgICAiIiJIYW5kbGUgZXhwcmVzc2lvbnMgd2UgZG9uJ3QgaGF2ZSBjdXN0b20gY29kZSBm
b3IuIiIiCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKG5vZGUsIGFzdC5leHByKQorICAgICAg
ICByZXMgPSBzZWxmLmFzc2lnbihub2RlKQorICAgICAgICByZXR1cm4gcmVzLCBzZWxmLmV4cGxh
bmF0aW9uX3BhcmFtKHNlbGYuZGlzcGxheShyZXMpKQorCisgICAgZGVmIHZpc2l0X0Fzc2VydChz
ZWxmLCBhc3NlcnRfKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBBU1Qgc3RhdGVtZW50cyB0byBy
ZXBsYWNlIHRoZSBhc3QuQXNzZXJ0IGluc3RhbmNlLgorCisgICAgICAgIFRoaXMgcmUtd3JpdGVz
IHRoZSB0ZXN0IG9mIGFuIGFzc2VydGlvbiB0byBwcm92aWRlCisgICAgICAgIGludGVybWVkaWF0
ZSB2YWx1ZXMgYW5kIHJlcGxhY2UgaXQgd2l0aCBhbiBpZiBzdGF0ZW1lbnQgd2hpY2gKKyAgICAg
ICAgcmFpc2VzIGFuIGFzc2VydGlvbiBlcnJvciB3aXRoIGEgZGV0YWlsZWQgZXhwbGFuYXRpb24g
aW4gY2FzZQorICAgICAgICB0aGUgZXhwcmVzc2lvbiBpcyBmYWxzZS4KKworICAgICAgICAiIiIK
KyAgICAgICAgc2VsZi5zdGF0ZW1lbnRzID0gW10KKyAgICAgICAgc2VsZi52YXJpYWJsZXMgPSBb
XQorICAgICAgICBzZWxmLnZhcmlhYmxlX2NvdW50ZXIgPSBpdGVydG9vbHMuY291bnQoKQorICAg
ICAgICBzZWxmLnN0YWNrID0gW10KKyAgICAgICAgc2VsZi5vbl9mYWlsdXJlID0gW10KKyAgICAg
ICAgc2VsZi5wdXNoX2Zvcm1hdF9jb250ZXh0KCkKKyAgICAgICAgIyBSZXdyaXRlIGFzc2VydCBp
bnRvIGEgYnVuY2ggb2Ygc3RhdGVtZW50cy4KKyAgICAgICAgdG9wX2NvbmRpdGlvbiwgZXhwbGFu
YXRpb24gPSBzZWxmLnZpc2l0KGFzc2VydF8udGVzdCkKKyAgICAgICAgIyBDcmVhdGUgZmFpbHVy
ZSBtZXNzYWdlLgorICAgICAgICBib2R5ID0gc2VsZi5vbl9mYWlsdXJlCisgICAgICAgIG5lZ2F0
aW9uID0gYXN0LlVuYXJ5T3AoYXN0Lk5vdCgpLCB0b3BfY29uZGl0aW9uKQorICAgICAgICBzZWxm
LnN0YXRlbWVudHMuYXBwZW5kKGFzdC5JZihuZWdhdGlvbiwgYm9keSwgW10pKQorICAgICAgICBp
ZiBhc3NlcnRfLm1zZzoKKyAgICAgICAgICAgIGFzc2VydG1zZyA9IHNlbGYuaGVscGVyKCdmb3Jt
YXRfYXNzZXJ0bXNnJywgYXNzZXJ0Xy5tc2cpCisgICAgICAgICAgICBleHBsYW5hdGlvbiA9ICJc
bj5hc3NlcnQgIiArIGV4cGxhbmF0aW9uCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhc3Nl
cnRtc2cgPSBhc3QuU3RyKCIiKQorICAgICAgICAgICAgZXhwbGFuYXRpb24gPSAiYXNzZXJ0ICIg
KyBleHBsYW5hdGlvbgorICAgICAgICB0ZW1wbGF0ZSA9IGFzdC5CaW5PcChhc3NlcnRtc2csIGFz
dC5BZGQoKSwgYXN0LlN0cihleHBsYW5hdGlvbikpCisgICAgICAgIG1zZyA9IHNlbGYucG9wX2Zv
cm1hdF9jb250ZXh0KHRlbXBsYXRlKQorICAgICAgICBmbXQgPSBzZWxmLmhlbHBlcigiZm9ybWF0
X2V4cGxhbmF0aW9uIiwgbXNnKQorICAgICAgICBlcnJfbmFtZSA9IGFzdC5OYW1lKCJBc3NlcnRp
b25FcnJvciIsIGFzdC5Mb2FkKCkpCisgICAgICAgIGV4YyA9IGFzdF9DYWxsKGVycl9uYW1lLCBb
Zm10XSwgW10pCisgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bMF0gPj0gMzoKKyAgICAgICAg
ICAgIHJhaXNlXyA9IGFzdC5SYWlzZShleGMsIE5vbmUpCisgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICByYWlzZV8gPSBhc3QuUmFpc2UoZXhjLCBOb25lLCBOb25lKQorICAgICAgICBib2R5LmFw
cGVuZChyYWlzZV8pCisgICAgICAgICMgQ2xlYXIgdGVtcG9yYXJ5IHZhcmlhYmxlcyBieSBzZXR0
aW5nIHRoZW0gdG8gTm9uZS4KKyAgICAgICAgaWYgc2VsZi52YXJpYWJsZXM6CisgICAgICAgICAg
ICB2YXJpYWJsZXMgPSBbYXN0Lk5hbWUobmFtZSwgYXN0LlN0b3JlKCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yIG5hbWUgaW4gc2VsZi52YXJpYWJsZXNdCisgICAgICAgICAgICBjbGVh
ciA9IGFzdC5Bc3NpZ24odmFyaWFibGVzLCBfTmFtZUNvbnN0YW50KE5vbmUpKQorICAgICAgICAg
ICAgc2VsZi5zdGF0ZW1lbnRzLmFwcGVuZChjbGVhcikKKyAgICAgICAgIyBGaXggbGluZSBudW1i
ZXJzLgorICAgICAgICBmb3Igc3RtdCBpbiBzZWxmLnN0YXRlbWVudHM6CisgICAgICAgICAgICBz
ZXRfbG9jYXRpb24oc3RtdCwgYXNzZXJ0Xy5saW5lbm8sIGFzc2VydF8uY29sX29mZnNldCkKKyAg
ICAgICAgcmV0dXJuIHNlbGYuc3RhdGVtZW50cworCisgICAgZGVmIHZpc2l0X05hbWUoc2VsZiwg
bmFtZSk6CisgICAgICAgICMgRGlzcGxheSB0aGUgcmVwciBvZiB0aGUgbmFtZSBpZiBpdCdzIGEg
bG9jYWwgdmFyaWFibGUgb3IKKyAgICAgICAgIyBfc2hvdWxkX3JlcHJfZ2xvYmFsX25hbWUoKSB0
aGlua3MgaXQncyBhY2NlcHRhYmxlLgorICAgICAgICBsb2NzID0gYXN0X0NhbGwoc2VsZi5idWls
dGluKCJsb2NhbHMiKSwgW10sIFtdKQorICAgICAgICBpbmxvY3MgPSBhc3QuQ29tcGFyZShhc3Qu
U3RyKG5hbWUuaWQpLCBbYXN0LkluKCldLCBbbG9jc10pCisgICAgICAgIGRvcmVwciA9IHNlbGYu
aGVscGVyKCJzaG91bGRfcmVwcl9nbG9iYWxfbmFtZSIsIG5hbWUpCisgICAgICAgIHRlc3QgPSBh
c3QuQm9vbE9wKGFzdC5PcigpLCBbaW5sb2NzLCBkb3JlcHJdKQorICAgICAgICBleHByID0gYXN0
LklmRXhwKHRlc3QsIHNlbGYuZGlzcGxheShuYW1lKSwgYXN0LlN0cihuYW1lLmlkKSkKKyAgICAg
ICAgcmV0dXJuIG5hbWUsIHNlbGYuZXhwbGFuYXRpb25fcGFyYW0oZXhwcikKKworICAgIGRlZiB2
aXNpdF9Cb29sT3Aoc2VsZiwgYm9vbG9wKToKKyAgICAgICAgcmVzX3ZhciA9IHNlbGYudmFyaWFi
bGUoKQorICAgICAgICBleHBsX2xpc3QgPSBzZWxmLmFzc2lnbihhc3QuTGlzdChbXSwgYXN0Lkxv
YWQoKSkpCisgICAgICAgIGFwcCA9IGFzdC5BdHRyaWJ1dGUoZXhwbF9saXN0LCAiYXBwZW5kIiwg
YXN0LkxvYWQoKSkKKyAgICAgICAgaXNfb3IgPSBpbnQoaXNpbnN0YW5jZShib29sb3Aub3AsIGFz
dC5PcikpCisgICAgICAgIGJvZHkgPSBzYXZlID0gc2VsZi5zdGF0ZW1lbnRzCisgICAgICAgIGZh
aWxfc2F2ZSA9IHNlbGYub25fZmFpbHVyZQorICAgICAgICBsZXZlbHMgPSBsZW4oYm9vbG9wLnZh
bHVlcykgLSAxCisgICAgICAgIHNlbGYucHVzaF9mb3JtYXRfY29udGV4dCgpCisgICAgICAgICMg
UHJvY2VzcyBlYWNoIG9wZXJhbmQsIHNob3J0LWNpcmN1dGluZyBpZiBuZWVkZWQuCisgICAgICAg
IGZvciBpLCB2IGluIGVudW1lcmF0ZShib29sb3AudmFsdWVzKToKKyAgICAgICAgICAgIGlmIGk6
CisgICAgICAgICAgICAgICAgZmFpbF9pbm5lciA9IFtdCisgICAgICAgICAgICAgICAgIyBjb25k
IGlzIHNldCBpbiBhIHByaW9yIGxvb3AgaXRlcmF0aW9uIGJlbG93CisgICAgICAgICAgICAgICAg
c2VsZi5vbl9mYWlsdXJlLmFwcGVuZChhc3QuSWYoY29uZCwgZmFpbF9pbm5lciwgW10pKSAjIG5v
cWEKKyAgICAgICAgICAgICAgICBzZWxmLm9uX2ZhaWx1cmUgPSBmYWlsX2lubmVyCisgICAgICAg
ICAgICBzZWxmLnB1c2hfZm9ybWF0X2NvbnRleHQoKQorICAgICAgICAgICAgcmVzLCBleHBsID0g
c2VsZi52aXNpdCh2KQorICAgICAgICAgICAgYm9keS5hcHBlbmQoYXN0LkFzc2lnbihbYXN0Lk5h
bWUocmVzX3ZhciwgYXN0LlN0b3JlKCkpXSwgcmVzKSkKKyAgICAgICAgICAgIGV4cGxfZm9ybWF0
ID0gc2VsZi5wb3BfZm9ybWF0X2NvbnRleHQoYXN0LlN0cihleHBsKSkKKyAgICAgICAgICAgIGNh
bGwgPSBhc3RfQ2FsbChhcHAsIFtleHBsX2Zvcm1hdF0sIFtdKQorICAgICAgICAgICAgc2VsZi5v
bl9mYWlsdXJlLmFwcGVuZChhc3QuRXhwcihjYWxsKSkKKyAgICAgICAgICAgIGlmIGkgPCBsZXZl
bHM6CisgICAgICAgICAgICAgICAgY29uZCA9IHJlcworICAgICAgICAgICAgICAgIGlmIGlzX29y
OgorICAgICAgICAgICAgICAgICAgICBjb25kID0gYXN0LlVuYXJ5T3AoYXN0Lk5vdCgpLCBjb25k
KQorICAgICAgICAgICAgICAgIGlubmVyID0gW10KKyAgICAgICAgICAgICAgICBzZWxmLnN0YXRl
bWVudHMuYXBwZW5kKGFzdC5JZihjb25kLCBpbm5lciwgW10pKQorICAgICAgICAgICAgICAgIHNl
bGYuc3RhdGVtZW50cyA9IGJvZHkgPSBpbm5lcgorICAgICAgICBzZWxmLnN0YXRlbWVudHMgPSBz
YXZlCisgICAgICAgIHNlbGYub25fZmFpbHVyZSA9IGZhaWxfc2F2ZQorICAgICAgICBleHBsX3Rl
bXBsYXRlID0gc2VsZi5oZWxwZXIoImZvcm1hdF9ib29sb3AiLCBleHBsX2xpc3QsIGFzdC5OdW0o
aXNfb3IpKQorICAgICAgICBleHBsID0gc2VsZi5wb3BfZm9ybWF0X2NvbnRleHQoZXhwbF90ZW1w
bGF0ZSkKKyAgICAgICAgcmV0dXJuIGFzdC5OYW1lKHJlc192YXIsIGFzdC5Mb2FkKCkpLCBzZWxm
LmV4cGxhbmF0aW9uX3BhcmFtKGV4cGwpCisKKyAgICBkZWYgdmlzaXRfVW5hcnlPcChzZWxmLCB1
bmFyeSk6CisgICAgICAgIHBhdHRlcm4gPSB1bmFyeV9tYXBbdW5hcnkub3AuX19jbGFzc19fXQor
ICAgICAgICBvcGVyYW5kX3Jlcywgb3BlcmFuZF9leHBsID0gc2VsZi52aXNpdCh1bmFyeS5vcGVy
YW5kKQorICAgICAgICByZXMgPSBzZWxmLmFzc2lnbihhc3QuVW5hcnlPcCh1bmFyeS5vcCwgb3Bl
cmFuZF9yZXMpKQorICAgICAgICByZXR1cm4gcmVzLCBwYXR0ZXJuICUgKG9wZXJhbmRfZXhwbCwp
CisKKyAgICBkZWYgdmlzaXRfQmluT3Aoc2VsZiwgYmlub3ApOgorICAgICAgICBzeW1ib2wgPSBi
aW5vcF9tYXBbYmlub3Aub3AuX19jbGFzc19fXQorICAgICAgICBsZWZ0X2V4cHIsIGxlZnRfZXhw
bCA9IHNlbGYudmlzaXQoYmlub3AubGVmdCkKKyAgICAgICAgcmlnaHRfZXhwciwgcmlnaHRfZXhw
bCA9IHNlbGYudmlzaXQoYmlub3AucmlnaHQpCisgICAgICAgIGV4cGxhbmF0aW9uID0gIiglcyAl
cyAlcykiICUgKGxlZnRfZXhwbCwgc3ltYm9sLCByaWdodF9leHBsKQorICAgICAgICByZXMgPSBz
ZWxmLmFzc2lnbihhc3QuQmluT3AobGVmdF9leHByLCBiaW5vcC5vcCwgcmlnaHRfZXhwcikpCisg
ICAgICAgIHJldHVybiByZXMsIGV4cGxhbmF0aW9uCisKKyAgICBkZWYgdmlzaXRfQ2FsbF8zNShz
ZWxmLCBjYWxsKToKKyAgICAgICAgIiIiCisgICAgICAgIHZpc2l0IGBhc3QuQ2FsbGAgbm9kZXMg
b24gUHl0aG9uMy41IGFuZCBhZnRlcgorICAgICAgICAiIiIKKyAgICAgICAgbmV3X2Z1bmMsIGZ1
bmNfZXhwbCA9IHNlbGYudmlzaXQoY2FsbC5mdW5jKQorICAgICAgICBhcmdfZXhwbHMgPSBbXQor
ICAgICAgICBuZXdfYXJncyA9IFtdCisgICAgICAgIG5ld19rd2FyZ3MgPSBbXQorICAgICAgICBm
b3IgYXJnIGluIGNhbGwuYXJnczoKKyAgICAgICAgICAgIHJlcywgZXhwbCA9IHNlbGYudmlzaXQo
YXJnKQorICAgICAgICAgICAgYXJnX2V4cGxzLmFwcGVuZChleHBsKQorICAgICAgICAgICAgbmV3
X2FyZ3MuYXBwZW5kKHJlcykKKyAgICAgICAgZm9yIGtleXdvcmQgaW4gY2FsbC5rZXl3b3JkczoK
KyAgICAgICAgICAgIHJlcywgZXhwbCA9IHNlbGYudmlzaXQoa2V5d29yZC52YWx1ZSkKKyAgICAg
ICAgICAgIG5ld19rd2FyZ3MuYXBwZW5kKGFzdC5rZXl3b3JkKGtleXdvcmQuYXJnLCByZXMpKQor
ICAgICAgICAgICAgaWYga2V5d29yZC5hcmc6CisgICAgICAgICAgICAgICAgYXJnX2V4cGxzLmFw
cGVuZChrZXl3b3JkLmFyZyArICI9IiArIGV4cGwpCisgICAgICAgICAgICBlbHNlOiAjIyAqKmFy
Z3MgaGF2ZSBgYXJnYCBrZXl3b3JkcyB3aXRoIGFuIC5hcmcgb2YgTm9uZQorICAgICAgICAgICAg
ICAgIGFyZ19leHBscy5hcHBlbmQoIioqIiArIGV4cGwpCisKKyAgICAgICAgZXhwbCA9ICIlcygl
cykiICUgKGZ1bmNfZXhwbCwgJywgJy5qb2luKGFyZ19leHBscykpCisgICAgICAgIG5ld19jYWxs
ID0gYXN0LkNhbGwobmV3X2Z1bmMsIG5ld19hcmdzLCBuZXdfa3dhcmdzKQorICAgICAgICByZXMg
PSBzZWxmLmFzc2lnbihuZXdfY2FsbCkKKyAgICAgICAgcmVzX2V4cGwgPSBzZWxmLmV4cGxhbmF0
aW9uX3BhcmFtKHNlbGYuZGlzcGxheShyZXMpKQorICAgICAgICBvdXRlcl9leHBsID0gIiVzXG57
JXMgPSAlc1xufSIgJSAocmVzX2V4cGwsIHJlc19leHBsLCBleHBsKQorICAgICAgICByZXR1cm4g
cmVzLCBvdXRlcl9leHBsCisKKyAgICBkZWYgdmlzaXRfU3RhcnJlZChzZWxmLCBzdGFycmVkKToK
KyAgICAgICAgIyBGcm9tIFB5dGhvbiAzLjUsIGEgU3RhcnJlZCBub2RlIGNhbiBhcHBlYXIgaW4g
YSBmdW5jdGlvbiBjYWxsCisgICAgICAgIHJlcywgZXhwbCA9IHNlbGYudmlzaXQoc3RhcnJlZC52
YWx1ZSkKKyAgICAgICAgcmV0dXJuIHN0YXJyZWQsICcqJyArIGV4cGwKKworICAgIGRlZiB2aXNp
dF9DYWxsX2xlZ2FjeShzZWxmLCBjYWxsKToKKyAgICAgICAgIiIiCisgICAgICAgIHZpc2l0IGBh
c3QuQ2FsbCBub2RlcyBvbiAzLjQgYW5kIGJlbG93YAorICAgICAgICAiIiIKKyAgICAgICAgbmV3
X2Z1bmMsIGZ1bmNfZXhwbCA9IHNlbGYudmlzaXQoY2FsbC5mdW5jKQorICAgICAgICBhcmdfZXhw
bHMgPSBbXQorICAgICAgICBuZXdfYXJncyA9IFtdCisgICAgICAgIG5ld19rd2FyZ3MgPSBbXQor
ICAgICAgICBuZXdfc3RhciA9IG5ld19rd2FyZyA9IE5vbmUKKyAgICAgICAgZm9yIGFyZyBpbiBj
YWxsLmFyZ3M6CisgICAgICAgICAgICByZXMsIGV4cGwgPSBzZWxmLnZpc2l0KGFyZykKKyAgICAg
ICAgICAgIG5ld19hcmdzLmFwcGVuZChyZXMpCisgICAgICAgICAgICBhcmdfZXhwbHMuYXBwZW5k
KGV4cGwpCisgICAgICAgIGZvciBrZXl3b3JkIGluIGNhbGwua2V5d29yZHM6CisgICAgICAgICAg
ICByZXMsIGV4cGwgPSBzZWxmLnZpc2l0KGtleXdvcmQudmFsdWUpCisgICAgICAgICAgICBuZXdf
a3dhcmdzLmFwcGVuZChhc3Qua2V5d29yZChrZXl3b3JkLmFyZywgcmVzKSkKKyAgICAgICAgICAg
IGFyZ19leHBscy5hcHBlbmQoa2V5d29yZC5hcmcgKyAiPSIgKyBleHBsKQorICAgICAgICBpZiBj
YWxsLnN0YXJhcmdzOgorICAgICAgICAgICAgbmV3X3N0YXIsIGV4cGwgPSBzZWxmLnZpc2l0KGNh
bGwuc3RhcmFyZ3MpCisgICAgICAgICAgICBhcmdfZXhwbHMuYXBwZW5kKCIqIiArIGV4cGwpCisg
ICAgICAgIGlmIGNhbGwua3dhcmdzOgorICAgICAgICAgICAgbmV3X2t3YXJnLCBleHBsID0gc2Vs
Zi52aXNpdChjYWxsLmt3YXJncykKKyAgICAgICAgICAgIGFyZ19leHBscy5hcHBlbmQoIioqIiAr
IGV4cGwpCisgICAgICAgIGV4cGwgPSAiJXMoJXMpIiAlIChmdW5jX2V4cGwsICcsICcuam9pbihh
cmdfZXhwbHMpKQorICAgICAgICBuZXdfY2FsbCA9IGFzdC5DYWxsKG5ld19mdW5jLCBuZXdfYXJn
cywgbmV3X2t3YXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfc3RhciwgbmV3
X2t3YXJnKQorICAgICAgICByZXMgPSBzZWxmLmFzc2lnbihuZXdfY2FsbCkKKyAgICAgICAgcmVz
X2V4cGwgPSBzZWxmLmV4cGxhbmF0aW9uX3BhcmFtKHNlbGYuZGlzcGxheShyZXMpKQorICAgICAg
ICBvdXRlcl9leHBsID0gIiVzXG57JXMgPSAlc1xufSIgJSAocmVzX2V4cGwsIHJlc19leHBsLCBl
eHBsKQorICAgICAgICByZXR1cm4gcmVzLCBvdXRlcl9leHBsCisKKyAgICAjIGFzdC5DYWxsIHNp
Z25hdHVyZSBjaGFuZ2VkIG9uIDMuNSwKKyAgICAjIGNvbmRpdGlvbmFsbHkgY2hhbmdlICB3aGlj
aCBtZXRob2RzIGlzIG5hbWVkCisgICAgIyB2aXNpdF9DYWxsIGRlcGVuZGluZyBvbiBQeXRob24g
dmVyc2lvbgorICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPj0gKDMsIDUpOgorICAgICAgICB2aXNp
dF9DYWxsID0gdmlzaXRfQ2FsbF8zNQorICAgIGVsc2U6CisgICAgICAgIHZpc2l0X0NhbGwgPSB2
aXNpdF9DYWxsX2xlZ2FjeQorCisKKyAgICBkZWYgdmlzaXRfQXR0cmlidXRlKHNlbGYsIGF0dHIp
OgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShhdHRyLmN0eCwgYXN0LkxvYWQpOgorICAgICAg
ICAgICAgcmV0dXJuIHNlbGYuZ2VuZXJpY192aXNpdChhdHRyKQorICAgICAgICB2YWx1ZSwgdmFs
dWVfZXhwbCA9IHNlbGYudmlzaXQoYXR0ci52YWx1ZSkKKyAgICAgICAgcmVzID0gc2VsZi5hc3Np
Z24oYXN0LkF0dHJpYnV0ZSh2YWx1ZSwgYXR0ci5hdHRyLCBhc3QuTG9hZCgpKSkKKyAgICAgICAg
cmVzX2V4cGwgPSBzZWxmLmV4cGxhbmF0aW9uX3BhcmFtKHNlbGYuZGlzcGxheShyZXMpKQorICAg
ICAgICBwYXQgPSAiJXNcbnslcyA9ICVzLiVzXG59IgorICAgICAgICBleHBsID0gcGF0ICUgKHJl
c19leHBsLCByZXNfZXhwbCwgdmFsdWVfZXhwbCwgYXR0ci5hdHRyKQorICAgICAgICByZXR1cm4g
cmVzLCBleHBsCisKKyAgICBkZWYgdmlzaXRfQ29tcGFyZShzZWxmLCBjb21wKToKKyAgICAgICAg
c2VsZi5wdXNoX2Zvcm1hdF9jb250ZXh0KCkKKyAgICAgICAgbGVmdF9yZXMsIGxlZnRfZXhwbCA9
IHNlbGYudmlzaXQoY29tcC5sZWZ0KQorICAgICAgICByZXNfdmFyaWFibGVzID0gW3NlbGYudmFy
aWFibGUoKSBmb3IgaSBpbiByYW5nZShsZW4oY29tcC5vcHMpKV0KKyAgICAgICAgbG9hZF9uYW1l
cyA9IFthc3QuTmFtZSh2LCBhc3QuTG9hZCgpKSBmb3IgdiBpbiByZXNfdmFyaWFibGVzXQorICAg
ICAgICBzdG9yZV9uYW1lcyA9IFthc3QuTmFtZSh2LCBhc3QuU3RvcmUoKSkgZm9yIHYgaW4gcmVz
X3ZhcmlhYmxlc10KKyAgICAgICAgaXQgPSB6aXAocmFuZ2UobGVuKGNvbXAub3BzKSksIGNvbXAu
b3BzLCBjb21wLmNvbXBhcmF0b3JzKQorICAgICAgICBleHBscyA9IFtdCisgICAgICAgIHN5bXMg
PSBbXQorICAgICAgICByZXN1bHRzID0gW2xlZnRfcmVzXQorICAgICAgICBmb3IgaSwgb3AsIG5l
eHRfb3BlcmFuZCBpbiBpdDoKKyAgICAgICAgICAgIG5leHRfcmVzLCBuZXh0X2V4cGwgPSBzZWxm
LnZpc2l0KG5leHRfb3BlcmFuZCkKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG5leHRfcmVz
KQorICAgICAgICAgICAgc3ltID0gYmlub3BfbWFwW29wLl9fY2xhc3NfX10KKyAgICAgICAgICAg
IHN5bXMuYXBwZW5kKGFzdC5TdHIoc3ltKSkKKyAgICAgICAgICAgIGV4cGwgPSAiJXMgJXMgJXMi
ICUgKGxlZnRfZXhwbCwgc3ltLCBuZXh0X2V4cGwpCisgICAgICAgICAgICBleHBscy5hcHBlbmQo
YXN0LlN0cihleHBsKSkKKyAgICAgICAgICAgIHJlc19leHByID0gYXN0LkNvbXBhcmUobGVmdF9y
ZXMsIFtvcF0sIFtuZXh0X3Jlc10pCisgICAgICAgICAgICBzZWxmLnN0YXRlbWVudHMuYXBwZW5k
KGFzdC5Bc3NpZ24oW3N0b3JlX25hbWVzW2ldXSwgcmVzX2V4cHIpKQorICAgICAgICAgICAgbGVm
dF9yZXMsIGxlZnRfZXhwbCA9IG5leHRfcmVzLCBuZXh0X2V4cGwKKyAgICAgICAgIyBVc2UgcHl0
ZXN0LmFzc2VydGlvbi51dGlsLl9yZXByY29tcGFyZSBpZiB0aGF0J3MgYXZhaWxhYmxlLgorICAg
ICAgICBleHBsX2NhbGwgPSBzZWxmLmhlbHBlcigiY2FsbF9yZXByY29tcGFyZSIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFzdC5UdXBsZShzeW1zLCBhc3QuTG9hZCgpKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXN0LlR1cGxlKGxvYWRfbmFtZXMsIGFzdC5M
b2FkKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3QuVHVwbGUoZXhwbHMs
IGFzdC5Mb2FkKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3QuVHVwbGUo
cmVzdWx0cywgYXN0LkxvYWQoKSkpCisgICAgICAgIGlmIGxlbihjb21wLm9wcykgPiAxOgorICAg
ICAgICAgICAgcmVzID0gYXN0LkJvb2xPcChhc3QuQW5kKCksIGxvYWRfbmFtZXMpCisgICAgICAg
IGVsc2U6CisgICAgICAgICAgICByZXMgPSBsb2FkX25hbWVzWzBdCisgICAgICAgIHJldHVybiBy
ZXMsIHNlbGYuZXhwbGFuYXRpb25fcGFyYW0oc2VsZi5wb3BfZm9ybWF0X2NvbnRleHQoZXhwbF9j
YWxsKSkKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRl
c3QvX3B5dGVzdC9hc3NlcnRpb24vdXRpbC5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3cz
Yy90b29scy9weXRlc3QvX3B5dGVzdC9hc3NlcnRpb24vdXRpbC5weQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZjJmMjNlZmVhMjcKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvYXNzZXJ0aW9u
L3V0aWwucHkKQEAgLTAsMCArMSwzMzIgQEAKKyIiIlV0aWxpdGllcyBmb3IgYXNzZXJ0aW9uIGRl
YnVnZ2luZyIiIgoraW1wb3J0IHBwcmludAorCitpbXBvcnQgX3B5dGVzdC5fY29kZQoraW1wb3J0
IHB5Cit0cnk6CisgICAgZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgU2VxdWVuY2UKK2V4Y2VwdCBJ
bXBvcnRFcnJvcjoKKyAgICBTZXF1ZW5jZSA9IGxpc3QKKworQnVpbHRpbkFzc2VydGlvbkVycm9y
ID0gcHkuYnVpbHRpbi5idWlsdGlucy5Bc3NlcnRpb25FcnJvcgordSA9IHB5LmJ1aWx0aW4uX3Rv
dGV4dAorCisjIFRoZSBfcmVwcmNvbXBhcmUgYXR0cmlidXRlIG9uIHRoZSB1dGlsIG1vZHVsZSBp
cyB1c2VkIGJ5IHRoZSBuZXcgYXNzZXJ0aW9uCisjIGludGVycHJldGF0aW9uIGNvZGUgYW5kIGFz
c2VydGlvbiByZXdyaXRlciB0byBkZXRlY3QgdGhpcyBwbHVnaW4gd2FzCisjIGxvYWRlZCBhbmQg
aW4gdHVybiBjYWxsIHRoZSBob29rcyBkZWZpbmVkIGhlcmUgYXMgcGFydCBvZiB0aGUKKyMgRGVi
dWdJbnRlcnByZXRlci4KK19yZXByY29tcGFyZSA9IE5vbmUKKworCisjIHRoZSByZS1lbmNvZGlu
ZyBpcyBuZWVkZWQgZm9yIHB5dGhvbjIgcmVwcgorIyB3aXRoIG5vbi1hc2NpaSBjaGFyYWN0ZXJz
IChzZWUgaXNzdWUgODc3IGFuZCAxMzc5KQorZGVmIGVjdShzKToKKyAgICB0cnk6CisgICAgICAg
IHJldHVybiB1KHMsICd1dGYtOCcsICdyZXBsYWNlJykKKyAgICBleGNlcHQgVHlwZUVycm9yOgor
ICAgICAgICByZXR1cm4gcworCisKK2RlZiBmb3JtYXRfZXhwbGFuYXRpb24oZXhwbGFuYXRpb24p
OgorICAgICIiIlRoaXMgZm9ybWF0cyBhbiBleHBsYW5hdGlvbgorCisgICAgTm9ybWFsbHkgYWxs
IGVtYmVkZGVkIG5ld2xpbmVzIGFyZSBlc2NhcGVkLCBob3dldmVyIHRoZXJlIGFyZQorICAgIHRo
cmVlIGV4Y2VwdGlvbnM6IFxueywgXG59IGFuZCBcbn4uICBUaGUgZmlyc3QgdHdvIGFyZSBpbnRl
bmRlZAorICAgIGNvdmVyIG5lc3RlZCBleHBsYW5hdGlvbnMsIHNlZSBmdW5jdGlvbiBhbmQgYXR0
cmlidXRlIGV4cGxhbmF0aW9ucworICAgIGZvciBleGFtcGxlcyAoLnZpc2l0X0NhbGwoKSwgdmlz
aXRfQXR0cmlidXRlKCkpLiAgVGhlIGxhc3Qgb25lIGlzCisgICAgZm9yIHdoZW4gb25lIGV4cGxh
bmF0aW9uIG5lZWRzIHRvIHNwYW4gbXVsdGlwbGUgbGluZXMsIGUuZy4gd2hlbgorICAgIGRpc3Bs
YXlpbmcgZGlmZnMuCisgICAgIiIiCisgICAgZXhwbGFuYXRpb24gPSBlY3UoZXhwbGFuYXRpb24p
CisgICAgZXhwbGFuYXRpb24gPSBfY29sbGFwc2VfZmFsc2UoZXhwbGFuYXRpb24pCisgICAgbGlu
ZXMgPSBfc3BsaXRfZXhwbGFuYXRpb24oZXhwbGFuYXRpb24pCisgICAgcmVzdWx0ID0gX2Zvcm1h
dF9saW5lcyhsaW5lcykKKyAgICByZXR1cm4gdSgnXG4nKS5qb2luKHJlc3VsdCkKKworCitkZWYg
X2NvbGxhcHNlX2ZhbHNlKGV4cGxhbmF0aW9uKToKKyAgICAiIiJDb2xsYXBzZSBleHBhbnNpb25z
IG9mIEZhbHNlCisKKyAgICBTbyB0aGlzIHN0cmlwcyBvdXQgYW55ICJhc3NlcnQgRmFsc2Vcbnt3
aGVyZSBGYWxzZSA9IC4uLlxufSIKKyAgICBibG9ja3MuCisgICAgIiIiCisgICAgd2hlcmUgPSAw
CisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgc3RhcnQgPSB3aGVyZSA9IGV4cGxhbmF0aW9uLmZp
bmQoIkZhbHNlXG57RmFsc2UgPSAiLCB3aGVyZSkKKyAgICAgICAgaWYgd2hlcmUgPT0gLTE6Cisg
ICAgICAgICAgICBicmVhaworICAgICAgICBsZXZlbCA9IDAKKyAgICAgICAgcHJldl9jID0gZXhw
bGFuYXRpb25bc3RhcnRdCisgICAgICAgIGZvciBpLCBjIGluIGVudW1lcmF0ZShleHBsYW5hdGlv
bltzdGFydDpdKToKKyAgICAgICAgICAgIGlmIHByZXZfYyArIGMgPT0gIlxueyI6CisgICAgICAg
ICAgICAgICAgbGV2ZWwgKz0gMQorICAgICAgICAgICAgZWxpZiBwcmV2X2MgKyBjID09ICJcbn0i
OgorICAgICAgICAgICAgICAgIGxldmVsIC09IDEKKyAgICAgICAgICAgICAgICBpZiBub3QgbGV2
ZWw6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBwcmV2X2MgPSBjCisg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigidW5iYWxhbmNl
ZCBicmFjZXM6ICVyIiAlIChleHBsYW5hdGlvbiwpKQorICAgICAgICBlbmQgPSBzdGFydCArIGkK
KyAgICAgICAgd2hlcmUgPSBlbmQKKyAgICAgICAgaWYgZXhwbGFuYXRpb25bZW5kIC0gMV0gPT0g
J1xuJzoKKyAgICAgICAgICAgIGV4cGxhbmF0aW9uID0gKGV4cGxhbmF0aW9uWzpzdGFydF0gKyBl
eHBsYW5hdGlvbltzdGFydCsxNTplbmQtMV0gKworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZXhwbGFuYXRpb25bZW5kKzE6XSkKKyAgICAgICAgICAgIHdoZXJlIC09IDE3CisgICAgcmV0dXJu
IGV4cGxhbmF0aW9uCisKKworZGVmIF9zcGxpdF9leHBsYW5hdGlvbihleHBsYW5hdGlvbik6Cisg
ICAgIiIiUmV0dXJuIGEgbGlzdCBvZiBpbmRpdmlkdWFsIGxpbmVzIGluIHRoZSBleHBsYW5hdGlv
bgorCisgICAgVGhpcyB3aWxsIHJldHVybiBhIGxpc3Qgb2YgbGluZXMgc3BsaXQgb24gJ1xueycs
ICdcbn0nIGFuZCAnXG5+Jy4KKyAgICBBbnkgb3RoZXIgbmV3bGluZXMgd2lsbCBiZSBlc2NhcGVk
IGFuZCBhcHBlYXIgaW4gdGhlIGxpbmUgYXMgdGhlCisgICAgbGl0ZXJhbCAnXG4nIGNoYXJhY3Rl
cnMuCisgICAgIiIiCisgICAgcmF3X2xpbmVzID0gKGV4cGxhbmF0aW9uIG9yIHUoJycpKS5zcGxp
dCgnXG4nKQorICAgIGxpbmVzID0gW3Jhd19saW5lc1swXV0KKyAgICBmb3IgbCBpbiByYXdfbGlu
ZXNbMTpdOgorICAgICAgICBpZiBsIGFuZCBsWzBdIGluIFsneycsICd9JywgJ34nLCAnPiddOgor
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKGwpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBs
aW5lc1stMV0gKz0gJ1xcbicgKyBsCisgICAgcmV0dXJuIGxpbmVzCisKKworZGVmIF9mb3JtYXRf
bGluZXMobGluZXMpOgorICAgICIiIkZvcm1hdCB0aGUgaW5kaXZpZHVhbCBsaW5lcworCisgICAg
VGhpcyB3aWxsIHJlcGxhY2UgdGhlICd7JywgJ30nIGFuZCAnficgY2hhcmFjdGVycyBvZiBvdXIg
bWluaQorICAgIGZvcm1hdHRpbmcgbGFuZ3VhZ2Ugd2l0aCB0aGUgcHJvcGVyICd3aGVyZSAuLi4n
LCAnYW5kIC4uLicgYW5kICcgKworICAgIC4uLicgdGV4dCwgdGFraW5nIGNhcmUgb2YgaW5kZW50
YXRpb24gYWxvbmcgdGhlIHdheS4KKworICAgIFJldHVybiBhIGxpc3Qgb2YgZm9ybWF0dGVkIGxp
bmVzLgorICAgICIiIgorICAgIHJlc3VsdCA9IGxpbmVzWzoxXQorICAgIHN0YWNrID0gWzBdCisg
ICAgc3RhY2tjbnQgPSBbMF0KKyAgICBmb3IgbGluZSBpbiBsaW5lc1sxOl06CisgICAgICAgIGlm
IGxpbmUuc3RhcnRzd2l0aCgneycpOgorICAgICAgICAgICAgaWYgc3RhY2tjbnRbLTFdOgorICAg
ICAgICAgICAgICAgIHMgPSB1KCdhbmQgICAnKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgICAgICBzID0gdSgnd2hlcmUgJykKKyAgICAgICAgICAgIHN0YWNrLmFwcGVuZChsZW4ocmVz
dWx0KSkKKyAgICAgICAgICAgIHN0YWNrY250Wy0xXSArPSAxCisgICAgICAgICAgICBzdGFja2Nu
dC5hcHBlbmQoMCkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodSgnICsnKSArIHUoJyAgJykq
KGxlbihzdGFjayktMSkgKyBzICsgbGluZVsxOl0pCisgICAgICAgIGVsaWYgbGluZS5zdGFydHN3
aXRoKCd9Jyk6CisgICAgICAgICAgICBzdGFjay5wb3AoKQorICAgICAgICAgICAgc3RhY2tjbnQu
cG9wKCkKKyAgICAgICAgICAgIHJlc3VsdFtzdGFja1stMV1dICs9IGxpbmVbMTpdCisgICAgICAg
IGVsc2U6CisgICAgICAgICAgICBhc3NlcnQgbGluZVswXSBpbiBbJ34nLCAnPiddCisgICAgICAg
ICAgICBzdGFja1stMV0gKz0gMQorICAgICAgICAgICAgaW5kZW50ID0gbGVuKHN0YWNrKSBpZiBs
aW5lLnN0YXJ0c3dpdGgoJ34nKSBlbHNlIGxlbihzdGFjaykgLSAxCisgICAgICAgICAgICByZXN1
bHQuYXBwZW5kKHUoJyAgJykqaW5kZW50ICsgbGluZVsxOl0pCisgICAgYXNzZXJ0IGxlbihzdGFj
aykgPT0gMQorICAgIHJldHVybiByZXN1bHQKKworCisjIFByb3ZpZGUgYmFzZXN0cmluZyBpbiBw
eXRob24zCit0cnk6CisgICAgYmFzZXN0cmluZyA9IGJhc2VzdHJpbmcKK2V4Y2VwdCBOYW1lRXJy
b3I6CisgICAgYmFzZXN0cmluZyA9IHN0cgorCisKK2RlZiBhc3NlcnRyZXByX2NvbXBhcmUoY29u
ZmlnLCBvcCwgbGVmdCwgcmlnaHQpOgorICAgICIiIlJldHVybiBzcGVjaWFsaXNlZCBleHBsYW5h
dGlvbnMgZm9yIHNvbWUgb3BlcmF0b3JzL29wZXJhbmRzIiIiCisgICAgd2lkdGggPSA4MCAtIDE1
IC0gbGVuKG9wKSAtIDIgICMgMTUgY2hhcnMgaW5kZW50YXRpb24sIDEgc3BhY2UgYXJvdW5kIG9w
CisgICAgbGVmdF9yZXByID0gcHkuaW8uc2FmZXJlcHIobGVmdCwgbWF4c2l6ZT1pbnQod2lkdGgv
MikpCisgICAgcmlnaHRfcmVwciA9IHB5LmlvLnNhZmVyZXByKHJpZ2h0LCBtYXhzaXplPXdpZHRo
LWxlbihsZWZ0X3JlcHIpKQorCisgICAgc3VtbWFyeSA9IHUoJyVzICVzICVzJykgJSAoZWN1KGxl
ZnRfcmVwciksIG9wLCBlY3UocmlnaHRfcmVwcikpCisKKyAgICBpc3NlcXVlbmNlID0gbGFtYmRh
IHg6IChpc2luc3RhbmNlKHgsIChsaXN0LCB0dXBsZSwgU2VxdWVuY2UpKSBhbmQKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBub3QgaXNpbnN0YW5jZSh4LCBiYXNlc3RyaW5nKSkKKyAgICBp
c3RleHQgPSBsYW1iZGEgeDogaXNpbnN0YW5jZSh4LCBiYXNlc3RyaW5nKQorICAgIGlzZGljdCA9
IGxhbWJkYSB4OiBpc2luc3RhbmNlKHgsIGRpY3QpCisgICAgaXNzZXQgPSBsYW1iZGEgeDogaXNp
bnN0YW5jZSh4LCAoc2V0LCBmcm96ZW5zZXQpKQorCisgICAgZGVmIGlzaXRlcmFibGUob2JqKToK
KyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaXRlcihvYmopCisgICAgICAgICAgICByZXR1cm4g
bm90IGlzdGV4dChvYmopCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBy
ZXR1cm4gRmFsc2UKKworICAgIHZlcmJvc2UgPSBjb25maWcuZ2V0b3B0aW9uKCd2ZXJib3NlJykK
KyAgICBleHBsYW5hdGlvbiA9IE5vbmUKKyAgICB0cnk6CisgICAgICAgIGlmIG9wID09ICc9PSc6
CisgICAgICAgICAgICBpZiBpc3RleHQobGVmdCkgYW5kIGlzdGV4dChyaWdodCk6CisgICAgICAg
ICAgICAgICAgZXhwbGFuYXRpb24gPSBfZGlmZl90ZXh0KGxlZnQsIHJpZ2h0LCB2ZXJib3NlKQor
ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBpc3NlcXVlbmNlKGxlZnQpIGFu
ZCBpc3NlcXVlbmNlKHJpZ2h0KToKKyAgICAgICAgICAgICAgICAgICAgZXhwbGFuYXRpb24gPSBf
Y29tcGFyZV9lcV9zZXF1ZW5jZShsZWZ0LCByaWdodCwgdmVyYm9zZSkKKyAgICAgICAgICAgICAg
ICBlbGlmIGlzc2V0KGxlZnQpIGFuZCBpc3NldChyaWdodCk6CisgICAgICAgICAgICAgICAgICAg
IGV4cGxhbmF0aW9uID0gX2NvbXBhcmVfZXFfc2V0KGxlZnQsIHJpZ2h0LCB2ZXJib3NlKQorICAg
ICAgICAgICAgICAgIGVsaWYgaXNkaWN0KGxlZnQpIGFuZCBpc2RpY3QocmlnaHQpOgorICAgICAg
ICAgICAgICAgICAgICBleHBsYW5hdGlvbiA9IF9jb21wYXJlX2VxX2RpY3QobGVmdCwgcmlnaHQs
IHZlcmJvc2UpCisgICAgICAgICAgICAgICAgaWYgaXNpdGVyYWJsZShsZWZ0KSBhbmQgaXNpdGVy
YWJsZShyaWdodCk6CisgICAgICAgICAgICAgICAgICAgIGV4cGwgPSBfY29tcGFyZV9lcV9pdGVy
YWJsZShsZWZ0LCByaWdodCwgdmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgZXhwbGFu
YXRpb24gaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBleHBsYW5hdGlvbi5l
eHRlbmQoZXhwbCkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGV4cGxhbmF0aW9uID0gZXhwbAorICAgICAgICBlbGlmIG9wID09ICdub3QgaW4nOgor
ICAgICAgICAgICAgaWYgaXN0ZXh0KGxlZnQpIGFuZCBpc3RleHQocmlnaHQpOgorICAgICAgICAg
ICAgICAgIGV4cGxhbmF0aW9uID0gX25vdGluX3RleHQobGVmdCwgcmlnaHQsIHZlcmJvc2UpCisg
ICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgZXhwbGFuYXRpb24gPSBbCisgICAgICAgICAg
ICB1KCcocHl0ZXN0X2Fzc2VydGlvbiBwbHVnaW46IHJlcHJlc2VudGF0aW9uIG9mIGRldGFpbHMg
ZmFpbGVkLiAgJworICAgICAgICAgICAgICAnUHJvYmFibHkgYW4gb2JqZWN0IGhhcyBhIGZhdWx0
eSBfX3JlcHJfXy4pJyksCisgICAgICAgICAgICB1KF9weXRlc3QuX2NvZGUuRXhjZXB0aW9uSW5m
bygpKV0KKworICAgIGlmIG5vdCBleHBsYW5hdGlvbjoKKyAgICAgICAgcmV0dXJuIE5vbmUKKwor
ICAgIHJldHVybiBbc3VtbWFyeV0gKyBleHBsYW5hdGlvbgorCisKK2RlZiBfZGlmZl90ZXh0KGxl
ZnQsIHJpZ2h0LCB2ZXJib3NlPUZhbHNlKToKKyAgICAiIiJSZXR1cm4gdGhlIGV4cGxhbmF0aW9u
IGZvciB0aGUgZGlmZiBiZXR3ZWVuIHRleHQgb3IgYnl0ZXMKKworICAgIFVubGVzcyAtLXZlcmJv
c2UgaXMgdXNlZCB0aGlzIHdpbGwgc2tpcCBsZWFkaW5nIGFuZCB0cmFpbGluZworICAgIGNoYXJh
Y3RlcnMgd2hpY2ggYXJlIGlkZW50aWNhbCB0byBrZWVwIHRoZSBkaWZmIG1pbmltYWwuCisKKyAg
ICBJZiB0aGUgaW5wdXQgYXJlIGJ5dGVzIHRoZXkgd2lsbCBiZSBzYWZlbHkgY29udmVydGVkIHRv
IHRleHQuCisgICAgIiIiCisgICAgZnJvbSBkaWZmbGliIGltcG9ydCBuZGlmZgorICAgIGV4cGxh
bmF0aW9uID0gW10KKyAgICBpZiBpc2luc3RhbmNlKGxlZnQsIHB5LmJ1aWx0aW4uYnl0ZXMpOgor
ICAgICAgICBsZWZ0ID0gdShyZXByKGxlZnQpWzE6LTFdKS5yZXBsYWNlKHInXG4nLCAnXG4nKQor
ICAgIGlmIGlzaW5zdGFuY2UocmlnaHQsIHB5LmJ1aWx0aW4uYnl0ZXMpOgorICAgICAgICByaWdo
dCA9IHUocmVwcihyaWdodClbMTotMV0pLnJlcGxhY2UocidcbicsICdcbicpCisgICAgaWYgbm90
IHZlcmJvc2U6CisgICAgICAgIGkgPSAwICAjIGp1c3QgaW4gY2FzZSBsZWZ0IG9yIHJpZ2h0IGhh
cyB6ZXJvIGxlbmd0aAorICAgICAgICBmb3IgaSBpbiByYW5nZShtaW4obGVuKGxlZnQpLCBsZW4o
cmlnaHQpKSk6CisgICAgICAgICAgICBpZiBsZWZ0W2ldICE9IHJpZ2h0W2ldOgorICAgICAgICAg
ICAgICAgIGJyZWFrCisgICAgICAgIGlmIGkgPiA0MjoKKyAgICAgICAgICAgIGkgLT0gMTAgICAg
ICAgICAgICAgICAgICMgUHJvdmlkZSBzb21lIGNvbnRleHQKKyAgICAgICAgICAgIGV4cGxhbmF0
aW9uID0gW3UoJ1NraXBwaW5nICVzIGlkZW50aWNhbCBsZWFkaW5nICcKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJ2NoYXJhY3RlcnMgaW4gZGlmZiwgdXNlIC12IHRvIHNob3cnKSAlIGld
CisgICAgICAgICAgICBsZWZ0ID0gbGVmdFtpOl0KKyAgICAgICAgICAgIHJpZ2h0ID0gcmlnaHRb
aTpdCisgICAgICAgIGlmIGxlbihsZWZ0KSA9PSBsZW4ocmlnaHQpOgorICAgICAgICAgICAgZm9y
IGkgaW4gcmFuZ2UobGVuKGxlZnQpKToKKyAgICAgICAgICAgICAgICBpZiBsZWZ0Wy1pXSAhPSBy
aWdodFstaV06CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBpID4g
NDI6CisgICAgICAgICAgICAgICAgaSAtPSAxMCAgICAgIyBQcm92aWRlIHNvbWUgY29udGV4dAor
ICAgICAgICAgICAgICAgIGV4cGxhbmF0aW9uICs9IFt1KCdTa2lwcGluZyAlcyBpZGVudGljYWwg
dHJhaWxpbmcgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjaGFyYWN0ZXJz
IGluIGRpZmYsIHVzZSAtdiB0byBzaG93JykgJSBpXQorICAgICAgICAgICAgICAgIGxlZnQgPSBs
ZWZ0WzotaV0KKyAgICAgICAgICAgICAgICByaWdodCA9IHJpZ2h0WzotaV0KKyAgICBleHBsYW5h
dGlvbiArPSBbbGluZS5zdHJpcCgnXG4nKQorICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBp
biBuZGlmZihsZWZ0LnNwbGl0bGluZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmlnaHQuc3BsaXRsaW5lcygpKV0KKyAgICByZXR1cm4gZXhwbGFuYXRpb24KKwor
CitkZWYgX2NvbXBhcmVfZXFfaXRlcmFibGUobGVmdCwgcmlnaHQsIHZlcmJvc2U9RmFsc2UpOgor
ICAgIGlmIG5vdCB2ZXJib3NlOgorICAgICAgICByZXR1cm4gW3UoJ1VzZSAtdiB0byBnZXQgdGhl
IGZ1bGwgZGlmZicpXQorICAgICMgZHluYW1pYyBpbXBvcnQgdG8gc3BlZWR1cCBweXRlc3QKKyAg
ICBpbXBvcnQgZGlmZmxpYgorCisgICAgdHJ5OgorICAgICAgICBsZWZ0X2Zvcm1hdHRpbmcgPSBw
cHJpbnQucGZvcm1hdChsZWZ0KS5zcGxpdGxpbmVzKCkKKyAgICAgICAgcmlnaHRfZm9ybWF0dGlu
ZyA9IHBwcmludC5wZm9ybWF0KHJpZ2h0KS5zcGxpdGxpbmVzKCkKKyAgICAgICAgZXhwbGFuYXRp
b24gPSBbdSgnRnVsbCBkaWZmOicpXQorICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICMg
aGFjazogUHJldHR5UHJpbnRlci5wZm9ybWF0KCkgaW4gcHl0aG9uIDIgZmFpbHMgd2hlbiBmb3Jt
YXR0aW5nIGl0ZW1zIHRoYXQgY2FuJ3QgYmUgc29ydGVkKCksIGllLCBjYWxsaW5nCisgICAgICAg
ICMgc29ydGVkKCkgb24gYSBsaXN0IHdvdWxkIHJhaXNlLiBTZWUgaXNzdWUgIzcxOC4KKyAgICAg
ICAgIyBBcyBhIHdvcmthcm91bmQsIHRoZSBmdWxsIGRpZmYgaXMgZ2VuZXJhdGVkIGJ5IHVzaW5n
IHRoZSByZXByKCkgc3RyaW5nIG9mIGVhY2ggaXRlbSBvZiBlYWNoIGNvbnRhaW5lci4KKyAgICAg
ICAgbGVmdF9mb3JtYXR0aW5nID0gc29ydGVkKHJlcHIoeCkgZm9yIHggaW4gbGVmdCkKKyAgICAg
ICAgcmlnaHRfZm9ybWF0dGluZyA9IHNvcnRlZChyZXByKHgpIGZvciB4IGluIHJpZ2h0KQorICAg
ICAgICBleHBsYW5hdGlvbiA9IFt1KCdGdWxsIGRpZmYgKGZhbGxiYWNrIHRvIGNhbGxpbmcgcmVw
ciBvbiBlYWNoIGl0ZW0pOicpXQorICAgIGV4cGxhbmF0aW9uLmV4dGVuZChsaW5lLnN0cmlwKCkg
Zm9yIGxpbmUgaW4gZGlmZmxpYi5uZGlmZihsZWZ0X2Zvcm1hdHRpbmcsIHJpZ2h0X2Zvcm1hdHRp
bmcpKQorICAgIHJldHVybiBleHBsYW5hdGlvbgorCisKK2RlZiBfY29tcGFyZV9lcV9zZXF1ZW5j
ZShsZWZ0LCByaWdodCwgdmVyYm9zZT1GYWxzZSk6CisgICAgZXhwbGFuYXRpb24gPSBbXQorICAg
IGZvciBpIGluIHJhbmdlKG1pbihsZW4obGVmdCksIGxlbihyaWdodCkpKToKKyAgICAgICAgaWYg
bGVmdFtpXSAhPSByaWdodFtpXToKKyAgICAgICAgICAgIGV4cGxhbmF0aW9uICs9IFt1KCdBdCBp
bmRleCAlcyBkaWZmOiAlciAhPSAlcicpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAo
aSwgbGVmdFtpXSwgcmlnaHRbaV0pXQorICAgICAgICAgICAgYnJlYWsKKyAgICBpZiBsZW4obGVm
dCkgPiBsZW4ocmlnaHQpOgorICAgICAgICBleHBsYW5hdGlvbiArPSBbdSgnTGVmdCBjb250YWlu
cyBtb3JlIGl0ZW1zLCBmaXJzdCBleHRyYSBpdGVtOiAlcycpCisgICAgICAgICAgICAgICAgICAg
ICAgICAlIHB5LmlvLnNhZmVyZXByKGxlZnRbbGVuKHJpZ2h0KV0sKV0KKyAgICBlbGlmIGxlbihs
ZWZ0KSA8IGxlbihyaWdodCk6CisgICAgICAgIGV4cGxhbmF0aW9uICs9IFsKKyAgICAgICAgICAg
IHUoJ1JpZ2h0IGNvbnRhaW5zIG1vcmUgaXRlbXMsIGZpcnN0IGV4dHJhIGl0ZW06ICVzJykgJQor
ICAgICAgICAgICAgcHkuaW8uc2FmZXJlcHIocmlnaHRbbGVuKGxlZnQpXSwpXQorICAgIHJldHVy
biBleHBsYW5hdGlvbgorCisKK2RlZiBfY29tcGFyZV9lcV9zZXQobGVmdCwgcmlnaHQsIHZlcmJv
c2U9RmFsc2UpOgorICAgIGV4cGxhbmF0aW9uID0gW10KKyAgICBkaWZmX2xlZnQgPSBsZWZ0IC0g
cmlnaHQKKyAgICBkaWZmX3JpZ2h0ID0gcmlnaHQgLSBsZWZ0CisgICAgaWYgZGlmZl9sZWZ0Ogor
ICAgICAgICBleHBsYW5hdGlvbi5hcHBlbmQodSgnRXh0cmEgaXRlbXMgaW4gdGhlIGxlZnQgc2V0
OicpKQorICAgICAgICBmb3IgaXRlbSBpbiBkaWZmX2xlZnQ6CisgICAgICAgICAgICBleHBsYW5h
dGlvbi5hcHBlbmQocHkuaW8uc2FmZXJlcHIoaXRlbSkpCisgICAgaWYgZGlmZl9yaWdodDoKKyAg
ICAgICAgZXhwbGFuYXRpb24uYXBwZW5kKHUoJ0V4dHJhIGl0ZW1zIGluIHRoZSByaWdodCBzZXQ6
JykpCisgICAgICAgIGZvciBpdGVtIGluIGRpZmZfcmlnaHQ6CisgICAgICAgICAgICBleHBsYW5h
dGlvbi5hcHBlbmQocHkuaW8uc2FmZXJlcHIoaXRlbSkpCisgICAgcmV0dXJuIGV4cGxhbmF0aW9u
CisKKworZGVmIF9jb21wYXJlX2VxX2RpY3QobGVmdCwgcmlnaHQsIHZlcmJvc2U9RmFsc2UpOgor
ICAgIGV4cGxhbmF0aW9uID0gW10KKyAgICBjb21tb24gPSBzZXQobGVmdCkuaW50ZXJzZWN0aW9u
KHNldChyaWdodCkpCisgICAgc2FtZSA9IGRpY3QoKGssIGxlZnRba10pIGZvciBrIGluIGNvbW1v
biBpZiBsZWZ0W2tdID09IHJpZ2h0W2tdKQorICAgIGlmIHNhbWUgYW5kIG5vdCB2ZXJib3NlOgor
ICAgICAgICBleHBsYW5hdGlvbiArPSBbdSgnT21pdHRpbmcgJXMgaWRlbnRpY2FsIGl0ZW1zLCB1
c2UgLXYgdG8gc2hvdycpICUKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlbihzYW1lKV0KKyAg
ICBlbGlmIHNhbWU6CisgICAgICAgIGV4cGxhbmF0aW9uICs9IFt1KCdDb21tb24gaXRlbXM6Jyld
CisgICAgICAgIGV4cGxhbmF0aW9uICs9IHBwcmludC5wZm9ybWF0KHNhbWUpLnNwbGl0bGluZXMo
KQorICAgIGRpZmYgPSBzZXQoayBmb3IgayBpbiBjb21tb24gaWYgbGVmdFtrXSAhPSByaWdodFtr
XSkKKyAgICBpZiBkaWZmOgorICAgICAgICBleHBsYW5hdGlvbiArPSBbdSgnRGlmZmVyaW5nIGl0
ZW1zOicpXQorICAgICAgICBmb3IgayBpbiBkaWZmOgorICAgICAgICAgICAgZXhwbGFuYXRpb24g
Kz0gW3B5LmlvLnNhZmVyZXByKHtrOiBsZWZ0W2tdfSkgKyAnICE9ICcgKworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHB5LmlvLnNhZmVyZXByKHtrOiByaWdodFtrXX0pXQorICAgIGV4dHJh
X2xlZnQgPSBzZXQobGVmdCkgLSBzZXQocmlnaHQpCisgICAgaWYgZXh0cmFfbGVmdDoKKyAgICAg
ICAgZXhwbGFuYXRpb24uYXBwZW5kKHUoJ0xlZnQgY29udGFpbnMgbW9yZSBpdGVtczonKSkKKyAg
ICAgICAgZXhwbGFuYXRpb24uZXh0ZW5kKHBwcmludC5wZm9ybWF0KAorICAgICAgICAgICAgZGlj
dCgoaywgbGVmdFtrXSkgZm9yIGsgaW4gZXh0cmFfbGVmdCkpLnNwbGl0bGluZXMoKSkKKyAgICBl
eHRyYV9yaWdodCA9IHNldChyaWdodCkgLSBzZXQobGVmdCkKKyAgICBpZiBleHRyYV9yaWdodDoK
KyAgICAgICAgZXhwbGFuYXRpb24uYXBwZW5kKHUoJ1JpZ2h0IGNvbnRhaW5zIG1vcmUgaXRlbXM6
JykpCisgICAgICAgIGV4cGxhbmF0aW9uLmV4dGVuZChwcHJpbnQucGZvcm1hdCgKKyAgICAgICAg
ICAgIGRpY3QoKGssIHJpZ2h0W2tdKSBmb3IgayBpbiBleHRyYV9yaWdodCkpLnNwbGl0bGluZXMo
KSkKKyAgICByZXR1cm4gZXhwbGFuYXRpb24KKworCitkZWYgX25vdGluX3RleHQodGVybSwgdGV4
dCwgdmVyYm9zZT1GYWxzZSk6CisgICAgaW5kZXggPSB0ZXh0LmZpbmQodGVybSkKKyAgICBoZWFk
ID0gdGV4dFs6aW5kZXhdCisgICAgdGFpbCA9IHRleHRbaW5kZXgrbGVuKHRlcm0pOl0KKyAgICBj
b3JyZWN0X3RleHQgPSBoZWFkICsgdGFpbAorICAgIGRpZmYgPSBfZGlmZl90ZXh0KGNvcnJlY3Rf
dGV4dCwgdGV4dCwgdmVyYm9zZSkKKyAgICBuZXdkaWZmID0gW3UoJyVzIGlzIGNvbnRhaW5lZCBo
ZXJlOicpICUgcHkuaW8uc2FmZXJlcHIodGVybSwgbWF4c2l6ZT00MildCisgICAgZm9yIGxpbmUg
aW4gZGlmZjoKKyAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKHUoJ1NraXBwaW5nJykpOgorICAg
ICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKHUoJy0gJykpOgor
ICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKHUoJysgJykp
OgorICAgICAgICAgICAgbmV3ZGlmZi5hcHBlbmQodSgnICAnKSArIGxpbmVbMjpdKQorICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgbmV3ZGlmZi5hcHBlbmQobGluZSkKKyAgICByZXR1cm4gbmV3
ZGlmZgpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVz
dC9fcHl0ZXN0L2NhY2hlcHJvdmlkZXIucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mv
dG9vbHMvcHl0ZXN0L19weXRlc3QvY2FjaGVwcm92aWRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uMDY1NzAwMWYyZDQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJE
cml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvY2FjaGVwcm92aWRl
ci5weQpAQCAtMCwwICsxLDI0NSBAQAorIiIiCittZXJnZWQgaW1wbGVtZW50YXRpb24gb2YgdGhl
IGNhY2hlIHByb3ZpZGVyCisKK3RoZSBuYW1lIGNhY2hlIHdhcyBub3QgY2hvb3NlbiB0byBlbnN1
cmUgcGx1Z2d5IGF1dG9tYXRpY2FsbHkKK2lnbm9yZXMgdGhlIGV4dGVybmFsIHB5dGVzdC1jYWNo
ZQorIiIiCisKK2ltcG9ydCBweQoraW1wb3J0IHB5dGVzdAoraW1wb3J0IGpzb24KK2Zyb20gb3Mu
cGF0aCBpbXBvcnQgc2VwIGFzIF9zZXAsIGFsdHNlcCBhcyBfYWx0c2VwCisKKworY2xhc3MgQ2Fj
aGUob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29uZmlnKToKKyAgICAgICAgc2Vs
Zi5jb25maWcgPSBjb25maWcKKyAgICAgICAgc2VsZi5fY2FjaGVkaXIgPSBjb25maWcucm9vdGRp
ci5qb2luKCIuY2FjaGUiKQorICAgICAgICBzZWxmLnRyYWNlID0gY29uZmlnLnRyYWNlLnJvb3Qu
Z2V0KCJjYWNoZSIpCisgICAgICAgIGlmIGNvbmZpZy5nZXR2YWx1ZSgiY2FjaGVjbGVhciIpOgor
ICAgICAgICAgICAgc2VsZi50cmFjZSgiY2xlYXJpbmcgY2FjaGVkaXIiKQorICAgICAgICAgICAg
aWYgc2VsZi5fY2FjaGVkaXIuY2hlY2soKToKKyAgICAgICAgICAgICAgICBzZWxmLl9jYWNoZWRp
ci5yZW1vdmUoKQorICAgICAgICAgICAgc2VsZi5fY2FjaGVkaXIubWtkaXIoKQorCisgICAgZGVm
IG1ha2VkaXIoc2VsZiwgbmFtZSk6CisgICAgICAgICIiIiByZXR1cm4gYSBkaXJlY3RvcnkgcGF0
aCBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4gIElmIHRoZQorICAgICAgICBkaXJlY3Rvcnkg
ZG9lcyBub3QgeWV0IGV4aXN0LCBpdCB3aWxsIGJlIGNyZWF0ZWQuICBZb3UgY2FuIHVzZSBpdAor
ICAgICAgICB0byBtYW5hZ2UgZmlsZXMgbGlrZXMgZS4gZy4gc3RvcmUvcmV0cmlldmUgZGF0YWJh
c2UKKyAgICAgICAgZHVtcHMgYWNyb3NzIHRlc3Qgc2Vzc2lvbnMuCisKKyAgICAgICAgOnBhcmFt
IG5hbWU6IG11c3QgYmUgYSBzdHJpbmcgbm90IGNvbnRhaW5pbmcgYSBgYC9gYCBzZXBhcmF0b3Iu
CisgICAgICAgICAgICAgTWFrZSBzdXJlIHRoZSBuYW1lIGNvbnRhaW5zIHlvdXIgcGx1Z2luIG9y
IGFwcGxpY2F0aW9uCisgICAgICAgICAgICAgaWRlbnRpZmllcnMgdG8gcHJldmVudCBjbGFzaGVz
IHdpdGggb3RoZXIgY2FjaGUgdXNlcnMuCisgICAgICAgICIiIgorICAgICAgICBpZiBfc2VwIGlu
IG5hbWUgb3IgX2FsdHNlcCBpcyBub3QgTm9uZSBhbmQgX2FsdHNlcCBpbiBuYW1lOgorICAgICAg
ICAgICAgcmFpc2UgVmFsdWVFcnJvcigibmFtZSBpcyBub3QgYWxsb3dlZCB0byBjb250YWluIHBh
dGggc2VwYXJhdG9ycyIpCisgICAgICAgIHJldHVybiBzZWxmLl9jYWNoZWRpci5lbnN1cmVfZGly
KCJkIiwgbmFtZSkKKworICAgIGRlZiBfZ2V0dmFsdWVwYXRoKHNlbGYsIGtleSk6CisgICAgICAg
IHJldHVybiBzZWxmLl9jYWNoZWRpci5qb2luKCd2JywgKmtleS5zcGxpdCgnLycpKQorCisgICAg
ZGVmIGdldChzZWxmLCBrZXksIGRlZmF1bHQpOgorICAgICAgICAiIiIgcmV0dXJuIGNhY2hlZCB2
YWx1ZSBmb3IgdGhlIGdpdmVuIGtleS4gIElmIG5vIHZhbHVlCisgICAgICAgIHdhcyB5ZXQgY2Fj
aGVkIG9yIHRoZSB2YWx1ZSBjYW5ub3QgYmUgcmVhZCwgdGhlIHNwZWNpZmllZAorICAgICAgICBk
ZWZhdWx0IGlzIHJldHVybmVkLgorCisgICAgICAgIDpwYXJhbSBrZXk6IG11c3QgYmUgYSBgYC9g
YCBzZXBhcmF0ZWQgdmFsdWUuIFVzdWFsbHkgdGhlIGZpcnN0CisgICAgICAgICAgICAgbmFtZSBp
cyB0aGUgbmFtZSBvZiB5b3VyIHBsdWdpbiBvciB5b3VyIGFwcGxpY2F0aW9uLgorICAgICAgICA6
cGFyYW0gZGVmYXVsdDogbXVzdCBiZSBwcm92aWRlZCBpbiBjYXNlIG9mIGEgY2FjaGUtbWlzcyBv
cgorICAgICAgICAgICAgIGludmFsaWQgY2FjaGUgdmFsdWVzLgorCisgICAgICAgICIiIgorICAg
ICAgICBwYXRoID0gc2VsZi5fZ2V0dmFsdWVwYXRoKGtleSkKKyAgICAgICAgaWYgcGF0aC5jaGVj
aygpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdpdGggcGF0aC5vcGVuKCJy
IikgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpzb24ubG9hZChmKQorICAgICAg
ICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgc2VsZi50cmFjZSgiY2Fj
aGUtaW52YWxpZCBhdCAlcyIgJSAocGF0aCwpKQorICAgICAgICByZXR1cm4gZGVmYXVsdAorCisg
ICAgZGVmIHNldChzZWxmLCBrZXksIHZhbHVlKToKKyAgICAgICAgIiIiIHNhdmUgdmFsdWUgZm9y
IHRoZSBnaXZlbiBrZXkuCisKKyAgICAgICAgOnBhcmFtIGtleTogbXVzdCBiZSBhIGBgL2BgIHNl
cGFyYXRlZCB2YWx1ZS4gVXN1YWxseSB0aGUgZmlyc3QKKyAgICAgICAgICAgICBuYW1lIGlzIHRo
ZSBuYW1lIG9mIHlvdXIgcGx1Z2luIG9yIHlvdXIgYXBwbGljYXRpb24uCisgICAgICAgIDpwYXJh
bSB2YWx1ZTogbXVzdCBiZSBvZiBhbnkgY29tYmluYXRpb24gb2YgYmFzaWMKKyAgICAgICAgICAg
ICAgIHB5dGhvbiB0eXBlcywgaW5jbHVkaW5nIG5lc3RlZCB0eXBlcworICAgICAgICAgICAgICAg
bGlrZSBlLiBnLiBsaXN0cyBvZiBkaWN0aW9uYXJpZXMuCisgICAgICAgICIiIgorICAgICAgICBw
YXRoID0gc2VsZi5fZ2V0dmFsdWVwYXRoKGtleSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAg
cGF0aC5kaXJwYXRoKCkuZW5zdXJlX2RpcigpCisgICAgICAgIGV4Y2VwdCAocHkuZXJyb3IuRUVY
SVNULCBweS5lcnJvci5FQUNDRVMpOgorICAgICAgICAgICAgc2VsZi5jb25maWcud2FybigKKyAg
ICAgICAgICAgICAgICBjb2RlPSdJOScsIG1lc3NhZ2U9J2NvdWxkIG5vdCBjcmVhdGUgY2FjaGUg
cGF0aCAlcycgJSAocGF0aCwpCisgICAgICAgICAgICApCisgICAgICAgICAgICByZXR1cm4KKyAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgZiA9IHBhdGgub3BlbigndycpCisgICAgICAgIGV4Y2Vw
dCBweS5lcnJvci5FTk9URElSOgorICAgICAgICAgICAgc2VsZi5jb25maWcud2FybigKKyAgICAg
ICAgICAgICAgICBjb2RlPSdJOScsIG1lc3NhZ2U9J2NhY2hlIGNvdWxkIG5vdCB3cml0ZSBwYXRo
ICVzJyAlIChwYXRoLCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB3aXRoIGY6CisgICAg
ICAgICAgICAgICAgc2VsZi50cmFjZSgiY2FjaGUtd3JpdGUgJXM6ICVyIiAlIChrZXksIHZhbHVl
LCkpCisgICAgICAgICAgICAgICAganNvbi5kdW1wKHZhbHVlLCBmLCBpbmRlbnQ9Miwgc29ydF9r
ZXlzPVRydWUpCisKKworY2xhc3MgTEZQbHVnaW46CisgICAgIiIiIFBsdWdpbiB3aGljaCBpbXBs
ZW1lbnRzIHRoZSAtLWxmIChydW4gbGFzdC1mYWlsaW5nKSBvcHRpb24gIiIiCisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIGNvbmZpZyk6CisgICAgICAgIHNlbGYuY29uZmlnID0gY29uZmlnCisgICAg
ICAgIGFjdGl2ZV9rZXlzID0gJ2xmJywgJ2ZhaWxlZGZpcnN0JworICAgICAgICBzZWxmLmFjdGl2
ZSA9IGFueShjb25maWcuZ2V0dmFsdWUoa2V5KSBmb3Iga2V5IGluIGFjdGl2ZV9rZXlzKQorICAg
ICAgICBpZiBzZWxmLmFjdGl2ZToKKyAgICAgICAgICAgIHNlbGYubGFzdGZhaWxlZCA9IGNvbmZp
Zy5jYWNoZS5nZXQoImNhY2hlL2xhc3RmYWlsZWQiLCB7fSkKKyAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgIHNlbGYubGFzdGZhaWxlZCA9IHt9CisKKyAgICBkZWYgcHl0ZXN0X3JlcG9ydF9oZWFk
ZXIoc2VsZik6CisgICAgICAgIGlmIHNlbGYuYWN0aXZlOgorICAgICAgICAgICAgaWYgbm90IHNl
bGYubGFzdGZhaWxlZDoKKyAgICAgICAgICAgICAgICBtb2RlID0gInJ1biBhbGwgKG5vIHJlY29y
ZGVkIGZhaWx1cmVzKSIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbW9kZSA9
ICJyZXJ1biBsYXN0ICVkIGZhaWx1cmVzJXMiICUgKAorICAgICAgICAgICAgICAgICAgICBsZW4o
c2VsZi5sYXN0ZmFpbGVkKSwKKyAgICAgICAgICAgICAgICAgICAgIiBmaXJzdCIgaWYgc2VsZi5j
b25maWcuZ2V0dmFsdWUoImZhaWxlZGZpcnN0IikgZWxzZSAiIikKKyAgICAgICAgICAgIHJldHVy
biAicnVuLWxhc3QtZmFpbHVyZTogJXMiICUgbW9kZQorCisgICAgZGVmIHB5dGVzdF9ydW50ZXN0
X2xvZ3JlcG9ydChzZWxmLCByZXBvcnQpOgorICAgICAgICBpZiByZXBvcnQuZmFpbGVkIGFuZCAi
eGZhaWwiIG5vdCBpbiByZXBvcnQua2V5d29yZHM6CisgICAgICAgICAgICBzZWxmLmxhc3RmYWls
ZWRbcmVwb3J0Lm5vZGVpZF0gPSBUcnVlCisgICAgICAgIGVsaWYgbm90IHJlcG9ydC5mYWlsZWQ6
CisgICAgICAgICAgICBpZiByZXBvcnQud2hlbiA9PSAiY2FsbCI6CisgICAgICAgICAgICAgICAg
c2VsZi5sYXN0ZmFpbGVkLnBvcChyZXBvcnQubm9kZWlkLCBOb25lKQorCisgICAgZGVmIHB5dGVz
dF9jb2xsZWN0cmVwb3J0KHNlbGYsIHJlcG9ydCk6CisgICAgICAgIHBhc3NlZCA9IHJlcG9ydC5v
dXRjb21lIGluICgncGFzc2VkJywgJ3NraXBwZWQnKQorICAgICAgICBpZiBwYXNzZWQ6CisgICAg
ICAgICAgICBpZiByZXBvcnQubm9kZWlkIGluIHNlbGYubGFzdGZhaWxlZDoKKyAgICAgICAgICAg
ICAgICBzZWxmLmxhc3RmYWlsZWQucG9wKHJlcG9ydC5ub2RlaWQpCisgICAgICAgICAgICAgICAg
c2VsZi5sYXN0ZmFpbGVkLnVwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgKGl0ZW0ubm9kZWlk
LCBUcnVlKQorICAgICAgICAgICAgICAgICAgICBmb3IgaXRlbSBpbiByZXBvcnQucmVzdWx0KQor
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5sYXN0ZmFpbGVkW3JlcG9ydC5ub2RlaWRd
ID0gVHJ1ZQorCisgICAgZGVmIHB5dGVzdF9jb2xsZWN0aW9uX21vZGlmeWl0ZW1zKHNlbGYsIHNl
c3Npb24sIGNvbmZpZywgaXRlbXMpOgorICAgICAgICBpZiBzZWxmLmFjdGl2ZSBhbmQgc2VsZi5s
YXN0ZmFpbGVkOgorICAgICAgICAgICAgcHJldmlvdXNseV9mYWlsZWQgPSBbXQorICAgICAgICAg
ICAgcHJldmlvdXNseV9wYXNzZWQgPSBbXQorICAgICAgICAgICAgZm9yIGl0ZW0gaW4gaXRlbXM6
CisgICAgICAgICAgICAgICAgaWYgaXRlbS5ub2RlaWQgaW4gc2VsZi5sYXN0ZmFpbGVkOgorICAg
ICAgICAgICAgICAgICAgICBwcmV2aW91c2x5X2ZhaWxlZC5hcHBlbmQoaXRlbSkKKyAgICAgICAg
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBwcmV2aW91c2x5X3Bhc3NlZC5hcHBl
bmQoaXRlbSkKKyAgICAgICAgICAgIGlmIG5vdCBwcmV2aW91c2x5X2ZhaWxlZCBhbmQgcHJldmlv
dXNseV9wYXNzZWQ6CisgICAgICAgICAgICAgICAgIyBydW5uaW5nIGEgc3Vic2V0IG9mIGFsbCB0
ZXN0cyB3aXRoIHJlY29yZGVkIGZhaWx1cmVzIG91dHNpZGUKKyAgICAgICAgICAgICAgICAjIG9m
IHRoZSBzZXQgb2YgdGVzdHMgY3VycmVudGx5IGV4ZWN1dGluZworICAgICAgICAgICAgICAgIHBh
c3MKKyAgICAgICAgICAgIGVsaWYgc2VsZi5jb25maWcuZ2V0dmFsdWUoImZhaWxlZGZpcnN0Iik6
CisgICAgICAgICAgICAgICAgaXRlbXNbOl0gPSBwcmV2aW91c2x5X2ZhaWxlZCArIHByZXZpb3Vz
bHlfcGFzc2VkCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGl0ZW1zWzpdID0g
cHJldmlvdXNseV9mYWlsZWQKKyAgICAgICAgICAgICAgICBjb25maWcuaG9vay5weXRlc3RfZGVz
ZWxlY3RlZChpdGVtcz1wcmV2aW91c2x5X3Bhc3NlZCkKKworICAgIGRlZiBweXRlc3Rfc2Vzc2lv
bmZpbmlzaChzZWxmLCBzZXNzaW9uKToKKyAgICAgICAgY29uZmlnID0gc2VsZi5jb25maWcKKyAg
ICAgICAgaWYgY29uZmlnLmdldHZhbHVlKCJjYWNoZXNob3ciKSBvciBoYXNhdHRyKGNvbmZpZywg
InNsYXZlaW5wdXQiKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBwcmV2X2ZhaWxlZCA9
IGNvbmZpZy5jYWNoZS5nZXQoImNhY2hlL2xhc3RmYWlsZWQiLCBOb25lKSBpcyBub3QgTm9uZQor
ICAgICAgICBpZiAoc2Vzc2lvbi50ZXN0c2NvbGxlY3RlZCBhbmQgcHJldl9mYWlsZWQpIG9yIHNl
bGYubGFzdGZhaWxlZDoKKyAgICAgICAgICAgIGNvbmZpZy5jYWNoZS5zZXQoImNhY2hlL2xhc3Rm
YWlsZWQiLCBzZWxmLmxhc3RmYWlsZWQpCisKKworZGVmIHB5dGVzdF9hZGRvcHRpb24ocGFyc2Vy
KToKKyAgICBncm91cCA9IHBhcnNlci5nZXRncm91cCgiZ2VuZXJhbCIpCisgICAgZ3JvdXAuYWRk
b3B0aW9uKAorICAgICAgICAnLS1sZicsICctLWxhc3QtZmFpbGVkJywgYWN0aW9uPSdzdG9yZV90
cnVlJywgZGVzdD0ibGYiLAorICAgICAgICBoZWxwPSJyZXJ1biBvbmx5IHRoZSB0ZXN0cyB0aGF0
IGZhaWxlZCAiCisgICAgICAgICAgICAgImF0IHRoZSBsYXN0IHJ1biAob3IgYWxsIGlmIG5vbmUg
ZmFpbGVkKSIpCisgICAgZ3JvdXAuYWRkb3B0aW9uKAorICAgICAgICAnLS1mZicsICctLWZhaWxl
ZC1maXJzdCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlc3Q9ImZhaWxlZGZpcnN0IiwKKyAgICAg
ICAgaGVscD0icnVuIGFsbCB0ZXN0cyBidXQgcnVuIHRoZSBsYXN0IGZhaWx1cmVzIGZpcnN0LiAg
IgorICAgICAgICAgICAgICJUaGlzIG1heSByZS1vcmRlciB0ZXN0cyBhbmQgdGh1cyBsZWFkIHRv
ICIKKyAgICAgICAgICAgICAicmVwZWF0ZWQgZml4dHVyZSBzZXR1cC90ZWFyZG93biIpCisgICAg
Z3JvdXAuYWRkb3B0aW9uKAorICAgICAgICAnLS1jYWNoZS1zaG93JywgYWN0aW9uPSdzdG9yZV90
cnVlJywgZGVzdD0iY2FjaGVzaG93IiwKKyAgICAgICAgaGVscD0ic2hvdyBjYWNoZSBjb250ZW50
cywgZG9uJ3QgcGVyZm9ybSBjb2xsZWN0aW9uIG9yIHRlc3RzIikKKyAgICBncm91cC5hZGRvcHRp
b24oCisgICAgICAgICctLWNhY2hlLWNsZWFyJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVzdD0i
Y2FjaGVjbGVhciIsCisgICAgICAgIGhlbHA9InJlbW92ZSBhbGwgY2FjaGUgY29udGVudHMgYXQg
c3RhcnQgb2YgdGVzdCBydW4uIikKKworCitkZWYgcHl0ZXN0X2NtZGxpbmVfbWFpbihjb25maWcp
OgorICAgIGlmIGNvbmZpZy5vcHRpb24uY2FjaGVzaG93OgorICAgICAgICBmcm9tIF9weXRlc3Qu
bWFpbiBpbXBvcnQgd3JhcF9zZXNzaW9uCisgICAgICAgIHJldHVybiB3cmFwX3Nlc3Npb24oY29u
ZmlnLCBjYWNoZXNob3cpCisKKworCitAcHl0ZXN0Lmhvb2tpbXBsKHRyeWZpcnN0PVRydWUpCitk
ZWYgcHl0ZXN0X2NvbmZpZ3VyZShjb25maWcpOgorICAgIGNvbmZpZy5jYWNoZSA9IENhY2hlKGNv
bmZpZykKKyAgICBjb25maWcucGx1Z2lubWFuYWdlci5yZWdpc3RlcihMRlBsdWdpbihjb25maWcp
LCAibGZwbHVnaW4iKQorCisKK0BweXRlc3QuZml4dHVyZQorZGVmIGNhY2hlKHJlcXVlc3QpOgor
ICAgICIiIgorICAgIFJldHVybiBhIGNhY2hlIG9iamVjdCB0aGF0IGNhbiBwZXJzaXN0IHN0YXRl
IGJldHdlZW4gdGVzdGluZyBzZXNzaW9ucy4KKworICAgIGNhY2hlLmdldChrZXksIGRlZmF1bHQp
CisgICAgY2FjaGUuc2V0KGtleSwgdmFsdWUpCisKKyAgICBLZXlzIG11c3QgYmUgYSBgYC9gYCBz
ZXBhcmF0ZWQgdmFsdWUsIHdoZXJlIHRoZSBmaXJzdCBwYXJ0IGlzIHVzdWFsbHkgdGhlCisgICAg
bmFtZSBvZiB5b3VyIHBsdWdpbiBvciBhcHBsaWNhdGlvbiB0byBhdm9pZCBjbGFzaGVzIHdpdGgg
b3RoZXIgY2FjaGUgdXNlcnMuCisKKyAgICBWYWx1ZXMgY2FuIGJlIGFueSBvYmplY3QgaGFuZGxl
ZCBieSB0aGUganNvbiBzdGRsaWIgbW9kdWxlLgorICAgICIiIgorICAgIHJldHVybiByZXF1ZXN0
LmNvbmZpZy5jYWNoZQorCisKK2RlZiBweXRlc3RfcmVwb3J0X2hlYWRlcihjb25maWcpOgorICAg
IGlmIGNvbmZpZy5vcHRpb24udmVyYm9zZToKKyAgICAgICAgcmVscGF0aCA9IHB5LnBhdGgubG9j
YWwoKS5iZXN0cmVscGF0aChjb25maWcuY2FjaGUuX2NhY2hlZGlyKQorICAgICAgICByZXR1cm4g
ImNhY2hlZGlyOiAlcyIgJSByZWxwYXRoCisKKworZGVmIGNhY2hlc2hvdyhjb25maWcsIHNlc3Np
b24pOgorICAgIGZyb20gcHByaW50IGltcG9ydCBwcHJpbnQKKyAgICB0dyA9IHB5LmlvLlRlcm1p
bmFsV3JpdGVyKCkKKyAgICB0dy5saW5lKCJjYWNoZWRpcjogIiArIHN0cihjb25maWcuY2FjaGUu
X2NhY2hlZGlyKSkKKyAgICBpZiBub3QgY29uZmlnLmNhY2hlLl9jYWNoZWRpci5jaGVjaygpOgor
ICAgICAgICB0dy5saW5lKCJjYWNoZSBpcyBlbXB0eSIpCisgICAgICAgIHJldHVybiAwCisgICAg
ZHVtbXkgPSBvYmplY3QoKQorICAgIGJhc2VkaXIgPSBjb25maWcuY2FjaGUuX2NhY2hlZGlyCisg
ICAgdmRpciA9IGJhc2VkaXIuam9pbigidiIpCisgICAgdHcuc2VwKCItIiwgImNhY2hlIHZhbHVl
cyIpCisgICAgZm9yIHZhbHBhdGggaW4gdmRpci52aXNpdChsYW1iZGEgeDogeC5pc2ZpbGUoKSk6
CisgICAgICAgIGtleSA9IHZhbHBhdGgucmVsdG8odmRpcikucmVwbGFjZSh2YWxwYXRoLnNlcCwg
Ii8iKQorICAgICAgICB2YWwgPSBjb25maWcuY2FjaGUuZ2V0KGtleSwgZHVtbXkpCisgICAgICAg
IGlmIHZhbCBpcyBkdW1teToKKyAgICAgICAgICAgIHR3LmxpbmUoIiVzIGNvbnRhaW5zIHVucmVh
ZGFibGUgY29udGVudCwgIgorICAgICAgICAgICAgICAgICAgIndpbGwgYmUgaWdub3JlZCIgJSBr
ZXkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0dy5saW5lKCIlcyBjb250YWluczoiICUg
a2V5KQorICAgICAgICAgICAgc3RyZWFtID0gcHkuaW8uVGV4dElPKCkKKyAgICAgICAgICAgIHBw
cmludCh2YWwsIHN0cmVhbT1zdHJlYW0pCisgICAgICAgICAgICBmb3IgbGluZSBpbiBzdHJlYW0u
Z2V0dmFsdWUoKS5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICAgICAgdHcubGluZSgiICAiICsg
bGluZSkKKworICAgIGRkaXIgPSBiYXNlZGlyLmpvaW4oImQiKQorICAgIGlmIGRkaXIuaXNkaXIo
KSBhbmQgZGRpci5saXN0ZGlyKCk6CisgICAgICAgIHR3LnNlcCgiLSIsICJjYWNoZSBkaXJlY3Rv
cmllcyIpCisgICAgICAgIGZvciBwIGluIGJhc2VkaXIuam9pbigiZCIpLnZpc2l0KCk6CisgICAg
ICAgICAgICAjaWYgcC5jaGVjayhkaXI9MSk6CisgICAgICAgICAgICAjICAgIHByaW50KCIlcy8i
ICUgcC5yZWx0byhiYXNlZGlyKSkKKyAgICAgICAgICAgIGlmIHAuaXNmaWxlKCk6CisgICAgICAg
ICAgICAgICAga2V5ID0gcC5yZWx0byhiYXNlZGlyKQorICAgICAgICAgICAgICAgIHR3LmxpbmUo
IiVzIGlzIGEgZmlsZSBvZiBsZW5ndGggJWQiICUgKAorICAgICAgICAgICAgICAgICAgICAgICAg
a2V5LCBwLnNpemUoKSkpCisgICAgcmV0dXJuIDAKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3Rz
L2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9jYXB0dXJlLnB5IGIvV2ViRHJpdmVy
VGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L2NhcHR1cmUucHkKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjM4OTVhNzE0YWEwCi0tLSAvZGV2L251
bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0
L2NhcHR1cmUucHkKQEAgLTAsMCArMSw0NzIgQEAKKyIiIgorcGVyLXRlc3Qgc3Rkb3V0L3N0ZGVy
ciBjYXB0dXJpbmcgbWVjaGFuaXNtLgorCisiIiIKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgd2l0
aF9zdGF0ZW1lbnQKKworaW1wb3J0IHN5cworaW1wb3J0IG9zCitmcm9tIHRlbXBmaWxlIGltcG9y
dCBUZW1wb3JhcnlGaWxlCisKK2ltcG9ydCBweQoraW1wb3J0IHB5dGVzdAorCitmcm9tIHB5Lmlv
IGltcG9ydCBUZXh0SU8KK3VuaWNvZGUgPSBweS5idWlsdGluLnRleHQKKworcGF0Y2hzeXNkaWN0
ID0gezA6ICdzdGRpbicsIDE6ICdzdGRvdXQnLCAyOiAnc3RkZXJyJ30KKworCitkZWYgcHl0ZXN0
X2FkZG9wdGlvbihwYXJzZXIpOgorICAgIGdyb3VwID0gcGFyc2VyLmdldGdyb3VwKCJnZW5lcmFs
IikKKyAgICBncm91cC5fYWRkb3B0aW9uKAorICAgICAgICAnLS1jYXB0dXJlJywgYWN0aW9uPSJz
dG9yZSIsCisgICAgICAgIGRlZmF1bHQ9ImZkIiBpZiBoYXNhdHRyKG9zLCAiZHVwIikgZWxzZSAi
c3lzIiwKKyAgICAgICAgbWV0YXZhcj0ibWV0aG9kIiwgY2hvaWNlcz1bJ2ZkJywgJ3N5cycsICdu
byddLAorICAgICAgICBoZWxwPSJwZXItdGVzdCBjYXB0dXJpbmcgbWV0aG9kOiBvbmUgb2YgZmR8
c3lzfG5vLiIpCisgICAgZ3JvdXAuX2FkZG9wdGlvbigKKyAgICAgICAgJy1zJywgYWN0aW9uPSJz
dG9yZV9jb25zdCIsIGNvbnN0PSJubyIsIGRlc3Q9ImNhcHR1cmUiLAorICAgICAgICBoZWxwPSJz
aG9ydGN1dCBmb3IgLS1jYXB0dXJlPW5vLiIpCisKKworQHB5dGVzdC5ob29raW1wbChob29rd3Jh
cHBlcj1UcnVlKQorZGVmIHB5dGVzdF9sb2FkX2luaXRpYWxfY29uZnRlc3RzKGVhcmx5X2NvbmZp
ZywgcGFyc2VyLCBhcmdzKToKKyAgICBfcmVhZGxpbmVfd29ya2Fyb3VuZCgpCisgICAgbnMgPSBl
YXJseV9jb25maWcua25vd25fYXJnc19uYW1lc3BhY2UKKyAgICBwbHVnaW5tYW5hZ2VyID0gZWFy
bHlfY29uZmlnLnBsdWdpbm1hbmFnZXIKKyAgICBjYXBtYW4gPSBDYXB0dXJlTWFuYWdlcihucy5j
YXB0dXJlKQorICAgIHBsdWdpbm1hbmFnZXIucmVnaXN0ZXIoY2FwbWFuLCAiY2FwdHVyZW1hbmFn
ZXIiKQorCisgICAgIyBtYWtlIHN1cmUgdGhhdCBjYXB0dXJlbWFuYWdlciBpcyBwcm9wZXJseSBy
ZXNldCBhdCBmaW5hbCBzaHV0ZG93bgorICAgIGVhcmx5X2NvbmZpZy5hZGRfY2xlYW51cChjYXBt
YW4ucmVzZXRfY2FwdHVyaW5ncykKKworICAgICMgbWFrZSBzdXJlIGxvZ2dpbmcgZG9lcyBub3Qg
cmFpc2UgZXhjZXB0aW9ucyBhdCB0aGUgZW5kCisgICAgZGVmIHNpbGVuY2VfbG9nZ2luZ19hdF9z
aHV0ZG93bigpOgorICAgICAgICBpZiAibG9nZ2luZyIgaW4gc3lzLm1vZHVsZXM6CisgICAgICAg
ICAgICBzeXMubW9kdWxlc1sibG9nZ2luZyJdLnJhaXNlRXhjZXB0aW9ucyA9IEZhbHNlCisgICAg
ZWFybHlfY29uZmlnLmFkZF9jbGVhbnVwKHNpbGVuY2VfbG9nZ2luZ19hdF9zaHV0ZG93bikKKwor
ICAgICMgZmluYWxseSB0cmlnZ2VyIGNvbmZ0ZXN0IGxvYWRpbmcgYnV0IHdoaWxlIGNhcHR1cmlu
ZyAoaXNzdWU5MykKKyAgICBjYXBtYW4uaW5pdF9jYXB0dXJpbmdzKCkKKyAgICBvdXRjb21lID0g
eWllbGQKKyAgICBvdXQsIGVyciA9IGNhcG1hbi5zdXNwZW5kY2FwdHVyZSgpCisgICAgaWYgb3V0
Y29tZS5leGNpbmZvIGlzIG5vdCBOb25lOgorICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKG91dCkK
KyAgICAgICAgc3lzLnN0ZGVyci53cml0ZShlcnIpCisKKworY2xhc3MgQ2FwdHVyZU1hbmFnZXI6
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1ldGhvZCk6CisgICAgICAgIHNlbGYuX21ldGhvZCA9
IG1ldGhvZAorCisgICAgZGVmIF9nZXRjYXB0dXJlKHNlbGYsIG1ldGhvZCk6CisgICAgICAgIGlm
IG1ldGhvZCA9PSAiZmQiOgorICAgICAgICAgICAgcmV0dXJuIE11bHRpQ2FwdHVyZShvdXQ9VHJ1
ZSwgZXJyPVRydWUsIENhcHR1cmU9RkRDYXB0dXJlKQorICAgICAgICBlbGlmIG1ldGhvZCA9PSAi
c3lzIjoKKyAgICAgICAgICAgIHJldHVybiBNdWx0aUNhcHR1cmUob3V0PVRydWUsIGVycj1UcnVl
LCBDYXB0dXJlPVN5c0NhcHR1cmUpCisgICAgICAgIGVsaWYgbWV0aG9kID09ICJubyI6CisgICAg
ICAgICAgICByZXR1cm4gTXVsdGlDYXB0dXJlKG91dD1GYWxzZSwgZXJyPUZhbHNlLCBpbl89RmFs
c2UpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bmtub3du
IGNhcHR1cmluZyBtZXRob2Q6ICVyIiAlIG1ldGhvZCkKKworICAgIGRlZiBpbml0X2NhcHR1cmlu
Z3Moc2VsZik6CisgICAgICAgIGFzc2VydCBub3QgaGFzYXR0cihzZWxmLCAiX2NhcHR1cmluZyIp
CisgICAgICAgIHNlbGYuX2NhcHR1cmluZyA9IHNlbGYuX2dldGNhcHR1cmUoc2VsZi5fbWV0aG9k
KQorICAgICAgICBzZWxmLl9jYXB0dXJpbmcuc3RhcnRfY2FwdHVyaW5nKCkKKworICAgIGRlZiBy
ZXNldF9jYXB0dXJpbmdzKHNlbGYpOgorICAgICAgICBjYXAgPSBzZWxmLl9fZGljdF9fLnBvcCgi
X2NhcHR1cmluZyIsIE5vbmUpCisgICAgICAgIGlmIGNhcCBpcyBub3QgTm9uZToKKyAgICAgICAg
ICAgIGNhcC5wb3Bfb3V0ZXJyX3RvX29yaWcoKQorICAgICAgICAgICAgY2FwLnN0b3BfY2FwdHVy
aW5nKCkKKworICAgIGRlZiByZXN1bWVjYXB0dXJlKHNlbGYpOgorICAgICAgICBzZWxmLl9jYXB0
dXJpbmcucmVzdW1lX2NhcHR1cmluZygpCisKKyAgICBkZWYgc3VzcGVuZGNhcHR1cmUoc2VsZiwg
aW5fPUZhbHNlKToKKyAgICAgICAgc2VsZi5kZWFjdGl2YXRlX2Z1bmNhcmdzKCkKKyAgICAgICAg
Y2FwID0gZ2V0YXR0cihzZWxmLCAiX2NhcHR1cmluZyIsIE5vbmUpCisgICAgICAgIGlmIGNhcCBp
cyBub3QgTm9uZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvdXRlcnIgPSBj
YXAucmVhZG91dGVycigpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGNh
cC5zdXNwZW5kX2NhcHR1cmluZyhpbl89aW5fKQorICAgICAgICAgICAgcmV0dXJuIG91dGVycgor
CisgICAgZGVmIGFjdGl2YXRlX2Z1bmNhcmdzKHNlbGYsIHB5ZnVuY2l0ZW0pOgorICAgICAgICBj
YXBmdW5jYXJnID0gcHlmdW5jaXRlbS5fX2RpY3RfXy5wb3AoIl9jYXBmdW5jYXJnIiwgTm9uZSkK
KyAgICAgICAgaWYgY2FwZnVuY2FyZyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGNhcGZ1bmNh
cmcuX3N0YXJ0KCkKKyAgICAgICAgICAgIHNlbGYuX2NhcGZ1bmNhcmcgPSBjYXBmdW5jYXJnCisK
KyAgICBkZWYgZGVhY3RpdmF0ZV9mdW5jYXJncyhzZWxmKToKKyAgICAgICAgY2FwZnVuY2FyZyA9
IHNlbGYuX19kaWN0X18ucG9wKCJfY2FwZnVuY2FyZyIsIE5vbmUpCisgICAgICAgIGlmIGNhcGZ1
bmNhcmcgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBjYXBmdW5jYXJnLmNsb3NlKCkKKworICAg
IEBweXRlc3QuaG9va2ltcGwoaG9va3dyYXBwZXI9VHJ1ZSkKKyAgICBkZWYgcHl0ZXN0X21ha2Vf
Y29sbGVjdF9yZXBvcnQoc2VsZiwgY29sbGVjdG9yKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShj
b2xsZWN0b3IsIHB5dGVzdC5GaWxlKToKKyAgICAgICAgICAgIHNlbGYucmVzdW1lY2FwdHVyZSgp
CisgICAgICAgICAgICBvdXRjb21lID0geWllbGQKKyAgICAgICAgICAgIG91dCwgZXJyID0gc2Vs
Zi5zdXNwZW5kY2FwdHVyZSgpCisgICAgICAgICAgICByZXAgPSBvdXRjb21lLmdldF9yZXN1bHQo
KQorICAgICAgICAgICAgaWYgb3V0OgorICAgICAgICAgICAgICAgIHJlcC5zZWN0aW9ucy5hcHBl
bmQoKCJDYXB0dXJlZCBzdGRvdXQiLCBvdXQpKQorICAgICAgICAgICAgaWYgZXJyOgorICAgICAg
ICAgICAgICAgIHJlcC5zZWN0aW9ucy5hcHBlbmQoKCJDYXB0dXJlZCBzdGRlcnIiLCBlcnIpKQor
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgeWllbGQKKworICAgIEBweXRlc3QuaG9va2ltcGwo
aG9va3dyYXBwZXI9VHJ1ZSkKKyAgICBkZWYgcHl0ZXN0X3J1bnRlc3Rfc2V0dXAoc2VsZiwgaXRl
bSk6CisgICAgICAgIHNlbGYucmVzdW1lY2FwdHVyZSgpCisgICAgICAgIHlpZWxkCisgICAgICAg
IHNlbGYuc3VzcGVuZGNhcHR1cmVfaXRlbShpdGVtLCAic2V0dXAiKQorCisgICAgQHB5dGVzdC5o
b29raW1wbChob29rd3JhcHBlcj1UcnVlKQorICAgIGRlZiBweXRlc3RfcnVudGVzdF9jYWxsKHNl
bGYsIGl0ZW0pOgorICAgICAgICBzZWxmLnJlc3VtZWNhcHR1cmUoKQorICAgICAgICBzZWxmLmFj
dGl2YXRlX2Z1bmNhcmdzKGl0ZW0pCisgICAgICAgIHlpZWxkCisgICAgICAgICNzZWxmLmRlYWN0
aXZhdGVfZnVuY2FyZ3MoKSBjYWxsZWQgZnJvbSBzdXNwZW5kY2FwdHVyZSgpCisgICAgICAgIHNl
bGYuc3VzcGVuZGNhcHR1cmVfaXRlbShpdGVtLCAiY2FsbCIpCisKKyAgICBAcHl0ZXN0Lmhvb2tp
bXBsKGhvb2t3cmFwcGVyPVRydWUpCisgICAgZGVmIHB5dGVzdF9ydW50ZXN0X3RlYXJkb3duKHNl
bGYsIGl0ZW0pOgorICAgICAgICBzZWxmLnJlc3VtZWNhcHR1cmUoKQorICAgICAgICB5aWVsZAor
ICAgICAgICBzZWxmLnN1c3BlbmRjYXB0dXJlX2l0ZW0oaXRlbSwgInRlYXJkb3duIikKKworICAg
IEBweXRlc3QuaG9va2ltcGwodHJ5Zmlyc3Q9VHJ1ZSkKKyAgICBkZWYgcHl0ZXN0X2tleWJvYXJk
X2ludGVycnVwdChzZWxmLCBleGNpbmZvKToKKyAgICAgICAgc2VsZi5yZXNldF9jYXB0dXJpbmdz
KCkKKworICAgIEBweXRlc3QuaG9va2ltcGwodHJ5Zmlyc3Q9VHJ1ZSkKKyAgICBkZWYgcHl0ZXN0
X2ludGVybmFsZXJyb3Ioc2VsZiwgZXhjaW5mbyk6CisgICAgICAgIHNlbGYucmVzZXRfY2FwdHVy
aW5ncygpCisKKyAgICBkZWYgc3VzcGVuZGNhcHR1cmVfaXRlbShzZWxmLCBpdGVtLCB3aGVuKToK
KyAgICAgICAgb3V0LCBlcnIgPSBzZWxmLnN1c3BlbmRjYXB0dXJlKCkKKyAgICAgICAgaXRlbS5h
ZGRfcmVwb3J0X3NlY3Rpb24od2hlbiwgInN0ZG91dCIsIG91dCkKKyAgICAgICAgaXRlbS5hZGRf
cmVwb3J0X3NlY3Rpb24od2hlbiwgInN0ZGVyciIsIGVycikKKworZXJyb3JfY2Fwc3lzZmRlcnJv
ciA9ICJjYW5ub3QgdXNlIGNhcHN5cyBhbmQgY2FwZmQgYXQgdGhlIHNhbWUgdGltZSIKKworCitA
cHl0ZXN0LmZpeHR1cmUKK2RlZiBjYXBzeXMocmVxdWVzdCk6CisgICAgIiIiZW5hYmxlcyBjYXB0
dXJpbmcgb2Ygd3JpdGVzIHRvIHN5cy5zdGRvdXQvc3lzLnN0ZGVyciBhbmQgbWFrZXMKKyAgICBj
YXB0dXJlZCBvdXRwdXQgYXZhaWxhYmxlIHZpYSBgYGNhcHN5cy5yZWFkb3V0ZXJyKClgYCBtZXRo
b2QgY2FsbHMKKyAgICB3aGljaCByZXR1cm4gYSBgYChvdXQsIGVycilgYCB0dXBsZS4KKyAgICAi
IiIKKyAgICBpZiAiY2FwZmQiIGluIHJlcXVlc3QuX2Z1bmNhcmdzOgorICAgICAgICByYWlzZSBy
ZXF1ZXN0LnJhaXNlZXJyb3IoZXJyb3JfY2Fwc3lzZmRlcnJvcikKKyAgICByZXF1ZXN0Lm5vZGUu
X2NhcGZ1bmNhcmcgPSBjID0gQ2FwdHVyZUZpeHR1cmUoU3lzQ2FwdHVyZSkKKyAgICByZXR1cm4g
YworCitAcHl0ZXN0LmZpeHR1cmUKK2RlZiBjYXBmZChyZXF1ZXN0KToKKyAgICAiIiJlbmFibGVz
IGNhcHR1cmluZyBvZiB3cml0ZXMgdG8gZmlsZSBkZXNjcmlwdG9ycyAxIGFuZCAyIGFuZCBtYWtl
cworICAgIGNhcHR1cmVkIG91dHB1dCBhdmFpbGFibGUgdmlhIGBgY2FwZmQucmVhZG91dGVycigp
YGAgbWV0aG9kIGNhbGxzCisgICAgd2hpY2ggcmV0dXJuIGEgYGAob3V0LCBlcnIpYGAgdHVwbGUu
CisgICAgIiIiCisgICAgaWYgImNhcHN5cyIgaW4gcmVxdWVzdC5fZnVuY2FyZ3M6CisgICAgICAg
IHJlcXVlc3QucmFpc2VlcnJvcihlcnJvcl9jYXBzeXNmZGVycm9yKQorICAgIGlmIG5vdCBoYXNh
dHRyKG9zLCAnZHVwJyk6CisgICAgICAgIHB5dGVzdC5za2lwKCJjYXBmZCBmdW5jYXJnIG5lZWRz
IG9zLmR1cCIpCisgICAgcmVxdWVzdC5ub2RlLl9jYXBmdW5jYXJnID0gYyA9IENhcHR1cmVGaXh0
dXJlKEZEQ2FwdHVyZSkKKyAgICByZXR1cm4gYworCisKK2NsYXNzIENhcHR1cmVGaXh0dXJlOgor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjYXB0dXJlY2xhc3MpOgorICAgICAgICBzZWxmLmNhcHR1
cmVjbGFzcyA9IGNhcHR1cmVjbGFzcworCisgICAgZGVmIF9zdGFydChzZWxmKToKKyAgICAgICAg
c2VsZi5fY2FwdHVyZSA9IE11bHRpQ2FwdHVyZShvdXQ9VHJ1ZSwgZXJyPVRydWUsIGluXz1GYWxz
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhcHR1cmU9c2VsZi5j
YXB0dXJlY2xhc3MpCisgICAgICAgIHNlbGYuX2NhcHR1cmUuc3RhcnRfY2FwdHVyaW5nKCkKKwor
ICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgY2FwID0gc2VsZi5fX2RpY3RfXy5wb3AoIl9j
YXB0dXJlIiwgTm9uZSkKKyAgICAgICAgaWYgY2FwIGlzIG5vdCBOb25lOgorICAgICAgICAgICAg
c2VsZi5fb3V0ZXJyID0gY2FwLnBvcF9vdXRlcnJfdG9fb3JpZygpCisgICAgICAgICAgICBjYXAu
c3RvcF9jYXB0dXJpbmcoKQorCisgICAgZGVmIHJlYWRvdXRlcnIoc2VsZik6CisgICAgICAgIHRy
eToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9jYXB0dXJlLnJlYWRvdXRlcnIoKQorICAgICAg
ICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fb3V0ZXJy
CisKKworZGVmIHNhZmVfdGV4dF9kdXBmaWxlKGYsIG1vZGUsIGRlZmF1bHRfZW5jb2Rpbmc9IlVU
RjgiKToKKyAgICAiIiIgcmV0dXJuIGEgb3BlbiB0ZXh0IGZpbGUgb2JqZWN0IHRoYXQncyBhIGR1
cGxpY2F0ZSBvZiBmIG9uIHRoZQorICAgICAgICBGRC1sZXZlbCBpZiBwb3NzaWJsZS4KKyAgICAi
IiIKKyAgICBlbmNvZGluZyA9IGdldGF0dHIoZiwgImVuY29kaW5nIiwgTm9uZSkKKyAgICB0cnk6
CisgICAgICAgIGZkID0gZi5maWxlbm8oKQorICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAg
IGlmICJiIiBub3QgaW4gZ2V0YXR0cihmLCAibW9kZSIsICIiKSBhbmQgaGFzYXR0cihmLCAiZW5j
b2RpbmciKToKKyAgICAgICAgICAgICMgd2Ugc2VlbSB0byBoYXZlIGEgdGV4dCBzdHJlYW0sIGxl
dCdzIGp1c3QgdXNlIGl0CisgICAgICAgICAgICByZXR1cm4gZgorICAgIGVsc2U6CisgICAgICAg
IG5ld2ZkID0gb3MuZHVwKGZkKQorICAgICAgICBpZiAiYiIgbm90IGluIG1vZGU6CisgICAgICAg
ICAgICBtb2RlICs9ICJiIgorICAgICAgICBmID0gb3MuZmRvcGVuKG5ld2ZkLCBtb2RlLCAwKSAg
IyBubyBidWZmZXJpbmcKKyAgICByZXR1cm4gRW5jb2RlZEZpbGUoZiwgZW5jb2Rpbmcgb3IgZGVm
YXVsdF9lbmNvZGluZykKKworCitjbGFzcyBFbmNvZGVkRmlsZShvYmplY3QpOgorICAgIGVycm9y
cyA9ICJzdHJpY3QiICAjIHBvc3NpYmx5IG5lZWRlZCBieSBweTMgY29kZSAoaXNzdWU1NTUpCisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIGJ1ZmZlciwgZW5jb2RpbmcpOgorICAgICAgICBzZWxmLmJ1
ZmZlciA9IGJ1ZmZlcgorICAgICAgICBzZWxmLmVuY29kaW5nID0gZW5jb2RpbmcKKworICAgIGRl
ZiB3cml0ZShzZWxmLCBvYmopOgorICAgICAgICBpZiBpc2luc3RhbmNlKG9iaiwgdW5pY29kZSk6
CisgICAgICAgICAgICBvYmogPSBvYmouZW5jb2RlKHNlbGYuZW5jb2RpbmcsICJyZXBsYWNlIikK
KyAgICAgICAgc2VsZi5idWZmZXIud3JpdGUob2JqKQorCisgICAgZGVmIHdyaXRlbGluZXMoc2Vs
ZiwgbGluZWxpc3QpOgorICAgICAgICBkYXRhID0gJycuam9pbihsaW5lbGlzdCkKKyAgICAgICAg
c2VsZi53cml0ZShkYXRhKQorCisgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgorICAg
ICAgICByZXR1cm4gZ2V0YXR0cihvYmplY3QuX19nZXRhdHRyaWJ1dGVfXyhzZWxmLCAiYnVmZmVy
IiksIG5hbWUpCisKKworY2xhc3MgTXVsdGlDYXB0dXJlKG9iamVjdCk6CisgICAgb3V0ID0gZXJy
ID0gaW5fID0gTm9uZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG91dD1UcnVlLCBlcnI9VHJ1
ZSwgaW5fPVRydWUsIENhcHR1cmU9Tm9uZSk6CisgICAgICAgIGlmIGluXzoKKyAgICAgICAgICAg
IHNlbGYuaW5fID0gQ2FwdHVyZSgwKQorICAgICAgICBpZiBvdXQ6CisgICAgICAgICAgICBzZWxm
Lm91dCA9IENhcHR1cmUoMSkKKyAgICAgICAgaWYgZXJyOgorICAgICAgICAgICAgc2VsZi5lcnIg
PSBDYXB0dXJlKDIpCisKKyAgICBkZWYgc3RhcnRfY2FwdHVyaW5nKHNlbGYpOgorICAgICAgICBp
ZiBzZWxmLmluXzoKKyAgICAgICAgICAgIHNlbGYuaW5fLnN0YXJ0KCkKKyAgICAgICAgaWYgc2Vs
Zi5vdXQ6CisgICAgICAgICAgICBzZWxmLm91dC5zdGFydCgpCisgICAgICAgIGlmIHNlbGYuZXJy
OgorICAgICAgICAgICAgc2VsZi5lcnIuc3RhcnQoKQorCisgICAgZGVmIHBvcF9vdXRlcnJfdG9f
b3JpZyhzZWxmKToKKyAgICAgICAgIiIiIHBvcCBjdXJyZW50IHNuYXBzaG90IG91dC9lcnIgY2Fw
dHVyZSBhbmQgZmx1c2ggdG8gb3JpZyBzdHJlYW1zLiAiIiIKKyAgICAgICAgb3V0LCBlcnIgPSBz
ZWxmLnJlYWRvdXRlcnIoKQorICAgICAgICBpZiBvdXQ6CisgICAgICAgICAgICBzZWxmLm91dC53
cml0ZW9yZyhvdXQpCisgICAgICAgIGlmIGVycjoKKyAgICAgICAgICAgIHNlbGYuZXJyLndyaXRl
b3JnKGVycikKKyAgICAgICAgcmV0dXJuIG91dCwgZXJyCisKKyAgICBkZWYgc3VzcGVuZF9jYXB0
dXJpbmcoc2VsZiwgaW5fPUZhbHNlKToKKyAgICAgICAgaWYgc2VsZi5vdXQ6CisgICAgICAgICAg
ICBzZWxmLm91dC5zdXNwZW5kKCkKKyAgICAgICAgaWYgc2VsZi5lcnI6CisgICAgICAgICAgICBz
ZWxmLmVyci5zdXNwZW5kKCkKKyAgICAgICAgaWYgaW5fIGFuZCBzZWxmLmluXzoKKyAgICAgICAg
ICAgIHNlbGYuaW5fLnN1c3BlbmQoKQorICAgICAgICAgICAgc2VsZi5faW5fc3VzcGVuZGVkID0g
VHJ1ZQorCisgICAgZGVmIHJlc3VtZV9jYXB0dXJpbmcoc2VsZik6CisgICAgICAgIGlmIHNlbGYu
b3V0OgorICAgICAgICAgICAgc2VsZi5vdXQucmVzdW1lKCkKKyAgICAgICAgaWYgc2VsZi5lcnI6
CisgICAgICAgICAgICBzZWxmLmVyci5yZXN1bWUoKQorICAgICAgICBpZiBoYXNhdHRyKHNlbGYs
ICJfaW5fc3VzcGVuZGVkIik6CisgICAgICAgICAgICBzZWxmLmluXy5yZXN1bWUoKQorICAgICAg
ICAgICAgZGVsIHNlbGYuX2luX3N1c3BlbmRlZAorCisgICAgZGVmIHN0b3BfY2FwdHVyaW5nKHNl
bGYpOgorICAgICAgICAiIiIgc3RvcCBjYXB0dXJpbmcgYW5kIHJlc2V0IGNhcHR1cmluZyBzdHJl
YW1zICIiIgorICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICdfcmVzZXQnKToKKyAgICAgICAgICAg
IHJhaXNlIFZhbHVlRXJyb3IoIndhcyBhbHJlYWR5IHN0b3BwZWQiKQorICAgICAgICBzZWxmLl9y
ZXNldCA9IFRydWUKKyAgICAgICAgaWYgc2VsZi5vdXQ6CisgICAgICAgICAgICBzZWxmLm91dC5k
b25lKCkKKyAgICAgICAgaWYgc2VsZi5lcnI6CisgICAgICAgICAgICBzZWxmLmVyci5kb25lKCkK
KyAgICAgICAgaWYgc2VsZi5pbl86CisgICAgICAgICAgICBzZWxmLmluXy5kb25lKCkKKworICAg
IGRlZiByZWFkb3V0ZXJyKHNlbGYpOgorICAgICAgICAiIiIgcmV0dXJuIHNuYXBzaG90IHVuaWNv
ZGUgdmFsdWUgb2Ygc3Rkb3V0L3N0ZGVyciBjYXB0dXJpbmdzLiAiIiIKKyAgICAgICAgcmV0dXJu
IChzZWxmLm91dC5zbmFwKCkgaWYgc2VsZi5vdXQgaXMgbm90IE5vbmUgZWxzZSAiIiwKKyAgICAg
ICAgICAgICAgICBzZWxmLmVyci5zbmFwKCkgaWYgc2VsZi5lcnIgaXMgbm90IE5vbmUgZWxzZSAi
IikKKworY2xhc3MgTm9DYXB0dXJlOgorICAgIF9faW5pdF9fID0gc3RhcnQgPSBkb25lID0gc3Vz
cGVuZCA9IHJlc3VtZSA9IGxhbWJkYSAqYXJnczogTm9uZQorCitjbGFzcyBGRENhcHR1cmU6Cisg
ICAgIiIiIENhcHR1cmUgSU8gdG8vZnJvbSBhIGdpdmVuIG9zLWxldmVsIGZpbGVkZXNjcmlwdG9y
LiAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0YXJnZXRmZCwgdG1wZmlsZT1Ob25lKToK
KyAgICAgICAgc2VsZi50YXJnZXRmZCA9IHRhcmdldGZkCisgICAgICAgIHRyeToKKyAgICAgICAg
ICAgIHNlbGYudGFyZ2V0ZmRfc2F2ZSA9IG9zLmR1cChzZWxmLnRhcmdldGZkKQorICAgICAgICBl
eGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuc3RhcnQgPSBsYW1iZGE6IE5vbmUKKyAg
ICAgICAgICAgIHNlbGYuZG9uZSA9IGxhbWJkYTogTm9uZQorICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgaWYgdGFyZ2V0ZmQgPT0gMDoKKyAgICAgICAgICAgICAgICBhc3NlcnQgbm90IHRtcGZp
bGUsICJjYW5ub3Qgc2V0IHRtcGZpbGUgd2l0aCBzdGRpbiIKKyAgICAgICAgICAgICAgICB0bXBm
aWxlID0gb3Blbihvcy5kZXZudWxsLCAiciIpCisgICAgICAgICAgICAgICAgc2VsZi5zeXNjYXB0
dXJlID0gU3lzQ2FwdHVyZSh0YXJnZXRmZCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICAgICAgaWYgdG1wZmlsZSBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBmID0gVGVtcG9y
YXJ5RmlsZSgpCisgICAgICAgICAgICAgICAgICAgIHdpdGggZjoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRtcGZpbGUgPSBzYWZlX3RleHRfZHVwZmlsZShmLCBtb2RlPSJ3YisiKQorICAgICAg
ICAgICAgICAgIGlmIHRhcmdldGZkIGluIHBhdGNoc3lzZGljdDoKKyAgICAgICAgICAgICAgICAg
ICAgc2VsZi5zeXNjYXB0dXJlID0gU3lzQ2FwdHVyZSh0YXJnZXRmZCwgdG1wZmlsZSkKKyAgICAg
ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnN5c2NhcHR1cmUgPSBO
b0NhcHR1cmUoKQorICAgICAgICAgICAgc2VsZi50bXBmaWxlID0gdG1wZmlsZQorICAgICAgICAg
ICAgc2VsZi50bXBmaWxlX2ZkID0gdG1wZmlsZS5maWxlbm8oKQorCisgICAgZGVmIF9fcmVwcl9f
KHNlbGYpOgorICAgICAgICByZXR1cm4gIjxGRENhcHR1cmUgJXMgb2xkZmQ9JXM+IiAlIChzZWxm
LnRhcmdldGZkLCBzZWxmLnRhcmdldGZkX3NhdmUpCisKKyAgICBkZWYgc3RhcnQoc2VsZik6Cisg
ICAgICAgICIiIiBTdGFydCBjYXB0dXJpbmcgb24gdGFyZ2V0ZmQgdXNpbmcgbWVtb3JpemVkIHRt
cGZpbGUuICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5mc3RhdChzZWxmLnRhcmdl
dGZkX3NhdmUpCisgICAgICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIE9TRXJyb3IpOgorICAg
ICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigic2F2ZWQgZmlsZWRlc2NyaXB0b3Igbm90IHZhbGlk
IGFueW1vcmUiKQorICAgICAgICBvcy5kdXAyKHNlbGYudG1wZmlsZV9mZCwgc2VsZi50YXJnZXRm
ZCkKKyAgICAgICAgc2VsZi5zeXNjYXB0dXJlLnN0YXJ0KCkKKworICAgIGRlZiBzbmFwKHNlbGYp
OgorICAgICAgICBmID0gc2VsZi50bXBmaWxlCisgICAgICAgIGYuc2VlaygwKQorICAgICAgICBy
ZXMgPSBmLnJlYWQoKQorICAgICAgICBpZiByZXM6CisgICAgICAgICAgICBlbmMgPSBnZXRhdHRy
KGYsICJlbmNvZGluZyIsIE5vbmUpCisgICAgICAgICAgICBpZiBlbmMgYW5kIGlzaW5zdGFuY2Uo
cmVzLCBieXRlcyk6CisgICAgICAgICAgICAgICAgcmVzID0gcHkuYnVpbHRpbi5fdG90ZXh0KHJl
cywgZW5jLCAicmVwbGFjZSIpCisgICAgICAgICAgICBmLnRydW5jYXRlKDApCisgICAgICAgICAg
ICBmLnNlZWsoMCkKKyAgICAgICAgICAgIHJldHVybiByZXMKKyAgICAgICAgcmV0dXJuICcnCisK
KyAgICBkZWYgZG9uZShzZWxmKToKKyAgICAgICAgIiIiIHN0b3AgY2FwdHVyaW5nLCByZXN0b3Jl
IHN0cmVhbXMsIHJldHVybiBvcmlnaW5hbCBjYXB0dXJlIGZpbGUsCisgICAgICAgIHNlZWtlZCB0
byBwb3NpdGlvbiB6ZXJvLiAiIiIKKyAgICAgICAgdGFyZ2V0ZmRfc2F2ZSA9IHNlbGYuX19kaWN0
X18ucG9wKCJ0YXJnZXRmZF9zYXZlIikKKyAgICAgICAgb3MuZHVwMih0YXJnZXRmZF9zYXZlLCBz
ZWxmLnRhcmdldGZkKQorICAgICAgICBvcy5jbG9zZSh0YXJnZXRmZF9zYXZlKQorICAgICAgICBz
ZWxmLnN5c2NhcHR1cmUuZG9uZSgpCisgICAgICAgIHNlbGYudG1wZmlsZS5jbG9zZSgpCisKKyAg
ICBkZWYgc3VzcGVuZChzZWxmKToKKyAgICAgICAgc2VsZi5zeXNjYXB0dXJlLnN1c3BlbmQoKQor
ICAgICAgICBvcy5kdXAyKHNlbGYudGFyZ2V0ZmRfc2F2ZSwgc2VsZi50YXJnZXRmZCkKKworICAg
IGRlZiByZXN1bWUoc2VsZik6CisgICAgICAgIHNlbGYuc3lzY2FwdHVyZS5yZXN1bWUoKQorICAg
ICAgICBvcy5kdXAyKHNlbGYudG1wZmlsZV9mZCwgc2VsZi50YXJnZXRmZCkKKworICAgIGRlZiB3
cml0ZW9yZyhzZWxmLCBkYXRhKToKKyAgICAgICAgIiIiIHdyaXRlIHRvIG9yaWdpbmFsIGZpbGUg
ZGVzY3JpcHRvci4gIiIiCisgICAgICAgIGlmIHB5LmJ1aWx0aW4uX2lzdGV4dChkYXRhKToKKyAg
ICAgICAgICAgIGRhdGEgPSBkYXRhLmVuY29kZSgidXRmOCIpICMgWFhYIHVzZSBlbmNvZGluZyBv
ZiBvcmlnaW5hbCBzdHJlYW0KKyAgICAgICAgb3Mud3JpdGUoc2VsZi50YXJnZXRmZF9zYXZlLCBk
YXRhKQorCisKK2NsYXNzIFN5c0NhcHR1cmU6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZkLCB0
bXBmaWxlPU5vbmUpOgorICAgICAgICBuYW1lID0gcGF0Y2hzeXNkaWN0W2ZkXQorICAgICAgICBz
ZWxmLl9vbGQgPSBnZXRhdHRyKHN5cywgbmFtZSkKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQor
ICAgICAgICBpZiB0bXBmaWxlIGlzIE5vbmU6CisgICAgICAgICAgICBpZiBuYW1lID09ICJzdGRp
biI6CisgICAgICAgICAgICAgICAgdG1wZmlsZSA9IERvbnRSZWFkRnJvbUlucHV0KCkKKyAgICAg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdG1wZmlsZSA9IFRleHRJTygpCisgICAgICAg
IHNlbGYudG1wZmlsZSA9IHRtcGZpbGUKKworICAgIGRlZiBzdGFydChzZWxmKToKKyAgICAgICAg
c2V0YXR0cihzeXMsIHNlbGYubmFtZSwgc2VsZi50bXBmaWxlKQorCisgICAgZGVmIHNuYXAoc2Vs
Zik6CisgICAgICAgIGYgPSBzZWxmLnRtcGZpbGUKKyAgICAgICAgcmVzID0gZi5nZXR2YWx1ZSgp
CisgICAgICAgIGYudHJ1bmNhdGUoMCkKKyAgICAgICAgZi5zZWVrKDApCisgICAgICAgIHJldHVy
biByZXMKKworICAgIGRlZiBkb25lKHNlbGYpOgorICAgICAgICBzZXRhdHRyKHN5cywgc2VsZi5u
YW1lLCBzZWxmLl9vbGQpCisgICAgICAgIGRlbCBzZWxmLl9vbGQKKyAgICAgICAgc2VsZi50bXBm
aWxlLmNsb3NlKCkKKworICAgIGRlZiBzdXNwZW5kKHNlbGYpOgorICAgICAgICBzZXRhdHRyKHN5
cywgc2VsZi5uYW1lLCBzZWxmLl9vbGQpCisKKyAgICBkZWYgcmVzdW1lKHNlbGYpOgorICAgICAg
ICBzZXRhdHRyKHN5cywgc2VsZi5uYW1lLCBzZWxmLnRtcGZpbGUpCisKKyAgICBkZWYgd3JpdGVv
cmcoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuX29sZC53cml0ZShkYXRhKQorICAgICAgICBz
ZWxmLl9vbGQuZmx1c2goKQorCisKK2NsYXNzIERvbnRSZWFkRnJvbUlucHV0OgorICAgICIiIlRl
bXBvcmFyeSBzdHViIGNsYXNzLiAgSWRlYWxseSB3aGVuIHN0ZGluIGlzIGFjY2Vzc2VkLCB0aGUK
KyAgICBjYXB0dXJpbmcgc2hvdWxkIGJlIHR1cm5lZCBvZmYsIHdpdGggcG9zc2libHkgYWxsIGRh
dGEgY2FwdHVyZWQKKyAgICBzbyBmYXIgc2VudCB0byB0aGUgc2NyZWVuLiAgVGhpcyBzaG91bGQg
YmUgY29uZmlndXJhYmxlLCB0aG91Z2gsCisgICAgYmVjYXVzZSBpbiBhdXRvbWF0ZWQgdGVzdCBy
dW5zIGl0IGlzIGJldHRlciB0byBjcmFzaCB0aGFuCisgICAgaGFuZyBpbmRlZmluaXRlbHkuCisg
ICAgIiIiCisKKyAgICBlbmNvZGluZyA9IE5vbmUKKworICAgIGRlZiByZWFkKHNlbGYsICphcmdz
KToKKyAgICAgICAgcmFpc2UgSU9FcnJvcigicmVhZGluZyBmcm9tIHN0ZGluIHdoaWxlIG91dHB1
dCBpcyBjYXB0dXJlZCIpCisgICAgcmVhZGxpbmUgPSByZWFkCisgICAgcmVhZGxpbmVzID0gcmVh
ZAorICAgIF9faXRlcl9fID0gcmVhZAorCisgICAgZGVmIGZpbGVubyhzZWxmKToKKyAgICAgICAg
cmFpc2UgVmFsdWVFcnJvcigicmVkaXJlY3RlZCBTdGRpbiBpcyBwc2V1ZG9maWxlLCBoYXMgbm8g
ZmlsZW5vKCkiKQorCisgICAgZGVmIGlzYXR0eShzZWxmKToKKyAgICAgICAgcmV0dXJuIEZhbHNl
CisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIHBhc3MKKworCitkZWYgX3JlYWRsaW5l
X3dvcmthcm91bmQoKToKKyAgICAiIiIKKyAgICBFbnN1cmUgcmVhZGxpbmUgaXMgaW1wb3J0ZWQg
c28gdGhhdCBpdCBhdHRhY2hlcyB0byB0aGUgY29ycmVjdCBzdGRpbworICAgIGhhbmRsZXMgb24g
V2luZG93cy4KKworICAgIFBkYiB1c2VzIHJlYWRsaW5lIHN1cHBvcnQgd2hlcmUgYXZhaWxhYmxl
LS13aGVuIG5vdCBydW5uaW5nIGZyb20gdGhlIFB5dGhvbgorICAgIHByb21wdCwgdGhlIHJlYWRs
aW5lIG1vZHVsZSBpcyBub3QgaW1wb3J0ZWQgdW50aWwgcnVubmluZyB0aGUgcGRiIFJFUEwuICBJ
ZgorICAgIHJ1bm5pbmcgcHkudGVzdCB3aXRoIHRoZSAtLXBkYiBvcHRpb24gdGhpcyBtZWFucyB0
aGUgcmVhZGxpbmUgbW9kdWxlIGlzIG5vdAorICAgIGltcG9ydGVkIHVudGlsIGFmdGVyIEkvTyBj
YXB0dXJlIGhhcyBiZWVuIHN0YXJ0ZWQuCisKKyAgICBUaGlzIGlzIGEgcHJvYmxlbSBmb3IgcHly
ZWFkbGluZSwgd2hpY2ggaXMgb2Z0ZW4gdXNlZCB0byBpbXBsZW1lbnQgcmVhZGxpbmUKKyAgICBz
dXBwb3J0IG9uIFdpbmRvd3MsIGFzIGl0IGRvZXMgbm90IGF0dGFjaCB0byB0aGUgY29ycmVjdCBo
YW5kbGVzIGZvciBzdGRvdXQKKyAgICBhbmQvb3Igc3RkaW4gaWYgdGhleSBoYXZlIGJlZW4gcmVk
aXJlY3RlZCBieSB0aGUgRkRDYXB0dXJlIG1lY2hhbmlzbS4gIFRoaXMKKyAgICB3b3JrYXJvdW5k
IGVuc3VyZXMgdGhhdCByZWFkbGluZSBpcyBpbXBvcnRlZCBiZWZvcmUgSS9PIGNhcHR1cmUgaXMg
c2V0dXAgc28KKyAgICB0aGF0IGl0IGNhbiBhdHRhY2ggdG8gdGhlIGFjdHVhbCBzdGRpbi9vdXQg
Zm9yIHRoZSBjb25zb2xlLgorCisgICAgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9weXRlc3QtZGV2
L3B5dGVzdC9wdWxsLzEyODEKKyAgICAiIiIKKworICAgIGlmIG5vdCBzeXMucGxhdGZvcm0uc3Rh
cnRzd2l0aCgnd2luMzInKToKKyAgICAgICAgcmV0dXJuCisgICAgdHJ5OgorICAgICAgICBpbXBv
cnQgcmVhZGxpbmUgICMgbm9xYQorICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgcGFz
cwpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9f
cHl0ZXN0L2NvbmZpZy5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRl
c3QvX3B5dGVzdC9jb25maWcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLmZiN2IxNzc0ZjY4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0
ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L2NvbmZpZy5weQpAQCAtMCwwICsxLDExOTIgQEAK
KyIiIiBjb21tYW5kIGxpbmUgb3B0aW9ucywgaW5pLWZpbGUgYW5kIGNvbmZ0ZXN0LnB5IHByb2Nl
c3NpbmcuICIiIgoraW1wb3J0IGFyZ3BhcnNlCitpbXBvcnQgc2hsZXgKK2ltcG9ydCB0cmFjZWJh
Y2sKK2ltcG9ydCB0eXBlcworaW1wb3J0IHdhcm5pbmdzCisKK2ltcG9ydCBweQorIyBET04ndCBp
bXBvcnQgcHl0ZXN0IGhlcmUgYmVjYXVzZSBpdCBjYXVzZXMgaW1wb3J0IGN5Y2xlIHRyb3VibGVz
CitpbXBvcnQgc3lzLCBvcworaW1wb3J0IF9weXRlc3QuX2NvZGUKK2ltcG9ydCBfcHl0ZXN0Lmhv
b2tzcGVjICAjIHRoZSBleHRlbnNpb24gcG9pbnQgZGVmaW5pdGlvbnMKK2Zyb20gX3B5dGVzdC5f
cGx1Z2d5IGltcG9ydCBQbHVnaW5NYW5hZ2VyLCBIb29raW1wbE1hcmtlciwgSG9va3NwZWNNYXJr
ZXIKKworaG9va2ltcGwgPSBIb29raW1wbE1hcmtlcigicHl0ZXN0IikKK2hvb2tzcGVjID0gSG9v
a3NwZWNNYXJrZXIoInB5dGVzdCIpCisKKyMgcHl0ZXN0IHN0YXJ0dXAKKyMKKworCitjbGFzcyBD
b25mdGVzdEltcG9ydEZhaWx1cmUoRXhjZXB0aW9uKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
cGF0aCwgZXhjaW5mbyk6CisgICAgICAgIEV4Y2VwdGlvbi5fX2luaXRfXyhzZWxmLCBwYXRoLCBl
eGNpbmZvKQorICAgICAgICBzZWxmLnBhdGggPSBwYXRoCisgICAgICAgIHNlbGYuZXhjaW5mbyA9
IGV4Y2luZm8KKworCitkZWYgbWFpbihhcmdzPU5vbmUsIHBsdWdpbnM9Tm9uZSk6CisgICAgIiIi
IHJldHVybiBleGl0IGNvZGUsIGFmdGVyIHBlcmZvcm1pbmcgYW4gaW4tcHJvY2VzcyB0ZXN0IHJ1
bi4KKworICAgIDphcmcgYXJnczogbGlzdCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgorCisg
ICAgOmFyZyBwbHVnaW5zOiBsaXN0IG9mIHBsdWdpbiBvYmplY3RzIHRvIGJlIGF1dG8tcmVnaXN0
ZXJlZCBkdXJpbmcKKyAgICAgICAgICAgICAgICAgIGluaXRpYWxpemF0aW9uLgorICAgICIiIgor
ICAgIHRyeToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29uZmlnID0gX3ByZXBhcmVjb25m
aWcoYXJncywgcGx1Z2lucykKKyAgICAgICAgZXhjZXB0IENvbmZ0ZXN0SW1wb3J0RmFpbHVyZSBh
cyBlOgorICAgICAgICAgICAgdHcgPSBweS5pby5UZXJtaW5hbFdyaXRlcihzeXMuc3RkZXJyKQor
ICAgICAgICAgICAgZm9yIGxpbmUgaW4gdHJhY2ViYWNrLmZvcm1hdF9leGNlcHRpb24oKmUuZXhj
aW5mbyk6CisgICAgICAgICAgICAgICAgdHcubGluZShsaW5lLnJzdHJpcCgpLCByZWQ9VHJ1ZSkK
KyAgICAgICAgICAgIHR3LmxpbmUoIkVSUk9SOiBjb3VsZCBub3QgbG9hZCAlc1xuIiAlIChlLnBh
dGgpLCByZWQ9VHJ1ZSkKKyAgICAgICAgICAgIHJldHVybiA0CisgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgY29uZmlnLnBsdWdpbm1hbmFnZXIuY2hlY2tf
cGVuZGluZygpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy5ob29rLnB5dGVzdF9jbWRs
aW5lX21haW4oY29uZmlnPWNvbmZpZykKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAg
ICAgICAgY29uZmlnLl9lbnN1cmVfdW5jb25maWd1cmUoKQorICAgIGV4Y2VwdCBVc2FnZUVycm9y
IGFzIGU6CisgICAgICAgIGZvciBtc2cgaW4gZS5hcmdzOgorICAgICAgICAgICAgc3lzLnN0ZGVy
ci53cml0ZSgiRVJST1I6ICVzXG4iICUobXNnLCkpCisgICAgICAgIHJldHVybiA0CisKK2NsYXNz
IGNtZGxpbmU6ICAjIGNvbXBhdGliaWxpdHkgbmFtZXNwYWNlCisgICAgbWFpbiA9IHN0YXRpY21l
dGhvZChtYWluKQorCitjbGFzcyBVc2FnZUVycm9yKEV4Y2VwdGlvbik6CisgICAgIiIiIGVycm9y
IGluIHB5dGVzdCB1c2FnZSBvciBpbnZvY2F0aW9uIiIiCisKK19wcmVpbml0ID0gW10KKworZGVm
YXVsdF9wbHVnaW5zID0gKAorICAgICAibWFyayBtYWluIHRlcm1pbmFsIHJ1bm5lciBweXRob24g
cGRiIHVuaXR0ZXN0IGNhcHR1cmUgc2tpcHBpbmcgIgorICAgICAidG1wZGlyIG1vbmtleXBhdGNo
IHJlY3dhcm4gcGFzdGViaW4gaGVscGNvbmZpZyBub3NlIGFzc2VydGlvbiBnZW5zY3JpcHQgIgor
ICAgICAianVuaXR4bWwgcmVzdWx0bG9nIGRvY3Rlc3QgY2FjaGVwcm92aWRlciIpLnNwbGl0KCkK
KworYnVpbHRpbl9wbHVnaW5zID0gc2V0KGRlZmF1bHRfcGx1Z2lucykKK2J1aWx0aW5fcGx1Z2lu
cy5hZGQoInB5dGVzdGVyIikKKworCitkZWYgX3ByZWxvYWRwbHVnaW5zKCk6CisgICAgYXNzZXJ0
IG5vdCBfcHJlaW5pdAorICAgIF9wcmVpbml0LmFwcGVuZChnZXRfY29uZmlnKCkpCisKK2RlZiBn
ZXRfY29uZmlnKCk6CisgICAgaWYgX3ByZWluaXQ6CisgICAgICAgIHJldHVybiBfcHJlaW5pdC5w
b3AoMCkKKyAgICAjIHN1YnNlcXVlbnQgY2FsbHMgdG8gbWFpbiB3aWxsIGNyZWF0ZSBhIGZyZXNo
IGluc3RhbmNlCisgICAgcGx1Z2lubWFuYWdlciA9IFB5dGVzdFBsdWdpbk1hbmFnZXIoKQorICAg
IGNvbmZpZyA9IENvbmZpZyhwbHVnaW5tYW5hZ2VyKQorICAgIGZvciBzcGVjIGluIGRlZmF1bHRf
cGx1Z2luczoKKyAgICAgICAgcGx1Z2lubWFuYWdlci5pbXBvcnRfcGx1Z2luKHNwZWMpCisgICAg
cmV0dXJuIGNvbmZpZworCitkZWYgZ2V0X3BsdWdpbl9tYW5hZ2VyKCk6CisgICAgIiIiCisgICAg
T2J0YWluIGEgbmV3IGluc3RhbmNlIG9mIHRoZQorICAgIDpweTpjbGFzczpgX3B5dGVzdC5jb25m
aWcuUHl0ZXN0UGx1Z2luTWFuYWdlcmAsIHdpdGggZGVmYXVsdCBwbHVnaW5zCisgICAgYWxyZWFk
eSBsb2FkZWQuCisKKyAgICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGJ5IGludGVncmF0aW9u
IHdpdGggb3RoZXIgdG9vbHMsIGxpa2UgaG9va2luZworICAgIGludG8gcHl0ZXN0IHRvIHJ1biB0
ZXN0cyBpbnRvIGFuIElERS4KKyAgICAiIiIKKyAgICByZXR1cm4gZ2V0X2NvbmZpZygpLnBsdWdp
bm1hbmFnZXIKKworZGVmIF9wcmVwYXJlY29uZmlnKGFyZ3M9Tm9uZSwgcGx1Z2lucz1Ob25lKToK
KyAgICBpZiBhcmdzIGlzIE5vbmU6CisgICAgICAgIGFyZ3MgPSBzeXMuYXJndlsxOl0KKyAgICBl
bGlmIGlzaW5zdGFuY2UoYXJncywgcHkucGF0aC5sb2NhbCk6CisgICAgICAgIGFyZ3MgPSBbc3Ry
KGFyZ3MpXQorICAgIGVsaWYgbm90IGlzaW5zdGFuY2UoYXJncywgKHR1cGxlLCBsaXN0KSk6Cisg
ICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGFyZ3MsIHN0cik6CisgICAgICAgICAgICByYWlzZSBW
YWx1ZUVycm9yKCJub3QgYSBzdHJpbmcgb3IgYXJndW1lbnQgbGlzdDogJXIiICUgKGFyZ3MsKSkK
KyAgICAgICAgYXJncyA9IHNobGV4LnNwbGl0KGFyZ3MpCisgICAgY29uZmlnID0gZ2V0X2NvbmZp
ZygpCisgICAgcGx1Z2lubWFuYWdlciA9IGNvbmZpZy5wbHVnaW5tYW5hZ2VyCisgICAgdHJ5Ogor
ICAgICAgICBpZiBwbHVnaW5zOgorICAgICAgICAgICAgZm9yIHBsdWdpbiBpbiBwbHVnaW5zOgor
ICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGx1Z2luLCBweS5idWlsdGluLl9iYXNlc3Ry
aW5nKToKKyAgICAgICAgICAgICAgICAgICAgcGx1Z2lubWFuYWdlci5jb25zaWRlcl9wbHVnaW5h
cmcocGx1Z2luKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHBs
dWdpbm1hbmFnZXIucmVnaXN0ZXIocGx1Z2luKQorICAgICAgICByZXR1cm4gcGx1Z2lubWFuYWdl
ci5ob29rLnB5dGVzdF9jbWRsaW5lX3BhcnNlKAorICAgICAgICAgICAgICAgIHBsdWdpbm1hbmFn
ZXI9cGx1Z2lubWFuYWdlciwgYXJncz1hcmdzKQorICAgIGV4Y2VwdCBCYXNlRXhjZXB0aW9uOgor
ICAgICAgICBjb25maWcuX2Vuc3VyZV91bmNvbmZpZ3VyZSgpCisgICAgICAgIHJhaXNlCisKKwor
Y2xhc3MgUHl0ZXN0UGx1Z2luTWFuYWdlcihQbHVnaW5NYW5hZ2VyKToKKyAgICAiIiIKKyAgICBP
dmVyd3JpdGVzIDpweTpjbGFzczpgcGx1Z2d5LlBsdWdpbk1hbmFnZXJgIHRvIGFkZCBweXRlc3Qt
c3BlY2lmaWMKKyAgICBmdW5jdGlvbmFsaXR5OgorCisgICAgKiBsb2FkaW5nIHBsdWdpbnMgZnJv
bSB0aGUgY29tbWFuZCBsaW5lLCBgYFBZVEVTVF9QTFVHSU5gYCBlbnYgdmFyaWFibGUgYW5kCisg
ICAgICBgYHB5dGVzdF9wbHVnaW5zYGAgZ2xvYmFsIHZhcmlhYmxlcyBmb3VuZCBpbiBwbHVnaW5z
IGJlaW5nIGxvYWRlZDsKKyAgICAqIGBgY29uZnRlc3QucHlgYCBsb2FkaW5nIGR1cmluZyBzdGFy
dC11cDsKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHN1cGVyKFB5
dGVzdFBsdWdpbk1hbmFnZXIsIHNlbGYpLl9faW5pdF9fKCJweXRlc3QiLCBpbXBscHJlZml4PSJw
eXRlc3RfIikKKyAgICAgICAgc2VsZi5fY29uZnRlc3RfcGx1Z2lucyA9IHNldCgpCisKKyAgICAg
ICAgIyBzdGF0ZSByZWxhdGVkIHRvIGxvY2FsIGNvbmZ0ZXN0IHBsdWdpbnMKKyAgICAgICAgc2Vs
Zi5fcGF0aDJjb25mbW9kcyA9IHt9CisgICAgICAgIHNlbGYuX2NvbmZ0ZXN0cGF0aDJtb2QgPSB7
fQorICAgICAgICBzZWxmLl9jb25mY3V0ZGlyID0gTm9uZQorICAgICAgICBzZWxmLl9ub2NvbmZ0
ZXN0ID0gRmFsc2UKKworICAgICAgICBzZWxmLmFkZF9ob29rc3BlY3MoX3B5dGVzdC5ob29rc3Bl
YykKKyAgICAgICAgc2VsZi5yZWdpc3RlcihzZWxmKQorICAgICAgICBpZiBvcy5lbnZpcm9uLmdl
dCgnUFlURVNUX0RFQlVHJyk6CisgICAgICAgICAgICBlcnIgPSBzeXMuc3RkZXJyCisgICAgICAg
ICAgICBlbmNvZGluZyA9IGdldGF0dHIoZXJyLCAnZW5jb2RpbmcnLCAndXRmOCcpCisgICAgICAg
ICAgICB0cnk6CisgICAgICAgICAgICAgICAgZXJyID0gcHkuaW8uZHVwZmlsZShlcnIsIGVuY29k
aW5nPWVuY29kaW5nKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAg
ICAgICBwYXNzCisgICAgICAgICAgICBzZWxmLnRyYWNlLnJvb3Quc2V0d3JpdGVyKGVyci53cml0
ZSkKKyAgICAgICAgICAgIHNlbGYuZW5hYmxlX3RyYWNpbmcoKQorCisgICAgZGVmIGFkZGhvb2tz
KHNlbGYsIG1vZHVsZV9vcl9jbGFzcyk6CisgICAgICAgICIiIgorICAgICAgICAuLiBkZXByZWNh
dGVkOjogMi44CisKKyAgICAgICAgVXNlIDpweTptZXRoOmBwbHVnZ3kuUGx1Z2luTWFuYWdlci5h
ZGRfaG9va3NwZWNzYCBpbnN0ZWFkLgorICAgICAgICAiIiIKKyAgICAgICAgd2FybmluZyA9IGRp
Y3QoY29kZT0iSTIiLAorICAgICAgICAgICAgICAgICAgICAgICBmc2xvY2F0aW9uPV9weXRlc3Qu
X2NvZGUuZ2V0ZnNsaW5lbm8oc3lzLl9nZXRmcmFtZSgxKSksCisgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGVpZD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlPSJ1c2UgcGx1
Z2lubWFuYWdlci5hZGRfaG9va3NwZWNzIGluc3RlYWQgb2YgIgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJkZXByZWNhdGVkIGFkZGhvb2tzKCkgbWV0aG9kLiIpCisgICAgICAgIHNl
bGYuX3dhcm4od2FybmluZykKKyAgICAgICAgcmV0dXJuIHNlbGYuYWRkX2hvb2tzcGVjcyhtb2R1
bGVfb3JfY2xhc3MpCisKKyAgICBkZWYgcGFyc2VfaG9va2ltcGxfb3B0cyhzZWxmLCBwbHVnaW4s
IG5hbWUpOgorICAgICAgICAjIHB5dGVzdCBob29rcyBhcmUgYWx3YXlzIHByZWZpeGVkIHdpdGgg
cHl0ZXN0XworICAgICAgICAjIHNvIHdlIGF2b2lkIGFjY2Vzc2luZyBwb3NzaWJseSBub24tcmVh
ZGFibGUgYXR0cmlidXRlcworICAgICAgICAjIChzZWUgaXNzdWUgIzEwNzMpCisgICAgICAgIGlm
IG5vdCBuYW1lLnN0YXJ0c3dpdGgoInB5dGVzdF8iKToKKyAgICAgICAgICAgIHJldHVybgorICAg
ICAgICAjIGlnbm9yZSBzb21lIGhpc3RvcmljIHNwZWNpYWwgbmFtZXMgd2hpY2ggY2FuIG5vdCBi
ZSBob29rcyBhbnl3YXkKKyAgICAgICAgaWYgbmFtZSA9PSAicHl0ZXN0X3BsdWdpbnMiIG9yIG5h
bWUuc3RhcnRzd2l0aCgicHl0ZXN0X2Z1bmNhcmdfXyIpOgorICAgICAgICAgICAgcmV0dXJuCisK
KyAgICAgICAgbWV0aG9kID0gZ2V0YXR0cihwbHVnaW4sIG5hbWUpCisgICAgICAgIG9wdHMgPSBz
dXBlcihQeXRlc3RQbHVnaW5NYW5hZ2VyLCBzZWxmKS5wYXJzZV9ob29raW1wbF9vcHRzKHBsdWdp
biwgbmFtZSkKKyAgICAgICAgaWYgb3B0cyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGZvciBu
YW1lIGluICgidHJ5Zmlyc3QiLCAidHJ5bGFzdCIsICJvcHRpb25hbGhvb2siLCAiaG9va3dyYXBw
ZXIiKToKKyAgICAgICAgICAgICAgICBvcHRzLnNldGRlZmF1bHQobmFtZSwgaGFzYXR0cihtZXRo
b2QsIG5hbWUpKQorICAgICAgICByZXR1cm4gb3B0cworCisgICAgZGVmIHBhcnNlX2hvb2tzcGVj
X29wdHMoc2VsZiwgbW9kdWxlX29yX2NsYXNzLCBuYW1lKToKKyAgICAgICAgb3B0cyA9IHN1cGVy
KFB5dGVzdFBsdWdpbk1hbmFnZXIsIHNlbGYpLnBhcnNlX2hvb2tzcGVjX29wdHMoCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVfb3JfY2xhc3Ms
IG5hbWUpCisgICAgICAgIGlmIG9wdHMgaXMgTm9uZToKKyAgICAgICAgICAgIG1ldGhvZCA9IGdl
dGF0dHIobW9kdWxlX29yX2NsYXNzLCBuYW1lKQorICAgICAgICAgICAgaWYgbmFtZS5zdGFydHN3
aXRoKCJweXRlc3RfIik6CisgICAgICAgICAgICAgICAgb3B0cyA9IHsiZmlyc3RyZXN1bHQiOiBo
YXNhdHRyKG1ldGhvZCwgImZpcnN0cmVzdWx0IiksCisgICAgICAgICAgICAgICAgICAgICAgICAi
aGlzdG9yaWMiOiBoYXNhdHRyKG1ldGhvZCwgImhpc3RvcmljIil9CisgICAgICAgIHJldHVybiBv
cHRzCisKKyAgICBkZWYgX3ZlcmlmeV9ob29rKHNlbGYsIGhvb2ssIGhvb2ttZXRob2QpOgorICAg
ICAgICBzdXBlcihQeXRlc3RQbHVnaW5NYW5hZ2VyLCBzZWxmKS5fdmVyaWZ5X2hvb2soaG9vaywg
aG9va21ldGhvZCkKKyAgICAgICAgaWYgIl9fbXVsdGljYWxsX18iIGluIGhvb2ttZXRob2QuYXJn
bmFtZXM6CisgICAgICAgICAgICBmc2xpbmVubyA9IF9weXRlc3QuX2NvZGUuZ2V0ZnNsaW5lbm8o
aG9va21ldGhvZC5mdW5jdGlvbikKKyAgICAgICAgICAgIHdhcm5pbmcgPSBkaWN0KGNvZGU9Ikkx
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZzbG9jYXRpb249ZnNsaW5lbm8sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICBub2RlaWQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1lc3NhZ2U9IiVyIGhvb2sgdXNlcyBkZXByZWNhdGVkIF9fbXVsdGljYWxsX18gIgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnQiICUgKGhvb2submFt
ZSkpCisgICAgICAgICAgICBzZWxmLl93YXJuKHdhcm5pbmcpCisKKyAgICBkZWYgcmVnaXN0ZXIo
c2VsZiwgcGx1Z2luLCBuYW1lPU5vbmUpOgorICAgICAgICByZXQgPSBzdXBlcihQeXRlc3RQbHVn
aW5NYW5hZ2VyLCBzZWxmKS5yZWdpc3RlcihwbHVnaW4sIG5hbWUpCisgICAgICAgIGlmIHJldDoK
KyAgICAgICAgICAgIHNlbGYuaG9vay5weXRlc3RfcGx1Z2luX3JlZ2lzdGVyZWQuY2FsbF9oaXN0
b3JpYygKKyAgICAgICAgICAgICAgICAgICAgICBrd2FyZ3M9ZGljdChwbHVnaW49cGx1Z2luLCBt
YW5hZ2VyPXNlbGYpKQorICAgICAgICByZXR1cm4gcmV0CisKKyAgICBkZWYgZ2V0cGx1Z2luKHNl
bGYsIG5hbWUpOgorICAgICAgICAjIHN1cHBvcnQgZGVwcmVjYXRlZCBuYW1pbmcgYmVjYXVzZSBw
bHVnaW5zICh4ZGlzdCBlLmcuKSB1c2UgaXQKKyAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X3BsdWdp
bihuYW1lKQorCisgICAgZGVmIGhhc3BsdWdpbihzZWxmLCBuYW1lKToKKyAgICAgICAgIiIiUmV0
dXJuIFRydWUgaWYgdGhlIHBsdWdpbiB3aXRoIHRoZSBnaXZlbiBuYW1lIGlzIHJlZ2lzdGVyZWQu
IiIiCisgICAgICAgIHJldHVybiBib29sKHNlbGYuZ2V0X3BsdWdpbihuYW1lKSkKKworICAgIGRl
ZiBweXRlc3RfY29uZmlndXJlKHNlbGYsIGNvbmZpZyk6CisgICAgICAgICMgWFhYIG5vdyB0aGF0
IHRoZSBwbHVnaW5tYW5hZ2VyIGV4cG9zZXMgaG9va2ltcGwodHJ5Zmlyc3QuLi4pCisgICAgICAg
ICMgd2Ugc2hvdWxkIHJlbW92ZSB0cnlmaXJzdC90cnlsYXN0IGFzIG1hcmtlcnMKKyAgICAgICAg
Y29uZmlnLmFkZGluaXZhbHVlX2xpbmUoIm1hcmtlcnMiLAorICAgICAgICAgICAgInRyeWZpcnN0
OiBtYXJrIGEgaG9vayBpbXBsZW1lbnRhdGlvbiBmdW5jdGlvbiBzdWNoIHRoYXQgdGhlICIKKyAg
ICAgICAgICAgICJwbHVnaW4gbWFjaGluZXJ5IHdpbGwgdHJ5IHRvIGNhbGwgaXQgZmlyc3QvYXMg
ZWFybHkgYXMgcG9zc2libGUuIikKKyAgICAgICAgY29uZmlnLmFkZGluaXZhbHVlX2xpbmUoIm1h
cmtlcnMiLAorICAgICAgICAgICAgInRyeWxhc3Q6IG1hcmsgYSBob29rIGltcGxlbWVudGF0aW9u
IGZ1bmN0aW9uIHN1Y2ggdGhhdCB0aGUgIgorICAgICAgICAgICAgInBsdWdpbiBtYWNoaW5lcnkg
d2lsbCB0cnkgdG8gY2FsbCBpdCBsYXN0L2FzIGxhdGUgYXMgcG9zc2libGUuIikKKworICAgIGRl
ZiBfd2FybihzZWxmLCBtZXNzYWdlKToKKyAgICAgICAga3dhcmdzID0gbWVzc2FnZSBpZiBpc2lu
c3RhbmNlKG1lc3NhZ2UsIGRpY3QpIGVsc2UgeworICAgICAgICAgICAgJ2NvZGUnOiAnSTEnLAor
ICAgICAgICAgICAgJ21lc3NhZ2UnOiBtZXNzYWdlLAorICAgICAgICAgICAgJ2ZzbG9jYXRpb24n
OiBOb25lLAorICAgICAgICAgICAgJ25vZGVpZCc6IE5vbmUsCisgICAgICAgIH0KKyAgICAgICAg
c2VsZi5ob29rLnB5dGVzdF9sb2d3YXJuaW5nLmNhbGxfaGlzdG9yaWMoa3dhcmdzPWt3YXJncykK
KworICAgICMKKyAgICAjIGludGVybmFsIEFQSSBmb3IgbG9jYWwgY29uZnRlc3QgcGx1Z2luIGhh
bmRsaW5nCisgICAgIworICAgIGRlZiBfc2V0X2luaXRpYWxfY29uZnRlc3RzKHNlbGYsIG5hbWVz
cGFjZSk6CisgICAgICAgICIiIiBsb2FkIGluaXRpYWwgY29uZnRlc3QgZmlsZXMgZ2l2ZW4gYSBw
cmVwYXJzZWQgIm5hbWVzcGFjZSIuCisgICAgICAgICAgICBBcyBjb25mdGVzdCBmaWxlcyBtYXkg
YWRkIHRoZWlyIG93biBjb21tYW5kIGxpbmUgb3B0aW9ucworICAgICAgICAgICAgd2hpY2ggaGF2
ZSBhcmd1bWVudHMgKCctLW15LW9wdCBzb21lcGF0aCcpIHdlIG1pZ2h0IGdldCBzb21lCisgICAg
ICAgICAgICBmYWxzZSBwb3NpdGl2ZXMuICBBbGwgYnVpbHRpbiBhbmQgM3JkIHBhcnR5IHBsdWdp
bnMgd2lsbCBoYXZlCisgICAgICAgICAgICBiZWVuIGxvYWRlZCwgaG93ZXZlciwgc28gY29tbW9u
IG9wdGlvbnMgd2lsbCBub3QgY29uZnVzZSBvdXIgbG9naWMKKyAgICAgICAgICAgIGhlcmUuCisg
ICAgICAgICIiIgorICAgICAgICBjdXJyZW50ID0gcHkucGF0aC5sb2NhbCgpCisgICAgICAgIHNl
bGYuX2NvbmZjdXRkaXIgPSBjdXJyZW50LmpvaW4obmFtZXNwYWNlLmNvbmZjdXRkaXIsIGFicz1U
cnVlKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5hbWVzcGFjZS5jb25m
Y3V0ZGlyIGVsc2UgTm9uZQorICAgICAgICBzZWxmLl9ub2NvbmZ0ZXN0ID0gbmFtZXNwYWNlLm5v
Y29uZnRlc3QKKyAgICAgICAgdGVzdHBhdGhzID0gbmFtZXNwYWNlLmZpbGVfb3JfZGlyCisgICAg
ICAgIGZvdW5kYW5jaG9yID0gRmFsc2UKKyAgICAgICAgZm9yIHBhdGggaW4gdGVzdHBhdGhzOgor
ICAgICAgICAgICAgcGF0aCA9IHN0cihwYXRoKQorICAgICAgICAgICAgIyByZW1vdmUgbm9kZS1p
ZCBzeW50YXgKKyAgICAgICAgICAgIGkgPSBwYXRoLmZpbmQoIjo6IikKKyAgICAgICAgICAgIGlm
IGkgIT0gLTE6CisgICAgICAgICAgICAgICAgcGF0aCA9IHBhdGhbOmldCisgICAgICAgICAgICBh
bmNob3IgPSBjdXJyZW50LmpvaW4ocGF0aCwgYWJzPTEpCisgICAgICAgICAgICBpZiBleGlzdHMo
YW5jaG9yKTogIyB3ZSBmb3VuZCBzb21lIGZpbGUgb2JqZWN0CisgICAgICAgICAgICAgICAgc2Vs
Zi5fdHJ5X2xvYWRfY29uZnRlc3QoYW5jaG9yKQorICAgICAgICAgICAgICAgIGZvdW5kYW5jaG9y
ID0gVHJ1ZQorICAgICAgICBpZiBub3QgZm91bmRhbmNob3I6CisgICAgICAgICAgICBzZWxmLl90
cnlfbG9hZF9jb25mdGVzdChjdXJyZW50KQorCisgICAgZGVmIF90cnlfbG9hZF9jb25mdGVzdChz
ZWxmLCBhbmNob3IpOgorICAgICAgICBzZWxmLl9nZXRjb25mdGVzdG1vZHVsZXMoYW5jaG9yKQor
ICAgICAgICAjIGxldCdzIGFsc28gY29uc2lkZXIgdGVzdCogc3ViZGlycworICAgICAgICBpZiBh
bmNob3IuY2hlY2soZGlyPTEpOgorICAgICAgICAgICAgZm9yIHggaW4gYW5jaG9yLmxpc3RkaXIo
InRlc3QqIik6CisgICAgICAgICAgICAgICAgaWYgeC5jaGVjayhkaXI9MSk6CisgICAgICAgICAg
ICAgICAgICAgIHNlbGYuX2dldGNvbmZ0ZXN0bW9kdWxlcyh4KQorCisgICAgZGVmIF9nZXRjb25m
dGVzdG1vZHVsZXMoc2VsZiwgcGF0aCk6CisgICAgICAgIGlmIHNlbGYuX25vY29uZnRlc3Q6Cisg
ICAgICAgICAgICByZXR1cm4gW10KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNl
bGYuX3BhdGgyY29uZm1vZHNbcGF0aF0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAg
ICAgICAgaWYgcGF0aC5pc2ZpbGUoKToKKyAgICAgICAgICAgICAgICBjbGlzdCA9IHNlbGYuX2dl
dGNvbmZ0ZXN0bW9kdWxlcyhwYXRoLmRpcnBhdGgoKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICAgICAgIyBYWFggdGhlc2UgZGF5cyB3ZSBtYXkgcmF0aGVyIHdhbnQgdG8gdXNlIGNv
bmZpZy5yb290ZGlyCisgICAgICAgICAgICAgICAgIyBhbmQgYWxsb3cgdXNlcnMgdG8gb3B0IGlu
dG8gbG9va2luZyBpbnRvIHRoZSByb290ZGlyIHBhcmVudAorICAgICAgICAgICAgICAgICMgZGly
ZWN0b3JpZXMgaW5zdGVhZCBvZiByZXF1aXJpbmcgdG8gc3BlY2lmeSBjb25mY3V0ZGlyCisgICAg
ICAgICAgICAgICAgY2xpc3QgPSBbXQorICAgICAgICAgICAgICAgIGZvciBwYXJlbnQgaW4gcGF0
aC5wYXJ0cygpOgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9jb25mY3V0ZGlyIGFuZCBz
ZWxmLl9jb25mY3V0ZGlyLnJlbHRvKHBhcmVudCk6CisgICAgICAgICAgICAgICAgICAgICAgICBj
b250aW51ZQorICAgICAgICAgICAgICAgICAgICBjb25mdGVzdHBhdGggPSBwYXJlbnQuam9pbigi
Y29uZnRlc3QucHkiKQorICAgICAgICAgICAgICAgICAgICBpZiBjb25mdGVzdHBhdGguaXNmaWxl
KCk6CisgICAgICAgICAgICAgICAgICAgICAgICBtb2QgPSBzZWxmLl9pbXBvcnRjb25mdGVzdChj
b25mdGVzdHBhdGgpCisgICAgICAgICAgICAgICAgICAgICAgICBjbGlzdC5hcHBlbmQobW9kKQor
CisgICAgICAgICAgICBzZWxmLl9wYXRoMmNvbmZtb2RzW3BhdGhdID0gY2xpc3QKKyAgICAgICAg
ICAgIHJldHVybiBjbGlzdAorCisgICAgZGVmIF9yZ2V0X3dpdGhfY29uZm1vZChzZWxmLCBuYW1l
LCBwYXRoKToKKyAgICAgICAgbW9kdWxlcyA9IHNlbGYuX2dldGNvbmZ0ZXN0bW9kdWxlcyhwYXRo
KQorICAgICAgICBmb3IgbW9kIGluIHJldmVyc2VkKG1vZHVsZXMpOgorICAgICAgICAgICAgdHJ5
OgorICAgICAgICAgICAgICAgIHJldHVybiBtb2QsIGdldGF0dHIobW9kLCBuYW1lKQorICAgICAg
ICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisg
ICAgICAgIHJhaXNlIEtleUVycm9yKG5hbWUpCisKKyAgICBkZWYgX2ltcG9ydGNvbmZ0ZXN0KHNl
bGYsIGNvbmZ0ZXN0cGF0aCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxm
Ll9jb25mdGVzdHBhdGgybW9kW2NvbmZ0ZXN0cGF0aF0KKyAgICAgICAgZXhjZXB0IEtleUVycm9y
OgorICAgICAgICAgICAgcGtncGF0aCA9IGNvbmZ0ZXN0cGF0aC5weXBrZ3BhdGgoKQorICAgICAg
ICAgICAgaWYgcGtncGF0aCBpcyBOb25lOgorICAgICAgICAgICAgICAgIF9lbnN1cmVfcmVtb3Zl
ZF9zeXNtb2R1bGUoY29uZnRlc3RwYXRoLnB1cmViYXNlbmFtZSkKKyAgICAgICAgICAgIHRyeToK
KyAgICAgICAgICAgICAgICBtb2QgPSBjb25mdGVzdHBhdGgucHlpbXBvcnQoKQorICAgICAgICAg
ICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICByYWlzZSBDb25mdGVzdEltcG9y
dEZhaWx1cmUoY29uZnRlc3RwYXRoLCBzeXMuZXhjX2luZm8oKSkKKworICAgICAgICAgICAgc2Vs
Zi5fY29uZnRlc3RfcGx1Z2lucy5hZGQobW9kKQorICAgICAgICAgICAgc2VsZi5fY29uZnRlc3Rw
YXRoMm1vZFtjb25mdGVzdHBhdGhdID0gbW9kCisgICAgICAgICAgICBkaXJwYXRoID0gY29uZnRl
c3RwYXRoLmRpcnBhdGgoKQorICAgICAgICAgICAgaWYgZGlycGF0aCBpbiBzZWxmLl9wYXRoMmNv
bmZtb2RzOgorICAgICAgICAgICAgICAgIGZvciBwYXRoLCBtb2RzIGluIHNlbGYuX3BhdGgyY29u
Zm1vZHMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICAgICAgaWYgcGF0aCBhbmQgcGF0aC5yZWx0
byhkaXJwYXRoKSBvciBwYXRoID09IGRpcnBhdGg6CisgICAgICAgICAgICAgICAgICAgICAgICBh
c3NlcnQgbW9kIG5vdCBpbiBtb2RzCisgICAgICAgICAgICAgICAgICAgICAgICBtb2RzLmFwcGVu
ZChtb2QpCisgICAgICAgICAgICBzZWxmLnRyYWNlKCJsb2FkZWQgY29uZnRlc3Rtb2R1bGUgJXIi
ICUobW9kKSkKKyAgICAgICAgICAgIHNlbGYuY29uc2lkZXJfY29uZnRlc3QobW9kKQorICAgICAg
ICAgICAgcmV0dXJuIG1vZAorCisgICAgIworICAgICMgQVBJIGZvciBib290c3RyYXBwaW5nIHBs
dWdpbiBsb2FkaW5nCisgICAgIworICAgICMKKworICAgIGRlZiBjb25zaWRlcl9wcmVwYXJzZShz
ZWxmLCBhcmdzKToKKyAgICAgICAgZm9yIG9wdDEsb3B0MiBpbiB6aXAoYXJncywgYXJnc1sxOl0p
OgorICAgICAgICAgICAgaWYgb3B0MSA9PSAiLXAiOgorICAgICAgICAgICAgICAgIHNlbGYuY29u
c2lkZXJfcGx1Z2luYXJnKG9wdDIpCisKKyAgICBkZWYgY29uc2lkZXJfcGx1Z2luYXJnKHNlbGYs
IGFyZyk6CisgICAgICAgIGlmIGFyZy5zdGFydHN3aXRoKCJubzoiKToKKyAgICAgICAgICAgIG5h
bWUgPSBhcmdbMzpdCisgICAgICAgICAgICBzZWxmLnNldF9ibG9ja2VkKG5hbWUpCisgICAgICAg
ICAgICBpZiBub3QgbmFtZS5zdGFydHN3aXRoKCJweXRlc3RfIik6CisgICAgICAgICAgICAgICAg
c2VsZi5zZXRfYmxvY2tlZCgicHl0ZXN0XyIgKyBuYW1lKQorICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgc2VsZi5pbXBvcnRfcGx1Z2luKGFyZykKKworICAgIGRlZiBjb25zaWRlcl9jb25mdGVz
dChzZWxmLCBjb25mdGVzdG1vZHVsZSk6CisgICAgICAgIGlmIHNlbGYucmVnaXN0ZXIoY29uZnRl
c3Rtb2R1bGUsIG5hbWU9Y29uZnRlc3Rtb2R1bGUuX19maWxlX18pOgorICAgICAgICAgICAgc2Vs
Zi5jb25zaWRlcl9tb2R1bGUoY29uZnRlc3Rtb2R1bGUpCisKKyAgICBkZWYgY29uc2lkZXJfZW52
KHNlbGYpOgorICAgICAgICBzZWxmLl9pbXBvcnRfcGx1Z2luX3NwZWNzKG9zLmVudmlyb24uZ2V0
KCJQWVRFU1RfUExVR0lOUyIpKQorCisgICAgZGVmIGNvbnNpZGVyX21vZHVsZShzZWxmLCBtb2Qp
OgorICAgICAgICBzZWxmLl9pbXBvcnRfcGx1Z2luX3NwZWNzKGdldGF0dHIobW9kLCAicHl0ZXN0
X3BsdWdpbnMiLCBOb25lKSkKKworICAgIGRlZiBfaW1wb3J0X3BsdWdpbl9zcGVjcyhzZWxmLCBz
cGVjKToKKyAgICAgICAgaWYgc3BlYzoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoc3BlYywg
c3RyKToKKyAgICAgICAgICAgICAgICBzcGVjID0gc3BlYy5zcGxpdCgiLCIpCisgICAgICAgICAg
ICBmb3IgaW1wb3J0X3NwZWMgaW4gc3BlYzoKKyAgICAgICAgICAgICAgICBzZWxmLmltcG9ydF9w
bHVnaW4oaW1wb3J0X3NwZWMpCisKKyAgICBkZWYgaW1wb3J0X3BsdWdpbihzZWxmLCBtb2RuYW1l
KToKKyAgICAgICAgIyBtb3N0IG9mdGVuIG1vZG5hbWUgcmVmZXJzIHRvIGJ1aWx0aW4gbW9kdWxl
cywgZS5nLiAicHl0ZXN0ZXIiLAorICAgICAgICAjICJ0ZXJtaW5hbCIgb3IgImNhcHR1cmUiLiAg
VGhvc2UgcGx1Z2lucyBhcmUgcmVnaXN0ZXJlZCB1bmRlciB0aGVpcgorICAgICAgICAjIGJhc2Vu
YW1lIGZvciBoaXN0b3JpYyBwdXJwb3NlcyBidXQgbXVzdCBiZSBpbXBvcnRlZCB3aXRoIHRoZQor
ICAgICAgICAjIF9weXRlc3QgcHJlZml4LgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShtb2Ru
YW1lLCBzdHIpCisgICAgICAgIGlmIHNlbGYuZ2V0X3BsdWdpbihtb2RuYW1lKSBpcyBub3QgTm9u
ZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBtb2RuYW1lIGluIGJ1aWx0aW5fcGx1
Z2luczoKKyAgICAgICAgICAgIGltcG9ydHNwZWMgPSAiX3B5dGVzdC4iICsgbW9kbmFtZQorICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgaW1wb3J0c3BlYyA9IG1vZG5hbWUKKyAgICAgICAgdHJ5
OgorICAgICAgICAgICAgX19pbXBvcnRfXyhpbXBvcnRzcGVjKQorICAgICAgICBleGNlcHQgSW1w
b3J0RXJyb3IgYXMgZToKKyAgICAgICAgICAgIG5ld19leGMgPSBJbXBvcnRFcnJvcignRXJyb3Ig
aW1wb3J0aW5nIHBsdWdpbiAiJXMiOiAlcycgJSAobW9kbmFtZSwgZSkpCisgICAgICAgICAgICAj
IGNvcHkgb3ZlciBuYW1lIGFuZCBwYXRoIGF0dHJpYnV0ZXMKKyAgICAgICAgICAgIGZvciBhdHRy
IGluICgnbmFtZScsICdwYXRoJyk6CisgICAgICAgICAgICAgICAgaWYgaGFzYXR0cihlLCBhdHRy
KToKKyAgICAgICAgICAgICAgICAgICAgc2V0YXR0cihuZXdfZXhjLCBhdHRyLCBnZXRhdHRyKGUs
IGF0dHIpKQorICAgICAgICAgICAgcmFpc2UgbmV3X2V4YworICAgICAgICBleGNlcHQgRXhjZXB0
aW9uIGFzIGU6CisgICAgICAgICAgICBpbXBvcnQgcHl0ZXN0CisgICAgICAgICAgICBpZiBub3Qg
aGFzYXR0cihweXRlc3QsICdza2lwJykgb3Igbm90IGlzaW5zdGFuY2UoZSwgcHl0ZXN0LnNraXAu
RXhjZXB0aW9uKToKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgc2VsZi5fd2Fy
bigic2tpcHBlZCBwbHVnaW4gJXI6ICVzIiAlKChtb2RuYW1lLCBlLm1zZykpKQorICAgICAgICBl
bHNlOgorICAgICAgICAgICAgbW9kID0gc3lzLm1vZHVsZXNbaW1wb3J0c3BlY10KKyAgICAgICAg
ICAgIHNlbGYucmVnaXN0ZXIobW9kLCBtb2RuYW1lKQorICAgICAgICAgICAgc2VsZi5jb25zaWRl
cl9tb2R1bGUobW9kKQorCisKK2NsYXNzIFBhcnNlcjoKKyAgICAiIiIgUGFyc2VyIGZvciBjb21t
YW5kIGxpbmUgYXJndW1lbnRzIGFuZCBpbmktZmlsZSB2YWx1ZXMuCisKKyAgICA6aXZhciBleHRy
YV9pbmZvOiBkaWN0IG9mIGdlbmVyaWMgcGFyYW0gLT4gdmFsdWUgdG8gZGlzcGxheSBpbiBjYXNl
CisgICAgICAgIHRoZXJlJ3MgYW4gZXJyb3IgcHJvY2Vzc2luZyB0aGUgY29tbWFuZCBsaW5lIGFy
Z3VtZW50cy4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1c2FnZT1Ob25lLCBw
cm9jZXNzb3B0PU5vbmUpOgorICAgICAgICBzZWxmLl9hbm9ueW1vdXMgPSBPcHRpb25Hcm91cCgi
Y3VzdG9tIG9wdGlvbnMiLCBwYXJzZXI9c2VsZikKKyAgICAgICAgc2VsZi5fZ3JvdXBzID0gW10K
KyAgICAgICAgc2VsZi5fcHJvY2Vzc29wdCA9IHByb2Nlc3NvcHQKKyAgICAgICAgc2VsZi5fdXNh
Z2UgPSB1c2FnZQorICAgICAgICBzZWxmLl9pbmlkaWN0ID0ge30KKyAgICAgICAgc2VsZi5faW5p
bmFtZXMgPSBbXQorICAgICAgICBzZWxmLmV4dHJhX2luZm8gPSB7fQorCisgICAgZGVmIHByb2Nl
c3NvcHRpb24oc2VsZiwgb3B0aW9uKToKKyAgICAgICAgaWYgc2VsZi5fcHJvY2Vzc29wdDoKKyAg
ICAgICAgICAgIGlmIG9wdGlvbi5kZXN0OgorICAgICAgICAgICAgICAgIHNlbGYuX3Byb2Nlc3Nv
cHQob3B0aW9uKQorCisgICAgZGVmIGdldGdyb3VwKHNlbGYsIG5hbWUsIGRlc2NyaXB0aW9uPSIi
LCBhZnRlcj1Ob25lKToKKyAgICAgICAgIiIiIGdldCAob3IgY3JlYXRlKSBhIG5hbWVkIG9wdGlv
biBHcm91cC4KKworICAgICAgICA6bmFtZTogbmFtZSBvZiB0aGUgb3B0aW9uIGdyb3VwLgorICAg
ICAgICA6ZGVzY3JpcHRpb246IGxvbmcgZGVzY3JpcHRpb24gZm9yIC0taGVscCBvdXRwdXQuCisg
ICAgICAgIDphZnRlcjogbmFtZSBvZiBvdGhlciBncm91cCwgdXNlZCBmb3Igb3JkZXJpbmcgLS1o
ZWxwIG91dHB1dC4KKworICAgICAgICBUaGUgcmV0dXJuZWQgZ3JvdXAgb2JqZWN0IGhhcyBhbiBg
YGFkZG9wdGlvbmBgIG1ldGhvZCB3aXRoIHRoZSBzYW1lCisgICAgICAgIHNpZ25hdHVyZSBhcyA6
cHk6ZnVuYzpgcGFyc2VyLmFkZG9wdGlvbgorICAgICAgICA8X3B5dGVzdC5jb25maWcuUGFyc2Vy
LmFkZG9wdGlvbj5gIGJ1dCB3aWxsIGJlIHNob3duIGluIHRoZQorICAgICAgICByZXNwZWN0aXZl
IGdyb3VwIGluIHRoZSBvdXRwdXQgb2YgYGBweXRlc3QuIC0taGVscGBgLgorICAgICAgICAiIiIK
KyAgICAgICAgZm9yIGdyb3VwIGluIHNlbGYuX2dyb3VwczoKKyAgICAgICAgICAgIGlmIGdyb3Vw
Lm5hbWUgPT0gbmFtZToKKyAgICAgICAgICAgICAgICByZXR1cm4gZ3JvdXAKKyAgICAgICAgZ3Jv
dXAgPSBPcHRpb25Hcm91cChuYW1lLCBkZXNjcmlwdGlvbiwgcGFyc2VyPXNlbGYpCisgICAgICAg
IGkgPSAwCisgICAgICAgIGZvciBpLCBncnAgaW4gZW51bWVyYXRlKHNlbGYuX2dyb3Vwcyk6Cisg
ICAgICAgICAgICBpZiBncnAubmFtZSA9PSBhZnRlcjoKKyAgICAgICAgICAgICAgICBicmVhawor
ICAgICAgICBzZWxmLl9ncm91cHMuaW5zZXJ0KGkrMSwgZ3JvdXApCisgICAgICAgIHJldHVybiBn
cm91cAorCisgICAgZGVmIGFkZG9wdGlvbihzZWxmLCAqb3B0cywgKiphdHRycyk6CisgICAgICAg
ICIiIiByZWdpc3RlciBhIGNvbW1hbmQgbGluZSBvcHRpb24uCisKKyAgICAgICAgOm9wdHM6IG9w
dGlvbiBuYW1lcywgY2FuIGJlIHNob3J0IG9yIGxvbmcgb3B0aW9ucy4KKyAgICAgICAgOmF0dHJz
OiBzYW1lIGF0dHJpYnV0ZXMgd2hpY2ggdGhlIGBgYWRkX29wdGlvbigpYGAgZnVuY3Rpb24gb2Yg
dGhlCisgICAgICAgICAgIGBhcmdwYXJzZSBsaWJyYXJ5CisgICAgICAgICAgIDxodHRwOi8vZG9j
cy5weXRob24ub3JnLzIvbGlicmFyeS9hcmdwYXJzZS5odG1sPmBfCisgICAgICAgICAgIGFjY2Vw
dHMuCisKKyAgICAgICAgQWZ0ZXIgY29tbWFuZCBsaW5lIHBhcnNpbmcgb3B0aW9ucyBhcmUgYXZh
aWxhYmxlIG9uIHRoZSBweXRlc3QgY29uZmlnCisgICAgICAgIG9iamVjdCB2aWEgYGBjb25maWcu
b3B0aW9uLk5BTUVgYCB3aGVyZSBgYE5BTUVgYCBpcyB1c3VhbGx5IHNldAorICAgICAgICBieSBw
YXNzaW5nIGEgYGBkZXN0YGAgYXR0cmlidXRlLCBmb3IgZXhhbXBsZQorICAgICAgICBgYGFkZG9w
dGlvbigiLS1sb25nIiwgZGVzdD0iTkFNRSIsIC4uLilgYC4KKyAgICAgICAgIiIiCisgICAgICAg
IHNlbGYuX2Fub255bW91cy5hZGRvcHRpb24oKm9wdHMsICoqYXR0cnMpCisKKyAgICBkZWYgcGFy
c2Uoc2VsZiwgYXJncywgbmFtZXNwYWNlPU5vbmUpOgorICAgICAgICBmcm9tIF9weXRlc3QuX2Fy
Z2NvbXBsZXRlIGltcG9ydCB0cnlfYXJnY29tcGxldGUKKyAgICAgICAgc2VsZi5vcHRwYXJzZXIg
PSBzZWxmLl9nZXRwYXJzZXIoKQorICAgICAgICB0cnlfYXJnY29tcGxldGUoc2VsZi5vcHRwYXJz
ZXIpCisgICAgICAgIHJldHVybiBzZWxmLm9wdHBhcnNlci5wYXJzZV9hcmdzKFtzdHIoeCkgZm9y
IHggaW4gYXJnc10sIG5hbWVzcGFjZT1uYW1lc3BhY2UpCisKKyAgICBkZWYgX2dldHBhcnNlcihz
ZWxmKToKKyAgICAgICAgZnJvbSBfcHl0ZXN0Ll9hcmdjb21wbGV0ZSBpbXBvcnQgZmlsZXNjb21w
bGV0ZXIKKyAgICAgICAgb3B0cGFyc2VyID0gTXlPcHRpb25QYXJzZXIoc2VsZiwgc2VsZi5leHRy
YV9pbmZvKQorICAgICAgICBncm91cHMgPSBzZWxmLl9ncm91cHMgKyBbc2VsZi5fYW5vbnltb3Vz
XQorICAgICAgICBmb3IgZ3JvdXAgaW4gZ3JvdXBzOgorICAgICAgICAgICAgaWYgZ3JvdXAub3B0
aW9uczoKKyAgICAgICAgICAgICAgICBkZXNjID0gZ3JvdXAuZGVzY3JpcHRpb24gb3IgZ3JvdXAu
bmFtZQorICAgICAgICAgICAgICAgIGFyZ2dyb3VwID0gb3B0cGFyc2VyLmFkZF9hcmd1bWVudF9n
cm91cChkZXNjKQorICAgICAgICAgICAgICAgIGZvciBvcHRpb24gaW4gZ3JvdXAub3B0aW9uczoK
KyAgICAgICAgICAgICAgICAgICAgbiA9IG9wdGlvbi5uYW1lcygpCisgICAgICAgICAgICAgICAg
ICAgIGEgPSBvcHRpb24uYXR0cnMoKQorICAgICAgICAgICAgICAgICAgICBhcmdncm91cC5hZGRf
YXJndW1lbnQoKm4sICoqYSkKKyAgICAgICAgIyBiYXNoIGxpa2UgYXV0b2NvbXBsZXRpb24gZm9y
IGRpcnMgKGFwcGVuZGluZyAnLycpCisgICAgICAgIG9wdHBhcnNlci5hZGRfYXJndW1lbnQoRklM
RV9PUl9ESVIsIG5hcmdzPScqJykuY29tcGxldGVyPWZpbGVzY29tcGxldGVyCisgICAgICAgIHJl
dHVybiBvcHRwYXJzZXIKKworICAgIGRlZiBwYXJzZV9zZXRvcHRpb24oc2VsZiwgYXJncywgb3B0
aW9uLCBuYW1lc3BhY2U9Tm9uZSk6CisgICAgICAgIHBhcnNlZG9wdGlvbiA9IHNlbGYucGFyc2Uo
YXJncywgbmFtZXNwYWNlPW5hbWVzcGFjZSkKKyAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIHBh
cnNlZG9wdGlvbi5fX2RpY3RfXy5pdGVtcygpOgorICAgICAgICAgICAgc2V0YXR0cihvcHRpb24s
IG5hbWUsIHZhbHVlKQorICAgICAgICByZXR1cm4gZ2V0YXR0cihwYXJzZWRvcHRpb24sIEZJTEVf
T1JfRElSKQorCisgICAgZGVmIHBhcnNlX2tub3duX2FyZ3Moc2VsZiwgYXJncywgbmFtZXNwYWNl
PU5vbmUpOgorICAgICAgICAiIiJwYXJzZXMgYW5kIHJldHVybnMgYSBuYW1lc3BhY2Ugb2JqZWN0
IHdpdGgga25vd24gYXJndW1lbnRzIGF0IHRoaXMKKyAgICAgICAgcG9pbnQuCisgICAgICAgICIi
IgorICAgICAgICByZXR1cm4gc2VsZi5wYXJzZV9rbm93bl9hbmRfdW5rbm93bl9hcmdzKGFyZ3Ms
IG5hbWVzcGFjZT1uYW1lc3BhY2UpWzBdCisKKyAgICBkZWYgcGFyc2Vfa25vd25fYW5kX3Vua25v
d25fYXJncyhzZWxmLCBhcmdzLCBuYW1lc3BhY2U9Tm9uZSk6CisgICAgICAgICIiInBhcnNlcyBh
bmQgcmV0dXJucyBhIG5hbWVzcGFjZSBvYmplY3Qgd2l0aCBrbm93biBhcmd1bWVudHMsIGFuZAor
ICAgICAgICB0aGUgcmVtYWluaW5nIGFyZ3VtZW50cyB1bmtub3duIGF0IHRoaXMgcG9pbnQuCisg
ICAgICAgICIiIgorICAgICAgICBvcHRwYXJzZXIgPSBzZWxmLl9nZXRwYXJzZXIoKQorICAgICAg
ICBhcmdzID0gW3N0cih4KSBmb3IgeCBpbiBhcmdzXQorICAgICAgICByZXR1cm4gb3B0cGFyc2Vy
LnBhcnNlX2tub3duX2FyZ3MoYXJncywgbmFtZXNwYWNlPW5hbWVzcGFjZSkKKworICAgIGRlZiBh
ZGRpbmkoc2VsZiwgbmFtZSwgaGVscCwgdHlwZT1Ob25lLCBkZWZhdWx0PU5vbmUpOgorICAgICAg
ICAiIiIgcmVnaXN0ZXIgYW4gaW5pLWZpbGUgb3B0aW9uLgorCisgICAgICAgIDpuYW1lOiBuYW1l
IG9mIHRoZSBpbmktdmFyaWFibGUKKyAgICAgICAgOnR5cGU6IHR5cGUgb2YgdGhlIHZhcmlhYmxl
LCBjYW4gYmUgYGBwYXRobGlzdGBgLCBgYGFyZ3NgYCwgYGBsaW5lbGlzdGBgCisgICAgICAgICAg
ICAgICBvciBgYGJvb2xgYC4KKyAgICAgICAgOmRlZmF1bHQ6IGRlZmF1bHQgdmFsdWUgaWYgbm8g
aW5pLWZpbGUgb3B0aW9uIGV4aXN0cyBidXQgaXMgcXVlcmllZC4KKworICAgICAgICBUaGUgdmFs
dWUgb2YgaW5pLXZhcmlhYmxlcyBjYW4gYmUgcmV0cmlldmVkIHZpYSBhIGNhbGwgdG8KKyAgICAg
ICAgOnB5OmZ1bmM6YGNvbmZpZy5nZXRpbmkobmFtZSkgPF9weXRlc3QuY29uZmlnLkNvbmZpZy5n
ZXRpbmk+YC4KKyAgICAgICAgIiIiCisgICAgICAgIGFzc2VydCB0eXBlIGluIChOb25lLCAicGF0
aGxpc3QiLCAiYXJncyIsICJsaW5lbGlzdCIsICJib29sIikKKyAgICAgICAgc2VsZi5faW5pZGlj
dFtuYW1lXSA9IChoZWxwLCB0eXBlLCBkZWZhdWx0KQorICAgICAgICBzZWxmLl9pbmluYW1lcy5h
cHBlbmQobmFtZSkKKworCitjbGFzcyBBcmd1bWVudEVycm9yKEV4Y2VwdGlvbik6CisgICAgIiIi
CisgICAgUmFpc2VkIGlmIGFuIEFyZ3VtZW50IGluc3RhbmNlIGlzIGNyZWF0ZWQgd2l0aCBpbnZh
bGlkIG9yCisgICAgaW5jb25zaXN0ZW50IGFyZ3VtZW50cy4KKyAgICAiIiIKKworICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBtc2csIG9wdGlvbik6CisgICAgICAgIHNlbGYubXNnID0gbXNnCisgICAg
ICAgIHNlbGYub3B0aW9uX2lkID0gc3RyKG9wdGlvbikKKworICAgIGRlZiBfX3N0cl9fKHNlbGYp
OgorICAgICAgICBpZiBzZWxmLm9wdGlvbl9pZDoKKyAgICAgICAgICAgIHJldHVybiAib3B0aW9u
ICVzOiAlcyIgJSAoc2VsZi5vcHRpb25faWQsIHNlbGYubXNnKQorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgcmV0dXJuIHNlbGYubXNnCisKKworY2xhc3MgQXJndW1lbnQ6CisgICAgIiIiY2xh
c3MgdGhhdCBtaW1pY3MgdGhlIG5lY2Vzc2FyeSBiZWhhdmlvdXIgb2Ygb3B0cGFyc2UuT3B0aW9u
ICIiIgorICAgIF90eXBfbWFwID0geworICAgICAgICAnaW50JzogaW50LAorICAgICAgICAnc3Ry
aW5nJzogc3RyLAorICAgICAgICB9CisgICAgIyBlbmFibGUgYWZ0ZXIgc29tZSBncmFjZSBwZXJp
b2QgZm9yIHBsdWdpbiB3cml0ZXJzCisgICAgVFlQRV9XQVJOID0gRmFsc2UKKworICAgIGRlZiBf
X2luaXRfXyhzZWxmLCAqbmFtZXMsICoqYXR0cnMpOgorICAgICAgICAiIiJzdG9yZSBwYXJtcyBp
biBwcml2YXRlIHZhcnMgZm9yIHVzZSBpbiBhZGRfYXJndW1lbnQiIiIKKyAgICAgICAgc2VsZi5f
YXR0cnMgPSBhdHRycworICAgICAgICBzZWxmLl9zaG9ydF9vcHRzID0gW10KKyAgICAgICAgc2Vs
Zi5fbG9uZ19vcHRzID0gW10KKyAgICAgICAgc2VsZi5kZXN0ID0gYXR0cnMuZ2V0KCdkZXN0JykK
KyAgICAgICAgaWYgc2VsZi5UWVBFX1dBUk46CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAg
ICAgICAgaGVscCA9IGF0dHJzWydoZWxwJ10KKyAgICAgICAgICAgICAgICBpZiAnJWRlZmF1bHQn
IGluIGhlbHA6CisgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oCisgICAgICAgICAg
ICAgICAgICAgICAgICAncHl0ZXN0IG5vdyB1c2VzIGFyZ3BhcnNlLiAiJWRlZmF1bHQiIHNob3Vs
ZCBiZScKKyAgICAgICAgICAgICAgICAgICAgICAgICcgY2hhbmdlZCB0byAiJShkZWZhdWx0KXMi
ICcsCisgICAgICAgICAgICAgICAgICAgICAgICBGdXR1cmVXYXJuaW5nLAorICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhY2tsZXZlbD0zKQorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgor
ICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdHlwID0gYXR0
cnNbJ3R5cGUnXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBwYXNzCisg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIHRoaXMgbWlnaHQgcmFpc2UgYSBrZXllcnJvciBh
cyB3ZWxsLCBkb24ndCB3YW50IHRvIGNhdGNoIHRoYXQKKyAgICAgICAgICAgIGlmIGlzaW5zdGFu
Y2UodHlwLCBweS5idWlsdGluLl9iYXNlc3RyaW5nKToKKyAgICAgICAgICAgICAgICBpZiB0eXAg
PT0gJ2Nob2ljZSc6CisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuVFlQRV9XQVJOOgorICAg
ICAgICAgICAgICAgICAgICAgICAgd2FybmluZ3Mud2FybigKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAndHlwZSBhcmd1bWVudCB0byBhZGRvcHRpb24oKSBpcyBhIHN0cmluZyAlci4nCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBGb3IgcGFyc2VhcmcgdGhpcyBpcyBvcHRpb25h
bCBhbmQgd2hlbiBzdXBwbGllZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBzaG91
bGQgYmUgYSB0eXBlLicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIChvcHRpb25zOiAl
cyknICUgKHR5cCwgbmFtZXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1dHVyZVdh
cm5pbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tsZXZlbD0zKQorICAgICAg
ICAgICAgICAgICAgICAjIGFyZ3BhcnNlIGV4cGVjdHMgYSB0eXBlIGhlcmUgdGFrZSBpdCBmcm9t
CisgICAgICAgICAgICAgICAgICAgICMgdGhlIHR5cGUgb2YgdGhlIGZpcnN0IGVsZW1lbnQKKyAg
ICAgICAgICAgICAgICAgICAgYXR0cnNbJ3R5cGUnXSA9IHR5cGUoYXR0cnNbJ2Nob2ljZXMnXVsw
XSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLlRZ
UEVfV0FSTjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJ3R5cGUgYXJndW1lbnQgdG8gYWRkb3B0aW9uKCkgaXMgYSBz
dHJpbmcgJXIuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgRm9yIHBhcnNlYXJnIHRo
aXMgc2hvdWxkIGJlIGEgdHlwZS4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAob3B0
aW9uczogJXMpJyAlICh0eXAsIG5hbWVzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBG
dXR1cmVXYXJuaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrbGV2ZWw9MykK
KyAgICAgICAgICAgICAgICAgICAgYXR0cnNbJ3R5cGUnXSA9IEFyZ3VtZW50Ll90eXBfbWFwW3R5
cF0KKyAgICAgICAgICAgICAgICAjIHVzZWQgaW4gdGVzdF9wYXJzZW9wdCAtPiB0ZXN0X3BhcnNl
X2RlZmF1bHRnZXR0ZXIKKyAgICAgICAgICAgICAgICBzZWxmLnR5cGUgPSBhdHRyc1sndHlwZSdd
CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYudHlwZSA9IHR5cAorICAg
ICAgICB0cnk6CisgICAgICAgICAgICAjIGF0dHJpYnV0ZSBleGlzdGVuY2UgaXMgdGVzdGVkIGlu
IENvbmZpZy5fcHJvY2Vzc29wdAorICAgICAgICAgICAgc2VsZi5kZWZhdWx0ID0gYXR0cnNbJ2Rl
ZmF1bHQnXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAg
ICAgIHNlbGYuX3NldF9vcHRfc3RyaW5ncyhuYW1lcykKKyAgICAgICAgaWYgbm90IHNlbGYuZGVz
dDoKKyAgICAgICAgICAgIGlmIHNlbGYuX2xvbmdfb3B0czoKKyAgICAgICAgICAgICAgICBzZWxm
LmRlc3QgPSBzZWxmLl9sb25nX29wdHNbMF1bMjpdLnJlcGxhY2UoJy0nLCAnXycpCisgICAgICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5kZXN0ID0gc2VsZi5fc2hvcnRfb3B0c1swXVsxOl0KKyAgICAgICAgICAgICAgICBleGNlcHQg
SW5kZXhFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgQXJndW1lbnRFcnJvcigKKyAg
ICAgICAgICAgICAgICAgICAgICAgICduZWVkIGEgbG9uZyBvciBzaG9ydCBvcHRpb24nLCBzZWxm
KQorCisgICAgZGVmIG5hbWVzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fc2hvcnRfb3B0
cyArIHNlbGYuX2xvbmdfb3B0cworCisgICAgZGVmIGF0dHJzKHNlbGYpOgorICAgICAgICAjIHVw
ZGF0ZSBhbnkgYXR0cmlidXRlcyBzZXQgYnkgcHJvY2Vzc29wdAorICAgICAgICBhdHRycyA9ICdk
ZWZhdWx0IGRlc3QgaGVscCcuc3BsaXQoKQorICAgICAgICBpZiBzZWxmLmRlc3Q6CisgICAgICAg
ICAgICBhdHRycy5hcHBlbmQoc2VsZi5kZXN0KQorICAgICAgICBmb3IgYXR0ciBpbiBhdHRyczoK
KyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl9hdHRyc1thdHRyXSA9IGdl
dGF0dHIoc2VsZiwgYXR0cikKKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAg
ICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGlmIHNlbGYuX2F0dHJzLmdldCgnaGVscCcpOgor
ICAgICAgICAgICAgYSA9IHNlbGYuX2F0dHJzWydoZWxwJ10KKyAgICAgICAgICAgIGEgPSBhLnJl
cGxhY2UoJyVkZWZhdWx0JywgJyUoZGVmYXVsdClzJykKKyAgICAgICAgICAgICNhID0gYS5yZXBs
YWNlKCclcHJvZycsICclKHByb2cpcycpCisgICAgICAgICAgICBzZWxmLl9hdHRyc1snaGVscCdd
ID0gYQorICAgICAgICByZXR1cm4gc2VsZi5fYXR0cnMKKworICAgIGRlZiBfc2V0X29wdF9zdHJp
bmdzKHNlbGYsIG9wdHMpOgorICAgICAgICAiIiJkaXJlY3RseSBmcm9tIG9wdHBhcnNlCisKKyAg
ICAgICAgbWlnaHQgbm90IGJlIG5lY2Vzc2FyeSBhcyB0aGlzIGlzIHBhc3NlZCB0byBhcmdwYXJz
ZSBsYXRlciBvbiIiIgorICAgICAgICBmb3Igb3B0IGluIG9wdHM6CisgICAgICAgICAgICBpZiBs
ZW4ob3B0KSA8IDI6CisgICAgICAgICAgICAgICAgcmFpc2UgQXJndW1lbnRFcnJvcigKKyAgICAg
ICAgICAgICAgICAgICAgImludmFsaWQgb3B0aW9uIHN0cmluZyAlcjogIgorICAgICAgICAgICAg
ICAgICAgICAibXVzdCBiZSBhdCBsZWFzdCB0d28gY2hhcmFjdGVycyBsb25nIiAlIG9wdCwgc2Vs
ZikKKyAgICAgICAgICAgIGVsaWYgbGVuKG9wdCkgPT0gMjoKKyAgICAgICAgICAgICAgICBpZiBu
b3QgKG9wdFswXSA9PSAiLSIgYW5kIG9wdFsxXSAhPSAiLSIpOgorICAgICAgICAgICAgICAgICAg
ICByYWlzZSBBcmd1bWVudEVycm9yKAorICAgICAgICAgICAgICAgICAgICAgICAgImludmFsaWQg
c2hvcnQgb3B0aW9uIHN0cmluZyAlcjogIgorICAgICAgICAgICAgICAgICAgICAgICAgIm11c3Qg
YmUgb2YgdGhlIGZvcm0gLXgsICh4IGFueSBub24tZGFzaCBjaGFyKSIgJSBvcHQsCisgICAgICAg
ICAgICAgICAgICAgICAgICBzZWxmKQorICAgICAgICAgICAgICAgIHNlbGYuX3Nob3J0X29wdHMu
YXBwZW5kKG9wdCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgbm90IChv
cHRbMDoyXSA9PSAiLS0iIGFuZCBvcHRbMl0gIT0gIi0iKToKKyAgICAgICAgICAgICAgICAgICAg
cmFpc2UgQXJndW1lbnRFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIGxv
bmcgb3B0aW9uIHN0cmluZyAlcjogIgorICAgICAgICAgICAgICAgICAgICAgICAgIm11c3Qgc3Rh
cnQgd2l0aCAtLSwgZm9sbG93ZWQgYnkgbm9uLWRhc2giICUgb3B0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgc2VsZikKKyAgICAgICAgICAgICAgICBzZWxmLl9sb25nX29wdHMuYXBwZW5kKG9w
dCkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dmFsID0gJ0FyZ3VtZW50
KCcKKyAgICAgICAgaWYgc2VsZi5fc2hvcnRfb3B0czoKKyAgICAgICAgICAgIHJldHZhbCArPSAn
X3Nob3J0X29wdHM6ICcgKyByZXByKHNlbGYuX3Nob3J0X29wdHMpICsgJywgJworICAgICAgICBp
ZiBzZWxmLl9sb25nX29wdHM6CisgICAgICAgICAgICByZXR2YWwgKz0gJ19sb25nX29wdHM6ICcg
KyByZXByKHNlbGYuX2xvbmdfb3B0cykgKyAnLCAnCisgICAgICAgIHJldHZhbCArPSAnZGVzdDog
JyArIHJlcHIoc2VsZi5kZXN0KSArICcsICcKKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAndHlw
ZScpOgorICAgICAgICAgICAgcmV0dmFsICs9ICd0eXBlOiAnICsgcmVwcihzZWxmLnR5cGUpICsg
JywgJworICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICdkZWZhdWx0Jyk6CisgICAgICAgICAgICBy
ZXR2YWwgKz0gJ2RlZmF1bHQ6ICcgKyByZXByKHNlbGYuZGVmYXVsdCkgKyAnLCAnCisgICAgICAg
IGlmIHJldHZhbFstMjpdID09ICcsICc6ICAjIGFsd2F5cyBsb25nIGVub3VnaCB0byB0ZXN0ICgi
QXJndW1lbnQoIiApCisgICAgICAgICAgICByZXR2YWwgPSByZXR2YWxbOi0yXQorICAgICAgICBy
ZXR2YWwgKz0gJyknCisgICAgICAgIHJldHVybiByZXR2YWwKKworCitjbGFzcyBPcHRpb25Hcm91
cDoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgZGVzY3JpcHRpb249IiIsIHBhcnNlcj1O
b25lKToKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICBzZWxmLmRlc2NyaXB0aW9u
ID0gZGVzY3JpcHRpb24KKyAgICAgICAgc2VsZi5vcHRpb25zID0gW10KKyAgICAgICAgc2VsZi5w
YXJzZXIgPSBwYXJzZXIKKworICAgIGRlZiBhZGRvcHRpb24oc2VsZiwgKm9wdG5hbWVzLCAqKmF0
dHJzKToKKyAgICAgICAgIiIiIGFkZCBhbiBvcHRpb24gdG8gdGhpcyBncm91cC4KKworICAgICAg
ICBpZiBhIHNob3J0ZW5lZCB2ZXJzaW9uIG9mIGEgbG9uZyBvcHRpb24gaXMgc3BlY2lmaWVkIGl0
IHdpbGwKKyAgICAgICAgYmUgc3VwcHJlc3NlZCBpbiB0aGUgaGVscC4gYWRkb3B0aW9uKCctLXR3
b3dvcmRzJywgJy0tdHdvLXdvcmRzJykKKyAgICAgICAgcmVzdWx0cyBpbiBoZWxwIHNob3dpbmcg
Jy0tdHdvLXdvcmRzJyBvbmx5LCBidXQgLS10d293b3JkcyBnZXRzCisgICAgICAgIGFjY2VwdGVk
ICoqYW5kKiogdGhlIGF1dG9tYXRpYyBkZXN0aW5hdGlvbiBpcyBpbiBhcmdzLnR3b3dvcmRzCisg
ICAgICAgICIiIgorICAgICAgICBvcHRpb24gPSBBcmd1bWVudCgqb3B0bmFtZXMsICoqYXR0cnMp
CisgICAgICAgIHNlbGYuX2FkZG9wdGlvbl9pbnN0YW5jZShvcHRpb24sIHNob3J0dXBwZXI9RmFs
c2UpCisKKyAgICBkZWYgX2FkZG9wdGlvbihzZWxmLCAqb3B0bmFtZXMsICoqYXR0cnMpOgorICAg
ICAgICBvcHRpb24gPSBBcmd1bWVudCgqb3B0bmFtZXMsICoqYXR0cnMpCisgICAgICAgIHNlbGYu
X2FkZG9wdGlvbl9pbnN0YW5jZShvcHRpb24sIHNob3J0dXBwZXI9VHJ1ZSkKKworICAgIGRlZiBf
YWRkb3B0aW9uX2luc3RhbmNlKHNlbGYsIG9wdGlvbiwgc2hvcnR1cHBlcj1GYWxzZSk6CisgICAg
ICAgIGlmIG5vdCBzaG9ydHVwcGVyOgorICAgICAgICAgICAgZm9yIG9wdCBpbiBvcHRpb24uX3No
b3J0X29wdHM6CisgICAgICAgICAgICAgICAgaWYgb3B0WzBdID09ICctJyBhbmQgb3B0WzFdLmlz
bG93ZXIoKToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibG93ZXJjYXNl
IHNob3J0b3B0aW9ucyByZXNlcnZlZCIpCisgICAgICAgIGlmIHNlbGYucGFyc2VyOgorICAgICAg
ICAgICAgc2VsZi5wYXJzZXIucHJvY2Vzc29wdGlvbihvcHRpb24pCisgICAgICAgIHNlbGYub3B0
aW9ucy5hcHBlbmQob3B0aW9uKQorCisKK2NsYXNzIE15T3B0aW9uUGFyc2VyKGFyZ3BhcnNlLkFy
Z3VtZW50UGFyc2VyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGFyc2VyLCBleHRyYV9pbmZv
PU5vbmUpOgorICAgICAgICBpZiBub3QgZXh0cmFfaW5mbzoKKyAgICAgICAgICAgIGV4dHJhX2lu
Zm8gPSB7fQorICAgICAgICBzZWxmLl9wYXJzZXIgPSBwYXJzZXIKKyAgICAgICAgYXJncGFyc2Uu
QXJndW1lbnRQYXJzZXIuX19pbml0X18oc2VsZiwgdXNhZ2U9cGFyc2VyLl91c2FnZSwKKyAgICAg
ICAgICAgIGFkZF9oZWxwPUZhbHNlLCBmb3JtYXR0ZXJfY2xhc3M9RHJvcFNob3J0ZXJMb25nSGVs
cEZvcm1hdHRlcikKKyAgICAgICAgIyBleHRyYV9pbmZvIGlzIGEgZGljdCBvZiAocGFyYW0gLT4g
dmFsdWUpIHRvIGRpc3BsYXkgaWYgdGhlcmUncworICAgICAgICAjIGFuIHVzYWdlIGVycm9yIHRv
IHByb3ZpZGUgbW9yZSBjb250ZXh0dWFsIGluZm9ybWF0aW9uIHRvIHRoZSB1c2VyCisgICAgICAg
IHNlbGYuZXh0cmFfaW5mbyA9IGV4dHJhX2luZm8KKworICAgIGRlZiBwYXJzZV9hcmdzKHNlbGYs
IGFyZ3M9Tm9uZSwgbmFtZXNwYWNlPU5vbmUpOgorICAgICAgICAiIiJhbGxvdyBzcGxpdHRpbmcg
b2YgcG9zaXRpb25hbCBhcmd1bWVudHMiIiIKKyAgICAgICAgYXJncywgYXJndiA9IHNlbGYucGFy
c2Vfa25vd25fYXJncyhhcmdzLCBuYW1lc3BhY2UpCisgICAgICAgIGlmIGFyZ3Y6CisgICAgICAg
ICAgICBmb3IgYXJnIGluIGFyZ3Y6CisgICAgICAgICAgICAgICAgaWYgYXJnIGFuZCBhcmdbMF0g
PT0gJy0nOgorICAgICAgICAgICAgICAgICAgICBsaW5lcyA9IFsndW5yZWNvZ25pemVkIGFyZ3Vt
ZW50czogJXMnICUgKCcgJy5qb2luKGFyZ3YpKV0KKyAgICAgICAgICAgICAgICAgICAgZm9yIGss
IHYgaW4gc29ydGVkKHNlbGYuZXh0cmFfaW5mby5pdGVtcygpKToKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnICAlczogJXMnICUgKGssIHYpKQorICAgICAgICAgICAgICAg
ICAgICBzZWxmLmVycm9yKCdcbicuam9pbihsaW5lcykpCisgICAgICAgICAgICBnZXRhdHRyKGFy
Z3MsIEZJTEVfT1JfRElSKS5leHRlbmQoYXJndikKKyAgICAgICAgcmV0dXJuIGFyZ3MKKworCitj
bGFzcyBEcm9wU2hvcnRlckxvbmdIZWxwRm9ybWF0dGVyKGFyZ3BhcnNlLkhlbHBGb3JtYXR0ZXIp
OgorICAgICIiInNob3J0ZW4gaGVscCBmb3IgbG9uZyBvcHRpb25zIHRoYXQgZGlmZmVyIG9ubHkg
aW4gZXh0cmEgaHlwaGVucworCisgICAgLSBjb2xsYXBzZSAqKmxvbmcqKiBvcHRpb25zIHRoYXQg
YXJlIHRoZSBzYW1lIGV4Y2VwdCBmb3IgZXh0cmEgaHlwaGVucworICAgIC0gc3BlY2lhbCBhY3Rp
b24gYXR0cmlidXRlIG1hcF9sb25nX29wdGlvbiBhbGxvd3Mgc3VycHJlc3NpbmcgYWRkaXRpb25h
bAorICAgICAgbG9uZyBvcHRpb25zCisgICAgLSBzaG9ydGN1dCBpZiB0aGVyZSBhcmUgb25seSB0
d28gb3B0aW9ucyBhbmQgb25lIG9mIHRoZW0gaXMgYSBzaG9ydCBvbmUKKyAgICAtIGNhY2hlIHJl
c3VsdCBvbiBhY3Rpb24gb2JqZWN0IGFzIHRoaXMgaXMgY2FsbGVkIGF0IGxlYXN0IDIgdGltZXMK
KyAgICAiIiIKKyAgICBkZWYgX2Zvcm1hdF9hY3Rpb25faW52b2NhdGlvbihzZWxmLCBhY3Rpb24p
OgorICAgICAgICBvcmdzdHIgPSBhcmdwYXJzZS5IZWxwRm9ybWF0dGVyLl9mb3JtYXRfYWN0aW9u
X2ludm9jYXRpb24oc2VsZiwgYWN0aW9uKQorICAgICAgICBpZiBvcmdzdHIgYW5kIG9yZ3N0clsw
XSAhPSAnLSc6ICMgb25seSBvcHRpb25hbCBhcmd1bWVudHMKKyAgICAgICAgICAgIHJldHVybiBv
cmdzdHIKKyAgICAgICAgcmVzID0gZ2V0YXR0cihhY3Rpb24sICdfZm9ybWF0dGVkX2FjdGlvbl9p
bnZvY2F0aW9uJywgTm9uZSkKKyAgICAgICAgaWYgcmVzOgorICAgICAgICAgICAgcmV0dXJuIHJl
cworICAgICAgICBvcHRpb25zID0gb3Jnc3RyLnNwbGl0KCcsICcpCisgICAgICAgIGlmIGxlbihv
cHRpb25zKSA9PSAyIGFuZCAobGVuKG9wdGlvbnNbMF0pID09IDIgb3IgbGVuKG9wdGlvbnNbMV0p
ID09IDIpOgorICAgICAgICAgICAgIyBhIHNob3J0Y3V0IGZvciAnLWgsIC0taGVscCcgb3IgJy0t
YWJjJywgJy1hJworICAgICAgICAgICAgYWN0aW9uLl9mb3JtYXR0ZWRfYWN0aW9uX2ludm9jYXRp
b24gPSBvcmdzdHIKKyAgICAgICAgICAgIHJldHVybiBvcmdzdHIKKyAgICAgICAgcmV0dXJuX2xp
c3QgPSBbXQorICAgICAgICBvcHRpb25fbWFwID0gIGdldGF0dHIoYWN0aW9uLCAnbWFwX2xvbmdf
b3B0aW9uJywge30pCisgICAgICAgIGlmIG9wdGlvbl9tYXAgaXMgTm9uZToKKyAgICAgICAgICAg
IG9wdGlvbl9tYXAgPSB7fQorICAgICAgICBzaG9ydF9sb25nID0ge30KKyAgICAgICAgZm9yIG9w
dGlvbiBpbiBvcHRpb25zOgorICAgICAgICAgICAgaWYgbGVuKG9wdGlvbikgPT0gMiBvciBvcHRp
b25bMl0gPT0gJyAnOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBu
b3Qgb3B0aW9uLnN0YXJ0c3dpdGgoJy0tJyk6CisgICAgICAgICAgICAgICAgcmFpc2UgQXJndW1l
bnRFcnJvcignbG9uZyBvcHRpb25hbCBhcmd1bWVudCB3aXRob3V0ICItLSI6IFslc10nCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChvcHRpb24pLCBzZWxmKQorICAgICAg
ICAgICAgeHhvcHRpb24gPSBvcHRpb25bMjpdCisgICAgICAgICAgICBpZiB4eG9wdGlvbi5zcGxp
dCgpWzBdIG5vdCBpbiBvcHRpb25fbWFwOgorICAgICAgICAgICAgICAgIHNob3J0ZW5lZCA9IHh4
b3B0aW9uLnJlcGxhY2UoJy0nLCAnJykKKyAgICAgICAgICAgICAgICBpZiBzaG9ydGVuZWQgbm90
IGluIHNob3J0X2xvbmcgb3IgXAorICAgICAgICAgICAgICAgICAgIGxlbihzaG9ydF9sb25nW3No
b3J0ZW5lZF0pIDwgbGVuKHh4b3B0aW9uKToKKyAgICAgICAgICAgICAgICAgICAgc2hvcnRfbG9u
Z1tzaG9ydGVuZWRdID0geHhvcHRpb24KKyAgICAgICAgIyBub3cgc2hvcnRfbG9uZyBoYXMgYmVl
biBmaWxsZWQgb3V0IHRvIHRoZSBsb25nZXN0IHdpdGggZGFzaGVzCisgICAgICAgICMgKiphbmQq
KiB3ZSBrZWVwIHRoZSByaWdodCBvcHRpb24gb3JkZXJpbmcgZnJvbSBhZGRfYXJndW1lbnQKKyAg
ICAgICAgZm9yIG9wdGlvbiBpbiBvcHRpb25zOiAjCisgICAgICAgICAgICBpZiBsZW4ob3B0aW9u
KSA9PSAyIG9yIG9wdGlvblsyXSA9PSAnICc6CisgICAgICAgICAgICAgICAgcmV0dXJuX2xpc3Qu
YXBwZW5kKG9wdGlvbikKKyAgICAgICAgICAgIGlmIG9wdGlvblsyOl0gPT0gc2hvcnRfbG9uZy5n
ZXQob3B0aW9uLnJlcGxhY2UoJy0nLCAnJykpOgorICAgICAgICAgICAgICAgIHJldHVybl9saXN0
LmFwcGVuZChvcHRpb24ucmVwbGFjZSgnICcsICc9JykpCisgICAgICAgIGFjdGlvbi5fZm9ybWF0
dGVkX2FjdGlvbl9pbnZvY2F0aW9uID0gJywgJy5qb2luKHJldHVybl9saXN0KQorICAgICAgICBy
ZXR1cm4gYWN0aW9uLl9mb3JtYXR0ZWRfYWN0aW9uX2ludm9jYXRpb24KKworCisKK2RlZiBfZW5z
dXJlX3JlbW92ZWRfc3lzbW9kdWxlKG1vZG5hbWUpOgorICAgIHRyeToKKyAgICAgICAgZGVsIHN5
cy5tb2R1bGVzW21vZG5hbWVdCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICBwYXNzCisK
K2NsYXNzIENtZE9wdGlvbnMob2JqZWN0KToKKyAgICAiIiIgaG9sZHMgY21kbGluZSBvcHRpb25z
IGFzIGF0dHJpYnV0ZXMuIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlcz0oKSk6Cisg
ICAgICAgIHNlbGYuX19kaWN0X18udXBkYXRlKHZhbHVlcykKKyAgICBkZWYgX19yZXByX18oc2Vs
Zik6CisgICAgICAgIHJldHVybiAiPENtZE9wdGlvbnMgJXI+IiAlKHNlbGYuX19kaWN0X18sKQor
ICAgIGRlZiBjb3B5KHNlbGYpOgorICAgICAgICByZXR1cm4gQ21kT3B0aW9ucyhzZWxmLl9fZGlj
dF9fKQorCitjbGFzcyBOb3RzZXQ6CisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICBy
ZXR1cm4gIjxOT1RTRVQ+IgorCitub3RzZXQgPSBOb3RzZXQoKQorRklMRV9PUl9ESVIgPSAnZmls
ZV9vcl9kaXInCisKK2NsYXNzIENvbmZpZyhvYmplY3QpOgorICAgICIiIiBhY2Nlc3MgdG8gY29u
ZmlndXJhdGlvbiB2YWx1ZXMsIHBsdWdpbm1hbmFnZXIgYW5kIHBsdWdpbiBob29rcy4gICIiIgor
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBsdWdpbm1hbmFnZXIpOgorICAgICAgICAjOiBhY2Nl
c3MgdG8gY29tbWFuZCBsaW5lIG9wdGlvbiBhcyBhdHRyaWJ1dGVzLgorICAgICAgICAjOiAoZGVw
cmVjYXRlZCksIHVzZSA6cHk6ZnVuYzpgZ2V0b3B0aW9uKCkgPF9weXRlc3QuY29uZmlnLkNvbmZp
Zy5nZXRvcHRpb24+YCBpbnN0ZWFkCisgICAgICAgIHNlbGYub3B0aW9uID0gQ21kT3B0aW9ucygp
CisgICAgICAgIF9hID0gRklMRV9PUl9ESVIKKyAgICAgICAgc2VsZi5fcGFyc2VyID0gUGFyc2Vy
KAorICAgICAgICAgICAgdXNhZ2U9IiUlKHByb2cpcyBbb3B0aW9uc10gWyVzXSBbJXNdIFsuLi5d
IiAlIChfYSwgX2EpLAorICAgICAgICAgICAgcHJvY2Vzc29wdD1zZWxmLl9wcm9jZXNzb3B0LAor
ICAgICAgICApCisgICAgICAgICM6IGEgcGx1Z2lubWFuYWdlciBpbnN0YW5jZQorICAgICAgICBz
ZWxmLnBsdWdpbm1hbmFnZXIgPSBwbHVnaW5tYW5hZ2VyCisgICAgICAgIHNlbGYudHJhY2UgPSBz
ZWxmLnBsdWdpbm1hbmFnZXIudHJhY2Uucm9vdC5nZXQoImNvbmZpZyIpCisgICAgICAgIHNlbGYu
aG9vayA9IHNlbGYucGx1Z2lubWFuYWdlci5ob29rCisgICAgICAgIHNlbGYuX2luaWNhY2hlID0g
e30KKyAgICAgICAgc2VsZi5fb3B0MmRlc3QgPSB7fQorICAgICAgICBzZWxmLl9jbGVhbnVwID0g
W10KKyAgICAgICAgc2VsZi5fd2FybiA9IHNlbGYucGx1Z2lubWFuYWdlci5fd2FybgorICAgICAg
ICBzZWxmLnBsdWdpbm1hbmFnZXIucmVnaXN0ZXIoc2VsZiwgInB5dGVzdGNvbmZpZyIpCisgICAg
ICAgIHNlbGYuX2NvbmZpZ3VyZWQgPSBGYWxzZQorICAgICAgICBkZWYgZG9fc2V0bnMoZGljKToK
KyAgICAgICAgICAgIGltcG9ydCBweXRlc3QKKyAgICAgICAgICAgIHNldG5zKHB5dGVzdCwgZGlj
KQorICAgICAgICBzZWxmLmhvb2sucHl0ZXN0X25hbWVzcGFjZS5jYWxsX2hpc3RvcmljKGRvX3Nl
dG5zLCB7fSkKKyAgICAgICAgc2VsZi5ob29rLnB5dGVzdF9hZGRvcHRpb24uY2FsbF9oaXN0b3Jp
Yyhrd2FyZ3M9ZGljdChwYXJzZXI9c2VsZi5fcGFyc2VyKSkKKworICAgIGRlZiBhZGRfY2xlYW51
cChzZWxmLCBmdW5jKToKKyAgICAgICAgIiIiIEFkZCBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3
aGVuIHRoZSBjb25maWcgb2JqZWN0IGdldHMgb3V0IG9mCisgICAgICAgIHVzZSAodXN1YWxseSBj
b25pbmNpZGluZyB3aXRoIHB5dGVzdF91bmNvbmZpZ3VyZSkuIiIiCisgICAgICAgIHNlbGYuX2Ns
ZWFudXAuYXBwZW5kKGZ1bmMpCisKKyAgICBkZWYgX2RvX2NvbmZpZ3VyZShzZWxmKToKKyAgICAg
ICAgYXNzZXJ0IG5vdCBzZWxmLl9jb25maWd1cmVkCisgICAgICAgIHNlbGYuX2NvbmZpZ3VyZWQg
PSBUcnVlCisgICAgICAgIHNlbGYuaG9vay5weXRlc3RfY29uZmlndXJlLmNhbGxfaGlzdG9yaWMo
a3dhcmdzPWRpY3QoY29uZmlnPXNlbGYpKQorCisgICAgZGVmIF9lbnN1cmVfdW5jb25maWd1cmUo
c2VsZik6CisgICAgICAgIGlmIHNlbGYuX2NvbmZpZ3VyZWQ6CisgICAgICAgICAgICBzZWxmLl9j
b25maWd1cmVkID0gRmFsc2UKKyAgICAgICAgICAgIHNlbGYuaG9vay5weXRlc3RfdW5jb25maWd1
cmUoY29uZmlnPXNlbGYpCisgICAgICAgICAgICBzZWxmLmhvb2sucHl0ZXN0X2NvbmZpZ3VyZS5f
Y2FsbF9oaXN0b3J5ID0gW10KKyAgICAgICAgd2hpbGUgc2VsZi5fY2xlYW51cDoKKyAgICAgICAg
ICAgIGZpbiA9IHNlbGYuX2NsZWFudXAucG9wKCkKKyAgICAgICAgICAgIGZpbigpCisKKyAgICBk
ZWYgd2FybihzZWxmLCBjb2RlLCBtZXNzYWdlLCBmc2xvY2F0aW9uPU5vbmUpOgorICAgICAgICAi
IiIgZ2VuZXJhdGUgYSB3YXJuaW5nIGZvciB0aGlzIHRlc3Qgc2Vzc2lvbi4gIiIiCisgICAgICAg
IHNlbGYuaG9vay5weXRlc3RfbG9nd2FybmluZy5jYWxsX2hpc3RvcmljKGt3YXJncz1kaWN0KAor
ICAgICAgICAgICAgY29kZT1jb2RlLCBtZXNzYWdlPW1lc3NhZ2UsCisgICAgICAgICAgICBmc2xv
Y2F0aW9uPWZzbG9jYXRpb24sIG5vZGVpZD1Ob25lKSkKKworICAgIGRlZiBnZXRfdGVybWluYWxf
d3JpdGVyKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5wbHVnaW5tYW5hZ2VyLmdldF9wbHVn
aW4oInRlcm1pbmFscmVwb3J0ZXIiKS5fdHcKKworICAgIGRlZiBweXRlc3RfY21kbGluZV9wYXJz
ZShzZWxmLCBwbHVnaW5tYW5hZ2VyLCBhcmdzKToKKyAgICAgICAgIyBSRUYxIGFzc2VydCBzZWxm
ID09IHBsdWdpbm1hbmFnZXIuY29uZmlnLCAoc2VsZiwgcGx1Z2lubWFuYWdlci5jb25maWcpCisg
ICAgICAgIHNlbGYucGFyc2UoYXJncykKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBu
b3RpZnlfZXhjZXB0aW9uKHNlbGYsIGV4Y2luZm8sIG9wdGlvbj1Ob25lKToKKyAgICAgICAgaWYg
b3B0aW9uIGFuZCBvcHRpb24uZnVsbHRyYWNlOgorICAgICAgICAgICAgc3R5bGUgPSAibG9uZyIK
KyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN0eWxlID0gIm5hdGl2ZSIKKyAgICAgICAgZXhj
cmVwciA9IGV4Y2luZm8uZ2V0cmVwcihmdW5jYXJncz1UcnVlLAorICAgICAgICAgICAgc2hvd2xv
Y2Fscz1nZXRhdHRyKG9wdGlvbiwgJ3Nob3dsb2NhbHMnLCBGYWxzZSksCisgICAgICAgICAgICBz
dHlsZT1zdHlsZSwKKyAgICAgICAgKQorICAgICAgICByZXMgPSBzZWxmLmhvb2sucHl0ZXN0X2lu
dGVybmFsZXJyb3IoZXhjcmVwcj1leGNyZXByLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXhjaW5mbz1leGNpbmZvKQorICAgICAgICBpZiBub3QgcHkuYnVp
bHRpbi5hbnkocmVzKToKKyAgICAgICAgICAgIGZvciBsaW5lIGluIHN0cihleGNyZXByKS5zcGxp
dCgiXG4iKToKKyAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJJTlRFUk5BTEVSUk9S
PiAlc1xuIiAlbGluZSkKKyAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKKworICAg
IGRlZiBjd2RfcmVsYXRpdmVfbm9kZWlkKHNlbGYsIG5vZGVpZCk6CisgICAgICAgICMgbm9kZWlk
J3MgYXJlIHJlbGF0aXZlIHRvIHRoZSByb290cGF0aCwgY29tcHV0ZSByZWxhdGl2ZSB0byBjd2QK
KyAgICAgICAgaWYgc2VsZi5pbnZvY2F0aW9uX2RpciAhPSBzZWxmLnJvb3RkaXI6CisgICAgICAg
ICAgICBmdWxscGF0aCA9IHNlbGYucm9vdGRpci5qb2luKG5vZGVpZCkKKyAgICAgICAgICAgIG5v
ZGVpZCA9IHNlbGYuaW52b2NhdGlvbl9kaXIuYmVzdHJlbHBhdGgoZnVsbHBhdGgpCisgICAgICAg
IHJldHVybiBub2RlaWQKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBmcm9tZGljdGFyZ3Mo
Y2xzLCBvcHRpb25fZGljdCwgYXJncyk6CisgICAgICAgICIiIiBjb25zdHJ1Y3RvciB1c2VhYmxl
IGZvciBzdWJwcm9jZXNzZXMuICIiIgorICAgICAgICBjb25maWcgPSBnZXRfY29uZmlnKCkKKyAg
ICAgICAgY29uZmlnLm9wdGlvbi5fX2RpY3RfXy51cGRhdGUob3B0aW9uX2RpY3QpCisgICAgICAg
IGNvbmZpZy5wYXJzZShhcmdzLCBhZGRvcHRzPUZhbHNlKQorICAgICAgICBmb3IgeCBpbiBjb25m
aWcub3B0aW9uLnBsdWdpbnM6CisgICAgICAgICAgICBjb25maWcucGx1Z2lubWFuYWdlci5jb25z
aWRlcl9wbHVnaW5hcmcoeCkKKyAgICAgICAgcmV0dXJuIGNvbmZpZworCisgICAgZGVmIF9wcm9j
ZXNzb3B0KHNlbGYsIG9wdCk6CisgICAgICAgIGZvciBuYW1lIGluIG9wdC5fc2hvcnRfb3B0cyAr
IG9wdC5fbG9uZ19vcHRzOgorICAgICAgICAgICAgc2VsZi5fb3B0MmRlc3RbbmFtZV0gPSBvcHQu
ZGVzdAorCisgICAgICAgIGlmIGhhc2F0dHIob3B0LCAnZGVmYXVsdCcpIGFuZCBvcHQuZGVzdDoK
KyAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYub3B0aW9uLCBvcHQuZGVzdCk6CisgICAg
ICAgICAgICAgICAgc2V0YXR0cihzZWxmLm9wdGlvbiwgb3B0LmRlc3QsIG9wdC5kZWZhdWx0KQor
CisgICAgQGhvb2tpbXBsKHRyeWxhc3Q9VHJ1ZSkKKyAgICBkZWYgcHl0ZXN0X2xvYWRfaW5pdGlh
bF9jb25mdGVzdHMoc2VsZiwgZWFybHlfY29uZmlnKToKKyAgICAgICAgc2VsZi5wbHVnaW5tYW5h
Z2VyLl9zZXRfaW5pdGlhbF9jb25mdGVzdHMoZWFybHlfY29uZmlnLmtub3duX2FyZ3NfbmFtZXNw
YWNlKQorCisgICAgZGVmIF9pbml0aW5pKHNlbGYsIGFyZ3MpOgorICAgICAgICBucywgdW5rbm93
bl9hcmdzID0gc2VsZi5fcGFyc2VyLnBhcnNlX2tub3duX2FuZF91bmtub3duX2FyZ3MoYXJncywg
bmFtZXNwYWNlPXNlbGYub3B0aW9uLmNvcHkoKSkKKyAgICAgICAgciA9IGRldGVybWluZV9zZXR1
cChucy5pbmlmaWxlbmFtZSwgbnMuZmlsZV9vcl9kaXIgKyB1bmtub3duX2FyZ3MpCisgICAgICAg
IHNlbGYucm9vdGRpciwgc2VsZi5pbmlmaWxlLCBzZWxmLmluaWNmZyA9IHIKKyAgICAgICAgc2Vs
Zi5fcGFyc2VyLmV4dHJhX2luZm9bJ3Jvb3RkaXInXSA9IHNlbGYucm9vdGRpcgorICAgICAgICBz
ZWxmLl9wYXJzZXIuZXh0cmFfaW5mb1snaW5pZmlsZSddID0gc2VsZi5pbmlmaWxlCisgICAgICAg
IHNlbGYuaW52b2NhdGlvbl9kaXIgPSBweS5wYXRoLmxvY2FsKCkKKyAgICAgICAgc2VsZi5fcGFy
c2VyLmFkZGluaSgnYWRkb3B0cycsICdleHRyYSBjb21tYW5kIGxpbmUgb3B0aW9ucycsICdhcmdz
JykKKyAgICAgICAgc2VsZi5fcGFyc2VyLmFkZGluaSgnbWludmVyc2lvbicsICdtaW5pbWFsbHkg
cmVxdWlyZWQgcHl0ZXN0IHZlcnNpb24nKQorCisgICAgZGVmIF9wcmVwYXJzZShzZWxmLCBhcmdz
LCBhZGRvcHRzPVRydWUpOgorICAgICAgICBzZWxmLl9pbml0aW5pKGFyZ3MpCisgICAgICAgIGlm
IGFkZG9wdHM6CisgICAgICAgICAgICBhcmdzWzpdID0gc2hsZXguc3BsaXQob3MuZW52aXJvbi5n
ZXQoJ1BZVEVTVF9BRERPUFRTJywgJycpKSArIGFyZ3MKKyAgICAgICAgICAgIGFyZ3NbOl0gPSBz
ZWxmLmdldGluaSgiYWRkb3B0cyIpICsgYXJncworICAgICAgICBzZWxmLl9jaGVja3ZlcnNpb24o
KQorICAgICAgICBzZWxmLnBsdWdpbm1hbmFnZXIuY29uc2lkZXJfcHJlcGFyc2UoYXJncykKKyAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5wbHVnaW5tYW5hZ2VyLmxvYWRfc2V0dXB0b29s
c19lbnRyeXBvaW50cygicHl0ZXN0MTEiKQorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IgYXMg
ZToKKyAgICAgICAgICAgIHNlbGYud2FybigiSTIiLCAiY291bGQgbm90IGxvYWQgc2V0dXB0b29s
cyBlbnRyeSBpbXBvcnQ6ICVzIiAlIChlLCkpCisgICAgICAgIHNlbGYucGx1Z2lubWFuYWdlci5j
b25zaWRlcl9lbnYoKQorICAgICAgICBzZWxmLmtub3duX2FyZ3NfbmFtZXNwYWNlID0gbnMgPSBz
ZWxmLl9wYXJzZXIucGFyc2Vfa25vd25fYXJncyhhcmdzLCBuYW1lc3BhY2U9c2VsZi5vcHRpb24u
Y29weSgpKQorICAgICAgICBpZiBzZWxmLmtub3duX2FyZ3NfbmFtZXNwYWNlLmNvbmZjdXRkaXIg
aXMgTm9uZSBhbmQgc2VsZi5pbmlmaWxlOgorICAgICAgICAgICAgY29uZmN1dGRpciA9IHB5LnBh
dGgubG9jYWwoc2VsZi5pbmlmaWxlKS5kaXJuYW1lCisgICAgICAgICAgICBzZWxmLmtub3duX2Fy
Z3NfbmFtZXNwYWNlLmNvbmZjdXRkaXIgPSBjb25mY3V0ZGlyCisgICAgICAgIHRyeToKKyAgICAg
ICAgICAgIHNlbGYuaG9vay5weXRlc3RfbG9hZF9pbml0aWFsX2NvbmZ0ZXN0cyhlYXJseV9jb25m
aWc9c2VsZiwKKyAgICAgICAgICAgICAgICAgICAgYXJncz1hcmdzLCBwYXJzZXI9c2VsZi5fcGFy
c2VyKQorICAgICAgICBleGNlcHQgQ29uZnRlc3RJbXBvcnRGYWlsdXJlOgorICAgICAgICAgICAg
ZSA9IHN5cy5leGNfaW5mbygpWzFdCisgICAgICAgICAgICBpZiBucy5oZWxwIG9yIG5zLnZlcnNp
b246CisgICAgICAgICAgICAgICAgIyB3ZSBkb24ndCB3YW50IHRvIHByZXZlbnQgLS1oZWxwLy0t
dmVyc2lvbiB0byB3b3JrCisgICAgICAgICAgICAgICAgIyBzbyBqdXN0IGxldCBpcyBwYXNzIGFu
ZCBwcmludCBhIHdhcm5pbmcgYXQgdGhlIGVuZAorICAgICAgICAgICAgICAgIHNlbGYuX3dhcm4o
ImNvdWxkIG5vdCBsb2FkIGluaXRpYWwgY29uZnRlc3RzICglcylcbiIgJSBlLnBhdGgpCisgICAg
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICBkZWYgX2NoZWNrdmVy
c2lvbihzZWxmKToKKyAgICAgICAgaW1wb3J0IHB5dGVzdAorICAgICAgICBtaW52ZXIgPSBzZWxm
LmluaWNmZy5nZXQoJ21pbnZlcnNpb24nLCBOb25lKQorICAgICAgICBpZiBtaW52ZXI6CisgICAg
ICAgICAgICB2ZXIgPSBtaW52ZXIuc3BsaXQoIi4iKQorICAgICAgICAgICAgbXl2ZXIgPSBweXRl
c3QuX192ZXJzaW9uX18uc3BsaXQoIi4iKQorICAgICAgICAgICAgaWYgbXl2ZXIgPCB2ZXI6Cisg
ICAgICAgICAgICAgICAgcmFpc2UgcHl0ZXN0LlVzYWdlRXJyb3IoCisgICAgICAgICAgICAgICAg
ICAgICIlczolZDogcmVxdWlyZXMgcHl0ZXN0LSVzLCBhY3R1YWwgcHl0ZXN0LSVzJyIgJSgKKyAg
ICAgICAgICAgICAgICAgICAgc2VsZi5pbmljZmcuY29uZmlnLnBhdGgsIHNlbGYuaW5pY2ZnLmxp
bmVvZignbWludmVyc2lvbicpLAorICAgICAgICAgICAgICAgICAgICBtaW52ZXIsIHB5dGVzdC5f
X3ZlcnNpb25fXykpCisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgYXJncywgYWRkb3B0cz1UcnVlKToK
KyAgICAgICAgIyBwYXJzZSBnaXZlbiBjbWRsaW5lIGFyZ3VtZW50cyBpbnRvIHRoaXMgY29uZmln
IG9iamVjdC4KKyAgICAgICAgYXNzZXJ0IG5vdCBoYXNhdHRyKHNlbGYsICdhcmdzJyksICgKKyAg
ICAgICAgICAgICAgICAiY2FuIG9ubHkgcGFyc2UgY21kbGluZSBhcmdzIGF0IG1vc3Qgb25jZSBw
ZXIgQ29uZmlnIG9iamVjdCIpCisgICAgICAgIHNlbGYuX29yaWdhcmdzID0gYXJncworICAgICAg
ICBzZWxmLmhvb2sucHl0ZXN0X2FkZGhvb2tzLmNhbGxfaGlzdG9yaWMoCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAga3dhcmdzPWRpY3QocGx1Z2lubWFuYWdlcj1zZWxmLnBsdWdp
bm1hbmFnZXIpKQorICAgICAgICBzZWxmLl9wcmVwYXJzZShhcmdzLCBhZGRvcHRzPWFkZG9wdHMp
CisgICAgICAgICMgWFhYIGRlcHJlY2F0ZWQgaG9vazoKKyAgICAgICAgc2VsZi5ob29rLnB5dGVz
dF9jbWRsaW5lX3ByZXBhcnNlKGNvbmZpZz1zZWxmLCBhcmdzPWFyZ3MpCisgICAgICAgIGFyZ3Mg
PSBzZWxmLl9wYXJzZXIucGFyc2Vfc2V0b3B0aW9uKGFyZ3MsIHNlbGYub3B0aW9uLCBuYW1lc3Bh
Y2U9c2VsZi5vcHRpb24pCisgICAgICAgIGlmIG5vdCBhcmdzOgorICAgICAgICAgICAgY3dkID0g
b3MuZ2V0Y3dkKCkKKyAgICAgICAgICAgIGlmIGN3ZCA9PSBzZWxmLnJvb3RkaXI6CisgICAgICAg
ICAgICAgICAgYXJncyA9IHNlbGYuZ2V0aW5pKCd0ZXN0cGF0aHMnKQorICAgICAgICAgICAgaWYg
bm90IGFyZ3M6CisgICAgICAgICAgICAgICAgYXJncyA9IFtjd2RdCisgICAgICAgIHNlbGYuYXJn
cyA9IGFyZ3MKKworICAgIGRlZiBhZGRpbml2YWx1ZV9saW5lKHNlbGYsIG5hbWUsIGxpbmUpOgor
ICAgICAgICAiIiIgYWRkIGEgbGluZSB0byBhbiBpbmktZmlsZSBvcHRpb24uIFRoZSBvcHRpb24g
bXVzdCBoYXZlIGJlZW4KKyAgICAgICAgZGVjbGFyZWQgYnV0IG1pZ2h0IG5vdCB5ZXQgYmUgc2V0
IGluIHdoaWNoIGNhc2UgdGhlIGxpbmUgYmVjb21lcyB0aGUKKyAgICAgICAgdGhlIGZpcnN0IGxp
bmUgaW4gaXRzIHZhbHVlLiAiIiIKKyAgICAgICAgeCA9IHNlbGYuZ2V0aW5pKG5hbWUpCisgICAg
ICAgIGFzc2VydCBpc2luc3RhbmNlKHgsIGxpc3QpCisgICAgICAgIHguYXBwZW5kKGxpbmUpICMg
bW9kaWZpZXMgdGhlIGNhY2hlZCBsaXN0IGlubGluZQorCisgICAgZGVmIGdldGluaShzZWxmLCBu
YW1lKToKKyAgICAgICAgIiIiIHJldHVybiBjb25maWd1cmF0aW9uIHZhbHVlIGZyb20gYW4gOnJl
ZjpgaW5pIGZpbGUgPGluaWZpbGVzPmAuIElmIHRoZQorICAgICAgICBzcGVjaWZpZWQgbmFtZSBo
YXNuJ3QgYmVlbiByZWdpc3RlcmVkIHRocm91Z2ggYSBwcmlvcgorICAgICAgICA6cHk6ZnVuYzpg
cGFyc2VyLmFkZGluaSA8cHl0ZXN0LmNvbmZpZy5QYXJzZXIuYWRkaW5pPmAKKyAgICAgICAgY2Fs
bCAodXN1YWxseSBmcm9tIGEgcGx1Z2luKSwgYSBWYWx1ZUVycm9yIGlzIHJhaXNlZC4gIiIiCisg
ICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9pbmljYWNoZVtuYW1lXQorICAg
ICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBzZWxmLl9pbmljYWNoZVtuYW1lXSA9
IHZhbCA9IHNlbGYuX2dldGluaShuYW1lKQorICAgICAgICAgICAgcmV0dXJuIHZhbAorCisgICAg
ZGVmIF9nZXRpbmkoc2VsZiwgbmFtZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlc2Ny
aXB0aW9uLCB0eXBlLCBkZWZhdWx0ID0gc2VsZi5fcGFyc2VyLl9pbmlkaWN0W25hbWVdCisgICAg
ICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVua25v
d24gY29uZmlndXJhdGlvbiB2YWx1ZTogJXIiICUobmFtZSwpKQorICAgICAgICB0cnk6CisgICAg
ICAgICAgICB2YWx1ZSA9IHNlbGYuaW5pY2ZnW25hbWVdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJv
cjoKKyAgICAgICAgICAgIGlmIGRlZmF1bHQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAg
cmV0dXJuIGRlZmF1bHQKKyAgICAgICAgICAgIGlmIHR5cGUgaXMgTm9uZToKKyAgICAgICAgICAg
ICAgICByZXR1cm4gJycKKyAgICAgICAgICAgIHJldHVybiBbXQorICAgICAgICBpZiB0eXBlID09
ICJwYXRobGlzdCI6CisgICAgICAgICAgICBkcCA9IHB5LnBhdGgubG9jYWwoc2VsZi5pbmljZmcu
Y29uZmlnLnBhdGgpLmRpcnBhdGgoKQorICAgICAgICAgICAgbCA9IFtdCisgICAgICAgICAgICBm
b3IgcmVscGF0aCBpbiBzaGxleC5zcGxpdCh2YWx1ZSk6CisgICAgICAgICAgICAgICAgbC5hcHBl
bmQoZHAuam9pbihyZWxwYXRoLCBhYnM9VHJ1ZSkpCisgICAgICAgICAgICByZXR1cm4gbAorICAg
ICAgICBlbGlmIHR5cGUgPT0gImFyZ3MiOgorICAgICAgICAgICAgcmV0dXJuIHNobGV4LnNwbGl0
KHZhbHVlKQorICAgICAgICBlbGlmIHR5cGUgPT0gImxpbmVsaXN0IjoKKyAgICAgICAgICAgIHJl
dHVybiBbdCBmb3IgdCBpbiBtYXAobGFtYmRhIHg6IHguc3RyaXAoKSwgdmFsdWUuc3BsaXQoIlxu
IikpIGlmIHRdCisgICAgICAgIGVsaWYgdHlwZSA9PSAiYm9vbCI6CisgICAgICAgICAgICByZXR1
cm4gYm9vbChfc3RydG9ib29sKHZhbHVlLnN0cmlwKCkpKQorICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgYXNzZXJ0IHR5cGUgaXMgTm9uZQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlCisKKyAg
ICBkZWYgX2dldGNvbmZ0ZXN0X3BhdGhsaXN0KHNlbGYsIG5hbWUsIHBhdGgpOgorICAgICAgICB0
cnk6CisgICAgICAgICAgICBtb2QsIHJlbHJvb3RzID0gc2VsZi5wbHVnaW5tYW5hZ2VyLl9yZ2V0
X3dpdGhfY29uZm1vZChuYW1lLCBwYXRoKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAg
ICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBtb2RwYXRoID0gcHkucGF0aC5sb2NhbChtb2Qu
X19maWxlX18pLmRpcnBhdGgoKQorICAgICAgICBsID0gW10KKyAgICAgICAgZm9yIHJlbHJvb3Qg
aW4gcmVscm9vdHM6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShyZWxyb290LCBweS5w
YXRoLmxvY2FsKToKKyAgICAgICAgICAgICAgICByZWxyb290ID0gcmVscm9vdC5yZXBsYWNlKCIv
IiwgcHkucGF0aC5sb2NhbC5zZXApCisgICAgICAgICAgICAgICAgcmVscm9vdCA9IG1vZHBhdGgu
am9pbihyZWxyb290LCBhYnM9VHJ1ZSkKKyAgICAgICAgICAgIGwuYXBwZW5kKHJlbHJvb3QpCisg
ICAgICAgIHJldHVybiBsCisKKyAgICBkZWYgZ2V0b3B0aW9uKHNlbGYsIG5hbWUsIGRlZmF1bHQ9
bm90c2V0LCBza2lwPUZhbHNlKToKKyAgICAgICAgIiIiIHJldHVybiBjb21tYW5kIGxpbmUgb3B0
aW9uIHZhbHVlLgorCisgICAgICAgIDphcmcgbmFtZTogbmFtZSBvZiB0aGUgb3B0aW9uLiAgWW91
IG1heSBhbHNvIHNwZWNpZnkKKyAgICAgICAgICAgIHRoZSBsaXRlcmFsIGBgLS1PUFRgYCBvcHRp
b24gaW5zdGVhZCBvZiB0aGUgImRlc3QiIG9wdGlvbiBuYW1lLgorICAgICAgICA6YXJnIGRlZmF1
bHQ6IGRlZmF1bHQgdmFsdWUgaWYgbm8gb3B0aW9uIG9mIHRoYXQgbmFtZSBleGlzdHMuCisgICAg
ICAgIDphcmcgc2tpcDogaWYgVHJ1ZSByYWlzZSBweXRlc3Quc2tpcCBpZiBvcHRpb24gZG9lcyBu
b3QgZXhpc3RzCisgICAgICAgICAgICBvciBoYXMgYSBOb25lIHZhbHVlLgorICAgICAgICAiIiIK
KyAgICAgICAgbmFtZSA9IHNlbGYuX29wdDJkZXN0LmdldChuYW1lLCBuYW1lKQorICAgICAgICB0
cnk6CisgICAgICAgICAgICB2YWwgPSBnZXRhdHRyKHNlbGYub3B0aW9uLCBuYW1lKQorICAgICAg
ICAgICAgaWYgdmFsIGlzIE5vbmUgYW5kIHNraXA6CisgICAgICAgICAgICAgICAgcmFpc2UgQXR0
cmlidXRlRXJyb3IobmFtZSkKKyAgICAgICAgICAgIHJldHVybiB2YWwKKyAgICAgICAgZXhjZXB0
IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgaWYgZGVmYXVsdCBpcyBub3Qgbm90c2V0Ogor
ICAgICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0CisgICAgICAgICAgICBpZiBza2lwOgorICAg
ICAgICAgICAgICAgIGltcG9ydCBweXRlc3QKKyAgICAgICAgICAgICAgICBweXRlc3Quc2tpcCgi
bm8gJXIgb3B0aW9uIGZvdW5kIiAlKG5hbWUsKSkKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJy
b3IoIm5vIG9wdGlvbiBuYW1lZCAlciIgJSAobmFtZSwpKQorCisgICAgZGVmIGdldHZhbHVlKHNl
bGYsIG5hbWUsIHBhdGg9Tm9uZSk6CisgICAgICAgICIiIiAoZGVwcmVjYXRlZCwgdXNlIGdldG9w
dGlvbigpKSAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuZ2V0b3B0aW9uKG5hbWUpCisKKyAgICBk
ZWYgZ2V0dmFsdWVvcnNraXAoc2VsZiwgbmFtZSwgcGF0aD1Ob25lKToKKyAgICAgICAgIiIiIChk
ZXByZWNhdGVkLCB1c2UgZ2V0b3B0aW9uKHNraXA9VHJ1ZSkpICIiIgorICAgICAgICByZXR1cm4g
c2VsZi5nZXRvcHRpb24obmFtZSwgc2tpcD1UcnVlKQorCitkZWYgZXhpc3RzKHBhdGgsIGlnbm9y
ZT1FbnZpcm9ubWVudEVycm9yKToKKyAgICB0cnk6CisgICAgICAgIHJldHVybiBwYXRoLmNoZWNr
KCkKKyAgICBleGNlcHQgaWdub3JlOgorICAgICAgICByZXR1cm4gRmFsc2UKKworZGVmIGdldGNm
ZyhhcmdzLCBpbmliYXNlbmFtZXMpOgorICAgIGFyZ3MgPSBbeCBmb3IgeCBpbiBhcmdzIGlmIG5v
dCBzdHIoeCkuc3RhcnRzd2l0aCgiLSIpXQorICAgIGlmIG5vdCBhcmdzOgorICAgICAgICBhcmdz
ID0gW3B5LnBhdGgubG9jYWwoKV0KKyAgICBmb3IgYXJnIGluIGFyZ3M6CisgICAgICAgIGFyZyA9
IHB5LnBhdGgubG9jYWwoYXJnKQorICAgICAgICBmb3IgYmFzZSBpbiBhcmcucGFydHMocmV2ZXJz
ZT1UcnVlKToKKyAgICAgICAgICAgIGZvciBpbmliYXNlbmFtZSBpbiBpbmliYXNlbmFtZXM6Cisg
ICAgICAgICAgICAgICAgcCA9IGJhc2Uuam9pbihpbmliYXNlbmFtZSkKKyAgICAgICAgICAgICAg
ICBpZiBleGlzdHMocCk6CisgICAgICAgICAgICAgICAgICAgIGluaWNvbmZpZyA9IHB5LmluaWNv
bmZpZy5JbmlDb25maWcocCkKKyAgICAgICAgICAgICAgICAgICAgaWYgJ3B5dGVzdCcgaW4gaW5p
Y29uZmlnLnNlY3Rpb25zOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2UsIHAs
IGluaWNvbmZpZ1sncHl0ZXN0J10KKyAgICAgICAgICAgICAgICAgICAgZWxpZiBpbmliYXNlbmFt
ZSA9PSAicHl0ZXN0LmluaSI6CisgICAgICAgICAgICAgICAgICAgICAgICAjIGFsbG93ZWQgdG8g
YmUgZW1wdHkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBiYXNlLCBwLCB7fQorICAg
IHJldHVybiBOb25lLCBOb25lLCBOb25lCisKKworZGVmIGdldF9jb21tb25fYW5jZXN0b3IoYXJn
cyk6CisgICAgIyBhcmdzIGFyZSB3aGF0IHdlIGdldCBhZnRlciBlYXJseSBjb21tYW5kIGxpbmUg
cGFyc2luZyAodXN1YWxseQorICAgICMgc3RyaW5ncywgYnV0IGNhbiBiZSBweS5wYXRoLmxvY2Fs
IG9iamVjdHMgYXMgd2VsbCkKKyAgICBjb21tb25fYW5jZXN0b3IgPSBOb25lCisgICAgZm9yIGFy
ZyBpbiBhcmdzOgorICAgICAgICBpZiBzdHIoYXJnKVswXSA9PSAiLSI6CisgICAgICAgICAgICBj
b250aW51ZQorICAgICAgICBwID0gcHkucGF0aC5sb2NhbChhcmcpCisgICAgICAgIGlmIGNvbW1v
bl9hbmNlc3RvciBpcyBOb25lOgorICAgICAgICAgICAgY29tbW9uX2FuY2VzdG9yID0gcAorICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgaWYgcC5yZWx0byhjb21tb25fYW5jZXN0b3IpIG9yIHAg
PT0gY29tbW9uX2FuY2VzdG9yOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAg
ICBlbGlmIGNvbW1vbl9hbmNlc3Rvci5yZWx0byhwKToKKyAgICAgICAgICAgICAgICBjb21tb25f
YW5jZXN0b3IgPSBwCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNoYXJlZCA9
IHAuY29tbW9uKGNvbW1vbl9hbmNlc3RvcikKKyAgICAgICAgICAgICAgICBpZiBzaGFyZWQgaXMg
bm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGNvbW1vbl9hbmNlc3RvciA9IHNoYXJlZAor
ICAgIGlmIGNvbW1vbl9hbmNlc3RvciBpcyBOb25lOgorICAgICAgICBjb21tb25fYW5jZXN0b3Ig
PSBweS5wYXRoLmxvY2FsKCkKKyAgICBlbGlmIG5vdCBjb21tb25fYW5jZXN0b3IuaXNkaXIoKToK
KyAgICAgICAgY29tbW9uX2FuY2VzdG9yID0gY29tbW9uX2FuY2VzdG9yLmRpcnBhdGgoKQorICAg
IHJldHVybiBjb21tb25fYW5jZXN0b3IKKworCitkZWYgZGV0ZXJtaW5lX3NldHVwKGluaWZpbGUs
IGFyZ3MpOgorICAgIGlmIGluaWZpbGU6CisgICAgICAgIGluaWNvbmZpZyA9IHB5LmluaWNvbmZp
Zy5JbmlDb25maWcoaW5pZmlsZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaW5pY2ZnID0g
aW5pY29uZmlnWyJweXRlc3QiXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAg
ICBpbmljZmcgPSBOb25lCisgICAgICAgIHJvb3RkaXIgPSBnZXRfY29tbW9uX2FuY2VzdG9yKGFy
Z3MpCisgICAgZWxzZToKKyAgICAgICAgYW5jZXN0b3IgPSBnZXRfY29tbW9uX2FuY2VzdG9yKGFy
Z3MpCisgICAgICAgIHJvb3RkaXIsIGluaWZpbGUsIGluaWNmZyA9IGdldGNmZygKKyAgICAgICAg
ICAgIFthbmNlc3Rvcl0sIFsicHl0ZXN0LmluaSIsICJ0b3guaW5pIiwgInNldHVwLmNmZyJdKQor
ICAgICAgICBpZiByb290ZGlyIGlzIE5vbmU6CisgICAgICAgICAgICBmb3Igcm9vdGRpciBpbiBh
bmNlc3Rvci5wYXJ0cyhyZXZlcnNlPVRydWUpOgorICAgICAgICAgICAgICAgIGlmIHJvb3RkaXIu
am9pbigic2V0dXAucHkiKS5leGlzdHMoKToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAg
ICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcm9vdGRpciA9IGFuY2VzdG9yCisgICAg
cmV0dXJuIHJvb3RkaXIsIGluaWZpbGUsIGluaWNmZyBvciB7fQorCisKK2RlZiBzZXRucyhvYmos
IGRpYyk6CisgICAgaW1wb3J0IHB5dGVzdAorICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBkaWMuaXRl
bXMoKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZGljdCk6CisgICAgICAgICAgICBt
b2QgPSBnZXRhdHRyKG9iaiwgbmFtZSwgTm9uZSkKKyAgICAgICAgICAgIGlmIG1vZCBpcyBOb25l
OgorICAgICAgICAgICAgICAgIG1vZG5hbWUgPSAicHl0ZXN0LiVzIiAlIG5hbWUKKyAgICAgICAg
ICAgICAgICBtb2QgPSB0eXBlcy5Nb2R1bGVUeXBlKG1vZG5hbWUpCisgICAgICAgICAgICAgICAg
c3lzLm1vZHVsZXNbbW9kbmFtZV0gPSBtb2QKKyAgICAgICAgICAgICAgICBtb2QuX19hbGxfXyA9
IFtdCisgICAgICAgICAgICAgICAgc2V0YXR0cihvYmosIG5hbWUsIG1vZCkKKyAgICAgICAgICAg
IG9iai5fX2FsbF9fLmFwcGVuZChuYW1lKQorICAgICAgICAgICAgc2V0bnMobW9kLCB2YWx1ZSkK
KyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNldGF0dHIob2JqLCBuYW1lLCB2YWx1ZSkKKyAg
ICAgICAgICAgIG9iai5fX2FsbF9fLmFwcGVuZChuYW1lKQorICAgICAgICAgICAgI2lmIG9iaiAh
PSBweXRlc3Q6CisgICAgICAgICAgICAjICAgIHB5dGVzdC5fX2FsbF9fLmFwcGVuZChuYW1lKQor
ICAgICAgICAgICAgc2V0YXR0cihweXRlc3QsIG5hbWUsIHZhbHVlKQorCisKK2RlZiBjcmVhdGVf
dGVybWluYWxfd3JpdGVyKGNvbmZpZywgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAiIiJDcmVhdGUg
YSBUZXJtaW5hbFdyaXRlciBpbnN0YW5jZSBjb25maWd1cmVkIGFjY29yZGluZyB0byB0aGUgb3B0
aW9ucworICAgIGluIHRoZSBjb25maWcgb2JqZWN0LiBFdmVyeSBjb2RlIHdoaWNoIHJlcXVpcmVz
IGEgVGVybWluYWxXcml0ZXIgb2JqZWN0CisgICAgYW5kIGhhcyBhY2Nlc3MgdG8gYSBjb25maWcg
b2JqZWN0IHNob3VsZCB1c2UgdGhpcyBmdW5jdGlvbi4KKyAgICAiIiIKKyAgICB0dyA9IHB5Lmlv
LlRlcm1pbmFsV3JpdGVyKCphcmdzLCAqKmt3YXJncykKKyAgICBpZiBjb25maWcub3B0aW9uLmNv
bG9yID09ICd5ZXMnOgorICAgICAgICB0dy5oYXNtYXJrdXAgPSBUcnVlCisgICAgaWYgY29uZmln
Lm9wdGlvbi5jb2xvciA9PSAnbm8nOgorICAgICAgICB0dy5oYXNtYXJrdXAgPSBGYWxzZQorICAg
IHJldHVybiB0dworCisKK2RlZiBfc3RydG9ib29sKHZhbCk6CisgICAgIiIiQ29udmVydCBhIHN0
cmluZyByZXByZXNlbnRhdGlvbiBvZiB0cnV0aCB0byB0cnVlICgxKSBvciBmYWxzZSAoMCkuCisK
KyAgICBUcnVlIHZhbHVlcyBhcmUgJ3knLCAneWVzJywgJ3QnLCAndHJ1ZScsICdvbicsIGFuZCAn
MSc7IGZhbHNlIHZhbHVlcworICAgIGFyZSAnbicsICdubycsICdmJywgJ2ZhbHNlJywgJ29mZics
IGFuZCAnMCcuICBSYWlzZXMgVmFsdWVFcnJvciBpZgorICAgICd2YWwnIGlzIGFueXRoaW5nIGVs
c2UuCisKKyAgICAuLiBub3RlOjogY29waWVkIGZyb20gZGlzdHV0aWxzLnV0aWwKKyAgICAiIiIK
KyAgICB2YWwgPSB2YWwubG93ZXIoKQorICAgIGlmIHZhbCBpbiAoJ3knLCAneWVzJywgJ3QnLCAn
dHJ1ZScsICdvbicsICcxJyk6CisgICAgICAgIHJldHVybiAxCisgICAgZWxpZiB2YWwgaW4gKCdu
JywgJ25vJywgJ2YnLCAnZmFsc2UnLCAnb2ZmJywgJzAnKToKKyAgICAgICAgcmV0dXJuIDAKKyAg
ICBlbHNlOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJpbnZhbGlkIHRydXRoIHZhbHVlICVy
IiAlICh2YWwsKSkKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29s
cy9weXRlc3QvX3B5dGVzdC9kb2N0ZXN0LnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNj
L3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L2RvY3Rlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLmE1N2Y3YTQ5NDllCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVy
VGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L2RvY3Rlc3QucHkKQEAgLTAs
MCArMSwyOTAgQEAKKyIiIiBkaXNjb3ZlciBhbmQgcnVuIGRvY3Rlc3RzIGluIG1vZHVsZXMgYW5k
IHRlc3QgZmlsZXMuIiIiCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAor
CitpbXBvcnQgdHJhY2ViYWNrCisKK2ltcG9ydCBweXRlc3QKK2Zyb20gX3B5dGVzdC5fY29kZS5j
b2RlIGltcG9ydCBUZXJtaW5hbFJlcHIsIFJlcHJGaWxlTG9jYXRpb24sIEV4Y2VwdGlvbkluZm8K
K2Zyb20gX3B5dGVzdC5weXRob24gaW1wb3J0IEZpeHR1cmVSZXF1ZXN0CisKKworCitkZWYgcHl0
ZXN0X2FkZG9wdGlvbihwYXJzZXIpOgorICAgIHBhcnNlci5hZGRpbmkoJ2RvY3Rlc3Rfb3B0aW9u
ZmxhZ3MnLCAnb3B0aW9uIGZsYWdzIGZvciBkb2N0ZXN0cycsCisgICAgICAgIHR5cGU9ImFyZ3Mi
LCBkZWZhdWx0PVsiRUxMSVBTSVMiXSkKKyAgICBncm91cCA9IHBhcnNlci5nZXRncm91cCgiY29s
bGVjdCIpCisgICAgZ3JvdXAuYWRkb3B0aW9uKCItLWRvY3Rlc3QtbW9kdWxlcyIsCisgICAgICAg
IGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgIGhlbHA9InJ1biBk
b2N0ZXN0cyBpbiBhbGwgLnB5IG1vZHVsZXMiLAorICAgICAgICBkZXN0PSJkb2N0ZXN0bW9kdWxl
cyIpCisgICAgZ3JvdXAuYWRkb3B0aW9uKCItLWRvY3Rlc3QtZ2xvYiIsCisgICAgICAgIGFjdGlv
bj0iYXBwZW5kIiwgZGVmYXVsdD1bXSwgbWV0YXZhcj0icGF0IiwKKyAgICAgICAgaGVscD0iZG9j
dGVzdHMgZmlsZSBtYXRjaGluZyBwYXR0ZXJuLCBkZWZhdWx0OiB0ZXN0Ki50eHQiLAorICAgICAg
ICBkZXN0PSJkb2N0ZXN0Z2xvYiIpCisgICAgZ3JvdXAuYWRkb3B0aW9uKCItLWRvY3Rlc3QtaWdu
b3JlLWltcG9ydC1lcnJvcnMiLAorICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLCBkZWZhdWx0
PUZhbHNlLAorICAgICAgICBoZWxwPSJpZ25vcmUgZG9jdGVzdCBJbXBvcnRFcnJvcnMiLAorICAg
ICAgICBkZXN0PSJkb2N0ZXN0X2lnbm9yZV9pbXBvcnRfZXJyb3JzIikKKworCitkZWYgcHl0ZXN0
X2NvbGxlY3RfZmlsZShwYXRoLCBwYXJlbnQpOgorICAgIGNvbmZpZyA9IHBhcmVudC5jb25maWcK
KyAgICBpZiBwYXRoLmV4dCA9PSAiLnB5IjoKKyAgICAgICAgaWYgY29uZmlnLm9wdGlvbi5kb2N0
ZXN0bW9kdWxlczoKKyAgICAgICAgICAgIHJldHVybiBEb2N0ZXN0TW9kdWxlKHBhdGgsIHBhcmVu
dCkKKyAgICBlbGlmIF9pc19kb2N0ZXN0KGNvbmZpZywgcGF0aCwgcGFyZW50KToKKyAgICAgICAg
cmV0dXJuIERvY3Rlc3RUZXh0ZmlsZShwYXRoLCBwYXJlbnQpCisKKworZGVmIF9pc19kb2N0ZXN0
KGNvbmZpZywgcGF0aCwgcGFyZW50KToKKyAgICBpZiBwYXRoLmV4dCBpbiAoJy50eHQnLCAnLnJz
dCcpIGFuZCBwYXJlbnQuc2Vzc2lvbi5pc2luaXRwYXRoKHBhdGgpOgorICAgICAgICByZXR1cm4g
VHJ1ZQorICAgIGdsb2JzID0gY29uZmlnLmdldG9wdGlvbigiZG9jdGVzdGdsb2IiKSBvciBbJ3Rl
c3QqLnR4dCddCisgICAgZm9yIGdsb2IgaW4gZ2xvYnM6CisgICAgICAgIGlmIHBhdGguY2hlY2so
Zm5tYXRjaD1nbG9iKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgcmV0dXJuIEZhbHNl
CisKKworY2xhc3MgUmVwckZhaWxEb2N0ZXN0KFRlcm1pbmFsUmVwcik6CisKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgcmVwcmxvY2F0aW9uLCBsaW5lcyk6CisgICAgICAgIHNlbGYucmVwcmxvY2F0
aW9uID0gcmVwcmxvY2F0aW9uCisgICAgICAgIHNlbGYubGluZXMgPSBsaW5lcworCisgICAgZGVm
IHRvdGVybWluYWwoc2VsZiwgdHcpOgorICAgICAgICBmb3IgbGluZSBpbiBzZWxmLmxpbmVzOgor
ICAgICAgICAgICAgdHcubGluZShsaW5lKQorICAgICAgICBzZWxmLnJlcHJsb2NhdGlvbi50b3Rl
cm1pbmFsKHR3KQorCisKK2NsYXNzIERvY3Rlc3RJdGVtKHB5dGVzdC5JdGVtKToKKworICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBwYXJlbnQsIHJ1bm5lcj1Ob25lLCBkdGVzdD1Ob25lKToK
KyAgICAgICAgc3VwZXIoRG9jdGVzdEl0ZW0sIHNlbGYpLl9faW5pdF9fKG5hbWUsIHBhcmVudCkK
KyAgICAgICAgc2VsZi5ydW5uZXIgPSBydW5uZXIKKyAgICAgICAgc2VsZi5kdGVzdCA9IGR0ZXN0
CisgICAgICAgIHNlbGYub2JqID0gTm9uZQorICAgICAgICBzZWxmLmZpeHR1cmVfcmVxdWVzdCA9
IE5vbmUKKworICAgIGRlZiBzZXR1cChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5kdGVzdCBpcyBu
b3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuZml4dHVyZV9yZXF1ZXN0ID0gX3NldHVwX2ZpeHR1
cmVzKHNlbGYpCisgICAgICAgICAgICBnbG9icyA9IGRpY3QoZ2V0Zml4dHVyZT1zZWxmLmZpeHR1
cmVfcmVxdWVzdC5nZXRmdW5jYXJndmFsdWUpCisgICAgICAgICAgICBzZWxmLmR0ZXN0Lmdsb2Jz
LnVwZGF0ZShnbG9icykKKworICAgIGRlZiBydW50ZXN0KHNlbGYpOgorICAgICAgICBfY2hlY2tf
YWxsX3NraXBwZWQoc2VsZi5kdGVzdCkKKyAgICAgICAgc2VsZi5ydW5uZXIucnVuKHNlbGYuZHRl
c3QpCisKKyAgICBkZWYgcmVwcl9mYWlsdXJlKHNlbGYsIGV4Y2luZm8pOgorICAgICAgICBpbXBv
cnQgZG9jdGVzdAorICAgICAgICBpZiBleGNpbmZvLmVycmlzaW5zdGFuY2UoKGRvY3Rlc3QuRG9j
VGVzdEZhaWx1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdGVzdC5V
bmV4cGVjdGVkRXhjZXB0aW9uKSk6CisgICAgICAgICAgICBkb2N0ZXN0ZmFpbHVyZSA9IGV4Y2lu
Zm8udmFsdWUKKyAgICAgICAgICAgIGV4YW1wbGUgPSBkb2N0ZXN0ZmFpbHVyZS5leGFtcGxlCisg
ICAgICAgICAgICB0ZXN0ID0gZG9jdGVzdGZhaWx1cmUudGVzdAorICAgICAgICAgICAgZmlsZW5h
bWUgPSB0ZXN0LmZpbGVuYW1lCisgICAgICAgICAgICBpZiB0ZXN0LmxpbmVubyBpcyBOb25lOgor
ICAgICAgICAgICAgICAgIGxpbmVubyA9IE5vbmUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICAgICAgbGluZW5vID0gdGVzdC5saW5lbm8gKyBleGFtcGxlLmxpbmVubyArIDEKKyAgICAg
ICAgICAgIG1lc3NhZ2UgPSBleGNpbmZvLnR5cGUuX19uYW1lX18KKyAgICAgICAgICAgIHJlcHJs
b2NhdGlvbiA9IFJlcHJGaWxlTG9jYXRpb24oZmlsZW5hbWUsIGxpbmVubywgbWVzc2FnZSkKKyAg
ICAgICAgICAgIGNoZWNrZXIgPSBfZ2V0X2NoZWNrZXIoKQorICAgICAgICAgICAgUkVQT1JUX1VE
SUZGID0gZG9jdGVzdC5SRVBPUlRfVURJRkYKKyAgICAgICAgICAgIGlmIGxpbmVubyBpcyBub3Qg
Tm9uZToKKyAgICAgICAgICAgICAgICBsaW5lcyA9IGRvY3Rlc3RmYWlsdXJlLnRlc3QuZG9jc3Ry
aW5nLnNwbGl0bGluZXMoRmFsc2UpCisgICAgICAgICAgICAgICAgIyBhZGQgbGluZSBudW1iZXJz
IHRvIHRoZSBsZWZ0IG9mIHRoZSBlcnJvciBtZXNzYWdlCisgICAgICAgICAgICAgICAgbGluZXMg
PSBbIiUwM2QgJXMiICUgKGkgKyB0ZXN0LmxpbmVubyArIDEsIHgpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yIChpLCB4KSBpbiBlbnVtZXJhdGUobGluZXMpXQorICAgICAgICAgICAgICAg
ICMgdHJpbSBkb2NzdHJpbmcgZXJyb3IgbGluZXMgdG8gMTAKKyAgICAgICAgICAgICAgICBsaW5l
cyA9IGxpbmVzW2V4YW1wbGUubGluZW5vIC0gOTpleGFtcGxlLmxpbmVubyArIDFdCisgICAgICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxpbmVzID0gWydFWEFNUExFIExPQ0FUSU9OIFVO
S05PV04sIG5vdCBzaG93aW5nIGFsbCB0ZXN0cyBvZiB0aGF0IGV4YW1wbGUnXQorICAgICAgICAg
ICAgICAgIGluZGVudCA9ICc+Pj4nCisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZXhhbXBs
ZS5zb3VyY2Uuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQo
Jz8/PyAlcyAlcycgJSAoaW5kZW50LCBsaW5lKSkKKyAgICAgICAgICAgICAgICAgICAgaW5kZW50
ID0gJy4uLicKKyAgICAgICAgICAgIGlmIGV4Y2luZm8uZXJyaXNpbnN0YW5jZShkb2N0ZXN0LkRv
Y1Rlc3RGYWlsdXJlKToKKyAgICAgICAgICAgICAgICBsaW5lcyArPSBjaGVja2VyLm91dHB1dF9k
aWZmZXJlbmNlKGV4YW1wbGUsCisgICAgICAgICAgICAgICAgICAgICAgICBkb2N0ZXN0ZmFpbHVy
ZS5nb3QsIFJFUE9SVF9VRElGRikuc3BsaXQoIlxuIikKKyAgICAgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICAgICAgaW5uZXJfZXhjaW5mbyA9IEV4Y2VwdGlvbkluZm8oZXhjaW5mby52YWx1ZS5l
eGNfaW5mbykKKyAgICAgICAgICAgICAgICBsaW5lcyArPSBbIlVORVhQRUNURUQgRVhDRVBUSU9O
OiAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcHIoaW5uZXJfZXhjaW5mby52
YWx1ZSldCisgICAgICAgICAgICAgICAgbGluZXMgKz0gdHJhY2ViYWNrLmZvcm1hdF9leGNlcHRp
b24oKmV4Y2luZm8udmFsdWUuZXhjX2luZm8pCisgICAgICAgICAgICByZXR1cm4gUmVwckZhaWxE
b2N0ZXN0KHJlcHJsb2NhdGlvbiwgbGluZXMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBy
ZXR1cm4gc3VwZXIoRG9jdGVzdEl0ZW0sIHNlbGYpLnJlcHJfZmFpbHVyZShleGNpbmZvKQorCisg
ICAgZGVmIHJlcG9ydGluZm8oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmZzcGF0aCwgTm9u
ZSwgIltkb2N0ZXN0XSAlcyIgJSBzZWxmLm5hbWUKKworCitkZWYgX2dldF9mbGFnX2xvb2t1cCgp
OgorICAgIGltcG9ydCBkb2N0ZXN0CisgICAgcmV0dXJuIGRpY3QoRE9OVF9BQ0NFUFRfVFJVRV9G
T1JfMT1kb2N0ZXN0LkRPTlRfQUNDRVBUX1RSVUVfRk9SXzEsCisgICAgICAgICAgICAgICAgRE9O
VF9BQ0NFUFRfQkxBTktMSU5FPWRvY3Rlc3QuRE9OVF9BQ0NFUFRfQkxBTktMSU5FLAorICAgICAg
ICAgICAgICAgIE5PUk1BTElaRV9XSElURVNQQUNFPWRvY3Rlc3QuTk9STUFMSVpFX1dISVRFU1BB
Q0UsCisgICAgICAgICAgICAgICAgRUxMSVBTSVM9ZG9jdGVzdC5FTExJUFNJUywKKyAgICAgICAg
ICAgICAgICBJR05PUkVfRVhDRVBUSU9OX0RFVEFJTD1kb2N0ZXN0LklHTk9SRV9FWENFUFRJT05f
REVUQUlMLAorICAgICAgICAgICAgICAgIENPTVBBUklTT05fRkxBR1M9ZG9jdGVzdC5DT01QQVJJ
U09OX0ZMQUdTLAorICAgICAgICAgICAgICAgIEFMTE9XX1VOSUNPREU9X2dldF9hbGxvd191bmlj
b2RlX2ZsYWcoKSwKKyAgICAgICAgICAgICAgICBBTExPV19CWVRFUz1fZ2V0X2FsbG93X2J5dGVz
X2ZsYWcoKSwKKyAgICAgICAgICAgICAgICApCisKKworZGVmIGdldF9vcHRpb25mbGFncyhwYXJl
bnQpOgorICAgIG9wdGlvbmZsYWdzX3N0ciA9IHBhcmVudC5jb25maWcuZ2V0aW5pKCJkb2N0ZXN0
X29wdGlvbmZsYWdzIikKKyAgICBmbGFnX2xvb2t1cF90YWJsZSA9IF9nZXRfZmxhZ19sb29rdXAo
KQorICAgIGZsYWdfYWNjID0gMAorICAgIGZvciBmbGFnIGluIG9wdGlvbmZsYWdzX3N0cjoKKyAg
ICAgICAgZmxhZ19hY2MgfD0gZmxhZ19sb29rdXBfdGFibGVbZmxhZ10KKyAgICByZXR1cm4gZmxh
Z19hY2MKKworCitjbGFzcyBEb2N0ZXN0VGV4dGZpbGUoRG9jdGVzdEl0ZW0sIHB5dGVzdC5Nb2R1
bGUpOgorCisgICAgZGVmIHJ1bnRlc3Qoc2VsZik6CisgICAgICAgIGltcG9ydCBkb2N0ZXN0Cisg
ICAgICAgIGZpeHR1cmVfcmVxdWVzdCA9IF9zZXR1cF9maXh0dXJlcyhzZWxmKQorCisgICAgICAg
ICMgaW5zcGlyZWQgYnkgZG9jdGVzdC50ZXN0ZmlsZTsgaWRlYWxseSB3ZSB3b3VsZCB1c2UgaXQg
ZGlyZWN0bHksCisgICAgICAgICMgYnV0IGl0IGRvZXNuJ3Qgc3VwcG9ydCBwYXNzaW5nIGEgY3Vz
dG9tIGNoZWNrZXIKKyAgICAgICAgdGV4dCA9IHNlbGYuZnNwYXRoLnJlYWQoKQorICAgICAgICBm
aWxlbmFtZSA9IHN0cihzZWxmLmZzcGF0aCkKKyAgICAgICAgbmFtZSA9IHNlbGYuZnNwYXRoLmJh
c2VuYW1lCisgICAgICAgIGdsb2JzID0gZGljdChnZXRmaXh0dXJlPWZpeHR1cmVfcmVxdWVzdC5n
ZXRmdW5jYXJndmFsdWUpCisgICAgICAgIGlmICdfX25hbWVfXycgbm90IGluIGdsb2JzOgorICAg
ICAgICAgICAgZ2xvYnNbJ19fbmFtZV9fJ10gPSAnX19tYWluX18nCisKKyAgICAgICAgb3B0aW9u
ZmxhZ3MgPSBnZXRfb3B0aW9uZmxhZ3Moc2VsZikKKyAgICAgICAgcnVubmVyID0gZG9jdGVzdC5E
ZWJ1Z1J1bm5lcih2ZXJib3NlPTAsIG9wdGlvbmZsYWdzPW9wdGlvbmZsYWdzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZXI9X2dldF9jaGVja2VyKCkpCisKKyAg
ICAgICAgcGFyc2VyID0gZG9jdGVzdC5Eb2NUZXN0UGFyc2VyKCkKKyAgICAgICAgdGVzdCA9IHBh
cnNlci5nZXRfZG9jdGVzdCh0ZXh0LCBnbG9icywgbmFtZSwgZmlsZW5hbWUsIDApCisgICAgICAg
IF9jaGVja19hbGxfc2tpcHBlZCh0ZXN0KQorICAgICAgICBydW5uZXIucnVuKHRlc3QpCisKKwor
ZGVmIF9jaGVja19hbGxfc2tpcHBlZCh0ZXN0KToKKyAgICAiIiJyYWlzZXMgcHl0ZXN0LnNraXAo
KSBpZiBhbGwgZXhhbXBsZXMgaW4gdGhlIGdpdmVuIERvY1Rlc3QgaGF2ZSB0aGUgU0tJUAorICAg
IG9wdGlvbiBzZXQuCisgICAgIiIiCisgICAgaW1wb3J0IGRvY3Rlc3QKKyAgICBhbGxfc2tpcHBl
ZCA9IGFsbCh4Lm9wdGlvbnMuZ2V0KGRvY3Rlc3QuU0tJUCwgRmFsc2UpIGZvciB4IGluIHRlc3Qu
ZXhhbXBsZXMpCisgICAgaWYgYWxsX3NraXBwZWQ6CisgICAgICAgIHB5dGVzdC5za2lwKCdhbGwg
dGVzdHMgc2tpcHBlZCBieSArU0tJUCBvcHRpb24nKQorCisKK2NsYXNzIERvY3Rlc3RNb2R1bGUo
cHl0ZXN0Lk1vZHVsZSk6CisgICAgZGVmIGNvbGxlY3Qoc2VsZik6CisgICAgICAgIGltcG9ydCBk
b2N0ZXN0CisgICAgICAgIGlmIHNlbGYuZnNwYXRoLmJhc2VuYW1lID09ICJjb25mdGVzdC5weSI6
CisgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLmNvbmZpZy5wbHVnaW5tYW5hZ2VyLl9pbXBvcnRj
b25mdGVzdChzZWxmLmZzcGF0aCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRyeToKKyAg
ICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLmZzcGF0aC5weWltcG9ydCgpCisgICAgICAgICAg
ICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5jb25maWcuZ2V0
dmFsdWUoJ2RvY3Rlc3RfaWdub3JlX2ltcG9ydF9lcnJvcnMnKToKKyAgICAgICAgICAgICAgICAg
ICAgcHl0ZXN0LnNraXAoJ3VuYWJsZSB0byBpbXBvcnQgbW9kdWxlICVyJyAlIHNlbGYuZnNwYXRo
KQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAg
ICAgICMgdXNlcyBpbnRlcm5hbCBkb2N0ZXN0IG1vZHVsZSBwYXJzaW5nIG1lY2hhbmlzbQorICAg
ICAgICBmaW5kZXIgPSBkb2N0ZXN0LkRvY1Rlc3RGaW5kZXIoKQorICAgICAgICBvcHRpb25mbGFn
cyA9IGdldF9vcHRpb25mbGFncyhzZWxmKQorICAgICAgICBydW5uZXIgPSBkb2N0ZXN0LkRlYnVn
UnVubmVyKHZlcmJvc2U9MCwgb3B0aW9uZmxhZ3M9b3B0aW9uZmxhZ3MsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlcj1fZ2V0X2NoZWNrZXIoKSkKKyAgICAgICAg
Zm9yIHRlc3QgaW4gZmluZGVyLmZpbmQobW9kdWxlLCBtb2R1bGUuX19uYW1lX18pOgorICAgICAg
ICAgICAgaWYgdGVzdC5leGFtcGxlczogICMgc2tpcCBlbXB0eSBkb2N0ZXN0cworICAgICAgICAg
ICAgICAgIHlpZWxkIERvY3Rlc3RJdGVtKHRlc3QubmFtZSwgc2VsZiwgcnVubmVyLCB0ZXN0KQor
CisKK2RlZiBfc2V0dXBfZml4dHVyZXMoZG9jdGVzdF9pdGVtKToKKyAgICAiIiIKKyAgICBVc2Vk
IGJ5IERvY3Rlc3RUZXh0ZmlsZSBhbmQgRG9jdGVzdEl0ZW0gdG8gc2V0dXAgZml4dHVyZSBpbmZv
cm1hdGlvbi4KKyAgICAiIiIKKyAgICBkZWYgZnVuYygpOgorICAgICAgICBwYXNzCisKKyAgICBk
b2N0ZXN0X2l0ZW0uZnVuY2FyZ3MgPSB7fQorICAgIGZtID0gZG9jdGVzdF9pdGVtLnNlc3Npb24u
X2ZpeHR1cmVtYW5hZ2VyCisgICAgZG9jdGVzdF9pdGVtLl9maXh0dXJlaW5mbyA9IGZtLmdldGZp
eHR1cmVpbmZvKG5vZGU9ZG9jdGVzdF9pdGVtLCBmdW5jPWZ1bmMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNscz1Ob25lLCBmdW5jYXJncz1GYWxz
ZSkKKyAgICBmaXh0dXJlX3JlcXVlc3QgPSBGaXh0dXJlUmVxdWVzdChkb2N0ZXN0X2l0ZW0pCisg
ICAgZml4dHVyZV9yZXF1ZXN0Ll9maWxsZml4dHVyZXMoKQorICAgIHJldHVybiBmaXh0dXJlX3Jl
cXVlc3QKKworCitkZWYgX2dldF9jaGVja2VyKCk6CisgICAgIiIiCisgICAgUmV0dXJucyBhIGRv
Y3Rlc3QuT3V0cHV0Q2hlY2tlciBzdWJjbGFzcyB0aGF0IHRha2VzIGluIGFjY291bnQgdGhlCisg
ICAgQUxMT1dfVU5JQ09ERSBvcHRpb24gdG8gaWdub3JlIHUnJyBwcmVmaXhlcyBpbiBzdHJpbmdz
IGFuZCBBTExPV19CWVRFUworICAgIHRvIHN0cmlwIGInJyBwcmVmaXhlcy4KKyAgICBVc2VmdWwg
d2hlbiB0aGUgc2FtZSBkb2N0ZXN0IHNob3VsZCBydW4gaW4gUHl0aG9uIDIgYW5kIFB5dGhvbiAz
LgorCisgICAgQW4gaW5uZXIgY2xhc3MgaXMgdXNlZCB0byBhdm9pZCBpbXBvcnRpbmcgImRvY3Rl
c3QiIGF0IHRoZSBtb2R1bGUKKyAgICBsZXZlbC4KKyAgICAiIiIKKyAgICBpZiBoYXNhdHRyKF9n
ZXRfY2hlY2tlciwgJ0xpdGVyYWxzT3V0cHV0Q2hlY2tlcicpOgorICAgICAgICByZXR1cm4gX2dl
dF9jaGVja2VyLkxpdGVyYWxzT3V0cHV0Q2hlY2tlcigpCisKKyAgICBpbXBvcnQgZG9jdGVzdAor
ICAgIGltcG9ydCByZQorCisgICAgY2xhc3MgTGl0ZXJhbHNPdXRwdXRDaGVja2VyKGRvY3Rlc3Qu
T3V0cHV0Q2hlY2tlcik6CisgICAgICAgICIiIgorICAgICAgICBDb3BpZWQgZnJvbSBkb2N0ZXN0
X25vc2VfcGx1Z2luLnB5IGZyb20gdGhlIG5sdGsgcHJvamVjdDoKKyAgICAgICAgICAgIGh0dHBz
Oi8vZ2l0aHViLmNvbS9ubHRrL25sdGsKKworICAgICAgICBGdXJ0aGVyIGV4dGVuZGVkIHRvIGFs
c28gc3VwcG9ydCBieXRlIGxpdGVyYWxzLgorICAgICAgICAiIiIKKworICAgICAgICBfdW5pY29k
ZV9saXRlcmFsX3JlID0gcmUuY29tcGlsZShyIihcV3xeKVt1VV0oW3JSXT9bXCdcIl0pIiwgcmUu
VU5JQ09ERSkKKyAgICAgICAgX2J5dGVzX2xpdGVyYWxfcmUgPSByZS5jb21waWxlKHIiKFxXfF4p
W2JCXShbclJdP1tcJ1wiXSkiLCByZS5VTklDT0RFKQorCisgICAgICAgIGRlZiBjaGVja19vdXRw
dXQoc2VsZiwgd2FudCwgZ290LCBvcHRpb25mbGFncyk6CisgICAgICAgICAgICByZXMgPSBkb2N0
ZXN0Lk91dHB1dENoZWNrZXIuY2hlY2tfb3V0cHV0KHNlbGYsIHdhbnQsIGdvdCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uZmxhZ3Mp
CisgICAgICAgICAgICBpZiByZXM6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAg
ICAgICAgICAgYWxsb3dfdW5pY29kZSA9IG9wdGlvbmZsYWdzICYgX2dldF9hbGxvd191bmljb2Rl
X2ZsYWcoKQorICAgICAgICAgICAgYWxsb3dfYnl0ZXMgPSBvcHRpb25mbGFncyAmIF9nZXRfYWxs
b3dfYnl0ZXNfZmxhZygpCisgICAgICAgICAgICBpZiBub3QgYWxsb3dfdW5pY29kZSBhbmQgbm90
IGFsbG93X2J5dGVzOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgICAg
ICBlbHNlOiAgIyBwcmFnbWE6IG5vIGNvdmVyCisgICAgICAgICAgICAgICAgZGVmIHJlbW92ZV9w
cmVmaXhlcyhyZWdleCwgdHh0KToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlLnN1Yihy
ZWdleCwgcidcMVwyJywgdHh0KQorCisgICAgICAgICAgICAgICAgaWYgYWxsb3dfdW5pY29kZToK
KyAgICAgICAgICAgICAgICAgICAgd2FudCA9IHJlbW92ZV9wcmVmaXhlcyhzZWxmLl91bmljb2Rl
X2xpdGVyYWxfcmUsIHdhbnQpCisgICAgICAgICAgICAgICAgICAgIGdvdCA9IHJlbW92ZV9wcmVm
aXhlcyhzZWxmLl91bmljb2RlX2xpdGVyYWxfcmUsIGdvdCkKKyAgICAgICAgICAgICAgICBpZiBh
bGxvd19ieXRlczoKKyAgICAgICAgICAgICAgICAgICAgd2FudCA9IHJlbW92ZV9wcmVmaXhlcyhz
ZWxmLl9ieXRlc19saXRlcmFsX3JlLCB3YW50KQorICAgICAgICAgICAgICAgICAgICBnb3QgPSBy
ZW1vdmVfcHJlZml4ZXMoc2VsZi5fYnl0ZXNfbGl0ZXJhbF9yZSwgZ290KQorICAgICAgICAgICAg
ICAgIHJlcyA9IGRvY3Rlc3QuT3V0cHV0Q2hlY2tlci5jaGVja19vdXRwdXQoc2VsZiwgd2FudCwg
Z290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb3B0aW9uZmxhZ3MpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlcworCisgICAgX2dl
dF9jaGVja2VyLkxpdGVyYWxzT3V0cHV0Q2hlY2tlciA9IExpdGVyYWxzT3V0cHV0Q2hlY2tlcgor
ICAgIHJldHVybiBfZ2V0X2NoZWNrZXIuTGl0ZXJhbHNPdXRwdXRDaGVja2VyKCkKKworCitkZWYg
X2dldF9hbGxvd191bmljb2RlX2ZsYWcoKToKKyAgICAiIiIKKyAgICBSZWdpc3RlcnMgYW5kIHJl
dHVybnMgdGhlIEFMTE9XX1VOSUNPREUgZmxhZy4KKyAgICAiIiIKKyAgICBpbXBvcnQgZG9jdGVz
dAorICAgIHJldHVybiBkb2N0ZXN0LnJlZ2lzdGVyX29wdGlvbmZsYWcoJ0FMTE9XX1VOSUNPREUn
KQorCisKK2RlZiBfZ2V0X2FsbG93X2J5dGVzX2ZsYWcoKToKKyAgICAiIiIKKyAgICBSZWdpc3Rl
cnMgYW5kIHJldHVybnMgdGhlIEFMTE9XX0JZVEVTIGZsYWcuCisgICAgIiIiCisgICAgaW1wb3J0
IGRvY3Rlc3QKKyAgICByZXR1cm4gZG9jdGVzdC5yZWdpc3Rlcl9vcHRpb25mbGFnKCdBTExPV19C
WVRFUycpCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0
ZXN0L19weXRlc3QvZ2Vuc2NyaXB0LnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rv
b2xzL3B5dGVzdC9fcHl0ZXN0L2dlbnNjcmlwdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uZDI5NjJkOGZjODIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJU
ZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvZ2Vuc2NyaXB0LnB5CkBAIC0w
LDAgKzEsMTMyIEBACisiIiIgKGRlcHJlY2F0ZWQpIGdlbmVyYXRlIGEgc2luZ2xlLWZpbGUgc2Vs
Zi1jb250YWluZWQgdmVyc2lvbiBvZiBweXRlc3QgIiIiCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMK
K2ltcG9ydCBwa2d1dGlsCisKK2ltcG9ydCBweQoraW1wb3J0IF9weXRlc3QKKworCisKK2RlZiBm
aW5kX3RvcGxldmVsKG5hbWUpOgorICAgIGZvciBzeXNwYXRoIGluIHN5cy5wYXRoOgorICAgICAg
ICBiYXNlID0gcHkucGF0aC5sb2NhbChzeXNwYXRoKQorICAgICAgICBsaWIgPSBiYXNlL25hbWUK
KyAgICAgICAgaWYgbGliLmNoZWNrKGRpcj0xKToKKyAgICAgICAgICAgIHJldHVybiBsaWIKKyAg
ICAgICAgbW9kID0gYmFzZS5qb2luKCIlcy5weSIgJSBuYW1lKQorICAgICAgICBpZiBtb2QuY2hl
Y2soZmlsZT0xKToKKyAgICAgICAgICAgIHJldHVybiBtb2QKKyAgICByYWlzZSBMb29rdXBFcnJv
cihuYW1lKQorCitkZWYgcGtnbmFtZSh0b3BsZXZlbCwgcm9vdHBhdGgsIHBhdGgpOgorICAgIHBh
cnRzID0gcGF0aC5wYXJ0cygpW2xlbihyb290cGF0aC5wYXJ0cygpKTpdCisgICAgcmV0dXJuICcu
Jy5qb2luKFt0b3BsZXZlbF0gKyBbeC5wdXJlYmFzZW5hbWUgZm9yIHggaW4gcGFydHNdKQorCitk
ZWYgcGtnX3RvX21hcHBpbmcobmFtZSk6CisgICAgdG9wbGV2ZWwgPSBmaW5kX3RvcGxldmVsKG5h
bWUpCisgICAgbmFtZTJzcmMgPSB7fQorICAgIGlmIHRvcGxldmVsLmNoZWNrKGZpbGU9MSk6ICMg
bW9kdWxlCisgICAgICAgIG5hbWUyc3JjW3RvcGxldmVsLnB1cmViYXNlbmFtZV0gPSB0b3BsZXZl
bC5yZWFkKCkKKyAgICBlbHNlOiAjIHBhY2thZ2UKKyAgICAgICAgZm9yIHB5ZmlsZSBpbiB0b3Bs
ZXZlbC52aXNpdCgnKi5weScpOgorICAgICAgICAgICAgcGtnID0gcGtnbmFtZShuYW1lLCB0b3Bs
ZXZlbCwgcHlmaWxlKQorICAgICAgICAgICAgbmFtZTJzcmNbcGtnXSA9IHB5ZmlsZS5yZWFkKCkK
KyAgICAgICAgIyB3aXRoIHdoZWVscyBweSBzb3VyY2UgY29kZSBtaWdodCBiZSBub3QgYmUgaW5z
dGFsbGVkCisgICAgICAgICMgYW5kIHRoZSByZXN1bHRpbmcgZ2Vuc2NyaXB0IGlzIHVzZWxlc3Ms
IGp1c3QgYmFpbCBvdXQuCisgICAgICAgIGFzc2VydCBuYW1lMnNyYywgIm5vIHNvdXJjZSBjb2Rl
IGZvdW5kIGZvciAlciBhdCAlciIgJShuYW1lLCB0b3BsZXZlbCkKKyAgICByZXR1cm4gbmFtZTJz
cmMKKworZGVmIGNvbXByZXNzX21hcHBpbmcobWFwcGluZyk6CisgICAgaW1wb3J0IGJhc2U2NCwg
cGlja2xlLCB6bGliCisgICAgZGF0YSA9IHBpY2tsZS5kdW1wcyhtYXBwaW5nLCAyKQorICAgIGRh
dGEgPSB6bGliLmNvbXByZXNzKGRhdGEsIDkpCisgICAgZGF0YSA9IGJhc2U2NC5lbmNvZGVzdHJp
bmcoZGF0YSkKKyAgICBkYXRhID0gZGF0YS5kZWNvZGUoJ2FzY2lpJykKKyAgICByZXR1cm4gZGF0
YQorCisKK2RlZiBjb21wcmVzc19wYWNrYWdlcyhuYW1lcyk6CisgICAgbWFwcGluZyA9IHt9Cisg
ICAgZm9yIG5hbWUgaW4gbmFtZXM6CisgICAgICAgIG1hcHBpbmcudXBkYXRlKHBrZ190b19tYXBw
aW5nKG5hbWUpKQorICAgIHJldHVybiBjb21wcmVzc19tYXBwaW5nKG1hcHBpbmcpCisKK2RlZiBn
ZW5lcmF0ZV9zY3JpcHQoZW50cnksIHBhY2thZ2VzKToKKyAgICBkYXRhID0gY29tcHJlc3NfcGFj
a2FnZXMocGFja2FnZXMpCisgICAgdG1wbCA9IHB5LnBhdGgubG9jYWwoX19maWxlX18pLmRpcnBh
dGgoKS5qb2luKCdzdGFuZGFsb25ldGVtcGxhdGUucHknKQorICAgIGV4ZSA9IHRtcGwucmVhZCgp
CisgICAgZXhlID0gZXhlLnJlcGxhY2UoJ0BTT1VSQ0VTQCcsIGRhdGEpCisgICAgZXhlID0gZXhl
LnJlcGxhY2UoJ0BFTlRSWUAnLCBlbnRyeSkKKyAgICByZXR1cm4gZXhlCisKKworZGVmIHB5dGVz
dF9hZGRvcHRpb24ocGFyc2VyKToKKyAgICBncm91cCA9IHBhcnNlci5nZXRncm91cCgiZGVidWdj
b25maWciKQorICAgIGdyb3VwLmFkZG9wdGlvbigiLS1nZW5zY3JpcHQiLCBhY3Rpb249InN0b3Jl
IiwgZGVmYXVsdD1Ob25lLAorICAgICAgICBkZXN0PSJnZW5zY3JpcHQiLCBtZXRhdmFyPSJwYXRo
IiwKKyAgICAgICAgaGVscD0iY3JlYXRlIHN0YW5kYWxvbmUgcHl0ZXN0IHNjcmlwdCBhdCBnaXZl
biB0YXJnZXQgcGF0aC4iKQorCitkZWYgcHl0ZXN0X2NtZGxpbmVfbWFpbihjb25maWcpOgorICAg
IGltcG9ydCBfcHl0ZXN0LmNvbmZpZworICAgIGdlbnNjcmlwdCA9IGNvbmZpZy5nZXR2YWx1ZSgi
Z2Vuc2NyaXB0IikKKyAgICBpZiBnZW5zY3JpcHQ6CisgICAgICAgIHR3ID0gX3B5dGVzdC5jb25m
aWcuY3JlYXRlX3Rlcm1pbmFsX3dyaXRlcihjb25maWcpCisgICAgICAgIHR3LmxpbmUoIldBUk5J
Tkc6IHVzYWdlIG9mIGdlbnNjcmlwdCBpcyBkZXByZWNhdGVkLiIsCisgICAgICAgICAgICAgICAg
cmVkPVRydWUpCisgICAgICAgIGRlcHMgPSAgWydweScsICdfcHl0ZXN0JywgJ3B5dGVzdCddICAj
IHBsdWdneSBpcyB2ZW5kb3JlZAorICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvIDwgKDIsNyk6
CisgICAgICAgICAgICBkZXBzLmFwcGVuZCgiYXJncGFyc2UiKQorICAgICAgICAgICAgdHcubGlu
ZSgiZ2VuZXJhdGVkIHNjcmlwdCB3aWxsIHJ1biBvbiBweXRob24yLjYtcHl0aG9uMy4zKysiKQor
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgdHcubGluZSgiV0FSTklORzogZ2VuZXJhdGVkIHNj
cmlwdCB3aWxsIG5vdCBydW4gb24gcHl0aG9uMi42ICIKKyAgICAgICAgICAgICAgICAgICAgImR1
ZSB0byAnYXJncGFyc2UnIGRlcGVuZGVuY3kuIFVzZSBweXRob24yLjYgIgorICAgICAgICAgICAg
ICAgICAgICAidG8gZ2VuZXJhdGUgYSBweXRob24yLjYgY29tcGF0aWJsZSBzY3JpcHQiLCByZWQ9
VHJ1ZSkKKyAgICAgICAgc2NyaXB0ID0gZ2VuZXJhdGVfc2NyaXB0KAorICAgICAgICAgICAgJ2lt
cG9ydCBweXRlc3Q7IHJhaXNlIFN5c3RlbUV4aXQocHl0ZXN0LmNtZGxpbmUubWFpbigpKScsCisg
ICAgICAgICAgICBkZXBzLAorICAgICAgICApCisgICAgICAgIGdlbnNjcmlwdCA9IHB5LnBhdGgu
bG9jYWwoZ2Vuc2NyaXB0KQorICAgICAgICBnZW5zY3JpcHQud3JpdGUoc2NyaXB0KQorICAgICAg
ICB0dy5saW5lKCJnZW5lcmF0ZWQgcHl0ZXN0IHN0YW5kYWxvbmUgc2NyaXB0OiAlcyIgJSBnZW5z
Y3JpcHQsCisgICAgICAgICAgICAgICAgYm9sZD1UcnVlKQorICAgICAgICByZXR1cm4gMAorCisK
K2RlZiBweXRlc3RfbmFtZXNwYWNlKCk6CisgICAgcmV0dXJuIHsnZnJlZXplX2luY2x1ZGVzJzog
ZnJlZXplX2luY2x1ZGVzfQorCisKK2RlZiBmcmVlemVfaW5jbHVkZXMoKToKKyAgICAiIiIKKyAg
ICBSZXR1cm5zIGEgbGlzdCBvZiBtb2R1bGUgbmFtZXMgdXNlZCBieSBweS50ZXN0IHRoYXQgc2hv
dWxkIGJlCisgICAgaW5jbHVkZWQgYnkgY3hfZnJlZXplLgorICAgICIiIgorICAgIHJlc3VsdCA9
IGxpc3QoX2l0ZXJfYWxsX21vZHVsZXMocHkpKQorICAgIHJlc3VsdCArPSBsaXN0KF9pdGVyX2Fs
bF9tb2R1bGVzKF9weXRlc3QpKQorICAgIHJldHVybiByZXN1bHQKKworCitkZWYgX2l0ZXJfYWxs
X21vZHVsZXMocGFja2FnZSwgcHJlZml4PScnKToKKyAgICAiIiIKKyAgICBJdGVyYXRlcyBvdmVy
IHRoZSBuYW1lcyBvZiBhbGwgbW9kdWxlcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgZ2l2ZW4K
KyAgICBwYWNrYWdlLCByZWN1cnNpdmVseS4KKworICAgIEV4YW1wbGU6CisgICAgICAgIF9pdGVy
X2FsbF9tb2R1bGVzKF9weXRlc3QpIC0+CisgICAgICAgICAgICBbJ19weXRlc3QuYXNzZXJ0aW9u
Lm5ld2ludGVycHJldCcsCisgICAgICAgICAgICAgJ19weXRlc3QuY2FwdHVyZScsCisgICAgICAg
ICAgICAgJ19weXRlc3QuY29yZScsCisgICAgICAgICAgICAgLi4uCisgICAgICAgICAgICBdCisg
ICAgIiIiCisgICAgaWYgdHlwZShwYWNrYWdlKSBpcyBub3Qgc3RyOgorICAgICAgICBwYXRoLCBw
cmVmaXggPSBwYWNrYWdlLl9fcGF0aF9fWzBdLCBwYWNrYWdlLl9fbmFtZV9fICsgJy4nCisgICAg
ZWxzZToKKyAgICAgICAgcGF0aCA9IHBhY2thZ2UKKyAgICBmb3IgXywgbmFtZSwgaXNfcGFja2Fn
ZSBpbiBwa2d1dGlsLml0ZXJfbW9kdWxlcyhbcGF0aF0pOgorICAgICAgICBpZiBpc19wYWNrYWdl
OgorICAgICAgICAgICAgZm9yIG0gaW4gX2l0ZXJfYWxsX21vZHVsZXMob3MucGF0aC5qb2luKHBh
dGgsIG5hbWUpLCBwcmVmaXg9bmFtZSArICcuJyk6CisgICAgICAgICAgICAgICAgeWllbGQgcHJl
Zml4ICsgbQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgeWllbGQgcHJlZml4ICsgbmFtZQpk
aWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0
ZXN0L2hlbHBjb25maWcucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0
ZXN0L19weXRlc3QvaGVscGNvbmZpZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMC4uMWRmMGM1NmFjN2IKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9p
bXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvaGVscGNvbmZpZy5weQpAQCAtMCwwICsx
LDEzOSBAQAorIiIiIHZlcnNpb24gaW5mbywgaGVscCBtZXNzYWdlcywgdHJhY2luZyBjb25maWd1
cmF0aW9uLiAgIiIiCitpbXBvcnQgcHkKK2ltcG9ydCBweXRlc3QKK2ltcG9ydCBvcywgc3lzCisK
K2RlZiBweXRlc3RfYWRkb3B0aW9uKHBhcnNlcik6CisgICAgZ3JvdXAgPSBwYXJzZXIuZ2V0Z3Jv
dXAoJ2RlYnVnY29uZmlnJykKKyAgICBncm91cC5hZGRvcHRpb24oJy0tdmVyc2lvbicsIGFjdGlv
bj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICBoZWxwPSJkaXNwbGF5IHB5dGVzdCBsaWIgdmVy
c2lvbiBhbmQgaW1wb3J0IGluZm9ybWF0aW9uLiIpCisgICAgZ3JvdXAuX2FkZG9wdGlvbigiLWgi
LCAiLS1oZWxwIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0iaGVscCIsCisgICAgICAgICAg
ICBoZWxwPSJzaG93IGhlbHAgbWVzc2FnZSBhbmQgY29uZmlndXJhdGlvbiBpbmZvIikKKyAgICBn
cm91cC5fYWRkb3B0aW9uKCctcCcsIGFjdGlvbj0iYXBwZW5kIiwgZGVzdD0icGx1Z2lucyIsIGRl
ZmF1bHQgPSBbXSwKKyAgICAgICAgICAgICAgIG1ldGF2YXI9Im5hbWUiLAorICAgICAgICAgICAg
ICAgaGVscD0iZWFybHktbG9hZCBnaXZlbiBwbHVnaW4gKG11bHRpLWFsbG93ZWQpLiAiCisgICAg
ICAgICAgICAgICAgICAgICJUbyBhdm9pZCBsb2FkaW5nIG9mIHBsdWdpbnMsIHVzZSB0aGUgYG5v
OmAgcHJlZml4LCBlLmcuICIKKyAgICAgICAgICAgICAgICAgICAgImBubzpkb2N0ZXN0YC4iKQor
ICAgIGdyb3VwLmFkZG9wdGlvbignLS10cmFjZWNvbmZpZycsICctLXRyYWNlLWNvbmZpZycsCisg
ICAgICAgICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLCBkZWZhdWx0PUZhbHNlLAorICAgICAg
ICAgICAgICAgaGVscD0idHJhY2UgY29uc2lkZXJhdGlvbnMgb2YgY29uZnRlc3QucHkgZmlsZXMu
IiksCisgICAgZ3JvdXAuYWRkb3B0aW9uKCctLWRlYnVnJywKKyAgICAgICAgICAgICAgIGFjdGlv
bj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9ImRlYnVnIiwgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAg
ICAgIGhlbHA9InN0b3JlIGludGVybmFsIHRyYWNpbmcgZGVidWcgaW5mb3JtYXRpb24gaW4gJ3B5
dGVzdGRlYnVnLmxvZycuIikKKworCitAcHl0ZXN0Lmhvb2tpbXBsKGhvb2t3cmFwcGVyPVRydWUp
CitkZWYgcHl0ZXN0X2NtZGxpbmVfcGFyc2UoKToKKyAgICBvdXRjb21lID0geWllbGQKKyAgICBj
b25maWcgPSBvdXRjb21lLmdldF9yZXN1bHQoKQorICAgIGlmIGNvbmZpZy5vcHRpb24uZGVidWc6
CisgICAgICAgIHBhdGggPSBvcy5wYXRoLmFic3BhdGgoInB5dGVzdGRlYnVnLmxvZyIpCisgICAg
ICAgIGRlYnVnZmlsZSA9IG9wZW4ocGF0aCwgJ3cnKQorICAgICAgICBkZWJ1Z2ZpbGUud3JpdGUo
InZlcnNpb25zIHB5dGVzdC0lcywgcHktJXMsICIKKyAgICAgICAgICAgICAgICAicHl0aG9uLSVz
XG5jd2Q9JXNcbmFyZ3M9JXNcblxuIiAlKAorICAgICAgICAgICAgcHl0ZXN0Ll9fdmVyc2lvbl9f
LCBweS5fX3ZlcnNpb25fXywKKyAgICAgICAgICAgICIuIi5qb2luKG1hcChzdHIsIHN5cy52ZXJz
aW9uX2luZm8pKSwKKyAgICAgICAgICAgIG9zLmdldGN3ZCgpLCBjb25maWcuX29yaWdhcmdzKSkK
KyAgICAgICAgY29uZmlnLnRyYWNlLnJvb3Quc2V0d3JpdGVyKGRlYnVnZmlsZS53cml0ZSkKKyAg
ICAgICAgdW5kb190cmFjaW5nID0gY29uZmlnLnBsdWdpbm1hbmFnZXIuZW5hYmxlX3RyYWNpbmco
KQorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJ3cml0aW5nIHB5dGVzdGRlYnVnIGluZm9ybWF0
aW9uIHRvICVzXG4iICUgcGF0aCkKKyAgICAgICAgZGVmIHVuc2V0X3RyYWNpbmcoKToKKyAgICAg
ICAgICAgIGRlYnVnZmlsZS5jbG9zZSgpCisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJ3
cm90ZSBweXRlc3RkZWJ1ZyBpbmZvcm1hdGlvbiB0byAlc1xuIiAlCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlYnVnZmlsZS5uYW1lKQorICAgICAgICAgICAgY29uZmlnLnRyYWNlLnJv
b3Quc2V0d3JpdGVyKE5vbmUpCisgICAgICAgICAgICB1bmRvX3RyYWNpbmcoKQorICAgICAgICBj
b25maWcuYWRkX2NsZWFudXAodW5zZXRfdHJhY2luZykKKworZGVmIHB5dGVzdF9jbWRsaW5lX21h
aW4oY29uZmlnKToKKyAgICBpZiBjb25maWcub3B0aW9uLnZlcnNpb246CisgICAgICAgIHAgPSBw
eS5wYXRoLmxvY2FsKHB5dGVzdC5fX2ZpbGVfXykKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgi
VGhpcyBpcyBweXRlc3QgdmVyc2lvbiAlcywgaW1wb3J0ZWQgZnJvbSAlc1xuIiAlCisgICAgICAg
ICAgICAocHl0ZXN0Ll9fdmVyc2lvbl9fLCBwKSkKKyAgICAgICAgcGx1Z2luaW5mbyA9IGdldHBs
dWdpbnZlcnNpb25pbmZvKGNvbmZpZykKKyAgICAgICAgaWYgcGx1Z2luaW5mbzoKKyAgICAgICAg
ICAgIGZvciBsaW5lIGluIHBsdWdpbmluZm86CisgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53
cml0ZShsaW5lICsgIlxuIikKKyAgICAgICAgcmV0dXJuIDAKKyAgICBlbGlmIGNvbmZpZy5vcHRp
b24uaGVscDoKKyAgICAgICAgY29uZmlnLl9kb19jb25maWd1cmUoKQorICAgICAgICBzaG93aGVs
cChjb25maWcpCisgICAgICAgIGNvbmZpZy5fZW5zdXJlX3VuY29uZmlndXJlKCkKKyAgICAgICAg
cmV0dXJuIDAKKworZGVmIHNob3doZWxwKGNvbmZpZyk6CisgICAgcmVwb3J0ZXIgPSBjb25maWcu
cGx1Z2lubWFuYWdlci5nZXRfcGx1Z2luKCd0ZXJtaW5hbHJlcG9ydGVyJykKKyAgICB0dyA9IHJl
cG9ydGVyLl90dworICAgIHR3LndyaXRlKGNvbmZpZy5fcGFyc2VyLm9wdHBhcnNlci5mb3JtYXRf
aGVscCgpKQorICAgIHR3LmxpbmUoKQorICAgIHR3LmxpbmUoKQorICAgICN0dy5zZXAoICI9Iiwg
ImNvbmZpZyBmaWxlIHNldHRpbmdzIikKKyAgICB0dy5saW5lKCJbcHl0ZXN0XSBpbmktb3B0aW9u
cyBpbiB0aGUgbmV4dCAiCisgICAgICAgICAgICAicHl0ZXN0LmluaXx0b3guaW5pfHNldHVwLmNm
ZyBmaWxlOiIpCisgICAgdHcubGluZSgpCisKKyAgICBmb3IgbmFtZSBpbiBjb25maWcuX3BhcnNl
ci5faW5pbmFtZXM6CisgICAgICAgIGhlbHAsIHR5cGUsIGRlZmF1bHQgPSBjb25maWcuX3BhcnNl
ci5faW5pZGljdFtuYW1lXQorICAgICAgICBpZiB0eXBlIGlzIE5vbmU6CisgICAgICAgICAgICB0
eXBlID0gInN0cmluZyIKKyAgICAgICAgc3BlYyA9ICIlcyAoJXMpIiAlIChuYW1lLCB0eXBlKQor
ICAgICAgICBsaW5lID0gIiAgJS0yNHMgJXMiICUoc3BlYywgaGVscCkKKyAgICAgICAgdHcubGlu
ZShsaW5lWzp0dy5mdWxsd2lkdGhdKQorCisgICAgdHcubGluZSgpCisgICAgdHcubGluZSgiZW52
aXJvbm1lbnQgdmFyaWFibGVzOiIpCisgICAgdmFycyA9IFsKKyAgICAgICAgKCJQWVRFU1RfQURE
T1BUUyIsICJleHRyYSBjb21tYW5kIGxpbmUgb3B0aW9ucyIpLAorICAgICAgICAoIlBZVEVTVF9Q
TFVHSU5TIiwgImNvbW1hLXNlcGFyYXRlZCBwbHVnaW5zIHRvIGxvYWQgZHVyaW5nIHN0YXJ0dXAi
KSwKKyAgICAgICAgKCJQWVRFU1RfREVCVUciLCAic2V0IHRvIGVuYWJsZSBkZWJ1ZyB0cmFjaW5n
IG9mIHB5dGVzdCdzIGludGVybmFscyIpCisgICAgXQorICAgIGZvciBuYW1lLCBoZWxwIGluIHZh
cnM6CisgICAgICAgIHR3LmxpbmUoIiAgJS0yNHMgJXMiICUgKG5hbWUsIGhlbHApKQorICAgIHR3
LmxpbmUoKQorICAgIHR3LmxpbmUoKQorCisgICAgdHcubGluZSgidG8gc2VlIGF2YWlsYWJsZSBt
YXJrZXJzIHR5cGU6IHB5LnRlc3QgLS1tYXJrZXJzIikKKyAgICB0dy5saW5lKCJ0byBzZWUgYXZh
aWxhYmxlIGZpeHR1cmVzIHR5cGU6IHB5LnRlc3QgLS1maXh0dXJlcyIpCisgICAgdHcubGluZSgi
KHNob3duIGFjY29yZGluZyB0byBzcGVjaWZpZWQgZmlsZV9vcl9kaXIgb3IgY3VycmVudCBkaXIg
IgorICAgICAgICAgICAgImlmIG5vdCBzcGVjaWZpZWQpIikKKworICAgIGZvciB3YXJuaW5ncmVw
b3J0IGluIHJlcG9ydGVyLnN0YXRzLmdldCgnd2FybmluZ3MnLCBbXSk6CisgICAgICAgIHR3Lmxp
bmUoIndhcm5pbmcgOiAiICsgd2FybmluZ3JlcG9ydC5tZXNzYWdlLCByZWQ9VHJ1ZSkKKyAgICBy
ZXR1cm4KKworCitjb25mdGVzdF9vcHRpb25zID0gWworICAgICgncHl0ZXN0X3BsdWdpbnMnLCAn
bGlzdCBvZiBwbHVnaW4gbmFtZXMgdG8gbG9hZCcpLAorXQorCitkZWYgZ2V0cGx1Z2ludmVyc2lv
bmluZm8oY29uZmlnKToKKyAgICBsaW5lcyA9IFtdCisgICAgcGx1Z2luaW5mbyA9IGNvbmZpZy5w
bHVnaW5tYW5hZ2VyLmxpc3RfcGx1Z2luX2Rpc3RpbmZvKCkKKyAgICBpZiBwbHVnaW5pbmZvOgor
ICAgICAgICBsaW5lcy5hcHBlbmQoInNldHVwdG9vbHMgcmVnaXN0ZXJlZCBwbHVnaW5zOiIpCisg
ICAgICAgIGZvciBwbHVnaW4sIGRpc3QgaW4gcGx1Z2luaW5mbzoKKyAgICAgICAgICAgIGxvYyA9
IGdldGF0dHIocGx1Z2luLCAnX19maWxlX18nLCByZXByKHBsdWdpbikpCisgICAgICAgICAgICBj
b250ZW50ID0gIiVzLSVzIGF0ICVzIiAlIChkaXN0LnByb2plY3RfbmFtZSwgZGlzdC52ZXJzaW9u
LCBsb2MpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiAgIiArIGNvbnRlbnQpCisgICAgcmV0
dXJuIGxpbmVzCisKK2RlZiBweXRlc3RfcmVwb3J0X2hlYWRlcihjb25maWcpOgorICAgIGxpbmVz
ID0gW10KKyAgICBpZiBjb25maWcub3B0aW9uLmRlYnVnIG9yIGNvbmZpZy5vcHRpb24udHJhY2Vj
b25maWc6CisgICAgICAgIGxpbmVzLmFwcGVuZCgidXNpbmc6IHB5dGVzdC0lcyBweWxpYi0lcyIg
JQorICAgICAgICAgICAgKHB5dGVzdC5fX3ZlcnNpb25fXyxweS5fX3ZlcnNpb25fXykpCisKKyAg
ICAgICAgdmVyaW5mbyA9IGdldHBsdWdpbnZlcnNpb25pbmZvKGNvbmZpZykKKyAgICAgICAgaWYg
dmVyaW5mbzoKKyAgICAgICAgICAgIGxpbmVzLmV4dGVuZCh2ZXJpbmZvKQorCisgICAgaWYgY29u
ZmlnLm9wdGlvbi50cmFjZWNvbmZpZzoKKyAgICAgICAgbGluZXMuYXBwZW5kKCJhY3RpdmUgcGx1
Z2luczoiKQorICAgICAgICBpdGVtcyA9IGNvbmZpZy5wbHVnaW5tYW5hZ2VyLmxpc3RfbmFtZV9w
bHVnaW4oKQorICAgICAgICBmb3IgbmFtZSwgcGx1Z2luIGluIGl0ZW1zOgorICAgICAgICAgICAg
aWYgaGFzYXR0cihwbHVnaW4sICdfX2ZpbGVfXycpOgorICAgICAgICAgICAgICAgIHIgPSBwbHVn
aW4uX19maWxlX18KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgciA9IHJlcHIo
cGx1Z2luKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCIgICAgJS0yMHM6ICVzIiAlKG5hbWUs
IHIpKQorICAgIHJldHVybiBsaW5lcwpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0
ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L2hvb2tzcGVjLnB5IGIvV2ViRHJpdmVyVGVzdHMv
aW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L2hvb2tzcGVjLnB5Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42MGU5YjQ3ZDI2MgotLS0gL2Rldi9udWxsCisr
KyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9ob29r
c3BlYy5weQpAQCAtMCwwICsxLDI5NSBAQAorIiIiIGhvb2sgc3BlY2lmaWNhdGlvbnMgZm9yIHB5
dGVzdCBwbHVnaW5zLCBpbnZva2VkIGZyb20gbWFpbi5weSBhbmQgYnVpbHRpbiBwbHVnaW5zLiAg
IiIiCisKK2Zyb20gX3B5dGVzdC5fcGx1Z2d5IGltcG9ydCBIb29rc3BlY01hcmtlcgorCitob29r
c3BlYyA9IEhvb2tzcGVjTWFya2VyKCJweXRlc3QiKQorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMg
SW5pdGlhbGl6YXRpb24gaG9va3MgY2FsbGVkIGZvciBldmVyeSBwbHVnaW4KKyMgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCitAaG9va3NwZWMoaGlzdG9yaWM9VHJ1ZSkKK2RlZiBweXRlc3RfYWRkaG9va3Mo
cGx1Z2lubWFuYWdlcik6CisgICAgIiIiY2FsbGVkIGF0IHBsdWdpbiByZWdpc3RyYXRpb24gdGlt
ZSB0byBhbGxvdyBhZGRpbmcgbmV3IGhvb2tzIHZpYSBhIGNhbGwgdG8KKyAgICBwbHVnaW5tYW5h
Z2VyLmFkZF9ob29rc3BlY3MobW9kdWxlX29yX2NsYXNzLCBwcmVmaXgpLiIiIgorCisKK0Bob29r
c3BlYyhoaXN0b3JpYz1UcnVlKQorZGVmIHB5dGVzdF9uYW1lc3BhY2UoKToKKyAgICAiIiJyZXR1
cm4gZGljdCBvZiBuYW1lLT5vYmplY3QgdG8gYmUgbWFkZSBnbG9iYWxseSBhdmFpbGFibGUgaW4K
KyAgICB0aGUgcHl0ZXN0IG5hbWVzcGFjZS4gIFRoaXMgaG9vayBpcyBjYWxsZWQgYXQgcGx1Z2lu
IHJlZ2lzdHJhdGlvbgorICAgIHRpbWUuCisgICAgIiIiCisKK0Bob29rc3BlYyhoaXN0b3JpYz1U
cnVlKQorZGVmIHB5dGVzdF9wbHVnaW5fcmVnaXN0ZXJlZChwbHVnaW4sIG1hbmFnZXIpOgorICAg
ICIiIiBhIG5ldyBweXRlc3QgcGx1Z2luIGdvdCByZWdpc3RlcmVkLiAiIiIKKworCitAaG9va3Nw
ZWMoaGlzdG9yaWM9VHJ1ZSkKK2RlZiBweXRlc3RfYWRkb3B0aW9uKHBhcnNlcik6CisgICAgIiIi
cmVnaXN0ZXIgYXJncGFyc2Utc3R5bGUgb3B0aW9ucyBhbmQgaW5pLXN0eWxlIGNvbmZpZyB2YWx1
ZXMsCisgICAgY2FsbGVkIG9uY2UgYXQgdGhlIGJlZ2lubmluZyBvZiBhIHRlc3QgcnVuLgorCisg
ICAgLi4gbm90ZTo6CisKKyAgICAgICAgVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgaW1wbGVtZW50
ZWQgb25seSBpbiBwbHVnaW5zIG9yIGBgY29uZnRlc3QucHlgYAorICAgICAgICBmaWxlcyBzaXR1
YXRlZCBhdCB0aGUgdGVzdHMgcm9vdCBkaXJlY3RvcnkgZHVlIHRvIGhvdyBweS50ZXN0CisgICAg
ICAgIDpyZWY6YGRpc2NvdmVycyBwbHVnaW5zIGR1cmluZyBzdGFydHVwIDxwbHVnaW5vcmRlcj5g
LgorCisgICAgOmFyZyBwYXJzZXI6IFRvIGFkZCBjb21tYW5kIGxpbmUgb3B0aW9ucywgY2FsbAor
ICAgICAgICA6cHk6ZnVuYzpgcGFyc2VyLmFkZG9wdGlvbiguLi4pIDxfcHl0ZXN0LmNvbmZpZy5Q
YXJzZXIuYWRkb3B0aW9uPmAuCisgICAgICAgIFRvIGFkZCBpbmktZmlsZSB2YWx1ZXMgY2FsbCA6
cHk6ZnVuYzpgcGFyc2VyLmFkZGluaSguLi4pCisgICAgICAgIDxfcHl0ZXN0LmNvbmZpZy5QYXJz
ZXIuYWRkaW5pPmAuCisKKyAgICBPcHRpb25zIGNhbiBsYXRlciBiZSBhY2Nlc3NlZCB0aHJvdWdo
IHRoZQorICAgIDpweTpjbGFzczpgY29uZmlnIDxfcHl0ZXN0LmNvbmZpZy5Db25maWc+YCBvYmpl
Y3QsIHJlc3BlY3RpdmVseToKKworICAgIC0gOnB5OmZ1bmM6YGNvbmZpZy5nZXRvcHRpb24obmFt
ZSkgPF9weXRlc3QuY29uZmlnLkNvbmZpZy5nZXRvcHRpb24+YCB0bworICAgICAgcmV0cmlldmUg
dGhlIHZhbHVlIG9mIGEgY29tbWFuZCBsaW5lIG9wdGlvbi4KKworICAgIC0gOnB5OmZ1bmM6YGNv
bmZpZy5nZXRpbmkobmFtZSkgPF9weXRlc3QuY29uZmlnLkNvbmZpZy5nZXRpbmk+YCB0byByZXRy
aWV2ZQorICAgICAgYSB2YWx1ZSByZWFkIGZyb20gYW4gaW5pLXN0eWxlIGZpbGUuCisKKyAgICBU
aGUgY29uZmlnIG9iamVjdCBpcyBwYXNzZWQgYXJvdW5kIG9uIG1hbnkgaW50ZXJuYWwgb2JqZWN0
cyB2aWEgdGhlIGBgLmNvbmZpZ2BgCisgICAgYXR0cmlidXRlIG9yIGNhbiBiZSByZXRyaWV2ZWQg
YXMgdGhlIGBgcHl0ZXN0Y29uZmlnYGAgZml4dHVyZSBvciBhY2Nlc3NlZAorICAgIHZpYSAoZGVw
cmVjYXRlZCkgYGBweXRlc3QuY29uZmlnYGAuCisgICAgIiIiCisKK0Bob29rc3BlYyhoaXN0b3Jp
Yz1UcnVlKQorZGVmIHB5dGVzdF9jb25maWd1cmUoY29uZmlnKToKKyAgICAiIiIgY2FsbGVkIGFm
dGVyIGNvbW1hbmQgbGluZSBvcHRpb25zIGhhdmUgYmVlbiBwYXJzZWQKKyAgICBhbmQgYWxsIHBs
dWdpbnMgYW5kIGluaXRpYWwgY29uZnRlc3QgZmlsZXMgYmVlbiBsb2FkZWQuCisgICAgVGhpcyBo
b29rIGlzIGNhbGxlZCBmb3IgZXZlcnkgcGx1Z2luLgorICAgICIiIgorCisjIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKyMgQm9vdHN0cmFwcGluZyBob29rcyBjYWxsZWQgZm9yIHBsdWdpbnMgcmVnaXN0ZXJl
ZCBlYXJseSBlbm91Z2g6CisjIGludGVybmFsIGFuZCAzcmQgcGFydHkgcGx1Z2lucyBhcyB3ZWxs
IGFzIGRpcmVjdGx5CisjIGRpc2NvdmVyYWJsZSBjb25mdGVzdC5weSBsb2NhbCBwbHVnaW5zLgor
IyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKK0Bob29rc3BlYyhmaXJzdHJlc3VsdD1UcnVlKQorZGVmIHB5
dGVzdF9jbWRsaW5lX3BhcnNlKHBsdWdpbm1hbmFnZXIsIGFyZ3MpOgorICAgICIiInJldHVybiBp
bml0aWFsaXplZCBjb25maWcgb2JqZWN0LCBwYXJzaW5nIHRoZSBzcGVjaWZpZWQgYXJncy4gIiIi
CisKK2RlZiBweXRlc3RfY21kbGluZV9wcmVwYXJzZShjb25maWcsIGFyZ3MpOgorICAgICIiIihk
ZXByZWNhdGVkKSBtb2RpZnkgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBiZWZvcmUgb3B0aW9uIHBh
cnNpbmcuICIiIgorCitAaG9va3NwZWMoZmlyc3RyZXN1bHQ9VHJ1ZSkKK2RlZiBweXRlc3RfY21k
bGluZV9tYWluKGNvbmZpZyk6CisgICAgIiIiIGNhbGxlZCBmb3IgcGVyZm9ybWluZyB0aGUgbWFp
biBjb21tYW5kIGxpbmUgYWN0aW9uLiBUaGUgZGVmYXVsdAorICAgIGltcGxlbWVudGF0aW9uIHdp
bGwgaW52b2tlIHRoZSBjb25maWd1cmUgaG9va3MgYW5kIHJ1bnRlc3RfbWFpbmxvb3AuICIiIgor
CitkZWYgcHl0ZXN0X2xvYWRfaW5pdGlhbF9jb25mdGVzdHMoZWFybHlfY29uZmlnLCBwYXJzZXIs
IGFyZ3MpOgorICAgICIiIiBpbXBsZW1lbnRzIHRoZSBsb2FkaW5nIG9mIGluaXRpYWwgY29uZnRl
c3QgZmlsZXMgYWhlYWQKKyAgICBvZiBjb21tYW5kIGxpbmUgb3B0aW9uIHBhcnNpbmcuICIiIgor
CisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBjb2xsZWN0aW9uIGhvb2tzCisjIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKworQGhvb2tzcGVjKGZpcnN0cmVzdWx0PVRydWUpCitkZWYgcHl0ZXN0X2NvbGxlY3Rp
b24oc2Vzc2lvbik6CisgICAgIiIiIHBlcmZvcm0gdGhlIGNvbGxlY3Rpb24gcHJvdG9jb2wgZm9y
IHRoZSBnaXZlbiBzZXNzaW9uLiAiIiIKKworZGVmIHB5dGVzdF9jb2xsZWN0aW9uX21vZGlmeWl0
ZW1zKHNlc3Npb24sIGNvbmZpZywgaXRlbXMpOgorICAgICIiIiBjYWxsZWQgYWZ0ZXIgY29sbGVj
dGlvbiBoYXMgYmVlbiBwZXJmb3JtZWQsIG1heSBmaWx0ZXIgb3IgcmUtb3JkZXIKKyAgICB0aGUg
aXRlbXMgaW4tcGxhY2UuIiIiCisKK2RlZiBweXRlc3RfY29sbGVjdGlvbl9maW5pc2goc2Vzc2lv
bik6CisgICAgIiIiIGNhbGxlZCBhZnRlciBjb2xsZWN0aW9uIGhhcyBiZWVuIHBlcmZvcm1lZCBh
bmQgbW9kaWZpZWQuICIiIgorCitAaG9va3NwZWMoZmlyc3RyZXN1bHQ9VHJ1ZSkKK2RlZiBweXRl
c3RfaWdub3JlX2NvbGxlY3QocGF0aCwgY29uZmlnKToKKyAgICAiIiIgcmV0dXJuIFRydWUgdG8g
cHJldmVudCBjb25zaWRlcmluZyB0aGlzIHBhdGggZm9yIGNvbGxlY3Rpb24uCisgICAgVGhpcyBo
b29rIGlzIGNvbnN1bHRlZCBmb3IgYWxsIGZpbGVzIGFuZCBkaXJlY3RvcmllcyBwcmlvciB0byBj
YWxsaW5nCisgICAgbW9yZSBzcGVjaWZpYyBob29rcy4KKyAgICAiIiIKKworQGhvb2tzcGVjKGZp
cnN0cmVzdWx0PVRydWUpCitkZWYgcHl0ZXN0X2NvbGxlY3RfZGlyZWN0b3J5KHBhdGgsIHBhcmVu
dCk6CisgICAgIiIiIGNhbGxlZCBiZWZvcmUgdHJhdmVyc2luZyBhIGRpcmVjdG9yeSBmb3IgY29s
bGVjdGlvbiBmaWxlcy4gIiIiCisKK2RlZiBweXRlc3RfY29sbGVjdF9maWxlKHBhdGgsIHBhcmVu
dCk6CisgICAgIiIiIHJldHVybiBjb2xsZWN0aW9uIE5vZGUgb3IgTm9uZSBmb3IgdGhlIGdpdmVu
IHBhdGguIEFueSBuZXcgbm9kZQorICAgIG5lZWRzIHRvIGhhdmUgdGhlIHNwZWNpZmllZCBgYHBh
cmVudGBgIGFzIGEgcGFyZW50LiIiIgorCisjIGxvZ2dpbmcgaG9va3MgZm9yIGNvbGxlY3Rpb24K
K2RlZiBweXRlc3RfY29sbGVjdHN0YXJ0KGNvbGxlY3Rvcik6CisgICAgIiIiIGNvbGxlY3RvciBz
dGFydHMgY29sbGVjdGluZy4gIiIiCisKK2RlZiBweXRlc3RfaXRlbWNvbGxlY3RlZChpdGVtKToK
KyAgICAiIiIgd2UganVzdCBjb2xsZWN0ZWQgYSB0ZXN0IGl0ZW0uICIiIgorCitkZWYgcHl0ZXN0
X2NvbGxlY3RyZXBvcnQocmVwb3J0KToKKyAgICAiIiIgY29sbGVjdG9yIGZpbmlzaGVkIGNvbGxl
Y3RpbmcuICIiIgorCitkZWYgcHl0ZXN0X2Rlc2VsZWN0ZWQoaXRlbXMpOgorICAgICIiIiBjYWxs
ZWQgZm9yIHRlc3QgaXRlbXMgZGVzZWxlY3RlZCBieSBrZXl3b3JkLiAiIiIKKworQGhvb2tzcGVj
KGZpcnN0cmVzdWx0PVRydWUpCitkZWYgcHl0ZXN0X21ha2VfY29sbGVjdF9yZXBvcnQoY29sbGVj
dG9yKToKKyAgICAiIiIgcGVyZm9ybSBgYGNvbGxlY3Rvci5jb2xsZWN0KClgYCBhbmQgcmV0dXJu
IGEgQ29sbGVjdFJlcG9ydC4gIiIiCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQeXRob24gdGVz
dCBmdW5jdGlvbiByZWxhdGVkIGhvb2tzCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQGhvb2tzcGVj
KGZpcnN0cmVzdWx0PVRydWUpCitkZWYgcHl0ZXN0X3B5Y29sbGVjdF9tYWtlbW9kdWxlKHBhdGgs
IHBhcmVudCk6CisgICAgIiIiIHJldHVybiBhIE1vZHVsZSBjb2xsZWN0b3Igb3IgTm9uZSBmb3Ig
dGhlIGdpdmVuIHBhdGguCisgICAgVGhpcyBob29rIHdpbGwgYmUgY2FsbGVkIGZvciBlYWNoIG1h
dGNoaW5nIHRlc3QgbW9kdWxlIHBhdGguCisgICAgVGhlIHB5dGVzdF9jb2xsZWN0X2ZpbGUgaG9v
ayBuZWVkcyB0byBiZSB1c2VkIGlmIHlvdSB3YW50IHRvCisgICAgY3JlYXRlIHRlc3QgbW9kdWxl
cyBmb3IgZmlsZXMgdGhhdCBkbyBub3QgbWF0Y2ggYXMgYSB0ZXN0IG1vZHVsZS4KKyAgICAiIiIK
KworQGhvb2tzcGVjKGZpcnN0cmVzdWx0PVRydWUpCitkZWYgcHl0ZXN0X3B5Y29sbGVjdF9tYWtl
aXRlbShjb2xsZWN0b3IsIG5hbWUsIG9iaik6CisgICAgIiIiIHJldHVybiBjdXN0b20gaXRlbS9j
b2xsZWN0b3IgZm9yIGEgcHl0aG9uIG9iamVjdCBpbiBhIG1vZHVsZSwgb3IgTm9uZS4gICIiIgor
CitAaG9va3NwZWMoZmlyc3RyZXN1bHQ9VHJ1ZSkKK2RlZiBweXRlc3RfcHlmdW5jX2NhbGwocHlm
dW5jaXRlbSk6CisgICAgIiIiIGNhbGwgdW5kZXJseWluZyB0ZXN0IGZ1bmN0aW9uLiAiIiIKKwor
ZGVmIHB5dGVzdF9nZW5lcmF0ZV90ZXN0cyhtZXRhZnVuYyk6CisgICAgIiIiIGdlbmVyYXRlICht
dWx0aXBsZSkgcGFyYW1ldHJpemVkIGNhbGxzIHRvIGEgdGVzdCBmdW5jdGlvbi4iIiIKKworIyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisjIGdlbmVyaWMgcnVudGVzdCByZWxhdGVkIGhvb2tzCisjIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworQGhvb2tzcGVjKGZpcnN0cmVzdWx0PVRydWUpCitkZWYgcHl0ZXN0X3J1
bnRlc3Rsb29wKHNlc3Npb24pOgorICAgICIiIiBjYWxsZWQgZm9yIHBlcmZvcm1pbmcgdGhlIG1h
aW4gcnVudGVzdCBsb29wCisgICAgKGFmdGVyIGNvbGxlY3Rpb24gZmluaXNoZWQpLiAiIiIKKwor
ZGVmIHB5dGVzdF9pdGVtc3RhcnQoaXRlbSwgbm9kZSk6CisgICAgIiIiIChkZXByZWNhdGVkLCB1
c2UgcHl0ZXN0X3J1bnRlc3RfbG9nc3RhcnQpLiAiIiIKKworQGhvb2tzcGVjKGZpcnN0cmVzdWx0
PVRydWUpCitkZWYgcHl0ZXN0X3J1bnRlc3RfcHJvdG9jb2woaXRlbSwgbmV4dGl0ZW0pOgorICAg
ICIiIiBpbXBsZW1lbnRzIHRoZSBydW50ZXN0X3NldHVwL2NhbGwvdGVhcmRvd24gcHJvdG9jb2wg
Zm9yCisgICAgdGhlIGdpdmVuIHRlc3QgaXRlbSwgaW5jbHVkaW5nIGNhcHR1cmluZyBleGNlcHRp
b25zIGFuZCBjYWxsaW5nCisgICAgcmVwb3J0aW5nIGhvb2tzLgorCisgICAgOmFyZyBpdGVtOiB0
ZXN0IGl0ZW0gZm9yIHdoaWNoIHRoZSBydW50ZXN0IHByb3RvY29sIGlzIHBlcmZvcm1lZC4KKwor
ICAgIDphcmcgbmV4dGl0ZW06IHRoZSBzY2hlZHVsZWQtdG8tYmUtbmV4dCB0ZXN0IGl0ZW0gKG9y
IE5vbmUgaWYgdGhpcworICAgICAgICAgICAgICAgICAgIGlzIHRoZSBlbmQgbXkgZnJpZW5kKS4g
IFRoaXMgYXJndW1lbnQgaXMgcGFzc2VkIG9uIHRvCisgICAgICAgICAgICAgICAgICAgOnB5OmZ1
bmM6YHB5dGVzdF9ydW50ZXN0X3RlYXJkb3duYC4KKworICAgIDpyZXR1cm4gYm9vbGVhbjogVHJ1
ZSBpZiBubyBmdXJ0aGVyIGhvb2sgaW1wbGVtZW50YXRpb25zIHNob3VsZCBiZSBpbnZva2VkLgor
ICAgICIiIgorCitkZWYgcHl0ZXN0X3J1bnRlc3RfbG9nc3RhcnQobm9kZWlkLCBsb2NhdGlvbik6
CisgICAgIiIiIHNpZ25hbCB0aGUgc3RhcnQgb2YgcnVubmluZyBhIHNpbmdsZSB0ZXN0IGl0ZW0u
ICIiIgorCitkZWYgcHl0ZXN0X3J1bnRlc3Rfc2V0dXAoaXRlbSk6CisgICAgIiIiIGNhbGxlZCBi
ZWZvcmUgYGBweXRlc3RfcnVudGVzdF9jYWxsKGl0ZW0pYGAuICIiIgorCitkZWYgcHl0ZXN0X3J1
bnRlc3RfY2FsbChpdGVtKToKKyAgICAiIiIgY2FsbGVkIHRvIGV4ZWN1dGUgdGhlIHRlc3QgYGBp
dGVtYGAuICIiIgorCitkZWYgcHl0ZXN0X3J1bnRlc3RfdGVhcmRvd24oaXRlbSwgbmV4dGl0ZW0p
OgorICAgICIiIiBjYWxsZWQgYWZ0ZXIgYGBweXRlc3RfcnVudGVzdF9jYWxsYGAuCisKKyAgICA6
YXJnIG5leHRpdGVtOiB0aGUgc2NoZWR1bGVkLXRvLWJlLW5leHQgdGVzdCBpdGVtIChOb25lIGlm
IG5vIGZ1cnRoZXIKKyAgICAgICAgICAgICAgICAgICB0ZXN0IGl0ZW0gaXMgc2NoZWR1bGVkKS4g
IFRoaXMgYXJndW1lbnQgY2FuIGJlIHVzZWQgdG8KKyAgICAgICAgICAgICAgICAgICBwZXJmb3Jt
IGV4YWN0IHRlYXJkb3ducywgaS5lLiBjYWxsaW5nIGp1c3QgZW5vdWdoIGZpbmFsaXplcnMKKyAg
ICAgICAgICAgICAgICAgICBzbyB0aGF0IG5leHRpdGVtIG9ubHkgbmVlZHMgdG8gY2FsbCBzZXR1
cC1mdW5jdGlvbnMuCisgICAgIiIiCisKK0Bob29rc3BlYyhmaXJzdHJlc3VsdD1UcnVlKQorZGVm
IHB5dGVzdF9ydW50ZXN0X21ha2VyZXBvcnQoaXRlbSwgY2FsbCk6CisgICAgIiIiIHJldHVybiBh
IDpweTpjbGFzczpgX3B5dGVzdC5ydW5uZXIuVGVzdFJlcG9ydGAgb2JqZWN0CisgICAgZm9yIHRo
ZSBnaXZlbiA6cHk6Y2xhc3M6YHB5dGVzdC5JdGVtYCBhbmQKKyAgICA6cHk6Y2xhc3M6YF9weXRl
c3QucnVubmVyLkNhbGxJbmZvYC4KKyAgICAiIiIKKworZGVmIHB5dGVzdF9ydW50ZXN0X2xvZ3Jl
cG9ydChyZXBvcnQpOgorICAgICIiIiBwcm9jZXNzIGEgdGVzdCBzZXR1cC9jYWxsL3RlYXJkb3du
IHJlcG9ydCByZWxhdGluZyB0bworICAgIHRoZSByZXNwZWN0aXZlIHBoYXNlIG9mIGV4ZWN1dGlu
ZyBhIHRlc3QuICIiIgorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgdGVzdCBzZXNzaW9uIHJlbGF0
ZWQgaG9va3MKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitkZWYgcHl0ZXN0X3Nlc3Npb25zdGFydChz
ZXNzaW9uKToKKyAgICAiIiIgYmVmb3JlIHNlc3Npb24ubWFpbigpIGlzIGNhbGxlZC4gIiIiCisK
K2RlZiBweXRlc3Rfc2Vzc2lvbmZpbmlzaChzZXNzaW9uLCBleGl0c3RhdHVzKToKKyAgICAiIiIg
d2hvbGUgdGVzdCBydW4gZmluaXNoZXMuICIiIgorCitkZWYgcHl0ZXN0X3VuY29uZmlndXJlKGNv
bmZpZyk6CisgICAgIiIiIGNhbGxlZCBiZWZvcmUgdGVzdCBwcm9jZXNzIGlzIGV4aXRlZC4gICIi
IgorCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBob29rcyBmb3IgY3VzdG9taXNpbmcgdGhlIGFz
c2VydCBtZXRob2RzCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZGVmIHB5dGVzdF9hc3NlcnRyZXBy
X2NvbXBhcmUoY29uZmlnLCBvcCwgbGVmdCwgcmlnaHQpOgorICAgICIiInJldHVybiBleHBsYW5h
dGlvbiBmb3IgY29tcGFyaXNvbnMgaW4gZmFpbGluZyBhc3NlcnQgZXhwcmVzc2lvbnMuCisKKyAg
ICBSZXR1cm4gTm9uZSBmb3Igbm8gY3VzdG9tIGV4cGxhbmF0aW9uLCBvdGhlcndpc2UgcmV0dXJu
IGEgbGlzdAorICAgIG9mIHN0cmluZ3MuICBUaGUgc3RyaW5ncyB3aWxsIGJlIGpvaW5lZCBieSBu
ZXdsaW5lcyBidXQgYW55IG5ld2xpbmVzCisgICAgKmluKiBhIHN0cmluZyB3aWxsIGJlIGVzY2Fw
ZWQuICBOb3RlIHRoYXQgYWxsIGJ1dCB0aGUgZmlyc3QgbGluZSB3aWxsCisgICAgYmUgaW5kZW50
ZWQgc2xpZ3RobHksIHRoZSBpbnRlbnRpb24gaXMgZm9yIHRoZSBmaXJzdCBsaW5lIHRvIGJlIGEg
c3VtbWFyeS4KKyAgICAiIiIKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGhvb2tzIGZvciBpbmZs
dWVuY2luZyByZXBvcnRpbmcgKGludm9rZWQgZnJvbSBfcHl0ZXN0X3Rlcm1pbmFsKQorIyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisKK2RlZiBweXRlc3RfcmVwb3J0X2hlYWRlcihjb25maWcsIHN0YXJ0ZGly
KToKKyAgICAiIiIgcmV0dXJuIGEgc3RyaW5nIHRvIGJlIGRpc3BsYXllZCBhcyBoZWFkZXIgaW5m
byBmb3IgdGVybWluYWwgcmVwb3J0aW5nLiIiIgorCitAaG9va3NwZWMoZmlyc3RyZXN1bHQ9VHJ1
ZSkKK2RlZiBweXRlc3RfcmVwb3J0X3Rlc3RzdGF0dXMocmVwb3J0KToKKyAgICAiIiIgcmV0dXJu
IHJlc3VsdC1jYXRlZ29yeSwgc2hvcnRsZXR0ZXIgYW5kIHZlcmJvc2Ugd29yZCBmb3IgcmVwb3J0
aW5nLiIiIgorCitkZWYgcHl0ZXN0X3Rlcm1pbmFsX3N1bW1hcnkodGVybWluYWxyZXBvcnRlcik6
CisgICAgIiIiIGFkZCBhZGRpdGlvbmFsIHNlY3Rpb24gaW4gdGVybWluYWwgc3VtbWFyeSByZXBv
cnRpbmcuICAiIiIKKworCitAaG9va3NwZWMoaGlzdG9yaWM9VHJ1ZSkKK2RlZiBweXRlc3RfbG9n
d2FybmluZyhtZXNzYWdlLCBjb2RlLCBub2RlaWQsIGZzbG9jYXRpb24pOgorICAgICIiIiBwcm9j
ZXNzIGEgd2FybmluZyBzcGVjaWZpZWQgYnkgYSBtZXNzYWdlLCBhIGNvZGUgc3RyaW5nLAorICAg
IGEgbm9kZWlkIGFuZCBmc2xvY2F0aW9uIChib3RoIG9mIHdoaWNoIG1heSBiZSBOb25lCisgICAg
aWYgdGhlIHdhcm5pbmcgaXMgbm90IHRpZWQgdG8gYSBwYXJ0aWxhciBub2RlL2xvY2F0aW9uKS4i
IiIKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGRvY3Rlc3QgaG9va3MKKyMgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorCitAaG9va3NwZWMoZmlyc3RyZXN1bHQ9VHJ1ZSkKK2RlZiBweXRlc3RfZG9jdGVzdF9w
cmVwYXJlX2NvbnRlbnQoY29udGVudCk6CisgICAgIiIiIHJldHVybiBwcm9jZXNzZWQgY29udGVu
dCBmb3IgYSBnaXZlbiBkb2N0ZXN0IiIiCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBlcnJvciBo
YW5kbGluZyBhbmQgaW50ZXJuYWwgZGVidWdnaW5nIGhvb2tzCisjIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KworZGVmIHB5dGVzdF9pbnRlcm5hbGVycm9yKGV4Y3JlcHIsIGV4Y2luZm8pOgorICAgICIiIiBj
YWxsZWQgZm9yIGludGVybmFsIGVycm9ycy4gIiIiCisKK2RlZiBweXRlc3Rfa2V5Ym9hcmRfaW50
ZXJydXB0KGV4Y2luZm8pOgorICAgICIiIiBjYWxsZWQgZm9yIGtleWJvYXJkIGludGVycnVwdC4g
IiIiCisKK2RlZiBweXRlc3RfZXhjZXB0aW9uX2ludGVyYWN0KG5vZGUsIGNhbGwsIHJlcG9ydCk6
CisgICAgIiIiY2FsbGVkIHdoZW4gYW4gZXhjZXB0aW9uIHdhcyByYWlzZWQgd2hpY2ggY2FuIHBv
dGVudGlhbGx5IGJlCisgICAgaW50ZXJhY3RpdmVseSBoYW5kbGVkLgorCisgICAgVGhpcyBob29r
IGlzIG9ubHkgY2FsbGVkIGlmIGFuIGV4Y2VwdGlvbiB3YXMgcmFpc2VkCisgICAgdGhhdCBpcyBu
b3QgYW4gaW50ZXJuYWwgZXhjZXB0aW9uIGxpa2UgYGBza2lwLkV4Y2VwdGlvbmBgLgorICAgICIi
IgorCitkZWYgcHl0ZXN0X2VudGVyX3BkYihjb25maWcpOgorICAgICIiIiBjYWxsZWQgdXBvbiBw
ZGIuc2V0X3RyYWNlKCksIGNhbiBiZSB1c2VkIGJ5IHBsdWdpbnMgdG8gdGFrZSBzcGVjaWFsCisg
ICAgYWN0aW9uIGp1c3QgYmVmb3JlIHRoZSBweXRob24gZGVidWdnZXIgZW50ZXJzIGluIGludGVy
YWN0aXZlIG1vZGUuCisKKyAgICA6YXJnIGNvbmZpZzogcHl0ZXN0IGNvbmZpZyBvYmplY3QKKyAg
ICA6dHlwZSBjb25maWc6IF9weXRlc3QuY29uZmlnLkNvbmZpZworICAgICIiIgpkaWZmIC0tZ2l0
IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L2ltcGwg
Yi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvaW1wbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uODg5ZTM3ZTVhYmMKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19w
eXRlc3QvaW1wbApAQCAtMCwwICsxLDI1NCBAQAorU29ydGluZyBwZXItcmVzb3VyY2UKKy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2ZvciBhbnkgZ2l2ZW4gc2V0IG9mIGl0ZW1zOgor
CistIGNvbGxlY3QgaXRlbXMgcGVyIHNlc3Npb24tc2NvcGVkIHBhcmFtZXRyaXplZCBmdW5jYXJn
CistIHJlLW9yZGVyIHVudGlsIGl0ZW1zIG5vIHBhcmFtZXRyaXphdGlvbnMgYXJlIG1peGVkCisK
KyAgZXhhbXBsZXM6CisKKyAgICAgICAgdGVzdCgpCisgICAgICAgIHRlc3QxKHMxKQorICAgICAg
ICB0ZXN0MShzMikgICAgIAorICAgICAgICB0ZXN0MigpCisgICAgICAgIHRlc3QzKHMxKQorICAg
ICAgICB0ZXN0MyhzMikKKworICBnZXRzIHNvcnRlZCB0bzoKKworICAgICAgICB0ZXN0KCkKKyAg
ICAgICAgdGVzdDIoKQorICAgICAgICB0ZXN0MShzMSkKKyAgICAgICAgdGVzdDMoczEpCisgICAg
ICAgIHRlc3QxKHMyKQorICAgICAgICB0ZXN0MyhzMikKKyAKKwordGhlIG5ldyBAc2V0dXAgZnVu
Y3Rpb25zIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29uc2lk
ZXIgYSBnaXZlbiBAc2V0dXAtbWFya2VkIGZ1bmN0aW9uOjoKKworICAgIEBweXRlc3QubWFyay5z
ZXR1cChtYXhzY29wZT1TQ09QRSkKKyAgICBkZWYgbXlzZXR1cChyZXF1ZXN0LCBhcmcxLCBhcmcy
LCAuLi4pCisgICAgICAgIC4uLgorICAgICAgICByZXF1ZXN0LmFkZGZpbmFsaXplcihmaW4pCisg
ICAgICAgIC4uLgorCit0aGVuIEZVTkNBUkdTRVQgZGVub3RlcyB0aGUgc2V0IG9mIChhcmcxLCBh
cmcyLCAuLi4pIGZ1bmNhcmdzIGFuZAorYWxsIG9mIGl0cyBkZXBlbmRlbnQgZnVuY2FyZ3MuICBU
aGUgbXlzZXR1cCBmdW5jdGlvbiB3aWxsIGV4ZWN1dGUKK2ZvciBhbnkgbWF0Y2hpbmcgdGVzdCBp
dGVtIG9uY2UgcGVyIHNjb3BlLiAgCisKK1RoZSBzY29wZSBpcyBkZXRlcm1pbmVkIGFzIHRoZSBt
aW5pbXVtIHNjb3BlIG9mIGFsbCBzY29wZXMgb2YgdGhlIGFyZ3MKK2luIEZVTkNBUkdTRVQgYW5k
IHRoZSBnaXZlbiAibWF4c2NvcGUiLiAKKworSWYgbXlzZXR1cCBoYXMgYmVlbiBjYWxsZWQgYW5k
IG5vIGZpbmFsaXplcnMgaGF2ZSBiZWVuIGNhbGxlZCBpdCBpcworY2FsbGVkICJhY3RpdmUiLgor
CitGdXJ0aGVybW9yZSB0aGUgZm9sbG93aW5nIHJ1bGVzIGFwcGx5OgorCistIGlmIGFuIGFyZyB2
YWx1ZSBpbiBGVU5DQVJHU0VUIGlzIGFib3V0IHRvIGJlIHRvcm4gZG93biwgdGhlIAorICBteXNl
dHVwLXJlZ2lzdGVyZWQgZmluYWxpemVycyB3aWxsIGV4ZWN1dGUgYXMgd2VsbC4KKworLSBUaGVy
ZSB3aWxsIG5ldmVyIGJlIHR3byBhY3RpdmUgbXlzZXR1cCBpbnZvY2F0aW9ucy4KKworRXhhbXBs
ZSAxLCBzZXNzaW9uIHNjb3BlOjoKKworICAgIEBweXRlc3QubWFyay5mdW5jYXJnKHNjb3BlPSJz
ZXNzaW9uIiwgcGFyYW1zPVsxLDJdKQorICAgIGRlZiBkYihyZXF1ZXN0KToKKyAgICAgICAgcmVx
dWVzdC5hZGRmaW5hbGl6ZXIoZGJfZmluYWxpemUpCisKKyAgICBAcHl0ZXN0Lm1hcmsuc2V0dXAK
KyAgICBkZWYgbXlzZXR1cChyZXF1ZXN0LCBkYik6CisgICAgICAgIHJlcXVlc3QuYWRkZmluYWxp
emVyKG15c2V0dXBfZmluYWxpemUpCisgICAgICAgIC4uLgorCitBbmQgYSBnaXZlbiB0ZXN0IG1v
ZHVsZToKKworICAgIGRlZiB0ZXN0X3NvbWV0aGluZygpOgorICAgICAgICAuLi4KKyAgICBkZWYg
dGVzdF9vdGhlcnRoaW5nKCk6CisgICAgICAgIHBhc3MKKworSGVyZSBpcyB3aGF0IGhhcHBlbnM6
OgorCisgICAgZGIocmVxdWVzdCkgZXhlY3V0ZXMgd2l0aCByZXF1ZXN0LnBhcmFtID09IDEKKyAg
ICAgICAgbXlzZXR1cChyZXF1ZXN0LCBkYikgZXhlY3V0ZXMKKyAgICAgICAgICAgIHRlc3Rfc29t
ZXRoaW5nKCkgZXhlY3V0ZXMKKyAgICAgICAgICAgIHRlc3Rfb3RoZXJ0aGluZygpIGV4ZWN1dGVz
CisgICAgICAgICAgICBteXNldHVwX2ZpbmFsaXplKCkgZXhlY3V0ZXMKKyAgICBkYl9maW5hbGl6
ZSgpIGV4ZWN1dGVzCisgICAgZGIocmVxdWVzdCkgZXhlY3V0ZXMgd2l0aCByZXF1ZXN0LnBhcmFt
ID09IDIKKyAgICAgICAgbXlzZXR1cChyZXF1ZXN0LCBkYikgZXhlY3V0ZXMKKyAgICAgICAgICAg
IHRlc3Rfc29tZXRoaW5nKCkgZXhlY3V0ZXMKKyAgICAgICAgICAgIHRlc3Rfb3RoZXJ0aGluZygp
IGV4ZWN1dGVzCisgICAgICAgIG15c2V0dXBfZmluYWxpemUoKSBleGVjdXRlcworICAgIGRiX2Zp
bmFsaXplKCkgZXhlY3V0ZXMKKworRXhhbXBsZSAyLCBzZXNzaW9uL2Z1bmN0aW9uIHNjb3BlOjoK
KworICAgIEBweXRlc3QubWFyay5mdW5jYXJnKHNjb3BlPSJzZXNzaW9uIiwgcGFyYW1zPVsxLDJd
KQorICAgIGRlZiBkYihyZXF1ZXN0KToKKyAgICAgICAgcmVxdWVzdC5hZGRmaW5hbGl6ZXIoZGJf
ZmluYWxpemUpCisKKyAgICBAcHl0ZXN0Lm1hcmsuc2V0dXAoc2NvcGU9ImZ1bmN0aW9uIikKKyAg
ICBkZWYgbXlzZXR1cChyZXF1ZXN0LCBkYik6CisgICAgICAgIC4uLgorICAgICAgICByZXF1ZXN0
LmFkZGZpbmFsaXplcihteXNldHVwX2ZpbmFsaXplKQorICAgICAgICAuLi4KKworQW5kIGEgZ2l2
ZW4gdGVzdCBtb2R1bGU6CisKKyAgICBkZWYgdGVzdF9zb21ldGhpbmcoKToKKyAgICAgICAgLi4u
CisgICAgZGVmIHRlc3Rfb3RoZXJ0aGluZygpOgorICAgICAgICBwYXNzCisKK0hlcmUgaXMgd2hh
dCBoYXBwZW5zOjoKKworICAgIGRiKHJlcXVlc3QpIGV4ZWN1dGVzIHdpdGggcmVxdWVzdC5wYXJh
bSA9PSAxCisgICAgICAgIG15c2V0dXAocmVxdWVzdCwgZGIpIGV4ZWN1dGVzCisgICAgICAgICAg
ICB0ZXN0X3NvbWV0aGluZygpIGV4ZWN1dGVzCisgICAgICAgIG15c2V0dXBfZmluYWxpemUoKSBl
eGVjdXRlcworICAgICAgICBteXNldHVwKHJlcXVlc3QsIGRiKSBleGVjdXRlcworICAgICAgICAg
ICAgdGVzdF9vdGhlcnRoaW5nKCkgZXhlY3V0ZXMKKyAgICAgICAgbXlzZXR1cF9maW5hbGl6ZSgp
IGV4ZWN1dGVzCisgICAgZGJfZmluYWxpemUoKSBleGVjdXRlcworICAgIGRiKHJlcXVlc3QpIGV4
ZWN1dGVzIHdpdGggcmVxdWVzdC5wYXJhbSA9PSAyCisgICAgICAgIG15c2V0dXAocmVxdWVzdCwg
ZGIpIGV4ZWN1dGVzCisgICAgICAgICAgICB0ZXN0X3NvbWV0aGluZygpIGV4ZWN1dGVzCisgICAg
ICAgIG15c2V0dXBfZmluYWxpemUoKSBleGVjdXRlcworICAgICAgICBteXNldHVwKHJlcXVlc3Qs
IGRiKSBleGVjdXRlcworICAgICAgICAgICAgdGVzdF9vdGhlcnRoaW5nKCkgZXhlY3V0ZXMKKyAg
ICAgICAgbXlzZXR1cF9maW5hbGl6ZSgpIGV4ZWN1dGVzCisgICAgZGJfZmluYWxpemUoKSBleGVj
dXRlcworCisKK0V4YW1wbGUgMyAtIGZ1bmNhcmdzIHNlc3Npb24tbWl4CistLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NpbWlsYXIgd2l0aCBmdW5jYXJncywgYW4g
ZXhhbXBsZTo6CisKKyAgICBAcHl0ZXN0Lm1hcmsuZnVuY2FyZyhzY29wZT0ic2Vzc2lvbiIsIHBh
cmFtcz1bMSwyXSkKKyAgICBkZWYgZGIocmVxdWVzdCk6CisgICAgICAgIHJlcXVlc3QuYWRkZmlu
YWxpemVyKGRiX2ZpbmFsaXplKQorCisgICAgQHB5dGVzdC5tYXJrLmZ1bmNhcmcoc2NvcGU9ImZ1
bmN0aW9uIikKKyAgICBkZWYgdGFibGUocmVxdWVzdCwgZGIpOgorICAgICAgICAuLi4KKyAgICAg
ICAgcmVxdWVzdC5hZGRmaW5hbGl6ZXIodGFibGVfZmluYWxpemUpCisgICAgICAgIC4uLgorCitB
bmQgYSBnaXZlbiB0ZXN0IG1vZHVsZToKKworICAgIGRlZiB0ZXN0X3NvbWV0aGluZyh0YWJsZSk6
CisgICAgICAgIC4uLgorICAgIGRlZiB0ZXN0X290aGVydGhpbmcodGFibGUpOgorICAgICAgICBw
YXNzCisgICAgZGVmIHRlc3RfdGhpcmR0aGluZygpOgorICAgICAgICBwYXNzCisKK0hlcmUgaXMg
d2hhdCBoYXBwZW5zOjoKKworICAgIGRiKHJlcXVlc3QpIGV4ZWN1dGVzIHdpdGggcGFyYW0gPT0g
MQorICAgICAgICB0YWJsZShyZXF1ZXN0LCBkYikKKyAgICAgICAgICAgIHRlc3Rfc29tZXRoaW5n
KHRhYmxlKQorICAgICAgICB0YWJsZV9maW5hbGl6ZSgpCisgICAgICAgIHRhYmxlKHJlcXVlc3Qs
IGRiKQorICAgICAgICAgICAgdGVzdF9vdGhlcnRoaW5nKHRhYmxlKQorICAgICAgICB0YWJsZV9m
aW5hbGl6ZSgpCisgICAgZGJfZmluYWxpemUKKyAgICBkYihyZXF1ZXN0KSBleGVjdXRlcyB3aXRo
IHBhcmFtID09IDIKKyAgICAgICAgdGFibGUocmVxdWVzdCwgZGIpCisgICAgICAgICAgICB0ZXN0
X3NvbWV0aGluZyh0YWJsZSkKKyAgICAgICAgdGFibGVfZmluYWxpemUoKQorICAgICAgICB0YWJs
ZShyZXF1ZXN0LCBkYikKKyAgICAgICAgICAgIHRlc3Rfb3RoZXJ0aGluZyh0YWJsZSkKKyAgICAg
ICAgdGFibGVfZmluYWxpemUoKQorICAgIGRiX2ZpbmFsaXplCisgICAgdGVzdF90aGlyZHRoaW5n
KCkKKyAgICAKK0RhdGEgc3RydWN0dXJlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworcHl0ZXN0
IGludGVybmFsbHkgbWFpbnRhaW5zIGEgZGljdCBvZiBhY3RpdmUgZnVuY2FyZ3Mgd2l0aCBjYWNo
ZSwgcGFyYW0sCitmaW5hbGl6ZXIsIChzY29wZWl0ZW0/KSBpbmZvcm1hdGlvbjoKKworICAgIGFj
dGl2ZV9mdW5jYXJncyA9IGRpY3QoKQorCitpZiBhIHBhcmFtZXRyaXplZCAiZGIiIGlzIGFjdGl2
YXRlZDoKKyAgICAKKyAgICBhY3RpdmVfZnVuY2FyZ3NbImRiIl0gPSBGdW5jYXJnSW5mbyhkYnZh
bHVlLCBwYXJhbWluZGV4LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBGdW5jYXJnRmluYWxpemUoLi4uKSwgc2NvcGVpdGVtKQorCitpZiBhIHRlc3QgaXMgdG9ybiBk
b3duIGFuZCB0aGUgbmV4dCB0ZXN0IHJlcXVpcmVzIGEgZGlmZmVyZW50bHkgCitwYXJhbWV0cml6
ZWQgImRiIjoKKworICAgIGZvciBhcmduYW1lIGluIGl0ZW0uY2FsbHNwZWMucGFyYW1zOgorICAg
ICAgICBpZiBhcmduYW1lIGluIGFjdGl2ZV9mdW5jYXJnczoKKyAgICAgICAgICAgIGZ1bmNhcmdp
bmZvID0gYWN0aXZlX2Z1bmNhcmdzW2FyZ25hbWVdCisgICAgICAgICAgICBpZiBmdW5jYXJnaW5m
by5wYXJhbSAhPSBpdGVtLmNhbGxzcGVjLnBhcmFtc1thcmduYW1lXToKKyAgICAgICAgICAgICAg
ICBmdW5jYXJnaW5mby5jYWxsZmluYWxpemVyKCkKKyAgICAgICAgICAgICAgICBkZWwgbm9kZTJm
dW5jYXJnW2Z1bmNhcmdpbmZvLnNjb3BlaXRlbV0KKyAgICAgICAgICAgICAgICBkZWwgYWN0aXZl
X2Z1bmNhcmdzW2FyZ25hbWVdCisgICAgbm9kZXNfdG9fYmVfdG9ybl9kb3duID0gLi4uCisgICAg
Zm9yIG5vZGUgaW4gbm9kZXNfdG9fYmVfdG9ybl9kb3duOgorICAgICAgICBpZiBub2RlIGluIG5v
ZGUyZnVuY2FyZzoKKyAgICAgICAgICAgIGFyZ25hbWUgPSBub2RlMmZ1bmNhcmdbbm9kZV0KKyAg
ICAgICAgICAgIGFjdGl2ZV9mdW5jYXJnc1thcmduYW1lXS5jYWxsZmluYWxpemVyKCkKKyAgICAg
ICAgICAgIGRlbCBub2RlMmZ1bmNhcmdbbm9kZV0KKyAgICAgICAgICAgIGRlbCBhY3RpdmVfZnVu
Y2FyZ3NbYXJnbmFtZV0KKworaWYgYSB0ZXN0IGlzIHNldHVwIHJlcXVpcmluZyBhICJkYiIgZnVu
Y2FyZzoKKworICAgIGlmICJkYiIgaW4gYWN0aXZlX2Z1bmNhcmdzOgorICAgICAgICByZXR1cm4g
YWN0aXZlX2Z1bmNhcmdzWyJkYiJdWzBdCisgICAgZnVuY2FyZ2luZm8gPSBzZXR1cF9mdW5jYXJn
KCkKKyAgICBhY3RpdmVfZnVuY2FyZ3NbImRiIl0gPSBmdW5jYXJnaW5mbworICAgIG5vZGUyZnVu
Y2FyZ1tmdW5jYXJnaW5mby5zY29wZWl0ZW1dID0gImRiIgorCitJbXBsZW1lbnRhdGlvbiBwbGFu
IGZvciByZXNvdXJjZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCisxLiBSZXZlcnQgRnVuY2FyZ1JlcXVlc3QgdG8gdGhlIG9sZCBmb3JtLCB1bm1lcmdlIGl0
ZW0vcmVxdWVzdAorICAgKGRvbmUpCisyLiBtYWtlIGZ1bmNhcmcgZmFjdG9yaWVzIGJlIGRpc2Nv
dmVyZWQgYXQgY29sbGVjdGlvbiB0aW1lCiszLiBJbnRyb2R1Y2UgZnVuY2FyZyBtYXJrZXIKKzQu
IEludHJvZHVjZSBmdW5jYXJnIHNjb3BlIHBhcmFtZXRlcgorNS4gSW50cm9kdWNlIGZ1bmNhcmcg
cGFyYW1ldHJpemUgcGFyYW1ldGVyCis2LiBtYWtlIHNldHVwIGZ1bmN0aW9ucyBiZSBkaXNjb3Zl
cmVkIGF0IGNvbGxlY3Rpb24gdGltZQorNy4gKEludHJvZHVjZSBhIHB5dGVzdF9maXh0dXJlX3By
b3RvY29sL3NldHVwX2Z1bmNhcmdzIGhvb2spCisKK21ldGhvZHMgYW5kIGRhdGEgc3RydWN0dXJl
cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQSBGdW5jYXJjTWFuYWdlciBo
b2xkcyBhbGwgaW5mb3JtYXRpb24gYWJvdXQgZnVuY2FyZyBkZWZpbml0aW9ucworaW5jbHVkaW5n
IHBhcmFtZXRyaXphdGlvbiBhbmQgc2NvcGUgZGVmaW5pdGlvbnMuICBJdCBpbXBsZW1lbnRzCith
IHB5dGVzdF9nZW5lcmF0ZV90ZXN0cyBob29rIHdoaWNoIHBlcmZvcm1zIHBhcmFtZXRyaXphdGlv
biBhcyBhcHByb3ByaWF0ZS4KKworYXMgYSBzaW1wbGUgZXhhbXBsZSwgbGV0J3MgY29uc2lkZXIg
YSB0cmVlIHdoZXJlIGEgdGVzdCBmdW5jdGlvbiByZXF1aXJlcworYSAiYWJjIiBmdW5jYXJnIGFu
ZCBpdHMgZmFjdG9yeSBkZWZpbmVzIGl0IGFzIHBhcmFtZXRyaXplZCBhbmQgc2NvcGVkCitmb3Ig
TW9kdWxlcy4gIFdoZW4gY29sbGVjdGlvbnMgaGl0cyB0aGUgZnVuY3Rpb24gaXRlbSwgaXQgY3Jl
YXRlcwordGhlIG1ldGFmdW5jIG9iamVjdCwgYW5kIGNhbGxzIGZ1bmNhcmdkYi5weXRlc3RfZ2Vu
ZXJhdGVfdGVzdHMobWV0YWZ1bmMpCit3aGljaCBsb29rcyB1cCBhdmFpbGFibGUgZnVuY2FyZyBm
YWN0b3JpZXMgYW5kIHRoZWlyIHNjb3BlIGFuZCBwYXJhbWV0cml6YXRpb24uCitUaGlzIGluZm9y
bWF0aW9uIGlzIGVxdWl2YWxlbnQgdG8gd2hhdCBjYW4gYmUgcHJvdmlkZWQgdG9kYXkgZGlyZWN0
bHkKK2F0IHRoZSBmdW5jdGlvbiBzaXRlIGFuZCBpdCBzaG91bGQgdGh1cyBiZSByZWxhdGl2ZWx5
IHN0cmFpZ2h0IGZvcndhcmQKK3RvIGltcGxlbWVudCB0aGUgYWRkaXRpb25hbCB3YXkgb2YgZGVm
aW5pbmcgcGFyYW1ldHJpemF0aW9uL3Njb3BpbmcuCisKK2NvbmZ0ZXN0IGxvYWRpbmc6CisgICAg
ZWFjaCBmdW5jYXJnLWZhY3Rvcnkgd2lsbCBwb3B1bGF0ZSB0aGUgc2Vzc2lvbi5mdW5jYXJnbWFu
YWdlcgorCitXaGVuIGEgdGVzdCBpdGVtIGlzIGNvbGxlY3RlZCwgaXQgZ3Jvd3MgYSBkaWN0aW9u
YXJ5IAorKGZ1bmNhcmduYW1lMmZhY3RvcnljYWxsbGlzdCkuICBBIGZhY3RvcnkgbG9va3VwIGlz
IHBlcmZvcm1lZCAKK2ZvciBlYWNoIHJlcXVpcmVkIGZ1bmNhcmcuICBUaGUgcmVzdWx0aW5nIGZh
Y3RvcnkgY2FsbCBpcyBzdG9yZWQgCit3aXRoIHRoZSBpdGVtLiAgSWYgYSBmdW5jdGlvbiBpcyBw
YXJhbWV0cml6ZWQgbXVsdGlwbGUgaXRlbXMgYXJlIAorY3JlYXRlZCB3aXRoIHJlc3BlY3RpdmUg
ZmFjdG9yeSBjYWxscy4gRWxzZSBpZiBhIGZhY3RvcnkgaXMgcGFyYW1ldHJpemVkCittdWx0aXBs
ZSBpdGVtcyBhbmQgY2FsbHMgdG8gdGhlIGZhY3RvcnkgZnVuY3Rpb24gYXJlIGNyZWF0ZWQgYXMg
d2VsbC4KKworQXQgc2V0dXAgdGltZSwgYW4gaXRlbSBwb3B1bGF0ZXMgYSBmdW5jYXJncyBtYXBw
aW5nLCBtYXBwaW5nIG5hbWVzCit0byB2YWx1ZXMuICBJZiBhIHZhbHVlIGlzIGZ1bmNhcmcgZmFj
dG9yaWVzIGFyZSBxdWVyaWVkIGZvciBhIGdpdmVuIGl0ZW0KK3Rlc3QgZnVuY3Rpb25zIGFuZCBz
ZXR1cCBmdW5jdGlvbnMgYXJlIHB1dCBpbiBhIGNsYXNzCit3aGljaCBsb29rcyB1cCByZXF1aXJl
ZCBmdW5jYXJnIGZhY3Rvcmllcy4KKworCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBv
cnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvanVuaXR4bWwucHkgYi9XZWJEcml2ZXJUZXN0
cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvanVuaXR4bWwucHkKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjY2MGQ3MThhNmE4Ci0tLSAvZGV2L251bGwK
KysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L2p1
bml0eG1sLnB5CkBAIC0wLDAgKzEsMzg3IEBACisiIiIKKyAgICByZXBvcnQgdGVzdCByZXN1bHRz
IGluIEpVbml0LVhNTCBmb3JtYXQsCisgICAgZm9yIHVzZSB3aXRoIEplbmtpbnMgYW5kIGJ1aWxk
IGludGVncmF0aW9uIHNlcnZlcnMuCisKKworQmFzZWQgb24gaW5pdGlhbCBjb2RlIGZyb20gUm9z
cyBMYXdsZXkuCisiIiIKKyMgT3V0cHV0IGNvbmZvcm1zIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9q
ZW5raW5zY2kveHVuaXQtcGx1Z2luL2Jsb2IvbWFzdGVyLworIyBzcmMvbWFpbi9yZXNvdXJjZXMv
b3JnL2plbmtpbnNjaS9wbHVnaW5zL3h1bml0L3R5cGVzL21vZGVsL3hzZC9qdW5pdC0xMC54c2QK
KworaW1wb3J0IHB5CitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHN5cworaW1wb3J0IHRp
bWUKK2ltcG9ydCBweXRlc3QKKworIyBQeXRob24gMi5YIGFuZCAzLlggY29tcGF0aWJpbGl0eQor
aWYgc3lzLnZlcnNpb25faW5mb1swXSA8IDM6CisgICAgZnJvbSBjb2RlY3MgaW1wb3J0IG9wZW4K
K2Vsc2U6CisgICAgdW5pY2hyID0gY2hyCisgICAgdW5pY29kZSA9IHN0cgorICAgIGxvbmcgPSBp
bnQKKworCitjbGFzcyBKdW5pdChweS54bWwuTmFtZXNwYWNlKToKKyAgICBwYXNzCisKKyMgV2Ug
bmVlZCB0byBnZXQgdGhlIHN1YnNldCBvZiB0aGUgaW52YWxpZCB1bmljb2RlIHJhbmdlcyBhY2Nv
cmRpbmcgdG8KKyMgWE1MIDEuMCB3aGljaCBhcmUgdmFsaWQgaW4gdGhpcyBweXRob24gYnVpbGQu
ICBIZW5jZSB3ZSBjYWxjdWxhdGUKKyMgdGhpcyBkeW5hbWljYWxseSBpbnN0ZWFkIG9mIGhhcmRj
b2RpbmcgaXQuICBUaGUgc3BlYyByYW5nZSBvZiB2YWxpZAorIyBjaGFycyBpczogQ2hhciA6Oj0g
I3g5IHwgI3hBIHwgI3hEIHwgWyN4MjAtI3hEN0ZGXSB8IFsjeEUwMDAtI3hGRkZEXQorIyAgICAg
ICAgICAgICAgICAgICAgfCBbI3gxMDAwMC0jeDEwRkZGRl0KK19sZWdhbF9jaGFycyA9ICgweDA5
LCAweDBBLCAweDBkKQorX2xlZ2FsX3JhbmdlcyA9ICgKKyAgICAoMHgyMCwgMHg3RSksICgweDgw
LCAweEQ3RkYpLCAoMHhFMDAwLCAweEZGRkQpLCAoMHgxMDAwMCwgMHgxMEZGRkYpLAorKQorX2xl
Z2FsX3htbF9yZSA9IFsKKyAgICB1bmljb2RlKCIlcy0lcyIpICUgKHVuaWNocihsb3cpLCB1bmlj
aHIoaGlnaCkpCisgICAgZm9yIChsb3csIGhpZ2gpIGluIF9sZWdhbF9yYW5nZXMgaWYgbG93IDwg
c3lzLm1heHVuaWNvZGUKK10KK19sZWdhbF94bWxfcmUgPSBbdW5pY2hyKHgpIGZvciB4IGluIF9s
ZWdhbF9jaGFyc10gKyBfbGVnYWxfeG1sX3JlCitpbGxlZ2FsX3htbF9yZSA9IHJlLmNvbXBpbGUo
dW5pY29kZSgnW14lc10nKSAlIHVuaWNvZGUoJycpLmpvaW4oX2xlZ2FsX3htbF9yZSkpCitkZWwg
X2xlZ2FsX2NoYXJzCitkZWwgX2xlZ2FsX3JhbmdlcworZGVsIF9sZWdhbF94bWxfcmUKKworX3B5
X2V4dF9yZSA9IHJlLmNvbXBpbGUociJcLnB5JCIpCisKKworZGVmIGJpbl94bWxfZXNjYXBlKGFy
Zyk6CisgICAgZGVmIHJlcGwobWF0Y2hvYmopOgorICAgICAgICBpID0gb3JkKG1hdGNob2JqLmdy
b3VwKCkpCisgICAgICAgIGlmIGkgPD0gMHhGRjoKKyAgICAgICAgICAgIHJldHVybiB1bmljb2Rl
KCcjeCUwMlgnKSAlIGkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiB1bmljb2Rl
KCcjeCUwNFgnKSAlIGkKKworICAgIHJldHVybiBweS54bWwucmF3KGlsbGVnYWxfeG1sX3JlLnN1
YihyZXBsLCBweS54bWwuZXNjYXBlKGFyZykpKQorCisKK2NsYXNzIF9Ob2RlUmVwb3J0ZXIob2Jq
ZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbm9kZWlkLCB4bWwpOgorCisgICAgICAgIHNl
bGYuaWQgPSBub2RlaWQKKyAgICAgICAgc2VsZi54bWwgPSB4bWwKKyAgICAgICAgc2VsZi5hZGRf
c3RhdHMgPSBzZWxmLnhtbC5hZGRfc3RhdHMKKyAgICAgICAgc2VsZi5kdXJhdGlvbiA9IDAKKyAg
ICAgICAgc2VsZi5wcm9wZXJ0aWVzID0gW10KKyAgICAgICAgc2VsZi5ub2RlcyA9IFtdCisgICAg
ICAgIHNlbGYudGVzdGNhc2UgPSBOb25lCisgICAgICAgIHNlbGYuYXR0cnMgPSB7fQorCisgICAg
ZGVmIGFwcGVuZChzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi54bWwuYWRkX3N0YXRzKHR5cGUo
bm9kZSkuX19uYW1lX18pCisgICAgICAgIHNlbGYubm9kZXMuYXBwZW5kKG5vZGUpCisKKyAgICBk
ZWYgYWRkX3Byb3BlcnR5KHNlbGYsIG5hbWUsIHZhbHVlKToKKyAgICAgICAgc2VsZi5wcm9wZXJ0
aWVzLmFwcGVuZCgoc3RyKG5hbWUpLCBiaW5feG1sX2VzY2FwZSh2YWx1ZSkpKQorCisgICAgZGVm
IG1ha2VfcHJvcGVydGllc19ub2RlKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gYSBKdW5pdCBu
b2RlIGNvbnRhaW5pbmcgY3VzdG9tIHByb3BlcnRpZXMsIGlmIGFueS4KKyAgICAgICAgIiIiCisg
ICAgICAgIGlmIHNlbGYucHJvcGVydGllczoKKyAgICAgICAgICAgIHJldHVybiBKdW5pdC5wcm9w
ZXJ0aWVzKFsKKyAgICAgICAgICAgICAgICBKdW5pdC5wcm9wZXJ0eShuYW1lPW5hbWUsIHZhbHVl
PXZhbHVlKQorICAgICAgICAgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBzZWxmLnByb3BlcnRp
ZXMKKyAgICAgICAgICAgIF0pCisgICAgICAgIHJldHVybiAnJworCisgICAgZGVmIHJlY29yZF90
ZXN0cmVwb3J0KHNlbGYsIHRlc3RyZXBvcnQpOgorICAgICAgICBhc3NlcnQgbm90IHNlbGYudGVz
dGNhc2UKKyAgICAgICAgbmFtZXMgPSBtYW5nbGVfdGVzdF9hZGRyZXNzKHRlc3RyZXBvcnQubm9k
ZWlkKQorICAgICAgICBjbGFzc25hbWVzID0gbmFtZXNbOi0xXQorICAgICAgICBpZiBzZWxmLnht
bC5wcmVmaXg6CisgICAgICAgICAgICBjbGFzc25hbWVzLmluc2VydCgwLCBzZWxmLnhtbC5wcmVm
aXgpCisgICAgICAgIGF0dHJzID0geworICAgICAgICAgICAgImNsYXNzbmFtZSI6ICIuIi5qb2lu
KGNsYXNzbmFtZXMpLAorICAgICAgICAgICAgIm5hbWUiOiBiaW5feG1sX2VzY2FwZShuYW1lc1st
MV0pLAorICAgICAgICAgICAgImZpbGUiOiB0ZXN0cmVwb3J0LmxvY2F0aW9uWzBdLAorICAgICAg
ICB9CisgICAgICAgIGlmIHRlc3RyZXBvcnQubG9jYXRpb25bMV0gaXMgbm90IE5vbmU6CisgICAg
ICAgICAgICBhdHRyc1sibGluZSJdID0gdGVzdHJlcG9ydC5sb2NhdGlvblsxXQorICAgICAgICBz
ZWxmLmF0dHJzID0gYXR0cnMKKworICAgIGRlZiB0b194bWwoc2VsZik6CisgICAgICAgIHRlc3Rj
YXNlID0gSnVuaXQudGVzdGNhc2UodGltZT1zZWxmLmR1cmF0aW9uLCAqKnNlbGYuYXR0cnMpCisg
ICAgICAgIHRlc3RjYXNlLmFwcGVuZChzZWxmLm1ha2VfcHJvcGVydGllc19ub2RlKCkpCisgICAg
ICAgIGZvciBub2RlIGluIHNlbGYubm9kZXM6CisgICAgICAgICAgICB0ZXN0Y2FzZS5hcHBlbmQo
bm9kZSkKKyAgICAgICAgcmV0dXJuIHRlc3RjYXNlCisKKyAgICBkZWYgX2FkZF9zaW1wbGUoc2Vs
Ziwga2luZCwgbWVzc2FnZSwgZGF0YT1Ob25lKToKKyAgICAgICAgZGF0YSA9IGJpbl94bWxfZXNj
YXBlKGRhdGEpCisgICAgICAgIG5vZGUgPSBraW5kKGRhdGEsIG1lc3NhZ2U9bWVzc2FnZSkKKyAg
ICAgICAgc2VsZi5hcHBlbmQobm9kZSkKKworICAgIGRlZiBfd3JpdGVfY2FwdHVyZWRfb3V0cHV0
KHNlbGYsIHJlcG9ydCk6CisgICAgICAgIGZvciBjYXBuYW1lIGluICgnb3V0JywgJ2VycicpOgor
ICAgICAgICAgICAgYWxsY29udGVudCA9ICIiCisgICAgICAgICAgICBmb3IgbmFtZSwgY29udGVu
dCBpbiByZXBvcnQuZ2V0X3NlY3Rpb25zKCJDYXB0dXJlZCBzdGQlcyIgJQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXBuYW1lKToKKyAgICAg
ICAgICAgICAgICBhbGxjb250ZW50ICs9IGNvbnRlbnQKKyAgICAgICAgICAgIGlmIGFsbGNvbnRl
bnQ6CisgICAgICAgICAgICAgICAgdGFnID0gZ2V0YXR0cihKdW5pdCwgJ3N5c3RlbS0nICsgY2Fw
bmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFwcGVuZCh0YWcoYmluX3htbF9lc2NhcGUoYWxs
Y29udGVudCkpKQorCisgICAgZGVmIGFwcGVuZF9wYXNzKHNlbGYsIHJlcG9ydCk6CisgICAgICAg
IHNlbGYuYWRkX3N0YXRzKCdwYXNzZWQnKQorICAgICAgICBzZWxmLl93cml0ZV9jYXB0dXJlZF9v
dXRwdXQocmVwb3J0KQorCisgICAgZGVmIGFwcGVuZF9mYWlsdXJlKHNlbGYsIHJlcG9ydCk6Cisg
ICAgICAgICMgbXNnID0gc3RyKHJlcG9ydC5sb25ncmVwci5yZXBydHJhY2ViYWNrLmV4dHJhbGlu
ZSkKKyAgICAgICAgaWYgaGFzYXR0cihyZXBvcnQsICJ3YXN4ZmFpbCIpOgorICAgICAgICAgICAg
c2VsZi5fYWRkX3NpbXBsZSgKKyAgICAgICAgICAgICAgICBKdW5pdC5za2lwcGVkLAorICAgICAg
ICAgICAgICAgICJ4ZmFpbC1tYXJrZWQgdGVzdCBwYXNzZXMgdW5leHBlY3RlZGx5IikKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIGlmIGhhc2F0dHIocmVwb3J0LmxvbmdyZXByLCAicmVwcmNy
YXNoIik6CisgICAgICAgICAgICAgICAgbWVzc2FnZSA9IHJlcG9ydC5sb25ncmVwci5yZXByY3Jh
c2gubWVzc2FnZQorICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHJlcG9ydC5sb25ncmVwciwg
KHVuaWNvZGUsIHN0cikpOgorICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSByZXBvcnQubG9uZ3Jl
cHIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbWVzc2FnZSA9IHN0cihyZXBv
cnQubG9uZ3JlcHIpCisgICAgICAgICAgICBtZXNzYWdlID0gYmluX3htbF9lc2NhcGUobWVzc2Fn
ZSkKKyAgICAgICAgICAgIGZhaWwgPSBKdW5pdC5mYWlsdXJlKG1lc3NhZ2U9bWVzc2FnZSkKKyAg
ICAgICAgICAgIGZhaWwuYXBwZW5kKGJpbl94bWxfZXNjYXBlKHJlcG9ydC5sb25ncmVwcikpCisg
ICAgICAgICAgICBzZWxmLmFwcGVuZChmYWlsKQorICAgICAgICBzZWxmLl93cml0ZV9jYXB0dXJl
ZF9vdXRwdXQocmVwb3J0KQorCisgICAgZGVmIGFwcGVuZF9jb2xsZWN0X2Vycm9yKHNlbGYsIHJl
cG9ydCk6CisgICAgICAgICMgbXNnID0gc3RyKHJlcG9ydC5sb25ncmVwci5yZXBydHJhY2ViYWNr
LmV4dHJhbGluZSkKKyAgICAgICAgc2VsZi5hcHBlbmQoSnVuaXQuZXJyb3IoYmluX3htbF9lc2Nh
cGUocmVwb3J0LmxvbmdyZXByKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVz
c2FnZT0iY29sbGVjdGlvbiBmYWlsdXJlIikpCisKKyAgICBkZWYgYXBwZW5kX2NvbGxlY3Rfc2tp
cHBlZChzZWxmLCByZXBvcnQpOgorICAgICAgICBzZWxmLl9hZGRfc2ltcGxlKAorICAgICAgICAg
ICAgSnVuaXQuc2tpcHBlZCwgImNvbGxlY3Rpb24gc2tpcHBlZCIsIHJlcG9ydC5sb25ncmVwcikK
KworICAgIGRlZiBhcHBlbmRfZXJyb3Ioc2VsZiwgcmVwb3J0KToKKyAgICAgICAgc2VsZi5fYWRk
X3NpbXBsZSgKKyAgICAgICAgICAgIEp1bml0LmVycm9yLCAidGVzdCBzZXR1cCBmYWlsdXJlIiwg
cmVwb3J0LmxvbmdyZXByKQorICAgICAgICBzZWxmLl93cml0ZV9jYXB0dXJlZF9vdXRwdXQocmVw
b3J0KQorCisgICAgZGVmIGFwcGVuZF9za2lwcGVkKHNlbGYsIHJlcG9ydCk6CisgICAgICAgIGlm
IGhhc2F0dHIocmVwb3J0LCAid2FzeGZhaWwiKToKKyAgICAgICAgICAgIHNlbGYuX2FkZF9zaW1w
bGUoCisgICAgICAgICAgICAgICAgSnVuaXQuc2tpcHBlZCwgImV4cGVjdGVkIHRlc3QgZmFpbHVy
ZSIsIHJlcG9ydC53YXN4ZmFpbAorICAgICAgICAgICAgKQorICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgZmlsZW5hbWUsIGxpbmVubywgc2tpcHJlYXNvbiA9IHJlcG9ydC5sb25ncmVwcgorICAg
ICAgICAgICAgaWYgc2tpcHJlYXNvbi5zdGFydHN3aXRoKCJTa2lwcGVkOiAiKToKKyAgICAgICAg
ICAgICAgICBza2lwcmVhc29uID0gYmluX3htbF9lc2NhcGUoc2tpcHJlYXNvbls5Ol0pCisgICAg
ICAgICAgICBzZWxmLmFwcGVuZCgKKyAgICAgICAgICAgICAgICBKdW5pdC5za2lwcGVkKCIlczol
czogJXMiICUgKGZpbGVuYW1lLCBsaW5lbm8sIHNraXByZWFzb24pLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdHlwZT0icHl0ZXN0LnNraXAiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWVzc2FnZT1za2lwcmVhc29uKSkKKyAgICAgICAgc2VsZi5fd3JpdGVfY2FwdHVy
ZWRfb3V0cHV0KHJlcG9ydCkKKworICAgIGRlZiBmaW5hbGl6ZShzZWxmKToKKyAgICAgICAgZGF0
YSA9IHNlbGYudG9feG1sKCkudW5pY29kZShpbmRlbnQ9MCkKKyAgICAgICAgc2VsZi5fX2RpY3Rf
Xy5jbGVhcigpCisgICAgICAgIHNlbGYudG9feG1sID0gbGFtYmRhOiBweS54bWwucmF3KGRhdGEp
CisKKworQHB5dGVzdC5maXh0dXJlCitkZWYgcmVjb3JkX3htbF9wcm9wZXJ0eShyZXF1ZXN0KToK
KyAgICAiIiJGaXh0dXJlIHRoYXQgYWRkcyBleHRyYSB4bWwgcHJvcGVydGllcyB0byB0aGUgdGFn
IGZvciB0aGUgY2FsbGluZyB0ZXN0LgorICAgIFRoZSBmaXh0dXJlIGlzIGNhbGxhYmxlIHdpdGgg
KG5hbWUsIHZhbHVlKSwgd2l0aCB2YWx1ZSBiZWluZyBhdXRvbWF0aWNhbGx5CisgICAgeG1sLWVu
Y29kZWQuCisgICAgIiIiCisgICAgcmVxdWVzdC5ub2RlLndhcm4oCisgICAgICAgIGNvZGU9J0Mz
JywKKyAgICAgICAgbWVzc2FnZT0ncmVjb3JkX3htbF9wcm9wZXJ0eSBpcyBhbiBleHBlcmltZW50
YWwgZmVhdHVyZScsCisgICAgKQorICAgIHhtbCA9IGdldGF0dHIocmVxdWVzdC5jb25maWcsICJf
eG1sIiwgTm9uZSkKKyAgICBpZiB4bWwgaXMgbm90IE5vbmU6CisgICAgICAgIG5vZGVfcmVwb3J0
ZXIgPSB4bWwubm9kZV9yZXBvcnRlcihyZXF1ZXN0Lm5vZGUubm9kZWlkKQorICAgICAgICByZXR1
cm4gbm9kZV9yZXBvcnRlci5hZGRfcHJvcGVydHkKKyAgICBlbHNlOgorICAgICAgICBkZWYgYWRk
X3Byb3BlcnR5X25vb3AobmFtZSwgdmFsdWUpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAg
IHJldHVybiBhZGRfcHJvcGVydHlfbm9vcAorCisKK2RlZiBweXRlc3RfYWRkb3B0aW9uKHBhcnNl
cik6CisgICAgZ3JvdXAgPSBwYXJzZXIuZ2V0Z3JvdXAoInRlcm1pbmFsIHJlcG9ydGluZyIpCisg
ICAgZ3JvdXAuYWRkb3B0aW9uKAorICAgICAgICAnLS1qdW5pdHhtbCcsICctLWp1bml0LXhtbCcs
CisgICAgICAgIGFjdGlvbj0ic3RvcmUiLAorICAgICAgICBkZXN0PSJ4bWxwYXRoIiwKKyAgICAg
ICAgbWV0YXZhcj0icGF0aCIsCisgICAgICAgIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgaGVscD0i
Y3JlYXRlIGp1bml0LXhtbCBzdHlsZSByZXBvcnQgZmlsZSBhdCBnaXZlbiBwYXRoLiIpCisgICAg
Z3JvdXAuYWRkb3B0aW9uKAorICAgICAgICAnLS1qdW5pdHByZWZpeCcsICctLWp1bml0LXByZWZp
eCcsCisgICAgICAgIGFjdGlvbj0ic3RvcmUiLAorICAgICAgICBtZXRhdmFyPSJzdHIiLAorICAg
ICAgICBkZWZhdWx0PU5vbmUsCisgICAgICAgIGhlbHA9InByZXBlbmQgcHJlZml4IHRvIGNsYXNz
bmFtZXMgaW4ganVuaXQteG1sIG91dHB1dCIpCisKKworZGVmIHB5dGVzdF9jb25maWd1cmUoY29u
ZmlnKToKKyAgICB4bWxwYXRoID0gY29uZmlnLm9wdGlvbi54bWxwYXRoCisgICAgIyBwcmV2ZW50
IG9wZW5pbmcgeG1sbG9nIG9uIHNsYXZlIG5vZGVzICh4ZGlzdCkKKyAgICBpZiB4bWxwYXRoIGFu
ZCBub3QgaGFzYXR0cihjb25maWcsICdzbGF2ZWlucHV0Jyk6CisgICAgICAgIGNvbmZpZy5feG1s
ID0gTG9nWE1MKHhtbHBhdGgsIGNvbmZpZy5vcHRpb24uanVuaXRwcmVmaXgpCisgICAgICAgIGNv
bmZpZy5wbHVnaW5tYW5hZ2VyLnJlZ2lzdGVyKGNvbmZpZy5feG1sKQorCisKK2RlZiBweXRlc3Rf
dW5jb25maWd1cmUoY29uZmlnKToKKyAgICB4bWwgPSBnZXRhdHRyKGNvbmZpZywgJ194bWwnLCBO
b25lKQorICAgIGlmIHhtbDoKKyAgICAgICAgZGVsIGNvbmZpZy5feG1sCisgICAgICAgIGNvbmZp
Zy5wbHVnaW5tYW5hZ2VyLnVucmVnaXN0ZXIoeG1sKQorCisKK2RlZiBtYW5nbGVfdGVzdF9hZGRy
ZXNzKGFkZHJlc3MpOgorICAgIHBhdGgsIHBvc3NpYmxlX29wZW5fYnJhY2tldCwgcGFyYW1zID0g
YWRkcmVzcy5wYXJ0aXRpb24oJ1snKQorICAgIG5hbWVzID0gcGF0aC5zcGxpdCgiOjoiKQorICAg
IHRyeToKKyAgICAgICAgbmFtZXMucmVtb3ZlKCcoKScpCisgICAgZXhjZXB0IFZhbHVlRXJyb3I6
CisgICAgICAgIHBhc3MKKyAgICAjIGNvbnZlcnQgZmlsZSBwYXRoIHRvIGRvdHRlZCBwYXRoCisg
ICAgbmFtZXNbMF0gPSBuYW1lc1swXS5yZXBsYWNlKCIvIiwgJy4nKQorICAgIG5hbWVzWzBdID0g
X3B5X2V4dF9yZS5zdWIoIiIsIG5hbWVzWzBdKQorICAgICMgcHV0IGFueSBwYXJhbXMgYmFjawor
ICAgIG5hbWVzWy0xXSArPSBwb3NzaWJsZV9vcGVuX2JyYWNrZXQgKyBwYXJhbXMKKyAgICByZXR1
cm4gbmFtZXMKKworCitjbGFzcyBMb2dYTUwob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgbG9nZmlsZSwgcHJlZml4KToKKyAgICAgICAgbG9nZmlsZSA9IG9zLnBhdGguZXhwYW5kdXNl
cihvcy5wYXRoLmV4cGFuZHZhcnMobG9nZmlsZSkpCisgICAgICAgIHNlbGYubG9nZmlsZSA9IG9z
LnBhdGgubm9ybXBhdGgob3MucGF0aC5hYnNwYXRoKGxvZ2ZpbGUpKQorICAgICAgICBzZWxmLnBy
ZWZpeCA9IHByZWZpeAorICAgICAgICBzZWxmLnN0YXRzID0gZGljdC5mcm9ta2V5cyhbCisgICAg
ICAgICAgICAnZXJyb3InLAorICAgICAgICAgICAgJ3Bhc3NlZCcsCisgICAgICAgICAgICAnZmFp
bHVyZScsCisgICAgICAgICAgICAnc2tpcHBlZCcsCisgICAgICAgIF0sIDApCisgICAgICAgIHNl
bGYubm9kZV9yZXBvcnRlcnMgPSB7fSAgIyBub2RlaWQgLT4gX05vZGVSZXBvcnRlcgorICAgICAg
ICBzZWxmLm5vZGVfcmVwb3J0ZXJzX29yZGVyZWQgPSBbXQorCisgICAgZGVmIGZpbmFsaXplKHNl
bGYsIHJlcG9ydCk6CisgICAgICAgIG5vZGVpZCA9IGdldGF0dHIocmVwb3J0LCAnbm9kZWlkJywg
cmVwb3J0KQorICAgICAgICAjIGxvY2FsIGhhY2sgdG8gaGFuZGxlIHhkaXN0IHJlcG9ydCBvcmRl
cgorICAgICAgICBzbGF2ZW5vZGUgPSBnZXRhdHRyKHJlcG9ydCwgJ25vZGUnLCBOb25lKQorICAg
ICAgICByZXBvcnRlciA9IHNlbGYubm9kZV9yZXBvcnRlcnMucG9wKChub2RlaWQsIHNsYXZlbm9k
ZSkpCisgICAgICAgIGlmIHJlcG9ydGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmVwb3J0
ZXIuZmluYWxpemUoKQorCisgICAgZGVmIG5vZGVfcmVwb3J0ZXIoc2VsZiwgcmVwb3J0KToKKyAg
ICAgICAgbm9kZWlkID0gZ2V0YXR0cihyZXBvcnQsICdub2RlaWQnLCByZXBvcnQpCisgICAgICAg
ICMgbG9jYWwgaGFjayB0byBoYW5kbGUgeGRpc3QgcmVwb3J0IG9yZGVyCisgICAgICAgIHNsYXZl
bm9kZSA9IGdldGF0dHIocmVwb3J0LCAnbm9kZScsIE5vbmUpCisKKyAgICAgICAga2V5ID0gbm9k
ZWlkLCBzbGF2ZW5vZGUKKworICAgICAgICBpZiBrZXkgaW4gc2VsZi5ub2RlX3JlcG9ydGVyczoK
KyAgICAgICAgICAgICMgVE9ETzogYnJlYXNrcyBmb3IgLS1kaXN0PWVhY2gKKyAgICAgICAgICAg
IHJldHVybiBzZWxmLm5vZGVfcmVwb3J0ZXJzW2tleV0KKyAgICAgICAgcmVwb3J0ZXIgPSBfTm9k
ZVJlcG9ydGVyKG5vZGVpZCwgc2VsZikKKyAgICAgICAgc2VsZi5ub2RlX3JlcG9ydGVyc1trZXld
ID0gcmVwb3J0ZXIKKyAgICAgICAgc2VsZi5ub2RlX3JlcG9ydGVyc19vcmRlcmVkLmFwcGVuZChy
ZXBvcnRlcikKKyAgICAgICAgcmV0dXJuIHJlcG9ydGVyCisKKyAgICBkZWYgYWRkX3N0YXRzKHNl
bGYsIGtleSk6CisgICAgICAgIGlmIGtleSBpbiBzZWxmLnN0YXRzOgorICAgICAgICAgICAgc2Vs
Zi5zdGF0c1trZXldICs9IDEKKworICAgIGRlZiBfb3BlbnRlc3RjYXNlKHNlbGYsIHJlcG9ydCk6
CisgICAgICAgIHJlcG9ydGVyID0gc2VsZi5ub2RlX3JlcG9ydGVyKHJlcG9ydCkKKyAgICAgICAg
cmVwb3J0ZXIucmVjb3JkX3Rlc3RyZXBvcnQocmVwb3J0KQorICAgICAgICByZXR1cm4gcmVwb3J0
ZXIKKworICAgIGRlZiBweXRlc3RfcnVudGVzdF9sb2dyZXBvcnQoc2VsZiwgcmVwb3J0KToKKyAg
ICAgICAgIiIiaGFuZGxlIGEgc2V0dXAvY2FsbC90ZWFyZG93biByZXBvcnQsIGdlbmVyYXRpbmcg
dGhlIGFwcHJvcHJpYXRlCisgICAgICAgIHhtbCB0YWdzIGFzIG5lY2Vzc2FyeS4KKworICAgICAg
ICBub3RlOiBkdWUgdG8gcGx1Z2lucyBsaWtlIHhkaXN0LCB0aGlzIGhvb2sgbWF5IGJlIGNhbGxl
ZCBpbiBpbnRlcmxhY2VkCisgICAgICAgIG9yZGVyIHdpdGggcmVwb3J0cyBmcm9tIG90aGVyIG5v
ZGVzLiBmb3IgZXhhbXBsZToKKworICAgICAgICB1c3VhbCBjYWxsIG9yZGVyOgorICAgICAgICAg
ICAgLT4gc2V0dXAgbm9kZTEKKyAgICAgICAgICAgIC0+IGNhbGwgbm9kZTEKKyAgICAgICAgICAg
IC0+IHRlYXJkb3duIG5vZGUxCisgICAgICAgICAgICAtPiBzZXR1cCBub2RlMgorICAgICAgICAg
ICAgLT4gY2FsbCBub2RlMgorICAgICAgICAgICAgLT4gdGVhcmRvd24gbm9kZTIKKworICAgICAg
ICBwb3NzaWJsZSBjYWxsIG9yZGVyIGluIHhkaXN0OgorICAgICAgICAgICAgLT4gc2V0dXAgbm9k
ZTEKKyAgICAgICAgICAgIC0+IGNhbGwgbm9kZTEKKyAgICAgICAgICAgIC0+IHNldHVwIG5vZGUy
CisgICAgICAgICAgICAtPiBjYWxsIG5vZGUyCisgICAgICAgICAgICAtPiB0ZWFyZG93biBub2Rl
MgorICAgICAgICAgICAgLT4gdGVhcmRvd24gbm9kZTEKKyAgICAgICAgIiIiCisgICAgICAgIGlm
IHJlcG9ydC5wYXNzZWQ6CisgICAgICAgICAgICBpZiByZXBvcnQud2hlbiA9PSAiY2FsbCI6ICAj
IGlnbm9yZSBzZXR1cC90ZWFyZG93bgorICAgICAgICAgICAgICAgIHJlcG9ydGVyID0gc2VsZi5f
b3BlbnRlc3RjYXNlKHJlcG9ydCkKKyAgICAgICAgICAgICAgICByZXBvcnRlci5hcHBlbmRfcGFz
cyhyZXBvcnQpCisgICAgICAgIGVsaWYgcmVwb3J0LmZhaWxlZDoKKyAgICAgICAgICAgIHJlcG9y
dGVyID0gc2VsZi5fb3BlbnRlc3RjYXNlKHJlcG9ydCkKKyAgICAgICAgICAgIGlmIHJlcG9ydC53
aGVuID09ICJjYWxsIjoKKyAgICAgICAgICAgICAgICByZXBvcnRlci5hcHBlbmRfZmFpbHVyZShy
ZXBvcnQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJlcG9ydGVyLmFwcGVu
ZF9lcnJvcihyZXBvcnQpCisgICAgICAgIGVsaWYgcmVwb3J0LnNraXBwZWQ6CisgICAgICAgICAg
ICByZXBvcnRlciA9IHNlbGYuX29wZW50ZXN0Y2FzZShyZXBvcnQpCisgICAgICAgICAgICByZXBv
cnRlci5hcHBlbmRfc2tpcHBlZChyZXBvcnQpCisgICAgICAgIHNlbGYudXBkYXRlX3Rlc3RjYXNl
X2R1cmF0aW9uKHJlcG9ydCkKKyAgICAgICAgaWYgcmVwb3J0LndoZW4gPT0gInRlYXJkb3duIjoK
KyAgICAgICAgICAgIHNlbGYuZmluYWxpemUocmVwb3J0KQorCisgICAgZGVmIHVwZGF0ZV90ZXN0
Y2FzZV9kdXJhdGlvbihzZWxmLCByZXBvcnQpOgorICAgICAgICAiIiJhY2N1bXVsYXRlcyB0b3Rh
bCBkdXJhdGlvbiBmb3Igbm9kZWlkIGZyb20gZ2l2ZW4gcmVwb3J0IGFuZCB1cGRhdGVzCisgICAg
ICAgIHRoZSBKdW5pdC50ZXN0Y2FzZSB3aXRoIHRoZSBuZXcgdG90YWwgaWYgYWxyZWFkeSBjcmVh
dGVkLgorICAgICAgICAiIiIKKyAgICAgICAgcmVwb3J0ZXIgPSBzZWxmLm5vZGVfcmVwb3J0ZXIo
cmVwb3J0KQorICAgICAgICByZXBvcnRlci5kdXJhdGlvbiArPSBnZXRhdHRyKHJlcG9ydCwgJ2R1
cmF0aW9uJywgMC4wKQorCisgICAgZGVmIHB5dGVzdF9jb2xsZWN0cmVwb3J0KHNlbGYsIHJlcG9y
dCk6CisgICAgICAgIGlmIG5vdCByZXBvcnQucGFzc2VkOgorICAgICAgICAgICAgcmVwb3J0ZXIg
PSBzZWxmLl9vcGVudGVzdGNhc2UocmVwb3J0KQorICAgICAgICAgICAgaWYgcmVwb3J0LmZhaWxl
ZDoKKyAgICAgICAgICAgICAgICByZXBvcnRlci5hcHBlbmRfY29sbGVjdF9lcnJvcihyZXBvcnQp
CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJlcG9ydGVyLmFwcGVuZF9jb2xs
ZWN0X3NraXBwZWQocmVwb3J0KQorCisgICAgZGVmIHB5dGVzdF9pbnRlcm5hbGVycm9yKHNlbGYs
IGV4Y3JlcHIpOgorICAgICAgICByZXBvcnRlciA9IHNlbGYubm9kZV9yZXBvcnRlcignaW50ZXJu
YWwnKQorICAgICAgICByZXBvcnRlci5hdHRycy51cGRhdGUoY2xhc3NuYW1lPSJweXRlc3QiLCBu
YW1lPSdpbnRlcm5hbCcpCisgICAgICAgIHJlcG9ydGVyLl9hZGRfc2ltcGxlKEp1bml0LmVycm9y
LCAnaW50ZXJuYWwgZXJyb3InLCBleGNyZXByKQorCisgICAgZGVmIHB5dGVzdF9zZXNzaW9uc3Rh
cnQoc2VsZik6CisgICAgICAgIHNlbGYuc3VpdGVfc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCisK
KyAgICBkZWYgcHl0ZXN0X3Nlc3Npb25maW5pc2goc2VsZik6CisgICAgICAgIGRpcm5hbWUgPSBv
cy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKHNlbGYubG9nZmlsZSkpCisgICAgICAgIGlm
IG5vdCBvcy5wYXRoLmlzZGlyKGRpcm5hbWUpOgorICAgICAgICAgICAgb3MubWFrZWRpcnMoZGly
bmFtZSkKKyAgICAgICAgbG9nZmlsZSA9IG9wZW4oc2VsZi5sb2dmaWxlLCAndycsIGVuY29kaW5n
PSd1dGYtOCcpCisgICAgICAgIHN1aXRlX3N0b3BfdGltZSA9IHRpbWUudGltZSgpCisgICAgICAg
IHN1aXRlX3RpbWVfZGVsdGEgPSBzdWl0ZV9zdG9wX3RpbWUgLSBzZWxmLnN1aXRlX3N0YXJ0X3Rp
bWUKKworICAgICAgICBudW10ZXN0cyA9IHNlbGYuc3RhdHNbJ3Bhc3NlZCddICsgc2VsZi5zdGF0
c1snZmFpbHVyZSddCisKKyAgICAgICAgbG9nZmlsZS53cml0ZSgnPD94bWwgdmVyc2lvbj0iMS4w
IiBlbmNvZGluZz0idXRmLTgiPz4nKQorICAgICAgICBsb2dmaWxlLndyaXRlKEp1bml0LnRlc3Rz
dWl0ZSgKKyAgICAgICAgICAgIFt4LnRvX3htbCgpIGZvciB4IGluIHNlbGYubm9kZV9yZXBvcnRl
cnNfb3JkZXJlZF0sCisgICAgICAgICAgICBuYW1lPSJweXRlc3QiLAorICAgICAgICAgICAgZXJy
b3JzPXNlbGYuc3RhdHNbJ2Vycm9yJ10sCisgICAgICAgICAgICBmYWlsdXJlcz1zZWxmLnN0YXRz
WydmYWlsdXJlJ10sCisgICAgICAgICAgICBza2lwcz1zZWxmLnN0YXRzWydza2lwcGVkJ10sCisg
ICAgICAgICAgICB0ZXN0cz1udW10ZXN0cywKKyAgICAgICAgICAgIHRpbWU9IiUuM2YiICUgc3Vp
dGVfdGltZV9kZWx0YSwgKS51bmljb2RlKGluZGVudD0wKSkKKyAgICAgICAgbG9nZmlsZS5jbG9z
ZSgpCisKKyAgICBkZWYgcHl0ZXN0X3Rlcm1pbmFsX3N1bW1hcnkoc2VsZiwgdGVybWluYWxyZXBv
cnRlcik6CisgICAgICAgIHRlcm1pbmFscmVwb3J0ZXIud3JpdGVfc2VwKCItIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZCB4bWwgZmlsZTogJXMiICUgKHNl
bGYubG9nZmlsZSkpCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9v
bHMvcHl0ZXN0L19weXRlc3QvbWFpbi5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90
b29scy9weXRlc3QvX3B5dGVzdC9tYWluLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi44NjU0ZDdhZjYyNwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3Rz
L2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9tYWluLnB5CkBAIC0wLDAgKzEsNzQ0
IEBACisiIiIgY29yZSBpbXBsZW1lbnRhdGlvbiBvZiB0ZXN0aW5nIHByb2Nlc3M6IGluaXQsIHNl
c3Npb24sIHJ1bnRlc3QgbG9vcC4gIiIiCitpbXBvcnQgaW1wCitpbXBvcnQgb3MKK2ltcG9ydCBy
ZQoraW1wb3J0IHN5cworCitpbXBvcnQgX3B5dGVzdAoraW1wb3J0IF9weXRlc3QuX2NvZGUKK2lt
cG9ydCBweQoraW1wb3J0IHB5dGVzdAordHJ5OgorICAgIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0
IE11dGFibGVNYXBwaW5nIGFzIE1hcHBpbmdNaXhpbgorZXhjZXB0IEltcG9ydEVycm9yOgorICAg
IGZyb20gVXNlckRpY3QgaW1wb3J0IERpY3RNaXhpbiBhcyBNYXBwaW5nTWl4aW4KKworZnJvbSBf
cHl0ZXN0LnJ1bm5lciBpbXBvcnQgY29sbGVjdF9vbmVfbm9kZQorCit0cmFjZWJhY2tjdXRkaXIg
PSBweS5wYXRoLmxvY2FsKF9weXRlc3QuX19maWxlX18pLmRpcnBhdGgoKQorCisjIGV4aXRjb2Rl
cyBmb3IgdGhlIGNvbW1hbmQgbGluZQorRVhJVF9PSyA9IDAKK0VYSVRfVEVTVFNGQUlMRUQgPSAx
CitFWElUX0lOVEVSUlVQVEVEID0gMgorRVhJVF9JTlRFUk5BTEVSUk9SID0gMworRVhJVF9VU0FH
RUVSUk9SID0gNAorRVhJVF9OT1RFU1RTQ09MTEVDVEVEID0gNQorCituYW1lX3JlID0gcmUuY29t
cGlsZSgiXlthLXpBLVpfXVx3KiQiKQorCitkZWYgcHl0ZXN0X2FkZG9wdGlvbihwYXJzZXIpOgor
ICAgIHBhcnNlci5hZGRpbmkoIm5vcmVjdXJzZWRpcnMiLCAiZGlyZWN0b3J5IHBhdHRlcm5zIHRv
IGF2b2lkIGZvciByZWN1cnNpb24iLAorICAgICAgICB0eXBlPSJhcmdzIiwgZGVmYXVsdD1bJy4q
JywgJ0NWUycsICdfZGFyY3MnLCAne2FyY2h9JywgJyouZWdnJ10pCisgICAgcGFyc2VyLmFkZGlu
aSgidGVzdHBhdGhzIiwgImRpcmVjdG9yaWVzIHRvIHNlYXJjaCBmb3IgdGVzdHMgd2hlbiBubyBm
aWxlcyBvciBkaXJlY3RvcmllcyBhcmUgZ2l2ZW4gaW4gdGhlIGNvbW1hbmQgbGluZS4iLAorICAg
ICAgICB0eXBlPSJhcmdzIiwgZGVmYXVsdD1bXSkKKyAgICAjcGFyc2VyLmFkZGluaSgiZGlycGF0
dGVybnMiLAorICAgICMgICAgInBhdHRlcm5zIHNwZWNpZnlpbmcgcG9zc2libGUgbG9jYXRpb25z
IG9mIHRlc3QgZmlsZXMiLAorICAgICMgICAgdHlwZT0ibGluZWxpc3QiLCBkZWZhdWx0PVsiKiov
dGVzdF8qLnR4dCIsCisgICAgIyAgICAgICAgICAgICIqKi90ZXN0XyoucHkiLCAiKiovKl90ZXN0
LnB5Il0KKyAgICAjKQorICAgIGdyb3VwID0gcGFyc2VyLmdldGdyb3VwKCJnZW5lcmFsIiwgInJ1
bm5pbmcgYW5kIHNlbGVjdGlvbiBvcHRpb25zIikKKyAgICBncm91cC5fYWRkb3B0aW9uKCcteCcs
ICctLWV4aXRmaXJzdCcsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlZmF1bHQ9RmFsc2UsCisgICAg
ICAgICAgICAgICBkZXN0PSJleGl0Zmlyc3QiLAorICAgICAgICAgICAgICAgaGVscD0iZXhpdCBp
bnN0YW50bHkgb24gZmlyc3QgZXJyb3Igb3IgZmFpbGVkIHRlc3QuIiksCisgICAgZ3JvdXAuX2Fk
ZG9wdGlvbignLS1tYXhmYWlsJywgbWV0YXZhcj0ibnVtIiwKKyAgICAgICAgICAgICAgIGFjdGlv
bj0ic3RvcmUiLCB0eXBlPWludCwgZGVzdD0ibWF4ZmFpbCIsIGRlZmF1bHQ9MCwKKyAgICAgICAg
ICAgICAgIGhlbHA9ImV4aXQgYWZ0ZXIgZmlyc3QgbnVtIGZhaWx1cmVzIG9yIGVycm9ycy4iKQor
ICAgIGdyb3VwLl9hZGRvcHRpb24oJy0tc3RyaWN0JywgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAg
ICAgICAgICAgICAgIGhlbHA9InJ1biBweXRlc3QgaW4gc3RyaWN0IG1vZGUsIHdhcm5pbmdzIGJl
Y29tZSBlcnJvcnMuIikKKyAgICBncm91cC5fYWRkb3B0aW9uKCItYyIsIG1ldGF2YXI9ImZpbGUi
LCB0eXBlPXN0ciwgZGVzdD0iaW5pZmlsZW5hbWUiLAorICAgICAgICAgICAgICAgaGVscD0ibG9h
ZCBjb25maWd1cmF0aW9uIGZyb20gYGZpbGVgIGluc3RlYWQgb2YgdHJ5aW5nIHRvIGxvY2F0ZSBv
bmUgb2YgdGhlIGltcGxpY2l0IGNvbmZpZ3VyYXRpb24gZmlsZXMuIikKKworICAgIGdyb3VwID0g
cGFyc2VyLmdldGdyb3VwKCJjb2xsZWN0IiwgImNvbGxlY3Rpb24iKQorICAgIGdyb3VwLmFkZG9w
dGlvbignLS1jb2xsZWN0b25seScsICctLWNvbGxlY3Qtb25seScsIGFjdGlvbj0ic3RvcmVfdHJ1
ZSIsCisgICAgICAgIGhlbHA9Im9ubHkgY29sbGVjdCB0ZXN0cywgZG9uJ3QgZXhlY3V0ZSB0aGVt
LiIpLAorICAgIGdyb3VwLmFkZG9wdGlvbignLS1weWFyZ3MnLCBhY3Rpb249InN0b3JlX3RydWUi
LAorICAgICAgICBoZWxwPSJ0cnkgdG8gaW50ZXJwcmV0IGFsbCBhcmd1bWVudHMgYXMgcHl0aG9u
IHBhY2thZ2VzLiIpCisgICAgZ3JvdXAuYWRkb3B0aW9uKCItLWlnbm9yZSIsIGFjdGlvbj0iYXBw
ZW5kIiwgbWV0YXZhcj0icGF0aCIsCisgICAgICAgIGhlbHA9Imlnbm9yZSBwYXRoIGR1cmluZyBj
b2xsZWN0aW9uIChtdWx0aS1hbGxvd2VkKS4iKQorICAgICMgd2hlbiBjaGFuZ2luZyB0aGlzIHRv
IC0tY29uZi1jdXQtZGlyLCBjb25maWcucHkgQ29uZnRlc3Quc2V0aW5pdGlhbAorICAgICMgbmVl
ZHMgdXBncmFkaW5nIGFzIHdlbGwKKyAgICBncm91cC5hZGRvcHRpb24oJy0tY29uZmN1dGRpcics
IGRlc3Q9ImNvbmZjdXRkaXIiLCBkZWZhdWx0PU5vbmUsCisgICAgICAgIG1ldGF2YXI9ImRpciIs
CisgICAgICAgIGhlbHA9Im9ubHkgbG9hZCBjb25mdGVzdC5weSdzIHJlbGF0aXZlIHRvIHNwZWNp
ZmllZCBkaXIuIikKKyAgICBncm91cC5hZGRvcHRpb24oJy0tbm9jb25mdGVzdCcsIGFjdGlvbj0i
c3RvcmVfdHJ1ZSIsCisgICAgICAgIGRlc3Q9Im5vY29uZnRlc3QiLCBkZWZhdWx0PUZhbHNlLAor
ICAgICAgICBoZWxwPSJEb24ndCBsb2FkIGFueSBjb25mdGVzdC5weSBmaWxlcy4iKQorCisgICAg
Z3JvdXAgPSBwYXJzZXIuZ2V0Z3JvdXAoImRlYnVnY29uZmlnIiwKKyAgICAgICAgInRlc3Qgc2Vz
c2lvbiBkZWJ1Z2dpbmcgYW5kIGNvbmZpZ3VyYXRpb24iKQorICAgIGdyb3VwLmFkZG9wdGlvbign
LS1iYXNldGVtcCcsIGRlc3Q9ImJhc2V0ZW1wIiwgZGVmYXVsdD1Ob25lLCBtZXRhdmFyPSJkaXIi
LAorICAgICAgICAgICAgICAgaGVscD0iYmFzZSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGZvciB0aGlz
IHRlc3QgcnVuLiIpCisKKworZGVmIHB5dGVzdF9uYW1lc3BhY2UoKToKKyAgICBjb2xsZWN0ID0g
ZGljdChJdGVtPUl0ZW0sIENvbGxlY3Rvcj1Db2xsZWN0b3IsIEZpbGU9RmlsZSwgU2Vzc2lvbj1T
ZXNzaW9uKQorICAgIHJldHVybiBkaWN0KGNvbGxlY3Q9Y29sbGVjdCkKKworZGVmIHB5dGVzdF9j
b25maWd1cmUoY29uZmlnKToKKyAgICBweXRlc3QuY29uZmlnID0gY29uZmlnICMgY29tcGF0aWJp
bHRpeQorICAgIGlmIGNvbmZpZy5vcHRpb24uZXhpdGZpcnN0OgorICAgICAgICBjb25maWcub3B0
aW9uLm1heGZhaWwgPSAxCisKK2RlZiB3cmFwX3Nlc3Npb24oY29uZmlnLCBkb2l0KToKKyAgICAi
IiJTa2VsZXRvbiBjb21tYW5kIGxpbmUgcHJvZ3JhbSIiIgorICAgIHNlc3Npb24gPSBTZXNzaW9u
KGNvbmZpZykKKyAgICBzZXNzaW9uLmV4aXRzdGF0dXMgPSBFWElUX09LCisgICAgaW5pdHN0YXRl
ID0gMAorICAgIHRyeToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29uZmlnLl9kb19jb25m
aWd1cmUoKQorICAgICAgICAgICAgaW5pdHN0YXRlID0gMQorICAgICAgICAgICAgY29uZmlnLmhv
b2sucHl0ZXN0X3Nlc3Npb25zdGFydChzZXNzaW9uPXNlc3Npb24pCisgICAgICAgICAgICBpbml0
c3RhdGUgPSAyCisgICAgICAgICAgICBzZXNzaW9uLmV4aXRzdGF0dXMgPSBkb2l0KGNvbmZpZywg
c2Vzc2lvbikgb3IgMAorICAgICAgICBleGNlcHQgcHl0ZXN0LlVzYWdlRXJyb3I6CisgICAgICAg
ICAgICByYWlzZQorICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAg
ICBleGNpbmZvID0gX3B5dGVzdC5fY29kZS5FeGNlcHRpb25JbmZvKCkKKyAgICAgICAgICAgIGNv
bmZpZy5ob29rLnB5dGVzdF9rZXlib2FyZF9pbnRlcnJ1cHQoZXhjaW5mbz1leGNpbmZvKQorICAg
ICAgICAgICAgc2Vzc2lvbi5leGl0c3RhdHVzID0gRVhJVF9JTlRFUlJVUFRFRAorICAgICAgICBl
eGNlcHQ6CisgICAgICAgICAgICBleGNpbmZvID0gX3B5dGVzdC5fY29kZS5FeGNlcHRpb25JbmZv
KCkKKyAgICAgICAgICAgIGNvbmZpZy5ub3RpZnlfZXhjZXB0aW9uKGV4Y2luZm8sIGNvbmZpZy5v
cHRpb24pCisgICAgICAgICAgICBzZXNzaW9uLmV4aXRzdGF0dXMgPSBFWElUX0lOVEVSTkFMRVJS
T1IKKyAgICAgICAgICAgIGlmIGV4Y2luZm8uZXJyaXNpbnN0YW5jZShTeXN0ZW1FeGl0KToKKyAg
ICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJtYWlubG9vcDogY2F1Z2h0IFNwdXJpb3Vz
IFN5c3RlbUV4aXQhXG4iKQorCisgICAgZmluYWxseToKKyAgICAgICAgZXhjaW5mbyA9IE5vbmUg
ICMgRXhwbGljaXRseSBicmVhayByZWZlcmVuY2UgY3ljbGUuCisgICAgICAgIHNlc3Npb24uc3Rh
cnRkaXIuY2hkaXIoKQorICAgICAgICBpZiBpbml0c3RhdGUgPj0gMjoKKyAgICAgICAgICAgIGNv
bmZpZy5ob29rLnB5dGVzdF9zZXNzaW9uZmluaXNoKAorICAgICAgICAgICAgICAgIHNlc3Npb249
c2Vzc2lvbiwKKyAgICAgICAgICAgICAgICBleGl0c3RhdHVzPXNlc3Npb24uZXhpdHN0YXR1cykK
KyAgICAgICAgY29uZmlnLl9lbnN1cmVfdW5jb25maWd1cmUoKQorICAgIHJldHVybiBzZXNzaW9u
LmV4aXRzdGF0dXMKKworZGVmIHB5dGVzdF9jbWRsaW5lX21haW4oY29uZmlnKToKKyAgICByZXR1
cm4gd3JhcF9zZXNzaW9uKGNvbmZpZywgX21haW4pCisKK2RlZiBfbWFpbihjb25maWcsIHNlc3Np
b24pOgorICAgICIiIiBkZWZhdWx0IGNvbW1hbmQgbGluZSBwcm90b2NvbCBmb3IgaW5pdGlhbGl6
YXRpb24sIHNlc3Npb24sCisgICAgcnVubmluZyB0ZXN0cyBhbmQgcmVwb3J0aW5nLiAiIiIKKyAg
ICBjb25maWcuaG9vay5weXRlc3RfY29sbGVjdGlvbihzZXNzaW9uPXNlc3Npb24pCisgICAgY29u
ZmlnLmhvb2sucHl0ZXN0X3J1bnRlc3Rsb29wKHNlc3Npb249c2Vzc2lvbikKKworICAgIGlmIHNl
c3Npb24udGVzdHNmYWlsZWQ6CisgICAgICAgIHJldHVybiBFWElUX1RFU1RTRkFJTEVECisgICAg
ZWxpZiBzZXNzaW9uLnRlc3RzY29sbGVjdGVkID09IDA6CisgICAgICAgIHJldHVybiBFWElUX05P
VEVTVFNDT0xMRUNURUQKKworZGVmIHB5dGVzdF9jb2xsZWN0aW9uKHNlc3Npb24pOgorICAgIHJl
dHVybiBzZXNzaW9uLnBlcmZvcm1fY29sbGVjdCgpCisKK2RlZiBweXRlc3RfcnVudGVzdGxvb3Ao
c2Vzc2lvbik6CisgICAgaWYgc2Vzc2lvbi5jb25maWcub3B0aW9uLmNvbGxlY3Rvbmx5OgorICAg
ICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIGdldG5leHRpdGVtKGkpOgorICAgICAgICAjIHRo
aXMgaXMgYSBmdW5jdGlvbiB0byBhdm9pZCBweXRob24yCisgICAgICAgICMga2VlcGluZyBzeXMu
ZXhjX2luZm8gc2V0IHdoZW4gY2FsbGluZyBpbnRvIGEgdGVzdAorICAgICAgICAjIHB5dGhvbjIg
a2VlcHMgc3lzLmV4Y19pbmZvIHRpbGwgdGhlIGZyYW1lIGlzIGxlZnQKKyAgICAgICAgdHJ5Ogor
ICAgICAgICAgICAgcmV0dXJuIHNlc3Npb24uaXRlbXNbaSsxXQorICAgICAgICBleGNlcHQgSW5k
ZXhFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICBmb3IgaSwgaXRlbSBpbiBl
bnVtZXJhdGUoc2Vzc2lvbi5pdGVtcyk6CisgICAgICAgIG5leHRpdGVtID0gZ2V0bmV4dGl0ZW0o
aSkKKyAgICAgICAgaXRlbS5jb25maWcuaG9vay5weXRlc3RfcnVudGVzdF9wcm90b2NvbChpdGVt
PWl0ZW0sIG5leHRpdGVtPW5leHRpdGVtKQorICAgICAgICBpZiBzZXNzaW9uLnNob3VsZHN0b3A6
CisgICAgICAgICAgICByYWlzZSBzZXNzaW9uLkludGVycnVwdGVkKHNlc3Npb24uc2hvdWxkc3Rv
cCkKKyAgICByZXR1cm4gVHJ1ZQorCitkZWYgcHl0ZXN0X2lnbm9yZV9jb2xsZWN0KHBhdGgsIGNv
bmZpZyk6CisgICAgcCA9IHBhdGguZGlycGF0aCgpCisgICAgaWdub3JlX3BhdGhzID0gY29uZmln
Ll9nZXRjb25mdGVzdF9wYXRobGlzdCgiY29sbGVjdF9pZ25vcmUiLCBwYXRoPXApCisgICAgaWdu
b3JlX3BhdGhzID0gaWdub3JlX3BhdGhzIG9yIFtdCisgICAgZXhjbHVkZW9wdCA9IGNvbmZpZy5n
ZXRvcHRpb24oImlnbm9yZSIpCisgICAgaWYgZXhjbHVkZW9wdDoKKyAgICAgICAgaWdub3JlX3Bh
dGhzLmV4dGVuZChbcHkucGF0aC5sb2NhbCh4KSBmb3IgeCBpbiBleGNsdWRlb3B0XSkKKyAgICBy
ZXR1cm4gcGF0aCBpbiBpZ25vcmVfcGF0aHMKKworY2xhc3MgRlNIb29rUHJveHk6CisgICAgZGVm
IF9faW5pdF9fKHNlbGYsIGZzcGF0aCwgcG0sIHJlbW92ZV9tb2RzKToKKyAgICAgICAgc2VsZi5m
c3BhdGggPSBmc3BhdGgKKyAgICAgICAgc2VsZi5wbSA9IHBtCisgICAgICAgIHNlbGYucmVtb3Zl
X21vZHMgPSByZW1vdmVfbW9kcworCisgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgor
ICAgICAgICB4ID0gc2VsZi5wbS5zdWJzZXRfaG9va19jYWxsZXIobmFtZSwgcmVtb3ZlX3BsdWdp
bnM9c2VsZi5yZW1vdmVfbW9kcykKKyAgICAgICAgc2VsZi5fX2RpY3RfX1tuYW1lXSA9IHgKKyAg
ICAgICAgcmV0dXJuIHgKKworZGVmIGNvbXBhdHByb3BlcnR5KG5hbWUpOgorICAgIGRlZiBmZ2V0
KHNlbGYpOgorICAgICAgICAjIGRlcHJlY2F0ZWQgLSB1c2UgcHl0ZXN0Lm5hbWUKKyAgICAgICAg
cmV0dXJuIGdldGF0dHIocHl0ZXN0LCBuYW1lKQorCisgICAgcmV0dXJuIHByb3BlcnR5KGZnZXQp
CisKK2NsYXNzIE5vZGVLZXl3b3JkcyhNYXBwaW5nTWl4aW4pOgorICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi5ub2RlID0gbm9kZQorICAgICAgICBzZWxmLnBhcmVu
dCA9IG5vZGUucGFyZW50CisgICAgICAgIHNlbGYuX21hcmtlcnMgPSB7bm9kZS5uYW1lOiBUcnVl
fQorCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgIHRyeToKKyAgICAg
ICAgICAgIHJldHVybiBzZWxmLl9tYXJrZXJzW2tleV0KKyAgICAgICAgZXhjZXB0IEtleUVycm9y
OgorICAgICAgICAgICAgaWYgc2VsZi5wYXJlbnQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBy
YWlzZQorICAgICAgICAgICAgcmV0dXJuIHNlbGYucGFyZW50LmtleXdvcmRzW2tleV0KKworICAg
IGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKToKKyAgICAgICAgc2VsZi5fbWFya2Vy
c1trZXldID0gdmFsdWUKKworICAgIGRlZiBfX2RlbGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAg
ICByYWlzZSBWYWx1ZUVycm9yKCJjYW5ub3QgZGVsZXRlIGtleSBpbiBrZXl3b3JkcyBkaWN0IikK
KworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgc2VlbiA9IHNldChzZWxmLl9tYXJr
ZXJzKQorICAgICAgICBpZiBzZWxmLnBhcmVudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNl
ZW4udXBkYXRlKHNlbGYucGFyZW50LmtleXdvcmRzKQorICAgICAgICByZXR1cm4gaXRlcihzZWVu
KQorCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJldHVybiBsZW4oc2VsZi5fX2l0
ZXJfXygpKQorCisgICAgZGVmIGtleXMoc2VsZik6CisgICAgICAgIHJldHVybiBsaXN0KHNlbGYp
CisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiPE5vZGVLZXl3b3Jk
cyBmb3Igbm9kZSAlcz4iICUgKHNlbGYubm9kZSwgKQorCisKK2NsYXNzIE5vZGUob2JqZWN0KToK
KyAgICAiIiIgYmFzZSBjbGFzcyBmb3IgQ29sbGVjdG9yIGFuZCBJdGVtIHRoZSB0ZXN0IGNvbGxl
Y3Rpb24gdHJlZS4KKyAgICBDb2xsZWN0b3Igc3ViY2xhc3NlcyBoYXZlIGNoaWxkcmVuLCBJdGVt
cyBhcmUgdGVybWluYWwgbm9kZXMuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwg
cGFyZW50PU5vbmUsIGNvbmZpZz1Ob25lLCBzZXNzaW9uPU5vbmUpOgorICAgICAgICAjOiBhIHVu
aXF1ZSBuYW1lIHdpdGhpbiB0aGUgc2NvcGUgb2YgdGhlIHBhcmVudCBub2RlCisgICAgICAgIHNl
bGYubmFtZSA9IG5hbWUKKworICAgICAgICAjOiB0aGUgcGFyZW50IGNvbGxlY3RvciBub2RlLgor
ICAgICAgICBzZWxmLnBhcmVudCA9IHBhcmVudAorCisgICAgICAgICM6IHRoZSBweXRlc3QgY29u
ZmlnIG9iamVjdAorICAgICAgICBzZWxmLmNvbmZpZyA9IGNvbmZpZyBvciBwYXJlbnQuY29uZmln
CisKKyAgICAgICAgIzogdGhlIHNlc3Npb24gdGhpcyBub2RlIGlzIHBhcnQgb2YKKyAgICAgICAg
c2VsZi5zZXNzaW9uID0gc2Vzc2lvbiBvciBwYXJlbnQuc2Vzc2lvbgorCisgICAgICAgICM6IGZp
bGVzeXN0ZW0gcGF0aCB3aGVyZSB0aGlzIG5vZGUgd2FzIGNvbGxlY3RlZCBmcm9tIChjYW4gYmUg
Tm9uZSkKKyAgICAgICAgc2VsZi5mc3BhdGggPSBnZXRhdHRyKHBhcmVudCwgJ2ZzcGF0aCcsIE5v
bmUpCisKKyAgICAgICAgIzoga2V5d29yZHMvbWFya2VycyBjb2xsZWN0ZWQgZnJvbSBhbGwgc2Nv
cGVzCisgICAgICAgIHNlbGYua2V5d29yZHMgPSBOb2RlS2V5d29yZHMoc2VsZikKKworICAgICAg
ICAjOiBhbGxvdyBhZGRpbmcgb2YgZXh0cmEga2V5d29yZHMgdG8gdXNlIGZvciBtYXRjaGluZwor
ICAgICAgICBzZWxmLmV4dHJhX2tleXdvcmRfbWF0Y2hlcyA9IHNldCgpCisKKyAgICAgICAgIyB1
c2VkIGZvciBzdG9yaW5nIGFydGlmaWNpYWwgZml4dHVyZWRlZnMgZm9yIGRpcmVjdCBwYXJhbWV0
cml6YXRpb24KKyAgICAgICAgc2VsZi5fbmFtZTJwc2V1ZG9maXh0dXJlZGVmID0ge30KKworICAg
IEBwcm9wZXJ0eQorICAgIGRlZiBpaG9vayhzZWxmKToKKyAgICAgICAgIiIiIGZzcGF0aCBzZW5z
aXRpdmUgaG9vayBwcm94eSB1c2VkIHRvIGNhbGwgcHl0ZXN0IGhvb2tzIiIiCisgICAgICAgIHJl
dHVybiBzZWxmLnNlc3Npb24uZ2V0aG9va3Byb3h5KHNlbGYuZnNwYXRoKQorCisgICAgTW9kdWxl
ID0gY29tcGF0cHJvcGVydHkoIk1vZHVsZSIpCisgICAgQ2xhc3MgPSBjb21wYXRwcm9wZXJ0eSgi
Q2xhc3MiKQorICAgIEluc3RhbmNlID0gY29tcGF0cHJvcGVydHkoIkluc3RhbmNlIikKKyAgICBG
dW5jdGlvbiA9IGNvbXBhdHByb3BlcnR5KCJGdW5jdGlvbiIpCisgICAgRmlsZSA9IGNvbXBhdHBy
b3BlcnR5KCJGaWxlIikKKyAgICBJdGVtID0gY29tcGF0cHJvcGVydHkoIkl0ZW0iKQorCisgICAg
ZGVmIF9nZXRjdXN0b21jbGFzcyhzZWxmLCBuYW1lKToKKyAgICAgICAgY2xzID0gZ2V0YXR0cihz
ZWxmLCBuYW1lKQorICAgICAgICBpZiBjbHMgIT0gZ2V0YXR0cihweXRlc3QsIG5hbWUpOgorICAg
ICAgICAgICAgcHkubG9nLl9hcGl3YXJuKCIyLjAiLCAidXNlIG9mIG5vZGUuJXMgaXMgZGVwcmVj
YXRlZCwgIgorICAgICAgICAgICAgICAgICJ1c2UgcHl0ZXN0X3B5Y29sbGVjdF9tYWtlaXRlbSgu
Li4pIHRvIGNyZWF0ZSBjdXN0b20gIgorICAgICAgICAgICAgICAgICJjb2xsZWN0aW9uIG5vZGVz
IiAlIG5hbWUpCisgICAgICAgIHJldHVybiBjbHMKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToK
KyAgICAgICAgcmV0dXJuICI8JXMgJXI+IiAlKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ2V0YXR0cihzZWxmLCAnbmFtZScsIE5vbmUpKQorCisg
ICAgZGVmIHdhcm4oc2VsZiwgY29kZSwgbWVzc2FnZSk6CisgICAgICAgICIiIiBnZW5lcmF0ZSBh
IHdhcm5pbmcgd2l0aCB0aGUgZ2l2ZW4gY29kZSBhbmQgbWVzc2FnZSBmb3IgdGhpcworICAgICAg
ICBpdGVtLiAiIiIKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoY29kZSwgc3RyKQorICAgICAg
ICBmc2xvY2F0aW9uID0gZ2V0YXR0cihzZWxmLCAibG9jYXRpb24iLCBOb25lKQorICAgICAgICBp
ZiBmc2xvY2F0aW9uIGlzIE5vbmU6CisgICAgICAgICAgICBmc2xvY2F0aW9uID0gZ2V0YXR0cihz
ZWxmLCAiZnNwYXRoIiwgTm9uZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZzbG9jYXRp
b24gPSAiJXM6JXMiICUgZnNsb2NhdGlvbls6Ml0KKworICAgICAgICBzZWxmLmlob29rLnB5dGVz
dF9sb2d3YXJuaW5nLmNhbGxfaGlzdG9yaWMoa3dhcmdzPWRpY3QoCisgICAgICAgICAgICBjb2Rl
PWNvZGUsIG1lc3NhZ2U9bWVzc2FnZSwKKyAgICAgICAgICAgIG5vZGVpZD1zZWxmLm5vZGVpZCwg
ZnNsb2NhdGlvbj1mc2xvY2F0aW9uKSkKKworICAgICMgbWV0aG9kcyBmb3Igb3JkZXJpbmcgbm9k
ZXMKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbm9kZWlkKHNlbGYpOgorICAgICAgICAiIiIgYSA6
Oi1zZXBhcmF0ZWQgc3RyaW5nIGRlbm90aW5nIGl0cyBjb2xsZWN0aW9uIHRyZWUgYWRkcmVzcy4g
IiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9ub2RlaWQKKyAgICAg
ICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgc2VsZi5fbm9kZWlkID0geCA9
IHNlbGYuX21ha2VpZCgpCisgICAgICAgICAgICByZXR1cm4geAorCisgICAgZGVmIF9tYWtlaWQo
c2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnBhcmVudC5ub2RlaWQgKyAiOjoiICsgc2VsZi5u
YW1lCisKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgIHJldHVybiBoYXNoKHNlbGYu
bm9kZWlkKQorCisgICAgZGVmIHNldHVwKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYg
dGVhcmRvd24oc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBfbWVtb2l6ZWRjYWxsKHNl
bGYsIGF0dHJuYW1lLCBmdW5jdGlvbik6CisgICAgICAgIGV4YXR0cm5hbWUgPSAiX2V4XyIgKyBh
dHRybmFtZQorICAgICAgICBmYWlsdXJlID0gZ2V0YXR0cihzZWxmLCBleGF0dHJuYW1lLCBOb25l
KQorICAgICAgICBpZiBmYWlsdXJlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcHkuYnVpbHRp
bi5fcmVyYWlzZShmYWlsdXJlWzBdLCBmYWlsdXJlWzFdLCBmYWlsdXJlWzJdKQorICAgICAgICBp
ZiBoYXNhdHRyKHNlbGYsIGF0dHJuYW1lKToKKyAgICAgICAgICAgIHJldHVybiBnZXRhdHRyKHNl
bGYsIGF0dHJuYW1lKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXMgPSBmdW5jdGlvbigp
CisgICAgICAgIGV4Y2VwdCBweS5idWlsdGluLl9zeXNleDoKKyAgICAgICAgICAgIHJhaXNlCisg
ICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGZhaWx1cmUgPSBzeXMuZXhjX2luZm8oKQorICAg
ICAgICAgICAgc2V0YXR0cihzZWxmLCBleGF0dHJuYW1lLCBmYWlsdXJlKQorICAgICAgICAgICAg
cmFpc2UKKyAgICAgICAgc2V0YXR0cihzZWxmLCBhdHRybmFtZSwgcmVzKQorICAgICAgICByZXR1
cm4gcmVzCisKKyAgICBkZWYgbGlzdGNoYWluKHNlbGYpOgorICAgICAgICAiIiIgcmV0dXJuIGxp
c3Qgb2YgYWxsIHBhcmVudCBjb2xsZWN0b3JzIHVwIHRvIHNlbGYsCisgICAgICAgICAgICBzdGFy
dGluZyBmcm9tIHJvb3Qgb2YgY29sbGVjdGlvbiB0cmVlLiAiIiIKKyAgICAgICAgY2hhaW4gPSBb
XQorICAgICAgICBpdGVtID0gc2VsZgorICAgICAgICB3aGlsZSBpdGVtIGlzIG5vdCBOb25lOgor
ICAgICAgICAgICAgY2hhaW4uYXBwZW5kKGl0ZW0pCisgICAgICAgICAgICBpdGVtID0gaXRlbS5w
YXJlbnQKKyAgICAgICAgY2hhaW4ucmV2ZXJzZSgpCisgICAgICAgIHJldHVybiBjaGFpbgorCisg
ICAgZGVmIGFkZF9tYXJrZXIoc2VsZiwgbWFya2VyKToKKyAgICAgICAgIiIiIGR5bmFtaWNhbGx5
IGFkZCBhIG1hcmtlciBvYmplY3QgdG8gdGhlIG5vZGUuCisKKyAgICAgICAgYGBtYXJrZXJgYCBj
YW4gYmUgYSBzdHJpbmcgb3IgcHl0ZXN0Lm1hcmsuKiBpbnN0YW5jZS4KKyAgICAgICAgIiIiCisg
ICAgICAgIGZyb20gX3B5dGVzdC5tYXJrIGltcG9ydCBNYXJrRGVjb3JhdG9yCisgICAgICAgIGlm
IGlzaW5zdGFuY2UobWFya2VyLCBweS5idWlsdGluLl9iYXNlc3RyaW5nKToKKyAgICAgICAgICAg
IG1hcmtlciA9IE1hcmtEZWNvcmF0b3IobWFya2VyKQorICAgICAgICBlbGlmIG5vdCBpc2luc3Rh
bmNlKG1hcmtlciwgTWFya0RlY29yYXRvcik6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9y
KCJpcyBub3QgYSBzdHJpbmcgb3IgcHl0ZXN0Lm1hcmsuKiBNYXJrZXIiKQorICAgICAgICBzZWxm
LmtleXdvcmRzW21hcmtlci5uYW1lXSA9IG1hcmtlcgorCisgICAgZGVmIGdldF9tYXJrZXIoc2Vs
ZiwgbmFtZSk6CisgICAgICAgICIiIiBnZXQgYSBtYXJrZXIgb2JqZWN0IGZyb20gdGhpcyBub2Rl
IG9yIE5vbmUgaWYKKyAgICAgICAgdGhlIG5vZGUgZG9lc24ndCBoYXZlIGEgbWFya2VyIHdpdGgg
dGhhdCBuYW1lLiAiIiIKKyAgICAgICAgdmFsID0gc2VsZi5rZXl3b3Jkcy5nZXQobmFtZSwgTm9u
ZSkKKyAgICAgICAgaWYgdmFsIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZnJvbSBfcHl0ZXN0
Lm1hcmsgaW1wb3J0IE1hcmtJbmZvLCBNYXJrRGVjb3JhdG9yCisgICAgICAgICAgICBpZiBpc2lu
c3RhbmNlKHZhbCwgKE1hcmtEZWNvcmF0b3IsIE1hcmtJbmZvKSk6CisgICAgICAgICAgICAgICAg
cmV0dXJuIHZhbAorCisgICAgZGVmIGxpc3RleHRyYWtleXdvcmRzKHNlbGYpOgorICAgICAgICAi
IiIgUmV0dXJuIGEgc2V0IG9mIGFsbCBleHRyYSBrZXl3b3JkcyBpbiBzZWxmIGFuZCBhbnkgcGFy
ZW50cy4iIiIKKyAgICAgICAgZXh0cmFfa2V5d29yZHMgPSBzZXQoKQorICAgICAgICBpdGVtID0g
c2VsZgorICAgICAgICBmb3IgaXRlbSBpbiBzZWxmLmxpc3RjaGFpbigpOgorICAgICAgICAgICAg
ZXh0cmFfa2V5d29yZHMudXBkYXRlKGl0ZW0uZXh0cmFfa2V5d29yZF9tYXRjaGVzKQorICAgICAg
ICByZXR1cm4gZXh0cmFfa2V5d29yZHMKKworICAgIGRlZiBsaXN0bmFtZXMoc2VsZik6CisgICAg
ICAgIHJldHVybiBbeC5uYW1lIGZvciB4IGluIHNlbGYubGlzdGNoYWluKCldCisKKyAgICBkZWYg
YWRkZmluYWxpemVyKHNlbGYsIGZpbik6CisgICAgICAgICIiIiByZWdpc3RlciBhIGZ1bmN0aW9u
IHRvIGJlIGNhbGxlZCB3aGVuIHRoaXMgbm9kZSBpcyBmaW5hbGl6ZWQuCisKKyAgICAgICAgVGhp
cyBtZXRob2QgY2FuIG9ubHkgYmUgY2FsbGVkIHdoZW4gdGhpcyBub2RlIGlzIGFjdGl2ZQorICAg
ICAgICBpbiBhIHNldHVwIGNoYWluLCBmb3IgZXhhbXBsZSBkdXJpbmcgc2VsZi5zZXR1cCgpLgor
ICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5zZXNzaW9uLl9zZXR1cHN0YXRlLmFkZGZpbmFsaXpl
cihmaW4sIHNlbGYpCisKKyAgICBkZWYgZ2V0cGFyZW50KHNlbGYsIGNscyk6CisgICAgICAgICIi
IiBnZXQgdGhlIG5leHQgcGFyZW50IG5vZGUgKGluY2x1ZGluZyBvdXJzZWxmKQorICAgICAgICB3
aGljaCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgZ2l2ZW4gY2xhc3MiIiIKKyAgICAgICAgY3VycmVu
dCA9IHNlbGYKKyAgICAgICAgd2hpbGUgY3VycmVudCBhbmQgbm90IGlzaW5zdGFuY2UoY3VycmVu
dCwgY2xzKToKKyAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnBhcmVudAorICAgICAgICBy
ZXR1cm4gY3VycmVudAorCisgICAgZGVmIF9wcnVuZXRyYWNlYmFjayhzZWxmLCBleGNpbmZvKToK
KyAgICAgICAgcGFzcworCisgICAgZGVmIF9yZXByX2ZhaWx1cmVfcHkoc2VsZiwgZXhjaW5mbywg
c3R5bGU9Tm9uZSk6CisgICAgICAgIGZtID0gc2VsZi5zZXNzaW9uLl9maXh0dXJlbWFuYWdlcgor
ICAgICAgICBpZiBleGNpbmZvLmVycmlzaW5zdGFuY2UoZm0uRml4dHVyZUxvb2t1cEVycm9yKToK
KyAgICAgICAgICAgIHJldHVybiBleGNpbmZvLnZhbHVlLmZvcm1hdHJlcHIoKQorICAgICAgICB0
YmZpbHRlciA9IFRydWUKKyAgICAgICAgaWYgc2VsZi5jb25maWcub3B0aW9uLmZ1bGx0cmFjZToK
KyAgICAgICAgICAgIHN0eWxlPSJsb25nIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2Vs
Zi5fcHJ1bmV0cmFjZWJhY2soZXhjaW5mbykKKyAgICAgICAgICAgIHRiZmlsdGVyID0gRmFsc2Ug
ICMgcHJ1bmV0cmFjZWJhY2sgYWxyZWFkeSBkb2VzIGl0CisgICAgICAgICAgICBpZiBzdHlsZSA9
PSAiYXV0byI6CisgICAgICAgICAgICAgICAgc3R5bGUgPSAibG9uZyIKKyAgICAgICAgIyBYWFgg
c2hvdWxkIGV4Y2luZm8uZ2V0cmVwciByZWNvcmQgYWxsIGRhdGEgYW5kIHRvdGVybWluYWwoKSBw
cm9jZXNzIGl0PworICAgICAgICBpZiBzdHlsZSBpcyBOb25lOgorICAgICAgICAgICAgaWYgc2Vs
Zi5jb25maWcub3B0aW9uLnRic3R5bGUgPT0gInNob3J0IjoKKyAgICAgICAgICAgICAgICBzdHls
ZSA9ICJzaG9ydCIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc3R5bGUgPSAi
bG9uZyIKKworICAgICAgICByZXR1cm4gZXhjaW5mby5nZXRyZXByKGZ1bmNhcmdzPVRydWUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd2xvY2Fscz1zZWxmLmNvbmZpZy5vcHRp
b24uc2hvd2xvY2FscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1zdHls
ZSwgdGJmaWx0ZXI9dGJmaWx0ZXIpCisKKyAgICByZXByX2ZhaWx1cmUgPSBfcmVwcl9mYWlsdXJl
X3B5CisKK2NsYXNzIENvbGxlY3RvcihOb2RlKToKKyAgICAiIiIgQ29sbGVjdG9yIGluc3RhbmNl
cyBjcmVhdGUgY2hpbGRyZW4gdGhyb3VnaCBjb2xsZWN0KCkKKyAgICAgICAgYW5kIHRodXMgaXRl
cmF0aXZlbHkgYnVpbGQgYSB0cmVlLgorICAgICIiIgorCisgICAgY2xhc3MgQ29sbGVjdEVycm9y
KEV4Y2VwdGlvbik6CisgICAgICAgICIiIiBhbiBlcnJvciBkdXJpbmcgY29sbGVjdGlvbiwgY29u
dGFpbnMgYSBjdXN0b20gbWVzc2FnZS4gIiIiCisKKyAgICBkZWYgY29sbGVjdChzZWxmKToKKyAg
ICAgICAgIiIiIHJldHVybnMgYSBsaXN0IG9mIGNoaWxkcmVuIChpdGVtcyBhbmQgY29sbGVjdG9y
cykKKyAgICAgICAgICAgIGZvciB0aGlzIGNvbGxlY3Rpb24gbm9kZS4KKyAgICAgICAgIiIiCisg
ICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoImFic3RyYWN0IikKKworICAgIGRlZiBy
ZXByX2ZhaWx1cmUoc2VsZiwgZXhjaW5mbyk6CisgICAgICAgICIiIiByZXByZXNlbnQgYSBjb2xs
ZWN0aW9uIGZhaWx1cmUuICIiIgorICAgICAgICBpZiBleGNpbmZvLmVycmlzaW5zdGFuY2Uoc2Vs
Zi5Db2xsZWN0RXJyb3IpOgorICAgICAgICAgICAgZXhjID0gZXhjaW5mby52YWx1ZQorICAgICAg
ICAgICAgcmV0dXJuIHN0cihleGMuYXJnc1swXSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JlcHJf
ZmFpbHVyZV9weShleGNpbmZvLCBzdHlsZT0ic2hvcnQiKQorCisgICAgZGVmIF9tZW1vY29sbGVj
dChzZWxmKToKKyAgICAgICAgIiIiIGludGVybmFsIGhlbHBlciBtZXRob2QgdG8gY2FjaGUgcmVz
dWx0cyBvZiBjYWxsaW5nIGNvbGxlY3QoKS4gIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9tZW1v
aXplZGNhbGwoJ19jb2xsZWN0ZWQnLCBsYW1iZGE6IGxpc3Qoc2VsZi5jb2xsZWN0KCkpKQorCisg
ICAgZGVmIF9wcnVuZXRyYWNlYmFjayhzZWxmLCBleGNpbmZvKToKKyAgICAgICAgaWYgaGFzYXR0
cihzZWxmLCAnZnNwYXRoJyk6CisgICAgICAgICAgICB0cmFjZWJhY2sgPSBleGNpbmZvLnRyYWNl
YmFjaworICAgICAgICAgICAgbnRyYWNlYmFjayA9IHRyYWNlYmFjay5jdXQocGF0aD1zZWxmLmZz
cGF0aCkKKyAgICAgICAgICAgIGlmIG50cmFjZWJhY2sgPT0gdHJhY2ViYWNrOgorICAgICAgICAg
ICAgICAgIG50cmFjZWJhY2sgPSBudHJhY2ViYWNrLmN1dChleGNsdWRlcGF0aD10cmFjZWJhY2tj
dXRkaXIpCisgICAgICAgICAgICBleGNpbmZvLnRyYWNlYmFjayA9IG50cmFjZWJhY2suZmlsdGVy
KCkKKworY2xhc3MgRlNDb2xsZWN0b3IoQ29sbGVjdG9yKToKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgZnNwYXRoLCBwYXJlbnQ9Tm9uZSwgY29uZmlnPU5vbmUsIHNlc3Npb249Tm9uZSk6CisgICAg
ICAgIGZzcGF0aCA9IHB5LnBhdGgubG9jYWwoZnNwYXRoKSAjIHh4eCBvbmx5IGZvciB0ZXN0X3Jl
c3VsdGxvZy5weT8KKyAgICAgICAgbmFtZSA9IGZzcGF0aC5iYXNlbmFtZQorICAgICAgICBpZiBw
YXJlbnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZWwgPSBmc3BhdGgucmVsdG8ocGFyZW50
LmZzcGF0aCkKKyAgICAgICAgICAgIGlmIHJlbDoKKyAgICAgICAgICAgICAgICBuYW1lID0gcmVs
CisgICAgICAgICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKG9zLnNlcCwgIi8iKQorICAgICAgICBz
dXBlcihGU0NvbGxlY3Rvciwgc2VsZikuX19pbml0X18obmFtZSwgcGFyZW50LCBjb25maWcsIHNl
c3Npb24pCisgICAgICAgIHNlbGYuZnNwYXRoID0gZnNwYXRoCisKKyAgICBkZWYgX21ha2VpZChz
ZWxmKToKKyAgICAgICAgcmVscGF0aCA9IHNlbGYuZnNwYXRoLnJlbHRvKHNlbGYuY29uZmlnLnJv
b3RkaXIpCisgICAgICAgIGlmIG9zLnNlcCAhPSAiLyI6CisgICAgICAgICAgICByZWxwYXRoID0g
cmVscGF0aC5yZXBsYWNlKG9zLnNlcCwgIi8iKQorICAgICAgICByZXR1cm4gcmVscGF0aAorCitj
bGFzcyBGaWxlKEZTQ29sbGVjdG9yKToKKyAgICAiIiIgYmFzZSBjbGFzcyBmb3IgY29sbGVjdGlu
ZyB0ZXN0cyBmcm9tIGEgZmlsZS4gIiIiCisKK2NsYXNzIEl0ZW0oTm9kZSk6CisgICAgIiIiIGEg
YmFzaWMgdGVzdCBpbnZvY2F0aW9uIGl0ZW0uIE5vdGUgdGhhdCBmb3IgYSBzaW5nbGUgZnVuY3Rp
b24KKyAgICB0aGVyZSBtaWdodCBiZSBtdWx0aXBsZSB0ZXN0IGludm9jYXRpb24gaXRlbXMuCisg
ICAgIiIiCisgICAgbmV4dGl0ZW0gPSBOb25lCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFt
ZSwgcGFyZW50PU5vbmUsIGNvbmZpZz1Ob25lLCBzZXNzaW9uPU5vbmUpOgorICAgICAgICBzdXBl
cihJdGVtLCBzZWxmKS5fX2luaXRfXyhuYW1lLCBwYXJlbnQsIGNvbmZpZywgc2Vzc2lvbikKKyAg
ICAgICAgc2VsZi5fcmVwb3J0X3NlY3Rpb25zID0gW10KKworICAgIGRlZiBhZGRfcmVwb3J0X3Nl
Y3Rpb24oc2VsZiwgd2hlbiwga2V5LCBjb250ZW50KToKKyAgICAgICAgaWYgY29udGVudDoKKyAg
ICAgICAgICAgIHNlbGYuX3JlcG9ydF9zZWN0aW9ucy5hcHBlbmQoKHdoZW4sIGtleSwgY29udGVu
dCkpCisKKyAgICBkZWYgcmVwb3J0aW5mbyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZnNw
YXRoLCBOb25lLCAiIgorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGxvY2F0aW9uKHNlbGYpOgor
ICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fbG9jYXRpb24KKyAgICAgICAg
ZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgbG9jYXRpb24gPSBzZWxmLnJlcG9y
dGluZm8oKQorICAgICAgICAgICAgIyBiZXN0cmVscGF0aCBpcyBhIHF1aXRlIHNsb3cgZnVuY3Rp
b24KKyAgICAgICAgICAgIGNhY2hlID0gc2VsZi5jb25maWcuX19kaWN0X18uc2V0ZGVmYXVsdCgi
X2Jlc3RyZWxwYXRoY2FjaGUiLCB7fSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAg
ICBmc3BhdGggPSBjYWNoZVtsb2NhdGlvblswXV0KKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJv
cjoKKyAgICAgICAgICAgICAgICBmc3BhdGggPSBzZWxmLnNlc3Npb24uZnNwYXRoLmJlc3RyZWxw
YXRoKGxvY2F0aW9uWzBdKQorICAgICAgICAgICAgICAgIGNhY2hlW2xvY2F0aW9uWzBdXSA9IGZz
cGF0aAorICAgICAgICAgICAgbG9jYXRpb24gPSAoZnNwYXRoLCBsb2NhdGlvblsxXSwgc3RyKGxv
Y2F0aW9uWzJdKSkKKyAgICAgICAgICAgIHNlbGYuX2xvY2F0aW9uID0gbG9jYXRpb24KKyAgICAg
ICAgICAgIHJldHVybiBsb2NhdGlvbgorCitjbGFzcyBOb01hdGNoKEV4Y2VwdGlvbik6CisgICAg
IiIiIHJhaXNlZCBpZiBtYXRjaGluZyBjYW5ub3QgbG9jYXRlIGEgbWF0Y2hpbmcgbmFtZXMuICIi
IgorCitjbGFzcyBJbnRlcnJ1cHRlZChLZXlib2FyZEludGVycnVwdCk6CisgICAgIiIiIHNpZ25h
bHMgYW4gaW50ZXJydXB0ZWQgdGVzdCBydW4uICIiIgorICAgIF9fbW9kdWxlX18gPSAnYnVpbHRp
bnMnICMgZm9yIHB5MworCitjbGFzcyBTZXNzaW9uKEZTQ29sbGVjdG9yKToKKyAgICBJbnRlcnJ1
cHRlZCA9IEludGVycnVwdGVkCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29uZmlnKToKKyAg
ICAgICAgRlNDb2xsZWN0b3IuX19pbml0X18oc2VsZiwgY29uZmlnLnJvb3RkaXIsIHBhcmVudD1O
b25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWc9Y29uZmlnLCBzZXNzaW9u
PXNlbGYpCisgICAgICAgIHNlbGYuX2ZzMmhvb2twcm94eSA9IHt9CisgICAgICAgIHNlbGYudGVz
dHNmYWlsZWQgPSAwCisgICAgICAgIHNlbGYudGVzdHNjb2xsZWN0ZWQgPSAwCisgICAgICAgIHNl
bGYuc2hvdWxkc3RvcCA9IEZhbHNlCisgICAgICAgIHNlbGYudHJhY2UgPSBjb25maWcudHJhY2Uu
cm9vdC5nZXQoImNvbGxlY3Rpb24iKQorICAgICAgICBzZWxmLl9ub3JlY3Vyc2VwYXR0ZXJucyA9
IGNvbmZpZy5nZXRpbmkoIm5vcmVjdXJzZWRpcnMiKQorICAgICAgICBzZWxmLnN0YXJ0ZGlyID0g
cHkucGF0aC5sb2NhbCgpCisgICAgICAgIHNlbGYuY29uZmlnLnBsdWdpbm1hbmFnZXIucmVnaXN0
ZXIoc2VsZiwgbmFtZT0ic2Vzc2lvbiIpCisKKyAgICBkZWYgX21ha2VpZChzZWxmKToKKyAgICAg
ICAgcmV0dXJuICIiCisKKyAgICBAcHl0ZXN0Lmhvb2tpbXBsKHRyeWZpcnN0PVRydWUpCisgICAg
ZGVmIHB5dGVzdF9jb2xsZWN0c3RhcnQoc2VsZik6CisgICAgICAgIGlmIHNlbGYuc2hvdWxkc3Rv
cDoKKyAgICAgICAgICAgIHJhaXNlIHNlbGYuSW50ZXJydXB0ZWQoc2VsZi5zaG91bGRzdG9wKQor
CisgICAgQHB5dGVzdC5ob29raW1wbCh0cnlmaXJzdD1UcnVlKQorICAgIGRlZiBweXRlc3RfcnVu
dGVzdF9sb2dyZXBvcnQoc2VsZiwgcmVwb3J0KToKKyAgICAgICAgaWYgcmVwb3J0LmZhaWxlZCBh
bmQgbm90IGhhc2F0dHIocmVwb3J0LCAnd2FzeGZhaWwnKToKKyAgICAgICAgICAgIHNlbGYudGVz
dHNmYWlsZWQgKz0gMQorICAgICAgICAgICAgbWF4ZmFpbCA9IHNlbGYuY29uZmlnLmdldHZhbHVl
KCJtYXhmYWlsIikKKyAgICAgICAgICAgIGlmIG1heGZhaWwgYW5kIHNlbGYudGVzdHNmYWlsZWQg
Pj0gbWF4ZmFpbDoKKyAgICAgICAgICAgICAgICBzZWxmLnNob3VsZHN0b3AgPSAic3RvcHBpbmcg
YWZ0ZXIgJWQgZmFpbHVyZXMiICUgKAorICAgICAgICAgICAgICAgICAgICBzZWxmLnRlc3RzZmFp
bGVkKQorICAgIHB5dGVzdF9jb2xsZWN0cmVwb3J0ID0gcHl0ZXN0X3J1bnRlc3RfbG9ncmVwb3J0
CisKKyAgICBkZWYgaXNpbml0cGF0aChzZWxmLCBwYXRoKToKKyAgICAgICAgcmV0dXJuIHBhdGgg
aW4gc2VsZi5faW5pdGlhbHBhdGhzCisKKyAgICBkZWYgZ2V0aG9va3Byb3h5KHNlbGYsIGZzcGF0
aCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9mczJob29rcHJveHlb
ZnNwYXRoXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAjIGNoZWNrIGlm
IHdlIGhhdmUgdGhlIGNvbW1vbiBjYXNlIG9mIHJ1bm5pbmcKKyAgICAgICAgICAgICMgaG9va3Mg
d2l0aCBhbGwgY29uZnRlc3QucHkgZmlsZXNhbGwgY29uZnRlc3QucHkKKyAgICAgICAgICAgIHBt
ID0gc2VsZi5jb25maWcucGx1Z2lubWFuYWdlcgorICAgICAgICAgICAgbXlfY29uZnRlc3Rtb2R1
bGVzID0gcG0uX2dldGNvbmZ0ZXN0bW9kdWxlcyhmc3BhdGgpCisgICAgICAgICAgICByZW1vdmVf
bW9kcyA9IHBtLl9jb25mdGVzdF9wbHVnaW5zLmRpZmZlcmVuY2UobXlfY29uZnRlc3Rtb2R1bGVz
KQorICAgICAgICAgICAgaWYgcmVtb3ZlX21vZHM6CisgICAgICAgICAgICAgICAgIyBvbmUgb3Ig
bW9yZSBjb25mdGVzdHMgYXJlIG5vdCBpbiB1c2UgYXQgdGhpcyBmc3BhdGgKKyAgICAgICAgICAg
ICAgICBwcm94eSA9IEZTSG9va1Byb3h5KGZzcGF0aCwgcG0sIHJlbW92ZV9tb2RzKQorICAgICAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIGFsbCBwbHVnaXMgYXJlIGFjdGl2ZSBmb3Ig
dGhpcyBmc3BhdGgKKyAgICAgICAgICAgICAgICBwcm94eSA9IHNlbGYuY29uZmlnLmhvb2sKKwor
ICAgICAgICAgICAgc2VsZi5fZnMyaG9va3Byb3h5W2ZzcGF0aF0gPSBwcm94eQorICAgICAgICAg
ICAgcmV0dXJuIHByb3h5CisKKyAgICBkZWYgcGVyZm9ybV9jb2xsZWN0KHNlbGYsIGFyZ3M9Tm9u
ZSwgZ2VuaXRlbXM9VHJ1ZSk6CisgICAgICAgIGhvb2sgPSBzZWxmLmNvbmZpZy5ob29rCisgICAg
ICAgIHRyeToKKyAgICAgICAgICAgIGl0ZW1zID0gc2VsZi5fcGVyZm9ybV9jb2xsZWN0KGFyZ3Ms
IGdlbml0ZW1zKQorICAgICAgICAgICAgaG9vay5weXRlc3RfY29sbGVjdGlvbl9tb2RpZnlpdGVt
cyhzZXNzaW9uPXNlbGYsCisgICAgICAgICAgICAgICAgY29uZmlnPXNlbGYuY29uZmlnLCBpdGVt
cz1pdGVtcykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGhvb2sucHl0ZXN0X2NvbGxl
Y3Rpb25fZmluaXNoKHNlc3Npb249c2VsZikKKyAgICAgICAgc2VsZi50ZXN0c2NvbGxlY3RlZCA9
IGxlbihpdGVtcykKKyAgICAgICAgcmV0dXJuIGl0ZW1zCisKKyAgICBkZWYgX3BlcmZvcm1fY29s
bGVjdChzZWxmLCBhcmdzLCBnZW5pdGVtcyk6CisgICAgICAgIGlmIGFyZ3MgaXMgTm9uZToKKyAg
ICAgICAgICAgIGFyZ3MgPSBzZWxmLmNvbmZpZy5hcmdzCisgICAgICAgIHNlbGYudHJhY2UoInBl
cmZvcm1fY29sbGVjdCIsIHNlbGYsIGFyZ3MpCisgICAgICAgIHNlbGYudHJhY2Uucm9vdC5pbmRl
bnQgKz0gMQorICAgICAgICBzZWxmLl9ub3Rmb3VuZCA9IFtdCisgICAgICAgIHNlbGYuX2luaXRp
YWxwYXRocyA9IHNldCgpCisgICAgICAgIHNlbGYuX2luaXRpYWxwYXJ0cyA9IFtdCisgICAgICAg
IHNlbGYuaXRlbXMgPSBpdGVtcyA9IFtdCisgICAgICAgIGZvciBhcmcgaW4gYXJnczoKKyAgICAg
ICAgICAgIHBhcnRzID0gc2VsZi5fcGFyc2VhcmcoYXJnKQorICAgICAgICAgICAgc2VsZi5faW5p
dGlhbHBhcnRzLmFwcGVuZChwYXJ0cykKKyAgICAgICAgICAgIHNlbGYuX2luaXRpYWxwYXRocy5h
ZGQocGFydHNbMF0pCisgICAgICAgIHJlcCA9IGNvbGxlY3Rfb25lX25vZGUoc2VsZikKKyAgICAg
ICAgc2VsZi5paG9vay5weXRlc3RfY29sbGVjdHJlcG9ydChyZXBvcnQ9cmVwKQorICAgICAgICBz
ZWxmLnRyYWNlLnJvb3QuaW5kZW50IC09IDEKKyAgICAgICAgaWYgc2VsZi5fbm90Zm91bmQ6Cisg
ICAgICAgICAgICBlcnJvcnMgPSBbXQorICAgICAgICAgICAgZm9yIGFyZywgZXhjIGluIHNlbGYu
X25vdGZvdW5kOgorICAgICAgICAgICAgICAgIGxpbmUgPSAiKG5vIG5hbWUgJXIgaW4gYW55IG9m
ICVyKSIgJSAoYXJnLCBleGMuYXJnc1swXSkKKyAgICAgICAgICAgICAgICBlcnJvcnMuYXBwZW5k
KCJub3QgZm91bmQ6ICVzXG4lcyIgJSAoYXJnLCBsaW5lKSkKKyAgICAgICAgICAgICAgICAjWFhY
OiB0ZXN0IHRoaXMKKyAgICAgICAgICAgIHJhaXNlIHB5dGVzdC5Vc2FnZUVycm9yKCplcnJvcnMp
CisgICAgICAgIGlmIG5vdCBnZW5pdGVtczoKKyAgICAgICAgICAgIHJldHVybiByZXAucmVzdWx0
CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiByZXAucGFzc2VkOgorICAgICAgICAgICAg
ICAgIGZvciBub2RlIGluIHJlcC5yZXN1bHQ6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuaXRl
bXMuZXh0ZW5kKHNlbGYuZ2VuaXRlbXMobm9kZSkpCisgICAgICAgICAgICByZXR1cm4gaXRlbXMK
KworICAgIGRlZiBjb2xsZWN0KHNlbGYpOgorICAgICAgICBmb3IgcGFydHMgaW4gc2VsZi5faW5p
dGlhbHBhcnRzOgorICAgICAgICAgICAgYXJnID0gIjo6Ii5qb2luKG1hcChzdHIsIHBhcnRzKSkK
KyAgICAgICAgICAgIHNlbGYudHJhY2UoInByb2Nlc3NpbmcgYXJndW1lbnQiLCBhcmcpCisgICAg
ICAgICAgICBzZWxmLnRyYWNlLnJvb3QuaW5kZW50ICs9IDEKKyAgICAgICAgICAgIHRyeToKKyAg
ICAgICAgICAgICAgICBmb3IgeCBpbiBzZWxmLl9jb2xsZWN0KGFyZyk6CisgICAgICAgICAgICAg
ICAgICAgIHlpZWxkIHgKKyAgICAgICAgICAgIGV4Y2VwdCBOb01hdGNoOgorICAgICAgICAgICAg
ICAgICMgd2UgYXJlIGluc2lkZSBhIG1ha2VfcmVwb3J0IGhvb2sgc28KKyAgICAgICAgICAgICAg
ICAjIHdlIGNhbm5vdCBkaXJlY3RseSBwYXNzIHRocm91Z2ggdGhlIGV4Y2VwdGlvbgorICAgICAg
ICAgICAgICAgIHNlbGYuX25vdGZvdW5kLmFwcGVuZCgoYXJnLCBzeXMuZXhjX2luZm8oKVsxXSkp
CisKKyAgICAgICAgICAgIHNlbGYudHJhY2Uucm9vdC5pbmRlbnQgLT0gMQorCisgICAgZGVmIF9j
b2xsZWN0KHNlbGYsIGFyZyk6CisgICAgICAgIG5hbWVzID0gc2VsZi5fcGFyc2VhcmcoYXJnKQor
ICAgICAgICBwYXRoID0gbmFtZXMucG9wKDApCisgICAgICAgIGlmIHBhdGguY2hlY2soZGlyPTEp
OgorICAgICAgICAgICAgYXNzZXJ0IG5vdCBuYW1lcywgImludmFsaWQgYXJnICVyIiAlKGFyZywp
CisgICAgICAgICAgICBmb3IgcGF0aCBpbiBwYXRoLnZpc2l0KGZpbD1sYW1iZGEgeDogeC5jaGVj
ayhmaWxlPTEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWM9c2VsZi5f
cmVjdXJzZSwgYmY9VHJ1ZSwgc29ydD1UcnVlKToKKyAgICAgICAgICAgICAgICBmb3IgeCBpbiBz
ZWxmLl9jb2xsZWN0ZmlsZShwYXRoKToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgeAorICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgYXNzZXJ0IHBhdGguY2hlY2soZmlsZT0xKQorICAgICAg
ICAgICAgZm9yIHggaW4gc2VsZi5tYXRjaG5vZGVzKHNlbGYuX2NvbGxlY3RmaWxlKHBhdGgpLCBu
YW1lcyk6CisgICAgICAgICAgICAgICAgeWllbGQgeAorCisgICAgZGVmIF9jb2xsZWN0ZmlsZShz
ZWxmLCBwYXRoKToKKyAgICAgICAgaWhvb2sgPSBzZWxmLmdldGhvb2twcm94eShwYXRoKQorICAg
ICAgICBpZiBub3Qgc2VsZi5pc2luaXRwYXRoKHBhdGgpOgorICAgICAgICAgICAgaWYgaWhvb2su
cHl0ZXN0X2lnbm9yZV9jb2xsZWN0KHBhdGg9cGF0aCwgY29uZmlnPXNlbGYuY29uZmlnKToKKyAg
ICAgICAgICAgICAgICByZXR1cm4gKCkKKyAgICAgICAgcmV0dXJuIGlob29rLnB5dGVzdF9jb2xs
ZWN0X2ZpbGUocGF0aD1wYXRoLCBwYXJlbnQ9c2VsZikKKworICAgIGRlZiBfcmVjdXJzZShzZWxm
LCBwYXRoKToKKyAgICAgICAgaWhvb2sgPSBzZWxmLmdldGhvb2twcm94eShwYXRoLmRpcnBhdGgo
KSkKKyAgICAgICAgaWYgaWhvb2sucHl0ZXN0X2lnbm9yZV9jb2xsZWN0KHBhdGg9cGF0aCwgY29u
ZmlnPXNlbGYuY29uZmlnKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBmb3IgcGF0IGlu
IHNlbGYuX25vcmVjdXJzZXBhdHRlcm5zOgorICAgICAgICAgICAgaWYgcGF0aC5jaGVjayhmbm1h
dGNoPXBhdCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlob29rID0g
c2VsZi5nZXRob29rcHJveHkocGF0aCkKKyAgICAgICAgaWhvb2sucHl0ZXN0X2NvbGxlY3RfZGly
ZWN0b3J5KHBhdGg9cGF0aCwgcGFyZW50PXNlbGYpCisgICAgICAgIHJldHVybiBUcnVlCisKKyAg
ICBkZWYgX3RyeWNvbnZlcnRweWFyZyhzZWxmLCB4KToKKyAgICAgICAgbW9kID0gTm9uZQorICAg
ICAgICBwYXRoID0gW29zLnBhdGguYWJzcGF0aCgnLicpXSArIHN5cy5wYXRoCisgICAgICAgIGZv
ciBuYW1lIGluIHguc3BsaXQoJy4nKToKKyAgICAgICAgICAgICMgaWdub3JlIGFueXRoaW5nIHRo
YXQncyBub3QgYSBwcm9wZXIgbmFtZSBoZXJlCisgICAgICAgICAgICAjIGVsc2Ugc29tZXRoaW5n
IGxpa2UgLS1weWFyZ3Mgd2lsbCBtZXNzIHVwICcuJworICAgICAgICAgICAgIyBzaW5jZSBpbXAu
ZmluZF9tb2R1bGUgd2lsbCBhY3R1YWxseSBzb21ldGltZXMgd29yayBmb3IgaXQKKyAgICAgICAg
ICAgICMgYnV0IGl0J3Mgc3VwcG9zZWQgdG8gYmUgY29uc2lkZXJlZCBhIGZpbGVzeXN0ZW0gcGF0
aAorICAgICAgICAgICAgIyBub3QgYSBwYWNrYWdlCisgICAgICAgICAgICBpZiBuYW1lX3JlLm1h
dGNoKG5hbWUpIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuIHgKKyAgICAgICAgICAg
IHRyeToKKyAgICAgICAgICAgICAgICBmZCwgbW9kLCB0eXBlXyA9IGltcC5maW5kX21vZHVsZShu
YW1lLCBwYXRoKQorICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAg
ICAgIHJldHVybiB4CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIGZkIGlz
IG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBmZC5jbG9zZSgpCisKKyAgICAgICAgICAg
IGlmIHR5cGVfWzJdICE9IGltcC5QS0dfRElSRUNUT1JZOgorICAgICAgICAgICAgICAgIHBhdGgg
PSBbb3MucGF0aC5kaXJuYW1lKG1vZCldCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAg
ICAgIHBhdGggPSBbbW9kXQorICAgICAgICByZXR1cm4gbW9kCisKKyAgICBkZWYgX3BhcnNlYXJn
KHNlbGYsIGFyZyk6CisgICAgICAgICIiIiByZXR1cm4gKGZzcGF0aCwgbmFtZXMpIHR1cGxlIGFm
dGVyIGNoZWNraW5nIHRoZSBmaWxlIGV4aXN0cy4gIiIiCisgICAgICAgIGFyZyA9IHN0cihhcmcp
CisgICAgICAgIGlmIHNlbGYuY29uZmlnLm9wdGlvbi5weWFyZ3M6CisgICAgICAgICAgICBhcmcg
PSBzZWxmLl90cnljb252ZXJ0cHlhcmcoYXJnKQorICAgICAgICBwYXJ0cyA9IHN0cihhcmcpLnNw
bGl0KCI6OiIpCisgICAgICAgIHJlbHBhdGggPSBwYXJ0c1swXS5yZXBsYWNlKCIvIiwgb3Muc2Vw
KQorICAgICAgICBwYXRoID0gc2VsZi5jb25maWcuaW52b2NhdGlvbl9kaXIuam9pbihyZWxwYXRo
LCBhYnM9VHJ1ZSkKKyAgICAgICAgaWYgbm90IHBhdGguY2hlY2soKToKKyAgICAgICAgICAgIGlm
IHNlbGYuY29uZmlnLm9wdGlvbi5weWFyZ3M6CisgICAgICAgICAgICAgICAgbXNnID0gImZpbGUg
b3IgcGFja2FnZSBub3QgZm91bmQ6ICIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAg
ICAgbXNnID0gImZpbGUgbm90IGZvdW5kOiAiCisgICAgICAgICAgICByYWlzZSBweXRlc3QuVXNh
Z2VFcnJvcihtc2cgKyBhcmcpCisgICAgICAgIHBhcnRzWzBdID0gcGF0aAorICAgICAgICByZXR1
cm4gcGFydHMKKworICAgIGRlZiBtYXRjaG5vZGVzKHNlbGYsIG1hdGNoaW5nLCBuYW1lcyk6Cisg
ICAgICAgIHNlbGYudHJhY2UoIm1hdGNobm9kZXMiLCBtYXRjaGluZywgbmFtZXMpCisgICAgICAg
IHNlbGYudHJhY2Uucm9vdC5pbmRlbnQgKz0gMQorICAgICAgICBub2RlcyA9IHNlbGYuX21hdGNo
bm9kZXMobWF0Y2hpbmcsIG5hbWVzKQorICAgICAgICBudW0gPSBsZW4obm9kZXMpCisgICAgICAg
IHNlbGYudHJhY2UoIm1hdGNobm9kZXMgZmluaXNoZWQgLT4gIiwgbnVtLCAibm9kZXMiKQorICAg
ICAgICBzZWxmLnRyYWNlLnJvb3QuaW5kZW50IC09IDEKKyAgICAgICAgaWYgbnVtID09IDA6Cisg
ICAgICAgICAgICByYWlzZSBOb01hdGNoKG1hdGNoaW5nLCBuYW1lc1s6MV0pCisgICAgICAgIHJl
dHVybiBub2RlcworCisgICAgZGVmIF9tYXRjaG5vZGVzKHNlbGYsIG1hdGNoaW5nLCBuYW1lcyk6
CisgICAgICAgIGlmIG5vdCBtYXRjaGluZyBvciBub3QgbmFtZXM6CisgICAgICAgICAgICByZXR1
cm4gbWF0Y2hpbmcKKyAgICAgICAgbmFtZSA9IG5hbWVzWzBdCisgICAgICAgIGFzc2VydCBuYW1l
CisgICAgICAgIG5leHRuYW1lcyA9IG5hbWVzWzE6XQorICAgICAgICByZXN1bHRub2RlcyA9IFtd
CisgICAgICAgIGZvciBub2RlIGluIG1hdGNoaW5nOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5j
ZShub2RlLCBweXRlc3QuSXRlbSk6CisgICAgICAgICAgICAgICAgaWYgbm90IG5hbWVzOgorICAg
ICAgICAgICAgICAgICAgICByZXN1bHRub2Rlcy5hcHBlbmQobm9kZSkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZQorICAgICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2Uobm9kZSwgcHl0ZXN0LkNv
bGxlY3RvcikKKyAgICAgICAgICAgIHJlcCA9IGNvbGxlY3Rfb25lX25vZGUobm9kZSkKKyAgICAg
ICAgICAgIGlmIHJlcC5wYXNzZWQ6CisgICAgICAgICAgICAgICAgaGFzX21hdGNoZWQgPSBGYWxz
ZQorICAgICAgICAgICAgICAgIGZvciB4IGluIHJlcC5yZXN1bHQ6CisgICAgICAgICAgICAgICAg
ICAgICMgVE9ETzogcmVtb3ZlIHBhcmFtZXRyaXplZCB3b3JrYXJvdW5kIG9uY2UgY29sbGVjdGlv
biBzdHJ1Y3R1cmUgY29udGFpbnMgcGFyYW1ldHJpemF0aW9uCisgICAgICAgICAgICAgICAgICAg
IGlmIHgubmFtZSA9PSBuYW1lIG9yIHgubmFtZS5zcGxpdCgiWyIpWzBdID09IG5hbWU6CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXN1bHRub2Rlcy5leHRlbmQoc2VsZi5tYXRjaG5vZGVzKFt4
XSwgbmV4dG5hbWVzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhc19tYXRjaGVkID0gVHJ1
ZQorICAgICAgICAgICAgICAgICMgWFhYIGFjY2VwdCBJRHMgdGhhdCBkb24ndCBoYXZlICIoKSIg
Zm9yIGNsYXNzIGluc3RhbmNlcworICAgICAgICAgICAgICAgIGlmIG5vdCBoYXNfbWF0Y2hlZCBh
bmQgbGVuKHJlcC5yZXN1bHQpID09IDEgYW5kIHgubmFtZSA9PSAiKCkiOgorICAgICAgICAgICAg
ICAgICAgICBuZXh0bmFtZXMuaW5zZXJ0KDAsIG5hbWUpCisgICAgICAgICAgICAgICAgICAgIHJl
c3VsdG5vZGVzLmV4dGVuZChzZWxmLm1hdGNobm9kZXMoW3hdLCBuZXh0bmFtZXMpKQorICAgICAg
ICAgICAgbm9kZS5paG9vay5weXRlc3RfY29sbGVjdHJlcG9ydChyZXBvcnQ9cmVwKQorICAgICAg
ICByZXR1cm4gcmVzdWx0bm9kZXMKKworICAgIGRlZiBnZW5pdGVtcyhzZWxmLCBub2RlKToKKyAg
ICAgICAgc2VsZi50cmFjZSgiZ2VuaXRlbXMiLCBub2RlKQorICAgICAgICBpZiBpc2luc3RhbmNl
KG5vZGUsIHB5dGVzdC5JdGVtKToKKyAgICAgICAgICAgIG5vZGUuaWhvb2sucHl0ZXN0X2l0ZW1j
b2xsZWN0ZWQoaXRlbT1ub2RlKQorICAgICAgICAgICAgeWllbGQgbm9kZQorICAgICAgICBlbHNl
OgorICAgICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2Uobm9kZSwgcHl0ZXN0LkNvbGxlY3RvcikK
KyAgICAgICAgICAgIHJlcCA9IGNvbGxlY3Rfb25lX25vZGUobm9kZSkKKyAgICAgICAgICAgIGlm
IHJlcC5wYXNzZWQ6CisgICAgICAgICAgICAgICAgZm9yIHN1Ym5vZGUgaW4gcmVwLnJlc3VsdDoK
KyAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gc2VsZi5nZW5pdGVtcyhzdWJub2RlKToKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHgKKyAgICAgICAgICAgIG5vZGUuaWhvb2sucHl0
ZXN0X2NvbGxlY3RyZXBvcnQocmVwb3J0PXJlcCkKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3Rz
L2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9tYXJrLnB5IGIvV2ViRHJpdmVyVGVz
dHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L21hcmsucHkKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjFhNzYzNTQwMjQwCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L21hcmsu
cHkKQEAgLTAsMCArMSwzMTEgQEAKKyIiIiBnZW5lcmljIG1lY2hhbmlzbSBmb3IgbWFya2luZyBh
bmQgc2VsZWN0aW5nIHB5dGhvbiBmdW5jdGlvbnMuICIiIgoraW1wb3J0IGluc3BlY3QKKworCitj
bGFzcyBNYXJrZXJFcnJvcihFeGNlcHRpb24pOgorCisgICAgIiIiRXJyb3IgaW4gdXNlIG9mIGEg
cHl0ZXN0IG1hcmtlci9hdHRyaWJ1dGUuIiIiCisKKworZGVmIHB5dGVzdF9uYW1lc3BhY2UoKToK
KyAgICByZXR1cm4geydtYXJrJzogTWFya0dlbmVyYXRvcigpfQorCisKK2RlZiBweXRlc3RfYWRk
b3B0aW9uKHBhcnNlcik6CisgICAgZ3JvdXAgPSBwYXJzZXIuZ2V0Z3JvdXAoImdlbmVyYWwiKQor
ICAgIGdyb3VwLl9hZGRvcHRpb24oCisgICAgICAgICctaycsCisgICAgICAgIGFjdGlvbj0ic3Rv
cmUiLCBkZXN0PSJrZXl3b3JkIiwgZGVmYXVsdD0nJywgbWV0YXZhcj0iRVhQUkVTU0lPTiIsCisg
ICAgICAgIGhlbHA9Im9ubHkgcnVuIHRlc3RzIHdoaWNoIG1hdGNoIHRoZSBnaXZlbiBzdWJzdHJp
bmcgZXhwcmVzc2lvbi4gIgorICAgICAgICAgICAgICJBbiBleHByZXNzaW9uIGlzIGEgcHl0aG9u
IGV2YWx1YXRhYmxlIGV4cHJlc3Npb24gIgorICAgICAgICAgICAgICJ3aGVyZSBhbGwgbmFtZXMg
YXJlIHN1YnN0cmluZy1tYXRjaGVkIGFnYWluc3QgdGVzdCBuYW1lcyAiCisgICAgICAgICAgICAg
ImFuZCB0aGVpciBwYXJlbnQgY2xhc3Nlcy4gRXhhbXBsZTogLWsgJ3Rlc3RfbWV0aG9kIG9yIHRl
c3QgIgorICAgICAgICAgICAgICJvdGhlcicgbWF0Y2hlcyBhbGwgdGVzdCBmdW5jdGlvbnMgYW5k
IGNsYXNzZXMgd2hvc2UgbmFtZSAiCisgICAgICAgICAgICAgImNvbnRhaW5zICd0ZXN0X21ldGhv
ZCcgb3IgJ3Rlc3Rfb3RoZXInLiAiCisgICAgICAgICAgICAgIkFkZGl0aW9uYWxseSBrZXl3b3Jk
cyBhcmUgbWF0Y2hlZCB0byBjbGFzc2VzIGFuZCBmdW5jdGlvbnMgIgorICAgICAgICAgICAgICJj
b250YWluaW5nIGV4dHJhIG5hbWVzIGluIHRoZWlyICdleHRyYV9rZXl3b3JkX21hdGNoZXMnIHNl
dCwgIgorICAgICAgICAgICAgICJhcyB3ZWxsIGFzIGZ1bmN0aW9ucyB3aGljaCBoYXZlIG5hbWVz
IGFzc2lnbmVkIGRpcmVjdGx5IHRvIHRoZW0uIgorICAgICkKKworICAgIGdyb3VwLl9hZGRvcHRp
b24oCisgICAgICAgICItbSIsCisgICAgICAgIGFjdGlvbj0ic3RvcmUiLCBkZXN0PSJtYXJrZXhw
ciIsIGRlZmF1bHQ9IiIsIG1ldGF2YXI9Ik1BUktFWFBSIiwKKyAgICAgICAgaGVscD0ib25seSBy
dW4gdGVzdHMgbWF0Y2hpbmcgZ2l2ZW4gbWFyayBleHByZXNzaW9uLiAgIgorICAgICAgICAgICAg
ICJleGFtcGxlOiAtbSAnbWFyazEgYW5kIG5vdCBtYXJrMicuIgorICAgICkKKworICAgIGdyb3Vw
LmFkZG9wdGlvbigKKyAgICAgICAgIi0tbWFya2VycyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisg
ICAgICAgIGhlbHA9InNob3cgbWFya2VycyAoYnVpbHRpbiwgcGx1Z2luIGFuZCBwZXItcHJvamVj
dCBvbmVzKS4iCisgICAgKQorCisgICAgcGFyc2VyLmFkZGluaSgibWFya2VycyIsICJtYXJrZXJz
IGZvciB0ZXN0IGZ1bmN0aW9ucyIsICdsaW5lbGlzdCcpCisKKworZGVmIHB5dGVzdF9jbWRsaW5l
X21haW4oY29uZmlnKToKKyAgICBpbXBvcnQgX3B5dGVzdC5jb25maWcKKyAgICBpZiBjb25maWcu
b3B0aW9uLm1hcmtlcnM6CisgICAgICAgIGNvbmZpZy5fZG9fY29uZmlndXJlKCkKKyAgICAgICAg
dHcgPSBfcHl0ZXN0LmNvbmZpZy5jcmVhdGVfdGVybWluYWxfd3JpdGVyKGNvbmZpZykKKyAgICAg
ICAgZm9yIGxpbmUgaW4gY29uZmlnLmdldGluaSgibWFya2VycyIpOgorICAgICAgICAgICAgbmFt
ZSwgcmVzdCA9IGxpbmUuc3BsaXQoIjoiLCAxKQorICAgICAgICAgICAgdHcud3JpdGUoIkBweXRl
c3QubWFyay4lczoiICUgbmFtZSwgYm9sZD1UcnVlKQorICAgICAgICAgICAgdHcubGluZShyZXN0
KQorICAgICAgICAgICAgdHcubGluZSgpCisgICAgICAgIGNvbmZpZy5fZW5zdXJlX3VuY29uZmln
dXJlKCkKKyAgICAgICAgcmV0dXJuIDAKK3B5dGVzdF9jbWRsaW5lX21haW4udHJ5Zmlyc3QgPSBU
cnVlCisKKworZGVmIHB5dGVzdF9jb2xsZWN0aW9uX21vZGlmeWl0ZW1zKGl0ZW1zLCBjb25maWcp
OgorICAgIGtleXdvcmRleHByID0gY29uZmlnLm9wdGlvbi5rZXl3b3JkCisgICAgbWF0Y2hleHBy
ID0gY29uZmlnLm9wdGlvbi5tYXJrZXhwcgorICAgIGlmIG5vdCBrZXl3b3JkZXhwciBhbmQgbm90
IG1hdGNoZXhwcjoKKyAgICAgICAgcmV0dXJuCisgICAgIyBweXRlc3QgdXNlZCB0byBhbGxvdyAi
LSIgZm9yIG5lZ2F0aW5nCisgICAgIyBidXQgdG9kYXkgd2UganVzdCBhbGxvdyAiLSIgYXQgdGhl
IGJlZ2lubmluZywgdXNlICJub3QiIGluc3RlYWQKKyAgICAjIHdlIHByb2JhYmx5IHJlbW92ZSAi
LSIgYWxsdG9nZXRoZXIgc29vbgorICAgIGlmIGtleXdvcmRleHByLnN0YXJ0c3dpdGgoIi0iKToK
KyAgICAgICAga2V5d29yZGV4cHIgPSAibm90ICIgKyBrZXl3b3JkZXhwclsxOl0KKyAgICBzZWxl
Y3R1bnRpbCA9IEZhbHNlCisgICAgaWYga2V5d29yZGV4cHJbLTE6XSA9PSAiOiI6CisgICAgICAg
IHNlbGVjdHVudGlsID0gVHJ1ZQorICAgICAgICBrZXl3b3JkZXhwciA9IGtleXdvcmRleHByWzot
MV0KKworICAgIHJlbWFpbmluZyA9IFtdCisgICAgZGVzZWxlY3RlZCA9IFtdCisgICAgZm9yIGNv
bGl0ZW0gaW4gaXRlbXM6CisgICAgICAgIGlmIGtleXdvcmRleHByIGFuZCBub3QgbWF0Y2hrZXl3
b3JkKGNvbGl0ZW0sIGtleXdvcmRleHByKToKKyAgICAgICAgICAgIGRlc2VsZWN0ZWQuYXBwZW5k
KGNvbGl0ZW0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBzZWxlY3R1bnRpbDoKKyAg
ICAgICAgICAgICAgICBrZXl3b3JkZXhwciA9IE5vbmUKKyAgICAgICAgICAgIGlmIG1hdGNoZXhw
cjoKKyAgICAgICAgICAgICAgICBpZiBub3QgbWF0Y2htYXJrKGNvbGl0ZW0sIG1hdGNoZXhwcik6
CisgICAgICAgICAgICAgICAgICAgIGRlc2VsZWN0ZWQuYXBwZW5kKGNvbGl0ZW0pCisgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICByZW1haW5pbmcuYXBwZW5kKGNvbGl0
ZW0pCisKKyAgICBpZiBkZXNlbGVjdGVkOgorICAgICAgICBjb25maWcuaG9vay5weXRlc3RfZGVz
ZWxlY3RlZChpdGVtcz1kZXNlbGVjdGVkKQorICAgICAgICBpdGVtc1s6XSA9IHJlbWFpbmluZwor
CisKK2NsYXNzIE1hcmtNYXBwaW5nOgorICAgICIiIlByb3ZpZGVzIGEgbG9jYWwgbWFwcGluZyBm
b3IgbWFya2VycyB3aGVyZSBpdGVtIGFjY2VzcworICAgIHJlc29sdmVzIHRvIFRydWUgaWYgdGhl
IG1hcmtlciBpcyBwcmVzZW50LiAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwga2V5d29yZHMp
OgorICAgICAgICBteW1hcmtzID0gc2V0KCkKKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4ga2V5
d29yZHMuaXRlbXMoKToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIE1hcmtJbmZv
KSBvciBpc2luc3RhbmNlKHZhbHVlLCBNYXJrRGVjb3JhdG9yKToKKyAgICAgICAgICAgICAgICBt
eW1hcmtzLmFkZChrZXkpCisgICAgICAgIHNlbGYuX215bWFya3MgPSBteW1hcmtzCisKKyAgICBk
ZWYgX19nZXRpdGVtX18oc2VsZiwgbmFtZSk6CisgICAgICAgIHJldHVybiBuYW1lIGluIHNlbGYu
X215bWFya3MKKworCitjbGFzcyBLZXl3b3JkTWFwcGluZzoKKyAgICAiIiJQcm92aWRlcyBhIGxv
Y2FsIG1hcHBpbmcgZm9yIGtleXdvcmRzLgorICAgIEdpdmVuIGEgbGlzdCBvZiBuYW1lcywgbWFw
IGFueSBzdWJzdHJpbmcgb2Ygb25lIG9mIHRoZXNlIG5hbWVzIHRvIFRydWUuCisgICAgIiIiCisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWVzKToKKyAgICAgICAgc2VsZi5fbmFtZXMgPSBuYW1l
cworCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIHN1Ym5hbWUpOgorICAgICAgICBmb3IgbmFt
ZSBpbiBzZWxmLl9uYW1lczoKKyAgICAgICAgICAgIGlmIHN1Ym5hbWUgaW4gbmFtZToKKyAgICAg
ICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworCitkZWYgbWF0
Y2htYXJrKGNvbGl0ZW0sIG1hcmtleHByKToKKyAgICAiIiJUcmllcyB0byBtYXRjaCBvbiBhbnkg
bWFya2VyIG5hbWVzLCBhdHRhY2hlZCB0byB0aGUgZ2l2ZW4gY29saXRlbS4iIiIKKyAgICByZXR1
cm4gZXZhbChtYXJrZXhwciwge30sIE1hcmtNYXBwaW5nKGNvbGl0ZW0ua2V5d29yZHMpKQorCisK
K2RlZiBtYXRjaGtleXdvcmQoY29saXRlbSwga2V5d29yZGV4cHIpOgorICAgICIiIlRyaWVzIHRv
IG1hdGNoIGdpdmVuIGtleXdvcmQgZXhwcmVzc2lvbiB0byBnaXZlbiBjb2xsZWN0b3IgaXRlbS4K
KworICAgIFdpbGwgbWF0Y2ggb24gdGhlIG5hbWUgb2YgY29saXRlbSwgaW5jbHVkaW5nIHRoZSBu
YW1lcyBvZiBpdHMgcGFyZW50cy4KKyAgICBPbmx5IG1hdGNoZXMgbmFtZXMgb2YgaXRlbXMgd2hp
Y2ggYXJlIGVpdGhlciBhIDpjbGFzczpgQ2xhc3NgIG9yIGEKKyAgICA6Y2xhc3M6YEZ1bmN0aW9u
YC4KKyAgICBBZGRpdGlvbmFsbHksIG1hdGNoZXMgb24gbmFtZXMgaW4gdGhlICdleHRyYV9rZXl3
b3JkX21hdGNoZXMnIHNldCBvZgorICAgIGFueSBpdGVtLCBhcyB3ZWxsIGFzIG5hbWVzIGRpcmVj
dGx5IGFzc2lnbmVkIHRvIHRlc3QgZnVuY3Rpb25zLgorICAgICIiIgorICAgIG1hcHBlZF9uYW1l
cyA9IHNldCgpCisKKyAgICAjIEFkZCB0aGUgbmFtZXMgb2YgdGhlIGN1cnJlbnQgaXRlbSBhbmQg
YW55IHBhcmVudCBpdGVtcworICAgIGltcG9ydCBweXRlc3QKKyAgICBmb3IgaXRlbSBpbiBjb2xp
dGVtLmxpc3RjaGFpbigpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShpdGVtLCBweXRlc3Qu
SW5zdGFuY2UpOgorICAgICAgICAgICAgbWFwcGVkX25hbWVzLmFkZChpdGVtLm5hbWUpCisKKyAg
ICAjIEFkZCB0aGUgbmFtZXMgYWRkZWQgYXMgZXh0cmEga2V5d29yZHMgdG8gY3VycmVudCBvciBw
YXJlbnQgaXRlbXMKKyAgICBmb3IgbmFtZSBpbiBjb2xpdGVtLmxpc3RleHRyYWtleXdvcmRzKCk6
CisgICAgICAgIG1hcHBlZF9uYW1lcy5hZGQobmFtZSkKKworICAgICMgQWRkIHRoZSBuYW1lcyBh
dHRhY2hlZCB0byB0aGUgY3VycmVudCBmdW5jdGlvbiB0aHJvdWdoIGRpcmVjdCBhc3NpZ25tZW50
CisgICAgaWYgaGFzYXR0cihjb2xpdGVtLCAnZnVuY3Rpb24nKToKKyAgICAgICAgZm9yIG5hbWUg
aW4gY29saXRlbS5mdW5jdGlvbi5fX2RpY3RfXzoKKyAgICAgICAgICAgIG1hcHBlZF9uYW1lcy5h
ZGQobmFtZSkKKworICAgIG1hcHBpbmcgPSBLZXl3b3JkTWFwcGluZyhtYXBwZWRfbmFtZXMpCisg
ICAgaWYgIiAiIG5vdCBpbiBrZXl3b3JkZXhwcjoKKyAgICAgICAgIyBzcGVjaWFsIGNhc2UgdG8g
YWxsb3cgZm9yIHNpbXBsZSAiLWsgcGFzcyIgYW5kICItayAxLjMiCisgICAgICAgIHJldHVybiBt
YXBwaW5nW2tleXdvcmRleHByXQorICAgIGVsaWYga2V5d29yZGV4cHIuc3RhcnRzd2l0aCgibm90
ICIpIGFuZCAiICIgbm90IGluIGtleXdvcmRleHByWzQ6XToKKyAgICAgICAgcmV0dXJuIG5vdCBt
YXBwaW5nW2tleXdvcmRleHByWzQ6XV0KKyAgICByZXR1cm4gZXZhbChrZXl3b3JkZXhwciwge30s
IG1hcHBpbmcpCisKKworZGVmIHB5dGVzdF9jb25maWd1cmUoY29uZmlnKToKKyAgICBpbXBvcnQg
cHl0ZXN0CisgICAgaWYgY29uZmlnLm9wdGlvbi5zdHJpY3Q6CisgICAgICAgIHB5dGVzdC5tYXJr
Ll9jb25maWcgPSBjb25maWcKKworCitjbGFzcyBNYXJrR2VuZXJhdG9yOgorICAgICIiIiBGYWN0
b3J5IGZvciA6Y2xhc3M6YE1hcmtEZWNvcmF0b3JgIG9iamVjdHMgLSBleHBvc2VkIGFzCisgICAg
YSBgYHB5dGVzdC5tYXJrYGAgc2luZ2xldG9uIGluc3RhbmNlLiAgRXhhbXBsZTo6CisKKyAgICAg
ICAgIGltcG9ydCBweXRlc3QKKyAgICAgICAgIEBweXRlc3QubWFyay5zbG93dGVzdAorICAgICAg
ICAgZGVmIHRlc3RfZnVuY3Rpb24oKToKKyAgICAgICAgICAgIHBhc3MKKworICAgIHdpbGwgc2V0
IGEgJ3Nsb3d0ZXN0JyA6Y2xhc3M6YE1hcmtJbmZvYCBvYmplY3QKKyAgICBvbiB0aGUgYGB0ZXN0
X2Z1bmN0aW9uYGAgb2JqZWN0LiAiIiIKKworICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1l
KToKKyAgICAgICAgaWYgbmFtZVswXSA9PSAiXyI6CisgICAgICAgICAgICByYWlzZSBBdHRyaWJ1
dGVFcnJvcigiTWFya2VyIG5hbWUgbXVzdCBOT1Qgc3RhcnQgd2l0aCB1bmRlcnNjb3JlIikKKyAg
ICAgICAgaWYgaGFzYXR0cihzZWxmLCAnX2NvbmZpZycpOgorICAgICAgICAgICAgc2VsZi5fY2hl
Y2sobmFtZSkKKyAgICAgICAgcmV0dXJuIE1hcmtEZWNvcmF0b3IobmFtZSkKKworICAgIGRlZiBf
Y2hlY2soc2VsZiwgbmFtZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIG5hbWUgaW4g
c2VsZi5fbWFya2VyczoKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZXhjZXB0IEF0
dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLl9tYXJrZXJzID0g
bCA9IHNldCgpCisgICAgICAgIGZvciBsaW5lIGluIHNlbGYuX2NvbmZpZy5nZXRpbmkoIm1hcmtl
cnMiKToKKyAgICAgICAgICAgIGJlZ2lubmluZyA9IGxpbmUuc3BsaXQoIjoiLCAxKQorICAgICAg
ICAgICAgeCA9IGJlZ2lubmluZ1swXS5zcGxpdCgiKCIsIDEpWzBdCisgICAgICAgICAgICBsLmFk
ZCh4KQorICAgICAgICBpZiBuYW1lIG5vdCBpbiBzZWxmLl9tYXJrZXJzOgorICAgICAgICAgICAg
cmFpc2UgQXR0cmlidXRlRXJyb3IoIiVyIG5vdCBhIHJlZ2lzdGVyZWQgbWFya2VyIiAlIChuYW1l
LCkpCisKK2RlZiBpc3Rlc3RmdW5jKGZ1bmMpOgorICAgIHJldHVybiBoYXNhdHRyKGZ1bmMsICJf
X2NhbGxfXyIpIGFuZCBcCisgICAgICAgIGdldGF0dHIoZnVuYywgIl9fbmFtZV9fIiwgIjxsYW1i
ZGE+IikgIT0gIjxsYW1iZGE+IgorCitjbGFzcyBNYXJrRGVjb3JhdG9yOgorICAgICIiIiBBIGRl
Y29yYXRvciBmb3IgdGVzdCBmdW5jdGlvbnMgYW5kIHRlc3QgY2xhc3Nlcy4gIFdoZW4gYXBwbGll
ZAorICAgIGl0IHdpbGwgY3JlYXRlIDpjbGFzczpgTWFya0luZm9gIG9iamVjdHMgd2hpY2ggbWF5
IGJlCisgICAgOnJlZjpgcmV0cmlldmVkIGJ5IGhvb2tzIGFzIGl0ZW0ga2V5d29yZHMgPGV4Y29u
dHJvbHNraXA+YC4KKyAgICBNYXJrRGVjb3JhdG9yIGluc3RhbmNlcyBhcmUgb2Z0ZW4gY3JlYXRl
ZCBsaWtlIHRoaXM6OgorCisgICAgICAgIG1hcmsxID0gcHl0ZXN0Lm1hcmsuTkFNRSAgICAgICAg
ICAgICAgIyBzaW1wbGUgTWFya0RlY29yYXRvcgorICAgICAgICBtYXJrMiA9IHB5dGVzdC5tYXJr
Lk5BTUUobmFtZTE9dmFsdWUpICMgcGFyYW1ldHJpemVkIE1hcmtEZWNvcmF0b3IKKworICAgIGFu
ZCBjYW4gdGhlbiBiZSBhcHBsaWVkIGFzIGRlY29yYXRvcnMgdG8gdGVzdCBmdW5jdGlvbnM6Ogor
CisgICAgICAgIEBtYXJrMgorICAgICAgICBkZWYgdGVzdF9mdW5jdGlvbigpOgorICAgICAgICAg
ICAgcGFzcworCisgICAgV2hlbiBhIE1hcmtEZWNvcmF0b3IgaW5zdGFuY2UgaXMgY2FsbGVkIGl0
IGRvZXMgdGhlIGZvbGxvd2luZzoKKyAgICAgIDEuIElmIGNhbGxlZCB3aXRoIGEgc2luZ2xlIGNs
YXNzIGFzIGl0cyBvbmx5IHBvc2l0aW9uYWwgYXJndW1lbnQgYW5kIG5vCisgICAgICAgICBhZGRp
dGlvbmFsIGtleXdvcmQgYXJndW1lbnRzLCBpdCBhdHRhY2hlcyBpdHNlbGYgdG8gdGhlIGNsYXNz
IHNvIGl0CisgICAgICAgICBnZXRzIGFwcGxpZWQgYXV0b21hdGljYWxseSB0byBhbGwgdGVzdCBj
YXNlcyBmb3VuZCBpbiB0aGF0IGNsYXNzLgorICAgICAgMi4gSWYgY2FsbGVkIHdpdGggYSBzaW5n
bGUgZnVuY3Rpb24gYXMgaXRzIG9ubHkgcG9zaXRpb25hbCBhcmd1bWVudCBhbmQKKyAgICAgICAg
IG5vIGFkZGl0aW9uYWwga2V5d29yZCBhcmd1bWVudHMsIGl0IGF0dGFjaGVzIGEgTWFya0luZm8g
b2JqZWN0IHRvIHRoZQorICAgICAgICAgZnVuY3Rpb24sIGNvbnRhaW5pbmcgYWxsIHRoZSBhcmd1
bWVudHMgYWxyZWFkeSBzdG9yZWQgaW50ZXJuYWxseSBpbgorICAgICAgICAgdGhlIE1hcmtEZWNv
cmF0b3IuCisgICAgICAzLiBXaGVuIGNhbGxlZCBpbiBhbnkgb3RoZXIgY2FzZSwgaXQgcGVyZm9y
bXMgYSAnZmFrZSBjb25zdHJ1Y3Rpb24nIGNhbGwsCisgICAgICAgICBpLmUuIGl0IHJldHVybnMg
YSBuZXcgTWFya0RlY29yYXRvciBpbnN0YW5jZSB3aXRoIHRoZSBvcmlnaW5hbAorICAgICAgICAg
TWFya0RlY29yYXRvcidzIGNvbnRlbnQgdXBkYXRlZCB3aXRoIHRoZSBhcmd1bWVudHMgcGFzc2Vk
IHRvIHRoaXMKKyAgICAgICAgIGNhbGwuCisKKyAgICBOb3RlOiBUaGUgcnVsZXMgYWJvdmUgcHJl
dmVudCBNYXJrRGVjb3JhdG9yIG9iamVjdHMgZnJvbSBzdG9yaW5nIG9ubHkgYQorICAgIHNpbmds
ZSBmdW5jdGlvbiBvciBjbGFzcyByZWZlcmVuY2UgYXMgdGhlaXIgcG9zaXRpb25hbCBhcmd1bWVu
dCB3aXRoIG5vCisgICAgYWRkaXRpb25hbCBrZXl3b3JkIG9yIHBvc2l0aW9uYWwgYXJndW1lbnRz
LgorCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGFyZ3M9Tm9uZSwga3dh
cmdzPU5vbmUpOgorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgIHNlbGYuYXJncyA9
IGFyZ3Mgb3IgKCkKKyAgICAgICAgc2VsZi5rd2FyZ3MgPSBrd2FyZ3Mgb3Ige30KKworICAgIEBw
cm9wZXJ0eQorICAgIGRlZiBtYXJrbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubmFt
ZSAjIGZvciBiYWNrd2FyZC1jb21wYXQgKDIuNC4xIGhhZCB0aGlzIGF0dHIpCisKKyAgICBkZWYg
X19yZXByX18oc2VsZik6CisgICAgICAgIGQgPSBzZWxmLl9fZGljdF9fLmNvcHkoKQorICAgICAg
ICBuYW1lID0gZC5wb3AoJ25hbWUnKQorICAgICAgICByZXR1cm4gIjxNYXJrRGVjb3JhdG9yICVy
ICVyPiIgJSAobmFtZSwgZCkKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCAqYXJncywgKiprd2Fy
Z3MpOgorICAgICAgICAiIiIgaWYgcGFzc2VkIGEgc2luZ2xlIGNhbGxhYmxlIGFyZ3VtZW50OiBk
ZWNvcmF0ZSBpdCB3aXRoIG1hcmsgaW5mby4KKyAgICAgICAgICAgIG90aGVyd2lzZSBhZGQgKmFy
Z3MvKiprd2FyZ3MgaW4tcGxhY2UgdG8gbWFyayBpbmZvcm1hdGlvbi4gIiIiCisgICAgICAgIGlm
IGFyZ3MgYW5kIG5vdCBrd2FyZ3M6CisgICAgICAgICAgICBmdW5jID0gYXJnc1swXQorICAgICAg
ICAgICAgaXNfY2xhc3MgPSBpbnNwZWN0LmlzY2xhc3MoZnVuYykKKyAgICAgICAgICAgIGlmIGxl
bihhcmdzKSA9PSAxIGFuZCAoaXN0ZXN0ZnVuYyhmdW5jKSBvciBpc19jbGFzcyk6CisgICAgICAg
ICAgICAgICAgaWYgaXNfY2xhc3M6CisgICAgICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIoZnVu
YywgJ3B5dGVzdG1hcmsnKToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtfbGlzdCA9IGZ1
bmMucHl0ZXN0bWFyaworICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uo
bWFya19saXN0LCBsaXN0KToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrX2xpc3Qg
PSBbbWFya19saXN0XQorICAgICAgICAgICAgICAgICAgICAgICAgIyBhbHdheXMgd29yayBvbiBh
IGNvcHkgdG8gYXZvaWQgdXBkYXRpbmcgcHl0ZXN0bWFyaworICAgICAgICAgICAgICAgICAgICAg
ICAgIyBmcm9tIGEgc3VwZXJjbGFzcyBieSBhY2NpZGVudAorICAgICAgICAgICAgICAgICAgICAg
ICAgbWFya19saXN0ID0gbWFya19saXN0ICsgW3NlbGZdCisgICAgICAgICAgICAgICAgICAgICAg
ICBmdW5jLnB5dGVzdG1hcmsgPSBtYXJrX2xpc3QKKyAgICAgICAgICAgICAgICAgICAgZWxzZToK
KyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmMucHl0ZXN0bWFyayA9IFtzZWxmXQorICAgICAg
ICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGhvbGRlciA9IGdldGF0dHIoZnVu
Yywgc2VsZi5uYW1lLCBOb25lKQorICAgICAgICAgICAgICAgICAgICBpZiBob2xkZXIgaXMgTm9u
ZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGhvbGRlciA9IE1hcmtJbmZvKAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNlbGYubmFtZSwgc2VsZi5hcmdzLCBzZWxmLmt3YXJncworICAg
ICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICAgICAgICAgc2V0YXR0cihm
dW5jLCBzZWxmLm5hbWUsIGhvbGRlcikKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGhvbGRlci5hZGQoc2VsZi5hcmdzLCBzZWxmLmt3YXJncykKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZnVuYworICAgICAgICBrdyA9IHNlbGYua3dhcmdzLmNvcHko
KQorICAgICAgICBrdy51cGRhdGUoa3dhcmdzKQorICAgICAgICBhcmdzID0gc2VsZi5hcmdzICsg
YXJncworICAgICAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18oc2VsZi5uYW1lLCBhcmdzPWFyZ3Ms
IGt3YXJncz1rdykKKworCitjbGFzcyBNYXJrSW5mbzoKKyAgICAiIiIgTWFya2luZyBvYmplY3Qg
Y3JlYXRlZCBieSA6Y2xhc3M6YE1hcmtEZWNvcmF0b3JgIGluc3RhbmNlcy4gIiIiCisgICAgZGVm
IF9faW5pdF9fKHNlbGYsIG5hbWUsIGFyZ3MsIGt3YXJncyk6CisgICAgICAgICM6IG5hbWUgb2Yg
YXR0cmlidXRlCisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgIzogcG9zaXRpb25h
bCBhcmd1bWVudCBsaXN0LCBlbXB0eSBpZiBub25lIHNwZWNpZmllZAorICAgICAgICBzZWxmLmFy
Z3MgPSBhcmdzCisgICAgICAgICM6IGtleXdvcmQgYXJndW1lbnQgZGljdGlvbmFyeSwgZW1wdHkg
aWYgbm90aGluZyBzcGVjaWZpZWQKKyAgICAgICAgc2VsZi5rd2FyZ3MgPSBrd2FyZ3MuY29weSgp
CisgICAgICAgIHNlbGYuX2FyZ2xpc3QgPSBbKGFyZ3MsIGt3YXJncy5jb3B5KCkpXQorCisgICAg
ZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIjxNYXJrSW5mbyAlciBhcmdzPSVy
IGt3YXJncz0lcj4iICUgKAorICAgICAgICAgICAgc2VsZi5uYW1lLCBzZWxmLmFyZ3MsIHNlbGYu
a3dhcmdzCisgICAgICAgICkKKworICAgIGRlZiBhZGQoc2VsZiwgYXJncywga3dhcmdzKToKKyAg
ICAgICAgIiIiIGFkZCBhIE1hcmtJbmZvIHdpdGggdGhlIGdpdmVuIGFyZ3MgYW5kIGt3YXJncy4g
IiIiCisgICAgICAgIHNlbGYuX2FyZ2xpc3QuYXBwZW5kKChhcmdzLCBrd2FyZ3MpKQorICAgICAg
ICBzZWxmLmFyZ3MgKz0gYXJncworICAgICAgICBzZWxmLmt3YXJncy51cGRhdGUoa3dhcmdzKQor
CisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICAiIiIgeWllbGQgTWFya0luZm8gb2Jq
ZWN0cyBlYWNoIHJlbGF0aW5nIHRvIGEgbWFya2luZy1jYWxsLiAiIiIKKyAgICAgICAgZm9yIGFy
Z3MsIGt3YXJncyBpbiBzZWxmLl9hcmdsaXN0OgorICAgICAgICAgICAgeWllbGQgTWFya0luZm8o
c2VsZi5uYW1lLCBhcmdzLCBrd2FyZ3MpCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBv
cnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvbW9ua2V5cGF0Y2gucHkgYi9XZWJEcml2ZXJU
ZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvbW9ua2V5cGF0Y2gucHkKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmQ0YzE2OWQzN2E5Ci0tLSAvZGV2
L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0
ZXN0L21vbmtleXBhdGNoLnB5CkBAIC0wLDAgKzEsMjU0IEBACisiIiIgbW9ua2V5cGF0Y2hpbmcg
YW5kIG1vY2tpbmcgZnVuY3Rpb25hbGl0eS4gICIiIgorCitpbXBvcnQgb3MsIHN5cworaW1wb3J0
IHJlCisKK2Zyb20gcHkuYnVpbHRpbiBpbXBvcnQgX2Jhc2VzdHJpbmcKKworUkVfSU1QT1JUX0VS
Uk9SX05BTUUgPSByZS5jb21waWxlKCJeTm8gbW9kdWxlIG5hbWVkICguKikkIikKKworCitkZWYg
cHl0ZXN0X2Z1bmNhcmdfX21vbmtleXBhdGNoKHJlcXVlc3QpOgorICAgICIiIlRoZSByZXR1cm5l
ZCBgYG1vbmtleXBhdGNoYGAgZnVuY2FyZyBwcm92aWRlcyB0aGVzZQorICAgIGhlbHBlciBtZXRo
b2RzIHRvIG1vZGlmeSBvYmplY3RzLCBkaWN0aW9uYXJpZXMgb3Igb3MuZW52aXJvbjo6CisKKyAg
ICAgICAgbW9ua2V5cGF0Y2guc2V0YXR0cihvYmosIG5hbWUsIHZhbHVlLCByYWlzaW5nPVRydWUp
CisgICAgICAgIG1vbmtleXBhdGNoLmRlbGF0dHIob2JqLCBuYW1lLCByYWlzaW5nPVRydWUpCisg
ICAgICAgIG1vbmtleXBhdGNoLnNldGl0ZW0obWFwcGluZywgbmFtZSwgdmFsdWUpCisgICAgICAg
IG1vbmtleXBhdGNoLmRlbGl0ZW0ob2JqLCBuYW1lLCByYWlzaW5nPVRydWUpCisgICAgICAgIG1v
bmtleXBhdGNoLnNldGVudihuYW1lLCB2YWx1ZSwgcHJlcGVuZD1GYWxzZSkKKyAgICAgICAgbW9u
a2V5cGF0Y2guZGVsZW52KG5hbWUsIHZhbHVlLCByYWlzaW5nPVRydWUpCisgICAgICAgIG1vbmtl
eXBhdGNoLnN5c3BhdGhfcHJlcGVuZChwYXRoKQorICAgICAgICBtb25rZXlwYXRjaC5jaGRpcihw
YXRoKQorCisgICAgQWxsIG1vZGlmaWNhdGlvbnMgd2lsbCBiZSB1bmRvbmUgYWZ0ZXIgdGhlIHJl
cXVlc3RpbmcKKyAgICB0ZXN0IGZ1bmN0aW9uIGhhcyBmaW5pc2hlZC4gVGhlIGBgcmFpc2luZ2Bg
CisgICAgcGFyYW1ldGVyIGRldGVybWluZXMgaWYgYSBLZXlFcnJvciBvciBBdHRyaWJ1dGVFcnJv
cgorICAgIHdpbGwgYmUgcmFpc2VkIGlmIHRoZSBzZXQvZGVsZXRpb24gb3BlcmF0aW9uIGhhcyBu
byB0YXJnZXQuCisgICAgIiIiCisgICAgbXBhdGNoID0gbW9ua2V5cGF0Y2goKQorICAgIHJlcXVl
c3QuYWRkZmluYWxpemVyKG1wYXRjaC51bmRvKQorICAgIHJldHVybiBtcGF0Y2gKKworCitkZWYg
cmVzb2x2ZShuYW1lKToKKyAgICAjIHNpbXBsaWZpZWQgZnJvbSB6b3BlLmRvdHRlZG5hbWUKKyAg
ICBwYXJ0cyA9IG5hbWUuc3BsaXQoJy4nKQorCisgICAgdXNlZCA9IHBhcnRzLnBvcCgwKQorICAg
IGZvdW5kID0gX19pbXBvcnRfXyh1c2VkKQorICAgIGZvciBwYXJ0IGluIHBhcnRzOgorICAgICAg
ICB1c2VkICs9ICcuJyArIHBhcnQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm91bmQgPSBn
ZXRhdHRyKGZvdW5kLCBwYXJ0KQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAg
ICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAg
ICAjIHdlIHVzZSBleHBsaWNpdCB1bi1uZXN0aW5nIG9mIHRoZSBoYW5kbGluZyBibG9jayBpbiBv
cmRlcgorICAgICAgICAjIHRvIGF2b2lkIG5lc3RlZCBleGNlcHRpb25zIG9uIHB5dGhvbiAzCisg
ICAgICAgIHRyeToKKyAgICAgICAgICAgIF9faW1wb3J0X18odXNlZCkKKyAgICAgICAgZXhjZXB0
IEltcG9ydEVycm9yIGFzIGV4OgorICAgICAgICAgICAgIyBzdHIgaXMgdXNlZCBmb3IgcHkyIHZz
IHB5MworICAgICAgICAgICAgZXhwZWN0ZWQgPSBzdHIoZXgpLnNwbGl0KClbLTFdCisgICAgICAg
ICAgICBpZiBleHBlY3RlZCA9PSB1c2VkOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKAorICAgICAgICAg
ICAgICAgICAgICAnaW1wb3J0IGVycm9yIGluICVzOiAlcycgJSAodXNlZCwgZXgpCisgICAgICAg
ICAgICAgICAgKQorICAgICAgICBmb3VuZCA9IGFubm90YXRlZF9nZXRhdHRyKGZvdW5kLCBwYXJ0
LCB1c2VkKQorICAgIHJldHVybiBmb3VuZAorCisKK2RlZiBhbm5vdGF0ZWRfZ2V0YXR0cihvYmos
IG5hbWUsIGFubik6CisgICAgdHJ5OgorICAgICAgICBvYmogPSBnZXRhdHRyKG9iaiwgbmFtZSkK
KyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9y
KAorICAgICAgICAgICAgICAgICclciBvYmplY3QgYXQgJXMgaGFzIG5vIGF0dHJpYnV0ZSAlcicg
JSAoCisgICAgICAgICAgICAgICAgICAgIHR5cGUob2JqKS5fX25hbWVfXywgYW5uLCBuYW1lCisg
ICAgICAgICAgICAgICAgKQorICAgICAgICApCisgICAgcmV0dXJuIG9iagorCisKK2RlZiBkZXJp
dmVfaW1wb3J0cGF0aChpbXBvcnRfcGF0aCwgcmFpc2luZyk6CisgICAgaWYgbm90IGlzaW5zdGFu
Y2UoaW1wb3J0X3BhdGgsIF9iYXNlc3RyaW5nKSBvciAiLiIgbm90IGluIGltcG9ydF9wYXRoOgor
ICAgICAgICByYWlzZSBUeXBlRXJyb3IoIm11c3QgYmUgYWJzb2x1dGUgaW1wb3J0IHBhdGggc3Ry
aW5nLCBub3QgJXIiICUKKyAgICAgICAgICAgICAgICAgICAgICAgIChpbXBvcnRfcGF0aCwpKQor
ICAgIG1vZHVsZSwgYXR0ciA9IGltcG9ydF9wYXRoLnJzcGxpdCgnLicsIDEpCisgICAgdGFyZ2V0
ID0gcmVzb2x2ZShtb2R1bGUpCisgICAgaWYgcmFpc2luZzoKKyAgICAgICAgYW5ub3RhdGVkX2dl
dGF0dHIodGFyZ2V0LCBhdHRyLCBhbm49bW9kdWxlKQorICAgIHJldHVybiBhdHRyLCB0YXJnZXQK
KworCitjbGFzcyBOb3RzZXQ6CisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1
cm4gIjxub3RzZXQ+IgorCisKK25vdHNldCA9IE5vdHNldCgpCisKKworY2xhc3MgbW9ua2V5cGF0
Y2g6CisgICAgIiIiIE9iamVjdCBrZWVwaW5nIGEgcmVjb3JkIG9mIHNldGF0dHIvaXRlbS9lbnYv
c3lzcGF0aCBjaGFuZ2VzLiAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAg
c2VsZi5fc2V0YXR0ciA9IFtdCisgICAgICAgIHNlbGYuX3NldGl0ZW0gPSBbXQorICAgICAgICBz
ZWxmLl9jd2QgPSBOb25lCisgICAgICAgIHNlbGYuX3NhdmVzeXNwYXRoID0gTm9uZQorCisgICAg
ZGVmIHNldGF0dHIoc2VsZiwgdGFyZ2V0LCBuYW1lLCB2YWx1ZT1ub3RzZXQsIHJhaXNpbmc9VHJ1
ZSk6CisgICAgICAgICIiIiBTZXQgYXR0cmlidXRlIHZhbHVlIG9uIHRhcmdldCwgbWVtb3Jpemlu
ZyB0aGUgb2xkIHZhbHVlLgorICAgICAgICBCeSBkZWZhdWx0IHJhaXNlIEF0dHJpYnV0ZUVycm9y
IGlmIHRoZSBhdHRyaWJ1dGUgZGlkIG5vdCBleGlzdC4KKworICAgICAgICBGb3IgY29udmVuaWVu
Y2UgeW91IGNhbiBzcGVjaWZ5IGEgc3RyaW5nIGFzIGBgdGFyZ2V0YGAgd2hpY2gKKyAgICAgICAg
d2lsbCBiZSBpbnRlcnByZXRlZCBhcyBhIGRvdHRlZCBpbXBvcnQgcGF0aCwgd2l0aCB0aGUgbGFz
dCBwYXJ0CisgICAgICAgIGJlaW5nIHRoZSBhdHRyaWJ1dGUgbmFtZS4gIEV4YW1wbGU6CisgICAg
ICAgIGBgbW9ua2V5cGF0Y2guc2V0YXR0cigib3MuZ2V0Y3dkIiwgbGFtYmRhIHg6ICIvIilgYAor
ICAgICAgICB3b3VsZCBzZXQgdGhlIGBgZ2V0Y3dkYGAgZnVuY3Rpb24gb2YgdGhlIGBgb3NgYCBt
b2R1bGUuCisKKyAgICAgICAgVGhlIGBgcmFpc2luZ2BgIHZhbHVlIGRldGVybWluZXMgaWYgdGhl
IHNldGF0dHIgc2hvdWxkIGZhaWwKKyAgICAgICAgaWYgdGhlIGF0dHJpYnV0ZSBpcyBub3QgYWxy
ZWFkeSBwcmVzZW50IChkZWZhdWx0cyB0byBUcnVlCisgICAgICAgIHdoaWNoIG1lYW5zIGl0IHdp
bGwgcmFpc2UpLgorICAgICAgICAiIiIKKyAgICAgICAgX190cmFjZWJhY2toaWRlX18gPSBUcnVl
CisgICAgICAgIGltcG9ydCBpbnNwZWN0CisKKyAgICAgICAgaWYgdmFsdWUgaXMgbm90c2V0Ogor
ICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UodGFyZ2V0LCBfYmFzZXN0cmluZyk6CisgICAg
ICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJ1c2Ugc2V0YXR0cih0YXJnZXQsIG5hbWUsIHZh
bHVlKSBvciAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXRhdHRyKHRhcmdl
dCwgdmFsdWUpIHdpdGggdGFyZ2V0IGJlaW5nIGEgZG90dGVkICIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImltcG9ydCBzdHJpbmciKQorICAgICAgICAgICAgdmFsdWUgPSBuYW1l
CisgICAgICAgICAgICBuYW1lLCB0YXJnZXQgPSBkZXJpdmVfaW1wb3J0cGF0aCh0YXJnZXQsIHJh
aXNpbmcpCisKKyAgICAgICAgb2xkdmFsID0gZ2V0YXR0cih0YXJnZXQsIG5hbWUsIG5vdHNldCkK
KyAgICAgICAgaWYgcmFpc2luZyBhbmQgb2xkdmFsIGlzIG5vdHNldDoKKyAgICAgICAgICAgIHJh
aXNlIEF0dHJpYnV0ZUVycm9yKCIlciBoYXMgbm8gYXR0cmlidXRlICVyIiAlICh0YXJnZXQsIG5h
bWUpKQorCisgICAgICAgICMgYXZvaWQgY2xhc3MgZGVzY3JpcHRvcnMgbGlrZSBzdGF0aWNtZXRo
b2QvY2xhc3NtZXRob2QKKyAgICAgICAgaWYgaW5zcGVjdC5pc2NsYXNzKHRhcmdldCk6CisgICAg
ICAgICAgICBvbGR2YWwgPSB0YXJnZXQuX19kaWN0X18uZ2V0KG5hbWUsIG5vdHNldCkKKyAgICAg
ICAgc2VsZi5fc2V0YXR0ci5hcHBlbmQoKHRhcmdldCwgbmFtZSwgb2xkdmFsKSkKKyAgICAgICAg
c2V0YXR0cih0YXJnZXQsIG5hbWUsIHZhbHVlKQorCisgICAgZGVmIGRlbGF0dHIoc2VsZiwgdGFy
Z2V0LCBuYW1lPW5vdHNldCwgcmFpc2luZz1UcnVlKToKKyAgICAgICAgIiIiIERlbGV0ZSBhdHRy
aWJ1dGUgYGBuYW1lYGAgZnJvbSBgYHRhcmdldGBgLCBieSBkZWZhdWx0IHJhaXNlCisgICAgICAg
IEF0dHJpYnV0ZUVycm9yIGl0IHRoZSBhdHRyaWJ1dGUgZGlkIG5vdCBwcmV2aW91c2x5IGV4aXN0
LgorCisgICAgICAgIElmIG5vIGBgbmFtZWBgIGlzIHNwZWNpZmllZCBhbmQgYGB0YXJnZXRgYCBp
cyBhIHN0cmluZworICAgICAgICBpdCB3aWxsIGJlIGludGVycHJldGVkIGFzIGEgZG90dGVkIGlt
cG9ydCBwYXRoIHdpdGggdGhlCisgICAgICAgIGxhc3QgcGFydCBiZWluZyB0aGUgYXR0cmlidXRl
IG5hbWUuCisKKyAgICAgICAgSWYgYGByYWlzaW5nYGAgaXMgc2V0IHRvIEZhbHNlLCBubyBleGNl
cHRpb24gd2lsbCBiZSByYWlzZWQgaWYgdGhlCisgICAgICAgIGF0dHJpYnV0ZSBpcyBtaXNzaW5n
LgorICAgICAgICAiIiIKKyAgICAgICAgX190cmFjZWJhY2toaWRlX18gPSBUcnVlCisgICAgICAg
IGlmIG5hbWUgaXMgbm90c2V0OgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UodGFyZ2V0
LCBfYmFzZXN0cmluZyk6CisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJ1c2UgZGVs
YXR0cih0YXJnZXQsIG5hbWUpIG9yICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ImRlbGF0dHIodGFyZ2V0KSB3aXRoIHRhcmdldCBiZWluZyBhIGRvdHRlZCAiCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJpbXBvcnQgc3RyaW5nIikKKyAgICAgICAgICAgIG5hbWUs
IHRhcmdldCA9IGRlcml2ZV9pbXBvcnRwYXRoKHRhcmdldCwgcmFpc2luZykKKworICAgICAgICBp
ZiBub3QgaGFzYXR0cih0YXJnZXQsIG5hbWUpOgorICAgICAgICAgICAgaWYgcmFpc2luZzoKKyAg
ICAgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcihuYW1lKQorICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgc2VsZi5fc2V0YXR0ci5hcHBlbmQoKHRhcmdldCwgbmFtZSwgZ2V0YXR0cih0
YXJnZXQsIG5hbWUsIG5vdHNldCkpKQorICAgICAgICAgICAgZGVsYXR0cih0YXJnZXQsIG5hbWUp
CisKKyAgICBkZWYgc2V0aXRlbShzZWxmLCBkaWMsIG5hbWUsIHZhbHVlKToKKyAgICAgICAgIiIi
IFNldCBkaWN0aW9uYXJ5IGVudHJ5IGBgbmFtZWBgIHRvIHZhbHVlLiAiIiIKKyAgICAgICAgc2Vs
Zi5fc2V0aXRlbS5hcHBlbmQoKGRpYywgbmFtZSwgZGljLmdldChuYW1lLCBub3RzZXQpKSkKKyAg
ICAgICAgZGljW25hbWVdID0gdmFsdWUKKworICAgIGRlZiBkZWxpdGVtKHNlbGYsIGRpYywgbmFt
ZSwgcmFpc2luZz1UcnVlKToKKyAgICAgICAgIiIiIERlbGV0ZSBgYG5hbWVgYCBmcm9tIGRpY3Qu
IFJhaXNlIEtleUVycm9yIGlmIGl0IGRvZXNuJ3QgZXhpc3QuCisKKyAgICAgICAgSWYgYGByYWlz
aW5nYGAgaXMgc2V0IHRvIEZhbHNlLCBubyBleGNlcHRpb24gd2lsbCBiZSByYWlzZWQgaWYgdGhl
CisgICAgICAgIGtleSBpcyBtaXNzaW5nLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbmFtZSBu
b3QgaW4gZGljOgorICAgICAgICAgICAgaWYgcmFpc2luZzoKKyAgICAgICAgICAgICAgICByYWlz
ZSBLZXlFcnJvcihuYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fc2V0aXRl
bS5hcHBlbmQoKGRpYywgbmFtZSwgZGljLmdldChuYW1lLCBub3RzZXQpKSkKKyAgICAgICAgICAg
IGRlbCBkaWNbbmFtZV0KKworICAgIGRlZiBzZXRlbnYoc2VsZiwgbmFtZSwgdmFsdWUsIHByZXBl
bmQ9Tm9uZSk6CisgICAgICAgICIiIiBTZXQgZW52aXJvbm1lbnQgdmFyaWFibGUgYGBuYW1lYGAg
dG8gYGB2YWx1ZWBgLiAgSWYgYGBwcmVwZW5kYGAKKyAgICAgICAgaXMgYSBjaGFyYWN0ZXIsIHJl
YWQgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgdmFyaWFibGUgdmFsdWUKKyAgICAgICAgYW5kIHBy
ZXBlbmQgdGhlIGBgdmFsdWVgYCBhZGpvaW5lZCB3aXRoIHRoZSBgYHByZXBlbmRgYCBjaGFyYWN0
ZXIuIiIiCisgICAgICAgIHZhbHVlID0gc3RyKHZhbHVlKQorICAgICAgICBpZiBwcmVwZW5kIGFu
ZCBuYW1lIGluIG9zLmVudmlyb246CisgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlICsgcHJlcGVu
ZCArIG9zLmVudmlyb25bbmFtZV0KKyAgICAgICAgc2VsZi5zZXRpdGVtKG9zLmVudmlyb24sIG5h
bWUsIHZhbHVlKQorCisgICAgZGVmIGRlbGVudihzZWxmLCBuYW1lLCByYWlzaW5nPVRydWUpOgor
ICAgICAgICAiIiIgRGVsZXRlIGBgbmFtZWBgIGZyb20gdGhlIGVudmlyb25tZW50LiBSYWlzZSBL
ZXlFcnJvciBpdCBkb2VzIG5vdAorICAgICAgICBleGlzdC4KKworICAgICAgICBJZiBgYHJhaXNp
bmdgYCBpcyBzZXQgdG8gRmFsc2UsIG5vIGV4Y2VwdGlvbiB3aWxsIGJlIHJhaXNlZCBpZiB0aGUK
KyAgICAgICAgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbWlzc2luZy4KKyAgICAgICAgIiIiCisg
ICAgICAgIHNlbGYuZGVsaXRlbShvcy5lbnZpcm9uLCBuYW1lLCByYWlzaW5nPXJhaXNpbmcpCisK
KyAgICBkZWYgc3lzcGF0aF9wcmVwZW5kKHNlbGYsIHBhdGgpOgorICAgICAgICAiIiIgUHJlcGVu
ZCBgYHBhdGhgYCB0byBgYHN5cy5wYXRoYGAgbGlzdCBvZiBpbXBvcnQgbG9jYXRpb25zLiAiIiIK
KyAgICAgICAgaWYgc2VsZi5fc2F2ZXN5c3BhdGggaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYu
X3NhdmVzeXNwYXRoID0gc3lzLnBhdGhbOl0KKyAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIHN0
cihwYXRoKSkKKworICAgIGRlZiBjaGRpcihzZWxmLCBwYXRoKToKKyAgICAgICAgIiIiIENoYW5n
ZSB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSB0byB0aGUgc3BlY2lmaWVkIHBhdGguCisg
ICAgICAgIFBhdGggY2FuIGJlIGEgc3RyaW5nIG9yIGEgcHkucGF0aC5sb2NhbCBvYmplY3QuCisg
ICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9jd2QgaXMgTm9uZToKKyAgICAgICAgICAgIHNl
bGYuX2N3ZCA9IG9zLmdldGN3ZCgpCisgICAgICAgIGlmIGhhc2F0dHIocGF0aCwgImNoZGlyIik6
CisgICAgICAgICAgICBwYXRoLmNoZGlyKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9z
LmNoZGlyKHBhdGgpCisKKyAgICBkZWYgdW5kbyhzZWxmKToKKyAgICAgICAgIiIiIFVuZG8gcHJl
dmlvdXMgY2hhbmdlcy4gIFRoaXMgY2FsbCBjb25zdW1lcyB0aGUKKyAgICAgICAgdW5kbyBzdGFj
ay4gQ2FsbGluZyBpdCBhIHNlY29uZCB0aW1lIGhhcyBubyBlZmZlY3QgdW5sZXNzCisgICAgICAg
IHlvdSBkbyBtb3JlIG1vbmtleXBhdGNoaW5nIGFmdGVyIHRoZSB1bmRvIGNhbGwuCisgICAgICAg
IAorICAgICAgICBUaGVyZSBpcyBnZW5lcmFsbHkgbm8gbmVlZCB0byBjYWxsIGB1bmRvKClgLCBz
aW5jZSBpdCBpcworICAgICAgICBjYWxsZWQgYXV0b21hdGljYWxseSBkdXJpbmcgdGVhci1kb3du
LgorICAgICAgICAKKyAgICAgICAgTm90ZSB0aGF0IHRoZSBzYW1lIGBtb25rZXlwYXRjaGAgZml4
dHVyZSBpcyB1c2VkIGFjcm9zcyBhCisgICAgICAgIHNpbmdsZSB0ZXN0IGZ1bmN0aW9uIGludm9j
YXRpb24uIElmIGBtb25rZXlwYXRjaGAgaXMgdXNlZCBib3RoIGJ5CisgICAgICAgIHRoZSB0ZXN0
IGZ1bmN0aW9uIGl0c2VsZiBhbmQgb25lIG9mIHRoZSB0ZXN0IGZpeHR1cmVzLAorICAgICAgICBj
YWxsaW5nIGB1bmRvKClgIHdpbGwgdW5kbyBhbGwgb2YgdGhlIGNoYW5nZXMgbWFkZSBpbgorICAg
ICAgICBib3RoIGZ1bmN0aW9ucy4KKyAgICAgICAgIiIiCisgICAgICAgIGZvciBvYmosIG5hbWUs
IHZhbHVlIGluIHJldmVyc2VkKHNlbGYuX3NldGF0dHIpOgorICAgICAgICAgICAgaWYgdmFsdWUg
aXMgbm90IG5vdHNldDoKKyAgICAgICAgICAgICAgICBzZXRhdHRyKG9iaiwgbmFtZSwgdmFsdWUp
CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRlbGF0dHIob2JqLCBuYW1lKQor
ICAgICAgICBzZWxmLl9zZXRhdHRyWzpdID0gW10KKyAgICAgICAgZm9yIGRpY3Rpb25hcnksIG5h
bWUsIHZhbHVlIGluIHJldmVyc2VkKHNlbGYuX3NldGl0ZW0pOgorICAgICAgICAgICAgaWYgdmFs
dWUgaXMgbm90c2V0OgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAg
ZGVsIGRpY3Rpb25hcnlbbmFtZV0KKyAgICAgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6Cisg
ICAgICAgICAgICAgICAgICAgIHBhc3MgICMgd2FzIGFscmVhZHkgZGVsZXRlZCwgc28gd2UgaGF2
ZSB0aGUgZGVzaXJlZCBzdGF0ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBk
aWN0aW9uYXJ5W25hbWVdID0gdmFsdWUKKyAgICAgICAgc2VsZi5fc2V0aXRlbVs6XSA9IFtdCisg
ICAgICAgIGlmIHNlbGYuX3NhdmVzeXNwYXRoIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc3lz
LnBhdGhbOl0gPSBzZWxmLl9zYXZlc3lzcGF0aAorICAgICAgICAgICAgc2VsZi5fc2F2ZXN5c3Bh
dGggPSBOb25lCisKKyAgICAgICAgaWYgc2VsZi5fY3dkIGlzIG5vdCBOb25lOgorICAgICAgICAg
ICAgb3MuY2hkaXIoc2VsZi5fY3dkKQorICAgICAgICAgICAgc2VsZi5fY3dkID0gTm9uZQpkaWZm
IC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0
L25vc2UucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRl
c3Qvbm9zZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDM4NzQ2
ODY4NjAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9v
bHMvcHl0ZXN0L19weXRlc3Qvbm9zZS5weQpAQCAtMCwwICsxLDcxIEBACisiIiIgcnVuIHRlc3Qg
c3VpdGVzIHdyaXR0ZW4gZm9yIG5vc2UuICIiIgorCitpbXBvcnQgc3lzCisKK2ltcG9ydCBweQor
aW1wb3J0IHB5dGVzdAorZnJvbSBfcHl0ZXN0IGltcG9ydCB1bml0dGVzdAorCisKK2RlZiBnZXRf
c2tpcF9leGNlcHRpb25zKCk6CisgICAgc2tpcF9jbGFzc2VzID0gc2V0KCkKKyAgICBmb3IgbW9k
dWxlX25hbWUgaW4gKCd1bml0dGVzdCcsICd1bml0dGVzdDInLCAnbm9zZScpOgorICAgICAgICBt
b2QgPSBzeXMubW9kdWxlcy5nZXQobW9kdWxlX25hbWUpCisgICAgICAgIGlmIGhhc2F0dHIobW9k
LCAnU2tpcFRlc3QnKToKKyAgICAgICAgICAgIHNraXBfY2xhc3Nlcy5hZGQobW9kLlNraXBUZXN0
KQorICAgIHJldHVybiB0dXBsZShza2lwX2NsYXNzZXMpCisKKworZGVmIHB5dGVzdF9ydW50ZXN0
X21ha2VyZXBvcnQoaXRlbSwgY2FsbCk6CisgICAgaWYgY2FsbC5leGNpbmZvIGFuZCBjYWxsLmV4
Y2luZm8uZXJyaXNpbnN0YW5jZShnZXRfc2tpcF9leGNlcHRpb25zKCkpOgorICAgICAgICAjIGxl
dCdzIHN1YnN0aXR1dGUgdGhlIGV4Y2luZm8gd2l0aCBhIHB5dGVzdC5za2lwIG9uZQorICAgICAg
ICBjYWxsMiA9IGNhbGwuX19jbGFzc19fKGxhbWJkYToKKyAgICAgICAgICAgICAgICAgICAgcHl0
ZXN0LnNraXAoc3RyKGNhbGwuZXhjaW5mby52YWx1ZSkpLCBjYWxsLndoZW4pCisgICAgICAgIGNh
bGwuZXhjaW5mbyA9IGNhbGwyLmV4Y2luZm8KKworCitAcHl0ZXN0Lmhvb2tpbXBsKHRyeWxhc3Q9
VHJ1ZSkKK2RlZiBweXRlc3RfcnVudGVzdF9zZXR1cChpdGVtKToKKyAgICBpZiBpc19wb3RlbnRp
YWxfbm9zZXRlc3QoaXRlbSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoaXRlbS5wYXJlbnQsIHB5
dGVzdC5HZW5lcmF0b3IpOgorICAgICAgICAgICAgZ2VuID0gaXRlbS5wYXJlbnQKKyAgICAgICAg
ICAgIGlmIG5vdCBoYXNhdHRyKGdlbiwgJ19ub3NlZ2Vuc2V0dXAnKToKKyAgICAgICAgICAgICAg
ICBjYWxsX29wdGlvbmFsKGdlbi5vYmosICdzZXR1cCcpCisgICAgICAgICAgICAgICAgaWYgaXNp
bnN0YW5jZShnZW4ucGFyZW50LCBweXRlc3QuSW5zdGFuY2UpOgorICAgICAgICAgICAgICAgICAg
ICBjYWxsX29wdGlvbmFsKGdlbi5wYXJlbnQub2JqLCAnc2V0dXAnKQorICAgICAgICAgICAgICAg
IGdlbi5fbm9zZWdlbnNldHVwID0gVHJ1ZQorICAgICAgICBpZiBub3QgY2FsbF9vcHRpb25hbChp
dGVtLm9iaiwgJ3NldHVwJyk6CisgICAgICAgICAgICAjIGNhbGwgbW9kdWxlIGxldmVsIHNldHVw
IGlmIHRoZXJlIGlzIG5vIG9iamVjdCBsZXZlbCBvbmUKKyAgICAgICAgICAgIGNhbGxfb3B0aW9u
YWwoaXRlbS5wYXJlbnQub2JqLCAnc2V0dXAnKQorICAgICAgICAjWFhYIHRoaXMgaW1wbGllcyB3
ZSBvbmx5IGNhbGwgdGVhcmRvd24gd2hlbiBzZXR1cCB3b3JrZWQKKyAgICAgICAgaXRlbS5zZXNz
aW9uLl9zZXR1cHN0YXRlLmFkZGZpbmFsaXplcigobGFtYmRhOiB0ZWFyZG93bl9ub3NlKGl0ZW0p
KSwgaXRlbSkKKworZGVmIHRlYXJkb3duX25vc2UoaXRlbSk6CisgICAgaWYgaXNfcG90ZW50aWFs
X25vc2V0ZXN0KGl0ZW0pOgorICAgICAgICBpZiBub3QgY2FsbF9vcHRpb25hbChpdGVtLm9iaiwg
J3RlYXJkb3duJyk6CisgICAgICAgICAgICBjYWxsX29wdGlvbmFsKGl0ZW0ucGFyZW50Lm9iaiwg
J3RlYXJkb3duJykKKyAgICAgICAgI2lmIGhhc2F0dHIoaXRlbS5wYXJlbnQsICdfbm9zZWdlbnNl
dHVwJyk6CisgICAgICAgICMgICAgI2NhbGxfb3B0aW9uYWwoaXRlbS5fbm9zZWdlbnNldHVwLCAn
dGVhcmRvd24nKQorICAgICAgICAjICAgIGRlbCBpdGVtLnBhcmVudC5fbm9zZWdlbnNldHVwCisK
KworZGVmIHB5dGVzdF9tYWtlX2NvbGxlY3RfcmVwb3J0KGNvbGxlY3Rvcik6CisgICAgaWYgaXNp
bnN0YW5jZShjb2xsZWN0b3IsIHB5dGVzdC5HZW5lcmF0b3IpOgorICAgICAgICBjYWxsX29wdGlv
bmFsKGNvbGxlY3Rvci5vYmosICdzZXR1cCcpCisKKworZGVmIGlzX3BvdGVudGlhbF9ub3NldGVz
dChpdGVtKToKKyAgICAjIGV4dHJhIGNoZWNrIG5lZWRlZCBzaW5jZSB3ZSBkbyBub3QgZG8gbm9z
ZSBzdHlsZSBzZXR1cC90ZWFyZG93bgorICAgICMgb24gZGlyZWN0IHVuaXR0ZXN0IHN0eWxlIGNs
YXNzZXMKKyAgICByZXR1cm4gaXNpbnN0YW5jZShpdGVtLCBweXRlc3QuRnVuY3Rpb24pIGFuZCBc
CisgICAgICAgIG5vdCBpc2luc3RhbmNlKGl0ZW0sIHVuaXR0ZXN0LlRlc3RDYXNlRnVuY3Rpb24p
CisKKworZGVmIGNhbGxfb3B0aW9uYWwob2JqLCBuYW1lKToKKyAgICBtZXRob2QgPSBnZXRhdHRy
KG9iaiwgbmFtZSwgTm9uZSkKKyAgICBpc2ZpeHR1cmUgPSBoYXNhdHRyKG1ldGhvZCwgIl9weXRl
c3RmaXh0dXJlZnVuY3Rpb24iKQorICAgIGlmIG1ldGhvZCBpcyBub3QgTm9uZSBhbmQgbm90IGlz
Zml4dHVyZSBhbmQgcHkuYnVpbHRpbi5jYWxsYWJsZShtZXRob2QpOgorICAgICAgICAjIElmIHRo
ZXJlJ3MgYW55IHByb2JsZW1zIGFsbG93IHRoZSBleGNlcHRpb24gdG8gcmFpc2UgcmF0aGVyIHRo
YW4KKyAgICAgICAgIyBzaWxlbnRseSBpZ25vcmluZyB0aGVtCisgICAgICAgIG1ldGhvZCgpCisg
ICAgICAgIHJldHVybiBUcnVlCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93
M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvcGFzdGViaW4ucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBv
cnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvcGFzdGViaW4ucHkKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjRlYzYyZDAyMjgwCi0tLSAvZGV2L251bGwKKysrIGIv
V2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L3Bhc3RlYmlu
LnB5CkBAIC0wLDAgKzEsOTIgQEAKKyIiIiBzdWJtaXQgZmFpbHVyZSBvciB0ZXN0IHNlc3Npb24g
aW5mb3JtYXRpb24gdG8gYSBwYXN0ZWJpbiBzZXJ2aWNlLiAiIiIKK2ltcG9ydCBweXRlc3QKK2lt
cG9ydCBzeXMKK2ltcG9ydCB0ZW1wZmlsZQorCisKK2RlZiBweXRlc3RfYWRkb3B0aW9uKHBhcnNl
cik6CisgICAgZ3JvdXAgPSBwYXJzZXIuZ2V0Z3JvdXAoInRlcm1pbmFsIHJlcG9ydGluZyIpCisg
ICAgZ3JvdXAuX2FkZG9wdGlvbignLS1wYXN0ZWJpbicsIG1ldGF2YXI9Im1vZGUiLAorICAgICAg
ICBhY3Rpb249J3N0b3JlJywgZGVzdD0icGFzdGViaW4iLCBkZWZhdWx0PU5vbmUsCisgICAgICAg
IGNob2ljZXM9WydmYWlsZWQnLCAnYWxsJ10sCisgICAgICAgIGhlbHA9InNlbmQgZmFpbGVkfGFs
bCBpbmZvIHRvIGJwYXN0ZS5uZXQgcGFzdGViaW4gc2VydmljZS4iKQorCitAcHl0ZXN0Lmhvb2tp
bXBsKHRyeWxhc3Q9VHJ1ZSkKK2RlZiBweXRlc3RfY29uZmlndXJlKGNvbmZpZyk6CisgICAgaW1w
b3J0IHB5CisgICAgaWYgY29uZmlnLm9wdGlvbi5wYXN0ZWJpbiA9PSAiYWxsIjoKKyAgICAgICAg
dHIgPSBjb25maWcucGx1Z2lubWFuYWdlci5nZXRwbHVnaW4oJ3Rlcm1pbmFscmVwb3J0ZXInKQor
ICAgICAgICAjIGlmIG5vIHRlcm1pbmFsIHJlcG9ydGVyIHBsdWdpbiBpcyBwcmVzZW50LCBub3Ro
aW5nIHdlIGNhbiBkbyBoZXJlOworICAgICAgICAjIHRoaXMgY2FuIGhhcHBlbiB3aGVuIHRoaXMg
ZnVuY3Rpb24gZXhlY3V0ZXMgaW4gYSBzbGF2ZSBub2RlCisgICAgICAgICMgd2hlbiB1c2luZyBw
eXRlc3QteGRpc3QsIGZvciBleGFtcGxlCisgICAgICAgIGlmIHRyIGlzIG5vdCBOb25lOgorICAg
ICAgICAgICAgIyBwYXN0ZWJpbiBmaWxlIHdpbGwgYmUgdXRmLTggZW5jb2RlZCBiaW5hcnkgZmls
ZQorICAgICAgICAgICAgY29uZmlnLl9wYXN0ZWJpbmZpbGUgPSB0ZW1wZmlsZS5UZW1wb3JhcnlG
aWxlKCd3K2InKQorICAgICAgICAgICAgb2xkd3JpdGUgPSB0ci5fdHcud3JpdGUKKyAgICAgICAg
ICAgIGRlZiB0ZWVfd3JpdGUocywgKiprd2FyZ3MpOgorICAgICAgICAgICAgICAgIG9sZHdyaXRl
KHMsICoqa3dhcmdzKQorICAgICAgICAgICAgICAgIGlmIHB5LmJ1aWx0aW4uX2lzdGV4dChzKToK
KyAgICAgICAgICAgICAgICAgICAgcyA9IHMuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgICAgICAg
ICAgY29uZmlnLl9wYXN0ZWJpbmZpbGUud3JpdGUocykKKyAgICAgICAgICAgIHRyLl90dy53cml0
ZSA9IHRlZV93cml0ZQorCitkZWYgcHl0ZXN0X3VuY29uZmlndXJlKGNvbmZpZyk6CisgICAgaWYg
aGFzYXR0cihjb25maWcsICdfcGFzdGViaW5maWxlJyk6CisgICAgICAgICMgZ2V0IHRlcm1pbmFs
IGNvbnRlbnRzIGFuZCBkZWxldGUgZmlsZQorICAgICAgICBjb25maWcuX3Bhc3RlYmluZmlsZS5z
ZWVrKDApCisgICAgICAgIHNlc3Npb25sb2cgPSBjb25maWcuX3Bhc3RlYmluZmlsZS5yZWFkKCkK
KyAgICAgICAgY29uZmlnLl9wYXN0ZWJpbmZpbGUuY2xvc2UoKQorICAgICAgICBkZWwgY29uZmln
Ll9wYXN0ZWJpbmZpbGUKKyAgICAgICAgIyB1bmRvIG91ciBwYXRjaGluZyBpbiB0aGUgdGVybWlu
YWwgcmVwb3J0ZXIKKyAgICAgICAgdHIgPSBjb25maWcucGx1Z2lubWFuYWdlci5nZXRwbHVnaW4o
J3Rlcm1pbmFscmVwb3J0ZXInKQorICAgICAgICBkZWwgdHIuX3R3Ll9fZGljdF9fWyd3cml0ZSdd
CisgICAgICAgICMgd3JpdGUgc3VtbWFyeQorICAgICAgICB0ci53cml0ZV9zZXAoIj0iLCAiU2Vu
ZGluZyBpbmZvcm1hdGlvbiB0byBQYXN0ZSBTZXJ2aWNlIikKKyAgICAgICAgcGFzdGViaW51cmwg
PSBjcmVhdGVfbmV3X3Bhc3RlKHNlc3Npb25sb2cpCisgICAgICAgIHRyLndyaXRlX2xpbmUoInBh
c3RlYmluIHNlc3Npb24tbG9nOiAlc1xuIiAlIHBhc3RlYmludXJsKQorCitkZWYgY3JlYXRlX25l
d19wYXN0ZShjb250ZW50cyk6CisgICAgIiIiCisgICAgQ3JlYXRlcyBhIG5ldyBwYXN0ZSB1c2lu
ZyBicGFzdGUubmV0IHNlcnZpY2UuCisKKyAgICA6Y29udGVudHM6IHBhc3RlIGNvbnRlbnRzIGFz
IHV0Zi04IGVuY29kZWQgYnl0ZXMKKyAgICA6cmV0dXJuczogdXJsIHRvIHRoZSBwYXN0ZWQgY29u
dGVudHMKKyAgICAiIiIKKyAgICBpbXBvcnQgcmUKKyAgICBpZiBzeXMudmVyc2lvbl9pbmZvIDwg
KDMsIDApOgorICAgICAgICBmcm9tIHVybGxpYiBpbXBvcnQgdXJsb3BlbiwgdXJsZW5jb2RlCisg
ICAgZWxzZToKKyAgICAgICAgZnJvbSB1cmxsaWIucmVxdWVzdCBpbXBvcnQgdXJsb3BlbgorICAg
ICAgICBmcm9tIHVybGxpYi5wYXJzZSBpbXBvcnQgdXJsZW5jb2RlCisKKyAgICBwYXJhbXMgPSB7
CisgICAgICAgICdjb2RlJzogY29udGVudHMsCisgICAgICAgICdsZXhlcic6ICdweXRob24zJyBp
ZiBzeXMudmVyc2lvbl9pbmZvWzBdID09IDMgZWxzZSAncHl0aG9uJywKKyAgICAgICAgJ2V4cGly
eSc6ICcxd2VlaycsCisgICAgfQorICAgIHVybCA9ICdodHRwczovL2JwYXN0ZS5uZXQnCisgICAg
cmVzcG9uc2UgPSB1cmxvcGVuKHVybCwgZGF0YT11cmxlbmNvZGUocGFyYW1zKS5lbmNvZGUoJ2Fz
Y2lpJykpLnJlYWQoKQorICAgIG0gPSByZS5zZWFyY2gocidocmVmPSIvcmF3LyhcdyspIicsIHJl
c3BvbnNlLmRlY29kZSgndXRmLTgnKSkKKyAgICBpZiBtOgorICAgICAgICByZXR1cm4gJyVzL3No
b3cvJXMnICUgKHVybCwgbS5ncm91cCgxKSkKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gJ2Jh
ZCByZXNwb25zZTogJyArIHJlc3BvbnNlCisKK2RlZiBweXRlc3RfdGVybWluYWxfc3VtbWFyeSh0
ZXJtaW5hbHJlcG9ydGVyKToKKyAgICBpbXBvcnQgX3B5dGVzdC5jb25maWcKKyAgICBpZiB0ZXJt
aW5hbHJlcG9ydGVyLmNvbmZpZy5vcHRpb24ucGFzdGViaW4gIT0gImZhaWxlZCI6CisgICAgICAg
IHJldHVybgorICAgIHRyID0gdGVybWluYWxyZXBvcnRlcgorICAgIGlmICdmYWlsZWQnIGluIHRy
LnN0YXRzOgorICAgICAgICB0ZXJtaW5hbHJlcG9ydGVyLndyaXRlX3NlcCgiPSIsICJTZW5kaW5n
IGluZm9ybWF0aW9uIHRvIFBhc3RlIFNlcnZpY2UiKQorICAgICAgICBmb3IgcmVwIGluIHRlcm1p
bmFscmVwb3J0ZXIuc3RhdHMuZ2V0KCdmYWlsZWQnKToKKyAgICAgICAgICAgIHRyeToKKyAgICAg
ICAgICAgICAgICBtc2cgPSByZXAubG9uZ3JlcHIucmVwcnRyYWNlYmFjay5yZXByZW50cmllc1st
MV0ucmVwcmZpbGVsb2MKKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAg
ICAgICAgICAgICBtc2cgPSB0ci5fZ2V0ZmFpbHVyZWhlYWRsaW5lKHJlcCkKKyAgICAgICAgICAg
IHR3ID0gX3B5dGVzdC5jb25maWcuY3JlYXRlX3Rlcm1pbmFsX3dyaXRlcih0ZXJtaW5hbHJlcG9y
dGVyLmNvbmZpZywgc3RyaW5naW89VHJ1ZSkKKyAgICAgICAgICAgIHJlcC50b3Rlcm1pbmFsKHR3
KQorICAgICAgICAgICAgcyA9IHR3LnN0cmluZ2lvLmdldHZhbHVlKCkKKyAgICAgICAgICAgIGFz
c2VydCBsZW4ocykKKyAgICAgICAgICAgIHBhc3RlYmludXJsID0gY3JlYXRlX25ld19wYXN0ZShz
KQorICAgICAgICAgICAgdHIud3JpdGVfbGluZSgiJXMgLS0+ICVzIiAlKG1zZywgcGFzdGViaW51
cmwpKQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVz
dC9fcHl0ZXN0L3BkYi5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRl
c3QvX3B5dGVzdC9wZGIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
Ljg0YzkyMGQxNzJjCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQv
dzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L3BkYi5weQpAQCAtMCwwICsxLDEwOSBAQAorIiIiIGlu
dGVyYWN0aXZlIGRlYnVnZ2luZyB3aXRoIFBEQiwgdGhlIFB5dGhvbiBEZWJ1Z2dlci4gIiIiCitm
cm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoraW1wb3J0IHBkYgoraW1wb3J0
IHN5cworCitpbXBvcnQgcHl0ZXN0CisKKworZGVmIHB5dGVzdF9hZGRvcHRpb24ocGFyc2VyKToK
KyAgICBncm91cCA9IHBhcnNlci5nZXRncm91cCgiZ2VuZXJhbCIpCisgICAgZ3JvdXAuX2FkZG9w
dGlvbignLS1wZGInLAorICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0i
dXNlcGRiIiwgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgIGhlbHA9InN0YXJ0IHRoZSBp
bnRlcmFjdGl2ZSBQeXRob24gZGVidWdnZXIgb24gZXJyb3JzLiIpCisKK2RlZiBweXRlc3RfbmFt
ZXNwYWNlKCk6CisgICAgcmV0dXJuIHsnc2V0X3RyYWNlJzogcHl0ZXN0UERCKCkuc2V0X3RyYWNl
fQorCitkZWYgcHl0ZXN0X2NvbmZpZ3VyZShjb25maWcpOgorICAgIGlmIGNvbmZpZy5nZXR2YWx1
ZSgidXNlcGRiIik6CisgICAgICAgIGNvbmZpZy5wbHVnaW5tYW5hZ2VyLnJlZ2lzdGVyKFBkYklu
dm9rZSgpLCAncGRiaW52b2tlJykKKworICAgIG9sZCA9IChwZGIuc2V0X3RyYWNlLCBweXRlc3RQ
REIuX3BsdWdpbm1hbmFnZXIpCisgICAgZGVmIGZpbigpOgorICAgICAgICBwZGIuc2V0X3RyYWNl
LCBweXRlc3RQREIuX3BsdWdpbm1hbmFnZXIgPSBvbGQKKyAgICAgICAgcHl0ZXN0UERCLl9jb25m
aWcgPSBOb25lCisgICAgcGRiLnNldF90cmFjZSA9IHB5dGVzdC5zZXRfdHJhY2UKKyAgICBweXRl
c3RQREIuX3BsdWdpbm1hbmFnZXIgPSBjb25maWcucGx1Z2lubWFuYWdlcgorICAgIHB5dGVzdFBE
Qi5fY29uZmlnID0gY29uZmlnCisgICAgY29uZmlnLl9jbGVhbnVwLmFwcGVuZChmaW4pCisKK2Ns
YXNzIHB5dGVzdFBEQjoKKyAgICAiIiIgUHNldWRvIFBEQiB0aGF0IGRlZmVycyB0byB0aGUgcmVh
bCBwZGIuICIiIgorICAgIF9wbHVnaW5tYW5hZ2VyID0gTm9uZQorICAgIF9jb25maWcgPSBOb25l
CisKKyAgICBkZWYgc2V0X3RyYWNlKHNlbGYpOgorICAgICAgICAiIiIgaW52b2tlIFBEQiBzZXRf
dHJhY2UgZGVidWdnaW5nLCBkcm9wcGluZyBhbnkgSU8gY2FwdHVyaW5nLiAiIiIKKyAgICAgICAg
aW1wb3J0IF9weXRlc3QuY29uZmlnCisgICAgICAgIGZyYW1lID0gc3lzLl9nZXRmcmFtZSgpLmZf
YmFjaworICAgICAgICBpZiBzZWxmLl9wbHVnaW5tYW5hZ2VyIGlzIG5vdCBOb25lOgorICAgICAg
ICAgICAgY2FwbWFuID0gc2VsZi5fcGx1Z2lubWFuYWdlci5nZXRwbHVnaW4oImNhcHR1cmVtYW5h
Z2VyIikKKyAgICAgICAgICAgIGlmIGNhcG1hbjoKKyAgICAgICAgICAgICAgICBjYXBtYW4uc3Vz
cGVuZGNhcHR1cmUoaW5fPVRydWUpCisgICAgICAgICAgICB0dyA9IF9weXRlc3QuY29uZmlnLmNy
ZWF0ZV90ZXJtaW5hbF93cml0ZXIoc2VsZi5fY29uZmlnKQorICAgICAgICAgICAgdHcubGluZSgp
CisgICAgICAgICAgICB0dy5zZXAoIj4iLCAiUERCIHNldF90cmFjZSAoSU8tY2FwdHVyaW5nIHR1
cm5lZCBvZmYpIikKKyAgICAgICAgICAgIHNlbGYuX3BsdWdpbm1hbmFnZXIuaG9vay5weXRlc3Rf
ZW50ZXJfcGRiKGNvbmZpZz1zZWxmLl9jb25maWcpCisgICAgICAgIHBkYi5QZGIoKS5zZXRfdHJh
Y2UoZnJhbWUpCisKKworY2xhc3MgUGRiSW52b2tlOgorICAgIGRlZiBweXRlc3RfZXhjZXB0aW9u
X2ludGVyYWN0KHNlbGYsIG5vZGUsIGNhbGwsIHJlcG9ydCk6CisgICAgICAgIGNhcG1hbiA9IG5v
ZGUuY29uZmlnLnBsdWdpbm1hbmFnZXIuZ2V0cGx1Z2luKCJjYXB0dXJlbWFuYWdlciIpCisgICAg
ICAgIGlmIGNhcG1hbjoKKyAgICAgICAgICAgIG91dCwgZXJyID0gY2FwbWFuLnN1c3BlbmRjYXB0
dXJlKGluXz1UcnVlKQorICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZShvdXQpCisgICAgICAg
ICAgICBzeXMuc3Rkb3V0LndyaXRlKGVycikKKyAgICAgICAgX2VudGVyX3BkYihub2RlLCBjYWxs
LmV4Y2luZm8sIHJlcG9ydCkKKworICAgIGRlZiBweXRlc3RfaW50ZXJuYWxlcnJvcihzZWxmLCBl
eGNyZXByLCBleGNpbmZvKToKKyAgICAgICAgZm9yIGxpbmUgaW4gc3RyKGV4Y3JlcHIpLnNwbGl0
KCJcbiIpOgorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiSU5URVJOQUxFUlJPUj4gJXNc
biIgJWxpbmUpCisgICAgICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKKyAgICAgICAgdGIgPSBf
cG9zdG1vcnRlbV90cmFjZWJhY2soZXhjaW5mbykKKyAgICAgICAgcG9zdF9tb3J0ZW0odGIpCisK
KworZGVmIF9lbnRlcl9wZGIobm9kZSwgZXhjaW5mbywgcmVwKToKKyAgICAjIFhYWCB3ZSByZS11
c2UgdGhlIFRlcm1pbmFsUmVwb3J0ZXIncyB0ZXJtaW5hbHdyaXRlcgorICAgICMgYmVjYXVzZSB0
aGlzIHNlZW1zIHRvIGF2b2lkIHNvbWUgZW5jb2RpbmcgcmVsYXRlZCB0cm91YmxlcworICAgICMg
Zm9yIG5vdCBjb21wbGV0ZWx5IGNsZWFyIHJlYXNvbnMuCisgICAgdHcgPSBub2RlLmNvbmZpZy5w
bHVnaW5tYW5hZ2VyLmdldHBsdWdpbigidGVybWluYWxyZXBvcnRlciIpLl90dworICAgIHR3Lmxp
bmUoKQorICAgIHR3LnNlcCgiPiIsICJ0cmFjZWJhY2siKQorICAgIHJlcC50b3Rlcm1pbmFsKHR3
KQorICAgIHR3LnNlcCgiPiIsICJlbnRlcmluZyBQREIiKQorICAgIHRiID0gX3Bvc3Rtb3J0ZW1f
dHJhY2ViYWNrKGV4Y2luZm8pCisgICAgcG9zdF9tb3J0ZW0odGIpCisgICAgcmVwLl9wZGJzaG93
biA9IFRydWUKKyAgICByZXR1cm4gcmVwCisKKworZGVmIF9wb3N0bW9ydGVtX3RyYWNlYmFjayhl
eGNpbmZvKToKKyAgICAjIEEgZG9jdGVzdC5VbmV4cGVjdGVkRXhjZXB0aW9uIGlzIG5vdCB1c2Vm
dWwgZm9yIHBvc3RfbW9ydGVtLgorICAgICMgVXNlIHRoZSB1bmRlcmx5aW5nIGV4Y2VwdGlvbiBp
bnN0ZWFkOgorICAgIGZyb20gZG9jdGVzdCBpbXBvcnQgVW5leHBlY3RlZEV4Y2VwdGlvbgorICAg
IGlmIGlzaW5zdGFuY2UoZXhjaW5mby52YWx1ZSwgVW5leHBlY3RlZEV4Y2VwdGlvbik6CisgICAg
ICAgIHJldHVybiBleGNpbmZvLnZhbHVlLmV4Y19pbmZvWzJdCisgICAgZWxzZToKKyAgICAgICAg
cmV0dXJuIGV4Y2luZm8uX2V4Y2luZm9bMl0KKworCitkZWYgX2ZpbmRfbGFzdF9ub25faGlkZGVu
X2ZyYW1lKHN0YWNrKToKKyAgICBpID0gbWF4KDAsIGxlbihzdGFjaykgLSAxKQorICAgIHdoaWxl
IGkgYW5kIHN0YWNrW2ldWzBdLmZfbG9jYWxzLmdldCgiX190cmFjZWJhY2toaWRlX18iLCBGYWxz
ZSk6CisgICAgICAgIGkgLT0gMQorICAgIHJldHVybiBpCisKKworZGVmIHBvc3RfbW9ydGVtKHQp
OgorICAgIGNsYXNzIFBkYihwZGIuUGRiKToKKyAgICAgICAgZGVmIGdldF9zdGFjayhzZWxmLCBm
LCB0KToKKyAgICAgICAgICAgIHN0YWNrLCBpID0gcGRiLlBkYi5nZXRfc3RhY2soc2VsZiwgZiwg
dCkKKyAgICAgICAgICAgIGlmIGYgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBpID0gX2ZpbmRf
bGFzdF9ub25faGlkZGVuX2ZyYW1lKHN0YWNrKQorICAgICAgICAgICAgcmV0dXJuIHN0YWNrLCBp
CisgICAgcCA9IFBkYigpCisgICAgcC5yZXNldCgpCisgICAgcC5pbnRlcmFjdGlvbihOb25lLCB0
KQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9f
cHl0ZXN0L3B5dGVzdGVyLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5
dGVzdC9fcHl0ZXN0L3B5dGVzdGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi5mYWVkN2Y1ODFjOQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2lt
cG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9weXRlc3Rlci5weQpAQCAtMCwwICsxLDEx
MTAgQEAKKyIiIiAoZGlzYWJsZWQgYnkgZGVmYXVsdCkgc3VwcG9ydCBmb3IgdGVzdGluZyBweXRl
c3QgYW5kIHB5dGVzdCBwbHVnaW5zLiAiIiIKK2ltcG9ydCBjb2RlY3MKK2ltcG9ydCBnYworaW1w
b3J0IG9zCitpbXBvcnQgcGxhdGZvcm0KK2ltcG9ydCByZQoraW1wb3J0IHN1YnByb2Nlc3MKK2lt
cG9ydCBzeXMKK2ltcG9ydCB0aW1lCitpbXBvcnQgdHJhY2ViYWNrCitmcm9tIGZubWF0Y2ggaW1w
b3J0IGZubWF0Y2gKKworZnJvbSBweS5idWlsdGluIGltcG9ydCBwcmludF8KKworZnJvbSBfcHl0
ZXN0Ll9jb2RlIGltcG9ydCBTb3VyY2UKK2ltcG9ydCBweQoraW1wb3J0IHB5dGVzdAorZnJvbSBf
cHl0ZXN0Lm1haW4gaW1wb3J0IFNlc3Npb24sIEVYSVRfT0sKKworCitkZWYgcHl0ZXN0X2FkZG9w
dGlvbihwYXJzZXIpOgorICAgICMgZ3JvdXAgPSBwYXJzZXIuZ2V0Z3JvdXAoInB5dGVzdGVyIiwg
InB5dGVzdGVyIChzZWxmLXRlc3RzKSBvcHRpb25zIikKKyAgICBwYXJzZXIuYWRkb3B0aW9uKCct
LWxzb2YnLAorICAgICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJsc29mIiwgZGVm
YXVsdD1GYWxzZSwKKyAgICAgICAgICAgaGVscD0oInJ1biBGRCBjaGVja3MgaWYgbHNvZiBpcyBh
dmFpbGFibGUiKSkKKworICAgIHBhcnNlci5hZGRvcHRpb24oJy0tcnVucHl0ZXN0JywgZGVmYXVs
dD0iaW5wcm9jZXNzIiwgZGVzdD0icnVucHl0ZXN0IiwKKyAgICAgICAgICAgY2hvaWNlcz0oImlu
cHJvY2VzcyIsICJzdWJwcm9jZXNzIiwgKSwKKyAgICAgICAgICAgaGVscD0oInJ1biBweXRlc3Qg
c3ViIHJ1bnMgaW4gdGVzdHMgdXNpbmcgYW4gJ2lucHJvY2VzcycgIgorICAgICAgICAgICAgICAg
ICAib3IgJ3N1YnByb2Nlc3MnIChweXRob24gLW0gbWFpbikgbWV0aG9kIikpCisKKworZGVmIHB5
dGVzdF9jb25maWd1cmUoY29uZmlnKToKKyAgICAjIFRoaXMgbWlnaHQgYmUgY2FsbGVkIG11bHRp
cGxlIHRpbWVzLiBPbmx5IHRha2UgdGhlIGZpcnN0LgorICAgIGdsb2JhbCBfcHl0ZXN0X2Z1bGxw
YXRoCisgICAgdHJ5OgorICAgICAgICBfcHl0ZXN0X2Z1bGxwYXRoCisgICAgZXhjZXB0IE5hbWVF
cnJvcjoKKyAgICAgICAgX3B5dGVzdF9mdWxscGF0aCA9IG9zLnBhdGguYWJzcGF0aChweXRlc3Qu
X19maWxlX18ucnN0cmlwKCJvYyIpKQorICAgICAgICBfcHl0ZXN0X2Z1bGxwYXRoID0gX3B5dGVz
dF9mdWxscGF0aC5yZXBsYWNlKCIkcHkuY2xhc3MiLCAiLnB5IikKKworICAgIGlmIGNvbmZpZy5n
ZXR2YWx1ZSgibHNvZiIpOgorICAgICAgICBjaGVja2VyID0gTHNvZkZkTGVha0NoZWNrZXIoKQor
ICAgICAgICBpZiBjaGVja2VyLm1hdGNoaW5nX3BsYXRmb3JtKCk6CisgICAgICAgICAgICBjb25m
aWcucGx1Z2lubWFuYWdlci5yZWdpc3RlcihjaGVja2VyKQorCisKK2NsYXNzIExzb2ZGZExlYWtD
aGVja2VyKG9iamVjdCk6CisgICAgZGVmIGdldF9vcGVuX2ZpbGVzKHNlbGYpOgorICAgICAgICBv
dXQgPSBzZWxmLl9leGVjX2xzb2YoKQorICAgICAgICBvcGVuX2ZpbGVzID0gc2VsZi5fcGFyc2Vf
bHNvZl9vdXRwdXQob3V0KQorICAgICAgICByZXR1cm4gb3Blbl9maWxlcworCisgICAgZGVmIF9l
eGVjX2xzb2Yoc2VsZik6CisgICAgICAgIHBpZCA9IG9zLmdldHBpZCgpCisgICAgICAgIHJldHVy
biBweS5wcm9jZXNzLmNtZGV4ZWMoImxzb2YgLUZmbjAgLXAgJWQiICUgcGlkKQorCisgICAgZGVm
IF9wYXJzZV9sc29mX291dHB1dChzZWxmLCBvdXQpOgorICAgICAgICBkZWYgaXNvcGVuKGxpbmUp
OgorICAgICAgICAgICAgcmV0dXJuIGxpbmUuc3RhcnRzd2l0aCgnZicpIGFuZCAoImRlbGV0ZWQi
IG5vdCBpbiBsaW5lIGFuZAorICAgICAgICAgICAgICAgICdtZW0nIG5vdCBpbiBsaW5lIGFuZCAi
dHh0IiBub3QgaW4gbGluZSBhbmQgJ2N3ZCcgbm90IGluIGxpbmUpCisKKyAgICAgICAgb3Blbl9m
aWxlcyA9IFtdCisKKyAgICAgICAgZm9yIGxpbmUgaW4gb3V0LnNwbGl0KCJcbiIpOgorICAgICAg
ICAgICAgaWYgaXNvcGVuKGxpbmUpOgorICAgICAgICAgICAgICAgIGZpZWxkcyA9IGxpbmUuc3Bs
aXQoJ1wwJykKKyAgICAgICAgICAgICAgICBmZCA9IGZpZWxkc1swXVsxOl0KKyAgICAgICAgICAg
ICAgICBmaWxlbmFtZSA9IGZpZWxkc1sxXVsxOl0KKyAgICAgICAgICAgICAgICBpZiBmaWxlbmFt
ZS5zdGFydHN3aXRoKCcvJyk6CisgICAgICAgICAgICAgICAgICAgIG9wZW5fZmlsZXMuYXBwZW5k
KChmZCwgZmlsZW5hbWUpKQorCisgICAgICAgIHJldHVybiBvcGVuX2ZpbGVzCisKKyAgICBkZWYg
bWF0Y2hpbmdfcGxhdGZvcm0oc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHB5LnBy
b2Nlc3MuY21kZXhlYygibHNvZiAtdiIpCisgICAgICAgIGV4Y2VwdCAocHkucHJvY2Vzcy5jbWRl
eGVjLkVycm9yLCBVbmljb2RlRGVjb2RlRXJyb3IpOgorICAgICAgICAgICAgIyBjbWRleGVjIG1h
eSByYWlzZSBVbmljb2RlRGVjb2RlRXJyb3Igb24gV2luZG93cyBzeXN0ZW1zCisgICAgICAgICAg
ICAjIHdpdGggbG9jYWxlIG90aGVyIHRoYW4gZW5nbGlzaDoKKyAgICAgICAgICAgICMgaHR0cHM6
Ly9iaXRidWNrZXQub3JnL3B5dGVzdC1kZXYvcHkvaXNzdWVzLzY2CisgICAgICAgICAgICByZXR1
cm4gRmFsc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBA
cHl0ZXN0Lmhvb2tpbXBsKGhvb2t3cmFwcGVyPVRydWUsIHRyeWZpcnN0PVRydWUpCisgICAgZGVm
IHB5dGVzdF9ydW50ZXN0X2l0ZW0oc2VsZiwgaXRlbSk6CisgICAgICAgIGxpbmVzMSA9IHNlbGYu
Z2V0X29wZW5fZmlsZXMoKQorICAgICAgICB5aWVsZAorICAgICAgICBpZiBoYXNhdHRyKHN5cywg
InB5cHlfdmVyc2lvbl9pbmZvIik6CisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAg
bGluZXMyID0gc2VsZi5nZXRfb3Blbl9maWxlcygpCisKKyAgICAgICAgbmV3X2ZkcyA9IHNldChb
dFswXSBmb3IgdCBpbiBsaW5lczJdKSAtIHNldChbdFswXSBmb3IgdCBpbiBsaW5lczFdKQorICAg
ICAgICBsZWFrZWRfZmlsZXMgPSBbdCBmb3IgdCBpbiBsaW5lczIgaWYgdFswXSBpbiBuZXdfZmRz
XQorICAgICAgICBpZiBsZWFrZWRfZmlsZXM6CisgICAgICAgICAgICBlcnJvciA9IFtdCisgICAg
ICAgICAgICBlcnJvci5hcHBlbmQoIioqKioqICVzIEZEIGxlYWthZ2UgZGV0ZWN0ZWQiICUgbGVu
KGxlYWtlZF9maWxlcykpCisgICAgICAgICAgICBlcnJvci5leHRlbmQoW3N0cihmKSBmb3IgZiBp
biBsZWFrZWRfZmlsZXNdKQorICAgICAgICAgICAgZXJyb3IuYXBwZW5kKCIqKiogQmVmb3JlOiIp
CisgICAgICAgICAgICBlcnJvci5leHRlbmQoW3N0cihmKSBmb3IgZiBpbiBsaW5lczFdKQorICAg
ICAgICAgICAgZXJyb3IuYXBwZW5kKCIqKiogQWZ0ZXI6IikKKyAgICAgICAgICAgIGVycm9yLmV4
dGVuZChbc3RyKGYpIGZvciBmIGluIGxpbmVzMl0pCisgICAgICAgICAgICBlcnJvci5hcHBlbmQo
ZXJyb3JbMF0pCisgICAgICAgICAgICBlcnJvci5hcHBlbmQoIioqKiBmdW5jdGlvbiAlczolczog
JXMgIiAlIGl0ZW0ubG9jYXRpb24pCisgICAgICAgICAgICBweXRlc3QuZmFpbCgiXG4iLmpvaW4o
ZXJyb3IpLCBweXRyYWNlPUZhbHNlKQorCisKKyMgWFhYIGNvcGllZCBmcm9tIGV4ZWNuZXQncyBj
b25mdGVzdC5weSAtIG5lZWRzIHRvIGJlIG1lcmdlZAord2lucHltYXAgPSB7CisgICAgJ3B5dGhv
bjIuNyc6IHInQzpcUHl0aG9uMjdccHl0aG9uLmV4ZScsCisgICAgJ3B5dGhvbjIuNic6IHInQzpc
UHl0aG9uMjZccHl0aG9uLmV4ZScsCisgICAgJ3B5dGhvbjMuMSc6IHInQzpcUHl0aG9uMzFccHl0
aG9uLmV4ZScsCisgICAgJ3B5dGhvbjMuMic6IHInQzpcUHl0aG9uMzJccHl0aG9uLmV4ZScsCisg
ICAgJ3B5dGhvbjMuMyc6IHInQzpcUHl0aG9uMzNccHl0aG9uLmV4ZScsCisgICAgJ3B5dGhvbjMu
NCc6IHInQzpcUHl0aG9uMzRccHl0aG9uLmV4ZScsCisgICAgJ3B5dGhvbjMuNSc6IHInQzpcUHl0
aG9uMzVccHl0aG9uLmV4ZScsCit9CisKK2RlZiBnZXRleGVjdXRhYmxlKG5hbWUsIGNhY2hlPXt9
KToKKyAgICB0cnk6CisgICAgICAgIHJldHVybiBjYWNoZVtuYW1lXQorICAgIGV4Y2VwdCBLZXlF
cnJvcjoKKyAgICAgICAgZXhlY3V0YWJsZSA9IHB5LnBhdGgubG9jYWwuc3lzZmluZChuYW1lKQor
ICAgICAgICBpZiBleGVjdXRhYmxlOgorICAgICAgICAgICAgaWYgbmFtZSA9PSAianl0aG9uIjoK
KyAgICAgICAgICAgICAgICBpbXBvcnQgc3VicHJvY2VzcworICAgICAgICAgICAgICAgIHBvcGVu
ID0gc3VicHJvY2Vzcy5Qb3Blbihbc3RyKGV4ZWN1dGFibGUpLCAiLS12ZXJzaW9uIl0sCisgICAg
ICAgICAgICAgICAgICAgIHVuaXZlcnNhbF9uZXdsaW5lcz1UcnVlLCBzdGRlcnI9c3VicHJvY2Vz
cy5QSVBFKQorICAgICAgICAgICAgICAgIG91dCwgZXJyID0gcG9wZW4uY29tbXVuaWNhdGUoKQor
ICAgICAgICAgICAgICAgIGlmIG5vdCBlcnIgb3IgIjIuNSIgbm90IGluIGVycjoKKyAgICAgICAg
ICAgICAgICAgICAgZXhlY3V0YWJsZSA9IE5vbmUKKyAgICAgICAgICAgICAgICBpZiAiMi41LjIi
IGluIGVycjoKKyAgICAgICAgICAgICAgICAgICAgZXhlY3V0YWJsZSA9IE5vbmUgIyBodHRwOi8v
YnVncy5qeXRob24ub3JnL2lzc3VlMTc5MAorICAgICAgICBjYWNoZVtuYW1lXSA9IGV4ZWN1dGFi
bGUKKyAgICAgICAgcmV0dXJuIGV4ZWN1dGFibGUKKworQHB5dGVzdC5maXh0dXJlKHBhcmFtcz1b
J3B5dGhvbjIuNicsICdweXRob24yLjcnLCAncHl0aG9uMy4zJywgInB5dGhvbjMuNCIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAncHlweScsICdweXB5MyddKQorZGVmIGFueXB5dGhvbihyZXF1
ZXN0KToKKyAgICBuYW1lID0gcmVxdWVzdC5wYXJhbQorICAgIGV4ZWN1dGFibGUgPSBnZXRleGVj
dXRhYmxlKG5hbWUpCisgICAgaWYgZXhlY3V0YWJsZSBpcyBOb25lOgorICAgICAgICBpZiBzeXMu
cGxhdGZvcm0gPT0gIndpbjMyIjoKKyAgICAgICAgICAgIGV4ZWN1dGFibGUgPSB3aW5weW1hcC5n
ZXQobmFtZSwgTm9uZSkKKyAgICAgICAgICAgIGlmIGV4ZWN1dGFibGU6CisgICAgICAgICAgICAg
ICAgZXhlY3V0YWJsZSA9IHB5LnBhdGgubG9jYWwoZXhlY3V0YWJsZSkKKyAgICAgICAgICAgICAg
ICBpZiBleGVjdXRhYmxlLmNoZWNrKCk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBleGVj
dXRhYmxlCisgICAgICAgIHB5dGVzdC5za2lwKCJubyBzdWl0YWJsZSAlcyBmb3VuZCIgJSAobmFt
ZSwpKQorICAgIHJldHVybiBleGVjdXRhYmxlCisKKyMgdXNlZCBhdCBsZWFzdCBieSBweXRlc3Qt
eGRpc3QgcGx1Z2luCitAcHl0ZXN0LmZpeHR1cmUKK2RlZiBfcHl0ZXN0KHJlcXVlc3QpOgorICAg
ICIiIiBSZXR1cm4gYSBoZWxwZXIgd2hpY2ggb2ZmZXJzIGEgZ2V0aG9va3JlY29yZGVyKGhvb2sp
CisgICAgbWV0aG9kIHdoaWNoIHJldHVybnMgYSBIb29rUmVjb3JkZXIgaW5zdGFuY2Ugd2hpY2gg
aGVscHMKKyAgICB0byBtYWtlIGFzc2VydGlvbnMgYWJvdXQgY2FsbGVkIGhvb2tzLgorICAgICIi
IgorICAgIHJldHVybiBQeXRlc3RBcmcocmVxdWVzdCkKKworY2xhc3MgUHl0ZXN0QXJnOgorICAg
IGRlZiBfX2luaXRfXyhzZWxmLCByZXF1ZXN0KToKKyAgICAgICAgc2VsZi5yZXF1ZXN0ID0gcmVx
dWVzdAorCisgICAgZGVmIGdldGhvb2tyZWNvcmRlcihzZWxmLCBob29rKToKKyAgICAgICAgaG9v
a3JlY29yZGVyID0gSG9va1JlY29yZGVyKGhvb2suX3BtKQorICAgICAgICBzZWxmLnJlcXVlc3Qu
YWRkZmluYWxpemVyKGhvb2tyZWNvcmRlci5maW5pc2hfcmVjb3JkaW5nKQorICAgICAgICByZXR1
cm4gaG9va3JlY29yZGVyCisKKworZGVmIGdldF9wdWJsaWNfbmFtZXMobCk6CisgICAgIiIiT25s
eSByZXR1cm4gbmFtZXMgZnJvbSBpdGVyYXRvciBsIHdpdGhvdXQgYSBsZWFkaW5nIHVuZGVyc2Nv
cmUuIiIiCisgICAgcmV0dXJuIFt4IGZvciB4IGluIGwgaWYgeFswXSAhPSAiXyJdCisKKworY2xh
c3MgUGFyc2VkQ2FsbDoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwga3dhcmdzKToKKyAg
ICAgICAgc2VsZi5fX2RpY3RfXy51cGRhdGUoa3dhcmdzKQorICAgICAgICBzZWxmLl9uYW1lID0g
bmFtZQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICBkID0gc2VsZi5fX2RpY3Rf
Xy5jb3B5KCkKKyAgICAgICAgZGVsIGRbJ19uYW1lJ10KKyAgICAgICAgcmV0dXJuICI8UGFyc2Vk
Q2FsbCAlcigqKiVyKT4iICUoc2VsZi5fbmFtZSwgZCkKKworCitjbGFzcyBIb29rUmVjb3JkZXI6
CisgICAgIiIiUmVjb3JkIGFsbCBob29rcyBjYWxsZWQgaW4gYSBwbHVnaW4gbWFuYWdlci4KKwor
ICAgIFRoaXMgd3JhcHMgYWxsIHRoZSBob29rIGNhbGxzIGluIHRoZSBwbHVnaW4gbWFuYWdlciwg
cmVjb3JkaW5nCisgICAgZWFjaCBjYWxsIGJlZm9yZSBwcm9wYWdhdGluZyB0aGUgbm9ybWFsIGNh
bGxzLgorCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGx1Z2lubWFuYWdlcik6
CisgICAgICAgIHNlbGYuX3BsdWdpbm1hbmFnZXIgPSBwbHVnaW5tYW5hZ2VyCisgICAgICAgIHNl
bGYuY2FsbHMgPSBbXQorCisgICAgICAgIGRlZiBiZWZvcmUoaG9va19uYW1lLCBob29rX2ltcGxz
LCBrd2FyZ3MpOgorICAgICAgICAgICAgc2VsZi5jYWxscy5hcHBlbmQoUGFyc2VkQ2FsbChob29r
X25hbWUsIGt3YXJncykpCisKKyAgICAgICAgZGVmIGFmdGVyKG91dGNvbWUsIGhvb2tfbmFtZSwg
aG9va19pbXBscywga3dhcmdzKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzZWxmLl91
bmRvX3dyYXBwaW5nID0gcGx1Z2lubWFuYWdlci5hZGRfaG9va2NhbGxfbW9uaXRvcmluZyhiZWZv
cmUsIGFmdGVyKQorCisgICAgZGVmIGZpbmlzaF9yZWNvcmRpbmcoc2VsZik6CisgICAgICAgIHNl
bGYuX3VuZG9fd3JhcHBpbmcoKQorCisgICAgZGVmIGdldGNhbGxzKHNlbGYsIG5hbWVzKToKKyAg
ICAgICAgaWYgaXNpbnN0YW5jZShuYW1lcywgc3RyKToKKyAgICAgICAgICAgIG5hbWVzID0gbmFt
ZXMuc3BsaXQoKQorICAgICAgICByZXR1cm4gW2NhbGwgZm9yIGNhbGwgaW4gc2VsZi5jYWxscyBp
ZiBjYWxsLl9uYW1lIGluIG5hbWVzXQorCisgICAgZGVmIGFzc2VydF9jb250YWlucyhzZWxmLCBl
bnRyaWVzKToKKyAgICAgICAgX190cmFjZWJhY2toaWRlX18gPSBUcnVlCisgICAgICAgIGkgPSAw
CisgICAgICAgIGVudHJpZXMgPSBsaXN0KGVudHJpZXMpCisgICAgICAgIGJhY2tsb2NhbHMgPSBz
eXMuX2dldGZyYW1lKDEpLmZfbG9jYWxzCisgICAgICAgIHdoaWxlIGVudHJpZXM6CisgICAgICAg
ICAgICBuYW1lLCBjaGVjayA9IGVudHJpZXMucG9wKDApCisgICAgICAgICAgICBmb3IgaW5kLCBj
YWxsIGluIGVudW1lcmF0ZShzZWxmLmNhbGxzW2k6XSk6CisgICAgICAgICAgICAgICAgaWYgY2Fs
bC5fbmFtZSA9PSBuYW1lOgorICAgICAgICAgICAgICAgICAgICBwcmludF8oIk5BTUVNQVRDSCIs
IG5hbWUsIGNhbGwpCisgICAgICAgICAgICAgICAgICAgIGlmIGV2YWwoY2hlY2ssIGJhY2tsb2Nh
bHMsIGNhbGwuX19kaWN0X18pOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRfKCJDSEVD
S0VSTUFUQ0giLCByZXByKGNoZWNrKSwgIi0+IiwgY2FsbCkKKyAgICAgICAgICAgICAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50XygiTk9DSEVDS0VSTUFUQ0giLCBy
ZXByKGNoZWNrKSwgIi0iLCBjYWxsKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUK
KyAgICAgICAgICAgICAgICAgICAgaSArPSBpbmQgKyAxCisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrCisgICAgICAgICAgICAgICAgcHJpbnRfKCJOT05BTUVNQVRDSCIsIG5hbWUsICJ3aXRoIiwg
Y2FsbCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHl0ZXN0LmZhaWwoImNv
dWxkIG5vdCBmaW5kICVyIGNoZWNrICVyIiAlIChuYW1lLCBjaGVjaykpCisKKyAgICBkZWYgcG9w
Y2FsbChzZWxmLCBuYW1lKToKKyAgICAgICAgX190cmFjZWJhY2toaWRlX18gPSBUcnVlCisgICAg
ICAgIGZvciBpLCBjYWxsIGluIGVudW1lcmF0ZShzZWxmLmNhbGxzKToKKyAgICAgICAgICAgIGlm
IGNhbGwuX25hbWUgPT0gbmFtZToKKyAgICAgICAgICAgICAgICBkZWwgc2VsZi5jYWxsc1tpXQor
ICAgICAgICAgICAgICAgIHJldHVybiBjYWxsCisgICAgICAgIGxpbmVzID0gWyJjb3VsZCBub3Qg
ZmluZCBjYWxsICVyLCBpbjoiICUgKG5hbWUsKV0KKyAgICAgICAgbGluZXMuZXh0ZW5kKFsiICAl
cyIgJSBzdHIoeCkgZm9yIHggaW4gc2VsZi5jYWxsc10pCisgICAgICAgIHB5dGVzdC5mYWlsKCJc
biIuam9pbihsaW5lcykpCisKKyAgICBkZWYgZ2V0Y2FsbChzZWxmLCBuYW1lKToKKyAgICAgICAg
bCA9IHNlbGYuZ2V0Y2FsbHMobmFtZSkKKyAgICAgICAgYXNzZXJ0IGxlbihsKSA9PSAxLCAobmFt
ZSwgbCkKKyAgICAgICAgcmV0dXJuIGxbMF0KKworICAgICMgZnVuY3Rpb25hbGl0eSBmb3IgdGVz
dCByZXBvcnRzCisKKyAgICBkZWYgZ2V0cmVwb3J0cyhzZWxmLAorICAgICAgICAgICAgICAgICAg
IG5hbWVzPSJweXRlc3RfcnVudGVzdF9sb2dyZXBvcnQgcHl0ZXN0X2NvbGxlY3RyZXBvcnQiKToK
KyAgICAgICAgcmV0dXJuIFt4LnJlcG9ydCBmb3IgeCBpbiBzZWxmLmdldGNhbGxzKG5hbWVzKV0K
KworICAgIGRlZiBtYXRjaHJlcG9ydChzZWxmLCBpbmFtZXBhcnQ9IiIsCisgICAgICAgIG5hbWVz
PSJweXRlc3RfcnVudGVzdF9sb2dyZXBvcnQgcHl0ZXN0X2NvbGxlY3RyZXBvcnQiLCB3aGVuPU5v
bmUpOgorICAgICAgICAiIiIgcmV0dXJuIGEgdGVzdHJlcG9ydCB3aG9zZSBkb3R0ZWQgaW1wb3J0
IHBhdGggbWF0Y2hlcyAiIiIKKyAgICAgICAgbCA9IFtdCisgICAgICAgIGZvciByZXAgaW4gc2Vs
Zi5nZXRyZXBvcnRzKG5hbWVzPW5hbWVzKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAg
ICAgICBpZiBub3Qgd2hlbiBhbmQgcmVwLndoZW4gIT0gImNhbGwiIGFuZCByZXAucGFzc2VkOgor
ICAgICAgICAgICAgICAgICAgICAjIHNldHVwL3RlYXJkb3duIHBhc3NpbmcgcmVwb3J0cyAtIGxl
dCdzIGlnbm9yZSB0aG9zZQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAg
ICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAg
ICAgIGlmIHdoZW4gYW5kIGdldGF0dHIocmVwLCAnd2hlbicsIE5vbmUpICE9IHdoZW46CisgICAg
ICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIG5vdCBpbmFtZXBhcnQgb3IgaW5h
bWVwYXJ0IGluIHJlcC5ub2RlaWQuc3BsaXQoIjo6Iik6CisgICAgICAgICAgICAgICAgbC5hcHBl
bmQocmVwKQorICAgICAgICBpZiBub3QgbDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3Io
ImNvdWxkIG5vdCBmaW5kIHRlc3QgcmVwb3J0IG1hdGNoaW5nICVyOiAiCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJubyB0ZXN0IHJlcG9ydHMgYXQgYWxsISIgJSAoaW5hbWVwYXJ0LCkp
CisgICAgICAgIGlmIGxlbihsKSA+IDE6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAor
ICAgICAgICAgICAgICAgICJmb3VuZCAyIG9yIG1vcmUgdGVzdHJlcG9ydHMgbWF0Y2hpbmcgJXI6
ICVzIiAlKGluYW1lcGFydCwgbCkpCisgICAgICAgIHJldHVybiBsWzBdCisKKyAgICBkZWYgZ2V0
ZmFpbHVyZXMoc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgbmFtZXM9J3B5dGVzdF9ydW50ZXN0
X2xvZ3JlcG9ydCBweXRlc3RfY29sbGVjdHJlcG9ydCcpOgorICAgICAgICByZXR1cm4gW3JlcCBm
b3IgcmVwIGluIHNlbGYuZ2V0cmVwb3J0cyhuYW1lcykgaWYgcmVwLmZhaWxlZF0KKworICAgIGRl
ZiBnZXRmYWlsZWRjb2xsZWN0aW9ucyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZ2V0ZmFp
bHVyZXMoJ3B5dGVzdF9jb2xsZWN0cmVwb3J0JykKKworICAgIGRlZiBsaXN0b3V0Y29tZXMoc2Vs
Zik6CisgICAgICAgIHBhc3NlZCA9IFtdCisgICAgICAgIHNraXBwZWQgPSBbXQorICAgICAgICBm
YWlsZWQgPSBbXQorICAgICAgICBmb3IgcmVwIGluIHNlbGYuZ2V0cmVwb3J0cygKKyAgICAgICAg
ICAgICJweXRlc3RfY29sbGVjdHJlcG9ydCBweXRlc3RfcnVudGVzdF9sb2dyZXBvcnQiKToKKyAg
ICAgICAgICAgIGlmIHJlcC5wYXNzZWQ6CisgICAgICAgICAgICAgICAgaWYgZ2V0YXR0cihyZXAs
ICJ3aGVuIiwgTm9uZSkgPT0gImNhbGwiOgorICAgICAgICAgICAgICAgICAgICBwYXNzZWQuYXBw
ZW5kKHJlcCkKKyAgICAgICAgICAgIGVsaWYgcmVwLnNraXBwZWQ6CisgICAgICAgICAgICAgICAg
c2tpcHBlZC5hcHBlbmQocmVwKQorICAgICAgICAgICAgZWxpZiByZXAuZmFpbGVkOgorICAgICAg
ICAgICAgICAgIGZhaWxlZC5hcHBlbmQocmVwKQorICAgICAgICByZXR1cm4gcGFzc2VkLCBza2lw
cGVkLCBmYWlsZWQKKworICAgIGRlZiBjb3VudG91dGNvbWVzKHNlbGYpOgorICAgICAgICByZXR1
cm4gW2xlbih4KSBmb3IgeCBpbiBzZWxmLmxpc3RvdXRjb21lcygpXQorCisgICAgZGVmIGFzc2Vy
dG91dGNvbWUoc2VsZiwgcGFzc2VkPTAsIHNraXBwZWQ9MCwgZmFpbGVkPTApOgorICAgICAgICBy
ZWFscGFzc2VkLCByZWFsc2tpcHBlZCwgcmVhbGZhaWxlZCA9IHNlbGYubGlzdG91dGNvbWVzKCkK
KyAgICAgICAgYXNzZXJ0IHBhc3NlZCA9PSBsZW4ocmVhbHBhc3NlZCkKKyAgICAgICAgYXNzZXJ0
IHNraXBwZWQgPT0gbGVuKHJlYWxza2lwcGVkKQorICAgICAgICBhc3NlcnQgZmFpbGVkID09IGxl
bihyZWFsZmFpbGVkKQorCisgICAgZGVmIGNsZWFyKHNlbGYpOgorICAgICAgICBzZWxmLmNhbGxz
WzpdID0gW10KKworCitAcHl0ZXN0LmZpeHR1cmUKK2RlZiBsaW5lY29tcChyZXF1ZXN0KToKKyAg
ICByZXR1cm4gTGluZUNvbXAoKQorCisKK2RlZiBweXRlc3RfZnVuY2FyZ19fTGluZU1hdGNoZXIo
cmVxdWVzdCk6CisgICAgcmV0dXJuIExpbmVNYXRjaGVyCisKKworQHB5dGVzdC5maXh0dXJlCitk
ZWYgdGVzdGRpcihyZXF1ZXN0LCB0bXBkaXJfZmFjdG9yeSk6CisgICAgcmV0dXJuIFRlc3RkaXIo
cmVxdWVzdCwgdG1wZGlyX2ZhY3RvcnkpCisKKworcmV4X291dGNvbWUgPSByZS5jb21waWxlKCIo
XGQrKSAoW1x3LV0rKSIpCitjbGFzcyBSdW5SZXN1bHQ6CisgICAgIiIiVGhlIHJlc3VsdCBvZiBy
dW5uaW5nIGEgY29tbWFuZC4KKworICAgIEF0dHJpYnV0ZXM6CisKKyAgICA6cmV0OiBUaGUgcmV0
dXJuIHZhbHVlLgorICAgIDpvdXRsaW5lczogTGlzdCBvZiBsaW5lcyBjYXB0dXJlZCBmcm9tIHN0
ZG91dC4KKyAgICA6ZXJybGluZXM6IExpc3Qgb2YgbGluZXMgY2FwdHVyZXMgZnJvbSBzdGRlcnIu
CisgICAgOnN0ZG91dDogOnB5OmNsYXNzOmBMaW5lTWF0Y2hlcmAgb2Ygc3Rkb3V0LCB1c2UgYGBz
dGRvdXQuc3RyKClgYCB0bworICAgICAgIHJlY29uc3RydWN0IHN0ZG91dCBvciB0aGUgY29tbW9u
bHkgdXNlZAorICAgICAgIGBgc3Rkb3V0LmZubWF0Y2hfbGluZXMoKWBgIG1ldGhvZC4KKyAgICA6
c3RkZXJycjogOnB5OmNsYXNzOmBMaW5lTWF0Y2hlcmAgb2Ygc3RkZXJyLgorICAgIDpkdXJhdGlv
bjogRHVyYXRpb24gaW4gc2Vjb25kcy4KKworICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxm
LCByZXQsIG91dGxpbmVzLCBlcnJsaW5lcywgZHVyYXRpb24pOgorICAgICAgICBzZWxmLnJldCA9
IHJldAorICAgICAgICBzZWxmLm91dGxpbmVzID0gb3V0bGluZXMKKyAgICAgICAgc2VsZi5lcnJs
aW5lcyA9IGVycmxpbmVzCisgICAgICAgIHNlbGYuc3Rkb3V0ID0gTGluZU1hdGNoZXIob3V0bGlu
ZXMpCisgICAgICAgIHNlbGYuc3RkZXJyID0gTGluZU1hdGNoZXIoZXJybGluZXMpCisgICAgICAg
IHNlbGYuZHVyYXRpb24gPSBkdXJhdGlvbgorCisgICAgZGVmIHBhcnNlb3V0Y29tZXMoc2VsZik6
CisgICAgICAgICIiIiBSZXR1cm4gYSBkaWN0aW9uYXJ5IG9mIG91dGNvbWVzdHJpbmctPm51bSBm
cm9tIHBhcnNpbmcKKyAgICAgICAgdGhlIHRlcm1pbmFsIG91dHB1dCB0aGF0IHRoZSB0ZXN0IHBy
b2Nlc3MgcHJvZHVjZWQuIiIiCisgICAgICAgIGZvciBsaW5lIGluIHJldmVyc2VkKHNlbGYub3V0
bGluZXMpOgorICAgICAgICAgICAgaWYgJ3NlY29uZHMnIGluIGxpbmU6CisgICAgICAgICAgICAg
ICAgb3V0Y29tZXMgPSByZXhfb3V0Y29tZS5maW5kYWxsKGxpbmUpCisgICAgICAgICAgICAgICAg
aWYgb3V0Y29tZXM6CisgICAgICAgICAgICAgICAgICAgIGQgPSB7fQorICAgICAgICAgICAgICAg
ICAgICBmb3IgbnVtLCBjYXQgaW4gb3V0Y29tZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBk
W2NhdF0gPSBpbnQobnVtKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZAorCisgICAgZGVm
IGFzc2VydF9vdXRjb21lcyhzZWxmLCBwYXNzZWQ9MCwgc2tpcHBlZD0wLCBmYWlsZWQ9MCk6Cisg
ICAgICAgICIiIiBhc3NlcnQgdGhhdCB0aGUgc3BlY2lmaWVkIG91dGNvbWVzIGFwcGVhciB3aXRo
IHRoZSByZXNwZWN0aXZlCisgICAgICAgIG51bWJlcnMgKDAgbWVhbnMgaXQgZGlkbid0IG9jY3Vy
KSBpbiB0aGUgdGV4dCBvdXRwdXQgZnJvbSBhIHRlc3QgcnVuLiIiIgorICAgICAgICBkID0gc2Vs
Zi5wYXJzZW91dGNvbWVzKCkKKyAgICAgICAgYXNzZXJ0IHBhc3NlZCA9PSBkLmdldCgicGFzc2Vk
IiwgMCkKKyAgICAgICAgYXNzZXJ0IHNraXBwZWQgPT0gZC5nZXQoInNraXBwZWQiLCAwKQorICAg
ICAgICBhc3NlcnQgZmFpbGVkID09IGQuZ2V0KCJmYWlsZWQiLCAwKQorCisKKworY2xhc3MgVGVz
dGRpcjoKKyAgICAiIiJUZW1wb3JhcnkgdGVzdCBkaXJlY3Rvcnkgd2l0aCB0b29scyB0byB0ZXN0
L3J1biBweS50ZXN0IGl0c2VsZi4KKworICAgIFRoaXMgaXMgYmFzZWQgb24gdGhlIGBgdG1wZGly
YGAgZml4dHVyZSBidXQgcHJvdmlkZXMgYSBudW1iZXIgb2YKKyAgICBtZXRob2RzIHdoaWNoIGFp
ZCB3aXRoIHRlc3RpbmcgcHkudGVzdCBpdHNlbGYuICBVbmxlc3MKKyAgICA6cHk6bWV0aDpgY2hk
aXJgIGlzIHVzZWQgYWxsIG1ldGhvZHMgd2lsbCB1c2UgOnB5OmF0dHI6YHRtcGRpcmAgYXMKKyAg
ICBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgorCisgICAgQXR0cmlidXRlczoKKworICAgIDp0
bXBkaXI6IFRoZSA6cHk6Y2xhc3M6YHB5LnBhdGgubG9jYWxgIGluc3RhbmNlIG9mIHRoZSB0ZW1w
b3JhcnkKKyAgICAgICBkaXJlY3RvcnkuCisKKyAgICA6cGx1Z2luczogQSBsaXN0IG9mIHBsdWdp
bnMgdG8gdXNlIHdpdGggOnB5Om1ldGg6YHBhcnNlY29uZmlnYCBhbmQKKyAgICAgICA6cHk6bWV0
aDpgcnVucHl0ZXN0YC4gIEluaXRpYWxseSB0aGlzIGlzIGFuIGVtcHR5IGxpc3QgYnV0CisgICAg
ICAgcGx1Z2lucyBjYW4gYmUgYWRkZWQgdG8gdGhlIGxpc3QuICBUaGUgdHlwZSBvZiBpdGVtcyB0
byBhZGQgdG8KKyAgICAgICB0aGUgbGlzdCBkZXBlbmQgb24gdGhlIG1ldGhvZCB3aGljaCB1c2Vz
IHRoZW0gc28gcmVmZXIgdG8gdGhlbQorICAgICAgIGZvciBkZXRhaWxzLgorCisgICAgIiIiCisK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVxdWVzdCwgdG1wZGlyX2ZhY3RvcnkpOgorICAgICAg
ICBzZWxmLnJlcXVlc3QgPSByZXF1ZXN0CisgICAgICAgICMgWFhYIHJlbW92ZSBkdXBsaWNhdGlv
biB3aXRoIHRtcGRpciBwbHVnaW4KKyAgICAgICAgYmFzZXRtcCA9IHRtcGRpcl9mYWN0b3J5LmVu
c3VyZXRlbXAoInRlc3RkaXIiKQorICAgICAgICBuYW1lID0gcmVxdWVzdC5mdW5jdGlvbi5fX25h
bWVfXworICAgICAgICBmb3IgaSBpbiByYW5nZSgxMDApOgorICAgICAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgICAgIHRtcGRpciA9IGJhc2V0bXAubWtkaXIobmFtZSArIHN0cihpKSkKKyAgICAg
ICAgICAgIGV4Y2VwdCBweS5lcnJvci5FRVhJU1Q6CisgICAgICAgICAgICAgICAgY29udGludWUK
KyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHNlbGYudG1wZGlyID0gdG1wZGlyCisgICAgICAg
IHNlbGYucGx1Z2lucyA9IFtdCisgICAgICAgIHNlbGYuX3NhdmVzeXNwYXRoID0gKGxpc3Qoc3lz
LnBhdGgpLCBsaXN0KHN5cy5tZXRhX3BhdGgpKQorICAgICAgICBzZWxmLl9zYXZlbW9kdWxla2V5
cyA9IHNldChzeXMubW9kdWxlcykKKyAgICAgICAgc2VsZi5jaGRpcigpICMgYWx3YXlzIGNoZGly
CisgICAgICAgIHNlbGYucmVxdWVzdC5hZGRmaW5hbGl6ZXIoc2VsZi5maW5hbGl6ZSkKKyAgICAg
ICAgbWV0aG9kID0gc2VsZi5yZXF1ZXN0LmNvbmZpZy5nZXRvcHRpb24oIi0tcnVucHl0ZXN0IikK
KyAgICAgICAgaWYgbWV0aG9kID09ICJpbnByb2Nlc3MiOgorICAgICAgICAgICAgc2VsZi5fcnVu
cHl0ZXN0X21ldGhvZCA9IHNlbGYucnVucHl0ZXN0X2lucHJvY2VzcworICAgICAgICBlbGlmIG1l
dGhvZCA9PSAic3VicHJvY2VzcyI6CisgICAgICAgICAgICBzZWxmLl9ydW5weXRlc3RfbWV0aG9k
ID0gc2VsZi5ydW5weXRlc3Rfc3VicHJvY2VzcworCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgor
ICAgICAgICByZXR1cm4gIjxUZXN0ZGlyICVyPiIgJSAoc2VsZi50bXBkaXIsKQorCisgICAgZGVm
IGZpbmFsaXplKHNlbGYpOgorICAgICAgICAiIiJDbGVhbiB1cCBnbG9iYWwgc3RhdGUgYXJ0aWZh
Y3RzLgorCisgICAgICAgIFNvbWUgbWV0aG9kcyBtb2RpZnkgdGhlIGdsb2JhbCBpbnRlcnByZXRl
ciBzdGF0ZSBhbmQgdGhpcworICAgICAgICB0cmllcyB0byBjbGVhbiB0aGlzIHVwLiAgSXQgZG9l
cyBub3QgcmVtb3ZlIHRoZSB0ZW1wb3JhcnkKKyAgICAgICAgZGlyZWN0b3J5IGhvd2V2ZXIgc28g
aXQgY2FuIGJlIGxvb2tlZCBhdCBhZnRlciB0aGUgdGVzdCBydW4KKyAgICAgICAgaGFzIGZpbmlz
aGVkLgorCisgICAgICAgICIiIgorICAgICAgICBzeXMucGF0aFs6XSwgc3lzLm1ldGFfcGF0aFs6
XSA9IHNlbGYuX3NhdmVzeXNwYXRoCisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgJ19vbGRkaXIn
KToKKyAgICAgICAgICAgIHNlbGYuX29sZGRpci5jaGRpcigpCisgICAgICAgIHNlbGYuZGVsZXRl
X2xvYWRlZF9tb2R1bGVzKCkKKworICAgIGRlZiBkZWxldGVfbG9hZGVkX21vZHVsZXMoc2VsZik6
CisgICAgICAgICIiIkRlbGV0ZSBtb2R1bGVzIHRoYXQgaGF2ZSBiZWVuIGxvYWRlZCBkdXJpbmcg
YSB0ZXN0LgorCisgICAgICAgIFRoaXMgYWxsb3dzIHRoZSBpbnRlcnByZXRlciB0byBjYXRjaCBt
b2R1bGUgY2hhbmdlcyBpbiBjYXNlCisgICAgICAgIHRoZSBtb2R1bGUgaXMgcmUtaW1wb3J0ZWQu
CisgICAgICAgICIiIgorICAgICAgICBmb3IgbmFtZSBpbiBzZXQoc3lzLm1vZHVsZXMpLmRpZmZl
cmVuY2Uoc2VsZi5fc2F2ZW1vZHVsZWtleXMpOgorICAgICAgICAgICAgIyBpdCBzZWVtcyB6b3Bl
LmludGVyZmFjZXMgaXMga2VlcGluZyBzb21lIHN0YXRlCisgICAgICAgICAgICAjICh1c2VkIGJ5
IHR3aXN0ZWQgcmVsYXRlZCB0ZXN0cykKKyAgICAgICAgICAgIGlmIG5hbWUgIT0gInpvcGUuaW50
ZXJmYWNlIjoKKyAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbbmFtZV0KKworICAgIGRl
ZiBtYWtlX2hvb2tfcmVjb3JkZXIoc2VsZiwgcGx1Z2lubWFuYWdlcik6CisgICAgICAgICIiIkNy
ZWF0ZSBhIG5ldyA6cHk6Y2xhc3M6YEhvb2tSZWNvcmRlcmAgZm9yIGEgUGx1Z2luTWFuYWdlci4i
IiIKKyAgICAgICAgYXNzZXJ0IG5vdCBoYXNhdHRyKHBsdWdpbm1hbmFnZXIsICJyZXByZWMiKQor
ICAgICAgICBwbHVnaW5tYW5hZ2VyLnJlcHJlYyA9IHJlcHJlYyA9IEhvb2tSZWNvcmRlcihwbHVn
aW5tYW5hZ2VyKQorICAgICAgICBzZWxmLnJlcXVlc3QuYWRkZmluYWxpemVyKHJlcHJlYy5maW5p
c2hfcmVjb3JkaW5nKQorICAgICAgICByZXR1cm4gcmVwcmVjCisKKyAgICBkZWYgY2hkaXIoc2Vs
Zik6CisgICAgICAgICIiIkNkIGludG8gdGhlIHRlbXBvcmFyeSBkaXJlY3RvcnkuCisKKyAgICAg
ICAgVGhpcyBpcyBkb25lIGF1dG9tYXRpY2FsbHkgdXBvbiBpbnN0YW50aWF0aW9uLgorCisgICAg
ICAgICIiIgorICAgICAgICBvbGQgPSBzZWxmLnRtcGRpci5jaGRpcigpCisgICAgICAgIGlmIG5v
dCBoYXNhdHRyKHNlbGYsICdfb2xkZGlyJyk6CisgICAgICAgICAgICBzZWxmLl9vbGRkaXIgPSBv
bGQKKworICAgIGRlZiBfbWFrZWZpbGUoc2VsZiwgZXh0LCBhcmdzLCBrd2FyZ3MpOgorICAgICAg
ICBpdGVtcyA9IGxpc3Qoa3dhcmdzLml0ZW1zKCkpCisgICAgICAgIGlmIGFyZ3M6CisgICAgICAg
ICAgICBzb3VyY2UgPSBweS5idWlsdGluLl90b3RleHQoIlxuIikuam9pbigKKyAgICAgICAgICAg
ICAgICBtYXAocHkuYnVpbHRpbi5fdG90ZXh0LCBhcmdzKSkgKyBweS5idWlsdGluLl90b3RleHQo
IlxuIikKKyAgICAgICAgICAgIGJhc2VuYW1lID0gc2VsZi5yZXF1ZXN0LmZ1bmN0aW9uLl9fbmFt
ZV9fCisgICAgICAgICAgICBpdGVtcy5pbnNlcnQoMCwgKGJhc2VuYW1lLCBzb3VyY2UpKQorICAg
ICAgICByZXQgPSBOb25lCisgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBpdGVtczoKKyAgICAg
ICAgICAgIHAgPSBzZWxmLnRtcGRpci5qb2luKG5hbWUpLm5ldyhleHQ9ZXh0KQorICAgICAgICAg
ICAgc291cmNlID0gU291cmNlKHZhbHVlKQorICAgICAgICAgICAgZGVmIG15X3RvdGV4dChzLCBl
bmNvZGluZz0idXRmLTgiKToKKyAgICAgICAgICAgICAgICBpZiBweS5idWlsdGluLl9pc2J5dGVz
KHMpOgorICAgICAgICAgICAgICAgICAgICBzID0gcHkuYnVpbHRpbi5fdG90ZXh0KHMsIGVuY29k
aW5nPWVuY29kaW5nKQorICAgICAgICAgICAgICAgIHJldHVybiBzCisgICAgICAgICAgICBzb3Vy
Y2VfdW5pY29kZSA9ICJcbiIuam9pbihbbXlfdG90ZXh0KGxpbmUpIGZvciBsaW5lIGluIHNvdXJj
ZS5saW5lc10pCisgICAgICAgICAgICBzb3VyY2UgPSBweS5idWlsdGluLl90b3RleHQoc291cmNl
X3VuaWNvZGUpCisgICAgICAgICAgICBjb250ZW50ID0gc291cmNlLnN0cmlwKCkuZW5jb2RlKCJ1
dGYtOCIpICMgKyAiXG4iCisgICAgICAgICAgICAjY29udGVudCA9IGNvbnRlbnQucnN0cmlwKCkg
KyAiXG4iCisgICAgICAgICAgICBwLndyaXRlKGNvbnRlbnQsICJ3YiIpCisgICAgICAgICAgICBp
ZiByZXQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICByZXQgPSBwCisgICAgICAgIHJldHVybiBy
ZXQKKworICAgIGRlZiBtYWtlZmlsZShzZWxmLCBleHQsICphcmdzLCAqKmt3YXJncyk6CisgICAg
ICAgICIiIkNyZWF0ZSBhIG5ldyBmaWxlIGluIHRoZSB0ZXN0ZGlyLgorCisgICAgICAgIGV4dDog
VGhlIGV4dGVuc2lvbiB0aGUgZmlsZSBzaG91bGQgdXNlLCBpbmNsdWRpbmcgdGhlIGRvdC4KKyAg
ICAgICAgICAgRS5nLiAiLnB5Ii4KKworICAgICAgICBhcmdzOiBBbGwgYXJncyB3aWxsIGJlIHRy
ZWF0ZWQgYXMgc3RyaW5ncyBhbmQgam9pbmVkIHVzaW5nCisgICAgICAgICAgIG5ld2xpbmVzLiAg
VGhlIHJlc3VsdCB3aWxsIGJlIHdyaXR0ZW4gYXMgY29udGVudHMgdG8gdGhlCisgICAgICAgICAg
IGZpbGUuICBUaGUgbmFtZSBvZiB0aGUgZmlsZSB3aWxsIGJlIGJhc2VkIG9uIHRoZSB0ZXN0Cisg
ICAgICAgICAgIGZ1bmN0aW9uIHJlcXVlc3RpbmcgdGhpcyBmaXh0dXJlLgorICAgICAgICAgICBF
LmcuICJ0ZXN0ZGlyLm1ha2VmaWxlKCcudHh0JywgJ2xpbmUxJywgJ2xpbmUyJykiCisKKyAgICAg
ICAga3dhcmdzOiBFYWNoIGtleXdvcmQgaXMgdGhlIG5hbWUgb2YgYSBmaWxlLCB3aGlsZSB0aGUg
dmFsdWUgb2YKKyAgICAgICAgICAgaXQgd2lsbCBiZSB3cml0dGVuIGFzIGNvbnRlbnRzIG9mIHRo
ZSBmaWxlLgorICAgICAgICAgICBFLmcuICJ0ZXN0ZGlyLm1ha2VmaWxlKCcuaW5pJywgcHl0ZXN0
PSdbcHl0ZXN0XVxuYWRkb3B0cz0tcnNcbicpIgorCisgICAgICAgICIiIgorICAgICAgICByZXR1
cm4gc2VsZi5fbWFrZWZpbGUoZXh0LCBhcmdzLCBrd2FyZ3MpCisKKyAgICBkZWYgbWFrZWNvbmZ0
ZXN0KHNlbGYsIHNvdXJjZSk6CisgICAgICAgICIiIldyaXRlIGEgY29udGVzdC5weSBmaWxlIHdp
dGggJ3NvdXJjZScgYXMgY29udGVudHMuIiIiCisgICAgICAgIHJldHVybiBzZWxmLm1ha2VweWZp
bGUoY29uZnRlc3Q9c291cmNlKQorCisgICAgZGVmIG1ha2Vpbmkoc2VsZiwgc291cmNlKToKKyAg
ICAgICAgIiIiV3JpdGUgYSB0b3guaW5pIGZpbGUgd2l0aCAnc291cmNlJyBhcyBjb250ZW50cy4i
IiIKKyAgICAgICAgcmV0dXJuIHNlbGYubWFrZWZpbGUoJy5pbmknLCB0b3g9c291cmNlKQorCisg
ICAgZGVmIGdldGluaWNmZyhzZWxmLCBzb3VyY2UpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIHB5
dGVzdCBzZWN0aW9uIGZyb20gdGhlIHRveC5pbmkgY29uZmlnIGZpbGUuIiIiCisgICAgICAgIHAg
PSBzZWxmLm1ha2Vpbmkoc291cmNlKQorICAgICAgICByZXR1cm4gcHkuaW5pY29uZmlnLkluaUNv
bmZpZyhwKVsncHl0ZXN0J10KKworICAgIGRlZiBtYWtlcHlmaWxlKHNlbGYsICphcmdzLCAqKmt3
YXJncyk6CisgICAgICAgICIiIlNob3J0Y3V0IGZvciAubWFrZWZpbGUoKSB3aXRoIGEgLnB5IGV4
dGVuc2lvbi4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX21ha2VmaWxlKCcucHknLCBhcmdzLCBr
d2FyZ3MpCisKKyAgICBkZWYgbWFrZXR4dGZpbGUoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAg
ICAgICAgIiIiU2hvcnRjdXQgZm9yIC5tYWtlZmlsZSgpIHdpdGggYSAudHh0IGV4dGVuc2lvbi4i
IiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX21ha2VmaWxlKCcudHh0JywgYXJncywga3dhcmdzKQor
CisgICAgZGVmIHN5c3BhdGhpbnNlcnQoc2VsZiwgcGF0aD1Ob25lKToKKyAgICAgICAgIiIiUHJl
cGVuZCBhIGRpcmVjdG9yeSB0byBzeXMucGF0aCwgZGVmYXVsdHMgdG8gOnB5OmF0dHI6YHRtcGRp
cmAuCisKKyAgICAgICAgVGhpcyBpcyB1bmRvbmUgYXV0b21hdGljYWxseSBhZnRlciB0aGUgdGVz
dC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHBhdGggaXMgTm9uZToKKyAgICAgICAgICAgIHBh
dGggPSBzZWxmLnRtcGRpcgorICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgc3RyKHBhdGgpKQor
ICAgICAgICAjIGEgY2FsbCB0byBzeXNwYXRoaW5zZXJ0KCkgdXN1YWxseSBtZWFucyB0aGF0IHRo
ZSBjYWxsZXIKKyAgICAgICAgIyB3YW50cyB0byBpbXBvcnQgc29tZSBkeW5hbWljYWxseSBjcmVh
dGVkIGZpbGVzLgorICAgICAgICAjIHdpdGggcHl0aG9uMyB3ZSB0aHVzIGludmFsaWRhdGUgaW1w
b3J0IGNhY2hlcy4KKyAgICAgICAgc2VsZi5fcG9zc2libHlfaW52YWxpZGF0ZV9pbXBvcnRfY2Fj
aGVzKCkKKworICAgIGRlZiBfcG9zc2libHlfaW52YWxpZGF0ZV9pbXBvcnRfY2FjaGVzKHNlbGYp
OgorICAgICAgICAjIGludmFsaWRhdGUgY2FjaGVzIGlmIHdlIGNhbiAocHkzMyBhbmQgYWJvdmUp
CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGltcG9ydCBpbXBvcnRsaWIKKyAgICAgICAgZXhj
ZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgaWYgaGFzYXR0cihpbXBvcnRsaWIsICJpbnZhbGlkYXRlX2NhY2hlcyIpOgorICAgICAg
ICAgICAgICAgIGltcG9ydGxpYi5pbnZhbGlkYXRlX2NhY2hlcygpCisKKyAgICBkZWYgbWtkaXIo
c2VsZiwgbmFtZSk6CisgICAgICAgICIiIkNyZWF0ZSBhIG5ldyAoc3ViKWRpcmVjdG9yeS4iIiIK
KyAgICAgICAgcmV0dXJuIHNlbGYudG1wZGlyLm1rZGlyKG5hbWUpCisKKyAgICBkZWYgbWtweWRp
cihzZWxmLCBuYW1lKToKKyAgICAgICAgIiIiQ3JlYXRlIGEgbmV3IHB5dGhvbiBwYWNrYWdlLgor
CisgICAgICAgIFRoaXMgY3JlYXRlcyBhIChzdWIpZGlyZWNvdHJ5IHdpdGggYW4gZW1wdHkgYGBf
X2luaXRfXy5weWBgCisgICAgICAgIGZpbGUgc28gdGhhdCBpcyByZWNvZ25pc2VkIGFzIGEgcHl0
aG9uIHBhY2thZ2UuCisKKyAgICAgICAgIiIiCisgICAgICAgIHAgPSBzZWxmLm1rZGlyKG5hbWUp
CisgICAgICAgIHAuZW5zdXJlKCJfX2luaXRfXy5weSIpCisgICAgICAgIHJldHVybiBwCisKKyAg
ICBTZXNzaW9uID0gU2Vzc2lvbgorICAgIGRlZiBnZXRub2RlKHNlbGYsIGNvbmZpZywgYXJnKToK
KyAgICAgICAgIiIiUmV0dXJuIHRoZSBjb2xsZWN0aW9uIG5vZGUgb2YgYSBmaWxlLgorCisgICAg
ICAgIDpwYXJhbSBjb25maWc6IDpweTpjbGFzczpgX3B5dGVzdC5jb25maWcuQ29uZmlnYCBpbnN0
YW5jZSwgc2VlCisgICAgICAgICAgIDpweTptZXRoOmBwYXJzZWNvbmZpZ2AgYW5kIDpweTptZXRo
OmBwYXJzZWNvbmZpZ3VyZWAgdG8KKyAgICAgICAgICAgY3JlYXRlIHRoZSBjb25maWd1cmF0aW9u
LgorCisgICAgICAgIDpwYXJhbSBhcmc6IEEgOnB5OmNsYXNzOmBweS5wYXRoLmxvY2FsYCBpbnN0
YW5jZSBvZiB0aGUgZmlsZS4KKworICAgICAgICAiIiIKKyAgICAgICAgc2Vzc2lvbiA9IFNlc3Np
b24oY29uZmlnKQorICAgICAgICBhc3NlcnQgJzo6JyBub3QgaW4gc3RyKGFyZykKKyAgICAgICAg
cCA9IHB5LnBhdGgubG9jYWwoYXJnKQorICAgICAgICBjb25maWcuaG9vay5weXRlc3Rfc2Vzc2lv
bnN0YXJ0KHNlc3Npb249c2Vzc2lvbikKKyAgICAgICAgcmVzID0gc2Vzc2lvbi5wZXJmb3JtX2Nv
bGxlY3QoW3N0cihwKV0sIGdlbml0ZW1zPUZhbHNlKVswXQorICAgICAgICBjb25maWcuaG9vay5w
eXRlc3Rfc2Vzc2lvbmZpbmlzaChzZXNzaW9uPXNlc3Npb24sIGV4aXRzdGF0dXM9RVhJVF9PSykK
KyAgICAgICAgcmV0dXJuIHJlcworCisgICAgZGVmIGdldHBhdGhub2RlKHNlbGYsIHBhdGgpOgor
ICAgICAgICAiIiJSZXR1cm4gdGhlIGNvbGxlY3Rpb24gbm9kZSBvZiBhIGZpbGUuCisKKyAgICAg
ICAgVGhpcyBpcyBsaWtlIDpweTptZXRoOmBnZXRub2RlYCBidXQgdXNlcworICAgICAgICA6cHk6
bWV0aDpgcGFyc2Vjb25maWd1cmVgIHRvIGNyZWF0ZSB0aGUgKGNvbmZpZ3VyZWQpIHB5LnRlc3QK
KyAgICAgICAgQ29uZmlnIGluc3RhbmNlLgorCisgICAgICAgIDpwYXJhbSBwYXRoOiBBIDpweTpj
bGFzczpgcHkucGF0aC5sb2NhbGAgaW5zdGFuY2Ugb2YgdGhlIGZpbGUuCisKKyAgICAgICAgIiIi
CisgICAgICAgIGNvbmZpZyA9IHNlbGYucGFyc2Vjb25maWd1cmUocGF0aCkKKyAgICAgICAgc2Vz
c2lvbiA9IFNlc3Npb24oY29uZmlnKQorICAgICAgICB4ID0gc2Vzc2lvbi5mc3BhdGguYmVzdHJl
bHBhdGgocGF0aCkKKyAgICAgICAgY29uZmlnLmhvb2sucHl0ZXN0X3Nlc3Npb25zdGFydChzZXNz
aW9uPXNlc3Npb24pCisgICAgICAgIHJlcyA9IHNlc3Npb24ucGVyZm9ybV9jb2xsZWN0KFt4XSwg
Z2VuaXRlbXM9RmFsc2UpWzBdCisgICAgICAgIGNvbmZpZy5ob29rLnB5dGVzdF9zZXNzaW9uZmlu
aXNoKHNlc3Npb249c2Vzc2lvbiwgZXhpdHN0YXR1cz1FWElUX09LKQorICAgICAgICByZXR1cm4g
cmVzCisKKyAgICBkZWYgZ2VuaXRlbXMoc2VsZiwgY29saXRlbXMpOgorICAgICAgICAiIiJHZW5l
cmF0ZSBhbGwgdGVzdCBpdGVtcyBmcm9tIGEgY29sbGVjdGlvbiBub2RlLgorCisgICAgICAgIFRo
aXMgcmVjdXJzZXMgaW50byB0aGUgY29sbGVjdGlvbiBub2RlIGFuZCByZXR1cm5zIGEgbGlzdCBv
ZgorICAgICAgICBhbGwgdGhlIHRlc3QgaXRlbXMgY29udGFpbmVkIHdpdGhpbi4KKworICAgICAg
ICAiIiIKKyAgICAgICAgc2Vzc2lvbiA9IGNvbGl0ZW1zWzBdLnNlc3Npb24KKyAgICAgICAgcmVz
dWx0ID0gW10KKyAgICAgICAgZm9yIGNvbGl0ZW0gaW4gY29saXRlbXM6CisgICAgICAgICAgICBy
ZXN1bHQuZXh0ZW5kKHNlc3Npb24uZ2VuaXRlbXMoY29saXRlbSkpCisgICAgICAgIHJldHVybiBy
ZXN1bHQKKworICAgIGRlZiBydW5pdGVtKHNlbGYsIHNvdXJjZSk6CisgICAgICAgICIiIlJ1biB0
aGUgInRlc3RfZnVuYyIgSXRlbS4KKworICAgICAgICBUaGUgY2FsbGluZyB0ZXN0IGluc3RhbmNl
ICh0aGUgY2xhc3Mgd2hpY2ggY29udGFpbnMgdGhlIHRlc3QKKyAgICAgICAgbWV0aG9kKSBtdXN0
IHByb3ZpZGUgYSBgYC5nZXRydW5uZXIoKWBgIG1ldGhvZCB3aGljaCBzaG91bGQKKyAgICAgICAg
cmV0dXJuIGEgcnVubmVyIHdoaWNoIGNhbiBydW4gdGhlIHRlc3QgcHJvdG9jb2wgZm9yIGEgc2lu
Z2xlCisgICAgICAgIGl0ZW0sIGxpa2UgZS5nLiA6cHk6ZnVuYzpgX3B5dGVzdC5ydW5uZXIucnVu
dGVzdHByb3RvY29sYC4KKworICAgICAgICAiIiIKKyAgICAgICAgIyB1c2VkIGZyb20gcnVubmVy
IGZ1bmN0aW9uYWwgdGVzdHMKKyAgICAgICAgaXRlbSA9IHNlbGYuZ2V0aXRlbShzb3VyY2UpCisg
ICAgICAgICMgdGhlIHRlc3QgY2xhc3Mgd2hlcmUgd2UgYXJlIGNhbGxlZCBmcm9tIHdhbnRzIHRv
IHByb3ZpZGUgdGhlIHJ1bm5lcgorICAgICAgICB0ZXN0Y2xhc3NpbnN0YW5jZSA9IHNlbGYucmVx
dWVzdC5pbnN0YW5jZQorICAgICAgICBydW5uZXIgPSB0ZXN0Y2xhc3NpbnN0YW5jZS5nZXRydW5u
ZXIoKQorICAgICAgICByZXR1cm4gcnVubmVyKGl0ZW0pCisKKyAgICBkZWYgaW5saW5lX3J1bnNv
dXJjZShzZWxmLCBzb3VyY2UsICpjbWRsaW5lYXJncyk6CisgICAgICAgICIiIlJ1biBhIHRlc3Qg
bW9kdWxlIGluIHByb2Nlc3MgdXNpbmcgYGBweXRlc3QubWFpbigpYGAuCisKKyAgICAgICAgVGhp
cyBydW4gd3JpdGVzICJzb3VyY2UiIGludG8gYSB0ZW1wb3JhcnkgZmlsZSBhbmQgcnVucworICAg
ICAgICBgYHB5dGVzdC5tYWluKClgYCBvbiBpdCwgcmV0dXJuaW5nIGEgOnB5OmNsYXNzOmBIb29r
UmVjb3JkZXJgCisgICAgICAgIGluc3RhbmNlIGZvciB0aGUgcmVzdWx0LgorCisgICAgICAgIDpw
YXJhbSBzb3VyY2U6IFRoZSBzb3VyY2UgY29kZSBvZiB0aGUgdGVzdCBtb2R1bGUuCisKKyAgICAg
ICAgOnBhcmFtIGNtZGxpbmVhcmdzOiBBbnkgZXh0cmEgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyB0
byB1c2UuCisKKyAgICAgICAgOnJldHVybjogOnB5OmNsYXNzOmBIb29rUmVjb3JkZXJgIGluc3Rh
bmNlIG9mIHRoZSByZXN1bHQuCisKKyAgICAgICAgIiIiCisgICAgICAgIHAgPSBzZWxmLm1ha2Vw
eWZpbGUoc291cmNlKQorICAgICAgICBsID0gbGlzdChjbWRsaW5lYXJncykgKyBbcF0KKyAgICAg
ICAgcmV0dXJuIHNlbGYuaW5saW5lX3J1bigqbCkKKworICAgIGRlZiBpbmxpbmVfZ2VuaXRlbXMo
c2VsZiwgKmFyZ3MpOgorICAgICAgICAiIiJSdW4gYGBweXRlc3QubWFpbihbJy0tY29sbGVjdG9u
bHknXSlgYCBpbi1wcm9jZXNzLgorCisgICAgICAgIFJldHVucyBhIHR1cGxlIG9mIHRoZSBjb2xs
ZWN0ZWQgaXRlbXMgYW5kIGEKKyAgICAgICAgOnB5OmNsYXNzOmBIb29rUmVjb3JkZXJgIGluc3Rh
bmNlLgorCisgICAgICAgIFRoaXMgcnVucyB0aGUgOnB5OmZ1bmM6YHB5dGVzdC5tYWluYCBmdW5j
dGlvbiB0byBydW4gYWxsIG9mCisgICAgICAgIHB5LnRlc3QgaW5zaWRlIHRoZSB0ZXN0IHByb2Nl
c3MgaXRzZWxmIGxpa2UKKyAgICAgICAgOnB5Om1ldGg6YGlubGluZV9ydW5gLiAgSG93ZXZlciB0
aGUgcmV0dXJuIHZhbHVlIGlzIGEgdHVwbGUgb2YKKyAgICAgICAgdGhlIGNvbGxlY3Rpb24gaXRl
bXMgYW5kIGEgOnB5OmNsYXNzOmBIb29rUmVjb3JkZXJgIGluc3RhbmNlLgorCisgICAgICAgICIi
IgorICAgICAgICByZWMgPSBzZWxmLmlubGluZV9ydW4oIi0tY29sbGVjdC1vbmx5IiwgKmFyZ3Mp
CisgICAgICAgIGl0ZW1zID0gW3guaXRlbSBmb3IgeCBpbiByZWMuZ2V0Y2FsbHMoInB5dGVzdF9p
dGVtY29sbGVjdGVkIildCisgICAgICAgIHJldHVybiBpdGVtcywgcmVjCisKKyAgICBkZWYgaW5s
aW5lX3J1bihzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAiIiJSdW4gYGBweXRlc3Qu
bWFpbigpYGAgaW4tcHJvY2VzcywgcmV0dXJuaW5nIGEgSG9va1JlY29yZGVyLgorCisgICAgICAg
IFRoaXMgcnVucyB0aGUgOnB5OmZ1bmM6YHB5dGVzdC5tYWluYCBmdW5jdGlvbiB0byBydW4gYWxs
IG9mCisgICAgICAgIHB5LnRlc3QgaW5zaWRlIHRoZSB0ZXN0IHByb2Nlc3MgaXRzZWxmLiAgVGhp
cyBtZWFucyBpdCBjYW4KKyAgICAgICAgcmV0dXJuIGEgOnB5OmNsYXNzOmBIb29rUmVjb3JkZXJg
IGluc3RhbmNlIHdoaWNoIGdpdmVzIG1vcmUKKyAgICAgICAgZGV0YWlsZWQgcmVzdWx0cyBmcm9t
IHRoZW4gcnVuIHRoZW4gY2FuIGJlIGRvbmUgYnkgbWF0Y2hpbmcKKyAgICAgICAgc3Rkb3V0L3N0
ZGVyciBmcm9tIDpweTptZXRoOmBydW5weXRlc3RgLgorCisgICAgICAgIDpwYXJhbSBhcmdzOiBB
bnkgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyB0byBwYXNzIHRvCisgICAgICAgICAgIDpweTpmdW5j
OmBweXRlc3QubWFpbmAuCisKKyAgICAgICAgOnBhcmFtIHBsdWdpbjogKGtleXdvcmQtb25seSkg
RXh0cmEgcGx1Z2luIGluc3RhbmNlcyB0aGUKKyAgICAgICAgICAgYGBweXRlc3QubWFpbigpYGAg
aW5zdGFuY2Ugc2hvdWxkIHVzZS4KKworICAgICAgICA6cmV0dXJuOiBBIDpweTpjbGFzczpgSG9v
a1JlY29yZGVyYCBpbnN0YW5jZS4KKworICAgICAgICAiIiIKKyAgICAgICAgcmVjID0gW10KKyAg
ICAgICAgY2xhc3MgQ29sbGVjdDoKKyAgICAgICAgICAgIGRlZiBweXRlc3RfY29uZmlndXJlKHgs
IGNvbmZpZyk6CisgICAgICAgICAgICAgICAgcmVjLmFwcGVuZChzZWxmLm1ha2VfaG9va19yZWNv
cmRlcihjb25maWcucGx1Z2lubWFuYWdlcikpCisKKyAgICAgICAgcGx1Z2lucyA9IGt3YXJncy5n
ZXQoInBsdWdpbnMiKSBvciBbXQorICAgICAgICBwbHVnaW5zLmFwcGVuZChDb2xsZWN0KCkpCisg
ICAgICAgIHJldCA9IHB5dGVzdC5tYWluKGxpc3QoYXJncyksIHBsdWdpbnM9cGx1Z2lucykKKyAg
ICAgICAgc2VsZi5kZWxldGVfbG9hZGVkX21vZHVsZXMoKQorICAgICAgICBpZiBsZW4ocmVjKSA9
PSAxOgorICAgICAgICAgICAgcmVwcmVjID0gcmVjLnBvcCgpCisgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICBjbGFzcyByZXByZWM6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICByZXBy
ZWMucmV0ID0gcmV0CisKKyAgICAgICAgIyB0eXBpY2FsbHkgd2UgcmVyYWlzZSBrZXlib2FyZCBp
bnRlcnJ1cHRzIGZyb20gdGhlIGNoaWxkIHJ1bgorICAgICAgICAjIGJlY2F1c2UgaXQncyBvdXIg
dXNlciByZXF1ZXN0aW5nIGludGVycnVwdGlvbiBvZiB0aGUgdGVzdGluZworICAgICAgICBpZiBy
ZXQgPT0gMiBhbmQgbm90IGt3YXJncy5nZXQoIm5vX3JlcmFpc2VfY3RybGMiKToKKyAgICAgICAg
ICAgIGNhbGxzID0gcmVwcmVjLmdldGNhbGxzKCJweXRlc3Rfa2V5Ym9hcmRfaW50ZXJydXB0IikK
KyAgICAgICAgICAgIGlmIGNhbGxzIGFuZCBjYWxsc1stMV0uZXhjaW5mby50eXBlID09IEtleWJv
YXJkSW50ZXJydXB0OgorICAgICAgICAgICAgICAgIHJhaXNlIEtleWJvYXJkSW50ZXJydXB0KCkK
KyAgICAgICAgcmV0dXJuIHJlcHJlYworCisgICAgZGVmIHJ1bnB5dGVzdF9pbnByb2Nlc3Moc2Vs
ZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgIiIiIFJldHVybiByZXN1bHQgb2YgcnVubmlu
ZyBweXRlc3QgaW4tcHJvY2VzcywgcHJvdmlkaW5nIGEgc2ltaWxhcgorICAgICAgICBpbnRlcmZh
Y2UgdG8gd2hhdCBzZWxmLnJ1bnB5dGVzdCgpIHByb3ZpZGVzLiAiIiIKKyAgICAgICAgaWYga3dh
cmdzLmdldCgic3lzcGF0aGluc2VydCIpOgorICAgICAgICAgICAgc2VsZi5zeXNwYXRoaW5zZXJ0
KCkKKyAgICAgICAgbm93ID0gdGltZS50aW1lKCkKKyAgICAgICAgY2FwdHVyZSA9IHB5LmlvLlN0
ZENhcHR1cmUoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAg
ICAgcmVwcmVjID0gc2VsZi5pbmxpbmVfcnVuKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgICAg
IGV4Y2VwdCBTeXN0ZW1FeGl0IGFzIGU6CisgICAgICAgICAgICAgICAgY2xhc3MgcmVwcmVjOgor
ICAgICAgICAgICAgICAgICAgICByZXQgPSBlLmFyZ3NbMF0KKyAgICAgICAgICAgIGV4Y2VwdCBF
eGNlcHRpb246CisgICAgICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YygpCisgICAgICAg
ICAgICAgICAgY2xhc3MgcmVwcmVjOgorICAgICAgICAgICAgICAgICAgICByZXQgPSAzCisgICAg
ICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvdXQsIGVyciA9IGNhcHR1cmUucmVzZXQoKQorICAg
ICAgICAgICAgc3lzLnN0ZG91dC53cml0ZShvdXQpCisgICAgICAgICAgICBzeXMuc3RkZXJyLndy
aXRlKGVycikKKworICAgICAgICByZXMgPSBSdW5SZXN1bHQocmVwcmVjLnJldCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG91dC5zcGxpdCgiXG4iKSwgZXJyLnNwbGl0KCJcbiIpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgdGltZS50aW1lKCktbm93KQorICAgICAgICByZXMucmVwcmVjID0g
cmVwcmVjCisgICAgICAgIHJldHVybiByZXMKKworICAgIGRlZiBydW5weXRlc3Qoc2VsZiwgKmFy
Z3MsICoqa3dhcmdzKToKKyAgICAgICAgIiIiIFJ1biBweXRlc3QgaW5saW5lIG9yIGluIGEgc3Vi
cHJvY2VzcywgZGVwZW5kaW5nIG9uIHRoZSBjb21tYW5kIGxpbmUKKyAgICAgICAgb3B0aW9uICIt
LXJ1bnB5dGVzdCIgYW5kIHJldHVybiBhIDpweTpjbGFzczpgUnVuUmVzdWx0YC4KKworICAgICAg
ICAiIiIKKyAgICAgICAgYXJncyA9IHNlbGYuX2Vuc3VyZV9iYXNldGVtcChhcmdzKQorICAgICAg
ICByZXR1cm4gc2VsZi5fcnVucHl0ZXN0X21ldGhvZCgqYXJncywgKiprd2FyZ3MpCisKKyAgICBk
ZWYgX2Vuc3VyZV9iYXNldGVtcChzZWxmLCBhcmdzKToKKyAgICAgICAgYXJncyA9IFtzdHIoeCkg
Zm9yIHggaW4gYXJnc10KKyAgICAgICAgZm9yIHggaW4gYXJnczoKKyAgICAgICAgICAgIGlmIHN0
cih4KS5zdGFydHN3aXRoKCctLWJhc2V0ZW1wJyk6CisgICAgICAgICAgICAgICAgI3ByaW50ICgi
YmFzZWR0ZW1wIGV4aXN0czogJXMiICUoYXJncywpKQorICAgICAgICAgICAgICAgIGJyZWFrCisg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICBhcmdzLmFwcGVuZCgiLS1iYXNldGVtcD0lcyIgJSBz
ZWxmLnRtcGRpci5kaXJwYXRoKCdiYXNldGVtcCcpKQorICAgICAgICAgICAgI3ByaW50ICgiYWRk
ZWQgYmFzZXRlbXA6ICVzIiAlKGFyZ3MsKSkKKyAgICAgICAgcmV0dXJuIGFyZ3MKKworICAgIGRl
ZiBwYXJzZWNvbmZpZyhzZWxmLCAqYXJncyk6CisgICAgICAgICIiIlJldHVybiBhIG5ldyBweS50
ZXN0IENvbmZpZyBpbnN0YW5jZSBmcm9tIGdpdmVuIGNvbW1hbmRsaW5lIGFyZ3MuCisKKyAgICAg
ICAgVGhpcyBpbnZva2VzIHRoZSBweS50ZXN0IGJvb3RzdHJhcHBpbmcgY29kZSBpbiBfcHl0ZXN0
LmNvbmZpZworICAgICAgICB0byBjcmVhdGUgYSBuZXcgOnB5OmNsYXNzOmBfcHl0ZXN0LmNvcmUu
UGx1Z2luTWFuYWdlcmAgYW5kCisgICAgICAgIGNhbGwgdGhlIHB5dGVzdF9jbWRsaW5lX3BhcnNl
IGhvb2sgdG8gY3JlYXRlIG5ldworICAgICAgICA6cHk6Y2xhc3M6YF9weXRlc3QuY29uZmlnLkNv
bmZpZ2AgaW5zdGFuY2UuCisKKyAgICAgICAgSWYgOnB5OmF0dHI6YHBsdWdpbnNgIGhhcyBiZWVu
IHBvcHVsYXRlZCB0aGV5IHNob3VsZCBiZSBwbHVnaW4KKyAgICAgICAgbW9kdWxlcyB3aGljaCB3
aWxsIGJlIHJlZ2lzdGVyZWQgd2l0aCB0aGUgUGx1Z2luTWFuYWdlci4KKworICAgICAgICAiIiIK
KyAgICAgICAgYXJncyA9IHNlbGYuX2Vuc3VyZV9iYXNldGVtcChhcmdzKQorCisgICAgICAgIGlt
cG9ydCBfcHl0ZXN0LmNvbmZpZworICAgICAgICBjb25maWcgPSBfcHl0ZXN0LmNvbmZpZy5fcHJl
cGFyZWNvbmZpZyhhcmdzLCBzZWxmLnBsdWdpbnMpCisgICAgICAgICMgd2UgZG9uJ3Qga25vdyB3
aGF0IHRoZSB0ZXN0IHdpbGwgZG8gd2l0aCB0aGlzIGhhbGYtc2V0dXAgY29uZmlnCisgICAgICAg
ICMgb2JqZWN0IGFuZCB0aHVzIHdlIG1ha2Ugc3VyZSBpdCBnZXRzIHVuY29uZmlndXJlZCBwcm9w
ZXJseSBpbiBhbnkKKyAgICAgICAgIyBjYXNlIChvdGhlcndpc2UgY2FwdHVyaW5nIGNvdWxkIHN0
aWxsIGJlIGFjdGl2ZSwgZm9yIGV4YW1wbGUpCisgICAgICAgIHNlbGYucmVxdWVzdC5hZGRmaW5h
bGl6ZXIoY29uZmlnLl9lbnN1cmVfdW5jb25maWd1cmUpCisgICAgICAgIHJldHVybiBjb25maWcK
KworICAgIGRlZiBwYXJzZWNvbmZpZ3VyZShzZWxmLCAqYXJncyk6CisgICAgICAgICIiIlJldHVy
biBhIG5ldyBweS50ZXN0IGNvbmZpZ3VyZWQgQ29uZmlnIGluc3RhbmNlLgorCisgICAgICAgIFRo
aXMgcmV0dXJucyBhIG5ldyA6cHk6Y2xhc3M6YF9weXRlc3QuY29uZmlnLkNvbmZpZ2AgaW5zdGFu
Y2UKKyAgICAgICAgbGlrZSA6cHk6bWV0aDpgcGFyc2Vjb25maWdgLCBidXQgYWxzbyBjYWxscyB0
aGUKKyAgICAgICAgcHl0ZXN0X2NvbmZpZ3VyZSBob29rLgorCisgICAgICAgICIiIgorICAgICAg
ICBjb25maWcgPSBzZWxmLnBhcnNlY29uZmlnKCphcmdzKQorICAgICAgICBjb25maWcuX2RvX2Nv
bmZpZ3VyZSgpCisgICAgICAgIHNlbGYucmVxdWVzdC5hZGRmaW5hbGl6ZXIoY29uZmlnLl9lbnN1
cmVfdW5jb25maWd1cmUpCisgICAgICAgIHJldHVybiBjb25maWcKKworICAgIGRlZiBnZXRpdGVt
KHNlbGYsICBzb3VyY2UsIGZ1bmNuYW1lPSJ0ZXN0X2Z1bmMiKToKKyAgICAgICAgIiIiUmV0dXJu
IHRoZSB0ZXN0IGl0ZW0gZm9yIGEgdGVzdCBmdW5jdGlvbi4KKworICAgICAgICBUaGlzIHdyaXRl
cyB0aGUgc291cmNlIHRvIGEgcHl0aG9uIGZpbGUgYW5kIHJ1bnMgcHkudGVzdCdzCisgICAgICAg
IGNvbGxlY3Rpb24gb24gdGhlIHJlc3VsdGluZyBtb2R1bGUsIHJldHVybmluZyB0aGUgdGVzdCBp
dGVtCisgICAgICAgIGZvciB0aGUgcmVxdWVzdGVkIGZ1bmN0aW9uIG5hbWUuCisKKyAgICAgICAg
OnBhcmFtIHNvdXJjZTogVGhlIG1vZHVsZSBzb3VyY2UuCisKKyAgICAgICAgOnBhcmFtIGZ1bmNu
YW1lOiBUaGUgbmFtZSBvZiB0aGUgdGVzdCBmdW5jdGlvbiBmb3Igd2hpY2ggdGhlCisgICAgICAg
ICAgIEl0ZW0gbXVzdCBiZSByZXR1cm5lZC4KKworICAgICAgICAiIiIKKyAgICAgICAgaXRlbXMg
PSBzZWxmLmdldGl0ZW1zKHNvdXJjZSkKKyAgICAgICAgZm9yIGl0ZW0gaW4gaXRlbXM6CisgICAg
ICAgICAgICBpZiBpdGVtLm5hbWUgPT0gZnVuY25hbWU6CisgICAgICAgICAgICAgICAgcmV0dXJu
IGl0ZW0KKyAgICAgICAgYXNzZXJ0IDAsICIlciBpdGVtIG5vdCBmb3VuZCBpbiBtb2R1bGU6XG4l
c1xuaXRlbXM6ICVzIiAlKAorICAgICAgICAgICAgICAgICAgZnVuY25hbWUsIHNvdXJjZSwgaXRl
bXMpCisKKyAgICBkZWYgZ2V0aXRlbXMoc2VsZiwgIHNvdXJjZSk6CisgICAgICAgICIiIlJldHVy
biBhbGwgdGVzdCBpdGVtcyBjb2xsZWN0ZWQgZnJvbSB0aGUgbW9kdWxlLgorCisgICAgICAgIFRo
aXMgd3JpdGVzIHRoZSBzb3VyY2UgdG8gYSBweXRob24gZmlsZSBhbmQgcnVucyBweS50ZXN0J3MK
KyAgICAgICAgY29sbGVjdGlvbiBvbiB0aGUgcmVzdWx0aW5nIG1vZHVsZSwgcmV0dXJuaW5nIGFs
bCB0ZXN0IGl0ZW1zCisgICAgICAgIGNvbnRhaW5lZCB3aXRoaW4uCisKKyAgICAgICAgIiIiCisg
ICAgICAgIG1vZGNvbCA9IHNlbGYuZ2V0bW9kdWxlY29sKHNvdXJjZSkKKyAgICAgICAgcmV0dXJu
IHNlbGYuZ2VuaXRlbXMoW21vZGNvbF0pCisKKyAgICBkZWYgZ2V0bW9kdWxlY29sKHNlbGYsICBz
b3VyY2UsIGNvbmZpZ2FyZ3M9KCksIHdpdGhpbml0PUZhbHNlKToKKyAgICAgICAgIiIiUmV0dXJu
IHRoZSBtb2R1bGUgY29sbGVjdGlvbiBub2RlIGZvciBgYHNvdXJjZWBgLgorCisgICAgICAgIFRo
aXMgd3JpdGVzIGBgc291cmNlYGAgdG8gYSBmaWxlIHVzaW5nIDpweTptZXRoOmBtYWtlcHlmaWxl
YAorICAgICAgICBhbmQgdGhlbiBydW5zIHRoZSBweS50ZXN0IGNvbGxlY3Rpb24gb24gaXQsIHJl
dHVybmluZyB0aGUKKyAgICAgICAgY29sbGVjdGlvbiBub2RlIGZvciB0aGUgdGVzdCBtb2R1bGUu
CisKKyAgICAgICAgOnBhcmFtIHNvdXJjZTogVGhlIHNvdXJjZSBjb2RlIG9mIHRoZSBtb2R1bGUg
dG8gY29sbGVjdC4KKworICAgICAgICA6cGFyYW0gY29uZmlnYXJnczogQW55IGV4dHJhIGFyZ3Vt
ZW50cyB0byBwYXNzIHRvCisgICAgICAgICAgIDpweTptZXRoOmBwYXJzZWNvbmZpZ3VyZWAuCisK
KyAgICAgICAgOnBhcmFtIHdpdGhpbml0OiBXaGV0aGVyIHRvIGFsc28gd3JpdGUgYSBgYF9faW5p
dF9fLnB5YGAgZmlsZQorICAgICAgICAgICB0byB0aGUgdGVtcG9yYXJseSBkaXJlY3RvcnkgdG8g
ZW5zdXJlIGl0IGlzIGEgcGFja2FnZS4KKworICAgICAgICAiIiIKKyAgICAgICAga3cgPSB7c2Vs
Zi5yZXF1ZXN0LmZ1bmN0aW9uLl9fbmFtZV9fOiBTb3VyY2Uoc291cmNlKS5zdHJpcCgpfQorICAg
ICAgICBwYXRoID0gc2VsZi5tYWtlcHlmaWxlKCoqa3cpCisgICAgICAgIGlmIHdpdGhpbml0Ogor
ICAgICAgICAgICAgc2VsZi5tYWtlcHlmaWxlKF9faW5pdF9fID0gIiMiKQorICAgICAgICBzZWxm
LmNvbmZpZyA9IGNvbmZpZyA9IHNlbGYucGFyc2Vjb25maWd1cmUocGF0aCwgKmNvbmZpZ2FyZ3Mp
CisgICAgICAgIG5vZGUgPSBzZWxmLmdldG5vZGUoY29uZmlnLCBwYXRoKQorICAgICAgICByZXR1
cm4gbm9kZQorCisgICAgZGVmIGNvbGxlY3RfYnlfbmFtZShzZWxmLCBtb2Rjb2wsIG5hbWUpOgor
ICAgICAgICAiIiJSZXR1cm4gdGhlIGNvbGxlY3Rpb24gbm9kZSBmb3IgbmFtZSBmcm9tIHRoZSBt
b2R1bGUgY29sbGVjdGlvbi4KKworICAgICAgICBUaGlzIHdpbGwgc2VhcmNoIGEgbW9kdWxlIGNv
bGxlY3Rpb24gbm9kZSBmb3IgYSBjb2xsZWN0aW9uCisgICAgICAgIG5vZGUgbWF0Y2hpbmcgdGhl
IGdpdmVuIG5hbWUuCisKKyAgICAgICAgOnBhcmFtIG1vZGNvbDogQSBtb2R1bGUgY29sbGVjdGlv
biBub2RlLCBzZWUKKyAgICAgICAgICAgOnB5Om1ldGg6YGdldG1vZHVsZWNvbGAuCisKKyAgICAg
ICAgOnBhcmFtIG5hbWU6IFRoZSBuYW1lIG9mIHRoZSBub2RlIHRvIHJldHVybi4KKworICAgICAg
ICAiIiIKKyAgICAgICAgZm9yIGNvbGl0ZW0gaW4gbW9kY29sLl9tZW1vY29sbGVjdCgpOgorICAg
ICAgICAgICAgaWYgY29saXRlbS5uYW1lID09IG5hbWU6CisgICAgICAgICAgICAgICAgcmV0dXJu
IGNvbGl0ZW0KKworICAgIGRlZiBwb3BlbihzZWxmLCBjbWRhcmdzLCBzdGRvdXQsIHN0ZGVyciwg
Kiprdyk6CisgICAgICAgICIiIkludm9rZSBzdWJwcm9jZXNzLlBvcGVuLgorCisgICAgICAgIFRo
aXMgY2FsbHMgc3VicHJvY2Vzcy5Qb3BlbiBtYWtpbmcgc3VyZSB0aGUgY3VycmVudCB3b3JraW5n
CisgICAgICAgIGRpcmVjdG9yeSBpcyB0aGUgUFlUSE9OUEFUSC4KKworICAgICAgICBZb3UgcHJv
YmFibHkgd2FudCB0byB1c2UgOnB5Om1ldGg6YHJ1bmAgaW5zdGVhZC4KKworICAgICAgICAiIiIK
KyAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAgZW52WydQWVRIT05QQVRI
J10gPSBvcy5wYXRoc2VwLmpvaW4oZmlsdGVyKE5vbmUsIFsKKyAgICAgICAgICAgIHN0cihvcy5n
ZXRjd2QoKSksIGVudi5nZXQoJ1BZVEhPTlBBVEgnLCAnJyldKSkKKyAgICAgICAga3dbJ2Vudidd
ID0gZW52CisgICAgICAgIHJldHVybiBzdWJwcm9jZXNzLlBvcGVuKGNtZGFyZ3MsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdGRvdXQsIHN0ZGVycj1zdGRlcnIsICoq
a3cpCisKKyAgICBkZWYgcnVuKHNlbGYsICpjbWRhcmdzKToKKyAgICAgICAgIiIiUnVuIGEgY29t
bWFuZCB3aXRoIGFyZ3VtZW50cy4KKworICAgICAgICBSdW4gYSBwcm9jZXNzIHVzaW5nIHN1YnBy
b2Nlc3MuUG9wZW4gc2F2aW5nIHRoZSBzdGRvdXQgYW5kCisgICAgICAgIHN0ZGVyci4KKworICAg
ICAgICBSZXR1cm5zIGEgOnB5OmNsYXNzOmBSdW5SZXN1bHRgLgorCisgICAgICAgICIiIgorICAg
ICAgICByZXR1cm4gc2VsZi5fcnVuKCpjbWRhcmdzKQorCisgICAgZGVmIF9ydW4oc2VsZiwgKmNt
ZGFyZ3MpOgorICAgICAgICBjbWRhcmdzID0gW3N0cih4KSBmb3IgeCBpbiBjbWRhcmdzXQorICAg
ICAgICBwMSA9IHNlbGYudG1wZGlyLmpvaW4oInN0ZG91dCIpCisgICAgICAgIHAyID0gc2VsZi50
bXBkaXIuam9pbigic3RkZXJyIikKKyAgICAgICAgcHJpbnRfKCJydW5uaW5nOiIsICcgJy5qb2lu
KGNtZGFyZ3MpKQorICAgICAgICBwcmludF8oIiAgICAgaW46Iiwgc3RyKHB5LnBhdGgubG9jYWwo
KSkpCisgICAgICAgIGYxID0gY29kZWNzLm9wZW4oc3RyKHAxKSwgInciLCBlbmNvZGluZz0idXRm
OCIpCisgICAgICAgIGYyID0gY29kZWNzLm9wZW4oc3RyKHAyKSwgInciLCBlbmNvZGluZz0idXRm
OCIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG5vdyA9IHRpbWUudGltZSgpCisgICAgICAg
ICAgICBwb3BlbiA9IHNlbGYucG9wZW4oY21kYXJncywgc3Rkb3V0PWYxLCBzdGRlcnI9ZjIsCisg
ICAgICAgICAgICAgICAgY2xvc2VfZmRzPShzeXMucGxhdGZvcm0gIT0gIndpbjMyIikpCisgICAg
ICAgICAgICByZXQgPSBwb3Blbi53YWl0KCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAg
IGYxLmNsb3NlKCkKKyAgICAgICAgICAgIGYyLmNsb3NlKCkKKyAgICAgICAgZjEgPSBjb2RlY3Mu
b3BlbihzdHIocDEpLCAiciIsIGVuY29kaW5nPSJ1dGY4IikKKyAgICAgICAgZjIgPSBjb2RlY3Mu
b3BlbihzdHIocDIpLCAiciIsIGVuY29kaW5nPSJ1dGY4IikKKyAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgb3V0ID0gZjEucmVhZCgpLnNwbGl0bGluZXMoKQorICAgICAgICAgICAgZXJyID0gZjIu
cmVhZCgpLnNwbGl0bGluZXMoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZjEuY2xv
c2UoKQorICAgICAgICAgICAgZjIuY2xvc2UoKQorICAgICAgICBzZWxmLl9kdW1wX2xpbmVzKG91
dCwgc3lzLnN0ZG91dCkKKyAgICAgICAgc2VsZi5fZHVtcF9saW5lcyhlcnIsIHN5cy5zdGRlcnIp
CisgICAgICAgIHJldHVybiBSdW5SZXN1bHQocmV0LCBvdXQsIGVyciwgdGltZS50aW1lKCktbm93
KQorCisgICAgZGVmIF9kdW1wX2xpbmVzKHNlbGYsIGxpbmVzLCBmcCk6CisgICAgICAgIHRyeToK
KyAgICAgICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICAgICAgICAgIHB5LmJ1aWx0
aW4ucHJpbnRfKGxpbmUsIGZpbGU9ZnApCisgICAgICAgIGV4Y2VwdCBVbmljb2RlRW5jb2RlRXJy
b3I6CisgICAgICAgICAgICBwcmludCgiY291bGRuJ3QgcHJpbnQgdG8gJXMgYmVjYXVzZSBvZiBl
bmNvZGluZyIgJSAoZnAsKSkKKworICAgIGRlZiBfZ2V0cHl0ZXN0YXJncyhzZWxmKToKKyAgICAg
ICAgIyB3ZSBjYW5ub3QgdXNlICIoc3lzLmV4ZWN1dGFibGUsc2NyaXB0KSIKKyAgICAgICAgIyBi
ZWNhdXNlIG9uIHdpbmRvd3MgdGhlIHNjcmlwdCBpcyBlLmcuIGEgcHkudGVzdC5leGUKKyAgICAg
ICAgcmV0dXJuIChzeXMuZXhlY3V0YWJsZSwgX3B5dGVzdF9mdWxscGF0aCwpICMgbm9xYQorCisg
ICAgZGVmIHJ1bnB5dGhvbihzZWxmLCBzY3JpcHQpOgorICAgICAgICAiIiJSdW4gYSBweXRob24g
c2NyaXB0IHVzaW5nIHN5cy5leGVjdXRhYmxlIGFzIGludGVycHJldGVyLgorCisgICAgICAgIFJl
dHVybnMgYSA6cHk6Y2xhc3M6YFJ1blJlc3VsdGAuCisgICAgICAgICIiIgorICAgICAgICByZXR1
cm4gc2VsZi5ydW4oc3lzLmV4ZWN1dGFibGUsIHNjcmlwdCkKKworICAgIGRlZiBydW5weXRob25f
YyhzZWxmLCBjb21tYW5kKToKKyAgICAgICAgIiIiUnVuIHB5dGhvbiAtYyAiY29tbWFuZCIsIHJl
dHVybiBhIDpweTpjbGFzczpgUnVuUmVzdWx0YC4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYucnVu
KHN5cy5leGVjdXRhYmxlLCAiLWMiLCBjb21tYW5kKQorCisgICAgZGVmIHJ1bnB5dGVzdF9zdWJw
cm9jZXNzKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICIiIlJ1biBweS50ZXN0IGFz
IGEgc3VicHJvY2VzcyB3aXRoIGdpdmVuIGFyZ3VtZW50cy4KKworICAgICAgICBBbnkgcGx1Z2lu
cyBhZGRlZCB0byB0aGUgOnB5OmF0dHI6YHBsdWdpbnNgIGxpc3Qgd2lsbCBhZGRlZAorICAgICAg
ICB1c2luZyB0aGUgYGAtcGBgIGNvbW1hbmQgbGluZSBvcHRpb24uICBBZGR0aW9uYWxseQorICAg
ICAgICBgYC0tYmFzZXRlbXBgYCBpcyB1c2VkIHB1dCBhbnkgdGVtcG9yYXJ5IGZpbGVzIGFuZCBk
aXJlY3RvcmllcworICAgICAgICBpbiBhIG51bWJlcmVkIGRpcmVjdG9yeSBwcmVmaXhlZCB3aXRo
ICJydW5weXRlc3QtIiBzbyB0aGV5IGRvCisgICAgICAgIG5vdCBjb25mbGljdCB3aXRoIHRoZSBu
b3JtYWwgbnVtYmVyZCBweXRlc3QgbG9jYXRpb24gZm9yCisgICAgICAgIHRlbXBvcmFyeSBmaWxl
cyBhbmQgZGlyZWN0b3JpZXMuCisKKyAgICAgICAgUmV0dXJucyBhIDpweTpjbGFzczpgUnVuUmVz
dWx0YC4KKworICAgICAgICAiIiIKKyAgICAgICAgcCA9IHB5LnBhdGgubG9jYWwubWFrZV9udW1i
ZXJlZF9kaXIocHJlZml4PSJydW5weXRlc3QtIiwKKyAgICAgICAgICAgIGtlZXA9Tm9uZSwgcm9v
dGRpcj1zZWxmLnRtcGRpcikKKyAgICAgICAgYXJncyA9ICgnLS1iYXNldGVtcD0lcycgJSBwLCAp
ICsgYXJncworICAgICAgICAjZm9yIHggaW4gYXJnczoKKyAgICAgICAgIyAgICBpZiAnLS1jb25m
Y3V0ZGlyJyBpbiBzdHIoeCk6CisgICAgICAgICMgICAgICAgIGJyZWFrCisgICAgICAgICNlbHNl
OgorICAgICAgICAjICAgIHBhc3MKKyAgICAgICAgIyAgICBhcmdzID0gKCctLWNvbmZjdXRkaXI9
LicsKSArIGFyZ3MKKyAgICAgICAgcGx1Z2lucyA9IFt4IGZvciB4IGluIHNlbGYucGx1Z2lucyBp
ZiBpc2luc3RhbmNlKHgsIHN0cildCisgICAgICAgIGlmIHBsdWdpbnM6CisgICAgICAgICAgICBh
cmdzID0gKCctcCcsIHBsdWdpbnNbMF0pICsgYXJncworICAgICAgICBhcmdzID0gc2VsZi5fZ2V0
cHl0ZXN0YXJncygpICsgYXJncworICAgICAgICByZXR1cm4gc2VsZi5ydW4oKmFyZ3MpCisKKyAg
ICBkZWYgc3Bhd25fcHl0ZXN0KHNlbGYsIHN0cmluZywgZXhwZWN0X3RpbWVvdXQ9MTAuMCk6Cisg
ICAgICAgICIiIlJ1biBweS50ZXN0IHVzaW5nIHBleHBlY3QuCisKKyAgICAgICAgVGhpcyBtYWtl
cyBzdXJlIHRvIHVzZSB0aGUgcmlnaHQgcHkudGVzdCBhbmQgc2V0cyB1cCB0aGUKKyAgICAgICAg
dGVtcG9yYXJ5IGRpcmVjdG9yeSBsb2NhdGlvbnMuCisKKyAgICAgICAgVGhlIHBleHBlY3QgY2hp
bGQgaXMgcmV0dXJuZWQuCisKKyAgICAgICAgIiIiCisgICAgICAgIGJhc2V0ZW1wID0gc2VsZi50
bXBkaXIubWtkaXIoInBleHBlY3QiKQorICAgICAgICBpbnZva2UgPSAiICIuam9pbihtYXAoc3Ry
LCBzZWxmLl9nZXRweXRlc3RhcmdzKCkpKQorICAgICAgICBjbWQgPSAiJXMgLS1iYXNldGVtcD0l
cyAlcyIgJSAoaW52b2tlLCBiYXNldGVtcCwgc3RyaW5nKQorICAgICAgICByZXR1cm4gc2VsZi5z
cGF3bihjbWQsIGV4cGVjdF90aW1lb3V0PWV4cGVjdF90aW1lb3V0KQorCisgICAgZGVmIHNwYXdu
KHNlbGYsIGNtZCwgZXhwZWN0X3RpbWVvdXQ9MTAuMCk6CisgICAgICAgICIiIlJ1biBhIGNvbW1h
bmQgdXNpbmcgcGV4cGVjdC4KKworICAgICAgICBUaGUgcGV4cGVjdCBjaGlsZCBpcyByZXR1cm5l
ZC4KKyAgICAgICAgIiIiCisgICAgICAgIHBleHBlY3QgPSBweXRlc3QuaW1wb3J0b3Jza2lwKCJw
ZXhwZWN0IiwgIjMuMCIpCisgICAgICAgIGlmIGhhc2F0dHIoc3lzLCAncHlweV92ZXJzaW9uX2lu
Zm8nKSBhbmQgJzY0JyBpbiBwbGF0Zm9ybS5tYWNoaW5lKCk6CisgICAgICAgICAgICBweXRlc3Qu
c2tpcCgicHlweS02NCBiaXQgbm90IHN1cHBvcnRlZCIpCisgICAgICAgIGlmIHN5cy5wbGF0Zm9y
bSA9PSAiZGFyd2luIjoKKyAgICAgICAgICAgIHB5dGVzdC54ZmFpbCgicGV4cGVjdCBkb2VzIG5v
dCB3b3JrIHJlbGlhYmx5IG9uIGRhcndpbj8hIikKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtLnN0
YXJ0c3dpdGgoImZyZWVic2QiKToKKyAgICAgICAgICAgIHB5dGVzdC54ZmFpbCgicGV4cGVjdCBk
b2VzIG5vdCB3b3JrIHJlbGlhYmx5IG9uIGZyZWVic2QiKQorICAgICAgICBsb2dmaWxlID0gc2Vs
Zi50bXBkaXIuam9pbigic3Bhd24ub3V0Iikub3Blbigid2IiKQorICAgICAgICBjaGlsZCA9IHBl
eHBlY3Quc3Bhd24oY21kLCBsb2dmaWxlPWxvZ2ZpbGUpCisgICAgICAgIHNlbGYucmVxdWVzdC5h
ZGRmaW5hbGl6ZXIobG9nZmlsZS5jbG9zZSkKKyAgICAgICAgY2hpbGQudGltZW91dCA9IGV4cGVj
dF90aW1lb3V0CisgICAgICAgIHJldHVybiBjaGlsZAorCitkZWYgZ2V0ZGVjb2RlZChvdXQpOgor
ICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gb3V0LmRlY29kZSgidXRmLTgiKQorICAg
ICAgICBleGNlcHQgVW5pY29kZURlY29kZUVycm9yOgorICAgICAgICAgICAgcmV0dXJuICJJTlRF
Uk5BTCBub3QtdXRmOC1kZWNvZGVhYmxlLCB0cnVuY2F0ZWQgc3RyaW5nOlxuJXMiICUgKAorICAg
ICAgICAgICAgICAgICAgICBweS5pby5zYWZlcmVwcihvdXQpLCkKKworCitjbGFzcyBMaW5lQ29t
cDoKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuc3RyaW5naW8gPSBweS5p
by5UZXh0SU8oKQorCisgICAgZGVmIGFzc2VydF9jb250YWluc19saW5lcyhzZWxmLCBsaW5lczIp
OgorICAgICAgICAiIiIgYXNzZXJ0IHRoYXQgbGluZXMyIGFyZSBjb250YWluZWQgKGxpbmVhcmx5
KSBpbiBsaW5lczEuCisgICAgICAgICAgICByZXR1cm4gYSBsaXN0IG9mIGV4dHJhbGluZXMgZm91
bmQuCisgICAgICAgICIiIgorICAgICAgICBfX3RyYWNlYmFja2hpZGVfXyA9IFRydWUKKyAgICAg
ICAgdmFsID0gc2VsZi5zdHJpbmdpby5nZXR2YWx1ZSgpCisgICAgICAgIHNlbGYuc3RyaW5naW8u
dHJ1bmNhdGUoMCkKKyAgICAgICAgc2VsZi5zdHJpbmdpby5zZWVrKDApCisgICAgICAgIGxpbmVz
MSA9IHZhbC5zcGxpdCgiXG4iKQorICAgICAgICByZXR1cm4gTGluZU1hdGNoZXIobGluZXMxKS5m
bm1hdGNoX2xpbmVzKGxpbmVzMikKKworCitjbGFzcyBMaW5lTWF0Y2hlcjoKKyAgICAiIiJGbGV4
aWJsZSBtYXRjaGluZyBvZiB0ZXh0LgorCisgICAgVGhpcyBpcyBhIGNvbnZlbmllbmNlIGNsYXNz
IHRvIHRlc3QgbGFyZ2UgdGV4dHMgbGlrZSB0aGUgb3V0cHV0IG9mCisgICAgY29tbWFuZHMuCisK
KyAgICBUaGUgY29uc3RydWN0b3IgdGFrZXMgYSBsaXN0IG9mIGxpbmVzIHdpdGhvdXQgdGhlaXIg
dHJhaWxpbmcKKyAgICBuZXdsaW5lcywgaS5lLiBgYHRleHQuc3BsaXRsaW5lcygpYGAuCisKKyAg
ICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAgbGluZXMpOgorICAgICAgICBzZWxmLmxp
bmVzID0gbGluZXMKKworICAgIGRlZiBzdHIoc2VsZik6CisgICAgICAgICIiIlJldHVybiB0aGUg
ZW50aXJlIG9yaWdpbmFsIHRleHQuIiIiCisgICAgICAgIHJldHVybiAiXG4iLmpvaW4oc2VsZi5s
aW5lcykKKworICAgIGRlZiBfZ2V0bGluZXMoc2VsZiwgbGluZXMyKToKKyAgICAgICAgaWYgaXNp
bnN0YW5jZShsaW5lczIsIHN0cik6CisgICAgICAgICAgICBsaW5lczIgPSBTb3VyY2UobGluZXMy
KQorICAgICAgICBpZiBpc2luc3RhbmNlKGxpbmVzMiwgU291cmNlKToKKyAgICAgICAgICAgIGxp
bmVzMiA9IGxpbmVzMi5zdHJpcCgpLmxpbmVzCisgICAgICAgIHJldHVybiBsaW5lczIKKworICAg
IGRlZiBmbm1hdGNoX2xpbmVzX3JhbmRvbShzZWxmLCBsaW5lczIpOgorICAgICAgICAiIiJDaGVj
ayBsaW5lcyBleGlzdCBpbiB0aGUgb3V0cHV0LgorCisgICAgICAgIFRoZSBhcmd1bWVudCBpcyBh
IGxpc3Qgb2YgbGluZXMgd2hpY2ggaGF2ZSB0byBvY2N1ciBpbiB0aGUKKyAgICAgICAgb3V0cHV0
LCBpbiBhbnkgb3JkZXIuICBFYWNoIGxpbmUgY2FuIGNvbnRhaW4gZ2xvYiB3aGlsZGNhcmRzLgor
CisgICAgICAgICIiIgorICAgICAgICBsaW5lczIgPSBzZWxmLl9nZXRsaW5lcyhsaW5lczIpCisg
ICAgICAgIGZvciBsaW5lIGluIGxpbmVzMjoKKyAgICAgICAgICAgIGZvciB4IGluIHNlbGYubGlu
ZXM6CisgICAgICAgICAgICAgICAgaWYgbGluZSA9PSB4IG9yIGZubWF0Y2goeCwgbGluZSk6Cisg
ICAgICAgICAgICAgICAgICAgIHByaW50XygibWF0Y2hlZDogIiwgcmVwcihsaW5lKSkKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAg
cmFpc2UgVmFsdWVFcnJvcigibGluZSAlciBub3QgZm91bmQgaW4gb3V0cHV0IiAlIGxpbmUpCisK
KyAgICBkZWYgZ2V0X2xpbmVzX2FmdGVyKHNlbGYsIGZubGluZSk6CisgICAgICAgICIiIlJldHVy
biBhbGwgbGluZXMgZm9sbG93aW5nIHRoZSBnaXZlbiBsaW5lIGluIHRoZSB0ZXh0LgorCisgICAg
ICAgIFRoZSBnaXZlbiBsaW5lIGNhbiBjb250YWluIGdsb2Igd2lsZGNhcmRzLgorICAgICAgICAi
IiIKKyAgICAgICAgZm9yIGksIGxpbmUgaW4gZW51bWVyYXRlKHNlbGYubGluZXMpOgorICAgICAg
ICAgICAgaWYgZm5saW5lID09IGxpbmUgb3IgZm5tYXRjaChsaW5lLCBmbmxpbmUpOgorICAgICAg
ICAgICAgICAgIHJldHVybiBzZWxmLmxpbmVzW2krMTpdCisgICAgICAgIHJhaXNlIFZhbHVlRXJy
b3IoImxpbmUgJXIgbm90IGZvdW5kIGluIG91dHB1dCIgJSBmbmxpbmUpCisKKyAgICBkZWYgZm5t
YXRjaF9saW5lcyhzZWxmLCBsaW5lczIpOgorICAgICAgICAiIiJTZWFyY2ggdGhlIHRleHQgZm9y
IG1hdGNoaW5nIGxpbmVzLgorCisgICAgICAgIFRoZSBhcmd1bWVudCBpcyBhIGxpc3Qgb2YgbGlu
ZXMgd2hpY2ggaGF2ZSB0byBtYXRjaCBhbmQgY2FuCisgICAgICAgIHVzZSBnbG9iIHdpbGRjYXJk
cy4gIElmIHRoZXkgZG8gbm90IG1hdGNoIGFuIHB5dGVzdC5mYWlsKCkgaXMKKyAgICAgICAgY2Fs
bGVkLiAgVGhlIG1hdGNoZXMgYW5kIG5vbi1tYXRjaGVzIGFyZSBhbHNvIHByaW50ZWQgb24KKyAg
ICAgICAgc3Rkb3V0LgorCisgICAgICAgICIiIgorICAgICAgICBkZWYgc2hvdyhhcmcxLCBhcmcy
KToKKyAgICAgICAgICAgIHB5LmJ1aWx0aW4ucHJpbnRfKGFyZzEsIGFyZzIsIGZpbGU9c3lzLnN0
ZGVycikKKyAgICAgICAgbGluZXMyID0gc2VsZi5fZ2V0bGluZXMobGluZXMyKQorICAgICAgICBs
aW5lczEgPSBzZWxmLmxpbmVzWzpdCisgICAgICAgIG5leHRsaW5lID0gTm9uZQorICAgICAgICBl
eHRyYWxpbmVzID0gW10KKyAgICAgICAgX190cmFjZWJhY2toaWRlX18gPSBUcnVlCisgICAgICAg
IGZvciBsaW5lIGluIGxpbmVzMjoKKyAgICAgICAgICAgIG5vbWF0Y2hwcmludGVkID0gRmFsc2UK
KyAgICAgICAgICAgIHdoaWxlIGxpbmVzMToKKyAgICAgICAgICAgICAgICBuZXh0bGluZSA9IGxp
bmVzMS5wb3AoMCkKKyAgICAgICAgICAgICAgICBpZiBsaW5lID09IG5leHRsaW5lOgorICAgICAg
ICAgICAgICAgICAgICBzaG93KCJleGFjdCBtYXRjaDoiLCByZXByKGxpbmUpKQorICAgICAgICAg
ICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGVsaWYgZm5tYXRjaChuZXh0bGluZSwg
bGluZSk6CisgICAgICAgICAgICAgICAgICAgIHNob3coImZubWF0Y2g6IiwgcmVwcihsaW5lKSkK
KyAgICAgICAgICAgICAgICAgICAgc2hvdygiICAgd2l0aDoiLCByZXByKG5leHRsaW5lKSkKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgICAgICAgICBpZiBub3Qgbm9tYXRjaHByaW50ZWQ6CisgICAgICAgICAgICAgICAgICAgICAg
ICBzaG93KCJub21hdGNoOiIsIHJlcHIobGluZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBu
b21hdGNocHJpbnRlZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgc2hvdygiICAgIGFuZDoi
LCByZXByKG5leHRsaW5lKSkKKyAgICAgICAgICAgICAgICBleHRyYWxpbmVzLmFwcGVuZChuZXh0
bGluZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHl0ZXN0LmZhaWwoInJl
bWFpbnMgdW5tYXRjaGVkOiAlciwgc2VlIHN0ZGVyciIgJSAobGluZSwpKQpkaWZmIC0tZ2l0IGEv
V2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L3B5dGhvbi5w
eSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9weXRo
b24ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjM1ODBlYWUwNzRm
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5
dGVzdC9fcHl0ZXN0L3B5dGhvbi5weQpAQCAtMCwwICsxLDIzMDIgQEAKKyIiIiBQeXRob24gdGVz
dCBkaXNjb3ZlcnksIHNldHVwIGFuZCBydW4gb2YgdGVzdCBmdW5jdGlvbnMuICIiIgoraW1wb3J0
IGZubWF0Y2gKK2ltcG9ydCBmdW5jdG9vbHMKK2ltcG9ydCBpbnNwZWN0CitpbXBvcnQgcmUKK2lt
cG9ydCB0eXBlcworaW1wb3J0IHN5cworCitpbXBvcnQgcHkKK2ltcG9ydCBweXRlc3QKK2Zyb20g
X3B5dGVzdC5fY29kZS5jb2RlIGltcG9ydCBUZXJtaW5hbFJlcHIKK2Zyb20gX3B5dGVzdC5tYXJr
IGltcG9ydCBNYXJrRGVjb3JhdG9yLCBNYXJrZXJFcnJvcgorCit0cnk6CisgICAgaW1wb3J0IGVu
dW0KK2V4Y2VwdCBJbXBvcnRFcnJvcjogICMgcHJhZ21hOiBubyBjb3ZlcgorICAgICMgT25seSBh
dmFpbGFibGUgaW4gUHl0aG9uIDMuNCsgb3IgYXMgYSBiYWNrcG9ydAorICAgIGVudW0gPSBOb25l
CisKK2ltcG9ydCBfcHl0ZXN0CitpbXBvcnQgX3B5dGVzdC5fcGx1Z2d5IGFzIHBsdWdneQorCitj
dXRkaXIyID0gcHkucGF0aC5sb2NhbChfcHl0ZXN0Ll9fZmlsZV9fKS5kaXJwYXRoKCkKK2N1dGRp
cjEgPSBweS5wYXRoLmxvY2FsKHBsdWdneS5fX2ZpbGVfXy5yc3RyaXAoIm9jIikpCisKKworTm9u
ZVR5cGUgPSB0eXBlKE5vbmUpCitOT1RTRVQgPSBvYmplY3QoKQoraXNmdW5jdGlvbiA9IGluc3Bl
Y3QuaXNmdW5jdGlvbgoraXNjbGFzcyA9IGluc3BlY3QuaXNjbGFzcworY2FsbGFibGUgPSBweS5i
dWlsdGluLmNhbGxhYmxlCisjIHVzZWQgdG8gd29yayBhcm91bmQgYSBweXRob24yIGV4Y2VwdGlv
biBpbmZvIGxlYWsKK2V4Y19jbGVhciA9IGdldGF0dHIoc3lzLCAnZXhjX2NsZWFyJywgbGFtYmRh
OiBOb25lKQorIyBUaGUgdHlwZSBvZiByZS5jb21waWxlIG9iamVjdHMgaXMgbm90IGV4cG9zZWQg
aW4gUHl0aG9uLgorUkVHRVhfVFlQRSA9IHR5cGUocmUuY29tcGlsZSgnJykpCisKK19QWTMgPSBz
eXMudmVyc2lvbl9pbmZvID4gKDMsIDApCitfUFkyID0gbm90IF9QWTMKKworCitpZiBoYXNhdHRy
KGluc3BlY3QsICdzaWduYXR1cmUnKToKKyAgICBkZWYgX2Zvcm1hdF9hcmdzKGZ1bmMpOgorICAg
ICAgICByZXR1cm4gc3RyKGluc3BlY3Quc2lnbmF0dXJlKGZ1bmMpKQorZWxzZToKKyAgICBkZWYg
X2Zvcm1hdF9hcmdzKGZ1bmMpOgorICAgICAgICByZXR1cm4gaW5zcGVjdC5mb3JtYXRhcmdzcGVj
KCppbnNwZWN0LmdldGFyZ3NwZWMoZnVuYykpCisKK2lmICBzeXMudmVyc2lvbl9pbmZvWzoyXSA9
PSAoMiwgNik6CisgICAgZGVmIGlzY2xhc3Mob2JqZWN0KToKKyAgICAgICAgIiIiIFJldHVybiB0
cnVlIGlmIHRoZSBvYmplY3QgaXMgYSBjbGFzcy4gT3ZlcnJpZGVzIGluc3BlY3QuaXNjbGFzcyBm
b3IKKyAgICAgICAgcHl0aG9uIDIuNiBiZWNhdXNlIGl0IHdpbGwgcmV0dXJuIFRydWUgZm9yIG9i
amVjdHMgd2hpY2ggYWx3YXlzIHJldHVybgorICAgICAgICBzb21ldGhpbmcgb24gX19nZXRhdHRy
X18gY2FsbHMgKHNlZSAjMTAzNSkuCisgICAgICAgIEJhY2twb3J0IG9mIGh0dHBzOi8vaGcucHl0
aG9uLm9yZy9jcHl0aG9uL3Jldi8zNWJmOGY3YThlZGMKKyAgICAgICAgIiIiCisgICAgICAgIHJl
dHVybiBpc2luc3RhbmNlKG9iamVjdCwgKHR5cGUsIHR5cGVzLkNsYXNzVHlwZSkpCisKK2RlZiBf
aGFzX3Bvc2l0aW9uYWxfYXJnKGZ1bmMpOgorICAgIHJldHVybiBmdW5jLl9fY29kZV9fLmNvX2Fy
Z2NvdW50CisKKworZGVmIGZpbHRlcl90cmFjZWJhY2soZW50cnkpOgorICAgICMgZW50cnkucGF0
aCBtaWdodCBzb21ldGltZXMgcmV0dXJuIGEgc3RyIG9iamVjdCB3aGVuIHRoZSBlbnRyeQorICAg
ICMgcG9pbnRzIHRvIGR5bmFtaWNhbGx5IGdlbmVyYXRlZCBjb2RlCisgICAgIyBzZWUgaHR0cHM6
Ly9iaXRidWNrZXQub3JnL3B5dGVzdC1kZXYvcHkvaXNzdWVzLzcxCisgICAgcmF3X2ZpbGVuYW1l
ID0gZW50cnkuZnJhbWUuY29kZS5yYXcuY29fZmlsZW5hbWUKKyAgICBpc19nZW5lcmF0ZWQgPSAn
PCcgaW4gcmF3X2ZpbGVuYW1lIGFuZCAnPicgaW4gcmF3X2ZpbGVuYW1lCisgICAgaWYgaXNfZ2Vu
ZXJhdGVkOgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAjIGVudHJ5LnBhdGggbWlnaHQgcG9p
bnQgdG8gYW4gaW5leGlzdGluZyBmaWxlLCBpbiB3aGljaCBjYXNlIGl0IHdpbGwKKyAgICAjIGFs
c3NvIHJldHVybiBhIHN0ciBvYmplY3QuIHNlZSAjMTEzMworICAgIHAgPSBweS5wYXRoLmxvY2Fs
KGVudHJ5LnBhdGgpCisgICAgcmV0dXJuIHAgIT0gY3V0ZGlyMSBhbmQgbm90IHAucmVsdG8oY3V0
ZGlyMikKKworCitkZWYgZ2V0X3JlYWxfZnVuYyhvYmopOgorICAgICIiIiBnZXRzIHRoZSByZWFs
IGZ1bmN0aW9uIG9iamVjdCBvZiB0aGUgKHBvc3NpYmx5KSB3cmFwcGVkIG9iamVjdCBieQorICAg
IGZ1bmN0b29scy53cmFwcyBvciBmdW5jdG9vbHMucGFydGlhbC4KKyAgICAiIiIKKyAgICB3aGls
ZSBoYXNhdHRyKG9iaiwgIl9fd3JhcHBlZF9fIik6CisgICAgICAgIG9iaiA9IG9iai5fX3dyYXBw
ZWRfXworICAgIGlmIGlzaW5zdGFuY2Uob2JqLCBmdW5jdG9vbHMucGFydGlhbCk6CisgICAgICAg
IG9iaiA9IG9iai5mdW5jCisgICAgcmV0dXJuIG9iagorCitkZWYgZ2V0ZnNsaW5lbm8ob2JqKToK
KyAgICAjIHh4eCBsZXQgZGVjb3JhdG9ycyBldGMgc3BlY2lmeSBhIHNhbmUgb3JkZXJpbmcKKyAg
ICBvYmogPSBnZXRfcmVhbF9mdW5jKG9iaikKKyAgICBpZiBoYXNhdHRyKG9iaiwgJ3BsYWNlX2Fz
Jyk6CisgICAgICAgIG9iaiA9IG9iai5wbGFjZV9hcworICAgIGZzbGluZW5vID0gX3B5dGVzdC5f
Y29kZS5nZXRmc2xpbmVubyhvYmopCisgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZnNsaW5lbm9bMV0s
IGludCksIG9iagorICAgIHJldHVybiBmc2xpbmVubworCitkZWYgZ2V0aW1mdW5jKGZ1bmMpOgor
ICAgIHRyeToKKyAgICAgICAgcmV0dXJuIGZ1bmMuX19mdW5jX18KKyAgICBleGNlcHQgQXR0cmli
dXRlRXJyb3I6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBmdW5jLmltX2Z1bmMK
KyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIGZ1bmMK
KworZGVmIHNhZmVfZ2V0YXR0cihvYmplY3QsIG5hbWUsIGRlZmF1bHQpOgorICAgICIiIiBMaWtl
IGdldGF0dHIgYnV0IHJldHVybiBkZWZhdWx0IHVwb24gYW55IEV4Y2VwdGlvbi4KKworICAgIEF0
dHJpYnV0ZSBhY2Nlc3MgY2FuIHBvdGVudGlhbGx5IGZhaWwgZm9yICdldmlsJyBQeXRob24gb2Jq
ZWN0cy4KKyAgICBTZWUgaXNzdWUyMTQKKyAgICAiIiIKKyAgICB0cnk6CisgICAgICAgIHJldHVy
biBnZXRhdHRyKG9iamVjdCwgbmFtZSwgZGVmYXVsdCkKKyAgICBleGNlcHQgRXhjZXB0aW9uOgor
ICAgICAgICByZXR1cm4gZGVmYXVsdAorCisKK2NsYXNzIEZpeHR1cmVGdW5jdGlvbk1hcmtlcjoK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgc2NvcGUsIHBhcmFtcywKKyAgICAgICAgICAgICAgICAg
YXV0b3VzZT1GYWxzZSwgeWllbGRjdHg9RmFsc2UsIGlkcz1Ob25lKToKKyAgICAgICAgc2VsZi5z
Y29wZSA9IHNjb3BlCisgICAgICAgIHNlbGYucGFyYW1zID0gcGFyYW1zCisgICAgICAgIHNlbGYu
YXV0b3VzZSA9IGF1dG91c2UKKyAgICAgICAgc2VsZi55aWVsZGN0eCA9IHlpZWxkY3R4CisgICAg
ICAgIHNlbGYuaWRzID0gaWRzCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgZnVuY3Rpb24pOgor
ICAgICAgICBpZiBpc2NsYXNzKGZ1bmN0aW9uKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJy
b3IoCisgICAgICAgICAgICAgICAgICAgICJjbGFzcyBmaXh0dXJlcyBub3Qgc3VwcG9ydGVkICht
YXkgYmUgaW4gdGhlIGZ1dHVyZSkiKQorICAgICAgICBmdW5jdGlvbi5fcHl0ZXN0Zml4dHVyZWZ1
bmN0aW9uID0gc2VsZgorICAgICAgICByZXR1cm4gZnVuY3Rpb24KKworCitkZWYgZml4dHVyZShz
Y29wZT0iZnVuY3Rpb24iLCBwYXJhbXM9Tm9uZSwgYXV0b3VzZT1GYWxzZSwgaWRzPU5vbmUpOgor
ICAgICIiIiAocmV0dXJuIGEpIGRlY29yYXRvciB0byBtYXJrIGEgZml4dHVyZSBmYWN0b3J5IGZ1
bmN0aW9uLgorCisgICAgVGhpcyBkZWNvcmF0b3IgY2FuIGJlIHVzZWQgKHdpdGggb3Igb3Igd2l0
aG91dCBwYXJhbWV0ZXJzKSB0byBkZWZpbmUKKyAgICBhIGZpeHR1cmUgZnVuY3Rpb24uICBUaGUg
bmFtZSBvZiB0aGUgZml4dHVyZSBmdW5jdGlvbiBjYW4gbGF0ZXIgYmUKKyAgICByZWZlcmVuY2Vk
IHRvIGNhdXNlIGl0cyBpbnZvY2F0aW9uIGFoZWFkIG9mIHJ1bm5pbmcgdGVzdHM6IHRlc3QKKyAg
ICBtb2R1bGVzIG9yIGNsYXNzZXMgY2FuIHVzZSB0aGUgcHl0ZXN0Lm1hcmsudXNlZml4dHVyZXMo
Zml4dHVyZW5hbWUpCisgICAgbWFya2VyLiAgVGVzdCBmdW5jdGlvbnMgY2FuIGRpcmVjdGx5IHVz
ZSBmaXh0dXJlIG5hbWVzIGFzIGlucHV0CisgICAgYXJndW1lbnRzIGluIHdoaWNoIGNhc2UgdGhl
IGZpeHR1cmUgaW5zdGFuY2UgcmV0dXJuZWQgZnJvbSB0aGUgZml4dHVyZQorICAgIGZ1bmN0aW9u
IHdpbGwgYmUgaW5qZWN0ZWQuCisKKyAgICA6YXJnIHNjb3BlOiB0aGUgc2NvcGUgZm9yIHdoaWNo
IHRoaXMgZml4dHVyZSBpcyBzaGFyZWQsIG9uZSBvZgorICAgICAgICAgICAgICAgICJmdW5jdGlv
biIgKGRlZmF1bHQpLCAiY2xhc3MiLCAibW9kdWxlIiwgInNlc3Npb24iLgorCisgICAgOmFyZyBw
YXJhbXM6IGFuIG9wdGlvbmFsIGxpc3Qgb2YgcGFyYW1ldGVycyB3aGljaCB3aWxsIGNhdXNlIG11
bHRpcGxlCisgICAgICAgICAgICAgICAgaW52b2NhdGlvbnMgb2YgdGhlIGZpeHR1cmUgZnVuY3Rp
b24gYW5kIGFsbCBvZiB0aGUgdGVzdHMKKyAgICAgICAgICAgICAgICB1c2luZyBpdC4KKworICAg
IDphcmcgYXV0b3VzZTogaWYgVHJ1ZSwgdGhlIGZpeHR1cmUgZnVuYyBpcyBhY3RpdmF0ZWQgZm9y
IGFsbCB0ZXN0cyB0aGF0CisgICAgICAgICAgICAgICAgY2FuIHNlZSBpdC4gIElmIEZhbHNlICh0
aGUgZGVmYXVsdCkgdGhlbiBhbiBleHBsaWNpdAorICAgICAgICAgICAgICAgIHJlZmVyZW5jZSBp
cyBuZWVkZWQgdG8gYWN0aXZhdGUgdGhlIGZpeHR1cmUuCisKKyAgICA6YXJnIGlkczogbGlzdCBv
ZiBzdHJpbmcgaWRzIGVhY2ggY29ycmVzcG9uZGluZyB0byB0aGUgcGFyYW1zCisgICAgICAgc28g
dGhhdCB0aGV5IGFyZSBwYXJ0IG9mIHRoZSB0ZXN0IGlkLiBJZiBubyBpZHMgYXJlIHByb3ZpZGVk
CisgICAgICAgdGhleSB3aWxsIGJlIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGZyb20gdGhlIHBh
cmFtcy4KKworICAgICIiIgorICAgIGlmIGNhbGxhYmxlKHNjb3BlKSBhbmQgcGFyYW1zIGlzIE5v
bmUgYW5kIGF1dG91c2UgPT0gRmFsc2U6CisgICAgICAgICMgZGlyZWN0IGRlY29yYXRpb24KKyAg
ICAgICAgcmV0dXJuIEZpeHR1cmVGdW5jdGlvbk1hcmtlcigKKyAgICAgICAgICAgICAgICAiZnVu
Y3Rpb24iLCBwYXJhbXMsIGF1dG91c2UpKHNjb3BlKQorICAgIGlmIHBhcmFtcyBpcyBub3QgTm9u
ZSBhbmQgbm90IGlzaW5zdGFuY2UocGFyYW1zLCAobGlzdCwgdHVwbGUpKToKKyAgICAgICAgcGFy
YW1zID0gbGlzdChwYXJhbXMpCisgICAgcmV0dXJuIEZpeHR1cmVGdW5jdGlvbk1hcmtlcihzY29w
ZSwgcGFyYW1zLCBhdXRvdXNlLCBpZHM9aWRzKQorCitkZWYgeWllbGRfZml4dHVyZShzY29wZT0i
ZnVuY3Rpb24iLCBwYXJhbXM9Tm9uZSwgYXV0b3VzZT1GYWxzZSwgaWRzPU5vbmUpOgorICAgICIi
IiAocmV0dXJuIGEpIGRlY29yYXRvciB0byBtYXJrIGEgeWllbGQtZml4dHVyZSBmYWN0b3J5IGZ1
bmN0aW9uCisgICAgKEVYUEVSSU1FTlRBTCkuCisKKyAgICBUaGlzIHRha2VzIHRoZSBzYW1lIGFy
Z3VtZW50cyBhcyA6cHk6ZnVuYzpgcHl0ZXN0LmZpeHR1cmVgIGJ1dAorICAgIGV4cGVjdHMgYSBm
aXh0dXJlIGZ1bmN0aW9uIHRvIHVzZSBhIGBgeWllbGRgYCBpbnN0ZWFkIG9mIGEgYGByZXR1cm5g
YAorICAgIHN0YXRlbWVudCB0byBwcm92aWRlIGEgZml4dHVyZS4gIFNlZQorICAgIGh0dHA6Ly9w
eXRlc3Qub3JnL2VuL2xhdGVzdC95aWVsZGZpeHR1cmUuaHRtbCBmb3IgbW9yZSBpbmZvLgorICAg
ICIiIgorICAgIGlmIGNhbGxhYmxlKHNjb3BlKSBhbmQgcGFyYW1zIGlzIE5vbmUgYW5kIGF1dG91
c2UgPT0gRmFsc2U6CisgICAgICAgICMgZGlyZWN0IGRlY29yYXRpb24KKyAgICAgICAgcmV0dXJu
IEZpeHR1cmVGdW5jdGlvbk1hcmtlcigKKyAgICAgICAgICAgICAgICAiZnVuY3Rpb24iLCBwYXJh
bXMsIGF1dG91c2UsIHlpZWxkY3R4PVRydWUpKHNjb3BlKQorICAgIGVsc2U6CisgICAgICAgIHJl
dHVybiBGaXh0dXJlRnVuY3Rpb25NYXJrZXIoc2NvcGUsIHBhcmFtcywgYXV0b3VzZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZGN0eD1UcnVlLCBpZHM9aWRzKQor
CitkZWZhdWx0ZnVuY2FyZ3ByZWZpeG1hcmtlciA9IGZpeHR1cmUoKQorCitkZWYgcHlvYmpfcHJv
cGVydHkobmFtZSk6CisgICAgZGVmIGdldChzZWxmKToKKyAgICAgICAgbm9kZSA9IHNlbGYuZ2V0
cGFyZW50KGdldGF0dHIocHl0ZXN0LCBuYW1lKSkKKyAgICAgICAgaWYgbm9kZSBpcyBub3QgTm9u
ZToKKyAgICAgICAgICAgIHJldHVybiBub2RlLm9iagorICAgIGRvYyA9ICJweXRob24gJXMgb2Jq
ZWN0IHRoaXMgbm9kZSB3YXMgY29sbGVjdGVkIGZyb20gKGNhbiBiZSBOb25lKS4iICUgKAorICAg
ICAgICAgIG5hbWUubG93ZXIoKSwpCisgICAgcmV0dXJuIHByb3BlcnR5KGdldCwgTm9uZSwgTm9u
ZSwgZG9jKQorCisKK2RlZiBweXRlc3RfYWRkb3B0aW9uKHBhcnNlcik6CisgICAgZ3JvdXAgPSBw
YXJzZXIuZ2V0Z3JvdXAoImdlbmVyYWwiKQorICAgIGdyb3VwLmFkZG9wdGlvbignLS1maXh0dXJl
cycsICctLWZ1bmNhcmdzJywKKyAgICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRl
c3Q9InNob3dmaXh0dXJlcyIsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICBoZWxwPSJz
aG93IGF2YWlsYWJsZSBmaXh0dXJlcywgc29ydGVkIGJ5IHBsdWdpbiBhcHBlYXJhbmNlIikKKyAg
ICBwYXJzZXIuYWRkaW5pKCJ1c2VmaXh0dXJlcyIsIHR5cGU9ImFyZ3MiLCBkZWZhdWx0PVtdLAor
ICAgICAgICBoZWxwPSJsaXN0IG9mIGRlZmF1bHQgZml4dHVyZXMgdG8gYmUgdXNlZCB3aXRoIHRo
aXMgcHJvamVjdCIpCisgICAgcGFyc2VyLmFkZGluaSgicHl0aG9uX2ZpbGVzIiwgdHlwZT0iYXJn
cyIsCisgICAgICAgIGRlZmF1bHQ9Wyd0ZXN0XyoucHknLCAnKl90ZXN0LnB5J10sCisgICAgICAg
IGhlbHA9Imdsb2Itc3R5bGUgZmlsZSBwYXR0ZXJucyBmb3IgUHl0aG9uIHRlc3QgbW9kdWxlIGRp
c2NvdmVyeSIpCisgICAgcGFyc2VyLmFkZGluaSgicHl0aG9uX2NsYXNzZXMiLCB0eXBlPSJhcmdz
IiwgZGVmYXVsdD1bIlRlc3QiLF0sCisgICAgICAgIGhlbHA9InByZWZpeGVzIG9yIGdsb2IgbmFt
ZXMgZm9yIFB5dGhvbiB0ZXN0IGNsYXNzIGRpc2NvdmVyeSIpCisgICAgcGFyc2VyLmFkZGluaSgi
cHl0aG9uX2Z1bmN0aW9ucyIsIHR5cGU9ImFyZ3MiLCBkZWZhdWx0PVsidGVzdCIsXSwKKyAgICAg
ICAgaGVscD0icHJlZml4ZXMgb3IgZ2xvYiBuYW1lcyBmb3IgUHl0aG9uIHRlc3QgZnVuY3Rpb24g
YW5kICIKKyAgICAgICAgICAgICAibWV0aG9kIGRpc2NvdmVyeSIpCisKKyAgICBncm91cC5hZGRv
cHRpb24oIi0taW1wb3J0LW1vZGUiLCBkZWZhdWx0PSJwcmVwZW5kIiwKKyAgICAgICAgY2hvaWNl
cz1bInByZXBlbmQiLCAiYXBwZW5kIl0sIGRlc3Q9ImltcG9ydG1vZGUiLAorICAgICAgICBoZWxw
PSJwcmVwZW5kL2FwcGVuZCB0byBzeXMucGF0aCB3aGVuIGltcG9ydGluZyB0ZXN0IG1vZHVsZXMs
ICIKKyAgICAgICAgICAgICAiZGVmYXVsdCBpcyB0byBwcmVwZW5kLiIpCisKKworZGVmIHB5dGVz
dF9jbWRsaW5lX21haW4oY29uZmlnKToKKyAgICBpZiBjb25maWcub3B0aW9uLnNob3dmaXh0dXJl
czoKKyAgICAgICAgc2hvd2ZpeHR1cmVzKGNvbmZpZykKKyAgICAgICAgcmV0dXJuIDAKKworCitk
ZWYgcHl0ZXN0X2dlbmVyYXRlX3Rlc3RzKG1ldGFmdW5jKToKKyAgICAjIHRob3NlIGFsdGVybmF0
aXZlIHNwZWxsaW5ncyBhcmUgY29tbW9uIC0gcmFpc2UgYSBzcGVjaWZpYyBlcnJvciB0byBhbGVy
dAorICAgICMgdGhlIHVzZXIKKyAgICBhbHRfc3BlbGxpbmdzID0gWydwYXJhbWV0ZXJpemUnLCAn
cGFyYW1ldHJpc2UnLCAncGFyYW1ldGVyaXNlJ10KKyAgICBmb3IgYXR0ciBpbiBhbHRfc3BlbGxp
bmdzOgorICAgICAgICBpZiBoYXNhdHRyKG1ldGFmdW5jLmZ1bmN0aW9uLCBhdHRyKToKKyAgICAg
ICAgICAgIG1zZyA9ICJ7MH0gaGFzICd7MX0nLCBzcGVsbGluZyBzaG91bGQgYmUgJ3BhcmFtZXRy
aXplJyIKKyAgICAgICAgICAgIHJhaXNlIE1hcmtlckVycm9yKG1zZy5mb3JtYXQobWV0YWZ1bmMu
ZnVuY3Rpb24uX19uYW1lX18sIGF0dHIpKQorICAgIHRyeToKKyAgICAgICAgbWFya2VycyA9IG1l
dGFmdW5jLmZ1bmN0aW9uLnBhcmFtZXRyaXplCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgor
ICAgICAgICByZXR1cm4KKyAgICBmb3IgbWFya2VyIGluIG1hcmtlcnM6CisgICAgICAgIG1ldGFm
dW5jLnBhcmFtZXRyaXplKCptYXJrZXIuYXJncywgKiptYXJrZXIua3dhcmdzKQorCitkZWYgcHl0
ZXN0X2NvbmZpZ3VyZShjb25maWcpOgorICAgIGNvbmZpZy5hZGRpbml2YWx1ZV9saW5lKCJtYXJr
ZXJzIiwKKyAgICAgICAgInBhcmFtZXRyaXplKGFyZ25hbWVzLCBhcmd2YWx1ZXMpOiBjYWxsIGEg
dGVzdCBmdW5jdGlvbiBtdWx0aXBsZSAiCisgICAgICAgICJ0aW1lcyBwYXNzaW5nIGluIGRpZmZl
cmVudCBhcmd1bWVudHMgaW4gdHVybi4gYXJndmFsdWVzIGdlbmVyYWxseSAiCisgICAgICAgICJu
ZWVkcyB0byBiZSBhIGxpc3Qgb2YgdmFsdWVzIGlmIGFyZ25hbWVzIHNwZWNpZmllcyBvbmx5IG9u
ZSBuYW1lICIKKyAgICAgICAgIm9yIGEgbGlzdCBvZiB0dXBsZXMgb2YgdmFsdWVzIGlmIGFyZ25h
bWVzIHNwZWNpZmllcyBtdWx0aXBsZSBuYW1lcy4gIgorICAgICAgICAiRXhhbXBsZTogQHBhcmFt
ZXRyaXplKCdhcmcxJywgWzEsMl0pIHdvdWxkIGxlYWQgdG8gdHdvIGNhbGxzIG9mIHRoZSAiCisg
ICAgICAgICJkZWNvcmF0ZWQgdGVzdCBmdW5jdGlvbiwgb25lIHdpdGggYXJnMT0xIGFuZCBhbm90
aGVyIHdpdGggYXJnMT0yLiIKKyAgICAgICAgInNlZSBodHRwOi8vcHl0ZXN0Lm9yZy9sYXRlc3Qv
cGFyYW1ldHJpemUuaHRtbCBmb3IgbW9yZSBpbmZvIGFuZCAiCisgICAgICAgICJleGFtcGxlcy4i
CisgICAgKQorICAgIGNvbmZpZy5hZGRpbml2YWx1ZV9saW5lKCJtYXJrZXJzIiwKKyAgICAgICAg
InVzZWZpeHR1cmVzKGZpeHR1cmVuYW1lMSwgZml4dHVyZW5hbWUyLCAuLi4pOiBtYXJrIHRlc3Rz
IGFzIG5lZWRpbmcgIgorICAgICAgICAiYWxsIG9mIHRoZSBzcGVjaWZpZWQgZml4dHVyZXMuIHNl
ZSBodHRwOi8vcHl0ZXN0Lm9yZy9sYXRlc3QvZml4dHVyZS5odG1sI3VzZWZpeHR1cmVzICIKKyAg
ICApCisKK2RlZiBweXRlc3Rfc2Vzc2lvbnN0YXJ0KHNlc3Npb24pOgorICAgIHNlc3Npb24uX2Zp
eHR1cmVtYW5hZ2VyID0gRml4dHVyZU1hbmFnZXIoc2Vzc2lvbikKKworQHB5dGVzdC5ob29raW1w
bCh0cnlsYXN0PVRydWUpCitkZWYgcHl0ZXN0X25hbWVzcGFjZSgpOgorICAgIHJhaXNlcy5FeGNl
cHRpb24gPSBweXRlc3QuZmFpbC5FeGNlcHRpb24KKyAgICByZXR1cm4geworICAgICAgICAnZml4
dHVyZSc6IGZpeHR1cmUsCisgICAgICAgICd5aWVsZF9maXh0dXJlJzogeWllbGRfZml4dHVyZSwK
KyAgICAgICAgJ3JhaXNlcycgOiByYWlzZXMsCisgICAgICAgICdjb2xsZWN0JzogeworICAgICAg
ICAnTW9kdWxlJzogTW9kdWxlLCAnQ2xhc3MnOiBDbGFzcywgJ0luc3RhbmNlJzogSW5zdGFuY2Us
CisgICAgICAgICdGdW5jdGlvbic6IEZ1bmN0aW9uLCAnR2VuZXJhdG9yJzogR2VuZXJhdG9yLAor
ICAgICAgICAnX2ZpbGxmdW5jYXJncyc6IGZpbGxmaXh0dXJlc30KKyAgICB9CisKK0BmaXh0dXJl
KHNjb3BlPSJzZXNzaW9uIikKK2RlZiBweXRlc3Rjb25maWcocmVxdWVzdCk6CisgICAgIiIiIHRo
ZSBweXRlc3QgY29uZmlnIG9iamVjdCB3aXRoIGFjY2VzcyB0byBjb21tYW5kIGxpbmUgb3B0cy4i
IiIKKyAgICByZXR1cm4gcmVxdWVzdC5jb25maWcKKworCitAcHl0ZXN0Lmhvb2tpbXBsKHRyeWxh
c3Q9VHJ1ZSkKK2RlZiBweXRlc3RfcHlmdW5jX2NhbGwocHlmdW5jaXRlbSk6CisgICAgdGVzdGZ1
bmN0aW9uID0gcHlmdW5jaXRlbS5vYmoKKyAgICBpZiBweWZ1bmNpdGVtLl9pc3lpZWxkZWRmdW5j
dGlvbigpOgorICAgICAgICB0ZXN0ZnVuY3Rpb24oKnB5ZnVuY2l0ZW0uX2FyZ3MpCisgICAgZWxz
ZToKKyAgICAgICAgZnVuY2FyZ3MgPSBweWZ1bmNpdGVtLmZ1bmNhcmdzCisgICAgICAgIHRlc3Rh
cmdzID0ge30KKyAgICAgICAgZm9yIGFyZyBpbiBweWZ1bmNpdGVtLl9maXh0dXJlaW5mby5hcmdu
YW1lczoKKyAgICAgICAgICAgIHRlc3RhcmdzW2FyZ10gPSBmdW5jYXJnc1thcmddCisgICAgICAg
IHRlc3RmdW5jdGlvbigqKnRlc3RhcmdzKQorICAgIHJldHVybiBUcnVlCisKK2RlZiBweXRlc3Rf
Y29sbGVjdF9maWxlKHBhdGgsIHBhcmVudCk6CisgICAgZXh0ID0gcGF0aC5leHQKKyAgICBpZiBl
eHQgPT0gIi5weSI6CisgICAgICAgIGlmIG5vdCBwYXJlbnQuc2Vzc2lvbi5pc2luaXRwYXRoKHBh
dGgpOgorICAgICAgICAgICAgZm9yIHBhdCBpbiBwYXJlbnQuY29uZmlnLmdldGluaSgncHl0aG9u
X2ZpbGVzJyk6CisgICAgICAgICAgICAgICAgaWYgcGF0aC5mbm1hdGNoKHBhdCk6CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgcmV0
dXJuCisgICAgICAgIGlob29rID0gcGFyZW50LnNlc3Npb24uZ2V0aG9va3Byb3h5KHBhdGgpCisg
ICAgICAgIHJldHVybiBpaG9vay5weXRlc3RfcHljb2xsZWN0X21ha2Vtb2R1bGUocGF0aD1wYXRo
LCBwYXJlbnQ9cGFyZW50KQorCitkZWYgcHl0ZXN0X3B5Y29sbGVjdF9tYWtlbW9kdWxlKHBhdGgs
IHBhcmVudCk6CisgICAgcmV0dXJuIE1vZHVsZShwYXRoLCBwYXJlbnQpCisKK0BweXRlc3QuaG9v
a2ltcGwoaG9va3dyYXBwZXI9VHJ1ZSkKK2RlZiBweXRlc3RfcHljb2xsZWN0X21ha2VpdGVtKGNv
bGxlY3RvciwgbmFtZSwgb2JqKToKKyAgICBvdXRjb21lID0geWllbGQKKyAgICByZXMgPSBvdXRj
b21lLmdldF9yZXN1bHQoKQorICAgIGlmIHJlcyBpcyBub3QgTm9uZToKKyAgICAgICAgcmFpc2Ug
U3RvcEl0ZXJhdGlvbgorICAgICMgbm90aGluZyB3YXMgY29sbGVjdGVkIGVsc2V3aGVyZSwgbGV0
J3MgZG8gaXQgaGVyZQorICAgIGlmIGlzY2xhc3Mob2JqKToKKyAgICAgICAgaWYgY29sbGVjdG9y
LmlzdGVzdGNsYXNzKG9iaiwgbmFtZSk6CisgICAgICAgICAgICBDbGFzcyA9IGNvbGxlY3Rvci5f
Z2V0Y3VzdG9tY2xhc3MoIkNsYXNzIikKKyAgICAgICAgICAgIG91dGNvbWUuZm9yY2VfcmVzdWx0
KENsYXNzKG5hbWUsIHBhcmVudD1jb2xsZWN0b3IpKQorICAgIGVsaWYgY29sbGVjdG9yLmlzdGVz
dGZ1bmN0aW9uKG9iaiwgbmFtZSk6CisgICAgICAgICMgbW9jayBzZWVtcyB0byBzdG9yZSB1bmJv
dW5kIG1ldGhvZHMgKGlzc3VlNDczKSwgbm9ybWFsaXplIGl0CisgICAgICAgIG9iaiA9IGdldGF0
dHIob2JqLCAiX19mdW5jX18iLCBvYmopCisgICAgICAgICMgV2UgbmVlZCB0byB0cnkgYW5kIHVu
d3JhcCB0aGUgZnVuY3Rpb24gaWYgaXQncyBhIGZ1bmN0b29scy5wYXJ0aWFsCisgICAgICAgICMg
b3IgYSBmdW50b29scy53cmFwcGVkLgorICAgICAgICAjIFdlIG11c24ndCBpZiBpdCdzIGJlZW4g
d3JhcHBlZCB3aXRoIG1vY2sucGF0Y2ggKHB5dGhvbiAyIG9ubHkpCisgICAgICAgIGlmIG5vdCAo
aXNmdW5jdGlvbihvYmopIG9yIGlzZnVuY3Rpb24oZ2V0X3JlYWxfZnVuYyhvYmopKSk6CisgICAg
ICAgICAgICBjb2xsZWN0b3Iud2Fybihjb2RlPSJDMiIsIG1lc3NhZ2U9CisgICAgICAgICAgICAg
ICAgImNhbm5vdCBjb2xsZWN0ICVyIGJlY2F1c2UgaXQgaXMgbm90IGEgZnVuY3Rpb24uIgorICAg
ICAgICAgICAgICAgICUgbmFtZSwgKQorICAgICAgICBlbGlmIGdldGF0dHIob2JqLCAiX190ZXN0
X18iLCBUcnVlKToKKyAgICAgICAgICAgIGlmIGlzX2dlbmVyYXRvcihvYmopOgorICAgICAgICAg
ICAgICAgIHJlcyA9IEdlbmVyYXRvcihuYW1lLCBwYXJlbnQ9Y29sbGVjdG9yKQorICAgICAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXMgPSBsaXN0KGNvbGxlY3Rvci5fZ2VuZnVuY3Rp
b25zKG5hbWUsIG9iaikpCisgICAgICAgICAgICBvdXRjb21lLmZvcmNlX3Jlc3VsdChyZXMpCisK
K2RlZiBpc19nZW5lcmF0b3IoZnVuYyk6CisgICAgdHJ5OgorICAgICAgICByZXR1cm4gX3B5dGVz
dC5fY29kZS5nZXRyYXdjb2RlKGZ1bmMpLmNvX2ZsYWdzICYgMzIgIyBnZW5lcmF0b3IgZnVuY3Rp
b24KKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6ICMgYnVpbHRpbiBmdW5jdGlvbnMgaGF2ZSBu
byBieXRlY29kZQorICAgICAgICAjIGFzc3VtZSB0aGVtIHRvIG5vdCBiZSBnZW5lcmF0b3JzCisg
ICAgICAgIHJldHVybiBGYWxzZQorCitjbGFzcyBQeW9iakNvbnRleHQob2JqZWN0KToKKyAgICBt
b2R1bGUgPSBweW9ial9wcm9wZXJ0eSgiTW9kdWxlIikKKyAgICBjbHMgPSBweW9ial9wcm9wZXJ0
eSgiQ2xhc3MiKQorICAgIGluc3RhbmNlID0gcHlvYmpfcHJvcGVydHkoIkluc3RhbmNlIikKKwor
Y2xhc3MgUHlvYmpNaXhpbihQeW9iakNvbnRleHQpOgorICAgIGRlZiBvYmooKToKKyAgICAgICAg
ZGVmIGZnZXQoc2VsZik6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJu
IHNlbGYuX29iagorICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAg
ICAgICAgIHNlbGYuX29iaiA9IG9iaiA9IHNlbGYuX2dldG9iaigpCisgICAgICAgICAgICAgICAg
cmV0dXJuIG9iagorICAgICAgICBkZWYgZnNldChzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICBz
ZWxmLl9vYmogPSB2YWx1ZQorICAgICAgICByZXR1cm4gcHJvcGVydHkoZmdldCwgZnNldCwgTm9u
ZSwgInVuZGVybHlpbmcgcHl0aG9uIG9iamVjdCIpCisgICAgb2JqID0gb2JqKCkKKworICAgIGRl
ZiBfZ2V0b2JqKHNlbGYpOgorICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLnBhcmVudC5vYmos
IHNlbGYubmFtZSkKKworICAgIGRlZiBnZXRtb2RwYXRoKHNlbGYsIHN0b3BhdG1vZHVsZT1UcnVl
LCBpbmNsdWRlbW9kdWxlPUZhbHNlKToKKyAgICAgICAgIiIiIHJldHVybiBweXRob24gcGF0aCBy
ZWxhdGl2ZSB0byB0aGUgY29udGFpbmluZyBtb2R1bGUuICIiIgorICAgICAgICBjaGFpbiA9IHNl
bGYubGlzdGNoYWluKCkKKyAgICAgICAgY2hhaW4ucmV2ZXJzZSgpCisgICAgICAgIHBhcnRzID0g
W10KKyAgICAgICAgZm9yIG5vZGUgaW4gY2hhaW46CisgICAgICAgICAgICBpZiBpc2luc3RhbmNl
KG5vZGUsIEluc3RhbmNlKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAg
bmFtZSA9IG5vZGUubmFtZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShub2RlLCBNb2R1bGUp
OgorICAgICAgICAgICAgICAgIGFzc2VydCBuYW1lLmVuZHN3aXRoKCIucHkiKQorICAgICAgICAg
ICAgICAgIG5hbWUgPSBuYW1lWzotM10KKyAgICAgICAgICAgICAgICBpZiBzdG9wYXRtb2R1bGU6
CisgICAgICAgICAgICAgICAgICAgIGlmIGluY2x1ZGVtb2R1bGU6CisgICAgICAgICAgICAgICAg
ICAgICAgICBwYXJ0cy5hcHBlbmQobmFtZSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAg
ICAgICAgICAgIHBhcnRzLmFwcGVuZChuYW1lKQorICAgICAgICBwYXJ0cy5yZXZlcnNlKCkKKyAg
ICAgICAgcyA9ICIuIi5qb2luKHBhcnRzKQorICAgICAgICByZXR1cm4gcy5yZXBsYWNlKCIuWyIs
ICJbIikKKworICAgIGRlZiBfZ2V0ZnNsaW5lbm8oc2VsZik6CisgICAgICAgIHJldHVybiBnZXRm
c2xpbmVubyhzZWxmLm9iaikKKworICAgIGRlZiByZXBvcnRpbmZvKHNlbGYpOgorICAgICAgICAj
IFhYWCBjYWNoaW5nPworICAgICAgICBvYmogPSBzZWxmLm9iagorICAgICAgICBjb21wYXRfY29f
Zmlyc3RsaW5lbm8gPSBnZXRhdHRyKG9iaiwgJ2NvbXBhdF9jb19maXJzdGxpbmVubycsIE5vbmUp
CisgICAgICAgIGlmIGlzaW5zdGFuY2UoY29tcGF0X2NvX2ZpcnN0bGluZW5vLCBpbnQpOgorICAg
ICAgICAgICAgIyBub3NlIGNvbXBhdGliaWxpdHkKKyAgICAgICAgICAgIGZzcGF0aCA9IHN5cy5t
b2R1bGVzW29iai5fX21vZHVsZV9fXS5fX2ZpbGVfXworICAgICAgICAgICAgaWYgZnNwYXRoLmVu
ZHN3aXRoKCIucHljIik6CisgICAgICAgICAgICAgICAgZnNwYXRoID0gZnNwYXRoWzotMV0KKyAg
ICAgICAgICAgIGxpbmVubyA9IGNvbXBhdF9jb19maXJzdGxpbmVubworICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgZnNwYXRoLCBsaW5lbm8gPSBnZXRmc2xpbmVubyhvYmopCisgICAgICAgIG1v
ZHBhdGggPSBzZWxmLmdldG1vZHBhdGgoKQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShsaW5l
bm8sIGludCkKKyAgICAgICAgcmV0dXJuIGZzcGF0aCwgbGluZW5vLCBtb2RwYXRoCisKK2NsYXNz
IFB5Q29sbGVjdG9yKFB5b2JqTWl4aW4sIHB5dGVzdC5Db2xsZWN0b3IpOgorCisgICAgZGVmIGZ1
bmNuYW1lZmlsdGVyKHNlbGYsIG5hbWUpOgorICAgICAgICByZXR1cm4gc2VsZi5fbWF0Y2hlc19w
cmVmaXhfb3JfZ2xvYl9vcHRpb24oJ3B5dGhvbl9mdW5jdGlvbnMnLCBuYW1lKQorCisgICAgZGVm
IGlzbm9zZXRlc3Qoc2VsZiwgb2JqKToKKyAgICAgICAgIiIiIExvb2sgZm9yIHRoZSBfX3Rlc3Rf
XyBhdHRyaWJ1dGUsIHdoaWNoIGlzIGFwcGxpZWQgYnkgdGhlCisgICAgICAgIEBub3NlLnRvb2xz
LmlzdGVzdCBkZWNvcmF0b3IKKyAgICAgICAgIiIiCisgICAgICAgICMgV2UgZXhwbGljaXRseSBj
aGVjayBmb3IgImlzIFRydWUiIGhlcmUgdG8gbm90IG1pc3Rha2VubHkgdHJlYXQKKyAgICAgICAg
IyBjbGFzc2VzIHdpdGggYSBjdXN0b20gX19nZXRhdHRyX18gcmV0dXJuaW5nIHNvbWV0aGluZyB0
cnV0aHkgKGxpa2UgYQorICAgICAgICAjIGZ1bmN0aW9uKSBhcyB0ZXN0IGNsYXNzZXMuCisgICAg
ICAgIHJldHVybiBzYWZlX2dldGF0dHIob2JqLCAnX190ZXN0X18nLCBGYWxzZSkgaXMgVHJ1ZQor
CisgICAgZGVmIGNsYXNzbmFtZWZpbHRlcihzZWxmLCBuYW1lKToKKyAgICAgICAgcmV0dXJuIHNl
bGYuX21hdGNoZXNfcHJlZml4X29yX2dsb2Jfb3B0aW9uKCdweXRob25fY2xhc3NlcycsIG5hbWUp
CisKKyAgICBkZWYgaXN0ZXN0ZnVuY3Rpb24oc2VsZiwgb2JqLCBuYW1lKToKKyAgICAgICAgcmV0
dXJuICgKKyAgICAgICAgICAgIChzZWxmLmZ1bmNuYW1lZmlsdGVyKG5hbWUpIG9yIHNlbGYuaXNu
b3NldGVzdChvYmopKSBhbmQKKyAgICAgICAgICAgIHNhZmVfZ2V0YXR0cihvYmosICJfX2NhbGxf
XyIsIEZhbHNlKSBhbmQgZ2V0Zml4dHVyZW1hcmtlcihvYmopIGlzIE5vbmUKKyAgICAgICAgKQor
CisgICAgZGVmIGlzdGVzdGNsYXNzKHNlbGYsIG9iaiwgbmFtZSk6CisgICAgICAgIHJldHVybiBz
ZWxmLmNsYXNzbmFtZWZpbHRlcihuYW1lKSBvciBzZWxmLmlzbm9zZXRlc3Qob2JqKQorCisgICAg
ZGVmIF9tYXRjaGVzX3ByZWZpeF9vcl9nbG9iX29wdGlvbihzZWxmLCBvcHRpb25fbmFtZSwgbmFt
ZSk6CisgICAgICAgICIiIgorICAgICAgICBjaGVja3MgaWYgdGhlIGdpdmVuIG5hbWUgbWF0Y2hl
cyB0aGUgcHJlZml4IG9yIGdsb2ItcGF0dGVybiBkZWZpbmVkCisgICAgICAgIGluIGluaSBjb25m
aWd1cmF0aW9uLgorICAgICAgICAiIiIKKyAgICAgICAgZm9yIG9wdGlvbiBpbiBzZWxmLmNvbmZp
Zy5nZXRpbmkob3B0aW9uX25hbWUpOgorICAgICAgICAgICAgaWYgbmFtZS5zdGFydHN3aXRoKG9w
dGlvbik6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgICMgY2hlY2sg
dGhhdCBuYW1lIGxvb2tzIGxpa2UgYSBnbG9iLXN0cmluZyBiZWZvcmUgY2FsbGluZyBmbm1hdGNo
CisgICAgICAgICAgICAjIGJlY2F1c2UgdGhpcyBpcyBjYWxsZWQgZm9yIGV2ZXJ5IG5hbWUgaW4g
ZWFjaCBjb2xsZWN0ZWQgbW9kdWxlLAorICAgICAgICAgICAgIyBhbmQgZm5tYXRjaCBpcyBzb21l
d2hhdCBleHBlbnNpdmUgdG8gY2FsbAorICAgICAgICAgICAgZWxpZiAoJyonIGluIG9wdGlvbiBv
ciAnPycgaW4gb3B0aW9uIG9yICdbJyBpbiBvcHRpb24pIGFuZCBcCisgICAgICAgICAgICAgICAg
ICAgIGZubWF0Y2guZm5tYXRjaChuYW1lLCBvcHRpb24pOgorICAgICAgICAgICAgICAgIHJldHVy
biBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGNvbGxlY3Qoc2VsZik6Cisg
ICAgICAgIGlmIG5vdCBnZXRhdHRyKHNlbGYub2JqLCAiX190ZXN0X18iLCBUcnVlKToKKyAgICAg
ICAgICAgIHJldHVybiBbXQorCisgICAgICAgICMgTkIuIHdlIGF2b2lkIHJhbmRvbSBnZXRhdHRy
cyBhbmQgcGVlayBpbiB0aGUgX19kaWN0X18gaW5zdGVhZAorICAgICAgICAjIChYWFggb3JpZ2lu
YWxseSBpbnRyb2R1Y2VkIGZyb20gYSBQeVB5IG5lZWQsIHN0aWxsIHRydWU/KQorICAgICAgICBk
aWN0cyA9IFtnZXRhdHRyKHNlbGYub2JqLCAnX19kaWN0X18nLCB7fSldCisgICAgICAgIGZvciBi
YXNlY2xzIGluIGluc3BlY3QuZ2V0bXJvKHNlbGYub2JqLl9fY2xhc3NfXyk6CisgICAgICAgICAg
ICBkaWN0cy5hcHBlbmQoYmFzZWNscy5fX2RpY3RfXykKKyAgICAgICAgc2VlbiA9IHt9CisgICAg
ICAgIGwgPSBbXQorICAgICAgICBmb3IgZGljIGluIGRpY3RzOgorICAgICAgICAgICAgZm9yIG5h
bWUsIG9iaiBpbiBsaXN0KGRpYy5pdGVtcygpKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lIGlu
IHNlZW46CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgc2Vl
bltuYW1lXSA9IFRydWUKKyAgICAgICAgICAgICAgICByZXMgPSBzZWxmLm1ha2VpdGVtKG5hbWUs
IG9iaikKKyAgICAgICAgICAgICAgICBpZiByZXMgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAg
ICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShyZXMsIGxpc3Qp
OgorICAgICAgICAgICAgICAgICAgICByZXMgPSBbcmVzXQorICAgICAgICAgICAgICAgIGwuZXh0
ZW5kKHJlcykKKyAgICAgICAgbC5zb3J0KGtleT1sYW1iZGEgaXRlbTogaXRlbS5yZXBvcnRpbmZv
KClbOjJdKQorICAgICAgICByZXR1cm4gbAorCisgICAgZGVmIG1ha2VpdGVtKHNlbGYsIG5hbWUs
IG9iaik6CisgICAgICAgICNhc3NlcnQgc2VsZi5paG9vay5mc3BhdGggPT0gc2VsZi5mc3BhdGgs
IHNlbGYKKyAgICAgICAgcmV0dXJuIHNlbGYuaWhvb2sucHl0ZXN0X3B5Y29sbGVjdF9tYWtlaXRl
bSgKKyAgICAgICAgICAgIGNvbGxlY3Rvcj1zZWxmLCBuYW1lPW5hbWUsIG9iaj1vYmopCisKKyAg
ICBkZWYgX2dlbmZ1bmN0aW9ucyhzZWxmLCBuYW1lLCBmdW5jb2JqKToKKyAgICAgICAgbW9kdWxl
ID0gc2VsZi5nZXRwYXJlbnQoTW9kdWxlKS5vYmoKKyAgICAgICAgY2xzY29sID0gc2VsZi5nZXRw
YXJlbnQoQ2xhc3MpCisgICAgICAgIGNscyA9IGNsc2NvbCBhbmQgY2xzY29sLm9iaiBvciBOb25l
CisgICAgICAgIHRyYW5zZmVyX21hcmtlcnMoZnVuY29iaiwgY2xzLCBtb2R1bGUpCisgICAgICAg
IGZtID0gc2VsZi5zZXNzaW9uLl9maXh0dXJlbWFuYWdlcgorICAgICAgICBmaXh0dXJlaW5mbyA9
IGZtLmdldGZpeHR1cmVpbmZvKHNlbGYsIGZ1bmNvYmosIGNscykKKyAgICAgICAgbWV0YWZ1bmMg
PSBNZXRhZnVuYyhmdW5jb2JqLCBmaXh0dXJlaW5mbywgc2VsZi5jb25maWcsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2xzPWNscywgbW9kdWxlPW1vZHVsZSkKKyAgICAgICAgbWV0aG9k
cyA9IFtdCisgICAgICAgIGlmIGhhc2F0dHIobW9kdWxlLCAicHl0ZXN0X2dlbmVyYXRlX3Rlc3Rz
Iik6CisgICAgICAgICAgICBtZXRob2RzLmFwcGVuZChtb2R1bGUucHl0ZXN0X2dlbmVyYXRlX3Rl
c3RzKQorICAgICAgICBpZiBoYXNhdHRyKGNscywgInB5dGVzdF9nZW5lcmF0ZV90ZXN0cyIpOgor
ICAgICAgICAgICAgbWV0aG9kcy5hcHBlbmQoY2xzKCkucHl0ZXN0X2dlbmVyYXRlX3Rlc3RzKQor
ICAgICAgICBpZiBtZXRob2RzOgorICAgICAgICAgICAgc2VsZi5paG9vay5weXRlc3RfZ2VuZXJh
dGVfdGVzdHMuY2FsbF9leHRyYShtZXRob2RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0KG1ldGFmdW5jPW1ldGFmdW5jKSkKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuaWhvb2sucHl0ZXN0X2dlbmVyYXRlX3Rlc3Rz
KG1ldGFmdW5jPW1ldGFmdW5jKQorCisgICAgICAgIEZ1bmN0aW9uID0gc2VsZi5fZ2V0Y3VzdG9t
Y2xhc3MoIkZ1bmN0aW9uIikKKyAgICAgICAgaWYgbm90IG1ldGFmdW5jLl9jYWxsczoKKyAgICAg
ICAgICAgIHlpZWxkIEZ1bmN0aW9uKG5hbWUsIHBhcmVudD1zZWxmLCBmaXh0dXJlaW5mbz1maXh0
dXJlaW5mbykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgYWRkIGZ1bmNhcmdzKCkgYXMg
Zml4dHVyZWRlZnMgdG8gZml4dHVyZWluZm8uYXJnMmZpeHR1cmVkZWZzCisgICAgICAgICAgICBh
ZGRfZnVuY2FyZ19wc2V1ZG9fZml4dHVyZV9kZWYoc2VsZiwgbWV0YWZ1bmMsIGZtKQorCisgICAg
ICAgICAgICBmb3IgY2FsbHNwZWMgaW4gbWV0YWZ1bmMuX2NhbGxzOgorICAgICAgICAgICAgICAg
IHN1Ym5hbWUgPSAiJXNbJXNdIiAlKG5hbWUsIGNhbGxzcGVjLmlkKQorICAgICAgICAgICAgICAg
IHlpZWxkIEZ1bmN0aW9uKG5hbWU9c3VibmFtZSwgcGFyZW50PXNlbGYsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2FsbHNwZWM9Y2FsbHNwZWMsIGNhbGxvYmo9ZnVuY29iaiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXh0dXJlaW5mbz1maXh0dXJlaW5mbywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXl3b3Jkcz17Y2FsbHNwZWMuaWQ6VHJ1ZX0p
CisKK2RlZiBhZGRfZnVuY2FyZ19wc2V1ZG9fZml4dHVyZV9kZWYoY29sbGVjdG9yLCBtZXRhZnVu
YywgZml4dHVyZW1hbmFnZXIpOgorICAgICMgdGhpcyBmdW5jdGlvbiB3aWxsIHRyYW5zZm9ybSBh
bGwgY29sbGVjdGVkIGNhbGxzIHRvIGEgZnVuY3Rpb25zCisgICAgIyBpZiB0aGV5IHVzZSBkaXJl
Y3QgZnVuY2FyZ3MgKGkuZS4gZGlyZWN0IHBhcmFtZXRyaXphdGlvbikKKyAgICAjIGJlY2F1c2Ug
d2Ugd2FudCBsYXRlciB0ZXN0IGV4ZWN1dGlvbiB0byBiZSBhYmxlIHRvIHJlbHkgb24KKyAgICAj
IGFuIGV4aXN0aW5nIEZpeHR1cmVEZWYgc3RydWN0dXJlIGZvciBhbGwgYXJndW1lbnRzLgorICAg
ICMgWFhYIHdlIGNhbiBwcm9iYWJseSBhdm9pZCB0aGlzIGFsZ29yaXRobSAgaWYgd2UgbW9kaWZ5
IENhbGxTcGVjMgorICAgICMgdG8gZGlyZWN0bHkgY2FyZSBmb3IgY3JlYXRpbmcgdGhlIGZpeHR1
cmVkZWZzIHdpdGhpbiBpdHMgbWV0aG9kcy4KKyAgICBpZiBub3QgbWV0YWZ1bmMuX2NhbGxzWzBd
LmZ1bmNhcmdzOgorICAgICAgICByZXR1cm4gIyB0aGlzIGZ1bmN0aW9uIGNhbGwgZG9lcyBub3Qg
aGF2ZSBkaXJlY3QgcGFyYW1ldHJpemF0aW9uCisgICAgIyBjb2xsZWN0IGZ1bmNhcmdzIG9mIGFs
bCBjYWxsc3BlY3MgaW50byBhIGxpc3Qgb2YgdmFsdWVzCisgICAgYXJnMnBhcmFtcyA9IHt9Cisg
ICAgYXJnMnNjb3BlID0ge30KKyAgICBmb3IgY2FsbHNwZWMgaW4gbWV0YWZ1bmMuX2NhbGxzOgor
ICAgICAgICBmb3IgYXJnbmFtZSwgYXJndmFsdWUgaW4gY2FsbHNwZWMuZnVuY2FyZ3MuaXRlbXMo
KToKKyAgICAgICAgICAgIGFzc2VydCBhcmduYW1lIG5vdCBpbiBjYWxsc3BlYy5wYXJhbXMKKyAg
ICAgICAgICAgIGNhbGxzcGVjLnBhcmFtc1thcmduYW1lXSA9IGFyZ3ZhbHVlCisgICAgICAgICAg
ICBhcmcycGFyYW1zX2xpc3QgPSBhcmcycGFyYW1zLnNldGRlZmF1bHQoYXJnbmFtZSwgW10pCisg
ICAgICAgICAgICBjYWxsc3BlYy5pbmRpY2VzW2FyZ25hbWVdID0gbGVuKGFyZzJwYXJhbXNfbGlz
dCkKKyAgICAgICAgICAgIGFyZzJwYXJhbXNfbGlzdC5hcHBlbmQoYXJndmFsdWUpCisgICAgICAg
ICAgICBpZiBhcmduYW1lIG5vdCBpbiBhcmcyc2NvcGU6CisgICAgICAgICAgICAgICAgc2NvcGVu
dW0gPSBjYWxsc3BlYy5fYXJnMnNjb3BlbnVtLmdldChhcmduYW1lLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGVudW1fZnVuY3Rpb24p
CisgICAgICAgICAgICAgICAgYXJnMnNjb3BlW2FyZ25hbWVdID0gc2NvcGVzW3Njb3BlbnVtXQor
ICAgICAgICBjYWxsc3BlYy5mdW5jYXJncy5jbGVhcigpCisKKyAgICAjIHJlZ2lzdGVyIGFydGlm
aWNpYWwgRml4dHVyZURlZidzIHNvIHRoYXQgbGF0ZXIgYXQgdGVzdCBleGVjdXRpb24KKyAgICAj
IHRpbWUgd2UgY2FuIHJlbHkgb24gYSBwcm9wZXIgRml4dHVyZURlZiB0byBleGlzdCBmb3IgZml4
dHVyZSBzZXR1cC4KKyAgICBhcmcyZml4dHVyZWRlZnMgPSBtZXRhZnVuYy5fYXJnMmZpeHR1cmVk
ZWZzCisgICAgZm9yIGFyZ25hbWUsIHZhbHVlbGlzdCBpbiBhcmcycGFyYW1zLml0ZW1zKCk6Cisg
ICAgICAgICMgaWYgd2UgaGF2ZSBhIHNjb3BlIHRoYXQgaXMgaGlnaGVyIHRoYW4gZnVuY3Rpb24g
d2UgbmVlZAorICAgICAgICAjIHRvIG1ha2Ugc3VyZSB3ZSBvbmx5IGV2ZXIgY3JlYXRlIGFuIGFj
Y29yZGluZyBmaXh0dXJlZGVmIG9uCisgICAgICAgICMgYSBwZXItc2NvcGUgYmFzaXMuIFdlIHRo
dXMgc3RvcmUgYW5kIGNhY2hlIHRoZSBmaXh0dXJlZGVmIG9uIHRoZQorICAgICAgICAjIG5vZGUg
cmVsYXRlZCB0byB0aGUgc2NvcGUuCisgICAgICAgIHNjb3BlID0gYXJnMnNjb3BlW2FyZ25hbWVd
CisgICAgICAgIG5vZGUgPSBOb25lCisgICAgICAgIGlmIHNjb3BlICE9ICJmdW5jdGlvbiI6Cisg
ICAgICAgICAgICBub2RlID0gZ2V0X3Njb3BlX25vZGUoY29sbGVjdG9yLCBzY29wZSkKKyAgICAg
ICAgICAgIGlmIG5vZGUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBhc3NlcnQgc2NvcGUgPT0g
ImNsYXNzIiBhbmQgaXNpbnN0YW5jZShjb2xsZWN0b3IsIE1vZHVsZSkKKyAgICAgICAgICAgICAg
ICAjIHVzZSBtb2R1bGUtbGV2ZWwgY29sbGVjdG9yIGZvciBjbGFzcy1zY29wZSAoZm9yIG5vdykK
KyAgICAgICAgICAgICAgICBub2RlID0gY29sbGVjdG9yCisgICAgICAgIGlmIG5vZGUgYW5kIGFy
Z25hbWUgaW4gbm9kZS5fbmFtZTJwc2V1ZG9maXh0dXJlZGVmOgorICAgICAgICAgICAgYXJnMmZp
eHR1cmVkZWZzW2FyZ25hbWVdID0gW25vZGUuX25hbWUycHNldWRvZml4dHVyZWRlZlthcmduYW1l
XV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZpeHR1cmVkZWYgPSAgRml4dHVyZURlZihm
aXh0dXJlbWFuYWdlciwgJycsIGFyZ25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBn
ZXRfZGlyZWN0X3BhcmFtX2ZpeHR1cmVfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFyZzJzY29wZVthcmduYW1lXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlbGlz
dCwgRmFsc2UsIEZhbHNlKQorICAgICAgICAgICAgYXJnMmZpeHR1cmVkZWZzW2FyZ25hbWVdID0g
W2ZpeHR1cmVkZWZdCisgICAgICAgICAgICBpZiBub2RlIGlzIG5vdCBOb25lOgorICAgICAgICAg
ICAgICAgIG5vZGUuX25hbWUycHNldWRvZml4dHVyZWRlZlthcmduYW1lXSA9IGZpeHR1cmVkZWYK
KworCitkZWYgZ2V0X2RpcmVjdF9wYXJhbV9maXh0dXJlX2Z1bmMocmVxdWVzdCk6CisgICAgcmV0
dXJuIHJlcXVlc3QucGFyYW0KKworY2xhc3MgRnVuY0ZpeHR1cmVJbmZvOgorICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBhcmduYW1lcywgbmFtZXNfY2xvc3VyZSwgbmFtZTJmaXh0dXJlZGVmcyk6Cisg
ICAgICAgIHNlbGYuYXJnbmFtZXMgPSBhcmduYW1lcworICAgICAgICBzZWxmLm5hbWVzX2Nsb3N1
cmUgPSBuYW1lc19jbG9zdXJlCisgICAgICAgIHNlbGYubmFtZTJmaXh0dXJlZGVmcyA9IG5hbWUy
Zml4dHVyZWRlZnMKKworCitkZWYgX21hcmtlZChmdW5jLCBtYXJrKToKKyAgICAiIiIgUmV0dXJu
cyBUcnVlIGlmIDpmdW5jOiBpcyBhbHJlYWR5IG1hcmtlZCB3aXRoIDptYXJrOiwgRmFsc2Ugb3Ro
ZXJ3aXNlLgorICAgIFRoaXMgY2FuIGhhcHBlbiBpZiBtYXJrZXIgaXMgYXBwbGllZCB0byBjbGFz
cyBhbmQgdGhlIHRlc3QgZmlsZSBpcworICAgIGludm9rZWQgbW9yZSB0aGFuIG9uY2UuCisgICAg
IiIiCisgICAgdHJ5OgorICAgICAgICBmdW5jX21hcmsgPSBnZXRhdHRyKGZ1bmMsIG1hcmsubmFt
ZSkKKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIHJldHVybiBGYWxzZQorICAg
IHJldHVybiBtYXJrLmFyZ3MgPT0gZnVuY19tYXJrLmFyZ3MgYW5kIG1hcmsua3dhcmdzID09IGZ1
bmNfbWFyay5rd2FyZ3MKKworCitkZWYgdHJhbnNmZXJfbWFya2VycyhmdW5jb2JqLCBjbHMsIG1v
ZCk6CisgICAgIyBYWFggdGhpcyBzaG91bGQgcmF0aGVyIGJlIGNvZGUgaW4gdGhlIG1hcmsgcGx1
Z2luIG9yIHRoZSBtYXJrCisgICAgIyBwbHVnaW4gc2hvdWxkIG1lcmdlIHdpdGggdGhlIHB5dGhv
biBwbHVnaW4uCisgICAgZm9yIGhvbGRlciBpbiAoY2xzLCBtb2QpOgorICAgICAgICB0cnk6Cisg
ICAgICAgICAgICBweXRlc3RtYXJrID0gaG9sZGVyLnB5dGVzdG1hcmsKKyAgICAgICAgZXhjZXB0
IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgaXNpbnN0
YW5jZShweXRlc3RtYXJrLCBsaXN0KToKKyAgICAgICAgICAgIGZvciBtYXJrIGluIHB5dGVzdG1h
cms6CisgICAgICAgICAgICAgICAgaWYgbm90IF9tYXJrZWQoZnVuY29iaiwgbWFyayk6CisgICAg
ICAgICAgICAgICAgICAgIG1hcmsoZnVuY29iaikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg
IGlmIG5vdCBfbWFya2VkKGZ1bmNvYmosIHB5dGVzdG1hcmspOgorICAgICAgICAgICAgICAgIHB5
dGVzdG1hcmsoZnVuY29iaikKKworY2xhc3MgTW9kdWxlKHB5dGVzdC5GaWxlLCBQeUNvbGxlY3Rv
cik6CisgICAgIiIiIENvbGxlY3RvciBmb3IgdGVzdCBjbGFzc2VzIGFuZCBmdW5jdGlvbnMuICIi
IgorICAgIGRlZiBfZ2V0b2JqKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbWVtb2l6ZWRj
YWxsKCdfb2JqJywgc2VsZi5faW1wb3J0dGVzdG1vZHVsZSkKKworICAgIGRlZiBjb2xsZWN0KHNl
bGYpOgorICAgICAgICBzZWxmLnNlc3Npb24uX2ZpeHR1cmVtYW5hZ2VyLnBhcnNlZmFjdG9yaWVz
KHNlbGYpCisgICAgICAgIHJldHVybiBzdXBlcihNb2R1bGUsIHNlbGYpLmNvbGxlY3QoKQorCisg
ICAgZGVmIF9pbXBvcnR0ZXN0bW9kdWxlKHNlbGYpOgorICAgICAgICAjIHdlIGFzc3VtZSB3ZSBh
cmUgb25seSBjYWxsZWQgb25jZSBwZXIgbW9kdWxlCisgICAgICAgIGltcG9ydG1vZGUgPSBzZWxm
LmNvbmZpZy5nZXRvcHRpb24oIi0taW1wb3J0LW1vZGUiKQorICAgICAgICB0cnk6CisgICAgICAg
ICAgICBtb2QgPSBzZWxmLmZzcGF0aC5weWltcG9ydChlbnN1cmVzeXNwYXRoPWltcG9ydG1vZGUp
CisgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIHNlbGYuQ29s
bGVjdEVycm9yKAorICAgICAgICAgICAgICAgIF9weXRlc3QuX2NvZGUuRXhjZXB0aW9uSW5mbygp
LmdldHJlcHIoc3R5bGU9InNob3J0IikpCisgICAgICAgIGV4Y2VwdCBzZWxmLmZzcGF0aC5JbXBv
cnRNaXNtYXRjaEVycm9yOgorICAgICAgICAgICAgZSA9IHN5cy5leGNfaW5mbygpWzFdCisgICAg
ICAgICAgICByYWlzZSBzZWxmLkNvbGxlY3RFcnJvcigKKyAgICAgICAgICAgICAgICAiaW1wb3J0
IGZpbGUgbWlzbWF0Y2g6XG4iCisgICAgICAgICAgICAgICAgImltcG9ydGVkIG1vZHVsZSAlciBo
YXMgdGhpcyBfX2ZpbGVfXyBhdHRyaWJ1dGU6XG4iCisgICAgICAgICAgICAgICAgIiAgJXNcbiIK
KyAgICAgICAgICAgICAgICAid2hpY2ggaXMgbm90IHRoZSBzYW1lIGFzIHRoZSB0ZXN0IGZpbGUg
d2Ugd2FudCB0byBjb2xsZWN0OlxuIgorICAgICAgICAgICAgICAgICIgICVzXG4iCisgICAgICAg
ICAgICAgICAgIkhJTlQ6IHJlbW92ZSBfX3B5Y2FjaGVfXyAvIC5weWMgZmlsZXMgYW5kL29yIHVz
ZSBhICIKKyAgICAgICAgICAgICAgICAidW5pcXVlIGJhc2VuYW1lIGZvciB5b3VyIHRlc3QgZmls
ZSBtb2R1bGVzIgorICAgICAgICAgICAgICAgICAlIGUuYXJncworICAgICAgICAgICAgKQorICAg
ICAgICAjcHJpbnQgImltcG9ydGVkIHRlc3QgbW9kdWxlIiwgbW9kCisgICAgICAgIHNlbGYuY29u
ZmlnLnBsdWdpbm1hbmFnZXIuY29uc2lkZXJfbW9kdWxlKG1vZCkKKyAgICAgICAgcmV0dXJuIG1v
ZAorCisgICAgZGVmIHNldHVwKHNlbGYpOgorICAgICAgICBzZXR1cF9tb2R1bGUgPSB4dW5pdHNl
dHVwKHNlbGYub2JqLCAic2V0VXBNb2R1bGUiKQorICAgICAgICBpZiBzZXR1cF9tb2R1bGUgaXMg
Tm9uZToKKyAgICAgICAgICAgIHNldHVwX21vZHVsZSA9IHh1bml0c2V0dXAoc2VsZi5vYmosICJz
ZXR1cF9tb2R1bGUiKQorICAgICAgICBpZiBzZXR1cF9tb2R1bGUgaXMgbm90IE5vbmU6CisgICAg
ICAgICAgICAjWFhYOiBub3NlIGNvbXBhdCBoYWNrLCBtb3ZlIHRvIG5vc2UgcGx1Z2luCisgICAg
ICAgICAgICAjIGlmIGl0IHRha2VzIGEgcG9zaXRpb25hbCBhcmcsIGl0cyBwcm9iYWJseSBhIHB5
dGVzdCBzdHlsZSBvbmUKKyAgICAgICAgICAgICMgc28gd2UgcGFzcyB0aGUgY3VycmVudCBtb2R1
bGUgb2JqZWN0CisgICAgICAgICAgICBpZiBfaGFzX3Bvc2l0aW9uYWxfYXJnKHNldHVwX21vZHVs
ZSk6CisgICAgICAgICAgICAgICAgc2V0dXBfbW9kdWxlKHNlbGYub2JqKQorICAgICAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgICAgICBzZXR1cF9tb2R1bGUoKQorICAgICAgICBmaW4gPSBnZXRh
dHRyKHNlbGYub2JqLCAndGVhckRvd25Nb2R1bGUnLCBOb25lKQorICAgICAgICBpZiBmaW4gaXMg
Tm9uZToKKyAgICAgICAgICAgIGZpbiA9IGdldGF0dHIoc2VsZi5vYmosICd0ZWFyZG93bl9tb2R1
bGUnLCBOb25lKQorICAgICAgICBpZiBmaW4gaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjWFhY
OiBub3NlIGNvbXBhdCBoYWNrLCBtb3ZlIHRvIG5vc2UgcGx1Z2luCisgICAgICAgICAgICAjIGlm
IGl0IHRha2VzIGEgcG9zaXRpb25hbCBhcmcsIGl0J3MgcHJvYmFibHkgYSBweXRlc3Qgc3R5bGUg
b25lCisgICAgICAgICAgICAjIHNvIHdlIHBhc3MgdGhlIGN1cnJlbnQgbW9kdWxlIG9iamVjdAor
ICAgICAgICAgICAgaWYgX2hhc19wb3NpdGlvbmFsX2FyZyhmaW4pOgorICAgICAgICAgICAgICAg
IGZpbmFsaXplciA9IGxhbWJkYTogZmluKHNlbGYub2JqKQorICAgICAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgICAgICBmaW5hbGl6ZXIgPSBmaW4KKyAgICAgICAgICAgIHNlbGYuYWRkZmluYWxp
emVyKGZpbmFsaXplcikKKworCitjbGFzcyBDbGFzcyhQeUNvbGxlY3Rvcik6CisgICAgIiIiIENv
bGxlY3RvciBmb3IgdGVzdCBtZXRob2RzLiAiIiIKKyAgICBkZWYgY29sbGVjdChzZWxmKToKKyAg
ICAgICAgaWYgaGFzaW5pdChzZWxmLm9iaik6CisgICAgICAgICAgICBzZWxmLndhcm4oIkMxIiwg
ImNhbm5vdCBjb2xsZWN0IHRlc3QgY2xhc3MgJXIgYmVjYXVzZSBpdCBoYXMgYSAiCisgICAgICAg
ICAgICAgICAgIl9faW5pdF9fIGNvbnN0cnVjdG9yIiAlIHNlbGYub2JqLl9fbmFtZV9fKQorICAg
ICAgICAgICAgcmV0dXJuIFtdCisgICAgICAgIHJldHVybiBbc2VsZi5fZ2V0Y3VzdG9tY2xhc3Mo
Ikluc3RhbmNlIikobmFtZT0iKCkiLCBwYXJlbnQ9c2VsZildCisKKyAgICBkZWYgc2V0dXAoc2Vs
Zik6CisgICAgICAgIHNldHVwX2NsYXNzID0geHVuaXRzZXR1cChzZWxmLm9iaiwgJ3NldHVwX2Ns
YXNzJykKKyAgICAgICAgaWYgc2V0dXBfY2xhc3MgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBz
ZXR1cF9jbGFzcyA9IGdldGF0dHIoc2V0dXBfY2xhc3MsICdpbV9mdW5jJywgc2V0dXBfY2xhc3Mp
CisgICAgICAgICAgICBzZXR1cF9jbGFzcyA9IGdldGF0dHIoc2V0dXBfY2xhc3MsICdfX2Z1bmNf
XycsIHNldHVwX2NsYXNzKQorICAgICAgICAgICAgc2V0dXBfY2xhc3Moc2VsZi5vYmopCisKKyAg
ICAgICAgZmluX2NsYXNzID0gZ2V0YXR0cihzZWxmLm9iaiwgJ3RlYXJkb3duX2NsYXNzJywgTm9u
ZSkKKyAgICAgICAgaWYgZmluX2NsYXNzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZmluX2Ns
YXNzID0gZ2V0YXR0cihmaW5fY2xhc3MsICdpbV9mdW5jJywgZmluX2NsYXNzKQorICAgICAgICAg
ICAgZmluX2NsYXNzID0gZ2V0YXR0cihmaW5fY2xhc3MsICdfX2Z1bmNfXycsIGZpbl9jbGFzcykK
KyAgICAgICAgICAgIHNlbGYuYWRkZmluYWxpemVyKGxhbWJkYTogZmluX2NsYXNzKHNlbGYub2Jq
KSkKKworY2xhc3MgSW5zdGFuY2UoUHlDb2xsZWN0b3IpOgorICAgIGRlZiBfZ2V0b2JqKHNlbGYp
OgorICAgICAgICBvYmogPSBzZWxmLnBhcmVudC5vYmooKQorICAgICAgICByZXR1cm4gb2JqCisK
KyAgICBkZWYgY29sbGVjdChzZWxmKToKKyAgICAgICAgc2VsZi5zZXNzaW9uLl9maXh0dXJlbWFu
YWdlci5wYXJzZWZhY3RvcmllcyhzZWxmKQorICAgICAgICByZXR1cm4gc3VwZXIoSW5zdGFuY2Us
IHNlbGYpLmNvbGxlY3QoKQorCisgICAgZGVmIG5ld2luc3RhbmNlKHNlbGYpOgorICAgICAgICBz
ZWxmLm9iaiA9IHNlbGYuX2dldG9iaigpCisgICAgICAgIHJldHVybiBzZWxmLm9iagorCitjbGFz
cyBGdW5jdGlvbk1peGluKFB5b2JqTWl4aW4pOgorICAgICIiIiBtaXhpbiBmb3IgdGhlIGNvZGUg
Y29tbW9uIHRvIEZ1bmN0aW9uIGFuZCBHZW5lcmF0b3IuCisgICAgIiIiCisKKyAgICBkZWYgc2V0
dXAoc2VsZik6CisgICAgICAgICIiIiBwZXJmb3JtIHNldHVwIGZvciB0aGlzIHRlc3QgZnVuY3Rp
b24uICIiIgorICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICdfcHJlc2VydmVkcGFyZW50Jyk6Cisg
ICAgICAgICAgICBvYmogPSBzZWxmLl9wcmVzZXJ2ZWRwYXJlbnQKKyAgICAgICAgZWxpZiBpc2lu
c3RhbmNlKHNlbGYucGFyZW50LCBJbnN0YW5jZSk6CisgICAgICAgICAgICBvYmogPSBzZWxmLnBh
cmVudC5uZXdpbnN0YW5jZSgpCisgICAgICAgICAgICBzZWxmLm9iaiA9IHNlbGYuX2dldG9iaigp
CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvYmogPSBzZWxmLnBhcmVudC5vYmoKKyAgICAg
ICAgaWYgaW5zcGVjdC5pc21ldGhvZChzZWxmLm9iaik6CisgICAgICAgICAgICBzZXR1cF9uYW1l
ID0gJ3NldHVwX21ldGhvZCcKKyAgICAgICAgICAgIHRlYXJkb3duX25hbWUgPSAndGVhcmRvd25f
bWV0aG9kJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2V0dXBfbmFtZSA9ICdzZXR1cF9m
dW5jdGlvbicKKyAgICAgICAgICAgIHRlYXJkb3duX25hbWUgPSAndGVhcmRvd25fZnVuY3Rpb24n
CisgICAgICAgIHNldHVwX2Z1bmNfb3JfbWV0aG9kID0geHVuaXRzZXR1cChvYmosIHNldHVwX25h
bWUpCisgICAgICAgIGlmIHNldHVwX2Z1bmNfb3JfbWV0aG9kIGlzIG5vdCBOb25lOgorICAgICAg
ICAgICAgc2V0dXBfZnVuY19vcl9tZXRob2Qoc2VsZi5vYmopCisgICAgICAgIGZpbiA9IGdldGF0
dHIob2JqLCB0ZWFyZG93bl9uYW1lLCBOb25lKQorICAgICAgICBpZiBmaW4gaXMgbm90IE5vbmU6
CisgICAgICAgICAgICBzZWxmLmFkZGZpbmFsaXplcihsYW1iZGE6IGZpbihzZWxmLm9iaikpCisK
KyAgICBkZWYgX3BydW5ldHJhY2ViYWNrKHNlbGYsIGV4Y2luZm8pOgorICAgICAgICBpZiBoYXNh
dHRyKHNlbGYsICdfb2JqJykgYW5kIG5vdCBzZWxmLmNvbmZpZy5vcHRpb24uZnVsbHRyYWNlOgor
ICAgICAgICAgICAgY29kZSA9IF9weXRlc3QuX2NvZGUuQ29kZShnZXRfcmVhbF9mdW5jKHNlbGYu
b2JqKSkKKyAgICAgICAgICAgIHBhdGgsIGZpcnN0bGluZW5vID0gY29kZS5wYXRoLCBjb2RlLmZp
cnN0bGluZW5vCisgICAgICAgICAgICB0cmFjZWJhY2sgPSBleGNpbmZvLnRyYWNlYmFjaworICAg
ICAgICAgICAgbnRyYWNlYmFjayA9IHRyYWNlYmFjay5jdXQocGF0aD1wYXRoLCBmaXJzdGxpbmVu
bz1maXJzdGxpbmVubykKKyAgICAgICAgICAgIGlmIG50cmFjZWJhY2sgPT0gdHJhY2ViYWNrOgor
ICAgICAgICAgICAgICAgIG50cmFjZWJhY2sgPSBudHJhY2ViYWNrLmN1dChwYXRoPXBhdGgpCisg
ICAgICAgICAgICAgICAgaWYgbnRyYWNlYmFjayA9PSB0cmFjZWJhY2s6CisgICAgICAgICAgICAg
ICAgICAgICNudHJhY2ViYWNrID0gbnRyYWNlYmFjay5jdXQoZXhjbHVkZXBhdGg9Y3V0ZGlyMikK
KyAgICAgICAgICAgICAgICAgICAgbnRyYWNlYmFjayA9IG50cmFjZWJhY2suZmlsdGVyKGZpbHRl
cl90cmFjZWJhY2spCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBudHJhY2ViYWNrOgorICAg
ICAgICAgICAgICAgICAgICAgICAgbnRyYWNlYmFjayA9IHRyYWNlYmFjaworCisgICAgICAgICAg
ICBleGNpbmZvLnRyYWNlYmFjayA9IG50cmFjZWJhY2suZmlsdGVyKCkKKyAgICAgICAgICAgICMg
aXNzdWUzNjQ6IG1hcmsgYWxsIGJ1dCBmaXJzdCBhbmQgbGFzdCBmcmFtZXMgdG8KKyAgICAgICAg
ICAgICMgb25seSBzaG93IGEgc2luZ2xlLWxpbmUgbWVzc2FnZSBmb3IgZWFjaCBmcmFtZQorICAg
ICAgICAgICAgaWYgc2VsZi5jb25maWcub3B0aW9uLnRic3R5bGUgPT0gImF1dG8iOgorICAgICAg
ICAgICAgICAgIGlmIGxlbihleGNpbmZvLnRyYWNlYmFjaykgPiAyOgorICAgICAgICAgICAgICAg
ICAgICBmb3IgZW50cnkgaW4gZXhjaW5mby50cmFjZWJhY2tbMTotMV06CisgICAgICAgICAgICAg
ICAgICAgICAgICBlbnRyeS5zZXRfcmVwcl9zdHlsZSgnc2hvcnQnKQorCisgICAgZGVmIF9yZXBy
X2ZhaWx1cmVfcHkoc2VsZiwgZXhjaW5mbywgc3R5bGU9ImxvbmciKToKKyAgICAgICAgaWYgZXhj
aW5mby5lcnJpc2luc3RhbmNlKHB5dGVzdC5mYWlsLkV4Y2VwdGlvbik6CisgICAgICAgICAgICBp
ZiBub3QgZXhjaW5mby52YWx1ZS5weXRyYWNlOgorICAgICAgICAgICAgICAgIHJldHVybiBweS5f
YnVpbHRpbi5fdG90ZXh0KGV4Y2luZm8udmFsdWUpCisgICAgICAgIHJldHVybiBzdXBlcihGdW5j
dGlvbk1peGluLCBzZWxmKS5fcmVwcl9mYWlsdXJlX3B5KGV4Y2luZm8sCisgICAgICAgICAgICBz
dHlsZT1zdHlsZSkKKworICAgIGRlZiByZXByX2ZhaWx1cmUoc2VsZiwgZXhjaW5mbywgb3V0ZXJy
PU5vbmUpOgorICAgICAgICBhc3NlcnQgb3V0ZXJyIGlzIE5vbmUsICJYWFggb3V0ZXJyIHVzYWdl
IGlzIGRlcHJlY2F0ZWQiCisgICAgICAgIHN0eWxlID0gc2VsZi5jb25maWcub3B0aW9uLnRic3R5
bGUKKyAgICAgICAgaWYgc3R5bGUgPT0gImF1dG8iOgorICAgICAgICAgICAgc3R5bGUgPSAibG9u
ZyIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JlcHJfZmFpbHVyZV9weShleGNpbmZvLCBzdHlsZT1z
dHlsZSkKKworCitjbGFzcyBHZW5lcmF0b3IoRnVuY3Rpb25NaXhpbiwgUHlDb2xsZWN0b3IpOgor
ICAgIGRlZiBjb2xsZWN0KHNlbGYpOgorICAgICAgICAjIHRlc3QgZ2VuZXJhdG9ycyBhcmUgc2Vl
biBhcyBjb2xsZWN0b3JzIGJ1dCB0aGV5IGFsc28KKyAgICAgICAgIyBpbnZva2Ugc2V0dXAvdGVh
cmRvd24gb24gcG9wdWxhciByZXF1ZXN0CisgICAgICAgICMgKGluZHVjZWQgYnkgdGhlIGNvbW1v
biAidGVzdF8qIiBuYW1pbmcgc2hhcmVkIHdpdGggbm9ybWFsIHRlc3RzKQorICAgICAgICBzZWxm
LnNlc3Npb24uX3NldHVwc3RhdGUucHJlcGFyZShzZWxmKQorICAgICAgICAjIHNlZSBGdW5jdGlv
bk1peGluLnNldHVwIGFuZCB0ZXN0X3NldHVwc3RhdGVfaXNfcHJlc2VydmVkXzEzNAorICAgICAg
ICBzZWxmLl9wcmVzZXJ2ZWRwYXJlbnQgPSBzZWxmLnBhcmVudC5vYmoKKyAgICAgICAgbCA9IFtd
CisgICAgICAgIHNlZW4gPSB7fQorICAgICAgICBmb3IgaSwgeCBpbiBlbnVtZXJhdGUoc2VsZi5v
YmooKSk6CisgICAgICAgICAgICBuYW1lLCBjYWxsLCBhcmdzID0gc2VsZi5nZXRjYWxsYXJncyh4
KQorICAgICAgICAgICAgaWYgbm90IGNhbGxhYmxlKGNhbGwpOgorICAgICAgICAgICAgICAgIHJh
aXNlIFR5cGVFcnJvcigiJXIgeWllbGRlZCBub24gY2FsbGFibGUgdGVzdCAlciIgJShzZWxmLm9i
aiwgY2FsbCwpKQorICAgICAgICAgICAgaWYgbmFtZSBpcyBOb25lOgorICAgICAgICAgICAgICAg
IG5hbWUgPSAiWyVkXSIgJSBpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG5h
bWUgPSAiWyclcyddIiAlIG5hbWUKKyAgICAgICAgICAgIGlmIG5hbWUgaW4gc2VlbjoKKyAgICAg
ICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCIlciBnZW5lcmF0ZWQgdGVzdHMgd2l0aCBub24t
dW5pcXVlIG5hbWUgJXIiICUoc2VsZiwgbmFtZSkpCisgICAgICAgICAgICBzZWVuW25hbWVdID0g
VHJ1ZQorICAgICAgICAgICAgbC5hcHBlbmQoc2VsZi5GdW5jdGlvbihuYW1lLCBzZWxmLCBhcmdz
PWFyZ3MsIGNhbGxvYmo9Y2FsbCkpCisgICAgICAgIHJldHVybiBsCisKKyAgICBkZWYgZ2V0Y2Fs
bGFyZ3Moc2VsZiwgb2JqKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob2JqLCAodHVwbGUs
IGxpc3QpKToKKyAgICAgICAgICAgIG9iaiA9IChvYmosKQorICAgICAgICAjIGV4cGxpY3QgbmFt
aW5nCisgICAgICAgIGlmIGlzaW5zdGFuY2Uob2JqWzBdLCBweS5idWlsdGluLl9iYXNlc3RyaW5n
KToKKyAgICAgICAgICAgIG5hbWUgPSBvYmpbMF0KKyAgICAgICAgICAgIG9iaiA9IG9ialsxOl0K
KyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG5hbWUgPSBOb25lCisgICAgICAgIGNhbGwsIGFy
Z3MgPSBvYmpbMF0sIG9ialsxOl0KKyAgICAgICAgcmV0dXJuIG5hbWUsIGNhbGwsIGFyZ3MKKwor
CitkZWYgaGFzaW5pdChvYmopOgorICAgIGluaXQgPSBnZXRhdHRyKG9iaiwgJ19faW5pdF9fJywg
Tm9uZSkKKyAgICBpZiBpbml0OgorICAgICAgICBpZiBpbml0ICE9IG9iamVjdC5fX2luaXRfXzoK
KyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKworCitkZWYgZmlsbGZpeHR1cmVzKGZ1bmN0aW9u
KToKKyAgICAiIiIgZmlsbCBtaXNzaW5nIGZ1bmNhcmdzIGZvciBhIHRlc3QgZnVuY3Rpb24uICIi
IgorICAgIHRyeToKKyAgICAgICAgcmVxdWVzdCA9IGZ1bmN0aW9uLl9yZXF1ZXN0CisgICAgZXhj
ZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAjIFhYWCB0aGlzIHNwZWNpYWwgY29kZSBwYXRo
IGlzIG9ubHkgZXhwZWN0ZWQgdG8gZXhlY3V0ZQorICAgICAgICAjIHdpdGggdGhlIG9lanNraXQg
cGx1Z2luLiAgSXQgdXNlcyBjbGFzc2VzIHdpdGggZnVuY2FyZ3MKKyAgICAgICAgIyBhbmQgd2Ug
dGh1cyBoYXZlIHRvIHdvcmsgYSBiaXQgdG8gYWxsb3cgdGhpcy4KKyAgICAgICAgZm0gPSBmdW5j
dGlvbi5zZXNzaW9uLl9maXh0dXJlbWFuYWdlcgorICAgICAgICBmaSA9IGZtLmdldGZpeHR1cmVp
bmZvKGZ1bmN0aW9uLnBhcmVudCwgZnVuY3Rpb24ub2JqLCBOb25lKQorICAgICAgICBmdW5jdGlv
bi5fZml4dHVyZWluZm8gPSBmaQorICAgICAgICByZXF1ZXN0ID0gZnVuY3Rpb24uX3JlcXVlc3Qg
PSBGaXh0dXJlUmVxdWVzdChmdW5jdGlvbikKKyAgICAgICAgcmVxdWVzdC5fZmlsbGZpeHR1cmVz
KCkKKyAgICAgICAgIyBwcnVuZSBvdXQgZnVuY2FyZ3MgZm9yIGpzdGVzdHMKKyAgICAgICAgbmV3
ZnVuY2FyZ3MgPSB7fQorICAgICAgICBmb3IgbmFtZSBpbiBmaS5hcmduYW1lczoKKyAgICAgICAg
ICAgIG5ld2Z1bmNhcmdzW25hbWVdID0gZnVuY3Rpb24uZnVuY2FyZ3NbbmFtZV0KKyAgICAgICAg
ZnVuY3Rpb24uZnVuY2FyZ3MgPSBuZXdmdW5jYXJncworICAgIGVsc2U6CisgICAgICAgIHJlcXVl
c3QuX2ZpbGxmaXh0dXJlcygpCisKKworX25vdGV4aXN0cyA9IG9iamVjdCgpCisKK2NsYXNzIENh
bGxTcGVjMihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXRhZnVuYyk6CisgICAg
ICAgIHNlbGYubWV0YWZ1bmMgPSBtZXRhZnVuYworICAgICAgICBzZWxmLmZ1bmNhcmdzID0ge30K
KyAgICAgICAgc2VsZi5faWRsaXN0ID0gW10KKyAgICAgICAgc2VsZi5wYXJhbXMgPSB7fQorICAg
ICAgICBzZWxmLl9nbG9iYWxpZCA9IF9ub3RleGlzdHMKKyAgICAgICAgc2VsZi5fZ2xvYmFsaWRf
YXJncyA9IHNldCgpCisgICAgICAgIHNlbGYuX2dsb2JhbHBhcmFtID0gX25vdGV4aXN0cworICAg
ICAgICBzZWxmLl9hcmcyc2NvcGVudW0gPSB7fSAgIyB1c2VkIGZvciBzb3J0aW5nIHBhcmFtZXRy
aXplZCByZXNvdXJjZXMKKyAgICAgICAgc2VsZi5rZXl3b3JkcyA9IHt9CisgICAgICAgIHNlbGYu
aW5kaWNlcyA9IHt9CisKKyAgICBkZWYgY29weShzZWxmLCBtZXRhZnVuYyk6CisgICAgICAgIGNz
ID0gQ2FsbFNwZWMyKHNlbGYubWV0YWZ1bmMpCisgICAgICAgIGNzLmZ1bmNhcmdzLnVwZGF0ZShz
ZWxmLmZ1bmNhcmdzKQorICAgICAgICBjcy5wYXJhbXMudXBkYXRlKHNlbGYucGFyYW1zKQorICAg
ICAgICBjcy5rZXl3b3Jkcy51cGRhdGUoc2VsZi5rZXl3b3JkcykKKyAgICAgICAgY3MuaW5kaWNl
cy51cGRhdGUoc2VsZi5pbmRpY2VzKQorICAgICAgICBjcy5fYXJnMnNjb3BlbnVtLnVwZGF0ZShz
ZWxmLl9hcmcyc2NvcGVudW0pCisgICAgICAgIGNzLl9pZGxpc3QgPSBsaXN0KHNlbGYuX2lkbGlz
dCkKKyAgICAgICAgY3MuX2dsb2JhbGlkID0gc2VsZi5fZ2xvYmFsaWQKKyAgICAgICAgY3MuX2ds
b2JhbGlkX2FyZ3MgPSBzZWxmLl9nbG9iYWxpZF9hcmdzCisgICAgICAgIGNzLl9nbG9iYWxwYXJh
bSA9IHNlbGYuX2dsb2JhbHBhcmFtCisgICAgICAgIHJldHVybiBjcworCisgICAgZGVmIF9jaGVj
a2FyZ25vdGNvbnRhaW5lZChzZWxmLCBhcmcpOgorICAgICAgICBpZiBhcmcgaW4gc2VsZi5wYXJh
bXMgb3IgYXJnIGluIHNlbGYuZnVuY2FyZ3M6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9y
KCJkdXBsaWNhdGUgJXIiICUoYXJnLCkpCisKKyAgICBkZWYgZ2V0cGFyYW0oc2VsZiwgbmFtZSk6
CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnBhcmFtc1tuYW1lXQorICAg
ICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBpZiBzZWxmLl9nbG9iYWxwYXJhbSBp
cyBfbm90ZXhpc3RzOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IobmFtZSkKKyAg
ICAgICAgICAgIHJldHVybiBzZWxmLl9nbG9iYWxwYXJhbQorCisgICAgQHByb3BlcnR5CisgICAg
ZGVmIGlkKHNlbGYpOgorICAgICAgICByZXR1cm4gIi0iLmpvaW4obWFwKHN0ciwgZmlsdGVyKE5v
bmUsIHNlbGYuX2lkbGlzdCkpKQorCisgICAgZGVmIHNldG11bHRpKHNlbGYsIHZhbHR5cGVzLCBh
cmduYW1lcywgdmFsc2V0LCBpZCwga2V5d29yZHMsIHNjb3BlbnVtLAorICAgICAgICAgICAgICAg
ICBwYXJhbV9pbmRleCk6CisgICAgICAgIGZvciBhcmcsdmFsIGluIHppcChhcmduYW1lcywgdmFs
c2V0KToKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrYXJnbm90Y29udGFpbmVkKGFyZykKKyAgICAg
ICAgICAgIHZhbHR5cGVfZm9yX2FyZyA9IHZhbHR5cGVzW2FyZ10KKyAgICAgICAgICAgIGdldGF0
dHIoc2VsZiwgdmFsdHlwZV9mb3JfYXJnKVthcmddID0gdmFsCisgICAgICAgICAgICBzZWxmLmlu
ZGljZXNbYXJnXSA9IHBhcmFtX2luZGV4CisgICAgICAgICAgICBzZWxmLl9hcmcyc2NvcGVudW1b
YXJnXSA9IHNjb3BlbnVtCisgICAgICAgICAgICBpZiB2YWwgaXMgX25vdGV4aXN0czoKKyAgICAg
ICAgICAgICAgICBzZWxmLl9lbXB0eXBhcmFtc3BlY2lmaWVkID0gVHJ1ZQorICAgICAgICBzZWxm
Ll9pZGxpc3QuYXBwZW5kKGlkKQorICAgICAgICBzZWxmLmtleXdvcmRzLnVwZGF0ZShrZXl3b3Jk
cykKKworICAgIGRlZiBzZXRhbGwoc2VsZiwgZnVuY2FyZ3MsIGlkLCBwYXJhbSk6CisgICAgICAg
IGZvciB4IGluIGZ1bmNhcmdzOgorICAgICAgICAgICAgc2VsZi5fY2hlY2thcmdub3Rjb250YWlu
ZWQoeCkKKyAgICAgICAgc2VsZi5mdW5jYXJncy51cGRhdGUoZnVuY2FyZ3MpCisgICAgICAgIGlm
IGlkIGlzIG5vdCBfbm90ZXhpc3RzOgorICAgICAgICAgICAgc2VsZi5faWRsaXN0LmFwcGVuZChp
ZCkKKyAgICAgICAgaWYgcGFyYW0gaXMgbm90IF9ub3RleGlzdHM6CisgICAgICAgICAgICBhc3Nl
cnQgc2VsZi5fZ2xvYmFscGFyYW0gaXMgX25vdGV4aXN0cworICAgICAgICAgICAgc2VsZi5fZ2xv
YmFscGFyYW0gPSBwYXJhbQorICAgICAgICBmb3IgYXJnIGluIGZ1bmNhcmdzOgorICAgICAgICAg
ICAgc2VsZi5fYXJnMnNjb3BlbnVtW2FyZ10gPSBzY29wZW51bV9mdW5jdGlvbgorCisKK2NsYXNz
IEZ1bmNhcmduYW1lc0NvbXBhdEF0dHI6CisgICAgIiIiIGhlbHBlciBjbGFzcyBzbyB0aGF0IE1l
dGFmdW5jLCBGdW5jdGlvbiBhbmQgRml4dHVyZVJlcXVlc3QKKyAgICBkb24ndCBuZWVkIHRvIGVh
Y2ggZGVmaW5lIHRoZSAiZnVuY2FyZ25hbWVzIiBjb21wYXRpYmlsaXR5IGF0dHJpYnV0ZS4KKyAg
ICAiIiIKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZnVuY2FyZ25hbWVzKHNlbGYpOgorICAgICAg
ICAiIiIgYWxpYXMgYXR0cmlidXRlIGZvciBgYGZpeHR1cmVuYW1lc2BgIGZvciBwcmUtMi4zIGNv
bXBhdGliaWxpdHkiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuZml4dHVyZW5hbWVzCisKK2NsYXNz
IE1ldGFmdW5jKEZ1bmNhcmduYW1lc0NvbXBhdEF0dHIpOgorICAgICIiIgorICAgIE1ldGFmdW5j
IG9iamVjdHMgYXJlIHBhc3NlZCB0byB0aGUgYGBweXRlc3RfZ2VuZXJhdGVfdGVzdHNgYCBob29r
LgorICAgIFRoZXkgaGVscCB0byBpbnNwZWN0IGEgdGVzdCBmdW5jdGlvbiBhbmQgdG8gZ2VuZXJh
dGUgdGVzdHMgYWNjb3JkaW5nIHRvCisgICAgdGVzdCBjb25maWd1cmF0aW9uIG9yIHZhbHVlcyBz
cGVjaWZpZWQgaW4gdGhlIGNsYXNzIG9yIG1vZHVsZSB3aGVyZSBhCisgICAgdGVzdCBmdW5jdGlv
biBpcyBkZWZpbmVkLgorCisgICAgOml2YXIgZml4dHVyZW5hbWVzOiBzZXQgb2YgZml4dHVyZSBu
YW1lcyByZXF1aXJlZCBieSB0aGUgdGVzdCBmdW5jdGlvbgorCisgICAgOml2YXIgZnVuY3Rpb246
IHVuZGVybHlpbmcgcHl0aG9uIHRlc3QgZnVuY3Rpb24KKworICAgIDppdmFyIGNsczogY2xhc3Mg
b2JqZWN0IHdoZXJlIHRoZSB0ZXN0IGZ1bmN0aW9uIGlzIGRlZmluZWQgaW4gb3IgYGBOb25lYGAu
CisKKyAgICA6aXZhciBtb2R1bGU6IHRoZSBtb2R1bGUgb2JqZWN0IHdoZXJlIHRoZSB0ZXN0IGZ1
bmN0aW9uIGlzIGRlZmluZWQgaW4uCisKKyAgICA6aXZhciBjb25maWc6IGFjY2VzcyB0byB0aGUg
OmNsYXNzOmBfcHl0ZXN0LmNvbmZpZy5Db25maWdgIG9iamVjdCBmb3IgdGhlCisgICAgICAgIHRl
c3Qgc2Vzc2lvbi4KKworICAgIDppdmFyIGZ1bmNhcmduYW1lczoKKyAgICAgICAgLi4gZGVwcmVj
YXRlZDo6IDIuMworICAgICAgICAgICAgVXNlIGBgZml4dHVyZW5hbWVzYGAgaW5zdGVhZC4KKyAg
ICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZnVuY3Rpb24sIGZpeHR1cmVpbmZvLCBjb25m
aWcsIGNscz1Ob25lLCBtb2R1bGU9Tm9uZSk6CisgICAgICAgIHNlbGYuY29uZmlnID0gY29uZmln
CisgICAgICAgIHNlbGYubW9kdWxlID0gbW9kdWxlCisgICAgICAgIHNlbGYuZnVuY3Rpb24gPSBm
dW5jdGlvbgorICAgICAgICBzZWxmLmZpeHR1cmVuYW1lcyA9IGZpeHR1cmVpbmZvLm5hbWVzX2Ns
b3N1cmUKKyAgICAgICAgc2VsZi5fYXJnMmZpeHR1cmVkZWZzID0gZml4dHVyZWluZm8ubmFtZTJm
aXh0dXJlZGVmcworICAgICAgICBzZWxmLmNscyA9IGNscworICAgICAgICBzZWxmLl9jYWxscyA9
IFtdCisgICAgICAgIHNlbGYuX2lkcyA9IHB5LmJ1aWx0aW4uc2V0KCkKKworICAgIGRlZiBwYXJh
bWV0cml6ZShzZWxmLCBhcmduYW1lcywgYXJndmFsdWVzLCBpbmRpcmVjdD1GYWxzZSwgaWRzPU5v
bmUsCisgICAgICAgIHNjb3BlPU5vbmUpOgorICAgICAgICAiIiIgQWRkIG5ldyBpbnZvY2F0aW9u
cyB0byB0aGUgdW5kZXJseWluZyB0ZXN0IGZ1bmN0aW9uIHVzaW5nIHRoZSBsaXN0CisgICAgICAg
IG9mIGFyZ3ZhbHVlcyBmb3IgdGhlIGdpdmVuIGFyZ25hbWVzLiAgUGFyYW1ldHJpemF0aW9uIGlz
IHBlcmZvcm1lZAorICAgICAgICBkdXJpbmcgdGhlIGNvbGxlY3Rpb24gcGhhc2UuICBJZiB5b3Ug
bmVlZCB0byBzZXR1cCBleHBlbnNpdmUgcmVzb3VyY2VzCisgICAgICAgIHNlZSBhYm91dCBzZXR0
aW5nIGluZGlyZWN0IHRvIGRvIGl0IHJhdGhlciBhdCB0ZXN0IHNldHVwIHRpbWUuCisKKyAgICAg
ICAgOmFyZyBhcmduYW1lczogYSBjb21tYS1zZXBhcmF0ZWQgc3RyaW5nIGRlbm90aW5nIG9uZSBv
ciBtb3JlIGFyZ3VtZW50CisgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzLCBvciBhIGxpc3Qv
dHVwbGUgb2YgYXJndW1lbnQgc3RyaW5ncy4KKworICAgICAgICA6YXJnIGFyZ3ZhbHVlczogVGhl
IGxpc3Qgb2YgYXJndmFsdWVzIGRldGVybWluZXMgaG93IG9mdGVuIGEKKyAgICAgICAgICAgIHRl
c3QgaXMgaW52b2tlZCB3aXRoIGRpZmZlcmVudCBhcmd1bWVudCB2YWx1ZXMuICBJZiBvbmx5IG9u
ZQorICAgICAgICAgICAgYXJnbmFtZSB3YXMgc3BlY2lmaWVkIGFyZ3ZhbHVlcyBpcyBhIGxpc3Qg
b2YgdmFsdWVzLiAgSWYgTgorICAgICAgICAgICAgYXJnbmFtZXMgd2VyZSBzcGVjaWZpZWQsIGFy
Z3ZhbHVlcyBtdXN0IGJlIGEgbGlzdCBvZiBOLXR1cGxlcywKKyAgICAgICAgICAgIHdoZXJlIGVh
Y2ggdHVwbGUtZWxlbWVudCBzcGVjaWZpZXMgYSB2YWx1ZSBmb3IgaXRzIHJlc3BlY3RpdmUKKyAg
ICAgICAgICAgIGFyZ25hbWUuCisKKyAgICAgICAgOmFyZyBpbmRpcmVjdDogVGhlIGxpc3Qgb2Yg
YXJnbmFtZXMgb3IgYm9vbGVhbi4gQSBsaXN0IG9mIGFyZ3VtZW50cycKKyAgICAgICAgICAgIG5h
bWVzIChzdWJzZXQgb2YgYXJnbmFtZXMpLiBJZiBUcnVlIHRoZSBsaXN0IGNvbnRhaW5zIGFsbCBu
YW1lcyBmcm9tCisgICAgICAgICAgICB0aGUgYXJnbmFtZXMuIEVhY2ggYXJndmFsdWUgY29ycmVz
cG9uZGluZyB0byBhbiBhcmduYW1lIGluIHRoaXMgbGlzdCB3aWxsCisgICAgICAgICAgICBiZSBw
YXNzZWQgYXMgcmVxdWVzdC5wYXJhbSB0byBpdHMgcmVzcGVjdGl2ZSBhcmduYW1lIGZpeHR1cmUK
KyAgICAgICAgICAgIGZ1bmN0aW9uIHNvIHRoYXQgaXQgY2FuIHBlcmZvcm0gbW9yZSBleHBlbnNp
dmUgc2V0dXBzIGR1cmluZyB0aGUKKyAgICAgICAgICAgIHNldHVwIHBoYXNlIG9mIGEgdGVzdCBy
YXRoZXIgdGhhbiBhdCBjb2xsZWN0aW9uIHRpbWUuCisKKyAgICAgICAgOmFyZyBpZHM6IGxpc3Qg
b2Ygc3RyaW5nIGlkcywgb3IgYSBjYWxsYWJsZS4KKyAgICAgICAgICAgIElmIHN0cmluZ3MsIGVh
Y2ggaXMgY29ycmVzcG9uZGluZyB0byB0aGUgYXJndmFsdWVzIHNvIHRoYXQgdGhleSBhcmUKKyAg
ICAgICAgICAgIHBhcnQgb2YgdGhlIHRlc3QgaWQuCisgICAgICAgICAgICBJZiBjYWxsYWJsZSwg
aXQgc2hvdWxkIHRha2Ugb25lIGFyZ3VtZW50IChhIHNpbmdsZSBhcmd2YWx1ZSkgYW5kIHJldHVy
bgorICAgICAgICAgICAgYSBzdHJpbmcgb3IgcmV0dXJuIE5vbmUuIElmIE5vbmUsIHRoZSBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBpZCBmb3IgdGhhdAorICAgICAgICAgICAgYXJndW1lbnQgd2ls
bCBiZSB1c2VkLgorICAgICAgICAgICAgSWYgbm8gaWRzIGFyZSBwcm92aWRlZCB0aGV5IHdpbGwg
YmUgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgZnJvbQorICAgICAgICAgICAgdGhlIGFyZ3ZhbHVl
cy4KKworICAgICAgICA6YXJnIHNjb3BlOiBpZiBzcGVjaWZpZWQgaXQgZGVub3RlcyB0aGUgc2Nv
cGUgb2YgdGhlIHBhcmFtZXRlcnMuCisgICAgICAgICAgICBUaGUgc2NvcGUgaXMgdXNlZCBmb3Ig
Z3JvdXBpbmcgdGVzdHMgYnkgcGFyYW1ldGVyIGluc3RhbmNlcy4KKyAgICAgICAgICAgIEl0IHdp
bGwgYWxzbyBvdmVycmlkZSBhbnkgZml4dHVyZS1mdW5jdGlvbiBkZWZpbmVkIHNjb3BlLCBhbGxv
d2luZworICAgICAgICAgICAgdG8gc2V0IGEgZHluYW1pYyBzY29wZSB1c2luZyB0ZXN0IGNvbnRl
eHQgb3IgY29uZmlndXJhdGlvbi4KKyAgICAgICAgIiIiCisKKyAgICAgICAgIyBpbmRpdmlkdWFs
IHBhcmFtZXRyaXplZCBhcmd1bWVudCBzZXRzIGNhbiBiZSB3cmFwcGVkIGluIGEgc2VyaWVzCisg
ICAgICAgICMgb2YgbWFya2VycyBpbiB3aGljaCBjYXNlIHdlIHVud3JhcCB0aGUgdmFsdWVzIGFu
ZCBhcHBseSB0aGUgbWFyaworICAgICAgICAjIGF0IEZ1bmN0aW9uIGluaXQKKyAgICAgICAgbmV3
a2V5d29yZHMgPSB7fQorICAgICAgICB1bndyYXBwZWRfYXJndmFsdWVzID0gW10KKyAgICAgICAg
Zm9yIGksIGFyZ3ZhbCBpbiBlbnVtZXJhdGUoYXJndmFsdWVzKToKKyAgICAgICAgICAgIHdoaWxl
IGlzaW5zdGFuY2UoYXJndmFsLCBNYXJrRGVjb3JhdG9yKToKKyAgICAgICAgICAgICAgICBuZXdt
YXJrID0gTWFya0RlY29yYXRvcihhcmd2YWwubWFya25hbWUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYXJndmFsLmFyZ3NbOi0xXSwgYXJndmFsLmt3YXJncykKKyAg
ICAgICAgICAgICAgICBuZXdtYXJrcyA9IG5ld2tleXdvcmRzLnNldGRlZmF1bHQoaSwge30pCisg
ICAgICAgICAgICAgICAgbmV3bWFya3NbbmV3bWFyay5tYXJrbmFtZV0gPSBuZXdtYXJrCisgICAg
ICAgICAgICAgICAgYXJndmFsID0gYXJndmFsLmFyZ3NbLTFdCisgICAgICAgICAgICB1bndyYXBw
ZWRfYXJndmFsdWVzLmFwcGVuZChhcmd2YWwpCisgICAgICAgIGFyZ3ZhbHVlcyA9IHVud3JhcHBl
ZF9hcmd2YWx1ZXMKKworICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShhcmduYW1lcywgKHR1cGxl
LCBsaXN0KSk6CisgICAgICAgICAgICBhcmduYW1lcyA9IFt4LnN0cmlwKCkgZm9yIHggaW4gYXJn
bmFtZXMuc3BsaXQoIiwiKSBpZiB4LnN0cmlwKCldCisgICAgICAgICAgICBpZiBsZW4oYXJnbmFt
ZXMpID09IDE6CisgICAgICAgICAgICAgICAgYXJndmFsdWVzID0gWyh2YWwsKSBmb3IgdmFsIGlu
IGFyZ3ZhbHVlc10KKyAgICAgICAgaWYgbm90IGFyZ3ZhbHVlczoKKyAgICAgICAgICAgIGFyZ3Zh
bHVlcyA9IFsoX25vdGV4aXN0cywpICogbGVuKGFyZ25hbWVzKV0KKworICAgICAgICBpZiBzY29w
ZSBpcyBOb25lOgorICAgICAgICAgICAgc2NvcGUgPSAiZnVuY3Rpb24iCisgICAgICAgIHNjb3Bl
bnVtID0gc2NvcGVzLmluZGV4KHNjb3BlKQorICAgICAgICB2YWx0eXBlcyA9IHt9CisgICAgICAg
IGZvciBhcmcgaW4gYXJnbmFtZXM6CisgICAgICAgICAgICBpZiBhcmcgbm90IGluIHNlbGYuZml4
dHVyZW5hbWVzOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIiVyIHVzZXMgbm8g
Zml4dHVyZSAlciIgJShzZWxmLmZ1bmN0aW9uLCBhcmcpKQorCisgICAgICAgIGlmIGluZGlyZWN0
IGlzIFRydWU6CisgICAgICAgICAgICB2YWx0eXBlcyA9IGRpY3QuZnJvbWtleXMoYXJnbmFtZXMs
ICJwYXJhbXMiKQorICAgICAgICBlbGlmIGluZGlyZWN0IGlzIEZhbHNlOgorICAgICAgICAgICAg
dmFsdHlwZXMgPSBkaWN0LmZyb21rZXlzKGFyZ25hbWVzLCAiZnVuY2FyZ3MiKQorICAgICAgICBl
bGlmIGlzaW5zdGFuY2UoaW5kaXJlY3QsICh0dXBsZSwgbGlzdCkpOgorICAgICAgICAgICAgdmFs
dHlwZXMgPSBkaWN0LmZyb21rZXlzKGFyZ25hbWVzLCAiZnVuY2FyZ3MiKQorICAgICAgICAgICAg
Zm9yIGFyZyBpbiBpbmRpcmVjdDoKKyAgICAgICAgICAgICAgICBpZiBhcmcgbm90IGluIGFyZ25h
bWVzOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJpbmRpcmVjdCBnaXZl
biB0byAlcjogZml4dHVyZSAlciBkb2Vzbid0IGV4aXN0IiAlKAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNlbGYuZnVuY3Rpb24sIGFyZykpCisgICAgICAgICAgICAgICAg
dmFsdHlwZXNbYXJnXSA9ICJwYXJhbXMiCisgICAgICAgIGlkZm4gPSBOb25lCisgICAgICAgIGlm
IGNhbGxhYmxlKGlkcyk6CisgICAgICAgICAgICBpZGZuID0gaWRzCisgICAgICAgICAgICBpZHMg
PSBOb25lCisgICAgICAgIGlmIGlkcyBhbmQgbGVuKGlkcykgIT0gbGVuKGFyZ3ZhbHVlcyk6Cisg
ICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCclZCB0ZXN0cyBzcGVjaWZpZWQgd2l0aCAlZCBp
ZHMnICUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbihhcmd2YWx1ZXMpLCBsZW4o
aWRzKSkpCisgICAgICAgIGlmIG5vdCBpZHM6CisgICAgICAgICAgICBpZHMgPSBpZG1ha2VyKGFy
Z25hbWVzLCBhcmd2YWx1ZXMsIGlkZm4pCisgICAgICAgIG5ld2NhbGxzID0gW10KKyAgICAgICAg
Zm9yIGNhbGxzcGVjIGluIHNlbGYuX2NhbGxzIG9yIFtDYWxsU3BlYzIoc2VsZildOgorICAgICAg
ICAgICAgZm9yIHBhcmFtX2luZGV4LCB2YWxzZXQgaW4gZW51bWVyYXRlKGFyZ3ZhbHVlcyk6Cisg
ICAgICAgICAgICAgICAgYXNzZXJ0IGxlbih2YWxzZXQpID09IGxlbihhcmduYW1lcykKKyAgICAg
ICAgICAgICAgICBuZXdjYWxsc3BlYyA9IGNhbGxzcGVjLmNvcHkoc2VsZikKKyAgICAgICAgICAg
ICAgICBuZXdjYWxsc3BlYy5zZXRtdWx0aSh2YWx0eXBlcywgYXJnbmFtZXMsIHZhbHNldCwgaWRz
W3BhcmFtX2luZGV4XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdr
ZXl3b3Jkcy5nZXQocGFyYW1faW5kZXgsIHt9KSwgc2NvcGVudW0sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGFyYW1faW5kZXgpCisgICAgICAgICAgICAgICAgbmV3Y2Fs
bHMuYXBwZW5kKG5ld2NhbGxzcGVjKQorICAgICAgICBzZWxmLl9jYWxscyA9IG5ld2NhbGxzCisK
KyAgICBkZWYgYWRkY2FsbChzZWxmLCBmdW5jYXJncz1Ob25lLCBpZD1fbm90ZXhpc3RzLCBwYXJh
bT1fbm90ZXhpc3RzKToKKyAgICAgICAgIiIiIChkZXByZWNhdGVkLCB1c2UgcGFyYW1ldHJpemUp
IEFkZCBhIG5ldyBjYWxsIHRvIHRoZSB1bmRlcmx5aW5nCisgICAgICAgIHRlc3QgZnVuY3Rpb24g
ZHVyaW5nIHRoZSBjb2xsZWN0aW9uIHBoYXNlIG9mIGEgdGVzdCBydW4uICBOb3RlIHRoYXQKKyAg
ICAgICAgcmVxdWVzdC5hZGRjYWxsKCkgaXMgY2FsbGVkIGR1cmluZyB0aGUgdGVzdCBjb2xsZWN0
aW9uIHBoYXNlIHByaW9yIGFuZAorICAgICAgICBpbmRlcGVuZGVudGx5IHRvIGFjdHVhbCB0ZXN0
IGV4ZWN1dGlvbi4gIFlvdSBzaG91bGQgb25seSB1c2UgYWRkY2FsbCgpCisgICAgICAgIGlmIHlv
dSBuZWVkIHRvIHNwZWNpZnkgbXVsdGlwbGUgYXJndW1lbnRzIG9mIGEgdGVzdCBmdW5jdGlvbi4K
KworICAgICAgICA6YXJnIGZ1bmNhcmdzOiBhcmd1bWVudCBrZXl3b3JkIGRpY3Rpb25hcnkgdXNl
ZCB3aGVuIGludm9raW5nCisgICAgICAgICAgICB0aGUgdGVzdCBmdW5jdGlvbi4KKworICAgICAg
ICA6YXJnIGlkOiB1c2VkIGZvciByZXBvcnRpbmcgYW5kIGlkZW50aWZpY2F0aW9uIHB1cnBvc2Vz
LiAgSWYgeW91CisgICAgICAgICAgICBkb24ndCBzdXBwbHkgYW4gYGlkYCBhbiBhdXRvbWF0aWMg
dW5pcXVlIGlkIHdpbGwgYmUgZ2VuZXJhdGVkLgorCisgICAgICAgIDphcmcgcGFyYW06IGEgcGFy
YW1ldGVyIHdoaWNoIHdpbGwgYmUgZXhwb3NlZCB0byBhIGxhdGVyIGZpeHR1cmUgZnVuY3Rpb24K
KyAgICAgICAgICAgIGludm9jYXRpb24gdGhyb3VnaCB0aGUgYGByZXF1ZXN0LnBhcmFtYGAgYXR0
cmlidXRlLgorICAgICAgICAiIiIKKyAgICAgICAgYXNzZXJ0IGZ1bmNhcmdzIGlzIE5vbmUgb3Ig
aXNpbnN0YW5jZShmdW5jYXJncywgZGljdCkKKyAgICAgICAgaWYgZnVuY2FyZ3MgaXMgbm90IE5v
bmU6CisgICAgICAgICAgICBmb3IgbmFtZSBpbiBmdW5jYXJnczoKKyAgICAgICAgICAgICAgICBp
ZiBuYW1lIG5vdCBpbiBzZWxmLmZpeHR1cmVuYW1lczoKKyAgICAgICAgICAgICAgICAgICAgcHl0
ZXN0LmZhaWwoImZ1bmNhcmcgJXIgbm90IHVzZWQgaW4gdGhpcyBmdW5jdGlvbi4iICUgbmFtZSkK
KyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZ1bmNhcmdzID0ge30KKyAgICAgICAgaWYgaWQg
aXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImlkPU5vbmUgbm90IGFsbG93
ZWQiKQorICAgICAgICBpZiBpZCBpcyBfbm90ZXhpc3RzOgorICAgICAgICAgICAgaWQgPSBsZW4o
c2VsZi5fY2FsbHMpCisgICAgICAgIGlkID0gc3RyKGlkKQorICAgICAgICBpZiBpZCBpbiBzZWxm
Ll9pZHM6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJkdXBsaWNhdGUgaWQgJXIiICUg
aWQpCisgICAgICAgIHNlbGYuX2lkcy5hZGQoaWQpCisKKyAgICAgICAgY3MgPSBDYWxsU3BlYzIo
c2VsZikKKyAgICAgICAgY3Muc2V0YWxsKGZ1bmNhcmdzLCBpZCwgcGFyYW0pCisgICAgICAgIHNl
bGYuX2NhbGxzLmFwcGVuZChjcykKKworCitpZiBfUFkzOgorICAgIGltcG9ydCBjb2RlY3MKKwor
ICAgIGRlZiBfZXNjYXBlX2J5dGVzKHZhbCk6CisgICAgICAgICIiIgorICAgICAgICBJZiB2YWwg
aXMgcHVyZSBhc2NpaSwgcmV0dXJucyBpdCBhcyBhIHN0cigpLCBvdGhlcndpc2UgZXNjYXBlcwor
ICAgICAgICBpbnRvIGEgc2VxdWVuY2Ugb2YgZXNjYXBlZCBieXRlczoKKyAgICAgICAgYidceGMz
XHhiNFx4YzVceGQ2JyAtPiB1J1xceGMzXFx4YjRcXHhjNVxceGQ2JworCisgICAgICAgIG5vdGU6
CisgICAgICAgICAgIHRoZSBvYnZpb3VzICJ2LmRlY29kZSgndW5pY29kZS1lc2NhcGUnKSIgd2ls
bCByZXR1cm4KKyAgICAgICAgICAgdmFsaWQgdXRmLTggdW5pY29kZSBpZiBpdCBmaW5kcyB0aGVt
IGluIHRoZSBzdHJpbmcsIGJ1dCB3ZQorICAgICAgICAgICB3YW50IHRvIHJldHVybiBlc2NhcGVk
IGJ5dGVzIGZvciBhbnkgYnl0ZSwgZXZlbiBpZiB0aGV5IG1hdGNoCisgICAgICAgICAgIGEgdXRm
LTggc3RyaW5nLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgdmFsOgorICAgICAgICAgICAgIyBz
b3VyY2U6IGh0dHA6Ly9nb28uZ2wvYkdzbndDCisgICAgICAgICAgICBlbmNvZGVkX2J5dGVzLCBf
ID0gY29kZWNzLmVzY2FwZV9lbmNvZGUodmFsKQorICAgICAgICAgICAgcmV0dXJuIGVuY29kZWRf
Ynl0ZXMuZGVjb2RlKCdhc2NpaScpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIGVtcHR5
IGJ5dGVzIGNyYXNoZXMgY29kZWNzLmVzY2FwZV9lbmNvZGUgKCMxMDg3KQorICAgICAgICAgICAg
cmV0dXJuICcnCitlbHNlOgorICAgIGRlZiBfZXNjYXBlX2J5dGVzKHZhbCk6CisgICAgICAgICIi
IgorICAgICAgICBJbiBweTIgYnl0ZXMgYW5kIHN0ciBhcmUgdGhlIHNhbWUgdHlwZSwgc28gcmV0
dXJuIGl0IHVuY2hhbmdlZCBpZiBpdAorICAgICAgICBpcyBhIGZ1bGwgYXNjaWkgc3RyaW5nLCBv
dGhlcndpc2UgZXNjYXBlIGl0IGludG8gaXRzIGJpbmFyeSBmb3JtLgorICAgICAgICAiIiIKKyAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHZhbC5kZWNvZGUoJ2FzY2lpJykKKyAgICAg
ICAgZXhjZXB0IFVuaWNvZGVEZWNvZGVFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiB2YWwuZW5j
b2RlKCdzdHJpbmctZXNjYXBlJykKKworCitkZWYgX2lkdmFsKHZhbCwgYXJnbmFtZSwgaWR4LCBp
ZGZuKToKKyAgICBpZiBpZGZuOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzID0gaWRmbih2
YWwpCisgICAgICAgICAgICBpZiBzOgorICAgICAgICAgICAgICAgIHJldHVybiBzCisgICAgICAg
IGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICBwYXNzCisKKyAgICBpZiBpc2luc3RhbmNl
KHZhbCwgYnl0ZXMpOgorICAgICAgICByZXR1cm4gX2VzY2FwZV9ieXRlcyh2YWwpCisgICAgZWxp
ZiBpc2luc3RhbmNlKHZhbCwgKGZsb2F0LCBpbnQsIHN0ciwgYm9vbCwgTm9uZVR5cGUpKToKKyAg
ICAgICAgcmV0dXJuIHN0cih2YWwpCisgICAgZWxpZiBpc2luc3RhbmNlKHZhbCwgUkVHRVhfVFlQ
RSk6CisgICAgICAgIHJldHVybiBfZXNjYXBlX2J5dGVzKHZhbC5wYXR0ZXJuKSBpZiBpc2luc3Rh
bmNlKHZhbC5wYXR0ZXJuLCBieXRlcykgZWxzZSB2YWwucGF0dGVybgorICAgIGVsaWYgZW51bSBp
cyBub3QgTm9uZSBhbmQgaXNpbnN0YW5jZSh2YWwsIGVudW0uRW51bSk6CisgICAgICAgIHJldHVy
biBzdHIodmFsKQorICAgIGVsaWYgaXNjbGFzcyh2YWwpIGFuZCBoYXNhdHRyKHZhbCwgJ19fbmFt
ZV9fJyk6CisgICAgICAgIHJldHVybiB2YWwuX19uYW1lX18KKyAgICBlbGlmIF9QWTIgYW5kIGlz
aW5zdGFuY2UodmFsLCB1bmljb2RlKToKKyAgICAgICAgIyBzcGVjaWFsIGNhc2UgZm9yIHB5dGhv
biAyOiBpZiBhIHVuaWNvZGUgc3RyaW5nIGlzCisgICAgICAgICMgY29udmVydGlibGUgdG8gYXNj
aWksIHJldHVybiBpdCBhcyBhbiBzdHIoKSBvYmplY3QgaW5zdGVhZAorICAgICAgICB0cnk6Cisg
ICAgICAgICAgICByZXR1cm4gc3RyKHZhbCkKKyAgICAgICAgZXhjZXB0IFVuaWNvZGVFcnJvcjoK
KyAgICAgICAgICAgICMgZmFsbHRocm91Z2gKKyAgICAgICAgICAgIHBhc3MKKyAgICByZXR1cm4g
c3RyKGFyZ25hbWUpK3N0cihpZHgpCisKK2RlZiBfaWR2YWxzZXQoaWR4LCB2YWxzZXQsIGFyZ25h
bWVzLCBpZGZuKToKKyAgICB0aGlzX2lkID0gW19pZHZhbCh2YWwsIGFyZ25hbWUsIGlkeCwgaWRm
bikKKyAgICAgICAgICAgICAgIGZvciB2YWwsIGFyZ25hbWUgaW4gemlwKHZhbHNldCwgYXJnbmFt
ZXMpXQorICAgIHJldHVybiAiLSIuam9pbih0aGlzX2lkKQorCitkZWYgaWRtYWtlcihhcmduYW1l
cywgYXJndmFsdWVzLCBpZGZuPU5vbmUpOgorICAgIGlkcyA9IFtfaWR2YWxzZXQodmFsaW5kZXgs
IHZhbHNldCwgYXJnbmFtZXMsIGlkZm4pCisgICAgICAgICAgIGZvciB2YWxpbmRleCwgdmFsc2V0
IGluIGVudW1lcmF0ZShhcmd2YWx1ZXMpXQorICAgIGlmIGxlbihzZXQoaWRzKSkgPCBsZW4oaWRz
KToKKyAgICAgICAgIyB1c2VyIG1heSBoYXZlIHByb3ZpZGVkIGEgYmFkIGlkZm4gd2hpY2ggbWVh
bnMgdGhlIGlkcyBhcmUgbm90IHVuaXF1ZQorICAgICAgICBpZHMgPSBbc3RyKGkpICsgdGVzdGlk
IGZvciBpLCB0ZXN0aWQgaW4gZW51bWVyYXRlKGlkcyldCisgICAgcmV0dXJuIGlkcworCitkZWYg
c2hvd2ZpeHR1cmVzKGNvbmZpZyk6CisgICAgZnJvbSBfcHl0ZXN0Lm1haW4gaW1wb3J0IHdyYXBf
c2Vzc2lvbgorICAgIHJldHVybiB3cmFwX3Nlc3Npb24oY29uZmlnLCBfc2hvd2ZpeHR1cmVzX21h
aW4pCisKK2RlZiBfc2hvd2ZpeHR1cmVzX21haW4oY29uZmlnLCBzZXNzaW9uKToKKyAgICBpbXBv
cnQgX3B5dGVzdC5jb25maWcKKyAgICBzZXNzaW9uLnBlcmZvcm1fY29sbGVjdCgpCisgICAgY3Vy
ZGlyID0gcHkucGF0aC5sb2NhbCgpCisgICAgdHcgPSBfcHl0ZXN0LmNvbmZpZy5jcmVhdGVfdGVy
bWluYWxfd3JpdGVyKGNvbmZpZykKKyAgICB2ZXJib3NlID0gY29uZmlnLmdldHZhbHVlKCJ2ZXJi
b3NlIikKKworICAgIGZtID0gc2Vzc2lvbi5fZml4dHVyZW1hbmFnZXIKKworICAgIGF2YWlsYWJs
ZSA9IFtdCisgICAgZm9yIGFyZ25hbWUsIGZpeHR1cmVkZWZzIGluIGZtLl9hcmcyZml4dHVyZWRl
ZnMuaXRlbXMoKToKKyAgICAgICAgYXNzZXJ0IGZpeHR1cmVkZWZzIGlzIG5vdCBOb25lCisgICAg
ICAgIGlmIG5vdCBmaXh0dXJlZGVmczoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGZp
eHR1cmVkZWYgPSBmaXh0dXJlZGVmc1stMV0KKyAgICAgICAgbG9jID0gZ2V0bG9jYXRpb24oZml4
dHVyZWRlZi5mdW5jLCBjdXJkaXIpCisgICAgICAgIGF2YWlsYWJsZS5hcHBlbmQoKGxlbihmaXh0
dXJlZGVmLmJhc2VpZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeHR1cmVkZWYuZnVu
Yy5fX21vZHVsZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJkaXIuYmVzdHJlbHBh
dGgobG9jKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZml4dHVyZWRlZi5hcmduYW1lLCBm
aXh0dXJlZGVmKSkKKworICAgIGF2YWlsYWJsZS5zb3J0KCkKKyAgICBjdXJyZW50bW9kdWxlID0g
Tm9uZQorICAgIGZvciBiYXNlaWQsIG1vZHVsZSwgYmVzdHJlbCwgYXJnbmFtZSwgZml4dHVyZWRl
ZiBpbiBhdmFpbGFibGU6CisgICAgICAgIGlmIGN1cnJlbnRtb2R1bGUgIT0gbW9kdWxlOgorICAg
ICAgICAgICAgaWYgbm90IG1vZHVsZS5zdGFydHN3aXRoKCJfcHl0ZXN0LiIpOgorICAgICAgICAg
ICAgICAgIHR3LmxpbmUoKQorICAgICAgICAgICAgICAgIHR3LnNlcCgiLSIsICJmaXh0dXJlcyBk
ZWZpbmVkIGZyb20gJXMiICUobW9kdWxlLCkpCisgICAgICAgICAgICAgICAgY3VycmVudG1vZHVs
ZSA9IG1vZHVsZQorICAgICAgICBpZiB2ZXJib3NlIDw9IDAgYW5kIGFyZ25hbWVbMF0gPT0gIl8i
OgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgdmVyYm9zZSA+IDA6CisgICAgICAg
ICAgICBmdW5jYXJnc3BlYyA9ICIlcyAtLSAlcyIgJShhcmduYW1lLCBiZXN0cmVsLCkKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIGZ1bmNhcmdzcGVjID0gYXJnbmFtZQorICAgICAgICB0dy5s
aW5lKGZ1bmNhcmdzcGVjLCBncmVlbj1UcnVlKQorICAgICAgICBsb2MgPSBnZXRsb2NhdGlvbihm
aXh0dXJlZGVmLmZ1bmMsIGN1cmRpcikKKyAgICAgICAgZG9jID0gZml4dHVyZWRlZi5mdW5jLl9f
ZG9jX18gb3IgIiIKKyAgICAgICAgaWYgZG9jOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZG9j
LnN0cmlwKCkuc3BsaXQoIlxuIik6CisgICAgICAgICAgICAgICAgdHcubGluZSgiICAgICIgKyBs
aW5lLnN0cmlwKCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0dy5saW5lKCIgICAgJXM6
IG5vIGRvY3N0cmluZyBhdmFpbGFibGUiICUobG9jLCksCisgICAgICAgICAgICAgICAgcmVkPVRy
dWUpCisKK2RlZiBnZXRsb2NhdGlvbihmdW5jdGlvbiwgY3VyZGlyKToKKyAgICBpbXBvcnQgaW5z
cGVjdAorICAgIGZuID0gcHkucGF0aC5sb2NhbChpbnNwZWN0LmdldGZpbGUoZnVuY3Rpb24pKQor
ICAgIGxpbmVubyA9IHB5LmJ1aWx0aW4uX2dldGNvZGUoZnVuY3Rpb24pLmNvX2ZpcnN0bGluZW5v
CisgICAgaWYgZm4ucmVsdG8oY3VyZGlyKToKKyAgICAgICAgZm4gPSBmbi5yZWx0byhjdXJkaXIp
CisgICAgcmV0dXJuICIlczolZCIgJShmbiwgbGluZW5vKzEpCisKKyMgYnVpbHRpbiBweXRlc3Qu
cmFpc2VzIGhlbHBlcgorCitkZWYgcmFpc2VzKGV4cGVjdGVkX2V4Y2VwdGlvbiwgKmFyZ3MsICoq
a3dhcmdzKToKKyAgICAiIiIgYXNzZXJ0IHRoYXQgYSBjb2RlIGJsb2NrL2Z1bmN0aW9uIGNhbGwg
cmFpc2VzIGBgZXhwZWN0ZWRfZXhjZXB0aW9uYGAKKyAgICBhbmQgcmFpc2UgYSBmYWlsdXJlIGV4
Y2VwdGlvbiBvdGhlcndpc2UuCisKKyAgICBUaGlzIGhlbHBlciBwcm9kdWNlcyBhIGBgRXhjZXB0
aW9uSW5mbygpYGAgb2JqZWN0IChzZWUgYmVsb3cpLgorCisgICAgSWYgdXNpbmcgUHl0aG9uIDIu
NSBvciBhYm92ZSwgeW91IG1heSB1c2UgdGhpcyBmdW5jdGlvbiBhcyBhCisgICAgY29udGV4dCBt
YW5hZ2VyOjoKKworICAgICAgICA+Pj4gd2l0aCByYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IpOgor
ICAgICAgICAuLi4gICAgMS8wCisKKyAgICAuLiBub3RlOjoKKworICAgICAgIFdoZW4gdXNpbmcg
YGBweXRlc3QucmFpc2VzYGAgYXMgYSBjb250ZXh0IG1hbmFnZXIsIGl0J3Mgd29ydGh3aGlsZSB0
bworICAgICAgIG5vdGUgdGhhdCBub3JtYWwgY29udGV4dCBtYW5hZ2VyIHJ1bGVzIGFwcGx5IGFu
ZCB0aGF0IHRoZSBleGNlcHRpb24KKyAgICAgICByYWlzZWQgKm11c3QqIGJlIHRoZSBmaW5hbCBs
aW5lIGluIHRoZSBzY29wZSBvZiB0aGUgY29udGV4dCBtYW5hZ2VyLgorICAgICAgIExpbmVzIG9m
IGNvZGUgYWZ0ZXIgdGhhdCwgd2l0aGluIHRoZSBzY29wZSBvZiB0aGUgY29udGV4dCBtYW5hZ2Vy
IHdpbGwKKyAgICAgICBub3QgYmUgZXhlY3V0ZWQuIEZvciBleGFtcGxlOjoKKworICAgICAgICAg
ICA+Pj4gd2l0aCByYWlzZXMoT1NFcnJvcikgYXMgZXhjX2luZm86CisgICAgICAgICAgICAgICAg
ICAgYXNzZXJ0IDEgPT0gMSAgIyB0aGlzIHdpbGwgZXhlY3V0ZSBhcyBleHBlY3RlZAorICAgICAg
ICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJybm8uRUVYSVNUUywgJ2RpcmVjdG9yeSBleGlz
dHMnKQorICAgICAgICAgICAgICAgICAgIGFzc2VydCBleGNfaW5mby52YWx1ZS5lcnJubyA9PSBl
cnJuby5FRVhJU1RTICAjIHRoaXMgd2lsbCBub3QgZXhlY3V0ZQorCisgICAgICAgSW5zdGVhZCwg
dGhlIGZvbGxvd2luZyBhcHByb2FjaCBtdXN0IGJlIHRha2VuIChub3RlIHRoZSBkaWZmZXJlbmNl
IGluCisgICAgICAgc2NvcGUpOjoKKworICAgICAgICAgICA+Pj4gd2l0aCByYWlzZXMoT1NFcnJv
cikgYXMgZXhjX2luZm86CisgICAgICAgICAgICAgICAgICAgYXNzZXJ0IDEgPT0gMSAgIyB0aGlz
IHdpbGwgZXhlY3V0ZSBhcyBleHBlY3RlZAorICAgICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJy
b3IoZXJybm8uRUVYSVNUUywgJ2RpcmVjdG9yeSBleGlzdHMnKQorCisgICAgICAgICAgICAgICBh
c3NlcnQgZXhjX2luZm8udmFsdWUuZXJybm8gPT0gZXJybm8uRUVYSVNUUyAgIyB0aGlzIHdpbGwg
bm93IGV4ZWN1dGUKKworICAgIE9yIHlvdSBjYW4gc3BlY2lmeSBhIGNhbGxhYmxlIGJ5IHBhc3Np
bmcgYSB0by1iZS1jYWxsZWQgbGFtYmRhOjoKKworICAgICAgICA+Pj4gcmFpc2VzKFplcm9EaXZp
c2lvbkVycm9yLCBsYW1iZGE6IDEvMCkKKyAgICAgICAgPEV4Y2VwdGlvbkluZm8gLi4uPgorCisg
ICAgb3IgeW91IGNhbiBzcGVjaWZ5IGFuIGFyYml0cmFyeSBjYWxsYWJsZSB3aXRoIGFyZ3VtZW50
czo6CisKKyAgICAgICAgPj4+IGRlZiBmKHgpOiByZXR1cm4gMS94CisgICAgICAgIC4uLgorICAg
ICAgICA+Pj4gcmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBmLCAwKQorICAgICAgICA8RXhjZXB0
aW9uSW5mbyAuLi4+CisgICAgICAgID4+PiByYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIGYsIHg9
MCkKKyAgICAgICAgPEV4Y2VwdGlvbkluZm8gLi4uPgorCisgICAgQSB0aGlyZCBwb3NzaWJpbGl0
eSBpcyB0byB1c2UgYSBzdHJpbmcgdG8gYmUgZXhlY3V0ZWQ6OgorCisgICAgICAgID4+PiByYWlz
ZXMoWmVyb0RpdmlzaW9uRXJyb3IsICJmKDApIikKKyAgICAgICAgPEV4Y2VwdGlvbkluZm8gLi4u
PgorCisgICAgLi4gYXV0b2NsYXNzOjogX3B5dGVzdC5fY29kZS5FeGNlcHRpb25JbmZvCisgICAg
ICAgIDptZW1iZXJzOgorCisgICAgLi4gbm90ZTo6CisgICAgICAgIFNpbWlsYXIgdG8gY2F1Z2h0
IGV4Y2VwdGlvbiBvYmplY3RzIGluIFB5dGhvbiwgZXhwbGljaXRseSBjbGVhcmluZworICAgICAg
ICBsb2NhbCByZWZlcmVuY2VzIHRvIHJldHVybmVkIGBgRXhjZXB0aW9uSW5mb2BgIG9iamVjdHMg
Y2FuCisgICAgICAgIGhlbHAgdGhlIFB5dGhvbiBpbnRlcnByZXRlciBzcGVlZCB1cCBpdHMgZ2Fy
YmFnZSBjb2xsZWN0aW9uLgorCisgICAgICAgIENsZWFyaW5nIHRob3NlIHJlZmVyZW5jZXMgYnJl
YWtzIGEgcmVmZXJlbmNlIGN5Y2xlCisgICAgICAgIChgYEV4Y2VwdGlvbkluZm9gYCAtLT4gY2F1
Z2h0IGV4Y2VwdGlvbiAtLT4gZnJhbWUgc3RhY2sgcmFpc2luZworICAgICAgICB0aGUgZXhjZXB0
aW9uIC0tPiBjdXJyZW50IGZyYW1lIHN0YWNrIC0tPiBsb2NhbCB2YXJpYWJsZXMgLS0+CisgICAg
ICAgIGBgRXhjZXB0aW9uSW5mb2BgKSB3aGljaCBtYWtlcyBQeXRob24ga2VlcCBhbGwgb2JqZWN0
cyByZWZlcmVuY2VkCisgICAgICAgIGZyb20gdGhhdCBjeWNsZSAoaW5jbHVkaW5nIGFsbCBsb2Nh
bCB2YXJpYWJsZXMgaW4gdGhlIGN1cnJlbnQKKyAgICAgICAgZnJhbWUpIGFsaXZlIHVudGlsIHRo
ZSBuZXh0IGN5Y2xpYyBnYXJiYWdlIGNvbGxlY3Rpb24gcnVuLiBTZWUgdGhlCisgICAgICAgIG9m
ZmljaWFsIFB5dGhvbiBgYHRyeWBgIHN0YXRlbWVudCBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGRl
dGFpbGVkCisgICAgICAgIGluZm9ybWF0aW9uLgorCisgICAgIiIiCisgICAgX190cmFjZWJhY2to
aWRlX18gPSBUcnVlCisgICAgaWYgZXhwZWN0ZWRfZXhjZXB0aW9uIGlzIEFzc2VydGlvbkVycm9y
OgorICAgICAgICAjIHdlIHdhbnQgdG8gY2F0Y2ggYSBBc3NlcnRpb25FcnJvcgorICAgICAgICAj
IHJlcGxhY2Ugb3VyIHN1YmNsYXNzIHdpdGggdGhlIGJ1aWx0aW4gb25lCisgICAgICAgICMgc2Vl
IGh0dHBzOi8vZ2l0aHViLmNvbS9weXRlc3QtZGV2L3B5dGVzdC9pc3N1ZXMvMTc2CisgICAgICAg
IGZyb20gX3B5dGVzdC5hc3NlcnRpb24udXRpbCBpbXBvcnQgQnVpbHRpbkFzc2VydGlvbkVycm9y
IFwKKyAgICAgICAgICAgIGFzIGV4cGVjdGVkX2V4Y2VwdGlvbgorICAgIG1zZyA9ICgiZXhjZXB0
aW9ucyBtdXN0IGJlIG9sZC1zdHlsZSBjbGFzc2VzIG9yIgorICAgICAgICAgICAiIGRlcml2ZWQg
ZnJvbSBCYXNlRXhjZXB0aW9uLCBub3QgJXMiKQorICAgIGlmIGlzaW5zdGFuY2UoZXhwZWN0ZWRf
ZXhjZXB0aW9uLCB0dXBsZSk6CisgICAgICAgIGZvciBleGMgaW4gZXhwZWN0ZWRfZXhjZXB0aW9u
OgorICAgICAgICAgICAgaWYgbm90IGlzY2xhc3MoZXhjKToKKyAgICAgICAgICAgICAgICByYWlz
ZSBUeXBlRXJyb3IobXNnICUgdHlwZShleGMpKQorICAgIGVsaWYgbm90IGlzY2xhc3MoZXhwZWN0
ZWRfZXhjZXB0aW9uKToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKG1zZyAlIHR5cGUoZXhwZWN0
ZWRfZXhjZXB0aW9uKSkKKworICAgIGlmIG5vdCBhcmdzOgorICAgICAgICByZXR1cm4gUmFpc2Vz
Q29udGV4dChleHBlY3RlZF9leGNlcHRpb24pCisgICAgZWxpZiBpc2luc3RhbmNlKGFyZ3NbMF0s
IHN0cik6CisgICAgICAgIGNvZGUsID0gYXJncworICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShj
b2RlLCBzdHIpCisgICAgICAgIGZyYW1lID0gc3lzLl9nZXRmcmFtZSgxKQorICAgICAgICBsb2Mg
PSBmcmFtZS5mX2xvY2Fscy5jb3B5KCkKKyAgICAgICAgbG9jLnVwZGF0ZShrd2FyZ3MpCisgICAg
ICAgICNwcmludCAicmFpc2VzIGZyYW1lIHNjb3BlOiAlciIgJSBmcmFtZS5mX2xvY2FscworICAg
ICAgICB0cnk6CisgICAgICAgICAgICBjb2RlID0gX3B5dGVzdC5fY29kZS5Tb3VyY2UoY29kZSku
Y29tcGlsZSgpCisgICAgICAgICAgICBweS5idWlsdGluLmV4ZWNfKGNvZGUsIGZyYW1lLmZfZ2xv
YmFscywgbG9jKQorICAgICAgICAgICAgIyBYWFggZGlkbidUIG1lYW4gZl9nbG9iYWxzID09IGZf
bG9jYWxzIHNvbWV0aGluZyBzcGVjaWFsPworICAgICAgICAgICAgIyAgICAgdGhpcyBpcyBkZXN0
cm95ZWQgaGVyZSAuLi4KKyAgICAgICAgZXhjZXB0IGV4cGVjdGVkX2V4Y2VwdGlvbjoKKyAgICAg
ICAgICAgIHJldHVybiBfcHl0ZXN0Ll9jb2RlLkV4Y2VwdGlvbkluZm8oKQorICAgIGVsc2U6Cisg
ICAgICAgIGZ1bmMgPSBhcmdzWzBdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZ1bmMoKmFy
Z3NbMTpdLCAqKmt3YXJncykKKyAgICAgICAgZXhjZXB0IGV4cGVjdGVkX2V4Y2VwdGlvbjoKKyAg
ICAgICAgICAgIHJldHVybiBfcHl0ZXN0Ll9jb2RlLkV4Y2VwdGlvbkluZm8oKQorICAgIHB5dGVz
dC5mYWlsKCJESUQgTk9UIFJBSVNFIHswfSIuZm9ybWF0KGV4cGVjdGVkX2V4Y2VwdGlvbikpCisK
K2NsYXNzIFJhaXNlc0NvbnRleHQob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZXhw
ZWN0ZWRfZXhjZXB0aW9uKToKKyAgICAgICAgc2VsZi5leHBlY3RlZF9leGNlcHRpb24gPSBleHBl
Y3RlZF9leGNlcHRpb24KKyAgICAgICAgc2VsZi5leGNpbmZvID0gTm9uZQorCisgICAgZGVmIF9f
ZW50ZXJfXyhzZWxmKToKKyAgICAgICAgc2VsZi5leGNpbmZvID0gb2JqZWN0Ll9fbmV3X18oX3B5
dGVzdC5fY29kZS5FeGNlcHRpb25JbmZvKQorICAgICAgICByZXR1cm4gc2VsZi5leGNpbmZvCisK
KyAgICBkZWYgX19leGl0X18oc2VsZiwgKnRwKToKKyAgICAgICAgX190cmFjZWJhY2toaWRlX18g
PSBUcnVlCisgICAgICAgIGlmIHRwWzBdIGlzIE5vbmU6CisgICAgICAgICAgICBweXRlc3QuZmFp
bCgiRElEIE5PVCBSQUlTRSIpCisgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNyk6
CisgICAgICAgICAgICAjIHB5MjY6IG9uIF9fZXhpdF9fKCkgZXhjX3ZhbHVlIG9mdGVuIGRvZXMg
bm90IGNvbnRhaW4gdGhlCisgICAgICAgICAgICAjIGV4Y2VwdGlvbiB2YWx1ZS4KKyAgICAgICAg
ICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTc4NTMKKyAgICAgICAgICAgIGlmIG5v
dCBpc2luc3RhbmNlKHRwWzFdLCBCYXNlRXhjZXB0aW9uKToKKyAgICAgICAgICAgICAgICBleGNf
dHlwZSwgdmFsdWUsIHRyYWNlYmFjayA9IHRwCisgICAgICAgICAgICAgICAgdHAgPSBleGNfdHlw
ZSwgZXhjX3R5cGUodmFsdWUpLCB0cmFjZWJhY2sKKyAgICAgICAgc2VsZi5leGNpbmZvLl9faW5p
dF9fKHRwKQorICAgICAgICByZXR1cm4gaXNzdWJjbGFzcyhzZWxmLmV4Y2luZm8udHlwZSwgc2Vs
Zi5leHBlY3RlZF9leGNlcHRpb24pCisKKyMKKyMgIHRoZSBiYXNpYyBweXRlc3QgRnVuY3Rpb24g
aXRlbQorIworCitjbGFzcyBGdW5jdGlvbihGdW5jdGlvbk1peGluLCBweXRlc3QuSXRlbSwgRnVu
Y2FyZ25hbWVzQ29tcGF0QXR0cik6CisgICAgIiIiIGEgRnVuY3Rpb24gSXRlbSBpcyByZXNwb25z
aWJsZSBmb3Igc2V0dGluZyB1cCBhbmQgZXhlY3V0aW5nIGEKKyAgICBQeXRob24gdGVzdCBmdW5j
dGlvbi4KKyAgICAiIiIKKyAgICBfZ2VuaWQgPSBOb25lCisgICAgZGVmIF9faW5pdF9fKHNlbGYs
IG5hbWUsIHBhcmVudCwgYXJncz1Ob25lLCBjb25maWc9Tm9uZSwKKyAgICAgICAgICAgICAgICAg
Y2FsbHNwZWM9Tm9uZSwgY2FsbG9iaj1OT1RTRVQsIGtleXdvcmRzPU5vbmUsIHNlc3Npb249Tm9u
ZSwKKyAgICAgICAgICAgICAgICAgZml4dHVyZWluZm89Tm9uZSk6CisgICAgICAgIHN1cGVyKEZ1
bmN0aW9uLCBzZWxmKS5fX2luaXRfXyhuYW1lLCBwYXJlbnQsIGNvbmZpZz1jb25maWcsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uPXNlc3Npb24pCisgICAg
ICAgIHNlbGYuX2FyZ3MgPSBhcmdzCisgICAgICAgIGlmIGNhbGxvYmogaXMgbm90IE5PVFNFVDoK
KyAgICAgICAgICAgIHNlbGYub2JqID0gY2FsbG9iagorCisgICAgICAgIHNlbGYua2V5d29yZHMu
dXBkYXRlKHNlbGYub2JqLl9fZGljdF9fKQorICAgICAgICBpZiBjYWxsc3BlYzoKKyAgICAgICAg
ICAgIHNlbGYuY2FsbHNwZWMgPSBjYWxsc3BlYworICAgICAgICAgICAgc2VsZi5rZXl3b3Jkcy51
cGRhdGUoY2FsbHNwZWMua2V5d29yZHMpCisgICAgICAgIGlmIGtleXdvcmRzOgorICAgICAgICAg
ICAgc2VsZi5rZXl3b3Jkcy51cGRhdGUoa2V5d29yZHMpCisKKyAgICAgICAgaWYgZml4dHVyZWlu
Zm8gaXMgTm9uZToKKyAgICAgICAgICAgIGZpeHR1cmVpbmZvID0gc2VsZi5zZXNzaW9uLl9maXh0
dXJlbWFuYWdlci5nZXRmaXh0dXJlaW5mbygKKyAgICAgICAgICAgICAgICBzZWxmLnBhcmVudCwg
c2VsZi5vYmosIHNlbGYuY2xzLAorICAgICAgICAgICAgICAgIGZ1bmNhcmdzPW5vdCBzZWxmLl9p
c3lpZWxkZWRmdW5jdGlvbigpKQorICAgICAgICBzZWxmLl9maXh0dXJlaW5mbyA9IGZpeHR1cmVp
bmZvCisgICAgICAgIHNlbGYuZml4dHVyZW5hbWVzID0gZml4dHVyZWluZm8ubmFtZXNfY2xvc3Vy
ZQorICAgICAgICBzZWxmLl9pbml0cmVxdWVzdCgpCisKKyAgICBkZWYgX2luaXRyZXF1ZXN0KHNl
bGYpOgorICAgICAgICBzZWxmLmZ1bmNhcmdzID0ge30KKyAgICAgICAgaWYgc2VsZi5faXN5aWVs
ZGVkZnVuY3Rpb24oKToKKyAgICAgICAgICAgIGFzc2VydCBub3QgaGFzYXR0cihzZWxmLCAiY2Fs
bHNwZWMiKSwgKAorICAgICAgICAgICAgICAgICJ5aWVsZGVkIGZ1bmN0aW9ucyAoZGVwcmVjYXRl
ZCkgY2Fubm90IGhhdmUgZnVuY2FyZ3MiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYg
aGFzYXR0cihzZWxmLCAiY2FsbHNwZWMiKToKKyAgICAgICAgICAgICAgICBjYWxsc3BlYyA9IHNl
bGYuY2FsbHNwZWMKKyAgICAgICAgICAgICAgICBhc3NlcnQgbm90IGNhbGxzcGVjLmZ1bmNhcmdz
CisgICAgICAgICAgICAgICAgc2VsZi5fZ2VuaWQgPSBjYWxsc3BlYy5pZAorICAgICAgICAgICAg
ICAgIGlmIGhhc2F0dHIoY2FsbHNwZWMsICJwYXJhbSIpOgorICAgICAgICAgICAgICAgICAgICBz
ZWxmLnBhcmFtID0gY2FsbHNwZWMucGFyYW0KKyAgICAgICAgc2VsZi5fcmVxdWVzdCA9IEZpeHR1
cmVSZXF1ZXN0KHNlbGYpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZnVuY3Rpb24oc2VsZik6
CisgICAgICAgICJ1bmRlcmx5aW5nIHB5dGhvbiAnZnVuY3Rpb24nIG9iamVjdCIKKyAgICAgICAg
cmV0dXJuIGdldGF0dHIoc2VsZi5vYmosICdpbV9mdW5jJywgc2VsZi5vYmopCisKKyAgICBkZWYg
X2dldG9iaihzZWxmKToKKyAgICAgICAgbmFtZSA9IHNlbGYubmFtZQorICAgICAgICBpID0gbmFt
ZS5maW5kKCJbIikgIyBwYXJhbWV0cml6YXRpb24KKyAgICAgICAgaWYgaSAhPSAtMToKKyAgICAg
ICAgICAgIG5hbWUgPSBuYW1lWzppXQorICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLnBhcmVu
dC5vYmosIG5hbWUpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgX3B5ZnVuY2l0ZW0oc2VsZik6
CisgICAgICAgICIoY29tcGF0b25seSkgZm9yIGNvZGUgZXhwZWN0aW5nIHB5dGVzdC0yLjIgc3R5
bGUgcmVxdWVzdCBvYmplY3RzIgorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9pc3lp
ZWxkZWRmdW5jdGlvbihzZWxmKToKKyAgICAgICAgcmV0dXJuIGdldGF0dHIoc2VsZiwgIl9hcmdz
IiwgTm9uZSkgaXMgbm90IE5vbmUKKworICAgIGRlZiBydW50ZXN0KHNlbGYpOgorICAgICAgICAi
IiIgZXhlY3V0ZSB0aGUgdW5kZXJseWluZyB0ZXN0IGZ1bmN0aW9uLiAiIiIKKyAgICAgICAgc2Vs
Zi5paG9vay5weXRlc3RfcHlmdW5jX2NhbGwocHlmdW5jaXRlbT1zZWxmKQorCisgICAgZGVmIHNl
dHVwKHNlbGYpOgorICAgICAgICAjIGNoZWNrIGlmIHBhcmFtZXRyaXphdGlvbiBoYXBwZW5kIHdp
dGggYW4gZW1wdHkgbGlzdAorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmNhbGxzcGVj
Ll9lbXB0eXBhcmFtc3BlY2lmaWVkCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAg
ICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZzLCBsaW5lbm8gPSBz
ZWxmLl9nZXRmc2xpbmVubygpCisgICAgICAgICAgICBweXRlc3Quc2tpcCgiZ290IGVtcHR5IHBh
cmFtZXRlciBzZXQsIGZ1bmN0aW9uICVzIGF0ICVzOiVkIiAlKAorICAgICAgICAgICAgICAgIHNl
bGYuZnVuY3Rpb24uX19uYW1lX18sIGZzLCBsaW5lbm8pKQorICAgICAgICBzdXBlcihGdW5jdGlv
biwgc2VsZikuc2V0dXAoKQorICAgICAgICBmaWxsZml4dHVyZXMoc2VsZikKKworCitzY29wZTJw
cm9wcyA9IGRpY3Qoc2Vzc2lvbj0oKSkKK3Njb3BlMnByb3BzWyJtb2R1bGUiXSA9ICgiZnNwYXRo
IiwgIm1vZHVsZSIpCitzY29wZTJwcm9wc1siY2xhc3MiXSA9IHNjb3BlMnByb3BzWyJtb2R1bGUi
XSArICgiY2xzIiwpCitzY29wZTJwcm9wc1siaW5zdGFuY2UiXSA9IHNjb3BlMnByb3BzWyJjbGFz
cyJdICsgKCJpbnN0YW5jZSIsICkKK3Njb3BlMnByb3BzWyJmdW5jdGlvbiJdID0gc2NvcGUycHJv
cHNbImluc3RhbmNlIl0gKyAoImZ1bmN0aW9uIiwgImtleXdvcmRzIikKKworZGVmIHNjb3BlcHJv
cGVydHkobmFtZT1Ob25lLCBkb2M9Tm9uZSk6CisgICAgZGVmIGRlY29yYXRlc2NvcGUoZnVuYyk6
CisgICAgICAgIHNjb3BlbmFtZSA9IG5hbWUgb3IgZnVuYy5fX25hbWVfXworICAgICAgICBkZWYg
cHJvdmlkZShzZWxmKToKKyAgICAgICAgICAgIGlmIGZ1bmMuX19uYW1lX18gaW4gc2NvcGUycHJv
cHNbc2VsZi5zY29wZV06CisgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmMoc2VsZikKKyAgICAg
ICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCIlcyBub3QgYXZhaWxhYmxlIGluICVzLXNjb3Bl
ZCBjb250ZXh0IiAlICgKKyAgICAgICAgICAgICAgICBzY29wZW5hbWUsIHNlbGYuc2NvcGUpKQor
ICAgICAgICByZXR1cm4gcHJvcGVydHkocHJvdmlkZSwgTm9uZSwgTm9uZSwgZnVuYy5fX2RvY19f
KQorICAgIHJldHVybiBkZWNvcmF0ZXNjb3BlCisKKworY2xhc3MgRml4dHVyZVJlcXVlc3QoRnVu
Y2FyZ25hbWVzQ29tcGF0QXR0cik6CisgICAgIiIiIEEgcmVxdWVzdCBmb3IgYSBmaXh0dXJlIGZy
b20gYSB0ZXN0IG9yIGZpeHR1cmUgZnVuY3Rpb24uCisKKyAgICBBIHJlcXVlc3Qgb2JqZWN0IGdp
dmVzIGFjY2VzcyB0byB0aGUgcmVxdWVzdGluZyB0ZXN0IGNvbnRleHQKKyAgICBhbmQgaGFzIGFu
IG9wdGlvbmFsIGBgcGFyYW1gYCBhdHRyaWJ1dGUgaW4gY2FzZQorICAgIHRoZSBmaXh0dXJlIGlz
IHBhcmFtZXRyaXplZCBpbmRpcmVjdGx5LgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNl
bGYsIHB5ZnVuY2l0ZW0pOgorICAgICAgICBzZWxmLl9weWZ1bmNpdGVtID0gcHlmdW5jaXRlbQor
ICAgICAgICAjOiBmaXh0dXJlIGZvciB3aGljaCB0aGlzIHJlcXVlc3QgaXMgYmVpbmcgcGVyZm9y
bWVkCisgICAgICAgIHNlbGYuZml4dHVyZW5hbWUgPSBOb25lCisgICAgICAgICM6IFNjb3BlIHN0
cmluZywgb25lIG9mICJmdW5jdGlvbiIsICJjbHMiLCAibW9kdWxlIiwgInNlc3Npb24iCisgICAg
ICAgIHNlbGYuc2NvcGUgPSAiZnVuY3Rpb24iCisgICAgICAgIHNlbGYuX2Z1bmNhcmdzICA9IHt9
CisgICAgICAgIHNlbGYuX2ZpeHR1cmVkZWZzID0ge30KKyAgICAgICAgZml4dHVyZWluZm8gPSBw
eWZ1bmNpdGVtLl9maXh0dXJlaW5mbworICAgICAgICBzZWxmLl9hcmcyZml4dHVyZWRlZnMgPSBm
aXh0dXJlaW5mby5uYW1lMmZpeHR1cmVkZWZzLmNvcHkoKQorICAgICAgICBzZWxmLl9hcmcyaW5k
ZXggPSB7fQorICAgICAgICBzZWxmLmZpeHR1cmVuYW1lcyA9IGZpeHR1cmVpbmZvLm5hbWVzX2Ns
b3N1cmUKKyAgICAgICAgc2VsZi5fZml4dHVyZW1hbmFnZXIgPSBweWZ1bmNpdGVtLnNlc3Npb24u
X2ZpeHR1cmVtYW5hZ2VyCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbm9kZShzZWxmKToKKyAg
ICAgICAgIiIiIHVuZGVybHlpbmcgY29sbGVjdGlvbiBub2RlIChkZXBlbmRzIG9uIGN1cnJlbnQg
cmVxdWVzdCBzY29wZSkiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2dldHNjb3BlaXRlbShzZWxm
LnNjb3BlKQorCisKKyAgICBkZWYgX2dldG5leHRmaXh0dXJlZGVmKHNlbGYsIGFyZ25hbWUpOgor
ICAgICAgICBmaXh0dXJlZGVmcyA9IHNlbGYuX2FyZzJmaXh0dXJlZGVmcy5nZXQoYXJnbmFtZSwg
Tm9uZSkKKyAgICAgICAgaWYgZml4dHVyZWRlZnMgaXMgTm9uZToKKyAgICAgICAgICAgICMgd2Ug
YXJyaXZlIGhlcmUgYmVjYXVzZSBvZiBhICBhIGR5bmFtaWMgY2FsbCB0bworICAgICAgICAgICAg
IyBnZXRmdW5jYXJndmFsdWUoYXJnbmFtZSkgdXNhZ2Ugd2hpY2ggd2FzIG5hdHVyYWxseQorICAg
ICAgICAgICAgIyBub3Qga25vd24gYXQgcGFyc2luZy9jb2xsZWN0aW9uIHRpbWUKKyAgICAgICAg
ICAgIGZpeHR1cmVkZWZzID0gc2VsZi5fZml4dHVyZW1hbmFnZXIuZ2V0Zml4dHVyZWRlZnMoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnbmFtZSwgc2VsZi5fcHlmdW5jaXRlbS5wYXJl
bnQubm9kZWlkKQorICAgICAgICAgICAgc2VsZi5fYXJnMmZpeHR1cmVkZWZzW2FyZ25hbWVdID0g
Zml4dHVyZWRlZnMKKyAgICAgICAgIyBmaXh0dXJlZGVmcyBsaXN0IGlzIGltbXV0YWJsZSBzbyB3
ZSBtYWludGFpbiBhIGRlY3JlYXNpbmcgaW5kZXgKKyAgICAgICAgaW5kZXggPSBzZWxmLl9hcmcy
aW5kZXguZ2V0KGFyZ25hbWUsIDApIC0gMQorICAgICAgICBpZiBmaXh0dXJlZGVmcyBpcyBOb25l
IG9yICgtaW5kZXggPiBsZW4oZml4dHVyZWRlZnMpKToKKyAgICAgICAgICAgIHJhaXNlIEZpeHR1
cmVMb29rdXBFcnJvcihhcmduYW1lLCBzZWxmKQorICAgICAgICBzZWxmLl9hcmcyaW5kZXhbYXJn
bmFtZV0gPSBpbmRleAorICAgICAgICByZXR1cm4gZml4dHVyZWRlZnNbaW5kZXhdCisKKyAgICBA
cHJvcGVydHkKKyAgICBkZWYgY29uZmlnKHNlbGYpOgorICAgICAgICAiIiIgdGhlIHB5dGVzdCBj
b25maWcgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlcXVlc3QuICIiIgorICAgICAgICBy
ZXR1cm4gc2VsZi5fcHlmdW5jaXRlbS5jb25maWcKKworCisgICAgQHNjb3BlcHJvcGVydHkoKQor
ICAgIGRlZiBmdW5jdGlvbihzZWxmKToKKyAgICAgICAgIiIiIHRlc3QgZnVuY3Rpb24gb2JqZWN0
IGlmIHRoZSByZXF1ZXN0IGhhcyBhIHBlci1mdW5jdGlvbiBzY29wZS4gIiIiCisgICAgICAgIHJl
dHVybiBzZWxmLl9weWZ1bmNpdGVtLm9iagorCisgICAgQHNjb3BlcHJvcGVydHkoImNsYXNzIikK
KyAgICBkZWYgY2xzKHNlbGYpOgorICAgICAgICAiIiIgY2xhc3MgKGNhbiBiZSBOb25lKSB3aGVy
ZSB0aGUgdGVzdCBmdW5jdGlvbiB3YXMgY29sbGVjdGVkLiAiIiIKKyAgICAgICAgY2xzY29sID0g
c2VsZi5fcHlmdW5jaXRlbS5nZXRwYXJlbnQocHl0ZXN0LkNsYXNzKQorICAgICAgICBpZiBjbHNj
b2w6CisgICAgICAgICAgICByZXR1cm4gY2xzY29sLm9iagorCisgICAgQHByb3BlcnR5CisgICAg
ZGVmIGluc3RhbmNlKHNlbGYpOgorICAgICAgICAiIiIgaW5zdGFuY2UgKGNhbiBiZSBOb25lKSBv
biB3aGljaCB0ZXN0IGZ1bmN0aW9uIHdhcyBjb2xsZWN0ZWQuICIiIgorICAgICAgICAjIHVuaXR0
ZXN0IHN1cHBvcnQgaGFjaywgc2VlIF9weXRlc3QudW5pdHRlc3QuVGVzdENhc2VGdW5jdGlvbgor
ICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fcHlmdW5jaXRlbS5fdGVzdGNh
c2UKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgZnVuY3Rpb24g
PSBnZXRhdHRyKHNlbGYsICJmdW5jdGlvbiIsIE5vbmUpCisgICAgICAgICAgICBpZiBmdW5jdGlv
biBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByZXR1cm4gcHkuYnVpbHRpbi5fZ2V0aW1z
ZWxmKGZ1bmN0aW9uKQorCisgICAgQHNjb3BlcHJvcGVydHkoKQorICAgIGRlZiBtb2R1bGUoc2Vs
Zik6CisgICAgICAgICIiIiBweXRob24gbW9kdWxlIG9iamVjdCB3aGVyZSB0aGUgdGVzdCBmdW5j
dGlvbiB3YXMgY29sbGVjdGVkLiAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3B5ZnVuY2l0ZW0u
Z2V0cGFyZW50KHB5dGVzdC5Nb2R1bGUpLm9iagorCisgICAgQHNjb3BlcHJvcGVydHkoKQorICAg
IGRlZiBmc3BhdGgoc2VsZik6CisgICAgICAgICIiIiB0aGUgZmlsZSBzeXN0ZW0gcGF0aCBvZiB0
aGUgdGVzdCBtb2R1bGUgd2hpY2ggY29sbGVjdGVkIHRoaXMgdGVzdC4gIiIiCisgICAgICAgIHJl
dHVybiBzZWxmLl9weWZ1bmNpdGVtLmZzcGF0aAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGtl
eXdvcmRzKHNlbGYpOgorICAgICAgICAiIiIga2V5d29yZHMvbWFya2VycyBkaWN0aW9uYXJ5IGZv
ciB0aGUgdW5kZXJseWluZyBub2RlLiAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYubm9kZS5rZXl3
b3JkcworCisgICAgQHByb3BlcnR5CisgICAgZGVmIHNlc3Npb24oc2VsZik6CisgICAgICAgICIi
IiBweXRlc3Qgc2Vzc2lvbiBvYmplY3QuICIiIgorICAgICAgICByZXR1cm4gc2VsZi5fcHlmdW5j
aXRlbS5zZXNzaW9uCisKKyAgICBkZWYgYWRkZmluYWxpemVyKHNlbGYsIGZpbmFsaXplcik6Cisg
ICAgICAgICIiIiBhZGQgZmluYWxpemVyL3RlYXJkb3duIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBh
ZnRlciB0aGUKKyAgICAgICAgbGFzdCB0ZXN0IHdpdGhpbiB0aGUgcmVxdWVzdGluZyB0ZXN0IGNv
bnRleHQgZmluaXNoZWQKKyAgICAgICAgZXhlY3V0aW9uLiAiIiIKKyAgICAgICAgIyBYWFggdXN1
YWxseSB0aGlzIG1ldGhvZCBpcyBzaGFkb3dlZCBieSBmaXh0dXJlZGVmIHNwZWNpZmljIG9uZXMK
KyAgICAgICAgc2VsZi5fYWRkZmluYWxpemVyKGZpbmFsaXplciwgc2NvcGU9c2VsZi5zY29wZSkK
KworICAgIGRlZiBfYWRkZmluYWxpemVyKHNlbGYsIGZpbmFsaXplciwgc2NvcGUpOgorICAgICAg
ICBjb2xpdGVtID0gc2VsZi5fZ2V0c2NvcGVpdGVtKHNjb3BlKQorICAgICAgICBzZWxmLl9weWZ1
bmNpdGVtLnNlc3Npb24uX3NldHVwc3RhdGUuYWRkZmluYWxpemVyKAorICAgICAgICAgICAgZmlu
YWxpemVyPWZpbmFsaXplciwgY29saXRlbT1jb2xpdGVtKQorCisgICAgZGVmIGFwcGx5bWFya2Vy
KHNlbGYsIG1hcmtlcik6CisgICAgICAgICIiIiBBcHBseSBhIG1hcmtlciB0byBhIHNpbmdsZSB0
ZXN0IGZ1bmN0aW9uIGludm9jYXRpb24uCisgICAgICAgIFRoaXMgbWV0aG9kIGlzIHVzZWZ1bCBp
ZiB5b3UgZG9uJ3Qgd2FudCB0byBoYXZlIGEga2V5d29yZC9tYXJrZXIKKyAgICAgICAgb24gYWxs
IGZ1bmN0aW9uIGludm9jYXRpb25zLgorCisgICAgICAgIDphcmcgbWFya2VyOiBhIDpweTpjbGFz
czpgX3B5dGVzdC5tYXJrLk1hcmtEZWNvcmF0b3JgIG9iamVjdAorICAgICAgICAgICAgY3JlYXRl
ZCBieSBhIGNhbGwgdG8gYGBweXRlc3QubWFyay5OQU1FKC4uLilgYC4KKyAgICAgICAgIiIiCisg
ICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYubm9kZS5rZXl3b3Jkc1ttYXJrZXIubWFya25h
bWVdID0gbWFya2VyCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAg
IHJhaXNlIFZhbHVlRXJyb3IobWFya2VyKQorCisgICAgZGVmIHJhaXNlZXJyb3Ioc2VsZiwgbXNn
KToKKyAgICAgICAgIiIiIHJhaXNlIGEgRml4dHVyZUxvb2t1cEVycm9yIHdpdGggdGhlIGdpdmVu
IG1lc3NhZ2UuICIiIgorICAgICAgICByYWlzZSBzZWxmLl9maXh0dXJlbWFuYWdlci5GaXh0dXJl
TG9va3VwRXJyb3IoTm9uZSwgc2VsZiwgbXNnKQorCisgICAgZGVmIF9maWxsZml4dHVyZXMoc2Vs
Zik6CisgICAgICAgIGl0ZW0gPSBzZWxmLl9weWZ1bmNpdGVtCisgICAgICAgIGZpeHR1cmVuYW1l
cyA9IGdldGF0dHIoaXRlbSwgImZpeHR1cmVuYW1lcyIsIHNlbGYuZml4dHVyZW5hbWVzKQorICAg
ICAgICBmb3IgYXJnbmFtZSBpbiBmaXh0dXJlbmFtZXM6CisgICAgICAgICAgICBpZiBhcmduYW1l
IG5vdCBpbiBpdGVtLmZ1bmNhcmdzOgorICAgICAgICAgICAgICAgIGl0ZW0uZnVuY2FyZ3NbYXJn
bmFtZV0gPSBzZWxmLmdldGZ1bmNhcmd2YWx1ZShhcmduYW1lKQorCisgICAgZGVmIGNhY2hlZF9z
ZXR1cChzZWxmLCBzZXR1cCwgdGVhcmRvd249Tm9uZSwgc2NvcGU9Im1vZHVsZSIsIGV4dHJha2V5
PU5vbmUpOgorICAgICAgICAiIiIgKGRlcHJlY2F0ZWQpIFJldHVybiBhIHRlc3RpbmcgcmVzb3Vy
Y2UgbWFuYWdlZCBieSBgYHNldHVwYGAgJgorICAgICAgICBgYHRlYXJkb3duYGAgY2FsbHMuICBg
YHNjb3BlYGAgYW5kIGBgZXh0cmFrZXlgYCBkZXRlcm1pbmUgd2hlbiB0aGUKKyAgICAgICAgYGB0
ZWFyZG93bmBgIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHNvIHRoYXQgc3Vic2VxdWVudCBjYWxs
cyB0bworICAgICAgICBgYHNldHVwYGAgd291bGQgcmVjcmVhdGUgdGhlIHJlc291cmNlLiAgV2l0
aCBweXRlc3QtMi4zIHlvdSBvZnRlbgorICAgICAgICBkbyBub3QgbmVlZCBgYGNhY2hlZF9zZXR1
cCgpYGAgYXMgeW91IGNhbiBkaXJlY3RseSBkZWNsYXJlIGEgc2NvcGUKKyAgICAgICAgb24gYSBm
aXh0dXJlIGZ1bmN0aW9uIGFuZCByZWdpc3RlciBhIGZpbmFsaXplciB0aHJvdWdoCisgICAgICAg
IGBgcmVxdWVzdC5hZGRmaW5hbGl6ZXIoKWBgLgorCisgICAgICAgIDphcmcgdGVhcmRvd246IGZ1
bmN0aW9uIHJlY2VpdmluZyBhIHByZXZpb3VzbHkgc2V0dXAgcmVzb3VyY2UuCisgICAgICAgIDph
cmcgc2V0dXA6IGEgbm8tYXJndW1lbnQgZnVuY3Rpb24gY3JlYXRpbmcgYSByZXNvdXJjZS4KKyAg
ICAgICAgOmFyZyBzY29wZTogYSBzdHJpbmcgdmFsdWUgb3V0IG9mIGBgZnVuY3Rpb25gYCwgYGBj
bGFzc2BgLCBgYG1vZHVsZWBgCisgICAgICAgICAgICBvciBgYHNlc3Npb25gYCBpbmRpY2F0aW5n
IHRoZSBjYWNoaW5nIGxpZmVjeWNsZSBvZiB0aGUgcmVzb3VyY2UuCisgICAgICAgIDphcmcgZXh0
cmFrZXk6IGFkZGVkIHRvIGludGVybmFsIGNhY2hpbmcga2V5IG9mIChmdW5jYXJnbmFtZSwgc2Nv
cGUpLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZi5jb25maWcsICdf
c2V0dXBjYWNoZScpOgorICAgICAgICAgICAgc2VsZi5jb25maWcuX3NldHVwY2FjaGUgPSB7fSAj
IFhYWCB3ZWFrcmVmPworICAgICAgICBjYWNoZWtleSA9IChzZWxmLmZpeHR1cmVuYW1lLCBzZWxm
Ll9nZXRzY29wZWl0ZW0oc2NvcGUpLCBleHRyYWtleSkKKyAgICAgICAgY2FjaGUgPSBzZWxmLmNv
bmZpZy5fc2V0dXBjYWNoZQorICAgICAgICB0cnk6CisgICAgICAgICAgICB2YWwgPSBjYWNoZVtj
YWNoZWtleV0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgc2VsZi5fY2hl
Y2tfc2NvcGUoc2VsZi5maXh0dXJlbmFtZSwgc2VsZi5zY29wZSwgc2NvcGUpCisgICAgICAgICAg
ICB2YWwgPSBzZXR1cCgpCisgICAgICAgICAgICBjYWNoZVtjYWNoZWtleV0gPSB2YWwKKyAgICAg
ICAgICAgIGlmIHRlYXJkb3duIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGRlZiBmaW5h
bGl6ZXIoKToKKyAgICAgICAgICAgICAgICAgICAgZGVsIGNhY2hlW2NhY2hla2V5XQorICAgICAg
ICAgICAgICAgICAgICB0ZWFyZG93bih2YWwpCisgICAgICAgICAgICAgICAgc2VsZi5fYWRkZmlu
YWxpemVyKGZpbmFsaXplciwgc2NvcGU9c2NvcGUpCisgICAgICAgIHJldHVybiB2YWwKKworICAg
IGRlZiBnZXRmdW5jYXJndmFsdWUoc2VsZiwgYXJnbmFtZSk6CisgICAgICAgICIiIiBEeW5hbWlj
YWxseSByZXRyaWV2ZSBhIG5hbWVkIGZpeHR1cmUgZnVuY3Rpb24gYXJndW1lbnQuCisKKyAgICAg
ICAgQXMgb2YgcHl0ZXN0LTIuMywgaXQgaXMgZWFzaWVyIGFuZCB1c3VhbGx5IGJldHRlciB0byBh
Y2Nlc3Mgb3RoZXIKKyAgICAgICAgZml4dHVyZSB2YWx1ZXMgYnkgc3RhdGluZyBpdCBhcyBhbiBp
bnB1dCBhcmd1bWVudCBpbiB0aGUgZml4dHVyZQorICAgICAgICBmdW5jdGlvbi4gIElmIHlvdSBv
bmx5IGNhbiBkZWNpZGUgYWJvdXQgdXNpbmcgYW5vdGhlciBmaXh0dXJlIGF0IHRlc3QKKyAgICAg
ICAgc2V0dXAgdGltZSwgeW91IG1heSB1c2UgdGhpcyBmdW5jdGlvbiB0byByZXRyaWV2ZSBpdCBp
bnNpZGUgYSBmaXh0dXJlCisgICAgICAgIGZ1bmN0aW9uIGJvZHkuCisgICAgICAgICIiIgorICAg
ICAgICByZXR1cm4gc2VsZi5fZ2V0X2FjdGl2ZV9maXh0dXJlZGVmKGFyZ25hbWUpLmNhY2hlZF9y
ZXN1bHRbMF0KKworICAgIGRlZiBfZ2V0X2FjdGl2ZV9maXh0dXJlZGVmKHNlbGYsIGFyZ25hbWUp
OgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZml4dHVyZWRlZnNbYXJn
bmFtZV0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgICAgIGZpeHR1cmVkZWYgPSBzZWxmLl9nZXRuZXh0Zml4dHVyZWRlZihhcmduYW1lKQor
ICAgICAgICAgICAgZXhjZXB0IEZpeHR1cmVMb29rdXBFcnJvcjoKKyAgICAgICAgICAgICAgICBp
ZiBhcmduYW1lID09ICJyZXF1ZXN0IjoKKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgUHNldWRv
Rml4dHVyZURlZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlZF9yZXN1bHQgPSAoc2Vs
ZiwgWzBdLCBOb25lKQorICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUgPSAiZnVuY3Rpb24i
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBQc2V1ZG9GaXh0dXJlRGVmCisgICAgICAgICAg
ICAgICAgcmFpc2UKKyAgICAgICAgIyByZW1vdmUgaW5kZW50IHRvIHByZXZlbnQgdGhlIHB5dGhv
bjMgZXhjZXB0aW9uCisgICAgICAgICMgZnJvbSBsZWFraW5nIGludG8gdGhlIGNhbGwKKyAgICAg
ICAgcmVzdWx0ID0gc2VsZi5fZ2V0ZnVuY2FyZ3ZhbHVlKGZpeHR1cmVkZWYpCisgICAgICAgIHNl
bGYuX2Z1bmNhcmdzW2FyZ25hbWVdID0gcmVzdWx0CisgICAgICAgIHNlbGYuX2ZpeHR1cmVkZWZz
W2FyZ25hbWVdID0gZml4dHVyZWRlZgorICAgICAgICByZXR1cm4gZml4dHVyZWRlZgorCisgICAg
ZGVmIF9nZXRfZml4dHVyZXN0YWNrKHNlbGYpOgorICAgICAgICBjdXJyZW50ID0gc2VsZgorICAg
ICAgICBsID0gW10KKyAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgIGZpeHR1cmVkZWYgPSBn
ZXRhdHRyKGN1cnJlbnQsICJfZml4dHVyZWRlZiIsIE5vbmUpCisgICAgICAgICAgICBpZiBmaXh0
dXJlZGVmIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgbC5yZXZlcnNlKCkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbAorICAgICAgICAgICAgbC5hcHBlbmQoZml4dHVyZWRlZikKKyAgICAgICAg
ICAgIGN1cnJlbnQgPSBjdXJyZW50Ll9wYXJlbnRfcmVxdWVzdAorCisgICAgZGVmIF9nZXRmdW5j
YXJndmFsdWUoc2VsZiwgZml4dHVyZWRlZik6CisgICAgICAgICMgcHJlcGFyZSBhIHN1YnJlcXVl
c3Qgb2JqZWN0IGJlZm9yZSBjYWxsaW5nIGZpeHR1cmUgZnVuY3Rpb24KKyAgICAgICAgIyAobGF0
dGVyIG1hbmFnZWQgYnkgZml4dHVyZWRlZikKKyAgICAgICAgYXJnbmFtZSA9IGZpeHR1cmVkZWYu
YXJnbmFtZQorICAgICAgICBmdW5jaXRlbSA9IHNlbGYuX3B5ZnVuY2l0ZW0KKyAgICAgICAgc2Nv
cGUgPSBmaXh0dXJlZGVmLnNjb3BlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBhcmFtID0g
ZnVuY2l0ZW0uY2FsbHNwZWMuZ2V0cGFyYW0oYXJnbmFtZSkKKyAgICAgICAgZXhjZXB0IChBdHRy
aWJ1dGVFcnJvciwgVmFsdWVFcnJvcik6CisgICAgICAgICAgICBwYXJhbSA9IE5PVFNFVAorICAg
ICAgICAgICAgcGFyYW1faW5kZXggPSAwCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIGlu
ZGljZXMgbWlnaHQgbm90IGJlIHNldCBpZiBvbGQtc3R5bGUgbWV0YWZ1bmMuYWRkY2FsbCgpIHdh
cyB1c2VkCisgICAgICAgICAgICBwYXJhbV9pbmRleCA9IGZ1bmNpdGVtLmNhbGxzcGVjLmluZGlj
ZXMuZ2V0KGFyZ25hbWUsIDApCisgICAgICAgICAgICAjIGlmIGEgcGFyYW1ldHJpemUgaW52b2Nh
dGlvbiBzZXQgYSBzY29wZSBpdCB3aWxsIG92ZXJyaWRlCisgICAgICAgICAgICAjIHRoZSBzdGF0
aWMgc2NvcGUgZGVmaW5lZCB3aXRoIHRoZSBmaXh0dXJlIGZ1bmN0aW9uCisgICAgICAgICAgICBw
YXJhbXNjb3BlbnVtID0gZnVuY2l0ZW0uY2FsbHNwZWMuX2FyZzJzY29wZW51bS5nZXQoYXJnbmFt
ZSkKKyAgICAgICAgICAgIGlmIHBhcmFtc2NvcGVudW0gaXMgbm90IE5vbmU6CisgICAgICAgICAg
ICAgICAgc2NvcGUgPSBzY29wZXNbcGFyYW1zY29wZW51bV0KKworICAgICAgICBzdWJyZXF1ZXN0
ID0gU3ViUmVxdWVzdChzZWxmLCBzY29wZSwgcGFyYW0sIHBhcmFtX2luZGV4LCBmaXh0dXJlZGVm
KQorCisgICAgICAgICMgY2hlY2sgaWYgYSBoaWdoZXItbGV2ZWwgc2NvcGVkIGZpeHR1cmUgYWNj
ZXNzZXMgYSBsb3dlciBsZXZlbCBvbmUKKyAgICAgICAgc3VicmVxdWVzdC5fY2hlY2tfc2NvcGUo
YXJnbmFtZSwgc2VsZi5zY29wZSwgc2NvcGUpCisKKyAgICAgICAgIyBjbGVhciBzeXMuZXhjX2lu
Zm8gYmVmb3JlIGludm9raW5nIHRoZSBmaXh0dXJlIChweXRob24gYnVnPykKKyAgICAgICAgIyBp
ZiBpdHMgbm90IGV4cGxpY2l0bHkgY2xlYXJlZCBpdCB3aWxsIGxlYWsgaW50byB0aGUgY2FsbAor
ICAgICAgICBleGNfY2xlYXIoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIGNhbGwgdGhl
IGZpeHR1cmUgZnVuY3Rpb24KKyAgICAgICAgICAgIHZhbCA9IGZpeHR1cmVkZWYuZXhlY3V0ZShy
ZXF1ZXN0PXN1YnJlcXVlc3QpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAjIGlmIGZp
eHR1cmUgZnVuY3Rpb24gZmFpbGVkIGl0IG1pZ2h0IGhhdmUgcmVnaXN0ZXJlZCBmaW5hbGl6ZXJz
CisgICAgICAgICAgICBzZWxmLnNlc3Npb24uX3NldHVwc3RhdGUuYWRkZmluYWxpemVyKGZpeHR1
cmVkZWYuZmluaXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdWJyZXF1ZXN0Lm5vZGUpCisgICAgICAgIHJldHVybiB2YWwKKworICAgIGRlZiBf
Y2hlY2tfc2NvcGUoc2VsZiwgYXJnbmFtZSwgaW52b2tpbmdfc2NvcGUsIHJlcXVlc3RlZF9zY29w
ZSk6CisgICAgICAgIGlmIGFyZ25hbWUgPT0gInJlcXVlc3QiOgorICAgICAgICAgICAgcmV0dXJu
CisgICAgICAgIGlmIHNjb3BlbWlzbWF0Y2goaW52b2tpbmdfc2NvcGUsIHJlcXVlc3RlZF9zY29w
ZSk6CisgICAgICAgICAgICAjIHRyeSB0byByZXBvcnQgc29tZXRoaW5nIGhlbHBmdWwKKyAgICAg
ICAgICAgIGxpbmVzID0gc2VsZi5fZmFjdG9yeXRyYWNlYmFjaygpCisgICAgICAgICAgICBweXRl
c3QuZmFpbCgiU2NvcGVNaXNtYXRjaDogWW91IHRyaWVkIHRvIGFjY2VzcyB0aGUgJXIgc2NvcGVk
ICIKKyAgICAgICAgICAgICAgICAiZml4dHVyZSAlciB3aXRoIGEgJXIgc2NvcGVkIHJlcXVlc3Qg
b2JqZWN0LCAiCisgICAgICAgICAgICAgICAgImludm9sdmVkIGZhY3Rvcmllc1xuJXMiICUoCisg
ICAgICAgICAgICAgICAgKHJlcXVlc3RlZF9zY29wZSwgYXJnbmFtZSwgaW52b2tpbmdfc2NvcGUs
ICJcbiIuam9pbihsaW5lcykpKSwKKyAgICAgICAgICAgICAgICBweXRyYWNlPUZhbHNlKQorCisg
ICAgZGVmIF9mYWN0b3J5dHJhY2ViYWNrKHNlbGYpOgorICAgICAgICBsaW5lcyA9IFtdCisgICAg
ICAgIGZvciBmaXh0dXJlZGVmIGluIHNlbGYuX2dldF9maXh0dXJlc3RhY2soKToKKyAgICAgICAg
ICAgIGZhY3RvcnkgPSBmaXh0dXJlZGVmLmZ1bmMKKyAgICAgICAgICAgIGZzLCBsaW5lbm8gPSBn
ZXRmc2xpbmVubyhmYWN0b3J5KQorICAgICAgICAgICAgcCA9IHNlbGYuX3B5ZnVuY2l0ZW0uc2Vz
c2lvbi5mc3BhdGguYmVzdHJlbHBhdGgoZnMpCisgICAgICAgICAgICBhcmdzID0gX2Zvcm1hdF9h
cmdzKGZhY3RvcnkpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiVzOiVkOiAgZGVmICVzJXMi
ICUoCisgICAgICAgICAgICAgICAgcCwgbGluZW5vLCBmYWN0b3J5Ll9fbmFtZV9fLCBhcmdzKSkK
KyAgICAgICAgcmV0dXJuIGxpbmVzCisKKyAgICBkZWYgX2dldHNjb3BlaXRlbShzZWxmLCBzY29w
ZSk6CisgICAgICAgIGlmIHNjb3BlID09ICJmdW5jdGlvbiI6CisgICAgICAgICAgICAjIHRoaXMg
bWlnaHQgYWxzbyBiZSBhIG5vbi1mdW5jdGlvbiBJdGVtIGRlc3BpdGUgaXRzIGF0dHJpYnV0ZSBu
YW1lCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fcHlmdW5jaXRlbQorICAgICAgICBub2RlID0g
Z2V0X3Njb3BlX25vZGUoc2VsZi5fcHlmdW5jaXRlbSwgc2NvcGUpCisgICAgICAgIGlmIG5vZGUg
aXMgTm9uZSBhbmQgc2NvcGUgPT0gImNsYXNzIjoKKyAgICAgICAgICAgICMgZmFsbGJhY2sgdG8g
ZnVuY3Rpb24gaXRlbSBpdHNlbGYKKyAgICAgICAgICAgIG5vZGUgPSBzZWxmLl9weWZ1bmNpdGVt
CisgICAgICAgIGFzc2VydCBub2RlCisgICAgICAgIHJldHVybiBub2RlCisKKyAgICBkZWYgX19y
ZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiPEZpeHR1cmVSZXF1ZXN0IGZvciAlcj4iICUo
c2VsZi5ub2RlKQorCisKK2NsYXNzIFN1YlJlcXVlc3QoRml4dHVyZVJlcXVlc3QpOgorICAgICIi
IiBhIHN1YiByZXF1ZXN0IGZvciBoYW5kbGluZyBnZXR0aW5nIGEgZml4dHVyZSBmcm9tIGEKKyAg
ICB0ZXN0IGZ1bmN0aW9uL2ZpeHR1cmUuICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXF1
ZXN0LCBzY29wZSwgcGFyYW0sIHBhcmFtX2luZGV4LCBmaXh0dXJlZGVmKToKKyAgICAgICAgc2Vs
Zi5fcGFyZW50X3JlcXVlc3QgPSByZXF1ZXN0CisgICAgICAgIHNlbGYuZml4dHVyZW5hbWUgPSBm
aXh0dXJlZGVmLmFyZ25hbWUKKyAgICAgICAgaWYgcGFyYW0gaXMgbm90IE5PVFNFVDoKKyAgICAg
ICAgICAgIHNlbGYucGFyYW0gPSBwYXJhbQorICAgICAgICBzZWxmLnBhcmFtX2luZGV4ID0gcGFy
YW1faW5kZXgKKyAgICAgICAgc2VsZi5zY29wZSA9IHNjb3BlCisgICAgICAgIHNlbGYuX2ZpeHR1
cmVkZWYgPSBmaXh0dXJlZGVmCisgICAgICAgIHNlbGYuYWRkZmluYWxpemVyID0gZml4dHVyZWRl
Zi5hZGRmaW5hbGl6ZXIKKyAgICAgICAgc2VsZi5fcHlmdW5jaXRlbSA9IHJlcXVlc3QuX3B5ZnVu
Y2l0ZW0KKyAgICAgICAgc2VsZi5fZnVuY2FyZ3MgID0gcmVxdWVzdC5fZnVuY2FyZ3MKKyAgICAg
ICAgc2VsZi5fZml4dHVyZWRlZnMgPSByZXF1ZXN0Ll9maXh0dXJlZGVmcworICAgICAgICBzZWxm
Ll9hcmcyZml4dHVyZWRlZnMgPSByZXF1ZXN0Ll9hcmcyZml4dHVyZWRlZnMKKyAgICAgICAgc2Vs
Zi5fYXJnMmluZGV4ID0gcmVxdWVzdC5fYXJnMmluZGV4CisgICAgICAgIHNlbGYuZml4dHVyZW5h
bWVzID0gcmVxdWVzdC5maXh0dXJlbmFtZXMKKyAgICAgICAgc2VsZi5fZml4dHVyZW1hbmFnZXIg
PSByZXF1ZXN0Ll9maXh0dXJlbWFuYWdlcgorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAg
ICAgICByZXR1cm4gIjxTdWJSZXF1ZXN0ICVyIGZvciAlcj4iICUgKHNlbGYuZml4dHVyZW5hbWUs
IHNlbGYuX3B5ZnVuY2l0ZW0pCisKKworY2xhc3MgU2NvcGVNaXNtYXRjaEVycm9yKEV4Y2VwdGlv
bik6CisgICAgIiIiIEEgZml4dHVyZSBmdW5jdGlvbiB0cmllcyB0byB1c2UgYSBkaWZmZXJlbnQg
Zml4dHVyZSBmdW5jdGlvbiB3aGljaAorICAgIHdoaWNoIGhhcyBhIGxvd2VyIHNjb3BlIChlLmcu
IGEgU2Vzc2lvbiBvbmUgY2FsbHMgYSBmdW5jdGlvbiBvbmUpCisgICAgIiIiCisKK3Njb3BlcyA9
ICJzZXNzaW9uIG1vZHVsZSBjbGFzcyBmdW5jdGlvbiIuc3BsaXQoKQorc2NvcGVudW1fZnVuY3Rp
b24gPSBzY29wZXMuaW5kZXgoImZ1bmN0aW9uIikKK2RlZiBzY29wZW1pc21hdGNoKGN1cnJlbnRz
Y29wZSwgbmV3c2NvcGUpOgorICAgIHJldHVybiBzY29wZXMuaW5kZXgobmV3c2NvcGUpID4gc2Nv
cGVzLmluZGV4KGN1cnJlbnRzY29wZSkKKworCitjbGFzcyBGaXh0dXJlTG9va3VwRXJyb3IoTG9v
a3VwRXJyb3IpOgorICAgICIiIiBjb3VsZCBub3QgcmV0dXJuIGEgcmVxdWVzdGVkIEZpeHR1cmUg
KG1pc3Npbmcgb3IgaW52YWxpZCkuICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhcmduYW1l
LCByZXF1ZXN0LCBtc2c9Tm9uZSk6CisgICAgICAgIHNlbGYuYXJnbmFtZSA9IGFyZ25hbWUKKyAg
ICAgICAgc2VsZi5yZXF1ZXN0ID0gcmVxdWVzdAorICAgICAgICBzZWxmLmZpeHR1cmVzdGFjayA9
IHJlcXVlc3QuX2dldF9maXh0dXJlc3RhY2soKQorICAgICAgICBzZWxmLm1zZyA9IG1zZworCisg
ICAgZGVmIGZvcm1hdHJlcHIoc2VsZik6CisgICAgICAgIHRibGluZXMgPSBbXQorICAgICAgICBh
ZGRsaW5lID0gdGJsaW5lcy5hcHBlbmQKKyAgICAgICAgc3RhY2sgPSBbc2VsZi5yZXF1ZXN0Ll9w
eWZ1bmNpdGVtLm9ial0KKyAgICAgICAgc3RhY2suZXh0ZW5kKG1hcChsYW1iZGEgeDogeC5mdW5j
LCBzZWxmLmZpeHR1cmVzdGFjaykpCisgICAgICAgIG1zZyA9IHNlbGYubXNnCisgICAgICAgIGlm
IG1zZyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICMgdGhlIGxhc3QgZml4dHVyZSByYWlzZSBh
biBlcnJvciwgbGV0J3MgcHJlc2VudAorICAgICAgICAgICAgIyBpdCBhdCB0aGUgcmVxdWVzdGlu
ZyBzaWRlCisgICAgICAgICAgICBzdGFjayA9IHN0YWNrWzotMV0KKyAgICAgICAgZm9yIGZ1bmN0
aW9uIGluIHN0YWNrOgorICAgICAgICAgICAgZnNwYXRoLCBsaW5lbm8gPSBnZXRmc2xpbmVubyhm
dW5jdGlvbikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBsaW5lcywgXyA9IGlu
c3BlY3QuZ2V0c291cmNlbGluZXMoZ2V0X3JlYWxfZnVuYyhmdW5jdGlvbikpCisgICAgICAgICAg
ICBleGNlcHQgKElPRXJyb3IsIEluZGV4RXJyb3IpOgorICAgICAgICAgICAgICAgIGVycm9yX21z
ZyA9ICJmaWxlICVzLCBsaW5lICVzOiBzb3VyY2UgY29kZSBub3QgYXZhaWxhYmxlIgorICAgICAg
ICAgICAgICAgIGFkZGxpbmUoZXJyb3JfbXNnICUgKGZzcGF0aCwgbGluZW5vKzEpKQorICAgICAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBhZGRsaW5lKCJmaWxlICVzLCBsaW5lICVzIiAl
IChmc3BhdGgsIGxpbmVubysxKSkKKyAgICAgICAgICAgICAgICBmb3IgaSwgbGluZSBpbiBlbnVt
ZXJhdGUobGluZXMpOgorICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yc3RyaXAoKQor
ICAgICAgICAgICAgICAgICAgICBhZGRsaW5lKCIgICIgKyBsaW5lKQorICAgICAgICAgICAgICAg
ICAgICBpZiBsaW5lLmxzdHJpcCgpLnN0YXJ0c3dpdGgoJ2RlZicpOgorICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWsKKworICAgICAgICBpZiBtc2cgaXMgTm9uZToKKyAgICAgICAgICAgIGZt
ID0gc2VsZi5yZXF1ZXN0Ll9maXh0dXJlbWFuYWdlcgorICAgICAgICAgICAgYXZhaWxhYmxlID0g
W10KKyAgICAgICAgICAgIGZvciBuYW1lLCBmaXh0dXJlZGVmIGluIGZtLl9hcmcyZml4dHVyZWRl
ZnMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBwYXJlbnRpZCA9IHNlbGYucmVxdWVzdC5fcHlm
dW5jaXRlbS5wYXJlbnQubm9kZWlkCisgICAgICAgICAgICAgICAgZmFjbGlzdCA9IGxpc3QoZm0u
X21hdGNoZmFjdG9yaWVzKGZpeHR1cmVkZWYsIHBhcmVudGlkKSkKKyAgICAgICAgICAgICAgICBp
ZiBmYWNsaXN0OgorICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUuYXBwZW5kKG5hbWUpCisg
ICAgICAgICAgICBtc2cgPSAiZml4dHVyZSAlciBub3QgZm91bmQiICUgKHNlbGYuYXJnbmFtZSwp
CisgICAgICAgICAgICBtc2cgKz0gIlxuIGF2YWlsYWJsZSBmaXh0dXJlczogJXMiICUoIiwgIi5q
b2luKGF2YWlsYWJsZSksKQorICAgICAgICAgICAgbXNnICs9ICJcbiB1c2UgJ3B5LnRlc3QgLS1m
aXh0dXJlcyBbdGVzdHBhdGhdJyBmb3IgaGVscCBvbiB0aGVtLiIKKworICAgICAgICByZXR1cm4g
Rml4dHVyZUxvb2t1cEVycm9yUmVwcihmc3BhdGgsIGxpbmVubywgdGJsaW5lcywgbXNnLCBzZWxm
LmFyZ25hbWUpCisKK2NsYXNzIEZpeHR1cmVMb29rdXBFcnJvclJlcHIoVGVybWluYWxSZXByKToK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIGZpcnN0bGluZW5vLCB0YmxpbmVzLCBl
cnJvcnN0cmluZywgYXJnbmFtZSk6CisgICAgICAgIHNlbGYudGJsaW5lcyA9IHRibGluZXMKKyAg
ICAgICAgc2VsZi5lcnJvcnN0cmluZyA9IGVycm9yc3RyaW5nCisgICAgICAgIHNlbGYuZmlsZW5h
bWUgPSBmaWxlbmFtZQorICAgICAgICBzZWxmLmZpcnN0bGluZW5vID0gZmlyc3RsaW5lbm8KKyAg
ICAgICAgc2VsZi5hcmduYW1lID0gYXJnbmFtZQorCisgICAgZGVmIHRvdGVybWluYWwoc2VsZiwg
dHcpOgorICAgICAgICAjdHcubGluZSgiRml4dHVyZUxvb2t1cEVycm9yOiAlcyIgJShzZWxmLmFy
Z25hbWUpLCByZWQ9VHJ1ZSkKKyAgICAgICAgZm9yIHRibGluZSBpbiBzZWxmLnRibGluZXM6Cisg
ICAgICAgICAgICB0dy5saW5lKHRibGluZS5yc3RyaXAoKSkKKyAgICAgICAgZm9yIGxpbmUgaW4g
c2VsZi5lcnJvcnN0cmluZy5zcGxpdCgiXG4iKToKKyAgICAgICAgICAgIHR3LmxpbmUoIiAgICAg
ICAgIiArIGxpbmUuc3RyaXAoKSwgcmVkPVRydWUpCisgICAgICAgIHR3LmxpbmUoKQorICAgICAg
ICB0dy5saW5lKCIlczolZCIgJSAoc2VsZi5maWxlbmFtZSwgc2VsZi5maXJzdGxpbmVubysxKSkK
KworY2xhc3MgRml4dHVyZU1hbmFnZXI6CisgICAgIiIiCisgICAgcHl0ZXN0IGZpeHR1cmVzIGRl
ZmluaXRpb25zIGFuZCBpbmZvcm1hdGlvbiBpcyBzdG9yZWQgYW5kIG1hbmFnZWQKKyAgICBmcm9t
IHRoaXMgY2xhc3MuCisKKyAgICBEdXJpbmcgY29sbGVjdGlvbiBmbS5wYXJzZWZhY3Rvcmllcygp
IGlzIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyB0byBwYXJzZQorICAgIGZpeHR1cmUgZnVuY3Rpb24g
ZGVmaW5pdGlvbnMgaW50byBGaXh0dXJlRGVmIG9iamVjdHMgYW5kIGludGVybmFsCisgICAgZGF0
YSBzdHJ1Y3R1cmVzLgorCisgICAgRHVyaW5nIGNvbGxlY3Rpb24gb2YgdGVzdCBmdW5jdGlvbnMs
IG1ldGFmdW5jLW1lY2hhbmljcyBpbnN0YW50aWF0ZQorICAgIGEgRnVuY0ZpeHR1cmVJbmZvIG9i
amVjdCB3aGljaCBpcyBjYWNoZWQgcGVyIG5vZGUvZnVuYy1uYW1lLgorICAgIFRoaXMgRnVuY0Zp
eHR1cmVJbmZvIG9iamVjdCBpcyBsYXRlciByZXRyaWV2ZWQgYnkgRnVuY3Rpb24gbm9kZXMKKyAg
ICB3aGljaCB0aGVtc2VsdmVzIG9mZmVyIGEgZml4dHVyZW5hbWVzIGF0dHJpYnV0ZS4KKworICAg
IFRoZSBGdW5jRml4dHVyZUluZm8gb2JqZWN0IGhvbGRzIGluZm9ybWF0aW9uIGFib3V0IGZpeHR1
cmVzIGFuZCBGaXh0dXJlRGVmcworICAgIHJlbGV2YW50IGZvciBhIHBhcnRpY3VsYXIgZnVuY3Rp
b24uICBBbiBpbml0aWFsIGxpc3Qgb2YgZml4dHVyZXMgaXMKKyAgICBhc3NlbWJsZWQgbGlrZSB0
aGlzOgorCisgICAgLSBpbmktZGVmaW5lZCB1c2VmaXh0dXJlcworICAgIC0gYXV0b3VzZS1tYXJr
ZWQgZml4dHVyZXMgYWxvbmcgdGhlIGNvbGxlY3Rpb24gY2hhaW4gdXAgZnJvbSB0aGUgZnVuY3Rp
b24KKyAgICAtIHVzZWZpeHR1cmVzIG1hcmtlcnMgYXQgbW9kdWxlL2NsYXNzL2Z1bmN0aW9uIGxl
dmVsCisgICAgLSB0ZXN0IGZ1bmN0aW9uIGZ1bmNhcmdzCisKKyAgICBTdWJzZXF1ZW50bHkgdGhl
IGZ1bmNmaXh0dXJlaW5mby5maXh0dXJlbmFtZXMgYXR0cmlidXRlIGlzIGNvbXB1dGVkCisgICAg
YXMgdGhlIGNsb3N1cmUgb2YgdGhlIGZpeHR1cmVzIG5lZWRlZCB0byBzZXR1cCB0aGUgaW5pdGlh
bCBmaXh0dXJlcywKKyAgICBpLiBlLiBmaXh0dXJlcyBuZWVkZWQgYnkgZml4dHVyZSBmdW5jdGlv
bnMgdGhlbXNlbHZlcyBhcmUgYXBwZW5kZWQKKyAgICB0byB0aGUgZml4dHVyZW5hbWVzIGxpc3Qu
CisKKyAgICBVcG9uIHRoZSB0ZXN0LXNldHVwIHBoYXNlcyBhbGwgZml4dHVyZW5hbWVzIGFyZSBp
bnN0YW50aWF0ZWQsIHJldHJpZXZlZAorICAgIGJ5IGEgbG9va3VwIG9mIHRoZWlyIEZ1bmNGaXh0
dXJlSW5mby4KKyAgICAiIiIKKworICAgIF9hcmdwcmVmaXggPSAicHl0ZXN0X2Z1bmNhcmdfXyIK
KyAgICBGaXh0dXJlTG9va3VwRXJyb3IgPSBGaXh0dXJlTG9va3VwRXJyb3IKKyAgICBGaXh0dXJl
TG9va3VwRXJyb3JSZXByID0gRml4dHVyZUxvb2t1cEVycm9yUmVwcgorCisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIHNlc3Npb24pOgorICAgICAgICBzZWxmLnNlc3Npb24gPSBzZXNzaW9uCisgICAg
ICAgIHNlbGYuY29uZmlnID0gc2Vzc2lvbi5jb25maWcKKyAgICAgICAgc2VsZi5fYXJnMmZpeHR1
cmVkZWZzID0ge30KKyAgICAgICAgc2VsZi5faG9sZGVyb2Jqc2VlbiA9IHNldCgpCisgICAgICAg
IHNlbGYuX2FyZzJmaW5pc2ggPSB7fQorICAgICAgICBzZWxmLl9ub2RlaWRfYW5kX2F1dG91c2Vu
YW1lcyA9IFsoIiIsIHNlbGYuY29uZmlnLmdldGluaSgidXNlZml4dHVyZXMiKSldCisgICAgICAg
IHNlc3Npb24uY29uZmlnLnBsdWdpbm1hbmFnZXIucmVnaXN0ZXIoc2VsZiwgImZ1bmNtYW5hZ2Ui
KQorCisKKyAgICBkZWYgZ2V0Zml4dHVyZWluZm8oc2VsZiwgbm9kZSwgZnVuYywgY2xzLCBmdW5j
YXJncz1UcnVlKToKKyAgICAgICAgaWYgZnVuY2FyZ3MgYW5kIG5vdCBoYXNhdHRyKG5vZGUsICJu
b2Z1bmNhcmdzIik6CisgICAgICAgICAgICBpZiBjbHMgaXMgbm90IE5vbmU6CisgICAgICAgICAg
ICAgICAgc3RhcnRpbmRleCA9IDEKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAg
c3RhcnRpbmRleCA9IE5vbmUKKyAgICAgICAgICAgIGFyZ25hbWVzID0gZ2V0ZnVuY2FyZ25hbWVz
KGZ1bmMsIHN0YXJ0aW5kZXgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhcmduYW1lcyA9
ICgpCisgICAgICAgIHVzZWZpeHR1cmVzID0gZ2V0YXR0cihmdW5jLCAidXNlZml4dHVyZXMiLCBO
b25lKQorICAgICAgICBpbml0aWFsbmFtZXMgPSBhcmduYW1lcworICAgICAgICBpZiB1c2VmaXh0
dXJlcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGluaXRpYWxuYW1lcyA9IHVzZWZpeHR1cmVz
LmFyZ3MgKyBpbml0aWFsbmFtZXMKKyAgICAgICAgZm0gPSBub2RlLnNlc3Npb24uX2ZpeHR1cmVt
YW5hZ2VyCisgICAgICAgIG5hbWVzX2Nsb3N1cmUsIGFyZzJmaXh0dXJlZGVmcyA9IGZtLmdldGZp
eHR1cmVjbG9zdXJlKGluaXRpYWxuYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSkKKyAgICAgICAgcmV0dXJuIEZ1
bmNGaXh0dXJlSW5mbyhhcmduYW1lcywgbmFtZXNfY2xvc3VyZSwgYXJnMmZpeHR1cmVkZWZzKQor
CisgICAgZGVmIHB5dGVzdF9wbHVnaW5fcmVnaXN0ZXJlZChzZWxmLCBwbHVnaW4pOgorICAgICAg
ICBub2RlaWQgPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHAgPSBweS5wYXRoLmxv
Y2FsKHBsdWdpbi5fX2ZpbGVfXykKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAg
ICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBjb25zdHJ1Y3QgdGhl
IGJhc2Ugbm9kZWlkIHdoaWNoIGlzIGxhdGVyIHVzZWQgdG8gY2hlY2sKKyAgICAgICAgICAgICMg
d2hhdCBmaXh0dXJlcyBhcmUgdmlzaWJsZSBmb3IgcGFydGljdWxhciB0ZXN0cyAoYXMgZGVub3Rl
ZAorICAgICAgICAgICAgIyBieSB0aGVpciB0ZXN0IGlkKQorICAgICAgICAgICAgaWYgcC5iYXNl
bmFtZS5zdGFydHN3aXRoKCJjb25mdGVzdC5weSIpOgorICAgICAgICAgICAgICAgIG5vZGVpZCA9
IHAuZGlycGF0aCgpLnJlbHRvKHNlbGYuY29uZmlnLnJvb3RkaXIpCisgICAgICAgICAgICAgICAg
aWYgcC5zZXAgIT0gIi8iOgorICAgICAgICAgICAgICAgICAgICBub2RlaWQgPSBub2RlaWQucmVw
bGFjZShwLnNlcCwgIi8iKQorICAgICAgICBzZWxmLnBhcnNlZmFjdG9yaWVzKHBsdWdpbiwgbm9k
ZWlkKQorCisgICAgZGVmIF9nZXRhdXRvdXNlbmFtZXMoc2VsZiwgbm9kZWlkKToKKyAgICAgICAg
IiIiIHJldHVybiBhIHR1cGxlIG9mIGZpeHR1cmUgbmFtZXMgdG8gYmUgdXNlZC4gIiIiCisgICAg
ICAgIGF1dG91c2VuYW1lcyA9IFtdCisgICAgICAgIGZvciBiYXNlaWQsIGJhc2VuYW1lcyBpbiBz
ZWxmLl9ub2RlaWRfYW5kX2F1dG91c2VuYW1lczoKKyAgICAgICAgICAgIGlmIG5vZGVpZC5zdGFy
dHN3aXRoKGJhc2VpZCk6CisgICAgICAgICAgICAgICAgaWYgYmFzZWlkOgorICAgICAgICAgICAg
ICAgICAgICBpID0gbGVuKGJhc2VpZCkKKyAgICAgICAgICAgICAgICAgICAgbmV4dGNoYXIgPSBu
b2RlaWRbaTppKzFdCisgICAgICAgICAgICAgICAgICAgIGlmIG5leHRjaGFyIGFuZCBuZXh0Y2hh
ciBub3QgaW4gIjovIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAg
ICAgICAgICAgYXV0b3VzZW5hbWVzLmV4dGVuZChiYXNlbmFtZXMpCisgICAgICAgICMgbWFrZSBz
dXJlIGF1dG91c2VuYW1lcyBhcmUgc29ydGVkIGJ5IHNjb3BlLCBzY29wZW51bSAwIGlzIHNlc3Np
b24KKyAgICAgICAgYXV0b3VzZW5hbWVzLnNvcnQoCisgICAgICAgICAgICBrZXk9bGFtYmRhIHg6
IHNlbGYuX2FyZzJmaXh0dXJlZGVmc1t4XVstMV0uc2NvcGVudW0pCisgICAgICAgIHJldHVybiBh
dXRvdXNlbmFtZXMKKworICAgIGRlZiBnZXRmaXh0dXJlY2xvc3VyZShzZWxmLCBmaXh0dXJlbmFt
ZXMsIHBhcmVudG5vZGUpOgorICAgICAgICAjIGNvbGxlY3QgdGhlIGNsb3N1cmUgb2YgYWxsIGZp
eHR1cmVzICwgc3RhcnRpbmcgd2l0aCB0aGUgZ2l2ZW4KKyAgICAgICAgIyBmaXh0dXJlbmFtZXMg
YXMgdGhlIGluaXRpYWwgc2V0LiAgQXMgd2UgaGF2ZSB0byB2aXNpdCBhbGwKKyAgICAgICAgIyBm
YWN0b3J5IGRlZmluaXRpb25zIGFueXdheSwgd2UgYWxzbyByZXR1cm4gYSBhcmcyZml4dHVyZWRl
ZnMKKyAgICAgICAgIyBtYXBwaW5nIHNvIHRoYXQgdGhlIGNhbGxlciBjYW4gcmV1c2UgaXQgYW5k
IGRvZXMgbm90IGhhdmUKKyAgICAgICAgIyB0byByZS1kaXNjb3ZlciBmaXh0dXJlZGVmcyBhZ2Fp
biBmb3IgZWFjaCBmaXh0dXJlbmFtZQorICAgICAgICAjIChkaXNjb3ZlcmluZyBtYXRjaGluZyBm
aXh0dXJlcyBmb3IgYSBnaXZlbiBuYW1lL25vZGUgaXMgZXhwZW5zaXZlKQorCisgICAgICAgIHBh
cmVudGlkID0gcGFyZW50bm9kZS5ub2RlaWQKKyAgICAgICAgZml4dHVyZW5hbWVzX2Nsb3N1cmUg
PSBzZWxmLl9nZXRhdXRvdXNlbmFtZXMocGFyZW50aWQpCisgICAgICAgIGRlZiBtZXJnZShvdGhl
cmxpc3QpOgorICAgICAgICAgICAgZm9yIGFyZyBpbiBvdGhlcmxpc3Q6CisgICAgICAgICAgICAg
ICAgaWYgYXJnIG5vdCBpbiBmaXh0dXJlbmFtZXNfY2xvc3VyZToKKyAgICAgICAgICAgICAgICAg
ICAgZml4dHVyZW5hbWVzX2Nsb3N1cmUuYXBwZW5kKGFyZykKKyAgICAgICAgbWVyZ2UoZml4dHVy
ZW5hbWVzKQorICAgICAgICBhcmcyZml4dHVyZWRlZnMgPSB7fQorICAgICAgICBsYXN0bGVuID0g
LTEKKyAgICAgICAgd2hpbGUgbGFzdGxlbiAhPSBsZW4oZml4dHVyZW5hbWVzX2Nsb3N1cmUpOgor
ICAgICAgICAgICAgbGFzdGxlbiA9IGxlbihmaXh0dXJlbmFtZXNfY2xvc3VyZSkKKyAgICAgICAg
ICAgIGZvciBhcmduYW1lIGluIGZpeHR1cmVuYW1lc19jbG9zdXJlOgorICAgICAgICAgICAgICAg
IGlmIGFyZ25hbWUgaW4gYXJnMmZpeHR1cmVkZWZzOgorICAgICAgICAgICAgICAgICAgICBjb250
aW51ZQorICAgICAgICAgICAgICAgIGZpeHR1cmVkZWZzID0gc2VsZi5nZXRmaXh0dXJlZGVmcyhh
cmduYW1lLCBwYXJlbnRpZCkKKyAgICAgICAgICAgICAgICBpZiBmaXh0dXJlZGVmczoKKyAgICAg
ICAgICAgICAgICAgICAgYXJnMmZpeHR1cmVkZWZzW2FyZ25hbWVdID0gZml4dHVyZWRlZnMKKyAg
ICAgICAgICAgICAgICAgICAgbWVyZ2UoZml4dHVyZWRlZnNbLTFdLmFyZ25hbWVzKQorICAgICAg
ICByZXR1cm4gZml4dHVyZW5hbWVzX2Nsb3N1cmUsIGFyZzJmaXh0dXJlZGVmcworCisgICAgZGVm
IHB5dGVzdF9nZW5lcmF0ZV90ZXN0cyhzZWxmLCBtZXRhZnVuYyk6CisgICAgICAgIGZvciBhcmdu
YW1lIGluIG1ldGFmdW5jLmZpeHR1cmVuYW1lczoKKyAgICAgICAgICAgIGZhY2xpc3QgPSBtZXRh
ZnVuYy5fYXJnMmZpeHR1cmVkZWZzLmdldChhcmduYW1lKQorICAgICAgICAgICAgaWYgZmFjbGlz
dDoKKyAgICAgICAgICAgICAgICBmaXh0dXJlZGVmID0gZmFjbGlzdFstMV0KKyAgICAgICAgICAg
ICAgICBpZiBmaXh0dXJlZGVmLnBhcmFtcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAg
ICAgZnVuY19wYXJhbXMgPSBnZXRhdHRyKGdldGF0dHIobWV0YWZ1bmMuZnVuY3Rpb24sICdwYXJh
bWV0cml6ZScsIE5vbmUpLCAnYXJncycsIFtbTm9uZV1dKQorICAgICAgICAgICAgICAgICAgICAj
IHNraXAgZGlyZWN0bHkgcGFyYW1ldHJpemVkIGFyZ3VtZW50cworICAgICAgICAgICAgICAgICAg
ICBhcmduYW1lcyA9IGZ1bmNfcGFyYW1zWzBdCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBp
c2luc3RhbmNlKGFyZ25hbWVzLCAodHVwbGUsIGxpc3QpKToKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGFyZ25hbWVzID0gW3guc3RyaXAoKSBmb3IgeCBpbiBhcmduYW1lcy5zcGxpdCgiLCIpIGlm
IHguc3RyaXAoKV0KKyAgICAgICAgICAgICAgICAgICAgaWYgYXJnbmFtZSBub3QgaW4gZnVuY19w
YXJhbXMgYW5kIGFyZ25hbWUgbm90IGluIGFyZ25hbWVzOgorICAgICAgICAgICAgICAgICAgICAg
ICAgbWV0YWZ1bmMucGFyYW1ldHJpemUoYXJnbmFtZSwgZml4dHVyZWRlZi5wYXJhbXMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRpcmVjdD1UcnVlLCBz
Y29wZT1maXh0dXJlZGVmLnNjb3BlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWRzPWZpeHR1cmVkZWYuaWRzKQorICAgICAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgICAgICBjb250aW51ZSAjIHdpbGwgcmFpc2UgRml4dHVyZUxvb2t1cEVycm9yIGF0IHNl
dHVwIHRpbWUKKworICAgIGRlZiBweXRlc3RfY29sbGVjdGlvbl9tb2RpZnlpdGVtcyhzZWxmLCBp
dGVtcyk6CisgICAgICAgICMgc2VwYXJhdGUgcGFyYW1ldHJpemVkIHNldHVwcworICAgICAgICBp
dGVtc1s6XSA9IHJlb3JkZXJfaXRlbXMoaXRlbXMpCisKKyAgICBkZWYgcGFyc2VmYWN0b3JpZXMo
c2VsZiwgbm9kZV9vcl9vYmosIG5vZGVpZD1OT1RTRVQsIHVuaXR0ZXN0PUZhbHNlKToKKyAgICAg
ICAgaWYgbm9kZWlkIGlzIG5vdCBOT1RTRVQ6CisgICAgICAgICAgICBob2xkZXJvYmogPSBub2Rl
X29yX29iagorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaG9sZGVyb2JqID0gbm9kZV9vcl9v
Ymoub2JqCisgICAgICAgICAgICBub2RlaWQgPSBub2RlX29yX29iai5ub2RlaWQKKyAgICAgICAg
aWYgaG9sZGVyb2JqIGluIHNlbGYuX2hvbGRlcm9ianNlZW46CisgICAgICAgICAgICByZXR1cm4K
KyAgICAgICAgc2VsZi5faG9sZGVyb2Jqc2Vlbi5hZGQoaG9sZGVyb2JqKQorICAgICAgICBhdXRv
dXNlbmFtZXMgPSBbXQorICAgICAgICBmb3IgbmFtZSBpbiBkaXIoaG9sZGVyb2JqKToKKyAgICAg
ICAgICAgIG9iaiA9IGdldGF0dHIoaG9sZGVyb2JqLCBuYW1lLCBOb25lKQorICAgICAgICAgICAg
IyBmaXh0dXJlIGZ1bmN0aW9ucyBoYXZlIGEgcHl0ZXN0X2Z1bmNhcmdfXyBwcmVmaXggKHByZS0y
LjMgc3R5bGUpCisgICAgICAgICAgICAjIG9yIGFyZSAiQHB5dGVzdC5maXh0dXJlIiBtYXJrZWQK
KyAgICAgICAgICAgIG1hcmtlciA9IGdldGZpeHR1cmVtYXJrZXIob2JqKQorICAgICAgICAgICAg
aWYgbWFya2VyIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgaWYgbm90IG5hbWUuc3RhcnRzd2l0
aChzZWxmLl9hcmdwcmVmaXgpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAg
ICAgICAgICAgIGlmIG5vdCBjYWxsYWJsZShvYmopOgorICAgICAgICAgICAgICAgICAgICBjb250
aW51ZQorICAgICAgICAgICAgICAgIG1hcmtlciA9IGRlZmF1bHRmdW5jYXJncHJlZml4bWFya2Vy
CisgICAgICAgICAgICAgICAgbmFtZSA9IG5hbWVbbGVuKHNlbGYuX2FyZ3ByZWZpeCk6XQorICAg
ICAgICAgICAgZWxpZiBub3QgaXNpbnN0YW5jZShtYXJrZXIsIEZpeHR1cmVGdW5jdGlvbk1hcmtl
cik6CisgICAgICAgICAgICAgICAgIyBtYWdpYyBnbG9iYWxzICB3aXRoIF9fZ2V0YXR0cl9fIG1p
Z2h0IGhhdmUgZ290IHVzIGEgd3JvbmcKKyAgICAgICAgICAgICAgICAjIGZpeHR1cmUgYXR0cmli
dXRlCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICAgICAgYXNzZXJ0IG5vdCBuYW1lLnN0YXJ0c3dpdGgoc2VsZi5fYXJncHJlZml4KQorICAg
ICAgICAgICAgZml4dHVyZWRlZiA9IEZpeHR1cmVEZWYoc2VsZiwgbm9kZWlkLCBuYW1lLCBvYmos
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXIuc2NvcGUsIG1hcmtl
ci5wYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZGN0eD1t
YXJrZXIueWllbGRjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0
dGVzdD11bml0dGVzdCwgaWRzPW1hcmtlci5pZHMpCisgICAgICAgICAgICBmYWNsaXN0ID0gc2Vs
Zi5fYXJnMmZpeHR1cmVkZWZzLnNldGRlZmF1bHQobmFtZSwgW10pCisgICAgICAgICAgICBpZiBm
aXh0dXJlZGVmLmhhc19sb2NhdGlvbjoKKyAgICAgICAgICAgICAgICBmYWNsaXN0LmFwcGVuZChm
aXh0dXJlZGVmKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIGZpeHR1cmVk
ZWZzIHdpdGggbm8gbG9jYXRpb24gYXJlIGF0IHRoZSBmcm9udAorICAgICAgICAgICAgICAgICMg
c28gdGhpcyBpbnNlcnRzIHRoZSBjdXJyZW50IGZpeHR1cmVkZWYgYWZ0ZXIgdGhlCisgICAgICAg
ICAgICAgICAgIyBleGlzdGluZyBmaXh0dXJlZGVmcyBmcm9tIGV4dGVybmFsIHBsdWdpbnMgYnV0
CisgICAgICAgICAgICAgICAgIyBiZWZvcmUgdGhlIGZpeHR1cmVkZWZzIHByb3ZpZGVkIGluIGNv
bmZ0ZXN0cy4KKyAgICAgICAgICAgICAgICBpID0gbGVuKFtmIGZvciBmIGluIGZhY2xpc3QgaWYg
bm90IGYuaGFzX2xvY2F0aW9uXSkKKyAgICAgICAgICAgICAgICBmYWNsaXN0Lmluc2VydChpLCBm
aXh0dXJlZGVmKQorICAgICAgICAgICAgaWYgbWFya2VyLmF1dG91c2U6CisgICAgICAgICAgICAg
ICAgYXV0b3VzZW5hbWVzLmFwcGVuZChuYW1lKQorICAgICAgICBpZiBhdXRvdXNlbmFtZXM6Cisg
ICAgICAgICAgICBzZWxmLl9ub2RlaWRfYW5kX2F1dG91c2VuYW1lcy5hcHBlbmQoKG5vZGVpZCBv
ciAnJywgYXV0b3VzZW5hbWVzKSkKKworICAgIGRlZiBnZXRmaXh0dXJlZGVmcyhzZWxmLCBhcmdu
YW1lLCBub2RlaWQpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmaXh0dXJlZGVmcyA9IHNl
bGYuX2FyZzJmaXh0dXJlZGVmc1thcmduYW1lXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6Cisg
ICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJu
IHR1cGxlKHNlbGYuX21hdGNoZmFjdG9yaWVzKGZpeHR1cmVkZWZzLCBub2RlaWQpKQorCisgICAg
ZGVmIF9tYXRjaGZhY3RvcmllcyhzZWxmLCBmaXh0dXJlZGVmcywgbm9kZWlkKToKKyAgICAgICAg
Zm9yIGZpeHR1cmVkZWYgaW4gZml4dHVyZWRlZnM6CisgICAgICAgICAgICBpZiBub2RlaWQuc3Rh
cnRzd2l0aChmaXh0dXJlZGVmLmJhc2VpZCk6CisgICAgICAgICAgICAgICAgeWllbGQgZml4dHVy
ZWRlZgorCisKK2RlZiBmYWlsX2ZpeHR1cmVmdW5jKGZpeHR1cmVmdW5jLCBtc2cpOgorICAgIGZz
LCBsaW5lbm8gPSBnZXRmc2xpbmVubyhmaXh0dXJlZnVuYykKKyAgICBsb2NhdGlvbiA9ICIlczol
cyIgJSAoZnMsIGxpbmVubysxKQorICAgIHNvdXJjZSA9IF9weXRlc3QuX2NvZGUuU291cmNlKGZp
eHR1cmVmdW5jKQorICAgIHB5dGVzdC5mYWlsKG1zZyArICI6XG5cbiIgKyBzdHIoc291cmNlLmlu
ZGVudCgpKSArICJcbiIgKyBsb2NhdGlvbiwKKyAgICAgICAgICAgICAgICBweXRyYWNlPUZhbHNl
KQorCitkZWYgY2FsbF9maXh0dXJlX2Z1bmMoZml4dHVyZWZ1bmMsIHJlcXVlc3QsIGt3YXJncywg
eWllbGRjdHgpOgorICAgIGlmIHlpZWxkY3R4OgorICAgICAgICBpZiBub3QgaXNfZ2VuZXJhdG9y
KGZpeHR1cmVmdW5jKToKKyAgICAgICAgICAgIGZhaWxfZml4dHVyZWZ1bmMoZml4dHVyZWZ1bmMs
CisgICAgICAgICAgICAgICAgbXNnPSJ5aWVsZF9maXh0dXJlIHJlcXVpcmVzIHlpZWxkIHN0YXRl
bWVudCBpbiBmdW5jdGlvbiIpCisgICAgICAgIGl0ZXIgPSBmaXh0dXJlZnVuYygqKmt3YXJncykK
KyAgICAgICAgbmV4dCA9IGdldGF0dHIoaXRlciwgIl9fbmV4dF9fIiwgTm9uZSkKKyAgICAgICAg
aWYgbmV4dCBpcyBOb25lOgorICAgICAgICAgICAgbmV4dCA9IGdldGF0dHIoaXRlciwgIm5leHQi
KQorICAgICAgICByZXMgPSBuZXh0KCkKKyAgICAgICAgZGVmIHRlYXJkb3duKCk6CisgICAgICAg
ICAgICB0cnk6CisgICAgICAgICAgICAgICAgbmV4dCgpCisgICAgICAgICAgICBleGNlcHQgU3Rv
cEl0ZXJhdGlvbjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgICAgIGZhaWxfZml4dHVyZWZ1bmMoZml4dHVyZWZ1bmMsCisgICAgICAgICAgICAg
ICAgICAgICJ5aWVsZF9maXh0dXJlIGZ1bmN0aW9uIGhhcyBtb3JlIHRoYW4gb25lICd5aWVsZCci
KQorICAgICAgICByZXF1ZXN0LmFkZGZpbmFsaXplcih0ZWFyZG93bikKKyAgICBlbHNlOgorICAg
ICAgICBpZiBpc19nZW5lcmF0b3IoZml4dHVyZWZ1bmMpOgorICAgICAgICAgICAgZmFpbF9maXh0
dXJlZnVuYyhmaXh0dXJlZnVuYywKKyAgICAgICAgICAgICAgICBtc2c9InB5dGVzdC5maXh0dXJl
IGZ1bmN0aW9ucyBjYW5ub3QgdXNlIGBgeWllbGRgYC4gIgorICAgICAgICAgICAgICAgICAgICAi
SW5zdGVhZCB3cml0ZSBhbmQgcmV0dXJuIGFuIGlubmVyIGZ1bmN0aW9uL2dlbmVyYXRvciAiCisg
ICAgICAgICAgICAgICAgICAgICJhbmQgbGV0IHRoZSBjb25zdW1lciBjYWxsIGFuZCBpdGVyYXRl
IG92ZXIgaXQuIikKKyAgICAgICAgcmVzID0gZml4dHVyZWZ1bmMoKiprd2FyZ3MpCisgICAgcmV0
dXJuIHJlcworCitjbGFzcyBGaXh0dXJlRGVmOgorICAgICIiIiBBIGNvbnRhaW5lciBmb3IgYSBm
YWN0b3J5IGRlZmluaXRpb24uICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaXh0dXJlbWFu
YWdlciwgYmFzZWlkLCBhcmduYW1lLCBmdW5jLCBzY29wZSwgcGFyYW1zLAorICAgICAgICAgICAg
ICAgICB5aWVsZGN0eCwgdW5pdHRlc3Q9RmFsc2UsIGlkcz1Ob25lKToKKyAgICAgICAgc2VsZi5f
Zml4dHVyZW1hbmFnZXIgPSBmaXh0dXJlbWFuYWdlcgorICAgICAgICBzZWxmLmJhc2VpZCA9IGJh
c2VpZCBvciAnJworICAgICAgICBzZWxmLmhhc19sb2NhdGlvbiA9IGJhc2VpZCBpcyBub3QgTm9u
ZQorICAgICAgICBzZWxmLmZ1bmMgPSBmdW5jCisgICAgICAgIHNlbGYuYXJnbmFtZSA9IGFyZ25h
bWUKKyAgICAgICAgc2VsZi5zY29wZSA9IHNjb3BlCisgICAgICAgIHNlbGYuc2NvcGVudW0gPSBz
Y29wZXMuaW5kZXgoc2NvcGUgb3IgImZ1bmN0aW9uIikKKyAgICAgICAgc2VsZi5wYXJhbXMgPSBw
YXJhbXMKKyAgICAgICAgc3RhcnRpbmRleCA9IHVuaXR0ZXN0IGFuZCAxIG9yIE5vbmUKKyAgICAg
ICAgc2VsZi5hcmduYW1lcyA9IGdldGZ1bmNhcmduYW1lcyhmdW5jLCBzdGFydGluZGV4PXN0YXJ0
aW5kZXgpCisgICAgICAgIHNlbGYueWllbGRjdHggPSB5aWVsZGN0eAorICAgICAgICBzZWxmLnVu
aXR0ZXN0ID0gdW5pdHRlc3QKKyAgICAgICAgc2VsZi5pZHMgPSBpZHMKKyAgICAgICAgc2VsZi5f
ZmluYWxpemVyID0gW10KKworICAgIGRlZiBhZGRmaW5hbGl6ZXIoc2VsZiwgZmluYWxpemVyKToK
KyAgICAgICAgc2VsZi5fZmluYWxpemVyLmFwcGVuZChmaW5hbGl6ZXIpCisKKyAgICBkZWYgZmlu
aXNoKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aGlsZSBzZWxmLl9maW5hbGl6
ZXI6CisgICAgICAgICAgICAgICAgZnVuYyA9IHNlbGYuX2ZpbmFsaXplci5wb3AoKQorICAgICAg
ICAgICAgICAgIGZ1bmMoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgIyBldmVuIGlm
IGZpbmFsaXphdGlvbiBmYWlscywgd2UgaW52YWxpZGF0ZQorICAgICAgICAgICAgIyB0aGUgY2Fj
aGVkIGZpeHR1cmUgdmFsdWUKKyAgICAgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgImNhY2hlZF9y
ZXN1bHQiKToKKyAgICAgICAgICAgICAgICBkZWwgc2VsZi5jYWNoZWRfcmVzdWx0CisKKyAgICBk
ZWYgZXhlY3V0ZShzZWxmLCByZXF1ZXN0KToKKyAgICAgICAgIyBnZXQgcmVxdWlyZWQgYXJndW1l
bnRzIGFuZCByZWdpc3RlciBvdXIgb3duIGZpbmlzaCgpCisgICAgICAgICMgd2l0aCB0aGVpciBm
aW5hbGl6YXRpb24KKyAgICAgICAga3dhcmdzID0ge30KKyAgICAgICAgZm9yIGFyZ25hbWUgaW4g
c2VsZi5hcmduYW1lczoKKyAgICAgICAgICAgIGZpeHR1cmVkZWYgPSByZXF1ZXN0Ll9nZXRfYWN0
aXZlX2ZpeHR1cmVkZWYoYXJnbmFtZSkKKyAgICAgICAgICAgIHJlc3VsdCwgYXJnX2NhY2hlX2tl
eSwgZXhjID0gZml4dHVyZWRlZi5jYWNoZWRfcmVzdWx0CisgICAgICAgICAgICByZXF1ZXN0Ll9j
aGVja19zY29wZShhcmduYW1lLCByZXF1ZXN0LnNjb3BlLCBmaXh0dXJlZGVmLnNjb3BlKQorICAg
ICAgICAgICAga3dhcmdzW2FyZ25hbWVdID0gcmVzdWx0CisgICAgICAgICAgICBpZiBhcmduYW1l
ICE9ICJyZXF1ZXN0IjoKKyAgICAgICAgICAgICAgICBmaXh0dXJlZGVmLmFkZGZpbmFsaXplcihz
ZWxmLmZpbmlzaCkKKworICAgICAgICBteV9jYWNoZV9rZXkgPSByZXF1ZXN0LnBhcmFtX2luZGV4
CisgICAgICAgIGNhY2hlZF9yZXN1bHQgPSBnZXRhdHRyKHNlbGYsICJjYWNoZWRfcmVzdWx0Iiwg
Tm9uZSkKKyAgICAgICAgaWYgY2FjaGVkX3Jlc3VsdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAg
IHJlc3VsdCwgY2FjaGVfa2V5LCBlcnIgPSBjYWNoZWRfcmVzdWx0CisgICAgICAgICAgICBpZiBt
eV9jYWNoZV9rZXkgPT0gY2FjaGVfa2V5OgorICAgICAgICAgICAgICAgIGlmIGVyciBpcyBub3Qg
Tm9uZToKKyAgICAgICAgICAgICAgICAgICAgcHkuYnVpbHRpbi5fcmVyYWlzZSgqZXJyKQorICAg
ICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQKKyAg
ICAgICAgICAgICMgd2UgaGF2ZSBhIHByZXZpb3VzIGJ1dCBkaWZmZXJlbnRseSBwYXJhbWV0cml6
ZWQgZml4dHVyZSBpbnN0YW5jZQorICAgICAgICAgICAgIyBzbyB3ZSBuZWVkIHRvIHRlYXIgaXQg
ZG93biBiZWZvcmUgY3JlYXRpbmcgYSBuZXcgb25lCisgICAgICAgICAgICBzZWxmLmZpbmlzaCgp
CisgICAgICAgICAgICBhc3NlcnQgbm90IGhhc2F0dHIoc2VsZiwgImNhY2hlZF9yZXN1bHQiKQor
CisgICAgICAgIGZpeHR1cmVmdW5jID0gc2VsZi5mdW5jCisKKyAgICAgICAgaWYgc2VsZi51bml0
dGVzdDoKKyAgICAgICAgICAgIGlmIHJlcXVlc3QuaW5zdGFuY2UgaXMgbm90IE5vbmU6CisgICAg
ICAgICAgICAgICAgIyBiaW5kIHRoZSB1bmJvdW5kIG1ldGhvZCB0byB0aGUgVGVzdENhc2UgaW5z
dGFuY2UKKyAgICAgICAgICAgICAgICBmaXh0dXJlZnVuYyA9IHNlbGYuZnVuYy5fX2dldF9fKHJl
cXVlc3QuaW5zdGFuY2UpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIHRoZSBmaXh0dXJl
IGZ1bmN0aW9uIG5lZWRzIHRvIGJlIGJvdW5kIHRvIHRoZSBhY3R1YWwKKyAgICAgICAgICAgICMg
cmVxdWVzdC5pbnN0YW5jZSBzbyB0aGF0IGNvZGUgd29ya2luZyB3aXRoICJzZWxmIiBiZWhhdmVz
CisgICAgICAgICAgICAjIGFzIGV4cGVjdGVkLgorICAgICAgICAgICAgaWYgcmVxdWVzdC5pbnN0
YW5jZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBmaXh0dXJlZnVuYyA9IGdldGltZnVu
YyhzZWxmLmZ1bmMpCisgICAgICAgICAgICAgICAgaWYgZml4dHVyZWZ1bmMgIT0gc2VsZi5mdW5j
OgorICAgICAgICAgICAgICAgICAgICBmaXh0dXJlZnVuYyA9IGZpeHR1cmVmdW5jLl9fZ2V0X18o
cmVxdWVzdC5pbnN0YW5jZSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICByZXN1bHQgPSBj
YWxsX2ZpeHR1cmVfZnVuYyhmaXh0dXJlZnVuYywgcmVxdWVzdCwga3dhcmdzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi55aWVsZGN0eCkKKyAgICAgICAgZXhj
ZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHNlbGYuY2FjaGVkX3Jlc3VsdCA9IChOb25lLCBt
eV9jYWNoZV9rZXksIHN5cy5leGNfaW5mbygpKQorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAg
c2VsZi5jYWNoZWRfcmVzdWx0ID0gKHJlc3VsdCwgbXlfY2FjaGVfa2V5LCBOb25lKQorICAgICAg
ICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVy
biAoIjxGaXh0dXJlRGVmIG5hbWU9JXIgc2NvcGU9JXIgYmFzZWlkPSVyID4iICUKKyAgICAgICAg
ICAgICAgICAoc2VsZi5hcmduYW1lLCBzZWxmLnNjb3BlLCBzZWxmLmJhc2VpZCkpCisKK2RlZiBu
dW1fbW9ja19wYXRjaF9hcmdzKGZ1bmN0aW9uKToKKyAgICAiIiIgcmV0dXJuIG51bWJlciBvZiBh
cmd1bWVudHMgdXNlZCB1cCBieSBtb2NrIGFyZ3VtZW50cyAoaWYgYW55KSAiIiIKKyAgICBwYXRj
aGluZ3MgPSBnZXRhdHRyKGZ1bmN0aW9uLCAicGF0Y2hpbmdzIiwgTm9uZSkKKyAgICBpZiBub3Qg
cGF0Y2hpbmdzOgorICAgICAgICByZXR1cm4gMAorICAgIG1vY2sgPSBzeXMubW9kdWxlcy5nZXQo
Im1vY2siLCBzeXMubW9kdWxlcy5nZXQoInVuaXR0ZXN0Lm1vY2siLCBOb25lKSkKKyAgICBpZiBt
b2NrIGlzIG5vdCBOb25lOgorICAgICAgICByZXR1cm4gbGVuKFtwIGZvciBwIGluIHBhdGNoaW5n
cworICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHAuYXR0cmlidXRlX25hbWUgYW5kIHAu
bmV3IGlzIG1vY2suREVGQVVMVF0pCisgICAgcmV0dXJuIGxlbihwYXRjaGluZ3MpCisKKworZGVm
IGdldGZ1bmNhcmduYW1lcyhmdW5jdGlvbiwgc3RhcnRpbmRleD1Ob25lKToKKyAgICAjIFhYWCBt
ZXJnZSB3aXRoIG1haW4ucHkncyB2YXJuYW1lcworICAgICNhc3NlcnQgbm90IGlzY2xhc3MoZnVu
Y3Rpb24pCisgICAgcmVhbGZ1bmN0aW9uID0gZnVuY3Rpb24KKyAgICB3aGlsZSBoYXNhdHRyKHJl
YWxmdW5jdGlvbiwgIl9fd3JhcHBlZF9fIik6CisgICAgICAgIHJlYWxmdW5jdGlvbiA9IHJlYWxm
dW5jdGlvbi5fX3dyYXBwZWRfXworICAgIGlmIHN0YXJ0aW5kZXggaXMgTm9uZToKKyAgICAgICAg
c3RhcnRpbmRleCA9IGluc3BlY3QuaXNtZXRob2QoZnVuY3Rpb24pIGFuZCAxIG9yIDAKKyAgICBp
ZiByZWFsZnVuY3Rpb24gIT0gZnVuY3Rpb246CisgICAgICAgIHN0YXJ0aW5kZXggKz0gbnVtX21v
Y2tfcGF0Y2hfYXJncyhmdW5jdGlvbikKKyAgICAgICAgZnVuY3Rpb24gPSByZWFsZnVuY3Rpb24K
KyAgICBpZiBpc2luc3RhbmNlKGZ1bmN0aW9uLCBmdW5jdG9vbHMucGFydGlhbCk6CisgICAgICAg
IGFyZ25hbWVzID0gaW5zcGVjdC5nZXRhcmdzKF9weXRlc3QuX2NvZGUuZ2V0cmF3Y29kZShmdW5j
dGlvbi5mdW5jKSlbMF0KKyAgICAgICAgcGFydGlhbCA9IGZ1bmN0aW9uCisgICAgICAgIGFyZ25h
bWVzID0gYXJnbmFtZXNbbGVuKHBhcnRpYWwuYXJncyk6XQorICAgICAgICBpZiBwYXJ0aWFsLmtl
eXdvcmRzOgorICAgICAgICAgICAgZm9yIGt3IGluIHBhcnRpYWwua2V5d29yZHM6CisgICAgICAg
ICAgICAgICAgYXJnbmFtZXMucmVtb3ZlKGt3KQorICAgIGVsc2U6CisgICAgICAgIGFyZ25hbWVz
ID0gaW5zcGVjdC5nZXRhcmdzKF9weXRlc3QuX2NvZGUuZ2V0cmF3Y29kZShmdW5jdGlvbikpWzBd
CisgICAgZGVmYXVsdHMgPSBnZXRhdHRyKGZ1bmN0aW9uLCAnZnVuY19kZWZhdWx0cycsCisgICAg
ICAgICAgICAgICAgICAgICAgIGdldGF0dHIoZnVuY3Rpb24sICdfX2RlZmF1bHRzX18nLCBOb25l
KSkgb3IgKCkKKyAgICBudW1kZWZhdWx0cyA9IGxlbihkZWZhdWx0cykKKyAgICBpZiBudW1kZWZh
dWx0czoKKyAgICAgICAgcmV0dXJuIHR1cGxlKGFyZ25hbWVzW3N0YXJ0aW5kZXg6LW51bWRlZmF1
bHRzXSkKKyAgICByZXR1cm4gdHVwbGUoYXJnbmFtZXNbc3RhcnRpbmRleDpdKQorCisjIGFsZ29y
aXRobSBmb3Igc29ydGluZyBvbiBhIHBlci1wYXJhbWV0cml6ZWQgcmVzb3VyY2Ugc2V0dXAgYmFz
aXMKKyMgaXQgaXMgY2FsbGVkIGZvciBzY29wZW51bT09MCAoc2Vzc2lvbikgZmlyc3QgYW5kIHBl
cmZvcm1zIHNvcnRpbmcKKyMgZG93biB0byB0aGUgbG93ZXIgc2NvcGVzIHN1Y2ggYXMgdG8gbWlu
aW1pemUgbnVtYmVyIG9mICJoaWdoIHNjb3BlIgorIyBzZXR1cHMgYW5kIHRlYXJkb3ducworCitk
ZWYgcmVvcmRlcl9pdGVtcyhpdGVtcyk6CisgICAgYXJna2V5c19jYWNoZSA9IHt9CisgICAgZm9y
IHNjb3BlbnVtIGluIHJhbmdlKDAsIHNjb3BlbnVtX2Z1bmN0aW9uKToKKyAgICAgICAgYXJna2V5
c19jYWNoZVtzY29wZW51bV0gPSBkID0ge30KKyAgICAgICAgZm9yIGl0ZW0gaW4gaXRlbXM6Cisg
ICAgICAgICAgICBrZXlzID0gc2V0KGdldF9wYXJhbWV0cml6ZWRfZml4dHVyZV9rZXlzKGl0ZW0s
IHNjb3BlbnVtKSkKKyAgICAgICAgICAgIGlmIGtleXM6CisgICAgICAgICAgICAgICAgZFtpdGVt
XSA9IGtleXMKKyAgICByZXR1cm4gcmVvcmRlcl9pdGVtc19hdHNjb3BlKGl0ZW1zLCBzZXQoKSwg
YXJna2V5c19jYWNoZSwgMCkKKworZGVmIHJlb3JkZXJfaXRlbXNfYXRzY29wZShpdGVtcywgaWdu
b3JlLCBhcmdrZXlzX2NhY2hlLCBzY29wZW51bSk6CisgICAgaWYgc2NvcGVudW0gPj0gc2NvcGVu
dW1fZnVuY3Rpb24gb3IgbGVuKGl0ZW1zKSA8IDM6CisgICAgICAgIHJldHVybiBpdGVtcworICAg
IGl0ZW1zX2RvbmUgPSBbXQorICAgIHdoaWxlIDE6CisgICAgICAgIGl0ZW1zX2JlZm9yZSwgaXRl
bXNfc2FtZSwgaXRlbXNfb3RoZXIsIG5ld2lnbm9yZSA9IFwKKyAgICAgICAgICAgICAgICBzbGlj
ZV9pdGVtcyhpdGVtcywgaWdub3JlLCBhcmdrZXlzX2NhY2hlW3Njb3BlbnVtXSkKKyAgICAgICAg
aXRlbXNfYmVmb3JlID0gcmVvcmRlcl9pdGVtc19hdHNjb3BlKAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGl0ZW1zX2JlZm9yZSwgaWdub3JlLCBhcmdrZXlzX2NhY2hlLHNjb3BlbnVtKzEp
CisgICAgICAgIGlmIGl0ZW1zX3NhbWUgaXMgTm9uZToKKyAgICAgICAgICAgICMgbm90aGluZyB0
byByZW9yZGVyIGluIHRoaXMgc2NvcGUKKyAgICAgICAgICAgIGFzc2VydCBpdGVtc19vdGhlciBp
cyBOb25lCisgICAgICAgICAgICByZXR1cm4gaXRlbXNfZG9uZSArIGl0ZW1zX2JlZm9yZQorICAg
ICAgICBpdGVtc19kb25lLmV4dGVuZChpdGVtc19iZWZvcmUpCisgICAgICAgIGl0ZW1zID0gaXRl
bXNfc2FtZSArIGl0ZW1zX290aGVyCisgICAgICAgIGlnbm9yZSA9IG5ld2lnbm9yZQorCisKK2Rl
ZiBzbGljZV9pdGVtcyhpdGVtcywgaWdub3JlLCBzY29wZWRfYXJna2V5c19jYWNoZSk6CisgICAg
IyB3ZSBwaWNrIHRoZSBmaXJzdCBpdGVtIHdoaWNoIHVzZXMgYSBmaXh0dXJlIGluc3RhbmNlIGlu
IHRoZQorICAgICMgcmVxdWVzdGVkIHNjb3BlIGFuZCB3aGljaCB3ZSBoYXZlbid0IHNlZW4geWV0
LiAgV2Ugc2xpY2UgdGhlIGlucHV0CisgICAgIyBpdGVtcyBsaXN0IGludG8gYSBsaXN0IG9mIGl0
ZW1zX25vbWF0Y2gsIGl0ZW1zX3NhbWUgYW5kCisgICAgIyBpdGVtc19vdGhlcgorICAgIGlmIHNj
b3BlZF9hcmdrZXlzX2NhY2hlOiAgIyBkbyB3ZSBuZWVkIHRvIGRvIHdvcmsgYXQgYWxsPworICAg
ICAgICBpdCA9IGl0ZXIoaXRlbXMpCisgICAgICAgICMgZmlyc3QgZmluZCBhIHNsaWNpbmcga2V5
CisgICAgICAgIGZvciBpLCBpdGVtIGluIGVudW1lcmF0ZShpdCk6CisgICAgICAgICAgICBhcmdr
ZXlzID0gc2NvcGVkX2FyZ2tleXNfY2FjaGUuZ2V0KGl0ZW0pCisgICAgICAgICAgICBpZiBhcmdr
ZXlzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGFyZ2tleXMgPSBhcmdrZXlzLmRpZmZl
cmVuY2UoaWdub3JlKQorICAgICAgICAgICAgICAgIGlmIGFyZ2tleXM6ICAjIGZvdW5kIGEgc2xp
Y2luZyBrZXkKKyAgICAgICAgICAgICAgICAgICAgc2xpY2luZ19hcmdrZXkgPSBhcmdrZXlzLnBv
cCgpCisgICAgICAgICAgICAgICAgICAgIGl0ZW1zX2JlZm9yZSA9IGl0ZW1zWzppXQorICAgICAg
ICAgICAgICAgICAgICBpdGVtc19zYW1lID0gW2l0ZW1dCisgICAgICAgICAgICAgICAgICAgIGl0
ZW1zX290aGVyID0gW10KKyAgICAgICAgICAgICAgICAgICAgIyBub3cgc2xpY2UgdGhlIHJlbWFp
bmRlciBvZiB0aGUgbGlzdAorICAgICAgICAgICAgICAgICAgICBmb3IgaXRlbSBpbiBpdDoKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGFyZ2tleXMgPSBzY29wZWRfYXJna2V5c19jYWNoZS5nZXQo
aXRlbSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGFyZ2tleXMgYW5kIHNsaWNpbmdfYXJn
a2V5IGluIGFyZ2tleXMgYW5kIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGljaW5n
X2FyZ2tleSBub3QgaW4gaWdub3JlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1z
X3NhbWUuYXBwZW5kKGl0ZW0pCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zX290aGVyLmFwcGVuZChpdGVtKQorICAgICAgICAg
ICAgICAgICAgICBuZXdpZ25vcmUgPSBpZ25vcmUuY29weSgpCisgICAgICAgICAgICAgICAgICAg
IG5ld2lnbm9yZS5hZGQoc2xpY2luZ19hcmdrZXkpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biAoaXRlbXNfYmVmb3JlLCBpdGVtc19zYW1lLCBpdGVtc19vdGhlciwgbmV3aWdub3JlKQorICAg
IHJldHVybiBpdGVtcywgTm9uZSwgTm9uZSwgTm9uZQorCitkZWYgZ2V0X3BhcmFtZXRyaXplZF9m
aXh0dXJlX2tleXMoaXRlbSwgc2NvcGVudW0pOgorICAgICIiIiByZXR1cm4gbGlzdCBvZiBrZXlz
IGZvciBhbGwgcGFyYW1ldHJpemVkIGFyZ3VtZW50cyB3aGljaCBtYXRjaAorICAgIHRoZSBzcGVj
aWZpZWQgc2NvcGUuICIiIgorICAgIGFzc2VydCBzY29wZW51bSA8IHNjb3BlbnVtX2Z1bmN0aW9u
ICAjIGZ1bmN0aW9uCisgICAgdHJ5OgorICAgICAgICBjcyA9IGl0ZW0uY2FsbHNwZWMKKyAgICBl
eGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIHBhc3MKKyAgICBlbHNlOgorICAgICAgICAj
IGNzLmluZGljdGVzLml0ZW1zKCkgaXMgcmFuZG9tIG9yZGVyIG9mIGFyZ25hbWVzIGJ1dAorICAg
ICAgICAjIHRoZW4gYWdhaW4gZGlmZmVyZW50IGZ1bmN0aW9ucyAoaXRlbXMpIGNhbiBjaGFuZ2Ug
b3JkZXIgb2YKKyAgICAgICAgIyBhcmd1bWVudHMgc28gaXQgZG9lc24ndCBtYXR0ZXIgbXVjaCBw
cm9iYWJseQorICAgICAgICBmb3IgYXJnbmFtZSwgcGFyYW1faW5kZXggaW4gY3MuaW5kaWNlcy5p
dGVtcygpOgorICAgICAgICAgICAgaWYgY3MuX2FyZzJzY29wZW51bVthcmduYW1lXSAhPSBzY29w
ZW51bToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgc2NvcGVudW0g
PT0gMDogICAgIyBzZXNzaW9uCisgICAgICAgICAgICAgICAga2V5ID0gKGFyZ25hbWUsIHBhcmFt
X2luZGV4KQorICAgICAgICAgICAgZWxpZiBzY29wZW51bSA9PSAxOiAgIyBtb2R1bGUKKyAgICAg
ICAgICAgICAgICBrZXkgPSAoYXJnbmFtZSwgcGFyYW1faW5kZXgsIGl0ZW0uZnNwYXRoKQorICAg
ICAgICAgICAgZWxpZiBzY29wZW51bSA9PSAyOiAgIyBjbGFzcworICAgICAgICAgICAgICAgIGtl
eSA9IChhcmduYW1lLCBwYXJhbV9pbmRleCwgaXRlbS5mc3BhdGgsIGl0ZW0uY2xzKQorICAgICAg
ICAgICAgeWllbGQga2V5CisKKworZGVmIHh1bml0c2V0dXAob2JqLCBuYW1lKToKKyAgICBtZXRo
ID0gZ2V0YXR0cihvYmosIG5hbWUsIE5vbmUpCisgICAgaWYgZ2V0Zml4dHVyZW1hcmtlcihtZXRo
KSBpcyBOb25lOgorICAgICAgICByZXR1cm4gbWV0aAorCitkZWYgZ2V0Zml4dHVyZW1hcmtlcihv
YmopOgorICAgICIiIiByZXR1cm4gZml4dHVyZW1hcmtlciBvciBOb25lIGlmIGl0IGRvZXNuJ3Qg
ZXhpc3Qgb3IgcmFpc2VkCisgICAgZXhjZXB0aW9ucy4iIiIKKyAgICB0cnk6CisgICAgICAgIHJl
dHVybiBnZXRhdHRyKG9iaiwgIl9weXRlc3RmaXh0dXJlZnVuY3Rpb24iLCBOb25lKQorICAgIGV4
Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgcmFpc2UKKyAgICBleGNlcHQgRXhjZXB0
aW9uOgorICAgICAgICAjIHNvbWUgb2JqZWN0cyByYWlzZSBlcnJvcnMgbGlrZSByZXF1ZXN0IChm
cm9tIGZsYXNrIGltcG9ydCByZXF1ZXN0KQorICAgICAgICAjIHdlIGRvbid0IGV4cGVjdCB0aGVt
IHRvIGJlIGZpeHR1cmUgZnVuY3Rpb25zCisgICAgICAgIHJldHVybiBOb25lCisKK3Njb3BlbmFt
ZTJjbGFzcyA9IHsKKyAgICAnY2xhc3MnOiBDbGFzcywKKyAgICAnbW9kdWxlJzogTW9kdWxlLAor
ICAgICdmdW5jdGlvbic6IHB5dGVzdC5JdGVtLAorfQorZGVmIGdldF9zY29wZV9ub2RlKG5vZGUs
IHNjb3BlKToKKyAgICBjbHMgPSBzY29wZW5hbWUyY2xhc3MuZ2V0KHNjb3BlKQorICAgIGlmIGNs
cyBpcyBOb25lOgorICAgICAgICBpZiBzY29wZSA9PSAic2Vzc2lvbiI6CisgICAgICAgICAgICBy
ZXR1cm4gbm9kZS5zZXNzaW9uCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVua25vd24gc2Nv
cGUiKQorICAgIHJldHVybiBub2RlLmdldHBhcmVudChjbHMpCmRpZmYgLS1naXQgYS9XZWJEcml2
ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvcmVjd2Fybi5weSBiL1dl
YkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9yZWN3YXJuLnB5
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hODk0NzRjMDM2YQotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3Qv
X3B5dGVzdC9yZWN3YXJuLnB5CkBAIC0wLDAgKzEsMjIxIEBACisiIiIgcmVjb3JkaW5nIHdhcm5p
bmdzIGR1cmluZyB0ZXN0IGZ1bmN0aW9uIGV4ZWN1dGlvbi4gIiIiCisKK2ltcG9ydCBpbnNwZWN0
CisKK2ltcG9ydCBfcHl0ZXN0Ll9jb2RlCitpbXBvcnQgcHkKK2ltcG9ydCBzeXMKK2ltcG9ydCB3
YXJuaW5ncworaW1wb3J0IHB5dGVzdAorCisKK0BweXRlc3QueWllbGRfZml4dHVyZQorZGVmIHJl
Y3dhcm4ocmVxdWVzdCk6CisgICAgIiIiUmV0dXJuIGEgV2FybmluZ3NSZWNvcmRlciBpbnN0YW5j
ZSB0aGF0IHByb3ZpZGVzIHRoZXNlIG1ldGhvZHM6CisKKyAgICAqIGBgcG9wKGNhdGVnb3J5PU5v
bmUpYGA6IHJldHVybiBsYXN0IHdhcm5pbmcgbWF0Y2hpbmcgdGhlIGNhdGVnb3J5LgorICAgICog
YGBjbGVhcigpYGA6IGNsZWFyIGxpc3Qgb2Ygd2FybmluZ3MKKworICAgIFNlZSBodHRwOi8vZG9j
cy5weXRob24ub3JnL2xpYnJhcnkvd2FybmluZ3MuaHRtbCBmb3IgaW5mb3JtYXRpb24KKyAgICBv
biB3YXJuaW5nIGNhdGVnb3JpZXMuCisgICAgIiIiCisgICAgd3JlYyA9IFdhcm5pbmdzUmVjb3Jk
ZXIoKQorICAgIHdpdGggd3JlYzoKKyAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdkZWZh
dWx0JykKKyAgICAgICAgeWllbGQgd3JlYworCisKK2RlZiBweXRlc3RfbmFtZXNwYWNlKCk6Cisg
ICAgcmV0dXJuIHsnZGVwcmVjYXRlZF9jYWxsJzogZGVwcmVjYXRlZF9jYWxsLAorICAgICAgICAg
ICAgJ3dhcm5zJzogd2FybnN9CisKKworZGVmIGRlcHJlY2F0ZWRfY2FsbChmdW5jPU5vbmUsICph
cmdzLCAqKmt3YXJncyk6CisgICAgIiIiIGFzc2VydCB0aGF0IGNhbGxpbmcgYGBmdW5jKCphcmdz
LCAqKmt3YXJncylgYCB0cmlnZ2VycyBhCisgICAgYGBEZXByZWNhdGlvbldhcm5pbmdgYCBvciBg
YFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmdgYC4KKworICAgIFRoaXMgZnVuY3Rpb24gY2FuIGJl
IHVzZWQgYXMgYSBjb250ZXh0IG1hbmFnZXI6OgorCisgICAgICAgID4+PiB3aXRoIGRlcHJlY2F0
ZWRfY2FsbCgpOgorICAgICAgICAuLi4gICAgbXlvYmplY3QuZGVwcmVjYXRlZF9tZXRob2QoKQor
CisgICAgTm90ZTogd2UgY2Fubm90IHVzZSBXYXJuaW5nc1JlY29yZGVyIGhlcmUgYmVjYXVzZSBp
dCBpcyBzdGlsbCBzdWJqZWN0CisgICAgdG8gdGhlIG1lY2hhbmlzbSB0aGF0IHByZXZlbnRzIHdh
cm5pbmdzIG9mIHRoZSBzYW1lIHR5cGUgZnJvbSBiZWluZworICAgIHRyaWdnZXJlZCB0d2ljZSBm
b3IgdGhlIHNhbWUgbW9kdWxlLiBTZWUgIzExOTAuCisgICAgIiIiCisgICAgaWYgbm90IGZ1bmM6
CisgICAgICAgIHJldHVybiBXYXJuaW5nc0NoZWNrZXIoZXhwZWN0ZWRfd2FybmluZz1EZXByZWNh
dGlvbldhcm5pbmcpCisKKyAgICBjYXRlZ29yaWVzID0gW10KKworICAgIGRlZiB3YXJuX2V4cGxp
Y2l0KG1lc3NhZ2UsIGNhdGVnb3J5LCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBjYXRlZ29y
aWVzLmFwcGVuZChjYXRlZ29yeSkKKyAgICAgICAgb2xkX3dhcm5fZXhwbGljaXQobWVzc2FnZSwg
Y2F0ZWdvcnksICphcmdzLCAqKmt3YXJncykKKworICAgIGRlZiB3YXJuKG1lc3NhZ2UsIGNhdGVn
b3J5PU5vbmUsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UobWVzc2Fn
ZSwgV2FybmluZyk6CisgICAgICAgICAgICBjYXRlZ29yaWVzLmFwcGVuZChtZXNzYWdlLl9fY2xh
c3NfXykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNhdGVnb3JpZXMuYXBwZW5kKGNhdGVn
b3J5KQorICAgICAgICBvbGRfd2FybihtZXNzYWdlLCBjYXRlZ29yeSwgKmFyZ3MsICoqa3dhcmdz
KQorCisgICAgb2xkX3dhcm4gPSB3YXJuaW5ncy53YXJuCisgICAgb2xkX3dhcm5fZXhwbGljaXQg
PSB3YXJuaW5ncy53YXJuX2V4cGxpY2l0CisgICAgd2FybmluZ3Mud2Fybl9leHBsaWNpdCA9IHdh
cm5fZXhwbGljaXQKKyAgICB3YXJuaW5ncy53YXJuID0gd2FybgorICAgIHRyeToKKyAgICAgICAg
cmV0ID0gZnVuYygqYXJncywgKiprd2FyZ3MpCisgICAgZmluYWxseToKKyAgICAgICAgd2Fybmlu
Z3Mud2Fybl9leHBsaWNpdCA9IG9sZF93YXJuX2V4cGxpY2l0CisgICAgICAgIHdhcm5pbmdzLndh
cm4gPSBvbGRfd2FybgorICAgIGRlcHJlY2F0aW9uX2NhdGVnb3JpZXMgPSAoRGVwcmVjYXRpb25X
YXJuaW5nLCBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKQorICAgIGlmIG5vdCBhbnkoaXNzdWJj
bGFzcyhjLCBkZXByZWNhdGlvbl9jYXRlZ29yaWVzKSBmb3IgYyBpbiBjYXRlZ29yaWVzKToKKyAg
ICAgICAgX190cmFjZWJhY2toaWRlX18gPSBUcnVlCisgICAgICAgIHJhaXNlIEFzc2VydGlvbkVy
cm9yKCIlciBkaWQgbm90IHByb2R1Y2UgRGVwcmVjYXRpb25XYXJuaW5nIiAlIChmdW5jLCkpCisg
ICAgcmV0dXJuIHJldAorCisKK2RlZiB3YXJucyhleHBlY3RlZF93YXJuaW5nLCAqYXJncywgKipr
d2FyZ3MpOgorICAgICIiIkFzc2VydCB0aGF0IGNvZGUgcmFpc2VzIGEgcGFydGljdWxhciBjbGFz
cyBvZiB3YXJuaW5nLgorCisgICAgU3BlY2lmaWNhbGx5LCB0aGUgaW5wdXQgQGV4cGVjdGVkX3dh
cm5pbmcgY2FuIGJlIGEgd2FybmluZyBjbGFzcyBvcgorICAgIHR1cGxlIG9mIHdhcm5pbmcgY2xh
c3NlcywgYW5kIHRoZSBjb2RlIG11c3QgcmV0dXJuIHRoYXQgd2FybmluZworICAgIChpZiBhIHNp
bmdsZSBjbGFzcykgb3Igb25lIG9mIHRob3NlIHdhcm5pbmdzIChpZiBhIHR1cGxlKS4KKworICAg
IFRoaXMgaGVscGVyIHByb2R1Y2VzIGEgbGlzdCBvZiBgYHdhcm5pbmdzLldhcm5pbmdNZXNzYWdl
YGAgb2JqZWN0cywKKyAgICBvbmUgZm9yIGVhY2ggd2FybmluZyByYWlzZWQuCisKKyAgICBUaGlz
IGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGFzIGEgY29udGV4dCBtYW5hZ2VyLCBvciBhbnkgb2YgdGhl
IG90aGVyIHdheXMKKyAgICBgYHB5dGVzdC5yYWlzZXNgYCBjYW4gYmUgdXNlZDo6CisKKyAgICAg
ICAgPj4+IHdpdGggd2FybnMoUnVudGltZVdhcm5pbmcpOgorICAgICAgICAuLi4gICAgd2Fybmlu
Z3Mud2FybigibXkgd2FybmluZyIsIFJ1bnRpbWVXYXJuaW5nKQorICAgICIiIgorICAgIHdjaGVj
ayA9IFdhcm5pbmdzQ2hlY2tlcihleHBlY3RlZF93YXJuaW5nKQorICAgIGlmIG5vdCBhcmdzOgor
ICAgICAgICByZXR1cm4gd2NoZWNrCisgICAgZWxpZiBpc2luc3RhbmNlKGFyZ3NbMF0sIHN0cik6
CisgICAgICAgIGNvZGUsID0gYXJncworICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShjb2RlLCBz
dHIpCisgICAgICAgIGZyYW1lID0gc3lzLl9nZXRmcmFtZSgxKQorICAgICAgICBsb2MgPSBmcmFt
ZS5mX2xvY2Fscy5jb3B5KCkKKyAgICAgICAgbG9jLnVwZGF0ZShrd2FyZ3MpCisKKyAgICAgICAg
d2l0aCB3Y2hlY2s6CisgICAgICAgICAgICBjb2RlID0gX3B5dGVzdC5fY29kZS5Tb3VyY2UoY29k
ZSkuY29tcGlsZSgpCisgICAgICAgICAgICBweS5idWlsdGluLmV4ZWNfKGNvZGUsIGZyYW1lLmZf
Z2xvYmFscywgbG9jKQorICAgIGVsc2U6CisgICAgICAgIGZ1bmMgPSBhcmdzWzBdCisgICAgICAg
IHdpdGggd2NoZWNrOgorICAgICAgICAgICAgcmV0dXJuIGZ1bmMoKmFyZ3NbMTpdLCAqKmt3YXJn
cykKKworCitjbGFzcyBSZWNvcmRlZFdhcm5pbmcob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18o
c2VsZiwgbWVzc2FnZSwgY2F0ZWdvcnksIGZpbGVuYW1lLCBsaW5lbm8sIGZpbGUsIGxpbmUpOgor
ICAgICAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlCisgICAgICAgIHNlbGYuY2F0ZWdvcnkgPSBj
YXRlZ29yeQorICAgICAgICBzZWxmLmZpbGVuYW1lID0gZmlsZW5hbWUKKyAgICAgICAgc2VsZi5s
aW5lbm8gPSBsaW5lbm8KKyAgICAgICAgc2VsZi5maWxlID0gZmlsZQorICAgICAgICBzZWxmLmxp
bmUgPSBsaW5lCisKKworY2xhc3MgV2FybmluZ3NSZWNvcmRlcihvYmplY3QpOgorICAgICIiIkEg
Y29udGV4dCBtYW5hZ2VyIHRvIHJlY29yZCByYWlzZWQgd2FybmluZ3MuCisKKyAgICBBZGFwdGVk
IGZyb20gYHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzYC4KKyAgICAiIiIKKworICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBtb2R1bGU9Tm9uZSk6CisgICAgICAgIHNlbGYuX21vZHVsZSA9IHN5cy5tb2R1
bGVzWyd3YXJuaW5ncyddIGlmIG1vZHVsZSBpcyBOb25lIGVsc2UgbW9kdWxlCisgICAgICAgIHNl
bGYuX2VudGVyZWQgPSBGYWxzZQorICAgICAgICBzZWxmLl9saXN0ID0gW10KKworICAgIEBwcm9w
ZXJ0eQorICAgIGRlZiBsaXN0KHNlbGYpOgorICAgICAgICAiIiJUaGUgbGlzdCBvZiByZWNvcmRl
ZCB3YXJuaW5ncy4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2xpc3QKKworICAgIGRlZiBfX2dl
dGl0ZW1fXyhzZWxmLCBpKToKKyAgICAgICAgIiIiR2V0IGEgcmVjb3JkZWQgd2FybmluZyBieSBp
bmRleC4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2xpc3RbaV0KKworICAgIGRlZiBfX2l0ZXJf
XyhzZWxmKToKKyAgICAgICAgIiIiSXRlcmF0ZSB0aHJvdWdoIHRoZSByZWNvcmRlZCB3YXJuaW5n
cy4iIiIKKyAgICAgICAgcmV0dXJuIGl0ZXIoc2VsZi5fbGlzdCkKKworICAgIGRlZiBfX2xlbl9f
KHNlbGYpOgorICAgICAgICAiIiJUaGUgbnVtYmVyIG9mIHJlY29yZGVkIHdhcm5pbmdzLiIiIgor
ICAgICAgICByZXR1cm4gbGVuKHNlbGYuX2xpc3QpCisKKyAgICBkZWYgcG9wKHNlbGYsIGNscz1X
YXJuaW5nKToKKyAgICAgICAgIiIiUG9wIHRoZSBmaXJzdCByZWNvcmRlZCB3YXJuaW5nLCByYWlz
ZSBleGNlcHRpb24gaWYgbm90IGV4aXN0cy4iIiIKKyAgICAgICAgZm9yIGksIHcgaW4gZW51bWVy
YXRlKHNlbGYuX2xpc3QpOgorICAgICAgICAgICAgaWYgaXNzdWJjbGFzcyh3LmNhdGVnb3J5LCBj
bHMpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9saXN0LnBvcChpKQorICAgICAgICBf
X3RyYWNlYmFja2hpZGVfXyA9IFRydWUKKyAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoIiVy
IG5vdCBmb3VuZCBpbiB3YXJuaW5nIGxpc3QiICUgY2xzKQorCisgICAgZGVmIGNsZWFyKHNlbGYp
OgorICAgICAgICAiIiJDbGVhciB0aGUgbGlzdCBvZiByZWNvcmRlZCB3YXJuaW5ncy4iIiIKKyAg
ICAgICAgc2VsZi5fbGlzdFs6XSA9IFtdCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAg
ICAgICBpZiBzZWxmLl9lbnRlcmVkOgorICAgICAgICAgICAgX190cmFjZWJhY2toaWRlX18gPSBU
cnVlCisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkNhbm5vdCBlbnRlciAlciB0d2lj
ZSIgJSBzZWxmKQorICAgICAgICBzZWxmLl9lbnRlcmVkID0gVHJ1ZQorICAgICAgICBzZWxmLl9m
aWx0ZXJzID0gc2VsZi5fbW9kdWxlLmZpbHRlcnMKKyAgICAgICAgc2VsZi5fbW9kdWxlLmZpbHRl
cnMgPSBzZWxmLl9maWx0ZXJzWzpdCisgICAgICAgIHNlbGYuX3Nob3d3YXJuaW5nID0gc2VsZi5f
bW9kdWxlLnNob3d3YXJuaW5nCisKKyAgICAgICAgZGVmIHNob3d3YXJuaW5nKG1lc3NhZ2UsIGNh
dGVnb3J5LCBmaWxlbmFtZSwgbGluZW5vLAorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZT1O
b25lLCBsaW5lPU5vbmUpOgorICAgICAgICAgICAgc2VsZi5fbGlzdC5hcHBlbmQoUmVjb3JkZWRX
YXJuaW5nKAorICAgICAgICAgICAgICAgIG1lc3NhZ2UsIGNhdGVnb3J5LCBmaWxlbmFtZSwgbGlu
ZW5vLCBmaWxlLCBsaW5lKSkKKworICAgICAgICAgICAgIyBzdGlsbCBwZXJmb3JtIG9sZCBzaG93
d2FybmluZyBmdW5jdGlvbmFsaXR5CisgICAgICAgICAgICBzZWxmLl9zaG93d2FybmluZygKKyAg
ICAgICAgICAgICAgICBtZXNzYWdlLCBjYXRlZ29yeSwgZmlsZW5hbWUsIGxpbmVubywgZmlsZT1m
aWxlLCBsaW5lPWxpbmUpCisKKyAgICAgICAgc2VsZi5fbW9kdWxlLnNob3d3YXJuaW5nID0gc2hv
d3dhcm5pbmcKKworICAgICAgICAjIGFsbG93IHRoZSBzYW1lIHdhcm5pbmcgdG8gYmUgcmFpc2Vk
IG1vcmUgdGhhbiBvbmNlCisKKyAgICAgICAgc2VsZi5fbW9kdWxlLnNpbXBsZWZpbHRlcignYWx3
YXlzJykKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqZXhj
X2luZm8pOgorICAgICAgICBpZiBub3Qgc2VsZi5fZW50ZXJlZDoKKyAgICAgICAgICAgIF9fdHJh
Y2ViYWNraGlkZV9fID0gVHJ1ZQorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDYW5u
b3QgZXhpdCAlciB3aXRob3V0IGVudGVyaW5nIGZpcnN0IiAlIHNlbGYpCisgICAgICAgIHNlbGYu
X21vZHVsZS5maWx0ZXJzID0gc2VsZi5fZmlsdGVycworICAgICAgICBzZWxmLl9tb2R1bGUuc2hv
d3dhcm5pbmcgPSBzZWxmLl9zaG93d2FybmluZworCisKK2NsYXNzIFdhcm5pbmdzQ2hlY2tlcihX
YXJuaW5nc1JlY29yZGVyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZXhwZWN0ZWRfd2Fybmlu
Zz1Ob25lLCBtb2R1bGU9Tm9uZSk6CisgICAgICAgIHN1cGVyKFdhcm5pbmdzQ2hlY2tlciwgc2Vs
ZikuX19pbml0X18obW9kdWxlPW1vZHVsZSkKKworICAgICAgICBtc2cgPSAoImV4Y2VwdGlvbnMg
bXVzdCBiZSBvbGQtc3R5bGUgY2xhc3NlcyBvciAiCisgICAgICAgICAgICAgICAiZGVyaXZlZCBm
cm9tIFdhcm5pbmcsIG5vdCAlcyIpCisgICAgICAgIGlmIGlzaW5zdGFuY2UoZXhwZWN0ZWRfd2Fy
bmluZywgdHVwbGUpOgorICAgICAgICAgICAgZm9yIGV4YyBpbiBleHBlY3RlZF93YXJuaW5nOgor
ICAgICAgICAgICAgICAgIGlmIG5vdCBpbnNwZWN0LmlzY2xhc3MoZXhjKToKKyAgICAgICAgICAg
ICAgICAgICAgcmFpc2UgVHlwZUVycm9yKG1zZyAlIHR5cGUoZXhjKSkKKyAgICAgICAgZWxpZiBp
bnNwZWN0LmlzY2xhc3MoZXhwZWN0ZWRfd2FybmluZyk6CisgICAgICAgICAgICBleHBlY3RlZF93
YXJuaW5nID0gKGV4cGVjdGVkX3dhcm5pbmcsKQorICAgICAgICBlbGlmIGV4cGVjdGVkX3dhcm5p
bmcgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IobXNnICUgdHlwZShl
eHBlY3RlZF93YXJuaW5nKSkKKworICAgICAgICBzZWxmLmV4cGVjdGVkX3dhcm5pbmcgPSBleHBl
Y3RlZF93YXJuaW5nCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmV4Y19pbmZvKToKKyAgICAg
ICAgc3VwZXIoV2FybmluZ3NDaGVja2VyLCBzZWxmKS5fX2V4aXRfXygqZXhjX2luZm8pCisKKyAg
ICAgICAgIyBvbmx5IGNoZWNrIGlmIHdlJ3JlIG5vdCBjdXJyZW50bHkgaGFuZGxpbmcgYW4gZXhj
ZXB0aW9uCisgICAgICAgIGlmIGFsbChhIGlzIE5vbmUgZm9yIGEgaW4gZXhjX2luZm8pOgorICAg
ICAgICAgICAgaWYgc2VsZi5leHBlY3RlZF93YXJuaW5nIGlzIG5vdCBOb25lOgorICAgICAgICAg
ICAgICAgIGlmIG5vdCBhbnkoci5jYXRlZ29yeSBpbiBzZWxmLmV4cGVjdGVkX3dhcm5pbmcgZm9y
IHIgaW4gc2VsZik6CisgICAgICAgICAgICAgICAgICAgIF9fdHJhY2ViYWNraGlkZV9fID0gVHJ1
ZQorICAgICAgICAgICAgICAgICAgICBweXRlc3QuZmFpbCgiRElEIE5PVCBXQVJOIikKZGlmZiAt
LWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9y
ZXN1bHRsb2cucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19w
eXRlc3QvcmVzdWx0bG9nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li4zNjcwZjAyMTRjOQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVk
L3czYy90b29scy9weXRlc3QvX3B5dGVzdC9yZXN1bHRsb2cucHkKQEAgLTAsMCArMSwxMDQgQEAK
KyIiIiBsb2cgbWFjaGluZS1wYXJzZWFibGUgdGVzdCBzZXNzaW9uIHJlc3VsdCBpbmZvcm1hdGlv
biBpbiBhIHBsYWluCit0ZXh0IGZpbGUuCisiIiIKKworaW1wb3J0IHB5CitpbXBvcnQgb3MKKwor
ZGVmIHB5dGVzdF9hZGRvcHRpb24ocGFyc2VyKToKKyAgICBncm91cCA9IHBhcnNlci5nZXRncm91
cCgidGVybWluYWwgcmVwb3J0aW5nIiwgInJlc3VsdGxvZyBwbHVnaW4gb3B0aW9ucyIpCisgICAg
Z3JvdXAuYWRkb3B0aW9uKCctLXJlc3VsdGxvZycsICctLXJlc3VsdC1sb2cnLCBhY3Rpb249InN0
b3JlIiwKKyAgICAgICAgbWV0YXZhcj0icGF0aCIsIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgaGVs
cD0icGF0aCBmb3IgbWFjaGluZS1yZWFkYWJsZSByZXN1bHQgbG9nLiIpCisKK2RlZiBweXRlc3Rf
Y29uZmlndXJlKGNvbmZpZyk6CisgICAgcmVzdWx0bG9nID0gY29uZmlnLm9wdGlvbi5yZXN1bHRs
b2cKKyAgICAjIHByZXZlbnQgb3BlbmluZyByZXN1bHRsb2cgb24gc2xhdmUgbm9kZXMgKHhkaXN0
KQorICAgIGlmIHJlc3VsdGxvZyBhbmQgbm90IGhhc2F0dHIoY29uZmlnLCAnc2xhdmVpbnB1dCcp
OgorICAgICAgICBkaXJuYW1lID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChyZXN1
bHRsb2cpKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihkaXJuYW1lKToKKyAgICAgICAg
ICAgIG9zLm1ha2VkaXJzKGRpcm5hbWUpCisgICAgICAgIGxvZ2ZpbGUgPSBvcGVuKHJlc3VsdGxv
ZywgJ3cnLCAxKSAjIGxpbmUgYnVmZmVyZWQKKyAgICAgICAgY29uZmlnLl9yZXN1bHRsb2cgPSBS
ZXN1bHRMb2coY29uZmlnLCBsb2dmaWxlKQorICAgICAgICBjb25maWcucGx1Z2lubWFuYWdlci5y
ZWdpc3Rlcihjb25maWcuX3Jlc3VsdGxvZykKKworZGVmIHB5dGVzdF91bmNvbmZpZ3VyZShjb25m
aWcpOgorICAgIHJlc3VsdGxvZyA9IGdldGF0dHIoY29uZmlnLCAnX3Jlc3VsdGxvZycsIE5vbmUp
CisgICAgaWYgcmVzdWx0bG9nOgorICAgICAgICByZXN1bHRsb2cubG9nZmlsZS5jbG9zZSgpCisg
ICAgICAgIGRlbCBjb25maWcuX3Jlc3VsdGxvZworICAgICAgICBjb25maWcucGx1Z2lubWFuYWdl
ci51bnJlZ2lzdGVyKHJlc3VsdGxvZykKKworZGVmIGdlbmVyaWNfcGF0aChpdGVtKToKKyAgICBj
aGFpbiA9IGl0ZW0ubGlzdGNoYWluKCkKKyAgICBncGF0aCA9IFtjaGFpblswXS5uYW1lXQorICAg
IGZzcGF0aCA9IGNoYWluWzBdLmZzcGF0aAorICAgIGZzcGFydCA9IEZhbHNlCisgICAgZm9yIG5v
ZGUgaW4gY2hhaW5bMTpdOgorICAgICAgICBuZXdmc3BhdGggPSBub2RlLmZzcGF0aAorICAgICAg
ICBpZiBuZXdmc3BhdGggPT0gZnNwYXRoOgorICAgICAgICAgICAgaWYgZnNwYXJ0OgorICAgICAg
ICAgICAgICAgIGdwYXRoLmFwcGVuZCgnOicpCisgICAgICAgICAgICAgICAgZnNwYXJ0ID0gRmFs
c2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZ3BhdGguYXBwZW5kKCcuJykK
KyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGdwYXRoLmFwcGVuZCgnLycpCisgICAgICAgICAg
ICBmc3BhcnQgPSBUcnVlCisgICAgICAgIG5hbWUgPSBub2RlLm5hbWUKKyAgICAgICAgaWYgbmFt
ZVswXSBpbiAnKFsnOgorICAgICAgICAgICAgZ3BhdGgucG9wKCkKKyAgICAgICAgZ3BhdGguYXBw
ZW5kKG5hbWUpCisgICAgICAgIGZzcGF0aCA9IG5ld2ZzcGF0aAorICAgIHJldHVybiAnJy5qb2lu
KGdwYXRoKQorCitjbGFzcyBSZXN1bHRMb2cob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgY29uZmlnLCBsb2dmaWxlKToKKyAgICAgICAgc2VsZi5jb25maWcgPSBjb25maWcKKyAgICAg
ICAgc2VsZi5sb2dmaWxlID0gbG9nZmlsZSAjIHByZWZlcmFibHkgbGluZSBidWZmZXJlZAorCisg
ICAgZGVmIHdyaXRlX2xvZ19lbnRyeShzZWxmLCB0ZXN0cGF0aCwgbGV0dGVyY29kZSwgbG9uZ3Jl
cHIpOgorICAgICAgICBweS5idWlsdGluLnByaW50XygiJXMgJXMiICUgKGxldHRlcmNvZGUsIHRl
c3RwYXRoKSwgZmlsZT1zZWxmLmxvZ2ZpbGUpCisgICAgICAgIGZvciBsaW5lIGluIGxvbmdyZXBy
LnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgIHB5LmJ1aWx0aW4ucHJpbnRfKCIgJXMiICUgbGlu
ZSwgZmlsZT1zZWxmLmxvZ2ZpbGUpCisKKyAgICBkZWYgbG9nX291dGNvbWUoc2VsZiwgcmVwb3J0
LCBsZXR0ZXJjb2RlLCBsb25ncmVwcik6CisgICAgICAgIHRlc3RwYXRoID0gZ2V0YXR0cihyZXBv
cnQsICdub2RlaWQnLCBOb25lKQorICAgICAgICBpZiB0ZXN0cGF0aCBpcyBOb25lOgorICAgICAg
ICAgICAgdGVzdHBhdGggPSByZXBvcnQuZnNwYXRoCisgICAgICAgIHNlbGYud3JpdGVfbG9nX2Vu
dHJ5KHRlc3RwYXRoLCBsZXR0ZXJjb2RlLCBsb25ncmVwcikKKworICAgIGRlZiBweXRlc3RfcnVu
dGVzdF9sb2dyZXBvcnQoc2VsZiwgcmVwb3J0KToKKyAgICAgICAgaWYgcmVwb3J0LndoZW4gIT0g
ImNhbGwiIGFuZCByZXBvcnQucGFzc2VkOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHJl
cyA9IHNlbGYuY29uZmlnLmhvb2sucHl0ZXN0X3JlcG9ydF90ZXN0c3RhdHVzKHJlcG9ydD1yZXBv
cnQpCisgICAgICAgIGNvZGUgPSByZXNbMV0KKyAgICAgICAgaWYgY29kZSA9PSAneCc6CisgICAg
ICAgICAgICBsb25ncmVwciA9IHN0cihyZXBvcnQubG9uZ3JlcHIpCisgICAgICAgIGVsaWYgY29k
ZSA9PSAnWCc6CisgICAgICAgICAgICBsb25ncmVwciA9ICcnCisgICAgICAgIGVsaWYgcmVwb3J0
LnBhc3NlZDoKKyAgICAgICAgICAgIGxvbmdyZXByID0gIiIKKyAgICAgICAgZWxpZiByZXBvcnQu
ZmFpbGVkOgorICAgICAgICAgICAgbG9uZ3JlcHIgPSBzdHIocmVwb3J0LmxvbmdyZXByKQorICAg
ICAgICBlbGlmIHJlcG9ydC5za2lwcGVkOgorICAgICAgICAgICAgbG9uZ3JlcHIgPSBzdHIocmVw
b3J0LmxvbmdyZXByWzJdKQorICAgICAgICBzZWxmLmxvZ19vdXRjb21lKHJlcG9ydCwgY29kZSwg
bG9uZ3JlcHIpCisKKyAgICBkZWYgcHl0ZXN0X2NvbGxlY3RyZXBvcnQoc2VsZiwgcmVwb3J0KToK
KyAgICAgICAgaWYgbm90IHJlcG9ydC5wYXNzZWQ6CisgICAgICAgICAgICBpZiByZXBvcnQuZmFp
bGVkOgorICAgICAgICAgICAgICAgIGNvZGUgPSAiRiIKKyAgICAgICAgICAgICAgICBsb25ncmVw
ciA9IHN0cihyZXBvcnQubG9uZ3JlcHIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAg
ICAgIGFzc2VydCByZXBvcnQuc2tpcHBlZAorICAgICAgICAgICAgICAgIGNvZGUgPSAiUyIKKyAg
ICAgICAgICAgICAgICBsb25ncmVwciA9ICIlczolZDogJXMiICUgcmVwb3J0LmxvbmdyZXByCisg
ICAgICAgICAgICBzZWxmLmxvZ19vdXRjb21lKHJlcG9ydCwgY29kZSwgbG9uZ3JlcHIpCisKKyAg
ICBkZWYgcHl0ZXN0X2ludGVybmFsZXJyb3Ioc2VsZiwgZXhjcmVwcik6CisgICAgICAgIHJlcHJj
cmFzaCA9IGdldGF0dHIoZXhjcmVwciwgJ3JlcHJjcmFzaCcsIE5vbmUpCisgICAgICAgIHBhdGgg
PSBnZXRhdHRyKHJlcHJjcmFzaCwgInBhdGgiLCBOb25lKQorICAgICAgICBpZiBwYXRoIGlzIE5v
bmU6CisgICAgICAgICAgICBwYXRoID0gImN3ZDolcyIgJSBweS5wYXRoLmxvY2FsKCkKKyAgICAg
ICAgc2VsZi53cml0ZV9sb2dfZW50cnkocGF0aCwgJyEnLCBzdHIoZXhjcmVwcikpCmRpZmYgLS1n
aXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvcnVu
bmVyLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0
L3J1bm5lci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uY2RlOTRj
OGM4OWUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9v
bHMvcHl0ZXN0L19weXRlc3QvcnVubmVyLnB5CkBAIC0wLDAgKzEsNTE1IEBACisiIiIgYmFzaWMg
Y29sbGVjdCBhbmQgcnVudGVzdCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbnMgIiIiCitpbXBvcnQg
YmRiCitpbXBvcnQgc3lzCitmcm9tIHRpbWUgaW1wb3J0IHRpbWUKKworaW1wb3J0IHB5CitpbXBv
cnQgcHl0ZXN0Citmcm9tIF9weXRlc3QuX2NvZGUuY29kZSBpbXBvcnQgVGVybWluYWxSZXByLCBF
eGNlcHRpb25JbmZvCisKKworZGVmIHB5dGVzdF9uYW1lc3BhY2UoKToKKyAgICByZXR1cm4gewor
ICAgICAgICAnZmFpbCcgICAgICAgICA6IGZhaWwsCisgICAgICAgICdza2lwJyAgICAgICAgIDog
c2tpcCwKKyAgICAgICAgJ2ltcG9ydG9yc2tpcCcgOiBpbXBvcnRvcnNraXAsCisgICAgICAgICdl
eGl0JyAgICAgICAgIDogZXhpdCwKKyAgICB9CisKKyMKKyMgcHl0ZXN0IHBsdWdpbiBob29rcwor
CitkZWYgcHl0ZXN0X2FkZG9wdGlvbihwYXJzZXIpOgorICAgIGdyb3VwID0gcGFyc2VyLmdldGdy
b3VwKCJ0ZXJtaW5hbCByZXBvcnRpbmciLCAicmVwb3J0aW5nIiwgYWZ0ZXI9ImdlbmVyYWwiKQor
ICAgIGdyb3VwLmFkZG9wdGlvbignLS1kdXJhdGlvbnMnLAorICAgICAgICAgYWN0aW9uPSJzdG9y
ZSIsIHR5cGU9aW50LCBkZWZhdWx0PU5vbmUsIG1ldGF2YXI9Ik4iLAorICAgICAgICAgaGVscD0i
c2hvdyBOIHNsb3dlc3Qgc2V0dXAvdGVzdCBkdXJhdGlvbnMgKE49MCBmb3IgYWxsKS4iKSwKKwor
ZGVmIHB5dGVzdF90ZXJtaW5hbF9zdW1tYXJ5KHRlcm1pbmFscmVwb3J0ZXIpOgorICAgIGR1cmF0
aW9ucyA9IHRlcm1pbmFscmVwb3J0ZXIuY29uZmlnLm9wdGlvbi5kdXJhdGlvbnMKKyAgICBpZiBk
dXJhdGlvbnMgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuCisgICAgdHIgPSB0ZXJtaW5hbHJlcG9y
dGVyCisgICAgZGxpc3QgPSBbXQorICAgIGZvciByZXBsaXN0IGluIHRyLnN0YXRzLnZhbHVlcygp
OgorICAgICAgICBmb3IgcmVwIGluIHJlcGxpc3Q6CisgICAgICAgICAgICBpZiBoYXNhdHRyKHJl
cCwgJ2R1cmF0aW9uJyk6CisgICAgICAgICAgICAgICAgZGxpc3QuYXBwZW5kKHJlcCkKKyAgICBp
ZiBub3QgZGxpc3Q6CisgICAgICAgIHJldHVybgorICAgIGRsaXN0LnNvcnQoa2V5PWxhbWJkYSB4
OiB4LmR1cmF0aW9uKQorICAgIGRsaXN0LnJldmVyc2UoKQorICAgIGlmIG5vdCBkdXJhdGlvbnM6
CisgICAgICAgIHRyLndyaXRlX3NlcCgiPSIsICJzbG93ZXN0IHRlc3QgZHVyYXRpb25zIikKKyAg
ICBlbHNlOgorICAgICAgICB0ci53cml0ZV9zZXAoIj0iLCAic2xvd2VzdCAlcyB0ZXN0IGR1cmF0
aW9ucyIgJSBkdXJhdGlvbnMpCisgICAgICAgIGRsaXN0ID0gZGxpc3RbOmR1cmF0aW9uc10KKwor
ICAgIGZvciByZXAgaW4gZGxpc3Q6CisgICAgICAgIG5vZGVpZCA9IHJlcC5ub2RlaWQucmVwbGFj
ZSgiOjooKTo6IiwgIjo6IikKKyAgICAgICAgdHIud3JpdGVfbGluZSgiJTAyLjJmcyAlLThzICVz
IiAlCisgICAgICAgICAgICAocmVwLmR1cmF0aW9uLCByZXAud2hlbiwgbm9kZWlkKSkKKworZGVm
IHB5dGVzdF9zZXNzaW9uc3RhcnQoc2Vzc2lvbik6CisgICAgc2Vzc2lvbi5fc2V0dXBzdGF0ZSA9
IFNldHVwU3RhdGUoKQorZGVmIHB5dGVzdF9zZXNzaW9uZmluaXNoKHNlc3Npb24pOgorICAgIHNl
c3Npb24uX3NldHVwc3RhdGUudGVhcmRvd25fYWxsKCkKKworY2xhc3MgTm9kZUluZm86CisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIGxvY2F0aW9uKToKKyAgICAgICAgc2VsZi5sb2NhdGlvbiA9IGxv
Y2F0aW9uCisKK2RlZiBweXRlc3RfcnVudGVzdF9wcm90b2NvbChpdGVtLCBuZXh0aXRlbSk6Cisg
ICAgaXRlbS5paG9vay5weXRlc3RfcnVudGVzdF9sb2dzdGFydCgKKyAgICAgICAgbm9kZWlkPWl0
ZW0ubm9kZWlkLCBsb2NhdGlvbj1pdGVtLmxvY2F0aW9uLAorICAgICkKKyAgICBydW50ZXN0cHJv
dG9jb2woaXRlbSwgbmV4dGl0ZW09bmV4dGl0ZW0pCisgICAgcmV0dXJuIFRydWUKKworZGVmIHJ1
bnRlc3Rwcm90b2NvbChpdGVtLCBsb2c9VHJ1ZSwgbmV4dGl0ZW09Tm9uZSk6CisgICAgaGFzcmVx
dWVzdCA9IGhhc2F0dHIoaXRlbSwgIl9yZXF1ZXN0IikKKyAgICBpZiBoYXNyZXF1ZXN0IGFuZCBu
b3QgaXRlbS5fcmVxdWVzdDoKKyAgICAgICAgaXRlbS5faW5pdHJlcXVlc3QoKQorICAgIHJlcCA9
IGNhbGxfYW5kX3JlcG9ydChpdGVtLCAic2V0dXAiLCBsb2cpCisgICAgcmVwb3J0cyA9IFtyZXBd
CisgICAgaWYgcmVwLnBhc3NlZDoKKyAgICAgICAgcmVwb3J0cy5hcHBlbmQoY2FsbF9hbmRfcmVw
b3J0KGl0ZW0sICJjYWxsIiwgbG9nKSkKKyAgICByZXBvcnRzLmFwcGVuZChjYWxsX2FuZF9yZXBv
cnQoaXRlbSwgInRlYXJkb3duIiwgbG9nLAorICAgICAgICBuZXh0aXRlbT1uZXh0aXRlbSkpCisg
ICAgIyBhZnRlciBhbGwgdGVhcmRvd24gaG9va3MgaGF2ZSBiZWVuIGNhbGxlZAorICAgICMgd2Fu
dCBmdW5jYXJncyBhbmQgcmVxdWVzdCBpbmZvIHRvIGdvIGF3YXkKKyAgICBpZiBoYXNyZXF1ZXN0
OgorICAgICAgICBpdGVtLl9yZXF1ZXN0ID0gRmFsc2UKKyAgICAgICAgaXRlbS5mdW5jYXJncyA9
IE5vbmUKKyAgICByZXR1cm4gcmVwb3J0cworCitkZWYgcHl0ZXN0X3J1bnRlc3Rfc2V0dXAoaXRl
bSk6CisgICAgaXRlbS5zZXNzaW9uLl9zZXR1cHN0YXRlLnByZXBhcmUoaXRlbSkKKworZGVmIHB5
dGVzdF9ydW50ZXN0X2NhbGwoaXRlbSk6CisgICAgdHJ5OgorICAgICAgICBpdGVtLnJ1bnRlc3Qo
KQorICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICMgU3RvcmUgdHJhY2UgaW5mbyB0byBh
bGxvdyBwb3N0bW9ydGVtIGRlYnVnZ2luZworICAgICAgICB0eXBlLCB2YWx1ZSwgdGIgPSBzeXMu
ZXhjX2luZm8oKQorICAgICAgICB0YiA9IHRiLnRiX25leHQgICMgU2tpcCAqdGhpcyogZnJhbWUK
KyAgICAgICAgc3lzLmxhc3RfdHlwZSA9IHR5cGUKKyAgICAgICAgc3lzLmxhc3RfdmFsdWUgPSB2
YWx1ZQorICAgICAgICBzeXMubGFzdF90cmFjZWJhY2sgPSB0YgorICAgICAgICBkZWwgdGIgICMg
R2V0IHJpZCBvZiBpdCBpbiB0aGlzIG5hbWVzcGFjZQorICAgICAgICByYWlzZQorCitkZWYgcHl0
ZXN0X3J1bnRlc3RfdGVhcmRvd24oaXRlbSwgbmV4dGl0ZW0pOgorICAgIGl0ZW0uc2Vzc2lvbi5f
c2V0dXBzdGF0ZS50ZWFyZG93bl9leGFjdChpdGVtLCBuZXh0aXRlbSkKKworZGVmIHB5dGVzdF9y
ZXBvcnRfdGVzdHN0YXR1cyhyZXBvcnQpOgorICAgIGlmIHJlcG9ydC53aGVuIGluICgic2V0dXAi
LCAidGVhcmRvd24iKToKKyAgICAgICAgaWYgcmVwb3J0LmZhaWxlZDoKKyAgICAgICAgICAgICMg
ICAgICBjYXRlZ29yeSwgc2hvcnRsZXR0ZXIsIHZlcmJvc2Utd29yZAorICAgICAgICAgICAgcmV0
dXJuICJlcnJvciIsICJFIiwgIkVSUk9SIgorICAgICAgICBlbGlmIHJlcG9ydC5za2lwcGVkOgor
ICAgICAgICAgICAgcmV0dXJuICJza2lwcGVkIiwgInMiLCAiU0tJUFBFRCIKKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIHJldHVybiAiIiwgIiIsICIiCisKKworIworIyBJbXBsZW1lbnRhdGlv
bgorCitkZWYgY2FsbF9hbmRfcmVwb3J0KGl0ZW0sIHdoZW4sIGxvZz1UcnVlLCAqKmt3ZHMpOgor
ICAgIGNhbGwgPSBjYWxsX3J1bnRlc3RfaG9vayhpdGVtLCB3aGVuLCAqKmt3ZHMpCisgICAgaG9v
ayA9IGl0ZW0uaWhvb2sKKyAgICByZXBvcnQgPSBob29rLnB5dGVzdF9ydW50ZXN0X21ha2VyZXBv
cnQoaXRlbT1pdGVtLCBjYWxsPWNhbGwpCisgICAgaWYgbG9nOgorICAgICAgICBob29rLnB5dGVz
dF9ydW50ZXN0X2xvZ3JlcG9ydChyZXBvcnQ9cmVwb3J0KQorICAgIGlmIGNoZWNrX2ludGVyYWN0
aXZlX2V4Y2VwdGlvbihjYWxsLCByZXBvcnQpOgorICAgICAgICBob29rLnB5dGVzdF9leGNlcHRp
b25faW50ZXJhY3Qobm9kZT1pdGVtLCBjYWxsPWNhbGwsIHJlcG9ydD1yZXBvcnQpCisgICAgcmV0
dXJuIHJlcG9ydAorCitkZWYgY2hlY2tfaW50ZXJhY3RpdmVfZXhjZXB0aW9uKGNhbGwsIHJlcG9y
dCk6CisgICAgcmV0dXJuIGNhbGwuZXhjaW5mbyBhbmQgbm90ICgKKyAgICAgICAgICAgICAgICBo
YXNhdHRyKHJlcG9ydCwgIndhc3hmYWlsIikgb3IKKyAgICAgICAgICAgICAgICBjYWxsLmV4Y2lu
Zm8uZXJyaXNpbnN0YW5jZShza2lwLkV4Y2VwdGlvbikgb3IKKyAgICAgICAgICAgICAgICBjYWxs
LmV4Y2luZm8uZXJyaXNpbnN0YW5jZShiZGIuQmRiUXVpdCkpCisKK2RlZiBjYWxsX3J1bnRlc3Rf
aG9vayhpdGVtLCB3aGVuLCAqKmt3ZHMpOgorICAgIGhvb2tuYW1lID0gInB5dGVzdF9ydW50ZXN0
XyIgKyB3aGVuCisgICAgaWhvb2sgPSBnZXRhdHRyKGl0ZW0uaWhvb2ssIGhvb2tuYW1lKQorICAg
IHJldHVybiBDYWxsSW5mbyhsYW1iZGE6IGlob29rKGl0ZW09aXRlbSwgKiprd2RzKSwgd2hlbj13
aGVuKQorCitjbGFzcyBDYWxsSW5mbzoKKyAgICAiIiIgUmVzdWx0L0V4Y2VwdGlvbiBpbmZvIGEg
ZnVuY3Rpb24gaW52b2NhdGlvbi4gIiIiCisgICAgIzogTm9uZSBvciBFeGNlcHRpb25JbmZvIG9i
amVjdC4KKyAgICBleGNpbmZvID0gTm9uZQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmdW5jLCB3
aGVuKToKKyAgICAgICAgIzogY29udGV4dCBvZiBpbnZvY2F0aW9uOiBvbmUgb2YgInNldHVwIiwg
ImNhbGwiLAorICAgICAgICAjOiAidGVhcmRvd24iLCAibWVtb2NvbGxlY3QiCisgICAgICAgIHNl
bGYud2hlbiA9IHdoZW4KKyAgICAgICAgc2VsZi5zdGFydCA9IHRpbWUoKQorICAgICAgICB0cnk6
CisgICAgICAgICAgICBzZWxmLnJlc3VsdCA9IGZ1bmMoKQorICAgICAgICBleGNlcHQgS2V5Ym9h
cmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICBzZWxmLnN0b3AgPSB0aW1lKCkKKyAgICAgICAgICAg
IHJhaXNlCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuZXhjaW5mbyA9IEV4Y2Vw
dGlvbkluZm8oKQorICAgICAgICBzZWxmLnN0b3AgPSB0aW1lKCkKKworICAgIGRlZiBfX3JlcHJf
XyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5leGNpbmZvOgorICAgICAgICAgICAgc3RhdHVzID0g
ImV4Y2VwdGlvbjogJXMiICUgc3RyKHNlbGYuZXhjaW5mby52YWx1ZSkKKyAgICAgICAgZWxzZToK
KyAgICAgICAgICAgIHN0YXR1cyA9ICJyZXN1bHQ6ICVyIiAlIChzZWxmLnJlc3VsdCwpCisgICAg
ICAgIHJldHVybiAiPENhbGxJbmZvIHdoZW49JXIgJXM+IiAlIChzZWxmLndoZW4sIHN0YXR1cykK
KworZGVmIGdldHNsYXZlaW5mb2xpbmUobm9kZSk6CisgICAgdHJ5OgorICAgICAgICByZXR1cm4g
bm9kZS5fc2xhdmVpbmZvY2FjaGUKKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAg
IGQgPSBub2RlLnNsYXZlaW5mbworICAgICAgICB2ZXIgPSAiJXMuJXMuJXMiICUgZFsndmVyc2lv
bl9pbmZvJ11bOjNdCisgICAgICAgIG5vZGUuX3NsYXZlaW5mb2NhY2hlID0gcyA9ICJbJXNdICVz
IC0tIFB5dGhvbiAlcyAlcyIgJSAoCisgICAgICAgICAgICBkWydpZCddLCBkWydzeXNwbGF0Zm9y
bSddLCB2ZXIsIGRbJ2V4ZWN1dGFibGUnXSkKKyAgICAgICAgcmV0dXJuIHMKKworY2xhc3MgQmFz
ZVJlcG9ydChvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICoqa3cpOgorICAgICAg
ICBzZWxmLl9fZGljdF9fLnVwZGF0ZShrdykKKworICAgIGRlZiB0b3Rlcm1pbmFsKHNlbGYsIG91
dCk6CisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgJ25vZGUnKToKKyAgICAgICAgICAgIG91dC5s
aW5lKGdldHNsYXZlaW5mb2xpbmUoc2VsZi5ub2RlKSkKKworICAgICAgICBsb25ncmVwciA9IHNl
bGYubG9uZ3JlcHIKKyAgICAgICAgaWYgbG9uZ3JlcHIgaXMgTm9uZToKKyAgICAgICAgICAgIHJl
dHVybgorCisgICAgICAgIGlmIGhhc2F0dHIobG9uZ3JlcHIsICd0b3Rlcm1pbmFsJyk6CisgICAg
ICAgICAgICBsb25ncmVwci50b3Rlcm1pbmFsKG91dCkKKyAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgIHRyeToKKyAgICAgICAgICAgICAgICBvdXQubGluZShsb25ncmVwcikKKyAgICAgICAgICAg
IGV4Y2VwdCBVbmljb2RlRW5jb2RlRXJyb3I6CisgICAgICAgICAgICAgICAgb3V0LmxpbmUoIjx1
bnByaW50YWJsZSBsb25ncmVwcj4iKQorCisgICAgZGVmIGdldF9zZWN0aW9ucyhzZWxmLCBwcmVm
aXgpOgorICAgICAgICBmb3IgbmFtZSwgY29udGVudCBpbiBzZWxmLnNlY3Rpb25zOgorICAgICAg
ICAgICAgaWYgbmFtZS5zdGFydHN3aXRoKHByZWZpeCk6CisgICAgICAgICAgICAgICAgeWllbGQg
cHJlZml4LCBjb250ZW50CisKKyAgICBwYXNzZWQgPSBwcm9wZXJ0eShsYW1iZGEgeDogeC5vdXRj
b21lID09ICJwYXNzZWQiKQorICAgIGZhaWxlZCA9IHByb3BlcnR5KGxhbWJkYSB4OiB4Lm91dGNv
bWUgPT0gImZhaWxlZCIpCisgICAgc2tpcHBlZCA9IHByb3BlcnR5KGxhbWJkYSB4OiB4Lm91dGNv
bWUgPT0gInNraXBwZWQiKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGZzcGF0aChzZWxmKToK
KyAgICAgICAgcmV0dXJuIHNlbGYubm9kZWlkLnNwbGl0KCI6OiIpWzBdCisKK2RlZiBweXRlc3Rf
cnVudGVzdF9tYWtlcmVwb3J0KGl0ZW0sIGNhbGwpOgorICAgIHdoZW4gPSBjYWxsLndoZW4KKyAg
ICBkdXJhdGlvbiA9IGNhbGwuc3RvcC1jYWxsLnN0YXJ0CisgICAga2V5d29yZHMgPSBkaWN0KFso
eCwxKSBmb3IgeCBpbiBpdGVtLmtleXdvcmRzXSkKKyAgICBleGNpbmZvID0gY2FsbC5leGNpbmZv
CisgICAgc2VjdGlvbnMgPSBbXQorICAgIGlmIG5vdCBjYWxsLmV4Y2luZm86CisgICAgICAgIG91
dGNvbWUgPSAicGFzc2VkIgorICAgICAgICBsb25ncmVwciA9IE5vbmUKKyAgICBlbHNlOgorICAg
ICAgICBpZiBub3QgaXNpbnN0YW5jZShleGNpbmZvLCBFeGNlcHRpb25JbmZvKToKKyAgICAgICAg
ICAgIG91dGNvbWUgPSAiZmFpbGVkIgorICAgICAgICAgICAgbG9uZ3JlcHIgPSBleGNpbmZvCisg
ICAgICAgIGVsaWYgZXhjaW5mby5lcnJpc2luc3RhbmNlKHB5dGVzdC5za2lwLkV4Y2VwdGlvbik6
CisgICAgICAgICAgICBvdXRjb21lID0gInNraXBwZWQiCisgICAgICAgICAgICByID0gZXhjaW5m
by5fZ2V0cmVwcmNyYXNoKCkKKyAgICAgICAgICAgIGxvbmdyZXByID0gKHN0cihyLnBhdGgpLCBy
LmxpbmVubywgci5tZXNzYWdlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3V0Y29tZSA9
ICJmYWlsZWQiCisgICAgICAgICAgICBpZiBjYWxsLndoZW4gPT0gImNhbGwiOgorICAgICAgICAg
ICAgICAgIGxvbmdyZXByID0gaXRlbS5yZXByX2ZhaWx1cmUoZXhjaW5mbykKKyAgICAgICAgICAg
IGVsc2U6ICMgZXhjZXB0aW9uIGluIHNldHVwIG9yIHRlYXJkb3duCisgICAgICAgICAgICAgICAg
bG9uZ3JlcHIgPSBpdGVtLl9yZXByX2ZhaWx1cmVfcHkoZXhjaW5mbywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9aXRlbS5jb25maWcub3B0aW9uLnRi
c3R5bGUpCisgICAgZm9yIHJ3aGVuLCBrZXksIGNvbnRlbnQgaW4gaXRlbS5fcmVwb3J0X3NlY3Rp
b25zOgorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoKCJDYXB0dXJlZCAlcyAlcyIgJShrZXksIHJ3
aGVuKSwgY29udGVudCkpCisgICAgcmV0dXJuIFRlc3RSZXBvcnQoaXRlbS5ub2RlaWQsIGl0ZW0u
bG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAga2V5d29yZHMsIG91dGNvbWUsIGxvbmdy
ZXByLCB3aGVuLAorICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25zLCBkdXJhdGlvbikKKwor
Y2xhc3MgVGVzdFJlcG9ydChCYXNlUmVwb3J0KToKKyAgICAiIiIgQmFzaWMgdGVzdCByZXBvcnQg
b2JqZWN0IChhbHNvIHVzZWQgZm9yIHNldHVwIGFuZCB0ZWFyZG93biBjYWxscyBpZgorICAgIHRo
ZXkgZmFpbCkuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5vZGVpZCwgbG9jYXRp
b24sIGtleXdvcmRzLCBvdXRjb21lLAorICAgICAgICAgICAgICAgICBsb25ncmVwciwgd2hlbiwg
c2VjdGlvbnM9KCksIGR1cmF0aW9uPTAsICoqZXh0cmEpOgorICAgICAgICAjOiBub3JtYWxpemVk
IGNvbGxlY3Rpb24gbm9kZSBpZAorICAgICAgICBzZWxmLm5vZGVpZCA9IG5vZGVpZAorCisgICAg
ICAgICM6IGEgKGZpbGVzeXN0ZW1wYXRoLCBsaW5lbm8sIGRvbWFpbmluZm8pIHR1cGxlIGluZGlj
YXRpbmcgdGhlCisgICAgICAgICM6IGFjdHVhbCBsb2NhdGlvbiBvZiBhIHRlc3QgaXRlbSAtIGl0
IG1pZ2h0IGJlIGRpZmZlcmVudCBmcm9tIHRoZQorICAgICAgICAjOiBjb2xsZWN0ZWQgb25lIGUu
Zy4gaWYgYSBtZXRob2QgaXMgaW5oZXJpdGVkIGZyb20gYSBkaWZmZXJlbnQgbW9kdWxlLgorICAg
ICAgICBzZWxmLmxvY2F0aW9uID0gbG9jYXRpb24KKworICAgICAgICAjOiBhIG5hbWUgLT4gdmFs
dWUgZGljdGlvbmFyeSBjb250YWluaW5nIGFsbCBrZXl3b3JkcyBhbmQKKyAgICAgICAgIzogbWFy
a2VycyBhc3NvY2lhdGVkIHdpdGggYSB0ZXN0IGludm9jYXRpb24uCisgICAgICAgIHNlbGYua2V5
d29yZHMgPSBrZXl3b3JkcworCisgICAgICAgICM6IHRlc3Qgb3V0Y29tZSwgYWx3YXlzIG9uZSBv
ZiAicGFzc2VkIiwgImZhaWxlZCIsICJza2lwcGVkIi4KKyAgICAgICAgc2VsZi5vdXRjb21lID0g
b3V0Y29tZQorCisgICAgICAgICM6IE5vbmUgb3IgYSBmYWlsdXJlIHJlcHJlc2VudGF0aW9uLgor
ICAgICAgICBzZWxmLmxvbmdyZXByID0gbG9uZ3JlcHIKKworICAgICAgICAjOiBvbmUgb2YgJ3Nl
dHVwJywgJ2NhbGwnLCAndGVhcmRvd24nIHRvIGluZGljYXRlIHJ1bnRlc3QgcGhhc2UuCisgICAg
ICAgIHNlbGYud2hlbiA9IHdoZW4KKworICAgICAgICAjOiBsaXN0IG9mIChzZWNuYW1lLCBkYXRh
KSBleHRyYSBpbmZvcm1hdGlvbiB3aGljaCBuZWVkcyB0bworICAgICAgICAjOiBtYXJzaGFsbGFi
bGUKKyAgICAgICAgc2VsZi5zZWN0aW9ucyA9IGxpc3Qoc2VjdGlvbnMpCisKKyAgICAgICAgIzog
dGltZSBpdCB0b29rIHRvIHJ1biBqdXN0IHRoZSB0ZXN0CisgICAgICAgIHNlbGYuZHVyYXRpb24g
PSBkdXJhdGlvbgorCisgICAgICAgIHNlbGYuX19kaWN0X18udXBkYXRlKGV4dHJhKQorCisgICAg
ZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIjxUZXN0UmVwb3J0ICVyIHdoZW49
JXIgb3V0Y29tZT0lcj4iICUgKAorICAgICAgICAgICAgc2VsZi5ub2RlaWQsIHNlbGYud2hlbiwg
c2VsZi5vdXRjb21lKQorCitjbGFzcyBUZWFyZG93bkVycm9yUmVwb3J0KEJhc2VSZXBvcnQpOgor
ICAgIG91dGNvbWUgPSAiZmFpbGVkIgorICAgIHdoZW4gPSAidGVhcmRvd24iCisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIGxvbmdyZXByLCAqKmV4dHJhKToKKyAgICAgICAgc2VsZi5sb25ncmVwciA9
IGxvbmdyZXByCisgICAgICAgIHNlbGYuc2VjdGlvbnMgPSBbXQorICAgICAgICBzZWxmLl9fZGlj
dF9fLnVwZGF0ZShleHRyYSkKKworZGVmIHB5dGVzdF9tYWtlX2NvbGxlY3RfcmVwb3J0KGNvbGxl
Y3Rvcik6CisgICAgY2FsbCA9IENhbGxJbmZvKGNvbGxlY3Rvci5fbWVtb2NvbGxlY3QsICJtZW1v
Y29sbGVjdCIpCisgICAgbG9uZ3JlcHIgPSBOb25lCisgICAgaWYgbm90IGNhbGwuZXhjaW5mbzoK
KyAgICAgICAgb3V0Y29tZSA9ICJwYXNzZWQiCisgICAgZWxzZToKKyAgICAgICAgZnJvbSBfcHl0
ZXN0IGltcG9ydCBub3NlCisgICAgICAgIHNraXBfZXhjZXB0aW9ucyA9IChTa2lwcGVkLCkgKyBu
b3NlLmdldF9za2lwX2V4Y2VwdGlvbnMoKQorICAgICAgICBpZiBjYWxsLmV4Y2luZm8uZXJyaXNp
bnN0YW5jZShza2lwX2V4Y2VwdGlvbnMpOgorICAgICAgICAgICAgb3V0Y29tZSA9ICJza2lwcGVk
IgorICAgICAgICAgICAgciA9IGNvbGxlY3Rvci5fcmVwcl9mYWlsdXJlX3B5KGNhbGwuZXhjaW5m
bywgImxpbmUiKS5yZXByY3Jhc2gKKyAgICAgICAgICAgIGxvbmdyZXByID0gKHN0cihyLnBhdGgp
LCByLmxpbmVubywgci5tZXNzYWdlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3V0Y29t
ZSA9ICJmYWlsZWQiCisgICAgICAgICAgICBlcnJvcmluZm8gPSBjb2xsZWN0b3IucmVwcl9mYWls
dXJlKGNhbGwuZXhjaW5mbykKKyAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKGVycm9yaW5mbywg
InRvdGVybWluYWwiKToKKyAgICAgICAgICAgICAgICBlcnJvcmluZm8gPSBDb2xsZWN0RXJyb3JS
ZXByKGVycm9yaW5mbykKKyAgICAgICAgICAgIGxvbmdyZXByID0gZXJyb3JpbmZvCisgICAgcmVw
ID0gQ29sbGVjdFJlcG9ydChjb2xsZWN0b3Iubm9kZWlkLCBvdXRjb21lLCBsb25ncmVwciwKKyAg
ICAgICAgZ2V0YXR0cihjYWxsLCAncmVzdWx0JywgTm9uZSkpCisgICAgcmVwLmNhbGwgPSBjYWxs
ICAjIHNlZSBjb2xsZWN0X29uZV9ub2RlCisgICAgcmV0dXJuIHJlcAorCisKK2NsYXNzIENvbGxl
Y3RSZXBvcnQoQmFzZVJlcG9ydCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5vZGVpZCwgb3V0
Y29tZSwgbG9uZ3JlcHIsIHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgc2VjdGlvbnM9KCksICoq
ZXh0cmEpOgorICAgICAgICBzZWxmLm5vZGVpZCA9IG5vZGVpZAorICAgICAgICBzZWxmLm91dGNv
bWUgPSBvdXRjb21lCisgICAgICAgIHNlbGYubG9uZ3JlcHIgPSBsb25ncmVwcgorICAgICAgICBz
ZWxmLnJlc3VsdCA9IHJlc3VsdCBvciBbXQorICAgICAgICBzZWxmLnNlY3Rpb25zID0gbGlzdChz
ZWN0aW9ucykKKyAgICAgICAgc2VsZi5fX2RpY3RfXy51cGRhdGUoZXh0cmEpCisKKyAgICBAcHJv
cGVydHkKKyAgICBkZWYgbG9jYXRpb24oc2VsZik6CisgICAgICAgIHJldHVybiAoc2VsZi5mc3Bh
dGgsIE5vbmUsIHNlbGYuZnNwYXRoKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAg
ICByZXR1cm4gIjxDb2xsZWN0UmVwb3J0ICVyIGxlbnJlc3VsdD0lcyBvdXRjb21lPSVyPiIgJSAo
CisgICAgICAgICAgICAgICAgc2VsZi5ub2RlaWQsIGxlbihzZWxmLnJlc3VsdCksIHNlbGYub3V0
Y29tZSkKKworY2xhc3MgQ29sbGVjdEVycm9yUmVwcihUZXJtaW5hbFJlcHIpOgorICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBtc2cpOgorICAgICAgICBzZWxmLmxvbmdyZXByID0gbXNnCisgICAgZGVm
IHRvdGVybWluYWwoc2VsZiwgb3V0KToKKyAgICAgICAgb3V0LmxpbmUoc2VsZi5sb25ncmVwciwg
cmVkPVRydWUpCisKK2NsYXNzIFNldHVwU3RhdGUob2JqZWN0KToKKyAgICAiIiIgc2hhcmVkIHN0
YXRlIGZvciBzZXR0aW5nIHVwL3RlYXJpbmcgZG93biB0ZXN0IGl0ZW1zIG9yIGNvbGxlY3RvcnMu
ICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5zdGFjayA9IFtdCisg
ICAgICAgIHNlbGYuX2ZpbmFsaXplcnMgPSB7fQorCisgICAgZGVmIGFkZGZpbmFsaXplcihzZWxm
LCBmaW5hbGl6ZXIsIGNvbGl0ZW0pOgorICAgICAgICAiIiIgYXR0YWNoIGEgZmluYWxpemVyIHRv
IHRoZSBnaXZlbiBjb2xpdGVtLgorICAgICAgICBpZiBjb2xpdGVtIGlzIE5vbmUsIHRoaXMgd2ls
bCBhZGQgYSBmaW5hbGl6ZXIgdGhhdAorICAgICAgICBpcyBjYWxsZWQgYXQgdGhlIGVuZCBvZiB0
ZWFyZG93bl9hbGwoKS4KKyAgICAgICAgIiIiCisgICAgICAgIGFzc2VydCBjb2xpdGVtIGFuZCBu
b3QgaXNpbnN0YW5jZShjb2xpdGVtLCB0dXBsZSkKKyAgICAgICAgYXNzZXJ0IHB5LmJ1aWx0aW4u
Y2FsbGFibGUoZmluYWxpemVyKQorICAgICAgICAjYXNzZXJ0IGNvbGl0ZW0gaW4gc2VsZi5zdGFj
ayAgIyBzb21lIHVuaXQgdGVzdHMgZG9uJ3Qgc2V0dXAgc3RhY2sgOi8KKyAgICAgICAgc2VsZi5f
ZmluYWxpemVycy5zZXRkZWZhdWx0KGNvbGl0ZW0sIFtdKS5hcHBlbmQoZmluYWxpemVyKQorCisg
ICAgZGVmIF9wb3BfYW5kX3RlYXJkb3duKHNlbGYpOgorICAgICAgICBjb2xpdGVtID0gc2VsZi5z
dGFjay5wb3AoKQorICAgICAgICBzZWxmLl90ZWFyZG93bl93aXRoX2ZpbmFsaXphdGlvbihjb2xp
dGVtKQorCisgICAgZGVmIF9jYWxsZmluYWxpemVycyhzZWxmLCBjb2xpdGVtKToKKyAgICAgICAg
ZmluYWxpemVycyA9IHNlbGYuX2ZpbmFsaXplcnMucG9wKGNvbGl0ZW0sIE5vbmUpCisgICAgICAg
IGV4YyA9IE5vbmUKKyAgICAgICAgd2hpbGUgZmluYWxpemVyczoKKyAgICAgICAgICAgIGZpbiA9
IGZpbmFsaXplcnMucG9wKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmaW4o
KQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICAjIFhYWCBP
bmx5IGZpcnN0IGV4Y2VwdGlvbiB3aWxsIGJlIHNlZW4gYnkgdXNlciwKKyAgICAgICAgICAgICAg
ICAjICAgICBpZGVhbGx5IGFsbCBzaG91bGQgYmUgcmVwb3J0ZWQuCisgICAgICAgICAgICAgICAg
aWYgZXhjIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGV4YyA9IHN5cy5leGNfaW5mbygp
CisgICAgICAgIGlmIGV4YzoKKyAgICAgICAgICAgIHB5LmJ1aWx0aW4uX3JlcmFpc2UoKmV4YykK
KworICAgIGRlZiBfdGVhcmRvd25fd2l0aF9maW5hbGl6YXRpb24oc2VsZiwgY29saXRlbSk6Cisg
ICAgICAgIHNlbGYuX2NhbGxmaW5hbGl6ZXJzKGNvbGl0ZW0pCisgICAgICAgIGlmIGhhc2F0dHIo
Y29saXRlbSwgInRlYXJkb3duIik6CisgICAgICAgICAgICBjb2xpdGVtLnRlYXJkb3duKCkKKyAg
ICAgICAgZm9yIGNvbGl0ZW0gaW4gc2VsZi5fZmluYWxpemVyczoKKyAgICAgICAgICAgIGFzc2Vy
dCBjb2xpdGVtIGlzIE5vbmUgb3IgY29saXRlbSBpbiBzZWxmLnN0YWNrIFwKKyAgICAgICAgICAg
ICBvciBpc2luc3RhbmNlKGNvbGl0ZW0sIHR1cGxlKQorCisgICAgZGVmIHRlYXJkb3duX2FsbChz
ZWxmKToKKyAgICAgICAgd2hpbGUgc2VsZi5zdGFjazoKKyAgICAgICAgICAgIHNlbGYuX3BvcF9h
bmRfdGVhcmRvd24oKQorICAgICAgICBmb3Iga2V5IGluIGxpc3Qoc2VsZi5fZmluYWxpemVycyk6
CisgICAgICAgICAgICBzZWxmLl90ZWFyZG93bl93aXRoX2ZpbmFsaXphdGlvbihrZXkpCisgICAg
ICAgIGFzc2VydCBub3Qgc2VsZi5fZmluYWxpemVycworCisgICAgZGVmIHRlYXJkb3duX2V4YWN0
KHNlbGYsIGl0ZW0sIG5leHRpdGVtKToKKyAgICAgICAgbmVlZGVkX2NvbGxlY3RvcnMgPSBuZXh0
aXRlbSBhbmQgbmV4dGl0ZW0ubGlzdGNoYWluKCkgb3IgW10KKyAgICAgICAgc2VsZi5fdGVhcmRv
d25fdG93YXJkcyhuZWVkZWRfY29sbGVjdG9ycykKKworICAgIGRlZiBfdGVhcmRvd25fdG93YXJk
cyhzZWxmLCBuZWVkZWRfY29sbGVjdG9ycyk6CisgICAgICAgIHdoaWxlIHNlbGYuc3RhY2s6Cisg
ICAgICAgICAgICBpZiBzZWxmLnN0YWNrID09IG5lZWRlZF9jb2xsZWN0b3JzWzpsZW4oc2VsZi5z
dGFjayldOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBzZWxmLl9wb3BfYW5k
X3RlYXJkb3duKCkKKworICAgIGRlZiBwcmVwYXJlKHNlbGYsIGNvbGl0ZW0pOgorICAgICAgICAi
IiIgc2V0dXAgb2JqZWN0cyBhbG9uZyB0aGUgY29sbGVjdG9yIGNoYWluIHRvIHRoZSB0ZXN0LW1l
dGhvZAorICAgICAgICAgICAgYW5kIHRlYXJkb3duIHByZXZpb3VzbHkgc2V0dXAgb2JqZWN0cy4i
IiIKKyAgICAgICAgbmVlZGVkX2NvbGxlY3RvcnMgPSBjb2xpdGVtLmxpc3RjaGFpbigpCisgICAg
ICAgIHNlbGYuX3RlYXJkb3duX3Rvd2FyZHMobmVlZGVkX2NvbGxlY3RvcnMpCisKKyAgICAgICAg
IyBjaGVjayBpZiB0aGUgbGFzdCBjb2xsZWN0aW9uIG5vZGUgaGFzIHJhaXNlZCBhbiBlcnJvcgor
ICAgICAgICBmb3IgY29sIGluIHNlbGYuc3RhY2s6CisgICAgICAgICAgICBpZiBoYXNhdHRyKGNv
bCwgJ19wcmVwYXJlX2V4YycpOgorICAgICAgICAgICAgICAgIHB5LmJ1aWx0aW4uX3JlcmFpc2Uo
KmNvbC5fcHJlcGFyZV9leGMpCisgICAgICAgIGZvciBjb2wgaW4gbmVlZGVkX2NvbGxlY3RvcnNb
bGVuKHNlbGYuc3RhY2spOl06CisgICAgICAgICAgICBzZWxmLnN0YWNrLmFwcGVuZChjb2wpCisg
ICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgY29sLnNldHVwKCkKKyAgICAgICAgICAg
IGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgY29sLl9wcmVwYXJlX2V4YyA9IHN5
cy5leGNfaW5mbygpCisgICAgICAgICAgICAgICAgcmFpc2UKKworZGVmIGNvbGxlY3Rfb25lX25v
ZGUoY29sbGVjdG9yKToKKyAgICBpaG9vayA9IGNvbGxlY3Rvci5paG9vaworICAgIGlob29rLnB5
dGVzdF9jb2xsZWN0c3RhcnQoY29sbGVjdG9yPWNvbGxlY3RvcikKKyAgICByZXAgPSBpaG9vay5w
eXRlc3RfbWFrZV9jb2xsZWN0X3JlcG9ydChjb2xsZWN0b3I9Y29sbGVjdG9yKQorICAgIGNhbGwg
PSByZXAuX19kaWN0X18ucG9wKCJjYWxsIiwgTm9uZSkKKyAgICBpZiBjYWxsIGFuZCBjaGVja19p
bnRlcmFjdGl2ZV9leGNlcHRpb24oY2FsbCwgcmVwKToKKyAgICAgICAgaWhvb2sucHl0ZXN0X2V4
Y2VwdGlvbl9pbnRlcmFjdChub2RlPWNvbGxlY3RvciwgY2FsbD1jYWxsLCByZXBvcnQ9cmVwKQor
ICAgIHJldHVybiByZXAKKworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVGVzdCBPdXRjb21lRXhjZXB0aW9ucyBhbmQg
aGVscGVycyBmb3IgY3JlYXRpbmcgdGhlbS4KKworCitjbGFzcyBPdXRjb21lRXhjZXB0aW9uKEV4
Y2VwdGlvbik6CisgICAgIiIiIE91dGNvbWVFeGNlcHRpb24gYW5kIGl0cyBzdWJjbGFzcyBpbnN0
YW5jZXMgaW5kaWNhdGUgYW5kCisgICAgICAgIGNvbnRhaW4gaW5mbyBhYm91dCB0ZXN0IGFuZCBj
b2xsZWN0aW9uIG91dGNvbWVzLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtc2c9
Tm9uZSwgcHl0cmFjZT1UcnVlKToKKyAgICAgICAgRXhjZXB0aW9uLl9faW5pdF9fKHNlbGYsIG1z
ZykKKyAgICAgICAgc2VsZi5tc2cgPSBtc2cKKyAgICAgICAgc2VsZi5weXRyYWNlID0gcHl0cmFj
ZQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICBpZiBzZWxmLm1zZzoKKyAgICAg
ICAgICAgIHZhbCA9IHNlbGYubXNnCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbCwgYnl0
ZXMpOgorICAgICAgICAgICAgICAgIHZhbCA9IHB5Ll9idWlsdGluLl90b3RleHQodmFsLCBlcnJv
cnM9J3JlcGxhY2UnKQorICAgICAgICAgICAgcmV0dXJuIHZhbAorICAgICAgICByZXR1cm4gIjwl
cyBpbnN0YW5jZT4iICUoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sKQorICAgIF9fc3RyX18gPSBf
X3JlcHJfXworCitjbGFzcyBTa2lwcGVkKE91dGNvbWVFeGNlcHRpb24pOgorICAgICMgWFhYIGhh
Y2tpc2g6IG9uIDNrIHdlIGZha2UgdG8gbGl2ZSBpbiB0aGUgYnVpbHRpbnMKKyAgICAjIGluIG9y
ZGVyIHRvIGhhdmUgU2tpcHBlZCBleGNlcHRpb24gcHJpbnRpbmcgc2hvcnRlci9uaWNlcgorICAg
IF9fbW9kdWxlX18gPSAnYnVpbHRpbnMnCisKK2NsYXNzIEZhaWxlZChPdXRjb21lRXhjZXB0aW9u
KToKKyAgICAiIiIgcmFpc2VkIGZyb20gYW4gZXhwbGljaXQgY2FsbCB0byBweXRlc3QuZmFpbCgp
ICIiIgorICAgIF9fbW9kdWxlX18gPSAnYnVpbHRpbnMnCisKK2NsYXNzIEV4aXQoS2V5Ym9hcmRJ
bnRlcnJ1cHQpOgorICAgICIiIiByYWlzZWQgZm9yIGltbWVkaWF0ZSBwcm9ncmFtIGV4aXRzIChu
byB0cmFjZWJhY2tzL3N1bW1hcmllcykiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbXNnPSJ1
bmtub3duIHJlYXNvbiIpOgorICAgICAgICBzZWxmLm1zZyA9IG1zZworICAgICAgICBLZXlib2Fy
ZEludGVycnVwdC5fX2luaXRfXyhzZWxmLCBtc2cpCisKKyMgZXhwb3NlZCBoZWxwZXIgbWV0aG9k
cworCitkZWYgZXhpdChtc2cpOgorICAgICIiIiBleGl0IHRlc3RpbmcgcHJvY2VzcyBhcyBpZiBL
ZXlib2FyZEludGVycnVwdCB3YXMgdHJpZ2dlcmVkLiAiIiIKKyAgICBfX3RyYWNlYmFja2hpZGVf
XyA9IFRydWUKKyAgICByYWlzZSBFeGl0KG1zZykKKworZXhpdC5FeGNlcHRpb24gPSBFeGl0CisK
K2RlZiBza2lwKG1zZz0iIik6CisgICAgIiIiIHNraXAgYW4gZXhlY3V0aW5nIHRlc3Qgd2l0aCB0
aGUgZ2l2ZW4gbWVzc2FnZS4gIE5vdGU6IGl0J3MgdXN1YWxseQorICAgIGJldHRlciB0byB1c2Ug
dGhlIHB5dGVzdC5tYXJrLnNraXBpZiBtYXJrZXIgdG8gZGVjbGFyZSBhIHRlc3QgdG8gYmUKKyAg
ICBza2lwcGVkIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucyBsaWtlIG1pc21hdGNoaW5nIHBsYXRm
b3JtcyBvcgorICAgIGRlcGVuZGVuY2llcy4gIFNlZSB0aGUgcHl0ZXN0X3NraXBwaW5nIHBsdWdp
biBmb3IgZGV0YWlscy4KKyAgICAiIiIKKyAgICBfX3RyYWNlYmFja2hpZGVfXyA9IFRydWUKKyAg
ICByYWlzZSBTa2lwcGVkKG1zZz1tc2cpCitza2lwLkV4Y2VwdGlvbiA9IFNraXBwZWQKKworZGVm
IGZhaWwobXNnPSIiLCBweXRyYWNlPVRydWUpOgorICAgICIiIiBleHBsaWNpdGx5IGZhaWwgYW4g
Y3VycmVudGx5LWV4ZWN1dGluZyB0ZXN0IHdpdGggdGhlIGdpdmVuIE1lc3NhZ2UuCisKKyAgICA6
YXJnIHB5dHJhY2U6IGlmIGZhbHNlIHRoZSBtc2cgcmVwcmVzZW50cyB0aGUgZnVsbCBmYWlsdXJl
IGluZm9ybWF0aW9uCisgICAgICAgICAgICAgICAgICBhbmQgbm8gcHl0aG9uIHRyYWNlYmFjayB3
aWxsIGJlIHJlcG9ydGVkLgorICAgICIiIgorICAgIF9fdHJhY2ViYWNraGlkZV9fID0gVHJ1ZQor
ICAgIHJhaXNlIEZhaWxlZChtc2c9bXNnLCBweXRyYWNlPXB5dHJhY2UpCitmYWlsLkV4Y2VwdGlv
biA9IEZhaWxlZAorCisKK2RlZiBpbXBvcnRvcnNraXAobW9kbmFtZSwgbWludmVyc2lvbj1Ob25l
KToKKyAgICAiIiIgcmV0dXJuIGltcG9ydGVkIG1vZHVsZSBpZiBpdCBoYXMgYXQgbGVhc3QgIm1p
bnZlcnNpb24iIGFzIGl0cworICAgIF9fdmVyc2lvbl9fIGF0dHJpYnV0ZS4gIElmIG5vIG1pbnZl
cnNpb24gaXMgc3BlY2lmaWVkIHRoZSBhIHNraXAKKyAgICBpcyBvbmx5IHRyaWdnZXJlZCBpZiB0
aGUgbW9kdWxlIGNhbiBub3QgYmUgaW1wb3J0ZWQuCisgICAgIiIiCisgICAgX190cmFjZWJhY2to
aWRlX18gPSBUcnVlCisgICAgY29tcGlsZShtb2RuYW1lLCAnJywgJ2V2YWwnKSAjIHRvIGNhdGNo
IHN5bnRheGVycm9ycworICAgIHRyeToKKyAgICAgICAgX19pbXBvcnRfXyhtb2RuYW1lKQorICAg
IGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgc2tpcCgiY291bGQgbm90IGltcG9ydCAlciIg
JShtb2RuYW1lLCkpCisgICAgbW9kID0gc3lzLm1vZHVsZXNbbW9kbmFtZV0KKyAgICBpZiBtaW52
ZXJzaW9uIGlzIE5vbmU6CisgICAgICAgIHJldHVybiBtb2QKKyAgICB2ZXJhdHRyID0gZ2V0YXR0
cihtb2QsICdfX3ZlcnNpb25fXycsIE5vbmUpCisgICAgaWYgbWludmVyc2lvbiBpcyBub3QgTm9u
ZToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZnJvbSBwa2dfcmVzb3VyY2VzIGltcG9ydCBw
YXJzZV92ZXJzaW9uIGFzIHB2CisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAg
ICAgIHNraXAoIndlIGhhdmUgYSByZXF1aXJlZCB2ZXJzaW9uIGZvciAlciBidXQgY2FuIG5vdCBp
bXBvcnQgIgorICAgICAgICAgICAgICAgICAibm8gcGtnX3Jlc291cmNlcyB0byBwYXJzZSB2ZXJz
aW9uIHN0cmluZ3MuIiAlKG1vZG5hbWUsKSkKKyAgICAgICAgaWYgdmVyYXR0ciBpcyBOb25lIG9y
IHB2KHZlcmF0dHIpIDwgcHYobWludmVyc2lvbik6CisgICAgICAgICAgICBza2lwKCJtb2R1bGUg
JXIgaGFzIF9fdmVyc2lvbl9fICVyLCByZXF1aXJlZCBpczogJXIiICUoCisgICAgICAgICAgICAg
ICAgIG1vZG5hbWUsIHZlcmF0dHIsIG1pbnZlcnNpb24pKQorICAgIHJldHVybiBtb2QKKwpkaWZm
IC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0
L3NraXBwaW5nLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9f
cHl0ZXN0L3NraXBwaW5nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li42OTE1N2Y0ODVhMAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVk
L3czYy90b29scy9weXRlc3QvX3B5dGVzdC9za2lwcGluZy5weQpAQCAtMCwwICsxLDM1NCBAQAor
IiIiIHN1cHBvcnQgZm9yIHNraXAveGZhaWwgZnVuY3Rpb25zIGFuZCBtYXJrZXJzLiAiIiIKK2lt
cG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHRyYWNlYmFjaworCitpbXBvcnQgcHkKK2ltcG9y
dCBweXRlc3QKK2Zyb20gX3B5dGVzdC5tYXJrIGltcG9ydCBNYXJrSW5mbywgTWFya0RlY29yYXRv
cgorCisKK2RlZiBweXRlc3RfYWRkb3B0aW9uKHBhcnNlcik6CisgICAgZ3JvdXAgPSBwYXJzZXIu
Z2V0Z3JvdXAoImdlbmVyYWwiKQorICAgIGdyb3VwLmFkZG9wdGlvbignLS1ydW54ZmFpbCcsCisg
ICAgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9InJ1bnhmYWlsIiwgZGVmYXVsdD1G
YWxzZSwKKyAgICAgICAgICAgaGVscD0icnVuIHRlc3RzIGV2ZW4gaWYgdGhleSBhcmUgbWFya2Vk
IHhmYWlsIikKKworICAgIHBhcnNlci5hZGRpbmkoInhmYWlsX3N0cmljdCIsICJkZWZhdWx0IGZv
ciB0aGUgc3RyaWN0IHBhcmFtZXRlciBvZiB4ZmFpbCAiCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIm1hcmtlcnMgd2hlbiBub3QgZ2l2ZW4gZXhwbGljaXRseSAoZGVmYXVsdDog
IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGYWxzZSkiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdHlwZT0iYm9vbCIpCisKKworZGVmIHB5dGVzdF9jb25maWd1cmUo
Y29uZmlnKToKKyAgICBpZiBjb25maWcub3B0aW9uLnJ1bnhmYWlsOgorICAgICAgICBvbGQgPSBw
eXRlc3QueGZhaWwKKyAgICAgICAgY29uZmlnLl9jbGVhbnVwLmFwcGVuZChsYW1iZGE6IHNldGF0
dHIocHl0ZXN0LCAieGZhaWwiLCBvbGQpKQorICAgICAgICBkZWYgbm9wKCphcmdzLCAqKmt3YXJn
cyk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIG5vcC5FeGNlcHRpb24gPSBYRmFpbGVkCisg
ICAgICAgIHNldGF0dHIocHl0ZXN0LCAieGZhaWwiLCBub3ApCisKKyAgICBjb25maWcuYWRkaW5p
dmFsdWVfbGluZSgibWFya2VycyIsCisgICAgICAgICJza2lwaWYoY29uZGl0aW9uKTogc2tpcCB0
aGUgZ2l2ZW4gdGVzdCBmdW5jdGlvbiBpZiBldmFsKGNvbmRpdGlvbikgIgorICAgICAgICAicmVz
dWx0cyBpbiBhIFRydWUgdmFsdWUuICBFdmFsdWF0aW9uIGhhcHBlbnMgd2l0aGluIHRoZSAiCisg
ICAgICAgICJtb2R1bGUgZ2xvYmFsIGNvbnRleHQuIEV4YW1wbGU6IHNraXBpZignc3lzLnBsYXRm
b3JtID09IFwid2luMzJcIicpICIKKyAgICAgICAgInNraXBzIHRoZSB0ZXN0IGlmIHdlIGFyZSBv
biB0aGUgd2luMzIgcGxhdGZvcm0uIHNlZSAiCisgICAgICAgICJodHRwOi8vcHl0ZXN0Lm9yZy9s
YXRlc3Qvc2tpcHBpbmcuaHRtbCIKKyAgICApCisgICAgY29uZmlnLmFkZGluaXZhbHVlX2xpbmUo
Im1hcmtlcnMiLAorICAgICAgICAieGZhaWwoY29uZGl0aW9uLCByZWFzb249Tm9uZSwgcnVuPVRy
dWUsIHJhaXNlcz1Ob25lKTogbWFyayB0aGUgdGhlIHRlc3QgZnVuY3Rpb24gIgorICAgICAgICAi
YXMgYW4gZXhwZWN0ZWQgZmFpbHVyZSBpZiBldmFsKGNvbmRpdGlvbikgaGFzIGEgVHJ1ZSB2YWx1
ZS4gIgorICAgICAgICAiT3B0aW9uYWxseSBzcGVjaWZ5IGEgcmVhc29uIGZvciBiZXR0ZXIgcmVw
b3J0aW5nIGFuZCBydW49RmFsc2UgaWYgIgorICAgICAgICAieW91IGRvbid0IGV2ZW4gd2FudCB0
byBleGVjdXRlIHRoZSB0ZXN0IGZ1bmN0aW9uLiBJZiBvbmx5IHNwZWNpZmljICIKKyAgICAgICAg
ImV4Y2VwdGlvbihzKSBhcmUgZXhwZWN0ZWQsIHlvdSBjYW4gbGlzdCB0aGVtIGluIHJhaXNlcywg
YW5kIGlmIHRoZSB0ZXN0IGZhaWxzICIKKyAgICAgICAgImluIG90aGVyIHdheXMsIGl0IHdpbGwg
YmUgcmVwb3J0ZWQgYXMgYSB0cnVlIGZhaWx1cmUuICIKKyAgICAgICAgIlNlZSBodHRwOi8vcHl0
ZXN0Lm9yZy9sYXRlc3Qvc2tpcHBpbmcuaHRtbCIKKyAgICApCisKKworZGVmIHB5dGVzdF9uYW1l
c3BhY2UoKToKKyAgICByZXR1cm4gZGljdCh4ZmFpbD14ZmFpbCkKKworCitjbGFzcyBYRmFpbGVk
KHB5dGVzdC5mYWlsLkV4Y2VwdGlvbik6CisgICAgIiIiIHJhaXNlZCBmcm9tIGFuIGV4cGxpY2l0
IGNhbGwgdG8gcHl0ZXN0LnhmYWlsKCkgIiIiCisKKworZGVmIHhmYWlsKHJlYXNvbj0iIik6Cisg
ICAgIiIiIHhmYWlsIGFuIGV4ZWN1dGluZyB0ZXN0IG9yIHNldHVwIGZ1bmN0aW9ucyB3aXRoIHRo
ZSBnaXZlbiByZWFzb24uIiIiCisgICAgX190cmFjZWJhY2toaWRlX18gPSBUcnVlCisgICAgcmFp
c2UgWEZhaWxlZChyZWFzb24pCit4ZmFpbC5FeGNlcHRpb24gPSBYRmFpbGVkCisKKworY2xhc3Mg
TWFya0V2YWx1YXRvcjoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaXRlbSwgbmFtZSk6CisgICAg
ICAgIHNlbGYuaXRlbSA9IGl0ZW0KKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorCisgICAgQHBy
b3BlcnR5CisgICAgZGVmIGhvbGRlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuaXRlbS5r
ZXl3b3Jkcy5nZXQoc2VsZi5uYW1lKQorCisgICAgZGVmIF9fYm9vbF9fKHNlbGYpOgorICAgICAg
ICByZXR1cm4gYm9vbChzZWxmLmhvbGRlcikKKyAgICBfX25vbnplcm9fXyA9IF9fYm9vbF9fCisK
KyAgICBkZWYgd2FzdmFsaWQoc2VsZik6CisgICAgICAgIHJldHVybiBub3QgaGFzYXR0cihzZWxm
LCAnZXhjJykKKworICAgIGRlZiBpbnZhbGlkcmFpc2Uoc2VsZiwgZXhjKToKKyAgICAgICAgcmFp
c2VzID0gc2VsZi5nZXQoJ3JhaXNlcycpCisgICAgICAgIGlmIG5vdCByYWlzZXM6CisgICAgICAg
ICAgICByZXR1cm4KKyAgICAgICAgcmV0dXJuIG5vdCBpc2luc3RhbmNlKGV4YywgcmFpc2VzKQor
CisgICAgZGVmIGlzdHJ1ZShzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJu
IHNlbGYuX2lzdHJ1ZSgpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICBz
ZWxmLmV4YyA9IHN5cy5leGNfaW5mbygpCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYu
ZXhjWzFdLCBTeW50YXhFcnJvcik6CisgICAgICAgICAgICAgICAgbXNnID0gWyIgIiAqIChzZWxm
LmV4Y1sxXS5vZmZzZXQgKyA0KSArICJeIixdCisgICAgICAgICAgICAgICAgbXNnLmFwcGVuZCgi
U3ludGF4RXJyb3I6IGludmFsaWQgc3ludGF4IikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICAgICAgbXNnID0gdHJhY2ViYWNrLmZvcm1hdF9leGNlcHRpb25fb25seSgqc2VsZi5leGNb
OjJdKQorICAgICAgICAgICAgcHl0ZXN0LmZhaWwoIkVycm9yIGV2YWx1YXRpbmcgJXIgZXhwcmVz
c2lvblxuIgorICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAlc1xuIgorICAgICAgICAgICAg
ICAgICAgICAgICAgIiVzIgorICAgICAgICAgICAgICAgICAgICAgICAgJShzZWxmLm5hbWUsIHNl
bGYuZXhwciwgIlxuIi5qb2luKG1zZykpLAorICAgICAgICAgICAgICAgICAgICAgICAgcHl0cmFj
ZT1GYWxzZSkKKworICAgIGRlZiBfZ2V0Z2xvYmFscyhzZWxmKToKKyAgICAgICAgZCA9IHsnb3Mn
OiBvcywgJ3N5cyc6IHN5cywgJ2NvbmZpZyc6IHNlbGYuaXRlbS5jb25maWd9CisgICAgICAgIGZ1
bmMgPSBzZWxmLml0ZW0ub2JqCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGQudXBkYXRlKGZ1
bmMuX19nbG9iYWxzX18pCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAg
ICAgIGQudXBkYXRlKGZ1bmMuZnVuY19nbG9iYWxzKQorICAgICAgICByZXR1cm4gZAorCisgICAg
ZGVmIF9pc3RydWUoc2VsZik6CisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgJ3Jlc3VsdCcpOgor
ICAgICAgICAgICAgcmV0dXJuIHNlbGYucmVzdWx0CisgICAgICAgIGlmIHNlbGYuaG9sZGVyOgor
ICAgICAgICAgICAgZCA9IHNlbGYuX2dldGdsb2JhbHMoKQorICAgICAgICAgICAgaWYgc2VsZi5o
b2xkZXIuYXJnczoKKyAgICAgICAgICAgICAgICBzZWxmLnJlc3VsdCA9IEZhbHNlCisgICAgICAg
ICAgICAgICAgIyAiaG9sZGVyIiBtaWdodCBiZSBhIE1hcmtJbmZvIG9yIGEgTWFya0RlY29yYXRv
cjsgb25seQorICAgICAgICAgICAgICAgICMgTWFya0luZm8ga2VlcHMgdHJhY2sgb2YgYWxsIHBh
cmFtZXRlcnMgaXQgcmVjZWl2ZWQgaW4gYW4KKyAgICAgICAgICAgICAgICAjIF9hcmdsaXN0IGF0
dHJpYnV0ZQorICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIoc2VsZi5ob2xkZXIsICdfYXJnbGlz
dCcpOgorICAgICAgICAgICAgICAgICAgICBhcmdsaXN0ID0gc2VsZi5ob2xkZXIuX2FyZ2xpc3QK
KyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBhcmdsaXN0ID0gWyhz
ZWxmLmhvbGRlci5hcmdzLCBzZWxmLmhvbGRlci5rd2FyZ3MpXQorICAgICAgICAgICAgICAgIGZv
ciBhcmdzLCBrd2FyZ3MgaW4gYXJnbGlzdDoKKyAgICAgICAgICAgICAgICAgICAgZm9yIGV4cHIg
aW4gYXJnczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXhwciA9IGV4cHIKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXhwciwgcHkuYnVpbHRpbi5fYmFzZXN0
cmluZyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gY2FjaGVkX2V2YWwo
c2VsZi5pdGVtLmNvbmZpZywgZXhwciwgZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgInJlYXNvbiIgbm90IGluIGt3YXJnczoK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBYWFggYmV0dGVyIGJlIGNoZWNrZWQg
YXQgY29sbGVjdGlvbiB0aW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9
ICJ5b3UgbmVlZCB0byBzcGVjaWZ5IHJlYXNvbj1TVFJJTkcgIiBcCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJ3aGVuIHVzaW5nIGJvb2xlYW5zIGFzIGNvbmRpdGlvbnMu
IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBweXRlc3QuZmFpbChtc2cpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gYm9vbChleHByKQorICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgcmVzdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYu
cmVzdWx0ID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVhc29uID0g
a3dhcmdzLmdldCgncmVhc29uJywgTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLmV4cHIgPSBleHByCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYu
cmVzdWx0CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYucmVzdWx0ID0g
VHJ1ZQorICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLCAncmVzdWx0JywgRmFsc2UpCisKKyAg
ICBkZWYgZ2V0KHNlbGYsIGF0dHIsIGRlZmF1bHQ9Tm9uZSk6CisgICAgICAgIHJldHVybiBzZWxm
LmhvbGRlci5rd2FyZ3MuZ2V0KGF0dHIsIGRlZmF1bHQpCisKKyAgICBkZWYgZ2V0ZXhwbGFuYXRp
b24oc2VsZik6CisgICAgICAgIGV4cGwgPSBnZXRhdHRyKHNlbGYsICdyZWFzb24nLCBOb25lKSBv
ciBzZWxmLmdldCgncmVhc29uJywgTm9uZSkKKyAgICAgICAgaWYgbm90IGV4cGw6CisgICAgICAg
ICAgICBpZiBub3QgaGFzYXR0cihzZWxmLCAnZXhwcicpOgorICAgICAgICAgICAgICAgIHJldHVy
biAiIgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gImNvbmRpdGlv
bjogIiArIHN0cihzZWxmLmV4cHIpCisgICAgICAgIHJldHVybiBleHBsCisKKworQHB5dGVzdC5o
b29raW1wbCh0cnlmaXJzdD1UcnVlKQorZGVmIHB5dGVzdF9ydW50ZXN0X3NldHVwKGl0ZW0pOgor
ICAgICMgQ2hlY2sgaWYgc2tpcCBvciBza2lwaWYgYXJlIHNwZWNpZmllZCBhcyBweXRlc3QgbWFy
a3MKKworICAgIHNraXBpZl9pbmZvID0gaXRlbS5rZXl3b3Jkcy5nZXQoJ3NraXBpZicpCisgICAg
aWYgaXNpbnN0YW5jZShza2lwaWZfaW5mbywgKE1hcmtJbmZvLCBNYXJrRGVjb3JhdG9yKSk6Cisg
ICAgICAgIGV2YWxfc2tpcGlmID0gTWFya0V2YWx1YXRvcihpdGVtLCAnc2tpcGlmJykKKyAgICAg
ICAgaWYgZXZhbF9za2lwaWYuaXN0cnVlKCk6CisgICAgICAgICAgICBpdGVtLl9ldmFsc2tpcCA9
IGV2YWxfc2tpcGlmCisgICAgICAgICAgICBweXRlc3Quc2tpcChldmFsX3NraXBpZi5nZXRleHBs
YW5hdGlvbigpKQorCisgICAgc2tpcF9pbmZvID0gaXRlbS5rZXl3b3Jkcy5nZXQoJ3NraXAnKQor
ICAgIGlmIGlzaW5zdGFuY2Uoc2tpcF9pbmZvLCAoTWFya0luZm8sIE1hcmtEZWNvcmF0b3IpKToK
KyAgICAgICAgaXRlbS5fZXZhbHNraXAgPSBUcnVlCisgICAgICAgIGlmICdyZWFzb24nIGluIHNr
aXBfaW5mby5rd2FyZ3M6CisgICAgICAgICAgICBweXRlc3Quc2tpcChza2lwX2luZm8ua3dhcmdz
WydyZWFzb24nXSkKKyAgICAgICAgZWxpZiBza2lwX2luZm8uYXJnczoKKyAgICAgICAgICAgIHB5
dGVzdC5za2lwKHNraXBfaW5mby5hcmdzWzBdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
cHl0ZXN0LnNraXAoInVuY29uZGl0aW9uYWwgc2tpcCIpCisKKyAgICBpdGVtLl9ldmFseGZhaWwg
PSBNYXJrRXZhbHVhdG9yKGl0ZW0sICd4ZmFpbCcpCisgICAgY2hlY2tfeGZhaWxfbm9fcnVuKGl0
ZW0pCisKKworQHB5dGVzdC5tYXJrLmhvb2t3cmFwcGVyCitkZWYgcHl0ZXN0X3B5ZnVuY19jYWxs
KHB5ZnVuY2l0ZW0pOgorICAgIGNoZWNrX3hmYWlsX25vX3J1bihweWZ1bmNpdGVtKQorICAgIG91
dGNvbWUgPSB5aWVsZAorICAgIHBhc3NlZCA9IG91dGNvbWUuZXhjaW5mbyBpcyBOb25lCisgICAg
aWYgcGFzc2VkOgorICAgICAgICBjaGVja19zdHJpY3RfeGZhaWwocHlmdW5jaXRlbSkKKworCitk
ZWYgY2hlY2tfeGZhaWxfbm9fcnVuKGl0ZW0pOgorICAgICIiImNoZWNrIHhmYWlsKHJ1bj1GYWxz
ZSkiIiIKKyAgICBpZiBub3QgaXRlbS5jb25maWcub3B0aW9uLnJ1bnhmYWlsOgorICAgICAgICBl
dmFseGZhaWwgPSBpdGVtLl9ldmFseGZhaWwKKyAgICAgICAgaWYgZXZhbHhmYWlsLmlzdHJ1ZSgp
OgorICAgICAgICAgICAgaWYgbm90IGV2YWx4ZmFpbC5nZXQoJ3J1bicsIFRydWUpOgorICAgICAg
ICAgICAgICAgIHB5dGVzdC54ZmFpbCgiW05PVFJVTl0gIiArIGV2YWx4ZmFpbC5nZXRleHBsYW5h
dGlvbigpKQorCisKK2RlZiBjaGVja19zdHJpY3RfeGZhaWwocHlmdW5jaXRlbSk6CisgICAgIiIi
Y2hlY2sgeGZhaWwoc3RyaWN0PVRydWUpIGZvciB0aGUgZ2l2ZW4gUEFTU0lORyB0ZXN0IiIiCisg
ICAgZXZhbHhmYWlsID0gcHlmdW5jaXRlbS5fZXZhbHhmYWlsCisgICAgaWYgZXZhbHhmYWlsLmlz
dHJ1ZSgpOgorICAgICAgICBzdHJpY3RfZGVmYXVsdCA9IHB5ZnVuY2l0ZW0uY29uZmlnLmdldGlu
aSgneGZhaWxfc3RyaWN0JykKKyAgICAgICAgaXNfc3RyaWN0X3hmYWlsID0gZXZhbHhmYWlsLmdl
dCgnc3RyaWN0Jywgc3RyaWN0X2RlZmF1bHQpCisgICAgICAgIGlmIGlzX3N0cmljdF94ZmFpbDoK
KyAgICAgICAgICAgIGRlbCBweWZ1bmNpdGVtLl9ldmFseGZhaWwKKyAgICAgICAgICAgIGV4cGxh
bmF0aW9uID0gZXZhbHhmYWlsLmdldGV4cGxhbmF0aW9uKCkKKyAgICAgICAgICAgIHB5dGVzdC5m
YWlsKCdbWFBBU1Moc3RyaWN0KV0gJyArIGV4cGxhbmF0aW9uLCBweXRyYWNlPUZhbHNlKQorCisK
K0BweXRlc3QuaG9va2ltcGwoaG9va3dyYXBwZXI9VHJ1ZSkKK2RlZiBweXRlc3RfcnVudGVzdF9t
YWtlcmVwb3J0KGl0ZW0sIGNhbGwpOgorICAgIG91dGNvbWUgPSB5aWVsZAorICAgIHJlcCA9IG91
dGNvbWUuZ2V0X3Jlc3VsdCgpCisgICAgZXZhbHhmYWlsID0gZ2V0YXR0cihpdGVtLCAnX2V2YWx4
ZmFpbCcsIE5vbmUpCisgICAgZXZhbHNraXAgPSBnZXRhdHRyKGl0ZW0sICdfZXZhbHNraXAnLCBO
b25lKQorICAgICMgdW5pdHR0ZXN0IHNwZWNpYWwgY2FzZSwgc2VlIHNldHRpbmcgb2YgX3VuZXhw
ZWN0ZWRzdWNjZXNzCisgICAgaWYgaGFzYXR0cihpdGVtLCAnX3VuZXhwZWN0ZWRzdWNjZXNzJykg
YW5kIHJlcC53aGVuID09ICJjYWxsIjoKKyAgICAgICAgIyB3ZSBuZWVkIHRvIHRyYW5zbGF0ZSBp
bnRvIGhvdyBweXRlc3QgZW5jb2RlcyB4cGFzcworICAgICAgICByZXAud2FzeGZhaWwgPSAicmVh
c29uOiAiICsgcmVwcihpdGVtLl91bmV4cGVjdGVkc3VjY2VzcykKKyAgICAgICAgcmVwLm91dGNv
bWUgPSAiZmFpbGVkIgorICAgIGVsaWYgaXRlbS5jb25maWcub3B0aW9uLnJ1bnhmYWlsOgorICAg
ICAgICBwYXNzICAgIyBkb24ndCBpbnRlcmVmZXJlCisgICAgZWxpZiBjYWxsLmV4Y2luZm8gYW5k
IGNhbGwuZXhjaW5mby5lcnJpc2luc3RhbmNlKHB5dGVzdC54ZmFpbC5FeGNlcHRpb24pOgorICAg
ICAgICByZXAud2FzeGZhaWwgPSAicmVhc29uOiAiICsgY2FsbC5leGNpbmZvLnZhbHVlLm1zZwor
ICAgICAgICByZXAub3V0Y29tZSA9ICJza2lwcGVkIgorICAgIGVsaWYgZXZhbHhmYWlsIGFuZCBu
b3QgcmVwLnNraXBwZWQgYW5kIGV2YWx4ZmFpbC53YXN2YWxpZCgpIGFuZCBcCisgICAgICAgIGV2
YWx4ZmFpbC5pc3RydWUoKToKKyAgICAgICAgaWYgY2FsbC5leGNpbmZvOgorICAgICAgICAgICAg
aWYgZXZhbHhmYWlsLmludmFsaWRyYWlzZShjYWxsLmV4Y2luZm8udmFsdWUpOgorICAgICAgICAg
ICAgICAgIHJlcC5vdXRjb21lID0gImZhaWxlZCIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICAgICAgcmVwLm91dGNvbWUgPSAic2tpcHBlZCIKKyAgICAgICAgICAgICAgICByZXAud2Fz
eGZhaWwgPSBldmFseGZhaWwuZ2V0ZXhwbGFuYXRpb24oKQorICAgICAgICBlbGlmIGNhbGwud2hl
biA9PSAiY2FsbCI6CisgICAgICAgICAgICByZXAub3V0Y29tZSA9ICJmYWlsZWQiICAjIHhwYXNz
IG91dGNvbWUKKyAgICAgICAgICAgIHJlcC53YXN4ZmFpbCA9IGV2YWx4ZmFpbC5nZXRleHBsYW5h
dGlvbigpCisgICAgZWxpZiBldmFsc2tpcCBpcyBub3QgTm9uZSBhbmQgcmVwLnNraXBwZWQgYW5k
IHR5cGUocmVwLmxvbmdyZXByKSBpcyB0dXBsZToKKyAgICAgICAgIyBza2lwcGVkIGJ5IG1hcmsu
c2tpcGlmOyBjaGFuZ2UgdGhlIGxvY2F0aW9uIG9mIHRoZSBmYWlsdXJlCisgICAgICAgICMgdG8g
cG9pbnQgdG8gdGhlIGl0ZW0gZGVmaW5pdGlvbiwgb3RoZXJ3aXNlIGl0IHdpbGwgZGlzcGxheQor
ICAgICAgICAjIHRoZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgc2tpcCBleGNlcHRpb24gd2FzIHJh
aXNlZCB3aXRoaW4gcHl0ZXN0CisgICAgICAgIGZpbGVuYW1lLCBsaW5lLCByZWFzb24gPSByZXAu
bG9uZ3JlcHIKKyAgICAgICAgZmlsZW5hbWUsIGxpbmUgPSBpdGVtLmxvY2F0aW9uWzoyXQorICAg
ICAgICByZXAubG9uZ3JlcHIgPSBmaWxlbmFtZSwgbGluZSwgcmVhc29uCisKKyMgY2FsbGVkIGJ5
IHRlcm1pbmFscmVwb3J0ZXIgcHJvZ3Jlc3MgcmVwb3J0aW5nCitkZWYgcHl0ZXN0X3JlcG9ydF90
ZXN0c3RhdHVzKHJlcG9ydCk6CisgICAgaWYgaGFzYXR0cihyZXBvcnQsICJ3YXN4ZmFpbCIpOgor
ICAgICAgICBpZiByZXBvcnQuc2tpcHBlZDoKKyAgICAgICAgICAgIHJldHVybiAieGZhaWxlZCIs
ICJ4IiwgInhmYWlsIgorICAgICAgICBlbGlmIHJlcG9ydC5mYWlsZWQ6CisgICAgICAgICAgICBy
ZXR1cm4gInhwYXNzZWQiLCAiWCIsICgiWFBBU1MiLCB7J3llbGxvdyc6IFRydWV9KQorCisjIGNh
bGxlZCBieSB0aGUgdGVybWluYWxyZXBvcnRlciBpbnN0YW5jZS9wbHVnaW4KK2RlZiBweXRlc3Rf
dGVybWluYWxfc3VtbWFyeSh0ZXJtaW5hbHJlcG9ydGVyKToKKyAgICB0ciA9IHRlcm1pbmFscmVw
b3J0ZXIKKyAgICBpZiBub3QgdHIucmVwb3J0Y2hhcnM6CisgICAgICAgICNmb3IgbmFtZSBpbiAi
eGZhaWxlZCBza2lwcGVkIGZhaWxlZCB4cGFzc2VkIjoKKyAgICAgICAgIyAgICBpZiBub3QgdHIu
c3RhdHMuZ2V0KG5hbWUsIDApOgorICAgICAgICAjICAgICAgICB0ci53cml0ZV9saW5lKCJISU5U
OiB1c2UgJy1yJyBvcHRpb24gdG8gc2VlIGV4dHJhICIKKyAgICAgICAgIyAgICAgICAgICAgICAg
InN1bW1hcnkgaW5mbyBhYm91dCB0ZXN0cyIpCisgICAgICAgICMgICAgICAgIGJyZWFrCisgICAg
ICAgIHJldHVybgorCisgICAgbGluZXMgPSBbXQorICAgIGZvciBjaGFyIGluIHRyLnJlcG9ydGNo
YXJzOgorICAgICAgICBpZiBjaGFyID09ICJ4IjoKKyAgICAgICAgICAgIHNob3dfeGZhaWxlZCh0
ZXJtaW5hbHJlcG9ydGVyLCBsaW5lcykKKyAgICAgICAgZWxpZiBjaGFyID09ICJYIjoKKyAgICAg
ICAgICAgIHNob3dfeHBhc3NlZCh0ZXJtaW5hbHJlcG9ydGVyLCBsaW5lcykKKyAgICAgICAgZWxp
ZiBjaGFyIGluICJmRiI6CisgICAgICAgICAgICBzaG93X3NpbXBsZSh0ZXJtaW5hbHJlcG9ydGVy
LCBsaW5lcywgJ2ZhaWxlZCcsICJGQUlMICVzIikKKyAgICAgICAgZWxpZiBjaGFyIGluICJzUyI6
CisgICAgICAgICAgICBzaG93X3NraXBwZWQodGVybWluYWxyZXBvcnRlciwgbGluZXMpCisgICAg
ICAgIGVsaWYgY2hhciA9PSAiRSI6CisgICAgICAgICAgICBzaG93X3NpbXBsZSh0ZXJtaW5hbHJl
cG9ydGVyLCBsaW5lcywgJ2Vycm9yJywgIkVSUk9SICVzIikKKyAgICAgICAgZWxpZiBjaGFyID09
ICdwJzoKKyAgICAgICAgICAgIHNob3dfc2ltcGxlKHRlcm1pbmFscmVwb3J0ZXIsIGxpbmVzLCAn
cGFzc2VkJywgIlBBU1NFRCAlcyIpCisKKyAgICBpZiBsaW5lczoKKyAgICAgICAgdHIuX3R3LnNl
cCgiPSIsICJzaG9ydCB0ZXN0IHN1bW1hcnkgaW5mbyIpCisgICAgICAgIGZvciBsaW5lIGluIGxp
bmVzOgorICAgICAgICAgICAgdHIuX3R3LmxpbmUobGluZSkKKworZGVmIHNob3dfc2ltcGxlKHRl
cm1pbmFscmVwb3J0ZXIsIGxpbmVzLCBzdGF0LCBmb3JtYXQpOgorICAgIGZhaWxlZCA9IHRlcm1p
bmFscmVwb3J0ZXIuc3RhdHMuZ2V0KHN0YXQpCisgICAgaWYgZmFpbGVkOgorICAgICAgICBmb3Ig
cmVwIGluIGZhaWxlZDoKKyAgICAgICAgICAgIHBvcyA9IHRlcm1pbmFscmVwb3J0ZXIuY29uZmln
LmN3ZF9yZWxhdGl2ZV9ub2RlaWQocmVwLm5vZGVpZCkKKyAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZChmb3JtYXQgJShwb3MsKSkKKworZGVmIHNob3dfeGZhaWxlZCh0ZXJtaW5hbHJlcG9ydGVyLCBs
aW5lcyk6CisgICAgeGZhaWxlZCA9IHRlcm1pbmFscmVwb3J0ZXIuc3RhdHMuZ2V0KCJ4ZmFpbGVk
IikKKyAgICBpZiB4ZmFpbGVkOgorICAgICAgICBmb3IgcmVwIGluIHhmYWlsZWQ6CisgICAgICAg
ICAgICBwb3MgPSB0ZXJtaW5hbHJlcG9ydGVyLmNvbmZpZy5jd2RfcmVsYXRpdmVfbm9kZWlkKHJl
cC5ub2RlaWQpCisgICAgICAgICAgICByZWFzb24gPSByZXAud2FzeGZhaWwKKyAgICAgICAgICAg
IGxpbmVzLmFwcGVuZCgiWEZBSUwgJXMiICUgKHBvcywpKQorICAgICAgICAgICAgaWYgcmVhc29u
OgorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgiICAiICsgc3RyKHJlYXNvbikpCisKK2Rl
ZiBzaG93X3hwYXNzZWQodGVybWluYWxyZXBvcnRlciwgbGluZXMpOgorICAgIHhwYXNzZWQgPSB0
ZXJtaW5hbHJlcG9ydGVyLnN0YXRzLmdldCgieHBhc3NlZCIpCisgICAgaWYgeHBhc3NlZDoKKyAg
ICAgICAgZm9yIHJlcCBpbiB4cGFzc2VkOgorICAgICAgICAgICAgcG9zID0gdGVybWluYWxyZXBv
cnRlci5jb25maWcuY3dkX3JlbGF0aXZlX25vZGVpZChyZXAubm9kZWlkKQorICAgICAgICAgICAg
cmVhc29uID0gcmVwLndhc3hmYWlsCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoIlhQQVNTICVz
ICVzIiAlKHBvcywgcmVhc29uKSkKKworZGVmIGNhY2hlZF9ldmFsKGNvbmZpZywgZXhwciwgZCk6
CisgICAgaWYgbm90IGhhc2F0dHIoY29uZmlnLCAnX2V2YWxjYWNoZScpOgorICAgICAgICBjb25m
aWcuX2V2YWxjYWNoZSA9IHt9CisgICAgdHJ5OgorICAgICAgICByZXR1cm4gY29uZmlnLl9ldmFs
Y2FjaGVbZXhwcl0KKyAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgIGltcG9ydCBfcHl0ZXN0
Ll9jb2RlCisgICAgICAgIGV4cHJjb2RlID0gX3B5dGVzdC5fY29kZS5jb21waWxlKGV4cHIsIG1v
ZGU9ImV2YWwiKQorICAgICAgICBjb25maWcuX2V2YWxjYWNoZVtleHByXSA9IHggPSBldmFsKGV4
cHJjb2RlLCBkKQorICAgICAgICByZXR1cm4geAorCisKK2RlZiBmb2xkZWRfc2tpcHMoc2tpcHBl
ZCk6CisgICAgZCA9IHt9CisgICAgZm9yIGV2ZW50IGluIHNraXBwZWQ6CisgICAgICAgIGtleSA9
IGV2ZW50LmxvbmdyZXByCisgICAgICAgIGFzc2VydCBsZW4oa2V5KSA9PSAzLCAoZXZlbnQsIGtl
eSkKKyAgICAgICAgZC5zZXRkZWZhdWx0KGtleSwgW10pLmFwcGVuZChldmVudCkKKyAgICBsID0g
W10KKyAgICBmb3Iga2V5LCBldmVudHMgaW4gZC5pdGVtcygpOgorICAgICAgICBsLmFwcGVuZCgo
bGVuKGV2ZW50cyksKSArIGtleSkKKyAgICByZXR1cm4gbAorCitkZWYgc2hvd19za2lwcGVkKHRl
cm1pbmFscmVwb3J0ZXIsIGxpbmVzKToKKyAgICB0ciA9IHRlcm1pbmFscmVwb3J0ZXIKKyAgICBz
a2lwcGVkID0gdHIuc3RhdHMuZ2V0KCdza2lwcGVkJywgW10pCisgICAgaWYgc2tpcHBlZDoKKyAg
ICAgICAgI2lmIG5vdCB0ci5oYXNvcHQoJ3NraXBwZWQnKToKKyAgICAgICAgIyAgICB0ci53cml0
ZV9saW5lKAorICAgICAgICAjICAgICAgICAiJWQgc2tpcHBlZCB0ZXN0cywgc3BlY2lmeSAtcnMg
Zm9yIG1vcmUgaW5mbyIgJQorICAgICAgICAjICAgICAgICBsZW4oc2tpcHBlZCkpCisgICAgICAg
ICMgICAgcmV0dXJuCisgICAgICAgIGZza2lwcyA9IGZvbGRlZF9za2lwcyhza2lwcGVkKQorICAg
ICAgICBpZiBmc2tpcHM6CisgICAgICAgICAgICAjdHIud3JpdGVfc2VwKCJfIiwgInNraXBwZWQg
dGVzdCBzdW1tYXJ5IikKKyAgICAgICAgICAgIGZvciBudW0sIGZzcGF0aCwgbGluZW5vLCByZWFz
b24gaW4gZnNraXBzOgorICAgICAgICAgICAgICAgIGlmIHJlYXNvbi5zdGFydHN3aXRoKCJTa2lw
cGVkOiAiKToKKyAgICAgICAgICAgICAgICAgICAgcmVhc29uID0gcmVhc29uWzk6XQorICAgICAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZCgiU0tJUCBbJWRdICVzOiVkOiAlcyIgJQorICAgICAgICAg
ICAgICAgICAgICAobnVtLCBmc3BhdGgsIGxpbmVubywgcmVhc29uKSkKZGlmZiAtLWdpdCBhL1dl
YkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9zdGFuZGFsb25l
dGVtcGxhdGUucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19w
eXRlc3Qvc3RhbmRhbG9uZXRlbXBsYXRlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi40ODRkNWQxYjI1ZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3Rz
L2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9zdGFuZGFsb25ldGVtcGxhdGUucHkK
QEAgLTAsMCArMSw4OSBAQAorIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorCisjIEhpIFRoZXJlIQor
IyBZb3UgbWF5IGJlIHdvbmRlcmluZyB3aGF0IHRoaXMgZ2lhbnQgYmxvYiBvZiBiaW5hcnkgZGF0
YSBoZXJlIGlzLCB5b3UgbWlnaHQKKyMgZXZlbiBiZSB3b3JyaWVkIHRoYXQgd2UncmUgdXAgdG8g
c29tZXRoaW5nIG5lZmFyaW91cyAoZ29vZCBmb3IgeW91IGZvciBiZWluZworIyBwYXJhbm9pZCEp
LiBUaGlzIGlzIGEgYmFzZTY0IGVuY29kaW5nIG9mIGEgemlwIGZpbGUsIHRoaXMgemlwIGZpbGUg
Y29udGFpbnMKKyMgYSBmdWxseSBmdW5jdGlvbmFsIGJhc2ljIHB5dGVzdCBzY3JpcHQuCisjCisj
IFB5dGVzdCBpcyBhIHRoaW5nIHRoYXQgdGVzdHMgcGFja2FnZXMsIHB5dGVzdCBpdHNlbGYgaXMg
YSBwYWNrYWdlIHRoYXQgc29tZS0KKyMgb25lIG1pZ2h0IHdhbnQgdG8gaW5zdGFsbCwgZXNwZWNp
YWxseSBpZiB0aGV5J3JlIGxvb2tpbmcgdG8gcnVuIHRlc3RzIGluc2lkZQorIyBzb21lIHBhY2th
Z2UgdGhleSB3YW50IHRvIGluc3RhbGwuIFB5dGVzdCBoYXMgYSBsb3Qgb2YgY29kZSB0byBjb2xs
ZWN0IGFuZAorIyBleGVjdXRlIHRlc3RzLCBhbmQgb3RoZXIgc3VjaCBzb3J0IG9mICJ0cmliYWwg
a25vd2xlZGdlIiB0aGF0IGhhcyBiZWVuIGVuLQorIyBjb2RlZCBpbiBpdHMgY29kZSBiYXNlLiBC
ZWNhdXNlIG9mIHRoaXMgd2UgYmFzaWNhbGx5IGluY2x1ZGUgYSBiYXNpYyBjb3B5CisjIG9mIHB5
dGVzdCBpbnNpZGUgdGhpcyBibG9iLiBXZSBkbyB0aGlzICBiZWNhdXNlIGl0IGxldCdzIHlvdSBh
cyBhIG1haW50YWluZXIKKyMgb3IgYXBwbGljYXRpb24gZGV2ZWxvcGVyIHdobyB3YW50cyBwZW9w
bGUgd2hvIGRvbid0IGRlYWwgd2l0aCBweXRob24gbXVjaCB0bworIyBlYXNpbHkgcnVuIHRlc3Rz
IHdpdGhvdXQgaW5zdGFsbGluZyB0aGUgY29tcGxldGUgcHl0ZXN0IHBhY2thZ2UuCisjCisjIElm
IHlvdSdyZSB3b25kZXJpbmcgaG93IHRoaXMgaXMgY3JlYXRlZDogeW91IGNhbiBjcmVhdGUgaXQg
eW91cnNlbGYgaWYgeW91CisjIGhhdmUgYSBjb21wbGV0ZSBweXRlc3QgaW5zdGFsbGF0aW9uIGJ5
IHVzaW5nIHRoaXMgY29tbWFuZCBvbiB0aGUgY29tbWFuZC0KKyMgbGluZTogYGBweS50ZXN0IC0t
Z2Vuc2NyaXB0PXJ1bnRlc3RzLnB5YGAuCisKK3NvdXJjZXMgPSAiIiIKK0BTT1VSQ0VTQCIiIgor
CitpbXBvcnQgc3lzCitpbXBvcnQgYmFzZTY0CitpbXBvcnQgemxpYgorCitjbGFzcyBEaWN0SW1w
b3J0ZXIob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc291cmNlcyk6CisgICAgICAg
IHNlbGYuc291cmNlcyA9IHNvdXJjZXMKKworICAgIGRlZiBmaW5kX21vZHVsZShzZWxmLCBmdWxs
bmFtZSwgcGF0aD1Ob25lKToKKyAgICAgICAgaWYgZnVsbG5hbWUgPT0gImFyZ3BhcnNlIiBhbmQg
c3lzLnZlcnNpb25faW5mbyA+PSAoMiw3KToKKyAgICAgICAgICAgICMgd2Ugd2VyZSBnZW5lcmF0
ZWQgd2l0aCA8cHl0aG9uMi43ICh3aGljaCBwdWxscyBpbiBhcmdwYXJzZSkKKyAgICAgICAgICAg
ICMgYnV0IHdlIGFyZSBydW5uaW5nIG5vdyBvbiBhIHN0ZGxpYiB3aGljaCBoYXMgaXQsIHNvIHVz
ZSB0aGF0LgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgaWYgZnVsbG5hbWUgaW4g
c2VsZi5zb3VyY2VzOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgaWYgZnVsbG5h
bWUgKyAnLl9faW5pdF9fJyBpbiBzZWxmLnNvdXJjZXM6CisgICAgICAgICAgICByZXR1cm4gc2Vs
ZgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxu
YW1lKToKKyAgICAgICAgIyBwcmludCAibG9hZF9tb2R1bGU6IiwgIGZ1bGxuYW1lCisgICAgICAg
IGZyb20gdHlwZXMgaW1wb3J0IE1vZHVsZVR5cGUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAg
cyA9IHNlbGYuc291cmNlc1tmdWxsbmFtZV0KKyAgICAgICAgICAgIGlzX3BrZyA9IEZhbHNlCisg
ICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHMgPSBzZWxmLnNvdXJjZXNbZnVs
bG5hbWUgKyAnLl9faW5pdF9fJ10KKyAgICAgICAgICAgIGlzX3BrZyA9IFRydWUKKworICAgICAg
ICBjbyA9IGNvbXBpbGUocywgZnVsbG5hbWUsICdleGVjJykKKyAgICAgICAgbW9kdWxlID0gc3lz
Lm1vZHVsZXMuc2V0ZGVmYXVsdChmdWxsbmFtZSwgTW9kdWxlVHlwZShmdWxsbmFtZSkpCisgICAg
ICAgIG1vZHVsZS5fX2ZpbGVfXyA9ICIlcy8lcyIgJSAoX19maWxlX18sIGZ1bGxuYW1lKQorICAg
ICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IHNlbGYKKyAgICAgICAgaWYgaXNfcGtnOgorICAgICAg
ICAgICAgbW9kdWxlLl9fcGF0aF9fID0gW2Z1bGxuYW1lXQorCisgICAgICAgIGRvX2V4ZWMoY28s
IG1vZHVsZS5fX2RpY3RfXykgIyBub3FhCisgICAgICAgIHJldHVybiBzeXMubW9kdWxlc1tmdWxs
bmFtZV0KKworICAgIGRlZiBnZXRfc291cmNlKHNlbGYsIG5hbWUpOgorICAgICAgICByZXMgPSBz
ZWxmLnNvdXJjZXMuZ2V0KG5hbWUpCisgICAgICAgIGlmIHJlcyBpcyBOb25lOgorICAgICAgICAg
ICAgcmVzID0gc2VsZi5zb3VyY2VzLmdldChuYW1lICsgJy5fX2luaXRfXycpCisgICAgICAgIHJl
dHVybiByZXMKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0cnk6CisgICAgICAg
IGltcG9ydCBwa2dfcmVzb3VyY2VzICAjIG5vcWEKKyAgICBleGNlcHQgSW1wb3J0RXJyb3I6Cisg
ICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkVSUk9SOiBzZXR1cHRvb2xzIG5vdCBpbnN0YWxsZWRc
biIpCisgICAgICAgIHN5cy5leGl0KDIpCisgICAgaWYgc3lzLnZlcnNpb25faW5mbyA+PSAoMywg
MCk6CisgICAgICAgIGV4ZWMoImRlZiBkb19leGVjKGNvLCBsb2MpOiBleGVjKGNvLCBsb2MpXG4i
KQorICAgICAgICBpbXBvcnQgcGlja2xlCisgICAgICAgIHNvdXJjZXMgPSBzb3VyY2VzLmVuY29k
ZSgiYXNjaWkiKSAjIGVuc3VyZSBieXRlcworICAgICAgICBzb3VyY2VzID0gcGlja2xlLmxvYWRz
KHpsaWIuZGVjb21wcmVzcyhiYXNlNjQuZGVjb2RlYnl0ZXMoc291cmNlcykpKQorICAgIGVsc2U6
CisgICAgICAgIGltcG9ydCBjUGlja2xlIGFzIHBpY2tsZQorICAgICAgICBleGVjKCJkZWYgZG9f
ZXhlYyhjbywgbG9jKTogZXhlYyBjbyBpbiBsb2NcbiIpCisgICAgICAgIHNvdXJjZXMgPSBwaWNr
bGUubG9hZHMoemxpYi5kZWNvbXByZXNzKGJhc2U2NC5kZWNvZGVzdHJpbmcoc291cmNlcykpKQor
CisgICAgaW1wb3J0ZXIgPSBEaWN0SW1wb3J0ZXIoc291cmNlcykKKyAgICBzeXMubWV0YV9wYXRo
Lmluc2VydCgwLCBpbXBvcnRlcikKKyAgICBlbnRyeSA9ICJARU5UUllAIgorICAgIGRvX2V4ZWMo
ZW50cnksIGxvY2FscygpKSAjIG5vcWEKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9y
dGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC90ZXJtaW5hbC5weSBiL1dlYkRyaXZlclRlc3Rz
L2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC90ZXJtaW5hbC5weQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uODI1ZjU1M2VmMmMKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvdGVy
bWluYWwucHkKQEAgLTAsMCArMSw1OTMgQEAKKyIiIiB0ZXJtaW5hbCByZXBvcnRpbmcgb2YgdGhl
IGZ1bGwgdGVzdGluZyBwcm9jZXNzLgorCitUaGlzIGlzIGEgZ29vZCBzb3VyY2UgZm9yIGxvb2tp
bmcgYXQgdGhlIHZhcmlvdXMgcmVwb3J0aW5nIGhvb2tzLgorIiIiCitmcm9tIF9weXRlc3QubWFp
biBpbXBvcnQgRVhJVF9PSywgRVhJVF9URVNUU0ZBSUxFRCwgRVhJVF9JTlRFUlJVUFRFRCwgXAor
ICAgIEVYSVRfVVNBR0VFUlJPUiwgRVhJVF9OT1RFU1RTQ09MTEVDVEVECitpbXBvcnQgcHl0ZXN0
CitpbXBvcnQgcHkKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aW1lCitpbXBvcnQgcGxhdGZvcm0KKwor
aW1wb3J0IF9weXRlc3QuX3BsdWdneSBhcyBwbHVnZ3kKKworCitkZWYgcHl0ZXN0X2FkZG9wdGlv
bihwYXJzZXIpOgorICAgIGdyb3VwID0gcGFyc2VyLmdldGdyb3VwKCJ0ZXJtaW5hbCByZXBvcnRp
bmciLCAicmVwb3J0aW5nIiwgYWZ0ZXI9ImdlbmVyYWwiKQorICAgIGdyb3VwLl9hZGRvcHRpb24o
Jy12JywgJy0tdmVyYm9zZScsIGFjdGlvbj0iY291bnQiLAorICAgICAgICAgICAgICAgZGVzdD0i
dmVyYm9zZSIsIGRlZmF1bHQ9MCwgaGVscD0iaW5jcmVhc2UgdmVyYm9zaXR5LiIpLAorICAgIGdy
b3VwLl9hZGRvcHRpb24oJy1xJywgJy0tcXVpZXQnLCBhY3Rpb249ImNvdW50IiwKKyAgICAgICAg
ICAgICAgIGRlc3Q9InF1aWV0IiwgZGVmYXVsdD0wLCBoZWxwPSJkZWNyZWFzZSB2ZXJib3NpdHku
IiksCisgICAgZ3JvdXAuX2FkZG9wdGlvbignLXInLAorICAgICAgICAgYWN0aW9uPSJzdG9yZSIs
IGRlc3Q9InJlcG9ydGNoYXJzIiwgZGVmYXVsdD1Ob25lLCBtZXRhdmFyPSJjaGFycyIsCisgICAg
ICAgICBoZWxwPSJzaG93IGV4dHJhIHRlc3Qgc3VtbWFyeSBpbmZvIGFzIHNwZWNpZmllZCBieSBj
aGFycyAoZilhaWxlZCwgIgorICAgICAgICAgICAgICAiKEUpZXJyb3IsIChzKXNraXBwZWQsICh4
KWZhaWxlZCwgKFgpcGFzc2VkICh3KXB5dGVzdC13YXJuaW5ncyAiCisgICAgICAgICAgICAgICIo
cClwYXNzZWQsIChQKXBhc3NlZCB3aXRoIG91dHB1dCwgKGEpYWxsIGV4Y2VwdCBwUC4iKQorICAg
IGdyb3VwLl9hZGRvcHRpb24oJy1sJywgJy0tc2hvd2xvY2FscycsCisgICAgICAgICBhY3Rpb249
InN0b3JlX3RydWUiLCBkZXN0PSJzaG93bG9jYWxzIiwgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAg
IGhlbHA9InNob3cgbG9jYWxzIGluIHRyYWNlYmFja3MgKGRpc2FibGVkIGJ5IGRlZmF1bHQpLiIp
CisgICAgZ3JvdXAuX2FkZG9wdGlvbignLS1yZXBvcnQnLAorICAgICAgICAgYWN0aW9uPSJzdG9y
ZSIsIGRlc3Q9InJlcG9ydCIsIGRlZmF1bHQ9Tm9uZSwgbWV0YXZhcj0ib3B0cyIsCisgICAgICAg
ICBoZWxwPSIoZGVwcmVjYXRlZCwgdXNlIC1yKSIpCisgICAgZ3JvdXAuX2FkZG9wdGlvbignLS10
YicsIG1ldGF2YXI9InN0eWxlIiwKKyAgICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmUiLCBkZXN0
PSJ0YnN0eWxlIiwgZGVmYXVsdD0nYXV0bycsCisgICAgICAgICAgICAgICBjaG9pY2VzPVsnYXV0
bycsICdsb25nJywgJ3Nob3J0JywgJ25vJywgJ2xpbmUnLCAnbmF0aXZlJ10sCisgICAgICAgICAg
ICAgICBoZWxwPSJ0cmFjZWJhY2sgcHJpbnQgbW9kZSAoYXV0by9sb25nL3Nob3J0L2xpbmUvbmF0
aXZlL25vKS4iKQorICAgIGdyb3VwLl9hZGRvcHRpb24oJy0tZnVsbHRyYWNlJywgJy0tZnVsbC10
cmFjZScsCisgICAgICAgICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLCBkZWZhdWx0PUZhbHNl
LAorICAgICAgICAgICAgICAgaGVscD0iZG9uJ3QgY3V0IGFueSB0cmFjZWJhY2tzIChkZWZhdWx0
IGlzIHRvIGN1dCkuIikKKyAgICBncm91cC5fYWRkb3B0aW9uKCctLWNvbG9yJywgbWV0YXZhcj0i
Y29sb3IiLAorICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZSIsIGRlc3Q9ImNvbG9yIiwgZGVm
YXVsdD0nYXV0bycsCisgICAgICAgICAgICAgICBjaG9pY2VzPVsneWVzJywgJ25vJywgJ2F1dG8n
XSwKKyAgICAgICAgICAgICAgIGhlbHA9ImNvbG9yIHRlcm1pbmFsIG91dHB1dCAoeWVzL25vL2F1
dG8pLiIpCisKK2RlZiBweXRlc3RfY29uZmlndXJlKGNvbmZpZyk6CisgICAgY29uZmlnLm9wdGlv
bi52ZXJib3NlIC09IGNvbmZpZy5vcHRpb24ucXVpZXQKKyAgICByZXBvcnRlciA9IFRlcm1pbmFs
UmVwb3J0ZXIoY29uZmlnLCBzeXMuc3Rkb3V0KQorICAgIGNvbmZpZy5wbHVnaW5tYW5hZ2VyLnJl
Z2lzdGVyKHJlcG9ydGVyLCAndGVybWluYWxyZXBvcnRlcicpCisgICAgaWYgY29uZmlnLm9wdGlv
bi5kZWJ1ZyBvciBjb25maWcub3B0aW9uLnRyYWNlY29uZmlnOgorICAgICAgICBkZWYgbXl3cml0
ZXIodGFncywgYXJncyk6CisgICAgICAgICAgICBtc2cgPSAiICIuam9pbihtYXAoc3RyLCBhcmdz
KSkKKyAgICAgICAgICAgIHJlcG9ydGVyLndyaXRlX2xpbmUoIlt0cmFjZWNvbmZpZ10gIiArIG1z
ZykKKyAgICAgICAgY29uZmlnLnRyYWNlLnJvb3Quc2V0cHJvY2Vzc29yKCJweXRlc3Q6Y29uZmln
IiwgbXl3cml0ZXIpCisKK2RlZiBnZXRyZXBvcnRvcHQoY29uZmlnKToKKyAgICByZXBvcnRvcHRz
ID0gIiIKKyAgICBvcHR2YWx1ZSA9IGNvbmZpZy5vcHRpb24ucmVwb3J0CisgICAgaWYgb3B0dmFs
dWU6CisgICAgICAgIHB5LmJ1aWx0aW4ucHJpbnRfKCJERVBSRUNBVEVEOiB1c2UgLXIgaW5zdGVh
ZCBvZiAtLXJlcG9ydCBvcHRpb24uIiwKKyAgICAgICAgICAgIGZpbGU9c3lzLnN0ZGVycikKKyAg
ICAgICAgaWYgb3B0dmFsdWU6CisgICAgICAgICAgICBmb3Igc2V0dGluZyBpbiBvcHR2YWx1ZS5z
cGxpdCgiLCIpOgorICAgICAgICAgICAgICAgIHNldHRpbmcgPSBzZXR0aW5nLnN0cmlwKCkKKyAg
ICAgICAgICAgICAgICBpZiBzZXR0aW5nID09ICJza2lwcGVkIjoKKyAgICAgICAgICAgICAgICAg
ICAgcmVwb3J0b3B0cyArPSAicyIKKyAgICAgICAgICAgICAgICBlbGlmIHNldHRpbmcgPT0gInhm
YWlsZWQiOgorICAgICAgICAgICAgICAgICAgICByZXBvcnRvcHRzICs9ICJ4IgorICAgIHJlcG9y
dGNoYXJzID0gY29uZmlnLm9wdGlvbi5yZXBvcnRjaGFycworICAgIGlmIHJlcG9ydGNoYXJzOgor
ICAgICAgICBmb3IgY2hhciBpbiByZXBvcnRjaGFyczoKKyAgICAgICAgICAgIGlmIGNoYXIgbm90
IGluIHJlcG9ydG9wdHMgYW5kIGNoYXIgIT0gJ2EnOgorICAgICAgICAgICAgICAgIHJlcG9ydG9w
dHMgKz0gY2hhcgorICAgICAgICAgICAgZWxpZiBjaGFyID09ICdhJzoKKyAgICAgICAgICAgICAg
ICByZXBvcnRvcHRzID0gJ2ZFc3hYdycKKyAgICByZXR1cm4gcmVwb3J0b3B0cworCitkZWYgcHl0
ZXN0X3JlcG9ydF90ZXN0c3RhdHVzKHJlcG9ydCk6CisgICAgaWYgcmVwb3J0LnBhc3NlZDoKKyAg
ICAgICAgbGV0dGVyID0gIi4iCisgICAgZWxpZiByZXBvcnQuc2tpcHBlZDoKKyAgICAgICAgbGV0
dGVyID0gInMiCisgICAgZWxpZiByZXBvcnQuZmFpbGVkOgorICAgICAgICBsZXR0ZXIgPSAiRiIK
KyAgICAgICAgaWYgcmVwb3J0LndoZW4gIT0gImNhbGwiOgorICAgICAgICAgICAgbGV0dGVyID0g
ImYiCisgICAgcmV0dXJuIHJlcG9ydC5vdXRjb21lLCBsZXR0ZXIsIHJlcG9ydC5vdXRjb21lLnVw
cGVyKCkKKworY2xhc3MgV2FybmluZ1JlcG9ydDoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29k
ZSwgbWVzc2FnZSwgbm9kZWlkPU5vbmUsIGZzbG9jYXRpb249Tm9uZSk6CisgICAgICAgIHNlbGYu
Y29kZSA9IGNvZGUKKyAgICAgICAgc2VsZi5tZXNzYWdlID0gbWVzc2FnZQorICAgICAgICBzZWxm
Lm5vZGVpZCA9IG5vZGVpZAorICAgICAgICBzZWxmLmZzbG9jYXRpb24gPSBmc2xvY2F0aW9uCisK
KworY2xhc3MgVGVybWluYWxSZXBvcnRlcjoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29uZmln
LCBmaWxlPU5vbmUpOgorICAgICAgICBpbXBvcnQgX3B5dGVzdC5jb25maWcKKyAgICAgICAgc2Vs
Zi5jb25maWcgPSBjb25maWcKKyAgICAgICAgc2VsZi52ZXJib3NpdHkgPSBzZWxmLmNvbmZpZy5v
cHRpb24udmVyYm9zZQorICAgICAgICBzZWxmLnNob3doZWFkZXIgPSBzZWxmLnZlcmJvc2l0eSA+
PSAwCisgICAgICAgIHNlbGYuc2hvd2ZzcGF0aCA9IHNlbGYudmVyYm9zaXR5ID49IDAKKyAgICAg
ICAgc2VsZi5zaG93bG9uZ3Rlc3RpbmZvID0gc2VsZi52ZXJib3NpdHkgPiAwCisgICAgICAgIHNl
bGYuX251bWNvbGxlY3RlZCA9IDAKKworICAgICAgICBzZWxmLnN0YXRzID0ge30KKyAgICAgICAg
c2VsZi5zdGFydGRpciA9IHB5LnBhdGgubG9jYWwoKQorICAgICAgICBpZiBmaWxlIGlzIE5vbmU6
CisgICAgICAgICAgICBmaWxlID0gc3lzLnN0ZG91dAorICAgICAgICBzZWxmLl90dyA9IHNlbGYu
d3JpdGVyID0gX3B5dGVzdC5jb25maWcuY3JlYXRlX3Rlcm1pbmFsX3dyaXRlcihjb25maWcsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZpbGUpCisgICAgICAgIHNlbGYuY3VycmVudGZzcGF0aCA9IE5vbmUKKyAg
ICAgICAgc2VsZi5yZXBvcnRjaGFycyA9IGdldHJlcG9ydG9wdChjb25maWcpCisgICAgICAgIHNl
bGYuaGFzbWFya3VwID0gc2VsZi5fdHcuaGFzbWFya3VwCisgICAgICAgIHNlbGYuaXNhdHR5ID0g
ZmlsZS5pc2F0dHkoKQorCisgICAgZGVmIGhhc29wdChzZWxmLCBjaGFyKToKKyAgICAgICAgY2hh
ciA9IHsneGZhaWxlZCc6ICd4JywgJ3NraXBwZWQnOiAncyd9LmdldChjaGFyLCBjaGFyKQorICAg
ICAgICByZXR1cm4gY2hhciBpbiBzZWxmLnJlcG9ydGNoYXJzCisKKyAgICBkZWYgd3JpdGVfZnNw
YXRoX3Jlc3VsdChzZWxmLCBub2RlaWQsIHJlcyk6CisgICAgICAgIGZzcGF0aCA9IHNlbGYuY29u
ZmlnLnJvb3RkaXIuam9pbihub2RlaWQuc3BsaXQoIjo6IilbMF0pCisgICAgICAgIGlmIGZzcGF0
aCAhPSBzZWxmLmN1cnJlbnRmc3BhdGg6CisgICAgICAgICAgICBzZWxmLmN1cnJlbnRmc3BhdGgg
PSBmc3BhdGgKKyAgICAgICAgICAgIGZzcGF0aCA9IHNlbGYuc3RhcnRkaXIuYmVzdHJlbHBhdGgo
ZnNwYXRoKQorICAgICAgICAgICAgc2VsZi5fdHcubGluZSgpCisgICAgICAgICAgICBzZWxmLl90
dy53cml0ZShmc3BhdGggKyAiICIpCisgICAgICAgIHNlbGYuX3R3LndyaXRlKHJlcykKKworICAg
IGRlZiB3cml0ZV9lbnN1cmVfcHJlZml4KHNlbGYsIHByZWZpeCwgZXh0cmE9IiIsICoqa3dhcmdz
KToKKyAgICAgICAgaWYgc2VsZi5jdXJyZW50ZnNwYXRoICE9IHByZWZpeDoKKyAgICAgICAgICAg
IHNlbGYuX3R3LmxpbmUoKQorICAgICAgICAgICAgc2VsZi5jdXJyZW50ZnNwYXRoID0gcHJlZml4
CisgICAgICAgICAgICBzZWxmLl90dy53cml0ZShwcmVmaXgpCisgICAgICAgIGlmIGV4dHJhOgor
ICAgICAgICAgICAgc2VsZi5fdHcud3JpdGUoZXh0cmEsICoqa3dhcmdzKQorICAgICAgICAgICAg
c2VsZi5jdXJyZW50ZnNwYXRoID0gLTIKKworICAgIGRlZiBlbnN1cmVfbmV3bGluZShzZWxmKToK
KyAgICAgICAgaWYgc2VsZi5jdXJyZW50ZnNwYXRoOgorICAgICAgICAgICAgc2VsZi5fdHcubGlu
ZSgpCisgICAgICAgICAgICBzZWxmLmN1cnJlbnRmc3BhdGggPSBOb25lCisKKyAgICBkZWYgd3Jp
dGUoc2VsZiwgY29udGVudCwgKiptYXJrdXApOgorICAgICAgICBzZWxmLl90dy53cml0ZShjb250
ZW50LCAqKm1hcmt1cCkKKworICAgIGRlZiB3cml0ZV9saW5lKHNlbGYsIGxpbmUsICoqbWFya3Vw
KToKKyAgICAgICAgaWYgbm90IHB5LmJ1aWx0aW4uX2lzdGV4dChsaW5lKToKKyAgICAgICAgICAg
IGxpbmUgPSBweS5idWlsdGluLnRleHQobGluZSwgZXJyb3JzPSJyZXBsYWNlIikKKyAgICAgICAg
c2VsZi5lbnN1cmVfbmV3bGluZSgpCisgICAgICAgIHNlbGYuX3R3LmxpbmUobGluZSwgKiptYXJr
dXApCisKKyAgICBkZWYgcmV3cml0ZShzZWxmLCBsaW5lLCAqKm1hcmt1cCk6CisgICAgICAgIGxp
bmUgPSBzdHIobGluZSkKKyAgICAgICAgc2VsZi5fdHcud3JpdGUoIlxyIiArIGxpbmUsICoqbWFy
a3VwKQorCisgICAgZGVmIHdyaXRlX3NlcChzZWxmLCBzZXAsIHRpdGxlPU5vbmUsICoqbWFya3Vw
KToKKyAgICAgICAgc2VsZi5lbnN1cmVfbmV3bGluZSgpCisgICAgICAgIHNlbGYuX3R3LnNlcChz
ZXAsIHRpdGxlLCAqKm1hcmt1cCkKKworICAgIGRlZiBzZWN0aW9uKHNlbGYsIHRpdGxlLCBzZXA9
Ij0iLCAqKmt3KToKKyAgICAgICAgc2VsZi5fdHcuc2VwKHNlcCwgdGl0bGUsICoqa3cpCisKKyAg
ICBkZWYgbGluZShzZWxmLCBtc2csICoqa3cpOgorICAgICAgICBzZWxmLl90dy5saW5lKG1zZywg
KiprdykKKworICAgIGRlZiBweXRlc3RfaW50ZXJuYWxlcnJvcihzZWxmLCBleGNyZXByKToKKyAg
ICAgICAgZm9yIGxpbmUgaW4gcHkuYnVpbHRpbi50ZXh0KGV4Y3JlcHIpLnNwbGl0KCJcbiIpOgor
ICAgICAgICAgICAgc2VsZi53cml0ZV9saW5lKCJJTlRFUk5BTEVSUk9SPiAiICsgbGluZSkKKyAg
ICAgICAgcmV0dXJuIDEKKworICAgIGRlZiBweXRlc3RfbG9nd2FybmluZyhzZWxmLCBjb2RlLCBm
c2xvY2F0aW9uLCBtZXNzYWdlLCBub2RlaWQpOgorICAgICAgICB3YXJuaW5ncyA9IHNlbGYuc3Rh
dHMuc2V0ZGVmYXVsdCgid2FybmluZ3MiLCBbXSkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShmc2xv
Y2F0aW9uLCB0dXBsZSk6CisgICAgICAgICAgICBmc2xvY2F0aW9uID0gIiVzOiVkIiAlIGZzbG9j
YXRpb24KKyAgICAgICAgd2FybmluZyA9IFdhcm5pbmdSZXBvcnQoY29kZT1jb2RlLCBmc2xvY2F0
aW9uPWZzbG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9
bWVzc2FnZSwgbm9kZWlkPW5vZGVpZCkKKyAgICAgICAgd2FybmluZ3MuYXBwZW5kKHdhcm5pbmcp
CisKKyAgICBkZWYgcHl0ZXN0X3BsdWdpbl9yZWdpc3RlcmVkKHNlbGYsIHBsdWdpbik6CisgICAg
ICAgIGlmIHNlbGYuY29uZmlnLm9wdGlvbi50cmFjZWNvbmZpZzoKKyAgICAgICAgICAgIG1zZyA9
ICJQTFVHSU4gcmVnaXN0ZXJlZDogJXMiICUgKHBsdWdpbiwpCisgICAgICAgICAgICAjIFhYWCB0
aGlzIGV2ZW50IG1heSBoYXBwZW4gZHVyaW5nIHNldHVwL3RlYXJkb3duIHRpbWUKKyAgICAgICAg
ICAgICMgICAgIHdoaWNoIHVuZm9ydHVuYXRlbHkgY2FwdHVyZXMgb3VyIG91dHB1dCBoZXJlCisg
ICAgICAgICAgICAjICAgICB3aGljaCBnYXJibGVzIG91ciBvdXRwdXQgaWYgd2UgdXNlIHNlbGYu
d3JpdGVfbGluZQorICAgICAgICAgICAgc2VsZi53cml0ZV9saW5lKG1zZykKKworICAgIGRlZiBw
eXRlc3RfZGVzZWxlY3RlZChzZWxmLCBpdGVtcyk6CisgICAgICAgIHNlbGYuc3RhdHMuc2V0ZGVm
YXVsdCgnZGVzZWxlY3RlZCcsIFtdKS5leHRlbmQoaXRlbXMpCisKKyAgICBkZWYgcHl0ZXN0X3J1
bnRlc3RfbG9nc3RhcnQoc2VsZiwgbm9kZWlkLCBsb2NhdGlvbik6CisgICAgICAgICMgZW5zdXJl
IHRoYXQgdGhlIHBhdGggaXMgcHJpbnRlZCBiZWZvcmUgdGhlCisgICAgICAgICMgMXN0IHRlc3Qg
b2YgYSBtb2R1bGUgc3RhcnRzIHJ1bm5pbmcKKyAgICAgICAgaWYgc2VsZi5zaG93bG9uZ3Rlc3Rp
bmZvOgorICAgICAgICAgICAgbGluZSA9IHNlbGYuX2xvY2F0aW9ubGluZShub2RlaWQsICpsb2Nh
dGlvbikKKyAgICAgICAgICAgIHNlbGYud3JpdGVfZW5zdXJlX3ByZWZpeChsaW5lLCAiIikKKyAg
ICAgICAgZWxpZiBzZWxmLnNob3dmc3BhdGg6CisgICAgICAgICAgICBmc2lkID0gbm9kZWlkLnNw
bGl0KCI6OiIpWzBdCisgICAgICAgICAgICBzZWxmLndyaXRlX2ZzcGF0aF9yZXN1bHQoZnNpZCwg
IiIpCisKKyAgICBkZWYgcHl0ZXN0X3J1bnRlc3RfbG9ncmVwb3J0KHNlbGYsIHJlcG9ydCk6Cisg
ICAgICAgIHJlcCA9IHJlcG9ydAorICAgICAgICByZXMgPSBzZWxmLmNvbmZpZy5ob29rLnB5dGVz
dF9yZXBvcnRfdGVzdHN0YXR1cyhyZXBvcnQ9cmVwKQorICAgICAgICBjYXQsIGxldHRlciwgd29y
ZCA9IHJlcworICAgICAgICBzZWxmLnN0YXRzLnNldGRlZmF1bHQoY2F0LCBbXSkuYXBwZW5kKHJl
cCkKKyAgICAgICAgc2VsZi5fdGVzdHNfcmFuID0gVHJ1ZQorICAgICAgICBpZiBub3QgbGV0dGVy
IGFuZCBub3Qgd29yZDoKKyAgICAgICAgICAgICMgcHJvYmFibHkgcGFzc2VkIHNldHVwL3RlYXJk
b3duCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgc2VsZi52ZXJib3NpdHkgPD0gMDoK
KyAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKHJlcCwgJ25vZGUnKSBhbmQgc2VsZi5zaG93ZnNw
YXRoOgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGVfZnNwYXRoX3Jlc3VsdChyZXAubm9kZWlk
LCBsZXR0ZXIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX3R3Lndy
aXRlKGxldHRlcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uod29y
ZCwgdHVwbGUpOgorICAgICAgICAgICAgICAgIHdvcmQsIG1hcmt1cCA9IHdvcmQKKyAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgcmVwLnBhc3NlZDoKKyAgICAgICAgICAgICAg
ICAgICAgbWFya3VwID0geydncmVlbic6VHJ1ZX0KKyAgICAgICAgICAgICAgICBlbGlmIHJlcC5m
YWlsZWQ6CisgICAgICAgICAgICAgICAgICAgIG1hcmt1cCA9IHsncmVkJzpUcnVlfQorICAgICAg
ICAgICAgICAgIGVsaWYgcmVwLnNraXBwZWQ6CisgICAgICAgICAgICAgICAgICAgIG1hcmt1cCA9
IHsneWVsbG93JzpUcnVlfQorICAgICAgICAgICAgbGluZSA9IHNlbGYuX2xvY2F0aW9ubGluZShy
ZXAubm9kZWlkLCAqcmVwLmxvY2F0aW9uKQorICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIocmVw
LCAnbm9kZScpOgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGVfZW5zdXJlX3ByZWZpeChsaW5l
LCB3b3JkLCAqKm1hcmt1cCkKKyAgICAgICAgICAgICAgICAjc2VsZi5fdHcud3JpdGUod29yZCwg
KiptYXJrdXApCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZW5zdXJl
X25ld2xpbmUoKQorICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIocmVwLCAnbm9kZScpOgorICAg
ICAgICAgICAgICAgICAgICBzZWxmLl90dy53cml0ZSgiWyVzXSAiICUgcmVwLm5vZGUuZ2F0ZXdh
eS5pZCkKKyAgICAgICAgICAgICAgICBzZWxmLl90dy53cml0ZSh3b3JkLCAqKm1hcmt1cCkKKyAg
ICAgICAgICAgICAgICBzZWxmLl90dy53cml0ZSgiICIgKyBsaW5lKQorICAgICAgICAgICAgICAg
IHNlbGYuY3VycmVudGZzcGF0aCA9IC0yCisKKyAgICBkZWYgcHl0ZXN0X2NvbGxlY3Rpb24oc2Vs
Zik6CisgICAgICAgIGlmIG5vdCBzZWxmLmlzYXR0eSBhbmQgc2VsZi5jb25maWcub3B0aW9uLnZl
cmJvc2UgPj0gMToKKyAgICAgICAgICAgIHNlbGYud3JpdGUoImNvbGxlY3RpbmcgLi4uICIsIGJv
bGQ9VHJ1ZSkKKworICAgIGRlZiBweXRlc3RfY29sbGVjdHJlcG9ydChzZWxmLCByZXBvcnQpOgor
ICAgICAgICBpZiByZXBvcnQuZmFpbGVkOgorICAgICAgICAgICAgc2VsZi5zdGF0cy5zZXRkZWZh
dWx0KCJlcnJvciIsIFtdKS5hcHBlbmQocmVwb3J0KQorICAgICAgICBlbGlmIHJlcG9ydC5za2lw
cGVkOgorICAgICAgICAgICAgc2VsZi5zdGF0cy5zZXRkZWZhdWx0KCJza2lwcGVkIiwgW10pLmFw
cGVuZChyZXBvcnQpCisgICAgICAgIGl0ZW1zID0gW3ggZm9yIHggaW4gcmVwb3J0LnJlc3VsdCBp
ZiBpc2luc3RhbmNlKHgsIHB5dGVzdC5JdGVtKV0KKyAgICAgICAgc2VsZi5fbnVtY29sbGVjdGVk
ICs9IGxlbihpdGVtcykKKyAgICAgICAgaWYgc2VsZi5pc2F0dHk6CisgICAgICAgICAgICAjc2Vs
Zi53cml0ZV9mc3BhdGhfcmVzdWx0KHJlcG9ydC5ub2RlaWQsICdFJykKKyAgICAgICAgICAgIHNl
bGYucmVwb3J0X2NvbGxlY3QoKQorCisgICAgZGVmIHJlcG9ydF9jb2xsZWN0KHNlbGYsIGZpbmFs
PUZhbHNlKToKKyAgICAgICAgaWYgc2VsZi5jb25maWcub3B0aW9uLnZlcmJvc2UgPCAwOgorICAg
ICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZXJyb3JzID0gbGVuKHNlbGYuc3RhdHMuZ2V0KCdl
cnJvcicsIFtdKSkKKyAgICAgICAgc2tpcHBlZCA9IGxlbihzZWxmLnN0YXRzLmdldCgnc2tpcHBl
ZCcsIFtdKSkKKyAgICAgICAgaWYgZmluYWw6CisgICAgICAgICAgICBsaW5lID0gImNvbGxlY3Rl
ZCAiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsaW5lID0gImNvbGxlY3RpbmcgIgorICAg
ICAgICBsaW5lICs9IHN0cihzZWxmLl9udW1jb2xsZWN0ZWQpICsgIiBpdGVtcyIKKyAgICAgICAg
aWYgZXJyb3JzOgorICAgICAgICAgICAgbGluZSArPSAiIC8gJWQgZXJyb3JzIiAlIGVycm9ycwor
ICAgICAgICBpZiBza2lwcGVkOgorICAgICAgICAgICAgbGluZSArPSAiIC8gJWQgc2tpcHBlZCIg
JSBza2lwcGVkCisgICAgICAgIGlmIHNlbGYuaXNhdHR5OgorICAgICAgICAgICAgaWYgZmluYWw6
CisgICAgICAgICAgICAgICAgbGluZSArPSAiIFxuIgorICAgICAgICAgICAgc2VsZi5yZXdyaXRl
KGxpbmUsIGJvbGQ9VHJ1ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYud3JpdGVf
bGluZShsaW5lKQorCisgICAgZGVmIHB5dGVzdF9jb2xsZWN0aW9uX21vZGlmeWl0ZW1zKHNlbGYp
OgorICAgICAgICBzZWxmLnJlcG9ydF9jb2xsZWN0KFRydWUpCisKKyAgICBAcHl0ZXN0Lmhvb2tp
bXBsKHRyeWxhc3Q9VHJ1ZSkKKyAgICBkZWYgcHl0ZXN0X3Nlc3Npb25zdGFydChzZWxmLCBzZXNz
aW9uKToKKyAgICAgICAgc2VsZi5fc2Vzc2lvbnN0YXJ0dGltZSA9IHRpbWUudGltZSgpCisgICAg
ICAgIGlmIG5vdCBzZWxmLnNob3doZWFkZXI6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAg
c2VsZi53cml0ZV9zZXAoIj0iLCAidGVzdCBzZXNzaW9uIHN0YXJ0cyIsIGJvbGQ9VHJ1ZSkKKyAg
ICAgICAgdmVyaW5mbyA9IHBsYXRmb3JtLnB5dGhvbl92ZXJzaW9uKCkKKyAgICAgICAgbXNnID0g
InBsYXRmb3JtICVzIC0tIFB5dGhvbiAlcyIgJSAoc3lzLnBsYXRmb3JtLCB2ZXJpbmZvKQorICAg
ICAgICBpZiBoYXNhdHRyKHN5cywgJ3B5cHlfdmVyc2lvbl9pbmZvJyk6CisgICAgICAgICAgICB2
ZXJpbmZvID0gIi4iLmpvaW4obWFwKHN0ciwgc3lzLnB5cHlfdmVyc2lvbl9pbmZvWzozXSkpCisg
ICAgICAgICAgICBtc2cgKz0gIltweXB5LSVzLSVzXSIgJSAodmVyaW5mbywgc3lzLnB5cHlfdmVy
c2lvbl9pbmZvWzNdKQorICAgICAgICBtc2cgKz0gIiwgcHl0ZXN0LSVzLCBweS0lcywgcGx1Z2d5
LSVzIiAlICgKKyAgICAgICAgICAgICAgIHB5dGVzdC5fX3ZlcnNpb25fXywgcHkuX192ZXJzaW9u
X18sIHBsdWdneS5fX3ZlcnNpb25fXykKKyAgICAgICAgaWYgc2VsZi52ZXJib3NpdHkgPiAwIG9y
IHNlbGYuY29uZmlnLm9wdGlvbi5kZWJ1ZyBvciBcCisgICAgICAgICAgIGdldGF0dHIoc2VsZi5j
b25maWcub3B0aW9uLCAncGFzdGViaW4nLCBOb25lKToKKyAgICAgICAgICAgIG1zZyArPSAiIC0t
ICIgKyBzdHIoc3lzLmV4ZWN1dGFibGUpCisgICAgICAgIHNlbGYud3JpdGVfbGluZShtc2cpCisg
ICAgICAgIGxpbmVzID0gc2VsZi5jb25maWcuaG9vay5weXRlc3RfcmVwb3J0X2hlYWRlcigKKyAg
ICAgICAgICAgIGNvbmZpZz1zZWxmLmNvbmZpZywgc3RhcnRkaXI9c2VsZi5zdGFydGRpcikKKyAg
ICAgICAgbGluZXMucmV2ZXJzZSgpCisgICAgICAgIGZvciBsaW5lIGluIGZsYXR0ZW4obGluZXMp
OgorICAgICAgICAgICAgc2VsZi53cml0ZV9saW5lKGxpbmUpCisKKyAgICBkZWYgcHl0ZXN0X3Jl
cG9ydF9oZWFkZXIoc2VsZiwgY29uZmlnKToKKyAgICAgICAgaW5pZmlsZSA9ICIiCisgICAgICAg
IGlmIGNvbmZpZy5pbmlmaWxlOgorICAgICAgICAgICAgaW5pZmlsZSA9IGNvbmZpZy5yb290ZGly
LmJlc3RyZWxwYXRoKGNvbmZpZy5pbmlmaWxlKQorICAgICAgICBsaW5lcyA9IFsicm9vdGRpcjog
JXMsIGluaWZpbGU6ICVzIiAlKGNvbmZpZy5yb290ZGlyLCBpbmlmaWxlKV0KKworICAgICAgICBw
bHVnaW5pbmZvID0gY29uZmlnLnBsdWdpbm1hbmFnZXIubGlzdF9wbHVnaW5fZGlzdGluZm8oKQor
ICAgICAgICBpZiBwbHVnaW5pbmZvOgorCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoCisgICAg
ICAgICAgICAgICAgInBsdWdpbnM6ICVzIiAlICIsICIuam9pbihfcGx1Z2luX25hbWV2ZXJzaW9u
cyhwbHVnaW5pbmZvKSkpCisgICAgICAgIHJldHVybiBsaW5lcworCisgICAgZGVmIHB5dGVzdF9j
b2xsZWN0aW9uX2ZpbmlzaChzZWxmLCBzZXNzaW9uKToKKyAgICAgICAgaWYgc2VsZi5jb25maWcu
b3B0aW9uLmNvbGxlY3Rvbmx5OgorICAgICAgICAgICAgc2VsZi5fcHJpbnRjb2xsZWN0ZWRpdGVt
cyhzZXNzaW9uLml0ZW1zKQorICAgICAgICAgICAgaWYgc2VsZi5zdGF0cy5nZXQoJ2ZhaWxlZCcp
OgorICAgICAgICAgICAgICAgIHNlbGYuX3R3LnNlcCgiISIsICJjb2xsZWN0aW9uIGZhaWx1cmVz
IikKKyAgICAgICAgICAgICAgICBmb3IgcmVwIGluIHNlbGYuc3RhdHMuZ2V0KCdmYWlsZWQnKToK
KyAgICAgICAgICAgICAgICAgICAgcmVwLnRvdGVybWluYWwoc2VsZi5fdHcpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIDEKKyAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIGlmIG5vdCBzZWxm
LnNob3doZWFkZXI6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgI2ZvciBpLCB0ZXN0YXJn
IGluIGVudW1lcmF0ZShzZWxmLmNvbmZpZy5hcmdzKToKKyAgICAgICAgIyAgICBzZWxmLndyaXRl
X2xpbmUoInRlc3QgcGF0aCAlZDogJXMiICUoaSsxLCB0ZXN0YXJnKSkKKworICAgIGRlZiBfcHJp
bnRjb2xsZWN0ZWRpdGVtcyhzZWxmLCBpdGVtcyk6CisgICAgICAgICMgdG8gcHJpbnQgb3V0IGl0
ZW1zIGFuZCB0aGVpciBwYXJlbnQgY29sbGVjdG9ycworICAgICAgICAjIHdlIHRha2UgY2FyZSB0
byBsZWF2ZSBvdXQgSW5zdGFuY2VzIGFrYSAoKQorICAgICAgICAjIGJlY2F1c2UgbGF0ZXIgdmVy
c2lvbnMgYXJlIGdvaW5nIHRvIGdldCByaWQgb2YgdGhlbSBhbnl3YXkKKyAgICAgICAgaWYgc2Vs
Zi5jb25maWcub3B0aW9uLnZlcmJvc2UgPCAwOgorICAgICAgICAgICAgaWYgc2VsZi5jb25maWcu
b3B0aW9uLnZlcmJvc2UgPCAtMToKKyAgICAgICAgICAgICAgICBjb3VudHMgPSB7fQorICAgICAg
ICAgICAgICAgIGZvciBpdGVtIGluIGl0ZW1zOgorICAgICAgICAgICAgICAgICAgICBuYW1lID0g
aXRlbS5ub2RlaWQuc3BsaXQoJzo6JywgMSlbMF0KKyAgICAgICAgICAgICAgICAgICAgY291bnRz
W25hbWVdID0gY291bnRzLmdldChuYW1lLCAwKSArIDEKKyAgICAgICAgICAgICAgICBmb3IgbmFt
ZSwgY291bnQgaW4gc29ydGVkKGNvdW50cy5pdGVtcygpKToKKyAgICAgICAgICAgICAgICAgICAg
c2VsZi5fdHcubGluZSgiJXM6ICVkIiAlIChuYW1lLCBjb3VudCkpCisgICAgICAgICAgICBlbHNl
OgorICAgICAgICAgICAgICAgIGZvciBpdGVtIGluIGl0ZW1zOgorICAgICAgICAgICAgICAgICAg
ICBub2RlaWQgPSBpdGVtLm5vZGVpZAorICAgICAgICAgICAgICAgICAgICBub2RlaWQgPSBub2Rl
aWQucmVwbGFjZSgiOjooKTo6IiwgIjo6IikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fdHcu
bGluZShub2RlaWQpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc3RhY2sgPSBbXQorICAg
ICAgICBpbmRlbnQgPSAiIgorICAgICAgICBmb3IgaXRlbSBpbiBpdGVtczoKKyAgICAgICAgICAg
IG5lZWRlZF9jb2xsZWN0b3JzID0gaXRlbS5saXN0Y2hhaW4oKVsxOl0gIyBzdHJpcCByb290IG5v
ZGUKKyAgICAgICAgICAgIHdoaWxlIHN0YWNrOgorICAgICAgICAgICAgICAgIGlmIHN0YWNrID09
IG5lZWRlZF9jb2xsZWN0b3JzWzpsZW4oc3RhY2spXToKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWsKKyAgICAgICAgICAgICAgICBzdGFjay5wb3AoKQorICAgICAgICAgICAgZm9yIGNvbCBpbiBu
ZWVkZWRfY29sbGVjdG9yc1tsZW4oc3RhY2spOl06CisgICAgICAgICAgICAgICAgc3RhY2suYXBw
ZW5kKGNvbCkKKyAgICAgICAgICAgICAgICAjaWYgY29sLm5hbWUgPT0gIigpIjoKKyAgICAgICAg
ICAgICAgICAjICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaW5kZW50ID0gKGxlbihzdGFj
aykgLSAxKSAqICIgICIKKyAgICAgICAgICAgICAgICBzZWxmLl90dy5saW5lKCIlcyVzIiAlIChp
bmRlbnQsIGNvbCkpCisKKyAgICBAcHl0ZXN0Lmhvb2tpbXBsKGhvb2t3cmFwcGVyPVRydWUpCisg
ICAgZGVmIHB5dGVzdF9zZXNzaW9uZmluaXNoKHNlbGYsIGV4aXRzdGF0dXMpOgorICAgICAgICBv
dXRjb21lID0geWllbGQKKyAgICAgICAgb3V0Y29tZS5nZXRfcmVzdWx0KCkKKyAgICAgICAgc2Vs
Zi5fdHcubGluZSgiIikKKyAgICAgICAgc3VtbWFyeV9leGl0X2NvZGVzID0gKAorICAgICAgICAg
ICAgRVhJVF9PSywgRVhJVF9URVNUU0ZBSUxFRCwgRVhJVF9JTlRFUlJVUFRFRCwgRVhJVF9VU0FH
RUVSUk9SLAorICAgICAgICAgICAgRVhJVF9OT1RFU1RTQ09MTEVDVEVEKQorICAgICAgICBpZiBl
eGl0c3RhdHVzIGluIHN1bW1hcnlfZXhpdF9jb2RlczoKKyAgICAgICAgICAgIHNlbGYuY29uZmln
Lmhvb2sucHl0ZXN0X3Rlcm1pbmFsX3N1bW1hcnkodGVybWluYWxyZXBvcnRlcj1zZWxmKQorICAg
ICAgICAgICAgc2VsZi5zdW1tYXJ5X2Vycm9ycygpCisgICAgICAgICAgICBzZWxmLnN1bW1hcnlf
ZmFpbHVyZXMoKQorICAgICAgICAgICAgc2VsZi5zdW1tYXJ5X3dhcm5pbmdzKCkKKyAgICAgICAg
ICAgIHNlbGYuc3VtbWFyeV9wYXNzZXMoKQorICAgICAgICBpZiBleGl0c3RhdHVzID09IEVYSVRf
SU5URVJSVVBURUQ6CisgICAgICAgICAgICBzZWxmLl9yZXBvcnRfa2V5Ym9hcmRpbnRlcnJ1cHQo
KQorICAgICAgICAgICAgZGVsIHNlbGYuX2tleWJvYXJkaW50ZXJydXB0X21lbW8KKyAgICAgICAg
c2VsZi5zdW1tYXJ5X2Rlc2VsZWN0ZWQoKQorICAgICAgICBzZWxmLnN1bW1hcnlfc3RhdHMoKQor
CisgICAgZGVmIHB5dGVzdF9rZXlib2FyZF9pbnRlcnJ1cHQoc2VsZiwgZXhjaW5mbyk6CisgICAg
ICAgIHNlbGYuX2tleWJvYXJkaW50ZXJydXB0X21lbW8gPSBleGNpbmZvLmdldHJlcHIoZnVuY2Fy
Z3M9VHJ1ZSkKKworICAgIGRlZiBweXRlc3RfdW5jb25maWd1cmUoc2VsZik6CisgICAgICAgIGlm
IGhhc2F0dHIoc2VsZiwgJ19rZXlib2FyZGludGVycnVwdF9tZW1vJyk6CisgICAgICAgICAgICBz
ZWxmLl9yZXBvcnRfa2V5Ym9hcmRpbnRlcnJ1cHQoKQorCisgICAgZGVmIF9yZXBvcnRfa2V5Ym9h
cmRpbnRlcnJ1cHQoc2VsZik6CisgICAgICAgIGV4Y3JlcHIgPSBzZWxmLl9rZXlib2FyZGludGVy
cnVwdF9tZW1vCisgICAgICAgIG1zZyA9IGV4Y3JlcHIucmVwcmNyYXNoLm1lc3NhZ2UKKyAgICAg
ICAgc2VsZi53cml0ZV9zZXAoIiEiLCBtc2cpCisgICAgICAgIGlmICJLZXlib2FyZEludGVycnVw
dCIgaW4gbXNnOgorICAgICAgICAgICAgaWYgc2VsZi5jb25maWcub3B0aW9uLmZ1bGx0cmFjZToK
KyAgICAgICAgICAgICAgICBleGNyZXByLnRvdGVybWluYWwoc2VsZi5fdHcpCisgICAgICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX3R3LmxpbmUoInRvIHNob3cgYSBmdWxsIHRy
YWNlYmFjayBvbiBLZXlib2FyZEludGVycnVwdCB1c2UgLS1mdWxsdHJhY2UiLCB5ZWxsb3c9VHJ1
ZSkKKyAgICAgICAgICAgICAgICBleGNyZXByLnJlcHJjcmFzaC50b3Rlcm1pbmFsKHNlbGYuX3R3
KQorCisgICAgZGVmIF9sb2NhdGlvbmxpbmUoc2VsZiwgbm9kZWlkLCBmc3BhdGgsIGxpbmVubywg
ZG9tYWluKToKKyAgICAgICAgZGVmIG1rcmVsKG5vZGVpZCk6CisgICAgICAgICAgICBsaW5lID0g
c2VsZi5jb25maWcuY3dkX3JlbGF0aXZlX25vZGVpZChub2RlaWQpCisgICAgICAgICAgICBpZiBk
b21haW4gYW5kIGxpbmUuZW5kc3dpdGgoZG9tYWluKToKKyAgICAgICAgICAgICAgICBsaW5lID0g
bGluZVs6LWxlbihkb21haW4pXQorICAgICAgICAgICAgICAgIGwgPSBkb21haW4uc3BsaXQoIlsi
KQorICAgICAgICAgICAgICAgIGxbMF0gPSBsWzBdLnJlcGxhY2UoJy4nLCAnOjonKSAgIyBkb24n
dCByZXBsYWNlICcuJyBpbiBwYXJhbXMKKyAgICAgICAgICAgICAgICBsaW5lICs9ICJbIi5qb2lu
KGwpCisgICAgICAgICAgICByZXR1cm4gbGluZQorICAgICAgICAjIGNvbGxlY3RfZnNwYXRoIGNv
bWVzIGZyb20gdGVzdGlkIHdoaWNoIGhhcyBhICIvIi1ub3JtYWxpemVkIHBhdGgKKworICAgICAg
ICBpZiBmc3BhdGg6CisgICAgICAgICAgICByZXMgPSBta3JlbChub2RlaWQpLnJlcGxhY2UoIjo6
KCkiLCAiIikgICMgcGFyZW5zLW5vcm1hbGl6YXRpb24KKyAgICAgICAgICAgIGlmIG5vZGVpZC5z
cGxpdCgiOjoiKVswXSAhPSBmc3BhdGgucmVwbGFjZSgiXFwiLCAiLyIpOgorICAgICAgICAgICAg
ICAgIHJlcyArPSAiIDwtICIgKyBzZWxmLnN0YXJ0ZGlyLmJlc3RyZWxwYXRoKGZzcGF0aCkKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlcyA9ICJbbG9jYXRpb25dIgorICAgICAgICByZXR1
cm4gcmVzICsgIiAiCisKKyAgICBkZWYgX2dldGZhaWx1cmVoZWFkbGluZShzZWxmLCByZXApOgor
ICAgICAgICBpZiBoYXNhdHRyKHJlcCwgJ2xvY2F0aW9uJyk6CisgICAgICAgICAgICBmc3BhdGgs
IGxpbmVubywgZG9tYWluID0gcmVwLmxvY2F0aW9uCisgICAgICAgICAgICByZXR1cm4gZG9tYWlu
CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gInRlc3Qgc2Vzc2lvbiIgIyBYWFg/
CisKKyAgICBkZWYgX2dldGNyYXNobGluZShzZWxmLCByZXApOgorICAgICAgICB0cnk6CisgICAg
ICAgICAgICByZXR1cm4gc3RyKHJlcC5sb25ncmVwci5yZXByY3Jhc2gpCisgICAgICAgIGV4Y2Vw
dCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXR1
cm4gc3RyKHJlcC5sb25ncmVwcilbOjUwXQorICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVy
cm9yOgorICAgICAgICAgICAgICAgIHJldHVybiAiIgorCisgICAgIworICAgICMgc3VtbWFyaWVz
IGZvciBzZXNzaW9uZmluaXNoCisgICAgIworICAgIGRlZiBnZXRyZXBvcnRzKHNlbGYsIG5hbWUp
OgorICAgICAgICBsID0gW10KKyAgICAgICAgZm9yIHggaW4gc2VsZi5zdGF0cy5nZXQobmFtZSwg
W10pOgorICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIoeCwgJ19wZGJzaG93bicpOgorICAgICAg
ICAgICAgICAgIGwuYXBwZW5kKHgpCisgICAgICAgIHJldHVybiBsCisKKyAgICBkZWYgc3VtbWFy
eV93YXJuaW5ncyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5oYXNvcHQoInciKToKKyAgICAgICAg
ICAgIHdhcm5pbmdzID0gc2VsZi5zdGF0cy5nZXQoIndhcm5pbmdzIikKKyAgICAgICAgICAgIGlm
IG5vdCB3YXJuaW5nczoKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHNlbGYu
d3JpdGVfc2VwKCI9IiwgInB5dGVzdC13YXJuaW5nIHN1bW1hcnkiKQorICAgICAgICAgICAgZm9y
IHcgaW4gd2FybmluZ3M6CisgICAgICAgICAgICAgICAgc2VsZi5fdHcubGluZSgiVyVzICVzICVz
IiAlICh3LmNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3LmZzbG9jYXRpb24s
IHcubWVzc2FnZSkpCisKKyAgICBkZWYgc3VtbWFyeV9wYXNzZXMoc2VsZik6CisgICAgICAgIGlm
IHNlbGYuY29uZmlnLm9wdGlvbi50YnN0eWxlICE9ICJubyI6CisgICAgICAgICAgICBpZiBzZWxm
Lmhhc29wdCgiUCIpOgorICAgICAgICAgICAgICAgIHJlcG9ydHMgPSBzZWxmLmdldHJlcG9ydHMo
J3Bhc3NlZCcpCisgICAgICAgICAgICAgICAgaWYgbm90IHJlcG9ydHM6CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGVfc2VwKCI9IiwgIlBBU1NF
UyIpCisgICAgICAgICAgICAgICAgZm9yIHJlcCBpbiByZXBvcnRzOgorICAgICAgICAgICAgICAg
ICAgICBtc2cgPSBzZWxmLl9nZXRmYWlsdXJlaGVhZGxpbmUocmVwKQorICAgICAgICAgICAgICAg
ICAgICBzZWxmLndyaXRlX3NlcCgiXyIsIG1zZykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5f
b3V0cmVwX3N1bW1hcnkocmVwKQorCisgICAgZGVmIHN1bW1hcnlfZmFpbHVyZXMoc2VsZik6Cisg
ICAgICAgIGlmIHNlbGYuY29uZmlnLm9wdGlvbi50YnN0eWxlICE9ICJubyI6CisgICAgICAgICAg
ICByZXBvcnRzID0gc2VsZi5nZXRyZXBvcnRzKCdmYWlsZWQnKQorICAgICAgICAgICAgaWYgbm90
IHJlcG9ydHM6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBzZWxmLndyaXRl
X3NlcCgiPSIsICJGQUlMVVJFUyIpCisgICAgICAgICAgICBmb3IgcmVwIGluIHJlcG9ydHM6Cisg
ICAgICAgICAgICAgICAgaWYgc2VsZi5jb25maWcub3B0aW9uLnRic3R5bGUgPT0gImxpbmUiOgor
ICAgICAgICAgICAgICAgICAgICBsaW5lID0gc2VsZi5fZ2V0Y3Jhc2hsaW5lKHJlcCkKKyAgICAg
ICAgICAgICAgICAgICAgc2VsZi53cml0ZV9saW5lKGxpbmUpCisgICAgICAgICAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgICAgICAgICAgbXNnID0gc2VsZi5fZ2V0ZmFpbHVyZWhlYWRsaW5lKHJl
cCkKKyAgICAgICAgICAgICAgICAgICAgbWFya3VwID0geydyZWQnOiBUcnVlLCAnYm9sZCc6IFRy
dWV9CisgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGVfc2VwKCJfIiwgbXNnLCAqKm1hcmt1
cCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3V0cmVwX3N1bW1hcnkocmVwKQorCisgICAg
ZGVmIHN1bW1hcnlfZXJyb3JzKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmNvbmZpZy5vcHRpb24u
dGJzdHlsZSAhPSAibm8iOgorICAgICAgICAgICAgcmVwb3J0cyA9IHNlbGYuZ2V0cmVwb3J0cygn
ZXJyb3InKQorICAgICAgICAgICAgaWYgbm90IHJlcG9ydHM6CisgICAgICAgICAgICAgICAgcmV0
dXJuCisgICAgICAgICAgICBzZWxmLndyaXRlX3NlcCgiPSIsICJFUlJPUlMiKQorICAgICAgICAg
ICAgZm9yIHJlcCBpbiBzZWxmLnN0YXRzWydlcnJvciddOgorICAgICAgICAgICAgICAgIG1zZyA9
IHNlbGYuX2dldGZhaWx1cmVoZWFkbGluZShyZXApCisgICAgICAgICAgICAgICAgaWYgbm90IGhh
c2F0dHIocmVwLCAnd2hlbicpOgorICAgICAgICAgICAgICAgICAgICAjIGNvbGxlY3QKKyAgICAg
ICAgICAgICAgICAgICAgbXNnID0gIkVSUk9SIGNvbGxlY3RpbmcgIiArIG1zZworICAgICAgICAg
ICAgICAgIGVsaWYgcmVwLndoZW4gPT0gInNldHVwIjoKKyAgICAgICAgICAgICAgICAgICAgbXNn
ID0gIkVSUk9SIGF0IHNldHVwIG9mICIgKyBtc2cKKyAgICAgICAgICAgICAgICBlbGlmIHJlcC53
aGVuID09ICJ0ZWFyZG93biI6CisgICAgICAgICAgICAgICAgICAgIG1zZyA9ICJFUlJPUiBhdCB0
ZWFyZG93biBvZiAiICsgbXNnCisgICAgICAgICAgICAgICAgc2VsZi53cml0ZV9zZXAoIl8iLCBt
c2cpCisgICAgICAgICAgICAgICAgc2VsZi5fb3V0cmVwX3N1bW1hcnkocmVwKQorCisgICAgZGVm
IF9vdXRyZXBfc3VtbWFyeShzZWxmLCByZXApOgorICAgICAgICByZXAudG90ZXJtaW5hbChzZWxm
Ll90dykKKyAgICAgICAgZm9yIHNlY25hbWUsIGNvbnRlbnQgaW4gcmVwLnNlY3Rpb25zOgorICAg
ICAgICAgICAgc2VsZi5fdHcuc2VwKCItIiwgc2VjbmFtZSkKKyAgICAgICAgICAgIGlmIGNvbnRl
bnRbLTE6XSA9PSAiXG4iOgorICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBjb250ZW50WzotMV0K
KyAgICAgICAgICAgIHNlbGYuX3R3LmxpbmUoY29udGVudCkKKworICAgIGRlZiBzdW1tYXJ5X3N0
YXRzKHNlbGYpOgorICAgICAgICBzZXNzaW9uX2R1cmF0aW9uID0gdGltZS50aW1lKCkgLSBzZWxm
Ll9zZXNzaW9uc3RhcnR0aW1lCisgICAgICAgIChsaW5lLCBjb2xvcikgPSBidWlsZF9zdW1tYXJ5
X3N0YXRzX2xpbmUoc2VsZi5zdGF0cykKKyAgICAgICAgbXNnID0gIiVzIGluICUuMmYgc2Vjb25k
cyIgJSAobGluZSwgc2Vzc2lvbl9kdXJhdGlvbikKKyAgICAgICAgbWFya3VwID0ge2NvbG9yOiBU
cnVlLCAnYm9sZCc6IFRydWV9CisKKyAgICAgICAgaWYgc2VsZi52ZXJib3NpdHkgPj0gMDoKKyAg
ICAgICAgICAgIHNlbGYud3JpdGVfc2VwKCI9IiwgbXNnLCAqKm1hcmt1cCkKKyAgICAgICAgaWYg
c2VsZi52ZXJib3NpdHkgPT0gLTE6CisgICAgICAgICAgICBzZWxmLndyaXRlX2xpbmUobXNnLCAq
Km1hcmt1cCkKKworICAgIGRlZiBzdW1tYXJ5X2Rlc2VsZWN0ZWQoc2VsZik6CisgICAgICAgIGlm
ICdkZXNlbGVjdGVkJyBpbiBzZWxmLnN0YXRzOgorICAgICAgICAgICAgbCA9IFtdCisgICAgICAg
ICAgICBrID0gc2VsZi5jb25maWcub3B0aW9uLmtleXdvcmQKKyAgICAgICAgICAgIGlmIGs6Cisg
ICAgICAgICAgICAgICAgbC5hcHBlbmQoIi1rJXMiICUgaykKKyAgICAgICAgICAgIG0gPSBzZWxm
LmNvbmZpZy5vcHRpb24ubWFya2V4cHIKKyAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAg
ICAgbC5hcHBlbmQoIi1tICVyIiAlIG0pCisgICAgICAgICAgICBpZiBsOgorICAgICAgICAgICAg
ICAgIHNlbGYud3JpdGVfc2VwKCI9IiwgIiVkIHRlc3RzIGRlc2VsZWN0ZWQgYnkgJXIiICUgKAor
ICAgICAgICAgICAgICAgICAgICBsZW4oc2VsZi5zdGF0c1snZGVzZWxlY3RlZCddKSwgIiAiLmpv
aW4obCkpLCBib2xkPVRydWUpCisKK2RlZiByZXByX3B5dGhvbnZlcnNpb24odj1Ob25lKToKKyAg
ICBpZiB2IGlzIE5vbmU6CisgICAgICAgIHYgPSBzeXMudmVyc2lvbl9pbmZvCisgICAgdHJ5Ogor
ICAgICAgICByZXR1cm4gIiVzLiVzLiVzLSVzLSVzIiAlIHYKKyAgICBleGNlcHQgKFR5cGVFcnJv
ciwgVmFsdWVFcnJvcik6CisgICAgICAgIHJldHVybiBzdHIodikKKworZGVmIGZsYXR0ZW4obCk6
CisgICAgZm9yIHggaW4gbDoKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh4LCAobGlzdCwgdHVwbGUp
KToKKyAgICAgICAgICAgIGZvciB5IGluIGZsYXR0ZW4oeCk6CisgICAgICAgICAgICAgICAgeWll
bGQgeQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgeWllbGQgeAorCitkZWYgYnVpbGRfc3Vt
bWFyeV9zdGF0c19saW5lKHN0YXRzKToKKyAgICBrZXlzID0gKCJmYWlsZWQgcGFzc2VkIHNraXBw
ZWQgZGVzZWxlY3RlZCAiCisgICAgICAgICAgICJ4ZmFpbGVkIHhwYXNzZWQgd2FybmluZ3MgZXJy
b3IiKS5zcGxpdCgpCisgICAga2V5X3RyYW5zbGF0aW9uID0geyd3YXJuaW5ncyc6ICdweXRlc3Qt
d2FybmluZ3MnfQorICAgIHVua25vd25fa2V5X3NlZW4gPSBGYWxzZQorICAgIGZvciBrZXkgaW4g
c3RhdHMua2V5cygpOgorICAgICAgICBpZiBrZXkgbm90IGluIGtleXM6CisgICAgICAgICAgICBp
ZiBrZXk6ICMgc2V0dXAvdGVhcmRvd24gcmVwb3J0cyBoYXZlIGFuIGVtcHR5IGtleSwgaWdub3Jl
IHRoZW0KKyAgICAgICAgICAgICAgICBrZXlzLmFwcGVuZChrZXkpCisgICAgICAgICAgICAgICAg
dW5rbm93bl9rZXlfc2VlbiA9IFRydWUKKyAgICBwYXJ0cyA9IFtdCisgICAgZm9yIGtleSBpbiBr
ZXlzOgorICAgICAgICB2YWwgPSBzdGF0cy5nZXQoa2V5LCBOb25lKQorICAgICAgICBpZiB2YWw6
CisgICAgICAgICAgICBrZXlfbmFtZSA9IGtleV90cmFuc2xhdGlvbi5nZXQoa2V5LCBrZXkpCisg
ICAgICAgICAgICBwYXJ0cy5hcHBlbmQoIiVkICVzIiAlIChsZW4odmFsKSwga2V5X25hbWUpKQor
CisgICAgaWYgcGFydHM6CisgICAgICAgIGxpbmUgPSAiLCAiLmpvaW4ocGFydHMpCisgICAgZWxz
ZToKKyAgICAgICAgbGluZSA9ICJubyB0ZXN0cyByYW4iCisKKyAgICBpZiAnZmFpbGVkJyBpbiBz
dGF0cyBvciAnZXJyb3InIGluIHN0YXRzOgorICAgICAgICBjb2xvciA9ICdyZWQnCisgICAgZWxp
ZiAnd2FybmluZ3MnIGluIHN0YXRzIG9yIHVua25vd25fa2V5X3NlZW46CisgICAgICAgIGNvbG9y
ID0gJ3llbGxvdycKKyAgICBlbGlmICdwYXNzZWQnIGluIHN0YXRzOgorICAgICAgICBjb2xvciA9
ICdncmVlbicKKyAgICBlbHNlOgorICAgICAgICBjb2xvciA9ICd5ZWxsb3cnCisKKyAgICByZXR1
cm4gKGxpbmUsIGNvbG9yKQorCisKK2RlZiBfcGx1Z2luX25hbWV2ZXJzaW9ucyhwbHVnaW5pbmZv
KToKKyAgICBsID0gW10KKyAgICBmb3IgcGx1Z2luLCBkaXN0IGluIHBsdWdpbmluZm86CisgICAg
ICAgICMgZ2V0cyB1cyBuYW1lIGFuZCB2ZXJzaW9uIQorICAgICAgICBuYW1lID0gJ3tkaXN0LnBy
b2plY3RfbmFtZX0te2Rpc3QudmVyc2lvbn0nLmZvcm1hdChkaXN0PWRpc3QpCisgICAgICAgICMg
cXVlc3Rpb25hYmxlIGNvbnZlbmllbmNlLCBidXQgaXQga2VlcHMgdGhpbmdzIHNob3J0CisgICAg
ICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgicHl0ZXN0LSIpOgorICAgICAgICAgICAgbmFtZSA9IG5h
bWVbNzpdCisgICAgICAgICMgd2UgZGVjaWRlZCB0byBwcmludCBweXRob24gcGFja2FnZSBuYW1l
cworICAgICAgICAjIHRoZXkgY2FuIGhhdmUgbW9yZSB0aGFuIG9uZSBwbHVnaW4KKyAgICAgICAg
aWYgbmFtZSBub3QgaW4gbDoKKyAgICAgICAgICAgIGwuYXBwZW5kKG5hbWUpCisgICAgcmV0dXJu
IGwKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3Qv
X3B5dGVzdC90bXBkaXIucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0
ZXN0L19weXRlc3QvdG1wZGlyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi5lYmM0OGRiZTViMgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9y
dGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC90bXBkaXIucHkKQEAgLTAsMCArMSwxMjMgQEAK
KyIiIiBzdXBwb3J0IGZvciBwcm92aWRpbmcgdGVtcG9yYXJ5IGRpcmVjdG9yaWVzIHRvIHRlc3Qg
ZnVuY3Rpb25zLiAgIiIiCitpbXBvcnQgcmUKKworaW1wb3J0IHB5dGVzdAoraW1wb3J0IHB5Citm
cm9tIF9weXRlc3QubW9ua2V5cGF0Y2ggaW1wb3J0IG1vbmtleXBhdGNoCisKKworY2xhc3MgVGVt
cGRpckZhY3Rvcnk6CisgICAgIiIiRmFjdG9yeSBmb3IgdGVtcG9yYXJ5IGRpcmVjdG9yaWVzIHVu
ZGVyIHRoZSBjb21tb24gYmFzZSB0ZW1wIGRpcmVjdG9yeS4KKworICAgIFRoZSBiYXNlIGRpcmVj
dG9yeSBjYW4gYmUgY29uZmlndXJlZCB1c2luZyB0aGUgYGAtLWJhc2V0ZW1wYGAgb3B0aW9uLgor
ICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbmZpZyk6CisgICAgICAgIHNlbGYu
Y29uZmlnID0gY29uZmlnCisgICAgICAgIHNlbGYudHJhY2UgPSBjb25maWcudHJhY2UuZ2V0KCJ0
bXBkaXIiKQorCisgICAgZGVmIGVuc3VyZXRlbXAoc2VsZiwgc3RyaW5nLCBkaXI9MSk6CisgICAg
ICAgICIiIiAoZGVwcmVjYXRlZCkgcmV0dXJuIHRlbXBvcmFyeSBkaXJlY3RvcnkgcGF0aCB3aXRo
CisgICAgICAgICAgICB0aGUgZ2l2ZW4gc3RyaW5nIGFzIHRoZSB0cmFpbGluZyBwYXJ0LiAgSXQg
aXMgdXN1YWxseQorICAgICAgICAgICAgYmV0dGVyIHRvIHVzZSB0aGUgJ3RtcGRpcicgZnVuY3Rp
b24gYXJndW1lbnQgd2hpY2gKKyAgICAgICAgICAgIHByb3ZpZGVzIGFuIGVtcHR5IHVuaXF1ZS1w
ZXItdGVzdC1pbnZvY2F0aW9uIGRpcmVjdG9yeQorICAgICAgICAgICAgYW5kIGlzIGd1YXJhbnRl
ZWQgdG8gYmUgZW1wdHkuCisgICAgICAgICIiIgorICAgICAgICAjcHkubG9nLl9hcGl3YXJuKCI+
MS4xIiwgInVzZSB0bXBkaXIgZnVuY3Rpb24gYXJndW1lbnQiKQorICAgICAgICByZXR1cm4gc2Vs
Zi5nZXRiYXNldGVtcCgpLmVuc3VyZShzdHJpbmcsIGRpcj1kaXIpCisKKyAgICBkZWYgbWt0ZW1w
KHNlbGYsIGJhc2VuYW1lLCBudW1iZXJlZD1UcnVlKToKKyAgICAgICAgIiIiQ3JlYXRlIGEgc3Vi
ZGlyZWN0b3J5IG9mIHRoZSBiYXNlIHRlbXBvcmFyeSBkaXJlY3RvcnkgYW5kIHJldHVybiBpdC4K
KyAgICAgICAgSWYgYGBudW1iZXJlZGBgLCBlbnN1cmUgdGhlIGRpcmVjdG9yeSBpcyB1bmlxdWUg
YnkgYWRkaW5nIGEgbnVtYmVyCisgICAgICAgIHByZWZpeCBncmVhdGVyIHRoYW4gYW55IGV4aXN0
aW5nIG9uZS4KKyAgICAgICAgIiIiCisgICAgICAgIGJhc2V0ZW1wID0gc2VsZi5nZXRiYXNldGVt
cCgpCisgICAgICAgIGlmIG5vdCBudW1iZXJlZDoKKyAgICAgICAgICAgIHAgPSBiYXNldGVtcC5t
a2RpcihiYXNlbmFtZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHAgPSBweS5wYXRoLmxv
Y2FsLm1ha2VfbnVtYmVyZWRfZGlyKHByZWZpeD1iYXNlbmFtZSwKKyAgICAgICAgICAgICAgICBr
ZWVwPTAsIHJvb3RkaXI9YmFzZXRlbXAsIGxvY2tfdGltZW91dD1Ob25lKQorICAgICAgICBzZWxm
LnRyYWNlKCJta3RlbXAiLCBwKQorICAgICAgICByZXR1cm4gcAorCisgICAgZGVmIGdldGJhc2V0
ZW1wKHNlbGYpOgorICAgICAgICAiIiIgcmV0dXJuIGJhc2UgdGVtcG9yYXJ5IGRpcmVjdG9yeS4g
IiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9iYXNldGVtcAorICAg
ICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBiYXNldGVtcCA9IHNlbGYu
Y29uZmlnLm9wdGlvbi5iYXNldGVtcAorICAgICAgICAgICAgaWYgYmFzZXRlbXA6CisgICAgICAg
ICAgICAgICAgYmFzZXRlbXAgPSBweS5wYXRoLmxvY2FsKGJhc2V0ZW1wKQorICAgICAgICAgICAg
ICAgIGlmIGJhc2V0ZW1wLmNoZWNrKCk6CisgICAgICAgICAgICAgICAgICAgIGJhc2V0ZW1wLnJl
bW92ZSgpCisgICAgICAgICAgICAgICAgYmFzZXRlbXAubWtkaXIoKQorICAgICAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgICAgICB0ZW1wcm9vdCA9IHB5LnBhdGgubG9jYWwuZ2V0X3RlbXByb290
KCkKKyAgICAgICAgICAgICAgICB1c2VyID0gZ2V0X3VzZXIoKQorICAgICAgICAgICAgICAgIGlm
IHVzZXI6CisgICAgICAgICAgICAgICAgICAgICMgdXNlIGEgc3ViLWRpcmVjdG9yeSBpbiB0aGUg
dGVtcHJvb3QgdG8gc3BlZWQtdXAKKyAgICAgICAgICAgICAgICAgICAgIyBtYWtlX251bWJlcmVk
X2RpcigpIGNhbGwKKyAgICAgICAgICAgICAgICAgICAgcm9vdGRpciA9IHRlbXByb290LmpvaW4o
J3B5dGVzdC1vZi0lcycgJSB1c2VyKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICAgICAgICAgIHJvb3RkaXIgPSB0ZW1wcm9vdAorICAgICAgICAgICAgICAgIHJvb3RkaXIuZW5z
dXJlKGRpcj0xKQorICAgICAgICAgICAgICAgIGJhc2V0ZW1wID0gcHkucGF0aC5sb2NhbC5tYWtl
X251bWJlcmVkX2RpcihwcmVmaXg9J3B5dGVzdC0nLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290ZGlyPXJvb3RkaXIpCisgICAg
ICAgICAgICBzZWxmLl9iYXNldGVtcCA9IHQgPSBiYXNldGVtcC5yZWFscGF0aCgpCisgICAgICAg
ICAgICBzZWxmLnRyYWNlKCJuZXcgYmFzZXRlbXAiLCB0KQorICAgICAgICAgICAgcmV0dXJuIHQK
KworICAgIGRlZiBmaW5pc2goc2VsZik6CisgICAgICAgIHNlbGYudHJhY2UoImZpbmlzaCIpCisK
KworZGVmIGdldF91c2VyKCk6CisgICAgIiIiUmV0dXJuIHRoZSBjdXJyZW50IHVzZXIgbmFtZSwg
b3IgTm9uZSBpZiBnZXR1c2VyKCkgZG9lcyBub3Qgd29yaworICAgIGluIHRoZSBjdXJyZW50IGVu
dmlyb25tZW50IChzZWUgIzEwMTApLgorICAgICIiIgorICAgIGltcG9ydCBnZXRwYXNzCisgICAg
dHJ5OgorICAgICAgICByZXR1cm4gZ2V0cGFzcy5nZXR1c2VyKCkKKyAgICBleGNlcHQgKEltcG9y
dEVycm9yLCBLZXlFcnJvcik6CisgICAgICAgIHJldHVybiBOb25lCisKKyMgYmFja3dhcmQgY29t
cGF0aWJpbGl0eQorVGVtcGRpckhhbmRsZXIgPSBUZW1wZGlyRmFjdG9yeQorCisKK2RlZiBweXRl
c3RfY29uZmlndXJlKGNvbmZpZyk6CisgICAgIiIiQ3JlYXRlIGEgVGVtcGRpckZhY3RvcnkgYW5k
IGF0dGFjaCBpdCB0byB0aGUgY29uZmlnIG9iamVjdC4KKworICAgIFRoaXMgaXMgdG8gY29tcGx5
IHdpdGggZXhpc3RpbmcgcGx1Z2lucyB3aGljaCBleHBlY3QgdGhlIGhhbmRsZXIgdG8gYmUKKyAg
ICBhdmFpbGFibGUgYXQgcHl0ZXN0X2NvbmZpZ3VyZSB0aW1lLCBidXQgaWRlYWxseSBzaG91bGQg
YmUgbW92ZWQgZW50aXJlbHkKKyAgICB0byB0aGUgdG1wZGlyX2ZhY3Rvcnkgc2Vzc2lvbiBmaXh0
dXJlLgorICAgICIiIgorICAgIG1wID0gbW9ua2V5cGF0Y2goKQorICAgIHQgPSBUZW1wZGlyRmFj
dG9yeShjb25maWcpCisgICAgY29uZmlnLl9jbGVhbnVwLmV4dGVuZChbbXAudW5kbywgdC5maW5p
c2hdKQorICAgIG1wLnNldGF0dHIoY29uZmlnLCAnX3RtcGRpcmhhbmRsZXInLCB0LCByYWlzaW5n
PUZhbHNlKQorICAgIG1wLnNldGF0dHIocHl0ZXN0LCAnZW5zdXJldGVtcCcsIHQuZW5zdXJldGVt
cCwgcmFpc2luZz1GYWxzZSkKKworCitAcHl0ZXN0LmZpeHR1cmUoc2NvcGU9J3Nlc3Npb24nKQor
ZGVmIHRtcGRpcl9mYWN0b3J5KHJlcXVlc3QpOgorICAgICIiIlJldHVybiBhIFRlbXBkaXJGYWN0
b3J5IGluc3RhbmNlIGZvciB0aGUgdGVzdCBzZXNzaW9uLgorICAgICIiIgorICAgIHJldHVybiBy
ZXF1ZXN0LmNvbmZpZy5fdG1wZGlyaGFuZGxlcgorCisKK0BweXRlc3QuZml4dHVyZQorZGVmIHRt
cGRpcihyZXF1ZXN0LCB0bXBkaXJfZmFjdG9yeSk6CisgICAgIiIicmV0dXJuIGEgdGVtcG9yYXJ5
IGRpcmVjdG9yeSBwYXRoIG9iamVjdAorICAgIHdoaWNoIGlzIHVuaXF1ZSB0byBlYWNoIHRlc3Qg
ZnVuY3Rpb24gaW52b2NhdGlvbiwKKyAgICBjcmVhdGVkIGFzIGEgc3ViIGRpcmVjdG9yeSBvZiB0
aGUgYmFzZSB0ZW1wb3JhcnkKKyAgICBkaXJlY3RvcnkuICBUaGUgcmV0dXJuZWQgb2JqZWN0IGlz
IGEgYHB5LnBhdGgubG9jYWxgXworICAgIHBhdGggb2JqZWN0LgorICAgICIiIgorICAgIG5hbWUg
PSByZXF1ZXN0Lm5vZGUubmFtZQorICAgIG5hbWUgPSByZS5zdWIoIltcV10iLCAiXyIsIG5hbWUp
CisgICAgTUFYVkFMID0gMzAKKyAgICBpZiBsZW4obmFtZSkgPiBNQVhWQUw6CisgICAgICAgIG5h
bWUgPSBuYW1lWzpNQVhWQUxdCisgICAgeCA9IHRtcGRpcl9mYWN0b3J5Lm1rdGVtcChuYW1lLCBu
dW1iZXJlZD1UcnVlKQorICAgIHJldHVybiB4CmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9p
bXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvdW5pdHRlc3QucHkgYi9XZWJEcml2ZXJU
ZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvdW5pdHRlc3QucHkKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjgxMjBlOTRmYmY0Ci0tLSAvZGV2L251
bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0
L3VuaXR0ZXN0LnB5CkBAIC0wLDAgKzEsMjA1IEBACisiIiIgZGlzY292ZXJ5IGFuZCBydW5uaW5n
IG9mIHN0ZC1saWJyYXJ5ICJ1bml0dGVzdCIgc3R5bGUgdGVzdHMuICIiIgorZnJvbSBfX2Z1dHVy
ZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKKworaW1wb3J0IHN5cworaW1wb3J0IHRyYWNlYmFj
aworCitpbXBvcnQgcHl0ZXN0CisjIGZvciB0cmFuc2ZlcmluZyBtYXJrZXJzCitpbXBvcnQgX3B5
dGVzdC5fY29kZQorZnJvbSBfcHl0ZXN0LnB5dGhvbiBpbXBvcnQgdHJhbnNmZXJfbWFya2Vycwor
ZnJvbSBfcHl0ZXN0LnNraXBwaW5nIGltcG9ydCBNYXJrRXZhbHVhdG9yCisKKworZGVmIHB5dGVz
dF9weWNvbGxlY3RfbWFrZWl0ZW0oY29sbGVjdG9yLCBuYW1lLCBvYmopOgorICAgICMgaGFzIHVu
aXR0ZXN0IGJlZW4gaW1wb3J0ZWQgYW5kIGlzIG9iaiBhIHN1YmNsYXNzIG9mIGl0cyBUZXN0Q2Fz
ZT8KKyAgICB0cnk6CisgICAgICAgIGlmIG5vdCBpc3N1YmNsYXNzKG9iaiwgc3lzLm1vZHVsZXNb
InVuaXR0ZXN0Il0uVGVzdENhc2UpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgZXhjZXB0IEV4
Y2VwdGlvbjoKKyAgICAgICAgcmV0dXJuCisgICAgIyB5ZXMsIHNvIGxldCdzIGNvbGxlY3QgaXQK
KyAgICByZXR1cm4gVW5pdFRlc3RDYXNlKG5hbWUsIHBhcmVudD1jb2xsZWN0b3IpCisKKworY2xh
c3MgVW5pdFRlc3RDYXNlKHB5dGVzdC5DbGFzcyk6CisgICAgIyBtYXJrZXIgZm9yIGZpeHR1cmVt
YW5nZXIuZ2V0Zml4dHVyZWluZm8oKQorICAgICMgdG8gZGVjbGFyZSB0aGF0IG91ciBjaGlsZHJl
biBkbyBub3Qgc3VwcG9ydCBmdW5jYXJncworICAgIG5vZnVuY2FyZ3MgPSBUcnVlCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgZGVmIHNldHVwKHNl
bGYpOgorICAgICAgICBjbHMgPSBzZWxmLm9iagorICAgICAgICBpZiBnZXRhdHRyKGNscywgJ19f
dW5pdHRlc3Rfc2tpcF9fJywgRmFsc2UpOgorICAgICAgICAgICAgcmV0dXJuICAjIHNraXBwZWQK
KyAgICAgICAgc2V0dXAgPSBnZXRhdHRyKGNscywgJ3NldFVwQ2xhc3MnLCBOb25lKQorICAgICAg
ICBpZiBzZXR1cCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNldHVwKCkKKyAgICAgICAgdGVh
cmRvd24gPSBnZXRhdHRyKGNscywgJ3RlYXJEb3duQ2xhc3MnLCBOb25lKQorICAgICAgICBpZiB0
ZWFyZG93biBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuYWRkZmluYWxpemVyKHRlYXJk
b3duKQorICAgICAgICBzdXBlcihVbml0VGVzdENhc2UsIHNlbGYpLnNldHVwKCkKKworICAgIGRl
ZiBjb2xsZWN0KHNlbGYpOgorICAgICAgICBmcm9tIHVuaXR0ZXN0IGltcG9ydCBUZXN0TG9hZGVy
CisgICAgICAgIGNscyA9IHNlbGYub2JqCisgICAgICAgIGlmIG5vdCBnZXRhdHRyKGNscywgIl9f
dGVzdF9fIiwgVHJ1ZSk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5zZXNzaW9u
Ll9maXh0dXJlbWFuYWdlci5wYXJzZWZhY3RvcmllcyhzZWxmLCB1bml0dGVzdD1UcnVlKQorICAg
ICAgICBsb2FkZXIgPSBUZXN0TG9hZGVyKCkKKyAgICAgICAgbW9kdWxlID0gc2VsZi5nZXRwYXJl
bnQocHl0ZXN0Lk1vZHVsZSkub2JqCisgICAgICAgIGZvdW5kc29tZXRoaW5nID0gRmFsc2UKKyAg
ICAgICAgZm9yIG5hbWUgaW4gbG9hZGVyLmdldFRlc3RDYXNlTmFtZXMoc2VsZi5vYmopOgorICAg
ICAgICAgICAgeCA9IGdldGF0dHIoc2VsZi5vYmosIG5hbWUpCisgICAgICAgICAgICBmdW5jb2Jq
ID0gZ2V0YXR0cih4LCAnaW1fZnVuYycsIHgpCisgICAgICAgICAgICB0cmFuc2Zlcl9tYXJrZXJz
KGZ1bmNvYmosIGNscywgbW9kdWxlKQorICAgICAgICAgICAgeWllbGQgVGVzdENhc2VGdW5jdGlv
bihuYW1lLCBwYXJlbnQ9c2VsZikKKyAgICAgICAgICAgIGZvdW5kc29tZXRoaW5nID0gVHJ1ZQor
CisgICAgICAgIGlmIG5vdCBmb3VuZHNvbWV0aGluZzoKKyAgICAgICAgICAgIHJ1bnRlc3QgPSBn
ZXRhdHRyKHNlbGYub2JqLCAncnVuVGVzdCcsIE5vbmUpCisgICAgICAgICAgICBpZiBydW50ZXN0
IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHV0ID0gc3lzLm1vZHVsZXMuZ2V0KCJ0d2lz
dGVkLnRyaWFsLnVuaXR0ZXN0IiwgTm9uZSkKKyAgICAgICAgICAgICAgICBpZiB1dCBpcyBOb25l
IG9yIHJ1bnRlc3QgIT0gdXQuVGVzdENhc2UucnVuVGVzdDoKKyAgICAgICAgICAgICAgICAgICAg
eWllbGQgVGVzdENhc2VGdW5jdGlvbigncnVuVGVzdCcsIHBhcmVudD1zZWxmKQorCisKKworY2xh
c3MgVGVzdENhc2VGdW5jdGlvbihweXRlc3QuRnVuY3Rpb24pOgorICAgIF9leGNpbmZvID0gTm9u
ZQorCisgICAgZGVmIHNldHVwKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0Y2FzZSA9IHNlbGYu
cGFyZW50Lm9iaihzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuX2ZpeF91bml0dGVzdF9za2lwX2Rl
Y29yYXRvcigpCisgICAgICAgIHNlbGYuX29iaiA9IGdldGF0dHIoc2VsZi5fdGVzdGNhc2UsIHNl
bGYubmFtZSkKKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLl90ZXN0Y2FzZSwgJ3NldHVwX21ldGhv
ZCcpOgorICAgICAgICAgICAgc2VsZi5fdGVzdGNhc2Uuc2V0dXBfbWV0aG9kKHNlbGYuX29iaikK
KyAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAiX3JlcXVlc3QiKToKKyAgICAgICAgICAgIHNlbGYu
X3JlcXVlc3QuX2ZpbGxmaXh0dXJlcygpCisKKyAgICBkZWYgX2ZpeF91bml0dGVzdF9za2lwX2Rl
Y29yYXRvcihzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoZSBAdW5pdHRlc3Quc2tpcCBk
ZWNvcmF0b3IgY2FsbHMgZnVuY3Rvb2xzLndyYXBzKHNlbGYuX3Rlc3RjYXNlKQorICAgICAgICBU
aGUgY2FsbCB0byBmdW5jdG9vbHMud3JhcHMoKSBmYWlscyB1bmxlc3Mgc2VsZi5fdGVzdGNhc2UK
KyAgICAgICAgaGFzIGEgX19uYW1lX18gYXR0cmlidXRlLiBUaGlzIGlzIHVzdWFsbHkgYXV0b21h
dGljYWxseSBzdXBwbGllZAorICAgICAgICBpZiB0aGUgdGVzdCBpcyBhIGZ1bmN0aW9uIG9yIG1l
dGhvZCwgYnV0IHdlIG5lZWQgdG8gYWRkIG1hbnVhbGx5CisgICAgICAgIGhlcmUuCisKKyAgICAg
ICAgU2VlIGlzc3VlICMxMTY5CisgICAgICAgICIiIgorICAgICAgICBpZiBzeXMudmVyc2lvbl9p
bmZvWzBdID09IDI6CisgICAgICAgICAgICBzZXRhdHRyKHNlbGYuX3Rlc3RjYXNlLCAiX19uYW1l
X18iLCBzZWxmLm5hbWUpCisKKyAgICBkZWYgdGVhcmRvd24oc2VsZik6CisgICAgICAgIGlmIGhh
c2F0dHIoc2VsZi5fdGVzdGNhc2UsICd0ZWFyZG93bl9tZXRob2QnKToKKyAgICAgICAgICAgIHNl
bGYuX3Rlc3RjYXNlLnRlYXJkb3duX21ldGhvZChzZWxmLl9vYmopCisKKyAgICBkZWYgc3RhcnRU
ZXN0KHNlbGYsIHRlc3RjYXNlKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIF9hZGRleGNpbmZv
KHNlbGYsIHJhd2V4Y2luZm8pOgorICAgICAgICAjIHVud3JhcCBwb3RlbnRpYWwgZXhjZXB0aW9u
IGluZm8gKHNlZSB0d2lzdGVkIHRyaWFsIHN1cHBvcnQgYmVsb3cpCisgICAgICAgIHJhd2V4Y2lu
Zm8gPSBnZXRhdHRyKHJhd2V4Y2luZm8sICdfcmF3ZXhjaW5mbycsIHJhd2V4Y2luZm8pCisgICAg
ICAgIHRyeToKKyAgICAgICAgICAgIGV4Y2luZm8gPSBfcHl0ZXN0Ll9jb2RlLkV4Y2VwdGlvbklu
Zm8ocmF3ZXhjaW5mbykKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHRy
eToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGwgPSB0cmFjZWJh
Y2suZm9ybWF0X2V4Y2VwdGlvbigqcmF3ZXhjaW5mbykKKyAgICAgICAgICAgICAgICAgICAgbC5p
bnNlcnQoMCwgIk5PVEU6IEluY29tcGF0aWJsZSBFeGNlcHRpb24gUmVwcmVzZW50YXRpb24sICIK
KyAgICAgICAgICAgICAgICAgICAgICAgICJkaXNwbGF5aW5nIG5hdGl2ZWx5OlxuXG4iKQorICAg
ICAgICAgICAgICAgICAgICBweXRlc3QuZmFpbCgiIi5qb2luKGwpLCBweXRyYWNlPUZhbHNlKQor
ICAgICAgICAgICAgICAgIGV4Y2VwdCAocHl0ZXN0LmZhaWwuRXhjZXB0aW9uLCBLZXlib2FyZElu
dGVycnVwdCk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgZXhj
ZXB0OgorICAgICAgICAgICAgICAgICAgICBweXRlc3QuZmFpbCgiRVJST1I6IFVua25vd24gSW5j
b21wYXRpYmxlIEV4Y2VwdGlvbiAiCisgICAgICAgICAgICAgICAgICAgICAgICAicmVwcmVzZW50
YXRpb246XG4lciIgJShyYXdleGNpbmZvLCksIHB5dHJhY2U9RmFsc2UpCisgICAgICAgICAgICBl
eGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAg
ICAgIGV4Y2VwdCBweXRlc3QuZmFpbC5FeGNlcHRpb246CisgICAgICAgICAgICAgICAgZXhjaW5m
byA9IF9weXRlc3QuX2NvZGUuRXhjZXB0aW9uSW5mbygpCisgICAgICAgIHNlbGYuX19kaWN0X18u
c2V0ZGVmYXVsdCgnX2V4Y2luZm8nLCBbXSkuYXBwZW5kKGV4Y2luZm8pCisKKyAgICBkZWYgYWRk
RXJyb3Ioc2VsZiwgdGVzdGNhc2UsIHJhd2V4Y2luZm8pOgorICAgICAgICBzZWxmLl9hZGRleGNp
bmZvKHJhd2V4Y2luZm8pCisgICAgZGVmIGFkZEZhaWx1cmUoc2VsZiwgdGVzdGNhc2UsIHJhd2V4
Y2luZm8pOgorICAgICAgICBzZWxmLl9hZGRleGNpbmZvKHJhd2V4Y2luZm8pCisKKyAgICBkZWYg
YWRkU2tpcChzZWxmLCB0ZXN0Y2FzZSwgcmVhc29uKToKKyAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgcHl0ZXN0LnNraXAocmVhc29uKQorICAgICAgICBleGNlcHQgcHl0ZXN0LnNraXAuRXhjZXB0
aW9uOgorICAgICAgICAgICAgc2VsZi5fZXZhbHNraXAgPSBNYXJrRXZhbHVhdG9yKHNlbGYsICdT
a2lwVGVzdCcpCisgICAgICAgICAgICBzZWxmLl9ldmFsc2tpcC5yZXN1bHQgPSBUcnVlCisgICAg
ICAgICAgICBzZWxmLl9hZGRleGNpbmZvKHN5cy5leGNfaW5mbygpKQorCisgICAgZGVmIGFkZEV4
cGVjdGVkRmFpbHVyZShzZWxmLCB0ZXN0Y2FzZSwgcmF3ZXhjaW5mbywgcmVhc29uPSIiKToKKyAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgcHl0ZXN0LnhmYWlsKHN0cihyZWFzb24pKQorICAgICAg
ICBleGNlcHQgcHl0ZXN0LnhmYWlsLkV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHNlbGYuX2FkZGV4
Y2luZm8oc3lzLmV4Y19pbmZvKCkpCisKKyAgICBkZWYgYWRkVW5leHBlY3RlZFN1Y2Nlc3Moc2Vs
ZiwgdGVzdGNhc2UsIHJlYXNvbj0iIik6CisgICAgICAgIHNlbGYuX3VuZXhwZWN0ZWRzdWNjZXNz
ID0gcmVhc29uCisKKyAgICBkZWYgYWRkU3VjY2VzcyhzZWxmLCB0ZXN0Y2FzZSk6CisgICAgICAg
IHBhc3MKKworICAgIGRlZiBzdG9wVGVzdChzZWxmLCB0ZXN0Y2FzZSk6CisgICAgICAgIHBhc3MK
KworICAgIGRlZiBydW50ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0Y2FzZShyZXN1bHQ9
c2VsZikKKworICAgIGRlZiBfcHJ1bmV0cmFjZWJhY2soc2VsZiwgZXhjaW5mbyk6CisgICAgICAg
IHB5dGVzdC5GdW5jdGlvbi5fcHJ1bmV0cmFjZWJhY2soc2VsZiwgZXhjaW5mbykKKyAgICAgICAg
dHJhY2ViYWNrID0gZXhjaW5mby50cmFjZWJhY2suZmlsdGVyKAorICAgICAgICAgICAgbGFtYmRh
IHg6bm90IHguZnJhbWUuZl9nbG9iYWxzLmdldCgnX191bml0dGVzdCcpKQorICAgICAgICBpZiB0
cmFjZWJhY2s6CisgICAgICAgICAgICBleGNpbmZvLnRyYWNlYmFjayA9IHRyYWNlYmFjaworCitA
cHl0ZXN0Lmhvb2tpbXBsKHRyeWZpcnN0PVRydWUpCitkZWYgcHl0ZXN0X3J1bnRlc3RfbWFrZXJl
cG9ydChpdGVtLCBjYWxsKToKKyAgICBpZiBpc2luc3RhbmNlKGl0ZW0sIFRlc3RDYXNlRnVuY3Rp
b24pOgorICAgICAgICBpZiBpdGVtLl9leGNpbmZvOgorICAgICAgICAgICAgY2FsbC5leGNpbmZv
ID0gaXRlbS5fZXhjaW5mby5wb3AoMCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAg
ICBkZWwgY2FsbC5yZXN1bHQKKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAg
ICAgICAgICAgICAgICBwYXNzCisKKyMgdHdpc3RlZCB0cmlhbCBzdXBwb3J0CisKK0BweXRlc3Qu
aG9va2ltcGwoaG9va3dyYXBwZXI9VHJ1ZSkKK2RlZiBweXRlc3RfcnVudGVzdF9wcm90b2NvbChp
dGVtKToKKyAgICBpZiBpc2luc3RhbmNlKGl0ZW0sIFRlc3RDYXNlRnVuY3Rpb24pIGFuZCBcCisg
ICAgICAgJ3R3aXN0ZWQudHJpYWwudW5pdHRlc3QnIGluIHN5cy5tb2R1bGVzOgorICAgICAgICB1
dCA9IHN5cy5tb2R1bGVzWyd0d2lzdGVkLnB5dGhvbi5mYWlsdXJlJ10KKyAgICAgICAgRmFpbHVy
ZV9faW5pdF9fID0gdXQuRmFpbHVyZS5fX2luaXRfXworICAgICAgICBjaGVja190ZXN0Y2FzZV9p
bXBsZW1lbnRzX3RyaWFsX3JlcG9ydGVyKCkKKyAgICAgICAgZGVmIGV4Y3N0b3JlKHNlbGYsIGV4
Y192YWx1ZT1Ob25lLCBleGNfdHlwZT1Ob25lLCBleGNfdGI9Tm9uZSwKKyAgICAgICAgICAgIGNh
cHR1cmVWYXJzPU5vbmUpOgorICAgICAgICAgICAgaWYgZXhjX3ZhbHVlIGlzIE5vbmU6CisgICAg
ICAgICAgICAgICAgc2VsZi5fcmF3ZXhjaW5mbyA9IHN5cy5leGNfaW5mbygpCisgICAgICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIGV4Y190eXBlIGlzIE5vbmU6CisgICAgICAgICAg
ICAgICAgICAgIGV4Y190eXBlID0gdHlwZShleGNfdmFsdWUpCisgICAgICAgICAgICAgICAgc2Vs
Zi5fcmF3ZXhjaW5mbyA9IChleGNfdHlwZSwgZXhjX3ZhbHVlLCBleGNfdGIpCisgICAgICAgICAg
ICB0cnk6CisgICAgICAgICAgICAgICAgRmFpbHVyZV9faW5pdF9fKHNlbGYsIGV4Y192YWx1ZSwg
ZXhjX3R5cGUsIGV4Y190YiwKKyAgICAgICAgICAgICAgICAgICAgY2FwdHVyZVZhcnM9Y2FwdHVy
ZVZhcnMpCisgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgICAgIEZh
aWx1cmVfX2luaXRfXyhzZWxmLCBleGNfdmFsdWUsIGV4Y190eXBlLCBleGNfdGIpCisgICAgICAg
IHV0LkZhaWx1cmUuX19pbml0X18gPSBleGNzdG9yZQorICAgICAgICB5aWVsZAorICAgICAgICB1
dC5GYWlsdXJlLl9faW5pdF9fID0gRmFpbHVyZV9faW5pdF9fCisgICAgZWxzZToKKyAgICAgICAg
eWllbGQKKworCitkZWYgY2hlY2tfdGVzdGNhc2VfaW1wbGVtZW50c190cmlhbF9yZXBvcnRlcihk
b25lPVtdKToKKyAgICBpZiBkb25lOgorICAgICAgICByZXR1cm4KKyAgICBmcm9tIHpvcGUuaW50
ZXJmYWNlIGltcG9ydCBjbGFzc0ltcGxlbWVudHMKKyAgICBmcm9tIHR3aXN0ZWQudHJpYWwuaXRy
aWFsIGltcG9ydCBJUmVwb3J0ZXIKKyAgICBjbGFzc0ltcGxlbWVudHMoVGVzdENhc2VGdW5jdGlv
biwgSVJlcG9ydGVyKQorICAgIGRvbmUuYXBwZW5kKDEpCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJU
ZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvdmVuZG9yZWRfcGFja2FnZXMv
UkVBRE1FLm1kIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0
ZXN0L3ZlbmRvcmVkX3BhY2thZ2VzL1JFQURNRS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uZWFiN2M3MTRmYjAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJU
ZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvdmVuZG9yZWRfcGFja2FnZXMv
UkVBRE1FLm1kCkBAIC0wLDAgKzEsMTMgQEAKK1RoaXMgZGlyZWN0b3J5IHZlbmRvcnMgdGhlIGBw
bHVnZ3lgIG1vZHVsZS4KKworRm9yIGEgbW9yZSBkZXRhaWxlZCBkaXNjdXNzaW9uIGZvciB0aGUg
cmVhc29ucyB0byB2ZW5kb3JpbmcgdGhpcyAKK3BhY2thZ2UsIHBsZWFzZSBzZWUgW3RoaXMgaXNz
dWVdKGh0dHBzOi8vZ2l0aHViLmNvbS9weXRlc3QtZGV2L3B5dGVzdC9pc3N1ZXMvOTQ0KS4KKwor
VG8gdXBkYXRlIHRoZSBjdXJyZW50IHZlcnNpb24sIGV4ZWN1dGU6CisKK2BgYAorJCBwaXAgaW5z
dGFsbCAtVSBwbHVnZ3k9PTx2ZXJzaW9uPiAtLW5vLWNvbXBpbGUgLS10YXJnZXQ9X3B5dGVzdC92
ZW5kb3JlZF9wYWNrYWdlcworYGBgCisKK0FuZCBjb21taXQgdGhlIG1vZGlmaWVkIGZpbGVzLiBU
aGUgYHBsdWdneS08dmVyc2lvbj4uZGlzdC1pbmZvYCBkaXJlY3RvcnkgCitjcmVhdGVkIGJ5IGBw
aXBgIHNob3VsZCBiZSBpZ25vcmVkLgpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0
ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L3ZlbmRvcmVkX3BhY2thZ2VzL19faW5pdF9fLnB5
IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L3ZlbmRv
cmVkX3BhY2thZ2VzL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi5lNjlkZTI5YmIyZApkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQv
dzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L3ZlbmRvcmVkX3BhY2thZ2VzL3BsdWdneS0wLjMuMS5k
aXN0LWluZm8vREVTQ1JJUFRJT04ucnN0IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rv
b2xzL3B5dGVzdC9fcHl0ZXN0L3ZlbmRvcmVkX3BhY2thZ2VzL3BsdWdneS0wLjMuMS5kaXN0LWlu
Zm8vREVTQ1JJUFRJT04ucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li5hYTNiYmY4MTI5NwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVk
L3czYy90b29scy9weXRlc3QvX3B5dGVzdC92ZW5kb3JlZF9wYWNrYWdlcy9wbHVnZ3ktMC4zLjEu
ZGlzdC1pbmZvL0RFU0NSSVBUSU9OLnJzdApAQCAtMCwwICsxLDEwIEBACitQbHVnaW4gcmVnaXN0
cmF0aW9uIGFuZCBob29rIGNhbGxpbmcgZm9yIFB5dGhvbgorPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBpcyB0aGUgcGx1Z2luIG1hbmFnZXIg
YXMgdXNlZCBieSBweXRlc3QgYnV0IHN0cmlwcGVkCitvZiBweXRlc3Qgc3BlY2lmaWMgZGV0YWls
cy4KKworRHVyaW5nIHRoZSAwLnggc2VyaWVzIHRoaXMgcGx1Z2luIGRvZXMgbm90IGhhdmUgbXVj
aCBkb2N1bWVudGF0aW9uCitleGNlcHQgZXh0ZW5zaXZlIGRvY3N0cmluZ3MgaW4gdGhlIHBsdWdn
eS5weSBtb2R1bGUuCisKKwpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNj
L3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L3ZlbmRvcmVkX3BhY2thZ2VzL3BsdWdneS0wLjMuMS5kaXN0
LWluZm8vTUVUQURBVEEgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0
L19weXRlc3QvdmVuZG9yZWRfcGFja2FnZXMvcGx1Z2d5LTAuMy4xLmRpc3QtaW5mby9NRVRBREFU
QQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZWM4MWYwYTZiZTAKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0
L19weXRlc3QvdmVuZG9yZWRfcGFja2FnZXMvcGx1Z2d5LTAuMy4xLmRpc3QtaW5mby9NRVRBREFU
QQpAQCAtMCwwICsxLDM5IEBACitNZXRhZGF0YS1WZXJzaW9uOiAyLjAKK05hbWU6IHBsdWdneQor
VmVyc2lvbjogMC4zLjEKK1N1bW1hcnk6IHBsdWdpbiBhbmQgaG9vayBjYWxsaW5nIG1lY2hhbmlz
bXMgZm9yIHB5dGhvbgorSG9tZS1wYWdlOiBVTktOT1dOCitBdXRob3I6IEhvbGdlciBLcmVrZWwK
K0F1dGhvci1lbWFpbDogaG9sZ2VyIGF0IG1lcmxpbnV4LmV1CitMaWNlbnNlOiBNSVQgbGljZW5z
ZQorUGxhdGZvcm06IHVuaXgKK1BsYXRmb3JtOiBsaW51eAorUGxhdGZvcm06IG9zeAorUGxhdGZv
cm06IHdpbjMyCitDbGFzc2lmaWVyOiBEZXZlbG9wbWVudCBTdGF0dXMgOjogNCAtIEJldGEKK0Ns
YXNzaWZpZXI6IEludGVuZGVkIEF1ZGllbmNlIDo6IERldmVsb3BlcnMKK0NsYXNzaWZpZXI6IExp
Y2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IE1JVCBMaWNlbnNlCitDbGFzc2lmaWVyOiBPcGVyYXRp
bmcgU3lzdGVtIDo6IFBPU0lYCitDbGFzc2lmaWVyOiBPcGVyYXRpbmcgU3lzdGVtIDo6IE1pY3Jv
c29mdCA6OiBXaW5kb3dzCitDbGFzc2lmaWVyOiBPcGVyYXRpbmcgU3lzdGVtIDo6IE1hY09TIDo6
IE1hY09TIFgKK0NsYXNzaWZpZXI6IFRvcGljIDo6IFNvZnR3YXJlIERldmVsb3BtZW50IDo6IFRl
c3RpbmcKK0NsYXNzaWZpZXI6IFRvcGljIDo6IFNvZnR3YXJlIERldmVsb3BtZW50IDo6IExpYnJh
cmllcworQ2xhc3NpZmllcjogVG9waWMgOjogVXRpbGl0aWVzCitDbGFzc2lmaWVyOiBQcm9ncmFt
bWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMgorQ2xhc3NpZmllcjogUHJvZ3JhbW1pbmcgTGFu
Z3VhZ2UgOjogUHl0aG9uIDo6IDIuNgorQ2xhc3NpZmllcjogUHJvZ3JhbW1pbmcgTGFuZ3VhZ2Ug
OjogUHl0aG9uIDo6IDIuNworQ2xhc3NpZmllcjogUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0
aG9uIDo6IDMKK0NsYXNzaWZpZXI6IFByb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAz
LjMKK0NsYXNzaWZpZXI6IFByb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAzLjQKK0Ns
YXNzaWZpZXI6IFByb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAzLjUKKworUGx1Z2lu
IHJlZ2lzdHJhdGlvbiBhbmQgaG9vayBjYWxsaW5nIGZvciBQeXRob24KKz09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgaXMgdGhlIHBsdWdpbiBt
YW5hZ2VyIGFzIHVzZWQgYnkgcHl0ZXN0IGJ1dCBzdHJpcHBlZAorb2YgcHl0ZXN0IHNwZWNpZmlj
IGRldGFpbHMuCisKK0R1cmluZyB0aGUgMC54IHNlcmllcyB0aGlzIHBsdWdpbiBkb2VzIG5vdCBo
YXZlIG11Y2ggZG9jdW1lbnRhdGlvbgorZXhjZXB0IGV4dGVuc2l2ZSBkb2NzdHJpbmdzIGluIHRo
ZSBwbHVnZ3kucHkgbW9kdWxlLgorCisKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9y
dGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC92ZW5kb3JlZF9wYWNrYWdlcy9wbHVnZ3ktMC4z
LjEuZGlzdC1pbmZvL1JFQ09SRCBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9w
eXRlc3QvX3B5dGVzdC92ZW5kb3JlZF9wYWNrYWdlcy9wbHVnZ3ktMC4zLjEuZGlzdC1pbmZvL1JF
Q09SRApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOTYyNjY3M2M0M2MK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0
ZXN0L19weXRlc3QvdmVuZG9yZWRfcGFja2FnZXMvcGx1Z2d5LTAuMy4xLmRpc3QtaW5mby9SRUNP
UkQKQEAgLTAsMCArMSw4IEBACitwbHVnZ3kucHksc2hhMjU2PXZfUmZXenlXNkRQVTFjSnVfRUZv
TF9PSHEzdDEzcWxvVmRSNlVhTUNYUUEsMjk4NjIKK3BsdWdneS0wLjMuMS5kaXN0LWluZm8vdG9w
X2xldmVsLnR4dCxzaGEyNTY9eEtTQ1JoYWktdjlNY2t2TXVXcU56MTZjMXRic21PZ2dvTVN3VGdj
cFlIRSw3CitwbHVnZ3ktMC4zLjEuZGlzdC1pbmZvL3Bici5qc29uLHNoYTI1Nj14WDNzNl9fd09j
QXlGLUFaSlgxc2RaeVc2UFVYVC1Ga2ZCbE02OUVFVUNnLDQ3CitwbHVnZ3ktMC4zLjEuZGlzdC1p
bmZvL1JFQ09SRCwsCitwbHVnZ3ktMC4zLjEuZGlzdC1pbmZvL21ldGFkYXRhLmpzb24sc2hhMjU2
PW5MS2x0T1Q3OGRNVi0wMHVYRDZBZWVtcDR4TnN6MnE1OWo2T1JTRGVMancsMTAyNworcGx1Z2d5
LTAuMy4xLmRpc3QtaW5mby9NRVRBREFUQSxzaGEyNTY9MWI4NUhvMnU0aUszME0wOTlrN2F4TXpj
RERoTGNJTWItQTgySlVKWm5TbywxMzM0CitwbHVnZ3ktMC4zLjEuZGlzdC1pbmZvL1dIRUVMLHNo
YTI1Nj1BdlIwV2VUcERheFQ2NDVibDVGUXhVSzZOUHNUbHMydHRwY0dKZzNqMVhnLDExMAorcGx1
Z2d5LTAuMy4xLmRpc3QtaW5mby9ERVNDUklQVElPTi5yc3Qsc2hhMjU2PVA1QWtoMUVkSUJSNkNl
cXRWMlA4WndwR1NwWmlUS1B3ME55UzdqRWlELWcsMzA2CmRpZmYgLS1naXQgYS9XZWJEcml2ZXJU
ZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvdmVuZG9yZWRfcGFja2FnZXMv
cGx1Z2d5LTAuMy4xLmRpc3QtaW5mby9XSEVFTCBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3cz
Yy90b29scy9weXRlc3QvX3B5dGVzdC92ZW5kb3JlZF9wYWNrYWdlcy9wbHVnZ3ktMC4zLjEuZGlz
dC1pbmZvL1dIRUVMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45ZGZm
NjlkODYxMAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90
b29scy9weXRlc3QvX3B5dGVzdC92ZW5kb3JlZF9wYWNrYWdlcy9wbHVnZ3ktMC4zLjEuZGlzdC1p
bmZvL1dIRUVMCkBAIC0wLDAgKzEsNiBAQAorV2hlZWwtVmVyc2lvbjogMS4wCitHZW5lcmF0b3I6
IGJkaXN0X3doZWVsICgwLjI0LjApCitSb290LUlzLVB1cmVsaWI6IHRydWUKK1RhZzogcHkyLW5v
bmUtYW55CitUYWc6IHB5My1ub25lLWFueQorCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9p
bXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvdmVuZG9yZWRfcGFja2FnZXMvcGx1Z2d5
LTAuMy4xLmRpc3QtaW5mby9tZXRhZGF0YS5qc29uIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQv
dzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L3ZlbmRvcmVkX3BhY2thZ2VzL3BsdWdneS0wLjMuMS5k
aXN0LWluZm8vbWV0YWRhdGEuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uNDI2YTNhN2FkZTEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBv
cnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvdmVuZG9yZWRfcGFja2FnZXMvcGx1Z2d5LTAu
My4xLmRpc3QtaW5mby9tZXRhZGF0YS5qc29uCkBAIC0wLDAgKzEgQEAKK3sibGljZW5zZSI6ICJN
SVQgbGljZW5zZSIsICJuYW1lIjogInBsdWdneSIsICJtZXRhZGF0YV92ZXJzaW9uIjogIjIuMCIs
ICJnZW5lcmF0b3IiOiAiYmRpc3Rfd2hlZWwgKDAuMjQuMCkiLCAic3VtbWFyeSI6ICJwbHVnaW4g
YW5kIGhvb2sgY2FsbGluZyBtZWNoYW5pc21zIGZvciBweXRob24iLCAicGxhdGZvcm0iOiAidW5p
eCIsICJ2ZXJzaW9uIjogIjAuMy4xIiwgImV4dGVuc2lvbnMiOiB7InB5dGhvbi5kZXRhaWxzIjog
eyJkb2N1bWVudF9uYW1lcyI6IHsiZGVzY3JpcHRpb24iOiAiREVTQ1JJUFRJT04ucnN0In0sICJj
b250YWN0cyI6IFt7InJvbGUiOiAiYXV0aG9yIiwgImVtYWlsIjogImhvbGdlciBhdCBtZXJsaW51
eC5ldSIsICJuYW1lIjogIkhvbGdlciBLcmVrZWwifV19fSwgImNsYXNzaWZpZXJzIjogWyJEZXZl
bG9wbWVudCBTdGF0dXMgOjogNCAtIEJldGEiLCAiSW50ZW5kZWQgQXVkaWVuY2UgOjogRGV2ZWxv
cGVycyIsICJMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBNSVQgTGljZW5zZSIsICJPcGVyYXRp
bmcgU3lzdGVtIDo6IFBPU0lYIiwgIk9wZXJhdGluZyBTeXN0ZW0gOjogTWljcm9zb2Z0IDo6IFdp
bmRvd3MiLCAiT3BlcmF0aW5nIFN5c3RlbSA6OiBNYWNPUyA6OiBNYWNPUyBYIiwgIlRvcGljIDo6
IFNvZnR3YXJlIERldmVsb3BtZW50IDo6IFRlc3RpbmciLCAiVG9waWMgOjogU29mdHdhcmUgRGV2
ZWxvcG1lbnQgOjogTGlicmFyaWVzIiwgIlRvcGljIDo6IFV0aWxpdGllcyIsICJQcm9ncmFtbWlu
ZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMiIsICJQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRo
b24gOjogMi42IiwgIlByb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAyLjciLCAiUHJv
Z3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDMiLCAiUHJvZ3JhbW1pbmcgTGFuZ3VhZ2Ug
OjogUHl0aG9uIDo6IDMuMyIsICJQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMy40
IiwgIlByb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAzLjUiXX0KXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mv
dG9vbHMvcHl0ZXN0L19weXRlc3QvdmVuZG9yZWRfcGFja2FnZXMvcGx1Z2d5LTAuMy4xLmRpc3Qt
aW5mby9wYnIuanNvbiBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3Qv
X3B5dGVzdC92ZW5kb3JlZF9wYWNrYWdlcy9wbHVnZ3ktMC4zLjEuZGlzdC1pbmZvL3Bici5qc29u
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kNmI3OTg2NDAxOQotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3Qv
X3B5dGVzdC92ZW5kb3JlZF9wYWNrYWdlcy9wbHVnZ3ktMC4zLjEuZGlzdC1pbmZvL3Bici5qc29u
CkBAIC0wLDAgKzEgQEAKK3siaXNfcmVsZWFzZSI6IGZhbHNlLCAiZ2l0X3ZlcnNpb24iOiAiN2Q0
YzljZCJ9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVy
VGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L3ZlbmRvcmVkX3BhY2thZ2Vz
L3BsdWdneS0wLjMuMS5kaXN0LWluZm8vdG9wX2xldmVsLnR4dCBiL1dlYkRyaXZlclRlc3RzL2lt
cG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC92ZW5kb3JlZF9wYWNrYWdlcy9wbHVnZ3kt
MC4zLjEuZGlzdC1pbmZvL3RvcF9sZXZlbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLjExYmRiNWMxZjVmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVz
dHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L3ZlbmRvcmVkX3BhY2thZ2VzL3Bs
dWdneS0wLjMuMS5kaXN0LWluZm8vdG9wX2xldmVsLnR4dApAQCAtMCwwICsxIEBACitwbHVnZ3kK
ZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5
dGVzdC92ZW5kb3JlZF9wYWNrYWdlcy9wbHVnZ3kucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRl
ZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvdmVuZG9yZWRfcGFja2FnZXMvcGx1Z2d5LnB5Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yZjg0OGIyM2QzNQotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5
dGVzdC92ZW5kb3JlZF9wYWNrYWdlcy9wbHVnZ3kucHkKQEAgLTAsMCArMSw3NzcgQEAKKyIiIgor
UGx1Z2luTWFuYWdlciwgYmFzaWMgaW5pdGlhbGl6YXRpb24gYW5kIHRyYWNpbmcuCisKK3BsdWdn
eSBpcyB0aGUgY3Jpc3RhbGxpemVkIGNvcmUgb2YgcGx1Z2luIG1hbmFnZW1lbnQgYXMgdXNlZAor
Ynkgc29tZSAxNTAgcGx1Z2lucyBmb3IgcHl0ZXN0LgorCitQbHVnZ3kgdXNlcyBzZW1hbnRpYyB2
ZXJzaW9uaW5nLiBCcmVha2luZyBjaGFuZ2VzIGFyZSBvbmx5IGZvcmVzZWVuIGZvcgorTWFqb3Ig
cmVsZWFzZXMgKGluY3JlbWVudGVkIFggaW4gIlguWS5aIikuICBJZiB5b3Ugd2FudCB0byB1c2Ug
cGx1Z2d5IGluCit5b3VyIHByb2plY3QgeW91IHNob3VsZCB0aHVzIHVzZSBhIGRlcGVuZGVuY3kg
cmVzdHJpY3Rpb24gbGlrZQorInBsdWdneT49MC4xLjAsPDEuMCIgdG8gYXZvaWQgc3VycHJpc2Vz
LgorCitwbHVnZ3kgaXMgY29uY2VybmVkIHdpdGggaG9vayBzcGVjaWZpY2F0aW9uLCBob29rIGlt
cGxlbWVudGF0aW9ucyBhbmQgaG9vaworY2FsbGluZy4gIEZvciBhbnkgZ2l2ZW4gaG9vayBzcGVj
aWZpY2F0aW9uIGEgaG9vayBjYWxsIGludm9rZXMgdXAgdG8gTiBpbXBsZW1lbnRhdGlvbnMuCitB
IGhvb2sgaW1wbGVtZW50YXRpb24gY2FuIGluZmx1ZW5jZSBpdHMgcG9zaXRpb24gYW5kIHR5cGUg
b2YgZXhlY3V0aW9uOgoraWYgYXR0cmlidXRlZCAidHJ5Zmlyc3QiIG9yICJ0cnlsYXN0IiBpdCB3
aWxsIGJlIHRyaWVkIHRvIGV4ZWN1dGUKK2ZpcnN0IG9yIGxhc3QuICBIb3dldmVyLCBpZiBhdHRy
aWJ1dGVkICJob29rd3JhcHBlciIgYW4gaW1wbGVtZW50YXRpb24KK2NhbiB3cmFwIGFsbCBjYWxs
cyB0byBub24taG9va3dyYXBwZXIgaW1wbGVtZW50YXRpb25zLiAgQSBob29rd3JhcHBlcgorY2Fu
IHRodXMgZXhlY3V0ZSBzb21lIGNvZGUgYWhlYWQgYW5kIGFmdGVyIHRoZSBleGVjdXRpb24gb2Yg
b3RoZXIgaG9va3MuCisKK0hvb2sgc3BlY2lmaWNhdGlvbiBpcyBkb25lIGJ5IHdheSBvZiBhIHJl
Z3VsYXIgcHl0aG9uIGZ1bmN0aW9uIHdoZXJlCitib3RoIHRoZSBmdW5jdGlvbiBuYW1lIGFuZCB0
aGUgbmFtZXMgb2YgYWxsIGl0cyBhcmd1bWVudHMgYXJlIHNpZ25pZmljYW50LgorRWFjaCBob29r
IGltcGxlbWVudGF0aW9uIGZ1bmN0aW9uIGlzIHZlcmlmaWVkIGFnYWluc3QgdGhlIG9yaWdpbmFs
IHNwZWNpZmljYXRpb24KK2Z1bmN0aW9uLCBpbmNsdWRpbmcgdGhlIG5hbWVzIG9mIGFsbCBpdHMg
YXJndW1lbnRzLiAgVG8gYWxsb3cgZm9yIGhvb2sgc3BlY2lmaWNhdGlvbnMKK3RvIGV2b2x2ZSBv
dmVyIHRoZSBsaXZldGltZSBvZiBhIHByb2plY3QsIGhvb2sgaW1wbGVtZW50YXRpb25zIGNhbgor
YWNjZXB0IGxlc3MgYXJndW1lbnRzLiAgT25lIGNhbiB0aHVzIGFkZCBuZXcgYXJndW1lbnRzIGFu
ZCBzZW1hbnRpY3MgdG8KK2EgaG9vayBzcGVjaWZpY2F0aW9uIGJ5IGFkZGluZyBhbm90aGVyIGFy
Z3VtZW50IHR5cGljYWxseSB3aXRob3V0IGJyZWFraW5nCitleGlzdGluZyBob29rIGltcGxlbWVu
dGF0aW9ucy4KKworVGhlIGNob3NlbiBhcHByb2FjaCBpcyBtZWFudCB0byBsZXQgYSBob29rIGRl
c2lnbmVyIHRoaW5rIGNhcmVmdWx5IGFib3V0Cit3aGljaCBvYmplY3RzIGFyZSBuZWVkZWQgYnkg
YW4gZXh0ZW5zaW9uIHdyaXRlci4gIEJ5IGNvbnRyYXN0LCBzdWJjbGFzcy1iYXNlZAorZXh0ZW5z
aW9uIG1lY2hhbmlzbXMgb2Z0ZW4gZXhwb3NlIGEgbG90IG1vcmUgc3RhdGUgYW5kIGJlaGF2aW91
ciB0aGFuIG5lZWRlZCwKK3RodXMgcmVzdHJpY3RpbmcgZnV0dXJlIGRldmVsb3BtZW50cy4KKwor
UGx1Z2d5IGN1cnJlbnRseSBjb25zaXN0cyBvZiBmdW5jdGlvbmFsaXR5IGZvcjoKKworLSBhIHdh
eSB0byByZWdpc3RlciBuZXcgaG9vayBzcGVjaWZpY2F0aW9ucy4gIFdpdGhvdXQgYSBob29rCisg
IHNwZWNpZmljYXRpb24gbm8gaG9vayBjYWxsaW5nIGNhbiBiZSBwZXJmb3JtZWQuCisKKy0gYSBy
ZWdpc3RyeSBvZiBwbHVnaW5zIHdoaWNoIGNvbnRhaW4gaG9vayBpbXBsZW1lbnRhdGlvbiBmdW5j
dGlvbnMuICBJdAorICBpcyBwb3NzaWJsZSB0byByZWdpc3RlciBwbHVnaW5zIGZvciB3aGljaCBh
IGhvb2sgc3BlY2lmaWNhdGlvbiBpcyBub3QgeWV0CisgIGtub3duIGFuZCB2YWxpZGF0ZSBhbGwg
aG9va3Mgd2hlbiB0aGUgc3lzdGVtIGlzIGluIGEgbW9yZSByZWZlcmVudGlhbGx5CisgIGNvbnNp
c3RlbnQgc3RhdGUuICBTZXR0aW5nIGFuICJvcHRpb25hbGhvb2siIGF0dHJpYnV0aW9uIHRvIGEg
aG9vaworICBpbXBsZW1lbnRhdGlvbiB3aWxsIGF2b2lkIFBsdWdpblZhbGlkYXRpb25FcnJvcidz
IGlmIGEgc3BlY2lmaWNhdGlvbgorICBpcyBtaXNzaW5nLiAgVGhpcyBhbGxvd3MgdG8gaGF2ZSBv
cHRpb25hbCBpbnRlZ3JhdGlvbiBiZXR3ZWVuIHBsdWdpbnMuCisKKy0gYSAiaG9vayIgcmVsYXkg
b2JqZWN0IGZyb20gd2hpY2ggeW91IGNhbiBsYXVuY2ggMTpOIGNhbGxzIHRvCisgIHJlZ2lzdGVy
ZWQgaG9vayBpbXBsZW1lbnRhdGlvbiBmdW5jdGlvbnMKKworLSBhIG1lY2hhbmlzbSBmb3Igb3Jk
ZXJpbmcgaG9vayBpbXBsZW1lbnRhdGlvbiBmdW5jdGlvbnMKKworLSBtZWNoYW5pc21zIGZvciB0
d28gZGlmZmVyZW50IHR5cGUgb2YgMTpOIGNhbGxzOiAiZmlyc3RyZXN1bHQiIGZvciB3aGVuCisg
IHRoZSBjYWxsIHNob3VsZCBzdG9wIHdoZW4gdGhlIGZpcnN0IGltcGxlbWVudGF0aW9uIHJldHVy
bnMgYSBub24tTm9uZSByZXN1bHQuCisgIEFuZCB0aGUgb3RoZXIgKGRlZmF1bHQpIHdheSBvZiBn
dWFyYW50ZWVpbmcgdGhhdCBhbGwgaG9vayBpbXBsZW1lbnRhdGlvbnMKKyAgd2lsbCBiZSBjYWxs
ZWQgYW5kIHRoZWlyIG5vbi1Ob25lIHJlc3VsdCBjb2xsZWN0ZWQuCisKKy0gbWVjaGFuaXNtcyBm
b3IgImhpc3RvcmljIiBleHRlbnNpb24gcG9pbnRzIHN1Y2ggdGhhdCBhbGwgbmV3bHkKKyAgcmVn
aXN0ZXJlZCBmdW5jdGlvbnMgd2lsbCByZWNlaXZlIGFsbCBob29rIGNhbGxzIHRoYXQgaGFwcGVu
ZWQKKyAgYmVmb3JlIHRoZWlyIHJlZ2lzdHJhdGlvbi4KKworLSBhIG1lY2hhbmlzbSBmb3IgZGlz
Y292ZXJpbmcgcGx1Z2luIG9iamVjdHMgd2hpY2ggYXJlIGJhc2VkIG9uCisgIHNldHVwdG9vbHMg
YmFzZWQgZW50cnkgcG9pbnRzLgorCistIGEgc2ltcGxlIHRyYWNpbmcgbWVjaGFuaXNtLCBpbmNs
dWRpbmcgdHJhY2luZyBvZiBwbHVnaW4gY2FsbHMgYW5kCisgIHRoZWlyIGFyZ3VtZW50cy4KKwor
IiIiCitpbXBvcnQgc3lzCitpbXBvcnQgaW5zcGVjdAorCitfX3ZlcnNpb25fXyA9ICcwLjMuMScK
K19fYWxsX18gPSBbIlBsdWdpbk1hbmFnZXIiLCAiUGx1Z2luVmFsaWRhdGlvbkVycm9yIiwKKyAg
ICAgICAgICAgIkhvb2tzcGVjTWFya2VyIiwgIkhvb2tpbXBsTWFya2VyIl0KKworX3B5MyA9IHN5
cy52ZXJzaW9uX2luZm8gPiAoMywgMCkKKworCitjbGFzcyBIb29rc3BlY01hcmtlcjoKKyAgICAi
IiIgRGVjb3JhdG9yIGhlbHBlciBjbGFzcyBmb3IgbWFya2luZyBmdW5jdGlvbnMgYXMgaG9vayBz
cGVjaWZpY2F0aW9ucy4KKworICAgIFlvdSBjYW4gaW5zdGFudGlhdGUgaXQgd2l0aCBhIHByb2pl
Y3RfbmFtZSB0byBnZXQgYSBkZWNvcmF0b3IuCisgICAgQ2FsbGluZyBQbHVnaW5NYW5hZ2VyLmFk
ZF9ob29rc3BlY3MgbGF0ZXIgd2lsbCBkaXNjb3ZlciBhbGwgbWFya2VkIGZ1bmN0aW9ucworICAg
IGlmIHRoZSBQbHVnaW5NYW5hZ2VyIHVzZXMgdGhlIHNhbWUgcHJvamVjdF9uYW1lLgorICAgICIi
IgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2plY3RfbmFtZSk6CisgICAgICAgIHNlbGYu
cHJvamVjdF9uYW1lID0gcHJvamVjdF9uYW1lCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgZnVu
Y3Rpb249Tm9uZSwgZmlyc3RyZXN1bHQ9RmFsc2UsIGhpc3RvcmljPUZhbHNlKToKKyAgICAgICAg
IiIiIGlmIHBhc3NlZCBhIGZ1bmN0aW9uLCBkaXJlY3RseSBzZXRzIGF0dHJpYnV0ZXMgb24gdGhl
IGZ1bmN0aW9uCisgICAgICAgIHdoaWNoIHdpbGwgbWFrZSBpdCBkaXNjb3ZlcmFibGUgdG8gYWRk
X2hvb2tzcGVjcygpLiAgSWYgcGFzc2VkIG5vCisgICAgICAgIGZ1bmN0aW9uLCByZXR1cm5zIGEg
ZGVjb3JhdG9yIHdoaWNoIGNhbiBiZSBhcHBsaWVkIHRvIGEgZnVuY3Rpb24KKyAgICAgICAgbGF0
ZXIgdXNpbmcgdGhlIGF0dHJpYnV0ZXMgc3VwcGxpZWQuCisKKyAgICAgICAgSWYgZmlyc3RyZXN1
bHQgaXMgVHJ1ZSB0aGUgMTpOIGhvb2sgY2FsbCAoTiBiZWluZyB0aGUgbnVtYmVyIG9mIHJlZ2lz
dGVyZWQKKyAgICAgICAgaG9vayBpbXBsZW1lbnRhdGlvbiBmdW5jdGlvbnMpIHdpbGwgc3RvcCBh
dCBJPD1OIHdoZW4gdGhlIEkndGggZnVuY3Rpb24KKyAgICAgICAgcmV0dXJucyBhIG5vbi1Ob25l
IHJlc3VsdC4KKworICAgICAgICBJZiBoaXN0b3JpYyBpcyBUcnVlIGNhbGxzIHRvIGEgaG9vayB3
aWxsIGJlIG1lbW9yaXplZCBhbmQgcmVwbGF5ZWQKKyAgICAgICAgb24gbGF0ZXIgcmVnaXN0ZXJl
ZCBwbHVnaW5zLgorCisgICAgICAgICIiIgorICAgICAgICBkZWYgc2V0YXR0cl9ob29rc3BlY19v
cHRzKGZ1bmMpOgorICAgICAgICAgICAgaWYgaGlzdG9yaWMgYW5kIGZpcnN0cmVzdWx0OgorICAg
ICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImNhbm5vdCBoYXZlIGEgaGlzdG9yaWMgZmly
c3RyZXN1bHQgaG9vayIpCisgICAgICAgICAgICBzZXRhdHRyKGZ1bmMsIHNlbGYucHJvamVjdF9u
YW1lICsgIl9zcGVjIiwKKyAgICAgICAgICAgICAgICAgICBkaWN0KGZpcnN0cmVzdWx0PWZpcnN0
cmVzdWx0LCBoaXN0b3JpYz1oaXN0b3JpYykpCisgICAgICAgICAgICByZXR1cm4gZnVuYworCisg
ICAgICAgIGlmIGZ1bmN0aW9uIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHNldGF0
dHJfaG9va3NwZWNfb3B0cyhmdW5jdGlvbikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJl
dHVybiBzZXRhdHRyX2hvb2tzcGVjX29wdHMKKworCitjbGFzcyBIb29raW1wbE1hcmtlcjoKKyAg
ICAiIiIgRGVjb3JhdG9yIGhlbHBlciBjbGFzcyBmb3IgbWFya2luZyBmdW5jdGlvbnMgYXMgaG9v
ayBpbXBsZW1lbnRhdGlvbnMuCisKKyAgICBZb3UgY2FuIGluc3RhbnRpYXRlIHdpdGggYSBwcm9q
ZWN0X25hbWUgdG8gZ2V0IGEgZGVjb3JhdG9yLgorICAgIENhbGxpbmcgUGx1Z2luTWFuYWdlci5y
ZWdpc3RlciBsYXRlciB3aWxsIGRpc2NvdmVyIGFsbCBtYXJrZWQgZnVuY3Rpb25zCisgICAgaWYg
dGhlIFBsdWdpbk1hbmFnZXIgdXNlcyB0aGUgc2FtZSBwcm9qZWN0X25hbWUuCisgICAgIiIiCisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2plY3RfbmFtZSk6CisgICAgICAgIHNlbGYucHJvamVj
dF9uYW1lID0gcHJvamVjdF9uYW1lCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgZnVuY3Rpb249
Tm9uZSwgaG9va3dyYXBwZXI9RmFsc2UsIG9wdGlvbmFsaG9vaz1GYWxzZSwKKyAgICAgICAgICAg
ICAgICAgdHJ5Zmlyc3Q9RmFsc2UsIHRyeWxhc3Q9RmFsc2UpOgorCisgICAgICAgICIiIiBpZiBw
YXNzZWQgYSBmdW5jdGlvbiwgZGlyZWN0bHkgc2V0cyBhdHRyaWJ1dGVzIG9uIHRoZSBmdW5jdGlv
bgorICAgICAgICB3aGljaCB3aWxsIG1ha2UgaXQgZGlzY292ZXJhYmxlIHRvIHJlZ2lzdGVyKCku
ICBJZiBwYXNzZWQgbm8gZnVuY3Rpb24sCisgICAgICAgIHJldHVybnMgYSBkZWNvcmF0b3Igd2hp
Y2ggY2FuIGJlIGFwcGxpZWQgdG8gYSBmdW5jdGlvbiBsYXRlciB1c2luZworICAgICAgICB0aGUg
YXR0cmlidXRlcyBzdXBwbGllZC4KKworICAgICAgICBJZiBvcHRpb25hbGhvb2sgaXMgVHJ1ZSBh
IG1pc3NpbmcgbWF0Y2hpbmcgaG9vayBzcGVjaWZpY2F0aW9uIHdpbGwgbm90IHJlc3VsdAorICAg
ICAgICBpbiBhbiBlcnJvciAoYnkgZGVmYXVsdCBpdCBpcyBhbiBlcnJvciBpZiBubyBtYXRjaGlu
ZyBzcGVjIGlzIGZvdW5kKS4KKworICAgICAgICBJZiB0cnlmaXJzdCBpcyBUcnVlIHRoaXMgaG9v
ayBpbXBsZW1lbnRhdGlvbiB3aWxsIHJ1biBhcyBlYXJseSBhcyBwb3NzaWJsZQorICAgICAgICBp
biB0aGUgY2hhaW4gb2YgTiBob29rIGltcGxlbWVudGF0aW9ucyBmb3IgYSBzcGVjZmljYXRpb24u
CisKKyAgICAgICAgSWYgdHJ5bGFzdCBpcyBUcnVlIHRoaXMgaG9vayBpbXBsZW1lbnRhdGlvbiB3
aWxsIHJ1biBhcyBsYXRlIGFzIHBvc3NpYmxlCisgICAgICAgIGluIHRoZSBjaGFpbiBvZiBOIGhv
b2sgaW1wbGVtZW50YXRpb25zLgorCisgICAgICAgIElmIGhvb2t3cmFwcGVyIGlzIFRydWUgdGhl
IGhvb2sgaW1wbGVtZW50YXRpb25zIG5lZWRzIHRvIGV4ZWN1dGUgZXhhY3RseQorICAgICAgICBv
bmUgInlpZWxkIi4gIFRoZSBjb2RlIGJlZm9yZSB0aGUgeWllbGQgaXMgcnVuIGVhcmx5IGJlZm9y
ZSBhbnkgbm9uLWhvb2t3cmFwcGVyCisgICAgICAgIGZ1bmN0aW9uIGlzIHJ1bi4gIFRoZSBjb2Rl
IGFmdGVyIHRoZSB5aWVsZCBpcyBydW4gYWZ0ZXIgYWxsIG5vbi1ob29rd3JhcHBlcgorICAgICAg
ICBmdW5jdGlvbiBoYXZlIHJ1bi4gIFRoZSB5aWVsZCByZWNlaXZlcyBhbiBgYF9DYWxsT3V0Y29t
ZWBgIG9iamVjdCByZXByZXNlbnRpbmcKKyAgICAgICAgdGhlIGV4Y2VwdGlvbiBvciByZXN1bHQg
b3V0Y29tZSBvZiB0aGUgaW5uZXIgY2FsbHMgKGluY2x1ZGluZyBvdGhlciBob29rd3JhcHBlcgor
ICAgICAgICBjYWxscykuCisKKyAgICAgICAgIiIiCisgICAgICAgIGRlZiBzZXRhdHRyX2hvb2tp
bXBsX29wdHMoZnVuYyk6CisgICAgICAgICAgICBzZXRhdHRyKGZ1bmMsIHNlbGYucHJvamVjdF9u
YW1lICsgIl9pbXBsIiwKKyAgICAgICAgICAgICAgICAgICBkaWN0KGhvb2t3cmFwcGVyPWhvb2t3
cmFwcGVyLCBvcHRpb25hbGhvb2s9b3B0aW9uYWxob29rLAorICAgICAgICAgICAgICAgICAgICAg
ICAgdHJ5Zmlyc3Q9dHJ5Zmlyc3QsIHRyeWxhc3Q9dHJ5bGFzdCkpCisgICAgICAgICAgICByZXR1
cm4gZnVuYworCisgICAgICAgIGlmIGZ1bmN0aW9uIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1
cm4gc2V0YXR0cl9ob29raW1wbF9vcHRzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1
cm4gc2V0YXR0cl9ob29raW1wbF9vcHRzKGZ1bmN0aW9uKQorCisKK2RlZiBub3JtYWxpemVfaG9v
a2ltcGxfb3B0cyhvcHRzKToKKyAgICBvcHRzLnNldGRlZmF1bHQoInRyeWZpcnN0IiwgRmFsc2Up
CisgICAgb3B0cy5zZXRkZWZhdWx0KCJ0cnlsYXN0IiwgRmFsc2UpCisgICAgb3B0cy5zZXRkZWZh
dWx0KCJob29rd3JhcHBlciIsIEZhbHNlKQorICAgIG9wdHMuc2V0ZGVmYXVsdCgib3B0aW9uYWxo
b29rIiwgRmFsc2UpCisKKworY2xhc3MgX1RhZ1RyYWNlcjoKKyAgICBkZWYgX19pbml0X18oc2Vs
Zik6CisgICAgICAgIHNlbGYuX3RhZzJwcm9jID0ge30KKyAgICAgICAgc2VsZi53cml0ZXIgPSBO
b25lCisgICAgICAgIHNlbGYuaW5kZW50ID0gMAorCisgICAgZGVmIGdldChzZWxmLCBuYW1lKToK
KyAgICAgICAgcmV0dXJuIF9UYWdUcmFjZXJTdWIoc2VsZiwgKG5hbWUsKSkKKworICAgIGRlZiBm
b3JtYXRfbWVzc2FnZShzZWxmLCB0YWdzLCBhcmdzKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShh
cmdzWy0xXSwgZGljdCk6CisgICAgICAgICAgICBleHRyYSA9IGFyZ3NbLTFdCisgICAgICAgICAg
ICBhcmdzID0gYXJnc1s6LTFdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBleHRyYSA9IHt9
CisKKyAgICAgICAgY29udGVudCA9ICIgIi5qb2luKG1hcChzdHIsIGFyZ3MpKQorICAgICAgICBp
bmRlbnQgPSAiICAiICogc2VsZi5pbmRlbnQKKworICAgICAgICBsaW5lcyA9IFsKKyAgICAgICAg
ICAgICIlcyVzIFslc11cbiIgJSAoaW5kZW50LCBjb250ZW50LCAiOiIuam9pbih0YWdzKSkKKyAg
ICAgICAgXQorCisgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBleHRyYS5pdGVtcygpOgorICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCIlcyAgICAlczogJXNcbiIgJSAoaW5kZW50LCBuYW1lLCB2
YWx1ZSkpCisgICAgICAgIHJldHVybiBsaW5lcworCisgICAgZGVmIHByb2Nlc3NtZXNzYWdlKHNl
bGYsIHRhZ3MsIGFyZ3MpOgorICAgICAgICBpZiBzZWxmLndyaXRlciBpcyBub3QgTm9uZSBhbmQg
YXJnczoKKyAgICAgICAgICAgIGxpbmVzID0gc2VsZi5mb3JtYXRfbWVzc2FnZSh0YWdzLCBhcmdz
KQorICAgICAgICAgICAgc2VsZi53cml0ZXIoJycuam9pbihsaW5lcykpCisgICAgICAgIHRyeToK
KyAgICAgICAgICAgIHNlbGYuX3RhZzJwcm9jW3RhZ3NdKHRhZ3MsIGFyZ3MpCisgICAgICAgIGV4
Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiBzZXR3cml0ZXIoc2Vs
Ziwgd3JpdGVyKToKKyAgICAgICAgc2VsZi53cml0ZXIgPSB3cml0ZXIKKworICAgIGRlZiBzZXRw
cm9jZXNzb3Ioc2VsZiwgdGFncywgcHJvY2Vzc29yKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh0
YWdzLCBzdHIpOgorICAgICAgICAgICAgdGFncyA9IHR1cGxlKHRhZ3Muc3BsaXQoIjoiKSkKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHRhZ3MsIHR1cGxlKQor
ICAgICAgICBzZWxmLl90YWcycHJvY1t0YWdzXSA9IHByb2Nlc3NvcgorCisKK2NsYXNzIF9UYWdU
cmFjZXJTdWI6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJvb3QsIHRhZ3MpOgorICAgICAgICBz
ZWxmLnJvb3QgPSByb290CisgICAgICAgIHNlbGYudGFncyA9IHRhZ3MKKworICAgIGRlZiBfX2Nh
bGxfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHNlbGYucm9vdC5wcm9jZXNzbWVzc2FnZShzZWxm
LnRhZ3MsIGFyZ3MpCisKKyAgICBkZWYgc2V0bXlwcm9jZXNzb3Ioc2VsZiwgcHJvY2Vzc29yKToK
KyAgICAgICAgc2VsZi5yb290LnNldHByb2Nlc3NvcihzZWxmLnRhZ3MsIHByb2Nlc3NvcikKKwor
ICAgIGRlZiBnZXQoc2VsZiwgbmFtZSk6CisgICAgICAgIHJldHVybiBzZWxmLl9fY2xhc3NfXyhz
ZWxmLnJvb3QsIHNlbGYudGFncyArIChuYW1lLCkpCisKKworZGVmIF9yYWlzZV93cmFwZmFpbCh3
cmFwX2NvbnRyb2xsZXIsIG1zZyk6CisgICAgY28gPSB3cmFwX2NvbnRyb2xsZXIuZ2lfY29kZQor
ICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigid3JhcF9jb250cm9sbGVyIGF0ICVyICVzOiVkICVzIiAl
CisgICAgICAgICAgICAgICAgICAgKGNvLmNvX25hbWUsIGNvLmNvX2ZpbGVuYW1lLCBjby5jb19m
aXJzdGxpbmVubywgbXNnKSkKKworCitkZWYgX3dyYXBwZWRfY2FsbCh3cmFwX2NvbnRyb2xsZXIs
IGZ1bmMpOgorICAgICIiIiBXcmFwIGNhbGxpbmcgdG8gYSBmdW5jdGlvbiB3aXRoIGEgZ2VuZXJh
dG9yIHdoaWNoIG5lZWRzIHRvIHlpZWxkCisgICAgZXhhY3RseSBvbmNlLiAgVGhlIHlpZWxkIHBv
aW50IHdpbGwgdHJpZ2dlciBjYWxsaW5nIHRoZSB3cmFwcGVkIGZ1bmN0aW9uCisgICAgYW5kIHJl
dHVybiBpdHMgX0NhbGxPdXRjb21lIHRvIHRoZSB5aWVsZCBwb2ludC4gIFRoZSBnZW5lcmF0b3Ig
dGhlbiBuZWVkcworICAgIHRvIGZpbmlzaCAocmFpc2UgU3RvcEl0ZXJhdGlvbikgaW4gb3JkZXIg
Zm9yIHRoZSB3cmFwcGVkIGNhbGwgdG8gY29tcGxldGUuCisgICAgIiIiCisgICAgdHJ5OgorICAg
ICAgICBuZXh0KHdyYXBfY29udHJvbGxlcikgICAjIGZpcnN0IHlpZWxkCisgICAgZXhjZXB0IFN0
b3BJdGVyYXRpb246CisgICAgICAgIF9yYWlzZV93cmFwZmFpbCh3cmFwX2NvbnRyb2xsZXIsICJk
aWQgbm90IHlpZWxkIikKKyAgICBjYWxsX291dGNvbWUgPSBfQ2FsbE91dGNvbWUoZnVuYykKKyAg
ICB0cnk6CisgICAgICAgIHdyYXBfY29udHJvbGxlci5zZW5kKGNhbGxfb3V0Y29tZSkKKyAgICAg
ICAgX3JhaXNlX3dyYXBmYWlsKHdyYXBfY29udHJvbGxlciwgImhhcyBzZWNvbmQgeWllbGQiKQor
ICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICBwYXNzCisgICAgcmV0dXJuIGNhbGxf
b3V0Y29tZS5nZXRfcmVzdWx0KCkKKworCitjbGFzcyBfQ2FsbE91dGNvbWU6CisgICAgIiIiIE91
dGNvbWUgb2YgYSBmdW5jdGlvbiBjYWxsLCBlaXRoZXIgYW4gZXhjZXB0aW9uIG9yIGEgcHJvcGVy
IHJlc3VsdC4KKyAgICBDYWxsaW5nIHRoZSBgYGdldF9yZXN1bHRgYCBtZXRob2Qgd2lsbCByZXR1
cm4gdGhlIHJlc3VsdCBvciByZXJhaXNlCisgICAgdGhlIGV4Y2VwdGlvbiByYWlzZWQgd2hlbiB0
aGUgZnVuY3Rpb24gd2FzIGNhbGxlZC4gIiIiCisgICAgZXhjaW5mbyA9IE5vbmUKKworICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBmdW5jKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5y
ZXN1bHQgPSBmdW5jKCkKKyAgICAgICAgZXhjZXB0IEJhc2VFeGNlcHRpb246CisgICAgICAgICAg
ICBzZWxmLmV4Y2luZm8gPSBzeXMuZXhjX2luZm8oKQorCisgICAgZGVmIGZvcmNlX3Jlc3VsdChz
ZWxmLCByZXN1bHQpOgorICAgICAgICBzZWxmLnJlc3VsdCA9IHJlc3VsdAorICAgICAgICBzZWxm
LmV4Y2luZm8gPSBOb25lCisKKyAgICBkZWYgZ2V0X3Jlc3VsdChzZWxmKToKKyAgICAgICAgaWYg
c2VsZi5leGNpbmZvIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5yZXN1bHQKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIGV4ID0gc2VsZi5leGNpbmZvCisgICAgICAgICAgICBp
ZiBfcHkzOgorICAgICAgICAgICAgICAgIHJhaXNlIGV4WzFdLndpdGhfdHJhY2ViYWNrKGV4WzJd
KQorICAgICAgICAgICAgX3JlcmFpc2UoKmV4KSAgIyBub3FhCisKK2lmIG5vdCBfcHkzOgorICAg
IGV4ZWMoIiIiCitkZWYgX3JlcmFpc2UoY2xzLCB2YWwsIHRiKToKKyAgICByYWlzZSBjbHMsIHZh
bCwgdGIKKyIiIikKKworCitjbGFzcyBfVHJhY2VkSG9va0V4ZWN1dGlvbjoKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgcGx1Z2lubWFuYWdlciwgYmVmb3JlLCBhZnRlcik6CisgICAgICAgIHNlbGYu
cGx1Z2lubWFuYWdlciA9IHBsdWdpbm1hbmFnZXIKKyAgICAgICAgc2VsZi5iZWZvcmUgPSBiZWZv
cmUKKyAgICAgICAgc2VsZi5hZnRlciA9IGFmdGVyCisgICAgICAgIHNlbGYub2xkY2FsbCA9IHBs
dWdpbm1hbmFnZXIuX2lubmVyX2hvb2tleGVjCisgICAgICAgIGFzc2VydCBub3QgaXNpbnN0YW5j
ZShzZWxmLm9sZGNhbGwsIF9UcmFjZWRIb29rRXhlY3V0aW9uKQorICAgICAgICBzZWxmLnBsdWdp
bm1hbmFnZXIuX2lubmVyX2hvb2tleGVjID0gc2VsZgorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYs
IGhvb2ssIGhvb2tfaW1wbHMsIGt3YXJncyk6CisgICAgICAgIHNlbGYuYmVmb3JlKGhvb2submFt
ZSwgaG9va19pbXBscywga3dhcmdzKQorICAgICAgICBvdXRjb21lID0gX0NhbGxPdXRjb21lKGxh
bWJkYTogc2VsZi5vbGRjYWxsKGhvb2ssIGhvb2tfaW1wbHMsIGt3YXJncykpCisgICAgICAgIHNl
bGYuYWZ0ZXIob3V0Y29tZSwgaG9vay5uYW1lLCBob29rX2ltcGxzLCBrd2FyZ3MpCisgICAgICAg
IHJldHVybiBvdXRjb21lLmdldF9yZXN1bHQoKQorCisgICAgZGVmIHVuZG8oc2VsZik6CisgICAg
ICAgIHNlbGYucGx1Z2lubWFuYWdlci5faW5uZXJfaG9va2V4ZWMgPSBzZWxmLm9sZGNhbGwKKwor
CitjbGFzcyBQbHVnaW5NYW5hZ2VyKG9iamVjdCk6CisgICAgIiIiIENvcmUgUGx1Z2lubWFuYWdl
ciBjbGFzcyB3aGljaCBtYW5hZ2VzIHJlZ2lzdHJhdGlvbgorICAgIG9mIHBsdWdpbiBvYmplY3Rz
IGFuZCAxOk4gaG9vayBjYWxsaW5nLgorCisgICAgWW91IGNhbiByZWdpc3RlciBuZXcgaG9va3Mg
YnkgY2FsbGluZyBgYGFkZGhvb2tzKG1vZHVsZV9vcl9jbGFzcylgYC4KKyAgICBZb3UgY2FuIHJl
Z2lzdGVyIHBsdWdpbiBvYmplY3RzICh3aGljaCBjb250YWluIGhvb2tzKSBieSBjYWxsaW5nCisg
ICAgYGByZWdpc3RlcihwbHVnaW4pYGAuICBUaGUgUGx1Z2lubWFuYWdlciBpcyBpbml0aWFsaXpl
ZCB3aXRoIGEKKyAgICBwcmVmaXggdGhhdCBpcyBzZWFyY2hlZCBmb3IgaW4gdGhlIG5hbWVzIG9m
IHRoZSBkaWN0IG9mIHJlZ2lzdGVyZWQKKyAgICBwbHVnaW4gb2JqZWN0cy4gIEFuIG9wdGlvbmFs
IGV4Y2x1ZGVmdW5jIGFsbG93cyB0byBibGFja2xpc3QgbmFtZXMgd2hpY2gKKyAgICBhcmUgbm90
IGNvbnNpZGVyZWQgYXMgaG9va3MgZGVzcGl0ZSBhIG1hdGNoaW5nIHByZWZpeC4KKworICAgIEZv
ciBkZWJ1Z2dpbmcgcHVycG9zZXMgeW91IGNhbiBjYWxsIGBgZW5hYmxlX3RyYWNpbmcoKWBgCisg
ICAgd2hpY2ggd2lsbCBzdWJzZXF1ZW50bHkgc2VuZCBkZWJ1ZyBpbmZvcm1hdGlvbiB0byB0aGUg
dHJhY2UgaGVscGVyLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2plY3Rf
bmFtZSwgaW1wbHByZWZpeD1Ob25lKToKKyAgICAgICAgIiIiIGlmIGltcGxwcmVmaXggaXMgZ2l2
ZW4gaW1wbGVtZW50YXRpb24gZnVuY3Rpb25zCisgICAgICAgIHdpbGwgYmUgcmVjb2duaXplZCBp
ZiB0aGVpciBuYW1lIG1hdGNoZXMgdGhlIGltcGxwcmVmaXguICIiIgorICAgICAgICBzZWxmLnBy
b2plY3RfbmFtZSA9IHByb2plY3RfbmFtZQorICAgICAgICBzZWxmLl9uYW1lMnBsdWdpbiA9IHt9
CisgICAgICAgIHNlbGYuX3BsdWdpbjJob29rY2FsbGVycyA9IHt9CisgICAgICAgIHNlbGYuX3Bs
dWdpbl9kaXN0aW5mbyA9IFtdCisgICAgICAgIHNlbGYudHJhY2UgPSBfVGFnVHJhY2VyKCkuZ2V0
KCJwbHVnaW5tYW5hZ2UiKQorICAgICAgICBzZWxmLmhvb2sgPSBfSG9va1JlbGF5KHNlbGYudHJh
Y2Uucm9vdC5nZXQoImhvb2siKSkKKyAgICAgICAgc2VsZi5faW1wbHByZWZpeCA9IGltcGxwcmVm
aXgKKyAgICAgICAgc2VsZi5faW5uZXJfaG9va2V4ZWMgPSBsYW1iZGEgaG9vaywgbWV0aG9kcywg
a3dhcmdzOiBcCisgICAgICAgICAgICBfTXVsdGlDYWxsKG1ldGhvZHMsIGt3YXJncywgaG9vay5z
cGVjX29wdHMpLmV4ZWN1dGUoKQorCisgICAgZGVmIF9ob29rZXhlYyhzZWxmLCBob29rLCBtZXRo
b2RzLCBrd2FyZ3MpOgorICAgICAgICAjIGNhbGxlZCBmcm9tIGFsbCBob29rY2FsbGVyIGluc3Rh
bmNlcy4KKyAgICAgICAgIyBlbmFibGVfdHJhY2luZyB3aWxsIHNldCBpdHMgb3duIHdyYXBwaW5n
IGZ1bmN0aW9uIGF0IHNlbGYuX2lubmVyX2hvb2tleGVjCisgICAgICAgIHJldHVybiBzZWxmLl9p
bm5lcl9ob29rZXhlYyhob29rLCBtZXRob2RzLCBrd2FyZ3MpCisKKyAgICBkZWYgcmVnaXN0ZXIo
c2VsZiwgcGx1Z2luLCBuYW1lPU5vbmUpOgorICAgICAgICAiIiIgUmVnaXN0ZXIgYSBwbHVnaW4g
YW5kIHJldHVybiBpdHMgY2Fub25pY2FsIG5hbWUgb3IgTm9uZSBpZiB0aGUgbmFtZQorICAgICAg
ICBpcyBibG9ja2VkIGZyb20gcmVnaXN0ZXJpbmcuICBSYWlzZSBhIFZhbHVlRXJyb3IgaWYgdGhl
IHBsdWdpbiBpcyBhbHJlYWR5CisgICAgICAgIHJlZ2lzdGVyZWQuICIiIgorICAgICAgICBwbHVn
aW5fbmFtZSA9IG5hbWUgb3Igc2VsZi5nZXRfY2Fub25pY2FsX25hbWUocGx1Z2luKQorCisgICAg
ICAgIGlmIHBsdWdpbl9uYW1lIGluIHNlbGYuX25hbWUycGx1Z2luIG9yIHBsdWdpbiBpbiBzZWxm
Ll9wbHVnaW4yaG9va2NhbGxlcnM6CisgICAgICAgICAgICBpZiBzZWxmLl9uYW1lMnBsdWdpbi5n
ZXQocGx1Z2luX25hbWUsIC0xKSBpcyBOb25lOgorICAgICAgICAgICAgICAgIHJldHVybiAgIyBi
bG9ja2VkIHBsdWdpbiwgcmV0dXJuIE5vbmUgdG8gaW5kaWNhdGUgbm8gcmVnaXN0cmF0aW9uCisg
ICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJQbHVnaW4gYWxyZWFkeSByZWdpc3RlcmVkOiAl
cz0lc1xuJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGx1Z2luX25hbWUsIHBs
dWdpbiwgc2VsZi5fbmFtZTJwbHVnaW4pKQorCisgICAgICAgICMgWFhYIGlmIGFuIGVycm9yIGhh
cHBlbnMgd2Ugc2hvdWxkIG1ha2Ugc3VyZSBubyBzdGF0ZSBoYXMgYmVlbgorICAgICAgICAjIGNo
YW5nZWQgYXQgcG9pbnQgb2YgcmV0dXJuCisgICAgICAgIHNlbGYuX25hbWUycGx1Z2luW3BsdWdp
bl9uYW1lXSA9IHBsdWdpbgorCisgICAgICAgICMgcmVnaXN0ZXIgbWF0Y2hpbmcgaG9vayBpbXBs
ZW1lbnRhdGlvbnMgb2YgdGhlIHBsdWdpbgorICAgICAgICBzZWxmLl9wbHVnaW4yaG9va2NhbGxl
cnNbcGx1Z2luXSA9IGhvb2tjYWxsZXJzID0gW10KKyAgICAgICAgZm9yIG5hbWUgaW4gZGlyKHBs
dWdpbik6CisgICAgICAgICAgICBob29raW1wbF9vcHRzID0gc2VsZi5wYXJzZV9ob29raW1wbF9v
cHRzKHBsdWdpbiwgbmFtZSkKKyAgICAgICAgICAgIGlmIGhvb2tpbXBsX29wdHMgaXMgbm90IE5v
bmU6CisgICAgICAgICAgICAgICAgbm9ybWFsaXplX2hvb2tpbXBsX29wdHMoaG9va2ltcGxfb3B0
cykKKyAgICAgICAgICAgICAgICBtZXRob2QgPSBnZXRhdHRyKHBsdWdpbiwgbmFtZSkKKyAgICAg
ICAgICAgICAgICBob29raW1wbCA9IEhvb2tJbXBsKHBsdWdpbiwgcGx1Z2luX25hbWUsIG1ldGhv
ZCwgaG9va2ltcGxfb3B0cykKKyAgICAgICAgICAgICAgICBob29rID0gZ2V0YXR0cihzZWxmLmhv
b2ssIG5hbWUsIE5vbmUpCisgICAgICAgICAgICAgICAgaWYgaG9vayBpcyBOb25lOgorICAgICAg
ICAgICAgICAgICAgICBob29rID0gX0hvb2tDYWxsZXIobmFtZSwgc2VsZi5faG9va2V4ZWMpCisg
ICAgICAgICAgICAgICAgICAgIHNldGF0dHIoc2VsZi5ob29rLCBuYW1lLCBob29rKQorICAgICAg
ICAgICAgICAgIGVsaWYgaG9vay5oYXNfc3BlYygpOgorICAgICAgICAgICAgICAgICAgICBzZWxm
Ll92ZXJpZnlfaG9vayhob29rLCBob29raW1wbCkKKyAgICAgICAgICAgICAgICAgICAgaG9vay5f
bWF5YmVfYXBwbHlfaGlzdG9yeShob29raW1wbCkKKyAgICAgICAgICAgICAgICBob29rLl9hZGRf
aG9va2ltcGwoaG9va2ltcGwpCisgICAgICAgICAgICAgICAgaG9va2NhbGxlcnMuYXBwZW5kKGhv
b2spCisgICAgICAgIHJldHVybiBwbHVnaW5fbmFtZQorCisgICAgZGVmIHBhcnNlX2hvb2tpbXBs
X29wdHMoc2VsZiwgcGx1Z2luLCBuYW1lKToKKyAgICAgICAgbWV0aG9kID0gZ2V0YXR0cihwbHVn
aW4sIG5hbWUpCisgICAgICAgIHJlcyA9IGdldGF0dHIobWV0aG9kLCBzZWxmLnByb2plY3RfbmFt
ZSArICJfaW1wbCIsIE5vbmUpCisgICAgICAgIGlmIHJlcyBpcyBub3QgTm9uZSBhbmQgbm90IGlz
aW5zdGFuY2UocmVzLCBkaWN0KToKKyAgICAgICAgICAgICMgZmFsc2UgcG9zaXRpdmUKKyAgICAg
ICAgICAgIHJlcyA9IE5vbmUKKyAgICAgICAgZWxpZiByZXMgaXMgTm9uZSBhbmQgc2VsZi5faW1w
bHByZWZpeCBhbmQgbmFtZS5zdGFydHN3aXRoKHNlbGYuX2ltcGxwcmVmaXgpOgorICAgICAgICAg
ICAgcmVzID0ge30KKyAgICAgICAgcmV0dXJuIHJlcworCisgICAgZGVmIHVucmVnaXN0ZXIoc2Vs
ZiwgcGx1Z2luPU5vbmUsIG5hbWU9Tm9uZSk6CisgICAgICAgICIiIiB1bnJlZ2lzdGVyIGEgcGx1
Z2luIG9iamVjdCBhbmQgYWxsIGl0cyBjb250YWluZWQgaG9vayBpbXBsZW1lbnRhdGlvbnMKKyAg
ICAgICAgZnJvbSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMuICIiIgorICAgICAgICBpZiBuYW1l
IGlzIE5vbmU6CisgICAgICAgICAgICBhc3NlcnQgcGx1Z2luIGlzIG5vdCBOb25lLCAib25lIG9m
IG5hbWUgb3IgcGx1Z2luIG5lZWRzIHRvIGJlIHNwZWNpZmllZCIKKyAgICAgICAgICAgIG5hbWUg
PSBzZWxmLmdldF9uYW1lKHBsdWdpbikKKworICAgICAgICBpZiBwbHVnaW4gaXMgTm9uZToKKyAg
ICAgICAgICAgIHBsdWdpbiA9IHNlbGYuZ2V0X3BsdWdpbihuYW1lKQorCisgICAgICAgICMgaWYg
c2VsZi5fbmFtZTJwbHVnaW5bbmFtZV0gPT0gTm9uZSByZWdpc3RyYXRpb24gd2FzIGJsb2NrZWQ6
IGlnbm9yZQorICAgICAgICBpZiBzZWxmLl9uYW1lMnBsdWdpbi5nZXQobmFtZSk6CisgICAgICAg
ICAgICBkZWwgc2VsZi5fbmFtZTJwbHVnaW5bbmFtZV0KKworICAgICAgICBmb3IgaG9va2NhbGxl
ciBpbiBzZWxmLl9wbHVnaW4yaG9va2NhbGxlcnMucG9wKHBsdWdpbiwgW10pOgorICAgICAgICAg
ICAgaG9va2NhbGxlci5fcmVtb3ZlX3BsdWdpbihwbHVnaW4pCisKKyAgICAgICAgcmV0dXJuIHBs
dWdpbgorCisgICAgZGVmIHNldF9ibG9ja2VkKHNlbGYsIG5hbWUpOgorICAgICAgICAiIiIgYmxv
Y2sgcmVnaXN0cmF0aW9ucyBvZiB0aGUgZ2l2ZW4gbmFtZSwgdW5yZWdpc3RlciBpZiBhbHJlYWR5
IHJlZ2lzdGVyZWQuICIiIgorICAgICAgICBzZWxmLnVucmVnaXN0ZXIobmFtZT1uYW1lKQorICAg
ICAgICBzZWxmLl9uYW1lMnBsdWdpbltuYW1lXSA9IE5vbmUKKworICAgIGRlZiBpc19ibG9ja2Vk
KHNlbGYsIG5hbWUpOgorICAgICAgICAiIiIgcmV0dXJuIFRydWUgaWYgdGhlIG5hbWUgYmxvZ3Mg
cmVnaXN0ZXJpbmcgcGx1Z2lucyBvZiB0aGF0IG5hbWUuICIiIgorICAgICAgICByZXR1cm4gbmFt
ZSBpbiBzZWxmLl9uYW1lMnBsdWdpbiBhbmQgc2VsZi5fbmFtZTJwbHVnaW5bbmFtZV0gaXMgTm9u
ZQorCisgICAgZGVmIGFkZF9ob29rc3BlY3Moc2VsZiwgbW9kdWxlX29yX2NsYXNzKToKKyAgICAg
ICAgIiIiIGFkZCBuZXcgaG9vayBzcGVjaWZpY2F0aW9ucyBkZWZpbmVkIGluIHRoZSBnaXZlbiBt
b2R1bGVfb3JfY2xhc3MuCisgICAgICAgIEZ1bmN0aW9ucyBhcmUgcmVjb2duaXplZCBpZiB0aGV5
IGhhdmUgYmVlbiBkZWNvcmF0ZWQgYWNjb3JkaW5nbHkuICIiIgorICAgICAgICBuYW1lcyA9IFtd
CisgICAgICAgIGZvciBuYW1lIGluIGRpcihtb2R1bGVfb3JfY2xhc3MpOgorICAgICAgICAgICAg
c3BlY19vcHRzID0gc2VsZi5wYXJzZV9ob29rc3BlY19vcHRzKG1vZHVsZV9vcl9jbGFzcywgbmFt
ZSkKKyAgICAgICAgICAgIGlmIHNwZWNfb3B0cyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAg
ICBoYyA9IGdldGF0dHIoc2VsZi5ob29rLCBuYW1lLCBOb25lKQorICAgICAgICAgICAgICAgIGlm
IGhjIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGhjID0gX0hvb2tDYWxsZXIobmFtZSwg
c2VsZi5faG9va2V4ZWMsIG1vZHVsZV9vcl9jbGFzcywgc3BlY19vcHRzKQorICAgICAgICAgICAg
ICAgICAgICBzZXRhdHRyKHNlbGYuaG9vaywgbmFtZSwgaGMpCisgICAgICAgICAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgICAgICAgICAgIyBwbHVnaW5zIHJlZ2lzdGVyZWQgdGhpcyBob29rIHdp
dGhvdXQga25vd2luZyB0aGUgc3BlYworICAgICAgICAgICAgICAgICAgICBoYy5zZXRfc3BlY2lm
aWNhdGlvbihtb2R1bGVfb3JfY2xhc3MsIHNwZWNfb3B0cykKKyAgICAgICAgICAgICAgICAgICAg
Zm9yIGhvb2tmdW5jdGlvbiBpbiAoaGMuX3dyYXBwZXJzICsgaGMuX25vbndyYXBwZXJzKToKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3ZlcmlmeV9ob29rKGhjLCBob29rZnVuY3Rpb24p
CisgICAgICAgICAgICAgICAgbmFtZXMuYXBwZW5kKG5hbWUpCisKKyAgICAgICAgaWYgbm90IG5h
bWVzOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiZGlkIG5vdCBmaW5kIGFueSAlciBo
b29rcyBpbiAlciIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5wcm9qZWN0
X25hbWUsIG1vZHVsZV9vcl9jbGFzcykpCisKKyAgICBkZWYgcGFyc2VfaG9va3NwZWNfb3B0cyhz
ZWxmLCBtb2R1bGVfb3JfY2xhc3MsIG5hbWUpOgorICAgICAgICBtZXRob2QgPSBnZXRhdHRyKG1v
ZHVsZV9vcl9jbGFzcywgbmFtZSkKKyAgICAgICAgcmV0dXJuIGdldGF0dHIobWV0aG9kLCBzZWxm
LnByb2plY3RfbmFtZSArICJfc3BlYyIsIE5vbmUpCisKKyAgICBkZWYgZ2V0X3BsdWdpbnMoc2Vs
Zik6CisgICAgICAgICIiIiByZXR1cm4gdGhlIHNldCBvZiByZWdpc3RlcmVkIHBsdWdpbnMuICIi
IgorICAgICAgICByZXR1cm4gc2V0KHNlbGYuX3BsdWdpbjJob29rY2FsbGVycykKKworICAgIGRl
ZiBpc19yZWdpc3RlcmVkKHNlbGYsIHBsdWdpbik6CisgICAgICAgICIiIiBSZXR1cm4gVHJ1ZSBp
ZiB0aGUgcGx1Z2luIGlzIGFscmVhZHkgcmVnaXN0ZXJlZC4gIiIiCisgICAgICAgIHJldHVybiBw
bHVnaW4gaW4gc2VsZi5fcGx1Z2luMmhvb2tjYWxsZXJzCisKKyAgICBkZWYgZ2V0X2Nhbm9uaWNh
bF9uYW1lKHNlbGYsIHBsdWdpbik6CisgICAgICAgICIiIiBSZXR1cm4gY2Fub25pY2FsIG5hbWUg
Zm9yIGEgcGx1Z2luIG9iamVjdC4gTm90ZSB0aGF0IGEgcGx1Z2luCisgICAgICAgIG1heSBiZSBy
ZWdpc3RlcmVkIHVuZGVyIGEgZGlmZmVyZW50IG5hbWUgd2hpY2ggd2FzIHNwZWNpZmllZAorICAg
ICAgICBieSB0aGUgY2FsbGVyIG9mIHJlZ2lzdGVyKHBsdWdpbiwgbmFtZSkuIFRvIG9idGFpbiB0
aGUgbmFtZQorICAgICAgICBvZiBhbiByZWdpc3RlcmVkIHBsdWdpbiB1c2UgYGBnZXRfbmFtZShw
bHVnaW4pYGAgaW5zdGVhZC4iIiIKKyAgICAgICAgcmV0dXJuIGdldGF0dHIocGx1Z2luLCAiX19u
YW1lX18iLCBOb25lKSBvciBzdHIoaWQocGx1Z2luKSkKKworICAgIGRlZiBnZXRfcGx1Z2luKHNl
bGYsIG5hbWUpOgorICAgICAgICAiIiIgUmV0dXJuIGEgcGx1Z2luIG9yIE5vbmUgZm9yIHRoZSBn
aXZlbiBuYW1lLiAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX25hbWUycGx1Z2luLmdldChuYW1l
KQorCisgICAgZGVmIGdldF9uYW1lKHNlbGYsIHBsdWdpbik6CisgICAgICAgICIiIiBSZXR1cm4g
bmFtZSBmb3IgcmVnaXN0ZXJlZCBwbHVnaW4gb3IgTm9uZSBpZiBub3QgcmVnaXN0ZXJlZC4gIiIi
CisgICAgICAgIGZvciBuYW1lLCB2YWwgaW4gc2VsZi5fbmFtZTJwbHVnaW4uaXRlbXMoKToKKyAg
ICAgICAgICAgIGlmIHBsdWdpbiA9PSB2YWw6CisgICAgICAgICAgICAgICAgcmV0dXJuIG5hbWUK
KworICAgIGRlZiBfdmVyaWZ5X2hvb2soc2VsZiwgaG9vaywgaG9va2ltcGwpOgorICAgICAgICBp
ZiBob29rLmlzX2hpc3RvcmljKCkgYW5kIGhvb2tpbXBsLmhvb2t3cmFwcGVyOgorICAgICAgICAg
ICAgcmFpc2UgUGx1Z2luVmFsaWRhdGlvbkVycm9yKAorICAgICAgICAgICAgICAgICJQbHVnaW4g
JXJcbmhvb2sgJXJcbmhpc3RvcmljIGluY29tcGF0aWJsZSB0byBob29rd3JhcHBlciIgJQorICAg
ICAgICAgICAgICAgIChob29raW1wbC5wbHVnaW5fbmFtZSwgaG9vay5uYW1lKSkKKworICAgICAg
ICBmb3IgYXJnIGluIGhvb2tpbXBsLmFyZ25hbWVzOgorICAgICAgICAgICAgaWYgYXJnIG5vdCBp
biBob29rLmFyZ25hbWVzOgorICAgICAgICAgICAgICAgIHJhaXNlIFBsdWdpblZhbGlkYXRpb25F
cnJvcigKKyAgICAgICAgICAgICAgICAgICAgIlBsdWdpbiAlclxuaG9vayAlclxuYXJndW1lbnQg
JXIgbm90IGF2YWlsYWJsZVxuIgorICAgICAgICAgICAgICAgICAgICAicGx1Z2luIGRlZmluaXRp
b246ICVzXG4iCisgICAgICAgICAgICAgICAgICAgICJhdmFpbGFibGUgaG9va2FyZ3M6ICVzIiAl
CisgICAgICAgICAgICAgICAgICAgIChob29raW1wbC5wbHVnaW5fbmFtZSwgaG9vay5uYW1lLCBh
cmcsCisgICAgICAgICAgICAgICAgICAgIF9mb3JtYXRkZWYoaG9va2ltcGwuZnVuY3Rpb24pLCAi
LCAiLmpvaW4oaG9vay5hcmduYW1lcykpKQorCisgICAgZGVmIGNoZWNrX3BlbmRpbmcoc2VsZik6
CisgICAgICAgICIiIiBWZXJpZnkgdGhhdCBhbGwgaG9va3Mgd2hpY2ggaGF2ZSBub3QgYmVlbiB2
ZXJpZmllZCBhZ2FpbnN0CisgICAgICAgIGEgaG9vayBzcGVjaWZpY2F0aW9uIGFyZSBvcHRpb25h
bCwgb3RoZXJ3aXNlIHJhaXNlIFBsdWdpblZhbGlkYXRpb25FcnJvciIiIgorICAgICAgICBmb3Ig
bmFtZSBpbiBzZWxmLmhvb2suX19kaWN0X186CisgICAgICAgICAgICBpZiBuYW1lWzBdICE9ICJf
IjoKKyAgICAgICAgICAgICAgICBob29rID0gZ2V0YXR0cihzZWxmLmhvb2ssIG5hbWUpCisgICAg
ICAgICAgICAgICAgaWYgbm90IGhvb2suaGFzX3NwZWMoKToKKyAgICAgICAgICAgICAgICAgICAg
Zm9yIGhvb2tpbXBsIGluIChob29rLl93cmFwcGVycyArIGhvb2suX25vbndyYXBwZXJzKToKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBob29raW1wbC5vcHRpb25hbGhvb2s6CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgUGx1Z2luVmFsaWRhdGlvbkVycm9yKAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5rbm93biBob29rICVyIGluIHBsdWdpbiAl
ciIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmFtZSwgaG9va2ltcGwucGx1
Z2luKSkKKworICAgIGRlZiBsb2FkX3NldHVwdG9vbHNfZW50cnlwb2ludHMoc2VsZiwgZW50cnlw
b2ludF9uYW1lKToKKyAgICAgICAgIiIiIExvYWQgbW9kdWxlcyBmcm9tIHF1ZXJ5aW5nIHRoZSBz
cGVjaWZpZWQgc2V0dXB0b29scyBlbnRyeXBvaW50IG5hbWUuCisgICAgICAgIFJldHVybiB0aGUg
bnVtYmVyIG9mIGxvYWRlZCBwbHVnaW5zLiAiIiIKKyAgICAgICAgZnJvbSBwa2dfcmVzb3VyY2Vz
IGltcG9ydCBpdGVyX2VudHJ5X3BvaW50cywgRGlzdHJpYnV0aW9uTm90Rm91bmQKKyAgICAgICAg
Zm9yIGVwIGluIGl0ZXJfZW50cnlfcG9pbnRzKGVudHJ5cG9pbnRfbmFtZSk6CisgICAgICAgICAg
ICAjIGlzIHRoZSBwbHVnaW4gcmVnaXN0ZXJlZCBvciBibG9ja2VkPworICAgICAgICAgICAgaWYg
c2VsZi5nZXRfcGx1Z2luKGVwLm5hbWUpIG9yIHNlbGYuaXNfYmxvY2tlZChlcC5uYW1lKToKKyAg
ICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAg
IHBsdWdpbiA9IGVwLmxvYWQoKQorICAgICAgICAgICAgZXhjZXB0IERpc3RyaWJ1dGlvbk5vdEZv
dW5kOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBzZWxmLnJlZ2lzdGVy
KHBsdWdpbiwgbmFtZT1lcC5uYW1lKQorICAgICAgICAgICAgc2VsZi5fcGx1Z2luX2Rpc3RpbmZv
LmFwcGVuZCgocGx1Z2luLCBlcC5kaXN0KSkKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9wbHVn
aW5fZGlzdGluZm8pCisKKyAgICBkZWYgbGlzdF9wbHVnaW5fZGlzdGluZm8oc2VsZik6CisgICAg
ICAgICIiIiByZXR1cm4gbGlzdCBvZiBkaXN0aW5mby9wbHVnaW4gdHVwbGVzIGZvciBhbGwgc2V0
dXB0b29scyByZWdpc3RlcmVkCisgICAgICAgIHBsdWdpbnMuICIiIgorICAgICAgICByZXR1cm4g
bGlzdChzZWxmLl9wbHVnaW5fZGlzdGluZm8pCisKKyAgICBkZWYgbGlzdF9uYW1lX3BsdWdpbihz
ZWxmKToKKyAgICAgICAgIiIiIHJldHVybiBsaXN0IG9mIG5hbWUvcGx1Z2luIHBhaXJzLiAiIiIK
KyAgICAgICAgcmV0dXJuIGxpc3Qoc2VsZi5fbmFtZTJwbHVnaW4uaXRlbXMoKSkKKworICAgIGRl
ZiBnZXRfaG9va2NhbGxlcnMoc2VsZiwgcGx1Z2luKToKKyAgICAgICAgIiIiIGdldCBhbGwgaG9v
ayBjYWxsZXJzIGZvciB0aGUgc3BlY2lmaWVkIHBsdWdpbi4gIiIiCisgICAgICAgIHJldHVybiBz
ZWxmLl9wbHVnaW4yaG9va2NhbGxlcnMuZ2V0KHBsdWdpbikKKworICAgIGRlZiBhZGRfaG9va2Nh
bGxfbW9uaXRvcmluZyhzZWxmLCBiZWZvcmUsIGFmdGVyKToKKyAgICAgICAgIiIiIGFkZCBiZWZv
cmUvYWZ0ZXIgdHJhY2luZyBmdW5jdGlvbnMgZm9yIGFsbCBob29rcworICAgICAgICBhbmQgcmV0
dXJuIGFuIHVuZG8gZnVuY3Rpb24gd2hpY2gsIHdoZW4gY2FsbGVkLAorICAgICAgICB3aWxsIHJl
bW92ZSB0aGUgYWRkZWQgdHJhY2Vycy4KKworICAgICAgICBgYGJlZm9yZShob29rX25hbWUsIGhv
b2tfaW1wbHMsIGt3YXJncylgYCB3aWxsIGJlIGNhbGxlZCBhaGVhZAorICAgICAgICBvZiBhbGwg
aG9vayBjYWxscyBhbmQgcmVjZWl2ZSBhIGhvb2tjYWxsZXIgaW5zdGFuY2UsIGEgbGlzdAorICAg
ICAgICBvZiBIb29rSW1wbCBpbnN0YW5jZXMgYW5kIHRoZSBrZXl3b3JkIGFyZ3VtZW50cyBmb3Ig
dGhlIGhvb2sgY2FsbC4KKworICAgICAgICBgYGFmdGVyKG91dGNvbWUsIGhvb2tfbmFtZSwgaG9v
a19pbXBscywga3dhcmdzKWBgIHJlY2VpdmVzIHRoZQorICAgICAgICBzYW1lIGFyZ3VtZW50cyBh
cyBgYGJlZm9yZWBgIGJ1dCBhbHNvIGEgOnB5OmNsYXNzOmBfQ2FsbE91dGNvbWVgYCBvYmplY3QK
KyAgICAgICAgd2hpY2ggcmVwcmVzZW50cyB0aGUgcmVzdWx0IG9mIHRoZSBvdmVyYWxsIGhvb2sg
Y2FsbC4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBfVHJhY2VkSG9va0V4ZWN1dGlvbihz
ZWxmLCBiZWZvcmUsIGFmdGVyKS51bmRvCisKKyAgICBkZWYgZW5hYmxlX3RyYWNpbmcoc2VsZik6
CisgICAgICAgICIiIiBlbmFibGUgdHJhY2luZyBvZiBob29rIGNhbGxzIGFuZCByZXR1cm4gYW4g
dW5kbyBmdW5jdGlvbi4gIiIiCisgICAgICAgIGhvb2t0cmFjZSA9IHNlbGYuaG9vay5fdHJhY2UK
KworICAgICAgICBkZWYgYmVmb3JlKGhvb2tfbmFtZSwgbWV0aG9kcywga3dhcmdzKToKKyAgICAg
ICAgICAgIGhvb2t0cmFjZS5yb290LmluZGVudCArPSAxCisgICAgICAgICAgICBob29rdHJhY2Uo
aG9va19uYW1lLCBrd2FyZ3MpCisKKyAgICAgICAgZGVmIGFmdGVyKG91dGNvbWUsIGhvb2tfbmFt
ZSwgbWV0aG9kcywga3dhcmdzKToKKyAgICAgICAgICAgIGlmIG91dGNvbWUuZXhjaW5mbyBpcyBO
b25lOgorICAgICAgICAgICAgICAgIGhvb2t0cmFjZSgiZmluaXNoIiwgaG9va19uYW1lLCAiLS0+
Iiwgb3V0Y29tZS5yZXN1bHQpCisgICAgICAgICAgICBob29rdHJhY2Uucm9vdC5pbmRlbnQgLT0g
MQorCisgICAgICAgIHJldHVybiBzZWxmLmFkZF9ob29rY2FsbF9tb25pdG9yaW5nKGJlZm9yZSwg
YWZ0ZXIpCisKKyAgICBkZWYgc3Vic2V0X2hvb2tfY2FsbGVyKHNlbGYsIG5hbWUsIHJlbW92ZV9w
bHVnaW5zKToKKyAgICAgICAgIiIiIFJldHVybiBhIG5ldyBfSG9va0NhbGxlciBpbnN0YW5jZSBm
b3IgdGhlIG5hbWVkIG1ldGhvZAorICAgICAgICB3aGljaCBtYW5hZ2VzIGNhbGxzIHRvIGFsbCBy
ZWdpc3RlcmVkIHBsdWdpbnMgZXhjZXB0IHRoZQorICAgICAgICBvbmVzIGZyb20gcmVtb3ZlX3Bs
dWdpbnMuICIiIgorICAgICAgICBvcmlnID0gZ2V0YXR0cihzZWxmLmhvb2ssIG5hbWUpCisgICAg
ICAgIHBsdWdpbnNfdG9fcmVtb3ZlID0gW3BsdWcgZm9yIHBsdWcgaW4gcmVtb3ZlX3BsdWdpbnMg
aWYgaGFzYXR0cihwbHVnLCBuYW1lKV0KKyAgICAgICAgaWYgcGx1Z2luc190b19yZW1vdmU6Cisg
ICAgICAgICAgICBoYyA9IF9Ib29rQ2FsbGVyKG9yaWcubmFtZSwgb3JpZy5faG9va2V4ZWMsIG9y
aWcuX3NwZWNtb2R1bGVfb3JfY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9y
aWcuc3BlY19vcHRzKQorICAgICAgICAgICAgZm9yIGhvb2tpbXBsIGluIChvcmlnLl93cmFwcGVy
cyArIG9yaWcuX25vbndyYXBwZXJzKToKKyAgICAgICAgICAgICAgICBwbHVnaW4gPSBob29raW1w
bC5wbHVnaW4KKyAgICAgICAgICAgICAgICBpZiBwbHVnaW4gbm90IGluIHBsdWdpbnNfdG9fcmVt
b3ZlOgorICAgICAgICAgICAgICAgICAgICBoYy5fYWRkX2hvb2tpbXBsKGhvb2tpbXBsKQorICAg
ICAgICAgICAgICAgICAgICAjIHdlIGFsc28ga2VlcCB0cmFjayBvZiB0aGlzIGhvb2sgY2FsbGVy
IHNvIGl0CisgICAgICAgICAgICAgICAgICAgICMgZ2V0cyBwcm9wZXJseSByZW1vdmVkIG9uIHBs
dWdpbiB1bnJlZ2lzdHJhdGlvbgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9wbHVnaW4yaG9v
a2NhbGxlcnMuc2V0ZGVmYXVsdChwbHVnaW4sIFtdKS5hcHBlbmQoaGMpCisgICAgICAgICAgICBy
ZXR1cm4gaGMKKyAgICAgICAgcmV0dXJuIG9yaWcKKworCitjbGFzcyBfTXVsdGlDYWxsOgorICAg
ICIiIiBleGVjdXRlIGEgY2FsbCBpbnRvIG11bHRpcGxlIHB5dGhvbiBmdW5jdGlvbnMvbWV0aG9k
cy4gIiIiCisKKyAgICAjIFhYWCBub3RlIHRoYXQgdGhlIF9fbXVsdGljYWxsX18gYXJndW1lbnQg
aXMgc3VwcG9ydGVkIG9ubHkKKyAgICAjIGZvciBweXRlc3QgY29tcGF0aWJpbGl0eSByZWFzb25z
LiAgSXQgd2FzIG5ldmVyIG9mZmljaWFsbHkKKyAgICAjIHN1cHBvcnRlZCB0aGVyZSBhbmQgaXMg
ZXhwbGljaXRseSBkZXByZWNhdGVkIHNpbmNlIDIuOAorICAgICMgc28gd2UgY2FuIHJlbW92ZSBp
dCBzb29uLCBhbGxvd2luZyB0byBhdm9pZCB0aGUgYmVsb3cgcmVjdXJzaW9uCisgICAgIyBpbiBl
eGVjdXRlKCkgYW5kIHNpbXBsaWZ5L3NwZWVkIHVwIHRoZSBleGVjdXRlIGxvb3AuCisKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgaG9va19pbXBscywga3dhcmdzLCBzcGVjb3B0cz17fSk6CisgICAg
ICAgIHNlbGYuaG9va19pbXBscyA9IGhvb2tfaW1wbHMKKyAgICAgICAgc2VsZi5rd2FyZ3MgPSBr
d2FyZ3MKKyAgICAgICAgc2VsZi5rd2FyZ3NbIl9fbXVsdGljYWxsX18iXSA9IHNlbGYKKyAgICAg
ICAgc2VsZi5zcGVjb3B0cyA9IHNwZWNvcHRzCisKKyAgICBkZWYgZXhlY3V0ZShzZWxmKToKKyAg
ICAgICAgYWxsX2t3YXJncyA9IHNlbGYua3dhcmdzCisgICAgICAgIHNlbGYucmVzdWx0cyA9IHJl
c3VsdHMgPSBbXQorICAgICAgICBmaXJzdHJlc3VsdCA9IHNlbGYuc3BlY29wdHMuZ2V0KCJmaXJz
dHJlc3VsdCIpCisKKyAgICAgICAgd2hpbGUgc2VsZi5ob29rX2ltcGxzOgorICAgICAgICAgICAg
aG9va19pbXBsID0gc2VsZi5ob29rX2ltcGxzLnBvcCgpCisgICAgICAgICAgICBhcmdzID0gW2Fs
bF9rd2FyZ3NbYXJnbmFtZV0gZm9yIGFyZ25hbWUgaW4gaG9va19pbXBsLmFyZ25hbWVzXQorICAg
ICAgICAgICAgaWYgaG9va19pbXBsLmhvb2t3cmFwcGVyOgorICAgICAgICAgICAgICAgIHJldHVy
biBfd3JhcHBlZF9jYWxsKGhvb2tfaW1wbC5mdW5jdGlvbigqYXJncyksIHNlbGYuZXhlY3V0ZSkK
KyAgICAgICAgICAgIHJlcyA9IGhvb2tfaW1wbC5mdW5jdGlvbigqYXJncykKKyAgICAgICAgICAg
IGlmIHJlcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBpZiBmaXJzdHJlc3VsdDoKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcworICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBw
ZW5kKHJlcykKKworICAgICAgICBpZiBub3QgZmlyc3RyZXN1bHQ6CisgICAgICAgICAgICByZXR1
cm4gcmVzdWx0cworCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICBzdGF0dXMgPSAi
JWQgbWV0aHMiICUgKGxlbihzZWxmLmhvb2tfaW1wbHMpLCkKKyAgICAgICAgaWYgaGFzYXR0cihz
ZWxmLCAicmVzdWx0cyIpOgorICAgICAgICAgICAgc3RhdHVzID0gKCIlZCByZXN1bHRzLCAiICUg
bGVuKHNlbGYucmVzdWx0cykpICsgc3RhdHVzCisgICAgICAgIHJldHVybiAiPF9NdWx0aUNhbGwg
JXMsIGt3YXJncz0lcj4iICUgKHN0YXR1cywgc2VsZi5rd2FyZ3MpCisKKworZGVmIHZhcm5hbWVz
KGZ1bmMsIHN0YXJ0aW5kZXg9Tm9uZSk6CisgICAgIiIiIHJldHVybiBhcmd1bWVudCBuYW1lIHR1
cGxlIGZvciBhIGZ1bmN0aW9uLCBtZXRob2QsIGNsYXNzIG9yIGNhbGxhYmxlLgorCisgICAgSW4g
Y2FzZSBvZiBhIGNsYXNzLCBpdHMgIl9faW5pdF9fIiBtZXRob2QgaXMgY29uc2lkZXJlZC4KKyAg
ICBGb3IgbWV0aG9kcyB0aGUgInNlbGYiIHBhcmFtZXRlciBpcyBub3QgaW5jbHVkZWQgdW5sZXNz
IHlvdSBhcmUgcGFzc2luZworICAgIGFuIHVuYm91bmQgbWV0aG9kIHdpdGggUHl0aG9uMyAod2hp
Y2ggaGFzIG5vIHN1cHBvcnRzIGZvciB1bmJvdW5kIG1ldGhvZHMpCisgICAgIiIiCisgICAgY2Fj
aGUgPSBnZXRhdHRyKGZ1bmMsICJfX2RpY3RfXyIsIHt9KQorICAgIHRyeToKKyAgICAgICAgcmV0
dXJuIGNhY2hlWyJfdmFybmFtZXMiXQorICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgcGFz
cworICAgIGlmIGluc3BlY3QuaXNjbGFzcyhmdW5jKToKKyAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgZnVuYyA9IGZ1bmMuX19pbml0X18KKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgor
ICAgICAgICAgICAgcmV0dXJuICgpCisgICAgICAgIHN0YXJ0aW5kZXggPSAxCisgICAgZWxzZToK
KyAgICAgICAgaWYgbm90IGluc3BlY3QuaXNmdW5jdGlvbihmdW5jKSBhbmQgbm90IGluc3BlY3Qu
aXNtZXRob2QoZnVuYyk6CisgICAgICAgICAgICBmdW5jID0gZ2V0YXR0cihmdW5jLCAnX19jYWxs
X18nLCBmdW5jKQorICAgICAgICBpZiBzdGFydGluZGV4IGlzIE5vbmU6CisgICAgICAgICAgICBz
dGFydGluZGV4ID0gaW50KGluc3BlY3QuaXNtZXRob2QoZnVuYykpCisKKyAgICB0cnk6CisgICAg
ICAgIHJhd2NvZGUgPSBmdW5jLl9fY29kZV9fCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgor
ICAgICAgICByZXR1cm4gKCkKKyAgICB0cnk6CisgICAgICAgIHggPSByYXdjb2RlLmNvX3Zhcm5h
bWVzW3N0YXJ0aW5kZXg6cmF3Y29kZS5jb19hcmdjb3VudF0KKyAgICBleGNlcHQgQXR0cmlidXRl
RXJyb3I6CisgICAgICAgIHggPSAoKQorICAgIGVsc2U6CisgICAgICAgIGRlZmF1bHRzID0gZnVu
Yy5fX2RlZmF1bHRzX18KKyAgICAgICAgaWYgZGVmYXVsdHM6CisgICAgICAgICAgICB4ID0geFs6
LWxlbihkZWZhdWx0cyldCisgICAgdHJ5OgorICAgICAgICBjYWNoZVsiX3Zhcm5hbWVzIl0gPSB4
CisgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgcGFzcworICAgIHJldHVybiB4CisKKwor
Y2xhc3MgX0hvb2tSZWxheToKKyAgICAiIiIgaG9vayBob2xkZXIgb2JqZWN0IGZvciBwZXJmb3Jt
aW5nIDE6TiBob29rIGNhbGxzIHdoZXJlIE4gaXMgdGhlIG51bWJlcgorICAgIG9mIHJlZ2lzdGVy
ZWQgcGx1Z2lucy4KKworICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRyYWNlKToK
KyAgICAgICAgc2VsZi5fdHJhY2UgPSB0cmFjZQorCisKK2NsYXNzIF9Ib29rQ2FsbGVyKG9iamVj
dCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGhvb2tfZXhlY3V0ZSwgc3BlY21vZHVs
ZV9vcl9jbGFzcz1Ob25lLCBzcGVjX29wdHM9Tm9uZSk6CisgICAgICAgIHNlbGYubmFtZSA9IG5h
bWUKKyAgICAgICAgc2VsZi5fd3JhcHBlcnMgPSBbXQorICAgICAgICBzZWxmLl9ub253cmFwcGVy
cyA9IFtdCisgICAgICAgIHNlbGYuX2hvb2tleGVjID0gaG9va19leGVjdXRlCisgICAgICAgIGlm
IHNwZWNtb2R1bGVfb3JfY2xhc3MgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBhc3NlcnQgc3Bl
Y19vcHRzIGlzIG5vdCBOb25lCisgICAgICAgICAgICBzZWxmLnNldF9zcGVjaWZpY2F0aW9uKHNw
ZWNtb2R1bGVfb3JfY2xhc3MsIHNwZWNfb3B0cykKKworICAgIGRlZiBoYXNfc3BlYyhzZWxmKToK
KyAgICAgICAgcmV0dXJuIGhhc2F0dHIoc2VsZiwgIl9zcGVjbW9kdWxlX29yX2NsYXNzIikKKwor
ICAgIGRlZiBzZXRfc3BlY2lmaWNhdGlvbihzZWxmLCBzcGVjbW9kdWxlX29yX2NsYXNzLCBzcGVj
X29wdHMpOgorICAgICAgICBhc3NlcnQgbm90IHNlbGYuaGFzX3NwZWMoKQorICAgICAgICBzZWxm
Ll9zcGVjbW9kdWxlX29yX2NsYXNzID0gc3BlY21vZHVsZV9vcl9jbGFzcworICAgICAgICBzcGVj
ZnVuYyA9IGdldGF0dHIoc3BlY21vZHVsZV9vcl9jbGFzcywgc2VsZi5uYW1lKQorICAgICAgICBh
cmduYW1lcyA9IHZhcm5hbWVzKHNwZWNmdW5jLCBzdGFydGluZGV4PWluc3BlY3QuaXNjbGFzcyhz
cGVjbW9kdWxlX29yX2NsYXNzKSkKKyAgICAgICAgYXNzZXJ0ICJzZWxmIiBub3QgaW4gYXJnbmFt
ZXMgICMgc2FuaXR5IGNoZWNrCisgICAgICAgIHNlbGYuYXJnbmFtZXMgPSBbIl9fbXVsdGljYWxs
X18iXSArIGxpc3QoYXJnbmFtZXMpCisgICAgICAgIHNlbGYuc3BlY19vcHRzID0gc3BlY19vcHRz
CisgICAgICAgIGlmIHNwZWNfb3B0cy5nZXQoImhpc3RvcmljIik6CisgICAgICAgICAgICBzZWxm
Ll9jYWxsX2hpc3RvcnkgPSBbXQorCisgICAgZGVmIGlzX2hpc3RvcmljKHNlbGYpOgorICAgICAg
ICByZXR1cm4gaGFzYXR0cihzZWxmLCAiX2NhbGxfaGlzdG9yeSIpCisKKyAgICBkZWYgX3JlbW92
ZV9wbHVnaW4oc2VsZiwgcGx1Z2luKToKKyAgICAgICAgZGVmIHJlbW92ZSh3cmFwcGVycyk6Cisg
ICAgICAgICAgICBmb3IgaSwgbWV0aG9kIGluIGVudW1lcmF0ZSh3cmFwcGVycyk6CisgICAgICAg
ICAgICAgICAgaWYgbWV0aG9kLnBsdWdpbiA9PSBwbHVnaW46CisgICAgICAgICAgICAgICAgICAg
IGRlbCB3cmFwcGVyc1tpXQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAg
ICBpZiByZW1vdmUoc2VsZi5fd3JhcHBlcnMpIGlzIE5vbmU6CisgICAgICAgICAgICBpZiByZW1v
dmUoc2VsZi5fbm9ud3JhcHBlcnMpIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFs
dWVFcnJvcigicGx1Z2luICVyIG5vdCBmb3VuZCIgJSAocGx1Z2luLCkpCisKKyAgICBkZWYgX2Fk
ZF9ob29raW1wbChzZWxmLCBob29raW1wbCk6CisgICAgICAgIGlmIGhvb2tpbXBsLmhvb2t3cmFw
cGVyOgorICAgICAgICAgICAgbWV0aG9kcyA9IHNlbGYuX3dyYXBwZXJzCisgICAgICAgIGVsc2U6
CisgICAgICAgICAgICBtZXRob2RzID0gc2VsZi5fbm9ud3JhcHBlcnMKKworICAgICAgICBpZiBo
b29raW1wbC50cnlsYXN0OgorICAgICAgICAgICAgbWV0aG9kcy5pbnNlcnQoMCwgaG9va2ltcGwp
CisgICAgICAgIGVsaWYgaG9va2ltcGwudHJ5Zmlyc3Q6CisgICAgICAgICAgICBtZXRob2RzLmFw
cGVuZChob29raW1wbCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgZmluZCBsYXN0IG5v
bi10cnlmaXJzdCBtZXRob2QKKyAgICAgICAgICAgIGkgPSBsZW4obWV0aG9kcykgLSAxCisgICAg
ICAgICAgICB3aGlsZSBpID49IDAgYW5kIG1ldGhvZHNbaV0udHJ5Zmlyc3Q6CisgICAgICAgICAg
ICAgICAgaSAtPSAxCisgICAgICAgICAgICBtZXRob2RzLmluc2VydChpICsgMSwgaG9va2ltcGwp
CisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiPF9Ib29rQ2FsbGVy
ICVyPiIgJSAoc2VsZi5uYW1lLCkKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCAqKmt3YXJncyk6
CisgICAgICAgIGFzc2VydCBub3Qgc2VsZi5pc19oaXN0b3JpYygpCisgICAgICAgIHJldHVybiBz
ZWxmLl9ob29rZXhlYyhzZWxmLCBzZWxmLl9ub253cmFwcGVycyArIHNlbGYuX3dyYXBwZXJzLCBr
d2FyZ3MpCisKKyAgICBkZWYgY2FsbF9oaXN0b3JpYyhzZWxmLCBwcm9jPU5vbmUsIGt3YXJncz1O
b25lKToKKyAgICAgICAgc2VsZi5fY2FsbF9oaXN0b3J5LmFwcGVuZCgoa3dhcmdzIG9yIHt9LCBw
cm9jKSkKKyAgICAgICAgIyBoaXN0b3JpemluZyBob29rcyBkb24ndCByZXR1cm4gcmVzdWx0cwor
ICAgICAgICBzZWxmLl9ob29rZXhlYyhzZWxmLCBzZWxmLl9ub253cmFwcGVycyArIHNlbGYuX3dy
YXBwZXJzLCBrd2FyZ3MpCisKKyAgICBkZWYgY2FsbF9leHRyYShzZWxmLCBtZXRob2RzLCBrd2Fy
Z3MpOgorICAgICAgICAiIiIgQ2FsbCB0aGUgaG9vayB3aXRoIHNvbWUgYWRkaXRpb25hbCB0ZW1w
b3JhcmlseSBwYXJ0aWNpcGF0aW5nCisgICAgICAgIG1ldGhvZHMgdXNpbmcgdGhlIHNwZWNpZmll
ZCBrd2FyZ3MgYXMgY2FsbCBwYXJhbWV0ZXJzLiAiIiIKKyAgICAgICAgb2xkID0gbGlzdChzZWxm
Ll9ub253cmFwcGVycyksIGxpc3Qoc2VsZi5fd3JhcHBlcnMpCisgICAgICAgIGZvciBtZXRob2Qg
aW4gbWV0aG9kczoKKyAgICAgICAgICAgIG9wdHMgPSBkaWN0KGhvb2t3cmFwcGVyPUZhbHNlLCB0
cnlsYXN0PUZhbHNlLCB0cnlmaXJzdD1GYWxzZSkKKyAgICAgICAgICAgIGhvb2tpbXBsID0gSG9v
a0ltcGwoTm9uZSwgIjx0ZW1wPiIsIG1ldGhvZCwgb3B0cykKKyAgICAgICAgICAgIHNlbGYuX2Fk
ZF9ob29raW1wbChob29raW1wbCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNl
bGYoKiprd2FyZ3MpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLl9ub253cmFw
cGVycywgc2VsZi5fd3JhcHBlcnMgPSBvbGQKKworICAgIGRlZiBfbWF5YmVfYXBwbHlfaGlzdG9y
eShzZWxmLCBtZXRob2QpOgorICAgICAgICBpZiBzZWxmLmlzX2hpc3RvcmljKCk6CisgICAgICAg
ICAgICBmb3Iga3dhcmdzLCBwcm9jIGluIHNlbGYuX2NhbGxfaGlzdG9yeToKKyAgICAgICAgICAg
ICAgICByZXMgPSBzZWxmLl9ob29rZXhlYyhzZWxmLCBbbWV0aG9kXSwga3dhcmdzKQorICAgICAg
ICAgICAgICAgIGlmIHJlcyBhbmQgcHJvYyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAg
ICAgcHJvYyhyZXNbMF0pCisKKworY2xhc3MgSG9va0ltcGw6CisgICAgZGVmIF9faW5pdF9fKHNl
bGYsIHBsdWdpbiwgcGx1Z2luX25hbWUsIGZ1bmN0aW9uLCBob29rX2ltcGxfb3B0cyk6CisgICAg
ICAgIHNlbGYuZnVuY3Rpb24gPSBmdW5jdGlvbgorICAgICAgICBzZWxmLmFyZ25hbWVzID0gdmFy
bmFtZXMoc2VsZi5mdW5jdGlvbikKKyAgICAgICAgc2VsZi5wbHVnaW4gPSBwbHVnaW4KKyAgICAg
ICAgc2VsZi5vcHRzID0gaG9va19pbXBsX29wdHMKKyAgICAgICAgc2VsZi5wbHVnaW5fbmFtZSA9
IHBsdWdpbl9uYW1lCisgICAgICAgIHNlbGYuX19kaWN0X18udXBkYXRlKGhvb2tfaW1wbF9vcHRz
KQorCisKK2NsYXNzIFBsdWdpblZhbGlkYXRpb25FcnJvcihFeGNlcHRpb24pOgorICAgICIiIiBw
bHVnaW4gZmFpbGVkIHZhbGlkYXRpb24uICIiIgorCisKK2lmIGhhc2F0dHIoaW5zcGVjdCwgJ3Np
Z25hdHVyZScpOgorICAgIGRlZiBfZm9ybWF0ZGVmKGZ1bmMpOgorICAgICAgICByZXR1cm4gIiVz
JXMiICUgKAorICAgICAgICAgICAgZnVuYy5fX25hbWVfXywKKyAgICAgICAgICAgIHN0cihpbnNw
ZWN0LnNpZ25hdHVyZShmdW5jKSkKKyAgICAgICAgKQorZWxzZToKKyAgICBkZWYgX2Zvcm1hdGRl
ZihmdW5jKToKKyAgICAgICAgcmV0dXJuICIlcyVzIiAlICgKKyAgICAgICAgICAgIGZ1bmMuX19u
YW1lX18sCisgICAgICAgICAgICBpbnNwZWN0LmZvcm1hdGFyZ3NwZWMoKmluc3BlY3QuZ2V0YXJn
c3BlYyhmdW5jKSkKKyAgICAgICAgKQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0
ZWQvdzNjL3Rvb2xzL3B5dGVzdC9hcHB2ZXlvci55bWwgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRl
ZC93M2MvdG9vbHMvcHl0ZXN0L2FwcHZleW9yLnltbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uNGI3MzY0NWY3MzUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJU
ZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L2FwcHZleW9yLnltbApAQCAtMCwwICsxLDI4
IEBACitlbnZpcm9ubWVudDoKKyAgQ09WRVJBTExTX1JFUE9fVE9LRU46CisgICAgc2VjdXJlOiAy
Tko1Q3Q1NWNISjlXRWczeGJTcUN1djByZGd6emI2cG56T0lHNU9rTWJUbmR3M3dPQnJYbnRXRm9R
clhpTUZpCisgICAgIyB0aGlzIGlzIHB5dGVzdCdzIHRva2VuIGluIGNvdmVyYWxscy5pbywgZW5j
cnlwdGVkCisgICAgIyB1c2luZyBweXRlc3Rib3QgYWNjb3VudCBhcyBkZXRhaWxlZCBoZXJlOgor
ICAgICMgaHR0cHM6Ly93d3cuYXBwdmV5b3IuY29tL2RvY3MvYnVpbGQtY29uZmlndXJhdGlvbiNz
ZWN1cmUtdmFyaWFibGVzCisKK2luc3RhbGw6CisgIC0gZWNobyBJbnN0YWxsZWQgUHl0aG9ucwor
ICAtIGRpciBjOlxQeXRob24qCisKKyAgIyBpbnN0YWxsIHB5cHkgdXNpbmcgY2hvY28gKHJlZGly
ZWN0IHRvIGEgZmlsZSBhbmQgd3JpdGUgdG8gY29uc29sZSBpbiBjYXNlCisgICMgY2hvY28gaW5z
dGFsbCByZXR1cm5zIG5vbi16ZXJvLCBiZWNhdXNlIGNob2NvIGluc3RhbGwgcHl0aG9uLnB5cHkg
aXMgdG9vCisgICMgbm9pc3kpCisgIC0gY2hvY28gaW5zdGFsbCBweXRob24ucHlweSA+IHB5cHkt
aW5zdC5sb2cgMj4mMSB8fCAodHlwZSBweXB5LWluc3QubG9nICYgZXhpdCAvYiAxKQorICAtIHNl
dCBQQVRIPUM6XHRvb2xzXHB5cHlccHlweTslUEFUSCUgIyBzbyB0b3ggY2FuIGZpbmQgcHlweQor
ICAtIGVjaG8gUHlQeSBpbnN0YWxsZWQKKyAgLSBweXB5IC0tdmVyc2lvbgorCisgIC0gQzpcUHl0
aG9uMzVccHl0aG9uIC1tIHBpcCBpbnN0YWxsIHRveAorCitidWlsZDogZmFsc2UgICMgTm90IGEg
QyMgcHJvamVjdCwgYnVpbGQgc3R1ZmYgYXQgdGhlIHRlc3Qgc3RlcCBpbnN0ZWFkLgorCit0ZXN0
X3NjcmlwdDoKKyAgLSBDOlxQeXRob24zNVxweXRob24gLW0gdG94CisgICMgY292ZXJhbGxzIGlz
IG5vdCBpbiB0b3gncyBlbnZsaXN0LCBwbHVzIGZvciBQUnMgdGhlIHNlY3VyZSB2YXJpYWJsZQor
ICAjIGlzIG5vdCBkZWZpbmVkIHNvIHdlIGhhdmUgdG8gY2hlY2sgZm9yIGl0CisgIC0gaWYgZGVm
aW5lZCBDT1ZFUkFMTFNfUkVQT19UT0tFTiBDOlxQeXRob24zNVxweXRob24gLW0gdG94IC1lIGNv
dmVyYWxscwpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5
dGVzdC9iZW5jaC9iZW5jaC5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9w
eXRlc3QvYmVuY2gvYmVuY2gucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLmNlOTQ5NjQxNzJmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0
ZWQvdzNjL3Rvb2xzL3B5dGVzdC9iZW5jaC9iZW5jaC5weQpAQCAtMCwwICsxLDEyIEBACitpbXBv
cnQgc3lzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgaW1wb3J0IGNQcm9maWxl
CisgICAgaW1wb3J0IHB5dGVzdAorICAgIGltcG9ydCBwc3RhdHMKKyAgICBzY3JpcHQgPSBzeXMu
YXJndlsxOl0gaWYgbGVuKHN5cy5hcmd2KSA+IDEgZWxzZSAiZW1wdHkucHkiCisgICAgc3RhdHMg
PSBjUHJvZmlsZS5ydW4oJ3B5dGVzdC5jbWRsaW5lLm1haW4oJXIpJyAlIHNjcmlwdCwgJ3Byb2Yn
KQorICAgIHAgPSBwc3RhdHMuU3RhdHMoInByb2YiKQorICAgIHAuc3RyaXBfZGlycygpCisgICAg
cC5zb3J0X3N0YXRzKCdjdW11bGF0aXZlJykKKyAgICBwcmludChwLnByaW50X3N0YXRzKDUwMCkp
CmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L2Jl
bmNoL2JlbmNoX2FyZ2NvbXBsZXRlLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rv
b2xzL3B5dGVzdC9iZW5jaC9iZW5jaF9hcmdjb21wbGV0ZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uZDY2YzY2NGYzNDYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJE
cml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L2JlbmNoL2JlbmNoX2FyZ2NvbXBs
ZXRlLnB5CkBAIC0wLDAgKzEsMTkgQEAKKworCisjIDEwMDAwIGl0ZXJhdGlvbnMsIGp1c3QgZm9y
IHJlbGF0aXZlIGNvbXBhcmlzb24KKyMgICAgICAgICAgICAgICAgICAgICAgMi43LjUgICAgIDMu
My4yCisjIEZpbGVzQ29tcGxldGVyICAgICAgIDc1LjExMDkgICA2OS4yMTE2CisjIEZhc3RGaWxl
c0NvbXBsZXRlciAgICAwLjczODMgICAgMS4wNzYwCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFp
bl9fJzoKKyAgICBpbXBvcnQgc3lzCisgICAgaW1wb3J0IHRpbWVpdAorICAgIGZyb20gYXJnY29t
cGxldGUuY29tcGxldGVycyBpbXBvcnQgRmlsZXNDb21wbGV0ZXIKKyAgICBmcm9tIF9weXRlc3Qu
X2FyZ2NvbXBsZXRlIGltcG9ydCBGYXN0RmlsZXNDb21wbGV0ZXIKKyAgICBjb3VudCA9IDEwMDAg
IyBvbmx5IGEgZmV3IHNlY29uZHMKKyAgICBzZXR1cCA9ICdmcm9tIF9fbWFpbl9fIGltcG9ydCBG
YXN0RmlsZXNDb21wbGV0ZXJcbmZjID0gRmFzdEZpbGVzQ29tcGxldGVyKCknCisgICAgcnVuID0g
J2ZjKCIvZCIpJworICAgIHN5cy5zdGRvdXQud3JpdGUoJyVzXG4nICUgKHRpbWVpdC50aW1laXQo
cnVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXR1cD1zZXR1cC5yZXBsYWNl
KCdGYXN0JywgJycpLCBudW1iZXI9Y291bnQpKSkKKyAgICBzeXMuc3Rkb3V0LndyaXRlKCclc1xu
JyAlICh0aW1laXQudGltZWl0KHJ1biwgc2V0dXA9c2V0dXAsIG51bWJlcj1jb3VudCkpKQpkaWZm
IC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9iZW5jaC9l
bXB0eS5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvYmVuY2gv
ZW1wdHkucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmFjNWUyNTcw
MWRhCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xz
L3B5dGVzdC9iZW5jaC9lbXB0eS5weQpAQCAtMCwwICsxLDMgQEAKK2ltcG9ydCBweQorZm9yIGkg
aW4gcmFuZ2UoMTAwMCk6CisgICAgcHkuYnVpbHRpbi5leGVjXygiZGVmIHRlc3RfZnVuY18lZCgp
OiBwYXNzIiAlIGkpCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9v
bHMvcHl0ZXN0L2JlbmNoL21hbnlwYXJhbS5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3cz
Yy90b29scy9weXRlc3QvYmVuY2gvbWFueXBhcmFtLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi5kMmJjYTBlOGFjZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZl
clRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvYmVuY2gvbWFueXBhcmFtLnB5CkBAIC0w
LDAgKzEsMTIgQEAKKworaW1wb3J0IHB5dGVzdAorCitAcHl0ZXN0LmZpeHR1cmUoc2NvcGU9J21v
ZHVsZScsIHBhcmFtcz1yYW5nZSg5NjYpKQorZGVmIGZvbyhyZXF1ZXN0KToKKyAgICByZXR1cm4g
cmVxdWVzdC5wYXJhbQorCitkZWYgdGVzdF9pdChmb28pOgorICAgIHBhc3MKK2RlZiB0ZXN0X2l0
Mihmb28pOgorICAgIHBhc3MKKwpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQv
dzNjL3Rvb2xzL3B5dGVzdC9iZW5jaC9za2lwLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQv
dzNjL3Rvb2xzL3B5dGVzdC9iZW5jaC9za2lwLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi45NjBiMzA4NjQ1YQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRl
c3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvYmVuY2gvc2tpcC5weQpAQCAtMCwwICsxLDEw
IEBACisKK2ltcG9ydCBweXRlc3QKKworCitTS0lQID0gVHJ1ZQorCitAcHl0ZXN0Lm1hcmsucGFy
YW1ldHJpemUoIngiLCB4cmFuZ2UoNTAwMCkpCitkZWYgdGVzdF9mb28oeCk6CisgICAgaWYgU0tJ
UDoKKyAgICAgICAgcHl0ZXN0LnNraXAoImhlaCIpCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0
cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L2V4dHJhL2dldF9pc3N1ZXMucHkgYi9XZWJEcml2
ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L2V4dHJhL2dldF9pc3N1ZXMucHkKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjY0MzdiYTRjMzRlCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9leHRy
YS9nZXRfaXNzdWVzLnB5CkBAIC0wLDAgKzEsNzQgQEAKK2ltcG9ydCBqc29uCitpbXBvcnQgcHkK
K2ltcG9ydCB0ZXh0d3JhcAorCitpc3N1ZXNfdXJsID0gImh0dHA6Ly9iaXRidWNrZXQub3JnL2Fw
aS8xLjAvcmVwb3NpdG9yaWVzL3B5dGVzdC1kZXYvcHl0ZXN0L2lzc3VlcyIKKworaW1wb3J0IHJl
cXVlc3RzCisKK2RlZiBnZXRfaXNzdWVzKCk6CisgICAgY2h1bmtzaXplID0gNTAKKyAgICBzdGFy
dCA9IDAKKyAgICBpc3N1ZXMgPSBbXQorICAgIHdoaWxlIDE6CisgICAgICAgIHBvc3RfZGF0YSA9
IHsiYWNjb3VudG5hbWUiOiAicHl0ZXN0LWRldiIsCisgICAgICAgICAgICAgICAgICAgICAicmVw
b19zbHVnIjogInB5dGVzdCIsCisgICAgICAgICAgICAgICAgICAgICAic3RhcnQiOiBzdGFydCwK
KyAgICAgICAgICAgICAgICAgICAgICJsaW1pdCI6IGNodW5rc2l6ZX0KKyAgICAgICAgcHJpbnQg
KCJnZXR0aW5nIGZyb20iLCBzdGFydCkKKyAgICAgICAgciA9IHJlcXVlc3RzLmdldChpc3N1ZXNf
dXJsLCBwYXJhbXM9cG9zdF9kYXRhKQorICAgICAgICBkYXRhID0gci5qc29uKCkKKyAgICAgICAg
aXNzdWVzLmV4dGVuZChkYXRhWyJpc3N1ZXMiXSkKKyAgICAgICAgaWYgc3RhcnQgKyBjaHVua3Np
emUgPj0gZGF0YVsiY291bnQiXToKKyAgICAgICAgICAgIHJldHVybiBpc3N1ZXMKKyAgICAgICAg
c3RhcnQgKz0gY2h1bmtzaXplCisKK2tpbmQybnVtID0gImJ1ZyBlbmhhbmNlbWVudCB0YXNrIHBy
b3Bvc2FsIi5zcGxpdCgpCisKK3N0YXR1czJudW0gPSAibmV3IG9wZW4gcmVzb2x2ZWQgZHVwbGlj
YXRlIGludmFsaWQgd29udGZpeCIuc3BsaXQoKQorCitkZWYgbWFpbihhcmdzKToKKyAgICBjYWNo
ZWZpbGUgPSBweS5wYXRoLmxvY2FsKGFyZ3MuY2FjaGUpCisgICAgaWYgbm90IGNhY2hlZmlsZS5l
eGlzdHMoKSBvciBhcmdzLnJlZnJlc2g6CisgICAgICAgIGlzc3VlcyA9IGdldF9pc3N1ZXMoKQor
ICAgICAgICBjYWNoZWZpbGUud3JpdGUoanNvbi5kdW1wcyhpc3N1ZXMpKQorICAgIGVsc2U6Cisg
ICAgICAgIGlzc3VlcyA9IGpzb24ubG9hZHMoY2FjaGVmaWxlLnJlYWQoKSkKKworICAgIG9wZW5f
aXNzdWVzID0gW3ggZm9yIHggaW4gaXNzdWVzCisgICAgICAgICAgICAgICAgICAgIGlmIHhbInN0
YXR1cyJdIGluICgibmV3IiwgIm9wZW4iKV0KKworICAgIGRlZiBraW5kX2FuZF9pZCh4KToKKyAg
ICAgICAga2luZCA9IHhbIm1ldGFkYXRhIl1bImtpbmQiXQorICAgICAgICByZXR1cm4ga2luZDJu
dW0uaW5kZXgoa2luZCksIGxlbihpc3N1ZXMpLWludCh4WyJsb2NhbF9pZCJdKQorICAgIG9wZW5f
aXNzdWVzLnNvcnQoa2V5PWtpbmRfYW5kX2lkKQorICAgIHJlcG9ydChvcGVuX2lzc3VlcykKKwor
ZGVmIHJlcG9ydChpc3N1ZXMpOgorICAgIGZvciBpc3N1ZSBpbiBpc3N1ZXM6CisgICAgICAgIG1l
dGFkYXRhID0gaXNzdWVbIm1ldGFkYXRhIl0KKyAgICAgICAgcHJpb3JpdHkgPSBpc3N1ZVsicHJp
b3JpdHkiXQorICAgICAgICB0aXRsZSA9IGlzc3VlWyJ0aXRsZSJdCisgICAgICAgIGNvbnRlbnQg
PSBpc3N1ZVsiY29udGVudCJdCisgICAgICAgIGtpbmQgPSBtZXRhZGF0YVsia2luZCJdCisgICAg
ICAgIHN0YXR1cyA9IGlzc3VlWyJzdGF0dXMiXQorICAgICAgICBpZCA9IGlzc3VlWyJsb2NhbF9p
ZCJdCisgICAgICAgIGxpbmsgPSAiaHR0cHM6Ly9iaXRidWNrZXQub3JnL3B5dGVzdC1kZXYvcHl0
ZXN0L2lzc3VlLyVzLyIgJSBpZAorICAgICAgICBwcmludCgiLS0tLSIpCisgICAgICAgIHByaW50
KHN0YXR1cywga2luZCwgbGluaykKKyAgICAgICAgcHJpbnQodGl0bGUpCisgICAgICAgICNwcmlu
dCgpCisgICAgICAgICNsaW5lcyA9IGNvbnRlbnQuc3BsaXQoIlxuIikKKyAgICAgICAgI3ByaW50
ICgiXG4iLmpvaW4obGluZXNbOjNdKSkKKyAgICAgICAgI2lmIGxlbihsaW5lcykgPiAzIG9yIGxl
bihjb250ZW50KSA+IDI0MDoKKyAgICAgICAgIyAgICBwcmludCAoIi4uLiIpCisKK2lmIF9fbmFt
ZV9fID09ICJfX21haW5fXyI6CisgICAgaW1wb3J0IGFyZ3BhcnNlCisgICAgcGFyc2VyID0gYXJn
cGFyc2UuQXJndW1lbnRQYXJzZXIoInByb2Nlc3MgYml0YnVja2V0IGlzc3VlcyIpCisgICAgcGFy
c2VyLmFkZF9hcmd1bWVudCgiLS1yZWZyZXNoIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGhlbHA9ImludmFsaWRhdGUgY2FjaGUsIHJlZnJlc2ggaXNzdWVz
IikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItLWNhY2hlIiwgYWN0aW9uPSJzdG9yZSIsIGRl
ZmF1bHQ9Imlzc3Vlcy5qc29uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9ImNhY2hl
IGZpbGUiKQorICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisgICAgbWFpbihhcmdzKQpk
aWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9leHRy
YS9zZXR1cC1weS50ZXN0L3NldHVwLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rv
b2xzL3B5dGVzdC9leHRyYS9zZXR1cC1weS50ZXN0L3NldHVwLnB5Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kMDU2MGNlMWY1ZgotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvZXh0cmEvc2V0dXAtcHkudGVz
dC9zZXR1cC5weQpAQCAtMCwwICsxLDExIEBACitpbXBvcnQgc3lzCitmcm9tIGRpc3R1dGlscy5j
b3JlIGltcG9ydCBzZXR1cAorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIGlmICJz
ZGlzdCIgbm90IGluIHN5cy5hcmd2WzE6XToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigicGxl
YXNlIHVzZSAncHl0ZXN0JyBweXBpIHBhY2thZ2UgaW5zdGVhZCBvZiAncHkudGVzdCciKQorICAg
IHNldHVwKAorICAgICAgICBuYW1lPSJweS50ZXN0IiwKKyAgICAgICAgdmVyc2lvbj0iMC4wIiwK
KyAgICAgICAgZGVzY3JpcHRpb249InBsZWFzZSB1c2UgJ3B5dGVzdCcgZm9yIGluc3RhbGxhdGlv
biIsCisgICAgKQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xz
L3B5dGVzdC9wbHVnaW4tdGVzdC5zaCBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29s
cy9weXRlc3QvcGx1Z2luLXRlc3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLjljNjFiNTA1MzZlCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1w
b3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9wbHVnaW4tdGVzdC5zaApAQCAtMCwwICsxLDIwIEBACisj
IS9iaW4vYmFzaAorCisjIHRoaXMgYXNzdW1lcyBwbHVnaW5zIGFyZSBpbnN0YWxsZWQgYXMgc2lz
dGVyIGRpcmVjdG9yaWVzCisKK3NldCAtZQorY2QgLi4vcHl0ZXN0LXBlcDgKK3B5LnRlc3QKK2Nk
IC4uL3B5dGVzdC1pbnN0YWZhaWwKK3B5LnRlc3QgCitjZCAuLi9weXRlc3QtY2FjaGUKK3B5LnRl
c3QKK2NkIC4uL3B5dGVzdC14cHJvY2VzcworcHkudGVzdAorI2NkIC4uL3B5dGVzdC1jb3YKKyNw
eS50ZXN0CitjZCAuLi9weXRlc3QtY2FwdHVyZWxvZworcHkudGVzdAorY2QgLi4vcHl0ZXN0LXhk
aXN0CitweS50ZXN0CisKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90
b29scy9weXRlc3QvcHl0ZXN0LnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xz
L3B5dGVzdC9weXRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LmUzNzZlNDE3ZThhCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQv
dzNjL3Rvb2xzL3B5dGVzdC9weXRlc3QucHkKQEAgLTAsMCArMSwyOCBAQAorIyBQWVRIT05fQVJH
Q09NUExFVEVfT0sKKyIiIgorcHl0ZXN0OiB1bml0IGFuZCBmdW5jdGlvbmFsIHRlc3Rpbmcgd2l0
aCBQeXRob24uCisiIiIKK19fYWxsX18gPSBbCisgICAgJ21haW4nLAorICAgICdVc2FnZUVycm9y
JywKKyAgICAnY21kbGluZScsCisgICAgJ2hvb2tzcGVjJywKKyAgICAnaG9va2ltcGwnLAorICAg
ICdfX3ZlcnNpb25fXycsCitdCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6ICMgaWYgcnVu
IGFzIGEgc2NyaXB0IG9yIGJ5ICdweXRob24gLW0gcHl0ZXN0JworICAgICMgd2UgdHJpZ2dlciB0
aGUgYmVsb3cgImVsc2UiIGNvbmRpdGlvbiBieSB0aGUgZm9sbG93aW5nIGltcG9ydAorICAgIGlt
cG9ydCBweXRlc3QKKyAgICByYWlzZSBTeXN0ZW1FeGl0KHB5dGVzdC5tYWluKCkpCisKKyMgZWxz
ZSB3ZSBhcmUgaW1wb3J0ZWQKKworZnJvbSBfcHl0ZXN0LmNvbmZpZyBpbXBvcnQgKAorICAgIG1h
aW4sIFVzYWdlRXJyb3IsIF9wcmVsb2FkcGx1Z2lucywgY21kbGluZSwKKyAgICBob29rc3BlYywg
aG9va2ltcGwKKykKK2Zyb20gX3B5dGVzdCBpbXBvcnQgX192ZXJzaW9uX18KKworX3ByZWxvYWRw
bHVnaW5zKCkgIyB0byBwb3B1bGF0ZSBweXRlc3QuKiBuYW1lc3BhY2Ugc28gaGVscChweXRlc3Qp
IHdvcmtzCisKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9w
eXRlc3QvcmVxdWlyZW1lbnRzLWRvY3MudHh0IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNj
L3Rvb2xzL3B5dGVzdC9yZXF1aXJlbWVudHMtZG9jcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAuLmJlM2EyMzJlNTdiCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJp
dmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9yZXF1aXJlbWVudHMtZG9jcy50eHQK
QEAgLTAsMCArMSwzIEBACitzcGhpbng9PTEuMi4zCityZWdlbmRvYworcHl5YW1sCmRpZmYgLS1n
aXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L3J1bnRveC5weSBi
L1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvcnVudG94LnB5Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44YzEzYzUzZTFjNAotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvcnVudG94
LnB5CkBAIC0wLDAgKzEsOCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKK2lmIF9fbmFtZV9f
ID09ICJfX21haW5fXyI6CisgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICBpbXBvcnQgc3lzCisg
ICAgc3VicHJvY2Vzcy5jYWxsKFtzeXMuZXhlY3V0YWJsZSwgIi1tIiwgInRveCIsCisgICAgICAg
ICAgICAgICAgICAgICAiLWkiLCAiQUxMPWh0dHBzOi8vZGV2cGkubmV0L2hway9kZXYvIiwKKyAg
ICAgICAgICAgICAgICAgICAgICItLWRldmVsb3AiXSArIHN5cy5hcmd2WzE6XSkKZGlmZiAtLWdp
dCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3Qvc2V0dXAuY2ZnIGIv
V2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9zZXR1cC5jZmcKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjFhYjRmZDA1OWIyCi0tLSAvZGV2L251
bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9zZXR1cC5j
ZmcKQEAgLTAsMCArMSwxMyBAQAorW2J1aWxkX3NwaGlueF0KK3NvdXJjZS1kaXIgPSBkb2MvZW4v
CitidWlsZC1kaXIgPSBkb2MvYnVpbGQKK2FsbF9maWxlcyA9IDEKKworW3VwbG9hZF9zcGhpbnhd
Cit1cGxvYWQtZGlyID0gZG9jL2VuL2J1aWxkL2h0bWwKKworW2JkaXN0X3doZWVsXQordW5pdmVy
c2FsID0gMQorCitbZGV2cGk6dXBsb2FkXQorZm9ybWF0cyA9IHNkaXN0LnRneixiZGlzdF93aGVl
bApkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9z
ZXR1cC5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3Qvc2V0dXAu
cHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjY2NjBmMjE2MDRkCi0t
LSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVz
dC9zZXR1cC5weQpAQCAtMCwwICsxLDEyMiBAQAoraW1wb3J0IG9zLCBzeXMKK2ltcG9ydCBzZXR1
cHRvb2xzCitpbXBvcnQgcGtnX3Jlc291cmNlcworZnJvbSBzZXR1cHRvb2xzIGltcG9ydCBzZXR1
cCwgQ29tbWFuZAorCitjbGFzc2lmaWVycyA9IFsnRGV2ZWxvcG1lbnQgU3RhdHVzIDo6IDYgLSBN
YXR1cmUnLAorICAgICAgICAgICAgICAgJ0ludGVuZGVkIEF1ZGllbmNlIDo6IERldmVsb3BlcnMn
LAorICAgICAgICAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IE1JVCBMaWNlbnNl
JywKKyAgICAgICAgICAgICAgICdPcGVyYXRpbmcgU3lzdGVtIDo6IFBPU0lYJywKKyAgICAgICAg
ICAgICAgICdPcGVyYXRpbmcgU3lzdGVtIDo6IE1pY3Jvc29mdCA6OiBXaW5kb3dzJywKKyAgICAg
ICAgICAgICAgICdPcGVyYXRpbmcgU3lzdGVtIDo6IE1hY09TIDo6IE1hY09TIFgnLAorICAgICAg
ICAgICAgICAgJ1RvcGljIDo6IFNvZnR3YXJlIERldmVsb3BtZW50IDo6IFRlc3RpbmcnLAorICAg
ICAgICAgICAgICAgJ1RvcGljIDo6IFNvZnR3YXJlIERldmVsb3BtZW50IDo6IExpYnJhcmllcycs
CisgICAgICAgICAgICAgICAnVG9waWMgOjogVXRpbGl0aWVzJ10gKyBbCisgICAgICAgICAgICAg
ICgnUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6ICVzJyAlIHgpIGZvciB4IGluCisg
ICAgICAgICAgICAgICAgICAnMiAyLjYgMi43IDMgMy4yIDMuMyAzLjQgMy41Jy5zcGxpdCgpXQor
Cit3aXRoIG9wZW4oJ1JFQURNRS5yc3QnKSBhcyBmZDoKKyAgICBsb25nX2Rlc2NyaXB0aW9uID0g
ZmQucmVhZCgpCisKK2RlZiBnZXRfdmVyc2lvbigpOgorICAgIHAgPSBvcy5wYXRoLmpvaW4ob3Mu
cGF0aC5kaXJuYW1lKAorICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5hYnNwYXRoKF9fZmls
ZV9fKSksICJfcHl0ZXN0IiwgIl9faW5pdF9fLnB5IikKKyAgICB3aXRoIG9wZW4ocCkgYXMgZjoK
KyAgICAgICAgZm9yIGxpbmUgaW4gZi5yZWFkbGluZXMoKToKKyAgICAgICAgICAgIGlmICJfX3Zl
cnNpb25fXyIgaW4gbGluZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbGluZS5zdHJpcCgpLnNw
bGl0KCI9IilbLTFdLnN0cmlwKCIgJyIpCisgICAgcmFpc2UgVmFsdWVFcnJvcigiY291bGQgbm90
IHJlYWQgdmVyc2lvbiIpCisKKworZGVmIGhhc19lbnZpcm9ubWVudF9tYXJrZXJfc3VwcG9ydCgp
OgorICAgICIiIgorICAgIFRlc3RzIHRoYXQgc2V0dXB0b29scyBoYXMgc3VwcG9ydCBmb3IgUEVQ
LTQyNiBlbnZpcm9ubWVudCBtYXJrZXIgc3VwcG9ydC4KKworICAgIFRoZSBmaXJzdCBrbm93biBy
ZWxlYXNlIHRvIHN1cHBvcnQgaXQgaXMgMC43IChhbmQgdGhlIGVhcmxpZXN0IG9uIFB5UEkgc2Vl
bXMgdG8gYmUgMC43LjIKKyAgICBzbyB3ZSdyZSB1c2luZyB0aGF0KSwgc2VlOiBodHRwOi8vcHl0
aG9uaG9zdGVkLm9yZy9zZXR1cHRvb2xzL2hpc3RvcnkuaHRtbCNpZDE0MgorCisgICAgUmVmZXJl
bmNlczoKKworICAgICogaHR0cHM6Ly93aGVlbC5yZWFkdGhlZG9jcy5vcmcvZW4vbGF0ZXN0L2lu
ZGV4Lmh0bWwjZGVmaW5pbmctY29uZGl0aW9uYWwtZGVwZW5kZW5jaWVzCisgICAgKiBodHRwczov
L3d3dy5weXRob24ub3JnL2Rldi9wZXBzL3BlcC0wNDI2LyNlbnZpcm9ubWVudC1tYXJrZXJzCisg
ICAgIiIiCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gcGtnX3Jlc291cmNlcy5wYXJzZV92ZXJz
aW9uKHNldHVwdG9vbHMuX192ZXJzaW9uX18pID49IHBrZ19yZXNvdXJjZXMucGFyc2VfdmVyc2lv
bignMC43LjInKQorICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICBzeXMuc3Rk
ZXJyLndyaXRlKCJDb3VsZCBub3QgdGVzdCBzZXR1cHRvb2wncyB2ZXJzaW9uOiAlc1xuIiAlIGV4
YykKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKworZGVmIG1haW4oKToKKyAgICBpbnN0YWxsX3Jl
cXVpcmVzID0gWydweT49MS40LjI5J10gICMgcGx1Z2d5IGlzIHZlbmRvcmVkIGluIF9weXRlc3Qu
dmVuZG9yZWRfcGFja2FnZXMKKyAgICBleHRyYXNfcmVxdWlyZSA9IHt9CisgICAgaWYgaGFzX2Vu
dmlyb25tZW50X21hcmtlcl9zdXBwb3J0KCk6CisgICAgICAgIGV4dHJhc19yZXF1aXJlWyc6cHl0
aG9uX3ZlcnNpb249PSIyLjYiIG9yIHB5dGhvbl92ZXJzaW9uPT0iMy4wIiBvciBweXRob25fdmVy
c2lvbj09IjMuMSInXSA9IFsnYXJncGFyc2UnXQorICAgICAgICBleHRyYXNfcmVxdWlyZVsnOnN5
c19wbGF0Zm9ybT09IndpbjMyIiddID0gWydjb2xvcmFtYSddCisgICAgZWxzZToKKyAgICAgICAg
aWYgc3lzLnZlcnNpb25faW5mbyA8ICgyLCA3KSBvciAoMywpIDw9IHN5cy52ZXJzaW9uX2luZm8g
PCAoMywgMik6CisgICAgICAgICAgICBpbnN0YWxsX3JlcXVpcmVzLmFwcGVuZCgnYXJncGFyc2Un
KQorICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICAgICAgICAgIGluc3Rh
bGxfcmVxdWlyZXMuYXBwZW5kKCdjb2xvcmFtYScpCisKKyAgICBzZXR1cCgKKyAgICAgICAgbmFt
ZT0ncHl0ZXN0JywKKyAgICAgICAgZGVzY3JpcHRpb249J3B5dGVzdDogc2ltcGxlIHBvd2VyZnVs
IHRlc3Rpbmcgd2l0aCBQeXRob24nLAorICAgICAgICBsb25nX2Rlc2NyaXB0aW9uPWxvbmdfZGVz
Y3JpcHRpb24sCisgICAgICAgIHZlcnNpb249Z2V0X3ZlcnNpb24oKSwKKyAgICAgICAgdXJsPSdo
dHRwOi8vcHl0ZXN0Lm9yZycsCisgICAgICAgIGxpY2Vuc2U9J01JVCBsaWNlbnNlJywKKyAgICAg
ICAgcGxhdGZvcm1zPVsndW5peCcsICdsaW51eCcsICdvc3gnLCAnY3lnd2luJywgJ3dpbjMyJ10s
CisgICAgICAgIGF1dGhvcj0nSG9sZ2VyIEtyZWtlbCwgQnJ1bm8gT2xpdmVpcmEsIFJvbm55IFBm
YW5uc2NobWlkdCwgRmxvcmlzIEJydXlub29naGUsIEJyaWFubmEgTGF1Z2hlciwgRmxvcmlhbiBC
cnVoaW4gYW5kIG90aGVycycsCisgICAgICAgIGF1dGhvcl9lbWFpbD0naG9sZ2VyIGF0IG1lcmxp
bnV4LmV1JywKKyAgICAgICAgZW50cnlfcG9pbnRzPW1ha2VfZW50cnlfcG9pbnRzKCksCisgICAg
ICAgIGNsYXNzaWZpZXJzPWNsYXNzaWZpZXJzLAorICAgICAgICBjbWRjbGFzcz17J3Rlc3QnOiBQ
eVRlc3R9LAorICAgICAgICAjIHRoZSBmb2xsb3dpbmcgc2hvdWxkIGJlIGVuYWJsZWQgZm9yIHJl
bGVhc2UKKyAgICAgICAgaW5zdGFsbF9yZXF1aXJlcz1pbnN0YWxsX3JlcXVpcmVzLAorICAgICAg
ICBleHRyYXNfcmVxdWlyZT1leHRyYXNfcmVxdWlyZSwKKyAgICAgICAgcGFja2FnZXM9WydfcHl0
ZXN0JywgJ19weXRlc3QuYXNzZXJ0aW9uJywgJ19weXRlc3QuX2NvZGUnLCAnX3B5dGVzdC52ZW5k
b3JlZF9wYWNrYWdlcyddLAorICAgICAgICBweV9tb2R1bGVzPVsncHl0ZXN0J10sCisgICAgICAg
IHppcF9zYWZlPUZhbHNlLAorICAgICkKKworCitkZWYgY21kbGluZV9lbnRyeXBvaW50cyh2ZXJz
aW9uaW5mbywgcGxhdGZvcm0sIGJhc2VuYW1lKToKKyAgICB0YXJnZXQgPSAncHl0ZXN0Om1haW4n
CisgICAgaWYgcGxhdGZvcm0uc3RhcnRzd2l0aCgnamF2YScpOgorICAgICAgICBwb2ludHMgPSB7
J3B5LnRlc3Qtanl0aG9uJzogdGFyZ2V0fQorICAgIGVsc2U6CisgICAgICAgIGlmIGJhc2VuYW1l
LnN0YXJ0c3dpdGgoJ3B5cHknKToKKyAgICAgICAgICAgIHBvaW50cyA9IHsncHkudGVzdC0lcycg
JSBiYXNlbmFtZTogdGFyZ2V0fQorICAgICAgICBlbHNlOiAjIGNweXRob24KKyAgICAgICAgICAg
IHBvaW50cyA9IHsncHkudGVzdC0lcy4lcycgJSB2ZXJzaW9uaW5mb1s6Ml0gOiB0YXJnZXR9Cisg
ICAgICAgIHBvaW50c1sncHkudGVzdCddID0gdGFyZ2V0CisgICAgcmV0dXJuIHBvaW50cworCisK
K2RlZiBtYWtlX2VudHJ5X3BvaW50cygpOgorICAgIGJhc2VuYW1lID0gb3MucGF0aC5iYXNlbmFt
ZShzeXMuZXhlY3V0YWJsZSkKKyAgICBwb2ludHMgPSBjbWRsaW5lX2VudHJ5cG9pbnRzKHN5cy52
ZXJzaW9uX2luZm8sIHN5cy5wbGF0Zm9ybSwgYmFzZW5hbWUpCisgICAga2V5cyA9IGxpc3QocG9p
bnRzLmtleXMoKSkKKyAgICBrZXlzLnNvcnQoKQorICAgIGwgPSBbJyVzID0gJXMnICUgKHgsIHBv
aW50c1t4XSkgZm9yIHggaW4ga2V5c10KKyAgICByZXR1cm4geydjb25zb2xlX3NjcmlwdHMnOiBs
fQorCisKK2NsYXNzIFB5VGVzdChDb21tYW5kKToKKyAgICB1c2VyX29wdGlvbnMgPSBbXQorICAg
IGRlZiBpbml0aWFsaXplX29wdGlvbnMoc2VsZik6CisgICAgICAgIHBhc3MKKyAgICBkZWYgZmlu
YWxpemVfb3B0aW9ucyhzZWxmKToKKyAgICAgICAgcGFzcworICAgIGRlZiBydW4oc2VsZik6Cisg
ICAgICAgIGltcG9ydCBzdWJwcm9jZXNzCisgICAgICAgIFBQQVRIID0gW3ggZm9yIHggaW4gb3Mu
ZW52aXJvbi5nZXQoJ1BZVEhPTlBBVEgnLCAnJykuc3BsaXQoJzonKSBpZiB4XQorICAgICAgICBQ
UEFUSC5pbnNlcnQoMCwgb3MuZ2V0Y3dkKCkpCisgICAgICAgIG9zLmVudmlyb25bJ1BZVEhPTlBB
VEgnXSA9ICc6Jy5qb2luKFBQQVRIKQorICAgICAgICBlcnJubyA9IHN1YnByb2Nlc3MuY2FsbChb
c3lzLmV4ZWN1dGFibGUsICdweXRlc3QucHknLCAnLS1pZ25vcmU9ZG9jJ10pCisgICAgICAgIHJh
aXNlIFN5c3RlbUV4aXQoZXJybm8pCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAg
ICBtYWluKCkKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9w
eXRlc3QvdG94LmluaSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3Qv
dG94LmluaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNWY2NTQ0NmU0
MmIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMv
cHl0ZXN0L3RveC5pbmkKQEAgLTAsMCArMSwxNjAgQEAKK1t0b3hdCittaW52ZXJzaW9uPTIuMAor
ZGlzdHNoYXJlPXtob21lZGlyfS8udG94L2Rpc3RzaGFyZQorZW52bGlzdD0KKyAgICAgbGludGlu
ZyxweTI2LHB5MjcscHkzMyxweTM0LHB5MzUscHlweSwKKyAgICAge3B5MjcscHkzNX0te3BleHBl
Y3QseGRpc3QsdHJpYWx9LAorICAgICBweTI3LW5vYnl0ZSxkb2N0ZXN0aW5nLHB5MjctY3hmcmVl
emUKKworW3Rlc3RlbnZdCitjb21tYW5kcz0gcHkudGVzdCAtLWxzb2YgLXJmc3hYIHtwb3Nhcmdz
OnRlc3Rpbmd9CitwYXNzZW52ID0gVVNFUiBVU0VSTkFNRQorZGVwcz0KKyAgICBub3NlCisgICAg
bW9jaworICAgIHJlcXVlc3RzCisKK1t0ZXN0ZW52OnB5MjZdCitjb21tYW5kcz0gcHkudGVzdCAt
LWxzb2YgLXJmc3hYIHtwb3NhcmdzOnRlc3Rpbmd9CitkZXBzPQorICAgIG5vc2UKKyAgICBtb2Nr
PDEuMSAgIyBsYXN0IHN1cHBvcnRlZCB2ZXJzaW9uIGZvciBweTI2CisKK1t0ZXN0ZW52OnB5Mjct
c3VicHJvY2Vzc10KK2NoYW5nZWRpcj0uCitiYXNlcHl0aG9uPXB5dGhvbjIuNworZGVwcz1weXRl
c3QteGRpc3Q+PTEuMTMKKyAgICBtb2NrCisgICAgbm9zZQorY29tbWFuZHM9CisgIHB5LnRlc3Qg
LW4zIC1yZnN4WCAtLXJ1bnB5dGVzdD1zdWJwcm9jZXNzIHtwb3NhcmdzOnRlc3Rpbmd9CisKK1t0
ZXN0ZW52OmdlbnNjcmlwdF0KK2NvbW1hbmRzPSBweS50ZXN0IC0tZ2Vuc2NyaXB0PXB5dGVzdDEK
KworW3Rlc3RlbnY6bGludGluZ10KK2Jhc2VweXRob24gPSBweXRob24yLjcKK2RlcHMgPSBmbGFr
ZTgKKyAgICByZXN0cnVjdHVyZWR0ZXh0X2xpbnQKK2NvbW1hbmRzID0gZmxha2U4IHB5dGVzdC5w
eSBfcHl0ZXN0IHRlc3RpbmcKKyAgICByc3QtbGludCBDSEFOR0VMT0cucnN0CisKK1t0ZXN0ZW52
OnB5MjcteGRpc3RdCitkZXBzPXB5dGVzdC14ZGlzdD49MS4xMworICAgIG1vY2sKKyAgICBub3Nl
Citjb21tYW5kcz0KKyAgcHkudGVzdCAtbjEgLXJmc3hYIHtwb3NhcmdzOnRlc3Rpbmd9CisKK1t0
ZXN0ZW52OnB5MzUteGRpc3RdCitkZXBzPXtbdGVzdGVudjpweTI3LXhkaXN0XWRlcHN9Citjb21t
YW5kcz0KKyAgcHkudGVzdCAtbjMgLXJmc3hYIHtwb3NhcmdzOnRlc3Rpbmd9CisKK1t0ZXN0ZW52
OnB5MjctcGV4cGVjdF0KK2NoYW5nZWRpcj10ZXN0aW5nCitwbGF0Zm9ybT1saW51eHxkYXJ3aW4K
K2RlcHM9cGV4cGVjdAorY29tbWFuZHM9CisgIHB5LnRlc3QgLXJmc3hYIHRlc3RfcGRiLnB5IHRl
c3RfdGVybWluYWwucHkgdGVzdF91bml0dGVzdC5weQorCitbdGVzdGVudjpweTM1LXBleHBlY3Rd
CitjaGFuZ2VkaXI9dGVzdGluZworcGxhdGZvcm09bGludXh8ZGFyd2luCitkZXBzPXtbdGVzdGVu
djpweTI3LXBleHBlY3RdZGVwc30KK2NvbW1hbmRzPQorICBweS50ZXN0IC1yZnN4WCB0ZXN0X3Bk
Yi5weSB0ZXN0X3Rlcm1pbmFsLnB5IHRlc3RfdW5pdHRlc3QucHkKKworW3Rlc3RlbnY6cHkyNy1u
b2J5dGVdCitkZXBzPXB5dGVzdC14ZGlzdD49MS4xMworZGlzdHJpYnV0ZT10cnVlCitzZXRlbnY9
CisgICAgUFlUSE9ORE9OVFdSSVRFQllURUNPREU9MQorY29tbWFuZHM9CisgIHB5LnRlc3QgLW4z
IC1yZnN4WCB7cG9zYXJnczp0ZXN0aW5nfQorCitbdGVzdGVudjpweTI3LXRyaWFsXQorZGVwcz10
d2lzdGVkCitjb21tYW5kcz0KKyAgcHkudGVzdCAtcnN4ZiB7cG9zYXJnczp0ZXN0aW5nL3Rlc3Rf
dW5pdHRlc3QucHl9CisKK1t0ZXN0ZW52OnB5MzUtdHJpYWxdCitwbGF0Zm9ybT1saW51eHxkYXJ3
aW4KK2RlcHM9e1t0ZXN0ZW52OnB5MjctdHJpYWxdZGVwc30KK2NvbW1hbmRzPQorICBweS50ZXN0
IC1yc3hmIHtwb3NhcmdzOnRlc3RpbmcvdGVzdF91bml0dGVzdC5weX0KKworW3Rlc3RlbnY6ZG9j
dGVzdF0KK2NvbW1hbmRzPXB5LnRlc3QgLS1kb2N0ZXN0LW1vZHVsZXMgX3B5dGVzdAorZGVwcz0K
KworW3Rlc3RlbnY6ZG9jXQorYmFzZXB5dGhvbj1weXRob24KK2NoYW5nZWRpcj1kb2MvZW4KK2Rl
cHM9c3BoaW54CisgICAgIFB5WUFNTAorCitjb21tYW5kcz0KKyAgICBtYWtlIGNsZWFuCisgICAg
bWFrZSBodG1sCisKK1t0ZXN0ZW52OmRvY3Rlc3RpbmddCitiYXNlcHl0aG9uID0gcHl0aG9uMy40
CitjaGFuZ2VkaXI9ZG9jL2VuCitkZXBzPVB5WUFNTAorY29tbWFuZHM9IHB5LnRlc3QgLXJmc3hY
IHtwb3NhcmdzfQorCitbdGVzdGVudjpyZWdlbl0KK2NoYW5nZWRpcj1kb2MvZW4KK2Jhc2VweXRo
b24gPSBweXRob24zLjQKK2RlcHM9c3BoaW54CisgICAgIFB5WUFNTAorICAgICByZWdlbmRvYz49
MC42LjEKK3doaXRlbGlzdF9leHRlcm5hbHM9CisgICAgcm0KKyAgICBtYWtlCitjb21tYW5kcz0K
KyAgICBybSAtcmYgL3RtcC9kb2MtZXhlYyoKKyAgICBtYWtlIHJlZ2VuCisKK1t0ZXN0ZW52Omp5
dGhvbl0KK2NoYW5nZWRpcj10ZXN0aW5nCitjb21tYW5kcz0KKyAgICB7ZW52cHl0aG9ufSB7ZW52
YmluZGlyfS9weS50ZXN0LWp5dGhvbiAtcmZzeFgge3Bvc2FyZ3N9CisKK1t0ZXN0ZW52OnB5Mjct
Y3hmcmVlemVdCitjaGFuZ2VkaXI9dGVzdGluZy9jeF9mcmVlemUKK3BsYXRmb3JtPWxpbnV4fGRh
cndpbgorY29tbWFuZHM9CisgICAge2VudnB5dGhvbn0gaW5zdGFsbF9jeF9mcmVlemUucHkKKyAg
ICB7ZW52cHl0aG9ufSBydW50ZXN0c19zZXR1cC5weSBidWlsZCAtLWJ1aWxkLWV4ZSBidWlsZAor
ICAgIHtlbnZweXRob259IHRveF9ydW4ucHkKKworCitbdGVzdGVudjpjb3ZlcmFsbHNdCitwYXNz
ZW52ID0gVFJBVklTIFRSQVZJU19KT0JfSUQgVFJBVklTX0JSQU5DSCBDT1ZFUkFMTFNfUkVQT19U
T0tFTgordXNlZGV2ZWxvcD1UcnVlCitiYXNlcHl0aG9uPXB5dGhvbjMuNAorY2hhbmdlZGlyPS4K
K2RlcHMgPQorICAgIHtbdGVzdGVudl1kZXBzfQorICAgIGNvdmVyYWxscworY29tbWFuZHM9Cisg
ICAgY292ZXJhZ2UgcnVuIC0tc291cmNlPV9weXRlc3QgLW0gcHl0ZXN0IHRlc3RpbmcKKyAgICBj
b3ZlcmFnZSByZXBvcnQgLW0KKyAgICBjb3ZlcmFsbHMKKworW3B5dGVzdF0KK21pbnZlcnNpb249
Mi4wCitwbHVnaW5zPXB5dGVzdGVyCisjLS1weWFyZ3MgLS1kb2N0ZXN0LW1vZHVsZXMgLS1pZ25v
cmU9LnRveAorYWRkb3B0cz0gLXJ4c1ggLXAgcHl0ZXN0ZXIgLS1pZ25vcmU9dGVzdGluZy9jeF9m
cmVlemUKK3JzeW5jZGlycz10b3guaW5pIHB5dGVzdC5weSBfcHl0ZXN0IHRlc3RpbmcKK3B5dGhv
bl9maWxlcz10ZXN0XyoucHkgKl90ZXN0LnB5IHRlc3RpbmcvKi8qLnB5CitweXRob25fY2xhc3Nl
cz1UZXN0IEFjY2VwdGFuY2UKK3B5dGhvbl9mdW5jdGlvbnM9dGVzdAorbm9yZWN1cnNlZGlycyA9
IC50b3ggamEgLmhnIGN4X2ZyZWV6ZV9zb3VyY2UKKworCitbZmxha2U4XQoraWdub3JlID1FNDAx
LEUyMjUsRTI2MSxFMTI4LEUxMjQsRTMwMSxFMzAyLEUxMjEsRTMwMyxXMzkxLEU1MDEsRTIzMSxF
MTI2LEU3MDEsRTI2NSxFMjQxLEUyNTEsRTIyNixFMTAxLFcxOTEsRTEzMSxFMjAzLEUxMjIsRTEy
MyxFMjcxLEU3MTIsRTIyMixFMTI3LEUxMjUsRTIyMSxXMjkyLEUxMTEsRTExMyxFMjkzLEUyNjIs
VzI5MyxFMTI5LEU3MDIsRTIwMSxFMjcyLEUyMDIsRTcwNCxFNzMxLEU0MDIKZGlmZiAtLWdpdCBh
L1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93ZWJkcml2ZXIvLmdpdGlnbm9yZSBi
L1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93ZWJkcml2ZXIvLmdpdGlnbm9yZQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZTg0MTNlMGVlNDUKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd2ViZHJpdmVy
Ly5naXRpZ25vcmUKQEAgLTAsMCArMSwyIEBACit3ZWJkcml2ZXIuZWdnLWluZm8vCisqLnB5Ywpk
aWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dlYmRyaXZlci9S
RUFETUUubWQgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd2ViZHJpdmVyL1JF
QURNRS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDE1YjMxYjI1
NGMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMv
d2ViZHJpdmVyL1JFQURNRS5tZApAQCAtMCwwICsxLDczIEBACisjIFdlYkRyaXZlciBjbGllbnQg
Zm9yIFB5dGhvbgorCitUaGlzIHBhY2thZ2UgcHJvdmlkZXMgUHl0aG9uIGJpbmRpbmdzCit0aGF0
IGNvbmZvcm0gdG8gdGhlIFtXM0MgV2ViRHJpdmVyIHN0YW5kYXJkXShodHRwczovL3czYy5naXRo
dWIuaW8vd2ViZHJpdmVyL3dlYmRyaXZlci1zcGVjLmh0bWwpLAord2hpY2ggc3BlY2lmaWVzIGEg
cmVtb3RlIGNvbnRyb2wgcHJvdG9jb2wgZm9yIHdlYiBicm93c2Vycy4KKworVGhlc2UgYmluZGlu
Z3MgYXJlIHdyaXR0ZW4gd2l0aCBkZXRlcm1pbmluZworaW1wbGVtZW50YXRpb24gY29tcGxpYW5j
ZSB0byB0aGUgc3BlY2lmaWNhdGlvbiBpbiBtaW5kLAorc28gdGhhdCBkaWZmZXJlbnQgcmVtb3Rl
IGVuZCBkcml2ZXJzCitjYW4gZGV0ZXJtaW5lIHdoZXRoZXIgdGhleSBtZWV0IHRoZSByZWNvZ25p
c2VkIHN0YW5kYXJkLgorVGhlIGNsaWVudCBpcyB1c2VkIGZvciB0aGUgV2ViRHJpdmVyIHNwZWNp
ZmljYXRpb24gdGVzdHMKK2luIHRoZSBbV2ViIFBsYXRmb3JtIFRlc3RzXShodHRwczovL2dpdGh1
Yi5jb20vdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cykuCisKKyMjIEluc3RhbGxhdGlvbgorCitUbyBp
bnN0YWxsIHRoZSBwYWNrYWdlIGluZGl2aWR1YWxseQoraW4geW91ciB2aXJ0dWFsZW52IG9yIHN5
c3RlbS13aWRlOgorCisgICAgJSBweXRob24gc2V0dXAucHkgaW5zdGFsbAorCitTaW5jZSB0aGlz
IHBhY2thZ2UgZG9lcyBub3QgaGF2ZSBhbnkgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzLAoreW91IGNh
biBhbHNvIHVzZSB0aGUgY2xpZW50IGRpcmVjdGx5IGZyb20gdGhlIGNoZWNrb3V0IGRpcmVjdG9y
eSwKK3doaWNoIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBjb250cmlidXRlIHBhdGNoZXMgYmFj
azoKKworICAgICUgY2QgL3BhdGgvdG8vd2RjbGllbnQKKyAgICAlIHB5dGhvbgorICAgIFB5dGhv
biAyLjcuMTIrIChkZWZhdWx0LCBBdWcgIDQgMjAxNiwgMjA6MDQ6MzQpIAorICAgIFtHQ0MgNi4x
LjEgMjAxNjA3MjRdIG9uIGxpbnV4MgorICAgIFR5cGUgImhlbHAiLCAiY29weXJpZ2h0IiwgImNy
ZWRpdHMiIG9yICJsaWNlbnNlIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICA+Pj4gaW1wb3J0
IHdlYmRyaXZlcgorICAgID4+PiAKKworSWYgeW91IGFyZSB3cml0aW5nIFdlYkRyaXZlciBzcGVj
aWZpY2F0aW9uIHRlc3RzIGZvcgorW1dQVF0oaHR0cHM6Ly9naXRodWIuY29tL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMpLAordGhlcmUgaXMgbm8gbmVlZCB0byBpbnN0YWxsIHRoZSBjbGllbnQgbWFu
dWFsbHkKK2FzIGl0IGlzIGluY2x1ZGVkIGluIHRoZSBgdG9vbHMvd2ViZHJpdmVyYCBkaXJlY3Rv
cnkuCisKKyMjIFVzYWdlCisKK1lvdSBjYW4gdXNlIHRoZSBidWlsdC1pbgorW2NvbnRleHQgbWFu
YWdlcl0oaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMu
aHRtbCN0aGUtd2l0aC1zdGF0ZW1lbnQpCit0byBtYW5hZ2UgdGhlIGxpZmV0aW1lIG9mIHRoZSBz
ZXNzaW9uLgorVGhlIHNlc3Npb24gaXMgc3RhcnRlZCBpbXBsaWNpdGx5CithdCB0aGUgZmlyc3Qg
Y2FsbCB0byBhIGNvbW1hbmQgaWYgaXQgaGFzIG5vdCBhbHJlYWR5IGJlZW4gc3RhcnRlZCwKK2Fu
ZCB3aWxsIGltcGxpY2l0bHkgYmUgZW5kZWQgd2hlbiBleGl0aW5nIHRoZSBjb250ZXh0OgorCitg
YGBweQoraW1wb3J0IHdlYmRyaXZlcgorCit3aXRoIHdlYmRyaXZlci5TZXNzaW9uKCIxMjcuMC4w
LjEiLCA0NDQ0KSBhcyBzZXNzaW9uOgorICAgIHNlc3Npb24udXJsID0gImh0dHBzOi8vbW96aWxs
YS5vcmciCisgICAgcHJpbnQgIlRoZSBjdXJyZW50IFVSTCBpcyAlcyIgJSBzZXNzaW9uLnVybAor
YGBgCisKK1RoZSBmb2xsb3dpbmcgaXMgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gdGhlIGFi
b3ZlLAorYnV0IGdpdmluZyB5b3UgbWFudWFsIGNvbnRyb2wgb2YgdGhlIHNlc3Npb246CisKK2Bg
YHB5CitpbXBvcnQgd2ViZHJpdmVyCisKK3Nlc3Npb24gPSB3ZWJkcml2ZXIuU2Vzc2lvbigiMTI3
LjAuMC4xIiwgNDQ0NCkKK3Nlc3Npb24uc3RhcnQoKQorCitzZXNzaW9uLnVybCA9ICJodHRwczov
L21vemlsbGEub3JnIgorcHJpbnQgIlRoZSBjdXJyZW50IFVSTCBpcyAlcyIgJSBzZXNzaW9uLnVy
bAorCitzZXNzaW9uLmVuZCgpCitgYGAKKworIyMgRGVwZW5kZW5jaWVzCisKK1RoaXMgY2xpZW50
IGhhcyB0aGUgYmVuZWZpdCBvZiBvbmx5IHVzaW5nIHN0YW5kYXJkIGxpYnJhcnkgZGVwZW5kZW5j
aWVzLgorTm8gZXh0ZXJuYWwgUHlQSSBkZXBlbmRlbmNpZXMgYXJlIG5lZWRlZC4KZGlmZiAtLWdp
dCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93ZWJkcml2ZXIvc2V0dXAucHkg
Yi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd2ViZHJpdmVyL3NldHVwLnB5Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jNDczOTYxY2I2NAotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93ZWJkcml2ZXIv
c2V0dXAucHkKQEAgLTAsMCArMSwxNCBAQAorZnJvbSBzZXR1cHRvb2xzIGltcG9ydCBzZXR1cCwg
ZmluZF9wYWNrYWdlcworCitzZXR1cChuYW1lPSJ3ZWJkcml2ZXIiLAorICAgICAgdmVyc2lvbj0i
MS4wIiwKKyAgICAgIGRlc2NyaXB0aW9uPSJXZWJEcml2ZXIgY2xpZW50IGNvbXBhdGlibGUgd2l0
aCAiCisgICAgICAgICAgICAgICAgICAidGhlIFczQyBicm93c2VyIGF1dG9tYXRpb24gc3BlY2lm
aWNhdGlvbi4iLAorICAgICAgYXV0aG9yPSJNb3ppbGxhIEVuZ2luZWVyaW5nIFByb2R1Y3Rpdml0
eSIsCisgICAgICBhdXRob3JfZW1haWw9InRvb2xzQGxpc3RzLm1vemlsbGEub3JnIiwKKyAgICAg
IGxpY2Vuc2U9IkJTRCIsCisgICAgICBwYWNrYWdlcz1maW5kX3BhY2thZ2VzKCksCisgICAgICBj
bGFzc2lmaWVycz1bIkRldmVsb3BtZW50IFN0YXR1cyA6OiA0IC0gQmV0YSIsCisgICAgICAgICAg
ICAgICAgICAgIkludGVuZGVkIEF1ZGllbmNlIDo6IERldmVsb3BlcnMiLAorICAgICAgICAgICAg
ICAgICAgICJMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBNb3ppbGxhIFB1YmxpYyBMaWNlbnNl
IDIuMCAoTVBMIDIuMCkiLAorICAgICAgICAgICAgICAgICAgICJPcGVyYXRpbmcgU3lzdGVtIDo6
IE9TIEluZGVwZW5kZW50Il0pCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93
M2MvdG9vbHMvd2ViZHJpdmVyL3dlYmRyaXZlci9fX2luaXRfXy5weSBiL1dlYkRyaXZlclRlc3Rz
L2ltcG9ydGVkL3czYy90b29scy93ZWJkcml2ZXIvd2ViZHJpdmVyL19faW5pdF9fLnB5Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zMDI0M2Y3MjA1ZAotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93ZWJkcml2ZXIvd2Vi
ZHJpdmVyL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMjcgQEAKK2Zyb20gY2xpZW50IGltcG9ydCBD
b29raWVzLCBFbGVtZW50LCBGaW5kLCBTZXNzaW9uLCBUaW1lb3V0cywgV2luZG93Citmcm9tIGVy
cm9yIGltcG9ydCAoCisgICAgRWxlbWVudE5vdFNlbGVjdGFibGVFeGNlcHRpb24sCisgICAgRWxl
bWVudE5vdFZpc2libGVFeGNlcHRpb24sCisgICAgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uLAor
ICAgIEludmFsaWRDb29raWVEb21haW5FeGNlcHRpb24sCisgICAgSW52YWxpZEVsZW1lbnRDb29y
ZGluYXRlc0V4Y2VwdGlvbiwKKyAgICBJbnZhbGlkRWxlbWVudFN0YXRlRXhjZXB0aW9uLAorICAg
IEludmFsaWRTZWxlY3RvckV4Y2VwdGlvbiwKKyAgICBJbnZhbGlkU2Vzc2lvbklkRXhjZXB0aW9u
LAorICAgIEphdmFzY3JpcHRFcnJvckV4Y2VwdGlvbiwKKyAgICBNb3ZlVGFyZ2V0T3V0T2ZCb3Vu
ZHNFeGNlcHRpb24sCisgICAgTm9TdWNoQWxlcnRFeGNlcHRpb24sCisgICAgTm9TdWNoRWxlbWVu
dEV4Y2VwdGlvbiwKKyAgICBOb1N1Y2hGcmFtZUV4Y2VwdGlvbiwKKyAgICBOb1N1Y2hXaW5kb3dF
eGNlcHRpb24sCisgICAgU2NyaXB0VGltZW91dEV4Y2VwdGlvbiwKKyAgICBTZXNzaW9uTm90Q3Jl
YXRlZEV4Y2VwdGlvbiwKKyAgICBTdGFsZUVsZW1lbnRSZWZlcmVuY2VFeGNlcHRpb24sCisgICAg
VGltZW91dEV4Y2VwdGlvbiwKKyAgICBVbmFibGVUb1NldENvb2tpZUV4Y2VwdGlvbiwKKyAgICBV
bmV4cGVjdGVkQWxlcnRPcGVuRXhjZXB0aW9uLAorICAgIFVua25vd25Db21tYW5kRXhjZXB0aW9u
LAorICAgIFVua25vd25FcnJvckV4Y2VwdGlvbiwKKyAgICBVbmtub3duTWV0aG9kRXhjZXB0aW9u
LAorICAgIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uLAorICAgIFdlYkRyaXZlckV4Y2Vw
dGlvbikKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93ZWJk
cml2ZXIvd2ViZHJpdmVyL2NsaWVudC5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90
b29scy93ZWJkcml2ZXIvd2ViZHJpdmVyL2NsaWVudC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uZWIwNzM0YmE2YmQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2
ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd2ViZHJpdmVyL3dlYmRyaXZlci9jbGllbnQucHkK
QEAgLTAsMCArMSw2NzUgQEAKK2ltcG9ydCBqc29uCitpbXBvcnQgdXJscGFyc2UKKworaW1wb3J0
IGVycm9yCitpbXBvcnQgdHJhbnNwb3J0CisKK2Zyb20gbW96bG9nIGltcG9ydCBnZXRfZGVmYXVs
dF9sb2dnZXIKKworbG9nZ2VyID0gZ2V0X2RlZmF1bHRfbG9nZ2VyKCkKKworZWxlbWVudF9rZXkg
PSAiZWxlbWVudC02MDY2LTExZTQtYTUyZS00ZjczNTQ2NmNlY2YiCisKKworZGVmIGNvbW1hbmQo
ZnVuYyk6CisgICAgZGVmIGlubmVyKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGlm
IGhhc2F0dHIoc2VsZiwgInNlc3Npb24iKToKKyAgICAgICAgICAgIHNlc3Npb24gPSBzZWxmLnNl
c3Npb24KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlc3Npb24gPSBzZWxmCisKKyAgICAg
ICAgaWYgc2Vzc2lvbi5zZXNzaW9uX2lkIGlzIE5vbmU6CisgICAgICAgICAgICBzZXNzaW9uLnN0
YXJ0KCkKKyAgICAgICAgYXNzZXJ0IHNlc3Npb24uc2Vzc2lvbl9pZCBpcyBub3QgTm9uZQorCisg
ICAgICAgIHJldHVybiBmdW5jKHNlbGYsICphcmdzLCAqKmt3YXJncykKKworICAgIGlubmVyLl9f
bmFtZV9fID0gZnVuYy5fX25hbWVfXworICAgIGlubmVyLl9fZG9jX18gPSBmdW5jLl9fZG9jX18K
KworICAgIHJldHVybiBpbm5lcgorCisKK2NsYXNzIFRpbWVvdXRzKG9iamVjdCk6CisKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgc2Vzc2lvbik6CisgICAgICAgIHNlbGYuc2Vzc2lvbiA9IHNlc3Np
b24KKworICAgIGRlZiBfZ2V0KHNlbGYsIGtleT1Ob25lKToKKyAgICAgICAgdGltZW91dHMgPSBz
ZWxmLnNlc3Npb24uc2VuZF9zZXNzaW9uX2NvbW1hbmQoIkdFVCIsICJ0aW1lb3V0cyIpCisgICAg
ICAgIGlmIGtleSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiB0aW1lb3V0c1trZXld
CisgICAgICAgIHJldHVybiB0aW1lb3V0cworCisgICAgZGVmIF9zZXQoc2VsZiwga2V5LCBzZWNz
KToKKyAgICAgICAgYm9keSA9IHtrZXk6IHNlY3MgKiAxMDAwfQorICAgICAgICB0aW1lb3V0cyA9
IHNlbGYuc2Vzc2lvbi5zZW5kX3Nlc3Npb25fY29tbWFuZCgiUE9TVCIsICJ0aW1lb3V0cyIsIGJv
ZHkpCisgICAgICAgIHJldHVybiB0aW1lb3V0c1trZXldCisKKyAgICBAcHJvcGVydHkKKyAgICBk
ZWYgc2NyaXB0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZ2V0KCJzY3JpcHQiKQorCisg
ICAgQHNjcmlwdC5zZXR0ZXIKKyAgICBkZWYgc2NyaXB0KHNlbGYsIHNlY3MpOgorICAgICAgICBy
ZXR1cm4gc2VsZi5fc2V0KCJzY3JpcHQiLCBzZWNzKQorCisgICAgQHByb3BlcnR5CisgICAgZGVm
IHBhZ2VfbG9hZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2dldCgicGFnZUxvYWQiKQor
CisgICAgQHBhZ2VfbG9hZC5zZXR0ZXIKKyAgICBkZWYgcGFnZV9sb2FkKHNlbGYsIHNlY3MpOgor
ICAgICAgICByZXR1cm4gc2VsZi5fc2V0KCJwYWdlTG9hZCIsIHNlY3MpCisKKyAgICBAcHJvcGVy
dHkKKyAgICBkZWYgaW1wbGljaXQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9nZXQoImlt
cGxpY2l0IikKKworICAgIEBpbXBsaWNpdC5zZXR0ZXIKKyAgICBkZWYgaW1wbGljaXQoc2VsZiwg
c2Vjcyk6CisgICAgICAgIHJldHVybiBzZWxmLl9zZXQoImltcGxpY2l0Iiwgc2VjcykKKworICAg
IGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICBuYW1lID0gIiVzLiVzIiAlIChzZWxmLl9fbW9k
dWxlX18sIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fKQorICAgICAgICByZXR1cm4gIjwlcyBzY3Jp
cHQ9JWQsIGxvYWQ9JWQsIGltcGxpY2l0PSVkPiIgJSBcCisgICAgICAgICAgICAobmFtZSwgc2Vs
Zi5zY3JpcHQsIHNlbGYucGFnZV9sb2FkLCBzZWxmLmltcGxpY2l0KQorCisKK2NsYXNzIEFjdGlv
blNlcXVlbmNlKG9iamVjdCk6CisgICAgIiIiQVBJIGZvciBjcmVhdGluZyBhbmQgcGVyZm9ybWlu
ZyBhY3Rpb24gc2VxdWVuY2VzLgorCisgICAgRWFjaCBhY3Rpb24gbWV0aG9kIGFkZHMgb25lIG9y
IG1vcmUgYWN0aW9ucyB0byBhIHF1ZXVlLiBXaGVuIHBlcmZvcm0oKQorICAgIGlzIGNhbGxlZCwg
dGhlIHF1ZXVlZCBhY3Rpb25zIGZpcmUgaW4gb3JkZXIuCisKKyAgICBNYXkgYmUgY2hhaW5lZCB0
b2dldGhlciBhcyBpbjo6CisKKyAgICAgICAgIEFjdGlvblNlcXVlbmNlKHNlc3Npb24sICJrZXki
LCBpZCkgXAorICAgICAgICAgICAgLmtleV9kb3duKCJhIikgXAorICAgICAgICAgICAgLmtleV91
cCgiYSIpIFwKKyAgICAgICAgICAgIC5wZXJmb3JtKCkKKyAgICAiIiIKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgc2Vzc2lvbiwgYWN0aW9uX3R5cGUsIGlucHV0X2lkLCBwb2ludGVyX3BhcmFtcz1O
b25lKToKKyAgICAgICAgIiIiUmVwcmVzZW50cyBhIHNlcXVlbmNlIG9mIGFjdGlvbnMgb2Ygb25l
IHR5cGUgZm9yIG9uZSBpbnB1dCBzb3VyY2UuCisKKyAgICAgICAgOnBhcmFtIHNlc3Npb246IFdl
YkRyaXZlciBzZXNzaW9uLgorICAgICAgICA6cGFyYW0gYWN0aW9uX3R5cGU6IEFjdGlvbiB0eXBl
OyBtYXkgYmUgIm5vbmUiLCAia2V5Iiwgb3IgInBvaW50ZXIiLgorICAgICAgICA6cGFyYW0gaW5w
dXRfaWQ6IElEIG9mIGlucHV0IHNvdXJjZS4KKyAgICAgICAgOnBhcmFtIHBvaW50ZXJfcGFyYW1z
OiBPcHRpb25hbCBkaWN0aW9uYXJ5IG9mIHBvaW50ZXIgcGFyYW1ldGVycy4KKyAgICAgICAgIiIi
CisgICAgICAgIHNlbGYuc2Vzc2lvbiA9IHNlc3Npb24KKyAgICAgICAgc2VsZi5faWQgPSBpbnB1
dF9pZAorICAgICAgICBzZWxmLl90eXBlID0gYWN0aW9uX3R5cGUKKyAgICAgICAgc2VsZi5fYWN0
aW9ucyA9IFtdCisgICAgICAgIHNlbGYuX3BvaW50ZXJfcGFyYW1zID0gcG9pbnRlcl9wYXJhbXMK
KworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBkaWN0KHNlbGYpOgorICAgICAgICBkID0geworICAg
ICAgICAgICAgInR5cGUiOiBzZWxmLl90eXBlLAorICAgICAgICAgICAgImlkIjogc2VsZi5faWQs
CisgICAgICAgICAgICAiYWN0aW9ucyI6IHNlbGYuX2FjdGlvbnMsCisgICAgICAgIH0KKyAgICAg
ICAgaWYgc2VsZi5fcG9pbnRlcl9wYXJhbXMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBkWyJw
YXJhbWV0ZXJzIl0gPSBzZWxmLl9wb2ludGVyX3BhcmFtcworICAgICAgICByZXR1cm4gZAorCisg
ICAgQGNvbW1hbmQKKyAgICBkZWYgcGVyZm9ybShzZWxmKToKKyAgICAgICAgIiIiUGVyZm9ybSBh
bGwgcXVldWVkIGFjdGlvbnMuIiIiCisgICAgICAgIHNlbGYuc2Vzc2lvbi5hY3Rpb25zLnBlcmZv
cm0oW3NlbGYuZGljdF0pCisKKyAgICBkZWYgX2tleV9hY3Rpb24oc2VsZiwgc3VidHlwZSwgdmFs
dWUpOgorICAgICAgICBzZWxmLl9hY3Rpb25zLmFwcGVuZCh7InR5cGUiOiBzdWJ0eXBlLCAidmFs
dWUiOiB2YWx1ZX0pCisKKyAgICBkZWYgX3BvaW50ZXJfYWN0aW9uKHNlbGYsIHN1YnR5cGUsIGJ1
dHRvbik6CisgICAgICAgIHNlbGYuX2FjdGlvbnMuYXBwZW5kKHsidHlwZSI6IHN1YnR5cGUsICJi
dXR0b24iOiBidXR0b259KQorCisgICAgZGVmIHBhdXNlKHNlbGYsIGR1cmF0aW9uKToKKyAgICAg
ICAgc2VsZi5fYWN0aW9ucy5hcHBlbmQoeyJ0eXBlIjogInBhdXNlIiwgImR1cmF0aW9uIjogZHVy
YXRpb259KQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIHBvaW50ZXJfbW92ZShzZWxm
LCB4LCB5LCBkdXJhdGlvbj1Ob25lLCBvcmlnaW49Tm9uZSk6CisgICAgICAgICIiIlF1ZXVlIGEg
cG9pbnRlck1vdmUgYWN0aW9uLgorCisgICAgICAgIDpwYXJhbSB4OiBEZXN0aW5hdGlvbiB4LWF4
aXMgY29vcmRpbmF0ZSBvZiBwb2ludGVyIGluIENTUyBwaXhlbHMuCisgICAgICAgIDpwYXJhbSB5
OiBEZXN0aW5hdGlvbiB5LWF4aXMgY29vcmRpbmF0ZSBvZiBwb2ludGVyIGluIENTUyBwaXhlbHMu
CisgICAgICAgIDpwYXJhbSBkdXJhdGlvbjogTnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBvdmVyIHdo
aWNoIHRvIGRpc3RyaWJ1dGUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgbW92ZS4gSWYg
Tm9uZSwgcmVtb3RlIGVuZCBkZWZhdWx0cyB0byAwLgorICAgICAgICA6cGFyYW0gb3JpZ2luOiBP
cmlnaW4gb2YgY29vcmRpbmF0ZXMsIGVpdGhlciAidmlld3BvcnQiLCAicG9pbnRlciIgb3IKKyAg
ICAgICAgICAgICAgICAgICAgICAgYW4gRWxlbWVudC4gSWYgTm9uZSwgcmVtb3RlIGVuZCBkZWZh
dWx0cyB0byAidmlld3BvcnQiLgorICAgICAgICAiIiIKKyAgICAgICAgYWN0aW9uID0geworICAg
ICAgICAgICAgInR5cGUiOiAicG9pbnRlck1vdmUiLAorICAgICAgICAgICAgIngiOiB4LAorICAg
ICAgICAgICAgInkiOiB5CisgICAgICAgIH0KKyAgICAgICAgaWYgZHVyYXRpb24gaXMgbm90IE5v
bmU6CisgICAgICAgICAgICBhY3Rpb25bImR1cmF0aW9uIl0gPSBkdXJhdGlvbgorICAgICAgICBp
ZiBvcmlnaW4gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBhY3Rpb25bIm9yaWdpbiJdID0gb3Jp
Z2luIGlmIGlzaW5zdGFuY2Uob3JpZ2luLCBiYXNlc3RyaW5nKSBlbHNlIG9yaWdpbi5qc29uKCkK
KyAgICAgICAgc2VsZi5fYWN0aW9ucy5hcHBlbmQoYWN0aW9uKQorICAgICAgICByZXR1cm4gc2Vs
ZgorCisgICAgZGVmIHBvaW50ZXJfdXAoc2VsZiwgYnV0dG9uPTApOgorICAgICAgICAiIiJRdWV1
ZSBhIHBvaW50ZXJVcCBhY3Rpb24gZm9yIGBidXR0b25gLgorCisgICAgICAgIDpwYXJhbSBidXR0
b246IFBvaW50ZXIgYnV0dG9uIHRvIHBlcmZvcm0gYWN0aW9uIHdpdGguCisgICAgICAgICAgICAg
ICAgICAgICAgIERlZmF1bHQ6IDAsIHdoaWNoIHJlcHJlc2VudHMgbWFpbiBkZXZpY2UgYnV0dG9u
LgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fcG9pbnRlcl9hY3Rpb24oInBvaW50ZXJVcCIs
IGJ1dHRvbikKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBwb2ludGVyX2Rvd24oc2Vs
ZiwgYnV0dG9uPTApOgorICAgICAgICAiIiJRdWV1ZSBhIHBvaW50ZXJEb3duIGFjdGlvbiBmb3Ig
YGJ1dHRvbmAuCisKKyAgICAgICAgOnBhcmFtIGJ1dHRvbjogUG9pbnRlciBidXR0b24gdG8gcGVy
Zm9ybSBhY3Rpb24gd2l0aC4KKyAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdDogMCwgd2hp
Y2ggcmVwcmVzZW50cyBtYWluIGRldmljZSBidXR0b24uCisgICAgICAgICIiIgorICAgICAgICBz
ZWxmLl9wb2ludGVyX2FjdGlvbigicG9pbnRlckRvd24iLCBidXR0b24pCisgICAgICAgIHJldHVy
biBzZWxmCisKKyAgICBkZWYgY2xpY2soc2VsZiwgZWxlbWVudD1Ob25lLCBidXR0b249MCk6Cisg
ICAgICAgICIiIlF1ZXVlIGEgY2xpY2sgd2l0aCB0aGUgc3BlY2lmaWVkIGJ1dHRvbi4KKworICAg
ICAgICBJZiBhbiBlbGVtZW50IGlzIGdpdmVuLCBtb3ZlIHRoZSBwb2ludGVyIHRvIHRoYXQgZWxl
bWVudCBmaXJzdCwKKyAgICAgICAgb3RoZXJ3aXNlIGNsaWNrIGN1cnJlbnQgcG9pbnRlciBjb29y
ZGluYXRlcy4KKworICAgICAgICA6cGFyYW0gZWxlbWVudDogT3B0aW9uYWwgZWxlbWVudCB0byBj
bGljay4KKyAgICAgICAgOnBhcmFtIGJ1dHRvbjogSW50ZWdlciByZXByZXNlbnRpbmcgcG9pbnRl
ciBidXR0b24gdG8gcGVyZm9ybSBhY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgd2l0aC4g
RGVmYXVsdDogMCwgd2hpY2ggcmVwcmVzZW50cyBtYWluIGRldmljZSBidXR0b24uCisgICAgICAg
ICIiIgorICAgICAgICBpZiBlbGVtZW50OgorICAgICAgICAgICAgc2VsZi5wb2ludGVyX21vdmUo
MCwgMCwgb3JpZ2luPWVsZW1lbnQpCisgICAgICAgIHJldHVybiBzZWxmLnBvaW50ZXJfZG93bihi
dXR0b24pLnBvaW50ZXJfdXAoYnV0dG9uKQorCisgICAgZGVmIGtleV91cChzZWxmLCB2YWx1ZSk6
CisgICAgICAgICIiIlF1ZXVlIGEga2V5VXAgYWN0aW9uIGZvciBgdmFsdWVgLgorCisgICAgICAg
IDpwYXJhbSB2YWx1ZTogQ2hhcmFjdGVyIHRvIHBlcmZvcm0ga2V5IGFjdGlvbiB3aXRoLgorICAg
ICAgICAiIiIKKyAgICAgICAgc2VsZi5fa2V5X2FjdGlvbigia2V5VXAiLCB2YWx1ZSkKKyAgICAg
ICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBrZXlfZG93bihzZWxmLCB2YWx1ZSk6CisgICAgICAg
ICIiIlF1ZXVlIGEga2V5RG93biBhY3Rpb24gZm9yIGB2YWx1ZWAuCisKKyAgICAgICAgOnBhcmFt
IHZhbHVlOiBDaGFyYWN0ZXIgdG8gcGVyZm9ybSBrZXkgYWN0aW9uIHdpdGguCisgICAgICAgICIi
IgorICAgICAgICBzZWxmLl9rZXlfYWN0aW9uKCJrZXlEb3duIiwgdmFsdWUpCisgICAgICAgIHJl
dHVybiBzZWxmCisKKyAgICBkZWYgc2VuZF9rZXlzKHNlbGYsIGtleXMpOgorICAgICAgICAiIiJR
dWV1ZSBhIGtleURvd24gYW5kIGtleVVwIGFjdGlvbiBmb3IgZWFjaCBjaGFyYWN0ZXIgaW4gYGtl
eXNgLgorCisgICAgICAgIDpwYXJhbSBrZXlzOiBTdHJpbmcgb2Yga2V5cyB0byBwZXJmb3JtIGtl
eSBhY3Rpb25zIHdpdGguCisgICAgICAgICIiIgorICAgICAgICBmb3IgYyBpbiBrZXlzOgorICAg
ICAgICAgICAgc2VsZi5rZXlfZG93bihjKQorICAgICAgICAgICAgc2VsZi5rZXlfdXAoYykKKyAg
ICAgICAgcmV0dXJuIHNlbGYKKworCitjbGFzcyBBY3Rpb25zKG9iamVjdCk6CisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIHNlc3Npb24pOgorICAgICAgICBzZWxmLnNlc3Npb24gPSBzZXNzaW9uCisK
KyAgICBAY29tbWFuZAorICAgIGRlZiBwZXJmb3JtKHNlbGYsIGFjdGlvbnM9Tm9uZSk6CisgICAg
ICAgICIiIlBlcmZvcm1zIGFjdGlvbnMgYnkgdGljayBmcm9tIGVhY2ggYWN0aW9uIHNlcXVlbmNl
IGluIGBhY3Rpb25zYC4KKworICAgICAgICA6cGFyYW0gYWN0aW9uczogTGlzdCBvZiBpbnB1dCBz
b3VyY2UgYWN0aW9uIHNlcXVlbmNlcy4gQSBzaW5nbGUgYWN0aW9uCisgICAgICAgICAgICAgICAg
ICAgICAgICBzZXF1ZW5jZSBtYXkgYmUgY3JlYXRlZCB3aXRoIHRoZSBoZWxwIG9mCisgICAgICAg
ICAgICAgICAgICAgICAgICBgYEFjdGlvblNlcXVlbmNlLmRpY3RgYC4KKyAgICAgICAgIiIiCisg
ICAgICAgIGJvZHkgPSB7ImFjdGlvbnMiOiBbXSBpZiBhY3Rpb25zIGlzIE5vbmUgZWxzZSBhY3Rp
b25zfQorICAgICAgICByZXR1cm4gc2VsZi5zZXNzaW9uLnNlbmRfc2Vzc2lvbl9jb21tYW5kKCJQ
T1NUIiwgImFjdGlvbnMiLCBib2R5KQorCisgICAgQGNvbW1hbmQKKyAgICBkZWYgcmVsZWFzZShz
ZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuc2Vzc2lvbi5zZW5kX3Nlc3Npb25fY29tbWFuZCgi
REVMRVRFIiwgImFjdGlvbnMiKQorCisgICAgZGVmIHNlcXVlbmNlKHNlbGYsICphcmdzLCAqKmt3
YXJncyk6CisgICAgICAgICIiIlJldHVybiBhbiBlbXB0eSBBY3Rpb25TZXF1ZW5jZSBvZiB0aGUg
ZGVzaWduYXRlZCB0eXBlLgorCisgICAgICAgIFNlZSBBY3Rpb25TZXF1ZW5jZSBmb3IgcGFyYW1l
dGVyIGxpc3QuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gQWN0aW9uU2VxdWVuY2Uoc2Vs
Zi5zZXNzaW9uLCAqYXJncywgKiprd2FyZ3MpCisKKworY2xhc3MgV2luZG93KG9iamVjdCk6Cisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlc3Npb24pOgorICAgICAgICBzZWxmLnNlc3Npb24gPSBz
ZXNzaW9uCisKKyAgICBAcHJvcGVydHkKKyAgICBAY29tbWFuZAorICAgIGRlZiByZWN0KHNlbGYp
OgorICAgICAgICByZXR1cm4gc2VsZi5zZXNzaW9uLnNlbmRfc2Vzc2lvbl9jb21tYW5kKCJHRVQi
LCAid2luZG93L3JlY3QiKQorCisgICAgQHByb3BlcnR5CisgICAgQGNvbW1hbmQKKyAgICBkZWYg
c2l6ZShzZWxmKToKKyAgICAgICAgIiIiR2V0cyB0aGUgd2luZG93IHNpemUgYXMgYSB0dXBsZSBv
ZiBgKHdpZHRoLCBoZWlnaHQpYC4iIiIKKyAgICAgICAgcmVjdCA9IHNlbGYucmVjdAorICAgICAg
ICByZXR1cm4gKHJlY3RbIndpZHRoIl0sIHJlY3RbImhlaWdodCJdKQorCisgICAgQHNpemUuc2V0
dGVyCisgICAgQGNvbW1hbmQKKyAgICBkZWYgc2l6ZShzZWxmLCBuZXdfc2l6ZSk6CisgICAgICAg
ICIiIlNldCB3aW5kb3cgc2l6ZSBieSBwYXNzaW5nIGEgdHVwbGUgb2YgYCh3aWR0aCwgaGVpZ2h0
KWAuIiIiCisgICAgICAgIHdpZHRoLCBoZWlnaHQgPSBuZXdfc2l6ZQorICAgICAgICBib2R5ID0g
eyJ3aWR0aCI6IHdpZHRoLCAiaGVpZ2h0IjogaGVpZ2h0fQorICAgICAgICBzZWxmLnNlc3Npb24u
c2VuZF9zZXNzaW9uX2NvbW1hbmQoIlBPU1QiLCAid2luZG93L3JlY3QiLCBib2R5KQorCisgICAg
QHByb3BlcnR5CisgICAgQGNvbW1hbmQKKyAgICBkZWYgcG9zaXRpb24oc2VsZik6CisgICAgICAg
ICIiIkdldHMgdGhlIHdpbmRvdyBwb3NpdGlvbiBhcyBhIHR1cGxlIG9mIGAoeCwgeSlgLiIiIgor
ICAgICAgICByZWN0ID0gc2VsZi5yZWN0CisgICAgICAgIHJldHVybiAocmVjdFsieCJdLCByZWN0
WyJ5Il0pCisKKyAgICBAcG9zaXRpb24uc2V0dGVyCisgICAgQGNvbW1hbmQKKyAgICBkZWYgcG9z
aXRpb24oc2VsZiwgbmV3X3Bvc2l0aW9uKToKKyAgICAgICAgIiIiU2V0IHdpbmRvdyBwb3NpdGlv
biBieSBwYXNzaW5nIGEgdHVwbGUgb2YgYCh4LCB5KWAuIiIiCisgICAgICAgIHgsIHkgPSBuZXdf
cG9zaXRpb24KKyAgICAgICAgYm9keSA9IHsieCI6IHgsICJ5IjogeX0KKyAgICAgICAgc2VsZi5z
ZXNzaW9uLnNlbmRfc2Vzc2lvbl9jb21tYW5kKCJQT1NUIiwgIndpbmRvdy9yZWN0IiwgYm9keSkK
KworICAgIEBjb21tYW5kCisgICAgZGVmIG1heGltaXplKHNlbGYpOgorICAgICAgICByZXR1cm4g
c2VsZi5zZXNzaW9uLnNlbmRfc2Vzc2lvbl9jb21tYW5kKCJQT1NUIiwgIndpbmRvdy9tYXhpbWl6
ZSIpCisKKyAgICBAY29tbWFuZAorICAgIGRlZiBtaW5pbWl6ZShzZWxmKToKKyAgICAgICAgcmV0
dXJuIHNlbGYuc2Vzc2lvbi5zZW5kX3Nlc3Npb25fY29tbWFuZCgiUE9TVCIsICJ3aW5kb3cvbWlu
aW1pemUiKQorCisgICAgQGNvbW1hbmQKKyAgICBkZWYgZnVsbHNjcmVlbihzZWxmKToKKyAgICAg
ICAgcmV0dXJuIHNlbGYuc2Vzc2lvbi5zZW5kX3Nlc3Npb25fY29tbWFuZCgiUE9TVCIsICJ3aW5k
b3cvZnVsbHNjcmVlbiIpCisKKworY2xhc3MgRmluZChvYmplY3QpOgorICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBzZXNzaW9uKToKKyAgICAgICAgc2VsZi5zZXNzaW9uID0gc2Vzc2lvbgorCisgICAg
QGNvbW1hbmQKKyAgICBkZWYgY3NzKHNlbGYsIHNlbGVjdG9yLCBhbGw9VHJ1ZSk6CisgICAgICAg
IHJldHVybiBzZWxmLl9maW5kX2VsZW1lbnQoImNzcyBzZWxlY3RvciIsIHNlbGVjdG9yLCBhbGwp
CisKKyAgICBkZWYgX2ZpbmRfZWxlbWVudChzZWxmLCBzdHJhdGVneSwgc2VsZWN0b3IsIGFsbCk6
CisgICAgICAgIHJvdXRlID0gImVsZW1lbnRzIiBpZiBhbGwgZWxzZSAiZWxlbWVudCIKKworICAg
ICAgICBib2R5ID0geyJ1c2luZyI6IHN0cmF0ZWd5LAorICAgICAgICAgICAgICAgICJ2YWx1ZSI6
IHNlbGVjdG9yfQorCisgICAgICAgIGRhdGEgPSBzZWxmLnNlc3Npb24uc2VuZF9zZXNzaW9uX2Nv
bW1hbmQoIlBPU1QiLCByb3V0ZSwgYm9keSkKKworICAgICAgICBpZiBhbGw6CisgICAgICAgICAg
ICBydiA9IFtzZWxmLnNlc3Npb24uX2VsZW1lbnQoaXRlbSkgZm9yIGl0ZW0gaW4gZGF0YV0KKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIHJ2ID0gc2VsZi5zZXNzaW9uLl9lbGVtZW50KGRhdGEp
CisKKyAgICAgICAgcmV0dXJuIHJ2CisKKworY2xhc3MgQ29va2llcyhvYmplY3QpOgorICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBzZXNzaW9uKToKKyAgICAgICAgc2VsZi5zZXNzaW9uID0gc2Vzc2lv
bgorCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIG5hbWUpOgorICAgICAgICBzZWxmLnNlc3Np
b24uc2VuZF9zZXNzaW9uX2NvbW1hbmQoIkdFVCIsICJjb29raWUvJXMiICUgbmFtZSwge30pCisK
KyAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwgbmFtZSwgdmFsdWUpOgorICAgICAgICBjb29raWUg
PSB7Im5hbWUiOiBuYW1lLAorICAgICAgICAgICAgICAgICAgInZhbHVlIjogTm9uZX0KKworICAg
ICAgICBpZiBpc2luc3RhbmNlKG5hbWUsIChzdHIsIHVuaWNvZGUpKToKKyAgICAgICAgICAgIGNv
b2tpZVsidmFsdWUiXSA9IHZhbHVlCisgICAgICAgIGVsaWYgaGFzYXR0cih2YWx1ZSwgInZhbHVl
Iik6CisgICAgICAgICAgICBjb29raWVbInZhbHVlIl0gPSB2YWx1ZS52YWx1ZQorICAgICAgICBz
ZWxmLnNlc3Npb24uc2VuZF9zZXNzaW9uX2NvbW1hbmQoIlBPU1QiLCAiY29va2llLyVzIiAlIG5h
bWUsIHt9KQorCisKK2NsYXNzIFVzZXJQcm9tcHQob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18o
c2VsZiwgc2Vzc2lvbik6CisgICAgICAgIHNlbGYuc2Vzc2lvbiA9IHNlc3Npb24KKworICAgIEBj
b21tYW5kCisgICAgZGVmIGRpc21pc3Moc2VsZik6CisgICAgICAgIHNlbGYuc2Vzc2lvbi5zZW5k
X3Nlc3Npb25fY29tbWFuZCgiUE9TVCIsICJhbGVydC9kaXNtaXNzIikKKworICAgIEBjb21tYW5k
CisgICAgZGVmIGFjY2VwdChzZWxmKToKKyAgICAgICAgc2VsZi5zZXNzaW9uLnNlbmRfc2Vzc2lv
bl9jb21tYW5kKCJQT1NUIiwgImFsZXJ0L2FjY2VwdCIpCisKKyAgICBAcHJvcGVydHkKKyAgICBA
Y29tbWFuZAorICAgIGRlZiB0ZXh0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5zZXNzaW9u
LnNlbmRfc2Vzc2lvbl9jb21tYW5kKCJHRVQiLCAiYWxlcnQvdGV4dCIpCisKKyAgICBAdGV4dC5z
ZXR0ZXIKKyAgICBAY29tbWFuZAorICAgIGRlZiB0ZXh0KHNlbGYsIHZhbHVlKToKKyAgICAgICAg
Ym9keSA9IHsidmFsdWUiOiBsaXN0KHZhbHVlKX0KKyAgICAgICAgc2VsZi5zZXNzaW9uLnNlbmRf
c2Vzc2lvbl9jb21tYW5kKCJQT1NUIiwgImFsZXJ0L3RleHQiLCBib2R5PWJvZHkpCisKKworY2xh
c3MgU2Vzc2lvbihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0LCB1
cmxfcHJlZml4PSIvIiwgY2FwYWJpbGl0aWVzPU5vbmUsCisgICAgICAgICAgICAgICAgIHRpbWVv
dXQ9Tm9uZSwgZXh0ZW5zaW9uPU5vbmUpOgorICAgICAgICBzZWxmLnRyYW5zcG9ydCA9IHRyYW5z
cG9ydC5IVFRQV2lyZVByb3RvY29sKAorICAgICAgICAgICAgaG9zdCwgcG9ydCwgdXJsX3ByZWZp
eCwgdGltZW91dD10aW1lb3V0KQorICAgICAgICBzZWxmLmNhcGFiaWxpdGllcyA9IGNhcGFiaWxp
dGllcworICAgICAgICBzZWxmLnNlc3Npb25faWQgPSBOb25lCisgICAgICAgIHNlbGYudGltZW91
dHMgPSBOb25lCisgICAgICAgIHNlbGYud2luZG93ID0gTm9uZQorICAgICAgICBzZWxmLmZpbmQg
PSBOb25lCisgICAgICAgIHNlbGYuX2VsZW1lbnRfY2FjaGUgPSB7fQorICAgICAgICBzZWxmLmV4
dGVuc2lvbiA9IE5vbmUKKyAgICAgICAgc2VsZi5leHRlbnNpb25fY2xzID0gZXh0ZW5zaW9uCisK
KyAgICAgICAgc2VsZi50aW1lb3V0cyA9IFRpbWVvdXRzKHNlbGYpCisgICAgICAgIHNlbGYud2lu
ZG93ID0gV2luZG93KHNlbGYpCisgICAgICAgIHNlbGYuZmluZCA9IEZpbmQoc2VsZikKKyAgICAg
ICAgc2VsZi5hbGVydCA9IFVzZXJQcm9tcHQoc2VsZikKKyAgICAgICAgc2VsZi5hY3Rpb25zID0g
QWN0aW9ucyhzZWxmKQorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgc2VsZi5z
dGFydCgpCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFy
Z3MsICoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5lbmQoKQorCisgICAgZGVmIF9fZGVsX18oc2Vs
Zik6CisgICAgICAgIHNlbGYuZW5kKCkKKworICAgIGRlZiBzdGFydChzZWxmKToKKyAgICAgICAg
aWYgc2VsZi5zZXNzaW9uX2lkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuCisKKyAg
ICAgICAgYm9keSA9IHt9CisKKyAgICAgICAgaWYgc2VsZi5jYXBhYmlsaXRpZXMgaXMgbm90IE5v
bmU6CisgICAgICAgICAgICBib2R5WyJjYXBhYmlsaXRpZXMiXSA9IHNlbGYuY2FwYWJpbGl0aWVz
CisKKyAgICAgICAgdmFsdWUgPSBzZWxmLnNlbmRfY29tbWFuZCgiUE9TVCIsICJzZXNzaW9uIiwg
Ym9keT1ib2R5KQorICAgICAgICBzZWxmLnNlc3Npb25faWQgPSB2YWx1ZVsic2Vzc2lvbklkIl0K
KyAgICAgICAgc2VsZi5jYXBhYmlsaXRpZXMgPSB2YWx1ZVsiY2FwYWJpbGl0aWVzIl0KKworICAg
ICAgICBpZiBzZWxmLmV4dGVuc2lvbl9jbHM6CisgICAgICAgICAgICBzZWxmLmV4dGVuc2lvbiA9
IHNlbGYuZXh0ZW5zaW9uX2NscyhzZWxmKQorCisgICAgICAgIHJldHVybiB2YWx1ZQorCisgICAg
ZGVmIGVuZChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5zZXNzaW9uX2lkIGlzIE5vbmU6CisgICAg
ICAgICAgICByZXR1cm4KKworICAgICAgICB1cmwgPSAic2Vzc2lvbi8lcyIgJSBzZWxmLnNlc3Np
b25faWQKKyAgICAgICAgc2VsZi5zZW5kX2NvbW1hbmQoIkRFTEVURSIsIHVybCkKKworICAgICAg
ICBzZWxmLnNlc3Npb25faWQgPSBOb25lCisKKyAgICBkZWYgc2VuZF9jb21tYW5kKHNlbGYsIG1l
dGhvZCwgdXJsLCBib2R5PU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgU2VuZCBhIGNvbW1h
bmQgdG8gdGhlIHJlbW90ZSBlbmQgYW5kIHZhbGlkYXRlIGl0cyBzdWNjZXNzLgorCisgICAgICAg
IDpwYXJhbSBtZXRob2Q6IEhUVFAgbWV0aG9kIHRvIHVzZSBpbiByZXF1ZXN0LgorICAgICAgICA6
cGFyYW0gdXJpOiAiQ29tbWFuZCBwYXJ0IiBvZiB0aGUgSFRUUCByZXF1ZXN0IFVSTCwKKyAgICAg
ICAgICAgIGUuZy4gYHdpbmRvdy9yZWN0YC4KKyAgICAgICAgOnBhcmFtIGJvZHk6IE9wdGlvbmFs
IGJvZHkgb2YgdGhlIEhUVFAgcmVxdWVzdC4KKworICAgICAgICA6cmV0dXJuOiBgTm9uZWAgaWYg
dGhlIEhUVFAgcmVzcG9uc2UgYm9keSB3YXMgZW1wdHksIG90aGVyd2lzZQorICAgICAgICAgICAg
dGhlIHJlc3VsdCBvZiBwYXJzaW5nIHRoZSBib2R5IGFzIEpTT04uCisKKyAgICAgICAgOnJhaXNl
cyBlcnJvci5XZWJEcml2ZXJFeGNlcHRpb246IElmIHRoZSByZW1vdGUgZW5kIHJldHVybnMKKyAg
ICAgICAgICAgIGFuIGVycm9yLgorICAgICAgICAiIiIKKyAgICAgICAgcmVzcG9uc2UgPSBzZWxm
LnRyYW5zcG9ydC5zZW5kKG1ldGhvZCwgdXJsLCBib2R5KQorCisgICAgICAgIGlmICJ2YWx1ZSIg
aW4gcmVzcG9uc2UuYm9keToKKyAgICAgICAgICAgIHZhbHVlID0gcmVzcG9uc2UuYm9keVsidmFs
dWUiXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgZXJyb3IuVW5rbm93bkVycm9y
RXhjZXB0aW9uKCJObyAndmFsdWUnIGtleSBpbiByZXNwb25zZSBib2R5OlxuJXMiICUKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uLmR1bXBzKHJlc3Bv
bnNlLmJvZHkpKQorCisgICAgICAgIGlmIHJlc3BvbnNlLnN0YXR1cyAhPSAyMDA6CisgICAgICAg
ICAgICBjbHMgPSBlcnJvci5nZXQodmFsdWUuZ2V0KCJlcnJvciIpKQorICAgICAgICAgICAgcmFp
c2UgY2xzKHZhbHVlLmdldCgibWVzc2FnZSIpKQorCisgICAgICAgIHJldHVybiB2YWx1ZQorCisg
ICAgZGVmIHNlbmRfc2Vzc2lvbl9jb21tYW5kKHNlbGYsIG1ldGhvZCwgdXJpLCBib2R5PU5vbmUp
OgorICAgICAgICAiIiIKKyAgICAgICAgU2VuZCBhIGNvbW1hbmQgdG8gYW4gZXN0YWJsaXNoZWQg
c2Vzc2lvbiBhbmQgdmFsaWRhdGUgaXRzIHN1Y2Nlc3MuCisKKyAgICAgICAgOnBhcmFtIG1ldGhv
ZDogSFRUUCBtZXRob2QgdG8gdXNlIGluIHJlcXVlc3QuCisgICAgICAgIDpwYXJhbSB1cmw6ICJD
b21tYW5kIHBhcnQiIG9mIHRoZSBIVFRQIHJlcXVlc3QgVVJMLAorICAgICAgICAgICAgZS5nLiBg
d2luZG93L3JlY3RgLgorICAgICAgICA6cGFyYW0gYm9keTogT3B0aW9uYWwgYm9keSBvZiB0aGUg
SFRUUCByZXF1ZXN0LiAgTXVzdCBiZSBKU09OCisgICAgICAgICAgICBzZXJpYWxpc2FibGUuCisK
KyAgICAgICAgOnJldHVybjogYE5vbmVgIGlmIHRoZSBIVFRQIHJlc3BvbnNlIGJvZHkgd2FzIGVt
cHR5LCBvdGhlcndpc2UKKyAgICAgICAgICAgIHRoZSByZXN1bHQgb2YgcGFyc2luZyB0aGUgYm9k
eSBhcyBKU09OLgorCisgICAgICAgIDpyYWlzZXMgZXJyb3IuU2Vzc2lvbk5vdENyZWF0ZWRFeGNl
cHRpb246IElmIHRoZXJlIGlzIG5vIGFjdGl2ZQorICAgICAgICAgICAgc2Vzc2lvbi4KKyAgICAg
ICAgOnJhaXNlcyBlcnJvci5XZWJEcml2ZXJFeGNlcHRpb246IElmIHRoZSByZW1vdGUgZW5kIHJl
dHVybnMKKyAgICAgICAgICAgIGFuIGVycm9yLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2Vs
Zi5zZXNzaW9uX2lkIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBlcnJvci5TZXNzaW9uTm90
Q3JlYXRlZEV4Y2VwdGlvbigpCisKKyAgICAgICAgdXJsID0gdXJscGFyc2UudXJsam9pbigic2Vz
c2lvbi8lcy8iICUgc2VsZi5zZXNzaW9uX2lkLCB1cmkpCisgICAgICAgIHJldHVybiBzZWxmLnNl
bmRfY29tbWFuZChtZXRob2QsIHVybCwgYm9keSkKKworICAgIEBwcm9wZXJ0eQorICAgIEBjb21t
YW5kCisgICAgZGVmIHVybChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuc2VuZF9zZXNzaW9u
X2NvbW1hbmQoIkdFVCIsICJ1cmwiKQorCisgICAgQHVybC5zZXR0ZXIKKyAgICBAY29tbWFuZAor
ICAgIGRlZiB1cmwoc2VsZiwgdXJsKToKKyAgICAgICAgaWYgdXJscGFyc2UudXJsc3BsaXQodXJs
KS5uZXRsb2MgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnVybCh1cmwpCisgICAg
ICAgIGJvZHkgPSB7InVybCI6IHVybH0KKyAgICAgICAgcmV0dXJuIHNlbGYuc2VuZF9zZXNzaW9u
X2NvbW1hbmQoIlBPU1QiLCAidXJsIiwgYm9keSkKKworICAgIEBjb21tYW5kCisgICAgZGVmIGJh
Y2soc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnNlbmRfc2Vzc2lvbl9jb21tYW5kKCJQT1NU
IiwgImJhY2siKQorCisgICAgQGNvbW1hbmQKKyAgICBkZWYgZm9yd2FyZChzZWxmKToKKyAgICAg
ICAgcmV0dXJuIHNlbGYuc2VuZF9zZXNzaW9uX2NvbW1hbmQoIlBPU1QiLCAiZm9yd2FyZCIpCisK
KyAgICBAY29tbWFuZAorICAgIGRlZiByZWZyZXNoKHNlbGYpOgorICAgICAgICByZXR1cm4gc2Vs
Zi5zZW5kX3Nlc3Npb25fY29tbWFuZCgiUE9TVCIsICJyZWZyZXNoIikKKworICAgIEBwcm9wZXJ0
eQorICAgIEBjb21tYW5kCisgICAgZGVmIHRpdGxlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2Vs
Zi5zZW5kX3Nlc3Npb25fY29tbWFuZCgiR0VUIiwgInRpdGxlIikKKworICAgIEBwcm9wZXJ0eQor
ICAgIEBjb21tYW5kCisgICAgZGVmIHdpbmRvd19oYW5kbGUoc2VsZik6CisgICAgICAgIHJldHVy
biBzZWxmLnNlbmRfc2Vzc2lvbl9jb21tYW5kKCJHRVQiLCAid2luZG93IikKKworICAgIEB3aW5k
b3dfaGFuZGxlLnNldHRlcgorICAgIEBjb21tYW5kCisgICAgZGVmIHdpbmRvd19oYW5kbGUoc2Vs
ZiwgaGFuZGxlKToKKyAgICAgICAgYm9keSA9IHsiaGFuZGxlIjogaGFuZGxlfQorICAgICAgICBy
ZXR1cm4gc2VsZi5zZW5kX3Nlc3Npb25fY29tbWFuZCgiUE9TVCIsICJ3aW5kb3ciLCBib2R5PWJv
ZHkpCisKKyAgICBkZWYgc3dpdGNoX2ZyYW1lKHNlbGYsIGZyYW1lKToKKyAgICAgICAgaWYgZnJh
bWUgPT0gInBhcmVudCI6CisgICAgICAgICAgICB1cmwgPSAiZnJhbWUvcGFyZW50IgorICAgICAg
ICAgICAgYm9keSA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHVybCA9ICJmcmFt
ZSIKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZnJhbWUsIEVsZW1lbnQpOgorICAgICAgICAg
ICAgICAgIGJvZHkgPSB7ImlkIjogZnJhbWUuanNvbigpfQorICAgICAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgICAgICBib2R5ID0geyJpZCI6IGZyYW1lfQorCisgICAgICAgIHJldHVybiBzZWxm
LnNlbmRfc2Vzc2lvbl9jb21tYW5kKCJQT1NUIiwgdXJsLCBib2R5KQorCisgICAgQGNvbW1hbmQK
KyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnNlbmRfc2Vzc2lvbl9j
b21tYW5kKCJERUxFVEUiLCAid2luZG93IikKKworICAgIEBwcm9wZXJ0eQorICAgIEBjb21tYW5k
CisgICAgZGVmIGhhbmRsZXMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnNlbmRfc2Vzc2lv
bl9jb21tYW5kKCJHRVQiLCAid2luZG93L2hhbmRsZXMiKQorCisgICAgQHByb3BlcnR5CisgICAg
QGNvbW1hbmQKKyAgICBkZWYgYWN0aXZlX2VsZW1lbnQoc2VsZik6CisgICAgICAgIGRhdGEgPSBz
ZWxmLnNlbmRfc2Vzc2lvbl9jb21tYW5kKCJHRVQiLCAiZWxlbWVudC9hY3RpdmUiKQorICAgICAg
ICBpZiBkYXRhIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2VsZW1lbnQo
ZGF0YSkKKworICAgIGRlZiBfZWxlbWVudChzZWxmLCBkYXRhKToKKyAgICAgICAgZWxlbV9pZCA9
IGRhdGFbZWxlbWVudF9rZXldCisgICAgICAgIGFzc2VydCBlbGVtX2lkCisgICAgICAgIGlmIGVs
ZW1faWQgaW4gc2VsZi5fZWxlbWVudF9jYWNoZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9l
bGVtZW50X2NhY2hlW2VsZW1faWRdCisgICAgICAgIHJldHVybiBFbGVtZW50KHNlbGYsIGVsZW1f
aWQpCisKKyAgICBAY29tbWFuZAorICAgIGRlZiBjb29raWVzKHNlbGYsIG5hbWU9Tm9uZSk6Cisg
ICAgICAgIGlmIG5hbWUgaXMgTm9uZToKKyAgICAgICAgICAgIHVybCA9ICJjb29raWUiCisgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICB1cmwgPSAiY29va2llLyVzIiAlIG5hbWUKKyAgICAgICAg
cmV0dXJuIHNlbGYuc2VuZF9zZXNzaW9uX2NvbW1hbmQoIkdFVCIsIHVybCwge30pCisKKyAgICBA
Y29tbWFuZAorICAgIGRlZiBzZXRfY29va2llKHNlbGYsIG5hbWUsIHZhbHVlLCBwYXRoPU5vbmUs
IGRvbWFpbj1Ob25lLCBzZWN1cmU9Tm9uZSwgZXhwaXJ5PU5vbmUpOgorICAgICAgICBib2R5ID0g
eyJuYW1lIjogbmFtZSwKKyAgICAgICAgICAgICAgICAidmFsdWUiOiB2YWx1ZX0KKyAgICAgICAg
aWYgcGF0aCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGJvZHlbInBhdGgiXSA9IHBhdGgKKyAg
ICAgICAgaWYgZG9tYWluIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgYm9keVsiZG9tYWluIl0g
PSBkb21haW4KKyAgICAgICAgaWYgc2VjdXJlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgYm9k
eVsic2VjdXJlIl0gPSBzZWN1cmUKKyAgICAgICAgaWYgZXhwaXJ5IGlzIG5vdCBOb25lOgorICAg
ICAgICAgICAgYm9keVsiZXhwaXJ5Il0gPSBleHBpcnkKKyAgICAgICAgc2VsZi5zZW5kX3Nlc3Np
b25fY29tbWFuZCgiUE9TVCIsICJjb29raWUiLCB7ImNvb2tpZSI6IGJvZHl9KQorCisgICAgZGVm
IGRlbGV0ZV9jb29raWUoc2VsZiwgbmFtZT1Ob25lKToKKyAgICAgICAgaWYgbmFtZSBpcyBOb25l
OgorICAgICAgICAgICAgdXJsID0gImNvb2tpZSIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg
IHVybCA9ICJjb29raWUvJXMiICUgbmFtZQorICAgICAgICBzZWxmLnNlbmRfc2Vzc2lvbl9jb21t
YW5kKCJERUxFVEUiLCB1cmwsIHt9KQorCisgICAgI1suLi5dCisKKyAgICBAY29tbWFuZAorICAg
IGRlZiBleGVjdXRlX3NjcmlwdChzZWxmLCBzY3JpcHQsIGFyZ3M9Tm9uZSk6CisgICAgICAgIGlm
IGFyZ3MgaXMgTm9uZToKKyAgICAgICAgICAgIGFyZ3MgPSBbXQorCisgICAgICAgIGJvZHkgPSB7
CisgICAgICAgICAgICAic2NyaXB0Ijogc2NyaXB0LAorICAgICAgICAgICAgImFyZ3MiOiBhcmdz
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHNlbGYuc2VuZF9zZXNzaW9uX2NvbW1hbmQoIlBP
U1QiLCAiZXhlY3V0ZS9zeW5jIiwgYm9keSkKKworICAgIEBjb21tYW5kCisgICAgZGVmIGV4ZWN1
dGVfYXN5bmNfc2NyaXB0KHNlbGYsIHNjcmlwdCwgYXJncz1Ob25lKToKKyAgICAgICAgaWYgYXJn
cyBpcyBOb25lOgorICAgICAgICAgICAgYXJncyA9IFtdCisKKyAgICAgICAgYm9keSA9IHsKKyAg
ICAgICAgICAgICJzY3JpcHQiOiBzY3JpcHQsCisgICAgICAgICAgICAiYXJncyI6IGFyZ3MKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gc2VsZi5zZW5kX3Nlc3Npb25fY29tbWFuZCgiUE9TVCIs
ICJleGVjdXRlL2FzeW5jIiwgYm9keSkKKworICAgICNbLi4uXQorCisgICAgQGNvbW1hbmQKKyAg
ICBkZWYgc2NyZWVuc2hvdChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuc2VuZF9zZXNzaW9u
X2NvbW1hbmQoIkdFVCIsICJzY3JlZW5zaG90IikKKworCitjbGFzcyBFbGVtZW50KG9iamVjdCk6
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlc3Npb24sIGlkKToKKyAgICAgICAgc2VsZi5zZXNz
aW9uID0gc2Vzc2lvbgorICAgICAgICBzZWxmLmlkID0gaWQKKyAgICAgICAgYXNzZXJ0IGlkIG5v
dCBpbiBzZWxmLnNlc3Npb24uX2VsZW1lbnRfY2FjaGUKKyAgICAgICAgc2VsZi5zZXNzaW9uLl9l
bGVtZW50X2NhY2hlW3NlbGYuaWRdID0gc2VsZgorCisgICAgZGVmIHNlbmRfZWxlbWVudF9jb21t
YW5kKHNlbGYsIG1ldGhvZCwgdXJpLCBib2R5PU5vbmUpOgorICAgICAgICB1cmwgPSAiZWxlbWVu
dC8lcy8lcyIgJSAoc2VsZi5pZCwgdXJpKQorICAgICAgICByZXR1cm4gc2VsZi5zZXNzaW9uLnNl
bmRfc2Vzc2lvbl9jb21tYW5kKG1ldGhvZCwgdXJsLCBib2R5KQorCisgICAgZGVmIGpzb24oc2Vs
Zik6CisgICAgICAgIHJldHVybiB7ZWxlbWVudF9rZXk6IHNlbGYuaWR9CisKKyAgICBAY29tbWFu
ZAorICAgIGRlZiBmaW5kX2VsZW1lbnQoc2VsZiwgc3RyYXRlZ3ksIHNlbGVjdG9yKToKKyAgICAg
ICAgYm9keSA9IHsidXNpbmciOiBzdHJhdGVneSwKKyAgICAgICAgICAgICAgICAidmFsdWUiOiBz
ZWxlY3Rvcn0KKworICAgICAgICBlbGVtID0gc2VsZi5zZW5kX2VsZW1lbnRfY29tbWFuZCgiUE9T
VCIsICJlbGVtZW50IiwgYm9keSkKKyAgICAgICAgcmV0dXJuIHNlbGYuc2Vzc2lvbi5fZWxlbWVu
dChlbGVtKQorCisgICAgQGNvbW1hbmQKKyAgICBkZWYgY2xpY2soc2VsZik6CisgICAgICAgIHNl
bGYuc2VuZF9lbGVtZW50X2NvbW1hbmQoIlBPU1QiLCAiY2xpY2siLCB7fSkKKworICAgIEBjb21t
YW5kCisgICAgZGVmIHRhcChzZWxmKToKKyAgICAgICAgc2VsZi5zZW5kX2VsZW1lbnRfY29tbWFu
ZCgiUE9TVCIsICJ0YXAiLCB7fSkKKworICAgIEBjb21tYW5kCisgICAgZGVmIGNsZWFyKHNlbGYp
OgorICAgICAgICBzZWxmLnNlbmRfZWxlbWVudF9jb21tYW5kKCJQT1NUIiwgc2VsZi51cmwoImNs
ZWFyIiksIHt9KQorCisgICAgQGNvbW1hbmQKKyAgICBkZWYgc2VuZF9rZXlzKHNlbGYsIHRleHQp
OgorICAgICAgICByZXR1cm4gc2VsZi5zZW5kX2VsZW1lbnRfY29tbWFuZCgiUE9TVCIsICJ2YWx1
ZSIsIHsidGV4dCI6IHRleHR9KQorCisgICAgQHByb3BlcnR5CisgICAgQGNvbW1hbmQKKyAgICBk
ZWYgdGV4dChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuc2VuZF9lbGVtZW50X2NvbW1hbmQo
IkdFVCIsICJ0ZXh0IikKKworICAgIEBwcm9wZXJ0eQorICAgIEBjb21tYW5kCisgICAgZGVmIG5h
bWUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnNlbmRfZWxlbWVudF9jb21tYW5kKCJHRVQi
LCAibmFtZSIpCisKKyAgICBAY29tbWFuZAorICAgIGRlZiBzdHlsZShzZWxmLCBwcm9wZXJ0eV9u
YW1lKToKKyAgICAgICAgcmV0dXJuIHNlbGYuc2VuZF9lbGVtZW50X2NvbW1hbmQoIkdFVCIsICJj
c3MvJXMiICUgcHJvcGVydHlfbmFtZSkKKworICAgIEBwcm9wZXJ0eQorICAgIEBjb21tYW5kCisg
ICAgZGVmIHJlY3Qoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnNlbmRfZWxlbWVudF9jb21t
YW5kKCJHRVQiLCAicmVjdCIpCisKKyAgICBAcHJvcGVydHkKKyAgICBAY29tbWFuZAorICAgIGRl
ZiBzZWxlY3RlZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuc2VuZF9lbGVtZW50X2NvbW1h
bmQoIkdFVCIsICJzZWxlY3RlZCIpCisKKyAgICBAY29tbWFuZAorICAgIGRlZiBhdHRyaWJ1dGUo
c2VsZiwgbmFtZSk6CisgICAgICAgIHJldHVybiBzZWxmLnNlbmRfZWxlbWVudF9jb21tYW5kKCJH
RVQiLCAiYXR0cmlidXRlLyVzIiAlIG5hbWUpCisKKyAgICAjIFRoaXMgTVVTVCBjb21lIGxhc3Qg
YmVjYXVzZSBvdGhlcndpc2UgQHByb3BlcnR5IGRlY29yYXRvcnMgYWJvdmUKKyAgICAjIHdpbGwg
YmUgb3ZlcnJpZGRlbiBieSB0aGlzLgorICAgIEBjb21tYW5kCisgICAgZGVmIHByb3BlcnR5KHNl
bGYsIG5hbWUpOgorICAgICAgICByZXR1cm4gc2VsZi5zZW5kX2VsZW1lbnRfY29tbWFuZCgiR0VU
IiwgInByb3BlcnR5LyVzIiAlIG5hbWUpCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBv
cnRlZC93M2MvdG9vbHMvd2ViZHJpdmVyL3dlYmRyaXZlci9lcnJvci5weSBiL1dlYkRyaXZlclRl
c3RzL2ltcG9ydGVkL3czYy90b29scy93ZWJkcml2ZXIvd2ViZHJpdmVyL2Vycm9yLnB5Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40M2U5ZjM5ZmZiYQotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93ZWJkcml2ZXIvd2Vi
ZHJpdmVyL2Vycm9yLnB5CkBAIC0wLDAgKzEsMTQ0IEBACitpbXBvcnQgY29sbGVjdGlvbnMKKwor
CitjbGFzcyBXZWJEcml2ZXJFeGNlcHRpb24oRXhjZXB0aW9uKToKKyAgICBodHRwX3N0YXR1cyA9
IE5vbmUKKyAgICBzdGF0dXNfY29kZSA9IE5vbmUKKworCitjbGFzcyBFbGVtZW50Tm90U2VsZWN0
YWJsZUV4Y2VwdGlvbihXZWJEcml2ZXJFeGNlcHRpb24pOgorICAgIGh0dHBfc3RhdHVzID0gNDAw
CisgICAgc3RhdHVzX2NvZGUgPSAiZWxlbWVudCBub3Qgc2VsZWN0YWJsZSIKKworCitjbGFzcyBF
bGVtZW50Tm90VmlzaWJsZUV4Y2VwdGlvbihXZWJEcml2ZXJFeGNlcHRpb24pOgorICAgIGh0dHBf
c3RhdHVzID0gNDAwCisgICAgc3RhdHVzX2NvZGUgPSAiZWxlbWVudCBub3QgdmlzaWJsZSIKKwor
CitjbGFzcyBJbnNlY3VyZUNlcnRpZmljYXRlRXhjZXB0aW9uKFdlYkRyaXZlckV4Y2VwdGlvbik6
CisgICAgaHR0cF9zdGF0dXMgPSA0MDAKKyAgICBzdGF0dXNfY29kZSA9ICJpbnNlY3VyZSBjZXJ0
aWZpY2F0ZSIKKworCitjbGFzcyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oV2ViRHJpdmVyRXhj
ZXB0aW9uKToKKyAgICBodHRwX3N0YXR1cyA9IDQwMAorICAgIHN0YXR1c19jb2RlID0gImludmFs
aWQgYXJndW1lbnQiCisKKworY2xhc3MgSW52YWxpZENvb2tpZURvbWFpbkV4Y2VwdGlvbihXZWJE
cml2ZXJFeGNlcHRpb24pOgorICAgIGh0dHBfc3RhdHVzID0gNDAwCisgICAgc3RhdHVzX2NvZGUg
PSAiaW52YWxpZCBjb29raWUgZG9tYWluIgorCisKK2NsYXNzIEludmFsaWRFbGVtZW50Q29vcmRp
bmF0ZXNFeGNlcHRpb24oV2ViRHJpdmVyRXhjZXB0aW9uKToKKyAgICBodHRwX3N0YXR1cyA9IDQw
MAorICAgIHN0YXR1c19jb2RlID0gImludmFsaWQgZWxlbWVudCBjb29yZGluYXRlcyIKKworCitj
bGFzcyBJbnZhbGlkRWxlbWVudFN0YXRlRXhjZXB0aW9uKFdlYkRyaXZlckV4Y2VwdGlvbik6Cisg
ICAgaHR0cF9zdGF0dXMgPSA0MDAKKyAgICBzdGF0dXNfY29kZSA9ICJpbnZhbGlkIGNvb2tpZSBk
b21haW4iCisKKworY2xhc3MgSW52YWxpZFNlbGVjdG9yRXhjZXB0aW9uKFdlYkRyaXZlckV4Y2Vw
dGlvbik6CisgICAgaHR0cF9zdGF0dXMgPSA0MDAKKyAgICBzdGF0dXNfY29kZSA9ICJpbnZhbGlk
IHNlbGVjdG9yIgorCisKK2NsYXNzIEludmFsaWRTZXNzaW9uSWRFeGNlcHRpb24oV2ViRHJpdmVy
RXhjZXB0aW9uKToKKyAgICBodHRwX3N0YXR1cyA9IDQwNAorICAgIHN0YXR1c19jb2RlID0gImlu
dmFsaWQgc2Vzc2lvbiBpZCIKKworCitjbGFzcyBKYXZhc2NyaXB0RXJyb3JFeGNlcHRpb24oV2Vi
RHJpdmVyRXhjZXB0aW9uKToKKyAgICBodHRwX3N0YXR1cyA9IDUwMAorICAgIHN0YXR1c19jb2Rl
ID0gImphdmFzY3JpcHQgZXJyb3IiCisKKworY2xhc3MgTW92ZVRhcmdldE91dE9mQm91bmRzRXhj
ZXB0aW9uKFdlYkRyaXZlckV4Y2VwdGlvbik6CisgICAgaHR0cF9zdGF0dXMgPSA1MDAKKyAgICBz
dGF0dXNfY29kZSA9ICJtb3ZlIHRhcmdldCBvdXQgb2YgYm91bmRzIgorCisKK2NsYXNzIE5vU3Vj
aEFsZXJ0RXhjZXB0aW9uKFdlYkRyaXZlckV4Y2VwdGlvbik6CisgICAgaHR0cF9zdGF0dXMgPSA0
MDQKKyAgICBzdGF0dXNfY29kZSA9ICJubyBzdWNoIGFsZXJ0IgorCisKK2NsYXNzIE5vU3VjaEVs
ZW1lbnRFeGNlcHRpb24oV2ViRHJpdmVyRXhjZXB0aW9uKToKKyAgICBodHRwX3N0YXR1cyA9IDQw
NAorICAgIHN0YXR1c19jb2RlID0gIm5vIHN1Y2ggZWxlbWVudCIKKworCitjbGFzcyBOb1N1Y2hG
cmFtZUV4Y2VwdGlvbihXZWJEcml2ZXJFeGNlcHRpb24pOgorICAgIGh0dHBfc3RhdHVzID0gNDA0
CisgICAgc3RhdHVzX2NvZGUgPSAibm8gc3VjaCBmcmFtZSIKKworCitjbGFzcyBOb1N1Y2hXaW5k
b3dFeGNlcHRpb24oV2ViRHJpdmVyRXhjZXB0aW9uKToKKyAgICBodHRwX3N0YXR1cyA9IDQwNAor
ICAgIHN0YXR1c19jb2RlID0gIm5vIHN1Y2ggd2luZG93IgorCisKK2NsYXNzIFNjcmlwdFRpbWVv
dXRFeGNlcHRpb24oV2ViRHJpdmVyRXhjZXB0aW9uKToKKyAgICBodHRwX3N0YXR1cyA9IDQwOAor
ICAgIHN0YXR1c19jb2RlID0gInNjcmlwdCB0aW1lb3V0IgorCisKK2NsYXNzIFNlc3Npb25Ob3RD
cmVhdGVkRXhjZXB0aW9uKFdlYkRyaXZlckV4Y2VwdGlvbik6CisgICAgaHR0cF9zdGF0dXMgPSA1
MDAKKyAgICBzdGF0dXNfY29kZSA9ICJzZXNzaW9uIG5vdCBjcmVhdGVkIgorCisKK2NsYXNzIFN0
YWxlRWxlbWVudFJlZmVyZW5jZUV4Y2VwdGlvbihXZWJEcml2ZXJFeGNlcHRpb24pOgorICAgIGh0
dHBfc3RhdHVzID0gNDAwCisgICAgc3RhdHVzX2NvZGUgPSAic3RhbGUgZWxlbWVudCByZWZlcmVu
Y2UiCisKKworY2xhc3MgVGltZW91dEV4Y2VwdGlvbihXZWJEcml2ZXJFeGNlcHRpb24pOgorICAg
IGh0dHBfc3RhdHVzID0gNDA4CisgICAgc3RhdHVzX2NvZGUgPSAidGltZW91dCIKKworCitjbGFz
cyBVbmFibGVUb1NldENvb2tpZUV4Y2VwdGlvbihXZWJEcml2ZXJFeGNlcHRpb24pOgorICAgIGh0
dHBfc3RhdHVzID0gNTAwCisgICAgc3RhdHVzX2NvZGUgPSAidW5hYmxlIHRvIHNldCBjb29raWUi
CisKKworY2xhc3MgVW5leHBlY3RlZEFsZXJ0T3BlbkV4Y2VwdGlvbihXZWJEcml2ZXJFeGNlcHRp
b24pOgorICAgIGh0dHBfc3RhdHVzID0gNTAwCisgICAgc3RhdHVzX2NvZGUgPSAidW5leHBlY3Rl
ZCBhbGVydCBvcGVuIgorCisKK2NsYXNzIFVua25vd25FcnJvckV4Y2VwdGlvbihXZWJEcml2ZXJF
eGNlcHRpb24pOgorICAgIGh0dHBfc3RhdHVzID0gNTAwCisgICAgc3RhdHVzX2NvZGUgPSAidW5r
bm93biBlcnJvciIKKworCitjbGFzcyBVbmtub3duQ29tbWFuZEV4Y2VwdGlvbihXZWJEcml2ZXJF
eGNlcHRpb24pOgorICAgIGh0dHBfc3RhdHVzID0gNDA0CisgICAgc3RhdHVzX2NvZGUgPSAidW5r
bm93biBjb21tYW5kIgorCisKK2NsYXNzIFVua25vd25NZXRob2RFeGNlcHRpb24oV2ViRHJpdmVy
RXhjZXB0aW9uKToKKyAgICBodHRwX3N0YXR1cyA9IDQwNQorICAgIHN0YXR1c19jb2RlID0gInVu
a25vd24gbWV0aG9kIgorCisKK2NsYXNzIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKFdl
YkRyaXZlckV4Y2VwdGlvbik6CisgICAgaHR0cF9zdGF0dXMgPSA1MDAKKyAgICBzdGF0dXNfY29k
ZSA9ICJ1bnN1cHBvcnRlZCBvcGVyYXRpb24iCisKKworZGVmIGdldChzdGF0dXNfY29kZSk6Cisg
ICAgIiIiR2V0cyBleGNlcHRpb24gZnJvbSBgc3RhdHVzX2NvZGVgLCBmYWxsaW5nIGJhY2sgdG8K
KyAgICBgYFdlYkRyaXZlckV4Y2VwdGlvbmBgIGlmIGl0IGlzIG5vdCBmb3VuZC4KKyAgICAiIiIK
KyAgICByZXR1cm4gX2Vycm9ycy5nZXQoc3RhdHVzX2NvZGUsIFdlYkRyaXZlckV4Y2VwdGlvbikK
KworCitfZXJyb3JzID0gY29sbGVjdGlvbnMuZGVmYXVsdGRpY3QoKQorZm9yIGl0ZW0gaW4gbG9j
YWxzKCkudmFsdWVzKCk6CisgICAgaWYgdHlwZShpdGVtKSA9PSB0eXBlIGFuZCBpc3N1YmNsYXNz
KGl0ZW0sIFdlYkRyaXZlckV4Y2VwdGlvbik6CisgICAgICAgIF9lcnJvcnNbaXRlbS5zdGF0dXNf
Y29kZV0gPSBpdGVtCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9v
bHMvd2ViZHJpdmVyL3dlYmRyaXZlci9zZXJ2by5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVk
L3czYy90b29scy93ZWJkcml2ZXIvd2ViZHJpdmVyL3NlcnZvLnB5Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yZTBiNzIyYWJhYgotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93ZWJkcml2ZXIvd2ViZHJpdmVyL3NlcnZv
LnB5CkBAIC0wLDAgKzEsMTggQEAKK2NsYXNzIFNlcnZvRXh0ZW5zaW9uQ29tbWFuZHMob2JqZWN0
KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2Vzc2lvbik6CisgICAgICAgIHNlbGYuc2Vzc2lv
biA9IHNlc3Npb24KKworICAgIEBjb21tYW5kCisgICAgZGVmIGdldF9wcmVmcyhzZWxmLCAqcHJl
ZnMpOgorICAgICAgICBib2R5ID0geyJwcmVmcyI6IGxpc3QocHJlZnMpfQorICAgICAgICByZXR1
cm4gc2VsZi5zZXNzaW9uLnNlbmRfY29tbWFuZCgiUE9TVCIsICJzZXJ2by9wcmVmcy9nZXQiLCBi
b2R5KQorCisgICAgQGNvbW1hbmQKKyAgICBkZWYgc2V0X3ByZWZzKHNlbGYsIHByZWZzKToKKyAg
ICAgICAgYm9keSA9IHsicHJlZnMiOiBwcmVmc30KKyAgICAgICAgcmV0dXJuIHNlbGYuc2Vzc2lv
bi5zZW5kX2NvbW1hbmQoIlBPU1QiLCAic2Vydm8vcHJlZnMvc2V0IiwgYm9keSkKKworICAgIEBj
b21tYW5kCisgICAgZGVmIHJlc2V0X3ByZWZzKHNlbGYsICpwcmVmcyk6CisgICAgICAgIGJvZHkg
PSB7InByZWZzIjogbGlzdChwcmVmcyl9CisgICAgICAgIHJldHVybiBzZWxmLnNlc3Npb24uc2Vu
ZF9jb21tYW5kKCJQT1NUIiwgInNlcnZvL3ByZWZzL3Jlc2V0IiwgYm9keSkKZGlmZiAtLWdpdCBh
L1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93ZWJkcml2ZXIvd2ViZHJpdmVyL3Ry
YW5zcG9ydC5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93ZWJkcml2ZXIv
d2ViZHJpdmVyL3RyYW5zcG9ydC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uMjA2ZmQzY2E3YTAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBv
cnRlZC93M2MvdG9vbHMvd2ViZHJpdmVyL3dlYmRyaXZlci90cmFuc3BvcnQucHkKQEAgLTAsMCAr
MSwxMDcgQEAKK2ltcG9ydCBodHRwbGliCitpbXBvcnQganNvbgoraW1wb3J0IHVybHBhcnNlCisK
K2ltcG9ydCBlcnJvcgorCitjbGFzcyBSZXNwb25zZShvYmplY3QpOgorICAgICIiIkRlc2NyaWJl
cyBhbiBIVFRQIHJlc3BvbnNlIHJlY2VpdmVkIGZyb20gYSByZW1vdGUgZW4iRGVzY3JpYmVzIGFu
IEhUVFAKKyAgICByZXNwb25zZSByZWNlaXZlZCBmcm9tIGEgcmVtb3RlIGVuZCB3aG9zZSBib2R5
IGhhcyBiZWVuIHJlYWQgYW5kIHBhcnNlZCBhcworICAgIGFwcHJvcHJpYXRlLiIiIgorICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBzdGF0dXMsIGJvZHkpOgorICAgICAgICBzZWxmLnN0YXR1cyA9IHN0
YXR1cworICAgICAgICBzZWxmLmJvZHkgPSBib2R5CisKKyAgICBkZWYgX19yZXByX18oc2VsZik6
CisgICAgICAgIHJldHVybiAid2RjbGllbnQuUmVzcG9uc2Uoc3RhdHVzPSVkLCBib2R5PSVzKSIg
JSAoc2VsZi5zdGF0dXMsIHNlbGYuYm9keSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBm
cm9tX2h0dHBfcmVzcG9uc2UoY2xzLCBodHRwX3Jlc3BvbnNlKToKKyAgICAgICAgc3RhdHVzID0g
aHR0cF9yZXNwb25zZS5zdGF0dXMKKyAgICAgICAgYm9keSA9IGh0dHBfcmVzcG9uc2UucmVhZCgp
CisKKyAgICAgICAgIyBTcGVjSUQ6IGRmbi1zZW5kLWEtcmVzcG9uc2UKKyAgICAgICAgIworICAg
ICAgICAjID4gMy4gU2V0IHRoZSByZXNwb25zZSdzIGhlYWRlciB3aXRoIG5hbWUgYW5kIHZhbHVl
IHdpdGggdGhlIGZvbGxvd2luZworICAgICAgICAjID4gICAgdmFsdWVzOgorICAgICAgICAjID4K
KyAgICAgICAgIyA+ICAgICJDb250ZW50LVR5cGUiCisgICAgICAgICMgPiAgICAgICAiYXBwbGlj
YXRpb24vanNvbjsgY2hhcnNldD11dGYtOCIKKyAgICAgICAgIyA+ICAgICJjYWNoZS1jb250cm9s
IgorICAgICAgICAjID4gICAgICAgIm5vLWNhY2hlIgorCisgICAgICAgIGlmIGJvZHk6CisgICAg
ICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgYm9keSA9IGpzb24ubG9hZHMoYm9keSkKKyAg
ICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICByYWlzZSBlcnJvci5Vbmtub3duRXJy
b3JFeGNlcHRpb24oIkZhaWxlZCB0byBkZWNvZGUgYm9keSBhcyBqc29uOlxuJXMiICUgYm9keSkK
KworICAgICAgICByZXR1cm4gY2xzKHN0YXR1cywgYm9keSkKKworCitjbGFzcyBUb0pzb25FbmNv
ZGVyKGpzb24uSlNPTkVuY29kZXIpOgorICAgIGRlZiBkZWZhdWx0KHNlbGYsIG9iaik6CisgICAg
ICAgIHJldHVybiBnZXRhdHRyKG9iai5fX2NsYXNzX18sICJqc29uIiwganNvbi5KU09ORW5jb2Rl
cigpLmRlZmF1bHQpKG9iaikKKworCitjbGFzcyBIVFRQV2lyZVByb3RvY29sKG9iamVjdCk6Cisg
ICAgIiIiVHJhbnNwb3J0cyBtZXNzYWdlcyAoY29tbWFuZHMgYW5kIHJlc3BvbnNlcykgb3ZlciB0
aGUgV2ViRHJpdmVyCisgICAgd2lyZSBwcm90b2NvbC4KKyAgICAiIiIKKworICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBob3N0LCBwb3J0LCB1cmxfcHJlZml4PSIvIiwgdGltZW91dD1Ob25lKToKKyAg
ICAgICAgIiIiQ29uc3RydWN0IGludGVyZmFjZSBmb3IgY29tbXVuaWNhdGluZyB3aXRoIHRoZSBy
ZW1vdGUgc2VydmVyLgorCisgICAgICAgIDpwYXJhbSB1cmw6IFVSTCBvZiByZW1vdGUgV2ViRHJp
dmVyIHNlcnZlci4KKyAgICAgICAgOnBhcmFtIHdhaXQ6IER1cmF0aW9uIHRvIHdhaXQgZm9yIHJl
bW90ZSB0byBhcHBlYXIuCisgICAgICAgICIiIgorCisgICAgICAgIHNlbGYuaG9zdCA9IGhvc3QK
KyAgICAgICAgc2VsZi5wb3J0ID0gcG9ydAorICAgICAgICBzZWxmLnVybF9wcmVmaXggPSB1cmxf
cHJlZml4CisKKyAgICAgICAgc2VsZi5fdGltZW91dCA9IHRpbWVvdXQKKworICAgIGRlZiB1cmwo
c2VsZiwgc3VmZml4KToKKyAgICAgICAgcmV0dXJuIHVybHBhcnNlLnVybGpvaW4oc2VsZi5wYXRo
X3ByZWZpeCwgc3VmZml4KQorCisgICAgZGVmIHNlbmQoc2VsZiwgbWV0aG9kLCB1cmwsIGJvZHk9
Tm9uZSwgaGVhZGVycz1Ob25lKToKKyAgICAgICAgIiIiU2VuZCBhIGNvbW1hbmQgdG8gdGhlIHJl
bW90ZS4KKworICAgICAgICA6cGFyYW0gbWV0aG9kOiAiUE9TVCIgb3IgIkdFVCIuCisgICAgICAg
IDpwYXJhbSB1cmw6ICJjb21tYW5kIHBhcnQiIG9mIHRoZSByZXF1ZXN0cyBVUkwgcGF0aAorICAg
ICAgICA6cGFyYW0gYm9keTogQm9keSBvZiB0aGUgcmVxdWVzdC4gIERlZmF1bHRzIHRvIGFuIGVt
cHR5IGRpY3Rpb25hcnkKKyAgICAgICAgICAgIGlmIGBgbWV0aG9kYGAgaXMgIlBPU1QiLgorICAg
ICAgICA6cGFyYW0gaGVhZGVyczogQWRkaXRpb25hbCBoZWFkZXJzIHRvIGluY2x1ZGUgaW4gdGhl
IHJlcXVlc3QuCisgICAgICAgIDpyZXR1cm46IGFuIGluc3RhbmNlIG9mIHdkY2xpZW50LlJlc3Bv
bnNlIGRlc2NyaWJpbmcgdGhlIEhUVFAgcmVzcG9uc2UKKyAgICAgICAgICAgIHJlY2VpdmVkIGZy
b20gdGhlIHJlbW90ZSBlbmQuCisgICAgICAgICIiIgorCisgICAgICAgIGlmIGJvZHkgaXMgTm9u
ZSBhbmQgbWV0aG9kID09ICJQT1NUIjoKKyAgICAgICAgICAgIGJvZHkgPSB7fQorCisgICAgICAg
IGlmIGlzaW5zdGFuY2UoYm9keSwgZGljdCk6CisgICAgICAgICAgICBib2R5ID0ganNvbi5kdW1w
cyhib2R5LCBjbHM9VG9Kc29uRW5jb2RlcikKKworICAgICAgICBpZiBpc2luc3RhbmNlKGJvZHks
IHVuaWNvZGUpOgorICAgICAgICAgICAgYm9keSA9IGJvZHkuZW5jb2RlKCJ1dGYtOCIpCisKKyAg
ICAgICAgaWYgaGVhZGVycyBpcyBOb25lOgorICAgICAgICAgICAgaGVhZGVycyA9IHt9CisKKyAg
ICAgICAgdXJsID0gc2VsZi51cmxfcHJlZml4ICsgdXJsCisKKyAgICAgICAga3dhcmdzID0ge30K
KyAgICAgICAgaWYgc2VsZi5fdGltZW91dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGt3YXJn
c1sidGltZW91dCJdID0gc2VsZi5fdGltZW91dAorCisgICAgICAgIGNvbm4gPSBodHRwbGliLkhU
VFBDb25uZWN0aW9uKAorICAgICAgICAgICAgc2VsZi5ob3N0LCBzZWxmLnBvcnQsIHN0cmljdD1U
cnVlLCAqKmt3YXJncykKKyAgICAgICAgY29ubi5yZXF1ZXN0KG1ldGhvZCwgdXJsLCBib2R5LCBo
ZWFkZXJzKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc3BvbnNlID0gUmVzcG9uc2Uu
ZnJvbV9odHRwX3Jlc3BvbnNlKGNvbm4uZ2V0cmVzcG9uc2UoKSkKKyAgICAgICAgZmluYWxseToK
KyAgICAgICAgICAgIGNvbm4uY2xvc2UoKQorCisgICAgICAgIHJldHVybiByZXNwb25zZQpkaWZm
IC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci8uZ2l0
aWdub3JlIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci8uZ2l0
aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40OTU2MTZlZjFk
MQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93
cHRydW5uZXIvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDggQEAKKyoucHlbY29dCisqfgorKiMKK1wj
KgorX3ZpcnR1YWxlbnYKK3Rlc3QvdGVzdC5jZmcKK3Rlc3QvbWV0YWRhdGEvTUFOSUZFU1QuanNv
bgord3B0cnVubmVyLmVnZy1pbmZvCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRl
ZC93M2MvdG9vbHMvd3B0cnVubmVyL0xJQ0VOU0UgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93
M2MvdG9vbHMvd3B0cnVubmVyL0xJQ0VOU0UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAuLjQ1ODk2ZTZiZTJiCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMv
aW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci9MSUNFTlNFCkBAIC0wLDAgKzEsMzAgQEAKK1cz
QyAzLWNsYXVzZSBCU0QgTGljZW5zZQorCitodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xl
Z2FsLzIwMDgvMDMtYnNkLWxpY2Vuc2UuaHRtbAorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
K21ldDoKKworKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygd29ya3MgbXVzdCByZXRhaW4gdGhlIG9yaWdp
bmFsIGNvcHlyaWdodCBub3RpY2UsCisgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQKKyAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorCisqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFczQyBub3IgdGhlIG5hbWVz
IG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlCisgIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHdvcmsgd2l0aG91dAorICBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKK0EgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCitPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKK1NQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCitUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKK09GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCmRpZmYgLS1n
aXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL01BTklGRVNU
LmluIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci9NQU5JRkVT
VC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMGM1ZTM4YmYyNjUK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0
cnVubmVyL01BTklGRVNULmluCkBAIC0wLDAgKzEsMTcgQEAKK2V4Y2x1ZGUgTUFOSUZFU1QuaW4K
K2luY2x1ZGUgcmVxdWlyZW1lbnRzLnR4dAoraW5jbHVkZSB3cHRydW5uZXIvYnJvd3NlcnMvYjJn
X3NldHVwLyoKK2luY2x1ZGUgd3B0cnVubmVyLmRlZmF1bHQuaW5pCitpbmNsdWRlIHdwdHJ1bm5l
ci90ZXN0aGFybmVzc19ydW5uZXIuaHRtbAoraW5jbHVkZSB3cHRydW5uZXIvdGVzdGhhcm5lc3Ny
ZXBvcnQuanMKK2luY2x1ZGUgd3B0cnVubmVyL3Rlc3RoYXJuZXNzcmVwb3J0LXNlcnZvLmpzCitp
bmNsdWRlIHdwdHJ1bm5lci90ZXN0aGFybmVzc3JlcG9ydC1zZXJ2b2RyaXZlci5qcworaW5jbHVk
ZSB3cHRydW5uZXIvZXhlY3V0b3JzL3Rlc3RoYXJuZXNzX21hcmlvbmV0dGUuanMKK2luY2x1ZGUg
d3B0cnVubmVyL2V4ZWN1dG9ycy90ZXN0aGFybmVzc19zZXJ2b2RyaXZlci5qcworaW5jbHVkZSB3
cHRydW5uZXIvZXhlY3V0b3JzL3Rlc3RoYXJuZXNzX3dlYmRyaXZlci5qcworaW5jbHVkZSB3cHRy
dW5uZXIvZXhlY3V0b3JzL3JlZnRlc3QuanMKK2luY2x1ZGUgd3B0cnVubmVyL2V4ZWN1dG9ycy9y
ZWZ0ZXN0LXdhaXQuanMKK2luY2x1ZGUgd3B0cnVubmVyL2V4ZWN1dG9ycy9yZWZ0ZXN0LXdhaXRf
c2Vydm9kcml2ZXIuanMKK2luY2x1ZGUgd3B0cnVubmVyL2V4ZWN1dG9ycy9yZWZ0ZXN0LXdhaXRf
d2ViZHJpdmVyLmpzCitpbmNsdWRlIHdwdHJ1bm5lci9jb25maWcuanNvbgoraW5jbHVkZSB3cHRy
dW5uZXIvYnJvd3NlcnMvc2VydmVyLWxvY2F0aW9ucy50eHQKXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBmaWxlCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0
cnVubmVyL09XTkVSUyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5u
ZXIvT1dORVJTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40YmY0OGFk
NzZlNQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29s
cy93cHRydW5uZXIvT1dORVJTCkBAIC0wLDAgKzEgQEAKK0Bib2Job2x0CmRpZmYgLS1naXQgYS9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL1JFQURNRS5yc3QgYi9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL1JFQURNRS5yc3QKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmZjNjUwZWVjNDVhCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci9S
RUFETUUucnN0CkBAIC0wLDAgKzEsMjQyIEBACit3cHRydW5uZXI6IEEgd2ViLXBsYXRmb3JtLXRl
c3RzIGhhcm5lc3MKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCit3
cHRydW5uZXIgaXMgYSBoYXJuZXNzIGZvciBydW5uaW5nIHRoZSBXM0MgYHdlYi1wbGF0Zm9ybS10
ZXN0cyB0ZXN0c3VpdGVgXy4KKworLi4gY29udGVudHM6OgorCitJbnN0YWxsYXRpb24KK35+fn5+
fn5+fn5+fgorCit3cHRydW5uZXIgaXMgZXhwZWN0ZWQgdG8gYmUgaW5zdGFsbGVkIGludG8gYSB2
aXJ0dWFsZW52IHVzaW5nIHBpcC4gRm9yCitkZXZlbG9wbWVudCwgaXQgY2FuIGJlIGluc3RhbGxl
ZCB1c2luZyB0aGUgYC1lYCBvcHRpb246OgorCisgIHBpcCBpbnN0YWxsIC1lIC4vCisKK1J1bm5p
bmcgdGhlIFRlc3RzCit+fn5+fn5+fn5+fn5+fn5+fgorCitBZnRlciBpbnN0YWxsYXRpb24sIHRo
ZSBjb21tYW5kIGBgd3B0cnVubmVyYGAgc2hvdWxkIGJlIGF2YWlsYWJsZSB0byBydW4KK3RoZSB0
ZXN0cy4KKworVGhlIGBgd3B0cnVubmVyYGAgY29tbWFuZCAgdGFrZXMgbXVsdGlwbGUgb3B0aW9u
cywgb2Ygd2hpY2ggdGhlCitmb2xsb3dpbmcgYXJlIG1vc3Qgc2lnbmlmaWNhbnQ6CisKK2BgLS1w
cm9kdWN0YGAgKGRlZmF1bHRzIHRvIGBmaXJlZm94YCkKKyAgVGhlIHByb2R1Y3QgdG8gdGVzdCBh
Z2FpbnN0OiBgYjJnYCwgYGNocm9tZWAsIGBmaXJlZm94YCwgb3IgYHNlcnZvYC4KKworYGAtLWJp
bmFyeWBgIChyZXF1aXJlZCBpZiBwcm9kdWN0IGlzIGBmaXJlZm94YCBvciBgc2Vydm9gKQorICBU
aGUgcGF0aCB0byBhIGJpbmFyeSBmaWxlIGZvciB0aGUgcHJvZHVjdCAoYnJvd3NlcikgdG8gdGVz
dCBhZ2FpbnN0LgorCitgYC0td2ViZHJpdmVyLWJpbmFyeWBgIChyZXF1aXJlZCBpZiBwcm9kdWN0
IGlzIGBjaHJvbWVgKQorICBUaGUgcGF0aCB0byBhIGBkcml2ZXJgIGJpbmFyeTsgZS5nLiwgYSBg
Y2hyb21lZHJpdmVyYCBiaW5hcnkuCisKK2BgLS1jZXJ0dXRpbC1iaW5hcnlgYCAocmVxdWlyZWQg
aWYgcHJvZHVjdCBpcyBgZmlyZWZveGAgWyNdXykKKyAgVGhlIHBhdGggdG8gYSBgY2VydHV0aWxg
IGJpbmFyeSAoZm9yIHRlc3RzIHRoYXQgbXVzdCBiZSBydW4gb3ZlciBodHRwcykuCisKK2BgLS1t
ZXRhZGF0YWBgIChyZXF1aXJlZCkKKyAgVGhlIHBhdGggdG8gYSBkaXJlY3RvcnkgY29udGFpbmlu
ZyB0ZXN0IG1ldGFkYXRhLiBbI11fCisKK2BgLS10ZXN0c2BgIChyZXF1aXJlZCkKKyAgVGhlIHBh
dGggdG8gYSBkaXJlY3RvcnkgY29udGFpbmluZyBhIHdlYi1wbGF0Zm9ybS10ZXN0cyBjaGVja291
dC4KKworYGAtLXByZWZzLXJvb3RgYCAocmVxdWlyZWQgb25seSB3aGVuIHRlc3RpbmcgYSBGaXJl
Zm94IGJpbmFyeSkKKyAgVGhlIHBhdGggdG8gYSBkaXJlY3RvcnkgY29udGFpbmluZyBGaXJlZm94
IHRlc3QtaGFybmVzcyBwcmVmZXJlbmNlcy4gWyNdXworCitgYC0tY29uZmlnYGAgKHNob3VsZCBk
ZWZhdWx0IHRvIGB3cHRydW5uZXIuZGVmYXVsdC5pbmlgKQorICBUaGUgcGF0aCB0byB0aGUgY29u
ZmlnIChpbmkpIGZpbGUuCisKKy4uIFsjXSBUaGUgYGAtLWNlcnR1dGlsLWJpbmFyeWBgIG9wdGlv
biBpcyByZXF1aXJlZCB3aGVuIHRoZSBwcm9kdWN0IGlzCisgICBgYGZpcmVmb3hgYCB1bmxlc3Mg
YGAtLXNzbC10eXBlPW5vbmVgYCBpcyBzcGVjaWZpZWQuCisKKy4uIFsjXSBUaGUgYGAtLW1ldGFk
YXRhYGAgcGF0aCBpcyB0byBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zOgorCisgICogYSBgYE1B
TklGRVNULmpzb25gYCBmaWxlIChpbnN0cnVjdGlvbnMgb24gZ2VuZXJhdGluZyB0aGlzIGZpbGUg
YXJlCisgICAgYXZhaWxhYmxlIGluIHRoZSBgZGV0YWlsZWQgZG9jdW1lbnRhdGlvbgorICAgIDxo
dHRwOi8vd3B0cnVubmVyLnJlYWR0aGVkb2NzLm9yZy9lbi9sYXRlc3QvdXNhZ2UuaHRtbCNpbnN0
YWxsaW5nLXdwdHJ1bm5lcj5gXyk7CisgICAgYW5kCisgICogKG9wdGlvbmFsbHkpIGFueSBleHBl
Y3RhdGlvbiBmaWxlcyAoc2VlIGJlbG93KQorCisuLiBbI10gRXhhbXBsZSBgYC0tcHJlZnMtcm9v
dGBgIHZhbHVlOiBgYH4vbW96aWxsYS1jZW50cmFsL3Rlc3RpbmcvcHJvZmlsZXNgYC4KKworVGhl
cmUgYXJlIGFsc28gYSB2YXJpZXR5IG9mIG90aGVyIG9wdGlvbnMgYXZhaWxhYmxlOyB1c2UgYGAt
LWhlbHBgYCB0bworbGlzdCB0aGVtLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CitFeGFtcGxlOiBIb3cgdG8gc3RhcnQgd3B0cnVubmVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisKK1RvIHRlc3QgYSBGaXJlZm94IE5pZ2h0bHkgYnVpbGQgaW4gYW4gT1MgWCBl
bnZpcm9ubWVudCwgeW91IG1pZ2h0IHN0YXJ0Cit3cHRydW5uZXIgdXNpbmcgc29tZXRoaW5nIHNp
bWlsYXIgdG8gdGhlIGZvbGxvd2luZyBleGFtcGxlOjoKKworICB3cHRydW5uZXIgLS1tZXRhZGF0
YT1+L3dlYi1wbGF0Zm9ybS10ZXN0cy8gLS10ZXN0cz1+L3dlYi1wbGF0Zm9ybS10ZXN0cy8gXAor
ICAgIC0tYmluYXJ5PX4vbW96aWxsYS1jZW50cmFsL29iai14ODZfNjQtYXBwbGUtZGFyd2luMTQu
My4wL2Rpc3QvTmlnaHRseS5hcHAvQ29udGVudHMvTWFjT1MvZmlyZWZveCBcCisgICAgLS1jZXJ0
dXRpbC1iaW5hcnk9fi9tb3ppbGxhLWNlbnRyYWwvb2JqLXg4Nl82NC1hcHBsZS1kYXJ3aW4xNC4z
LjAvc2VjdXJpdHkvbnNzL2NtZC9jZXJ0dXRpbC9jZXJ0dXRpbCBcCisgICAgLS1wcmVmcy1yb290
PX4vbW96aWxsYS1jZW50cmFsL3Rlc3RpbmcvcHJvZmlsZXMKKworQW5kIHRvIHRlc3QgYSBDaHJv
bWl1bSBidWlsZCBpbiBhbiBPUyBYIGVudmlyb25tZW50LCB5b3UgbWlnaHQgc3RhcnQKK3dwdHJ1
bm5lciB1c2luZyBzb21ldGhpbmcgc2ltaWxhciB0byB0aGUgZm9sbG93aW5nIGV4YW1wbGU6Ogor
CisgIHdwdHJ1bm5lciAtLW1ldGFkYXRhPX4vd2ViLXBsYXRmb3JtLXRlc3RzLyAtLXRlc3RzPX4v
d2ViLXBsYXRmb3JtLXRlc3RzLyBcCisgICAgLS1iaW5hcnk9fi9jaHJvbWl1bS9zcmMvb3V0L1Jl
bGVhc2UvQ2hyb21pdW0uYXBwL0NvbnRlbnRzL01hY09TL0Nocm9taXVtIFwKKyAgICAtLXdlYmRy
aXZlci1iaW5hcnk9L3Vzci9sb2NhbC9iaW4vY2hyb21lZHJpdmVyIC0tcHJvZHVjdD1jaHJvbWUK
KworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRXhhbXBsZTogSG93IHRv
IHJ1biBhIHN1YnNldCBvZiB0ZXN0cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorCitUbyByZXN0cmljdCBhIHRlc3QgcnVuIGp1c3QgdG8gdGVzdHMgaW4gYSBwYXJ0aWN1
bGFyIHdlYi1wbGF0Zm9ybS10ZXN0cworc3ViZGlyZWN0b3J5LCBzcGVjaWZ5IHRoZSBkaXJlY3Rv
cnkgbmFtZSBpbiB0aGUgcG9zaXRpb25hbCBhcmd1bWVudHMgYWZ0ZXIKK3RoZSBvcHRpb25zOyBm
b3IgZXhhbXBsZSwgcnVuIGp1c3QgdGhlIHRlc3RzIGluIHRoZSBgZG9tYCBzdWJkaXJlY3Rvcnk6
OgorCisgIHdwdHJ1bm5lciAtLW1ldGFkYXRhPX4vd2ViLXBsYXRmb3JtLXRlc3RzLyAtLXRlc3Rz
PX4vd2ViLXBsYXRmb3JtLXRlc3RzLyBcCisgICAgLS1iaW5hcnk9L3BhdGgvdG8vZmlyZWZveCAt
LWNlcnR1dGlsLWJpbmFyeT0vcGF0aC90by9jZXJ0dXRpbCBcCisgICAgLS1wcmVmcy1yb290PS9w
YXRoL3RvL3Rlc3RpbmcvcHJvZmlsZXMgXAorICAgIGRvbQorCitPdXRwdXQKK35+fn5+fgorCitC
eSBkZWZhdWx0IHdwdHJ1bm5lciBqdXN0IGR1bXBzIGl0cyBlbnRpcmUgb3V0cHV0IGFzIHJhdyBK
U09OIG1lc3NhZ2VzCit0byBzdGRvdXQuIFRoaXMgaXMgY29udmVuaWVudCBmb3IgcGlwaW5nIGlu
dG8gb3RoZXIgdG9vbHMsIGJ1dCBub3QgaWRlYWwKK2ZvciBodW1hbnMgcmVhZGluZyB0aGUgb3V0
cHV0LgorCitBcyBhbiBhbHRlcm5hdGl2ZSwgeW91IGNhbiB1c2UgdGhlIGBgLS1sb2ctbWFjaGBg
IG9wdGlvbiwgd2hpY2ggcHJvdmlkZXMKK291dHB1dCBpbiBhIHJlYXNvbmFibGUgZm9ybWF0IGZv
ciBodW1hbnMuIFRoZSBvcHRpb24gcmVxdWlyZXMgYSB2YWx1ZToKK2VpdGhlciB0aGUgcGF0aCBm
b3IgYSBmaWxlIHRvIHdyaXRlIHRoZSBgbWFjaGAtZm9ybWF0dGVkIG91dHB1dCB0bywgb3IKKyJg
LWAiIChhIGh5cGhlbikgdG8gd3JpdGUgdGhlIGBtYWNoYC1mb3JtYXR0ZWQgb3V0cHV0IHRvIHN0
ZG91dC4KKworV2hlbiB1c2luZyBgYC0tbG9nLW1hY2hgYCwgb3V0cHV0IG9mIHRoZSBmdWxsIHJh
dyBKU09OIGxvZyBpcyBzdGlsbAorYXZhaWxhYmxlLCBmcm9tIHRoZSBgYC0tbG9nLXJhd2BgIG9w
dGlvbi4gU28gdG8gb3V0cHV0IHRoZSBmdWxsIHJhdyBKU09OCitsb2cgdG8gYSBmaWxlIGFuZCBh
IGh1bWFuLXJlYWRhYmxlIHN1bW1hcnkgdG8gc3Rkb3V0LCB5b3UgbWlnaHQgc3RhcnQKK3dwdHJ1
bm5lciB1c2luZyBzb21ldGhpbmcgc2ltaWxhciB0byB0aGUgZm9sbG93aW5nIGV4YW1wbGU6Ogor
CisgIHdwdHJ1bm5lciAtLW1ldGFkYXRhPX4vd2ViLXBsYXRmb3JtLXRlc3RzLyAtLXRlc3RzPX4v
d2ViLXBsYXRmb3JtLXRlc3RzLyBcCisgICAgLS1iaW5hcnk9L3BhdGgvdG8vZmlyZWZveCAtLWNl
cnR1dGlsLWJpbmFyeT0vcGF0aC90by9jZXJ0dXRpbCBcCisgICAgLS1wcmVmcy1yb290PS9wYXRo
L3RvL3Rlc3RpbmcvcHJvZmlsZXMgXAorICAgIC0tbG9nLXJhdz1vdXRwdXQubG9nIC0tbG9nLW1h
Y2g9LQorCitFeHBlY3RhdGlvbiBEYXRhCit+fn5+fn5+fn5+fn5+fn5+CisKK3dwdHJ1bm5lciBp
cyBkZXNpZ25lZCB0byBiZSB1c2VkIGluIGFuIGVudmlyb25tZW50IHdoZXJlIGl0IGlzIG5vdAor
anVzdCBuZWNlc3NhcnkgdG8ga25vdyB3aGljaCB0ZXN0cyBwYXNzZWQsIGJ1dCB0byBjb21wYXJl
IHRoZSByZXN1bHRzCitiZXR3ZWVuIHJ1bnMuIEZvciB0aGlzIHJlYXNvbiBpdCBpcyBwb3NzaWJs
ZSB0byBzdG9yZSB0aGUgcmVzdWx0cyBvZiBhCitwcmV2aW91cyBydW4gaW4gYSBzZXQgb2YgaW5p
LWxpa2UgImV4cGVjdGF0aW9uIGZpbGVzIi4gVGhpcyBmb3JtYXQgaXMKK2RvY3VtZW50ZWQgYmVs
b3cuIFRvIGdlbmVyYXRlIHRoZSBleHBlY3RhdGlvbiBmaWxlcyB1c2UgYHdwdHJ1bm5lcmAgd2l0
aAordGhlIGAtLWxvZy1yYXc9L3BhdGgvdG8vbG9nL2ZpbGVgIG9wdGlvbi4gVGhpcyBjYW4gdGhl
biBiZSB1c2VkIGFzCitpbnB1dCB0byB0aGUgYHdwdHVwZGF0ZWAgdG9vbC4KKworRXhwZWN0YXRp
b24gRmlsZSBGb3JtYXQKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK01ldGFkYXRhIGFib3V0
IHRlc3RzLCBub3RhYmx5IGluY2x1ZGluZyB0aGVpciBleHBlY3RlZCByZXN1bHRzLCBpcworc3Rv
cmVkIGluIGEgbW9kaWZpZWQgaW5pLWxpa2UgZm9ybWF0IHRoYXQgaXMgZGVzaWduZWQgdG8gYmUg
aHVtYW4KK2VkaXRhYmxlLCBidXQgYWxzbyB0byBiZSBtYWNoaW5lIHVwZGF0YWJsZS4KKworRWFj
aCB0ZXN0IGZpbGUgdGhhdCByZXF1aXJlcyBtZXRhZGF0YSB0byBiZSBzcGVjaWZpZWQgKGJlY2F1
c2UgaXQgaGFzCithIG5vbi1kZWZhdWx0IGV4cGVjdGF0aW9uIG9yIGJlY2F1c2UgaXQgaXMgZGlz
YWJsZWQsIGZvciBleGFtcGxlKSBoYXMKK2EgY29ycmVzcG9uZGluZyBleHBlY3RhdGlvbiBmaWxl
IGluIHRoZSBgbWV0YWRhdGFgIGRpcmVjdG9yeS4gRm9yCitleGFtcGxlIGEgdGVzdCBmaWxlIGBo
dG1sL3Rlc3QxLmh0bWxgIGNvbnRhaW5pbmcgYSBmYWlsaW5nIHRlc3Qgd291bGQKK2hhdmUgYW4g
ZXhwZWN0YXRpb24gZmlsZSBjYWxsZWQgYGh0bWwvdGVzdDEuaHRtbC5pbmlgIGluIHRoZQorYG1l
dGFkYXRhYCBkaXJlY3RvcnkuCisKK0FuIGV4YW1wbGUgb2YgYW4gZXhwZWN0YXRpb24gZmlsZSBp
czo6CisKKyAgZXhhbXBsZV9kZWZhdWx0X2tleTogZXhhbXBsZV92YWx1ZQorCisgIFtmaWxlbmFt
ZS5odG1sXQorICAgIHR5cGU6IHRlc3RoYXJuZXNzCisKKyAgICBbc3VidGVzdDFdCisgICAgICBl
eHBlY3RlZDogRkFJTAorCisgICAgW3N1YnRlc3QyXQorICAgICAgZXhwZWN0ZWQ6CisgICAgICAg
IGlmIHBsYXRmb3JtID09ICd3aW4nOiBUSU1FT1VUCisgICAgICAgIGlmIHBsYXRmb3JtID09ICdv
c3gnOiBFUlJPUgorICAgICAgICBGQUlMCisKKyAgW2ZpbGVuYW1lLmh0bWw/cXVlcnk9c29tZXRo
aW5nXQorICAgIHR5cGU6IHRlc3RoYXJuZXNzCisgICAgZGlzYWJsZWQ6IGJ1ZzEyMzQ1CisKK1Ro
ZSBmaWxlIGNvbnNpc3RzIG9mIHR3byBlbGVtZW50cywga2V5LXZhbHVlIHBhaXJzIGFuZAorc2Vj
dGlvbnMuCisKK1NlY3Rpb25zIGFyZSBkZWxpbWl0ZWQgYnkgaGVhZGluZ3MgZW5jbG9zZWQgaW4g
c3F1YXJlIGJyYWNrZXRzLiBBbnkKK2Nsb3Npbmcgc3F1YXJlIGJyYWNrZXQgaW4gdGhlIGhlYWRp
bmcgaXRzZWxmIG15IGJlIGVzY2FwZWQgd2l0aCBhCitiYWNrc2xhc2guIEVhY2ggc2VjdGlvbiBt
YXkgdGhlbiBjb250YWluIGFueSBudW1iZXIgb2Yga2V5LXZhbHVlIHBhaXJzCitmb2xsb3dlZCBi
eSBhbnkgbnVtYmVyIG9mIHN1YnNlY3Rpb25zLiBTbyB0aGF0IGl0IGlzIGNsZWFyIHdoaWNoIGRh
dGEKK2JlbG9uZ3MgdG8gZWFjaCBzZWN0aW9uIHdpdGhvdXQgdGhlIHVzZSBvZiBlbmQtc2VjdGlv
biBtYXJrZXJzLCB0aGUKK2RhdGEgZm9yIGVhY2ggc2VjdGlvbiAoaS5lLiB0aGUga2V5LXZhbHVl
IHBhaXJzIGFuZCBzdWJzZWN0aW9ucykgbXVzdAorYmUgaW5kZW50ZWQgdXNpbmcgc3BhY2VzLiBJ
bmRlbnRhdGlvbiBuZWVkIG9ubHkgYmUgY29uc2lzdGVudCwgYnV0Cit1c2luZyB0d28gc3BhY2Vz
IHBlciBsZXZlbCBpcyByZWNvbW1lbmRlZC4KKworSW4gYSB0ZXN0IGV4cGVjdGF0aW9uIGZpbGUs
IGVhY2ggcmVzb3VyY2UgcHJvdmlkZWQgYnkgdGhlIGZpbGUgaGFzIGEKK3NpbmdsZSBzZWN0aW9u
LCB3aXRoIHRoZSBzZWN0aW9uIGhlYWRpbmcgYmVpbmcgdGhlIHBhcnQgYWZ0ZXIgdGhlIGxhc3QK
K2AvYCBpbiB0aGUgdGVzdCB1cmwuIFRlc3RzIHRoYXQgaGF2ZSBzdWJzZWN0aW9ucyBtYXkgaGF2
ZSBzdWJzZWN0aW9ucworZm9yIHRob3NlIHN1YnRlc3RzIGluIHdoaWNoIHRoZSBoZWFkaW5nIGlz
IHRoZSBuYW1lIG9mIHRoZSBzdWJ0ZXN0LgorCitTaW1wbGUga2V5LXZhbHVlIHBhaXJzIGFyZSBv
ZiB0aGUgZm9ybTo6CisKKyAga2V5OiB2YWx1ZQorCitOb3RlIHRoYXQgdW5saWtlIGluaSBmaWxl
cywgb25seSBgOmAgaXMgYSB2YWxpZCBzZXBlcmF0b3I7IGA9YCB3aWxsCitub3Qgd29yayBhcyBl
eHBlY3RlZC4gS2V5LXZhbHVlIHBhaXJzIG1heSBhbHNvIGhhdmUgY29uZGl0aW9uYWwKK3ZhbHVl
cyBvZiB0aGUgZm9ybTo6CisKKyAga2V5OgorICAgIGlmIGNvbmRpdGlvbjE6IHZhbHVlMQorICAg
IGlmIGNvbmRpdGlvbjI6IHZhbHVlMgorICAgIGRlZmF1bHQKKworSW4gdGhpcyBjYXNlIGVhY2gg
Y29uZGl0aW9uYWwgaXMgZXZhbHVhdGVkIGluIHR1cm4gYW5kIHRoZSB2YWx1ZSBpcwordGhhdCBv
biB0aGUgcmlnaHQgaGFuZCBzaWRlIG9mIHRoZSBmaXJzdCBtYXRjaGluZyBjb25kaXRpb25hbC4g
SW4gdGhlCitjYXNlIHRoYXQgbm8gY29uZGl0aW9uIG1hdGNoZXMsIHRoZSB1bmNvbmRpdGlvbmFs
IGRlZmF1bHQgaXMgdXNlZC4gSWYKK25vIGNvbmRpdGlvbiBtYXRjaGVzIGFuZCBubyBkZWZhdWx0
IGlzIHByb3ZpZGVkIGl0IGlzIGVxdWl2YWxlbnQgdG8KK3RoZSBrZXkgbm90IGJlaW5nIHByZXNl
bnQuIENvbmRpdGlvbmFscyB1c2UgYSBzaW1wbGUgcHl0aG9uLWxpa2UgZXhwcmVzc2lvbgorbGFu
Z3VhZ2UgZS5nLjo6CisKKyAgaWYgZGVidWcgYW5kIChwbGF0Zm9ybSA9PSAibGludXgiIG9yIHBs
YXRmb3JtID09ICJvc3giKTogRkFJTAorCitGb3IgdGVzdCBleHBlY3RhdGlvbnMgdGhlIGF2YWxp
YWJsZSB2YXJpYWJsZXMgYXJlIHRob3NlIGluIHRoZQorYHJ1bl9pbmZvYCB3aGljaCBmb3IgZGVz
a3RvcCBhcmUgYHZlcnNpb25gLCBgb3NgLCBgYml0c2AsIGBwcm9jZXNzb3JgLAorYGRlYnVnYCBh
bmQgYHByb2R1Y3RgLgorCitLZXktdmFsdWUgcGFpcnMgc3BlY2lmaWVkIGF0IHRoZSB0b3AgbGV2
ZWwgb2YgdGhlIGZpbGUgYmVmb3JlIGFueQorc2VjdGlvbnMgYXJlIHNwZWNpYWwgYXMgdGhleSBw
cm92aWRlIGRlZmF1bHRzIGZvciB0aGUgcmVzdCBvZiB0aGUgZmlsZQorZS5nLjo6CisKKyAga2V5
MTogdmFsdWUxCisKKyAgW3NlY3Rpb24gMV0KKyAgICBrZXkyOiB2YWx1ZTIKKworICBbc2VjdGlv
biAyXQorICAgIGtleTE6IHZhbHVlMworCitJbiB0aGlzIGNhc2UsIGluc2lkZSBzZWN0aW9uIDEs
IGBrZXkxYCB3b3VsZCBoYXZlIHRoZSB2YWx1ZSBgdmFsdWUxYAorYW5kIGBrZXkyYCB0aGUgdmFs
dWUgYHZhbHVlMmAgd2hlcmVhcyBpbiBzZWN0aW9uIDIgYGtleTFgIHdvdWxkIGhhdmUKK3RoZSB2
YWx1ZSBgdmFsdWUzYCBhbmQgYGtleTJgIHdvdWxkIGJlIHVuZGVmaW5lZC4KKworVGhlIHdlYi1w
bGF0Zm9ybS10ZXN0IGhhcm5lc3Mga25vd3MgYWJvdXQgc2V2ZXJhbCBrZXlzOgorCitgZXhwZWN0
ZWRgCisgIE11c3QgZXZhbHVhdGUgdG8gYSBwb3NzaWJsZSB0ZXN0IHN0YXR1cyBpbmRpY2F0aW5n
IHRoZSBleHBlY3RlZAorICByZXN1bHQgb2YgdGhlIHRlc3QuIFRoZSBpbXBsaWNpdCBkZWZhdWx0
IGlzIFBBU1Mgb3IgT0sgd2hlbiB0aGUKKyAgZmllbGQgaXNuJ3QgcHJlc2VudC4KKworYGRpc2Fi
bGVkYAorICBBbnkgdmFsdWUgaW5kaWNhdGVzIHRoYXQgdGhlIHRlc3QgaXMgZGlzYWJsZWQuCisK
K2B0eXBlYAorICBUaGUgdGVzdCB0eXBlIGUuZy4gYHRlc3RoYXJuZXNzYCwgYHJlZnRlc3RgLCBv
ciBgd2RzcGVjYC4KKworYHJlZnR5cGVgCisgIFRoZSB0eXBlIG9mIGNvbXBhcmlzb24gZm9yIHJl
ZnRlc3RzOyBlaXRoZXIgYD09YCBvciBgIT1gLgorCitgcmVmdXJsYAorICBUaGUgcmVmZXJlbmNl
IHVybCBmb3IgcmVmdGVzdHMuCisKKy4uIF9gd2ViLXBsYXRmb3JtLXRlc3RzIHRlc3RzdWl0ZWA6
IGh0dHBzOi8vZ2l0aHViLmNvbS93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzCmRpZmYgLS1naXQgYS9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL2RvY3MvTWFrZWZpbGUg
Yi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL2RvY3MvTWFrZWZp
bGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmQwMmI2YzVlN2M0Ci0t
LSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1
bm5lci9kb2NzL01ha2VmaWxlCkBAIC0wLDAgKzEsMTc3IEBACisjIE1ha2VmaWxlIGZvciBTcGhp
bnggZG9jdW1lbnRhdGlvbgorIworCisjIFlvdSBjYW4gc2V0IHRoZXNlIHZhcmlhYmxlcyBmcm9t
IHRoZSBjb21tYW5kIGxpbmUuCitTUEhJTlhPUFRTICAgID0KK1NQSElOWEJVSUxEICAgPSBzcGhp
bngtYnVpbGQKK1BBUEVSICAgICAgICAgPQorQlVJTERESVIgICAgICA9IF9idWlsZAorCisjIFVz
ZXItZnJpZW5kbHkgY2hlY2sgZm9yIHNwaGlueC1idWlsZAoraWZlcSAoJChzaGVsbCB3aGljaCAk
KFNQSElOWEJVSUxEKSA+L2Rldi9udWxsIDI+JjE7IGVjaG8gJCQ/KSwgMSkKKyQoZXJyb3IgVGhl
ICckKFNQSElOWEJVSUxEKScgY29tbWFuZCB3YXMgbm90IGZvdW5kLiBNYWtlIHN1cmUgeW91IGhh
dmUgU3BoaW54IGluc3RhbGxlZCwgdGhlbiBzZXQgdGhlIFNQSElOWEJVSUxEIGVudmlyb25tZW50
IHZhcmlhYmxlIHRvIHBvaW50IHRvIHRoZSBmdWxsIHBhdGggb2YgdGhlICckKFNQSElOWEJVSUxE
KScgZXhlY3V0YWJsZS4gQWx0ZXJuYXRpdmVseSB5b3UgY2FuIGFkZCB0aGUgZGlyZWN0b3J5IHdp
dGggdGhlIGV4ZWN1dGFibGUgdG8geW91ciBQQVRILiBJZiB5b3UgZG9uJ3QgaGF2ZSBTcGhpbngg
aW5zdGFsbGVkLCBncmFiIGl0IGZyb20gaHR0cDovL3NwaGlueC1kb2Mub3JnLykKK2VuZGlmCisK
KyMgSW50ZXJuYWwgdmFyaWFibGVzLgorUEFQRVJPUFRfYTQgICAgID0gLUQgbGF0ZXhfcGFwZXJf
c2l6ZT1hNAorUEFQRVJPUFRfbGV0dGVyID0gLUQgbGF0ZXhfcGFwZXJfc2l6ZT1sZXR0ZXIKK0FM
TFNQSElOWE9QVFMgICA9IC1kICQoQlVJTERESVIpL2RvY3RyZWVzICQoUEFQRVJPUFRfJChQQVBF
UikpICQoU1BISU5YT1BUUykgLgorIyB0aGUgaTE4biBidWlsZGVyIGNhbm5vdCBzaGFyZSB0aGUg
ZW52aXJvbm1lbnQgYW5kIGRvY3RyZWVzIHdpdGggdGhlIG90aGVycworSTE4TlNQSElOWE9QVFMg
ID0gJChQQVBFUk9QVF8kKFBBUEVSKSkgJChTUEhJTlhPUFRTKSAuCisKKy5QSE9OWTogaGVscCBj
bGVhbiBodG1sIGRpcmh0bWwgc2luZ2xlaHRtbCBwaWNrbGUganNvbiBodG1saGVscCBxdGhlbHAg
ZGV2aGVscCBlcHViIGxhdGV4IGxhdGV4cGRmIHRleHQgbWFuIGNoYW5nZXMgbGlua2NoZWNrIGRv
Y3Rlc3QgZ2V0dGV4dAorCitoZWxwOgorCUBlY2hvICJQbGVhc2UgdXNlIFxgbWFrZSA8dGFyZ2V0
Picgd2hlcmUgPHRhcmdldD4gaXMgb25lIG9mIgorCUBlY2hvICIgIGh0bWwgICAgICAgdG8gbWFr
ZSBzdGFuZGFsb25lIEhUTUwgZmlsZXMiCisJQGVjaG8gIiAgZGlyaHRtbCAgICB0byBtYWtlIEhU
TUwgZmlsZXMgbmFtZWQgaW5kZXguaHRtbCBpbiBkaXJlY3RvcmllcyIKKwlAZWNobyAiICBzaW5n
bGVodG1sIHRvIG1ha2UgYSBzaW5nbGUgbGFyZ2UgSFRNTCBmaWxlIgorCUBlY2hvICIgIHBpY2ts
ZSAgICAgdG8gbWFrZSBwaWNrbGUgZmlsZXMiCisJQGVjaG8gIiAganNvbiAgICAgICB0byBtYWtl
IEpTT04gZmlsZXMiCisJQGVjaG8gIiAgaHRtbGhlbHAgICB0byBtYWtlIEhUTUwgZmlsZXMgYW5k
IGEgSFRNTCBoZWxwIHByb2plY3QiCisJQGVjaG8gIiAgcXRoZWxwICAgICB0byBtYWtlIEhUTUwg
ZmlsZXMgYW5kIGEgcXRoZWxwIHByb2plY3QiCisJQGVjaG8gIiAgZGV2aGVscCAgICB0byBtYWtl
IEhUTUwgZmlsZXMgYW5kIGEgRGV2aGVscCBwcm9qZWN0IgorCUBlY2hvICIgIGVwdWIgICAgICAg
dG8gbWFrZSBhbiBlcHViIgorCUBlY2hvICIgIGxhdGV4ICAgICAgdG8gbWFrZSBMYVRlWCBmaWxl
cywgeW91IGNhbiBzZXQgUEFQRVI9YTQgb3IgUEFQRVI9bGV0dGVyIgorCUBlY2hvICIgIGxhdGV4
cGRmICAgdG8gbWFrZSBMYVRlWCBmaWxlcyBhbmQgcnVuIHRoZW0gdGhyb3VnaCBwZGZsYXRleCIK
KwlAZWNobyAiICBsYXRleHBkZmphIHRvIG1ha2UgTGFUZVggZmlsZXMgYW5kIHJ1biB0aGVtIHRo
cm91Z2ggcGxhdGV4L2R2aXBkZm14IgorCUBlY2hvICIgIHRleHQgICAgICAgdG8gbWFrZSB0ZXh0
IGZpbGVzIgorCUBlY2hvICIgIG1hbiAgICAgICAgdG8gbWFrZSBtYW51YWwgcGFnZXMiCisJQGVj
aG8gIiAgdGV4aW5mbyAgICB0byBtYWtlIFRleGluZm8gZmlsZXMiCisJQGVjaG8gIiAgaW5mbyAg
ICAgICB0byBtYWtlIFRleGluZm8gZmlsZXMgYW5kIHJ1biB0aGVtIHRocm91Z2ggbWFrZWluZm8i
CisJQGVjaG8gIiAgZ2V0dGV4dCAgICB0byBtYWtlIFBPIG1lc3NhZ2UgY2F0YWxvZ3MiCisJQGVj
aG8gIiAgY2hhbmdlcyAgICB0byBtYWtlIGFuIG92ZXJ2aWV3IG9mIGFsbCBjaGFuZ2VkL2FkZGVk
L2RlcHJlY2F0ZWQgaXRlbXMiCisJQGVjaG8gIiAgeG1sICAgICAgICB0byBtYWtlIERvY3V0aWxz
LW5hdGl2ZSBYTUwgZmlsZXMiCisJQGVjaG8gIiAgcHNldWRveG1sICB0byBtYWtlIHBzZXVkb3ht
bC1YTUwgZmlsZXMgZm9yIGRpc3BsYXkgcHVycG9zZXMiCisJQGVjaG8gIiAgbGlua2NoZWNrICB0
byBjaGVjayBhbGwgZXh0ZXJuYWwgbGlua3MgZm9yIGludGVncml0eSIKKwlAZWNobyAiICBkb2N0
ZXN0ICAgIHRvIHJ1biBhbGwgZG9jdGVzdHMgZW1iZWRkZWQgaW4gdGhlIGRvY3VtZW50YXRpb24g
KGlmIGVuYWJsZWQpIgorCitjbGVhbjoKKwlybSAtcmYgJChCVUlMRERJUikvKgorCitodG1sOgor
CSQoU1BISU5YQlVJTEQpIC1iIGh0bWwgJChBTExTUEhJTlhPUFRTKSAkKEJVSUxERElSKS9odG1s
CisJQGVjaG8KKwlAZWNobyAiQnVpbGQgZmluaXNoZWQuIFRoZSBIVE1MIHBhZ2VzIGFyZSBpbiAk
KEJVSUxERElSKS9odG1sLiIKKworZGlyaHRtbDoKKwkkKFNQSElOWEJVSUxEKSAtYiBkaXJodG1s
ICQoQUxMU1BISU5YT1BUUykgJChCVUlMRERJUikvZGlyaHRtbAorCUBlY2hvCisJQGVjaG8gIkJ1
aWxkIGZpbmlzaGVkLiBUaGUgSFRNTCBwYWdlcyBhcmUgaW4gJChCVUlMRERJUikvZGlyaHRtbC4i
CisKK3NpbmdsZWh0bWw6CisJJChTUEhJTlhCVUlMRCkgLWIgc2luZ2xlaHRtbCAkKEFMTFNQSElO
WE9QVFMpICQoQlVJTERESVIpL3NpbmdsZWh0bWwKKwlAZWNobworCUBlY2hvICJCdWlsZCBmaW5p
c2hlZC4gVGhlIEhUTUwgcGFnZSBpcyBpbiAkKEJVSUxERElSKS9zaW5nbGVodG1sLiIKKworcGlj
a2xlOgorCSQoU1BISU5YQlVJTEQpIC1iIHBpY2tsZSAkKEFMTFNQSElOWE9QVFMpICQoQlVJTERE
SVIpL3BpY2tsZQorCUBlY2hvCisJQGVjaG8gIkJ1aWxkIGZpbmlzaGVkOyBub3cgeW91IGNhbiBw
cm9jZXNzIHRoZSBwaWNrbGUgZmlsZXMuIgorCitqc29uOgorCSQoU1BISU5YQlVJTEQpIC1iIGpz
b24gJChBTExTUEhJTlhPUFRTKSAkKEJVSUxERElSKS9qc29uCisJQGVjaG8KKwlAZWNobyAiQnVp
bGQgZmluaXNoZWQ7IG5vdyB5b3UgY2FuIHByb2Nlc3MgdGhlIEpTT04gZmlsZXMuIgorCitodG1s
aGVscDoKKwkkKFNQSElOWEJVSUxEKSAtYiBodG1saGVscCAkKEFMTFNQSElOWE9QVFMpICQoQlVJ
TERESVIpL2h0bWxoZWxwCisJQGVjaG8KKwlAZWNobyAiQnVpbGQgZmluaXNoZWQ7IG5vdyB5b3Ug
Y2FuIHJ1biBIVE1MIEhlbHAgV29ya3Nob3Agd2l0aCB0aGUiIFwKKwkgICAgICAiLmhocCBwcm9q
ZWN0IGZpbGUgaW4gJChCVUlMRERJUikvaHRtbGhlbHAuIgorCitxdGhlbHA6CisJJChTUEhJTlhC
VUlMRCkgLWIgcXRoZWxwICQoQUxMU1BISU5YT1BUUykgJChCVUlMRERJUikvcXRoZWxwCisJQGVj
aG8KKwlAZWNobyAiQnVpbGQgZmluaXNoZWQ7IG5vdyB5b3UgY2FuIHJ1biAicWNvbGxlY3Rpb25n
ZW5lcmF0b3IiIHdpdGggdGhlIiBcCisJICAgICAgIi5xaGNwIHByb2plY3QgZmlsZSBpbiAkKEJV
SUxERElSKS9xdGhlbHAsIGxpa2UgdGhpczoiCisJQGVjaG8gIiMgcWNvbGxlY3Rpb25nZW5lcmF0
b3IgJChCVUlMRERJUikvcXRoZWxwL3dwdHJ1bm5lci5xaGNwIgorCUBlY2hvICJUbyB2aWV3IHRo
ZSBoZWxwIGZpbGU6IgorCUBlY2hvICIjIGFzc2lzdGFudCAtY29sbGVjdGlvbkZpbGUgJChCVUlM
RERJUikvcXRoZWxwL3dwdHJ1bm5lci5xaGMiCisKK2RldmhlbHA6CisJJChTUEhJTlhCVUlMRCkg
LWIgZGV2aGVscCAkKEFMTFNQSElOWE9QVFMpICQoQlVJTERESVIpL2RldmhlbHAKKwlAZWNobwor
CUBlY2hvICJCdWlsZCBmaW5pc2hlZC4iCisJQGVjaG8gIlRvIHZpZXcgdGhlIGhlbHAgZmlsZToi
CisJQGVjaG8gIiMgbWtkaXIgLXAgJCRIT01FLy5sb2NhbC9zaGFyZS9kZXZoZWxwL3dwdHJ1bm5l
ciIKKwlAZWNobyAiIyBsbiAtcyAkKEJVSUxERElSKS9kZXZoZWxwICQkSE9NRS8ubG9jYWwvc2hh
cmUvZGV2aGVscC93cHRydW5uZXIiCisJQGVjaG8gIiMgZGV2aGVscCIKKworZXB1YjoKKwkkKFNQ
SElOWEJVSUxEKSAtYiBlcHViICQoQUxMU1BISU5YT1BUUykgJChCVUlMRERJUikvZXB1YgorCUBl
Y2hvCisJQGVjaG8gIkJ1aWxkIGZpbmlzaGVkLiBUaGUgZXB1YiBmaWxlIGlzIGluICQoQlVJTERE
SVIpL2VwdWIuIgorCitsYXRleDoKKwkkKFNQSElOWEJVSUxEKSAtYiBsYXRleCAkKEFMTFNQSElO
WE9QVFMpICQoQlVJTERESVIpL2xhdGV4CisJQGVjaG8KKwlAZWNobyAiQnVpbGQgZmluaXNoZWQ7
IHRoZSBMYVRlWCBmaWxlcyBhcmUgaW4gJChCVUlMRERJUikvbGF0ZXguIgorCUBlY2hvICJSdW4g
XGBtYWtlJyBpbiB0aGF0IGRpcmVjdG9yeSB0byBydW4gdGhlc2UgdGhyb3VnaCAocGRmKWxhdGV4
IiBcCisJICAgICAgIih1c2UgXGBtYWtlIGxhdGV4cGRmJyBoZXJlIHRvIGRvIHRoYXQgYXV0b21h
dGljYWxseSkuIgorCitsYXRleHBkZjoKKwkkKFNQSElOWEJVSUxEKSAtYiBsYXRleCAkKEFMTFNQ
SElOWE9QVFMpICQoQlVJTERESVIpL2xhdGV4CisJQGVjaG8gIlJ1bm5pbmcgTGFUZVggZmlsZXMg
dGhyb3VnaCBwZGZsYXRleC4uLiIKKwkkKE1BS0UpIC1DICQoQlVJTERESVIpL2xhdGV4IGFsbC1w
ZGYKKwlAZWNobyAicGRmbGF0ZXggZmluaXNoZWQ7IHRoZSBQREYgZmlsZXMgYXJlIGluICQoQlVJ
TERESVIpL2xhdGV4LiIKKworbGF0ZXhwZGZqYToKKwkkKFNQSElOWEJVSUxEKSAtYiBsYXRleCAk
KEFMTFNQSElOWE9QVFMpICQoQlVJTERESVIpL2xhdGV4CisJQGVjaG8gIlJ1bm5pbmcgTGFUZVgg
ZmlsZXMgdGhyb3VnaCBwbGF0ZXggYW5kIGR2aXBkZm14Li4uIgorCSQoTUFLRSkgLUMgJChCVUlM
RERJUikvbGF0ZXggYWxsLXBkZi1qYQorCUBlY2hvICJwZGZsYXRleCBmaW5pc2hlZDsgdGhlIFBE
RiBmaWxlcyBhcmUgaW4gJChCVUlMRERJUikvbGF0ZXguIgorCit0ZXh0OgorCSQoU1BISU5YQlVJ
TEQpIC1iIHRleHQgJChBTExTUEhJTlhPUFRTKSAkKEJVSUxERElSKS90ZXh0CisJQGVjaG8KKwlA
ZWNobyAiQnVpbGQgZmluaXNoZWQuIFRoZSB0ZXh0IGZpbGVzIGFyZSBpbiAkKEJVSUxERElSKS90
ZXh0LiIKKworbWFuOgorCSQoU1BISU5YQlVJTEQpIC1iIG1hbiAkKEFMTFNQSElOWE9QVFMpICQo
QlVJTERESVIpL21hbgorCUBlY2hvCisJQGVjaG8gIkJ1aWxkIGZpbmlzaGVkLiBUaGUgbWFudWFs
IHBhZ2VzIGFyZSBpbiAkKEJVSUxERElSKS9tYW4uIgorCit0ZXhpbmZvOgorCSQoU1BISU5YQlVJ
TEQpIC1iIHRleGluZm8gJChBTExTUEhJTlhPUFRTKSAkKEJVSUxERElSKS90ZXhpbmZvCisJQGVj
aG8KKwlAZWNobyAiQnVpbGQgZmluaXNoZWQuIFRoZSBUZXhpbmZvIGZpbGVzIGFyZSBpbiAkKEJV
SUxERElSKS90ZXhpbmZvLiIKKwlAZWNobyAiUnVuIFxgbWFrZScgaW4gdGhhdCBkaXJlY3Rvcnkg
dG8gcnVuIHRoZXNlIHRocm91Z2ggbWFrZWluZm8iIFwKKwkgICAgICAiKHVzZSBcYG1ha2UgaW5m
bycgaGVyZSB0byBkbyB0aGF0IGF1dG9tYXRpY2FsbHkpLiIKKworaW5mbzoKKwkkKFNQSElOWEJV
SUxEKSAtYiB0ZXhpbmZvICQoQUxMU1BISU5YT1BUUykgJChCVUlMRERJUikvdGV4aW5mbworCUBl
Y2hvICJSdW5uaW5nIFRleGluZm8gZmlsZXMgdGhyb3VnaCBtYWtlaW5mby4uLiIKKwltYWtlIC1D
ICQoQlVJTERESVIpL3RleGluZm8gaW5mbworCUBlY2hvICJtYWtlaW5mbyBmaW5pc2hlZDsgdGhl
IEluZm8gZmlsZXMgYXJlIGluICQoQlVJTERESVIpL3RleGluZm8uIgorCitnZXR0ZXh0OgorCSQo
U1BISU5YQlVJTEQpIC1iIGdldHRleHQgJChJMThOU1BISU5YT1BUUykgJChCVUlMRERJUikvbG9j
YWxlCisJQGVjaG8KKwlAZWNobyAiQnVpbGQgZmluaXNoZWQuIFRoZSBtZXNzYWdlIGNhdGFsb2dz
IGFyZSBpbiAkKEJVSUxERElSKS9sb2NhbGUuIgorCitjaGFuZ2VzOgorCSQoU1BISU5YQlVJTEQp
IC1iIGNoYW5nZXMgJChBTExTUEhJTlhPUFRTKSAkKEJVSUxERElSKS9jaGFuZ2VzCisJQGVjaG8K
KwlAZWNobyAiVGhlIG92ZXJ2aWV3IGZpbGUgaXMgaW4gJChCVUlMRERJUikvY2hhbmdlcy4iCisK
K2xpbmtjaGVjazoKKwkkKFNQSElOWEJVSUxEKSAtYiBsaW5rY2hlY2sgJChBTExTUEhJTlhPUFRT
KSAkKEJVSUxERElSKS9saW5rY2hlY2sKKwlAZWNobworCUBlY2hvICJMaW5rIGNoZWNrIGNvbXBs
ZXRlOyBsb29rIGZvciBhbnkgZXJyb3JzIGluIHRoZSBhYm92ZSBvdXRwdXQgIiBcCisJICAgICAg
Im9yIGluICQoQlVJTERESVIpL2xpbmtjaGVjay9vdXRwdXQudHh0LiIKKworZG9jdGVzdDoKKwkk
KFNQSElOWEJVSUxEKSAtYiBkb2N0ZXN0ICQoQUxMU1BISU5YT1BUUykgJChCVUlMRERJUikvZG9j
dGVzdAorCUBlY2hvICJUZXN0aW5nIG9mIGRvY3Rlc3RzIGluIHRoZSBzb3VyY2VzIGZpbmlzaGVk
LCBsb29rIGF0IHRoZSAiIFwKKwkgICAgICAicmVzdWx0cyBpbiAkKEJVSUxERElSKS9kb2N0ZXN0
L291dHB1dC50eHQuIgorCit4bWw6CisJJChTUEhJTlhCVUlMRCkgLWIgeG1sICQoQUxMU1BISU5Y
T1BUUykgJChCVUlMRERJUikveG1sCisJQGVjaG8KKwlAZWNobyAiQnVpbGQgZmluaXNoZWQuIFRo
ZSBYTUwgZmlsZXMgYXJlIGluICQoQlVJTERESVIpL3htbC4iCisKK3BzZXVkb3htbDoKKwkkKFNQ
SElOWEJVSUxEKSAtYiBwc2V1ZG94bWwgJChBTExTUEhJTlhPUFRTKSAkKEJVSUxERElSKS9wc2V1
ZG94bWwKKwlAZWNobworCUBlY2hvICJCdWlsZCBmaW5pc2hlZC4gVGhlIHBzZXVkby1YTUwgZmls
ZXMgYXJlIGluICQoQlVJTERESVIpL3BzZXVkb3htbC4iCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJU
ZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL2RvY3MvYXJjaGl0ZWN0dXJlLnN2ZyBi
L1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvZG9jcy9hcmNoaXRl
Y3R1cmUuc3ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iOGQ1YWEy
MWMxOQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29s
cy93cHRydW5uZXIvZG9jcy9hcmNoaXRlY3R1cmUuc3ZnCkBAIC0wLDAgKzEgQEAKKzxzdmcgeG1s
bnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53
My5vcmcvMTk5OS94bGluayIgd2lkdGg9Ijc4MHB4IiBoZWlnaHQ9IjEwODdweCIgdmVyc2lvbj0i
MS4xIj48ZGVmcz48bGluZWFyR3JhZGllbnQgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEw
MCUiIGlkPSJteC1ncmFkaWVudC1hOWM0ZWItMS1hOWM0ZWItMS1zLTAiPjxzdG9wIG9mZnNldD0i
MCUiIHN0eWxlPSJzdG9wLWNvbG9yOiNBOUM0RUIiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0eWxl
PSJzdG9wLWNvbG9yOiNBOUM0RUIiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48ZyB0cmFuc2Zv
cm09InRyYW5zbGF0ZSgwLjUsMC41KSI+PHJlY3QgeD0iNDk4IiB5PSI0OTgiIHdpZHRoPSIxMjAi
IGhlaWdodD0iNjAiIGZpbGw9IiNlNmQwZGUiIHN0cm9rZT0iIzAwMDAwMCIgcG9pbnRlci1ldmVu
dHM9Im5vbmUiLz48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1MDAsNTIxKSI+PHN3aXRjaD48Zm9y
ZWlnbk9iamVjdCBwb2ludGVyLWV2ZW50cz0iYWxsIiB3aWR0aD0iMTE2IiBoZWlnaHQ9IjE1IiBy
ZXF1aXJlZEZlYXR1cmVzPSJodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9mZWF0dXJlI0V4dGVu
c2liaWxpdHkiPjxkaXYgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHN0eWxl
PSJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGZvbnQtc2l6ZTogMTJweDsgZm9udC1mYW1pbHk6IEhl
bHZldGljYTsgY29sb3I6IHJnYigwLCAwLCAwKTsgbGluZS1oZWlnaHQ6IDEuMjY7IHZlcnRpY2Fs
LWFsaWduOiB0b3A7IHdpZHRoOiAxMTZweDsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgdGV4dC1hbGln
bjogY2VudGVyOyI+VGVzdFJ1bm5lcjwvZGl2PjwvZm9yZWlnbk9iamVjdD48dGV4dCB4PSI1OCIg
eT0iMTQiIGZpbGw9IiMwMDAwMDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTJw
eCIgZm9udC1mYW1pbHk9IkhlbHZldGljYSI+W05vdCBzdXBwb3J0ZWQgYnkgdmlld2VyXTwvdGV4
dD48L3N3aXRjaD48L2c+PHJlY3QgeD0iMzM4IiB5PSI3NzgiIHdpZHRoPSIxMjAiIGhlaWdodD0i
NjAiIGZpbGw9IiNmMTljOTkiIHN0cm9rZT0iIzAwMDAwMCIgcG9pbnRlci1ldmVudHM9Im5vbmUi
Lz48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzNDAsODAxKSI+PHN3aXRjaD48Zm9yZWlnbk9iamVj
dCBwb2ludGVyLWV2ZW50cz0iYWxsIiB3aWR0aD0iMTE2IiBoZWlnaHQ9IjE1IiByZXF1aXJlZEZl
YXR1cmVzPSJodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9mZWF0dXJlI0V4dGVuc2liaWxpdHki
PjxkaXYgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHN0eWxlPSJkaXNwbGF5
OiBpbmxpbmUtYmxvY2s7IGZvbnQtc2l6ZTogMTJweDsgZm9udC1mYW1pbHk6IEhlbHZldGljYTsg
Y29sb3I6IHJnYigwLCAwLCAwKTsgbGluZS1oZWlnaHQ6IDEuMjY7IHZlcnRpY2FsLWFsaWduOiB0
b3A7IHdpZHRoOiAxMTZweDsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgdGV4dC1hbGlnbjogY2VudGVy
OyI+UHJvZHVjdCB1bmRlciB0ZXN0PC9kaXY+PC9mb3JlaWduT2JqZWN0Pjx0ZXh0IHg9IjU4IiB5
PSIxNCIgZmlsbD0iIzAwMDAwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMnB4
IiBmb250LWZhbWlseT0iSGVsdmV0aWNhIj5bTm90IHN1cHBvcnRlZCBieSB2aWV3ZXJdPC90ZXh0
Pjwvc3dpdGNoPjwvZz48cmVjdCB4PSIzMzgiIHk9IjM4OCIgd2lkdGg9IjEyMCIgaGVpZ2h0PSI2
MCIgZmlsbD0iI2U2ZDBkZSIgc3Ryb2tlPSIjMDAwMDAwIiBwb2ludGVyLWV2ZW50cz0ibm9uZSIv
PjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDM0MCw0MTEpIj48c3dpdGNoPjxmb3JlaWduT2JqZWN0
IHBvaW50ZXItZXZlbnRzPSJhbGwiIHdpZHRoPSIxMTYiIGhlaWdodD0iMTUiIHJlcXVpcmVkRmVh
dHVyZXM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZlYXR1cmUjRXh0ZW5zaWJpbGl0eSI+
PGRpdiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3R5bGU9ImRpc3BsYXk6
IGlubGluZS1ibG9jazsgZm9udC1zaXplOiAxMnB4OyBmb250LWZhbWlseTogSGVsdmV0aWNhOyBj
b2xvcjogcmdiKDAsIDAsIDApOyBsaW5lLWhlaWdodDogMS4yNjsgdmVydGljYWwtYWxpZ246IHRv
cDsgd2lkdGg6IDExNnB4OyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB0ZXh0LWFsaWduOiBjZW50ZXI7
Ij5UZXN0UnVubmVyTWFuYWdlcjwvZGl2PjwvZm9yZWlnbk9iamVjdD48dGV4dCB4PSI1OCIgeT0i
MTQiIGZpbGw9IiMwMDAwMDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTJweCIg
Zm9udC1mYW1pbHk9IkhlbHZldGljYSI+W05vdCBzdXBwb3J0ZWQgYnkgdmlld2VyXTwvdGV4dD48
L3N3aXRjaD48L2c+PHJlY3QgeD0iMzM4IiB5PSIyMjgiIHdpZHRoPSIxMjAiIGhlaWdodD0iNjAi
IGZpbGw9IiNlNmQwZGUiIHN0cm9rZT0iIzAwMDAwMCIgcG9pbnRlci1ldmVudHM9Im5vbmUiLz48
ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzNDAsMjUxKSI+PHN3aXRjaD48Zm9yZWlnbk9iamVjdCBw
b2ludGVyLWV2ZW50cz0iYWxsIiB3aWR0aD0iMTE2IiBoZWlnaHQ9IjE1IiByZXF1aXJlZEZlYXR1
cmVzPSJodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9mZWF0dXJlI0V4dGVuc2liaWxpdHkiPjxk
aXYgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHN0eWxlPSJkaXNwbGF5OiBp
bmxpbmUtYmxvY2s7IGZvbnQtc2l6ZTogMTJweDsgZm9udC1mYW1pbHk6IEhlbHZldGljYTsgY29s
b3I6IHJnYigwLCAwLCAwKTsgbGluZS1oZWlnaHQ6IDEuMjY7IHZlcnRpY2FsLWFsaWduOiB0b3A7
IHdpZHRoOiAxMTZweDsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgdGV4dC1hbGlnbjogY2VudGVyOyI+
TWFuYWdlckdyb3VwPC9kaXY+PC9mb3JlaWduT2JqZWN0Pjx0ZXh0IHg9IjU4IiB5PSIxNCIgZmls
bD0iIzAwMDAwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMnB4IiBmb250LWZh
bWlseT0iSGVsdmV0aWNhIj5bTm90IHN1cHBvcnRlZCBieSB2aWV3ZXJdPC90ZXh0Pjwvc3dpdGNo
PjwvZz48cmVjdCB4PSI2NTgiIHk9IjYwOCIgd2lkdGg9IjEyMCIgaGVpZ2h0PSI2MCIgZmlsbD0i
I2ZmY2U5ZiIgc3Ryb2tlPSIjMDAwMDAwIiBwb2ludGVyLWV2ZW50cz0ibm9uZSIvPjxnIHRyYW5z
Zm9ybT0idHJhbnNsYXRlKDY2MCw2MzEpIj48c3dpdGNoPjxmb3JlaWduT2JqZWN0IHBvaW50ZXIt
ZXZlbnRzPSJhbGwiIHdpZHRoPSIxMTYiIGhlaWdodD0iMTUiIHJlcXVpcmVkRmVhdHVyZXM9Imh0
dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZlYXR1cmUjRXh0ZW5zaWJpbGl0eSI+PGRpdiB4bWxu
cz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3R5bGU9ImRpc3BsYXk6IGlubGluZS1i
bG9jazsgZm9udC1zaXplOiAxMnB4OyBmb250LWZhbWlseTogSGVsdmV0aWNhOyBjb2xvcjogcmdi
KDAsIDAsIDApOyBsaW5lLWhlaWdodDogMS4yNjsgdmVydGljYWwtYWxpZ246IHRvcDsgd2lkdGg6
IDExNnB4OyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij5FeGVjdXRv
cjwvZGl2PjwvZm9yZWlnbk9iamVjdD48dGV4dCB4PSI1OCIgeT0iMTQiIGZpbGw9IiMwMDAwMDAi
IHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTJweCIgZm9udC1mYW1pbHk9IkhlbHZl
dGljYSI+W05vdCBzdXBwb3J0ZWQgYnkgdmlld2VyXTwvdGV4dD48L3N3aXRjaD48L2c+PHJlY3Qg
eD0iMzM4IiB5PSI0OTgiIHdpZHRoPSIxMjAiIGhlaWdodD0iNjAiIGZpbGw9InVybCgjbXgtZ3Jh
ZGllbnQtYTljNGViLTEtYTljNGViLTEtcy0wKSIgc3Ryb2tlPSIjMDAwMDAwIiBwb2ludGVyLWV2
ZW50cz0ibm9uZSIvPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDM0MCw1MjEpIj48c3dpdGNoPjxm
b3JlaWduT2JqZWN0IHBvaW50ZXItZXZlbnRzPSJhbGwiIHdpZHRoPSIxMTYiIGhlaWdodD0iMTUi
IHJlcXVpcmVkRmVhdHVyZXM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZlYXR1cmUjRXh0
ZW5zaWJpbGl0eSI+PGRpdiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3R5
bGU9ImRpc3BsYXk6IGlubGluZS1ibG9jazsgZm9udC1zaXplOiAxMnB4OyBmb250LWZhbWlseTog
SGVsdmV0aWNhOyBjb2xvcjogcmdiKDAsIDAsIDApOyBsaW5lLWhlaWdodDogMS4yNjsgdmVydGlj
YWwtYWxpZ246IHRvcDsgd2lkdGg6IDExNnB4OyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB0ZXh0LWFs
aWduOiBjZW50ZXI7Ij5Ccm93c2VyPC9kaXY+PC9mb3JlaWduT2JqZWN0Pjx0ZXh0IHg9IjU4IiB5
PSIxNCIgZmlsbD0iIzAwMDAwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMnB4
IiBmb250LWZhbWlseT0iSGVsdmV0aWNhIj5bTm90IHN1cHBvcnRlZCBieSB2aWV3ZXJdPC90ZXh0
Pjwvc3dpdGNoPjwvZz48cGF0aCBkPSJNIDM5OCAyODggTCAzOTggMzgyIiBmaWxsPSJub25lIiBz
dHJva2U9IiMwMDAwMDAiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgcG9pbnRlci1ldmVudHM9Im5v
bmUiLz48cGF0aCBkPSJNIDM5OCAzODcgTCAzOTUgMzgwIEwgMzk4IDM4MiBMIDQwMiAzODAgWiIg
ZmlsbD0iIzAwMDAwMCIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHBv
aW50ZXItZXZlbnRzPSJub25lIi8+PHBhdGggZD0iTSAzOTggNDQ4IEwgMzk4IDQ5MiIgZmlsbD0i
bm9uZSIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHBvaW50ZXItZXZl
bnRzPSJub25lIi8+PHBhdGggZD0iTSAzOTggNDk3IEwgMzk1IDQ5MCBMIDM5OCA0OTIgTCA0MDIg
NDkwIFoiIGZpbGw9IiMwMDAwMDAiIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLW1pdGVybGltaXQ9
IjEwIiBwb2ludGVyLWV2ZW50cz0ibm9uZSIvPjxwYXRoIGQ9Ik0gNjE4IDUyOCBMIDY4NCA2MDMi
IGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBwb2lu
dGVyLWV2ZW50cz0ibm9uZSIvPjxwYXRoIGQ9Ik0gNjg3IDYwNyBMIDY4MCA2MDQgTCA2ODQgNjAz
IEwgNjg1IDYwMCBaIiBmaWxsPSIjMDAwMDAwIiBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS1taXRl
cmxpbWl0PSIxMCIgcG9pbnRlci1ldmVudHM9Im5vbmUiLz48cmVjdCB4PSI0OTgiIHk9IjYwOCIg
d2lkdGg9IjEyMCIgaGVpZ2h0PSI2MCIgZmlsbD0iI2E5YzRlYiIgc3Ryb2tlPSIjMDAwMDAwIiBw
b2ludGVyLWV2ZW50cz0ibm9uZSIvPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDUwMCw2MzEpIj48
c3dpdGNoPjxmb3JlaWduT2JqZWN0IHBvaW50ZXItZXZlbnRzPSJhbGwiIHdpZHRoPSIxMTYiIGhl
aWdodD0iMTUiIHJlcXVpcmVkRmVhdHVyZXM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2Zl
YXR1cmUjRXh0ZW5zaWJpbGl0eSI+PGRpdiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94
aHRtbCIgc3R5bGU9ImRpc3BsYXk6IGlubGluZS1ibG9jazsgZm9udC1zaXplOiAxMnB4OyBmb250
LWZhbWlseTogSGVsdmV0aWNhOyBjb2xvcjogcmdiKDAsIDAsIDApOyBsaW5lLWhlaWdodDogMS4y
NjsgdmVydGljYWwtYWxpZ246IHRvcDsgd2lkdGg6IDExNnB4OyB3aGl0ZS1zcGFjZTogbm9ybWFs
OyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij5FeGVjdXRvckJyb3dzZXI8L2Rpdj48L2ZvcmVpZ25PYmpl
Y3Q+PHRleHQgeD0iNTgiIHk9IjE0IiBmaWxsPSIjMDAwMDAwIiB0ZXh0LWFuY2hvcj0ibWlkZGxl
IiBmb250LXNpemU9IjEycHgiIGZvbnQtZmFtaWx5PSJIZWx2ZXRpY2EiPltOb3Qgc3VwcG9ydGVk
IGJ5IHZpZXdlcl08L3RleHQ+PC9zd2l0Y2g+PC9nPjxwYXRoIGQ9Ik0gNjI0IDYzOCBMIDY1OCA2
MzgiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBw
b2ludGVyLWV2ZW50cz0ibm9uZSIvPjxwYXRoIGQ9Ik0gNjE5IDYzOCBMIDYyNiA2MzUgTCA2MjQg
NjM4IEwgNjI2IDY0MiBaIiBmaWxsPSIjMDAwMDAwIiBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS1t
aXRlcmxpbWl0PSIxMCIgcG9pbnRlci1ldmVudHM9Im5vbmUiLz48cGF0aCBkPSJNIDQyOCA0NDgg
TCA1NTIgNDk2IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS1taXRlcmxpbWl0
PSIxMCIgc3Ryb2tlLWRhc2hhcnJheT0iMyAzIiBwb2ludGVyLWV2ZW50cz0ibm9uZSIvPjxwYXRo
IGQ9Ik0gNTU3IDQ5OCBMIDU0OSA0OTggTCA1NTIgNDk2IEwgNTUyIDQ5MiBaIiBmaWxsPSIjMDAw
MDAwIiBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgcG9pbnRlci1ldmVu
dHM9Im5vbmUiLz48cGF0aCBkPSJNIDM5OCA1NTggTCAzOTggNzcyIiBmaWxsPSJub25lIiBzdHJv
a2U9IiMwMDAwMDAiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLWRhc2hhcnJheT0iMyAz
IiBwb2ludGVyLWV2ZW50cz0ibm9uZSIvPjxwYXRoIGQ9Ik0gMzk4IDc3NyBMIDM5NSA3NzAgTCAz
OTggNzcyIEwgNDAyIDc3MCBaIiBmaWxsPSIjMDAwMDAwIiBzdHJva2U9IiMwMDAwMDAiIHN0cm9r
ZS1taXRlcmxpbWl0PSIxMCIgcG9pbnRlci1ldmVudHM9Im5vbmUiLz48cmVjdCB4PSIzMzgiIHk9
IjQ4IiB3aWR0aD0iMTIwIiBoZWlnaHQ9IjYwIiBmaWxsPSIjZTZkMGRlIiBzdHJva2U9IiMwMDAw
MDAiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzQwLDcx
KSI+PHN3aXRjaD48Zm9yZWlnbk9iamVjdCBwb2ludGVyLWV2ZW50cz0iYWxsIiB3aWR0aD0iMTE2
IiBoZWlnaHQ9IjE1IiByZXF1aXJlZEZlYXR1cmVzPSJodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcx
MS9mZWF0dXJlI0V4dGVuc2liaWxpdHkiPjxkaXYgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5
OTkveGh0bWwiIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGZvbnQtc2l6ZTogMTJweDsg
Zm9udC1mYW1pbHk6IEhlbHZldGljYTsgY29sb3I6IHJnYigwLCAwLCAwKTsgbGluZS1oZWlnaHQ6
IDEuMjY7IHZlcnRpY2FsLWFsaWduOiB0b3A7IHdpZHRoOiAxMTZweDsgd2hpdGUtc3BhY2U6IG5v
cm1hbDsgdGV4dC1hbGlnbjogY2VudGVyOyI+cnVuX3Rlc3RzPC9kaXY+PC9mb3JlaWduT2JqZWN0
Pjx0ZXh0IHg9IjU4IiB5PSIxNCIgZmlsbD0iIzAwMDAwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIg
Zm9udC1zaXplPSIxMnB4IiBmb250LWZhbWlseT0iSGVsdmV0aWNhIj5bTm90IHN1cHBvcnRlZCBi
eSB2aWV3ZXJdPC90ZXh0Pjwvc3dpdGNoPjwvZz48cGF0aCBkPSJNIDQ1OCA3OCBMIDY1MiA3OCIg
ZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHBvaW50
ZXItZXZlbnRzPSJub25lIi8+PHBhdGggZD0iTSA2NTcgNzggTCA2NTAgODIgTCA2NTIgNzggTCA2
NTAgNzUgWiIgZmlsbD0iIzAwMDAwMCIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2UtbWl0ZXJsaW1p
dD0iMTAiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+PHJlY3QgeD0iNjU4IiB5PSI0OCIgd2lkdGg9
IjEyMCIgaGVpZ2h0PSI2MCIgZmlsbD0iI2U2ZDBkZSIgc3Ryb2tlPSIjMDAwMDAwIiBwb2ludGVy
LWV2ZW50cz0ibm9uZSIvPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDY2MCw3MSkiPjxzd2l0Y2g+
PGZvcmVpZ25PYmplY3QgcG9pbnRlci1ldmVudHM9ImFsbCIgd2lkdGg9IjExNiIgaGVpZ2h0PSIx
NSIgcmVxdWlyZWRGZWF0dXJlcz0iaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmVhdHVyZSNF
eHRlbnNpYmlsaXR5Ij48ZGl2IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBz
dHlsZT0iZGlzcGxheTogaW5saW5lLWJsb2NrOyBmb250LXNpemU6IDEycHg7IGZvbnQtZmFtaWx5
OiBIZWx2ZXRpY2E7IGNvbG9yOiByZ2IoMCwgMCwgMCk7IGxpbmUtaGVpZ2h0OiAxLjI2OyB2ZXJ0
aWNhbC1hbGlnbjogdG9wOyB3aWR0aDogMTE2cHg7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHRleHQt
YWxpZ246IGNlbnRlcjsiPlRlc3RMb2FkZXI8L2Rpdj48L2ZvcmVpZ25PYmplY3Q+PHRleHQgeD0i
NTgiIHk9IjE0IiBmaWxsPSIjMDAwMDAwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9
IjEycHgiIGZvbnQtZmFtaWx5PSJIZWx2ZXRpY2EiPltOb3Qgc3VwcG9ydGVkIGJ5IHZpZXdlcl08
L3RleHQ+PC9zd2l0Y2g+PC9nPjxyZWN0IHg9IjcxIiB5PSI0OCIgd2lkdGg9IjEyMCIgaGVpZ2h0
PSI2MCIgZmlsbD0iI2U2ZDBkZSIgc3Ryb2tlPSIjMDAwMDAwIiBwb2ludGVyLWV2ZW50cz0ibm9u
ZSIvPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDczLDcxKSI+PHN3aXRjaD48Zm9yZWlnbk9iamVj
dCBwb2ludGVyLWV2ZW50cz0iYWxsIiB3aWR0aD0iMTE2IiBoZWlnaHQ9IjE1IiByZXF1aXJlZEZl
YXR1cmVzPSJodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9mZWF0dXJlI0V4dGVuc2liaWxpdHki
PjxkaXYgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHN0eWxlPSJkaXNwbGF5
OiBpbmxpbmUtYmxvY2s7IGZvbnQtc2l6ZTogMTJweDsgZm9udC1mYW1pbHk6IEhlbHZldGljYTsg
Y29sb3I6IHJnYigwLCAwLCAwKTsgbGluZS1oZWlnaHQ6IDEuMjY7IHZlcnRpY2FsLWFsaWduOiB0
b3A7IHdpZHRoOiAxMTZweDsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgdGV4dC1hbGlnbjogY2VudGVy
OyI+VGVzdEVudmlyb25tZW50PC9kaXY+PC9mb3JlaWduT2JqZWN0Pjx0ZXh0IHg9IjU4IiB5PSIx
NCIgZmlsbD0iIzAwMDAwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMnB4IiBm
b250LWZhbWlseT0iSGVsdmV0aWNhIj5bTm90IHN1cHBvcnRlZCBieSB2aWV3ZXJdPC90ZXh0Pjwv
c3dpdGNoPjwvZz48cmVjdCB4PSIxNTEiIHk9IjYxOCIgd2lkdGg9IjEyMCIgaGVpZ2h0PSI2MCIg
ZmlsbD0iI2I5ZTBhNSIgc3Ryb2tlPSIjMDAwMDAwIiBwb2ludGVyLWV2ZW50cz0ibm9uZSIvPjxn
IHRyYW5zZm9ybT0idHJhbnNsYXRlKDE1Myw2NDEpIj48c3dpdGNoPjxmb3JlaWduT2JqZWN0IHBv
aW50ZXItZXZlbnRzPSJhbGwiIHdpZHRoPSIxMTYiIGhlaWdodD0iMTUiIHJlcXVpcmVkRmVhdHVy
ZXM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZlYXR1cmUjRXh0ZW5zaWJpbGl0eSI+PGRp
diB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3R5bGU9ImRpc3BsYXk6IGlu
bGluZS1ibG9jazsgZm9udC1zaXplOiAxMnB4OyBmb250LWZhbWlseTogSGVsdmV0aWNhOyBjb2xv
cjogcmdiKDAsIDAsIDApOyBsaW5lLWhlaWdodDogMS4yNjsgdmVydGljYWwtYWxpZ246IHRvcDsg
d2lkdGg6IDExNnB4OyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij53
cHRzZXJ2ZTwvZGl2PjwvZm9yZWlnbk9iamVjdD48dGV4dCB4PSI1OCIgeT0iMTQiIGZpbGw9IiMw
MDAwMDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTJweCIgZm9udC1mYW1pbHk9
IkhlbHZldGljYSI+W05vdCBzdXBwb3J0ZWQgYnkgdmlld2VyXTwvdGV4dD48L3N3aXRjaD48L2c+
PHJlY3QgeD0iMSIgeT0iNjE4IiB3aWR0aD0iMTIwIiBoZWlnaHQ9IjYwIiBmaWxsPSIjYjllMGE1
IiBzdHJva2U9IiMwMDAwMDAiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+PGcgdHJhbnNmb3JtPSJ0
cmFuc2xhdGUoMyw2NDEpIj48c3dpdGNoPjxmb3JlaWduT2JqZWN0IHBvaW50ZXItZXZlbnRzPSJh
bGwiIHdpZHRoPSIxMTYiIGhlaWdodD0iMTUiIHJlcXVpcmVkRmVhdHVyZXM9Imh0dHA6Ly93d3cu
dzMub3JnL1RSL1NWRzExL2ZlYXR1cmUjRXh0ZW5zaWJpbGl0eSI+PGRpdiB4bWxucz0iaHR0cDov
L3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3R5bGU9ImRpc3BsYXk6IGlubGluZS1ibG9jazsgZm9u
dC1zaXplOiAxMnB4OyBmb250LWZhbWlseTogSGVsdmV0aWNhOyBjb2xvcjogcmdiKDAsIDAsIDAp
OyBsaW5lLWhlaWdodDogMS4yNjsgdmVydGljYWwtYWxpZ246IHRvcDsgd2lkdGg6IDExNnB4OyB3
aGl0ZS1zcGFjZTogbm9ybWFsOyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij5weXdlYnNvY2tldDwvZGl2
PjwvZm9yZWlnbk9iamVjdD48dGV4dCB4PSI1OCIgeT0iMTQiIGZpbGw9IiMwMDAwMDAiIHRleHQt
YW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTJweCIgZm9udC1mYW1pbHk9IkhlbHZldGljYSI+
W05vdCBzdXBwb3J0ZWQgYnkgdmlld2VyXTwvdGV4dD48L3N3aXRjaD48L2c+PHBhdGggZD0iTSAz
MzggNzggTCAxOTcgNzgiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLW1pdGVy
bGltaXQ9IjEwIiBwb2ludGVyLWV2ZW50cz0ibm9uZSIvPjxwYXRoIGQ9Ik0gMTkyIDc4IEwgMTk5
IDc1IEwgMTk3IDc4IEwgMTk5IDgyIFoiIGZpbGw9IiMwMDAwMDAiIHN0cm9rZT0iIzAwMDAwMCIg
c3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBwb2ludGVyLWV2ZW50cz0ibm9uZSIvPjxwYXRoIGQ9Ik0g
MTAxIDMwOCBMIDYyIDYxMiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2UtbWl0
ZXJsaW1pdD0iMTAiIHN0cm9rZS1kYXNoYXJyYXk9IjMgMyIgcG9pbnRlci1ldmVudHM9Im5vbmUi
Lz48cGF0aCBkPSJNIDYxIDYxNyBMIDU5IDYxMCBMIDYyIDYxMiBMIDY2IDYxMCBaIiBmaWxsPSIj
MDAwMDAwIiBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgcG9pbnRlci1l
dmVudHM9Im5vbmUiLz48cGF0aCBkPSJNIDE2MSAzMDggTCAyMDQgNjEyIiBmaWxsPSJub25lIiBz
dHJva2U9IiMwMDAwMDAiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLWRhc2hhcnJheT0i
MyAzIiBwb2ludGVyLWV2ZW50cz0ibm9uZSIvPjxwYXRoIGQ9Ik0gMjA0IDYxNyBMIDIwMCA2MTAg
TCAyMDQgNjEyIEwgMjA3IDYwOSBaIiBmaWxsPSIjMDAwMDAwIiBzdHJva2U9IiMwMDAwMDAiIHN0
cm9rZS1taXRlcmxpbWl0PSIxMCIgcG9pbnRlci1ldmVudHM9Im5vbmUiLz48cGF0aCBkPSJNIDMz
OCA4MjMgTCA2MSA2NzgiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLW1pdGVy
bGltaXQ9IjEwIiBzdHJva2UtZGFzaGFycmF5PSIzIDMiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+
PHBhdGggZD0iTSAyMTEgNjc4IEwgMzM4IDc5MyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwMDAw
IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS1kYXNoYXJyYXk9IjMgMyIgcG9pbnRlci1l
dmVudHM9Im5vbmUiLz48cGF0aCBkPSJNIDM5OCAxMDggTCAzOTggMjIyIiBmaWxsPSJub25lIiBz
dHJva2U9IiMwMDAwMDAiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgcG9pbnRlci1ldmVudHM9Im5v
bmUiLz48cGF0aCBkPSJNIDM5OCAyMjcgTCAzOTUgMjIwIEwgMzk4IDIyMiBMIDQwMiAyMjAgWiIg
ZmlsbD0iIzAwMDAwMCIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHBv
aW50ZXItZXZlbnRzPSJub25lIi8+PHBhdGggZD0iTSA3MDYgMjg4IEwgNjE4IDUxMyIgZmlsbD0i
bm9uZSIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS1kYXNo
YXJyYXk9IjMgMyIgcG9pbnRlci1ldmVudHM9Im5vbmUiLz48cmVjdCB4PSI2NTgiIHk9IjM4OCIg
d2lkdGg9IjcwIiBoZWlnaHQ9IjQwIiBmaWxsPSJub25lIiBzdHJva2U9Im5vbmUiIHBvaW50ZXIt
ZXZlbnRzPSJub25lIi8+PGcgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9IkhlbHZldGljYSIg
dGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMnB4Ij48dGV4dCB4PSI2OTMiIHk9IjQx
MiI+UXVldWUuZ2V0PC90ZXh0PjwvZz48cGF0aCBkPSJNIDQ1OCA4MDggTCA3MTggNjY4IiBmaWxs
PSJub25lIiBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLWRh
c2hhcnJheT0iMyAzIiBwb2ludGVyLWV2ZW50cz0ibm9uZSIvPjxyZWN0IHg9IjcxIiB5PSIyNDgi
IHdpZHRoPSIxMjAiIGhlaWdodD0iNjAiIGZpbGw9IiNiOWUwYTUiIHN0cm9rZT0iIzAwMDAwMCIg
cG9pbnRlci1ldmVudHM9Im5vbmUiLz48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg3MywyNzEpIj48
c3dpdGNoPjxmb3JlaWduT2JqZWN0IHBvaW50ZXItZXZlbnRzPSJhbGwiIHdpZHRoPSIxMTYiIGhl
aWdodD0iMTUiIHJlcXVpcmVkRmVhdHVyZXM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2Zl
YXR1cmUjRXh0ZW5zaWJpbGl0eSI+PGRpdiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94
aHRtbCIgc3R5bGU9ImRpc3BsYXk6IGlubGluZS1ibG9jazsgZm9udC1zaXplOiAxMnB4OyBmb250
LWZhbWlseTogSGVsdmV0aWNhOyBjb2xvcjogcmdiKDAsIDAsIDApOyBsaW5lLWhlaWdodDogMS4y
NjsgdmVydGljYWwtYWxpZ246IHRvcDsgd2lkdGg6IDExNnB4OyB3aGl0ZS1zcGFjZTogbm9ybWFs
OyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij5zZXJ2ZS5weTwvZGl2PjwvZm9yZWlnbk9iamVjdD48dGV4
dCB4PSI1OCIgeT0iMTQiIGZpbGw9IiMwMDAwMDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQt
c2l6ZT0iMTJweCIgZm9udC1mYW1pbHk9IkhlbHZldGljYSI+W05vdCBzdXBwb3J0ZWQgYnkgdmll
d2VyXTwvdGV4dD48L3N3aXRjaD48L2c+PHBhdGggZD0iTSAxMzEgMTA4IEwgMTMxIDI0MiIgZmls
bD0ibm9uZSIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS1k
YXNoYXJyYXk9IjMgMyIgcG9pbnRlci1ldmVudHM9Im5vbmUiLz48cGF0aCBkPSJNIDEzMSAyNDcg
TCAxMjggMjQwIEwgMTMxIDI0MiBMIDEzNSAyNDAgWiIgZmlsbD0iIzAwMDAwMCIgc3Ryb2tlPSIj
MDAwMDAwIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+PHBh
dGggZD0iTSA4OCA5NzMgTCAxMzIgOTczIiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAwMDAiIHN0
cm9rZS1taXRlcmxpbWl0PSIxMCIgcG9pbnRlci1ldmVudHM9Im5vbmUiLz48cGF0aCBkPSJNIDEz
NyA5NzMgTCAxMzAgOTc3IEwgMTMyIDk3MyBMIDEzMCA5NzAgWiIgZmlsbD0iIzAwMDAwMCIgc3Ry
b2tlPSIjMDAwMDAwIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHBvaW50ZXItZXZlbnRzPSJub25l
Ii8+PHJlY3QgeD0iMTM4IiB5PSIxMDE4IiB3aWR0aD0iMTgwIiBoZWlnaHQ9IjMwIiBmaWxsPSJu
b25lIiBzdHJva2U9Im5vbmUiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+PGcgZmlsbD0iIzAwMDAw
MCIgZm9udC1mYW1pbHk9IkhlbHZldGljYSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXpl
PSIxMnB4Ij48dGV4dCB4PSIyMjgiIHk9IjEwMzciPkNvbW11bmljYXRpb24gKGNyb3NzIHByb2Nl
c3MpPC90ZXh0PjwvZz48cGF0aCBkPSJNIDg4IDEwMDIgTCAxMzIgMTAwMiIgZmlsbD0ibm9uZSIg
c3Ryb2tlPSIjMDAwMDAwIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS1kYXNoYXJyYXk9
IjMgMyIgcG9pbnRlci1ldmVudHM9Im5vbmUiLz48cGF0aCBkPSJNIDEzNyAxMDAyIEwgMTMwIDEw
MDYgTCAxMzIgMTAwMiBMIDEzMCA5OTkgWiIgZmlsbD0iIzAwMDAwMCIgc3Ryb2tlPSIjMDAwMDAw
IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+PHJlY3QgeD0i
MTM4IiB5PSI5NTgiIHdpZHRoPSIxODAiIGhlaWdodD0iMzAiIGZpbGw9Im5vbmUiIHN0cm9rZT0i
bm9uZSIgcG9pbnRlci1ldmVudHM9Im5vbmUiLz48ZyBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWls
eT0iSGVsdmV0aWNhIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEycHgiPjx0ZXh0
IHg9IjIyOCIgeT0iOTc3Ij5Pd25lcnNoaXAgKHNhbWUgcHJvY2Vzcyk8L3RleHQ+PC9nPjxwYXRo
IGQ9Ik0gODggMTAzMyBMIDEzOCAxMDMzIiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAwMDAiIHN0
cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLWRhc2hhcnJheT0iMyAzIiBwb2ludGVyLWV2ZW50
cz0ibm9uZSIvPjxyZWN0IHg9IjE0MyIgeT0iOTg4IiB3aWR0aD0iMTgwIiBoZWlnaHQ9IjMwIiBm
aWxsPSJub25lIiBzdHJva2U9Im5vbmUiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+PGcgZmlsbD0i
IzAwMDAwMCIgZm9udC1mYW1pbHk9IkhlbHZldGljYSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9u
dC1zaXplPSIxMnB4Ij48dGV4dCB4PSIyMzMiIHk9IjEwMDciPk93bmVyc2hpcCAoY3Jvc3MgcHJv
Y2Vzcyk8L3RleHQ+PC9nPjxyZWN0IHg9IjQyOCIgeT0iOTY2IiB3aWR0aD0iNTAiIGhlaWdodD0i
MTUiIGZpbGw9IiNlNmQwZGUiIHN0cm9rZT0iIzAwMDAwMCIgcG9pbnRlci1ldmVudHM9Im5vbmUi
Lz48cmVjdCB4PSI0MjgiIHk9Ijk5MCIgd2lkdGg9IjUwIiBoZWlnaHQ9IjE1IiBmaWxsPSIjYTlj
NGViIiBzdHJva2U9IiMwMDAwMDAiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+PHJlY3QgeD0iNDI4
IiB5PSIxMDE1IiB3aWR0aD0iNTAiIGhlaWdodD0iMTUiIGZpbGw9IiNmZmNlOWYiIHN0cm9rZT0i
IzAwMDAwMCIgcG9pbnRlci1ldmVudHM9Im5vbmUiLz48cmVjdCB4PSI0MjgiIHk9IjEwNjMiIHdp
ZHRoPSI1MCIgaGVpZ2h0PSIxNSIgZmlsbD0iI2YxOWM5OSIgc3Ryb2tlPSIjMDAwMDAwIiBwb2lu
dGVyLWV2ZW50cz0ibm9uZSIvPjxyZWN0IHg9IjQyOCIgeT0iMTAzOCIgd2lkdGg9IjUwIiBoZWln
aHQ9IjE1IiBmaWxsPSIjYjllMGE1IiBzdHJva2U9IiMwMDAwMDAiIHBvaW50ZXItZXZlbnRzPSJu
b25lIi8+PHJlY3QgeD0iNDg1IiB5PSI5NTgiIHdpZHRoPSI5MCIgaGVpZ2h0PSIzMCIgZmlsbD0i
bm9uZSIgc3Ryb2tlPSJub25lIiBwb2ludGVyLWV2ZW50cz0ibm9uZSIvPjxnIGZpbGw9IiMwMDAw
MDAiIGZvbnQtZmFtaWx5PSJIZWx2ZXRpY2EiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6
ZT0iMTJweCI+PHRleHQgeD0iNTMwIiB5PSI5NzciPndwdHJ1bm5lciBjbGFzczwvdGV4dD48L2c+
PHJlY3QgeD0iNDg2IiB5PSI5ODMiIHdpZHRoPSIxNTAiIGhlaWdodD0iMzAiIGZpbGw9Im5vbmUi
IHN0cm9rZT0ibm9uZSIgcG9pbnRlci1ldmVudHM9Im5vbmUiLz48ZyBmaWxsPSIjMDAwMDAwIiBm
b250LWZhbWlseT0iSGVsdmV0aWNhIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEy
cHgiPjx0ZXh0IHg9IjU2MSIgeT0iMTAwMiI+UGVyLXByb2R1Y3Qgd3B0cnVubmVyIGNsYXNzPC90
ZXh0PjwvZz48cmVjdCB4PSI0ODYiIHk9IjEwMDgiIHdpZHRoPSIxNTAiIGhlaWdodD0iMzAiIGZp
bGw9Im5vbmUiIHN0cm9rZT0ibm9uZSIgcG9pbnRlci1ldmVudHM9Im5vbmUiLz48ZyBmaWxsPSIj
MDAwMDAwIiBmb250LWZhbWlseT0iSGVsdmV0aWNhIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250
LXNpemU9IjEycHgiPjx0ZXh0IHg9IjU2MSIgeT0iMTAyNyI+UGVyLXByb3RvY29sIHdwdHJ1bm5l
ciBjbGFzczwvdGV4dD48L2c+PHJlY3QgeD0iNDkxIiB5PSIxMDMxIiB3aWR0aD0iMTUwIiBoZWln
aHQ9IjMwIiBmaWxsPSJub25lIiBzdHJva2U9Im5vbmUiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+
PGcgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9IkhlbHZldGljYSIgdGV4dC1hbmNob3I9Im1p
ZGRsZSIgZm9udC1zaXplPSIxMnB4Ij48dGV4dCB4PSI1NjYiIHk9IjEwNTAiPldlYi1wbGF0Zm9y
bS10ZXN0cyBjb21wb25lbnQ8L3RleHQ+PC9nPjxyZWN0IHg9IjQ4NiIgeT0iMTA1NSIgd2lkdGg9
IjkwIiBoZWlnaHQ9IjMwIiBmaWxsPSJub25lIiBzdHJva2U9Im5vbmUiIHBvaW50ZXItZXZlbnRz
PSJub25lIi8+PGcgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9IkhlbHZldGljYSIgdGV4dC1h
bmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMnB4Ij48dGV4dCB4PSI1MzEiIHk9IjEwNzQiPkJy
b3dzZXIgcHJvY2VzczwvdGV4dD48L2c+PHBhdGggZD0iTSAzOTggOCBMIDM5OCA0MiIgZmlsbD0i
bm9uZSIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHBvaW50ZXItZXZl
bnRzPSJub25lIi8+PHBhdGggZD0iTSAzOTggNDcgTCAzOTUgNDAgTCAzOTggNDIgTCA0MDIgNDAg
WiIgZmlsbD0iIzAwMDAwMCIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAi
IHBvaW50ZXItZXZlbnRzPSJub25lIi8+PHJlY3QgeD0iNDc4IiB5PSIzODgiIHdpZHRoPSIxMjAi
IGhlaWdodD0iNjAiIGZpbGwtb3BhY2l0eT0iMC41IiBmaWxsPSIjZTZkMGRlIiBzdHJva2U9IiMw
MDAwMDAiIHN0cm9rZS1vcGFjaXR5PSIwLjUiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+PGcgdHJh
bnNmb3JtPSJ0cmFuc2xhdGUoNDgwLDQxMSkiPjxzd2l0Y2g+PGZvcmVpZ25PYmplY3QgcG9pbnRl
ci1ldmVudHM9ImFsbCIgd2lkdGg9IjExNiIgaGVpZ2h0PSIxNSIgcmVxdWlyZWRGZWF0dXJlcz0i
aHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmVhdHVyZSNFeHRlbnNpYmlsaXR5Ij48ZGl2IHht
bG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzdHlsZT0iZGlzcGxheTogaW5saW5l
LWJsb2NrOyBmb250LXNpemU6IDEycHg7IGZvbnQtZmFtaWx5OiBIZWx2ZXRpY2E7IGNvbG9yOiBy
Z2IoMCwgMCwgMCk7IGxpbmUtaGVpZ2h0OiAxLjI2OyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyB3aWR0
aDogMTE2cHg7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHRleHQtYWxpZ246IGNlbnRlcjsiPlRlc3RS
dW5uZXJNYW5hZ2VyPC9kaXY+PC9mb3JlaWduT2JqZWN0Pjx0ZXh0IHg9IjU4IiB5PSIxNCIgZmls
bD0iIzAwMDAwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMnB4IiBmb250LWZh
bWlseT0iSGVsdmV0aWNhIj5bTm90IHN1cHBvcnRlZCBieSB2aWV3ZXJdPC90ZXh0Pjwvc3dpdGNo
PjwvZz48cGF0aCBkPSJNIDM5OCAyODggTCA1MzMgMzg0IiBmaWxsPSJub25lIiBzdHJva2U9IiMw
MDAwMDAiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgcG9pbnRlci1ldmVudHM9Im5vbmUiLz48cGF0
aCBkPSJNIDUzNyAzODcgTCA1MjkgMzg2IEwgNTMzIDM4NCBMIDUzMyAzODAgWiIgZmlsbD0iIzAw
MDAwMCIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHBvaW50ZXItZXZl
bnRzPSJub25lIi8+PHJlY3QgeD0iMTk4IiB5PSIzODgiIHdpZHRoPSIxMjAiIGhlaWdodD0iNjAi
IGZpbGwtb3BhY2l0eT0iMC41IiBmaWxsPSIjZTZkMGRlIiBzdHJva2U9IiMwMDAwMDAiIHN0cm9r
ZS1vcGFjaXR5PSIwLjUiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+PGcgdHJhbnNmb3JtPSJ0cmFu
c2xhdGUoMjAwLDQxMSkiPjxzd2l0Y2g+PGZvcmVpZ25PYmplY3QgcG9pbnRlci1ldmVudHM9ImFs
bCIgd2lkdGg9IjExNiIgaGVpZ2h0PSIxNSIgcmVxdWlyZWRGZWF0dXJlcz0iaHR0cDovL3d3dy53
My5vcmcvVFIvU1ZHMTEvZmVhdHVyZSNFeHRlbnNpYmlsaXR5Ij48ZGl2IHhtbG5zPSJodHRwOi8v
d3d3LnczLm9yZy8xOTk5L3hodG1sIiBzdHlsZT0iZGlzcGxheTogaW5saW5lLWJsb2NrOyBmb250
LXNpemU6IDEycHg7IGZvbnQtZmFtaWx5OiBIZWx2ZXRpY2E7IGNvbG9yOiByZ2IoMCwgMCwgMCk7
IGxpbmUtaGVpZ2h0OiAxLjI2OyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyB3aWR0aDogMTE2cHg7IHdo
aXRlLXNwYWNlOiBub3JtYWw7IHRleHQtYWxpZ246IGNlbnRlcjsiPlRlc3RSdW5uZXJNYW5hZ2Vy
PC9kaXY+PC9mb3JlaWduT2JqZWN0Pjx0ZXh0IHg9IjU4IiB5PSIxNCIgZmlsbD0iIzAwMDAwMCIg
dGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMnB4IiBmb250LWZhbWlseT0iSGVsdmV0
aWNhIj5bTm90IHN1cHBvcnRlZCBieSB2aWV3ZXJdPC90ZXh0Pjwvc3dpdGNoPjwvZz48cGF0aCBk
PSJNIDM5OCAyODggTCAyNjMgMzg0IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAwMDAiIHN0cm9r
ZS1taXRlcmxpbWl0PSIxMCIgcG9pbnRlci1ldmVudHM9Im5vbmUiLz48cGF0aCBkPSJNIDI1OSAz
ODcgTCAyNjMgMzgwIEwgMjYzIDM4NCBMIDI2NyAzODYgWiIgZmlsbD0iIzAwMDAwMCIgc3Ryb2tl
PSIjMDAwMDAwIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+
PHJlY3QgeD0iNTc1IiB5PSI3NDgiIHdpZHRoPSIxMTAiIGhlaWdodD0iNDAiIGZpbGw9Im5vbmUi
IHN0cm9rZT0ibm9uZSIgcG9pbnRlci1ldmVudHM9Im5vbmUiLz48ZyBmaWxsPSIjMDAwMDAwIiBm
b250LWZhbWlseT0iSGVsdmV0aWNhIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEy
cHgiPjx0ZXh0IHg9IjYzMCIgeT0iNzU4Ij5Ccm93c2VyIGNvbnRyb2w8L3RleHQ+PHRleHQgeD0i
NjMwIiB5PSI3NzIiPnByb3RvY29sPC90ZXh0Pjx0ZXh0IHg9IjYzMCIgeT0iNzg2Ij4oZS5nLiBX
ZWJEcml2ZXIpPC90ZXh0PjwvZz48cmVjdCB4PSIyNTgiIHk9IjcwOCIgd2lkdGg9IjgwIiBoZWln
aHQ9IjQwIiBmaWxsPSJub25lIiBzdHJva2U9Im5vbmUiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+
PGcgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9IkhlbHZldGljYSIgdGV4dC1hbmNob3I9Im1p
ZGRsZSIgZm9udC1zaXplPSIxMnB4Ij48dGV4dCB4PSIyOTgiIHk9IjczMiI+SFRUUDwvdGV4dD48
L2c+PHJlY3QgeD0iMTExIiB5PSI3MjgiIHdpZHRoPSI4MCIgaGVpZ2h0PSI0MCIgZmlsbD0ibm9u
ZSIgc3Ryb2tlPSJub25lIiBwb2ludGVyLWV2ZW50cz0ibm9uZSIvPjxnIGZpbGw9IiMwMDAwMDAi
IGZvbnQtZmFtaWx5PSJIZWx2ZXRpY2EiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0i
MTJweCI+PHRleHQgeD0iMTUxIiB5PSI3NTIiPndlYnNvY2tldHM8L3RleHQ+PC9nPjxyZWN0IHg9
IjY1OCIgeT0iMjI4IiB3aWR0aD0iMTIwIiBoZWlnaHQ9IjYwIiBmaWxsPSIjZTZkMGRlIiBzdHJv
a2U9IiMwMDAwMDAiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+PGcgdHJhbnNmb3JtPSJ0cmFuc2xh
dGUoNjYwLDI1MSkiPjxzd2l0Y2g+PGZvcmVpZ25PYmplY3QgcG9pbnRlci1ldmVudHM9ImFsbCIg
d2lkdGg9IjExNiIgaGVpZ2h0PSIxNSIgcmVxdWlyZWRGZWF0dXJlcz0iaHR0cDovL3d3dy53My5v
cmcvVFIvU1ZHMTEvZmVhdHVyZSNFeHRlbnNpYmlsaXR5Ij48ZGl2IHhtbG5zPSJodHRwOi8vd3d3
LnczLm9yZy8xOTk5L3hodG1sIiBzdHlsZT0iZGlzcGxheTogaW5saW5lLWJsb2NrOyBmb250LXNp
emU6IDEycHg7IGZvbnQtZmFtaWx5OiBIZWx2ZXRpY2E7IGNvbG9yOiByZ2IoMCwgMCwgMCk7IGxp
bmUtaGVpZ2h0OiAxLjI2OyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyB3aWR0aDogMTE2cHg7IHdoaXRl
LXNwYWNlOiBub3JtYWw7IHRleHQtYWxpZ246IGNlbnRlcjsiPlRlc3RzIFF1ZXVlPC9kaXY+PC9m
b3JlaWduT2JqZWN0Pjx0ZXh0IHg9IjU4IiB5PSIxNCIgZmlsbD0iIzAwMDAwMCIgdGV4dC1hbmNo
b3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMnB4IiBmb250LWZhbWlseT0iSGVsdmV0aWNhIj5bTm90
IHN1cHBvcnRlZCBieSB2aWV3ZXJdPC90ZXh0Pjwvc3dpdGNoPjwvZz48cGF0aCBkPSJNIDcxOCAx
MDggTCA3MTggMjIyIiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS1taXRlcmxp
bWl0PSIxMCIgcG9pbnRlci1ldmVudHM9Im5vbmUiLz48cGF0aCBkPSJNIDcxOCAyMjcgTCA3MTUg
MjIwIEwgNzE4IDIyMiBMIDcyMiAyMjAgWiIgZmlsbD0iIzAwMDAwMCIgc3Ryb2tlPSIjMDAwMDAw
IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+PHBhdGggZD0i
TSA0MjggOTcwIEwgNDI4IDk3MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2Ut
bWl0ZXJsaW1pdD0iMTAiIHBvaW50ZXItZXZlbnRzPSJub25lIi8+PC9nPjwvc3ZnPgpkaWZmIC0t
Z2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci9kb2NzL2Nv
bmYucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL2RvY3Mv
Y29uZi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMzllNWNjNGYw
ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMv
d3B0cnVubmVyL2RvY3MvY29uZi5weQpAQCAtMCwwICsxLDI2NyBAQAorIyAtKi0gY29kaW5nOiB1
dGYtOCAtKi0KKyMKKyMgd3B0cnVubmVyIGRvY3VtZW50YXRpb24gYnVpbGQgY29uZmlndXJhdGlv
biBmaWxlLCBjcmVhdGVkIGJ5CisjIHNwaGlueC1xdWlja3N0YXJ0IG9uIE1vbiBNYXkgMTkgMTg6
MTQ6MjAgMjAxNC4KKyMKKyMgVGhpcyBmaWxlIGlzIGV4ZWNmaWxlKClkIHdpdGggdGhlIGN1cnJl
bnQgZGlyZWN0b3J5IHNldCB0byBpdHMKKyMgY29udGFpbmluZyBkaXIuCisjCisjIE5vdGUgdGhh
dCBub3QgYWxsIHBvc3NpYmxlIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGFyZSBwcmVzZW50IGluIHRo
aXMKKyMgYXV0b2dlbmVyYXRlZCBmaWxlLgorIworIyBBbGwgY29uZmlndXJhdGlvbiB2YWx1ZXMg
aGF2ZSBhIGRlZmF1bHQ7IHZhbHVlcyB0aGF0IGFyZSBjb21tZW50ZWQgb3V0CisjIHNlcnZlIHRv
IHNob3cgdGhlIGRlZmF1bHQuCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworCisjIElmIGV4dGVu
c2lvbnMgKG9yIG1vZHVsZXMgdG8gZG9jdW1lbnQgd2l0aCBhdXRvZG9jKSBhcmUgaW4gYW5vdGhl
ciBkaXJlY3RvcnksCisjIGFkZCB0aGVzZSBkaXJlY3RvcmllcyB0byBzeXMucGF0aCBoZXJlLiBJ
ZiB0aGUgZGlyZWN0b3J5IGlzIHJlbGF0aXZlIHRvIHRoZQorIyBkb2N1bWVudGF0aW9uIHJvb3Qs
IHVzZSBvcy5wYXRoLmFic3BhdGggdG8gbWFrZSBpdCBhYnNvbHV0ZSwgbGlrZSBzaG93biBoZXJl
LgorI3N5cy5wYXRoLmluc2VydCgwLCBvcy5wYXRoLmFic3BhdGgoJy4nKSkKKworIyAtLSBHZW5l
cmFsIGNvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisKKyMgSWYgeW91ciBkb2N1bWVudGF0aW9uIG5lZWRzIGEgbWluaW1hbCBTcGhp
bnggdmVyc2lvbiwgc3RhdGUgaXQgaGVyZS4KKyNuZWVkc19zcGhpbnggPSAnMS4wJworCisjIEFk
ZCBhbnkgU3BoaW54IGV4dGVuc2lvbiBtb2R1bGUgbmFtZXMgaGVyZSwgYXMgc3RyaW5ncy4gVGhl
eSBjYW4gYmUKKyMgZXh0ZW5zaW9ucyBjb21pbmcgd2l0aCBTcGhpbnggKG5hbWVkICdzcGhpbngu
ZXh0LionKSBvciB5b3VyIGN1c3RvbQorIyBvbmVzLgorZXh0ZW5zaW9ucyA9IFsKKyAgICAnc3Bo
aW54LmV4dC5hdXRvZG9jJywKKyAgICAnc3BoaW54LmV4dC5pbnRlcnNwaGlueCcsCisgICAgJ3Nw
aGlueC5leHQudmlld2NvZGUnLAorXQorCisjIEFkZCBhbnkgcGF0aHMgdGhhdCBjb250YWluIHRl
bXBsYXRlcyBoZXJlLCByZWxhdGl2ZSB0byB0aGlzIGRpcmVjdG9yeS4KK3RlbXBsYXRlc19wYXRo
ID0gWydfdGVtcGxhdGVzJ10KKworIyBUaGUgc3VmZml4IG9mIHNvdXJjZSBmaWxlbmFtZXMuCitz
b3VyY2Vfc3VmZml4ID0gJy5yc3QnCisKKyMgVGhlIGVuY29kaW5nIG9mIHNvdXJjZSBmaWxlcy4K
KyNzb3VyY2VfZW5jb2RpbmcgPSAndXRmLTgtc2lnJworCisjIFRoZSBtYXN0ZXIgdG9jdHJlZSBk
b2N1bWVudC4KK21hc3Rlcl9kb2MgPSAnaW5kZXgnCisKKyMgR2VuZXJhbCBpbmZvcm1hdGlvbiBh
Ym91dCB0aGUgcHJvamVjdC4KK3Byb2plY3QgPSB1J3dwdHJ1bm5lcicKK2NvcHlyaWdodCA9IHUn
JworCisjIFRoZSB2ZXJzaW9uIGluZm8gZm9yIHRoZSBwcm9qZWN0IHlvdSdyZSBkb2N1bWVudGlu
ZywgYWN0cyBhcyByZXBsYWNlbWVudCBmb3IKKyMgfHZlcnNpb258IGFuZCB8cmVsZWFzZXwsIGFs
c28gdXNlZCBpbiB2YXJpb3VzIG90aGVyIHBsYWNlcyB0aHJvdWdob3V0IHRoZQorIyBidWlsdCBk
b2N1bWVudHMuCisjCisjIFRoZSBzaG9ydCBYLlkgdmVyc2lvbi4KK3ZlcnNpb24gPSAnMC4zJwor
IyBUaGUgZnVsbCB2ZXJzaW9uLCBpbmNsdWRpbmcgYWxwaGEvYmV0YS9yYyB0YWdzLgorcmVsZWFz
ZSA9ICcwLjMnCisKKyMgVGhlIGxhbmd1YWdlIGZvciBjb250ZW50IGF1dG9nZW5lcmF0ZWQgYnkg
U3BoaW54LiBSZWZlciB0byBkb2N1bWVudGF0aW9uCisjIGZvciBhIGxpc3Qgb2Ygc3VwcG9ydGVk
IGxhbmd1YWdlcy4KKyNsYW5ndWFnZSA9IE5vbmUKKworIyBUaGVyZSBhcmUgdHdvIG9wdGlvbnMg
Zm9yIHJlcGxhY2luZyB8dG9kYXl8OiBlaXRoZXIsIHlvdSBzZXQgdG9kYXkgdG8gc29tZQorIyBu
b24tZmFsc2UgdmFsdWUsIHRoZW4gaXQgaXMgdXNlZDoKKyN0b2RheSA9ICcnCisjIEVsc2UsIHRv
ZGF5X2ZtdCBpcyB1c2VkIGFzIHRoZSBmb3JtYXQgZm9yIGEgc3RyZnRpbWUgY2FsbC4KKyN0b2Rh
eV9mbXQgPSAnJUIgJWQsICVZJworCisjIExpc3Qgb2YgcGF0dGVybnMsIHJlbGF0aXZlIHRvIHNv
dXJjZSBkaXJlY3RvcnksIHRoYXQgbWF0Y2ggZmlsZXMgYW5kCisjIGRpcmVjdG9yaWVzIHRvIGln
bm9yZSB3aGVuIGxvb2tpbmcgZm9yIHNvdXJjZSBmaWxlcy4KK2V4Y2x1ZGVfcGF0dGVybnMgPSBb
J19idWlsZCddCisKKyMgVGhlIHJlU1QgZGVmYXVsdCByb2xlICh1c2VkIGZvciB0aGlzIG1hcmt1
cDogYHRleHRgKSB0byB1c2UgZm9yIGFsbAorIyBkb2N1bWVudHMuCisjZGVmYXVsdF9yb2xlID0g
Tm9uZQorCisjIElmIHRydWUsICcoKScgd2lsbCBiZSBhcHBlbmRlZCB0byA6ZnVuYzogZXRjLiBj
cm9zcy1yZWZlcmVuY2UgdGV4dC4KKyNhZGRfZnVuY3Rpb25fcGFyZW50aGVzZXMgPSBUcnVlCisK
KyMgSWYgdHJ1ZSwgdGhlIGN1cnJlbnQgbW9kdWxlIG5hbWUgd2lsbCBiZSBwcmVwZW5kZWQgdG8g
YWxsIGRlc2NyaXB0aW9uCisjIHVuaXQgdGl0bGVzIChzdWNoIGFzIC4uIGZ1bmN0aW9uOjopLgor
I2FkZF9tb2R1bGVfbmFtZXMgPSBUcnVlCisKKyMgSWYgdHJ1ZSwgc2VjdGlvbmF1dGhvciBhbmQg
bW9kdWxlYXV0aG9yIGRpcmVjdGl2ZXMgd2lsbCBiZSBzaG93biBpbiB0aGUKKyMgb3V0cHV0LiBU
aGV5IGFyZSBpZ25vcmVkIGJ5IGRlZmF1bHQuCisjc2hvd19hdXRob3JzID0gRmFsc2UKKworIyBU
aGUgbmFtZSBvZiB0aGUgUHlnbWVudHMgKHN5bnRheCBoaWdobGlnaHRpbmcpIHN0eWxlIHRvIHVz
ZS4KK3B5Z21lbnRzX3N0eWxlID0gJ3NwaGlueCcKKworIyBBIGxpc3Qgb2YgaWdub3JlZCBwcmVm
aXhlcyBmb3IgbW9kdWxlIGluZGV4IHNvcnRpbmcuCisjbW9kaW5kZXhfY29tbW9uX3ByZWZpeCA9
IFtdCisKKyMgSWYgdHJ1ZSwga2VlcCB3YXJuaW5ncyBhcyAic3lzdGVtIG1lc3NhZ2UiIHBhcmFn
cmFwaHMgaW4gdGhlIGJ1aWx0IGRvY3VtZW50cy4KKyNrZWVwX3dhcm5pbmdzID0gRmFsc2UKKwor
CisjIC0tIE9wdGlvbnMgZm9yIEhUTUwgb3V0cHV0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBUaGUgdGhlbWUgdG8gdXNlIGZvciBIVE1MIGFuZCBI
VE1MIEhlbHAgcGFnZXMuICBTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yCisjIGEgbGlzdCBvZiBi
dWlsdGluIHRoZW1lcy4KK2h0bWxfdGhlbWUgPSAnZGVmYXVsdCcKKworIyBUaGVtZSBvcHRpb25z
IGFyZSB0aGVtZS1zcGVjaWZpYyBhbmQgY3VzdG9taXplIHRoZSBsb29rIGFuZCBmZWVsIG9mIGEg
dGhlbWUKKyMgZnVydGhlci4gIEZvciBhIGxpc3Qgb2Ygb3B0aW9ucyBhdmFpbGFibGUgZm9yIGVh
Y2ggdGhlbWUsIHNlZSB0aGUKKyMgZG9jdW1lbnRhdGlvbi4KKyNodG1sX3RoZW1lX29wdGlvbnMg
PSB7fQorCisjIEFkZCBhbnkgcGF0aHMgdGhhdCBjb250YWluIGN1c3RvbSB0aGVtZXMgaGVyZSwg
cmVsYXRpdmUgdG8gdGhpcyBkaXJlY3RvcnkuCisjaHRtbF90aGVtZV9wYXRoID0gW10KKworIyBU
aGUgbmFtZSBmb3IgdGhpcyBzZXQgb2YgU3BoaW54IGRvY3VtZW50cy4gIElmIE5vbmUsIGl0IGRl
ZmF1bHRzIHRvCisjICI8cHJvamVjdD4gdjxyZWxlYXNlPiBkb2N1bWVudGF0aW9uIi4KKyNodG1s
X3RpdGxlID0gTm9uZQorCisjIEEgc2hvcnRlciB0aXRsZSBmb3IgdGhlIG5hdmlnYXRpb24gYmFy
LiAgRGVmYXVsdCBpcyB0aGUgc2FtZSBhcyBodG1sX3RpdGxlLgorI2h0bWxfc2hvcnRfdGl0bGUg
PSBOb25lCisKKyMgVGhlIG5hbWUgb2YgYW4gaW1hZ2UgZmlsZSAocmVsYXRpdmUgdG8gdGhpcyBk
aXJlY3RvcnkpIHRvIHBsYWNlIGF0IHRoZSB0b3AKKyMgb2YgdGhlIHNpZGViYXIuCisjaHRtbF9s
b2dvID0gTm9uZQorCisjIFRoZSBuYW1lIG9mIGFuIGltYWdlIGZpbGUgKHdpdGhpbiB0aGUgc3Rh
dGljIHBhdGgpIHRvIHVzZSBhcyBmYXZpY29uIG9mIHRoZQorIyBkb2NzLiAgVGhpcyBmaWxlIHNo
b3VsZCBiZSBhIFdpbmRvd3MgaWNvbiBmaWxlICguaWNvKSBiZWluZyAxNngxNiBvciAzMngzMgor
IyBwaXhlbHMgbGFyZ2UuCisjaHRtbF9mYXZpY29uID0gTm9uZQorCisjIEFkZCBhbnkgcGF0aHMg
dGhhdCBjb250YWluIGN1c3RvbSBzdGF0aWMgZmlsZXMgKHN1Y2ggYXMgc3R5bGUgc2hlZXRzKSBo
ZXJlLAorIyByZWxhdGl2ZSB0byB0aGlzIGRpcmVjdG9yeS4gVGhleSBhcmUgY29waWVkIGFmdGVy
IHRoZSBidWlsdGluIHN0YXRpYyBmaWxlcywKKyMgc28gYSBmaWxlIG5hbWVkICJkZWZhdWx0LmNz
cyIgd2lsbCBvdmVyd3JpdGUgdGhlIGJ1aWx0aW4gImRlZmF1bHQuY3NzIi4KK2h0bWxfc3RhdGlj
X3BhdGggPSBbJ19zdGF0aWMnXQorCisjIEFkZCBhbnkgZXh0cmEgcGF0aHMgdGhhdCBjb250YWlu
IGN1c3RvbSBmaWxlcyAoc3VjaCBhcyByb2JvdHMudHh0IG9yCisjIC5odGFjY2VzcykgaGVyZSwg
cmVsYXRpdmUgdG8gdGhpcyBkaXJlY3RvcnkuIFRoZXNlIGZpbGVzIGFyZSBjb3BpZWQKKyMgZGly
ZWN0bHkgdG8gdGhlIHJvb3Qgb2YgdGhlIGRvY3VtZW50YXRpb24uCisjaHRtbF9leHRyYV9wYXRo
ID0gW10KKworIyBJZiBub3QgJycsIGEgJ0xhc3QgdXBkYXRlZCBvbjonIHRpbWVzdGFtcCBpcyBp
bnNlcnRlZCBhdCBldmVyeSBwYWdlIGJvdHRvbSwKKyMgdXNpbmcgdGhlIGdpdmVuIHN0cmZ0aW1l
IGZvcm1hdC4KKyNodG1sX2xhc3RfdXBkYXRlZF9mbXQgPSAnJWIgJWQsICVZJworCisjIElmIHRy
dWUsIFNtYXJ0eVBhbnRzIHdpbGwgYmUgdXNlZCB0byBjb252ZXJ0IHF1b3RlcyBhbmQgZGFzaGVz
IHRvCisjIHR5cG9ncmFwaGljYWxseSBjb3JyZWN0IGVudGl0aWVzLgorI2h0bWxfdXNlX3NtYXJ0
eXBhbnRzID0gVHJ1ZQorCisjIEN1c3RvbSBzaWRlYmFyIHRlbXBsYXRlcywgbWFwcyBkb2N1bWVu
dCBuYW1lcyB0byB0ZW1wbGF0ZSBuYW1lcy4KKyNodG1sX3NpZGViYXJzID0ge30KKworIyBBZGRp
dGlvbmFsIHRlbXBsYXRlcyB0aGF0IHNob3VsZCBiZSByZW5kZXJlZCB0byBwYWdlcywgbWFwcyBw
YWdlIG5hbWVzIHRvCisjIHRlbXBsYXRlIG5hbWVzLgorI2h0bWxfYWRkaXRpb25hbF9wYWdlcyA9
IHt9CisKKyMgSWYgZmFsc2UsIG5vIG1vZHVsZSBpbmRleCBpcyBnZW5lcmF0ZWQuCisjaHRtbF9k
b21haW5faW5kaWNlcyA9IFRydWUKKworIyBJZiBmYWxzZSwgbm8gaW5kZXggaXMgZ2VuZXJhdGVk
LgorI2h0bWxfdXNlX2luZGV4ID0gVHJ1ZQorCisjIElmIHRydWUsIHRoZSBpbmRleCBpcyBzcGxp
dCBpbnRvIGluZGl2aWR1YWwgcGFnZXMgZm9yIGVhY2ggbGV0dGVyLgorI2h0bWxfc3BsaXRfaW5k
ZXggPSBGYWxzZQorCisjIElmIHRydWUsIGxpbmtzIHRvIHRoZSByZVNUIHNvdXJjZXMgYXJlIGFk
ZGVkIHRvIHRoZSBwYWdlcy4KKyNodG1sX3Nob3dfc291cmNlbGluayA9IFRydWUKKworIyBJZiB0
cnVlLCAiQ3JlYXRlZCB1c2luZyBTcGhpbngiIGlzIHNob3duIGluIHRoZSBIVE1MIGZvb3Rlci4g
RGVmYXVsdCBpcyBUcnVlLgorI2h0bWxfc2hvd19zcGhpbnggPSBUcnVlCisKKyMgSWYgdHJ1ZSwg
IihDKSBDb3B5cmlnaHQgLi4uIiBpcyBzaG93biBpbiB0aGUgSFRNTCBmb290ZXIuIERlZmF1bHQg
aXMgVHJ1ZS4KKyNodG1sX3Nob3dfY29weXJpZ2h0ID0gVHJ1ZQorCisjIElmIHRydWUsIGFuIE9w
ZW5TZWFyY2ggZGVzY3JpcHRpb24gZmlsZSB3aWxsIGJlIG91dHB1dCwgYW5kIGFsbCBwYWdlcyB3
aWxsCisjIGNvbnRhaW4gYSA8bGluaz4gdGFnIHJlZmVycmluZyB0byBpdC4gIFRoZSB2YWx1ZSBv
ZiB0aGlzIG9wdGlvbiBtdXN0IGJlIHRoZQorIyBiYXNlIFVSTCBmcm9tIHdoaWNoIHRoZSBmaW5p
c2hlZCBIVE1MIGlzIHNlcnZlZC4KKyNodG1sX3VzZV9vcGVuc2VhcmNoID0gJycKKworIyBUaGlz
IGlzIHRoZSBmaWxlIG5hbWUgc3VmZml4IGZvciBIVE1MIGZpbGVzIChlLmcuICIueGh0bWwiKS4K
KyNodG1sX2ZpbGVfc3VmZml4ID0gTm9uZQorCisjIE91dHB1dCBmaWxlIGJhc2UgbmFtZSBmb3Ig
SFRNTCBoZWxwIGJ1aWxkZXIuCitodG1saGVscF9iYXNlbmFtZSA9ICd3cHRydW5uZXJkb2MnCisK
KworIyAtLSBPcHRpb25zIGZvciBMYVRlWCBvdXRwdXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2xhdGV4X2VsZW1lbnRzID0geworIyBUaGUgcGFwZXIg
c2l6ZSAoJ2xldHRlcnBhcGVyJyBvciAnYTRwYXBlcicpLgorIydwYXBlcnNpemUnOiAnbGV0dGVy
cGFwZXInLAorCisjIFRoZSBmb250IHNpemUgKCcxMHB0JywgJzExcHQnIG9yICcxMnB0JykuCisj
J3BvaW50c2l6ZSc6ICcxMHB0JywKKworIyBBZGRpdGlvbmFsIHN0dWZmIGZvciB0aGUgTGFUZVgg
cHJlYW1ibGUuCisjJ3ByZWFtYmxlJzogJycsCit9CisKKyMgR3JvdXBpbmcgdGhlIGRvY3VtZW50
IHRyZWUgaW50byBMYVRlWCBmaWxlcy4gTGlzdCBvZiB0dXBsZXMKKyMgKHNvdXJjZSBzdGFydCBm
aWxlLCB0YXJnZXQgbmFtZSwgdGl0bGUsCisjICBhdXRob3IsIGRvY3VtZW50Y2xhc3MgW2hvd3Rv
LCBtYW51YWwsIG9yIG93biBjbGFzc10pLgorbGF0ZXhfZG9jdW1lbnRzID0gWworICAoJ2luZGV4
JywgJ3dwdHJ1bm5lci50ZXgnLCB1J3dwdHJ1bm5lciBEb2N1bWVudGF0aW9uJywKKyAgIHUnSmFt
ZXMgR3JhaGFtJywgJ21hbnVhbCcpLAorXQorCisjIFRoZSBuYW1lIG9mIGFuIGltYWdlIGZpbGUg
KHJlbGF0aXZlIHRvIHRoaXMgZGlyZWN0b3J5KSB0byBwbGFjZSBhdCB0aGUgdG9wIG9mCisjIHRo
ZSB0aXRsZSBwYWdlLgorI2xhdGV4X2xvZ28gPSBOb25lCisKKyMgRm9yICJtYW51YWwiIGRvY3Vt
ZW50cywgaWYgdGhpcyBpcyB0cnVlLCB0aGVuIHRvcGxldmVsIGhlYWRpbmdzIGFyZSBwYXJ0cywK
KyMgbm90IGNoYXB0ZXJzLgorI2xhdGV4X3VzZV9wYXJ0cyA9IEZhbHNlCisKKyMgSWYgdHJ1ZSwg
c2hvdyBwYWdlIHJlZmVyZW5jZXMgYWZ0ZXIgaW50ZXJuYWwgbGlua3MuCisjbGF0ZXhfc2hvd19w
YWdlcmVmcyA9IEZhbHNlCisKKyMgSWYgdHJ1ZSwgc2hvdyBVUkwgYWRkcmVzc2VzIGFmdGVyIGV4
dGVybmFsIGxpbmtzLgorI2xhdGV4X3Nob3dfdXJscyA9IEZhbHNlCisKKyMgRG9jdW1lbnRzIHRv
IGFwcGVuZCBhcyBhbiBhcHBlbmRpeCB0byBhbGwgbWFudWFscy4KKyNsYXRleF9hcHBlbmRpY2Vz
ID0gW10KKworIyBJZiBmYWxzZSwgbm8gbW9kdWxlIGluZGV4IGlzIGdlbmVyYXRlZC4KKyNsYXRl
eF9kb21haW5faW5kaWNlcyA9IFRydWUKKworCisjIC0tIE9wdGlvbnMgZm9yIG1hbnVhbCBwYWdl
IG91dHB1dCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBPbmUg
ZW50cnkgcGVyIG1hbnVhbCBwYWdlLiBMaXN0IG9mIHR1cGxlcworIyAoc291cmNlIHN0YXJ0IGZp
bGUsIG5hbWUsIGRlc2NyaXB0aW9uLCBhdXRob3JzLCBtYW51YWwgc2VjdGlvbikuCittYW5fcGFn
ZXMgPSBbCisgICAgKCdpbmRleCcsICd3cHRydW5uZXInLCB1J3dwdHJ1bm5lciBEb2N1bWVudGF0
aW9uJywKKyAgICAgW3UnSmFtZXMgR3JhaGFtJ10sIDEpCitdCisKKyMgSWYgdHJ1ZSwgc2hvdyBV
UkwgYWRkcmVzc2VzIGFmdGVyIGV4dGVybmFsIGxpbmtzLgorI21hbl9zaG93X3VybHMgPSBGYWxz
ZQorCisKKyMgLS0gT3B0aW9ucyBmb3IgVGV4aW5mbyBvdXRwdXQgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIEdyb3VwaW5nIHRoZSBkb2N1bWVudCB0cmVl
IGludG8gVGV4aW5mbyBmaWxlcy4gTGlzdCBvZiB0dXBsZXMKKyMgKHNvdXJjZSBzdGFydCBmaWxl
LCB0YXJnZXQgbmFtZSwgdGl0bGUsIGF1dGhvciwKKyMgIGRpciBtZW51IGVudHJ5LCBkZXNjcmlw
dGlvbiwgY2F0ZWdvcnkpCit0ZXhpbmZvX2RvY3VtZW50cyA9IFsKKyAgKCdpbmRleCcsICd3cHRy
dW5uZXInLCB1J3dwdHJ1bm5lciBEb2N1bWVudGF0aW9uJywKKyAgIHUnSmFtZXMgR3JhaGFtJywg
J3dwdHJ1bm5lcicsICdPbmUgbGluZSBkZXNjcmlwdGlvbiBvZiBwcm9qZWN0LicsCisgICAnTWlz
Y2VsbGFuZW91cycpLAorXQorCisjIERvY3VtZW50cyB0byBhcHBlbmQgYXMgYW4gYXBwZW5kaXgg
dG8gYWxsIG1hbnVhbHMuCisjdGV4aW5mb19hcHBlbmRpY2VzID0gW10KKworIyBJZiBmYWxzZSwg
bm8gbW9kdWxlIGluZGV4IGlzIGdlbmVyYXRlZC4KKyN0ZXhpbmZvX2RvbWFpbl9pbmRpY2VzID0g
VHJ1ZQorCisjIEhvdyB0byBkaXNwbGF5IFVSTCBhZGRyZXNzZXM6ICdmb290bm90ZScsICdubycs
IG9yICdpbmxpbmUnLgorI3RleGluZm9fc2hvd191cmxzID0gJ2Zvb3Rub3RlJworCisjIElmIHRy
dWUsIGRvIG5vdCBnZW5lcmF0ZSBhIEBkZXRhaWxtZW51IGluIHRoZSAiVG9wIiBub2RlJ3MgbWVu
dS4KKyN0ZXhpbmZvX25vX2RldGFpbG1lbnUgPSBGYWxzZQorCisKKyMgRXhhbXBsZSBjb25maWd1
cmF0aW9uIGZvciBpbnRlcnNwaGlueDogcmVmZXIgdG8gdGhlIFB5dGhvbiBzdGFuZGFyZCBsaWJy
YXJ5LgoraW50ZXJzcGhpbnhfbWFwcGluZyA9IHsncHl0aG9uJzogKCdodHRwOi8vZG9jcy5weXRo
b24ub3JnLycsIE5vbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAnbW96bG9nJzogKCdodHRw
Oi8vbW96YmFzZS5yZWFkdGhlZG9jcy5vcmcvZW4vbGF0ZXN0LycsIE5vbmUpfQpkaWZmIC0tZ2l0
IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci9kb2NzL2Rlc2ln
bi5yc3QgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL2RvY3Mv
ZGVzaWduLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYmYxMDhh
MDA4N2QKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9v
bHMvd3B0cnVubmVyL2RvY3MvZGVzaWduLnJzdApAQCAtMCwwICsxLDEwNiBAQAord3B0cnVubmVy
IERlc2lnbgorPT09PT09PT09PT09PT09PQorCitUaGUgZGVzaWduIG9mIHdwdHJ1bm5lciBpcyBp
bnRlbmRlZCB0byBtZWV0IHRoZSBmb2xsb3dpbmcKK3JlcXVpcmVtZW50czoKKworICogUG9zc2li
bGUgdG8gcnVuIHRlc3RzIGZyb20gVzNDIHdlYi1wbGF0Zm9ybS10ZXN0cy4KKworICogVGVzdHMg
c2hvdWxkIGJlIHJ1biBhcyBmYXN0IGFzIHBvc3NpYmxlLiBJbiBwYXJ0aWN1bGFyIGl0IHNob3Vs
ZAorICAgbm90IGJlIG5lY2Vzc2FyeSB0byByZXN0YXJ0IHRoZSBicm93c2VyIGJldHdlZW4gdGVz
dHMsIG9yIHNpbWlsYXIuCisKKyAqIEFzIGZhciBhcyBwb3NzaWJsZSwgdGhlIHRlc3RzIHNob3Vs
ZCBydW4gaW4gYSAibm9ybWFsIiBicm93c2VyIGFuZAorICAgYnJvd3NpbmcgY29udGV4dC4gSW4g
cGFydGljdWxhciBtYW55IHRlc3RzIGFzc3VtZSB0aGF0IHRoZXkgYXJlCisgICBydW5uaW5nIGlu
IGEgdG9wLWxldmVsIGJyb3dzaW5nIGNvbnRleHQsIHNvIHdlIG11c3QgYXZvaWQgdGhlIHVzZQor
ICAgb2YgYW4gYGBpZnJhbWVgYCB0ZXN0IGNvbnRhaW5lci4KKworICogSXQgbXVzdCBiZSBwb3Nz
aWJsZSB0byBkZWFsIHdpdGggYWxsIGtpbmRzIG9mIGJlaGF2aW91ciBvZiB0aGUKKyAgIGJyb3dz
ZXIgcnVuZGVyIHRlc3QsIGZvciBleGFtcGxlLCBjcmFzaGluZywgaGFuZ2luZywgZXRjLgorCisg
KiBJdCBzaG91bGQgYmUgcG9zc2libGUgdG8gYWRkIHN1cHBvcnQgZm9yIG5ldyBwbGF0Zm9ybXMg
YW5kIGJyb3dzZXJzCisgICB3aXRoIG1pbmltYWwgY29kZSBjaGFuZ2VzLgorCisgKiBJdCBtdXN0
IGJlIHBvc3NpYmxlIHRvIHJ1biB0ZXN0cyBpbiBwYXJhbGxlbCB0byBmdXJ0aGVyIGltcHJvdmUK
KyAgIHBlcmZvcm1hbmNlLgorCisgKiBUZXN0IG91dHB1dCBtdXN0IGJlIGluIGEgbWFjaGluZSBy
ZWFkYWJsZSBmb3JtLgorCitBcmNoaXRlY3R1cmUKKy0tLS0tLS0tLS0tLQorCitJbiBvcmRlciB0
byBtZWV0IHRoZSBhYm92ZSByZXF1aXJlbWVudHMsIHdwdHJ1bm5lciBpcyBkZXNpZ25lZCB0bwor
cHVzaCBhcyBtdWNoIG9mIHRoZSB0ZXN0IHNjaGVkdWxpbmcgYXMgcG9zc2libGUgaW50byB0aGUg
aGFybmVzcy4gVGhpcworYWxsb3dzIHRoZSBoYXJuZXNzIHRvIG1vbml0b3IgdGhlIHN0YXRlIG9m
IHRoZSBicm93c2VyIGFuZCBwZXJmb3JtCithcHByb3ByaWF0ZSBhY3Rpb24gaWYgaXQgZ2V0cyBp
bnRvIGFuIHVud2FudGVkIHN0YXRlIGUuZy4ga2lsbCB0aGUKK2Jyb3dzZXIgaWYgaXQgYXBwZWFy
cyB0byBiZSBodW5nLgorCitUaGUgaGFybmVzcyB3aWxsIHR5cGljYWxseSBjb21tdW5pY2F0ZSB3
aXRoIHRoZSBicm93c2VyIHZpYSBzb21lIHJlbW90ZQorY29udHJvbCBwcm90b2NvbCBzdWNoIGFz
IFdlYkRyaXZlci4gSG93ZXZlciBmb3IgYnJvd3NlcnMgd2hlcmUgbm8gc3VjaAorcHJvdG9jb2wg
aXMgc3VwcG9ydGVkLCBvdGhlciBpbXBsZW1lbnRhdGlvbiBzdHJhdGVnaWVzIGFyZSBwb3NzaWJs
ZSwKK3R5cGljYWxseSBhdCB0aGUgZXhwZW5zZSBvZiBzcGVlZC4KKworVGhlIG92ZXJhbGwgYXJj
aGl0ZWN0dXJlIG9mIHdwdHJ1bm5lciBpcyBzaG93biBpbiB0aGUgZGlhZ3JhbSBiZWxvdzoKKwor
Li4gaW1hZ2U6OiBhcmNoaXRlY3R1cmUuc3ZnCisKK1RoZSBtYWluIGVudHJ5IHBvaW50IHRvIHRo
ZSBjb2RlIGlzIDpweTpmdW5jOmBydW5fdGVzdHNgIGluCitgYHdwdHJ1bm5lci5weWBgLiBUaGlz
IGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIHRoZSB0ZXN0CitlbnZpcm9ubWVudCwgbG9h
ZGluZyB0aGUgbGlzdCBvZiB0ZXN0cyB0byBiZSBleGVjdXRlZCwgYW5kIGludm9raW5nCit0aGUg
cmVtYWluZGVyIG9mIHRoZSBjb2RlIHRvIGFjdHVhbGx5IGV4ZWN1dGUgc29tZSB0ZXN0cy4KKwor
VGhlIHRlc3QgZW52aXJvbm1lbnQgaXMgZW5jYXBzdWxhdGVkIGluIHRoZQorOnB5OmNsYXNzOmBU
ZXN0RW52aXJvbm1lbnRgIGNsYXNzLiBUaGlzIGRlZmVycyB0byBjb2RlIGluCitgYHdlYi1wbGF0
Zm9ybS10ZXN0c2BgIHdoaWNoIGFjdHVhbGx5IHN0YXJ0cyB0aGUgcmVxdWlyZWQgc2VydmVycyB0
bworcnVuIHRoZSB0ZXN0cy4KKworVGhlIHNldCBvZiB0ZXN0cyB0byBydW4gaXMgZGVmaW5lZCBi
eSB0aGUKKzpweTpjbGFzczpgVGVzdExvYWRlcmAuIFRoaXMgaXMgY29uc3RydWN0ZWQgd2l0aCBh
Cis6cHk6Y2xhc3M6YFRlc3RGaWx0ZXJgIChub3Qgc2hvd24pLCB3aGljaCB0YWtlcyBhbnkgZmls
dGVyIGFyZ3VtZW50cworZnJvbSB0aGUgY29tbWFuZCBsaW5lIHRvIHJlc3RyaWN0IHRoZSBzZXQg
b2YgdGVzdHMgdGhhdCB3aWxsIGJlCitydW4uIFRoZSA6cHk6Y2xhc3M6YFRlc3RMb2FkZXJgIHJl
YWRzIGJvdGggdGhlIGBgd2ViLXBsYXRmb3JtLXRlc3RzYGAKK0pTT04gbWFuaWZlc3QgYW5kIHRo
ZSBleHBlY3RhdGlvbiBkYXRhIHN0b3JlZCBpbiBpbmkgZmlsZXMgYW5kCitwcm9kdWNlcyBhIDpw
eTpjbGFzczpgbXVsdGlwcm9jZXNzaW5nLlF1ZXVlYCBvZiB0ZXN0cyB0byBydW4sIGFuZAordGhl
aXIgZXhwZWN0ZWQgcmVzdWx0cy4KKworQWN0dWFsbHkgcnVubmluZyB0aGUgdGVzdHMgaGFwcGVu
cyB0aHJvdWdoIHRoZQorOnB5OmNsYXNzOmBNYW5hZ2VyR3JvdXBgIG9iamVjdC4gVGhpcyB0YWtl
cyB0aGUgOnB5OmNsYXNzOmBRdWV1ZWAgb2YKK3Rlc3RzIHRvIGJlIHJ1biBhbmQgc3RhcnRzIGEg
OnB5OmNsYXNzOmB0ZXN0cnVubmVyLlRlc3RSdW5uZXJNYW5hZ2VyYCBmb3IgZWFjaAoraW5zdGFu
Y2Ugb2YgdGhlIGJyb3dzZXIgdW5kZXIgdGVzdCB0aGF0IHdpbGwgYmUgc3RhcnRlZC4gVGhlc2UK
KzpweTpjbGFzczpgVGVzdFJ1bm5lck1hbmFnZXJgIGluc3RhbmNlcyBhcmUgZWFjaCBzdGFydGVk
IGluIHRoZWlyIG93bgordGhyZWFkLgorCitBIDpweTpjbGFzczpgVGVzdFJ1bm5lck1hbmFnZXJg
IGNvb3JkaW5hdGVzIHN0YXJ0aW5nIHRoZSBwcm9kdWN0IHVuZGVyCit0ZXN0LCBhbmQgb3V0cHV0
dGluZyByZXN1bHRzIGZyb20gdGhlIHRlc3QuIEluIHRoZSBjYXNlIHRoYXQgdGhlIHRlc3QKK2hh
cyB0aW1lZCBvdXQgb3IgdGhlIGJyb3dzZXIgaGFzIGNyYXNoZWQsIGl0IGhhcyB0byByZXN0YXJ0
IHRoZQorYnJvd3NlciB0byBlbnN1cmUgdGhlIHRlc3QgcnVuIGNhbiBjb250aW51ZS4gVGhlIGZ1
bmN0aW9uYWxpdHkgZm9yCitpbml0aWFsaXNpbmcgdGhlIGJyb3dzZXIgdW5kZXIgdGVzdCwgYW5k
IHByb2JpbmcgaXRzIHN0YXRlCisoZS5nLiB3aGV0aGVyIHRoZSBwcm9jZXNzIGlzIHN0aWxsIGFs
aXZlKSBpcyBpbXBsZW1lbnRlZCB0aHJvdWdoIGEKKzpweTpjbGFzczpgQnJvd3NlcmAgb2JqZWN0
LiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGNsYXNzIG11c3QgYmUKK3Byb3ZpZGVkIGZvciBl
YWNoIHByb2R1Y3QgdGhhdCBpcyBzdXBwb3J0ZWQuCisKK1RoZSBmdW5jdGlvbmFsaXR5IGZvciBh
Y3R1YWxseSBydW5uaW5nIHRoZSB0ZXN0cyBpcyBwcm92aWRlZCBieSBhCis6cHk6Y2xhc3M6YFRl
c3RSdW5uZXJgIG9iamVjdC4gOnB5OmNsYXNzOmBUZXN0UnVubmVyYCBpbnN0YW5jZXMgYXJlCity
dW4gaW4gdGhlaXIgb3duIGNoaWxkIHByb2Nlc3MgY3JlYXRlZCB3aXRoIHRoZQorOnB5Om1vZDpg
bXVsdGlwcm9jZXNzaW5nYCBtb2R1bGUuIFRoaXMgYWxsb3dzIHRoZW0gdG8gcnVuIGNvbmN1cnJl
bnRseQorYW5kIHRvIGJlIGtpbGxlZCBhbmQgcmVzdGFydGVkIGFzIHJlcXVpcmVkLiBDb21tdW5p
Y2F0aW9uIGJldHdlZW4gdGhlCis6cHk6Y2xhc3M6YFRlc3RSdW5uZXJNYW5hZ2VyYCBhbmQgdGhl
IDpweTpjbGFzczpgVGVzdFJ1bm5lcmAgaXMKK3Byb3ZpZGVkIGJ5IGEgcGFpciBvZiBxdWV1ZXMs
IG9uZSBmb3Igc2VuZGluZyBtZXNzYWdlcyBpbiBlYWNoCitkaXJlY3Rpb24uIEluIHBhcnRpY3Vs
YXIgdGVzdCByZXN1bHRzIGFyZSBzZW50IGZyb20gdGhlCis6cHk6Y2xhc3M6YFRlc3RSdW5uZXJg
IHRvIHRoZSA6cHk6Y2xhc3M6YFRlc3RSdW5uZXJNYW5hZ2VyYCB1c2luZyBvbmUKK29mIHRoZXNl
IHF1ZXVlcy4KKworVGhlIDpweTpjbGFzczpgVGVzdFJ1bm5lcmAgb2JqZWN0IGlzIGdlbmVyaWMg
aW4gdGhhdCB0aGUgc2FtZQorOnB5OmNsYXNzOmBUZXN0UnVubmVyYCBpcyB1c2VkIHJlZ2FyZGxl
c3Mgb2YgdGhlIHByb2R1Y3QgdW5kZXIKK3Rlc3QuIEhvd2V2ZXIgdGhlIGRldGFpbHMgb2YgaG93
IHRvIHJ1biB0aGUgdGVzdCBtYXkgdmFyeSBncmVhdGx5IHdpdGgKK3RoZSBwcm9kdWN0IHNpbmNl
IGRpZmZlcmVudCBwcm9kdWN0cyBzdXBwb3J0IGRpZmZlcmVudCByZW1vdGUgY29udHJvbAorcHJv
dG9jb2xzIChvciBub25lIGF0IGFsbCkuIFRoZXNlIHByb3RvY29sLXNwZWNpZmljIHBhcnRzIGFy
ZSBwbGFjZWQKK2luIHRoZSA6cHk6Y2xhc3M6YEV4ZWN1dG9yYCBvYmplY3QuIFRoZXJlIGlzIHR5
cGljYWxseSBhIGRpZmZlcmVudAorOnB5OmNsYXNzOmBFeGVjdXRvcmAgY2xhc3MgZm9yIGVhY2gg
Y29tYmluYXRpb24gb2YgY29udHJvbCBwcm90b2NvbAorYW5kIHRlc3QgdHlwZS4gVGhlIDpweTpj
bGFzczpgVGVzdFJ1bm5lcmAgaXMgcmVzcG9uc2libGUgZm9yIHB1bGxpbmcKK2VhY2ggdGVzdCBv
ZmYgdGhlIDpweTpjbGFzczpgUXVldWVgIG9mIHRlc3RzIGFuZCBwYXNzaW5nIGl0IGRvd24gdG8K
K3RoZSA6cHk6Y2xhc3M6YEV4ZWN1dG9yYC4KKworVGhlIGV4ZWN1dG9yIG9mdGVuIHJlcXVpcmVz
IGFjY2VzcyB0byBkZXRhaWxzIG9mIHRoZSBwYXJ0aWN1bGFyCiticm93c2VyIGluc3RhbmNlIHRo
YXQgaXQgaXMgdGVzdGluZyBzbyB0aGF0IGl0IGtub3dzIGUuZy4gd2hpY2ggcG9ydAordG8gY29u
bmVjdCB0byB0byBzZW5kIGNvbW1hbmRzIHRvIHRoZSBicm93c2VyLiBUaGVzZSBkZXRhaWxzIGFy
ZQorZW5jYXBzdWxhdGVkIGluIHRoZSA6cHk6Y2xhc3M6YEV4ZWN1dG9yQnJvd3NlcmAgY2xhc3Mu
CmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVy
L2RvY3MvZXhwZWN0YXRpb24ucnN0IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xz
L3dwdHJ1bm5lci9kb2NzL2V4cGVjdGF0aW9uLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uNmEwYzc3Njg0YTMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJU
ZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL2RvY3MvZXhwZWN0YXRpb24ucnN0CkBA
IC0wLDAgKzEsMjQ4IEBACitFeHBlY3RhdGlvbiBEYXRhCis9PT09PT09PT09PT09PT09CisKK0lu
dHJvZHVjdGlvbgorLS0tLS0tLS0tLS0tCisKK0ZvciB1c2UgaW4gY29udGludW91cyBpbnRlZ3Jh
dGlvbiBzeXN0ZW1zLCBhbmQgb3RoZXIgc2NlbmFyaW9zIHdoZXJlCityZWdyZXNzaW9uIHRyYWNr
aW5nIGlzIHJlcXVpcmVkLCB3cHRydW5uZXIgc3VwcG9ydHMgc3RvcmluZyBhbmQKK2xvYWRpbmcg
dGhlIGV4cGVjdGVkIHJlc3VsdCBvZiBlYWNoIHRlc3QgaW4gYSB0ZXN0IHJ1bi4gVHlwaWNhbGx5
Cit0aGVzZSBleHBlY3RlZCByZXN1bHRzIHdpbGwgaW5pdGlhbGx5IGJlIGdlbmVyYXRlZCBieSBy
dW5uaW5nIHRoZQordGVzdHN1aXRlIGluIGEgYmFzZWxpbmUgYnVpbGQuIFRoZXkgbWF5IHRoZW4g
YmUgZWRpdGVkIGJ5IGh1bWFucyBhcworbmV3IGZlYXR1cmVzIGFyZSBhZGRlZCB0byB0aGUgcHJv
ZHVjdCB0aGF0IGNoYW5nZSB0aGUgZXhwZWN0ZWQKK3Jlc3VsdHMuIFRoZSBleHBlY3RlZCByZXN1
bHRzIG1heSBhbHNvIHZhcnkgZm9yIGEgc2luZ2xlIHByb2R1Y3QKK2RlcGVuZGluZyBvbiB0aGUg
cGxhdGZvcm0gb24gd2hpY2ggaXQgaXMgcnVuLiBUaGVyZWZvcmUsIHRoZSByYXcKK3N0cnVjdHVy
ZWQgbG9nIGRhdGEgaXMgbm90IGEgc3VpdGFibGUgZm9ybWF0IGZvciBzdG9yaW5nIHRoZXNlCitm
aWxlcy4gSW5zdGVhZCBzb21ldGhpbmcgaXMgcmVxdWlyZWQgdGhhdCBpczoKKworICogSHVtYW4g
cmVhZGFibGUKKworICogSHVtYW4gZWRpdGFibGUKKworICogTWFjaGluZSByZWFkYWJsZSAvIHdy
aXRhYmxlCisKKyAqIENhcGFibGUgb2Ygc3RvcmluZyB0ZXN0IGlkIC8gcmVzdWx0IHBhaXJzCisK
KyAqIFN1aXRhYmxlIGZvciBzdG9yaW5nIGluIGEgdmVyc2lvbiBjb250cm9sIHN5c3RlbSAoaS5l
LiB0ZXh0LWJhc2VkKQorCitUaGUgbmVlZCBmb3IgZGlmZmVyZW50IHJlc3VsdHMgcGVyIHBsYXRm
b3JtIG1lYW5zIGVpdGhlciBoYXZpbmcKK211bHRpcGxlIGV4cGVjdGF0aW9uIGZpbGVzIGZvciBl
YWNoIHBsYXRmb3JtLCBvciBoYXZpbmcgYSB3YXkgdG8KK2V4cHJlc3MgY29uZGl0aW9uYWwgdmFs
dWVzIHdpdGhpbiBhIGNlcnRhaW4gZmlsZS4gVGhlIGZvcm1lciB3b3VsZCBiZQorcmF0aGVyIGN1
bWJlcnNvbWUgZm9yIGh1bWFucyB1cGRhdGluZyB0aGUgZXhwZWN0YXRpb24gZmlsZXMsIHNvIHRo
ZQorbGF0dGVyIGFwcHJvYWNoIGhhcyBiZWVuIGFkb3B0ZWQsIGxlYWRpbmcgdG8gdGhlIHJlcXVp
cmVtZW50OgorCisgKiBDYXBhYmxlIG9mIHN0b3JpbmcgcmVzdWx0IHZhbHVlcyB0aGF0IGFyZSBj
b25kaXRpb25hbCBvbiB0aGUgcGxhdGZvcm0uCisKK1RoZXJlIGFyZSBmZXcgZXh0YW50IGZvcm1h
dHMgdGhhdCBtZWV0IHRoZXNlIHJlcXVpcmVtZW50cywgc28KK3dwdHJ1bm5lciB1c2VzIGEgYmVz
cG9rZSBgYGV4cGVjdGF0aW9uIG1hbmlmZXN0YGAgZm9ybWF0LCB3aGljaCBpcworY2xvc2VseSBi
YXNlZCBvbiB0aGUgc3RhbmRhcmQgYGBpbmlgYCBmb3JtYXQuCisKK0RpcmVjdG9yeSBMYXlvdXQK
Ky0tLS0tLS0tLS0tLS0tLS0KKworRXhwZWN0YXRpb24gbWFuaWZlc3QgZmlsZXMgbXVzdCBiZSBz
dG9yZWQgdW5kZXIgdGhlIGBgbWV0YWRhdGFgYAorZGlyZWN0b3J5IHBhc3NlZCB0byB0aGUgdGVz
dCBydW5uZXIuIFRoZSBkaXJlY3RvcnkgbGF5b3V0IGZvbGxvd3MgdGhhdAorb2Ygd2ViLXBsYXRm
b3JtLXRlc3RzIHdpdGggZWFjaCB0ZXN0IHBhdGggaGF2aW5nIGEgY29ycmVzcG9uZGluZworbWFu
aWZlc3QgZmlsZS4gVGVzdHMgdGhhdCBkaWZmZXIgb25seSBieSBxdWVyeSBzdHJpbmcsIG9yIHJl
ZnRlc3RzCit3aXRoIHRoZSBzYW1lIHRlc3QgcGF0aCBidXQgZGlmZmVyZW50IHJlZiBwYXRocyBz
aGFyZSB0aGUgc2FtZQorcmVmZXJlbmNlIGZpbGUuIFRoZSBmaWxlIG5hbWUgaXMgdGFrZW4gZnJv
bSB0aGUgbGFzdCAvLXNlcGFyYXRlZCBwYXJ0CitvZiB0aGUgcGF0aCwgc3VmZml4ZWQgd2l0aCBg
YC5pbmlgYC4KKworQXMgYW4gb3B0aW1pc2F0aW9uLCBmaWxlcyB3aGljaCBwcm9kdWNlIG9ubHkg
ZGVmYXVsdCByZXN1bHRzCisoaS5lLiBgYFBBU1NgYCBvciBgYE9LYGApIGRvbid0IHJlcXVpcmUg
YSBjb3JyZXNwb25kaW5nIG1hbmlmZXN0IGZpbGUuCisKK0ZvciBleGFtcGxlIGEgdGVzdCB3aXRo
IHVybDo6CisKKyAgL3NwZWMvc2VjdGlvbi9maWxlLmh0bWw/cXVlcnk9cGFyYW0KKword291bGQg
aGF2ZSBhbiBleHBlY3RhdGlvbiBmaWxlIDo6CisKKyAgbWV0YWRhdGEvc3BlYy9zZWN0aW9uL2Zp
bGUuaHRtbC5pbmkKKworCisuLiBfd3B0dXBkYXRlLWxhYmVsOgorCitHZW5lcmF0aW5nIEV4cGVj
dGF0aW9uIEZpbGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3dwdHJ1bm5lciBw
cm92aWRlcyB0aGUgdG9vbCBgYHdwdHVwZGF0ZWBgIHRvIGdlbmVyYXRlIGV4cGVjdGF0aW9uCitm
aWxlcyBmcm9tIHRoZSByZXN1bHRzIG9mIGEgc2V0IG9mIGJhc2VsaW5lIHRlc3QgcnVucy4gVGhl
IGJhc2ljCitzeW50YXggZm9yIHRoaXMgaXM6OgorCisgIHdwdHVwZGF0ZSBbb3B0aW9uc10gW2xv
Z2ZpbGVdLi4uCisKK0VhY2ggYGBsb2dmaWxlYGAgaXMgYSBzdHJ1Y3R1cmVkIGxvZyBmaWxlIGZy
b20gYSBwcmV2aW91cyBydW4uIFRoZXNlCitjYW4gYmUgZ2VuZXJhdGVkIGZyb20gd3B0cnVubmVy
IHVzaW5nIHRoZSBgYC0tbG9nLXJhd2BgIG9wdGlvbgorZS5nLiBgYC0tbG9nLXJhdz1zdHJ1Y3R1
cmVkLmxvZ2BgLiBUaGUgZGVmYXVsdCBiZWhhdmlvdXIgaXMgdG8gdXBkYXRlCithbGwgdGhlIHRl
c3QgZGF0YSBmb3IgdGhlIHBhcnRpY3VsYXIgY29tYmluYXRpb24gb2YgaGFyZHdhcmUgYW5kIE9T
Cit1c2VkIGluIHRoZSBydW4gY29ycmVzcG9uZGluZyB0byB0aGUgbG9nIGRhdGEsIHdoaWxzdCBs
ZWF2aW5nIGFueQorb3RoZXIgZXhwZWN0YXRpb25zIHVudG91Y2hlZC4KKword3B0dXBkYXRlIHRh
a2VzIHNldmVyYWwgdXNlZnVsIG9wdGlvbnM6CisKK2BgLS1zeW5jYGAKKyAgUHVsbCB0aGUgbGF0
ZXN0IHZlcnNpb24gb2Ygd2ViLXBsYXRmb3JtLXRlc3RzIGZyb20gdGhlCisgIHVwc3RyZWFtIHNw
ZWNpZmllZCBpbiB0aGUgY29uZmlnIGZpbGUuIElmIHRoaXMgaXMgc3BlY2lmaWVkIGluCisgIGNv
bWJpbmF0aW9uIHdpdGggbG9nZmlsZXMsIGl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgcmVzdWx0cyBp
biB0aGUgbG9nCisgIGZpbGVzIGFwcGx5IHRvIHRoZSBwb3N0LXVwZGF0ZSB0ZXN0cy4KKworYGAt
LW5vLWNoZWNrLWNsZWFuYGAKKyAgRG9uJ3QgYXR0ZW1wdCB0byBjaGVjayBpZiB0aGUgd29ya2lu
ZyBkaXJlY3RvcnkgaXMgY2xlYW4gYmVmb3JlCisgIGRvaW5nIHRoZSB1cGRhdGUgKGFzc3VtaW5n
IHRoYXQgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGlzIGEgZ2l0IG9yCisgIG1lcmN1cmlhbCB0cmVl
KS4KKworYGAtLXBhdGNoYGAKKyAgQ3JlYXRlIGEgYSBnaXQgY29tbWl0LCBvciBhIG1xIHBhdGNo
LCB3aXRoIHRoZSBjaGFuZ2VzIG1hZGUgYnkgd3B0dXBkYXRlLgorCitgYC0taWdub3JlLWV4aXN0
aW5nYGAKKyAgT3ZlcndyaXRlIGFsbCB0aGUgZXhwZWN0YXRpb24gZGF0YSBmb3IgYW55IHRlc3Rz
IHRoYXQgaGF2ZSBhIHJlc3VsdAorICBpbiB0aGUgcGFzc2VkIGxvZyBmaWxlcywgbm90IGp1c3Qg
ZGF0YSBmb3IgdGhlIHNhbWUgcGxhdGZvcm0uCisKK0V4YW1wbGVzCit+fn5+fn5+fgorCitVcGRh
dGUgdGhlIGxvY2FsIGNvcHkgb2Ygd2ViLXBsYXRmb3JtLXRlc3RzIHdpdGhvdXQgY2hhbmdpbmcg
dGhlCitleHBlY3RhdGlvbiBkYXRhIGFuZCBjb21taXQgKG9yIGNyZWF0ZSBhIG1xIHBhdGNoIGZv
cikgdGhlIHJlc3VsdDo6CisKKyAgd3B0dXBkYXRlIC0tcGF0Y2ggLS1zeW5jCisKK1VwZGF0ZSBh
bGwgdGhlIGV4cGVjdGF0aW9ucyBmcm9tIGEgc2V0IG9mIGNyb3NzLXBsYXRmb3JtIHRlc3QgcnVu
czo6CisKKyAgd3B0dXBkYXRlIC0tbm8tY2hlY2stY2xlYW4gLS1wYXRjaCBvc3gubG9nIGxpbnV4
LmxvZyB3aW5kb3dzLmxvZworCitBZGQgZXhwZWN0YXRpb24gZGF0YSBmb3Igc29tZSBuZXcgdGVz
dHMgdGhhdCBhcmUgZXhwZWN0ZWQgdG8gYmUKK3BsYXRmb3JtLWluZGVwZW5kZW50OjoKKworICB3
cHR1cGRhdGUgLS1uby1jaGVjay1jbGVhbiAtLXBhdGNoIC0taWdub3JlLWV4aXN0aW5nIHRlc3Rz
LmxvZworCitNYW5pZmVzdCBGb3JtYXQKKy0tLS0tLS0tLS0tLS0tLQorVGhlIGZvcm1hdCBvZiB0
aGUgbWFuaWZlc3QgZmlsZXMgaXMgYmFzZWQgb24gdGhlIGluaSBmb3JtYXQuIEZpbGVzIGFyZQor
ZGl2aWRlZCBpbnRvIHNlY3Rpb25zLCBlYWNoIChhcGFydCBmcm9tIHRoZSByb290IHNlY3Rpb24p
IGhhdmluZyBhCitoZWFkaW5nIGVuY2xvc2VkIGluIHNxdWFyZSBicmFjZXMuIFdpdGhpbiBlYWNo
IHNlY3Rpb24gYXJlIGtleS12YWx1ZQorcGFpcnMuIFRoZXJlIGFyZSBzZXZlcmFsIG5vdGFibGUg
ZGlmZmVyZW5jZXMgZnJvbSBzdGFuZGFyZCAuaW5pIGZpbGVzLAoraG93ZXZlcjoKKworICogU2Vj
dGlvbnMgbWF5IGJlIGhpZXJhcmNoaWNhbGx5IG5lc3RlZCwgd2l0aCBzaWduaWZpY2FudCB3aGl0
ZXNwYWNlCisgICBpbmRpY2F0aW5nIG5lc3RpbmcgZGVwdGguCisKKyAqIE9ubHkgYGA6YGAgaXMg
dmFsaWQgYXMgYSBrZXkvdmFsdWUgc2VwYXJhdG9yCisKK0Egc2ltcGxlIGV4YW1wbGUgb2YgYSBt
YW5pZmVzdCBmaWxlIGlzOjoKKworICByb290X2tleTogcm9vdF92YWx1ZQorCisgIFtzZWN0aW9u
XQorICAgIHNlY3Rpb25fa2V5OiBzZWN0aW9uX3ZhbHVlCisKKyAgICBbc3Vic2VjdGlvbl0KKyAg
ICAgICBzdWJzZWN0aW9uX2tleTogc3Vic2VjdGlvbl92YWx1ZQorCisgIFthbm90aGVyX3NlY3Rp
b25dCisgICAgYW5vdGhlcl9rZXk6IGFub3RoZXJfdmFsdWUKKworQ29uZGl0aW9uYWwgVmFsdWVz
Cit+fn5+fn5+fn5+fn5+fn5+fn4KKworSW4gb3JkZXIgdG8gc3VwcG9ydCB2YWx1ZXMgdGhhdCBk
ZXBlbmQgb24gc29tZSBleHRlcm5hbCBkYXRhLCB0aGUKK3JpZ2h0IGhhbmQgc2lkZSBvZiBhIGtl
eS92YWx1ZSBwYWlyIGNhbiB0YWtlIGEgc2V0IG9mIGNvbmRpdGlvbmFscworcmF0aGVyIHRoYW4g
YSBwbGFpbiB2YWx1ZS4gVGhlc2UgdmFsdWVzIGFyZSBwbGFjZWQgb24gYSBuZXcgbGluZQorZm9s
bG93aW5nIHRoZSBrZXksIHdpdGggc2lnbmlmaWNhbnQgaW5kZW50YXRpb24uIENvbmRpdGlvbmFs
IHZhbHVlcworYXJlIHByZWZpeGVkIHdpdGggYGBpZmBgIGFuZCB0ZXJtaW5hdGVkIHdpdGggYSBj
b2xvbiwgZm9yIGV4YW1wbGU6OgorCisgIGtleToKKyAgICBpZiBjb25kMTogdmFsdWUxCisgICAg
aWYgY29uZDI6IHZhbHVlMgorICAgIHZhbHVlMworCitJbiB0aGlzIGV4YW1wbGUsIHRoZSB2YWx1
ZSBhc3NvY2lhdGVkIHdpdGggYGBrZXlgYCBpcyBkZXRlcm1pbmVkIGJ5CitmaXJzdCBldmFsdWF0
aW5nIGBgY29uZDFgYCBhZ2FpbnN0IGV4dGVybmFsIGRhdGEuIElmIHRoYXQgaXMgdHJ1ZSwKK2Bg
a2V5YGAgaXMgYXNzaWduZWQgdGhlIHZhbHVlIGBgdmFsdWUxYGAsIG90aGVyd2lzZSBgYGNvbmQy
YGAgaXMKK2V2YWx1YXRlZCBpbiB0aGUgc2FtZSB3YXkuIElmIGJvdGggYGBjb25kMWBgIGFuZCBg
YGNvbmQyYGAgYXJlIGZhbHNlLAordGhlIHVuY29uZGl0aW9uYWwgYGB2YWx1ZTNgYCBpcyB1c2Vk
LgorCitDb25kaXRpb25zIHRoZW1zZWx2ZXMgdXNlIGEgUHl0aG9uLWxpa2UgZXhwcmVzc2lvbiBz
eW50YXguIE9wZXJhbmRzCitjYW4gZWl0aGVyIGJlIHZhcmlhYmxlcywgY29ycmVzcG9uZGluZyB0
byBkYXRhIHBhc3NlZCBpbiwgbnVtYmVycworKGludGVnZXIgb3IgZmxvYXRpbmcgcG9pbnQ7IGV4
cG9uZW50aWFsIG5vdGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQpIG9yCitxdW90ZS1kZWxpbWl0ZWQg
c3RyaW5ncy4gRXF1YWxpdHkgaXMgdGVzdGVkIHVzaW5nIGBgPT1gYCBhbmQKK2luZXF1YWxpdHkg
YnkgYGAhPWBgLiBUaGUgb3BlcmF0b3JzIGBgYW5kYGAsIGBgb3JgYCBhbmQgYGBub3RgYCBhcmUK
K3VzZWQgaW4gdGhlIGV4cGVjdGVkIHdheS4gUGFyZW50aGVzZXMgY2FuIGFsc28gYmUgdXNlZCBm
b3IKK2dyb3VwaW5nLiBGb3IgZXhhbXBsZTo6CisKKyAga2V5OgorICAgIGlmIChhID09IDIgb3Ig
YSA9PSAzKSBhbmQgYiA9PSAiYWJjIjogdmFsdWUxCisgICAgaWYgYSA9PSAxIG9yIGIgIT0gImFi
YyI6IHZhbHVlMgorICAgIHZhbHVlMworCitIZXJlIGBgYWBgIGFuZCBgYGJgYCBhcmUgdmFyaWFi
bGVzLCB0aGUgdmFsdWUgb2Ygd2hpY2ggd2lsbCBiZQorc3VwcGxpZWQgd2hlbiB0aGUgbWFuaWZl
c3QgaXMgdXNlZC4KKworRXhwZWN0YXRpb24gTWFuaWZlc3RzCistLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworV2hlbiB1c2VkIGZvciBleHBlY3RhdGlvbiBkYXRhLCBtYW5pZmVzdHMgaGF2ZSB0aGUg
Zm9sbG93aW5nIGZvcm1hdDoKKworICogQSBzZWN0aW9uIHBlciB0ZXN0IFVSTCBkZXNjcmliZWQg
YnkgdGhlIG1hbmlmZXN0LCB3aXRoIHRoZSBzZWN0aW9uCisgICBoZWFkaW5nIGJlaW5nIHRoZSBw
YXJ0IG9mIHRoZSB0ZXN0IFVSTCBmb2xsb3dpbmcgdGhlIGxhc3QgYGAvYGAgaW4KKyAgIHRoZSBw
YXRoICh0aGlzIGFsbG93cyBtdWx0aXBsZSB0ZXN0cyBpbiBhIHNpbmdsZSBtYW5pZmVzdCBmaWxl
IHdpdGgKKyAgIHRoZSBzYW1lIHBhdGggcGFydCBvZiB0aGUgVVJMLCBidXQgZGlmZmVyZW50IHF1
ZXJ5IHBhcnRzKS4KKworICogQSBzdWJzZWN0aW9uIHBlciBzdWJ0ZXN0LCB3aXRoIHRoZSBoZWFk
aW5nIGJlaW5nIHRoZSB0aXRsZSBvZiB0aGUKKyAgIHN1YnRlc3QuCisKKyAqIEEga2V5IGBgdHlw
ZWBgIGluZGljYXRpbmcgdGhlIHRlc3QgdHlwZS4gVGhpcyB0YWtlcyB0aGUgdmFsdWVzCisgICBg
YHRlc3RoYXJuZXNzYGAgYW5kIGBgcmVmdGVzdGBgLgorCisgKiBGb3IgcmVmdGVzdHMsIGtleXMg
YGByZWZ0eXBlYGAgaW5kaWNhdGluZyB0aGUgcmVmZXJlbmNlIHR5cGUKKyAgIChgYD09YGAgb3Ig
YGAhPWBgKSBhbmQgYGByZWZ1cmxgYCBpbmRpY2F0aW5nIHRoZSBVUkwgb2YgdGhlCisgICByZWZl
cmVuY2UuCisKKyAqIEEga2V5IGBgZXhwZWN0ZWRgYCBnaXZpbmcgdGhlIGV4cGVjdGF0aW9uIHZh
bHVlIG9mIGVhY2ggKHN1Yil0ZXN0LgorCisgKiBBIGtleSBgYGRpc2FibGVkYGAgd2hpY2ggY2Fu
IGJlIHNldCB0byBhbnkgdmFsdWUgdG8gaW5kaWNhdGUgdGhhdAorICAgdGhlIChzdWIpdGVzdCBp
cyBkaXNhYmxlZCBhbmQgc2hvdWxkIGVpdGhlciBub3QgYmUgcnVuIChmb3IgdGVzdHMpCisgICBv
ciB0aGF0IGl0cyByZXN1bHRzIHNob3VsZCBiZSBpZ25vcmVkIChzdWJ0ZXN0cykuCisKKyAqIEEg
a2V5IGBgcmVzdGFydC1hZnRlcmBgIHdoaWNoIGNhbiBiZSBzZXQgdG8gYW55IHZhbHVlIHRvIGlu
ZGljYXRlIHRoYXQKKyAgIHRoZSBydW5uZXIgc2hvdWxkIHJlc3RhcnQgdGhlIGJyb3dzZXIgYWZ0
ZXIgcnVubmluZyB0aGlzIHRlc3QgKGUuZy4gdG8KKyAgIGNsZWFyIG91dCB1bndhbnRlZCBzdGF0
ZSkuCisKKyAqIFZhcmlhYmxlcyBgYGRlYnVnYGAsIGBgb3NgYCwgYGB2ZXJzaW9uYGAsIGBgcHJv
Y2Vzc29yYGAgYW5kCisgICBgYGJpdHNgYCB0aGF0IGRlc2NyaWJlIHRoZSBjb25maWd1cmF0aW9u
IG9mIHRoZSBicm93c2VyIHVuZGVyCisgICB0ZXN0LiBgYGRlYnVnYGAgaXMgYSBib29sZWFuIGlu
ZGljYXRpbmcgd2hldGhlciBhIGJ1aWxkIGlzIGEgZGVidWcKKyAgIGJ1aWxkLiBgYG9zYGAgaXMg
YSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgb3BlcmF0aW5nIHN5c3RlbSwgYW5kCisgICBgYHZlcnNp
b25gYCBhIHN0cmluZyBpbmRpY2F0aW5nIHRoZSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhhdAor
ICAgb3BlcmF0aW5nIHN5c3RlbS4gYGBwcm9jZXNzb3JgYCBpcyBhIHN0cmluZyBpbmRpY2F0aW5n
IHRoZQorICAgcHJvY2Vzc29yIGFyY2hpdGVjdHVyZSBhbmQgYGBiaXRzYGAgYW4gaW50ZWdlciBp
bmRpY2F0aW5nIHRoZQorICAgbnVtYmVyIG9mIGJpdHMuIFRoaXMgaW5mb3JtYXRpb24gaXMgdHlw
aWNhbGx5IHByb3ZpZGVkIGJ5CisgICA6cHk6bW9kOmBtb3ppbmZvYC4KKworICogVG9wIGxldmVs
IGtleXMgYXJlIHRha2VuIGFzIGRlZmF1bHRzIGZvciB0aGUgd2hvbGUgZmlsZS4gU28sIGZvcgor
ICAgZXhhbXBsZSwgYSB0b3AgbGV2ZWwga2V5IHdpdGggYGBleHBlY3RlZDogRkFJTGBgIHdvdWxk
IGluZGljYXRlCisgICB0aGF0IGFsbCB0ZXN0cyBhbmQgc3VidGVzdHMgaW4gdGhlIGZpbGUgYXJl
IGV4cGVjdGVkIHRvIGZhaWwsCisgICB1bmxlc3MgdGhleSBoYXZlIGFuIGBgZXhwZWN0ZWRgYCBr
ZXkgb2YgdGhlaXIgb3duLgorCitBbiBzaW1wbGUgZXhhbXBsZSBtYW5pZmVzdCBtaWdodCBsb29r
IGxpa2U6OgorCisgIFt0ZXN0Lmh0bWw/dmFyaWFudD1iYXNpY10KKyAgICB0eXBlOiB0ZXN0aGFy
bmVzcworCisgICAgW1Rlc3Qgc29tZXRoaW5nIHVuc3VwcG9ydGVkXQorICAgICAgIGV4cGVjdGVk
OiBGQUlMCisKKyAgW3Rlc3QuaHRtbD92YXJpYW50PWJyb2tlbl0KKyAgICBleHBlY3RlZDogRVJS
T1IKKworICBbdGVzdC5odG1sP3ZhcmlhbnQ9dW5zdGFibGVdCisgICAgZGlzYWJsZWQ6IGh0dHA6
Ly90ZXN0LmJ1Z3MuZXhhbXBsZS5vcmcvYnVncy8xMjM0NQorCitBIG1vcmUgY29tcGxleCBtYW5p
ZmVzdCB3aXRoIGNvbmRpdGlvbmFsIHByb3BlcnRpZXMgbWlnaHQgYmU6OgorCisgIFtjYW52YXNf
dGVzdC5odG1sXQorICAgIGV4cGVjdGVkOgorICAgICAgaWYgb3MgPT0gIm9zeCI6IEZBSUwKKyAg
ICAgIGlmIG9zID09ICJ3aW5kb3dzIiBhbmQgdmVyc2lvbiA9PSAiWFAiOiBGQUlMCisgICAgICBQ
QVNTCisKK05vdGUgdGhhdCBgYFBBU1NgYCBpbiB0aGUgYWJvdmUgd29ya3MsIGJ1dCBpcyB1bm5l
Y2Vzc2FyeTsgYGBQQVNTYGAKKyhvciBgYE9LYGApIGlzIGFsd2F5cyB0aGUgZGVmYXVsdCBleHBl
Y3RhdGlvbiBmb3IgKHN1Yil0ZXN0cy4KZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9y
dGVkL3czYy90b29scy93cHRydW5uZXIvZG9jcy9pbmRleC5yc3QgYi9XZWJEcml2ZXJUZXN0cy9p
bXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL2RvY3MvaW5kZXgucnN0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41MTQ3ZDNlMzFjMwotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvZG9jcy9pbmRleC5y
c3QKQEAgLTAsMCArMSwyNCBAQAorLi4gd3B0cnVubmVyIGRvY3VtZW50YXRpb24gbWFzdGVyIGZp
bGUsIGNyZWF0ZWQgYnkKKyAgIHNwaGlueC1xdWlja3N0YXJ0IG9uIE1vbiBNYXkgMTkgMTg6MTQ6
MjAgMjAxNC4KKyAgIFlvdSBjYW4gYWRhcHQgdGhpcyBmaWxlIGNvbXBsZXRlbHkgdG8geW91ciBs
aWtpbmcsIGJ1dCBpdCBzaG91bGQgYXQgbGVhc3QKKyAgIGNvbnRhaW4gdGhlIHJvb3QgYHRvY3Ry
ZWVgIGRpcmVjdGl2ZS4KKworV2VsY29tZSB0byB3cHRydW5uZXIncyBkb2N1bWVudGF0aW9uIQor
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDb250ZW50czoKKworLi4g
dG9jdHJlZTo6CisgICA6bWF4ZGVwdGg6IDIKKworICAgdXNhZ2UKKyAgIGV4cGVjdGF0aW9uCisg
ICBkZXNpZ24KKworSW5kaWNlcyBhbmQgdGFibGVzCis9PT09PT09PT09PT09PT09PT0KKworKiA6
cmVmOmBnZW5pbmRleGAKKyogOnJlZjpgbW9kaW5kZXhgCisqIDpyZWY6YHNlYXJjaGAKKwpkaWZm
IC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci9kb2Nz
L21ha2UuYmF0IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci9k
b2NzL21ha2UuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45NTlj
MTYxNWEyOAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90
b29scy93cHRydW5uZXIvZG9jcy9tYWtlLmJhdApAQCAtMCwwICsxLDI0MiBAQAorQEVDSE8gT0ZG
DQorDQorUkVNIENvbW1hbmQgZmlsZSBmb3IgU3BoaW54IGRvY3VtZW50YXRpb24NCisNCitpZiAi
JVNQSElOWEJVSUxEJSIgPT0gIiIgKA0KKwlzZXQgU1BISU5YQlVJTEQ9c3BoaW54LWJ1aWxkDQor
KQ0KK3NldCBCVUlMRERJUj1fYnVpbGQNCitzZXQgQUxMU1BISU5YT1BUUz0tZCAlQlVJTERESVIl
L2RvY3RyZWVzICVTUEhJTlhPUFRTJSAuDQorc2V0IEkxOE5TUEhJTlhPUFRTPSVTUEhJTlhPUFRT
JSAuDQoraWYgTk9UICIlUEFQRVIlIiA9PSAiIiAoDQorCXNldCBBTExTUEhJTlhPUFRTPS1EIGxh
dGV4X3BhcGVyX3NpemU9JVBBUEVSJSAlQUxMU1BISU5YT1BUUyUNCisJc2V0IEkxOE5TUEhJTlhP
UFRTPS1EIGxhdGV4X3BhcGVyX3NpemU9JVBBUEVSJSAlSTE4TlNQSElOWE9QVFMlDQorKQ0KKw0K
K2lmICIlMSIgPT0gIiIgZ290byBoZWxwDQorDQoraWYgIiUxIiA9PSAiaGVscCIgKA0KKwk6aGVs
cA0KKwllY2hvLlBsZWFzZSB1c2UgYG1ha2UgXjx0YXJnZXRePmAgd2hlcmUgXjx0YXJnZXRePiBp
cyBvbmUgb2YNCisJZWNoby4gIGh0bWwgICAgICAgdG8gbWFrZSBzdGFuZGFsb25lIEhUTUwgZmls
ZXMNCisJZWNoby4gIGRpcmh0bWwgICAgdG8gbWFrZSBIVE1MIGZpbGVzIG5hbWVkIGluZGV4Lmh0
bWwgaW4gZGlyZWN0b3JpZXMNCisJZWNoby4gIHNpbmdsZWh0bWwgdG8gbWFrZSBhIHNpbmdsZSBs
YXJnZSBIVE1MIGZpbGUNCisJZWNoby4gIHBpY2tsZSAgICAgdG8gbWFrZSBwaWNrbGUgZmlsZXMN
CisJZWNoby4gIGpzb24gICAgICAgdG8gbWFrZSBKU09OIGZpbGVzDQorCWVjaG8uICBodG1saGVs
cCAgIHRvIG1ha2UgSFRNTCBmaWxlcyBhbmQgYSBIVE1MIGhlbHAgcHJvamVjdA0KKwllY2hvLiAg
cXRoZWxwICAgICB0byBtYWtlIEhUTUwgZmlsZXMgYW5kIGEgcXRoZWxwIHByb2plY3QNCisJZWNo
by4gIGRldmhlbHAgICAgdG8gbWFrZSBIVE1MIGZpbGVzIGFuZCBhIERldmhlbHAgcHJvamVjdA0K
KwllY2hvLiAgZXB1YiAgICAgICB0byBtYWtlIGFuIGVwdWINCisJZWNoby4gIGxhdGV4ICAgICAg
dG8gbWFrZSBMYVRlWCBmaWxlcywgeW91IGNhbiBzZXQgUEFQRVI9YTQgb3IgUEFQRVI9bGV0dGVy
DQorCWVjaG8uICB0ZXh0ICAgICAgIHRvIG1ha2UgdGV4dCBmaWxlcw0KKwllY2hvLiAgbWFuICAg
ICAgICB0byBtYWtlIG1hbnVhbCBwYWdlcw0KKwllY2hvLiAgdGV4aW5mbyAgICB0byBtYWtlIFRl
eGluZm8gZmlsZXMNCisJZWNoby4gIGdldHRleHQgICAgdG8gbWFrZSBQTyBtZXNzYWdlIGNhdGFs
b2dzDQorCWVjaG8uICBjaGFuZ2VzICAgIHRvIG1ha2UgYW4gb3ZlcnZpZXcgb3ZlciBhbGwgY2hh
bmdlZC9hZGRlZC9kZXByZWNhdGVkIGl0ZW1zDQorCWVjaG8uICB4bWwgICAgICAgIHRvIG1ha2Ug
RG9jdXRpbHMtbmF0aXZlIFhNTCBmaWxlcw0KKwllY2hvLiAgcHNldWRveG1sICB0byBtYWtlIHBz
ZXVkb3htbC1YTUwgZmlsZXMgZm9yIGRpc3BsYXkgcHVycG9zZXMNCisJZWNoby4gIGxpbmtjaGVj
ayAgdG8gY2hlY2sgYWxsIGV4dGVybmFsIGxpbmtzIGZvciBpbnRlZ3JpdHkNCisJZWNoby4gIGRv
Y3Rlc3QgICAgdG8gcnVuIGFsbCBkb2N0ZXN0cyBlbWJlZGRlZCBpbiB0aGUgZG9jdW1lbnRhdGlv
biBpZiBlbmFibGVkDQorCWdvdG8gZW5kDQorKQ0KKw0KK2lmICIlMSIgPT0gImNsZWFuIiAoDQor
CWZvciAvZCAlJWkgaW4gKCVCVUlMRERJUiVcKikgZG8gcm1kaXIgL3EgL3MgJSVpDQorCWRlbCAv
cSAvcyAlQlVJTERESVIlXCoNCisJZ290byBlbmQNCispDQorDQorDQorJVNQSElOWEJVSUxEJSAy
PiBudWwNCitpZiBlcnJvcmxldmVsIDkwMDkgKA0KKwllY2hvLg0KKwllY2hvLlRoZSAnc3BoaW54
LWJ1aWxkJyBjb21tYW5kIHdhcyBub3QgZm91bmQuIE1ha2Ugc3VyZSB5b3UgaGF2ZSBTcGhpbngN
CisJZWNoby5pbnN0YWxsZWQsIHRoZW4gc2V0IHRoZSBTUEhJTlhCVUlMRCBlbnZpcm9ubWVudCB2
YXJpYWJsZSB0byBwb2ludA0KKwllY2hvLnRvIHRoZSBmdWxsIHBhdGggb2YgdGhlICdzcGhpbngt
YnVpbGQnIGV4ZWN1dGFibGUuIEFsdGVybmF0aXZlbHkgeW91DQorCWVjaG8ubWF5IGFkZCB0aGUg
U3BoaW54IGRpcmVjdG9yeSB0byBQQVRILg0KKwllY2hvLg0KKwllY2hvLklmIHlvdSBkb24ndCBo
YXZlIFNwaGlueCBpbnN0YWxsZWQsIGdyYWIgaXQgZnJvbQ0KKwllY2hvLmh0dHA6Ly9zcGhpbngt
ZG9jLm9yZy8NCisJZXhpdCAvYiAxDQorKQ0KKw0KK2lmICIlMSIgPT0gImh0bWwiICgNCisJJVNQ
SElOWEJVSUxEJSAtYiBodG1sICVBTExTUEhJTlhPUFRTJSAlQlVJTERESVIlL2h0bWwNCisJaWYg
ZXJyb3JsZXZlbCAxIGV4aXQgL2IgMQ0KKwllY2hvLg0KKwllY2hvLkJ1aWxkIGZpbmlzaGVkLiBU
aGUgSFRNTCBwYWdlcyBhcmUgaW4gJUJVSUxERElSJS9odG1sLg0KKwlnb3RvIGVuZA0KKykNCisN
CitpZiAiJTEiID09ICJkaXJodG1sIiAoDQorCSVTUEhJTlhCVUlMRCUgLWIgZGlyaHRtbCAlQUxM
U1BISU5YT1BUUyUgJUJVSUxERElSJS9kaXJodG1sDQorCWlmIGVycm9ybGV2ZWwgMSBleGl0IC9i
IDENCisJZWNoby4NCisJZWNoby5CdWlsZCBmaW5pc2hlZC4gVGhlIEhUTUwgcGFnZXMgYXJlIGlu
ICVCVUlMRERJUiUvZGlyaHRtbC4NCisJZ290byBlbmQNCispDQorDQoraWYgIiUxIiA9PSAic2lu
Z2xlaHRtbCIgKA0KKwklU1BISU5YQlVJTEQlIC1iIHNpbmdsZWh0bWwgJUFMTFNQSElOWE9QVFMl
ICVCVUlMRERJUiUvc2luZ2xlaHRtbA0KKwlpZiBlcnJvcmxldmVsIDEgZXhpdCAvYiAxDQorCWVj
aG8uDQorCWVjaG8uQnVpbGQgZmluaXNoZWQuIFRoZSBIVE1MIHBhZ2VzIGFyZSBpbiAlQlVJTERE
SVIlL3NpbmdsZWh0bWwuDQorCWdvdG8gZW5kDQorKQ0KKw0KK2lmICIlMSIgPT0gInBpY2tsZSIg
KA0KKwklU1BISU5YQlVJTEQlIC1iIHBpY2tsZSAlQUxMU1BISU5YT1BUUyUgJUJVSUxERElSJS9w
aWNrbGUNCisJaWYgZXJyb3JsZXZlbCAxIGV4aXQgL2IgMQ0KKwllY2hvLg0KKwllY2hvLkJ1aWxk
IGZpbmlzaGVkOyBub3cgeW91IGNhbiBwcm9jZXNzIHRoZSBwaWNrbGUgZmlsZXMuDQorCWdvdG8g
ZW5kDQorKQ0KKw0KK2lmICIlMSIgPT0gImpzb24iICgNCisJJVNQSElOWEJVSUxEJSAtYiBqc29u
ICVBTExTUEhJTlhPUFRTJSAlQlVJTERESVIlL2pzb24NCisJaWYgZXJyb3JsZXZlbCAxIGV4aXQg
L2IgMQ0KKwllY2hvLg0KKwllY2hvLkJ1aWxkIGZpbmlzaGVkOyBub3cgeW91IGNhbiBwcm9jZXNz
IHRoZSBKU09OIGZpbGVzLg0KKwlnb3RvIGVuZA0KKykNCisNCitpZiAiJTEiID09ICJodG1saGVs
cCIgKA0KKwklU1BISU5YQlVJTEQlIC1iIGh0bWxoZWxwICVBTExTUEhJTlhPUFRTJSAlQlVJTERE
SVIlL2h0bWxoZWxwDQorCWlmIGVycm9ybGV2ZWwgMSBleGl0IC9iIDENCisJZWNoby4NCisJZWNo
by5CdWlsZCBmaW5pc2hlZDsgbm93IHlvdSBjYW4gcnVuIEhUTUwgSGVscCBXb3Jrc2hvcCB3aXRo
IHRoZSBeDQorLmhocCBwcm9qZWN0IGZpbGUgaW4gJUJVSUxERElSJS9odG1saGVscC4NCisJZ290
byBlbmQNCispDQorDQoraWYgIiUxIiA9PSAicXRoZWxwIiAoDQorCSVTUEhJTlhCVUlMRCUgLWIg
cXRoZWxwICVBTExTUEhJTlhPUFRTJSAlQlVJTERESVIlL3F0aGVscA0KKwlpZiBlcnJvcmxldmVs
IDEgZXhpdCAvYiAxDQorCWVjaG8uDQorCWVjaG8uQnVpbGQgZmluaXNoZWQ7IG5vdyB5b3UgY2Fu
IHJ1biAicWNvbGxlY3Rpb25nZW5lcmF0b3IiIHdpdGggdGhlIF4NCisucWhjcCBwcm9qZWN0IGZp
bGUgaW4gJUJVSUxERElSJS9xdGhlbHAsIGxpa2UgdGhpczoNCisJZWNoby5ePiBxY29sbGVjdGlv
bmdlbmVyYXRvciAlQlVJTERESVIlXHF0aGVscFx3cHRydW5uZXIucWhjcA0KKwllY2hvLlRvIHZp
ZXcgdGhlIGhlbHAgZmlsZToNCisJZWNoby5ePiBhc3Npc3RhbnQgLWNvbGxlY3Rpb25GaWxlICVC
VUlMRERJUiVccXRoZWxwXHdwdHJ1bm5lci5naGMNCisJZ290byBlbmQNCispDQorDQoraWYgIiUx
IiA9PSAiZGV2aGVscCIgKA0KKwklU1BISU5YQlVJTEQlIC1iIGRldmhlbHAgJUFMTFNQSElOWE9Q
VFMlICVCVUlMRERJUiUvZGV2aGVscA0KKwlpZiBlcnJvcmxldmVsIDEgZXhpdCAvYiAxDQorCWVj
aG8uDQorCWVjaG8uQnVpbGQgZmluaXNoZWQuDQorCWdvdG8gZW5kDQorKQ0KKw0KK2lmICIlMSIg
PT0gImVwdWIiICgNCisJJVNQSElOWEJVSUxEJSAtYiBlcHViICVBTExTUEhJTlhPUFRTJSAlQlVJ
TERESVIlL2VwdWINCisJaWYgZXJyb3JsZXZlbCAxIGV4aXQgL2IgMQ0KKwllY2hvLg0KKwllY2hv
LkJ1aWxkIGZpbmlzaGVkLiBUaGUgZXB1YiBmaWxlIGlzIGluICVCVUlMRERJUiUvZXB1Yi4NCisJ
Z290byBlbmQNCispDQorDQoraWYgIiUxIiA9PSAibGF0ZXgiICgNCisJJVNQSElOWEJVSUxEJSAt
YiBsYXRleCAlQUxMU1BISU5YT1BUUyUgJUJVSUxERElSJS9sYXRleA0KKwlpZiBlcnJvcmxldmVs
IDEgZXhpdCAvYiAxDQorCWVjaG8uDQorCWVjaG8uQnVpbGQgZmluaXNoZWQ7IHRoZSBMYVRlWCBm
aWxlcyBhcmUgaW4gJUJVSUxERElSJS9sYXRleC4NCisJZ290byBlbmQNCispDQorDQoraWYgIiUx
IiA9PSAibGF0ZXhwZGYiICgNCisJJVNQSElOWEJVSUxEJSAtYiBsYXRleCAlQUxMU1BISU5YT1BU
UyUgJUJVSUxERElSJS9sYXRleA0KKwljZCAlQlVJTERESVIlL2xhdGV4DQorCW1ha2UgYWxsLXBk
Zg0KKwljZCAlQlVJTERESVIlLy4uDQorCWVjaG8uDQorCWVjaG8uQnVpbGQgZmluaXNoZWQ7IHRo
ZSBQREYgZmlsZXMgYXJlIGluICVCVUlMRERJUiUvbGF0ZXguDQorCWdvdG8gZW5kDQorKQ0KKw0K
K2lmICIlMSIgPT0gImxhdGV4cGRmamEiICgNCisJJVNQSElOWEJVSUxEJSAtYiBsYXRleCAlQUxM
U1BISU5YT1BUUyUgJUJVSUxERElSJS9sYXRleA0KKwljZCAlQlVJTERESVIlL2xhdGV4DQorCW1h
a2UgYWxsLXBkZi1qYQ0KKwljZCAlQlVJTERESVIlLy4uDQorCWVjaG8uDQorCWVjaG8uQnVpbGQg
ZmluaXNoZWQ7IHRoZSBQREYgZmlsZXMgYXJlIGluICVCVUlMRERJUiUvbGF0ZXguDQorCWdvdG8g
ZW5kDQorKQ0KKw0KK2lmICIlMSIgPT0gInRleHQiICgNCisJJVNQSElOWEJVSUxEJSAtYiB0ZXh0
ICVBTExTUEhJTlhPUFRTJSAlQlVJTERESVIlL3RleHQNCisJaWYgZXJyb3JsZXZlbCAxIGV4aXQg
L2IgMQ0KKwllY2hvLg0KKwllY2hvLkJ1aWxkIGZpbmlzaGVkLiBUaGUgdGV4dCBmaWxlcyBhcmUg
aW4gJUJVSUxERElSJS90ZXh0Lg0KKwlnb3RvIGVuZA0KKykNCisNCitpZiAiJTEiID09ICJtYW4i
ICgNCisJJVNQSElOWEJVSUxEJSAtYiBtYW4gJUFMTFNQSElOWE9QVFMlICVCVUlMRERJUiUvbWFu
DQorCWlmIGVycm9ybGV2ZWwgMSBleGl0IC9iIDENCisJZWNoby4NCisJZWNoby5CdWlsZCBmaW5p
c2hlZC4gVGhlIG1hbnVhbCBwYWdlcyBhcmUgaW4gJUJVSUxERElSJS9tYW4uDQorCWdvdG8gZW5k
DQorKQ0KKw0KK2lmICIlMSIgPT0gInRleGluZm8iICgNCisJJVNQSElOWEJVSUxEJSAtYiB0ZXhp
bmZvICVBTExTUEhJTlhPUFRTJSAlQlVJTERESVIlL3RleGluZm8NCisJaWYgZXJyb3JsZXZlbCAx
IGV4aXQgL2IgMQ0KKwllY2hvLg0KKwllY2hvLkJ1aWxkIGZpbmlzaGVkLiBUaGUgVGV4aW5mbyBm
aWxlcyBhcmUgaW4gJUJVSUxERElSJS90ZXhpbmZvLg0KKwlnb3RvIGVuZA0KKykNCisNCitpZiAi
JTEiID09ICJnZXR0ZXh0IiAoDQorCSVTUEhJTlhCVUlMRCUgLWIgZ2V0dGV4dCAlSTE4TlNQSElO
WE9QVFMlICVCVUlMRERJUiUvbG9jYWxlDQorCWlmIGVycm9ybGV2ZWwgMSBleGl0IC9iIDENCisJ
ZWNoby4NCisJZWNoby5CdWlsZCBmaW5pc2hlZC4gVGhlIG1lc3NhZ2UgY2F0YWxvZ3MgYXJlIGlu
ICVCVUlMRERJUiUvbG9jYWxlLg0KKwlnb3RvIGVuZA0KKykNCisNCitpZiAiJTEiID09ICJjaGFu
Z2VzIiAoDQorCSVTUEhJTlhCVUlMRCUgLWIgY2hhbmdlcyAlQUxMU1BISU5YT1BUUyUgJUJVSUxE
RElSJS9jaGFuZ2VzDQorCWlmIGVycm9ybGV2ZWwgMSBleGl0IC9iIDENCisJZWNoby4NCisJZWNo
by5UaGUgb3ZlcnZpZXcgZmlsZSBpcyBpbiAlQlVJTERESVIlL2NoYW5nZXMuDQorCWdvdG8gZW5k
DQorKQ0KKw0KK2lmICIlMSIgPT0gImxpbmtjaGVjayIgKA0KKwklU1BISU5YQlVJTEQlIC1iIGxp
bmtjaGVjayAlQUxMU1BISU5YT1BUUyUgJUJVSUxERElSJS9saW5rY2hlY2sNCisJaWYgZXJyb3Js
ZXZlbCAxIGV4aXQgL2IgMQ0KKwllY2hvLg0KKwllY2hvLkxpbmsgY2hlY2sgY29tcGxldGU7IGxv
b2sgZm9yIGFueSBlcnJvcnMgaW4gdGhlIGFib3ZlIG91dHB1dCBeDQorb3IgaW4gJUJVSUxERElS
JS9saW5rY2hlY2svb3V0cHV0LnR4dC4NCisJZ290byBlbmQNCispDQorDQoraWYgIiUxIiA9PSAi
ZG9jdGVzdCIgKA0KKwklU1BISU5YQlVJTEQlIC1iIGRvY3Rlc3QgJUFMTFNQSElOWE9QVFMlICVC
VUlMRERJUiUvZG9jdGVzdA0KKwlpZiBlcnJvcmxldmVsIDEgZXhpdCAvYiAxDQorCWVjaG8uDQor
CWVjaG8uVGVzdGluZyBvZiBkb2N0ZXN0cyBpbiB0aGUgc291cmNlcyBmaW5pc2hlZCwgbG9vayBh
dCB0aGUgXg0KK3Jlc3VsdHMgaW4gJUJVSUxERElSJS9kb2N0ZXN0L291dHB1dC50eHQuDQorCWdv
dG8gZW5kDQorKQ0KKw0KK2lmICIlMSIgPT0gInhtbCIgKA0KKwklU1BISU5YQlVJTEQlIC1iIHht
bCAlQUxMU1BISU5YT1BUUyUgJUJVSUxERElSJS94bWwNCisJaWYgZXJyb3JsZXZlbCAxIGV4aXQg
L2IgMQ0KKwllY2hvLg0KKwllY2hvLkJ1aWxkIGZpbmlzaGVkLiBUaGUgWE1MIGZpbGVzIGFyZSBp
biAlQlVJTERESVIlL3htbC4NCisJZ290byBlbmQNCispDQorDQoraWYgIiUxIiA9PSAicHNldWRv
eG1sIiAoDQorCSVTUEhJTlhCVUlMRCUgLWIgcHNldWRveG1sICVBTExTUEhJTlhPUFRTJSAlQlVJ
TERESVIlL3BzZXVkb3htbA0KKwlpZiBlcnJvcmxldmVsIDEgZXhpdCAvYiAxDQorCWVjaG8uDQor
CWVjaG8uQnVpbGQgZmluaXNoZWQuIFRoZSBwc2V1ZG8tWE1MIGZpbGVzIGFyZSBpbiAlQlVJTERE
SVIlL3BzZXVkb3htbC4NCisJZ290byBlbmQNCispDQorDQorOmVuZA0KZGlmZiAtLWdpdCBhL1dl
YkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvZG9jcy91c2FnZS5yc3Qg
Yi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL2RvY3MvdXNhZ2Uu
cnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44ZTc0YTQzMjBjOAot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRy
dW5uZXIvZG9jcy91c2FnZS5yc3QKQEAgLTAsMCArMSwyMzggQEAKK0dldHRpbmcgU3RhcnRlZAor
PT09PT09PT09PT09PT09CisKK0luc3RhbGxpbmcgd3B0cnVubmVyCistLS0tLS0tLS0tLS0tLS0t
LS0tLQorCitUaGUgZWFzaWVzdCB3YXkgdG8gaW5zdGFsbCB3cHRydW5uZXIgaXMgaW50byBhIHZp
cnR1YWxlbnYsIHVzaW5nIHBpcDo6CisKKyAgdmlydHVhbGVudiB3cHRydW5uZXIKKyAgY2Qgd3B0
cnVubmVyCisgIHNvdXJjZSBiaW4vYWN0aXZhdGUKKyAgcGlwIGluc3RhbGwgd3B0cnVubmVyCisK
K1RoaXMgd2lsbCBpbnN0YWxsIHRoZSBiYXNlIGRlcGVuZGVuY2llcyBmb3Igd3B0cnVubmVyLCBi
dXQgbm90IGFueQorZXh0cmEgZGVwZW5kZW5jaWVzIHJlcXVpcmVkIHRvIHRlc3QgYWdhaW5zdCBz
cGVjaWZpYyBicm93c2Vycy4gSW4KK29yZGVyIHRvIGRvIHRoaXMgeW91IG11c3QgdXNlIHVzZSB0
aGUgZXh0cmEgcmVxdWlyZW1lbnRzIGZpbGVzIGluCitgYCRWSVJUVUFMX0VOVi9yZXF1aXJlbWVu
dHMvcmVxdWlyZW1lbnRzX2Jyb3dzZXIudHh0YGAuIEZvciBleGFtcGxlLAoraW4gb3JkZXIgdG8g
dGVzdCBhZ2FpbnN0IEZpcmVmb3ggeW91IHdvdWxkIGhhdmUgdG8gcnVuOjoKKworICBwaXAgaW5z
dGFsbCAtciByZXF1aXJlbWVudHMvcmVxdWlyZW1lbnRzX2ZpcmVmb3gudHh0CisKK0lmIHlvdSBp
bnRlbmQgdG8gd29yayBvbiB0aGUgY29kZSwgdGhlIGBgLWVgYCBvcHRpb24gdG8gcGlwIHNob3Vs
ZCBiZQordXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIGEgc291cmNlIGNoZWNrb3V0IGkuZS4gaW5z
aWRlIGEgdmlydHVhbAorZW52aXJvbm1lbnQgY3JlYXRlZCBhcyBhYm92ZTo6CisKKyAgZ2l0IGNs
b25lIGh0dHBzOi8vZ2l0aHViLmNvbS93M2Mvd3B0cnVubmVyLmdpdAorICBjZCB3cHRydW5uZXIK
KyAgcGlwIGluc3RhbGwgLWUgLi8KKworSW4gYWRkaXRpb24gdG8gdGhlIGRlcGVuZGVuY2llcyBp
bnN0YWxsZWQgYnkgcGlwLCB3cHRydW5uZXIgcmVxdWlyZXMKK2EgY29weSBvZiB0aGUgd2ViLXBs
YXRmb3JtLXRlc3RzIHJlcG9zaXRvcnkuIFRoaXMgY2FuIGJlIGxvY2F0ZWQKK2FueXdoZXJlIG9u
IHRoZSBmaWxlc3lzdGVtLCBidXQgdGhlIGVhc2llc3Qgb3B0aW9uIGlzIHRvIHB1dCBpdAordW5k
ZXIgdGhlIHNhbWUgcGFyZW50IGRpcmVjdG9yeSBhcyB0aGUgd3B0cnVubmVyIGNoZWNrb3V0OjoK
KworICBnaXQgY2xvbmUgaHR0cHM6Ly9naXRodWIuY29tL3czYy93ZWItcGxhdGZvcm0tdGVzdHMu
Z2l0CisKK0l0IGlzIGFsc28gbmVjZXNzYXJ5IHRvIGdlbmVyYXRlIGEgd2ViLXBsYXRmb3JtLXRl
c3RzIGBgTUFOSUZFU1QuanNvbmBgCitmaWxlLiBJdCdzIHJlY29tbWVuZGVkIHRvIGFsc28gcHV0
IHRoYXQgdW5kZXIgdGhlIHNhbWUgcGFyZW50IGRpcmVjdG9yeSBhcwordGhlIHdwdHJ1bm5lciBj
aGVja291dCwgaW4gYSBkaXJlY3RvcnkgbmFtZWQgYGBtZXRhYGA6OgorCisgIG1rZGlyIG1ldGEK
KyAgY2Qgd2ViLXBsYXRmb3JtLXRlc3RzCisgIHB5dGhvbiBtYW5pZmVzdCAtLXBhdGggLi4vbWV0
YS9NQU5JRkVTVC5qc29uCisKK1RoZSBgYE1BTklGRVNULmpzb25gYCBmaWxlIG5lZWRzIHRvIGJl
IHJlZ2VuZXJhdGVkIGVhY2ggdGltZSB0aGUKK3dlYi1wbGF0Zm9ybS10ZXN0cyBjaGVja291dCBp
cyB1cGRhdGVkLiBUbyBhaWQgd2l0aCB0aGUgdXBkYXRlIHByb2Nlc3MKK3RoZXJlIGlzIGEgdG9v
bCBjYWxsZWQgYGB3cHR1cGRhdGVgYCwgd2hpY2ggaXMgZGVzY3JpYmVkIGluCis6cmVmOmB3cHR1
cGRhdGUtbGFiZWxgLgorCitSdW5uaW5nIHRoZSBUZXN0cworLS0tLS0tLS0tLS0tLS0tLS0KKwor
QSB0ZXN0IHJ1biBpcyBzdGFydGVkIHVzaW5nIHRoZSBgYHdwdHJ1bm5lcmBgIGNvbW1hbmQuICBU
aGUgY29tbWFuZAordGFrZXMgbXVsdGlwbGUgb3B0aW9ucywgb2Ygd2hpY2ggdGhlIGZvbGxvd2lu
ZyBhcmUgbW9zdCBzaWduaWZpY2FudDoKKworYGAtLXByb2R1Y3RgYCAoZGVmYXVsdHMgdG8gYGZp
cmVmb3hgKQorICBUaGUgcHJvZHVjdCB0byB0ZXN0IGFnYWluc3Q6IGBiMmdgLCBgY2hyb21lYCwg
YGZpcmVmb3hgLCBvciBgc2Vydm9gLgorCitgYC0tYmluYXJ5YGAgKHJlcXVpcmVkIGlmIHByb2R1
Y3QgaXMgYGZpcmVmb3hgIG9yIGBzZXJ2b2ApCisgIFRoZSBwYXRoIHRvIGEgYmluYXJ5IGZpbGUg
Zm9yIHRoZSBwcm9kdWN0IChicm93c2VyKSB0byB0ZXN0IGFnYWluc3QuCisKK2BgLS13ZWJkcml2
ZXItYmluYXJ5YGAgKHJlcXVpcmVkIGlmIHByb2R1Y3QgaXMgYGNocm9tZWApCisgIFRoZSBwYXRo
IHRvIGEgYCpkcml2ZXJgIGJpbmFyeTsgZS5nLiwgYSBgY2hyb21lZHJpdmVyYCBiaW5hcnkuCisK
K2BgLS1jZXJ0dXRpbC1iaW5hcnlgYCAocmVxdWlyZWQgaWYgcHJvZHVjdCBpcyBgZmlyZWZveGAg
WyNdXykKKyAgVGhlIHBhdGggdG8gYSBgY2VydHV0aWxgIGJpbmFyeSAoZm9yIHRlc3RzIHRoYXQg
bXVzdCBiZSBydW4gb3ZlciBodHRwcykuCisKK2BgLS1tZXRhZGF0YWBgIChyZXF1aXJlZCBvbmx5
IHdoZW4gbm90IGB1c2luZyBkZWZhdWx0IHBhdGhzYF8pCisgIFRoZSBwYXRoIHRvIGEgZGlyZWN0
b3J5IGNvbnRhaW5pbmcgdGVzdCBtZXRhZGF0YS4gWyNdXworCitgYC0tdGVzdHNgYCAocmVxdWly
ZWQgb25seSB3aGVuIG5vdCBgdXNpbmcgZGVmYXVsdCBwYXRoc2BfKQorICBUaGUgcGF0aCB0byBh
IGRpcmVjdG9yeSBjb250YWluaW5nIGEgd2ViLXBsYXRmb3JtLXRlc3RzIGNoZWNrb3V0LgorCitg
YC0tcHJlZnMtcm9vdGBgIChyZXF1aXJlZCBvbmx5IHdoZW4gdGVzdGluZyBhIEZpcmVmb3ggYmlu
YXJ5KQorICBUaGUgcGF0aCB0byBhIGRpcmVjdG9yeSBjb250YWluaW5nIEZpcmVmb3ggdGVzdC1o
YXJuZXNzIHByZWZlcmVuY2VzLiBbI11fCisKK2BgLS1jb25maWdgYCAoc2hvdWxkIGRlZmF1bHQg
dG8gYHdwdHJ1bm5lci5kZWZhdWx0LmluaWApCisgIFRoZSBwYXRoIHRvIHRoZSBjb25maWcgKGlu
aSkgZmlsZS4KKworLi4gWyNdIFRoZSBgYC0tY2VydHV0aWwtYmluYXJ5YGAgb3B0aW9uIGlzIHJl
cXVpcmVkIHdoZW4gdGhlIHByb2R1Y3QgaXMKKyAgIGBgZmlyZWZveGBgIHVubGVzcyBgYC0tc3Ns
LXR5cGU9bm9uZWBgIGlzIHNwZWNpZmllZC4KKworLi4gWyNdIFRoZSBgYC0tbWV0YWRhdGFgYCBw
YXRoIGlzIHRvIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnM6CisKKyAgKiBhIGBgTUFOSUZFU1Qu
anNvbmBgIGZpbGUgKHRoZSB3ZWItcGxhdGZvcm0tdGVzdHMgZG9jdW1lbnRhdGlvbiBoYXMKKyAg
ICBpbnN0cnVjdGlvbnMgb24gZ2VuZXJhdGluZyB0aGlzIGZpbGUpCisgICogKG9wdGlvbmFsbHkp
IGFueSBleHBlY3RhdGlvbiBmaWxlcyAoc2VlIDpyZWY6YHdwdHVwZGF0ZS1sYWJlbGApCisKKy4u
IFsjXSBFeGFtcGxlIGBgLS1wcmVmcy1yb290YGAgdmFsdWU6IGBgfi9tb3ppbGxhLWNlbnRyYWwv
dGVzdGluZy9wcm9maWxlc2BgLgorCitUaGVyZSBhcmUgYWxzbyBhIHZhcmlldHkgb2Ygb3RoZXIg
Y29tbWFuZC1saW5lIG9wdGlvbnMgYXZhaWxhYmxlOyB1c2UKK2BgLS1oZWxwYGAgdG8gbGlzdCB0
aGVtLgorCitUaGUgZm9sbG93aW5nIGV4YW1wbGVzIHNob3cgaG93IHRvIHN0YXJ0IHdwdHJ1bm5l
ciB3aXRoIHZhcmlvdXMgb3B0aW9ucy4KKworLS0tLS0tLS0tLS0tLS0tLS0tCitTdGFydGluZyB3
cHRydW5uZXIKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZXhhbXBsZXMgYmVsb3cgYXNzdW1l
IHRoZSBmb2xsb3dpbmcgZGlyZWN0b3J5IGxheW91dCwKK3Rob3VnaCBubyBzcGVjaWZpYyBmb2xk
ZXIgc3RydWN0dXJlIGlzIHJlcXVpcmVkOjoKKworICB+L3Rlc3R0d2Yvd3B0cnVubmVyICAgICAg
ICAgICMgd3B0cnVubmVyIGNoZWNrb3V0CisgIH4vdGVzdHR3Zi93ZWItcGxhdGZvcm0tdGVzdHMg
IyB3ZWItcGxhdGZvcm0tdGVzdHMgY2hlY2tvdXQKKyAgfi90ZXN0dHdmL21ldGEgICAgICAgICAg
ICAgICAjIG1ldGFkYXRhCisKK1RvIHRlc3QgYSBGaXJlZm94IE5pZ2h0bHkgYnVpbGQgaW4gYW4g
T1MgWCBlbnZpcm9ubWVudCwgeW91IG1pZ2h0IHN0YXJ0Cit3cHRydW5uZXIgdXNpbmcgc29tZXRo
aW5nIHNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZyBleGFtcGxlOjoKKworICB3cHRydW5uZXIgLS1t
ZXRhZGF0YT1+L3Rlc3R0d2YvbWV0YS8gLS10ZXN0cz1+L3Rlc3R0d2Yvd2ViLXBsYXRmb3JtLXRl
c3RzLyBcCisgICAgLS1iaW5hcnk9fi9tb3ppbGxhLWNlbnRyYWwvb2JqLXg4Nl82NC1hcHBsZS1k
YXJ3aW4xNC4zLjAvZGlzdC9OaWdodGx5LmFwcC9Db250ZW50cy9NYWNPUy9maXJlZm94IFwKKyAg
ICAtLWNlcnR1dGlsLWJpbmFyeT1+L21vemlsbGEtY2VudHJhbC9vYmoteDg2XzY0LWFwcGxlLWRh
cndpbjE0LjMuMC9zZWN1cml0eS9uc3MvY21kL2NlcnR1dGlsL2NlcnR1dGlsIFwKKyAgICAtLXBy
ZWZzLXJvb3Q9fi9tb3ppbGxhLWNlbnRyYWwvdGVzdGluZy9wcm9maWxlcworCisKK0FuZCB0byB0
ZXN0IGEgQ2hyb21pdW0gYnVpbGQgaW4gYW4gT1MgWCBlbnZpcm9ubWVudCwgeW91IG1pZ2h0IHN0
YXJ0Cit3cHRydW5uZXIgdXNpbmcgc29tZXRoaW5nIHNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZyBl
eGFtcGxlOjoKKworICB3cHRydW5uZXIgLS1tZXRhZGF0YT1+L3Rlc3R0d2YvbWV0YS8gLS10ZXN0
cz1+L3Rlc3R0d2Yvd2ViLXBsYXRmb3JtLXRlc3RzLyBcCisgICAgLS1iaW5hcnk9fi9jaHJvbWl1
bS9zcmMvb3V0L1JlbGVhc2UvQ2hyb21pdW0uYXBwL0NvbnRlbnRzL01hY09TL0Nocm9taXVtIFwK
KyAgICAtLXdlYmRyaXZlci1iaW5hcnk9L3Vzci9sb2NhbC9iaW4vY2hyb21lZHJpdmVyIC0tcHJv
ZHVjdD1jaHJvbWUKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1J1bm5pbmcgdGVzdCBzdWJzZXRz
CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyByZXN0cmljdCBhIHRlc3QgcnVuIGp1c3QgdG8g
dGVzdHMgaW4gYSBwYXJ0aWN1bGFyIHdlYi1wbGF0Zm9ybS10ZXN0cworc3ViZGlyZWN0b3J5LCBz
cGVjaWZ5IHRoZSBkaXJlY3RvcnkgbmFtZSBpbiB0aGUgcG9zaXRpb25hbCBhcmd1bWVudHMgYWZ0
ZXIKK3RoZSBvcHRpb25zOyBmb3IgZXhhbXBsZSwgcnVuIGp1c3QgdGhlIHRlc3RzIGluIHRoZSBg
ZG9tYCBzdWJkaXJlY3Rvcnk6OgorCisgIHdwdHJ1bm5lciAtLW1ldGFkYXRhPX4vdGVzdHR3Zi9t
ZXRhIC0tdGVzdHM9fi90ZXN0dHdmL3dlYi1wbGF0Zm9ybS10ZXN0cy8gXAorICAgIC0tYmluYXJ5
PS9wYXRoL3RvL2ZpcmVmb3ggLS1jZXJ0dXRpbC1iaW5hcnk9L3BhdGgvdG8vY2VydHV0aWwgXAor
ICAgIC0tcHJlZnMtcm9vdD0vcGF0aC90by90ZXN0aW5nL3Byb2ZpbGVzIFwKKyAgICBkb20KKwor
LS0tLS0tLS0tLS0tLS0tLS0tLQorUnVubmluZyBpbiBwYXJhbGxlbAorLS0tLS0tLS0tLS0tLS0t
LS0tLQorCitUbyBzcGVlZCB1cCB0aGUgdGVzdGluZyBwcm9jZXNzLCB1c2UgdGhlIGBgLS1wcm9j
ZXNzZXNgYCBvcHRpb24gdG8gaGF2ZQord3B0cnVubmVyIHJ1biBtdWx0aXBsZSBicm93c2VyIGlu
c3RhbmNlcyBpbiBwYXJhbGxlbC4gRm9yIGV4YW1wbGUsIHRvCitoYXZlIHdwdHJ1bm5lciBhdHRl
bXB0IHRvIHJ1biB0ZXN0cyBhZ2FpbnN0IHdpdGggc2l4IGJyb3dzZXIgaW5zdGFuY2VzCitpbiBw
YXJhbGxlbCwgc3BlY2lmeSBgYC0tcHJvY2Vzc2VzPTZgYC4gQnV0IG5vdGUgdGhhdCBiZWhhdmlv
dXIgaW4gdGhpcworbW9kZSBpcyBuZWNlc3NhcmlseSBsZXNzIGRldGVybWluaXN0aWMgdGhhbiB3
aXRoIGBgLS1wcm9jZXNzZXM9MWBgICh0aGUKK2RlZmF1bHQpLCBzbyB0aGVyZSBtYXkgYmUgbW9y
ZSBub2lzZSBpbiB0aGUgdGVzdCByZXN1bHRzLgorCistLS0tLS0tLS0tLS0tLS0tLS0tCitVc2lu
ZyBkZWZhdWx0IHBhdGhzCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSAob3RoZXJ3aXNlLXJl
cXVpcmVkKSBgYC0tdGVzdHNgYCBhbmQgYGAtLW1ldGFkYXRhYGAgY29tbWFuZC1saW5lCitvcHRp
b25zL2ZsYWdzIGJlIG9taXR0ZWQgaWYgYW55IGNvbmZpZ3VyYXRpb24gZmlsZSBpcyBmb3VuZCB0
aGF0Citjb250YWlucyBhIHNlY3Rpb24gc3BlY2lmeWluZyB0aGUgYGB0ZXN0c2BgIGFuZCBgYG1l
dGFkYXRhYGAga2V5cy4KKworU2VlIHRoZSBgQ29uZmlndXJhdGlvbiBGaWxlYF8gc2VjdGlvbiBm
b3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dAorY29uZmlndXJhdGlvbiBmaWxlcywgaW5jbHVkaW5n
IGluZm9ybWF0aW9uIGFib3V0IHRoZWlyIGV4cGVjdGVkCitsb2NhdGlvbnMuCisKK1RoZSBjb250
ZW50IG9mIHRoZSBgYHdwdHJ1bm5lci5kZWZhdWx0LmluaWBgIGRlZmF1bHQgY29uZmlndXJhdGlv
biBmaWxlCittYWtlcyB3cHRydW5uZXIgbG9vayBmb3IgdGVzdHMgKHRoYXQgaXMsIGEgd2ViLXBs
YXRmb3JtLXRlc3RzIGNoZWNrb3V0KQorYXMgYSBzdWJkaXJlY3Rvcnkgb2YgdGhlIGN1cnJlbnQg
ZGlyZWN0b3J5IG5hbWVkIGBgdGVzdHNgYCwgYW5kIGZvcgorbWV0YWRhdGEgZmlsZXMgaW4gYSBz
dWJkaXJlY3Rvcnkgb2YgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IG5hbWVkIGBgbWV0YWBgLgorCitP
dXRwdXQKKy0tLS0tLQorCit3cHRydW5uZXIgdXNlcyB0aGUgOnB5Om1vZDpgbW96bG9nYCBwYWNr
YWdlIGZvciBvdXRwdXQuIFRoaXMKK3N0cnVjdHVyZXMgZXZlbnRzIHN1Y2ggYXMgdGVzdCByZXN1
bHRzIG9yIGxvZyBtZXNzYWdlcyBhcyBKU09OIG9iamVjdHMKK3RoYXQgY2FuIHRoZW4gYmUgZmVk
IHRvIG90aGVyIHRvb2xzIGZvciBpbnRlcnByZXRhdGlvbi4gTW9yZSBkZXRhaWxzCithYm91dCB0
aGUgbWVzc2FnZSBmb3JtYXQgYXJlIGdpdmVuIGluIHRoZQorOnB5Om1vZDpgbW96bG9nYCBkb2N1
bWVudGF0aW9uLgorCitCeSBkZWZhdWx0IHRoZSByYXcgSlNPTiBtZXNzYWdlcyBhcmUgZHVtcGVk
IHRvIHN0ZG91dC4gVGhpcyBpcworY29udmVuaWVudCBmb3IgcGlwaW5nIGludG8gb3RoZXIgdG9v
bHMsIGJ1dCBub3QgaWRlYWwgZm9yIGh1bWFucworcmVhZGluZyB0aGUgb3V0cHV0LiA6cHk6bW9k
OmBtb3psb2dgIGNvbWVzIHdpdGggc2V2ZXJhbCBvdGhlcgorZm9ybWF0dGVycywgd2hpY2ggYXJl
IGFjY2Vzc2libGUgdGhyb3VnaCBjb21tYW5kIGxpbmUgb3B0aW9ucy4gVGhlCitnZW5lcmFsIGZv
cm1hdCBvZiB0aGVzZSBvcHRpb25zIGlzIGBgLS1sb2ctbmFtZT1kZXN0YGAsIHdoZXJlIGBgbmFt
ZWBgCitpcyB0aGUgbmFtZSBvZiB0aGUgZm9ybWF0IGFuZCBgYGRlc3RgYCBpcyBhIHBhdGggdG8g
YSBkZXN0aW5hdGlvbgorZmlsZSwgb3IgYGAtYGAgZm9yIHN0ZG91dC4gVGhlIHJhdyBKU09OIGRh
dGEgaXMgd3JpdHRlbiBieSB0aGUgYGByYXdgYAorZm9ybWF0dGVyIHNvLCB0aGUgZGVmYXVsdCBz
ZXR1cCBjb3JyZXNwb25kcyB0byBgYC0tbG9nLXJhdz0tYGAuCisKK0EgcmVhc29uYWJsZSBvdXRw
dXQgZm9ybWF0IGZvciBodW1hbnMgaXMgcHJvdmlkZWQgYXMgYGBtYWNoYGAuIFNvIGluCitvcmRl
ciB0byBvdXRwdXQgdGhlIGZ1bGwgcmF3IGxvZyB0byBhIGZpbGUgYW5kIGEgaHVtYW4tcmVhZGFi
bGUKK3N1bW1hcnkgdG8gc3Rkb3V0LCBvbmUgbWlnaHQgcGFzcyB0aGUgb3B0aW9uczo6CisKKyAg
LS1sb2ctcmF3PW91dHB1dC5sb2cgLS1sb2ctbWFjaD0tCisKK0NvbmZpZ3VyYXRpb24gRmlsZQor
LS0tLS0tLS0tLS0tLS0tLS0tCisKK3dwdHJ1bm5lciB1c2VzIGEgYGAuaW5pYGAgZmlsZSB0byBj
b250cm9sIHNvbWUgY29uZmlndXJhdGlvbgorc2VjdGlvbnMuIFRoZSBmaWxlIGhhcyB0aHJlZSBz
ZWN0aW9uczsgYGBbcHJvZHVjdHNdYGAsCitgYFttYW5pZmVzdDpkZWZhdWx0XWBgIGFuZCBgYFt3
ZWItcGxhdGZvcm0tdGVzdHNdYGAuCisKK2BgW3Byb2R1Y3RzXWBgIGlzIHVzZWQgdG8KK2RlZmlu
ZSB0aGUgc2V0IG9mIGF2YWlsYWJsZSBwcm9kdWN0cy4gQnkgZGVmYXVsdCB0aGlzIHNlY3Rpb24g
aXMgZW1wdHkKK3doaWNoIG1lYW5zIHRoYXQgYWxsIHRoZSBwcm9kdWN0cyBkaXN0cmlidXRlZCB3
aXRoIHdwdHJ1bm5lciBhcmUKK2VuYWJsZWQgKGFsdGhvdWdoIHRoZWlyIGRlcGVuZGVuY2llcyBt
YXkgbm90IGJlIGluc3RhbGxlZCkuIFRoZSBzZXQKK29mIGVuYWJsZWQgcHJvZHVjdHMgY2FuIGJl
IHNldCBieSB1c2luZyB0aGUgcHJvZHVjdCBuYW1lIGFzIHRoZQora2V5LiBGb3IgYnVpbHQgaW4g
cHJvZHVjdHMgdGhlIHZhbHVlIGlzIGVtcHR5LiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvCitwcm92
aWRlIHRoZSBwYXRoIHRvIGEgc2NyaXB0IGltcGxlbWVudGluZyB0aGUgYnJvd3NlciBmdW5jdGlv
bmFsaXR5CitlLmcuOjoKKworICBbcHJvZHVjdHNdCisgIGNocm9tZSA9CisgIG5ldHNjYXBlNCA9
IHBhdGgvdG8vbmV0c2NhcGUucHkKKworYGBbbWFuaWZlc3Q6ZGVmYXVsdF1gYCBzcGVjaWZpZXMg
dGhlIGRlZmF1bHQgcGF0aHMgZm9yIHRoZSB0ZXN0cyBhbmQgbWV0YWRhdGEsCityZWxhdGl2ZSB0
byB0aGUgY29uZmlnIGZpbGUuIEZvciBleGFtcGxlOjoKKworICBbbWFuaWZlc3Q6ZGVmYXVsdF0K
KyAgdGVzdHMgPSB+L3Rlc3R0d2Yvd2ViLXBsYXRmb3JtLXRlc3RzCisgIG1ldGFkYXRhID0gfi90
ZXN0dHdmL21ldGEKKworCitgYFt3ZWItcGxhdGZvcm0tdGVzdHNdYGAgaXMgdXNlZCB0byBzZXQg
dGhlIHByb3BlcnRpZXMgb2YgdGhlIHVwc3RyZWFtCityZXBvc2l0b3J5IHdoZW4gdXBkYXRpbmcg
dGhlIHBhdGhzLiBgYHJlbW90ZV91cmxgYCBzcGVjaWZpZXMgdGhlIGdpdAordXJsIHRvIHB1bGwg
ZnJvbTsgYGBicmFuY2hgYCB0aGUgYnJhbmNoIHRvIHN5bmMgYWdhaW5zdCBhbmQKK2Bgc3luY19w
YXRoYGAgdGhlIGxvY2FsIHBhdGgsIHJlbGF0aXZlIHRvIHRoZSBjb25maWd1cmF0aW9uIGZpbGUs
IHRvCit1c2Ugd2hlbiBjaGVja2luZyBvdXQgdGhlIHRlc3RzIGUuZy46OgorCisgIFt3ZWItcGxh
dGZvcm0tdGVzdHNdCisgIHJlbW90ZV91cmwgPSBodHRwczovL2dpdGh1Yi5jb20vdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy5naXQKKyAgYnJhbmNoID0gbWFzdGVyCisgIHN5bmNfcGF0aCA9IHN5bmMK
KworQSBjb25maWd1cmF0aW9uIGZpbGUgbXVzdCBjb250YWluIGFsbCB0aGUgYWJvdmUgZmllbGRz
OyBmYWxsaW5nIGJhY2sKK3RvIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgdW5zcGVjaWZpZWQgZmll
bGRzIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLgorCitUaGUgYGB3cHRydW5uZXJgYCBhbmQgYGB3cHR1
cGRhdGVgYCBjb21tYW5kcyB3aWxsIHVzZSBjb25maWd1cmF0aW9uCitmaWxlcyBpbiB0aGUgZm9s
bG93aW5nIG9yZGVyOgorCisgKiBBbnkgcGF0aCBzdXBwbGllZCB3aXRoIGEgYGAtLWNvbmZpZ2Bg
IGZsYWcgdG8gdGhlIGNvbW1hbmQuCisKKyAqIEEgZmlsZSBjYWxsZWQgYGB3cHRydW5uZXIuaW5p
YGAgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5CisKKyAqIFRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRp
b24gZmlsZSAoYGB3cHRydW5uZXIuZGVmYXVsdC5pbmlgYCBpbiB0aGUKKyAgIHNvdXJjZSBkaXJl
Y3RvcnkpCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0
cnVubmVyL3JlcXVpcmVtZW50cy50eHQgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9v
bHMvd3B0cnVubmVyL3JlcXVpcmVtZW50cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLmU5ZDJhMzUwODBhCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVz
dHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci9yZXF1aXJlbWVudHMudHh0CkBAIC0wLDAg
KzEsNCBAQAoraHRtbDVsaWIgPj0gMC45OQorbW96aW5mbyA+PSAwLjcKK21vemxvZyA+PSAzLjUK
K21vemRlYnVnID49IDAuMQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNj
L3Rvb2xzL3dwdHJ1bm5lci9yZXF1aXJlbWVudHNfY2hyb21lLnR4dCBiL1dlYkRyaXZlclRlc3Rz
L2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvcmVxdWlyZW1lbnRzX2Nocm9tZS50eHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmEyZjU0NDI1ZjNlCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci9y
ZXF1aXJlbWVudHNfY2hyb21lLnR4dApAQCAtMCwwICsxLDIgQEAKK21venByb2Nlc3MgPj0gMC4x
OQorc2VsZW5pdW0gPj0gMi40MS4wCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRl
ZC93M2MvdG9vbHMvd3B0cnVubmVyL3JlcXVpcmVtZW50c19lZGdlLnR4dCBiL1dlYkRyaXZlclRl
c3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvcmVxdWlyZW1lbnRzX2VkZ2UudHh0Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hMmY1NDQyNWYzZQotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIv
cmVxdWlyZW1lbnRzX2VkZ2UudHh0CkBAIC0wLDAgKzEsMiBAQAorbW96cHJvY2VzcyA+PSAwLjE5
CitzZWxlbml1bSA+PSAyLjQxLjAKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVk
L3czYy90b29scy93cHRydW5uZXIvcmVxdWlyZW1lbnRzX2ZpcmVmb3gudHh0IGIvV2ViRHJpdmVy
VGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci9yZXF1aXJlbWVudHNfZmlyZWZveC50
eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmQ4ZDI2OGYxMjdiCi0t
LSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1
bm5lci9yZXF1aXJlbWVudHNfZmlyZWZveC50eHQKQEAgLTAsMCArMSw2IEBACittYXJpb25ldHRl
X2RyaXZlciA+PSAwLjQKK21venByb2ZpbGUgPj0gMC4yMQorbW96cHJvY2VzcyA+PSAwLjE5Citt
b3pjcmFzaCA+PSAwLjEzCittb3pydW5uZXIgPj0gNi43Cittb3psZWFrID49IDAuMQpkaWZmIC0t
Z2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci9yZXF1aXJl
bWVudHNfaWUudHh0IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5l
ci9yZXF1aXJlbWVudHNfaWUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi5hMmY1NDQyNWYzZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9y
dGVkL3czYy90b29scy93cHRydW5uZXIvcmVxdWlyZW1lbnRzX2llLnR4dApAQCAtMCwwICsxLDIg
QEAKK21venByb2Nlc3MgPj0gMC4xOQorc2VsZW5pdW0gPj0gMi40MS4wCmRpZmYgLS1naXQgYS9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3JlcXVpcmVtZW50c19z
YXVjZS50eHQgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3Jl
cXVpcmVtZW50c19zYXVjZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLjdiODI4Zjg0YjA4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0
ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci9yZXF1aXJlbWVudHNfc2F1Y2UudHh0CkBAIC0wLDAgKzEs
MiBAQAorbW96cHJvY2VzcyA+PSAwLjE5CitzZWxlbml1bSA+PSAzLjMuMApkaWZmIC0tZ2l0IGEv
V2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci9yZXF1aXJlbWVudHNf
c2Vydm8udHh0IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci9y
ZXF1aXJlbWVudHNfc2Vydm8udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi4yMmJjZmExMjNhNQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9y
dGVkL3czYy90b29scy93cHRydW5uZXIvcmVxdWlyZW1lbnRzX3NlcnZvLnR4dApAQCAtMCwwICsx
IEBACittb3pwcm9jZXNzID49IDAuMTkKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9y
dGVkL3czYy90b29scy93cHRydW5uZXIvc2V0dXAucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRl
ZC93M2MvdG9vbHMvd3B0cnVubmVyL3NldHVwLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi43ZWMxODlmZWZkOQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRl
c3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvc2V0dXAucHkKQEAgLTAsMCArMSw3NCBA
QAorIyBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhl
IE1vemlsbGEgUHVibGljCisjIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwg
d2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMgZmlsZSwKKyMgWW91IGNhbiBvYnRhaW4gb25l
IGF0IGh0dHA6Ly9tb3ppbGxhLm9yZy9NUEwvMi4wLy4KKworaW1wb3J0IGdsb2IKK2ltcG9ydCBv
cworaW1wb3J0IHN5cworaW1wb3J0IHRleHR3cmFwCisKK2Zyb20gc2V0dXB0b29scyBpbXBvcnQg
c2V0dXAsIGZpbmRfcGFja2FnZXMKKworaGVyZSA9IG9zLnBhdGguc3BsaXQoX19maWxlX18pWzBd
CisKK1BBQ0tBR0VfTkFNRSA9ICd3cHRydW5uZXInCitQQUNLQUdFX1ZFUlNJT04gPSAnMS4xNCcK
KworIyBEZXBlbmRlbmNpZXMKK3dpdGggb3Blbihvcy5wYXRoLmpvaW4oaGVyZSwgInJlcXVpcmVt
ZW50cy50eHQiKSkgYXMgZjoKKyAgICBkZXBzID0gZi5yZWFkKCkuc3BsaXRsaW5lcygpCisKKyMg
QnJvd3Nlci1zcGVjaWZpYyByZXF1aXJlbWVudHMKK3JlcXVpcmVtZW50c19maWxlcyA9IGdsb2Iu
Z2xvYigicmVxdWlyZW1lbnRzXyoudHh0IikKKworcHJvZmlsZV9kZXN0ID0gTm9uZQorZGVzdF9l
eGlzdHMgPSBGYWxzZQorCitzZXR1cChuYW1lPVBBQ0tBR0VfTkFNRSwKKyAgICAgIHZlcnNpb249
UEFDS0FHRV9WRVJTSU9OLAorICAgICAgZGVzY3JpcHRpb249Ikhhcm5lc3MgZm9yIHJ1bm5pbmcg
dGhlIFczQyB3ZWItcGxhdGZvcm0tdGVzdHMgYWdhaW5zdCB2YXJpb3VzIHByb2R1Y3RzIiwKKyAg
ICAgIGF1dGhvcj0nTW96aWxsYSBBdXRvbWF0aW9uIGFuZCBUZXN0aW5nIFRlYW0nLAorICAgICAg
YXV0aG9yX2VtYWlsPSd0b29sc0BsaXN0cy5tb3ppbGxhLm9yZycsCisgICAgICBsaWNlbnNlPSdN
UEwgMi4wJywKKyAgICAgIHBhY2thZ2VzPWZpbmRfcGFja2FnZXMoZXhjbHVkZT1bInRlc3RzIiwg
Im1ldGFkYXRhIiwgInByZWZzIl0pLAorICAgICAgZW50cnlfcG9pbnRzPXsKKyAgICAgICAgICAn
Y29uc29sZV9zY3JpcHRzJzogWworICAgICAgICAgICAgICAnd3B0cnVubmVyID0gd3B0cnVubmVy
LndwdHJ1bm5lcjptYWluJywKKyAgICAgICAgICAgICAgJ3dwdHVwZGF0ZSA9IHdwdHJ1bm5lci51
cGRhdGU6bWFpbicsCisgICAgICAgICAgXQorICAgICAgfSwKKyAgICAgIHppcF9zYWZlPUZhbHNl
LAorICAgICAgcGxhdGZvcm1zPVsnQW55J10sCisgICAgICBjbGFzc2lmaWVycz1bJ0RldmVsb3Bt
ZW50IFN0YXR1cyA6OiA0IC0gQmV0YScsCisgICAgICAgICAgICAgICAgICAgJ0Vudmlyb25tZW50
IDo6IENvbnNvbGUnLAorICAgICAgICAgICAgICAgICAgICdJbnRlbmRlZCBBdWRpZW5jZSA6OiBE
ZXZlbG9wZXJzJywKKyAgICAgICAgICAgICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQg
OjogQlNEIExpY2Vuc2UnLAorICAgICAgICAgICAgICAgICAgICdPcGVyYXRpbmcgU3lzdGVtIDo6
IE9TIEluZGVwZW5kZW50J10sCisgICAgICBwYWNrYWdlX2RhdGE9eyJ3cHRydW5uZXIiOiBbImV4
ZWN1dG9ycy90ZXN0aGFybmVzc19tYXJpb25ldHRlLmpzIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiZXhlY3V0b3JzL3Rlc3RoYXJuZXNzX3dlYmRyaXZlci5qcyIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4ZWN1dG9ycy9yZWZ0ZXN0LmpzIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhlY3V0b3JzL3JlZnRlc3Qtd2FpdC5q
cyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3RoYXJuZXNzcmVwb3J0
LmpzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdGhhcm5lc3NfcnVu
bmVyLmh0bWwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb25maWcuanNv
biIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndwdHJ1bm5lci5kZWZhdWx0
LmluaSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJyb3dzZXJzL3NlcnZl
ci1sb2NhdGlvbnMudHh0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnJv
d3NlcnMvYjJnX3NldHVwLyoiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJi
cm93c2Vycy9zYXVjZV9zZXR1cC8qIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAicHJlZnMvKiJdfSwKKyAgICAgIGluY2x1ZGVfcGFja2FnZV9kYXRhPVRydWUsCisgICAgICBk
YXRhX2ZpbGVzPVsoInJlcXVpcmVtZW50cyIsIHJlcXVpcmVtZW50c19maWxlcyldLAorICAgICAg
aW5zdGFsbF9yZXF1aXJlcz1kZXBzCisgICAgICkKKworaWYgImluc3RhbGwiIGluIHN5cy5hcmd2
OgorICAgIHBhdGggPSBvcy5wYXRoLnJlbHBhdGgob3MucGF0aC5qb2luKHN5cy5wcmVmaXgsICJy
ZXF1aXJlbWVudHMiKSwgb3MuY3VyZGlyKQorICAgIHByaW50IHRleHR3cmFwLmZpbGwoIiIiSW4g
b3JkZXIgdG8gdXNlIHdpdGggb25lIG9mIHRoZSBidWlsdC1pbiBicm93c2VyCitwcm9kdWN0cywg
eW91IHdpbGwgbmVlZCB0byBpbnN0YWxsIHRoZSBleHRyYSBkZXBlbmRlbmNpZXMuIFRoZXNlIGFy
ZSBwcm92aWRlZAorYXMgcmVxdWlyZW1lbnRzX1tuYW1lXS50eHQgaW4gdGhlICVzIGRpcmVjdG9y
eSBhbmQgY2FuIGJlIGluc3RhbGxlZCB1c2luZworZS5nLiIiIiAlIHBhdGgsIDgwKQorCisgICAg
cHJpbnQgIiIiCisKK3BpcCBpbnN0YWxsIC1yICVzL3JlcXVpcmVtZW50c19maXJlZm94LnR4dAor
IiIiICUgcGF0aApkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xz
L3dwdHJ1bm5lci90b3guaW5pIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dw
dHJ1bm5lci90b3guaW5pCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43
OTA5NzA0MDlmMwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3cz
Yy90b29scy93cHRydW5uZXIvdG94LmluaQpAQCAtMCwwICsxLDE3IEBACitbcHl0ZXN0XQoreGZh
aWxfc3RyaWN0PXRydWUKKworW3RveF0KK2Vudmxpc3QgPSB7cHkyNyxweXB5fS17YmFzZSxiMmcs
Y2hyb21lLGZpcmVmb3gsc2Vydm99CisKK1t0ZXN0ZW52XQorZGVwcyA9CisgICAgIHB5dGVzdD49
Mi45CisgICAgIHB5dGVzdC1jb3YKKyAgICAgcHl0ZXN0LXhkaXN0CisgICAgIC1ye3RveGluaWRp
cn0vcmVxdWlyZW1lbnRzLnR4dAorICAgICBjaHJvbWU6IC1ye3RveGluaWRpcn0vcmVxdWlyZW1l
bnRzX2Nocm9tZS50eHQKKyAgICAgZmlyZWZveDogLXJ7dG94aW5pZGlyfS9yZXF1aXJlbWVudHNf
ZmlyZWZveC50eHQKKyAgICAgc2Vydm86IC1ye3RveGluaWRpcn0vcmVxdWlyZW1lbnRzX3NlcnZv
LnR4dAorCitjb21tYW5kcyA9IHB5dGVzdCAtLWNvdgpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVz
dHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIuZGVmYXVsdC5pbmkgYi9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci5kZWZh
dWx0LmluaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMzRkMjVmODA1
NmIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMv
d3B0cnVubmVyL3dwdHJ1bm5lci5kZWZhdWx0LmluaQpAQCAtMCwwICsxLDExIEBACitbcHJvZHVj
dHNdCisKK1t3ZWItcGxhdGZvcm0tdGVzdHNdCityZW1vdGVfdXJsID0gaHR0cHM6Ly9naXRodWIu
Y29tL3czYy93ZWItcGxhdGZvcm0tdGVzdHMuZ2l0CiticmFuY2ggPSBtYXN0ZXIKK3N5bmNfcGF0
aCA9ICUocHdkKXMvc3luYworCitbbWFuaWZlc3Q6ZGVmYXVsdF0KK3Rlc3RzID0gJShwd2Qpcy90
ZXN0cworbWV0YWRhdGEgPSAlKHB3ZClzL21ldGEKK3VybF9iYXNlID0gLwpcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90
b29scy93cHRydW5uZXIvd3B0cnVubmVyL19faW5pdF9fLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1w
b3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvX19pbml0X18ucHkKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmU2OWRlMjliYjJkCmRpZmYgLS1naXQgYS9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9icm93
c2Vycy9fX2luaXRfXy5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRy
dW5uZXIvd3B0cnVubmVyL2Jyb3dzZXJzL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwLi5jNGVhOTcxZmI2ZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRy
aXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2Jyb3dzZXJz
L19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMzEgQEAKKyIiIlN1YnBhY2thZ2Ugd2hlcmUgZWFjaCBw
cm9kdWN0IGlzIGRlZmluZWQuIEVhY2ggcHJvZHVjdCBpcyBjcmVhdGVkIGJ5IGFkZGluZyBhCith
IC5weSBmaWxlIGNvbnRhaW5pbmcgYSBfX3dwdHJ1bm5lcl9fIHZhcmlhYmxlIGluIHRoZSBnbG9i
YWwgc2NvcGUuIFRoaXMgbXVzdCBiZQorYSBkaWN0aW9uYXJ5IHdpdGggdGhlIGZpZWxkcworCisi
cHJvZHVjdCI6IE5hbWUgb2YgdGhlIHByb2R1Y3QsIGFzc3VtZWQgdG8gYmUgdW5pcXVlLgorImJy
b3dzZXIiOiBTdHJpbmcgaW5kaWNhdGluZyB0aGUgQnJvd3NlciBpbXBsZW1lbnRhdGlvbiB1c2Vk
IHRvIGxhdW5jaCB0aGF0CisgICAgICAgICAgIHByb2R1Y3QuCisiZXhlY3V0b3IiOiBEaWN0aW9u
YXJ5IHdpdGgga2V5cyBhcyBzdXBwb3J0ZWQgdGVzdCB0eXBlcyBhbmQgdmFsdWVzIGFzIHRoZSBu
YW1lCisgICAgICAgICAgICBvZiB0aGUgRXhlY3V0b3IgaW1wbGVtYW50YXRpb24gdGhhdCB3aWxs
IGJlIHVzZWQgdG8gcnVuIHRoYXQgdGVzdAorICAgICAgICAgICAgdHlwZS4KKyJicm93c2VyX2t3
YXJncyI6IFN0cmluZyBuYW1pbmcgZnVuY3Rpb24gdGhhdCB0YWtlcyBwcm9kdWN0LCBiaW5hcnks
CisgICAgICAgICAgICAgICAgICBwcmVmc19yb290IGFuZCB0aGUgd3B0cnVubmVyLnJ1bl90ZXN0
cyBrd2FyZ3MgZGljdCBhcyBhcmd1bWVudHMKKyAgICAgICAgICAgICAgICAgIGFuZCByZXR1cm5z
IGEgZGljdGlvbmFyeSBvZiBrd2FyZ3MgdG8gdXNlIHdoZW4gY3JlYXRpbmcgdGhlCisgICAgICAg
ICAgICAgICAgICBCcm93c2VyIGNsYXNzLgorImV4ZWN1dG9yX2t3YXJncyI6IFN0cmluZyBuYW1p
bmcgYSBmdW5jdGlvbiB0aGF0IHRha2VzIGh0dHAgc2VydmVyIHVybCBhbmQKKyAgICAgICAgICAg
ICAgICAgICB0aW1lb3V0IG11bHRpcGxpZXIgYW5kIHJldHVybnMga3dhcmdzIHRvIHVzZSB3aGVu
IGNyZWF0aW5nCisgICAgICAgICAgICAgICAgICAgdGhlIGV4ZWN1dG9yIGNsYXNzLgorImVudl9v
cHRpb25zIjogU3RyaW5nIG5hbWluZyBhIGZ1bnRpb24gb2Ygbm8gYXJndW1lbnRzIHRoYXQgcmV0
dXJucyB0aGUKKyAgICAgICAgICAgICAgIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIFRlc3RFbnZp
cm9ubWVudC4KKworQWxsIGNsYXNzZXMgYW5kIGZ1bmN0aW9ucyBuYW1lZCBpbiB0aGUgYWJvdmUg
ZGljdCBtdXN0IGJlIGltcG9ydGVkIGludG8gdGhlCittb2R1bGUgZ2xvYmFsIHNjb3BlLgorIiIi
CisKK3Byb2R1Y3RfbGlzdCA9IFsiY2hyb21lIiwKKyAgICAgICAgICAgICAgICAiZWRnZSIsCisg
ICAgICAgICAgICAgICAgImZpcmVmb3giLAorICAgICAgICAgICAgICAgICJpZSIsCisgICAgICAg
ICAgICAgICAgInNhdWNlIiwKKyAgICAgICAgICAgICAgICAic2Vydm8iLAorICAgICAgICAgICAg
ICAgICJzZXJ2b2RyaXZlciJdCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93
M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9icm93c2Vycy9iMmdfc2V0dXAvY2VydHRlc3Rf
YXBwLnppcCBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0
cnVubmVyL2Jyb3dzZXJzL2IyZ19zZXR1cC9jZXJ0dGVzdF9hcHAuemlwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY5
Y2JkNTMwMGFkNjUwZjgzNjlhYjAyYTRhZGM4ODY2YTVmMGRlYTEKR0lUIGJpbmFyeSBwYXRjaAps
aXRlcmFsIDEyMzcKemNtV0lXV0BacyNVfGBeMkZqdldPRGZ6VH10cVlKQjE7a3RvRzdPbntEWEE1
RDg2fitucCZeX00lJG1qVyFLT0Q5CnpnRygjODg1bWk8R0JQbExePT1PSUlxOSNyUXBZM29ndlFD
VTh5fDBLM3whZiVTIVNqPlFgS14xbmJ8SmBEVjxaUAp6bGMmck4kfj9ZdyFHayRiQXdyWClWaXJB
ITJzbl9zbXx1YD42X1llMExqYz96VmlvbW5Wam4pbmNgYEZGP0JaZnoKejswTC1SSCEmfFdFdyM4
cnVSSnY9djdpOSM3I1RPSVA8YkZtYklqWkAtfjdpR0piUy1+YjZFRHpzP0stU3VmQTgtCnokU1Qm
e3NDMDNvZlR4SXgpalhlenxNeUxLZCEqPWIqYD1LPDF9RHwpWTtCKUBfM1E4cmtUY14/YHBuVzly
IWN2cQp6cnx8UklpV2VnNntifktWSXh7WmpENztRbGpeeUV2bmZ6bWsrLTFpTW8rVVhBQ1FOZilI
UmFYMnhhS25FPFFqYlYKenlpZkswSWQteyZpQkNTVGU+fk47WVE9UTFCYTJsNj5OcnlVcl5nZy1h
V1M7ZCp9bThJTXNAJUdITn4md0Y0ejZPCnpBP1cyKVFoQiZ4eUNTM2YrdVU8ODFAblM2bVFSeDNj
WW9QcFFOZm10WWowa1k+PChKKDUhPllZO1lDSSQkQWMjWQp6SCV4T3JPe0BISFF2TWdTK1dJQHs/
fkxsIVVofCZhRz5QfU8oTHckQEVQUDRiND98cXZPdEVfLVR6MnBUazdEd3YKeikjckYjV3wmXkZ5
VXk2WlZAPmZrKWk8OVBGYFR2YlMhTEV4RVZIYTlZXlU1WTJYUzlqPio7R3ZwS099dSVhcjtuCnpo
MTJZaiUqaVgoMD59RSprYCZZdXY/WHFTYkkpY0ZLWDxBMU9wRTgraGw8NmJDKVhed0BATW16b2Q7
WjNiQnBGXwp6bGArYl5gZX04aHtOXmtEI1VWWX1ELUN2Qj8jWmtQSXh7aUx0PWdlSUpiQ019dEdC
bCttVk5tYlRfdEshbX0rKyoKenY7QT8kZDl7QSkqQTNUWTlybTkjK3tGfGlJTl85Q3E+OHU4Znx8
RHttVDFKUV5QanpTWDQ+MjBHYzBRJlBne3drCnpGIWklK04/Jj90VXkpdSolQz04P249YnM2VTIt
fmhXfiktdGVoLTEmRzUyVGx4WVUmOUU0WTB0eShIcih0SDY2fQp6KGd2fnFQVWZ2b3IqUXQrVTtq
N3VyaWM1P0s9fW82UGlKe2VffVgzOWNZP1BuXzRPM3k/Ymt5I3I3UTlNNE82PXoKelN7Qzx5JjIj
UDhOY35yXzUtJTQ3PDs3akZLUl5CYVJgb1pUOX50SEBlZiVzdWBAazdpaUh3bHZGT0VsZUlRRVAz
CnpfP19vfCt+cjtRemp0VGNeNmdMbU13aUU+YVBIN3BhWVJCQFJrWC1oPWR3RkglWGE3ODg0K3Qh
ZTBLTj9tKnoyVgp6M1RVITVga1pvRGVFbyRMOH48PzRlZzY2QXBgVEp9emopSE9LM2wrU2VuUSU4
ekg4UndzYXFCdjQwO3J6UkAxZFkKeiZ1RCt+dUJwZTtkZmgkWlRQKTlMK1pPISFvX0trNFVURG1o
Z2Yme1JQaUlZZGZBWktySilpZWVVKzhYNEk/ITFwCno9K2YtVF4yVzh+KXNmITxPVFcrRHpIO2BD
fDdNIyR0K3sqVT9tVz5XZU9IQVBJQVgmbVpMakhpUH09ZF9RSzRAMwp6bXJafUJYVEduJEBaKUxF
JmRQdEU2VEtke2NLa0dkSktla1RkKWFzVTBCPVNuSWM4akNnOU5hSVV8O34yMDFRaFMKd0tgaTh3
ZikhRnlwaysqQ15EeSVgdlV3ZHFeRHVIZSZgP20wJDFzJFk0UC1xTjVIMURNUVk7YEkwTDY5ITNJ
RzVBCgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9p
bXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9icm93c2Vycy9iYXNlLnB5IGIv
V2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvYnJv
d3NlcnMvYmFzZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZTRj
OWMzMDFiZDUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mv
dG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9icm93c2Vycy9iYXNlLnB5CkBAIC0wLDAgKzEsMTY2
IEBACitpbXBvcnQgb3MKK2ltcG9ydCBwbGF0Zm9ybQoraW1wb3J0IHNvY2tldAorZnJvbSBhYmMg
aW1wb3J0IEFCQ01ldGEsIGFic3RyYWN0bWV0aG9kCisKK2Zyb20gLi53cHRjb21tYW5kbGluZSBp
bXBvcnQgcmVxdWlyZV9hcmcKKworaGVyZSA9IG9zLnBhdGguc3BsaXQoX19maWxlX18pWzBdCisK
KworZGVmIGNtZF9hcmcobmFtZSwgdmFsdWU9Tm9uZSk6CisgICAgcHJlZml4ID0gIi0iIGlmIHBs
YXRmb3JtLnN5c3RlbSgpID09ICJXaW5kb3dzIiBlbHNlICItLSIKKyAgICBydiA9IHByZWZpeCAr
IG5hbWUKKyAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAgICAgcnYgKz0gIj0iICsgdmFs
dWUKKyAgICByZXR1cm4gcnYKKworCitkZWYgZ2V0X2ZyZWVfcG9ydChzdGFydF9wb3J0LCBleGNs
dWRlPU5vbmUpOgorICAgICIiIkdldCB0aGUgZmlyc3QgcG9ydCBudW1iZXIgYWZ0ZXIgc3RhcnRf
cG9ydCAoaW5jbHVzaXZlKSB0aGF0IGlzCisgICAgbm90IGN1cnJlbnRseSBib3VuZC4KKworICAg
IDpwYXJhbSBzdGFydF9wb3J0OiBJbnRlZ2VyIHBvcnQgbnVtYmVyIGF0IHdoaWNoIHRvIHN0YXJ0
IHRlc3RpbmcuCisgICAgOnBhcmFtIGV4Y2x1ZGU6IFNldCBvZiBwb3J0IG51bWJlcnMgdG8gc2tp
cCIiIgorICAgIHBvcnQgPSBzdGFydF9wb3J0CisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgaWYg
ZXhjbHVkZSBhbmQgcG9ydCBpbiBleGNsdWRlOgorICAgICAgICAgICAgcG9ydCArPSAxCisgICAg
ICAgICAgICBjb250aW51ZQorICAgICAgICBzID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIHRy
eToKKyAgICAgICAgICAgIHMuYmluZCgoIjEyNy4wLjAuMSIsIHBvcnQpKQorICAgICAgICBleGNl
cHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgcG9ydCArPSAxCisgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICByZXR1cm4gcG9ydAorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgcy5j
bG9zZSgpCisKK2RlZiBicm93c2VyX2NvbW1hbmQoYmluYXJ5LCBhcmdzLCBkZWJ1Z19pbmZvKToK
KyAgICBpZiBkZWJ1Z19pbmZvOgorICAgICAgICBpZiBkZWJ1Z19pbmZvLnJlcXVpcmVzRXNjYXBl
ZEFyZ3M6CisgICAgICAgICAgICBhcmdzID0gW2l0ZW0ucmVwbGFjZSgiJiIsICJcXCYiKSBmb3Ig
aXRlbSBpbiBhcmdzXQorICAgICAgICBkZWJ1Z19hcmdzID0gW2RlYnVnX2luZm8ucGF0aF0gKyBk
ZWJ1Z19pbmZvLmFyZ3MKKyAgICBlbHNlOgorICAgICAgICBkZWJ1Z19hcmdzID0gW10KKworICAg
IGNvbW1hbmQgPSBbYmluYXJ5XSArIGFyZ3MKKworICAgIHJldHVybiBkZWJ1Z19hcmdzLCBjb21t
YW5kCisKKworY2xhc3MgQnJvd3NlckVycm9yKEV4Y2VwdGlvbik6CisgICAgcGFzcworCisKK2Ns
YXNzIEJyb3dzZXIob2JqZWN0KToKKyAgICBfX21ldGFjbGFzc19fID0gQUJDTWV0YQorCisgICAg
cHJvY2Vzc19jbHMgPSBOb25lCisgICAgaW5pdF90aW1lb3V0ID0gMzAKKworICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBsb2dnZXIpOgorICAgICAgICAiIiJBYnN0cmFjdCBjbGFzcyBzZXJ2aW5nIGFz
IHRoZSBiYXNpcyBmb3IgQnJvd3NlciBpbXBsZW1lbnRhdGlvbnMuCisKKyAgICAgICAgVGhlIEJy
b3dzZXIgaXMgdXNlZCBpbiB0aGUgVGVzdFJ1bm5lck1hbmFnZXIgdG8gc3RhcnQgYW5kIHN0b3Ag
dGhlIGJyb3dzZXIKKyAgICAgICAgcHJvY2VzcywgYW5kIHRvIGNoZWNrIHRoZSBzdGF0ZSBvZiB0
aGF0IHByb2Nlc3MuIFRoaXMgY2xhc3MgYWxzbyBhY3RzIGFzIGEKKyAgICAgICAgY29udGV4dCBt
YW5hZ2VyLCBlbmFibGluZyBpdCB0byBkbyBicm93c2VyLXNwZWNpZmljIHNldHVwIGF0IHRoZSBz
dGFydCBvZgorICAgICAgICB0aGUgdGVzdHJ1biBhbmQgY2xlYW51cCBhZnRlciB0aGUgcnVuIGlz
IGNvbXBsZXRlLgorCisgICAgICAgIDpwYXJhbSBsb2dnZXI6IFN0cnVjdHVyZWQgbG9nZ2VyIHRv
IHVzZSBmb3Igb3V0cHV0LgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5sb2dnZXIgPSBsb2dn
ZXIKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHNlbGYuc2V0dXAoKQorICAg
ICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzLCAqKmt3YXJn
cyk6CisgICAgICAgIHNlbGYuY2xlYW51cCgpCisKKyAgICBkZWYgc2V0dXAoc2VsZik6CisgICAg
ICAgICIiIlVzZWQgZm9yIGJyb3dzZXItc3BlY2lmaWMgc2V0dXAgdGhhdCBoYXBwZW5zIGF0IHRo
ZSBzdGFydCBvZiBhIHRlc3QgcnVuIiIiCisgICAgICAgIHBhc3MKKworICAgIGRlZiBzZXR0aW5n
cyhzZWxmLCB0ZXN0KToKKyAgICAgICAgcmV0dXJuIHt9CisKKyAgICBAYWJzdHJhY3RtZXRob2QK
KyAgICBkZWYgc3RhcnQoc2VsZiwgKiprd2FyZ3MpOgorICAgICAgICAiIiJMYXVuY2ggdGhlIGJy
b3dzZXIgb2JqZWN0IGFuZCBnZXQgaXQgaW50byBhIHN0YXRlIHdoZXJlIGlzIGlzIHJlYWR5IHRv
IHJ1biB0ZXN0cyIiIgorICAgICAgICBwYXNzCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBk
ZWYgc3RvcChzZWxmLCBmb3JjZT1GYWxzZSk6CisgICAgICAgICIiIlN0b3AgdGhlIHJ1bm5pbmcg
YnJvd3NlciBwcm9jZXNzLiIiIgorICAgICAgICBwYXNzCisKKyAgICBAYWJzdHJhY3RtZXRob2QK
KyAgICBkZWYgcGlkKHNlbGYpOgorICAgICAgICAiIiJwaWQgb2YgdGhlIGJyb3dzZXIgcHJvY2Vz
cyBvciBOb25lIGlmIHRoZXJlIGlzIG5vIHBpZCIiIgorICAgICAgICBwYXNzCisKKyAgICBAYWJz
dHJhY3RtZXRob2QKKyAgICBkZWYgaXNfYWxpdmUoc2VsZik6CisgICAgICAgICIiIkJvb2xlYW4g
aW5kaWNhdGluZyB3aGV0aGVyIHRoZSBicm93c2VyIHByb2Nlc3MgaXMgc3RpbGwgcnVubmluZyIi
IgorICAgICAgICBwYXNzCisKKyAgICBkZWYgc2V0dXBfc3NsKHNlbGYsIGhvc3RzKToKKyAgICAg
ICAgIiIiUmV0dXJuIGEgY2VydGlmaWNhdGUgdG8gdXNlIGZvciB0ZXN0cyByZXF1aXJpbmcgc3Ns
IHRoYXQgd2lsbCBiZSB0cnVzdGVkIGJ5IHRoZSBicm93c2VyIiIiCisgICAgICAgIHJhaXNlIE5v
dEltcGxlbWVudGVkRXJyb3IoInNzbCB0ZXN0aW5nIG5vdCBzdXBwb3J0ZWQiKQorCisgICAgZGVm
IGNsZWFudXAoc2VsZik6CisgICAgICAgICIiIkJyb3dzZXItc3BlY2lmaWMgY2xlYW51cCB0aGF0
IGlzIHJ1biBhZnRlciB0aGUgdGVzdHJ1biBpcyBmaW5pc2hlZCIiIgorICAgICAgICBwYXNzCisK
KyAgICBkZWYgZXhlY3V0b3JfYnJvd3NlcihzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUg
RXhlY3V0b3JCcm93c2VyIHN1YmNsYXNzIGZvciB0aGlzIEJyb3dzZXIgc3ViY2xhc3MgYW5kIHRo
ZSBrZXl3b3JkIGFyZ3VtZW50cworICAgICAgICB3aXRoIHdoaWNoIGl0IHNob3VsZCBiZSBpbnN0
YW50aWF0ZWQiIiIKKyAgICAgICAgcmV0dXJuIEV4ZWN1dG9yQnJvd3Nlciwge30KKworICAgIGRl
ZiBjaGVja19mb3JfY3Jhc2hlcyhzZWxmKToKKyAgICAgICAgIiIiQ2hlY2sgZm9yIGNyYXNoZXMg
dGhhdCBkaWRuJ3QgY2F1c2UgdGhlIGJyb3dzZXIgcHJvY2VzcyB0byB0ZXJtaW5hdGUiIiIKKyAg
ICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgbG9nX2NyYXNoKHNlbGYsIHByb2Nlc3MsIHRl
c3QpOgorICAgICAgICAiIiJSZXR1cm4gYSBsaXN0IG9mIGRpY3Rpb25hcmllcyBjb250YWluaW5n
IGluZm9ybWF0aW9uIGFib3V0IGNyYXNoZXMgdGhhdCBoYXBwZW5kCisgICAgICAgIGluIHRoZSBi
cm93c2VyLCBvciBhbiBlbXB0eSBsaXN0IGlmIG5vIGNyYXNoZXMgb2NjdXJyZWQiIiIKKyAgICAg
ICAgc2VsZi5sb2dnZXIuY3Jhc2gocHJvY2VzcywgdGVzdCkKKworCitjbGFzcyBOdWxsQnJvd3Nl
cihCcm93c2VyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9nZ2VyLCAqKmt3YXJncyk6Cisg
ICAgICAgIHN1cGVyKE51bGxCcm93c2VyLCBzZWxmKS5fX2luaXRfXyhsb2dnZXIpCisKKyAgICBk
ZWYgc3RhcnQoc2VsZiwgKiprd2FyZ3MpOgorICAgICAgICAiIiJOby1vcCBicm93c2VyIHRvIHVz
ZSBpbiBzY2VuYXJpb3Mgd2hlcmUgdGhlIFRlc3RSdW5uZXJNYW5hZ2VyIHNob3VsZG4ndAorICAg
ICAgICBhY3R1YWxseSBvd24gdGhlIGJyb3dzZXIgcHJvY2VzcyAoZS5nLiBTZXJ2byB3aGVyZSB3
ZSBzdGFydCBvbmUgYnJvd3NlcgorICAgICAgICBwZXIgdGVzdCkiIiIKKyAgICAgICAgcGFzcwor
CisgICAgZGVmIHN0b3Aoc2VsZiwgZm9yY2U9RmFsc2UpOgorICAgICAgICBwYXNzCisKKyAgICBk
ZWYgcGlkKHNlbGYpOgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIGlzX2FsaXZlKHNl
bGYpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIG9uX291dHB1dChzZWxmLCBsaW5l
KToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisKK2NsYXNzIEV4ZWN1dG9y
QnJvd3NlcihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqKmt3YXJncyk6CisgICAg
ICAgICIiIlZpZXcgb2YgdGhlIEJyb3dzZXIgdXNlZCBieSB0aGUgRXhlY3V0b3Igb2JqZWN0Lgor
ICAgICAgICBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHRoZSBFeGVjdXRvciBydW5zIGluIGEgY2hp
bGQgcHJvY2VzcyBhbmQKKyAgICAgICAgd2UgY2FuJ3Qgc2hpcCBCcm93c2VyIGluc3RhbmNlcyBi
ZXR3ZWVuIHByb2Nlc3NlcyBvbiBXaW5kb3dzLgorCisgICAgICAgIFR5cGljYWxseSB0aGlzIHdp
bGwgaGF2ZSBhIGZldyBwcm9kdWN0LXNwZWNpZmljIHByb3BlcnRpZXMgc2V0LAorICAgICAgICBi
dXQgaW4gc29tZSBjYXNlcyBpdCBtYXkgaGF2ZSBtb3JlIGVsYWJvcmF0ZSBtZXRob2RzIGZvciBz
ZXR0aW5nCisgICAgICAgIHVwIHRoZSBicm93c2VyIGZyb20gdGhlIHJ1bm5lciBwcm9jZXNzLgor
ICAgICAgICAiIiIKKyAgICAgICAgZm9yIGssIHYgaW4ga3dhcmdzLml0ZXJpdGVtcygpOgorICAg
ICAgICAgICAgc2V0YXR0cihzZWxmLCBrLCB2KQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMv
aW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvYnJvd3NlcnMvY2hyb21lLnB5
IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIv
YnJvd3NlcnMvY2hyb21lLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li4yMTVmY2NmZmUyYQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVk
L3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2Jyb3dzZXJzL2Nocm9tZS5weQpAQCAtMCww
ICsxLDEwMSBAQAorZnJvbSAuYmFzZSBpbXBvcnQgQnJvd3NlciwgRXhlY3V0b3JCcm93c2VyLCBy
ZXF1aXJlX2FyZworZnJvbSAuLndlYmRyaXZlcl9zZXJ2ZXIgaW1wb3J0IENocm9tZURyaXZlclNl
cnZlcgorZnJvbSAuLmV4ZWN1dG9ycyBpbXBvcnQgZXhlY3V0b3Jfa3dhcmdzIGFzIGJhc2VfZXhl
Y3V0b3Jfa3dhcmdzCitmcm9tIC4uZXhlY3V0b3JzLmV4ZWN1dG9yc2VsZW5pdW0gaW1wb3J0IChT
ZWxlbml1bVRlc3RoYXJuZXNzRXhlY3V0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTZWxlbml1bVJlZlRlc3RFeGVjdXRvcikKK2Zyb20gLi5leGVjdXRvcnMu
ZXhlY3V0b3JjaHJvbWUgaW1wb3J0IENocm9tZURyaXZlcldkc3BlY0V4ZWN1dG9yCisKKworX193
cHRydW5uZXJfXyA9IHsicHJvZHVjdCI6ICJjaHJvbWUiLAorICAgICAgICAgICAgICAgICAiY2hl
Y2tfYXJncyI6ICJjaGVja19hcmdzIiwKKyAgICAgICAgICAgICAgICAgImJyb3dzZXIiOiAiQ2hy
b21lQnJvd3NlciIsCisgICAgICAgICAgICAgICAgICJleGVjdXRvciI6IHsidGVzdGhhcm5lc3Mi
OiAiU2VsZW5pdW1UZXN0aGFybmVzc0V4ZWN1dG9yIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJyZWZ0ZXN0IjogIlNlbGVuaXVtUmVmVGVzdEV4ZWN1dG9yIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJ3ZHNwZWMiOiAiQ2hyb21lRHJpdmVyV2RzcGVjRXhlY3V0b3Ii
fSwKKyAgICAgICAgICAgICAgICAgImJyb3dzZXJfa3dhcmdzIjogImJyb3dzZXJfa3dhcmdzIiwK
KyAgICAgICAgICAgICAgICAgImV4ZWN1dG9yX2t3YXJncyI6ICJleGVjdXRvcl9rd2FyZ3MiLAor
ICAgICAgICAgICAgICAgICAiZW52X2V4dHJhcyI6ICJlbnZfZXh0cmFzIiwKKyAgICAgICAgICAg
ICAgICAgImVudl9vcHRpb25zIjogImVudl9vcHRpb25zIn0KKworCitkZWYgY2hlY2tfYXJncygq
Kmt3YXJncyk6CisgICAgcmVxdWlyZV9hcmcoa3dhcmdzLCAid2ViZHJpdmVyX2JpbmFyeSIpCisK
KworZGVmIGJyb3dzZXJfa3dhcmdzKHRlc3RfdHlwZSwgcnVuX2luZm9fZGF0YSwgKiprd2FyZ3Mp
OgorICAgIHJldHVybiB7ImJpbmFyeSI6IGt3YXJnc1siYmluYXJ5Il0sCisgICAgICAgICAgICAi
d2ViZHJpdmVyX2JpbmFyeSI6IGt3YXJnc1sid2ViZHJpdmVyX2JpbmFyeSJdLAorICAgICAgICAg
ICAgIndlYmRyaXZlcl9hcmdzIjoga3dhcmdzLmdldCgid2ViZHJpdmVyX2FyZ3MiKX0KKworCitk
ZWYgZXhlY3V0b3Jfa3dhcmdzKHRlc3RfdHlwZSwgc2VydmVyX2NvbmZpZywgY2FjaGVfbWFuYWdl
ciwgcnVuX2luZm9fZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpOgorICAgIGZy
b20gc2VsZW5pdW0ud2ViZHJpdmVyIGltcG9ydCBEZXNpcmVkQ2FwYWJpbGl0aWVzCisKKyAgICBl
eGVjdXRvcl9rd2FyZ3MgPSBiYXNlX2V4ZWN1dG9yX2t3YXJncyh0ZXN0X3R5cGUsIHNlcnZlcl9j
b25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVf
bWFuYWdlciwgKiprd2FyZ3MpCisgICAgZXhlY3V0b3Jfa3dhcmdzWyJjbG9zZV9hZnRlcl9kb25l
Il0gPSBUcnVlCisgICAgY2FwYWJpbGl0aWVzID0gZGljdChEZXNpcmVkQ2FwYWJpbGl0aWVzLkNI
Uk9NRS5pdGVtcygpKQorICAgIGNhcGFiaWxpdGllcy5zZXRkZWZhdWx0KCJjaHJvbWVPcHRpb25z
Iiwge30pWyJwcmVmcyJdID0geworICAgICAgICAicHJvZmlsZSI6IHsKKyAgICAgICAgICAgICJk
ZWZhdWx0X2NvbnRlbnRfc2V0dGluZ192YWx1ZXMiOiB7CisgICAgICAgICAgICAgICAgInBvcHVw
cyI6IDEKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBmb3IgKGt3YXJnLCBj
YXBhYmlsaXR5KSBpbiBbKCJiaW5hcnkiLCAiYmluYXJ5IiksICgiYmluYXJ5X2FyZ3MiLCAiYXJn
cyIpXToKKyAgICAgICAgaWYga3dhcmdzW2t3YXJnXSBpcyBub3QgTm9uZToKKyAgICAgICAgICAg
IGNhcGFiaWxpdGllc1siY2hyb21lT3B0aW9ucyJdW2NhcGFiaWxpdHldID0ga3dhcmdzW2t3YXJn
XQorICAgIGlmIHRlc3RfdHlwZSA9PSAidGVzdGhhcm5lc3MiOgorICAgICAgICBjYXBhYmlsaXRp
ZXNbImNocm9tZU9wdGlvbnMiXVsidXNlQXV0b21hdGlvbkV4dGVuc2lvbiJdID0gRmFsc2UKKyAg
ICAgICAgY2FwYWJpbGl0aWVzWyJjaHJvbWVPcHRpb25zIl1bImV4Y2x1ZGVTd2l0Y2hlcyJdID0g
WyJlbmFibGUtYXV0b21hdGlvbiJdCisgICAgaWYgdGVzdF90eXBlID09ICJ3ZHNwZWMiOgorICAg
ICAgICBjYXBhYmlsaXRpZXNbImNocm9tZU9wdGlvbnMiXVsidzNjIl0gPSBUcnVlCisgICAgZXhl
Y3V0b3Jfa3dhcmdzWyJjYXBhYmlsaXRpZXMiXSA9IGNhcGFiaWxpdGllcworICAgIHJldHVybiBl
eGVjdXRvcl9rd2FyZ3MKKworCitkZWYgZW52X2V4dHJhcygqKmt3YXJncyk6CisgICAgcmV0dXJu
IFtdCisKKworZGVmIGVudl9vcHRpb25zKCk6CisgICAgcmV0dXJuIHsiaG9zdCI6ICJ3ZWItcGxh
dGZvcm0udGVzdCIsCisgICAgICAgICAgICAiYmluZF9ob3N0bmFtZSI6ICJ0cnVlIn0KKworCitj
bGFzcyBDaHJvbWVCcm93c2VyKEJyb3dzZXIpOgorICAgICIiIkNocm9tZSBpcyBiYWNrZWQgYnkg
Y2hyb21lZHJpdmVyLCB3aGljaCBpcyBzdXBwbGllZCB0aHJvdWdoCisgICAgYGB3cHRydW5uZXIu
d2ViZHJpdmVyLkNocm9tZURyaXZlclNlcnZlcmBgLgorICAgICIiIgorCisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIGxvZ2dlciwgYmluYXJ5LCB3ZWJkcml2ZXJfYmluYXJ5PSJjaHJvbWVkcml2ZXIi
LAorICAgICAgICAgICAgICAgICB3ZWJkcml2ZXJfYXJncz1Ob25lKToKKyAgICAgICAgIiIiQ3Jl
YXRlcyBhIG5ldyByZXByZXNlbnRhdGlvbiBvZiBDaHJvbWUuICBUaGUgYGJpbmFyeWAgYXJndW1l
bnQgZ2l2ZXMKKyAgICAgICAgdGhlIGJyb3dzZXIgYmluYXJ5IHRvIHVzZSBmb3IgdGVzdGluZy4i
IiIKKyAgICAgICAgQnJvd3Nlci5fX2luaXRfXyhzZWxmLCBsb2dnZXIpCisgICAgICAgIHNlbGYu
YmluYXJ5ID0gYmluYXJ5CisgICAgICAgIHNlbGYuc2VydmVyID0gQ2hyb21lRHJpdmVyU2VydmVy
KHNlbGYubG9nZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
aW5hcnk9d2ViZHJpdmVyX2JpbmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXJncz13ZWJkcml2ZXJfYXJncykKKworICAgIGRlZiBzdGFydChzZWxmLCAqKmt3
YXJncyk6CisgICAgICAgIHNlbGYuc2VydmVyLnN0YXJ0KGJsb2NrPUZhbHNlKQorCisgICAgZGVm
IHN0b3Aoc2VsZiwgZm9yY2U9RmFsc2UpOgorICAgICAgICBzZWxmLnNlcnZlci5zdG9wKGZvcmNl
PWZvcmNlKQorCisgICAgZGVmIHBpZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuc2VydmVy
LnBpZAorCisgICAgZGVmIGlzX2FsaXZlKHNlbGYpOgorICAgICAgICAjIFRPRE8oYXRvKTogVGhp
cyBvbmx5IGluZGljYXRlcyB0aGUgZHJpdmVyIGlzIGFsaXZlLAorICAgICAgICAjIGFuZCBkb2Vz
bid0IHNheSBhbnl0aGluZyBhYm91dCB3aGV0aGVyIGEgYnJvd3NlciBzZXNzaW9uCisgICAgICAg
ICMgaXMgYWN0aXZlLgorICAgICAgICByZXR1cm4gc2VsZi5zZXJ2ZXIuaXNfYWxpdmUoKQorCisg
ICAgZGVmIGNsZWFudXAoc2VsZik6CisgICAgICAgIHNlbGYuc3RvcCgpCisKKyAgICBkZWYgZXhl
Y3V0b3JfYnJvd3NlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIEV4ZWN1dG9yQnJvd3NlciwgeyJ3
ZWJkcml2ZXJfdXJsIjogc2VsZi5zZXJ2ZXIudXJsfQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVz
dHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvYnJvd3NlcnMvZWRnZS5w
eSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVy
L2Jyb3dzZXJzL2VkZ2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LmZkYzdhNzcyMWFkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQv
dzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvYnJvd3NlcnMvZWRnZS5weQpAQCAtMCwwICsx
LDc0IEBACitmcm9tIC5iYXNlIGltcG9ydCBCcm93c2VyLCBFeGVjdXRvckJyb3dzZXIsIHJlcXVp
cmVfYXJnCitmcm9tIC4ud2ViZHJpdmVyX3NlcnZlciBpbXBvcnQgRWRnZURyaXZlclNlcnZlcgor
ZnJvbSAuLmV4ZWN1dG9ycyBpbXBvcnQgZXhlY3V0b3Jfa3dhcmdzIGFzIGJhc2VfZXhlY3V0b3Jf
a3dhcmdzCitmcm9tIC4uZXhlY3V0b3JzLmV4ZWN1dG9yc2VsZW5pdW0gaW1wb3J0IChTZWxlbml1
bVRlc3RoYXJuZXNzRXhlY3V0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTZWxlbml1bVJlZlRlc3RFeGVjdXRvcikKKworX193cHRydW5uZXJfXyA9IHsicHJv
ZHVjdCI6ICJlZGdlIiwKKyAgICAgICAgICAgICAgICAgImNoZWNrX2FyZ3MiOiAiY2hlY2tfYXJn
cyIsCisgICAgICAgICAgICAgICAgICJicm93c2VyIjogIkVkZ2VCcm93c2VyIiwKKyAgICAgICAg
ICAgICAgICAgImV4ZWN1dG9yIjogeyJ0ZXN0aGFybmVzcyI6ICJTZWxlbml1bVRlc3RoYXJuZXNz
RXhlY3V0b3IiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlZnRlc3QiOiAiU2Vs
ZW5pdW1SZWZUZXN0RXhlY3V0b3IifSwKKyAgICAgICAgICAgICAgICAgImJyb3dzZXJfa3dhcmdz
IjogImJyb3dzZXJfa3dhcmdzIiwKKyAgICAgICAgICAgICAgICAgImV4ZWN1dG9yX2t3YXJncyI6
ICJleGVjdXRvcl9rd2FyZ3MiLAorICAgICAgICAgICAgICAgICAiZW52X2V4dHJhcyI6ICJlbnZf
ZXh0cmFzIiwKKyAgICAgICAgICAgICAgICAgImVudl9vcHRpb25zIjogImVudl9vcHRpb25zIn0K
KworCitkZWYgY2hlY2tfYXJncygqKmt3YXJncyk6CisgICAgcmVxdWlyZV9hcmcoa3dhcmdzLCAi
d2ViZHJpdmVyX2JpbmFyeSIpCisKK2RlZiBicm93c2VyX2t3YXJncyh0ZXN0X3R5cGUsIHJ1bl9p
bmZvX2RhdGEsICoqa3dhcmdzKToKKyAgICByZXR1cm4geyJ3ZWJkcml2ZXJfYmluYXJ5Ijoga3dh
cmdzWyJ3ZWJkcml2ZXJfYmluYXJ5Il0sCisgICAgICAgICAgICAid2ViZHJpdmVyX2FyZ3MiOiBr
d2FyZ3MuZ2V0KCJ3ZWJkcml2ZXJfYXJncyIpfQorCitkZWYgZXhlY3V0b3Jfa3dhcmdzKHRlc3Rf
dHlwZSwgc2VydmVyX2NvbmZpZywgY2FjaGVfbWFuYWdlciwgcnVuX2luZm9fZGF0YSwKKyAgICAg
ICAgICAgICAgICAgICAgKiprd2FyZ3MpOgorICAgIGZyb20gc2VsZW5pdW0ud2ViZHJpdmVyIGlt
cG9ydCBEZXNpcmVkQ2FwYWJpbGl0aWVzCisKKyAgICBleGVjdXRvcl9rd2FyZ3MgPSBiYXNlX2V4
ZWN1dG9yX2t3YXJncyh0ZXN0X3R5cGUsIHNlcnZlcl9jb25maWcsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVfbWFuYWdlciwgKiprd2FyZ3MpCisgICAg
ZXhlY3V0b3Jfa3dhcmdzWyJjbG9zZV9hZnRlcl9kb25lIl0gPSBUcnVlCisgICAgZXhlY3V0b3Jf
a3dhcmdzWyJjYXBhYmlsaXRpZXMiXSA9IGRpY3QoRGVzaXJlZENhcGFiaWxpdGllcy5FREdFLml0
ZW1zKCkpCisgICAgcmV0dXJuIGV4ZWN1dG9yX2t3YXJncworCitkZWYgZW52X2V4dHJhcygqKmt3
YXJncyk6CisgICAgcmV0dXJuIFtdCisKK2RlZiBlbnZfb3B0aW9ucygpOgorICAgIHJldHVybiB7
Imhvc3QiOiAid2ViLXBsYXRmb3JtLnRlc3QiLAorICAgICAgICAgICAgImJpbmRfaG9zdG5hbWUi
OiAidHJ1ZSIsCisgICAgICAgICAgICAic3VwcG9ydHNfZGVidWdnZXIiOiBGYWxzZX0KKworY2xh
c3MgRWRnZUJyb3dzZXIoQnJvd3Nlcik6CisgICAgdXNlZF9wb3J0cyA9IHNldCgpCisKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgbG9nZ2VyLCB3ZWJkcml2ZXJfYmluYXJ5LCB3ZWJkcml2ZXJfYXJn
cz1Ob25lKToKKyAgICAgICAgQnJvd3Nlci5fX2luaXRfXyhzZWxmLCBsb2dnZXIpCisgICAgICAg
IHNlbGYuc2VydmVyID0gRWRnZURyaXZlclNlcnZlcihzZWxmLmxvZ2dlciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmFyeT13ZWJkcml2ZXJfYmluYXJ5LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncz13ZWJkcml2ZXJfYXJncykK
KyAgICAgICAgc2VsZi53ZWJkcml2ZXJfaG9zdCA9ICJsb2NhbGhvc3QiCisgICAgICAgIHNlbGYu
d2ViZHJpdmVyX3BvcnQgPSBzZWxmLnNlcnZlci5wb3J0CisKKyAgICBkZWYgc3RhcnQoc2VsZiwg
Kiprd2FyZ3MpOgorICAgICAgICBwcmludCBzZWxmLnNlcnZlci51cmwKKyAgICAgICAgc2VsZi5z
ZXJ2ZXIuc3RhcnQoKQorCisgICAgZGVmIHN0b3Aoc2VsZiwgZm9yY2U9RmFsc2UpOgorICAgICAg
ICBzZWxmLnNlcnZlci5zdG9wKGZvcmNlPWZvcmNlKQorCisgICAgZGVmIHBpZChzZWxmKToKKyAg
ICAgICAgcmV0dXJuIHNlbGYuc2VydmVyLnBpZAorCisgICAgZGVmIGlzX2FsaXZlKHNlbGYpOgor
ICAgICAgICAjIFRPRE8oYXRvKTogVGhpcyBvbmx5IGluZGljYXRlcyB0aGUgc2VydmVyIGlzIGFs
aXZlLAorICAgICAgICAjIGFuZCBkb2Vzbid0IHNheSBhbnl0aGluZyBhYm91dCB3aGV0aGVyIGEg
YnJvd3NlciBzZXNzaW9uCisgICAgICAgICMgaXMgYWN0aXZlLgorICAgICAgICByZXR1cm4gc2Vs
Zi5zZXJ2ZXIuaXNfYWxpdmUoKQorCisgICAgZGVmIGNsZWFudXAoc2VsZik6CisgICAgICAgIHNl
bGYuc3RvcCgpCisKKyAgICBkZWYgZXhlY3V0b3JfYnJvd3NlcihzZWxmKToKKyAgICAgICAgcmV0
dXJuIEV4ZWN1dG9yQnJvd3NlciwgeyJ3ZWJkcml2ZXJfdXJsIjogc2VsZi5zZXJ2ZXIudXJsfQpk
aWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93
cHRydW5uZXIvYnJvd3NlcnMvZmlyZWZveC5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3cz
Yy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2Jyb3dzZXJzL2ZpcmVmb3gucHkKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmY4NjljODJhOGVkCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5u
ZXIvYnJvd3NlcnMvZmlyZWZveC5weQpAQCAtMCwwICsxLDM3OCBAQAoraW1wb3J0IG9zCitpbXBv
cnQgcGxhdGZvcm0KK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lz
CisKK2ltcG9ydCBtb3ppbmZvCitpbXBvcnQgbW96bGVhaworZnJvbSBtb3pwcm9jZXNzIGltcG9y
dCBQcm9jZXNzSGFuZGxlcgorZnJvbSBtb3pwcm9maWxlIGltcG9ydCBGaXJlZm94UHJvZmlsZSwg
UHJlZmVyZW5jZXMKK2Zyb20gbW96cHJvZmlsZS5wZXJtaXNzaW9ucyBpbXBvcnQgU2VydmVyTG9j
YXRpb25zCitmcm9tIG1venJ1bm5lciBpbXBvcnQgRmlyZWZveFJ1bm5lcgorZnJvbSBtb3pydW5u
ZXIudXRpbHMgaW1wb3J0IGdldF9zdGFja19maXhlcl9mdW5jdGlvbgorZnJvbSBtb3pjcmFzaCBp
bXBvcnQgbW96Y3Jhc2gKKworZnJvbSAuYmFzZSBpbXBvcnQgKGdldF9mcmVlX3BvcnQsCisgICAg
ICAgICAgICAgICAgICAgQnJvd3NlciwKKyAgICAgICAgICAgICAgICAgICBFeGVjdXRvckJyb3dz
ZXIsCisgICAgICAgICAgICAgICAgICAgcmVxdWlyZV9hcmcsCisgICAgICAgICAgICAgICAgICAg
Y21kX2FyZywKKyAgICAgICAgICAgICAgICAgICBicm93c2VyX2NvbW1hbmQpCitmcm9tIC4uZXhl
Y3V0b3JzIGltcG9ydCBleGVjdXRvcl9rd2FyZ3MgYXMgYmFzZV9leGVjdXRvcl9rd2FyZ3MKK2Zy
b20gLi5leGVjdXRvcnMuZXhlY3V0b3JtYXJpb25ldHRlIGltcG9ydCAoTWFyaW9uZXR0ZVRlc3Ro
YXJuZXNzRXhlY3V0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE1hcmlvbmV0dGVSZWZUZXN0RXhlY3V0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE1hcmlvbmV0dGVXZHNwZWNFeGVjdXRvcikKK2Zyb20gLi5lbnZp
cm9ubWVudCBpbXBvcnQgaG9zdG5hbWVzCisKKworaGVyZSA9IG9zLnBhdGguam9pbihvcy5wYXRo
LnNwbGl0KF9fZmlsZV9fKVswXSkKKworX193cHRydW5uZXJfXyA9IHsicHJvZHVjdCI6ICJmaXJl
Zm94IiwKKyAgICAgICAgICAgICAgICAgImNoZWNrX2FyZ3MiOiAiY2hlY2tfYXJncyIsCisgICAg
ICAgICAgICAgICAgICJicm93c2VyIjogIkZpcmVmb3hCcm93c2VyIiwKKyAgICAgICAgICAgICAg
ICAgImV4ZWN1dG9yIjogeyJ0ZXN0aGFybmVzcyI6ICJNYXJpb25ldHRlVGVzdGhhcm5lc3NFeGVj
dXRvciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVmdGVzdCI6ICJNYXJpb25l
dHRlUmVmVGVzdEV4ZWN1dG9yIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3ZHNw
ZWMiOiAiTWFyaW9uZXR0ZVdkc3BlY0V4ZWN1dG9yIn0sCisgICAgICAgICAgICAgICAgICJicm93
c2VyX2t3YXJncyI6ICJicm93c2VyX2t3YXJncyIsCisgICAgICAgICAgICAgICAgICJleGVjdXRv
cl9rd2FyZ3MiOiAiZXhlY3V0b3Jfa3dhcmdzIiwKKyAgICAgICAgICAgICAgICAgImVudl9leHRy
YXMiOiAiZW52X2V4dHJhcyIsCisgICAgICAgICAgICAgICAgICJlbnZfb3B0aW9ucyI6ICJlbnZf
b3B0aW9ucyIsCisgICAgICAgICAgICAgICAgICJydW5faW5mb19leHRyYXMiOiAicnVuX2luZm9f
ZXh0cmFzIiwKKyAgICAgICAgICAgICAgICAgInVwZGF0ZV9wcm9wZXJ0aWVzIjogInVwZGF0ZV9w
cm9wZXJ0aWVzIn0KKworCitkZWYgZ2V0X3RpbWVvdXRfbXVsdGlwbGllcih0ZXN0X3R5cGUsIHJ1
bl9pbmZvX2RhdGEsICoqa3dhcmdzKToKKyAgICBpZiBrd2FyZ3NbInRpbWVvdXRfbXVsdGlwbGll
ciJdIGlzIG5vdCBOb25lOgorICAgICAgICByZXR1cm4ga3dhcmdzWyJ0aW1lb3V0X211bHRpcGxp
ZXIiXQorICAgIGlmIHRlc3RfdHlwZSA9PSAicmVmdGVzdCI6CisgICAgICAgIGlmIHJ1bl9pbmZv
X2RhdGFbImRlYnVnIl0gb3IgcnVuX2luZm9fZGF0YS5nZXQoImFzYW4iKToKKyAgICAgICAgICAg
IHJldHVybiA0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gMgorICAgIGVsaWYg
cnVuX2luZm9fZGF0YVsiZGVidWciXSBvciBydW5faW5mb19kYXRhLmdldCgiYXNhbiIpOgorICAg
ICAgICByZXR1cm4gMworICAgIHJldHVybiAxCisKKworZGVmIGNoZWNrX2FyZ3MoKiprd2FyZ3Mp
OgorICAgIHJlcXVpcmVfYXJnKGt3YXJncywgImJpbmFyeSIpCisgICAgaWYga3dhcmdzWyJzc2xf
dHlwZSJdICE9ICJub25lIjoKKyAgICAgICAgcmVxdWlyZV9hcmcoa3dhcmdzLCAiY2VydHV0aWxf
YmluYXJ5IikKKworCitkZWYgYnJvd3Nlcl9rd2FyZ3ModGVzdF90eXBlLCBydW5faW5mb19kYXRh
LCAqKmt3YXJncyk6CisgICAgcmV0dXJuIHsiYmluYXJ5Ijoga3dhcmdzWyJiaW5hcnkiXSwKKyAg
ICAgICAgICAgICJwcmVmc19yb290Ijoga3dhcmdzWyJwcmVmc19yb290Il0sCisgICAgICAgICAg
ICAiZXh0cmFfcHJlZnMiOiBrd2FyZ3NbImV4dHJhX3ByZWZzIl0sCisgICAgICAgICAgICAidGVz
dF90eXBlIjogdGVzdF90eXBlLAorICAgICAgICAgICAgImRlYnVnX2luZm8iOiBrd2FyZ3NbImRl
YnVnX2luZm8iXSwKKyAgICAgICAgICAgICJzeW1ib2xzX3BhdGgiOiBrd2FyZ3NbInN5bWJvbHNf
cGF0aCJdLAorICAgICAgICAgICAgInN0YWNrd2Fsa19iaW5hcnkiOiBrd2FyZ3NbInN0YWNrd2Fs
a19iaW5hcnkiXSwKKyAgICAgICAgICAgICJjZXJ0dXRpbF9iaW5hcnkiOiBrd2FyZ3NbImNlcnR1
dGlsX2JpbmFyeSJdLAorICAgICAgICAgICAgImNhX2NlcnRpZmljYXRlX3BhdGgiOiBrd2FyZ3Nb
InNzbF9lbnYiXS5jYV9jZXJ0X3BhdGgoKSwKKyAgICAgICAgICAgICJlMTBzIjoga3dhcmdzWyJn
ZWNrb19lMTBzIl0sCisgICAgICAgICAgICAic3RhY2tmaXhfZGlyIjoga3dhcmdzWyJzdGFja2Zp
eF9kaXIiXSwKKyAgICAgICAgICAgICJiaW5hcnlfYXJncyI6IGt3YXJnc1siYmluYXJ5X2FyZ3Mi
XSwKKyAgICAgICAgICAgICJ0aW1lb3V0X211bHRpcGxpZXIiOiBnZXRfdGltZW91dF9tdWx0aXBs
aWVyKHRlc3RfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJ1bl9pbmZvX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKmt3YXJncyksCisgICAgICAgICAgICAi
bGVha19jaGVjayI6IGt3YXJnc1sibGVha19jaGVjayJdLAorICAgICAgICAgICAgInN0eWxvX3Ro
cmVhZHMiOiBrd2FyZ3NbInN0eWxvX3RocmVhZHMiXX0KKworCitkZWYgZXhlY3V0b3Jfa3dhcmdz
KHRlc3RfdHlwZSwgc2VydmVyX2NvbmZpZywgY2FjaGVfbWFuYWdlciwgcnVuX2luZm9fZGF0YSwK
KyAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpOgorICAgIGV4ZWN1dG9yX2t3YXJncyA9IGJh
c2VfZXhlY3V0b3Jfa3dhcmdzKHRlc3RfdHlwZSwgc2VydmVyX2NvbmZpZywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZV9tYW5hZ2VyLCAqKmt3YXJncykK
KyAgICBleGVjdXRvcl9rd2FyZ3NbImNsb3NlX2FmdGVyX2RvbmUiXSA9IHRlc3RfdHlwZSAhPSAi
cmVmdGVzdCIKKyAgICBleGVjdXRvcl9rd2FyZ3NbInRpbWVvdXRfbXVsdGlwbGllciJdID0gZ2V0
X3RpbWVvdXRfbXVsdGlwbGllcih0ZXN0X3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuX2luZm9fZGF0YSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqKmt3YXJncykKKyAgICBpZiB0ZXN0X3R5cGUgPT0gInJlZnRlc3QiOgorICAg
ICAgICBleGVjdXRvcl9rd2FyZ3NbInJlZnRlc3RfaW50ZXJuYWwiXSA9IGt3YXJnc1sicmVmdGVz
dF9pbnRlcm5hbCJdCisgICAgICAgIGV4ZWN1dG9yX2t3YXJnc1sicmVmdGVzdF9zY3JlZW5zaG90
Il0gPSBrd2FyZ3NbInJlZnRlc3Rfc2NyZWVuc2hvdCJdCisgICAgaWYgdGVzdF90eXBlID09ICJ3
ZHNwZWMiOgorICAgICAgICBmeE9wdGlvbnMgPSB7fQorICAgICAgICBpZiBrd2FyZ3NbImJpbmFy
eSJdOgorICAgICAgICAgICAgZnhPcHRpb25zWyJiaW5hcnkiXSA9IGt3YXJnc1siYmluYXJ5Il0K
KyAgICAgICAgaWYga3dhcmdzWyJiaW5hcnlfYXJncyJdOgorICAgICAgICAgICAgZnhPcHRpb25z
WyJhcmdzIl0gPSBrd2FyZ3NbImJpbmFyeV9hcmdzIl0KKyAgICAgICAgZnhPcHRpb25zWyJwcmVm
cyJdID0geworICAgICAgICAgICAgIm5ldHdvcmsuZG5zLmxvY2FsRG9tYWlucyI6ICIsIi5qb2lu
KGhvc3RuYW1lcykKKyAgICAgICAgfQorICAgICAgICBjYXBhYmlsaXRpZXMgPSB7Im1vejpmaXJl
Zm94T3B0aW9ucyI6IGZ4T3B0aW9uc30KKyAgICAgICAgZXhlY3V0b3Jfa3dhcmdzWyJjYXBhYmls
aXRpZXMiXSA9IGNhcGFiaWxpdGllcworICAgIHJldHVybiBleGVjdXRvcl9rd2FyZ3MKKworCitk
ZWYgZW52X2V4dHJhcygqKmt3YXJncyk6CisgICAgcmV0dXJuIFtdCisKKworZGVmIGVudl9vcHRp
b25zKCk6CisgICAgcmV0dXJuIHsiaG9zdCI6ICIxMjcuMC4wLjEiLAorICAgICAgICAgICAgImV4
dGVybmFsX2hvc3QiOiAid2ViLXBsYXRmb3JtLnRlc3QiLAorICAgICAgICAgICAgImJpbmRfaG9z
dG5hbWUiOiAiZmFsc2UiLAorICAgICAgICAgICAgImNlcnRpZmljYXRlX2RvbWFpbiI6ICJ3ZWIt
cGxhdGZvcm0udGVzdCIsCisgICAgICAgICAgICAic3VwcG9ydHNfZGVidWdnZXIiOiBUcnVlfQor
CisKK2RlZiBydW5faW5mb19leHRyYXMoKiprd2FyZ3MpOgorICAgIHJldHVybiB7ImUxMHMiOiBr
d2FyZ3NbImdlY2tvX2UxMHMiXSwKKyAgICAgICAgICAgICJoZWFkbGVzcyI6ICJNT1pfSEVBRExF
U1MiIGluIG9zLmVudmlyb259CisKKworZGVmIHVwZGF0ZV9wcm9wZXJ0aWVzKCk6CisgICAgcmV0
dXJuIChbImRlYnVnIiwgInN0eWxvIiwgImUxMHMiLCAib3MiLCAidmVyc2lvbiIsICJwcm9jZXNz
b3IiLCAiYml0cyJdLAorICAgICAgICAgICAgeyJkZWJ1ZyIsICJlMTBzIiwgInN0eWxvIn0pCisK
KworY2xhc3MgRmlyZWZveEJyb3dzZXIoQnJvd3Nlcik6CisgICAgdXNlZF9wb3J0cyA9IHNldCgp
CisgICAgaW5pdF90aW1lb3V0ID0gNjAKKyAgICBzaHV0ZG93bl90aW1lb3V0ID0gNjAKKworICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBsb2dnZXIsIGJpbmFyeSwgcHJlZnNfcm9vdCwgdGVzdF90eXBl
LCBleHRyYV9wcmVmcz1Ob25lLCBkZWJ1Z19pbmZvPU5vbmUsCisgICAgICAgICAgICAgICAgIHN5
bWJvbHNfcGF0aD1Ob25lLCBzdGFja3dhbGtfYmluYXJ5PU5vbmUsIGNlcnR1dGlsX2JpbmFyeT1O
b25lLAorICAgICAgICAgICAgICAgICBjYV9jZXJ0aWZpY2F0ZV9wYXRoPU5vbmUsIGUxMHM9RmFs
c2UsIHN0YWNrZml4X2Rpcj1Ob25lLAorICAgICAgICAgICAgICAgICBiaW5hcnlfYXJncz1Ob25l
LCB0aW1lb3V0X211bHRpcGxpZXI9Tm9uZSwgbGVha19jaGVjaz1GYWxzZSwgc3R5bG9fdGhyZWFk
cz0xKToKKyAgICAgICAgQnJvd3Nlci5fX2luaXRfXyhzZWxmLCBsb2dnZXIpCisgICAgICAgIHNl
bGYuYmluYXJ5ID0gYmluYXJ5CisgICAgICAgIHNlbGYucHJlZnNfcm9vdCA9IHByZWZzX3Jvb3QK
KyAgICAgICAgc2VsZi50ZXN0X3R5cGUgPSB0ZXN0X3R5cGUKKyAgICAgICAgc2VsZi5leHRyYV9w
cmVmcyA9IGV4dHJhX3ByZWZzCisgICAgICAgIHNlbGYubWFyaW9uZXR0ZV9wb3J0ID0gTm9uZQor
ICAgICAgICBzZWxmLnJ1bm5lciA9IE5vbmUKKyAgICAgICAgc2VsZi5kZWJ1Z19pbmZvID0gZGVi
dWdfaW5mbworICAgICAgICBzZWxmLnByb2ZpbGUgPSBOb25lCisgICAgICAgIHNlbGYuc3ltYm9s
c19wYXRoID0gc3ltYm9sc19wYXRoCisgICAgICAgIHNlbGYuc3RhY2t3YWxrX2JpbmFyeSA9IHN0
YWNrd2Fsa19iaW5hcnkKKyAgICAgICAgc2VsZi5jYV9jZXJ0aWZpY2F0ZV9wYXRoID0gY2FfY2Vy
dGlmaWNhdGVfcGF0aAorICAgICAgICBzZWxmLmNlcnR1dGlsX2JpbmFyeSA9IGNlcnR1dGlsX2Jp
bmFyeQorICAgICAgICBzZWxmLmUxMHMgPSBlMTBzCisgICAgICAgIHNlbGYuYmluYXJ5X2FyZ3Mg
PSBiaW5hcnlfYXJncworICAgICAgICBpZiBzdGFja2ZpeF9kaXI6CisgICAgICAgICAgICBzZWxm
LnN0YWNrX2ZpeGVyID0gZ2V0X3N0YWNrX2ZpeGVyX2Z1bmN0aW9uKHN0YWNrZml4X2RpciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5zeW1ib2xzX3BhdGgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnN0YWNrX2Zp
eGVyID0gTm9uZQorCisgICAgICAgIGlmIHRpbWVvdXRfbXVsdGlwbGllcjoKKyAgICAgICAgICAg
IHNlbGYuaW5pdF90aW1lb3V0ID0gc2VsZi5pbml0X3RpbWVvdXQgKiB0aW1lb3V0X211bHRpcGxp
ZXIKKworICAgICAgICBzZWxmLmxlYWtfcmVwb3J0X2ZpbGUgPSBOb25lCisgICAgICAgIHNlbGYu
bGVha19jaGVjayA9IGxlYWtfY2hlY2sKKyAgICAgICAgc2VsZi5zdHlsb190aHJlYWRzID0gc3R5
bG9fdGhyZWFkcworCisgICAgZGVmIHNldHRpbmdzKHNlbGYsIHRlc3QpOgorICAgICAgICByZXR1
cm4geyJjaGVja19sZWFrcyI6IHNlbGYubGVha19jaGVjayBhbmQgbm90IHRlc3QubGVha3N9CisK
KyAgICBkZWYgc3RhcnQoc2VsZiwgKiprd2FyZ3MpOgorICAgICAgICBpZiBzZWxmLm1hcmlvbmV0
dGVfcG9ydCBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5tYXJpb25ldHRlX3BvcnQgPSBnZXRf
ZnJlZV9wb3J0KDI4MjgsIGV4Y2x1ZGU9c2VsZi51c2VkX3BvcnRzKQorICAgICAgICAgICAgc2Vs
Zi51c2VkX3BvcnRzLmFkZChzZWxmLm1hcmlvbmV0dGVfcG9ydCkKKworICAgICAgICBlbnYgPSBv
cy5lbnZpcm9uLmNvcHkoKQorICAgICAgICBlbnZbIk1PWl9DUkFTSFJFUE9SVEVSIl0gPSAiMSIK
KyAgICAgICAgZW52WyJNT1pfQ1JBU0hSRVBPUlRFUl9TSFVURE9XTiJdID0gIjEiCisgICAgICAg
IGVudlsiTU9aX0RJU0FCTEVfTk9OTE9DQUxfQ09OTkVDVElPTlMiXSA9ICIxIgorICAgICAgICBl
bnZbIlNUWUxPX1RIUkVBRFMiXSA9IHN0cihzZWxmLnN0eWxvX3RocmVhZHMpCisKKyAgICAgICAg
bG9jYXRpb25zID0gU2VydmVyTG9jYXRpb25zKGZpbGVuYW1lPW9zLnBhdGguam9pbihoZXJlLCAi
c2VydmVyLWxvY2F0aW9ucy50eHQiKSkKKworICAgICAgICBwcmVmZXJlbmNlcyA9IHNlbGYubG9h
ZF9wcmVmcygpCisKKyAgICAgICAgc2VsZi5wcm9maWxlID0gRmlyZWZveFByb2ZpbGUobG9jYXRp
b25zPWxvY2F0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJl
ZmVyZW5jZXM9cHJlZmVyZW5jZXMpCisgICAgICAgIHNlbGYucHJvZmlsZS5zZXRfcHJlZmVyZW5j
ZXMoeyJtYXJpb25ldHRlLnBvcnQiOiBzZWxmLm1hcmlvbmV0dGVfcG9ydCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImRvbS5kaXNhYmxlX29wZW5fZHVyaW5nX2xvYWQi
OiBGYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5ldHdvcmsu
ZG5zLmxvY2FsRG9tYWlucyI6ICIsIi5qb2luKGhvc3RuYW1lcyksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJuZXR3b3JrLnByb3h5LnR5cGUiOiAwLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGxhY2VzLmhpc3RvcnkuZW5hYmxlZCI6IEZh
bHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZG9tLnNlbmRfYWZ0
ZXJfcGFpbnRfdG9fY29udGVudCI6IFRydWV9KQorICAgICAgICBpZiBzZWxmLmUxMHM6CisgICAg
ICAgICAgICBzZWxmLnByb2ZpbGUuc2V0X3ByZWZlcmVuY2VzKHsiYnJvd3Nlci50YWJzLnJlbW90
ZS5hdXRvc3RhcnQiOiBUcnVlfSkKKworICAgICAgICBpZiBzZWxmLnRlc3RfdHlwZSA9PSAicmVm
dGVzdCI6CisgICAgICAgICAgICBzZWxmLnByb2ZpbGUuc2V0X3ByZWZlcmVuY2VzKHsibGF5b3V0
LmludGVycnVwdGlibGUtcmVmbG93LmVuYWJsZWQiOiBGYWxzZX0pCisKKyAgICAgICAgaWYgc2Vs
Zi5sZWFrX2NoZWNrIGFuZCBrd2FyZ3MuZ2V0KCJjaGVja19sZWFrcyIsIFRydWUpOgorICAgICAg
ICAgICAgc2VsZi5sZWFrX3JlcG9ydF9maWxlID0gb3MucGF0aC5qb2luKHNlbGYucHJvZmlsZS5w
cm9maWxlLCAicnVudGVzdHNfbGVha3MubG9nIikKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhp
c3RzKHNlbGYubGVha19yZXBvcnRfZmlsZSk6CisgICAgICAgICAgICAgICAgb3MucmVtb3ZlKHNl
bGYubGVha19yZXBvcnRfZmlsZSkKKyAgICAgICAgICAgIGVudlsiWFBDT01fTUVNX0JMT0FUX0xP
RyJdID0gc2VsZi5sZWFrX3JlcG9ydF9maWxlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBz
ZWxmLmxlYWtfcmVwb3J0X2ZpbGUgPSBOb25lCisKKyAgICAgICAgIyBCdWcgMTI2Mjk1NDogd2lu
eHAgKyBlMTBzLCBkaXNhYmxlIGh3YWNjZWwKKyAgICAgICAgaWYgKHNlbGYuZTEwcyBhbmQgcGxh
dGZvcm0uc3lzdGVtKCkgaW4gKCJXaW5kb3dzIiwgIk1pY3Jvc29mdCIpIGFuZAorICAgICAgICAg
ICAgJzUuMScgaW4gcGxhdGZvcm0udmVyc2lvbigpKToKKyAgICAgICAgICAgIHNlbGYucHJvZmls
ZS5zZXRfcHJlZmVyZW5jZXMoeyJsYXllcnMuYWNjZWxlcmF0aW9uLmRpc2FibGVkIjogVHJ1ZX0p
CisKKyAgICAgICAgaWYgc2VsZi5jYV9jZXJ0aWZpY2F0ZV9wYXRoIGlzIG5vdCBOb25lOgorICAg
ICAgICAgICAgc2VsZi5zZXR1cF9zc2woKQorCisgICAgICAgIGRlYnVnX2FyZ3MsIGNtZCA9IGJy
b3dzZXJfY29tbWFuZChzZWxmLmJpbmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNlbGYuYmluYXJ5X2FyZ3MgaWYgc2VsZi5iaW5hcnlfYXJncyBlbHNlIFtd
ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbWRfYXJnKCJt
YXJpb25ldHRlIiksICJhYm91dDpibGFuayJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZi5kZWJ1Z19pbmZvKQorCisgICAgICAgIHNlbGYucnVubmVyID0g
RmlyZWZveFJ1bm5lcihwcm9maWxlPXNlbGYucHJvZmlsZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJpbmFyeT1jbWRbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjbWRhcmdzPWNtZFsxOl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbnY9ZW52LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJv
Y2Vzc19jbGFzcz1Qcm9jZXNzSGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHByb2Nlc3NfYXJncz17InByb2Nlc3NPdXRwdXRMaW5lIjogW3NlbGYub25fb3V0cHV0
XX0pCisKKyAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcoIlN0YXJ0aW5nIEZpcmVmb3giKQorCisg
ICAgICAgIHNlbGYucnVubmVyLnN0YXJ0KGRlYnVnX2FyZ3M9ZGVidWdfYXJncywgaW50ZXJhY3Rp
dmU9c2VsZi5kZWJ1Z19pbmZvIGFuZCBzZWxmLmRlYnVnX2luZm8uaW50ZXJhY3RpdmUpCisgICAg
ICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJGaXJlZm94IFN0YXJ0ZWQiKQorCisgICAgZGVmIGxvYWRf
cHJlZnMoc2VsZik6CisgICAgICAgIHByZWZzID0gUHJlZmVyZW5jZXMoKQorCisgICAgICAgIHBy
ZWZzX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5wcmVmc19yb290LCAicHJlZnNfZ2VuZXJhbC5q
cyIpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHByZWZzX3BhdGgpOgorICAgICAgICAgICAg
cHJlZnMuYWRkKFByZWZlcmVuY2VzLnJlYWRfcHJlZnMocHJlZnNfcGF0aCkpCisgICAgICAgIGVs
c2U6CisgICAgICAgICAgICBzZWxmLmxvZ2dlci53YXJuaW5nKCJGYWlsZWQgdG8gZmluZCBiYXNl
IHByZWZzIGZpbGUgaW4gJXMiICUgcHJlZnNfcGF0aCkKKworICAgICAgICAjIEFkZCBhbnkgY3Vz
dG9tIHByZWZlcmVuY2VzCisgICAgICAgIHByZWZzLmFkZChzZWxmLmV4dHJhX3ByZWZzLCBjYXN0
PVRydWUpCisKKyAgICAgICAgcmV0dXJuIHByZWZzKCkKKworICAgIGRlZiBzdG9wKHNlbGYsIGZv
cmNlPUZhbHNlKToKKyAgICAgICAgaWYgc2VsZi5ydW5uZXIgaXMgbm90IE5vbmUgYW5kIHNlbGYu
cnVubmVyLmlzX3J1bm5pbmcoKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAj
IEZvciBGaXJlZm94IHdlIGFzc3VtZSB0aGF0IHN0b3BwaW5nIHRoZSBydW5uZXIgcHJvbXB0cyB0
aGUKKyAgICAgICAgICAgICAgICAjIGJyb3dzZXIgdG8gc2h1dCBkb3duLiBUaGlzIGFsbG93cyB0
aGUgbGVhayBsb2cgdG8gYmUgd3JpdHRlbgorICAgICAgICAgICAgICAgIGZvciBjbGVhbiwgc3Rv
cF9mIGluIFsoVHJ1ZSwgbGFtYmRhOiBzZWxmLnJ1bm5lci53YWl0KHNlbGYuc2h1dGRvd25fdGlt
ZW91dCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRmFsc2UsIGxh
bWJkYTogc2VsZi5ydW5uZXIuc3RvcChzaWduYWwuU0lHVEVSTSkpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoRmFsc2UsIGxhbWJkYTogc2VsZi5ydW5uZXIuc3RvcChz
aWduYWwuU0lHS0lMTCkpXToKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGZvcmNlIG9yIG5v
dCBjbGVhbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldGNvZGUgPSBzdG9wX2YoKQorICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgcmV0Y29kZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKCJCcm93c2VyIGV4aXRlZCB3aXRoIHJl
dHVybiBjb2RlICVzIiAlIHJldGNvZGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWsKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgICMgVGhpcyBj
YW4gaGFwcGVuIG9uIFdpbmRvd3MgaWYgdGhlIHByb2Nlc3MgaXMgYWxyZWFkeSBkZWFkCisgICAg
ICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1Zygic3RvcHBlZCIpCisK
KyAgICBkZWYgcHJvY2Vzc19sZWFrcyhzZWxmKToKKyAgICAgICAgc2VsZi5sb2dnZXIuZGVidWco
IlBST0NFU1MgTEVBS1MgJXMiICUgc2VsZi5sZWFrX3JlcG9ydF9maWxlKQorICAgICAgICBpZiBz
ZWxmLmxlYWtfcmVwb3J0X2ZpbGUgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAg
ICBtb3psZWFrLnByb2Nlc3NfbGVha19sb2coCisgICAgICAgICAgICBzZWxmLmxlYWtfcmVwb3J0
X2ZpbGUsCisgICAgICAgICAgICBsZWFrX3RocmVzaG9sZHM9eworICAgICAgICAgICAgICAgICJk
ZWZhdWx0IjogMCwKKyAgICAgICAgICAgICAgICAidGFiIjogMTAwMDAsICAjIFNlZSBkZXBlbmRl
bmNpZXMgb2YgYnVnIDEwNTEyMzAuCisgICAgICAgICAgICAgICAgIyBHTVAgcmFyZWx5IGdldHMg
YSBsb2csIGJ1dCB3aGVuIGl0IGRvZXMsIGl0IGxlYWtzIGEgbGl0dGxlLgorICAgICAgICAgICAg
ICAgICJnZWNrb21lZGlhcGx1Z2luIjogMjAwMDAsCisgICAgICAgICAgICB9LAorICAgICAgICAg
ICAgaWdub3JlX21pc3NpbmdfbGVha3M9WyJnZWNrb21lZGlhcGx1Z2luIl0sCisgICAgICAgICAg
ICBsb2c9c2VsZi5sb2dnZXIsCisgICAgICAgICAgICBzdGFja19maXhlcj1zZWxmLnN0YWNrX2Zp
eGVyCisgICAgICAgICkKKworICAgIGRlZiBwaWQoc2VsZik6CisgICAgICAgIGlmIHNlbGYucnVu
bmVyLnByb2Nlc3NfaGFuZGxlciBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKwor
ICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5ydW5uZXIucHJvY2Vzc19oYW5k
bGVyLnBpZAorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICByZXR1
cm4gTm9uZQorCisgICAgZGVmIG9uX291dHB1dChzZWxmLCBsaW5lKToKKyAgICAgICAgIiIiV3Jp
dGUgYSBsaW5lIG9mIG91dHB1dCBmcm9tIHRoZSBmaXJlZm94IHByb2Nlc3MgdG8gdGhlIGxvZyIi
IgorICAgICAgICBkYXRhID0gbGluZS5kZWNvZGUoInV0ZjgiLCAicmVwbGFjZSIpCisgICAgICAg
IGlmIHNlbGYuc3RhY2tfZml4ZXI6CisgICAgICAgICAgICBkYXRhID0gc2VsZi5zdGFja19maXhl
cihkYXRhKQorICAgICAgICBzZWxmLmxvZ2dlci5wcm9jZXNzX291dHB1dChzZWxmLnBpZCgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb21tYW5kPSIgIi5qb2luKHNlbGYucnVubmVyLmNvbW1hbmQp
KQorCisgICAgZGVmIGlzX2FsaXZlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnJ1bm5lcjoKKyAg
ICAgICAgICAgIHJldHVybiBzZWxmLnJ1bm5lci5pc19ydW5uaW5nKCkKKyAgICAgICAgcmV0dXJu
IEZhbHNlCisKKyAgICBkZWYgY2xlYW51cChzZWxmKToKKyAgICAgICAgc2VsZi5zdG9wKCkKKyAg
ICAgICAgc2VsZi5wcm9jZXNzX2xlYWtzKCkKKworICAgIGRlZiBleGVjdXRvcl9icm93c2VyKHNl
bGYpOgorICAgICAgICBhc3NlcnQgc2VsZi5tYXJpb25ldHRlX3BvcnQgaXMgbm90IE5vbmUKKyAg
ICAgICAgcmV0dXJuIEV4ZWN1dG9yQnJvd3NlciwgeyJtYXJpb25ldHRlX3BvcnQiOiBzZWxmLm1h
cmlvbmV0dGVfcG9ydH0KKworICAgIGRlZiBjaGVja19mb3JfY3Jhc2hlcyhzZWxmKToKKyAgICAg
ICAgZHVtcF9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5wcm9maWxlLnByb2ZpbGUsICJtaW5pZHVt
cHMiKQorCisgICAgICAgIHJldHVybiBib29sKG1vemNyYXNoLmNoZWNrX2Zvcl9jcmFzaGVzKGR1
bXBfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
eW1ib2xzX3BhdGg9c2VsZi5zeW1ib2xzX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YWNrd2Fsa19iaW5hcnk9c2VsZi5zdGFja3dhbGtfYmlu
YXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWll
dD1UcnVlKSkKKworICAgIGRlZiBsb2dfY3Jhc2goc2VsZiwgcHJvY2VzcywgdGVzdCk6CisgICAg
ICAgIGR1bXBfZGlyID0gb3MucGF0aC5qb2luKHNlbGYucHJvZmlsZS5wcm9maWxlLCAibWluaWR1
bXBzIikKKworICAgICAgICBtb3pjcmFzaC5sb2dfY3Jhc2hlcyhzZWxmLmxvZ2dlciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZHVtcF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN5bWJvbHNfcGF0aD1zZWxmLnN5bWJvbHNfcGF0aCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhY2t3YWxrX2JpbmFyeT1zZWxmLnN0YWNrd2Fsa19iaW5hcnksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3M9cHJvY2VzcywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGVzdD10ZXN0KQorCisgICAgZGVmIHNldHVwX3NzbChzZWxmKToKKyAg
ICAgICAgIiIiQ3JlYXRlIGEgY2VydGlmaWNhdGUgZGF0YWJhc2UgdG8gdXNlIGluIHRoZSB0ZXN0
IHByb2ZpbGUuIFRoaXMgaXMgY29uZmlndXJlZAorICAgICAgICB0byB0cnVzdCB0aGUgQ0EgQ2Vy
dGlmaWNhdGUgdGhhdCBoYXMgc2lnbmVkIHRoZSB3ZWItcGxhdGZvcm0udGVzdCBzZXJ2ZXIKKyAg
ICAgICAgY2VydGlmaWNhdGUuIiIiCisKKyAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygiU2V0dGlu
ZyB1cCBzc2wiKQorCisgICAgICAgICMgTWFrZSBzdXJlIHRoZSBjZXJ0dXRpbCBsaWJyYXJpZXMg
ZnJvbSB0aGUgc291cmNlIHRyZWUgYXJlIGxvYWRlZCB3aGVuIHVzaW5nIGEKKyAgICAgICAgIyBs
b2NhbCBjb3B5IG9mIGNlcnR1dGlsCisgICAgICAgICMgVE9ETzogTWF5YmUgb25seSBzZXQgdGhp
cyBpZiBjZXJ0dXRpbCB3b24ndCBsYXVuY2g/CisgICAgICAgIGVudiA9IG9zLmVudmlyb24uY29w
eSgpCisgICAgICAgIGNlcnR1dGlsX2RpciA9IG9zLnBhdGguZGlybmFtZShzZWxmLmJpbmFyeSkK
KyAgICAgICAgaWYgbW96aW5mby5pc01hYzoKKyAgICAgICAgICAgIGVudl92YXIgPSAiRFlMRF9M
SUJSQVJZX1BBVEgiCisgICAgICAgIGVsaWYgbW96aW5mby5pc1VuaXg6CisgICAgICAgICAgICBl
bnZfdmFyID0gIkxEX0xJQlJBUllfUEFUSCIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGVu
dl92YXIgPSAiUEFUSCIKKworCisgICAgICAgIGVudltlbnZfdmFyXSA9IChvcy5wYXRoLnBhdGhz
ZXAuam9pbihbY2VydHV0aWxfZGlyLCBlbnZbZW52X3Zhcl1dKQorICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgZW52X3ZhciBpbiBlbnYgZWxzZSBjZXJ0dXRpbF9kaXIpLmVuY29kZSgKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZygpIG9y
ICd1dGYtOCcsICdyZXBsYWNlJykKKworICAgICAgICBkZWYgY2VydHV0aWwoKmFyZ3MpOgorICAg
ICAgICAgICAgY21kID0gW3NlbGYuY2VydHV0aWxfYmluYXJ5XSArIGxpc3QoYXJncykKKyAgICAg
ICAgICAgIHNlbGYubG9nZ2VyLnByb2Nlc3Nfb3V0cHV0KCJjZXJ0dXRpbCIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbnY9ZW52LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIi5qb2luKGNtZCkpCisKKyAgICAg
ICAgcHdfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLnByb2ZpbGUucHJvZmlsZSwgIi5jcnRkYnB3
IikKKyAgICAgICAgd2l0aCBvcGVuKHB3X3BhdGgsICJ3IikgYXMgZjoKKyAgICAgICAgICAgICMg
VXNlIGVtcHR5IHBhc3N3b3JkIGZvciBjZXJ0aWZpY2F0ZSBkYgorICAgICAgICAgICAgZi53cml0
ZSgiXG4iKQorCisgICAgICAgIGNlcnRfZGJfcGF0aCA9IHNlbGYucHJvZmlsZS5wcm9maWxlCisK
KyAgICAgICAgIyBDcmVhdGUgYSBuZXcgY2VydGlmaWNhdGUgZGIKKyAgICAgICAgY2VydHV0aWwo
Ii1OIiwgIi1kIiwgY2VydF9kYl9wYXRoLCAiLWYiLCBwd19wYXRoKQorCisgICAgICAgICMgQWRk
IHRoZSBDQSBjZXJ0aWZpY2F0ZSB0byB0aGUgZGF0YWJhc2UgYW5kIG1hcmsgYXMgdHJ1c3RlZCB0
byBpc3N1ZSBzZXJ2ZXIgY2VydHMKKyAgICAgICAgY2VydHV0aWwoIi1BIiwgIi1kIiwgY2VydF9k
Yl9wYXRoLCAiLWYiLCBwd19wYXRoLCAiLXQiLCAiQ1QsLCIsCisgICAgICAgICAgICAgICAgICIt
biIsICJ3ZWItcGxhdGZvcm0tdGVzdHMiLCAiLWkiLCBzZWxmLmNhX2NlcnRpZmljYXRlX3BhdGgp
CisKKyAgICAgICAgIyBMaXN0IGFsbCBjZXJ0cyBpbiB0aGUgZGF0YWJhc2UKKyAgICAgICAgY2Vy
dHV0aWwoIi1MIiwgIi1kIiwgY2VydF9kYl9wYXRoKQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVz
dHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvYnJvd3NlcnMvaWUucHkg
Yi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9i
cm93c2Vycy9pZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYzk4
MTAyNGYyMmIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mv
dG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9icm93c2Vycy9pZS5weQpAQCAtMCwwICsxLDgxIEBA
Citmcm9tIC5iYXNlIGltcG9ydCBCcm93c2VyLCBFeGVjdXRvckJyb3dzZXIsIHJlcXVpcmVfYXJn
Citmcm9tIC4ud2ViZHJpdmVyX3NlcnZlciBpbXBvcnQgSW50ZXJuZXRFeHBsb3JlckRyaXZlclNl
cnZlcgorZnJvbSAuLmV4ZWN1dG9ycyBpbXBvcnQgZXhlY3V0b3Jfa3dhcmdzIGFzIGJhc2VfZXhl
Y3V0b3Jfa3dhcmdzCitmcm9tIC4uZXhlY3V0b3JzLmV4ZWN1dG9yc2VsZW5pdW0gaW1wb3J0IChT
ZWxlbml1bVRlc3RoYXJuZXNzRXhlY3V0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTZWxlbml1bVJlZlRlc3RFeGVjdXRvcikKK2Zyb20gLi5leGVjdXRvcnMu
ZXhlY3V0b3JpbnRlcm5ldGV4cGxvcmVyIGltcG9ydCBJbnRlcm5ldEV4cGxvcmVyRHJpdmVyV2Rz
cGVjRXhlY3V0b3IKKworX193cHRydW5uZXJfXyA9IHsicHJvZHVjdCI6ICJpZSIsCisgICAgICAg
ICAgICAgICAgICJjaGVja19hcmdzIjogImNoZWNrX2FyZ3MiLAorICAgICAgICAgICAgICAgICAi
YnJvd3NlciI6ICJJbnRlcm5ldEV4cGxvcmVyQnJvd3NlciIsCisgICAgICAgICAgICAgICAgICJl
eGVjdXRvciI6IHsidGVzdGhhcm5lc3MiOiAiU2VsZW5pdW1UZXN0aGFybmVzc0V4ZWN1dG9yIiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWZ0ZXN0IjogIlNlbGVuaXVtUmVmVGVz
dEV4ZWN1dG9yIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3ZHNwZWMiOiAiSW50
ZXJuZXRFeHBsb3JlckRyaXZlcldkc3BlY0V4ZWN1dG9yIn0sCisgICAgICAgICAgICAgICAgICJi
cm93c2VyX2t3YXJncyI6ICJicm93c2VyX2t3YXJncyIsCisgICAgICAgICAgICAgICAgICJleGVj
dXRvcl9rd2FyZ3MiOiAiZXhlY3V0b3Jfa3dhcmdzIiwKKyAgICAgICAgICAgICAgICAgImVudl9l
eHRyYXMiOiAiZW52X2V4dHJhcyIsCisgICAgICAgICAgICAgICAgICJlbnZfb3B0aW9ucyI6ICJl
bnZfb3B0aW9ucyJ9CisKKworZGVmIGNoZWNrX2FyZ3MoKiprd2FyZ3MpOgorICAgIHJlcXVpcmVf
YXJnKGt3YXJncywgIndlYmRyaXZlcl9iaW5hcnkiKQorCitkZWYgYnJvd3Nlcl9rd2FyZ3ModGVz
dF90eXBlLCBydW5faW5mb19kYXRhLCAqKmt3YXJncyk6CisgICAgcmV0dXJuIHsid2ViZHJpdmVy
X2JpbmFyeSI6IGt3YXJnc1sid2ViZHJpdmVyX2JpbmFyeSJdLAorICAgICAgICAgICAgIndlYmRy
aXZlcl9hcmdzIjoga3dhcmdzLmdldCgid2ViZHJpdmVyX2FyZ3MiKX0KKworZGVmIGV4ZWN1dG9y
X2t3YXJncyh0ZXN0X3R5cGUsIHNlcnZlcl9jb25maWcsIGNhY2hlX21hbmFnZXIsIHJ1bl9pbmZv
X2RhdGEsCisgICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKToKKyAgICBmcm9tIHNlbGVuaXVt
LndlYmRyaXZlciBpbXBvcnQgRGVzaXJlZENhcGFiaWxpdGllcworCisgICAgaWVPcHRpb25zID0g
e30KKyAgICBpZU9wdGlvbnNbInJlcXVpcmVXaW5kb3dGb2N1cyJdID0gVHJ1ZQorICAgIGNhcGFi
aWxpdGllcyA9IHt9CisgICAgY2FwYWJpbGl0aWVzWyJicm93c2VyTmFtZSJdID0gImludGVybmV0
IGV4cGxvcmVyIgorICAgIGNhcGFiaWxpdGllc1sicGxhdGZvcm1OYW1lIl0gPSAid2luZG93cyIK
KyAgICBjYXBhYmlsaXRpZXNbInNlOmllT3B0aW9ucyJdID0gaWVPcHRpb25zCisgICAgZXhlY3V0
b3Jfa3dhcmdzID0gYmFzZV9leGVjdXRvcl9rd2FyZ3ModGVzdF90eXBlLCBzZXJ2ZXJfY29uZmln
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlX21hbmFn
ZXIsICoqa3dhcmdzKQorICAgIGV4ZWN1dG9yX2t3YXJnc1siY2xvc2VfYWZ0ZXJfZG9uZSJdID0g
VHJ1ZQorICAgIGV4ZWN1dG9yX2t3YXJnc1siY2FwYWJpbGl0aWVzIl0gPSBjYXBhYmlsaXRpZXMK
KyAgICByZXR1cm4gZXhlY3V0b3Jfa3dhcmdzCisKK2RlZiBlbnZfZXh0cmFzKCoqa3dhcmdzKToK
KyAgICByZXR1cm4gW10KKworZGVmIGVudl9vcHRpb25zKCk6CisgICAgcmV0dXJuIHsiaG9zdCI6
ICJ3ZWItcGxhdGZvcm0udGVzdCIsCisgICAgICAgICAgICAiYmluZF9ob3N0bmFtZSI6ICJ0cnVl
IiwKKyAgICAgICAgICAgICJzdXBwb3J0c19kZWJ1Z2dlciI6IEZhbHNlfQorCitjbGFzcyBJbnRl
cm5ldEV4cGxvcmVyQnJvd3NlcihCcm93c2VyKToKKyAgICB1c2VkX3BvcnRzID0gc2V0KCkKKwor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2dnZXIsIHdlYmRyaXZlcl9iaW5hcnksIHdlYmRyaXZl
cl9hcmdzPU5vbmUpOgorICAgICAgICBCcm93c2VyLl9faW5pdF9fKHNlbGYsIGxvZ2dlcikKKyAg
ICAgICAgc2VsZi5zZXJ2ZXIgPSBJbnRlcmVudEV4cGxvcmVyRHJpdmVyU2VydmVyKHNlbGYubG9n
Z2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YmluYXJ5PXdlYmRyaXZlcl9iaW5hcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhcmdzPXdlYmRyaXZlcl9hcmdzKQorICAgICAgICBzZWxmLndl
YmRyaXZlcl9ob3N0ID0gImxvY2FsaG9zdCIKKyAgICAgICAgc2VsZi53ZWJkcml2ZXJfcG9ydCA9
IHNlbGYuc2VydmVyLnBvcnQKKworICAgIGRlZiBzdGFydChzZWxmLCAqKmt3YXJncyk6CisgICAg
ICAgIHNlbGYuc2VydmVyLnN0YXJ0KCkKKworICAgIGRlZiBzdG9wKHNlbGYsIGZvcmNlPUZhbHNl
KToKKyAgICAgICAgc2VsZi5zZXJ2ZXIuc3RvcChmb3JjZT1mb3JjZSkKKworICAgIGRlZiBwaWQo
c2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnNlcnZlci5waWQKKworICAgIGRlZiBpc19hbGl2
ZShzZWxmKToKKyAgICAgICAgIyBUT0RPKGF0byk6IFRoaXMgb25seSBpbmRpY2F0ZXMgdGhlIHNl
cnZlciBpcyBhbGl2ZSwKKyAgICAgICAgIyBhbmQgZG9lc24ndCBzYXkgYW55dGhpbmcgYWJvdXQg
d2hldGhlciBhIGJyb3dzZXIgc2Vzc2lvbgorICAgICAgICAjIGlzIGFjdGl2ZS4KKyAgICAgICAg
cmV0dXJuIHNlbGYuc2VydmVyLmlzX2FsaXZlKCkKKworICAgIGRlZiBjbGVhbnVwKHNlbGYpOgor
ICAgICAgICBzZWxmLnN0b3AoKQorCisgICAgZGVmIGV4ZWN1dG9yX2Jyb3dzZXIoc2VsZik6Cisg
ICAgICAgIHJldHVybiBFeGVjdXRvckJyb3dzZXIsIHsid2ViZHJpdmVyX3VybCI6IHNlbGYuc2Vy
dmVyLnVybH0KZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93
cHRydW5uZXIvd3B0cnVubmVyL2Jyb3dzZXJzL3NhdWNlLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1w
b3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvYnJvd3NlcnMvc2F1Y2UucHkKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmMzOGRkMGIyODlkCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93
cHRydW5uZXIvYnJvd3NlcnMvc2F1Y2UucHkKQEAgLTAsMCArMSwyMDggQEAKKyMgVGhpcyBTb3Vy
Y2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1Ymxp
YworIyBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJp
YnV0ZWQgd2l0aCB0aGlzIGZpbGUsCisjIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96
aWxsYS5vcmcvTVBMLzIuMC8uCisKK2ltcG9ydCBnbG9iCitpbXBvcnQgb3MKK2ltcG9ydCBzaHV0
aWwKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgdGFyZmlsZQoraW1wb3J0IHRlbXBmaWxlCitp
bXBvcnQgdGltZQorZnJvbSBjU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPIGFzIENTdHJpbmdJTwor
CitpbXBvcnQgcmVxdWVzdHMKKworZnJvbSAuYmFzZSBpbXBvcnQgQnJvd3NlciwgRXhlY3V0b3JC
cm93c2VyLCByZXF1aXJlX2FyZworZnJvbSAuLmV4ZWN1dG9ycyBpbXBvcnQgZXhlY3V0b3Jfa3dh
cmdzIGFzIGJhc2VfZXhlY3V0b3Jfa3dhcmdzCitmcm9tIC4uZXhlY3V0b3JzLmV4ZWN1dG9yc2Vs
ZW5pdW0gaW1wb3J0IChTZWxlbml1bVRlc3RoYXJuZXNzRXhlY3V0b3IsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlbml1bVJlZlRlc3RFeGVjdXRvcikKKwor
aGVyZSA9IG9zLnBhdGguc3BsaXQoX19maWxlX18pWzBdCisKKworX193cHRydW5uZXJfXyA9IHsi
cHJvZHVjdCI6ICJzYXVjZSIsCisgICAgICAgICAgICAgICAgICJjaGVja19hcmdzIjogImNoZWNr
X2FyZ3MiLAorICAgICAgICAgICAgICAgICAiYnJvd3NlciI6ICJTYXVjZUJyb3dzZXIiLAorICAg
ICAgICAgICAgICAgICAiZXhlY3V0b3IiOiB7InRlc3RoYXJuZXNzIjogIlNlbGVuaXVtVGVzdGhh
cm5lc3NFeGVjdXRvciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVmdGVzdCI6
ICJTZWxlbml1bVJlZlRlc3RFeGVjdXRvciJ9LAorICAgICAgICAgICAgICAgICAiYnJvd3Nlcl9r
d2FyZ3MiOiAiYnJvd3Nlcl9rd2FyZ3MiLAorICAgICAgICAgICAgICAgICAiZXhlY3V0b3Jfa3dh
cmdzIjogImV4ZWN1dG9yX2t3YXJncyIsCisgICAgICAgICAgICAgICAgICJlbnZfZXh0cmFzIjog
ImVudl9leHRyYXMiLAorICAgICAgICAgICAgICAgICAiZW52X29wdGlvbnMiOiAiZW52X29wdGlv
bnMifQorCisKK2RlZiBnZXRfY2FwYWJpbGl0aWVzKCoqa3dhcmdzKToKKyAgICBicm93c2VyX25h
bWUgPSBrd2FyZ3NbInNhdWNlX2Jyb3dzZXIiXQorICAgIHBsYXRmb3JtID0ga3dhcmdzWyJzYXVj
ZV9wbGF0Zm9ybSJdCisgICAgdmVyc2lvbiA9IGt3YXJnc1sic2F1Y2VfdmVyc2lvbiJdCisgICAg
YnVpbGQgPSBrd2FyZ3NbInNhdWNlX2J1aWxkIl0KKyAgICB0YWdzID0ga3dhcmdzWyJzYXVjZV90
YWdzIl0KKyAgICB0dW5uZWxfaWQgPSBrd2FyZ3NbInNhdWNlX3R1bm5lbF9pZCJdCisgICAgcHJl
cnVuX3NjcmlwdCA9IHsKKyAgICAgICAgIk1pY3Jvc29mdEVkZ2UiOiB7CisgICAgICAgICAgICAi
ZXhlY3V0YWJsZSI6ICJzYXVjZS1zdG9yYWdlOmVkZ2UtcHJlcnVuLmJhdCIsCisgICAgICAgICAg
ICAiYmFja2dyb3VuZCI6IEZhbHNlLAorICAgICAgICB9LAorICAgICAgICAic2FmYXJpIjogewor
ICAgICAgICAgICAgImV4ZWN1dGFibGUiOiAic2F1Y2Utc3RvcmFnZTpzYWZhcmktcHJlcnVuLnNo
IiwKKyAgICAgICAgICAgICJiYWNrZ3JvdW5kIjogRmFsc2UsCisgICAgICAgIH0KKyAgICB9Cisg
ICAgY2FwYWJpbGl0aWVzID0geworICAgICAgICAiYnJvd3Nlck5hbWUiOiBicm93c2VyX25hbWUs
CisgICAgICAgICJidWlsZCI6IGJ1aWxkLAorICAgICAgICAiZGlzYWJsZVBvcHVwSGFuZGxlciI6
IFRydWUsCisgICAgICAgICJuYW1lIjogIiVzICVzIG9uICVzIiAlIChicm93c2VyX25hbWUsIHZl
cnNpb24sIHBsYXRmb3JtKSwKKyAgICAgICAgInBsYXRmb3JtIjogcGxhdGZvcm0sCisgICAgICAg
ICJwdWJsaWMiOiAicHVibGljIiwKKyAgICAgICAgInNlbGVuaXVtLXZlcnNpb24iOiAiMy4zLjEi
LAorICAgICAgICAidGFncyI6IHRhZ3MsCisgICAgICAgICJ0dW5uZWwtaWRlbnRpZmllciI6IHR1
bm5lbF9pZCwKKyAgICAgICAgInZlcnNpb24iOiB2ZXJzaW9uLAorICAgICAgICAicHJlcnVuIjog
cHJlcnVuX3NjcmlwdC5nZXQoYnJvd3Nlcl9uYW1lKQorICAgIH0KKworICAgIGlmIGJyb3dzZXJf
bmFtZSA9PSAnTWljcm9zb2Z0RWRnZSc6CisgICAgICAgIGNhcGFiaWxpdGllc1snc2VsZW5pdW0t
dmVyc2lvbiddID0gJzIuNC44JworCisgICAgcmV0dXJuIGNhcGFiaWxpdGllcworCisKK2RlZiBn
ZXRfc2F1Y2VfY29uZmlnKCoqa3dhcmdzKToKKyAgICBicm93c2VyX25hbWUgPSBrd2FyZ3NbInNh
dWNlX2Jyb3dzZXIiXQorICAgIHNhdWNlX3VzZXIgPSBrd2FyZ3NbInNhdWNlX3VzZXIiXQorICAg
IHNhdWNlX2tleSA9IGt3YXJnc1sic2F1Y2Vfa2V5Il0KKworICAgIGh1Yl91cmwgPSAiJXM6JXNA
bG9jYWxob3N0OjQ0NDUiICUgKHNhdWNlX3VzZXIsIHNhdWNlX2tleSkKKyAgICBkYXRhID0gewor
ICAgICAgICAidXJsIjogImh0dHA6Ly8lcy93ZC9odWIiICUgaHViX3VybCwKKyAgICAgICAgImJy
b3dzZXJOYW1lIjogYnJvd3Nlcl9uYW1lLAorICAgICAgICAiY2FwYWJpbGl0aWVzIjogZ2V0X2Nh
cGFiaWxpdGllcygqKmt3YXJncykKKyAgICB9CisKKyAgICByZXR1cm4gZGF0YQorCisKK2RlZiBj
aGVja19hcmdzKCoqa3dhcmdzKToKKyAgICByZXF1aXJlX2FyZyhrd2FyZ3MsICJzYXVjZV9icm93
c2VyIikKKyAgICByZXF1aXJlX2FyZyhrd2FyZ3MsICJzYXVjZV9wbGF0Zm9ybSIpCisgICAgcmVx
dWlyZV9hcmcoa3dhcmdzLCAic2F1Y2VfdmVyc2lvbiIpCisgICAgcmVxdWlyZV9hcmcoa3dhcmdz
LCAic2F1Y2VfdXNlciIpCisgICAgcmVxdWlyZV9hcmcoa3dhcmdzLCAic2F1Y2Vfa2V5IikKKwor
CitkZWYgYnJvd3Nlcl9rd2FyZ3ModGVzdF90eXBlLCBydW5faW5mb19kYXRhLCAqKmt3YXJncyk6
CisgICAgc2F1Y2VfY29uZmlnID0gZ2V0X3NhdWNlX2NvbmZpZygqKmt3YXJncykKKworICAgIHJl
dHVybiB7InNhdWNlX2NvbmZpZyI6IHNhdWNlX2NvbmZpZ30KKworCitkZWYgZXhlY3V0b3Jfa3dh
cmdzKHRlc3RfdHlwZSwgc2VydmVyX2NvbmZpZywgY2FjaGVfbWFuYWdlciwgcnVuX2luZm9fZGF0
YSwKKyAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpOgorICAgIGV4ZWN1dG9yX2t3YXJncyA9
IGJhc2VfZXhlY3V0b3Jfa3dhcmdzKHRlc3RfdHlwZSwgc2VydmVyX2NvbmZpZywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZV9tYW5hZ2VyLCAqKmt3YXJn
cykKKworICAgIGV4ZWN1dG9yX2t3YXJnc1siY2FwYWJpbGl0aWVzIl0gPSBnZXRfY2FwYWJpbGl0
aWVzKCoqa3dhcmdzKQorCisgICAgcmV0dXJuIGV4ZWN1dG9yX2t3YXJncworCisKK2RlZiBlbnZf
ZXh0cmFzKCoqa3dhcmdzKToKKyAgICByZXR1cm4gW1NhdWNlQ29ubmVjdCgqKmt3YXJncyldCisK
KworZGVmIGVudl9vcHRpb25zKCk6CisgICAgcmV0dXJuIHsiaG9zdCI6ICJ3ZWItcGxhdGZvcm0u
dGVzdCIsCisgICAgICAgICAgICAiYmluZF9ob3N0bmFtZSI6ICJ0cnVlIiwKKyAgICAgICAgICAg
ICJzdXBwb3J0c19kZWJ1Z2dlciI6IEZhbHNlfQorCisKK2RlZiBnZXRfdGFyKHVybCwgZGVzdCk6
CisgICAgcmVzcCA9IHJlcXVlc3RzLmdldCh1cmwsIHN0cmVhbT1UcnVlKQorICAgIHJlc3AucmFp
c2VfZm9yX3N0YXR1cygpCisgICAgd2l0aCB0YXJmaWxlLm9wZW4oZmlsZW9iaj1DU3RyaW5nSU8o
cmVzcC5yYXcucmVhZCgpKSkgYXMgZjoKKyAgICAgICAgZi5leHRyYWN0YWxsKHBhdGg9ZGVzdCkK
KworCitjbGFzcyBTYXVjZUNvbm5lY3QoKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqKmt3
YXJncyk6CisgICAgICAgIHNlbGYuc2F1Y2VfdXNlciA9IGt3YXJnc1sic2F1Y2VfdXNlciJdCisg
ICAgICAgIHNlbGYuc2F1Y2Vfa2V5ID0ga3dhcmdzWyJzYXVjZV9rZXkiXQorICAgICAgICBzZWxm
LnNhdWNlX3R1bm5lbF9pZCA9IGt3YXJnc1sic2F1Y2VfdHVubmVsX2lkIl0KKyAgICAgICAgc2Vs
Zi5zYXVjZV9jb25uZWN0X2JpbmFyeSA9IGt3YXJncy5nZXQoInNhdWNlX2Nvbm5lY3RfYmluYXJ5
IikKKyAgICAgICAgc2VsZi5zY19wcm9jZXNzID0gTm9uZQorICAgICAgICBzZWxmLnRlbXBfZGly
ID0gTm9uZQorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmLCBvcHRpb25zKToKKyAgICAgICAgaWYg
bm90IHNlbGYuc2F1Y2VfY29ubmVjdF9iaW5hcnk6CisgICAgICAgICAgICBzZWxmLnRlbXBfZGly
ID0gdGVtcGZpbGUubWtkdGVtcCgpCisgICAgICAgICAgICBnZXRfdGFyKCJodHRwczovL3NhdWNl
bGFicy5jb20vZG93bmxvYWRzL3NjLWxhdGVzdC1saW51eC50YXIuZ3oiLCBzZWxmLnRlbXBfZGly
KQorICAgICAgICAgICAgc2VsZi5zYXVjZV9jb25uZWN0X2JpbmFyeSA9IGdsb2IuZ2xvYihvcy5w
YXRoLmpvaW4oc2VsZi50ZW1wX2RpciwgInNjLSotbGludXgvYmluL3NjIikpWzBdCisKKyAgICAg
ICAgc2VsZi51cGxvYWRfcHJlcnVuX2V4ZWMoJ2VkZ2UtcHJlcnVuLmJhdCcpCisgICAgICAgIHNl
bGYudXBsb2FkX3ByZXJ1bl9leGVjKCdzYWZhcmktcHJlcnVuLnNoJykKKworICAgICAgICBzZWxm
LnNjX3Byb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVuKFsKKyAgICAgICAgICAgIHNlbGYuc2F1Y2Vf
Y29ubmVjdF9iaW5hcnksCisgICAgICAgICAgICAiLS11c2VyPSVzIiAlIHNlbGYuc2F1Y2VfdXNl
ciwKKyAgICAgICAgICAgICItLWFwaS1rZXk9JXMiICUgc2VsZi5zYXVjZV9rZXksCisgICAgICAg
ICAgICAiLS1uby1yZW1vdmUtY29sbGlkaW5nLXR1bm5lbHMiLAorICAgICAgICAgICAgIi0tdHVu
bmVsLWlkZW50aWZpZXI9JXMiICUgc2VsZi5zYXVjZV90dW5uZWxfaWQsCisgICAgICAgICAgICAi
LS1yZWFkeWZpbGU9Li9zYXVjZV9pc19yZWFkeSIsCisgICAgICAgICAgICAiLS10dW5uZWwtZG9t
YWlucyIsCisgICAgICAgICAgICAid2ViLXBsYXRmb3JtLnRlc3QiLAorICAgICAgICAgICAgIiou
d2ViLXBsYXRmb3JtLnRlc3QiCisgICAgICAgIF0pCisgICAgICAgIHdoaWxlIG5vdCBvcy5wYXRo
LmV4aXN0cygnLi9zYXVjZV9pc19yZWFkeScpIGFuZCBub3Qgc2VsZi5zY19wcm9jZXNzLnBvbGwo
KToKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoNSkKKworICAgICAgICBpZiBzZWxmLnNjX3Byb2Nl
c3MucmV0dXJuY29kZSBpcyBub3QgTm9uZSBhbmQgc2VsZi5zY19wcm9jZXNzLnJldHVybmNvZGUg
PiAwOgorICAgICAgICAgICAgcmFpc2UgU2F1Y2VFeGNlcHRpb24oIlVuYWJsZSB0byBzdGFydCBT
YXVjZSBDb25uZWN0IFByb3h5LiBQcm9jZXNzIGV4aXRlZCB3aXRoIGNvZGUgJXMiLCBzZWxmLnNj
X3Byb2Nlc3MucmV0dXJuY29kZSkKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCBleGNfdHlwZSwg
ZXhjX3ZhbCwgZXhjX3RiKToKKyAgICAgICAgc2VsZi5zY19wcm9jZXNzLnRlcm1pbmF0ZSgpCisg
ICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYudGVtcF9kaXIpOgorICAgICAgICAgICAgdHJ5
OgorICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi50ZW1wX2RpcikKKyAgICAgICAg
ICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiB1cGxv
YWRfcHJlcnVuX2V4ZWMoc2VsZiwgZmlsZV9uYW1lKToKKyAgICAgICAgYXV0aCA9IChzZWxmLnNh
dWNlX3VzZXIsIHNlbGYuc2F1Y2Vfa2V5KQorICAgICAgICB1cmwgPSAiaHR0cHM6Ly9zYXVjZWxh
YnMuY29tL3Jlc3QvdjEvc3RvcmFnZS8lcy8lcz9vdmVyd3JpdGU9dHJ1ZSIgJSAoc2VsZi5zYXVj
ZV91c2VyLCBmaWxlX25hbWUpCisKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihoZXJl
LCAnc2F1Y2Vfc2V0dXAnLCBmaWxlX25hbWUpLCAncmInKSBhcyBmOgorICAgICAgICAgICAgcmVx
dWVzdHMucG9zdCh1cmwsIGRhdGE9ZiwgYXV0aD1hdXRoKQorCisKK2NsYXNzIFNhdWNlRXhjZXB0
aW9uKEV4Y2VwdGlvbik6CisgICAgcGFzcworCisKK2NsYXNzIFNhdWNlQnJvd3NlcihCcm93c2Vy
KToKKyAgICBpbml0X3RpbWVvdXQgPSAzMDAKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2dn
ZXIsIHNhdWNlX2NvbmZpZyk6CisgICAgICAgIEJyb3dzZXIuX19pbml0X18oc2VsZiwgbG9nZ2Vy
KQorICAgICAgICBzZWxmLnNhdWNlX2NvbmZpZyA9IHNhdWNlX2NvbmZpZworCisgICAgZGVmIHN0
YXJ0KHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgc3RvcChzZWxmLCBmb3JjZT1GYWxz
ZSk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBwaWQoc2VsZik6CisgICAgICAgIHJldHVybiBO
b25lCisKKyAgICBkZWYgaXNfYWxpdmUoc2VsZik6CisgICAgICAgICMgVE9ETzogU2hvdWxkIHRo
aXMgY2hlY2sgc29tZXRoaW5nIGFib3V0IHRoZSBjb25uZWN0aW9uPworICAgICAgICByZXR1cm4g
VHJ1ZQorCisgICAgZGVmIGNsZWFudXAoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBl
eGVjdXRvcl9icm93c2VyKHNlbGYpOgorICAgICAgICByZXR1cm4gRXhlY3V0b3JCcm93c2VyLCB7
IndlYmRyaXZlcl91cmwiOiBzZWxmLnNhdWNlX2NvbmZpZ1sidXJsIl19CmRpZmYgLS1naXQgYS9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9icm93
c2Vycy9zYXVjZV9zZXR1cC9lZGdlLXByZXJ1bi5iYXQgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRl
ZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9icm93c2Vycy9zYXVjZV9zZXR1cC9lZGdl
LXByZXJ1bi5iYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQ1NTQ4
OTQ4OTZiCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rv
b2xzL3dwdHJ1bm5lci93cHRydW5uZXIvYnJvd3NlcnMvc2F1Y2Vfc2V0dXAvZWRnZS1wcmVydW4u
YmF0CkBAIC0wLDAgKzEsMiBAQAorQGVjaG8gb2ZmCityZWcgYWRkICJIS0NVXFNvZnR3YXJlXENs
YXNzZXNcTG9jYWwgU2V0dGluZ3NcU29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZl
cnNpb25cQXBwQ29udGFpbmVyXFN0b3JhZ2VcbWljcm9zb2Z0Lm1pY3Jvc29mdGVkZ2VfOHdla3li
M2Q4YmJ3ZVxNaWNyb3NvZnRFZGdlXE5ldyBXaW5kb3dzIiAvdiAiUG9wdXBNZ3IiIC90IFJFR19T
WiAvZCBubwpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dw
dHJ1bm5lci93cHRydW5uZXIvYnJvd3NlcnMvc2F1Y2Vfc2V0dXAvc2FmYXJpLXByZXJ1bi5zaCBi
L1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2Jy
b3dzZXJzL3NhdWNlX3NldHVwL3NhZmFyaS1wcmVydW4uc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAuLjg1YzcyZTZiZTZhCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJp
dmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvYnJvd3NlcnMv
c2F1Y2Vfc2V0dXAvc2FmYXJpLXByZXJ1bi5zaApAQCAtMCwwICsxLDIgQEAKKyMhL2Jpbi9iYXNo
CitkZWZhdWx0cyB3cml0ZSBjb20uYXBwbGUuU2FmYXJpIGNvbS5hcHBsZS5TYWZhcmkuQ29udGVu
dFBhZ2VHcm91cElkZW50aWZpZXIuV2ViS2l0MkphdmFTY3JpcHRDYW5PcGVuV2luZG93c0F1dG9t
YXRpY2FsbHkgLWJvb2wgdHJ1ZQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQv
dzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvYnJvd3NlcnMvc2VydmVyLWxvY2F0aW9ucy50
eHQgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5l
ci9icm93c2Vycy9zZXJ2ZXItbG9jYXRpb25zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uNWRjYWY0YmI2YTQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJU
ZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9icm93c2Vycy9zZXJ2
ZXItbG9jYXRpb25zLnR4dApAQCAtMCwwICsxLDMxIEBACitodHRwOi8vbG9jYWxob3N0OjgwMDAg
ICAgcHJpbWFyeQorCitodHRwOi8vd2ViLXBsYXRmb3JtLnRlc3Q6ODAwMAoraHR0cDovL3d3dy53
ZWItcGxhdGZvcm0udGVzdDo4MDAwCitodHRwOi8vd3d3MS53ZWItcGxhdGZvcm0udGVzdDo4MDAw
CitodHRwOi8vd3d3Mi53ZWItcGxhdGZvcm0udGVzdDo4MDAwCitodHRwOi8veG4tLW44ajZkczUz
bHd3a3JxaHYyOGEud2ViLXBsYXRmb3JtLnRlc3Q6ODAwMAoraHR0cDovL3huLS1sdmUtNmxhZC53
ZWItcGxhdGZvcm0udGVzdDo4MDAwCisKK2h0dHA6Ly93ZWItcGxhdGZvcm0udGVzdDo4MDAxCito
dHRwOi8vd3d3LndlYi1wbGF0Zm9ybS50ZXN0OjgwMDEKK2h0dHA6Ly93d3cxLndlYi1wbGF0Zm9y
bS50ZXN0OjgwMDEKK2h0dHA6Ly93d3cyLndlYi1wbGF0Zm9ybS50ZXN0OjgwMDEKK2h0dHA6Ly94
bi0tbjhqNmRzNTNsd3drcnFodjI4YS53ZWItcGxhdGZvcm0udGVzdDo4MDAxCitodHRwOi8veG4t
LWx2ZS02bGFkLndlYi1wbGF0Zm9ybS50ZXN0OjgwMDEKKworaHR0cHM6Ly93ZWItcGxhdGZvcm0u
dGVzdDo4NDQzCitodHRwczovL3d3dy53ZWItcGxhdGZvcm0udGVzdDo4NDQzCitodHRwczovL3d3
dzEud2ViLXBsYXRmb3JtLnRlc3Q6ODQ0MworaHR0cHM6Ly93d3cyLndlYi1wbGF0Zm9ybS50ZXN0
Ojg0NDMKK2h0dHBzOi8veG4tLW44ajZkczUzbHd3a3JxaHYyOGEud2ViLXBsYXRmb3JtLnRlc3Q6
ODQ0MworaHR0cHM6Ly94bi0tbHZlLTZsYWQud2ViLXBsYXRmb3JtLnRlc3Q6ODQ0MworCisjIFRo
ZXNlIGFyZSBhY3R1YWxseSB3cyBzZXJ2ZXJzLCBidXQgdW50aWwgbW96cHJvZmlsZSBpcworIyBm
aXhlZCB3ZSBoYXZlIHRvIHByZXRlbmQgdGhhdCB0aGV5IGFyZSBodHRwIHNlcnZlcnMKK2h0dHA6
Ly93ZWItcGxhdGZvcm0udGVzdDo4ODg4CitodHRwOi8vd3d3LndlYi1wbGF0Zm9ybS50ZXN0Ojg4
ODgKK2h0dHA6Ly93d3cxLndlYi1wbGF0Zm9ybS50ZXN0Ojg4ODgKK2h0dHA6Ly93d3cyLndlYi1w
bGF0Zm9ybS50ZXN0Ojg4ODgKK2h0dHA6Ly94bi0tbjhqNmRzNTNsd3drcnFodjI4YS53ZWItcGxh
dGZvcm0udGVzdDo4ODg4CitodHRwOi8veG4tLWx2ZS02bGFkLndlYi1wbGF0Zm9ybS50ZXN0Ojg4
ODgKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5u
ZXIvd3B0cnVubmVyL2Jyb3dzZXJzL3NlcnZvLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQv
dzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvYnJvd3NlcnMvc2Vydm8ucHkKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjg5ZDY5YWI5ZTU0Ci0tLSAvZGV2L251bGwK
KysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5u
ZXIvYnJvd3NlcnMvc2Vydm8ucHkKQEAgLTAsMCArMSw4MSBAQAoraW1wb3J0IG9zCisKK2Zyb20g
LmJhc2UgaW1wb3J0IE51bGxCcm93c2VyLCBFeGVjdXRvckJyb3dzZXIsIHJlcXVpcmVfYXJnCitm
cm9tIC4uZXhlY3V0b3JzIGltcG9ydCBleGVjdXRvcl9rd2FyZ3MgYXMgYmFzZV9leGVjdXRvcl9r
d2FyZ3MKK2Zyb20gLi5leGVjdXRvcnMuZXhlY3V0b3JzZXJ2byBpbXBvcnQgU2Vydm9UZXN0aGFy
bmVzc0V4ZWN1dG9yLCBTZXJ2b1JlZlRlc3RFeGVjdXRvciwgU2Vydm9XZHNwZWNFeGVjdXRvcgor
CitoZXJlID0gb3MucGF0aC5qb2luKG9zLnBhdGguc3BsaXQoX19maWxlX18pWzBdKQorCitfX3dw
dHJ1bm5lcl9fID0geworICAgICJwcm9kdWN0IjogInNlcnZvIiwKKyAgICAiY2hlY2tfYXJncyI6
ICJjaGVja19hcmdzIiwKKyAgICAiYnJvd3NlciI6ICJTZXJ2b0Jyb3dzZXIiLAorICAgICJleGVj
dXRvciI6IHsKKyAgICAgICAgInRlc3RoYXJuZXNzIjogIlNlcnZvVGVzdGhhcm5lc3NFeGVjdXRv
ciIsCisgICAgICAgICJyZWZ0ZXN0IjogIlNlcnZvUmVmVGVzdEV4ZWN1dG9yIiwKKyAgICAgICAg
Indkc3BlYyI6ICJTZXJ2b1dkc3BlY0V4ZWN1dG9yIiwKKyAgICB9LAorICAgICJicm93c2VyX2t3
YXJncyI6ICJicm93c2VyX2t3YXJncyIsCisgICAgImV4ZWN1dG9yX2t3YXJncyI6ICJleGVjdXRv
cl9rd2FyZ3MiLAorICAgICJlbnZfZXh0cmFzIjogImVudl9leHRyYXMiLAorICAgICJlbnZfb3B0
aW9ucyI6ICJlbnZfb3B0aW9ucyIsCisgICAgInVwZGF0ZV9wcm9wZXJ0aWVzIjogInVwZGF0ZV9w
cm9wZXJ0aWVzIiwKK30KKworCitkZWYgY2hlY2tfYXJncygqKmt3YXJncyk6CisgICAgcmVxdWly
ZV9hcmcoa3dhcmdzLCAiYmluYXJ5IikKKworCitkZWYgYnJvd3Nlcl9rd2FyZ3ModGVzdF90eXBl
LCBydW5faW5mb19kYXRhLCAqKmt3YXJncyk6CisgICAgcmV0dXJuIHsKKyAgICAgICAgImJpbmFy
eSI6IGt3YXJnc1siYmluYXJ5Il0sCisgICAgICAgICJkZWJ1Z19pbmZvIjoga3dhcmdzWyJkZWJ1
Z19pbmZvIl0sCisgICAgICAgICJiaW5hcnlfYXJncyI6IGt3YXJnc1siYmluYXJ5X2FyZ3MiXSwK
KyAgICAgICAgInVzZXJfc3R5bGVzaGVldHMiOiBrd2FyZ3MuZ2V0KCJ1c2VyX3N0eWxlc2hlZXRz
IiksCisgICAgICAgICJjYV9jZXJ0aWZpY2F0ZV9wYXRoIjoga3dhcmdzWyJzc2xfZW52Il0uY2Ff
Y2VydF9wYXRoKCksCisgICAgfQorCisKK2RlZiBleGVjdXRvcl9rd2FyZ3ModGVzdF90eXBlLCBz
ZXJ2ZXJfY29uZmlnLCBjYWNoZV9tYW5hZ2VyLCBydW5faW5mb19kYXRhLAorICAgICAgICAgICAg
ICAgICAgICAqKmt3YXJncyk6CisgICAgcnYgPSBiYXNlX2V4ZWN1dG9yX2t3YXJncyh0ZXN0X3R5
cGUsIHNlcnZlcl9jb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZV9t
YW5hZ2VyLCAqKmt3YXJncykKKyAgICBydlsicGF1c2VfYWZ0ZXJfdGVzdCJdID0ga3dhcmdzWyJw
YXVzZV9hZnRlcl90ZXN0Il0KKyAgICByZXR1cm4gcnYKKworCitkZWYgZW52X2V4dHJhcygqKmt3
YXJncyk6CisgICAgcmV0dXJuIFtdCisKKworZGVmIGVudl9vcHRpb25zKCk6CisgICAgcmV0dXJu
IHsiaG9zdCI6ICIxMjcuMC4wLjEiLAorICAgICAgICAgICAgImV4dGVybmFsX2hvc3QiOiAid2Vi
LXBsYXRmb3JtLnRlc3QiLAorICAgICAgICAgICAgImJpbmRfaG9zdG5hbWUiOiAidHJ1ZSIsCisg
ICAgICAgICAgICAidGVzdGhhcm5lc3NyZXBvcnQiOiAidGVzdGhhcm5lc3NyZXBvcnQtc2Vydm8u
anMiLAorICAgICAgICAgICAgInN1cHBvcnRzX2RlYnVnZ2VyIjogVHJ1ZX0KKworCitkZWYgdXBk
YXRlX3Byb3BlcnRpZXMoKToKKyAgICByZXR1cm4gWyJkZWJ1ZyIsICJvcyIsICJ2ZXJzaW9uIiwg
InByb2Nlc3NvciIsICJiaXRzIl0sIE5vbmUKKworCitjbGFzcyBTZXJ2b0Jyb3dzZXIoTnVsbEJy
b3dzZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2dnZXIsIGJpbmFyeSwgZGVidWdfaW5m
bz1Ob25lLCBiaW5hcnlfYXJncz1Ob25lLAorICAgICAgICAgICAgICAgICB1c2VyX3N0eWxlc2hl
ZXRzPU5vbmUsIGNhX2NlcnRpZmljYXRlX3BhdGg9Tm9uZSk6CisgICAgICAgIE51bGxCcm93c2Vy
Ll9faW5pdF9fKHNlbGYsIGxvZ2dlcikKKyAgICAgICAgc2VsZi5iaW5hcnkgPSBiaW5hcnkKKyAg
ICAgICAgc2VsZi5kZWJ1Z19pbmZvID0gZGVidWdfaW5mbworICAgICAgICBzZWxmLmJpbmFyeV9h
cmdzID0gYmluYXJ5X2FyZ3Mgb3IgW10KKyAgICAgICAgc2VsZi51c2VyX3N0eWxlc2hlZXRzID0g
dXNlcl9zdHlsZXNoZWV0cyBvciBbXQorICAgICAgICBzZWxmLmNhX2NlcnRpZmljYXRlX3BhdGgg
PSBjYV9jZXJ0aWZpY2F0ZV9wYXRoCisKKyAgICBkZWYgZXhlY3V0b3JfYnJvd3NlcihzZWxmKToK
KyAgICAgICAgcmV0dXJuIEV4ZWN1dG9yQnJvd3NlciwgeworICAgICAgICAgICAgImJpbmFyeSI6
IHNlbGYuYmluYXJ5LAorICAgICAgICAgICAgImRlYnVnX2luZm8iOiBzZWxmLmRlYnVnX2luZm8s
CisgICAgICAgICAgICAiYmluYXJ5X2FyZ3MiOiBzZWxmLmJpbmFyeV9hcmdzLAorICAgICAgICAg
ICAgInVzZXJfc3R5bGVzaGVldHMiOiBzZWxmLnVzZXJfc3R5bGVzaGVldHMsCisgICAgICAgICAg
ICAiY2FfY2VydGlmaWNhdGVfcGF0aCI6IHNlbGYuY2FfY2VydGlmaWNhdGVfcGF0aCwKKyAgICAg
ICAgfQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1
bm5lci93cHRydW5uZXIvYnJvd3NlcnMvc2Vydm9kcml2ZXIucHkgYi9XZWJEcml2ZXJUZXN0cy9p
bXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9icm93c2Vycy9zZXJ2b2RyaXZl
ci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYzI1MWRlODRkMTYK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0
cnVubmVyL3dwdHJ1bm5lci9icm93c2Vycy9zZXJ2b2RyaXZlci5weQpAQCAtMCwwICsxLDE2NSBA
QAoraW1wb3J0IG9zCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHRlbXBmaWxlCisKK2Zyb20g
bW96cHJvY2VzcyBpbXBvcnQgUHJvY2Vzc0hhbmRsZXIKKworZnJvbSAuYmFzZSBpbXBvcnQgQnJv
d3NlciwgcmVxdWlyZV9hcmcsIGdldF9mcmVlX3BvcnQsIGJyb3dzZXJfY29tbWFuZCwgRXhlY3V0
b3JCcm93c2VyCitmcm9tIC4uZXhlY3V0b3JzIGltcG9ydCBleGVjdXRvcl9rd2FyZ3MgYXMgYmFz
ZV9leGVjdXRvcl9rd2FyZ3MKK2Zyb20gLi5leGVjdXRvcnMuZXhlY3V0b3JzZXJ2b2RyaXZlciBp
bXBvcnQgKFNlcnZvV2ViRHJpdmVyVGVzdGhhcm5lc3NFeGVjdXRvciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlcnZvV2ViRHJpdmVyUmVmVGVzdEV4ZWN1
dG9yKQorCitoZXJlID0gb3MucGF0aC5qb2luKG9zLnBhdGguc3BsaXQoX19maWxlX18pWzBdKQor
CitfX3dwdHJ1bm5lcl9fID0geworICAgICJwcm9kdWN0IjogInNlcnZvZHJpdmVyIiwKKyAgICAi
Y2hlY2tfYXJncyI6ICJjaGVja19hcmdzIiwKKyAgICAiYnJvd3NlciI6ICJTZXJ2b1dlYkRyaXZl
ckJyb3dzZXIiLAorICAgICJleGVjdXRvciI6IHsKKyAgICAgICAgInRlc3RoYXJuZXNzIjogIlNl
cnZvV2ViRHJpdmVyVGVzdGhhcm5lc3NFeGVjdXRvciIsCisgICAgICAgICJyZWZ0ZXN0IjogIlNl
cnZvV2ViRHJpdmVyUmVmVGVzdEV4ZWN1dG9yIiwKKyAgICB9LAorICAgICJicm93c2VyX2t3YXJn
cyI6ICJicm93c2VyX2t3YXJncyIsCisgICAgImV4ZWN1dG9yX2t3YXJncyI6ICJleGVjdXRvcl9r
d2FyZ3MiLAorICAgICJlbnZfZXh0cmFzIjogImVudl9leHRyYXMiLAorICAgICJlbnZfb3B0aW9u
cyI6ICJlbnZfb3B0aW9ucyIsCisgICAgInVwZGF0ZV9wcm9wZXJ0aWVzIjogInVwZGF0ZV9wcm9w
ZXJ0aWVzIiwKK30KKworaG9zdHNfdGV4dCA9ICIiIjEyNy4wLjAuMSB3ZWItcGxhdGZvcm0udGVz
dAorMTI3LjAuMC4xIHd3dy53ZWItcGxhdGZvcm0udGVzdAorMTI3LjAuMC4xIHd3dzEud2ViLXBs
YXRmb3JtLnRlc3QKKzEyNy4wLjAuMSB3d3cyLndlYi1wbGF0Zm9ybS50ZXN0CisxMjcuMC4wLjEg
eG4tLW44ajZkczUzbHd3a3JxaHYyOGEud2ViLXBsYXRmb3JtLnRlc3QKKzEyNy4wLjAuMSB4bi0t
bHZlLTZsYWQud2ViLXBsYXRmb3JtLnRlc3QKKyIiIgorCisKK2RlZiBjaGVja19hcmdzKCoqa3dh
cmdzKToKKyAgICByZXF1aXJlX2FyZyhrd2FyZ3MsICJiaW5hcnkiKQorCisKK2RlZiBicm93c2Vy
X2t3YXJncyh0ZXN0X3R5cGUsIHJ1bl9pbmZvX2RhdGEsICoqa3dhcmdzKToKKyAgICByZXR1cm4g
eworICAgICAgICAiYmluYXJ5Ijoga3dhcmdzWyJiaW5hcnkiXSwKKyAgICAgICAgImRlYnVnX2lu
Zm8iOiBrd2FyZ3NbImRlYnVnX2luZm8iXSwKKyAgICAgICAgInVzZXJfc3R5bGVzaGVldHMiOiBr
d2FyZ3MuZ2V0KCJ1c2VyX3N0eWxlc2hlZXRzIiksCisgICAgfQorCisKK2RlZiBleGVjdXRvcl9r
d2FyZ3ModGVzdF90eXBlLCBzZXJ2ZXJfY29uZmlnLCBjYWNoZV9tYW5hZ2VyLCBydW5faW5mb19k
YXRhLCAqKmt3YXJncyk6CisgICAgcnYgPSBiYXNlX2V4ZWN1dG9yX2t3YXJncyh0ZXN0X3R5cGUs
IHNlcnZlcl9jb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZV9tYW5h
Z2VyLCAqKmt3YXJncykKKyAgICByZXR1cm4gcnYKKworCitkZWYgZW52X2V4dHJhcygqKmt3YXJn
cyk6CisgICAgcmV0dXJuIFtdCisKKworZGVmIGVudl9vcHRpb25zKCk6CisgICAgcmV0dXJuIHsi
aG9zdCI6ICIxMjcuMC4wLjEiLAorICAgICAgICAgICAgImV4dGVybmFsX2hvc3QiOiAid2ViLXBs
YXRmb3JtLnRlc3QiLAorICAgICAgICAgICAgImJpbmRfaG9zdG5hbWUiOiAidHJ1ZSIsCisgICAg
ICAgICAgICAidGVzdGhhcm5lc3NyZXBvcnQiOiAidGVzdGhhcm5lc3NyZXBvcnQtc2Vydm9kcml2
ZXIuanMiLAorICAgICAgICAgICAgInN1cHBvcnRzX2RlYnVnZ2VyIjogVHJ1ZX0KKworCitkZWYg
dXBkYXRlX3Byb3BlcnRpZXMoKToKKyAgICByZXR1cm4gWyJkZWJ1ZyIsICJvcyIsICJ2ZXJzaW9u
IiwgInByb2Nlc3NvciIsICJiaXRzIl0sIE5vbmUKKworCitkZWYgbWFrZV9ob3N0c19maWxlKCk6
CisgICAgaG9zdHNfZmQsIGhvc3RzX3BhdGggPSB0ZW1wZmlsZS5ta3N0ZW1wKCkKKyAgICB3aXRo
IG9zLmZkb3Blbihob3N0c19mZCwgInciKSBhcyBmOgorICAgICAgICBmLndyaXRlKGhvc3RzX3Rl
eHQpCisgICAgcmV0dXJuIGhvc3RzX3BhdGgKKworCitjbGFzcyBTZXJ2b1dlYkRyaXZlckJyb3dz
ZXIoQnJvd3Nlcik6CisgICAgdXNlZF9wb3J0cyA9IHNldCgpCisKKyAgICBkZWYgX19pbml0X18o
c2VsZiwgbG9nZ2VyLCBiaW5hcnksIGRlYnVnX2luZm89Tm9uZSwgd2ViZHJpdmVyX2hvc3Q9IjEy
Ny4wLjAuMSIsCisgICAgICAgICAgICAgICAgIHVzZXJfc3R5bGVzaGVldHM9Tm9uZSk6CisgICAg
ICAgIEJyb3dzZXIuX19pbml0X18oc2VsZiwgbG9nZ2VyKQorICAgICAgICBzZWxmLmJpbmFyeSA9
IGJpbmFyeQorICAgICAgICBzZWxmLndlYmRyaXZlcl9ob3N0ID0gd2ViZHJpdmVyX2hvc3QKKyAg
ICAgICAgc2VsZi53ZWJkcml2ZXJfcG9ydCA9IE5vbmUKKyAgICAgICAgc2VsZi5wcm9jID0gTm9u
ZQorICAgICAgICBzZWxmLmRlYnVnX2luZm8gPSBkZWJ1Z19pbmZvCisgICAgICAgIHNlbGYuaG9z
dHNfcGF0aCA9IG1ha2VfaG9zdHNfZmlsZSgpCisgICAgICAgIHNlbGYuY29tbWFuZCA9IE5vbmUK
KyAgICAgICAgc2VsZi51c2VyX3N0eWxlc2hlZXRzID0gdXNlcl9zdHlsZXNoZWV0cyBpZiB1c2Vy
X3N0eWxlc2hlZXRzIGVsc2UgW10KKworICAgIGRlZiBzdGFydChzZWxmLCAqKmt3YXJncyk6Cisg
ICAgICAgIHNlbGYud2ViZHJpdmVyX3BvcnQgPSBnZXRfZnJlZV9wb3J0KDQ0NDQsIGV4Y2x1ZGU9
c2VsZi51c2VkX3BvcnRzKQorICAgICAgICBzZWxmLnVzZWRfcG9ydHMuYWRkKHNlbGYud2ViZHJp
dmVyX3BvcnQpCisKKyAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAgZW52
WyJIT1NUX0ZJTEUiXSA9IHNlbGYuaG9zdHNfcGF0aAorICAgICAgICBlbnZbIlJVU1RfQkFDS1RS
QUNFIl0gPSAiMSIKKworICAgICAgICBkZWJ1Z19hcmdzLCBjb21tYW5kID0gYnJvd3Nlcl9jb21t
YW5kKAorICAgICAgICAgICAgc2VsZi5iaW5hcnksCisgICAgICAgICAgICBbCisgICAgICAgICAg
ICAgICAgIi0taGFyZC1mYWlsIiwKKyAgICAgICAgICAgICAgICAiLS13ZWJkcml2ZXIiLCBzdHIo
c2VsZi53ZWJkcml2ZXJfcG9ydCksCisgICAgICAgICAgICAgICAgImFib3V0OmJsYW5rIiwKKyAg
ICAgICAgICAgIF0sCisgICAgICAgICAgICBzZWxmLmRlYnVnX2luZm8KKyAgICAgICAgKQorCisg
ICAgICAgIGZvciBzdHlsZXNoZWV0IGluIHNlbGYudXNlcl9zdHlsZXNoZWV0czoKKyAgICAgICAg
ICAgIGNvbW1hbmQgKz0gWyItLXVzZXItc3R5bGVzaGVldCIsIHN0eWxlc2hlZXRdCisKKyAgICAg
ICAgc2VsZi5jb21tYW5kID0gY29tbWFuZAorCisgICAgICAgIHNlbGYuY29tbWFuZCA9IGRlYnVn
X2FyZ3MgKyBzZWxmLmNvbW1hbmQKKworICAgICAgICBpZiBub3Qgc2VsZi5kZWJ1Z19pbmZvIG9y
IG5vdCBzZWxmLmRlYnVnX2luZm8uaW50ZXJhY3RpdmU6CisgICAgICAgICAgICBzZWxmLnByb2Mg
PSBQcm9jZXNzSGFuZGxlcihzZWxmLmNvbW1hbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwcm9jZXNzT3V0cHV0TGluZT1bc2VsZi5vbl9vdXRwdXRdLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52PWVudiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlT3V0cHV0PUZhbHNlKQorICAgICAgICAgICAg
c2VsZi5wcm9jLnJ1bigpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnByb2MgPSBz
dWJwcm9jZXNzLlBvcGVuKHNlbGYuY29tbWFuZCwgZW52PWVudikKKworICAgICAgICBzZWxmLmxv
Z2dlci5kZWJ1ZygiU2Vydm8gU3RhcnRlZCIpCisKKyAgICBkZWYgc3RvcChzZWxmLCBmb3JjZT1G
YWxzZSk6CisgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJTdG9wcGluZyBicm93c2VyIikKKyAg
ICAgICAgaWYgc2VsZi5wcm9jIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgICAgIHNlbGYucHJvYy5raWxsKCkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgor
ICAgICAgICAgICAgICAgICMgVGhpcyBjYW4gaGFwcGVuIG9uIFdpbmRvd3MgaWYgdGhlIHByb2Nl
c3MgaXMgYWxyZWFkeSBkZWFkCisgICAgICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHBpZChz
ZWxmKToKKyAgICAgICAgaWYgc2VsZi5wcm9jIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4g
Tm9uZQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnByb2MucGlkCisg
ICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisK
KyAgICBkZWYgb25fb3V0cHV0KHNlbGYsIGxpbmUpOgorICAgICAgICAiIiJXcml0ZSBhIGxpbmUg
b2Ygb3V0cHV0IGZyb20gdGhlIHByb2Nlc3MgdG8gdGhlIGxvZyIiIgorICAgICAgICBzZWxmLmxv
Z2dlci5wcm9jZXNzX291dHB1dChzZWxmLnBpZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsaW5lLmRlY29kZSgidXRmOCIsICJyZXBsYWNlIiksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9IiAiLmpvaW4oc2VsZi5jb21tYW5kKSkKKwor
ICAgIGRlZiBpc19hbGl2ZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5ydW5uZXI6CisgICAgICAg
ICAgICByZXR1cm4gc2VsZi5ydW5uZXIuaXNfcnVubmluZygpCisgICAgICAgIHJldHVybiBGYWxz
ZQorCisgICAgZGVmIGNsZWFudXAoc2VsZik6CisgICAgICAgIHNlbGYuc3RvcCgpCisKKyAgICBk
ZWYgZXhlY3V0b3JfYnJvd3NlcihzZWxmKToKKyAgICAgICAgYXNzZXJ0IHNlbGYud2ViZHJpdmVy
X3BvcnQgaXMgbm90IE5vbmUKKyAgICAgICAgcmV0dXJuIEV4ZWN1dG9yQnJvd3NlciwgeyJ3ZWJk
cml2ZXJfaG9zdCI6IHNlbGYud2ViZHJpdmVyX2hvc3QsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAid2ViZHJpdmVyX3BvcnQiOiBzZWxmLndlYmRyaXZlcl9wb3J0fQpkaWZmIC0t
Z2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5u
ZXIvY29uZmlnLmpzb24gYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVu
bmVyL3dwdHJ1bm5lci9jb25maWcuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMC4uZDE0NjQyNGEwZjAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9p
bXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9jb25maWcuanNvbgpAQCAtMCww
ICsxLDcgQEAKK3siaG9zdCI6ICIlKGhvc3QpcyIsCisgInBvcnRzIjp7Imh0dHAiOls4MDAwLCA4
MDAxXSwKKyAgICAgICAgICAiaHR0cHMiOls4NDQzXSwKKyAgICAgICAgICAid3MiOls4ODg4XX0s
CisgImNoZWNrX3N1YmRvbWFpbnMiOmZhbHNlLAorICJiaW5kX2hvc3RuYW1lIjolKGJpbmRfaG9z
dG5hbWUpcywKKyAic3NsIjp7fX0KZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVk
L3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2NvbmZpZy5weSBiL1dlYkRyaXZlclRlc3Rz
L2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2NvbmZpZy5weQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNWJkM2Y0NjdmM2UKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1
bm5lci9jb25maWcucHkKQEAgLTAsMCArMSw2MCBAQAoraW1wb3J0IENvbmZpZ1BhcnNlcgoraW1w
b3J0IG9zCitpbXBvcnQgc3lzCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBPcmRlcmVkRGljdAor
CitoZXJlID0gb3MucGF0aC5zcGxpdChfX2ZpbGVfXylbMF0KKworY2xhc3MgQ29uZmlnRGljdChk
aWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYmFzZV9wYXRoLCAqYXJncywgKiprd2FyZ3Mp
OgorICAgICAgICBzZWxmLmJhc2VfcGF0aCA9IGJhc2VfcGF0aAorICAgICAgICBkaWN0Ll9faW5p
dF9fKHNlbGYsICphcmdzLCAqKmt3YXJncykKKworICAgIGRlZiBnZXRfcGF0aChzZWxmLCBrZXks
IGRlZmF1bHQ9Tm9uZSk6CisgICAgICAgIGlmIGtleSBub3QgaW4gc2VsZjoKKyAgICAgICAgICAg
IHJldHVybiBkZWZhdWx0CisgICAgICAgIHBhdGggPSBzZWxmW2tleV0KKyAgICAgICAgb3MucGF0
aC5leHBhbmR1c2VyKHBhdGgpCisgICAgICAgIHJldHVybiBvcy5wYXRoLmFic3BhdGgob3MucGF0
aC5qb2luKHNlbGYuYmFzZV9wYXRoLCBwYXRoKSkKKworZGVmIHJlYWQoY29uZmlnX3BhdGgpOgor
ICAgIGNvbmZpZ19wYXRoID0gb3MucGF0aC5hYnNwYXRoKGNvbmZpZ19wYXRoKQorICAgIGNvbmZp
Z19yb290ID0gb3MucGF0aC5zcGxpdChjb25maWdfcGF0aClbMF0KKyAgICBwYXJzZXIgPSBDb25m
aWdQYXJzZXIuU2FmZUNvbmZpZ1BhcnNlcigpCisgICAgc3VjY2VzcyA9IHBhcnNlci5yZWFkKGNv
bmZpZ19wYXRoKQorICAgIGFzc2VydCBjb25maWdfcGF0aCBpbiBzdWNjZXNzLCBzdWNjZXNzCisK
KyAgICBzdWJucyA9IHsicHdkIjogb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguY3VyZGlyKX0KKwor
ICAgIHJ2ID0gT3JkZXJlZERpY3QoKQorICAgIGZvciBzZWN0aW9uIGluIHBhcnNlci5zZWN0aW9u
cygpOgorICAgICAgICBydltzZWN0aW9uXSA9IENvbmZpZ0RpY3QoY29uZmlnX3Jvb3QpCisgICAg
ICAgIGZvciBrZXkgaW4gcGFyc2VyLm9wdGlvbnMoc2VjdGlvbik6CisgICAgICAgICAgICBydltz
ZWN0aW9uXVtrZXldID0gcGFyc2VyLmdldChzZWN0aW9uLCBrZXksIEZhbHNlLCBzdWJucykKKwor
ICAgIHJldHVybiBydgorCitkZWYgcGF0aChhcmd2PU5vbmUpOgorICAgIGlmIGFyZ3YgaXMgTm9u
ZToKKyAgICAgICAgYXJndiA9IFtdCisgICAgcGF0aCA9IE5vbmUKKworICAgIGZvciBpLCBhcmcg
aW4gZW51bWVyYXRlKGFyZ3YpOgorICAgICAgICBpZiBhcmcgPT0gIi0tY29uZmlnIjoKKyAgICAg
ICAgICAgIGlmIGkgKyAxIDwgbGVuKGFyZ3YpOgorICAgICAgICAgICAgICAgIHBhdGggPSBhcmd2
W2kgKyAxXQorICAgICAgICBlbGlmIGFyZy5zdGFydHN3aXRoKCItLWNvbmZpZz0iKToKKyAgICAg
ICAgICAgIHBhdGggPSBhcmcuc3BsaXQoIj0iLCAxKVsxXQorICAgICAgICBpZiBwYXRoIGlzIG5v
dCBOb25lOgorICAgICAgICAgICAgYnJlYWsKKworICAgIGlmIHBhdGggaXMgTm9uZToKKyAgICAg
ICAgaWYgb3MucGF0aC5leGlzdHMoIndwdHJ1bm5lci5pbmkiKToKKyAgICAgICAgICAgIHBhdGgg
PSBvcy5wYXRoLmFic3BhdGgoIndwdHJ1bm5lci5pbmkiKQorICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihoZXJlLCAiLi4iLCAid3B0cnVubmVyLmRlZmF1bHQu
aW5pIikKKworICAgIHJldHVybiBvcy5wYXRoLmFic3BhdGgocGF0aCkKKworZGVmIGxvYWQoKToK
KyAgICByZXR1cm4gcmVhZChwYXRoKHN5cy5hcmd2KSkKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRl
c3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2Vudmlyb25tZW50LnB5
IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIv
ZW52aXJvbm1lbnQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjcz
YjU0Y2ViOWYzCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNj
L3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvZW52aXJvbm1lbnQucHkKQEAgLTAsMCArMSwyMjUg
QEAKK2ltcG9ydCBqc29uCitpbXBvcnQgb3MKK2ltcG9ydCBtdWx0aXByb2Nlc3NpbmcKK2ltcG9y
dCBzaWduYWwKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aW1lCisKK2Zyb20g
bW96bG9nIGltcG9ydCBnZXRfZGVmYXVsdF9sb2dnZXIsIGhhbmRsZXJzLCBwcm94eQorCitmcm9t
IHdwdGxvZ2dpbmcgaW1wb3J0IExvZ0xldmVsUmV3cml0ZXIKKworaGVyZSA9IG9zLnBhdGguc3Bs
aXQoX19maWxlX18pWzBdCisKK3NlcnZlID0gTm9uZQorc3NsdXRpbHMgPSBOb25lCisKKworaG9z
dG5hbWVzID0gWyJ3ZWItcGxhdGZvcm0udGVzdCIsCisgICAgICAgICAgICAgInd3dy53ZWItcGxh
dGZvcm0udGVzdCIsCisgICAgICAgICAgICAgInd3dzEud2ViLXBsYXRmb3JtLnRlc3QiLAorICAg
ICAgICAgICAgICJ3d3cyLndlYi1wbGF0Zm9ybS50ZXN0IiwKKyAgICAgICAgICAgICAieG4tLW44
ajZkczUzbHd3a3JxaHYyOGEud2ViLXBsYXRmb3JtLnRlc3QiLAorICAgICAgICAgICAgICJ4bi0t
bHZlLTZsYWQud2ViLXBsYXRmb3JtLnRlc3QiXQorCisKK2RlZiBkb19kZWxheWVkX2ltcG9ydHMo
bG9nZ2VyLCB0ZXN0X3BhdGhzKToKKyAgICBnbG9iYWwgc2VydmUsIHNzbHV0aWxzCisKKyAgICBz
ZXJ2ZV9yb290ID0gc2VydmVfcGF0aCh0ZXN0X3BhdGhzKQorICAgIHN5cy5wYXRoLmluc2VydCgw
LCBzZXJ2ZV9yb290KQorCisgICAgZmFpbGVkID0gW10KKworICAgIHRyeToKKyAgICAgICAgZnJv
bSB0b29scy5zZXJ2ZSBpbXBvcnQgc2VydmUKKyAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAg
ICAgIGZyb20gd3B0X3Rvb2xzLnNlcnZlIGltcG9ydCBzZXJ2ZQorICAgIGV4Y2VwdCBJbXBvcnRF
cnJvcjoKKyAgICAgICAgZmFpbGVkLmFwcGVuZCgic2VydmUiKQorCisgICAgdHJ5OgorICAgICAg
ICBpbXBvcnQgc3NsdXRpbHMKKyAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgIGZhaWxl
ZC5hcHBlbmQoInNzbHV0aWxzIikKKworICAgIGlmIGZhaWxlZDoKKyAgICAgICAgbG9nZ2VyLmNy
aXRpY2FsKAorICAgICAgICAgICAgIkZhaWxlZCB0byBpbXBvcnQgJXMuIEVuc3VyZSB0aGF0IHRl
c3RzIHBhdGggJXMgY29udGFpbnMgd2ViLXBsYXRmb3JtLXRlc3RzIiAlCisgICAgICAgICAgICAo
IiwgIi5qb2luKGZhaWxlZCksIHNlcnZlX3Jvb3QpKQorICAgICAgICBzeXMuZXhpdCgxKQorCisK
K2RlZiBzZXJ2ZV9wYXRoKHRlc3RfcGF0aHMpOgorICAgIHJldHVybiB0ZXN0X3BhdGhzWyIvIl1b
InRlc3RzX3BhdGgiXQorCisKK2RlZiBnZXRfc3NsX2t3YXJncygqKmt3YXJncyk6CisgICAgaWYg
a3dhcmdzWyJzc2xfdHlwZSJdID09ICJvcGVuc3NsIjoKKyAgICAgICAgYXJncyA9IHsib3BlbnNz
bF9iaW5hcnkiOiBrd2FyZ3NbIm9wZW5zc2xfYmluYXJ5Il19CisgICAgZWxpZiBrd2FyZ3NbInNz
bF90eXBlIl0gPT0gInByZWdlbmVyYXRlZCI6CisgICAgICAgIGFyZ3MgPSB7Imhvc3Rfa2V5X3Bh
dGgiOiBrd2FyZ3NbImhvc3Rfa2V5X3BhdGgiXSwKKyAgICAgICAgICAgICAgICAiaG9zdF9jZXJ0
X3BhdGgiOiBrd2FyZ3NbImhvc3RfY2VydF9wYXRoIl0sCisgICAgICAgICAgICAgICAgICJjYV9j
ZXJ0X3BhdGgiOiBrd2FyZ3NbImNhX2NlcnRfcGF0aCJdfQorICAgIGVsc2U6CisgICAgICAgIGFy
Z3MgPSB7fQorICAgIHJldHVybiBhcmdzCisKKworZGVmIHNzbF9lbnYobG9nZ2VyLCAqKmt3YXJn
cyk6CisgICAgc3NsX2Vudl9jbHMgPSBzc2x1dGlscy5lbnZpcm9ubWVudHNba3dhcmdzWyJzc2xf
dHlwZSJdXQorICAgIHJldHVybiBzc2xfZW52X2Nscyhsb2dnZXIsICoqZ2V0X3NzbF9rd2FyZ3Mo
Kiprd2FyZ3MpKQorCisKK2NsYXNzIFRlc3RFbnZpcm9ubWVudEVycm9yKEV4Y2VwdGlvbik6Cisg
ICAgcGFzcworCisKK2NsYXNzIFRlc3RFbnZpcm9ubWVudChvYmplY3QpOgorICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCB0ZXN0X3BhdGhzLCBzc2xfZW52LCBwYXVzZV9hZnRlcl90ZXN0LCBkZWJ1Z19p
bmZvLCBvcHRpb25zLCBlbnZfZXh0cmFzKToKKyAgICAgICAgIiIiQ29udGV4dCBtYW5hZ2VyIHRo
YXQgb3ducyB0aGUgdGVzdCBlbnZpcm9ubWVudCBpLmUuIHRoZSBodHRwIGFuZAorICAgICAgICB3
ZWJzb2NrZXRzIHNlcnZlcnMiIiIKKyAgICAgICAgc2VsZi50ZXN0X3BhdGhzID0gdGVzdF9wYXRo
cworICAgICAgICBzZWxmLnNzbF9lbnYgPSBzc2xfZW52CisgICAgICAgIHNlbGYuc2VydmVyID0g
Tm9uZQorICAgICAgICBzZWxmLmNvbmZpZyA9IE5vbmUKKyAgICAgICAgc2VsZi5leHRlcm5hbF9j
b25maWcgPSBOb25lCisgICAgICAgIHNlbGYucGF1c2VfYWZ0ZXJfdGVzdCA9IHBhdXNlX2FmdGVy
X3Rlc3QKKyAgICAgICAgc2VsZi50ZXN0X3NlcnZlcl9wb3J0ID0gb3B0aW9ucy5wb3AoInRlc3Rf
c2VydmVyX3BvcnQiLCBUcnVlKQorICAgICAgICBzZWxmLmRlYnVnX2luZm8gPSBkZWJ1Z19pbmZv
CisgICAgICAgIHNlbGYub3B0aW9ucyA9IG9wdGlvbnMgaWYgb3B0aW9ucyBpcyBub3QgTm9uZSBl
bHNlIHt9CisKKyAgICAgICAgc2VsZi5jYWNoZV9tYW5hZ2VyID0gbXVsdGlwcm9jZXNzaW5nLk1h
bmFnZXIoKQorICAgICAgICBzZWxmLnN0YXNoID0gc2VydmUuc3Rhc2guU3Rhc2hTZXJ2ZXIoKQor
ICAgICAgICBzZWxmLmVudl9leHRyYXMgPSBlbnZfZXh0cmFzCisKKworICAgIGRlZiBfX2VudGVy
X18oc2VsZik6CisgICAgICAgIHNlbGYuc3Rhc2guX19lbnRlcl9fKCkKKyAgICAgICAgc2VsZi5z
c2xfZW52Ll9fZW50ZXJfXygpCisgICAgICAgIHNlbGYuY2FjaGVfbWFuYWdlci5fX2VudGVyX18o
KQorICAgICAgICBmb3IgY20gaW4gc2VsZi5lbnZfZXh0cmFzOgorICAgICAgICAgICAgY20uX19l
bnRlcl9fKHNlbGYub3B0aW9ucykKKyAgICAgICAgc2VsZi5zZXR1cF9zZXJ2ZXJfbG9nZ2luZygp
CisgICAgICAgIHNlbGYuY29uZmlnID0gc2VsZi5sb2FkX2NvbmZpZygpCisgICAgICAgIHNlcnZl
LnNldF9jb21wdXRlZF9kZWZhdWx0cyhzZWxmLmNvbmZpZykKKyAgICAgICAgc2VsZi5leHRlcm5h
bF9jb25maWcsIHNlbGYuc2VydmVycyA9IHNlcnZlLnN0YXJ0KHNlbGYuY29uZmlnLCBzZWxmLnNz
bF9lbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzZWxmLmdldF9yb3V0ZXMoKSkKKyAgICAgICAgaWYgc2VsZi5vcHRpb25zLmdldCgi
c3VwcG9ydHNfZGVidWdnZXIiKSBhbmQgc2VsZi5kZWJ1Z19pbmZvIGFuZCBzZWxmLmRlYnVnX2lu
Zm8uaW50ZXJhY3RpdmU6CisgICAgICAgICAgICBzZWxmLmlnbm9yZV9pbnRlcnJ1cHRzKCkKKyAg
ICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCBleGNfdHlwZSwgZXhj
X3ZhbCwgZXhjX3RiKToKKyAgICAgICAgc2VsZi5wcm9jZXNzX2ludGVycnVwdHMoKQorCisgICAg
ICAgIGZvciBzY2hlbWUsIHNlcnZlcnMgaW4gc2VsZi5zZXJ2ZXJzLml0ZXJpdGVtcygpOgorICAg
ICAgICAgICAgZm9yIHBvcnQsIHNlcnZlciBpbiBzZXJ2ZXJzOgorICAgICAgICAgICAgICAgIHNl
cnZlci5raWxsKCkKKyAgICAgICAgZm9yIGNtIGluIHNlbGYuZW52X2V4dHJhczoKKyAgICAgICAg
ICAgIGNtLl9fZXhpdF9fKGV4Y190eXBlLCBleGNfdmFsLCBleGNfdGIpCisgICAgICAgIHNlbGYu
Y2FjaGVfbWFuYWdlci5fX2V4aXRfXyhleGNfdHlwZSwgZXhjX3ZhbCwgZXhjX3RiKQorICAgICAg
ICBzZWxmLnNzbF9lbnYuX19leGl0X18oZXhjX3R5cGUsIGV4Y192YWwsIGV4Y190YikKKyAgICAg
ICAgc2VsZi5zdGFzaC5fX2V4aXRfXygpCisKKyAgICBkZWYgaWdub3JlX2ludGVycnVwdHMoc2Vs
Zik6CisgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0lOVCwgc2lnbmFsLlNJR19JR04p
CisKKyAgICBkZWYgcHJvY2Vzc19pbnRlcnJ1cHRzKHNlbGYpOgorICAgICAgICBzaWduYWwuc2ln
bmFsKHNpZ25hbC5TSUdJTlQsIHNpZ25hbC5TSUdfREZMKQorCisgICAgZGVmIGxvYWRfY29uZmln
KHNlbGYpOgorICAgICAgICBkZWZhdWx0X2NvbmZpZ19wYXRoID0gb3MucGF0aC5qb2luKHNlcnZl
X3BhdGgoc2VsZi50ZXN0X3BhdGhzKSwgImNvbmZpZy5kZWZhdWx0Lmpzb24iKQorICAgICAgICBs
b2NhbF9jb25maWdfcGF0aCA9IG9zLnBhdGguam9pbihoZXJlLCAiY29uZmlnLmpzb24iKQorCisg
ICAgICAgIHdpdGggb3BlbihkZWZhdWx0X2NvbmZpZ19wYXRoKSBhcyBmOgorICAgICAgICAgICAg
ZGVmYXVsdF9jb25maWcgPSBqc29uLmxvYWQoZikKKworICAgICAgICB3aXRoIG9wZW4obG9jYWxf
Y29uZmlnX3BhdGgpIGFzIGY6CisgICAgICAgICAgICBkYXRhID0gZi5yZWFkKCkKKyAgICAgICAg
ICAgIGxvY2FsX2NvbmZpZyA9IGpzb24ubG9hZHMoZGF0YSAlIHNlbGYub3B0aW9ucykKKworICAg
ICAgICAjVE9ETzogYWxsb3cgbm9uLWRlZmF1bHQgY29uZmlndXJhdGlvbiBmb3Igc3NsCisKKyAg
ICAgICAgbG9jYWxfY29uZmlnWyJleHRlcm5hbF9ob3N0Il0gPSBzZWxmLm9wdGlvbnMuZ2V0KCJl
eHRlcm5hbF9ob3N0IiwgTm9uZSkKKyAgICAgICAgbG9jYWxfY29uZmlnWyJzc2wiXVsiZW5jcnlw
dF9hZnRlcl9jb25uZWN0Il0gPSBzZWxmLm9wdGlvbnMuZ2V0KCJlbmNyeXB0X2FmdGVyX2Nvbm5l
Y3QiLCBGYWxzZSkKKworICAgICAgICBjb25maWcgPSBzZXJ2ZS5tZXJnZV9qc29uKGRlZmF1bHRf
Y29uZmlnLCBsb2NhbF9jb25maWcpCisgICAgICAgIGNvbmZpZ1siZG9jX3Jvb3QiXSA9IHNlcnZl
X3BhdGgoc2VsZi50ZXN0X3BhdGhzKQorCisgICAgICAgIGlmIG5vdCBzZWxmLnNzbF9lbnYuc3Ns
X2VuYWJsZWQ6CisgICAgICAgICAgICBjb25maWdbInBvcnRzIl1bImh0dHBzIl0gPSBbTm9uZV0K
KworICAgICAgICBob3N0ID0gc2VsZi5vcHRpb25zLmdldCgiY2VydGlmaWNhdGVfZG9tYWluIiwg
Y29uZmlnWyJob3N0Il0pCisgICAgICAgIGhvc3RzID0gW2hvc3RdCisgICAgICAgIGhvc3RzLmV4
dGVuZCgiJXMuJXMiICUgKGl0ZW1bMF0sIGhvc3QpIGZvciBpdGVtIGluIHNlcnZlLmdldF9zdWJk
b21haW5zKGhvc3QpLnZhbHVlcygpKQorICAgICAgICBrZXlfZmlsZSwgY2VydGlmaWNhdGUgPSBz
ZWxmLnNzbF9lbnYuaG9zdF9jZXJ0X3BhdGgoaG9zdHMpCisKKyAgICAgICAgY29uZmlnWyJrZXlf
ZmlsZSJdID0ga2V5X2ZpbGUKKyAgICAgICAgY29uZmlnWyJjZXJ0aWZpY2F0ZSJdID0gY2VydGlm
aWNhdGUKKworICAgICAgICByZXR1cm4gY29uZmlnCisKKyAgICBkZWYgc2V0dXBfc2VydmVyX2xv
Z2dpbmcoc2VsZik6CisgICAgICAgIHNlcnZlcl9sb2dnZXIgPSBnZXRfZGVmYXVsdF9sb2dnZXIo
Y29tcG9uZW50PSJ3cHRzZXJ2ZSIpCisgICAgICAgIGFzc2VydCBzZXJ2ZXJfbG9nZ2VyIGlzIG5v
dCBOb25lCisgICAgICAgIGxvZ19maWx0ZXIgPSBoYW5kbGVycy5Mb2dMZXZlbEZpbHRlcihsYW1i
ZGEgeDp4LCAiaW5mbyIpCisgICAgICAgICMgRG93bmdyYWRlIGVycm9ycyB0byB3YXJuaW5ncyBm
b3IgdGhlIHNlcnZlcgorICAgICAgICBsb2dfZmlsdGVyID0gTG9nTGV2ZWxSZXdyaXRlcihsb2df
ZmlsdGVyLCBbImVycm9yIl0sICJ3YXJuaW5nIikKKyAgICAgICAgc2VydmVyX2xvZ2dlci5jb21w
b25lbnRfZmlsdGVyID0gbG9nX2ZpbHRlcgorCisgICAgICAgIHNlcnZlcl9sb2dnZXIgPSBwcm94
eS5RdWV1ZWRQcm94eUxvZ2dlcihzZXJ2ZXJfbG9nZ2VyKQorCisgICAgICAgIHRyeToKKyAgICAg
ICAgICAgICNTZXQgYXMgdGhlIGRlZmF1bHQgbG9nZ2VyIGZvciB3cHRzZXJ2ZQorICAgICAgICAg
ICAgc2VydmUuc2V0X2xvZ2dlcihzZXJ2ZXJfbG9nZ2VyKQorICAgICAgICAgICAgc2VydmUubG9n
Z2VyID0gc2VydmVyX2xvZ2dlcgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAg
ICAgIyBUaGlzIGhhcHBlbnMgaWYgbG9nZ2luZyBoYXMgYWxyZWFkeSBiZWVuIHNldCB1cCBmb3Ig
d3B0c2VydmUKKyAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiBnZXRfcm91dGVzKHNlbGYpOgor
ICAgICAgICByb3V0ZV9idWlsZGVyID0gc2VydmUuUm91dGVzQnVpbGRlcigpCisKKyAgICAgICAg
Zm9yIHBhdGgsIGZvcm1hdF9hcmdzLCBjb250ZW50X3R5cGUsIHJvdXRlIGluIFsKKyAgICAgICAg
ICAgICAgICAoInRlc3RoYXJuZXNzX3J1bm5lci5odG1sIiwge30sICJ0ZXh0L2h0bWwiLCAiL3Rl
c3RoYXJuZXNzX3J1bm5lci5odG1sIiksCisgICAgICAgICAgICAgICAgKHNlbGYub3B0aW9ucy5n
ZXQoInRlc3RoYXJuZXNzcmVwb3J0IiwgInRlc3RoYXJuZXNzcmVwb3J0LmpzIiksCisgICAgICAg
ICAgICAgICAgIHsib3V0cHV0Ijogc2VsZi5wYXVzZV9hZnRlcl90ZXN0fSwgInRleHQvamF2YXNj
cmlwdCIsCisgICAgICAgICAgICAgICAgICIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0Lmpz
IildOgorICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGgubm9ybXBhdGgob3MucGF0aC5qb2luKGhl
cmUsIHBhdGgpKQorICAgICAgICAgICAgcm91dGVfYnVpbGRlci5hZGRfc3RhdGljKHBhdGgsIGZv
cm1hdF9hcmdzLCBjb250ZW50X3R5cGUsIHJvdXRlKQorCisgICAgICAgIGZvciB1cmxfYmFzZSwg
cGF0aHMgaW4gc2VsZi50ZXN0X3BhdGhzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgaWYgdXJs
X2Jhc2UgPT0gIi8iOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICByb3V0
ZV9idWlsZGVyLmFkZF9tb3VudF9wb2ludCh1cmxfYmFzZSwgcGF0aHNbInRlc3RzX3BhdGgiXSkK
KworICAgICAgICBpZiAiLyIgbm90IGluIHNlbGYudGVzdF9wYXRoczoKKyAgICAgICAgICAgIGRl
bCByb3V0ZV9idWlsZGVyLm1vdW50cG9pbnRfcm91dGVzWyIvIl0KKworICAgICAgICByZXR1cm4g
cm91dGVfYnVpbGRlci5nZXRfcm91dGVzKCkKKworICAgIGRlZiBlbnN1cmVfc3RhcnRlZChzZWxm
KToKKyAgICAgICAgIyBQYXVzZSBmb3IgYSB3aGlsZSB0byBlbnN1cmUgdGhhdCB0aGUgc2VydmVy
IGhhcyBhIGNoYW5jZSB0byBzdGFydAorICAgICAgICBmb3IgXyBpbiB4cmFuZ2UoMjApOgorICAg
ICAgICAgICAgZmFpbGVkID0gc2VsZi50ZXN0X3NlcnZlcnMoKQorICAgICAgICAgICAgaWYgbm90
IGZhaWxlZDoKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHRpbWUuc2xlZXAo
MC41KQorICAgICAgICByYWlzZSBFbnZpcm9ubWVudEVycm9yKCJTZXJ2ZXJzIGZhaWxlZCB0byBz
dGFydCAoc2NoZW1lOnBvcnQpOiAlcyIgJSAoIiVzOiVzIiBmb3IgaXRlbSBpbiBmYWlsZWQpKQor
CisgICAgZGVmIHRlc3Rfc2VydmVycyhzZWxmKToKKyAgICAgICAgZmFpbGVkID0gW10KKyAgICAg
ICAgZm9yIHNjaGVtZSwgc2VydmVycyBpbiBzZWxmLnNlcnZlcnMuaXRlcml0ZW1zKCk6CisgICAg
ICAgICAgICBmb3IgcG9ydCwgc2VydmVyIGluIHNlcnZlcnM6CisgICAgICAgICAgICAgICAgaWYg
c2VsZi50ZXN0X3NlcnZlcl9wb3J0OgorICAgICAgICAgICAgICAgICAgICBzID0gc29ja2V0LnNv
Y2tldCgpCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAg
IHMuY29ubmVjdCgoc2VsZi5jb25maWdbImhvc3QiXSwgcG9ydCkpCisgICAgICAgICAgICAgICAg
ICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBmYWlsZWQu
YXBwZW5kKChzY2hlbWUsIHBvcnQpKQorICAgICAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAg
ICAgICAgICAgICAgICAgICAgICAgcy5jbG9zZSgpCisKKyAgICAgICAgICAgICAgICBpZiBub3Qg
c2VydmVyLmlzX2FsaXZlKCk6CisgICAgICAgICAgICAgICAgICAgIGZhaWxlZC5hcHBlbmQoKHNj
aGVtZSwgcG9ydCkpCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9v
bHMvd3B0cnVubmVyL3dwdHJ1bm5lci9leGVjdXRvcnMvX19pbml0X18ucHkgYi9XZWJEcml2ZXJU
ZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9leGVjdXRvcnMvX19p
bml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjI0NzYxYjgz
ODMwCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xz
L3dwdHJ1bm5lci93cHRydW5uZXIvZXhlY3V0b3JzL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsNCBA
QAorZnJvbSBiYXNlIGltcG9ydCAoZXhlY3V0b3Jfa3dhcmdzLAorICAgICAgICAgICAgICAgICAg
dGVzdGhhcm5lc3NfcmVzdWx0X2NvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgIHJlZnRlc3Rf
cmVzdWx0X2NvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgIFRlc3RFeGVjdXRvcikKZGlmZiAt
LWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVu
bmVyL2V4ZWN1dG9ycy9iYXNlLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xz
L3dwdHJ1bm5lci93cHRydW5uZXIvZXhlY3V0b3JzL2Jhc2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAuLjI3YmUwYzU0Yjc4Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vi
RHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvZXhlY3V0
b3JzL2Jhc2UucHkKQEAgLTAsMCArMSw0NzkgQEAKK2ltcG9ydCBoYXNobGliCitpbXBvcnQgaHR0
cGxpYgoraW1wb3J0IG9zCitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgdHJhY2ViYWNrCitpbXBv
cnQgc29ja2V0CitpbXBvcnQgdXJscGFyc2UKK2Zyb20gYWJjIGltcG9ydCBBQkNNZXRhLCBhYnN0
cmFjdG1ldGhvZAorCitmcm9tIC4udGVzdHJ1bm5lciBpbXBvcnQgU3RvcAorCitoZXJlID0gb3Mu
cGF0aC5zcGxpdChfX2ZpbGVfXylbMF0KKworIyBFeHRyYSB0aW1lb3V0IHRvIHVzZSBhZnRlciBp
bnRlcm5hbCB0ZXN0IHRpbWVvdXQgYXQgd2hpY2ggdGhlIGhhcm5lc3MKKyMgc2hvdWxkIGZvcmNl
IGEgdGltZW91dAorZXh0cmFfdGltZW91dCA9IDUgIyBzZWNvbmRzCisKKworZGVmIGV4ZWN1dG9y
X2t3YXJncyh0ZXN0X3R5cGUsIHNlcnZlcl9jb25maWcsIGNhY2hlX21hbmFnZXIsICoqa3dhcmdz
KToKKyAgICB0aW1lb3V0X211bHRpcGxpZXIgPSBrd2FyZ3NbInRpbWVvdXRfbXVsdGlwbGllciJd
CisgICAgaWYgdGltZW91dF9tdWx0aXBsaWVyIGlzIE5vbmU6CisgICAgICAgIHRpbWVvdXRfbXVs
dGlwbGllciA9IDEKKworICAgIGV4ZWN1dG9yX2t3YXJncyA9IHsic2VydmVyX2NvbmZpZyI6IHNl
cnZlcl9jb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICJ0aW1lb3V0X211bHRpcGxpZXIi
OiB0aW1lb3V0X211bHRpcGxpZXIsCisgICAgICAgICAgICAgICAgICAgICAgICJkZWJ1Z19pbmZv
Ijoga3dhcmdzWyJkZWJ1Z19pbmZvIl19CisKKyAgICBpZiB0ZXN0X3R5cGUgPT0gInJlZnRlc3Qi
OgorICAgICAgICBleGVjdXRvcl9rd2FyZ3NbInNjcmVlbnNob3RfY2FjaGUiXSA9IGNhY2hlX21h
bmFnZXIuZGljdCgpCisKKyAgICBpZiB0ZXN0X3R5cGUgPT0gIndkc3BlYyI6CisgICAgICAgIGV4
ZWN1dG9yX2t3YXJnc1siYmluYXJ5Il0gPSBrd2FyZ3MuZ2V0KCJiaW5hcnkiKQorICAgICAgICBl
eGVjdXRvcl9rd2FyZ3NbIndlYmRyaXZlcl9iaW5hcnkiXSA9IGt3YXJncy5nZXQoIndlYmRyaXZl
cl9iaW5hcnkiKQorICAgICAgICBleGVjdXRvcl9rd2FyZ3NbIndlYmRyaXZlcl9hcmdzIl0gPSBr
d2FyZ3MuZ2V0KCJ3ZWJkcml2ZXJfYXJncyIpCisKKyAgICByZXR1cm4gZXhlY3V0b3Jfa3dhcmdz
CisKKworZGVmIHN0cmlwX3NlcnZlcih1cmwpOgorICAgICIiIlJlbW92ZSB0aGUgc2NoZW1lIGFu
ZCBuZXRsb2MgZnJvbSBhIHVybCwgbGVhdmluZyBvbmx5IHRoZSBwYXRoIGFuZCBhbnkgcXVlcnkK
KyAgICBvciBmcmFnbWVudC4KKworICAgIHVybCAtIHRoZSB1cmwgdG8gc3RyaXAKKworICAgIGUu
Zy4gaHR0cDovL2V4YW1wbGUub3JnOjgwMDAvdGVzdHM/aWQ9MSMyIGJlY29tZXMgL3Rlc3RzP2lk
PTEjMiIiIgorCisgICAgdXJsX3BhcnRzID0gbGlzdCh1cmxwYXJzZS51cmxzcGxpdCh1cmwpKQor
ICAgIHVybF9wYXJ0c1swXSA9ICIiCisgICAgdXJsX3BhcnRzWzFdID0gIiIKKyAgICByZXR1cm4g
dXJscGFyc2UudXJsdW5zcGxpdCh1cmxfcGFydHMpCisKKworY2xhc3MgVGVzdGhhcm5lc3NSZXN1
bHRDb252ZXJ0ZXIob2JqZWN0KToKKyAgICBoYXJuZXNzX2NvZGVzID0gezA6ICJPSyIsCisgICAg
ICAgICAgICAgICAgICAgICAxOiAiRVJST1IiLAorICAgICAgICAgICAgICAgICAgICAgMjogIlRJ
TUVPVVQifQorCisgICAgdGVzdF9jb2RlcyA9IHswOiAiUEFTUyIsCisgICAgICAgICAgICAgICAg
ICAxOiAiRkFJTCIsCisgICAgICAgICAgICAgICAgICAyOiAiVElNRU9VVCIsCisgICAgICAgICAg
ICAgICAgICAzOiAiTk9UUlVOIn0KKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCB0ZXN0LCByZXN1
bHQpOgorICAgICAgICAiIiJDb252ZXJ0IGEgSlNPTiByZXN1bHQgaW50byBhIChUZXN0UmVzdWx0
LCBbU3VidGVzdFJlc3VsdF0pIHR1cGxlIiIiCisgICAgICAgIHJlc3VsdF91cmwsIHN0YXR1cywg
bWVzc2FnZSwgc3RhY2ssIHN1YnRlc3RfcmVzdWx0cyA9IHJlc3VsdAorICAgICAgICBhc3NlcnQg
cmVzdWx0X3VybCA9PSB0ZXN0LnVybCwgKCJHb3QgcmVzdWx0cyBmcm9tICVzLCBleHBlY3RlZCAl
cyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVzdWx0X3VybCwg
dGVzdC51cmwpKQorICAgICAgICBoYXJuZXNzX3Jlc3VsdCA9IHRlc3QucmVzdWx0X2NscyhzZWxm
Lmhhcm5lc3NfY29kZXNbc3RhdHVzXSwgbWVzc2FnZSkKKyAgICAgICAgcmV0dXJuIChoYXJuZXNz
X3Jlc3VsdCwKKyAgICAgICAgICAgICAgICBbdGVzdC5zdWJ0ZXN0X3Jlc3VsdF9jbHMobmFtZSwg
c2VsZi50ZXN0X2NvZGVzW3N0YXR1c10sIG1lc3NhZ2UsIHN0YWNrKQorICAgICAgICAgICAgICAg
ICBmb3IgbmFtZSwgc3RhdHVzLCBtZXNzYWdlLCBzdGFjayBpbiBzdWJ0ZXN0X3Jlc3VsdHNdKQor
CisKK3Rlc3RoYXJuZXNzX3Jlc3VsdF9jb252ZXJ0ZXIgPSBUZXN0aGFybmVzc1Jlc3VsdENvbnZl
cnRlcigpCisKKworZGVmIHJlZnRlc3RfcmVzdWx0X2NvbnZlcnRlcihzZWxmLCB0ZXN0LCByZXN1
bHQpOgorICAgIHJldHVybiAodGVzdC5yZXN1bHRfY2xzKHJlc3VsdFsic3RhdHVzIl0sIHJlc3Vs
dFsibWVzc2FnZSJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPXJlc3VsdC5n
ZXQoImV4dHJhIikpLCBbXSkKKworCitkZWYgcHl0ZXN0X3Jlc3VsdF9jb252ZXJ0ZXIoc2VsZiwg
dGVzdCwgZGF0YSk6CisgICAgaGFybmVzc19kYXRhLCBzdWJ0ZXN0X2RhdGEgPSBkYXRhCisKKyAg
ICBpZiBzdWJ0ZXN0X2RhdGEgaXMgTm9uZToKKyAgICAgICAgc3VidGVzdF9kYXRhID0gW10KKwor
ICAgIGhhcm5lc3NfcmVzdWx0ID0gdGVzdC5yZXN1bHRfY2xzKCpoYXJuZXNzX2RhdGEpCisgICAg
c3VidGVzdF9yZXN1bHRzID0gW3Rlc3Quc3VidGVzdF9yZXN1bHRfY2xzKCppdGVtKSBmb3IgaXRl
bSBpbiBzdWJ0ZXN0X2RhdGFdCisKKyAgICByZXR1cm4gKGhhcm5lc3NfcmVzdWx0LCBzdWJ0ZXN0
X3Jlc3VsdHMpCisKKworY2xhc3MgRXhlY3V0b3JFeGNlcHRpb24oRXhjZXB0aW9uKToKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgc3RhdHVzLCBtZXNzYWdlKToKKyAgICAgICAgc2VsZi5zdGF0dXMg
PSBzdGF0dXMKKyAgICAgICAgc2VsZi5tZXNzYWdlID0gbWVzc2FnZQorCisKK2NsYXNzIFRlc3RF
eGVjdXRvcihvYmplY3QpOgorICAgIF9fbWV0YWNsYXNzX18gPSBBQkNNZXRhCisKKyAgICB0ZXN0
X3R5cGUgPSBOb25lCisgICAgY29udmVydF9yZXN1bHQgPSBOb25lCisKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgYnJvd3Nlciwgc2VydmVyX2NvbmZpZywgdGltZW91dF9tdWx0aXBsaWVyPTEsCisg
ICAgICAgICAgICAgICAgIGRlYnVnX2luZm89Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICAiIiJB
YnN0cmFjdCBCYXNlIGNsYXNzIGZvciBvYmplY3QgdGhhdCBhY3R1YWxseSBleGVjdXRlcyB0aGUg
dGVzdHMgaW4gYQorICAgICAgICBzcGVjaWZpYyBicm93c2VyLiBUeXBpY2FsbHkgdGhlcmUgd2ls
bCBiZSBhIGRpZmZlcmVudCBUZXN0RXhlY3V0b3IKKyAgICAgICAgc3ViY2xhc3MgZm9yIGVhY2gg
dGVzdCB0eXBlIGFuZCBtZXRob2Qgb2YgZXhlY3V0aW5nIHRlc3RzLgorCisgICAgICAgIDpwYXJh
bSBicm93c2VyOiBFeGVjdXRvckJyb3dzZXIgaW5zdGFuY2UgcHJvdmlkaW5nIHByb3BlcnRpZXMg
b2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBicm93c2VyIHRoYXQgd2lsbCBiZSB0ZXN0
ZWQuCisgICAgICAgIDpwYXJhbSBzZXJ2ZXJfY29uZmlnOiBEaWN0aW9uYXJ5IG9mIHdwdHNlcnZl
IHNlcnZlciBjb25maWd1cmF0aW9uIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9ybSBzdG9yZWQgaW4gVGVzdEVudmlyb25tZW50LmV4dGVybmFsX2NvbmZpZworICAgICAg
ICA6cGFyYW0gdGltZW91dF9tdWx0aXBsaWVyOiBNdWx0aXBsaWVyIHJlbGF0aXZlIHRvIGJhc2Ug
dGltZW91dCB0byB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBz
ZXR0aW5nIHRlc3QgdGltZW91dC4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYucnVubmVyID0g
Tm9uZQorICAgICAgICBzZWxmLmJyb3dzZXIgPSBicm93c2VyCisgICAgICAgIHNlbGYuc2VydmVy
X2NvbmZpZyA9IHNlcnZlcl9jb25maWcKKyAgICAgICAgc2VsZi50aW1lb3V0X211bHRpcGxpZXIg
PSB0aW1lb3V0X211bHRpcGxpZXIKKyAgICAgICAgc2VsZi5kZWJ1Z19pbmZvID0gZGVidWdfaW5m
bworICAgICAgICBzZWxmLmxhc3RfZW52aXJvbm1lbnQgPSB7InByb3RvY29sIjogImh0dHAiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInByZWZzIjoge319CisgICAgICAgIHNl
bGYucHJvdG9jb2wgPSBOb25lICMgVGhpcyBtdXN0IGJlIHNldCBpbiBzdWJjbGFzc2VzCisKKyAg
ICBAcHJvcGVydHkKKyAgICBkZWYgbG9nZ2VyKHNlbGYpOgorICAgICAgICAiIiJTdHJ1Y3R1cmVk
TG9nZ2VyIGZvciB0aGlzIGV4ZWN1dG9yIiIiCisgICAgICAgIGlmIHNlbGYucnVubmVyIGlzIG5v
dCBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucnVubmVyLmxvZ2dlcgorCisgICAgZGVm
IHNldHVwKHNlbGYsIHJ1bm5lcik6CisgICAgICAgICIiIlJ1biBzdGVwcyBuZWVkZWQgYmVmb3Jl
IHRlc3RzIGNhbiBiZSBzdGFydGVkIGUuZy4gY29ubmVjdGluZyB0bworICAgICAgICBicm93c2Vy
IGluc3RhbmNlCisKKyAgICAgICAgOnBhcmFtIHJ1bm5lcjogVGVzdFJ1bm5lciBpbnN0YW5jZSB0
aGF0IGlzIGdvaW5nIHRvIHJ1biB0aGUgdGVzdHMiIiIKKyAgICAgICAgc2VsZi5ydW5uZXIgPSBy
dW5uZXIKKyAgICAgICAgaWYgc2VsZi5wcm90b2NvbCBpcyBub3QgTm9uZToKKyAgICAgICAgICAg
IHNlbGYucHJvdG9jb2wuc2V0dXAocnVubmVyKQorCisgICAgZGVmIHRlYXJkb3duKHNlbGYpOgor
ICAgICAgICAiIiJSdW4gY2xlYW51cCBzdGVwcyBhZnRlciB0ZXN0cyBoYXZlIGZpbmlzaGVkIiIi
CisgICAgICAgIGlmIHNlbGYucHJvdG9jb2wgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxm
LnByb3RvY29sLnRlYXJkb3duKCkKKworICAgIGRlZiBydW5fdGVzdChzZWxmLCB0ZXN0KToKKyAg
ICAgICAgIiIiUnVuIGEgcGFydGljdWxhciB0ZXN0LgorCisgICAgICAgIDpwYXJhbSB0ZXN0OiBU
aGUgdGVzdCB0byBydW4iIiIKKyAgICAgICAgaWYgdGVzdC5lbnZpcm9ubWVudCAhPSBzZWxmLmxh
c3RfZW52aXJvbm1lbnQ6CisgICAgICAgICAgICBzZWxmLm9uX2Vudmlyb25tZW50X2NoYW5nZSh0
ZXN0LmVudmlyb25tZW50KQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc3VsdCA9IHNl
bGYuZG9fdGVzdCh0ZXN0KQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAg
ICAgICByZXN1bHQgPSBzZWxmLnJlc3VsdF9mcm9tX2V4Y2VwdGlvbih0ZXN0LCBlKQorCisgICAg
ICAgIGlmIHJlc3VsdCBpcyBTdG9wOgorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAg
ICAgICMgbG9nIHJlc3VsdCBvZiBwYXJlbnQgdGVzdAorICAgICAgICBpZiByZXN1bHRbMF0uc3Rh
dHVzID09ICJFUlJPUiI6CisgICAgICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1ZyhyZXN1bHRbMF0u
bWVzc2FnZSkKKworICAgICAgICBzZWxmLmxhc3RfZW52aXJvbm1lbnQgPSB0ZXN0LmVudmlyb25t
ZW50CisKKyAgICAgICAgc2VsZi5ydW5uZXIuc2VuZF9tZXNzYWdlKCJ0ZXN0X2VuZGVkIiwgdGVz
dCwgcmVzdWx0KQorCisgICAgZGVmIHNlcnZlcl91cmwoc2VsZiwgcHJvdG9jb2wpOgorICAgICAg
ICByZXR1cm4gIiVzOi8vJXM6JXMiICUgKHByb3RvY29sLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbGYuc2VydmVyX2NvbmZpZ1siaG9zdCJdLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNlbGYuc2VydmVyX2NvbmZpZ1sicG9ydHMiXVtwcm90b2NvbF1bMF0pCisK
KyAgICBkZWYgdGVzdF91cmwoc2VsZiwgdGVzdCk6CisgICAgICAgIHJldHVybiB1cmxwYXJzZS51
cmxqb2luKHNlbGYuc2VydmVyX3VybCh0ZXN0LmVudmlyb25tZW50WyJwcm90b2NvbCJdKSwgdGVz
dC51cmwpCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgZG9fdGVzdChzZWxmLCB0ZXN0
KToKKyAgICAgICAgIiIiVGVzdC10eXBlIGFuZCBwcm90b2NvbCBzcGVjaWZpYyBpbXBsZW1lbnRh
dGlvbiBvZiBydW5uaW5nIGEKKyAgICAgICAgc3BlY2lmaWMgdGVzdC4KKworICAgICAgICA6cGFy
YW0gdGVzdDogVGhlIHRlc3QgdG8gcnVuLiIiIgorICAgICAgICBwYXNzCisKKyAgICBkZWYgb25f
ZW52aXJvbm1lbnRfY2hhbmdlKHNlbGYsIG5ld19lbnZpcm9ubWVudCk6CisgICAgICAgIHBhc3MK
KworICAgIGRlZiByZXN1bHRfZnJvbV9leGNlcHRpb24oc2VsZiwgdGVzdCwgZSk6CisgICAgICAg
IGlmIGhhc2F0dHIoZSwgInN0YXR1cyIpIGFuZCBlLnN0YXR1cyBpbiB0ZXN0LnJlc3VsdF9jbHMu
c3RhdHVzZXM6CisgICAgICAgICAgICBzdGF0dXMgPSBlLnN0YXR1cworICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgc3RhdHVzID0gIkVSUk9SIgorICAgICAgICBtZXNzYWdlID0gdW5pY29kZShn
ZXRhdHRyKGUsICJtZXNzYWdlIiwgIiIpKQorICAgICAgICBpZiBtZXNzYWdlOgorICAgICAgICAg
ICAgbWVzc2FnZSArPSAiXG4iCisgICAgICAgIG1lc3NhZ2UgKz0gdHJhY2ViYWNrLmZvcm1hdF9l
eGMoZSkKKyAgICAgICAgcmV0dXJuIHRlc3QucmVzdWx0X2NscyhzdGF0dXMsIG1lc3NhZ2UpLCBb
XQorCisKK2NsYXNzIFRlc3RoYXJuZXNzRXhlY3V0b3IoVGVzdEV4ZWN1dG9yKToKKyAgICBjb252
ZXJ0X3Jlc3VsdCA9IHRlc3RoYXJuZXNzX3Jlc3VsdF9jb252ZXJ0ZXIKKworCitjbGFzcyBSZWZU
ZXN0RXhlY3V0b3IoVGVzdEV4ZWN1dG9yKToKKyAgICBjb252ZXJ0X3Jlc3VsdCA9IHJlZnRlc3Rf
cmVzdWx0X2NvbnZlcnRlcgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb3dzZXIsIHNlcnZl
cl9jb25maWcsIHRpbWVvdXRfbXVsdGlwbGllcj0xLCBzY3JlZW5zaG90X2NhY2hlPU5vbmUsCisg
ICAgICAgICAgICAgICAgIGRlYnVnX2luZm89Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICBUZXN0
RXhlY3V0b3IuX19pbml0X18oc2VsZiwgYnJvd3Nlciwgc2VydmVyX2NvbmZpZywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXRfbXVsdGlwbGllcj10aW1lb3V0X211bHRpcGxp
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19pbmZvPWRlYnVnX2luZm8p
CisKKyAgICAgICAgc2VsZi5zY3JlZW5zaG90X2NhY2hlID0gc2NyZWVuc2hvdF9jYWNoZQorCisK
K2NsYXNzIFJlZlRlc3RJbXBsZW1lbnRhdGlvbihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBleGVjdXRvcik6CisgICAgICAgIHNlbGYudGltZW91dF9tdWx0aXBsaWVyID0gZXhlY3V0
b3IudGltZW91dF9tdWx0aXBsaWVyCisgICAgICAgIHNlbGYuZXhlY3V0b3IgPSBleGVjdXRvcgor
ICAgICAgICAjIENhY2hlIG9mIHVybDooc2NyZWVuc2hvdCBoYXNoLCBzY3JlZW5zaG90KS4gVHlw
aWNhbGx5IHRoZQorICAgICAgICAjIHNjcmVlbnNob3QgaXMgTm9uZSwgYnV0IHdlIHNldCB0aGlz
IHZhbHVlIGlmIGEgdGVzdCBmYWlscworICAgICAgICAjIGFuZCB0aGUgc2NyZWVuc2hvdCB3YXMg
dGFrZW4gZnJvbSB0aGUgY2FjaGUgc28gdGhhdCB3ZSBtYXkKKyAgICAgICAgIyByZXRyaWV2ZSB0
aGUgc2NyZWVuc2hvdCBmcm9tIHRoZSBjYWNoZSBkaXJlY3RseSBpbiB0aGUgZnV0dXJlCisgICAg
ICAgIHNlbGYuc2NyZWVuc2hvdF9jYWNoZSA9IHNlbGYuZXhlY3V0b3Iuc2NyZWVuc2hvdF9jYWNo
ZQorICAgICAgICBzZWxmLm1lc3NhZ2UgPSBOb25lCisKKyAgICBkZWYgc2V0dXAoc2VsZik6Cisg
ICAgICAgIHBhc3MKKworICAgIGRlZiB0ZWFyZG93bihzZWxmKToKKyAgICAgICAgcGFzcworCisg
ICAgQHByb3BlcnR5CisgICAgZGVmIGxvZ2dlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYu
ZXhlY3V0b3IubG9nZ2VyCisKKyAgICBkZWYgZ2V0X2hhc2goc2VsZiwgdGVzdCwgdmlld3BvcnRf
c2l6ZSwgZHBpKToKKyAgICAgICAgdGltZW91dCA9IHRlc3QudGltZW91dCAqIHNlbGYudGltZW91
dF9tdWx0aXBsaWVyCisgICAgICAgIGtleSA9ICh0ZXN0LnVybCwgdmlld3BvcnRfc2l6ZSwgZHBp
KQorCisgICAgICAgIGlmIGtleSBub3QgaW4gc2VsZi5zY3JlZW5zaG90X2NhY2hlOgorICAgICAg
ICAgICAgc3VjY2VzcywgZGF0YSA9IHNlbGYuZXhlY3V0b3Iuc2NyZWVuc2hvdCh0ZXN0LCB2aWV3
cG9ydF9zaXplLCBkcGkpCisKKyAgICAgICAgICAgIGlmIG5vdCBzdWNjZXNzOgorICAgICAgICAg
ICAgICAgIHJldHVybiBGYWxzZSwgZGF0YQorCisgICAgICAgICAgICBzY3JlZW5zaG90ID0gZGF0
YQorICAgICAgICAgICAgaGFzaF92YWx1ZSA9IGhhc2hsaWIuc2hhMShzY3JlZW5zaG90KS5oZXhk
aWdlc3QoKQorCisgICAgICAgICAgICBzZWxmLnNjcmVlbnNob3RfY2FjaGVba2V5XSA9IChoYXNo
X3ZhbHVlLCBOb25lKQorCisgICAgICAgICAgICBydiA9IChoYXNoX3ZhbHVlLCBzY3JlZW5zaG90
KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcnYgPSBzZWxmLnNjcmVlbnNob3RfY2FjaGVb
a2V5XQorCisgICAgICAgIHNlbGYubWVzc2FnZS5hcHBlbmQoIiVzICVzIiAlICh0ZXN0LnVybCwg
cnZbMF0pKQorICAgICAgICByZXR1cm4gVHJ1ZSwgcnYKKworICAgIGRlZiBpc19wYXNzKHNlbGYs
IGxoc19oYXNoLCByaHNfaGFzaCwgcmVsYXRpb24pOgorICAgICAgICBhc3NlcnQgcmVsYXRpb24g
aW4gKCI9PSIsICIhPSIpCisgICAgICAgIHNlbGYubWVzc2FnZS5hcHBlbmQoIlRlc3RpbmcgJXMg
JXMgJXMiICUgKGxoc19oYXNoLCByZWxhdGlvbiwgcmhzX2hhc2gpKQorICAgICAgICByZXR1cm4g
KChyZWxhdGlvbiA9PSAiPT0iIGFuZCBsaHNfaGFzaCA9PSByaHNfaGFzaCkgb3IKKyAgICAgICAg
ICAgICAgICAocmVsYXRpb24gPT0gIiE9IiBhbmQgbGhzX2hhc2ggIT0gcmhzX2hhc2gpKQorCisg
ICAgZGVmIHJ1bl90ZXN0KHNlbGYsIHRlc3QpOgorICAgICAgICB2aWV3cG9ydF9zaXplID0gdGVz
dC52aWV3cG9ydF9zaXplCisgICAgICAgIGRwaSA9IHRlc3QuZHBpCisgICAgICAgIHNlbGYubWVz
c2FnZSA9IFtdCisKKyAgICAgICAgIyBEZXB0aC1maXJzdCBzZWFyY2ggb2YgcmVmZXJlbmNlIHRy
ZWUsIHdpdGggdGhlIGdvYWwKKyAgICAgICAgIyBvZiByZWFjaGluZ3MgYSBsZWFmIG5vZGUgd2l0
aCBvbmx5IHBhc3MgcmVzdWx0cworCisgICAgICAgIHN0YWNrID0gbGlzdCgoKHRlc3QsIGl0ZW1b
MF0pLCBpdGVtWzFdKSBmb3IgaXRlbSBpbiByZXZlcnNlZCh0ZXN0LnJlZmVyZW5jZXMpKQorICAg
ICAgICB3aGlsZSBzdGFjazoKKyAgICAgICAgICAgIGhhc2hlcyA9IFtOb25lLCBOb25lXQorICAg
ICAgICAgICAgc2NyZWVuc2hvdHMgPSBbTm9uZSwgTm9uZV0KKworICAgICAgICAgICAgbm9kZXMs
IHJlbGF0aW9uID0gc3RhY2sucG9wKCkKKworICAgICAgICAgICAgZm9yIGksIG5vZGUgaW4gZW51
bWVyYXRlKG5vZGVzKToKKyAgICAgICAgICAgICAgICBzdWNjZXNzLCBkYXRhID0gc2VsZi5nZXRf
aGFzaChub2RlLCB2aWV3cG9ydF9zaXplLCBkcGkpCisgICAgICAgICAgICAgICAgaWYgc3VjY2Vz
cyBpcyBGYWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsic3RhdHVzIjogZGF0YVsw
XSwgIm1lc3NhZ2UiOiBkYXRhWzFdfQorCisgICAgICAgICAgICAgICAgaGFzaGVzW2ldLCBzY3Jl
ZW5zaG90c1tpXSA9IGRhdGEKKworICAgICAgICAgICAgaWYgc2VsZi5pc19wYXNzKGhhc2hlc1sw
XSwgaGFzaGVzWzFdLCByZWxhdGlvbik6CisgICAgICAgICAgICAgICAgaWYgbm9kZXNbMV0ucmVm
ZXJlbmNlczoKKyAgICAgICAgICAgICAgICAgICAgc3RhY2suZXh0ZW5kKGxpc3QoKChub2Rlc1sx
XSwgaXRlbVswXSksIGl0ZW1bMV0pIGZvciBpdGVtIGluIHJldmVyc2VkKG5vZGVzWzFdLnJlZmVy
ZW5jZXMpKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIFdl
IHBhc3NlZAorICAgICAgICAgICAgICAgICAgICByZXR1cm4geyJzdGF0dXMiOiJQQVNTIiwgIm1l
c3NhZ2UiOiBOb25lfQorCisgICAgICAgICMgV2UgZmFpbGVkLCBzbyBjb25zdHJ1Y3QgYSBmYWls
dXJlIG1lc3NhZ2UKKworICAgICAgICBmb3IgaSwgKG5vZGUsIHNjcmVlbnNob3QpIGluIGVudW1l
cmF0ZSh6aXAobm9kZXMsIHNjcmVlbnNob3RzKSk6CisgICAgICAgICAgICBpZiBzY3JlZW5zaG90
IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgc3VjY2Vzcywgc2NyZWVuc2hvdCA9IHNlbGYucmV0
YWtlX3NjcmVlbnNob3Qobm9kZSwgdmlld3BvcnRfc2l6ZSwgZHBpKQorICAgICAgICAgICAgICAg
IGlmIHN1Y2Nlc3M6CisgICAgICAgICAgICAgICAgICAgIHNjcmVlbnNob3RzW2ldID0gc2NyZWVu
c2hvdAorCisgICAgICAgIGxvZ19kYXRhID0gW3sidXJsIjogbm9kZXNbMF0udXJsLCAic2NyZWVu
c2hvdCI6IHNjcmVlbnNob3RzWzBdfSwgcmVsYXRpb24sCisgICAgICAgICAgICAgICAgICAgIHsi
dXJsIjogbm9kZXNbMV0udXJsLCAic2NyZWVuc2hvdCI6IHNjcmVlbnNob3RzWzFdfV0KKworICAg
ICAgICByZXR1cm4geyJzdGF0dXMiOiAiRkFJTCIsCisgICAgICAgICAgICAgICAgIm1lc3NhZ2Ui
OiAiXG4iLmpvaW4oc2VsZi5tZXNzYWdlKSwKKyAgICAgICAgICAgICAgICAiZXh0cmEiOiB7InJl
ZnRlc3Rfc2NyZWVuc2hvdHMiOiBsb2dfZGF0YX19CisKKyAgICBkZWYgcmV0YWtlX3NjcmVlbnNo
b3Qoc2VsZiwgbm9kZSwgdmlld3BvcnRfc2l6ZSwgZHBpKToKKyAgICAgICAgc3VjY2VzcywgZGF0
YSA9IHNlbGYuZXhlY3V0b3Iuc2NyZWVuc2hvdChub2RlLCB2aWV3cG9ydF9zaXplLCBkcGkpCisg
ICAgICAgIGlmIG5vdCBzdWNjZXNzOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlLCBkYXRhCisK
KyAgICAgICAga2V5ID0gKG5vZGUudXJsLCB2aWV3cG9ydF9zaXplLCBkcGkpCisgICAgICAgIGhh
c2hfdmFsLCBfID0gc2VsZi5zY3JlZW5zaG90X2NhY2hlW2tleV0KKyAgICAgICAgc2VsZi5zY3Jl
ZW5zaG90X2NhY2hlW2tleV0gPSBoYXNoX3ZhbCwgZGF0YQorICAgICAgICByZXR1cm4gVHJ1ZSwg
ZGF0YQorCisKK2NsYXNzIFdkc3BlY0V4ZWN1dG9yKFRlc3RFeGVjdXRvcik6CisgICAgY29udmVy
dF9yZXN1bHQgPSBweXRlc3RfcmVzdWx0X2NvbnZlcnRlcgorICAgIHByb3RvY29sX2NscyA9IE5v
bmUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm93c2VyLCBzZXJ2ZXJfY29uZmlnLCB3ZWJk
cml2ZXJfYmluYXJ5LAorICAgICAgICAgICAgICAgICB3ZWJkcml2ZXJfYXJncywgdGltZW91dF9t
dWx0aXBsaWVyPTEsIGNhcGFiaWxpdGllcz1Ob25lLAorICAgICAgICAgICAgICAgICBkZWJ1Z19p
bmZvPU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5kb19kZWxheWVkX2ltcG9ydHMoKQor
ICAgICAgICBUZXN0RXhlY3V0b3IuX19pbml0X18oc2VsZiwgYnJvd3Nlciwgc2VydmVyX2NvbmZp
ZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXRfbXVsdGlwbGllcj10aW1l
b3V0X211bHRpcGxpZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19pbmZv
PWRlYnVnX2luZm8pCisgICAgICAgIHNlbGYud2ViZHJpdmVyX2JpbmFyeSA9IHdlYmRyaXZlcl9i
aW5hcnkKKyAgICAgICAgc2VsZi53ZWJkcml2ZXJfYXJncyA9IHdlYmRyaXZlcl9hcmdzCisgICAg
ICAgIHNlbGYudGltZW91dF9tdWx0aXBsaWVyID0gdGltZW91dF9tdWx0aXBsaWVyCisgICAgICAg
IHNlbGYuY2FwYWJpbGl0aWVzID0gY2FwYWJpbGl0aWVzCisgICAgICAgIHNlbGYucHJvdG9jb2wg
PSBzZWxmLnByb3RvY29sX2NscyhzZWxmLCBicm93c2VyKQorCisgICAgZGVmIGlzX2FsaXZlKHNl
bGYpOgorICAgICAgICByZXR1cm4gc2VsZi5wcm90b2NvbC5pc19hbGl2ZQorCisgICAgZGVmIG9u
X2Vudmlyb25tZW50X2NoYW5nZShzZWxmLCBuZXdfZW52aXJvbm1lbnQpOgorICAgICAgICBwYXNz
CisKKyAgICBkZWYgZG9fdGVzdChzZWxmLCB0ZXN0KToKKyAgICAgICAgdGltZW91dCA9IHRlc3Qu
dGltZW91dCAqIHNlbGYudGltZW91dF9tdWx0aXBsaWVyICsgZXh0cmFfdGltZW91dAorCisgICAg
ICAgIHN1Y2Nlc3MsIGRhdGEgPSBXZHNwZWNSdW4oc2VsZi5kb193ZHNwZWMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wcm90b2NvbC5zZXNzaW9uX2NvbmZpZywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0LmFic19wYXRoLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQpLnJ1bigpCisKKyAgICAgICAgaWYgc3Vj
Y2VzczoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmNvbnZlcnRfcmVzdWx0KHRlc3QsIGRhdGEp
CisKKyAgICAgICAgcmV0dXJuICh0ZXN0LnJlc3VsdF9jbHMoKmRhdGEpLCBbXSkKKworICAgIGRl
ZiBkb193ZHNwZWMoc2VsZiwgc2Vzc2lvbl9jb25maWcsIHBhdGgsIHRpbWVvdXQpOgorICAgICAg
ICBoYXJuZXNzX3Jlc3VsdCA9ICgiT0siLCBOb25lKQorICAgICAgICBzdWJ0ZXN0X3Jlc3VsdHMg
PSBweXRlc3RydW5uZXIucnVuKHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNlc3Npb25fY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9dGltZW91dCkKKyAgICAgICAgcmV0dXJuICho
YXJuZXNzX3Jlc3VsdCwgc3VidGVzdF9yZXN1bHRzKQorCisgICAgZGVmIGRvX2RlbGF5ZWRfaW1w
b3J0cyhzZWxmKToKKyAgICAgICAgZ2xvYmFsIHB5dGVzdHJ1bm5lcgorICAgICAgICBmcm9tIC4g
aW1wb3J0IHB5dGVzdHJ1bm5lcgorCisKK2NsYXNzIFByb3RvY29sKG9iamVjdCk6CisgICAgZGVm
IF9faW5pdF9fKHNlbGYsIGV4ZWN1dG9yLCBicm93c2VyKToKKyAgICAgICAgc2VsZi5leGVjdXRv
ciA9IGV4ZWN1dG9yCisgICAgICAgIHNlbGYuYnJvd3NlciA9IGJyb3dzZXIKKworICAgIEBwcm9w
ZXJ0eQorICAgIGRlZiBsb2dnZXIoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmV4ZWN1dG9y
LmxvZ2dlcgorCisgICAgZGVmIHNldHVwKHNlbGYsIHJ1bm5lcik6CisgICAgICAgIHBhc3MKKwor
ICAgIGRlZiB0ZWFyZG93bihzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHdhaXQoc2Vs
Zik6CisgICAgICAgIHBhc3MKKworCitjbGFzcyBXZHNwZWNSdW4ob2JqZWN0KToKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgZnVuYywgc2Vzc2lvbiwgcGF0aCwgdGltZW91dCk6CisgICAgICAgIHNl
bGYuZnVuYyA9IGZ1bmMKKyAgICAgICAgc2VsZi5yZXN1bHQgPSAoTm9uZSwgTm9uZSkKKyAgICAg
ICAgc2VsZi5zZXNzaW9uID0gc2Vzc2lvbgorICAgICAgICBzZWxmLnBhdGggPSBwYXRoCisgICAg
ICAgIHNlbGYudGltZW91dCA9IHRpbWVvdXQKKyAgICAgICAgc2VsZi5yZXN1bHRfZmxhZyA9IHRo
cmVhZGluZy5FdmVudCgpCisKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICAiIiJSdW5zIGZ1
bmN0aW9uIGluIGEgdGhyZWFkIGFuZCBpbnRlcnJ1cHRzIGl0IGlmIGl0IGV4Y2VlZHMgdGhlCisg
ICAgICAgIGdpdmVuIHRpbWVvdXQuICBSZXR1cm5zIChUcnVlLCAoUmVzdWx0LCBbU3VidGVzdFJl
c3VsdCAuLi5dKSkgaW4KKyAgICAgICAgY2FzZSBvZiBzdWNjZXNzLCBvciAoRmFsc2UsIChzdGF0
dXMsIGV4dHJhIGluZm9ybWF0aW9uKSkgaW4gdGhlCisgICAgICAgIGV2ZW50IG9mIGZhaWx1cmUu
CisgICAgICAgICIiIgorCisgICAgICAgIGV4ZWN1dG9yID0gdGhyZWFkaW5nLlRocmVhZCh0YXJn
ZXQ9c2VsZi5fcnVuKQorICAgICAgICBleGVjdXRvci5zdGFydCgpCisKKyAgICAgICAgZmxhZyA9
IHNlbGYucmVzdWx0X2ZsYWcud2FpdChzZWxmLnRpbWVvdXQpCisgICAgICAgIGlmIHNlbGYucmVz
dWx0WzFdIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLnJlc3VsdCA9IEZhbHNlLCAoIkVYVEVS
TkFMLVRJTUVPVVQiLCBOb25lKQorCisgICAgICAgIHJldHVybiBzZWxmLnJlc3VsdAorCisgICAg
ZGVmIF9ydW4oc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYucmVzdWx0ID0g
VHJ1ZSwgc2VsZi5mdW5jKHNlbGYuc2Vzc2lvbiwgc2VsZi5wYXRoLCBzZWxmLnRpbWVvdXQpCisg
ICAgICAgIGV4Y2VwdCAoc29ja2V0LnRpbWVvdXQsIElPRXJyb3IpOgorICAgICAgICAgICAgc2Vs
Zi5yZXN1bHQgPSBGYWxzZSwgKCJDUkFTSCIsIE5vbmUpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRp
b24gYXMgZToKKyAgICAgICAgICAgIG1lc3NhZ2UgPSBnZXRhdHRyKGUsICJtZXNzYWdlIikKKyAg
ICAgICAgICAgIGlmIG1lc3NhZ2U6CisgICAgICAgICAgICAgICAgbWVzc2FnZSArPSAiXG4iCisg
ICAgICAgICAgICBtZXNzYWdlICs9IHRyYWNlYmFjay5mb3JtYXRfZXhjKGUpCisgICAgICAgICAg
ICBzZWxmLnJlc3VsdCA9IEZhbHNlLCAoIkVSUk9SIiwgbWVzc2FnZSkKKyAgICAgICAgZmluYWxs
eToKKyAgICAgICAgICAgIHNlbGYucmVzdWx0X2ZsYWcuc2V0KCkKKworCitjbGFzcyBXZWJEcml2
ZXJQcm90b2NvbChQcm90b2NvbCk6CisgICAgc2VydmVyX2NscyA9IE5vbmUKKworICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBleGVjdXRvciwgYnJvd3Nlcik6CisgICAgICAgIFByb3RvY29sLl9faW5p
dF9fKHNlbGYsIGV4ZWN1dG9yLCBicm93c2VyKQorICAgICAgICBzZWxmLndlYmRyaXZlcl9iaW5h
cnkgPSBleGVjdXRvci53ZWJkcml2ZXJfYmluYXJ5CisgICAgICAgIHNlbGYud2ViZHJpdmVyX2Fy
Z3MgPSBleGVjdXRvci53ZWJkcml2ZXJfYXJncworICAgICAgICBzZWxmLmNhcGFiaWxpdGllcyA9
IHNlbGYuZXhlY3V0b3IuY2FwYWJpbGl0aWVzCisgICAgICAgIHNlbGYuc2Vzc2lvbl9jb25maWcg
PSBOb25lCisgICAgICAgIHNlbGYuc2VydmVyID0gTm9uZQorCisgICAgZGVmIHNldHVwKHNlbGYs
IHJ1bm5lcik6CisgICAgICAgICIiIkNvbm5lY3QgdG8gYnJvd3NlciB2aWEgdGhlIEhUVFAgc2Vy
dmVyLiIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnNlcnZlciA9IHNlbGYuc2Vy
dmVyX2NscygKKyAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlciwKKyAgICAgICAgICAgICAgICBi
aW5hcnk9c2VsZi53ZWJkcml2ZXJfYmluYXJ5LAorICAgICAgICAgICAgICAgIGFyZ3M9c2VsZi53
ZWJkcml2ZXJfYXJncykKKyAgICAgICAgICAgIHNlbGYuc2VydmVyLnN0YXJ0KGJsb2NrPUZhbHNl
KQorICAgICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygKKyAgICAgICAgICAgICAgICAiV2ViRHJp
dmVyIEhUVFAgc2VydmVyIGxpc3RlbmluZyBhdCAlcyIgJSBzZWxmLnNlcnZlci51cmwpCisgICAg
ICAgICAgICBzZWxmLnNlc3Npb25fY29uZmlnID0geyJob3N0Ijogc2VsZi5zZXJ2ZXIuaG9zdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcnQiOiBzZWxmLnNlcnZlci5w
b3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2FwYWJpbGl0aWVzIjog
c2VsZi5jYXBhYmlsaXRpZXN9CisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAg
ICBzZWxmLmxvZ2dlci5lcnJvcih0cmFjZWJhY2suZm9ybWF0X2V4YygpKQorICAgICAgICAgICAg
c2VsZi5leGVjdXRvci5ydW5uZXIuc2VuZF9tZXNzYWdlKCJpbml0X2ZhaWxlZCIpCisgICAgICAg
IGVsc2U6CisgICAgICAgICAgICBzZWxmLmV4ZWN1dG9yLnJ1bm5lci5zZW5kX21lc3NhZ2UoImlu
aXRfc3VjY2VlZGVkIikKKworICAgIGRlZiB0ZWFyZG93bihzZWxmKToKKyAgICAgICAgaWYgc2Vs
Zi5zZXJ2ZXIgaXMgbm90IE5vbmUgYW5kIHNlbGYuc2VydmVyLmlzX2FsaXZlOgorICAgICAgICAg
ICAgc2VsZi5zZXJ2ZXIuc3RvcCgpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaXNfYWxpdmUo
c2VsZik6CisgICAgICAgICIiIlRlc3QgdGhhdCB0aGUgY29ubmVjdGlvbiBpcyBzdGlsbCBhbGl2
ZS4KKworICAgICAgICBCZWNhdXNlIHRoZSByZW1vdGUgY29tbXVuaWNhdGlvbiBoYXBwZW5zIG92
ZXIgSFRUUCB3ZSBuZWVkIHRvCisgICAgICAgIG1ha2UgYW4gZXhwbGljaXQgcmVxdWVzdCB0byB0
aGUgcmVtb3RlLiAgSXQgaXMgYWxsb3dlZCBmb3IKKyAgICAgICAgV2ViRHJpdmVyIHNwZWMgdGVz
dHMgdG8gbm90IGhhdmUgYSBXZWJEcml2ZXIgc2Vzc2lvbiwgc2luY2UgdGhpcworICAgICAgICBt
YXkgYmUgd2hhdCBpcyB0ZXN0ZWQuCisKKyAgICAgICAgQW4gSFRUUCByZXF1ZXN0IHRvIGFuIGlu
dmFsaWQgcGF0aCB0aGF0IHJlc3VsdHMgaW4gYSA0MDQgaXMKKyAgICAgICAgcHJvb2YgZW5vdWdo
IHRvIHVzIHRoYXQgdGhlIHNlcnZlciBpcyBhbGl2ZSBhbmQga2lja2luZy4KKyAgICAgICAgIiIi
CisgICAgICAgIGNvbm4gPSBodHRwbGliLkhUVFBDb25uZWN0aW9uKHNlbGYuc2VydmVyLmhvc3Qs
IHNlbGYuc2VydmVyLnBvcnQpCisgICAgICAgIGNvbm4ucmVxdWVzdCgiSEVBRCIsIHNlbGYuc2Vy
dmVyLmJhc2VfcGF0aCArICJpbnZhbGlkIikKKyAgICAgICAgcmVzID0gY29ubi5nZXRyZXNwb25z
ZSgpCisgICAgICAgIHJldHVybiByZXMuc3RhdHVzID09IDQwNApkaWZmIC0tZ2l0IGEvV2ViRHJp
dmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvZXhlY3V0b3Jz
L2V4ZWN1dG9yY2hyb21lLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dw
dHJ1bm5lci93cHRydW5uZXIvZXhlY3V0b3JzL2V4ZWN1dG9yY2hyb21lLnB5Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zZTA0MDBkZTExYwotLS0gL2Rldi9udWxsCisr
KyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVy
L2V4ZWN1dG9ycy9leGVjdXRvcmNocm9tZS5weQpAQCAtMCwwICsxLDEwIEBACitmcm9tIC4ud2Vi
ZHJpdmVyX3NlcnZlciBpbXBvcnQgQ2hyb21lRHJpdmVyU2VydmVyCitmcm9tIC5iYXNlIGltcG9y
dCBXZHNwZWNFeGVjdXRvciwgV2ViRHJpdmVyUHJvdG9jb2wKKworCitjbGFzcyBDaHJvbWVEcml2
ZXJQcm90b2NvbChXZWJEcml2ZXJQcm90b2NvbCk6CisgICAgc2VydmVyX2NscyA9IENocm9tZURy
aXZlclNlcnZlcgorCisKK2NsYXNzIENocm9tZURyaXZlcldkc3BlY0V4ZWN1dG9yKFdkc3BlY0V4
ZWN1dG9yKToKKyAgICBwcm90b2NvbF9jbHMgPSBDaHJvbWVEcml2ZXJQcm90b2NvbApkaWZmIC0t
Z2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5u
ZXIvZXhlY3V0b3JzL2V4ZWN1dG9yaW50ZXJuZXRleHBsb3Jlci5weSBiL1dlYkRyaXZlclRlc3Rz
L2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2V4ZWN1dG9ycy9leGVjdXRv
cmludGVybmV0ZXhwbG9yZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLjg5OGZmMTQ0NTkzCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0
ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvZXhlY3V0b3JzL2V4ZWN1dG9yaW50ZXJu
ZXRleHBsb3Jlci5weQpAQCAtMCwwICsxLDEwIEBACitmcm9tIC4ud2ViZHJpdmVyX3NlcnZlciBp
bXBvcnQgSW50ZXJuZXRFeHBsb3JlckRyaXZlclNlcnZlcgorZnJvbSAuYmFzZSBpbXBvcnQgV2Rz
cGVjRXhlY3V0b3IsIFdlYkRyaXZlclByb3RvY29sCisKKworY2xhc3MgSW50ZXJuZXRFeHBsb3Jl
ckRyaXZlclByb3RvY29sKFdlYkRyaXZlclByb3RvY29sKToKKyAgICBzZXJ2ZXJfY2xzID0gSW50
ZXJuZXRFeHBsb3JlckRyaXZlclNlcnZlcgorCisKK2NsYXNzIEludGVybmV0RXhwbG9yZXJEcml2
ZXJXZHNwZWNFeGVjdXRvcihXZHNwZWNFeGVjdXRvcik6CisgICAgcHJvdG9jb2xfY2xzID0gSW50
ZXJuZXRFeHBsb3JlckRyaXZlclByb3RvY29sCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9p
bXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9leGVjdXRvcnMvZXhlY3V0b3Jt
YXJpb25ldHRlLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5l
ci93cHRydW5uZXIvZXhlY3V0b3JzL2V4ZWN1dG9ybWFyaW9uZXR0ZS5weQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMTFkZTY1M2VmMjUKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9l
eGVjdXRvcnMvZXhlY3V0b3JtYXJpb25ldHRlLnB5CkBAIC0wLDAgKzEsNTY4IEBACitpbXBvcnQg
b3MKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCB0cmFjZWJhY2sKK2lt
cG9ydCB1cmxwYXJzZQoraW1wb3J0IHV1aWQKKworZXJyb3JzID0gTm9uZQorbWFyaW9uZXR0ZSA9
IE5vbmUKK3B5dGVzdHJ1bm5lciA9IE5vbmUKKworaGVyZSA9IG9zLnBhdGguam9pbihvcy5wYXRo
LnNwbGl0KF9fZmlsZV9fKVswXSkKKworZnJvbSAuYmFzZSBpbXBvcnQgKEV4ZWN1dG9yRXhjZXB0
aW9uLAorICAgICAgICAgICAgICAgICAgIFByb3RvY29sLAorICAgICAgICAgICAgICAgICAgIFJl
ZlRlc3RFeGVjdXRvciwKKyAgICAgICAgICAgICAgICAgICBSZWZUZXN0SW1wbGVtZW50YXRpb24s
CisgICAgICAgICAgICAgICAgICAgVGVzdEV4ZWN1dG9yLAorICAgICAgICAgICAgICAgICAgIFRl
c3RoYXJuZXNzRXhlY3V0b3IsCisgICAgICAgICAgICAgICAgICAgV2RzcGVjRXhlY3V0b3IsCisg
ICAgICAgICAgICAgICAgICAgV2RzcGVjUnVuLAorICAgICAgICAgICAgICAgICAgIFdlYkRyaXZl
clByb3RvY29sLAorICAgICAgICAgICAgICAgICAgIGV4dHJhX3RpbWVvdXQsCisgICAgICAgICAg
ICAgICAgICAgdGVzdGhhcm5lc3NfcmVzdWx0X2NvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAg
ICByZWZ0ZXN0X3Jlc3VsdF9jb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICAgc3RyaXBfc2Vy
dmVyKQorCitmcm9tIC4udGVzdHJ1bm5lciBpbXBvcnQgU3RvcAorZnJvbSAuLndlYmRyaXZlcl9z
ZXJ2ZXIgaW1wb3J0IEdlY2tvRHJpdmVyU2VydmVyCisKKworCitkZWYgZG9fZGVsYXllZF9pbXBv
cnRzKCk6CisgICAgZ2xvYmFsIGVycm9ycywgbWFyaW9uZXR0ZQorCisgICAgIyBNYXJpb25ldHRl
IGNsaWVudCB1c2VkIHRvIGJlIGNhbGxlZCBtYXJpb25ldHRlLCByZWNlbnRseSBpdCBjaGFuZ2Vk
CisgICAgIyB0byBtYXJpb25ldHRlX2RyaXZlciBmb3IgdW5mYXRob21hYmxlIHJlYXNvbnMKKyAg
ICB0cnk6CisgICAgICAgIGltcG9ydCBtYXJpb25ldHRlCisgICAgICAgIGZyb20gbWFyaW9uZXR0
ZSBpbXBvcnQgZXJyb3JzCisgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICBmcm9tIG1h
cmlvbmV0dGVfZHJpdmVyIGltcG9ydCBtYXJpb25ldHRlLCBlcnJvcnMKKworCitjbGFzcyBNYXJp
b25ldHRlUHJvdG9jb2woUHJvdG9jb2wpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleGVjdXRv
ciwgYnJvd3NlciwgdGltZW91dF9tdWx0aXBsaWVyPTEpOgorICAgICAgICBkb19kZWxheWVkX2lt
cG9ydHMoKQorCisgICAgICAgIFByb3RvY29sLl9faW5pdF9fKHNlbGYsIGV4ZWN1dG9yLCBicm93
c2VyKQorICAgICAgICBzZWxmLm1hcmlvbmV0dGUgPSBOb25lCisgICAgICAgIHNlbGYubWFyaW9u
ZXR0ZV9wb3J0ID0gYnJvd3Nlci5tYXJpb25ldHRlX3BvcnQKKyAgICAgICAgc2VsZi50aW1lb3V0
X211bHRpcGxpZXIgPSB0aW1lb3V0X211bHRpcGxpZXIKKyAgICAgICAgc2VsZi50aW1lb3V0ID0g
Tm9uZQorICAgICAgICBzZWxmLnJ1bm5lcl9oYW5kbGUgPSBOb25lCisKKyAgICBkZWYgc2V0dXAo
c2VsZiwgcnVubmVyKToKKyAgICAgICAgIiIiQ29ubmVjdCB0byBicm93c2VyIHZpYSBNYXJpb25l
dHRlLiIiIgorICAgICAgICBQcm90b2NvbC5zZXR1cChzZWxmLCBydW5uZXIpCisKKyAgICAgICAg
c2VsZi5sb2dnZXIuZGVidWcoIkNvbm5lY3RpbmcgdG8gTWFyaW9uZXR0ZSBvbiBwb3J0ICVpIiAl
IHNlbGYubWFyaW9uZXR0ZV9wb3J0KQorICAgICAgICBzdGFydHVwX3RpbWVvdXQgPSBtYXJpb25l
dHRlLk1hcmlvbmV0dGUuREVGQVVMVF9TVEFSVFVQX1RJTUVPVVQgKiBzZWxmLnRpbWVvdXRfbXVs
dGlwbGllcgorICAgICAgICBzZWxmLm1hcmlvbmV0dGUgPSBtYXJpb25ldHRlLk1hcmlvbmV0dGUo
aG9zdD0nbG9jYWxob3N0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBvcnQ9c2VsZi5tYXJpb25ldHRlX3BvcnQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXRfdGltZW91dD1Ob25lLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnR1cF90aW1lb3V0
PXN0YXJ0dXBfdGltZW91dCkKKworICAgICAgICAjIFhYWCBNb3ZlIHRoaXMgdGltZW91dCBzb21l
d2hlcmUKKyAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcoIldhaXRpbmcgZm9yIE1hcmlvbmV0dGUg
Y29ubmVjdGlvbiIpCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBzdWNjZXNzID0g
c2VsZi5tYXJpb25ldHRlLndhaXRfZm9yX3BvcnQoNjAgKiBzZWxmLnRpbWVvdXRfbXVsdGlwbGll
cikKKyAgICAgICAgICAgICNXaGVuIHJ1bm5pbmcgaW4gYSBkZWJ1Z2dlciB3YWl0IGluZGVmaW5p
dGVseSBmb3IgZmlyZWZveCB0byBzdGFydAorICAgICAgICAgICAgaWYgc3VjY2VzcyBvciBzZWxm
LmV4ZWN1dG9yLmRlYnVnX2luZm8gaXMgTm9uZToKKyAgICAgICAgICAgICAgICBicmVhaworCisg
ICAgICAgIHNlc3Npb25fc3RhcnRlZCA9IEZhbHNlCisgICAgICAgIGlmIHN1Y2Nlc3M6CisgICAg
ICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcoIlN0YXJ0aW5n
IE1hcmlvbmV0dGUgc2Vzc2lvbiIpCisgICAgICAgICAgICAgICAgc2VsZi5tYXJpb25ldHRlLnN0
YXJ0X3Nlc3Npb24oKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAg
ICAgICAgICAgIHNlbGYubG9nZ2VyLndhcm5pbmcoIlN0YXJ0aW5nIG1hcmlvbmV0dGUgc2Vzc2lv
biBmYWlsZWQ6ICVzIiAlIGUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNl
bGYubG9nZ2VyLmRlYnVnKCJNYXJpb25ldHRlIHNlc3Npb24gc3RhcnRlZCIpCisgICAgICAgICAg
ICAgICAgc2Vzc2lvbl9zdGFydGVkID0gVHJ1ZQorCisgICAgICAgIGlmIG5vdCBzdWNjZXNzIG9y
IG5vdCBzZXNzaW9uX3N0YXJ0ZWQ6CisgICAgICAgICAgICBzZWxmLmxvZ2dlci53YXJuaW5nKCJG
YWlsZWQgdG8gY29ubmVjdCB0byBNYXJpb25ldHRlIikKKyAgICAgICAgICAgIHNlbGYuZXhlY3V0
b3IucnVubmVyLnNlbmRfbWVzc2FnZSgiaW5pdF9mYWlsZWQiKQorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuYWZ0ZXJfY29ubmVjdCgpCisgICAg
ICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLndh
cm5pbmcoIlBvc3QtY29ubmVjdGlvbiBzdGVwcyBmYWlsZWQiKQorICAgICAgICAgICAgICAgIHNl
bGYubG9nZ2VyLmVycm9yKHRyYWNlYmFjay5mb3JtYXRfZXhjKCkpCisgICAgICAgICAgICAgICAg
c2VsZi5leGVjdXRvci5ydW5uZXIuc2VuZF9tZXNzYWdlKCJpbml0X2ZhaWxlZCIpCisgICAgICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZXhlY3V0b3IucnVubmVyLnNlbmRfbWVz
c2FnZSgiaW5pdF9zdWNjZWVkZWQiKQorCisgICAgZGVmIHRlYXJkb3duKHNlbGYpOgorICAgICAg
ICB0cnk6CisgICAgICAgICAgICBzZWxmLm1hcmlvbmV0dGUuX3JlcXVlc3RfaW5fYXBwX3NodXRk
b3duKCkKKyAgICAgICAgICAgIHNlbGYubWFyaW9uZXR0ZS5kZWxldGVfc2Vzc2lvbihzZW5kX3Jl
cXVlc3Q9RmFsc2UsIHJlc2V0X3Nlc3Npb25faWQ9VHJ1ZSkKKyAgICAgICAgZXhjZXB0IEV4Y2Vw
dGlvbjoKKyAgICAgICAgICAgICMgVGhpcyBpcyB0eXBpY2FsbHkgYmVjYXVzZSB0aGUgc2Vzc2lv
biBuZXZlciBzdGFydGVkCisgICAgICAgICAgICBwYXNzCisgICAgICAgIGlmIHNlbGYubWFyaW9u
ZXR0ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGRlbCBzZWxmLm1hcmlvbmV0dGUKKworICAg
IEBwcm9wZXJ0eQorICAgIGRlZiBpc19hbGl2ZShzZWxmKToKKyAgICAgICAgIiIiQ2hlY2sgaWYg
dGhlIE1hcmlvbmV0dGUgY29ubmVjdGlvbiBpcyBzdGlsbCBhY3RpdmUuIiIiCisgICAgICAgIHRy
eToKKyAgICAgICAgICAgIHNlbGYubWFyaW9uZXR0ZS5jdXJyZW50X3dpbmRvd19oYW5kbGUKKyAg
ICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAg
ICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIGFmdGVyX2Nvbm5lY3Qoc2VsZik6CisgICAgICAgIHNl
bGYubG9hZF9ydW5uZXIoc2VsZi5leGVjdXRvci5sYXN0X2Vudmlyb25tZW50WyJwcm90b2NvbCJd
KQorCisgICAgZGVmIHNldF90aW1lb3V0KHNlbGYsIHRpbWVvdXQpOgorICAgICAgICAiIiJTZXQg
dGhlIE1hcmlvbmV0dGUgc2NyaXB0IHRpbWVvdXQuCisKKyAgICAgICAgOnBhcmFtIHRpbWVvdXQ6
IFNjcmlwdCB0aW1lb3V0IGluIHNlY29uZHMKKworICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5t
YXJpb25ldHRlLnRpbWVvdXQuc2NyaXB0ID0gdGltZW91dAorICAgICAgICBzZWxmLnRpbWVvdXQg
PSB0aW1lb3V0CisKKyAgICBkZWYgbG9hZF9ydW5uZXIoc2VsZiwgcHJvdG9jb2wpOgorICAgICAg
ICAjIENoZWNrIGlmIHdlIHByZXZpb3VzbHkgaGFkIGEgdGVzdCB3aW5kb3cgb3BlbiwgYW5kIGlm
IHdlIGRpZCBtYWtlIHN1cmUgaXQncyBjbG9zZWQKKyAgICAgICAgc2VsZi5tYXJpb25ldHRlLmV4
ZWN1dGVfc2NyaXB0KCJpZiAod2luZG93LndyYXBwZWRKU09iamVjdC53aW4pIHt3aW5kb3cud3Jh
cHBlZEpTT2JqZWN0Lndpbi5jbG9zZSgpfSIpCisgICAgICAgIHVybCA9IHVybHBhcnNlLnVybGpv
aW4oc2VsZi5leGVjdXRvci5zZXJ2ZXJfdXJsKHByb3RvY29sKSwgIi90ZXN0aGFybmVzc19ydW5u
ZXIuaHRtbCIpCisgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJMb2FkaW5nICVzIiAlIHVybCkK
KyAgICAgICAgc2VsZi5ydW5uZXJfaGFuZGxlID0gc2VsZi5tYXJpb25ldHRlLmN1cnJlbnRfd2lu
ZG93X2hhbmRsZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLm1hcmlvbmV0dGUubmF2
aWdhdGUodXJsKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBz
ZWxmLmxvZ2dlci5jcml0aWNhbCgKKyAgICAgICAgICAgICAgICAiTG9hZGluZyBpbml0aWFsIHBh
Z2UgJXMgZmFpbGVkLiBFbnN1cmUgdGhhdCB0aGUgIgorICAgICAgICAgICAgICAgICJ0aGVyZSBh
cmUgbm8gb3RoZXIgcHJvZ3JhbXMgYm91bmQgdG8gdGhpcyBwb3J0IGFuZCAiCisgICAgICAgICAg
ICAgICAgInRoYXQgeW91ciBmaXJld2FsbCBydWxlcyBvciBuZXR3b3JrIHNldHVwIGRvZXMgbm90
ICIKKyAgICAgICAgICAgICAgICAicHJldmVudCBhY2Nlc3MuXGUlcyIgJSAodXJsLCB0cmFjZWJh
Y2suZm9ybWF0X2V4YyhlKSkpCisgICAgICAgIHNlbGYubWFyaW9uZXR0ZS5leGVjdXRlX3Njcmlw
dCgKKyAgICAgICAgICAgICJkb2N1bWVudC50aXRsZSA9ICclcyciICUgdGhyZWFkaW5nLmN1cnJl
bnRfdGhyZWFkKCkubmFtZS5yZXBsYWNlKCInIiwgJyInKSkKKworICAgIGRlZiBjbG9zZV9vbGRf
d2luZG93cyhzZWxmLCBwcm90b2NvbCk6CisgICAgICAgIGhhbmRsZXMgPSBzZWxmLm1hcmlvbmV0
dGUud2luZG93X2hhbmRsZXMKKyAgICAgICAgcnVubmVyX2hhbmRsZSA9IE5vbmUKKyAgICAgICAg
dHJ5OgorICAgICAgICAgICAgaGFuZGxlcy5yZW1vdmUoc2VsZi5ydW5uZXJfaGFuZGxlKQorICAg
ICAgICAgICAgcnVubmVyX2hhbmRsZSA9IHNlbGYucnVubmVyX2hhbmRsZQorICAgICAgICBleGNl
cHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICMgVGhlIHJ1bm5lciB3aW5kb3cgcHJvYmFibHkg
Y2hhbmdlZCBpZCBidXQgd2UgY2FuIHJlc3RvcmUgaXQKKyAgICAgICAgICAgICMgVGhpcyBpc24n
dCBzdXBwb3NlZCB0byBoYXBwZW4sIGJ1dCBtYXJpb25ldHRlIGlkcyBhcmUgbm90IHlldCBzdGFi
bGUKKyAgICAgICAgICAgICMgV2UgYXNzdW1lIHRoYXQgdGhlIGZpcnN0IGhhbmRsZSByZXR1cm5l
ZCBjb3JyZXNwb25kcyB0byB0aGUgcnVubmVyLAorICAgICAgICAgICAgIyBidXQgaXQgaG9wZWZ1
bGx5IGRvZXNuJ3QgbWF0dGVyIHRvbyBtdWNoIGlmIHRoYXQgYXNzdW1wdGlvbiBpcworICAgICAg
ICAgICAgIyB3cm9uZyBzaW5jZSB3ZSByZWxvYWQgdGhlIHJ1bm5lciBpbiB0aGF0IHRhYiBhbnl3
YXkuCisgICAgICAgICAgICBydW5uZXJfaGFuZGxlID0gaGFuZGxlcy5wb3AoMCkKKworICAgICAg
ICBmb3IgaGFuZGxlIGluIGhhbmRsZXM6CisgICAgICAgICAgICBzZWxmLm1hcmlvbmV0dGUuc3dp
dGNoX3RvX3dpbmRvdyhoYW5kbGUpCisgICAgICAgICAgICBzZWxmLm1hcmlvbmV0dGUuY2xvc2Uo
KQorCisgICAgICAgIHNlbGYubWFyaW9uZXR0ZS5zd2l0Y2hfdG9fd2luZG93KHJ1bm5lcl9oYW5k
bGUpCisgICAgICAgIGlmIHJ1bm5lcl9oYW5kbGUgIT0gc2VsZi5ydW5uZXJfaGFuZGxlOgorICAg
ICAgICAgICAgc2VsZi5sb2FkX3J1bm5lcihwcm90b2NvbCkKKworICAgIGRlZiB3YWl0KHNlbGYp
OgorICAgICAgICBzb2NrZXRfdGltZW91dCA9IHNlbGYubWFyaW9uZXR0ZS5jbGllbnQuc29jay5n
ZXR0aW1lb3V0KCkKKyAgICAgICAgaWYgc29ja2V0X3RpbWVvdXQ6CisgICAgICAgICAgICBzZWxm
Lm1hcmlvbmV0dGUudGltZW91dC5zY3JpcHQgPSBzb2NrZXRfdGltZW91dCAvIDIKKworICAgICAg
ICBzZWxmLm1hcmlvbmV0dGUuc3dpdGNoX3RvX3dpbmRvdyhzZWxmLnJ1bm5lcl9oYW5kbGUpCisg
ICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2Vs
Zi5tYXJpb25ldHRlLmV4ZWN1dGVfYXN5bmNfc2NyaXB0KCIiKQorICAgICAgICAgICAgZXhjZXB0
IGVycm9ycy5Ob1N1Y2hXaW5kb3dFeGNlcHRpb246CisgICAgICAgICAgICAgICAgIyBUaGUgd2lu
ZG93IGNsb3NlZAorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBleGNlcHQgZXJy
b3JzLlNjcmlwdFRpbWVvdXRFeGNlcHRpb246CisgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIu
ZGVidWcoIlNjcmlwdCB0aW1lZCBvdXQiKQorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAg
ICAgIGV4Y2VwdCAoc29ja2V0LnRpbWVvdXQsIElPRXJyb3IpOgorICAgICAgICAgICAgICAgIHNl
bGYubG9nZ2VyLmRlYnVnKCJTb2NrZXQgY2xvc2VkIikKKyAgICAgICAgICAgICAgICBicmVhawor
ICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgIHNlbGYu
bG9nZ2VyLndhcm5pbmcodHJhY2ViYWNrLmZvcm1hdF9leGMoZSkpCisgICAgICAgICAgICAgICAg
YnJlYWsKKworICAgIGRlZiBvbl9lbnZpcm9ubWVudF9jaGFuZ2Uoc2VsZiwgb2xkX2Vudmlyb25t
ZW50LCBuZXdfZW52aXJvbm1lbnQpOgorICAgICAgICAjVW5zZXQgYWxsIHRoZSBvbGQgcHJlZnMK
KyAgICAgICAgZm9yIG5hbWUgaW4gb2xkX2Vudmlyb25tZW50LmdldCgicHJlZnMiLCB7fSkuaXRl
cmtleXMoKToKKyAgICAgICAgICAgIHZhbHVlID0gc2VsZi5leGVjdXRvci5vcmlnaW5hbF9wcmVm
X3ZhbHVlc1tuYW1lXQorICAgICAgICAgICAgaWYgdmFsdWUgaXMgTm9uZToKKyAgICAgICAgICAg
ICAgICBzZWxmLmNsZWFyX3VzZXJfcHJlZihuYW1lKQorICAgICAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgICAgICBzZWxmLnNldF9wcmVmKG5hbWUsIHZhbHVlKQorCisgICAgICAgIGZvciBuYW1l
LCB2YWx1ZSBpbiBuZXdfZW52aXJvbm1lbnQuZ2V0KCJwcmVmcyIsIHt9KS5pdGVyaXRlbXMoKToK
KyAgICAgICAgICAgIHNlbGYuZXhlY3V0b3Iub3JpZ2luYWxfcHJlZl92YWx1ZXNbbmFtZV0gPSBz
ZWxmLmdldF9wcmVmKG5hbWUpCisgICAgICAgICAgICBzZWxmLnNldF9wcmVmKG5hbWUsIHZhbHVl
KQorCisgICAgZGVmIHNldF9wcmVmKHNlbGYsIG5hbWUsIHZhbHVlKToKKyAgICAgICAgaWYgdmFs
dWUubG93ZXIoKSBub3QgaW4gKCJ0cnVlIiwgImZhbHNlIik6CisgICAgICAgICAgICB0cnk6Cisg
ICAgICAgICAgICAgICAgaW50KHZhbHVlKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6
CisgICAgICAgICAgICAgICAgdmFsdWUgPSAiJyVzJyIgJSB2YWx1ZQorICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5sb3dlcigpCisKKyAgICAgICAgc2VsZi5sb2dnZXIu
aW5mbygiU2V0dGluZyBwcmVmICVzICglcykiICUgKG5hbWUsIHZhbHVlKSkKKworICAgICAgICBz
Y3JpcHQgPSAiIiIKKyAgICAgICAgICAgIGxldCBwcmVmSW50ZXJmYWNlID0gQ29tcG9uZW50cy5j
bGFzc2VzWyJAbW96aWxsYS5vcmcvcHJlZmVyZW5jZXMtc2VydmljZTsxIl0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRTZXJ2aWNlKENvbXBvbmVudHMuaW50
ZXJmYWNlcy5uc0lQcmVmQnJhbmNoKTsKKyAgICAgICAgICAgIGxldCBwcmVmID0gJyVzJzsKKyAg
ICAgICAgICAgIGxldCB0eXBlID0gcHJlZkludGVyZmFjZS5nZXRQcmVmVHlwZShwcmVmKTsKKyAg
ICAgICAgICAgIGxldCB2YWx1ZSA9ICVzOworICAgICAgICAgICAgc3dpdGNoKHR5cGUpIHsKKyAg
ICAgICAgICAgICAgICBjYXNlIHByZWZJbnRlcmZhY2UuUFJFRl9TVFJJTkc6CisgICAgICAgICAg
ICAgICAgICAgIHByZWZJbnRlcmZhY2Uuc2V0Q2hhclByZWYocHJlZiwgdmFsdWUpOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIHByZWZJbnRlcmZhY2Uu
UFJFRl9CT09MOgorICAgICAgICAgICAgICAgICAgICBwcmVmSW50ZXJmYWNlLnNldEJvb2xQcmVm
KHByZWYsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgY2FzZSBwcmVmSW50ZXJmYWNlLlBSRUZfSU5UOgorICAgICAgICAgICAgICAgICAgICBwcmVm
SW50ZXJmYWNlLnNldEludFByZWYocHJlZiwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICIiIiAlIChuYW1lLCB2YWx1ZSkKKyAg
ICAgICAgd2l0aCBzZWxmLm1hcmlvbmV0dGUudXNpbmdfY29udGV4dChzZWxmLm1hcmlvbmV0dGUu
Q09OVEVYVF9DSFJPTUUpOgorICAgICAgICAgICAgc2VsZi5tYXJpb25ldHRlLmV4ZWN1dGVfc2Ny
aXB0KHNjcmlwdCkKKworICAgIGRlZiBjbGVhcl91c2VyX3ByZWYoc2VsZiwgbmFtZSk6CisgICAg
ICAgIHNlbGYubG9nZ2VyLmluZm8oIkNsZWFyaW5nIHByZWYgJXMiICUgKG5hbWUpKQorICAgICAg
ICBzY3JpcHQgPSAiIiIKKyAgICAgICAgICAgIGxldCBwcmVmSW50ZXJmYWNlID0gQ29tcG9uZW50
cy5jbGFzc2VzWyJAbW96aWxsYS5vcmcvcHJlZmVyZW5jZXMtc2VydmljZTsxIl0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRTZXJ2aWNlKENvbXBvbmVudHMu
aW50ZXJmYWNlcy5uc0lQcmVmQnJhbmNoKTsKKyAgICAgICAgICAgIGxldCBwcmVmID0gJyVzJzsK
KyAgICAgICAgICAgIHByZWZJbnRlcmZhY2UuY2xlYXJVc2VyUHJlZihwcmVmKTsKKyAgICAgICAg
ICAgICIiIiAlIG5hbWUKKyAgICAgICAgd2l0aCBzZWxmLm1hcmlvbmV0dGUudXNpbmdfY29udGV4
dChzZWxmLm1hcmlvbmV0dGUuQ09OVEVYVF9DSFJPTUUpOgorICAgICAgICAgICAgc2VsZi5tYXJp
b25ldHRlLmV4ZWN1dGVfc2NyaXB0KHNjcmlwdCkKKworICAgIGRlZiBnZXRfcHJlZihzZWxmLCBu
YW1lKToKKyAgICAgICAgc2NyaXB0ID0gIiIiCisgICAgICAgICAgICBsZXQgcHJlZkludGVyZmFj
ZSA9IENvbXBvbmVudHMuY2xhc3Nlc1siQG1vemlsbGEub3JnL3ByZWZlcmVuY2VzLXNlcnZpY2U7
MSJdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0U2Vydmlj
ZShDb21wb25lbnRzLmludGVyZmFjZXMubnNJUHJlZkJyYW5jaCk7CisgICAgICAgICAgICBsZXQg
cHJlZiA9ICclcyc7CisgICAgICAgICAgICBsZXQgdHlwZSA9IHByZWZJbnRlcmZhY2UuZ2V0UHJl
ZlR5cGUocHJlZik7CisgICAgICAgICAgICBzd2l0Y2godHlwZSkgeworICAgICAgICAgICAgICAg
IGNhc2UgcHJlZkludGVyZmFjZS5QUkVGX1NUUklORzoKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHByZWZJbnRlcmZhY2UuZ2V0Q2hhclByZWYocHJlZik7CisgICAgICAgICAgICAgICAgY2Fz
ZSBwcmVmSW50ZXJmYWNlLlBSRUZfQk9PTDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBy
ZWZJbnRlcmZhY2UuZ2V0Qm9vbFByZWYocHJlZik7CisgICAgICAgICAgICAgICAgY2FzZSBwcmVm
SW50ZXJmYWNlLlBSRUZfSU5UOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJlZkludGVy
ZmFjZS5nZXRJbnRQcmVmKHByZWYpOworICAgICAgICAgICAgICAgIGNhc2UgcHJlZkludGVyZmFj
ZS5QUkVGX0lOVkFMSUQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgIiIiICUgbmFtZQorICAgICAgICB3aXRoIHNlbGYubWFyaW9u
ZXR0ZS51c2luZ19jb250ZXh0KHNlbGYubWFyaW9uZXR0ZS5DT05URVhUX0NIUk9NRSk6CisgICAg
ICAgICAgICBzZWxmLm1hcmlvbmV0dGUuZXhlY3V0ZV9zY3JpcHQoc2NyaXB0KQorCisgICAgZGVm
IGNsZWFyX29yaWdpbihzZWxmLCB1cmwpOgorICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKCJDbGVh
cmluZyBvcmlnaW4gJXMiICUgKHVybCkpCisgICAgICAgIHNjcmlwdCA9ICIiIgorICAgICAgICAg
ICAgbGV0IHVybCA9ICclcyc7CisgICAgICAgICAgICBsZXQgdXJpID0gQ29tcG9uZW50cy5jbGFz
c2VzWyJAbW96aWxsYS5vcmcvbmV0d29yay9pby1zZXJ2aWNlOzEiXQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAuZ2V0U2VydmljZShDaS5uc0lJT1NlcnZpY2UpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC5uZXdVUkkodXJsKTsKKyAgICAgICAgICAgIGxldCBzc20g
PSBDb21wb25lbnRzLmNsYXNzZXNbIkBtb3ppbGxhLm9yZy9zY3JpcHRzZWN1cml0eW1hbmFnZXI7
MSJdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRTZXJ2aWNlKENpLm5zSVNj
cmlwdFNlY3VyaXR5TWFuYWdlcik7CisgICAgICAgICAgICBsZXQgcHJpbmNpcGFsID0gc3NtLmNy
ZWF0ZUNvZGViYXNlUHJpbmNpcGFsKHVyaSwge30pOworICAgICAgICAgICAgbGV0IHFtcyA9IENv
bXBvbmVudHMuY2xhc3Nlc1siQG1vemlsbGEub3JnL2RvbS9xdW90YS1tYW5hZ2VyLXNlcnZpY2U7
MSJdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRTZXJ2aWNlKENvbXBvbmVu
dHMuaW50ZXJmYWNlcy5uc0lRdW90YU1hbmFnZXJTZXJ2aWNlKTsKKyAgICAgICAgICAgIHFtcy5j
bGVhclN0b3JhZ2VzRm9yUHJpbmNpcGFsKHByaW5jaXBhbCwgImRlZmF1bHQiLCB0cnVlKTsKKyAg
ICAgICAgICAgICIiIiAlIHVybAorICAgICAgICB3aXRoIHNlbGYubWFyaW9uZXR0ZS51c2luZ19j
b250ZXh0KHNlbGYubWFyaW9uZXR0ZS5DT05URVhUX0NIUk9NRSk6CisgICAgICAgICAgICBzZWxm
Lm1hcmlvbmV0dGUuZXhlY3V0ZV9zY3JpcHQoc2NyaXB0KQorCisKK2NsYXNzIEV4ZWN1dGVBc3lu
Y1NjcmlwdFJ1bihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2dnZXIsIGZ1bmMs
IHByb3RvY29sLCB1cmwsIHRpbWVvdXQpOgorICAgICAgICBzZWxmLmxvZ2dlciA9IGxvZ2dlcgor
ICAgICAgICBzZWxmLnJlc3VsdCA9IChOb25lLCBOb25lKQorICAgICAgICBzZWxmLnByb3RvY29s
ID0gcHJvdG9jb2wKKyAgICAgICAgc2VsZi5tYXJpb25ldHRlID0gcHJvdG9jb2wubWFyaW9uZXR0
ZQorICAgICAgICBzZWxmLmZ1bmMgPSBmdW5jCisgICAgICAgIHNlbGYudXJsID0gdXJsCisgICAg
ICAgIHNlbGYudGltZW91dCA9IHRpbWVvdXQKKyAgICAgICAgc2VsZi5yZXN1bHRfZmxhZyA9IHRo
cmVhZGluZy5FdmVudCgpCisKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICBpbmRleCA9IHNl
bGYudXJsLnJmaW5kKCIvc3RvcmFnZS8iKTsKKyAgICAgICAgaWYgaW5kZXggIT0gLTE6CisgICAg
ICAgICAgICAjIENsZWFyIHN0b3JhZ2UKKyAgICAgICAgICAgIHNlbGYucHJvdG9jb2wuY2xlYXJf
b3JpZ2luKHNlbGYudXJsKQorCisgICAgICAgIHRpbWVvdXQgPSBzZWxmLnRpbWVvdXQKKworICAg
ICAgICB0cnk6CisgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgorICAgICAgICAg
ICAgICAgIGlmIHRpbWVvdXQgKyBleHRyYV90aW1lb3V0ICE9IHNlbGYucHJvdG9jb2wudGltZW91
dDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5wcm90b2NvbC5zZXRfdGltZW91dCh0aW1lb3V0
ICsgZXh0cmFfdGltZW91dCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBX
ZSBqdXN0IHdhbnQgaXQgdG8gbmV2ZXIgdGltZSBvdXQsIHJlYWxseSwgYnV0IG1hcmlvbmV0dGUg
ZG9lc24ndAorICAgICAgICAgICAgICAgICMgbWFrZSB0aGF0IHBvc3NpYmxlLiBJdCBhbHNvIHNl
ZW1zIHRvIHRpbWUgb3V0IGltbWVkaWF0ZWx5IGlmIHRoZQorICAgICAgICAgICAgICAgICMgdGlt
ZW91dCBpcyBzZXQgdG9vIGhpZ2guIFRoaXMgd29ya3MgYXQgbGVhc3QuCisgICAgICAgICAgICAg
ICAgc2VsZi5wcm90b2NvbC5zZXRfdGltZW91dCgyKioyOCAtIDEpCisgICAgICAgIGV4Y2VwdCBJ
T0Vycm9yOgorICAgICAgICAgICAgc2VsZi5sb2dnZXIuZXJyb3IoIkxvc3QgbWFyaW9uZXR0ZSBj
b25uZWN0aW9uIGJlZm9yZSBzdGFydGluZyB0ZXN0IikKKyAgICAgICAgICAgIHJldHVybiBTdG9w
CisKKyAgICAgICAgZXhlY3V0b3IgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldCA9IHNlbGYuX3J1
bikKKyAgICAgICAgZXhlY3V0b3Iuc3RhcnQoKQorCisgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90
IE5vbmU6CisgICAgICAgICAgICB3YWl0X3RpbWVvdXQgPSB0aW1lb3V0ICsgMiAqIGV4dHJhX3Rp
bWVvdXQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHdhaXRfdGltZW91dCA9IE5vbmUKKwor
ICAgICAgICBmbGFnID0gc2VsZi5yZXN1bHRfZmxhZy53YWl0KHdhaXRfdGltZW91dCkKKworICAg
ICAgICBpZiBzZWxmLnJlc3VsdCA9PSAoTm9uZSwgTm9uZSk6CisgICAgICAgICAgICBzZWxmLmxv
Z2dlci5kZWJ1ZygiVGltZWQgb3V0IHdhaXRpbmcgZm9yIGEgcmVzdWx0IikKKyAgICAgICAgICAg
IHNlbGYucmVzdWx0ID0gRmFsc2UsICgiRVhURVJOQUwtVElNRU9VVCIsIE5vbmUpCisgICAgICAg
IGVsaWYgc2VsZi5yZXN1bHRbMV0gaXMgTm9uZToKKyAgICAgICAgICAgICMgV2UgZGlkbid0IGdl
dCBhbnkgZGF0YSBiYWNrIGZyb20gdGhlIHRlc3QsIHNvIGNoZWNrIGlmIHRoZQorICAgICAgICAg
ICAgIyBicm93c2VyIGlzIHN0aWxsIHJlc3BvbnNpdmUKKyAgICAgICAgICAgIGlmIHNlbGYucHJv
dG9jb2wuaXNfYWxpdmU6CisgICAgICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSBGYWxzZSwgKCJF
UlJPUiIsIE5vbmUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYucmVz
dWx0ID0gRmFsc2UsICgiQ1JBU0giLCBOb25lKQorICAgICAgICByZXR1cm4gc2VsZi5yZXN1bHQK
KworICAgIGRlZiBfcnVuKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnJl
c3VsdCA9IFRydWUsIHNlbGYuZnVuYyhzZWxmLm1hcmlvbmV0dGUsIHNlbGYudXJsLCBzZWxmLnRp
bWVvdXQpCisgICAgICAgIGV4Y2VwdCBlcnJvcnMuU2NyaXB0VGltZW91dEV4Y2VwdGlvbjoKKyAg
ICAgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJHb3QgYSBtYXJpb25ldHRlIHRpbWVvdXQiKQor
ICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSBGYWxzZSwgKCJFWFRFUk5BTC1USU1FT1VUIiwgTm9u
ZSkKKyAgICAgICAgZXhjZXB0IChzb2NrZXQudGltZW91dCwgSU9FcnJvcik6CisgICAgICAgICAg
ICAjIFRoaXMgY2FuIGhhcHBlbiBvbiBhIGNyYXNoCisgICAgICAgICAgICAjIEFsc28sIHNob3Vs
ZCBjaGVjayBhZnRlciB0aGUgdGVzdCBpZiB0aGUgZmlyZWZveCBwcm9jZXNzIGlzIHN0aWxsIHJ1
bm5pbmcKKyAgICAgICAgICAgICMgYW5kIG90aGVyd2lzZSBpZ25vcmUgYW55IG90aGVyIHJlc3Vs
dCBhbmQgc2V0IGl0IHRvIGNyYXNoCisgICAgICAgICAgICBzZWxmLnJlc3VsdCA9IEZhbHNlLCAo
IkNSQVNIIiwgTm9uZSkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAg
ICAgbWVzc2FnZSA9IGdldGF0dHIoZSwgIm1lc3NhZ2UiLCAiIikKKyAgICAgICAgICAgIGlmIG1l
c3NhZ2U6CisgICAgICAgICAgICAgICAgbWVzc2FnZSArPSAiXG4iCisgICAgICAgICAgICBtZXNz
YWdlICs9IHRyYWNlYmFjay5mb3JtYXRfZXhjKGUpCisgICAgICAgICAgICBzZWxmLnJlc3VsdCA9
IEZhbHNlLCAoIkVSUk9SIiwgZSkKKworICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2Vs
Zi5yZXN1bHRfZmxhZy5zZXQoKQorCisKK2NsYXNzIE1hcmlvbmV0dGVUZXN0aGFybmVzc0V4ZWN1
dG9yKFRlc3RoYXJuZXNzRXhlY3V0b3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm93c2Vy
LCBzZXJ2ZXJfY29uZmlnLCB0aW1lb3V0X211bHRpcGxpZXI9MSwKKyAgICAgICAgICAgICAgICAg
Y2xvc2VfYWZ0ZXJfZG9uZT1UcnVlLCBkZWJ1Z19pbmZvPU5vbmUsICoqa3dhcmdzKToKKyAgICAg
ICAgIiIiTWFyaW9uZXR0ZS1iYXNlZCBleGVjdXRvciBmb3IgdGVzdGhhcm5lc3MuanMgdGVzdHMi
IiIKKyAgICAgICAgVGVzdGhhcm5lc3NFeGVjdXRvci5fX2luaXRfXyhzZWxmLCBicm93c2VyLCBz
ZXJ2ZXJfY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVv
dXRfbXVsdGlwbGllcj10aW1lb3V0X211bHRpcGxpZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGVidWdfaW5mbz1kZWJ1Z19pbmZvKQorCisgICAgICAgIHNlbGYucHJv
dG9jb2wgPSBNYXJpb25ldHRlUHJvdG9jb2woc2VsZiwgYnJvd3NlciwgdGltZW91dF9tdWx0aXBs
aWVyKQorICAgICAgICBzZWxmLnNjcmlwdCA9IG9wZW4ob3MucGF0aC5qb2luKGhlcmUsICJ0ZXN0
aGFybmVzc19tYXJpb25ldHRlLmpzIikpLnJlYWQoKQorICAgICAgICBzZWxmLmNsb3NlX2FmdGVy
X2RvbmUgPSBjbG9zZV9hZnRlcl9kb25lCisgICAgICAgIHNlbGYud2luZG93X2lkID0gc3RyKHV1
aWQudXVpZDQoKSkKKworICAgICAgICBzZWxmLm9yaWdpbmFsX3ByZWZfdmFsdWVzID0ge30KKwor
ICAgICAgICBpZiBtYXJpb25ldHRlIGlzIE5vbmU6CisgICAgICAgICAgICBkb19kZWxheWVkX2lt
cG9ydHMoKQorCisgICAgZGVmIGlzX2FsaXZlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5w
cm90b2NvbC5pc19hbGl2ZQorCisgICAgZGVmIG9uX2Vudmlyb25tZW50X2NoYW5nZShzZWxmLCBu
ZXdfZW52aXJvbm1lbnQpOgorICAgICAgICBzZWxmLnByb3RvY29sLm9uX2Vudmlyb25tZW50X2No
YW5nZShzZWxmLmxhc3RfZW52aXJvbm1lbnQsIG5ld19lbnZpcm9ubWVudCkKKworICAgICAgICBp
ZiBuZXdfZW52aXJvbm1lbnRbInByb3RvY29sIl0gIT0gc2VsZi5sYXN0X2Vudmlyb25tZW50WyJw
cm90b2NvbCJdOgorICAgICAgICAgICAgc2VsZi5wcm90b2NvbC5sb2FkX3J1bm5lcihuZXdfZW52
aXJvbm1lbnRbInByb3RvY29sIl0pCisKKyAgICBkZWYgZG9fdGVzdChzZWxmLCB0ZXN0KToKKyAg
ICAgICAgdGltZW91dCA9ICh0ZXN0LnRpbWVvdXQgKiBzZWxmLnRpbWVvdXRfbXVsdGlwbGllciBp
ZiBzZWxmLmRlYnVnX2luZm8gaXMgTm9uZQorICAgICAgICAgICAgICAgICAgIGVsc2UgTm9uZSkK
KworICAgICAgICBzdWNjZXNzLCBkYXRhID0gRXhlY3V0ZUFzeW5jU2NyaXB0UnVuKHNlbGYubG9n
Z2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYu
ZG9fdGVzdGhhcm5lc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5wcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxmLnRlc3RfdXJsKHRlc3QpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQpLnJ1bigpCisgICAgICAgIGlmIHN1Y2Nlc3M6
CisgICAgICAgICAgICByZXR1cm4gc2VsZi5jb252ZXJ0X3Jlc3VsdCh0ZXN0LCBkYXRhKQorCisg
ICAgICAgIHJldHVybiAodGVzdC5yZXN1bHRfY2xzKCpkYXRhKSwgW10pCisKKyAgICBkZWYgZG9f
dGVzdGhhcm5lc3Moc2VsZiwgbWFyaW9uZXR0ZSwgdXJsLCB0aW1lb3V0KToKKyAgICAgICAgaWYg
c2VsZi5jbG9zZV9hZnRlcl9kb25lOgorICAgICAgICAgICAgbWFyaW9uZXR0ZS5leGVjdXRlX3Nj
cmlwdCgiaWYgKHdpbmRvdy53cmFwcGVkSlNPYmplY3Qud2luKSB7d2luZG93LndyYXBwZWRKU09i
amVjdC53aW4uY2xvc2UoKX0iKQorICAgICAgICAgICAgc2VsZi5wcm90b2NvbC5jbG9zZV9vbGRf
d2luZG93cyhzZWxmLnByb3RvY29sKQorCisgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6
CisgICAgICAgICAgICB0aW1lb3V0X21zID0gc3RyKHRpbWVvdXQgKiAxMDAwKQorICAgICAgICBl
bHNlOgorICAgICAgICAgICAgdGltZW91dF9tcyA9ICJudWxsIgorCisgICAgICAgIHNjcmlwdCA9
IHNlbGYuc2NyaXB0ICUgeyJhYnNfdXJsIjogdXJsLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAidXJsIjogc3RyaXBfc2VydmVyKHVybCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJ3aW5kb3dfaWQiOiBzZWxmLndpbmRvd19pZCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgInRpbWVvdXRfbXVsdGlwbGllciI6IHNlbGYudGltZW91dF9tdWx0aXBs
aWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGltZW91dCI6IHRpbWVvdXRf
bXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBsaWNpdF90aW1lb3V0Ijog
dGltZW91dCBpcyBOb25lfQorCisgICAgICAgIHJ2ID0gbWFyaW9uZXR0ZS5leGVjdXRlX2FzeW5j
X3NjcmlwdChzY3JpcHQsIG5ld19zYW5kYm94PUZhbHNlKQorICAgICAgICByZXR1cm4gcnYKKwor
CitjbGFzcyBNYXJpb25ldHRlUmVmVGVzdEV4ZWN1dG9yKFJlZlRlc3RFeGVjdXRvcik6CisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIGJyb3dzZXIsIHNlcnZlcl9jb25maWcsIHRpbWVvdXRfbXVsdGlw
bGllcj0xLAorICAgICAgICAgICAgICAgICBzY3JlZW5zaG90X2NhY2hlPU5vbmUsIGNsb3NlX2Fm
dGVyX2RvbmU9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgZGVidWdfaW5mbz1Ob25lLCByZWZ0ZXN0
X2ludGVybmFsPUZhbHNlLAorICAgICAgICAgICAgICAgICByZWZ0ZXN0X3NjcmVlbnNob3Q9InVu
ZXhwZWN0ZWQiLAorICAgICAgICAgICAgICAgICBncm91cF9tZXRhZGF0YT1Ob25lLCAqKmt3YXJn
cyk6CisgICAgICAgICIiIk1hcmlvbmV0dGUtYmFzZWQgZXhlY3V0b3IgZm9yIHJlZnRlc3RzIiIi
CisgICAgICAgIFJlZlRlc3RFeGVjdXRvci5fX2luaXRfXyhzZWxmLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJvd3NlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNlcnZlcl9jb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3Jl
ZW5zaG90X2NhY2hlPXNjcmVlbnNob3RfY2FjaGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0aW1lb3V0X211bHRpcGxpZXI9dGltZW91dF9tdWx0aXBsaWVyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdfaW5mbz1kZWJ1Z19pbmZvKQorICAgICAgICBz
ZWxmLnByb3RvY29sID0gTWFyaW9uZXR0ZVByb3RvY29sKHNlbGYsIGJyb3dzZXIpCisgICAgICAg
IHNlbGYuaW1wbGVtZW50YXRpb24gPSAoSW50ZXJuYWxSZWZUZXN0SW1wbGVtZW50YXRpb24KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiByZWZ0ZXN0X2ludGVybmFsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBSZWZUZXN0SW1wbGVtZW50YXRpb24pKHNlbGYp
CisgICAgICAgIHNlbGYuaW1wbGVtZW50YXRpb25fa3dhcmdzID0gKHsic2NyZWVuc2hvdCI6IHJl
ZnRlc3Rfc2NyZWVuc2hvdH0gaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVmdGVzdF9pbnRlcm5hbCBlbHNlIHt9KQorCisgICAgICAgIHNlbGYuY2xvc2VfYWZ0ZXJf
ZG9uZSA9IGNsb3NlX2FmdGVyX2RvbmUKKyAgICAgICAgc2VsZi5oYXNfd2luZG93ID0gRmFsc2UK
KyAgICAgICAgc2VsZi5vcmlnaW5hbF9wcmVmX3ZhbHVlcyA9IHt9CisgICAgICAgIHNlbGYuZ3Jv
dXBfbWV0YWRhdGEgPSBncm91cF9tZXRhZGF0YQorCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRo
LmpvaW4oaGVyZSwgInJlZnRlc3QuanMiKSkgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuc2NyaXB0
ID0gZi5yZWFkKCkKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihoZXJlLCAicmVmdGVz
dC13YWl0X21hcmlvbmV0dGUuanMiKSkgYXMgZjoKKyAgICAgICAgICAgIHNlbGYud2FpdF9zY3Jp
cHQgPSBmLnJlYWQoKQorCisgICAgZGVmIHNldHVwKHNlbGYsIHJ1bm5lcik6CisgICAgICAgIHN1
cGVyKHNlbGYuX19jbGFzc19fLCBzZWxmKS5zZXR1cChydW5uZXIpCisgICAgICAgIHNlbGYuaW1w
bGVtZW50YXRpb24uc2V0dXAoKipzZWxmLmltcGxlbWVudGF0aW9uX2t3YXJncykKKworICAgIGRl
ZiB0ZWFyZG93bihzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5pbXBsZW1l
bnRhdGlvbi50ZWFyZG93bigpCisgICAgICAgICAgICBoYW5kbGUgPSBzZWxmLnByb3RvY29sLm1h
cmlvbmV0dGUud2luZG93X2hhbmRsZXNbMF0KKyAgICAgICAgICAgIHNlbGYucHJvdG9jb2wubWFy
aW9uZXR0ZS5zd2l0Y2hfdG9fd2luZG93KGhhbmRsZSkKKyAgICAgICAgICAgIHN1cGVyKHNlbGYu
X19jbGFzc19fLCBzZWxmKS50ZWFyZG93bigpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMg
ZToKKyAgICAgICAgICAgICMgSWdub3JlIGVycm9ycyBkdXJpbmcgdGVhcmRvd24KKyAgICAgICAg
ICAgIHNlbGYubG9nZ2VyLndhcm5pbmcodHJhY2ViYWNrLmZvcm1hdF9leGMoZSkpCisKKyAgICBk
ZWYgaXNfYWxpdmUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnByb3RvY29sLmlzX2FsaXZl
CisKKyAgICBkZWYgb25fZW52aXJvbm1lbnRfY2hhbmdlKHNlbGYsIG5ld19lbnZpcm9ubWVudCk6
CisgICAgICAgIHNlbGYucHJvdG9jb2wub25fZW52aXJvbm1lbnRfY2hhbmdlKHNlbGYubGFzdF9l
bnZpcm9ubWVudCwgbmV3X2Vudmlyb25tZW50KQorCisgICAgZGVmIGRvX3Rlc3Qoc2VsZiwgdGVz
dCk6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHNlbGYuaW1wbGVtZW50YXRpb24sIEludGVy
bmFsUmVmVGVzdEltcGxlbWVudGF0aW9uKToKKyAgICAgICAgICAgIGlmIHNlbGYuY2xvc2VfYWZ0
ZXJfZG9uZSBhbmQgc2VsZi5oYXNfd2luZG93OgorICAgICAgICAgICAgICAgIHNlbGYucHJvdG9j
b2wubWFyaW9uZXR0ZS5jbG9zZSgpCisgICAgICAgICAgICAgICAgc2VsZi5wcm90b2NvbC5tYXJp
b25ldHRlLnN3aXRjaF90b193aW5kb3coCisgICAgICAgICAgICAgICAgICAgIHNlbGYucHJvdG9j
b2wubWFyaW9uZXR0ZS53aW5kb3dfaGFuZGxlc1stMV0pCisgICAgICAgICAgICAgICAgc2VsZi5o
YXNfd2luZG93ID0gRmFsc2UKKworICAgICAgICAgICAgaWYgbm90IHNlbGYuaGFzX3dpbmRvdzoK
KyAgICAgICAgICAgICAgICBzZWxmLnByb3RvY29sLm1hcmlvbmV0dGUuZXhlY3V0ZV9zY3JpcHQo
c2VsZi5zY3JpcHQpCisgICAgICAgICAgICAgICAgc2VsZi5wcm90b2NvbC5tYXJpb25ldHRlLnN3
aXRjaF90b193aW5kb3coc2VsZi5wcm90b2NvbC5tYXJpb25ldHRlLndpbmRvd19oYW5kbGVzWy0x
XSkKKyAgICAgICAgICAgICAgICBzZWxmLmhhc193aW5kb3cgPSBUcnVlCisKKyAgICAgICAgcmVz
dWx0ID0gc2VsZi5pbXBsZW1lbnRhdGlvbi5ydW5fdGVzdCh0ZXN0KQorICAgICAgICByZXR1cm4g
c2VsZi5jb252ZXJ0X3Jlc3VsdCh0ZXN0LCByZXN1bHQpCisKKyAgICBkZWYgc2NyZWVuc2hvdChz
ZWxmLCB0ZXN0LCB2aWV3cG9ydF9zaXplLCBkcGkpOgorICAgICAgICAjIGh0dHBzOi8vZ2l0aHVi
LmNvbS93M2Mvd3B0cnVubmVyL2lzc3Vlcy8xNjYKKyAgICAgICAgYXNzZXJ0IHZpZXdwb3J0X3Np
emUgaXMgTm9uZQorICAgICAgICBhc3NlcnQgZHBpIGlzIE5vbmUKKworICAgICAgICB0aW1lb3V0
ID0gIHNlbGYudGltZW91dF9tdWx0aXBsaWVyICogdGVzdC50aW1lb3V0IGlmIHNlbGYuZGVidWdf
aW5mbyBpcyBOb25lIGVsc2UgTm9uZQorCisgICAgICAgIHRlc3RfdXJsID0gc2VsZi50ZXN0X3Vy
bCh0ZXN0KQorCisgICAgICAgIHJldHVybiBFeGVjdXRlQXN5bmNTY3JpcHRSdW4oc2VsZi5sb2dn
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2NyZWVuc2hv
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnByb3RvY29sLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfdXJsLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQpLnJ1bigpCisKKyAgICBkZWYgX3Nj
cmVlbnNob3Qoc2VsZiwgbWFyaW9uZXR0ZSwgdXJsLCB0aW1lb3V0KToKKyAgICAgICAgbWFyaW9u
ZXR0ZS5uYXZpZ2F0ZSh1cmwpCisKKyAgICAgICAgbWFyaW9uZXR0ZS5leGVjdXRlX2FzeW5jX3Nj
cmlwdChzZWxmLndhaXRfc2NyaXB0KQorCisgICAgICAgIHNjcmVlbnNob3QgPSBtYXJpb25ldHRl
LnNjcmVlbnNob3QoZnVsbD1GYWxzZSkKKyAgICAgICAgIyBzdHJpcCBvZmYgdGhlIGRhdGE6aW1n
L3BuZywgcGFydCBvZiB0aGUgdXJsCisgICAgICAgIGlmIHNjcmVlbnNob3Quc3RhcnRzd2l0aCgi
ZGF0YTppbWFnZS9wbmc7YmFzZTY0LCIpOgorICAgICAgICAgICAgc2NyZWVuc2hvdCA9IHNjcmVl
bnNob3Quc3BsaXQoIiwiLCAxKVsxXQorCisgICAgICAgIHJldHVybiBzY3JlZW5zaG90CisKKwor
Y2xhc3MgSW50ZXJuYWxSZWZUZXN0SW1wbGVtZW50YXRpb24ob2JqZWN0KToKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgZXhlY3V0b3IpOgorICAgICAgICBzZWxmLnRpbWVvdXRfbXVsdGlwbGllciA9
IGV4ZWN1dG9yLnRpbWVvdXRfbXVsdGlwbGllcgorICAgICAgICBzZWxmLmV4ZWN1dG9yID0gZXhl
Y3V0b3IKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBsb2dnZXIoc2VsZik6CisgICAgICAgIHJl
dHVybiBzZWxmLmV4ZWN1dG9yLmxvZ2dlcgorCisgICAgZGVmIHNldHVwKHNlbGYsIHNjcmVlbnNo
b3Q9InVuZXhwZWN0ZWQiKToKKyAgICAgICAgZGF0YSA9IHsic2NyZWVuc2hvdCI6IHNjcmVlbnNo
b3R9CisgICAgICAgIGlmIHNlbGYuZXhlY3V0b3IuZ3JvdXBfbWV0YWRhdGEgaXMgbm90IE5vbmU6
CisgICAgICAgICAgICBkYXRhWyJ1cmxDb3VudCJdID0ge3VybHBhcnNlLnVybGpvaW4oc2VsZi5l
eGVjdXRvci5zZXJ2ZXJfdXJsKGtleVswXSksIGtleVsxXSk6dmFsdWUKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gc2VsZi5leGVjdXRvci5ncm91cF9t
ZXRhZGF0YS5nZXQoInVybF9jb3VudCIsIHt9KS5pdGVyaXRlbXMoKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiB2YWx1ZSA+IDF9CisgICAgICAgIHNlbGYuZXhlY3V0b3IucHJv
dG9jb2wubWFyaW9uZXR0ZS5zZXRfY29udGV4dChzZWxmLmV4ZWN1dG9yLnByb3RvY29sLm1hcmlv
bmV0dGUuQ09OVEVYVF9DSFJPTUUpCisgICAgICAgIHNlbGYuZXhlY3V0b3IucHJvdG9jb2wubWFy
aW9uZXR0ZS5fc2VuZF9tZXNzYWdlKCJyZWZ0ZXN0OnNldHVwIiwgZGF0YSkKKworICAgIGRlZiBy
dW5fdGVzdChzZWxmLCB0ZXN0KToKKyAgICAgICAgdmlld3BvcnRfc2l6ZSA9IHRlc3Qudmlld3Bv
cnRfc2l6ZQorICAgICAgICBkcGkgPSB0ZXN0LmRwaQorCisgICAgICAgIHJlZmVyZW5jZXMgPSBz
ZWxmLmdldF9yZWZlcmVuY2VzKHRlc3QpCisgICAgICAgIHJ2ID0gc2VsZi5leGVjdXRvci5wcm90
b2NvbC5tYXJpb25ldHRlLl9zZW5kX21lc3NhZ2UoInJlZnRlc3Q6cnVuIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7InRlc3Qi
OiBzZWxmLmV4ZWN1dG9yLnRlc3RfdXJsKHRlc3QpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVmZXJlbmNlcyI6IHJlZmVy
ZW5jZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJleHBlY3RlZCI6IHRlc3QuZXhwZWN0ZWQoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRpbWVvdXQi
OiB0ZXN0LnRpbWVvdXQgKiAxMDAwfSlbInZhbHVlIl0KKyAgICAgICAgcmV0dXJuIHJ2CisKKyAg
ICBkZWYgZ2V0X3JlZmVyZW5jZXMoc2VsZiwgbm9kZSk6CisgICAgICAgIHJ2ID0gW10KKyAgICAg
ICAgZm9yIGl0ZW0sIHJlbGF0aW9uIGluIG5vZGUucmVmZXJlbmNlczoKKyAgICAgICAgICAgIHJ2
LmFwcGVuZChbc2VsZi5leGVjdXRvci50ZXN0X3VybChpdGVtKSwgc2VsZi5nZXRfcmVmZXJlbmNl
cyhpdGVtKSwgcmVsYXRpb25dKQorICAgICAgICByZXR1cm4gcnYKKworICAgIGRlZiB0ZWFyZG93
bihzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5leGVjdXRvci5wcm90b2Nv
bC5tYXJpb25ldHRlLl9zZW5kX21lc3NhZ2UoInJlZnRlc3Q6dGVhcmRvd24iLCB7fSkKKyAgICAg
ICAgICAgIHNlbGYuZXhlY3V0b3IucHJvdG9jb2wubWFyaW9uZXR0ZS5zZXRfY29udGV4dChzZWxm
LmV4ZWN1dG9yLnByb3RvY29sLm1hcmlvbmV0dGUuQ09OVEVYVF9DT05URU5UKQorICAgICAgICBl
eGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAjIElnbm9yZSBlcnJvcnMgZHVyaW5n
IHRlYXJkb3duCisgICAgICAgICAgICBzZWxmLmxvZ2dlci53YXJuaW5nKHRyYWNlYmFjay50cmFj
ZWJhY2suZm9ybWF0X2V4YyhlKSkKKworCisKK2NsYXNzIEdlY2tvRHJpdmVyUHJvdG9jb2woV2Vi
RHJpdmVyUHJvdG9jb2wpOgorICAgIHNlcnZlcl9jbHMgPSBHZWNrb0RyaXZlclNlcnZlcgorCisK
K2NsYXNzIE1hcmlvbmV0dGVXZHNwZWNFeGVjdXRvcihXZHNwZWNFeGVjdXRvcik6CisgICAgcHJv
dG9jb2xfY2xzID0gR2Vja29Ecml2ZXJQcm90b2NvbApkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVz
dHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvZXhlY3V0b3JzL2V4ZWN1
dG9yc2VsZW5pdW0ucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVu
bmVyL3dwdHJ1bm5lci9leGVjdXRvcnMvZXhlY3V0b3JzZWxlbml1bS5weQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNzI4ZDNjNjgyMjIKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9l
eGVjdXRvcnMvZXhlY3V0b3JzZWxlbml1bS5weQpAQCAtMCwwICsxLDI1OSBAQAoraW1wb3J0IG9z
CitpbXBvcnQgc29ja2V0CitpbXBvcnQgc3lzCitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgdGlt
ZQoraW1wb3J0IHRyYWNlYmFjaworaW1wb3J0IHVybHBhcnNlCitpbXBvcnQgdXVpZAorCitmcm9t
IC5iYXNlIGltcG9ydCAoUHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgUmVmVGVzdEV4ZWN1
dG9yLAorICAgICAgICAgICAgICAgICAgIFJlZlRlc3RJbXBsZW1lbnRhdGlvbiwKKyAgICAgICAg
ICAgICAgICAgICBUZXN0aGFybmVzc0V4ZWN1dG9yLAorICAgICAgICAgICAgICAgICAgIGV4dHJh
X3RpbWVvdXQsCisgICAgICAgICAgICAgICAgICAgc3RyaXBfc2VydmVyKQorZnJvbSAuLnRlc3Ry
dW5uZXIgaW1wb3J0IFN0b3AKKworaGVyZSA9IG9zLnBhdGguam9pbihvcy5wYXRoLnNwbGl0KF9f
ZmlsZV9fKVswXSkKKword2ViZHJpdmVyID0gTm9uZQorZXhjZXB0aW9ucyA9IE5vbmUKK1JlbW90
ZUNvbm5lY3Rpb24gPSBOb25lCisKKworZGVmIGRvX2RlbGF5ZWRfaW1wb3J0cygpOgorICAgIGds
b2JhbCB3ZWJkcml2ZXIKKyAgICBnbG9iYWwgZXhjZXB0aW9ucworICAgIGdsb2JhbCBSZW1vdGVD
b25uZWN0aW9uCisgICAgZnJvbSBzZWxlbml1bSBpbXBvcnQgd2ViZHJpdmVyCisgICAgZnJvbSBz
ZWxlbml1bS5jb21tb24gaW1wb3J0IGV4Y2VwdGlvbnMKKyAgICBmcm9tIHNlbGVuaXVtLndlYmRy
aXZlci5yZW1vdGUucmVtb3RlX2Nvbm5lY3Rpb24gaW1wb3J0IFJlbW90ZUNvbm5lY3Rpb24KKwor
CitjbGFzcyBTZWxlbml1bVByb3RvY29sKFByb3RvY29sKToKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgZXhlY3V0b3IsIGJyb3dzZXIsIGNhcGFiaWxpdGllcywgKiprd2FyZ3MpOgorICAgICAgICBk
b19kZWxheWVkX2ltcG9ydHMoKQorCisgICAgICAgIFByb3RvY29sLl9faW5pdF9fKHNlbGYsIGV4
ZWN1dG9yLCBicm93c2VyKQorICAgICAgICBzZWxmLmNhcGFiaWxpdGllcyA9IGNhcGFiaWxpdGll
cworICAgICAgICBzZWxmLnVybCA9IGJyb3dzZXIud2ViZHJpdmVyX3VybAorICAgICAgICBzZWxm
LndlYmRyaXZlciA9IE5vbmUKKworICAgIGRlZiBzZXR1cChzZWxmLCBydW5uZXIpOgorICAgICAg
ICAiIiJDb25uZWN0IHRvIGJyb3dzZXIgdmlhIFNlbGVuaXVtJ3MgV2ViRHJpdmVyIGltcGxlbWVu
dGF0aW9uLiIiIgorICAgICAgICBzZWxmLnJ1bm5lciA9IHJ1bm5lcgorICAgICAgICBzZWxmLmxv
Z2dlci5kZWJ1ZygiQ29ubmVjdGluZyB0byBTZWxlbml1bSBvbiBVUkw6ICVzIiAlIHNlbGYudXJs
KQorCisgICAgICAgIHNlc3Npb25fc3RhcnRlZCA9IEZhbHNlCisgICAgICAgIHRyeToKKyAgICAg
ICAgICAgIHNlbGYud2ViZHJpdmVyID0gd2ViZHJpdmVyLlJlbW90ZShjb21tYW5kX2V4ZWN1dG9y
PVJlbW90ZUNvbm5lY3Rpb24oc2VsZi51cmwuc3RyaXAoIi8iKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzb2x2ZV9pcD1GYWxzZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGVzaXJlZF9jYXBhYmlsaXRpZXM9c2VsZi5jYXBhYmlsaXRpZXMpCisg
ICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYubG9nZ2VyLndhcm5pbmcoCisgICAgICAg
ICAgICAgICAgIkNvbm5lY3RpbmcgdG8gU2VsZW5pdW0gZmFpbGVkOlxuJXMiICUgdHJhY2ViYWNr
LmZvcm1hdF9leGMoKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYubG9nZ2VyLmRl
YnVnKCJTZWxlbml1bSBzZXNzaW9uIHN0YXJ0ZWQiKQorICAgICAgICAgICAgc2Vzc2lvbl9zdGFy
dGVkID0gVHJ1ZQorCisgICAgICAgIGlmIG5vdCBzZXNzaW9uX3N0YXJ0ZWQ6CisgICAgICAgICAg
ICBzZWxmLmxvZ2dlci53YXJuaW5nKCJGYWlsZWQgdG8gY29ubmVjdCB0byBTZWxlbml1bSIpCisg
ICAgICAgICAgICBzZWxmLmV4ZWN1dG9yLnJ1bm5lci5zZW5kX21lc3NhZ2UoImluaXRfZmFpbGVk
IikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxm
LmFmdGVyX2Nvbm5lY3QoKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHBy
aW50ID4+IHN5cy5zdGRlcnIsIHRyYWNlYmFjay5mb3JtYXRfZXhjKCkKKyAgICAgICAgICAgICAg
ICBzZWxmLmxvZ2dlci53YXJuaW5nKAorICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIGNv
bm5lY3QgdG8gbmF2aWdhdGUgaW5pdGlhbCBwYWdlIikKKyAgICAgICAgICAgICAgICBzZWxmLmV4
ZWN1dG9yLnJ1bm5lci5zZW5kX21lc3NhZ2UoImluaXRfZmFpbGVkIikKKyAgICAgICAgICAgIGVs
c2U6CisgICAgICAgICAgICAgICAgc2VsZi5leGVjdXRvci5ydW5uZXIuc2VuZF9tZXNzYWdlKCJp
bml0X3N1Y2NlZWRlZCIpCisKKyAgICBkZWYgdGVhcmRvd24oc2VsZik6CisgICAgICAgIHNlbGYu
bG9nZ2VyLmRlYnVnKCJIYW5naW5nIHVwIG9uIFNlbGVuaXVtIHNlc3Npb24iKQorICAgICAgICB0
cnk6CisgICAgICAgICAgICBzZWxmLndlYmRyaXZlci5xdWl0KCkKKyAgICAgICAgZXhjZXB0Ogor
ICAgICAgICAgICAgcGFzcworICAgICAgICBkZWwgc2VsZi53ZWJkcml2ZXIKKworICAgIGRlZiBp
c19hbGl2ZShzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBHZXQgYSBzaW1wbGUg
cHJvcGVydHkgb3ZlciB0aGUgY29ubmVjdGlvbgorICAgICAgICAgICAgc2VsZi53ZWJkcml2ZXIu
Y3VycmVudF93aW5kb3dfaGFuZGxlCisgICAgICAgICMgVE9ETyB3aGF0IGV4Y2VwdGlvbj8KKyAg
ICAgICAgZXhjZXB0IChzb2NrZXQudGltZW91dCwgZXhjZXB0aW9ucy5FcnJvckluUmVzcG9uc2VF
eGNlcHRpb24pOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVl
CisKKyAgICBkZWYgYWZ0ZXJfY29ubmVjdChzZWxmKToKKyAgICAgICAgc2VsZi5sb2FkX3J1bm5l
cigiaHR0cCIpCisKKyAgICBkZWYgbG9hZF9ydW5uZXIoc2VsZiwgcHJvdG9jb2wpOgorICAgICAg
ICB1cmwgPSB1cmxwYXJzZS51cmxqb2luKHNlbGYuZXhlY3V0b3Iuc2VydmVyX3VybChwcm90b2Nv
bCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi90ZXN0aGFybmVzc19ydW5uZXIu
aHRtbCIpCisgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJMb2FkaW5nICVzIiAlIHVybCkKKyAg
ICAgICAgc2VsZi53ZWJkcml2ZXIuZ2V0KHVybCkKKyAgICAgICAgc2VsZi53ZWJkcml2ZXIuZXhl
Y3V0ZV9zY3JpcHQoImRvY3VtZW50LnRpdGxlID0gJyVzJyIgJQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKS5uYW1lLnJlcGxh
Y2UoIiciLCAnIicpKQorCisgICAgZGVmIHdhaXQoc2VsZik6CisgICAgICAgIHdoaWxlIFRydWU6
CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi53ZWJkcml2ZXIuZXhlY3V0
ZV9hc3luY19zY3JpcHQoIiIpOworICAgICAgICAgICAgZXhjZXB0IGV4Y2VwdGlvbnMuVGltZW91
dEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBleGNlcHQgKHNv
Y2tldC50aW1lb3V0LCBleGNlcHRpb25zLk5vU3VjaFdpbmRvd0V4Y2VwdGlvbiwKKyAgICAgICAg
ICAgICAgICAgICAgZXhjZXB0aW9ucy5FcnJvckluUmVzcG9uc2VFeGNlcHRpb24sIElPRXJyb3Ip
OgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFz
IGU6CisgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIuZXJyb3IodHJhY2ViYWNrLmZvcm1hdF9l
eGMoZSkpCisgICAgICAgICAgICAgICAgYnJlYWsKKworCitjbGFzcyBTZWxlbml1bVJ1bihvYmpl
Y3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmdW5jLCB3ZWJkcml2ZXIsIHVybCwgdGltZW91
dCk6CisgICAgICAgIHNlbGYuZnVuYyA9IGZ1bmMKKyAgICAgICAgc2VsZi5yZXN1bHQgPSBOb25l
CisgICAgICAgIHNlbGYud2ViZHJpdmVyID0gd2ViZHJpdmVyCisgICAgICAgIHNlbGYudXJsID0g
dXJsCisgICAgICAgIHNlbGYudGltZW91dCA9IHRpbWVvdXQKKyAgICAgICAgc2VsZi5yZXN1bHRf
ZmxhZyA9IHRocmVhZGluZy5FdmVudCgpCisKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICB0
aW1lb3V0ID0gc2VsZi50aW1lb3V0CisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi53
ZWJkcml2ZXIuc2V0X3NjcmlwdF90aW1lb3V0KCh0aW1lb3V0ICsgZXh0cmFfdGltZW91dCkgKiAx
MDAwKQorICAgICAgICBleGNlcHQgZXhjZXB0aW9ucy5FcnJvckluUmVzcG9uc2VFeGNlcHRpb246
CisgICAgICAgICAgICBzZWxmLmxvZ2dlci5lcnJvcigiTG9zdCBXZWJEcml2ZXIgY29ubmVjdGlv
biIpCisgICAgICAgICAgICByZXR1cm4gU3RvcAorCisgICAgICAgIGV4ZWN1dG9yID0gdGhyZWFk
aW5nLlRocmVhZCh0YXJnZXQ9c2VsZi5fcnVuKQorICAgICAgICBleGVjdXRvci5zdGFydCgpCisK
KyAgICAgICAgZmxhZyA9IHNlbGYucmVzdWx0X2ZsYWcud2FpdCh0aW1lb3V0ICsgMiAqIGV4dHJh
X3RpbWVvdXQpCisgICAgICAgIGlmIHNlbGYucmVzdWx0IGlzIE5vbmU6CisgICAgICAgICAgICBh
c3NlcnQgbm90IGZsYWcKKyAgICAgICAgICAgIHNlbGYucmVzdWx0ID0gRmFsc2UsICgiRVhURVJO
QUwtVElNRU9VVCIsIE5vbmUpCisKKyAgICAgICAgcmV0dXJuIHNlbGYucmVzdWx0CisKKyAgICBk
ZWYgX3J1bihzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSBU
cnVlLCBzZWxmLmZ1bmMoc2VsZi53ZWJkcml2ZXIsIHNlbGYudXJsLCBzZWxmLnRpbWVvdXQpCisg
ICAgICAgIGV4Y2VwdCBleGNlcHRpb25zLlRpbWVvdXRFeGNlcHRpb246CisgICAgICAgICAgICBz
ZWxmLnJlc3VsdCA9IEZhbHNlLCAoIkVYVEVSTkFMLVRJTUVPVVQiLCBOb25lKQorICAgICAgICBl
eGNlcHQgKHNvY2tldC50aW1lb3V0LCBleGNlcHRpb25zLkVycm9ySW5SZXNwb25zZUV4Y2VwdGlv
bik6CisgICAgICAgICAgICBzZWxmLnJlc3VsdCA9IEZhbHNlLCAoIkNSQVNIIiwgTm9uZSkKKyAg
ICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgbWVzc2FnZSA9IGdldGF0
dHIoZSwgIm1lc3NhZ2UiLCAiIikKKyAgICAgICAgICAgIGlmIG1lc3NhZ2U6CisgICAgICAgICAg
ICAgICAgbWVzc2FnZSArPSAiXG4iCisgICAgICAgICAgICBtZXNzYWdlICs9IHRyYWNlYmFjay5m
b3JtYXRfZXhjKGUpCisgICAgICAgICAgICBzZWxmLnJlc3VsdCA9IEZhbHNlLCAoIkVSUk9SIiwg
ZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYucmVzdWx0X2ZsYWcuc2V0KCkK
KworCitjbGFzcyBTZWxlbml1bVRlc3RoYXJuZXNzRXhlY3V0b3IoVGVzdGhhcm5lc3NFeGVjdXRv
cik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb3dzZXIsIHNlcnZlcl9jb25maWcsIHRpbWVv
dXRfbXVsdGlwbGllcj0xLAorICAgICAgICAgICAgICAgICBjbG9zZV9hZnRlcl9kb25lPVRydWUs
IGNhcGFiaWxpdGllcz1Ob25lLCBkZWJ1Z19pbmZvPU5vbmUsCisgICAgICAgICAgICAgICAgICoq
a3dhcmdzKToKKyAgICAgICAgIiIiU2VsZW5pdW0tYmFzZWQgZXhlY3V0b3IgZm9yIHRlc3RoYXJu
ZXNzLmpzIHRlc3RzIiIiCisgICAgICAgIFRlc3RoYXJuZXNzRXhlY3V0b3IuX19pbml0X18oc2Vs
ZiwgYnJvd3Nlciwgc2VydmVyX2NvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0aW1lb3V0X211bHRpcGxpZXI9dGltZW91dF9tdWx0aXBsaWVyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX2luZm89ZGVidWdfaW5mbykKKyAgICAg
ICAgc2VsZi5wcm90b2NvbCA9IFNlbGVuaXVtUHJvdG9jb2woc2VsZiwgYnJvd3NlciwgY2FwYWJp
bGl0aWVzKQorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKGhlcmUsICJ0ZXN0aGFybmVz
c193ZWJkcml2ZXIuanMiKSkgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuc2NyaXB0ID0gZi5yZWFk
KCkKKyAgICAgICAgc2VsZi5jbG9zZV9hZnRlcl9kb25lID0gY2xvc2VfYWZ0ZXJfZG9uZQorICAg
ICAgICBzZWxmLndpbmRvd19pZCA9IHN0cih1dWlkLnV1aWQ0KCkpCisKKyAgICBkZWYgaXNfYWxp
dmUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnByb3RvY29sLmlzX2FsaXZlKCkKKworICAg
IGRlZiBvbl9lbnZpcm9ubWVudF9jaGFuZ2Uoc2VsZiwgbmV3X2Vudmlyb25tZW50KToKKyAgICAg
ICAgaWYgbmV3X2Vudmlyb25tZW50WyJwcm90b2NvbCJdICE9IHNlbGYubGFzdF9lbnZpcm9ubWVu
dFsicHJvdG9jb2wiXToKKyAgICAgICAgICAgIHNlbGYucHJvdG9jb2wubG9hZF9ydW5uZXIobmV3
X2Vudmlyb25tZW50WyJwcm90b2NvbCJdKQorCisgICAgZGVmIGRvX3Rlc3Qoc2VsZiwgdGVzdCk6
CisgICAgICAgIHVybCA9IHNlbGYudGVzdF91cmwodGVzdCkKKworICAgICAgICBzdWNjZXNzLCBk
YXRhID0gU2VsZW5pdW1SdW4oc2VsZi5kb190ZXN0aGFybmVzcywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNlbGYucHJvdG9jb2wud2ViZHJpdmVyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGVzdC50aW1lb3V0ICogc2VsZi50aW1lb3V0X211bHRpcGxpZXIpLnJ1bigpCisK
KyAgICAgICAgaWYgc3VjY2VzczoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmNvbnZlcnRfcmVz
dWx0KHRlc3QsIGRhdGEpCisKKyAgICAgICAgcmV0dXJuICh0ZXN0LnJlc3VsdF9jbHMoKmRhdGEp
LCBbXSkKKworICAgIGRlZiBkb190ZXN0aGFybmVzcyhzZWxmLCB3ZWJkcml2ZXIsIHVybCwgdGlt
ZW91dCk6CisgICAgICAgIHJldHVybiB3ZWJkcml2ZXIuZXhlY3V0ZV9hc3luY19zY3JpcHQoCisg
ICAgICAgICAgICBzZWxmLnNjcmlwdCAlIHsiYWJzX3VybCI6IHVybCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJ1cmwiOiBzdHJpcF9zZXJ2ZXIodXJsKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJ3aW5kb3dfaWQiOiBzZWxmLndpbmRvd19pZCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJ0aW1lb3V0X211bHRpcGxpZXIiOiBzZWxmLnRpbWVvdXRfbXVsdGlwbGllciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aW1lb3V0IjogdGltZW91dCAqIDEwMDB9KQor
CisKK2NsYXNzIFNlbGVuaXVtUmVmVGVzdEV4ZWN1dG9yKFJlZlRlc3RFeGVjdXRvcik6CisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIGJyb3dzZXIsIHNlcnZlcl9jb25maWcsIHRpbWVvdXRfbXVsdGlw
bGllcj0xLAorICAgICAgICAgICAgICAgICBzY3JlZW5zaG90X2NhY2hlPU5vbmUsIGNsb3NlX2Fm
dGVyX2RvbmU9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgZGVidWdfaW5mbz1Ob25lLCBjYXBhYmls
aXRpZXM9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICAiIiJTZWxlbml1bSBXZWJEcml2ZXItYmFz
ZWQgZXhlY3V0b3IgZm9yIHJlZnRlc3RzIiIiCisgICAgICAgIFJlZlRlc3RFeGVjdXRvci5fX2lu
aXRfXyhzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJvd3NlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9jb25maWcsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzY3JlZW5zaG90X2NhY2hlPXNjcmVlbnNob3RfY2FjaGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0X211bHRpcGxpZXI9dGlt
ZW91dF9tdWx0aXBsaWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdf
aW5mbz1kZWJ1Z19pbmZvKQorICAgICAgICBzZWxmLnByb3RvY29sID0gU2VsZW5pdW1Qcm90b2Nv
bChzZWxmLCBicm93c2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjYXBhYmlsaXRpZXM9Y2FwYWJpbGl0aWVzKQorICAgICAgICBzZWxmLmltcGxlbWVudGF0aW9u
ID0gUmVmVGVzdEltcGxlbWVudGF0aW9uKHNlbGYpCisgICAgICAgIHNlbGYuY2xvc2VfYWZ0ZXJf
ZG9uZSA9IGNsb3NlX2FmdGVyX2RvbmUKKyAgICAgICAgc2VsZi5oYXNfd2luZG93ID0gRmFsc2UK
KworICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKGhlcmUsICJyZWZ0ZXN0LmpzIikpIGFz
IGY6CisgICAgICAgICAgICBzZWxmLnNjcmlwdCA9IGYucmVhZCgpCisgICAgICAgIHdpdGggb3Bl
bihvcy5wYXRoLmpvaW4oaGVyZSwgInJlZnRlc3Qtd2FpdF93ZWJkcml2ZXIuanMiKSkgYXMgZjoK
KyAgICAgICAgICAgIHNlbGYud2FpdF9zY3JpcHQgPSBmLnJlYWQoKQorCisgICAgZGVmIGlzX2Fs
aXZlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5wcm90b2NvbC5pc19hbGl2ZSgpCisKKyAg
ICBkZWYgZG9fdGVzdChzZWxmLCB0ZXN0KToKKyAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygiVGVz
dCByZXF1aXJlcyBPUy1sZXZlbCB3aW5kb3cgZm9jdXMiKQorCisgICAgICAgIHNlbGYucHJvdG9j
b2wud2ViZHJpdmVyLnNldF93aW5kb3dfc2l6ZSg2MDAsIDYwMCkKKworICAgICAgICByZXN1bHQg
PSBzZWxmLmltcGxlbWVudGF0aW9uLnJ1bl90ZXN0KHRlc3QpCisKKyAgICAgICAgcmV0dXJuIHNl
bGYuY29udmVydF9yZXN1bHQodGVzdCwgcmVzdWx0KQorCisgICAgZGVmIHNjcmVlbnNob3Qoc2Vs
ZiwgdGVzdCwgdmlld3BvcnRfc2l6ZSwgZHBpKToKKyAgICAgICAgIyBodHRwczovL2dpdGh1Yi5j
b20vdzNjL3dwdHJ1bm5lci9pc3N1ZXMvMTY2CisgICAgICAgIGFzc2VydCB2aWV3cG9ydF9zaXpl
IGlzIE5vbmUKKyAgICAgICAgYXNzZXJ0IGRwaSBpcyBOb25lCisKKyAgICAgICAgcmV0dXJuIFNl
bGVuaXVtUnVuKHNlbGYuX3NjcmVlbnNob3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLnByb3RvY29sLndlYmRyaXZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYu
dGVzdF91cmwodGVzdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0LnRpbWVvdXQp
LnJ1bigpCisKKyAgICBkZWYgX3NjcmVlbnNob3Qoc2VsZiwgd2ViZHJpdmVyLCB1cmwsIHRpbWVv
dXQpOgorICAgICAgICB3ZWJkcml2ZXIuZ2V0KHVybCkKKworICAgICAgICB3ZWJkcml2ZXIuZXhl
Y3V0ZV9hc3luY19zY3JpcHQoc2VsZi53YWl0X3NjcmlwdCkKKworICAgICAgICBzY3JlZW5zaG90
ID0gd2ViZHJpdmVyLmdldF9zY3JlZW5zaG90X2FzX2Jhc2U2NCgpCisKKyAgICAgICAgIyBzdHJp
cCBvZmYgdGhlIGRhdGE6aW1nL3BuZywgcGFydCBvZiB0aGUgdXJsCisgICAgICAgIGlmIHNjcmVl
bnNob3Quc3RhcnRzd2l0aCgiZGF0YTppbWFnZS9wbmc7YmFzZTY0LCIpOgorICAgICAgICAgICAg
c2NyZWVuc2hvdCA9IHNjcmVlbnNob3Quc3BsaXQoIiwiLCAxKVsxXQorCisgICAgICAgIHJldHVy
biBzY3JlZW5zaG90CmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9v
bHMvd3B0cnVubmVyL3dwdHJ1bm5lci9leGVjdXRvcnMvZXhlY3V0b3JzZXJ2by5weSBiL1dlYkRy
aXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2V4ZWN1dG9y
cy9leGVjdXRvcnNlcnZvLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li4yMTZkNjg3ZmNkYQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVk
L3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2V4ZWN1dG9ycy9leGVjdXRvcnNlcnZvLnB5
CkBAIC0wLDAgKzEsMzY4IEBACitpbXBvcnQgYmFzZTY0CitpbXBvcnQgaGFzaGxpYgoraW1wb3J0
IGh0dHBsaWIKK2ltcG9ydCBqc29uCitpbXBvcnQgb3MKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBv
cnQgdGVtcGZpbGUKK2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCB0cmFjZWJhY2sKK2ltcG9ydCB1
cmxwYXJzZQoraW1wb3J0IHV1aWQKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlZmF1bHRkaWN0
CisKK2Zyb20gbW96cHJvY2VzcyBpbXBvcnQgUHJvY2Vzc0hhbmRsZXIKKworZnJvbSAuYmFzZSBp
bXBvcnQgKEV4ZWN1dG9yRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICAgIFByb3RvY29sLAor
ICAgICAgICAgICAgICAgICAgIFJlZlRlc3RJbXBsZW1lbnRhdGlvbiwKKyAgICAgICAgICAgICAg
ICAgICB0ZXN0aGFybmVzc19yZXN1bHRfY29udmVydGVyLAorICAgICAgICAgICAgICAgICAgIHJl
ZnRlc3RfcmVzdWx0X2NvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICBXZHNwZWNFeGVjdXRv
cikKK2Zyb20gLnByb2Nlc3MgaW1wb3J0IFByb2Nlc3NUZXN0RXhlY3V0b3IKK2Zyb20gLi5icm93
c2Vycy5iYXNlIGltcG9ydCBicm93c2VyX2NvbW1hbmQKK2Zyb20gLi53cHR0ZXN0IGltcG9ydCBX
ZHNwZWNSZXN1bHQsIFdkc3BlY1N1YnRlc3RSZXN1bHQKK2Zyb20gLi53ZWJkcml2ZXJfc2VydmVy
IGltcG9ydCBTZXJ2b0RyaXZlclNlcnZlcgorZnJvbSAuZXhlY3V0b3JtYXJpb25ldHRlIGltcG9y
dCBXZHNwZWNSdW4KKworcHl0ZXN0cnVubmVyID0gTm9uZQord2ViZHJpdmVyID0gTm9uZQorCitl
eHRyYV90aW1lb3V0ID0gNSAjIHNlY29uZHMKKworaG9zdHNfdGV4dCA9ICIiIjEyNy4wLjAuMSB3
ZWItcGxhdGZvcm0udGVzdAorMTI3LjAuMC4xIHd3dy53ZWItcGxhdGZvcm0udGVzdAorMTI3LjAu
MC4xIHd3dzEud2ViLXBsYXRmb3JtLnRlc3QKKzEyNy4wLjAuMSB3d3cyLndlYi1wbGF0Zm9ybS50
ZXN0CisxMjcuMC4wLjEgeG4tLW44ajZkczUzbHd3a3JxaHYyOGEud2ViLXBsYXRmb3JtLnRlc3QK
KzEyNy4wLjAuMSB4bi0tbHZlLTZsYWQud2ViLXBsYXRmb3JtLnRlc3QKKyIiIgorCitkZWYgbWFr
ZV9ob3N0c19maWxlKCk6CisgICAgaG9zdHNfZmQsIGhvc3RzX3BhdGggPSB0ZW1wZmlsZS5ta3N0
ZW1wKCkKKyAgICB3aXRoIG9zLmZkb3Blbihob3N0c19mZCwgInciKSBhcyBmOgorICAgICAgICBm
LndyaXRlKGhvc3RzX3RleHQpCisgICAgcmV0dXJuIGhvc3RzX3BhdGgKKworCitjbGFzcyBTZXJ2
b1Rlc3RoYXJuZXNzRXhlY3V0b3IoUHJvY2Vzc1Rlc3RFeGVjdXRvcik6CisgICAgY29udmVydF9y
ZXN1bHQgPSB0ZXN0aGFybmVzc19yZXN1bHRfY29udmVydGVyCisKKyAgICBkZWYgX19pbml0X18o
c2VsZiwgYnJvd3Nlciwgc2VydmVyX2NvbmZpZywgdGltZW91dF9tdWx0aXBsaWVyPTEsIGRlYnVn
X2luZm89Tm9uZSwKKyAgICAgICAgICAgICAgICAgcGF1c2VfYWZ0ZXJfdGVzdD1GYWxzZSwgKipr
d2FyZ3MpOgorICAgICAgICBQcm9jZXNzVGVzdEV4ZWN1dG9yLl9faW5pdF9fKHNlbGYsIGJyb3dz
ZXIsIHNlcnZlcl9jb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGltZW91dF9tdWx0aXBsaWVyPXRpbWVvdXRfbXVsdGlwbGllciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkZWJ1Z19pbmZvPWRlYnVnX2luZm8pCisgICAgICAgIHNlbGYu
cGF1c2VfYWZ0ZXJfdGVzdCA9IHBhdXNlX2FmdGVyX3Rlc3QKKyAgICAgICAgc2VsZi5yZXN1bHRf
ZGF0YSA9IE5vbmUKKyAgICAgICAgc2VsZi5yZXN1bHRfZmxhZyA9IE5vbmUKKyAgICAgICAgc2Vs
Zi5wcm90b2NvbCA9IFByb3RvY29sKHNlbGYsIGJyb3dzZXIpCisgICAgICAgIHNlbGYuaG9zdHNf
cGF0aCA9IG1ha2VfaG9zdHNfZmlsZSgpCisKKyAgICBkZWYgdGVhcmRvd24oc2VsZik6CisgICAg
ICAgIHRyeToKKyAgICAgICAgICAgIG9zLnVubGluayhzZWxmLmhvc3RzX3BhdGgpCisgICAgICAg
IGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBQcm9jZXNzVGVzdEV4
ZWN1dG9yLnRlYXJkb3duKHNlbGYpCisKKyAgICBkZWYgZG9fdGVzdChzZWxmLCB0ZXN0KToKKyAg
ICAgICAgc2VsZi5yZXN1bHRfZGF0YSA9IE5vbmUKKyAgICAgICAgc2VsZi5yZXN1bHRfZmxhZyA9
IHRocmVhZGluZy5FdmVudCgpCisKKyAgICAgICAgYXJncyA9IFsKKyAgICAgICAgICAgICItLWhh
cmQtZmFpbCIsICItdSIsICJTZXJ2by93cHRydW5uZXIiLAorICAgICAgICAgICAgIi1aIiwgInJl
cGxhY2Utc3Vycm9nYXRlcyIsICIteiIsIHNlbGYudGVzdF91cmwodGVzdCksCisgICAgICAgIF0K
KyAgICAgICAgZm9yIHN0eWxlc2hlZXQgaW4gc2VsZi5icm93c2VyLnVzZXJfc3R5bGVzaGVldHM6
CisgICAgICAgICAgICBhcmdzICs9IFsiLS11c2VyLXN0eWxlc2hlZXQiLCBzdHlsZXNoZWV0XQor
ICAgICAgICBmb3IgcHJlZiwgdmFsdWUgaW4gdGVzdC5lbnZpcm9ubWVudC5nZXQoJ3ByZWZzJywg
e30pLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgYXJncyArPSBbIi0tcHJlZiIsICIlcz0lcyIg
JSAocHJlZiwgdmFsdWUpXQorICAgICAgICBpZiBzZWxmLmJyb3dzZXIuY2FfY2VydGlmaWNhdGVf
cGF0aDoKKyAgICAgICAgICAgIGFyZ3MgKz0gWyItLWNlcnRpZmljYXRlLXBhdGgiLCBzZWxmLmJy
b3dzZXIuY2FfY2VydGlmaWNhdGVfcGF0aF0KKyAgICAgICAgYXJncyArPSBzZWxmLmJyb3dzZXIu
YmluYXJ5X2FyZ3MKKyAgICAgICAgZGVidWdfYXJncywgY29tbWFuZCA9IGJyb3dzZXJfY29tbWFu
ZChzZWxmLmJpbmFyeSwgYXJncywgc2VsZi5kZWJ1Z19pbmZvKQorCisgICAgICAgIHNlbGYuY29t
bWFuZCA9IGNvbW1hbmQKKworICAgICAgICBpZiBzZWxmLnBhdXNlX2FmdGVyX3Rlc3Q6CisgICAg
ICAgICAgICBzZWxmLmNvbW1hbmQucmVtb3ZlKCIteiIpCisKKyAgICAgICAgc2VsZi5jb21tYW5k
ID0gZGVidWdfYXJncyArIHNlbGYuY29tbWFuZAorCisgICAgICAgIGVudiA9IG9zLmVudmlyb24u
Y29weSgpCisgICAgICAgIGVudlsiSE9TVF9GSUxFIl0gPSBzZWxmLmhvc3RzX3BhdGgKKyAgICAg
ICAgZW52WyJSVVNUX0JBQ0tUUkFDRSJdID0gIjEiCisKKworICAgICAgICBpZiBub3Qgc2VsZi5p
bnRlcmFjdGl2ZToKKyAgICAgICAgICAgIHNlbGYucHJvYyA9IFByb2Nlc3NIYW5kbGVyKHNlbGYu
Y29tbWFuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NP
dXRwdXRMaW5lPVtzZWxmLm9uX291dHB1dF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvbkZpbmlzaD1zZWxmLm9uX2ZpbmlzaCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVudj1lbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdG9yZU91dHB1dD1GYWxzZSkKKyAgICAgICAgICAgIHNlbGYucHJvYy5ydW4o
KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5wcm9jID0gc3VicHJvY2Vzcy5Qb3Bl
bihzZWxmLmNvbW1hbmQsIGVudj1lbnYpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGlt
ZW91dCA9IHRlc3QudGltZW91dCAqIHNlbGYudGltZW91dF9tdWx0aXBsaWVyCisKKyAgICAgICAg
ICAgICMgTm93IHdhaXQgdG8gZ2V0IHRoZSBvdXRwdXQgd2UgZXhwZWN0LCBvciB1bnRpbCB3ZSBy
ZWFjaCB0aGUgdGltZW91dAorICAgICAgICAgICAgaWYgbm90IHNlbGYuaW50ZXJhY3RpdmUgYW5k
IG5vdCBzZWxmLnBhdXNlX2FmdGVyX3Rlc3Q6CisgICAgICAgICAgICAgICAgd2FpdF90aW1lb3V0
ID0gdGltZW91dCArIDUKKyAgICAgICAgICAgICAgICBzZWxmLnJlc3VsdF9mbGFnLndhaXQod2Fp
dF90aW1lb3V0KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB3YWl0X3RpbWVv
dXQgPSBOb25lCisgICAgICAgICAgICAgICAgc2VsZi5wcm9jLndhaXQoKQorCisgICAgICAgICAg
ICBwcm9jX2lzX3J1bm5pbmcgPSBUcnVlCisKKyAgICAgICAgICAgIGlmIHNlbGYucmVzdWx0X2Zs
YWcuaXNfc2V0KCk6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5yZXN1bHRfZGF0YSBpcyBub3Qg
Tm9uZToKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5jb252ZXJ0X3Jlc3VsdCh0
ZXN0LCBzZWxmLnJlc3VsdF9kYXRhKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICAgICAgICAgIHNlbGYucHJvYy53YWl0KCkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0g
KHRlc3QucmVzdWx0X2NscygiQ1JBU0giLCBOb25lKSwgW10pCisgICAgICAgICAgICAgICAgICAg
IHByb2NfaXNfcnVubmluZyA9IEZhbHNlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAg
ICAgIHJlc3VsdCA9ICh0ZXN0LnJlc3VsdF9jbHMoIlRJTUVPVVQiLCBOb25lKSwgW10pCisKKwor
ICAgICAgICAgICAgaWYgcHJvY19pc19ydW5uaW5nOgorICAgICAgICAgICAgICAgIGlmIHNlbGYu
cGF1c2VfYWZ0ZXJfdGVzdDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygi
UGF1c2luZyB1bnRpbCB0aGUgYnJvd3NlciBleGl0cyIpCisgICAgICAgICAgICAgICAgICAgIHNl
bGYucHJvYy53YWl0KCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAg
ICBzZWxmLnByb2Mua2lsbCgpCisgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAg
ICAgICAgICAgIHNlbGYucHJvYy5raWxsKCkKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAg
cmV0dXJuIHJlc3VsdAorCisgICAgZGVmIG9uX291dHB1dChzZWxmLCBsaW5lKToKKyAgICAgICAg
cHJlZml4ID0gIkFMRVJUOiBSRVNVTFQ6ICIKKyAgICAgICAgbGluZSA9IGxpbmUuZGVjb2RlKCJ1
dGY4IiwgInJlcGxhY2UiKQorICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgocHJlZml4KToKKyAg
ICAgICAgICAgIHNlbGYucmVzdWx0X2RhdGEgPSBqc29uLmxvYWRzKGxpbmVbbGVuKHByZWZpeCk6
XSkKKyAgICAgICAgICAgIHNlbGYucmVzdWx0X2ZsYWcuc2V0KCkKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIGlmIHNlbGYuaW50ZXJhY3RpdmU6CisgICAgICAgICAgICAgICAgcHJpbnQgbGlu
ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5wcm9jZXNz
X291dHB1dChzZWxmLnByb2MucGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIiAiLmpvaW4oc2VsZi5jb21tYW5kKSkKKworICAgIGRlZiBvbl9maW5pc2goc2VsZik6Cisg
ICAgICAgIHNlbGYucmVzdWx0X2ZsYWcuc2V0KCkKKworCitjbGFzcyBUZW1wRmlsZW5hbWUob2Jq
ZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZGlyZWN0b3J5KToKKyAgICAgICAgc2VsZi5k
aXJlY3RvcnkgPSBkaXJlY3RvcnkKKyAgICAgICAgc2VsZi5wYXRoID0gTm9uZQorCisgICAgZGVm
IF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgc2VsZi5wYXRoID0gb3MucGF0aC5qb2luKHNlbGYu
ZGlyZWN0b3J5LCBzdHIodXVpZC51dWlkNCgpKSkKKyAgICAgICAgcmV0dXJuIHNlbGYucGF0aAor
CisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHRyeToK
KyAgICAgICAgICAgIG9zLnVubGluayhzZWxmLnBhdGgpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9y
OgorICAgICAgICAgICAgcGFzcworCisKK2NsYXNzIFNlcnZvUmVmVGVzdEV4ZWN1dG9yKFByb2Nl
c3NUZXN0RXhlY3V0b3IpOgorICAgIGNvbnZlcnRfcmVzdWx0ID0gcmVmdGVzdF9yZXN1bHRfY29u
dmVydGVyCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYnJvd3Nlciwgc2VydmVyX2NvbmZpZywg
YmluYXJ5PU5vbmUsIHRpbWVvdXRfbXVsdGlwbGllcj0xLAorICAgICAgICAgICAgICAgICBzY3Jl
ZW5zaG90X2NhY2hlPU5vbmUsIGRlYnVnX2luZm89Tm9uZSwgcGF1c2VfYWZ0ZXJfdGVzdD1GYWxz
ZSwKKyAgICAgICAgICAgICAgICAgKiprd2FyZ3MpOgorICAgICAgICBkb19kZWxheWVkX2ltcG9y
dHMoKQorICAgICAgICBQcm9jZXNzVGVzdEV4ZWN1dG9yLl9faW5pdF9fKHNlbGYsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJvd3NlciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRpbWVvdXRfbXVsdGlwbGllcj10aW1lb3V0X211bHRpcGxpZXIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdfaW5mbz1kZWJ1Z19pbmZv
KQorCisgICAgICAgIHNlbGYucHJvdG9jb2wgPSBQcm90b2NvbChzZWxmLCBicm93c2VyKQorICAg
ICAgICBzZWxmLnNjcmVlbnNob3RfY2FjaGUgPSBzY3JlZW5zaG90X2NhY2hlCisgICAgICAgIHNl
bGYuaW1wbGVtZW50YXRpb24gPSBSZWZUZXN0SW1wbGVtZW50YXRpb24oc2VsZikKKyAgICAgICAg
c2VsZi50ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcCgpCisgICAgICAgIHNlbGYuaG9zdHNfcGF0
aCA9IG1ha2VfaG9zdHNfZmlsZSgpCisKKyAgICBkZWYgdGVhcmRvd24oc2VsZik6CisgICAgICAg
IHRyeToKKyAgICAgICAgICAgIG9zLnVubGluayhzZWxmLmhvc3RzX3BhdGgpCisgICAgICAgIGV4
Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBvcy5ybWRpcihzZWxmLnRl
bXBkaXIpCisgICAgICAgIFByb2Nlc3NUZXN0RXhlY3V0b3IudGVhcmRvd24oc2VsZikKKworICAg
IGRlZiBzY3JlZW5zaG90KHNlbGYsIHRlc3QsIHZpZXdwb3J0X3NpemUsIGRwaSk6CisgICAgICAg
IGZ1bGxfdXJsID0gc2VsZi50ZXN0X3VybCh0ZXN0KQorCisgICAgICAgIHdpdGggVGVtcEZpbGVu
YW1lKHNlbGYudGVtcGRpcikgYXMgb3V0cHV0X3BhdGg6CisgICAgICAgICAgICBkZWJ1Z19hcmdz
LCBjb21tYW5kID0gYnJvd3Nlcl9jb21tYW5kKAorICAgICAgICAgICAgICAgIHNlbGYuYmluYXJ5
LAorICAgICAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAgICAgIi0taGFyZC1mYWlsIiwg
Ii0tZXhpdCIsCisgICAgICAgICAgICAgICAgICAgICItdSIsICJTZXJ2by93cHRydW5uZXIiLAor
ICAgICAgICAgICAgICAgICAgICAiLVoiLCAiZGlzYWJsZS10ZXh0LWFhLGxvYWQtd2ViZm9udHMt
c3luY2hyb25vdXNseSxyZXBsYWNlLXN1cnJvZ2F0ZXMiLAorICAgICAgICAgICAgICAgICAgICAi
LS1vdXRwdXQ9JXMiICUgb3V0cHV0X3BhdGgsIGZ1bGxfdXJsCisgICAgICAgICAgICAgICAgXSAr
IHNlbGYuYnJvd3Nlci5iaW5hcnlfYXJncywKKyAgICAgICAgICAgICAgICBzZWxmLmRlYnVnX2lu
Zm8pCisKKyAgICAgICAgICAgIGZvciBzdHlsZXNoZWV0IGluIHNlbGYuYnJvd3Nlci51c2VyX3N0
eWxlc2hlZXRzOgorICAgICAgICAgICAgICAgIGNvbW1hbmQgKz0gWyItLXVzZXItc3R5bGVzaGVl
dCIsIHN0eWxlc2hlZXRdCisKKyAgICAgICAgICAgIGZvciBwcmVmLCB2YWx1ZSBpbiB0ZXN0LmVu
dmlyb25tZW50LmdldCgncHJlZnMnLCB7fSkuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAg
Y29tbWFuZCArPSBbIi0tcHJlZiIsICIlcz0lcyIgJSAocHJlZiwgdmFsdWUpXQorCisgICAgICAg
ICAgICBjb21tYW5kICs9IFsiLS1yZXNvbHV0aW9uIiwgdmlld3BvcnRfc2l6ZSBvciAiODAweDYw
MCJdCisKKyAgICAgICAgICAgIGlmIHNlbGYuYnJvd3Nlci5jYV9jZXJ0aWZpY2F0ZV9wYXRoOgor
ICAgICAgICAgICAgICAgIGNvbW1hbmQgKz0gWyItLWNlcnRpZmljYXRlLXBhdGgiLCBzZWxmLmJy
b3dzZXIuY2FfY2VydGlmaWNhdGVfcGF0aF0KKworICAgICAgICAgICAgaWYgZHBpOgorICAgICAg
ICAgICAgICAgIGNvbW1hbmQgKz0gWyItLWRldmljZS1waXhlbC1yYXRpbyIsIGRwaV0KKworICAg
ICAgICAgICAgIyBSdW4gcmVmIHRlc3RzIGluIGhlYWRsZXNzIG1vZGUKKyAgICAgICAgICAgIGNv
bW1hbmQgKz0gWyIteiJdCisKKyAgICAgICAgICAgIHNlbGYuY29tbWFuZCA9IGRlYnVnX2FyZ3Mg
KyBjb21tYW5kCisKKyAgICAgICAgICAgIGVudiA9IG9zLmVudmlyb24uY29weSgpCisgICAgICAg
ICAgICBlbnZbIkhPU1RfRklMRSJdID0gc2VsZi5ob3N0c19wYXRoCisgICAgICAgICAgICBlbnZb
IlJVU1RfQkFDS1RSQUNFIl0gPSAiMSIKKworICAgICAgICAgICAgaWYgbm90IHNlbGYuaW50ZXJh
Y3RpdmU6CisgICAgICAgICAgICAgICAgc2VsZi5wcm9jID0gUHJvY2Vzc0hhbmRsZXIoc2VsZi5j
b21tYW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nl
c3NPdXRwdXRMaW5lPVtzZWxmLm9uX291dHB1dF0sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZW52PWVudikKKworCisgICAgICAgICAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgICAgICAgICBzZWxmLnByb2MucnVuKCkKKyAgICAgICAgICAgICAgICAgICAgdGlt
ZW91dCA9IHRlc3QudGltZW91dCAqIHNlbGYudGltZW91dF9tdWx0aXBsaWVyICsgNQorICAgICAg
ICAgICAgICAgICAgICBydiA9IHNlbGYucHJvYy53YWl0KHRpbWVvdXQ9dGltZW91dCkKKyAgICAg
ICAgICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICAgICAgICAg
IHNlbGYucHJvYy5raWxsKCkKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAg
IGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5wcm9jID0gc3VicHJvY2Vzcy5Qb3BlbihzZWxm
LmNvbW1hbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
bnY9ZW52KQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcnYgPSBz
ZWxmLnByb2Mud2FpdCgpCisgICAgICAgICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0
OgorICAgICAgICAgICAgICAgICAgICBzZWxmLnByb2Mua2lsbCgpCisgICAgICAgICAgICAgICAg
ICAgIHJhaXNlCisKKyAgICAgICAgICAgIGlmIHJ2IGlzIE5vbmU6CisgICAgICAgICAgICAgICAg
c2VsZi5wcm9jLmtpbGwoKQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZSwgKCJFWFRFUk5B
TC1USU1FT1VUIiwgTm9uZSkKKworICAgICAgICAgICAgaWYgcnYgIT0gMCBvciBub3Qgb3MucGF0
aC5leGlzdHMob3V0cHV0X3BhdGgpOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZSwgKCJD
UkFTSCIsIE5vbmUpCisKKyAgICAgICAgICAgIHdpdGggb3BlbihvdXRwdXRfcGF0aCkgYXMgZjoK
KyAgICAgICAgICAgICAgICAjIE1pZ2h0IG5lZWQgdG8gc3RyaXAgdmFyaWFibGUgaGVhZGVycyBv
ciBzb21ldGhpbmcgaGVyZQorICAgICAgICAgICAgICAgIGRhdGEgPSBmLnJlYWQoKQorICAgICAg
ICAgICAgICAgIHJldHVybiBUcnVlLCBiYXNlNjQuYjY0ZW5jb2RlKGRhdGEpCisKKyAgICBkZWYg
ZG9fdGVzdChzZWxmLCB0ZXN0KToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5pbXBsZW1lbnRhdGlv
bi5ydW5fdGVzdCh0ZXN0KQorCisgICAgICAgIHJldHVybiBzZWxmLmNvbnZlcnRfcmVzdWx0KHRl
c3QsIHJlc3VsdCkKKworICAgIGRlZiBvbl9vdXRwdXQoc2VsZiwgbGluZSk6CisgICAgICAgIGxp
bmUgPSBsaW5lLmRlY29kZSgidXRmOCIsICJyZXBsYWNlIikKKyAgICAgICAgaWYgc2VsZi5pbnRl
cmFjdGl2ZToKKyAgICAgICAgICAgIHByaW50IGxpbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgIHNlbGYubG9nZ2VyLnByb2Nlc3Nfb3V0cHV0KHNlbGYucHJvYy5waWQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIiAiLmpvaW4oc2VsZi5jb21tYW5kKSkKKworY2xhc3MgU2Vydm9X
ZHNwZWNQcm90b2NvbChQcm90b2NvbCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4ZWN1dG9y
LCBicm93c2VyKToKKyAgICAgICAgc2VsZi5kb19kZWxheWVkX2ltcG9ydHMoKQorICAgICAgICBQ
cm90b2NvbC5fX2luaXRfXyhzZWxmLCBleGVjdXRvciwgYnJvd3NlcikKKyAgICAgICAgc2VsZi5z
ZXNzaW9uID0gTm9uZQorICAgICAgICBzZWxmLnNlcnZlciA9IE5vbmUKKworICAgIGRlZiBzZXR1
cChzZWxmLCBydW5uZXIpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnNlcnZlciA9
IFNlcnZvRHJpdmVyU2VydmVyKHNlbGYubG9nZ2VyLCBiaW5hcnk9c2VsZi5icm93c2VyLmJpbmFy
eSwgYmluYXJ5X2FyZ3M9c2VsZi5icm93c2VyLmJpbmFyeV9hcmdzKQorICAgICAgICAgICAgc2Vs
Zi5zZXJ2ZXIuc3RhcnQoYmxvY2s9RmFsc2UpCisgICAgICAgICAgICBzZWxmLmxvZ2dlci5pbmZv
KAorICAgICAgICAgICAgICAgICJXZWJEcml2ZXIgSFRUUCBzZXJ2ZXIgbGlzdGVuaW5nIGF0ICVz
IiAlIHNlbGYuc2VydmVyLnVybCkKKworICAgICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygKKyAg
ICAgICAgICAgICAgICAiRXN0YWJsaXNoaW5nIG5ldyBXZWJEcml2ZXIgc2Vzc2lvbiB3aXRoICVz
IiAlIHNlbGYuc2VydmVyLnVybCkKKyAgICAgICAgICAgIHNlbGYuc2Vzc2lvbiA9IHdlYmRyaXZl
ci5TZXNzaW9uKAorICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyLmhvc3QsIHNlbGYuc2VydmVy
LnBvcnQsIHNlbGYuc2VydmVyLmJhc2VfcGF0aCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoK
KyAgICAgICAgICAgIHNlbGYubG9nZ2VyLmVycm9yKHRyYWNlYmFjay5mb3JtYXRfZXhjKCkpCisg
ICAgICAgICAgICBzZWxmLmV4ZWN1dG9yLnJ1bm5lci5zZW5kX21lc3NhZ2UoImluaXRfZmFpbGVk
IikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZXhlY3V0b3IucnVubmVyLnNlbmRf
bWVzc2FnZSgiaW5pdF9zdWNjZWVkZWQiKQorCisgICAgZGVmIHRlYXJkb3duKHNlbGYpOgorICAg
ICAgICBpZiBzZWxmLnNlcnZlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHRyeToKKyAgICAg
ICAgICAgICAgICBpZiBzZWxmLnNlc3Npb24uc2Vzc2lvbl9pZCBpcyBub3QgTm9uZToKKyAgICAg
ICAgICAgICAgICAgICAgc2VsZi5zZXNzaW9uLmVuZCgpCisgICAgICAgICAgICBleGNlcHQgRXhj
ZXB0aW9uOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGlmIHNlbGYuc2VydmVy
LmlzX2FsaXZlOgorICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyLnN0b3AoKQorCisgICAgQHBy
b3BlcnR5CisgICAgZGVmIGlzX2FsaXZlKHNlbGYpOgorICAgICAgICBjb25uID0gaHR0cGxpYi5I
VFRQQ29ubmVjdGlvbihzZWxmLnNlcnZlci5ob3N0LCBzZWxmLnNlcnZlci5wb3J0KQorICAgICAg
ICBjb25uLnJlcXVlc3QoIkhFQUQiLCBzZWxmLnNlcnZlci5iYXNlX3BhdGggKyAiaW52YWxpZCIp
CisgICAgICAgIHJlcyA9IGNvbm4uZ2V0cmVzcG9uc2UoKQorICAgICAgICByZXR1cm4gcmVzLnN0
YXR1cyA9PSA0MDQKKworICAgIGRlZiBkb19kZWxheWVkX2ltcG9ydHMoc2VsZik6CisgICAgICAg
IGdsb2JhbCBweXRlc3RydW5uZXIsIHdlYmRyaXZlcgorICAgICAgICBmcm9tIC4gaW1wb3J0IHB5
dGVzdHJ1bm5lcgorICAgICAgICBpbXBvcnQgd2ViZHJpdmVyCisKKworY2xhc3MgU2Vydm9XZHNw
ZWNFeGVjdXRvcihXZHNwZWNFeGVjdXRvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb3dz
ZXIsIHNlcnZlcl9jb25maWcsCisgICAgICAgICAgICAgICAgIHRpbWVvdXRfbXVsdGlwbGllcj0x
LCBjbG9zZV9hZnRlcl9kb25lPVRydWUsIGRlYnVnX2luZm89Tm9uZSwKKyAgICAgICAgICAgICAg
ICAgKiprd2FyZ3MpOgorICAgICAgICBXZHNwZWNFeGVjdXRvci5fX2luaXRfXyhzZWxmLCBicm93
c2VyLCBzZXJ2ZXJfY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1l
b3V0X211bHRpcGxpZXI9dGltZW91dF9tdWx0aXBsaWVyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkZWJ1Z19pbmZvPWRlYnVnX2luZm8pCisgICAgICAgIHNlbGYucHJvdG9jb2wg
PSBTZXJ2b1dkc3BlY1Byb3RvY29sKHNlbGYsIGJyb3dzZXIpCisKKyAgICBkZWYgaXNfYWxpdmUo
c2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnByb3RvY29sLmlzX2FsaXZlCisKKyAgICBkZWYg
b25fZW52aXJvbm1lbnRfY2hhbmdlKHNlbGYsIG5ld19lbnZpcm9ubWVudCk6CisgICAgICAgIHBh
c3MKKworICAgIGRlZiBkb190ZXN0KHNlbGYsIHRlc3QpOgorICAgICAgICB0aW1lb3V0ID0gdGVz
dC50aW1lb3V0ICogc2VsZi50aW1lb3V0X211bHRpcGxpZXIgKyBleHRyYV90aW1lb3V0CisKKyAg
ICAgICAgc3VjY2VzcywgZGF0YSA9IFdkc3BlY1J1bihzZWxmLmRvX3dkc3BlYywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnByb3RvY29sLnNlc3Npb24sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdC5wYXRoLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRpbWVvdXQpLnJ1bigpCisKKyAgICAgICAgaWYgc3VjY2VzczoKKyAg
ICAgICAgICAgIHJldHVybiBzZWxmLmNvbnZlcnRfcmVzdWx0KHRlc3QsIGRhdGEpCisKKyAgICAg
ICAgcmV0dXJuICh0ZXN0LnJlc3VsdF9jbHMoKmRhdGEpLCBbXSkKKworICAgIGRlZiBkb193ZHNw
ZWMoc2VsZiwgc2Vzc2lvbiwgcGF0aCwgdGltZW91dCk6CisgICAgICAgIGhhcm5lc3NfcmVzdWx0
ID0gKCJPSyIsIE5vbmUpCisgICAgICAgIHN1YnRlc3RfcmVzdWx0cyA9IHB5dGVzdHJ1bm5lci5y
dW4ocGF0aCwgc2Vzc2lvbiwgdGltZW91dD10aW1lb3V0KQorICAgICAgICByZXR1cm4gKGhhcm5l
c3NfcmVzdWx0LCBzdWJ0ZXN0X3Jlc3VsdHMpCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9p
bXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9leGVjdXRvcnMvZXhlY3V0b3Jz
ZXJ2b2RyaXZlci5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5u
ZXIvd3B0cnVubmVyL2V4ZWN1dG9ycy9leGVjdXRvcnNlcnZvZHJpdmVyLnB5Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hZjA5ZGE2ZjE3OAotLS0gL2Rldi9udWxsCisr
KyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVy
L2V4ZWN1dG9ycy9leGVjdXRvcnNlcnZvZHJpdmVyLnB5CkBAIC0wLDAgKzEsMjU5IEBACitpbXBv
cnQganNvbgoraW1wb3J0IG9zCitpbXBvcnQgc29ja2V0CitpbXBvcnQgdGhyZWFkaW5nCitpbXBv
cnQgdGltZQoraW1wb3J0IHRyYWNlYmFjaworCitmcm9tIC5iYXNlIGltcG9ydCAoUHJvdG9jb2ws
CisgICAgICAgICAgICAgICAgICAgUmVmVGVzdEV4ZWN1dG9yLAorICAgICAgICAgICAgICAgICAg
IFJlZlRlc3RJbXBsZW1lbnRhdGlvbiwKKyAgICAgICAgICAgICAgICAgICBUZXN0aGFybmVzc0V4
ZWN1dG9yLAorICAgICAgICAgICAgICAgICAgIHN0cmlwX3NlcnZlcikKK2Zyb20gLi50ZXN0cnVu
bmVyIGltcG9ydCBTdG9wCisKK3dlYmRyaXZlciA9IE5vbmUKKworaGVyZSA9IG9zLnBhdGguam9p
bihvcy5wYXRoLnNwbGl0KF9fZmlsZV9fKVswXSkKKworZXh0cmFfdGltZW91dCA9IDUKKworCitk
ZWYgZG9fZGVsYXllZF9pbXBvcnRzKCk6CisgICAgZ2xvYmFsIHdlYmRyaXZlcgorICAgIGltcG9y
dCB3ZWJkcml2ZXIKKworCitjbGFzcyBTZXJ2b1dlYkRyaXZlclByb3RvY29sKFByb3RvY29sKToK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgZXhlY3V0b3IsIGJyb3dzZXIsIGNhcGFiaWxpdGllcywg
Kiprd2FyZ3MpOgorICAgICAgICBkb19kZWxheWVkX2ltcG9ydHMoKQorICAgICAgICBQcm90b2Nv
bC5fX2luaXRfXyhzZWxmLCBleGVjdXRvciwgYnJvd3NlcikKKyAgICAgICAgc2VsZi5jYXBhYmls
aXRpZXMgPSBjYXBhYmlsaXRpZXMKKyAgICAgICAgc2VsZi5ob3N0ID0gYnJvd3Nlci53ZWJkcml2
ZXJfaG9zdAorICAgICAgICBzZWxmLnBvcnQgPSBicm93c2VyLndlYmRyaXZlcl9wb3J0CisgICAg
ICAgIHNlbGYuc2Vzc2lvbiA9IE5vbmUKKworICAgIGRlZiBzZXR1cChzZWxmLCBydW5uZXIpOgor
ICAgICAgICAiIiJDb25uZWN0IHRvIGJyb3dzZXIgdmlhIFdlYkRyaXZlci4iIiIKKyAgICAgICAg
c2VsZi5ydW5uZXIgPSBydW5uZXIKKworICAgICAgICB1cmwgPSAiaHR0cDovLyVzOiVkIiAlIChz
ZWxmLmhvc3QsIHNlbGYucG9ydCkKKyAgICAgICAgc2Vzc2lvbl9zdGFydGVkID0gRmFsc2UKKyAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5zZXNzaW9uID0gd2ViZHJpdmVyLlNlc3Npb24o
c2VsZi5ob3N0LCBzZWxmLnBvcnQsCisgICAgICAgICAgICAgICAgZXh0ZW5zaW9uPXdlYmRyaXZl
ci5zZXJ2by5TZXJ2b0NvbW1hbmRFeHRlbnNpb25zKQorICAgICAgICAgICAgc2VsZi5zZXNzaW9u
LnN0YXJ0KCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2VsZi5sb2dnZXIud2Fybmlu
ZygKKyAgICAgICAgICAgICAgICAiQ29ubmVjdGluZyB3aXRoIFdlYkRyaXZlciBmYWlsZWQ6XG4l
cyIgJSB0cmFjZWJhY2suZm9ybWF0X2V4YygpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
c2VsZi5sb2dnZXIuZGVidWcoInNlc3Npb24gc3RhcnRlZCIpCisgICAgICAgICAgICBzZXNzaW9u
X3N0YXJ0ZWQgPSBUcnVlCisKKyAgICAgICAgaWYgbm90IHNlc3Npb25fc3RhcnRlZDoKKyAgICAg
ICAgICAgIHNlbGYubG9nZ2VyLndhcm5pbmcoIkZhaWxlZCB0byBjb25uZWN0IHZpYSBXZWJEcml2
ZXIiKQorICAgICAgICAgICAgc2VsZi5leGVjdXRvci5ydW5uZXIuc2VuZF9tZXNzYWdlKCJpbml0
X2ZhaWxlZCIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmV4ZWN1dG9yLnJ1bm5l
ci5zZW5kX21lc3NhZ2UoImluaXRfc3VjY2VlZGVkIikKKworICAgIGRlZiB0ZWFyZG93bihzZWxm
KToKKyAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcoIkhhbmdpbmcgdXAgb24gV2ViRHJpdmVyIHNl
c3Npb24iKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnNlc3Npb24uZW5kKCkKKyAg
ICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcworCisgICAgZGVmIGlzX2FsaXZlKHNlbGYp
OgorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIEdldCBhIHNpbXBsZSBwcm9wZXJ0eSBvdmVy
IHRoZSBjb25uZWN0aW9uCisgICAgICAgICAgICBzZWxmLnNlc3Npb24ud2luZG93X2hhbmRsZQor
ICAgICAgICAjIFRPRE8gd2hhdCBleGNlcHRpb24/CisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246
CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRl
ZiBhZnRlcl9jb25uZWN0KHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgd2FpdChzZWxm
KToKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAg
ICBzZWxmLnNlc3Npb24uZXhlY3V0ZV9hc3luY19zY3JpcHQoIiIpCisgICAgICAgICAgICBleGNl
cHQgd2ViZHJpdmVyLlRpbWVvdXRFeGNlcHRpb246CisgICAgICAgICAgICAgICAgcGFzcworICAg
ICAgICAgICAgZXhjZXB0IChzb2NrZXQudGltZW91dCwgSU9FcnJvcik6CisgICAgICAgICAgICAg
ICAgYnJlYWsKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAg
ICAgICBzZWxmLmxvZ2dlci5lcnJvcih0cmFjZWJhY2suZm9ybWF0X2V4YyhlKSkKKyAgICAgICAg
ICAgICAgICBicmVhaworCisgICAgZGVmIG9uX2Vudmlyb25tZW50X2NoYW5nZShzZWxmLCBvbGRf
ZW52aXJvbm1lbnQsIG5ld19lbnZpcm9ubWVudCk6CisgICAgICAgICNVbnNldCBhbGwgdGhlIG9s
ZCBwcmVmcworICAgICAgICBzZWxmLnNlc3Npb24uZXh0ZW5zaW9uLnJlc2V0X3ByZWZzKCpvbGRf
ZW52aXJvbm1lbnQuZ2V0KCJwcmVmcyIsIHt9KS5rZXlzKCkpCisgICAgICAgIHNlbGYuc2Vzc2lv
bi5leHRlbnNpb24uc2V0X3ByZWZzKG5ld19lbnZpcm9ubWVudC5nZXQoInByZWZzIiwge30pKQor
CisKK2NsYXNzIFNlcnZvV2ViRHJpdmVyUnVuKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNl
bGYsIGZ1bmMsIHNlc3Npb24sIHVybCwgdGltZW91dCwgY3VycmVudF90aW1lb3V0PU5vbmUpOgor
ICAgICAgICBzZWxmLmZ1bmMgPSBmdW5jCisgICAgICAgIHNlbGYucmVzdWx0ID0gTm9uZQorICAg
ICAgICBzZWxmLnNlc3Npb24gPSBzZXNzaW9uCisgICAgICAgIHNlbGYudXJsID0gdXJsCisgICAg
ICAgIHNlbGYudGltZW91dCA9IHRpbWVvdXQKKyAgICAgICAgc2VsZi5yZXN1bHRfZmxhZyA9IHRo
cmVhZGluZy5FdmVudCgpCisKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICBleGVjdXRvciA9
IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXNlbGYuX3J1bikKKyAgICAgICAgZXhlY3V0b3Iuc3Rh
cnQoKQorCisgICAgICAgIGZsYWcgPSBzZWxmLnJlc3VsdF9mbGFnLndhaXQoc2VsZi50aW1lb3V0
ICsgZXh0cmFfdGltZW91dCkKKyAgICAgICAgaWYgc2VsZi5yZXN1bHQgaXMgTm9uZToKKyAgICAg
ICAgICAgIGFzc2VydCBub3QgZmxhZworICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSBGYWxzZSwg
KCJFWFRFUk5BTC1USU1FT1VUIiwgTm9uZSkKKworICAgICAgICByZXR1cm4gc2VsZi5yZXN1bHQK
KworICAgIGRlZiBfcnVuKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnJl
c3VsdCA9IFRydWUsIHNlbGYuZnVuYyhzZWxmLnNlc3Npb24sIHNlbGYudXJsLCBzZWxmLnRpbWVv
dXQpCisgICAgICAgIGV4Y2VwdCB3ZWJkcml2ZXIuVGltZW91dEV4Y2VwdGlvbjoKKyAgICAgICAg
ICAgIHNlbGYucmVzdWx0ID0gRmFsc2UsICgiRVhURVJOQUwtVElNRU9VVCIsIE5vbmUpCisgICAg
ICAgIGV4Y2VwdCAoc29ja2V0LnRpbWVvdXQsIElPRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5y
ZXN1bHQgPSBGYWxzZSwgKCJDUkFTSCIsIE5vbmUpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24g
YXMgZToKKyAgICAgICAgICAgIG1lc3NhZ2UgPSBnZXRhdHRyKGUsICJtZXNzYWdlIiwgIiIpCisg
ICAgICAgICAgICBpZiBtZXNzYWdlOgorICAgICAgICAgICAgICAgIG1lc3NhZ2UgKz0gIlxuIgor
ICAgICAgICAgICAgbWVzc2FnZSArPSB0cmFjZWJhY2suZm9ybWF0X2V4YyhlKQorICAgICAgICAg
ICAgc2VsZi5yZXN1bHQgPSBGYWxzZSwgKCJFUlJPUiIsIGUpCisgICAgICAgIGZpbmFsbHk6Cisg
ICAgICAgICAgICBzZWxmLnJlc3VsdF9mbGFnLnNldCgpCisKKworZGVmIHRpbWVvdXRfZnVuYyh0
aW1lb3V0KToKKyAgICBpZiB0aW1lb3V0OgorICAgICAgICB0MCA9IHRpbWUudGltZSgpCisgICAg
ICAgIHJldHVybiBsYW1iZGE6IHRpbWUudGltZSgpIC0gdDAgPiB0aW1lb3V0ICsgZXh0cmFfdGlt
ZW91dAorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBsYW1iZGE6IEZhbHNlCisKKworY2xhc3Mg
U2Vydm9XZWJEcml2ZXJUZXN0aGFybmVzc0V4ZWN1dG9yKFRlc3RoYXJuZXNzRXhlY3V0b3IpOgor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm93c2VyLCBzZXJ2ZXJfY29uZmlnLCB0aW1lb3V0X211
bHRpcGxpZXI9MSwKKyAgICAgICAgICAgICAgICAgY2xvc2VfYWZ0ZXJfZG9uZT1UcnVlLCBjYXBh
YmlsaXRpZXM9Tm9uZSwgZGVidWdfaW5mbz1Ob25lLAorICAgICAgICAgICAgICAgICAqKmt3YXJn
cyk6CisgICAgICAgIFRlc3RoYXJuZXNzRXhlY3V0b3IuX19pbml0X18oc2VsZiwgYnJvd3Nlciwg
c2VydmVyX2NvbmZpZywgdGltZW91dF9tdWx0aXBsaWVyPTEsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGVidWdfaW5mbz1Ob25lKQorICAgICAgICBzZWxmLnByb3RvY29s
ID0gU2Vydm9XZWJEcml2ZXJQcm90b2NvbChzZWxmLCBicm93c2VyLCBjYXBhYmlsaXRpZXM9Y2Fw
YWJpbGl0aWVzKQorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKGhlcmUsICJ0ZXN0aGFy
bmVzc19zZXJ2b2RyaXZlci5qcyIpKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5zY3JpcHQgPSBm
LnJlYWQoKQorICAgICAgICBzZWxmLnRpbWVvdXQgPSBOb25lCisKKyAgICBkZWYgb25fcHJvdG9j
b2xfY2hhbmdlKHNlbGYsIG5ld19wcm90b2NvbCk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBp
c19hbGl2ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYucHJvdG9jb2wuaXNfYWxpdmUoKQor
CisgICAgZGVmIGRvX3Rlc3Qoc2VsZiwgdGVzdCk6CisgICAgICAgIHVybCA9IHNlbGYudGVzdF91
cmwodGVzdCkKKworICAgICAgICB0aW1lb3V0ID0gdGVzdC50aW1lb3V0ICogc2VsZi50aW1lb3V0
X211bHRpcGxpZXIgKyBleHRyYV90aW1lb3V0CisKKyAgICAgICAgaWYgdGltZW91dCAhPSBzZWxm
LnRpbWVvdXQ6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5wcm90b2Nv
bC5zZXNzaW9uLnRpbWVvdXRzLnNjcmlwdCA9IHRpbWVvdXQKKyAgICAgICAgICAgICAgICBzZWxm
LnRpbWVvdXQgPSB0aW1lb3V0CisgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAg
ICAgICAgICBzZWxmLmxvZ2dlci5lcnJvcigiTG9zdCB3ZWJkcml2ZXIgY29ubmVjdGlvbiIpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIFN0b3AKKworICAgICAgICBzdWNjZXNzLCBkYXRhID0gU2Vy
dm9XZWJEcml2ZXJSdW4oc2VsZi5kb190ZXN0aGFybmVzcywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHJvdG9jb2wuc2Vzc2lvbiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQpLnJ1bigpCisKKyAgICAgICAgaWYgc3VjY2Vz
czoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmNvbnZlcnRfcmVzdWx0KHRlc3QsIGRhdGEpCisK
KyAgICAgICAgcmV0dXJuICh0ZXN0LnJlc3VsdF9jbHMoKmRhdGEpLCBbXSkKKworICAgIGRlZiBk
b190ZXN0aGFybmVzcyhzZWxmLCBzZXNzaW9uLCB1cmwsIHRpbWVvdXQpOgorICAgICAgICBzZXNz
aW9uLnVybCA9IHVybAorICAgICAgICByZXN1bHQgPSBqc29uLmxvYWRzKAorICAgICAgICAgICAg
c2Vzc2lvbi5leGVjdXRlX2FzeW5jX3NjcmlwdCgKKyAgICAgICAgICAgICAgICBzZWxmLnNjcmlw
dCAlIHsiYWJzX3VybCI6IHVybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXJs
Ijogc3RyaXBfc2VydmVyKHVybCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRp
bWVvdXRfbXVsdGlwbGllciI6IHNlbGYudGltZW91dF9tdWx0aXBsaWVyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJ0aW1lb3V0IjogdGltZW91dCAqIDEwMDB9KSkKKyAgICAgICAg
IyBQcmV2ZW50IGxlYWtpbmcgZXZlcnkgcGFnZSBpbiBoaXN0b3J5IHVudGlsIFNlcnZvIGRldmVs
b3BzIGEgbW9yZSBzYW5lCisgICAgICAgICMgcGFnZSBjYWNoZQorICAgICAgICBzZXNzaW9uLmJh
Y2soKQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKworY2xhc3MgVGltZW91dEVycm9yKEV4Y2Vw
dGlvbik6CisgICAgcGFzcworCisKK2NsYXNzIFNlcnZvV2ViRHJpdmVyUmVmVGVzdEV4ZWN1dG9y
KFJlZlRlc3RFeGVjdXRvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb3dzZXIsIHNlcnZl
cl9jb25maWcsIHRpbWVvdXRfbXVsdGlwbGllcj0xLAorICAgICAgICAgICAgICAgICBzY3JlZW5z
aG90X2NhY2hlPU5vbmUsIGNhcGFiaWxpdGllcz1Ob25lLCBkZWJ1Z19pbmZvPU5vbmUsCisgICAg
ICAgICAgICAgICAgICoqa3dhcmdzKToKKyAgICAgICAgIiIiU2VsZW5pdW0gV2ViRHJpdmVyLWJh
c2VkIGV4ZWN1dG9yIGZvciByZWZ0ZXN0cyIiIgorICAgICAgICBSZWZUZXN0RXhlY3V0b3IuX19p
bml0X18oc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyb3dzZXIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfY29uZmlnLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2NyZWVuc2hvdF9jYWNoZT1zY3JlZW5zaG90X2NhY2hl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dF9tdWx0aXBsaWVyPXRp
bWVvdXRfbXVsdGlwbGllciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVn
X2luZm89ZGVidWdfaW5mbykKKyAgICAgICAgc2VsZi5wcm90b2NvbCA9IFNlcnZvV2ViRHJpdmVy
UHJvdG9jb2woc2VsZiwgYnJvd3NlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2FwYWJpbGl0aWVzPWNhcGFiaWxpdGllcykKKyAgICAgICAgc2VsZi5p
bXBsZW1lbnRhdGlvbiA9IFJlZlRlc3RJbXBsZW1lbnRhdGlvbihzZWxmKQorICAgICAgICBzZWxm
LnRpbWVvdXQgPSBOb25lCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oaGVyZSwgInJl
ZnRlc3Qtd2FpdF93ZWJkcml2ZXIuanMiKSkgYXMgZjoKKyAgICAgICAgICAgIHNlbGYud2FpdF9z
Y3JpcHQgPSBmLnJlYWQoKQorCisgICAgZGVmIGlzX2FsaXZlKHNlbGYpOgorICAgICAgICByZXR1
cm4gc2VsZi5wcm90b2NvbC5pc19hbGl2ZSgpCisKKyAgICBkZWYgZG9fdGVzdChzZWxmLCB0ZXN0
KToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5pbXBsZW1lbnRhdGlv
bi5ydW5fdGVzdCh0ZXN0KQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuY29udmVydF9yZXN1bHQo
dGVzdCwgcmVzdWx0KQorICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIHJldHVy
biB0ZXN0LnJlc3VsdF9jbHMoIkNSQVNIIiwgTm9uZSksIFtdCisgICAgICAgIGV4Y2VwdCBUaW1l
b3V0RXJyb3I6CisgICAgICAgICAgICByZXR1cm4gdGVzdC5yZXN1bHRfY2xzKCJUSU1FT1VUIiwg
Tm9uZSksIFtdCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIG1l
c3NhZ2UgPSBnZXRhdHRyKGUsICJtZXNzYWdlIiwgIiIpCisgICAgICAgICAgICBpZiBtZXNzYWdl
OgorICAgICAgICAgICAgICAgIG1lc3NhZ2UgKz0gIlxuIgorICAgICAgICAgICAgbWVzc2FnZSAr
PSB0cmFjZWJhY2suZm9ybWF0X2V4YyhlKQorICAgICAgICAgICAgcmV0dXJuIHRlc3QucmVzdWx0
X2NscygiRVJST1IiLCBtZXNzYWdlKSwgW10KKworICAgIGRlZiBzY3JlZW5zaG90KHNlbGYsIHRl
c3QsIHZpZXdwb3J0X3NpemUsIGRwaSk6CisgICAgICAgICMgaHR0cHM6Ly9naXRodWIuY29tL3cz
Yy93cHRydW5uZXIvaXNzdWVzLzE2NgorICAgICAgICBhc3NlcnQgdmlld3BvcnRfc2l6ZSBpcyBO
b25lCisgICAgICAgIGFzc2VydCBkcGkgaXMgTm9uZQorCisgICAgICAgIHRpbWVvdXQgPSAodGVz
dC50aW1lb3V0ICogc2VsZi50aW1lb3V0X211bHRpcGxpZXIgKyBleHRyYV90aW1lb3V0CisgICAg
ICAgICAgICAgICAgICAgaWYgc2VsZi5kZWJ1Z19pbmZvIGlzIE5vbmUgZWxzZSBOb25lKQorCisg
ICAgICAgIGlmIHNlbGYudGltZW91dCAhPSB0aW1lb3V0OgorICAgICAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgICAgIHNlbGYucHJvdG9jb2wuc2Vzc2lvbi50aW1lb3V0cy5zY3JpcHQgPSB0aW1l
b3V0CisgICAgICAgICAgICAgICAgc2VsZi50aW1lb3V0ID0gdGltZW91dAorICAgICAgICAgICAg
ZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIuZXJyb3IoIkxvc3Qg
d2ViZHJpdmVyIGNvbm5lY3Rpb24iKQorICAgICAgICAgICAgICAgIHJldHVybiBTdG9wCisKKyAg
ICAgICAgcmV0dXJuIFNlcnZvV2ViRHJpdmVyUnVuKHNlbGYuX3NjcmVlbnNob3QsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnByb3RvY29sLnNlc3Npb24sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRlc3RfdXJsKHRlc3QpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCkucnVuKCkKKworICAgIGRlZiBfc2NyZWVu
c2hvdChzZWxmLCBzZXNzaW9uLCB1cmwsIHRpbWVvdXQpOgorICAgICAgICBzZXNzaW9uLnVybCA9
IHVybAorICAgICAgICBzZXNzaW9uLmV4ZWN1dGVfYXN5bmNfc2NyaXB0KHNlbGYud2FpdF9zY3Jp
cHQpCisgICAgICAgIHJldHVybiBzZXNzaW9uLnNjcmVlbnNob3QoKQpkaWZmIC0tZ2l0IGEvV2Vi
RHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvZXhlY3V0
b3JzL3Byb2Nlc3MucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVu
bmVyL3dwdHJ1bm5lci9leGVjdXRvcnMvcHJvY2Vzcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uZmI4YzE3YTk2YmEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2
ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9leGVjdXRvcnMv
cHJvY2Vzcy5weQpAQCAtMCwwICsxLDIwIEBACitmcm9tIC5iYXNlIGltcG9ydCBUZXN0RXhlY3V0
b3IKKworCitjbGFzcyBQcm9jZXNzVGVzdEV4ZWN1dG9yKFRlc3RFeGVjdXRvcik6CisgICAgZGVm
IF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIFRlc3RFeGVjdXRvci5f
X2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuYmluYXJ5ID0gc2Vs
Zi5icm93c2VyLmJpbmFyeQorICAgICAgICBzZWxmLmludGVyYWN0aXZlID0gKEZhbHNlIGlmIHNl
bGYuZGVidWdfaW5mbyBpcyBOb25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBz
ZWxmLmRlYnVnX2luZm8uaW50ZXJhY3RpdmUpCisKKyAgICBkZWYgc2V0dXAoc2VsZiwgcnVubmVy
KToKKyAgICAgICAgc2VsZi5ydW5uZXIgPSBydW5uZXIKKyAgICAgICAgc2VsZi5ydW5uZXIuc2Vu
ZF9tZXNzYWdlKCJpbml0X3N1Y2NlZWRlZCIpCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBk
ZWYgaXNfYWxpdmUoc2VsZik6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgZG9fdGVz
dChzZWxmLCB0ZXN0KToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgpkaWZmIC0t
Z2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5u
ZXIvZXhlY3V0b3JzL3B5dGVzdHJ1bm5lci9fX2luaXRfXy5weSBiL1dlYkRyaXZlclRlc3RzL2lt
cG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2V4ZWN1dG9ycy9weXRlc3RydW5u
ZXIvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmE5
MmIzYTgxNTFkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNj
L3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvZXhlY3V0b3JzL3B5dGVzdHJ1bm5lci9fX2luaXRf
Xy5weQpAQCAtMCwwICsxIEBACitmcm9tIC5ydW5uZXIgaW1wb3J0IHJ1bgpkaWZmIC0tZ2l0IGEv
V2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvZXhl
Y3V0b3JzL3B5dGVzdHJ1bm5lci9ydW5uZXIucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93
M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9leGVjdXRvcnMvcHl0ZXN0cnVubmVyL3J1bm5l
ci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDQzZmNjYjFmZWQK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0
cnVubmVyL3dwdHJ1bm5lci9leGVjdXRvcnMvcHl0ZXN0cnVubmVyL3J1bm5lci5weQpAQCAtMCww
ICsxLDExNyBAQAorIiIiUHJvdmlkZXMgaW50ZXJmYWNlIHRvIGRlYWwgd2l0aCBweXRlc3QuCisK
K1VzYWdlOjoKKworICAgIHNlc3Npb24gPSB3ZWJkcml2ZXIuY2xpZW50LlNlc3Npb24oIjEyNy4w
LjAuMSIsICI0NDQ0IiwgIi8iKQorICAgIGhhcm5lc3NfcmVzdWx0ID0gKCJPSyIsIE5vbmUpCisg
ICAgc3VidGVzdF9yZXN1bHRzID0gcHl0ZXN0cnVubmVyLnJ1bigiL3BhdGgvdG8vdGVzdCIsIHNl
c3Npb24udXJsKQorICAgIHJldHVybiAoaGFybmVzc19yZXN1bHQsIHN1YnRlc3RfcmVzdWx0cykK
KyIiIgorCitpbXBvcnQgZXJybm8KK2ltcG9ydCBqc29uCitpbXBvcnQgb3MKK2ltcG9ydCBzaHV0
aWwKK2ltcG9ydCB0ZW1wZmlsZQorCisKK3B5dGVzdCA9IE5vbmUKKworCitkZWYgZG9fZGVsYXll
ZF9pbXBvcnRzKCk6CisgICAgZ2xvYmFsIHB5dGVzdAorICAgIGltcG9ydCBweXRlc3QKKworCitk
ZWYgcnVuKHBhdGgsIHNlcnZlcl9jb25maWcsIHNlc3Npb25fY29uZmlnLCB0aW1lb3V0PTApOgor
ICAgICIiIlJ1biBQeXRob24gdGVzdCBhdCBgYHBhdGhgYCBpbiBweXRlc3QuICBUaGUgcHJvdmlk
ZWQgYGBzZXNzaW9uYGAKKyAgICBpcyBleHBvc2VkIGFzIGEgZml4dHVyZSBhdmFpbGFibGUgaW4g
dGhlIHNjb3BlIG9mIHRoZSB0ZXN0IGZ1bmN0aW9ucy4KKworICAgIDpwYXJhbSBwYXRoOiBQYXRo
IHRvIHRoZSB0ZXN0IGZpbGUuCisgICAgOnBhcmFtIHNlc3Npb25fY29uZmlnOiBkaWN0aW9uYXJ5
IG9mIGhvc3QsIHBvcnQsY2FwYWJpbGl0aWVzIHBhcmFtZXRlcnMKKyAgICB0byBwYXNzIHRocm91
Z2ggdG8gdGhlIHdlYmRyaXZlciBzZXNzaW9uCisgICAgOnBhcmFtIHRpbWVvdXQ6IER1cmF0aW9u
IGJlZm9yZSBpbnRlcnJ1cHRpbmcgcG90ZW50aWFsbHkgaGFuZ2luZworICAgICAgICB0ZXN0cy4g
IElmIDAsIHRoZXJlIGlzIG5vIHRpbWVvdXQuCisKKyAgICA6cmV0dXJuczogTGlzdCBvZiBzdWJ0
ZXN0IHJlc3VsdHMsIHdoaWNoIGFyZSB0dXBsZXMgb2YgKHRlc3QgaWQsCisgICAgICAgIHN0YXR1
cywgbWVzc2FnZSwgc3RhY2t0cmFjZSkuCisgICAgIiIiCisKKyAgICBpZiBweXRlc3QgaXMgTm9u
ZToKKyAgICAgICAgZG9fZGVsYXllZF9pbXBvcnRzKCkKKworICAgIHJlY29yZGVyID0gU3VidGVz
dFJlc3VsdFJlY29yZGVyKCkKKworICAgIG9zLmVudmlyb25bIldEX0hPU1QiXSA9IHNlc3Npb25f
Y29uZmlnWyJob3N0Il0KKyAgICBvcy5lbnZpcm9uWyJXRF9QT1JUIl0gPSBzdHIoc2Vzc2lvbl9j
b25maWdbInBvcnQiXSkKKyAgICBvcy5lbnZpcm9uWyJXRF9DQVBBQklMSVRJRVMiXSA9IGpzb24u
ZHVtcHMoc2Vzc2lvbl9jb25maWdbImNhcGFiaWxpdGllcyJdKQorICAgIG9zLmVudmlyb25bIldE
X1NFUlZFUl9DT05GSUciXSA9IGpzb24uZHVtcHMoc2VydmVyX2NvbmZpZykKKworICAgIHBsdWdp
bnMgPSBbcmVjb3JkZXJdCisKKyAgICAjIFRPRE8oYXRvKTogRGVhbCB3aXRoIHRpbWVvdXRzCisK
KyAgICB3aXRoIFRlbXBvcmFyeURpcmVjdG9yeSgpIGFzIGNhY2hlOgorICAgICAgICBweXRlc3Qu
bWFpbihbIi0tc3RyaWN0IiwgICMgdHVybiB3YXJuaW5ncyBpbnRvIGVycm9ycworICAgICAgICAg
ICAgICAgICAgICAgIi0tdmVyYm9zZSIsICAjIHNob3cgZWFjaCBpbmRpdmlkdWFsIHN1YnRlc3QK
KyAgICAgICAgICAgICAgICAgICAgICItLWNhcHR1cmUiLCAibm8iLCAgIyBlbmFibGUgc3Rkb3V0
L3N0ZGVyciBmcm9tIHRlc3RzCisgICAgICAgICAgICAgICAgICAgICAiLS1iYXNldGVtcCIsIGNh
Y2hlLCAgIyB0ZW1wb3JhcnkgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgICAiLXAiLCAi
bm86bW96bG9nIiwgICMgdXNlIHRoZSBXUFQgcmVzdWx0IHJlY29yZGVyCisgICAgICAgICAgICAg
ICAgICAgICAiLXAiLCAibm86Y2FjaGVwcm92aWRlciIsICAjIGRpc2FibGUgc3RhdGUgcHJlc2Vy
dmF0aW9uIGFjcm9zcyBpbnZvY2F0aW9ucworICAgICAgICAgICAgICAgICAgICAgcGF0aF0sCisg
ICAgICAgICAgICAgICAgICAgIHBsdWdpbnM9cGx1Z2lucykKKworICAgIHJldHVybiByZWNvcmRl
ci5yZXN1bHRzCisKKworY2xhc3MgU3VidGVzdFJlc3VsdFJlY29yZGVyKG9iamVjdCk6CisgICAg
ZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLnJlc3VsdHMgPSBbXQorCisgICAgZGVm
IHB5dGVzdF9ydW50ZXN0X2xvZ3JlcG9ydChzZWxmLCByZXBvcnQpOgorICAgICAgICBpZiByZXBv
cnQucGFzc2VkIGFuZCByZXBvcnQud2hlbiA9PSAiY2FsbCI6CisgICAgICAgICAgICBzZWxmLnJl
Y29yZF9wYXNzKHJlcG9ydCkKKyAgICAgICAgZWxpZiByZXBvcnQuZmFpbGVkOgorICAgICAgICAg
ICAgaWYgcmVwb3J0LndoZW4gIT0gImNhbGwiOgorICAgICAgICAgICAgICAgIHNlbGYucmVjb3Jk
X2Vycm9yKHJlcG9ydCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5y
ZWNvcmRfZmFpbChyZXBvcnQpCisgICAgICAgIGVsaWYgcmVwb3J0LnNraXBwZWQ6CisgICAgICAg
ICAgICBzZWxmLnJlY29yZF9za2lwKHJlcG9ydCkKKworICAgIGRlZiByZWNvcmRfcGFzcyhzZWxm
LCByZXBvcnQpOgorICAgICAgICBzZWxmLnJlY29yZChyZXBvcnQubm9kZWlkLCAiUEFTUyIpCisK
KyAgICBkZWYgcmVjb3JkX2ZhaWwoc2VsZiwgcmVwb3J0KToKKyAgICAgICAgc2VsZi5yZWNvcmQo
cmVwb3J0Lm5vZGVpZCwgIkZBSUwiLCBzdGFjaz1yZXBvcnQubG9uZ3JlcHIpCisKKyAgICBkZWYg
cmVjb3JkX2Vycm9yKHNlbGYsIHJlcG9ydCk6CisgICAgICAgICMgZXJyb3IgaW4gc2V0dXAvdGVh
cmRvd24KKyAgICAgICAgaWYgcmVwb3J0LndoZW4gIT0gImNhbGwiOgorICAgICAgICAgICAgbWVz
c2FnZSA9ICIlcyBlcnJvciIgJSByZXBvcnQud2hlbgorICAgICAgICBzZWxmLnJlY29yZChyZXBv
cnQubm9kZWlkLCAiRVJST1IiLCBtZXNzYWdlLCByZXBvcnQubG9uZ3JlcHIpCisKKyAgICBkZWYg
cmVjb3JkX3NraXAoc2VsZiwgcmVwb3J0KToKKyAgICAgICAgc2VsZi5yZWNvcmQocmVwb3J0Lm5v
ZGVpZCwgIkVSUk9SIiwKKyAgICAgICAgICAgICAgICAgICAgIkluLXRlc3Qgc2tpcCBkZWNvcmF0
b3JzIGFyZSBkaXNhbGxvd2VkLCAiCisgICAgICAgICAgICAgICAgICAgICJwbGVhc2UgdXNlIFdQ
VCBtZXRhZGF0YSB0byBpZ25vcmUgdGVzdHMuIikKKworICAgIGRlZiByZWNvcmQoc2VsZiwgdGVz
dCwgc3RhdHVzLCBtZXNzYWdlPU5vbmUsIHN0YWNrPU5vbmUpOgorICAgICAgICBpZiBzdGFjayBp
cyBub3QgTm9uZToKKyAgICAgICAgICAgIHN0YWNrID0gc3RyKHN0YWNrKQorICAgICAgICBuZXdf
cmVzdWx0ID0gKHRlc3QsIHN0YXR1cywgbWVzc2FnZSwgc3RhY2spCisgICAgICAgIHNlbGYucmVz
dWx0cy5hcHBlbmQobmV3X3Jlc3VsdCkKKworCitjbGFzcyBUZW1wb3JhcnlEaXJlY3Rvcnkob2Jq
ZWN0KToKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICBzZWxmLnBhdGggPSB0ZW1w
ZmlsZS5ta2R0ZW1wKHByZWZpeD0icHl0ZXN0LSIpCisgICAgICAgIHJldHVybiBzZWxmLnBhdGgK
KworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHRyeToKKyAgICAgICAg
ICAgIHNodXRpbC5ybXRyZWUoc2VsZi5wYXRoKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBl
OgorICAgICAgICAgICAgIyBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CisgICAgICAgICAgICBp
ZiBlLmVycm5vICE9IGVycm5vLkVOT0VOVDoKKyAgICAgICAgICAgICAgICByYWlzZQpkaWZmIC0t
Z2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5u
ZXIvZXhlY3V0b3JzL3JlZnRlc3Qtd2FpdF9tYXJpb25ldHRlLmpzIGIvV2ViRHJpdmVyVGVzdHMv
aW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvZXhlY3V0b3JzL3JlZnRlc3Qt
d2FpdF9tYXJpb25ldHRlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li5jMjI2MDI3MjgxZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVk
L3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2V4ZWN1dG9ycy9yZWZ0ZXN0LXdhaXRfbWFy
aW9uZXR0ZS5qcwpAQCAtMCwwICsxLDE3IEBACitmdW5jdGlvbiB0ZXN0KHgpIHsKKyAgaWYgKCFy
b290LmNsYXNzTGlzdC5jb250YWlucygicmVmdGVzdC13YWl0IikpIHsKKyAgICBvYnNlcnZlci5k
aXNjb25uZWN0KCk7CisgICAgbWFyaW9uZXR0ZVNjcmlwdEZpbmlzaGVkKCk7CisgIH0KK30KKwor
dmFyIHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7Cit2YXIgb2JzZXJ2ZXIgPSBuZXcg
TXV0YXRpb25PYnNlcnZlcih0ZXN0KTsKKworb2JzZXJ2ZXIub2JzZXJ2ZShyb290LCB7YXR0cmli
dXRlczogdHJ1ZX0pOworCitpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSAhPSAiY29tcGxldGUiKSB7
CisgIG9ubG9hZCA9IHRlc3QKK30gZWxzZSB7CisgIHRlc3QoKTsKK30KZGlmZiAtLWdpdCBhL1dl
YkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2V4ZWN1
dG9ycy9yZWZ0ZXN0LXdhaXRfd2ViZHJpdmVyLmpzIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQv
dzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvZXhlY3V0b3JzL3JlZnRlc3Qtd2FpdF93ZWJk
cml2ZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmMxY2M2NDll
MzIzCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xz
L3dwdHJ1bm5lci93cHRydW5uZXIvZXhlY3V0b3JzL3JlZnRlc3Qtd2FpdF93ZWJkcml2ZXIuanMK
QEAgLTAsMCArMSw0NCBAQAordmFyIGNhbGxiYWNrID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5n
dGggLSAxXTsKKworZnVuY3Rpb24gcm9vdF93YWl0KCkgeworICBpZiAoIXJvb3QuY2xhc3NMaXN0
LmNvbnRhaW5zKCJyZWZ0ZXN0LXdhaXQiKSkgeworICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTsK
KworICAgIGlmIChEb2N1bWVudC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoImZvbnRzIikpIHsK
KyAgICAgIGRvY3VtZW50LmZvbnRzLnJlYWR5LnRoZW4ocmVhZHlfZm9yX3NjcmVlbnNob3QpOwor
ICAgIH0gZWxzZSB7CisgICAgICAvLyBUaGlzIG1pZ2h0IHRha2UgdGhlIHNjcmVlbnNob3QgdG9v
IGVhcmx5LCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUKKyAgICAgIC8vIGxvYWQgZXZlbnQgaXMg
YmxvY2tlZCBvbiBmb250cyBiZWluZyBsb2FkZWQuIFNlZToKKyAgICAgIC8vIGh0dHBzOi8vZ2l0
aHViLmNvbS93M2MvY3Nzd2ctZHJhZnRzL2lzc3Vlcy8xMDg4CisgICAgICByZWFkeV9mb3Jfc2Ny
ZWVuc2hvdCgpOworICAgIH0KKyAgfQorfQorCitmdW5jdGlvbiByZWFkeV9mb3Jfc2NyZWVuc2hv
dCgpIHsKKyAgLy8gQXMgb2YgMjAxNy0wNC0wNSwgdGhlIENocm9taXVtIHdlYiBicm93c2VyIGV4
aGliaXRzIGEgcmVuZGVyaW5nIGJ1ZworICAvLyAoaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9w
L2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NzA4NzU3KSB0aGF0CisgIC8vIHByb2R1Y2VzIGlu
c3RhYmlsaXR5IGR1cmluZyBzY3JlZW4gY2FwdHVyZS4gVGhlIGZvbGxvd2luZyB1c2Ugb2YKKyAg
Ly8gYHJlcXVlc3RBbmltYXRpb25GcmFtZWAgaXMgaW50ZW5kZWQgYXMgYSBzaG9ydC10ZXJtIHdv
cmthcm91bmQsIHRob3VnaAorICAvLyBpdCBpcyBub3QgZ3VhcmFudGVlZCB0byByZXNvbHZlIHRo
ZSBpc3N1ZS4KKyAgLy8KKyAgLy8gRm9yIGZ1cnRoZXIgZGV0YWlsLCBzZWU6CisgIC8vIGh0dHBz
Oi8vZ2l0aHViLmNvbS9qdWdnbGlubWlrZS9jaHJvbWUtc2NyZWVuc2hvdC1yYWNlL2lzc3Vlcy8x
CisKKyAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCkgeworICAgIHJlcXVlc3RBbmlt
YXRpb25GcmFtZShmdW5jdGlvbigpIHsKKyAgICAgIGNhbGxiYWNrKCk7CisgICAgfSk7CisgIH0p
OworfQorCit2YXIgcm9vdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsKK3ZhciBvYnNlcnZl
ciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKHJvb3Rfd2FpdCk7CisKK29ic2VydmVyLm9ic2VydmUo
cm9vdCwge2F0dHJpYnV0ZXM6IHRydWV9KTsKKworaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgIT0g
ImNvbXBsZXRlIikgeworICAgIG9ubG9hZCA9IHJvb3Rfd2FpdDsKK30gZWxzZSB7CisgICAgcm9v
dF93YWl0KCk7Cit9CmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9v
bHMvd3B0cnVubmVyL3dwdHJ1bm5lci9leGVjdXRvcnMvcmVmdGVzdC5qcyBiL1dlYkRyaXZlclRl
c3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2V4ZWN1dG9ycy9yZWZ0
ZXN0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41YmQ1YzYwOWNi
ZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93
cHRydW5uZXIvd3B0cnVubmVyL2V4ZWN1dG9ycy9yZWZ0ZXN0LmpzCkBAIC0wLDAgKzEgQEAKK3Zh
ciB3aW4gPSB3aW5kb3cub3BlbigiYWJvdXQ6YmxhbmsiLCAidGVzdCIsICJ3aWR0aD02MDAsaGVp
Z2h0PTYwMCIpOwpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xz
L3dwdHJ1bm5lci93cHRydW5uZXIvZXhlY3V0b3JzL3Rlc3RoYXJuZXNzX21hcmlvbmV0dGUuanMg
Yi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9l
eGVjdXRvcnMvdGVzdGhhcm5lc3NfbWFyaW9uZXR0ZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uZTJiNzBhMGFkOGYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2
ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9leGVjdXRvcnMv
dGVzdGhhcm5lc3NfbWFyaW9uZXR0ZS5qcwpAQCAtMCwwICsxLDMxIEBACit3aW5kb3cud3JhcHBl
ZEpTT2JqZWN0LnRpbWVvdXRfbXVsdGlwbGllciA9ICUodGltZW91dF9tdWx0aXBsaWVyKWQ7Cit3
aW5kb3cud3JhcHBlZEpTT2JqZWN0LmV4cGxpY2l0X3RpbWVvdXQgPSAlKGV4cGxpY2l0X3RpbWVv
dXQpZDsKKword2luZG93LndyYXBwZWRKU09iamVjdC5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdl
IiwgZnVuY3Rpb24gbGlzdGVuZXIoZXZlbnQpIHsKKyAgICBpZiAoZXZlbnQuZGF0YS50eXBlICE9
ICJjb21wbGV0ZSIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB3aW5kb3cud3JhcHBl
ZEpTT2JqZWN0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCBsaXN0ZW5lcik7CisgICAg
Y2xlYXJUaW1lb3V0KHRpbWVyKTsKKyAgICB2YXIgdGVzdHMgPSBldmVudC5kYXRhLnRlc3RzOwor
ICAgIHZhciBzdGF0dXMgPSBldmVudC5kYXRhLnN0YXR1czsKKworICAgIHZhciBzdWJ0ZXN0X3Jl
c3VsdHMgPSB0ZXN0cy5tYXAoZnVuY3Rpb24gKHgpIHsKKyAgICAgICAgcmV0dXJuIFt4Lm5hbWUs
IHguc3RhdHVzLCB4Lm1lc3NhZ2UsIHguc3RhY2tdCisgICAgfSk7CisKKyAgICBtYXJpb25ldHRl
U2NyaXB0RmluaXNoZWQoWyIlKHVybClzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXR1cy5zdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMubWVz
c2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cy5zdGFjaywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnRlc3RfcmVzdWx0c10pOworfSwgZmFsc2UpOwor
Cit3aW5kb3cud3JhcHBlZEpTT2JqZWN0LndpbiA9IHdpbmRvdy5vcGVuKCIlKGFic191cmwpcyIs
ICIlKHdpbmRvd19pZClzIik7CisKK3ZhciB0aW1lciA9IG51bGw7CitpZiAoJSh0aW1lb3V0KXMp
IHsKKyAgICB0aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgIHdpbmRvdy53
cmFwcGVkSlNPYmplY3Qud2luLnRpbWVvdXQoKTsKKyAgICB9LCAlKHRpbWVvdXQpcyk7Cit9CmRp
ZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dw
dHJ1bm5lci9leGVjdXRvcnMvdGVzdGhhcm5lc3Nfc2Vydm9kcml2ZXIuanMgYi9XZWJEcml2ZXJU
ZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9leGVjdXRvcnMvdGVz
dGhhcm5lc3Nfc2Vydm9kcml2ZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLmQ3MzFjYzA0ZDcwCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1w
b3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvZXhlY3V0b3JzL3Rlc3RoYXJuZXNz
X3NlcnZvZHJpdmVyLmpzCkBAIC0wLDAgKzEsMiBAQAord2luZG93Ll9fd2RfcmVzdWx0c19jYWxs
YmFja19fID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXTsKK3dpbmRvdy5fX3dkX3Jl
c3VsdHNfdGltZXJfXyA9IHNldFRpbWVvdXQodGltZW91dCwgJSh0aW1lb3V0KXMpOwpkaWZmIC0t
Z2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5u
ZXIvZXhlY3V0b3JzL3Rlc3RoYXJuZXNzX3dlYmRyaXZlci5qcyBiL1dlYkRyaXZlclRlc3RzL2lt
cG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2V4ZWN1dG9ycy90ZXN0aGFybmVz
c193ZWJkcml2ZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmY1
Y2JmZjllZjc3Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNj
L3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvZXhlY3V0b3JzL3Rlc3RoYXJuZXNzX3dlYmRyaXZl
ci5qcwpAQCAtMCwwICsxLDI5IEBACit2YXIgY2FsbGJhY2sgPSBhcmd1bWVudHNbYXJndW1lbnRz
Lmxlbmd0aCAtIDFdOword2luZG93LnRpbWVvdXRfbXVsdGlwbGllciA9ICUodGltZW91dF9tdWx0
aXBsaWVyKWQ7CisKK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgZnVuY3Rpb24g
ZihldmVudCkgeworICBpZiAoZXZlbnQuZGF0YS50eXBlICE9ICJjb21wbGV0ZSIpIHsKKyAgICBy
ZXR1cm47CisgIH0KKyAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCBmKTsK
KworICB2YXIgdGVzdHMgPSBldmVudC5kYXRhLnRlc3RzOworICB2YXIgc3RhdHVzID0gZXZlbnQu
ZGF0YS5zdGF0dXM7CisKKyAgdmFyIHN1YnRlc3RfcmVzdWx0cyA9IHRlc3RzLm1hcChmdW5jdGlv
bih4KSB7CisgICAgcmV0dXJuIFt4Lm5hbWUsIHguc3RhdHVzLCB4Lm1lc3NhZ2UsIHguc3RhY2td
CisgIH0pOworICBjbGVhclRpbWVvdXQodGltZXIpOworICBjYWxsYmFjayhbIiUodXJsKXMiLAor
ICAgICAgICAgICAgc3RhdHVzLnN0YXR1cywKKyAgICAgICAgICAgIHN0YXR1cy5tZXNzYWdlLAor
ICAgICAgICAgICAgc3RhdHVzLnN0YWNrLAorICAgICAgICAgICAgc3VidGVzdF9yZXN1bHRzXSk7
Cit9LCBmYWxzZSk7CisKK3dpbmRvdy53aW4gPSB3aW5kb3cub3BlbigiJShhYnNfdXJsKXMiLCAi
JSh3aW5kb3dfaWQpcyIpOworCit2YXIgdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewor
ICB3aW5kb3cud2luLnRpbWVvdXQoKTsKKyAgd2luZG93Lndpbi5jbG9zZSgpOworfSwgJSh0aW1l
b3V0KXMpOwpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dw
dHJ1bm5lci93cHRydW5uZXIvZXhwZWN0ZWQucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93
M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9leHBlY3RlZC5weQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZjA2YWJiOTQ2YWYKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9leHBl
Y3RlZC5weQpAQCAtMCwwICsxLDE0IEBACitpbXBvcnQgb3MKKworCitkZWYgZXhwZWN0ZWRfcGF0
aChtZXRhZGF0YV9wYXRoLCB0ZXN0X3BhdGgpOgorICAgICIiIlBhdGggdG8gdGhlIGV4cGVjdGF0
aW9uIGRhdGEgZmlsZSBmb3IgYSBnaXZlbiB0ZXN0IHBhdGguCisKKyAgICBUaGlzIGlzIGRlZmlu
ZWQgYXMgbWV0YWRhdGFfcGF0aCArIHJlbGF0aXZlX3Rlc3RfcGF0aCArIC5pbmkKKworICAgIDpw
YXJhbSBtZXRhZGF0YV9wYXRoOiBQYXRoIHRvIHRoZSByb290IG9mIHRoZSBtZXRhZGF0YSBkaXJl
Y3RvcnkKKyAgICA6cGFyYW0gdGVzdF9wYXRoOiBSZWxhdGl2ZSBwYXRoIHRvIHRoZSB0ZXN0IGZp
bGUgZnJvbSB0aGUgdGVzdCByb290CisgICAgIiIiCisgICAgYXJncyA9IGxpc3QodGVzdF9wYXRo
LnNwbGl0KCIvIikpCisgICAgYXJnc1stMV0gKz0gIi5pbmkiCisgICAgcmV0dXJuIG9zLnBhdGgu
am9pbihtZXRhZGF0YV9wYXRoLCAqYXJncykKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2lt
cG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2ZvbnQucHkgYi9XZWJEcml2ZXJU
ZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9mb250LnB5Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mZGYxYjEyNDllMgotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0
cnVubmVyL2ZvbnQucHkKQEAgLTAsMCArMSwxMTAgQEAKK2ltcG9ydCBjdHlwZXMKK2ltcG9ydCBs
b2dnaW5nCitpbXBvcnQgb3MKK2ltcG9ydCBwbGF0Zm9ybQorCitmcm9tIHNodXRpbCBpbXBvcnQg
Y29weTIsIHJtdHJlZQorZnJvbSBzdWJwcm9jZXNzIGltcG9ydCBjYWxsCisKK0hFUkUgPSBvcy5w
YXRoLnNwbGl0KF9fZmlsZV9fKVswXQorU1lTVEVNID0gcGxhdGZvcm0uc3lzdGVtKCkubG93ZXIo
KQorCisKK2NsYXNzIEZvbnRJbnN0YWxsZXIob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgZm9udF9kaXI9Tm9uZSwgKipmb250cyk6CisgICAgICAgIHNlbGYuZm9udF9kaXIgPSBmb250
X2RpcgorICAgICAgICBzZWxmLmluc3RhbGxlZF9mb250cyA9IEZhbHNlCisgICAgICAgIHNlbGYu
Y3JlYXRlZF9kaXIgPSBGYWxzZQorICAgICAgICBzZWxmLmZvbnRzID0gZm9udHMKKworICAgIGRl
ZiBfX2VudGVyX18oc2VsZiwgb3B0aW9ucz1Ob25lKToKKyAgICAgICAgZm9yIF8sIGZvbnRfcGF0
aCBpbiBzZWxmLmZvbnRzLml0ZW1zKCk6CisgICAgICAgICAgICBmb250X25hbWUgPSBmb250X3Bh
dGguc3BsaXQoJy8nKVstMV0KKyAgICAgICAgICAgIGluc3RhbGwgPSBnZXRhdHRyKHNlbGYsICdp
bnN0YWxsXyVzX2ZvbnQnICUgU1lTVEVNLCBOb25lKQorICAgICAgICAgICAgaWYgbm90IGluc3Rh
bGw6CisgICAgICAgICAgICAgICAgbG9nZ2luZy53YXJuaW5nKCdGb250IGluc3RhbGxhdGlvbiBu
b3Qgc3VwcG9ydGVkIG9uICVzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1lT
VEVNKQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgaWYgaW5zdGFs
bChmb250X25hbWUsIGZvbnRfcGF0aCk6CisgICAgICAgICAgICAgICAgc2VsZi5pbnN0YWxsZWRf
Zm9udHMgPSBUcnVlCisgICAgICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCdJbnN0YWxsZWQgZm9u
dDogJXMnLCBmb250X25hbWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxv
Z2dpbmcud2FybmluZygnVW5hYmxlIHRvIGluc3RhbGwgZm9udDogJXMnLCBmb250X25hbWUpCisK
KyAgICBkZWYgX19leGl0X18oc2VsZiwgZXhjX3R5cGUsIGV4Y192YWwsIGV4Y190Yik6CisgICAg
ICAgIGlmIG5vdCBzZWxmLmluc3RhbGxlZF9mb250czoKKyAgICAgICAgICAgIHJldHVybiBGYWxz
ZQorCisgICAgICAgIGZvciBfLCBmb250X3BhdGggaW4gc2VsZi5mb250cy5pdGVtcygpOgorICAg
ICAgICAgICAgZm9udF9uYW1lID0gZm9udF9wYXRoLnNwbGl0KCcvJylbLTFdCisgICAgICAgICAg
ICByZW1vdmUgPSBnZXRhdHRyKHNlbGYsICdyZW1vdmVfJXNfZm9udCcgJSBTWVNURU0sIE5vbmUp
CisgICAgICAgICAgICBpZiBub3QgcmVtb3ZlOgorICAgICAgICAgICAgICAgIGxvZ2dpbmcud2Fy
bmluZygnRm9udCByZW1vdmFsIG5vdCBzdXBwb3J0ZWQgb24gJXMnLCBTWVNURU0pCisgICAgICAg
ICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICBpZiByZW1vdmUoZm9udF9uYW1lLCBm
b250X3BhdGgpOgorICAgICAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygnUmVtb3ZlZCBmb250OiAl
cycsIGZvbnRfbmFtZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbG9nZ2lu
Zy53YXJuaW5nKCdVbmFibGUgdG8gcmVtb3ZlIGZvbnQ6ICVzJywgZm9udF9uYW1lKQorCisgICAg
ZGVmIGluc3RhbGxfbGludXhfZm9udChzZWxmLCBmb250X25hbWUsIGZvbnRfcGF0aCk6CisgICAg
ICAgIGlmIG5vdCBzZWxmLmZvbnRfZGlyOgorICAgICAgICAgICAgc2VsZi5mb250X2RpciA9IG9z
LnBhdGguam9pbihvcy5wYXRoLmV4cGFuZHVzZXIoJ34nKSwgJy5mb250cycpCisgICAgICAgIGlm
IG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLmZvbnRfZGlyKToKKyAgICAgICAgICAgIG9zLm1ha2Vk
aXJzKHNlbGYuZm9udF9kaXIpCisgICAgICAgICAgICBzZWxmLmNyZWF0ZWRfZGlyID0gVHJ1ZQor
ICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHNlbGYuZm9udF9kaXIs
IGZvbnRfbmFtZSkpOgorICAgICAgICAgICAgY29weTIoZm9udF9wYXRoLCBzZWxmLmZvbnRfZGly
KQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmY19jYWNoZV9yZXR1cm5jb2RlID0gY2FsbCgn
ZmMtY2FjaGUnKQorICAgICAgICAgICAgcmV0dXJuIG5vdCBmY19jYWNoZV9yZXR1cm5jb2RlCisg
ICAgICAgIGV4Y2VwdCBPU0Vycm9yOiAgIyBJZiBmb250Y29uZmlnIGRvZXNuJ3QgZXhpc3QsIHJl
dHVybiBGYWxzZQorICAgICAgICAgICAgbG9nZ2luZy5lcnJvcignZm9udGNvbmZpZyBub3QgYXZh
aWxhYmxlIG9uIHRoaXMgTGludXggc3lzdGVtLicpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UK
KworICAgIGRlZiBpbnN0YWxsX2Rhcndpbl9mb250KHNlbGYsIGZvbnRfbmFtZSwgZm9udF9wYXRo
KToKKyAgICAgICAgaWYgbm90IHNlbGYuZm9udF9kaXI6CisgICAgICAgICAgICBzZWxmLmZvbnRf
ZGlyID0gb3MucGF0aC5qb2luKG9zLnBhdGguZXhwYW5kdXNlcignficpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTGlicmFyeS9Gb250cycpCisgICAgICAgIGlm
IG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLmZvbnRfZGlyKToKKyAgICAgICAgICAgIG9zLm1ha2Vk
aXJzKHNlbGYuZm9udF9kaXIpCisgICAgICAgICAgICBzZWxmLmNyZWF0ZWRfZGlyID0gVHJ1ZQor
ICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHNlbGYuZm9udF9kaXIs
IGZvbnRfbmFtZSkpOgorICAgICAgICAgICAgY29weTIoZm9udF9wYXRoLCBzZWxmLmZvbnRfZGly
KQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIGluc3RhbGxfd2luZG93c19mb250KHNl
bGYsIF8sIGZvbnRfcGF0aCk6CisgICAgICAgIGh3bmRfYnJvYWRjYXN0ID0gMHhGRkZGCisgICAg
ICAgIHdtX2ZvbnRjaGFuZ2UgPSAweDAwMUQKKworICAgICAgICBnZGkzMiA9IGN0eXBlcy5XaW5E
TEwoJ2dkaTMyJykKKyAgICAgICAgaWYgZ2RpMzIuQWRkRm9udFJlc291cmNlVyhmb250X3BhdGgp
OgorICAgICAgICAgICAgcmV0dXJuIGJvb2woY3R5cGVzLndpbmRsbC51c2VyMzIuU2VuZE1lc3Nh
Z2VXKGh3bmRfYnJvYWRjYXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHdtX2ZvbnRjaGFuZ2UpKQorCisgICAgZGVmIHJlbW92ZV9s
aW51eF9mb250KHNlbGYsIGZvbnRfbmFtZSwgXyk6CisgICAgICAgIGlmIHNlbGYuY3JlYXRlZF9k
aXI6CisgICAgICAgICAgICBybXRyZWUoc2VsZi5mb250X2RpcikKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIG9zLnJlbW92ZSgnJXMvJXMnICUgKHNlbGYuZm9udF9kaXIsIGZvbnRfbmFtZSkp
CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZjX2NhY2hlX3JldHVybmNvZGUgPSBjYWxsKCdm
Yy1jYWNoZScpCisgICAgICAgICAgICByZXR1cm4gbm90IGZjX2NhY2hlX3JldHVybmNvZGUKKyAg
ICAgICAgZXhjZXB0IE9TRXJyb3I6ICAjIElmIGZvbnRjb25maWcgZG9lc24ndCBleGlzdCwgcmV0
dXJuIEZhbHNlCisgICAgICAgICAgICBsb2dnaW5nLmVycm9yKCdmb250Y29uZmlnIG5vdCBhdmFp
bGFibGUgb24gdGhpcyBMaW51eCBzeXN0ZW0uJykKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQor
CisgICAgZGVmIHJlbW92ZV9kYXJ3aW5fZm9udChzZWxmLCBmb250X25hbWUsIF8pOgorICAgICAg
ICBpZiBzZWxmLmNyZWF0ZWRfZGlyOgorICAgICAgICAgICAgcm10cmVlKHNlbGYuZm9udF9kaXIp
CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvcy5yZW1vdmUob3MucGF0aC5qb2luKHNlbGYu
Zm9udF9kaXIsIGZvbnRfbmFtZSkpCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgcmVt
b3ZlX3dpbmRvd3NfZm9udChzZWxmLCBfLCBmb250X3BhdGgpOgorICAgICAgICBod25kX2Jyb2Fk
Y2FzdCA9IDB4RkZGRgorICAgICAgICB3bV9mb250Y2hhbmdlID0gMHgwMDFECisKKyAgICAgICAg
Z2RpMzIgPSBjdHlwZXMuV2luRExMKCdnZGkzMicpCisgICAgICAgIGlmIGdkaTMyLlJlbW92ZUZv
bnRSZXNvdXJjZVcoZm9udF9wYXRoKToKKyAgICAgICAgICAgIHJldHVybiBib29sKGN0eXBlcy53
aW5kbGwudXNlcjMyLlNlbmRNZXNzYWdlVyhod25kX2Jyb2FkY2FzdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3bV9mb250Y2hhbmdl
KSkKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5u
ZXIvd3B0cnVubmVyL2Zvcm1hdHRlcnMucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mv
dG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9mb3JtYXR0ZXJzLnB5Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wZTg4OGNlMjY5ZAotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2Zvcm1h
dHRlcnMucHkKQEAgLTAsMCArMSw1NCBAQAoraW1wb3J0IGpzb24KKworZnJvbSBtb3psb2cuc3Ry
dWN0dXJlZC5mb3JtYXR0ZXJzLmJhc2UgaW1wb3J0IEJhc2VGb3JtYXR0ZXIKKworCitjbGFzcyBX
cHRyZXBvcnRGb3JtYXR0ZXIoQmFzZUZvcm1hdHRlcik6CisgICAgIiIiRm9ybWF0dGVyIHRoYXQg
cHJvZHVjZXMgcmVzdWx0cyBpbiB0aGUgZm9ybWF0IHRoYXQgd3ByZXBvcnQgZXhwZWN0cy4iIiIK
KworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5yYXdfcmVzdWx0cyA9IHt9
CisKKyAgICBkZWYgc3VpdGVfZW5kKHNlbGYsIGRhdGEpOgorICAgICAgICByZXN1bHRzID0ge30K
KyAgICAgICAgcmVzdWx0c1sicmVzdWx0cyJdID0gW10KKyAgICAgICAgZm9yIHRlc3RfbmFtZSBp
biBzZWxmLnJhd19yZXN1bHRzOgorICAgICAgICAgICAgcmVzdWx0ID0geyJ0ZXN0IjogdGVzdF9u
YW1lfQorICAgICAgICAgICAgcmVzdWx0LnVwZGF0ZShzZWxmLnJhd19yZXN1bHRzW3Rlc3RfbmFt
ZV0pCisgICAgICAgICAgICByZXN1bHRzWyJyZXN1bHRzIl0uYXBwZW5kKHJlc3VsdCkKKyAgICAg
ICAgcmV0dXJuIGpzb24uZHVtcHMocmVzdWx0cykKKworICAgIGRlZiBmaW5kX29yX2NyZWF0ZV90
ZXN0KHNlbGYsIGRhdGEpOgorICAgICAgICB0ZXN0X25hbWUgPSBkYXRhWyJ0ZXN0Il0KKyAgICAg
ICAgaWYgdGVzdF9uYW1lIG5vdCBpbiBzZWxmLnJhd19yZXN1bHRzOgorICAgICAgICAgICAgc2Vs
Zi5yYXdfcmVzdWx0c1t0ZXN0X25hbWVdID0geworICAgICAgICAgICAgICAgICJzdWJ0ZXN0cyI6
IFtdLAorICAgICAgICAgICAgICAgICJzdGF0dXMiOiAiIiwKKyAgICAgICAgICAgICAgICAibWVz
c2FnZSI6IE5vbmUKKyAgICAgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHNlbGYucmF3X3Jlc3Vs
dHNbdGVzdF9uYW1lXQorCisgICAgZGVmIGNyZWF0ZV9zdWJ0ZXN0KHNlbGYsIGRhdGEpOgorICAg
ICAgICB0ZXN0ID0gc2VsZi5maW5kX29yX2NyZWF0ZV90ZXN0KGRhdGEpCisgICAgICAgIHN1YnRl
c3RfbmFtZSA9IGRhdGFbInN1YnRlc3QiXQorCisgICAgICAgIHN1YnRlc3QgPSB7CisgICAgICAg
ICAgICAibmFtZSI6IHN1YnRlc3RfbmFtZSwKKyAgICAgICAgICAgICJzdGF0dXMiOiAiIiwKKyAg
ICAgICAgICAgICJtZXNzYWdlIjogTm9uZQorICAgICAgICB9CisgICAgICAgIHRlc3RbInN1YnRl
c3RzIl0uYXBwZW5kKHN1YnRlc3QpCisKKyAgICAgICAgcmV0dXJuIHN1YnRlc3QKKworICAgIGRl
ZiB0ZXN0X3N0YXR1cyhzZWxmLCBkYXRhKToKKyAgICAgICAgc3VidGVzdCA9IHNlbGYuY3JlYXRl
X3N1YnRlc3QoZGF0YSkKKyAgICAgICAgc3VidGVzdFsic3RhdHVzIl0gPSBkYXRhWyJzdGF0dXMi
XQorICAgICAgICBpZiAibWVzc2FnZSIgaW4gZGF0YToKKyAgICAgICAgICAgIHN1YnRlc3RbIm1l
c3NhZ2UiXSA9IGRhdGFbIm1lc3NhZ2UiXQorCisgICAgZGVmIHRlc3RfZW5kKHNlbGYsIGRhdGEp
OgorICAgICAgICB0ZXN0ID0gc2VsZi5maW5kX29yX2NyZWF0ZV90ZXN0KGRhdGEpCisgICAgICAg
IHRlc3RbInN0YXR1cyJdID0gZGF0YVsic3RhdHVzIl0KKyAgICAgICAgaWYgIm1lc3NhZ2UiIGlu
IGRhdGE6CisgICAgICAgICAgICB0ZXN0WyJtZXNzYWdlIl0gPSBkYXRhWyJtZXNzYWdlIl0KZGlm
ZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0
cnVubmVyL2hvc3RzLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1
bm5lci93cHRydW5uZXIvaG9zdHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLjkxNWMxN2YxYjMxCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1w
b3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvaG9zdHMucHkKQEAgLTAsMCArMSwx
MDAgQEAKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgdW5pY29kZV9saXRlcmFscworCisKK2NsYXNz
IEhvc3RzTGluZShvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpcF9hZGRyZXNzLCBj
YW5vbmljYWxfaG9zdG5hbWUsIGFsaWFzZXM9Tm9uZSwgY29tbWVudD1Ob25lKToKKyAgICAgICAg
c2VsZi5pcF9hZGRyZXNzID0gaXBfYWRkcmVzcworICAgICAgICBzZWxmLmNhbm9uaWNhbF9ob3N0
bmFtZSA9IGNhbm9uaWNhbF9ob3N0bmFtZQorICAgICAgICBzZWxmLmFsaWFzZXMgPSBhbGlhc2Vz
IGlmIGFsaWFzZXMgaXMgbm90IE5vbmUgZWxzZSBbXQorICAgICAgICBzZWxmLmNvbW1lbnQgPSBj
b21tZW50CisgICAgICAgIGlmIHNlbGYuaXBfYWRkcmVzcyBpcyBOb25lOgorICAgICAgICAgICAg
YXNzZXJ0IHNlbGYuY2Fub25pY2FsX2hvc3RuYW1lIGlzIE5vbmUKKyAgICAgICAgICAgIGFzc2Vy
dCBub3Qgc2VsZi5hbGlhc2VzCisgICAgICAgICAgICBhc3NlcnQgc2VsZi5jb21tZW50IGlzIG5v
dCBOb25lCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZnJvbV9zdHJpbmcoY2xzLCBsaW5l
KToKKyAgICAgICAgaWYgbm90IGxpbmUuc3RyaXAoKToKKyAgICAgICAgICAgIHJldHVybgorCisg
ICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKKworICAgICAgICBpcF9hZGRyZXNzID0gTm9uZQor
ICAgICAgICBjYW5vbmljYWxfaG9zdG5hbWUgPSBOb25lCisgICAgICAgIGFsaWFzZXMgPSBbXQor
ICAgICAgICBjb21tZW50ID0gTm9uZQorCisgICAgICAgIGNvbW1lbnRfcGFydHMgPSBsaW5lLnNw
bGl0KCIjIiwgMSkKKyAgICAgICAgaWYgbGVuKGNvbW1lbnRfcGFydHMpID4gMToKKyAgICAgICAg
ICAgIGNvbW1lbnQgPSBjb21tZW50X3BhcnRzWzFdCisKKyAgICAgICAgZGF0YSA9IGNvbW1lbnRf
cGFydHNbMF0uc3RyaXAoKQorCisgICAgICAgIGlmIGRhdGE6CisgICAgICAgICAgICBmaWVsZHMg
PSBkYXRhLnNwbGl0KCkKKyAgICAgICAgICAgIGlmIGxlbihmaWVsZHMpIDwgMjoKKyAgICAgICAg
ICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIGhvc3RzIGxpbmUiKQorCisgICAgICAg
ICAgICBpcF9hZGRyZXNzID0gZmllbGRzWzBdCisgICAgICAgICAgICBjYW5vbmljYWxfaG9zdG5h
bWUgPSBmaWVsZHNbMV0KKyAgICAgICAgICAgIGFsaWFzZXMgPSBmaWVsZHNbMjpdCisKKyAgICAg
ICAgcmV0dXJuIGNscyhpcF9hZGRyZXNzLCBjYW5vbmljYWxfaG9zdG5hbWUsIGFsaWFzZXMsIGNv
bW1lbnQpCisKKworY2xhc3MgSG9zdHNGaWxlKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNl
bGYpOgorICAgICAgICBzZWxmLmRhdGEgPSBbXQorICAgICAgICBzZWxmLmJ5X2hvc3RuYW1lID0g
e30KKworICAgIGRlZiBzZXRfaG9zdChzZWxmLCBob3N0KToKKyAgICAgICAgaWYgaG9zdC5jYW5v
bmljYWxfaG9zdG5hbWUgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuZGF0YS5hcHBlbmQoaG9z
dCkKKyAgICAgICAgZWxpZiBob3N0LmNhbm9uaWNhbF9ob3N0bmFtZSBpbiBzZWxmLmJ5X2hvc3Ru
YW1lOgorICAgICAgICAgICAgb2xkX2hvc3QgPSBzZWxmLmJ5X2hvc3RuYW1lW2hvc3QuY2Fub25p
Y2FsX2hvc3RuYW1lXQorICAgICAgICAgICAgb2xkX2hvc3QuaXBfYWRkcmVzcyA9IGhvc3QuaXBf
YWRkcmVzcworICAgICAgICAgICAgb2xkX2hvc3QuYWxpYXNlcyA9IGhvc3QuYWxpYXNlcworICAg
ICAgICAgICAgb2xkX2hvc3QuY29tbWVudCA9IGhvc3QuY29tbWVudAorICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgc2VsZi5kYXRhLmFwcGVuZChob3N0KQorICAgICAgICAgICAgc2VsZi5ieV9o
b3N0bmFtZVtob3N0LmNhbm9uaWNhbF9ob3N0bmFtZV0gPSBob3N0CisKKyAgICBAY2xhc3NtZXRo
b2QKKyAgICBkZWYgZnJvbV9maWxlKGNscywgZik6CisgICAgICAgIHJ2ID0gY2xzKCkKKyAgICAg
ICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgIGhvc3QgPSBIb3N0c0xpbmUuZnJvbV9zdHJp
bmcobGluZSkKKyAgICAgICAgICAgIGlmIGhvc3QgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAg
ICAgcnYuc2V0X2hvc3QoaG9zdCkKKyAgICAgICAgcmV0dXJuIHJ2CisKKyAgICBkZWYgdG9fc3Ry
aW5nKHNlbGYpOgorICAgICAgICBmaWVsZF93aWR0aHMgPSBbMCwgMF0KKyAgICAgICAgZm9yIGxp
bmUgaW4gc2VsZi5kYXRhOgorICAgICAgICAgICAgaWYgbGluZS5pcF9hZGRyZXNzIGlzIG5vdCBO
b25lOgorICAgICAgICAgICAgICAgIGZpZWxkX3dpZHRoc1swXSA9IG1heChmaWVsZF93aWR0aHNb
MF0sIGxlbihsaW5lLmlwX2FkZHJlc3MpKQorICAgICAgICAgICAgICAgIGZpZWxkX3dpZHRoc1sx
XSA9IG1heChmaWVsZF93aWR0aHNbMV0sIGxlbihsaW5lLmNhbm9uaWNhbF9ob3N0bmFtZSkpCisK
KyAgICAgICAgbGluZXMgPSBbXQorCisgICAgICAgIGZvciBob3N0IGluIHNlbGYuZGF0YToKKyAg
ICAgICAgICAgIGxpbmUgPSAiIgorICAgICAgICAgICAgaWYgaG9zdC5pcF9hZGRyZXNzIGlzIG5v
dCBOb25lOgorICAgICAgICAgICAgICAgIGlwX3N0cmluZyA9IGhvc3QuaXBfYWRkcmVzcy5sanVz
dChmaWVsZF93aWR0aHNbMF0pCisgICAgICAgICAgICAgICAgaG9zdG5hbWVfc3RyID0gaG9zdC5j
YW5vbmljYWxfaG9zdG5hbWUKKyAgICAgICAgICAgICAgICBpZiBob3N0LmFsaWFzZXM6CisgICAg
ICAgICAgICAgICAgICAgIGhvc3RuYW1lX3N0ciA9ICIlcyAlcyIgJSAoaG9zdG5hbWVfc3RyLmxq
dXN0KGZpZWxkX3dpZHRoc1sxXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIiAiLmpvaW4oaG9zdC5hbGlhc2VzKSkKKyAgICAgICAgICAgICAgICBsaW5l
ID0gIiVzICVzIiAlIChpcF9zdHJpbmcsIGhvc3RuYW1lX3N0cikKKyAgICAgICAgICAgIGlmIGhv
c3QuY29tbWVudDoKKyAgICAgICAgICAgICAgICBpZiBsaW5lOgorICAgICAgICAgICAgICAgICAg
ICBsaW5lICs9ICIgIgorICAgICAgICAgICAgICAgIGxpbmUgKz0gIiMlcyIgJSBob3N0LmNvbW1l
bnQKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZChsaW5lKQorCisgICAgICAgIGxpbmVzLmFwcGVu
ZCgiIikKKworICAgICAgICByZXR1cm4gIlxuIi5qb2luKGxpbmVzKQorCisgICAgZGVmIHRvX2Zp
bGUoc2VsZiwgZik6CisgICAgICAgIGYud3JpdGUoc2VsZi50b19zdHJpbmcoKS5lbmNvZGUoInV0
ZjgiKSkKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRy
dW5uZXIvd3B0cnVubmVyL21hbmlmZXN0ZXhwZWN0ZWQucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBv
cnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9tYW5pZmVzdGV4cGVjdGVkLnB5Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41ZDU3YjcwZTUxNwotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIv
d3B0cnVubmVyL21hbmlmZXN0ZXhwZWN0ZWQucHkKQEAgLTAsMCArMSwyNjIgQEAKK2ltcG9ydCBv
cworaW1wb3J0IHVybHBhcnNlCisKK2Zyb20gd3B0bWFuaWZlc3QuYmFja2VuZHMgaW1wb3J0IHN0
YXRpYworZnJvbSB3cHRtYW5pZmVzdC5iYWNrZW5kcy5zdGF0aWMgaW1wb3J0IE1hbmlmZXN0SXRl
bQorCitpbXBvcnQgZXhwZWN0ZWQKKworIiIiTWFuaWZlc3Qgc3RydWN0dXJlIHVzZWQgdG8gc3Rv
cmUgZXhwZWN0ZWQgcmVzdWx0cyBvZiBhIHRlc3QuCisKK0VhY2ggbWFuaWZlc3QgZmlsZSBpcyBy
ZXByZXNlbnRlZCBieSBhbiBFeHBlY3RlZE1hbmlmZXN0IHRoYXQKK2hhcyBvbmUgb3IgbW9yZSBU
ZXN0Tm9kZSBjaGlsZHJlbiwgb25lIHBlciB0ZXN0IGluIHRoZSBtYW5pZmVzdC4KK0VhY2ggVGVz
dE5vZGUgaGFzIHplcm8gb3IgbW9yZSBTdWJ0ZXN0Tm9kZSBjaGlsZHJlbiwgb25lIGZvciBlYWNo
Citrbm93biBzdWJ0ZXN0IG9mIHRoZSB0ZXN0LgorIiIiCisKK2RlZiBkYXRhX2Nsc19nZXR0ZXIo
b3V0cHV0X25vZGUsIHZpc2l0ZWRfbm9kZSk6CisgICAgIyB2aXNpdGVkX25vZGUgaXMgaW50ZW50
aW9uYWxseSB1bnVzZWQKKyAgICBpZiBvdXRwdXRfbm9kZSBpcyBOb25lOgorICAgICAgICByZXR1
cm4gRXhwZWN0ZWRNYW5pZmVzdAorICAgIGlmIGlzaW5zdGFuY2Uob3V0cHV0X25vZGUsIEV4cGVj
dGVkTWFuaWZlc3QpOgorICAgICAgICByZXR1cm4gVGVzdE5vZGUKKyAgICBpZiBpc2luc3RhbmNl
KG91dHB1dF9ub2RlLCBUZXN0Tm9kZSk6CisgICAgICAgIHJldHVybiBTdWJ0ZXN0Tm9kZQorICAg
IHJhaXNlIFZhbHVlRXJyb3IKKworCitkZWYgYm9vbF9wcm9wKG5hbWUsIG5vZGUpOgorICAgICIi
IkJvb2xlYW4gcHJvcGVydHkiIiIKKyAgICB0cnk6CisgICAgICAgIHJldHVybiBub2RlLmdldChu
YW1lKQorICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgcmV0dXJuIE5vbmUKKworCitkZWYg
dGFncyhub2RlKToKKyAgICAiIiJTZXQgb2YgdGFncyB0aGF0IGhhdmUgYmVlbiBhcHBsaWVkIHRv
IHRoZSB0ZXN0IiIiCisgICAgdHJ5OgorICAgICAgICB2YWx1ZSA9IG5vZGUuZ2V0KCJ0YWdzIikK
KyAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgKHN0ciwgdW5pY29kZSkpOgorICAgICAgICAg
ICAgcmV0dXJuIHt2YWx1ZX0KKyAgICAgICAgcmV0dXJuIHNldCh2YWx1ZSkKKyAgICBleGNlcHQg
S2V5RXJyb3I6CisgICAgICAgIHJldHVybiBzZXQoKQorCisKK2RlZiBwcmVmcyhub2RlKToKKyAg
ICBkZWYgdmFsdWUoaW5pX3ZhbHVlKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShpbmlfdmFsdWUs
IChzdHIsIHVuaWNvZGUpKToKKyAgICAgICAgICAgIHJldHVybiB0dXBsZShpbmlfdmFsdWUuc3Bs
aXQoIjoiLCAxKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAoaW5pX3ZhbHVl
LCBOb25lKQorCisgICAgdHJ5OgorICAgICAgICBub2RlX3ByZWZzID0gbm9kZS5nZXQoInByZWZz
IikKKyAgICAgICAgaWYgdHlwZShub2RlX3ByZWZzKSBpbiAoc3RyLCB1bmljb2RlKToKKyAgICAg
ICAgICAgIHByZWZzID0ge3ZhbHVlKG5vZGVfcHJlZnMpfQorICAgICAgICBydiA9IGRpY3QodmFs
dWUoaXRlbSkgZm9yIGl0ZW0gaW4gbm9kZV9wcmVmcykKKyAgICBleGNlcHQgS2V5RXJyb3I6Cisg
ICAgICAgIHJ2ID0ge30KKyAgICByZXR1cm4gcnYKKworCitjbGFzcyBFeHBlY3RlZE1hbmlmZXN0
KE1hbmlmZXN0SXRlbSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIHRlc3RfcGF0aCwg
dXJsX2Jhc2UpOgorICAgICAgICAiIiJPYmplY3QgcmVwcmVzZW50aW5nIGFsbCB0aGUgdGVzdHMg
aW4gYSBwYXJ0aWN1bGFyIG1hbmlmZXN0CisKKyAgICAgICAgOnBhcmFtIG5hbWU6IE5hbWUgb2Yg
dGhlIEFTVCBOb2RlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG9iamVjdC4KKyAgICAgICAgICAgICAg
ICAgICAgIFNob3VsZCBhbHdheXMgYmUgTm9uZSBzaW5jZSB0aGlzIHNob3VsZCBhbHdheXMgYmUg
YXNzb2NpYXRlZCB3aXRoCisgICAgICAgICAgICAgICAgICAgICB0aGUgcm9vdCBub2RlIG9mIHRo
ZSBBU1QuCisgICAgICAgIDpwYXJhbSB0ZXN0X3BhdGg6IFBhdGggb2YgdGhlIHRlc3QgZmlsZSBh
c3NvY2lhdGVkIHdpdGggdGhpcyBtYW5pZmVzdC4KKyAgICAgICAgOnBhcmFtIHVybF9iYXNlOiBC
YXNlIHVybCBmb3Igc2VydmluZyB0aGUgdGVzdHMgaW4gdGhpcyBtYW5pZmVzdAorICAgICAgICAi
IiIKKyAgICAgICAgaWYgbmFtZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVl
RXJyb3IoIkV4cGVjdGVkTWFuaWZlc3Qgc2hvdWxkIHJlcHJlc2VudCB0aGUgcm9vdCBub2RlIikK
KyAgICAgICAgaWYgdGVzdF9wYXRoIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVy
cm9yKCJFeHBlY3RlZE1hbmlmZXN0IHJlcXVpcmVzIGEgdGVzdCBwYXRoIikKKyAgICAgICAgaWYg
dXJsX2Jhc2UgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkV4cGVjdGVk
TWFuaWZlc3QgcmVxdWlyZXMgYSBiYXNlIHVybCIpCisgICAgICAgIE1hbmlmZXN0SXRlbS5fX2lu
aXRfXyhzZWxmLCBuYW1lKQorICAgICAgICBzZWxmLmNoaWxkX21hcCA9IHt9CisgICAgICAgIHNl
bGYudGVzdF9wYXRoID0gdGVzdF9wYXRoCisgICAgICAgIHNlbGYudXJsX2Jhc2UgPSB1cmxfYmFz
ZQorCisgICAgZGVmIGFwcGVuZChzZWxmLCBjaGlsZCk6CisgICAgICAgICIiIkFkZCBhIHRlc3Qg
dG8gdGhlIG1hbmlmZXN0IiIiCisgICAgICAgIE1hbmlmZXN0SXRlbS5hcHBlbmQoc2VsZiwgY2hp
bGQpCisgICAgICAgIHNlbGYuY2hpbGRfbWFwW2NoaWxkLmlkXSA9IGNoaWxkCisKKyAgICBkZWYg
X3JlbW92ZV9jaGlsZChzZWxmLCBjaGlsZCk6CisgICAgICAgIGRlbCBzZWxmLmNoaWxkX21hcFtj
aGlsZC5pZF0KKyAgICAgICAgTWFuaWZlc3RJdGVtLnJlbW92ZV9jaGlsZChzZWxmLCBjaGlsZCkK
KyAgICAgICAgYXNzZXJ0IGxlbihzZWxmLmNoaWxkX21hcCkgPT0gbGVuKHNlbGYuY2hpbGRyZW4p
CisKKyAgICBkZWYgZ2V0X3Rlc3Qoc2VsZiwgdGVzdF9pZCk6CisgICAgICAgICIiIkdldCBhIHRl
c3QgZnJvbSB0aGUgbWFuaWZlc3QgYnkgSUQKKworICAgICAgICA6cGFyYW0gdGVzdF9pZDogSUQg
b2YgdGhlIHRlc3QgdG8gcmV0dXJuLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5jaGlsZF9tYXAu
Z2V0KHRlc3RfaWQpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgdXJsKHNlbGYpOgorICAgICAg
ICByZXR1cm4gdXJscGFyc2UudXJsam9pbihzZWxmLnVybF9iYXNlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiLyIuam9pbihzZWxmLnRlc3RfcGF0aC5zcGxpdChvcy5wYXRoLnNl
cCkpKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGRpc2FibGVkKHNlbGYpOgorICAgICAgICBy
ZXR1cm4gYm9vbF9wcm9wKCJkaXNhYmxlZCIsIHNlbGYpCisKKyAgICBAcHJvcGVydHkKKyAgICBk
ZWYgcmVzdGFydF9hZnRlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIGJvb2xfcHJvcCgicmVzdGFy
dC1hZnRlciIsIHNlbGYpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbGVha3Moc2VsZik6Cisg
ICAgICAgIHJldHVybiBib29sX3Byb3AoImxlYWtzIiwgc2VsZikKKworICAgIEBwcm9wZXJ0eQor
ICAgIGRlZiB0YWdzKHNlbGYpOgorICAgICAgICByZXR1cm4gdGFncyhzZWxmKQorCisgICAgQHBy
b3BlcnR5CisgICAgZGVmIHByZWZzKHNlbGYpOgorICAgICAgICByZXR1cm4gcHJlZnMoc2VsZikK
KworCitjbGFzcyBEaXJlY3RvcnlNYW5pZmVzdChNYW5pZmVzdEl0ZW0pOgorICAgIEBwcm9wZXJ0
eQorICAgIGRlZiBkaXNhYmxlZChzZWxmKToKKyAgICAgICAgcmV0dXJuIGJvb2xfcHJvcCgiZGlz
YWJsZWQiLCBzZWxmKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHJlc3RhcnRfYWZ0ZXIoc2Vs
Zik6CisgICAgICAgIHJldHVybiBib29sX3Byb3AoInJlc3RhcnQtYWZ0ZXIiLCBzZWxmKQorCisg
ICAgQHByb3BlcnR5CisgICAgZGVmIGxlYWtzKHNlbGYpOgorICAgICAgICByZXR1cm4gYm9vbF9w
cm9wKCJsZWFrcyIsIHNlbGYpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgdGFncyhzZWxmKToK
KyAgICAgICAgcmV0dXJuIHRhZ3Moc2VsZikKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBwcmVm
cyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHByZWZzKHNlbGYpCisKKworY2xhc3MgVGVzdE5vZGUo
TWFuaWZlc3RJdGVtKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6CisgICAgICAgICIi
IlRyZWUgbm9kZSBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1bGFyIHRlc3QgaW4gYSBtYW5pZmVz
dAorCisgICAgICAgIDpwYXJhbSBuYW1lOiBuYW1lIG9mIHRoZSB0ZXN0IiIiCisgICAgICAgIGFz
c2VydCBuYW1lIGlzIG5vdCBOb25lCisgICAgICAgIE1hbmlmZXN0SXRlbS5fX2luaXRfXyhzZWxm
LCBuYW1lKQorICAgICAgICBzZWxmLnVwZGF0ZWRfZXhwZWN0ZWQgPSBbXQorICAgICAgICBzZWxm
Lm5ld19leHBlY3RlZCA9IFtdCisgICAgICAgIHNlbGYuc3VidGVzdHMgPSB7fQorICAgICAgICBz
ZWxmLmRlZmF1bHRfc3RhdHVzID0gTm9uZQorICAgICAgICBzZWxmLl9mcm9tX2ZpbGUgPSBUcnVl
CisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaXNfZW1wdHkoc2VsZik6CisgICAgICAgIHJlcXVp
cmVkX2tleXMgPSBzZXQoWyJ0eXBlIl0pCisgICAgICAgIGlmIHNldChzZWxmLl9kYXRhLmtleXMo
KSkgIT0gcmVxdWlyZWRfa2V5czoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBy
ZXR1cm4gYWxsKGNoaWxkLmlzX2VtcHR5IGZvciBjaGlsZCBpbiBzZWxmLmNoaWxkcmVuKQorCisg
ICAgQHByb3BlcnR5CisgICAgZGVmIHRlc3RfdHlwZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNl
bGYuZ2V0KCJ0eXBlIikKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBpZChzZWxmKToKKyAgICAg
ICAgcmV0dXJuIHVybHBhcnNlLnVybGpvaW4oc2VsZi5wYXJlbnQudXJsLCBzZWxmLm5hbWUpCisK
KyAgICBAcHJvcGVydHkKKyAgICBkZWYgZGlzYWJsZWQoc2VsZik6CisgICAgICAgIHJldHVybiBi
b29sX3Byb3AoImRpc2FibGVkIiwgc2VsZikKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiByZXN0
YXJ0X2FmdGVyKHNlbGYpOgorICAgICAgICByZXR1cm4gYm9vbF9wcm9wKCJyZXN0YXJ0LWFmdGVy
Iiwgc2VsZikKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBsZWFrcyhzZWxmKToKKyAgICAgICAg
cmV0dXJuIGJvb2xfcHJvcCgibGVha3MiLCBzZWxmKQorCisgICAgQHByb3BlcnR5CisgICAgZGVm
IHRhZ3Moc2VsZik6CisgICAgICAgIHJldHVybiB0YWdzKHNlbGYpCisKKyAgICBAcHJvcGVydHkK
KyAgICBkZWYgcHJlZnMoc2VsZik6CisgICAgICAgIHJldHVybiBwcmVmcyhzZWxmKQorCisgICAg
ZGVmIGFwcGVuZChzZWxmLCBub2RlKToKKyAgICAgICAgIiIiQWRkIGEgc3VidGVzdCB0byB0aGUg
Y3VycmVudCB0ZXN0CisKKyAgICAgICAgOnBhcmFtIG5vZGU6IEFTVCBOb2RlIGFzc29jaWF0ZWQg
d2l0aCB0aGUgc3VidGVzdCIiIgorICAgICAgICBjaGlsZCA9IE1hbmlmZXN0SXRlbS5hcHBlbmQo
c2VsZiwgbm9kZSkKKyAgICAgICAgc2VsZi5zdWJ0ZXN0c1tjaGlsZC5uYW1lXSA9IGNoaWxkCisK
KyAgICBkZWYgZ2V0X3N1YnRlc3Qoc2VsZiwgbmFtZSk6CisgICAgICAgICIiIkdldCB0aGUgU3Vi
dGVzdE5vZGUgY29ycmVzcG9uZGluZyB0byBhIHBhcnRpY3VsYXIgc3VidGVzdCwgYnkgbmFtZQor
CisgICAgICAgIDpwYXJhbSBuYW1lOiBOYW1lIG9mIHRoZSBub2RlIHRvIHJldHVybiIiIgorICAg
ICAgICBpZiBuYW1lIGluIHNlbGYuc3VidGVzdHM6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5z
dWJ0ZXN0c1tuYW1lXQorICAgICAgICByZXR1cm4gTm9uZQorCisKK2NsYXNzIFN1YnRlc3ROb2Rl
KFRlc3ROb2RlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6CisgICAgICAgICIiIlRy
ZWUgbm9kZSBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1bGFyIHN1YnRlc3QgaW4gYSBtYW5pZmVz
dAorCisgICAgICAgIDpwYXJhbSBuYW1lOiBuYW1lIG9mIHRoZSBzdWJ0ZXN0IiIiCisgICAgICAg
IFRlc3ROb2RlLl9faW5pdF9fKHNlbGYsIG5hbWUpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYg
aXNfZW1wdHkoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2RhdGE6CisgICAgICAgICAgICByZXR1
cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworCitkZWYgZ2V0X21hbmlmZXN0KG1ldGFk
YXRhX3Jvb3QsIHRlc3RfcGF0aCwgdXJsX2Jhc2UsIHJ1bl9pbmZvKToKKyAgICAiIiJHZXQgdGhl
IEV4cGVjdGVkTWFuaWZlc3QgZm9yIGEgcGFydGljdWxhciB0ZXN0IHBhdGgsIG9yIE5vbmUgaWYg
dGhlcmUgaXMgbm8KKyAgICBtZXRhZGF0YSBzdG9yZWQgZm9yIHRoYXQgdGVzdCBwYXRoLgorCisg
ICAgOnBhcmFtIG1ldGFkYXRhX3Jvb3Q6IEFic29sdXRlIHBhdGggdG8gdGhlIHJvb3Qgb2YgdGhl
IG1ldGFkYXRhIGRpcmVjdG9yeQorICAgIDpwYXJhbSB0ZXN0X3BhdGg6IFBhdGggdG8gdGhlIHRl
c3QocykgcmVsYXRpdmUgdG8gdGhlIHRlc3Qgcm9vdAorICAgIDpwYXJhbSB1cmxfYmFzZTogQmFz
ZSB1cmwgZm9yIHNlcnZpbmcgdGhlIHRlc3RzIGluIHRoaXMgbWFuaWZlc3QKKyAgICA6cGFyYW0g
cnVuX2luZm86IERpY3Rpb25hcnkgb2YgcHJvcGVydGllcyBvZiB0aGUgdGVzdCBydW4gZm9yIHdo
aWNoIHRoZSBleHBlY3RhdGlvbgorICAgICAgICAgICAgICAgICAgICAgdmFsdWVzIHNob3VsZCBi
ZSBjb21wdXRlZC4KKyAgICAiIiIKKyAgICBtYW5pZmVzdF9wYXRoID0gZXhwZWN0ZWQuZXhwZWN0
ZWRfcGF0aChtZXRhZGF0YV9yb290LCB0ZXN0X3BhdGgpCisgICAgdHJ5OgorICAgICAgICB3aXRo
IG9wZW4obWFuaWZlc3RfcGF0aCkgYXMgZjoKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWMuY29t
cGlsZShmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bl9pbmZvLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfY2xzX2dldHRlcj1kYXRhX2Nsc19n
ZXR0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9wYXRoPXRlc3Rf
cGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxfYmFzZT11cmxfYmFz
ZSkKKyAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgcmV0dXJuIE5vbmUKKworZGVmIGdldF9k
aXJfbWFuaWZlc3QocGF0aCwgcnVuX2luZm8pOgorICAgICIiIkdldCB0aGUgRXhwZWN0ZWRNYW5p
ZmVzdCBmb3IgYSBwYXJ0aWN1bGFyIHRlc3QgcGF0aCwgb3IgTm9uZSBpZiB0aGVyZSBpcyBubwor
ICAgIG1ldGFkYXRhIHN0b3JlZCBmb3IgdGhhdCB0ZXN0IHBhdGguCisKKyAgICA6cGFyYW0gcGF0
aDogRnVsbCBwYXRoIHRvIHRoZSBpbmkgZmlsZQorICAgIDpwYXJhbSBydW5faW5mbzogRGljdGlv
bmFyeSBvZiBwcm9wZXJ0aWVzIG9mIHRoZSB0ZXN0IHJ1biBmb3Igd2hpY2ggdGhlIGV4cGVjdGF0
aW9uCisgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgc2hvdWxkIGJlIGNvbXB1dGVkLgorICAg
ICIiIgorICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKHBhdGgpIGFzIGY6CisgICAgICAgICAg
ICByZXR1cm4gc3RhdGljLmNvbXBpbGUoZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBydW5faW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX2Ns
c19nZXR0ZXI9bGFtYmRhIHgseTogRGlyZWN0b3J5TWFuaWZlc3QpCisgICAgZXhjZXB0IElPRXJy
b3I6CisgICAgICAgIHJldHVybiBOb25lCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBv
cnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9tYW5pZmVzdGluY2x1ZGUucHkgYi9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9tYW5p
ZmVzdGluY2x1ZGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmE2
OGZkZWIzOWJjCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNj
L3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvbWFuaWZlc3RpbmNsdWRlLnB5CkBAIC0wLDAgKzEs
MTU0IEBACisiIiJNYW5pZmVzdCBzdHJ1Y3R1cmUgdXNlZCB0byBzdG9yZSBwYXRocyB0aGF0IHNo
b3VsZCBiZSBpbmNsdWRlZCBpbiBhIHRlc3QgcnVuLgorCitUaGUgbWFuaWZlc3QgaXMgcmVwcmVz
ZW50ZWQgYnkgYSB0cmVlIG9mIEluY2x1ZGVNYW5pZmVzdCBvYmplY3RzLCB0aGUgcm9vdAorcmVw
cmVzZW50aW5nIHRoZSBmaWxlIGFuZCBlYWNoIHN1Ym5vZGUgcmVwcmVzZW50aW5nIGEgc3ViZGly
ZWN0b3J5IHRoYXQgc2hvdWxkCitiZSBpbmNsdWRlZCBvciBleGNsdWRlZC4KKyIiIgoraW1wb3J0
IGdsb2IKK2ltcG9ydCBvcworaW1wb3J0IHVybHBhcnNlCisKK2Zyb20gd3B0bWFuaWZlc3Qubm9k
ZSBpbXBvcnQgRGF0YU5vZGUKK2Zyb20gd3B0bWFuaWZlc3QuYmFja2VuZHMgaW1wb3J0IGNvbmRp
dGlvbmFsCitmcm9tIHdwdG1hbmlmZXN0LmJhY2tlbmRzLmNvbmRpdGlvbmFsIGltcG9ydCBNYW5p
ZmVzdEl0ZW0KKworCitjbGFzcyBJbmNsdWRlTWFuaWZlc3QoTWFuaWZlc3RJdGVtKToKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgbm9kZSk6CisgICAgICAgICIiIk5vZGUgaW4gYSB0cmVlIHN0cnVj
dHVyZSByZXByZXNlbnRpbmcgdGhlIHBhdGhzCisgICAgICAgIHRoYXQgc2hvdWxkIGJlIGluY2x1
ZGVkIG9yIGV4Y2x1ZGVkIGZyb20gdGhlIHRlc3QgcnVuLgorCisgICAgICAgIDpwYXJhbSBub2Rl
OiBBU1QgTm9kZSBjb3JyZXNwb25kaW5nIHRvIHRoaXMgTm9kZS4KKyAgICAgICAgIiIiCisgICAg
ICAgIE1hbmlmZXN0SXRlbS5fX2luaXRfXyhzZWxmLCBub2RlKQorICAgICAgICBzZWxmLmNoaWxk
X21hcCA9IHt9CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgY3JlYXRlKGNscyk6CisgICAg
ICAgICIiIkNyZWF0ZSBhbiBlbXB0eSBJbmNsdWRlTWFuaWZlc3QgdHJlZSIiIgorICAgICAgICBu
b2RlID0gRGF0YU5vZGUoTm9uZSkKKyAgICAgICAgcmV0dXJuIGNscyhub2RlKQorCisgICAgZGVm
IHNldF9kZWZhdWx0cyhzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuaGFzX2tleSgic2tpcCIp
OgorICAgICAgICAgICAgc2VsZi5zZXQoInNraXAiLCAiRmFsc2UiKQorCisgICAgZGVmIGFwcGVu
ZChzZWxmLCBjaGlsZCk6CisgICAgICAgIE1hbmlmZXN0SXRlbS5hcHBlbmQoc2VsZiwgY2hpbGQp
CisgICAgICAgIHNlbGYuY2hpbGRfbWFwW2NoaWxkLm5hbWVdID0gY2hpbGQKKyAgICAgICAgYXNz
ZXJ0IGxlbihzZWxmLmNoaWxkX21hcCkgPT0gbGVuKHNlbGYuY2hpbGRyZW4pCisKKyAgICBkZWYg
aW5jbHVkZShzZWxmLCB0ZXN0KToKKyAgICAgICAgIiIiUmV0dXJuIGEgYm9vbGVhbiBpbmRpY2F0
aW5nIHdoZXRoZXIgYSBwYXJ0aWN1bGFyIHRlc3Qgc2hvdWxkIGJlCisgICAgICAgIGluY2x1ZGVk
IGluIGEgdGVzdCBydW4sIGJhc2VkIG9uIHRoZSBJbmNsdWRlTWFuaWZlc3QgdHJlZSByb290ZWQg
b24KKyAgICAgICAgdGhpcyBvYmplY3QuCisKKyAgICAgICAgOnBhcmFtIHRlc3Q6IFRoZSB0ZXN0
IG9iamVjdCIiIgorICAgICAgICBwYXRoX2NvbXBvbmVudHMgPSBzZWxmLl9nZXRfY29tcG9uZW50
cyh0ZXN0LnVybCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2luY2x1ZGUodGVzdCwgcGF0aF9jb21w
b25lbnRzKQorCisgICAgZGVmIF9pbmNsdWRlKHNlbGYsIHRlc3QsIHBhdGhfY29tcG9uZW50cyk6
CisgICAgICAgIGlmIHBhdGhfY29tcG9uZW50czoKKyAgICAgICAgICAgIG5leHRfcGF0aF9wYXJ0
ID0gcGF0aF9jb21wb25lbnRzLnBvcCgpCisgICAgICAgICAgICBpZiBuZXh0X3BhdGhfcGFydCBp
biBzZWxmLmNoaWxkX21hcDoKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5jaGlsZF9tYXBb
bmV4dF9wYXRoX3BhcnRdLl9pbmNsdWRlKHRlc3QsIHBhdGhfY29tcG9uZW50cykKKworICAgICAg
ICBub2RlID0gc2VsZgorICAgICAgICB3aGlsZSBub2RlOgorICAgICAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgICAgIHNraXBfdmFsdWUgPSBzZWxmLmdldCgic2tpcCIsIHsidGVzdF90eXBlIjog
dGVzdC5pdGVtX3R5cGV9KS5sb3dlcigpCisgICAgICAgICAgICAgICAgYXNzZXJ0IHNraXBfdmFs
dWUgaW4gKCJ0cnVlIiwgImZhbHNlIikKKyAgICAgICAgICAgICAgICByZXR1cm4gc2tpcF92YWx1
ZSAhPSAidHJ1ZSIKKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAg
ICBpZiBub2RlLnBhcmVudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9
IG5vZGUucGFyZW50CisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAg
IyBJbmNsdWRlIGJ5IGRlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKwor
ICAgIGRlZiBfZ2V0X2NvbXBvbmVudHMoc2VsZiwgdXJsKToKKyAgICAgICAgcnYgPSBbXQorICAg
ICAgICB1cmxfcGFydHMgPSB1cmxwYXJzZS51cmxzcGxpdCh1cmwpCisgICAgICAgIHZhcmlhbnQg
PSAiIgorICAgICAgICBpZiB1cmxfcGFydHMucXVlcnk6CisgICAgICAgICAgICB2YXJpYW50ICs9
ICI/IiArIHVybF9wYXJ0cy5xdWVyeQorICAgICAgICBpZiB1cmxfcGFydHMuZnJhZ21lbnQ6Cisg
ICAgICAgICAgICB2YXJpYW50ICs9ICIjIiArIHVybF9wYXJ0cy5mcmFnbWVudAorICAgICAgICBp
ZiB2YXJpYW50OgorICAgICAgICAgICAgcnYuYXBwZW5kKHZhcmlhbnQpCisgICAgICAgIHJ2LmV4
dGVuZChbaXRlbSBmb3IgaXRlbSBpbiByZXZlcnNlZCh1cmxfcGFydHMucGF0aC5zcGxpdCgiLyIp
KSBpZiBpdGVtXSkKKyAgICAgICAgcmV0dXJuIHJ2CisKKyAgICBkZWYgX2FkZF9ydWxlKHNlbGYs
IHRlc3RfbWFuaWZlc3RzLCB1cmwsIGRpcmVjdGlvbik6CisgICAgICAgIG1heWJlX3BhdGggPSBv
cy5wYXRoLmpvaW4ob3MucGF0aC5hYnNwYXRoKG9zLmN1cmRpciksIHVybCkKKyAgICAgICAgcmVz
dCwgbGFzdCA9IG9zLnBhdGguc3BsaXQobWF5YmVfcGF0aCkKKyAgICAgICAgZnJhZ21lbnQgPSBx
dWVyeSA9IE5vbmUKKyAgICAgICAgaWYgIiMiIGluIGxhc3Q6CisgICAgICAgICAgICBsYXN0LCBm
cmFnbWVudCA9IGxhc3QucnNwbGl0KCIjIiwgMSkKKyAgICAgICAgaWYgIj8iIGluIGxhc3Q6Cisg
ICAgICAgICAgICBsYXN0LCBxdWVyeSA9IGxhc3QucnNwbGl0KCI/IiwgMSkKKworICAgICAgICBt
YXliZV9wYXRoID0gb3MucGF0aC5qb2luKHJlc3QsIGxhc3QpCisgICAgICAgIHBhdGhzID0gZ2xv
Yi5nbG9iKG1heWJlX3BhdGgpCisKKyAgICAgICAgaWYgcGF0aHM6CisgICAgICAgICAgICB1cmxz
ID0gW10KKyAgICAgICAgICAgIGZvciBwYXRoIGluIHBhdGhzOgorICAgICAgICAgICAgICAgIGZv
ciBtYW5pZmVzdCwgZGF0YSBpbiB0ZXN0X21hbmlmZXN0cy5pdGVyaXRlbXMoKToKKyAgICAgICAg
ICAgICAgICAgICAgZm91bmQgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICByZWxfcGF0aCA9
IG9zLnBhdGgucmVscGF0aChwYXRoLCBkYXRhWyJ0ZXN0c19wYXRoIl0pCisgICAgICAgICAgICAg
ICAgICAgIGl0ZXJhdG9yID0gbWFuaWZlc3QuaXRlcnBhdGggaWYgb3MucGF0aC5pc2ZpbGUocGF0
aCkgZWxzZSBtYW5pZmVzdC5pdGVyZGlyCisgICAgICAgICAgICAgICAgICAgIGZvciB0ZXN0IGlu
IGl0ZXJhdG9yKHJlbF9wYXRoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBoYXNh
dHRyKHRlc3QsICJ1cmwiKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQor
ICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gdGVzdC51cmwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIHF1ZXJ5IG9yIGZyYWdtZW50OgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBhcnNlZCA9IHVybHBhcnNlLnVybHBhcnNlKHVybCkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoKHF1ZXJ5IGFuZCBxdWVyeSAhPSBwYXJzZWQucXVlcnkpIG9yCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChmcmFnbWVudCBhbmQgZnJhZ21lbnQgIT0gcGFyc2VkLmZy
YWdtZW50KSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAg
ICAgICAgICAgICAgICAgICAgICB1cmxzLmFwcGVuZCh1cmwpCisgICAgICAgICAgICAgICAgICAg
ICAgICBmb3VuZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgaWYgZm91bmQ6CisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgdXJscyA9
IFt1cmxdCisKKyAgICAgICAgYXNzZXJ0IGRpcmVjdGlvbiBpbiAoImluY2x1ZGUiLCAiZXhjbHVk
ZSIpCisKKyAgICAgICAgZm9yIHVybCBpbiB1cmxzOgorICAgICAgICAgICAgY29tcG9uZW50cyA9
IHNlbGYuX2dldF9jb21wb25lbnRzKHVybCkKKworICAgICAgICAgICAgbm9kZSA9IHNlbGYKKyAg
ICAgICAgICAgIHdoaWxlIGNvbXBvbmVudHM6CisgICAgICAgICAgICAgICAgY29tcG9uZW50ID0g
Y29tcG9uZW50cy5wb3AoKQorICAgICAgICAgICAgICAgIGlmIGNvbXBvbmVudCBub3QgaW4gbm9k
ZS5jaGlsZF9tYXA6CisgICAgICAgICAgICAgICAgICAgIG5ld19ub2RlID0gSW5jbHVkZU1hbmlm
ZXN0KERhdGFOb2RlKGNvbXBvbmVudCkpCisgICAgICAgICAgICAgICAgICAgIG5vZGUuYXBwZW5k
KG5ld19ub2RlKQorICAgICAgICAgICAgICAgICAgICBuZXdfbm9kZS5zZXQoInNraXAiLCBub2Rl
LmdldCgic2tpcCIsIHt9KSkKKworICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLmNoaWxkX21h
cFtjb21wb25lbnRdCisKKyAgICAgICAgICAgIHNraXAgPSBGYWxzZSBpZiBkaXJlY3Rpb24gPT0g
ImluY2x1ZGUiIGVsc2UgVHJ1ZQorICAgICAgICAgICAgbm9kZS5zZXQoInNraXAiLCBzdHIoc2tp
cCkpCisKKyAgICBkZWYgYWRkX2luY2x1ZGUoc2VsZiwgdGVzdF9tYW5pZmVzdHMsIHVybF9wcmVm
aXgpOgorICAgICAgICAiIiJBZGQgYSBydWxlIGluZGljYXRpbmcgdGhhdCB0ZXN0cyB1bmRlciBh
IHVybCBwYXRoCisgICAgICAgIHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0ZXN0IHJ1bnMKKworICAg
ICAgICA6cGFyYW0gdXJsX3ByZWZpeDogVGhlIHVybCBwcmVmaXggdG8gaW5jbHVkZQorICAgICAg
ICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2FkZF9ydWxlKHRlc3RfbWFuaWZlc3RzLCB1cmxf
cHJlZml4LCAiaW5jbHVkZSIpCisKKyAgICBkZWYgYWRkX2V4Y2x1ZGUoc2VsZiwgdGVzdF9tYW5p
ZmVzdHMsIHVybF9wcmVmaXgpOgorICAgICAgICAiIiJBZGQgYSBydWxlIGluZGljYXRpbmcgdGhh
dCB0ZXN0cyB1bmRlciBhIHVybCBwYXRoCisgICAgICAgIHNob3VsZCBiZSBleGNsdWRlZCBmcm9t
IHRlc3QgcnVucworCisgICAgICAgIDpwYXJhbSB1cmxfcHJlZml4OiBUaGUgdXJsIHByZWZpeCB0
byBleGNsdWRlCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5fYWRkX3J1bGUodGVz
dF9tYW5pZmVzdHMsIHVybF9wcmVmaXgsICJleGNsdWRlIikKKworCitkZWYgZ2V0X21hbmlmZXN0
KG1hbmlmZXN0X3BhdGgpOgorICAgIHdpdGggb3BlbihtYW5pZmVzdF9wYXRoKSBhcyBmOgorICAg
ICAgICByZXR1cm4gY29uZGl0aW9uYWwuY29tcGlsZShmLCBkYXRhX2Nsc19nZXR0ZXI9bGFtYmRh
IHgsIHk6IEluY2x1ZGVNYW5pZmVzdCkKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9y
dGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL21hbmlmZXN0dXBkYXRlLnB5IGIvV2Vi
RHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvbWFuaWZl
c3R1cGRhdGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjA3ZTYy
M2M1ZDFiCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rv
b2xzL3dwdHJ1bm5lci93cHRydW5uZXIvbWFuaWZlc3R1cGRhdGUucHkKQEAgLTAsMCArMSw0NjAg
QEAKK2ltcG9ydCBvcworaW1wb3J0IHVybHBhcnNlCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBu
YW1lZHR1cGxlLCBkZWZhdWx0ZGljdAorCitmcm9tIHdwdG1hbmlmZXN0Lm5vZGUgaW1wb3J0IChE
YXRhTm9kZSwgQ29uZGl0aW9uYWxOb2RlLCBCaW5hcnlFeHByZXNzaW9uTm9kZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEJpbmFyeU9wZXJhdG9yTm9kZSwgVmFyaWFibGVOb2RlLCBT
dHJpbmdOb2RlLCBOdW1iZXJOb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVW5h
cnlFeHByZXNzaW9uTm9kZSwgVW5hcnlPcGVyYXRvck5vZGUsIEtleVZhbHVlTm9kZSkKK2Zyb20g
d3B0bWFuaWZlc3QuYmFja2VuZHMgaW1wb3J0IGNvbmRpdGlvbmFsCitmcm9tIHdwdG1hbmlmZXN0
LmJhY2tlbmRzLmNvbmRpdGlvbmFsIGltcG9ydCBNYW5pZmVzdEl0ZW0KKworaW1wb3J0IGV4cGVj
dGVkCisKKyIiIk1hbmlmZXN0IHN0cnVjdHVyZSB1c2VkIHRvIHVwZGF0ZSB0aGUgZXhwZWN0ZWQg
cmVzdWx0cyBvZiBhIHRlc3QKKworRWFjaCBtYW5pZmVzdCBmaWxlIGlzIHJlcHJlc2VudGVkIGJ5
IGFuIEV4cGVjdGVkTWFuaWZlc3QgdGhhdCBoYXMgb25lCitvciBtb3JlIFRlc3ROb2RlIGNoaWxk
cmVuLCBvbmUgcGVyIHRlc3QgaW4gdGhlIG1hbmlmZXN0LiAgRWFjaAorVGVzdE5vZGUgaGFzIHpl
cm8gb3IgbW9yZSBTdWJ0ZXN0Tm9kZSBjaGlsZHJlbiwgb25lIGZvciBlYWNoIGtub3duCitzdWJ0
ZXN0IG9mIHRoZSB0ZXN0LgorCitJbiB0aGVzZSByZXByZXNlbnRhdGlvbnMsIGNvbmRpdGlvbmFs
cyBleHByZXNzaW9ucyBpbiB0aGUgbWFuaWZlc3QgYXJlCitub3QgZXZhbHVhdGVkIHVwZnJvbnQg
YnV0IHN0b3JlZCBhcyBweXRob24gZnVuY3Rpb25zIHRvIGJlIGV2YWx1YXRlZAorYXQgcnVudGlt
ZS4KKworV2hlbiBhIHJlc3VsdCBmb3IgYSB0ZXN0IGlzIHRvIGJlIHVwZGF0ZWQgc2V0X3Jlc3Vs
dCBvbiB0aGUKK1tTdWJdVGVzdE5vZGUgaXMgY2FsbGVkIHRvIHN0b3JlIHRoZSBuZXcgcmVzdWx0
LCBhbG9uZ3NpZGUgdGhlCitleGlzdGluZyBjb25kaXRpb25hbCB0aGF0IHJlc3VsdCdzIHJ1biBp
bmZvIG1hdGNoZWQsIGlmIGFueS4gT25jZSBhbGwKK25ldyByZXN1bHRzIGFyZSBrbm93biwgY29h
bGVzY2VfZXhwZWN0ZWQgaXMgY2FsbGVkIHRvIGNvbXB1dGUgdGhlIG5ldworc2V0IG9mIHJlc3Vs
dHMgYW5kIGNvbmRpdGlvbmFscy4gVGhlIEFTVCBvZiB0aGUgdW5kZXJseWluZyBwYXJzZWQgbWFu
aWZlc3QKK2lzIHVwZGF0ZWQgd2l0aCB0aGUgY2hhbmdlcywgYW5kIHRoZSByZXN1bHQgaXMgc2Vy
aWFsaXNlZCB0byBhIGZpbGUuCisiIiIKKworY2xhc3MgQ29uZGl0aW9uRXJyb3IoRXhjZXB0aW9u
KToKKyAgICBwYXNzCisKK1Jlc3VsdCA9IG5hbWVkdHVwbGUoIlJlc3VsdCIsIFsicnVuX2luZm8i
LCAic3RhdHVzIl0pCisKKworZGVmIGRhdGFfY2xzX2dldHRlcihvdXRwdXRfbm9kZSwgdmlzaXRl
ZF9ub2RlKToKKyAgICAjIHZpc2l0ZWRfbm9kZSBpcyBpbnRlbnRpb25hbGx5IHVudXNlZAorICAg
IGlmIG91dHB1dF9ub2RlIGlzIE5vbmU6CisgICAgICAgIHJldHVybiBFeHBlY3RlZE1hbmlmZXN0
CisgICAgZWxpZiBpc2luc3RhbmNlKG91dHB1dF9ub2RlLCBFeHBlY3RlZE1hbmlmZXN0KToKKyAg
ICAgICAgcmV0dXJuIFRlc3ROb2RlCisgICAgZWxpZiBpc2luc3RhbmNlKG91dHB1dF9ub2RlLCBU
ZXN0Tm9kZSk6CisgICAgICAgIHJldHVybiBTdWJ0ZXN0Tm9kZQorICAgIGVsc2U6CisgICAgICAg
IHJhaXNlIFZhbHVlRXJyb3IKKworCitjbGFzcyBFeHBlY3RlZE1hbmlmZXN0KE1hbmlmZXN0SXRl
bSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5vZGUsIHRlc3RfcGF0aD1Ob25lLCB1cmxfYmFz
ZT1Ob25lLCBwcm9wZXJ0eV9vcmRlcj1Ob25lLAorICAgICAgICAgICAgICAgICBib29sZWFuX3By
b3BlcnRpZXM9Tm9uZSk6CisgICAgICAgICIiIk9iamVjdCByZXByZXNlbnRpbmcgYWxsIHRoZSB0
ZXN0cyBpbiBhIHBhcnRpY3VsYXIgbWFuaWZlc3QKKworICAgICAgICA6cGFyYW0gbm9kZTogQVNU
IE5vZGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgb2JqZWN0LiBJZiB0aGlzIGlzIE5vbmUsCisgICAg
ICAgICAgICAgICAgICAgICBhIG5ldyBBU1QgaXMgY3JlYXRlZCB0byBhc3NvY2lhdGUgd2l0aCB0
aGlzIG1hbmlmZXN0LgorICAgICAgICA6cGFyYW0gdGVzdF9wYXRoOiBQYXRoIG9mIHRoZSB0ZXN0
IGZpbGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbWFuaWZlc3QuCisgICAgICAgIDpwYXJhbSB1cmxf
YmFzZTogQmFzZSB1cmwgZm9yIHNlcnZpbmcgdGhlIHRlc3RzIGluIHRoaXMgbWFuaWZlc3QuCisg
ICAgICAgIDpwYXJhbSBwcm9wZXJ0eV9vcmRlcjogTGlzdCBvZiBwcm9wZXJ0aWVzIHRvIHVzZSBp
biBleHBlY3RhdGlvbiBtZXRhZGF0YQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZy
b20gbW9zdCB0byBsZWFzdCBzaWduaWZpY2FudC4KKyAgICAgICAgOnBhcmFtIGJvb2xlYW5fcHJv
cGVydGllczogU2V0IG9mIHByb3BlcnRpZXMgaW4gcHJvcGVydHlfb3JkZXIgdGhhdCBzaG91bGQK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgdHJlYXRlZCBhcyBib29sZWFu
LgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm9kZSBpcyBOb25lOgorICAgICAgICAgICAgbm9k
ZSA9IERhdGFOb2RlKE5vbmUpCisgICAgICAgIE1hbmlmZXN0SXRlbS5fX2luaXRfXyhzZWxmLCBu
b2RlKQorICAgICAgICBzZWxmLmNoaWxkX21hcCA9IHt9CisgICAgICAgIHNlbGYudGVzdF9wYXRo
ID0gdGVzdF9wYXRoCisgICAgICAgIHNlbGYudXJsX2Jhc2UgPSB1cmxfYmFzZQorICAgICAgICBh
c3NlcnQgc2VsZi51cmxfYmFzZSBpcyBub3QgTm9uZQorICAgICAgICBzZWxmLm1vZGlmaWVkID0g
RmFsc2UKKyAgICAgICAgc2VsZi5ib29sZWFuX3Byb3BlcnRpZXMgPSBib29sZWFuX3Byb3BlcnRp
ZXMKKyAgICAgICAgc2VsZi5wcm9wZXJ0eV9vcmRlciA9IHByb3BlcnR5X29yZGVyCisKKyAgICBk
ZWYgYXBwZW5kKHNlbGYsIGNoaWxkKToKKyAgICAgICAgTWFuaWZlc3RJdGVtLmFwcGVuZChzZWxm
LCBjaGlsZCkKKyAgICAgICAgaWYgY2hpbGQuaWQgaW4gc2VsZi5jaGlsZF9tYXA6CisgICAgICAg
ICAgICBwcmludCAiV2FybmluZzogRHVwbGljYXRlIGhlYWRpbmcgJXMiICUgY2hpbGQuaWQKKyAg
ICAgICAgc2VsZi5jaGlsZF9tYXBbY2hpbGQuaWRdID0gY2hpbGQKKworICAgIGRlZiBfcmVtb3Zl
X2NoaWxkKHNlbGYsIGNoaWxkKToKKyAgICAgICAgZGVsIHNlbGYuY2hpbGRfbWFwW2NoaWxkLmlk
XQorICAgICAgICBNYW5pZmVzdEl0ZW0uX3JlbW92ZV9jaGlsZChzZWxmLCBjaGlsZCkKKworICAg
IGRlZiBnZXRfdGVzdChzZWxmLCB0ZXN0X2lkKToKKyAgICAgICAgIiIiUmV0dXJuIGEgVGVzdE5v
ZGUgYnkgdGVzdCBpZCwgb3IgTm9uZSBpZiBubyB0ZXN0IG1hdGNoZXMKKworICAgICAgICA6cGFy
YW0gdGVzdF9pZDogVGhlIGlkIG9mIHRoZSB0ZXN0IHRvIGxvb2sgdXAiIiIKKworICAgICAgICBy
ZXR1cm4gc2VsZi5jaGlsZF9tYXBbdGVzdF9pZF0KKworICAgIGRlZiBoYXNfdGVzdChzZWxmLCB0
ZXN0X2lkKToKKyAgICAgICAgIiIiQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGN1cnJl
bnQgdGVzdCBoYXMgYSBrbm93biBjaGlsZCB0ZXN0CisgICAgICAgIHdpdGggaWQgdGVzdCBpZAor
CisgICAgICAgIDpwYXJhbSB0ZXN0X2lkOiBUaGUgaWQgb2YgdGhlIHRlc3QgdG8gbG9vayB1cCIi
IgorCisgICAgICAgIHJldHVybiB0ZXN0X2lkIGluIHNlbGYuY2hpbGRfbWFwCisKKyAgICBAcHJv
cGVydHkKKyAgICBkZWYgdXJsKHNlbGYpOgorICAgICAgICByZXR1cm4gdXJscGFyc2UudXJsam9p
bihzZWxmLnVybF9iYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLyIuam9p
bihzZWxmLnRlc3RfcGF0aC5zcGxpdChvcy5wYXRoLnNlcCkpKQorCitjbGFzcyBUZXN0Tm9kZShN
YW5pZmVzdEl0ZW0pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBub2RlKToKKyAgICAgICAgIiIi
VHJlZSBub2RlIGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIgdGVzdCBpbiBhIG1hbmlmZXN0
CisKKyAgICAgICAgOnBhcmFtIG5vZGU6IEFTVCBub2RlIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGVz
dCIiIgorCisgICAgICAgIE1hbmlmZXN0SXRlbS5fX2luaXRfXyhzZWxmLCBub2RlKQorICAgICAg
ICBzZWxmLnVwZGF0ZWRfZXhwZWN0ZWQgPSBbXQorICAgICAgICBzZWxmLm5ld19leHBlY3RlZCA9
IFtdCisgICAgICAgIHNlbGYuc3VidGVzdHMgPSB7fQorICAgICAgICBzZWxmLmRlZmF1bHRfc3Rh
dHVzID0gTm9uZQorICAgICAgICBzZWxmLl9mcm9tX2ZpbGUgPSBUcnVlCisKKyAgICBAY2xhc3Nt
ZXRob2QKKyAgICBkZWYgY3JlYXRlKGNscywgdGVzdF90eXBlLCB0ZXN0X2lkKToKKyAgICAgICAg
IiIiQ3JlYXRlIGEgVGVzdE5vZGUgY29ycmVzcG9uZGluZyB0byBhIGdpdmVuIHRlc3QKKworICAg
ICAgICA6cGFyYW0gdGVzdF90eXBlOiBUaGUgdHlwZSBvZiB0aGUgdGVzdAorICAgICAgICA6cGFy
YW0gdGVzdF9pZDogVGhlIGlkIG9mIHRoZSB0ZXN0IiIiCisKKyAgICAgICAgdXJsID0gdGVzdF9p
ZAorICAgICAgICBuYW1lID0gdXJsLnNwbGl0KCIvIilbLTFdCisgICAgICAgIG5vZGUgPSBEYXRh
Tm9kZShuYW1lKQorICAgICAgICBzZWxmID0gY2xzKG5vZGUpCisKKyAgICAgICAgc2VsZi5zZXQo
InR5cGUiLCB0ZXN0X3R5cGUpCisgICAgICAgIHNlbGYuX2Zyb21fZmlsZSA9IEZhbHNlCisgICAg
ICAgIHJldHVybiBzZWxmCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaXNfZW1wdHkoc2VsZik6
CisgICAgICAgIHJlcXVpcmVkX2tleXMgPSBzZXQoWyJ0eXBlIl0pCisgICAgICAgIGlmIHNldChz
ZWxmLl9kYXRhLmtleXMoKSkgIT0gcmVxdWlyZWRfa2V5czoKKyAgICAgICAgICAgIHJldHVybiBG
YWxzZQorICAgICAgICByZXR1cm4gYWxsKGNoaWxkLmlzX2VtcHR5IGZvciBjaGlsZCBpbiBzZWxm
LmNoaWxkcmVuKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHRlc3RfdHlwZShzZWxmKToKKyAg
ICAgICAgIiIiVGhlIHR5cGUgb2YgdGhlIHRlc3QgcmVwcmVzZW50ZWQgYnkgdGhpcyBUZXN0Tm9k
ZSIiIgorCisgICAgICAgIHJldHVybiBzZWxmLmdldCgidHlwZSIsIE5vbmUpCisKKyAgICBAcHJv
cGVydHkKKyAgICBkZWYgaWQoc2VsZik6CisgICAgICAgICIiIlRoZSBpZCBvZiB0aGUgdGVzdCBy
ZXByZXNlbnRlZCBieSB0aGlzIFRlc3ROb2RlIiIiCisgICAgICAgIHJldHVybiB1cmxwYXJzZS51
cmxqb2luKHNlbGYucGFyZW50LnVybCwgc2VsZi5uYW1lKQorCisgICAgZGVmIGRpc2FibGVkKHNl
bGYsIHJ1bl9pbmZvKToKKyAgICAgICAgIiIiQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhp
cyB0ZXN0IGlzIGRpc2FibGVkIHdoZW4gcnVuIGluIGFuCisgICAgICAgIGVudmlyb25tZW50IHdp
dGggdGhlIGdpdmVuIHJ1bl9pbmZvCisKKyAgICAgICAgOnBhcmFtIHJ1bl9pbmZvOiBEaWN0aW9u
YXJ5IG9mIHJ1bl9pbmZvIHBhcmFtZXRlcnMiIiIKKworICAgICAgICByZXR1cm4gc2VsZi5nZXQo
ImRpc2FibGVkIiwgcnVuX2luZm8pIGlzIG5vdCBOb25lCisKKyAgICBkZWYgc2V0X3Jlc3VsdChz
ZWxmLCBydW5faW5mbywgcmVzdWx0KToKKyAgICAgICAgIiIiU2V0IHRoZSByZXN1bHQgb2YgdGhl
IHRlc3QgaW4gYSBwYXJ0aWN1bGFyIHJ1bgorCisgICAgICAgIDpwYXJhbSBydW5faW5mbzogRGlj
dGlvbmFyeSBvZiBydW5faW5mbyBwYXJhbWV0ZXJzIGNvcnJlc3BvbmRpbmcKKyAgICAgICAgICAg
ICAgICAgICAgICAgICB0byB0aGlzIHJ1bgorICAgICAgICA6cGFyYW0gcmVzdWx0OiBTdGF0dXMg
b2YgdGhlIHRlc3QgaW4gdGhpcyBydW4iIiIKKworICAgICAgICBpZiBzZWxmLmRlZmF1bHRfc3Rh
dHVzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgYXNzZXJ0IHNlbGYuZGVmYXVsdF9zdGF0dXMg
PT0gcmVzdWx0LmRlZmF1bHRfZXhwZWN0ZWQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNl
bGYuZGVmYXVsdF9zdGF0dXMgPSByZXN1bHQuZGVmYXVsdF9leHBlY3RlZAorCisgICAgICAgICMg
QWRkIHRoaXMgcmVzdWx0IHRvIHRoZSBsaXN0IG9mIHJlc3VsdHMgc2F0aXNmeWluZworICAgICAg
ICAjIGFueSBjb25kaXRpb24gaW4gdGhlIGxpc3Qgb2YgdXBkYXRlZCByZXN1bHRzIGl0IG1hdGNo
ZXMKKyAgICAgICAgZm9yIChjb25kLCB2YWx1ZXMpIGluIHNlbGYudXBkYXRlZF9leHBlY3RlZDoK
KyAgICAgICAgICAgIGlmIGNvbmQocnVuX2luZm8pOgorICAgICAgICAgICAgICAgIHZhbHVlcy5h
cHBlbmQoUmVzdWx0KHJ1bl9pbmZvLCByZXN1bHQuc3RhdHVzKSkKKyAgICAgICAgICAgICAgICBp
ZiByZXN1bHQuc3RhdHVzICE9IGNvbmQudmFsdWU6CisgICAgICAgICAgICAgICAgICAgIHNlbGYu
cm9vdC5tb2RpZmllZCA9IFRydWUKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNl
OgorICAgICAgICAgICAgIyBXZSBkaWRuJ3QgZmluZCBhIHByZXZpb3VzIHZhbHVlIGZvciB0aGlz
CisgICAgICAgICAgICBzZWxmLm5ld19leHBlY3RlZC5hcHBlbmQoUmVzdWx0KHJ1bl9pbmZvLCBy
ZXN1bHQuc3RhdHVzKSkKKyAgICAgICAgICAgIHNlbGYucm9vdC5tb2RpZmllZCA9IFRydWUKKwor
ICAgIGRlZiBjb2FsZXNjZV9leHBlY3RlZChzZWxmKToKKyAgICAgICAgIiIiVXBkYXRlIHRoZSB1
bmRlcmx5aW5nIG1hbmlmZXN0IEFTVCBmb3IgdGhpcyB0ZXN0IGJhc2VkIG9uIGFsbCB0aGUKKyAg
ICAgICAgYWRkZWQgcmVzdWx0cy4KKworICAgICAgICBUaGlzIHdpbGwgdXBkYXRlIGV4aXN0aW5n
IGNvbmRpdGlvbmFscyBpZiB0aGV5IGdvdCB0aGUgc2FtZSByZXN1bHQgaW4KKyAgICAgICAgYWxs
IG1hdGNoaW5nIHJ1bnMgaW4gdGhlIHVwZGF0ZWQgcmVzdWx0cywgd2lsbCBkZWxldGUgZXhpc3Rp
bmcgY29uZGl0aW9uYWxzCisgICAgICAgIHRoYXQgZ2V0IG1vcmUgdGhhbiBvbmUgZGlmZmVyZW50
IHJlc3VsdCBpbiB0aGUgdXBkYXRlZCBydW4sIGFuZCBhZGQgbmV3CisgICAgICAgIGNvbmRpdGlv
bmFscyBmb3IgYW55dGhpbmcgdGhhdCBkb2Vzbid0IG1hdGNoIGFuIGV4aXN0aW5nIGNvbmRpdGlv
bmFsLgorCisgICAgICAgIENvbmRpdGlvbmFscyBub3QgbWF0Y2hlZCBieSBhbnkgYWRkZWQgcmVz
dWx0IGFyZSBub3QgY2hhbmdlZC4iIiIKKworICAgICAgICBmaW5hbF9jb25kaXRpb25hbHMgPSBb
XQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHVuY29uZGl0aW9uYWxfc3RhdHVzID0gc2Vs
Zi5nZXQoImV4cGVjdGVkIikKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAg
dW5jb25kaXRpb25hbF9zdGF0dXMgPSBzZWxmLmRlZmF1bHRfc3RhdHVzCisKKyAgICAgICAgZm9y
IGNvbmRpdGlvbmFsX3ZhbHVlLCByZXN1bHRzIGluIHNlbGYudXBkYXRlZF9leHBlY3RlZDoKKyAg
ICAgICAgICAgIGlmIG5vdCByZXN1bHRzOgorICAgICAgICAgICAgICAgICMgVGhlIGNvbmRpdGlv
bmFsIGRpZG4ndCBtYXRjaCBhbnl0aGluZyBpbiB0aGVzZSBydW5zIHNvIGxlYXZlIGl0IGFsb25l
CisgICAgICAgICAgICAgICAgZmluYWxfY29uZGl0aW9uYWxzLmFwcGVuZChjb25kaXRpb25hbF92
YWx1ZSkKKyAgICAgICAgICAgIGVsaWYgYWxsKHJlc3VsdHNbMF0uc3RhdHVzID09IHJlc3VsdC5z
dGF0dXMgZm9yIHJlc3VsdCBpbiByZXN1bHRzKToKKyAgICAgICAgICAgICAgICAjIEFsbCB0aGUg
bmV3IHZhbHVlcyBmb3IgdGhpcyBjb25kaXRpb25hbCBtYXRjaGVkLCBzbyB1cGRhdGUgdGhlIG5v
ZGUKKyAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHRzWzBdCisgICAgICAgICAgICAgICAg
aWYgKHJlc3VsdC5zdGF0dXMgPT0gdW5jb25kaXRpb25hbF9zdGF0dXMgYW5kCisgICAgICAgICAg
ICAgICAgICAgIGNvbmRpdGlvbmFsX3ZhbHVlLmNvbmRpdGlvbl9ub2RlIGlzIG5vdCBOb25lKToK
KyAgICAgICAgICAgICAgICAgICAgaWYgImV4cGVjdGVkIiBpbiBzZWxmOgorICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZi5yZW1vdmVfdmFsdWUoImV4cGVjdGVkIiwgY29uZGl0aW9uYWxfdmFs
dWUpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9u
YWxfdmFsdWUudmFsdWUgPSByZXN1bHQuc3RhdHVzCisgICAgICAgICAgICAgICAgICAgIGZpbmFs
X2NvbmRpdGlvbmFscy5hcHBlbmQoY29uZGl0aW9uYWxfdmFsdWUpCisgICAgICAgICAgICBlbGlm
IGNvbmRpdGlvbmFsX3ZhbHVlLmNvbmRpdGlvbl9ub2RlIGlzIG5vdCBOb25lOgorICAgICAgICAg
ICAgICAgICMgQmxvdyBhd2F5IHRoZSBleGlzdGluZyBjb25kaXRpb24gYW5kIHJlYnVpbGQgZnJv
bSBzY3JhdGNoCisgICAgICAgICAgICAgICAgIyBUaGlzIGlzbid0IHN1cmUgdG8gd29yayBpZiB3
ZSBoYXZlIGEgY29uZGl0aW9uYWwgbGF0ZXIgdGhhdCBtYXRjaGVzCisgICAgICAgICAgICAgICAg
IyB0aGVzZSB2YWx1ZXMgdG9vLCBidXQgd2UgY2FuIGhvcGUsIHZlcmlmeSB0aGF0IHdlIGdldCB0
aGUgcmVzdWx0cworICAgICAgICAgICAgICAgICMgd2UgZXhwZWN0LCBhbmQgaWYgbm90IGxldCBh
IGh1bWFuIHNvcnQgaXQgb3V0CisgICAgICAgICAgICAgICAgc2VsZi5yZW1vdmVfdmFsdWUoImV4
cGVjdGVkIiwgY29uZGl0aW9uYWxfdmFsdWUpCisgICAgICAgICAgICAgICAgc2VsZi5uZXdfZXhw
ZWN0ZWQuZXh0ZW5kKHJlc3VsdHMpCisgICAgICAgICAgICBlbGlmIGNvbmRpdGlvbmFsX3ZhbHVl
LmNvbmRpdGlvbl9ub2RlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5uZXdfZXhwZWN0
ZWQuZXh0ZW5kKHJlc3VsdCBmb3IgcmVzdWx0IGluIHJlc3VsdHMKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmVzdWx0LnN0YXR1cyAhPSB1bmNvbmRpdGlvbmFs
X3N0YXR1cykKKworICAgICAgICAjIEl0IGlzIGFuIGludmFyaWFudCB0aGF0IG5vdGhpbmcgaW4g
bmV3X2V4cGVjdGVkIG1hdGNoZXMgYW4gZXhpc3RpbmcKKyAgICAgICAgIyBjb25kaXRpb24gZXhj
ZXB0IGZvciB0aGUgZGVmYXVsdCBjb25kaXRpb24KKworICAgICAgICBpZiBzZWxmLm5ld19leHBl
Y3RlZDoKKyAgICAgICAgICAgIGlmIGFsbChzZWxmLm5ld19leHBlY3RlZFswXS5zdGF0dXMgPT0g
cmVzdWx0LnN0YXR1cworICAgICAgICAgICAgICAgICAgIGZvciByZXN1bHQgaW4gc2VsZi5uZXdf
ZXhwZWN0ZWQpIGFuZCBub3Qgc2VsZi51cGRhdGVkX2V4cGVjdGVkOgorICAgICAgICAgICAgICAg
IHN0YXR1cyA9IHNlbGYubmV3X2V4cGVjdGVkWzBdLnN0YXR1cworICAgICAgICAgICAgICAgIGlm
IHN0YXR1cyAhPSBzZWxmLmRlZmF1bHRfc3RhdHVzOgorICAgICAgICAgICAgICAgICAgICBzZWxm
LnNldCgiZXhwZWN0ZWQiLCBzdGF0dXMsIGNvbmRpdGlvbj1Ob25lKQorICAgICAgICAgICAgICAg
ICAgICBmaW5hbF9jb25kaXRpb25hbHMuYXBwZW5kKHNlbGYuX2RhdGFbImV4cGVjdGVkIl1bLTFd
KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAg
ICAgICAgIGNvbmRpdGlvbmFscyA9IGdyb3VwX2NvbmRpdGlvbmFscygKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbGYubmV3X2V4cGVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgcHJv
cGVydHlfb3JkZXI9c2VsZi5yb290LnByb3BlcnR5X29yZGVyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbGVhbl9wcm9wZXJ0aWVzPXNlbGYucm9vdC5ib29sZWFuX3Byb3BlcnRpZXMpCisg
ICAgICAgICAgICAgICAgZXhjZXB0IENvbmRpdGlvbkVycm9yOgorICAgICAgICAgICAgICAgICAg
ICBwcmludCAiQ29uZmxpY3RpbmcgdGVzdCByZXN1bHRzIGZvciAlcywgY2Fubm90IHVwZGF0ZSIg
JSBzZWxmLnJvb3QudGVzdF9wYXRoCisgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAg
ICAgICAgICAgIGZvciBjb25kaXRpb25hbF9ub2RlLCBzdGF0dXMgaW4gY29uZGl0aW9uYWxzOgor
ICAgICAgICAgICAgICAgICAgICBpZiBzdGF0dXMgIT0gdW5jb25kaXRpb25hbF9zdGF0dXM6Cisg
ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNldCgiZXhwZWN0ZWQiLCBzdGF0dXMsIGNvbmRp
dGlvbj1jb25kaXRpb25hbF9ub2RlLmNoaWxkcmVuWzBdKQorICAgICAgICAgICAgICAgICAgICAg
ICAgZmluYWxfY29uZGl0aW9uYWxzLmFwcGVuZChzZWxmLl9kYXRhWyJleHBlY3RlZCJdWy0xXSkK
KworICAgICAgICBpZiAoImV4cGVjdGVkIiBpbiBzZWxmLl9kYXRhIGFuZAorICAgICAgICAgICAg
bGVuKHNlbGYuX2RhdGFbImV4cGVjdGVkIl0pID4gMCBhbmQKKyAgICAgICAgICAgIHNlbGYuX2Rh
dGFbImV4cGVjdGVkIl1bLTFdLmNvbmRpdGlvbl9ub2RlIGlzIE5vbmUgYW5kCisgICAgICAgICAg
ICBzZWxmLl9kYXRhWyJleHBlY3RlZCJdWy0xXS52YWx1ZSA9PSBzZWxmLmRlZmF1bHRfc3RhdHVz
KToKKworICAgICAgICAgICAgc2VsZi5yZW1vdmVfdmFsdWUoImV4cGVjdGVkIiwgc2VsZi5fZGF0
YVsiZXhwZWN0ZWQiXVstMV0pCisKKyAgICAgICAgaWYgKCJleHBlY3RlZCIgaW4gc2VsZi5fZGF0
YSBhbmQKKyAgICAgICAgICAgIGxlbihzZWxmLl9kYXRhWyJleHBlY3RlZCJdKSA9PSAwKToKKyAg
ICAgICAgICAgIGZvciBjaGlsZCBpbiBzZWxmLm5vZGUuY2hpbGRyZW46CisgICAgICAgICAgICAg
ICAgaWYgKGlzaW5zdGFuY2UoY2hpbGQsIEtleVZhbHVlTm9kZSkgYW5kCisgICAgICAgICAgICAg
ICAgICAgIGNoaWxkLmRhdGEgPT0gImV4cGVjdGVkIik6CisgICAgICAgICAgICAgICAgICAgIGNo
aWxkLnJlbW92ZSgpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICBkZWYgX2FkZF9r
ZXlfdmFsdWUoc2VsZiwgbm9kZSwgdmFsdWVzKToKKyAgICAgICAgTWFuaWZlc3RJdGVtLl9hZGRf
a2V5X3ZhbHVlKHNlbGYsIG5vZGUsIHZhbHVlcykKKyAgICAgICAgaWYgbm9kZS5kYXRhID09ICJl
eHBlY3RlZCI6CisgICAgICAgICAgICBzZWxmLnVwZGF0ZWRfZXhwZWN0ZWQgPSBbXQorICAgICAg
ICAgICAgZm9yIHZhbHVlIGluIHZhbHVlczoKKyAgICAgICAgICAgICAgICBzZWxmLnVwZGF0ZWRf
ZXhwZWN0ZWQuYXBwZW5kKCh2YWx1ZSwgW10pKQorCisgICAgZGVmIGNsZWFyX2V4cGVjdGVkKHNl
bGYpOgorICAgICAgICAiIiJDbGVhciBhbGwgdGhlIGV4cGVjdGVkIGRhdGEgZm9yIHRoaXMgdGVz
dCBhbmQgYWxsIG9mIGl0cyBzdWJ0ZXN0cyIiIgorCisgICAgICAgIHNlbGYudXBkYXRlZF9leHBl
Y3RlZCA9IFtdCisgICAgICAgIGlmICJleHBlY3RlZCIgaW4gc2VsZi5fZGF0YToKKyAgICAgICAg
ICAgIGZvciBjaGlsZCBpbiBzZWxmLm5vZGUuY2hpbGRyZW46CisgICAgICAgICAgICAgICAgaWYg
KGlzaW5zdGFuY2UoY2hpbGQsIEtleVZhbHVlTm9kZSkgYW5kCisgICAgICAgICAgICAgICAgICAg
IGNoaWxkLmRhdGEgPT0gImV4cGVjdGVkIik6CisgICAgICAgICAgICAgICAgICAgIGNoaWxkLnJl
bW92ZSgpCisgICAgICAgICAgICAgICAgICAgIGRlbCBzZWxmLl9kYXRhWyJleHBlY3RlZCJdCisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgZm9yIHN1YnRlc3QgaW4gc2VsZi5z
dWJ0ZXN0cy5pdGVydmFsdWVzKCk6CisgICAgICAgICAgICBzdWJ0ZXN0LmNsZWFyX2V4cGVjdGVk
KCkKKworICAgIGRlZiBhcHBlbmQoc2VsZiwgbm9kZSk6CisgICAgICAgIGNoaWxkID0gTWFuaWZl
c3RJdGVtLmFwcGVuZChzZWxmLCBub2RlKQorICAgICAgICBzZWxmLnN1YnRlc3RzW2NoaWxkLm5h
bWVdID0gY2hpbGQKKworICAgIGRlZiBnZXRfc3VidGVzdChzZWxmLCBuYW1lKToKKyAgICAgICAg
IiIiUmV0dXJuIGEgU3VidGVzdE5vZGUgY29ycmVzcG9uZGluZyB0byBhIHBhcnRpY3VsYXIgc3Vi
dGVzdCBvZgorICAgICAgICB0aGUgY3VycmVudCB0ZXN0LCBjcmVhdGluZyBhIG5ldyBvbmUgaWYg
bm8gc3VidGVzdCB3aXRoIHRoYXQgbmFtZQorICAgICAgICBhbHJlYWR5IGV4aXN0cy4KKworICAg
ICAgICA6cGFyYW0gbmFtZTogTmFtZSBvZiB0aGUgc3VidGVzdCIiIgorCisgICAgICAgIGlmIG5h
bWUgaW4gc2VsZi5zdWJ0ZXN0czoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnN1YnRlc3RzW25h
bWVdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzdWJ0ZXN0ID0gU3VidGVzdE5vZGUuY3Jl
YXRlKG5hbWUpCisgICAgICAgICAgICBzZWxmLmFwcGVuZChzdWJ0ZXN0KQorICAgICAgICAgICAg
cmV0dXJuIHN1YnRlc3QKKworCitjbGFzcyBTdWJ0ZXN0Tm9kZShUZXN0Tm9kZSk6CisgICAgZGVm
IF9faW5pdF9fKHNlbGYsIG5vZGUpOgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShub2RlLCBE
YXRhTm9kZSkKKyAgICAgICAgVGVzdE5vZGUuX19pbml0X18oc2VsZiwgbm9kZSkKKworICAgIEBj
bGFzc21ldGhvZAorICAgIGRlZiBjcmVhdGUoY2xzLCBuYW1lKToKKyAgICAgICAgbm9kZSA9IERh
dGFOb2RlKG5hbWUpCisgICAgICAgIHNlbGYgPSBjbHMobm9kZSkKKyAgICAgICAgcmV0dXJuIHNl
bGYKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBpc19lbXB0eShzZWxmKToKKyAgICAgICAgaWYg
c2VsZi5fZGF0YToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gVHJ1
ZQorCisKK2RlZiBncm91cF9jb25kaXRpb25hbHModmFsdWVzLCBwcm9wZXJ0eV9vcmRlcj1Ob25l
LCBib29sZWFuX3Byb3BlcnRpZXM9Tm9uZSk6CisgICAgIiIiR2l2ZW4gYSBsaXN0IG9mIFJlc3Vs
dCBvYmplY3RzLCByZXR1cm4gYSBsaXN0IG9mCisgICAgKGNvbmRpdGlvbmFsX25vZGUsIHN0YXR1
cykgcGFpcnMgcmVwcmVzZW50aW5nIHRoZSBjb25kaXRpb25hbAorICAgIGV4cHJlc3Npb25zIHRo
YXQgYXJlIHJlcXVpcmVkIHRvIG1hdGNoIGVhY2ggc3RhdHVzCisKKyAgICA6cGFyYW0gdmFsdWVz
OiBMaXN0IG9mIFJlc3VsdHMKKyAgICA6cGFyYW0gcHJvcGVydHlfb3JkZXI6IExpc3Qgb2YgcHJv
cGVydGllcyB0byB1c2UgaW4gZXhwZWN0YXRpb24gbWV0YWRhdGEKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZyb20gbW9zdCB0byBsZWFzdCBzaWduaWZpY2FudC4KKyAgICA6cGFyYW0gYm9v
bGVhbl9wcm9wZXJ0aWVzOiBTZXQgb2YgcHJvcGVydGllcyBpbiBwcm9wZXJ0eV9vcmRlciB0aGF0
IHNob3VsZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIHRyZWF0ZWQgYXMgYm9v
bGVhbi4iIiIKKworICAgIGJ5X3Byb3BlcnR5ID0gZGVmYXVsdGRpY3Qoc2V0KQorICAgIGZvciBy
dW5faW5mbywgc3RhdHVzIGluIHZhbHVlczoKKyAgICAgICAgZm9yIHByb3BfbmFtZSwgcHJvcF92
YWx1ZSBpbiBydW5faW5mby5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGJ5X3Byb3BlcnR5Wyhw
cm9wX25hbWUsIHByb3BfdmFsdWUpXS5hZGQoc3RhdHVzKQorCisgICAgaWYgcHJvcGVydHlfb3Jk
ZXIgaXMgTm9uZToKKyAgICAgICAgcHJvcGVydHlfb3JkZXIgPSBbImRlYnVnIiwgIm9zIiwgInZl
cnNpb24iLCAicHJvY2Vzc29yIiwgImJpdHMiXQorCisgICAgaWYgYm9vbGVhbl9wcm9wZXJ0aWVz
IGlzIE5vbmU6CisgICAgICAgIGJvb2xlYW5fcHJvcGVydGllcyA9IHNldChbImRlYnVnIl0pCisg
ICAgZWxzZToKKyAgICAgICAgYm9vbGVhbl9wcm9wZXJ0aWVzID0gc2V0KGJvb2xlYW5fcHJvcGVy
dGllcykKKworICAgICMgSWYgd2UgaGF2ZSBtb3JlIHRoYW4gb25lIHZhbHVlLCByZW1vdmUgYW55
IHByb3BlcnRpZXMgdGhhdCBhcmUgY29tbW9uCisgICAgIyBmb3IgYWxsIHRoZSB2YWx1ZXMKKyAg
ICBpZiBsZW4odmFsdWVzKSA+IDE6CisgICAgICAgIGZvciBrZXksIHN0YXR1c2VzIGluIGJ5X3By
b3BlcnR5LmNvcHkoKS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGlmIGxlbihzdGF0dXNlcykg
PT0gbGVuKHZhbHVlcyk6CisgICAgICAgICAgICAgICAgZGVsIGJ5X3Byb3BlcnR5W2tleV0KKyAg
ICAgICAgaWYgbm90IGJ5X3Byb3BlcnR5OgorICAgICAgICAgICAgcmFpc2UgQ29uZGl0aW9uRXJy
b3IKKworICAgIHByb3BlcnRpZXMgPSBzZXQoaXRlbVswXSBmb3IgaXRlbSBpbiBieV9wcm9wZXJ0
eS5pdGVya2V5cygpKQorICAgIGluY2x1ZGVfcHJvcHMgPSBbXQorCisgICAgZm9yIHByb3AgaW4g
cHJvcGVydHlfb3JkZXI6CisgICAgICAgIGlmIHByb3AgaW4gcHJvcGVydGllczoKKyAgICAgICAg
ICAgIGluY2x1ZGVfcHJvcHMuYXBwZW5kKHByb3ApCisKKyAgICBjb25kaXRpb25zID0ge30KKwor
ICAgIGZvciBydW5faW5mbywgc3RhdHVzIGluIHZhbHVlczoKKyAgICAgICAgcHJvcF9zZXQgPSB0
dXBsZSgocHJvcCwgcnVuX2luZm9bcHJvcF0pIGZvciBwcm9wIGluIGluY2x1ZGVfcHJvcHMpCisg
ICAgICAgIGlmIHByb3Bfc2V0IGluIGNvbmRpdGlvbnM6CisgICAgICAgICAgICBjb250aW51ZQor
CisgICAgICAgIGV4cHIgPSBtYWtlX2V4cHIocHJvcF9zZXQsIHN0YXR1cywgYm9vbGVhbl9wcm9w
ZXJ0aWVzPWJvb2xlYW5fcHJvcGVydGllcykKKyAgICAgICAgY29uZGl0aW9uc1twcm9wX3NldF0g
PSAoZXhwciwgc3RhdHVzKQorCisgICAgcmV0dXJuIGNvbmRpdGlvbnMudmFsdWVzKCkKKworCitk
ZWYgbWFrZV9leHByKHByb3Bfc2V0LCBzdGF0dXMsIGJvb2xlYW5fcHJvcGVydGllcz1Ob25lKToK
KyAgICAiIiJDcmVhdGUgYW4gQVNUIHRoYXQgcmV0dXJucyB0aGUgdmFsdWUgYGBzdGF0dXNgYCBn
aXZlbiBhbGwgdGhlCisgICAgcHJvcGVydGllcyBpbiBwcm9wX3NldCBtYXRjaC4KKworICAgIDpw
YXJhbSBwcm9wX3NldDogdHVwbGUgb2YgKHByb3BlcnR5IG5hbWUsIHZhbHVlKSBwYWlycyBmb3Ig
ZWFjaAorICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHkgaW4gdGhpcyBleHByZXNzaW9uIGFu
ZCB0aGUgdmFsdWUgaXQgbXVzdCBtYXRjaAorICAgIDpwYXJhbSBzdGF0dXM6IFN0YXR1cyBvbiBS
SFMgd2hlbiBhbGwgdGhlIGdpdmVuIHByb3BlcnRpZXMgbWF0Y2gKKyAgICA6cGFyYW0gYm9vbGVh
bl9wcm9wZXJ0aWVzOiBTZXQgb2YgcHJvcGVydGllcyBpbiBwcm9wZXJ0eV9vcmRlciB0aGF0IHNo
b3VsZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIHRyZWF0ZWQgYXMgYm9vbGVh
bi4KKyAgICAiIiIKKyAgICByb290ID0gQ29uZGl0aW9uYWxOb2RlKCkKKworICAgIGFzc2VydCBs
ZW4ocHJvcF9zZXQpID4gMAorCisgICAgZXhwcmVzc2lvbnMgPSBbXQorICAgIGZvciBwcm9wLCB2
YWx1ZSBpbiBwcm9wX3NldDoKKyAgICAgICAgbnVtYmVyX3R5cGVzID0gKGludCwgZmxvYXQsIGxv
bmcpCisgICAgICAgIHZhbHVlX2NscyA9IChOdW1iZXJOb2RlCisgICAgICAgICAgICAgICAgICAg
ICBpZiB0eXBlKHZhbHVlKSBpbiBudW1iZXJfdHlwZXMKKyAgICAgICAgICAgICAgICAgICAgIGVs
c2UgU3RyaW5nTm9kZSkKKyAgICAgICAgaWYgcHJvcCBub3QgaW4gYm9vbGVhbl9wcm9wZXJ0aWVz
OgorICAgICAgICAgICAgZXhwcmVzc2lvbnMuYXBwZW5kKAorICAgICAgICAgICAgICAgIEJpbmFy
eUV4cHJlc3Npb25Ob2RlKAorICAgICAgICAgICAgICAgICAgICBCaW5hcnlPcGVyYXRvck5vZGUo
Ij09IiksCisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlTm9kZShwcm9wKSwKKyAgICAgICAg
ICAgICAgICAgICAgdmFsdWVfY2xzKHVuaWNvZGUodmFsdWUpKQorICAgICAgICAgICAgICAgICkp
CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiB2YWx1ZToKKyAgICAgICAgICAgICAgICBl
eHByZXNzaW9ucy5hcHBlbmQoVmFyaWFibGVOb2RlKHByb3ApKQorICAgICAgICAgICAgZWxzZToK
KyAgICAgICAgICAgICAgICBleHByZXNzaW9ucy5hcHBlbmQoCisgICAgICAgICAgICAgICAgICAg
IFVuYXJ5RXhwcmVzc2lvbk5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICBVbmFyeU9wZXJh
dG9yTm9kZSgibm90IiksCisgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZU5vZGUocHJv
cCkKKyAgICAgICAgICAgICAgICAgICAgKSkKKyAgICBpZiBsZW4oZXhwcmVzc2lvbnMpID4gMToK
KyAgICAgICAgcHJldiA9IGV4cHJlc3Npb25zWy0xXQorICAgICAgICBmb3IgY3VyciBpbiByZXZl
cnNlZChleHByZXNzaW9uc1s6LTFdKToKKyAgICAgICAgICAgIG5vZGUgPSBCaW5hcnlFeHByZXNz
aW9uTm9kZSgKKyAgICAgICAgICAgICAgICBCaW5hcnlPcGVyYXRvck5vZGUoImFuZCIpLAorICAg
ICAgICAgICAgICAgIGN1cnIsCisgICAgICAgICAgICAgICAgcHJldikKKyAgICAgICAgICAgIHBy
ZXYgPSBub2RlCisgICAgZWxzZToKKyAgICAgICAgbm9kZSA9IGV4cHJlc3Npb25zWzBdCisKKyAg
ICByb290LmFwcGVuZChub2RlKQorICAgIHJvb3QuYXBwZW5kKFN0cmluZ05vZGUoc3RhdHVzKSkK
KworICAgIHJldHVybiByb290CisKKworZGVmIGdldF9tYW5pZmVzdChtZXRhZGF0YV9yb290LCB0
ZXN0X3BhdGgsIHVybF9iYXNlLCBwcm9wZXJ0eV9vcmRlcj1Ob25lLAorICAgICAgICAgICAgICAg
ICBib29sZWFuX3Byb3BlcnRpZXM9Tm9uZSk6CisgICAgIiIiR2V0IHRoZSBFeHBlY3RlZE1hbmlm
ZXN0IGZvciBhIHBhcnRpY3VsYXIgdGVzdCBwYXRoLCBvciBOb25lIGlmIHRoZXJlIGlzIG5vCisg
ICAgbWV0YWRhdGEgc3RvcmVkIGZvciB0aGF0IHRlc3QgcGF0aC4KKworICAgIDpwYXJhbSBtZXRh
ZGF0YV9yb290OiBBYnNvbHV0ZSBwYXRoIHRvIHRoZSByb290IG9mIHRoZSBtZXRhZGF0YSBkaXJl
Y3RvcnkKKyAgICA6cGFyYW0gdGVzdF9wYXRoOiBQYXRoIHRvIHRoZSB0ZXN0KHMpIHJlbGF0aXZl
IHRvIHRoZSB0ZXN0IHJvb3QKKyAgICA6cGFyYW0gdXJsX2Jhc2U6IEJhc2UgdXJsIGZvciBzZXJ2
aW5nIHRoZSB0ZXN0cyBpbiB0aGlzIG1hbmlmZXN0CisgICAgOnBhcmFtIHByb3BlcnR5X29yZGVy
OiBMaXN0IG9mIHByb3BlcnRpZXMgdG8gdXNlIGluIGV4cGVjdGF0aW9uIG1ldGFkYXRhCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmcm9tIG1vc3QgdG8gbGVhc3Qgc2lnbmlmaWNhbnQuCisg
ICAgOnBhcmFtIGJvb2xlYW5fcHJvcGVydGllczogU2V0IG9mIHByb3BlcnRpZXMgaW4gcHJvcGVy
dHlfb3JkZXIgdGhhdCBzaG91bGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSB0
cmVhdGVkIGFzIGJvb2xlYW4uIiIiCisgICAgbWFuaWZlc3RfcGF0aCA9IGV4cGVjdGVkLmV4cGVj
dGVkX3BhdGgobWV0YWRhdGFfcm9vdCwgdGVzdF9wYXRoKQorICAgIHRyeToKKyAgICAgICAgd2l0
aCBvcGVuKG1hbmlmZXN0X3BhdGgpIGFzIGY6CisgICAgICAgICAgICByZXR1cm4gY29tcGlsZShm
LCB0ZXN0X3BhdGgsIHVybF9iYXNlLCBwcm9wZXJ0eV9vcmRlcj1wcm9wZXJ0eV9vcmRlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW5fcHJvcGVydGllcz1ib29sZWFuX3Byb3Bl
cnRpZXMpCisgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIHJldHVybiBOb25lCisKKworZGVm
IGNvbXBpbGUobWFuaWZlc3RfZmlsZSwgdGVzdF9wYXRoLCB1cmxfYmFzZSwgcHJvcGVydHlfb3Jk
ZXI9Tm9uZSwKKyAgICAgICAgICAgIGJvb2xlYW5fcHJvcGVydGllcz1Ob25lKToKKyAgICByZXR1
cm4gY29uZGl0aW9uYWwuY29tcGlsZShtYW5pZmVzdF9maWxlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGFfY2xzX2dldHRlcj1kYXRhX2Nsc19nZXR0ZXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGVzdF9wYXRoPXRlc3RfcGF0aCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1cmxfYmFzZT11cmxfYmFzZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwcm9wZXJ0eV9vcmRlcj1wcm9wZXJ0eV9vcmRlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sZWFuX3Byb3BlcnRpZXM9Ym9vbGVhbl9wcm9wZXJ0aWVzKQpk
aWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93
cHRydW5uZXIvbWV0YWRhdGEucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMv
d3B0cnVubmVyL3dwdHJ1bm5lci9tZXRhZGF0YS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uNzNmMjY2ZmI5MjgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJU
ZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9tZXRhZGF0YS5weQpA
QCAtMCwwICsxLDM1MSBAQAoraW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc3lzCitp
bXBvcnQgdGVtcGZpbGUKK2ltcG9ydCB0eXBlcworaW1wb3J0IHV1aWQKK2Zyb20gY29sbGVjdGlv
bnMgaW1wb3J0IGRlZmF1bHRkaWN0CisKK2Zyb20gbW96bG9nIGltcG9ydCByZWFkZXIKK2Zyb20g
bW96bG9nIGltcG9ydCBzdHJ1Y3R1cmVkbG9nCisKK2ltcG9ydCBleHBlY3RlZAoraW1wb3J0IG1h
bmlmZXN0dXBkYXRlCitpbXBvcnQgdGVzdGxvYWRlcgoraW1wb3J0IHdwdG1hbmlmZXN0CitpbXBv
cnQgd3B0dGVzdAorZnJvbSB2Y3MgaW1wb3J0IGdpdAorbWFuaWZlc3QgPSBOb25lICAjIE1vZHVs
ZSB0aGF0IHdpbGwgYmUgaW1wb3J0ZWQgcmVsYXRpdmUgdG8gdGVzdF9yb290CittYW5pZmVzdGl0
ZW0gPSBOb25lCisKK2xvZ2dlciA9IHN0cnVjdHVyZWRsb2cuU3RydWN0dXJlZExvZ2dlcigid2Vi
LXBsYXRmb3JtLXRlc3RzIikKKworCitkZWYgbG9hZF90ZXN0X21hbmlmZXN0cyhzZXJ2ZV9yb290
LCB0ZXN0X3BhdGhzKToKKyAgICBkb19kZWxheWVkX2ltcG9ydHMoc2VydmVfcm9vdCkKKyAgICBt
YW5pZmVzdF9sb2FkZXIgPSB0ZXN0bG9hZGVyLk1hbmlmZXN0TG9hZGVyKHRlc3RfcGF0aHMsIEZh
bHNlKQorICAgIHJldHVybiBtYW5pZmVzdF9sb2FkZXIubG9hZCgpCisKKworZGVmIHVwZGF0ZV9l
eHBlY3RlZCh0ZXN0X3BhdGhzLCBzZXJ2ZV9yb290LCBsb2dfZmlsZV9uYW1lcywKKyAgICAgICAg
ICAgICAgICAgICAgcmV2X29sZD1Ob25lLCByZXZfbmV3PSJIRUFEIiwgaWdub3JlX2V4aXN0aW5n
PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICBzeW5jX3Jvb3Q9Tm9uZSwgcHJvcGVydHlfb3Jk
ZXI9Tm9uZSwgYm9vbGVhbl9wcm9wZXJ0aWVzPU5vbmUpOgorICAgICIiIlVwZGF0ZSB0aGUgbWV0
YWRhdGEgZmlsZXMgZm9yIHdlYi1wbGF0Zm9ybS10ZXN0cyBiYXNlZCBvbgorICAgIHRoZSByZXN1
bHRzIG9idGFpbmVkIGluIGEgcHJldmlvdXMgcnVuIiIiCisKKyAgICBtYW5pZmVzdHMgPSBsb2Fk
X3Rlc3RfbWFuaWZlc3RzKHNlcnZlX3Jvb3QsIHRlc3RfcGF0aHMpCisKKyAgICBjaGFuZ2VfZGF0
YSA9IHt9CisKKyAgICBpZiBzeW5jX3Jvb3QgaXMgbm90IE5vbmU6CisgICAgICAgIGlmIHJldl9v
bGQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXZfb2xkID0gZ2l0KCJyZXYtcGFyc2UiLCBy
ZXZfb2xkLCByZXBvPXN5bmNfcm9vdCkuc3RyaXAoKQorICAgICAgICByZXZfbmV3ID0gZ2l0KCJy
ZXYtcGFyc2UiLCByZXZfbmV3LCByZXBvPXN5bmNfcm9vdCkuc3RyaXAoKQorCisgICAgICAgIGlm
IHJldl9vbGQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBjaGFuZ2VfZGF0YSA9IGxvYWRfY2hh
bmdlX2RhdGEocmV2X29sZCwgcmV2X25ldywgcmVwbz1zeW5jX3Jvb3QpCisKKworICAgIGV4cGVj
dGVkX21hcF9ieV9tYW5pZmVzdCA9IHVwZGF0ZV9mcm9tX2xvZ3MobWFuaWZlc3RzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmxvZ19maWxlX25hbWVz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWdub3Jl
X2V4aXN0aW5nPWlnbm9yZV9leGlzdGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHByb3BlcnR5X29yZGVyPXByb3BlcnR5X29yZGVyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbl9wcm9wZXJ0
aWVzPWJvb2xlYW5fcHJvcGVydGllcykKKworICAgIGZvciB0ZXN0X21hbmlmZXN0LCBleHBlY3Rl
ZF9tYXAgaW4gZXhwZWN0ZWRfbWFwX2J5X21hbmlmZXN0Lml0ZXJpdGVtcygpOgorICAgICAgICB1
cmxfYmFzZSA9IG1hbmlmZXN0c1t0ZXN0X21hbmlmZXN0XVsidXJsX2Jhc2UiXQorICAgICAgICBt
ZXRhZGF0YV9wYXRoID0gdGVzdF9wYXRoc1t1cmxfYmFzZV1bIm1ldGFkYXRhX3BhdGgiXQorICAg
ICAgICB3cml0ZV9jaGFuZ2VzKG1ldGFkYXRhX3BhdGgsIGV4cGVjdGVkX21hcCkKKworICAgIHJl
c3VsdHNfY2hhbmdlZCA9IFtpdGVtLnRlc3RfcGF0aCBmb3IgaXRlbSBpbiBleHBlY3RlZF9tYXAu
aXRlcnZhbHVlcygpIGlmIGl0ZW0ubW9kaWZpZWRdCisKKyAgICByZXR1cm4gdW5leHBlY3RlZF9j
aGFuZ2VzKG1hbmlmZXN0cywgY2hhbmdlX2RhdGEsIHJlc3VsdHNfY2hhbmdlZCkKKworCitkZWYg
ZG9fZGVsYXllZF9pbXBvcnRzKHNlcnZlX3Jvb3QpOgorICAgIGdsb2JhbCBtYW5pZmVzdCwgbWFu
aWZlc3RpdGVtCisgICAgZnJvbSBtYW5pZmVzdCBpbXBvcnQgbWFuaWZlc3QsIGl0ZW0gYXMgbWFu
aWZlc3RpdGVtCisKKworZGVmIGZpbGVzX2luX3JlcG8ocmVwb19yb290KToKKyAgICByZXR1cm4g
Z2l0KCJscy10cmVlIiwgIi1yIiwgIi0tbmFtZS1vbmx5IiwgIkhFQUQiKS5zcGxpdCgiXG4iKQor
CisKK2RlZiByZXZfcmFuZ2UocmV2X29sZCwgcmV2X25ldywgc3ltbWV0cmljPUZhbHNlKToKKyAg
ICBqb2luZXIgPSAiLi4iIGlmIG5vdCBzeW1tZXRyaWMgZWxzZSAiLi4uIgorICAgIHJldHVybiAi
Ii5qb2luKFtyZXZfb2xkLCBqb2luZXIsIHJldl9uZXddKQorCisKK2RlZiBwYXRoc19jaGFuZ2Vk
KHJldl9vbGQsIHJldl9uZXcsIHJlcG8pOgorICAgIGRhdGEgPSBnaXQoImRpZmYiLCAiLS1uYW1l
LXN0YXR1cyIsIHJldl9yYW5nZShyZXZfb2xkLCByZXZfbmV3KSwgcmVwbz1yZXBvKQorICAgIGxp
bmVzID0gW3R1cGxlKGl0ZW0uc3RyaXAoKSBmb3IgaXRlbSBpbiBsaW5lLnN0cmlwKCkuc3BsaXQo
Ilx0IiwgMSkpCisgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZGF0YS5zcGxpdCgiXG4iKSBpZiBs
aW5lLnN0cmlwKCldCisgICAgb3V0cHV0ID0gc2V0KGxpbmVzKQorICAgIHJldHVybiBvdXRwdXQK
KworCitkZWYgbG9hZF9jaGFuZ2VfZGF0YShyZXZfb2xkLCByZXZfbmV3LCByZXBvKToKKyAgICBj
aGFuZ2VzID0gcGF0aHNfY2hhbmdlZChyZXZfb2xkLCByZXZfbmV3LCByZXBvKQorICAgIHJ2ID0g
e30KKyAgICBzdGF0dXNfa2V5cyA9IHsiTSI6ICJtb2RpZmllZCIsCisgICAgICAgICAgICAgICAg
ICAgIkEiOiAibmV3IiwKKyAgICAgICAgICAgICAgICAgICAiRCI6ICJkZWxldGVkIn0KKyAgICAj
IFRPRE86IGRlYWwgd2l0aCByZW5hbWVzCisgICAgZm9yIGl0ZW0gaW4gY2hhbmdlczoKKyAgICAg
ICAgcnZbaXRlbVsxXV0gPSBzdGF0dXNfa2V5c1tpdGVtWzBdXQorICAgIHJldHVybiBydgorCisK
K2RlZiB1bmV4cGVjdGVkX2NoYW5nZXMobWFuaWZlc3RzLCBjaGFuZ2VfZGF0YSwgZmlsZXNfY2hh
bmdlZCk6CisgICAgZmlsZXNfY2hhbmdlZCA9IHNldChmaWxlc19jaGFuZ2VkKQorCisgICAgcm9v
dF9tYW5pZmVzdCA9IE5vbmUKKyAgICBmb3IgbWFuaWZlc3QsIHBhdGhzIGluIG1hbmlmZXN0cy5p
dGVyaXRlbXMoKToKKyAgICAgICAgaWYgcGF0aHNbInVybF9iYXNlIl0gPT0gIi8iOgorICAgICAg
ICAgICAgcm9vdF9tYW5pZmVzdCA9IG1hbmlmZXN0CisgICAgICAgICAgICBicmVhaworICAgIGVs
c2U6CisgICAgICAgIHJldHVybiBbXQorCisgICAgcnYgPSBbXQorCisgICAgcmV0dXJuIFtmbiBm
b3IgXywgZm4sIF8gaW4gcm9vdF9tYW5pZmVzdCBpZiBmbiBpbiBmaWxlc19jaGFuZ2VkIGFuZCBj
aGFuZ2VfZGF0YS5nZXQoZm4pICE9ICJNIl0KKworIyBGb3IgZWFjaCB0ZXN0cnVuCisjIExvYWQg
YWxsIGZpbGVzIGFuZCBzY2FuIGZvciB0aGUgc3VpdGVfc3RhcnQgZW50cnkKKyMgQnVpbGQgYSBo
YXNoIG9mIGZpbGVuYW1lOiBwcm9wZXJ0aWVzCisjIEZvciBlYWNoIGRpZmZlcmVudCBzZXQgb2Yg
cHJvcGVydGllcywgZ2F0aGVyIGFsbCBjaHVua3MKKyMgRm9yIGVhY2ggY2h1bmsgaW4gdGhlIHNl
dCBvZiBjaHVua3MsIGdvIHRocm91Z2ggYWxsIHRlc3RzCisjIGZvciBlYWNoIHRlc3QsIG1ha2Ug
YSBtYXAgb2Yge2NvbmRpdGlvbmFsczogWyhwbGF0Zm9ybSwgbmV3X3ZhbHVlKV19CisjIFJlcGVh
dCBmb3IgZWFjaCBwbGF0Zm9ybQorIyBGb3IgZWFjaCB0ZXN0IGluIHRoZSBsaXN0IG9mIHRlc3Rz
OgorIyAgIGZvciBlYWNoIGNvbmRpdGlvbmFsOgorIyAgICAgIElmIGFsbCB0aGUgbmV3IHZhbHVl
cyBtYXRjaCAob3IgdGhlcmUgYXJlbid0IGFueSkgcmV0YWluIHRoYXQgY29uZGl0aW9uYWwKKyMg
ICAgICBJZiBhbnkgbmV3IHZhbHVlcyBtaXNtYXRjaCBtYXJrIHRoZSB0ZXN0IGFzIG5lZWRpbmcg
aHVtYW4gYXR0ZW50aW9uCisjICAgQ2hlY2sgaWYgYWxsIHRoZSBSSFMgdmFsdWVzIGFyZSB0aGUg
c2FtZTsgaWYgc28gY29sbGFwc2UgdGhlIGNvbmRpdGlvbmFscworCisKK2RlZiB1cGRhdGVfZnJv
bV9sb2dzKG1hbmlmZXN0cywgKmxvZ19maWxlbmFtZXMsICoqa3dhcmdzKToKKyAgICBpZ25vcmVf
ZXhpc3RpbmcgPSBrd2FyZ3MuZ2V0KCJpZ25vcmVfZXhpc3RpbmciLCBGYWxzZSkKKyAgICBwcm9w
ZXJ0eV9vcmRlciA9IGt3YXJncy5nZXQoInByb3BlcnR5X29yZGVyIikKKyAgICBib29sZWFuX3By
b3BlcnRpZXMgPSBrd2FyZ3MuZ2V0KCJib29sZWFuX3Byb3BlcnRpZXMiKQorCisgICAgZXhwZWN0
ZWRfbWFwID0ge30KKyAgICBpZF90ZXN0X21hcCA9IHt9CisKKyAgICBmb3IgdGVzdF9tYW5pZmVz
dCwgcGF0aHMgaW4gbWFuaWZlc3RzLml0ZXJpdGVtcygpOgorICAgICAgICBleHBlY3RlZF9tYXBf
bWFuaWZlc3QsIGlkX3BhdGhfbWFwX21hbmlmZXN0ID0gY3JlYXRlX3Rlc3RfdHJlZSgKKyAgICAg
ICAgICAgIHBhdGhzWyJtZXRhZGF0YV9wYXRoIl0sCisgICAgICAgICAgICB0ZXN0X21hbmlmZXN0
LAorICAgICAgICAgICAgcHJvcGVydHlfb3JkZXI9cHJvcGVydHlfb3JkZXIsCisgICAgICAgICAg
ICBib29sZWFuX3Byb3BlcnRpZXM9Ym9vbGVhbl9wcm9wZXJ0aWVzKQorICAgICAgICBleHBlY3Rl
ZF9tYXBbdGVzdF9tYW5pZmVzdF0gPSBleHBlY3RlZF9tYXBfbWFuaWZlc3QKKyAgICAgICAgaWRf
dGVzdF9tYXAudXBkYXRlKGlkX3BhdGhfbWFwX21hbmlmZXN0KQorCisgICAgdXBkYXRlciA9IEV4
cGVjdGVkVXBkYXRlcihtYW5pZmVzdHMsIGV4cGVjdGVkX21hcCwgaWRfdGVzdF9tYXAsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVfZXhpc3Rpbmc9aWdub3JlX2V4aXN0aW5n
KQorICAgIGZvciBsb2dfZmlsZW5hbWUgaW4gbG9nX2ZpbGVuYW1lczoKKyAgICAgICAgd2l0aCBv
cGVuKGxvZ19maWxlbmFtZSkgYXMgZjoKKyAgICAgICAgICAgIHVwZGF0ZXIudXBkYXRlX2Zyb21f
bG9nKGYpCisKKyAgICBmb3IgbWFuaWZlc3RfZXhwZWN0ZWQgaW4gZXhwZWN0ZWRfbWFwLml0ZXJ2
YWx1ZXMoKToKKyAgICAgICAgZm9yIHRyZWUgaW4gbWFuaWZlc3RfZXhwZWN0ZWQuaXRlcnZhbHVl
cygpOgorICAgICAgICAgICAgZm9yIHRlc3QgaW4gdHJlZS5pdGVyY2hpbGRyZW4oKToKKyAgICAg
ICAgICAgICAgICBmb3Igc3VidGVzdCBpbiB0ZXN0Lml0ZXJjaGlsZHJlbigpOgorICAgICAgICAg
ICAgICAgICAgICBzdWJ0ZXN0LmNvYWxlc2NlX2V4cGVjdGVkKCkKKyAgICAgICAgICAgICAgICB0
ZXN0LmNvYWxlc2NlX2V4cGVjdGVkKCkKKworICAgIHJldHVybiBleHBlY3RlZF9tYXAKKworZGVm
IGRpcmVjdG9yeV9tYW5pZmVzdHMobWV0YWRhdGFfcGF0aCk6CisgICAgcnYgPSBbXQorICAgIGZv
ciBkaXJwYXRoLCBkaXJuYW1lLCBmaWxlbmFtZXMgaW4gb3Mud2FsayhtZXRhZGF0YV9wYXRoKToK
KyAgICAgICAgaWYgIl9fZGlyX18uaW5pIiBpbiBmaWxlbmFtZXM6CisgICAgICAgICAgICByZWxf
cGF0aCA9IG9zLnBhdGgucmVscGF0aChkaXJwYXRoLCBtZXRhZGF0YV9wYXRoKQorICAgICAgICAg
ICAgcnYuYXBwZW5kKG9zLnBhdGguam9pbihyZWxfcGF0aCwgIl9fZGlyX18uaW5pIikpCisgICAg
cmV0dXJuIHJ2CisKK2RlZiB3cml0ZV9jaGFuZ2VzKG1ldGFkYXRhX3BhdGgsIGV4cGVjdGVkX21h
cCk6CisgICAgIyBGaXJzdCB3cml0ZSB0aGUgbmV3IG1hbmlmZXN0IGZpbGVzIHRvIGEgdGVtcG9y
YXJ5IGRpcmVjdG9yeQorICAgIHRlbXBfcGF0aCA9IHRlbXBmaWxlLm1rZHRlbXAoZGlyPW9zLnBh
dGguc3BsaXQobWV0YWRhdGFfcGF0aClbMF0pCisgICAgd3JpdGVfbmV3X2V4cGVjdGVkKHRlbXBf
cGF0aCwgZXhwZWN0ZWRfbWFwKQorCisgICAgIyBLZWVwIGFsbCBfX2Rpcl9fLmluaSBmaWxlcyAo
dGhlc2UgYXJlIG5vdCBpbiBleHBlY3RlZF9tYXAgYmVjYXVzZSB0aGV5CisgICAgIyBhcmVuJ3Qg
YXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lmaWMgdGVzdCkKKyAgICBrZWVwX2ZpbGVzID0gZGlyZWN0
b3J5X21hbmlmZXN0cyhtZXRhZGF0YV9wYXRoKQorCisgICAgIyBDb3B5IGFsbCBmaWxlcyBpbiB0
aGUgcm9vdCB0byB0aGUgdGVtcG9yYXJ5IGxvY2F0aW9uIHNpbmNlCisgICAgIyB0aGVzZSBjYW5u
b3QgYmUgaW5pIGZpbGVzCisgICAga2VlcF9maWxlcy5leHRlbmQoaXRlbSBmb3IgaXRlbSBpbiBv
cy5saXN0ZGlyKG1ldGFkYXRhX3BhdGgpIGlmCisgICAgICAgICAgICAgICAgICAgICAgbm90IG9z
LnBhdGguaXNkaXIob3MucGF0aC5qb2luKG1ldGFkYXRhX3BhdGgsIGl0ZW0pKSkKKworICAgIGZv
ciBpdGVtIGluIGtlZXBfZmlsZXM6CisgICAgICAgIGRlc3RfZGlyID0gb3MucGF0aC5kaXJuYW1l
KG9zLnBhdGguam9pbih0ZW1wX3BhdGgsIGl0ZW0pKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5l
eGlzdHMoZGVzdF9kaXIpOgorICAgICAgICAgICAgb3MubWFrZWRpcnMoZGVzdF9kaXIpCisgICAg
ICAgIHNodXRpbC5jb3B5ZmlsZShvcy5wYXRoLmpvaW4obWV0YWRhdGFfcGF0aCwgaXRlbSksCisg
ICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4odGVtcF9wYXRoLCBpdGVtKSkKKwor
ICAgICMgVGhlbiBtb3ZlIHRoZSBvbGQgbWFuaWZlc3QgZmlsZXMgdG8gYSBuZXcgbG9jYXRpb24K
KyAgICB0ZW1wX3BhdGhfMiA9IG1ldGFkYXRhX3BhdGggKyBzdHIodXVpZC51dWlkNCgpKQorICAg
IG9zLnJlbmFtZShtZXRhZGF0YV9wYXRoLCB0ZW1wX3BhdGhfMikKKyAgICAjIE1vdmUgdGhlIG5l
dyBmaWxlcyB0byB0aGUgZGVzdGluYXRpb24gbG9jYXRpb24gYW5kIHJlbW92ZSB0aGUgb2xkIGZp
bGVzCisgICAgb3MucmVuYW1lKHRlbXBfcGF0aCwgbWV0YWRhdGFfcGF0aCkKKyAgICBzaHV0aWwu
cm10cmVlKHRlbXBfcGF0aF8yKQorCisKK2RlZiB3cml0ZV9uZXdfZXhwZWN0ZWQobWV0YWRhdGFf
cGF0aCwgZXhwZWN0ZWRfbWFwKToKKyAgICAjIFNlcmlhbGl6ZSB0aGUgZGF0YSBiYWNrIHRvIGEg
ZmlsZQorICAgIGZvciB0cmVlIGluIGV4cGVjdGVkX21hcC5pdGVydmFsdWVzKCk6CisgICAgICAg
IGlmIG5vdCB0cmVlLmlzX2VtcHR5OgorICAgICAgICAgICAgbWFuaWZlc3Rfc3RyID0gd3B0bWFu
aWZlc3Quc2VyaWFsaXplKHRyZWUubm9kZSwgc2tpcF9lbXB0eV9kYXRhPVRydWUpCisgICAgICAg
ICAgICBhc3NlcnQgbWFuaWZlc3Rfc3RyICE9ICIiCisgICAgICAgICAgICBwYXRoID0gZXhwZWN0
ZWQuZXhwZWN0ZWRfcGF0aChtZXRhZGF0YV9wYXRoLCB0cmVlLnRlc3RfcGF0aCkKKyAgICAgICAg
ICAgIGRpciA9IG9zLnBhdGguc3BsaXQocGF0aClbMF0KKyAgICAgICAgICAgIGlmIG5vdCBvcy5w
YXRoLmV4aXN0cyhkaXIpOgorICAgICAgICAgICAgICAgIG9zLm1ha2VkaXJzKGRpcikKKyAgICAg
ICAgICAgIHdpdGggb3BlbihwYXRoLCAid2IiKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3Jp
dGUobWFuaWZlc3Rfc3RyKQorCisKK2NsYXNzIEV4cGVjdGVkVXBkYXRlcihvYmplY3QpOgorICAg
IGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0X21hbmlmZXN0cywgZXhwZWN0ZWRfdHJlZSwgaWRfcGF0
aF9tYXAsIGlnbm9yZV9leGlzdGluZz1GYWxzZSk6CisgICAgICAgIHNlbGYudGVzdF9tYW5pZmVz
dHMgPSB0ZXN0X21hbmlmZXN0cworICAgICAgICBzZWxmLmV4cGVjdGVkX3RyZWUgPSBleHBlY3Rl
ZF90cmVlCisgICAgICAgIHNlbGYuaWRfcGF0aF9tYXAgPSBpZF9wYXRoX21hcAorICAgICAgICBz
ZWxmLmlnbm9yZV9leGlzdGluZyA9IGlnbm9yZV9leGlzdGluZworICAgICAgICBzZWxmLnJ1bl9p
bmZvID0gTm9uZQorICAgICAgICBzZWxmLmFjdGlvbl9tYXAgPSB7InN1aXRlX3N0YXJ0Ijogc2Vs
Zi5zdWl0ZV9zdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0X3N0YXJ0Ijog
c2VsZi50ZXN0X3N0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3Rfc3RhdHVz
Ijogc2VsZi50ZXN0X3N0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0X2Vu
ZCI6IHNlbGYudGVzdF9lbmR9CisgICAgICAgIHNlbGYudGVzdHNfdmlzaXRlZCA9IHt9CisKKyAg
ICAgICAgc2VsZi50ZXN0X2NhY2hlID0ge30KKworICAgIGRlZiB1cGRhdGVfZnJvbV9sb2coc2Vs
ZiwgbG9nX2ZpbGUpOgorICAgICAgICBzZWxmLnJ1bl9pbmZvID0gTm9uZQorICAgICAgICBsb2df
cmVhZGVyID0gcmVhZGVyLnJlYWQobG9nX2ZpbGUpCisgICAgICAgIHJlYWRlci5lYWNoX2xvZyhs
b2dfcmVhZGVyLCBzZWxmLmFjdGlvbl9tYXApCisKKyAgICBkZWYgc3VpdGVfc3RhcnQoc2VsZiwg
ZGF0YSk6CisgICAgICAgIHNlbGYucnVuX2luZm8gPSBkYXRhWyJydW5faW5mbyJdCisKKyAgICBk
ZWYgdGVzdF9pZChzZWxmLCBpZCk6CisgICAgICAgIGlmIHR5cGUoaWQpIGluIHR5cGVzLlN0cmlu
Z1R5cGVzOgorICAgICAgICAgICAgcmV0dXJuIGlkCisgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICByZXR1cm4gdHVwbGUoaWQpCisKKyAgICBkZWYgdGVzdF9zdGFydChzZWxmLCBkYXRhKToKKyAg
ICAgICAgdGVzdF9pZCA9IHNlbGYudGVzdF9pZChkYXRhWyJ0ZXN0Il0pCisgICAgICAgIHRyeToK
KyAgICAgICAgICAgIHRlc3RfbWFuaWZlc3QsIHRlc3QgPSBzZWxmLmlkX3BhdGhfbWFwW3Rlc3Rf
aWRdCisgICAgICAgICAgICBleHBlY3RlZF9ub2RlID0gc2VsZi5leHBlY3RlZF90cmVlW3Rlc3Rf
bWFuaWZlc3RdW3Rlc3RdLmdldF90ZXN0KHRlc3RfaWQpCisgICAgICAgIGV4Y2VwdCBLZXlFcnJv
cjoKKyAgICAgICAgICAgIHByaW50ICJUZXN0IG5vdCBmb3VuZCAlcywgc2tpcHBpbmciICUgdGVz
dF9pZAorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYudGVzdF9jYWNoZVt0ZXN0X2lk
XSA9IGV4cGVjdGVkX25vZGUKKworICAgICAgICBpZiB0ZXN0X2lkIG5vdCBpbiBzZWxmLnRlc3Rz
X3Zpc2l0ZWQ6CisgICAgICAgICAgICBpZiBzZWxmLmlnbm9yZV9leGlzdGluZzoKKyAgICAgICAg
ICAgICAgICBleHBlY3RlZF9ub2RlLmNsZWFyX2V4cGVjdGVkKCkKKyAgICAgICAgICAgIHNlbGYu
dGVzdHNfdmlzaXRlZFt0ZXN0X2lkXSA9IHNldCgpCisKKyAgICBkZWYgdGVzdF9zdGF0dXMoc2Vs
ZiwgZGF0YSk6CisgICAgICAgIHRlc3RfaWQgPSBzZWxmLnRlc3RfaWQoZGF0YVsidGVzdCJdKQor
ICAgICAgICB0ZXN0ID0gc2VsZi50ZXN0X2NhY2hlLmdldCh0ZXN0X2lkKQorICAgICAgICBpZiB0
ZXN0IGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgdGVzdF9jbHMgPSB3cHR0
ZXN0Lm1hbmlmZXN0X3Rlc3RfY2xzW3Rlc3QudGVzdF90eXBlXQorCisgICAgICAgIHN1YnRlc3Qg
PSB0ZXN0LmdldF9zdWJ0ZXN0KGRhdGFbInN1YnRlc3QiXSkKKworICAgICAgICBzZWxmLnRlc3Rz
X3Zpc2l0ZWRbdGVzdC5pZF0uYWRkKGRhdGFbInN1YnRlc3QiXSkKKworICAgICAgICByZXN1bHQg
PSB0ZXN0X2Nscy5zdWJ0ZXN0X3Jlc3VsdF9jbHMoCisgICAgICAgICAgICBkYXRhWyJzdWJ0ZXN0
Il0sCisgICAgICAgICAgICBkYXRhWyJzdGF0dXMiXSwKKyAgICAgICAgICAgIGRhdGEuZ2V0KCJt
ZXNzYWdlIikpCisKKyAgICAgICAgc3VidGVzdC5zZXRfcmVzdWx0KHNlbGYucnVuX2luZm8sIHJl
c3VsdCkKKworICAgIGRlZiB0ZXN0X2VuZChzZWxmLCBkYXRhKToKKyAgICAgICAgdGVzdF9pZCA9
IHNlbGYudGVzdF9pZChkYXRhWyJ0ZXN0Il0pCisgICAgICAgIHRlc3QgPSBzZWxmLnRlc3RfY2Fj
aGUuZ2V0KHRlc3RfaWQpCisgICAgICAgIGlmIHRlc3QgaXMgTm9uZToKKyAgICAgICAgICAgIHJl
dHVybgorICAgICAgICB0ZXN0X2NscyA9IHdwdHRlc3QubWFuaWZlc3RfdGVzdF9jbHNbdGVzdC50
ZXN0X3R5cGVdCisKKyAgICAgICAgaWYgZGF0YVsic3RhdHVzIl0gPT0gIlNLSVAiOgorICAgICAg
ICAgICAgcmV0dXJuCisKKyAgICAgICAgcmVzdWx0ID0gdGVzdF9jbHMucmVzdWx0X2NscygKKyAg
ICAgICAgICAgIGRhdGFbInN0YXR1cyJdLAorICAgICAgICAgICAgZGF0YS5nZXQoIm1lc3NhZ2Ui
KSkKKworICAgICAgICB0ZXN0LnNldF9yZXN1bHQoc2VsZi5ydW5faW5mbywgcmVzdWx0KQorICAg
ICAgICBkZWwgc2VsZi50ZXN0X2NhY2hlW3Rlc3RfaWRdCisKKworZGVmIGNyZWF0ZV90ZXN0X3Ry
ZWUobWV0YWRhdGFfcGF0aCwgdGVzdF9tYW5pZmVzdCwgcHJvcGVydHlfb3JkZXI9Tm9uZSwKKyAg
ICAgICAgICAgICAgICAgICAgIGJvb2xlYW5fcHJvcGVydGllcz1Ob25lKToKKyAgICBleHBlY3Rl
ZF9tYXAgPSB7fQorICAgIGlkX3Rlc3RfbWFwID0ge30KKyAgICBleGNsdWRlX3R5cGVzID0gZnJv
emVuc2V0KFsic3R1YiIsICJoZWxwZXIiLCAibWFudWFsIiwgInN1cHBvcnQiLCAiY29uZm9ybWFu
Y2VjaGVja2VyIl0pCisgICAgYWxsX3R5cGVzID0gW2l0ZW0uaXRlbV90eXBlIGZvciBpdGVtIGlu
IG1hbmlmZXN0aXRlbS5fX2RpY3RfXy5pdGVydmFsdWVzKCkKKyAgICAgICAgICAgICAgICAgaWYg
dHlwZShpdGVtKSA9PSB0eXBlIGFuZAorICAgICAgICAgICAgICAgICBpc3N1YmNsYXNzKGl0ZW0s
IG1hbmlmZXN0aXRlbS5NYW5pZmVzdEl0ZW0pIGFuZAorICAgICAgICAgICAgICAgICBpdGVtLml0
ZW1fdHlwZSBpcyBub3QgTm9uZV0KKyAgICBpbmNsdWRlX3R5cGVzID0gc2V0KGFsbF90eXBlcykg
LSBleGNsdWRlX3R5cGVzCisgICAgZm9yIF8sIHRlc3RfcGF0aCwgdGVzdHMgaW4gdGVzdF9tYW5p
ZmVzdC5pdGVydHlwZXMoKmluY2x1ZGVfdHlwZXMpOgorICAgICAgICBleHBlY3RlZF9kYXRhID0g
bG9hZF9leHBlY3RlZCh0ZXN0X21hbmlmZXN0LCBtZXRhZGF0YV9wYXRoLCB0ZXN0X3BhdGgsIHRl
c3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eV9vcmRl
cj1wcm9wZXJ0eV9vcmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbGVhbl9wcm9wZXJ0aWVzPWJvb2xlYW5fcHJvcGVydGllcykKKyAgICAgICAgaWYgZXhwZWN0
ZWRfZGF0YSBpcyBOb25lOgorICAgICAgICAgICAgZXhwZWN0ZWRfZGF0YSA9IGNyZWF0ZV9leHBl
Y3RlZCh0ZXN0X21hbmlmZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0ZXN0X3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwcm9wZXJ0eV9vcmRlcj1wcm9wZXJ0eV9vcmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbl9wcm9wZXJ0aWVzPWJvb2xlYW5fcHJvcGVydGll
cykKKworICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0czoKKyAgICAgICAgICAgIGlkX3Rlc3RfbWFw
W3Rlc3QuaWRdID0gKHRlc3RfbWFuaWZlc3QsIHRlc3QpCisgICAgICAgICAgICBleHBlY3RlZF9t
YXBbdGVzdF0gPSBleHBlY3RlZF9kYXRhCisKKyAgICByZXR1cm4gZXhwZWN0ZWRfbWFwLCBpZF90
ZXN0X21hcAorCisKK2RlZiBjcmVhdGVfZXhwZWN0ZWQodGVzdF9tYW5pZmVzdCwgdGVzdF9wYXRo
LCB0ZXN0cywgcHJvcGVydHlfb3JkZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgYm9vbGVh
bl9wcm9wZXJ0aWVzPU5vbmUpOgorICAgIGV4cGVjdGVkID0gbWFuaWZlc3R1cGRhdGUuRXhwZWN0
ZWRNYW5pZmVzdChOb25lLCB0ZXN0X3BhdGgsIHRlc3RfbWFuaWZlc3QudXJsX2Jhc2UsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5X29yZGVy
PXByb3BlcnR5X29yZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sZWFuX3Byb3BlcnRpZXM9Ym9vbGVhbl9wcm9wZXJ0aWVzKQorICAgIGZvciB0
ZXN0IGluIHRlc3RzOgorICAgICAgICBleHBlY3RlZC5hcHBlbmQobWFuaWZlc3R1cGRhdGUuVGVz
dE5vZGUuY3JlYXRlKHRlc3QuaXRlbV90eXBlLCB0ZXN0LmlkKSkKKyAgICByZXR1cm4gZXhwZWN0
ZWQKKworCitkZWYgbG9hZF9leHBlY3RlZCh0ZXN0X21hbmlmZXN0LCBtZXRhZGF0YV9wYXRoLCB0
ZXN0X3BhdGgsIHRlc3RzLCBwcm9wZXJ0eV9vcmRlcj1Ob25lLAorICAgICAgICAgICAgICAgICAg
Ym9vbGVhbl9wcm9wZXJ0aWVzPU5vbmUpOgorICAgIGV4cGVjdGVkX21hbmlmZXN0ID0gbWFuaWZl
c3R1cGRhdGUuZ2V0X21hbmlmZXN0KG1ldGFkYXRhX3BhdGgsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9wYXRoLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfbWFuaWZlc3QudXJs
X2Jhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHJvcGVydHlfb3JkZXI9cHJvcGVydHlfb3JkZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbl9wcm9wZXJ0aWVzPWJvb2xlYW5f
cHJvcGVydGllcykKKyAgICBpZiBleHBlY3RlZF9tYW5pZmVzdCBpcyBOb25lOgorICAgICAgICBy
ZXR1cm4KKworICAgIHRlc3RzX2J5X2lkID0ge2l0ZW0uaWQ6IGl0ZW0gZm9yIGl0ZW0gaW4gdGVz
dHN9CisKKyAgICAjIFJlbW92ZSBleHBlY3RlZCBkYXRhIGZvciB0ZXN0cyB0aGF0IG5vIGxvbmdl
ciBleGlzdAorICAgIGZvciB0ZXN0IGluIGV4cGVjdGVkX21hbmlmZXN0Lml0ZXJjaGlsZHJlbigp
OgorICAgICAgICBpZiBub3QgdGVzdC5pZCBpbiB0ZXN0c19ieV9pZDoKKyAgICAgICAgICAgIHRl
c3QucmVtb3ZlKCkKKworICAgICMgQWRkIHRlc3RzIHRoYXQgZG9uJ3QgaGF2ZSBleHBlY3RlZCBk
YXRhCisgICAgZm9yIHRlc3QgaW4gdGVzdHM6CisgICAgICAgIGlmIG5vdCBleHBlY3RlZF9tYW5p
ZmVzdC5oYXNfdGVzdCh0ZXN0LmlkKToKKyAgICAgICAgICAgIGV4cGVjdGVkX21hbmlmZXN0LmFw
cGVuZChtYW5pZmVzdHVwZGF0ZS5UZXN0Tm9kZS5jcmVhdGUodGVzdC5pdGVtX3R5cGUsIHRlc3Qu
aWQpKQorCisgICAgcmV0dXJuIGV4cGVjdGVkX21hbmlmZXN0CmRpZmYgLS1naXQgYS9XZWJEcml2
ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9wcm9kdWN0cy5w
eSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVy
L3Byb2R1Y3RzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jMDc3
Zjk1ZGZkOQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90
b29scy93cHRydW5uZXIvd3B0cnVubmVyL3Byb2R1Y3RzLnB5CkBAIC0wLDAgKzEsNjkgQEAKK2lt
cG9ydCBvcworaW1wb3J0IGltcG9ydGxpYgoraW1wb3J0IGltcAorCitmcm9tIC5icm93c2VycyBp
bXBvcnQgcHJvZHVjdF9saXN0CisKK2RlZiBwcm9kdWN0c19lbmFibGVkKGNvbmZpZyk6CisgICAg
bmFtZXMgPSBjb25maWcuZ2V0KCJwcm9kdWN0cyIsIHt9KS5rZXlzKCkKKyAgICBpZiBub3QgbmFt
ZXM6CisgICAgICAgIHJldHVybiBwcm9kdWN0X2xpc3QKKyAgICBlbHNlOgorICAgICAgICByZXR1
cm4gbmFtZXMKKworZGVmIHByb2R1Y3RfbW9kdWxlKGNvbmZpZywgcHJvZHVjdCk6CisgICAgaGVy
ZSA9IG9zLnBhdGguam9pbihvcy5wYXRoLnNwbGl0KF9fZmlsZV9fKVswXSkKKyAgICBwcm9kdWN0
X2RpciA9IG9zLnBhdGguam9pbihoZXJlLCAiYnJvd3NlcnMiKQorCisgICAgaWYgcHJvZHVjdCBu
b3QgaW4gcHJvZHVjdHNfZW5hYmxlZChjb25maWcpOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9y
KCJVbmtub3duIHByb2R1Y3QgJXMiICUgcHJvZHVjdCkKKworICAgIHBhdGggPSBjb25maWcuZ2V0
KCJwcm9kdWN0cyIsIHt9KS5nZXQocHJvZHVjdCwgTm9uZSkKKyAgICBpZiBwYXRoOgorICAgICAg
ICBtb2R1bGUgPSBpbXAubG9hZF9zb3VyY2UoJ3dwdHJ1bm5lci5icm93c2Vycy4nICsgcHJvZHVj
dCwgcGF0aCkKKyAgICBlbHNlOgorICAgICAgICBtb2R1bGUgPSBpbXBvcnRsaWIuaW1wb3J0X21v
ZHVsZSgid3B0cnVubmVyLmJyb3dzZXJzLiIgKyBwcm9kdWN0KQorCisgICAgaWYgbm90IGhhc2F0
dHIobW9kdWxlLCAiX193cHRydW5uZXJfXyIpOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJQ
cm9kdWN0IG1vZHVsZSBkb2VzIG5vdCBkZWZpbmUgX193cHRydW5uZXJfXyB2YXJpYWJsZSIpCisK
KyAgICByZXR1cm4gbW9kdWxlCisKKworZGVmIGxvYWRfcHJvZHVjdChjb25maWcsIHByb2R1Y3Qp
OgorICAgIG1vZHVsZSA9IHByb2R1Y3RfbW9kdWxlKGNvbmZpZywgcHJvZHVjdCkKKyAgICBkYXRh
ID0gbW9kdWxlLl9fd3B0cnVubmVyX18KKworICAgIGNoZWNrX2FyZ3MgPSBnZXRhdHRyKG1vZHVs
ZSwgZGF0YVsiY2hlY2tfYXJncyJdKQorICAgIGJyb3dzZXJfY2xzID0gZ2V0YXR0cihtb2R1bGUs
IGRhdGFbImJyb3dzZXIiXSkKKyAgICBicm93c2VyX2t3YXJncyA9IGdldGF0dHIobW9kdWxlLCBk
YXRhWyJicm93c2VyX2t3YXJncyJdKQorICAgIGV4ZWN1dG9yX2t3YXJncyA9IGdldGF0dHIobW9k
dWxlLCBkYXRhWyJleGVjdXRvcl9rd2FyZ3MiXSkKKyAgICBlbnZfb3B0aW9ucyA9IGdldGF0dHIo
bW9kdWxlLCBkYXRhWyJlbnZfb3B0aW9ucyJdKSgpCisgICAgZW52X2V4dHJhcyA9IGdldGF0dHIo
bW9kdWxlLCBkYXRhWyJlbnZfZXh0cmFzIl0pCisgICAgcnVuX2luZm9fZXh0cmFzID0gKGdldGF0
dHIobW9kdWxlLCBkYXRhWyJydW5faW5mb19leHRyYXMiXSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgaWYgInJ1bl9pbmZvX2V4dHJhcyIgaW4gZGF0YSBlbHNlIGxhbWJkYSAqKmt3YXJnczp7fSkK
KworICAgIGV4ZWN1dG9yX2NsYXNzZXMgPSB7fQorICAgIGZvciB0ZXN0X3R5cGUsIGNsc19uYW1l
IGluIGRhdGFbImV4ZWN1dG9yIl0uaXRlcml0ZW1zKCk6CisgICAgICAgIGNscyA9IGdldGF0dHIo
bW9kdWxlLCBjbHNfbmFtZSkKKyAgICAgICAgZXhlY3V0b3JfY2xhc3Nlc1t0ZXN0X3R5cGVdID0g
Y2xzCisKKyAgICByZXR1cm4gKGNoZWNrX2FyZ3MsCisgICAgICAgICAgICBicm93c2VyX2Nscywg
YnJvd3Nlcl9rd2FyZ3MsCisgICAgICAgICAgICBleGVjdXRvcl9jbGFzc2VzLCBleGVjdXRvcl9r
d2FyZ3MsCisgICAgICAgICAgICBlbnZfb3B0aW9ucywgZW52X2V4dHJhcywgcnVuX2luZm9fZXh0
cmFzKQorCisKK2RlZiBsb2FkX3Byb2R1Y3RfdXBkYXRlKGNvbmZpZywgcHJvZHVjdCk6CisgICAg
IiIiUmV0dXJuIHR1cGxlIG9mIChwcm9wZXJ0eV9vcmRlciwgYm9vbGVhbl9wcm9wZXJ0aWVzKSBp
bmRpY2F0aW5nIHRoZQorICAgIHJ1bl9pbmZvIHByb3BlcnRpZXMgdG8gdXNlIHdoZW4gY29uc3Ry
dWN0aW5nIHRoZSBleHBlY3RhdGlvbiBkYXRhIGZvcgorICAgIHRoaXMgcHJvZHVjdC4gTm9uZSBm
b3IgZWl0aGVyIGtleSBpbmRpY2F0ZXMgdGhhdCB0aGUgZGVmYXVsdCBrZXlzCisgICAgYXBwcm9w
cmlhdGUgZm9yIGRpc3Rpbmd1aXNoaW5nIGJhc2VkIG9uIHBsYXRmb3JtIHdpbGwgYmUgdXNlZC4i
IiIKKworICAgIG1vZHVsZSA9IHByb2R1Y3RfbW9kdWxlKGNvbmZpZywgcHJvZHVjdCkKKyAgICBk
YXRhID0gbW9kdWxlLl9fd3B0cnVubmVyX18KKworICAgIHVwZGF0ZV9wcm9wZXJ0aWVzID0gKGdl
dGF0dHIobW9kdWxlLCBkYXRhWyJ1cGRhdGVfcHJvcGVydGllcyJdKSgpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgInVwZGF0ZV9wcm9wZXJ0aWVzIiBpbiBkYXRhIGVsc2UgKE5vbmUsIE5v
bmUpKQorCisgICAgcmV0dXJuIHVwZGF0ZV9wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS9XZWJEcml2
ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9yZWR1Y2UucHkg
Yi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9y
ZWR1Y2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmQyNDVlZTM2
MDJiCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xz
L3dwdHJ1bm5lci93cHRydW5uZXIvcmVkdWNlLnB5CkBAIC0wLDAgKzEsMTkzIEBACitpbXBvcnQg
c3lzCitpbXBvcnQgdGVtcGZpbGUKK2Zyb20gY1N0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworZnJv
bSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QKKworaW1wb3J0IHdwdHJ1bm5lcgoraW1w
b3J0IHdwdHRlc3QKKworZnJvbSBtb3psb2cgaW1wb3J0IGNvbW1hbmRsaW5lLCByZWFkZXIKKwor
bG9nZ2VyID0gTm9uZQorCisKK2RlZiBzZXR1cF9sb2dnaW5nKGFyZ3MsIGRlZmF1bHRzKToKKyAg
ICBnbG9iYWwgbG9nZ2VyCisgICAgbG9nZ2VyID0gY29tbWFuZGxpbmUuc2V0dXBfbG9nZ2luZygi
d2ViLXBsYXRmb3JtLXRlc3RzLXVuc3RhYmxlIiwgYXJncywgZGVmYXVsdHMpCisgICAgd3B0cnVu
bmVyLnNldHVwX3N0ZGxpYl9sb2dnZXIoKQorCisgICAgZm9yIG5hbWUgaW4gYXJncy5rZXlzKCk6
CisgICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgibG9nXyIpOgorICAgICAgICAgICAgYXJncy5w
b3AobmFtZSkKKworICAgIHJldHVybiBsb2dnZXIKKworCitkZWYgZ3JvdXAoaXRlbXMsIHNpemUp
OgorICAgIHJ2ID0gW10KKyAgICBpID0gMAorICAgIHdoaWxlIGkgPCBsZW4oaXRlbXMpOgorICAg
ICAgICBydi5hcHBlbmQoaXRlbXNbaTppICsgc2l6ZV0pCisgICAgICAgIGkgKz0gc2l6ZQorCisg
ICAgcmV0dXJuIHJ2CisKKworZGVmIG5leHRfcG93ZXJfb2ZfdHdvKG51bSk6CisgICAgcnYgPSAx
CisgICAgd2hpbGUgcnYgPCBudW06CisgICAgICAgIHJ2ID0gcnYgPDwgMQorICAgIHJldHVybiBy
dgorCisKK2NsYXNzIFJlZHVjZXIob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGFy
Z2V0LCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYudGFyZ2V0ID0gdGFyZ2V0CisKKyAgICAgICAg
c2VsZi50ZXN0X3R5cGUgPSBrd2FyZ3NbInRlc3RfdHlwZXMiXVswXQorICAgICAgICBydW5faW5m
byA9IHdwdHRlc3QuZ2V0X3J1bl9pbmZvKGt3YXJnc1sibWV0YWRhdGFfcm9vdCJdLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3YXJnc1sicHJvZHVjdCJdLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnPUZhbHNlKQorICAgICAg
ICB0ZXN0X2ZpbHRlciA9IHdwdHJ1bm5lci5UZXN0RmlsdGVyKGluY2x1ZGU9a3dhcmdzWyJpbmNs
dWRlIl0pCisgICAgICAgIHNlbGYudGVzdF9sb2FkZXIgPSB3cHRydW5uZXIuVGVzdExvYWRlcihr
d2FyZ3NbInRlc3RzX3Jvb3QiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGt3YXJnc1sibWV0YWRhdGFfcm9vdCJdLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGYudGVzdF90eXBlXSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bl9pbmZvLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFuaWZlc3RfZmlsZXI9
dGVzdF9maWx0ZXIpCisgICAgICAgIGlmIGt3YXJnc1sicmVwZWF0Il0gPT0gMToKKyAgICAgICAg
ICAgIGxvZ2dlci5jcml0aWNhbCgiTmVlZCB0byBzcGVjaWZ5IC0tcmVwZWF0IHdpdGggbW9yZSB0
aGFuIG9uZSByZXBldGl0aW9uIikKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgIHNl
bGYua3dhcmdzID0ga3dhcmdzCisKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICBhbGxfdGVz
dHMgPSBzZWxmLmdldF9pbml0aWFsX3Rlc3RzKCkKKworICAgICAgICB0ZXN0cyA9IGFsbF90ZXN0
c1s6LTFdCisgICAgICAgIHRhcmdldF90ZXN0ID0gW2FsbF90ZXN0c1stMV1dCisKKyAgICAgICAg
aWYgc2VsZi51bnN0YWJsZSh0YXJnZXRfdGVzdCk6CisgICAgICAgICAgICByZXR1cm4gdGFyZ2V0
X3Rlc3QKKworICAgICAgICBpZiBub3Qgc2VsZi51bnN0YWJsZShhbGxfdGVzdHMpOgorICAgICAg
ICAgICAgcmV0dXJuIFtdCisKKyAgICAgICAgY2h1bmtfc2l6ZSA9IG5leHRfcG93ZXJfb2ZfdHdv
KGludChsZW4odGVzdHMpIC8gMikpCisgICAgICAgIGxvZ2dlci5kZWJ1ZygiVXNpbmcgY2h1bmsg
c2l6ZSAlaSIgJSBjaHVua19zaXplKQorCisgICAgICAgIHdoaWxlIGNodW5rX3NpemUgPj0gMToK
KyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiJWkgdGVzdHMgcmVtYWluIiAlIGxlbih0ZXN0cykp
CisgICAgICAgICAgICBjaHVua3MgPSBncm91cCh0ZXN0cywgY2h1bmtfc2l6ZSkKKyAgICAgICAg
ICAgIGNodW5rX3Jlc3VsdHMgPSBbTm9uZV0gKiBsZW4oY2h1bmtzKQorCisgICAgICAgICAgICBm
b3IgaSwgY2h1bmsgaW4gZW51bWVyYXRlKGNodW5rcyk6CisgICAgICAgICAgICAgICAgbG9nZ2Vy
LmRlYnVnKCJSdW5uaW5nIGNodW5rICVpLyVpIG9mIHNpemUgJWkiICUgKGkgKyAxLCBsZW4oY2h1
bmtzKSwgY2h1bmtfc2l6ZSkpCisgICAgICAgICAgICAgICAgdHJpYWxfdGVzdHMgPSBbXQorICAg
ICAgICAgICAgICAgIGNodW5rX3N0ciA9ICIiCisgICAgICAgICAgICAgICAgZm9yIGosIGluY19j
aHVuayBpbiBlbnVtZXJhdGUoY2h1bmtzKToKKyAgICAgICAgICAgICAgICAgICAgaWYgaSAhPSBq
IGFuZCBjaHVua19yZXN1bHRzW2pdIGluIChOb25lLCBGYWxzZSk6CisgICAgICAgICAgICAgICAg
ICAgICAgICBjaHVua19zdHIgKz0gIisiCisgICAgICAgICAgICAgICAgICAgICAgICB0cmlhbF90
ZXN0cy5leHRlbmQoaW5jX2NodW5rKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgICAgICAgICAgICAgY2h1bmtfc3RyICs9ICItIgorICAgICAgICAgICAgICAgIGxvZ2dl
ci5kZWJ1ZygiVXNpbmcgY2h1bmtzICVzIiAlIGNodW5rX3N0cikKKyAgICAgICAgICAgICAgICB0
cmlhbF90ZXN0cy5leHRlbmQodGFyZ2V0X3Rlc3QpCisKKyAgICAgICAgICAgICAgICBjaHVua19y
ZXN1bHRzW2ldID0gc2VsZi51bnN0YWJsZSh0cmlhbF90ZXN0cykKKworICAgICAgICAgICAgICAg
ICMgaWYgaSA9PSBsZW4oY2h1bmtzKSAtIDIgYW5kIGFsbChpdGVtIGlzIEZhbHNlIGZvciBpdGVt
IGluIGNodW5rX3Jlc3VsdHNbOi0xXSk6CisgICAgICAgICAgICAgICAgIyBEYW5nZXJvdXM/IG9w
dGltaXNhdGlvbiB0aGF0IGlmIHlvdSBnb3Qgc3RhYmlsaXR5IGZvciAwLi5OLTEgY2h1bmtzCisg
ICAgICAgICAgICAgICAgIyBpdCBtdXN0IGJlIHVuc3RhYmxlIHdpdGggdGhlIE50aCBjaHVuawor
ICAgICAgICAgICAgICAgICMgICAgIGNodW5rX3Jlc3VsdHNbaSsxXSA9IFRydWUKKyAgICAgICAg
ICAgICAgICAjICAgICBjb250aW51ZQorCisgICAgICAgICAgICBuZXdfdGVzdHMgPSBbXQorICAg
ICAgICAgICAga2VlcF9zdHIgPSAiIgorICAgICAgICAgICAgZm9yIHJlc3VsdCwgY2h1bmsgaW4g
emlwKGNodW5rX3Jlc3VsdHMsIGNodW5rcyk6CisgICAgICAgICAgICAgICAgaWYgbm90IHJlc3Vs
dDoKKyAgICAgICAgICAgICAgICAgICAga2VlcF9zdHIgKz0gIisiCisgICAgICAgICAgICAgICAg
ICAgIG5ld190ZXN0cy5leHRlbmQoY2h1bmspCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgICAgICAgICAga2VlcF9zdHIgKz0gIi0iCisKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1
ZygiS2VlcGluZyBjaHVua3MgJXMiICUga2VlcF9zdHIpCisKKyAgICAgICAgICAgIHRlc3RzID0g
bmV3X3Rlc3RzCisKKyAgICAgICAgICAgIGNodW5rX3NpemUgPSBpbnQoY2h1bmtfc2l6ZSAvIDIp
CisKKyAgICAgICAgcmV0dXJuIHRlc3RzICsgdGFyZ2V0X3Rlc3QKKworICAgIGRlZiB1bnN0YWJs
ZShzZWxmLCB0ZXN0cyk6CisgICAgICAgIGxvZ2dlci5kZWJ1ZygiUnVubmluZyB3aXRoICVpIHRl
c3RzIiAlIGxlbih0ZXN0cykpCisKKyAgICAgICAgc2VsZi50ZXN0X2xvYWRlci50ZXN0cyA9IHtz
ZWxmLnRlc3RfdHlwZTogdGVzdHN9CisKKyAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSBzeXMuc3Rk
b3V0LCBzeXMuc3RkZXJyCisgICAgICAgIHN5cy5zdGRvdXQgPSBTdHJpbmdJTygpCisgICAgICAg
IHN5cy5zdGRlcnIgPSBTdHJpbmdJTygpCisKKyAgICAgICAgd2l0aCB0ZW1wZmlsZS5OYW1lZFRl
bXBvcmFyeUZpbGUoKSBhcyBmOgorICAgICAgICAgICAgYXJncyA9IHNlbGYua3dhcmdzLmNvcHko
KQorICAgICAgICAgICAgYXJnc1sibG9nX3JhdyJdID0gW2ZdCisgICAgICAgICAgICBhcmdzWyJj
YXB0dXJlX3N0ZGlvIl0gPSBGYWxzZQorICAgICAgICAgICAgd3B0cnVubmVyLnNldHVwX2xvZ2dp
bmcoYXJncywge30pCisgICAgICAgICAgICB3cHRydW5uZXIucnVuX3Rlc3RzKHRlc3RfbG9hZGVy
PXNlbGYudGVzdF9sb2FkZXIsICoqYXJncykKKyAgICAgICAgICAgIHdwdHJ1bm5lci5sb2dnZXIu
cmVtb3ZlX2hhbmRsZXIod3B0cnVubmVyLmxvZ2dlci5oYW5kbGVyc1swXSkKKyAgICAgICAgICAg
IGlzX3Vuc3RhYmxlID0gc2VsZi5sb2dfaXNfdW5zdGFibGUoZikKKworICAgICAgICAgICAgc3lz
LnN0ZG91dCwgc3lzLnN0ZGVyciA9IHN0ZG91dCwgc3RkZXJyCisKKyAgICAgICAgbG9nZ2VyLmRl
YnVnKCJSZXN1bHQgd2FzIHVuc3RhYmxlIHdpdGggY2h1bmsgcmVtb3ZlZCIKKyAgICAgICAgICAg
ICAgICAgICAgIGlmIGlzX3Vuc3RhYmxlIGVsc2UgInN0YWJsZSIpCisKKyAgICAgICAgcmV0dXJu
IGlzX3Vuc3RhYmxlCisKKyAgICBkZWYgbG9nX2lzX3Vuc3RhYmxlKHNlbGYsIGxvZ19mKToKKyAg
ICAgICAgbG9nX2Yuc2VlaygwKQorCisgICAgICAgIHN0YXR1c2VzID0gZGVmYXVsdGRpY3Qoc2V0
KQorCisgICAgICAgIGRlZiBoYW5kbGVfc3RhdHVzKGl0ZW0pOgorICAgICAgICAgICAgaWYgaXRl
bVsidGVzdCJdID09IHNlbGYudGFyZ2V0OgorICAgICAgICAgICAgICAgIHN0YXR1c2VzW2l0ZW1b
InN1YnRlc3QiXV0uYWRkKGl0ZW1bInN0YXR1cyJdKQorCisgICAgICAgIGRlZiBoYW5kbGVfZW5k
KGl0ZW0pOgorICAgICAgICAgICAgaWYgaXRlbVsidGVzdCJdID09IHNlbGYudGFyZ2V0OgorICAg
ICAgICAgICAgICAgIHN0YXR1c2VzW05vbmVdLmFkZChpdGVtWyJzdGF0dXMiXSkKKworICAgICAg
ICByZWFkZXIuZWFjaF9sb2cocmVhZGVyLnJlYWQobG9nX2YpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgeyJ0ZXN0X3N0YXR1cyI6IGhhbmRsZV9zdGF0dXMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgInRlc3RfZW5kIjogaGFuZGxlX2VuZH0pCisKKyAgICAgICAgbG9nZ2VyLmRlYnVnKHN0
cihzdGF0dXNlcykpCisKKyAgICAgICAgaWYgbm90IHN0YXR1c2VzOgorICAgICAgICAgICAgbG9n
Z2VyLmVycm9yKCJEaWRuJ3QgZ2V0IGFueSB1c2VmdWwgb3V0cHV0IGZyb20gd3B0cnVubmVyIikK
KyAgICAgICAgICAgIGxvZ19mLnNlZWsoMCkKKyAgICAgICAgICAgIGZvciBpdGVtIGluIHJlYWRl
ci5yZWFkKGxvZ19mKToKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoaXRlbSkKKyAgICAg
ICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgcmV0dXJuIGFueShsZW4oaXRlbSkgPiAxIGZv
ciBpdGVtIGluIHN0YXR1c2VzLml0ZXJ2YWx1ZXMoKSkKKworICAgIGRlZiBnZXRfaW5pdGlhbF90
ZXN0cyhzZWxmKToKKyAgICAgICAgIyBOZWVkIHRvIHBhc3MgaW4gYXJndW1lbnRzCisKKyAgICAg
ICAgYWxsX3Rlc3RzID0gc2VsZi50ZXN0X2xvYWRlci50ZXN0c1tzZWxmLnRlc3RfdHlwZV0KKyAg
ICAgICAgdGVzdHMgPSBbXQorICAgICAgICBmb3IgaXRlbSBpbiBhbGxfdGVzdHM6CisgICAgICAg
ICAgICB0ZXN0cy5hcHBlbmQoaXRlbSkKKyAgICAgICAgICAgIGlmIGl0ZW0udXJsID09IHNlbGYu
dGFyZ2V0OgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCJT
dGFydGluZyB3aXRoIHRlc3RzOiAlcyIgJSAoIlxuIi5qb2luKGl0ZW0uaWQgZm9yIGl0ZW0gaW4g
dGVzdHMpKSkKKworICAgICAgICByZXR1cm4gdGVzdHMKKworCitkZWYgZG9fcmVkdWNlKCoqa3dh
cmdzKToKKyAgICB0YXJnZXQgPSBrd2FyZ3MucG9wKCJ0YXJnZXQiKQorICAgIHJlZHVjZXIgPSBS
ZWR1Y2VyKHRhcmdldCwgKiprd2FyZ3MpCisKKyAgICB1bnN0YWJsZV9zZXQgPSByZWR1Y2VyLnJ1
bigpCisgICAgcmV0dXJuIHVuc3RhYmxlX3NldApkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMv
aW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvdGVzdGhhcm5lc3NfcnVubmVy
Lmh0bWwgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1
bm5lci90ZXN0aGFybmVzc19ydW5uZXIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMC4uMWNjODBhMjcwZTIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0
cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci90ZXN0aGFybmVzc19ydW5u
ZXIuaHRtbApAQCAtMCwwICsxLDYgQEAKKzwhZG9jdHlwZSBodG1sPgorPHRpdGxlPjwvdGl0bGU+
Cis8c2NyaXB0PgordmFyIHRpbWVvdXRfbXVsdGlwbGllciA9IDE7Cit2YXIgd2luID0gbnVsbDsK
Kzwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xz
L3dwdHJ1bm5lci93cHRydW5uZXIvdGVzdGhhcm5lc3NyZXBvcnQtc2Vydm8uanMgYi9XZWJEcml2
ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci90ZXN0aGFybmVz
c3JlcG9ydC1zZXJ2by5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u
YjY3MmFlYTlhMjUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93
M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci90ZXN0aGFybmVzc3JlcG9ydC1zZXJ2by5qcwpA
QCAtMCwwICsxLDE3IEBACit2YXIgcHJvcHMgPSB7b3V0cHV0OiUob3V0cHV0KWR9OwordmFyIHN0
YXJ0X2xvYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTsKK3N0YXJ0X2xvYy5ocmVmID0g
bG9jYXRpb24uaHJlZjsKK3NldHVwKHByb3BzKTsKKworYWRkX2NvbXBsZXRpb25fY2FsbGJhY2so
ZnVuY3Rpb24gKHRlc3RzLCBoYXJuZXNzX3N0YXR1cykgeworICAgIHZhciBpZCA9IHN0YXJ0X2xv
Yy5wYXRobmFtZSArIHN0YXJ0X2xvYy5zZWFyY2ggKyBzdGFydF9sb2MuaGFzaDsKKyAgICBjb25z
b2xlLmxvZygiQUxFUlQ6IFJFU1VMVDogIiArIEpTT04uc3RyaW5naWZ5KFsKKyAgICAgICAgaWQs
CisgICAgICAgIGhhcm5lc3Nfc3RhdHVzLnN0YXR1cywKKyAgICAgICAgaGFybmVzc19zdGF0dXMu
bWVzc2FnZSwKKyAgICAgICAgaGFybmVzc19zdGF0dXMuc3RhY2ssCisgICAgICAgIHRlc3RzLm1h
cChmdW5jdGlvbih0KSB7CisgICAgICAgICAgICByZXR1cm4gW3QubmFtZSwgdC5zdGF0dXMsIHQu
bWVzc2FnZSwgdC5zdGFja10KKyAgICAgICAgfSksCisgICAgXSkpOworfSk7CmRpZmYgLS1naXQg
YS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci90
ZXN0aGFybmVzc3JlcG9ydC1zZXJ2b2RyaXZlci5qcyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVk
L3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3Rlc3RoYXJuZXNzcmVwb3J0LXNlcnZvZHJp
dmVyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jODg4NDEzNjA0
NwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93
cHRydW5uZXIvd3B0cnVubmVyL3Rlc3RoYXJuZXNzcmVwb3J0LXNlcnZvZHJpdmVyLmpzCkBAIC0w
LDAgKzEsMjMgQEAKK3NldHVwKHtvdXRwdXQ6JShvdXRwdXQpZH0pOworCithZGRfY29tcGxldGlv
bl9jYWxsYmFjayhmdW5jdGlvbigpIHsKKyAgICBhZGRfY29tcGxldGlvbl9jYWxsYmFjayhmdW5j
dGlvbiAodGVzdHMsIHN0YXR1cykgeworICAgICAgICB2YXIgc3VidGVzdF9yZXN1bHRzID0gdGVz
dHMubWFwKGZ1bmN0aW9uKHgpIHsKKyAgICAgICAgICAgIHJldHVybiBbeC5uYW1lLCB4LnN0YXR1
cywgeC5tZXNzYWdlLCB4LnN0YWNrXQorICAgICAgICB9KTsKKyAgICAgICAgdmFyIGlkID0gbG9j
YXRpb24ucGF0aG5hbWUgKyBsb2NhdGlvbi5zZWFyY2ggKyBsb2NhdGlvbi5oYXNoOworICAgICAg
ICB2YXIgcmVzdWx0cyA9IEpTT04uc3RyaW5naWZ5KFtpZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdHVzLnN0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhdHVzLm1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXR1cy5zdGFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3VidGVzdF9yZXN1bHRzXSk7CisgICAgICAgIChmdW5jdGlvbiBkb25lKCkgewor
ICAgICAgICAgICAgaWYgKHdpbmRvdy5fX3dkX3Jlc3VsdHNfY2FsbGJhY2tfXykgeworICAgICAg
ICAgICAgICAgIGNsZWFyVGltZW91dChfX3dkX3Jlc3VsdHNfdGltZXJfXyk7CisgICAgICAgICAg
ICAgICAgX193ZF9yZXN1bHRzX2NhbGxiYWNrX18ocmVzdWx0cykKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgc2V0VGltZW91dChkb25lLCAyMCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0pKCkKKyAgICB9KQorfSk7CmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9p
bXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci90ZXN0aGFybmVzc3JlcG9ydC5q
cyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVy
L3Rlc3RoYXJuZXNzcmVwb3J0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi42MmRkYWZmYjQ0MwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9y
dGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3Rlc3RoYXJuZXNzcmVwb3J0LmpzCkBA
IC0wLDAgKzEsMTMgQEAKK3ZhciBwcm9wcyA9IHtvdXRwdXQ6JShvdXRwdXQpZCwKKyAgICAgICAg
ICAgICBleHBsaWNpdF90aW1lb3V0OiB0cnVlLAorICAgICAgICAgICAgIG1lc3NhZ2VfZXZlbnRz
OiBbImNvbXBsZXRpb24iXX07CisKK2lmICh3aW5kb3cub3BlbmVyICYmICJ0aW1lb3V0X211bHRp
cGxpZXIiIGluIHdpbmRvdy5vcGVuZXIpIHsKKyAgICBwcm9wc1sidGltZW91dF9tdWx0aXBsaWVy
Il0gPSB3aW5kb3cub3BlbmVyLnRpbWVvdXRfbXVsdGlwbGllcjsKK30KKworaWYgKHdpbmRvdy5v
cGVuZXIgJiYgd2luZG93Lm9wZW5lci5leHBsaWNpdF90aW1lb3V0KSB7CisgICAgcHJvcHNbImV4
cGxpY2l0X3RpbWVvdXQiXSA9IHdpbmRvdy5vcGVuZXIuZXhwbGljaXRfdGltZW91dDsKK30KKwor
c2V0dXAocHJvcHMpOwpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rv
b2xzL3dwdHJ1bm5lci93cHRydW5uZXIvdGVzdGxvYWRlci5weSBiL1dlYkRyaXZlclRlc3RzL2lt
cG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3Rlc3Rsb2FkZXIucHkKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjEwZjM1ODZmMTQzCi0tLSAvZGV2L251
bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRy
dW5uZXIvdGVzdGxvYWRlci5weQpAQCAtMCwwICsxLDY0MSBAQAoraW1wb3J0IGhhc2hsaWIKK2lt
cG9ydCBqc29uCitpbXBvcnQgb3MKK2ltcG9ydCB1cmxwYXJzZQorZnJvbSBhYmMgaW1wb3J0IEFC
Q01ldGEsIGFic3RyYWN0bWV0aG9kCitmcm9tIFF1ZXVlIGltcG9ydCBFbXB0eQorZnJvbSBjb2xs
ZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QsIE9yZGVyZWREaWN0LCBkZXF1ZQorZnJvbSBtdWx0
aXByb2Nlc3NpbmcgaW1wb3J0IFF1ZXVlCisKK2ltcG9ydCBtYW5pZmVzdGluY2x1ZGUKK2ltcG9y
dCBtYW5pZmVzdGV4cGVjdGVkCitpbXBvcnQgd3B0dGVzdAorZnJvbSBtb3psb2cgaW1wb3J0IHN0
cnVjdHVyZWQKKworbWFuaWZlc3QgPSBOb25lCittYW5pZmVzdF91cGRhdGUgPSBOb25lCisKK2Rl
ZiBkb19kZWxheWVkX2ltcG9ydHMoKToKKyAgICAjIFRoaXMgcmVsaWVzIG9uIGFuIGFscmVhZHkg
bG9hZGVkIG1vZHVsZSBoYXZpbmcgc2V0IHRoZSBzeXMucGF0aCBjb3JyZWN0bHkgOigKKyAgICBn
bG9iYWwgbWFuaWZlc3QsIG1hbmlmZXN0X3VwZGF0ZQorICAgIGZyb20gbWFuaWZlc3QgaW1wb3J0
IG1hbmlmZXN0CisgICAgZnJvbSBtYW5pZmVzdCBpbXBvcnQgdXBkYXRlIGFzIG1hbmlmZXN0X3Vw
ZGF0ZQorCitjbGFzcyBUZXN0Q2h1bmtlcihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxm
LCB0b3RhbF9jaHVua3MsIGNodW5rX251bWJlcik6CisgICAgICAgIHNlbGYudG90YWxfY2h1bmtz
ID0gdG90YWxfY2h1bmtzCisgICAgICAgIHNlbGYuY2h1bmtfbnVtYmVyID0gY2h1bmtfbnVtYmVy
CisgICAgICAgIGFzc2VydCBzZWxmLmNodW5rX251bWJlciA8PSBzZWxmLnRvdGFsX2NodW5rcwor
ICAgICAgICBzZWxmLmxvZ2dlciA9IHN0cnVjdHVyZWQuZ2V0X2RlZmF1bHRfbG9nZ2VyKCkKKyAg
ICAgICAgYXNzZXJ0IHNlbGYubG9nZ2VyCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgbWFuaWZl
c3QpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKworY2xhc3MgVW5jaHVu
a2VkKFRlc3RDaHVua2VyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdz
KToKKyAgICAgICAgVGVzdENodW5rZXIuX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQor
ICAgICAgICBhc3NlcnQgc2VsZi50b3RhbF9jaHVua3MgPT0gMQorCisgICAgZGVmIF9fY2FsbF9f
KHNlbGYsIG1hbmlmZXN0KToKKyAgICAgICAgZm9yIGl0ZW0gaW4gbWFuaWZlc3Q6CisgICAgICAg
ICAgICB5aWVsZCBpdGVtCisKKworY2xhc3MgSGFzaENodW5rZXIoVGVzdENodW5rZXIpOgorICAg
IGRlZiBfX2NhbGxfXyhzZWxmLCBtYW5pZmVzdCk6CisgICAgICAgIGNodW5rX2luZGV4ID0gc2Vs
Zi5jaHVua19udW1iZXIgLSAxCisgICAgICAgIGZvciB0ZXN0X3R5cGUsIHRlc3RfcGF0aCwgdGVz
dHMgaW4gbWFuaWZlc3Q6CisgICAgICAgICAgICBoID0gaW50KGhhc2hsaWIubWQ1KHRlc3RfcGF0
aCkuaGV4ZGlnZXN0KCksIDE2KQorICAgICAgICAgICAgaWYgaCAlIHNlbGYudG90YWxfY2h1bmtz
ID09IGNodW5rX2luZGV4OgorICAgICAgICAgICAgICAgIHlpZWxkIHRlc3RfdHlwZSwgdGVzdF9w
YXRoLCB0ZXN0cworCisKK2NsYXNzIERpcmVjdG9yeUhhc2hDaHVua2VyKFRlc3RDaHVua2VyKToK
KyAgICAiIiJMaWtlIEhhc2hDaHVua2VyIGV4Y2VwdCB0aGUgZGlyZWN0b3J5IGlzIGhhc2hlZC4K
KworICAgIFRoaXMgZW5zdXJlcyB0aGF0IGFsbCB0ZXN0cyBpbiB0aGUgc2FtZSBkaXJlY3Rvcnkg
ZW5kIHVwIGluIHRoZSBzYW1lCisgICAgY2h1bmsuCisgICAgIiIiCisgICAgZGVmIF9fY2FsbF9f
KHNlbGYsIG1hbmlmZXN0KToKKyAgICAgICAgY2h1bmtfaW5kZXggPSBzZWxmLmNodW5rX251bWJl
ciAtIDEKKyAgICAgICAgZm9yIHRlc3RfdHlwZSwgdGVzdF9wYXRoLCB0ZXN0cyBpbiBtYW5pZmVz
dDoKKyAgICAgICAgICAgIGggPSBpbnQoaGFzaGxpYi5tZDUob3MucGF0aC5kaXJuYW1lKHRlc3Rf
cGF0aCkpLmhleGRpZ2VzdCgpLCAxNikKKyAgICAgICAgICAgIGlmIGggJSBzZWxmLnRvdGFsX2No
dW5rcyA9PSBjaHVua19pbmRleDoKKyAgICAgICAgICAgICAgICB5aWVsZCB0ZXN0X3R5cGUsIHRl
c3RfcGF0aCwgdGVzdHMKKworCitjbGFzcyBFcXVhbFRpbWVDaHVua2VyKFRlc3RDaHVua2VyKToK
KyAgICBkZWYgX2dyb3VwX2J5X2RpcmVjdG9yeShzZWxmLCBtYW5pZmVzdF9pdGVtcyk6CisgICAg
ICAgICIiIlNwbGl0IHRoZSBsaXN0IG9mIG1hbmlmZXN0IGl0ZW1zIGludG8gYSBvcmRlcmVkIGRp
Y3QgdGhhdCBncm91cHMgdGVzdHMgaW4KKyAgICAgICAgc28gdGhhdCBhbnl0aGluZyBpbiB0aGUg
c2FtZSBzdWJkaXJlY3RvcnkgYmV5b25kIGEgZGVwdGggb2YgMyBpcyBpbiB0aGUgc2FtZQorICAg
ICAgICBncm91cC4gU28gYWxsIHRlc3RzIGluIGEvYi9jLCBhL2IvYy9kIGFuZCBhL2IvYy9lIHdp
bGwgYmUgZ3JvdXBlZCB0b2dldGhlcgorICAgICAgICBhbmQgc2VwYXJhdGUgdG8gdGVzdHMgaW4g
YS9iL2YKKworICAgICAgICBSZXR1cm5zOiB0dXBsZSAob3JkZXJlZCBkaWN0IG9mIHt0ZXN0X2Rp
cjogUGF0aERhdGF9LCB0b3RhbCBlc3RpbWF0ZWQgcnVudGltZSkKKyAgICAgICAgIiIiCisKKyAg
ICAgICAgY2xhc3MgUGF0aERhdGEob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBwYXRoKToKKyAgICAgICAgICAgICAgICBzZWxmLnBhdGggPSBwYXRoCisgICAgICAgICAg
ICAgICAgc2VsZi50aW1lID0gMAorICAgICAgICAgICAgICAgIHNlbGYudGVzdHMgPSBbXQorCisg
ICAgICAgIGJ5X2RpciA9IE9yZGVyZWREaWN0KCkKKyAgICAgICAgdG90YWxfdGltZSA9IDAKKwor
ICAgICAgICBmb3IgaSwgKHRlc3RfdHlwZSwgdGVzdF9wYXRoLCB0ZXN0cykgaW4gZW51bWVyYXRl
KG1hbmlmZXN0X2l0ZW1zKToKKyAgICAgICAgICAgIHRlc3RfZGlyID0gdHVwbGUob3MucGF0aC5z
cGxpdCh0ZXN0X3BhdGgpWzBdLnNwbGl0KG9zLnBhdGguc2VwKVs6M10pCisKKyAgICAgICAgICAg
IGlmIG5vdCB0ZXN0X2RpciBpbiBieV9kaXI6CisgICAgICAgICAgICAgICAgYnlfZGlyW3Rlc3Rf
ZGlyXSA9IFBhdGhEYXRhKHRlc3RfZGlyKQorCisgICAgICAgICAgICBkYXRhID0gYnlfZGlyW3Rl
c3RfZGlyXQorICAgICAgICAgICAgdGltZSA9IHN1bSh0ZXN0LmRlZmF1bHRfdGltZW91dCBpZiB0
ZXN0LnRpbWVvdXQgIT0KKyAgICAgICAgICAgICAgICAgICAgICAgImxvbmciIGVsc2UgdGVzdC5s
b25nX3RpbWVvdXQgZm9yIHRlc3QgaW4gdGVzdHMpCisgICAgICAgICAgICBkYXRhLnRpbWUgKz0g
dGltZQorICAgICAgICAgICAgdG90YWxfdGltZSArPSB0aW1lCisgICAgICAgICAgICBkYXRhLnRl
c3RzLmFwcGVuZCgodGVzdF90eXBlLCB0ZXN0X3BhdGgsIHRlc3RzKSkKKworICAgICAgICByZXR1
cm4gYnlfZGlyLCB0b3RhbF90aW1lCisKKyAgICBkZWYgX21heWJlX3JlbW92ZShzZWxmLCBjaHVu
a3MsIGksIGRpcmVjdGlvbik6CisgICAgICAgICIiIlRyaWFsIHJlbW92aW5nIGEgY2h1bmsgZnJv
bSBvbmUgY2h1bmsgdG8gYW4gYWRqYWNlbnQgb25lLgorCisgICAgICAgIDpwYXJhbSBjaHVua3M6
IC0gdGhlIGxpc3Qgb2YgYWxsIGNodW5rcworICAgICAgICA6cGFyYW0gaTogLSB0aGUgY2h1bmsg
aW5kZXggaW4gdGhlIGxpc3Qgb2YgY2h1bmtzIHRvIHRyeSByZW1vdmluZyBmcm9tCisgICAgICAg
IDpwYXJhbSBkaXJlY3Rpb246IGVpdGhlciAibmV4dCIgaWYgd2UgYXJlIGdvaW5nIHRvIG1vdmUg
ZnJvbSB0aGUgZW5kIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzdWJzZXF1ZW50
IGNodW5rLCBvciAicHJldiIgaWYgd2UgYXJlIGdvaW5nIHRvIG1vdmUKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgZnJvbSB0aGUgc3RhcnQgaW50byB0aGUgcHJldmlvdXMgY2h1bmsuCisKKyAg
ICAgICAgOnJldHVybnMgYm9vbDogRGlkIGEgY2h1bmsgZ2V0IG1vdmVkPyIiIgorICAgICAgICBz
b3VyY2VfY2h1bmsgPSBjaHVua3NbaV0KKyAgICAgICAgaWYgZGlyZWN0aW9uID09ICJuZXh0IjoK
KyAgICAgICAgICAgIHRhcmdldF9jaHVuayA9IGNodW5rc1tpKzFdCisgICAgICAgICAgICBwYXRo
X2luZGV4ID0gLTEKKyAgICAgICAgICAgIG1vdmVfZnVuYyA9IGxhbWJkYTogdGFyZ2V0X2NodW5r
LmFwcGVuZGxlZnQoc291cmNlX2NodW5rLnBvcCgpKQorICAgICAgICBlbGlmIGRpcmVjdGlvbiA9
PSAicHJldiI6CisgICAgICAgICAgICB0YXJnZXRfY2h1bmsgPSBjaHVua3NbaS0xXQorICAgICAg
ICAgICAgcGF0aF9pbmRleCA9IDAKKyAgICAgICAgICAgIG1vdmVfZnVuYyA9IGxhbWJkYTogdGFy
Z2V0X2NodW5rLmFwcGVuZChzb3VyY2VfY2h1bmsucG9wbGVmdCgpKQorICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiVW5leHBlY3RlZCBtb3ZlIGRpcmVjdGlvbiAl
cyIgJSBkaXJlY3Rpb24pCisKKyAgICAgICAgcmV0dXJuIHNlbGYuX21heWJlX21vdmUoc291cmNl
X2NodW5rLCB0YXJnZXRfY2h1bmssIHBhdGhfaW5kZXgsIG1vdmVfZnVuYykKKworICAgIGRlZiBf
bWF5YmVfYWRkKHNlbGYsIGNodW5rcywgaSwgZGlyZWN0aW9uKToKKyAgICAgICAgIiIiVHJpYWwg
YWRkaW5nIGEgY2h1bmsgZnJvbSBvbmUgY2h1bmsgdG8gYW4gYWRqYWNlbnQgb25lLgorCisgICAg
ICAgIDpwYXJhbSBjaHVua3M6IC0gdGhlIGxpc3Qgb2YgYWxsIGNodW5rcworICAgICAgICA6cGFy
YW0gaTogLSB0aGUgY2h1bmsgaW5kZXggaW4gdGhlIGxpc3Qgb2YgY2h1bmtzIHRvIHRyeSBhZGRp
bmcgdG8KKyAgICAgICAgOnBhcmFtIGRpcmVjdGlvbjogZWl0aGVyICJuZXh0IiBpZiB3ZSBhcmUg
Z29pbmcgdG8gcmVtb3ZlIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBz
dWJzZXF1ZW50IGNodW5rLCBvciAicHJldiIgaWYgd2UgYXJlIGdvaW5nIHRvIHJlbW92ZQorICAg
ICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSB0aGUgcHJldmlvdXMgY2h1bmsuCisKKyAg
ICAgICAgOnJldHVybnMgYm9vbDogRGlkIGEgY2h1bmsgZ2V0IG1vdmVkPyIiIgorICAgICAgICB0
YXJnZXRfY2h1bmsgPSBjaHVua3NbaV0KKyAgICAgICAgaWYgZGlyZWN0aW9uID09ICJuZXh0IjoK
KyAgICAgICAgICAgIHNvdXJjZV9jaHVuayA9IGNodW5rc1tpKzFdCisgICAgICAgICAgICBwYXRo
X2luZGV4ID0gMAorICAgICAgICAgICAgbW92ZV9mdW5jID0gbGFtYmRhOiB0YXJnZXRfY2h1bmsu
YXBwZW5kKHNvdXJjZV9jaHVuay5wb3BsZWZ0KCkpCisgICAgICAgIGVsaWYgZGlyZWN0aW9uID09
ICJwcmV2IjoKKyAgICAgICAgICAgIHNvdXJjZV9jaHVuayA9IGNodW5rc1tpLTFdCisgICAgICAg
ICAgICBwYXRoX2luZGV4ID0gLTEKKyAgICAgICAgICAgIG1vdmVfZnVuYyA9IGxhbWJkYTogdGFy
Z2V0X2NodW5rLmFwcGVuZGxlZnQoc291cmNlX2NodW5rLnBvcCgpKQorICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiVW5leHBlY3RlZCBtb3ZlIGRpcmVjdGlvbiAl
cyIgJSBkaXJlY3Rpb24pCisKKyAgICAgICAgcmV0dXJuIHNlbGYuX21heWJlX21vdmUoc291cmNl
X2NodW5rLCB0YXJnZXRfY2h1bmssIHBhdGhfaW5kZXgsIG1vdmVfZnVuYykKKworICAgIGRlZiBf
bWF5YmVfbW92ZShzZWxmLCBzb3VyY2VfY2h1bmssIHRhcmdldF9jaHVuaywgcGF0aF9pbmRleCwg
bW92ZV9mdW5jKToKKyAgICAgICAgIiIiTW92ZSBmcm9tIG9uZSBjaHVuayB0byBhbm90aGVyLCBh
c3Nlc3MgdGhlIGNoYW5nZSBpbiBiYWRuZXNzLAorICAgICAgICBhbmQga2VlcCB0aGUgbW92ZSBp
ZmYgaXQgZGVjcmVhc2VzIHRoZSBiYWRuZXNzIHNjb3JlLgorCisgICAgICAgIDpwYXJhbSBzb3Vy
Y2VfY2h1bms6IGNodW5rIHRvIG1vdmUgZnJvbQorICAgICAgICA6cGFyYW0gdGFyZ2V0X2NodW5r
OiBjaHVuayB0byBtb3ZlIHRvCisgICAgICAgIDpwYXJhbSBwYXRoX2luZGV4OiAwIGlmIHdlIGFy
ZSBtb3ZpbmcgZnJvbSB0aGUgc3RhcnQgb3IgLTEgaWYgd2UgYXJlIG1vdmluZyBmcm9tIHRoZQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgIDpwYXJhbSBtb3ZlX2Z1bmM6
IEZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkgbW92ZXMgYmV0d2VlbiBjaHVua3MiIiIKKyAgICAgICAg
aWYgbGVuKHNvdXJjZV9jaHVuay5wYXRocykgPD0gMToKKyAgICAgICAgICAgIHJldHVybiBGYWxz
ZQorCisgICAgICAgIG1vdmVfdGltZSA9IHNvdXJjZV9jaHVuay5wYXRoc1twYXRoX2luZGV4XS50
aW1lCisKKyAgICAgICAgbmV3X3NvdXJjZV9iYWRuZXNzID0gc2VsZi5fYmFkbmVzcyhzb3VyY2Vf
Y2h1bmsudGltZSAtIG1vdmVfdGltZSkKKyAgICAgICAgbmV3X3RhcmdldF9iYWRuZXNzID0gc2Vs
Zi5fYmFkbmVzcyh0YXJnZXRfY2h1bmsudGltZSArIG1vdmVfdGltZSkKKworICAgICAgICBkZWx0
YV9iYWRuZXNzID0gKChuZXdfc291cmNlX2JhZG5lc3MgKyBuZXdfdGFyZ2V0X2JhZG5lc3MpIC0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAoc291cmNlX2NodW5rLmJhZG5lc3MgKyB0YXJnZXRf
Y2h1bmsuYmFkbmVzcykpCisgICAgICAgIGlmIGRlbHRhX2JhZG5lc3MgPCAwOgorICAgICAgICAg
ICAgbW92ZV9mdW5jKCkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgcmV0dXJu
IEZhbHNlCisKKyAgICBkZWYgX2JhZG5lc3Moc2VsZiwgdGltZSk6CisgICAgICAgICIiIk1ldHJp
YyBvZiBiYWRuZXNzIGZvciBhIHNwZWNpZmljIGNodW5rCisKKyAgICAgICAgOnBhcmFtIHRpbWU6
IHRoZSB0aW1lIGZvciBhIHNwZWNpZmljIGNodW5rIiIiCisgICAgICAgIHJldHVybiAodGltZSAt
IHNlbGYuZXhwZWN0ZWRfdGltZSkqKjIKKworICAgIGRlZiBfZ2V0X2NodW5rKHNlbGYsIG1hbmlm
ZXN0X2l0ZW1zKToKKyAgICAgICAgYnlfZGlyLCB0b3RhbF90aW1lID0gc2VsZi5fZ3JvdXBfYnlf
ZGlyZWN0b3J5KG1hbmlmZXN0X2l0ZW1zKQorCisgICAgICAgIGlmIGxlbihieV9kaXIpIDwgc2Vs
Zi50b3RhbF9jaHVua3M6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJUcmllZCB0byBz
cGxpdCBpbnRvICVpIGNodW5rcywgYnV0IG9ubHkgJWkgc3ViZGlyZWN0b3JpZXMgaW5jbHVkZWQi
ICUgKAorICAgICAgICAgICAgICAgIHNlbGYudG90YWxfY2h1bmtzLCBsZW4oYnlfZGlyKSkpCisK
KyAgICAgICAgc2VsZi5leHBlY3RlZF90aW1lID0gZmxvYXQodG90YWxfdGltZSkgLyBzZWxmLnRv
dGFsX2NodW5rcworCisgICAgICAgIGNodW5rcyA9IHNlbGYuX2NyZWF0ZV9pbml0aWFsX2NodW5r
cyhieV9kaXIpCisKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICMgTW92ZSBhIHRl
c3QgZnJvbSBvbmUgY2h1bmsgdG8gdGhlIG5leHQgdW50aWwgZG9pbmcgc28gbm8gbG9uZ2VyCisg
ICAgICAgICAgICAjIHJlZHVjZXMgdGhlIGJhZG5lc3MKKyAgICAgICAgICAgIGdvdF9pbXByb3Zl
bWVudCA9IHNlbGYuX3VwZGF0ZV9jaHVua3MoY2h1bmtzKQorICAgICAgICAgICAgaWYgbm90IGdv
dF9pbXByb3ZlbWVudDoKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIHNlbGYubG9n
Z2VyLmRlYnVnKHNlbGYuZXhwZWN0ZWRfdGltZSkKKyAgICAgICAgZm9yIGksIGNodW5rIGluIGNo
dW5rcy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCIlaTogJWks
ICVpIiAlIChpICsgMSwgY2h1bmsudGltZSwgY2h1bmsuYmFkbmVzcykpCisKKyAgICAgICAgYXNz
ZXJ0IHNlbGYuX2FsbF90ZXN0cyhieV9kaXIpID09IHNlbGYuX2NodW5rZWRfdGVzdHMoY2h1bmtz
KQorCisgICAgICAgIHJldHVybiBzZWxmLl9nZXRfdGVzdHMoY2h1bmtzKQorCisgICAgQHN0YXRp
Y21ldGhvZAorICAgIGRlZiBfYWxsX3Rlc3RzKGJ5X2Rpcik6CisgICAgICAgICIiIlJldHVybiBh
IHNldCBvZiBhbGwgdGVzdHMgaW4gdGhlIG1hbmlmZXN0IGZyb20gYSBncm91cGluZyBieSBkaXJl
Y3RvcnkiIiIKKyAgICAgICAgcmV0dXJuIHNldCh4WzBdIGZvciBpdGVtIGluIGJ5X2Rpci5pdGVy
dmFsdWVzKCkKKyAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiBpdGVtLnRlc3RzKQorCisgICAg
QHN0YXRpY21ldGhvZAorICAgIGRlZiBfY2h1bmtlZF90ZXN0cyhjaHVua3MpOgorICAgICAgICAi
IiJSZXR1cm4gYSBzZXQgb2YgYWxsIHRlc3RzIGluIHRoZSBtYW5pZmVzdCBmcm9tIHRoZSBjaHVu
ayBsaXN0IiIiCisgICAgICAgIHJldHVybiBzZXQoeFswXSBmb3IgY2h1bmsgaW4gY2h1bmtzLml0
ZXJ2YWx1ZXMoKQorICAgICAgICAgICAgICAgICAgIGZvciBwYXRoIGluIGNodW5rLnBhdGhzCisg
ICAgICAgICAgICAgICAgICAgZm9yIHggaW4gcGF0aC50ZXN0cykKKworCisgICAgZGVmIF9jcmVh
dGVfaW5pdGlhbF9jaHVua3Moc2VsZiwgYnlfZGlyKToKKyAgICAgICAgIiIiQ3JlYXRlIGFuIGlu
aXRpYWwgdW5iYWxhbmNlZCBsaXN0IG9mIGNodW5rcy4KKworICAgICAgICA6cGFyYW0gYnlfZGly
OiBBbGwgdGVzdHMgaW4gdGhlIG1hbmlmZXN0IGdyb3VwZWQgYnkgc3ViZGlyZWN0b3J5CisgICAg
ICAgIDpyZXR1cm5zIGxpc3Q6IEEgbGlzdCBvZiBDaHVuayBvYmplY3RzIiIiCisKKyAgICAgICAg
Y2xhc3MgQ2h1bmsob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRo
cywgaW5kZXgpOgorICAgICAgICAgICAgICAgICIiIkxpc3Qgb2YgUGF0aERhdGEgb2JqZWN0cyB0
aGF0IHRvZ2V0aGVyIGZvcm0gYSBzaW5nbGUgY2h1bmsgb2YKKyAgICAgICAgICAgICAgICB0ZXN0
cyIiIgorICAgICAgICAgICAgICAgIHNlbGYucGF0aHMgPSBkZXF1ZShwYXRocykKKyAgICAgICAg
ICAgICAgICBzZWxmLnRpbWUgPSBzdW0oaXRlbS50aW1lIGZvciBpdGVtIGluIHBhdGhzKQorICAg
ICAgICAgICAgICAgIHNlbGYuaW5kZXggPSBpbmRleAorCisgICAgICAgICAgICBkZWYgYXBwZW5k
bGVmdChzZWxmLCBwYXRoKToKKyAgICAgICAgICAgICAgICAiIiJBZGQgYSBQYXRoRGF0YSBvYmpl
Y3QgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjaHVuayIiIgorICAgICAgICAgICAgICAgIHNlbGYucGF0
aHMuYXBwZW5kbGVmdChwYXRoKQorICAgICAgICAgICAgICAgIHNlbGYudGltZSArPSBwYXRoLnRp
bWUKKworICAgICAgICAgICAgZGVmIGFwcGVuZChzZWxmLCBwYXRoKToKKyAgICAgICAgICAgICAg
ICAiIiJBZGQgYSBQYXRoRGF0YSBvYmplY3QgdG8gdGhlIGVuZCBvZiB0aGUgY2h1bmsiIiIKKyAg
ICAgICAgICAgICAgICBzZWxmLnBhdGhzLmFwcGVuZChwYXRoKQorICAgICAgICAgICAgICAgIHNl
bGYudGltZSArPSBwYXRoLnRpbWUKKworICAgICAgICAgICAgZGVmIHBvcChzZWxmKToKKyAgICAg
ICAgICAgICAgICAiIiJSZW1vdmUgUGF0aERhdGEgb2JqZWN0IGZyb20gdGhlIGVuZCBvZiB0aGUg
Y2h1bmsiIiIKKyAgICAgICAgICAgICAgICBhc3NlcnQgbGVuKHNlbGYucGF0aHMpID4gMQorICAg
ICAgICAgICAgICAgIHNlbGYudGltZSAtPSBzZWxmLnBhdGhzWy0xXS50aW1lCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHNlbGYucGF0aHMucG9wKCkKKworICAgICAgICAgICAgZGVmIHBvcGxlZnQo
c2VsZik6CisgICAgICAgICAgICAgICAgIiIiUmVtb3ZlIFBhdGhEYXRhIG9iamVjdCBmcm9tIHRo
ZSBzdGFydCBvZiB0aGUgY2h1bmsiIiIKKyAgICAgICAgICAgICAgICBhc3NlcnQgbGVuKHNlbGYu
cGF0aHMpID4gMQorICAgICAgICAgICAgICAgIHNlbGYudGltZSAtPSBzZWxmLnBhdGhzWzBdLnRp
bWUKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5wYXRocy5wb3BsZWZ0KCkKKworICAgICAg
ICAgICAgQHByb3BlcnR5CisgICAgICAgICAgICBkZWYgYmFkbmVzcyhzZWxmXyk6CisgICAgICAg
ICAgICAgICAgIiIiQmFkbmVzcyBtZXRyaWMgZm9yIHRoaXMgY2h1bmsiIiIKKyAgICAgICAgICAg
ICAgICByZXR1cm4gc2VsZi5fYmFkbmVzcyhzZWxmXy50aW1lKQorCisgICAgICAgIGluaXRpYWxf
c2l6ZSA9IGxlbihieV9kaXIpIC8gc2VsZi50b3RhbF9jaHVua3MKKyAgICAgICAgY2h1bmtfYm91
bmRhcmllcyA9IFtpbml0aWFsX3NpemUgKiBpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yIGkgaW4geHJhbmdlKHNlbGYudG90YWxfY2h1bmtzKV0gKyBbbGVuKGJ5X2RpcildCisKKyAg
ICAgICAgY2h1bmtzID0gT3JkZXJlZERpY3QoKQorICAgICAgICBmb3IgaSwgbG93ZXIgaW4gZW51
bWVyYXRlKGNodW5rX2JvdW5kYXJpZXNbOi0xXSk6CisgICAgICAgICAgICB1cHBlciA9IGNodW5r
X2JvdW5kYXJpZXNbaSArIDFdCisgICAgICAgICAgICBwYXRocyA9IGJ5X2Rpci52YWx1ZXMoKVts
b3dlcjp1cHBlcl0KKyAgICAgICAgICAgIGNodW5rc1tpXSA9IENodW5rKHBhdGhzLCBpKQorCisg
ICAgICAgIGFzc2VydCBzZWxmLl9hbGxfdGVzdHMoYnlfZGlyKSA9PSBzZWxmLl9jaHVua2VkX3Rl
c3RzKGNodW5rcykKKworICAgICAgICByZXR1cm4gY2h1bmtzCisKKyAgICBkZWYgX3VwZGF0ZV9j
aHVua3Moc2VsZiwgY2h1bmtzKToKKyAgICAgICAgIiIiUnVuIGEgc2luZ2xlIGl0ZXJhdGlvbiBv
ZiB0aGUgY2h1bmsgdXBkYXRlIGFsZ29yaXRobS4KKworICAgICAgICA6cGFyYW0gY2h1bmtzOiAt
IExpc3Qgb2YgY2h1bmtzCisgICAgICAgICIiIgorICAgICAgICAjVE9ETzogY29uc2lkZXIgcmVw
bGFjaW5nIHRoaXMgd2l0aCBhIGhlYXAKKyAgICAgICAgc29ydGVkX2NodW5rcyA9IHNvcnRlZChj
aHVua3MudmFsdWVzKCksIGtleT1sYW1iZGEgeDoteC5iYWRuZXNzKQorICAgICAgICBnb3RfaW1w
cm92ZW1lbnQgPSBGYWxzZQorICAgICAgICBmb3IgY2h1bmsgaW4gc29ydGVkX2NodW5rczoKKyAg
ICAgICAgICAgIGlmIGNodW5rLnRpbWUgPCBzZWxmLmV4cGVjdGVkX3RpbWU6CisgICAgICAgICAg
ICAgICAgZiA9IHNlbGYuX21heWJlX2FkZAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAg
ICAgICBmID0gc2VsZi5fbWF5YmVfcmVtb3ZlCisKKyAgICAgICAgICAgIGlmIGNodW5rLmluZGV4
ID09IDA6CisgICAgICAgICAgICAgICAgb3JkZXIgPSBbIm5leHQiXQorICAgICAgICAgICAgZWxp
ZiBjaHVuay5pbmRleCA9PSBzZWxmLnRvdGFsX2NodW5rcyAtIDE6CisgICAgICAgICAgICAgICAg
b3JkZXIgPSBbInByZXYiXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBj
aHVuay50aW1lIDwgc2VsZi5leHBlY3RlZF90aW1lOgorICAgICAgICAgICAgICAgICAgICAjIEZp
cnN0IHRyeSB0byBhZGQgYSB0ZXN0IGZyb20gdGhlIG5laWdoYm9yaW5nIGNodW5rIHdpdGggdGhl
CisgICAgICAgICAgICAgICAgICAgICMgZ3JlYXRlc3QgdG90YWwgdGltZQorICAgICAgICAgICAg
ICAgICAgICBpZiBjaHVua3NbY2h1bmsuaW5kZXggKyAxXS50aW1lID4gY2h1bmtzW2NodW5rLmlu
ZGV4IC0gMV0udGltZToKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyID0gWyJuZXh0Iiwg
InByZXYiXQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAg
ICAgb3JkZXIgPSBbInByZXYiLCAibmV4dCJdCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgICAgICAgICAgIyBGaXJzdCB0cnkgdG8gcmVtb3ZlIGEgdGVzdCBhbmQgYWRkIHRvIHRo
ZSBuZWlnaGJvcmluZyBjaHVuayB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICAjIGxvd2Vz
dCB0b3RhbCB0aW1lCisgICAgICAgICAgICAgICAgICAgIGlmIGNodW5rc1tjaHVuay5pbmRleCAr
IDFdLnRpbWUgPiBjaHVua3NbY2h1bmsuaW5kZXggLSAxXS50aW1lOgorICAgICAgICAgICAgICAg
ICAgICAgICAgb3JkZXIgPSBbInByZXYiLCAibmV4dCJdCisgICAgICAgICAgICAgICAgICAgIGVs
c2U6CisgICAgICAgICAgICAgICAgICAgICAgICBvcmRlciA9IFsibmV4dCIsICJwcmV2Il0KKwor
ICAgICAgICAgICAgZm9yIGRpcmVjdGlvbiBpbiBvcmRlcjoKKyAgICAgICAgICAgICAgICBpZiBm
KGNodW5rcywgY2h1bmsuaW5kZXgsIGRpcmVjdGlvbik6CisgICAgICAgICAgICAgICAgICAgIGdv
dF9pbXByb3ZlbWVudCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAg
ICAgICAgaWYgZ290X2ltcHJvdmVtZW50OgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAg
ICAgcmV0dXJuIGdvdF9pbXByb3ZlbWVudAorCisgICAgZGVmIF9nZXRfdGVzdHMoc2VsZiwgY2h1
bmtzKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBsaXN0IG9mIHRlc3RzIGNvcnJlc3BvbmRpbmcg
dG8gdGhlIGNodW5rIG51bWJlciB3ZSBhcmUgcnVubmluZy4KKworICAgICAgICA6cGFyYW0gY2h1
bmtzOiBMaXN0IG9mIGNodW5rcyIiIgorICAgICAgICB0ZXN0cyA9IFtdCisgICAgICAgIGZvciBw
YXRoIGluIGNodW5rc1tzZWxmLmNodW5rX251bWJlciAtIDFdLnBhdGhzOgorICAgICAgICAgICAg
dGVzdHMuZXh0ZW5kKHBhdGgudGVzdHMpCisKKyAgICAgICAgcmV0dXJuIHRlc3RzCisKKyAgICBk
ZWYgX19jYWxsX18oc2VsZiwgbWFuaWZlc3RfaXRlcik6CisgICAgICAgIG1hbmlmZXN0ID0gbGlz
dChtYW5pZmVzdF9pdGVyKQorICAgICAgICB0ZXN0cyA9IHNlbGYuX2dldF9jaHVuayhtYW5pZmVz
dCkKKyAgICAgICAgZm9yIGl0ZW0gaW4gdGVzdHM6CisgICAgICAgICAgICB5aWVsZCBpdGVtCisK
KworY2xhc3MgVGVzdEZpbHRlcihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0
X21hbmlmZXN0cywgaW5jbHVkZT1Ob25lLCBleGNsdWRlPU5vbmUsIG1hbmlmZXN0X3BhdGg9Tm9u
ZSk6CisgICAgICAgIGlmIG1hbmlmZXN0X3BhdGggaXMgbm90IE5vbmUgYW5kIGluY2x1ZGUgaXMg
Tm9uZToKKyAgICAgICAgICAgIHNlbGYubWFuaWZlc3QgPSBtYW5pZmVzdGluY2x1ZGUuZ2V0X21h
bmlmZXN0KG1hbmlmZXN0X3BhdGgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLm1h
bmlmZXN0ID0gbWFuaWZlc3RpbmNsdWRlLkluY2x1ZGVNYW5pZmVzdC5jcmVhdGUoKQorICAgICAg
ICAgICAgc2VsZi5tYW5pZmVzdC5zZXRfZGVmYXVsdHMoKQorCisgICAgICAgIGlmIGluY2x1ZGU6
CisgICAgICAgICAgICBzZWxmLm1hbmlmZXN0LnNldCgic2tpcCIsICJ0cnVlIikKKyAgICAgICAg
ICAgIGZvciBpdGVtIGluIGluY2x1ZGU6CisgICAgICAgICAgICAgICAgc2VsZi5tYW5pZmVzdC5h
ZGRfaW5jbHVkZSh0ZXN0X21hbmlmZXN0cywgaXRlbSkKKworICAgICAgICBpZiBleGNsdWRlOgor
ICAgICAgICAgICAgZm9yIGl0ZW0gaW4gZXhjbHVkZToKKyAgICAgICAgICAgICAgICBzZWxmLm1h
bmlmZXN0LmFkZF9leGNsdWRlKHRlc3RfbWFuaWZlc3RzLCBpdGVtKQorCisgICAgZGVmIF9fY2Fs
bF9fKHNlbGYsIG1hbmlmZXN0X2l0ZXIpOgorICAgICAgICBmb3IgdGVzdF90eXBlLCB0ZXN0X3Bh
dGgsIHRlc3RzIGluIG1hbmlmZXN0X2l0ZXI6CisgICAgICAgICAgICBpbmNsdWRlX3Rlc3RzID0g
c2V0KCkKKyAgICAgICAgICAgIGZvciB0ZXN0IGluIHRlc3RzOgorICAgICAgICAgICAgICAgIGlm
IHNlbGYubWFuaWZlc3QuaW5jbHVkZSh0ZXN0KToKKyAgICAgICAgICAgICAgICAgICAgaW5jbHVk
ZV90ZXN0cy5hZGQodGVzdCkKKworICAgICAgICAgICAgaWYgaW5jbHVkZV90ZXN0czoKKyAgICAg
ICAgICAgICAgICB5aWVsZCB0ZXN0X3R5cGUsIHRlc3RfcGF0aCwgaW5jbHVkZV90ZXN0cworCitj
bGFzcyBUYWdGaWx0ZXIob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGFncyk6Cisg
ICAgICAgIHNlbGYudGFncyA9IHNldCh0YWdzKQorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIHRl
c3RfaXRlcik6CisgICAgICAgIGZvciB0ZXN0IGluIHRlc3RfaXRlcjoKKyAgICAgICAgICAgIGlm
IHRlc3QudGFncyAmIHNlbGYudGFnczoKKyAgICAgICAgICAgICAgICB5aWVsZCB0ZXN0CisKK2Ns
YXNzIE1hbmlmZXN0TG9hZGVyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3Rf
cGF0aHMsIGZvcmNlX21hbmlmZXN0X3VwZGF0ZT1GYWxzZSk6CisgICAgICAgIGRvX2RlbGF5ZWRf
aW1wb3J0cygpCisgICAgICAgIHNlbGYudGVzdF9wYXRocyA9IHRlc3RfcGF0aHMKKyAgICAgICAg
c2VsZi5mb3JjZV9tYW5pZmVzdF91cGRhdGUgPSBmb3JjZV9tYW5pZmVzdF91cGRhdGUKKyAgICAg
ICAgc2VsZi5sb2dnZXIgPSBzdHJ1Y3R1cmVkLmdldF9kZWZhdWx0X2xvZ2dlcigpCisgICAgICAg
IGlmIHNlbGYubG9nZ2VyIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLmxvZ2dlciA9IHN0cnVj
dHVyZWQuc3RydWN0dXJlZGxvZy5TdHJ1Y3R1cmVkTG9nZ2VyKCJNYW5pZmVzdExvYWRlciIpCisK
KyAgICBkZWYgbG9hZChzZWxmKToKKyAgICAgICAgcnYgPSB7fQorICAgICAgICBmb3IgdXJsX2Jh
c2UsIHBhdGhzIGluIHNlbGYudGVzdF9wYXRocy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIG1h
bmlmZXN0X2ZpbGUgPSBzZWxmLmxvYWRfbWFuaWZlc3QodXJsX2Jhc2U9dXJsX2Jhc2UsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqcGF0aHMpCisgICAg
ICAgICAgICBwYXRoX2RhdGEgPSB7InVybF9iYXNlIjogdXJsX2Jhc2V9CisgICAgICAgICAgICBw
YXRoX2RhdGEudXBkYXRlKHBhdGhzKQorICAgICAgICAgICAgcnZbbWFuaWZlc3RfZmlsZV0gPSBw
YXRoX2RhdGEKKyAgICAgICAgcmV0dXJuIHJ2CisKKyAgICBkZWYgY3JlYXRlX21hbmlmZXN0KHNl
bGYsIG1hbmlmZXN0X3BhdGgsIHRlc3RzX3BhdGgsIHVybF9iYXNlPSIvIik6CisgICAgICAgIHNl
bGYudXBkYXRlX21hbmlmZXN0KG1hbmlmZXN0X3BhdGgsIHRlc3RzX3BhdGgsIHVybF9iYXNlLCBy
ZWNyZWF0ZT1UcnVlKQorCisgICAgZGVmIHVwZGF0ZV9tYW5pZmVzdChzZWxmLCBtYW5pZmVzdF9w
YXRoLCB0ZXN0c19wYXRoLCB1cmxfYmFzZT0iLyIsCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZWNyZWF0ZT1GYWxzZSk6CisgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oIlVwZGF0aW5nIHRlc3Qg
bWFuaWZlc3QgJXMiICUgbWFuaWZlc3RfcGF0aCkKKworICAgICAgICBqc29uX2RhdGEgPSBOb25l
CisgICAgICAgIGlmIG5vdCByZWNyZWF0ZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAg
ICAgICB3aXRoIG9wZW4obWFuaWZlc3RfcGF0aCkgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAg
anNvbl9kYXRhID0ganNvbi5sb2FkKGYpCisgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAg
ICAgICAgICAgICAgICAjSWYgdGhlIGV4aXN0aW5nIGZpbGUgZG9lc24ndCBleGlzdCBqdXN0IGNy
ZWF0ZSBvbmUgZnJvbSBzY3JhdGNoCisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGlm
IG5vdCBqc29uX2RhdGE6CisgICAgICAgICAgICBtYW5pZmVzdF9maWxlID0gbWFuaWZlc3QuTWFu
aWZlc3QodXJsX2Jhc2UpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0cnk6CisgICAgICAg
ICAgICAgICAgbWFuaWZlc3RfZmlsZSA9IG1hbmlmZXN0Lk1hbmlmZXN0LmZyb21fanNvbih0ZXN0
c19wYXRoLCBqc29uX2RhdGEpCisgICAgICAgICAgICBleGNlcHQgbWFuaWZlc3QuTWFuaWZlc3RW
ZXJzaW9uTWlzbWF0Y2g6CisgICAgICAgICAgICAgICAgbWFuaWZlc3RfZmlsZSA9IG1hbmlmZXN0
Lk1hbmlmZXN0KHVybF9iYXNlKQorCisgICAgICAgIG1hbmlmZXN0X3VwZGF0ZS51cGRhdGUodGVz
dHNfcGF0aCwgbWFuaWZlc3RfZmlsZSwgVHJ1ZSkKKworICAgICAgICBtYW5pZmVzdC53cml0ZSht
YW5pZmVzdF9maWxlLCBtYW5pZmVzdF9wYXRoKQorCisgICAgZGVmIGxvYWRfbWFuaWZlc3Qoc2Vs
ZiwgdGVzdHNfcGF0aCwgbWV0YWRhdGFfcGF0aCwgdXJsX2Jhc2U9Ii8iKToKKyAgICAgICAgbWFu
aWZlc3RfcGF0aCA9IG9zLnBhdGguam9pbihtZXRhZGF0YV9wYXRoLCAiTUFOSUZFU1QuanNvbiIp
CisgICAgICAgIGlmIChub3Qgb3MucGF0aC5leGlzdHMobWFuaWZlc3RfcGF0aCkgb3IKKyAgICAg
ICAgICAgIHNlbGYuZm9yY2VfbWFuaWZlc3RfdXBkYXRlKToKKyAgICAgICAgICAgIHNlbGYudXBk
YXRlX21hbmlmZXN0KG1hbmlmZXN0X3BhdGgsIHRlc3RzX3BhdGgsIHVybF9iYXNlKQorICAgICAg
ICBtYW5pZmVzdF9maWxlID0gbWFuaWZlc3QubG9hZCh0ZXN0c19wYXRoLCBtYW5pZmVzdF9wYXRo
KQorICAgICAgICBpZiBtYW5pZmVzdF9maWxlLnVybF9iYXNlICE9IHVybF9iYXNlOgorICAgICAg
ICAgICAgc2VsZi5sb2dnZXIuaW5mbygiVXBkYXRpbmcgdXJsX2Jhc2UgaW4gbWFuaWZlc3QgZnJv
bSAlcyB0byAlcyIgJSAobWFuaWZlc3RfZmlsZS51cmxfYmFzZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVybF9iYXNlKSkKKyAgICAgICAgICAgIG1hbmlmZXN0X2ZpbGUudXJsX2Jhc2UgPSB1cmxf
YmFzZQorICAgICAgICAgICAgbWFuaWZlc3Qud3JpdGUobWFuaWZlc3RfZmlsZSwgbWFuaWZlc3Rf
cGF0aCkKKworICAgICAgICByZXR1cm4gbWFuaWZlc3RfZmlsZQorCitkZWYgaXRlcmZpbHRlcihm
aWx0ZXJzLCBpdGVyKToKKyAgICBmb3IgZiBpbiBmaWx0ZXJzOgorICAgICAgICBpdGVyID0gZihp
dGVyKQorICAgIGZvciBpdGVtIGluIGl0ZXI6CisgICAgICAgIHlpZWxkIGl0ZW0KKworY2xhc3Mg
VGVzdExvYWRlcihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLAorICAgICAgICAgICAg
ICAgICB0ZXN0X21hbmlmZXN0cywKKyAgICAgICAgICAgICAgICAgdGVzdF90eXBlcywKKyAgICAg
ICAgICAgICAgICAgcnVuX2luZm8sCisgICAgICAgICAgICAgICAgIG1hbmlmZXN0X2ZpbHRlcnM9
Tm9uZSwKKyAgICAgICAgICAgICAgICAgbWV0YV9maWx0ZXJzPU5vbmUsCisgICAgICAgICAgICAg
ICAgIGNodW5rX3R5cGU9Im5vbmUiLAorICAgICAgICAgICAgICAgICB0b3RhbF9jaHVua3M9MSwK
KyAgICAgICAgICAgICAgICAgY2h1bmtfbnVtYmVyPTEsCisgICAgICAgICAgICAgICAgIGluY2x1
ZGVfaHR0cHM9VHJ1ZSk6CisKKyAgICAgICAgc2VsZi50ZXN0X3R5cGVzID0gdGVzdF90eXBlcwor
ICAgICAgICBzZWxmLnJ1bl9pbmZvID0gcnVuX2luZm8KKworICAgICAgICBzZWxmLm1hbmlmZXN0
X2ZpbHRlcnMgPSBtYW5pZmVzdF9maWx0ZXJzIGlmIG1hbmlmZXN0X2ZpbHRlcnMgaXMgbm90IE5v
bmUgZWxzZSBbXQorICAgICAgICBzZWxmLm1ldGFfZmlsdGVycyA9IG1ldGFfZmlsdGVycyBpZiBt
ZXRhX2ZpbHRlcnMgaXMgbm90IE5vbmUgZWxzZSBbXQorCisgICAgICAgIHNlbGYubWFuaWZlc3Rz
ID0gdGVzdF9tYW5pZmVzdHMKKyAgICAgICAgc2VsZi50ZXN0cyA9IE5vbmUKKyAgICAgICAgc2Vs
Zi5kaXNhYmxlZF90ZXN0cyA9IE5vbmUKKyAgICAgICAgc2VsZi5pbmNsdWRlX2h0dHBzID0gaW5j
bHVkZV9odHRwcworCisgICAgICAgIHNlbGYuY2h1bmtfdHlwZSA9IGNodW5rX3R5cGUKKyAgICAg
ICAgc2VsZi50b3RhbF9jaHVua3MgPSB0b3RhbF9jaHVua3MKKyAgICAgICAgc2VsZi5jaHVua19u
dW1iZXIgPSBjaHVua19udW1iZXIKKworICAgICAgICBzZWxmLmNodW5rZXIgPSB7Im5vbmUiOiBV
bmNodW5rZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAiaGFzaCI6IEhhc2hDaHVua2VyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgImRpcl9oYXNoIjogRGlyZWN0b3J5SGFzaENodW5rZXIs
CisgICAgICAgICAgICAgICAgICAgICAgICAiZXF1YWxfdGltZSI6IEVxdWFsVGltZUNodW5rZXJ9
W2NodW5rX3R5cGVdKHRvdGFsX2NodW5rcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmtfbnVtYmVyKQorCisg
ICAgICAgIHNlbGYuX3Rlc3RfaWRzID0gTm9uZQorCisgICAgICAgIHNlbGYuZGlyZWN0b3J5X21h
bmlmZXN0cyA9IHt9CisKKyAgICAgICAgc2VsZi5fbG9hZF90ZXN0cygpCisKKyAgICBAcHJvcGVy
dHkKKyAgICBkZWYgdGVzdF9pZHMoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX3Rlc3RfaWRzIGlz
IE5vbmU6CisgICAgICAgICAgICBzZWxmLl90ZXN0X2lkcyA9IFtdCisgICAgICAgICAgICBmb3Ig
dGVzdF9kaWN0IGluIFtzZWxmLmRpc2FibGVkX3Rlc3RzLCBzZWxmLnRlc3RzXToKKyAgICAgICAg
ICAgICAgICBmb3IgdGVzdF90eXBlIGluIHNlbGYudGVzdF90eXBlczoKKyAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fdGVzdF9pZHMgKz0gW2l0ZW0uaWQgZm9yIGl0ZW0gaW4gdGVzdF9kaWN0W3Rl
c3RfdHlwZV1dCisgICAgICAgIHJldHVybiBzZWxmLl90ZXN0X2lkcworCisgICAgZGVmIGdldF90
ZXN0KHNlbGYsIG1hbmlmZXN0X3Rlc3QsIGluaGVyaXRfbWV0YWRhdGEsIHRlc3RfbWV0YWRhdGEp
OgorICAgICAgICBpZiB0ZXN0X21ldGFkYXRhIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaW5o
ZXJpdF9tZXRhZGF0YS5hcHBlbmQodGVzdF9tZXRhZGF0YSkKKyAgICAgICAgICAgIHRlc3RfbWV0
YWRhdGEgPSB0ZXN0X21ldGFkYXRhLmdldF90ZXN0KG1hbmlmZXN0X3Rlc3QuaWQpCisKKyAgICAg
ICAgcmV0dXJuIHdwdHRlc3QuZnJvbV9tYW5pZmVzdChtYW5pZmVzdF90ZXN0LCBpbmhlcml0X21l
dGFkYXRhLCB0ZXN0X21ldGFkYXRhKQorCisgICAgZGVmIGxvYWRfZGlyX21ldGFkYXRhKHNlbGYs
IHRlc3RfbWFuaWZlc3QsIG1ldGFkYXRhX3BhdGgsIHRlc3RfcGF0aCk6CisgICAgICAgIHJ2ID0g
W10KKyAgICAgICAgcGF0aF9wYXJ0cyA9IG9zLnBhdGguZGlybmFtZSh0ZXN0X3BhdGgpLnNwbGl0
KG9zLnBhdGguc2VwKQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMSxsZW4ocGF0aF9wYXJ0cykg
KyAxKToKKyAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4obWV0YWRhdGFfcGF0aCwgb3Mu
cGF0aC5zZXAuam9pbihwYXRoX3BhcnRzWzppXSksICJfX2Rpcl9fLmluaSIpCisgICAgICAgICAg
ICBpZiBwYXRoIG5vdCBpbiBzZWxmLmRpcmVjdG9yeV9tYW5pZmVzdHM6CisgICAgICAgICAgICAg
ICAgc2VsZi5kaXJlY3RvcnlfbWFuaWZlc3RzW3BhdGhdID0gbWFuaWZlc3RleHBlY3RlZC5nZXRf
ZGlyX21hbmlmZXN0KHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucnVuX2lu
Zm8pCisgICAgICAgICAgICBtYW5pZmVzdCA9IHNlbGYuZGlyZWN0b3J5X21hbmlmZXN0c1twYXRo
XQorICAgICAgICAgICAgaWYgbWFuaWZlc3QgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAg
cnYuYXBwZW5kKG1hbmlmZXN0KQorICAgICAgICByZXR1cm4gcnYKKworICAgIGRlZiBsb2FkX21l
dGFkYXRhKHNlbGYsIHRlc3RfbWFuaWZlc3QsIG1ldGFkYXRhX3BhdGgsIHRlc3RfcGF0aCk6Cisg
ICAgICAgIGluaGVyaXRfbWV0YWRhdGEgPSBzZWxmLmxvYWRfZGlyX21ldGFkYXRhKHRlc3RfbWFu
aWZlc3QsIG1ldGFkYXRhX3BhdGgsIHRlc3RfcGF0aCkKKyAgICAgICAgdGVzdF9tZXRhZGF0YSA9
IG1hbmlmZXN0ZXhwZWN0ZWQuZ2V0X21hbmlmZXN0KAorICAgICAgICAgICAgbWV0YWRhdGFfcGF0
aCwgdGVzdF9wYXRoLCB0ZXN0X21hbmlmZXN0LnVybF9iYXNlLCBzZWxmLnJ1bl9pbmZvKQorICAg
ICAgICByZXR1cm4gaW5oZXJpdF9tZXRhZGF0YSwgdGVzdF9tZXRhZGF0YQorCisgICAgZGVmIGl0
ZXJfdGVzdHMoc2VsZik6CisgICAgICAgIG1hbmlmZXN0X2l0ZW1zID0gW10KKworICAgICAgICBm
b3IgbWFuaWZlc3QgaW4gc29ydGVkKHNlbGYubWFuaWZlc3RzLmtleXMoKSwga2V5PWxhbWJkYSB4
OngudXJsX2Jhc2UpOgorICAgICAgICAgICAgbWFuaWZlc3RfaXRlciA9IGl0ZXJmaWx0ZXIoc2Vs
Zi5tYW5pZmVzdF9maWx0ZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbWFuaWZlc3QuaXRlcnR5cGVzKCpzZWxmLnRlc3RfdHlwZXMpKQorICAgICAgICAgICAgbWFu
aWZlc3RfaXRlbXMuZXh0ZW5kKG1hbmlmZXN0X2l0ZXIpCisKKyAgICAgICAgaWYgc2VsZi5jaHVu
a2VyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgbWFuaWZlc3RfaXRlbXMgPSBzZWxmLmNodW5r
ZXIobWFuaWZlc3RfaXRlbXMpCisKKyAgICAgICAgZm9yIHRlc3RfdHlwZSwgdGVzdF9wYXRoLCB0
ZXN0cyBpbiBtYW5pZmVzdF9pdGVtczoKKyAgICAgICAgICAgIG1hbmlmZXN0X2ZpbGUgPSBpdGVy
KHRlc3RzKS5uZXh0KCkubWFuaWZlc3QKKyAgICAgICAgICAgIG1ldGFkYXRhX3BhdGggPSBzZWxm
Lm1hbmlmZXN0c1ttYW5pZmVzdF9maWxlXVsibWV0YWRhdGFfcGF0aCJdCisgICAgICAgICAgICBp
bmhlcml0X21ldGFkYXRhLCB0ZXN0X21ldGFkYXRhID0gc2VsZi5sb2FkX21ldGFkYXRhKG1hbmlm
ZXN0X2ZpbGUsIG1ldGFkYXRhX3BhdGgsIHRlc3RfcGF0aCkKKworICAgICAgICAgICAgZm9yIHRl
c3QgaW4gaXRlcmZpbHRlcihzZWxmLm1ldGFfZmlsdGVycywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZi5pdGVyX3dwdHRlc3QoaW5oZXJpdF9tZXRhZGF0YSwgdGVzdF9t
ZXRhZGF0YSwgdGVzdHMpKToKKyAgICAgICAgICAgICAgICB5aWVsZCB0ZXN0X3BhdGgsIHRlc3Rf
dHlwZSwgdGVzdAorCisgICAgZGVmIGl0ZXJfd3B0dGVzdChzZWxmLCBpbmhlcml0X21ldGFkYXRh
LCB0ZXN0X21ldGFkYXRhLCB0ZXN0cyk6CisgICAgICAgIGZvciBtYW5pZmVzdF90ZXN0IGluIHRl
c3RzOgorICAgICAgICAgICAgeWllbGQgc2VsZi5nZXRfdGVzdChtYW5pZmVzdF90ZXN0LCBpbmhl
cml0X21ldGFkYXRhLCB0ZXN0X21ldGFkYXRhKQorCisgICAgZGVmIF9sb2FkX3Rlc3RzKHNlbGYp
OgorICAgICAgICAiIiJSZWFkIGluIHRoZSB0ZXN0cyBmcm9tIHRoZSBtYW5pZmVzdCBmaWxlIGFu
ZCBhZGQgdGhlbSB0byBhIHF1ZXVlIiIiCisgICAgICAgIHRlc3RzID0geyJlbmFibGVkIjpkZWZh
dWx0ZGljdChsaXN0KSwKKyAgICAgICAgICAgICAgICAgImRpc2FibGVkIjpkZWZhdWx0ZGljdChs
aXN0KX0KKworICAgICAgICBmb3IgdGVzdF9wYXRoLCB0ZXN0X3R5cGUsIHRlc3QgaW4gc2VsZi5p
dGVyX3Rlc3RzKCk6CisgICAgICAgICAgICBlbmFibGVkID0gbm90IHRlc3QuZGlzYWJsZWQoKQor
ICAgICAgICAgICAgaWYgbm90IHNlbGYuaW5jbHVkZV9odHRwcyBhbmQgdGVzdC5lbnZpcm9ubWVu
dFsicHJvdG9jb2wiXSA9PSAiaHR0cHMiOgorICAgICAgICAgICAgICAgIGVuYWJsZWQgPSBGYWxz
ZQorICAgICAgICAgICAga2V5ID0gImVuYWJsZWQiIGlmIGVuYWJsZWQgZWxzZSAiZGlzYWJsZWQi
CisgICAgICAgICAgICB0ZXN0c1trZXldW3Rlc3RfdHlwZV0uYXBwZW5kKHRlc3QpCisKKyAgICAg
ICAgc2VsZi50ZXN0cyA9IHRlc3RzWyJlbmFibGVkIl0KKyAgICAgICAgc2VsZi5kaXNhYmxlZF90
ZXN0cyA9IHRlc3RzWyJkaXNhYmxlZCJdCisKKyAgICBkZWYgZ3JvdXBzKHNlbGYsIHRlc3RfdHlw
ZXMsIGNodW5rX3R5cGU9Im5vbmUiLCB0b3RhbF9jaHVua3M9MSwgY2h1bmtfbnVtYmVyPTEpOgor
ICAgICAgICBncm91cHMgPSBzZXQoKQorCisgICAgICAgIGZvciB0ZXN0X3R5cGUgaW4gdGVzdF90
eXBlczoKKyAgICAgICAgICAgIGZvciB0ZXN0IGluIHNlbGYudGVzdHNbdGVzdF90eXBlXToKKyAg
ICAgICAgICAgICAgICBncm91cCA9IHRlc3QudXJsLnNwbGl0KCIvIilbMV0KKyAgICAgICAgICAg
ICAgICBncm91cHMuYWRkKGdyb3VwKQorCisgICAgICAgIHJldHVybiBncm91cHMKKworCitjbGFz
cyBUZXN0U291cmNlKG9iamVjdCk6CisgICAgX19tZXRhY2xhc3NfXyA9IEFCQ01ldGEKKworICAg
IGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0X3F1ZXVlKToKKyAgICAgICAgc2VsZi50ZXN0X3F1ZXVl
ID0gdGVzdF9xdWV1ZQorICAgICAgICBzZWxmLmN1cnJlbnRfZ3JvdXAgPSBOb25lCisgICAgICAg
IHNlbGYuY3VycmVudF9tZXRhZGF0YSA9IE5vbmUKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAg
ICNAY2xhc3NtZXRob2QgKGRvZXNuJ3QgY29tcG9zZSB3aXRoIEBhYnN0cmFjdG1ldGhvZCkKKyAg
ICBkZWYgbWFrZV9xdWV1ZShjbHMsIHRlc3RzLCAqKmt3YXJncyk6CisgICAgICAgIHBhc3MKKwor
ICAgIGRlZiBncm91cChzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuY3VycmVudF9ncm91cCBv
ciBsZW4oc2VsZi5jdXJyZW50X2dyb3VwKSA9PSAwOgorICAgICAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgICAgIHNlbGYuY3VycmVudF9ncm91cCwgc2VsZi5jdXJyZW50X21ldGFkYXRhID0gc2Vs
Zi50ZXN0X3F1ZXVlLmdldChibG9jaz1GYWxzZSkKKyAgICAgICAgICAgIGV4Y2VwdCBFbXB0eToK
KyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZSwgTm9uZQorICAgICAgICByZXR1cm4gc2VsZi5j
dXJyZW50X2dyb3VwLCBzZWxmLmN1cnJlbnRfbWV0YWRhdGEKKworCitjbGFzcyBHcm91cGVkU291
cmNlKFRlc3RTb3VyY2UpOgorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBuZXdfZ3JvdXAoY2xz
LCBzdGF0ZSwgdGVzdCwgKiprd2FyZ3MpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVy
cm9yCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgbWFrZV9xdWV1ZShjbHMsIHRlc3RzLCAq
Kmt3YXJncyk6CisgICAgICAgIHRlc3RfcXVldWUgPSBRdWV1ZSgpCisgICAgICAgIGdyb3VwcyA9
IFtdCisKKyAgICAgICAgc3RhdGUgPSB7fQorCisgICAgICAgIGZvciB0ZXN0IGluIHRlc3RzOgor
ICAgICAgICAgICAgaWYgY2xzLm5ld19ncm91cChzdGF0ZSwgdGVzdCwgKiprd2FyZ3MpOgorICAg
ICAgICAgICAgICAgIGdyb3Vwcy5hcHBlbmQoKGRlcXVlKCksIHt9KSkKKworICAgICAgICAgICAg
Z3JvdXAsIG1ldGFkYXRhID0gZ3JvdXBzWy0xXQorICAgICAgICAgICAgZ3JvdXAuYXBwZW5kKHRl
c3QpCisgICAgICAgICAgICB0ZXN0LnVwZGF0ZV9tZXRhZGF0YShtZXRhZGF0YSkKKworICAgICAg
ICBmb3IgaXRlbSBpbiBncm91cHM6CisgICAgICAgICAgICB0ZXN0X3F1ZXVlLnB1dChpdGVtKQor
ICAgICAgICByZXR1cm4gdGVzdF9xdWV1ZQorCisKK2NsYXNzIFNpbmdsZVRlc3RTb3VyY2UoVGVz
dFNvdXJjZSk6CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIG1ha2VfcXVldWUoY2xzLCB0ZXN0
cywgKiprd2FyZ3MpOgorICAgICAgICB0ZXN0X3F1ZXVlID0gUXVldWUoKQorICAgICAgICBwcm9j
ZXNzZXMgPSBrd2FyZ3NbInByb2Nlc3NlcyJdCisgICAgICAgIHF1ZXVlcyA9IFtkZXF1ZShbXSkg
Zm9yIF8gaW4geHJhbmdlKHByb2Nlc3NlcyldCisgICAgICAgIG1ldGFkYXRhcyA9IFt7fSBmb3Ig
XyBpbiB4cmFuZ2UocHJvY2Vzc2VzKV0KKyAgICAgICAgZm9yIHRlc3QgaW4gdGVzdHM6CisgICAg
ICAgICAgICBpZHggPSBoYXNoKHRlc3QuaWQpICUgcHJvY2Vzc2VzCisgICAgICAgICAgICBncm91
cCA9IHF1ZXVlc1tpZHhdCisgICAgICAgICAgICBtZXRhZGF0YSA9IG1ldGFkYXRhc1tpZHhdCisg
ICAgICAgICAgICBncm91cC5hcHBlbmQodGVzdCkKKyAgICAgICAgICAgIHRlc3QudXBkYXRlX21l
dGFkYXRhKG1ldGFkYXRhKQorCisgICAgICAgIGZvciBpdGVtIGluIHppcChxdWV1ZXMsIG1ldGFk
YXRhcyk6CisgICAgICAgICAgICB0ZXN0X3F1ZXVlLnB1dChpdGVtKQorCisgICAgICAgIHJldHVy
biB0ZXN0X3F1ZXVlCisKKworY2xhc3MgUGF0aEdyb3VwZWRTb3VyY2UoR3JvdXBlZFNvdXJjZSk6
CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIG5ld19ncm91cChjbHMsIHN0YXRlLCB0ZXN0LCAq
Kmt3YXJncyk6CisgICAgICAgIGRlcHRoID0ga3dhcmdzLmdldCgiZGVwdGgiKQorICAgICAgICBp
ZiBkZXB0aCBpcyBUcnVlOgorICAgICAgICAgICAgZGVwdGggPSBOb25lCisgICAgICAgIHBhdGgg
PSB1cmxwYXJzZS51cmxzcGxpdCh0ZXN0LnVybCkucGF0aC5zcGxpdCgiLyIpWzE6LTFdWzpkZXB0
aF0KKyAgICAgICAgcnYgPSBwYXRoICE9IHN0YXRlLmdldCgicHJldl9wYXRoIikKKyAgICAgICAg
c3RhdGVbInByZXZfcGF0aCJdID0gcGF0aAorICAgICAgICByZXR1cm4gcnYKZGlmZiAtLWdpdCBh
L1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3Rl
c3RydW5uZXIucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVy
L3dwdHJ1bm5lci90ZXN0cnVubmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi5jNDY1NWI3ZmFlMwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2lt
cG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3Rlc3RydW5uZXIucHkKQEAgLTAs
MCArMSw3NjEgQEAKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgdW5pY29kZV9saXRlcmFscworCitp
bXBvcnQgbXVsdGlwcm9jZXNzaW5nCitpbXBvcnQgc3lzCitpbXBvcnQgdGhyZWFkaW5nCitpbXBv
cnQgdHJhY2ViYWNrCitmcm9tIFF1ZXVlIGltcG9ydCBFbXB0eQorZnJvbSBjb2xsZWN0aW9ucyBp
bXBvcnQgbmFtZWR0dXBsZQorZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFByb2Nlc3MsIGN1
cnJlbnRfcHJvY2VzcywgUXVldWUKKworZnJvbSBtb3psb2cgaW1wb3J0IHN0cnVjdHVyZWRsb2cK
KworIyBTcGVjaWFsIHZhbHVlIHVzZWQgYXMgYSBzZW50aW5hbCBpbiB2YXJpb3VzIGNvbW1hbmRz
CitTdG9wID0gb2JqZWN0KCkKKworCitjbGFzcyBNZXNzYWdlTG9nZ2VyKG9iamVjdCk6CisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIG1lc3NhZ2VfZnVuYyk6CisgICAgICAgIHNlbGYuc2VuZF9tZXNz
YWdlID0gbWVzc2FnZV9mdW5jCisKKyAgICBkZWYgX2xvZ19kYXRhKHNlbGYsIGFjdGlvbiwgKipr
d2FyZ3MpOgorICAgICAgICBzZWxmLnNlbmRfbWVzc2FnZSgibG9nIiwgYWN0aW9uLCBrd2FyZ3Mp
CisKKyAgICBkZWYgcHJvY2Vzc19vdXRwdXQoc2VsZiwgcHJvY2VzcywgZGF0YSwgY29tbWFuZCk6
CisgICAgICAgIHNlbGYuX2xvZ19kYXRhKCJwcm9jZXNzX291dHB1dCIsIHByb2Nlc3M9cHJvY2Vz
cywgZGF0YT1kYXRhLCBjb21tYW5kPWNvbW1hbmQpCisKKworZGVmIF9sb2dfZnVuYyhsZXZlbF9u
YW1lKToKKyAgICBkZWYgbG9nKHNlbGYsIG1lc3NhZ2UpOgorICAgICAgICBzZWxmLl9sb2dfZGF0
YShsZXZlbF9uYW1lLmxvd2VyKCksIG1lc3NhZ2U9bWVzc2FnZSkKKyAgICBsb2cuX19kb2NfXyA9
ICIiIkxvZyBhIG1lc3NhZ2Ugd2l0aCBsZXZlbCAlcworCis6cGFyYW0gbWVzc2FnZTogVGhlIHN0
cmluZyBtZXNzYWdlIHRvIGxvZworIiIiICUgbGV2ZWxfbmFtZQorICAgIGxvZy5fX25hbWVfXyA9
IHN0cihsZXZlbF9uYW1lKS5sb3dlcigpCisgICAgcmV0dXJuIGxvZworCisjIENyZWF0ZSBhbGwg
dGhlIG1ldGhvZHMgb24gU3RydWN0dXJlZExvZyBmb3IgZGVidWcgbGV2ZWxzCitmb3IgbGV2ZWxf
bmFtZSBpbiBzdHJ1Y3R1cmVkbG9nLmxvZ19sZXZlbHM6CisgICAgc2V0YXR0cihNZXNzYWdlTG9n
Z2VyLCBsZXZlbF9uYW1lLmxvd2VyKCksIF9sb2dfZnVuYyhsZXZlbF9uYW1lKSkKKworCitjbGFz
cyBUZXN0UnVubmVyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbW1hbmRfcXVl
dWUsIHJlc3VsdF9xdWV1ZSwgZXhlY3V0b3IpOgorICAgICAgICAiIiJDbGFzcyBpbXBsZW1lbnRp
bmcgdGhlIG1haW4gbG9vcCBmb3IgcnVubmluZyB0ZXN0cy4KKworICAgICAgICBUaGlzIGNsYXNz
IGRlbGVnYXRlcyB0aGUgam9iIG9mIGFjdHVhbGx5IHJ1bm5pbmcgYSB0ZXN0IHRvIHRoZSBleGVj
dXRvcgorICAgICAgICB0aGF0IGlzIHBhc3NlZCBpbi4KKworICAgICAgICA6cGFyYW0gY29tbWFu
ZF9xdWV1ZTogc3VicHJvY2Vzcy5RdWV1ZSB1c2VkIHRvIHNlbmQgY29tbWFuZHMgdG8gdGhlCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzCisgICAgICAgIDpwYXJhbSByZXN1
bHRfcXVldWU6IHN1YnByb2Nlc3MuUXVldWUgdXNlZCB0byBzZW5kIHJlc3VsdHMgdG8gdGhlCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCBUZXN0TWFuYWdlciBwcm9jZXNzCisg
ICAgICAgIDpwYXJhbSBleGVjdXRvcjogVGVzdEV4ZWN1dG9yIG9iamVjdCB0aGF0IHdpbGwgYWN0
dWFsbHkgcnVuIGEgdGVzdC4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuY29tbWFuZF9xdWV1
ZSA9IGNvbW1hbmRfcXVldWUKKyAgICAgICAgc2VsZi5yZXN1bHRfcXVldWUgPSByZXN1bHRfcXVl
dWUKKworICAgICAgICBzZWxmLmV4ZWN1dG9yID0gZXhlY3V0b3IKKyAgICAgICAgc2VsZi5uYW1l
ID0gY3VycmVudF9wcm9jZXNzKCkubmFtZQorICAgICAgICBzZWxmLmxvZ2dlciA9IE1lc3NhZ2VM
b2dnZXIoc2VsZi5zZW5kX21lc3NhZ2UpCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAg
ICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsIGV4Y190eXBlLCBleGNf
dmFsdWUsIHRyYWNlYmFjayk6CisgICAgICAgIHNlbGYudGVhcmRvd24oKQorCisgICAgZGVmIHNl
dHVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1ZygiRXhlY3V0b3Igc2V0dXAiKQor
ICAgICAgICBzZWxmLmV4ZWN1dG9yLnNldHVwKHNlbGYpCisgICAgICAgIHNlbGYubG9nZ2VyLmRl
YnVnKCJFeGVjdXRvciBzZXR1cCBkb25lIikKKworICAgIGRlZiB0ZWFyZG93bihzZWxmKToKKyAg
ICAgICAgc2VsZi5leGVjdXRvci50ZWFyZG93bigpCisgICAgICAgIHNlbGYuc2VuZF9tZXNzYWdl
KCJydW5uZXJfdGVhcmRvd24iKQorICAgICAgICBzZWxmLnJlc3VsdF9xdWV1ZSA9IE5vbmUKKyAg
ICAgICAgc2VsZi5jb21tYW5kX3F1ZXVlID0gTm9uZQorICAgICAgICBzZWxmLmJyb3dzZXIgPSBO
b25lCisKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICAiIiJNYWluIGxvb3AgYWNjZXB0aW5n
IGNvbW1hbmRzIG92ZXIgdGhlIHBpcGUgYW5kIHRyaWdnZXJpbmcKKyAgICAgICAgdGhlIGFzc29j
aWF0ZWQgbWV0aG9kcyIiIgorICAgICAgICBzZWxmLnNldHVwKCkKKyAgICAgICAgY29tbWFuZHMg
PSB7InJ1bl90ZXN0Ijogc2VsZi5ydW5fdGVzdCwKKyAgICAgICAgICAgICAgICAgICAgInN0b3Ai
OiBzZWxmLnN0b3AsCisgICAgICAgICAgICAgICAgICAgICJ3YWl0Ijogc2VsZi53YWl0fQorICAg
ICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgY29tbWFuZCwgYXJncyA9IHNlbGYuY29tbWFu
ZF9xdWV1ZS5nZXQoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJ2ID0gY29t
bWFuZHNbY29tbWFuZF0oKmFyZ3MpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAg
ICAgICAgICAgICAgIHNlbGYuc2VuZF9tZXNzYWdlKCJlcnJvciIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIkVycm9yIHJ1bm5pbmcgY29tbWFuZCAlcyB3aXRoIGFyZ3VtZW50
cyAlcjpcbiVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbW1hbmQs
IGFyZ3MsIHRyYWNlYmFjay5mb3JtYXRfZXhjKCkpKQorICAgICAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgICAgICBpZiBydiBpcyBTdG9wOgorICAgICAgICAgICAgICAgICAgICBicmVhaworCisg
ICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgIHJldHVybiBTdG9wCisKKyAgICBkZWYgcnVuX3Rl
c3Qoc2VsZiwgdGVzdCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmV4
ZWN1dG9yLnJ1bl90ZXN0KHRlc3QpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAg
ICAgICBzZWxmLmxvZ2dlci5jcml0aWNhbCh0cmFjZWJhY2suZm9ybWF0X2V4YygpKQorICAgICAg
ICAgICAgcmFpc2UKKworICAgIGRlZiB3YWl0KHNlbGYpOgorICAgICAgICBzZWxmLmV4ZWN1dG9y
LnByb3RvY29sLndhaXQoKQorICAgICAgICBzZWxmLnNlbmRfbWVzc2FnZSgid2FpdF9maW5pc2hl
ZCIpCisKKyAgICBkZWYgc2VuZF9tZXNzYWdlKHNlbGYsIGNvbW1hbmQsICphcmdzKToKKyAgICAg
ICAgc2VsZi5yZXN1bHRfcXVldWUucHV0KChjb21tYW5kLCBhcmdzKSkKKworCitkZWYgc3RhcnRf
cnVubmVyKHJ1bm5lcl9jb21tYW5kX3F1ZXVlLCBydW5uZXJfcmVzdWx0X3F1ZXVlLAorICAgICAg
ICAgICAgICAgICBleGVjdXRvcl9jbHMsIGV4ZWN1dG9yX2t3YXJncywKKyAgICAgICAgICAgICAg
ICAgZXhlY3V0b3JfYnJvd3Nlcl9jbHMsIGV4ZWN1dG9yX2Jyb3dzZXJfa3dhcmdzLAorICAgICAg
ICAgICAgICAgICBzdG9wX2ZsYWcpOgorICAgICIiIkxhdW5jaCBhIFRlc3RSdW5uZXIgaW4gYSBu
ZXcgcHJvY2VzcyIiIgorICAgIHRyeToKKyAgICAgICAgYnJvd3NlciA9IGV4ZWN1dG9yX2Jyb3dz
ZXJfY2xzKCoqZXhlY3V0b3JfYnJvd3Nlcl9rd2FyZ3MpCisgICAgICAgIGV4ZWN1dG9yID0gZXhl
Y3V0b3JfY2xzKGJyb3dzZXIsICoqZXhlY3V0b3Jfa3dhcmdzKQorICAgICAgICB3aXRoIFRlc3RS
dW5uZXIocnVubmVyX2NvbW1hbmRfcXVldWUsIHJ1bm5lcl9yZXN1bHRfcXVldWUsIGV4ZWN1dG9y
KSBhcyBydW5uZXI6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcnVubmVyLnJ1
bigpCisgICAgICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICAg
ICAgc3RvcF9mbGFnLnNldCgpCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgcnVubmVy
X3Jlc3VsdF9xdWV1ZS5wdXQoKCJsb2ciLCAoImNyaXRpY2FsIiwgeyJtZXNzYWdlIjogdHJhY2Vi
YWNrLmZvcm1hdF9leGMoKX0pKSkKKyAgICAgICAgcHJpbnQgPj4gc3lzLnN0ZGVyciwgdHJhY2Vi
YWNrLmZvcm1hdF9leGMoKQorICAgICAgICBzdG9wX2ZsYWcuc2V0KCkKKyAgICBmaW5hbGx5Ogor
ICAgICAgICBydW5uZXJfY29tbWFuZF9xdWV1ZSA9IE5vbmUKKyAgICAgICAgcnVubmVyX3Jlc3Vs
dF9xdWV1ZSA9IE5vbmUKKworCittYW5hZ2VyX2NvdW50ID0gMAorCisKK2RlZiBuZXh0X21hbmFn
ZXJfbnVtYmVyKCk6CisgICAgZ2xvYmFsIG1hbmFnZXJfY291bnQKKyAgICBsb2NhbCA9IG1hbmFn
ZXJfY291bnQgPSBtYW5hZ2VyX2NvdW50ICsgMQorICAgIHJldHVybiBsb2NhbAorCisKK2NsYXNz
IEJyb3dzZXJNYW5hZ2VyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvZ2dlciwg
YnJvd3NlciwgY29tbWFuZF9xdWV1ZSwgbm9fdGltZW91dD1GYWxzZSk6CisgICAgICAgIHNlbGYu
bG9nZ2VyID0gbG9nZ2VyCisgICAgICAgIHNlbGYuYnJvd3NlciA9IGJyb3dzZXIKKyAgICAgICAg
c2VsZi5ub190aW1lb3V0ID0gbm9fdGltZW91dAorICAgICAgICBzZWxmLmJyb3dzZXJfc2V0dGlu
Z3MgPSBOb25lCisgICAgICAgIHNlbGYubGFzdF90ZXN0ID0gTm9uZQorCisgICAgICAgIHNlbGYu
c3RhcnRlZCA9IEZhbHNlCisKKyAgICAgICAgc2VsZi5pbml0X3RpbWVyID0gTm9uZQorCisgICAg
ZGVmIHVwZGF0ZV9zZXR0aW5ncyhzZWxmLCB0ZXN0KToKKyAgICAgICAgYnJvd3Nlcl9zZXR0aW5n
cyA9IHNlbGYuYnJvd3Nlci5zZXR0aW5ncyh0ZXN0KQorICAgICAgICByZXN0YXJ0X3JlcXVpcmVk
ID0gKChzZWxmLmJyb3dzZXJfc2V0dGluZ3MgaXMgbm90IE5vbmUgYW5kCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNlbGYuYnJvd3Nlcl9zZXR0aW5ncyAhPSBicm93c2VyX3NldHRpbmdz
KSBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLmxhc3RfdGVzdCAhPSB0ZXN0
IGFuZCB0ZXN0LmV4cGVjdGVkKCkgPT0gIkNSQVNIIikpCisgICAgICAgIHNlbGYuYnJvd3Nlcl9z
ZXR0aW5ncyA9IGJyb3dzZXJfc2V0dGluZ3MKKyAgICAgICAgc2VsZi5sYXN0X3Rlc3QgPSB0ZXN0
CisgICAgICAgIHJldHVybiByZXN0YXJ0X3JlcXVpcmVkCisKKyAgICBkZWYgaW5pdChzZWxmKToK
KyAgICAgICAgIiIiTGF1bmNoIHRoZSBicm93c2VyIHRoYXQgaXMgYmVpbmcgdGVzdGVkLAorICAg
ICAgICBhbmQgdGhlIFRlc3RSdW5uZXIgcHJvY2VzcyB0aGF0IHdpbGwgcnVuIHRoZSB0ZXN0cy4i
IiIKKyAgICAgICAgIyBJdCBzZWVtcyB0aGF0IHRoaXMgbG9jayBpcyBoZWxwZnVsIHRvIHByZXZl
bnQgc29tZSByYWNlIHRoYXQgb3RoZXJ3aXNlCisgICAgICAgICMgc29tZXRpbWVzIHN0b3BzIHRo
ZSBzcGF3bmVkIHByb2Nlc3NlcyBpbml0aWFsaXNpbmcgY29ycmVjdGx5LCBhbmQKKyAgICAgICAg
IyBsZWF2ZXMgdGhpcyB0aHJlYWQgaHVuZworICAgICAgICBpZiBzZWxmLmluaXRfdGltZXIgaXMg
bm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmluaXRfdGltZXIuY2FuY2VsKCkKKworICAgICAg
ICBzZWxmLmxvZ2dlci5kZWJ1ZygiSW5pdCBjYWxsZWQsIHN0YXJ0aW5nIGJyb3dzZXIgYW5kIHJ1
bm5lciIpCisKKyAgICAgICAgaWYgbm90IHNlbGYubm9fdGltZW91dDoKKyAgICAgICAgICAgIHNl
bGYuaW5pdF90aW1lciA9IHRocmVhZGluZy5UaW1lcihzZWxmLmJyb3dzZXIuaW5pdF90aW1lb3V0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5p
dF90aW1lb3V0KQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBzZWxmLmluaXRfdGltZXIg
aXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5pbml0X3RpbWVyLnN0YXJ0KCkKKyAg
ICAgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJTdGFydGluZyBicm93c2VyIHdpdGggc2V0dGlu
Z3MgJXIiICUgc2VsZi5icm93c2VyX3NldHRpbmdzKQorICAgICAgICAgICAgc2VsZi5icm93c2Vy
LnN0YXJ0KCoqc2VsZi5icm93c2VyX3NldHRpbmdzKQorICAgICAgICAgICAgc2VsZi5icm93c2Vy
X3BpZCA9IHNlbGYuYnJvd3Nlci5waWQoKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBz
ZWxmLmxvZ2dlci53YXJuaW5nKCJGYWlsdXJlIGR1cmluZyBpbml0ICVzIiAlIHRyYWNlYmFjay5m
b3JtYXRfZXhjKCkpCisgICAgICAgICAgICBpZiBzZWxmLmluaXRfdGltZXIgaXMgbm90IE5vbmU6
CisgICAgICAgICAgICAgICAgc2VsZi5pbml0X3RpbWVyLmNhbmNlbCgpCisgICAgICAgICAgICBz
ZWxmLmxvZ2dlci5lcnJvcih0cmFjZWJhY2suZm9ybWF0X2V4YygpKQorICAgICAgICAgICAgc3Vj
Y2VlZGVkID0gRmFsc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN1Y2NlZWRlZCA9IFRy
dWUKKyAgICAgICAgICAgIHNlbGYuc3RhcnRlZCA9IFRydWUKKworICAgICAgICByZXR1cm4gc3Vj
Y2VlZGVkCisKKyAgICBkZWYgc2VuZF9tZXNzYWdlKHNlbGYsIGNvbW1hbmQsICphcmdzKToKKyAg
ICAgICAgc2VsZi5jb21tYW5kX3F1ZXVlLnB1dCgoY29tbWFuZCwgYXJncykpCisKKyAgICBkZWYg
aW5pdF90aW1lb3V0KHNlbGYpOgorICAgICAgICAjIFRoaXMgaXMgY2FsbGVkIGZyb20gYSBzZXBl
cmF0ZSB0aHJlYWQsIHNvIHdlIHNlbmQgYSBtZXNzYWdlIHRvIHRoZQorICAgICAgICAjIG1haW4g
bG9vcCBzbyB3ZSBnZXQgYmFjayBvbnRvIHRoZSBtYW5hZ2VyIHRocmVhZAorICAgICAgICBzZWxm
LmxvZ2dlci5kZWJ1ZygiaW5pdF9mYWlsZWQgY2FsbGVkIGZyb20gdGltZXIiKQorICAgICAgICBz
ZWxmLnNlbmRfbWVzc2FnZSgiaW5pdF9mYWlsZWQiKQorCisgICAgZGVmIGFmdGVyX2luaXQoc2Vs
Zik6CisgICAgICAgICIiIkNhbGxiYWNrIHdoZW4gd2UgaGF2ZSBzdGFydGVkIHRoZSBicm93c2Vy
LCBzdGFydGVkIHRoZSByZW1vdGUKKyAgICAgICAgY29udHJvbCBjb25uZWN0aW9uLCBhbmQgd2Ug
YXJlIHJlYWR5IHRvIHN0YXJ0IHRlc3RpbmcuIiIiCisgICAgICAgIGlmIHNlbGYuaW5pdF90aW1l
ciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuaW5pdF90aW1lci5jYW5jZWwoKQorCisg
ICAgZGVmIHN0b3Aoc2VsZiwgZm9yY2U9RmFsc2UpOgorICAgICAgICBzZWxmLmJyb3dzZXIuc3Rv
cChmb3JjZT1mb3JjZSkKKyAgICAgICAgc2VsZi5zdGFydGVkID0gRmFsc2UKKworICAgIGRlZiBj
bGVhbnVwKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmluaXRfdGltZXIgaXMgbm90IE5vbmU6Cisg
ICAgICAgICAgICBzZWxmLmluaXRfdGltZXIuY2FuY2VsKCkKKyAgICAgICAgc2VsZi5icm93c2Vy
LmNsZWFudXAoKQorCisgICAgZGVmIGNoZWNrX2Zvcl9jcmFzaGVzKHNlbGYpOgorICAgICAgICBz
ZWxmLmJyb3dzZXIuY2hlY2tfZm9yX2NyYXNoZXMoKQorCisgICAgZGVmIGxvZ19jcmFzaChzZWxm
LCB0ZXN0X2lkKToKKyAgICAgICAgc2VsZi5icm93c2VyLmxvZ19jcmFzaChwcm9jZXNzPXNlbGYu
YnJvd3Nlcl9waWQsIHRlc3Q9dGVzdF9pZCkKKworICAgIGRlZiBpc19hbGl2ZShzZWxmKToKKyAg
ICAgICAgcmV0dXJuIHNlbGYuYnJvd3Nlci5pc19hbGl2ZSgpCisKKworY2xhc3MgX1J1bm5lck1h
bmFnZXJTdGF0ZShvYmplY3QpOgorICAgIGJlZm9yZV9pbml0ID0gbmFtZWR0dXBsZSgiYmVmb3Jl
X2luaXQiLCBbXSkKKyAgICBpbml0aWFsaXppbmcgPSBuYW1lZHR1cGxlKCJpbml0aWFsaXppbmdf
YnJvd3NlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbInRlc3QiLCAidGVzdF9n
cm91cCIsICJncm91cF9tZXRhZGF0YSIsICJmYWlsdXJlX2NvdW50Il0pCisgICAgcnVubmluZyA9
IG5hbWVkdHVwbGUoInJ1bm5pbmciLCBbInRlc3QiLCAidGVzdF9ncm91cCIsICJncm91cF9tZXRh
ZGF0YSJdKQorICAgIHJlc3RhcnRpbmcgPSBuYW1lZHR1cGxlKCJyZXN0YXJ0aW5nIiwgWyJ0ZXN0
IiwgInRlc3RfZ3JvdXAiLCAiZ3JvdXBfbWV0YWRhdGEiXSkKKyAgICBlcnJvciA9IG5hbWVkdHVw
bGUoImVycm9yIiwgW10pCisgICAgc3RvcCA9IG5hbWVkdHVwbGUoInN0b3AiLCBbXSkKKworCitS
dW5uZXJNYW5hZ2VyU3RhdGUgPSBfUnVubmVyTWFuYWdlclN0YXRlKCkKKworCitjbGFzcyBUZXN0
UnVubmVyTWFuYWdlcih0aHJlYWRpbmcuVGhyZWFkKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
c3VpdGVfbmFtZSwgdGVzdF9xdWV1ZSwgdGVzdF9zb3VyY2VfY2xzLCBicm93c2VyX2NscywgYnJv
d3Nlcl9rd2FyZ3MsCisgICAgICAgICAgICAgICAgIGV4ZWN1dG9yX2NscywgZXhlY3V0b3Jfa3dh
cmdzLCBzdG9wX2ZsYWcsIHBhdXNlX2FmdGVyX3Rlc3Q9RmFsc2UsCisgICAgICAgICAgICAgICAg
IHBhdXNlX29uX3VuZXhwZWN0ZWQ9RmFsc2UsIHJlc3RhcnRfb25fdW5leHBlY3RlZD1UcnVlLCBk
ZWJ1Z19pbmZvPU5vbmUpOgorICAgICAgICAiIiJUaHJlYWQgdGhhdCBvd25zIGEgc2luZ2xlIFRl
c3RSdW5uZXIgcHJvY2VzcyBhbmQgYW55IHByb2Nlc3NlcyByZXF1aXJlZAorICAgICAgICBieSB0
aGUgVGVzdFJ1bm5lciAoZS5nLiB0aGUgRmlyZWZveCBiaW5hcnkpLgorCisgICAgICAgIFRlc3RS
dW5uZXJNYW5hZ2VycyBhcmUgcmVzcG9uc2libGUgZm9yIGxhdW5jaGluZyB0aGUgYnJvd3NlciBw
cm9jZXNzIGFuZCB0aGUKKyAgICAgICAgcnVubmVyIHByb2Nlc3MsIGFuZCBmb3IgbG9nZ2luZyB0
aGUgdGVzdCBwcm9ncmVzcy4gVGhlIGFjdHVhbCB0ZXN0IHJ1bm5pbmcKKyAgICAgICAgaXMgZG9u
ZSBieSB0aGUgVGVzdFJ1bm5lci4gSW4gcGFydGljdWxhciB0aGV5OgorCisgICAgICAgICogU3Rh
cnQgdGhlIGJpbmFyeSBvZiB0aGUgcHJvZ3JhbSB1bmRlciB0ZXN0CisgICAgICAgICogU3RhcnQg
dGhlIFRlc3RSdW5uZXIKKyAgICAgICAgKiBUZWxsIHRoZSBUZXN0UnVubmVyIHRvIHN0YXJ0IGEg
dGVzdCwgaWYgYW55CisgICAgICAgICogTG9nIHRoYXQgdGhlIHRlc3Qgc3RhcnRlZAorICAgICAg
ICAqIExvZyB0aGUgdGVzdCByZXN1bHRzCisgICAgICAgICogVGFrZSBhbnkgcmVtZWRpYWwgYWN0
aW9uIHJlcXVpcmVkIGUuZy4gcmVzdGFydCBjcmFzaGVkIG9yIGh1bmcKKyAgICAgICAgICBwcm9j
ZXNzZXMKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuc3VpdGVfbmFtZSA9IHN1aXRlX25hbWUK
KworICAgICAgICBzZWxmLnRlc3Rfc291cmNlID0gdGVzdF9zb3VyY2VfY2xzKHRlc3RfcXVldWUp
CisKKyAgICAgICAgc2VsZi5icm93c2VyX2NscyA9IGJyb3dzZXJfY2xzCisgICAgICAgIHNlbGYu
YnJvd3Nlcl9rd2FyZ3MgPSBicm93c2VyX2t3YXJncworCisgICAgICAgIHNlbGYuZXhlY3V0b3Jf
Y2xzID0gZXhlY3V0b3JfY2xzCisgICAgICAgIHNlbGYuZXhlY3V0b3Jfa3dhcmdzID0gZXhlY3V0
b3Jfa3dhcmdzCisKKyAgICAgICAgIyBGbGFncyB1c2VkIHRvIHNodXQgZG93biB0aGlzIHRocmVh
ZCBpZiB3ZSBnZXQgYSBzaWdpbnQKKyAgICAgICAgc2VsZi5wYXJlbnRfc3RvcF9mbGFnID0gc3Rv
cF9mbGFnCisgICAgICAgIHNlbGYuY2hpbGRfc3RvcF9mbGFnID0gbXVsdGlwcm9jZXNzaW5nLkV2
ZW50KCkKKworICAgICAgICBzZWxmLnBhdXNlX2FmdGVyX3Rlc3QgPSBwYXVzZV9hZnRlcl90ZXN0
CisgICAgICAgIHNlbGYucGF1c2Vfb25fdW5leHBlY3RlZCA9IHBhdXNlX29uX3VuZXhwZWN0ZWQK
KyAgICAgICAgc2VsZi5yZXN0YXJ0X29uX3VuZXhwZWN0ZWQgPSByZXN0YXJ0X29uX3VuZXhwZWN0
ZWQKKyAgICAgICAgc2VsZi5kZWJ1Z19pbmZvID0gZGVidWdfaW5mbworCisgICAgICAgIHNlbGYu
bWFuYWdlcl9udW1iZXIgPSBuZXh0X21hbmFnZXJfbnVtYmVyKCkKKworICAgICAgICBzZWxmLmNv
bW1hbmRfcXVldWUgPSBRdWV1ZSgpCisgICAgICAgIHNlbGYucmVtb3RlX3F1ZXVlID0gUXVldWUo
KQorCisgICAgICAgIHNlbGYudGVzdF9ydW5uZXJfcHJvYyA9IE5vbmUKKworICAgICAgICB0aHJl
YWRpbmcuVGhyZWFkLl9faW5pdF9fKHNlbGYsIG5hbWU9IlRocmVhZC1UZXN0cnVubmVyTWFuYWdl
ci0laSIgJSBzZWxmLm1hbmFnZXJfbnVtYmVyKQorICAgICAgICAjIFRoaXMgaXMgc3RhcnRlZCBp
biB0aGUgYWN0dWFsIG5ldyB0aHJlYWQKKyAgICAgICAgc2VsZi5sb2dnZXIgPSBOb25lCisKKyAg
ICAgICAgc2VsZi51bmV4cGVjdGVkX2NvdW50ID0gMAorCisgICAgICAgICMgVGhpcyBtYXkgbm90
IHJlYWxseSBiZSB3aGF0IHdlIHdhbnQKKyAgICAgICAgc2VsZi5kYWVtb24gPSBUcnVlCisKKyAg
ICAgICAgc2VsZi5tYXhfcmVzdGFydHMgPSA1CisKKyAgICAgICAgc2VsZi5icm93c2VyID0gTm9u
ZQorCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgIiIiTWFpbiBsb29wIGZvciB0aGUgVGVz
dE1hbmFnZXIuCisKKyAgICAgICAgVGVzdE1hbmFnZXJzIGdlbmVyYWxseSByZWNlaXZlIGNvbW1h
bmRzIGZyb20gdGhlaXIKKyAgICAgICAgVGVzdFJ1bm5lciB1cGRhdGluZyB0aGVtIG9uIHRoZSBz
dGF0dXMgb2YgYSB0ZXN0LiBUaGV5CisgICAgICAgIG1heSBhbHNvIGhhdmUgYSBzdG9wIGZsYWcg
c2V0IGJ5IHRoZSBtYWluIHRocmVhZCBpbmRpY2F0aW5nCisgICAgICAgIHRoYXQgdGhlIG1hbmFn
ZXIgc2hvdWxkIHNodXQgZG93biB0aGUgbmV4dCB0aW1lIHRoZSBldmVudCBsb29wCisgICAgICAg
IHNwaW5zLiIiIgorICAgICAgICBzZWxmLmxvZ2dlciA9IHN0cnVjdHVyZWRsb2cuU3RydWN0dXJl
ZExvZ2dlcihzZWxmLnN1aXRlX25hbWUpCisgICAgICAgIHdpdGggc2VsZi5icm93c2VyX2Nscyhz
ZWxmLmxvZ2dlciwgKipzZWxmLmJyb3dzZXJfa3dhcmdzKSBhcyBicm93c2VyOgorICAgICAgICAg
ICAgc2VsZi5icm93c2VyID0gQnJvd3Nlck1hbmFnZXIoc2VsZi5sb2dnZXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicm93c2VyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb21tYW5kX3F1ZXVlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9fdGltZW91dD1zZWxmLmRlYnVnX2lu
Zm8gaXMgbm90IE5vbmUpCisgICAgICAgICAgICBkaXNwYXRjaCA9IHsKKyAgICAgICAgICAgICAg
ICBSdW5uZXJNYW5hZ2VyU3RhdGUuYmVmb3JlX2luaXQ6IHNlbGYuc3RhcnRfaW5pdCwKKyAgICAg
ICAgICAgICAgICBSdW5uZXJNYW5hZ2VyU3RhdGUuaW5pdGlhbGl6aW5nOiBzZWxmLmluaXQsCisg
ICAgICAgICAgICAgICAgUnVubmVyTWFuYWdlclN0YXRlLnJ1bm5pbmc6IHNlbGYucnVuX3Rlc3Qs
CisgICAgICAgICAgICAgICAgUnVubmVyTWFuYWdlclN0YXRlLnJlc3RhcnRpbmc6IHNlbGYucmVz
dGFydF9ydW5uZXIKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IFJ1
bm5lck1hbmFnZXJTdGF0ZS5iZWZvcmVfaW5pdCgpCisgICAgICAgICAgICBlbmRfc3RhdGVzID0g
KFJ1bm5lck1hbmFnZXJTdGF0ZS5zdG9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICBSdW5u
ZXJNYW5hZ2VyU3RhdGUuZXJyb3IpCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAg
ICB3aGlsZSBub3QgaXNpbnN0YW5jZShzZWxmLnN0YXRlLCBlbmRfc3RhdGVzKToKKyAgICAgICAg
ICAgICAgICAgICAgZiA9IGRpc3BhdGNoLmdldChzZWxmLnN0YXRlLl9fY2xhc3NfXykKKyAgICAg
ICAgICAgICAgICAgICAgd2hpbGUgZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9n
Z2VyLmRlYnVnKCJEaXNwYXRjaCAlcyIgJSBmLl9fbmFtZV9fKQorICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgc2VsZi5zaG91bGRfc3RvcCgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybgorICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3N0YXRlID0gZigpCisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiBuZXdfc3RhdGUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IG5l
d19zdGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcoIm5ldyBz
dGF0ZTogJXMiICUgc2VsZi5zdGF0ZS5fX2NsYXNzX18uX19uYW1lX18pCisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYuc3RhdGUsIGVuZF9zdGF0ZXMpOgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgICAgICAgICAgZiA9
IGRpc3BhdGNoLmdldChzZWxmLnN0YXRlLl9fY2xhc3NfXykKKworICAgICAgICAgICAgICAgICAg
ICBuZXdfc3RhdGUgPSBOb25lCisgICAgICAgICAgICAgICAgICAgIHdoaWxlIG5ld19zdGF0ZSBp
cyBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3N0YXRlID0gc2VsZi53YWl0X2V2
ZW50KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuc2hvdWxkX3N0b3AoKToKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5zdGF0ZSA9IG5ld19zdGF0ZQorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1
ZygibmV3IHN0YXRlOiAlcyIgJSBzZWxmLnN0YXRlLl9fY2xhc3NfXy5fX25hbWVfXykKKyAgICAg
ICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICBzZWxmLmxvZ2dl
ci5lcnJvcih0cmFjZWJhY2suZm9ybWF0X2V4YyhlKSkKKyAgICAgICAgICAgICAgICByYWlzZQor
ICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1Zygi
VGVzdFJ1bm5lck1hbmFnZXIgbWFpbiBsb29wIHRlcm1pbmF0aW5nLCBzdGFydGluZyBjbGVhbnVw
IikKKyAgICAgICAgICAgICAgICBjbGVhbiA9IGlzaW5zdGFuY2Uoc2VsZi5zdGF0ZSwgUnVubmVy
TWFuYWdlclN0YXRlLnN0b3ApCisgICAgICAgICAgICAgICAgc2VsZi5zdG9wX3J1bm5lcihmb3Jj
ZT1ub3QgY2xlYW4pCisgICAgICAgICAgICAgICAgc2VsZi50ZWFyZG93bigpCisgICAgICAgIHNl
bGYubG9nZ2VyLmRlYnVnKCJUZXN0UnVubmVyTWFuYWdlciBtYWluIGxvb3AgdGVybWluYXRlZCIp
CisKKyAgICBkZWYgd2FpdF9ldmVudChzZWxmKToKKyAgICAgICAgZGlzcGF0Y2ggPSB7CisgICAg
ICAgICAgICBSdW5uZXJNYW5hZ2VyU3RhdGUuYmVmb3JlX2luaXQ6IHt9LAorICAgICAgICAgICAg
UnVubmVyTWFuYWdlclN0YXRlLmluaXRpYWxpemluZzoKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAiaW5pdF9zdWNjZWVkZWQiOiBzZWxmLmluaXRfc3VjY2VlZGVkLAorICAgICAgICAg
ICAgICAgICJpbml0X2ZhaWxlZCI6IHNlbGYuaW5pdF9mYWlsZWQsCisgICAgICAgICAgICB9LAor
ICAgICAgICAgICAgUnVubmVyTWFuYWdlclN0YXRlLnJ1bm5pbmc6CisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgInRlc3RfZW5kZWQiOiBzZWxmLnRlc3RfZW5kZWQsCisgICAgICAgICAg
ICAgICAgIndhaXRfZmluaXNoZWQiOiBzZWxmLndhaXRfZmluaXNoZWQsCisgICAgICAgICAgICB9
LAorICAgICAgICAgICAgUnVubmVyTWFuYWdlclN0YXRlLnJlc3RhcnRpbmc6IHt9LAorICAgICAg
ICAgICAgUnVubmVyTWFuYWdlclN0YXRlLmVycm9yOiB7fSwKKyAgICAgICAgICAgIFJ1bm5lck1h
bmFnZXJTdGF0ZS5zdG9wOiB7fSwKKyAgICAgICAgICAgIE5vbmU6IHsKKyAgICAgICAgICAgICAg
ICAicnVubmVyX3RlYXJkb3duIjogc2VsZi5ydW5uZXJfdGVhcmRvd24sCisgICAgICAgICAgICAg
ICAgImxvZyI6IHNlbGYubG9nLAorICAgICAgICAgICAgICAgICJlcnJvciI6IHNlbGYuZXJyb3IK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjb21t
YW5kLCBkYXRhID0gc2VsZi5jb21tYW5kX3F1ZXVlLmdldChUcnVlLCAxKQorICAgICAgICBleGNl
cHQgSU9FcnJvcjoKKyAgICAgICAgICAgIHNlbGYubG9nZ2VyLmVycm9yKCJHb3QgSU9FcnJvciBm
cm9tIHBvbGwiKQorICAgICAgICAgICAgcmV0dXJuIFJ1bm5lck1hbmFnZXJTdGF0ZS5yZXN0YXJ0
aW5nKDApCisgICAgICAgIGV4Y2VwdCBFbXB0eToKKyAgICAgICAgICAgIGlmIChzZWxmLmRlYnVn
X2luZm8gYW5kIHNlbGYuZGVidWdfaW5mby5pbnRlcmFjdGl2ZSBhbmQKKyAgICAgICAgICAgICAg
ICBzZWxmLmJyb3dzZXIuc3RhcnRlZCBhbmQgbm90IHNlbGYuYnJvd3Nlci5pc19hbGl2ZSgpKToK
KyAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1ZygiRGVidWdnZXIgZXhpdGVkIikKKyAg
ICAgICAgICAgICAgICByZXR1cm4gUnVubmVyTWFuYWdlclN0YXRlLnN0b3AoKQorCisgICAgICAg
ICAgICBpZiAoaXNpbnN0YW5jZShzZWxmLnN0YXRlLCBSdW5uZXJNYW5hZ2VyU3RhdGUucnVubmlu
ZykgYW5kCisgICAgICAgICAgICAgICAgbm90IHNlbGYudGVzdF9ydW5uZXJfcHJvYy5pc19hbGl2
ZSgpKToKKyAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5jb21tYW5kX3F1ZXVlLmVtcHR5KCk6
CisgICAgICAgICAgICAgICAgICAgICMgV2UgZ290IGEgbmV3IG1lc3NhZ2Ugc28gcHJvY2VzcyB0
aGF0CisgICAgICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICAgICAgIyBJZiB3
ZSBnb3QgdG8gaGVyZSB0aGUgcnVubmVyIHByZXN1bWFibHkgc2h1dCBkb3duCisgICAgICAgICAg
ICAgICAgIyB1bmV4cGVjdGVkbHkKKyAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKCJU
ZXN0IHJ1bm5lciBwcm9jZXNzIHNodXQgZG93biIpCisKKyAgICAgICAgICAgICAgICBpZiBzZWxm
LnN0YXRlLnRlc3QgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICMgVGhpcyBjb3Vs
ZCBoYXBwZW4gaWYgdGhlIHRlc3QgcnVubmVyIGNyYXNoZWQgZm9yIHNvbWUgb3RoZXIKKyAgICAg
ICAgICAgICAgICAgICAgIyByZWFzb24KKyAgICAgICAgICAgICAgICAgICAgIyBOZWVkIHRvIGNv
bnNpZGVyIHRoZSB1bmxpa2VseSBjYXNlIHdoZXJlIG9uZSB0ZXN0IGNhdXNlcyB0aGUKKyAgICAg
ICAgICAgICAgICAgICAgIyBydW5uZXIgcHJvY2VzcyB0byByZXBlYXRlZGx5IGRpZQorICAgICAg
ICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5jcml0aWNhbCgiTGFzdCB0ZXN0IGRpZCBub3QgY29t
cGxldGUiKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gUnVubmVyTWFuYWdlclN0YXRlLmVy
cm9yKCkKKyAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci53YXJuaW5nKCJNb3JlIHRlc3RzIGZv
dW5kLCBidXQgcnVubmVyIHByb2Nlc3MgZGllZCwgcmVzdGFydGluZyIpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIFJ1bm5lck1hbmFnZXJTdGF0ZS5yZXN0YXJ0aW5nKDApCisgICAgICAgIGVsc2U6
CisgICAgICAgICAgICBmID0gKGRpc3BhdGNoLmdldChzZWxmLnN0YXRlLl9fY2xhc3NfXywge30p
LmdldChjb21tYW5kKSBvcgorICAgICAgICAgICAgICAgICBkaXNwYXRjaC5nZXQoTm9uZSwge30p
LmdldChjb21tYW5kKSkKKyAgICAgICAgICAgIGlmIG5vdCBmOgorICAgICAgICAgICAgICAgIHNl
bGYubG9nZ2VyLndhcm5pbmcoIkdvdCBjb21tYW5kICVzIGluIHN0YXRlICVzIiAlCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29tbWFuZCwgc2VsZi5zdGF0ZS5fX2NsYXNz
X18uX19uYW1lX18pKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgcmV0dXJu
IGYoKmRhdGEpCisKKyAgICBkZWYgc2hvdWxkX3N0b3Aoc2VsZik6CisgICAgICAgIHJldHVybiBz
ZWxmLmNoaWxkX3N0b3BfZmxhZy5pc19zZXQoKSBvciBzZWxmLnBhcmVudF9zdG9wX2ZsYWcuaXNf
c2V0KCkKKworICAgIGRlZiBzdGFydF9pbml0KHNlbGYpOgorICAgICAgICB0ZXN0LCB0ZXN0X2dy
b3VwLCBncm91cF9tZXRhZGF0YSA9IHNlbGYuZ2V0X25leHRfdGVzdCgpCisgICAgICAgIGlmIHRl
c3QgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBSdW5uZXJNYW5hZ2VyU3RhdGUuc3RvcCgp
CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gUnVubmVyTWFuYWdlclN0YXRlLmlu
aXRpYWxpemluZyh0ZXN0LCB0ZXN0X2dyb3VwLCBncm91cF9tZXRhZGF0YSwgMCkKKworICAgIGRl
ZiBpbml0KHNlbGYpOgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShzZWxmLnN0YXRlLCBSdW5u
ZXJNYW5hZ2VyU3RhdGUuaW5pdGlhbGl6aW5nKQorICAgICAgICBpZiBzZWxmLnN0YXRlLmZhaWx1
cmVfY291bnQgPiBzZWxmLm1heF9yZXN0YXJ0czoKKyAgICAgICAgICAgIHNlbGYubG9nZ2VyLmVy
cm9yKCJNYXggcmVzdGFydHMgZXhjZWVkZWQiKQorICAgICAgICAgICAgcmV0dXJuIFJ1bm5lck1h
bmFnZXJTdGF0ZS5lcnJvcigpCisKKyAgICAgICAgc2VsZi5icm93c2VyLnVwZGF0ZV9zZXR0aW5n
cyhzZWxmLnN0YXRlLnRlc3QpCisKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5icm93c2VyLmluaXQo
KQorICAgICAgICBpZiByZXN1bHQgaXMgU3RvcDoKKyAgICAgICAgICAgIHJldHVybiBSdW5uZXJN
YW5hZ2VyU3RhdGUuZXJyb3IoKQorICAgICAgICBlbGlmIG5vdCByZXN1bHQ6CisgICAgICAgICAg
ICByZXR1cm4gUnVubmVyTWFuYWdlclN0YXRlLmluaXRpYWxpemluZyhzZWxmLnN0YXRlLnRlc3Qs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxm
LnN0YXRlLnRlc3RfZ3JvdXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZWxmLnN0YXRlLmdyb3VwX21ldGFkYXRhLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGF0ZS5mYWlsdXJlX2Nv
dW50ICsgMSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZXhlY3V0b3Jfa3dhcmdz
WyJncm91cF9tZXRhZGF0YSJdID0gc2VsZi5zdGF0ZS5ncm91cF9tZXRhZGF0YQorICAgICAgICAg
ICAgc2VsZi5zdGFydF90ZXN0X3J1bm5lcigpCisKKyAgICBkZWYgc3RhcnRfdGVzdF9ydW5uZXIo
c2VsZik6CisgICAgICAgICMgTm90ZSB0aGF0IHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCB0byBzdGFy
dCB0aGUgYnJvd3NlciBiZWZvcmUgdGhlCisgICAgICAgICMgdGVzdCBydW5uZXIgdG8gZW5zdXJl
IHRoYXQgYW55IHN0YXRlIHNldCB3aGVuIHRoZSBicm93c2VyIGlzIHN0YXJ0ZWQKKyAgICAgICAg
IyBjYW4gYmUgcGFzc2VkIGluIHRvIHRoZSB0ZXN0IHJ1bm5lci4KKyAgICAgICAgYXNzZXJ0IGlz
aW5zdGFuY2Uoc2VsZi5zdGF0ZSwgUnVubmVyTWFuYWdlclN0YXRlLmluaXRpYWxpemluZykKKyAg
ICAgICAgYXNzZXJ0IHNlbGYuY29tbWFuZF9xdWV1ZSBpcyBub3QgTm9uZQorICAgICAgICBhc3Nl
cnQgc2VsZi5yZW1vdGVfcXVldWUgaXMgbm90IE5vbmUKKyAgICAgICAgc2VsZi5sb2dnZXIuaW5m
bygiU3RhcnRpbmcgcnVubmVyIikKKyAgICAgICAgZXhlY3V0b3JfYnJvd3Nlcl9jbHMsIGV4ZWN1
dG9yX2Jyb3dzZXJfa3dhcmdzID0gc2VsZi5icm93c2VyLmJyb3dzZXIuZXhlY3V0b3JfYnJvd3Nl
cigpCisKKyAgICAgICAgYXJncyA9IChzZWxmLnJlbW90ZV9xdWV1ZSwKKyAgICAgICAgICAgICAg
ICBzZWxmLmNvbW1hbmRfcXVldWUsCisgICAgICAgICAgICAgICAgc2VsZi5leGVjdXRvcl9jbHMs
CisgICAgICAgICAgICAgICAgc2VsZi5leGVjdXRvcl9rd2FyZ3MsCisgICAgICAgICAgICAgICAg
ZXhlY3V0b3JfYnJvd3Nlcl9jbHMsCisgICAgICAgICAgICAgICAgZXhlY3V0b3JfYnJvd3Nlcl9r
d2FyZ3MsCisgICAgICAgICAgICAgICAgc2VsZi5jaGlsZF9zdG9wX2ZsYWcpCisgICAgICAgIHNl
bGYudGVzdF9ydW5uZXJfcHJvYyA9IFByb2Nlc3ModGFyZ2V0PXN0YXJ0X3J1bm5lciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzPWFyZ3MsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT0iVGhyZWFkLVRlc3RSdW5uZXItJWki
ICUgc2VsZi5tYW5hZ2VyX251bWJlcikKKyAgICAgICAgc2VsZi50ZXN0X3J1bm5lcl9wcm9jLnN0
YXJ0KCkKKyAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcoIlRlc3QgcnVubmVyIHN0YXJ0ZWQiKQor
ICAgICAgICAjIE5vdyB3ZSB3YWl0IGZvciBlaXRoZXIgYW4gaW5pdF9zdWNjZWVkZWQgZXZlbnQg
b3IgYW4gaW5pdF9mYWlsZWQgZXZlbnQKKworICAgIGRlZiBpbml0X3N1Y2NlZWRlZChzZWxmKToK
KyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2Uoc2VsZi5zdGF0ZSwgUnVubmVyTWFuYWdlclN0YXRl
LmluaXRpYWxpemluZykKKyAgICAgICAgc2VsZi5icm93c2VyLmFmdGVyX2luaXQoKQorICAgICAg
ICByZXR1cm4gUnVubmVyTWFuYWdlclN0YXRlLnJ1bm5pbmcoc2VsZi5zdGF0ZS50ZXN0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGF0ZS50ZXN0X2dy
b3VwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGF0
ZS5ncm91cF9tZXRhZGF0YSkKKworICAgIGRlZiBpbml0X2ZhaWxlZChzZWxmKToKKyAgICAgICAg
YXNzZXJ0IGlzaW5zdGFuY2Uoc2VsZi5zdGF0ZSwgUnVubmVyTWFuYWdlclN0YXRlLmluaXRpYWxp
emluZykKKyAgICAgICAgc2VsZi5icm93c2VyLmFmdGVyX2luaXQoKQorICAgICAgICBzZWxmLnN0
b3BfcnVubmVyKGZvcmNlPVRydWUpCisgICAgICAgIHJldHVybiBSdW5uZXJNYW5hZ2VyU3RhdGUu
aW5pdGlhbGl6aW5nKHNlbGYuc3RhdGUudGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGF0ZS50ZXN0X2dyb3VwLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnN0YXRlLmdyb3VwX21ldGFk
YXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxm
LnN0YXRlLmZhaWx1cmVfY291bnQgKyAxKQorCisgICAgZGVmIGdldF9uZXh0X3Rlc3Qoc2VsZiwg
dGVzdF9ncm91cD1Ob25lKToKKyAgICAgICAgdGVzdCA9IE5vbmUKKyAgICAgICAgd2hpbGUgdGVz
dCBpcyBOb25lOgorICAgICAgICAgICAgd2hpbGUgdGVzdF9ncm91cCBpcyBOb25lIG9yIGxlbih0
ZXN0X2dyb3VwKSA9PSAwOgorICAgICAgICAgICAgICAgIHRlc3RfZ3JvdXAsIGdyb3VwX21ldGFk
YXRhID0gc2VsZi50ZXN0X3NvdXJjZS5ncm91cCgpCisgICAgICAgICAgICAgICAgaWYgdGVzdF9n
cm91cCBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKCJObyBt
b3JlIHRlc3RzIikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUsIE5vbmUsIE5vbmUK
KyAgICAgICAgICAgIHRlc3QgPSB0ZXN0X2dyb3VwLnBvcGxlZnQoKQorICAgICAgICByZXR1cm4g
dGVzdCwgdGVzdF9ncm91cCwgZ3JvdXBfbWV0YWRhdGEKKworCisgICAgZGVmIHJ1bl90ZXN0KHNl
bGYpOgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShzZWxmLnN0YXRlLCBSdW5uZXJNYW5hZ2Vy
U3RhdGUucnVubmluZykKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUudGVzdCBpcyBub3QgTm9u
ZQorCisgICAgICAgIGlmIHNlbGYuYnJvd3Nlci51cGRhdGVfc2V0dGluZ3Moc2VsZi5zdGF0ZS50
ZXN0KToKKyAgICAgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oIlJlc3RhcnRpbmcgYnJvd3NlciBm
b3IgbmV3IHRlc3QgZW52aXJvbm1lbnQiKQorICAgICAgICAgICAgcmV0dXJuIFJ1bm5lck1hbmFn
ZXJTdGF0ZS5yZXN0YXJ0aW5nKHNlbGYuc3RhdGUudGVzdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnN0YXRlLnRlc3RfZ3JvdXAsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGF0ZS5n
cm91cF9tZXRhZGF0YSkKKworICAgICAgICBzZWxmLmxvZ2dlci50ZXN0X3N0YXJ0KHNlbGYuc3Rh
dGUudGVzdC5pZCkKKyAgICAgICAgc2VsZi5zZW5kX21lc3NhZ2UoInJ1bl90ZXN0Iiwgc2VsZi5z
dGF0ZS50ZXN0KQorCisgICAgZGVmIHRlc3RfZW5kZWQoc2VsZiwgdGVzdCwgcmVzdWx0cyk6Cisg
ICAgICAgICIiIkhhbmRsZSB0aGUgZW5kIG9mIGEgdGVzdC4KKworICAgICAgICBPdXRwdXQgdGhl
IHJlc3VsdCBvZiBlYWNoIHN1YnRlc3QsIGFuZCB0aGUgcmVzdWx0IG9mIHRoZSBvdmVyYWxsCisg
ICAgICAgIGhhcm5lc3MgdG8gdGhlIGxvZ3MuCisgICAgICAgICIiIgorICAgICAgICBhc3NlcnQg
aXNpbnN0YW5jZShzZWxmLnN0YXRlLCBSdW5uZXJNYW5hZ2VyU3RhdGUucnVubmluZykKKyAgICAg
ICAgYXNzZXJ0IHRlc3QgPT0gc2VsZi5zdGF0ZS50ZXN0CisgICAgICAgICMgV3JpdGUgdGhlIHJl
c3VsdCBvZiBlYWNoIHN1YnRlc3QKKyAgICAgICAgZmlsZV9yZXN1bHQsIHRlc3RfcmVzdWx0cyA9
IHJlc3VsdHMKKyAgICAgICAgc3VidGVzdF91bmV4cGVjdGVkID0gRmFsc2UKKyAgICAgICAgZm9y
IHJlc3VsdCBpbiB0ZXN0X3Jlc3VsdHM6CisgICAgICAgICAgICBpZiB0ZXN0LmRpc2FibGVkKHJl
c3VsdC5uYW1lKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZXhwZWN0
ZWQgPSB0ZXN0LmV4cGVjdGVkKHJlc3VsdC5uYW1lKQorICAgICAgICAgICAgaXNfdW5leHBlY3Rl
ZCA9IGV4cGVjdGVkICE9IHJlc3VsdC5zdGF0dXMKKworICAgICAgICAgICAgaWYgaXNfdW5leHBl
Y3RlZDoKKyAgICAgICAgICAgICAgICBzZWxmLnVuZXhwZWN0ZWRfY291bnQgKz0gMQorICAgICAg
ICAgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJVbmV4cGVjdGVkIGNvdW50IGluIHRoaXMgdGhy
ZWFkICVpIiAlIHNlbGYudW5leHBlY3RlZF9jb3VudCkKKyAgICAgICAgICAgICAgICBzdWJ0ZXN0
X3VuZXhwZWN0ZWQgPSBUcnVlCisgICAgICAgICAgICBzZWxmLmxvZ2dlci50ZXN0X3N0YXR1cyh0
ZXN0LmlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm5hbWUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3RhdHVzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT1yZXN1bHQubWVzc2FnZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkPWV4cGVjdGVkLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2s9cmVzdWx0LnN0YWNrKQor
CisgICAgICAgICMgVE9ETzogY29uc2lkZXIgY2hhbmdpbmcgcmVzdWx0IGlmIHRoZXJlIGlzIGEg
Y3Jhc2ggZHVtcCBmaWxlCisKKyAgICAgICAgIyBXcml0ZSB0aGUgcmVzdWx0IG9mIHRoZSB0ZXN0
IGhhcm5lc3MKKyAgICAgICAgZXhwZWN0ZWQgPSB0ZXN0LmV4cGVjdGVkKCkKKyAgICAgICAgc3Rh
dHVzID0gZmlsZV9yZXN1bHQuc3RhdHVzIGlmIGZpbGVfcmVzdWx0LnN0YXR1cyAhPSAiRVhURVJO
QUwtVElNRU9VVCIgZWxzZSAiVElNRU9VVCIKKworICAgICAgICBpZiBmaWxlX3Jlc3VsdC5zdGF0
dXMgaW4gICgiVElNRU9VVCIsICJFWFRFUk5BTC1USU1FT1VUIik6CisgICAgICAgICAgICBpZiBz
ZWxmLmJyb3dzZXIuY2hlY2tfZm9yX2NyYXNoZXMoKToKKyAgICAgICAgICAgICAgICBzdGF0dXMg
PSAiQ1JBU0giCisKKyAgICAgICAgaXNfdW5leHBlY3RlZCA9IGV4cGVjdGVkICE9IHN0YXR1cwor
ICAgICAgICBpZiBpc191bmV4cGVjdGVkOgorICAgICAgICAgICAgc2VsZi51bmV4cGVjdGVkX2Nv
dW50ICs9IDEKKyAgICAgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJVbmV4cGVjdGVkIGNvdW50
IGluIHRoaXMgdGhyZWFkICVpIiAlIHNlbGYudW5leHBlY3RlZF9jb3VudCkKKyAgICAgICAgaWYg
c3RhdHVzID09ICJDUkFTSCI6CisgICAgICAgICAgICBzZWxmLmJyb3dzZXIubG9nX2NyYXNoKHRl
c3QuaWQpCisKKyAgICAgICAgc2VsZi5sb2dnZXIudGVzdF9lbmQodGVzdC5pZCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtZXNzYWdlPWZpbGVfcmVzdWx0Lm1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGV4cGVjdGVkPWV4cGVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRy
YT1maWxlX3Jlc3VsdC5leHRyYSkKKworICAgICAgICByZXN0YXJ0X2JlZm9yZV9uZXh0ID0gKHRl
c3QucmVzdGFydF9hZnRlciBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVf
cmVzdWx0LnN0YXR1cyBpbiAoIkNSQVNIIiwgIkVYVEVSTkFMLVRJTUVPVVQiKSBvcgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICgoc3VidGVzdF91bmV4cGVjdGVkIG9yIGlzX3VuZXhw
ZWN0ZWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBzZWxmLnJlc3RhcnRf
b25fdW5leHBlY3RlZCkpCisKKyAgICAgICAgaWYgKHNlbGYucGF1c2VfYWZ0ZXJfdGVzdCBvcgor
ICAgICAgICAgICAgKHNlbGYucGF1c2Vfb25fdW5leHBlY3RlZCBhbmQgKHN1YnRlc3RfdW5leHBl
Y3RlZCBvciBpc191bmV4cGVjdGVkKSkpOgorICAgICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygi
UGF1c2luZyB1bnRpbCB0aGUgYnJvd3NlciBleGl0cyIpCisgICAgICAgICAgICBzZWxmLnNlbmRf
bWVzc2FnZSgid2FpdCIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5h
ZnRlcl90ZXN0X2VuZChyZXN0YXJ0X2JlZm9yZV9uZXh0KQorCisgICAgZGVmIHdhaXRfZmluaXNo
ZWQoc2VsZik6CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHNlbGYuc3RhdGUsIFJ1bm5lck1h
bmFnZXJTdGF0ZS5ydW5uaW5nKQorICAgICAgICAjIFRoZSBicm93c2VyIHNob3VsZCBiZSBzdG9w
cGVkIGFscmVhZHksIGJ1dCB0aGlzIGVuc3VyZXMgd2UgZG8gYW55IHBvc3Qtc3RvcAorICAgICAg
ICAjIHByb2Nlc3NpbmcKKyAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcoIldhaXQgZmluaXNoZWQi
KQorCisgICAgICAgIHJldHVybiBzZWxmLmFmdGVyX3Rlc3RfZW5kKFRydWUpCisKKyAgICBkZWYg
YWZ0ZXJfdGVzdF9lbmQoc2VsZiwgcmVzdGFydCk6CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNl
KHNlbGYuc3RhdGUsIFJ1bm5lck1hbmFnZXJTdGF0ZS5ydW5uaW5nKQorICAgICAgICB0ZXN0LCB0
ZXN0X2dyb3VwLCBncm91cF9tZXRhZGF0YSA9IHNlbGYuZ2V0X25leHRfdGVzdCgpCisgICAgICAg
IGlmIHRlc3QgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBSdW5uZXJNYW5hZ2VyU3RhdGUu
c3RvcCgpCisgICAgICAgIGlmIHRlc3RfZ3JvdXAgIT0gc2VsZi5zdGF0ZS50ZXN0X2dyb3VwOgor
ICAgICAgICAgICAgIyBXZSBhcmUgc3RhcnRpbmcgYSBuZXcgZ3JvdXAgb2YgdGVzdHMsIHNvIGZv
cmNlIGEgcmVzdGFydAorICAgICAgICAgICAgcmVzdGFydCA9IFRydWUKKyAgICAgICAgaWYgcmVz
dGFydDoKKyAgICAgICAgICAgIHJldHVybiBSdW5uZXJNYW5hZ2VyU3RhdGUucmVzdGFydGluZyh0
ZXN0LCB0ZXN0X2dyb3VwLCBncm91cF9tZXRhZGF0YSkKKyAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgIHJldHVybiBSdW5uZXJNYW5hZ2VyU3RhdGUucnVubmluZyh0ZXN0LCB0ZXN0X2dyb3VwLCBn
cm91cF9tZXRhZGF0YSkKKworICAgIGRlZiByZXN0YXJ0X3J1bm5lcihzZWxmKToKKyAgICAgICAg
IiIiU3RvcCBhbmQgcmVzdGFydCB0aGUgVGVzdFJ1bm5lciIiIgorICAgICAgICBhc3NlcnQgaXNp
bnN0YW5jZShzZWxmLnN0YXRlLCBSdW5uZXJNYW5hZ2VyU3RhdGUucmVzdGFydGluZykKKyAgICAg
ICAgc2VsZi5zdG9wX3J1bm5lcigpCisgICAgICAgIHJldHVybiBSdW5uZXJNYW5hZ2VyU3RhdGUu
aW5pdGlhbGl6aW5nKHNlbGYuc3RhdGUudGVzdCwgc2VsZi5zdGF0ZS50ZXN0X2dyb3VwLCBzZWxm
LnN0YXRlLmdyb3VwX21ldGFkYXRhLCAwKQorCisgICAgZGVmIGxvZyhzZWxmLCBhY3Rpb24sIGt3
YXJncyk6CisgICAgICAgIGdldGF0dHIoc2VsZi5sb2dnZXIsIGFjdGlvbikoKiprd2FyZ3MpCisK
KyAgICBkZWYgZXJyb3Ioc2VsZiwgbWVzc2FnZSk6CisgICAgICAgIHNlbGYubG9nZ2VyLmVycm9y
KG1lc3NhZ2UpCisgICAgICAgIHNlbGYucmVzdGFydF9ydW5uZXIoKQorCisgICAgZGVmIHN0b3Bf
cnVubmVyKHNlbGYsIGZvcmNlPUZhbHNlKToKKyAgICAgICAgIiIiU3RvcCB0aGUgVGVzdFJ1bm5l
ciBhbmQgdGhlIGJyb3dzZXIgYmluYXJ5LiIiIgorICAgICAgICBpZiBzZWxmLnRlc3RfcnVubmVy
X3Byb2MgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIHNlbGYudGVz
dF9ydW5uZXJfcHJvYy5pc19hbGl2ZSgpOgorICAgICAgICAgICAgc2VsZi5zZW5kX21lc3NhZ2Uo
InN0b3AiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmJyb3dzZXIuc3RvcChmb3Jj
ZT1mb3JjZSkKKyAgICAgICAgICAgIHNlbGYuZW5zdXJlX3J1bm5lcl9zdG9wcGVkKCkKKyAgICAg
ICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuY2xlYW51cCgpCisKKyAgICBkZWYgdGVhcmRv
d24oc2VsZik6CisgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJ0ZWFyZG93biBpbiB0ZXN0cnVu
bmVybWFuYWdlciIpCisgICAgICAgIHNlbGYudGVzdF9ydW5uZXJfcHJvYyA9IE5vbmUKKyAgICAg
ICAgc2VsZi5jb21tYW5kX3F1ZXVlLmNsb3NlKCkKKyAgICAgICAgc2VsZi5yZW1vdGVfcXVldWUu
Y2xvc2UoKQorICAgICAgICBzZWxmLmNvbW1hbmRfcXVldWUgPSBOb25lCisgICAgICAgIHNlbGYu
cmVtb3RlX3F1ZXVlID0gTm9uZQorCisgICAgZGVmIGVuc3VyZV9ydW5uZXJfc3RvcHBlZChzZWxm
KToKKyAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcoImVuc3VyZV9ydW5uZXJfc3RvcHBlZCIpCisg
ICAgICAgIGlmIHNlbGYudGVzdF9ydW5uZXJfcHJvYyBpcyBOb25lOgorICAgICAgICAgICAgcmV0
dXJuCisKKyAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcoIndhaXRpbmcgZm9yIHJ1bm5lciBwcm9j
ZXNzIHRvIGVuZCIpCisgICAgICAgIHNlbGYudGVzdF9ydW5uZXJfcHJvYy5qb2luKDEwKQorICAg
ICAgICBzZWxmLmxvZ2dlci5kZWJ1ZygiQWZ0ZXIgam9pbiIpCisgICAgICAgIGlmIHNlbGYudGVz
dF9ydW5uZXJfcHJvYy5pc19hbGl2ZSgpOgorICAgICAgICAgICAgIyBUaGlzIG1pZ2h0IGxlYWsg
YSBmaWxlIGhhbmRsZSBmcm9tIHRoZSBxdWV1ZQorICAgICAgICAgICAgc2VsZi5sb2dnZXIud2Fy
bmluZygiRm9yY2libHkgdGVybWluYXRpbmcgcnVubmVyIHByb2Nlc3MiKQorICAgICAgICAgICAg
c2VsZi50ZXN0X3J1bm5lcl9wcm9jLnRlcm1pbmF0ZSgpCisgICAgICAgICAgICBzZWxmLnRlc3Rf
cnVubmVyX3Byb2Muam9pbigxMCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYubG9n
Z2VyLmRlYnVnKCJUZXN0cnVubmVyIGV4aXRlZCB3aXRoIGNvZGUgJWkiICUgc2VsZi50ZXN0X3J1
bm5lcl9wcm9jLmV4aXRjb2RlKQorCisgICAgZGVmIHJ1bm5lcl90ZWFyZG93bihzZWxmKToKKyAg
ICAgICAgc2VsZi5lbnN1cmVfcnVubmVyX3N0b3BwZWQoKQorICAgICAgICByZXR1cm4gUnVubmVy
TWFuYWdlclN0YXRlLnN0b3AoKQorCisgICAgZGVmIHNlbmRfbWVzc2FnZShzZWxmLCBjb21tYW5k
LCAqYXJncyk6CisgICAgICAgIHNlbGYucmVtb3RlX3F1ZXVlLnB1dCgoY29tbWFuZCwgYXJncykp
CisKKyAgICBkZWYgY2xlYW51cChzZWxmKToKKyAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcoIlRl
c3RNYW5hZ2VyIGNsZWFudXAiKQorICAgICAgICBpZiBzZWxmLmJyb3dzZXI6CisgICAgICAgICAg
ICBzZWxmLmJyb3dzZXIuY2xlYW51cCgpCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAg
ICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIud2FybmluZygiICIuam9pbihtYXAo
cmVwciwgc2VsZi5jb21tYW5kX3F1ZXVlLmdldF9ub3dhaXQoKSkpKQorICAgICAgICAgICAgZXhj
ZXB0IEVtcHR5OgorICAgICAgICAgICAgICAgIGJyZWFrCisKKworZGVmIG1ha2VfdGVzdF9xdWV1
ZSh0ZXN0cywgdGVzdF9zb3VyY2VfY2xzLCAqKnRlc3Rfc291cmNlX2t3YXJncyk6CisgICAgcXVl
dWUgPSB0ZXN0X3NvdXJjZV9jbHMubWFrZV9xdWV1ZSh0ZXN0cywgKip0ZXN0X3NvdXJjZV9rd2Fy
Z3MpCisKKyAgICAjIFRoZXJlIGlzIGEgcmFjZSBjb25kaXRpb24gdGhhdCBtZWFucyBzb21ldGlt
ZXMgd2UgY29udGludWUKKyAgICAjIGJlZm9yZSB0aGUgdGVzdHMgaGF2ZSBiZWVuIHdyaXR0ZW4g
dG8gdGhlIHVuZGVybHlpbmcgcGlwZS4KKyAgICAjIFBvbGxpbmcgdGhlIHBpcGUgZm9yIGRhdGEg
aGVyZSBhdm9pZHMgdGhhdAorICAgIHF1ZXVlLl9yZWFkZXIucG9sbCgxMCkKKyAgICBhc3NlcnQg
bm90IHF1ZXVlLmVtcHR5KCkKKyAgICByZXR1cm4gcXVldWUKKworCitjbGFzcyBNYW5hZ2VyR3Jv
dXAob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3VpdGVfbmFtZSwgc2l6ZSwgdGVz
dF9zb3VyY2VfY2xzLCB0ZXN0X3NvdXJjZV9rd2FyZ3MsCisgICAgICAgICAgICAgICAgIGJyb3dz
ZXJfY2xzLCBicm93c2VyX2t3YXJncywKKyAgICAgICAgICAgICAgICAgZXhlY3V0b3JfY2xzLCBl
eGVjdXRvcl9rd2FyZ3MsCisgICAgICAgICAgICAgICAgIHBhdXNlX2FmdGVyX3Rlc3Q9RmFsc2Us
CisgICAgICAgICAgICAgICAgIHBhdXNlX29uX3VuZXhwZWN0ZWQ9RmFsc2UsCisgICAgICAgICAg
ICAgICAgIHJlc3RhcnRfb25fdW5leHBlY3RlZD1UcnVlLAorICAgICAgICAgICAgICAgICBkZWJ1
Z19pbmZvPU5vbmUpOgorICAgICAgICAiIiJNYWluIHRocmVhZCBvYmplY3QgdGhhdCBvd25zIGFs
bCB0aGUgVGVzdE1hbmFnZXIgdGhyZWFkcy4iIiIKKyAgICAgICAgc2VsZi5zdWl0ZV9uYW1lID0g
c3VpdGVfbmFtZQorICAgICAgICBzZWxmLnNpemUgPSBzaXplCisgICAgICAgIHNlbGYudGVzdF9z
b3VyY2VfY2xzID0gdGVzdF9zb3VyY2VfY2xzCisgICAgICAgIHNlbGYudGVzdF9zb3VyY2Vfa3dh
cmdzID0gdGVzdF9zb3VyY2Vfa3dhcmdzCisgICAgICAgIHNlbGYuYnJvd3Nlcl9jbHMgPSBicm93
c2VyX2NscworICAgICAgICBzZWxmLmJyb3dzZXJfa3dhcmdzID0gYnJvd3Nlcl9rd2FyZ3MKKyAg
ICAgICAgc2VsZi5leGVjdXRvcl9jbHMgPSBleGVjdXRvcl9jbHMKKyAgICAgICAgc2VsZi5leGVj
dXRvcl9rd2FyZ3MgPSBleGVjdXRvcl9rd2FyZ3MKKyAgICAgICAgc2VsZi5wYXVzZV9hZnRlcl90
ZXN0ID0gcGF1c2VfYWZ0ZXJfdGVzdAorICAgICAgICBzZWxmLnBhdXNlX29uX3VuZXhwZWN0ZWQg
PSBwYXVzZV9vbl91bmV4cGVjdGVkCisgICAgICAgIHNlbGYucmVzdGFydF9vbl91bmV4cGVjdGVk
ID0gcmVzdGFydF9vbl91bmV4cGVjdGVkCisgICAgICAgIHNlbGYuZGVidWdfaW5mbyA9IGRlYnVn
X2luZm8KKworICAgICAgICBzZWxmLnBvb2wgPSBzZXQoKQorICAgICAgICAjIEV2ZW50IHRoYXQg
aXMgcG9sbGVkIGJ5IHRocmVhZHMgc28gdGhhdCB0aGV5IGNhbiBncmFjZWZ1bGx5IGV4aXQgaW4g
dGhlIGZhY2UKKyAgICAgICAgIyBvZiBzaWdpbnQKKyAgICAgICAgc2VsZi5zdG9wX2ZsYWcgPSB0
aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICBzZWxmLmxvZ2dlciA9IHN0cnVjdHVyZWRsb2cuU3Ry
dWN0dXJlZExvZ2dlcihzdWl0ZV9uYW1lKQorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAg
ICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCBleGNfdHlwZSwgZXhj
X3ZhbCwgZXhjX3RiKToKKyAgICAgICAgc2VsZi5zdG9wKCkKKworICAgIGRlZiBydW4oc2VsZiwg
dGVzdF90eXBlLCB0ZXN0cyk6CisgICAgICAgICIiIlN0YXJ0IGFsbCBtYW5hZ2VycyBpbiB0aGUg
Z3JvdXAiIiIKKyAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcoIlVzaW5nICVpIHByb2Nlc3NlcyIg
JSBzZWxmLnNpemUpCisgICAgICAgIHR5cGVfdGVzdHMgPSB0ZXN0c1t0ZXN0X3R5cGVdCisgICAg
ICAgIGlmIG5vdCB0eXBlX3Rlc3RzOgorICAgICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygiTm8g
JXMgdGVzdHMgdG8gcnVuIiAlIHRlc3RfdHlwZSkKKyAgICAgICAgICAgIHJldHVybgorCisgICAg
ICAgIHRlc3RfcXVldWUgPSBtYWtlX3Rlc3RfcXVldWUodHlwZV90ZXN0cywgc2VsZi50ZXN0X3Nv
dXJjZV9jbHMsICoqc2VsZi50ZXN0X3NvdXJjZV9rd2FyZ3MpCisKKyAgICAgICAgZm9yIF8gaW4g
cmFuZ2Uoc2VsZi5zaXplKToKKyAgICAgICAgICAgIG1hbmFnZXIgPSBUZXN0UnVubmVyTWFuYWdl
cihzZWxmLnN1aXRlX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGVzdF9xdWV1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLnRlc3Rfc291cmNlX2NscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxmLmJyb3dzZXJfY2xzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGYuYnJvd3Nlcl9rd2FyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZi5leGVjdXRvcl9jbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZi5leGVjdXRvcl9rd2FyZ3MsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdG9wX2ZsYWcsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXVzZV9hZnRlcl90ZXN0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGF1c2Vfb25fdW5leHBlY3RlZCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlc3RhcnRfb25fdW5l
eHBlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRl
YnVnX2luZm8pCisgICAgICAgICAgICBtYW5hZ2VyLnN0YXJ0KCkKKyAgICAgICAgICAgIHNlbGYu
cG9vbC5hZGQobWFuYWdlcikKKyAgICAgICAgc2VsZi53YWl0KCkKKworICAgIGRlZiBpc19hbGl2
ZShzZWxmKToKKyAgICAgICAgIiIiQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgYW55IG1hbmFn
ZXIgaW4gdGhlIGdyb3VwIGlzIHN0aWxsIGFsaXZlIiIiCisgICAgICAgIHJldHVybiBhbnkobWFu
YWdlci5pc19hbGl2ZSgpIGZvciBtYW5hZ2VyIGluIHNlbGYucG9vbCkKKworICAgIGRlZiB3YWl0
KHNlbGYpOgorICAgICAgICAiIiJXYWl0IGZvciBhbGwgdGhlIG1hbmFnZXJzIGluIHRoZSBncm91
cCB0byBmaW5pc2giIiIKKyAgICAgICAgZm9yIGl0ZW0gaW4gc2VsZi5wb29sOgorICAgICAgICAg
ICAgaXRlbS5qb2luKCkKKworICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICAiIiJTZXQgdGhl
IHN0b3AgZmxhZyBzbyB0aGF0IGFsbCBtYW5hZ2VycyBpbiB0aGUgZ3JvdXAgc3RvcCBhcyBzb29u
CisgICAgICAgIGFzIHBvc3NpYmxlIiIiCisgICAgICAgIHNlbGYuc3RvcF9mbGFnLnNldCgpCisg
ICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJTdG9wIGZsYWcgc2V0IGluIE1hbmFnZXJHcm91cCIp
CisKKyAgICBkZWYgdW5leHBlY3RlZF9jb3VudChzZWxmKToKKyAgICAgICAgcmV0dXJuIHN1bShp
dGVtLnVuZXhwZWN0ZWRfY291bnQgZm9yIGl0ZW0gaW4gc2VsZi5wb29sKQpkaWZmIC0tZ2l0IGEv
V2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvdGVz
dHMvX19pbml0X18ucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVu
bmVyL3dwdHJ1bm5lci90ZXN0cy9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uZTY5ZGUyOWJiMmQKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2lt
cG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3Rlc3RzL3Rlc3RfY2h1bmtlci5w
eSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVy
L3Rlc3RzL3Rlc3RfY2h1bmtlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uMDYyYjY4N2ZhYjkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBv
cnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci90ZXN0cy90ZXN0X2NodW5rZXIucHkK
QEAgLTAsMCArMSw5MSBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgc3lzCitmcm9tIG9zLnBh
dGggaW1wb3J0IGpvaW4sIGRpcm5hbWUKK2Zyb20gbW96bG9nIGltcG9ydCBzdHJ1Y3R1cmVkCisK
K2ltcG9ydCBweXRlc3QKKworc3lzLnBhdGguaW5zZXJ0KDAsIGpvaW4oZGlybmFtZShfX2ZpbGVf
XyksICIuLiIsICIuLiIpKQorCitmcm9tIHdwdHJ1bm5lci50ZXN0bG9hZGVyIGltcG9ydCBFcXVh
bFRpbWVDaHVua2VyCisKK3N0cnVjdHVyZWQuc2V0X2RlZmF1bHRfbG9nZ2VyKHN0cnVjdHVyZWQu
c3RydWN0dXJlZGxvZy5TdHJ1Y3R1cmVkTG9nZ2VyKCJUZXN0Q2h1bmtlciIpKQorCitjbGFzcyBN
b2NrVGVzdChvYmplY3QpOgorICAgIGRlZmF1bHRfdGltZW91dCA9IDEwCisKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgaWQsIHRpbWVvdXQ9MTApOgorICAgICAgICBzZWxmLmlkID0gaWQKKyAgICAg
ICAgc2VsZi5pdGVtX3R5cGUgPSAidGVzdGhhcm5lc3MiCisgICAgICAgIHNlbGYudGltZW91dCA9
IHRpbWVvdXQKKworCitkZWYgbWFrZV9tb2NrX21hbmlmZXN0KCppdGVtcyk6CisgICAgcnYgPSBb
XQorICAgIGZvciB0ZXN0X3R5cGUsIGRpcl9wYXRoLCBudW1fdGVzdHMgaW4gaXRlbXM6CisgICAg
ICAgIGZvciBpIGluIHJhbmdlKG51bV90ZXN0cyk6CisgICAgICAgICAgICBydi5hcHBlbmQoKHRl
c3RfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgZGlyX3BhdGggKyAiLyVpLnRlc3QiICUg
aSwKKyAgICAgICAgICAgICAgICAgICAgICAgc2V0KFtNb2NrVGVzdChpKV0pKSkKKyAgICByZXR1
cm4gcnYKKworCitjbGFzcyBUZXN0RXF1YWxUaW1lQ2h1bmtlcih1bml0dGVzdC5UZXN0Q2FzZSk6
CisKKyAgICBkZWYgdGVzdF9pbmNsdWRlX2FsbChzZWxmKToKKyAgICAgICAgdGVzdHMgPSBtYWtl
X21vY2tfbWFuaWZlc3QoKCJ0ZXN0IiwgImEiLCAxMCksICgidGVzdCIsICJhL2IiLCAxMCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgidGVzdCIsICJjIiwgMTApKQorCisg
ICAgICAgIGNodW5rXzEgPSBsaXN0KEVxdWFsVGltZUNodW5rZXIoMywgMSkodGVzdHMpKQorICAg
ICAgICBjaHVua18yID0gbGlzdChFcXVhbFRpbWVDaHVua2VyKDMsIDIpKHRlc3RzKSkKKyAgICAg
ICAgY2h1bmtfMyA9IGxpc3QoRXF1YWxUaW1lQ2h1bmtlcigzLCAzKSh0ZXN0cykpCisKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbHModGVzdHNbOjEwXSwgY2h1bmtfMSkKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbHModGVzdHNbMTA6MjBdLCBjaHVua18yKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFscyh0ZXN0c1syMDpdLCBjaHVua18zKQorCisgICAgZGVmIHRlc3RfaW5jbHVkZV9hbGxfMShz
ZWxmKToKKyAgICAgICAgdGVzdHMgPSBtYWtlX21vY2tfbWFuaWZlc3QoKCJ0ZXN0IiwgImEiLCA1
KSwgKCJ0ZXN0IiwgImEvYiIsIDUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoInRlc3QiLCAiYyIsIDEwKSwgKCJ0ZXN0IiwgImQiLCAxMCkpCisKKyAgICAgICAgY2h1bmtf
MSA9IGxpc3QoRXF1YWxUaW1lQ2h1bmtlcigzLCAxKSh0ZXN0cykpCisgICAgICAgIGNodW5rXzIg
PSBsaXN0KEVxdWFsVGltZUNodW5rZXIoMywgMikodGVzdHMpKQorICAgICAgICBjaHVua18zID0g
bGlzdChFcXVhbFRpbWVDaHVua2VyKDMsIDMpKHRlc3RzKSkKKworICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFscyh0ZXN0c1s6MTBdLCBjaHVua18xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0
ZXN0c1sxMDoyMF0sIGNodW5rXzIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHRlc3RzWzIw
Ol0sIGNodW5rXzMpCisKKyAgICBkZWYgdGVzdF9sb25nKHNlbGYpOgorICAgICAgICB0ZXN0cyA9
IG1ha2VfbW9ja19tYW5pZmVzdCgoInRlc3QiLCAiYSIsIDEwMCksICgidGVzdCIsICJhL2IiLCAx
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJ0ZXN0IiwgImMiLCAxKSkK
KworICAgICAgICBjaHVua18xID0gbGlzdChFcXVhbFRpbWVDaHVua2VyKDMsIDEpKHRlc3RzKSkK
KyAgICAgICAgY2h1bmtfMiA9IGxpc3QoRXF1YWxUaW1lQ2h1bmtlcigzLCAyKSh0ZXN0cykpCisg
ICAgICAgIGNodW5rXzMgPSBsaXN0KEVxdWFsVGltZUNodW5rZXIoMywgMykodGVzdHMpKQorCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHRlc3RzWzoxMDBdLCBjaHVua18xKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFscyh0ZXN0c1sxMDA6MTAxXSwgY2h1bmtfMikKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbHModGVzdHNbMTAxOjEwMl0sIGNodW5rXzMpCisKKyAgICBkZWYgdGVzdF9sb25n
XzEoc2VsZik6CisgICAgICAgIHRlc3RzID0gbWFrZV9tb2NrX21hbmlmZXN0KCgidGVzdCIsICJh
IiwgMSksICgidGVzdCIsICJhL2IiLCAxMDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoInRlc3QiLCAiYyIsIDEpKQorCisgICAgICAgIGNodW5rXzEgPSBsaXN0KEVxdWFs
VGltZUNodW5rZXIoMywgMSkodGVzdHMpKQorICAgICAgICBjaHVua18yID0gbGlzdChFcXVhbFRp
bWVDaHVua2VyKDMsIDIpKHRlc3RzKSkKKyAgICAgICAgY2h1bmtfMyA9IGxpc3QoRXF1YWxUaW1l
Q2h1bmtlcigzLCAzKSh0ZXN0cykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModGVzdHNb
OjFdLCBjaHVua18xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0ZXN0c1sxOjEwMV0sIGNo
dW5rXzIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHRlc3RzWzEwMToxMDJdLCBjaHVua18z
KQorCisgICAgZGVmIHRlc3RfdG9vX2Zld19kaXJzKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYu
YXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgdGVzdHMgPSBtYWtlX21vY2tf
bWFuaWZlc3QoKCJ0ZXN0IiwgImEiLCAxKSwgKCJ0ZXN0IiwgImEvYiIsIDEwMCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoInRlc3QiLCAiYyIsIDEpKQorICAgICAg
ICAgICAgbGlzdChFcXVhbFRpbWVDaHVua2VyKDQsIDEpKHRlc3RzKSkKKworCitpZiBfX25hbWVf
XyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvV2ViRHJp
dmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvdGVzdHMvdGVz
dF9ob3N0cy5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIv
d3B0cnVubmVyL3Rlc3RzL3Rlc3RfaG9zdHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLjgwOGI4MTYwNmFlCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVz
dHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvdGVzdHMvdGVzdF9ob3N0
cy5weQpAQCAtMCwwICsxLDU2IEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzeXMKK2Zyb20g
b3MucGF0aCBpbXBvcnQgam9pbiwgZGlybmFtZQorZnJvbSBjU3RyaW5nSU8gaW1wb3J0IFN0cmlu
Z0lPCisKK3N5cy5wYXRoLmluc2VydCgwLCBqb2luKGRpcm5hbWUoX19maWxlX18pLCAiLi4iLCAi
Li4iKSkKKworZnJvbSB3cHRydW5uZXIgaW1wb3J0IGhvc3RzCisKKworY2xhc3MgSG9zdHNUZXN0
KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgZG9fdGVzdChzZWxmLCBpbnB1dCwgZXhwZWN0
ZWQpOgorICAgICAgICBob3N0X2ZpbGUgPSBob3N0cy5Ib3N0c0ZpbGUuZnJvbV9maWxlKFN0cmlu
Z0lPKGlucHV0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoaG9zdF9maWxlLnRvX3N0cmlu
ZygpLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3NpbXBsZShzZWxmKToKKyAgICAgICAgc2Vs
Zi5kb190ZXN0KCIiIjEyNy4wLjAuMSAgICBcdGxvY2FsaG9zdCAgYWxpYXMgIyBjb21tZW50Cisj
IEFub3RoZXIgY29tbWVudCIiIiwKKyAgICAgICAgICAgICAgICAgICAgICIiIjEyNy4wLjAuMSBs
b2NhbGhvc3QgYWxpYXMgIyBjb21tZW50CisjIEFub3RoZXIgY29tbWVudAorIiIiKQorCisgICAg
ZGVmIHRlc3RfYmxhbmtfbGluZXMoc2VsZik6CisgICAgICAgIHNlbGYuZG9fdGVzdCgiIiIxMjcu
MC4wLjEgICAgXHRsb2NhbGhvc3QgIGFsaWFzICMgY29tbWVudAorCitccgorICAgIFx0CisjIEFu
b3RoZXIgY29tbWVudCIiIiwKKyAgICAgICAgICAgICAgICAgICAgICIiIjEyNy4wLjAuMSBsb2Nh
bGhvc3QgYWxpYXMgIyBjb21tZW50CisjIEFub3RoZXIgY29tbWVudAorIiIiKQorCisgICAgZGVm
IHRlc3Rfd2hpdGVzcGFjZShzZWxmKToKKyAgICAgICAgc2VsZi5kb190ZXN0KCIiIiAgICBcdDEy
Ny4wLjAuMSAgICBcdGxvY2FsaG9zdCAgYWxpYXMgIyBjb21tZW50ICAgICBccgorICAgIFx0IyBB
bm90aGVyIGNvbW1lbnQiIiIsCisgICAgICAgICAgICAgICAgICAgICAiIiIxMjcuMC4wLjEgbG9j
YWxob3N0IGFsaWFzICMgY29tbWVudAorIyBBbm90aGVyIGNvbW1lbnQKKyIiIikKKworICAgIGRl
ZiB0ZXN0X2FsaWdubWVudChzZWxmKToKKyAgICAgICAgc2VsZi5kb190ZXN0KCIiIjEyNy4wLjAu
MSAgICBcdGxvY2FsaG9zdCAgYWxpYXMKKzE5Mi4xNjguMS4xIGFub3RoZXJfaG9zdCAgICBhbm90
aGVyX2FsaWFzCisiIiIsIiIiMTI3LjAuMC4xICAgbG9jYWxob3N0ICAgIGFsaWFzCisxOTIuMTY4
LjEuMSBhbm90aGVyX2hvc3QgYW5vdGhlcl9hbGlhcworIiIiCispCisKKyAgICBkZWYgdGVzdF9t
dWx0aXBsZV9zYW1lX25hbWUoc2VsZik6CisgICAgICAgICMgVGhlIHNlbWFudGljcyBhcmUgdGhh
dCB3ZSBvdmVyd3JpdGUgZWFybGllciBlbnRyaWVzIHdpdGggdGhlIHNhbWUgbmFtZQorICAgICAg
ICBzZWxmLmRvX3Rlc3QoIiIiMTI3LjAuMC4xICAgIFx0bG9jYWxob3N0ICBhbGlhcworMTkyLjE2
OC4xLjEgbG9jYWxob3N0ICAgIGFub3RoZXJfYWxpYXMiIiIsIiIiMTkyLjE2OC4xLjEgbG9jYWxo
b3N0IGFub3RoZXJfYWxpYXMKKyIiIgorKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgor
ICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQv
dzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvdGVzdHMvdGVzdF90ZXN0bG9hZGVyLnB5IGIv
V2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvdGVz
dHMvdGVzdF90ZXN0bG9hZGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi41NTZiMmI3ZjNmYQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9y
dGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3Rlc3RzL3Rlc3RfdGVzdGxvYWRlci5w
eQpAQCAtMCwwICsxLDMwIEBACitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHVuaWNvZGVfbGl0ZXJh
bHMKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgdGVtcGZpbGUKKworc3lzLnBhdGgu
aW5zZXJ0KDAsIG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAiLi4iLCAi
Li4iKSkKKworZnJvbSBtb3psb2cgaW1wb3J0IHN0cnVjdHVyZWQKK2Zyb20gd3B0cnVubmVyLnRl
c3Rsb2FkZXIgaW1wb3J0IFRlc3RGaWx0ZXIgYXMgRmlsdGVyCitmcm9tIC50ZXN0X2NodW5rZXIg
aW1wb3J0IG1ha2VfbW9ja19tYW5pZmVzdAorCitzdHJ1Y3R1cmVkLnNldF9kZWZhdWx0X2xvZ2dl
cihzdHJ1Y3R1cmVkLnN0cnVjdHVyZWRsb2cuU3RydWN0dXJlZExvZ2dlcigiVGVzdExvYWRlciIp
KQorCitpbmNsdWRlX2luaSA9ICIiIlwKK3NraXA6IHRydWUKK1t0ZXN0X1x1NTNGMF0KKyAgc2tp
cDogZmFsc2UKKyIiIgorCisKK2RlZiB0ZXN0X2ZpbHRlcl91bmljb2RlKCk6CisgICAgdGVzdHMg
PSBtYWtlX21vY2tfbWFuaWZlc3QoKCJ0ZXN0IiwgImEiLCAxMCksICgidGVzdCIsICJhL2IiLCAx
MCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJ0ZXN0IiwgImMiLCAxMCkpCisK
KyAgICB3aXRoIHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgid2IiLCBzdWZmaXg9Ii5pbmki
KSBhcyBmOgorICAgICAgICBmLndyaXRlKGluY2x1ZGVfaW5pLmVuY29kZSgndXRmLTgnKSkKKyAg
ICAgICAgZi5mbHVzaCgpCisKKyAgICAgICAgRmlsdGVyKG1hbmlmZXN0X3BhdGg9Zi5uYW1lLCB0
ZXN0X21hbmlmZXN0cz10ZXN0cykKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVk
L3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3Rlc3RzL3Rlc3RfdXBkYXRlLnB5IGIvV2Vi
RHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvdGVzdHMv
dGVzdF91cGRhdGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmU1
ZWI0Y2Y0OWM3Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNj
L3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvdGVzdHMvdGVzdF91cGRhdGUucHkKQEAgLTAsMCAr
MSwzMjggQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IFN0cmluZ0lPCisKK2ltcG9ydCBweXRl
c3QKKworZnJvbSAuLiBpbXBvcnQgbWV0YWRhdGEsIG1hbmlmZXN0dXBkYXRlCitmcm9tIG1vemxv
ZyBpbXBvcnQgc3RydWN0dXJlZGxvZywgaGFuZGxlcnMsIGZvcm1hdHRlcnMKKworCitjbGFzcyBU
ZXN0RXhwZWN0ZWRVcGRhdGVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgY3JlYXRlX21h
bmlmZXN0KHNlbGYsIGRhdGEsIHRlc3RfcGF0aD0icGF0aC90by90ZXN0LmluaSIpOgorICAgICAg
ICBmID0gU3RyaW5nSU8uU3RyaW5nSU8oZGF0YSkKKyAgICAgICAgcmV0dXJuIG1hbmlmZXN0dXBk
YXRlLmNvbXBpbGUoZiwgdGVzdF9wYXRoKQorCisgICAgZGVmIGNyZWF0ZV91cGRhdGVyKHNlbGYs
IGRhdGEsICoqa3dhcmdzKToKKyAgICAgICAgZXhwZWN0ZWRfdHJlZSA9IHt9CisgICAgICAgIGlk
X3BhdGhfbWFwID0ge30KKyAgICAgICAgZm9yIHRlc3RfcGF0aCwgdGVzdF9pZHMsIG1hbmlmZXN0
X3N0ciBpbiBkYXRhOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0ZXN0X2lkcywgKHN0ciwg
dW5pY29kZSkpOgorICAgICAgICAgICAgICAgIHRlc3RfaWRzID0gW3Rlc3RfaWRzXQorICAgICAg
ICAgICAgZXhwZWN0ZWRfdHJlZVt0ZXN0X3BhdGhdID0gc2VsZi5jcmVhdGVfbWFuaWZlc3QobWFu
aWZlc3Rfc3RyLCB0ZXN0X3BhdGgpCisgICAgICAgICAgICBmb3IgdGVzdF9pZCBpbiB0ZXN0X2lk
czoKKyAgICAgICAgICAgICAgICBpZF9wYXRoX21hcFt0ZXN0X2lkXSA9IHRlc3RfcGF0aAorCisg
ICAgICAgIHJldHVybiBtZXRhZGF0YS5FeHBlY3RlZFVwZGF0ZXIoZXhwZWN0ZWRfdHJlZSwgaWRf
cGF0aF9tYXAsICoqa3dhcmdzKQorCisgICAgZGVmIGNyZWF0ZV9sb2coc2VsZiwgKmFyZ3MsICoq
a3dhcmdzKToKKyAgICAgICAgbG9nZ2VyID0gc3RydWN0dXJlZGxvZy5TdHJ1Y3R1cmVkTG9nZ2Vy
KCJleHBlY3RlZF90ZXN0IikKKyAgICAgICAgZGF0YSA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKKyAg
ICAgICAgaGFuZGxlciA9IGhhbmRsZXJzLlN0cmVhbUhhbmRsZXIoZGF0YSwgZm9ybWF0dGVycy5K
U09ORm9ybWF0dGVyKCkpCisgICAgICAgIGxvZ2dlci5hZGRfaGFuZGxlcihoYW5kbGVyKQorCisg
ICAgICAgIGxvZ19lbnRyaWVzID0gKFsoInN1aXRlX3N0YXJ0IiwgeyJ0ZXN0cyI6IFtdLCAicnVu
X2luZm8iOiBrd2FyZ3MuZ2V0KCJydW5faW5mbyIsIHt9KX0pXSArCisgICAgICAgICAgICAgICAg
ICAgICAgIGxpc3QoYXJncykgKworICAgICAgICAgICAgICAgICAgICAgICBbKCJzdWl0ZV9lbmQi
LCB7fSldKQorCisgICAgICAgIGZvciBpdGVtIGluIGxvZ19lbnRyaWVzOgorICAgICAgICAgICAg
YWN0aW9uLCBrd2FyZ3MgPSBpdGVtCisgICAgICAgICAgICBnZXRhdHRyKGxvZ2dlciwgYWN0aW9u
KSgqKmt3YXJncykKKyAgICAgICAgbG9nZ2VyLnJlbW92ZV9oYW5kbGVyKGhhbmRsZXIpCisgICAg
ICAgIGRhdGEuc2VlaygwKQorICAgICAgICByZXR1cm4gZGF0YQorCisKKyAgICBkZWYgY29hbGVz
Y2VfcmVzdWx0cyhzZWxmLCB0cmVlcyk6CisgICAgICAgIGZvciB0cmVlIGluIHRyZWVzOgorICAg
ICAgICAgICAgZm9yIHRlc3QgaW4gdHJlZS5pdGVyY2hpbGRyZW4oKToKKyAgICAgICAgICAgICAg
ICBmb3Igc3VidGVzdCBpbiB0ZXN0Lml0ZXJjaGlsZHJlbigpOgorICAgICAgICAgICAgICAgICAg
ICBzdWJ0ZXN0LmNvYWxlc2NlX2V4cGVjdGVkKCkKKyAgICAgICAgICAgICAgICB0ZXN0LmNvYWxl
c2NlX2V4cGVjdGVkKCkKKworICAgIEBweXRlc3QubWFyay54ZmFpbAorICAgIGRlZiB0ZXN0X3Vw
ZGF0ZV8wKHNlbGYpOgorICAgICAgICBwcmV2X2RhdGEgPSBbKCJwYXRoL3RvL3Rlc3QuaHRtLmlu
aSIsIFsiL3BhdGgvdG8vdGVzdC5odG0iXSwgIiIiW3Rlc3QuaHRtXQorICB0eXBlOiB0ZXN0aGFy
bmVzcworICBbdGVzdDFdCisgICAgZXhwZWN0ZWQ6IEZBSUwiIiIpXQorCisgICAgICAgIG5ld19k
YXRhID0gc2VsZi5jcmVhdGVfbG9nKCgidGVzdF9zdGFydCIsIHsidGVzdCI6ICIvcGF0aC90by90
ZXN0Lmh0bSJ9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJ0ZXN0X3N0
YXR1cyIsIHsidGVzdCI6ICIvcGF0aC90by90ZXN0Lmh0bSIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YnRlc3QiOiAidGVzdDEiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdGF0dXMi
OiAiUEFTUyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImV4cGVjdGVkIjogIkZBSUwifSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICgidGVzdF9lbmQiLCB7InRlc3QiOiAiL3BhdGgvdG8vdGVzdC5odG0iLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdGF0dXMiOiAiT0si
fSkpCisgICAgICAgIHVwZGF0ZXIgPSBzZWxmLmNyZWF0ZV91cGRhdGVyKHByZXZfZGF0YSkKKyAg
ICAgICAgdXBkYXRlci51cGRhdGVfZnJvbV9sb2cobmV3X2RhdGEpCisKKyAgICAgICAgbmV3X21h
bmlmZXN0ID0gdXBkYXRlci5leHBlY3RlZF90cmVlWyJwYXRoL3RvL3Rlc3QuaHRtLmluaSJdCisg
ICAgICAgIHNlbGYuY29hbGVzY2VfcmVzdWx0cyhbbmV3X21hbmlmZXN0XSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRUcnVlKG5ld19tYW5pZmVzdC5pc19lbXB0eSkKKworICAgIEBweXRlc3QubWFyay54
ZmFpbAorICAgIGRlZiB0ZXN0X3VwZGF0ZV8xKHNlbGYpOgorICAgICAgICB0ZXN0X2lkID0gIi9w
YXRoL3RvL3Rlc3QuaHRtIgorICAgICAgICBwcmV2X2RhdGEgPSBbKCJwYXRoL3RvL3Rlc3QuaHRt
LmluaSIsIFt0ZXN0X2lkXSwgIiIiW3Rlc3QuaHRtXQorICB0eXBlOiB0ZXN0aGFybmVzcworICBb
dGVzdDFdCisgICAgZXhwZWN0ZWQ6IEVSUk9SIiIiKV0KKworICAgICAgICBuZXdfZGF0YSA9IHNl
bGYuY3JlYXRlX2xvZygoInRlc3Rfc3RhcnQiLCB7InRlc3QiOiB0ZXN0X2lkfSksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICgidGVzdF9zdGF0dXMiLCB7InRlc3QiOiB0ZXN0
X2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJzdWJ0ZXN0IjogInRlc3QxIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAic3RhdHVzIjogIkZBSUwiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCI6ICJFUlJPUiJ9KSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJ0ZXN0X2VuZCIsIHsidGVzdCI6IHRl
c3RfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
InN0YXR1cyI6ICJPSyJ9KSkKKyAgICAgICAgdXBkYXRlciA9IHNlbGYuY3JlYXRlX3VwZGF0ZXIo
cHJldl9kYXRhKQorICAgICAgICB1cGRhdGVyLnVwZGF0ZV9mcm9tX2xvZyhuZXdfZGF0YSkKKwor
ICAgICAgICBuZXdfbWFuaWZlc3QgPSB1cGRhdGVyLmV4cGVjdGVkX3RyZWVbInBhdGgvdG8vdGVz
dC5odG0uaW5pIl0KKyAgICAgICAgc2VsZi5jb2FsZXNjZV9yZXN1bHRzKFtuZXdfbWFuaWZlc3Rd
KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG5ld19tYW5pZmVzdC5pc19lbXB0eSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbHMobmV3X21hbmlmZXN0LmdldF90ZXN0KHRlc3RfaWQpLmNoaWxk
cmVuWzBdLmdldCgiZXhwZWN0ZWQiKSwgIkZBSUwiKQorCisgICAgQHB5dGVzdC5tYXJrLnhmYWls
CisgICAgZGVmIHRlc3RfbmV3X3N1YnRlc3Qoc2VsZik6CisgICAgICAgIHRlc3RfaWQgPSAiL3Bh
dGgvdG8vdGVzdC5odG0iCisgICAgICAgIHByZXZfZGF0YSA9IFsoInBhdGgvdG8vdGVzdC5odG0u
aW5pIiwgW3Rlc3RfaWRdLCAiIiJbdGVzdC5odG1dCisgIHR5cGU6IHRlc3RoYXJuZXNzCisgIFt0
ZXN0MV0KKyAgICBleHBlY3RlZDogRkFJTCIiIildCisKKyAgICAgICAgbmV3X2RhdGEgPSBzZWxm
LmNyZWF0ZV9sb2coKCJ0ZXN0X3N0YXJ0IiwgeyJ0ZXN0IjogdGVzdF9pZH0pLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoInRlc3Rfc3RhdHVzIiwgeyJ0ZXN0IjogdGVzdF9p
ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
c3VidGVzdCI6ICJ0ZXN0MSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgInN0YXR1cyI6ICJGQUlMIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQiOiAiRkFJTCJ9KSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJ0ZXN0X3N0YXR1cyIsIHsidGVzdCI6IHRl
c3RfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgInN1YnRlc3QiOiAidGVzdDIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJzdGF0dXMiOiAiRkFJTCIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIjogIlBBU1MifSksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgidGVzdF9lbmQiLCB7InRlc3QiOiB0
ZXN0X2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJzdGF0dXMiOiAiT0sifSkpCisgICAgICAgIHVwZGF0ZXIgPSBzZWxmLmNyZWF0ZV91cGRhdGVy
KHByZXZfZGF0YSkKKyAgICAgICAgdXBkYXRlci51cGRhdGVfZnJvbV9sb2cobmV3X2RhdGEpCisK
KyAgICAgICAgbmV3X21hbmlmZXN0ID0gdXBkYXRlci5leHBlY3RlZF90cmVlWyJwYXRoL3RvL3Rl
c3QuaHRtLmluaSJdCisgICAgICAgIHNlbGYuY29hbGVzY2VfcmVzdWx0cyhbbmV3X21hbmlmZXN0
XSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShuZXdfbWFuaWZlc3QuaXNfZW1wdHkpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG5ld19tYW5pZmVzdC5nZXRfdGVzdCh0ZXN0X2lkKS5jaGls
ZHJlblswXS5nZXQoImV4cGVjdGVkIiksICJGQUlMIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bHMobmV3X21hbmlmZXN0LmdldF90ZXN0KHRlc3RfaWQpLmNoaWxkcmVuWzFdLmdldCgiZXhwZWN0
ZWQiKSwgIkZBSUwiKQorCisgICAgQHB5dGVzdC5tYXJrLnhmYWlsCisgICAgZGVmIHRlc3RfdXBk
YXRlX211bHRpcGxlXzAoc2VsZik6CisgICAgICAgIHRlc3RfaWQgPSAiL3BhdGgvdG8vdGVzdC5o
dG0iCisgICAgICAgIHByZXZfZGF0YSA9IFsoInBhdGgvdG8vdGVzdC5odG0uaW5pIiwgW3Rlc3Rf
aWRdLCAiIiJbdGVzdC5odG1dCisgIHR5cGU6IHRlc3RoYXJuZXNzCisgIFt0ZXN0MV0KKyAgICBl
eHBlY3RlZDogRkFJTCIiIildCisKKyAgICAgICAgbmV3X2RhdGFfMCA9IHNlbGYuY3JlYXRlX2xv
ZygoInRlc3Rfc3RhcnQiLCB7InRlc3QiOiB0ZXN0X2lkfSksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKCJ0ZXN0X3N0YXR1cyIsIHsidGVzdCI6IHRlc3RfaWQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3VidGVz
dCI6ICJ0ZXN0MSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAic3RhdHVzIjogIkZBSUwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIjogIkZBSUwifSksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJ0ZXN0X2VuZCIsIHsidGVzdCI6IHRlc3Rf
aWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
c3RhdHVzIjogIk9LIn0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1
bl9pbmZvPXsiZGVidWciOiBGYWxzZSwgIm9zIjogIm9zeCJ9KQorCisgICAgICAgIG5ld19kYXRh
XzEgPSBzZWxmLmNyZWF0ZV9sb2coKCJ0ZXN0X3N0YXJ0IiwgeyJ0ZXN0IjogdGVzdF9pZH0pLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgidGVzdF9zdGF0dXMiLCB7InRl
c3QiOiB0ZXN0X2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgInN1YnRlc3QiOiAidGVzdDEiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0YXR1cyI6ICJUSU1FT1VUIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3Rl
ZCI6ICJGQUlMIn0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgidGVz
dF9lbmQiLCB7InRlc3QiOiB0ZXN0X2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgInN0YXR1cyI6ICJPSyJ9KSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBydW5faW5mbz17ImRlYnVnIjogRmFsc2UsICJvcyI6ICJsaW51
eCJ9KQorICAgICAgICB1cGRhdGVyID0gc2VsZi5jcmVhdGVfdXBkYXRlcihwcmV2X2RhdGEpCisK
KyAgICAgICAgdXBkYXRlci51cGRhdGVfZnJvbV9sb2cobmV3X2RhdGFfMCkKKyAgICAgICAgdXBk
YXRlci51cGRhdGVfZnJvbV9sb2cobmV3X2RhdGFfMSkKKworICAgICAgICBuZXdfbWFuaWZlc3Qg
PSB1cGRhdGVyLmV4cGVjdGVkX3RyZWVbInBhdGgvdG8vdGVzdC5odG0uaW5pIl0KKworICAgICAg
ICBzZWxmLmNvYWxlc2NlX3Jlc3VsdHMoW25ld19tYW5pZmVzdF0pCisKKyAgICAgICAgc2VsZi5h
c3NlcnRGYWxzZShuZXdfbWFuaWZlc3QuaXNfZW1wdHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWxzKG5ld19tYW5pZmVzdC5nZXRfdGVzdCh0ZXN0X2lkKS5jaGlsZHJlblswXS5nZXQoCisgICAg
ICAgICAgICAiZXhwZWN0ZWQiLCB7ImRlYnVnIjogRmFsc2UsICJvcyI6ICJvc3gifSksICJGQUlM
IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobmV3X21hbmlmZXN0LmdldF90ZXN0KHRlc3Rf
aWQpLmNoaWxkcmVuWzBdLmdldCgKKyAgICAgICAgICAgICJleHBlY3RlZCIsIHsiZGVidWciOiBG
YWxzZSwgIm9zIjogImxpbnV4In0pLCAiVElNRU9VVCIpCisKKyAgICBAcHl0ZXN0Lm1hcmsueGZh
aWwKKyAgICBkZWYgdGVzdF91cGRhdGVfbXVsdGlwbGVfMShzZWxmKToKKyAgICAgICAgdGVzdF9p
ZCA9ICIvcGF0aC90by90ZXN0Lmh0bSIKKyAgICAgICAgcHJldl9kYXRhID0gWygicGF0aC90by90
ZXN0Lmh0bS5pbmkiLCBbdGVzdF9pZF0sICIiIlt0ZXN0Lmh0bV0KKyAgdHlwZTogdGVzdGhhcm5l
c3MKKyAgW3Rlc3QxXQorICAgIGV4cGVjdGVkOiBGQUlMIiIiKV0KKworICAgICAgICBuZXdfZGF0
YV8wID0gc2VsZi5jcmVhdGVfbG9nKCgidGVzdF9zdGFydCIsIHsidGVzdCI6IHRlc3RfaWR9KSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoInRlc3Rfc3RhdHVzIiwgeyJ0
ZXN0IjogdGVzdF9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJzdWJ0ZXN0IjogInRlc3QxIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdGF0dXMiOiAiRkFJTCIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQi
OiAiRkFJTCJ9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoInRlc3Rf
ZW5kIiwgeyJ0ZXN0IjogdGVzdF9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJzdGF0dXMiOiAiT0sifSksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcnVuX2luZm89eyJkZWJ1ZyI6IEZhbHNlLCAib3MiOiAib3N4In0p
CisKKyAgICAgICAgbmV3X2RhdGFfMSA9IHNlbGYuY3JlYXRlX2xvZygoInRlc3Rfc3RhcnQiLCB7
InRlc3QiOiB0ZXN0X2lkfSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KCJ0ZXN0X3N0YXR1cyIsIHsidGVzdCI6IHRlc3RfaWQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3VidGVzdCI6ICJ0ZXN0MSIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3RhdHVz
IjogIlRJTUVPVVQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgImV4cGVjdGVkIjogIkZBSUwifSksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKCJ0ZXN0X2VuZCIsIHsidGVzdCI6IHRlc3RfaWQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3RhdHVzIjogIk9LIn0p
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bl9pbmZvPXsiZGVidWci
OiBGYWxzZSwgIm9zIjogImxpbnV4In0pCisgICAgICAgIHVwZGF0ZXIgPSBzZWxmLmNyZWF0ZV91
cGRhdGVyKHByZXZfZGF0YSkKKworICAgICAgICB1cGRhdGVyLnVwZGF0ZV9mcm9tX2xvZyhuZXdf
ZGF0YV8wKQorICAgICAgICB1cGRhdGVyLnVwZGF0ZV9mcm9tX2xvZyhuZXdfZGF0YV8xKQorCisg
ICAgICAgIG5ld19tYW5pZmVzdCA9IHVwZGF0ZXIuZXhwZWN0ZWRfdHJlZVsicGF0aC90by90ZXN0
Lmh0bS5pbmkiXQorCisgICAgICAgIHNlbGYuY29hbGVzY2VfcmVzdWx0cyhbbmV3X21hbmlmZXN0
XSkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG5ld19tYW5pZmVzdC5pc19lbXB0eSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobmV3X21hbmlmZXN0LmdldF90ZXN0KHRlc3RfaWQpLmNo
aWxkcmVuWzBdLmdldCgKKyAgICAgICAgICAgICJleHBlY3RlZCIsIHsiZGVidWciOiBGYWxzZSwg
Im9zIjogIm9zeCJ9KSwgIkZBSUwiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhuZXdfbWFu
aWZlc3QuZ2V0X3Rlc3QodGVzdF9pZCkuY2hpbGRyZW5bMF0uZ2V0KAorICAgICAgICAgICAgImV4
cGVjdGVkIiwgeyJkZWJ1ZyI6IEZhbHNlLCAib3MiOiAibGludXgifSksICJUSU1FT1VUIikKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobmV3X21hbmlmZXN0LmdldF90ZXN0KHRlc3RfaWQpLmNo
aWxkcmVuWzBdLmdldCgKKyAgICAgICAgICAgICJleHBlY3RlZCIsIHsiZGVidWciOiBGYWxzZSwg
Im9zIjogIndpbmRvd3MifSksICJGQUlMIikKKworICAgIEBweXRlc3QubWFyay54ZmFpbAorICAg
IGRlZiB0ZXN0X3VwZGF0ZV9tdWx0aXBsZV8yKHNlbGYpOgorICAgICAgICB0ZXN0X2lkID0gIi9w
YXRoL3RvL3Rlc3QuaHRtIgorICAgICAgICBwcmV2X2RhdGEgPSBbKCJwYXRoL3RvL3Rlc3QuaHRt
LmluaSIsIFt0ZXN0X2lkXSwgIiIiW3Rlc3QuaHRtXQorICB0eXBlOiB0ZXN0aGFybmVzcworICBb
dGVzdDFdCisgICAgZXhwZWN0ZWQ6IEZBSUwiIiIpXQorCisgICAgICAgIG5ld19kYXRhXzAgPSBz
ZWxmLmNyZWF0ZV9sb2coKCJ0ZXN0X3N0YXJ0IiwgeyJ0ZXN0IjogdGVzdF9pZH0pLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgidGVzdF9zdGF0dXMiLCB7InRlc3QiOiB0
ZXN0X2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgInN1YnRlc3QiOiAidGVzdDEiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgInN0YXR1cyI6ICJGQUlMIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCI6ICJGQUlM
In0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgidGVzdF9lbmQiLCB7
InRlc3QiOiB0ZXN0X2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgInN0YXR1cyI6ICJPSyJ9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBydW5faW5mbz17ImRlYnVnIjogRmFsc2UsICJvcyI6ICJvc3gifSkKKworICAg
ICAgICBuZXdfZGF0YV8xID0gc2VsZi5jcmVhdGVfbG9nKCgidGVzdF9zdGFydCIsIHsidGVzdCI6
IHRlc3RfaWR9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoInRlc3Rf
c3RhdHVzIiwgeyJ0ZXN0IjogdGVzdF9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJ0ZXN0IjogInRlc3QxIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdGF0dXMiOiAiVElN
RU9VVCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiZXhwZWN0ZWQiOiAiRkFJTCJ9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoInRlc3RfZW5kIiwgeyJ0ZXN0IjogdGVzdF9pZCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdGF0dXMiOiAiT0sifSksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuX2luZm89eyJkZWJ1ZyI6IFRydWUs
ICJvcyI6ICJvc3gifSkKKyAgICAgICAgdXBkYXRlciA9IHNlbGYuY3JlYXRlX3VwZGF0ZXIocHJl
dl9kYXRhKQorCisgICAgICAgIHVwZGF0ZXIudXBkYXRlX2Zyb21fbG9nKG5ld19kYXRhXzApCisg
ICAgICAgIHVwZGF0ZXIudXBkYXRlX2Zyb21fbG9nKG5ld19kYXRhXzEpCisKKyAgICAgICAgbmV3
X21hbmlmZXN0ID0gdXBkYXRlci5leHBlY3RlZF90cmVlWyJwYXRoL3RvL3Rlc3QuaHRtLmluaSJd
CisKKyAgICAgICAgc2VsZi5jb2FsZXNjZV9yZXN1bHRzKFtuZXdfbWFuaWZlc3RdKQorCisgICAg
ICAgIHNlbGYuYXNzZXJ0RmFsc2UobmV3X21hbmlmZXN0LmlzX2VtcHR5KQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFscyhuZXdfbWFuaWZlc3QuZ2V0X3Rlc3QodGVzdF9pZCkuY2hpbGRyZW5bMF0u
Z2V0KAorICAgICAgICAgICAgImV4cGVjdGVkIiwgeyJkZWJ1ZyI6IEZhbHNlLCAib3MiOiAib3N4
In0pLCAiRkFJTCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG5ld19tYW5pZmVzdC5nZXRf
dGVzdCh0ZXN0X2lkKS5jaGlsZHJlblswXS5nZXQoCisgICAgICAgICAgICAiZXhwZWN0ZWQiLCB7
ImRlYnVnIjogVHJ1ZSwgIm9zIjogIm9zeCJ9KSwgIlRJTUVPVVQiKQorCisgICAgQHB5dGVzdC5t
YXJrLnhmYWlsCisgICAgZGVmIHRlc3RfdXBkYXRlX211bHRpcGxlXzMoc2VsZik6CisgICAgICAg
IHRlc3RfaWQgPSAiL3BhdGgvdG8vdGVzdC5odG0iCisgICAgICAgIHByZXZfZGF0YSA9IFsoInBh
dGgvdG8vdGVzdC5odG0uaW5pIiwgW3Rlc3RfaWRdLCAiIiJbdGVzdC5odG1dCisgIHR5cGU6IHRl
c3RoYXJuZXNzCisgIFt0ZXN0MV0KKyAgICBleHBlY3RlZDoKKyAgICAgIGlmIGRlYnVnOiBGQUlM
CisgICAgICBpZiBub3QgZGVidWcgYW5kIG9zID09ICJvc3giOiBUSU1FT1VUIiIiKV0KKworICAg
ICAgICBuZXdfZGF0YV8wID0gc2VsZi5jcmVhdGVfbG9nKCgidGVzdF9zdGFydCIsIHsidGVzdCI6
IHRlc3RfaWR9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoInRlc3Rf
c3RhdHVzIiwgeyJ0ZXN0IjogdGVzdF9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJ0ZXN0IjogInRlc3QxIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdGF0dXMiOiAiRkFJ
TCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiZXhwZWN0ZWQiOiAiRkFJTCJ9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoInRlc3RfZW5kIiwgeyJ0ZXN0IjogdGVzdF9pZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdGF0dXMiOiAiT0sifSksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuX2luZm89eyJkZWJ1ZyI6IEZhbHNlLCAi
b3MiOiAib3N4In0pCisKKyAgICAgICAgbmV3X2RhdGFfMSA9IHNlbGYuY3JlYXRlX2xvZygoInRl
c3Rfc3RhcnQiLCB7InRlc3QiOiB0ZXN0X2lkfSksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKCJ0ZXN0X3N0YXR1cyIsIHsidGVzdCI6IHRlc3RfaWQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3VidGVzdCI6ICJ0
ZXN0MSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAic3RhdHVzIjogIlRJTUVPVVQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIjogIkZBSUwifSksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJ0ZXN0X2VuZCIsIHsidGVzdCI6IHRlc3RfaWQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3Rh
dHVzIjogIk9LIn0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bl9p
bmZvPXsiZGVidWciOiBUcnVlLCAib3MiOiAib3N4In0pCisgICAgICAgIHVwZGF0ZXIgPSBzZWxm
LmNyZWF0ZV91cGRhdGVyKHByZXZfZGF0YSkKKworICAgICAgICB1cGRhdGVyLnVwZGF0ZV9mcm9t
X2xvZyhuZXdfZGF0YV8wKQorICAgICAgICB1cGRhdGVyLnVwZGF0ZV9mcm9tX2xvZyhuZXdfZGF0
YV8xKQorCisgICAgICAgIG5ld19tYW5pZmVzdCA9IHVwZGF0ZXIuZXhwZWN0ZWRfdHJlZVsicGF0
aC90by90ZXN0Lmh0bS5pbmkiXQorCisgICAgICAgIHNlbGYuY29hbGVzY2VfcmVzdWx0cyhbbmV3
X21hbmlmZXN0XSkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG5ld19tYW5pZmVzdC5pc19l
bXB0eSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobmV3X21hbmlmZXN0LmdldF90ZXN0KHRl
c3RfaWQpLmNoaWxkcmVuWzBdLmdldCgKKyAgICAgICAgICAgICJleHBlY3RlZCIsIHsiZGVidWci
OiBGYWxzZSwgIm9zIjogIm9zeCJ9KSwgIkZBSUwiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
cyhuZXdfbWFuaWZlc3QuZ2V0X3Rlc3QodGVzdF9pZCkuY2hpbGRyZW5bMF0uZ2V0KAorICAgICAg
ICAgICAgImV4cGVjdGVkIiwgeyJkZWJ1ZyI6IFRydWUsICJvcyI6ICJvc3gifSksICJUSU1FT1VU
IikKKworICAgIEBweXRlc3QubWFyay54ZmFpbAorICAgIGRlZiB0ZXN0X3VwZGF0ZV9pZ25vcmVf
ZXhpc3Rpbmcoc2VsZik6CisgICAgICAgIHRlc3RfaWQgPSAiL3BhdGgvdG8vdGVzdC5odG0iCisg
ICAgICAgIHByZXZfZGF0YSA9IFsoInBhdGgvdG8vdGVzdC5odG0uaW5pIiwgW3Rlc3RfaWRdLCAi
IiJbdGVzdC5odG1dCisgIHR5cGU6IHRlc3RoYXJuZXNzCisgIFt0ZXN0MV0KKyAgICBleHBlY3Rl
ZDoKKyAgICAgIGlmIGRlYnVnOiBUSU1FT1VUCisgICAgICBpZiBub3QgZGVidWcgYW5kIG9zID09
ICJvc3giOiBOT1RSVU4iIiIpXQorCisgICAgICAgIG5ld19kYXRhXzAgPSBzZWxmLmNyZWF0ZV9s
b2coKCJ0ZXN0X3N0YXJ0IiwgeyJ0ZXN0IjogdGVzdF9pZH0pLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICgidGVzdF9zdGF0dXMiLCB7InRlc3QiOiB0ZXN0X2lkLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YnRl
c3QiOiAidGVzdDEiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgInN0YXR1cyI6ICJGQUlMIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCI6ICJQQVNTIn0pLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgidGVzdF9lbmQiLCB7InRlc3QiOiB0ZXN0
X2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
InN0YXR1cyI6ICJPSyJ9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
dW5faW5mbz17ImRlYnVnIjogRmFsc2UsICJvcyI6ICJsaW51eCJ9KQorCisgICAgICAgIG5ld19k
YXRhXzEgPSBzZWxmLmNyZWF0ZV9sb2coKCJ0ZXN0X3N0YXJ0IiwgeyJ0ZXN0IjogdGVzdF9pZH0p
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgidGVzdF9zdGF0dXMiLCB7
InRlc3QiOiB0ZXN0X2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgInN1YnRlc3QiOiAidGVzdDEiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0YXR1cyI6ICJGQUlMIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3Rl
ZCI6ICJQQVNTIn0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgidGVz
dF9lbmQiLCB7InRlc3QiOiB0ZXN0X2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgInN0YXR1cyI6ICJPSyJ9KSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBydW5faW5mbz17ImRlYnVnIjogVHJ1ZSwgIm9zIjogIndpbmRv
d3MifSkKKyAgICAgICAgdXBkYXRlciA9IHNlbGYuY3JlYXRlX3VwZGF0ZXIocHJldl9kYXRhLCBp
Z25vcmVfZXhpc3Rpbmc9VHJ1ZSkKKworICAgICAgICB1cGRhdGVyLnVwZGF0ZV9mcm9tX2xvZyhu
ZXdfZGF0YV8wKQorICAgICAgICB1cGRhdGVyLnVwZGF0ZV9mcm9tX2xvZyhuZXdfZGF0YV8xKQor
CisgICAgICAgIG5ld19tYW5pZmVzdCA9IHVwZGF0ZXIuZXhwZWN0ZWRfdHJlZVsicGF0aC90by90
ZXN0Lmh0bS5pbmkiXQorCisgICAgICAgIHNlbGYuY29hbGVzY2VfcmVzdWx0cyhbbmV3X21hbmlm
ZXN0XSkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG5ld19tYW5pZmVzdC5pc19lbXB0eSkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobmV3X21hbmlmZXN0LmdldF90ZXN0KHRlc3RfaWQp
LmNoaWxkcmVuWzBdLmdldCgKKyAgICAgICAgICAgICJleHBlY3RlZCIsIHsiZGVidWciOiBUcnVl
LCAib3MiOiAib3N4In0pLCAiRkFJTCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG5ld19t
YW5pZmVzdC5nZXRfdGVzdCh0ZXN0X2lkKS5jaGlsZHJlblswXS5nZXQoCisgICAgICAgICAgICAi
ZXhwZWN0ZWQiLCB7ImRlYnVnIjogRmFsc2UsICJvcyI6ICJvc3gifSksICJGQUlMIikKZGlmZiAt
LWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVu
bmVyL3VwZGF0ZS9fX2luaXRfXy5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29s
cy93cHRydW5uZXIvd3B0cnVubmVyL3VwZGF0ZS9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDk3Y2IzNGFkMGMKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci91cGRh
dGUvX19pbml0X18ucHkKQEAgLTAsMCArMSw0NyBAQAoraW1wb3J0IG9zCitpbXBvcnQgc3lzCisK
K2Zyb20gbW96bG9nLnN0cnVjdHVyZWQgaW1wb3J0IHN0cnVjdHVyZWRsb2csIGNvbW1hbmRsaW5l
CisKK2Zyb20gLi4gaW1wb3J0IHdwdGNvbW1hbmRsaW5lCisKK2Zyb20gdXBkYXRlIGltcG9ydCBX
UFRVcGRhdGUKKworZGVmIHJlbW92ZV9sb2dnaW5nX2FyZ3MoYXJncyk6CisgICAgIiIiVGFrZSBs
b2dnaW5nIGFyZ3Mgb3V0IG9mIHRoZSBkaWN0aW9uYXJ5IG9mIGNvbW1hbmQgbGluZSBhcmd1bWVu
dHMgc28KKyAgICB0aGV5IGFyZSBub3QgcGFzc2VkIGluIGFzIGt3YXJncyB0byB0aGUgdXBkYXRl
IGNvZGUuIFRoaXMgaXMgcGFydGljdWxhcmx5CisgICAgbmVjZXNzYXJ5IGhlcmUgYmVjYXVzZSB0
aGUgYXJndW1lbnRzIGFyZSBvZnRlbiBvZiB0eXBlIGZpbGUsIHdoaWNoIGNhbm5vdAorICAgIGJl
IHNlcmlhbGl6ZWQuCisKKyAgICA6cGFyYW0gYXJnczogRGljdGlvbmFyeSBvZiBjb21tYW5kIGxp
bmUgYXJndW1lbnRzLgorICAgICIiIgorICAgIGZvciBuYW1lIGluIGFyZ3Mua2V5cygpOgorICAg
ICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoImxvZ18iKToKKyAgICAgICAgICAgIGFyZ3MucG9wKG5h
bWUpCisKKworZGVmIHNldHVwX2xvZ2dpbmcoYXJncywgZGVmYXVsdHMpOgorICAgICIiIlVzZSB0
aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyB0byBzZXQgdXAgdGhlIGxvZ2dlci4KKworICAgIDpw
YXJhbSBhcmdzOiBEaWN0aW9uYXJ5IG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCisgICAgOnBh
cmFtIGRlZmF1bHRzOiBEaWN0aW9uYXJ5IG9mIHtmb3JtYXR0ZXJfbmFtZTogc3RyZWFtfSB0byB1
c2UgaWYKKyAgICAgICAgICAgICAgICAgICAgIG5vIGNvbW1hbmQgbGluZSBsb2dnaW5nIGlzIHNw
ZWNpZmllZCIiIgorICAgIGxvZ2dlciA9IGNvbW1hbmRsaW5lLnNldHVwX2xvZ2dpbmcoIndlYi1w
bGF0Zm9ybS10ZXN0cy11cGRhdGUiLCBhcmdzLCBkZWZhdWx0cykKKworICAgIHJlbW92ZV9sb2dn
aW5nX2FyZ3MoYXJncykKKworICAgIHJldHVybiBsb2dnZXIKKworCitkZWYgcnVuX3VwZGF0ZShs
b2dnZXIsICoqa3dhcmdzKToKKyAgICB1cGRhdGVyID0gV1BUVXBkYXRlKGxvZ2dlciwgKiprd2Fy
Z3MpCisgICAgcmV0dXJuIHVwZGF0ZXIucnVuKCkKKworCitkZWYgbWFpbigpOgorICAgIGFyZ3Mg
PSB3cHRjb21tYW5kbGluZS5wYXJzZV9hcmdzX3VwZGF0ZSgpCisgICAgbG9nZ2VyID0gc2V0dXBf
bG9nZ2luZyhhcmdzLCB7Im1hY2giOiBzeXMuc3Rkb3V0fSkKKyAgICBhc3NlcnQgc3RydWN0dXJl
ZGxvZy5nZXRfZGVmYXVsdF9sb2dnZXIoKSBpcyBub3QgTm9uZQorICAgIHN1Y2Nlc3MgPSBydW5f
dXBkYXRlKGxvZ2dlciwgKiphcmdzKQorICAgIHN5cy5leGl0KDAgaWYgc3VjY2VzcyBlbHNlIDEp
CisKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5u
ZXIvd3B0cnVubmVyL3VwZGF0ZS9iYXNlLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNj
L3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvdXBkYXRlL2Jhc2UucHkKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjU0NzgwOGU1MjkzCi0tLSAvZGV2L251bGwKKysrIGIv
V2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvdXBk
YXRlL2Jhc2UucHkKQEAgLTAsMCArMSw2NSBAQAorZXhpdF91bmNsZWFuID0gb2JqZWN0KCkKK2V4
aXRfY2xlYW4gPSBvYmplY3QoKQorCisKK2NsYXNzIFN0ZXAob2JqZWN0KToKKyAgICBwcm92aWRl
cyA9IFtdCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9nZ2VyKToKKyAgICAgICAgc2VsZi5s
b2dnZXIgPSBsb2dnZXIKKworICAgIGRlZiBydW4oc2VsZiwgc3RlcF9pbmRleCwgc3RhdGUpOgor
ICAgICAgICAiIiJCYXNlIGNsYXNzIGZvciBzdGF0ZS1jcmVhdGluZyBzdGVwcy4KKworICAgICAg
ICBXaGVuIGEgU3RlcCBpcyBydW4oKSB0aGUgY3VycmVudCBzdGF0ZSBpcyBjaGVja2VkIHRvIHNl
ZQorICAgICAgICBpZiB0aGUgc3RhdGUgZnJvbSB0aGlzIHN0ZXAgaGFzIGFscmVhZHkgYmVlbiBj
cmVhdGVkLiBJZiBpdAorICAgICAgICBoYXMgdGhlIHJlc3RvcmUoKSBtZXRob2QgaXMgaW52b2tl
ZC4gT3RoZXJ3aXNlIHRoZSBjcmVhdGUoKQorICAgICAgICBtZXRob2QgaXMgaW52b2tlZCB3aXRo
IHRoZSBzdGF0ZSBvYmplY3QuIFRoaXMgaXMgZXhwZWN0ZWQgdG8KKyAgICAgICAgYWRkIGl0ZW1z
IHdpdGggYWxsIHRoZSBrZXlzIGluIF9fY2xhc3NfXy5wcm92aWRlcyB0byB0aGUgc3RhdGUKKyAg
ICAgICAgb2JqZWN0LgorICAgICAgICAiIiIKKworICAgICAgICBuYW1lID0gc2VsZi5fX2NsYXNz
X18uX19uYW1lX18KKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzdG9yZWRfc3RlcCA9IHN0
YXRlLnN0ZXBzW3N0ZXBfaW5kZXhdCisgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAg
ICAgICAgc3RvcmVkX3N0ZXAgPSBOb25lCisKKyAgICAgICAgaWYgc3RvcmVkX3N0ZXAgPT0gbmFt
ZToKKyAgICAgICAgICAgIHNlbGYucmVzdG9yZShzdGF0ZSkKKyAgICAgICAgZWxpZiBzdG9yZWRf
c3RlcCBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5jcmVhdGUoc3RhdGUpCisgICAgICAgICAg
ICBhc3NlcnQgc2V0KHNlbGYucHJvdmlkZXMpLmlzc3Vic2V0KHNldChzdGF0ZS5rZXlzKCkpKQor
ICAgICAgICAgICAgc3RhdGUuc3RlcHMgPSBzdGF0ZS5zdGVwcyArIFtuYW1lXQorICAgICAgICBl
bHNlOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiRXhwZWN0ZWQgYSAlcyBzdGVwLCBn
b3QgYSAlcyBzdGVwIiAlIChuYW1lLCBzdG9yZWRfc3RlcCkpCisKKyAgICBkZWYgY3JlYXRlKHNl
bGYsIGRhdGEpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYg
cmVzdG9yZShzZWxmLCBzdGF0ZSk6CisgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJTdGVwICVz
IHVzaW5nIHN0b3JlZCBzdGF0ZSIgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sKSkKKyAgICAg
ICAgZm9yIGtleSBpbiBzZWxmLnByb3ZpZGVzOgorICAgICAgICAgICAgYXNzZXJ0IGtleSBpbiBz
dGF0ZQorCisKK2NsYXNzIFN0ZXBSdW5uZXIob2JqZWN0KToKKyAgICBzdGVwcyA9IFtdCisKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgbG9nZ2VyLCBzdGF0ZSk6CisgICAgICAgICIiIkNsYXNzIHRo
YXQgcnVucyBhIHNwZWNpZmllZCBzZXJpZXMgb2YgU3RlcHMgd2l0aCBhIGNvbW1vbiBTdGF0ZSIi
IgorICAgICAgICBzZWxmLnN0YXRlID0gc3RhdGUKKyAgICAgICAgc2VsZi5sb2dnZXIgPSBsb2dn
ZXIKKyAgICAgICAgaWYgInN0ZXBzIiBub3QgaW4gc3RhdGU6CisgICAgICAgICAgICBzdGF0ZS5z
dGVwcyA9IFtdCisKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICBydiA9IE5vbmUKKyAgICAg
ICAgZm9yIHN0ZXBfaW5kZXgsIHN0ZXAgaW4gZW51bWVyYXRlKHNlbGYuc3RlcHMpOgorICAgICAg
ICAgICAgc2VsZi5sb2dnZXIuZGVidWcoIlN0YXJ0aW5nIHN0ZXAgJXMiICUgc3RlcC5fX25hbWVf
XykKKyAgICAgICAgICAgIHJ2ID0gc3RlcChzZWxmLmxvZ2dlcikucnVuKHN0ZXBfaW5kZXgsIHNl
bGYuc3RhdGUpCisgICAgICAgICAgICBpZiBydiBpbiAoZXhpdF9jbGVhbiwgZXhpdF91bmNsZWFu
KToKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIHJldHVybiBydgpkaWZmIC0tZ2l0
IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIv
dXBkYXRlL21ldGFkYXRhLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dw
dHJ1bm5lci93cHRydW5uZXIvdXBkYXRlL21ldGFkYXRhLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwLi41ZjY5MjVlN2ZhOQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRy
aXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3VwZGF0ZS9t
ZXRhZGF0YS5weQpAQCAtMCwwICsxLDcxIEBACitpbXBvcnQgb3MKKworZnJvbSAuLiBpbXBvcnQg
bWV0YWRhdGEsIHByb2R1Y3RzCisKK2Zyb20gYmFzZSBpbXBvcnQgU3RlcCwgU3RlcFJ1bm5lcgor
CitjbGFzcyBHZXRVcGRhdGVQcm9wZXJ0eUxpc3QoU3RlcCk6CisgICAgcHJvdmlkZXMgPSBbInBy
b3BlcnR5X29yZGVyIiwgImJvb2xlYW5fcHJvcGVydGllcyJdCisKKworICAgIGRlZiBjcmVhdGUo
c2VsZiwgc3RhdGUpOgorICAgICAgICBwcm9wZXJ0eV9vcmRlciwgYm9vbGVhbl9wcm9wZXJ0aWVz
ID0gcHJvZHVjdHMubG9hZF9wcm9kdWN0X3VwZGF0ZSgKKyAgICAgICAgICAgIHN0YXRlLmNvbmZp
Zywgc3RhdGUucHJvZHVjdCkKKyAgICAgICAgc3RhdGUucHJvcGVydHlfb3JkZXIgPSBwcm9wZXJ0
eV9vcmRlcgorICAgICAgICBzdGF0ZS5ib29sZWFuX3Byb3BlcnRpZXMgPSBib29sZWFuX3Byb3Bl
cnRpZXMKKworCitjbGFzcyBVcGRhdGVFeHBlY3RlZChTdGVwKToKKyAgICAiIiJEbyB0aGUgbWV0
YWRhdGEgdXBkYXRlIG9uIHRoZSBsb2NhbCBjaGVja291dCIiIgorCisgICAgcHJvdmlkZXMgPSBb
Im5lZWRzX2h1bWFuIl0KKworICAgIGRlZiBjcmVhdGUoc2VsZiwgc3RhdGUpOgorICAgICAgICBp
ZiBzdGF0ZS5zeW5jX3RyZWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzeW5jX3Jvb3QgPSBz
dGF0ZS5zeW5jX3RyZWUucm9vdAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3luY19yb290
ID0gTm9uZQorCisgICAgICAgIHN0YXRlLm5lZWRzX2h1bWFuID0gbWV0YWRhdGEudXBkYXRlX2V4
cGVjdGVkKHN0YXRlLnBhdGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGF0ZS5zZXJ2ZV9yb290LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5ydW5fbG9nLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXZfb2xkPU5vbmUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGln
bm9yZV9leGlzdGluZz1zdGF0ZS5pZ25vcmVfZXhpc3RpbmcsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNfcm9vdD1zeW5jX3Jvb3QsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3Bl
cnR5X29yZGVyPXN0YXRlLnByb3BlcnR5X29yZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuX3Byb3BlcnRpZXM9c3RhdGUuYm9v
bGVhbl9wcm9wZXJ0aWVzKQorCisKK2NsYXNzIENyZWF0ZU1ldGFkYXRhUGF0Y2goU3RlcCk6Cisg
ICAgIiIiQ3JlYXRlIGEgcGF0Y2gvY29tbWl0IGZvciB0aGUgbWV0YWRhdGEgY2hlY2tvdXQiIiIK
KworICAgIGRlZiBjcmVhdGUoc2VsZiwgc3RhdGUpOgorICAgICAgICBpZiBub3Qgc3RhdGUucGF0
Y2g6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBsb2NhbF90cmVlID0gc3RhdGUubG9j
YWxfdHJlZQorICAgICAgICBzeW5jX3RyZWUgPSBzdGF0ZS5zeW5jX3RyZWUKKworICAgICAgICBp
ZiBzeW5jX3RyZWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBuYW1lID0gIndlYi1wbGF0Zm9y
bS10ZXN0c191cGRhdGVfJXNfbWV0YWRhdGEiICUgc3luY190cmVlLnJldgorICAgICAgICAgICAg
bWVzc2FnZSA9ICJVcGRhdGUgJXMgZXhwZWN0ZWQgZGF0YSB0byByZXZpc2lvbiAlcyIgJSAoc3Rh
dGUuc3VpdGVfbmFtZSwgc3luY190cmVlLnJldikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg
IG5hbWUgPSAid2ViLXBsYXRmb3JtLXRlc3RzX3VwZGF0ZV9tZXRhZGF0YSIKKyAgICAgICAgICAg
IG1lc3NhZ2UgPSAiVXBkYXRlICVzIGV4cGVjdGVkIGRhdGEiICUgc3RhdGUuc3VpdGVfbmFtZQor
CisgICAgICAgIGxvY2FsX3RyZWUuY3JlYXRlX3BhdGNoKG5hbWUsIG1lc3NhZ2UpCisKKyAgICAg
ICAgaWYgbm90IGxvY2FsX3RyZWUuaXNfY2xlYW46CisgICAgICAgICAgICBtZXRhZGF0YV9wYXRo
cyA9IFttYW5pZmVzdF9wYXRoWyJtZXRhZGF0YV9wYXRoIl0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciBtYW5pZmVzdF9wYXRoIGluIHN0YXRlLnBhdGhzLml0ZXJ2YWx1ZXMoKV0K
KyAgICAgICAgICAgIGZvciBwYXRoIGluIG1ldGFkYXRhX3BhdGhzOgorICAgICAgICAgICAgICAg
IGxvY2FsX3RyZWUuYWRkX25ldyhvcy5wYXRoLnJlbHBhdGgocGF0aCwgbG9jYWxfdHJlZS5yb290
KSkKKyAgICAgICAgICAgIGxvY2FsX3RyZWUudXBkYXRlX3BhdGNoKGluY2x1ZGU9bWV0YWRhdGFf
cGF0aHMpCisgICAgICAgICAgICBsb2NhbF90cmVlLmNvbW1pdF9wYXRjaCgpCisKKworY2xhc3Mg
TWV0YWRhdGFVcGRhdGVSdW5uZXIoU3RlcFJ1bm5lcik6CisgICAgIiIiKFN1YilSdW5uZXIgZm9y
IHVwZGF0aW5nIG1ldGFkYXRhIiIiCisgICAgc3RlcHMgPSBbR2V0VXBkYXRlUHJvcGVydHlMaXN0
LAorICAgICAgICAgICAgIFVwZGF0ZUV4cGVjdGVkLAorICAgICAgICAgICAgIENyZWF0ZU1ldGFk
YXRhUGF0Y2hdCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMv
d3B0cnVubmVyL3dwdHJ1bm5lci91cGRhdGUvc3RhdGUucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBv
cnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci91cGRhdGUvc3RhdGUucHkKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjk0NTQ0MTRlNjQwCi0tLSAvZGV2L251
bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRy
dW5uZXIvdXBkYXRlL3N0YXRlLnB5CkBAIC0wLDAgKzEsMTMzIEBACitpbXBvcnQgb3MKK2ltcG9y
dCBjUGlja2xlIGFzIHBpY2tsZQorCitoZXJlID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguc3Bs
aXQoX19maWxlX18pWzBdKQorCitjbGFzcyBTdGF0ZShvYmplY3QpOgorICAgIGZpbGVuYW1lID0g
b3MucGF0aC5qb2luKGhlcmUsICIud3B0LXVwZGF0ZS5sb2NrIikKKworICAgIGRlZiBfX25ld19f
KGNscywgbG9nZ2VyKToKKyAgICAgICAgcnYgPSBjbHMubG9hZChsb2dnZXIpCisgICAgICAgIGlm
IHJ2IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJFeGlzdGluZyBzdGF0
ZSBmb3VuZCIpCisgICAgICAgICAgICByZXR1cm4gcnYKKworICAgICAgICBsb2dnZXIuZGVidWco
Ik5vIGV4aXN0aW5nIHN0YXRlIGZvdW5kIikKKyAgICAgICAgcmV0dXJuIG9iamVjdC5fX25ld19f
KGNscywgbG9nZ2VyKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvZ2dlcik6CisgICAgICAg
ICIiIk9iamVjdCBjb250YWluaW5nIHN0YXRlIHZhcmlhYmxlcyBjcmVhdGVkIHdoZW4gcnVubmlu
ZyBTdGVwcy4KKworICAgICAgICBPbiB3cml0ZSB0aGUgc3RhdGUgaXMgc2VyaWFsaXplZCB0byBk
aXNrLCBzdWNoIHRoYXQgaXQgY2FuIGJlIHJlc3RvcmVkIGluCisgICAgICAgIHRoZSBldmVudCB0
aGF0IHRoZSBwcm9ncmFtIGlzIGludGVycnVwdGVkIGJlZm9yZSBhbGwgc3RlcHMgYXJlIGNvbXBs
ZXRlLgorICAgICAgICBOb3RlIHRoYXQgdGhpcyBvbmx5IHdvcmtzIHdlbGwgaWYgdGhlIHZhbHVl
cyBhcmUgaW1tdXRhYmxlOyBtdXRhdGluZyBhbgorICAgICAgICBleGlzdGluZyB2YWx1ZSB3aWxs
IG5vdCBjYXVzZSB0aGUgZGF0YSB0byBiZSBzZXJpYWxpemVkLgorCisgICAgICAgIFZhcmlhYmxl
cyBhcmUgc2V0IGFuZCBnZXQgYXMgYXR0cmlidXRlcyBlLmcuIHN0YXRlX29iai5zcGFtID0gImVn
Z3MiLgorCisgICAgICAgIDpwYXJhbSBwYXJlbnQ6IFBhcmVudCBTdGF0ZSBvYmplY3Qgb3IgTm9u
ZSBpZiB0aGlzIGlzIHRoZSByb290IG9iamVjdC4KKyAgICAgICAgIiIiCisKKyAgICAgICAgaWYg
aGFzYXR0cihzZWxmLCAiX2RhdGEiKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNl
bGYuX2RhdGEgPSBbe31dCisgICAgICAgIHNlbGYuX2xvZ2dlciA9IGxvZ2dlcgorICAgICAgICBz
ZWxmLl9pbmRleCA9IDAKKworICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6CisgICAgICAgIHJ2
ID0gc2VsZi5fX2RpY3RfXy5jb3B5KCkKKyAgICAgICAgZGVsIHJ2WyJfbG9nZ2VyIl0KKyAgICAg
ICAgcmV0dXJuIHJ2CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgbG9hZChjbHMsIGxvZ2dl
cik6CisgICAgICAgICIiIkxvYWQgc2F2ZWQgc3RhdGUgZnJvbSBhIGZpbGUiIiIKKyAgICAgICAg
dHJ5OgorICAgICAgICAgICAgd2l0aCBvcGVuKGNscy5maWxlbmFtZSkgYXMgZjoKKyAgICAgICAg
ICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHJ2ID0gcGlja2xlLmxvYWQoZikKKyAg
ICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJMb2FkaW5nIGRhdGEgJXIiICUgKHJ2Ll9k
YXRhLCkpCisgICAgICAgICAgICAgICAgICAgIHJ2Ll9sb2dnZXIgPSBsb2dnZXIKKyAgICAgICAg
ICAgICAgICAgICAgcnYuX2luZGV4ID0gMAorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcnYK
KyAgICAgICAgICAgICAgICBleGNlcHQgRU9GRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGxv
Z2dlci53YXJuaW5nKCJGb3VuZCBlbXB0eSBzdGF0ZSBmaWxlIikKKyAgICAgICAgZXhjZXB0IElP
RXJyb3I6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoIklPRXJyb3IgbG9hZGluZyBzdG9yZWQg
c3RhdGUiKQorCisgICAgZGVmIHB1c2goc2VsZiwgaW5pdF92YWx1ZXMpOgorICAgICAgICAiIiJQ
dXNoIGEgbmV3IGNsZWFuIHN0YXRlIGRpY3Rpb25hcnkKKworICAgICAgICA6cGFyYW0gaW5pdF92
YWx1ZXM6IExpc3Qgb2YgdmFyaWFibGUgbmFtZXMgaW4gdGhlIGN1cnJlbnQgc3RhdGUgZGljdCB0
byBjb3B5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50byB0aGUgbmV3IHN0YXRlIGRp
Y3QuIiIiCisKKyAgICAgICAgcmV0dXJuIFN0YXRlQ29udGV4dChzZWxmLCBpbml0X3ZhbHVlcykK
KworICAgIGRlZiBzYXZlKHNlbGYpOgorICAgICAgICAiIiJXcml0ZSB0aGUgc3RhdGUgdG8gZGlz
ayIiIgorICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInciKSBhcyBmOgorICAgICAg
ICAgICAgcGlja2xlLmR1bXAoc2VsZiwgZikKKworICAgIGRlZiBpc19lbXB0eShzZWxmKToKKyAg
ICAgICAgcmV0dXJuIGxlbihzZWxmLl9kYXRhKSA9PSAxIGFuZCBzZWxmLl9kYXRhWzBdID09IHt9
CisKKyAgICBkZWYgY2xlYXIoc2VsZik6CisgICAgICAgICIiIlJlbW92ZSBhbGwgc3RhdGUgYW5k
IGRlbGV0ZSB0aGUgc3RvcmVkIGNvcHkuIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9z
LnVubGluayhzZWxmLmZpbGVuYW1lKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAg
ICAgIHBhc3MKKyAgICAgICAgc2VsZi5fZGF0YSA9IFt7fV0KKworCisgICAgZGVmIF9fc2V0YXR0
cl9fKHNlbGYsIGtleSwgdmFsdWUpOgorICAgICAgICBpZiBrZXkuc3RhcnRzd2l0aCgiXyIpOgor
ICAgICAgICAgICAgb2JqZWN0Ll9fc2V0YXR0cl9fKHNlbGYsIGtleSwgdmFsdWUpCisgICAgICAg
IGVsc2U6CisgICAgICAgICAgICBzZWxmLl9kYXRhW3NlbGYuX2luZGV4XVtrZXldID0gdmFsdWUK
KyAgICAgICAgICAgIHNlbGYuc2F2ZSgpCisKKyAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwga2V5
KToKKyAgICAgICAgaWYga2V5LnN0YXJ0c3dpdGgoIl8iKToKKyAgICAgICAgICAgIHJhaXNlIEF0
dHJpYnV0ZUVycm9yCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9kYXRh
W3NlbGYuX2luZGV4XVtrZXldCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAg
IHJhaXNlIEF0dHJpYnV0ZUVycm9yCisKKyAgICBkZWYgX19jb250YWluc19fKHNlbGYsIGtleSk6
CisgICAgICAgIHJldHVybiBrZXkgaW4gc2VsZi5fZGF0YVtzZWxmLl9pbmRleF0KKworICAgIGRl
ZiB1cGRhdGUoc2VsZiwgaXRlbXMpOgorICAgICAgICAiIiJBZGQgYSBkaWN0aW9uYXJ5IG9mIHtu
YW1lOiB2YWx1ZX0gcGFpcnMgdG8gdGhlIHN0YXRlIiIiCisgICAgICAgIHNlbGYuX2RhdGFbc2Vs
Zi5faW5kZXhdLnVwZGF0ZShpdGVtcykKKyAgICAgICAgc2VsZi5zYXZlKCkKKworICAgIGRlZiBr
ZXlzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZGF0YVtzZWxmLl9pbmRleF0ua2V5cygp
CisKK2NsYXNzIFN0YXRlQ29udGV4dChvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBz
dGF0ZSwgaW5pdF92YWx1ZXMpOgorICAgICAgICBzZWxmLnN0YXRlID0gc3RhdGUKKyAgICAgICAg
c2VsZi5pbml0X3ZhbHVlcyA9IGluaXRfdmFsdWVzCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYp
OgorICAgICAgICBpZiBsZW4oc2VsZi5zdGF0ZS5fZGF0YSkgPT0gc2VsZi5zdGF0ZS5faW5kZXgg
KyAxOgorICAgICAgICAgICAgIyBUaGlzIGlzIHRoZSBjYXNlIHdoZXJlIHRoZXJlIGlzIG5vIHN0
b3JlZCBzdGF0ZQorICAgICAgICAgICAgbmV3X3N0YXRlID0ge30KKyAgICAgICAgICAgIGZvciBr
ZXkgaW4gc2VsZi5pbml0X3ZhbHVlczoKKyAgICAgICAgICAgICAgICBuZXdfc3RhdGVba2V5XSA9
IHNlbGYuc3RhdGUuX2RhdGFbc2VsZi5zdGF0ZS5faW5kZXhdW2tleV0KKyAgICAgICAgICAgIHNl
bGYuc3RhdGUuX2RhdGEuYXBwZW5kKG5ld19zdGF0ZSkKKyAgICAgICAgc2VsZi5zdGF0ZS5faW5k
ZXggKz0gMQorICAgICAgICBzZWxmLnN0YXRlLl9sb2dnZXIuZGVidWcoIkluY3JlbWVudGVkIGlu
ZGV4IHRvICVzIiAlIHNlbGYuc3RhdGUuX2luZGV4KQorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYs
ICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGlmIGxlbihzZWxmLnN0YXRlLl9kYXRhKSA+IDE6
CisgICAgICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZS5faW5kZXggPT0gbGVuKHNlbGYuc3RhdGUu
X2RhdGEpIC0gMQorICAgICAgICAgICAgc2VsZi5zdGF0ZS5fZGF0YS5wb3AoKQorICAgICAgICAg
ICAgc2VsZi5zdGF0ZS5faW5kZXggLT0gMQorICAgICAgICAgICAgc2VsZi5zdGF0ZS5fbG9nZ2Vy
LmRlYnVnKCJEZWNyZW1lbnRlZCBpbmRleCB0byAlcyIgJSBzZWxmLnN0YXRlLl9pbmRleCkKKyAg
ICAgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlLl9pbmRleCA+PSAwCisgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJUcmllZCB0byBwb3AgdGhlIHRvcCBzdGF0ZSIp
CmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVy
L3dwdHJ1bm5lci91cGRhdGUvc3luYy5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90
b29scy93cHRydW5uZXIvd3B0cnVubmVyL3VwZGF0ZS9zeW5jLnB5Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iMjAxZmU3ZjE2NwotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3VwZGF0
ZS9zeW5jLnB5CkBAIC0wLDAgKzEsMTk3IEBACitpbXBvcnQgZm5tYXRjaAoraW1wb3J0IG9zCitp
bXBvcnQgcmUKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBzeXMKK2ltcG9ydCB1dWlkCisKK2Zyb20g
Li4gaW1wb3J0IHRlc3Rsb2FkZXIKKworZnJvbSBiYXNlIGltcG9ydCBTdGVwLCBTdGVwUnVubmVy
Citmcm9tIHRyZWUgaW1wb3J0IENvbW1pdAorCitoZXJlID0gb3MucGF0aC5hYnNwYXRoKG9zLnBh
dGguc3BsaXQoX19maWxlX18pWzBdKQorCitic2RfbGljZW5zZSA9ICIiIlczQyAzLWNsYXVzZSBC
U0QgTGljZW5zZQorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKK21ldDoKKworKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygd29ya3MgbXVzdCByZXRhaW4gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMKKyAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisKKyogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBvcmlnaW5hbCBjb3B5cmlnaHQKKyAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgdGhlIFczQyBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRv
cnMgbWF5IGJlCisgIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbSB0aGlzIHdvcmsgd2l0aG91dAorICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisKKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUyAiQVMKK0lTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRQorQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQg
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCitMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCitDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCitJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKK0FSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyIiIgorCisKK2RlZiBjb3B5X3dwdF90
cmVlKHRyZWUsIGRlc3QsIGV4Y2x1ZGVzPU5vbmUsIGluY2x1ZGVzPU5vbmUpOgorICAgICIiIkNv
cHkgdGhlIHdvcmtpbmcgY29weSBvZiBhIFRyZWUgdG8gYSBkZXN0aW5hdGlvbiBkaXJlY3Rvcnku
CisKKyAgICA6cGFyYW0gdHJlZTogVGhlIFRyZWUgdG8gY29weS4KKyAgICA6cGFyYW0gZGVzdDog
VGhlIGRlc3RpbmF0aW9uIGRpcmVjdG9yeSIiIgorICAgIGlmIG9zLnBhdGguZXhpc3RzKGRlc3Qp
OgorICAgICAgICBhc3NlcnQgb3MucGF0aC5pc2RpcihkZXN0KQorCisgICAgc2h1dGlsLnJtdHJl
ZShkZXN0KQorCisgICAgb3MubWtkaXIoZGVzdCkKKworICAgIGlmIGV4Y2x1ZGVzIGlzIE5vbmU6
CisgICAgICAgIGV4Y2x1ZGVzID0gW10KKworICAgIGV4Y2x1ZGVzID0gW3JlLmNvbXBpbGUoZm5t
YXRjaC50cmFuc2xhdGUoaXRlbSkpIGZvciBpdGVtIGluIGV4Y2x1ZGVzXQorCisgICAgaWYgaW5j
bHVkZXMgaXMgTm9uZToKKyAgICAgICAgaW5jbHVkZXMgPSBbXQorCisgICAgaW5jbHVkZXMgPSBb
cmUuY29tcGlsZShmbm1hdGNoLnRyYW5zbGF0ZShpdGVtKSkgZm9yIGl0ZW0gaW4gaW5jbHVkZXNd
CisKKyAgICBmb3IgdHJlZV9wYXRoIGluIHRyZWUucGF0aHMoKToKKyAgICAgICAgaWYgKGFueShp
dGVtLm1hdGNoKHRyZWVfcGF0aCkgZm9yIGl0ZW0gaW4gZXhjbHVkZXMpIGFuZAorICAgICAgICAg
ICAgbm90IGFueShpdGVtLm1hdGNoKHRyZWVfcGF0aCkgZm9yIGl0ZW0gaW4gaW5jbHVkZXMpKToK
KyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgc291cmNlX3BhdGggPSBvcy5wYXRoLmpv
aW4odHJlZS5yb290LCB0cmVlX3BhdGgpCisgICAgICAgIGRlc3RfcGF0aCA9IG9zLnBhdGguam9p
bihkZXN0LCB0cmVlX3BhdGgpCisKKyAgICAgICAgZGVzdF9kaXIgPSBvcy5wYXRoLnNwbGl0KGRl
c3RfcGF0aClbMF0KKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoc291cmNlX3BhdGgpOgor
ICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGRlc3RfZGlyKToKKyAgICAgICAgICAg
ICAgICBvcy5tYWtlZGlycyhkZXN0X2RpcikKKyAgICAgICAgICAgIHNodXRpbC5jb3B5Mihzb3Vy
Y2VfcGF0aCwgZGVzdF9wYXRoKQorCisgICAgZm9yIHNvdXJjZSwgZGVzdGluYXRpb24gaW4gWygi
dGVzdGhhcm5lc3NfcnVubmVyLmh0bWwiLCAiIiksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICgidGVzdGhhcm5lc3NyZXBvcnQuanMiLCAicmVzb3VyY2VzLyIpXToKKyAgICAgICAg
c291cmNlX3BhdGggPSBvcy5wYXRoLmpvaW4oaGVyZSwgb3MucGFyZGlyLCBzb3VyY2UpCisgICAg
ICAgIGRlc3RfcGF0aCA9IG9zLnBhdGguam9pbihkZXN0LCBkZXN0aW5hdGlvbiwgb3MucGF0aC5z
cGxpdChzb3VyY2UpWzFdKQorICAgICAgICBzaHV0aWwuY29weTIoc291cmNlX3BhdGgsIGRlc3Rf
cGF0aCkKKworICAgIGFkZF9saWNlbnNlKGRlc3QpCisKKworZGVmIGFkZF9saWNlbnNlKGRlc3Qp
OgorICAgICIiIldyaXRlIHRoZSBic2QgbGljZW5zZSBzdHJpbmcgdG8gYSBMSUNFTlNFIGZpbGUu
CisKKyAgICA6cGFyYW0gZGVzdDogRGlyZWN0b3J5IGluIHdoaWNoIHRvIHBsYWNlIHRoZSBMSUNF
TlNFIGZpbGUuIiIiCisgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihkZXN0LCAiTElDRU5TRSIp
LCAidyIpIGFzIGY6CisgICAgICAgIGYud3JpdGUoYnNkX2xpY2Vuc2UpCisKKworY2xhc3MgVXBk
YXRlQ2hlY2tvdXQoU3RlcCk6CisgICAgIiIiUHVsbCBjaGFuZ2VzIGZyb20gdXBzdHJlYW0gaW50
byB0aGUgbG9jYWwgc3luYyB0cmVlLiIiIgorCisgICAgcHJvdmlkZXMgPSBbImxvY2FsX2JyYW5j
aCJdCisKKyAgICBkZWYgY3JlYXRlKHNlbGYsIHN0YXRlKToKKyAgICAgICAgc3luY190cmVlID0g
c3RhdGUuc3luY190cmVlCisgICAgICAgIHN0YXRlLmxvY2FsX2JyYW5jaCA9IHV1aWQudXVpZDQo
KS5oZXgKKyAgICAgICAgc3luY190cmVlLnVwZGF0ZShzdGF0ZS5zeW5jWyJyZW1vdGVfdXJsIl0s
CisgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3luY1siYnJhbmNoIl0sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdGUubG9jYWxfYnJhbmNoKQorICAgICAgICBzeW5jX3BhdGgg
PSBvcy5wYXRoLmFic3BhdGgoc3luY190cmVlLnJvb3QpCisgICAgICAgIGlmIG5vdCBzeW5jX3Bh
dGggaW4gc3lzLnBhdGg6CisgICAgICAgICAgICBmcm9tIHVwZGF0ZSBpbXBvcnQgc2V0dXBfcGF0
aHMKKyAgICAgICAgICAgIHNldHVwX3BhdGhzKHN5bmNfcGF0aCkKKworICAgIGRlZiByZXN0b3Jl
KHNlbGYsIHN0YXRlKToKKyAgICAgICAgYXNzZXJ0IG9zLnBhdGguYWJzcGF0aChzdGF0ZS5zeW5j
X3RyZWUucm9vdCkgaW4gc3lzLnBhdGgKKyAgICAgICAgU3RlcC5yZXN0b3JlKHNlbGYsIHN0YXRl
KQorCisKK2NsYXNzIEdldFN5bmNUYXJnZXRDb21taXQoU3RlcCk6CisgICAgIiIiRmluZCB0aGUg
Y29tbWl0IHRoYXQgd2Ugd2lsbCBzeW5jIHRvLiIiIgorCisgICAgcHJvdmlkZXMgPSBbInN5bmNf
Y29tbWl0Il0KKworICAgIGRlZiBjcmVhdGUoc2VsZiwgc3RhdGUpOgorICAgICAgICBpZiBzdGF0
ZS50YXJnZXRfcmV2IGlzIE5vbmU6CisgICAgICAgICAgICAjVXNlIHVwc3RyZWFtIGJyYW5jaCBI
RUFEIGFzIHRoZSBiYXNlIGNvbW1pdAorICAgICAgICAgICAgc3RhdGUuc3luY19jb21taXQgPSBz
dGF0ZS5zeW5jX3RyZWUuZ2V0X3JlbW90ZV9zaGExKHN0YXRlLnN5bmNbInJlbW90ZV91cmwiXSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0ZS5zeW5jWyJicmFuY2giXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg
IHN0YXRlLnN5bmNfY29tbWl0ID0gQ29tbWl0KHN0YXRlLnN5bmNfdHJlZSwgc3RhdGUucmV2KQor
CisgICAgICAgIHN0YXRlLnN5bmNfdHJlZS5jaGVja291dChzdGF0ZS5zeW5jX2NvbW1pdC5zaGEx
LCBzdGF0ZS5sb2NhbF9icmFuY2gsIGZvcmNlPVRydWUpCisgICAgICAgIHNlbGYubG9nZ2VyLmRl
YnVnKCJOZXcgYmFzZSBjb21taXQgaXMgJXMiICUgc3RhdGUuc3luY19jb21taXQuc2hhMSkKKwor
CitjbGFzcyBMb2FkTWFuaWZlc3QoU3RlcCk6CisgICAgIiIiTG9hZCB0aGUgdGVzdCBtYW5pZmVz
dCIiIgorCisgICAgcHJvdmlkZXMgPSBbIm1hbmlmZXN0X3BhdGgiLCAidGVzdF9tYW5pZmVzdCJd
CisKKyAgICBkZWYgY3JlYXRlKHNlbGYsIHN0YXRlKToKKyAgICAgICAgZnJvbSBtYW5pZmVzdCBp
bXBvcnQgbWFuaWZlc3QKKyAgICAgICAgc3RhdGUubWFuaWZlc3RfcGF0aCA9IG9zLnBhdGguam9p
bihzdGF0ZS5tZXRhZGF0YV9wYXRoLCAiTUFOSUZFU1QuanNvbiIpCisgICAgICAgIHN0YXRlLnRl
c3RfbWFuaWZlc3QgPSBtYW5pZmVzdC5NYW5pZmVzdCgiLyIpCisKKworY2xhc3MgVXBkYXRlTWFu
aWZlc3QoU3RlcCk6CisgICAgIiIiVXBkYXRlIHRoZSBtYW5pZmVzdCB0byBtYXRjaCB0aGUgdGVz
dHMgaW4gdGhlIHN5bmMgdHJlZSBjaGVja291dCIiIgorCisgICAgZGVmIGNyZWF0ZShzZWxmLCBz
dGF0ZSk6CisgICAgICAgIGZyb20gbWFuaWZlc3QgaW1wb3J0IG1hbmlmZXN0LCB1cGRhdGUKKyAg
ICAgICAgdXBkYXRlLnVwZGF0ZShzdGF0ZS5zeW5jWyJwYXRoIl0sIHN0YXRlLnRlc3RfbWFuaWZl
c3QpCisgICAgICAgIG1hbmlmZXN0LndyaXRlKHN0YXRlLnRlc3RfbWFuaWZlc3QsIHN0YXRlLm1h
bmlmZXN0X3BhdGgpCisKKworY2xhc3MgQ29weVdvcmtUcmVlKFN0ZXApOgorICAgICIiIkNvcHkg
dGhlIHN5bmMgdHJlZSBvdmVyIHRvIHRoZSBkZXN0aW5hdGlvbiBpbiB0aGUgbG9jYWwgdHJlZSIi
IgorCisgICAgZGVmIGNyZWF0ZShzZWxmLCBzdGF0ZSk6CisgICAgICAgIGNvcHlfd3B0X3RyZWUo
c3RhdGUuc3luY190cmVlLAorICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnRlc3RzX3BhdGgs
CisgICAgICAgICAgICAgICAgICAgICAgZXhjbHVkZXM9c3RhdGUucGF0aF9leGNsdWRlcywKKyAg
ICAgICAgICAgICAgICAgICAgICBpbmNsdWRlcz1zdGF0ZS5wYXRoX2luY2x1ZGVzKQorCisKK2Ns
YXNzIENyZWF0ZVN5bmNQYXRjaChTdGVwKToKKyAgICAiIiJBZGQgdGhlIHVwZGF0ZWQgdGVzdCBm
aWxlcyB0byBhIGNvbW1pdC9wYXRjaCBpbiB0aGUgbG9jYWwgdHJlZS4iIiIKKworICAgIGRlZiBj
cmVhdGUoc2VsZiwgc3RhdGUpOgorICAgICAgICBpZiBub3Qgc3RhdGUucGF0Y2g6CisgICAgICAg
ICAgICByZXR1cm4KKworICAgICAgICBsb2NhbF90cmVlID0gc3RhdGUubG9jYWxfdHJlZQorICAg
ICAgICBzeW5jX3RyZWUgPSBzdGF0ZS5zeW5jX3RyZWUKKworICAgICAgICBsb2NhbF90cmVlLmNy
ZWF0ZV9wYXRjaCgid2ViLXBsYXRmb3JtLXRlc3RzX3VwZGF0ZV8lcyIgJSBzeW5jX3RyZWUucmV2
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVXBkYXRlICVzIHRvIHJldmlzaW9u
ICVzIiAlIChzdGF0ZS5zdWl0ZV9uYW1lLCBzeW5jX3RyZWUucmV2KSkKKyAgICAgICAgbG9jYWxf
dHJlZS5hZGRfbmV3KG9zLnBhdGgucmVscGF0aChzdGF0ZS50ZXN0c19wYXRoLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsX3RyZWUucm9vdCkpCisgICAg
ICAgIHVwZGF0ZWQgPSBsb2NhbF90cmVlLnVwZGF0ZV9wYXRjaChpbmNsdWRlPVtzdGF0ZS50ZXN0
c19wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhdGUubWV0YWRhdGFfcGF0aF0pCisgICAgICAgIGxvY2FsX3RyZWUuY29tbWl0X3BhdGNo
KCkKKworICAgICAgICBpZiBub3QgdXBkYXRlZDoKKyAgICAgICAgICAgIHNlbGYubG9nZ2VyLmlu
Zm8oIk5vdGhpbmcgdG8gc3luYyIpCisKKworY2xhc3MgU3luY0Zyb21VcHN0cmVhbVJ1bm5lcihT
dGVwUnVubmVyKToKKyAgICAiIiIoU3ViKVJ1bm5lciBmb3IgZG9pbmcgYW4gdXBzdHJlYW0gc3lu
YyIiIgorICAgIHN0ZXBzID0gW1VwZGF0ZUNoZWNrb3V0LAorICAgICAgICAgICAgIEdldFN5bmNU
YXJnZXRDb21taXQsCisgICAgICAgICAgICAgTG9hZE1hbmlmZXN0LAorICAgICAgICAgICAgIFVw
ZGF0ZU1hbmlmZXN0LAorICAgICAgICAgICAgIENvcHlXb3JrVHJlZSwKKyAgICAgICAgICAgICBD
cmVhdGVTeW5jUGF0Y2hdCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mv
dG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci91cGRhdGUvdHJlZS5weSBiL1dlYkRyaXZlclRlc3Rz
L2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3VwZGF0ZS90cmVlLnB5Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wMWRmMGI0Zjk0YQotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIv
d3B0cnVubmVyL3VwZGF0ZS90cmVlLnB5CkBAIC0wLDAgKzEsMzgyIEBACitpbXBvcnQgb3MKK2lt
cG9ydCByZQoraW1wb3J0IHN1YnByb2Nlc3MKKworZnJvbSAuLiBpbXBvcnQgdmNzCitmcm9tIC4u
dmNzIGltcG9ydCBiaW5kX3RvX3JlcG8sIGdpdCwgaGcKKworCitkZWYgZ2V0X3VuaXF1ZV9uYW1l
KGV4aXN0aW5nLCBpbml0aWFsKToKKyAgICAiIiJHZXQgYSBuYW1lIGVpdGhlciBlcXVhbCB0byBp
bml0aWFsIG9yIG9mIHRoZSBmb3JtIGluaXRpYWxfTiwgZm9yIHNvbWUKKyAgICBpbnRlZ2VyIE4s
IHRoYXQgaXMgbm90IGluIHRoZSBzZXQgZXhpc3RpbmcuCisKKworICAgIDpwYXJhbSBleGlzdGlu
ZzogU2V0IG9mIG5hbWVzIHRoYXQgbXVzdCBub3QgYmUgY2hvc2VuLgorICAgIDpwYXJhbSBpbml0
aWFsOiBOYW1lLCBvciBuYW1lIHByZWZpeCwgdG8gdXNlIiIiCisgICAgaWYgaW5pdGlhbCBub3Qg
aW4gZXhpc3Rpbmc6CisgICAgICAgIHJldHVybiBpbml0aWFsCisgICAgZm9yIGkgaW4geHJhbmdl
KGxlbihleGlzdGluZykgKyAxKToKKyAgICAgICAgdGVzdCA9ICIlc18lcyIgJSAoaW5pdGlhbCwg
aSArIDEpCisgICAgICAgIGlmIHRlc3Qgbm90IGluIGV4aXN0aW5nOgorICAgICAgICAgICAgcmV0
dXJuIHRlc3QKKyAgICBhc3NlcnQgRmFsc2UKKworY2xhc3MgTm9WQ1NUcmVlKG9iamVjdCk6Cisg
ICAgbmFtZSA9ICJub24tdmNzIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJvb3Q9Tm9uZSk6
CisgICAgICAgIGlmIHJvb3QgaXMgTm9uZToKKyAgICAgICAgICAgIHJvb3QgPSBvcy5wYXRoLmFi
c3BhdGgob3MuY3VyZGlyKQorICAgICAgICBzZWxmLnJvb3QgPSByb290CisKKyAgICBAY2xhc3Nt
ZXRob2QKKyAgICBkZWYgaXNfdHlwZShjbHMsIHBhdGg9Tm9uZSk6CisgICAgICAgIHJldHVybiBU
cnVlCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaXNfY2xlYW4oc2VsZik6CisgICAgICAgIHJl
dHVybiBUcnVlCisKKyAgICBkZWYgYWRkX25ldyhzZWxmLCBwcmVmaXg9Tm9uZSk6CisgICAgICAg
IHBhc3MKKworICAgIGRlZiBjcmVhdGVfcGF0Y2goc2VsZiwgcGF0Y2hfbmFtZSwgbWVzc2FnZSk6
CisgICAgICAgIHBhc3MKKworICAgIGRlZiB1cGRhdGVfcGF0Y2goc2VsZiwgaW5jbHVkZT1Ob25l
KToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGNvbW1pdF9wYXRjaChzZWxmKToKKyAgICAgICAg
cGFzcworCisKK2NsYXNzIEhnVHJlZShvYmplY3QpOgorICAgIG5hbWUgPSAibWVyY3VyaWFsIgor
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJvb3Q9Tm9uZSk6CisgICAgICAgIGlmIHJvb3QgaXMg
Tm9uZToKKyAgICAgICAgICAgIHJvb3QgPSBoZygicm9vdCIpLnN0cmlwKCkKKyAgICAgICAgc2Vs
Zi5yb290ID0gcm9vdAorICAgICAgICBzZWxmLmhnID0gdmNzLmJpbmRfdG9fcmVwbyhoZywgc2Vs
Zi5yb290KQorCisgICAgZGVmIF9fZ2V0c3RhdGVfXyhzZWxmKToKKyAgICAgICAgcnYgPSBzZWxm
Ll9fZGljdF9fLmNvcHkoKQorICAgICAgICBkZWwgcnZbJ2hnJ10KKyAgICAgICAgcmV0dXJuIHJ2
CisKKyAgICBkZWYgX19zZXRzdGF0ZV9fKHNlbGYsIGRpY3QpOgorICAgICAgICBzZWxmLl9fZGlj
dF9fLnVwZGF0ZShkaWN0KQorICAgICAgICBzZWxmLmhnID0gdmNzLmJpbmRfdG9fcmVwbyh2Y3Mu
aGcsIHNlbGYucm9vdCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBpc190eXBlKGNscywg
cGF0aD1Ob25lKToKKyAgICAgICAga3dhcmdzID0geyJsb2dfZXJyb3IiOiBGYWxzZX0KKyAgICAg
ICAgaWYgcGF0aCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGt3YXJnc1sicmVwbyJdID0gcGF0
aAorICAgICAgICB0cnk6CisgICAgICAgICAgICBoZygicm9vdCIsICoqa3dhcmdzKQorICAgICAg
ICBleGNlcHQ6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUK
KworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBpc19jbGVhbihzZWxmKToKKyAgICAgICAgcmV0dXJu
IHNlbGYuaGcoInN0YXR1cyIpLnN0cmlwKCkgPT0gIiIKKworICAgIGRlZiBhZGRfbmV3KHNlbGYs
IHByZWZpeD1Ob25lKToKKyAgICAgICAgaWYgcHJlZml4IGlzIG5vdCBOb25lOgorICAgICAgICAg
ICAgYXJncyA9ICgiLUkiLCBwcmVmaXgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhcmdz
ID0gKCkKKyAgICAgICAgc2VsZi5oZygiYWRkIiwgKmFyZ3MpCisKKyAgICBkZWYgY3JlYXRlX3Bh
dGNoKHNlbGYsIHBhdGNoX25hbWUsIG1lc3NhZ2UpOgorICAgICAgICB0cnk6CisgICAgICAgICAg
ICBzZWxmLmhnKCJxaW5pdCIsIGxvZ19lcnJvcj1GYWxzZSkKKyAgICAgICAgZXhjZXB0IHN1YnBy
b2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHBh
dGNoX25hbWVzID0gW2l0ZW0uc3RyaXAoKSBmb3IgaXRlbSBpbiBzZWxmLmhnKCJxc2VyaWVzIiku
c3BsaXQoIlxuIikgaWYgaXRlbS5zdHJpcCgpXQorCisgICAgICAgIHN1ZmZpeCA9IDAKKyAgICAg
ICAgdGVzdF9uYW1lID0gcGF0Y2hfbmFtZQorICAgICAgICB3aGlsZSB0ZXN0X25hbWUgaW4gcGF0
Y2hfbmFtZXM6CisgICAgICAgICAgICBzdWZmaXggKz0gMQorICAgICAgICAgICAgdGVzdF9uYW1l
ID0gIiVzLSVpIiAlIChwYXRjaF9uYW1lLCBzdWZmaXgpCisKKyAgICAgICAgc2VsZi5oZygicW5l
dyIsIHRlc3RfbmFtZSwgIi1YIiwgc2VsZi5yb290LCAiLW0iLCBtZXNzYWdlKQorCisgICAgZGVm
IHVwZGF0ZV9wYXRjaChzZWxmLCBpbmNsdWRlPU5vbmUpOgorICAgICAgICBpZiBpbmNsdWRlIGlz
IG5vdCBOb25lOgorICAgICAgICAgICAgYXJncyA9IFtdCisgICAgICAgICAgICBmb3IgaXRlbSBp
biBpbmNsdWRlOgorICAgICAgICAgICAgICAgIGFyZ3MuZXh0ZW5kKFsiLUkiLCBpdGVtXSkKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIGFyZ3MgPSAoKQorCisgICAgICAgIHNlbGYuaGcoInFy
ZWZyZXNoIiwgKmFyZ3MpCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgY29tbWl0X3Bh
dGNoKHNlbGYpOgorICAgICAgICBzZWxmLmhnKCJxZmluaXNoIikKKworICAgIGRlZiBjb250YWlu
c19jb21taXQoc2VsZiwgY29tbWl0KToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5o
ZygiaWRlbnRpZnkiLCAiLXIiLCBjb21taXQuc2hhMSkKKyAgICAgICAgICAgIHJldHVybiBUcnVl
CisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcjoKKyAgICAgICAg
ICAgIHJldHVybiBGYWxzZQorCisKK2NsYXNzIEdpdFRyZWUob2JqZWN0KToKKyAgICBuYW1lID0g
ImdpdCIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCByb290PU5vbmUpOgorICAgICAgICBpZiBy
b290IGlzIE5vbmU6CisgICAgICAgICAgICByb290ID0gZ2l0KCJyZXYtcGFyc2UiLCAiLS1zaG93
LXRvcGxldmVsIikuc3RyaXAoKQorICAgICAgICBzZWxmLnJvb3QgPSByb290CisgICAgICAgIHNl
bGYuZ2l0ID0gdmNzLmJpbmRfdG9fcmVwbyhnaXQsIHNlbGYucm9vdCkKKyAgICAgICAgc2VsZi5t
ZXNzYWdlID0gTm9uZQorICAgICAgICBzZWxmLmNvbW1pdF9jbHMgPSBDb21taXQKKworICAgIGRl
ZiBfX2dldHN0YXRlX18oc2VsZik6CisgICAgICAgIHJ2ID0gc2VsZi5fX2RpY3RfXy5jb3B5KCkK
KyAgICAgICAgZGVsIHJ2WydnaXQnXQorICAgICAgICByZXR1cm4gcnYKKworICAgIGRlZiBfX3Nl
dHN0YXRlX18oc2VsZiwgZGljdCk6CisgICAgICAgIHNlbGYuX19kaWN0X18udXBkYXRlKGRpY3Qp
CisgICAgICAgIHNlbGYuZ2l0ID0gdmNzLmJpbmRfdG9fcmVwbyh2Y3MuZ2l0LCBzZWxmLnJvb3Qp
CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgaXNfdHlwZShjbHMsIHBhdGg9Tm9uZSk6Cisg
ICAgICAgIGt3YXJncyA9IHsibG9nX2Vycm9yIjogRmFsc2V9CisgICAgICAgIGlmIHBhdGggaXMg
bm90IE5vbmU6CisgICAgICAgICAgICBrd2FyZ3NbInJlcG8iXSA9IHBhdGgKKyAgICAgICAgdHJ5
OgorICAgICAgICAgICAgZ2l0KCJyZXYtcGFyc2UiLCAiLS1zaG93LXRvcGxldmVsIiwgKiprd2Fy
Z3MpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBy
ZXR1cm4gVHJ1ZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHJldihzZWxmKToKKyAgICAgICAg
IiIiQ3VycmVudCBIRUFEIHJldmlzaW9uIiIiCisgICAgICAgIGlmIHZjcy5pc19naXRfcm9vdChz
ZWxmLnJvb3QpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2l0KCJyZXYtcGFyc2UiLCAiSEVB
RCIpLnN0cmlwKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAg
ICBAcHJvcGVydHkKKyAgICBkZWYgaXNfY2xlYW4oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxm
LmdpdCgic3RhdHVzIikuc3RyaXAoKSA9PSAiIgorCisgICAgZGVmIGFkZF9uZXcoc2VsZiwgcHJl
Zml4PU5vbmUpOgorICAgICAgICAiIiJBZGQgZmlsZXMgdG8gdGhlIHN0YWdpbmcgYXJlYS4KKwor
ICAgICAgICA6cGFyYW0gcHJlZml4OiBOb25lIHRvIGluY2x1ZGUgYWxsIGZpbGVzIG9yIGEgcGF0
aCBwcmVmaXggdG8KKyAgICAgICAgICAgICAgICAgICAgICAgYWRkIGFsbCBmaWxlcyB1bmRlciB0
aGF0IHBhdGguCisgICAgICAgICIiIgorICAgICAgICBpZiBwcmVmaXggaXMgTm9uZToKKyAgICAg
ICAgICAgIGFyZ3MgPSAoIi1hIiwpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhcmdzID0g
KCItLW5vLWlnbm9yZS1yZW1vdmFsIiwgcHJlZml4KQorICAgICAgICBzZWxmLmdpdCgiYWRkIiwg
KmFyZ3MpCisKKyAgICBkZWYgbGlzdF9yZWZzKHNlbGYsIHJlZl9maWx0ZXI9Tm9uZSk6CisgICAg
ICAgICIiIkdldCBhIGxpc3Qgb2Ygc2hhMSwgbmFtZSB0dXBsZXMgZm9yIHJlZmVyZW5jZXMgaW4g
YSByZXBvc2l0b3J5LgorCisgICAgICAgIDpwYXJhbSByZWZfZmlsdGVyOiBQYXR0ZXJuIHRoYXQg
cmVmZXJlbmNlIG5hbWUgbXVzdCBtYXRjaCAoZnJvbSB0aGUgZW5kLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbWF0Y2hpbmcgd2hvbGUgLy1kZWxpbWl0ZWQgc2VnbWVudHMgb25seQorICAg
ICAgICAiIiIKKyAgICAgICAgYXJncyA9IFtdCisgICAgICAgIGlmIHJlZl9maWx0ZXIgaXMgbm90
IE5vbmU6CisgICAgICAgICAgICBhcmdzLmFwcGVuZChyZWZfZmlsdGVyKQorICAgICAgICBkYXRh
ID0gc2VsZi5naXQoInNob3ctcmVmIiwgKmFyZ3MpCisgICAgICAgIHJ2ID0gW10KKyAgICAgICAg
Zm9yIGxpbmUgaW4gZGF0YS5zcGxpdCgiXG4iKToKKyAgICAgICAgICAgIGlmIG5vdCBsaW5lLnN0
cmlwKCk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHNoYTEsIHJlZiA9
IGxpbmUuc3BsaXQoKQorICAgICAgICAgICAgcnYuYXBwZW5kKChzaGExLCByZWYpKQorICAgICAg
ICByZXR1cm4gcnYKKworICAgIGRlZiBsaXN0X3JlbW90ZShzZWxmLCByZW1vdGUsIHJlZl9maWx0
ZXI9Tm9uZSk6CisgICAgICAgICIiIlJldHVybiBhIGxpc3Qgb2YgKHNoYTEsIG5hbWUpIHR1cGVz
IGZvciByZWZlcmVuY2VzIGluIGEgcmVtb3RlLgorCisgICAgICAgIDpwYXJhbSByZW1vdGU6IFVS
TCBvZiB0aGUgcmVtb3RlIHRvIGxpc3QuCisgICAgICAgIDpwYXJhbSByZWZfZmlsdGVyOiBQYXR0
ZXJuIHRoYXQgdGhlIHJlZmVyZW5jZSBuYW1lIG11c3QgbWF0Y2guCisgICAgICAgICIiIgorICAg
ICAgICBhcmdzID0gW10KKyAgICAgICAgaWYgcmVmX2ZpbHRlciBpcyBub3QgTm9uZToKKyAgICAg
ICAgICAgIGFyZ3MuYXBwZW5kKHJlZl9maWx0ZXIpCisgICAgICAgIGRhdGEgPSBzZWxmLmdpdCgi
bHMtcmVtb3RlIiwgcmVtb3RlLCAqYXJncykKKyAgICAgICAgcnYgPSBbXQorICAgICAgICBmb3Ig
bGluZSBpbiBkYXRhLnNwbGl0KCJcbiIpOgorICAgICAgICAgICAgaWYgbm90IGxpbmUuc3RyaXAo
KToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgc2hhMSwgcmVmID0gbGlu
ZS5zcGxpdCgpCisgICAgICAgICAgICBydi5hcHBlbmQoKHNoYTEsIHJlZikpCisgICAgICAgIHJl
dHVybiBydgorCisgICAgZGVmIGdldF9yZW1vdGVfc2hhMShzZWxmLCByZW1vdGUsIGJyYW5jaCk6
CisgICAgICAgICIiIlJldHVybiB0aGUgU0hBMSBvZiBhIHBhcnRpY3VsYXIgYnJhbmNoIGluIGEg
cmVtb3RlLgorCisgICAgICAgIDpwYXJhbSByZW1vdGU6IHRoZSByZW1vdGUgVVJMCisgICAgICAg
IDpwYXJhbSBicmFuY2g6IHRoZSBicmFuY2ggbmFtZSIiIgorICAgICAgICBmb3Igc2hhMSwgcmVm
IGluIHNlbGYubGlzdF9yZW1vdGUocmVtb3RlLCBicmFuY2gpOgorICAgICAgICAgICAgaWYgcmVm
ID09ICJyZWZzL2hlYWRzLyVzIiAlIGJyYW5jaDoKKyAgICAgICAgICAgICAgICByZXR1cm4gc2Vs
Zi5jb21taXRfY2xzKHNlbGYsIHNoYTEpCisgICAgICAgIGFzc2VydCBGYWxzZQorCisgICAgZGVm
IGNyZWF0ZV9wYXRjaChzZWxmLCBwYXRjaF9uYW1lLCBtZXNzYWdlKToKKyAgICAgICAgIyBJbiBn
aXQgYSBwYXRjaCBpcyBhY3R1YWxseSBhIGNvbW1pdAorICAgICAgICBzZWxmLm1lc3NhZ2UgPSBt
ZXNzYWdlCisKKyAgICBkZWYgdXBkYXRlX3BhdGNoKHNlbGYsIGluY2x1ZGU9Tm9uZSk6CisgICAg
ICAgICIiIkNvbW1pdCB0aGUgc3RhZ2VkIGNoYW5nZXMsIG9yIGNoYW5nZXMgdG8gbGlzdGVkIGZp
bGVzLgorCisgICAgICAgIDpwYXJhbSBpbmNsdWRlOiBFaXRoZXIgTm9uZSwgdG8gY29tbWl0IHN0
YWdlZCBjaGFuZ2VzLCBvciBhIGxpc3QKKyAgICAgICAgICAgICAgICAgICAgICAgIG9mIGZpbGVu
YW1lcyAod2hpY2ggbXVzdCBhbHJlYWR5IGJlIGluIHRoZSByZXBvKQorICAgICAgICAgICAgICAg
ICAgICAgICAgdG8gY29tbWl0CisgICAgICAgICIiIgorICAgICAgICBpZiBpbmNsdWRlIGlzIG5v
dCBOb25lOgorICAgICAgICAgICAgYXJncyA9IHR1cGxlKGluY2x1ZGUpCisgICAgICAgIGVsc2U6
CisgICAgICAgICAgICBhcmdzID0gKCkKKworICAgICAgICBpZiBzZWxmLmdpdCgic3RhdHVzIiwg
Ii11bm8iLCAiLXoiLCAqYXJncykuc3RyaXAoKToKKyAgICAgICAgICAgIHNlbGYuZ2l0KCJhZGQi
LCAqYXJncykKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQor
CisgICAgZGVmIGNvbW1pdF9wYXRjaChzZWxmKToKKyAgICAgICAgYXNzZXJ0IHNlbGYubWVzc2Fn
ZSBpcyBub3QgTm9uZQorCisgICAgICAgIGlmIHNlbGYuZ2l0KCJkaWZmIiwgIi0tbmFtZS1vbmx5
IiwgIi0tc3RhZ2VkIiwgIi16Iikuc3RyaXAoKToKKyAgICAgICAgICAgIHNlbGYuZ2l0KCJjb21t
aXQiLCAiLW0iLCBzZWxmLm1lc3NhZ2UpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAg
ICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGluaXQoc2VsZik6CisgICAgICAgIHNlbGYuZ2l0
KCJpbml0IikKKyAgICAgICAgYXNzZXJ0IHZjcy5pc19naXRfcm9vdChzZWxmLnJvb3QpCisKKyAg
ICBkZWYgY2hlY2tvdXQoc2VsZiwgcmV2LCBicmFuY2g9Tm9uZSwgZm9yY2U9RmFsc2UpOgorICAg
ICAgICAiIiJDaGVja291dCBhIHBhcnRpY3VsYXIgcmV2aXNpb24sIG9wdGlvbmFsbHkgaW50byBh
IG5hbWVkIGJyYW5jaC4KKworICAgICAgICA6cGFyYW0gcmV2OiBSZXZpc2lvbiBpZGVudGlmaWVy
IChlLmcuIFNIQTEpIHRvIGNoZWNrb3V0CisgICAgICAgIDpwYXJhbSBicmFuY2g6IEJyYW5jaCBu
YW1lIHRvIHVzZQorICAgICAgICA6cGFyYW0gZm9yY2U6IEZvcmNlLWNoZWNrb3V0CisgICAgICAg
ICIiIgorICAgICAgICBhc3NlcnQgcmV2IGlzIG5vdCBOb25lCisKKyAgICAgICAgYXJncyA9IFtd
CisgICAgICAgIGlmIGJyYW5jaDoKKyAgICAgICAgICAgIGJyYW5jaGVzID0gW3JlZltsZW4oInJl
ZnMvaGVhZHMvIik6XSBmb3Igc2hhMSwgcmVmIGluIHNlbGYubGlzdF9yZWZzKCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIHJlZi5zdGFydHN3aXRoKCJyZWZzL2hlYWRzLyIpXQorICAgICAg
ICAgICAgYnJhbmNoID0gZ2V0X3VuaXF1ZV9uYW1lKGJyYW5jaGVzLCBicmFuY2gpCisKKyAgICAg
ICAgICAgIGFyZ3MgKz0gWyItYiIsIGJyYW5jaF0KKworICAgICAgICBpZiBmb3JjZToKKyAgICAg
ICAgICAgIGFyZ3MuYXBwZW5kKCItZiIpCisgICAgICAgIGFyZ3MuYXBwZW5kKHJldikKKyAgICAg
ICAgc2VsZi5naXQoImNoZWNrb3V0IiwgKmFyZ3MpCisKKyAgICBkZWYgdXBkYXRlKHNlbGYsIHJl
bW90ZSwgcmVtb3RlX2JyYW5jaCwgbG9jYWxfYnJhbmNoKToKKyAgICAgICAgIiIiRmV0Y2ggZnJv
bSB0aGUgcmVtb3RlIGFuZCBjaGVja291dCBpbnRvIGEgbG9jYWwgYnJhbmNoLgorCisgICAgICAg
IDpwYXJhbSByZW1vdGU6IFVSTCB0byB0aGUgcmVtb3RlIHJlcG9zaXRvcnkKKyAgICAgICAgOnBh
cmFtIHJlbW90ZV9icmFuY2g6IEJyYW5jaCBvbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgdG8gY2hl
Y2sgb3V0CisgICAgICAgIDpwYXJhbSBsb2NhbF9icmFuY2g6IExvY2FsIGJyYW5jaCBuYW1lIHRv
IGNoZWNrIG91dCBpbnRvCisgICAgICAgICIiIgorICAgICAgICBpZiBub3QgdmNzLmlzX2dpdF9y
b290KHNlbGYucm9vdCk6CisgICAgICAgICAgICBzZWxmLmluaXQoKQorICAgICAgICBzZWxmLmdp
dCgiY2xlYW4iLCAiLXhkZiIpCisgICAgICAgIHNlbGYuZ2l0KCJmZXRjaCIsIHJlbW90ZSwgIiVz
OiVzIiAlIChyZW1vdGVfYnJhbmNoLCBsb2NhbF9icmFuY2gpKQorICAgICAgICBzZWxmLmNoZWNr
b3V0KGxvY2FsX2JyYW5jaCkKKyAgICAgICAgc2VsZi5naXQoInN1Ym1vZHVsZSIsICJ1cGRhdGUi
LCAiLS1pbml0IiwgIi0tcmVjdXJzaXZlIikKKworICAgIGRlZiBjbGVhbihzZWxmKToKKyAgICAg
ICAgc2VsZi5naXQoImNoZWNrb3V0Iiwgc2VsZi5yZXYpCisgICAgICAgIHNlbGYuZ2l0KCJicmFu
Y2giLCAiLUQiLCBzZWxmLmxvY2FsX2JyYW5jaCkKKworICAgIGRlZiBwYXRocyhzZWxmKToKKyAg
ICAgICAgIiIiTGlzdCBwYXRocyBpbiB0aGUgdHJlZSIiIgorICAgICAgICByZXBvX3BhdGhzID0g
W3NlbGYucm9vdF0gKyAgW29zLnBhdGguam9pbihzZWxmLnJvb3QsIHBhdGgpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHBhdGggaW4gc2VsZi5zdWJtb2R1bGVzKCld
CisKKyAgICAgICAgcnYgPSBbXQorCisgICAgICAgIGZvciByZXBvX3BhdGggaW4gcmVwb19wYXRo
czoKKyAgICAgICAgICAgIHBhdGhzID0gdmNzLmdpdCgibHMtdHJlZSIsICItciIsICItLW5hbWUt
b25seSIsICJIRUFEIiwgcmVwbz1yZXBvX3BhdGgpLnNwbGl0KCJcbiIpCisgICAgICAgICAgICBy
di5leHRlbmQob3MucGF0aC5yZWxwYXRoKG9zLnBhdGguam9pbihyZXBvX3BhdGgsIGl0ZW0pLCBz
ZWxmLnJvb3QpIGZvciBpdGVtIGluIHBhdGhzCisgICAgICAgICAgICAgICAgICAgICAgaWYgaXRl
bS5zdHJpcCgpKQorICAgICAgICByZXR1cm4gcnYKKworICAgIGRlZiBzdWJtb2R1bGVzKHNlbGYp
OgorICAgICAgICAiIiJMaXN0IHN1Ym1vZHVsZSBkaXJlY3RvcmllcyIiIgorICAgICAgICBvdXRw
dXQgPSBzZWxmLmdpdCgic3VibW9kdWxlIiwgInN0YXR1cyIsICItLXJlY3Vyc2l2ZSIpCisgICAg
ICAgIHJ2ID0gW10KKyAgICAgICAgZm9yIGxpbmUgaW4gb3V0cHV0LnNwbGl0KCJcbiIpOgorICAg
ICAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQorICAgICAgICAgICAgaWYgbm90IGxpbmU6Cisg
ICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHBhcnRzID0gbGluZS5zcGxpdCgi
ICIpCisgICAgICAgICAgICBydi5hcHBlbmQocGFydHNbMV0pCisgICAgICAgIHJldHVybiBydgor
CisgICAgZGVmIGNvbnRhaW5zX2NvbW1pdChzZWxmLCBjb21taXQpOgorICAgICAgICB0cnk6Cisg
ICAgICAgICAgICBzZWxmLmdpdCgicmV2LXBhcnNlIiwgIi0tdmVyaWZ5IiwgY29tbWl0LnNoYTEp
CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxs
ZWRQcm9jZXNzRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworCitjbGFzcyBDb21t
aXRNZXNzYWdlKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRleHQpOgorICAgICAg
ICBzZWxmLnRleHQgPSB0ZXh0CisgICAgICAgIHNlbGYuX3BhcnNlX21lc3NhZ2UoKQorCisgICAg
ZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnRleHQKKworICAgIGRlZiBf
cGFyc2VfbWVzc2FnZShzZWxmKToKKyAgICAgICAgbGluZXMgPSBzZWxmLnRleHQuc3BsaXRsaW5l
cygpCisgICAgICAgIHNlbGYuZnVsbF9zdW1tYXJ5ID0gbGluZXNbMF0KKyAgICAgICAgc2VsZi5i
b2R5ID0gIlxuIi5qb2luKGxpbmVzWzE6XSkKKworCitjbGFzcyBDb21taXQob2JqZWN0KToKKyAg
ICBtc2dfY2xzID0gQ29tbWl0TWVzc2FnZQorCisgICAgX3NoYTFfcmUgPSByZS5jb21waWxlKCJe
WzAtOWEtZl17NDB9JCIpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdHJlZSwgc2hhMSk6Cisg
ICAgICAgICIiIk9iamVjdCByZXByZXNlbnRpbmcgYSBjb21taXQgaW4gYSBzcGVjaWZpYyBHaXRU
cmVlLgorCisgICAgICAgIDpwYXJhbSB0cmVlOiBHaXRUcmVlIHRvIHdoaWNoIHRoaXMgY29tbWl0
IGJlbG9uZ3MuCisgICAgICAgIDpwYXJhbSBzaGExOiBGdWxsIHNoYTEgc3RyaW5nIGZvciB0aGUg
Y29tbWl0CisgICAgICAgICIiIgorICAgICAgICBhc3NlcnQgc2VsZi5fc2hhMV9yZS5tYXRjaChz
aGExKQorCisgICAgICAgIHNlbGYudHJlZSA9IHRyZWUKKyAgICAgICAgc2VsZi5naXQgPSB0cmVl
LmdpdAorICAgICAgICBzZWxmLnNoYTEgPSBzaGExCisgICAgICAgIHNlbGYuYXV0aG9yLCBzZWxm
LmVtYWlsLCBzZWxmLm1lc3NhZ2UgPSBzZWxmLl9nZXRfbWV0YSgpCisKKyAgICBkZWYgX19nZXRz
dGF0ZV9fKHNlbGYpOgorICAgICAgICBydiA9IHNlbGYuX19kaWN0X18uY29weSgpCisgICAgICAg
IGRlbCBydlsnZ2l0J10KKyAgICAgICAgcmV0dXJuIHJ2CisKKyAgICBkZWYgX19zZXRzdGF0ZV9f
KHNlbGYsIGRpY3QpOgorICAgICAgICBzZWxmLl9fZGljdF9fLnVwZGF0ZShkaWN0KQorICAgICAg
ICBzZWxmLmdpdCA9IHNlbGYudHJlZS5naXQKKworICAgIGRlZiBfZ2V0X21ldGEoc2VsZik6Cisg
ICAgICAgIGF1dGhvciwgZW1haWwsIG1lc3NhZ2UgPSBzZWxmLmdpdCgic2hvdyIsICItcyIsICIt
LWZvcm1hdD1mb3JtYXQ6JWFuXG4lYWVcbiVCIiwgc2VsZi5zaGExKS5zcGxpdCgiXG4iLCAyKQor
ICAgICAgICByZXR1cm4gYXV0aG9yLCBlbWFpbCwgc2VsZi5tc2dfY2xzKG1lc3NhZ2UpCmRpZmYg
LS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1
bm5lci91cGRhdGUvdXBkYXRlLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xz
L3dwdHJ1bm5lci93cHRydW5uZXIvdXBkYXRlL3VwZGF0ZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uM2Q3ZDc3MjA4NGIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJE
cml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci91cGRhdGUv
dXBkYXRlLnB5CkBAIC0wLDAgKzEsMTU5IEBACitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKKworZnJv
bSBtZXRhZGF0YSBpbXBvcnQgTWV0YWRhdGFVcGRhdGVSdW5uZXIKK2Zyb20gc3luYyBpbXBvcnQg
U3luY0Zyb21VcHN0cmVhbVJ1bm5lcgorZnJvbSB0cmVlIGltcG9ydCBHaXRUcmVlLCBIZ1RyZWUs
IE5vVkNTVHJlZQorCitmcm9tIC4uIGltcG9ydCBlbnZpcm9ubWVudCBhcyBlbnYKK2Zyb20gYmFz
ZSBpbXBvcnQgU3RlcCwgU3RlcFJ1bm5lciwgZXhpdF9jbGVhbiwgZXhpdF91bmNsZWFuCitmcm9t
IHN0YXRlIGltcG9ydCBTdGF0ZQorCitkZWYgc2V0dXBfcGF0aHMoc3luY19wYXRoKToKKyAgICBz
eXMucGF0aC5pbnNlcnQoMCwgb3MucGF0aC5hYnNwYXRoKHN5bmNfcGF0aCkpCisgICAgdHJ5Ogor
ICAgICAgICBmcm9tIHRvb2xzIGltcG9ydCBsb2NhbHBhdGhzCisgICAgZXhjZXB0IEltcG9ydEVy
cm9yOgorICAgICAgICBmcm9tIHdwdF90b29scyBpbXBvcnQgbG9jYWxwYXRocworCitjbGFzcyBM
b2FkQ29uZmlnKFN0ZXApOgorICAgICIiIlN0ZXAgZm9yIGxvYWRpbmcgY29uZmlndXJhdGlvbiBm
cm9tIHRoZSBpbmkgZmlsZSBhbmQga3dhcmdzLiIiIgorCisgICAgcHJvdmlkZXMgPSBbInN5bmMi
LCAicGF0aHMiLCAibWV0YWRhdGFfcGF0aCIsICJ0ZXN0c19wYXRoIl0KKworICAgIGRlZiBjcmVh
dGUoc2VsZiwgc3RhdGUpOgorICAgICAgICBzdGF0ZS5zeW5jID0geyJyZW1vdGVfdXJsIjogc3Rh
dGUua3dhcmdzWyJyZW1vdGVfdXJsIl0sCisgICAgICAgICAgICAgICAgICAgICAgImJyYW5jaCI6
IHN0YXRlLmt3YXJnc1siYnJhbmNoIl0sCisgICAgICAgICAgICAgICAgICAgICAgInBhdGgiOiBz
dGF0ZS5rd2FyZ3NbInN5bmNfcGF0aCJdfQorCisgICAgICAgIHN0YXRlLnBhdGhzID0gc3RhdGUu
a3dhcmdzWyJ0ZXN0X3BhdGhzIl0KKyAgICAgICAgc3RhdGUudGVzdHNfcGF0aCA9IHN0YXRlLnBh
dGhzWyIvIl1bInRlc3RzX3BhdGgiXQorICAgICAgICBzdGF0ZS5tZXRhZGF0YV9wYXRoID0gc3Rh
dGUucGF0aHNbIi8iXVsibWV0YWRhdGFfcGF0aCJdCisKKyAgICAgICAgYXNzZXJ0IG9zLnBhdGgu
aXNhYnMoc3RhdGUudGVzdHNfcGF0aCkKKworCitjbGFzcyBMb2FkVHJlZXMoU3RlcCk6CisgICAg
IiIiU3RlcCBmb3IgY3JlYXRpbmcgYSBUcmVlIGZvciB0aGUgbG9jYWwgY29weSBhbmQgYSBHaXRU
cmVlIGZvciB0aGUKKyAgICB1cHN0cmVhbSBzeW5jLiIiIgorCisgICAgcHJvdmlkZXMgPSBbImxv
Y2FsX3RyZWUiLCAic3luY190cmVlIl0KKworICAgIGRlZiBjcmVhdGUoc2VsZiwgc3RhdGUpOgor
ICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzdGF0ZS5zeW5jWyJwYXRoIl0pOgorICAgICAgICAg
ICAgc3luY190cmVlID0gR2l0VHJlZShyb290PXN0YXRlLnN5bmNbInBhdGgiXSkKKyAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgIHN5bmNfdHJlZSA9IE5vbmUKKworICAgICAgICBpZiBHaXRUcmVl
LmlzX3R5cGUoKToKKyAgICAgICAgICAgIGxvY2FsX3RyZWUgPSBHaXRUcmVlKCkKKyAgICAgICAg
ZWxpZiBIZ1RyZWUuaXNfdHlwZSgpOgorICAgICAgICAgICAgbG9jYWxfdHJlZSA9IEhnVHJlZSgp
CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2NhbF90cmVlID0gTm9WQ1NUcmVlKCkKKwor
ICAgICAgICBzdGF0ZS51cGRhdGUoeyJsb2NhbF90cmVlIjogbG9jYWxfdHJlZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAic3luY190cmVlIjogc3luY190cmVlfSkKKworCitjbGFzcyBTeW5jRnJv
bVVwc3RyZWFtKFN0ZXApOgorICAgICIiIlN0ZXAgdGhhdCBzeW5jaHJvbmlzZXMgYSBsb2NhbCBj
b3B5IG9mIHRoZSBjb2RlIHdpdGggdXBzdHJlYW0uIiIiCisKKyAgICBkZWYgY3JlYXRlKHNlbGYs
IHN0YXRlKToKKyAgICAgICAgaWYgbm90IHN0YXRlLmt3YXJnc1sic3luYyJdOgorICAgICAgICAg
ICAgcmV0dXJuCisKKyAgICAgICAgaWYgbm90IHN0YXRlLnN5bmNfdHJlZToKKyAgICAgICAgICAg
IG9zLm1rZGlyKHN0YXRlLnN5bmNbInBhdGgiXSkKKyAgICAgICAgICAgIHN0YXRlLnN5bmNfdHJl
ZSA9IEdpdFRyZWUocm9vdD1zdGF0ZS5zeW5jWyJwYXRoIl0pCisKKyAgICAgICAga3dhcmdzID0g
c3RhdGUua3dhcmdzCisgICAgICAgIHdpdGggc3RhdGUucHVzaChbInN5bmMiLCAicGF0aHMiLCAi
bWV0YWRhdGFfcGF0aCIsICJ0ZXN0c19wYXRoIiwgImxvY2FsX3RyZWUiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICJzeW5jX3RyZWUiXSk6CisgICAgICAgICAgICBzdGF0ZS50YXJnZXRfcmV2
ID0ga3dhcmdzWyJyZXYiXQorICAgICAgICAgICAgc3RhdGUucGF0Y2ggPSBrd2FyZ3NbInBhdGNo
Il0KKyAgICAgICAgICAgIHN0YXRlLnN1aXRlX25hbWUgPSBrd2FyZ3NbInN1aXRlX25hbWUiXQor
ICAgICAgICAgICAgc3RhdGUucGF0aF9leGNsdWRlcyA9IGt3YXJnc1siZXhjbHVkZSJdCisgICAg
ICAgICAgICBzdGF0ZS5wYXRoX2luY2x1ZGVzID0ga3dhcmdzWyJpbmNsdWRlIl0KKyAgICAgICAg
ICAgIHJ1bm5lciA9IFN5bmNGcm9tVXBzdHJlYW1SdW5uZXIoc2VsZi5sb2dnZXIsIHN0YXRlKQor
ICAgICAgICAgICAgcnVubmVyLnJ1bigpCisKKworY2xhc3MgVXBkYXRlTWV0YWRhdGEoU3RlcCk6
CisgICAgIiIiVXBkYXRlIHRoZSBleHBlY3RhdGlvbiBtZXRhZGF0YSBmcm9tIGEgc2V0IG9mIHJ1
biBsb2dzIiIiCisKKyAgICBkZWYgY3JlYXRlKHNlbGYsIHN0YXRlKToKKyAgICAgICAgaWYgbm90
IHN0YXRlLmt3YXJnc1sicnVuX2xvZyJdOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAg
a3dhcmdzID0gc3RhdGUua3dhcmdzCisgICAgICAgIHdpdGggc3RhdGUucHVzaChbImxvY2FsX3Ry
ZWUiLCAic3luY190cmVlIiwgInBhdGhzIiwgInNlcnZlX3Jvb3QiXSk6CisgICAgICAgICAgICBz
dGF0ZS5ydW5fbG9nID0ga3dhcmdzWyJydW5fbG9nIl0KKyAgICAgICAgICAgIHN0YXRlLmlnbm9y
ZV9leGlzdGluZyA9IGt3YXJnc1siaWdub3JlX2V4aXN0aW5nIl0KKyAgICAgICAgICAgIHN0YXRl
LnBhdGNoID0ga3dhcmdzWyJwYXRjaCJdCisgICAgICAgICAgICBzdGF0ZS5zdWl0ZV9uYW1lID0g
a3dhcmdzWyJzdWl0ZV9uYW1lIl0KKyAgICAgICAgICAgIHN0YXRlLnByb2R1Y3QgPSBrd2FyZ3Nb
InByb2R1Y3QiXQorICAgICAgICAgICAgc3RhdGUuY29uZmlnID0ga3dhcmdzWyJjb25maWciXQor
ICAgICAgICAgICAgcnVubmVyID0gTWV0YWRhdGFVcGRhdGVSdW5uZXIoc2VsZi5sb2dnZXIsIHN0
YXRlKQorICAgICAgICAgICAgcnVubmVyLnJ1bigpCisKKworY2xhc3MgVXBkYXRlUnVubmVyKFN0
ZXBSdW5uZXIpOgorICAgICIiIlJ1bm5lciBmb3IgZG9pbmcgYW4gb3ZlcmFsbCB1cGRhdGUuIiIi
CisgICAgc3RlcHMgPSBbTG9hZENvbmZpZywKKyAgICAgICAgICAgICBMb2FkVHJlZXMsCisgICAg
ICAgICAgICAgU3luY0Zyb21VcHN0cmVhbSwKKyAgICAgICAgICAgICBVcGRhdGVNZXRhZGF0YV0K
KworCitjbGFzcyBXUFRVcGRhdGUob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9n
Z2VyLCBydW5uZXJfY2xzPVVwZGF0ZVJ1bm5lciwgKiprd2FyZ3MpOgorICAgICAgICAiIiJPYmpl
Y3QgdGhhdCBjb250cm9scyB0aGUgcnVubmluZyBvZiBhIHdob2xlIHdwdHVwZGF0ZS4KKworICAg
ICAgICA6cGFyYW0gcnVubmVyX2NsczogUnVubmVyIHN1YmNsYXNzIGhvbGRpbmcgdGhlIG92ZXJh
bGwgbGlzdCBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlcHMgdG8gcnVuLgorICAg
ICAgICA6cGFyYW0ga3dhcmdzOiBDb21tYW5kIGxpbmUgYXJndW1lbnRzCisgICAgICAgICIiIgor
ICAgICAgICBzZWxmLnJ1bm5lcl9jbHMgPSBydW5uZXJfY2xzCisgICAgICAgIHNlbGYuc2VydmVf
cm9vdCA9IGt3YXJnc1sidGVzdF9wYXRocyJdWyIvIl1bInRlc3RzX3BhdGgiXQorCisgICAgICAg
IGlmIG5vdCBrd2FyZ3NbInN5bmMiXToKKyAgICAgICAgICAgIHNldHVwX3BhdGhzKHNlbGYuc2Vy
dmVfcm9vdCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGt3
YXJnc1sic3luY19wYXRoIl0pOgorICAgICAgICAgICAgICAgICMgSWYgdGhlIHN5bmMgcGF0aCBk
b2Vzbid0IGV4aXN0IHdlIGRlZmVyIHRoaXMgdW50aWwgaXQgZG9lcworICAgICAgICAgICAgICAg
IHNldHVwX3BhdGhzKGt3YXJnc1sic3luY19wYXRoIl0pCisKKyAgICAgICAgc2VsZi5zdGF0ZSA9
IFN0YXRlKGxvZ2dlcikKKyAgICAgICAgc2VsZi5rd2FyZ3MgPSBrd2FyZ3MKKyAgICAgICAgc2Vs
Zi5sb2dnZXIgPSBsb2dnZXIKKworICAgIGRlZiBydW4oc2VsZiwgKiprd2FyZ3MpOgorICAgICAg
ICBpZiBzZWxmLmt3YXJnc1siYWJvcnQiXToKKyAgICAgICAgICAgIHNlbGYuYWJvcnQoKQorICAg
ICAgICAgICAgcmV0dXJuIGV4aXRfY2xlYW4KKworICAgICAgICBpZiBub3Qgc2VsZi5rd2FyZ3Nb
ImNvbnRpbnVlIl0gYW5kIG5vdCBzZWxmLnN0YXRlLmlzX2VtcHR5KCk6CisgICAgICAgICAgICBz
ZWxmLmxvZ2dlci5lcnJvcigiRm91bmQgZXhpc3Rpbmcgc3RhdGUuIFJ1biB3aXRoIC0tY29udGlu
dWUgdG8gcmVzdW1lIG9yIC0tYWJvcnQgdG8gY2xlYXIgc3RhdGUiKQorICAgICAgICAgICAgcmV0
dXJuIGV4aXRfdW5jbGVhbgorCisgICAgICAgIGlmIHNlbGYua3dhcmdzWyJjb250aW51ZSJdOgor
ICAgICAgICAgICAgaWYgc2VsZi5zdGF0ZS5pc19lbXB0eSgpOgorICAgICAgICAgICAgICAgIHNl
bGYubG9nZ2VyLmVycm9yKCJObyBzeW5jIGluIHByb2dyZXNzPyIpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGV4aXRfY2xlYW4KKworICAgICAgICAgICAgc2VsZi5rd2FyZ3MgPSBzZWxmLnN0YXRl
Lmt3YXJncworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5zdGF0ZS5rd2FyZ3MgPSBz
ZWxmLmt3YXJncworCisgICAgICAgIHNlbGYuc3RhdGUuc2VydmVfcm9vdCA9IHNlbGYuc2VydmVf
cm9vdAorCisgICAgICAgIHVwZGF0ZV9ydW5uZXIgPSBzZWxmLnJ1bm5lcl9jbHMoc2VsZi5sb2dn
ZXIsIHNlbGYuc3RhdGUpCisgICAgICAgIHJ2ID0gdXBkYXRlX3J1bm5lci5ydW4oKQorICAgICAg
ICBpZiBydiBpbiAoZXhpdF9jbGVhbiwgTm9uZSk6CisgICAgICAgICAgICBzZWxmLnN0YXRlLmNs
ZWFyKCkKKworICAgICAgICByZXR1cm4gcnYKKworICAgIGRlZiBhYm9ydChzZWxmKToKKyAgICAg
ICAgc2VsZi5zdGF0ZS5jbGVhcigpCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRl
ZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci92Y3MucHkgYi9XZWJEcml2ZXJUZXN0cy9p
bXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci92Y3MucHkKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjE2ZDUzYWZjOGJlCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIv
dmNzLnB5CkBAIC0wLDAgKzEsNDkgQEAKK2ltcG9ydCBzdWJwcm9jZXNzCitmcm9tIGZ1bmN0b29s
cyBpbXBvcnQgcGFydGlhbAorCitmcm9tIG1vemxvZyBpbXBvcnQgZ2V0X2RlZmF1bHRfbG9nZ2Vy
CisKK2xvZ2dlciA9IE5vbmUKKworZGVmIHZjcyhiaW5fbmFtZSk6CisgICAgZGVmIGlubmVyKGNv
bW1hbmQsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGdsb2JhbCBsb2dnZXIKKworICAgICAg
ICBpZiBsb2dnZXIgaXMgTm9uZToKKyAgICAgICAgICAgIGxvZ2dlciA9IGdldF9kZWZhdWx0X2xv
Z2dlcigidmNzIikKKworICAgICAgICByZXBvID0ga3dhcmdzLnBvcCgicmVwbyIsIE5vbmUpCisg
ICAgICAgIGxvZ19lcnJvciA9IGt3YXJncy5wb3AoImxvZ19lcnJvciIsIFRydWUpCisgICAgICAg
IGlmIGt3YXJnczoKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvciwga3dhcmdzCisKKyAgICAg
ICAgYXJncyA9IGxpc3QoYXJncykKKworICAgICAgICBwcm9jX2t3YXJncyA9IHt9CisgICAgICAg
IGlmIHJlcG8gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBwcm9jX2t3YXJnc1siY3dkIl0gPSBy
ZXBvCisKKyAgICAgICAgY29tbWFuZF9saW5lID0gW2Jpbl9uYW1lLCBjb21tYW5kXSArIGFyZ3MK
KyAgICAgICAgbG9nZ2VyLmRlYnVnKCIgIi5qb2luKGNvbW1hbmRfbGluZSkpCisgICAgICAgIHRy
eToKKyAgICAgICAgICAgIHJldHVybiBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjb21tYW5kX2xp
bmUsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwgKipwcm9jX2t3YXJncykKKyAgICAgICAgZXhj
ZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICBpZiBs
b2dfZXJyb3I6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGUub3V0cHV0KQorICAgICAg
ICAgICAgcmFpc2UKKyAgICByZXR1cm4gaW5uZXIKKworZ2l0ID0gdmNzKCJnaXQiKQoraGcgPSB2
Y3MoImhnIikKKworCitkZWYgYmluZF90b19yZXBvKHZjc19mdW5jLCByZXBvKToKKyAgICByZXR1
cm4gcGFydGlhbCh2Y3NfZnVuYywgcmVwbz1yZXBvKQorCisKK2RlZiBpc19naXRfcm9vdChwYXRo
KToKKyAgICB0cnk6CisgICAgICAgIHJ2ID0gZ2l0KCJyZXYtcGFyc2UiLCAiLS1zaG93LWNkdXAi
LCByZXBvPXBhdGgpCisgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yOgor
ICAgICAgICByZXR1cm4gRmFsc2UKKyAgICByZXR1cm4gcnYgPT0gIlxuIgpkaWZmIC0tZ2l0IGEv
V2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvd2Vi
ZHJpdmVyX3NlcnZlci5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRy
dW5uZXIvd3B0cnVubmVyL3dlYmRyaXZlcl9zZXJ2ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAuLmY3ODU5M2U0ZTU5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJp
dmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvd2ViZHJpdmVy
X3NlcnZlci5weQpAQCAtMCwwICsxLDI0NCBAQAoraW1wb3J0IGFiYworaW1wb3J0IGVycm5vCitp
bXBvcnQgb3MKK2ltcG9ydCBwbGF0Zm9ybQoraW1wb3J0IHNvY2tldAoraW1wb3J0IHRocmVhZGlu
ZworaW1wb3J0IHRpbWUKK2ltcG9ydCB0cmFjZWJhY2sKK2ltcG9ydCB1cmxwYXJzZQorCitpbXBv
cnQgbW96cHJvY2VzcworCisKK19fYWxsX18gPSBbIlNlbGVuaXVtU2VydmVyIiwgIkNocm9tZURy
aXZlclNlcnZlciIsCisgICAgICAgICAgICJHZWNrb0RyaXZlclNlcnZlciIsICJJbnRlcm5ldEV4
cGxvcmVyRHJpdmVyU2VydmVyIiwKKyAgICAgICAgICAgIlNlcnZvRHJpdmVyU2VydmVyIiwgIldl
YkRyaXZlclNlcnZlciJdCisKKworY2xhc3MgV2ViRHJpdmVyU2VydmVyKG9iamVjdCk6CisgICAg
X19tZXRhY2xhc3NfXyA9IGFiYy5BQkNNZXRhCisKKyAgICBkZWZhdWx0X2Jhc2VfcGF0aCA9ICIv
IgorICAgIF91c2VkX3BvcnRzID0gc2V0KCkKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2dn
ZXIsIGJpbmFyeSwgaG9zdD0iMTI3LjAuMC4xIiwgcG9ydD1Ob25lLAorICAgICAgICAgICAgICAg
ICBiYXNlX3BhdGg9IiIsIGVudj1Ob25lLCBhcmdzPU5vbmUpOgorICAgICAgICBpZiBiaW5hcnkg
aXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIldlYkRyaXZlciBzZXJ2ZXIg
YmluYXJ5IG11c3QgYmUgZ2l2ZW4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidG8g
LS13ZWJkcml2ZXItYmluYXJ5IGFyZ3VtZW50IikKKworICAgICAgICBzZWxmLmxvZ2dlciA9IGxv
Z2dlcgorICAgICAgICBzZWxmLmJpbmFyeSA9IGJpbmFyeQorICAgICAgICBzZWxmLmhvc3QgPSBo
b3N0CisgICAgICAgIGlmIGJhc2VfcGF0aCA9PSAiIjoKKyAgICAgICAgICAgIHNlbGYuYmFzZV9w
YXRoID0gc2VsZi5kZWZhdWx0X2Jhc2VfcGF0aAorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
c2VsZi5iYXNlX3BhdGggPSBiYXNlX3BhdGgKKyAgICAgICAgc2VsZi5lbnYgPSBvcy5lbnZpcm9u
LmNvcHkoKSBpZiBlbnYgaXMgTm9uZSBlbHNlIGVudgorCisgICAgICAgIHNlbGYuX3BvcnQgPSBw
b3J0CisgICAgICAgIHNlbGYuX2NtZCA9IE5vbmUKKyAgICAgICAgc2VsZi5fYXJncyA9IGFyZ3Mg
aWYgYXJncyBpcyBub3QgTm9uZSBlbHNlIFtdCisgICAgICAgIHNlbGYuX3Byb2MgPSBOb25lCisK
KyAgICBAYWJjLmFic3RyYWN0bWV0aG9kCisgICAgZGVmIG1ha2VfY29tbWFuZChzZWxmKToKKyAg
ICAgICAgIiIiUmV0dXJucyB0aGUgZnVsbCBjb21tYW5kIGZvciBzdGFydGluZyB0aGUgc2VydmVy
IHByb2Nlc3MgYXMgYSBsaXN0LiIiIgorCisgICAgZGVmIHN0YXJ0KHNlbGYsIGJsb2NrPUZhbHNl
KToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fcnVuKGJsb2NrKQorICAgICAgICBl
eGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICBzZWxmLnN0b3AoKQorCisgICAg
ZGVmIF9ydW4oc2VsZiwgYmxvY2spOgorICAgICAgICBzZWxmLl9jbWQgPSBzZWxmLm1ha2VfY29t
bWFuZCgpCisgICAgICAgIHNlbGYuX3Byb2MgPSBtb3pwcm9jZXNzLlByb2Nlc3NIYW5kbGVyKAor
ICAgICAgICAgICAgc2VsZi5fY21kLAorICAgICAgICAgICAgcHJvY2Vzc091dHB1dExpbmU9c2Vs
Zi5vbl9vdXRwdXQsCisgICAgICAgICAgICBlbnY9c2VsZi5lbnYsCisgICAgICAgICAgICBzdG9y
ZU91dHB1dD1GYWxzZSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9wcm9jLnJ1
bigpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBpZiBlLmVycm5v
ID09IGVycm5vLkVOT0VOVDoKKyAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKAorICAgICAg
ICAgICAgICAgICAgICAiV2ViRHJpdmVyIEhUVFAgc2VydmVyIGV4ZWN1dGFibGUgbm90IGZvdW5k
OiAlcyIgJSBzZWxmLmJpbmFyeSkKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgc2VsZi5s
b2dnZXIuZGVidWcoCisgICAgICAgICAgICAiV2FpdGluZyBmb3Igc2VydmVyIHRvIGJlY29tZSBh
Y2Nlc3NpYmxlOiAlcyIgJSBzZWxmLnVybCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2Fp
dF9mb3Jfc2VydmljZSgoc2VsZi5ob3N0LCBzZWxmLnBvcnQpKQorICAgICAgICBleGNlcHQ6Cisg
ICAgICAgICAgICBzZWxmLmxvZ2dlci5lcnJvcigKKyAgICAgICAgICAgICAgICAiV2ViRHJpdmVy
IEhUVFAgc2VydmVyIHdhcyBub3QgYWNjZXNzaWJsZSAiCisgICAgICAgICAgICAgICAgIndpdGhp
biB0aGUgdGltZW91dDpcbiVzIiAlIHRyYWNlYmFjay5mb3JtYXRfZXhjKCkpCisgICAgICAgICAg
ICByYWlzZQorCisgICAgICAgIGlmIGJsb2NrOgorICAgICAgICAgICAgc2VsZi5fcHJvYy53YWl0
KCkKKworICAgIGRlZiBzdG9wKHNlbGYsIGZvcmNlPUZhbHNlKToKKyAgICAgICAgaWYgc2VsZi5p
c19hbGl2ZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9wcm9jLmtpbGwoKQorICAgICAgICBy
ZXR1cm4gbm90IHNlbGYuaXNfYWxpdmUKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBpc19hbGl2
ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIGhhc2F0dHIoc2VsZi5fcHJvYywgInByb2MiKSBhbmQg
c2VsZi5fcHJvYy5wb2xsKCkgaXMgTm9uZQorCisgICAgZGVmIG9uX291dHB1dChzZWxmLCBsaW5l
KToKKyAgICAgICAgc2VsZi5sb2dnZXIucHJvY2Vzc19vdXRwdXQoc2VsZi5waWQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUuZGVjb2RlKCJ1dGY4IiwgInJlcGxhY2Ui
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZD0iICIuam9pbihz
ZWxmLl9jbWQpKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHBpZChzZWxmKToKKyAgICAgICAg
aWYgc2VsZi5fcHJvYyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9wcm9j
LnBpZAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHVybChzZWxmKToKKyAgICAgICAgcmV0dXJu
ICJodHRwOi8vJXM6JWklcyIgJSAoc2VsZi5ob3N0LCBzZWxmLnBvcnQsIHNlbGYuYmFzZV9wYXRo
KQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHBvcnQoc2VsZik6CisgICAgICAgIGlmIHNlbGYu
X3BvcnQgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3BvcnQgPSBzZWxmLl9maW5kX25leHRf
ZnJlZV9wb3J0KCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX3BvcnQKKworICAgIEBzdGF0aWNtZXRo
b2QKKyAgICBkZWYgX2ZpbmRfbmV4dF9mcmVlX3BvcnQoKToKKyAgICAgICAgcG9ydCA9IGdldF9m
cmVlX3BvcnQoNDQ0NCwgZXhjbHVkZT1XZWJEcml2ZXJTZXJ2ZXIuX3VzZWRfcG9ydHMpCisgICAg
ICAgIFdlYkRyaXZlclNlcnZlci5fdXNlZF9wb3J0cy5hZGQocG9ydCkKKyAgICAgICAgcmV0dXJu
IHBvcnQKKworCitjbGFzcyBTZWxlbml1bVNlcnZlcihXZWJEcml2ZXJTZXJ2ZXIpOgorICAgIGRl
ZmF1bHRfYmFzZV9wYXRoID0gIi93ZC9odWIiCisKKyAgICBkZWYgbWFrZV9jb21tYW5kKHNlbGYp
OgorICAgICAgICByZXR1cm4gWyJqYXZhIiwgIi1qYXIiLCBzZWxmLmJpbmFyeSwgIi1wb3J0Iiwg
c3RyKHNlbGYucG9ydCldICsgc2VsZi5fYXJncworCisKK2NsYXNzIENocm9tZURyaXZlclNlcnZl
cihXZWJEcml2ZXJTZXJ2ZXIpOgorICAgIGRlZmF1bHRfYmFzZV9wYXRoID0gIi8iCisKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgbG9nZ2VyLCBiaW5hcnk9ImNocm9tZWRyaXZlciIsIHBvcnQ9Tm9u
ZSwKKyAgICAgICAgICAgICAgICAgYmFzZV9wYXRoPSIiLCBhcmdzPU5vbmUpOgorICAgICAgICBX
ZWJEcml2ZXJTZXJ2ZXIuX19pbml0X18oCisgICAgICAgICAgICBzZWxmLCBsb2dnZXIsIGJpbmFy
eSwgcG9ydD1wb3J0LCBiYXNlX3BhdGg9YmFzZV9wYXRoLCBhcmdzPWFyZ3MpCisKKyAgICBkZWYg
bWFrZV9jb21tYW5kKHNlbGYpOgorICAgICAgICByZXR1cm4gW3NlbGYuYmluYXJ5LAorICAgICAg
ICAgICAgICAgIGNtZF9hcmcoInBvcnQiLCBzdHIoc2VsZi5wb3J0KSksCisgICAgICAgICAgICAg
ICAgY21kX2FyZygidXJsLWJhc2UiLCBzZWxmLmJhc2VfcGF0aCkgaWYgc2VsZi5iYXNlX3BhdGgg
ZWxzZSAiIl0gKyBzZWxmLl9hcmdzCisKKworY2xhc3MgRWRnZURyaXZlclNlcnZlcihXZWJEcml2
ZXJTZXJ2ZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2dnZXIsIGJpbmFyeT0iTWljcm9z
b2Z0V2ViRHJpdmVyLmV4ZSIsIHBvcnQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgYmFzZV9wYXRo
PSIiLCBob3N0PSJsb2NhbGhvc3QiLCBhcmdzPU5vbmUpOgorICAgICAgICBXZWJEcml2ZXJTZXJ2
ZXIuX19pbml0X18oCisgICAgICAgICAgICBzZWxmLCBsb2dnZXIsIGJpbmFyeSwgaG9zdD1ob3N0
LCBwb3J0PXBvcnQsIGFyZ3M9YXJncykKKworICAgIGRlZiBtYWtlX2NvbW1hbmQoc2VsZik6Cisg
ICAgICAgIHJldHVybiBbc2VsZi5iaW5hcnksCisgICAgICAgICAgICAgICAgIi0tcG9ydD0lcyIg
JSBzdHIoc2VsZi5wb3J0KV0gKyBzZWxmLl9hcmdzCisKKworY2xhc3MgSW50ZXJuZXRFeHBsb3Jl
ckRyaXZlclNlcnZlcihXZWJEcml2ZXJTZXJ2ZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBs
b2dnZXIsIGJpbmFyeT0iSUVEcml2ZXJTZXJ2ZXIuZXhlIiwgcG9ydD1Ob25lLAorICAgICAgICAg
ICAgICAgICBiYXNlX3BhdGg9IiIsIGhvc3Q9ImxvY2FsaG9zdCIsIGFyZ3M9Tm9uZSk6CisgICAg
ICAgIFdlYkRyaXZlclNlcnZlci5fX2luaXRfXygKKyAgICAgICAgICAgIHNlbGYsIGxvZ2dlciwg
YmluYXJ5LCBob3N0PWhvc3QsIHBvcnQ9cG9ydCwgYXJncz1hcmdzKQorCisgICAgZGVmIG1ha2Vf
Y29tbWFuZChzZWxmKToKKyAgICAgICAgcmV0dXJuIFtzZWxmLmJpbmFyeSwKKyAgICAgICAgICAg
ICAgICAiLS1wb3J0PSVzIiAlIHN0cihzZWxmLnBvcnQpXSArIHNlbGYuX2FyZ3MKKworCitjbGFz
cyBHZWNrb0RyaXZlclNlcnZlcihXZWJEcml2ZXJTZXJ2ZXIpOgorICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBsb2dnZXIsIG1hcmlvbmV0dGVfcG9ydD0yODI4LCBiaW5hcnk9ImdlY2tvZHJpdmVyIiwK
KyAgICAgICAgICAgICAgICAgaG9zdD0iMTI3LjAuMC4xIiwgcG9ydD1Ob25lLCBhcmdzPU5vbmUp
OgorICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICBlbnZbIlJVU1RfQkFD
S1RSQUNFIl0gPSAiMSIKKyAgICAgICAgV2ViRHJpdmVyU2VydmVyLl9faW5pdF9fKHNlbGYsIGxv
Z2dlciwgYmluYXJ5LCBob3N0PWhvc3QsIHBvcnQ9cG9ydCwgZW52PWVudiwgYXJncz1hcmdzKQor
ICAgICAgICBzZWxmLm1hcmlvbmV0dGVfcG9ydCA9IG1hcmlvbmV0dGVfcG9ydAorCisgICAgZGVm
IG1ha2VfY29tbWFuZChzZWxmKToKKyAgICAgICAgcmV0dXJuIFtzZWxmLmJpbmFyeSwKKyAgICAg
ICAgICAgICAgICAiLS1tYXJpb25ldHRlLXBvcnQiLCBzdHIoc2VsZi5tYXJpb25ldHRlX3BvcnQp
LAorICAgICAgICAgICAgICAgICItLWhvc3QiLCBzZWxmLmhvc3QsCisgICAgICAgICAgICAgICAg
Ii0tcG9ydCIsIHN0cihzZWxmLnBvcnQpXSArIHNlbGYuX2FyZ3MKKworCitjbGFzcyBTZXJ2b0Ry
aXZlclNlcnZlcihXZWJEcml2ZXJTZXJ2ZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2dn
ZXIsIGJpbmFyeT0ic2Vydm8iLCBiaW5hcnlfYXJncz1Ob25lLCBob3N0PSIxMjcuMC4wLjEiLCBw
b3J0PU5vbmUpOgorICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICBlbnZb
IlJVU1RfQkFDS1RSQUNFIl0gPSAiMSIKKyAgICAgICAgV2ViRHJpdmVyU2VydmVyLl9faW5pdF9f
KHNlbGYsIGxvZ2dlciwgYmluYXJ5LCBob3N0PWhvc3QsIHBvcnQ9cG9ydCwgZW52PWVudikKKyAg
ICAgICAgc2VsZi5iaW5hcnlfYXJncyA9IGJpbmFyeV9hcmdzCisKKyAgICBkZWYgbWFrZV9jb21t
YW5kKHNlbGYpOgorICAgICAgICBjb21tYW5kID0gW3NlbGYuYmluYXJ5LAorICAgICAgICAgICAg
ICAgICAgICItLXdlYmRyaXZlciIsIHN0cihzZWxmLnBvcnQpLAorICAgICAgICAgICAgICAgICAg
ICItLWhhcmQtZmFpbCIsCisgICAgICAgICAgICAgICAgICAgIi0taGVhZGxlc3MiXSArIHNlbGYu
X2FyZ3MKKyAgICAgICAgaWYgc2VsZi5iaW5hcnlfYXJnczoKKyAgICAgICAgICAgIGNvbW1hbmQg
Kz0gc2VsZi5iaW5hcnlfYXJncworICAgICAgICByZXR1cm4gY29tbWFuZAorCisKK2RlZiBjbWRf
YXJnKG5hbWUsIHZhbHVlPU5vbmUpOgorICAgIHByZWZpeCA9ICItIiBpZiBwbGF0Zm9ybS5zeXN0
ZW0oKSA9PSAiV2luZG93cyIgZWxzZSAiLS0iCisgICAgcnYgPSBwcmVmaXggKyBuYW1lCisgICAg
aWYgdmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAgIHJ2ICs9ICI9IiArIHZhbHVlCisgICAgcmV0
dXJuIHJ2CisKKworZGVmIGdldF9mcmVlX3BvcnQoc3RhcnRfcG9ydCwgZXhjbHVkZT1Ob25lKToK
KyAgICAiIiJHZXQgdGhlIGZpcnN0IHBvcnQgbnVtYmVyIGFmdGVyIHN0YXJ0X3BvcnQgKGluY2x1
c2l2ZSkgdGhhdCBpcworICAgIG5vdCBjdXJyZW50bHkgYm91bmQuCisKKyAgICA6cGFyYW0gc3Rh
cnRfcG9ydDogSW50ZWdlciBwb3J0IG51bWJlciBhdCB3aGljaCB0byBzdGFydCB0ZXN0aW5nLgor
ICAgIDpwYXJhbSBleGNsdWRlOiBTZXQgb2YgcG9ydCBudW1iZXJzIHRvIHNraXAiIiIKKyAgICBw
b3J0ID0gc3RhcnRfcG9ydAorICAgIHdoaWxlIFRydWU6CisgICAgICAgIGlmIGV4Y2x1ZGUgYW5k
IHBvcnQgaW4gZXhjbHVkZToKKyAgICAgICAgICAgIHBvcnQgKz0gMQorICAgICAgICAgICAgY29u
dGludWUKKyAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICB0cnk6CisgICAgICAg
ICAgICBzLmJpbmQoKCIxMjcuMC4wLjEiLCBwb3J0KSkKKyAgICAgICAgZXhjZXB0IHNvY2tldC5l
cnJvcjoKKyAgICAgICAgICAgIHBvcnQgKz0gMQorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
cmV0dXJuIHBvcnQKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHMuY2xvc2UoKQorCisK
K2RlZiB3YWl0X2Zvcl9zZXJ2aWNlKGFkZHIsIHRpbWVvdXQ9MTUpOgorICAgICIiIldhaXRzIHVu
dGlsIG5ldHdvcmsgc2VydmljZSBnaXZlbiBhcyBhIHR1cGxlIG9mIChob3N0LCBwb3J0KSBiZWNv
bWVzCisgICAgYXZhaWxhYmxlIG9yIHRoZSBgdGltZW91dGAgZHVyYXRpb24gaXMgcmVhY2hlZCwg
YXQgd2hpY2ggcG9pbnQKKyAgICBgYHNvY2tldC5lcnJvcmBgIGlzIHJhaXNlZC4iIiIKKyAgICBl
bmQgPSB0aW1lLnRpbWUoKSArIHRpbWVvdXQKKyAgICB3aGlsZSBlbmQgPiB0aW1lLnRpbWUoKToK
KyAgICAgICAgc28gPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAg
c28uY29ubmVjdChhZGRyKQorICAgICAgICBleGNlcHQgc29ja2V0LnRpbWVvdXQ6CisgICAgICAg
ICAgICBwYXNzCisgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKKyAgICAgICAgICAg
IGlmIGVbMF0gIT0gZXJybm8uRUNPTk5SRUZVU0VEOgorICAgICAgICAgICAgICAgIHJhaXNlCisg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBmaW5hbGx5Ogor
ICAgICAgICAgICAgc28uY2xvc2UoKQorICAgICAgICB0aW1lLnNsZWVwKDAuNSkKKyAgICByYWlz
ZSBzb2NrZXQuZXJyb3IoIlNlcnZpY2UgaXMgdW5hdmFpbGFibGU6ICVzOiVpIiAlIGFkZHIpCmRp
ZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dw
dHJ1bm5lci93cHRjb21tYW5kbGluZS5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90
b29scy93cHRydW5uZXIvd3B0cnVubmVyL3dwdGNvbW1hbmRsaW5lLnB5Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wOTY0ZTZjZjJkMwotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3dw
dGNvbW1hbmRsaW5lLnB5CkBAIC0wLDAgKzEsNTAxIEBACitpbXBvcnQgYXJncGFyc2UKK2ltcG9y
dCBhc3QKK2ltcG9ydCBvcworaW1wb3J0IHN5cworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgT3Jk
ZXJlZERpY3QKK2Zyb20gZGlzdHV0aWxzLnNwYXduIGltcG9ydCBmaW5kX2V4ZWN1dGFibGUKKwor
aW1wb3J0IGNvbmZpZworaW1wb3J0IHdwdHRlc3QKK2ltcG9ydCBmb3JtYXR0ZXJzCisKKworZGVm
IGFic19wYXRoKHBhdGgpOgorICAgIHJldHVybiBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5leHBh
bmR1c2VyKHBhdGgpKQorCisKK2RlZiB1cmxfb3JfcGF0aChwYXRoKToKKyAgICBpbXBvcnQgdXJs
cGFyc2UKKworICAgIHBhcnNlZCA9IHVybHBhcnNlLnVybHBhcnNlKHBhdGgpCisgICAgaWYgbGVu
KHBhcnNlZC5zY2hlbWUpID4gMjoKKyAgICAgICAgcmV0dXJuIHBhdGgKKyAgICBlbHNlOgorICAg
ICAgICByZXR1cm4gYWJzX3BhdGgocGF0aCkKKworCitkZWYgcmVxdWlyZV9hcmcoa3dhcmdzLCBu
YW1lLCB2YWx1ZV9mdW5jPU5vbmUpOgorICAgIGlmIHZhbHVlX2Z1bmMgaXMgTm9uZToKKyAgICAg
ICAgdmFsdWVfZnVuYyA9IGxhbWJkYSB4OiB4IGlzIG5vdCBOb25lCisKKyAgICBpZiBub3QgbmFt
ZSBpbiBrd2FyZ3Mgb3Igbm90IHZhbHVlX2Z1bmMoa3dhcmdzW25hbWVdKToKKyAgICAgICAgcHJp
bnQgPj4gc3lzLnN0ZGVyciwgIk1pc3NpbmcgcmVxdWlyZWQgYXJndW1lbnQgJXMiICUgbmFtZQor
ICAgICAgICBzeXMuZXhpdCgxKQorCisKK2RlZiBjcmVhdGVfcGFyc2VyKHByb2R1Y3RfY2hvaWNl
cz1Ob25lKToKKyAgICBmcm9tIG1vemxvZyBpbXBvcnQgY29tbWFuZGxpbmUKKworICAgIGltcG9y
dCBwcm9kdWN0cworCisgICAgaWYgcHJvZHVjdF9jaG9pY2VzIGlzIE5vbmU6CisgICAgICAgIGNv
bmZpZ19kYXRhID0gY29uZmlnLmxvYWQoKQorICAgICAgICBwcm9kdWN0X2Nob2ljZXMgPSBwcm9k
dWN0cy5wcm9kdWN0c19lbmFibGVkKGNvbmZpZ19kYXRhKQorCisgICAgcGFyc2VyID0gYXJncGFy
c2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249IiIiUnVubmVyIGZvciB3ZWItcGxhdGZvcm0t
dGVzdHMgdGVzdHMuIiIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVz
YWdlPSIiIiUocHJvZylzIFtPUFRJT05dLi4uIFtURVNUXS4uLgorCitURVNUIGlzIGVpdGhlciB0
aGUgZnVsbCBwYXRoIHRvIGEgdGVzdCBmaWxlIHRvIHJ1biwgb3IgdGhlIFVSTCBvZiBhIHRlc3Qg
ZXhjbHVkaW5nCitzY2hlbWUgaG9zdCBhbmQgcG9ydC4iIiIpCisgICAgcGFyc2VyLmFkZF9hcmd1
bWVudCgiLS1tYW5pZmVzdC11cGRhdGUiLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZWZhdWx0PU5v
bmUsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJSZWdlbmVyYXRlIHRoZSB0ZXN0IG1h
bmlmZXN0LiIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLS1uby1tYW5pZmVzdC11cGRhdGUi
LCBhY3Rpb249InN0b3JlX2ZhbHNlIiwgZGVzdD0ibWFuaWZlc3RfdXBkYXRlIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGhlbHA9IlByZXZlbnQgcmVnZW5lcmF0aW9uIG9mIHRoZSB0ZXN0IG1h
bmlmZXN0LiIpCisKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItLXRpbWVvdXQtbXVsdGlwbGll
ciIsIGFjdGlvbj0ic3RvcmUiLCB0eXBlPWZsb2F0LCBkZWZhdWx0PU5vbmUsCisgICAgICAgICAg
ICAgICAgICAgICAgICBoZWxwPSJNdWx0aXBsaWVyIHJlbGF0aXZlIHRvIHN0YW5kYXJkIHRlc3Qg
dGltZW91dCB0byB1c2UiKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi0tcnVuLWJ5LWRpciIs
IHR5cGU9aW50LCBuYXJncz0iPyIsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAg
ICAgICBoZWxwPSJTcGxpdCBydW4gaW50byBncm91cHMgYnkgZGlyZWN0b3JpZXMuIFdpdGggYSBw
YXJhbWV0ZXIsIgorICAgICAgICAgICAgICAgICAgICAgICAgImxpbWl0IHRoZSBkZXB0aCBvZiBz
cGxpdHMgZS5nLiAtLXJ1bi1ieS1kaXI9MSB0byBzcGxpdCBieSB0b3AtbGV2ZWwiCisgICAgICAg
ICAgICAgICAgICAgICAgICAiZGlyZWN0b3J5IikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCIt
LXByb2Nlc3NlcyIsIGFjdGlvbj0ic3RvcmUiLCB0eXBlPWludCwgZGVmYXVsdD1Ob25lLAorICAg
ICAgICAgICAgICAgICAgICAgICAgaGVscD0iTnVtYmVyIG9mIHNpbXVsdGFuZW91cyBwcm9jZXNz
ZXMgdG8gdXNlIikKKworICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi0tbm8tY2FwdHVyZS1zdGRp
byIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAg
ICAgICAgICBoZWxwPSJEb24ndCBjYXB0dXJlIHN0ZGlvIGFuZCB3cml0ZSB0byBsb2dnaW5nIikK
KworICAgIG1vZGVfZ3JvdXAgPSBwYXJzZXIuYWRkX2FyZ3VtZW50X2dyb3VwKCJNb2RlIikKKyAg
ICBtb2RlX2dyb3VwLmFkZF9hcmd1bWVudCgiLS1saXN0LXRlc3QtZ3JvdXBzIiwgYWN0aW9uPSJz
dG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9Ikxpc3QgdGhlIHRvcCBsZXZlbCBkaXJl
Y3RvcmllcyBjb250YWluaW5nIHRlc3RzIHRoYXQgd2lsbCBydW4uIikKKyAgICBtb2RlX2dyb3Vw
LmFkZF9hcmd1bWVudCgiLS1saXN0LWRpc2FibGVkIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGhlbHA9Ikxpc3QgdGhlIHRlc3RzIHRoYXQgYXJlIGRpc2FibGVkIG9uIHRo
ZSBjdXJyZW50IHBsYXRmb3JtIikKKyAgICBtb2RlX2dyb3VwLmFkZF9hcmd1bWVudCgiLS1saXN0
LXRlc3RzIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9Ikxpc3Qg
YWxsIHRlc3RzIHRoYXQgd2lsbCBydW4iKQorCisgICAgdGVzdF9zZWxlY3Rpb25fZ3JvdXAgPSBw
YXJzZXIuYWRkX2FyZ3VtZW50X2dyb3VwKCJUZXN0IFNlbGVjdGlvbiIpCisgICAgdGVzdF9zZWxl
Y3Rpb25fZ3JvdXAuYWRkX2FyZ3VtZW50KCItLXRlc3QtdHlwZXMiLCBhY3Rpb249InN0b3JlIiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFyZ3M9IioiLCBkZWZhdWx0
PXdwdHRlc3QuZW5hYmxlZF90ZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2hvaWNlcz13cHR0ZXN0LmVuYWJsZWRfdGVzdHMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGhlbHA9IlRlc3QgdHlwZXMgdG8gcnVuIikKKyAgICB0ZXN0X3Nl
bGVjdGlvbl9ncm91cC5hZGRfYXJndW1lbnQoIi0taW5jbHVkZSIsIGFjdGlvbj0iYXBwZW5kIiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iVVJMIHByZWZpeCB0
byBpbmNsdWRlIikKKyAgICB0ZXN0X3NlbGVjdGlvbl9ncm91cC5hZGRfYXJndW1lbnQoIi0tZXhj
bHVkZSIsIGFjdGlvbj0iYXBwZW5kIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaGVscD0iVVJMIHByZWZpeCB0byBleGNsdWRlIikKKyAgICB0ZXN0X3NlbGVjdGlvbl9n
cm91cC5hZGRfYXJndW1lbnQoIi0taW5jbHVkZS1tYW5pZmVzdCIsIHR5cGU9YWJzX3BhdGgsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlBhdGggdG8gbWFuaWZl
c3QgbGlzdGluZyB0ZXN0cyB0byBpbmNsdWRlIikKKyAgICB0ZXN0X3NlbGVjdGlvbl9ncm91cC5h
ZGRfYXJndW1lbnQoIi0tdGFnIiwgYWN0aW9uPSJhcHBlbmQiLCBkZXN0PSJ0YWdzIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iTGFiZWxzIGFwcGxpZWQgdG8g
dGVzdHMgdG8gaW5jbHVkZSBpbiB0aGUgcnVuLiBMYWJlbHMgc3RhcnRpbmcgZGlyOiBhcmUgZXF1
aXZhbGVudCB0byB0b3AtbGV2ZWwgZGlyZWN0b3JpZXMuIikKKworICAgIGRlYnVnZ2luZ19ncm91
cCA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoIkRlYnVnZ2luZyIpCisgICAgZGVidWdnaW5n
X2dyb3VwLmFkZF9hcmd1bWVudCgnLS1kZWJ1Z2dlcicsIGNvbnN0PSJfX2RlZmF1bHRfXyIsIG5h
cmdzPSI/IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9InJ1biB1bmRl
ciBhIGRlYnVnZ2VyLCBlLmcuIGdkYiBvciB2YWxncmluZCIpCisgICAgZGVidWdnaW5nX2dyb3Vw
LmFkZF9hcmd1bWVudCgnLS1kZWJ1Z2dlci1hcmdzJywgaGVscD0iYXJndW1lbnRzIHRvIHRoZSBk
ZWJ1Z2dlciIpCisgICAgZGVidWdnaW5nX2dyb3VwLmFkZF9hcmd1bWVudCgiLS1yZXBlYXQiLCBh
Y3Rpb249InN0b3JlIiwgdHlwZT1pbnQsIGRlZmF1bHQ9MSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGhlbHA9Ik51bWJlciBvZiB0aW1lcyB0byBydW4gdGhlIHRlc3RzIikKKyAg
ICBkZWJ1Z2dpbmdfZ3JvdXAuYWRkX2FyZ3VtZW50KCItLXJlcGVhdC11bnRpbC11bmV4cGVjdGVk
IiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVmYXVsdD1Ob25lLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaGVscD0iUnVuIHRlc3RzIGluIGEgbG9vcCB1bnRpbCBvbmUgcmV0dXJu
cyBhbiB1bmV4cGVjdGVkIHJlc3VsdCIpCisgICAgZGVidWdnaW5nX2dyb3VwLmFkZF9hcmd1bWVu
dCgnLS1wYXVzZS1hZnRlci10ZXN0JywgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVmYXVsdD1Ob25l
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iSGFsdCB0aGUgdGVzdCBy
dW5uZXIgYWZ0ZXIgZWFjaCB0ZXN0ICh0aGlzIGhhcHBlbnMgYnkgZGVmYXVsdCBpZiBvbmx5IGEg
c2luZ2xlIHRlc3QgaXMgcnVuKSIpCisgICAgZGVidWdnaW5nX2dyb3VwLmFkZF9hcmd1bWVudCgn
LS1uby1wYXVzZS1hZnRlci10ZXN0JywgZGVzdD0icGF1c2VfYWZ0ZXJfdGVzdCIsIGFjdGlvbj0i
c3RvcmVfZmFsc2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iRG9u
J3QgaGFsdCB0aGUgdGVzdCBydW5uZXIgaXJyZXNwZWN0aXZlIG9mIHRoZSBudW1iZXIgb2YgdGVz
dHMgcnVuIikKKworICAgIGRlYnVnZ2luZ19ncm91cC5hZGRfYXJndW1lbnQoJy0tcGF1c2Utb24t
dW5leHBlY3RlZCcsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBoZWxwPSJIYWx0IHRoZSB0ZXN0IHJ1bm5lciB3aGVuIGFuIHVuZXhwZWN0ZWQg
cmVzdWx0IGlzIGVuY291bnRlcmVkIikKKyAgICBkZWJ1Z2dpbmdfZ3JvdXAuYWRkX2FyZ3VtZW50
KCctLW5vLXJlc3RhcnQtb24tdW5leHBlY3RlZCcsIGRlc3Q9InJlc3RhcnRfb25fdW5leHBlY3Rl
ZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PVRydWUsIGFjdGlv
bj0ic3RvcmVfZmFsc2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0i
RG9uJ3QgcmVzdGFydCBvbiBhbiB1bmV4cGVjdGVkIHJlc3VsdCIpCisKKyAgICBkZWJ1Z2dpbmdf
Z3JvdXAuYWRkX2FyZ3VtZW50KCItLXN5bWJvbHMtcGF0aCIsIGFjdGlvbj0ic3RvcmUiLCB0eXBl
PXVybF9vcl9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iUGF0
aCBvciB1cmwgdG8gc3ltYm9scyBmaWxlIHVzZWQgdG8gYW5hbHlzZSBjcmFzaCBtaW5pZHVtcHMu
IikKKyAgICBkZWJ1Z2dpbmdfZ3JvdXAuYWRkX2FyZ3VtZW50KCItLXN0YWNrd2Fsay1iaW5hcnki
LCBhY3Rpb249InN0b3JlIiwgdHlwZT1hYnNfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGhlbHA9IlBhdGggdG8gc3RhY2t3YWxrZXIgcHJvZ3JhbSB1c2VkIHRvIGFuYWx5
c2UgbWluaWR1bXBzLiIpCisKKyAgICBkZWJ1Z2dpbmdfZ3JvdXAuYWRkX2FyZ3VtZW50KCItLXBk
YiIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBoZWxwPSJEcm9wIGludG8gcGRiIG9uIHB5dGhvbiBleGNlcHRpb24iKQorCisgICAgY29uZmln
X2dyb3VwID0gcGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cCgiQ29uZmlndXJhdGlvbiIpCisgICAg
Y29uZmlnX2dyb3VwLmFkZF9hcmd1bWVudCgiLS1iaW5hcnkiLCBhY3Rpb249InN0b3JlIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9YWJzX3BhdGgsIGhlbHA9IkJpbmFyeSB0
byBydW4gdGVzdHMgYWdhaW5zdCIpCisgICAgY29uZmlnX2dyb3VwLmFkZF9hcmd1bWVudCgnLS1i
aW5hcnktYXJnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9W10sIGFj
dGlvbj0iYXBwZW5kIiwgZGVzdD0iYmluYXJ5X2FyZ3MiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaGVscD0iRXh0cmEgYXJndW1lbnQgZm9yIHRoZSBiaW5hcnkiKQorICAgIGNvbmZp
Z19ncm91cC5hZGRfYXJndW1lbnQoIi0td2ViZHJpdmVyLWJpbmFyeSIsIGFjdGlvbj0ic3RvcmUi
LCBtZXRhdmFyPSJCSU5BUlkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1h
YnNfcGF0aCwgaGVscD0iV2ViRHJpdmVyIHNlcnZlciBiaW5hcnkgdG8gdXNlIikKKyAgICBjb25m
aWdfZ3JvdXAuYWRkX2FyZ3VtZW50KCctLXdlYmRyaXZlci1hcmcnLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGVmYXVsdD1bXSwgYWN0aW9uPSJhcHBlbmQiLCBkZXN0PSJ3ZWJkcml2
ZXJfYXJncyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJFeHRyYSBhcmd1
bWVudCBmb3IgdGhlIFdlYkRyaXZlciBiaW5hcnkiKQorCisgICAgY29uZmlnX2dyb3VwLmFkZF9h
cmd1bWVudCgiLS1tZXRhZGF0YSIsIGFjdGlvbj0ic3RvcmUiLCB0eXBlPWFic19wYXRoLCBkZXN0
PSJtZXRhZGF0YV9yb290IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlBh
dGggdG8gcm9vdCBkaXJlY3RvcnkgY29udGFpbmluZyB0ZXN0IG1ldGFkYXRhIiksCisgICAgY29u
ZmlnX2dyb3VwLmFkZF9hcmd1bWVudCgiLS10ZXN0cyIsIGFjdGlvbj0ic3RvcmUiLCB0eXBlPWFi
c19wYXRoLCBkZXN0PSJ0ZXN0c19yb290IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGhlbHA9IlBhdGggdG8gcm9vdCBkaXJlY3RvcnkgY29udGFpbmluZyB0ZXN0IGZpbGVzIiksCisg
ICAgY29uZmlnX2dyb3VwLmFkZF9hcmd1bWVudCgiLS1ydW4taW5mbyIsIGFjdGlvbj0ic3RvcmUi
LCB0eXBlPWFic19wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iUGF0
aCB0byBkaXJlY3RvcnkgY29udGFpbmluZyBleHRyYSBqc29uIGZpbGVzIHRvIGFkZCB0byBydW4g
aW5mbyIpCisgICAgY29uZmlnX2dyb3VwLmFkZF9hcmd1bWVudCgiLS1wcm9kdWN0IiwgYWN0aW9u
PSJzdG9yZSIsIGNob2ljZXM9cHJvZHVjdF9jaG9pY2VzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdD1Ob25lLCBoZWxwPSJCcm93c2VyIGFnYWluc3Qgd2hpY2ggdG8gcnVu
IHRlc3RzIikKKyAgICBjb25maWdfZ3JvdXAuYWRkX2FyZ3VtZW50KCItLWNvbmZpZyIsIGFjdGlv
bj0ic3RvcmUiLCB0eXBlPWFic19wYXRoLCBkZXN0PSJjb25maWciLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaGVscD0iUGF0aCB0byBjb25maWcgZmlsZSIpCisgICAgY29uZmlnX2dy
b3VwLmFkZF9hcmd1bWVudCgiLS1pbnN0YWxsLWZvbnRzIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGhlbHA9IkFsbG93IHRoZSB3cHRydW5uZXIgdG8gaW5zdGFsbCBm
b250cyBvbiB5b3VyIHN5c3RlbSIpCisgICAgY29uZmlnX2dyb3VwLmFkZF9hcmd1bWVudCgiLS1m
b250LWRpciIsIGFjdGlvbj0ic3RvcmUiLCB0eXBlPWFic19wYXRoLCBkZXN0PSJmb250X2RpciIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJQYXRoIHRvIGxvY2FsIGZvbnQg
aW5zdGFsbGF0aW9uIGRpcmVjdG9yeSIsIGRlZmF1bHQ9Tm9uZSkKKworICAgIGJ1aWxkX3R5cGUg
PSBwYXJzZXIuYWRkX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cCgpCisgICAgYnVpbGRfdHlwZS5h
ZGRfYXJndW1lbnQoIi0tZGVidWctYnVpbGQiLCBkZXN0PSJkZWJ1ZyIsIGFjdGlvbj0ic3RvcmVf
dHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1Ob25lLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkJ1aWxkIGlzIGEgZGVidWcgYnVpbGQgKG92ZXJy
aWRlcyBhbnkgbW96aW5mbyBmaWxlKSIpCisgICAgYnVpbGRfdHlwZS5hZGRfYXJndW1lbnQoIi0t
cmVsZWFzZS1idWlsZCIsIGRlc3Q9ImRlYnVnIiwgYWN0aW9uPSJzdG9yZV9mYWxzZSIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1Ob25lLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGhlbHA9IkJ1aWxkIGlzIGEgcmVsZWFzZSAob3ZlcnJpZGVzIGFueSBtb3ppbmZv
IGZpbGUpIikKKworCisgICAgY2h1bmtpbmdfZ3JvdXAgPSBwYXJzZXIuYWRkX2FyZ3VtZW50X2dy
b3VwKCJUZXN0IENodW5raW5nIikKKyAgICBjaHVua2luZ19ncm91cC5hZGRfYXJndW1lbnQoIi0t
dG90YWwtY2h1bmtzIiwgYWN0aW9uPSJzdG9yZSIsIHR5cGU9aW50LCBkZWZhdWx0PTEsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlRvdGFsIG51bWJlciBvZiBjaHVua3Mg
dG8gdXNlIikKKyAgICBjaHVua2luZ19ncm91cC5hZGRfYXJndW1lbnQoIi0tdGhpcy1jaHVuayIs
IGFjdGlvbj0ic3RvcmUiLCB0eXBlPWludCwgZGVmYXVsdD0xLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBoZWxwPSJDaHVuayBudW1iZXIgdG8gcnVuIikKKyAgICBjaHVua2luZ19n
cm91cC5hZGRfYXJndW1lbnQoIi0tY2h1bmstdHlwZSIsIGFjdGlvbj0ic3RvcmUiLCBjaG9pY2Vz
PVsibm9uZSIsICJlcXVhbF90aW1lIiwgImhhc2giLCAiZGlyX2hhc2giXSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1Ob25lLCBoZWxwPSJDaHVua2luZyB0eXBlIHRv
IHVzZSIpCisKKyAgICBzc2xfZ3JvdXAgPSBwYXJzZXIuYWRkX2FyZ3VtZW50X2dyb3VwKCJTU0wv
VExTIikKKyAgICBzc2xfZ3JvdXAuYWRkX2FyZ3VtZW50KCItLXNzbC10eXBlIiwgYWN0aW9uPSJz
dG9yZSIsIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNob2ljZXM9WyJv
cGVuc3NsIiwgInByZWdlbmVyYXRlZCIsICJub25lIl0sCisgICAgICAgICAgICAgICAgICAgICAg
ICBoZWxwPSJUeXBlIG9mIHNzbCBzdXBwb3J0IHRvIGVuYWJsZSAocnVubmluZyB3aXRob3V0IHNz
bCBtYXkgbGVhZCB0byBzcHVyaW91cyBlcnJvcnMpIikKKworICAgIHNzbF9ncm91cC5hZGRfYXJn
dW1lbnQoIi0tb3BlbnNzbC1iaW5hcnkiLCBhY3Rpb249InN0b3JlIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGhlbHA9IlBhdGggdG8gb3BlbnNzbCBiaW5hcnkiLCBkZWZhdWx0PSJvcGVuc3Ns
IikKKyAgICBzc2xfZ3JvdXAuYWRkX2FyZ3VtZW50KCItLWNlcnR1dGlsLWJpbmFyeSIsIGFjdGlv
bj0ic3RvcmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iUGF0aCB0byBjZXJ0dXRp
bCBiaW5hcnkgZm9yIHVzZSB3aXRoIEZpcmVmb3ggKyBzc2wiKQorCisgICAgc3NsX2dyb3VwLmFk
ZF9hcmd1bWVudCgiLS1jYS1jZXJ0LXBhdGgiLCBhY3Rpb249InN0b3JlIiwgdHlwZT1hYnNfcGF0
aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlBhdGggdG8gY2EgY2VydGlmaWNhdGUg
d2hlbiB1c2luZyBwcmVnZW5lcmF0ZWQgc3NsIGNlcnRpZmljYXRlcyIpCisgICAgc3NsX2dyb3Vw
LmFkZF9hcmd1bWVudCgiLS1ob3N0LWtleS1wYXRoIiwgYWN0aW9uPSJzdG9yZSIsIHR5cGU9YWJz
X3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJQYXRoIHRvIGhvc3QgcHJpdmF0
ZSBrZXkgd2hlbiB1c2luZyBwcmVnZW5lcmF0ZWQgc3NsIGNlcnRpZmljYXRlcyIpCisgICAgc3Ns
X2dyb3VwLmFkZF9hcmd1bWVudCgiLS1ob3N0LWNlcnQtcGF0aCIsIGFjdGlvbj0ic3RvcmUiLCB0
eXBlPWFic19wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iUGF0aCB0byBob3N0
IGNlcnRpZmljYXRlIHdoZW4gdXNpbmcgcHJlZ2VuZXJhdGVkIHNzbCBjZXJ0aWZpY2F0ZXMiKQor
CisgICAgZ2Vja29fZ3JvdXAgPSBwYXJzZXIuYWRkX2FyZ3VtZW50X2dyb3VwKCJHZWNrby1zcGVj
aWZpYyIpCisgICAgZ2Vja29fZ3JvdXAuYWRkX2FyZ3VtZW50KCItLXByZWZzLXJvb3QiLCBkZXN0
PSJwcmVmc19yb290IiwgYWN0aW9uPSJzdG9yZSIsIHR5cGU9YWJzX3BhdGgsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGhlbHA9IlBhdGggdG8gdGhlIGZvbGRlciBjb250YWluaW5nIGJy
b3dzZXIgcHJlZnMiKQorICAgIGdlY2tvX2dyb3VwLmFkZF9hcmd1bWVudCgiLS1kaXNhYmxlLWUx
MHMiLCBkZXN0PSJnZWNrb19lMTBzIiwgYWN0aW9uPSJzdG9yZV9mYWxzZSIsIGRlZmF1bHQ9VHJ1
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iUnVuIHRlc3RzIHdpdGhvdXQg
ZWxlY3Ryb2x5c2lzIHByZWZlcmVuY2VzIikKKyAgICBnZWNrb19ncm91cC5hZGRfYXJndW1lbnQo
Ii0tc3RhY2tmaXgtZGlyIiwgZGVzdD0ic3RhY2tmaXhfZGlyIiwgYWN0aW9uPSJzdG9yZSIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlBhdGggdG8gZGlyZWN0b3J5IGNvbnRh
aW5pbmcgYXNzZXJ0aW9uIHN0YWNrIGZpeGluZyBzY3JpcHRzIikKKyAgICBnZWNrb19ncm91cC5h
ZGRfYXJndW1lbnQoIi0tc2V0cHJlZiIsIGRlc3Q9ImV4dHJhX3ByZWZzIiwgYWN0aW9uPSdhcHBl
bmQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PVtdLCBtZXRhdmFyPSJQ
UkVGPVZBTFVFIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iRGVmaW5lcyBh
biBleHRyYSB1c2VyIHByZWZlcmVuY2UgKG92ZXJyaWRlcyB0aG9zZSBpbiBwcmVmc19yb290KSIp
CisgICAgZ2Vja29fZ3JvdXAuYWRkX2FyZ3VtZW50KCItLWxlYWstY2hlY2siLCBkZXN0PSJsZWFr
X2NoZWNrIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaGVscD0iRW5hYmxlIGxlYWsgY2hlY2tpbmciKQorICAgIGdlY2tvX2dyb3VwLmFkZF9hcmd1
bWVudCgiLS1zdHlsby10aHJlYWRzIiwgYWN0aW9uPSJzdG9yZSIsIHR5cGU9aW50LCBkZWZhdWx0
PTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9Ik51bWJlciBvZiBwYXJhbGxl
bCB0aHJlYWRzIHRvIHVzZSBmb3Igc3R5bG8iKQorICAgIGdlY2tvX2dyb3VwLmFkZF9hcmd1bWVu
dCgiLS1yZWZ0ZXN0LWludGVybmFsIiwgZGVzdD0icmVmdGVzdF9pbnRlcm5hbCIsIGFjdGlvbj0i
c3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Tm9uZSwg
aGVscD0iRW5hYmxlIHJlZnRlc3QgcnVubmVyIGltcGxlbWVudGVkIGluc2lkZSBNYXJpb25ldHRl
IikKKyAgICBnZWNrb19ncm91cC5hZGRfYXJndW1lbnQoIi0tcmVmdGVzdC1leHRlcm5hbCIsIGRl
c3Q9InJlZnRlc3RfaW50ZXJuYWwiLCBhY3Rpb249InN0b3JlX2ZhbHNlIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaGVscD0iRGlzYWJsZSByZWZ0ZXN0IHJ1bm5lciBpbXBsZW1lbnRl
ZCBpbnNpZGUgTWFyaW9uZXR0ZSIpCisgICAgZ2Vja29fZ3JvdXAuYWRkX2FyZ3VtZW50KCItLXJl
ZnRlc3Qtc2NyZWVuc2hvdCIsIGRlc3Q9InJlZnRlc3Rfc2NyZWVuc2hvdCIsIGFjdGlvbj0ic3Rv
cmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9pY2VzPVsiYWx3YXlzIiwgImZh
aWwiLCAidW5leHBlY3RlZCJdLCBkZWZhdWx0PSJ1bmV4cGVjdGVkIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaGVscD0iV2l0aCAtLXJlZnRlc3QtaW50ZXJuYWwsIHdoZW4gdG8gdGFr
ZSBhIHNjcmVlbnNob3QiKQorCisgICAgc2Vydm9fZ3JvdXAgPSBwYXJzZXIuYWRkX2FyZ3VtZW50
X2dyb3VwKCJTZXJ2by1zcGVjaWZpYyIpCisgICAgc2Vydm9fZ3JvdXAuYWRkX2FyZ3VtZW50KCIt
LXVzZXItc3R5bGVzaGVldCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9
W10sIGFjdGlvbj0iYXBwZW5kIiwgZGVzdD0idXNlcl9zdHlsZXNoZWV0cyIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGhlbHA9IkluamVjdCBhIHVzZXIgQ1NTIHN0eWxlc2hlZXQgaW50
byBldmVyeSB0ZXN0LiIpCisKKyAgICBzYXVjZV9ncm91cCA9IHBhcnNlci5hZGRfYXJndW1lbnRf
Z3JvdXAoIlNhdWNlIExhYnMtc3BlY2lmaWMiKQorICAgIHNhdWNlX2dyb3VwLmFkZF9hcmd1bWVu
dCgiLS1zYXVjZS1icm93c2VyIiwgZGVzdD0ic2F1Y2VfYnJvd3NlciIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGhlbHA9IlNhdWNlIExhYnMgYnJvd3NlciBuYW1lIikKKyAgICBzYXVj
ZV9ncm91cC5hZGRfYXJndW1lbnQoIi0tc2F1Y2UtcGxhdGZvcm0iLCBkZXN0PSJzYXVjZV9wbGF0
Zm9ybSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlNhdWNlIExhYnMgT1Mg
cGxhdGZvcm0iKQorICAgIHNhdWNlX2dyb3VwLmFkZF9hcmd1bWVudCgiLS1zYXVjZS12ZXJzaW9u
IiwgZGVzdD0ic2F1Y2VfdmVyc2lvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhl
bHA9IlNhdWNlIExhYnMgYnJvd3NlciB2ZXJzaW9uIikKKyAgICBzYXVjZV9ncm91cC5hZGRfYXJn
dW1lbnQoIi0tc2F1Y2UtYnVpbGQiLCBkZXN0PSJzYXVjZV9idWlsZCIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGhlbHA9IlNhdWNlIExhYnMgYnVpbGQgaWRlbnRpZmllciIpCisgICAg
c2F1Y2VfZ3JvdXAuYWRkX2FyZ3VtZW50KCItLXNhdWNlLXRhZ3MiLCBkZXN0PSJzYXVjZV90YWdz
IiwgbmFyZ3M9IioiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJTYXVjZSBM
YWJzIGlkZW50aWZ5aW5nIHRhZyIsIGRlZmF1bHQ9W10pCisgICAgc2F1Y2VfZ3JvdXAuYWRkX2Fy
Z3VtZW50KCItLXNhdWNlLXR1bm5lbC1pZCIsIGRlc3Q9InNhdWNlX3R1bm5lbF9pZCIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlNhdWNlIENvbm5lY3QgdHVubmVsIGlkZW50
aWZpZXIiKQorICAgIHNhdWNlX2dyb3VwLmFkZF9hcmd1bWVudCgiLS1zYXVjZS11c2VyIiwgZGVz
dD0ic2F1Y2VfdXNlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlNhdWNl
IExhYnMgdXNlciBuYW1lIikKKyAgICBzYXVjZV9ncm91cC5hZGRfYXJndW1lbnQoIi0tc2F1Y2Ut
a2V5IiwgZGVzdD0ic2F1Y2Vfa2V5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdD1vcy5lbnZpcm9uLmdldCgiU0FVQ0VfQUNDRVNTX0tFWSIpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBoZWxwPSJTYXVjZSBMYWJzIGFjY2VzcyBrZXkiKQorICAgIHNhdWNlX2dy
b3VwLmFkZF9hcmd1bWVudCgiLS1zYXVjZS1jb25uZWN0LWJpbmFyeSIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRlc3Q9InNhdWNlX2Nvbm5lY3RfYmluYXJ5IiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaGVscD0iUGF0aCB0byBTYXVjZSBDb25uZWN0IGJpbmFyeSIpCisK
KyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCJ0ZXN0X2xpc3QiLCBuYXJncz0iKiIsCisgICAgICAg
ICAgICAgICAgICAgICAgICBoZWxwPSJMaXN0IG9mIFVSTHMgZm9yIHRlc3RzIHRvIHJ1biwgb3Ig
cGF0aHMgaW5jbHVkaW5nIHRlc3RzIHRvIHJ1bi4gIgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiKGVxdWl2YWxlbnQgdG8gLS1pbmNsdWRlKSIpCisKKyAgICBjb21tYW5kbGluZS5sb2df
Zm9ybWF0dGVyc1sid3B0cmVwb3J0Il0gPSAoZm9ybWF0dGVycy5XcHRyZXBvcnRGb3JtYXR0ZXIs
ICJ3cHRyZXBvcnQgZm9ybWF0IikKKworICAgIGNvbW1hbmRsaW5lLmFkZF9sb2dnaW5nX2dyb3Vw
KHBhcnNlcikKKyAgICByZXR1cm4gcGFyc2VyCisKKworZGVmIHNldF9mcm9tX2NvbmZpZyhrd2Fy
Z3MpOgorICAgIGlmIGt3YXJnc1siY29uZmlnIl0gaXMgTm9uZToKKyAgICAgICAgY29uZmlnX3Bh
dGggPSBjb25maWcucGF0aCgpCisgICAgZWxzZToKKyAgICAgICAgY29uZmlnX3BhdGggPSBrd2Fy
Z3NbImNvbmZpZyJdCisKKyAgICBrd2FyZ3NbImNvbmZpZ19wYXRoIl0gPSBjb25maWdfcGF0aAor
CisgICAga3dhcmdzWyJjb25maWciXSA9IGNvbmZpZy5yZWFkKGt3YXJnc1siY29uZmlnX3BhdGgi
XSkKKworICAgIGtleXMgPSB7InBhdGhzIjogWygicHJlZnMiLCAicHJlZnNfcm9vdCIsIFRydWUp
LAorICAgICAgICAgICAgICAgICAgICAgICgicnVuX2luZm8iLCAicnVuX2luZm8iLCBUcnVlKV0s
CisgICAgICAgICAgICAid2ViLXBsYXRmb3JtLXRlc3RzIjogWygicmVtb3RlX3VybCIsICJyZW1v
dGVfdXJsIiwgRmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImJy
YW5jaCIsICJicmFuY2giLCBGYWxzZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICgic3luY19wYXRoIiwgInN5bmNfcGF0aCIsIFRydWUpXSwKKyAgICAgICAgICAgICJTU0wi
OiBbKCJvcGVuc3NsX2JpbmFyeSIsICJvcGVuc3NsX2JpbmFyeSIsIFRydWUpLAorICAgICAgICAg
ICAgICAgICAgICAoImNlcnR1dGlsX2JpbmFyeSIsICJjZXJ0dXRpbF9iaW5hcnkiLCBUcnVlKSwK
KyAgICAgICAgICAgICAgICAgICAgKCJjYV9jZXJ0X3BhdGgiLCAiY2FfY2VydF9wYXRoIiwgVHJ1
ZSksCisgICAgICAgICAgICAgICAgICAgICgiaG9zdF9jZXJ0X3BhdGgiLCAiaG9zdF9jZXJ0X3Bh
dGgiLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgKCJob3N0X2tleV9wYXRoIiwgImhvc3Rf
a2V5X3BhdGgiLCBUcnVlKV19CisKKyAgICBmb3Igc2VjdGlvbiwgdmFsdWVzIGluIGtleXMuaXRl
cml0ZW1zKCk6CisgICAgICAgIGZvciBjb25maWdfdmFsdWUsIGt3X3ZhbHVlLCBpc19wYXRoIGlu
IHZhbHVlczoKKyAgICAgICAgICAgIGlmIGt3X3ZhbHVlIGluIGt3YXJncyBhbmQga3dhcmdzW2t3
X3ZhbHVlXSBpcyBOb25lOgorICAgICAgICAgICAgICAgIGlmIG5vdCBpc19wYXRoOgorICAgICAg
ICAgICAgICAgICAgICBuZXdfdmFsdWUgPSBrd2FyZ3NbImNvbmZpZyJdLmdldChzZWN0aW9uLCBj
b25maWcuQ29uZmlnRGljdCh7fSkpLmdldChjb25maWdfdmFsdWUpCisgICAgICAgICAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbmV3X3ZhbHVlID0ga3dhcmdzWyJjb25maWciXS5n
ZXQoc2VjdGlvbiwgY29uZmlnLkNvbmZpZ0RpY3Qoe30pKS5nZXRfcGF0aChjb25maWdfdmFsdWUp
CisgICAgICAgICAgICAgICAga3dhcmdzW2t3X3ZhbHVlXSA9IG5ld192YWx1ZQorCisgICAga3dh
cmdzWyJ0ZXN0X3BhdGhzIl0gPSBnZXRfdGVzdF9wYXRocyhrd2FyZ3NbImNvbmZpZyJdKQorCisg
ICAgaWYga3dhcmdzWyJ0ZXN0c19yb290Il06CisgICAgICAgIGlmICIvIiBub3QgaW4ga3dhcmdz
WyJ0ZXN0X3BhdGhzIl06CisgICAgICAgICAgICBrd2FyZ3NbInRlc3RfcGF0aHMiXVsiLyJdID0g
e30KKyAgICAgICAga3dhcmdzWyJ0ZXN0X3BhdGhzIl1bIi8iXVsidGVzdHNfcGF0aCJdID0ga3dh
cmdzWyJ0ZXN0c19yb290Il0KKworICAgIGlmIGt3YXJnc1sibWV0YWRhdGFfcm9vdCJdOgorICAg
ICAgICBpZiAiLyIgbm90IGluIGt3YXJnc1sidGVzdF9wYXRocyJdOgorICAgICAgICAgICAga3dh
cmdzWyJ0ZXN0X3BhdGhzIl1bIi8iXSA9IHt9CisgICAgICAgIGt3YXJnc1sidGVzdF9wYXRocyJd
WyIvIl1bIm1ldGFkYXRhX3BhdGgiXSA9IGt3YXJnc1sibWV0YWRhdGFfcm9vdCJdCisKKyAgICBr
d2FyZ3NbInN1aXRlX25hbWUiXSA9IGt3YXJnc1siY29uZmlnIl0uZ2V0KCJ3ZWItcGxhdGZvcm0t
dGVzdHMiLCB7fSkuZ2V0KCJuYW1lIiwgIndlYi1wbGF0Zm9ybS10ZXN0cyIpCisKKworZGVmIGdl
dF90ZXN0X3BhdGhzKGNvbmZpZyk6CisgICAgIyBTZXQgdXAgdGVzdF9wYXRocworICAgIHRlc3Rf
cGF0aHMgPSBPcmRlcmVkRGljdCgpCisKKyAgICBmb3Igc2VjdGlvbiBpbiBjb25maWcuaXRlcmtl
eXMoKToKKyAgICAgICAgaWYgc2VjdGlvbi5zdGFydHN3aXRoKCJtYW5pZmVzdDoiKToKKyAgICAg
ICAgICAgIG1hbmlmZXN0X29wdHMgPSBjb25maWcuZ2V0KHNlY3Rpb24pCisgICAgICAgICAgICB1
cmxfYmFzZSA9IG1hbmlmZXN0X29wdHMuZ2V0KCJ1cmxfYmFzZSIsICIvIikKKyAgICAgICAgICAg
IHRlc3RfcGF0aHNbdXJsX2Jhc2VdID0geworICAgICAgICAgICAgICAgICJ0ZXN0c19wYXRoIjog
bWFuaWZlc3Rfb3B0cy5nZXRfcGF0aCgidGVzdHMiKSwKKyAgICAgICAgICAgICAgICAibWV0YWRh
dGFfcGF0aCI6IG1hbmlmZXN0X29wdHMuZ2V0X3BhdGgoIm1ldGFkYXRhIil9CisKKyAgICByZXR1
cm4gdGVzdF9wYXRocworCisKK2RlZiBleGVfcGF0aChuYW1lKToKKyAgICBpZiBuYW1lIGlzIE5v
bmU6CisgICAgICAgIHJldHVybgorCisgICAgcGF0aCA9IGZpbmRfZXhlY3V0YWJsZShuYW1lKQor
ICAgIGlmIG9zLmFjY2VzcyhwYXRoLCBvcy5YX09LKToKKyAgICAgICAgcmV0dXJuIHBhdGgKKwor
CitkZWYgY2hlY2tfYXJncyhrd2FyZ3MpOgorICAgIHNldF9mcm9tX2NvbmZpZyhrd2FyZ3MpCisK
KyAgICBmb3IgdGVzdF9wYXRocyBpbiBrd2FyZ3NbInRlc3RfcGF0aHMiXS5pdGVydmFsdWVzKCk6
CisgICAgICAgIGlmIG5vdCAoInRlc3RzX3BhdGgiIGluIHRlc3RfcGF0aHMgYW5kCisgICAgICAg
ICAgICAgICAgIm1ldGFkYXRhX3BhdGgiIGluIHRlc3RfcGF0aHMpOgorICAgICAgICAgICAgcHJp
bnQgIkZhdGFsOiBtdXN0IHNwZWNpZnkgYm90aCBhIHRlc3QgcGF0aCBhbmQgbWV0YWRhdGEgcGF0
aCIKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgIGZvciBrZXksIHBhdGggaW4gdGVz
dF9wYXRocy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIG5hbWUgPSBrZXkuc3BsaXQoIl8iLCAx
KVswXQorCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocGF0aCk6CisgICAgICAg
ICAgICAgICAgcHJpbnQgIkZhdGFsOiAlcyBwYXRoICVzIGRvZXMgbm90IGV4aXN0IiAlIChuYW1l
LCBwYXRoKQorICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICAgICAgICAgIGlmIG5v
dCBvcy5wYXRoLmlzZGlyKHBhdGgpOgorICAgICAgICAgICAgICAgIHByaW50ICJGYXRhbDogJXMg
cGF0aCAlcyBpcyBub3QgYSBkaXJlY3RvcnkiICUgKG5hbWUsIHBhdGgpCisgICAgICAgICAgICAg
ICAgc3lzLmV4aXQoMSkKKworICAgIGlmIGt3YXJnc1sicHJvZHVjdCJdIGlzIE5vbmU6CisgICAg
ICAgIGt3YXJnc1sicHJvZHVjdCJdID0gImZpcmVmb3giCisKKyAgICBpZiAic2F1Y2UiIGluIGt3
YXJnc1sicHJvZHVjdCJdOgorICAgICAgICBrd2FyZ3NbInBhdXNlX2FmdGVyX3Rlc3QiXSA9IEZh
bHNlCisKKyAgICBpZiBrd2FyZ3NbInRlc3RfbGlzdCJdOgorICAgICAgICBpZiBrd2FyZ3NbImlu
Y2x1ZGUiXSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGt3YXJnc1siaW5jbHVkZSJdLmV4dGVu
ZChrd2FyZ3NbInRlc3RfbGlzdCJdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAga3dhcmdz
WyJpbmNsdWRlIl0gPSBrd2FyZ3NbInRlc3RfbGlzdCJdCisKKyAgICBpZiBrd2FyZ3NbInJ1bl9p
bmZvIl0gaXMgTm9uZToKKyAgICAgICAga3dhcmdzWyJydW5faW5mbyJdID0ga3dhcmdzWyJjb25m
aWdfcGF0aCJdCisKKyAgICBpZiBrd2FyZ3NbInRoaXNfY2h1bmsiXSA+IDE6CisgICAgICAgIHJl
cXVpcmVfYXJnKGt3YXJncywgInRvdGFsX2NodW5rcyIsIGxhbWJkYSB4OiB4ID49IGt3YXJnc1si
dGhpc19jaHVuayJdKQorCisgICAgaWYga3dhcmdzWyJjaHVua190eXBlIl0gaXMgTm9uZToKKyAg
ICAgICAgaWYga3dhcmdzWyJ0b3RhbF9jaHVua3MiXSA+IDE6CisgICAgICAgICAgICBrd2FyZ3Nb
ImNodW5rX3R5cGUiXSA9ICJkaXJfaGFzaCIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGt3
YXJnc1siY2h1bmtfdHlwZSJdID0gIm5vbmUiCisKKyAgICBpZiBrd2FyZ3NbInByb2Nlc3NlcyJd
IGlzIE5vbmU6CisgICAgICAgIGt3YXJnc1sicHJvY2Vzc2VzIl0gPSAxCisKKyAgICBpZiBrd2Fy
Z3NbImRlYnVnZ2VyIl0gaXMgbm90IE5vbmU6CisgICAgICAgIGltcG9ydCBtb3pkZWJ1ZworICAg
ICAgICBpZiBrd2FyZ3NbImRlYnVnZ2VyIl0gPT0gIl9fZGVmYXVsdF9fIjoKKyAgICAgICAgICAg
IGt3YXJnc1siZGVidWdnZXIiXSA9IG1vemRlYnVnLmdldF9kZWZhdWx0X2RlYnVnZ2VyX25hbWUo
KQorICAgICAgICBkZWJ1Z19pbmZvID0gbW96ZGVidWcuZ2V0X2RlYnVnZ2VyX2luZm8oa3dhcmdz
WyJkZWJ1Z2dlciJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAga3dhcmdzWyJkZWJ1Z2dlcl9hcmdzIl0pCisgICAgICAgIGlmIGRlYnVnX2luZm8gYW5k
IGRlYnVnX2luZm8uaW50ZXJhY3RpdmU6CisgICAgICAgICAgICBpZiBrd2FyZ3NbInByb2Nlc3Nl
cyJdICE9IDE6CisgICAgICAgICAgICAgICAga3dhcmdzWyJwcm9jZXNzZXMiXSA9IDEKKyAgICAg
ICAgICAgIGt3YXJnc1sibm9fY2FwdHVyZV9zdGRpbyJdID0gVHJ1ZQorICAgICAgICBrd2FyZ3Nb
ImRlYnVnX2luZm8iXSA9IGRlYnVnX2luZm8KKyAgICBlbHNlOgorICAgICAgICBrd2FyZ3NbImRl
YnVnX2luZm8iXSA9IE5vbmUKKworICAgIGlmIGt3YXJnc1siYmluYXJ5Il0gaXMgbm90IE5vbmU6
CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhrd2FyZ3NbImJpbmFyeSJdKToKKyAgICAg
ICAgICAgIHByaW50ID4+IHN5cy5zdGRlcnIsICJCaW5hcnkgcGF0aCAlcyBkb2VzIG5vdCBleGlz
dCIgJSBrd2FyZ3NbImJpbmFyeSJdCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgaWYg
a3dhcmdzWyJzc2xfdHlwZSJdIGlzIE5vbmU6CisgICAgICAgIGlmIE5vbmUgbm90IGluIChrd2Fy
Z3NbImNhX2NlcnRfcGF0aCJdLCBrd2FyZ3NbImhvc3RfY2VydF9wYXRoIl0sIGt3YXJnc1siaG9z
dF9rZXlfcGF0aCJdKToKKyAgICAgICAgICAgIGt3YXJnc1sic3NsX3R5cGUiXSA9ICJwcmVnZW5l
cmF0ZWQiCisgICAgICAgIGVsaWYgZXhlX3BhdGgoa3dhcmdzWyJvcGVuc3NsX2JpbmFyeSJdKSBp
cyBub3QgTm9uZToKKyAgICAgICAgICAgIGt3YXJnc1sic3NsX3R5cGUiXSA9ICJvcGVuc3NsIgor
ICAgICAgICBlbHNlOgorICAgICAgICAgICAga3dhcmdzWyJzc2xfdHlwZSJdID0gIm5vbmUiCisK
KyAgICBpZiBrd2FyZ3NbInNzbF90eXBlIl0gPT0gInByZWdlbmVyYXRlZCI6CisgICAgICAgIHJl
cXVpcmVfYXJnKGt3YXJncywgImNhX2NlcnRfcGF0aCIsIGxhbWJkYSB4Om9zLnBhdGguZXhpc3Rz
KHgpKQorICAgICAgICByZXF1aXJlX2FyZyhrd2FyZ3MsICJob3N0X2NlcnRfcGF0aCIsIGxhbWJk
YSB4Om9zLnBhdGguZXhpc3RzKHgpKQorICAgICAgICByZXF1aXJlX2FyZyhrd2FyZ3MsICJob3N0
X2tleV9wYXRoIiwgbGFtYmRhIHg6b3MucGF0aC5leGlzdHMoeCkpCisKKyAgICBlbGlmIGt3YXJn
c1sic3NsX3R5cGUiXSA9PSAib3BlbnNzbCI6CisgICAgICAgIHBhdGggPSBleGVfcGF0aChrd2Fy
Z3NbIm9wZW5zc2xfYmluYXJ5Il0pCisgICAgICAgIGlmIHBhdGggaXMgTm9uZToKKyAgICAgICAg
ICAgIHByaW50ID4+IHN5cy5zdGRlcnIsICJvcGVuc3NsLWJpbmFyeSBhcmd1bWVudCBtaXNzaW5n
IG9yIG5vdCBhIHZhbGlkIGV4ZWN1dGFibGUiCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAg
ICAgICBrd2FyZ3NbIm9wZW5zc2xfYmluYXJ5Il0gPSBwYXRoCisKKyAgICBpZiBrd2FyZ3NbInNz
bF90eXBlIl0gIT0gIm5vbmUiIGFuZCBrd2FyZ3NbInByb2R1Y3QiXSA9PSAiZmlyZWZveCI6Cisg
ICAgICAgIHBhdGggPSBleGVfcGF0aChrd2FyZ3NbImNlcnR1dGlsX2JpbmFyeSJdKQorICAgICAg
ICBpZiBwYXRoIGlzIE5vbmU6CisgICAgICAgICAgICBwcmludCA+PiBzeXMuc3RkZXJyLCAiY2Vy
dHV0aWwtYmluYXJ5IGFyZ3VtZW50IG1pc3Npbmcgb3Igbm90IGEgdmFsaWQgZXhlY3V0YWJsZSIK
KyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgIGt3YXJnc1siY2VydHV0aWxfYmluYXJ5
Il0gPSBwYXRoCisKKyAgICBpZiBrd2FyZ3NbJ2V4dHJhX3ByZWZzJ106CisgICAgICAgIG1pc3Np
bmcgPSBhbnkoJz0nIG5vdCBpbiBwcmVmYXJnIGZvciBwcmVmYXJnIGluIGt3YXJnc1snZXh0cmFf
cHJlZnMnXSkKKyAgICAgICAgaWYgbWlzc2luZzoKKyAgICAgICAgICAgIHByaW50ID4+IHN5cy5z
dGRlcnIsICJQcmVmZXJlbmNlcyB2aWEgLS1zZXRwcmVmIG11c3QgYmUgaW4ga2V5PXZhbHVlIGZv
cm1hdCIKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgIGt3YXJnc1snZXh0cmFfcHJl
ZnMnXSA9IFt0dXBsZShwcmVmYXJnLnNwbGl0KCc9JywgMSkpIGZvciBwcmVmYXJnIGluCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2FyZ3NbJ2V4dHJhX3ByZWZzJ11dCisKKyAg
ICBpZiBrd2FyZ3NbInJlZnRlc3RfaW50ZXJuYWwiXSBpcyBOb25lOgorICAgICAgICAjIERlZmF1
bHQgdG8gdGhlIGludGVybmFsIHJlZnRlc3QgaW1wbGVtZW50YXRpb24gb24gTGludXggYW5kIE9T
WAorICAgICAgICBrd2FyZ3NbInJlZnRlc3RfaW50ZXJuYWwiXSA9IHN5cy5wbGF0Zm9ybS5zdGFy
dHN3aXRoKCJsaW51eCIpIG9yIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCJkYXJ3aW4iKQorCisg
ICAgcmV0dXJuIGt3YXJncworCisKK2RlZiBjaGVja19hcmdzX3VwZGF0ZShrd2FyZ3MpOgorICAg
IHNldF9mcm9tX2NvbmZpZyhrd2FyZ3MpCisKKyAgICBpZiBrd2FyZ3NbInByb2R1Y3QiXSBpcyBO
b25lOgorICAgICAgICBrd2FyZ3NbInByb2R1Y3QiXSA9ICJmaXJlZm94IgorICAgIGlmIGt3YXJn
c1sicGF0Y2giXSBpcyBOb25lOgorICAgICAgICBrd2FyZ3NbInBhdGNoIl0gPSBrd2FyZ3NbInN5
bmMiXQorCisgICAgZm9yIGl0ZW0gaW4ga3dhcmdzWyJydW5fbG9nIl06CisgICAgICAgIGlmIG9z
LnBhdGguaXNkaXIoaXRlbSk6CisgICAgICAgICAgICBwcmludCA+PiBzeXMuc3RkZXJyLCAiTG9n
IGZpbGUgJXMgaXMgYSBkaXJlY3RvcnkiICUgaXRlbQorICAgICAgICAgICAgc3lzLmV4aXQoMSkK
KworICAgIHJldHVybiBrd2FyZ3MKKworCitkZWYgY3JlYXRlX3BhcnNlcl91cGRhdGUocHJvZHVj
dF9jaG9pY2VzPU5vbmUpOgorICAgIGZyb20gbW96bG9nLnN0cnVjdHVyZWQgaW1wb3J0IGNvbW1h
bmRsaW5lCisKKyAgICBpbXBvcnQgcHJvZHVjdHMKKworICAgIGlmIHByb2R1Y3RfY2hvaWNlcyBp
cyBOb25lOgorICAgICAgICBjb25maWdfZGF0YSA9IGNvbmZpZy5sb2FkKCkKKyAgICAgICAgcHJv
ZHVjdF9jaG9pY2VzID0gcHJvZHVjdHMucHJvZHVjdHNfZW5hYmxlZChjb25maWdfZGF0YSkKKwor
ICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCJ3ZWItcGxhdGZvcm0tdGVzdHMt
dXBkYXRlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlv
bj0iVXBkYXRlIHNjcmlwdCBmb3Igd2ViLXBsYXRmb3JtLXRlc3RzIHRlc3RzLiIpCisgICAgcGFy
c2VyLmFkZF9hcmd1bWVudCgiLS1wcm9kdWN0IiwgYWN0aW9uPSJzdG9yZSIsIGNob2ljZXM9cHJv
ZHVjdF9jaG9pY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1Ob25lLCBoZWxw
PSJCcm93c2VyIGZvciB3aGljaCBtZXRhZGF0YSBpcyBiZWluZyB1cGRhdGVkIikKKyAgICBwYXJz
ZXIuYWRkX2FyZ3VtZW50KCItLWNvbmZpZyIsIGFjdGlvbj0ic3RvcmUiLCB0eXBlPWFic19wYXRo
LCBoZWxwPSJQYXRoIHRvIGNvbmZpZyBmaWxlIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCIt
LW1ldGFkYXRhIiwgYWN0aW9uPSJzdG9yZSIsIHR5cGU9YWJzX3BhdGgsIGRlc3Q9Im1ldGFkYXRh
X3Jvb3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iUGF0aCB0byB0aGUgZm9sZGVy
IGNvbnRhaW5pbmcgdGVzdCBtZXRhZGF0YSIpLAorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi0t
dGVzdHMiLCBhY3Rpb249InN0b3JlIiwgdHlwZT1hYnNfcGF0aCwgZGVzdD0idGVzdHNfcm9vdCIs
CisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJQYXRoIHRvIHdlYi1wbGF0Zm9ybS10ZXN0
cyIpLAorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi0tc3luYy1wYXRoIiwgYWN0aW9uPSJzdG9y
ZSIsIHR5cGU9YWJzX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJQYXRoIHRv
IHN0b3JlIGdpdCBjaGVja291dCBvZiB3ZWItcGxhdGZvcm0tdGVzdHMgZHVyaW5nIHVwZGF0ZSIp
LAorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi0tcmVtb3RlX3VybCIsIGFjdGlvbj0ic3RvcmUi
LAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iVVJMIG9mIHdlYi1wbGF0ZnJvbS10ZXN0
cyByZXBvc2l0b3J5IHRvIHN5bmMgYWdhaW5zdCIpLAorICAgIHBhcnNlci5hZGRfYXJndW1lbnQo
Ii0tYnJhbmNoIiwgYWN0aW9uPSJzdG9yZSIsIHR5cGU9YWJzX3BhdGgsCisgICAgICAgICAgICAg
ICAgICAgICAgICBoZWxwPSJSZW1vdGUgYnJhbmNoIHRvIHN5bmMgYWdhaW5zdCIpCisgICAgcGFy
c2VyLmFkZF9hcmd1bWVudCgiLS1yZXYiLCBhY3Rpb249InN0b3JlIiwgaGVscD0iUmV2aXNpb24g
dG8gc3luYyB0byIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLS1wYXRjaCIsIGFjdGlvbj0i
c3RvcmVfdHJ1ZSIsIGRlc3Q9InBhdGNoIiwgZGVmYXVsdD1Ob25lLAorICAgICAgICAgICAgICAg
ICAgICAgICAgaGVscD0iQ3JlYXRlIGEgVkNTIGNvbW1pdCBjb250YWluaW5nIHRoZSBjaGFuZ2Vz
LiIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLS1uby1wYXRjaCIsIGFjdGlvbj0ic3RvcmVf
ZmFsc2UiLCBkZXN0PSJwYXRjaCIsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJEb24n
dCBjcmVhdGUgYSBWQ1MgY29tbWl0IGNvbnRhaW5pbmcgdGhlIGNoYW5nZXMuIikKKyAgICBwYXJz
ZXIuYWRkX2FyZ3VtZW50KCItLXN5bmMiLCBkZXN0PSJzeW5jIiwgYWN0aW9uPSJzdG9yZV90cnVl
IiwgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlN5bmMgdGhl
IHRlc3RzIHdpdGggdGhlIGxhdGVzdCBmcm9tIHVwc3RyZWFtIChpbXBsaWVzIC0tcGF0Y2gpIikK
KyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItLWlnbm9yZS1leGlzdGluZyIsIGFjdGlvbj0ic3Rv
cmVfdHJ1ZSIsIGhlbHA9IldoZW4gdXBkYXRpbmcgdGVzdCByZXN1bHRzIG9ubHkgY29uc2lkZXIg
cmVzdWx0cyBmcm9tIHRoZSBsb2dmaWxlcyBwcm92aWRlZCwgbm90IGV4aXN0aW5nIGV4cGVjdGF0
aW9ucy4iKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi0tY29udGludWUiLCBhY3Rpb249InN0
b3JlX3RydWUiLCBoZWxwPSJDb250aW51ZSBhIHByZXZpb3VzbHkgc3RhcnRlZCBydW4gb2YgdGhl
IHVwZGF0ZSBzY3JpcHQiKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi0tYWJvcnQiLCBhY3Rp
b249InN0b3JlX3RydWUiLCBoZWxwPSJDbGVhciBzdGF0ZSBmcm9tIGEgcHJldmlvdXMgaW5jb21w
bGV0ZSBydW4gb2YgdGhlIHVwZGF0ZSBzY3JpcHQiKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQo
Ii0tZXhjbHVkZSIsIGFjdGlvbj0ic3RvcmUiLCBuYXJncz0iKiIsCisgICAgICAgICAgICAgICAg
ICAgICAgICBoZWxwPSJMaXN0IG9mIGdsb2Itc3R5bGUgcGF0aHMgdG8gZXhjbHVkZSB3aGVuIHN5
bmNpbmcgdGVzdHMiKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi0taW5jbHVkZSIsIGFjdGlv
bj0ic3RvcmUiLCBuYXJncz0iKiIsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJMaXN0
IG9mIGdsb2Itc3R5bGUgcGF0aHMgdG8gaW5jbHVkZSB3aGljaCB3b3VsZCBvdGhlcndpc2UgYmUg
ZXhjbHVkZWQgd2hlbiBzeW5jaW5nIHRlc3RzIikKKyAgICAjIFNob3VsZCBtYWtlIHRoaXMgcmVx
dWlyZWQgaWZmIHJ1bj1sb2dmaWxlCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgicnVuX2xvZyIs
IG5hcmdzPSIqIiwgdHlwZT1hYnNfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9
IkxvZyBmaWxlIGZyb20gcnVuIG9mIHRlc3RzIikKKyAgICBjb21tYW5kbGluZS5hZGRfbG9nZ2lu
Z19ncm91cChwYXJzZXIpCisgICAgcmV0dXJuIHBhcnNlcgorCisKK2RlZiBjcmVhdGVfcGFyc2Vy
X3JlZHVjZShwcm9kdWN0X2Nob2ljZXM9Tm9uZSk6CisgICAgcGFyc2VyID0gY3JlYXRlX3BhcnNl
cihwcm9kdWN0X2Nob2ljZXMpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgidGFyZ2V0IiwgYWN0
aW9uPSJzdG9yZSIsIGhlbHA9IlRlc3QgaWQgdGhhdCBpcyB1bnN0YWJsZSIpCisgICAgcmV0dXJu
IHBhcnNlcgorCisKK2RlZiBwYXJzZV9hcmdzKCk6CisgICAgcGFyc2VyID0gY3JlYXRlX3BhcnNl
cigpCisgICAgcnYgPSB2YXJzKHBhcnNlci5wYXJzZV9hcmdzKCkpCisgICAgY2hlY2tfYXJncyhy
dikKKyAgICByZXR1cm4gcnYKKworCitkZWYgcGFyc2VfYXJnc191cGRhdGUoKToKKyAgICBwYXJz
ZXIgPSBjcmVhdGVfcGFyc2VyX3VwZGF0ZSgpCisgICAgcnYgPSB2YXJzKHBhcnNlci5wYXJzZV9h
cmdzKCkpCisgICAgY2hlY2tfYXJnc191cGRhdGUocnYpCisgICAgcmV0dXJuIHJ2CisKKworZGVm
IHBhcnNlX2FyZ3NfcmVkdWNlKCk6CisgICAgcGFyc2VyID0gY3JlYXRlX3BhcnNlcl9yZWR1Y2Uo
KQorICAgIHJ2ID0gdmFycyhwYXJzZXIucGFyc2VfYXJncygpKQorICAgIGNoZWNrX2FyZ3MocnYp
CisgICAgcmV0dXJuIHJ2CmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mv
dG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci93cHRsb2dnaW5nLnB5IGIvV2ViRHJpdmVyVGVzdHMv
aW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvd3B0bG9nZ2luZy5weQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMWFiNjc1NWM0MzUKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dw
dHJ1bm5lci93cHRsb2dnaW5nLnB5CkBAIC0wLDAgKzEsMTIxIEBACitpbXBvcnQgbG9nZ2luZwor
aW1wb3J0IHN5cworaW1wb3J0IHRocmVhZGluZworZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5n
SU8KK2Zyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBRdWV1ZQorCitmcm9tIG1vemxvZyBpbXBv
cnQgY29tbWFuZGxpbmUsIHN0ZGFkYXB0ZXIKKworZGVmIHNldHVwKGFyZ3MsIGRlZmF1bHRzKToK
KyAgICBsb2dnZXIgPSBjb21tYW5kbGluZS5zZXR1cF9sb2dnaW5nKCJ3ZWItcGxhdGZvcm0tdGVz
dHMiLCBhcmdzLCBkZWZhdWx0cykKKyAgICBzZXR1cF9zdGRsaWJfbG9nZ2VyKCkKKworICAgIGZv
ciBuYW1lIGluIGFyZ3Mua2V5cygpOgorICAgICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoImxvZ18i
KToKKyAgICAgICAgICAgIGFyZ3MucG9wKG5hbWUpCisKKyAgICByZXR1cm4gbG9nZ2VyCisKKwor
ZGVmIHNldHVwX3N0ZGxpYl9sb2dnZXIoKToKKyAgICBsb2dnaW5nLnJvb3QuaGFuZGxlcnMgPSBb
XQorICAgIGxvZ2dpbmcucm9vdCA9IHN0ZGFkYXB0ZXIuc3RkX2xvZ2dpbmdfYWRhcHRlcihsb2dn
aW5nLnJvb3QpCisKKworY2xhc3MgTG9nTGV2ZWxSZXdyaXRlcihvYmplY3QpOgorICAgICIiIkZp
bHRlciB0aGF0IHJlcGxhY2VzIGxvZyBtZXNzYWdlcyBhdCBzcGVjaWZpZWQgbGV2ZWxzIHdpdGgg
bWVzc2FnZXMKKyAgICBhdCBhIGRpZmZlcmVudCBsZXZlbC4KKworICAgIFRoaXMgY2FuIGJlIHVz
ZWQgdG8gZS5nLiBkb3duZ3JhZGUgbG9nIG1lc3NhZ2VzIGZyb20gRVJST1IgdG8gV0FSTklORwor
ICAgIGluIHNvbWUgY29tcG9uZW50IHdoZXJlIEVSUk9ScyBhcmUgbm90IGNyaXRpY2FsLgorCisg
ICAgOnBhcmFtIGlubmVyOiBIYW5kbGVyIHRvIHVzZSBmb3IgbWVzc2FnZXMgdGhhdCBwYXNzIHRo
aXMgZmlsdGVyCisgICAgOnBhcmFtIGZyb21fbGV2ZWxzOiBMaXN0IG9mIGxldmVscyB3aGljaCBz
aG91bGQgYmUgYWZmZWN0ZWQKKyAgICA6cGFyYW0gdG9fbGV2ZWw6IExvZyBsZXZlbCB0byBzZXQg
Zm9yIHRoZSBhZmZlY3RlZCBtZXNzYWdlcworICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBpbm5lciwgZnJvbV9sZXZlbHMsIHRvX2xldmVsKToKKyAgICAgICAgc2VsZi5pbm5lciA9IGlu
bmVyCisgICAgICAgIHNlbGYuZnJvbV9sZXZlbHMgPSBbaXRlbS51cHBlcigpIGZvciBpdGVtIGlu
IGZyb21fbGV2ZWxzXQorICAgICAgICBzZWxmLnRvX2xldmVsID0gdG9fbGV2ZWwudXBwZXIoKQor
CisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIGRhdGEpOgorICAgICAgICBpZiBkYXRhWyJhY3Rpb24i
XSA9PSAibG9nIiBhbmQgZGF0YVsibGV2ZWwiXS51cHBlcigpIGluIHNlbGYuZnJvbV9sZXZlbHM6
CisgICAgICAgICAgICBkYXRhID0gZGF0YS5jb3B5KCkKKyAgICAgICAgICAgIGRhdGFbImxldmVs
Il0gPSBzZWxmLnRvX2xldmVsCisgICAgICAgIHJldHVybiBzZWxmLmlubmVyKGRhdGEpCisKKwor
CitjbGFzcyBMb2dUaHJlYWQodGhyZWFkaW5nLlRocmVhZCk6CisgICAgZGVmIF9faW5pdF9fKHNl
bGYsIHF1ZXVlLCBsb2dnZXIsIGxldmVsKToKKyAgICAgICAgc2VsZi5xdWV1ZSA9IHF1ZXVlCisg
ICAgICAgIHNlbGYubG9nX2Z1bmMgPSBnZXRhdHRyKGxvZ2dlciwgbGV2ZWwpCisgICAgICAgIHRo
cmVhZGluZy5UaHJlYWQuX19pbml0X18oc2VsZiwgbmFtZT0iVGhyZWFkLUxvZyIpCisgICAgICAg
IHNlbGYuZGFlbW9uID0gVHJ1ZQorCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgd2hpbGUg
VHJ1ZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBtc2cgPSBzZWxmLnF1ZXVl
LmdldCgpCisgICAgICAgICAgICBleGNlcHQgKEVPRkVycm9yLCBJT0Vycm9yKToKKyAgICAgICAg
ICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgbXNnIGlzIE5vbmU6CisgICAgICAgICAgICAg
ICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5sb2dfZnVu
Yyhtc2cpCisKKworY2xhc3MgTG9nZ2luZ1dyYXBwZXIoU3RyaW5nSU8pOgorICAgICIiIldyYXBw
ZXIgZm9yIGZpbGUgbGlrZSBvYmplY3RzIHRvIHJlZGlyZWN0IG91dHB1dCB0byBsb2dnZXIKKyAg
ICBpbnN0ZWFkIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcXVldWUsIHByZWZpeD1Ob25l
KToKKyAgICAgICAgU3RyaW5nSU8uX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5xdWV1ZSA9
IHF1ZXVlCisgICAgICAgIHNlbGYucHJlZml4ID0gcHJlZml4CisKKyAgICBkZWYgd3JpdGUoc2Vs
ZiwgZGF0YSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoZGF0YSwgc3RyKToKKyAgICAgICAgICAg
IGRhdGEgPSBkYXRhLmRlY29kZSgidXRmOCIpCisKKyAgICAgICAgaWYgZGF0YS5lbmRzd2l0aCgi
XG4iKToKKyAgICAgICAgICAgIGRhdGEgPSBkYXRhWzotMV0KKyAgICAgICAgaWYgZGF0YS5lbmRz
d2l0aCgiXHIiKToKKyAgICAgICAgICAgIGRhdGEgPSBkYXRhWzotMV0KKyAgICAgICAgaWYgbm90
IGRhdGE6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgc2VsZi5wcmVmaXggaXMgbm90
IE5vbmU6CisgICAgICAgICAgICBkYXRhID0gIiVzOiAlcyIgJSAoc2VsZi5wcmVmaXgsIGRhdGEp
CisgICAgICAgIHNlbGYucXVldWUucHV0KGRhdGEpCisKKyAgICBkZWYgZmx1c2goc2VsZik6Cisg
ICAgICAgIHBhc3MKKworCitjbGFzcyBDYXB0dXJlSU8ob2JqZWN0KToKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgbG9nZ2VyLCBkb19jYXB0dXJlKToKKyAgICAgICAgc2VsZi5sb2dnZXIgPSBsb2dn
ZXIKKyAgICAgICAgc2VsZi5kb19jYXB0dXJlID0gZG9fY2FwdHVyZQorICAgICAgICBzZWxmLmxv
Z2dpbmdfcXVldWUgPSBOb25lCisgICAgICAgIHNlbGYubG9nZ2luZ190aHJlYWQgPSBOb25lCisg
ICAgICAgIHNlbGYub3JpZ2luYWxfc3RkaW8gPSBOb25lCisKKyAgICBkZWYgX19lbnRlcl9fKHNl
bGYpOgorICAgICAgICBpZiBzZWxmLmRvX2NhcHR1cmU6CisgICAgICAgICAgICBzZWxmLm9yaWdp
bmFsX3N0ZGlvID0gKHN5cy5zdGRvdXQsIHN5cy5zdGRlcnIpCisgICAgICAgICAgICBzZWxmLmxv
Z2dpbmdfcXVldWUgPSBRdWV1ZSgpCisgICAgICAgICAgICBzZWxmLmxvZ2dpbmdfdGhyZWFkID0g
TG9nVGhyZWFkKHNlbGYubG9nZ2luZ19xdWV1ZSwgc2VsZi5sb2dnZXIsICJpbmZvIikKKyAgICAg
ICAgICAgIHN5cy5zdGRvdXQgPSBMb2dnaW5nV3JhcHBlcihzZWxmLmxvZ2dpbmdfcXVldWUsIHBy
ZWZpeD0iU1RET1VUIikKKyAgICAgICAgICAgIHN5cy5zdGRlcnIgPSBMb2dnaW5nV3JhcHBlcihz
ZWxmLmxvZ2dpbmdfcXVldWUsIHByZWZpeD0iU1RERVJSIikKKyAgICAgICAgICAgIHNlbGYubG9n
Z2luZ190aHJlYWQuc3RhcnQoKQorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzLCAqKmt3
YXJncyk6CisgICAgICAgIGlmIHNlbGYuZG9fY2FwdHVyZToKKyAgICAgICAgICAgIHN5cy5zdGRv
dXQsIHN5cy5zdGRlcnIgPSBzZWxmLm9yaWdpbmFsX3N0ZGlvCisgICAgICAgICAgICBpZiBzZWxm
LmxvZ2dpbmdfcXVldWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIu
aW5mbygiQ2xvc2luZyBsb2dnaW5nIHF1ZXVlIikKKyAgICAgICAgICAgICAgICBzZWxmLmxvZ2dp
bmdfcXVldWUucHV0KE5vbmUpCisgICAgICAgICAgICAgICAgaWYgc2VsZi5sb2dnaW5nX3RocmVh
ZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dnaW5nX3RocmVhZC5q
b2luKDEwKQorICAgICAgICAgICAgICAgIHNlbGYubG9nZ2luZ19xdWV1ZS5jbG9zZSgpCisgICAg
ICAgICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygicXVldWUgY2xvc2VkIikKZGlmZiAtLWdpdCBh
L1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3dw
dG1hbmlmZXN0L19faW5pdF9fLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xz
L3dwdHJ1bm5lci93cHRydW5uZXIvd3B0bWFuaWZlc3QvX19pbml0X18ucHkKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjZiNjQ3ODRjN2U2Ci0tLSAvZGV2L251bGwKKysr
IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIv
d3B0bWFuaWZlc3QvX19pbml0X18ucHkKQEAgLTAsMCArMSw0IEBACitmcm9tIHNlcmlhbGl6ZXIg
aW1wb3J0IHNlcmlhbGl6ZQorZnJvbSBwYXJzZXIgaW1wb3J0IHBhcnNlCitmcm9tIGJhY2tlbmRz
LnN0YXRpYyBpbXBvcnQgY29tcGlsZSBhcyBjb21waWxlX3N0YXRpYworZnJvbSBiYWNrZW5kcy5j
b25kaXRpb25hbCBpbXBvcnQgY29tcGlsZSBhcyBjb21waWxlX2NvbmRpdGlvbgpkaWZmIC0tZ2l0
IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIv
d3B0bWFuaWZlc3QvYmFja2VuZHMvX19pbml0X18ucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRl
ZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci93cHRtYW5pZmVzdC9iYWNrZW5kcy9fX2lu
aXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZTY5ZGUyOWJi
MmQKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5u
ZXIvd3B0cnVubmVyL3dwdG1hbmlmZXN0L2JhY2tlbmRzL2NvbmRpdGlvbmFsLnB5IGIvV2ViRHJp
dmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvd3B0bWFuaWZl
c3QvYmFja2VuZHMvY29uZGl0aW9uYWwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAuLjYyOWQwMWQ3MTU4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMv
aW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvd3B0bWFuaWZlc3QvYmFja2Vu
ZHMvY29uZGl0aW9uYWwucHkKQEAgLTAsMCArMSwzMzIgQEAKK2ltcG9ydCBvcGVyYXRvcgorCitm
cm9tIC4ubm9kZSBpbXBvcnQgTm9kZVZpc2l0b3IsIERhdGFOb2RlLCBDb25kaXRpb25hbE5vZGUs
IEtleVZhbHVlTm9kZSwgTGlzdE5vZGUsIFZhbHVlTm9kZQorZnJvbSAuLnBhcnNlciBpbXBvcnQg
cGFyc2UKKworCitjbGFzcyBDb25kaXRpb25hbFZhbHVlKG9iamVjdCk6CisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIG5vZGUsIGNvbmRpdGlvbl9mdW5jKToKKyAgICAgICAgc2VsZi5ub2RlID0gbm9k
ZQorICAgICAgICBzZWxmLmNvbmRpdGlvbl9mdW5jID0gY29uZGl0aW9uX2Z1bmMKKyAgICAgICAg
aWYgaXNpbnN0YW5jZShub2RlLCBDb25kaXRpb25hbE5vZGUpOgorICAgICAgICAgICAgYXNzZXJ0
IGxlbihub2RlLmNoaWxkcmVuKSA9PSAyCisgICAgICAgICAgICBzZWxmLmNvbmRpdGlvbl9ub2Rl
ID0gc2VsZi5ub2RlLmNoaWxkcmVuWzBdCisgICAgICAgICAgICBzZWxmLnZhbHVlX25vZGUgPSBz
ZWxmLm5vZGUuY2hpbGRyZW5bMV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFzc2VydCBp
c2luc3RhbmNlKG5vZGUsIChWYWx1ZU5vZGUsIExpc3ROb2RlKSkKKyAgICAgICAgICAgIHNlbGYu
Y29uZGl0aW9uX25vZGUgPSBOb25lCisgICAgICAgICAgICBzZWxmLnZhbHVlX25vZGUgPSBzZWxm
Lm5vZGUKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB2YWx1ZShzZWxmKToKKyAgICAgICAgaWYg
aXNpbnN0YW5jZShzZWxmLnZhbHVlX25vZGUsIFZhbHVlTm9kZSk6CisgICAgICAgICAgICByZXR1
cm4gc2VsZi52YWx1ZV9ub2RlLmRhdGEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVy
biBbaXRlbS5kYXRhIGZvciBpdGVtIGluIHNlbGYudmFsdWVfbm9kZS5jaGlsZHJlbl0KKworICAg
IEB2YWx1ZS5zZXR0ZXIKKyAgICBkZWYgdmFsdWUoc2VsZiwgdmFsdWUpOgorICAgICAgICBzZWxm
LnZhbHVlX25vZGUuZGF0YSA9IHZhbHVlCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgcnVuX2lu
Zm8pOgorICAgICAgICByZXR1cm4gc2VsZi5jb25kaXRpb25fZnVuYyhydW5faW5mbykKKworICAg
IGRlZiBzZXRfdmFsdWUoc2VsZiwgdmFsdWUpOgorICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUK
KworICAgIGRlZiByZW1vdmUoc2VsZik6CisgICAgICAgIGlmIGxlbihzZWxmLm5vZGUucGFyZW50
LmNoaWxkcmVuKSA9PSAxOgorICAgICAgICAgICAgc2VsZi5ub2RlLnBhcmVudC5yZW1vdmUoKQor
ICAgICAgICBzZWxmLm5vZGUucmVtb3ZlKCkKKworCitjbGFzcyBDb21waWxlcihOb2RlVmlzaXRv
cik6CisgICAgZGVmIGNvbXBpbGUoc2VsZiwgdHJlZSwgZGF0YV9jbHNfZ2V0dGVyPU5vbmUsICoq
a3dhcmdzKToKKyAgICAgICAgIiIiQ29tcGlsZSBhIHJhdyBBU1QgaW50byBhIGZvcm0gd2hlcmUg
Y29uZGl0aW9uYWwgZXhwcmVzc2lvbnMKKyAgICAgICAgYXJlIHJlcHJlc2VudGVkIGJ5IENvbmRp
dGlvbmFsVmFsdWUgb2JqZWN0cyB0aGF0IGNhbiBiZSBldmFsdWF0ZWQKKyAgICAgICAgYXQgcnVu
dGltZS4KKworICAgICAgICB0cmVlIC0gVGhlIHJvb3Qgbm9kZSBvZiB0aGUgd3B0bWFuaWZlc3Qg
QVNUIHRvIGNvbXBpbGUKKworICAgICAgICBkYXRhX2Nsc19nZXR0ZXIgLSBBIGZ1bmN0aW9uIHRh
a2luZyB0d28gcGFyYW1ldGVyczsgdGhlIHByZXZpb3VzCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIG91dHB1dCBub2RlIGFuZCB0aGUgY3VycmVudCBhc3Qgbm9kZSBhbmQgcmV0dXJuaW5nCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjbGFzcyBvZiB0aGUgb3V0cHV0IG5vZGUgdG8g
dXNlIGZvciB0aGUgY3VycmVudAorICAgICAgICAgICAgICAgICAgICAgICAgICBhc3Qgbm9kZQor
ICAgICAgICAiIiIKKyAgICAgICAgaWYgZGF0YV9jbHNfZ2V0dGVyIGlzIE5vbmU6CisgICAgICAg
ICAgICBzZWxmLmRhdGFfY2xzX2dldHRlciA9IGxhbWJkYSB4LCB5OiBNYW5pZmVzdEl0ZW0KKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZGF0YV9jbHNfZ2V0dGVyID0gZGF0YV9jbHNf
Z2V0dGVyCisKKyAgICAgICAgc2VsZi50cmVlID0gdHJlZQorICAgICAgICBzZWxmLm91dHB1dF9u
b2RlID0gc2VsZi5faW5pdGlhbF9vdXRwdXRfbm9kZSh0cmVlLCAqKmt3YXJncykKKyAgICAgICAg
c2VsZi52aXNpdCh0cmVlKQorICAgICAgICBpZiBoYXNhdHRyKHNlbGYub3V0cHV0X25vZGUsICJz
ZXRfZGVmYXVsdHMiKToKKyAgICAgICAgICAgIHNlbGYub3V0cHV0X25vZGUuc2V0X2RlZmF1bHRz
KCkKKyAgICAgICAgYXNzZXJ0IHNlbGYub3V0cHV0X25vZGUgaXMgbm90IE5vbmUKKyAgICAgICAg
cmV0dXJuIHNlbGYub3V0cHV0X25vZGUKKworICAgIGRlZiBjb21waWxlX2NvbmRpdGlvbihzZWxm
LCBjb25kaXRpb24pOgorICAgICAgICAiIiJDb21waWxlIGEgQ29uZGl0aW9uYWxOb2RlIGludG8g
YSBDb25kaXRpb25hbFZhbHVlLgorCisgICAgICAgIGNvbmRpdGlvbjogQSBDb25kaXRpb25hbE5v
ZGUiIiIKKyAgICAgICAgZGF0YV9ub2RlID0gRGF0YU5vZGUoKQorICAgICAgICBrZXlfdmFsdWVf
bm9kZSA9IEtleVZhbHVlTm9kZSgpCisgICAgICAgIGtleV92YWx1ZV9ub2RlLmFwcGVuZChjb25k
aXRpb24uY29weSgpKQorICAgICAgICBkYXRhX25vZGUuYXBwZW5kKGtleV92YWx1ZV9ub2RlKQor
ICAgICAgICBtYW5pZmVzdF9pdGVtID0gc2VsZi5jb21waWxlKGRhdGFfbm9kZSkKKyAgICAgICAg
cmV0dXJuIG1hbmlmZXN0X2l0ZW0uX2RhdGFbTm9uZV1bMF0KKworICAgIGRlZiBfaW5pdGlhbF9v
dXRwdXRfbm9kZShzZWxmLCBub2RlLCAqKmt3YXJncyk6CisgICAgICAgIHJldHVybiBzZWxmLmRh
dGFfY2xzX2dldHRlcihOb25lLCBOb25lKShub2RlLCAqKmt3YXJncykKKworICAgIGRlZiB2aXNp
dF9EYXRhTm9kZShzZWxmLCBub2RlKToKKyAgICAgICAgaWYgbm9kZSAhPSBzZWxmLnRyZWU6Cisg
ICAgICAgICAgICBvdXRwdXRfcGFyZW50ID0gc2VsZi5vdXRwdXRfbm9kZQorICAgICAgICAgICAg
c2VsZi5vdXRwdXRfbm9kZSA9IHNlbGYuZGF0YV9jbHNfZ2V0dGVyKHNlbGYub3V0cHV0X25vZGUs
IG5vZGUpKG5vZGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvdXRwdXRfcGFyZW50ID0g
Tm9uZQorCisgICAgICAgIGFzc2VydCBzZWxmLm91dHB1dF9ub2RlIGlzIG5vdCBOb25lCisKKyAg
ICAgICAgZm9yIGNoaWxkIGluIG5vZGUuY2hpbGRyZW46CisgICAgICAgICAgICBzZWxmLnZpc2l0
KGNoaWxkKQorCisgICAgICAgIGlmIG91dHB1dF9wYXJlbnQgaXMgbm90IE5vbmU6CisgICAgICAg
ICAgICAjIEFwcGVuZCB0byB0aGUgcGFyZW50ICphZnRlciogcHJvY2Vzc2luZyBhbGwgdGhlIG5v
ZGUgZGF0YQorICAgICAgICAgICAgb3V0cHV0X3BhcmVudC5hcHBlbmQoc2VsZi5vdXRwdXRfbm9k
ZSkKKyAgICAgICAgICAgIHNlbGYub3V0cHV0X25vZGUgPSBzZWxmLm91dHB1dF9ub2RlLnBhcmVu
dAorCisgICAgICAgIGFzc2VydCBzZWxmLm91dHB1dF9ub2RlIGlzIG5vdCBOb25lCisKKyAgICBk
ZWYgdmlzaXRfS2V5VmFsdWVOb2RlKHNlbGYsIG5vZGUpOgorICAgICAgICBrZXlfdmFsdWVzID0g
W10KKyAgICAgICAgZm9yIGNoaWxkIGluIG5vZGUuY2hpbGRyZW46CisgICAgICAgICAgICBjb25k
aXRpb24sIHZhbHVlID0gc2VsZi52aXNpdChjaGlsZCkKKyAgICAgICAgICAgIGtleV92YWx1ZXMu
YXBwZW5kKENvbmRpdGlvbmFsVmFsdWUoY2hpbGQsIGNvbmRpdGlvbikpCisKKyAgICAgICAgc2Vs
Zi5vdXRwdXRfbm9kZS5fYWRkX2tleV92YWx1ZShub2RlLCBrZXlfdmFsdWVzKQorCisgICAgZGVm
IHZpc2l0X0xpc3ROb2RlKHNlbGYsIG5vZGUpOgorICAgICAgICByZXR1cm4gKGxhbWJkYSB4OlRy
dWUsIFtzZWxmLnZpc2l0KGNoaWxkKSBmb3IgY2hpbGQgaW4gbm9kZS5jaGlsZHJlbl0pCisKKyAg
ICBkZWYgdmlzaXRfVmFsdWVOb2RlKHNlbGYsIG5vZGUpOgorICAgICAgICByZXR1cm4gKGxhbWJk
YSB4OiBUcnVlLCBub2RlLmRhdGEpCisKKyAgICBkZWYgdmlzaXRfQXRvbU5vZGUoc2VsZiwgbm9k
ZSk6CisgICAgICAgIHJldHVybiAobGFtYmRhIHg6IFRydWUsIG5vZGUuZGF0YSkKKworICAgIGRl
ZiB2aXNpdF9Db25kaXRpb25hbE5vZGUoc2VsZiwgbm9kZSk6CisgICAgICAgIHJldHVybiBzZWxm
LnZpc2l0KG5vZGUuY2hpbGRyZW5bMF0pLCBzZWxmLnZpc2l0KG5vZGUuY2hpbGRyZW5bMV0pCisK
KyAgICBkZWYgdmlzaXRfU3RyaW5nTm9kZShzZWxmLCBub2RlKToKKyAgICAgICAgaW5kZXhlcyA9
IFtzZWxmLnZpc2l0KGNoaWxkKSBmb3IgY2hpbGQgaW4gbm9kZS5jaGlsZHJlbl0KKworICAgICAg
ICBkZWYgdmFsdWUoeCk6CisgICAgICAgICAgICBydiA9IG5vZGUuZGF0YQorICAgICAgICAgICAg
Zm9yIGluZGV4IGluIGluZGV4ZXM6CisgICAgICAgICAgICAgICAgcnYgPSBydltpbmRleCh4KV0K
KyAgICAgICAgICAgIHJldHVybiBydgorICAgICAgICByZXR1cm4gdmFsdWUKKworICAgIGRlZiB2
aXNpdF9OdW1iZXJOb2RlKHNlbGYsIG5vZGUpOgorICAgICAgICBpZiAiLiIgaW4gbm9kZS5kYXRh
OgorICAgICAgICAgICAgcmV0dXJuIGxhbWJkYSB4OiBmbG9hdChub2RlLmRhdGEpCisgICAgICAg
IGVsc2U6CisgICAgICAgICAgICByZXR1cm4gbGFtYmRhIHg6IGludChub2RlLmRhdGEpCisKKyAg
ICBkZWYgdmlzaXRfVmFyaWFibGVOb2RlKHNlbGYsIG5vZGUpOgorICAgICAgICBpbmRleGVzID0g
W3NlbGYudmlzaXQoY2hpbGQpIGZvciBjaGlsZCBpbiBub2RlLmNoaWxkcmVuXQorCisgICAgICAg
IGRlZiB2YWx1ZSh4KToKKyAgICAgICAgICAgIGRhdGEgPSB4W25vZGUuZGF0YV0KKyAgICAgICAg
ICAgIGZvciBpbmRleCBpbiBpbmRleGVzOgorICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW2lu
ZGV4KHgpXQorICAgICAgICAgICAgcmV0dXJuIGRhdGEKKyAgICAgICAgcmV0dXJuIHZhbHVlCisK
KyAgICBkZWYgdmlzaXRfSW5kZXhOb2RlKHNlbGYsIG5vZGUpOgorICAgICAgICBhc3NlcnQgbGVu
KG5vZGUuY2hpbGRyZW4pID09IDEKKyAgICAgICAgcmV0dXJuIHNlbGYudmlzaXQobm9kZS5jaGls
ZHJlblswXSkKKworICAgIGRlZiB2aXNpdF9VbmFyeUV4cHJlc3Npb25Ob2RlKHNlbGYsIG5vZGUp
OgorICAgICAgICBhc3NlcnQgbGVuKG5vZGUuY2hpbGRyZW4pID09IDIKKyAgICAgICAgb3BlcmF0
b3IgPSBzZWxmLnZpc2l0KG5vZGUuY2hpbGRyZW5bMF0pCisgICAgICAgIG9wZXJhbmQgPSBzZWxm
LnZpc2l0KG5vZGUuY2hpbGRyZW5bMV0pCisKKyAgICAgICAgcmV0dXJuIGxhbWJkYSB4OiBvcGVy
YXRvcihvcGVyYW5kKHgpKQorCisgICAgZGVmIHZpc2l0X0JpbmFyeUV4cHJlc3Npb25Ob2RlKHNl
bGYsIG5vZGUpOgorICAgICAgICBhc3NlcnQgbGVuKG5vZGUuY2hpbGRyZW4pID09IDMKKyAgICAg
ICAgb3BlcmF0b3IgPSBzZWxmLnZpc2l0KG5vZGUuY2hpbGRyZW5bMF0pCisgICAgICAgIG9wZXJh
bmRfMCA9IHNlbGYudmlzaXQobm9kZS5jaGlsZHJlblsxXSkKKyAgICAgICAgb3BlcmFuZF8xID0g
c2VsZi52aXNpdChub2RlLmNoaWxkcmVuWzJdKQorCisgICAgICAgIGFzc2VydCBvcGVyYW5kXzAg
aXMgbm90IE5vbmUKKyAgICAgICAgYXNzZXJ0IG9wZXJhbmRfMSBpcyBub3QgTm9uZQorCisgICAg
ICAgIHJldHVybiBsYW1iZGEgeDogb3BlcmF0b3Iob3BlcmFuZF8wKHgpLCBvcGVyYW5kXzEoeCkp
CisKKyAgICBkZWYgdmlzaXRfVW5hcnlPcGVyYXRvck5vZGUoc2VsZiwgbm9kZSk6CisgICAgICAg
IHJldHVybiB7Im5vdCI6IG9wZXJhdG9yLm5vdF99W25vZGUuZGF0YV0KKworICAgIGRlZiB2aXNp
dF9CaW5hcnlPcGVyYXRvck5vZGUoc2VsZiwgbm9kZSk6CisgICAgICAgIHJldHVybiB7ImFuZCI6
IG9wZXJhdG9yLmFuZF8sCisgICAgICAgICAgICAgICAgIm9yIjogb3BlcmF0b3Iub3JfLAorICAg
ICAgICAgICAgICAgICI9PSI6IG9wZXJhdG9yLmVxLAorICAgICAgICAgICAgICAgICIhPSI6IG9w
ZXJhdG9yLm5lfVtub2RlLmRhdGFdCisKKworY2xhc3MgTWFuaWZlc3RJdGVtKG9iamVjdCk6Cisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIG5vZGU9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICBzZWxm
Lm5vZGUgPSBub2RlCisgICAgICAgIHNlbGYucGFyZW50ID0gTm9uZQorICAgICAgICBzZWxmLmNo
aWxkcmVuID0gW10KKyAgICAgICAgc2VsZi5fZGF0YSA9IHt9CisKKyAgICBkZWYgX19yZXByX18o
c2VsZik6CisgICAgICAgIHJldHVybiAiPE1hbmlmZXN0SXRlbSAlcz4iICUgKHNlbGYubm9kZS5k
YXRhKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJ2ID0gW3JlcHIoc2VsZild
CisgICAgICAgIGZvciBpdGVtIGluIHNlbGYuY2hpbGRyZW46CisgICAgICAgICAgICBydi5leHRl
bmQoIiAgJXMiICUgbGluZSBmb3IgbGluZSBpbiBzdHIoaXRlbSkuc3BsaXQoIlxuIikpCisgICAg
ICAgIHJldHVybiAiXG4iLmpvaW4ocnYpCisKKyAgICBkZWYgX19jb250YWluc19fKHNlbGYsIGtl
eSk6CisgICAgICAgIHJldHVybiBrZXkgaW4gc2VsZi5fZGF0YQorCisgICAgQHByb3BlcnR5Cisg
ICAgZGVmIGlzX2VtcHR5KHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9kYXRhOgorICAgICAgICAg
ICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBhbGwoY2hpbGQuaXNfZW1wdHkgZm9yIGNo
aWxkIGluIHNlbGYuY2hpbGRyZW4pCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcm9vdChzZWxm
KToKKyAgICAgICAgbm9kZSA9IHNlbGYKKyAgICAgICAgd2hpbGUgbm9kZS5wYXJlbnQgaXMgbm90
IE5vbmU6CisgICAgICAgICAgICBub2RlID0gbm9kZS5wYXJlbnQKKyAgICAgICAgcmV0dXJuIG5v
ZGUKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4g
c2VsZi5ub2RlLmRhdGEKKworICAgIGRlZiBoYXNfa2V5KHNlbGYsIGtleSk6CisgICAgICAgIGZv
ciBub2RlIGluIFtzZWxmLCBzZWxmLnJvb3RdOgorICAgICAgICAgICAgaWYga2V5IGluIG5vZGUu
X2RhdGE6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNl
CisKKyAgICBkZWYgZ2V0KHNlbGYsIGtleSwgcnVuX2luZm89Tm9uZSk6CisgICAgICAgIGlmIHJ1
bl9pbmZvIGlzIE5vbmU6CisgICAgICAgICAgICBydW5faW5mbyA9IHt9CisKKyAgICAgICAgZm9y
IG5vZGUgaW4gW3NlbGYsIHNlbGYucm9vdF06CisgICAgICAgICAgICBpZiBrZXkgaW4gbm9kZS5f
ZGF0YToKKyAgICAgICAgICAgICAgICBmb3IgY29uZF92YWx1ZSBpbiBub2RlLl9kYXRhW2tleV06
CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNo
ZXMgPSBjb25kX3ZhbHVlKHJ1bl9pbmZvKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgS2V5
RXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVzID0gRmFsc2UKKyAgICAgICAg
ICAgICAgICAgICAgaWYgbWF0Y2hlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBj
b25kX3ZhbHVlLnZhbHVlCisgICAgICAgIHJhaXNlIEtleUVycm9yCisKKyAgICBkZWYgc2V0KHNl
bGYsIGtleSwgdmFsdWUsIGNvbmRpdGlvbj1Ob25lKToKKyAgICAgICAgIyBGaXJzdCB0cnkgdG8g
dXBkYXRlIHRoZSBleGlzdGluZyB2YWx1ZQorICAgICAgICBpZiBrZXkgaW4gc2VsZi5fZGF0YToK
KyAgICAgICAgICAgIGNvbmRfdmFsdWVzID0gc2VsZi5fZGF0YVtrZXldCisgICAgICAgICAgICBm
b3IgY29uZF92YWx1ZSBpbiBjb25kX3ZhbHVlczoKKyAgICAgICAgICAgICAgICBpZiBjb25kX3Zh
bHVlLmNvbmRpdGlvbl9ub2RlID09IGNvbmRpdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgY29u
ZF92YWx1ZS52YWx1ZSA9IHZhbHVlCisgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAg
ICAgICAgIyBJZiB0aGVyZSBpc24ndCBhIGNvbmRpdGlvbmFsIG1hdGNoIHJldXNlIHRoZSBleGlz
dGluZyBLZXlWYWx1ZU5vZGUgYXMgdGhlCisgICAgICAgICAgICAjIHBhcmVudAorICAgICAgICAg
ICAgbm9kZSA9IE5vbmUKKyAgICAgICAgICAgIGZvciBjaGlsZCBpbiBzZWxmLm5vZGUuY2hpbGRy
ZW46CisgICAgICAgICAgICAgICAgaWYgY2hpbGQuZGF0YSA9PSBrZXk6CisgICAgICAgICAgICAg
ICAgICAgIG5vZGUgPSBjaGlsZAorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAg
ICAgYXNzZXJ0IG5vZGUgaXMgbm90IE5vbmUKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAg
bm9kZSA9IEtleVZhbHVlTm9kZShrZXkpCisgICAgICAgICAgICBzZWxmLm5vZGUuYXBwZW5kKG5v
ZGUpCisKKyAgICAgICAgdmFsdWVfbm9kZSA9IFZhbHVlTm9kZSh2YWx1ZSkKKyAgICAgICAgaWYg
Y29uZGl0aW9uIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgY29uZGl0aW9uYWxfbm9kZSA9IENv
bmRpdGlvbmFsTm9kZSgpCisgICAgICAgICAgICBjb25kaXRpb25hbF9ub2RlLmFwcGVuZChjb25k
aXRpb24pCisgICAgICAgICAgICBjb25kaXRpb25hbF9ub2RlLmFwcGVuZCh2YWx1ZV9ub2RlKQor
ICAgICAgICAgICAgbm9kZS5hcHBlbmQoY29uZGl0aW9uYWxfbm9kZSkKKyAgICAgICAgICAgIGNv
bmRfdmFsdWUgPSBDb21waWxlcigpLmNvbXBpbGVfY29uZGl0aW9uKGNvbmRpdGlvbmFsX25vZGUp
CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBub2RlLmFwcGVuZCh2YWx1ZV9ub2RlKQorICAg
ICAgICAgICAgY29uZF92YWx1ZSA9IENvbmRpdGlvbmFsVmFsdWUodmFsdWVfbm9kZSwgbGFtYmRh
IHg6IFRydWUpCisKKyAgICAgICAgIyBVcGRhdGUgdGhlIGNhY2hlIG9mIGNoaWxkIHZhbHVlcy4g
VGhpcyBpcyBwcmV0dHkgYW5ub3lpbmcgYW5kIG1heWJlCisgICAgICAgICMgaXQgc2hvdWxkIGp1
c3Qgd29yayBkaXJlY3RseSBvbiB0aGUgdHJlZQorICAgICAgICBpZiBrZXkgbm90IGluIHNlbGYu
X2RhdGE6CisgICAgICAgICAgICBzZWxmLl9kYXRhW2tleV0gPSBbXQorICAgICAgICBpZiBzZWxm
Ll9kYXRhW2tleV0gYW5kIHNlbGYuX2RhdGFba2V5XVstMV0uY29uZGl0aW9uX25vZGUgaXMgTm9u
ZToKKyAgICAgICAgICAgIHNlbGYuX2RhdGFba2V5XS5pbnNlcnQobGVuKHNlbGYuX2RhdGFba2V5
XSkgLSAxLCBjb25kX3ZhbHVlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fZGF0
YVtrZXldLmFwcGVuZChjb25kX3ZhbHVlKQorCisgICAgZGVmIF9hZGRfa2V5X3ZhbHVlKHNlbGYs
IG5vZGUsIHZhbHVlcyk6CisgICAgICAgICIiIkNhbGxlZCBkdXJpbmcgY29uc3RydWN0aW9uIHRv
IHNldCBhIGtleS12YWx1ZSBub2RlIiIiCisgICAgICAgIHNlbGYuX2RhdGFbbm9kZS5kYXRhXSA9
IHZhbHVlcworCisgICAgZGVmIGFwcGVuZChzZWxmLCBjaGlsZCk6CisgICAgICAgIHNlbGYuY2hp
bGRyZW4uYXBwZW5kKGNoaWxkKQorICAgICAgICBjaGlsZC5wYXJlbnQgPSBzZWxmCisgICAgICAg
IGlmIGNoaWxkLm5vZGUucGFyZW50ICE9IHNlbGYubm9kZToKKyAgICAgICAgICAgIHNlbGYubm9k
ZS5hcHBlbmQoY2hpbGQubm9kZSkKKyAgICAgICAgcmV0dXJuIGNoaWxkCisKKyAgICBkZWYgcmVt
b3ZlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnBhcmVudDoKKyAgICAgICAgICAgIHNlbGYucGFy
ZW50Ll9yZW1vdmVfY2hpbGQoc2VsZikKKworICAgIGRlZiBfcmVtb3ZlX2NoaWxkKHNlbGYsIGNo
aWxkKToKKyAgICAgICAgc2VsZi5jaGlsZHJlbi5yZW1vdmUoY2hpbGQpCisgICAgICAgIGNoaWxk
LnBhcmVudCA9IE5vbmUKKworICAgIGRlZiBpdGVyY2hpbGRyZW4oc2VsZiwgbmFtZT1Ob25lKToK
KyAgICAgICAgZm9yIGl0ZW0gaW4gc2VsZi5jaGlsZHJlbjoKKyAgICAgICAgICAgIGlmIGl0ZW0u
bmFtZSA9PSBuYW1lIG9yIG5hbWUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICB5aWVsZCBpdGVt
CisKKyAgICBkZWYgX2ZsYXR0ZW4oc2VsZik6CisgICAgICAgIHJ2ID0ge30KKyAgICAgICAgZm9y
IG5vZGUgaW4gW3NlbGYsIHNlbGYucm9vdF06CisgICAgICAgICAgICBmb3IgbmFtZSwgdmFsdWUg
aW4gbm9kZS5fZGF0YS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lIG5vdCBp
biBydjoKKyAgICAgICAgICAgICAgICAgICAgcnZbbmFtZV0gPSB2YWx1ZQorICAgICAgICByZXR1
cm4gcnYKKworICAgIGRlZiBpdGVyaXRlbXMoc2VsZik6CisgICAgICAgIGZvciBpdGVtIGluIHNl
bGYuX2ZsYXR0ZW4oKS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIHlpZWxkIGl0ZW0KKworICAg
IGRlZiBpdGVya2V5cyhzZWxmKToKKyAgICAgICAgZm9yIGl0ZW0gaW4gc2VsZi5fZmxhdHRlbigp
Lml0ZXJrZXlzKCk6CisgICAgICAgICAgICB5aWVsZCBpdGVtCisKKyAgICBkZWYgcmVtb3ZlX3Zh
bHVlKHNlbGYsIGtleSwgdmFsdWUpOgorICAgICAgICBzZWxmLl9kYXRhW2tleV0ucmVtb3ZlKHZh
bHVlKQorICAgICAgICBpZiBub3Qgc2VsZi5fZGF0YVtrZXldOgorICAgICAgICAgICAgZGVsIHNl
bGYuX2RhdGFba2V5XQorICAgICAgICB2YWx1ZS5yZW1vdmUoKQorCisKK2RlZiBjb21waWxlX2Fz
dChhc3QsIGRhdGFfY2xzX2dldHRlcj1Ob25lLCAqKmt3YXJncyk6CisgICAgcmV0dXJuIENvbXBp
bGVyKCkuY29tcGlsZShhc3QsIGRhdGFfY2xzX2dldHRlcj1kYXRhX2Nsc19nZXR0ZXIsICoqa3dh
cmdzKQorCisKK2RlZiBjb21waWxlKHN0cmVhbSwgZGF0YV9jbHNfZ2V0dGVyPU5vbmUsICoqa3dh
cmdzKToKKyAgICByZXR1cm4gY29tcGlsZV9hc3QocGFyc2Uoc3RyZWFtKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgZGF0YV9jbHNfZ2V0dGVyPWRhdGFfY2xzX2dldHRlciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgKiprd2FyZ3MpCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRl
ZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci93cHRtYW5pZmVzdC9iYWNrZW5kcy9zdGF0
aWMucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1
bm5lci93cHRtYW5pZmVzdC9iYWNrZW5kcy9zdGF0aWMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAuLmIzY2JlZGMzODE4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJp
dmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvd3B0bWFuaWZl
c3QvYmFja2VuZHMvc3RhdGljLnB5CkBAIC0wLDAgKzEsMjIzIEBACitpbXBvcnQgb3BlcmF0b3IK
KworZnJvbSAuLm5vZGUgaW1wb3J0IE5vZGVWaXNpdG9yCitmcm9tIC4ucGFyc2VyIGltcG9ydCBw
YXJzZQorCisKK2NsYXNzIENvbXBpbGVyKE5vZGVWaXNpdG9yKToKKyAgICAiIiJDb21waWxlciBi
YWNrZW5kIHRoYXQgZXZhbHVhdGVzIGNvbmRpdGlvbmFsIGV4cHJlc3Npb25zCisgICAgdG8gZ2l2
ZSBzdGF0aWMgb3V0cHV0IiIiCisKKyAgICBkZWYgY29tcGlsZShzZWxmLCB0cmVlLCBleHByX2Rh
dGEsIGRhdGFfY2xzX2dldHRlcj1Ob25lLCAqKmt3YXJncyk6CisgICAgICAgICIiIkNvbXBpbGUg
YSByYXcgQVNUIGludG8gYSBmb3JtIHdpdGggY29uZGl0aW9uYWwgZXhwcmVzc2lvbnMKKyAgICAg
ICAgZXZhbHVhdGVkLgorCisgICAgICAgIHRyZWUgLSBUaGUgcm9vdCBub2RlIG9mIHRoZSB3cHRt
YW5pZmVzdCBBU1QgdG8gY29tcGlsZQorCisgICAgICAgIGV4cHJfZGF0YSAtIEEgZGljdGlvbmFy
eSBvZiBrZXkgLyB2YWx1ZSBwYWlycyB0byB1c2Ugd2hlbgorICAgICAgICAgICAgICAgICAgICBl
dmFsdWF0aW5nIGNvbmRpdGlvbmFsIGV4cHJlc3Npb25zCisKKyAgICAgICAgZGF0YV9jbHNfZ2V0
dGVyIC0gQSBmdW5jdGlvbiB0YWtpbmcgdHdvIHBhcmFtZXRlcnM7IHRoZSBwcmV2aW91cworICAg
ICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgbm9kZSBhbmQgdGhlIGN1cnJlbnQgYXN0IG5v
ZGUgYW5kIHJldHVybmluZworICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY2xhc3Mgb2Yg
dGhlIG91dHB1dCBub2RlIHRvIHVzZSBmb3IgdGhlIGN1cnJlbnQKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXN0IG5vZGUKKyAgICAgICAgIiIiCisKKyAgICAgICAgc2VsZi5fa3dhcmdzID0g
a3dhcmdzCisgICAgICAgIHNlbGYuZXhwcl9kYXRhID0gZXhwcl9kYXRhCisKKyAgICAgICAgaWYg
ZGF0YV9jbHNfZ2V0dGVyIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLmRhdGFfY2xzX2dldHRl
ciA9IGxhbWJkYSB4LCB5OiBNYW5pZmVzdEl0ZW0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg
IHNlbGYuZGF0YV9jbHNfZ2V0dGVyID0gZGF0YV9jbHNfZ2V0dGVyCisKKyAgICAgICAgc2VsZi5v
dXRwdXRfbm9kZSA9IE5vbmUKKyAgICAgICAgc2VsZi52aXNpdCh0cmVlKQorICAgICAgICByZXR1
cm4gc2VsZi5vdXRwdXRfbm9kZQorCisgICAgZGVmIHZpc2l0X0RhdGFOb2RlKHNlbGYsIG5vZGUp
OgorICAgICAgICBvdXRwdXRfcGFyZW50ID0gc2VsZi5vdXRwdXRfbm9kZQorICAgICAgICBpZiBz
ZWxmLm91dHB1dF9ub2RlIGlzIE5vbmU6CisgICAgICAgICAgICBhc3NlcnQgbm9kZS5wYXJlbnQg
aXMgTm9uZQorICAgICAgICAgICAgc2VsZi5vdXRwdXRfbm9kZSA9IHNlbGYuZGF0YV9jbHNfZ2V0
dGVyKE5vbmUsIE5vbmUpKE5vbmUsICoqc2VsZi5fa3dhcmdzKQorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgc2VsZi5vdXRwdXRfbm9kZSA9IHNlbGYuZGF0YV9jbHNfZ2V0dGVyKHNlbGYub3V0
cHV0X25vZGUsIG5vZGUpKG5vZGUuZGF0YSkKKworICAgICAgICBmb3IgY2hpbGQgaW4gbm9kZS5j
aGlsZHJlbjoKKyAgICAgICAgICAgIHNlbGYudmlzaXQoY2hpbGQpCisKKyAgICAgICAgaWYgb3V0
cHV0X3BhcmVudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIG91dHB1dF9wYXJlbnQuYXBwZW5k
KHNlbGYub3V0cHV0X25vZGUpCisgICAgICAgICAgICBzZWxmLm91dHB1dF9ub2RlID0gc2VsZi5v
dXRwdXRfbm9kZS5wYXJlbnQKKworICAgIGRlZiB2aXNpdF9LZXlWYWx1ZU5vZGUoc2VsZiwgbm9k
ZSk6CisgICAgICAgIGtleV9uYW1lID0gbm9kZS5kYXRhCisgICAgICAgIGtleV92YWx1ZSA9IE5v
bmUKKyAgICAgICAgZm9yIGNoaWxkIGluIG5vZGUuY2hpbGRyZW46CisgICAgICAgICAgICB2YWx1
ZSA9IHNlbGYudmlzaXQoY2hpbGQpCisgICAgICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToK
KyAgICAgICAgICAgICAgICBrZXlfdmFsdWUgPSB2YWx1ZQorICAgICAgICAgICAgICAgIGJyZWFr
CisgICAgICAgIGlmIGtleV92YWx1ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYub3V0
cHV0X25vZGUuc2V0KGtleV9uYW1lLCBrZXlfdmFsdWUpCisKKyAgICBkZWYgdmlzaXRfVmFsdWVO
b2RlKHNlbGYsIG5vZGUpOgorICAgICAgICByZXR1cm4gbm9kZS5kYXRhCisKKyAgICBkZWYgdmlz
aXRfQXRvbU5vZGUoc2VsZiwgbm9kZSk6CisgICAgICAgIHJldHVybiBub2RlLmRhdGEKKworICAg
IGRlZiB2aXNpdF9MaXN0Tm9kZShzZWxmLCBub2RlKToKKyAgICAgICAgcmV0dXJuIFtzZWxmLnZp
c2l0KGNoaWxkKSBmb3IgY2hpbGQgaW4gbm9kZS5jaGlsZHJlbl0KKworICAgIGRlZiB2aXNpdF9D
b25kaXRpb25hbE5vZGUoc2VsZiwgbm9kZSk6CisgICAgICAgIGFzc2VydCBsZW4obm9kZS5jaGls
ZHJlbikgPT0gMgorICAgICAgICBpZiBzZWxmLnZpc2l0KG5vZGUuY2hpbGRyZW5bMF0pOgorICAg
ICAgICAgICAgcmV0dXJuIHNlbGYudmlzaXQobm9kZS5jaGlsZHJlblsxXSkKKworICAgIGRlZiB2
aXNpdF9TdHJpbmdOb2RlKHNlbGYsIG5vZGUpOgorICAgICAgICB2YWx1ZSA9IG5vZGUuZGF0YQor
ICAgICAgICBmb3IgY2hpbGQgaW4gbm9kZS5jaGlsZHJlbjoKKyAgICAgICAgICAgIHZhbHVlID0g
c2VsZi52aXNpdChjaGlsZCkodmFsdWUpCisgICAgICAgIHJldHVybiB2YWx1ZQorCisgICAgZGVm
IHZpc2l0X051bWJlck5vZGUoc2VsZiwgbm9kZSk6CisgICAgICAgIGlmICIuIiBpbiBub2RlLmRh
dGE6CisgICAgICAgICAgICByZXR1cm4gZmxvYXQobm9kZS5kYXRhKQorICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgcmV0dXJuIGludChub2RlLmRhdGEpCisKKyAgICBkZWYgdmlzaXRfVmFyaWFi
bGVOb2RlKHNlbGYsIG5vZGUpOgorICAgICAgICB2YWx1ZSA9IHNlbGYuZXhwcl9kYXRhW25vZGUu
ZGF0YV0KKyAgICAgICAgZm9yIGNoaWxkIGluIG5vZGUuY2hpbGRyZW46CisgICAgICAgICAgICB2
YWx1ZSA9IHNlbGYudmlzaXQoY2hpbGQpKHZhbHVlKQorICAgICAgICByZXR1cm4gdmFsdWUKKwor
ICAgIGRlZiB2aXNpdF9JbmRleE5vZGUoc2VsZiwgbm9kZSk6CisgICAgICAgIGFzc2VydCBsZW4o
bm9kZS5jaGlsZHJlbikgPT0gMQorICAgICAgICBpbmRleCA9IHNlbGYudmlzaXQobm9kZS5jaGls
ZHJlblswXSkKKyAgICAgICAgcmV0dXJuIGxhbWJkYSB4OiB4W2luZGV4XQorCisgICAgZGVmIHZp
c2l0X1VuYXJ5RXhwcmVzc2lvbk5vZGUoc2VsZiwgbm9kZSk6CisgICAgICAgIGFzc2VydCBsZW4o
bm9kZS5jaGlsZHJlbikgPT0gMgorICAgICAgICBvcGVyYXRvciA9IHNlbGYudmlzaXQobm9kZS5j
aGlsZHJlblswXSkKKyAgICAgICAgb3BlcmFuZCA9IHNlbGYudmlzaXQobm9kZS5jaGlsZHJlblsx
XSkKKworICAgICAgICByZXR1cm4gb3BlcmF0b3Iob3BlcmFuZCkKKworICAgIGRlZiB2aXNpdF9C
aW5hcnlFeHByZXNzaW9uTm9kZShzZWxmLCBub2RlKToKKyAgICAgICAgYXNzZXJ0IGxlbihub2Rl
LmNoaWxkcmVuKSA9PSAzCisgICAgICAgIG9wZXJhdG9yID0gc2VsZi52aXNpdChub2RlLmNoaWxk
cmVuWzBdKQorICAgICAgICBvcGVyYW5kXzAgPSBzZWxmLnZpc2l0KG5vZGUuY2hpbGRyZW5bMV0p
CisgICAgICAgIG9wZXJhbmRfMSA9IHNlbGYudmlzaXQobm9kZS5jaGlsZHJlblsyXSkKKworICAg
ICAgICByZXR1cm4gb3BlcmF0b3Iob3BlcmFuZF8wLCBvcGVyYW5kXzEpCisKKyAgICBkZWYgdmlz
aXRfVW5hcnlPcGVyYXRvck5vZGUoc2VsZiwgbm9kZSk6CisgICAgICAgIHJldHVybiB7Im5vdCI6
IG9wZXJhdG9yLm5vdF99W25vZGUuZGF0YV0KKworICAgIGRlZiB2aXNpdF9CaW5hcnlPcGVyYXRv
ck5vZGUoc2VsZiwgbm9kZSk6CisgICAgICAgIHJldHVybiB7ImFuZCI6IG9wZXJhdG9yLmFuZF8s
CisgICAgICAgICAgICAgICAgIm9yIjogb3BlcmF0b3Iub3JfLAorICAgICAgICAgICAgICAgICI9
PSI6IG9wZXJhdG9yLmVxLAorICAgICAgICAgICAgICAgICIhPSI6IG9wZXJhdG9yLm5lfVtub2Rl
LmRhdGFdCisKKworY2xhc3MgTWFuaWZlc3RJdGVtKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIG5hbWUsICoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5wYXJlbnQgPSBOb25lCisgICAg
ICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5jaGlsZHJlbiA9IFtdCisgICAgICAg
IHNlbGYuX2RhdGEgPSB7fQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1
cm4gIjxNYW5pZmVzdEl0ZW0gJXM+IiAlIChzZWxmLm5hbWUpCisKKyAgICBkZWYgX19zdHJfXyhz
ZWxmKToKKyAgICAgICAgcnYgPSBbcmVwcihzZWxmKV0KKyAgICAgICAgZm9yIGl0ZW0gaW4gc2Vs
Zi5jaGlsZHJlbjoKKyAgICAgICAgICAgIHJ2LmV4dGVuZCgiICAlcyIgJSBsaW5lIGZvciBsaW5l
IGluIHN0cihpdGVtKS5zcGxpdCgiXG4iKSkKKyAgICAgICAgcmV0dXJuICJcbiIuam9pbihydikK
KworICAgIGRlZiBzZXRfZGVmYXVsdHMoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIEBwcm9w
ZXJ0eQorICAgIGRlZiBpc19lbXB0eShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fZGF0YToKKyAg
ICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gYWxsKGNoaWxkLmlzX2VtcHR5
IGZvciBjaGlsZCBpbiBzZWxmLmNoaWxkcmVuKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHJv
b3Qoc2VsZik6CisgICAgICAgIG5vZGUgPSBzZWxmCisgICAgICAgIHdoaWxlIG5vZGUucGFyZW50
IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50CisgICAgICAgIHJl
dHVybiBub2RlCisKKyAgICBkZWYgaGFzX2tleShzZWxmLCBrZXkpOgorICAgICAgICBmb3Igbm9k
ZSBpbiBbc2VsZiwgc2VsZi5yb290XToKKyAgICAgICAgICAgIGlmIGtleSBpbiBub2RlLl9kYXRh
OgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisg
ICAgZGVmIGdldChzZWxmLCBrZXkpOgorICAgICAgICBmb3Igbm9kZSBpbiBbc2VsZiwgc2VsZi5y
b290XToKKyAgICAgICAgICAgIGlmIGtleSBpbiBub2RlLl9kYXRhOgorICAgICAgICAgICAgICAg
IHJldHVybiBub2RlLl9kYXRhW2tleV0KKyAgICAgICAgcmFpc2UgS2V5RXJyb3IKKworICAgIGRl
ZiBzZXQoc2VsZiwgbmFtZSwgdmFsdWUpOgorICAgICAgICBzZWxmLl9kYXRhW25hbWVdID0gdmFs
dWUKKworICAgIGRlZiByZW1vdmUoc2VsZik6CisgICAgICAgIGlmIHNlbGYucGFyZW50OgorICAg
ICAgICAgICAgc2VsZi5wYXJlbnQuX3JlbW92ZV9jaGlsZChzZWxmKQorCisgICAgZGVmIF9yZW1v
dmVfY2hpbGQoc2VsZiwgY2hpbGQpOgorICAgICAgICBzZWxmLmNoaWxkcmVuLnJlbW92ZShjaGls
ZCkKKyAgICAgICAgY2hpbGQucGFyZW50ID0gTm9uZQorCisgICAgZGVmIGl0ZXJjaGlsZHJlbihz
ZWxmLCBuYW1lPU5vbmUpOgorICAgICAgICBmb3IgaXRlbSBpbiBzZWxmLmNoaWxkcmVuOgorICAg
ICAgICAgICAgaWYgaXRlbS5uYW1lID09IG5hbWUgb3IgbmFtZSBpcyBOb25lOgorICAgICAgICAg
ICAgICAgIHlpZWxkIGl0ZW0KKworICAgIGRlZiBfZmxhdHRlbihzZWxmKToKKyAgICAgICAgcnYg
PSB7fQorICAgICAgICBmb3Igbm9kZSBpbiBbc2VsZiwgc2VsZi5yb290XToKKyAgICAgICAgICAg
IGZvciBuYW1lLCB2YWx1ZSBpbiBub2RlLl9kYXRhLml0ZXJpdGVtcygpOgorICAgICAgICAgICAg
ICAgIGlmIG5hbWUgbm90IGluIHJ2OgorICAgICAgICAgICAgICAgICAgICBydltuYW1lXSA9IHZh
bHVlCisgICAgICAgIHJldHVybiBydgorCisgICAgZGVmIGl0ZXJpdGVtcyhzZWxmKToKKyAgICAg
ICAgZm9yIGl0ZW0gaW4gc2VsZi5fZmxhdHRlbigpLml0ZXJpdGVtcygpOgorICAgICAgICAgICAg
eWllbGQgaXRlbQorCisgICAgZGVmIGl0ZXJrZXlzKHNlbGYpOgorICAgICAgICBmb3IgaXRlbSBp
biBzZWxmLl9mbGF0dGVuKCkuaXRlcmtleXMoKToKKyAgICAgICAgICAgIHlpZWxkIGl0ZW0KKwor
ICAgIGRlZiBpdGVydmFsdWVzKHNlbGYpOgorICAgICAgICBmb3IgaXRlbSBpbiBzZWxmLl9mbGF0
dGVuKCkuaXRlcnZhbHVlcygpOgorICAgICAgICAgICAgeWllbGQgaXRlbQorCisgICAgZGVmIGFw
cGVuZChzZWxmLCBjaGlsZCk6CisgICAgICAgIGNoaWxkLnBhcmVudCA9IHNlbGYKKyAgICAgICAg
c2VsZi5jaGlsZHJlbi5hcHBlbmQoY2hpbGQpCisgICAgICAgIHJldHVybiBjaGlsZAorCisKK2Rl
ZiBjb21waWxlX2FzdChhc3QsIGV4cHJfZGF0YSwgZGF0YV9jbHNfZ2V0dGVyPU5vbmUsICoqa3dh
cmdzKToKKyAgICByZXR1cm4gQ29tcGlsZXIoKS5jb21waWxlKGFzdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGV4cHJfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGFfY2xzX2dldHRlcj1kYXRhX2Nsc19nZXR0ZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAqKmt3YXJncykKKworCitkZWYgY29tcGlsZShzdHJlYW0sIGV4cHJfZGF0YSwgZGF0
YV9jbHNfZ2V0dGVyPU5vbmUsICoqa3dhcmdzKToKKyAgICByZXR1cm4gY29tcGlsZV9hc3QocGFy
c2Uoc3RyZWFtKSwKKyAgICAgICAgICAgICAgICAgICAgICAgZXhwcl9kYXRhLAorICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhX2Nsc19nZXR0ZXI9ZGF0YV9jbHNfZ2V0dGVyLAorICAgICAgICAg
ICAgICAgICAgICAgICAqKmt3YXJncykKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9y
dGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3dwdG1hbmlmZXN0L25vZGUucHkgYi9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci93cHRt
YW5pZmVzdC9ub2RlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4z
M2U5Nzk2YzQzMAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3cz
Yy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3dwdG1hbmlmZXN0L25vZGUucHkKQEAgLTAsMCAr
MSwxNTcgQEAKK2NsYXNzIE5vZGVWaXNpdG9yKG9iamVjdCk6CisgICAgZGVmIHZpc2l0KHNlbGYs
IG5vZGUpOgorICAgICAgICAjIFRoaXMgaXMgdWdseSBhcyBoZWxsLCBidXQgd2UgZG9uJ3QgaGF2
ZSBtdWx0aW1ldGhvZHMgYW5kCisgICAgICAgICMgdGhleSBhcmVuJ3QgdHJpdmlhbCB0byBmYWtl
IHdpdGhvdXQgYWNjZXNzIHRvIHRoZSBjbGFzcworICAgICAgICAjIG9iamVjdCBmcm9tIHRoZSBj
bGFzcyBib2R5CisgICAgICAgIGZ1bmMgPSBnZXRhdHRyKHNlbGYsICJ2aXNpdF8lcyIgJSAobm9k
ZS5fX2NsYXNzX18uX19uYW1lX18pKQorICAgICAgICByZXR1cm4gZnVuYyhub2RlKQorCisKK2Ns
YXNzIE5vZGUob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YT1Ob25lKToKKyAg
ICAgICAgc2VsZi5kYXRhID0gZGF0YQorICAgICAgICBzZWxmLnBhcmVudCA9IE5vbmUKKyAgICAg
ICAgc2VsZi5jaGlsZHJlbiA9IFtdCisKKyAgICBkZWYgYXBwZW5kKHNlbGYsIG90aGVyKToKKyAg
ICAgICAgb3RoZXIucGFyZW50ID0gc2VsZgorICAgICAgICBzZWxmLmNoaWxkcmVuLmFwcGVuZChv
dGhlcikKKworICAgIGRlZiByZW1vdmUoc2VsZik6CisgICAgICAgIHNlbGYucGFyZW50LmNoaWxk
cmVuLnJlbW92ZShzZWxmKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1
cm4gIjwlcyAlcz4iICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBzZWxmLmRhdGEpCisKKyAg
ICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcnYgPSBbcmVwcihzZWxmKV0KKyAgICAgICAg
Zm9yIGl0ZW0gaW4gc2VsZi5jaGlsZHJlbjoKKyAgICAgICAgICAgIHJ2LmV4dGVuZCgiICAlcyIg
JSBsaW5lIGZvciBsaW5lIGluIHN0cihpdGVtKS5zcGxpdCgiXG4iKSkKKyAgICAgICAgcmV0dXJu
ICJcbiIuam9pbihydikKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBp
ZiBub3QgKHNlbGYuX19jbGFzc19fID09IG90aGVyLl9fY2xhc3NfXyBhbmQKKyAgICAgICAgICAg
ICAgICBzZWxmLmRhdGEgPT0gb3RoZXIuZGF0YSBhbmQKKyAgICAgICAgICAgICAgICBsZW4oc2Vs
Zi5jaGlsZHJlbikgPT0gbGVuKG90aGVyLmNoaWxkcmVuKSk6CisgICAgICAgICAgICByZXR1cm4g
RmFsc2UKKyAgICAgICAgZm9yIGNoaWxkLCBvdGhlcl9jaGlsZCBpbiB6aXAoc2VsZi5jaGlsZHJl
biwgb3RoZXIuY2hpbGRyZW4pOgorICAgICAgICAgICAgaWYgbm90IGNoaWxkID09IG90aGVyX2No
aWxkOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gVHJ1ZQor
CisgICAgZGVmIGNvcHkoc2VsZik6CisgICAgICAgIG5ldyA9IHNlbGYuX19jbGFzc19fKHNlbGYu
ZGF0YSkKKyAgICAgICAgZm9yIGl0ZW0gaW4gc2VsZi5jaGlsZHJlbjoKKyAgICAgICAgICAgIG5l
dy5hcHBlbmQoaXRlbS5jb3B5KCkpCisgICAgICAgIHJldHVybiBuZXcKKworCitjbGFzcyBEYXRh
Tm9kZShOb2RlKToKKyAgICBkZWYgYXBwZW5kKHNlbGYsIG90aGVyKToKKyAgICAgICAgIyBBcHBl
bmQgdGhhdCByZXRhaW5zIHRoZSBpbnZhcmlhbnQgdGhhdCBjaGlsZCBkYXRhIG5vZGVzCisgICAg
ICAgICMgY29tZSBhZnRlciBjaGlsZCBub2RlcyBvZiBvdGhlciB0eXBlcworICAgICAgICBvdGhl
ci5wYXJlbnQgPSBzZWxmCisgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIERhdGFOb2RlKToK
KyAgICAgICAgICAgIHNlbGYuY2hpbGRyZW4uYXBwZW5kKG90aGVyKQorICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgaW5kZXggPSBsZW4oc2VsZi5jaGlsZHJlbikKKyAgICAgICAgICAgIHdoaWxl
IGluZGV4ID4gMCBhbmQgaXNpbnN0YW5jZShzZWxmLmNoaWxkcmVuW2luZGV4IC0gMV0sIERhdGFO
b2RlKToKKyAgICAgICAgICAgICAgICBpbmRleCAtPSAxCisgICAgICAgICAgICBmb3IgaSBpbiB4
cmFuZ2UoaW5kZXgpOgorICAgICAgICAgICAgICAgIGFzc2VydCBvdGhlci5kYXRhICE9IHNlbGYu
Y2hpbGRyZW5baV0uZGF0YQorICAgICAgICAgICAgc2VsZi5jaGlsZHJlbi5pbnNlcnQoaW5kZXgs
IG90aGVyKQorCisKK2NsYXNzIEtleVZhbHVlTm9kZShOb2RlKToKKyAgICBkZWYgYXBwZW5kKHNl
bGYsIG90aGVyKToKKyAgICAgICAgIyBBcHBlbmQgdGhhdCByZXRhaW5zIHRoZSBpbnZhcmlhbnQg
dGhhdCBjb25kaXRpb25hbCBub2RlcworICAgICAgICAjIGNvbWUgYmVmb3JlIHVuY29uZGl0aW9u
YWwgbm9kZXMKKyAgICAgICAgb3RoZXIucGFyZW50ID0gc2VsZgorICAgICAgICBpZiBpc2luc3Rh
bmNlKG90aGVyLCBWYWx1ZU5vZGUpOgorICAgICAgICAgICAgaWYgc2VsZi5jaGlsZHJlbjoKKyAg
ICAgICAgICAgICAgICBhc3NlcnQgbm90IGlzaW5zdGFuY2Uoc2VsZi5jaGlsZHJlblstMV0sIFZh
bHVlTm9kZSkKKyAgICAgICAgICAgIHNlbGYuY2hpbGRyZW4uYXBwZW5kKG90aGVyKQorICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgaWYgc2VsZi5jaGlsZHJlbiBhbmQgaXNpbnN0YW5jZShzZWxm
LmNoaWxkcmVuWy0xXSwgVmFsdWVOb2RlKToKKyAgICAgICAgICAgICAgICBzZWxmLmNoaWxkcmVu
Lmluc2VydChsZW4oc2VsZi5jaGlsZHJlbikgLSAxLCBvdGhlcikKKyAgICAgICAgICAgIGVsc2U6
CisgICAgICAgICAgICAgICAgc2VsZi5jaGlsZHJlbi5hcHBlbmQob3RoZXIpCisKKworY2xhc3Mg
TGlzdE5vZGUoTm9kZSk6CisgICAgZGVmIGFwcGVuZChzZWxmLCBvdGhlcik6CisgICAgICAgIG90
aGVyLnBhcmVudCA9IHNlbGYKKyAgICAgICAgc2VsZi5jaGlsZHJlbi5hcHBlbmQob3RoZXIpCisK
KworY2xhc3MgVmFsdWVOb2RlKE5vZGUpOgorICAgIGRlZiBhcHBlbmQoc2VsZiwgb3RoZXIpOgor
ICAgICAgICByYWlzZSBUeXBlRXJyb3IKKworCitjbGFzcyBBdG9tTm9kZShWYWx1ZU5vZGUpOgor
ICAgIHBhc3MKKworCitjbGFzcyBDb25kaXRpb25hbE5vZGUoTm9kZSk6CisgICAgcGFzcworCisK
K2NsYXNzIFVuYXJ5RXhwcmVzc2lvbk5vZGUoTm9kZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYs
IG9wZXJhdG9yLCBvcGVyYW5kKToKKyAgICAgICAgTm9kZS5fX2luaXRfXyhzZWxmKQorICAgICAg
ICBzZWxmLmFwcGVuZChvcGVyYXRvcikKKyAgICAgICAgc2VsZi5hcHBlbmQob3BlcmFuZCkKKwor
ICAgIGRlZiBhcHBlbmQoc2VsZiwgb3RoZXIpOgorICAgICAgICBOb2RlLmFwcGVuZChzZWxmLCBv
dGhlcikKKyAgICAgICAgYXNzZXJ0IGxlbihzZWxmLmNoaWxkcmVuKSA8PSAyCisKKyAgICBkZWYg
Y29weShzZWxmKToKKyAgICAgICAgbmV3ID0gc2VsZi5fX2NsYXNzX18oc2VsZi5jaGlsZHJlblsw
XS5jb3B5KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2hpbGRyZW5bMV0u
Y29weSgpKQorICAgICAgICByZXR1cm4gbmV3CisKKworY2xhc3MgQmluYXJ5RXhwcmVzc2lvbk5v
ZGUoTm9kZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9wZXJhdG9yLCBvcGVyYW5kXzAsIG9w
ZXJhbmRfMSk6CisgICAgICAgIE5vZGUuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5hcHBl
bmQob3BlcmF0b3IpCisgICAgICAgIHNlbGYuYXBwZW5kKG9wZXJhbmRfMCkKKyAgICAgICAgc2Vs
Zi5hcHBlbmQob3BlcmFuZF8xKQorCisgICAgZGVmIGFwcGVuZChzZWxmLCBvdGhlcik6CisgICAg
ICAgIE5vZGUuYXBwZW5kKHNlbGYsIG90aGVyKQorICAgICAgICBhc3NlcnQgbGVuKHNlbGYuY2hp
bGRyZW4pIDw9IDMKKworICAgIGRlZiBjb3B5KHNlbGYpOgorICAgICAgICBuZXcgPSBzZWxmLl9f
Y2xhc3NfXyhzZWxmLmNoaWxkcmVuWzBdLmNvcHkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5jaGlsZHJlblsxXS5jb3B5KCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGYuY2hpbGRyZW5bMl0uY29weSgpKQorICAgICAgICByZXR1cm4gbmV3CisKKworY2xh
c3MgVW5hcnlPcGVyYXRvck5vZGUoTm9kZSk6CisgICAgZGVmIGFwcGVuZChzZWxmLCBvdGhlcik6
CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcgorCisKK2NsYXNzIEJpbmFyeU9wZXJhdG9yTm9kZShO
b2RlKToKKyAgICBkZWYgYXBwZW5kKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmFpc2UgVHlwZUVy
cm9yCisKKworY2xhc3MgSW5kZXhOb2RlKE5vZGUpOgorICAgIHBhc3MKKworCitjbGFzcyBWYXJp
YWJsZU5vZGUoTm9kZSk6CisgICAgcGFzcworCisKK2NsYXNzIFN0cmluZ05vZGUoTm9kZSk6Cisg
ICAgcGFzcworCisKK2NsYXNzIE51bWJlck5vZGUoVmFsdWVOb2RlKToKKyAgICBwYXNzCmRpZmYg
LS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1
bm5lci93cHRtYW5pZmVzdC9wYXJzZXIucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mv
dG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci93cHRtYW5pZmVzdC9wYXJzZXIucHkKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmQ4NGE5MTQzZmE2Ci0tLSAvZGV2L251bGwK
KysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5u
ZXIvd3B0bWFuaWZlc3QvcGFyc2VyLnB5CkBAIC0wLDAgKzEsNzQ2IEBACisjZGVmYXVsdF92YWx1
ZTpmb28KKyNpbmNsdWRlOiBvdGhlci5tYW5pZmVzdAorIworI1t0ZXN0X25hbWUuanNdCisjICBl
eHBlY3RlZDogRVJST1IKKyMKKyMgIFtzdWJ0ZXN0IDFdCisjICAgIGV4cGVjdGVkOgorIyAgICAg
IG9zID09IHdpbjogRkFJTCAjVGhpcyBpcyBhIGNvbW1lbnQKKyMgICAgICBQQVNTCisjCisKKyMg
VE9ETzoga2VlcCBjb21tZW50cyBpbiB0aGUgdHJlZQorCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0
IHVuaWNvZGVfbGl0ZXJhbHMKKworaW1wb3J0IHR5cGVzCitmcm9tIGNTdHJpbmdJTyBpbXBvcnQg
U3RyaW5nSU8KKworZnJvbSBub2RlIGltcG9ydCAqCisKKworY2xhc3MgUGFyc2VFcnJvcihFeGNl
cHRpb24pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgbGluZSwgZGV0YWlsKToK
KyAgICAgICAgc2VsZi5saW5lID0gbGluZQorICAgICAgICBzZWxmLmZpbGVuYW1lID0gZmlsZW5h
bWUKKyAgICAgICAgc2VsZi5kZXRhaWwgPSBkZXRhaWwKKyAgICAgICAgc2VsZi5tZXNzYWdlID0g
IiVzOiAlcyBsaW5lICVzIiAlIChzZWxmLmRldGFpbCwgc2VsZi5maWxlbmFtZSwgc2VsZi5saW5l
KQorICAgICAgICBFeGNlcHRpb24uX19pbml0X18oc2VsZiwgc2VsZi5tZXNzYWdlKQorCitlb2wg
PSBvYmplY3QKK2dyb3VwX3N0YXJ0ID0gb2JqZWN0Citncm91cF9lbmQgPSBvYmplY3QKK2RpZ2l0
cyA9ICIwMTIzNDU2Nzg5Igorb3Blbl9wYXJlbnMgPSAiWygiCitjbG9zZV9wYXJlbnMgPSAiXSki
CitwYXJlbnMgPSBvcGVuX3BhcmVucyArIGNsb3NlX3BhcmVucworb3BlcmF0b3JfY2hhcnMgPSAi
PSEiCisKK3VuYXJ5X29wZXJhdG9ycyA9IFsibm90Il0KK2JpbmFyeV9vcGVyYXRvcnMgPSBbIj09
IiwgIiE9IiwgImFuZCIsICJvciJdCisKK29wZXJhdG9ycyA9IFsiPT0iLCAiIT0iLCAibm90Iiwg
ImFuZCIsICJvciJdCisKK2F0b21zID0geyJUcnVlIjogVHJ1ZSwKKyAgICAgICAgICJGYWxzZSI6
IEZhbHNlLAorICAgICAgICAgIlJlc2V0Ijogb2JqZWN0KCl9CisKK2RlZiBkZWNvZGUocyk6Cisg
ICAgYXNzZXJ0IGlzaW5zdGFuY2UocywgdW5pY29kZSkKKyAgICByZXR1cm4gcworCisKK2RlZiBw
cmVjZWRlbmNlKG9wZXJhdG9yX25vZGUpOgorICAgIHJldHVybiBsZW4ob3BlcmF0b3JzKSAtIG9w
ZXJhdG9ycy5pbmRleChvcGVyYXRvcl9ub2RlLmRhdGEpCisKKworY2xhc3MgVG9rZW5UeXBlcyhv
YmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgZm9yIHR5cGUgaW4gWyJn
cm91cF9zdGFydCIsICJncm91cF9lbmQiLCAicGFyZW4iLCAibGlzdF9zdGFydCIsICJsaXN0X2Vu
ZCIsICJzZXBhcmF0b3IiLCAiaWRlbnQiLCAic3RyaW5nIiwgIm51bWJlciIsICJhdG9tIiwgImVv
ZiJdOgorICAgICAgICAgICAgc2V0YXR0cihzZWxmLCB0eXBlLCB0eXBlKQorCit0b2tlbl90eXBl
cyA9IFRva2VuVHlwZXMoKQorCisKK2NsYXNzIFRva2VuaXplcihvYmplY3QpOgorICAgIGRlZiBf
X2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5yZXNldCgpCisKKyAgICBkZWYgcmVzZXQoc2Vs
Zik6CisgICAgICAgIHNlbGYuaW5kZW50X2xldmVscyA9IFswXQorICAgICAgICBzZWxmLnN0YXRl
ID0gc2VsZi5saW5lX3N0YXJ0X3N0YXRlCisgICAgICAgIHNlbGYubmV4dF9zdGF0ZSA9IHNlbGYu
ZGF0YV9saW5lX3N0YXRlCisgICAgICAgIHNlbGYubGluZV9udW1iZXIgPSAwCisKKyAgICBkZWYg
dG9rZW5pemUoc2VsZiwgc3RyZWFtKToKKyAgICAgICAgc2VsZi5yZXNldCgpCisgICAgICAgIGFz
c2VydCBub3QgaXNpbnN0YW5jZShzdHJlYW0sIHVuaWNvZGUpCisgICAgICAgIGlmIGlzaW5zdGFu
Y2Uoc3RyZWFtLCBzdHIpOgorICAgICAgICAgICAgc3RyZWFtID0gU3RyaW5nSU8oc3RyZWFtKQor
ICAgICAgICBpZiBub3QgaGFzYXR0cihzdHJlYW0sICJuYW1lIik6CisgICAgICAgICAgICBzZWxm
LmZpbGVuYW1lID0gIiIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmlsZW5hbWUg
PSBzdHJlYW0ubmFtZQorCisgICAgICAgIHNlbGYubmV4dF9saW5lX3N0YXRlID0gc2VsZi5saW5l
X3N0YXJ0X3N0YXRlCisgICAgICAgIGZvciBpLCBsaW5lIGluIGVudW1lcmF0ZShzdHJlYW0pOgor
ICAgICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UobGluZSwgc3RyKQorICAgICAgICAgICAgc2Vs
Zi5zdGF0ZSA9IHNlbGYubmV4dF9saW5lX3N0YXRlCisgICAgICAgICAgICBhc3NlcnQgc2VsZi5z
dGF0ZSBpcyBub3QgTm9uZQorICAgICAgICAgICAgc3RhdGVzID0gW10KKyAgICAgICAgICAgIHNl
bGYubmV4dF9saW5lX3N0YXRlID0gTm9uZQorICAgICAgICAgICAgc2VsZi5saW5lX251bWJlciA9
IGkgKyAxCisgICAgICAgICAgICBzZWxmLmluZGV4ID0gMAorICAgICAgICAgICAgc2VsZi5saW5l
ID0gbGluZS5kZWNvZGUoJ3V0Zi04JykucnN0cmlwKCkKKyAgICAgICAgICAgIGFzc2VydCBpc2lu
c3RhbmNlKHNlbGYubGluZSwgdW5pY29kZSkKKyAgICAgICAgICAgIHdoaWxlIHNlbGYuc3RhdGUg
IT0gc2VsZi5lb2xfc3RhdGU6CisgICAgICAgICAgICAgICAgc3RhdGVzLmFwcGVuZChzZWxmLnN0
YXRlKQorICAgICAgICAgICAgICAgIHRva2VucyA9IHNlbGYuc3RhdGUoKQorICAgICAgICAgICAg
ICAgIGlmIHRva2VuczoKKyAgICAgICAgICAgICAgICAgICAgZm9yIHRva2VuIGluIHRva2VuczoK
KyAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHRva2VuCisgICAgICAgICAgICBzZWxmLnN0
YXRlKCkKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHlpZWxkICh0b2tlbl90eXBl
cy5lb2YsIE5vbmUpCisKKyAgICBkZWYgY2hhcihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5pbmRl
eCA9PSBsZW4oc2VsZi5saW5lKToKKyAgICAgICAgICAgIHJldHVybiBlb2wKKyAgICAgICAgcmV0
dXJuIHNlbGYubGluZVtzZWxmLmluZGV4XQorCisgICAgZGVmIGNvbnN1bWUoc2VsZik6CisgICAg
ICAgIGlmIHNlbGYuaW5kZXggPCBsZW4oc2VsZi5saW5lKToKKyAgICAgICAgICAgIHNlbGYuaW5k
ZXggKz0gMQorCisgICAgZGVmIHBlZWsoc2VsZiwgbGVuZ3RoKToKKyAgICAgICAgcmV0dXJuIHNl
bGYubGluZVtzZWxmLmluZGV4OnNlbGYuaW5kZXggKyBsZW5ndGhdCisKKyAgICBkZWYgc2tpcF93
aGl0ZXNwYWNlKHNlbGYpOgorICAgICAgICB3aGlsZSBzZWxmLmNoYXIoKSA9PSAiICI6CisgICAg
ICAgICAgICBzZWxmLmNvbnN1bWUoKQorCisgICAgZGVmIGVvbF9zdGF0ZShzZWxmKToKKyAgICAg
ICAgaWYgc2VsZi5uZXh0X2xpbmVfc3RhdGUgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYubmV4
dF9saW5lX3N0YXRlID0gc2VsZi5saW5lX3N0YXJ0X3N0YXRlCisKKyAgICBkZWYgbGluZV9zdGFy
dF9zdGF0ZShzZWxmKToKKyAgICAgICAgc2VsZi5za2lwX3doaXRlc3BhY2UoKQorICAgICAgICBp
ZiBzZWxmLmNoYXIoKSA9PSBlb2w6CisgICAgICAgICAgICBzZWxmLnN0YXRlID0gc2VsZi5lb2xf
c3RhdGUKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBzZWxmLmluZGV4ID4gc2VsZi5p
bmRlbnRfbGV2ZWxzWy0xXToKKyAgICAgICAgICAgIHNlbGYuaW5kZW50X2xldmVscy5hcHBlbmQo
c2VsZi5pbmRleCkKKyAgICAgICAgICAgIHlpZWxkICh0b2tlbl90eXBlcy5ncm91cF9zdGFydCwg
Tm9uZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHdoaWxlIHNlbGYuaW5kZXggPCBzZWxm
LmluZGVudF9sZXZlbHNbLTFdOgorICAgICAgICAgICAgICAgIHNlbGYuaW5kZW50X2xldmVscy5w
b3AoKQorICAgICAgICAgICAgICAgIHlpZWxkICh0b2tlbl90eXBlcy5ncm91cF9lbmQsIE5vbmUp
CisgICAgICAgICAgICAgICAgIyBUaGlzIGlzIHRlcnJpYmxlOyBpZiB3ZSB3ZXJlIHBhcnNpbmcg
YW4gZXhwcmVzc2lvbgorICAgICAgICAgICAgICAgICMgdGhlbiB0aGUgbmV4dF9zdGF0ZSB3aWxs
IGJlIGV4cHJfb3JfdmFsdWUgYnV0IHdoZW4gd2UgZGVpbmRlbnQKKyAgICAgICAgICAgICAgICAj
IGl0IG11c3QgYWx3YXlzIGJlIGEgaGVhZGluZyBvciBrZXkgbmV4dCBzbyB3ZSBnbyBiYWNrIHRv
IGRhdGFfbGluZV9zdGF0ZQorICAgICAgICAgICAgICAgIHNlbGYubmV4dF9zdGF0ZSA9IHNlbGYu
ZGF0YV9saW5lX3N0YXRlCisgICAgICAgICAgICBpZiBzZWxmLmluZGV4ICE9IHNlbGYuaW5kZW50
X2xldmVsc1stMV06CisgICAgICAgICAgICAgICAgcmFpc2UgUGFyc2VFcnJvcihzZWxmLmZpbGVu
YW1lLCBzZWxmLmxpbmVfbnVtYmVyLCAiVW5leHBlY3RlZCBpbmRlbnQiKQorCisgICAgICAgIHNl
bGYuc3RhdGUgPSBzZWxmLm5leHRfc3RhdGUKKworICAgIGRlZiBkYXRhX2xpbmVfc3RhdGUoc2Vs
Zik6CisgICAgICAgIGlmIHNlbGYuY2hhcigpID09ICJbIjoKKyAgICAgICAgICAgIHlpZWxkICh0
b2tlbl90eXBlcy5wYXJlbiwgc2VsZi5jaGFyKCkpCisgICAgICAgICAgICBzZWxmLmNvbnN1bWUo
KQorICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IHNlbGYuaGVhZGluZ19zdGF0ZQorICAgICAgICBl
bHNlOgorICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IHNlbGYua2V5X3N0YXRlCisKKyAgICBkZWYg
aGVhZGluZ19zdGF0ZShzZWxmKToKKyAgICAgICAgcnYgPSAiIgorICAgICAgICB3aGlsZSBUcnVl
OgorICAgICAgICAgICAgYyA9IHNlbGYuY2hhcigpCisgICAgICAgICAgICBpZiBjID09ICJcXCI6
CisgICAgICAgICAgICAgICAgcnYgKz0gc2VsZi5jb25zdW1lX2VzY2FwZSgpCisgICAgICAgICAg
ICBlbGlmIGMgPT0gIl0iOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbGlm
IGMgPT0gZW9sOgorICAgICAgICAgICAgICAgIHJhaXNlIFBhcnNlRXJyb3Ioc2VsZi5maWxlbmFt
ZSwgc2VsZi5saW5lX251bWJlciwgIkVPTCBpbiBoZWFkaW5nIikKKyAgICAgICAgICAgIGVsc2U6
CisgICAgICAgICAgICAgICAgcnYgKz0gYworICAgICAgICAgICAgICAgIHNlbGYuY29uc3VtZSgp
CisKKyAgICAgICAgeWllbGQgKHRva2VuX3R5cGVzLnN0cmluZywgZGVjb2RlKHJ2KSkKKyAgICAg
ICAgeWllbGQgKHRva2VuX3R5cGVzLnBhcmVuLCAiXSIpCisgICAgICAgIHNlbGYuY29uc3VtZSgp
CisgICAgICAgIHNlbGYuc3RhdGUgPSBzZWxmLmxpbmVfZW5kX3N0YXRlCisgICAgICAgIHNlbGYu
bmV4dF9zdGF0ZSA9IHNlbGYuZGF0YV9saW5lX3N0YXRlCisKKyAgICBkZWYga2V5X3N0YXRlKHNl
bGYpOgorICAgICAgICBydiA9ICIiCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBj
ID0gc2VsZi5jaGFyKCkKKyAgICAgICAgICAgIGlmIGMgPT0gIiAiOgorICAgICAgICAgICAgICAg
IHNlbGYuc2tpcF93aGl0ZXNwYWNlKCkKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmNoYXIoKSAh
PSAiOiI6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFBhcnNlRXJyb3Ioc2VsZi5maWxlbmFt
ZSwgc2VsZi5saW5lX251bWJlciwgIlNwYWNlIGluIGtleSBuYW1lIikKKyAgICAgICAgICAgICAg
ICBicmVhaworICAgICAgICAgICAgZWxpZiBjID09ICI6IjoKKyAgICAgICAgICAgICAgICBicmVh
aworICAgICAgICAgICAgZWxpZiBjID09IGVvbDoKKyAgICAgICAgICAgICAgICByYWlzZSBQYXJz
ZUVycm9yKHNlbGYuZmlsZW5hbWUsIHNlbGYubGluZV9udW1iZXIsICJFT0wgaW4ga2V5IG5hbWUg
KG1pc3NpbmcgJzonPykiKQorICAgICAgICAgICAgZWxpZiBjID09ICJcXCI6CisgICAgICAgICAg
ICAgICAgcnYgKz0gc2VsZi5jb25zdW1lX2VzY2FwZSgpCisgICAgICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgICAgIHJ2ICs9IGMKKyAgICAgICAgICAgICAgICBzZWxmLmNvbnN1bWUoKQorICAg
ICAgICB5aWVsZCAodG9rZW5fdHlwZXMuc3RyaW5nLCBkZWNvZGUocnYpKQorICAgICAgICB5aWVs
ZCAodG9rZW5fdHlwZXMuc2VwYXJhdG9yLCAiOiIpCisgICAgICAgIHNlbGYuY29uc3VtZSgpCisg
ICAgICAgIHNlbGYuc3RhdGUgPSBzZWxmLmFmdGVyX2tleV9zdGF0ZQorCisgICAgZGVmIGFmdGVy
X2tleV9zdGF0ZShzZWxmKToKKyAgICAgICAgc2VsZi5za2lwX3doaXRlc3BhY2UoKQorICAgICAg
ICBjID0gc2VsZi5jaGFyKCkKKyAgICAgICAgaWYgYyA9PSAiIyI6CisgICAgICAgICAgICBzZWxm
Lm5leHRfc3RhdGUgPSBzZWxmLmV4cHJfb3JfdmFsdWVfc3RhdGUKKyAgICAgICAgICAgIHNlbGYu
c3RhdGUgPSBzZWxmLmNvbW1lbnRfc3RhdGUKKyAgICAgICAgZWxpZiBjID09IGVvbDoKKyAgICAg
ICAgICAgIHNlbGYubmV4dF9zdGF0ZSA9IHNlbGYuZXhwcl9vcl92YWx1ZV9zdGF0ZQorICAgICAg
ICAgICAgc2VsZi5zdGF0ZSA9IHNlbGYuZW9sX3N0YXRlCisgICAgICAgIGVsaWYgYyA9PSAiWyI6
CisgICAgICAgICAgICBzZWxmLnN0YXRlID0gc2VsZi5saXN0X3N0YXJ0X3N0YXRlCisgICAgICAg
IGVsc2U6CisgICAgICAgICAgICBzZWxmLnN0YXRlID0gc2VsZi52YWx1ZV9zdGF0ZQorCisgICAg
ZGVmIGxpc3Rfc3RhcnRfc3RhdGUoc2VsZik6CisgICAgICAgIHlpZWxkICh0b2tlbl90eXBlcy5s
aXN0X3N0YXJ0LCAiWyIpCisgICAgICAgIHNlbGYuY29uc3VtZSgpCisgICAgICAgIHNlbGYuc3Rh
dGUgPSBzZWxmLmxpc3RfdmFsdWVfc3RhcnRfc3RhdGUKKworICAgIGRlZiBsaXN0X3ZhbHVlX3N0
YXJ0X3N0YXRlKHNlbGYpOgorICAgICAgICBzZWxmLnNraXBfd2hpdGVzcGFjZSgpCisgICAgICAg
IGlmIHNlbGYuY2hhcigpID09ICJdIjoKKyAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBzZWxmLmxp
c3RfZW5kX3N0YXRlCisgICAgICAgIGVsaWYgc2VsZi5jaGFyKCkgaW4gKCInIiwgJyInKToKKyAg
ICAgICAgICAgIHF1b3RlX2NoYXIgPSBzZWxmLmNoYXIoKQorICAgICAgICAgICAgc2VsZi5jb25z
dW1lKCkKKyAgICAgICAgICAgIHlpZWxkICh0b2tlbl90eXBlcy5zdHJpbmcsIHNlbGYuY29uc3Vt
ZV9zdHJpbmcocXVvdGVfY2hhcikpCisgICAgICAgICAgICBzZWxmLnNraXBfd2hpdGVzcGFjZSgp
CisgICAgICAgICAgICBpZiBzZWxmLmNoYXIoKSA9PSAiXSI6CisgICAgICAgICAgICAgICAgc2Vs
Zi5zdGF0ZSA9IHNlbGYubGlzdF9lbmRfc3RhdGUKKyAgICAgICAgICAgIGVsaWYgc2VsZi5jaGFy
KCkgIT0gIiwiOgorICAgICAgICAgICAgICAgIHJhaXNlIFBhcnNlRXJyb3Ioc2VsZi5maWxlbmFt
ZSwgc2VsZi5saW5lX251bWJlciwgIkp1bmsgYWZ0ZXIgcXVvdGVkIHN0cmluZyIpCisgICAgICAg
ICAgICBzZWxmLmNvbnN1bWUoKQorICAgICAgICBlbGlmIHNlbGYuY2hhcigpID09ICIjIjoKKyAg
ICAgICAgICAgIHNlbGYuc3RhdGUgPSBzZWxmLmNvbW1lbnRfc3RhdGUKKyAgICAgICAgICAgIHNl
bGYubmV4dF9saW5lX3N0YXRlID0gc2VsZi5saXN0X3ZhbHVlX3N0YXJ0X3N0YXRlCisgICAgICAg
IGVsaWYgc2VsZi5jaGFyKCkgPT0gZW9sOgorICAgICAgICAgICAgc2VsZi5uZXh0X2xpbmVfc3Rh
dGUgPSBzZWxmLmxpc3RfdmFsdWVfc3RhcnRfc3RhdGUKKyAgICAgICAgICAgIHNlbGYuc3RhdGUg
PSBzZWxmLmVvbF9zdGF0ZQorICAgICAgICBlbGlmIHNlbGYuY2hhcigpID09ICIsIjoKKyAgICAg
ICAgICAgIHJhaXNlIFBhcnNlRXJyb3Ioc2VsZi5maWxlbmFtZSwgc2VsZi5saW5lX251bWJlciwg
Ikxpc3QgaXRlbSBzdGFydGVkIHdpdGggc2VwYXJhdG9yIikKKyAgICAgICAgZWxpZiBzZWxmLmNo
YXIoKSA9PSAiQCI6CisgICAgICAgICAgICBzZWxmLnN0YXRlID0gc2VsZi5saXN0X3ZhbHVlX2F0
b21fc3RhdGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBzZWxmLmxp
c3RfdmFsdWVfc3RhdGUKKworICAgIGRlZiBsaXN0X3ZhbHVlX3N0YXRlKHNlbGYpOgorICAgICAg
ICBydiA9ICIiCisgICAgICAgIHNwYWNlcyA9IDAKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAg
ICAgICAgIGMgPSBzZWxmLmNoYXIoKQorICAgICAgICAgICAgaWYgYyA9PSAiXFwiOgorICAgICAg
ICAgICAgICAgIGVzY2FwZSA9IHNlbGYuY29uc3VtZV9lc2NhcGUoKQorICAgICAgICAgICAgICAg
IHJ2ICs9IGVzY2FwZQorICAgICAgICAgICAgZWxpZiBjID09IGVvbDoKKyAgICAgICAgICAgICAg
ICByYWlzZSBQYXJzZUVycm9yKHNlbGYuZmlsZW5hbWUsIHNlbGYubGluZV9udW1iZXIsICJFT0wg
aW4gbGlzdCB2YWx1ZSIpCisgICAgICAgICAgICBlbGlmIGMgPT0gIiMiOgorICAgICAgICAgICAg
ICAgIHJhaXNlIFBhcnNlRXJyb3Ioc2VsZi5maWxlbmFtZSwgc2VsZi5saW5lX251bWJlciwgIkVP
TCBpbiBsaXN0IHZhbHVlIChjb21tZW50KSIpCisgICAgICAgICAgICBlbGlmIGMgPT0gIiwiOgor
ICAgICAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBzZWxmLmxpc3RfdmFsdWVfc3RhcnRfc3RhdGUK
KyAgICAgICAgICAgICAgICBzZWxmLmNvbnN1bWUoKQorICAgICAgICAgICAgICAgIGJyZWFrCisg
ICAgICAgICAgICBlbGlmIGMgPT0gIiAiOgorICAgICAgICAgICAgICAgIHNwYWNlcyArPSAxCisg
ICAgICAgICAgICAgICAgc2VsZi5jb25zdW1lKCkKKyAgICAgICAgICAgIGVsaWYgYyA9PSAiXSI6
CisgICAgICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IHNlbGYubGlzdF9lbmRfc3RhdGUKKyAgICAg
ICAgICAgICAgICBzZWxmLmNvbnN1bWUoKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJ2ICs9ICIgIiAqIHNwYWNlcworICAgICAgICAg
ICAgICAgIHNwYWNlcyA9IDAKKyAgICAgICAgICAgICAgICBydiArPSBjCisgICAgICAgICAgICAg
ICAgc2VsZi5jb25zdW1lKCkKKworICAgICAgICBpZiBydjoKKyAgICAgICAgICAgIHlpZWxkICh0
b2tlbl90eXBlcy5zdHJpbmcsIGRlY29kZShydikpCisKKyAgICBkZWYgbGlzdF92YWx1ZV9hdG9t
X3N0YXRlKHNlbGYpOgorICAgICAgICBzZWxmLmNvbnN1bWUoKQorICAgICAgICBmb3IgXywgdmFs
dWUgaW4gc2VsZi5saXN0X3ZhbHVlX3N0YXRlKCk6CisgICAgICAgICAgICB5aWVsZCB0b2tlbl90
eXBlcy5hdG9tLCB2YWx1ZQorCisgICAgZGVmIGxpc3RfZW5kX3N0YXRlKHNlbGYpOgorICAgICAg
ICBzZWxmLmNvbnN1bWUoKQorICAgICAgICB5aWVsZCAodG9rZW5fdHlwZXMubGlzdF9lbmQsICJd
IikKKyAgICAgICAgc2VsZi5zdGF0ZSA9IHNlbGYubGluZV9lbmRfc3RhdGUKKworICAgIGRlZiB2
YWx1ZV9zdGF0ZShzZWxmKToKKyAgICAgICAgc2VsZi5za2lwX3doaXRlc3BhY2UoKQorICAgICAg
ICBpZiBzZWxmLmNoYXIoKSBpbiAoIiciLCAnIicpOgorICAgICAgICAgICAgcXVvdGVfY2hhciA9
IHNlbGYuY2hhcigpCisgICAgICAgICAgICBzZWxmLmNvbnN1bWUoKQorICAgICAgICAgICAgeWll
bGQgKHRva2VuX3R5cGVzLnN0cmluZywgc2VsZi5jb25zdW1lX3N0cmluZyhxdW90ZV9jaGFyKSkK
KyAgICAgICAgICAgIGlmIHNlbGYuY2hhcigpID09ICIjIjoKKyAgICAgICAgICAgICAgICBzZWxm
LnN0YXRlID0gc2VsZi5jb21tZW50X3N0YXRlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgICAgIHNlbGYuc3RhdGUgPSBzZWxmLmxpbmVfZW5kX3N0YXRlCisgICAgICAgIGVsaWYgc2Vs
Zi5jaGFyKCkgPT0gIkAiOgorICAgICAgICAgICAgc2VsZi5jb25zdW1lKCkKKyAgICAgICAgICAg
IGZvciBfLCB2YWx1ZSBpbiBzZWxmLnZhbHVlX2lubmVyX3N0YXRlKCk6CisgICAgICAgICAgICAg
ICAgeWllbGQgdG9rZW5fdHlwZXMuYXRvbSwgdmFsdWUKKyAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgIHNlbGYuc3RhdGUgPSBzZWxmLnZhbHVlX2lubmVyX3N0YXRlCisKKyAgICBkZWYgdmFsdWVf
aW5uZXJfc3RhdGUoc2VsZik6CisgICAgICAgIHJ2ID0gIiIKKyAgICAgICAgc3BhY2VzID0gMAor
ICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgYyA9IHNlbGYuY2hhcigpCisgICAgICAg
ICAgICBpZiBjID09ICJcXCI6CisgICAgICAgICAgICAgICAgcnYgKz0gc2VsZi5jb25zdW1lX2Vz
Y2FwZSgpCisgICAgICAgICAgICBlbGlmIGMgPT0gIiMiOgorICAgICAgICAgICAgICAgIHNlbGYu
c3RhdGUgPSBzZWxmLmNvbW1lbnRfc3RhdGUKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAg
ICAgICAgZWxpZiBjID09ICIgIjoKKyAgICAgICAgICAgICAgICAjIHByZXZlbnQgd2hpdGVzcGFj
ZSBiZWZvcmUgY29tbWVudHMgZnJvbSBiZWluZyBpbmNsdWRlZCBpbiB0aGUgdmFsdWUKKyAgICAg
ICAgICAgICAgICBzcGFjZXMgKz0gMQorICAgICAgICAgICAgICAgIHNlbGYuY29uc3VtZSgpCisg
ICAgICAgICAgICBlbGlmIGMgPT0gZW9sOgorICAgICAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBz
ZWxmLmxpbmVfZW5kX3N0YXRlCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVs
c2U6CisgICAgICAgICAgICAgICAgcnYgKz0gIiAiICogc3BhY2VzCisgICAgICAgICAgICAgICAg
c3BhY2VzID0gMAorICAgICAgICAgICAgICAgIHJ2ICs9IGMKKyAgICAgICAgICAgICAgICBzZWxm
LmNvbnN1bWUoKQorICAgICAgICB5aWVsZCAodG9rZW5fdHlwZXMuc3RyaW5nLCBkZWNvZGUocnYp
KQorCisgICAgZGVmIGNvbW1lbnRfc3RhdGUoc2VsZik6CisgICAgICAgIHdoaWxlIHNlbGYuY2hh
cigpIGlzIG5vdCBlb2w6CisgICAgICAgICAgICBzZWxmLmNvbnN1bWUoKQorICAgICAgICBzZWxm
LnN0YXRlID0gc2VsZi5lb2xfc3RhdGUKKworICAgIGRlZiBsaW5lX2VuZF9zdGF0ZShzZWxmKToK
KyAgICAgICAgc2VsZi5za2lwX3doaXRlc3BhY2UoKQorICAgICAgICBjID0gc2VsZi5jaGFyKCkK
KyAgICAgICAgaWYgYyA9PSAiIyI6CisgICAgICAgICAgICBzZWxmLnN0YXRlID0gc2VsZi5jb21t
ZW50X3N0YXRlCisgICAgICAgIGVsaWYgYyA9PSBlb2w6CisgICAgICAgICAgICBzZWxmLnN0YXRl
ID0gc2VsZi5lb2xfc3RhdGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFBhcnNl
RXJyb3Ioc2VsZi5maWxlbmFtZSwgc2VsZi5saW5lX251bWJlciwgIkp1bmsgYmVmb3JlIEVPTCAl
cyIgJSBjKQorCisgICAgZGVmIGNvbnN1bWVfc3RyaW5nKHNlbGYsIHF1b3RlX2NoYXIpOgorICAg
ICAgICBydiA9ICIiCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBjID0gc2VsZi5j
aGFyKCkKKyAgICAgICAgICAgIGlmIGMgPT0gIlxcIjoKKyAgICAgICAgICAgICAgICBydiArPSBz
ZWxmLmNvbnN1bWVfZXNjYXBlKCkKKyAgICAgICAgICAgIGVsaWYgYyA9PSBxdW90ZV9jaGFyOgor
ICAgICAgICAgICAgICAgIHNlbGYuY29uc3VtZSgpCisgICAgICAgICAgICAgICAgYnJlYWsKKyAg
ICAgICAgICAgIGVsaWYgYyA9PSBlb2w6CisgICAgICAgICAgICAgICAgcmFpc2UgUGFyc2VFcnJv
cihzZWxmLmZpbGVuYW1lLCBzZWxmLmxpbmVfbnVtYmVyLCAiRU9MIGluIHF1b3RlZCBzdHJpbmci
KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBydiArPSBjCisgICAgICAgICAg
ICAgICAgc2VsZi5jb25zdW1lKCkKKworICAgICAgICByZXR1cm4gZGVjb2RlKHJ2KQorCisgICAg
ZGVmIGV4cHJfb3JfdmFsdWVfc3RhdGUoc2VsZik6CisgICAgICAgIGlmIHNlbGYucGVlaygzKSA9
PSAiaWYgIjoKKyAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBzZWxmLmV4cHJfc3RhdGUKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBzZWxmLnZhbHVlX3N0YXRlCisKKyAg
ICBkZWYgZXhwcl9zdGF0ZShzZWxmKToKKyAgICAgICAgc2VsZi5za2lwX3doaXRlc3BhY2UoKQor
ICAgICAgICBjID0gc2VsZi5jaGFyKCkKKyAgICAgICAgaWYgYyA9PSBlb2w6CisgICAgICAgICAg
ICByYWlzZSBQYXJzZUVycm9yKHNlbGYuZmlsZW5hbWUsIHNlbGYubGluZV9udW1iZXIsICJFT0wg
aW4gZXhwcmVzc2lvbiIpCisgICAgICAgIGVsaWYgYyBpbiAiJ1wiIjoKKyAgICAgICAgICAgIHNl
bGYuY29uc3VtZSgpCisgICAgICAgICAgICB5aWVsZCAodG9rZW5fdHlwZXMuc3RyaW5nLCBzZWxm
LmNvbnN1bWVfc3RyaW5nKGMpKQorICAgICAgICBlbGlmIGMgPT0gIiMiOgorICAgICAgICAgICAg
cmFpc2UgUGFyc2VFcnJvcihzZWxmLmZpbGVuYW1lLCBzZWxmLmxpbmVfbnVtYmVyLCAiQ29tbWVu
dCBiZWZvcmUgZW5kIG9mIGV4cHJlc3Npb24iKQorICAgICAgICBlbGlmIGMgPT0gIjoiOgorICAg
ICAgICAgICAgeWllbGQgKHRva2VuX3R5cGVzLnNlcGFyYXRvciwgYykKKyAgICAgICAgICAgIHNl
bGYuY29uc3VtZSgpCisgICAgICAgICAgICBzZWxmLnN0YXRlID0gc2VsZi52YWx1ZV9zdGF0ZQor
ICAgICAgICBlbGlmIGMgaW4gcGFyZW5zOgorICAgICAgICAgICAgc2VsZi5jb25zdW1lKCkKKyAg
ICAgICAgICAgIHlpZWxkICh0b2tlbl90eXBlcy5wYXJlbiwgYykKKyAgICAgICAgZWxpZiBjIGlu
ICgiISIsICI9Iik6CisgICAgICAgICAgICBzZWxmLnN0YXRlID0gc2VsZi5vcGVyYXRvcl9zdGF0
ZQorICAgICAgICBlbGlmIGMgaW4gZGlnaXRzOgorICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IHNl
bGYuZGlnaXRfc3RhdGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBz
ZWxmLmlkZW50X3N0YXRlCisKKyAgICBkZWYgb3BlcmF0b3Jfc3RhdGUoc2VsZik6CisgICAgICAg
ICMgT25seSBzeW1ib2xpYyBvcGVyYXRvcnMKKyAgICAgICAgaW5kZXhfMCA9IHNlbGYuaW5kZXgK
KyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGMgPSBzZWxmLmNoYXIoKQorICAgICAg
ICAgICAgaWYgYyA9PSBlb2w6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVs
aWYgYyBpbiBvcGVyYXRvcl9jaGFyczoKKyAgICAgICAgICAgICAgICBzZWxmLmNvbnN1bWUoKQor
ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnN0YXRlID0gc2VsZi5leHBy
X3N0YXRlCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgeWllbGQgKHRva2VuX3R5cGVz
LmlkZW50LCBzZWxmLmxpbmVbaW5kZXhfMDpzZWxmLmluZGV4XSkKKworICAgIGRlZiBkaWdpdF9z
dGF0ZShzZWxmKToKKyAgICAgICAgaW5kZXhfMCA9IHNlbGYuaW5kZXgKKyAgICAgICAgc2Vlbl9k
b3QgPSBGYWxzZQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgYyA9IHNlbGYuY2hh
cigpCisgICAgICAgICAgICBpZiBjID09IGVvbDoKKyAgICAgICAgICAgICAgICBicmVhaworICAg
ICAgICAgICAgZWxpZiBjIGluIGRpZ2l0czoKKyAgICAgICAgICAgICAgICBzZWxmLmNvbnN1bWUo
KQorICAgICAgICAgICAgZWxpZiBjID09ICIuIjoKKyAgICAgICAgICAgICAgICBpZiBzZWVuX2Rv
dDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgUGFyc2VFcnJvcihzZWxmLmZpbGVuYW1lLCBz
ZWxmLmxpbmVfbnVtYmVyLCAiSW52YWxpZCBudW1iZXIiKQorICAgICAgICAgICAgICAgIHNlbGYu
Y29uc3VtZSgpCisgICAgICAgICAgICAgICAgc2Vlbl9kb3QgPSBUcnVlCisgICAgICAgICAgICBl
bGlmIGMgaW4gcGFyZW5zOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbGlm
IGMgaW4gb3BlcmF0b3JfY2hhcnM6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAg
IGVsaWYgYyA9PSAiICI6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsaWYg
YyA9PSAiOiI6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICAgICAgcmFpc2UgUGFyc2VFcnJvcihzZWxmLmZpbGVuYW1lLCBzZWxmLmxpbmVfbnVt
YmVyLCAiSW52YWxpZCBjaGFyYWN0ZXIgaW4gbnVtYmVyIikKKworICAgICAgICBzZWxmLnN0YXRl
ID0gc2VsZi5leHByX3N0YXRlCisgICAgICAgIHlpZWxkICh0b2tlbl90eXBlcy5udW1iZXIsIHNl
bGYubGluZVtpbmRleF8wOnNlbGYuaW5kZXhdKQorCisgICAgZGVmIGlkZW50X3N0YXRlKHNlbGYp
OgorICAgICAgICBpbmRleF8wID0gc2VsZi5pbmRleAorICAgICAgICB3aGlsZSBUcnVlOgorICAg
ICAgICAgICAgYyA9IHNlbGYuY2hhcigpCisgICAgICAgICAgICBpZiBjID09IGVvbDoKKyAgICAg
ICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxpZiBjID09ICIuIjoKKyAgICAgICAgICAg
ICAgICBicmVhaworICAgICAgICAgICAgZWxpZiBjIGluIHBhcmVuczoKKyAgICAgICAgICAgICAg
ICBicmVhaworICAgICAgICAgICAgZWxpZiBjIGluIG9wZXJhdG9yX2NoYXJzOgorICAgICAgICAg
ICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbGlmIGMgPT0gIiAiOgorICAgICAgICAgICAgICAg
IGJyZWFrCisgICAgICAgICAgICBlbGlmIGMgPT0gIjoiOgorICAgICAgICAgICAgICAgIGJyZWFr
CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuY29uc3VtZSgpCisgICAg
ICAgIHNlbGYuc3RhdGUgPSBzZWxmLmV4cHJfc3RhdGUKKyAgICAgICAgeWllbGQgKHRva2VuX3R5
cGVzLmlkZW50LCBzZWxmLmxpbmVbaW5kZXhfMDpzZWxmLmluZGV4XSkKKworICAgIGRlZiBjb25z
dW1lX2VzY2FwZShzZWxmKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuY2hhcigpID09ICJcXCIKKyAg
ICAgICAgc2VsZi5jb25zdW1lKCkKKyAgICAgICAgYyA9IHNlbGYuY2hhcigpCisgICAgICAgIHNl
bGYuY29uc3VtZSgpCisgICAgICAgIGlmIGMgPT0gIngiOgorICAgICAgICAgICAgcmV0dXJuIHNl
bGYuZGVjb2RlX2VzY2FwZSgyKQorICAgICAgICBlbGlmIGMgPT0gInUiOgorICAgICAgICAgICAg
cmV0dXJuIHNlbGYuZGVjb2RlX2VzY2FwZSg0KQorICAgICAgICBlbGlmIGMgPT0gIlUiOgorICAg
ICAgICAgICAgcmV0dXJuIHNlbGYuZGVjb2RlX2VzY2FwZSg2KQorICAgICAgICBlbGlmIGMgaW4g
WyJhIiwgImIiLCAiZiIsICJuIiwgInIiLCAidCIsICJ2Il06CisgICAgICAgICAgICByZXR1cm4g
ZXZhbCgiJ1wlcyciICUgYykKKyAgICAgICAgZWxpZiBjIGlzIGVvbDoKKyAgICAgICAgICAgIHJh
aXNlIFBhcnNlRXJyb3Ioc2VsZi5maWxlbmFtZSwgc2VsZi5saW5lX251bWJlciwgIkVPTCBpbiBl
c2NhcGUiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIGMKKworICAgIGRlZiBk
ZWNvZGVfZXNjYXBlKHNlbGYsIGxlbmd0aCk6CisgICAgICAgIHZhbHVlID0gMAorICAgICAgICBm
b3IgaSBpbiB4cmFuZ2UobGVuZ3RoKToKKyAgICAgICAgICAgIGMgPSBzZWxmLmNoYXIoKQorICAg
ICAgICAgICAgdmFsdWUgKj0gMTYKKyAgICAgICAgICAgIHZhbHVlICs9IHNlbGYuZXNjYXBlX3Zh
bHVlKGMpCisgICAgICAgICAgICBzZWxmLmNvbnN1bWUoKQorCisgICAgICAgIHJldHVybiB1bmlj
aHIodmFsdWUpCisKKyAgICBkZWYgZXNjYXBlX3ZhbHVlKHNlbGYsIGMpOgorICAgICAgICBpZiAn
MCcgPD0gYyA8PSAnOSc6CisgICAgICAgICAgICByZXR1cm4gb3JkKGMpIC0gb3JkKCcwJykKKyAg
ICAgICAgZWxpZiAnYScgPD0gYyA8PSAnZic6CisgICAgICAgICAgICByZXR1cm4gb3JkKGMpIC0g
b3JkKCdhJykgKyAxMAorICAgICAgICBlbGlmICdBJyA8PSBjIDw9ICdGJzoKKyAgICAgICAgICAg
IHJldHVybiBvcmQoYykgLSBvcmQoJ0EnKSArIDEwCisgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICByYWlzZSBQYXJzZUVycm9yKHNlbGYuZmlsZW5hbWUsIHNlbGYubGluZV9udW1iZXIsICJJbnZh
bGlkIGNoYXJhY3RlciBlc2NhcGUiKQorCisKK2NsYXNzIFBhcnNlcihvYmplY3QpOgorICAgIGRl
ZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5yZXNldCgpCisKKyAgICBkZWYgcmVzZXQo
c2VsZik6CisgICAgICAgIHNlbGYudG9rZW4gPSBOb25lCisgICAgICAgIHNlbGYudW5hcnlfb3Bl
cmF0b3JzID0gIiEiCisgICAgICAgIHNlbGYuYmluYXJ5X29wZXJhdG9ycyA9IGZyb3plbnNldChb
IiYmIiwgInx8IiwgIj09Il0pCisgICAgICAgIHNlbGYudG9rZW5pemVyID0gVG9rZW5pemVyKCkK
KyAgICAgICAgc2VsZi50b2tlbl9nZW5lcmF0b3IgPSBOb25lCisgICAgICAgIHNlbGYudHJlZSA9
IFRyZWVidWlsZGVyKERhdGFOb2RlKE5vbmUpKQorICAgICAgICBzZWxmLmV4cHJfYnVpbGRlciA9
IE5vbmUKKyAgICAgICAgc2VsZi5leHByX2J1aWxkZXJzID0gW10KKworICAgIGRlZiBwYXJzZShz
ZWxmLCBpbnB1dCk6CisgICAgICAgIHNlbGYucmVzZXQoKQorICAgICAgICBzZWxmLnRva2VuX2dl
bmVyYXRvciA9IHNlbGYudG9rZW5pemVyLnRva2VuaXplKGlucHV0KQorICAgICAgICBzZWxmLmNv
bnN1bWUoKQorICAgICAgICBzZWxmLm1hbmlmZXN0KCkKKyAgICAgICAgcmV0dXJuIHNlbGYudHJl
ZS5ub2RlCisKKyAgICBkZWYgY29uc3VtZShzZWxmKToKKyAgICAgICAgc2VsZi50b2tlbiA9IHNl
bGYudG9rZW5fZ2VuZXJhdG9yLm5leHQoKQorCisgICAgZGVmIGV4cGVjdChzZWxmLCB0eXBlLCB2
YWx1ZT1Ob25lKToKKyAgICAgICAgaWYgc2VsZi50b2tlblswXSAhPSB0eXBlOgorICAgICAgICAg
ICAgcmFpc2UgUGFyc2VFcnJvcgorICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAg
ICAgICAgIGlmIHNlbGYudG9rZW5bMV0gIT0gdmFsdWU6CisgICAgICAgICAgICAgICAgcmFpc2Ug
UGFyc2VFcnJvcgorCisgICAgICAgIHNlbGYuY29uc3VtZSgpCisKKyAgICBkZWYgbWFuaWZlc3Qo
c2VsZik6CisgICAgICAgIHNlbGYuZGF0YV9ibG9jaygpCisgICAgICAgIHNlbGYuZXhwZWN0KHRv
a2VuX3R5cGVzLmVvZikKKworICAgIGRlZiBkYXRhX2Jsb2NrKHNlbGYpOgorICAgICAgICB3aGls
ZSBzZWxmLnRva2VuWzBdID09IHRva2VuX3R5cGVzLnN0cmluZzoKKyAgICAgICAgICAgIHNlbGYu
dHJlZS5hcHBlbmQoS2V5VmFsdWVOb2RlKHNlbGYudG9rZW5bMV0pKQorICAgICAgICAgICAgc2Vs
Zi5jb25zdW1lKCkKKyAgICAgICAgICAgIHNlbGYuZXhwZWN0KHRva2VuX3R5cGVzLnNlcGFyYXRv
cikKKyAgICAgICAgICAgIHNlbGYudmFsdWVfYmxvY2soKQorICAgICAgICAgICAgc2VsZi50cmVl
LnBvcCgpCisKKyAgICAgICAgd2hpbGUgc2VsZi50b2tlbiA9PSAodG9rZW5fdHlwZXMucGFyZW4s
ICJbIik6CisgICAgICAgICAgICBzZWxmLmNvbnN1bWUoKQorICAgICAgICAgICAgaWYgc2VsZi50
b2tlblswXSAhPSB0b2tlbl90eXBlcy5zdHJpbmc6CisgICAgICAgICAgICAgICAgcmFpc2UgUGFy
c2VFcnJvcgorICAgICAgICAgICAgc2VsZi50cmVlLmFwcGVuZChEYXRhTm9kZShzZWxmLnRva2Vu
WzFdKSkKKyAgICAgICAgICAgIHNlbGYuY29uc3VtZSgpCisgICAgICAgICAgICBzZWxmLmV4cGVj
dCh0b2tlbl90eXBlcy5wYXJlbiwgIl0iKQorICAgICAgICAgICAgaWYgc2VsZi50b2tlblswXSA9
PSB0b2tlbl90eXBlcy5ncm91cF9zdGFydDoKKyAgICAgICAgICAgICAgICBzZWxmLmNvbnN1bWUo
KQorICAgICAgICAgICAgICAgIHNlbGYuZGF0YV9ibG9jaygpCisgICAgICAgICAgICAgICAgc2Vs
Zi5lb2Zfb3JfZW5kX2dyb3VwKCkKKyAgICAgICAgICAgIHNlbGYudHJlZS5wb3AoKQorCisgICAg
ZGVmIGVvZl9vcl9lbmRfZ3JvdXAoc2VsZik6CisgICAgICAgIGlmIHNlbGYudG9rZW5bMF0gIT0g
dG9rZW5fdHlwZXMuZW9mOgorICAgICAgICAgICAgc2VsZi5leHBlY3QodG9rZW5fdHlwZXMuZ3Jv
dXBfZW5kKQorCisgICAgZGVmIHZhbHVlX2Jsb2NrKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnRv
a2VuWzBdID09IHRva2VuX3R5cGVzLmxpc3Rfc3RhcnQ6CisgICAgICAgICAgICBzZWxmLmNvbnN1
bWUoKQorICAgICAgICAgICAgc2VsZi5saXN0X3ZhbHVlKCkKKyAgICAgICAgZWxpZiBzZWxmLnRv
a2VuWzBdID09IHRva2VuX3R5cGVzLnN0cmluZzoKKyAgICAgICAgICAgIHNlbGYudmFsdWUoKQor
ICAgICAgICBlbGlmIHNlbGYudG9rZW5bMF0gPT0gdG9rZW5fdHlwZXMuZ3JvdXBfc3RhcnQ6Cisg
ICAgICAgICAgICBzZWxmLmNvbnN1bWUoKQorICAgICAgICAgICAgc2VsZi5leHByZXNzaW9uX3Zh
bHVlcygpCisgICAgICAgICAgICBpZiBzZWxmLnRva2VuWzBdID09IHRva2VuX3R5cGVzLnN0cmlu
ZzoKKyAgICAgICAgICAgICAgICBzZWxmLnZhbHVlKCkKKyAgICAgICAgICAgIHNlbGYuZW9mX29y
X2VuZF9ncm91cCgpCisgICAgICAgIGVsaWYgc2VsZi50b2tlblswXSA9PSB0b2tlbl90eXBlcy5h
dG9tOgorICAgICAgICAgICAgc2VsZi5hdG9tKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg
IHJhaXNlIFBhcnNlRXJyb3IKKworICAgIGRlZiBsaXN0X3ZhbHVlKHNlbGYpOgorICAgICAgICBz
ZWxmLnRyZWUuYXBwZW5kKExpc3ROb2RlKCkpCisgICAgICAgIHdoaWxlIHNlbGYudG9rZW5bMF0g
aW4gKHRva2VuX3R5cGVzLmF0b20sIHRva2VuX3R5cGVzLnN0cmluZyk6CisgICAgICAgICAgICBp
ZiBzZWxmLnRva2VuWzBdID09IHRva2VuX3R5cGVzLmF0b206CisgICAgICAgICAgICAgICAgc2Vs
Zi5hdG9tKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi52YWx1ZSgp
CisgICAgICAgIHNlbGYuZXhwZWN0KHRva2VuX3R5cGVzLmxpc3RfZW5kKQorICAgICAgICBzZWxm
LnRyZWUucG9wKCkKKworICAgIGRlZiBleHByZXNzaW9uX3ZhbHVlcyhzZWxmKToKKyAgICAgICAg
d2hpbGUgc2VsZi50b2tlbiA9PSAodG9rZW5fdHlwZXMuaWRlbnQsICJpZiIpOgorICAgICAgICAg
ICAgc2VsZi5jb25zdW1lKCkKKyAgICAgICAgICAgIHNlbGYudHJlZS5hcHBlbmQoQ29uZGl0aW9u
YWxOb2RlKCkpCisgICAgICAgICAgICBzZWxmLmV4cHJfc3RhcnQoKQorICAgICAgICAgICAgc2Vs
Zi5leHBlY3QodG9rZW5fdHlwZXMuc2VwYXJhdG9yKQorICAgICAgICAgICAgaWYgc2VsZi50b2tl
blswXSA9PSB0b2tlbl90eXBlcy5zdHJpbmc6CisgICAgICAgICAgICAgICAgc2VsZi52YWx1ZSgp
CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIFBhcnNlRXJyb3IKKyAg
ICAgICAgICAgIHNlbGYudHJlZS5wb3AoKQorCisgICAgZGVmIHZhbHVlKHNlbGYpOgorICAgICAg
ICBzZWxmLnRyZWUuYXBwZW5kKFZhbHVlTm9kZShzZWxmLnRva2VuWzFdKSkKKyAgICAgICAgc2Vs
Zi5jb25zdW1lKCkKKyAgICAgICAgc2VsZi50cmVlLnBvcCgpCisKKyAgICBkZWYgYXRvbShzZWxm
KToKKyAgICAgICAgaWYgc2VsZi50b2tlblsxXSBub3QgaW4gYXRvbXM6CisgICAgICAgICAgICBy
YWlzZSBQYXJzZUVycm9yKHNlbGYudG9rZW5pemVyLmZpbGVuYW1lLCBzZWxmLnRva2VuaXplci5s
aW5lX251bWJlciwgIlVucmVjb2duaXNlZCBzeW1ib2wgQCVzIiAlIHNlbGYudG9rZW5bMV0pCisg
ICAgICAgIHNlbGYudHJlZS5hcHBlbmQoQXRvbU5vZGUoYXRvbXNbc2VsZi50b2tlblsxXV0pKQor
ICAgICAgICBzZWxmLmNvbnN1bWUoKQorICAgICAgICBzZWxmLnRyZWUucG9wKCkKKworICAgIGRl
ZiBleHByX3N0YXJ0KHNlbGYpOgorICAgICAgICBzZWxmLmV4cHJfYnVpbGRlciA9IEV4cHJlc3Np
b25CdWlsZGVyKHNlbGYudG9rZW5pemVyKQorICAgICAgICBzZWxmLmV4cHJfYnVpbGRlcnMuYXBw
ZW5kKHNlbGYuZXhwcl9idWlsZGVyKQorICAgICAgICBzZWxmLmV4cHIoKQorICAgICAgICBleHBy
ZXNzaW9uID0gc2VsZi5leHByX2J1aWxkZXIuZmluaXNoKCkKKyAgICAgICAgc2VsZi5leHByX2J1
aWxkZXJzLnBvcCgpCisgICAgICAgIHNlbGYuZXhwcl9idWlsZGVyID0gc2VsZi5leHByX2J1aWxk
ZXJzWy0xXSBpZiBzZWxmLmV4cHJfYnVpbGRlcnMgZWxzZSBOb25lCisgICAgICAgIGlmIHNlbGYu
ZXhwcl9idWlsZGVyOgorICAgICAgICAgICAgc2VsZi5leHByX2J1aWxkZXIub3BlcmFuZHNbLTFd
LmNoaWxkcmVuWy0xXS5hcHBlbmQoZXhwcmVzc2lvbikKKyAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgIHNlbGYudHJlZS5hcHBlbmQoZXhwcmVzc2lvbikKKyAgICAgICAgICAgIHNlbGYudHJlZS5w
b3AoKQorCisgICAgZGVmIGV4cHIoc2VsZik6CisgICAgICAgIHNlbGYuZXhwcl9vcGVyYW5kKCkK
KyAgICAgICAgd2hpbGUgKHNlbGYudG9rZW5bMF0gPT0gdG9rZW5fdHlwZXMuaWRlbnQgYW5kIHNl
bGYudG9rZW5bMV0gaW4gYmluYXJ5X29wZXJhdG9ycyk6CisgICAgICAgICAgICBzZWxmLmV4cHJf
YmluX29wKCkKKyAgICAgICAgICAgIHNlbGYuZXhwcl9vcGVyYW5kKCkKKworICAgIGRlZiBleHBy
X29wZXJhbmQoc2VsZik6CisgICAgICAgIGlmIHNlbGYudG9rZW4gPT0gKHRva2VuX3R5cGVzLnBh
cmVuLCAiKCIpOgorICAgICAgICAgICAgc2VsZi5jb25zdW1lKCkKKyAgICAgICAgICAgIHNlbGYu
ZXhwcl9idWlsZGVyLmxlZnRfcGFyZW4oKQorICAgICAgICAgICAgc2VsZi5leHByKCkKKyAgICAg
ICAgICAgIHNlbGYuZXhwZWN0KHRva2VuX3R5cGVzLnBhcmVuLCAiKSIpCisgICAgICAgICAgICBz
ZWxmLmV4cHJfYnVpbGRlci5yaWdodF9wYXJlbigpCisgICAgICAgIGVsaWYgc2VsZi50b2tlblsw
XSA9PSB0b2tlbl90eXBlcy5pZGVudCBhbmQgc2VsZi50b2tlblsxXSBpbiB1bmFyeV9vcGVyYXRv
cnM6CisgICAgICAgICAgICBzZWxmLmV4cHJfdW5hcnlfb3AoKQorICAgICAgICAgICAgc2VsZi5l
eHByX29wZXJhbmQoKQorICAgICAgICBlbGlmIHNlbGYudG9rZW5bMF0gaW4gW3Rva2VuX3R5cGVz
LnN0cmluZywgdG9rZW5fdHlwZXMuaWRlbnRdOgorICAgICAgICAgICAgc2VsZi5leHByX3ZhbHVl
KCkKKyAgICAgICAgZWxpZiBzZWxmLnRva2VuWzBdID09IHRva2VuX3R5cGVzLm51bWJlcjoKKyAg
ICAgICAgICAgIHNlbGYuZXhwcl9udW1iZXIoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
cmFpc2UgUGFyc2VFcnJvcihzZWxmLnRva2VuaXplci5maWxlbmFtZSwgc2VsZi50b2tlbml6ZXIu
bGluZV9udW1iZXIsICJVbnJlY29nbmlzZWQgb3BlcmFuZCIpCisKKyAgICBkZWYgZXhwcl91bmFy
eV9vcChzZWxmKToKKyAgICAgICAgaWYgc2VsZi50b2tlblsxXSBpbiB1bmFyeV9vcGVyYXRvcnM6
CisgICAgICAgICAgICBzZWxmLmV4cHJfYnVpbGRlci5wdXNoX29wZXJhdG9yKFVuYXJ5T3BlcmF0
b3JOb2RlKHNlbGYudG9rZW5bMV0pKQorICAgICAgICAgICAgc2VsZi5jb25zdW1lKCkKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFBhcnNlRXJyb3Ioc2VsZi50b2tlbml6ZXIuZmls
ZW5hbWUsIHNlbGYudG9rZW5pemVyLmxpbmVfbnVtYmVyLCAiRXhwZWN0ZWQgdW5hcnkgb3BlcmF0
b3IiKQorCisgICAgZGVmIGV4cHJfYmluX29wKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnRva2Vu
WzFdIGluIGJpbmFyeV9vcGVyYXRvcnM6CisgICAgICAgICAgICBzZWxmLmV4cHJfYnVpbGRlci5w
dXNoX29wZXJhdG9yKEJpbmFyeU9wZXJhdG9yTm9kZShzZWxmLnRva2VuWzFdKSkKKyAgICAgICAg
ICAgIHNlbGYuY29uc3VtZSgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBQYXJz
ZUVycm9yKHNlbGYudG9rZW5pemVyLmZpbGVuYW1lLCBzZWxmLnRva2VuaXplci5saW5lX251bWJl
ciwgIkV4cGVjdGVkIGJpbmFyeSBvcGVyYXRvciIpCisKKyAgICBkZWYgZXhwcl92YWx1ZShzZWxm
KToKKyAgICAgICAgbm9kZV90eXBlID0ge3Rva2VuX3R5cGVzLnN0cmluZzogU3RyaW5nTm9kZSwK
KyAgICAgICAgICAgICAgICAgICAgIHRva2VuX3R5cGVzLmlkZW50OiBWYXJpYWJsZU5vZGV9W3Nl
bGYudG9rZW5bMF1dCisgICAgICAgIHNlbGYuZXhwcl9idWlsZGVyLnB1c2hfb3BlcmFuZChub2Rl
X3R5cGUoc2VsZi50b2tlblsxXSkpCisgICAgICAgIHNlbGYuY29uc3VtZSgpCisgICAgICAgIGlm
IHNlbGYudG9rZW4gPT0gKHRva2VuX3R5cGVzLnBhcmVuLCAiWyIpOgorICAgICAgICAgICAgc2Vs
Zi5jb25zdW1lKCkKKyAgICAgICAgICAgIHNlbGYuZXhwcl9idWlsZGVyLm9wZXJhbmRzWy0xXS5h
cHBlbmQoSW5kZXhOb2RlKCkpCisgICAgICAgICAgICBzZWxmLmV4cHJfc3RhcnQoKQorICAgICAg
ICAgICAgc2VsZi5leHBlY3QodG9rZW5fdHlwZXMucGFyZW4sICJdIikKKworICAgIGRlZiBleHBy
X251bWJlcihzZWxmKToKKyAgICAgICAgc2VsZi5leHByX2J1aWxkZXIucHVzaF9vcGVyYW5kKE51
bWJlck5vZGUoc2VsZi50b2tlblsxXSkpCisgICAgICAgIHNlbGYuY29uc3VtZSgpCisKKworY2xh
c3MgVHJlZWJ1aWxkZXIob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcm9vdCk6Cisg
ICAgICAgIHNlbGYucm9vdCA9IHJvb3QKKyAgICAgICAgc2VsZi5ub2RlID0gcm9vdAorCisgICAg
ZGVmIGFwcGVuZChzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi5ub2RlLmFwcGVuZChub2RlKQor
ICAgICAgICBzZWxmLm5vZGUgPSBub2RlCisgICAgICAgIHJldHVybiBub2RlCisKKyAgICBkZWYg
cG9wKHNlbGYpOgorICAgICAgICBub2RlID0gc2VsZi5ub2RlCisgICAgICAgIHNlbGYubm9kZSA9
IHNlbGYubm9kZS5wYXJlbnQKKyAgICAgICAgcmV0dXJuIG5vZGUKKworCitjbGFzcyBFeHByZXNz
aW9uQnVpbGRlcihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0b2tlbml6ZXIpOgor
ICAgICAgICBzZWxmLm9wZXJhbmRzID0gW10KKyAgICAgICAgc2VsZi5vcGVyYXRvcnMgPSBbTm9u
ZV0KKyAgICAgICAgc2VsZi50b2tlbml6ZXIgPSB0b2tlbml6ZXIKKworICAgIGRlZiBmaW5pc2go
c2VsZik6CisgICAgICAgIHdoaWxlIHNlbGYub3BlcmF0b3JzWy0xXSBpcyBub3QgTm9uZToKKyAg
ICAgICAgICAgIHNlbGYucG9wX29wZXJhdG9yKCkKKyAgICAgICAgcnYgPSBzZWxmLnBvcF9vcGVy
YW5kKCkKKyAgICAgICAgYXNzZXJ0IHNlbGYuaXNfZW1wdHkoKQorICAgICAgICByZXR1cm4gcnYK
KworICAgIGRlZiBsZWZ0X3BhcmVuKHNlbGYpOgorICAgICAgICBzZWxmLm9wZXJhdG9ycy5hcHBl
bmQoTm9uZSkKKworICAgIGRlZiByaWdodF9wYXJlbihzZWxmKToKKyAgICAgICAgd2hpbGUgc2Vs
Zi5vcGVyYXRvcnNbLTFdIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5wb3Bfb3BlcmF0
b3IoKQorICAgICAgICAgICAgaWYgbm90IHNlbGYub3BlcmF0b3JzOgorICAgICAgICAgICAgICAg
IHJhaXNlIFBhcnNlRXJyb3Ioc2VsZi50b2tlbml6ZXIuZmlsZW5hbWUsIHNlbGYudG9rZW5pemVy
LmxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVW5iYWxhbmNlZCBwYXJl
bnMiKQorCisgICAgICAgIGFzc2VydCBzZWxmLm9wZXJhdG9ycy5wb3AoKSBpcyBOb25lCisKKyAg
ICBkZWYgcHVzaF9vcGVyYXRvcihzZWxmLCBvcGVyYXRvcik6CisgICAgICAgIGFzc2VydCBvcGVy
YXRvciBpcyBub3QgTm9uZQorICAgICAgICB3aGlsZSBzZWxmLnByZWNlZGVuY2Uoc2VsZi5vcGVy
YXRvcnNbLTFdKSA+IHNlbGYucHJlY2VkZW5jZShvcGVyYXRvcik6CisgICAgICAgICAgICBzZWxm
LnBvcF9vcGVyYXRvcigpCisKKyAgICAgICAgc2VsZi5vcGVyYXRvcnMuYXBwZW5kKG9wZXJhdG9y
KQorCisgICAgZGVmIHBvcF9vcGVyYXRvcihzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxm
Lm9wZXJhdG9ycy5wb3AoKQorICAgICAgICBpZiBpc2luc3RhbmNlKG9wZXJhdG9yLCBCaW5hcnlP
cGVyYXRvck5vZGUpOgorICAgICAgICAgICAgb3BlcmFuZF8xID0gc2VsZi5vcGVyYW5kcy5wb3Ao
KQorICAgICAgICAgICAgb3BlcmFuZF8wID0gc2VsZi5vcGVyYW5kcy5wb3AoKQorICAgICAgICAg
ICAgc2VsZi5vcGVyYW5kcy5hcHBlbmQoQmluYXJ5RXhwcmVzc2lvbk5vZGUob3BlcmF0b3IsIG9w
ZXJhbmRfMCwgb3BlcmFuZF8xKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9wZXJhbmRf
MCA9IHNlbGYub3BlcmFuZHMucG9wKCkKKyAgICAgICAgICAgIHNlbGYub3BlcmFuZHMuYXBwZW5k
KFVuYXJ5RXhwcmVzc2lvbk5vZGUob3BlcmF0b3IsIG9wZXJhbmRfMCkpCisKKyAgICBkZWYgcHVz
aF9vcGVyYW5kKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLm9wZXJhbmRzLmFwcGVuZChub2Rl
KQorCisgICAgZGVmIHBvcF9vcGVyYW5kKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5vcGVy
YW5kcy5wb3AoKQorCisgICAgZGVmIGlzX2VtcHR5KHNlbGYpOgorICAgICAgICByZXR1cm4gbGVu
KHNlbGYub3BlcmFuZHMpID09IDAgYW5kIGFsbChpdGVtIGlzIE5vbmUgZm9yIGl0ZW0gaW4gc2Vs
Zi5vcGVyYXRvcnMpCisKKyAgICBkZWYgcHJlY2VkZW5jZShzZWxmLCBvcGVyYXRvcik6CisgICAg
ICAgIGlmIG9wZXJhdG9yIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBy
ZXR1cm4gcHJlY2VkZW5jZShvcGVyYXRvcikKKworCitkZWYgcGFyc2Uoc3RyZWFtKToKKyAgICBw
ID0gUGFyc2VyKCkKKyAgICByZXR1cm4gcC5wYXJzZShzdHJlYW0pCmRpZmYgLS1naXQgYS9XZWJE
cml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci93cHRtYW5p
ZmVzdC9zZXJpYWxpemVyLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dw
dHJ1bm5lci93cHRydW5uZXIvd3B0bWFuaWZlc3Qvc2VyaWFsaXplci5weQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNTIyMDNhYjI0MGEKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci93
cHRtYW5pZmVzdC9zZXJpYWxpemVyLnB5CkBAIC0wLDAgKzEsMTM2IEBACitmcm9tIG5vZGUgaW1w
b3J0IE5vZGVWaXNpdG9yLCBWYWx1ZU5vZGUsIExpc3ROb2RlLCBCaW5hcnlFeHByZXNzaW9uTm9k
ZQorZnJvbSBwYXJzZXIgaW1wb3J0IGF0b21zLCBwcmVjZWRlbmNlCisKK2F0b21fbmFtZXMgPSB7
djoiQCVzIiAlIGsgZm9yIChrLHYpIGluIGF0b21zLml0ZXJpdGVtcygpfQorCituYW1lZF9lc2Nh
cGVzID0gc2V0KFsiXGEiLCAiXGIiLCAiXGYiLCAiXG4iLCAiXHIiLCAiXHQiLCAiXHYiXSkKKwor
ZGVmIGVzY2FwZShzdHJpbmcsIGV4dHJhcz0iIik6CisgICAgcnYgPSAiIgorICAgIGZvciBjIGlu
IHN0cmluZzoKKyAgICAgICAgaWYgYyBpbiBuYW1lZF9lc2NhcGVzOgorICAgICAgICAgICAgcnYg
Kz0gYy5lbmNvZGUoInVuaWNvZGVfZXNjYXBlIikKKyAgICAgICAgZWxpZiBjID09ICJcXCI6Cisg
ICAgICAgICAgICBydiArPSAiXFxcXCIKKyAgICAgICAgZWxpZiBjIDwgJ1x4MjAnOgorICAgICAg
ICAgICAgcnYgKz0gIlxceCUwMngiICUgb3JkKGMpCisgICAgICAgIGVsaWYgYyBpbiBleHRyYXM6
CisgICAgICAgICAgICBydiArPSAiXFwiICsgYworICAgICAgICBlbHNlOgorICAgICAgICAgICAg
cnYgKz0gYworICAgIHJldHVybiBydi5lbmNvZGUoInV0ZjgiKQorCisKK2NsYXNzIE1hbmlmZXN0
U2VyaWFsaXplcihOb2RlVmlzaXRvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNraXBfZW1w
dHlfZGF0YT1GYWxzZSk6CisgICAgICAgIHNlbGYuc2tpcF9lbXB0eV9kYXRhID0gc2tpcF9lbXB0
eV9kYXRhCisKKyAgICBkZWYgc2VyaWFsaXplKHNlbGYsIHJvb3QpOgorICAgICAgICBzZWxmLmlu
ZGVudCA9IDIKKyAgICAgICAgcnYgPSAiXG4iLmpvaW4oc2VsZi52aXNpdChyb290KSkKKyAgICAg
ICAgaWYgcnZbLTFdICE9ICJcbiI6CisgICAgICAgICAgICBydiA9IHJ2ICsgIlxuIgorICAgICAg
ICByZXR1cm4gcnYKKworICAgIGRlZiB2aXNpdF9EYXRhTm9kZShzZWxmLCBub2RlKToKKyAgICAg
ICAgcnYgPSBbXQorICAgICAgICBpZiBub3Qgc2VsZi5za2lwX2VtcHR5X2RhdGEgb3Igbm9kZS5j
aGlsZHJlbjoKKyAgICAgICAgICAgIGlmIG5vZGUuZGF0YToKKyAgICAgICAgICAgICAgICBydi5h
cHBlbmQoIlslc10iICUgZXNjYXBlKG5vZGUuZGF0YSwgZXh0cmFzPSJdIikpCisgICAgICAgICAg
ICAgICAgaW5kZW50ID0gc2VsZi5pbmRlbnQgKiAiICIKKyAgICAgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICAgICAgaW5kZW50ID0gIiIKKworICAgICAgICAgICAgZm9yIGNoaWxkIGluIG5vZGUu
Y2hpbGRyZW46CisgICAgICAgICAgICAgICAgcnYuZXh0ZW5kKCIlcyVzIiAlIChpbmRlbnQgaWYg
aXRlbSBlbHNlICIiLCBpdGVtKSBmb3IgaXRlbSBpbiBzZWxmLnZpc2l0KGNoaWxkKSkKKworICAg
ICAgICAgICAgaWYgbm9kZS5wYXJlbnQ6CisgICAgICAgICAgICAgICAgcnYuYXBwZW5kKCIiKQor
CisgICAgICAgIHJldHVybiBydgorCisgICAgZGVmIHZpc2l0X0tleVZhbHVlTm9kZShzZWxmLCBu
b2RlKToKKyAgICAgICAgcnYgPSBbZXNjYXBlKG5vZGUuZGF0YSwgIjoiKSArICI6Il0KKyAgICAg
ICAgaW5kZW50ID0gIiAiICogc2VsZi5pbmRlbnQKKworICAgICAgICBpZiBsZW4obm9kZS5jaGls
ZHJlbikgPT0gMSBhbmQgaXNpbnN0YW5jZShub2RlLmNoaWxkcmVuWzBdLCAoVmFsdWVOb2RlLCBM
aXN0Tm9kZSkpOgorICAgICAgICAgICAgcnZbMF0gKz0gIiAlcyIgJSBzZWxmLnZpc2l0KG5vZGUu
Y2hpbGRyZW5bMF0pWzBdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmb3IgY2hpbGQgaW4g
bm9kZS5jaGlsZHJlbjoKKyAgICAgICAgICAgICAgICBydi5hcHBlbmQoaW5kZW50ICsgc2VsZi52
aXNpdChjaGlsZClbMF0pCisKKyAgICAgICAgcmV0dXJuIHJ2CisKKyAgICBkZWYgdmlzaXRfTGlz
dE5vZGUoc2VsZiwgbm9kZSk6CisgICAgICAgIHJ2ID0gWyJbIl0KKyAgICAgICAgcnYuZXh0ZW5k
KCIsICIuam9pbihzZWxmLnZpc2l0KGNoaWxkKVswXSBmb3IgY2hpbGQgaW4gbm9kZS5jaGlsZHJl
bikpCisgICAgICAgIHJ2LmFwcGVuZCgiXSIpCisgICAgICAgIHJldHVybiBbIiIuam9pbihydild
CisKKyAgICBkZWYgdmlzaXRfVmFsdWVOb2RlKHNlbGYsIG5vZGUpOgorICAgICAgICBpZiAiIyIg
aW4gbm9kZS5kYXRhIG9yIChpc2luc3RhbmNlKG5vZGUucGFyZW50LCBMaXN0Tm9kZSkgYW5kCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiLCIgaW4gbm9kZS5kYXRhIG9yICJdIiBp
biBub2RlLmRhdGEpKToKKyAgICAgICAgICAgIGlmICJcIiIgaW4gbm9kZS5kYXRhOgorICAgICAg
ICAgICAgICAgIHF1b3RlID0gIiciCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg
IHF1b3RlID0gIlwiIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcXVvdGUgPSAiIgorICAg
ICAgICByZXR1cm4gW3F1b3RlICsgZXNjYXBlKG5vZGUuZGF0YSwgZXh0cmFzPXF1b3RlKSArIHF1
b3RlXQorCisgICAgZGVmIHZpc2l0X0F0b21Ob2RlKHNlbGYsIG5vZGUpOgorICAgICAgICByZXR1
cm4gW2F0b21fbmFtZXNbbm9kZS5kYXRhXV0KKworICAgIGRlZiB2aXNpdF9Db25kaXRpb25hbE5v
ZGUoc2VsZiwgbm9kZSk6CisgICAgICAgIHJldHVybiBbImlmICVzOiAlcyIgJSB0dXBsZShzZWxm
LnZpc2l0KGl0ZW0pWzBdIGZvciBpdGVtIGluIG5vZGUuY2hpbGRyZW4pXQorCisgICAgZGVmIHZp
c2l0X1N0cmluZ05vZGUoc2VsZiwgbm9kZSk6CisgICAgICAgIHJ2ID0gWyJcIiVzXCIiICUgZXNj
YXBlKG5vZGUuZGF0YSwgZXh0cmFzPSJcIiIpXQorICAgICAgICBmb3IgY2hpbGQgaW4gbm9kZS5j
aGlsZHJlbjoKKyAgICAgICAgICAgIHJ2WzBdICs9IHNlbGYudmlzaXQoY2hpbGQpWzBdCisgICAg
ICAgIHJldHVybiBydgorCisgICAgZGVmIHZpc2l0X051bWJlck5vZGUoc2VsZiwgbm9kZSk6Cisg
ICAgICAgIHJldHVybiBbc3RyKG5vZGUuZGF0YSldCisKKyAgICBkZWYgdmlzaXRfVmFyaWFibGVO
b2RlKHNlbGYsIG5vZGUpOgorICAgICAgICBydiA9IGVzY2FwZShub2RlLmRhdGEpCisgICAgICAg
IGZvciBjaGlsZCBpbiBub2RlLmNoaWxkcmVuOgorICAgICAgICAgICAgcnYgKz0gc2VsZi52aXNp
dChjaGlsZCkKKyAgICAgICAgcmV0dXJuIFtydl0KKworICAgIGRlZiB2aXNpdF9JbmRleE5vZGUo
c2VsZiwgbm9kZSk6CisgICAgICAgIGFzc2VydCBsZW4obm9kZS5jaGlsZHJlbikgPT0gMQorICAg
ICAgICByZXR1cm4gWyJbJXNdIiAlIHNlbGYudmlzaXQobm9kZS5jaGlsZHJlblswXSlbMF1dCisK
KyAgICBkZWYgdmlzaXRfVW5hcnlFeHByZXNzaW9uTm9kZShzZWxmLCBub2RlKToKKyAgICAgICAg
Y2hpbGRyZW4gPSBbXQorICAgICAgICBmb3IgY2hpbGQgaW4gbm9kZS5jaGlsZHJlbjoKKyAgICAg
ICAgICAgIGNoaWxkX3N0ciA9IHNlbGYudmlzaXQoY2hpbGQpWzBdCisgICAgICAgICAgICBpZiBp
c2luc3RhbmNlKGNoaWxkLCBCaW5hcnlFeHByZXNzaW9uTm9kZSk6CisgICAgICAgICAgICAgICAg
Y2hpbGRfc3RyID0gIiglcykiICUgY2hpbGRfc3RyCisgICAgICAgICAgICBjaGlsZHJlbi5hcHBl
bmQoY2hpbGRfc3RyKQorICAgICAgICByZXR1cm4gWyIgIi5qb2luKGNoaWxkcmVuKV0KKworICAg
IGRlZiB2aXNpdF9CaW5hcnlFeHByZXNzaW9uTm9kZShzZWxmLCBub2RlKToKKyAgICAgICAgYXNz
ZXJ0IGxlbihub2RlLmNoaWxkcmVuKSA9PSAzCisgICAgICAgIGNoaWxkcmVuID0gW10KKyAgICAg
ICAgZm9yIGNoaWxkX2luZGV4IGluIFsxLCAwLCAyXToKKyAgICAgICAgICAgIGNoaWxkID0gbm9k
ZS5jaGlsZHJlbltjaGlsZF9pbmRleF0KKyAgICAgICAgICAgIGNoaWxkX3N0ciA9IHNlbGYudmlz
aXQoY2hpbGQpWzBdCisgICAgICAgICAgICBpZiAoaXNpbnN0YW5jZShjaGlsZCwgQmluYXJ5RXhw
cmVzc2lvbk5vZGUpIGFuZAorICAgICAgICAgICAgICAgIHByZWNlZGVuY2Uobm9kZS5jaGlsZHJl
blswXSkgPCBwcmVjZWRlbmNlKGNoaWxkLmNoaWxkcmVuWzBdKSk6CisgICAgICAgICAgICAgICAg
Y2hpbGRfc3RyID0gIiglcykiICUgY2hpbGRfc3RyCisgICAgICAgICAgICBjaGlsZHJlbi5hcHBl
bmQoY2hpbGRfc3RyKQorICAgICAgICByZXR1cm4gWyIgIi5qb2luKGNoaWxkcmVuKV0KKworICAg
IGRlZiB2aXNpdF9VbmFyeU9wZXJhdG9yTm9kZShzZWxmLCBub2RlKToKKyAgICAgICAgcmV0dXJu
IFtzdHIobm9kZS5kYXRhKV0KKworICAgIGRlZiB2aXNpdF9CaW5hcnlPcGVyYXRvck5vZGUoc2Vs
Ziwgbm9kZSk6CisgICAgICAgIHJldHVybiBbc3RyKG5vZGUuZGF0YSldCisKKworZGVmIHNlcmlh
bGl6ZSh0cmVlLCAqYXJncywgKiprd2FyZ3MpOgorICAgIHMgPSBNYW5pZmVzdFNlcmlhbGl6ZXIo
KmFyZ3MsICoqa3dhcmdzKQorICAgIHJldHVybiBzLnNlcmlhbGl6ZSh0cmVlKQpkaWZmIC0tZ2l0
IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIv
d3B0bWFuaWZlc3QvdGVzdHMvX19pbml0X18ucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93
M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci93cHRtYW5pZmVzdC90ZXN0cy9fX2luaXRfXy5w
eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZTY5ZGUyOWJiMmQKZGlm
ZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0
cnVubmVyL3dwdG1hbmlmZXN0L3Rlc3RzL3Rlc3RfY29uZGl0aW9uYWwucHkgYi9XZWJEcml2ZXJU
ZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci93cHRtYW5pZmVzdC90
ZXN0cy90ZXN0X2NvbmRpdGlvbmFsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi5kOWZmZGYyNTUwNwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2lt
cG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3dwdG1hbmlmZXN0L3Rlc3RzL3Rl
c3RfY29uZGl0aW9uYWwucHkKQEAgLTAsMCArMSwxNDMgQEAKK2ltcG9ydCB1bml0dGVzdAorCitm
cm9tIGNTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KKworZnJvbSAuLmJhY2tlbmRzIGltcG9ydCBj
b25kaXRpb25hbAorZnJvbSAuLm5vZGUgaW1wb3J0IEJpbmFyeUV4cHJlc3Npb25Ob2RlLCBCaW5h
cnlPcGVyYXRvck5vZGUsIFZhcmlhYmxlTm9kZSwgTnVtYmVyTm9kZQorCisKK2NsYXNzIFRlc3RD
b25kaXRpb25hbCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIGNvbXBpbGUoc2VsZiwgaW5w
dXRfdGV4dCk6CisgICAgICAgIHJldHVybiBjb25kaXRpb25hbC5jb21waWxlKGlucHV0X3RleHQp
CisKKyAgICBkZWYgdGVzdF9nZXRfMChzZWxmKToKKyAgICAgICAgZGF0YSA9ICIiIgora2V5OiB2
YWx1ZQorCitbSGVhZGluZyAxXQorICBvdGhlcl9rZXk6CisgICAgaWYgYSA9PSAxOiB2YWx1ZV8x
CisgICAgaWYgYSA9PSAyOiB2YWx1ZV8yCisgICAgdmFsdWVfMworIiIiCisKKyAgICAgICAgbWFu
aWZlc3QgPSBzZWxmLmNvbXBpbGUoZGF0YSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFscyht
YW5pZmVzdC5nZXQoImtleSIpLCAidmFsdWUiKQorICAgICAgICBjaGlsZHJlbiA9IGxpc3QoaXRl
bSBmb3IgaXRlbSBpbiBtYW5pZmVzdC5pdGVyY2hpbGRyZW4oKSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbHMobGVuKGNoaWxkcmVuKSwgMSkKKyAgICAgICAgc2VjdGlvbiA9IGNoaWxkcmVuWzBd
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlY3Rpb24ubmFtZSwgIkhlYWRpbmcgMSIpCisK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VjdGlvbi5nZXQoIm90aGVyX2tleSIsIHsiYSI6
IDF9KSwgInZhbHVlXzEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWN0aW9uLmdldCgi
b3RoZXJfa2V5IiwgeyJhIjogMn0pLCAidmFsdWVfMiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWxzKHNlY3Rpb24uZ2V0KCJvdGhlcl9rZXkiLCB7ImEiOiA3fSksICJ2YWx1ZV8zIikKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VjdGlvbi5nZXQoImtleSIpLCAidmFsdWUiKQorCisgICAg
ZGVmIHRlc3RfZ2V0XzEoc2VsZik6CisgICAgICAgIGRhdGEgPSAiIiIKK2tleTogdmFsdWUKKwor
W0hlYWRpbmcgMV0KKyAgb3RoZXJfa2V5OgorICAgIGlmIGEgPT0gIjEiOiB2YWx1ZV8xCisgICAg
aWYgYSA9PSAyOiB2YWx1ZV8yCisgICAgdmFsdWVfMworIiIiCisKKyAgICAgICAgbWFuaWZlc3Qg
PSBzZWxmLmNvbXBpbGUoZGF0YSkKKworICAgICAgICBjaGlsZHJlbiA9IGxpc3QoaXRlbSBmb3Ig
aXRlbSBpbiBtYW5pZmVzdC5pdGVyY2hpbGRyZW4oKSkKKyAgICAgICAgc2VjdGlvbiA9IGNoaWxk
cmVuWzBdCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VjdGlvbi5nZXQoIm90aGVyX2tl
eSIsIHsiYSI6ICIxIn0pLCAidmFsdWVfMSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNl
Y3Rpb24uZ2V0KCJvdGhlcl9rZXkiLCB7ImEiOiAxfSksICJ2YWx1ZV8zIikKKworICAgIGRlZiB0
ZXN0X2dldF8yKHNlbGYpOgorICAgICAgICBkYXRhID0gIiIiCitrZXk6CisgIGlmIGFbMV0gPT0g
ImIiOiB2YWx1ZV8xCisgIGlmIGFbMV0gPT0gMjogdmFsdWVfMgorICB2YWx1ZV8zCisiIiIKKwor
ICAgICAgICBtYW5pZmVzdCA9IHNlbGYuY29tcGlsZShkYXRhKQorCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKG1hbmlmZXN0LmdldCgia2V5IiwgeyJhIjogImFiIn0pLCAidmFsdWVfMSIpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1hbmlmZXN0LmdldCgia2V5IiwgeyJhIjogWzEsIDJd
fSksICJ2YWx1ZV8yIikKKworICAgIGRlZiB0ZXN0X2dldF8zKHNlbGYpOgorICAgICAgICBkYXRh
ID0gIiIiCitrZXk6CisgIGlmIGFbMV0gPT0gImFiIlsxXTogdmFsdWVfMQorICBpZiBhWzFdID09
IDI6IHZhbHVlXzIKKyAgdmFsdWVfMworIiIiCisKKyAgICAgICAgbWFuaWZlc3QgPSBzZWxmLmNv
bXBpbGUoZGF0YSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtYW5pZmVzdC5nZXQoImtl
eSIsIHsiYSI6ICJhYiJ9KSwgInZhbHVlXzEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyht
YW5pZmVzdC5nZXQoImtleSIsIHsiYSI6IFsxLCAyXX0pLCAidmFsdWVfMiIpCisKKyAgICBkZWYg
dGVzdF9zZXRfMChzZWxmKToKKyAgICAgICAgZGF0YSA9ICIiIgora2V5OgorICBpZiBhID09ICJh
IjogdmFsdWVfMQorICBpZiBhID09ICJiIjogdmFsdWVfMgorICB2YWx1ZV8zCisiIiIKKyAgICAg
ICAgbWFuaWZlc3QgPSBzZWxmLmNvbXBpbGUoZGF0YSkKKworICAgICAgICBtYW5pZmVzdC5zZXQo
Im5ld19rZXkiLCAidmFsdWVfbmV3IikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtYW5p
ZmVzdC5nZXQoIm5ld19rZXkiKSwgInZhbHVlX25ldyIpCisKKyAgICBkZWYgdGVzdF9zZXRfMShz
ZWxmKToKKyAgICAgICAgZGF0YSA9ICIiIgora2V5OgorICBpZiBhID09ICJhIjogdmFsdWVfMQor
ICBpZiBhID09ICJiIjogdmFsdWVfMgorICB2YWx1ZV8zCisiIiIKKworICAgICAgICBtYW5pZmVz
dCA9IHNlbGYuY29tcGlsZShkYXRhKQorCisgICAgICAgIG1hbmlmZXN0LnNldCgia2V5IiwgInZh
bHVlX25ldyIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWFuaWZlc3QuZ2V0KCJrZXki
KSwgInZhbHVlX25ldyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1hbmlmZXN0LmdldCgi
a2V5IiwgeyJhIjogImEifSksICJ2YWx1ZV8xIikKKworICAgIGRlZiB0ZXN0X3NldF8yKHNlbGYp
OgorICAgICAgICBkYXRhID0gIiIiCitrZXk6CisgIGlmIGEgPT0gImEiOiB2YWx1ZV8xCisgIGlm
IGEgPT0gImIiOiB2YWx1ZV8yCisgIHZhbHVlXzMKKyIiIgorCisgICAgICAgIG1hbmlmZXN0ID0g
c2VsZi5jb21waWxlKGRhdGEpCisKKyAgICAgICAgZXhwciA9IEJpbmFyeUV4cHJlc3Npb25Ob2Rl
KEJpbmFyeU9wZXJhdG9yTm9kZSgiPT0iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFZhcmlhYmxlTm9kZSgiYSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTnVtYmVyTm9kZSgiMSIpKQorCisgICAgICAgIG1hbmlmZXN0LnNldCgia2V5IiwgInZh
bHVlX25ldyIsIGV4cHIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWFuaWZlc3QuZ2V0
KCJrZXkiLCB7ImEiOiAxfSksICJ2YWx1ZV9uZXciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
cyhtYW5pZmVzdC5nZXQoImtleSIsIHsiYSI6ICJhIn0pLCAidmFsdWVfMSIpCisKKyAgICBkZWYg
dGVzdF9hcGlfMChzZWxmKToKKyAgICAgICAgZGF0YSA9ICIiIgora2V5OgorICBpZiBhID09IDEu
NTogdmFsdWVfMQorICB2YWx1ZV8yCitrZXlfMTogb3RoZXJfdmFsdWUKKyIiIgorICAgICAgICBt
YW5pZmVzdCA9IHNlbGYuY29tcGlsZShkYXRhKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uo
bWFuaWZlc3QuaXNfZW1wdHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1hbmlmZXN0LnJv
b3QsIG1hbmlmZXN0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWFuaWZlc3QuaGFzX2tleSgi
a2V5XzEiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtYW5pZmVzdC5oYXNfa2V5KCJrZXlf
MiIpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNldChtYW5pZmVzdC5pdGVya2V5cygp
KSwgc2V0KFsia2V5IiwgImtleV8xIl0pKQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1w
b3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvd3B0bWFuaWZlc3QvdGVzdHMvdGVz
dF9wYXJzZXIucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVy
L3dwdHJ1bm5lci93cHRtYW5pZmVzdC90ZXN0cy90ZXN0X3BhcnNlci5weQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNzY1Yzk4NGY0MmYKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci93
cHRtYW5pZmVzdC90ZXN0cy90ZXN0X3BhcnNlci5weQpAQCAtMCwwICsxLDc1IEBACitpbXBvcnQg
dW5pdHRlc3QKKworZnJvbSBjU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCisKK2Zyb20gLi4gaW1w
b3J0IHBhcnNlcgorCisjIFRoZXJlIGFyZW4ndCBtYW55IHRlc3RzIGhlcmUgYmVjYXVzZSBpdCB0
dXJucyBvdXQgdG8gYmUgd2F5IG1vcmUgY29udmVuaWVudCB0bworIyB1c2UgdGVzdF9zZXJpYWxp
emVyIGZvciB0aGUgbWFqb3JpdHkgb2YgY2FzZXMKKworCitjbGFzcyBUZXN0RXhwcmVzc2lvbih1
bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnBh
cnNlciA9IHBhcnNlci5QYXJzZXIoKQorCisgICAgZGVmIHBhcnNlKHNlbGYsIGlucHV0X3N0cik6
CisgICAgICAgIHJldHVybiBzZWxmLnBhcnNlci5wYXJzZShTdHJpbmdJTyhpbnB1dF9zdHIpKQor
CisgICAgZGVmIGNvbXBhcmUoc2VsZiwgaW5wdXRfdGV4dCwgZXhwZWN0ZWQpOgorICAgICAgICBh
Y3R1YWwgPSBzZWxmLnBhcnNlKGlucHV0X3RleHQpCisgICAgICAgIHNlbGYubWF0Y2goZXhwZWN0
ZWQsIGFjdHVhbCkKKworICAgIGRlZiBtYXRjaChzZWxmLCBleHBlY3RlZF9ub2RlLCBhY3R1YWxf
bm9kZSk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGV4cGVjdGVkX25vZGVbMF0sIGFjdHVh
bF9ub2RlLl9fY2xhc3NfXy5fX25hbWVfXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXhw
ZWN0ZWRfbm9kZVsxXSwgYWN0dWFsX25vZGUuZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bHMobGVuKGV4cGVjdGVkX25vZGVbMl0pLCBsZW4oYWN0dWFsX25vZGUuY2hpbGRyZW4pKQorICAg
ICAgICBmb3IgZXhwZWN0ZWRfY2hpbGQsIGFjdHVhbF9jaGlsZCBpbiB6aXAoZXhwZWN0ZWRfbm9k
ZVsyXSwgYWN0dWFsX25vZGUuY2hpbGRyZW4pOgorICAgICAgICAgICAgc2VsZi5tYXRjaChleHBl
Y3RlZF9jaGlsZCwgYWN0dWFsX2NoaWxkKQorCisgICAgZGVmIHRlc3RfZXhwcl8wKHNlbGYpOgor
ICAgICAgICBzZWxmLmNvbXBhcmUoCisgICAgICAgICAgICAiIiIKK2tleToKKyAgaWYgeCA9PSAx
IDogdmFsdWUiIiIsCisgICAgICAgICAgICBbIkRhdGFOb2RlIiwgTm9uZSwKKyAgICAgICAgICAg
ICBbWyJLZXlWYWx1ZU5vZGUiLCAia2V5IiwKKyAgICAgICAgICAgICAgIFtbIkNvbmRpdGlvbmFs
Tm9kZSIsIE5vbmUsCisgICAgICAgICAgICAgICAgIFtbIkJpbmFyeUV4cHJlc3Npb25Ob2RlIiwg
Tm9uZSwKKyAgICAgICAgICAgICAgICAgICBbWyJCaW5hcnlPcGVyYXRvck5vZGUiLCAiPT0iLCBb
XV0sCisgICAgICAgICAgICAgICAgICAgIFsiVmFyaWFibGVOb2RlIiwgIngiLCBbXV0sCisgICAg
ICAgICAgICAgICAgICAgICAgIFsiTnVtYmVyTm9kZSIsICIxIiwgW11dCisgICAgICAgICAgICAg
ICAgICAgIF1dLAorICAgICAgICAgICAgICAgICAgICAgWyJWYWx1ZU5vZGUiLCAidmFsdWUiLCBb
XV0sCisgICAgICAgICAgICAgICAgICBdXV1dXV0KKyAgICAgICAgKQorCisgICAgZGVmIHRlc3Rf
ZXhwcl8xKHNlbGYpOgorICAgICAgICBzZWxmLmNvbXBhcmUoCisgICAgICAgICAgICAiIiIKK2tl
eToKKyAgaWYgbm90IHggYW5kIHkgOiB2YWx1ZSIiIiwKKyAgICAgICAgICAgIFsiRGF0YU5vZGUi
LCBOb25lLAorICAgICAgICAgICAgIFtbIktleVZhbHVlTm9kZSIsICJrZXkiLAorICAgICAgICAg
ICAgICAgW1siQ29uZGl0aW9uYWxOb2RlIiwgTm9uZSwKKyAgICAgICAgICAgICAgICAgW1siQmlu
YXJ5RXhwcmVzc2lvbk5vZGUiLCBOb25lLAorICAgICAgICAgICAgICAgICAgIFtbIkJpbmFyeU9w
ZXJhdG9yTm9kZSIsICJhbmQiLCBbXV0sCisgICAgICAgICAgICAgICAgICAgIFsiVW5hcnlFeHBy
ZXNzaW9uTm9kZSIsIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgIFtbIlVuYXJ5T3BlcmF0
b3JOb2RlIiwgIm5vdCIsIFtdXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsiVmFyaWFibGVO
b2RlIiwgIngiLCBbXV0KKyAgICAgICAgICAgICAgICAgICAgICAgIF1dLAorICAgICAgICAgICAg
ICAgICAgICAgICBbIlZhcmlhYmxlTm9kZSIsICJ5IiwgW11dCisgICAgICAgICAgICAgICAgICAg
IF1dLAorICAgICAgICAgICAgICAgICAgICAgWyJWYWx1ZU5vZGUiLCAidmFsdWUiLCBbXV0sCisg
ICAgICAgICAgICAgICAgICBdXV1dXV0KKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfYXRvbV8w
KHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHBhcnNlci5QYXJzZUVycm9y
KToKKyAgICAgICAgICAgIHNlbGYucGFyc2UoImtleTogQFVua25vd24iKQorCisgICAgZGVmIHRl
c3RfYXRvbV8xKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHBhcnNlci5Q
YXJzZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYucGFyc2UoImtleTogQHRydWUiKQorCitpZiBf
X25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEv
V2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvd3B0
bWFuaWZlc3QvdGVzdHMvdGVzdF9zZXJpYWxpemVyLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0
ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvd3B0bWFuaWZlc3QvdGVzdHMvdGVzdF9z
ZXJpYWxpemVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42ZGIy
Y2JiYmI0NwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90
b29scy93cHRydW5uZXIvd3B0cnVubmVyL3dwdG1hbmlmZXN0L3Rlc3RzL3Rlc3Rfc2VyaWFsaXpl
ci5weQpAQCAtMCwwICsxLDIyNyBAQAoraW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0CisKK2Zy
b20gY1N0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworCitpbXBvcnQgcHl0ZXN0CisKK2Zyb20gLi4g
aW1wb3J0IHBhcnNlciwgc2VyaWFsaXplcgorCisKK2NsYXNzIFRva2VuaXplclRlc3QodW5pdHRl
c3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXJpYWxp
emVyID0gc2VyaWFsaXplci5NYW5pZmVzdFNlcmlhbGl6ZXIoKQorICAgICAgICBzZWxmLnBhcnNl
ciA9IHBhcnNlci5QYXJzZXIoKQorCisgICAgZGVmIHNlcmlhbGl6ZShzZWxmLCBpbnB1dF9zdHIp
OgorICAgICAgICByZXR1cm4gc2VsZi5zZXJpYWxpemVyLnNlcmlhbGl6ZShzZWxmLnBhcnNlci5w
YXJzZShpbnB1dF9zdHIpKQorCisgICAgZGVmIGNvbXBhcmUoc2VsZiwgaW5wdXRfc3RyLCBleHBl
Y3RlZD1Ob25lKToKKyAgICAgICAgaWYgZXhwZWN0ZWQgaXMgTm9uZToKKyAgICAgICAgICAgIGV4
cGVjdGVkID0gaW5wdXRfc3RyCisgICAgICAgIGV4cGVjdGVkID0gZXhwZWN0ZWQuZW5jb2RlKCJ1
dGY4IikKKyAgICAgICAgYWN0dWFsID0gc2VsZi5zZXJpYWxpemUoaW5wdXRfc3RyKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFscyhhY3R1YWwsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfMChz
ZWxmKToKKyAgICAgICAgc2VsZi5jb21wYXJlKCIiImtleTogdmFsdWUKK1tIZWFkaW5nIDFdCisg
IG90aGVyX2tleTogb3RoZXJfdmFsdWUKKyIiIikKKworICAgIGRlZiB0ZXN0XzEoc2VsZik6Cisg
ICAgICAgIHNlbGYuY29tcGFyZSgiIiJrZXk6IHZhbHVlCitbSGVhZGluZyAxXQorICBvdGhlcl9r
ZXk6CisgICAgaWYgYSBvciBiOiBvdGhlcl92YWx1ZQorIiIiKQorCisgICAgZGVmIHRlc3RfMihz
ZWxmKToKKyAgICAgICAgc2VsZi5jb21wYXJlKCIiImtleTogdmFsdWUKK1tIZWFkaW5nIDFdCisg
IG90aGVyX2tleToKKyAgICBpZiBhIG9yIGI6IG90aGVyX3ZhbHVlCisgICAgZmFsbGJhY2tfdmFs
dWUKKyIiIikKKworICAgIGRlZiB0ZXN0XzMoc2VsZik6CisgICAgICAgIHNlbGYuY29tcGFyZSgi
IiJrZXk6IHZhbHVlCitbSGVhZGluZyAxXQorICBvdGhlcl9rZXk6CisgICAgaWYgYSA9PSAxOiBv
dGhlcl92YWx1ZQorICAgIGZhbGxiYWNrX3ZhbHVlCisiIiIpCisKKyAgICBkZWYgdGVzdF80KHNl
bGYpOgorICAgICAgICBzZWxmLmNvbXBhcmUoIiIia2V5OiB2YWx1ZQorW0hlYWRpbmcgMV0KKyAg
b3RoZXJfa2V5OgorICAgIGlmIGEgPT0gIjEiOiBvdGhlcl92YWx1ZQorICAgIGZhbGxiYWNrX3Zh
bHVlCisiIiIpCisKKyAgICBkZWYgdGVzdF81KHNlbGYpOgorICAgICAgICBzZWxmLmNvbXBhcmUo
IiIia2V5OiB2YWx1ZQorW0hlYWRpbmcgMV0KKyAgb3RoZXJfa2V5OgorICAgIGlmIGEgPT0gImFi
YyJbMV06IG90aGVyX3ZhbHVlCisgICAgZmFsbGJhY2tfdmFsdWUKKyIiIikKKworICAgIGRlZiB0
ZXN0XzYoc2VsZik6CisgICAgICAgIHNlbGYuY29tcGFyZSgiIiJrZXk6IHZhbHVlCitbSGVhZGlu
ZyAxXQorICBvdGhlcl9rZXk6CisgICAgaWYgYSA9PSAiYWJjIltjXTogb3RoZXJfdmFsdWUKKyAg
ICBmYWxsYmFja192YWx1ZQorIiIiKQorCisgICAgZGVmIHRlc3RfNyhzZWxmKToKKyAgICAgICAg
c2VsZi5jb21wYXJlKCIiImtleTogdmFsdWUKK1tIZWFkaW5nIDFdCisgIG90aGVyX2tleToKKyAg
ICBpZiAoYSBvciBiKSBhbmQgYzogb3RoZXJfdmFsdWUKKyAgICBmYWxsYmFja192YWx1ZQorIiIi
LAorIiIia2V5OiB2YWx1ZQorW0hlYWRpbmcgMV0KKyAgb3RoZXJfa2V5OgorICAgIGlmIGEgb3Ig
YiBhbmQgYzogb3RoZXJfdmFsdWUKKyAgICBmYWxsYmFja192YWx1ZQorIiIiKQorCisgICAgZGVm
IHRlc3RfOChzZWxmKToKKyAgICAgICAgc2VsZi5jb21wYXJlKCIiImtleTogdmFsdWUKK1tIZWFk
aW5nIDFdCisgIG90aGVyX2tleToKKyAgICBpZiBhIG9yIChiIGFuZCBjKTogb3RoZXJfdmFsdWUK
KyAgICBmYWxsYmFja192YWx1ZQorIiIiKQorCisgICAgZGVmIHRlc3RfOShzZWxmKToKKyAgICAg
ICAgc2VsZi5jb21wYXJlKCIiImtleTogdmFsdWUKK1tIZWFkaW5nIDFdCisgIG90aGVyX2tleToK
KyAgICBpZiBub3QgKGEgYW5kIGIpOiBvdGhlcl92YWx1ZQorICAgIGZhbGxiYWNrX3ZhbHVlCisi
IiIpCisKKyAgICBkZWYgdGVzdF8xMChzZWxmKToKKyAgICAgICAgc2VsZi5jb21wYXJlKCIiImtl
eTogdmFsdWUKK1tIZWFkaW5nIDFdCisgIHNvbWVfa2V5OiBzb21lX3ZhbHVlCisKK1tIZWFkaW5n
IDJdCisgIG90aGVyX2tleTogb3RoZXJfdmFsdWUKKyIiIikKKworICAgIGRlZiB0ZXN0XzExKHNl
bGYpOgorICAgICAgICBzZWxmLmNvbXBhcmUoIiIia2V5OgorICBpZiBub3QgYSBhbmQgYiBhbmQg
YyBhbmQgZDogdHJ1ZQorIiIiKQorCisgICAgZGVmIHRlc3RfMTIoc2VsZik6CisgICAgICAgIHNl
bGYuY29tcGFyZSgiIiJbSGVhZGluZyAxXQorICBrZXk6IFthOjEsIGI6Ml0KKyIiIikKKworICAg
IGRlZiB0ZXN0XzEzKHNlbGYpOgorICAgICAgICBzZWxmLmNvbXBhcmUoIiIia2V5OiBbYToxLCAi
YjojIl0KKyIiIikKKworICAgIGRlZiB0ZXN0XzE0KHNlbGYpOgorICAgICAgICBzZWxmLmNvbXBh
cmUoIiIia2V5OiBbIiwiXQorIiIiKQorCisgICAgZGVmIHRlc3RfMTUoc2VsZik6CisgICAgICAg
IHNlbGYuY29tcGFyZSgiIiJrZXk6ICwKKyIiIikKKworICAgIGRlZiB0ZXN0XzE2KHNlbGYpOgor
ICAgICAgICBzZWxmLmNvbXBhcmUoIiIia2V5OiBbIl0iLCBiXQorIiIiKQorCisgICAgZGVmIHRl
c3RfMTcoc2VsZik6CisgICAgICAgIHNlbGYuY29tcGFyZSgiIiJrZXk6IF0KKyIiIikKKworICAg
IGRlZiB0ZXN0XzE4KHNlbGYpOgorICAgICAgICBzZWxmLmNvbXBhcmUoIiIia2V5OiBcXQorICAg
ICAgICAiIiIsICIiImtleTogXQorIiIiKQorCisgICAgZGVmIHRlc3RfZXNjYXBlXzAoc2VsZik6
CisgICAgICAgIHNlbGYuY29tcGFyZShyIiIia1x0XDp5OiBcYVxiXGZcblxyXHRcdiIiIiwKKyAg
ICAgICAgICAgICAgICAgICAgIHIiIiJrXHRcOnk6IFx4MDdceDA4XHgwY1xuXHJcdFx4MGIKKyIi
IikKKworICAgIGRlZiB0ZXN0X2VzY2FwZV8xKHNlbGYpOgorICAgICAgICBzZWxmLmNvbXBhcmUo
ciIiImtceDAwOiBceDEyQVx4NDUiIiIsCisgICAgICAgICAgICAgICAgICAgICByIiIia1x4MDA6
IFx4MTJBRQorIiIiKQorCisgICAgZGVmIHRlc3RfZXNjYXBlXzIoc2VsZik6CisgICAgICAgIHNl
bGYuY29tcGFyZShyIiIia1x1MDA0NXk6IFx1MTIzNEFcdUFCYzYiIiIsCisgICAgICAgICAgICAg
ICAgICAgICB1IiIia0V5OiBcdTEyMzRBXHVhYmM2CisiIiIpCisKKyAgICBkZWYgdGVzdF9lc2Nh
cGVfMyhzZWxmKToKKyAgICAgICAgc2VsZi5jb21wYXJlKHIiIiJrXHUwMDQ1eTogXHUxMjM0QVx1
QUJjNiIiIiwKKyAgICAgICAgICAgICAgICAgICAgIHUiIiJrRXk6IFx1MTIzNEFcdWFiYzYKKyIi
IikKKworICAgIGRlZiB0ZXN0X2VzY2FwZV80KHNlbGYpOgorICAgICAgICBzZWxmLmNvbXBhcmUo
ciIiImtleTogJ1x1MTIzNEFcdUFCYzYnIiIiLAorICAgICAgICAgICAgICAgICAgICAgdSIiImtl
eTogXHUxMjM0QVx1YWJjNgorIiIiKQorCisgICAgZGVmIHRlc3RfZXNjYXBlXzUoc2VsZik6Cisg
ICAgICAgIHNlbGYuY29tcGFyZShyIiIia2V5OiBbXHUxMjM0QVx1QUJjNl0iIiIsCisgICAgICAg
ICAgICAgICAgICAgICB1IiIia2V5OiBbXHUxMjM0QVx1YWJjNl0KKyIiIikKKworICAgIGRlZiB0
ZXN0X2VzY2FwZV82KHNlbGYpOgorICAgICAgICBzZWxmLmNvbXBhcmUociIiImtleTogW1x1MTIz
NEFcdUFCYzZcLF0iIiIsCisgICAgICAgICAgICAgICAgICAgICB1IiIia2V5OiBbIlx1MTIzNEFc
dWFiYzYsIl0KKyIiIikKKworICAgIGRlZiB0ZXN0X2VzY2FwZV83KHNlbGYpOgorICAgICAgICBz
ZWxmLmNvbXBhcmUociIiImtleTogW1wsXF1cI10iIiIsCisgICAgICAgICAgICAgICAgICAgICBy
IiIia2V5OiBbIixdIyJdCisiIiIpCisKKyAgICBkZWYgdGVzdF9lc2NhcGVfOChzZWxmKToKKyAg
ICAgICAgc2VsZi5jb21wYXJlKHIiIiJrZXk6IFwjIiIiLAorICAgICAgICAgICAgICAgICAgICAg
ciIiImtleTogIiMiCisiIiIpCisKKyAgICBAcHl0ZXN0Lm1hcmsueGZhaWwoc3lzLm1heHVuaWNv
ZGUgPT0gMHhGRkZGLCByZWFzb249Im5hcnJvdyB1bmljb2RlIikKKyAgICBkZWYgdGVzdF9lc2Nh
cGVfOShzZWxmKToKKyAgICAgICAgc2VsZi5jb21wYXJlKHIiIiJrZXk6IFxVMTBGRkZGYWJjIiIi
LAorICAgICAgICAgICAgICAgICAgICAgdSIiImtleTogXFUwMDEwRkZGRmFiYworIiIiKQorCisg
ICAgZGVmIHRlc3RfZXNjYXBlXzEwKHNlbGYpOgorICAgICAgICBzZWxmLmNvbXBhcmUociIiImtl
eTogXHUxMEZGYWIiIiIsCisgICAgICAgICAgICAgICAgICAgICB1IiIia2V5OiBcdTEwRkZhYgor
IiIiKQorCisgICAgZGVmIHRlc3RfZXNjYXBlXzExKHNlbGYpOgorICAgICAgICBzZWxmLmNvbXBh
cmUociIiImtleTogXFxhYgorIiIiKQorCisgICAgZGVmIHRlc3RfYXRvbV8xKHNlbGYpOgorICAg
ICAgICAgICAgc2VsZi5jb21wYXJlKHIiIiJrZXk6IEBUcnVlCisiIiIpCisKKyAgICBkZWYgdGVz
dF9hdG9tXzIoc2VsZik6CisgICAgICAgICAgICBzZWxmLmNvbXBhcmUociIiImtleTogQEZhbHNl
CisiIiIpCisKKyAgICBkZWYgdGVzdF9hdG9tXzMoc2VsZik6CisgICAgICAgICAgICBzZWxmLmNv
bXBhcmUociIiImtleTogQFJlc2V0CisiIiIpCisKKyAgICBkZWYgdGVzdF9hdG9tXzQoc2VsZik6
CisgICAgICAgIHNlbGYuY29tcGFyZShyIiIia2V5OiBbYSwgQFJlc2V0LCBiXQorIiIiKQpkaWZm
IC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3dwdHJ1bm5lci93cHRy
dW5uZXIvd3B0bWFuaWZlc3QvdGVzdHMvdGVzdF9zdGF0aWMucHkgYi9XZWJEcml2ZXJUZXN0cy9p
bXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci93cHRtYW5pZmVzdC90ZXN0cy90
ZXN0X3N0YXRpYy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZWQy
ODU3OGQzYmYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mv
dG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci93cHRtYW5pZmVzdC90ZXN0cy90ZXN0X3N0YXRpYy5w
eQpAQCAtMCwwICsxLDk4IEBACitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBjU3RyaW5nSU8gaW1w
b3J0IFN0cmluZ0lPCisKK2Zyb20gLi5iYWNrZW5kcyBpbXBvcnQgc3RhdGljCisKKyMgVGhlcmUg
YXJlbid0IG1hbnkgdGVzdHMgaGVyZSBiZWNhdXNlIGl0IHR1cm5zIG91dCB0byBiZSB3YXkgbW9y
ZSBjb252ZW5pZW50IHRvCisjIHVzZSB0ZXN0X3NlcmlhbGl6ZXIgZm9yIHRoZSBtYWpvcml0eSBv
ZiBjYXNlcworCisKK2NsYXNzIFRlc3RTdGF0aWModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRl
ZiBjb21waWxlKHNlbGYsIGlucHV0X3RleHQsIGlucHV0X2RhdGEpOgorICAgICAgICByZXR1cm4g
c3RhdGljLmNvbXBpbGUoaW5wdXRfdGV4dCwgaW5wdXRfZGF0YSkKKworICAgIGRlZiB0ZXN0X2dl
dF8wKHNlbGYpOgorICAgICAgICBkYXRhID0gIiIiCitrZXk6IHZhbHVlCisKK1tIZWFkaW5nIDFd
CisgIG90aGVyX2tleToKKyAgICBpZiBhID09IDE6IHZhbHVlXzEKKyAgICBpZiBhID09IDI6IHZh
bHVlXzIKKyAgICB2YWx1ZV8zCisiIiIKKworICAgICAgICBtYW5pZmVzdCA9IHNlbGYuY29tcGls
ZShkYXRhLCB7ImEiOiAyfSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtYW5pZmVzdC5n
ZXQoImtleSIpLCAidmFsdWUiKQorICAgICAgICBjaGlsZHJlbiA9IGxpc3QoaXRlbSBmb3IgaXRl
bSBpbiBtYW5pZmVzdC5pdGVyY2hpbGRyZW4oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMo
bGVuKGNoaWxkcmVuKSwgMSkKKyAgICAgICAgc2VjdGlvbiA9IGNoaWxkcmVuWzBdCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWxzKHNlY3Rpb24ubmFtZSwgIkhlYWRpbmcgMSIpCisKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbHMoc2VjdGlvbi5nZXQoIm90aGVyX2tleSIpLCAidmFsdWVfMiIpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlY3Rpb24uZ2V0KCJrZXkiKSwgInZhbHVlIikKKwor
ICAgIGRlZiB0ZXN0X2dldF8xKHNlbGYpOgorICAgICAgICBkYXRhID0gIiIiCitrZXk6IHZhbHVl
CisKK1tIZWFkaW5nIDFdCisgIG90aGVyX2tleToKKyAgICBpZiBhID09IDE6IHZhbHVlXzEKKyAg
ICBpZiBhID09IDI6IHZhbHVlXzIKKyAgICB2YWx1ZV8zCisiIiIKKyAgICAgICAgbWFuaWZlc3Qg
PSBzZWxmLmNvbXBpbGUoZGF0YSwgeyJhIjogM30pCisKKyAgICAgICAgY2hpbGRyZW4gPSBsaXN0
KGl0ZW0gZm9yIGl0ZW0gaW4gbWFuaWZlc3QuaXRlcmNoaWxkcmVuKCkpCisgICAgICAgIHNlY3Rp
b24gPSBjaGlsZHJlblswXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWN0aW9uLmdldCgi
b3RoZXJfa2V5IiksICJ2YWx1ZV8zIikKKworICAgIGRlZiB0ZXN0X2dldF8zKHNlbGYpOgorICAg
ICAgICBkYXRhID0gIiIia2V5OgorICBpZiBhID09ICIxIjogdmFsdWVfMQorICBpZiBhWzBdID09
ICJhYiJbMF06IHZhbHVlXzIKKyIiIgorICAgICAgICBtYW5pZmVzdCA9IHNlbGYuY29tcGlsZShk
YXRhLCB7ImEiOiAiMSJ9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtYW5pZmVzdC5nZXQo
ImtleSIpLCAidmFsdWVfMSIpCisKKyAgICAgICAgbWFuaWZlc3QgPSBzZWxmLmNvbXBpbGUoZGF0
YSwgeyJhIjogImFjIn0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1hbmlmZXN0LmdldCgi
a2V5IiksICJ2YWx1ZV8yIikKKworICAgIGRlZiB0ZXN0X2dldF80KHNlbGYpOgorICAgICAgICBk
YXRhID0gIiIia2V5OgorICBpZiBub3QgYTogdmFsdWVfMQorICB2YWx1ZV8yCisiIiIKKyAgICAg
ICAgbWFuaWZlc3QgPSBzZWxmLmNvbXBpbGUoZGF0YSwgeyJhIjogVHJ1ZX0pCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWxzKG1hbmlmZXN0LmdldCgia2V5IiksICJ2YWx1ZV8yIikKKworICAgICAg
ICBtYW5pZmVzdCA9IHNlbGYuY29tcGlsZShkYXRhLCB7ImEiOiBGYWxzZX0pCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWxzKG1hbmlmZXN0LmdldCgia2V5IiksICJ2YWx1ZV8xIikKKworICAgIGRl
ZiB0ZXN0X2FwaShzZWxmKToKKyAgICAgICAgZGF0YSA9ICIiImtleToKKyAgaWYgYSA9PSAxLjU6
IHZhbHVlXzEKKyAgdmFsdWVfMgora2V5XzE6IG90aGVyX3ZhbHVlCisiIiIKKyAgICAgICAgbWFu
aWZlc3QgPSBzZWxmLmNvbXBpbGUoZGF0YSwgeyJhIjogMS41fSkKKworICAgICAgICBzZWxmLmFz
c2VydEZhbHNlKG1hbmlmZXN0LmlzX2VtcHR5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyht
YW5pZmVzdC5yb290LCBtYW5pZmVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hbmlmZXN0
Lmhhc19rZXkoImtleV8xIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWFuaWZlc3QuaGFz
X2tleSgia2V5XzIiKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZXQobWFuaWZlc3Qu
aXRlcmtleXMoKSksIHNldChbImtleSIsICJrZXlfMSJdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbHMoc2V0KG1hbmlmZXN0Lml0ZXJ2YWx1ZXMoKSksIHNldChbInZhbHVlXzEiLCAib3RoZXJf
dmFsdWUiXSkpCisKKyAgICBkZWYgdGVzdF9pc19lbXB0eV8xKHNlbGYpOgorICAgICAgICBkYXRh
ID0gIiIiCitbU2VjdGlvbl0KKyAgW1N1YnNlY3Rpb25dCisiIiIKKyAgICAgICAgbWFuaWZlc3Qg
PSBzZWxmLmNvbXBpbGUoZGF0YSwge30pCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hbmlm
ZXN0LmlzX2VtcHR5KQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rv
b2xzL3dwdHJ1bm5lci93cHRydW5uZXIvd3B0bWFuaWZlc3QvdGVzdHMvdGVzdF90b2tlbml6ZXIu
cHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5l
ci93cHRtYW5pZmVzdC90ZXN0cy90ZXN0X3Rva2VuaXplci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uODgxNzZjNWExNjkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJE
cml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci93cHRtYW5p
ZmVzdC90ZXN0cy90ZXN0X3Rva2VuaXplci5weQpAQCAtMCwwICsxLDM1NyBAQAoraW1wb3J0IHN5
cworaW1wb3J0IG9zCitpbXBvcnQgdW5pdHRlc3QKKworc3lzLnBhdGguaW5zZXJ0KDAsIG9zLnBh
dGguYWJzcGF0aCgiLi4iKSkKK2Zyb20gY1N0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworCitmcm9t
IC4uIGltcG9ydCBwYXJzZXIKK2Zyb20gLi5wYXJzZXIgaW1wb3J0IHRva2VuX3R5cGVzCisKKwor
Y2xhc3MgVG9rZW5pemVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNl
bGYpOgorICAgICAgICBzZWxmLnRva2VuaXplciA9IHBhcnNlci5Ub2tlbml6ZXIoKQorCisgICAg
ZGVmIHRva2VuaXplKHNlbGYsIGlucHV0X3N0cik6CisgICAgICAgIHJ2ID0gW10KKyAgICAgICAg
Zm9yIGl0ZW0gaW4gc2VsZi50b2tlbml6ZXIudG9rZW5pemUoU3RyaW5nSU8oaW5wdXRfc3RyKSk6
CisgICAgICAgICAgICBydi5hcHBlbmQoaXRlbSkKKyAgICAgICAgICAgIGlmIGl0ZW1bMF0gPT0g
dG9rZW5fdHlwZXMuZW9mOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHJldHVybiBy
dgorCisgICAgZGVmIGNvbXBhcmUoc2VsZiwgaW5wdXRfdGV4dCwgZXhwZWN0ZWQpOgorICAgICAg
ICBleHBlY3RlZCA9IGV4cGVjdGVkICsgWyh0b2tlbl90eXBlcy5lb2YsIE5vbmUpXQorICAgICAg
ICBhY3R1YWwgPSBzZWxmLnRva2VuaXplKGlucHV0X3RleHQpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWxzKGFjdHVhbCwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9oZWFkaW5nXzAoc2VsZik6
CisgICAgICAgIHNlbGYuY29tcGFyZSgiIiJbSGVhZGluZyB0ZXh0XSIiIiwKKyAgICAgICAgICAg
ICAgICAgICAgIFsodG9rZW5fdHlwZXMucGFyZW4sICJbIiksCisgICAgICAgICAgICAgICAgICAg
ICAgKHRva2VuX3R5cGVzLnN0cmluZywgIkhlYWRpbmcgdGV4dCIpLAorICAgICAgICAgICAgICAg
ICAgICAgICh0b2tlbl90eXBlcy5wYXJlbiwgIl0iKV0pCisKKyAgICBkZWYgdGVzdF9oZWFkaW5n
XzEoc2VsZik6CisgICAgICAgIHNlbGYuY29tcGFyZSgiIiJbSGVhZGluZyBbdGV4dFxdXSIiIiwK
KyAgICAgICAgICAgICAgICAgICAgIFsodG9rZW5fdHlwZXMucGFyZW4sICJbIiksCisgICAgICAg
ICAgICAgICAgICAgICAgKHRva2VuX3R5cGVzLnN0cmluZywgIkhlYWRpbmcgW3RleHRdIiksCisg
ICAgICAgICAgICAgICAgICAgICAgKHRva2VuX3R5cGVzLnBhcmVuLCAiXSIpXSkKKworICAgIGRl
ZiB0ZXN0X2hlYWRpbmdfMihzZWxmKToKKyAgICAgICAgc2VsZi5jb21wYXJlKCIiIltIZWFkaW5n
ICN0ZXh0XSIiIiwKKyAgICAgICAgICAgICAgICAgICAgIFsodG9rZW5fdHlwZXMucGFyZW4sICJb
IiksCisgICAgICAgICAgICAgICAgICAgICAgKHRva2VuX3R5cGVzLnN0cmluZywgIkhlYWRpbmcg
I3RleHQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAodG9rZW5fdHlwZXMucGFyZW4sICJdIild
KQorCisgICAgZGVmIHRlc3RfaGVhZGluZ18zKHNlbGYpOgorICAgICAgICBzZWxmLmNvbXBhcmUo
IiIiW0hlYWRpbmcgW1xddGV4dF0iIiIsCisgICAgICAgICAgICAgICAgICAgICBbKHRva2VuX3R5
cGVzLnBhcmVuLCAiWyIpLAorICAgICAgICAgICAgICAgICAgICAgICh0b2tlbl90eXBlcy5zdHJp
bmcsICJIZWFkaW5nIFtddGV4dCIpLAorICAgICAgICAgICAgICAgICAgICAgICh0b2tlbl90eXBl
cy5wYXJlbiwgIl0iKV0pCisKKyAgICBkZWYgdGVzdF9oZWFkaW5nXzQoc2VsZik6CisgICAgICAg
IHdpdGggc2VsZi5hc3NlcnRSYWlzZXMocGFyc2VyLlBhcnNlRXJyb3IpOgorICAgICAgICAgICAg
c2VsZi50b2tlbml6ZSgiW0hlYWRpbmciKQorCisgICAgZGVmIHRlc3RfaGVhZGluZ181KHNlbGYp
OgorICAgICAgICBzZWxmLmNvbXBhcmUoIiIiW0hlYWRpbmcgW1xddGV4dF0gI2NvbW1lbnQiIiIs
CisgICAgICAgICAgICAgICAgICAgICBbKHRva2VuX3R5cGVzLnBhcmVuLCAiWyIpLAorICAgICAg
ICAgICAgICAgICAgICAgICh0b2tlbl90eXBlcy5zdHJpbmcsICJIZWFkaW5nIFtddGV4dCIpLAor
ICAgICAgICAgICAgICAgICAgICAgICh0b2tlbl90eXBlcy5wYXJlbiwgIl0iKV0pCisKKyAgICBk
ZWYgdGVzdF9oZWFkaW5nXzYoc2VsZik6CisgICAgICAgIHNlbGYuY29tcGFyZShyIiIiW0hlYWRp
bmcgXHR0ZXh0XSIiIiwKKyAgICAgICAgICAgICAgICAgICAgIFsodG9rZW5fdHlwZXMucGFyZW4s
ICJbIiksCisgICAgICAgICAgICAgICAgICAgICAgKHRva2VuX3R5cGVzLnN0cmluZywgIkhlYWRp
bmcgXHR0ZXh0IiksCisgICAgICAgICAgICAgICAgICAgICAgKHRva2VuX3R5cGVzLnBhcmVuLCAi
XSIpXSkKKworICAgIGRlZiB0ZXN0X2tleV8wKHNlbGYpOgorICAgICAgICBzZWxmLmNvbXBhcmUo
IiIia2V5OnZhbHVlIiIiLAorICAgICAgICAgICAgICAgICAgICAgWyh0b2tlbl90eXBlcy5zdHJp
bmcsICJrZXkiKSwKKyAgICAgICAgICAgICAgICAgICAgICAodG9rZW5fdHlwZXMuc2VwYXJhdG9y
LCAiOiIpLAorICAgICAgICAgICAgICAgICAgICAgICh0b2tlbl90eXBlcy5zdHJpbmcsICJ2YWx1
ZSIpXSkKKworICAgIGRlZiB0ZXN0X2tleV8xKHNlbGYpOgorICAgICAgICBzZWxmLmNvbXBhcmUo
IiIia2V5ICA6ICB2YWx1ZSIiIiwKKyAgICAgICAgICAgICAgICAgICAgIFsodG9rZW5fdHlwZXMu
c3RyaW5nLCAia2V5IiksCisgICAgICAgICAgICAgICAgICAgICAgKHRva2VuX3R5cGVzLnNlcGFy
YXRvciwgIjoiKSwKKyAgICAgICAgICAgICAgICAgICAgICAodG9rZW5fdHlwZXMuc3RyaW5nLCAi
dmFsdWUiKV0pCisKKyAgICBkZWYgdGVzdF9rZXlfMihzZWxmKToKKyAgICAgICAgc2VsZi5jb21w
YXJlKCIiImtleSAgOiAgdmFsIHVlIiIiLAorICAgICAgICAgICAgICAgICAgICAgWyh0b2tlbl90
eXBlcy5zdHJpbmcsICJrZXkiKSwKKyAgICAgICAgICAgICAgICAgICAgICAodG9rZW5fdHlwZXMu
c2VwYXJhdG9yLCAiOiIpLAorICAgICAgICAgICAgICAgICAgICAgICh0b2tlbl90eXBlcy5zdHJp
bmcsICJ2YWwgdWUiKV0pCisKKyAgICBkZWYgdGVzdF9rZXlfMyhzZWxmKToKKyAgICAgICAgc2Vs
Zi5jb21wYXJlKCIiImtleTogdmFsdWUjY29tbWVudCIiIiwKKyAgICAgICAgICAgICAgICAgICAg
IFsodG9rZW5fdHlwZXMuc3RyaW5nLCAia2V5IiksCisgICAgICAgICAgICAgICAgICAgICAgKHRv
a2VuX3R5cGVzLnNlcGFyYXRvciwgIjoiKSwKKyAgICAgICAgICAgICAgICAgICAgICAodG9rZW5f
dHlwZXMuc3RyaW5nLCAidmFsdWUiKV0pCisKKyAgICBkZWYgdGVzdF9rZXlfNChzZWxmKToKKyAg
ICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhwYXJzZXIuUGFyc2VFcnJvcik6CisgICAgICAg
ICAgICBzZWxmLnRva2VuaXplKCIiImtlIHk6IHZhbHVlIiIiKQorCisgICAgZGVmIHRlc3Rfa2V5
XzUoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMocGFyc2VyLlBhcnNlRXJy
b3IpOgorICAgICAgICAgICAgc2VsZi50b2tlbml6ZSgiIiJrZXkiIiIpCisKKyAgICBkZWYgdGVz
dF9rZXlfNihzZWxmKToKKyAgICAgICAgc2VsZi5jb21wYXJlKCIiImtleTogInZhbHVlXCIiIiIs
CisgICAgICAgICAgICAgICAgICAgICBbKHRva2VuX3R5cGVzLnN0cmluZywgImtleSIpLAorICAg
ICAgICAgICAgICAgICAgICAgICh0b2tlbl90eXBlcy5zZXBhcmF0b3IsICI6IiksCisgICAgICAg
ICAgICAgICAgICAgICAgKHRva2VuX3R5cGVzLnN0cmluZywgInZhbHVlIildKQorCisgICAgZGVm
IHRlc3Rfa2V5Xzcoc2VsZik6CisgICAgICAgIHNlbGYuY29tcGFyZSgiIiJrZXk6ICd2YWx1ZSci
IiIsCisgICAgICAgICAgICAgICAgICAgICBbKHRva2VuX3R5cGVzLnN0cmluZywgImtleSIpLAor
ICAgICAgICAgICAgICAgICAgICAgICh0b2tlbl90eXBlcy5zZXBhcmF0b3IsICI6IiksCisgICAg
ICAgICAgICAgICAgICAgICAgKHRva2VuX3R5cGVzLnN0cmluZywgInZhbHVlIildKQorCisgICAg
ZGVmIHRlc3Rfa2V5Xzgoc2VsZik6CisgICAgICAgIHNlbGYuY29tcGFyZSgiIiJrZXk6ICIjdmFs
dWVcIiIiIiwKKyAgICAgICAgICAgICAgICAgICAgIFsodG9rZW5fdHlwZXMuc3RyaW5nLCAia2V5
IiksCisgICAgICAgICAgICAgICAgICAgICAgKHRva2VuX3R5cGVzLnNlcGFyYXRvciwgIjoiKSwK
KyAgICAgICAgICAgICAgICAgICAgICAodG9rZW5fdHlwZXMuc3RyaW5nLCAiI3ZhbHVlIildKQor
CisgICAgZGVmIHRlc3Rfa2V5Xzkoc2VsZik6CisgICAgICAgIHNlbGYuY29tcGFyZSgiIiJrZXk6
ICcjdmFsdWVcJyIiIiwKKyAgICAgICAgICAgICAgICAgICAgIFsodG9rZW5fdHlwZXMuc3RyaW5n
LCAia2V5IiksCisgICAgICAgICAgICAgICAgICAgICAgKHRva2VuX3R5cGVzLnNlcGFyYXRvciwg
IjoiKSwKKyAgICAgICAgICAgICAgICAgICAgICAodG9rZW5fdHlwZXMuc3RyaW5nLCAiI3ZhbHVl
IildKQorCisgICAgZGVmIHRlc3Rfa2V5XzEwKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNz
ZXJ0UmFpc2VzKHBhcnNlci5QYXJzZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYudG9rZW5pemUo
IiIia2V5OiAidmFsdWUiIiIpCisKKyAgICBkZWYgdGVzdF9rZXlfMTEoc2VsZik6CisgICAgICAg
IHdpdGggc2VsZi5hc3NlcnRSYWlzZXMocGFyc2VyLlBhcnNlRXJyb3IpOgorICAgICAgICAgICAg
c2VsZi50b2tlbml6ZSgiIiJrZXk6ICd2YWx1ZSIiIikKKworICAgIGRlZiB0ZXN0X2tleV8xMihz
ZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhwYXJzZXIuUGFyc2VFcnJvcik6
CisgICAgICAgICAgICBzZWxmLnRva2VuaXplKCIiImtleTogJ3ZhbHVlIiIiKQorCisgICAgZGVm
IHRlc3Rfa2V5XzEzKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHBhcnNl
ci5QYXJzZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYudG9rZW5pemUoIiIia2V5OiAndmFsdWUn
IGFiYyIiIikKKworICAgIGRlZiB0ZXN0X2tleV8xNChzZWxmKToKKyAgICAgICAgc2VsZi5jb21w
YXJlKHIiIiJrZXk6IFxcbmIiIiIsCisgICAgICAgICAgICAgICAgICAgICBbKHRva2VuX3R5cGVz
LnN0cmluZywgImtleSIpLAorICAgICAgICAgICAgICAgICAgICAgICh0b2tlbl90eXBlcy5zZXBh
cmF0b3IsICI6IiksCisgICAgICAgICAgICAgICAgICAgICAgKHRva2VuX3R5cGVzLnN0cmluZywg
ciJcbmIiKV0pCisKKyAgICBkZWYgdGVzdF9saXN0XzAoc2VsZik6CisgICAgICAgIHNlbGYuY29t
cGFyZSgKKyIiIgora2V5OiBbXSIiIiwKKyAgICAgICAgICAgIFsodG9rZW5fdHlwZXMuc3RyaW5n
LCAia2V5IiksCisgICAgICAgICAgICAgKHRva2VuX3R5cGVzLnNlcGFyYXRvciwgIjoiKSwKKyAg
ICAgICAgICAgICAodG9rZW5fdHlwZXMubGlzdF9zdGFydCwgIlsiKSwKKyAgICAgICAgICAgICAo
dG9rZW5fdHlwZXMubGlzdF9lbmQsICJdIildKQorCisgICAgZGVmIHRlc3RfbGlzdF8xKHNlbGYp
OgorICAgICAgICBzZWxmLmNvbXBhcmUoCisiIiIKK2tleTogW2EsICJiIl0iIiIsCisgICAgICAg
ICAgICBbKHRva2VuX3R5cGVzLnN0cmluZywgImtleSIpLAorICAgICAgICAgICAgICh0b2tlbl90
eXBlcy5zZXBhcmF0b3IsICI6IiksCisgICAgICAgICAgICAgKHRva2VuX3R5cGVzLmxpc3Rfc3Rh
cnQsICJbIiksCisgICAgICAgICAgICAgKHRva2VuX3R5cGVzLnN0cmluZywgImEiKSwKKyAgICAg
ICAgICAgICAodG9rZW5fdHlwZXMuc3RyaW5nLCAiYiIpLAorICAgICAgICAgICAgICh0b2tlbl90
eXBlcy5saXN0X2VuZCwgIl0iKV0pCisKKyAgICBkZWYgdGVzdF9saXN0XzIoc2VsZik6CisgICAg
ICAgIHNlbGYuY29tcGFyZSgKKyIiIgora2V5OiBbYSwKKyAgICAgIGJdIiIiLAorICAgICAgICAg
ICAgWyh0b2tlbl90eXBlcy5zdHJpbmcsICJrZXkiKSwKKyAgICAgICAgICAgICAodG9rZW5fdHlw
ZXMuc2VwYXJhdG9yLCAiOiIpLAorICAgICAgICAgICAgICh0b2tlbl90eXBlcy5saXN0X3N0YXJ0
LCAiWyIpLAorICAgICAgICAgICAgICh0b2tlbl90eXBlcy5zdHJpbmcsICJhIiksCisgICAgICAg
ICAgICAgKHRva2VuX3R5cGVzLnN0cmluZywgImIiKSwKKyAgICAgICAgICAgICAodG9rZW5fdHlw
ZXMubGlzdF9lbmQsICJdIildKQorCisgICAgZGVmIHRlc3RfbGlzdF8zKHNlbGYpOgorICAgICAg
ICBzZWxmLmNvbXBhcmUoCisiIiIKK2tleTogW2EsICNiXQorICAgICAgY10iIiIsCisgICAgICAg
ICAgICBbKHRva2VuX3R5cGVzLnN0cmluZywgImtleSIpLAorICAgICAgICAgICAgICh0b2tlbl90
eXBlcy5zZXBhcmF0b3IsICI6IiksCisgICAgICAgICAgICAgKHRva2VuX3R5cGVzLmxpc3Rfc3Rh
cnQsICJbIiksCisgICAgICAgICAgICAgKHRva2VuX3R5cGVzLnN0cmluZywgImEiKSwKKyAgICAg
ICAgICAgICAodG9rZW5fdHlwZXMuc3RyaW5nLCAiYyIpLAorICAgICAgICAgICAgICh0b2tlbl90
eXBlcy5saXN0X2VuZCwgIl0iKV0pCisKKyAgICBkZWYgdGVzdF9saXN0XzQoc2VsZik6CisgICAg
ICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMocGFyc2VyLlBhcnNlRXJyb3IpOgorICAgICAgICAg
ICAgc2VsZi50b2tlbml6ZSgiIiJrZXk6IFthICNiXQorICAgICAgICAgICAgY10iIiIpCisKKyAg
ICBkZWYgdGVzdF9saXN0XzUoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMo
cGFyc2VyLlBhcnNlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi50b2tlbml6ZSgiIiJrZXk6IFth
IFxcCisgICAgICAgICAgICBjXSIiIikKKworICAgIGRlZiB0ZXN0X2xpc3RfNihzZWxmKToKKyAg
ICAgICAgc2VsZi5jb21wYXJlKAorIiIia2V5OiBbYSAsIGJdIiIiLAorICAgICAgICBbKHRva2Vu
X3R5cGVzLnN0cmluZywgImtleSIpLAorICAgICAgICAgKHRva2VuX3R5cGVzLnNlcGFyYXRvciwg
IjoiKSwKKyAgICAgICAgICh0b2tlbl90eXBlcy5saXN0X3N0YXJ0LCAiWyIpLAorICAgICAgICAg
KHRva2VuX3R5cGVzLnN0cmluZywgImEiKSwKKyAgICAgICAgICh0b2tlbl90eXBlcy5zdHJpbmcs
ICJiIiksCisgICAgICAgICAodG9rZW5fdHlwZXMubGlzdF9lbmQsICJdIildKQorCisgICAgZGVm
IHRlc3RfZXhwcl8wKHNlbGYpOgorICAgICAgICBzZWxmLmNvbXBhcmUoCisiIiIKK2tleToKKyAg
aWYgY29uZCA9PSAxOiB2YWx1ZSIiIiwKKyAgICAgICAgICAgIFsodG9rZW5fdHlwZXMuc3RyaW5n
LCAia2V5IiksCisgICAgICAgICAgICAgKHRva2VuX3R5cGVzLnNlcGFyYXRvciwgIjoiKSwKKyAg
ICAgICAgICAgICAodG9rZW5fdHlwZXMuZ3JvdXBfc3RhcnQsIE5vbmUpLAorICAgICAgICAgICAg
ICh0b2tlbl90eXBlcy5pZGVudCwgImlmIiksCisgICAgICAgICAgICAgKHRva2VuX3R5cGVzLmlk
ZW50LCAiY29uZCIpLAorICAgICAgICAgICAgICh0b2tlbl90eXBlcy5pZGVudCwgIj09IiksCisg
ICAgICAgICAgICAgKHRva2VuX3R5cGVzLm51bWJlciwgIjEiKSwKKyAgICAgICAgICAgICAodG9r
ZW5fdHlwZXMuc2VwYXJhdG9yLCAiOiIpLAorICAgICAgICAgICAgICh0b2tlbl90eXBlcy5zdHJp
bmcsICJ2YWx1ZSIpXSkKKworICAgIGRlZiB0ZXN0X2V4cHJfMShzZWxmKToKKyAgICAgICAgc2Vs
Zi5jb21wYXJlKAorIiIiCitrZXk6CisgIGlmIGNvbmQgPT0gMTogdmFsdWUxCisgIHZhbHVlMiIi
IiwKKyAgICAgICAgICAgIFsodG9rZW5fdHlwZXMuc3RyaW5nLCAia2V5IiksCisgICAgICAgICAg
ICAgKHRva2VuX3R5cGVzLnNlcGFyYXRvciwgIjoiKSwKKyAgICAgICAgICAgICAodG9rZW5fdHlw
ZXMuZ3JvdXBfc3RhcnQsIE5vbmUpLAorICAgICAgICAgICAgICh0b2tlbl90eXBlcy5pZGVudCwg
ImlmIiksCisgICAgICAgICAgICAgKHRva2VuX3R5cGVzLmlkZW50LCAiY29uZCIpLAorICAgICAg
ICAgICAgICh0b2tlbl90eXBlcy5pZGVudCwgIj09IiksCisgICAgICAgICAgICAgKHRva2VuX3R5
cGVzLm51bWJlciwgIjEiKSwKKyAgICAgICAgICAgICAodG9rZW5fdHlwZXMuc2VwYXJhdG9yLCAi
OiIpLAorICAgICAgICAgICAgICh0b2tlbl90eXBlcy5zdHJpbmcsICJ2YWx1ZTEiKSwKKyAgICAg
ICAgICAgICAodG9rZW5fdHlwZXMuc3RyaW5nLCAidmFsdWUyIildKQorCisgICAgZGVmIHRlc3Rf
ZXhwcl8yKHNlbGYpOgorICAgICAgICBzZWxmLmNvbXBhcmUoCisiIiIKK2tleToKKyAgaWYgY29u
ZD09IjEiOiB2YWx1ZSIiIiwKKyAgICAgICAgICAgIFsodG9rZW5fdHlwZXMuc3RyaW5nLCAia2V5
IiksCisgICAgICAgICAgICAgKHRva2VuX3R5cGVzLnNlcGFyYXRvciwgIjoiKSwKKyAgICAgICAg
ICAgICAodG9rZW5fdHlwZXMuZ3JvdXBfc3RhcnQsIE5vbmUpLAorICAgICAgICAgICAgICh0b2tl
bl90eXBlcy5pZGVudCwgImlmIiksCisgICAgICAgICAgICAgKHRva2VuX3R5cGVzLmlkZW50LCAi
Y29uZCIpLAorICAgICAgICAgICAgICh0b2tlbl90eXBlcy5pZGVudCwgIj09IiksCisgICAgICAg
ICAgICAgKHRva2VuX3R5cGVzLnN0cmluZywgIjEiKSwKKyAgICAgICAgICAgICAodG9rZW5fdHlw
ZXMuc2VwYXJhdG9yLCAiOiIpLAorICAgICAgICAgICAgICh0b2tlbl90eXBlcy5zdHJpbmcsICJ2
YWx1ZSIpXSkKKworICAgIGRlZiB0ZXN0X2V4cHJfMyhzZWxmKToKKyAgICAgICAgc2VsZi5jb21w
YXJlKAorIiIiCitrZXk6CisgIGlmIGNvbmQ9PTEuMTogdmFsdWUiIiIsCisgICAgICAgICAgICBb
KHRva2VuX3R5cGVzLnN0cmluZywgImtleSIpLAorICAgICAgICAgICAgICh0b2tlbl90eXBlcy5z
ZXBhcmF0b3IsICI6IiksCisgICAgICAgICAgICAgKHRva2VuX3R5cGVzLmdyb3VwX3N0YXJ0LCBO
b25lKSwKKyAgICAgICAgICAgICAodG9rZW5fdHlwZXMuaWRlbnQsICJpZiIpLAorICAgICAgICAg
ICAgICh0b2tlbl90eXBlcy5pZGVudCwgImNvbmQiKSwKKyAgICAgICAgICAgICAodG9rZW5fdHlw
ZXMuaWRlbnQsICI9PSIpLAorICAgICAgICAgICAgICh0b2tlbl90eXBlcy5udW1iZXIsICIxLjEi
KSwKKyAgICAgICAgICAgICAodG9rZW5fdHlwZXMuc2VwYXJhdG9yLCAiOiIpLAorICAgICAgICAg
ICAgICh0b2tlbl90eXBlcy5zdHJpbmcsICJ2YWx1ZSIpXSkKKworICAgIGRlZiB0ZXN0X2V4cHJf
NChzZWxmKToKKyAgICAgICAgc2VsZi5jb21wYXJlKAorICAgICAgICAgICAgIiIiCitrZXk6Cisg
IGlmIGNvbmQ9PTEuMSBhbmQgY29uZDIgPT0gImEiOiB2YWx1ZSIiIiwKKyAgICAgICAgICAgIFso
dG9rZW5fdHlwZXMuc3RyaW5nLCAia2V5IiksCisgICAgICAgICAgICAgKHRva2VuX3R5cGVzLnNl
cGFyYXRvciwgIjoiKSwKKyAgICAgICAgICAgICAodG9rZW5fdHlwZXMuZ3JvdXBfc3RhcnQsIE5v
bmUpLAorICAgICAgICAgICAgICh0b2tlbl90eXBlcy5pZGVudCwgImlmIiksCisgICAgICAgICAg
ICAgKHRva2VuX3R5cGVzLmlkZW50LCAiY29uZCIpLAorICAgICAgICAgICAgICh0b2tlbl90eXBl
cy5pZGVudCwgIj09IiksCisgICAgICAgICAgICAgKHRva2VuX3R5cGVzLm51bWJlciwgIjEuMSIp
LAorICAgICAgICAgICAgICh0b2tlbl90eXBlcy5pZGVudCwgImFuZCIpLAorICAgICAgICAgICAg
ICh0b2tlbl90eXBlcy5pZGVudCwgImNvbmQyIiksCisgICAgICAgICAgICAgKHRva2VuX3R5cGVz
LmlkZW50LCAiPT0iKSwKKyAgICAgICAgICAgICAodG9rZW5fdHlwZXMuc3RyaW5nLCAiYSIpLAor
ICAgICAgICAgICAgICh0b2tlbl90eXBlcy5zZXBhcmF0b3IsICI6IiksCisgICAgICAgICAgICAg
KHRva2VuX3R5cGVzLnN0cmluZywgInZhbHVlIildKQorCisgICAgZGVmIHRlc3RfZXhwcl81KHNl
bGYpOgorICAgICAgICBzZWxmLmNvbXBhcmUoCisiIiIKK2tleToKKyAgaWYgKGNvbmQ9PTEuMSAp
OiB2YWx1ZSIiIiwKKyAgICAgICAgICAgIFsodG9rZW5fdHlwZXMuc3RyaW5nLCAia2V5IiksCisg
ICAgICAgICAgICAgKHRva2VuX3R5cGVzLnNlcGFyYXRvciwgIjoiKSwKKyAgICAgICAgICAgICAo
dG9rZW5fdHlwZXMuZ3JvdXBfc3RhcnQsIE5vbmUpLAorICAgICAgICAgICAgICh0b2tlbl90eXBl
cy5pZGVudCwgImlmIiksCisgICAgICAgICAgICAgKHRva2VuX3R5cGVzLnBhcmVuLCAiKCIpLAor
ICAgICAgICAgICAgICh0b2tlbl90eXBlcy5pZGVudCwgImNvbmQiKSwKKyAgICAgICAgICAgICAo
dG9rZW5fdHlwZXMuaWRlbnQsICI9PSIpLAorICAgICAgICAgICAgICh0b2tlbl90eXBlcy5udW1i
ZXIsICIxLjEiKSwKKyAgICAgICAgICAgICAodG9rZW5fdHlwZXMucGFyZW4sICIpIiksCisgICAg
ICAgICAgICAgKHRva2VuX3R5cGVzLnNlcGFyYXRvciwgIjoiKSwKKyAgICAgICAgICAgICAodG9r
ZW5fdHlwZXMuc3RyaW5nLCAidmFsdWUiKV0pCisKKyAgICBkZWYgdGVzdF9leHByXzYoc2VsZik6
CisgICAgICAgIHNlbGYuY29tcGFyZSgKKyIiIgora2V5OgorICBpZiAiXFx0dGVzdCI6IHZhbHVl
IiIiLAorICAgICAgICAgICAgWyh0b2tlbl90eXBlcy5zdHJpbmcsICJrZXkiKSwKKyAgICAgICAg
ICAgICAodG9rZW5fdHlwZXMuc2VwYXJhdG9yLCAiOiIpLAorICAgICAgICAgICAgICh0b2tlbl90
eXBlcy5ncm91cF9zdGFydCwgTm9uZSksCisgICAgICAgICAgICAgKHRva2VuX3R5cGVzLmlkZW50
LCAiaWYiKSwKKyAgICAgICAgICAgICAodG9rZW5fdHlwZXMuc3RyaW5nLCAiXHR0ZXN0IiksCisg
ICAgICAgICAgICAgKHRva2VuX3R5cGVzLnNlcGFyYXRvciwgIjoiKSwKKyAgICAgICAgICAgICAo
dG9rZW5fdHlwZXMuc3RyaW5nLCAidmFsdWUiKV0pCisKKyAgICBkZWYgdGVzdF9leHByXzcoc2Vs
Zik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMocGFyc2VyLlBhcnNlRXJyb3IpOgor
ICAgICAgICAgICAgc2VsZi50b2tlbml6ZSgKKyIiIgora2V5OgorICBpZiAxQTogdmFsdWUiIiIp
CisKKyAgICBkZWYgdGVzdF9leHByXzgoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRS
YWlzZXMocGFyc2VyLlBhcnNlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi50b2tlbml6ZSgKKyIi
Igora2V5OgorICBpZiAxYTogdmFsdWUiIiIpCisKKyAgICBkZWYgdGVzdF9leHByXzkoc2VsZik6
CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMocGFyc2VyLlBhcnNlRXJyb3IpOgorICAg
ICAgICAgICAgc2VsZi50b2tlbml6ZSgKKyIiIgora2V5OgorICBpZiAxLjEuMTogdmFsdWUiIiIp
CisKKyAgICBkZWYgdGVzdF9leHByXzEwKHNlbGYpOgorICAgICAgICBzZWxmLmNvbXBhcmUoCisi
IiIKK2tleToKKyAgaWYgMS46IHZhbHVlIiIiLAorICAgICAgICAgICAgWyh0b2tlbl90eXBlcy5z
dHJpbmcsICJrZXkiKSwKKyAgICAgICAgICAgICAodG9rZW5fdHlwZXMuc2VwYXJhdG9yLCAiOiIp
LAorICAgICAgICAgICAgICh0b2tlbl90eXBlcy5ncm91cF9zdGFydCwgTm9uZSksCisgICAgICAg
ICAgICAgKHRva2VuX3R5cGVzLmlkZW50LCAiaWYiKSwKKyAgICAgICAgICAgICAodG9rZW5fdHlw
ZXMubnVtYmVyLCAiMS4iKSwKKyAgICAgICAgICAgICAodG9rZW5fdHlwZXMuc2VwYXJhdG9yLCAi
OiIpLAorICAgICAgICAgICAgICh0b2tlbl90eXBlcy5zdHJpbmcsICJ2YWx1ZSIpXSkKKworaWYg
X19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBh
L1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3dw
dHJ1bm5lci5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIv
d3B0cnVubmVyL3dwdHJ1bm5lci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uOTg1NWVjYzY3MmMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBv
cnRlZC93M2MvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci93cHRydW5uZXIucHkKQEAgLTAsMCAr
MSwyOTAgQEAKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgdW5pY29kZV9saXRlcmFscworCitpbXBv
cnQganNvbgoraW1wb3J0IG9zCitpbXBvcnQgc3lzCisKK2ltcG9ydCBlbnZpcm9ubWVudCBhcyBl
bnYKK2ltcG9ydCBwcm9kdWN0cworaW1wb3J0IHRlc3Rsb2FkZXIKK2ltcG9ydCB3cHRjb21tYW5k
bGluZQoraW1wb3J0IHdwdGxvZ2dpbmcKK2ltcG9ydCB3cHR0ZXN0Citmcm9tIGZvbnQgaW1wb3J0
IEZvbnRJbnN0YWxsZXIKK2Zyb20gdGVzdHJ1bm5lciBpbXBvcnQgTWFuYWdlckdyb3VwCitmcm9t
IGJyb3dzZXJzLmJhc2UgaW1wb3J0IE51bGxCcm93c2VyCisKK2hlcmUgPSBvcy5wYXRoLnNwbGl0
KF9fZmlsZV9fKVswXQorCitsb2dnZXIgPSBOb25lCisKKyIiIlJ1bm5lciBmb3Igd2ViLXBsYXRm
b3JtLXRlc3RzCisKK1RoZSBydW5uZXIgaGFzIHNldmVyYWwgZGVzaWduIGdvYWxzOgorCisqIFRl
c3RzIHNob3VsZCBydW4gd2l0aCBubyBtb2RpZmljYXRpb24gZnJvbSB1cHN0cmVhbS4KKworKiBU
ZXN0cyBzaG91bGQgYmUgcmVnYXJkZWQgYXMgInVudHJ1c3RlZCIgc28gdGhhdCBlcnJvcnMsIHRp
bWVvdXRzIGFuZCBldmVuCisgIGNyYXNoZXMgaW4gdGhlIHRlc3RzIGNhbiBiZSBoYW5kbGVkIHdp
dGhvdXQgZmFpbGluZyB0aGUgZW50aXJlIHRlc3QgcnVuLgorCisqIEZvciBwZXJmb3JtYW5jZSB0
ZXN0cyBjYW4gYmUgcnVuIGluIG11bHRpcGxlIGJyb3dzZXJzIGluIHBhcmFsbGVsLgorCitUaGUg
dXBzdHJlYW0gcmVwb3NpdG9yeSBoYXMgdGhlIGZhY2lsaXR5IGZvciBjcmVhdGluZyBhIHRlc3Qg
bWFuaWZlc3QgaW4gSlNPTgorZm9ybWF0LiBUaGlzIG1hbmlmZXN0IGlzIHVzZWQgZGlyZWN0bHkg
dG8gZGV0ZXJtaW5lIHdoaWNoIHRlc3RzIGV4aXN0LiBMb2NhbAorbWV0YWRhdGEgZmlsZXMgYXJl
IHVzZWQgdG8gc3RvcmUgdGhlIGV4cGVjdGVkIHRlc3QgcmVzdWx0cy4KKyIiIgorCitkZWYgc2V0
dXBfbG9nZ2luZygqYXJncywgKiprd2FyZ3MpOgorICAgIGdsb2JhbCBsb2dnZXIKKyAgICBsb2dn
ZXIgPSB3cHRsb2dnaW5nLnNldHVwKCphcmdzLCAqKmt3YXJncykKKworZGVmIGdldF9sb2FkZXIo
dGVzdF9wYXRocywgcHJvZHVjdCwgc3NsX2VudiwgZGVidWc9Tm9uZSwgcnVuX2luZm9fZXh0cmFz
PU5vbmUsICoqa3dhcmdzKToKKyAgICBpZiBydW5faW5mb19leHRyYXMgaXMgTm9uZToKKyAgICAg
ICAgcnVuX2luZm9fZXh0cmFzID0ge30KKworICAgIHJ1bl9pbmZvID0gd3B0dGVzdC5nZXRfcnVu
X2luZm8oa3dhcmdzWyJydW5faW5mbyJdLCBwcm9kdWN0LCBkZWJ1Zz1kZWJ1ZywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhcz1ydW5faW5mb19leHRyYXMpCisKKyAg
ICB0ZXN0X21hbmlmZXN0cyA9IHRlc3Rsb2FkZXIuTWFuaWZlc3RMb2FkZXIodGVzdF9wYXRocywg
Zm9yY2VfbWFuaWZlc3RfdXBkYXRlPWt3YXJnc1sibWFuaWZlc3RfdXBkYXRlIl0pLmxvYWQoKQor
CisgICAgbWFuaWZlc3RfZmlsdGVycyA9IFtdCisgICAgbWV0YV9maWx0ZXJzID0gW10KKworICAg
IGlmIGt3YXJnc1siaW5jbHVkZSJdIG9yIGt3YXJnc1siZXhjbHVkZSJdIG9yIGt3YXJnc1siaW5j
bHVkZV9tYW5pZmVzdCJdOgorICAgICAgICBtYW5pZmVzdF9maWx0ZXJzLmFwcGVuZCh0ZXN0bG9h
ZGVyLlRlc3RGaWx0ZXIoaW5jbHVkZT1rd2FyZ3NbImluY2x1ZGUiXSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGU9a3dhcmdzWyJl
eGNsdWRlIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtYW5pZmVzdF9wYXRoPWt3YXJnc1siaW5jbHVkZV9tYW5pZmVzdCJdLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9tYW5p
ZmVzdHM9dGVzdF9tYW5pZmVzdHMpKQorICAgIGlmIGt3YXJnc1sidGFncyJdOgorICAgICAgICBt
ZXRhX2ZpbHRlcnMuYXBwZW5kKHRlc3Rsb2FkZXIuVGFnRmlsdGVyKHRhZ3M9a3dhcmdzWyJ0YWdz
Il0pKQorCisgICAgdGVzdF9sb2FkZXIgPSB0ZXN0bG9hZGVyLlRlc3RMb2FkZXIodGVzdF9tYW5p
ZmVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dhcmdzWyJ0
ZXN0X3R5cGVzIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVu
X2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFuaWZlc3Rf
ZmlsdGVycz1tYW5pZmVzdF9maWx0ZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1ldGFfZmlsdGVycz1tZXRhX2ZpbHRlcnMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2h1bmtfdHlwZT1rd2FyZ3NbImNodW5rX3R5cGUiXSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbF9jaHVua3M9a3dhcmdz
WyJ0b3RhbF9jaHVua3MiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjaHVua19udW1iZXI9a3dhcmdzWyJ0aGlzX2NodW5rIl0sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZV9odHRwcz1zc2xfZW52LnNzbF9lbmFibGVkKQor
ICAgIHJldHVybiBydW5faW5mbywgdGVzdF9sb2FkZXIKKworZGVmIGxpc3RfdGVzdF9ncm91cHMo
dGVzdF9wYXRocywgcHJvZHVjdCwgKiprd2FyZ3MpOgorICAgIGVudi5kb19kZWxheWVkX2ltcG9y
dHMobG9nZ2VyLCB0ZXN0X3BhdGhzKQorCisgICAgc3NsX2VudiA9IGVudi5zc2xfZW52KGxvZ2dl
ciwgKiprd2FyZ3MpCisKKyAgICBydW5faW5mb19leHRyYXMgPSBwcm9kdWN0cy5sb2FkX3Byb2R1
Y3Qoa3dhcmdzWyJjb25maWciXSwgcHJvZHVjdClbLTFdKCoqa3dhcmdzKQorCisgICAgcnVuX2lu
Zm8sIHRlc3RfbG9hZGVyID0gZ2V0X2xvYWRlcih0ZXN0X3BhdGhzLCBwcm9kdWN0LCBzc2xfZW52
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuX2luZm9fZXh0cmFz
PXJ1bl9pbmZvX2V4dHJhcywgKiprd2FyZ3MpCisKKyAgICBmb3IgaXRlbSBpbiBzb3J0ZWQodGVz
dF9sb2FkZXIuZ3JvdXBzKGt3YXJnc1sidGVzdF90eXBlcyJdKSk6CisgICAgICAgIHByaW50IGl0
ZW0KKworCitkZWYgbGlzdF9kaXNhYmxlZCh0ZXN0X3BhdGhzLCBwcm9kdWN0LCAqKmt3YXJncyk6
CisgICAgZW52LmRvX2RlbGF5ZWRfaW1wb3J0cyhsb2dnZXIsIHRlc3RfcGF0aHMpCisKKyAgICBy
diA9IFtdCisKKyAgICBydW5faW5mb19leHRyYXMgPSBwcm9kdWN0cy5sb2FkX3Byb2R1Y3Qoa3dh
cmdzWyJjb25maWciXSwgcHJvZHVjdClbLTFdKCoqa3dhcmdzKQorCisgICAgc3NsX2VudiA9IGVu
di5zc2xfZW52KGxvZ2dlciwgKiprd2FyZ3MpCisKKyAgICBydW5faW5mbywgdGVzdF9sb2FkZXIg
PSBnZXRfbG9hZGVyKHRlc3RfcGF0aHMsIHByb2R1Y3QsIHNzbF9lbnYsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBydW5faW5mb19leHRyYXM9cnVuX2luZm9fZXh0cmFz
LCAqKmt3YXJncykKKworICAgIGZvciB0ZXN0X3R5cGUsIHRlc3RzIGluIHRlc3RfbG9hZGVyLmRp
c2FibGVkX3Rlc3RzLml0ZXJpdGVtcygpOgorICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0czoKKyAg
ICAgICAgICAgIHJ2LmFwcGVuZCh7InRlc3QiOiB0ZXN0LmlkLCAicmVhc29uIjogdGVzdC5kaXNh
YmxlZCgpfSkKKyAgICBwcmludCBqc29uLmR1bXBzKHJ2LCBpbmRlbnQ9MikKKworCitkZWYgbGlz
dF90ZXN0cyh0ZXN0X3BhdGhzLCBwcm9kdWN0LCAqKmt3YXJncyk6CisgICAgZW52LmRvX2RlbGF5
ZWRfaW1wb3J0cyhsb2dnZXIsIHRlc3RfcGF0aHMpCisKKyAgICBydiA9IFtdCisKKyAgICBzc2xf
ZW52ID0gZW52LnNzbF9lbnYobG9nZ2VyLCAqKmt3YXJncykKKworICAgIHJ1bl9pbmZvX2V4dHJh
cyA9IHByb2R1Y3RzLmxvYWRfcHJvZHVjdChrd2FyZ3NbImNvbmZpZyJdLCBwcm9kdWN0KVstMV0o
Kiprd2FyZ3MpCisKKyAgICBydW5faW5mbywgdGVzdF9sb2FkZXIgPSBnZXRfbG9hZGVyKHRlc3Rf
cGF0aHMsIHByb2R1Y3QsIHNzbF9lbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBydW5faW5mb19leHRyYXM9cnVuX2luZm9fZXh0cmFzLCAqKmt3YXJncykKKworICAg
IGZvciB0ZXN0IGluIHRlc3RfbG9hZGVyLnRlc3RfaWRzOgorICAgICAgICBwcmludCB0ZXN0CisK
KworZGVmIGdldF9wYXVzZV9hZnRlcl90ZXN0KHRlc3RfbG9hZGVyLCAqKmt3YXJncyk6CisgICAg
dG90YWxfdGVzdHMgPSBzdW0obGVuKGl0ZW0pIGZvciBpdGVtIGluIHRlc3RfbG9hZGVyLnRlc3Rz
Lml0ZXJ2YWx1ZXMoKSkKKyAgICBpZiBrd2FyZ3NbInBhdXNlX2FmdGVyX3Rlc3QiXSBpcyBOb25l
OgorICAgICAgICBpZiBrd2FyZ3NbInJlcGVhdF91bnRpbF91bmV4cGVjdGVkIl06CisgICAgICAg
ICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgaWYga3dhcmdzWyJyZXBlYXQiXSA9PSAxIGFuZCB0
b3RhbF90ZXN0cyA9PSAxOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJu
IEZhbHNlCisgICAgcmV0dXJuIGt3YXJnc1sicGF1c2VfYWZ0ZXJfdGVzdCJdCisKKworZGVmIHJ1
bl90ZXN0cyhjb25maWcsIHRlc3RfcGF0aHMsIHByb2R1Y3QsICoqa3dhcmdzKToKKyAgICB3aXRo
IHdwdGxvZ2dpbmcuQ2FwdHVyZUlPKGxvZ2dlciwgbm90IGt3YXJnc1sibm9fY2FwdHVyZV9zdGRp
byJdKToKKyAgICAgICAgZW52LmRvX2RlbGF5ZWRfaW1wb3J0cyhsb2dnZXIsIHRlc3RfcGF0aHMp
CisKKyAgICAgICAgKGNoZWNrX2FyZ3MsCisgICAgICAgICB0YXJnZXRfYnJvd3Nlcl9jbHMsIGdl
dF9icm93c2VyX2t3YXJncywKKyAgICAgICAgIGV4ZWN1dG9yX2NsYXNzZXMsIGdldF9leGVjdXRv
cl9rd2FyZ3MsCisgICAgICAgICBlbnZfb3B0aW9ucywgZ2V0X2Vudl9leHRyYXMsIHJ1bl9pbmZv
X2V4dHJhcykgPSBwcm9kdWN0cy5sb2FkX3Byb2R1Y3QoY29uZmlnLCBwcm9kdWN0KQorCisgICAg
ICAgIHNzbF9lbnYgPSBlbnYuc3NsX2Vudihsb2dnZXIsICoqa3dhcmdzKQorICAgICAgICBlbnZf
ZXh0cmFzID0gZ2V0X2Vudl9leHRyYXMoKiprd2FyZ3MpCisKKyAgICAgICAgY2hlY2tfYXJncygq
Kmt3YXJncykKKworICAgICAgICBpZiBrd2FyZ3NbImluc3RhbGxfZm9udHMiXToKKyAgICAgICAg
ICAgIGVudl9leHRyYXMuYXBwZW5kKEZvbnRJbnN0YWxsZXIoCisgICAgICAgICAgICAgICAgZm9u
dF9kaXI9a3dhcmdzWyJmb250X2RpciJdLAorICAgICAgICAgICAgICAgIGFoZW09b3MucGF0aC5q
b2luKGt3YXJnc1sidGVzdHNfcm9vdCJdLCAiZm9udHMvQWhlbS50dGYiKQorICAgICAgICAgICAg
KSkKKworICAgICAgICBpZiAidGVzdF9sb2FkZXIiIGluIGt3YXJnczoKKyAgICAgICAgICAgIHJ1
bl9pbmZvID0gd3B0dGVzdC5nZXRfcnVuX2luZm8oa3dhcmdzWyJydW5faW5mbyJdLCBwcm9kdWN0
LCBkZWJ1Zz1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBleHRyYXM9cnVuX2luZm9fZXh0cmFzKCoqa3dhcmdzKSkKKyAgICAgICAgICAgIHRlc3RfbG9h
ZGVyID0ga3dhcmdzWyJ0ZXN0X2xvYWRlciJdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBy
dW5faW5mbywgdGVzdF9sb2FkZXIgPSBnZXRfbG9hZGVyKHRlc3RfcGF0aHMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3QsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF9lbnYsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bl9pbmZvX2V4dHJhcz1ydW5f
aW5mb19leHRyYXMoKiprd2FyZ3MpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAqKmt3YXJncykKKworICAgICAgICB0ZXN0X3NvdXJjZV9rd2FyZ3MgPSB7
InByb2Nlc3NlcyI6IGt3YXJnc1sicHJvY2Vzc2VzIl19CisgICAgICAgIGlmIGt3YXJnc1sicnVu
X2J5X2RpciJdIGlzIEZhbHNlOgorICAgICAgICAgICAgdGVzdF9zb3VyY2VfY2xzID0gdGVzdGxv
YWRlci5TaW5nbGVUZXN0U291cmNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIEEgdmFs
dWUgb2YgTm9uZSBpbmRpY2F0ZXMgaW5maW5pdGUgZGVwdGgKKyAgICAgICAgICAgIHRlc3Rfc291
cmNlX2NscyA9IHRlc3Rsb2FkZXIuUGF0aEdyb3VwZWRTb3VyY2UKKyAgICAgICAgICAgIHRlc3Rf
c291cmNlX2t3YXJnc1siZGVwdGgiXSA9IGt3YXJnc1sicnVuX2J5X2RpciJdCisKKyAgICAgICAg
bG9nZ2VyLmluZm8oIlVzaW5nICVpIGNsaWVudCBwcm9jZXNzZXMiICUga3dhcmdzWyJwcm9jZXNz
ZXMiXSkKKworICAgICAgICB1bmV4cGVjdGVkX3RvdGFsID0gMAorCisgICAgICAgIGt3YXJnc1si
cGF1c2VfYWZ0ZXJfdGVzdCJdID0gZ2V0X3BhdXNlX2FmdGVyX3Rlc3QodGVzdF9sb2FkZXIsICoq
a3dhcmdzKQorCisgICAgICAgIHdpdGggZW52LlRlc3RFbnZpcm9ubWVudCh0ZXN0X3BhdGhzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX2VudiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGt3YXJnc1sicGF1c2VfYWZ0ZXJfdGVzdCJdLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAga3dhcmdzWyJkZWJ1Z19pbmZvIl0sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbnZfb3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVudl9leHRyYXMpIGFzIHRlc3RfZW52aXJvbm1lbnQ6CisgICAgICAgICAg
ICB0cnk6CisgICAgICAgICAgICAgICAgdGVzdF9lbnZpcm9ubWVudC5lbnN1cmVfc3RhcnRlZCgp
CisgICAgICAgICAgICBleGNlcHQgZW52LlRlc3RFbnZpcm9ubWVudEVycm9yIGFzIGU6CisgICAg
ICAgICAgICAgICAgbG9nZ2VyLmNyaXRpY2FsKCJFcnJvciBzdGFydGluZyB0ZXN0IGVudmlyb25t
ZW50OiAlcyIgJSBlLm1lc3NhZ2UpCisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICAg
ICAgcmVwZWF0ID0ga3dhcmdzWyJyZXBlYXQiXQorICAgICAgICAgICAgcmVwZWF0X2NvdW50ID0g
MAorICAgICAgICAgICAgcmVwZWF0X3VudGlsX3VuZXhwZWN0ZWQgPSBrd2FyZ3NbInJlcGVhdF91
bnRpbF91bmV4cGVjdGVkIl0KKworICAgICAgICAgICAgd2hpbGUgcmVwZWF0X2NvdW50IDwgcmVw
ZWF0IG9yIHJlcGVhdF91bnRpbF91bmV4cGVjdGVkOgorICAgICAgICAgICAgICAgIHJlcGVhdF9j
b3VudCArPSAxCisgICAgICAgICAgICAgICAgaWYgcmVwZWF0X3VudGlsX3VuZXhwZWN0ZWQ6Cisg
ICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJSZXBldGl0aW9uICVpIiAlIChyZXBlYXRf
Y291bnQpKQorICAgICAgICAgICAgICAgIGVsaWYgcmVwZWF0ID4gMToKKyAgICAgICAgICAgICAg
ICAgICAgbG9nZ2VyLmluZm8oIlJlcGV0aXRpb24gJWkgLyAlaSIgJSAocmVwZWF0X2NvdW50LCBy
ZXBlYXQpKQorCisgICAgICAgICAgICAgICAgdW5leHBlY3RlZF9jb3VudCA9IDAKKyAgICAgICAg
ICAgICAgICBsb2dnZXIuc3VpdGVfc3RhcnQodGVzdF9sb2FkZXIudGVzdF9pZHMsIHJ1bl9pbmZv
KQorICAgICAgICAgICAgICAgIGZvciB0ZXN0X3R5cGUgaW4ga3dhcmdzWyJ0ZXN0X3R5cGVzIl06
CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJSdW5uaW5nICVzIHRlc3RzIiAlIHRl
c3RfdHlwZSkKKworICAgICAgICAgICAgICAgICAgICAjIFdlYkRyaXZlciB0ZXN0cyBtYXkgY3Jl
YXRlIGFuZCBkZXN0cm95IG11bHRpcGxlIGJyb3dzZXIKKyAgICAgICAgICAgICAgICAgICAgIyBw
cm9jZXNzZXMgYXMgcGFydCBvZiB0aGVpciBleHBlY3RlZCBiZWhhdmlvci4gVGhlc2UKKyAgICAg
ICAgICAgICAgICAgICAgIyBwcm9jZXNzZXMgYXJlIG1hbmFnZWQgYnkgYSBXZWJEcml2ZXIgc2Vy
dmVyIGJpbmFyeS4gVGhpcworICAgICAgICAgICAgICAgICAgICAjIG9idmlhdGVzIHRoZSBuZWVk
IGZvciB3cHRydW5uZXIgdG8gcHJvdmlkZSBhIGJyb3dzZXIsIHNvCisgICAgICAgICAgICAgICAg
ICAgICMgdGhlIE51bGxCcm93c2VyIGlzIHVzZWQgaW4gcGxhY2Ugb2YgdGhlICJ0YXJnZXQiIGJy
b3dzZXIKKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdF90eXBlID09ICJ3ZHNwZWMiOgorICAg
ICAgICAgICAgICAgICAgICAgICAgYnJvd3Nlcl9jbHMgPSBOdWxsQnJvd3NlcgorICAgICAgICAg
ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJvd3Nlcl9jbHMgPSB0
YXJnZXRfYnJvd3Nlcl9jbHMKKworICAgICAgICAgICAgICAgICAgICBicm93c2VyX2t3YXJncyA9
IGdldF9icm93c2VyX2t3YXJncyh0ZXN0X3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bl9pbmZvLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfZW52PXNzbF9lbnYs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICoqa3dhcmdzKQorCisKKyAgICAgICAgICAgICAgICAgICAgZXhlY3V0b3JfY2xzID0gZXhlY3V0
b3JfY2xhc3Nlcy5nZXQodGVzdF90eXBlKQorICAgICAgICAgICAgICAgICAgICBleGVjdXRvcl9r
d2FyZ3MgPSBnZXRfZXhlY3V0b3Jfa3dhcmdzKHRlc3RfdHlwZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2Vudmlyb25tZW50
LmV4dGVybmFsX2NvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0ZXN0X2Vudmlyb25tZW50LmNhY2hlX21hbmFnZXIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVu
X2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKiprd2FyZ3MpCisKKyAgICAgICAgICAgICAgICAgICAgaWYgZXhlY3V0b3JfY2xz
IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlVuc3VwcG9y
dGVkIHRlc3QgdHlwZSAlcyBmb3IgcHJvZHVjdCAlcyIgJQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICh0ZXN0X3R5cGUsIHByb2R1Y3QpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0X2xv
YWRlci5kaXNhYmxlZF90ZXN0c1t0ZXN0X3R5cGVdOgorICAgICAgICAgICAgICAgICAgICAgICAg
bG9nZ2VyLnRlc3Rfc3RhcnQodGVzdC5pZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dl
ci50ZXN0X2VuZCh0ZXN0LmlkLCBzdGF0dXM9IlNLSVAiKQorCisgICAgICAgICAgICAgICAgICAg
IHdpdGggTWFuYWdlckdyb3VwKCJ3ZWItcGxhdGZvcm0tdGVzdHMiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBrd2FyZ3NbInByb2Nlc3NlcyJdLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3NvdXJjZV9jbHMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rfc291cmNlX2t3YXJncywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJvd3Nlcl9jbHMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyb3dzZXJfa3dhcmdzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBleGVjdXRvcl9jbHMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGV4ZWN1dG9yX2t3YXJncywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAga3dhcmdzWyJwYXVzZV9hZnRlcl90ZXN0Il0sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGt3YXJnc1sicGF1c2Vfb25fdW5leHBlY3RlZCJdLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2FyZ3NbInJlc3RhcnRfb25f
dW5leHBlY3RlZCJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2Fy
Z3NbImRlYnVnX2luZm8iXSkgYXMgbWFuYWdlcl9ncm91cDoKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYW5hZ2VyX2dyb3VwLnJ1bih0
ZXN0X3R5cGUsIHRlc3RfbG9hZGVyLnRlc3RzKQorICAgICAgICAgICAgICAgICAgICAgICAgZXhj
ZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dl
ci5jcml0aWNhbCgiTWFpbiB0aHJlYWQgZ290IHNpZ25hbCIpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWFuYWdlcl9ncm91cC5zdG9wKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByYWlzZQorICAgICAgICAgICAgICAgICAgICB1bmV4cGVjdGVkX2NvdW50ICs9IG1hbmFnZXJf
Z3JvdXAudW5leHBlY3RlZF9jb3VudCgpCisKKyAgICAgICAgICAgICAgICB1bmV4cGVjdGVkX3Rv
dGFsICs9IHVuZXhwZWN0ZWRfY291bnQKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiR290
ICVpIHVuZXhwZWN0ZWQgcmVzdWx0cyIgJSB1bmV4cGVjdGVkX2NvdW50KQorICAgICAgICAgICAg
ICAgIGlmIHJlcGVhdF91bnRpbF91bmV4cGVjdGVkIGFuZCB1bmV4cGVjdGVkX3RvdGFsID4gMDoK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBsb2dnZXIuc3VpdGVf
ZW5kKCkKKyAgICByZXR1cm4gdW5leHBlY3RlZF90b3RhbCA9PSAwCisKK2RlZiBzdGFydCgqKmt3
YXJncyk6CisgICAgaWYga3dhcmdzWyJsaXN0X3Rlc3RfZ3JvdXBzIl06CisgICAgICAgIGxpc3Rf
dGVzdF9ncm91cHMoKiprd2FyZ3MpCisgICAgZWxpZiBrd2FyZ3NbImxpc3RfZGlzYWJsZWQiXToK
KyAgICAgICAgbGlzdF9kaXNhYmxlZCgqKmt3YXJncykKKyAgICBlbGlmIGt3YXJnc1sibGlzdF90
ZXN0cyJdOgorICAgICAgICBsaXN0X3Rlc3RzKCoqa3dhcmdzKQorICAgIGVsc2U6CisgICAgICAg
IHJldHVybiBub3QgcnVuX3Rlc3RzKCoqa3dhcmdzKQorCitkZWYgbWFpbigpOgorICAgICIiIk1h
aW4gZW50cnkgcG9pbnQgd2hlbiBjYWxsaW5nIGZyb20gdGhlIGNvbW1hbmQgbGluZSIiIgorICAg
IGt3YXJncyA9IHdwdGNvbW1hbmRsaW5lLnBhcnNlX2FyZ3MoKQorCisgICAgdHJ5OgorICAgICAg
ICBpZiBrd2FyZ3NbInByZWZzX3Jvb3QiXSBpcyBOb25lOgorICAgICAgICAgICAga3dhcmdzWyJw
cmVmc19yb290Il0gPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKGhlcmUsICJwcmVmcyIp
KQorCisgICAgICAgIHNldHVwX2xvZ2dpbmcoa3dhcmdzLCB7InJhdyI6IHN5cy5zdGRvdXR9KQor
CisgICAgICAgIHJldHVybiBzdGFydCgqKmt3YXJncykKKyAgICBleGNlcHQgRXhjZXB0aW9uOgor
ICAgICAgICBpZiBrd2FyZ3NbInBkYiJdOgorICAgICAgICAgICAgaW1wb3J0IHBkYiwgdHJhY2Vi
YWNrCisgICAgICAgICAgICBwcmludCB0cmFjZWJhY2suZm9ybWF0X2V4YygpCisgICAgICAgICAg
ICBwZGIucG9zdF9tb3J0ZW0oKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UKZGlm
ZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0
cnVubmVyL3dwdHRlc3QucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvd3B0
cnVubmVyL3dwdHJ1bm5lci93cHR0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi44NjMyMGY4ZmY4NAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3Rz
L2ltcG9ydGVkL3czYy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3dwdHRlc3QucHkKQEAgLTAs
MCArMSwzNzUgQEAKK2ltcG9ydCBvcworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRp
Y3QKKworZnJvbSB3cHRtYW5pZmVzdC5wYXJzZXIgaW1wb3J0IGF0b21zCisKK2F0b21fcmVzZXQg
PSBhdG9tc1siUmVzZXQiXQorZW5hYmxlZF90ZXN0cyA9IHNldChbInRlc3RoYXJuZXNzIiwgInJl
ZnRlc3QiLCAid2RzcGVjIl0pCisKKworY2xhc3MgUmVzdWx0KG9iamVjdCk6CisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIHN0YXR1cywgbWVzc2FnZSwgZXhwZWN0ZWQ9Tm9uZSwgZXh0cmE9Tm9uZSk6
CisgICAgICAgIGlmIHN0YXR1cyBub3QgaW4gc2VsZi5zdGF0dXNlczoKKyAgICAgICAgICAgIHJh
aXNlIFZhbHVlRXJyb3IoIlVucmVjb2duaXNlZCBzdGF0dXMgJXMiICUgc3RhdHVzKQorICAgICAg
ICBzZWxmLnN0YXR1cyA9IHN0YXR1cworICAgICAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlCisg
ICAgICAgIHNlbGYuZXhwZWN0ZWQgPSBleHBlY3RlZAorICAgICAgICBzZWxmLmV4dHJhID0gZXh0
cmEKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICI8JXMuJXMgJXM+
IiAlIChzZWxmLl9fbW9kdWxlX18sIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBzZWxmLnN0YXR1
cykKKworCitjbGFzcyBTdWJ0ZXN0UmVzdWx0KG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNl
bGYsIG5hbWUsIHN0YXR1cywgbWVzc2FnZSwgc3RhY2s9Tm9uZSwgZXhwZWN0ZWQ9Tm9uZSk6Cisg
ICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgaWYgc3RhdHVzIG5vdCBpbiBzZWxmLnN0
YXR1c2VzOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiVW5yZWNvZ25pc2VkIHN0YXR1
cyAlcyIgJSBzdGF0dXMpCisgICAgICAgIHNlbGYuc3RhdHVzID0gc3RhdHVzCisgICAgICAgIHNl
bGYubWVzc2FnZSA9IG1lc3NhZ2UKKyAgICAgICAgc2VsZi5zdGFjayA9IHN0YWNrCisgICAgICAg
IHNlbGYuZXhwZWN0ZWQgPSBleHBlY3RlZAorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAg
ICAgICByZXR1cm4gIjwlcy4lcyAlcyAlcz4iICUgKHNlbGYuX19tb2R1bGVfXywgc2VsZi5fX2Ns
YXNzX18uX19uYW1lX18sIHNlbGYubmFtZSwgc2VsZi5zdGF0dXMpCisKKworY2xhc3MgVGVzdGhh
cm5lc3NSZXN1bHQoUmVzdWx0KToKKyAgICBkZWZhdWx0X2V4cGVjdGVkID0gIk9LIgorICAgIHN0
YXR1c2VzID0gc2V0KFsiT0siLCAiRVJST1IiLCAiVElNRU9VVCIsICJFWFRFUk5BTC1USU1FT1VU
IiwgIkNSQVNIIl0pCisKKworY2xhc3MgVGVzdGhhcm5lc3NTdWJ0ZXN0UmVzdWx0KFN1YnRlc3RS
ZXN1bHQpOgorICAgIGRlZmF1bHRfZXhwZWN0ZWQgPSAiUEFTUyIKKyAgICBzdGF0dXNlcyA9IHNl
dChbIlBBU1MiLCAiRkFJTCIsICJUSU1FT1VUIiwgIk5PVFJVTiJdKQorCisKK2NsYXNzIFJlZnRl
c3RSZXN1bHQoUmVzdWx0KToKKyAgICBkZWZhdWx0X2V4cGVjdGVkID0gIlBBU1MiCisgICAgc3Rh
dHVzZXMgPSBzZXQoWyJQQVNTIiwgIkZBSUwiLCAiRVJST1IiLCAiVElNRU9VVCIsICJFWFRFUk5B
TC1USU1FT1VUIiwgIkNSQVNIIl0pCisKKworY2xhc3MgV2RzcGVjUmVzdWx0KFJlc3VsdCk6Cisg
ICAgZGVmYXVsdF9leHBlY3RlZCA9ICJPSyIKKyAgICBzdGF0dXNlcyA9IHNldChbIk9LIiwgIkVS
Uk9SIiwgIlRJTUVPVVQiLCAiRVhURVJOQUwtVElNRU9VVCIsICJDUkFTSCJdKQorCisKK2NsYXNz
IFdkc3BlY1N1YnRlc3RSZXN1bHQoU3VidGVzdFJlc3VsdCk6CisgICAgZGVmYXVsdF9leHBlY3Rl
ZCA9ICJQQVNTIgorICAgIHN0YXR1c2VzID0gc2V0KFsiUEFTUyIsICJGQUlMIiwgIkVSUk9SIl0p
CisKKworZGVmIGdldF9ydW5faW5mbyhtZXRhZGF0YV9yb290LCBwcm9kdWN0LCAqKmt3YXJncyk6
CisgICAgcmV0dXJuIFJ1bkluZm8obWV0YWRhdGFfcm9vdCwgcHJvZHVjdCwgKiprd2FyZ3MpCisK
KworY2xhc3MgUnVuSW5mbyhkaWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWV0YWRhdGFf
cm9vdCwgcHJvZHVjdCwgZGVidWcsIGV4dHJhcz1Ob25lKToKKyAgICAgICAgaW1wb3J0IG1vemlu
Zm8KKworICAgICAgICBzZWxmLl91cGRhdGVfbW96aW5mbyhtZXRhZGF0YV9yb290KQorICAgICAg
ICBzZWxmLnVwZGF0ZShtb3ppbmZvLmluZm8pCisgICAgICAgIHNlbGZbInByb2R1Y3QiXSA9IHBy
b2R1Y3QKKyAgICAgICAgaWYgZGVidWcgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmWyJk
ZWJ1ZyJdID0gZGVidWcKKyAgICAgICAgZWxpZiAiZGVidWciIG5vdCBpbiBzZWxmOgorICAgICAg
ICAgICAgIyBEZWZhdWx0IHRvIHJlbGVhc2UKKyAgICAgICAgICAgIHNlbGZbImRlYnVnIl0gPSBG
YWxzZQorICAgICAgICBpZiBwcm9kdWN0ID09ICJmaXJlZm94IiBhbmQgInN0eWxvIiBub3QgaW4g
c2VsZjoKKyAgICAgICAgICAgIHNlbGZbInN0eWxvIl0gPSBGYWxzZQorICAgICAgICBpZiAiU1RZ
TE9fRk9SQ0VfRU5BQkxFRCIgaW4gb3MuZW52aXJvbjoKKyAgICAgICAgICAgIHNlbGZbInN0eWxv
Il0gPSBUcnVlCisgICAgICAgIGlmICJTVFlMT19GT1JDRV9ESVNBQkxFRCIgaW4gb3MuZW52aXJv
bjoKKyAgICAgICAgICAgIHNlbGZbInN0eWxvIl0gPSBGYWxzZQorICAgICAgICBpZiBleHRyYXMg
aXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLnVwZGF0ZShleHRyYXMpCisKKyAgICBkZWYg
X3VwZGF0ZV9tb3ppbmZvKHNlbGYsIG1ldGFkYXRhX3Jvb3QpOgorICAgICAgICAiIiJBZGQgZXh0
cmEgYnVpbGQgaW5mb3JtYXRpb24gZnJvbSBhIG1vemluZm8uanNvbiBmaWxlIGluIGEgcGFyZW50
CisgICAgICAgIGRpcmVjdG9yeSIiIgorICAgICAgICBpbXBvcnQgbW96aW5mbworCisgICAgICAg
IHBhdGggPSBtZXRhZGF0YV9yb290CisgICAgICAgIGRpcnMgPSBzZXQoKQorICAgICAgICB3aGls
ZSBwYXRoICE9IG9zLnBhdGguZXhwYW5kdXNlcignficpOgorICAgICAgICAgICAgaWYgcGF0aCBp
biBkaXJzOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBkaXJzLmFkZChzdHIo
cGF0aCkpCisgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5zcGxpdChwYXRoKVswXQorCisgICAg
ICAgIG1vemluZm8uZmluZF9hbmRfdXBkYXRlX2Zyb21fanNvbigqZGlycykKKworCitjbGFzcyBU
ZXN0KG9iamVjdCk6CisKKyAgICByZXN1bHRfY2xzID0gTm9uZQorICAgIHN1YnRlc3RfcmVzdWx0
X2NscyA9IE5vbmUKKyAgICB0ZXN0X3R5cGUgPSBOb25lCisKKyAgICBkZWZhdWx0X3RpbWVvdXQg
PSAxMCAgIyBzZWNvbmRzCisgICAgbG9uZ190aW1lb3V0ID0gNjAgICMgc2Vjb25kcworCisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RzX3Jvb3QsIHVybCwgaW5oZXJpdF9tZXRhZGF0YSwgdGVz
dF9tZXRhZGF0YSwKKyAgICAgICAgICAgICAgICAgdGltZW91dD1Ob25lLCBwYXRoPU5vbmUsIHBy
b3RvY29sPSJodHRwIik6CisgICAgICAgIHNlbGYudGVzdHNfcm9vdCA9IHRlc3RzX3Jvb3QKKyAg
ICAgICAgc2VsZi51cmwgPSB1cmwKKyAgICAgICAgc2VsZi5faW5oZXJpdF9tZXRhZGF0YSA9IGlu
aGVyaXRfbWV0YWRhdGEKKyAgICAgICAgc2VsZi5fdGVzdF9tZXRhZGF0YSA9IHRlc3RfbWV0YWRh
dGEKKyAgICAgICAgc2VsZi50aW1lb3V0ID0gdGltZW91dCBpZiB0aW1lb3V0IGlzIG5vdCBOb25l
IGVsc2Ugc2VsZi5kZWZhdWx0X3RpbWVvdXQKKyAgICAgICAgc2VsZi5wYXRoID0gcGF0aAorICAg
ICAgICBzZWxmLmVudmlyb25tZW50ID0geyJwcm90b2NvbCI6IHByb3RvY29sLCAicHJlZnMiOiBz
ZWxmLnByZWZzfQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVy
biBzZWxmLmlkID09IG90aGVyLmlkCisKKyAgICBkZWYgdXBkYXRlX21ldGFkYXRhKHNlbGYsIG1l
dGFkYXRhPU5vbmUpOgorICAgICAgICBpZiBtZXRhZGF0YSBpcyBOb25lOgorICAgICAgICAgICAg
bWV0YWRhdGEgPSB7fQorICAgICAgICByZXR1cm4gbWV0YWRhdGEKKworICAgIEBjbGFzc21ldGhv
ZAorICAgIGRlZiBmcm9tX21hbmlmZXN0KGNscywgbWFuaWZlc3RfaXRlbSwgaW5oZXJpdF9tZXRh
ZGF0YSwgdGVzdF9tZXRhZGF0YSk6CisgICAgICAgIHRpbWVvdXQgPSBjbHMubG9uZ190aW1lb3V0
IGlmIG1hbmlmZXN0X2l0ZW0udGltZW91dCA9PSAibG9uZyIgZWxzZSBjbHMuZGVmYXVsdF90aW1l
b3V0CisgICAgICAgIHByb3RvY29sID0gImh0dHBzIiBpZiBoYXNhdHRyKG1hbmlmZXN0X2l0ZW0s
ICJodHRwcyIpIGFuZCBtYW5pZmVzdF9pdGVtLmh0dHBzIGVsc2UgImh0dHAiCisgICAgICAgIHJl
dHVybiBjbHMobWFuaWZlc3RfaXRlbS5zb3VyY2VfZmlsZS50ZXN0c19yb290LAorICAgICAgICAg
ICAgICAgICAgIG1hbmlmZXN0X2l0ZW0udXJsLAorICAgICAgICAgICAgICAgICAgIGluaGVyaXRf
bWV0YWRhdGEsCisgICAgICAgICAgICAgICAgICAgdGVzdF9tZXRhZGF0YSwKKyAgICAgICAgICAg
ICAgICAgICB0aW1lb3V0PXRpbWVvdXQsCisgICAgICAgICAgICAgICAgICAgcGF0aD1tYW5pZmVz
dF9pdGVtLnNvdXJjZV9maWxlLnBhdGgsCisgICAgICAgICAgICAgICAgICAgcHJvdG9jb2w9cHJv
dG9jb2wpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaWQoc2VsZik6CisgICAgICAgIHJldHVy
biBzZWxmLnVybAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGtleXMoc2VsZik6CisgICAgICAg
IHJldHVybiB0dXBsZSgpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgYWJzX3BhdGgoc2VsZik6
CisgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi50ZXN0c19yb290LCBzZWxmLnBhdGgp
CisKKyAgICBkZWYgX2dldF9tZXRhZGF0YShzZWxmLCBzdWJ0ZXN0PU5vbmUpOgorICAgICAgICBp
ZiBzZWxmLl90ZXN0X21ldGFkYXRhIGlzIG5vdCBOb25lIGFuZCBzdWJ0ZXN0IGlzIG5vdCBOb25l
OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3Rlc3RfbWV0YWRhdGEuZ2V0X3N1YnRlc3Qoc3Vi
dGVzdCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl90ZXN0X21ldGFk
YXRhCisKKyAgICBkZWYgaXRlcm1ldGEoc2VsZiwgc3VidGVzdD1Ob25lKToKKyAgICAgICAgZm9y
IG1ldGFkYXRhIGluIHNlbGYuX2luaGVyaXRfbWV0YWRhdGE6CisgICAgICAgICAgICB5aWVsZCBt
ZXRhZGF0YQorCisgICAgICAgIGlmIHNlbGYuX3Rlc3RfbWV0YWRhdGEgaXMgbm90IE5vbmU6Cisg
ICAgICAgICAgICB5aWVsZCBzZWxmLl9nZXRfbWV0YWRhdGEoKQorICAgICAgICAgICAgaWYgc3Vi
dGVzdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzdWJ0ZXN0X21ldGEgPSBzZWxmLl9n
ZXRfbWV0YWRhdGEoc3VidGVzdCkKKyAgICAgICAgICAgICAgICBpZiBzdWJ0ZXN0X21ldGEgaXMg
bm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIHN1YnRlc3RfbWV0YQorCisgICAg
ZGVmIGRpc2FibGVkKHNlbGYsIHN1YnRlc3Q9Tm9uZSk6CisgICAgICAgIGZvciBtZXRhIGluIHNl
bGYuaXRlcm1ldGEoc3VidGVzdCk6CisgICAgICAgICAgICBkaXNhYmxlZCA9IG1ldGEuZGlzYWJs
ZWQKKyAgICAgICAgICAgIGlmIGRpc2FibGVkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAg
IHJldHVybiBkaXNhYmxlZAorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgQHByb3BlcnR5Cisg
ICAgZGVmIHJlc3RhcnRfYWZ0ZXIoc2VsZik6CisgICAgICAgIGZvciBtZXRhIGluIHNlbGYuaXRl
cm1ldGEoTm9uZSk6CisgICAgICAgICAgICByZXN0YXJ0X2FmdGVyID0gbWV0YS5yZXN0YXJ0X2Fm
dGVyCisgICAgICAgICAgICBpZiByZXN0YXJ0X2FmdGVyIGlzIG5vdCBOb25lOgorICAgICAgICAg
ICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgQHByb3BlcnR5
CisgICAgZGVmIGxlYWtzKHNlbGYpOgorICAgICAgICBmb3IgbWV0YSBpbiBzZWxmLml0ZXJtZXRh
KE5vbmUpOgorICAgICAgICAgICAgbGVha3MgPSBtZXRhLmxlYWtzCisgICAgICAgICAgICBpZiBs
ZWFrcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbGVha3MKKyAgICAgICAg
cmV0dXJuIEZhbHNlCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgdGFncyhzZWxmKToKKyAgICAg
ICAgdGFncyA9IHNldCgpCisgICAgICAgIGZvciBtZXRhIGluIHNlbGYuaXRlcm1ldGEoKToKKyAg
ICAgICAgICAgIG1ldGFfdGFncyA9IG1ldGEudGFncworICAgICAgICAgICAgaWYgYXRvbV9yZXNl
dCBpbiBtZXRhX3RhZ3M6CisgICAgICAgICAgICAgICAgdGFncyA9IG1ldGFfdGFncy5jb3B5KCkK
KyAgICAgICAgICAgICAgICB0YWdzLnJlbW92ZShhdG9tX3Jlc2V0KQorICAgICAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgICAgICB0YWdzIHw9IG1ldGFfdGFncworCisgICAgICAgIHRhZ3MuYWRk
KCJkaXI6JXMiICUgc2VsZi5pZC5sc3RyaXAoIi8iKS5zcGxpdCgiLyIpWzBdKQorCisgICAgICAg
IHJldHVybiB0YWdzCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcHJlZnMoc2VsZik6CisgICAg
ICAgIHByZWZzID0ge30KKyAgICAgICAgZm9yIG1ldGEgaW4gc2VsZi5pdGVybWV0YSgpOgorICAg
ICAgICAgICAgbWV0YV9wcmVmcyA9IG1ldGEucHJlZnMKKyAgICAgICAgICAgIGlmIGF0b21fcmVz
ZXQgaW4gcHJlZnM6CisgICAgICAgICAgICAgICAgcHJlZnMgPSBtZXRhX3ByZWZzLmNvcHkoKQor
ICAgICAgICAgICAgICAgIGRlbCBwcmVmc1thdG9tX3Jlc2V0XQorICAgICAgICAgICAgZWxzZToK
KyAgICAgICAgICAgICAgICBwcmVmcy51cGRhdGUobWV0YV9wcmVmcykKKyAgICAgICAgcmV0dXJu
IHByZWZzCisKKyAgICBkZWYgZXhwZWN0ZWQoc2VsZiwgc3VidGVzdD1Ob25lKToKKyAgICAgICAg
aWYgc3VidGVzdCBpcyBOb25lOgorICAgICAgICAgICAgZGVmYXVsdCA9IHNlbGYucmVzdWx0X2Ns
cy5kZWZhdWx0X2V4cGVjdGVkCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkZWZhdWx0ID0g
c2VsZi5zdWJ0ZXN0X3Jlc3VsdF9jbHMuZGVmYXVsdF9leHBlY3RlZAorCisgICAgICAgIG1ldGFk
YXRhID0gc2VsZi5fZ2V0X21ldGFkYXRhKHN1YnRlc3QpCisgICAgICAgIGlmIG1ldGFkYXRhIGlz
IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gZGVmYXVsdAorCisgICAgICAgIHRyeToKKyAgICAg
ICAgICAgIHJldHVybiBtZXRhZGF0YS5nZXQoImV4cGVjdGVkIikKKyAgICAgICAgZXhjZXB0IEtl
eUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHQKKworICAgIGRlZiBfX3JlcHJfXyhz
ZWxmKToKKyAgICAgICAgcmV0dXJuICI8JXMuJXMgJXM+IiAlIChzZWxmLl9fbW9kdWxlX18sIHNl
bGYuX19jbGFzc19fLl9fbmFtZV9fLCBzZWxmLmlkKQorCisKK2NsYXNzIFRlc3RoYXJuZXNzVGVz
dChUZXN0KToKKyAgICByZXN1bHRfY2xzID0gVGVzdGhhcm5lc3NSZXN1bHQKKyAgICBzdWJ0ZXN0
X3Jlc3VsdF9jbHMgPSBUZXN0aGFybmVzc1N1YnRlc3RSZXN1bHQKKyAgICB0ZXN0X3R5cGUgPSAi
dGVzdGhhcm5lc3MiCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaWQoc2VsZik6CisgICAgICAg
IHJldHVybiBzZWxmLnVybAorCisKK2NsYXNzIE1hbnVhbFRlc3QoVGVzdCk6CisgICAgdGVzdF90
eXBlID0gIm1hbnVhbCIKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBpZChzZWxmKToKKyAgICAg
ICAgcmV0dXJuIHNlbGYudXJsCisKKworY2xhc3MgUmVmdGVzdFRlc3QoVGVzdCk6CisgICAgcmVz
dWx0X2NscyA9IFJlZnRlc3RSZXN1bHQKKyAgICB0ZXN0X3R5cGUgPSAicmVmdGVzdCIKKworICAg
IGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0c19yb290LCB1cmwsIGluaGVyaXRfbWV0YWRhdGEsIHRl
c3RfbWV0YWRhdGEsIHJlZmVyZW5jZXMsCisgICAgICAgICAgICAgICAgIHRpbWVvdXQ9Tm9uZSwg
cGF0aD1Ob25lLCB2aWV3cG9ydF9zaXplPU5vbmUsIGRwaT1Ob25lLCBwcm90b2NvbD0iaHR0cCIp
OgorICAgICAgICBUZXN0Ll9faW5pdF9fKHNlbGYsIHRlc3RzX3Jvb3QsIHVybCwgaW5oZXJpdF9t
ZXRhZGF0YSwgdGVzdF9tZXRhZGF0YSwgdGltZW91dCwKKyAgICAgICAgICAgICAgICAgICAgICBw
YXRoLCBwcm90b2NvbCkKKworICAgICAgICBmb3IgXywgcmVmX3R5cGUgaW4gcmVmZXJlbmNlczoK
KyAgICAgICAgICAgIGlmIHJlZl90eXBlIG5vdCBpbiAoIj09IiwgIiE9Iik6CisgICAgICAgICAg
ICAgICAgcmFpc2UgVmFsdWVFcnJvcgorCisgICAgICAgIHNlbGYucmVmZXJlbmNlcyA9IHJlZmVy
ZW5jZXMKKyAgICAgICAgc2VsZi52aWV3cG9ydF9zaXplID0gdmlld3BvcnRfc2l6ZQorICAgICAg
ICBzZWxmLmRwaSA9IGRwaQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZyb21fbWFuaWZl
c3QoY2xzLAorICAgICAgICAgICAgICAgICAgICAgIG1hbmlmZXN0X3Rlc3QsCisgICAgICAgICAg
ICAgICAgICAgICAgaW5oZXJpdF9tZXRhZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICB0ZXN0
X21ldGFkYXRhLAorICAgICAgICAgICAgICAgICAgICAgIG5vZGVzPU5vbmUsCisgICAgICAgICAg
ICAgICAgICAgICAgcmVmZXJlbmNlc19zZWVuPU5vbmUpOgorCisgICAgICAgIHRpbWVvdXQgPSBj
bHMubG9uZ190aW1lb3V0IGlmIG1hbmlmZXN0X3Rlc3QudGltZW91dCA9PSAibG9uZyIgZWxzZSBj
bHMuZGVmYXVsdF90aW1lb3V0CisKKyAgICAgICAgaWYgbm9kZXMgaXMgTm9uZToKKyAgICAgICAg
ICAgIG5vZGVzID0ge30KKyAgICAgICAgaWYgcmVmZXJlbmNlc19zZWVuIGlzIE5vbmU6CisgICAg
ICAgICAgICByZWZlcmVuY2VzX3NlZW4gPSBzZXQoKQorCisgICAgICAgIHVybCA9IG1hbmlmZXN0
X3Rlc3QudXJsCisKKyAgICAgICAgbm9kZSA9IGNscyhtYW5pZmVzdF90ZXN0LnNvdXJjZV9maWxl
LnRlc3RzX3Jvb3QsCisgICAgICAgICAgICAgICAgICAgbWFuaWZlc3RfdGVzdC51cmwsCisgICAg
ICAgICAgICAgICAgICAgaW5oZXJpdF9tZXRhZGF0YSwKKyAgICAgICAgICAgICAgICAgICB0ZXN0
X21ldGFkYXRhLAorICAgICAgICAgICAgICAgICAgIFtdLAorICAgICAgICAgICAgICAgICAgIHRp
bWVvdXQ9dGltZW91dCwKKyAgICAgICAgICAgICAgICAgICBwYXRoPW1hbmlmZXN0X3Rlc3QucGF0
aCwKKyAgICAgICAgICAgICAgICAgICB2aWV3cG9ydF9zaXplPW1hbmlmZXN0X3Rlc3Qudmlld3Bv
cnRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICBkcGk9bWFuaWZlc3RfdGVzdC5kcGksCisgICAg
ICAgICAgICAgICAgICAgcHJvdG9jb2w9Imh0dHBzIiBpZiBoYXNhdHRyKG1hbmlmZXN0X3Rlc3Qs
ICJodHRwcyIpIGFuZCBtYW5pZmVzdF90ZXN0Lmh0dHBzIGVsc2UgImh0dHAiKQorCisgICAgICAg
IG5vZGVzW3VybF0gPSBub2RlCisKKyAgICAgICAgZm9yIHJlZl91cmwsIHJlZl90eXBlIGluIG1h
bmlmZXN0X3Rlc3QucmVmZXJlbmNlczoKKyAgICAgICAgICAgIGNvbXBhcmlzb25fa2V5ID0gKHJl
Zl90eXBlLCkgKyB0dXBsZShzb3J0ZWQoW3VybCwgcmVmX3VybF0pKQorICAgICAgICAgICAgaWYg
cmVmX3VybCBpbiBub2RlczoKKyAgICAgICAgICAgICAgICBtYW5pZmVzdF9ub2RlID0gcmVmX3Vy
bAorICAgICAgICAgICAgICAgIGlmIGNvbXBhcmlzb25fa2V5IGluIHJlZmVyZW5jZXNfc2VlbjoK
KyAgICAgICAgICAgICAgICAgICAgIyBXZSBoYXZlIHJlYWNoZWQgYSBjeWNsZSBzbyBzdG9wIGhl
cmUKKyAgICAgICAgICAgICAgICAgICAgIyBOb3RlIHRoYXQganVzdCBzZWVpbmcgYSBub2RlIGZv
ciB0aGUgc2Vjb25kIHRpbWUgaXMgbm90CisgICAgICAgICAgICAgICAgICAgICMgZW5vdWdoIHRv
IGRldGVjdCBhIGN5Y2xlIGJlY2F1c2UKKyAgICAgICAgICAgICAgICAgICAgIyBBICE9IEIgIT0g
QyAhPSBBIG11c3QgaW5jbHVkZSBDICE9IEEKKyAgICAgICAgICAgICAgICAgICAgIyBidXQgQSA9
PSBCID09IEEgc2hvdWxkIG5vdCBpbmNsdWRlIHRoZSByZWR1bmRhbnQgQiA9PSBBLgorICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICByZWZlcmVuY2VzX3NlZW4uYWRk
KGNvbXBhcmlzb25fa2V5KQorCisgICAgICAgICAgICBtYW5pZmVzdF9ub2RlID0gbWFuaWZlc3Rf
dGVzdC5tYW5pZmVzdC5nZXRfcmVmZXJlbmNlKHJlZl91cmwpCisgICAgICAgICAgICBpZiBtYW5p
ZmVzdF9ub2RlOgorICAgICAgICAgICAgICAgIHJlZmVyZW5jZSA9IFJlZnRlc3RUZXN0LmZyb21f
bWFuaWZlc3QobWFuaWZlc3Rfbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFtdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlc19zZWVuKQorICAgICAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZWZlcmVuY2UgPSBSZWZ0ZXN0VGVzdChtYW5p
ZmVzdF90ZXN0LnNvdXJjZV9maWxlLnRlc3RzX3Jvb3QsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVmX3VybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBO
b25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdKQorCisgICAg
ICAgICAgICBub2RlLnJlZmVyZW5jZXMuYXBwZW5kKChyZWZlcmVuY2UsIHJlZl90eXBlKSkKKwor
ICAgICAgICByZXR1cm4gbm9kZQorCisgICAgZGVmIHVwZGF0ZV9tZXRhZGF0YShzZWxmLCBtZXRh
ZGF0YSk6CisgICAgICAgIGlmIG5vdCAidXJsX2NvdW50IiBpbiBtZXRhZGF0YToKKyAgICAgICAg
ICAgIG1ldGFkYXRhWyJ1cmxfY291bnQiXSA9IGRlZmF1bHRkaWN0KGludCkKKyAgICAgICAgZm9y
IHJlZmVyZW5jZSwgXyBpbiBzZWxmLnJlZmVyZW5jZXM6CisgICAgICAgICAgICAjIFdlIGFzc3Vt
ZSBhIG5haXZlIGltcGxlbWVudGF0aW9uIGluIHdoaWNoIGEgdXJsIHdpdGggbXVsdGlwbGUKKyAg
ICAgICAgICAgICMgcG9zc2libGUgc2NyZWVuc2hvdHMgd2lsbCBuZWVkIHRvIHRha2UgYm90aCB0
aGUgbGhzIGFuZCByaHMgc2NyZWVuc2hvdHMKKyAgICAgICAgICAgICMgZm9yIGVhY2ggcG9zc2li
bGUgbWF0Y2gKKyAgICAgICAgICAgIG1ldGFkYXRhWyJ1cmxfY291bnQiXVsoc2VsZi5lbnZpcm9u
bWVudFsicHJvdG9jb2wiXSwgcmVmZXJlbmNlLnVybCldICs9IDEKKyAgICAgICAgICAgIHJlZmVy
ZW5jZS51cGRhdGVfbWV0YWRhdGEobWV0YWRhdGEpCisgICAgICAgIHJldHVybiBtZXRhZGF0YQor
CisgICAgQHByb3BlcnR5CisgICAgZGVmIGlkKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi51
cmwKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBrZXlzKHNlbGYpOgorICAgICAgICByZXR1cm4g
KCJyZWZ0eXBlIiwgInJlZnVybCIpCisKKworY2xhc3MgV2RzcGVjVGVzdChUZXN0KToKKworICAg
IHJlc3VsdF9jbHMgPSBXZHNwZWNSZXN1bHQKKyAgICBzdWJ0ZXN0X3Jlc3VsdF9jbHMgPSBXZHNw
ZWNTdWJ0ZXN0UmVzdWx0CisgICAgdGVzdF90eXBlID0gIndkc3BlYyIKKworICAgIGRlZmF1bHRf
dGltZW91dCA9IDI1CisgICAgbG9uZ190aW1lb3V0ID0gMTIwCisKKworbWFuaWZlc3RfdGVzdF9j
bHMgPSB7InJlZnRlc3QiOiBSZWZ0ZXN0VGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICJ0ZXN0
aGFybmVzcyI6IFRlc3RoYXJuZXNzVGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICJtYW51YWwi
OiBNYW51YWxUZXN0LAorICAgICAgICAgICAgICAgICAgICAgIndkc3BlYyI6IFdkc3BlY1Rlc3R9
CisKKworZGVmIGZyb21fbWFuaWZlc3QobWFuaWZlc3RfdGVzdCwgaW5oZXJpdF9tZXRhZGF0YSwg
dGVzdF9tZXRhZGF0YSk6CisgICAgdGVzdF9jbHMgPSBtYW5pZmVzdF90ZXN0X2Nsc1ttYW5pZmVz
dF90ZXN0Lml0ZW1fdHlwZV0KKyAgICByZXR1cm4gdGVzdF9jbHMuZnJvbV9tYW5pZmVzdChtYW5p
ZmVzdF90ZXN0LCBpbmhlcml0X21ldGFkYXRhLCB0ZXN0X21ldGFkYXRhKQpkaWZmIC0tZ2l0IGEv
V2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci9PV05FUlMgYi9XZWJEcml2ZXJU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL09XTkVSUwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uYTk5NzI2MzVmOTgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2
ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL09XTkVSUwpAQCAtMCwwICsxLDUgQEAKK0Bh
bmRyZWFzdHQKK0BsdWtlaXMKK0BBdXRvbWF0ZWRUZXN0ZXIKK0BzaHM5NmMKK0BtanpmZnIKZGlm
ZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvUkVBRE1FLm1k
IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci9SRUFETUUubWQKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjc4ZDlhYmE3YjliCi0tLSAvZGV2L251
bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci9SRUFETUUubWQK
QEAgLTAsMCArMSwxNyBAQAorIyBXZWJEcml2ZXIgc3BlY2lmaWNhdGlvbiB0ZXN0cworCitIZXJl
aW4gbGllcyBhIHNldCBvZiBjb25mb3JtYW5jZSB0ZXN0cworZm9yIHRoZSBXM0Mgd2ViIGJyb3dz
ZXIgYXV0b21hdGlvbiBzcGVjaWZpY2F0aW9uCitrbm93biBhcyBbV2ViRHJpdmVyXShodHRwOi8v
dzNjLmdpdGh1Yi5pby93ZWJkcml2ZXIvd2ViZHJpdmVyLXNwZWMuaHRtbCkuCitUaGUgcHVycG9z
ZSBvZiB0aGVzZSB0ZXN0cyBpcyBkZXRlcm1pbmUgaW1wbGVtZW50YXRpb24gY29tcGxpYW5jZQor
c28gdGhhdCBkaWZmZXJlbnQgZHJpdmVyIGltcGxlbWVudGF0aW9ucyBjYW4gZGV0ZXJtaW5lCit3
aGV0aGVyIHRoZXkgbWVldCB0aGUgcmVjb2duaXplZCBzdGFuZGFyZC4KKworIyMgQ2hhcHRlcnMg
b2YgdGhlIFNwZWMgdGhhdCBzdGlsbCBuZWVkIHRlc3RzCisKK1dlIGFyZSB1c2luZyBhIFt0cmFj
a2luZyBzcHJlYWRzaGVldF0oaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vc3ByZWFkc2hlZXRzL2Qv
MUdVS19zZFkyY3Y1OVZBSk5EeFpRSWZ5cG5PcGFwU1FoTWpmY0o5V2M0MlUvZWRpdCNnaWQ9MCkK
K3RvIGNvb3JkaW5hdGUgd29yayBvbiB0aGVzZSB0ZXN0cy4gUGxlYXNlIGxvb2sgdGhlcmUgdG8g
c2VlIHdobworaXMgd29ya2luZyBvbiB3aGF0LCBhbmQgd2hpY2ggYXJlYXMgYXJlIGN1cnJlbnRs
eSB1bmRlci10ZXN0ZWQuCisKK1RoZSBzcGVjIGNvbnRyaWJ1dG9ycyBhbmQgZWRpdG9ycyBjYW4g
ZnJlcXVlbnRseSBiZSBmb3VuZCBvbiB0aGUgVzNDCisjd2ViZHJpdmVyIElSQyBjaGFubmVsLgpk
aWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci9lbGVtZW50
cy9hY3RpdmUucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL2VsZW1l
bnRzL2FjdGl2ZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZjYz
OTcyNWZlMjIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViZHJpdmVyL2VsZW1lbnRzL2FjdGl2ZS5weQpAQCAtMCwwICsxLDI1MiBAQAoraW1wb3J0IHB5
dGVzdAorCitmcm9tIHN1cHBvcnQuYXNzZXJ0cyBpbXBvcnQgYXNzZXJ0X2Vycm9yLCBhc3NlcnRf
c3VjY2VzcywgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkLCBhc3NlcnRfc2FtZV9lbGVtZW50Citmcm9t
IHN1cHBvcnQuZml4dHVyZXMgaW1wb3J0IGNyZWF0ZV9kaWFsb2cKK2Zyb20gc3VwcG9ydC5pbmxp
bmUgaW1wb3J0IGlubGluZQorCitkZWYgYXNzZXJ0X3Jlc3VsdF9pc19hY3RpdmVfZWxlbWVudChz
ZXNzaW9uLCByZXN1bHQpOgorICAgICIiIkVuc3VyZSB0aGF0IHRoZSBwcm92aWRlZCBvYmplY3Qg
aXMgYSBzdWNjZXNzZnVsIFdlYkRyaXZlciByZXNwb25zZQorICAgIGRlc2NyaWJpbmcgYW4gZWxl
bWVudCByZWZlcmVuY2UgYW5kIHRoYXQgdGhlIHJlZmVyZW5jZWQgZWxlbWVudCBtYXRjaGVzIHRo
ZQorICAgIGVsZW1lbnQgcmV0dXJuZWQgYnkgdGhlIGBhY3RpdmVFbGVtZW50YCBhdHRyaWJ1dGUg
b2YgdGhlIGN1cnJlbnQgYnJvd3NpbmcKKyAgICBjb250ZXh0J3MgYWN0aXZlIGRvY3VtZW50LiIi
IgorICAgIGFzc2VydCByZXN1bHQuc3RhdHVzID09IDIwMAorCisgICAgZnJvbV9qcyA9IHNlc3Np
b24uZXhlY3V0ZV9zY3JpcHQoInJldHVybiBkb2N1bWVudC5hY3RpdmVFbGVtZW50OyIpCisKKyAg
ICBpZiByZXN1bHQuYm9keVsidmFsdWUiXSBpcyBOb25lOgorICAgICAgICBhc3NlcnQgZnJvbV9q
cyA9PSBOb25lCisgICAgZWxzZToKKyAgICAgICAgYXNzZXJ0X3NhbWVfZWxlbWVudChzZXNzaW9u
LCByZXN1bHQuYm9keVsidmFsdWUiXSwgZnJvbV9qcykKKworIyA+IDEuIElmIHRoZSBjdXJyZW50
IGJyb3dzaW5nIGNvbnRleHQgaXMgbm8gbG9uZ2VyIG9wZW4sIHJldHVybiBlcnJvciB3aXRoCisj
ID4gICAgZXJyb3IgY29kZSBubyBzdWNoIHdpbmRvdy4KK2RlZiB0ZXN0X2Nsb3NlZF9jb250ZXh0
KHNlc3Npb24sIGNyZWF0ZV93aW5kb3cpOgorICAgIG5ld193aW5kb3cgPSBjcmVhdGVfd2luZG93
KCkKKyAgICBzZXNzaW9uLndpbmRvd19oYW5kbGUgPSBuZXdfd2luZG93CisgICAgc2Vzc2lvbi5j
bG9zZSgpCisKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlc3Npb24vJXMvZWxlbWVudC9hY3Rp
dmUiICUgc2Vzc2lvbi5zZXNzaW9uX2lkKQorCisgICAgYXNzZXJ0X2Vycm9yKHJlc3VsdCwgIm5v
IHN1Y2ggd2luZG93IikKKworIyBbLi4uXQorIyAyLiBIYW5kbGUgYW55IHVzZXIgcHJvbXB0cyBh
bmQgcmV0dXJuIGl0cyB2YWx1ZSBpZiBpdCBpcyBhbiBlcnJvci4KKyMgWy4uLl0KKyMgSW4gb3Jk
ZXIgdG8gaGFuZGxlIGFueSB1c2VyIHByb21wdHMgYSByZW1vdGUgZW5kIG11c3QgdGFrZSB0aGUg
Zm9sbG93aW5nCisjIHN0ZXBzOgorIyAyLiBSdW4gdGhlIHN1YnN0ZXBzIG9mIHRoZSBmaXJzdCBt
YXRjaGluZyB1c2VyIHByb21wdCBoYW5kbGVyOgorIworIyAgICBbLi4uXQorIyAgICAtIGRpc21p
c3Mgc3RhdGUKKyMgICAgICAxLiBEaXNtaXNzIHRoZSBjdXJyZW50IHVzZXIgcHJvbXB0LgorIyAg
ICBbLi4uXQorIworIyAzLiBSZXR1cm4gc3VjY2Vzcy4KK2RlZiB0ZXN0X2hhbmRsZV9wcm9tcHRf
ZGlzbWlzcyhuZXdfc2Vzc2lvbik6CisgICAgXywgc2Vzc2lvbiA9IG5ld19zZXNzaW9uKHsiYWx3
YXlzTWF0Y2giOiB7InVuaGFuZGxlZFByb21wdEJlaGF2aW9yIjogImRpc21pc3MifX0pCisgICAg
c2Vzc2lvbi51cmwgPSBpbmxpbmUoIjxib2R5PjxwPkhlbGxvLCBXb3JsZCE8L3A+PC9ib2R5PiIp
CisKKyAgICBjcmVhdGVfZGlhbG9nKHNlc3Npb24pKCJhbGVydCIsIHRleHQ9ImRpc21pc3MgIzEi
LCByZXN1bHRfdmFyPSJkaXNtaXNzMSIpCisKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9y
dC5zZW5kKCJHRVQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlc3Np
b24vJXMvZWxlbWVudC9hY3RpdmUiICUgc2Vzc2lvbi5zZXNzaW9uX2lkKQorCisgICAgYXNzZXJ0
X3Jlc3VsdF9pc19hY3RpdmVfZWxlbWVudChzZXNzaW9uLCByZXN1bHQpCisgICAgYXNzZXJ0X2Rp
YWxvZ19oYW5kbGVkKHNlc3Npb24sICJkaXNtaXNzICMxIikKKyAgICBhc3NlcnQgc2Vzc2lvbi5l
eGVjdXRlX3NjcmlwdCgicmV0dXJuIGRpc21pc3MxOyIpID09IE5vbmUKKworICAgIGNyZWF0ZV9k
aWFsb2coc2Vzc2lvbikoImNvbmZpcm0iLCB0ZXh0PSJkaXNtaXNzICMyIiwgcmVzdWx0X3Zhcj0i
ZGlzbWlzczIiKQorCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXNzaW9uLyVzL2VsZW1lbnQv
YWN0aXZlIiAlIHNlc3Npb24uc2Vzc2lvbl9pZCkKKworICAgIGFzc2VydF9yZXN1bHRfaXNfYWN0
aXZlX2VsZW1lbnQoc2Vzc2lvbiwgcmVzdWx0KQorICAgIGFzc2VydF9kaWFsb2dfaGFuZGxlZChz
ZXNzaW9uLCAiZGlzbWlzcyAjMiIpCisgICAgYXNzZXJ0IHJlYWRfZ2xvYmFsKHNlc3Npb24sICJk
aXNtaXNzMiIpID09IE5vbmUKKworICAgIGNyZWF0ZV9kaWFsb2coc2Vzc2lvbikoInByb21wdCIs
IHRleHQ9ImRpc21pc3MgIzMiLCByZXN1bHRfdmFyPSJkaXNtaXNzMyIpCisKKyAgICByZXN1bHQg
PSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgInNlc3Npb24vJXMvZWxlbWVudC9hY3RpdmUiICUgc2Vzc2lvbi5zZXNzaW9u
X2lkKQorCisgICAgYXNzZXJ0X3Jlc3VsdF9pc19hY3RpdmVfZWxlbWVudChzZXNzaW9uLCByZXN1
bHQpCisgICAgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNlc3Npb24sICJkaXNtaXNzICMzIikKKyAg
ICBhc3NlcnQgcmVhZF9nbG9iYWwoc2Vzc2lvbiwgImRpc21pc3MzIikgPT0gTm9uZQorCisjIFsu
Li5dCisjIDIuIEhhbmRsZSBhbnkgdXNlciBwcm9tcHRzIGFuZCByZXR1cm4gaXRzIHZhbHVlIGlm
IGl0IGlzIGFuIGVycm9yLgorIyBbLi4uXQorIyBJbiBvcmRlciB0byBoYW5kbGUgYW55IHVzZXIg
cHJvbXB0cyBhIHJlbW90ZSBlbmQgbXVzdCB0YWtlIHRoZSBmb2xsb3dpbmcKKyMgc3RlcHM6Cisj
IDIuIFJ1biB0aGUgc3Vic3RlcHMgb2YgdGhlIGZpcnN0IG1hdGNoaW5nIHVzZXIgcHJvbXB0IGhh
bmRsZXI6CisjCisjICAgIFsuLi5dCisjICAgIC0gYWNjZXB0IHN0YXRlCisjICAgICAgMS4gQWNj
ZXB0IHRoZSBjdXJyZW50IHVzZXIgcHJvbXB0LgorIyAgICBbLi4uXQorIworIyAzLiBSZXR1cm4g
c3VjY2Vzcy4KK2RlZiB0ZXN0X2hhbmRsZV9wcm9tcHRfYWNjZXB0KG5ld19zZXNzaW9uKToKKyAg
ICBfLCBzZXNzaW9uID0gbmV3X3Nlc3Npb24oeyJhbHdheXNNYXRjaCI6IHsidW5oYW5kbGVkUHJv
bXB0QmVoYXZpb3IiOiAiYWNjZXB0In19KQorICAgIHNlc3Npb24udXJsID0gaW5saW5lKCI8Ym9k
eT48cD5IZWxsbywgV29ybGQhPC9wPjwvYm9keT4iKQorICAgIGNyZWF0ZV9kaWFsb2coc2Vzc2lv
bikoImFsZXJ0IiwgdGV4dD0iYWNjZXB0ICMxIiwgcmVzdWx0X3Zhcj0iYWNjZXB0MSIpCisKKyAg
ICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgInNlc3Npb24vJXMvZWxlbWVudC9hY3RpdmUiICUgc2Vzc2lv
bi5zZXNzaW9uX2lkKQorCisgICAgYXNzZXJ0X3Jlc3VsdF9pc19hY3RpdmVfZWxlbWVudChzZXNz
aW9uLCByZXN1bHQpCisgICAgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNlc3Npb24sICJhY2NlcHQg
IzEiKQorICAgIGFzc2VydCByZWFkX2dsb2JhbChzZXNzaW9uLCAiYWNjZXB0MSIpID09IE5vbmUK
KworICAgIGNyZWF0ZV9kaWFsb2coc2Vzc2lvbikoImNvbmZpcm0iLCB0ZXh0PSJhY2NlcHQgIzIi
LCByZXN1bHRfdmFyPSJhY2NlcHQyIikKKworICAgIHJlc3VsdCA9IHNlc3Npb24udHJhbnNwb3J0
LnNlbmQoIkdFVCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2Vzc2lv
bi8lcy9lbGVtZW50L2FjdGl2ZSIgJSBzZXNzaW9uLnNlc3Npb25faWQpCisKKyAgICBhc3NlcnRf
cmVzdWx0X2lzX2FjdGl2ZV9lbGVtZW50KHNlc3Npb24sIHJlc3VsdCkKKyAgICBhc3NlcnRfZGlh
bG9nX2hhbmRsZWQoc2Vzc2lvbiwgImFjY2VwdCAjMiIpCisgICAgYXNzZXJ0IHJlYWRfZ2xvYmFs
KHNlc3Npb24sICJhY2NlcHQyIiksIFRydWUKKworICAgIGNyZWF0ZV9kaWFsb2coc2Vzc2lvbiko
InByb21wdCIsIHRleHQ9ImFjY2VwdCAjMyIsIHJlc3VsdF92YXI9ImFjY2VwdDMiKQorCisgICAg
cmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJzZXNzaW9uLyVzL2VsZW1lbnQvYWN0aXZlIiAlIHNlc3Npb24u
c2Vzc2lvbl9pZCkKKworICAgIGFzc2VydF9yZXN1bHRfaXNfYWN0aXZlX2VsZW1lbnQoc2Vzc2lv
biwgcmVzdWx0KQorICAgIGFzc2VydF9kaWFsb2dfaGFuZGxlZChzZXNzaW9uLCAiYWNjZXB0ICMz
IikKKyAgICBhc3NlcnQgcmVhZF9nbG9iYWwoc2Vzc2lvbiwgImFjY2VwdDMiKSA9PSAiIgorCisj
IFsuLi5dCisjIDIuIEhhbmRsZSBhbnkgdXNlciBwcm9tcHRzIGFuZCByZXR1cm4gaXRzIHZhbHVl
IGlmIGl0IGlzIGFuIGVycm9yLgorIyBbLi4uXQorIyBJbiBvcmRlciB0byBoYW5kbGUgYW55IHVz
ZXIgcHJvbXB0cyBhIHJlbW90ZSBlbmQgbXVzdCB0YWtlIHRoZSBmb2xsb3dpbmcKKyMgc3RlcHM6
CisjIDIuIFJ1biB0aGUgc3Vic3RlcHMgb2YgdGhlIGZpcnN0IG1hdGNoaW5nIHVzZXIgcHJvbXB0
IGhhbmRsZXI6CisjCisjICAgIFsuLi5dCisjICAgIC0gbWlzc2luZyB2YWx1ZSBkZWZhdWx0IHN0
YXRlCisjICAgIC0gbm90IGluIHRoZSB0YWJsZSBvZiBzaW1wbGUgZGlhbG9ncworIyAgICAgIDEu
IERpc21pc3MgdGhlIGN1cnJlbnQgdXNlciBwcm9tcHQuCisjICAgICAgMi4gUmV0dXJuIGVycm9y
IHdpdGggZXJyb3IgY29kZSB1bmV4cGVjdGVkIGFsZXJ0IG9wZW4uCitkZWYgdGVzdF9oYW5kbGVf
cHJvbXB0X21pc3NpbmdfdmFsdWUoc2Vzc2lvbiwgY3JlYXRlX2RpYWxvZyk6CisgICAgc2Vzc2lv
bi51cmwgPSBpbmxpbmUoIjxib2R5PjxwPkhlbGxvLCBXb3JsZCE8L3A+PC9ib2R5PiIpCisKKyAg
ICBjcmVhdGVfZGlhbG9nKCJhbGVydCIsIHRleHQ9ImRpc21pc3MgIzEiLCByZXN1bHRfdmFyPSJk
aXNtaXNzMSIpCisKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlc3Npb24vJXMvZWxlbWVudC9h
Y3RpdmUiICUgc2Vzc2lvbi5zZXNzaW9uX2lkKQorCisgICAgYXNzZXJ0X2Vycm9yKHJlc3VsdCwg
InVuZXhwZWN0ZWQgYWxlcnQgb3BlbiIpCisgICAgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNlc3Np
b24sICJkaXNtaXNzICMxIikKKyAgICBhc3NlcnQgc2Vzc2lvbi5leGVjdXRlX3NjcmlwdCgicmV0
dXJuIGFjY2VwdDE7IikgPT0gTm9uZQorCisgICAgY3JlYXRlX2RpYWxvZygiY29uZmlybSIsIHRl
eHQ9ImRpc21pc3MgIzIiLCByZXN1bHRfdmFyPSJkaXNtaXNzMiIpCisKKyAgICByZXN1bHQgPSBz
ZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgInNlc3Npb24vJXMvZWxlbWVudC9hY3RpdmUiICUgc2Vzc2lvbi5zZXNzaW9uX2lk
KQorCisgICAgYXNzZXJ0X2Vycm9yKHJlc3VsdCwgInVuZXhwZWN0ZWQgYWxlcnQgb3BlbiIpCisg
ICAgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNlc3Npb24sICJkaXNtaXNzICMyIikKKyAgICBhc3Nl
cnQgc2Vzc2lvbi5leGVjdXRlX3NjcmlwdCgicmV0dXJuIGRpc21pc3MyOyIpID09IEZhbHNlCisK
KyAgICBjcmVhdGVfZGlhbG9nKCJwcm9tcHQiLCB0ZXh0PSJkaXNtaXNzICMzIiwgcmVzdWx0X3Zh
cj0iZGlzbWlzczMiKQorCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VU
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXNzaW9uLyVzL2VsZW1l
bnQvYWN0aXZlIiAlIHNlc3Npb24uc2Vzc2lvbl9pZCkKKworICAgIGFzc2VydF9lcnJvcihyZXN1
bHQsICJ1bmV4cGVjdGVkIGFsZXJ0IG9wZW4iKQorICAgIGFzc2VydF9kaWFsb2dfaGFuZGxlZChz
ZXNzaW9uLCAiZGlzbWlzcyAjMyIpCisgICAgYXNzZXJ0IHNlc3Npb24uZXhlY3V0ZV9zY3JpcHQo
InJldHVybiBkaXNtaXNzMzsiKSA9PSBOb25lCisKKyMgPiBbLi4uXQorIyA+IDMuIExldCBhY3Rp
dmUgZWxlbWVudCBiZSB0aGUgYWN0aXZlIGVsZW1lbnQgb2YgdGhlIGN1cnJlbnQgYnJvd3NpbmcK
KyMgPiAgICBjb250ZXh0J3MgZG9jdW1lbnQgZWxlbWVudC4KKyMgPiA0LiBMZXQgYWN0aXZlIHdl
YiBlbGVtZW50IGJlIHRoZSBKU09OIFNlcmlhbGl6YXRpb24gb2YgYWN0aXZlIGVsZW1lbnQuCisj
ID4gNS4gUmV0dXJuIHN1Y2Nlc3Mgd2l0aCBkYXRhIGFjdGl2ZSB3ZWIgZWxlbWVudC4KK2RlZiB0
ZXN0X3N1Y2Nlc3NfZG9jdW1lbnQoc2Vzc2lvbik6CisgICAgc2Vzc2lvbi51cmwgPSBpbmxpbmUo
IiIiCisgICAgICAgIDxib2R5PgorICAgICAgICAgICAgPGgxPkhlYWRpbmc8L2gxPgorICAgICAg
ICAgICAgPGlucHV0IC8+CisgICAgICAgICAgICA8aW5wdXQgLz4KKyAgICAgICAgICAgIDxpbnB1
dCBzdHlsZT0ib3BhY2l0eTogMDsiIC8+CisgICAgICAgICAgICA8cD5Bbm90aGVyIGVsZW1lbnQ8
L3A+CisgICAgICAgIDwvYm9keT4iIiIpCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQu
c2VuZCgiR0VUIiwgInNlc3Npb24vJXMvZWxlbWVudC9hY3RpdmUiICUgc2Vzc2lvbi5zZXNzaW9u
X2lkKQorCisgICAgYXNzZXJ0X3Jlc3VsdF9pc19hY3RpdmVfZWxlbWVudChzZXNzaW9uLCByZXN1
bHQpCisKK2RlZiB0ZXN0X3N1Y2Vzc19pbnB1dChzZXNzaW9uKToKKyAgICBzZXNzaW9uLnVybCA9
IGlubGluZSgiIiIKKyAgICAgICAgPGJvZHk+CisgICAgICAgICAgICA8aDE+SGVhZGluZzwvaDE+
CisgICAgICAgICAgICA8aW5wdXQgYXV0b2ZvY3VzIC8+CisgICAgICAgICAgICA8aW5wdXQgc3R5
bGU9Im9wYWNpdHk6IDA7IiAvPgorICAgICAgICAgICAgPHA+QW5vdGhlciBlbGVtZW50PC9wPgor
ICAgICAgICA8L2JvZHk+IiIiKQorICAgIHJlc3VsdCA9IHNlc3Npb24udHJhbnNwb3J0LnNlbmQo
IkdFVCIsICJzZXNzaW9uLyVzL2VsZW1lbnQvYWN0aXZlIiAlIHNlc3Npb24uc2Vzc2lvbl9pZCkK
KworICAgIGFzc2VydF9yZXN1bHRfaXNfYWN0aXZlX2VsZW1lbnQoc2Vzc2lvbiwgcmVzdWx0KQor
CitkZWYgdGVzdF9zdWNlc3NfaW5wdXRfbm9uX2ludGVyYWN0YWJsZShzZXNzaW9uKToKKyAgICBz
ZXNzaW9uLnVybCA9IGlubGluZSgiIiIKKyAgICAgICAgPGJvZHk+CisgICAgICAgICAgICA8aDE+
SGVhZGluZzwvaDE+CisgICAgICAgICAgICA8aW5wdXQgLz4KKyAgICAgICAgICAgIDxpbnB1dCBz
dHlsZT0ib3BhY2l0eTogMDsiIGF1dG9mb2N1cyAvPgorICAgICAgICAgICAgPHA+QW5vdGhlciBl
bGVtZW50PC9wPgorICAgICAgICA8L2JvZHk+IiIiKQorICAgIHJlc3VsdCA9IHNlc3Npb24udHJh
bnNwb3J0LnNlbmQoIkdFVCIsICJzZXNzaW9uLyVzL2VsZW1lbnQvYWN0aXZlIiAlIHNlc3Npb24u
c2Vzc2lvbl9pZCkKKworICAgIGFzc2VydF9yZXN1bHRfaXNfYWN0aXZlX2VsZW1lbnQoc2Vzc2lv
biwgcmVzdWx0KQorCitkZWYgdGVzdF9zdWNjZXNzX2V4cGxpY2l0X2ZvY3VzKHNlc3Npb24pOgor
ICAgIHNlc3Npb24udXJsID0gaW5saW5lKCIiIgorICAgICAgICA8Ym9keT4KKyAgICAgICAgICAg
IDxoMT5IZWFkaW5nPC9oMT4KKyAgICAgICAgICAgIDxpbnB1dCAvPgorICAgICAgICAgICAgPGlm
cmFtZT48L2lmcmFtZT4KKyAgICAgICAgPC9ib2R5PiIiIikKKworICAgIHNlc3Npb24uZXhlY3V0
ZV9zY3JpcHQoImRvY3VtZW50LmJvZHkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2gxJylbMF0uZm9j
dXMoKTsiKQorICAgIHJlc3VsdCA9IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIkdFVCIsICJzZXNz
aW9uLyVzL2VsZW1lbnQvYWN0aXZlIiAlIHNlc3Npb24uc2Vzc2lvbl9pZCkKKyAgICBhc3NlcnRf
cmVzdWx0X2lzX2FjdGl2ZV9lbGVtZW50KHNlc3Npb24sIHJlc3VsdCkKKworICAgIHNlc3Npb24u
ZXhlY3V0ZV9zY3JpcHQoImRvY3VtZW50LmJvZHkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0
JylbMF0uZm9jdXMoKTsiKQorICAgIHJlc3VsdCA9IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIkdF
VCIsICJzZXNzaW9uLyVzL2VsZW1lbnQvYWN0aXZlIiAlIHNlc3Npb24uc2Vzc2lvbl9pZCkKKyAg
ICBhc3NlcnRfcmVzdWx0X2lzX2FjdGl2ZV9lbGVtZW50KHNlc3Npb24sIHJlc3VsdCkKKworICAg
IHNlc3Npb24uZXhlY3V0ZV9zY3JpcHQoImRvY3VtZW50LmJvZHkuZ2V0RWxlbWVudHNCeVRhZ05h
bWUoJ2lmcmFtZScpWzBdLmZvY3VzKCk7IikKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9y
dC5zZW5kKCJHRVQiLCAic2Vzc2lvbi8lcy9lbGVtZW50L2FjdGl2ZSIgJSBzZXNzaW9uLnNlc3Np
b25faWQpCisgICAgYXNzZXJ0X3Jlc3VsdF9pc19hY3RpdmVfZWxlbWVudChzZXNzaW9uLCByZXN1
bHQpCisKKyAgICBzZXNzaW9uLmV4ZWN1dGVfc2NyaXB0KCJkb2N1bWVudC5ib2R5LmdldEVsZW1l
bnRzQnlUYWdOYW1lKCdpZnJhbWUnKVswXS5mb2N1cygpOyIpCisgICAgc2Vzc2lvbi5leGVjdXRl
X3NjcmlwdCgiZG9jdW1lbnQuYm9keS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaWZyYW1lJylbMF0u
cmVtb3ZlKCk7IikKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLCAi
c2Vzc2lvbi8lcy9lbGVtZW50L2FjdGl2ZSIgJSBzZXNzaW9uLnNlc3Npb25faWQpCisgICAgYXNz
ZXJ0X3Jlc3VsdF9pc19hY3RpdmVfZWxlbWVudChzZXNzaW9uLCByZXN1bHQpCisKKyAgICBzZXNz
aW9uLmV4ZWN1dGVfc2NyaXB0KCJkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJykpOyIpCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3Bv
cnQuc2VuZCgiR0VUIiwgInNlc3Npb24vJXMvZWxlbWVudC9hY3RpdmUiICUgc2Vzc2lvbi5zZXNz
aW9uX2lkKQorICAgIGFzc2VydF9yZXN1bHRfaXNfYWN0aXZlX2VsZW1lbnQoc2Vzc2lvbiwgcmVz
dWx0KQorCitkZWYgdGVzdF9zdWNjZXNzX2lmcmFtZV9jb250ZW50KHNlc3Npb24pOgorICAgIHNl
c3Npb24udXJsID0gaW5saW5lKCI8Ym9keT48L2JvZHk+IikKKyAgICBzZXNzaW9uLmV4ZWN1dGVf
c2NyaXB0KCIiIgorICAgICAgICB2YXIgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
aWZyYW1lJyk7CisgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaWZyYW1lKTsKKyAg
ICAgICAgdmFyIGlucHV0ID0gaWZyYW1lLmNvbnRlbnREb2N1bWVudC5jcmVhdGVFbGVtZW50KCdp
bnB1dCcpOworICAgICAgICBpZnJhbWUuY29udGVudERvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQo
aW5wdXQpOworICAgICAgICBpbnB1dC5mb2N1cygpOyIiIikKKworICAgIHJlc3VsdCA9IHNlc3Np
b24udHJhbnNwb3J0LnNlbmQoIkdFVCIsICJzZXNzaW9uLyVzL2VsZW1lbnQvYWN0aXZlIiAlIHNl
c3Npb24uc2Vzc2lvbl9pZCkKKworICAgIGFzc2VydF9yZXN1bHRfaXNfYWN0aXZlX2VsZW1lbnQo
c2Vzc2lvbiwgcmVzdWx0KQorCitkZWYgdGVzdF9zdWNlc3Nfd2l0aG91dF9ib2R5KHNlc3Npb24p
OgorICAgIHNlc3Npb24udXJsID0gaW5saW5lKCI8Ym9keT48L2JvZHk+IikKKyAgICBzZXNzaW9u
LmV4ZWN1dGVfc2NyaXB0KCJkb2N1bWVudC5ib2R5LnJlbW92ZSgpOyIpCisKKyAgICByZXN1bHQg
PSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLCAic2Vzc2lvbi8lcy9lbGVtZW50L2FjdGl2
ZSIlIHNlc3Npb24uc2Vzc2lvbl9pZCkKKworICAgIGFzc2VydF9yZXN1bHRfaXNfYWN0aXZlX2Vs
ZW1lbnQoc2Vzc2lvbiwgcmVzdWx0KQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9fX2luaXRfXy5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9y
dGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAuLmU2OWRlMjliYjJkCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL2FjdGlvbnMvX19pbml0X18ucHkgYi9XZWJE
cml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL2FjdGlvbnMvX19pbml0X18u
cHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmU2OWRlMjliYjJkCmRp
ZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL2Fj
dGlvbnMvY29uZnRlc3QucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVy
L3Rlc3RzL2FjdGlvbnMvY29uZnRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAuLjc1MjA5MzgzZWFiCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9hY3Rpb25zL2NvbmZ0ZXN0LnB5CkBAIC0wLDAg
KzEsMzQgQEAKK2ltcG9ydCBweXRlc3QKKworCitAcHl0ZXN0LmZpeHR1cmUKK2RlZiBrZXlfY2hh
aW4oc2Vzc2lvbik6CisgICAgcmV0dXJuIHNlc3Npb24uYWN0aW9ucy5zZXF1ZW5jZSgia2V5Iiwg
ImtleWJvYXJkX2lkIikKKworCitAcHl0ZXN0LmZpeHR1cmUKK2RlZiBtb3VzZV9jaGFpbihzZXNz
aW9uKToKKyAgICByZXR1cm4gc2Vzc2lvbi5hY3Rpb25zLnNlcXVlbmNlKAorICAgICAgICAicG9p
bnRlciIsCisgICAgICAgICJwb2ludGVyX2lkIiwKKyAgICAgICAgeyJwb2ludGVyVHlwZSI6ICJt
b3VzZSJ9KQorCisKK0BweXRlc3QuZml4dHVyZShhdXRvdXNlPVRydWUpCitkZWYgcmVsZWFzZV9h
Y3Rpb25zKHNlc3Npb24sIHJlcXVlc3QpOgorICAgICMgcmVsZWFzZSBhbGwgYWN0aW9ucyBhZnRl
ciBlYWNoIHRlc3QKKyAgICAjIGVxdWl2YWxlbnQgdG8gYSB0ZWFyZG93bl9mdW5jdGlvbiwgYnV0
IHdpdGggYWNjZXNzIHRvIHNlc3Npb24gZml4dHVyZQorICAgIHJlcXVlc3QuYWRkZmluYWxpemVy
KHNlc3Npb24uYWN0aW9ucy5yZWxlYXNlKQorCisKK0BweXRlc3QuZml4dHVyZQorZGVmIGtleV9y
ZXBvcnRlcihzZXNzaW9uLCB0ZXN0X2FjdGlvbnNfcGFnZSwgcmVxdWVzdCk6CisgICAgIiIiUmVw
cmVzZW50cyBmb2N1c2VkIGlucHV0IGVsZW1lbnQgZnJvbSBgdGVzdF9rZXlzX3BhZ2VgIGZpeHR1
cmUuIiIiCisgICAgaW5wdXRfZWwgPSBzZXNzaW9uLmZpbmQuY3NzKCIja2V5cyIsIGFsbD1GYWxz
ZSkKKyAgICBpbnB1dF9lbC5jbGljaygpCisgICAgcmV0dXJuIGlucHV0X2VsCisKKworQHB5dGVz
dC5maXh0dXJlCitkZWYgdGVzdF9hY3Rpb25zX3BhZ2Uoc2Vzc2lvbiwgdXJsKToKKyAgICBzZXNz
aW9uLnVybCA9IHVybCgiL3dlYmRyaXZlci90ZXN0cy9hY3Rpb25zL3N1cHBvcnQvdGVzdF9hY3Rp
b25zX3dkc3BlYy5odG1sIikKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWJkcml2ZXIvdGVzdHMvYWN0aW9ucy9rZXkucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL2FjdGlvbnMva2V5LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwLi40Mzg4N2VkNDMyYQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRy
aXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvYWN0aW9ucy9rZXkucHkKQEAg
LTAsMCArMSwxNTQgQEAKK2ltcG9ydCBweXRlc3QKKworZnJvbSB0ZXN0cy5hY3Rpb25zLnN1cHBv
cnQua2V5cyBpbXBvcnQgS2V5cworZnJvbSB0ZXN0cy5hY3Rpb25zLnN1cHBvcnQucmVmaW5lIGlt
cG9ydCBmaWx0ZXJfZGljdCwgZ2V0X2tleXMsIGdldF9ldmVudHMKKworCitkZWYgdGVzdF9sb25l
X2tleXVwX3NlbmRzX25vX2V2ZW50cyhzZXNzaW9uLCBrZXlfcmVwb3J0ZXIsIGtleV9jaGFpbik6
CisgICAga2V5X2NoYWluLmtleV91cCgiYSIpLnBlcmZvcm0oKQorICAgIGFzc2VydCBsZW4oZ2V0
X2tleXMoa2V5X3JlcG9ydGVyKSkgPT0gMAorICAgIGFzc2VydCBsZW4oZ2V0X2V2ZW50cyhzZXNz
aW9uKSkgPT0gMAorICAgIHNlc3Npb24uYWN0aW9ucy5yZWxlYXNlKCkKKyAgICBhc3NlcnQgbGVu
KGdldF9rZXlzKGtleV9yZXBvcnRlcikpID09IDAKKyAgICBhc3NlcnQgbGVuKGdldF9ldmVudHMo
c2Vzc2lvbikpID09IDAKKworCitAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoInZhbHVlLGNvZGUi
LCBbCisgICAgKHUiYSIsICJLZXlBIiwpLAorICAgICgiYSIsICJLZXlBIiwpLAorICAgICh1Ilwi
IiwgIlF1b3RlIiksCisgICAgKHUiLCIsICJDb21tYSIpLAorICAgICh1Ilx1MDBFMCIsICIiKSwK
KyAgICAodSJcdTA0MTYiLCAiIiksCisgICAgKHUiQCIsICJEaWdpdDIiKSwKKyAgICAodSJcdTI2
MDMiLCAiIiksCisgICAgKHUiXHVGNkMyIiwgIiIpLCAgIyBQVUEKK10pCitkZWYgdGVzdF9zaW5n
bGVfcHJpbnRhYmxlX2tleV9zZW5kc19jb3JyZWN0X2V2ZW50cyhzZXNzaW9uLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5X3JlcG9ydGVyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5X2No
YWluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb2RlKToKKyAgICBrZXlfY2hhaW4gXAorICAgICAgICAua2V5X2Rvd24odmFsdWUpIFwKKyAg
ICAgICAgLmtleV91cCh2YWx1ZSkgXAorICAgICAgICAucGVyZm9ybSgpCisgICAgZXhwZWN0ZWQg
PSBbCisgICAgICAgIHsiY29kZSI6IGNvZGUsICJrZXkiOiB2YWx1ZSwgInR5cGUiOiAia2V5ZG93
biJ9LAorICAgICAgICB7ImNvZGUiOiBjb2RlLCAia2V5IjogdmFsdWUsICJ0eXBlIjogImtleXBy
ZXNzIn0sCisgICAgICAgIHsiY29kZSI6IGNvZGUsICJrZXkiOiB2YWx1ZSwgInR5cGUiOiAia2V5
dXAifSwKKyAgICBdCisgICAgZXZlbnRzID0gW2ZpbHRlcl9kaWN0KGUsIGV4cGVjdGVkWzBdKSBm
b3IgZSBpbiBnZXRfZXZlbnRzKHNlc3Npb24pXQorICAgIGFzc2VydCBldmVudHMgPT0gZXhwZWN0
ZWQKKyAgICBhc3NlcnQgZ2V0X2tleXMoa2V5X3JlcG9ydGVyKSA9PSB2YWx1ZQorCisKK0BweXRl
c3QubWFyay5wYXJhbWV0cml6ZSgidmFsdWUiLCBbCisgICAgKHUiXFUwMDAxRjYwNCIpLAorICAg
ICh1IlxVMDAwMUY2MEQiKSwKK10pCitkZWYgdGVzdF9zaW5nbGVfZW1vamlfcmVjb3Jkc19jb3Jy
ZWN0X2tleShzZXNzaW9uLCBrZXlfcmVwb3J0ZXIsIGtleV9jaGFpbiwgdmFsdWUpOgorICAgICMg
Tm90IHVzaW5nIGtleV9jaGFpbi5zZW5kX2tleXMoKSBiZWNhdXNlIHdlIGFsd2F5cyB3YW50IHRv
IHRyZWF0IHZhbHVlIGFzCisgICAgIyBvbmUgY2hhcmFjdGVyIGhlcmUuIGBsZW4odmFsdWUpYCB2
YXJpZXMgYnkgcGxhdGZvcm0gZm9yIG5vbi1CTVAgY2hhcmFjdGVycywKKyAgICAjIHNvIHdlIGRv
bid0IHdhbnQgdG8gaXRlcmF0ZSBvdmVyIHZhbHVlLgorICAgIGtleV9jaGFpbiBcCisgICAgICAg
IC5rZXlfZG93bih2YWx1ZSkgXAorICAgICAgICAua2V5X3VwKHZhbHVlKSBcCisgICAgICAgIC5w
ZXJmb3JtKCkKKyAgICAjIGV2ZW50cyBzZW50IGJ5IG1ham9yIGJyb3dzZXJzIGFyZSBpbmNvbnNp
c3RlbnQgc28gb25seSBjaGVjayBrZXkgdmFsdWUKKyAgICBhc3NlcnQgZ2V0X2tleXMoa2V5X3Jl
cG9ydGVyKSA9PSB2YWx1ZQorCisKK0BweXRlc3QubWFyay5wYXJhbWV0cml6ZSgidmFsdWUsY29k
ZSxrZXkiLCBbCisgICAgKHUiXHVFMDUwIiwgIlNoaWZ0UmlnaHQiLCAiU2hpZnQiKSwKKyAgICAo
dSJcdUUwNTMiLCAiT1NSaWdodCIsICJNZXRhIiksCisgICAgKEtleXMuQ09OVFJPTCwgIkNvbnRy
b2xMZWZ0IiwgIkNvbnRyb2wiKSwKK10pCitkZWYgdGVzdF9zaW5nbGVfbW9kaWZpZXJfa2V5X3Nl
bmRzX2NvcnJlY3RfZXZlbnRzKHNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGtleV9yZXBvcnRlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5X2NoYWluLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5KToKKyAgICBrZXlfY2hhaW4g
XAorICAgICAgICAua2V5X2Rvd24odmFsdWUpIFwKKyAgICAgICAgLmtleV91cCh2YWx1ZSkgXAor
ICAgICAgICAucGVyZm9ybSgpCisgICAgYWxsX2V2ZW50cyA9IGdldF9ldmVudHMoc2Vzc2lvbikK
KyAgICBleHBlY3RlZCA9IFsKKyAgICAgICAgeyJjb2RlIjogY29kZSwgImtleSI6IGtleSwgInR5
cGUiOiAia2V5ZG93biJ9LAorICAgICAgICB7ImNvZGUiOiBjb2RlLCAia2V5Ijoga2V5LCAidHlw
ZSI6ICJrZXl1cCJ9LAorICAgIF0KKyAgICBldmVudHMgPSBbZmlsdGVyX2RpY3QoZSwgZXhwZWN0
ZWRbMF0pIGZvciBlIGluIGFsbF9ldmVudHNdCisgICAgYXNzZXJ0IGV2ZW50cyA9PSBleHBlY3Rl
ZAorICAgIGFzc2VydCBsZW4oZ2V0X2tleXMoa2V5X3JlcG9ydGVyKSkgPT0gMAorCisKK0BweXRl
c3QubWFyay5wYXJhbWV0cml6ZSgidmFsdWUsY29kZSxrZXkiLCBbCisgICAgKEtleXMuRVNDQVBF
LCAiRXNjYXBlIiwgIkVzY2FwZSIpLAorICAgIChLZXlzLlJJR0hULCAiQXJyb3dSaWdodCIsICJB
cnJvd1JpZ2h0IiksCitdKQorZGVmIHRlc3Rfc2luZ2xlX25vbnByaW50YWJsZV9rZXlfc2VuZHNf
ZXZlbnRzKHNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAga2V5X3JlcG9ydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGtleV9jaGFpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGtleSk6CisgICAga2V5X2NoYWluIFwKKyAgICAgICAgLmtleV9kb3duKHZhbHVlKSBcCisg
ICAgICAgIC5rZXlfdXAodmFsdWUpIFwKKyAgICAgICAgLnBlcmZvcm0oKQorICAgIGV4cGVjdGVk
ID0gWworICAgICAgICB7ImNvZGUiOiBjb2RlLCAia2V5Ijoga2V5LCAidHlwZSI6ICJrZXlkb3du
In0sCisgICAgICAgIHsiY29kZSI6IGNvZGUsICJrZXkiOiBrZXksICJ0eXBlIjogImtleXByZXNz
In0sCisgICAgICAgIHsiY29kZSI6IGNvZGUsICJrZXkiOiBrZXksICJ0eXBlIjogImtleXVwIn0s
CisgICAgXQorICAgIGV2ZW50cyA9IFtmaWx0ZXJfZGljdChlLCBleHBlY3RlZFswXSkgZm9yIGUg
aW4gZ2V0X2V2ZW50cyhzZXNzaW9uKV0KKyAgICBpZiBsZW4oZXZlbnRzKSA9PSAyOgorICAgICAg
ICAjIG1vc3QgYnJvd3NlcnMgZG9uJ3Qgc2VuZCBhIGtleXByZXNzIGZvciBub24tcHJpbnRhYmxl
IGtleXMKKyAgICAgICAgYXNzZXJ0IGV2ZW50cyA9PSBbZXhwZWN0ZWRbMF0sIGV4cGVjdGVkWzJd
XQorICAgIGVsc2U6CisgICAgICAgIGFzc2VydCBldmVudHMgPT0gZXhwZWN0ZWQKKyAgICBhc3Nl
cnQgbGVuKGdldF9rZXlzKGtleV9yZXBvcnRlcikpID09IDAKKworCitkZWYgdGVzdF9zZXF1ZW5j
ZV9vZl9rZXlkb3duX3ByaW50YWJsZV9rZXlzX3NlbmRzX2V2ZW50cyhzZXNzaW9uLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5X3Jl
cG9ydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAga2V5X2NoYWluKToKKyAgICBrZXlfY2hhaW4gXAorICAgICAgICAua2V5X2Rvd24o
ImEiKSBcCisgICAgICAgIC5rZXlfZG93bigiYiIpIFwKKyAgICAgICAgLnBlcmZvcm0oKQorICAg
IGV4cGVjdGVkID0gWworICAgICAgICB7ImNvZGUiOiAiS2V5QSIsICJrZXkiOiAiYSIsICJ0eXBl
IjogImtleWRvd24ifSwKKyAgICAgICAgeyJjb2RlIjogIktleUEiLCAia2V5IjogImEiLCAidHlw
ZSI6ICJrZXlwcmVzcyJ9LAorICAgICAgICB7ImNvZGUiOiAiS2V5QiIsICJrZXkiOiAiYiIsICJ0
eXBlIjogImtleWRvd24ifSwKKyAgICAgICAgeyJjb2RlIjogIktleUIiLCAia2V5IjogImIiLCAi
dHlwZSI6ICJrZXlwcmVzcyJ9LAorICAgIF0KKyAgICBldmVudHMgPSBbZmlsdGVyX2RpY3QoZSwg
ZXhwZWN0ZWRbMF0pIGZvciBlIGluIGdldF9ldmVudHMoc2Vzc2lvbildCisgICAgYXNzZXJ0IGV2
ZW50cyA9PSBleHBlY3RlZAorICAgIGFzc2VydCBnZXRfa2V5cyhrZXlfcmVwb3J0ZXIpID09ICJh
YiIKKworCitkZWYgdGVzdF9zZXF1ZW5jZV9vZl9rZXlkb3duX2NoYXJhY3Rlcl9rZXlzKHNlc3Np
b24sIGtleV9yZXBvcnRlciwga2V5X2NoYWluKToKKyAgICBrZXlfY2hhaW4uc2VuZF9rZXlzKCJl
ZiIpLnBlcmZvcm0oKQorICAgIGV4cGVjdGVkID0gWworICAgICAgICB7ImNvZGUiOiAiS2V5RSIs
ICJrZXkiOiAiZSIsICJ0eXBlIjogImtleWRvd24ifSwKKyAgICAgICAgeyJjb2RlIjogIktleUUi
LCAia2V5IjogImUiLCAidHlwZSI6ICJrZXlwcmVzcyJ9LAorICAgICAgICB7ImNvZGUiOiAiS2V5
RSIsICJrZXkiOiAiZSIsICJ0eXBlIjogImtleXVwIn0sCisgICAgICAgIHsiY29kZSI6ICJLZXlG
IiwgImtleSI6ICJmIiwgInR5cGUiOiAia2V5ZG93biJ9LAorICAgICAgICB7ImNvZGUiOiAiS2V5
RiIsICJrZXkiOiAiZiIsICJ0eXBlIjogImtleXByZXNzIn0sCisgICAgICAgIHsiY29kZSI6ICJL
ZXlGIiwgImtleSI6ICJmIiwgInR5cGUiOiAia2V5dXAifSwKKyAgICBdCisgICAgZXZlbnRzID0g
W2ZpbHRlcl9kaWN0KGUsIGV4cGVjdGVkWzBdKSBmb3IgZSBpbiBnZXRfZXZlbnRzKHNlc3Npb24p
XQorICAgIGFzc2VydCBldmVudHMgPT0gZXhwZWN0ZWQKKyAgICBhc3NlcnQgZ2V0X2tleXMoa2V5
X3JlcG9ydGVyKSA9PSAiZWYiCisKKworZGVmIHRlc3RfYmFja3NwYWNlX2VyYXNlc19rZXlzKHNl
c3Npb24sIGtleV9yZXBvcnRlciwga2V5X2NoYWluKToKKyAgICBrZXlfY2hhaW4gXAorICAgICAg
ICAuc2VuZF9rZXlzKCJlZmNkIikgXAorICAgICAgICAuc2VuZF9rZXlzKFtLZXlzLkJBQ0tTUEFD
RSwgS2V5cy5CQUNLU1BBQ0VdKSBcCisgICAgICAgIC5wZXJmb3JtKCkKKyAgICBhc3NlcnQgZ2V0
X2tleXMoa2V5X3JlcG9ydGVyKSA9PSAiZWYiCisKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3Rz
L2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvYWN0aW9ucy9tb3VzZS5weSBiL1dlYkRyaXZl
clRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvYWN0aW9ucy9tb3VzZS5weQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uM2ZmMWUzZWI1YTcKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL2Fj
dGlvbnMvbW91c2UucHkKQEAgLTAsMCArMSwxMzYgQEAKK2ltcG9ydCBweXRlc3QKKworZnJvbSB0
ZXN0cy5zdXBwb3J0LmlubGluZSBpbXBvcnQgaW5saW5lCitmcm9tIHRlc3RzLmFjdGlvbnMuc3Vw
cG9ydC5yZWZpbmUgaW1wb3J0IGdldF9ldmVudHMsIGZpbHRlcl9kaWN0Citmcm9tIHRlc3RzLnN1
cHBvcnQud2FpdCBpbXBvcnQgd2FpdAorCisKK2RlZiBsaW5rX2RvYyhkZXN0KToKKyAgICBjb250
ZW50ID0gIjxhIGhyZWY9XCJ7fVwiIGlkPVwibGlua1wiPmRlc3RpbmF0aW9uPC9hPiIuZm9ybWF0
KGRlc3QpCisgICAgcmV0dXJuIGlubGluZShjb250ZW50KQorCisKK2RlZiBnZXRfY2VudGVyKHJl
Y3QpOgorICAgIHJldHVybiB7CisgICAgICAgICJ4IjogcmVjdFsid2lkdGgiXSAvIDIgKyByZWN0
WyJ4Il0sCisgICAgICAgICJ5IjogcmVjdFsiaGVpZ2h0Il0gLyAyICsgcmVjdFsieSJdLAorICAg
IH0KKworCisjIFRPRE8gdXNlIHB5dGVzdC5hcHByb3ggb25jZSB3ZSB1cGdyYWRlIHRvIHB5dGVz
dCA+IDMuMAorZGVmIGFwcHJveChuLCBtLCB0b2xlcmFuY2U9MSk6CisgICAgcmV0dXJuIGFicyhu
IC0gbSkgPCB0b2xlcmFuY2UKKworCitkZWYgdGVzdF9jbGlja19hdF9jb29yZGluYXRlcyhzZXNz
aW9uLCB0ZXN0X2FjdGlvbnNfcGFnZSwgbW91c2VfY2hhaW4pOgorICAgIGRpdl9wb2ludCA9IHsK
KyAgICAgICAgIngiOiA4MiwKKyAgICAgICAgInkiOiAxODcsCisgICAgfQorICAgIG1vdXNlX2No
YWluIFwKKyAgICAgICAgLnBvaW50ZXJfbW92ZShkaXZfcG9pbnRbIngiXSwgZGl2X3BvaW50WyJ5
Il0sIGR1cmF0aW9uPTEwMDApIFwKKyAgICAgICAgLmNsaWNrKCkgXAorICAgICAgICAucGVyZm9y
bSgpCisgICAgZXZlbnRzID0gZ2V0X2V2ZW50cyhzZXNzaW9uKQorICAgIGFzc2VydCBsZW4oZXZl
bnRzKSA9PSA0CisgICAgZm9yIGUgaW4gZXZlbnRzOgorICAgICAgICBpZiBlWyJ0eXBlIl0gIT0g
Im1vdXNlbW92ZSI6CisgICAgICAgICAgICBhc3NlcnQgZVsicGFnZVgiXSA9PSBkaXZfcG9pbnRb
IngiXQorICAgICAgICAgICAgYXNzZXJ0IGVbInBhZ2VZIl0gPT0gZGl2X3BvaW50WyJ5Il0KKyAg
ICAgICAgICAgIGFzc2VydCBlWyJ0YXJnZXQiXSA9PSAib3V0ZXIiCisgICAgICAgIGlmIGVbInR5
cGUiXSAhPSAibW91c2Vkb3duIjoKKyAgICAgICAgICAgIGFzc2VydCBlWyJidXR0b25zIl0gPT0g
MAorICAgICAgICBhc3NlcnQgZVsiYnV0dG9uIl0gPT0gMAorICAgIGV4cGVjdGVkID0gWworICAg
ICAgICB7InR5cGUiOiAibW91c2Vkb3duIiwgImJ1dHRvbnMiOiAxfSwKKyAgICAgICAgeyJ0eXBl
IjogIm1vdXNldXAiLCAgImJ1dHRvbnMiOiAwfSwKKyAgICAgICAgeyJ0eXBlIjogImNsaWNrIiwg
ImJ1dHRvbnMiOiAwfSwKKyAgICBdCisgICAgZmlsdGVyZWRfZXZlbnRzID0gW2ZpbHRlcl9kaWN0
KGUsIGV4cGVjdGVkWzBdKSBmb3IgZSBpbiBldmVudHNdCisgICAgYXNzZXJ0IGV4cGVjdGVkID09
IGZpbHRlcmVkX2V2ZW50c1sxOl0KKworCitkZWYgdGVzdF9jb250ZXh0X21lbnVfYXRfY29vcmRp
bmF0ZXMoc2Vzc2lvbiwgdGVzdF9hY3Rpb25zX3BhZ2UsIG1vdXNlX2NoYWluKToKKyAgICBkaXZf
cG9pbnQgPSB7CisgICAgICAgICJ4IjogODIsCisgICAgICAgICJ5IjogMTg3LAorICAgIH0KKyAg
ICBtb3VzZV9jaGFpbiBcCisgICAgICAgIC5wb2ludGVyX21vdmUoZGl2X3BvaW50WyJ4Il0sIGRp
dl9wb2ludFsieSJdKSBcCisgICAgICAgIC5wb2ludGVyX2Rvd24oYnV0dG9uPTIpIFwKKyAgICAg
ICAgLnBvaW50ZXJfdXAoYnV0dG9uPTIpIFwKKyAgICAgICAgLnBlcmZvcm0oKQorICAgIGV2ZW50
cyA9IGdldF9ldmVudHMoc2Vzc2lvbikKKyAgICBleHBlY3RlZCA9IFsKKyAgICAgICAgeyJ0eXBl
IjogIm1vdXNlZG93biIsICJidXR0b24iOiAyfSwKKyAgICAgICAgeyJ0eXBlIjogImNvbnRleHRt
ZW51IiwgICJidXR0b24iOiAyfSwKKyAgICBdCisgICAgYXNzZXJ0IGxlbihldmVudHMpID09IDQK
KyAgICBmaWx0ZXJlZF9ldmVudHMgPSBbZmlsdGVyX2RpY3QoZSwgZXhwZWN0ZWRbMF0pIGZvciBl
IGluIGV2ZW50c10KKyAgICBtb3VzZWRvd25fY29udGV4dG1lbnVfZXZlbnRzID0gWworICAgICAg
ICB4IGZvciB4IGluIGZpbHRlcmVkX2V2ZW50cworICAgICAgICBpZiB4WyJ0eXBlIl0gaW4gWyJt
b3VzZWRvd24iLCAiY29udGV4dG1lbnUiXQorICAgIF0KKyAgICBhc3NlcnQgZXhwZWN0ZWQgPT0g
bW91c2Vkb3duX2NvbnRleHRtZW51X2V2ZW50cworCisKK2RlZiB0ZXN0X2NsaWNrX2VsZW1lbnRf
Y2VudGVyKHNlc3Npb24sIHRlc3RfYWN0aW9uc19wYWdlLCBtb3VzZV9jaGFpbik6CisgICAgb3V0
ZXIgPSBzZXNzaW9uLmZpbmQuY3NzKCIjb3V0ZXIiLCBhbGw9RmFsc2UpCisgICAgY2VudGVyID0g
Z2V0X2NlbnRlcihvdXRlci5yZWN0KQorICAgIG1vdXNlX2NoYWluLmNsaWNrKGVsZW1lbnQ9b3V0
ZXIpLnBlcmZvcm0oKQorICAgIGV2ZW50cyA9IGdldF9ldmVudHMoc2Vzc2lvbikKKyAgICBhc3Nl
cnQgbGVuKGV2ZW50cykgPT0gNAorICAgIGV2ZW50X3R5cGVzID0gW2VbInR5cGUiXSBmb3IgZSBp
biBldmVudHNdCisgICAgYXNzZXJ0IFsibW91c2Vtb3ZlIiwgIm1vdXNlZG93biIsICJtb3VzZXVw
IiwgImNsaWNrIl0gPT0gZXZlbnRfdHlwZXMKKyAgICBmb3IgZSBpbiBldmVudHM6CisgICAgICAg
IGlmIGVbInR5cGUiXSAhPSAibW91c2Vtb3ZlIjoKKyAgICAgICAgICAgIGFzc2VydCBhcHByb3go
ZVsicGFnZVgiXSwgY2VudGVyWyJ4Il0pCisgICAgICAgICAgICBhc3NlcnQgYXBwcm94KGVbInBh
Z2VZIl0sIGNlbnRlclsieSJdKQorICAgICAgICAgICAgYXNzZXJ0IGVbInRhcmdldCJdID09ICJv
dXRlciIKKworCitkZWYgdGVzdF9jbGlja19uYXZpZ2F0aW9uKHNlc3Npb24sIHVybCk6CisgICAg
ZGVzdGluYXRpb24gPSB1cmwoIi93ZWJkcml2ZXIvdGVzdHMvYWN0aW9ucy9zdXBwb3J0L3Rlc3Rf
YWN0aW9uc193ZHNwZWMuaHRtbCIpCisgICAgc3RhcnQgPSBsaW5rX2RvYyhkZXN0aW5hdGlvbikK
KworICAgIGRlZiBjbGljayhsaW5rKToKKyAgICAgICAgbW91c2VfY2hhaW4gPSBzZXNzaW9uLmFj
dGlvbnMuc2VxdWVuY2UoCisgICAgICAgICAgICAicG9pbnRlciIsICJwb2ludGVyX2lkIiwgeyJw
b2ludGVyVHlwZSI6ICJtb3VzZSJ9KQorICAgICAgICBtb3VzZV9jaGFpbi5jbGljayhlbGVtZW50
PWxpbmspLnBlcmZvcm0oKQorCisgICAgc2Vzc2lvbi51cmwgPSBzdGFydAorICAgIGVycm9yX21l
c3NhZ2UgPSAiRGlkIG5vdCBuYXZpZ2F0ZSB0byAlcyIgJSBkZXN0aW5hdGlvbgorCisgICAgY2xp
Y2soc2Vzc2lvbi5maW5kLmNzcygiI2xpbmsiLCBhbGw9RmFsc2UpKQorICAgIHdhaXQoc2Vzc2lv
biwgbGFtYmRhIHM6IHMudXJsID09IGRlc3RpbmF0aW9uLCBlcnJvcl9tZXNzYWdlKQorICAgICMg
cmVwZWF0IHN0ZXBzIHRvIGNoZWNrIGJlaGF2aW91ciBhZnRlciBkb2N1bWVudCB1bmxvYWQKKyAg
ICBzZXNzaW9uLnVybCA9IHN0YXJ0CisgICAgY2xpY2soc2Vzc2lvbi5maW5kLmNzcygiI2xpbmsi
LCBhbGw9RmFsc2UpKQorICAgIHdhaXQoc2Vzc2lvbiwgbGFtYmRhIHM6IHMudXJsID09IGRlc3Rp
bmF0aW9uLCBlcnJvcl9tZXNzYWdlKQorCisKK0BweXRlc3QubWFyay5wYXJhbWV0cml6ZSgiZHJh
Z19kdXJhdGlvbiIsIFswLCAzMDAsIDgwMF0pCitAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoImR4
LCBkeSIsCisgICAgWygyMCwgMCksICgwLCAxNSksICgxMCwgMTUpLCAoLTIwLCAwKSwgKDEwLCAt
MTUpLCAoLTEwLCAtMTUpXSkKK2RlZiB0ZXN0X2RyYWdfYW5kX2Ryb3Aoc2Vzc2lvbiwgdGVzdF9h
Y3Rpb25zX3BhZ2UsIG1vdXNlX2NoYWluLCBkeCwgZHksIGRyYWdfZHVyYXRpb24pOgorICAgIGRy
YWdfdGFyZ2V0ID0gc2Vzc2lvbi5maW5kLmNzcygiI2RyYWdUYXJnZXQiLCBhbGw9RmFsc2UpCisg
ICAgaW5pdGlhbF9yZWN0ID0gZHJhZ190YXJnZXQucmVjdAorICAgIGluaXRpYWxfY2VudGVyID0g
Z2V0X2NlbnRlcihpbml0aWFsX3JlY3QpCisgICAgIyBDb25jbHVkZSBjaGFpbiB3aXRoIGV4dHJh
IG1vdmUgdG8gYWxsb3cgdGltZSBmb3IgbGFzdCBxdWV1ZWQKKyAgICAjIGNvb3JkaW5hdGUtdXBk
YXRlIG9mIGRyYWdfdGFyZ2V0IGFuZCB0byB0ZXN0IHRoYXQgZHJhZ190YXJnZXQgaXMgImRyb3Bw
ZWQiLgorICAgIG1vdXNlX2NoYWluIFwKKyAgICAgICAgLnBvaW50ZXJfbW92ZSgwLCAwLCBvcmln
aW49ZHJhZ190YXJnZXQpIFwKKyAgICAgICAgLnBvaW50ZXJfZG93bigpIFwKKyAgICAgICAgLnBv
aW50ZXJfbW92ZShkeCwgZHksIGR1cmF0aW9uPWRyYWdfZHVyYXRpb24sIG9yaWdpbj0icG9pbnRl
ciIpIFwKKyAgICAgICAgLnBvaW50ZXJfdXAoKSBcCisgICAgICAgIC5wb2ludGVyX21vdmUoODAs
IDUwLCBkdXJhdGlvbj0xMDAsIG9yaWdpbj0icG9pbnRlciIpIFwKKyAgICAgICAgLnBlcmZvcm0o
KQorICAgICMgbW91c2V1cCB0aGF0IGVuZHMgdGhlIGRyYWcgaXMgYXQgdGhlIGV4cGVjdGVkIGRl
c3RpbmF0aW9uCisgICAgZSA9IGdldF9ldmVudHMoc2Vzc2lvbilbMV0KKyAgICBhc3NlcnQgZVsi
dHlwZSJdID09ICJtb3VzZXVwIgorICAgIGFzc2VydCBhcHByb3goZVsicGFnZVgiXSwgaW5pdGlh
bF9jZW50ZXJbIngiXSArIGR4KQorICAgIGFzc2VydCBhcHByb3goZVsicGFnZVkiXSwgaW5pdGlh
bF9jZW50ZXJbInkiXSArIGR5KQorICAgICMgY2hlY2sgcmVzdWx0aW5nIGxvY2F0aW9uIG9mIHRo
ZSBkcmFnZ2VkIGVsZW1lbnQKKyAgICBmaW5hbF9yZWN0ID0gZHJhZ190YXJnZXQucmVjdAorICAg
IGFzc2VydCBpbml0aWFsX3JlY3RbIngiXSArIGR4ID09IGZpbmFsX3JlY3RbIngiXQorICAgIGFz
c2VydCBpbml0aWFsX3JlY3RbInkiXSArIGR5ID09IGZpbmFsX3JlY3RbInkiXQpkaWZmIC0tZ2l0
IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9hY3Rpb25zL3Nl
cXVlbmNlLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9h
Y3Rpb25zL3NlcXVlbmNlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li4zZTgzYjE1YjM1MwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVk
L3czYy93ZWJkcml2ZXIvdGVzdHMvYWN0aW9ucy9zZXF1ZW5jZS5weQpAQCAtMCwwICsxLDE0NiBA
QAorIyBNRVRBOiB0aW1lb3V0PWxvbmcKKworaW1wb3J0IHB5dGVzdAorCitmcm9tIHRlc3RzLmFj
dGlvbnMuc3VwcG9ydC5yZWZpbmUgaW1wb3J0IGdldF9rZXlzLCBmaWx0ZXJfZGljdCwgZ2V0X2V2
ZW50cworZnJvbSB0ZXN0cy5hY3Rpb25zLnN1cHBvcnQua2V5cyBpbXBvcnQgS2V5cworCisKK2Rl
ZiB0ZXN0X25vX2FjdGlvbnNfc2VuZF9ub19ldmVudHMoc2Vzc2lvbiwga2V5X3JlcG9ydGVyLCBr
ZXlfY2hhaW4pOgorICAgIGtleV9jaGFpbi5wZXJmb3JtKCkKKyAgICBhc3NlcnQgbGVuKGdldF9r
ZXlzKGtleV9yZXBvcnRlcikpID09IDAKKyAgICBhc3NlcnQgbGVuKGdldF9ldmVudHMoc2Vzc2lv
bikpID09IDAKKworCitkZWYgdGVzdF9yZWxlYXNlX2NoYXJfc2VxdWVuY2Vfc2VuZHNfa2V5dXBf
ZXZlbnRzX2luX3JldmVyc2Uoc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfcmVwb3J0ZXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5X2No
YWluKToKKyAgICBrZXlfY2hhaW4gXAorICAgICAgICAua2V5X2Rvd24oImEiKSBcCisgICAgICAg
IC5rZXlfZG93bigiYiIpIFwKKyAgICAgICAgLnBlcmZvcm0oKQorICAgICMgcmVzZXQgc28gd2Ug
b25seSBzZWUgdGhlIHJlbGVhc2UgZXZlbnRzCisgICAgc2Vzc2lvbi5leGVjdXRlX3NjcmlwdCgi
cmVzZXRFdmVudHMoKTsiKQorICAgIHNlc3Npb24uYWN0aW9ucy5yZWxlYXNlKCkKKyAgICBleHBl
Y3RlZCA9IFsKKyAgICAgICAgeyJjb2RlIjogIktleUIiLCAia2V5IjogImIiLCAidHlwZSI6ICJr
ZXl1cCJ9LAorICAgICAgICB7ImNvZGUiOiAiS2V5QSIsICJrZXkiOiAiYSIsICJ0eXBlIjogImtl
eXVwIn0sCisgICAgXQorICAgIGV2ZW50cyA9IFtmaWx0ZXJfZGljdChlLCBleHBlY3RlZFswXSkg
Zm9yIGUgaW4gZ2V0X2V2ZW50cyhzZXNzaW9uKV0KKyAgICBhc3NlcnQgZXZlbnRzID09IGV4cGVj
dGVkCisKKworZGVmIHRlc3RfcmVsZWFzZV9ub19hY3Rpb25zX3NlbmRzX25vX2V2ZW50cyhzZXNz
aW9uLCBrZXlfcmVwb3J0ZXIpOgorICAgIHNlc3Npb24uYWN0aW9ucy5yZWxlYXNlKCkKKyAgICBh
c3NlcnQgbGVuKGdldF9rZXlzKGtleV9yZXBvcnRlcikpID09IDAKKyAgICBhc3NlcnQgbGVuKGdl
dF9ldmVudHMoc2Vzc2lvbikpID09IDAKKworCitAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoIm1v
ZGlmaWVyLCBwcm9wIiwgWworICAgIChLZXlzLkNPTlRST0wsICJjdHJsS2V5IiksCisgICAgKEtl
eXMuQUxULCAiYWx0S2V5IiksCisgICAgKEtleXMuTUVUQSwgIm1ldGFLZXkiKSwKKyAgICAoS2V5
cy5TSElGVCwgInNoaWZ0S2V5IiksCisgICAgKEtleXMuUl9DT05UUk9MLCAiY3RybEtleSIpLAor
ICAgIChLZXlzLlJfQUxULCAiYWx0S2V5IiksCisgICAgKEtleXMuUl9NRVRBLCAibWV0YUtleSIp
LAorICAgIChLZXlzLlJfU0hJRlQsICJzaGlmdEtleSIpLAorXSkKK2RlZiB0ZXN0X2NvbnRyb2xf
Y2xpY2soc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9hY3Rpb25zX3BhZ2Us
CisgICAgICAgICAgICAgICAgICAgICAgIGtleV9jaGFpbiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgbW91c2VfY2hhaW4sCisgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyLAorICAgICAg
ICAgICAgICAgICAgICAgICBwcm9wKToKKyAgICBrZXlfY2hhaW4gXAorICAgICAgICAucGF1c2Uo
MCkgXAorICAgICAgICAua2V5X2Rvd24obW9kaWZpZXIpIFwKKyAgICAgICAgLnBhdXNlKDIwMCkg
XAorICAgICAgICAua2V5X3VwKG1vZGlmaWVyKQorICAgIG91dGVyID0gc2Vzc2lvbi5maW5kLmNz
cygiI291dGVyIiwgYWxsPUZhbHNlKQorICAgIG1vdXNlX2NoYWluLmNsaWNrKGVsZW1lbnQ9b3V0
ZXIpCisgICAgc2Vzc2lvbi5hY3Rpb25zLnBlcmZvcm0oW2tleV9jaGFpbi5kaWN0LCBtb3VzZV9j
aGFpbi5kaWN0XSkKKyAgICBleHBlY3RlZCA9IFsKKyAgICAgICAgeyJ0eXBlIjogIm1vdXNlbW92
ZSJ9LAorICAgICAgICB7InR5cGUiOiAibW91c2Vkb3duIn0sCisgICAgICAgIHsidHlwZSI6ICJt
b3VzZXVwIn0sCisgICAgICAgIHsidHlwZSI6ICJjbGljayJ9LAorICAgIF0KKyAgICBkZWZhdWx0
cyA9IHsKKyAgICAgICAgImFsdEtleSI6IEZhbHNlLAorICAgICAgICAibWV0YUtleSI6IEZhbHNl
LAorICAgICAgICAic2hpZnRLZXkiOiBGYWxzZSwKKyAgICAgICAgImN0cmxLZXkiOiBGYWxzZQor
ICAgIH0KKyAgICBmb3IgZSBpbiBleHBlY3RlZDoKKyAgICAgICAgZS51cGRhdGUoZGVmYXVsdHMp
CisgICAgICAgIGlmIGVbInR5cGUiXSAhPSAibW91c2Vtb3ZlIjoKKyAgICAgICAgICAgIGVbcHJv
cF0gPSBUcnVlCisgICAgZmlsdGVyZWRfZXZlbnRzID0gW2ZpbHRlcl9kaWN0KGUsIGV4cGVjdGVk
WzBdKSBmb3IgZSBpbiBnZXRfZXZlbnRzKHNlc3Npb24pXQorICAgIGFzc2VydCBleHBlY3RlZCA9
PSBmaWx0ZXJlZF9ldmVudHMKKworCitkZWYgdGVzdF9yZWxlYXNlX2NvbnRyb2xfY2xpY2soc2Vz
c2lvbiwga2V5X3JlcG9ydGVyLCBrZXlfY2hhaW4sIG1vdXNlX2NoYWluKToKKyAgICBrZXlfY2hh
aW4gXAorICAgICAgICAucGF1c2UoMCkgXAorICAgICAgICAua2V5X2Rvd24oS2V5cy5DT05UUk9M
KQorICAgIG1vdXNlX2NoYWluIFwKKyAgICAgICAgLnBvaW50ZXJfbW92ZSgwLCAwLCBvcmlnaW49
a2V5X3JlcG9ydGVyKSBcCisgICAgICAgIC5wb2ludGVyX2Rvd24oKQorICAgIHNlc3Npb24uYWN0
aW9ucy5wZXJmb3JtKFtrZXlfY2hhaW4uZGljdCwgbW91c2VfY2hhaW4uZGljdF0pCisgICAgc2Vz
c2lvbi5leGVjdXRlX3NjcmlwdCgiIiIKKyAgICAgICAgdmFyIGtleVJlcG9ydGVyID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoImtleXMiKTsKKyAgICAgICAgWyJtb3VzZWRvd24iLCAibW91c2V1
cCJdLmZvckVhY2goKGUpID0+IHsKKyAgICAgICAgICAgIGtleVJlcG9ydGVyLmFkZEV2ZW50TGlz
dGVuZXIoZSwgcmVjb3JkUG9pbnRlckV2ZW50KTsKKyAgICAgICAgICB9KTsKKyAgICAgICAgcmVz
ZXRFdmVudHMoKTsKKyAgICAiIiIpCisgICAgc2Vzc2lvbi5hY3Rpb25zLnJlbGVhc2UoKQorICAg
IGV4cGVjdGVkID0gWworICAgICAgICB7InR5cGUiOiAibW91c2V1cCJ9LAorICAgICAgICB7InR5
cGUiOiAia2V5dXAifSwKKyAgICBdCisgICAgZXZlbnRzID0gW2ZpbHRlcl9kaWN0KGUsIGV4cGVj
dGVkWzBdKSBmb3IgZSBpbiBnZXRfZXZlbnRzKHNlc3Npb24pXQorICAgIGFzc2VydCBldmVudHMg
PT0gZXhwZWN0ZWQKKworCitkZWYgdGVzdF9tYW55X21vZGlmaWVyc19jbGljayhzZXNzaW9uLCB0
ZXN0X2FjdGlvbnNfcGFnZSwga2V5X2NoYWluLCBtb3VzZV9jaGFpbik6CisgICAgb3V0ZXIgPSBz
ZXNzaW9uLmZpbmQuY3NzKCIjb3V0ZXIiLCBhbGw9RmFsc2UpCisgICAga2V5X2NoYWluIFwKKyAg
ICAgICAgLnBhdXNlKDApIFwKKyAgICAgICAgLmtleV9kb3duKEtleXMuQ09OVFJPTCkgXAorICAg
ICAgICAua2V5X2Rvd24oS2V5cy5TSElGVCkgXAorICAgICAgICAucGF1c2UoMCkgXAorICAgICAg
ICAua2V5X3VwKEtleXMuQ09OVFJPTCkgXAorICAgICAgICAua2V5X3VwKEtleXMuU0hJRlQpCisg
ICAgbW91c2VfY2hhaW4gXAorICAgICAgICAucG9pbnRlcl9tb3ZlKDAsIDAsIG9yaWdpbj1vdXRl
cikgXAorICAgICAgICAucGF1c2UoMCkgXAorICAgICAgICAucG9pbnRlcl9kb3duKCkgXAorICAg
ICAgICAucG9pbnRlcl91cCgpIFwKKyAgICAgICAgLnBhdXNlKDApIFwKKyAgICAgICAgLnBhdXNl
KDApIFwKKyAgICAgICAgLnBvaW50ZXJfZG93bigpCisgICAgc2Vzc2lvbi5hY3Rpb25zLnBlcmZv
cm0oW2tleV9jaGFpbi5kaWN0LCBtb3VzZV9jaGFpbi5kaWN0XSkKKyAgICBleHBlY3RlZCA9IFsK
KyAgICAgICAgeyJ0eXBlIjogIm1vdXNlbW92ZSJ9LAorICAgICAgICAjIHNoaWZ0IGFuZCBjdHJs
IHByZXNzZXMKKyAgICAgICAgeyJ0eXBlIjogIm1vdXNlZG93biJ9LAorICAgICAgICB7InR5cGUi
OiAibW91c2V1cCJ9LAorICAgICAgICB7InR5cGUiOiAiY2xpY2sifSwKKyAgICAgICAgIyBubyBt
b2RpZmllcnMgcHJlc3NlZAorICAgICAgICB7InR5cGUiOiAibW91c2Vkb3duIn0sCisgICAgXQor
ICAgIGRlZmF1bHRzID0geworICAgICAgICAiYWx0S2V5IjogRmFsc2UsCisgICAgICAgICJtZXRh
S2V5IjogRmFsc2UsCisgICAgICAgICJzaGlmdEtleSI6IEZhbHNlLAorICAgICAgICAiY3RybEtl
eSI6IEZhbHNlCisgICAgfQorICAgIGZvciBlIGluIGV4cGVjdGVkOgorICAgICAgICBlLnVwZGF0
ZShkZWZhdWx0cykKKyAgICBmb3IgZSBpbiBleHBlY3RlZFsxOjRdOgorICAgICAgICBlWyJzaGlm
dEtleSJdID0gVHJ1ZQorICAgICAgICBlWyJjdHJsS2V5Il0gPSBUcnVlCisgICAgZXZlbnRzID0g
W2ZpbHRlcl9kaWN0KGUsIGV4cGVjdGVkWzBdKSBmb3IgZSBpbiBnZXRfZXZlbnRzKHNlc3Npb24p
XQorICAgIGFzc2VydCBldmVudHMgPT0gZXhwZWN0ZWQKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRl
c3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvYWN0aW9ucy9zcGVjaWFsX2tleXMucHkg
Yi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL2FjdGlvbnMvc3Bl
Y2lhbF9rZXlzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lZTJk
MTNmYWY0ZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93
ZWJkcml2ZXIvdGVzdHMvYWN0aW9ucy9zcGVjaWFsX2tleXMucHkKQEAgLTAsMCArMSwzOSBAQAor
IyBNRVRBOiB0aW1lb3V0PWxvbmcKKworaW1wb3J0IHB5dGVzdAorZnJvbSB0ZXN0cy5hY3Rpb25z
LnN1cHBvcnQua2V5cyBpbXBvcnQgQUxMX0VWRU5UUywgS2V5cworZnJvbSB0ZXN0cy5hY3Rpb25z
LnN1cHBvcnQucmVmaW5lIGltcG9ydCBmaWx0ZXJfZGljdCwgZ2V0X2tleXMsIGdldF9ldmVudHMK
KworCitAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoIm5hbWUsZXhwZWN0ZWQiLCBBTExfRVZFTlRT
Lml0ZW1zKCkpCitkZWYgdGVzdF93ZWJkcml2ZXJfc3BlY2lhbF9rZXlfc2VuZHNfa2V5ZG93bihz
ZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5
X3JlcG9ydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
a2V5X2NoYWluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVj
dGVkKToKKyAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoIkYiKToKKyAgICAgICAgIyBQcmV2ZW50IGRl
ZmF1bHQgYmVoYXZpb3IgZm9yIEYxLCBldGMuLCBidXQgb25seSBhZnRlciBrZXlkb3duCisgICAg
ICAgICMgYnViYmxlcyB1cCB0byBib2R5LiAoT3RoZXJ3aXNlIGFjdGl2YXRlZCBicm93c2VyIG1l
bnVzL2Z1bmN0aW9ucworICAgICAgICAjIG1heSBpbnRlcmZlcmUgd2l0aCBzdWJzZXF1ZW50IHRl
c3RzLikKKyAgICAgICAgc2Vzc2lvbi5leGVjdXRlX3NjcmlwdCgiIiIKKyAgICAgICAgICAgIGRv
Y3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsCisgICAgICAgICAgICAgICAg
ICAgIChlKSA9PiBlLnByZXZlbnREZWZhdWx0KCkpOworICAgICAgICAiIiIpCisgICAga2V5X2No
YWluLmtleV9kb3duKGdldGF0dHIoS2V5cywgbmFtZSkpLnBlcmZvcm0oKQorICAgICMgb25seSBp
bnRlcmVzdGVkIGluIGtleWRvd24KKyAgICBmaXJzdF9ldmVudCA9IGdldF9ldmVudHMoc2Vzc2lv
bilbMF0KKyAgICAjIG1ha2UgYSBjb3B5IHNvIHdlIGNhbiB0aHJvdyBvdXQgaXJyZWxldmFudCBr
ZXlzIGFuZCBjb21wYXJlIHRvIGV2ZW50cworICAgIGV4cGVjdGVkID0gZGljdChleHBlY3RlZCkK
KworICAgIGRlbCBleHBlY3RlZFsidmFsdWUiXQorICAgICMgY2hlY2sgYW5kIHJlbW92ZSBrZXlz
IHRoYXQgYXJlbid0IGluIGV4cGVjdGVkCisgICAgYXNzZXJ0IGZpcnN0X2V2ZW50WyJ0eXBlIl0g
PT0gImtleWRvd24iCisgICAgYXNzZXJ0IGZpcnN0X2V2ZW50WyJyZXBlYXQiXSA9PSBGYWxzZQor
ICAgIGZpcnN0X2V2ZW50ID0gZmlsdGVyX2RpY3QoZmlyc3RfZXZlbnQsIGV4cGVjdGVkKQorICAg
IGFzc2VydCBmaXJzdF9ldmVudCA9PSBleHBlY3RlZAorICAgICMgb25seSBwcmludGFibGUgY2hh
cmFjdGVycyBzaG91bGQgYmUgcmVjb3JkZWQgaW4gaW5wdXQgZmllbGQKKyAgICBlbnRlcmVkX2tl
eXMgPSBnZXRfa2V5cyhrZXlfcmVwb3J0ZXIpCisgICAgaWYgbGVuKGV4cGVjdGVkWyJrZXkiXSkg
PT0gMToKKyAgICAgICAgYXNzZXJ0IGVudGVyZWRfa2V5cyA9PSBleHBlY3RlZFsia2V5Il0KKyAg
ICBlbHNlOgorICAgICAgICBhc3NlcnQgbGVuKGVudGVyZWRfa2V5cykgPT0gMApkaWZmIC0tZ2l0
IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9hY3Rpb25zL3N1
cHBvcnQvX19pbml0X18ucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVy
L3Rlc3RzL2FjdGlvbnMvc3VwcG9ydC9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uZTY5ZGUyOWJiMmQKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3Rz
L2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvYWN0aW9ucy9zdXBwb3J0L2tleXMucHkgYi9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL2FjdGlvbnMvc3VwcG9y
dC9rZXlzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44NTUxNzkx
NjY3OAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJk
cml2ZXIvdGVzdHMvYWN0aW9ucy9zdXBwb3J0L2tleXMucHkKQEAgLTAsMCArMSw3NDIgQEAKKyMg
TGljZW5zZWQgdG8gdGhlIFNvZnR3YXJlIEZyZWVkb20gQ29uc2VydmFuY3kgKFNGQykgdW5kZXIg
b25lCisjIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBO
T1RJQ0UgZmlsZQorIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBp
bmZvcm1hdGlvbgorIyByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBTRkMgbGlj
ZW5zZXMgdGhpcyBmaWxlCisjIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNp
b24gMi4wICh0aGUKKyMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNl
cHQgaW4gY29tcGxpYW5jZQorIyB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBj
b3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vu
c2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBv
ciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyMgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhl
IExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyMgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBX
QVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9y
IGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorIyBzcGVjaWZpYyBsYW5ndWFnZSBn
b3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisjIHVuZGVyIHRoZSBMaWNlbnNl
LgorCisiIiIKK1RoZSBLZXlzIGltcGxlbWVudGF0aW9uLgorIiIiCisKK2Zyb20gaW5zcGVjdCBp
bXBvcnQgZ2V0bWVtYmVycworCisKK2NsYXNzIEtleXMob2JqZWN0KToKKyAgICAiIiIKKyAgICBT
ZXQgb2Ygc3BlY2lhbCBrZXlzIGNvZGVzLgorCisgICAgU2VlIGFsc28gaHR0cHM6Ly93M2MuZ2l0
aHViLmlvL3dlYmRyaXZlci93ZWJkcml2ZXItc3BlYy5odG1sI2gta2V5Ym9hcmQtYWN0aW9ucwor
ICAgICIiIgorCisgICAgTlVMTCA9IHUiXHVlMDAwIgorICAgIENBTkNFTCA9IHUiXHVlMDAxIiAg
IyBeYnJlYWsKKyAgICBIRUxQID0gdSJcdWUwMDIiCisgICAgQkFDS1NQQUNFID0gdSJcdWUwMDMi
CisgICAgVEFCID0gdSJcdWUwMDQiCisgICAgQ0xFQVIgPSB1Ilx1ZTAwNSIKKyAgICBSRVRVUk4g
PSB1Ilx1ZTAwNiIKKyAgICBFTlRFUiA9IHUiXHVlMDA3IgorICAgIFNISUZUID0gdSJcdWUwMDgi
CisgICAgQ09OVFJPTCA9IHUiXHVlMDA5IgorICAgIEFMVCA9IHUiXHVlMDBhIgorICAgIFBBVVNF
ID0gdSJcdWUwMGIiCisgICAgRVNDQVBFID0gdSJcdWUwMGMiCisgICAgU1BBQ0UgPSB1Ilx1ZTAw
ZCIKKyAgICBQQUdFX1VQID0gdSJcdWUwMGUiCisgICAgUEFHRV9ET1dOID0gdSJcdWUwMGYiCisg
ICAgRU5EID0gdSJcdWUwMTAiCisgICAgSE9NRSA9IHUiXHVlMDExIgorICAgIExFRlQgPSB1Ilx1
ZTAxMiIKKyAgICBVUCA9IHUiXHVlMDEzIgorICAgIFJJR0hUID0gdSJcdWUwMTQiCisgICAgRE9X
TiA9IHUiXHVlMDE1IgorICAgIElOU0VSVCA9IHUiXHVlMDE2IgorICAgIERFTEVURSA9IHUiXHVl
MDE3IgorICAgIFNFTUlDT0xPTiA9IHUiXHVlMDE4IgorICAgIEVRVUFMUyA9IHUiXHVlMDE5Igor
CisgICAgTlVNUEFEMCA9IHUiXHVlMDFhIiAgIyBudW1iZXIgcGFkIGtleXMKKyAgICBOVU1QQUQx
ID0gdSJcdWUwMWIiCisgICAgTlVNUEFEMiA9IHUiXHVlMDFjIgorICAgIE5VTVBBRDMgPSB1Ilx1
ZTAxZCIKKyAgICBOVU1QQUQ0ID0gdSJcdWUwMWUiCisgICAgTlVNUEFENSA9IHUiXHVlMDFmIgor
ICAgIE5VTVBBRDYgPSB1Ilx1ZTAyMCIKKyAgICBOVU1QQUQ3ID0gdSJcdWUwMjEiCisgICAgTlVN
UEFEOCA9IHUiXHVlMDIyIgorICAgIE5VTVBBRDkgPSB1Ilx1ZTAyMyIKKyAgICBNVUxUSVBMWSA9
IHUiXHVlMDI0IgorICAgIEFERCA9IHUiXHVlMDI1IgorICAgIFNFUEFSQVRPUiA9IHUiXHVlMDI2
IgorICAgIFNVQlRSQUNUID0gdSJcdWUwMjciCisgICAgREVDSU1BTCA9IHUiXHVlMDI4IgorICAg
IERJVklERSA9IHUiXHVlMDI5IgorCisgICAgRjEgPSB1Ilx1ZTAzMSIgICMgZnVuY3Rpb24gIGtl
eXMKKyAgICBGMiA9IHUiXHVlMDMyIgorICAgIEYzID0gdSJcdWUwMzMiCisgICAgRjQgPSB1Ilx1
ZTAzNCIKKyAgICBGNSA9IHUiXHVlMDM1IgorICAgIEY2ID0gdSJcdWUwMzYiCisgICAgRjcgPSB1
Ilx1ZTAzNyIKKyAgICBGOCA9IHUiXHVlMDM4IgorICAgIEY5ID0gdSJcdWUwMzkiCisgICAgRjEw
ID0gdSJcdWUwM2EiCisgICAgRjExID0gdSJcdWUwM2IiCisgICAgRjEyID0gdSJcdWUwM2MiCisK
KyAgICBNRVRBID0gdSJcdWUwM2QiCisKKyAgICAjIE1vcmUga2V5cyBmcm9tIHdlYmRyaXZlciBz
cGVjCisgICAgWkVOS0FLVUhBTktBS1UgPSB1Ilx1RTA0MCIKKyAgICBSX1NISUZUID0gdSJcdUUw
NTAiCisgICAgUl9DT05UUk9MID0gdSJcdUUwNTEiCisgICAgUl9BTFQgPSB1Ilx1RTA1MiIKKyAg
ICBSX01FVEEgPSB1Ilx1RTA1MyIKKyAgICBSX1BBR0VVUCA9IHUiXHVFMDU0IgorICAgIFJfUEFH
RURPV04gPSB1Ilx1RTA1NSIKKyAgICBSX0VORCA9IHUiXHVFMDU2IgorICAgIFJfSE9NRSA9IHUi
XHVFMDU3IgorICAgIFJfQVJST1dMRUZUID0gdSJcdUUwNTgiCisgICAgUl9BUlJPV1VQID0gdSJc
dUUwNTkiCisgICAgUl9BUlJPV1JJR0hUID0gdSJcdUUwNUEiCisgICAgUl9BUlJPV0RPV04gPSB1
Ilx1RTA1QiIKKyAgICBSX0lOU0VSVCA9IHUiXHVFMDVDIgorICAgIFJfREVMRVRFID0gdSJcdUUw
NUQiCisKKworQUxMX0tFWVMgPSBnZXRtZW1iZXJzKEtleXMsIGxhbWJkYSB4OiB0eXBlKHgpID09
IHVuaWNvZGUpCisKK0FMTF9FVkVOVFMgPSB7CisgICAgIkFERCI6IHsKKyAgICAgICAgImNvZGUi
OiAiIiwKKyAgICAgICAgImN0cmwiOiBGYWxzZSwKKyAgICAgICAgImtleSI6ICIrIiwKKyAgICAg
ICAgImxvY2F0aW9uIjogMywKKyAgICAgICAgIm1ldGEiOiBGYWxzZSwKKyAgICAgICAgInNoaWZ0
IjogRmFsc2UsCisgICAgICAgICJ2YWx1ZSI6IHUiXHVlMDI1IiwKKyAgICB9LAorICAgICJBTFQi
OiB7CisgICAgICAgICJjb2RlIjogIkFsdExlZnQiLAorICAgICAgICAiY3RybCI6IEZhbHNlLAor
ICAgICAgICAia2V5IjogIkFsdCIsCisgICAgICAgICJsb2NhdGlvbiI6IDEsCisgICAgICAgICJt
ZXRhIjogRmFsc2UsCisgICAgICAgICJzaGlmdCI6IEZhbHNlLAorICAgICAgICAidmFsdWUiOiB1
Ilx1ZTAwYSIsCisgICAgfSwKKyAgICAiQkFDS1NQQUNFIjogeworICAgICAgICAiY29kZSI6ICJC
YWNrc3BhY2UiLAorICAgICAgICAiY3RybCI6IEZhbHNlLAorICAgICAgICAia2V5IjogIkJhY2tz
cGFjZSIsCisgICAgICAgICJsb2NhdGlvbiI6IDAsCisgICAgICAgICJtZXRhIjogRmFsc2UsCisg
ICAgICAgICJzaGlmdCI6IEZhbHNlLAorICAgICAgICAidmFsdWUiOiB1Ilx1ZTAwMyIsCisgICAg
fSwKKyAgICAiQ0FOQ0VMIjogeworICAgICAgICAiY29kZSI6ICIiLAorICAgICAgICAiY3RybCI6
IEZhbHNlLAorICAgICAgICAia2V5IjogIkNhbmNlbCIsCisgICAgICAgICJsb2NhdGlvbiI6IDAs
CisgICAgICAgICJtZXRhIjogRmFsc2UsCisgICAgICAgICJzaGlmdCI6IEZhbHNlLAorICAgICAg
ICAidmFsdWUiOiB1Ilx1ZTAwMSIsCisgICAgfSwKKyAgICAiQ0xFQVIiOiB7CisgICAgICAgICJj
b2RlIjogIiIsCisgICAgICAgICJjdHJsIjogRmFsc2UsCisgICAgICAgICJrZXkiOiAiQ2xlYXIi
LAorICAgICAgICAibG9jYXRpb24iOiAwLAorICAgICAgICAibWV0YSI6IEZhbHNlLAorICAgICAg
ICAic2hpZnQiOiBGYWxzZSwKKyAgICAgICAgInZhbHVlIjogdSJcdWUwMDUiLAorICAgIH0sCisg
ICAgIkNPTlRST0wiOiB7CisgICAgICAgICJjb2RlIjogIkNvbnRyb2xMZWZ0IiwKKyAgICAgICAg
ImN0cmwiOiBUcnVlLAorICAgICAgICAia2V5IjogIkNvbnRyb2wiLAorICAgICAgICAibG9jYXRp
b24iOiAxLAorICAgICAgICAibWV0YSI6IEZhbHNlLAorICAgICAgICAic2hpZnQiOiBGYWxzZSwK
KyAgICAgICAgInZhbHVlIjogdSJcdWUwMDkiLAorICAgIH0sCisgICAgIkRFQ0lNQUwiOiB7Cisg
ICAgICAgICJjb2RlIjogIk51bXBhZERlY2ltYWwiLAorICAgICAgICAiY3RybCI6IEZhbHNlLAor
ICAgICAgICAia2V5IjogIi4iLAorICAgICAgICAibG9jYXRpb24iOiAzLAorICAgICAgICAibWV0
YSI6IEZhbHNlLAorICAgICAgICAic2hpZnQiOiBGYWxzZSwKKyAgICAgICAgInZhbHVlIjogdSJc
dWUwMjgiLAorICAgIH0sCisgICAgIkRFTEVURSI6IHsKKyAgICAgICAgImNvZGUiOiAiRGVsZXRl
IiwKKyAgICAgICAgImN0cmwiOiBGYWxzZSwKKyAgICAgICAgImtleSI6ICJEZWxldGUiLAorICAg
ICAgICAibG9jYXRpb24iOiAwLAorICAgICAgICAibWV0YSI6IEZhbHNlLAorICAgICAgICAic2hp
ZnQiOiBGYWxzZSwKKyAgICAgICAgInZhbHVlIjogdSJcdWUwMTciLAorICAgIH0sCisgICAgIkRJ
VklERSI6IHsKKyAgICAgICAgImNvZGUiOiAiTnVtcGFkRGl2aWRlIiwKKyAgICAgICAgImN0cmwi
OiBGYWxzZSwKKyAgICAgICAgImtleSI6ICIvIiwKKyAgICAgICAgImxvY2F0aW9uIjogMywKKyAg
ICAgICAgIm1ldGEiOiBGYWxzZSwKKyAgICAgICAgInNoaWZ0IjogRmFsc2UsCisgICAgICAgICJ2
YWx1ZSI6IHUiXHVlMDI5IiwKKyAgICB9LAorICAgICJET1dOIjogeworICAgICAgICAiY29kZSI6
ICJBcnJvd0Rvd24iLAorICAgICAgICAiY3RybCI6IEZhbHNlLAorICAgICAgICAia2V5IjogIkFy
cm93RG93biIsCisgICAgICAgICJsb2NhdGlvbiI6IDAsCisgICAgICAgICJtZXRhIjogRmFsc2Us
CisgICAgICAgICJzaGlmdCI6IEZhbHNlLAorICAgICAgICAidmFsdWUiOiB1Ilx1ZTAxNSIsCisg
ICAgfSwKKyAgICAiRU5EIjogeworICAgICAgICAiY29kZSI6ICJFbmQiLAorICAgICAgICAiY3Ry
bCI6IEZhbHNlLAorICAgICAgICAia2V5IjogIkVuZCIsCisgICAgICAgICJsb2NhdGlvbiI6IDAs
CisgICAgICAgICJtZXRhIjogRmFsc2UsCisgICAgICAgICJzaGlmdCI6IEZhbHNlLAorICAgICAg
ICAidmFsdWUiOiB1Ilx1ZTAxMCIsCisgICAgfSwKKyAgICAiRU5URVIiOiB7CisgICAgICAgICJj
b2RlIjogIk51bXBhZEVudGVyIiwKKyAgICAgICAgImN0cmwiOiBGYWxzZSwKKyAgICAgICAgImtl
eSI6ICJFbnRlciIsCisgICAgICAgICJsb2NhdGlvbiI6IDEsCisgICAgICAgICJtZXRhIjogRmFs
c2UsCisgICAgICAgICJzaGlmdCI6IEZhbHNlLAorICAgICAgICAidmFsdWUiOiB1Ilx1ZTAwNyIs
CisgICAgfSwKKyAgICAiRVFVQUxTIjogeworICAgICAgICAiY29kZSI6ICIiLAorICAgICAgICAi
Y3RybCI6IEZhbHNlLAorICAgICAgICAia2V5IjogIj0iLAorICAgICAgICAibG9jYXRpb24iOiAw
LAorICAgICAgICAibWV0YSI6IEZhbHNlLAorICAgICAgICAic2hpZnQiOiBGYWxzZSwKKyAgICAg
ICAgInZhbHVlIjogdSJcdWUwMTkiLAorICAgIH0sCisgICAgIkVTQ0FQRSI6IHsKKyAgICAgICAg
ImNvZGUiOiAiRXNjYXBlIiwKKyAgICAgICAgImN0cmwiOiBGYWxzZSwKKyAgICAgICAgImtleSI6
ICJFc2NhcGUiLAorICAgICAgICAibG9jYXRpb24iOiAwLAorICAgICAgICAibWV0YSI6IEZhbHNl
LAorICAgICAgICAic2hpZnQiOiBGYWxzZSwKKyAgICAgICAgInZhbHVlIjogdSJcdWUwMGMiLAor
ICAgIH0sCisgICAgIkYxIjogeworICAgICAgICAiY29kZSI6ICJGMSIsCisgICAgICAgICJjdHJs
IjogRmFsc2UsCisgICAgICAgICJrZXkiOiAiRjEiLAorICAgICAgICAibG9jYXRpb24iOiAwLAor
ICAgICAgICAibWV0YSI6IEZhbHNlLAorICAgICAgICAic2hpZnQiOiBGYWxzZSwKKyAgICAgICAg
InZhbHVlIjogdSJcdWUwMzEiLAorICAgIH0sCisgICAgIkYxMCI6IHsKKyAgICAgICAgImNvZGUi
OiAiRjEwIiwKKyAgICAgICAgImN0cmwiOiBGYWxzZSwKKyAgICAgICAgImtleSI6ICJGMTAiLAor
ICAgICAgICAibG9jYXRpb24iOiAwLAorICAgICAgICAibWV0YSI6IEZhbHNlLAorICAgICAgICAi
c2hpZnQiOiBGYWxzZSwKKyAgICAgICAgInZhbHVlIjogdSJcdWUwM2EiLAorICAgIH0sCisgICAg
IkYxMSI6IHsKKyAgICAgICAgImNvZGUiOiAiRjExIiwKKyAgICAgICAgImN0cmwiOiBGYWxzZSwK
KyAgICAgICAgImtleSI6ICJGMTEiLAorICAgICAgICAibG9jYXRpb24iOiAwLAorICAgICAgICAi
bWV0YSI6IEZhbHNlLAorICAgICAgICAic2hpZnQiOiBGYWxzZSwKKyAgICAgICAgInZhbHVlIjog
dSJcdWUwM2IiLAorICAgIH0sCisgICAgIkYxMiI6IHsKKyAgICAgICAgImNvZGUiOiAiRjEyIiwK
KyAgICAgICAgImN0cmwiOiBGYWxzZSwKKyAgICAgICAgImtleSI6ICJGMTIiLAorICAgICAgICAi
bG9jYXRpb24iOiAwLAorICAgICAgICAibWV0YSI6IEZhbHNlLAorICAgICAgICAic2hpZnQiOiBG
YWxzZSwKKyAgICAgICAgInZhbHVlIjogdSJcdWUwM2MiLAorICAgIH0sCisgICAgIkYyIjogewor
ICAgICAgICAiY29kZSI6ICJGMiIsCisgICAgICAgICJjdHJsIjogRmFsc2UsCisgICAgICAgICJr
ZXkiOiAiRjIiLAorICAgICAgICAibG9jYXRpb24iOiAwLAorICAgICAgICAibWV0YSI6IEZhbHNl
LAorICAgICAgICAic2hpZnQiOiBGYWxzZSwKKyAgICAgICAgInZhbHVlIjogdSJcdWUwMzIiLAor
ICAgIH0sCisgICAgIkYzIjogeworICAgICAgICAiY29kZSI6ICJGMyIsCisgICAgICAgICJjdHJs
IjogRmFsc2UsCisgICAgICAgICJrZXkiOiAiRjMiLAorICAgICAgICAibG9jYXRpb24iOiAwLAor
ICAgICAgICAibWV0YSI6IEZhbHNlLAorICAgICAgICAic2hpZnQiOiBGYWxzZSwKKyAgICAgICAg
InZhbHVlIjogdSJcdWUwMzMiLAorICAgIH0sCisgICAgIkY0IjogeworICAgICAgICAiY29kZSI6
ICJGNCIsCisgICAgICAgICJjdHJsIjogRmFsc2UsCisgICAgICAgICJrZXkiOiAiRjQiLAorICAg
ICAgICAibG9jYXRpb24iOiAwLAorICAgICAgICAibWV0YSI6IEZhbHNlLAorICAgICAgICAic2hp
ZnQiOiBGYWxzZSwKKyAgICAgICAgInZhbHVlIjogdSJcdWUwMzQiLAorICAgIH0sCisgICAgIkY1
IjogeworICAgICAgICAiY29kZSI6ICJGNSIsCisgICAgICAgICJjdHJsIjogRmFsc2UsCisgICAg
ICAgICJrZXkiOiAiRjUiLAorICAgICAgICAibG9jYXRpb24iOiAwLAorICAgICAgICAibWV0YSI6
IEZhbHNlLAorICAgICAgICAic2hpZnQiOiBGYWxzZSwKKyAgICAgICAgInZhbHVlIjogdSJcdWUw
MzUiLAorICAgIH0sCisgICAgIkY2IjogeworICAgICAgICAiY29kZSI6ICJGNiIsCisgICAgICAg
ICJjdHJsIjogRmFsc2UsCisgICAgICAgICJrZXkiOiAiRjYiLAorICAgICAgICAibG9jYXRpb24i
OiAwLAorICAgICAgICAibWV0YSI6IEZhbHNlLAorICAgICAgICAic2hpZnQiOiBGYWxzZSwKKyAg
ICAgICAgInZhbHVlIjogdSJcdWUwMzYiLAorICAgIH0sCisgICAgIkY3IjogeworICAgICAgICAi
Y29kZSI6ICJGNyIsCisgICAgICAgICJjdHJsIjogRmFsc2UsCisgICAgICAgICJrZXkiOiAiRjci
LAorICAgICAgICAibG9jYXRpb24iOiAwLAorICAgICAgICAibWV0YSI6IEZhbHNlLAorICAgICAg
ICAic2hpZnQiOiBGYWxzZSwKKyAgICAgICAgInZhbHVlIjogdSJcdWUwMzciLAorICAgIH0sCisg
ICAgIkY4IjogeworICAgICAgICAiY29kZSI6ICJGOCIsCisgICAgICAgICJjdHJsIjogRmFsc2Us
CisgICAgICAgICJrZXkiOiAiRjgiLAorICAgICAgICAibG9jYXRpb24iOiAwLAorICAgICAgICAi
bWV0YSI6IEZhbHNlLAorICAgICAgICAic2hpZnQiOiBGYWxzZSwKKyAgICAgICAgInZhbHVlIjog
dSJcdWUwMzgiLAorICAgIH0sCisgICAgIkY5IjogeworICAgICAgICAiY29kZSI6ICJGOSIsCisg
ICAgICAgICJjdHJsIjogRmFsc2UsCisgICAgICAgICJrZXkiOiAiRjkiLAorICAgICAgICAibG9j
YXRpb24iOiAwLAorICAgICAgICAibWV0YSI6IEZhbHNlLAorICAgICAgICAic2hpZnQiOiBGYWxz
ZSwKKyAgICAgICAgInZhbHVlIjogdSJcdWUwMzkiLAorICAgIH0sCisgICAgIkhFTFAiOiB7Cisg
ICAgICAgICJjb2RlIjogIkhlbHAiLAorICAgICAgICAiY3RybCI6IEZhbHNlLAorICAgICAgICAi
a2V5IjogIkhlbHAiLAorICAgICAgICAibG9jYXRpb24iOiAwLAorICAgICAgICAibWV0YSI6IEZh
bHNlLAorICAgICAgICAic2hpZnQiOiBGYWxzZSwKKyAgICAgICAgInZhbHVlIjogdSJcdWUwMDIi
LAorICAgIH0sCisgICAgIkhPTUUiOiB7CisgICAgICAgICJjb2RlIjogIkhvbWUiLAorICAgICAg
ICAiY3RybCI6IEZhbHNlLAorICAgICAgICAia2V5IjogIkhvbWUiLAorICAgICAgICAibG9jYXRp
b24iOiAwLAorICAgICAgICAibWV0YSI6IEZhbHNlLAorICAgICAgICAic2hpZnQiOiBGYWxzZSwK
KyAgICAgICAgInZhbHVlIjogdSJcdWUwMTEiLAorICAgIH0sCisgICAgIklOU0VSVCI6IHsKKyAg
ICAgICAgImNvZGUiOiAiSW5zZXJ0IiwKKyAgICAgICAgImN0cmwiOiBGYWxzZSwKKyAgICAgICAg
ImtleSI6ICJJbnNlcnQiLAorICAgICAgICAibG9jYXRpb24iOiAwLAorICAgICAgICAibWV0YSI6
IEZhbHNlLAorICAgICAgICAic2hpZnQiOiBGYWxzZSwKKyAgICAgICAgInZhbHVlIjogdSJcdWUw
MTYiLAorICAgIH0sCisgICAgIkxFRlQiOiB7CisgICAgICAgICJjb2RlIjogIkFycm93TGVmdCIs
CisgICAgICAgICJjdHJsIjogRmFsc2UsCisgICAgICAgICJrZXkiOiAiQXJyb3dMZWZ0IiwKKyAg
ICAgICAgImxvY2F0aW9uIjogMCwKKyAgICAgICAgIm1ldGEiOiBGYWxzZSwKKyAgICAgICAgInNo
aWZ0IjogRmFsc2UsCisgICAgICAgICJ2YWx1ZSI6IHUiXHVlMDEyIiwKKyAgICB9LAorICAgICJN
RVRBIjogeworICAgICAgICAiY29kZSI6ICJPU0xlZnQiLAorICAgICAgICAiY3RybCI6IEZhbHNl
LAorICAgICAgICAia2V5IjogIk1ldGEiLAorICAgICAgICAibG9jYXRpb24iOiAxLAorICAgICAg
ICAibWV0YSI6IFRydWUsCisgICAgICAgICJzaGlmdCI6IEZhbHNlLAorICAgICAgICAidmFsdWUi
OiB1Ilx1ZTAzZCIsCisgICAgfSwKKyAgICAiTVVMVElQTFkiOiB7CisgICAgICAgICJjb2RlIjog
Ik51bXBhZE11bHRpcGx5IiwKKyAgICAgICAgImN0cmwiOiBGYWxzZSwKKyAgICAgICAgImtleSI6
ICIqIiwKKyAgICAgICAgImxvY2F0aW9uIjogMywKKyAgICAgICAgIm1ldGEiOiBGYWxzZSwKKyAg
ICAgICAgInNoaWZ0IjogRmFsc2UsCisgICAgICAgICJ2YWx1ZSI6IHUiXHVlMDI0IiwKKyAgICB9
LAorICAgICJOVUxMIjogeworICAgICAgICAiY29kZSI6ICIiLAorICAgICAgICAiY3RybCI6IEZh
bHNlLAorICAgICAgICAia2V5IjogIlVuaWRlbnRpZmllZCIsCisgICAgICAgICJsb2NhdGlvbiI6
IDAsCisgICAgICAgICJtZXRhIjogRmFsc2UsCisgICAgICAgICJzaGlmdCI6IEZhbHNlLAorICAg
ICAgICAidmFsdWUiOiB1Ilx1ZTAwMCIsCisgICAgfSwKKyAgICAiTlVNUEFEMCI6IHsKKyAgICAg
ICAgImNvZGUiOiAiTnVtcGFkMCIsCisgICAgICAgICJjdHJsIjogRmFsc2UsCisgICAgICAgICJr
ZXkiOiAiMCIsCisgICAgICAgICJsb2NhdGlvbiI6IDMsCisgICAgICAgICJtZXRhIjogRmFsc2Us
CisgICAgICAgICJzaGlmdCI6IEZhbHNlLAorICAgICAgICAidmFsdWUiOiB1Ilx1ZTAxYSIsCisg
ICAgfSwKKyAgICAiTlVNUEFEMSI6IHsKKyAgICAgICAgImNvZGUiOiAiTnVtcGFkMSIsCisgICAg
ICAgICJjdHJsIjogRmFsc2UsCisgICAgICAgICJrZXkiOiAiMSIsCisgICAgICAgICJsb2NhdGlv
biI6IDMsCisgICAgICAgICJtZXRhIjogRmFsc2UsCisgICAgICAgICJzaGlmdCI6IEZhbHNlLAor
ICAgICAgICAidmFsdWUiOiB1Ilx1ZTAxYiIsCisgICAgfSwKKyAgICAiTlVNUEFEMiI6IHsKKyAg
ICAgICAgImNvZGUiOiAiTnVtcGFkMiIsCisgICAgICAgICJjdHJsIjogRmFsc2UsCisgICAgICAg
ICJrZXkiOiAiMiIsCisgICAgICAgICJsb2NhdGlvbiI6IDMsCisgICAgICAgICJtZXRhIjogRmFs
c2UsCisgICAgICAgICJzaGlmdCI6IEZhbHNlLAorICAgICAgICAidmFsdWUiOiB1Ilx1ZTAxYyIs
CisgICAgfSwKKyAgICAiTlVNUEFEMyI6IHsKKyAgICAgICAgImNvZGUiOiAiTnVtcGFkMyIsCisg
ICAgICAgICJjdHJsIjogRmFsc2UsCisgICAgICAgICJrZXkiOiAiMyIsCisgICAgICAgICJsb2Nh
dGlvbiI6IDMsCisgICAgICAgICJtZXRhIjogRmFsc2UsCisgICAgICAgICJzaGlmdCI6IEZhbHNl
LAorICAgICAgICAidmFsdWUiOiB1Ilx1ZTAxZCIsCisgICAgfSwKKyAgICAiTlVNUEFENCI6IHsK
KyAgICAgICAgImNvZGUiOiAiUGFnZURvd24iLAorICAgICAgICAiY3RybCI6IEZhbHNlLAorICAg
ICAgICAia2V5IjogIjQiLAorICAgICAgICAibG9jYXRpb24iOiAzLAorICAgICAgICAibWV0YSI6
IEZhbHNlLAorICAgICAgICAic2hpZnQiOiBGYWxzZSwKKyAgICAgICAgInZhbHVlIjogdSJcdWUw
MWUiLAorICAgIH0sCisgICAgIk5VTVBBRDUiOiB7CisgICAgICAgICJjb2RlIjogIlBhZ2VVcCIs
CisgICAgICAgICJjdHJsIjogRmFsc2UsCisgICAgICAgICJrZXkiOiAiNSIsCisgICAgICAgICJs
b2NhdGlvbiI6IDMsCisgICAgICAgICJtZXRhIjogRmFsc2UsCisgICAgICAgICJzaGlmdCI6IEZh
bHNlLAorICAgICAgICAidmFsdWUiOiB1Ilx1ZTAxZiIsCisgICAgfSwKKyAgICAiTlVNUEFENiI6
IHsKKyAgICAgICAgImNvZGUiOiAiTnVtcGFkNiIsCisgICAgICAgICJjdHJsIjogRmFsc2UsCisg
ICAgICAgICJrZXkiOiAiNiIsCisgICAgICAgICJsb2NhdGlvbiI6IDMsCisgICAgICAgICJtZXRh
IjogRmFsc2UsCisgICAgICAgICJzaGlmdCI6IEZhbHNlLAorICAgICAgICAidmFsdWUiOiB1Ilx1
ZTAyMCIsCisgICAgfSwKKyAgICAiTlVNUEFENyI6IHsKKyAgICAgICAgImNvZGUiOiAiTnVtcGFk
NyIsCisgICAgICAgICJjdHJsIjogRmFsc2UsCisgICAgICAgICJrZXkiOiAiNyIsCisgICAgICAg
ICJsb2NhdGlvbiI6IDMsCisgICAgICAgICJtZXRhIjogRmFsc2UsCisgICAgICAgICJzaGlmdCI6
IEZhbHNlLAorICAgICAgICAidmFsdWUiOiB1Ilx1ZTAyMSIsCisgICAgfSwKKyAgICAiTlVNUEFE
OCI6IHsKKyAgICAgICAgImNvZGUiOiAiTnVtcGFkOCIsCisgICAgICAgICJjdHJsIjogRmFsc2Us
CisgICAgICAgICJrZXkiOiAiOCIsCisgICAgICAgICJsb2NhdGlvbiI6IDMsCisgICAgICAgICJt
ZXRhIjogRmFsc2UsCisgICAgICAgICJzaGlmdCI6IEZhbHNlLAorICAgICAgICAidmFsdWUiOiB1
Ilx1ZTAyMiIsCisgICAgfSwKKyAgICAiTlVNUEFEOSI6IHsKKyAgICAgICAgImNvZGUiOiAiTnVt
cGFkOSIsCisgICAgICAgICJjdHJsIjogRmFsc2UsCisgICAgICAgICJrZXkiOiAiOSIsCisgICAg
ICAgICJsb2NhdGlvbiI6IDMsCisgICAgICAgICJtZXRhIjogRmFsc2UsCisgICAgICAgICJzaGlm
dCI6IEZhbHNlLAorICAgICAgICAidmFsdWUiOiB1Ilx1ZTAyMyIsCisgICAgfSwKKyAgICAiUEFH
RV9ET1dOIjogeworICAgICAgICAiY29kZSI6ICIiLAorICAgICAgICAiY3RybCI6IEZhbHNlLAor
ICAgICAgICAia2V5IjogIlBhZ2VEb3duIiwKKyAgICAgICAgImxvY2F0aW9uIjogMCwKKyAgICAg
ICAgIm1ldGEiOiBGYWxzZSwKKyAgICAgICAgInNoaWZ0IjogRmFsc2UsCisgICAgICAgICJ2YWx1
ZSI6IHUiXHVlMDBmIiwKKyAgICB9LAorICAgICJQQUdFX1VQIjogeworICAgICAgICAiY29kZSI6
ICIiLAorICAgICAgICAiY3RybCI6IEZhbHNlLAorICAgICAgICAia2V5IjogIlBhZ2VVcCIsCisg
ICAgICAgICJsb2NhdGlvbiI6IDAsCisgICAgICAgICJtZXRhIjogRmFsc2UsCisgICAgICAgICJz
aGlmdCI6IEZhbHNlLAorICAgICAgICAidmFsdWUiOiB1Ilx1ZTAwZSIsCisgICAgfSwKKyAgICAi
UEFVU0UiOiB7CisgICAgICAgICJjb2RlIjogIiIsCisgICAgICAgICJjdHJsIjogRmFsc2UsCisg
ICAgICAgICJrZXkiOiAiUGF1c2UiLAorICAgICAgICAibG9jYXRpb24iOiAwLAorICAgICAgICAi
bWV0YSI6IEZhbHNlLAorICAgICAgICAic2hpZnQiOiBGYWxzZSwKKyAgICAgICAgInZhbHVlIjog
dSJcdWUwMGIiLAorICAgIH0sCisgICAgIlJFVFVSTiI6IHsKKyAgICAgICAgImNvZGUiOiAiRW50
ZXIiLAorICAgICAgICAiY3RybCI6IEZhbHNlLAorICAgICAgICAia2V5IjogIkVudGVyIiwKKyAg
ICAgICAgImxvY2F0aW9uIjogMCwKKyAgICAgICAgIm1ldGEiOiBGYWxzZSwKKyAgICAgICAgInNo
aWZ0IjogRmFsc2UsCisgICAgICAgICJ2YWx1ZSI6IHUiXHVlMDA2IiwKKyAgICB9LAorICAgICJS
SUdIVCI6IHsKKyAgICAgICAgImNvZGUiOiAiQXJyb3dSaWdodCIsCisgICAgICAgICJjdHJsIjog
RmFsc2UsCisgICAgICAgICJrZXkiOiAiQXJyb3dSaWdodCIsCisgICAgICAgICJsb2NhdGlvbiI6
IDAsCisgICAgICAgICJtZXRhIjogRmFsc2UsCisgICAgICAgICJzaGlmdCI6IEZhbHNlLAorICAg
ICAgICAidmFsdWUiOiB1Ilx1ZTAxNCIsCisgICAgfSwKKyAgICAiUl9BTFQiOiB7CisgICAgICAg
ICJjb2RlIjogIkFsdFJpZ2h0IiwKKyAgICAgICAgImN0cmwiOiBGYWxzZSwKKyAgICAgICAgImtl
eSI6ICJBbHQiLAorICAgICAgICAibG9jYXRpb24iOiAyLAorICAgICAgICAibWV0YSI6IEZhbHNl
LAorICAgICAgICAic2hpZnQiOiBGYWxzZSwKKyAgICAgICAgInZhbHVlIjogdSJcdWUwNTIiLAor
ICAgIH0sCisgICAgIlJfQVJST1dET1dOIjogeworICAgICAgICAiY29kZSI6ICJOdW1wYWQyIiwK
KyAgICAgICAgImN0cmwiOiBGYWxzZSwKKyAgICAgICAgImtleSI6ICJBcnJvd0Rvd24iLAorICAg
ICAgICAibG9jYXRpb24iOiAzLAorICAgICAgICAibWV0YSI6IEZhbHNlLAorICAgICAgICAic2hp
ZnQiOiBGYWxzZSwKKyAgICAgICAgInZhbHVlIjogdSJcdWUwNWIiLAorICAgIH0sCisgICAgIlJf
QVJST1dMRUZUIjogeworICAgICAgICAiY29kZSI6ICJOdW1wYWQ0IiwKKyAgICAgICAgImN0cmwi
OiBGYWxzZSwKKyAgICAgICAgImtleSI6ICJBcnJvd0xlZnQiLAorICAgICAgICAibG9jYXRpb24i
OiAzLAorICAgICAgICAibWV0YSI6IEZhbHNlLAorICAgICAgICAic2hpZnQiOiBGYWxzZSwKKyAg
ICAgICAgInZhbHVlIjogdSJcdWUwNTgiLAorICAgIH0sCisgICAgIlJfQVJST1dSSUdIVCI6IHsK
KyAgICAgICAgImNvZGUiOiAiTnVtcGFkNiIsCisgICAgICAgICJjdHJsIjogRmFsc2UsCisgICAg
ICAgICJrZXkiOiAiQXJyb3dSaWdodCIsCisgICAgICAgICJsb2NhdGlvbiI6IDMsCisgICAgICAg
ICJtZXRhIjogRmFsc2UsCisgICAgICAgICJzaGlmdCI6IEZhbHNlLAorICAgICAgICAidmFsdWUi
OiB1Ilx1ZTA1YSIsCisgICAgfSwKKyAgICAiUl9BUlJPV1VQIjogeworICAgICAgICAiY29kZSI6
ICJOdW1wYWQ4IiwKKyAgICAgICAgImN0cmwiOiBGYWxzZSwKKyAgICAgICAgImtleSI6ICJBcnJv
d1VwIiwKKyAgICAgICAgImxvY2F0aW9uIjogMywKKyAgICAgICAgIm1ldGEiOiBGYWxzZSwKKyAg
ICAgICAgInNoaWZ0IjogRmFsc2UsCisgICAgICAgICJ2YWx1ZSI6IHUiXHVlMDU5IiwKKyAgICB9
LAorICAgICJSX0NPTlRST0wiOiB7CisgICAgICAgICJjb2RlIjogIkNvbnRyb2xSaWdodCIsCisg
ICAgICAgICJjdHJsIjogVHJ1ZSwKKyAgICAgICAgImtleSI6ICJDb250cm9sIiwKKyAgICAgICAg
ImxvY2F0aW9uIjogMiwKKyAgICAgICAgIm1ldGEiOiBGYWxzZSwKKyAgICAgICAgInNoaWZ0Ijog
RmFsc2UsCisgICAgICAgICJ2YWx1ZSI6IHUiXHVlMDUxIiwKKyAgICB9LAorICAgICJSX0RFTEVU
RSI6IHsKKyAgICAgICAgImNvZGUiOiAiTnVtcGFkRGVjaW1hbCIsCisgICAgICAgICJjdHJsIjog
RmFsc2UsCisgICAgICAgICJrZXkiOiAiRGVsZXRlIiwKKyAgICAgICAgImxvY2F0aW9uIjogMywK
KyAgICAgICAgIm1ldGEiOiBGYWxzZSwKKyAgICAgICAgInNoaWZ0IjogRmFsc2UsCisgICAgICAg
ICJ2YWx1ZSI6IHUiXHVlMDVkIiwKKyAgICB9LAorICAgICJSX0VORCI6IHsKKyAgICAgICAgImNv
ZGUiOiAiTnVtcGFkMSIsCisgICAgICAgICJjdHJsIjogRmFsc2UsCisgICAgICAgICJrZXkiOiAi
RW5kIiwKKyAgICAgICAgImxvY2F0aW9uIjogMywKKyAgICAgICAgIm1ldGEiOiBGYWxzZSwKKyAg
ICAgICAgInNoaWZ0IjogRmFsc2UsCisgICAgICAgICJ2YWx1ZSI6IHUiXHVlMDU2IiwKKyAgICB9
LAorICAgICJSX0hPTUUiOiB7CisgICAgICAgICJjb2RlIjogIk51bXBhZDciLAorICAgICAgICAi
Y3RybCI6IEZhbHNlLAorICAgICAgICAia2V5IjogIkhvbWUiLAorICAgICAgICAibG9jYXRpb24i
OiAzLAorICAgICAgICAibWV0YSI6IEZhbHNlLAorICAgICAgICAic2hpZnQiOiBGYWxzZSwKKyAg
ICAgICAgInZhbHVlIjogdSJcdWUwNTciLAorICAgIH0sCisgICAgIlJfSU5TRVJUIjogeworICAg
ICAgICAiY29kZSI6ICJOdW1wYWQwIiwKKyAgICAgICAgImN0cmwiOiBGYWxzZSwKKyAgICAgICAg
ImtleSI6ICJJbnNlcnQiLAorICAgICAgICAibG9jYXRpb24iOiAzLAorICAgICAgICAibWV0YSI6
IEZhbHNlLAorICAgICAgICAic2hpZnQiOiBGYWxzZSwKKyAgICAgICAgInZhbHVlIjogdSJcdWUw
NWMiLAorICAgIH0sCisgICAgIlJfTUVUQSI6IHsKKyAgICAgICAgImNvZGUiOiAiT1NSaWdodCIs
CisgICAgICAgICJjdHJsIjogRmFsc2UsCisgICAgICAgICJrZXkiOiAiTWV0YSIsCisgICAgICAg
ICJsb2NhdGlvbiI6IDIsCisgICAgICAgICJtZXRhIjogVHJ1ZSwKKyAgICAgICAgInNoaWZ0Ijog
RmFsc2UsCisgICAgICAgICJ2YWx1ZSI6IHUiXHVlMDUzIiwKKyAgICB9LAorICAgICJSX1BBR0VE
T1dOIjogeworICAgICAgICAiY29kZSI6ICJOdW1wYWQzIiwKKyAgICAgICAgImN0cmwiOiBGYWxz
ZSwKKyAgICAgICAgImtleSI6ICJQYWdlRG93biIsCisgICAgICAgICJsb2NhdGlvbiI6IDMsCisg
ICAgICAgICJtZXRhIjogRmFsc2UsCisgICAgICAgICJzaGlmdCI6IEZhbHNlLAorICAgICAgICAi
dmFsdWUiOiB1Ilx1ZTA1NSIsCisgICAgfSwKKyAgICAiUl9QQUdFVVAiOiB7CisgICAgICAgICJj
b2RlIjogIk51bXBhZDkiLAorICAgICAgICAiY3RybCI6IEZhbHNlLAorICAgICAgICAia2V5Ijog
IlBhZ2VVcCIsCisgICAgICAgICJsb2NhdGlvbiI6IDMsCisgICAgICAgICJtZXRhIjogRmFsc2Us
CisgICAgICAgICJzaGlmdCI6IEZhbHNlLAorICAgICAgICAidmFsdWUiOiB1Ilx1ZTA1NCIsCisg
ICAgfSwKKyAgICAiUl9TSElGVCI6IHsKKyAgICAgICAgImNvZGUiOiAiU2hpZnRSaWdodCIsCisg
ICAgICAgICJjdHJsIjogRmFsc2UsCisgICAgICAgICJrZXkiOiAiU2hpZnQiLAorICAgICAgICAi
bG9jYXRpb24iOiAyLAorICAgICAgICAibWV0YSI6IEZhbHNlLAorICAgICAgICAic2hpZnQiOiBU
cnVlLAorICAgICAgICAidmFsdWUiOiB1Ilx1ZTA1MCIsCisgICAgfSwKKyAgICAiU0VNSUNPTE9O
IjogeworICAgICAgICAiY29kZSI6ICIiLAorICAgICAgICAiY3RybCI6IEZhbHNlLAorICAgICAg
ICAia2V5IjogIjsiLAorICAgICAgICAibG9jYXRpb24iOiAwLAorICAgICAgICAibWV0YSI6IEZh
bHNlLAorICAgICAgICAic2hpZnQiOiBGYWxzZSwKKyAgICAgICAgInZhbHVlIjogdSJcdWUwMTgi
LAorICAgIH0sCisgICAgIlNFUEFSQVRPUiI6IHsKKyAgICAgICAgImNvZGUiOiAiTnVtcGFkU3Vi
dHJhY3QiLAorICAgICAgICAiY3RybCI6IEZhbHNlLAorICAgICAgICAia2V5IjogIiwiLAorICAg
ICAgICAibG9jYXRpb24iOiAzLAorICAgICAgICAibWV0YSI6IEZhbHNlLAorICAgICAgICAic2hp
ZnQiOiBGYWxzZSwKKyAgICAgICAgInZhbHVlIjogdSJcdWUwMjYiLAorICAgIH0sCisgICAgIlNI
SUZUIjogeworICAgICAgICAiY29kZSI6ICJTaGlmdExlZnQiLAorICAgICAgICAiY3RybCI6IEZh
bHNlLAorICAgICAgICAia2V5IjogIlNoaWZ0IiwKKyAgICAgICAgImxvY2F0aW9uIjogMSwKKyAg
ICAgICAgIm1ldGEiOiBGYWxzZSwKKyAgICAgICAgInNoaWZ0IjogVHJ1ZSwKKyAgICAgICAgInZh
bHVlIjogdSJcdWUwMDgiLAorICAgIH0sCisgICAgIlNQQUNFIjogeworICAgICAgICAiY29kZSI6
ICJTcGFjZSIsCisgICAgICAgICJjdHJsIjogRmFsc2UsCisgICAgICAgICJrZXkiOiAiICIsCisg
ICAgICAgICJsb2NhdGlvbiI6IDAsCisgICAgICAgICJtZXRhIjogRmFsc2UsCisgICAgICAgICJz
aGlmdCI6IEZhbHNlLAorICAgICAgICAidmFsdWUiOiB1Ilx1ZTAwZCIsCisgICAgfSwKKyAgICAi
U1VCVFJBQ1QiOiB7CisgICAgICAgICJjb2RlIjogIiIsCisgICAgICAgICJjdHJsIjogRmFsc2Us
CisgICAgICAgICJrZXkiOiAiLSIsCisgICAgICAgICJsb2NhdGlvbiI6IDMsCisgICAgICAgICJt
ZXRhIjogRmFsc2UsCisgICAgICAgICJzaGlmdCI6IEZhbHNlLAorICAgICAgICAidmFsdWUiOiB1
Ilx1ZTAyNyIsCisgICAgfSwKKyAgICAiVEFCIjogeworICAgICAgICAiY29kZSI6ICJUYWIiLAor
ICAgICAgICAiY3RybCI6IEZhbHNlLAorICAgICAgICAia2V5IjogIlRhYiIsCisgICAgICAgICJs
b2NhdGlvbiI6IDAsCisgICAgICAgICJtZXRhIjogRmFsc2UsCisgICAgICAgICJzaGlmdCI6IEZh
bHNlLAorICAgICAgICAidmFsdWUiOiB1Ilx1ZTAwNCIsCisgICAgfSwKKyAgICAiVVAiOiB7Cisg
ICAgICAgICJjb2RlIjogIkFycm93VXAiLAorICAgICAgICAiY3RybCI6IEZhbHNlLAorICAgICAg
ICAia2V5IjogIkFycm93VXAiLAorICAgICAgICAibG9jYXRpb24iOiAwLAorICAgICAgICAibWV0
YSI6IEZhbHNlLAorICAgICAgICAic2hpZnQiOiBGYWxzZSwKKyAgICAgICAgInZhbHVlIjogdSJc
dWUwMTMiLAorICAgIH0sCisgICAgIlpFTktBS1VIQU5LQUtVIjogeworICAgICAgICAiY29kZSI6
ICIiLAorICAgICAgICAiY3RybCI6IEZhbHNlLAorICAgICAgICAia2V5IjogIlplbmtha3VIYW5r
YWt1IiwKKyAgICAgICAgImxvY2F0aW9uIjogMCwKKyAgICAgICAgIm1ldGEiOiBGYWxzZSwKKyAg
ICAgICAgInNoaWZ0IjogRmFsc2UsCisgICAgICAgICJ2YWx1ZSI6IHUiXHVlMDQwIiwKKyAgICB9
Cit9CmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rl
c3RzL2FjdGlvbnMvc3VwcG9ydC9yZWZpbmUucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViZHJpdmVyL3Rlc3RzL2FjdGlvbnMvc3VwcG9ydC9yZWZpbmUucHkKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjNhNmQ2M2UwNGNlCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9hY3Rpb25zL3N1
cHBvcnQvcmVmaW5lLnB5CkBAIC0wLDAgKzEsMzMgQEAKK2RlZiBnZXRfZXZlbnRzKHNlc3Npb24p
OgorICAgICIiIlJldHVybiBsaXN0IG9mIGtleSBldmVudHMgcmVjb3JkZWQgaW4gdGhlIHRlc3Rf
a2V5c19wYWdlIGZpeHR1cmUuIiIiCisgICAgZXZlbnRzID0gc2Vzc2lvbi5leGVjdXRlX3Njcmlw
dCgicmV0dXJuIGFsbEV2ZW50cy5ldmVudHM7Iikgb3IgW10KKyAgICAjIGBrZXlgIHZhbHVlcyBp
biBgYWxsRXZlbnRzYCBtYXkgYmUgZXNjYXBlZCAoc2VlIGBlc2NhcGVTdXJyb2dhdGVIYWxmYCBp
bgorICAgICMgdGVzdF9rZXlzX3dkc3BlYy5odG1sKSwgc28gdGhpcyBjb252ZXJ0cyB0aGVtIGJh
Y2sgaW50byB1bmljb2RlIGxpdGVyYWxzLgorICAgIGZvciBlIGluIGV2ZW50czoKKyAgICAgICAg
IyBleGFtcGxlOiB0dXJuICJVK2Q4M2QiICg2IGNoYXJzKSBpbnRvIHUiXHVkODNkIiAoMSBjaGFy
KQorICAgICAgICBpZiAia2V5IiBpbiBlIGFuZCBlWyJrZXkiXS5zdGFydHN3aXRoKHUiVSsiKToK
KyAgICAgICAgICAgIGtleSA9IGVbImtleSJdCisgICAgICAgICAgICBoZXhfc3VmZml4ID0ga2V5
W2tleS5pbmRleCgiKyIpICsgMTpdCisgICAgICAgICAgICBlWyJrZXkiXSA9IHVuaWNocihpbnQo
aGV4X3N1ZmZpeCwgMTYpKQorICAgIHJldHVybiBldmVudHMKKworCitkZWYgZ2V0X2tleXMoaW5w
dXRfZWwpOgorICAgICIiIkdldCBwcmludGFibGUgY2hhcmFjdGVycyBlbnRlcmVkIGludG8gYGlu
cHV0X2VsYC4KKworICAgIDpwYXJhbSBpbnB1dF9lbDogSFRNTCBpbnB1dCBlbGVtZW50LgorICAg
ICIiIgorICAgIHJ2ID0gaW5wdXRfZWwucHJvcGVydHkoInZhbHVlIikKKyAgICBpZiBydiBpcyBO
b25lOgorICAgICAgICByZXR1cm4gIiIKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gcnYKKwor
CitkZWYgZmlsdGVyX2RpY3Qoc291cmNlLCBkKToKKyAgICAiIiJGaWx0ZXIgYHNvdXJjZWAgZGlj
dCB0byBvbmx5IGNvbnRhaW4gc2FtZSBrZXlzIGFzIGBkYCBkaWN0LgorCisgICAgOnBhcmFtIHNv
dXJjZTogZGljdGlvbmFyeSB0byBmaWx0ZXIuCisgICAgOnBhcmFtIGQ6IGRpY3Rpb25hcnkgd2hv
c2Uga2V5cyBkZXRlcm1pbmUgdGhlIGZpbHRlcmluZy4KKyAgICAiIiIKKyAgICByZXR1cm4ge2s6
IHNvdXJjZVtrXSBmb3IgayBpbiBkLmtleXMoKX0KZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3Rz
L2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvYWN0aW9ucy9zdXBwb3J0L3Rlc3RfYWN0aW9u
c193ZHNwZWMuaHRtbCBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVz
dHMvYWN0aW9ucy9zdXBwb3J0L3Rlc3RfYWN0aW9uc193ZHNwZWMuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYmUyNzMyMjlhM2IKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL2FjdGlvbnMvc3Vw
cG9ydC90ZXN0X2FjdGlvbnNfd2RzcGVjLmh0bWwKQEAgLTAsMCArMSwxODEgQEAKKzwhZG9jdHlw
ZSBodG1sPgorPG1ldGEgY2hhcnNldD11dGYtOD4KKzxoZWFkPgorICAgIDx0aXRsZT5UZXN0IEFj
dGlvbnM8L3RpdGxlPgorICAgIDxzdHlsZT4KKyAgICAgIGRpdiB7IHBhZGRpbmc6MHB4OyBtYXJn
aW46IDBweDsgfQorICAgICAgI3RyYWNrUG9pbnRlciB7IHBvc2l0aW9uOiBmaXhlZDsgfQorICAg
ICAgI3Jlc3VsdENvbnRhaW5lciB7IHdpZHRoOiA2MDBweDsgaGVpZ2h0OiA2MHB4OyB9CisgICAg
ICAuYXJlYSB7IHdpZHRoOiAxMDBweDsgaGVpZ2h0OiA1MHB4OyBiYWNrZ3JvdW5kLWNvbG9yOiAj
Y2NjOyB9CisgICAgICAuYmxvY2sgeyB3aWR0aDogNXB4OyBoZWlnaHQ6IDVweDsgYm9yZGVyOiBz
b2xpZCAxcHggcmVkOyB9CisgICAgICAjZHJhZ0FyZWEgeyBwb3NpdGlvbjogcmVsYXRpdmU7IH0K
KyAgICAgICNkcmFnVGFyZ2V0IHsgcG9zaXRpb246IGFic29sdXRlOyB0b3A6MjJweDsgbGVmdDo0
N3B4O30KKyAgICA8L3N0eWxlPgorICAgIDxzY3JpcHQ+CisgICAgICAgICJ1c2Ugc3RyaWN0IjsK
KyAgICAgICAgdmFyIGVscyA9IHt9OworICAgICAgICB2YXIgYWxsRXZlbnRzID0ge2V2ZW50czog
W119OworICAgICAgICBmdW5jdGlvbiBkaXNwbGF5TWVzc2FnZShtZXNzYWdlKSB7CisgICAgICAg
ICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZXZlbnRzIikuaW5uZXJIVE1MID0gIjxwPiIg
KyBtZXNzYWdlICsgIjwvcD4iOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gYXBwZW5k
TWVzc2FnZShtZXNzYWdlKSB7CisgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
ZXZlbnRzIikuaW5uZXJIVE1MICs9ICI8cD4iICsgbWVzc2FnZSArICI8L3A+IjsKKyAgICAgICAg
fQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBFc2NhcGUgfGtleXwgaWYgaXQncyBpbiBhIHN1
cnJvZ2F0ZS1oYWxmIGNoYXJhY3RlciByYW5nZS4KKyAgICAgICAgICoKKyAgICAgICAgICogRXhh
bXBsZTogZ2l2ZW4gIlx1ZDgzZCIgcmV0dXJuICJVK2Q4M2QiLgorICAgICAgICAgKgorICAgICAg
ICAgKiBPdGhlcndpc2UgSlNPTi5zdHJpbmdpZnkgd2lsbCBjb252ZXJ0IGl0IHRvIFUrRkZGRCAo
UkVQTEFDRU1FTlQgQ0hBUkFDVEVSKQorICAgICAgICAgKiB3aGVuIHJldHVybmluZyBhIHZhbHVl
IGZyb20gZXhlY3V0ZVNjcmlwdCwgZm9yIGV4YW1wbGUuCisgICAgICAgICAqLworICAgICAgICBm
dW5jdGlvbiBlc2NhcGVTdXJyb2dhdGVIYWxmKGtleSkgeworICAgICAgICAgIGlmICh0eXBlb2Yg
a2V5ICE9PSAidW5kZWZpbmVkIiAmJiBrZXkubGVuZ3RoID09PSAxKSB7CisgICAgICAgICAgICB2
YXIgY2hhckNvZGUgPSBrZXkuY2hhckNvZGVBdCgwKTsKKyAgICAgICAgICAgIHZhciBoaWdoU3Vy
cm9nYXRlID0gY2hhckNvZGUgPj0gMHhEODAwICYmIGNoYXJDb2RlIDw9IDB4REJGRjsKKyAgICAg
ICAgICAgIHZhciBzdXJyb2dhdGUgPSBoaWdoU3Vycm9nYXRlIHx8IChjaGFyQ29kZSA+PSAweERD
MDAgJiYgY2hhckNvZGUgPD0gMHhERkZGKTsKKyAgICAgICAgICAgIGlmIChzdXJyb2dhdGUpIHsK
KyAgICAgICAgICAgICAga2V5ID0gIlUrIiArIGNoYXJDb2RlLnRvU3RyaW5nKDE2KTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJuIGtleTsKKyAgICAgICAgfQor
CisgICAgICAgIGZ1bmN0aW9uIHJlY29yZEtleWJvYXJkRXZlbnQoZXZlbnQpIHsKKyAgICAgICAg
ICB2YXIga2V5ID0gZXNjYXBlU3Vycm9nYXRlSGFsZihldmVudC5rZXkpOworICAgICAgICAgIGFs
bEV2ZW50cy5ldmVudHMucHVzaCh7CisgICAgICAgICAgICAiY29kZSI6IGV2ZW50LmNvZGUsCisg
ICAgICAgICAgICAia2V5Ijoga2V5LAorICAgICAgICAgICAgIndoaWNoIjogZXZlbnQud2hpY2gs
CisgICAgICAgICAgICAibG9jYXRpb24iOiBldmVudC5sb2NhdGlvbiwKKyAgICAgICAgICAgICJj
dHJsIjogZXZlbnQuY3RybEtleSwKKyAgICAgICAgICAgICJtZXRhIjogZXZlbnQubWV0YUtleSwK
KyAgICAgICAgICAgICJzaGlmdCI6IGV2ZW50LnNoaWZ0S2V5LAorICAgICAgICAgICAgInJlcGVh
dCI6IGV2ZW50LnJlcGVhdCwKKyAgICAgICAgICAgICJ0eXBlIjogZXZlbnQudHlwZQorICAgICAg
ICAgIH0pOworICAgICAgICAgIGFwcGVuZE1lc3NhZ2UoYCR7ZXZlbnQudHlwZX0oYCArCisgICAg
ICAgICAgICAgIGBjb2RlOiAke2V2ZW50LmNvZGV9LCBgICsKKyAgICAgICAgICAgICAgYGtleTog
JHtrZXl9LCBgICsKKyAgICAgICAgICAgICAgYHdoaWNoOiAke2V2ZW50LndoaWNofSwgYCArCisg
ICAgICAgICAgICAgIGBrZXlDb2RlOiAke2V2ZW50LmtleUNvZGV9KWApOworICAgICAgICB9CisK
KyAgICAgICAgZnVuY3Rpb24gcmVjb3JkUG9pbnRlckV2ZW50KGV2ZW50KSB7CisgICAgICAgICAg
aWYgKGV2ZW50LnR5cGUgPT09ICJjb250ZXh0bWVudSIpIHsKKyAgICAgICAgICAgIGV2ZW50LnBy
ZXZlbnREZWZhdWx0KCk7CisgICAgICAgICAgfQorICAgICAgICAgIGFsbEV2ZW50cy5ldmVudHMu
cHVzaCh7CisgICAgICAgICAgICAidHlwZSI6IGV2ZW50LnR5cGUsCisgICAgICAgICAgICAiYnV0
dG9uIjogZXZlbnQuYnV0dG9uLAorICAgICAgICAgICAgImJ1dHRvbnMiOiBldmVudC5idXR0b25z
LAorICAgICAgICAgICAgInBhZ2VYIjogZXZlbnQucGFnZVgsCisgICAgICAgICAgICAicGFnZVki
OiBldmVudC5wYWdlWSwKKyAgICAgICAgICAgICJjdHJsS2V5IjogZXZlbnQuY3RybEtleSwKKyAg
ICAgICAgICAgICJtZXRhS2V5IjogZXZlbnQubWV0YUtleSwKKyAgICAgICAgICAgICJhbHRLZXki
OiBldmVudC5hbHRLZXksCisgICAgICAgICAgICAic2hpZnRLZXkiOiBldmVudC5zaGlmdEtleSwK
KyAgICAgICAgICAgICJ0YXJnZXQiOiBldmVudC50YXJnZXQuaWQKKyAgICAgICAgICB9KTsKKyAg
ICAgICAgICBhcHBlbmRNZXNzYWdlKGAke2V2ZW50LnR5cGV9KGAgKworICAgICAgICAgICAgICBg
YnV0dG9uOiAke2V2ZW50LmJ1dHRvbn0sIGAgKworICAgICAgICAgICAgICBgcGFnZVg6ICR7ZXZl
bnQucGFnZVh9LCBgICsKKyAgICAgICAgICAgICAgYHBhZ2VZOiAke2V2ZW50LnBhZ2VZfSwgYCAr
CisgICAgICAgICAgICAgIGBidXR0b246ICR7ZXZlbnQuYnV0dG9ufSwgYCArCisgICAgICAgICAg
ICAgIGBidXR0b25zOiAke2V2ZW50LmJ1dHRvbnN9LCBgICsKKyAgICAgICAgICAgICAgYGN0cmxL
ZXk6ICR7ZXZlbnQuY3RybEtleX0sIGAgKworICAgICAgICAgICAgICBgYWx0S2V5OiAke2V2ZW50
LmFsdEtleX0sIGAgKworICAgICAgICAgICAgICBgbWV0YUtleTogJHtldmVudC5tZXRhS2V5fSwg
YCArCisgICAgICAgICAgICAgIGBzaGlmdEtleTogJHtldmVudC5zaGlmdEtleX0sIGAgKworICAg
ICAgICAgICAgICBgdGFyZ2V0IGlkOiAke2V2ZW50LnRhcmdldC5pZH0pYCk7CisgICAgICAgIH0K
KworICAgICAgICBmdW5jdGlvbiByZWNvcmRGaXJzdFBvaW50ZXJNb3ZlKGV2ZW50KSB7CisgICAg
ICAgICAgcmVjb3JkUG9pbnRlckV2ZW50KGV2ZW50KTsKKyAgICAgICAgICB3aW5kb3cucmVtb3Zl
RXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgcmVjb3JkRmlyc3RQb2ludGVyTW92ZSk7CisgICAg
ICAgIH0KKworICAgICAgICBmdW5jdGlvbiByZXNldEV2ZW50cygpIHsKKyAgICAgICAgICAgIGFs
bEV2ZW50cy5ldmVudHMubGVuZ3RoID0gMDsKKyAgICAgICAgICAgIGRpc3BsYXlNZXNzYWdlKCIi
KTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGRyb3AobW92ZUhhbmRsZXIpIHsKKyAg
ICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7CisgICAgICAgICAgICBlbHMuZHJhZ0Fy
ZWEucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgbW92ZUhhbmRsZXIpOworICAgICAg
ICAgICAgZWxzLmRyYWdUYXJnZXQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gInllbGxvdyI7Cisg
ICAgICAgICAgICBlbHMuZHJhZ1RhcmdldC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCBn
cmFiKTsKKyAgICAgICAgICAgIHJlY29yZFBvaW50ZXJFdmVudChldmVudCk7CisgICAgICAgICAg
fTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIG1vdmUoZWwsIG9mZnNldFgsIG9mZnNl
dFksIHRpbWVvdXQpIHsKKyAgICAgICAgICByZXR1cm4gKGV2ZW50KSA9PiB7CisgICAgICAgICAg
ICBzZXRUaW1lb3V0KCgpID0+IHsKKyAgICAgICAgICAgICAgZWwuc3R5bGUudG9wID0gZXZlbnQu
Y2xpZW50WSArIG9mZnNldFkgKyAicHgiOworICAgICAgICAgICAgICBlbC5zdHlsZS5sZWZ0ID0g
ZXZlbnQuY2xpZW50WCArIG9mZnNldFggKyAicHgiOworICAgICAgICAgICAgfSwgdGltZW91dCk7
CisgICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGdyYWIoZXZlbnQp
IHsKKyAgICAgICAgICBldmVudC50YXJnZXQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gInJlZCI7
CisgICAgICAgICAgbGV0IGJveFJlY3QgPSBldmVudC50YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRS
ZWN0KCk7CisgICAgICAgICAgbGV0IGFyZWFSZWN0ID0gZXZlbnQudGFyZ2V0LnBhcmVudEVsZW1l
bnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CisgICAgICAgICAgbGV0IG1vdmVIYW5kbGVyID0g
bW92ZSgKKyAgICAgICAgICAgICAgZXZlbnQudGFyZ2V0LAorICAgICAgICAgICAgICAvLyBjb29y
ZGluYXRlcyBvZiBkcmFnVGFyZ2V0IG11c3QgYmUgcmVsYXRpdmUgdG8gZHJhZ0FyZWEgc3VjaCB0
aGF0CisgICAgICAgICAgICAgIC8vIGRyYWdUYXJnZXQgcmVtYWlucyB1bmRlciB0aGUgcG9pbnRl
cgorICAgICAgICAgICAgICAtKGFyZWFSZWN0LmxlZnQgKyAoZXZlbnQuY2xpZW50WCAtIGJveFJl
Y3QubGVmdCkpLAorICAgICAgICAgICAgICAtKGFyZWFSZWN0LnRvcCArIChldmVudC5jbGllbnRZ
IC0gYm94UmVjdC50b3ApKSwKKyAgICAgICAgICAgICAgMjApOworICAgICAgICAgIGVscy5kcmFn
QXJlYS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCBtb3ZlSGFuZGxlcik7CisgICAgICAg
ICAgZWxzLmRyYWdBcmVhLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCBkcm9wKG1vdmVIYW5k
bGVyKSwge29uY2U6IHRydWV9KTsKKyAgICAgICAgfQorCisgICAgICAgIGRvY3VtZW50LmFkZEV2
ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCAoKSA9PiB7CisgICAgICAgICAgdmFyIGtl
eVJlcG9ydGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImtleXMiKTsKKyAgICAgICAgICBb
ImtleXVwIiwgImtleXByZXNzIiwgImtleWRvd24iXS5mb3JFYWNoKChlKSA9PiB7CisgICAgICAg
ICAgICBrZXlSZXBvcnRlci5hZGRFdmVudExpc3RlbmVyKGUsIHJlY29yZEtleWJvYXJkRXZlbnQp
OworICAgICAgICAgIH0pOworICAgICAgICAgIHZhciBvdXRlciA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJvdXRlciIpOworICAgICAgICAgIFsiY2xpY2siLCAiZGJsY2xpY2siLCAibW91c2Vk
b3duIiwKKyAgICAgICAgICAgICAgIm1vdXNldXAiLCAiY29udGV4dG1lbnUiXS5mb3JFYWNoKChl
KSA9PiB7CisgICAgICAgICAgICBvdXRlci5hZGRFdmVudExpc3RlbmVyKGUsIHJlY29yZFBvaW50
ZXJFdmVudCk7CisgICAgICAgICAgfSk7CisgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVu
ZXIoIm1vdXNlbW92ZSIsIHJlY29yZFBvaW50ZXJFdmVudCwge29uY2U6IHRydWV9KTsKKyAgICAg
ICAgICAvL3Zpc3VhbCBjdWUgZm9yIG1vdXNlbW92ZQorICAgICAgICAgIHZhciBwb2ludGVyID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRyYWNrUG9pbnRlciIpOworICAgICAgICAgIHdpbmRv
dy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCBtb3ZlKHBvaW50ZXIsIDE1LCAxNSwgMzAp
KTsKKyAgICAgICAgICAvLyBkcmFnIGFuZCBkcm9wCisgICAgICAgICAgZWxzLmRyYWdBcmVhID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRyYWdBcmVhIik7CisgICAgICAgICAgZWxzLmRyYWdU
YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZHJhZ1RhcmdldCIpOworICAgICAgICAg
IGVscy5kcmFnVGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIGdyYWIsIHtvbmNl
OiB0cnVlfSk7CisgICAgICAgIH0pOworICAgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cisg
IDxkaXYgaWQ9InRyYWNrUG9pbnRlciIgY2xhc3M9ImJsb2NrIj48L2Rpdj4KKyAgPGRpdj4KKyAg
ICA8aDI+S2V5UmVwb3J0ZXI8L2gyPgorICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0ia2V5cyIg
c2l6ZT0iODAiPgorICA8L2Rpdj4KKyAgPGRpdj4KKyAgICA8aDI+Q2xpY2tSZXBvcnRlcjwvaDI+
CisgICAgPGRpdiBpZD0ib3V0ZXIiIGNsYXNzPSJhcmVhIj4KKyAgICA8L2Rpdj4KKyAgPC9kaXY+
CisgIDxkaXY+CisgICAgPGgyPkRyYWdSZXBvcnRlcjwvaDI+CisgICAgPGRpdiBpZD0iZHJhZ0Fy
ZWEiIGNsYXNzPSJhcmVhIj4KKyAgICAgIDxkaXYgaWQ9ImRyYWdUYXJnZXQiIGNsYXNzPSJibG9j
ayI+PC9kaXY+CisgICAgPC9kaXY+CisgIDwvZGl2PgorICA8ZGl2IGlkPSJyZXN1bHRDb250YWlu
ZXIiPgorICAgIDxoMj5FdmVudHM8L2gyPgorICAgIDxkaXYgaWQ9ImV2ZW50cyI+PC9kaXY+Cisg
IDwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9jb25mdGVzdC5weSBiL1dlYkRyaXZlclRlc3RzL2lt
cG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvY29uZnRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAuLmUxNDkxYTY4MDI2Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vi
RHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9jb25mdGVzdC5weQpAQCAt
MCwwICsxLDE0IEBACitpbXBvcnQgcHl0ZXN0Citmcm9tIHRlc3RzLnN1cHBvcnQuZml4dHVyZXMg
aW1wb3J0ICgKKyAgICBjb25maWd1cmF0aW9uLCBjcmVhdGVfZGlhbG9nLCBjcmVhdGVfZnJhbWUs
IGNyZWF0ZV93aW5kb3csIGh0dHAsCisgICAgbmV3X3Nlc3Npb24sIHNlcnZlcl9jb25maWcsIHNl
c3Npb24sIHVybCkKKworcHl0ZXN0LmZpeHR1cmUoc2NvcGU9InNlc3Npb24iKShjb25maWd1cmF0
aW9uKQorcHl0ZXN0LmZpeHR1cmUoKShjcmVhdGVfZGlhbG9nKQorcHl0ZXN0LmZpeHR1cmUoKShj
cmVhdGVfZnJhbWUpCitweXRlc3QuZml4dHVyZSgpKGNyZWF0ZV93aW5kb3cpCitweXRlc3QuZml4
dHVyZSgpKGh0dHApCitweXRlc3QuZml4dHVyZShzY29wZT0iZnVuY3Rpb24iKShuZXdfc2Vzc2lv
bikKK3B5dGVzdC5maXh0dXJlKCkoc2VydmVyX2NvbmZpZykKK3B5dGVzdC5maXh0dXJlKHNjb3Bl
PSJmdW5jdGlvbiIpKHNlc3Npb24pCitweXRlc3QuZml4dHVyZSgpKHVybCkKZGlmZiAtLWdpdCBh
L1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvY29udGV4dHMvbWF4
aW1pemVfd2luZG93LnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90
ZXN0cy9jb250ZXh0cy9tYXhpbWl6ZV93aW5kb3cucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLjQxNzNiMTcwODgxCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVy
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9jb250ZXh0cy9tYXhpbWl6ZV93aW5k
b3cucHkKQEAgLTAsMCArMSwyNzcgQEAKKyMgTUVUQTogdGltZW91dD1sb25nCisKK2Zyb20gdGVz
dHMuc3VwcG9ydC5hc3NlcnRzIGltcG9ydCBhc3NlcnRfZXJyb3IsIGFzc2VydF9kaWFsb2dfaGFu
ZGxlZCwgYXNzZXJ0X3N1Y2Nlc3MKK2Zyb20gdGVzdHMuc3VwcG9ydC5maXh0dXJlcyBpbXBvcnQg
Y3JlYXRlX2RpYWxvZworZnJvbSB0ZXN0cy5zdXBwb3J0LmlubGluZSBpbXBvcnQgaW5saW5lCisK
KworYWxlcnRfZG9jID0gaW5saW5lKCI8c2NyaXB0PndpbmRvdy5hbGVydCgpPC9zY3JpcHQ+IikK
KworCitkZWYgbWF4aW1pemUoc2Vzc2lvbik6CisgICAgcmV0dXJuIHNlc3Npb24udHJhbnNwb3J0
LnNlbmQoIlBPU1QiLCAic2Vzc2lvbi8lcy93aW5kb3cvbWF4aW1pemUiICUgc2Vzc2lvbi5zZXNz
aW9uX2lkKQorCisKKyMgMTAuNy4zIE1heGltaXplIFdpbmRvdworCisKK2RlZiB0ZXN0X25vX2Jy
b3dzaW5nX2NvbnRleHQoc2Vzc2lvbiwgY3JlYXRlX3dpbmRvdyk6CisgICAgIiIiCisgICAgMi4g
SWYgdGhlIGN1cnJlbnQgdG9wLWxldmVsIGJyb3dzaW5nIGNvbnRleHQgaXMgbm8gbG9uZ2VyIG9w
ZW4sCisgICAgcmV0dXJuIGVycm9yIHdpdGggZXJyb3IgY29kZSBubyBzdWNoIHdpbmRvdy4KKwor
ICAgICIiIgorICAgIHNlc3Npb24ud2luZG93X2hhbmRsZSA9IGNyZWF0ZV93aW5kb3coKQorICAg
IHNlc3Npb24uY2xvc2UoKQorICAgIHJlc3BvbnNlID0gbWF4aW1pemUoc2Vzc2lvbikKKyAgICBh
c3NlcnRfZXJyb3IocmVzcG9uc2UsICJubyBzdWNoIHdpbmRvdyIpCisKKworZGVmIHRlc3RfaGFu
ZGxlX3Byb21wdF9kaXNtaXNzX2FuZF9ub3RpZnkoKToKKyAgICAiIiJUT0RPIiIiCisKKworZGVm
IHRlc3RfaGFuZGxlX3Byb21wdF9hY2NlcHRfYW5kX25vdGlmeSgpOgorICAgICIiIlRPRE8iIiIK
KworCitkZWYgdGVzdF9oYW5kbGVfcHJvbXB0X2lnbm9yZSgpOgorICAgICIiIlRPRE8iIiIKKwor
CitkZWYgdGVzdF9oYW5kbGVfcHJvbXB0X2FjY2VwdChuZXdfc2Vzc2lvbik6CisgICAgIiIiCisg
ICAgMy4gSGFuZGxlIGFueSB1c2VyIHByb21wdHMgYW5kIHJldHVybiBpdHMgdmFsdWUgaWYgaXQg
aXMgYW4gZXJyb3IuCisKKyAgICBbLi4uXQorCisgICAgSW4gb3JkZXIgdG8gaGFuZGxlIGFueSB1
c2VyIHByb21wdHMgYSByZW1vdGUgZW5kIG11c3QgdGFrZSB0aGUKKyAgICBmb2xsb3dpbmcgc3Rl
cHM6CisKKyAgICAgIFsuLi5dCisKKyAgICAgIDIuIFBlcmZvcm0gdGhlIGZvbGxvd2luZyBzdWJz
dGVwcyBiYXNlZCBvbiB0aGUgY3VycmVudCBzZXNzaW9uJ3MKKyAgICAgIHVzZXIgcHJvbXB0IGhh
bmRsZXI6CisKKyAgICAgICAgWy4uLl0KKworICAgICAgICAtIGFjY2VwdCBzdGF0ZQorICAgICAg
ICAgICBBY2NlcHQgdGhlIGN1cnJlbnQgdXNlciBwcm9tcHQuCisKKyAgICAiIiIKKyAgICBfLCBz
ZXNzaW9uID0gbmV3X3Nlc3Npb24oeyJhbHdheXNNYXRjaCI6IHsidW5oYW5kbGVkUHJvbXB0QmVo
YXZpb3IiOiAiYWNjZXB0In19KQorICAgIHNlc3Npb24udXJsID0gaW5saW5lKCI8dGl0bGU+V0Qg
ZG9jIHRpdGxlPC90aXRsZT4iKQorCisgICAgY3JlYXRlX2RpYWxvZyhzZXNzaW9uKSgiYWxlcnQi
LCB0ZXh0PSJkaXNtaXNzICMxIiwgcmVzdWx0X3Zhcj0iZGlzbWlzczEiKQorICAgIHJlc3BvbnNl
ID0gbWF4aW1pemUoc2Vzc2lvbikKKyAgICBhc3NlcnQgcmVzcG9uc2Uuc3RhdHVzID09IDIwMAor
ICAgIGFzc2VydF9kaWFsb2dfaGFuZGxlZChzZXNzaW9uLCAiZGlzbWlzcyAjMSIpCisKKyAgICBj
cmVhdGVfZGlhbG9nKHNlc3Npb24pKCJjb25maXJtIiwgdGV4dD0iZGlzbWlzcyAjMiIsIHJlc3Vs
dF92YXI9ImRpc21pc3MyIikKKyAgICByZXNwb25zZSA9IG1heGltaXplKHNlc3Npb24pCisgICAg
YXNzZXJ0IHJlc3BvbnNlLnN0YXR1cyA9PSAyMDAKKyAgICBhc3NlcnRfZGlhbG9nX2hhbmRsZWQo
c2Vzc2lvbiwgImRpc21pc3MgIzIiKQorCisgICAgY3JlYXRlX2RpYWxvZyhzZXNzaW9uKSgicHJv
bXB0IiwgdGV4dD0iZGlzbWlzcyAjMyIsIHJlc3VsdF92YXI9ImRpc21pc3MzIikKKyAgICByZXNw
b25zZSA9IG1heGltaXplKHNlc3Npb24pCisgICAgYXNzZXJ0IHJlc3BvbnNlLnN0YXR1cyA9PSAy
MDAKKyAgICBhc3NlcnRfZGlhbG9nX2hhbmRsZWQoc2Vzc2lvbiwgImRpc21pc3MgIzMiKQorCisK
K2RlZiB0ZXN0X2hhbmRsZV9wcm9tcHRfbWlzc2luZ192YWx1ZShzZXNzaW9uLCBjcmVhdGVfZGlh
bG9nKToKKyAgICAiIiIKKyAgICAzLiBIYW5kbGUgYW55IHVzZXIgcHJvbXB0cyBhbmQgcmV0dXJu
IGl0cyB2YWx1ZSBpZiBpdCBpcyBhbiBlcnJvci4KKworICAgIFsuLi5dCisKKyAgICBJbiBvcmRl
ciB0byBoYW5kbGUgYW55IHVzZXIgcHJvbXB0cyBhIHJlbW90ZSBlbmQgbXVzdCB0YWtlIHRoZQor
ICAgIGZvbGxvd2luZyBzdGVwczoKKworICAgICAgWy4uLl0KKworICAgICAgMi4gUGVyZm9ybSB0
aGUgZm9sbG93aW5nIHN1YnN0ZXBzIGJhc2VkIG9uIHRoZSBjdXJyZW50IHNlc3Npb24ncworICAg
ICAgdXNlciBwcm9tcHQgaGFuZGxlcjoKKworICAgICAgICBbLi4uXQorCisgICAgICAgIC0gbWlz
c2luZyB2YWx1ZSBkZWZhdWx0IHN0YXRlCisgICAgICAgICAgIDEuIERpc21pc3MgdGhlIGN1cnJl
bnQgdXNlciBwcm9tcHQuCisgICAgICAgICAgIDIuIFJldHVybiBlcnJvciB3aXRoIGVycm9yIGNv
ZGUgdW5leHBlY3RlZCBhbGVydCBvcGVuLgorCisgICAgIiIiCisgICAgc2Vzc2lvbi51cmwgPSBp
bmxpbmUoIjx0aXRsZT5XRCBkb2MgdGl0bGU8L3RpdGxlPiIpCisgICAgY3JlYXRlX2RpYWxvZygi
YWxlcnQiLCB0ZXh0PSJkaXNtaXNzICMxIiwgcmVzdWx0X3Zhcj0iZGlzbWlzczEiKQorCisgICAg
cmVzcG9uc2UgPSBtYXhpbWl6ZShzZXNzaW9uKQorCisgICAgYXNzZXJ0X2Vycm9yKHJlc3BvbnNl
LCAidW5leHBlY3RlZCBhbGVydCBvcGVuIikKKyAgICBhc3NlcnRfZGlhbG9nX2hhbmRsZWQoc2Vz
c2lvbiwgImRpc21pc3MgIzEiKQorCisgICAgY3JlYXRlX2RpYWxvZygiY29uZmlybSIsIHRleHQ9
ImRpc21pc3MgIzIiLCByZXN1bHRfdmFyPSJkaXNtaXNzMiIpCisKKyAgICByZXNwb25zZSA9IG1h
eGltaXplKHNlc3Npb24pCisgICAgYXNzZXJ0X2Vycm9yKHJlc3BvbnNlLCAidW5leHBlY3RlZCBh
bGVydCBvcGVuIikKKyAgICBhc3NlcnRfZGlhbG9nX2hhbmRsZWQoc2Vzc2lvbiwgImRpc21pc3Mg
IzIiKQorCisgICAgY3JlYXRlX2RpYWxvZygicHJvbXB0IiwgdGV4dD0iZGlzbWlzcyAjMyIsIHJl
c3VsdF92YXI9ImRpc21pc3MzIikKKworICAgIHJlc3BvbnNlID0gbWF4aW1pemUoc2Vzc2lvbikK
KyAgICBhc3NlcnRfZXJyb3IocmVzcG9uc2UsICJ1bmV4cGVjdGVkIGFsZXJ0IG9wZW4iKQorICAg
IGFzc2VydF9kaWFsb2dfaGFuZGxlZChzZXNzaW9uLCAiZGlzbWlzcyAjMyIpCisKKworZGVmIHRl
c3RfZnVsbHlfZXhpdF9mdWxsc2NyZWVuKHNlc3Npb24pOgorICAgICIiIgorICAgIDQuIEZ1bGx5
IGV4aXQgZnVsbHNjcmVlbi4KKworICAgIFsuLi5dCisKKyAgICBUbyBmdWxseSBleGl0IGZ1bGxz
Y3JlZW4gYSBkb2N1bWVudCBkb2N1bWVudCwgcnVuIHRoZXNlIHN0ZXBzOgorCisgICAgICAxLiBJ
ZiBkb2N1bWVudCdzIGZ1bGxzY3JlZW4gZWxlbWVudCBpcyBudWxsLCB0ZXJtaW5hdGUgdGhlc2Ug
c3RlcHMuCisKKyAgICAgIDIuIFVuZnVsbHNjcmVlbiBlbGVtZW50cyB3aG9zZSBmdWxsc2NyZWVu
IGZsYWcgaXMgc2V0LCB3aXRoaW4KKyAgICAgIGRvY3VtZW50J3MgdG9wIGxheWVyLCBleGNlcHQg
Zm9yIGRvY3VtZW50J3MgZnVsbHNjcmVlbiBlbGVtZW50LgorCisgICAgICAzLiBFeGl0IGZ1bGxz
Y3JlZW4gZG9jdW1lbnQuCisKKyAgICAiIiIKKyAgICBzZXNzaW9uLndpbmRvdy5mdWxsc2NyZWVu
KCkKKyAgICBhc3NlcnQgc2Vzc2lvbi5leGVjdXRlX3NjcmlwdCgicmV0dXJuIHdpbmRvdy5mdWxs
U2NyZWVuIikgaXMgVHJ1ZQorCisgICAgcmVzcG9uc2UgPSBtYXhpbWl6ZShzZXNzaW9uKQorICAg
IGFzc2VydF9zdWNjZXNzKHJlc3BvbnNlKQorICAgIGFzc2VydCBzZXNzaW9uLmV4ZWN1dGVfc2Ny
aXB0KCJyZXR1cm4gd2luZG93LmZ1bGxTY3JlZW4iKSBpcyBGYWxzZQorCisKK2RlZiB0ZXN0X3Jl
c3RvcmVfdGhlX3dpbmRvdyhzZXNzaW9uKToKKyAgICAiIiIKKyAgICA1LiBSZXN0b3JlIHRoZSB3
aW5kb3cuCisKKyAgICBbLi4uXQorCisgICAgVG8gcmVzdG9yZSB0aGUgd2luZG93LCBnaXZlbiBh
biBvcGVyYXRpbmcgc3lzdGVtIGxldmVsIHdpbmRvdyB3aXRoCisgICAgYW4gYXNzb2NpYXRlZCB0
b3AtbGV2ZWwgYnJvd3NpbmcgY29udGV4dCwgcnVuIGltcGxlbWVudGF0aW9uLXNwZWNpZmljCisg
ICAgc3RlcHMgdG8gcmVzdG9yZSBvciB1bmhpZGUgdGhlIHdpbmRvdyB0byB0aGUgdmlzaWJsZSBz
Y3JlZW4uICBEbyBub3QKKyAgICByZXR1cm4gZnJvbSB0aGlzIG9wZXJhdGlvbiB1bnRpbCB0aGUg
dmlzaWJpbGl0eSBzdGF0ZSBvZiB0aGUgdG9wLWxldmVsCisgICAgYnJvd3NpbmcgY29udGV4dCdz
IGFjdGl2ZSBkb2N1bWVudCBoYXMgcmVhY2hlZCB0aGUgdmlzaWJsZSBzdGF0ZSwKKyAgICBvciB1
bnRpbCB0aGUgb3BlcmF0aW9uIHRpbWVzIG91dC4KKworICAgICIiIgorICAgIHNlc3Npb24ud2lu
ZG93Lm1pbmltaXplKCkKKyAgICBhc3NlcnQgc2Vzc2lvbi5leGVjdXRlX3NjcmlwdCgicmV0dXJu
IGRvY3VtZW50LmhpZGRlbiIpIGlzIFRydWUKKworICAgIHJlc3BvbnNlID0gbWF4aW1pemUoc2Vz
c2lvbikKKyAgICBhc3NlcnRfc3VjY2VzcyhyZXNwb25zZSkKKworCitkZWYgdGVzdF9tYXhpbWl6
ZShzZXNzaW9uKToKKyAgICAiIiIKKyAgICA2LiBNYXhpbWl6ZSB0aGUgd2luZG93IG9mIHRoZSBj
dXJyZW50IGJyb3dzaW5nIGNvbnRleHQuCisKKyAgICBbLi4uXQorCisgICAgVG8gbWF4aW1pemUg
dGhlIHdpbmRvdywgZ2l2ZW4gYW4gb3BlcmF0aW5nIHN5c3RlbSBsZXZlbCB3aW5kb3cgd2l0aCBh
bgorICAgIGFzc29jaWF0ZWQgdG9wLWxldmVsIGJyb3dzaW5nIGNvbnRleHQsIHJ1biB0aGUgaW1w
bGVtZW50YXRpb24tc3BlY2lmaWMKKyAgICBzdGVwcyB0byB0cmFuc2l0aW9uIHRoZSBvcGVyYXRp
bmcgc3lzdGVtIGxldmVsIHdpbmRvdyBpbnRvIHRoZQorICAgIG1heGltaXplZCB3aW5kb3cgc3Rh
dGUuICBJZiB0aGUgd2luZG93IG1hbmFnZXIgc3VwcG9ydHMgd2luZG93CisgICAgcmVzaXppbmcg
YnV0IGRvZXMgbm90IGhhdmUgYSBjb25jZXB0IG9mIHdpbmRvdyBtYXhpbWF0aW9uLCB0aGUgd2lu
ZG93CisgICAgZGltZW5zaW9ucyBtdXN0IGJlIGluY3JlYXNlZCB0byB0aGUgbWF4aW11bSBhdmFp
bGFibGUgc2l6ZSBwZXJtaXR0ZWQKKyAgICBieSB0aGUgd2luZG93IG1hbmFnZXIgZm9yIHRoZSBj
dXJyZW50IHNjcmVlbi4gIFJldHVybiB3aGVuIHRoZSB3aW5kb3cKKyAgICBoYXMgY29tcGxldGVk
IHRoZSB0cmFuc2l0aW9uLCBvciB3aXRoaW4gYW4gaW1wbGVtZW50YXRpb24tZGVmaW5lZAorICAg
IHRpbWVvdXQuCisKKyAgICAiIiIKKyAgICBiZWZvcmVfc2l6ZSA9IHNlc3Npb24ud2luZG93LnNp
emUKKworICAgIHJlc3BvbnNlID0gbWF4aW1pemUoc2Vzc2lvbikKKyAgICBhc3NlcnRfc3VjY2Vz
cyhyZXNwb25zZSkKKworICAgIGFzc2VydCBiZWZvcmVfc2l6ZSAhPSBzZXNzaW9uLndpbmRvdy5z
aXplCisKKworZGVmIHRlc3RfcGF5bG9hZChzZXNzaW9uKToKKyAgICAiIiIKKyAgICA3LiBSZXR1
cm4gc3VjY2VzcyB3aXRoIHRoZSBKU09OIHNlcmlhbGl6YXRpb24gb2YgdGhlIGN1cnJlbnQgdG9w
LWxldmVsCisgICAgYnJvd3NpbmcgY29udGV4dCdzIHdpbmRvdyByZWN0LgorCisgICAgWy4uLl0K
KworICAgIEEgdG9wLWxldmVsIGJyb3dzaW5nIGNvbnRleHQncyB3aW5kb3cgcmVjdCBpcyBkZWZp
bmVkIGFzIGEKKyAgICBkaWN0aW9uYXJ5IG9mIHRoZSBzY3JlZW5YLCBzY3JlZW5ZLCB3aWR0aCBh
bmQgaGVpZ2h0IGF0dHJpYnV0ZXMgb2YKKyAgICB0aGUgV2luZG93UHJveHkuIEl0cyBKU09OIHJl
cHJlc2VudGF0aW9uIGlzIHRoZSBmb2xsb3dpbmc6CisKKyAgICAieCIKKyAgICAgICAgV2luZG93
UHJveHkncyBzY3JlZW5YIGF0dHJpYnV0ZS4KKworICAgICJ5IgorICAgICAgICBXaW5kb3dQcm94
eSdzIHNjcmVlblkgYXR0cmlidXRlLgorCisgICAgIndpZHRoIgorICAgICAgICBXaWR0aCBvZiB0
aGUgdG9wLWxldmVsIGJyb3dzaW5nIGNvbnRleHQncyBvdXRlciBkaW1lbnNpb25zLAorICAgICAg
ICBpbmNsdWRpbmcgYW55IGJyb3dzZXIgY2hyb21lIGFuZCBleHRlcm5hbGx5IGRyYXduIHdpbmRv
dworICAgICAgICBkZWNvcmF0aW9ucyBpbiBDU1MgcmVmZXJlbmNlIHBpeGVscy4KKworICAgICJo
ZWlnaHQiCisgICAgICAgIEhlaWdodCBvZiB0aGUgdG9wLWxldmVsIGJyb3dzaW5nIGNvbnRleHQn
cyBvdXRlciBkaW1lbnNpb25zLAorICAgICAgICBpbmNsdWRpbmcgYW55IGJyb3dzZXIgY2hyb21l
IGFuZCBleHRlcm5hbGx5IGRyYXduIHdpbmRvdworICAgICAgICBkZWNvcmF0aW9ucyBpbiBDU1Mg
cmVmZXJlbmNlIHBpeGVscy4KKworICAgICIiIgorICAgIGJlZm9yZV9zaXplID0gc2Vzc2lvbi53
aW5kb3cuc2l6ZQorCisgICAgcmVzcG9uc2UgPSBtYXhpbWl6ZShzZXNzaW9uKQorCisgICAgIyBz
dGVwIDUKKyAgICBhc3NlcnQgcmVzcG9uc2Uuc3RhdHVzID09IDIwMAorICAgIGFzc2VydCBpc2lu
c3RhbmNlKHJlc3BvbnNlLmJvZHlbInZhbHVlIl0sIGRpY3QpCisKKyAgICB2YWx1ZSA9IHJlc3Bv
bnNlLmJvZHlbInZhbHVlIl0KKyAgICBhc3NlcnQgIndpZHRoIiBpbiB2YWx1ZQorICAgIGFzc2Vy
dCAiaGVpZ2h0IiBpbiB2YWx1ZQorICAgIGFzc2VydCAieCIgaW4gdmFsdWUKKyAgICBhc3NlcnQg
InkiIGluIHZhbHVlCisgICAgYXNzZXJ0IGlzaW5zdGFuY2UodmFsdWVbIndpZHRoIl0sIGludCkK
KyAgICBhc3NlcnQgaXNpbnN0YW5jZSh2YWx1ZVsiaGVpZ2h0Il0sIGludCkKKyAgICBhc3NlcnQg
aXNpbnN0YW5jZSh2YWx1ZVsieCJdLCBpbnQpCisgICAgYXNzZXJ0IGlzaW5zdGFuY2UodmFsdWVb
InkiXSwgaW50KQorCisgICAgYXNzZXJ0IGJlZm9yZV9zaXplICE9IHNlc3Npb24ud2luZG93LnNp
emUKKworCitkZWYgdGVzdF9tYXhpbWl6ZV90d2ljZV9pc19pZGVtcG90ZW50KHNlc3Npb24pOgor
ICAgIGZpcnN0X3Jlc3BvbnNlID0gbWF4aW1pemUoc2Vzc2lvbikKKyAgICBhc3NlcnRfc3VjY2Vz
cyhmaXJzdF9yZXNwb25zZSkKKyAgICBtYXhfc2l6ZSA9IHNlc3Npb24ud2luZG93LnNpemUKKwor
ICAgIHNlY29uZF9yZXNwb25zZSA9IG1heGltaXplKHNlc3Npb24pCisgICAgYXNzZXJ0X3N1Y2Nl
c3Moc2Vjb25kX3Jlc3BvbnNlKQorICAgIGFzc2VydCBzZXNzaW9uLndpbmRvdy5zaXplID09IG1h
eF9zaXplCisKKworIiIiCitUT0RPKGF0byk6IEltcGxpY2l0IHNlc3Npb24gc3RhcnQgZG9lcyBu
b3QgdXNlIGNvbmZpZ3VyYXRpb24gcGFzc2VkIG9uCitmcm9tIHdwdHJ1bm5lci4gIFRoaXMgY2F1
c2VzIGFuIGV4Y2VwdGlvbi4KKworU2VlIGh0dHBzOi8vYnVnemlsLmxhLzEzOTg0NTkuCisKK2Rl
ZiB0ZXN0X21heGltaXplX3doZW5fcmVzaXplZF90b19tYXhfc2l6ZShzZXNzaW9uKToKKyAgICAj
IERldGVybWluZSB0aGUgbGFyZ2VzdCBhdmFpbGFibGUgd2luZG93IHNpemUgYnkgZmlyc3QgbWF4
aW1pc2luZworICAgICMgdGhlIHdpbmRvdyBhbmQgZ2V0dGluZyB0aGUgd2luZG93IHJlY3QgZGlt
ZW5zaW9ucy4KKyAgICAjCisgICAgIyBUaGVuIHJlc2l6ZSB0aGUgd2luZG93IHRvIHRoZSBtYXhp
bXVtIGF2YWlsYWJsZSBzaXplLgorICAgIHNlc3Npb24uZW5kKCkKKyAgICBhdmFpbGFibGUgPSBz
ZXNzaW9uLndpbmRvdy5tYXhpbWl6ZSgpCisgICAgc2Vzc2lvbi5lbmQoKQorCisgICAgc2Vzc2lv
bi53aW5kb3cuc2l6ZSA9IGF2YWlsYWJsZQorCisgICAgIyBJbiBjZXJ0YWluIHdpbmRvdyBtYW5h
Z2VycyBhIHdpbmRvdyBleHRlbmRpbmcgdG8gdGhlIGZ1bGwgYXZhaWxhYmxlCisgICAgIyBkaW1l
bnNpb25zIG9mIHRoZSBzY3JlZW4gbWF5IG5vdCBpbXBseSB0aGF0IHRoZSB3aW5kb3cgaXMgbWF4
aW1pc2VkLAorICAgICMgc2luY2UgdGhpcyBpcyBvZnRlbiBhIHNwZWNpYWwgc3RhdGUuICBJZiBh
IHJlbW90ZSBlbmQgZXhwZWN0cyBhIERPTQorICAgICMgcmVzaXplIGV2ZW50LCB0aGlzIG1heSBu
b3QgZmlyZSBpZiB0aGUgd2luZG93IGhhcyBhbHJlYWR5IHJlYWNoZWQKKyAgICAjIGl0cyBleHBl
Y3RlZCBkaW1lbnNpb25zLgorICAgIGJlZm9yZSA9IHNlc3Npb24ud2luZG93LnNpemUKKyAgICBz
ZXNzaW9uLndpbmRvdy5tYXhpbWl6ZSgpCisgICAgYXNzZXJ0IHNlc3Npb24ud2luZG93LnNpemUg
PT0gYmVmb3JlCisiIiIKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93
ZWJkcml2ZXIvdGVzdHMvY29udGV4dHMvcmVzaXppbmdfYW5kX3Bvc2l0aW9uaW5nLnB5IGIvV2Vi
RHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9jb250ZXh0cy9yZXNpemlu
Z19hbmRfcG9zaXRpb25pbmcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLjY2MzMxZmFhMjJiCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9jb250ZXh0cy9yZXNpemluZ19hbmRfcG9zaXRpb25pbmcu
cHkKQEAgLTAsMCArMSw2MSBAQAoraW1wb3J0IGpzb24KK2ltcG9ydCBweXRlc3QKK2ltcG9ydCB3
ZWJkcml2ZXIKKworCitkZWYgd2luZG93X3NpemVfc3VwcG9ydGVkKHNlc3Npb24pOgorICAgIHRy
eToKKyAgICAgICAgc2Vzc2lvbi53aW5kb3cuc2l6ZSA9ICgiYSIsICJiIikKKyAgICBleGNlcHQg
d2ViZHJpdmVyLlVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uOgorICAgICAgICByZXR1cm4g
RmFsc2UKKyAgICBleGNlcHQgd2ViZHJpdmVyLkludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjoKKyAg
ICAgICAgcmV0dXJuIFRydWUKKworZGVmIHdpbmRvd19wb3NpdGlvbl9zdXBwb3J0ZWQoc2Vzc2lv
bik6CisgICAgdHJ5OgorICAgICAgICBzZXNzaW9uLndpbmRvdy5wb3NpdGlvbiA9ICgiYSIsICJi
IikKKyAgICBleGNlcHQgd2ViZHJpdmVyLlVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uOgor
ICAgICAgICByZXR1cm4gRmFsc2UKKyAgICBleGNlcHQgd2ViZHJpdmVyLkludmFsaWRBcmd1bWVu
dEV4Y2VwdGlvbjoKKyAgICAgICAgcmV0dXJuIFRydWUKKworCitkZWYgdGVzdF93aW5kb3dfcmVz
aXplKHNlc3Npb24pOgorICAgIGlmIG5vdCB3aW5kb3dfc2l6ZV9zdXBwb3J0ZWQoc2Vzc2lvbik6
CisgICAgICAgIHB5dGVzdC5za2lwKCkKKworICAgICMgc2V0dGluZyB0aGUgd2luZG93IHNpemUg
Ynkgd2ViZHJpdmVyIGlzIHN5bmNocm9ub3VzCisgICAgIyBzbyB3ZSBzaG91bGQgc2VlIHRoZSBy
ZXN1bHRzIGltbWVkaWF0ZWx5CisKKyAgICBzZXNzaW9uLndpbmRvdy5zaXplID0gKDQwMCwgNTAw
KQorICAgIGFzc2VydCBzZXNzaW9uLndpbmRvdy5zaXplID09ICg0MDAsIDUwMCkKKworICAgIHNl
c3Npb24ud2luZG93LnNpemUgPSAoNTAwLCA2MDApCisgICAgYXNzZXJ0IHNlc3Npb24ud2luZG93
LnNpemUgPT0gKDUwMCwgNjAwKQorCisKKyIiIgorVE9ETyhhdG8pOgorCisgICAgRGlzYWJsZSB0
ZXN0IGJlY2F1c2UgdGhlIHdoaWxlIHN0YXRlbWVudHMgYXJlIHdyb25nLgorICAgIFRvIGZpeCB0
aGlzIHByb3Blcmx5IHdlIG5lZWQgdG8gd3JpdGUgYW4gZXhwbGljaXQgd2FpdCB1dGlsaXR5Lgor
CitkZWYgdGVzdF93aW5kb3dfcmVzaXplX2J5X3NjcmlwdChzZXNzaW9uKToKKyAgICAjIHNldHRp
bmcgdGhlIHdpbmRvdyBzaXplIGJ5IEpTIGlzIGFzeW5jaHJvbm91cworICAgICMgc28gd2UgcG9s
bCB3YWl0aW5nIGZvciB0aGUgcmVzdWx0cworCisgICAgc2l6ZTAgPSBzZXNzaW9uLndpbmRvdy5z
aXplCisKKyAgICBzZXNzaW9uLmV4ZWN1dGVfc2NyaXB0KCJ3aW5kb3cucmVzaXplVG8oNzAwLCA4
MDApIikKKyAgICBzaXplMSA9IHNlc3Npb24ud2luZG93LnNpemUKKyAgICB3aGlsZSBzaXplMCA9
PSBzaXplMToKKyAgICAgICAgc2l6ZTEgPSBzZXNzaW9uLndpbmRvdy5zaXplCisgICAgYXNzZXJ0
IHNpemUxID09ICg3MDAsIDgwMCkKKworICAgIHNlc3Npb24uZXhlY3V0ZV9zY3JpcHQoIndpbmRv
dy5yZXNpemVUbyg4MDAsIDkwMCkiKQorICAgIHNpemUyID0gc2Vzc2lvbi53aW5kb3cuc2l6ZQor
ICAgIHdoaWxlIHNpemUxID09IHNpemUyOgorICAgICAgICBzaXplMiA9IHNlc3Npb24ud2luZG93
LnNpemUKKyAgICAgICAgYXNzZXJ0IHNpemUyID09ICg4MDAsIDkwMCkKKyAgICBhc3NlcnQgc2l6
ZTIgPT0geyJ3aWR0aCI6IDIwMCwgImhlaWdodCI6IDEwMH0KKyIiIgpkaWZmIC0tZ2l0IGEvV2Vi
RHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9jb29raWVzL2Nvb2tpZXMu
cHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL2Nvb2tpZXMv
Y29va2llcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDJhOGM0
NDgwZjkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
ZHJpdmVyL3Rlc3RzL2Nvb2tpZXMvY29va2llcy5weQpAQCAtMCwwICsxLDI4IEBACitkZWYgdGVz
dF9nZXRfbmFtZWRfY29va2llKHNlc3Npb24sIHVybCk6CisgICAgc2Vzc2lvbi51cmwgPSB1cmwo
Ii9jb21tb24vYmxhbmsuaHRtbCIpCisgICAgc2Vzc2lvbi5leGVjdXRlX3NjcmlwdCgiZG9jdW1l
bnQuY29va2llID0gJ2Zvbz1iYXInIikKKworICAgIHJlc3VsdCA9IHNlc3Npb24udHJhbnNwb3J0
LnNlbmQoIkdFVCIsICJzZXNzaW9uLyVzL2Nvb2tpZS9mb28iICUgc2Vzc2lvbi5zZXNzaW9uX2lk
KQorICAgIGFzc2VydCByZXN1bHQuc3RhdHVzID09IDIwMAorICAgIGFzc2VydCBpc2luc3RhbmNl
KHJlc3VsdC5ib2R5WyJ2YWx1ZSJdLCBkaWN0KQorCisgICAgIyB0YWJsZSBmb3IgY29va2llIGNv
bnZlcnNpb24KKyAgICAjIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJkcml2ZXIvd2ViZHJpdmVy
LXNwZWMuaHRtbCNkZm4tdGFibGUtZm9yLWNvb2tpZS1jb252ZXJzaW9uCisgICAgY29va2llID0g
cmVzdWx0LmJvZHlbInZhbHVlIl0KKyAgICBhc3NlcnQgIm5hbWUiIGluIGNvb2tpZQorICAgIGFz
c2VydCBpc2luc3RhbmNlKGNvb2tpZVsibmFtZSJdLCBiYXNlc3RyaW5nKQorICAgIGFzc2VydCAi
dmFsdWUiIGluIGNvb2tpZQorICAgIGFzc2VydCBpc2luc3RhbmNlKGNvb2tpZVsidmFsdWUiXSwg
YmFzZXN0cmluZykKKyAgICBhc3NlcnQgInBhdGgiIGluIGNvb2tpZQorICAgIGFzc2VydCBpc2lu
c3RhbmNlKGNvb2tpZVsicGF0aCJdLCBiYXNlc3RyaW5nKQorICAgIGFzc2VydCAiZG9tYWluIiBp
biBjb29raWUKKyAgICBhc3NlcnQgaXNpbnN0YW5jZShjb29raWVbImRvbWFpbiJdLCBiYXNlc3Ry
aW5nKQorICAgIGFzc2VydCAic2VjdXJlIiBpbiBjb29raWUKKyAgICBhc3NlcnQgaXNpbnN0YW5j
ZShjb29raWVbInNlY3VyZSJdLCBib29sKQorICAgIGFzc2VydCAiaHR0cE9ubHkiIGluIGNvb2tp
ZQorICAgIGFzc2VydCBpc2luc3RhbmNlKGNvb2tpZVsiaHR0cE9ubHkiXSwgYm9vbCkKKyAgICBh
c3NlcnQgImV4cGlyeSIgaW4gY29va2llCisgICAgYXNzZXJ0IGlzaW5zdGFuY2UoY29va2llWyJl
eHBpcnkiXSwgKGludCwgbG9uZykpCisKKyAgICBhc3NlcnQgY29va2llWyJuYW1lIl0gPT0gImZv
byIKKyAgICBhc3NlcnQgY29va2llWyJ2YWx1ZSJdID09ICJiYXIiCmRpZmYgLS1naXQgYS9XZWJE
cml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL2VsZW1lbnRfY2xpY2svX19p
bml0X18ucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL2Vs
ZW1lbnRfY2xpY2svX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLmU2OWRlMjliYjJkCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViZHJpdmVyL3Rlc3RzL2VsZW1lbnRfY2xpY2svc2VsZWN0LnB5IGIvV2ViRHJpdmVyVGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9lbGVtZW50X2NsaWNrL3NlbGVjdC5weQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMTVjMzZmYzQ1NGYKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3Rz
L2VsZW1lbnRfY2xpY2svc2VsZWN0LnB5CkBAIC0wLDAgKzEsMjEzIEBACitmcm9tIHRlc3RzLnN1
cHBvcnQuaW5saW5lIGltcG9ydCBpbmxpbmUKKworCitkZWYgdGVzdF9jbGlja19vcHRpb24oc2Vz
c2lvbik6CisgICAgc2Vzc2lvbi51cmwgPSBpbmxpbmUoIiIiCisgICAgICA8c2VsZWN0PgorICAg
ICAgICA8b3B0aW9uPmZpcnN0CisgICAgICAgIDxvcHRpb24+c2Vjb25kCisgICAgICA8L3NlbGVj
dD4iIiIpCisgICAgb3B0aW9ucyA9IHNlc3Npb24uZmluZC5jc3MoIm9wdGlvbiIpCisKKyAgICBh
c3NlcnQgb3B0aW9uc1swXS5zZWxlY3RlZAorICAgIGFzc2VydCBub3Qgb3B0aW9uc1sxXS5zZWxl
Y3RlZAorCisgICAgb3B0aW9uc1sxXS5jbGljaygpCisgICAgYXNzZXJ0IG9wdGlvbnNbMV0uc2Vs
ZWN0ZWQKKyAgICBhc3NlcnQgbm90IG9wdGlvbnNbMF0uc2VsZWN0ZWQKKworCitkZWYgdGVzdF9j
bGlja19tdWx0aXBsZV9vcHRpb24oc2Vzc2lvbik6CisgICAgc2Vzc2lvbi51cmwgPSBpbmxpbmUo
IiIiCisgICAgICA8c2VsZWN0IG11bHRpcGxlPgorICAgICAgICA8b3B0aW9uPmZpcnN0CisgICAg
ICAgIDxvcHRpb24+c2Vjb25kCisgICAgICA8L3NlbGVjdD4iIiIpCisgICAgb3B0aW9ucyA9IHNl
c3Npb24uZmluZC5jc3MoIm9wdGlvbiIpCisKKyAgICBhc3NlcnQgbm90IG9wdGlvbnNbMF0uc2Vs
ZWN0ZWQKKyAgICBhc3NlcnQgbm90IG9wdGlvbnNbMV0uc2VsZWN0ZWQKKworICAgIG9wdGlvbnNb
MF0uY2xpY2soKQorICAgIGFzc2VydCBvcHRpb25zWzBdLnNlbGVjdGVkCisgICAgYXNzZXJ0IG5v
dCBvcHRpb25zWzFdLnNlbGVjdGVkCisKKworZGVmIHRlc3RfY2xpY2tfcHJlc2VsZWN0ZWRfb3B0
aW9uKHNlc3Npb24pOgorICAgIHNlc3Npb24udXJsID0gaW5saW5lKCIiIgorICAgICAgPHNlbGVj
dD4KKyAgICAgICAgPG9wdGlvbj5maXJzdAorICAgICAgICA8b3B0aW9uIHNlbGVjdGVkPnNlY29u
ZAorICAgICAgPC9zZWxlY3Q+IiIiKQorICAgIG9wdGlvbnMgPSBzZXNzaW9uLmZpbmQuY3NzKCJv
cHRpb24iKQorCisgICAgYXNzZXJ0IG5vdCBvcHRpb25zWzBdLnNlbGVjdGVkCisgICAgYXNzZXJ0
IG9wdGlvbnNbMV0uc2VsZWN0ZWQKKworICAgIG9wdGlvbnNbMV0uY2xpY2soKQorICAgIGFzc2Vy
dCBvcHRpb25zWzFdLnNlbGVjdGVkCisgICAgYXNzZXJ0IG5vdCBvcHRpb25zWzBdLnNlbGVjdGVk
CisKKyAgICBvcHRpb25zWzBdLmNsaWNrKCkKKyAgICBhc3NlcnQgb3B0aW9uc1swXS5zZWxlY3Rl
ZAorICAgIGFzc2VydCBub3Qgb3B0aW9uc1sxXS5zZWxlY3RlZAorCisKK2RlZiB0ZXN0X2NsaWNr
X3ByZXNlbGVjdGVkX211bHRpcGxlX29wdGlvbihzZXNzaW9uKToKKyAgICBzZXNzaW9uLnVybCA9
IGlubGluZSgiIiIKKyAgICAgIDxzZWxlY3QgbXVsdGlwbGU+CisgICAgICAgIDxvcHRpb24+Zmly
c3QKKyAgICAgICAgPG9wdGlvbiBzZWxlY3RlZD5zZWNvbmQKKyAgICAgIDwvc2VsZWN0PiIiIikK
KyAgICBvcHRpb25zID0gc2Vzc2lvbi5maW5kLmNzcygib3B0aW9uIikKKworICAgIGFzc2VydCBu
b3Qgb3B0aW9uc1swXS5zZWxlY3RlZAorICAgIGFzc2VydCBvcHRpb25zWzFdLnNlbGVjdGVkCisK
KyAgICBvcHRpb25zWzFdLmNsaWNrKCkKKyAgICBhc3NlcnQgbm90IG9wdGlvbnNbMV0uc2VsZWN0
ZWQKKyAgICBhc3NlcnQgbm90IG9wdGlvbnNbMF0uc2VsZWN0ZWQKKworICAgIG9wdGlvbnNbMF0u
Y2xpY2soKQorICAgIGFzc2VydCBvcHRpb25zWzBdLnNlbGVjdGVkCisgICAgYXNzZXJ0IG5vdCBv
cHRpb25zWzFdLnNlbGVjdGVkCisKKworZGVmIHRlc3RfY2xpY2tfZGVzZWxlY3RzX290aGVycyhz
ZXNzaW9uKToKKyAgICBzZXNzaW9uLnVybCA9IGlubGluZSgiIiIKKyAgICAgIDxzZWxlY3Q+Cisg
ICAgICAgIDxvcHRpb24+Zmlyc3QKKyAgICAgICAgPG9wdGlvbj5zZWNvbmQKKyAgICAgICAgPG9w
dGlvbj50aGlyZAorICAgICAgPC9zZWxlY3Q+IiIiKQorICAgIG9wdGlvbnMgPSBzZXNzaW9uLmZp
bmQuY3NzKCJvcHRpb24iKQorCisgICAgb3B0aW9uc1swXS5jbGljaygpCisgICAgYXNzZXJ0IG9w
dGlvbnNbMF0uc2VsZWN0ZWQKKyAgICBvcHRpb25zWzFdLmNsaWNrKCkKKyAgICBhc3NlcnQgb3B0
aW9uc1sxXS5zZWxlY3RlZAorICAgIG9wdGlvbnNbMl0uY2xpY2soKQorICAgIGFzc2VydCBvcHRp
b25zWzJdLnNlbGVjdGVkCisgICAgb3B0aW9uc1swXS5jbGljaygpCisgICAgYXNzZXJ0IG9wdGlv
bnNbMF0uc2VsZWN0ZWQKKworCitkZWYgdGVzdF9jbGlja19tdWx0aXBsZV9kb2VzX25vdF9kZXNl
bGVjdF9vdGhlcnMoc2Vzc2lvbik6CisgICAgc2Vzc2lvbi51cmwgPSBpbmxpbmUoIiIiCisgICAg
ICA8c2VsZWN0IG11bHRpcGxlPgorICAgICAgICA8b3B0aW9uPmZpcnN0CisgICAgICAgIDxvcHRp
b24+c2Vjb25kCisgICAgICAgIDxvcHRpb24+dGhpcmQKKyAgICAgIDwvc2VsZWN0PiIiIikKKyAg
ICBvcHRpb25zID0gc2Vzc2lvbi5maW5kLmNzcygib3B0aW9uIikKKworICAgIG9wdGlvbnNbMF0u
Y2xpY2soKQorICAgIGFzc2VydCBvcHRpb25zWzBdLnNlbGVjdGVkCisgICAgb3B0aW9uc1sxXS5j
bGljaygpCisgICAgYXNzZXJ0IG9wdGlvbnNbMF0uc2VsZWN0ZWQKKyAgICBhc3NlcnQgb3B0aW9u
c1sxXS5zZWxlY3RlZAorICAgIG9wdGlvbnNbMl0uY2xpY2soKQorICAgIGFzc2VydCBvcHRpb25z
WzBdLnNlbGVjdGVkCisgICAgYXNzZXJ0IG9wdGlvbnNbMV0uc2VsZWN0ZWQKKyAgICBhc3NlcnQg
b3B0aW9uc1syXS5zZWxlY3RlZAorCisKK2RlZiB0ZXN0X2NsaWNrX3NlbGVjdGVkX29wdGlvbihz
ZXNzaW9uKToKKyAgICBzZXNzaW9uLnVybCA9IGlubGluZSgiIiIKKyAgICAgIDxzZWxlY3Q+Cisg
ICAgICAgIDxvcHRpb24+Zmlyc3QKKyAgICAgICAgPG9wdGlvbj5zZWNvbmQKKyAgICAgIDwvc2Vs
ZWN0PiIiIikKKyAgICBvcHRpb25zID0gc2Vzc2lvbi5maW5kLmNzcygib3B0aW9uIikKKworICAg
ICMgRmlyc3QgPG9wdGlvbj4gaXMgc2VsZWN0ZWQgaW4gZHJvcGRvd24KKyAgICBhc3NlcnQgb3B0
aW9uc1swXS5zZWxlY3RlZAorICAgIGFzc2VydCBub3Qgb3B0aW9uc1sxXS5zZWxlY3RlZAorCisg
ICAgb3B0aW9uc1sxXS5jbGljaygpCisgICAgYXNzZXJ0IG9wdGlvbnNbMV0uc2VsZWN0ZWQKKyAg
ICBvcHRpb25zWzFdLmNsaWNrKCkKKyAgICBhc3NlcnQgb3B0aW9uc1sxXS5zZWxlY3RlZAorCisK
K2RlZiB0ZXN0X2NsaWNrX3NlbGVjdGVkX211bHRpcGxlX29wdGlvbihzZXNzaW9uKToKKyAgICBz
ZXNzaW9uLnVybCA9IGlubGluZSgiIiIKKyAgICAgIDxzZWxlY3QgbXVsdGlwbGU+CisgICAgICAg
IDxvcHRpb24+Zmlyc3QKKyAgICAgICAgPG9wdGlvbj5zZWNvbmQKKyAgICAgIDwvc2VsZWN0PiIi
IikKKyAgICBvcHRpb25zID0gc2Vzc2lvbi5maW5kLmNzcygib3B0aW9uIikKKworICAgICMgTm8g
aW1wbGljaXRseSBzZWxlY3RlZCA8b3B0aW9uPiBpbiA8c2VsZWN0IG11bHRpcGxlPgorICAgIGFz
c2VydCBub3Qgb3B0aW9uc1swXS5zZWxlY3RlZAorICAgIGFzc2VydCBub3Qgb3B0aW9uc1sxXS5z
ZWxlY3RlZAorCisgICAgb3B0aW9uc1swXS5jbGljaygpCisgICAgYXNzZXJ0IG9wdGlvbnNbMF0u
c2VsZWN0ZWQKKyAgICBhc3NlcnQgbm90IG9wdGlvbnNbMV0uc2VsZWN0ZWQKKworICAgICMgU2Vj
b25kIGNsaWNrIGluIDxzZWxlY3QgbXVsdGlwbGU+IGRlc2VsZWN0cworICAgIG9wdGlvbnNbMF0u
Y2xpY2soKQorICAgIGFzc2VydCBub3Qgb3B0aW9uc1swXS5zZWxlY3RlZAorICAgIGFzc2VydCBu
b3Qgb3B0aW9uc1sxXS5zZWxlY3RlZAorCisKK2RlZiB0ZXN0X291dF9vZl92aWV3X2Ryb3Bkb3du
KHNlc3Npb24pOgorICAgIHNlc3Npb24udXJsID0gaW5saW5lKCIiIgorICAgICAgPHNlbGVjdD4K
KyAgICAgICAgPG9wdGlvbj4xCisgICAgICAgIDxvcHRpb24+MgorICAgICAgICA8b3B0aW9uPjMK
KyAgICAgICAgPG9wdGlvbj40CisgICAgICAgIDxvcHRpb24+NQorICAgICAgICA8b3B0aW9uPjYK
KyAgICAgICAgPG9wdGlvbj43CisgICAgICAgIDxvcHRpb24+OAorICAgICAgICA8b3B0aW9uPjkK
KyAgICAgICAgPG9wdGlvbj4xMAorICAgICAgICA8b3B0aW9uPjExCisgICAgICAgIDxvcHRpb24+
MTIKKyAgICAgICAgPG9wdGlvbj4xMworICAgICAgICA8b3B0aW9uPjE0CisgICAgICAgIDxvcHRp
b24+MTUKKyAgICAgICAgPG9wdGlvbj4xNgorICAgICAgICA8b3B0aW9uPjE3CisgICAgICAgIDxv
cHRpb24+MTgKKyAgICAgICAgPG9wdGlvbj4xOQorICAgICAgICA8b3B0aW9uPjIwCisgICAgICA8
L3NlbGVjdD4iIiIpCisgICAgb3B0aW9ucyA9IHNlc3Npb24uZmluZC5jc3MoIm9wdGlvbiIpCisK
KyAgICBvcHRpb25zWzE0XS5jbGljaygpCisgICAgYXNzZXJ0IG9wdGlvbnNbMTRdLnNlbGVjdGVk
CisKKworZGVmIHRlc3Rfb3V0X29mX3ZpZXdfbXVsdGlwbGUoc2Vzc2lvbik6CisgICAgc2Vzc2lv
bi51cmwgPSBpbmxpbmUoIiIiCisgICAgICA8c2VsZWN0IG11bHRpcGxlPgorICAgICAgICA8b3B0
aW9uPjEKKyAgICAgICAgPG9wdGlvbj4yCisgICAgICAgIDxvcHRpb24+MworICAgICAgICA8b3B0
aW9uPjQKKyAgICAgICAgPG9wdGlvbj41CisgICAgICAgIDxvcHRpb24+NgorICAgICAgICA8b3B0
aW9uPjcKKyAgICAgICAgPG9wdGlvbj44CisgICAgICAgIDxvcHRpb24+OQorICAgICAgICA8b3B0
aW9uPjEwCisgICAgICAgIDxvcHRpb24+MTEKKyAgICAgICAgPG9wdGlvbj4xMgorICAgICAgICA8
b3B0aW9uPjEzCisgICAgICAgIDxvcHRpb24+MTQKKyAgICAgICAgPG9wdGlvbj4xNQorICAgICAg
ICA8b3B0aW9uPjE2CisgICAgICAgIDxvcHRpb24+MTcKKyAgICAgICAgPG9wdGlvbj4xOAorICAg
ICAgICA8b3B0aW9uPjE5CisgICAgICAgIDxvcHRpb24+MjAKKyAgICAgIDwvc2VsZWN0PiIiIikK
KyAgICBvcHRpb25zID0gc2Vzc2lvbi5maW5kLmNzcygib3B0aW9uIikKKworICAgIGxhc3Rfb3B0
aW9uID0gb3B0aW9uc1stMV0KKyAgICBsYXN0X29wdGlvbi5jbGljaygpCisgICAgYXNzZXJ0IGxh
c3Rfb3B0aW9uLnNlbGVjdGVkCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViZHJpdmVyL3Rlc3RzL2Z1bGxzY3JlZW5fd2luZG93LnB5IGIvV2ViRHJpdmVyVGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9mdWxsc2NyZWVuX3dpbmRvdy5weQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNjk2YzU3OWMyNjYKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL2Z1bGxz
Y3JlZW5fd2luZG93LnB5CkBAIC0wLDAgKzEsMjA4IEBACisjIE1FVEE6IHRpbWVvdXQ9bG9uZwor
Citmcm9tIHRlc3RzLnN1cHBvcnQuYXNzZXJ0cyBpbXBvcnQgYXNzZXJ0X2Vycm9yLCBhc3NlcnRf
c3VjY2VzcywgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkCitmcm9tIHRlc3RzLnN1cHBvcnQuZml4dHVy
ZXMgaW1wb3J0IGNyZWF0ZV9kaWFsb2cKK2Zyb20gdGVzdHMuc3VwcG9ydC5pbmxpbmUgaW1wb3J0
IGlubGluZQorCisKK2FsZXJ0X2RvYyA9IGlubGluZSgiPHNjcmlwdD53aW5kb3cuYWxlcnQoKTwv
c2NyaXB0PiIpCisKKworZGVmIHJlYWRfZ2xvYmFsKHNlc3Npb24sIG5hbWUpOgorICAgIHJldHVy
biBzZXNzaW9uLmV4ZWN1dGVfc2NyaXB0KCJyZXR1cm4gJXM7IiAlIG5hbWUpCisKKworZGVmIGZ1
bGxzY3JlZW4oc2Vzc2lvbik6CisgICAgcmV0dXJuIHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIlBP
U1QiLCAic2Vzc2lvbi8lcy93aW5kb3cvZnVsbHNjcmVlbiIgJSBzZXNzaW9uLnNlc3Npb25faWQp
CisKKworIyAxMC43LjUgRnVsbHNjcmVlbiBXaW5kb3cKKworCitkZWYgdGVzdF9ub19icm93c2lu
Z19jb250ZXh0KHNlc3Npb24sIGNyZWF0ZV93aW5kb3cpOgorICAgICIiIgorICAgIDEuIElmIHRo
ZSBjdXJyZW50IHRvcC1sZXZlbCBicm93c2luZyBjb250ZXh0IGlzIG5vIGxvbmdlciBvcGVuLAor
ICAgIHJldHVybiBlcnJvciB3aXRoIGVycm9yIGNvZGUgbm8gc3VjaCB3aW5kb3cuCisKKyAgICAi
IiIKKyAgICBzZXNzaW9uLndpbmRvd19oYW5kbGUgPSBjcmVhdGVfd2luZG93KCkKKyAgICBzZXNz
aW9uLmNsb3NlKCkKKyAgICByZXNwb25zZSA9IGZ1bGxzY3JlZW4oc2Vzc2lvbikKKyAgICBhc3Nl
cnRfZXJyb3IocmVzcG9uc2UsICJubyBzdWNoIHdpbmRvdyIpCisKKworZGVmIHRlc3RfaGFuZGxl
X3Byb21wdF9kaXNtaXNzX2FuZF9ub3RpZnkoKToKKyAgICAiIiJUT0RPIiIiCisKKworZGVmIHRl
c3RfaGFuZGxlX3Byb21wdF9hY2NlcHRfYW5kX25vdGlmeSgpOgorICAgICIiIlRPRE8iIiIKKwor
CitkZWYgdGVzdF9oYW5kbGVfcHJvbXB0X2lnbm9yZSgpOgorICAgICIiIlRPRE8iIiIKKworCitk
ZWYgdGVzdF9oYW5kbGVfcHJvbXB0X2FjY2VwdChuZXdfc2Vzc2lvbik6CisgICAgIiIiCisgICAg
Mi4gSGFuZGxlIGFueSB1c2VyIHByb21wdHMgYW5kIHJldHVybiBpdHMgdmFsdWUgaWYgaXQgaXMg
YW4gZXJyb3IuCisKKyAgICBbLi4uXQorCisgICAgSW4gb3JkZXIgdG8gaGFuZGxlIGFueSB1c2Vy
IHByb21wdHMgYSByZW1vdGUgZW5kIG11c3QgdGFrZSB0aGUKKyAgICBmb2xsb3dpbmcgc3RlcHM6
CisKKyAgICAgIFsuLi5dCisKKyAgICAgIDIuIFBlcmZvcm0gdGhlIGZvbGxvd2luZyBzdWJzdGVw
cyBiYXNlZCBvbiB0aGUgY3VycmVudCBzZXNzaW9uJ3MKKyAgICAgIHVzZXIgcHJvbXB0IGhhbmRs
ZXI6CisKKyAgICAgICAgWy4uLl0KKworICAgICAgICAtIGFjY2VwdCBzdGF0ZQorICAgICAgICAg
ICBBY2NlcHQgdGhlIGN1cnJlbnQgdXNlciBwcm9tcHQuCisKKyAgICAiIiIKKyAgICBfLCBzZXNz
aW9uID0gbmV3X3Nlc3Npb24oeyJhbHdheXNNYXRjaCI6IHsidW5oYW5kbGVkUHJvbXB0QmVoYXZp
b3IiOiAiYWNjZXB0In19KQorICAgIHNlc3Npb24udXJsID0gaW5saW5lKCI8dGl0bGU+V0QgZG9j
IHRpdGxlPC90aXRsZT4iKQorICAgIGNyZWF0ZV9kaWFsb2coc2Vzc2lvbikoImFsZXJ0IiwgdGV4
dD0iYWNjZXB0ICMxIiwgcmVzdWx0X3Zhcj0iYWNjZXB0MSIpCisKKyAgICBleHBlY3RlZF90aXRs
ZSA9IHJlYWRfZ2xvYmFsKHNlc3Npb24sICJkb2N1bWVudC50aXRsZSIpCisgICAgcmVzcG9uc2Ug
PSBmdWxsc2NyZWVuKHNlc3Npb24pCisKKyAgICBhc3NlcnRfc3VjY2VzcyhyZXNwb25zZSwgZXhw
ZWN0ZWRfdGl0bGUpCisgICAgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNlc3Npb24sICJhY2NlcHQg
IzEiKQorICAgIGFzc2VydCByZWFkX2dsb2JhbChzZXNzaW9uLCAiYWNjZXB0MSIpID09IE5vbmUK
KworICAgIGV4cGVjdGVkX3RpdGxlID0gcmVhZF9nbG9iYWwoc2Vzc2lvbiwgImRvY3VtZW50LnRp
dGxlIikKKyAgICBjcmVhdGVfZGlhbG9nKHNlc3Npb24pKCJjb25maXJtIiwgdGV4dD0iYWNjZXB0
ICMyIiwgcmVzdWx0X3Zhcj0iYWNjZXB0MiIpCisKKyAgICByZXNwb25zZSA9IGZ1bGxzY3JlZW4o
c2Vzc2lvbikKKworICAgIGFzc2VydF9zdWNjZXNzKHJlc3BvbnNlLCBleHBlY3RlZF90aXRsZSkK
KyAgICBhc3NlcnRfZGlhbG9nX2hhbmRsZWQoc2Vzc2lvbiwgImFjY2VwdCAjMiIpCisgICAgYXNz
ZXJ0IHJlYWRfZ2xvYmFsKHNlc3Npb24sICJhY2NlcHQyIiksIFRydWUKKworICAgIGV4cGVjdGVk
X3RpdGxlID0gcmVhZF9nbG9iYWwoc2Vzc2lvbiwgImRvY3VtZW50LnRpdGxlIikKKyAgICBjcmVh
dGVfZGlhbG9nKHNlc3Npb24pKCJwcm9tcHQiLCB0ZXh0PSJhY2NlcHQgIzMiLCByZXN1bHRfdmFy
PSJhY2NlcHQzIikKKworICAgIHJlc3BvbnNlID0gZnVsbHNjcmVlbihzZXNzaW9uKQorCisgICAg
YXNzZXJ0X3N1Y2Nlc3MocmVzcG9uc2UsIGV4cGVjdGVkX3RpdGxlKQorICAgIGFzc2VydF9kaWFs
b2dfaGFuZGxlZChzZXNzaW9uLCAiYWNjZXB0ICMzIikKKyAgICBhc3NlcnQgcmVhZF9nbG9iYWwo
c2Vzc2lvbiwgImFjY2VwdDMiKSA9PSAiIgorCisKK2RlZiB0ZXN0X2hhbmRsZV9wcm9tcHRfbWlz
c2luZ192YWx1ZShzZXNzaW9uLCBjcmVhdGVfZGlhbG9nKToKKyAgICAiIiIKKyAgICAyLiBIYW5k
bGUgYW55IHVzZXIgcHJvbXB0cyBhbmQgcmV0dXJuIGl0cyB2YWx1ZSBpZiBpdCBpcyBhbiBlcnJv
ci4KKworICAgIFsuLi5dCisKKyAgICBJbiBvcmRlciB0byBoYW5kbGUgYW55IHVzZXIgcHJvbXB0
cyBhIHJlbW90ZSBlbmQgbXVzdCB0YWtlIHRoZQorICAgIGZvbGxvd2luZyBzdGVwczoKKworICAg
ICAgWy4uLl0KKworICAgICAgMi4gUGVyZm9ybSB0aGUgZm9sbG93aW5nIHN1YnN0ZXBzIGJhc2Vk
IG9uIHRoZSBjdXJyZW50IHNlc3Npb24ncworICAgICAgdXNlciBwcm9tcHQgaGFuZGxlcjoKKwor
ICAgICAgICBbLi4uXQorCisgICAgICAgIC0gbWlzc2luZyB2YWx1ZSBkZWZhdWx0IHN0YXRlCisg
ICAgICAgICAgIDEuIERpc21pc3MgdGhlIGN1cnJlbnQgdXNlciBwcm9tcHQuCisgICAgICAgICAg
IDIuIFJldHVybiBlcnJvciB3aXRoIGVycm9yIGNvZGUgdW5leHBlY3RlZCBhbGVydCBvcGVuLgor
CisgICAgIiIiCisgICAgc2Vzc2lvbi51cmwgPSBpbmxpbmUoIjx0aXRsZT5XRCBkb2MgdGl0bGU8
L3RpdGxlPiIpCisgICAgY3JlYXRlX2RpYWxvZygiYWxlcnQiLCB0ZXh0PSJkaXNtaXNzICMxIiwg
cmVzdWx0X3Zhcj0iZGlzbWlzczEiKQorCisgICAgcmVzcG9uc2UgPSBmdWxsc2NyZWVuKHNlc3Np
b24pCisKKyAgICBhc3NlcnRfZXJyb3IocmVzcG9uc2UsICJ1bmV4cGVjdGVkIGFsZXJ0IG9wZW4i
KQorICAgIGFzc2VydF9kaWFsb2dfaGFuZGxlZChzZXNzaW9uLCAiZGlzbWlzcyAjMSIpCisgICAg
YXNzZXJ0IHJlYWRfZ2xvYmFsKHNlc3Npb24sICJhY2NlcHQxIikgPT0gTm9uZQorCisgICAgY3Jl
YXRlX2RpYWxvZygiY29uZmlybSIsIHRleHQ9ImRpc21pc3MgIzIiLCByZXN1bHRfdmFyPSJkaXNt
aXNzMiIpCisKKyAgICByZXNwb25zZSA9IGZ1bGxzY3JlZW4oc2Vzc2lvbikKKworICAgIGFzc2Vy
dF9lcnJvcihyZXNwb25zZSwgInVuZXhwZWN0ZWQgYWxlcnQgb3BlbiIpCisgICAgYXNzZXJ0X2Rp
YWxvZ19oYW5kbGVkKHNlc3Npb24sICJkaXNtaXNzICMyIikKKyAgICBhc3NlcnQgcmVhZF9nbG9i
YWwoc2Vzc2lvbiwgImRpc21pc3MyIikgPT0gRmFsc2UKKworICAgIGNyZWF0ZV9kaWFsb2coInBy
b21wdCIsIHRleHQ9ImRpc21pc3MgIzMiLCByZXN1bHRfdmFyPSJkaXNtaXNzMyIpCisKKyAgICBy
ZXNwb25zZSA9IGZ1bGxzY3JlZW4oc2Vzc2lvbikKKworICAgIGFzc2VydF9lcnJvcihyZXNwb25z
ZSwgInVuZXhwZWN0ZWQgYWxlcnQgb3BlbiIpCisgICAgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNl
c3Npb24sICJkaXNtaXNzICMzIikKKyAgICBhc3NlcnQgcmVhZF9nbG9iYWwoc2Vzc2lvbiwgImRp
c21pc3MzIikgPT0gTm9uZQorCisKK2RlZiB0ZXN0X2Z1bGxzY3JlZW4oc2Vzc2lvbik6CisgICAg
IiIiCisgICAgNC4gQ2FsbCBmdWxsc2NyZWVuIGFuIGVsZW1lbnQgd2l0aCB0aGUgY3VycmVudCB0
b3AtbGV2ZWwgYnJvd3NpbmcKKyAgICBjb250ZXh0J3MgYWN0aXZlIGRvY3VtZW50J3MgZG9jdW1l
bnQgZWxlbWVudC4KKworICAgICIiIgorICAgIHJlc3BvbnNlID0gZnVsbHNjcmVlbihzZXNzaW9u
KQorICAgIGFzc2VydF9zdWNjZXNzKHJlc3BvbnNlKQorICAgIGFzc2VydCBzZXNzaW9uLmV4ZWN1
dGVfc2NyaXB0KCJyZXR1cm4gd2luZG93LmZ1bGxTY3JlZW4iKSBpcyBUcnVlCisKKworZGVmIHRl
c3RfcGF5bG9hZChzZXNzaW9uKToKKyAgICAiIiIKKyAgICA1LiBSZXR1cm4gc3VjY2VzcyB3aXRo
IHRoZSBKU09OIHNlcmlhbGl6YXRpb24gb2YgdGhlIGN1cnJlbnQgdG9wLWxldmVsCisgICAgYnJv
d3NpbmcgY29udGV4dCdzIHdpbmRvdyByZWN0LgorCisgICAgWy4uLl0KKworICAgIEEgdG9wLWxl
dmVsIGJyb3dzaW5nIGNvbnRleHQncyB3aW5kb3cgcmVjdCBpcyBkZWZpbmVkIGFzIGEKKyAgICBk
aWN0aW9uYXJ5IG9mIHRoZSBzY3JlZW5YLCBzY3JlZW5ZLCB3aWR0aCBhbmQgaGVpZ2h0IGF0dHJp
YnV0ZXMgb2YKKyAgICB0aGUgV2luZG93UHJveHkuIEl0cyBKU09OIHJlcHJlc2VudGF0aW9uIGlz
IHRoZSBmb2xsb3dpbmc6CisKKyAgICAieCIKKyAgICAgICAgV2luZG93UHJveHkncyBzY3JlZW5Y
IGF0dHJpYnV0ZS4KKworICAgICJ5IgorICAgICAgICBXaW5kb3dQcm94eSdzIHNjcmVlblkgYXR0
cmlidXRlLgorCisgICAgIndpZHRoIgorICAgICAgICBXaWR0aCBvZiB0aGUgdG9wLWxldmVsIGJy
b3dzaW5nIGNvbnRleHQncyBvdXRlciBkaW1lbnNpb25zLAorICAgICAgICBpbmNsdWRpbmcgYW55
IGJyb3dzZXIgY2hyb21lIGFuZCBleHRlcm5hbGx5IGRyYXduIHdpbmRvdworICAgICAgICBkZWNv
cmF0aW9ucyBpbiBDU1MgcmVmZXJlbmNlIHBpeGVscy4KKworICAgICJoZWlnaHQiCisgICAgICAg
IEhlaWdodCBvZiB0aGUgdG9wLWxldmVsIGJyb3dzaW5nIGNvbnRleHQncyBvdXRlciBkaW1lbnNp
b25zLAorICAgICAgICBpbmNsdWRpbmcgYW55IGJyb3dzZXIgY2hyb21lIGFuZCBleHRlcm5hbGx5
IGRyYXduIHdpbmRvdworICAgICAgICBkZWNvcmF0aW9ucyBpbiBDU1MgcmVmZXJlbmNlIHBpeGVs
cy4KKworICAgICIiIgorICAgIHJlc3BvbnNlID0gZnVsbHNjcmVlbihzZXNzaW9uKQorCisgICAg
IyBzdGVwIDUKKyAgICBhc3NlcnQgcmVzcG9uc2Uuc3RhdHVzID09IDIwMAorICAgIGFzc2VydCBp
c2luc3RhbmNlKHJlc3BvbnNlLmJvZHlbInZhbHVlIl0sIGRpY3QpCisKKyAgICB2YWx1ZSA9IHJl
c3BvbnNlLmJvZHlbInZhbHVlIl0KKyAgICBhc3NlcnQgIndpZHRoIiBpbiB2YWx1ZQorICAgIGFz
c2VydCAiaGVpZ2h0IiBpbiB2YWx1ZQorICAgIGFzc2VydCAieCIgaW4gdmFsdWUKKyAgICBhc3Nl
cnQgInkiIGluIHZhbHVlCisgICAgYXNzZXJ0IGlzaW5zdGFuY2UodmFsdWVbIndpZHRoIl0sIGlu
dCkKKyAgICBhc3NlcnQgaXNpbnN0YW5jZSh2YWx1ZVsiaGVpZ2h0Il0sIGludCkKKyAgICBhc3Nl
cnQgaXNpbnN0YW5jZSh2YWx1ZVsieCJdLCBpbnQpCisgICAgYXNzZXJ0IGlzaW5zdGFuY2UodmFs
dWVbInkiXSwgaW50KQorCisKK2RlZiB0ZXN0X2Z1bGxzY3JlZW5fdHdpY2VfaXNfaWRlbXBvdGVu
dChzZXNzaW9uKToKKyAgICBhc3NlcnQgc2Vzc2lvbi5leGVjdXRlX3NjcmlwdCgicmV0dXJuIHdp
bmRvdy5mdWxsU2NyZWVuIikgaXMgRmFsc2UKKworICAgIGZpcnN0X3Jlc3BvbnNlID0gZnVsbHNj
cmVlbihzZXNzaW9uKQorICAgIGFzc2VydF9zdWNjZXNzKGZpcnN0X3Jlc3BvbnNlKQorICAgIGFz
c2VydCBzZXNzaW9uLmV4ZWN1dGVfc2NyaXB0KCJyZXR1cm4gd2luZG93LmZ1bGxTY3JlZW4iKSBp
cyBUcnVlCisKKyAgICBzZWNvbmRfcmVzcG9uc2UgPSBmdWxsc2NyZWVuKHNlc3Npb24pCisgICAg
YXNzZXJ0X3N1Y2Nlc3Moc2Vjb25kX3Jlc3BvbnNlKQorICAgIGFzc2VydCBzZXNzaW9uLmV4ZWN1
dGVfc2NyaXB0KCJyZXR1cm4gd2luZG93LmZ1bGxTY3JlZW4iKSBpcyBUcnVlCmRpZmYgLS1naXQg
YS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL2dldF93aW5kb3df
cmVjdC5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvZ2V0
X3dpbmRvd19yZWN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4y
MGYzYjU0YzA5ZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWJkcml2ZXIvdGVzdHMvZ2V0X3dpbmRvd19yZWN0LnB5CkBAIC0wLDAgKzEsMTYxIEBACitm
cm9tIHRlc3RzLnN1cHBvcnQuYXNzZXJ0cyBpbXBvcnQgYXNzZXJ0X2Vycm9yLCBhc3NlcnRfZGlh
bG9nX2hhbmRsZWQsIGFzc2VydF9zdWNjZXNzCitmcm9tIHRlc3RzLnN1cHBvcnQuZml4dHVyZXMg
aW1wb3J0IGNyZWF0ZV9kaWFsb2cKK2Zyb20gdGVzdHMuc3VwcG9ydC5pbmxpbmUgaW1wb3J0IGlu
bGluZQorCisKK2FsZXJ0X2RvYyA9IGlubGluZSgiPHNjcmlwdD53aW5kb3cuYWxlcnQoKTwvc2Ny
aXB0PiIpCisKKworZGVmIGdldF93aW5kb3dfcmVjdChzZXNzaW9uKToKKyAgICByZXR1cm4gc2Vz
c2lvbi50cmFuc3BvcnQuc2VuZCgiUE9TVCIsICJzZXNzaW9uLyVzL3dpbmRvdy9yZWN0IiAlIHNl
c3Npb24uc2Vzc2lvbl9pZCkKKworCisjIDEwLjcuMSBHZXQgV2luZG93IFJlY3QKKworCitkZWYg
dGVzdF9ub19icm93c2luZ19jb250ZXh0KHNlc3Npb24sIGNyZWF0ZV93aW5kb3cpOgorICAgICIi
IgorICAgIDEuIElmIHRoZSBjdXJyZW50IHRvcC1sZXZlbCBicm93c2luZyBjb250ZXh0IGlzIG5v
IGxvbmdlciBvcGVuLAorICAgIHJldHVybiBlcnJvciB3aXRoIGVycm9yIGNvZGUgbm8gc3VjaCB3
aW5kb3cuCisKKyAgICAiIiIKKyAgICBzZXNzaW9uLndpbmRvd19oYW5kbGUgPSBjcmVhdGVfd2lu
ZG93KCkKKyAgICBzZXNzaW9uLmNsb3NlKCkKKyAgICByZXNwb25zZSA9IGdldF93aW5kb3dfcmVj
dChzZXNzaW9uKQorICAgIGFzc2VydF9lcnJvcihyZXNwb25zZSwgIm5vIHN1Y2ggd2luZG93IikK
KworCitkZWYgdGVzdF9oYW5kbGVfcHJvbXB0X2Rpc21pc3NfYW5kX25vdGlmeSgpOgorICAgICIi
IlRPRE8iIiIKKworCitkZWYgdGVzdF9oYW5kbGVfcHJvbXB0X2FjY2VwdF9hbmRfbm90aWZ5KCk6
CisgICAgIiIiVE9ETyIiIgorCisKK2RlZiB0ZXN0X2hhbmRsZV9wcm9tcHRfaWdub3JlKCk6Cisg
ICAgIiIiVE9ETyIiIgorCisKK2RlZiB0ZXN0X2hhbmRsZV9wcm9tcHRfYWNjZXB0KG5ld19zZXNz
aW9uKToKKyAgICAiIiIKKyAgICAyLiBIYW5kbGUgYW55IHVzZXIgcHJvbXB0cyBhbmQgcmV0dXJu
IGl0cyB2YWx1ZSBpZiBpdCBpcyBhbiBlcnJvci4KKworICAgIFsuLi5dCisKKyAgICBJbiBvcmRl
ciB0byBoYW5kbGUgYW55IHVzZXIgcHJvbXB0cyBhIHJlbW90ZSBlbmQgbXVzdCB0YWtlIHRoZQor
ICAgIGZvbGxvd2luZyBzdGVwczoKKworICAgICAgWy4uLl0KKworICAgICAgMi4gUGVyZm9ybSB0
aGUgZm9sbG93aW5nIHN1YnN0ZXBzIGJhc2VkIG9uIHRoZSBjdXJyZW50IHNlc3Npb24ncworICAg
ICAgdXNlciBwcm9tcHQgaGFuZGxlcjoKKworICAgICAgICBbLi4uXQorCisgICAgICAgIC0gYWNj
ZXB0IHN0YXRlCisgICAgICAgICAgIEFjY2VwdCB0aGUgY3VycmVudCB1c2VyIHByb21wdC4KKwor
ICAgICIiIgorICAgIF8sIHNlc3Npb24gPSBuZXdfc2Vzc2lvbih7ImFsd2F5c01hdGNoIjogeyJ1
bmhhbmRsZWRQcm9tcHRCZWhhdmlvciI6ICJhY2NlcHQifX0pCisgICAgc2Vzc2lvbi51cmwgPSBp
bmxpbmUoIjx0aXRsZT5XRCBkb2MgdGl0bGU8L3RpdGxlPiIpCisKKyAgICBjcmVhdGVfZGlhbG9n
KHNlc3Npb24pKCJhbGVydCIsIHRleHQ9ImRpc21pc3MgIzEiLCByZXN1bHRfdmFyPSJkaXNtaXNz
MSIpCisgICAgcmVzcG9uc2UgPSBnZXRfd2luZG93X3JlY3Qoc2Vzc2lvbikKKyAgICBhc3NlcnQg
cmVzcG9uc2Uuc3RhdHVzID09IDIwMAorICAgIGFzc2VydF9kaWFsb2dfaGFuZGxlZChzZXNzaW9u
LCAiZGlzbWlzcyAjMSIpCisKKyAgICBjcmVhdGVfZGlhbG9nKHNlc3Npb24pKCJjb25maXJtIiwg
dGV4dD0iZGlzbWlzcyAjMiIsIHJlc3VsdF92YXI9ImRpc21pc3MyIikKKyAgICByZXNwb25zZSA9
IGdldF93aW5kb3dfcmVjdChzZXNzaW9uKQorICAgIGFzc2VydCByZXNwb25zZS5zdGF0dXMgPT0g
MjAwCisgICAgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNlc3Npb24sICJkaXNtaXNzICMyIikKKwor
ICAgIGNyZWF0ZV9kaWFsb2coc2Vzc2lvbikoInByb21wdCIsIHRleHQ9ImRpc21pc3MgIzMiLCBy
ZXN1bHRfdmFyPSJkaXNtaXNzMyIpCisgICAgcmVzcG9uc2UgPSBnZXRfd2luZG93X3JlY3Qoc2Vz
c2lvbikKKyAgICBhc3NlcnQgcmVzcG9uc2Uuc3RhdHVzID09IDIwMAorICAgIGFzc2VydF9kaWFs
b2dfaGFuZGxlZChzZXNzaW9uLCAiZGlzbWlzcyAjMyIpCisKKworZGVmIHRlc3RfaGFuZGxlX3By
b21wdF9taXNzaW5nX3ZhbHVlKHNlc3Npb24sIGNyZWF0ZV9kaWFsb2cpOgorICAgICIiIgorICAg
IDIuIEhhbmRsZSBhbnkgdXNlciBwcm9tcHRzIGFuZCByZXR1cm4gaXRzIHZhbHVlIGlmIGl0IGlz
IGFuIGVycm9yLgorCisgICAgWy4uLl0KKworICAgIEluIG9yZGVyIHRvIGhhbmRsZSBhbnkgdXNl
ciBwcm9tcHRzIGEgcmVtb3RlIGVuZCBtdXN0IHRha2UgdGhlCisgICAgZm9sbG93aW5nIHN0ZXBz
OgorCisgICAgICBbLi4uXQorCisgICAgICAyLiBQZXJmb3JtIHRoZSBmb2xsb3dpbmcgc3Vic3Rl
cHMgYmFzZWQgb24gdGhlIGN1cnJlbnQgc2Vzc2lvbidzCisgICAgICB1c2VyIHByb21wdCBoYW5k
bGVyOgorCisgICAgICAgIFsuLi5dCisKKyAgICAgICAgLSBtaXNzaW5nIHZhbHVlIGRlZmF1bHQg
c3RhdGUKKyAgICAgICAgICAgMS4gRGlzbWlzcyB0aGUgY3VycmVudCB1c2VyIHByb21wdC4KKyAg
ICAgICAgICAgMi4gUmV0dXJuIGVycm9yIHdpdGggZXJyb3IgY29kZSB1bmV4cGVjdGVkIGFsZXJ0
IG9wZW4uCisKKyAgICAiIiIKKyAgICBzZXNzaW9uLnVybCA9IGlubGluZSgiPHRpdGxlPldEIGRv
YyB0aXRsZTwvdGl0bGU+IikKKyAgICBjcmVhdGVfZGlhbG9nKCJhbGVydCIsIHRleHQ9ImRpc21p
c3MgIzEiLCByZXN1bHRfdmFyPSJkaXNtaXNzMSIpCisKKyAgICByZXNwb25zZSA9IGdldF93aW5k
b3dfcmVjdChzZXNzaW9uKQorCisgICAgYXNzZXJ0X2Vycm9yKHJlc3VsdCwgInVuZXhwZWN0ZWQg
YWxlcnQgb3BlbiIpCisgICAgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNlc3Npb24sICJkaXNtaXNz
ICMxIikKKworICAgIGNyZWF0ZV9kaWFsb2coImNvbmZpcm0iLCB0ZXh0PSJkaXNtaXNzICMyIiwg
cmVzdWx0X3Zhcj0iZGlzbWlzczIiKQorCisgICAgcmVzcG9uc2UgPSBnZXRfd2luZG93X3JlY3Qo
c2Vzc2lvbikKKyAgICBhc3NlcnRfZXJyb3IocmVzcG9uc2UsICJ1bmV4cGVjdGVkIGFsZXJ0IG9w
ZW4iKQorICAgIGFzc2VydF9kaWFsb2dfaGFuZGxlZChzZXNzaW9uLCAiZGlzbWlzcyAjMiIpCisK
KyAgICBjcmVhdGVfZGlhbG9nKCJwcm9tcHQiLCB0ZXh0PSJkaXNtaXNzICMzIiwgcmVzdWx0X3Zh
cj0iZGlzbWlzczMiKQorCisgICAgcmVzcG9uc2UgPSBnZXRfd2luZG93X3JlY3Qoc2Vzc2lvbikK
KyAgICBhc3NlcnRfZXJyb3IocmVzcG9uc2UsICJ1bmV4cGVjdGVkIGFsZXJ0IG9wZW4iKQorICAg
IGFzc2VydF9kaWFsb2dfaGFuZGxlZChzZXNzaW9uLCAiZGlzbWlzcyAjMyIpCisKKworZGVmIHRl
c3RfcGF5bG9hZChzZXNzaW9uKToKKyAgICAiIiIKKyAgICAzLiBSZXR1cm4gc3VjY2VzcyB3aXRo
IHRoZSBKU09OIHNlcmlhbGl6YXRpb24gb2YgdGhlIGN1cnJlbnQgdG9wLWxldmVsCisgICAgYnJv
d3NpbmcgY29udGV4dCdzIHdpbmRvdyByZWN0LgorCisgICAgWy4uLl0KKworICAgIEEgdG9wLWxl
dmVsIGJyb3dzaW5nIGNvbnRleHQncyB3aW5kb3cgcmVjdCBpcyBkZWZpbmVkIGFzIGEKKyAgICBk
aWN0aW9uYXJ5IG9mIHRoZSBzY3JlZW5YLCBzY3JlZW5ZLCB3aWR0aCBhbmQgaGVpZ2h0IGF0dHJp
YnV0ZXMgb2YKKyAgICB0aGUgV2luZG93UHJveHkuIEl0cyBKU09OIHJlcHJlc2VudGF0aW9uIGlz
IHRoZSBmb2xsb3dpbmc6CisKKyAgICAieCIKKyAgICAgICAgV2luZG93UHJveHkncyBzY3JlZW5Y
IGF0dHJpYnV0ZS4KKworICAgICJ5IgorICAgICAgICBXaW5kb3dQcm94eSdzIHNjcmVlblkgYXR0
cmlidXRlLgorCisgICAgIndpZHRoIgorICAgICAgICBXaWR0aCBvZiB0aGUgdG9wLWxldmVsIGJy
b3dzaW5nIGNvbnRleHQncyBvdXRlciBkaW1lbnNpb25zLAorICAgICAgICBpbmNsdWRpbmcgYW55
IGJyb3dzZXIgY2hyb21lIGFuZCBleHRlcm5hbGx5IGRyYXduIHdpbmRvdworICAgICAgICBkZWNv
cmF0aW9ucyBpbiBDU1MgcmVmZXJlbmNlIHBpeGVscy4KKworICAgICJoZWlnaHQiCisgICAgICAg
IEhlaWdodCBvZiB0aGUgdG9wLWxldmVsIGJyb3dzaW5nIGNvbnRleHQncyBvdXRlciBkaW1lbnNp
b25zLAorICAgICAgICBpbmNsdWRpbmcgYW55IGJyb3dzZXIgY2hyb21lIGFuZCBleHRlcm5hbGx5
IGRyYXduIHdpbmRvdworICAgICAgICBkZWNvcmF0aW9ucyBpbiBDU1MgcmVmZXJlbmNlIHBpeGVs
cy4KKworICAgICIiIgorICAgIHJlc3BvbnNlID0gZ2V0X3dpbmRvd19yZWN0KHNlc3Npb24pCisK
KyAgICBhc3NlcnQgcmVzcG9uc2Uuc3RhdHVzID09IDIwMAorICAgIGFzc2VydCBpc2luc3RhbmNl
KHJlc3BvbnNlLmJvZHlbInZhbHVlIl0sIGRpY3QpCisgICAgdmFsdWUgPSByZXNwb25zZS5ib2R5
WyJ2YWx1ZSJdCisgICAgYXNzZXJ0ICJ3aWR0aCIgaW4gdmFsdWUKKyAgICBhc3NlcnQgImhlaWdo
dCIgaW4gdmFsdWUKKyAgICBhc3NlcnQgIngiIGluIHZhbHVlCisgICAgYXNzZXJ0ICJ5IiBpbiB2
YWx1ZQorICAgIGFzc2VydCBpc2luc3RhbmNlKHZhbHVlWyJ3aWR0aCJdLCBpbnQpCisgICAgYXNz
ZXJ0IGlzaW5zdGFuY2UodmFsdWVbImhlaWdodCJdLCBpbnQpCisgICAgYXNzZXJ0IGlzaW5zdGFu
Y2UodmFsdWVbIngiXSwgaW50KQorICAgIGFzc2VydCBpc2luc3RhbmNlKHZhbHVlWyJ5Il0sIGlu
dCkKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVz
dHMvaW50ZXJhY3Rpb24vc2VuZF9rZXlzX2NvbnRlbnRfZWRpdGFibGUucHkgYi9XZWJEcml2ZXJU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL2ludGVyYWN0aW9uL3NlbmRfa2V5c19j
b250ZW50X2VkaXRhYmxlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li5hNGJiYThlNTM0ZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVk
L3czYy93ZWJkcml2ZXIvdGVzdHMvaW50ZXJhY3Rpb24vc2VuZF9rZXlzX2NvbnRlbnRfZWRpdGFi
bGUucHkKQEAgLTAsMCArMSwyMyBAQAoraW1wb3J0IHB5dGVzdAorCitmcm9tIHRlc3RzLnN1cHBv
cnQuaW5saW5lIGltcG9ydCBpbmxpbmUKKworCitkZWYgdGVzdF9zZXRzX2luc2VydGlvbl9wb2lu
dF90b19lbmQoc2Vzc2lvbik6CisgICAgc2Vzc2lvbi51cmwgPSBpbmxpbmUoJzxkaXYgY29udGVu
dGVkaXRhYmxlPXRydWU+SGVsbG8sPC9kaXY+JykKKyAgICBpbnB1dCA9IHNlc3Npb24uZmluZC5j
c3MoImRpdiIsIGFsbD1GYWxzZSkKKyAgICBpbnB1dC5zZW5kX2tleXMoJyB3b3JsZCEnKQorICAg
IHRleHQgPSBzZXNzaW9uLmV4ZWN1dGVfc2NyaXB0KCdyZXR1cm4gYXJndW1lbnRzWzBdLmlubmVy
VGV4dCcsIGFyZ3M9W2lucHV0XSkKKyAgICBhc3NlcnQgIkhlbGxvLCB3b3JsZCEiID09IHRleHQu
c3RyaXAoKQorCisKKyMgMTIuIExldCBjdXJyZW50IHRleHQgbGVuZ3RoIGJlIHRoZSBlbGVtZW50
4oCZcyBsZW5ndGguCisjCisjIDEzLiBTZXQgdGhlIHRleHQgaW5zZXJ0aW9uIGNhcmV0IHVzaW5n
IHNldCBzZWxlY3Rpb24gcmFuZ2UgdXNpbmcgY3VycmVudAorIyAgICAgdGV4dCBsZW5ndGggZm9y
IGJvdGggdGhlIHN0YXJ0IGFuZCBlbmQgcGFyYW1ldGVycy4KK2RlZiB0ZXN0X3NldHNfaW5zZXJ0
aW9uX3BvaW50X3RvX2FmdGVyX2xhc3RfdGV4dF9ub2RlKHNlc3Npb24pOgorICAgIHNlc3Npb24u
dXJsID0gaW5saW5lKCc8ZGl2IGNvbnRlbnRlZGl0YWJsZT10cnVlPkhlbDxzcGFuPmxvPC9zcGFu
Piw8L2Rpdj4nKQorICAgIGlucHV0ID0gc2Vzc2lvbi5maW5kLmNzcygiZGl2IiwgYWxsPUZhbHNl
KQorICAgIGlucHV0LnNlbmRfa2V5cygiIHdvcmxkISIpCisgICAgdGV4dCA9IHNlc3Npb24uZXhl
Y3V0ZV9zY3JpcHQoInJldHVybiBhcmd1bWVudHNbMF0uaW5uZXJUZXh0IiwgYXJncz1baW5wdXRd
KQorICAgIGFzc2VydCAiSGVsbG8sIHdvcmxkISIgPT0gdGV4dC5zdHJpcCgpCmRpZmYgLS1naXQg
YS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL2ludGVyZmFjZS5o
dG1sIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9pbnRlcmZh
Y2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMTQzYTg2NDNm
M2MKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJp
dmVyL3Rlc3RzL2ludGVyZmFjZS5odG1sCkBAIC0wLDAgKzEsMTUgQEAKKzwhZG9jdHlwZSBodG1s
PgorPG1ldGEgY2hhcnNldD11dGYtOD4KKzx0aXRsZT5XZWJEcml2ZXIgaW50ZXJmYWNlIHRlc3Q8
L3RpdGxlPgorPHNjcmlwdCBzcmM9L3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcz48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPS9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanM+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0vcmVzb3VyY2VzL1dlYklETFBhcnNlci5qcz48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPS9yZXNvdXJjZXMvaWRsaGFybmVzcy5qcz48L3NjcmlwdD4KKworPHNjcmlwdD4KK3ZhciB0
ID0gbmV3IElkbEFycmF5KCk7Cit0LmFkZF91bnRlc3RlZF9pZGxzKCJpbnRlcmZhY2UgTmF2aWdh
dG9yIHt9OyIpOwordC5hZGRfaWRscygicGFydGlhbCBpbnRlcmZhY2UgTmF2aWdhdG9yIHsgcmVh
ZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gd2ViZHJpdmVyOyB9OyIpOwordC5hZGRfb2JqZWN0cyh7
TmF2aWdhdG9yOiBbIm5hdmlnYXRvciJdfSk7Cit0LnRlc3QoKTsKKzwvc2NyaXB0PgpkaWZmIC0t
Z2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9taW5pbWl6
ZV93aW5kb3cucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3Rz
L21pbmltaXplX3dpbmRvdy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MC4uNDk3ZDk2N2Q5ODIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL21pbmltaXplX3dpbmRvdy5weQpAQCAtMCwwICsxLDIyNSBA
QAorZnJvbSB0ZXN0cy5zdXBwb3J0LmFzc2VydHMgaW1wb3J0IGFzc2VydF9lcnJvciwgYXNzZXJ0
X3N1Y2Nlc3MsIGFzc2VydF9kaWFsb2dfaGFuZGxlZAorZnJvbSB0ZXN0cy5zdXBwb3J0LmZpeHR1
cmVzIGltcG9ydCBjcmVhdGVfZGlhbG9nCitmcm9tIHRlc3RzLnN1cHBvcnQuaW5saW5lIGltcG9y
dCBpbmxpbmUKKworCithbGVydF9kb2MgPSBpbmxpbmUoIjxzY3JpcHQ+d2luZG93LmFsZXJ0KCk8
L3NjcmlwdD4iKQorCisKK2RlZiBtaW5pbWl6ZShzZXNzaW9uKToKKyAgICByZXR1cm4gc2Vzc2lv
bi50cmFuc3BvcnQuc2VuZCgiUE9TVCIsICJzZXNzaW9uLyVzL3dpbmRvdy9taW5pbWl6ZSIgJSBz
ZXNzaW9uLnNlc3Npb25faWQpCisKKworIyAxMC43LjQgTWluaW1pemUgV2luZG93CisKKworZGVm
IHRlc3Rfbm9fYnJvd3NpbmdfY29udGV4dChzZXNzaW9uLCBjcmVhdGVfd2luZG93KToKKyAgICAi
IiIKKyAgICAxLiBJZiB0aGUgY3VycmVudCB0b3AtbGV2ZWwgYnJvd3NpbmcgY29udGV4dCBpcyBu
byBsb25nZXIgb3BlbiwKKyAgICByZXR1cm4gZXJyb3Igd2l0aCBlcnJvciBjb2RlIG5vIHN1Y2gg
d2luZG93LgorCisgICAgIiIiCisgICAgc2Vzc2lvbi53aW5kb3dfaGFuZGxlID0gY3JlYXRlX3dp
bmRvdygpCisgICAgc2Vzc2lvbi5jbG9zZSgpCisgICAgcmVzcG9uc2UgPSBtaW5pbWl6ZShzZXNz
aW9uKQorICAgIGFzc2VydF9lcnJvcihyZXNwb25zZSwgIm5vIHN1Y2ggd2luZG93IikKKworCitk
ZWYgdGVzdF9oYW5kbGVfcHJvbXB0X2Rpc21pc3NfYW5kX25vdGlmeSgpOgorICAgICIiIlRPRE8i
IiIKKworCitkZWYgdGVzdF9oYW5kbGVfcHJvbXB0X2FjY2VwdF9hbmRfbm90aWZ5KCk6CisgICAg
IiIiVE9ETyIiIgorCisKK2RlZiB0ZXN0X2hhbmRsZV9wcm9tcHRfaWdub3JlKCk6CisgICAgIiIi
VE9ETyIiIgorCisKK2RlZiB0ZXN0X2hhbmRsZV9wcm9tcHRfYWNjZXB0KG5ld19zZXNzaW9uKToK
KyAgICAiIiIKKyAgICAyLiBIYW5kbGUgYW55IHVzZXIgcHJvbXB0cyBhbmQgcmV0dXJuIGl0cyB2
YWx1ZSBpZiBpdCBpcyBhbiBlcnJvci4KKworICAgIFsuLi5dCisKKyAgICBJbiBvcmRlciB0byBo
YW5kbGUgYW55IHVzZXIgcHJvbXB0cyBhIHJlbW90ZSBlbmQgbXVzdCB0YWtlIHRoZQorICAgIGZv
bGxvd2luZyBzdGVwczoKKworICAgICAgWy4uLl0KKworICAgICAgMi4gUGVyZm9ybSB0aGUgZm9s
bG93aW5nIHN1YnN0ZXBzIGJhc2VkIG9uIHRoZSBjdXJyZW50IHNlc3Npb24ncworICAgICAgdXNl
ciBwcm9tcHQgaGFuZGxlcjoKKworICAgICAgICBbLi4uXQorCisgICAgICAgIC0gYWNjZXB0IHN0
YXRlCisgICAgICAgICAgIEFjY2VwdCB0aGUgY3VycmVudCB1c2VyIHByb21wdC4KKworICAgICIi
IgorICAgIF8sIHNlc3Npb24gPSBuZXdfc2Vzc2lvbih7ImFsd2F5c01hdGNoIjogeyJ1bmhhbmRs
ZWRQcm9tcHRCZWhhdmlvciI6ICJhY2NlcHQifX0pCisgICAgc2Vzc2lvbi51cmwgPSBpbmxpbmUo
Ijx0aXRsZT5XRCBkb2MgdGl0bGU8L3RpdGxlPiIpCisKKyAgICBjcmVhdGVfZGlhbG9nKHNlc3Np
b24pKCJhbGVydCIsIHRleHQ9ImRpc21pc3MgIzEiLCByZXN1bHRfdmFyPSJkaXNtaXNzMSIpCisg
ICAgcmVzcG9uc2UgPSBtaW5pbWl6ZShzZXNzaW9uKQorICAgIGFzc2VydCByZXNwb25zZS5zdGF0
dXMgPT0gMjAwCisgICAgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNlc3Npb24sICJkaXNtaXNzICMx
IikKKworICAgIGNyZWF0ZV9kaWFsb2coc2Vzc2lvbikoImNvbmZpcm0iLCB0ZXh0PSJkaXNtaXNz
ICMyIiwgcmVzdWx0X3Zhcj0iZGlzbWlzczIiKQorICAgIHJlc3BvbnNlID0gbWluaW1pemUoc2Vz
c2lvbikKKyAgICBhc3NlcnQgcmVzcG9uc2Uuc3RhdHVzID09IDIwMAorICAgIGFzc2VydF9kaWFs
b2dfaGFuZGxlZChzZXNzaW9uLCAiZGlzbWlzcyAjMiIpCisKKyAgICBjcmVhdGVfZGlhbG9nKHNl
c3Npb24pKCJwcm9tcHQiLCB0ZXh0PSJkaXNtaXNzICMzIiwgcmVzdWx0X3Zhcj0iZGlzbWlzczMi
KQorICAgIHJlc3BvbnNlID0gbWluaW1pemUoc2Vzc2lvbikKKyAgICBhc3NlcnQgcmVzcG9uc2Uu
c3RhdHVzID09IDIwMAorICAgIGFzc2VydF9kaWFsb2dfaGFuZGxlZChzZXNzaW9uLCAiZGlzbWlz
cyAjMyIpCisKKworZGVmIHRlc3RfaGFuZGxlX3Byb21wdF9taXNzaW5nX3ZhbHVlKHNlc3Npb24s
IGNyZWF0ZV9kaWFsb2cpOgorICAgICIiIgorICAgIDIuIEhhbmRsZSBhbnkgdXNlciBwcm9tcHRz
IGFuZCByZXR1cm4gaXRzIHZhbHVlIGlmIGl0IGlzIGFuIGVycm9yLgorCisgICAgWy4uLl0KKwor
ICAgIEluIG9yZGVyIHRvIGhhbmRsZSBhbnkgdXNlciBwcm9tcHRzIGEgcmVtb3RlIGVuZCBtdXN0
IHRha2UgdGhlCisgICAgZm9sbG93aW5nIHN0ZXBzOgorCisgICAgICBbLi4uXQorCisgICAgICAy
LiBQZXJmb3JtIHRoZSBmb2xsb3dpbmcgc3Vic3RlcHMgYmFzZWQgb24gdGhlIGN1cnJlbnQgc2Vz
c2lvbidzCisgICAgICB1c2VyIHByb21wdCBoYW5kbGVyOgorCisgICAgICAgIFsuLi5dCisKKyAg
ICAgICAgLSBtaXNzaW5nIHZhbHVlIGRlZmF1bHQgc3RhdGUKKyAgICAgICAgICAgMS4gRGlzbWlz
cyB0aGUgY3VycmVudCB1c2VyIHByb21wdC4KKyAgICAgICAgICAgMi4gUmV0dXJuIGVycm9yIHdp
dGggZXJyb3IgY29kZSB1bmV4cGVjdGVkIGFsZXJ0IG9wZW4uCisKKyAgICAiIiIKKyAgICBzZXNz
aW9uLnVybCA9IGlubGluZSgiPHRpdGxlPldEIGRvYyB0aXRsZTwvdGl0bGU+IikKKyAgICBjcmVh
dGVfZGlhbG9nKCJhbGVydCIsIHRleHQ9ImRpc21pc3MgIzEiLCByZXN1bHRfdmFyPSJkaXNtaXNz
MSIpCisKKyAgICByZXNwb25zZSA9IG1pbmltaXplKHNlc3Npb24pCisKKyAgICBhc3NlcnRfZXJy
b3IocmVzcG9uc2UsICJ1bmV4cGVjdGVkIGFsZXJ0IG9wZW4iKQorICAgIGFzc2VydF9kaWFsb2df
aGFuZGxlZChzZXNzaW9uLCAiZGlzbWlzcyAjMSIpCisKKyAgICBjcmVhdGVfZGlhbG9nKCJjb25m
aXJtIiwgdGV4dD0iZGlzbWlzcyAjMiIsIHJlc3VsdF92YXI9ImRpc21pc3MyIikKKworICAgIHJl
c3BvbnNlID0gbWluaW1pemUoc2Vzc2lvbikKKyAgICBhc3NlcnRfZXJyb3IocmVzcG9uc2UsICJ1
bmV4cGVjdGVkIGFsZXJ0IG9wZW4iKQorICAgIGFzc2VydF9kaWFsb2dfaGFuZGxlZChzZXNzaW9u
LCAiZGlzbWlzcyAjMiIpCisKKyAgICBjcmVhdGVfZGlhbG9nKCJwcm9tcHQiLCB0ZXh0PSJkaXNt
aXNzICMzIiwgcmVzdWx0X3Zhcj0iZGlzbWlzczMiKQorCisgICAgcmVzcG9uc2UgPSBtaW5pbWl6
ZShzZXNzaW9uKQorICAgIGFzc2VydF9lcnJvcihyZXNwb25zZSwgInVuZXhwZWN0ZWQgYWxlcnQg
b3BlbiIpCisgICAgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNlc3Npb24sICJkaXNtaXNzICMzIikK
KworCitkZWYgdGVzdF9mdWxseV9leGl0X2Z1bGxzY3JlZW4oc2Vzc2lvbik6CisgICAgIiIiCisg
ICAgNC4gRnVsbHkgZXhpdCBmdWxsc2NyZWVuLgorCisgICAgWy4uLl0KKworICAgIFRvIGZ1bGx5
IGV4aXQgZnVsbHNjcmVlbiBhIGRvY3VtZW50IGRvY3VtZW50LCBydW4gdGhlc2Ugc3RlcHM6CisK
KyAgICAgIDEuIElmIGRvY3VtZW50J3MgZnVsbHNjcmVlbiBlbGVtZW50IGlzIG51bGwsIHRlcm1p
bmF0ZSB0aGVzZSBzdGVwcy4KKworICAgICAgMi4gVW5mdWxsc2NyZWVuIGVsZW1lbnRzIHdob3Nl
IGZ1bGxzY3JlZW4gZmxhZyBpcyBzZXQsIHdpdGhpbgorICAgICAgZG9jdW1lbnQncyB0b3AgbGF5
ZXIsIGV4Y2VwdCBmb3IgZG9jdW1lbnQncyBmdWxsc2NyZWVuIGVsZW1lbnQuCisKKyAgICAgIDMu
IEV4aXQgZnVsbHNjcmVlbiBkb2N1bWVudC4KKworICAgICIiIgorICAgIHNlc3Npb24ud2luZG93
LmZ1bGxzY3JlZW4oKQorICAgIGFzc2VydCBzZXNzaW9uLmV4ZWN1dGVfc2NyaXB0KCJyZXR1cm4g
d2luZG93LmZ1bGxTY3JlZW4iKSBpcyBUcnVlCisKKyAgICByZXNwb25zZSA9IG1pbmltaXplKHNl
c3Npb24pCisgICAgYXNzZXJ0X3N1Y2Nlc3MocmVzcG9uc2UpCisgICAgYXNzZXJ0IHNlc3Npb24u
ZXhlY3V0ZV9zY3JpcHQoInJldHVybiB3aW5kb3cuZnVsbFNjcmVlbiIpIGlzIEZhbHNlCisgICAg
YXNzZXJ0IHNlc3Npb24uZXhlY3V0ZV9zY3JpcHQoInJldHVybiBkb2N1bWVudC5oaWRkZW4iKSBp
cyBUcnVlCisKKworZGVmIHRlc3RfbWluaW1pemUoc2Vzc2lvbik6CisgICAgIiIiCisgICAgNS4g
SWNvbmlmeSB0aGUgd2luZG93LgorCisgICAgWy4uLl0KKworICAgIFRvIGljb25pZnkgdGhlIHdp
bmRvdywgZ2l2ZW4gYW4gb3BlcmF0aW5nIHN5c3RlbSBsZXZlbCB3aW5kb3cgd2l0aCBhbgorICAg
IGFzc29jaWF0ZWQgdG9wLWxldmVsIGJyb3dzaW5nIGNvbnRleHQsIHJ1biBpbXBsZW1lbnRhdGlv
bi1zcGVjaWZpYworICAgIHN0ZXBzIHRvIGljb25pZnksIG1pbmltaXplLCBvciBoaWRlIHRoZSB3
aW5kb3cgZnJvbSB0aGUgdmlzaWJsZQorICAgIHNjcmVlbi4gRG8gbm90IHJldHVybiBmcm9tIHRo
aXMgb3BlcmF0aW9uIHVudGlsIHRoZSB2aXNpYmlsaXR5IHN0YXRlCisgICAgb2YgdGhlIHRvcC1s
ZXZlbCBicm93c2luZyBjb250ZXh0J3MgYWN0aXZlIGRvY3VtZW50IGhhcyByZWFjaGVkIHRoZQor
ICAgIGhpZGRlbiBzdGF0ZSwgb3IgdW50aWwgdGhlIG9wZXJhdGlvbiB0aW1lcyBvdXQuCisKKyAg
ICAiIiIKKyAgICBhc3NlcnQgbm90IHNlc3Npb24uZXhlY3V0ZV9zY3JpcHQoInJldHVybiBkb2N1
bWVudC5oaWRkZW4iKQorCisgICAgcmVzcG9uc2UgPSBtaW5pbWl6ZShzZXNzaW9uKQorICAgIGFz
c2VydF9zdWNjZXNzKHJlc3BvbnNlKQorCisgICAgYXNzZXJ0IHNlc3Npb24uZXhlY3V0ZV9zY3Jp
cHQoInJldHVybiBkb2N1bWVudC5oaWRkZW4iKQorCisKK2RlZiB0ZXN0X3BheWxvYWQoc2Vzc2lv
bik6CisgICAgIiIiCisgICAgNi4gUmV0dXJuIHN1Y2Nlc3Mgd2l0aCB0aGUgSlNPTiBzZXJpYWxp
emF0aW9uIG9mIHRoZSBjdXJyZW50IHRvcC1sZXZlbAorICAgIGJyb3dzaW5nIGNvbnRleHQncyB3
aW5kb3cgcmVjdC4KKworICAgIFsuLi5dCisKKyAgICBBIHRvcC1sZXZlbCBicm93c2luZyBjb250
ZXh0J3Mgd2luZG93IHJlY3QgaXMgZGVmaW5lZCBhcyBhCisgICAgZGljdGlvbmFyeSBvZiB0aGUg
c2NyZWVuWCwgc2NyZWVuWSwgd2lkdGggYW5kIGhlaWdodCBhdHRyaWJ1dGVzIG9mCisgICAgdGhl
IFdpbmRvd1Byb3h5LiBJdHMgSlNPTiByZXByZXNlbnRhdGlvbiBpcyB0aGUgZm9sbG93aW5nOgor
CisgICAgIngiCisgICAgICAgIFdpbmRvd1Byb3h5J3Mgc2NyZWVuWCBhdHRyaWJ1dGUuCisKKyAg
ICAieSIKKyAgICAgICAgV2luZG93UHJveHkncyBzY3JlZW5ZIGF0dHJpYnV0ZS4KKworICAgICJ3
aWR0aCIKKyAgICAgICAgV2lkdGggb2YgdGhlIHRvcC1sZXZlbCBicm93c2luZyBjb250ZXh0J3Mg
b3V0ZXIgZGltZW5zaW9ucywKKyAgICAgICAgaW5jbHVkaW5nIGFueSBicm93c2VyIGNocm9tZSBh
bmQgZXh0ZXJuYWxseSBkcmF3biB3aW5kb3cKKyAgICAgICAgZGVjb3JhdGlvbnMgaW4gQ1NTIHJl
ZmVyZW5jZSBwaXhlbHMuCisKKyAgICAiaGVpZ2h0IgorICAgICAgICBIZWlnaHQgb2YgdGhlIHRv
cC1sZXZlbCBicm93c2luZyBjb250ZXh0J3Mgb3V0ZXIgZGltZW5zaW9ucywKKyAgICAgICAgaW5j
bHVkaW5nIGFueSBicm93c2VyIGNocm9tZSBhbmQgZXh0ZXJuYWxseSBkcmF3biB3aW5kb3cKKyAg
ICAgICAgZGVjb3JhdGlvbnMgaW4gQ1NTIHJlZmVyZW5jZSBwaXhlbHMuCisKKyAgICAiIiIKKyAg
ICBhc3NlcnQgbm90IHNlc3Npb24uZXhlY3V0ZV9zY3JpcHQoInJldHVybiBkb2N1bWVudC5oaWRk
ZW4iKQorCisgICAgcmVzcG9uc2UgPSBtaW5pbWl6ZShzZXNzaW9uKQorCisgICAgYXNzZXJ0IHJl
c3BvbnNlLnN0YXR1cyA9PSAyMDAKKyAgICBhc3NlcnQgaXNpbnN0YW5jZShyZXNwb25zZS5ib2R5
WyJ2YWx1ZSJdLCBkaWN0KQorCisgICAgdmFsdWUgPSByZXNwb25zZS5ib2R5WyJ2YWx1ZSJdCisg
ICAgYXNzZXJ0ICJ3aWR0aCIgaW4gdmFsdWUKKyAgICBhc3NlcnQgImhlaWdodCIgaW4gdmFsdWUK
KyAgICBhc3NlcnQgIngiIGluIHZhbHVlCisgICAgYXNzZXJ0ICJ5IiBpbiB2YWx1ZQorICAgIGFz
c2VydCBpc2luc3RhbmNlKHZhbHVlWyJ3aWR0aCJdLCBpbnQpCisgICAgYXNzZXJ0IGlzaW5zdGFu
Y2UodmFsdWVbImhlaWdodCJdLCBpbnQpCisgICAgYXNzZXJ0IGlzaW5zdGFuY2UodmFsdWVbIngi
XSwgaW50KQorICAgIGFzc2VydCBpc2luc3RhbmNlKHZhbHVlWyJ5Il0sIGludCkKKworICAgIGFz
c2VydCBzZXNzaW9uLmV4ZWN1dGVfc2NyaXB0KCJyZXR1cm4gZG9jdW1lbnQuaGlkZGVuIikKKwor
CitkZWYgdGVzdF9taW5pbWl6ZV90d2ljZV9pc19pZGVtcG90ZW50KHNlc3Npb24pOgorICAgIGFz
c2VydCBub3Qgc2Vzc2lvbi5leGVjdXRlX3NjcmlwdCgicmV0dXJuIGRvY3VtZW50LmhpZGRlbiIp
CisKKyAgICBmaXJzdF9yZXNwb25zZSA9IG1pbmltaXplKHNlc3Npb24pCisgICAgYXNzZXJ0X3N1
Y2Nlc3MoZmlyc3RfcmVzcG9uc2UpCisgICAgYXNzZXJ0IHNlc3Npb24uZXhlY3V0ZV9zY3JpcHQo
InJldHVybiBkb2N1bWVudC5oaWRkZW4iKQorCisgICAgc2Vjb25kX3Jlc3BvbnNlID0gbWluaW1p
emUoc2Vzc2lvbikKKyAgICBhc3NlcnRfc3VjY2VzcyhzZWNvbmRfcmVzcG9uc2UpCisgICAgYXNz
ZXJ0IHNlc3Npb24uZXhlY3V0ZV9zY3JpcHQoInJldHVybiBkb2N1bWVudC5oaWRkZW4iKQpkaWZm
IC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9uYXZp
Z2F0aW9uL2N1cnJlbnRfdXJsLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRy
aXZlci90ZXN0cy9uYXZpZ2F0aW9uL2N1cnJlbnRfdXJsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwLi40NWU0NjJmYjhlMQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRy
aXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvbmF2aWdhdGlvbi9jdXJyZW50
X3VybC5weQpAQCAtMCwwICsxLDEwMiBAQAoraW1wb3J0IGpzb24KK2ltcG9ydCBweXRlc3QKK2lt
cG9ydCB0eXBlcworCitmcm9tIHRlc3RzLnN1cHBvcnQuaW5saW5lIGltcG9ydCBpbmxpbmUKK2Zy
b20gdGVzdHMuc3VwcG9ydC5hc3NlcnRzIGltcG9ydCBhc3NlcnRfZXJyb3IsIGFzc2VydF9zdWNj
ZXNzCisKK2FsZXJ0X2RvYyA9IGlubGluZSgiPHNjcmlwdD53aW5kb3cuYWxlcnQoKTwvc2NyaXB0
PiIpCitmcmFtZV9kb2MgPSBpbmxpbmUoIjxwPmZyYW1lIikKK29uZV9mcmFtZV9kb2MgPSBpbmxp
bmUoIjxpZnJhbWUgc3JjPSclcyc+PC9pZnJhbWU+IiAlIGZyYW1lX2RvYykKK3R3b19mcmFtZXNf
ZG9jID0gaW5saW5lKCI8aWZyYW1lIHNyYz0nJXMnPjwvaWZyYW1lPiIgJSBvbmVfZnJhbWVfZG9j
KQorCisKKyMgVE9ETyhhdG8pOiA3LjEgR2V0CisKKworZGVmIHRlc3RfZ2V0X2N1cnJlbnRfdXJs
X25vX2Jyb3dzaW5nX2NvbnRleHQoc2Vzc2lvbiwgY3JlYXRlX3dpbmRvdyk6CisgICAgIyA3LjIg
c3RlcCAxCisgICAgc2Vzc2lvbi53aW5kb3dfaGFuZGxlID0gY3JlYXRlX3dpbmRvdygpCisgICAg
c2Vzc2lvbi5jbG9zZSgpCisKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJH
RVQiLCAic2Vzc2lvbi8lcy91cmwiICUgc2Vzc2lvbi5zZXNzaW9uX2lkKQorCisgICAgYXNzZXJ0
X2Vycm9yKHJlc3VsdCwgIm5vIHN1Y2ggd2luZG93IikKKworCitkZWYgdGVzdF9nZXRfY3VycmVu
dF91cmxfYWxlcnRfcHJvbXB0KHNlc3Npb24pOgorICAgICMgNy4yIHN0ZXAgMgorICAgIHNlc3Np
b24udXJsID0gYWxlcnRfZG9jCisKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5k
KCJHRVQiLCAic2Vzc2lvbi8lcy91cmwiICUgc2Vzc2lvbi5zZXNzaW9uX2lkKQorCisgICAgYXNz
ZXJ0X2Vycm9yKHJlc3VsdCwgInVuZXhwZWN0ZWQgYWxlcnQgb3BlbiIpCisKK2RlZiB0ZXN0X2dl
dF9jdXJyZW50X3VybF9tYXRjaGVzX2xvY2F0aW9uKHNlc3Npb24pOgorICAgICMgNy4yIHN0ZXAg
MworICAgIHVybCA9IHNlc3Npb24uZXhlY3V0ZV9zY3JpcHQoInJldHVybiB3aW5kb3cubG9jYXRp
b24uaHJlZiIpCisgICAgYXNzZXJ0IHNlc3Npb24udXJsID09IHVybAorCitkZWYgdGVzdF9nZXRf
Y3VycmVudF91cmxfcGF5bG9hZChzZXNzaW9uKToKKyAgICAjIDcuMiBzdGVwIDQtNQorICAgIHNl
c3Npb24uc3RhcnQoKQorCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VU
IiwgInNlc3Npb24vJXMvdXJsIiAlIHNlc3Npb24uc2Vzc2lvbl9pZCkKKworICAgIGFzc2VydCBy
ZXN1bHQuc3RhdHVzID09IDIwMAorICAgIGFzc2VydCBpc2luc3RhbmNlKHJlc3VsdC5ib2R5WyJ2
YWx1ZSJdLCBiYXNlc3RyaW5nKQorCitkZWYgdGVzdF9nZXRfY3VycmVudF91cmxfc3BlY2lhbF9w
YWdlcyhzZXNzaW9uKToKKyAgICBzZXNzaW9uLnVybCA9ICJhYm91dDpibGFuayIKKworICAgIHJl
c3VsdCA9IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIkdFVCIsICJzZXNzaW9uLyVzL3VybCIgJSBz
ZXNzaW9uLnNlc3Npb25faWQpCisKKyAgICBhc3NlcnRfc3VjY2VzcyhyZXN1bHQsICJhYm91dDpi
bGFuayIpCisKKyMgVE9ETyhhdG8pOiBUaGlzIHRlc3QgcmVxdWlyZXMgbW9kaWZpY2F0aW9uIHRv
IHBhc3Mgb24gV2luZG93cworZGVmIHRlc3RfZ2V0X2N1cnJlbnRfdXJsX2ZpbGVfcHJvdG9jb2wo
c2Vzc2lvbik6CisgICAgIyB0ZXN0cyB0aGF0IHRoZSBicm93c2luZyBjb250ZXh0IHJlbWFpbnMg
dGhlIHNhbWUKKyAgICAjIHdoZW4gbmF2aWdhdGVkIHByaXZpbGVnZWQgZG9jdW1lbnRzCisgICAg
c2Vzc2lvbi51cmwgPSAiZmlsZTovLy8iCisKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9y
dC5zZW5kKCJHRVQiLCAic2Vzc2lvbi8lcy91cmwiICUgc2Vzc2lvbi5zZXNzaW9uX2lkKQorCisg
ICAgYXNzZXJ0X3N1Y2Nlc3MocmVzdWx0LCAiZmlsZTovLy8iKQorCisjIFRPRE8oYXRvKTogVGVz
dCBmb3IgaHR0cDovLyBhbmQgaHR0cHM6Ly8gcHJvdG9jb2xzLgorIyBXZSBuZWVkIHRvIGV4cG9z
ZSBhIGZpeHR1cmUgZm9yIGFjY2Vzc2luZworIyBkb2N1bWVudHMgc2VydmVkIGJ5IHdwdHNlcnZl
IGluIG9yZGVyIHRvIHRlc3QgdGhpcy4KKworZGVmIHRlc3Rfc2V0X21hbGZvcm1lZF91cmwoc2Vz
c2lvbik6CisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiUE9TVCIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2Vzc2lvbi8lcy91cmwiICUgc2Vzc2lv
bi5zZXNzaW9uX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJ1cmwi
OiAiZm9vIn0pCisKKyAgICBhc3NlcnRfZXJyb3IocmVzdWx0LCAiaW52YWxpZCBhcmd1bWVudCIp
CisKK2RlZiB0ZXN0X2dldF9jdXJyZW50X3VybF9hZnRlcl9tb2RpZmllZF9sb2NhdGlvbihzZXNz
aW9uKToKKyAgICBzZXNzaW9uLmV4ZWN1dGVfc2NyaXB0KCJ3aW5kb3cubG9jYXRpb24uaHJlZiA9
ICdhYm91dDpibGFuayN3ZF90ZXN0X21vZGlmaWNhdGlvbiciKQorCisgICAgcmVzdWx0ID0gc2Vz
c2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwgInNlc3Npb24vJXMvdXJsIiAlIHNlc3Npb24uc2Vz
c2lvbl9pZCkKKworICAgIGFzc2VydF9zdWNjZXNzKHJlc3VsdCwgImFib3V0OmJsYW5rI3dkX3Rl
c3RfbW9kaWZpY2F0aW9uIikKKworZGVmIHRlc3RfZ2V0X2N1cnJlbnRfdXJsX25lc3RlZF9icm93
c2luZ19jb250ZXh0KHNlc3Npb24sIGNyZWF0ZV9mcmFtZSk6CisgICAgc2Vzc2lvbi51cmwgPSAi
YWJvdXQ6Ymxhbmsjd2RfZnJvbV93aXRoaW5fZnJhbWUiCisgICAgc2Vzc2lvbi5zd2l0Y2hfZnJh
bWUoY3JlYXRlX2ZyYW1lKCkpCisKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5k
KCJHRVQiLCAic2Vzc2lvbi8lcy91cmwiICUgc2Vzc2lvbi5zZXNzaW9uX2lkKQorCisgICAgYXNz
ZXJ0X3N1Y2Nlc3MocmVzdWx0LCAiYWJvdXQ6Ymxhbmsjd2RfZnJvbV93aXRoaW5fZnJhbWUiKQor
CitkZWYgdGVzdF9nZXRfY3VycmVudF91cmxfbmVzdGVkX2Jyb3dzaW5nX2NvbnRleHRzKHNlc3Np
b24pOgorICAgIHNlc3Npb24udXJsID0gdHdvX2ZyYW1lc19kb2MKKyAgICB0b3BfbGV2ZWxfdXJs
ID0gc2Vzc2lvbi51cmwKKworICAgIG91dGVyX2ZyYW1lID0gc2Vzc2lvbi5maW5kLmNzcygiaWZy
YW1lIiwgYWxsPUZhbHNlKQorICAgIHNlc3Npb24uc3dpdGNoX2ZyYW1lKG91dGVyX2ZyYW1lKQor
CisgICAgaW5uZXJfZnJhbWUgPSBzZXNzaW9uLmZpbmQuY3NzKCJpZnJhbWUiLCBhbGw9RmFsc2Up
CisgICAgc2Vzc2lvbi5zd2l0Y2hfZnJhbWUoaW5uZXJfZnJhbWUpCisKKyAgICBhc3NlcnQgc2Vz
c2lvbi51cmwgPT0gdG9wX2xldmVsX3VybApkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9uYXZpZ2F0aW9uL2dldF90aXRsZS5weSBiL1dlYkRy
aXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvbmF2aWdhdGlvbi9nZXRfdGl0
bGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmM0NjU5ZjliOWY3
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZl
ci90ZXN0cy9uYXZpZ2F0aW9uL2dldF90aXRsZS5weQpAQCAtMCwwICsxLDI4MiBAQAoraW1wb3J0
IHB5dGVzdAoraW1wb3J0IHRpbWUKKworZnJvbSB0ZXN0cy5zdXBwb3J0LmFzc2VydHMgaW1wb3J0
IGFzc2VydF9lcnJvciwgYXNzZXJ0X3N1Y2Nlc3MsIGFzc2VydF9kaWFsb2dfaGFuZGxlZAorZnJv
bSB0ZXN0cy5zdXBwb3J0LmZpeHR1cmVzIGltcG9ydCBjcmVhdGVfZGlhbG9nCitmcm9tIHRlc3Rz
LnN1cHBvcnQuaW5saW5lIGltcG9ydCBpbmxpbmUKKworZGVmIHJlYWRfZ2xvYmFsKHNlc3Npb24s
IG5hbWUpOgorICAgIHJldHVybiBzZXNzaW9uLmV4ZWN1dGVfc2NyaXB0KCJyZXR1cm4gJXM7IiAl
IG5hbWUpCisKKyMgMS4gSWYgdGhlIGN1cnJlbnQgdG9wLWxldmVsIGJyb3dzaW5nIGNvbnRleHQg
aXMgbm8gbG9uZ2VyIG9wZW4sIHJldHVybiBlcnJvcgorIyAgICB3aXRoIGVycm9yIGNvZGUgbm8g
c3VjaCB3aW5kb3cuCitkZWYgdGVzdF90aXRsZV9mcm9tX2Nsb3NlZF9jb250ZXh0KHNlc3Npb24s
IGNyZWF0ZV93aW5kb3cpOgorICAgIG5ld193aW5kb3cgPSBjcmVhdGVfd2luZG93KCkKKyAgICBz
ZXNzaW9uLndpbmRvd19oYW5kbGUgPSBuZXdfd2luZG93CisgICAgc2Vzc2lvbi5jbG9zZSgpCisK
KyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgInNlc3Npb24vJXMvdGl0bGUiICUgc2Vzc2lvbi5zZXNz
aW9uX2lkKQorCisgICAgYXNzZXJ0X2Vycm9yKHJlc3VsdCwgIm5vIHN1Y2ggd2luZG93IikKKwor
IyBbLi4uXQorIyAyLiBIYW5kbGUgYW55IHVzZXIgcHJvbXB0cyBhbmQgcmV0dXJuIGl0cyB2YWx1
ZSBpZiBpdCBpcyBhbiBlcnJvci4KKyMgWy4uLl0KKyMgSW4gb3JkZXIgdG8gaGFuZGxlIGFueSB1
c2VyIHByb21wdHMgYSByZW1vdGUgZW5kIG11c3QgdGFrZSB0aGUgZm9sbG93aW5nCisjIHN0ZXBz
OgorIyAyLiBSdW4gdGhlIHN1YnN0ZXBzIG9mIHRoZSBmaXJzdCBtYXRjaGluZyB1c2VyIHByb21w
dCBoYW5kbGVyOgorIworIyAgICBbLi4uXQorIyAgICAtIGRpc21pc3Mgc3RhdGUKKyMgICAgICAx
LiBEaXNtaXNzIHRoZSBjdXJyZW50IHVzZXIgcHJvbXB0LgorIyAgICBbLi4uXQorIworIyAzLiBS
ZXR1cm4gc3VjY2Vzcy4KK2RlZiB0ZXN0X3RpdGxlX2hhbmRsZV9wcm9tcHRfZGlzbWlzcyhuZXdf
c2Vzc2lvbik6CisgICAgXywgc2Vzc2lvbiA9IG5ld19zZXNzaW9uKHsiYWx3YXlzTWF0Y2giOiB7
InVuaGFuZGxlZFByb21wdEJlaGF2aW9yIjogImRpc21pc3MifX0pCisgICAgc2Vzc2lvbi51cmwg
PSBpbmxpbmUoIjx0aXRsZT5XRCBkb2MgdGl0bGU8L3RpdGxlPiIpCisKKyAgICBleHBlY3RlZF90
aXRsZSA9IHJlYWRfZ2xvYmFsKHNlc3Npb24sICJkb2N1bWVudC50aXRsZSIpCisgICAgY3JlYXRl
X2RpYWxvZyhzZXNzaW9uKSgiYWxlcnQiLCB0ZXh0PSJkaXNtaXNzICMxIiwgcmVzdWx0X3Zhcj0i
ZGlzbWlzczEiKQorCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXNzaW9uLyVzL3RpdGxlIiAl
IHNlc3Npb24uc2Vzc2lvbl9pZCkKKworICAgIGFzc2VydF9zdWNjZXNzKHJlc3VsdCwgZXhwZWN0
ZWRfdGl0bGUpCisgICAgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNlc3Npb24sICJkaXNtaXNzICMx
IikKKyAgICBhc3NlcnQgcmVhZF9nbG9iYWwoc2Vzc2lvbiwgImRpc21pc3MxIikgPT0gTm9uZQor
CisgICAgZXhwZWN0ZWRfdGl0bGUgPSByZWFkX2dsb2JhbChzZXNzaW9uLCAiZG9jdW1lbnQudGl0
bGUiKQorICAgIGNyZWF0ZV9kaWFsb2coc2Vzc2lvbikoImNvbmZpcm0iLCB0ZXh0PSJkaXNtaXNz
ICMyIiwgcmVzdWx0X3Zhcj0iZGlzbWlzczIiKQorCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFu
c3BvcnQuc2VuZCgiR0VUIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJz
ZXNzaW9uLyVzL3RpdGxlIiAlIHNlc3Npb24uc2Vzc2lvbl9pZCkKKworICAgIGFzc2VydF9zdWNj
ZXNzKHJlc3VsdCwgZXhwZWN0ZWRfdGl0bGUpCisgICAgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNl
c3Npb24sICJkaXNtaXNzICMyIikKKyAgICBhc3NlcnQgcmVhZF9nbG9iYWwoc2Vzc2lvbiwgImRp
c21pc3MyIikgPT0gTm9uZQorCisgICAgZXhwZWN0ZWRfdGl0bGUgPSByZWFkX2dsb2JhbChzZXNz
aW9uLCAiZG9jdW1lbnQudGl0bGUiKQorICAgIGNyZWF0ZV9kaWFsb2coc2Vzc2lvbikoInByb21w
dCIsIHRleHQ9ImRpc21pc3MgIzMiLCByZXN1bHRfdmFyPSJkaXNtaXNzMyIpCisKKyAgICByZXN1
bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgInNlc3Npb24vJXMvdGl0bGUiICUgc2Vzc2lvbi5zZXNzaW9uX2lkKQor
CisgICAgYXNzZXJ0X3N1Y2Nlc3MocmVzdWx0LCBleHBlY3RlZF90aXRsZSkKKyAgICBhc3NlcnRf
ZGlhbG9nX2hhbmRsZWQoc2Vzc2lvbiwgImRpc21pc3MgIzMiKQorICAgIGFzc2VydCByZWFkX2ds
b2JhbChzZXNzaW9uLCAiZGlzbWlzczMiKSA9PSBOb25lCisKKyMgWy4uLl0KKyMgMi4gSGFuZGxl
IGFueSB1c2VyIHByb21wdHMgYW5kIHJldHVybiBpdHMgdmFsdWUgaWYgaXQgaXMgYW4gZXJyb3Iu
CisjIFsuLi5dCisjIEluIG9yZGVyIHRvIGhhbmRsZSBhbnkgdXNlciBwcm9tcHRzIGEgcmVtb3Rl
IGVuZCBtdXN0IHRha2UgdGhlIGZvbGxvd2luZworIyBzdGVwczoKKyMgMi4gUnVuIHRoZSBzdWJz
dGVwcyBvZiB0aGUgZmlyc3QgbWF0Y2hpbmcgdXNlciBwcm9tcHQgaGFuZGxlcjoKKyMKKyMgICAg
Wy4uLl0KKyMgICAgLSBhY2NlcHQgc3RhdGUKKyMgICAgICAxLiBBY2NlcHQgdGhlIGN1cnJlbnQg
dXNlciBwcm9tcHQuCisjICAgIFsuLi5dCisjCisjIDMuIFJldHVybiBzdWNjZXNzLgorZGVmIHRl
c3RfdGl0bGVfaGFuZGxlX3Byb21wdF9hY2NlcHQobmV3X3Nlc3Npb24pOgorICAgIF8sIHNlc3Np
b24gPSBuZXdfc2Vzc2lvbih7ImFsd2F5c01hdGNoIjogeyJ1bmhhbmRsZWRQcm9tcHRCZWhhdmlv
ciI6ICJhY2NlcHQifX0pCisgICAgc2Vzc2lvbi51cmwgPSBpbmxpbmUoIjx0aXRsZT5XRCBkb2Mg
dGl0bGU8L3RpdGxlPiIpCisgICAgY3JlYXRlX2RpYWxvZyhzZXNzaW9uKSgiYWxlcnQiLCB0ZXh0
PSJhY2NlcHQgIzEiLCByZXN1bHRfdmFyPSJhY2NlcHQxIikKKworICAgIGV4cGVjdGVkX3RpdGxl
ID0gcmVhZF9nbG9iYWwoc2Vzc2lvbiwgImRvY3VtZW50LnRpdGxlIikKKyAgICByZXN1bHQgPSBz
ZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgInNlc3Npb24vJXMvdGl0bGUiICUgc2Vzc2lvbi5zZXNzaW9uX2lkKQorCisgICAg
YXNzZXJ0X3N1Y2Nlc3MocmVzdWx0LCBleHBlY3RlZF90aXRsZSkKKyAgICBhc3NlcnRfZGlhbG9n
X2hhbmRsZWQoc2Vzc2lvbiwgImFjY2VwdCAjMSIpCisgICAgYXNzZXJ0IHJlYWRfZ2xvYmFsKHNl
c3Npb24sICJhY2NlcHQxIikgPT0gTm9uZQorCisgICAgZXhwZWN0ZWRfdGl0bGUgPSByZWFkX2ds
b2JhbChzZXNzaW9uLCAiZG9jdW1lbnQudGl0bGUiKQorICAgIGNyZWF0ZV9kaWFsb2coc2Vzc2lv
bikoImNvbmZpcm0iLCB0ZXh0PSJhY2NlcHQgIzIiLCByZXN1bHRfdmFyPSJhY2NlcHQyIikKKwor
ICAgIHJlc3VsdCA9IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIkdFVCIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAic2Vzc2lvbi8lcy90aXRsZSIgJSBzZXNzaW9uLnNlc3Np
b25faWQpCisKKyAgICBhc3NlcnRfc3VjY2VzcyhyZXN1bHQsIGV4cGVjdGVkX3RpdGxlKQorICAg
IGFzc2VydF9kaWFsb2dfaGFuZGxlZChzZXNzaW9uLCAiYWNjZXB0ICMyIikKKyAgICBhc3NlcnQg
cmVhZF9nbG9iYWwoc2Vzc2lvbiwgImFjY2VwdDIiKSwgVHJ1ZQorCisgICAgZXhwZWN0ZWRfdGl0
bGUgPSByZWFkX2dsb2JhbChzZXNzaW9uLCAiZG9jdW1lbnQudGl0bGUiKQorICAgIGNyZWF0ZV9k
aWFsb2coc2Vzc2lvbikoInByb21wdCIsIHRleHQ9ImFjY2VwdCAjMyIsIHJlc3VsdF92YXI9ImFj
Y2VwdDMiKQorCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXNzaW9uLyVzL3RpdGxlIiAlIHNl
c3Npb24uc2Vzc2lvbl9pZCkKKworICAgIGFzc2VydF9zdWNjZXNzKHJlc3VsdCwgZXhwZWN0ZWRf
dGl0bGUpCisgICAgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNlc3Npb24sICJhY2NlcHQgIzMiKQor
ICAgIGFzc2VydCByZWFkX2dsb2JhbChzZXNzaW9uLCAiYWNjZXB0MyIpID09ICIiCisKKyMgWy4u
Ll0KKyMgMi4gSGFuZGxlIGFueSB1c2VyIHByb21wdHMgYW5kIHJldHVybiBpdHMgdmFsdWUgaWYg
aXQgaXMgYW4gZXJyb3IuCisjIFsuLi5dCisjIEluIG9yZGVyIHRvIGhhbmRsZSBhbnkgdXNlciBw
cm9tcHRzIGEgcmVtb3RlIGVuZCBtdXN0IHRha2UgdGhlIGZvbGxvd2luZworIyBzdGVwczoKKyMg
Mi4gUnVuIHRoZSBzdWJzdGVwcyBvZiB0aGUgZmlyc3QgbWF0Y2hpbmcgdXNlciBwcm9tcHQgaGFu
ZGxlcjoKKyMKKyMgICAgWy4uLl0KKyMgICAgLSBtaXNzaW5nIHZhbHVlIGRlZmF1bHQgc3RhdGUK
KyMgICAgLSBub3QgaW4gdGhlIHRhYmxlIG9mIHNpbXBsZSBkaWFsb2dzCisjICAgICAgMS4gRGlz
bWlzcyB0aGUgY3VycmVudCB1c2VyIHByb21wdC4KKyMgICAgICAyLiBSZXR1cm4gZXJyb3Igd2l0
aCBlcnJvciBjb2RlIHVuZXhwZWN0ZWQgYWxlcnQgb3Blbi4KK2RlZiB0ZXN0X3RpdGxlX2hhbmRs
ZV9wcm9tcHRfbWlzc2luZ192YWx1ZShzZXNzaW9uLCBjcmVhdGVfZGlhbG9nKToKKyAgICBzZXNz
aW9uLnVybCA9IGlubGluZSgiPHRpdGxlPldEIGRvYyB0aXRsZTwvdGl0bGU+IikKKyAgICBjcmVh
dGVfZGlhbG9nKCJhbGVydCIsIHRleHQ9ImRpc21pc3MgIzEiLCByZXN1bHRfdmFyPSJkaXNtaXNz
MSIpCisKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlc3Npb24vJXMvdGl0bGUiICUgc2Vzc2lv
bi5zZXNzaW9uX2lkKQorCisgICAgYXNzZXJ0X2Vycm9yKHJlc3VsdCwgInVuZXhwZWN0ZWQgYWxl
cnQgb3BlbiIpCisgICAgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNlc3Npb24sICJkaXNtaXNzICMx
IikKKyAgICBhc3NlcnQgcmVhZF9nbG9iYWwoc2Vzc2lvbiwgImFjY2VwdDEiKSA9PSBOb25lCisK
KyAgICBjcmVhdGVfZGlhbG9nKCJjb25maXJtIiwgdGV4dD0iZGlzbWlzcyAjMiIsIHJlc3VsdF92
YXI9ImRpc21pc3MyIikKKworICAgIHJlc3VsdCA9IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIkdF
VCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2Vzc2lvbi8lcy90aXRs
ZSIgJSBzZXNzaW9uLnNlc3Npb25faWQpCisKKyAgICBhc3NlcnRfZXJyb3IocmVzdWx0LCAidW5l
eHBlY3RlZCBhbGVydCBvcGVuIikKKyAgICBhc3NlcnRfZGlhbG9nX2hhbmRsZWQoc2Vzc2lvbiwg
ImRpc21pc3MgIzIiKQorICAgIGFzc2VydCByZWFkX2dsb2JhbChzZXNzaW9uLCAiZGlzbWlzczIi
KSA9PSBGYWxzZQorCisgICAgY3JlYXRlX2RpYWxvZygicHJvbXB0IiwgdGV4dD0iZGlzbWlzcyAj
MyIsIHJlc3VsdF92YXI9ImRpc21pc3MzIikKKworICAgIHJlc3VsdCA9IHNlc3Npb24udHJhbnNw
b3J0LnNlbmQoIkdFVCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2Vz
c2lvbi8lcy90aXRsZSIgJSBzZXNzaW9uLnNlc3Npb25faWQpCisKKyAgICBhc3NlcnRfZXJyb3Io
cmVzdWx0LCAidW5leHBlY3RlZCBhbGVydCBvcGVuIikKKyAgICBhc3NlcnRfZGlhbG9nX2hhbmRs
ZWQoc2Vzc2lvbiwgImRpc21pc3MgIzMiKQorICAgIGFzc2VydCByZWFkX2dsb2JhbChzZXNzaW9u
LCAiZGlzbWlzczMiKSA9PSBOb25lCisKKyMgVGhlIGJlaGF2aW9yIG9mIHRoZSBgd2luZG93LnBy
aW50YCBmdW5jdGlvbiBpcyBwbGF0Zm9ybS1kZXBlbmRlbnQgYW5kIG1heSBub3QKKyMgdHJpZ2dl
ciB0aGUgY3JlYXRpb24gb2YgYSBkaWFsb2cgYXQgYWxsLiBUaGVyZWZvcmUsIHRoaXMgdGVzdCBz
aG91bGQgb25seSBiZQorIyBydW4gaW4gY29udGV4dHMgdGhhdCBzdXBwb3J0IHRoZSBkaWFsb2cg
KGEgY29uZGl0aW9uIHRoYXQgbWF5IG5vdCBiZQorIyBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkp
LgorI2RlZiB0ZXN0X3RpdGxlX3dpdGhfbm9uX3NpbXBsZV9kaWFsb2coc2Vzc2lvbik6CisjICAg
IGRvY3VtZW50ID0gIjx0aXRsZT5XaXRoIG5vbi1zaW1wbGUgZGlhbG9nPC90aXRsZT48aDI+SGVs
bG88L2gyPiIKKyMgICAgc3Bhd24gPSAiIiIKKyMgICAgICAgIHZhciBkb25lID0gYXJndW1lbnRz
WzBdOworIyAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyMgICAgICAgICAgICBkb25l
KCk7CisjICAgICAgICB9LCAwKTsKKyMgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7Cisj
ICAgICAgICAgICAgd2luZG93WydwcmludCddKCk7CisjICAgICAgICB9LCAwKTsKKyMgICAgIiIi
CisjICAgIHNlc3Npb24udXJsID0gaW5saW5lKGRvY3VtZW50KQorIyAgICBzZXNzaW9uLmV4ZWN1
dGVfYXN5bmNfc2NyaXB0KHNwYXduKQorIworIyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9y
dC5zZW5kKCJHRVQiLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXNz
aW9uLyVzL3RpdGxlIiAlIHNlc3Npb24uc2Vzc2lvbl9pZCkKKyMgICAgYXNzZXJ0X2Vycm9yKHJl
c3VsdCwgInVuZXhwZWN0ZWQgYWxlcnQgb3BlbiIpCisKKyMgWy4uLl0KKyMgMy4gTGV0IHRpdGxl
IGJlIHRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSB0aXRsZSBJREwgYXR0cmlidXRlIG9mIHRoZSBj
dXJyZW50CisjICAgIHRvcC1sZXZlbCBicm93c2luZyBjb250ZXh0J3MgYWN0aXZlIGRvY3VtZW50
LgorIyA0LiBSZXR1cm4gc3VjY2VzcyB3aXRoIGRhdGEgdGl0bGUuCisjIFsuLi5dCisjIFRoZSB0
aXRsZSBhdHRyaWJ1dGUgbXVzdCwgb24gZ2V0dGluZywgcnVuIHRoZSBmb2xsb3dpbmcgYWxnb3Jp
dGhtOgorIyBbLi4uXQorIyAyLiBPdGhlcndpc2UsIGxldCB2YWx1ZSBiZSB0aGUgY2hpbGQgdGV4
dCBjb250ZW50IG9mIHRoZSB0aXRsZSBlbGVtZW50IFsuLi5dCisjIFsuLi5dCisjIDQuIFJldHVy
biB2YWx1ZS4KK2RlZiB0ZXN0X3RpdGxlX2Zyb21fdG9wX2NvbnRleHQoc2Vzc2lvbik6CisgICAg
c2Vzc2lvbi51cmwgPSBpbmxpbmUoIjx0aXRsZT5Gb29iYXI8L3RpdGxlPjxoMj5IZWxsbzwvaDI+
IikKKworICAgIHJlc3VsdCA9IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIkdFVCIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2Vzc2lvbi8lcy90aXRsZSIgJSBzZXNzaW9u
LnNlc3Npb25faWQpCisgICAgYXNzZXJ0X3N1Y2Nlc3MocmVzdWx0LCByZWFkX2dsb2JhbChzZXNz
aW9uLCAiZG9jdW1lbnQudGl0bGUiKSkKKworIyBbLi4uXQorIyAzLiBMZXQgdGl0bGUgYmUgdGhl
IGluaXRpYWwgdmFsdWUgb2YgdGhlIHRpdGxlIElETCBhdHRyaWJ1dGUgb2YgdGhlIGN1cnJlbnQK
KyMgICAgdG9wLWxldmVsIGJyb3dzaW5nIGNvbnRleHQncyBhY3RpdmUgZG9jdW1lbnQuCisjIDQu
IFJldHVybiBzdWNjZXNzIHdpdGggZGF0YSB0aXRsZS4KKyMgWy4uLl0KKyMgVGhlIHRpdGxlIGF0
dHJpYnV0ZSBtdXN0LCBvbiBnZXR0aW5nLCBydW4gdGhlIGZvbGxvd2luZyBhbGdvcml0aG06Cisj
IFsuLi5dCisjIDIuIE90aGVyd2lzZSwgbGV0IHZhbHVlIGJlIHRoZSBjaGlsZCB0ZXh0IGNvbnRl
bnQgb2YgdGhlIHRpdGxlIGVsZW1lbnQgWy4uLl0KKyMKKyMgICAgVGhlIHRpdGxlIGVsZW1lbnQg
b2YgYSBkb2N1bWVudCBpcyB0aGUgZmlyc3QgdGl0bGUgZWxlbWVudCBpbiB0aGUgZG9jdW1lbnQK
KyMgICAgKGluIHRyZWUgb3JkZXIpLCBpZiB0aGVyZSBpcyBvbmUsIG9yIG51bGwgb3RoZXJ3aXNl
LgorIworIyBbLi4uXQorIyA0LiBSZXR1cm4gdmFsdWUuCitkZWYgdGVzdF90aXRsZV93aXRoX2R1
cGxpY2F0ZV9lbGVtZW50KHNlc3Npb24pOgorICAgIHNlc3Npb24udXJsID0gaW5saW5lKCI8dGl0
bGU+Rmlyc3Q8L3RpdGxlPjx0aXRsZT5TZWNvbmQ8L3RpdGxlPiIpCisKKyAgICByZXN1bHQgPSBz
ZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgInNlc3Npb24vJXMvdGl0bGUiICUgc2Vzc2lvbi5zZXNzaW9uX2lkKQorCisgICAg
YXNzZXJ0X3N1Y2Nlc3MocmVzdWx0LCByZWFkX2dsb2JhbChzZXNzaW9uLCAiZG9jdW1lbnQudGl0
bGUiKSkKKworIyBbLi4uXQorIyAzLiBMZXQgdGl0bGUgYmUgdGhlIGluaXRpYWwgdmFsdWUgb2Yg
dGhlIHRpdGxlIElETCBhdHRyaWJ1dGUgb2YgdGhlIGN1cnJlbnQKKyMgICAgdG9wLWxldmVsIGJy
b3dzaW5nIGNvbnRleHQncyBhY3RpdmUgZG9jdW1lbnQuCisjIDQuIFJldHVybiBzdWNjZXNzIHdp
dGggZGF0YSB0aXRsZS4KKyMgWy4uLl0KKyMgVGhlIHRpdGxlIGF0dHJpYnV0ZSBtdXN0LCBvbiBn
ZXR0aW5nLCBydW4gdGhlIGZvbGxvd2luZyBhbGdvcml0aG06CisjIFsuLi5dCisjIDIuIE90aGVy
d2lzZSwgbGV0IHZhbHVlIGJlIHRoZSBjaGlsZCB0ZXh0IGNvbnRlbnQgb2YgdGhlIHRpdGxlIGVs
ZW1lbnQsIG9yCisjICAgIHRoZSBlbXB0eSBzdHJpbmcgaWYgdGhlIHRpdGxlIGVsZW1lbnQgaXMg
bnVsbC4KKyMgWy4uLl0KKyMgNC4gUmV0dXJuIHZhbHVlLgorZGVmIHRlc3RfdGl0bGVfd2l0aG91
dF9lbGVtZW50KHNlc3Npb24pOgorICAgIHNlc3Npb24udXJsID0gaW5saW5lKCI8aDI+SGVsbG88
L2gyPiIpCisKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlc3Npb24vJXMvdGl0bGUiICUgc2Vz
c2lvbi5zZXNzaW9uX2lkKQorCisgICAgYXNzZXJ0X3N1Y2Nlc3MocmVzdWx0LCByZWFkX2dsb2Jh
bChzZXNzaW9uLCAiZG9jdW1lbnQudGl0bGUiKSkKKworIyBbLi4uXQorIyAzLiBMZXQgdGl0bGUg
YmUgdGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIHRpdGxlIElETCBhdHRyaWJ1dGUgb2YgdGhlIGN1
cnJlbnQKKyMgICAgdG9wLWxldmVsIGJyb3dzaW5nIGNvbnRleHQncyBhY3RpdmUgZG9jdW1lbnQu
CisjIDQuIFJldHVybiBzdWNjZXNzIHdpdGggZGF0YSB0aXRsZS4KK2RlZiB0ZXN0X3RpdGxlX2Fm
dGVyX21vZGlmaWNhdGlvbihzZXNzaW9uKToKKyAgICBzZXNzaW9uLnVybCA9IGlubGluZSgiPHRp
dGxlPkluaXRpYWw8L3RpdGxlPjxoMj5IZWxsbzwvaDI+IikKKyAgICBzZXNzaW9uLmV4ZWN1dGVf
c2NyaXB0KCJkb2N1bWVudC50aXRsZSA9ICd1cGRhdGVkJyIpCisKKyAgICByZXN1bHQgPSBzZXNz
aW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgInNlc3Npb24vJXMvdGl0bGUiICUgc2Vzc2lvbi5zZXNzaW9uX2lkKQorCisgICAgYXNz
ZXJ0X3N1Y2Nlc3MocmVzdWx0LCByZWFkX2dsb2JhbChzZXNzaW9uLCAiZG9jdW1lbnQudGl0bGUi
KSkKKworIyBbLi4uXQorIyAzLiBMZXQgdGl0bGUgYmUgdGhlIGluaXRpYWwgdmFsdWUgb2YgdGhl
IHRpdGxlIElETCBhdHRyaWJ1dGUgb2YgdGhlIGN1cnJlbnQKKyMgICAgdG9wLWxldmVsIGJyb3dz
aW5nIGNvbnRleHQncyBhY3RpdmUgZG9jdW1lbnQuCisjIDQuIFJldHVybiBzdWNjZXNzIHdpdGgg
ZGF0YSB0aXRsZS4KKyMgWy4uLl0KKyMgVGhlIHRpdGxlIGF0dHJpYnV0ZSBtdXN0LCBvbiBnZXR0
aW5nLCBydW4gdGhlIGZvbGxvd2luZyBhbGdvcml0aG06CisjIFsuLi5dCisjIDIuIE90aGVyd2lz
ZSwgbGV0IHZhbHVlIGJlIHRoZSBjaGlsZCB0ZXh0IGNvbnRlbnQgb2YgdGhlIHRpdGxlIGVsZW1l
bnQgWy4uLl0KKyMgMy4gU3RyaXAgYW5kIGNvbGxhcHNlIEFTQ0lJIHdoaXRlc3BhY2UgaW4gdmFs
dWUuCisjIDQuIFJldHVybiB2YWx1ZS4KK2RlZiB0ZXN0X3RpdGxlX3N0cmlwX2FuZF9jb2xsYXBz
ZShzZXNzaW9uKToKKyAgICBkb2N1bWVudCA9ICI8dGl0bGU+ICAgYSBiXHRjXG5kXHQgXG4gZVx0
XG4gPC90aXRsZT48aDI+SGVsbG88L2gyPiIKKyAgICBzZXNzaW9uLnVybCA9IGlubGluZShkb2N1
bWVudCkKKworICAgIHJlc3VsdCA9IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIkdFVCIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2Vzc2lvbi8lcy90aXRsZSIgJSBzZXNz
aW9uLnNlc3Npb25faWQpCisKKyAgICBhc3NlcnRfc3VjY2VzcyhyZXN1bHQsIHJlYWRfZ2xvYmFs
KHNlc3Npb24sICJkb2N1bWVudC50aXRsZSIpKQorCisjIFsuLi5dCisjIDMuIExldCB0aXRsZSBi
ZSB0aGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgdGl0bGUgSURMIGF0dHJpYnV0ZSBvZiB0aGUgY3Vy
cmVudAorIyAgICB0b3AtbGV2ZWwgYnJvd3NpbmcgY29udGV4dCdzIGFjdGl2ZSBkb2N1bWVudC4K
KyMgNC4gUmV0dXJuIHN1Y2Nlc3Mgd2l0aCBkYXRhIHRpdGxlLgorZGVmIHRlc3RfdGl0bGVfZnJv
bV9mcmFtZShzZXNzaW9uLCBjcmVhdGVfZnJhbWUpOgorICAgIHNlc3Npb24udXJsID0gaW5saW5l
KCI8dGl0bGU+UGFyZW50PC90aXRsZT5wYXJlbnQiKQorCisgICAgc2Vzc2lvbi5zd2l0Y2hfZnJh
bWUoY3JlYXRlX2ZyYW1lKCkpCisgICAgc2Vzc2lvbi5zd2l0Y2hfZnJhbWUoY3JlYXRlX2ZyYW1l
KCkpCisKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlc3Npb24vJXMvdGl0bGUiICUgc2Vzc2lv
bi5zZXNzaW9uX2lkKQorCisgICAgYXNzZXJ0X3N1Y2Nlc3MocmVzdWx0LCByZWFkX2dsb2JhbChz
ZXNzaW9uLCAiZG9jdW1lbnQudGl0bGUiKSkKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2lt
cG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvcmV0cmlldmFsL19faW5pdF9fLnB5IGIvV2ViRHJp
dmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9yZXRyaWV2YWwvX19pbml0X18u
cHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmU2OWRlMjliYjJkCmRp
ZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL3Jl
dHJpZXZhbC9maW5kX2VsZW1lbnQucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
ZHJpdmVyL3Rlc3RzL3JldHJpZXZhbC9maW5kX2VsZW1lbnQucHkKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAuLmQ1OWM3ODIzNDIxCi0tLSAvZGV2L251bGwKKysrIGIvV2Vi
RHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9yZXRyaWV2YWwvZmluZF9l
bGVtZW50LnB5CkBAIC0wLDAgKzEsNTkgQEAKK2ltcG9ydCBweXRlc3QKKworCitmcm9tIHRlc3Rz
LnN1cHBvcnQuYXNzZXJ0cyBpbXBvcnQgYXNzZXJ0X2Vycm9yLCBhc3NlcnRfc3VjY2VzcworZnJv
bSB0ZXN0cy5zdXBwb3J0LmlubGluZSBpbXBvcnQgaW5saW5lCisKKworZGVmIGZpbmRfZWxlbWVu
dChzZXNzaW9uLCB1c2luZywgdmFsdWUpOgorICAgIHJldHVybiBzZXNzaW9uLnRyYW5zcG9ydC5z
ZW5kKCJQT1NUIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2Vzc2lvbi8l
cy9lbGVtZW50IiAlIHNlc3Npb24uc2Vzc2lvbl9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7InVzaW5nIjogdXNpbmcsICJ2YWx1ZSI6IHZhbHVlfSkKKworCisjIDEyLjIg
RmluZCBFbGVtZW50CisKK0BweXRlc3QubWFyay5wYXJhbWV0cml6ZSgidXNpbmciLCBbImEiLCBU
cnVlLCBOb25lLCAxLCBbXSwge31dKQorZGVmIHRlc3RfaW52YWxpZF91c2luZ19hcmd1bWVudChz
ZXNzaW9uLCB1c2luZyk6CisgICAgIyBTdGVwIDEgLSAyCisgICAgcmVzcG9uc2UgPSBmaW5kX2Vs
ZW1lbnQoc2Vzc2lvbiwgdXNpbmcsICJ2YWx1ZSIpCisgICAgYXNzZXJ0X2Vycm9yKHJlc3BvbnNl
LCAiaW52YWxpZCBhcmd1bWVudCIpCisKKworQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKCJ2YWx1
ZSIsIFtOb25lLCBbXSwge31dKQorZGVmIHRlc3RfaW52YWxpZF9zZWxlY3Rvcl9hcmd1bWVudChz
ZXNzaW9uLCB2YWx1ZSk6CisgICAgIyBTdGVwIDMgLSA0CisgICAgcmVzcG9uc2UgPSBmaW5kX2Vs
ZW1lbnQoc2Vzc2lvbiwgImNzcyBzZWxlY3RvciIsIHZhbHVlKQorICAgIGFzc2VydF9lcnJvcihy
ZXNwb25zZSwgImludmFsaWQgYXJndW1lbnQiKQorCisKK2RlZiB0ZXN0X2Nsb3NlZF9jb250ZXh0
KHNlc3Npb24sIGNyZWF0ZV93aW5kb3cpOgorICAgICMgU3RlcCA1CisgICAgbmV3X3dpbmRvdyA9
IGNyZWF0ZV93aW5kb3coKQorICAgIHNlc3Npb24ud2luZG93X2hhbmRsZSA9IG5ld193aW5kb3cK
KyAgICBzZXNzaW9uLmNsb3NlKCkKKworICAgIHJlc3BvbnNlID0gZmluZF9lbGVtZW50KHNlc3Np
b24sICJjc3Mgc2VsZWN0b3IiLCAiZm9vIikKKworICAgIGFzc2VydF9lcnJvcihyZXNwb25zZSwg
Im5vIHN1Y2ggd2luZG93IikKKworCitAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoInVzaW5nLHZh
bHVlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbKCJjc3Mgc2VsZWN0b3IiLCAiI2xpbmtU
ZXh0IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgibGluayB0ZXh0IiwgImZ1bGwgbGlu
ayB0ZXh0IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgicGFydGlhbCBsaW5rIHRleHQi
LCAibGluayB0ZXh0IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgidGFnIG5hbWUiLCAi
YSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoInhwYXRoIiwgIi8vYSIpXSkKK2RlZiB0
ZXN0X2ZpbmRfZWxlbWVudChzZXNzaW9uLCB1c2luZywgdmFsdWUpOgorICAgICMgU3RlcCA4IC0g
OQorICAgIHNlc3Npb24udXJsID0gaW5saW5lKCI8YSBocmVmPSMgaWQ9bGlua1RleHQ+ZnVsbCBs
aW5rIHRleHQ8L2E+IikKKworICAgIHJlc3BvbnNlID0gZmluZF9lbGVtZW50KHNlc3Npb24sIHVz
aW5nLCB2YWx1ZSkKKyAgICBhc3NlcnRfc3VjY2VzcyhyZXNwb25zZSkKKworCitAcHl0ZXN0Lm1h
cmsucGFyYW1ldHJpemUoInVzaW5nLHZhbHVlIiwgWygiY3NzIHNlbGVjdG9yIiwgIiN3b250RXhp
c3QiKV0pCitkZWYgdGVzdF9ub19lbGVtZW50KHNlc3Npb24sIHVzaW5nLCB2YWx1ZSk6CisgICAg
IyBTdGVwIDggLSA5CisgICAgcmVzcG9uc2UgPSBmaW5kX2VsZW1lbnQoc2Vzc2lvbiwgdXNpbmcs
IHZhbHVlKQorICAgIGFzc2VydF9lcnJvcihyZXNwb25zZSwgIm5vIHN1Y2ggZWxlbWVudCIpCmRp
ZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL3Jl
dHJpZXZhbC9maW5kX2VsZW1lbnRfZnJvbV9lbGVtZW50LnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9yZXRyaWV2YWwvZmluZF9lbGVtZW50X2Zyb21fZWxl
bWVudC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZDFkOGRkNTcx
ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJp
dmVyL3Rlc3RzL3JldHJpZXZhbC9maW5kX2VsZW1lbnRfZnJvbV9lbGVtZW50LnB5CkBAIC0wLDAg
KzEsNTkgQEAKK2ltcG9ydCBweXRlc3QKKworCitmcm9tIHRlc3RzLnN1cHBvcnQuYXNzZXJ0cyBp
bXBvcnQgYXNzZXJ0X2Vycm9yLCBhc3NlcnRfc3VjY2VzcworZnJvbSB0ZXN0cy5zdXBwb3J0Lmlu
bGluZSBpbXBvcnQgaW5saW5lCisKKworZGVmIGZpbmRfZWxlbWVudChzZXNzaW9uLCBlbGVtZW50
LCB1c2luZywgdmFsdWUpOgorICAgIHJldHVybiBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJQT1NU
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2Vzc2lvbi8lcy9lbGVtZW50
LyVzL2VsZW1lbnQiICUgKHNlc3Npb24uc2Vzc2lvbl9pZCwgZWxlbWVudCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeyJ1c2luZyI6IHVzaW5nLCAidmFsdWUiOiB2YWx1ZX0p
CisKKworQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKCJ1c2luZyIsIFsiYSIsIFRydWUsIE5vbmUs
IDEsIFtdLCB7fV0pCitkZWYgdGVzdF9pbnZhbGlkX3VzaW5nX2FyZ3VtZW50KHNlc3Npb24sIHVz
aW5nKToKKyAgICAjIFN0ZXAgMSAtIDIKKyAgICByZXNwb25zZSA9IGZpbmRfZWxlbWVudChzZXNz
aW9uLCAibm90UmVhbCIsIHVzaW5nLCAidmFsdWUiKQorICAgIGFzc2VydF9lcnJvcihyZXNwb25z
ZSwgImludmFsaWQgYXJndW1lbnQiKQorCisKK0BweXRlc3QubWFyay5wYXJhbWV0cml6ZSgidmFs
dWUiLCBbTm9uZSwgW10sIHt9XSkKK2RlZiB0ZXN0X2ludmFsaWRfc2VsZWN0b3JfYXJndW1lbnQo
c2Vzc2lvbiwgdmFsdWUpOgorICAgICMgU3RlcCAzIC0gNAorICAgIHJlc3BvbnNlID0gZmluZF9l
bGVtZW50KHNlc3Npb24sICJub3RSZWFsIiwgImNzcyBzZWxlY3RvciIsIHZhbHVlKQorICAgIGFz
c2VydF9lcnJvcihyZXNwb25zZSwgImludmFsaWQgYXJndW1lbnQiKQorCisKK2RlZiB0ZXN0X2Ns
b3NlZF9jb250ZXh0KHNlc3Npb24sIGNyZWF0ZV93aW5kb3cpOgorICAgICMgU3RlcCA1CisgICAg
bmV3X3dpbmRvdyA9IGNyZWF0ZV93aW5kb3coKQorICAgIHNlc3Npb24ud2luZG93X2hhbmRsZSA9
IG5ld193aW5kb3cKKyAgICBzZXNzaW9uLmNsb3NlKCkKKworICAgIHJlc3BvbnNlID0gZmluZF9l
bGVtZW50KHNlc3Npb24sICJub3RSZWFsIiwgImNzcyBzZWxlY3RvciIsICJmb28iKQorCisgICAg
YXNzZXJ0X2Vycm9yKHJlc3BvbnNlLCAibm8gc3VjaCB3aW5kb3ciKQorCisKK0BweXRlc3QubWFy
ay5wYXJhbWV0cml6ZSgidXNpbmcsdmFsdWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgIFso
ImNzcyBzZWxlY3RvciIsICIjbGlua1RleHQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
KCJsaW5rIHRleHQiLCAiZnVsbCBsaW5rIHRleHQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgKCJwYXJ0aWFsIGxpbmsgdGV4dCIsICJsaW5rIHRleHQiKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgKCJ0YWcgbmFtZSIsICJhIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgi
eHBhdGgiLCAiLy9hIildKQorZGVmIHRlc3RfZmluZF9lbGVtZW50KHNlc3Npb24sIHVzaW5nLCB2
YWx1ZSk6CisgICAgIyBTdGVwIDggLSA5CisgICAgc2Vzc2lvbi51cmwgPSBpbmxpbmUoIjxkaXY+
PGEgaHJlZj0jIGlkPWxpbmtUZXh0PmZ1bGwgbGluayB0ZXh0PC9hPjwvZGl2PiIpCisgICAgZWxl
bWVudCA9IHNlc3Npb24uZmluZC5jc3MoImRpdiIsIGFsbD1GYWxzZSkKKyAgICByZXNwb25zZSA9
IGZpbmRfZWxlbWVudChzZXNzaW9uLCBlbGVtZW50LmlkLCB1c2luZywgdmFsdWUpCisgICAgYXNz
ZXJ0X3N1Y2Nlc3MocmVzcG9uc2UpCisKKworQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKCJ1c2lu
Zyx2YWx1ZSIsWygiY3NzIHNlbGVjdG9yIiwgIiN3b250RXhpc3QiKV0pCitkZWYgdGVzdF9ub19l
bGVtZW50KHNlc3Npb24sIHVzaW5nLCB2YWx1ZSk6CisgICAgIyBTdGVwIDggLSA5CisgICAgc2Vz
c2lvbi51cmwgPSBpbmxpbmUoIjxkaXY+PC9kaXY+IikKKyAgICBlbGVtZW50ID0gc2Vzc2lvbi5m
aW5kLmNzcygiZGl2IiwgYWxsPUZhbHNlKQorICAgIHJlc3BvbnNlID0gZmluZF9lbGVtZW50KHNl
c3Npb24sIGVsZW1lbnQuaWQsIHVzaW5nLCB2YWx1ZSkKKyAgICBhc3NlcnRfZXJyb3IocmVzcG9u
c2UsICJubyBzdWNoIGVsZW1lbnQiKQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9yZXRyaWV2YWwvZmluZF9lbGVtZW50X2Zyb21fZWxlbWVu
dHMucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL3JldHJp
ZXZhbC9maW5kX2VsZW1lbnRfZnJvbV9lbGVtZW50cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uMTE2ZjVkZGJlZDQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2
ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL3JldHJpZXZhbC9maW5kX2VsZW1l
bnRfZnJvbV9lbGVtZW50cy5weQpAQCAtMCwwICsxLDU4IEBACitpbXBvcnQgcHl0ZXN0CisKKwor
ZnJvbSB0ZXN0cy5zdXBwb3J0LmFzc2VydHMgaW1wb3J0IGFzc2VydF9lcnJvciwgYXNzZXJ0X3N1
Y2Nlc3MKK2Zyb20gdGVzdHMuc3VwcG9ydC5pbmxpbmUgaW1wb3J0IGlubGluZQorCisKK2RlZiBm
aW5kX2VsZW1lbnRzKHNlc3Npb24sIGVsZW1lbnQsIHVzaW5nLCB2YWx1ZSk6CisgICAgcmV0dXJu
IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIlBPU1QiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJzZXNzaW9uLyVzL2VsZW1lbnQvJXMvZWxlbWVudHMiICUgKHNlc3Npb24uc2Vz
c2lvbl9pZCwgZWxlbWVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJ1
c2luZyI6IHVzaW5nLCAidmFsdWUiOiB2YWx1ZX0pCisKK0BweXRlc3QubWFyay5wYXJhbWV0cml6
ZSgidXNpbmciLCBbKCJhIiksIChUcnVlKSwgKE5vbmUpLCAoMSksIChbXSksICh7fSldKQorZGVm
IHRlc3RfaW52YWxpZF91c2luZ19hcmd1bWVudChzZXNzaW9uLCB1c2luZyk6CisgICAgIyBTdGVw
IDEgLSAyCisgICAgcmVzcG9uc2UgPSBmaW5kX2VsZW1lbnRzKHNlc3Npb24sICJub3RSZWFsIiwg
dXNpbmcsICJ2YWx1ZSIpCisgICAgYXNzZXJ0X2Vycm9yKHJlc3BvbnNlLCAiaW52YWxpZCBhcmd1
bWVudCIpCisKKworQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKCJ2YWx1ZSIsIFtOb25lLCBbXSwg
e31dKQorZGVmIHRlc3RfaW52YWxpZF9zZWxlY3Rvcl9hcmd1bWVudChzZXNzaW9uLCB2YWx1ZSk6
CisgICAgIyBTdGVwIDMgLSA0CisgICAgcmVzcG9uc2UgPSBmaW5kX2VsZW1lbnRzKHNlc3Npb24s
ICJub3RSZWFsIiwgImNzcyBzZWxlY3RvciIsIHZhbHVlKQorICAgIGFzc2VydF9lcnJvcihyZXNw
b25zZSwgImludmFsaWQgYXJndW1lbnQiKQorCisKK2RlZiB0ZXN0X2Nsb3NlZF9jb250ZXh0KHNl
c3Npb24sIGNyZWF0ZV93aW5kb3cpOgorICAgICMgU3RlcCA1CisgICAgbmV3X3dpbmRvdyA9IGNy
ZWF0ZV93aW5kb3coKQorICAgIHNlc3Npb24ud2luZG93X2hhbmRsZSA9IG5ld193aW5kb3cKKyAg
ICBzZXNzaW9uLmNsb3NlKCkKKworICAgIHJlc3BvbnNlID0gZmluZF9lbGVtZW50cyhzZXNzaW9u
LCAibm90UmVhbCIsICJjc3Mgc2VsZWN0b3IiLCAiZm9vIikKKworICAgIGFzc2VydF9lcnJvcihy
ZXNwb25zZSwgIm5vIHN1Y2ggd2luZG93IikKKworCitAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUo
InVzaW5nLHZhbHVlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbKCJjc3Mgc2VsZWN0b3Ii
LCAiI2xpbmtUZXh0IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgibGluayB0ZXh0Iiwg
ImZ1bGwgbGluayB0ZXh0IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgicGFydGlhbCBs
aW5rIHRleHQiLCAibGluayB0ZXh0IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgidGFn
IG5hbWUiLCAiYSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoInhwYXRoIiwgIi8vYSIp
XSkKK2RlZiB0ZXN0X2ZpbmRfZWxlbWVudHMoc2Vzc2lvbiwgdXNpbmcsIHZhbHVlKToKKyAgICAj
IFN0ZXAgOCAtIDkKKyAgICBzZXNzaW9uLnVybCA9IGlubGluZSgiPGRpdj48YSBocmVmPSMgaWQ9
bGlua1RleHQ+ZnVsbCBsaW5rIHRleHQ8L2E+PC9kaXY+IikKKyAgICBlbGVtZW50ID0gc2Vzc2lv
bi5maW5kLmNzcygiZGl2IiwgYWxsPUZhbHNlKQorICAgIHJlc3BvbnNlID0gZmluZF9lbGVtZW50
cyhzZXNzaW9uLCBlbGVtZW50LmlkLCB1c2luZywgdmFsdWUpCisgICAgYXNzZXJ0X3N1Y2Nlc3Mo
cmVzcG9uc2UpCisKKworQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKCJ1c2luZyx2YWx1ZSIsIFso
ImNzcyBzZWxlY3RvciIsICIjd29udEV4aXN0IildKQorZGVmIHRlc3Rfbm9fZWxlbWVudChzZXNz
aW9uLCB1c2luZywgdmFsdWUpOgorICAgICMgU3RlcCA4IC0gOQorICAgIHNlc3Npb24udXJsID0g
aW5saW5lKCI8ZGl2PjwvZGl2PiIpCisgICAgZWxlbWVudCA9IHNlc3Npb24uZmluZC5jc3MoImRp
diIsIGFsbD1GYWxzZSkKKyAgICByZXNwb25zZSA9IGZpbmRfZWxlbWVudHMoc2Vzc2lvbiwgZWxl
bWVudC5pZCwgdXNpbmcsIHZhbHVlKQorICAgIGFzc2VydCByZXNwb25zZS5ib2R5WyJ2YWx1ZSJd
ID09IFtdCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVy
L3Rlc3RzL3JldHJpZXZhbC9maW5kX2VsZW1lbnRzLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9yZXRyaWV2YWwvZmluZF9lbGVtZW50cy5weQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMzgxMjY5NGY5ZjYKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL3JldHJp
ZXZhbC9maW5kX2VsZW1lbnRzLnB5CkBAIC0wLDAgKzEsNjAgQEAKK2ltcG9ydCBweXRlc3QKKwor
ZnJvbSB0ZXN0cy5zdXBwb3J0LmFzc2VydHMgaW1wb3J0IGFzc2VydF9lcnJvciwgYXNzZXJ0X3N1
Y2Nlc3MKK2Zyb20gdGVzdHMuc3VwcG9ydC5pbmxpbmUgaW1wb3J0IGlubGluZQorCisKK2RlZiBm
aW5kX2VsZW1lbnRzKHNlc3Npb24sIHVzaW5nLCB2YWx1ZSk6CisgICAgcmV0dXJuIHNlc3Npb24u
dHJhbnNwb3J0LnNlbmQoIlBPU1QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJzZXNzaW9uLyVzL2VsZW1lbnRzIiAlIHNlc3Npb24uc2Vzc2lvbl9pZCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB7InVzaW5nIjogdXNpbmcsICJ2YWx1ZSI6IHZhbHVlfSkK
KworCitAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoInVzaW5nIiwgWyJhIiwgVHJ1ZSwgTm9uZSwg
MSwgW10sIHt9XSkKK2RlZiB0ZXN0X2ludmFsaWRfdXNpbmdfYXJndW1lbnQoc2Vzc2lvbiwgdXNp
bmcpOgorICAgICMgU3RlcCAxIC0gMgorICAgIHJlc3BvbnNlID0gZmluZF9lbGVtZW50cyhzZXNz
aW9uLCB1c2luZywgInZhbHVlIikKKyAgICBhc3NlcnRfZXJyb3IocmVzcG9uc2UsICJpbnZhbGlk
IGFyZ3VtZW50IikKKworCitAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoInZhbHVlIiwgW05vbmUs
IFtdLCB7fV0pCitkZWYgdGVzdF9pbnZhbGlkX3NlbGVjdG9yX2FyZ3VtZW50KHNlc3Npb24sIHZh
bHVlKToKKyAgICAjIFN0ZXAgMyAtIDQKKyAgICByZXNwb25zZSA9IGZpbmRfZWxlbWVudHMoc2Vz
c2lvbiwgImNzcyBzZWxlY3RvciIsIHZhbHVlKQorICAgIGFzc2VydF9lcnJvcihyZXNwb25zZSwg
ImludmFsaWQgYXJndW1lbnQiKQorCisKK2RlZiB0ZXN0X2Nsb3NlZF9jb250ZXh0KHNlc3Npb24s
IGNyZWF0ZV93aW5kb3cpOgorICAgICMgU3RlcCA1CisgICAgbmV3X3dpbmRvdyA9IGNyZWF0ZV93
aW5kb3coKQorICAgIHNlc3Npb24ud2luZG93X2hhbmRsZSA9IG5ld193aW5kb3cKKyAgICBzZXNz
aW9uLmNsb3NlKCkKKworICAgIHJlc3BvbnNlID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiUE9T
VCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXNzaW9uLyVzL2Vs
ZW1lbnRzIiAlIHNlc3Npb24uc2Vzc2lvbl9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeyJ1c2luZyI6ICJjc3Mgc2VsZWN0b3IiLCAidmFsdWUiOiAiZm9vIn0pCisK
KyAgICBhc3NlcnRfZXJyb3IocmVzcG9uc2UsICJubyBzdWNoIHdpbmRvdyIpCisKKworQHB5dGVz
dC5tYXJrLnBhcmFtZXRyaXplKCJ1c2luZyx2YWx1ZSIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgWygiY3NzIHNlbGVjdG9yIiwgIiNsaW5rVGV4dCIpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAoImxpbmsgdGV4dCIsICJmdWxsIGxpbmsgdGV4dCIpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAoInBhcnRpYWwgbGluayB0ZXh0IiwgImxpbmsgdGV4dCIpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAoInRhZyBuYW1lIiwgImEiKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgKCJ4cGF0aCIsICIvL2EiKV0pCitkZWYgdGVzdF9maW5kX2VsZW1lbnRzKHNlc3Npb24sIHVz
aW5nLCB2YWx1ZSk6CisgICAgIyBTdGVwIDggLSA5CisgICAgc2Vzc2lvbi51cmwgPSBpbmxpbmUo
IjxhIGhyZWY9IyBpZD1saW5rVGV4dD5mdWxsIGxpbmsgdGV4dDwvYT4iKQorCisgICAgcmVzcG9u
c2UgPSBmaW5kX2VsZW1lbnRzKHNlc3Npb24sIHVzaW5nLCB2YWx1ZSkKKyAgICBhc3NlcnRfc3Vj
Y2VzcyhyZXNwb25zZSkKKyAgICBhc3NlcnQgbGVuKHJlc3BvbnNlLmJvZHlbInZhbHVlIl0pID09
IDEKKworCitAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoInVzaW5nLHZhbHVlIiwgWygiY3NzIHNl
bGVjdG9yIiwgIiN3b250RXhpc3QiKV0pCitkZWYgdGVzdF9ub19lbGVtZW50KHNlc3Npb24sIHVz
aW5nLCB2YWx1ZSk6CisgICAgIyBTdGVwIDggLSA5CisgICAgcmVzcG9uc2UgPSBmaW5kX2VsZW1l
bnRzKHNlc3Npb24sIHVzaW5nLCB2YWx1ZSkKKyAgICBhc3NlcnRfc3VjY2VzcyhyZXNwb25zZSkK
KyAgICBhc3NlcnQgcmVzcG9uc2UuYm9keVsidmFsdWUiXSA9PSBbXQpkaWZmIC0tZ2l0IGEvV2Vi
RHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9zZXNzaW9ucy9uZXdfc2Vz
c2lvbi9jb25mdGVzdC5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIv
dGVzdHMvc2Vzc2lvbnMvbmV3X3Nlc3Npb24vY29uZnRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAuLmQzZWUxOTlmYjI4Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vi
RHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9zZXNzaW9ucy9uZXdfc2Vz
c2lvbi9jb25mdGVzdC5weQpAQCAtMCwwICsxLDIyIEBACitpbXBvcnQgcHl0ZXN0CitpbXBvcnQg
c3lzCisKK2ltcG9ydCB3ZWJkcml2ZXIKKworCitkZWYgcHJvZHVjdChhLCBiKToKKyAgICByZXR1
cm4gWyhhLCBpdGVtKSBmb3IgaXRlbSBpbiBiXQorCisKK2RlZiBmbGF0dGVuKGwpOgorICAgIHJl
dHVybiBbaXRlbSBmb3IgeCBpbiBsIGZvciBpdGVtIGluIHhdCisKK0BweXRlc3QuZml4dHVyZShz
Y29wZT0ic2Vzc2lvbiIpCitkZWYgcGxhdGZvcm1fbmFtZSgpOgorICAgIHJldHVybiB7CisgICAg
ICAgICJsaW51eDIiOiAibGludXgiLAorICAgICAgICAid2luMzIiOiAid2luZG93cyIsCisgICAg
ICAgICJjeWd3aW4iOiAid2luZG93cyIsCisgICAgICAgICJkYXJ3aW4iOiAibWFjIgorICAgIH0u
Z2V0KHN5cy5wbGF0Zm9ybSkKKwpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYmRyaXZlci90ZXN0cy9zZXNzaW9ucy9uZXdfc2Vzc2lvbi9jcmVhdGUucHkgYi9XZWJE
cml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL3Nlc3Npb25zL25ld19zZXNz
aW9uL2NyZWF0ZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNTc2
NmRiZGE4ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViZHJpdmVyL3Rlc3RzL3Nlc3Npb25zL25ld19zZXNzaW9uL2NyZWF0ZS5weQpAQCAtMCwwICsx
LDI3IEBACisjTUVUQTogdGltZW91dD1sb25nCisKK2ltcG9ydCBweXRlc3QKKworZnJvbSBjb25m
dGVzdCBpbXBvcnQgcHJvZHVjdCwgZmxhdHRlbgorCisKKyMgTm90ZSB0aGF0IHdlIGNhbiBvbmx5
IHRlc3QgdGhpbmdzIGhlcmUgYWxsIGltcGxlbWVudGF0aW9ucyBtdXN0IHN1cHBvcnQKK3ZhbGlk
X2RhdGEgPSBbCisgICAgKCJhY2NlcHRJbnNlY3VyZUNlcnRzIiwgW0ZhbHNlLCBOb25lXSksCisg
ICAgKCJicm93c2VyTmFtZSIsIFtOb25lXSksCisgICAgKCJicm93c2VyVmVyc2lvbiIsIFtOb25l
XSksCisgICAgKCJwbGF0Zm9ybU5hbWUiLCBbTm9uZV0pLAorICAgICgicGFnZUxvYWRTdHJhdGVn
eSIsIFsibm9uZSIsICJlYWdlciIsICJub3JtYWwiLCBOb25lXSksCisgICAgKCJwcm94eSIsIFtO
b25lXSksCisgICAgKCJ1bmhhbmRsZWRQcm9tcHRCZWhhdmlvciIsIFsiZGlzbWlzcyIsICJhY2Nl
cHQiLCBOb25lXSksCisgICAgKCJ0ZXN0OmV4dGVuc2lvbiIsIFtUcnVlLCAiYWJjIiwgMTIzLCBb
XSwgeyJrZXkiOiAidmFsdWUifSwgTm9uZV0pLAorXQorCisKK0BweXRlc3QubWFyay5wYXJhbWV0
cml6ZSgiYm9keSIsIFtsYW1iZGEga2V5LCB2YWx1ZTogeyJhbHdheXNNYXRjaCI6IHtrZXk6IHZh
bHVlfX0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhIGtleSwgdmFs
dWU6IHsiZmlyc3RNYXRjaCI6IFt7a2V5OiB2YWx1ZX1dfV0pCitAcHl0ZXN0Lm1hcmsucGFyYW1l
dHJpemUoImtleSx2YWx1ZSIsIGZsYXR0ZW4ocHJvZHVjdCgqaXRlbSkgZm9yIGl0ZW0gaW4gdmFs
aWRfZGF0YSkpCitkZWYgdGVzdF92YWxpZChuZXdfc2Vzc2lvbiwgYm9keSwga2V5LCB2YWx1ZSk6
CisgICAgcmVzcCA9IG5ld19zZXNzaW9uKHsiY2FwYWJpbGl0aWVzIjogYm9keShrZXksIHZhbHVl
KX0pCisKKyMgQ29udGludWVkIGluIGNyZWF0ZS0xLnB5IHRvIGF2b2lkIHRpbWVvdXRzCmRpZmYg
LS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL3Nlc3Np
b25zL25ld19zZXNzaW9uL2RlZmF1bHRfdmFsdWVzLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9zZXNzaW9ucy9uZXdfc2Vzc2lvbi9kZWZhdWx0X3ZhbHVl
cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYmZlNDE0NGY1YTMK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVy
L3Rlc3RzL3Nlc3Npb25zL25ld19zZXNzaW9uL2RlZmF1bHRfdmFsdWVzLnB5CkBAIC0wLDAgKzEs
NDggQEAKKyMgTUVUQTogdGltZW91dD1sb25nCisKK2ltcG9ydCB1dWlkCisKK2ltcG9ydCBweXRl
c3QKKworZnJvbSB3ZWJkcml2ZXIgaW1wb3J0IGVycm9yCisKKworZGVmIHRlc3RfYmFzaWMobmV3
X3Nlc3Npb24pOgorICAgIHJlc3AsIF8gPSBuZXdfc2Vzc2lvbih7ImNhcGFiaWxpdGllcyI6IHt9
fSkKKyAgICBhc3NlcnQgc2V0KHJlc3Aua2V5cygpKSA9PSB7InNlc3Npb25JZCIsICJjYXBhYmls
aXRpZXMifQorCisKK2RlZiB0ZXN0X3JlcGVhdF9uZXdfc2Vzc2lvbihuZXdfc2Vzc2lvbik6Cisg
ICAgcmVzcCwgXyA9IG5ld19zZXNzaW9uKHsiY2FwYWJpbGl0aWVzIjoge319KQorICAgIHdpdGgg
cHl0ZXN0LnJhaXNlcyhlcnJvci5TZXNzaW9uTm90Q3JlYXRlZEV4Y2VwdGlvbik6CisgICAgICAg
IG5ld19zZXNzaW9uKHsiY2FwYWJpbGl0aWVzIjoge319KQorCisKK2RlZiB0ZXN0X25vX2NhcGFi
aWxpdGVzKG5ld19zZXNzaW9uKToKKyAgICB3aXRoIHB5dGVzdC5yYWlzZXMoZXJyb3IuSW52YWxp
ZEFyZ3VtZW50RXhjZXB0aW9uKToKKyAgICAgICAgbmV3X3Nlc3Npb24oe30pCisKKworZGVmIHRl
c3RfbWlzc2luZ19maXJzdF9tYXRjaChuZXdfc2Vzc2lvbik6CisgICAgcmVzcCwgXyA9IG5ld19z
ZXNzaW9uKHsiY2FwYWJpbGl0aWVzIjogeyJhbHdheXNNYXRjaCI6IHt9fX0pCisKKworZGVmIHRl
c3RfbWlzc2luZ19hbHdheXNfbWF0Y2gobmV3X3Nlc3Npb24pOgorICAgIHJlc3AsIF8gPSBuZXdf
c2Vzc2lvbih7ImNhcGFiaWxpdGllcyI6IHsiZmlyc3RNYXRjaCI6IFt7fV19fSkKKworCitkZWYg
dGVzdF9kZXNpcmVkKG5ld19zZXNzaW9uKToKKyAgICB3aXRoIHB5dGVzdC5yYWlzZXMoZXJyb3Iu
SW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKToKKyAgICAgICAgcmVzcCwgXyA9IG5ld19zZXNzaW9u
KHsiZGVzaXJlZENhcGJpbGl0aWVzIjoge319KQorCisKK2RlZiB0ZXN0X2lnbm9yZV9ub25fc3Bl
Y19maWVsZHNfaW5fY2FwYWJpbGl0aWVzKG5ld19zZXNzaW9uKToKKyAgICByZXNwLCBfID0gbmV3
X3Nlc3Npb24oeyJjYXBhYmlsaXRpZXMiOiB7ImRlc2lyZWRDYXBiaWxpdGllcyI6IHsicGFnZUxv
YWRTdHJhdGVneSI6ICJlYWdlciJ9fX0pCisgICAgYXNzZXJ0IHJlc3BbImNhcGFiaWxpdGllcyJd
WyJwYWdlTG9hZFN0cmF0ZWd5Il0gPT0gIm5vcm1hbCIKKworCitkZWYgdGVzdF92YWxpZF9idXRf
dW5tYXRjaGFibGVfa2V5KG5ld19zZXNzaW9uKToKKyAgICByZXNwLCBfID0gbmV3X3Nlc3Npb24o
eyJjYXBhYmlsaXRpZXMiOiB7CisgICAgICAiZmlyc3RNYXRjaCI6IFt7InBhZ2VMb2FkU3RyYXRl
Z3kiOiAiZWFnZXIiLCAiZm9vOnVubWF0Y2hhYmxlIjogVHJ1ZX0sCisgICAgICAgICAgICAgICAg
ICAgICB7InBhZ2VMb2FkU3RyYXRlZ3kiOiAibm9uZSJ9XX19KQorICAgIGFzc2VydCByZXNwWyJj
YXBhYmlsaXRpZXMiXVsicGFnZUxvYWRTdHJhdGVneSJdID09ICJub25lIgpkaWZmIC0tZ2l0IGEv
V2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9zZXNzaW9ucy9uZXdf
c2Vzc2lvbi9pbnZhbGlkX2NhcGFiaWxpdGllcy5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVk
L3czYy93ZWJkcml2ZXIvdGVzdHMvc2Vzc2lvbnMvbmV3X3Nlc3Npb24vaW52YWxpZF9jYXBhYmls
aXRpZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjMyNWM5YjI4
MWFmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRy
aXZlci90ZXN0cy9zZXNzaW9ucy9uZXdfc2Vzc2lvbi9pbnZhbGlkX2NhcGFiaWxpdGllcy5weQpA
QCAtMCwwICsxLDg4IEBACisjTUVUQTogdGltZW91dD1sb25nCisKK2ltcG9ydCBweXRlc3QKK2Zy
b20gd2ViZHJpdmVyIGltcG9ydCBlcnJvcgorCitmcm9tIGNvbmZ0ZXN0IGltcG9ydCBwcm9kdWN0
LCBmbGF0dGVuCisKKworQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKCJ2YWx1ZSIsIFtOb25lLCAx
LCAie30iLCBbXV0pCitkZWYgdGVzdF9pbnZhbGlkX2NhcGFiaWxpdGVzKG5ld19zZXNzaW9uLCB2
YWx1ZSk6CisgICAgd2l0aCBweXRlc3QucmFpc2VzKGVycm9yLkludmFsaWRBcmd1bWVudEV4Y2Vw
dGlvbik6CisgICAgICAgIG5ld19zZXNzaW9uKHsiY2FwYWJpbGl0aWVzIjogdmFsdWV9KQorCisK
K0BweXRlc3QubWFyay5wYXJhbWV0cml6ZSgidmFsdWUiLCBbTm9uZSwgMSwgInt9IiwgW11dKQor
ZGVmIHRlc3RfaW52YWxpZF9hbHdheXNfbWF0Y2gobmV3X3Nlc3Npb24sIHZhbHVlKToKKyAgICB3
aXRoIHB5dGVzdC5yYWlzZXMoZXJyb3IuSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKToKKyAgICAg
ICAgbmV3X3Nlc3Npb24oeyJjYXBhYmlsaXRpZXMiOiB7ImFsd2F5c01hdGNoIjogdmFsdWV9fSkK
KworCitAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoInZhbHVlIiwgW05vbmUsIDEsICJbXSIsIHt9
XSkKK2RlZiB0ZXN0X2ludmFsaWRfZmlyc3RfbWF0Y2gobmV3X3Nlc3Npb24sIHZhbHVlKToKKyAg
ICB3aXRoIHB5dGVzdC5yYWlzZXMoZXJyb3IuSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKToKKyAg
ICAgICAgbmV3X3Nlc3Npb24oeyJjYXBhYmlsaXRpZXMiOiB7ImZpcnN0TWF0Y2giOiB2YWx1ZX19
KQorCisKK2ludmFsaWRfZGF0YSA9IFsKKyAgICAoImFjY2VwdEluc2VjdXJlQ2VydHMiLCBbMSwg
W10sIHt9LCAiZmFsc2UiXSksCisgICAgKCJicm93c2VyTmFtZSIsIFsxLCBbXSwge30sIEZhbHNl
XSksCisgICAgKCJicm93c2VyVmVyc2lvbiIsIFsxLCBbXSwge30sIEZhbHNlXSksCisgICAgKCJw
bGF0Zm9ybU5hbWUiLCBbMSwgW10sIHt9LCBGYWxzZV0pLAorICAgICgicGFnZUxvYWRTdHJhdGVn
eSIsIFsxLCBbXSwge30sIEZhbHNlLCAiaW52YWxpZCIsICJOT05FIiwgIkVhZ2VyIiwgImVhZ2Vy
YmxhaCIsICJpbnRlcmFjdGl2ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICIgZWFnZXIi
LCAiZWFnZXIgIl0pLAorICAgICgicHJveHkiLCBbMSwgW10sICJ7fSIsIHsicHJveHlUeXBlIjog
IlNZU1RFTSJ9LCB7InByb3h5VHlwZSI6ICJzeXN0ZW1Tb21ldGhpbmcifSwKKyAgICAgICAgICAg
ICAgIHsicHJveHkgdHlwZSI6ICJwYWMifSwgeyJwcm94eS1UeXBlIjogInN5c3RlbSJ9LCB7InBy
b3h5X3R5cGUiOiAic3lzdGVtIn0sCisgICAgICAgICAgICAgICB7InByb3h5dHlwZSI6ICJzeXN0
ZW0ifSwgeyJQUk9YWVRZUEUiOiAic3lzdGVtIn0sIHsicHJveHlUeXBlIjogTm9uZX0sCisgICAg
ICAgICAgICAgICB7InByb3h5VHlwZSI6IDF9LCB7InByb3h5VHlwZSI6IFtdfSwgeyJwcm94eVR5
cGUiOiB7InZhbHVlIjogInN5c3RlbSJ9fSwKKyAgICAgICAgICAgICAgIHsiIHByb3h5VHlwZSI6
ICJzeXN0ZW0ifSwgeyJwcm94eVR5cGUgIjogInN5c3RlbSJ9LCB7InByb3h5VHlwZSAiOiAiIHN5
c3RlbSJ9LAorICAgICAgICAgICAgICAgeyJwcm94eVR5cGUiOiAic3lzdGVtICJ9XSksCisgICAg
KCJ0aW1lb3V0cyIsIFsxLCBbXSwgInt9Iiwge30sIEZhbHNlLCB7InBhZ2VMT0FEIjogMTB9LCB7
InBhZ2UgbG9hZCI6IDEwfSwKKyAgICAgICAgICAgICAgICAgIHsicGFnZSBsb2FkIjogMTB9LCB7
InBhZ2VMb2FkIjogIjEwIn0sIHsicGFnZUxvYWQiOiB7InZhbHVlIjogMTB9fSwKKyAgICAgICAg
ICAgICAgICAgIHsiaW52YWxpZCI6IDEwfSwgeyJwYWdlTG9hZCI6IC0xfSwgeyJwYWdlTG9hZCI6
IDIqKjY0fSwKKyAgICAgICAgICAgICAgICAgIHsicGFnZUxvYWQiOiBOb25lfSwgeyJwYWdlTG9h
ZCI6IDEuMX0sIHsicGFnZUxvYWQiOiAxMCwgImludmFsaWQiOiAxMH0sCisgICAgICAgICAgICAg
ICAgICB7IiBwYWdlTG9hZCI6IDEwfSwgeyJwYWdlTG9hZCAiOiAxMH1dKSwKKyAgICAoInVuaGFu
ZGxlZFByb21wdEJlaGF2aW9yIiwgWzEsIFtdLCB7fSwgRmFsc2UsICJESVNNSVNTIiwgImRpc21p
c3NBQkMiLCAiQWNjZXB0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgZGlz
bWlzcyIsICJkaXNtaXNzICJdKQorXQorCitAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoImJvZHki
LCBbbGFtYmRhIGtleSwgdmFsdWU6IHsiYWx3YXlzTWF0Y2giOiB7a2V5OiB2YWx1ZX19LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSBrZXksIHZhbHVlOiB7ImZpcnN0
TWF0Y2giOiBbe2tleTogdmFsdWV9XX1dKQorQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKCJrZXks
dmFsdWUiLCBmbGF0dGVuKHByb2R1Y3QoKml0ZW0pIGZvciBpdGVtIGluIGludmFsaWRfZGF0YSkp
CitkZWYgdGVzdF9pbnZhbGlkKG5ld19zZXNzaW9uLCBib2R5LCBrZXksIHZhbHVlKToKKyAgICB3
aXRoIHB5dGVzdC5yYWlzZXMoZXJyb3IuSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKToKKyAgICAg
ICAgcmVzcCA9IG5ld19zZXNzaW9uKHsiY2FwYWJpbGl0aWVzIjogYm9keShrZXksIHZhbHVlKX0p
CisKKworaW52YWxpZF9leHRlbnNpb25zID0gWworICAgICJmaXJlZm94IiwKKyAgICAiZmlyZWZv
eF9iaW5hcnkiLAorICAgICJmaXJlZm94T3B0aW9ucyIsCisgICAgImNocm9tZU9wdGlvbnMiLAor
ICAgICJhdXRvbWF0aWNJbnNwZWN0aW9uIiwKKyAgICAiYXV0b21hdGljUHJvZmlsaW5nIiwKKyAg
ICAicGxhdGZvcm0iLAorICAgICJ2ZXJzaW9uIiwKKyAgICAiYnJvd3NlciIsCisgICAgInBsYXRm
b3JtVmVyc2lvbiIsCisgICAgImphdmFzY3JpcHRFbmFibGVkIiwKKyAgICAibmF0aXZlRXZlbnRz
IiwKKyAgICAic2VsZW5pdW1Qcm90b2NvbCIsCisgICAgInByb2ZpbGUiLAorICAgICJ0cnVzdEFs
bFNTTENlcnRpZmljYXRlcyIsCisgICAgImluaXRpYWxCcm93c2VyVXJsIiwKKyAgICAicmVxdWly
ZVdpbmRvd0ZvY3VzIiwKKyAgICAibG9nRmlsZSIsCisgICAgImxvZ0xldmVsIiwKKyAgICAic2Fm
YXJpLm9wdGlvbnMiLAorICAgICJlbnN1cmVDbGVhblNlc3Npb24iLAorXQorCisKK0BweXRlc3Qu
bWFyay5wYXJhbWV0cml6ZSgiYm9keSIsIFtsYW1iZGEga2V5LCB2YWx1ZTogeyJhbHdheXNNYXRj
aCI6IHtrZXk6IHZhbHVlfX0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFt
YmRhIGtleSwgdmFsdWU6IHsiZmlyc3RNYXRjaCI6IFt7a2V5OiB2YWx1ZX1dfV0pCitAcHl0ZXN0
Lm1hcmsucGFyYW1ldHJpemUoImtleSIsIGludmFsaWRfZXh0ZW5zaW9ucykKK2RlZiB0ZXN0X2lu
dmFsaWQobmV3X3Nlc3Npb24sIGJvZHksIGtleSk6CisgICAgd2l0aCBweXRlc3QucmFpc2VzKGVy
cm9yLkludmFsaWRBcmd1bWVudEV4Y2VwdGlvbik6CisgICAgICAgIHJlc3AgPSBuZXdfc2Vzc2lv
bih7ImNhcGFiaWxpdGllcyI6IGJvZHkoa2V5LCB7fSl9KQorCmRpZmYgLS1naXQgYS9XZWJEcml2
ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL3Nlc3Npb25zL25ld19zZXNzaW9u
L21lcmdlLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9z
ZXNzaW9ucy9uZXdfc2Vzc2lvbi9tZXJnZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMC4uMmU2NDYyMDQ1NWMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL3Nlc3Npb25zL25ld19zZXNzaW9uL21lcmdl
LnB5CkBAIC0wLDAgKzEsNzYgQEAKKyNNRVRBOiB0aW1lb3V0PWxvbmcKKworaW1wb3J0IHB5dGVz
dAorZnJvbSB3ZWJkcml2ZXIgaW1wb3J0IGVycm9yCisKK2Zyb20gY29uZnRlc3QgaW1wb3J0IHBs
YXRmb3JtX25hbWUKKworCitAcHl0ZXN0Lm1hcmsuc2tpcGlmKHBsYXRmb3JtX25hbWUoKSBpcyBO
b25lLCByZWFzb249IlVuc3VwcG9ydGVkIHBsYXRmb3JtIikKK0BweXRlc3QubWFyay5wYXJhbWV0
cml6ZSgiYm9keSIsIFtsYW1iZGEga2V5LCB2YWx1ZTogeyJhbHdheXNNYXRjaCI6IHtrZXk6IHZh
bHVlfX0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhIGtleSwgdmFs
dWU6IHsiZmlyc3RNYXRjaCI6IFt7a2V5OiB2YWx1ZX1dfV0pCitkZWYgdGVzdF9wbGF0Zm9ybV9u
YW1lKG5ld19zZXNzaW9uLCBwbGF0Zm9ybV9uYW1lLCBib2R5KToKKyAgICByZXNwLCBfID0gbmV3
X3Nlc3Npb24oeyJjYXBhYmlsaXRpZXMiOiBib2R5KCJwbGF0Zm9ybU5hbWUiLCBwbGF0Zm9ybV9u
YW1lKX0pCisgICAgYXNzZXJ0IHJlc3BbImNhcGFiaWxpdGllcyJdWyJwbGF0Zm9ybU5hbWUiXSA9
PSBwbGF0Zm9ybV9uYW1lCisKKworaW52YWxpZF9tZXJnZSA9IFsKKyAgICAoImFjY2VwdEluc2Vj
dXJlQ2VydHMiLCAoVHJ1ZSwgVHJ1ZSkpLAorICAgICgidW5oYW5kbGVkUHJvbXB0QmVoYXZpb3Ii
LCAoImFjY2VwdCIsICJhY2NlcHQiKSksCisgICAgKCJ1bmhhbmRsZWRQcm9tcHRCZWhhdmlvciIs
ICgiYWNjZXB0IiwgImRpc21pc3MiKSksCisgICAgKCJ0aW1lb3V0cyIsICh7InNjcmlwdCI6IDEw
fSwgeyJzY3JpcHQiOiAxMH0pKSwKKyAgICAoInRpbWVvdXRzIiwgKHsic2NyaXB0IjogMTB9LCB7
InBhZ2VMb2FkIjogMTB9KSksCitdCisKKworQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKCJrZXks
dmFsdWUiLCBpbnZhbGlkX21lcmdlKQorZGVmIHRlc3RfbWVyZ2VfaW52YWxpZChuZXdfc2Vzc2lv
biwga2V5LCB2YWx1ZSk6CisgICAgd2l0aCBweXRlc3QucmFpc2VzKGVycm9yLkludmFsaWRBcmd1
bWVudEV4Y2VwdGlvbik6CisgICAgICAgICBuZXdfc2Vzc2lvbih7ImNhcGFiaWxpdGllcyI6Cisg
ICAgICAgICAgICAgICAgICAgICAgeyJhbHdheXNNYXRjaCI6IHtrZXk6IHZhbHVlWzBdfSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgImZpcnN0TWF0Y2giOiBbe30sIHtrZXk6IHZhbHVlWzFdfV19
fSkKKworCitAcHl0ZXN0Lm1hcmsuc2tpcGlmKHBsYXRmb3JtX25hbWUoKSBpcyBOb25lLCByZWFz
b249IlVuc3VwcG9ydGVkIHBsYXRmb3JtIikKK2RlZiB0ZXN0X21lcmdlX3BsYXRmb3JtTmFtZShu
ZXdfc2Vzc2lvbiwgcGxhdGZvcm1fbmFtZSk6CisgICAgcmVzcCwgXyA9IG5ld19zZXNzaW9uKHsi
Y2FwYWJpbGl0aWVzIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHsiYWx3YXlzTWF0Y2giOiB7
InRpbWVvdXRzIjogeyJzY3JpcHQiOiAxMH19fSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJm
aXJzdE1hdGNoIjogWworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgInBsYXRmb3JtTmFtZSI6IHBsYXRmb3JtX25hbWUudXBwZXIo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhZ2VMb2FkU3RyYXRlZ3kiOiAi
bm9uZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBsYXRmb3JtTmFt
ZSI6IHBsYXRmb3JtX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYWdl
TG9hZFN0cmF0ZWd5IjogImVhZ2VyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIF19KQorCisgICAgYXNzZXJ0IHJlc3BbImNhcGFiaWxpdGll
cyJdWyJwbGF0Zm9ybU5hbWUiXSA9PSBwbGF0Zm9ybV9uYW1lCisgICAgYXNzZXJ0IHJlc3BbImNh
cGFiaWxpdGllcyJdWyJwYWdlTG9hZFN0cmF0ZWd5Il0gPT0gImVhZ2VyIgorCisKK2RlZiB0ZXN0
X21lcmdlX2Jyb3dzZXJOYW1lKG5ld19zZXNzaW9uKToKKyAgICByZXNwLCBzZXNzaW9uID0gbmV3
X3Nlc3Npb24oe30pCisgICAgYnJvd3Nlcl9zZXR0aW5ncyA9IHsKKyAgICAgICAgImJyb3dzZXJO
YW1lIjogcmVzcFsiY2FwYWJpbGl0aWVzIl1bImJyb3dzZXJOYW1lIl0sCisgICAgICAgICJicm93
c2VyVmVyc2lvbiI6IHJlc3BbImNhcGFiaWxpdGllcyJdWyJicm93c2VyVmVyc2lvbiJdLAorICAg
ICAgICAicGxhdGZvcm1OYW1lIjogcmVzcFsiY2FwYWJpbGl0aWVzIl1bInBsYXRmb3JtTmFtZSJd
CisgICAgfQorICAgIHNlc3Npb24uZW5kKCkKKworICAgIHJlc3AsIF8gPSBuZXdfc2Vzc2lvbih7
ImNhcGFiaWxpdGllcyI6CisgICAgICAgICAgICAgICAgICAgICAgICB7ImFsd2F5c01hdGNoIjog
eyJ0aW1lb3V0cyI6IHsic2NyaXB0IjogMTB9fX0sCisgICAgICAgICAgICAgICAgICAgICAgICAi
Zmlyc3RNYXRjaCI6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJicm93c2VyTmFtZSI6IGJyb3dzZXJfc2V0dGluZ3NbImJy
b3dzZXJOYW1lIl0gKyAiaW52YWxpZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJwYWdlTG9hZFN0cmF0ZWd5IjogIm5vbmUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJicm93c2VyTmFtZSI6IGJyb3dzZXJfc2V0dGluZ3NbImJyb3dzZXJOYW1lIl0s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYWdlTG9hZFN0cmF0ZWd5IjogImVh
Z2VyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIF19KQorCisgICAgYXNzZXJ0IHJlc3BbImNhcGFiaWxpdGllcyJdWyJicm93c2VyTmFtZSJd
ID09IGJyb3dzZXJfc2V0dGluZ3NbJ2Jyb3dzZXJOYW1lJ10KKyAgICBhc3NlcnQgcmVzcFsiY2Fw
YWJpbGl0aWVzIl1bInBhZ2VMb2FkU3RyYXRlZ3kiXSA9PSAiZWFnZXIiCmRpZmYgLS1naXQgYS9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL3Nlc3Npb25zL25ld19z
ZXNzaW9uL3Jlc3BvbnNlLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZl
ci90ZXN0cy9zZXNzaW9ucy9uZXdfc2Vzc2lvbi9yZXNwb25zZS5weQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNjY2OTU3M2JhMmMKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL3Nlc3Npb25zL25ld19z
ZXNzaW9uL3Jlc3BvbnNlLnB5CkBAIC0wLDAgKzEsNTQgQEAKKyMgTUVUQTogdGltZW91dD1sb25n
CisKK2ltcG9ydCB1dWlkCisKK2RlZiB0ZXN0X3Jlc3Bfc2Vzc2lvbmlkKG5ld19zZXNzaW9uKToK
KyAgICByZXNwLCBfID0gbmV3X3Nlc3Npb24oeyJjYXBhYmlsaXRpZXMiOiB7fX0pCisgICAgYXNz
ZXJ0IGlzaW5zdGFuY2UocmVzcFsic2Vzc2lvbklkIl0sIHVuaWNvZGUpCisgICAgdXVpZC5VVUlE
KGhleD1yZXNwWyJzZXNzaW9uSWQiXSkKKworCitkZWYgdGVzdF9yZXNwX2NhcGFiaWxpdGVzKG5l
d19zZXNzaW9uKToKKyAgICByZXNwLCBfID0gbmV3X3Nlc3Npb24oeyJjYXBhYmlsaXRpZXMiOiB7
fX0pCisgICAgYXNzZXJ0IGlzaW5zdGFuY2UocmVzcFsic2Vzc2lvbklkIl0sIHVuaWNvZGUpCisg
ICAgYXNzZXJ0IGlzaW5zdGFuY2UocmVzcFsiY2FwYWJpbGl0aWVzIl0sIGRpY3QpCisgICAgYXNz
ZXJ0IHsiYnJvd3Nlck5hbWUiLAorICAgICAgICAgICAgImJyb3dzZXJWZXJzaW9uIiwKKyAgICAg
ICAgICAgICJwbGF0Zm9ybU5hbWUiLAorICAgICAgICAgICAgImFjY2VwdEluc2VjdXJlQ2VydHMi
LAorICAgICAgICAgICAgInNldFdpbmRvd1JlY3QiLAorICAgICAgICAgICAgInRpbWVvdXRzIiwK
KyAgICAgICAgICAgICJwcm94eSIsCisgICAgICAgICAgICAicGFnZUxvYWRTdHJhdGVneSJ9Lmlz
c3Vic2V0KAorICAgICAgICAgICAgICAgIHNldChyZXNwWyJjYXBhYmlsaXRpZXMiXS5rZXlzKCkp
KQorCisKK2RlZiB0ZXN0X3Jlc3BfZGF0YShuZXdfc2Vzc2lvbiwgcGxhdGZvcm1fbmFtZSk6Cisg
ICAgcmVzcCwgXyA9IG5ld19zZXNzaW9uKHsiY2FwYWJpbGl0aWVzIjoge319KQorCisgICAgYXNz
ZXJ0IGlzaW5zdGFuY2UocmVzcFsiY2FwYWJpbGl0aWVzIl1bImJyb3dzZXJOYW1lIl0sIHVuaWNv
ZGUpCisgICAgYXNzZXJ0IGlzaW5zdGFuY2UocmVzcFsiY2FwYWJpbGl0aWVzIl1bImJyb3dzZXJW
ZXJzaW9uIl0sIHVuaWNvZGUpCisgICAgaWYgcGxhdGZvcm1fbmFtZToKKyAgICAgICAgYXNzZXJ0
IHJlc3BbImNhcGFiaWxpdGllcyJdWyJwbGF0Zm9ybU5hbWUiXSA9PSBwbGF0Zm9ybV9uYW1lCisg
ICAgZWxzZToKKyAgICAgICAgYXNzZXJ0ICJwbGF0Zm9ybU5hbWUiIGluIHJlc3BbImNhcGFiaWxp
dGllcyJdCisgICAgYXNzZXJ0IHJlc3BbImNhcGFiaWxpdGllcyJdWyJhY2NlcHRJbnNlY3VyZUNl
cnRzIl0gaXMgRmFsc2UKKyAgICBhc3NlcnQgaXNpbnN0YW5jZShyZXNwWyJjYXBhYmlsaXRpZXMi
XVsic2V0V2luZG93UmVjdCJdLCBib29sKQorICAgIGFzc2VydCByZXNwWyJjYXBhYmlsaXRpZXMi
XVsidGltZW91dHMiXVsiaW1wbGljaXQiXSA9PSAwCisgICAgYXNzZXJ0IHJlc3BbImNhcGFiaWxp
dGllcyJdWyJ0aW1lb3V0cyJdWyJwYWdlTG9hZCJdID09IDMwMDAwMAorICAgIGFzc2VydCByZXNw
WyJjYXBhYmlsaXRpZXMiXVsidGltZW91dHMiXVsic2NyaXB0Il0gPT0gMzAwMDAKKyAgICBhc3Nl
cnQgcmVzcFsiY2FwYWJpbGl0aWVzIl1bInByb3h5Il0gPT0ge30KKyAgICBhc3NlcnQgcmVzcFsi
Y2FwYWJpbGl0aWVzIl1bInBhZ2VMb2FkU3RyYXRlZ3kiXSA9PSAibm9ybWFsIgorCisKK2RlZiB0
ZXN0X3RpbWVvdXRzKG5ld19zZXNzaW9uLCBwbGF0Zm9ybV9uYW1lKToKKyAgICByZXNwLCBfID0g
bmV3X3Nlc3Npb24oeyJjYXBhYmlsaXRpZXMiOiB7ImFsd2F5c01hdGNoIjogeyJ0aW1lb3V0cyI6
IHsiaW1wbGljaXQiOiAxMDAwfX19fSkKKyAgICBhc3NlcnQgcmVzcFsiY2FwYWJpbGl0aWVzIl1b
InRpbWVvdXRzIl0gPT0geworICAgICAgICAiaW1wbGljaXQiOiAxMDAwLAorICAgICAgICAicGFn
ZUxvYWQiOiAzMDAwMDAsCisgICAgICAgICJzY3JpcHQiOiAzMDAwMAorICAgIH0KKworZGVmIHRl
c3RfcGFnZUxvYWRTdHJhdGVneShuZXdfc2Vzc2lvbiwgcGxhdGZvcm1fbmFtZSk6CisgICAgcmVz
cCwgXyA9IG5ld19zZXNzaW9uKHsiY2FwYWJpbGl0aWVzIjogeyJhbHdheXNNYXRjaCI6IHsicGFn
ZUxvYWRTdHJhdGVneSI6ICJlYWdlciJ9fX0pCisgICAgYXNzZXJ0IHJlc3BbImNhcGFiaWxpdGll
cyJdWyJwYWdlTG9hZFN0cmF0ZWd5Il0gPT0gImVhZ2VyIgpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVy
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9zZXRfd2luZG93X3JlY3QucHkgYi9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL3NldF93aW5kb3dfcmVj
dC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYjMwMGQwOWQxMTEK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVy
L3Rlc3RzL3NldF93aW5kb3dfcmVjdC5weQpAQCAtMCwwICsxLDUwNiBAQAorIyBNRVRBOiB0aW1l
b3V0PWxvbmcKKworaW1wb3J0IHB5dGVzdAorCitmcm9tIHRlc3RzLnN1cHBvcnQuYXNzZXJ0cyBp
bXBvcnQgYXNzZXJ0X2Vycm9yLCBhc3NlcnRfZGlhbG9nX2hhbmRsZWQsIGFzc2VydF9zdWNjZXNz
Citmcm9tIHRlc3RzLnN1cHBvcnQuZml4dHVyZXMgaW1wb3J0IGNyZWF0ZV9kaWFsb2cKK2Zyb20g
dGVzdHMuc3VwcG9ydC5pbmxpbmUgaW1wb3J0IGlubGluZQorCisKK2FsZXJ0X2RvYyA9IGlubGlu
ZSgiPHNjcmlwdD53aW5kb3cuYWxlcnQoKTwvc2NyaXB0PiIpCisKKworZGVmIHNldF93aW5kb3df
cmVjdChzZXNzaW9uLCByZWN0KToKKyAgICByZXR1cm4gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgi
UE9TVCIsICJzZXNzaW9uLyVzL3dpbmRvdy9yZWN0IiAlIHNlc3Npb24uc2Vzc2lvbl9pZCwgcmVj
dCkKKworCisjIDEwLjcuMiBTZXQgV2luZG93IFJlY3QKKworCitkZWYgdGVzdF9jdXJyZW50X3Rv
cF9sZXZlbF9icm93c2luZ19jb250ZXh0X25vX2xvbmdlcl9vcGVuKHNlc3Npb24sIGNyZWF0ZV93
aW5kb3cpOgorICAgICIiIgorICAgIDEuIElmIHRoZSBjdXJyZW50IHRvcC1sZXZlbCBicm93c2lu
ZyBjb250ZXh0IGlzIG5vIGxvbmdlciBvcGVuLAorICAgIHJldHVybiBlcnJvciB3aXRoIGVycm9y
IGNvZGUgbm8gc3VjaCB3aW5kb3cuCisKKyAgICAiIiIKKyAgICBzZXNzaW9uLndpbmRvd19oYW5k
bGUgPSBjcmVhdGVfd2luZG93KCkKKyAgICBzZXNzaW9uLmNsb3NlKCkKKyAgICByZXNwb25zZSA9
IHNldF93aW5kb3dfcmVjdChzZXNzaW9uLCB7fSkKKyAgICBhc3NlcnRfZXJyb3IocmVzcG9uc2Us
ICJubyBzdWNoIHdpbmRvdyIpCisKKworZGVmIHRlc3RfaGFuZGxlX3Byb21wdF9kaXNtaXNzKCk6
CisgICAgIiIiVE9ETyIiIgorCisKK2RlZiB0ZXN0X2hhbmRsZV9wcm9tcHRfYWNjZXB0KG5ld19z
ZXNzaW9uKToKKyAgICAiIiIKKyAgICAyLiBIYW5kbGUgYW55IHVzZXIgcHJvbXB0cyBhbmQgcmV0
dXJuIGl0cyB2YWx1ZSBpZiBpdCBpcyBhbiBlcnJvci4KKworICAgIFsuLi5dCisKKyAgICBJbiBv
cmRlciB0byBoYW5kbGUgYW55IHVzZXIgcHJvbXB0cyBhIHJlbW90ZSBlbmQgbXVzdCB0YWtlIHRo
ZQorICAgIGZvbGxvd2luZyBzdGVwczoKKworICAgICAgWy4uLl0KKworICAgICAgMi4gUGVyZm9y
bSB0aGUgZm9sbG93aW5nIHN1YnN0ZXBzIGJhc2VkIG9uIHRoZSBjdXJyZW50IHNlc3Npb24ncwor
ICAgICAgdXNlciBwcm9tcHQgaGFuZGxlcjoKKworICAgICAgICBbLi4uXQorCisgICAgICAgIC0g
YWNjZXB0IHN0YXRlCisgICAgICAgICAgIEFjY2VwdCB0aGUgY3VycmVudCB1c2VyIHByb21wdC4K
KworICAgICIiIgorICAgIF8sIHNlc3Npb24gPSBuZXdfc2Vzc2lvbigKKyAgICAgICAgeyJhbHdh
eXNNYXRjaCI6IHsidW5oYW5kbGVkUHJvbXB0QmVoYXZpb3IiOiAiYWNjZXB0In19KQorICAgIG9y
aWdpbmFsID0gc2Vzc2lvbi53aW5kb3cucmVjdAorCisgICAgIyBzdGVwIDIKKyAgICBjcmVhdGVf
ZGlhbG9nKHNlc3Npb24pKCJhbGVydCIsIHRleHQ9ImRpc21pc3MgIzEiLCByZXN1bHRfdmFyPSJk
aXNtaXNzMSIpCisgICAgcmVzdWx0ID0gc2V0X3dpbmRvd19yZWN0KHNlc3Npb24sIHsieCI6IG9y
aWdpbmFsWyJ4Il0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieSI6
IG9yaWdpbmFsWyJ5Il19KQorICAgIGFzc2VydCByZXN1bHQuc3RhdHVzID09IDIwMAorICAgIGFz
c2VydF9kaWFsb2dfaGFuZGxlZChzZXNzaW9uLCAiZGlzbWlzcyAjMSIpCisKKyAgICBjcmVhdGVf
ZGlhbG9nKHNlc3Npb24pKCJjb25maXJtIiwgdGV4dD0iZGlzbWlzcyAjMiIsIHJlc3VsdF92YXI9
ImRpc21pc3MyIikKKyAgICByZXN1bHQgPSBzZXRfd2luZG93X3JlY3Qoc2Vzc2lvbiwgeyJ4Ijog
b3JpZ2luYWxbIngiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ5
Ijogb3JpZ2luYWxbInkiXX0pCisgICAgYXNzZXJ0IHJlc3VsdC5zdGF0dXMgPT0gMjAwCisgICAg
YXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNlc3Npb24sICJkaXNtaXNzICMyIikKKworICAgIGNyZWF0
ZV9kaWFsb2coc2Vzc2lvbikoInByb21wdCIsIHRleHQ9ImRpc21pc3MgIzMiLCByZXN1bHRfdmFy
PSJkaXNtaXNzMyIpCisgICAgcmVzdWx0ID0gc2V0X3dpbmRvd19yZWN0KHNlc3Npb24sIHsieCI6
IG9yaWdpbmFsWyJ4Il0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
eSI6IG9yaWdpbmFsWyJ5Il19KQorICAgIGFzc2VydF9zdWNjZXNzKHJlc3VsdCkKKyAgICBhc3Nl
cnRfZGlhbG9nX2hhbmRsZWQoc2Vzc2lvbiwgImRpc21pc3MgIzMiKQorCisKK2RlZiB0ZXN0X2hh
bmRsZV9wcm9tcHRfZGlzbWlzc19hbmRfbm90aWZ5KCk6CisgICAgIiIiVE9ETyIiIgorCisKK2Rl
ZiB0ZXN0X2hhbmRsZV9wcm9tcHRfYWNjZXB0X2FuZF9ub3RpZnkoKToKKyAgICAiIiJUT0RPIiIi
CisKKworZGVmIHRlc3RfaGFuZGxlX3Byb21wdF9pZ25vcmUoKToKKyAgICAiIiJUT0RPIiIiCisK
KworZGVmIHRlc3RfaGFuZGxlX3Byb21wdF9taXNzaW5nX3ZhbHVlKHNlc3Npb24sIGNyZWF0ZV9k
aWFsb2cpOgorICAgICIiIgorICAgIDIuIEhhbmRsZSBhbnkgdXNlciBwcm9tcHRzIGFuZCByZXR1
cm4gaXRzIHZhbHVlIGlmIGl0IGlzIGFuIGVycm9yLgorCisgICAgWy4uLl0KKworICAgIEluIG9y
ZGVyIHRvIGhhbmRsZSBhbnkgdXNlciBwcm9tcHRzIGEgcmVtb3RlIGVuZCBtdXN0IHRha2UgdGhl
CisgICAgZm9sbG93aW5nIHN0ZXBzOgorCisgICAgICBbLi4uXQorCisgICAgICAyLiBQZXJmb3Jt
IHRoZSBmb2xsb3dpbmcgc3Vic3RlcHMgYmFzZWQgb24gdGhlIGN1cnJlbnQgc2Vzc2lvbidzCisg
ICAgICB1c2VyIHByb21wdCBoYW5kbGVyOgorCisgICAgICAgIFsuLi5dCisKKyAgICAgICAgLSBt
aXNzaW5nIHZhbHVlIGRlZmF1bHQgc3RhdGUKKyAgICAgICAgICAgMS4gRGlzbWlzcyB0aGUgY3Vy
cmVudCB1c2VyIHByb21wdC4KKyAgICAgICAgICAgMi4gUmV0dXJuIGVycm9yIHdpdGggZXJyb3Ig
Y29kZSB1bmV4cGVjdGVkIGFsZXJ0IG9wZW4uCisKKyAgICAiIiIKKworICAgIG9yaWdpbmFsID0g
c2Vzc2lvbi53aW5kb3cucmVjdAorCisgICAgIyBzdGVwIDIKKyAgICBjcmVhdGVfZGlhbG9nKCJh
bGVydCIsIHRleHQ9ImRpc21pc3MgIzEiLCByZXN1bHRfdmFyPSJkaXNtaXNzMSIpCisKKyAgICBy
ZXN1bHQgPSBzZXRfd2luZG93X3JlY3Qoc2Vzc2lvbiwgeyJ4Ijogb3JpZ2luYWxbIngiXSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ5Ijogb3JpZ2luYWxbInkiXX0p
CisgICAgYXNzZXJ0X2Vycm9yKHJlc3VsdCwgInVuZXhwZWN0ZWQgYWxlcnQgb3BlbiIpCisgICAg
YXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNlc3Npb24sICJkaXNtaXNzICMxIikKKworICAgIGNyZWF0
ZV9kaWFsb2coImNvbmZpcm0iLCB0ZXh0PSJkaXNtaXNzICMyIiwgcmVzdWx0X3Zhcj0iZGlzbWlz
czIiKQorCisgICAgcmVzdWx0ID0gc2V0X3dpbmRvd19yZWN0KHNlc3Npb24sIHsieCI6IG9yaWdp
bmFsWyJ4Il0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieSI6IG9y
aWdpbmFsWyJ5Il19KQorICAgIGFzc2VydF9lcnJvcihyZXN1bHQsICJ1bmV4cGVjdGVkIGFsZXJ0
IG9wZW4iKQorICAgIGFzc2VydF9kaWFsb2dfaGFuZGxlZChzZXNzaW9uLCAiZGlzbWlzcyAjMiIp
CisKKyAgICBjcmVhdGVfZGlhbG9nKCJwcm9tcHQiLCB0ZXh0PSJkaXNtaXNzICMzIiwgcmVzdWx0
X3Zhcj0iZGlzbWlzczMiKQorCisgICAgcmVzdWx0ID0gc2V0X3dpbmRvd19yZWN0KHNlc3Npb24s
IHsieCI6IG9yaWdpbmFsWyJ4Il0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAieSI6IG9yaWdpbmFsWyJ5Il19KQorICAgIGFzc2VydF9lcnJvcihyZXN1bHQsICJ1bmV4
cGVjdGVkIGFsZXJ0IG9wZW4iKQorICAgIGFzc2VydF9kaWFsb2dfaGFuZGxlZChzZXNzaW9uLCAi
ZGlzbWlzcyAjMyIpCisKKworQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKCJyZWN0IiwgWworICAg
IHsid2lkdGgiOiAiYSJ9LAorICAgIHsiaGVpZ2h0IjogImIifSwKKyAgICB7IndpZHRoIjogImEi
LCAiaGVpZ2h0IjogImIifSwKKyAgICB7IngiOiAiYSJ9LAorICAgIHsieSI6ICJiIn0sCisgICAg
eyJ4IjogImEiLCAieSI6ICJiIn0sCisgICAgeyJ3aWR0aCI6ICJhIiwgImhlaWdodCI6ICJiIiwg
IngiOiAiYSIsICJ5IjogImIifSwKKworICAgIHsid2lkdGgiOiBUcnVlfSwKKyAgICB7ImhlaWdo
dCI6IEZhbHNlfSwKKyAgICB7IndpZHRoIjogVHJ1ZSwgImhlaWdodCI6IEZhbHNlfSwKKyAgICB7
IngiOiBUcnVlfSwKKyAgICB7InkiOiBGYWxzZX0sCisgICAgeyJ4IjogVHJ1ZSwgInkiOiBGYWxz
ZX0sCisgICAgeyJ3aWR0aCI6IFRydWUsICJoZWlnaHQiOiBGYWxzZSwgIngiOiBUcnVlLCAieSI6
IEZhbHNlfSwKKworICAgIHsid2lkdGgiOiBbXX0sCisgICAgeyJoZWlnaHQiOiBbXX0sCisgICAg
eyJ3aWR0aCI6IFtdLCAiaGVpZ2h0IjogW119LAorICAgIHsieCI6IFtdfSwKKyAgICB7InkiOiBb
XX0sCisgICAgeyJ4IjogW10sICJ5IjogW119LAorICAgIHsid2lkdGgiOiBbXSwgImhlaWdodCI6
IFtdLCAieCI6IFtdLCAieSI6IFtdfSwKKworICAgIHsiaGVpZ2h0Ijoge319LAorICAgIHsid2lk
dGgiOiB7fX0sCisgICAgeyJoZWlnaHQiOiB7fSwgIndpZHRoIjoge319LAorICAgIHsieCI6IHt9
fSwKKyAgICB7InkiOiB7fX0sCisgICAgeyJ4Ijoge30sICJ5Ijoge319LAorICAgIHsid2lkdGgi
OiB7fSwgImhlaWdodCI6IHt9LCAieCI6IHt9LCAieSI6IHt9fSwKK10pCitkZWYgdGVzdF9pbnZh
bGlkX3R5cGVzKHNlc3Npb24sIHJlY3QpOgorICAgICIiIgorICAgIDguIElmIHdpZHRoIG9yIGhl
aWdodCBpcyBuZWl0aGVyIG51bGwgbm9yIGEgTnVtYmVyIGZyb20gMCB0byAyXjMxIC0KKyAgICAx
LCByZXR1cm4gZXJyb3Igd2l0aCBlcnJvciBjb2RlIGludmFsaWQgYXJndW1lbnQuCisKKyAgICA5
LiBJZiB4IG9yIHkgaXMgbmVpdGhlciBudWxsIG5vciBhIE51bWJlciBmcm9tIC0oMl4zMSkgdG8g
Ml4zMSAtIDEsCisgICAgcmV0dXJuIGVycm9yIHdpdGggZXJyb3IgY29kZSBpbnZhbGlkIGFyZ3Vt
ZW50LgorICAgICIiIgorICAgIHJlc3BvbnNlID0gc2V0X3dpbmRvd19yZWN0KHNlc3Npb24sIHJl
Y3QpCisgICAgYXNzZXJ0X2Vycm9yKHJlc3BvbnNlLCAiaW52YWxpZCBhcmd1bWVudCIpCisKKwor
QHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKCJyZWN0IiwgWworICAgIHsid2lkdGgiOiAtMX0sCisg
ICAgeyJoZWlnaHQiOiAtMn0sCisgICAgeyJ3aWR0aCI6IC0xLCAiaGVpZ2h0IjogLTJ9LAorXSkK
K2RlZiB0ZXN0X291dF9vZl9ib3VuZHMoc2Vzc2lvbiwgcmVjdCk6CisgICAgIiIiCisgICAgOC4g
SWYgd2lkdGggb3IgaGVpZ2h0IGlzIG5laXRoZXIgbnVsbCBub3IgYSBOdW1iZXIgZnJvbSAwIHRv
IDJeMzEgLQorICAgIDEsIHJldHVybiBlcnJvciB3aXRoIGVycm9yIGNvZGUgaW52YWxpZCBhcmd1
bWVudC4KKworICAgIDkuIElmIHggb3IgeSBpcyBuZWl0aGVyIG51bGwgbm9yIGEgTnVtYmVyIGZy
b20gLSgyXjMxKSB0byAyXjMxIC0gMSwKKyAgICByZXR1cm4gZXJyb3Igd2l0aCBlcnJvciBjb2Rl
IGludmFsaWQgYXJndW1lbnQuCisgICAgIiIiCisgICAgcmVzcG9uc2UgPSBzZXRfd2luZG93X3Jl
Y3Qoc2Vzc2lvbiwgcmVjdCkKKyAgICBhc3NlcnRfZXJyb3IocmVzcG9uc2UsICJpbnZhbGlkIGFy
Z3VtZW50IikKKworCitkZWYgdGVzdF93aWR0aF9oZWlnaHRfZmxvYXRzKHNlc3Npb24pOgorICAg
ICIiIgorICAgIDguIElmIHdpZHRoIG9yIGhlaWdodCBpcyBuZWl0aGVyIG51bGwgbm9yIGEgTnVt
YmVyIGZyb20gMCB0byAyXjMxIC0KKyAgICAxLCByZXR1cm4gZXJyb3Igd2l0aCBlcnJvciBjb2Rl
IGludmFsaWQgYXJndW1lbnQuCisgICAgIiIiCisKKyAgICByZXNwb25zZSA9IHNldF93aW5kb3df
cmVjdChzZXNzaW9uLCB7IndpZHRoIjogNTAwLjUsICJoZWlnaHQiOiA0MjB9KQorICAgIHZhbHVl
ID0gYXNzZXJ0X3N1Y2Nlc3MocmVzcG9uc2UpCisgICAgYXNzZXJ0IHZhbHVlWyJ3aWR0aCJdID09
IDUwMAorICAgIGFzc2VydCB2YWx1ZVsiaGVpZ2h0Il0gPT0gNDIwCisKKyAgICByZXNwb25zZSA9
IHNldF93aW5kb3dfcmVjdChzZXNzaW9uLCB7IndpZHRoIjogNTAwLCAiaGVpZ2h0IjogNDUwLjV9
KQorICAgIHZhbHVlID0gYXNzZXJ0X3N1Y2Nlc3MocmVzcG9uc2UpCisgICAgYXNzZXJ0IHZhbHVl
WyJ3aWR0aCJdID09IDUwMAorICAgIGFzc2VydCB2YWx1ZVsiaGVpZ2h0Il0gPT0gNDUwCisKKwor
ZGVmIHRlc3RfeF95X2Zsb2F0cyhzZXNzaW9uKToKKyAgICAiIiIKKyAgICA5LiBJZiB4IG9yIHkg
aXMgbmVpdGhlciBudWxsIG5vciBhIE51bWJlciBmcm9tIC0oMl4zMSkgdG8gMl4zMSAtIDEsCisg
ICAgcmV0dXJuIGVycm9yIHdpdGggZXJyb3IgY29kZSBpbnZhbGlkIGFyZ3VtZW50LgorICAgICIi
IgorCisgICAgcmVzcG9uc2UgPSBzZXRfd2luZG93X3JlY3Qoc2Vzc2lvbiwgeyJ4IjogMC41LCAi
eSI6IDQyMH0pCisgICAgdmFsdWUgPSBhc3NlcnRfc3VjY2VzcyhyZXNwb25zZSkKKyAgICBhc3Nl
cnQgdmFsdWVbIngiXSA9PSAwCisgICAgYXNzZXJ0IHZhbHVlWyJ5Il0gPT0gNDIwCisKKyAgICBy
ZXNwb25zZSA9IHNldF93aW5kb3dfcmVjdChzZXNzaW9uLCB7IngiOiAxMDAsICJ5IjogNDUwLjV9
KQorICAgIHZhbHVlID0gYXNzZXJ0X3N1Y2Nlc3MocmVzcG9uc2UpCisgICAgYXNzZXJ0IHZhbHVl
WyJ4Il0gPT0gMTAwCisgICAgYXNzZXJ0IHZhbHVlWyJ5Il0gPT0gNDUwCisKKworQHB5dGVzdC5t
YXJrLnBhcmFtZXRyaXplKCJyZWN0IiwgWworICAgIHt9LAorCisgICAgeyJ3aWR0aCI6IE5vbmV9
LAorICAgIHsiaGVpZ2h0IjogTm9uZX0sCisgICAgeyJ3aWR0aCI6IE5vbmUsICJoZWlnaHQiOiBO
b25lfSwKKworICAgIHsieCI6IE5vbmV9LAorICAgIHsieSI6IE5vbmV9LAorICAgIHsieCI6IE5v
bmUsICJ5IjogTm9uZX0sCisKKyAgICB7IndpZHRoIjogTm9uZSwgIngiOiBOb25lfSwKKyAgICB7
IndpZHRoIjogTm9uZSwgInkiOiBOb25lfSwKKyAgICB7ImhlaWdodCI6IE5vbmUsICJ4IjogTm9u
ZX0sCisgICAgeyJoZWlnaHQiOiBOb25lLCAiWSI6IE5vbmV9LAorCisgICAgeyJ3aWR0aCI6IE5v
bmUsICJoZWlnaHQiOiBOb25lLCAieCI6IE5vbmUsICJ5IjogTm9uZX0sCisKKyAgICB7IndpZHRo
IjogMjAwfSwKKyAgICB7ImhlaWdodCI6IDIwMH0sCisgICAgeyJ4IjogMjAwfSwKKyAgICB7Inki
OiAyMDB9LAorICAgIHsid2lkdGgiOiAyMDAsICJ4IjogMjAwfSwKKyAgICB7ImhlaWdodCI6IDIw
MCwgIngiOiAyMDB9LAorICAgIHsid2lkdGgiOiAyMDAsICJ5IjogMjAwfSwKKyAgICB7ImhlaWdo
dCI6IDIwMCwgInkiOiAyMDB9LAorXSkKK2RlZiB0ZXN0X25vX2NoYW5nZShzZXNzaW9uLCByZWN0
KToKKyAgICAiIiIKKyAgICAxMy4gSWYgd2lkdGggYW5kIGhlaWdodCBhcmUgbm90IG51bGw6CisK
KyAgICBbLi4uXQorCisgICAgMTQuIElmIHggYW5kIHkgYXJlIG5vdCBudWxsOgorCisgICAgWy4u
Ll0KKworICAgIDE1LiBSZXR1cm4gc3VjY2VzcyB3aXRoIHRoZSBKU09OIHNlcmlhbGl6YXRpb24g
b2YgdGhlIGN1cnJlbnQKKyAgICB0b3AtbGV2ZWwgYnJvd3NpbmcgY29udGV4dCdzIHdpbmRvdyBy
ZWN0LgorICAgICIiIgorCisgICAgb3JpZ2luYWwgPSBzZXNzaW9uLndpbmRvdy5yZWN0CisgICAg
cmVzcG9uc2UgPSBzZXRfd2luZG93X3JlY3Qoc2Vzc2lvbiwgcmVjdCkKKyAgICBhc3NlcnRfc3Vj
Y2VzcyhyZXNwb25zZSwgb3JpZ2luYWwpCisKKworZGVmIHRlc3RfZnVsbHlfZXhpdF9mdWxsc2Ny
ZWVuKHNlc3Npb24pOgorICAgICIiIgorICAgIDEwLiBGdWxseSBleGl0IGZ1bGxzY3JlZW4uCisK
KyAgICBbLi4uXQorCisgICAgVG8gZnVsbHkgZXhpdCBmdWxsc2NyZWVuIGEgZG9jdW1lbnQgZG9j
dW1lbnQsIHJ1biB0aGVzZSBzdGVwczoKKworICAgICAgMS4gSWYgZG9jdW1lbnQncyBmdWxsc2Ny
ZWVuIGVsZW1lbnQgaXMgbnVsbCwgdGVybWluYXRlIHRoZXNlIHN0ZXBzLgorCisgICAgICAyLiBV
bmZ1bGxzY3JlZW4gZWxlbWVudHMgd2hvc2UgZnVsbHNjcmVlbiBmbGFnIGlzIHNldCwgd2l0aGlu
CisgICAgICBkb2N1bWVudCdzIHRvcCBsYXllciwgZXhjZXB0IGZvciBkb2N1bWVudCdzIGZ1bGxz
Y3JlZW4gZWxlbWVudC4KKworICAgICAgMy4gRXhpdCBmdWxsc2NyZWVuIGRvY3VtZW50LgorICAg
ICIiIgorICAgIHNlc3Npb24ud2luZG93LmZ1bGxzY3JlZW4oKQorICAgIGFzc2VydCBzZXNzaW9u
LmV4ZWN1dGVfc2NyaXB0KCJyZXR1cm4gd2luZG93LmZ1bGxTY3JlZW4iKSBpcyBUcnVlCisKKyAg
ICByZXNwb25zZSA9IHNldF93aW5kb3dfcmVjdChzZXNzaW9uLCB7IndpZHRoIjogNDAwLCAiaGVp
Z2h0IjogNDAwfSkKKyAgICB2YWx1ZSA9IGFzc2VydF9zdWNjZXNzKHJlc3BvbnNlKQorICAgIGFz
c2VydCB2YWx1ZVsid2lkdGgiXSA9PSA0MDAKKyAgICBhc3NlcnQgdmFsdWVbImhlaWdodCJdID09
IDQwMAorCisgICAgYXNzZXJ0IHNlc3Npb24uZXhlY3V0ZV9zY3JpcHQoInJldHVybiB3aW5kb3cu
ZnVsbFNjcmVlbiIpIGlzIEZhbHNlCisKKworZGVmIHRlc3RfcmVzdG9yZV9mcm9tX21pbmltaXpl
ZChzZXNzaW9uKToKKyAgICAiIiIKKyAgICAxMi4gSWYgdGhlIHZpc2liaWxpdHkgc3RhdGUgb2Yg
dGhlIHRvcC1sZXZlbCBicm93c2luZyBjb250ZXh0J3MKKyAgICBhY3RpdmUgZG9jdW1lbnQgaXMg
aGlkZGVuLCByZXN0b3JlIHRoZSB3aW5kb3cuCisKKyAgICBbLi4uXQorCisgICAgVG8gcmVzdG9y
ZSB0aGUgd2luZG93LCBnaXZlbiBhbiBvcGVyYXRpbmcgc3lzdGVtIGxldmVsIHdpbmRvdyB3aXRo
CisgICAgYW4gYXNzb2NpYXRlZCB0b3AtbGV2ZWwgYnJvd3NpbmcgY29udGV4dCwgcnVuIGltcGxl
bWVudGF0aW9uLXNwZWNpZmljCisgICAgc3RlcHMgdG8gcmVzdG9yZSBvciB1bmhpZGUgdGhlIHdp
bmRvdyB0byB0aGUgdmlzaWJsZSBzY3JlZW4uIERvIG5vdAorICAgIHJldHVybiBmcm9tIHRoaXMg
b3BlcmF0aW9uIHVudGlsIHRoZSB2aXNpYmlsaXR5IHN0YXRlIG9mIHRoZSB0b3AtbGV2ZWwKKyAg
ICBicm93c2luZyBjb250ZXh0J3MgYWN0aXZlIGRvY3VtZW50IGhhcyByZWFjaGVkIHRoZSB2aXNp
YmxlIHN0YXRlLAorICAgIG9yIHVudGlsIHRoZSBvcGVyYXRpb24gdGltZXMgb3V0LgorICAgICIi
IgorCisgICAgc2Vzc2lvbi53aW5kb3cubWluaW1pemUoKQorICAgIGFzc2VydCBzZXNzaW9uLmV4
ZWN1dGVfc2NyaXB0KCJyZXR1cm4gZG9jdW1lbnQuaGlkZGVuIikgaXMgVHJ1ZQorCisgICAgcmVz
cG9uc2UgPSBzZXRfd2luZG93X3JlY3Qoc2Vzc2lvbiwgeyJ3aWR0aCI6IDQ1MCwgImhlaWdodCI6
IDQ1MH0pCisgICAgdmFsdWUgPSBhc3NlcnRfc3VjY2VzcyhyZXNwb25zZSkKKyAgICBhc3NlcnQg
dmFsdWVbIndpZHRoIl0gPT0gNDUwCisgICAgYXNzZXJ0IHZhbHVlWyJoZWlnaHQiXSA9PSA0NTAK
KworICAgIGFzc2VydCBzZXNzaW9uLmV4ZWN1dGVfc2NyaXB0KCJyZXR1cm4gZG9jdW1lbnQuaGlk
ZGVuIikgaXMgRmFsc2UKKworCitkZWYgdGVzdF9yZXN0b3JlX2Zyb21fbWF4aW1pemVkKHNlc3Np
b24pOgorICAgICIiIgorICAgIDEyLiBJZiB0aGUgdmlzaWJpbGl0eSBzdGF0ZSBvZiB0aGUgdG9w
LWxldmVsIGJyb3dzaW5nIGNvbnRleHQncworICAgIGFjdGl2ZSBkb2N1bWVudCBpcyBoaWRkZW4s
IHJlc3RvcmUgdGhlIHdpbmRvdy4KKworICAgIFsuLi5dCisKKyAgICBUbyByZXN0b3JlIHRoZSB3
aW5kb3csIGdpdmVuIGFuIG9wZXJhdGluZyBzeXN0ZW0gbGV2ZWwgd2luZG93IHdpdGgKKyAgICBh
biBhc3NvY2lhdGVkIHRvcC1sZXZlbCBicm93c2luZyBjb250ZXh0LCBydW4gaW1wbGVtZW50YXRp
b24tc3BlY2lmaWMKKyAgICBzdGVwcyB0byByZXN0b3JlIG9yIHVuaGlkZSB0aGUgd2luZG93IHRv
IHRoZSB2aXNpYmxlIHNjcmVlbi4gRG8gbm90CisgICAgcmV0dXJuIGZyb20gdGhpcyBvcGVyYXRp
b24gdW50aWwgdGhlIHZpc2liaWxpdHkgc3RhdGUgb2YgdGhlIHRvcC1sZXZlbAorICAgIGJyb3dz
aW5nIGNvbnRleHQncyBhY3RpdmUgZG9jdW1lbnQgaGFzIHJlYWNoZWQgdGhlIHZpc2libGUgc3Rh
dGUsCisgICAgb3IgdW50aWwgdGhlIG9wZXJhdGlvbiB0aW1lcyBvdXQuCisgICAgIiIiCisKKyAg
ICBvcmlnaW5hbF9zaXplID0gc2Vzc2lvbi53aW5kb3cuc2l6ZQorICAgIHNlc3Npb24ud2luZG93
Lm1heGltaXplKCkKKyAgICBhc3NlcnQgc2Vzc2lvbi53aW5kb3cuc2l6ZSAhPSBvcmlnaW5hbF9z
aXplCisKKyAgICByZXNwb25zZSA9IHNldF93aW5kb3dfcmVjdChzZXNzaW9uLCB7IndpZHRoIjog
NDAwLCAiaGVpZ2h0IjogNDAwfSkKKyAgICB2YWx1ZSA9IGFzc2VydF9zdWNjZXNzKHJlc3BvbnNl
KQorICAgIGFzc2VydCB2YWx1ZVsid2lkdGgiXSA9PSA0MDAKKyAgICBhc3NlcnQgdmFsdWVbImhl
aWdodCJdID09IDQwMAorCisKK2RlZiB0ZXN0X2hlaWdodF93aWR0aChzZXNzaW9uKToKKyAgICBv
cmlnaW5hbCA9IHNlc3Npb24ud2luZG93LnJlY3QKKyAgICBtYXggPSBzZXNzaW9uLmV4ZWN1dGVf
c2NyaXB0KCIiIgorICAgICAgICByZXR1cm4geworICAgICAgICAgIHdpZHRoOiB3aW5kb3cuc2Ny
ZWVuLmF2YWlsV2lkdGgsCisgICAgICAgICAgaGVpZ2h0OiB3aW5kb3cuc2NyZWVuLmF2YWlsSGVp
Z2h0LAorICAgICAgICB9IiIiKQorCisgICAgIyBzdGVwIDEyCisgICAgcmVzcG9uc2UgPSBzZXRf
d2luZG93X3JlY3Qoc2Vzc2lvbiwgeyJ3aWR0aCI6IG1heFsid2lkdGgiXSAtIDEwMCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhlaWdodCI6IG1heFsiaGVpZ2h0
Il0gLSAxMDB9KQorCisgICAgIyBzdGVwIDE0CisgICAgYXNzZXJ0X3N1Y2Nlc3MocmVzcG9uc2Us
IHsieCI6IG9yaWdpbmFsWyJ4Il0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieSI6
IG9yaWdpbmFsWyJ5Il0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2lkdGgiOiBt
YXhbIndpZHRoIl0gLSAxMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGVpZ2h0
IjogbWF4WyJoZWlnaHQiXSAtIDEwMH0pCisKKworZGVmIHRlc3RfaGVpZ2h0X3dpZHRoX2xhcmdl
cl90aGFuX21heChzZXNzaW9uKToKKyAgICBtYXggPSBzZXNzaW9uLmV4ZWN1dGVfc2NyaXB0KCIi
IgorICAgICAgICByZXR1cm4geworICAgICAgICAgIHdpZHRoOiB3aW5kb3cuc2NyZWVuLmF2YWls
V2lkdGgsCisgICAgICAgICAgaGVpZ2h0OiB3aW5kb3cuc2NyZWVuLmF2YWlsSGVpZ2h0LAorICAg
ICAgICB9IiIiKQorCisgICAgIyBzdGVwIDEyCisgICAgcmVzcG9uc2UgPSBzZXRfd2luZG93X3Jl
Y3Qoc2Vzc2lvbiwgeyJ3aWR0aCI6IG1heFsid2lkdGgiXSArIDEwMCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImhlaWdodCI6IG1heFsiaGVpZ2h0Il0gKyAxMDB9
KQorCisgICAgIyBzdGVwIDE0CisgICAgcmVjdCA9IGFzc2VydF9zdWNjZXNzKHJlc3BvbnNlKQor
ICAgIGFzc2VydCByZWN0WyJ3aWR0aCJdID49IG1heFsid2lkdGgiXQorICAgIGFzc2VydCByZWN0
WyJoZWlnaHQiXSA+PSBtYXhbImhlaWdodCJdCisKKworZGVmIHRlc3RfaGVpZ2h0X3dpZHRoX2Fz
X2N1cnJlbnQoc2Vzc2lvbik6CisgICAgb3JpZ2luYWwgPSBzZXNzaW9uLndpbmRvdy5yZWN0CisK
KyAgICAjIHN0ZXAgMTIKKyAgICByZXNwb25zZSA9IHNldF93aW5kb3dfcmVjdChzZXNzaW9uLCB7
IndpZHRoIjogb3JpZ2luYWxbIndpZHRoIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJoZWlnaHQiOiBvcmlnaW5hbFsiaGVpZ2h0Il19KQorCisgICAgIyBzdGVw
IDE0CisgICAgYXNzZXJ0X3N1Y2Nlc3MocmVzcG9uc2UsIHsieCI6IG9yaWdpbmFsWyJ4Il0sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieSI6IG9yaWdpbmFsWyJ5Il0sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAid2lkdGgiOiBvcmlnaW5hbFsid2lkdGgiXSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJoZWlnaHQiOiBvcmlnaW5hbFsiaGVpZ2h0Il19KQor
CisKK2RlZiB0ZXN0X3hfeShzZXNzaW9uKToKKyAgICBvcmlnaW5hbCA9IHNlc3Npb24ud2luZG93
LnJlY3QKKworICAgICMgc3RlcCAxMworICAgIHJlc3BvbnNlID0gc2V0X3dpbmRvd19yZWN0KHNl
c3Npb24sIHsieCI6IG9yaWdpbmFsWyJ4Il0gKyAxMCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgInkiOiBvcmlnaW5hbFsieSJdICsgMTB9KQorCisgICAgIyBzdGVw
IDE0CisgICAgYXNzZXJ0X3N1Y2Nlc3MocmVzcG9uc2UsIHsieCI6IG9yaWdpbmFsWyJ4Il0gKyAx
MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ5Ijogb3JpZ2luYWxbInkiXSArIDEw
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndpZHRoIjogb3JpZ2luYWxbIndpZHRo
Il0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGVpZ2h0Ijogb3JpZ2luYWxbImhl
aWdodCJdfSkKKworCitkZWYgdGVzdF9uZWdhdGl2ZV94X3koc2Vzc2lvbik6CisgICAgb3JpZ2lu
YWwgPSBzZXNzaW9uLndpbmRvdy5yZWN0CisKKyAgICAjIHN0ZXAgMTMKKyAgICByZXNwb25zZSA9
IHNldF93aW5kb3dfcmVjdChzZXNzaW9uLCB7IngiOiAtIDgsICJ5IjogLSA4fSkKKworICAgICMg
c3RlcCAxNAorICAgIG9zID0gc2Vzc2lvbi5jYXBhYmlsaXRpZXNbInBsYXRmb3JtTmFtZSJdCisg
ICAgIyBjZXJ0YWluIFdNcyBwcm9oaWJpdCB3aW5kb3dzIGZyb20gYmVpbmcgbW92ZWQgb2ZmLXNj
cmVlbgorICAgIGlmIG9zID09ICJsaW51eCI6CisgICAgICAgIHJlY3QgPSBhc3NlcnRfc3VjY2Vz
cyhyZXNwb25zZSkKKyAgICAgICAgYXNzZXJ0IHJlY3RbIngiXSA8PSAwCisgICAgICAgIGFzc2Vy
dCByZWN0WyJ5Il0gPD0gMAorICAgICAgICBhc3NlcnQgcmVjdFsid2lkdGgiXSA9PSBvcmlnaW5h
bFsid2lkdGgiXQorICAgICAgICBhc3NlcnQgcmVjdFsiaGVpZ2h0Il0gPT0gb3JpZ2luYWxbImhl
aWdodCJdCisKKyAgICAjIE9uIG1hY09TLCB3aW5kb3dzIGNhbiBvbmx5IGJlIG1vdmVkIG9mZiB0
aGUgc2NyZWVuIG9uIHRoZQorICAgICMgaG9yaXpvbnRhbCBheGlzLiAgVGhlIHN5c3RlbSBtZW51
IGJhciBhbHNvIGJsb2NrcyB3aW5kb3dzIGZyb20KKyAgICAjIGJlaW5nIG1vdmVkIHRvICgwLDAp
LgorICAgIGVsaWYgb3MgPT0gImRhcndpbiI6CisgICAgICAgIGFzc2VydF9zdWNjZXNzKHJlc3Bv
bnNlLCB7IngiOiAtOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieSI6IDIz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aWR0aCI6IG9yaWdpbmFsWyJ3
aWR0aCJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoZWlnaHQiOiBvcmln
aW5hbFsiaGVpZ2h0Il19KQorCisgICAgIyBJdCB0dXJucyBvdXQgdGhhdCBXaW5kb3dzIGlzIHRo
ZSBvbmx5IHBsYXRmb3JtIG9uIHdoaWNoIHRoZQorICAgICMgd2luZG93IGNhbiBiZSByZWxpYWJs
eSBwb3NpdGlvbmVkIG9mZi1zY3JlZW4uCisgICAgZWxpZiBvcyA9PSAid2luZG93c19udCI6Cisg
ICAgICAgIGFzc2VydF9zdWNjZXNzKHJlc3BvbnNlLCB7IngiOiAtOCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAieSI6IC04LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJ3aWR0aCI6IG9yaWdpbmFsWyJ3aWR0aCJdLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJoZWlnaHQiOiBvcmlnaW5hbFsiaGVpZ2h0Il19KQorCisKK2RlZiB0ZXN0
X21vdmVfdG9fc2FtZV9wb3NpdGlvbihzZXNzaW9uKToKKyAgICBvcmlnaW5hbF9wb3NpdGlvbiA9
IHNlc3Npb24ud2luZG93LnBvc2l0aW9uCisgICAgcG9zaXRpb24gPSBzZXNzaW9uLndpbmRvdy5w
b3NpdGlvbiA9IG9yaWdpbmFsX3Bvc2l0aW9uCisgICAgYXNzZXJ0IHBvc2l0aW9uID09IG9yaWdp
bmFsX3Bvc2l0aW9uCisKKworZGVmIHRlc3RfbW92ZV90b19zYW1lX3goc2Vzc2lvbik6CisgICAg
b3JpZ2luYWxfeCA9IHNlc3Npb24ud2luZG93LnBvc2l0aW9uWzBdCisgICAgcG9zaXRpb24gPSBz
ZXNzaW9uLndpbmRvdy5wb3NpdGlvbiA9IChvcmlnaW5hbF94LCAzNDUpCisgICAgYXNzZXJ0IHBv
c2l0aW9uID09IChvcmlnaW5hbF94LCAzNDUpCisKKworZGVmIHRlc3RfbW92ZV90b19zYW1lX3ko
c2Vzc2lvbik6CisgICAgb3JpZ2luYWxfeSA9IHNlc3Npb24ud2luZG93LnBvc2l0aW9uWzFdCisg
ICAgcG9zaXRpb24gPSBzZXNzaW9uLndpbmRvdy5wb3NpdGlvbiA9ICg0NTYsIG9yaWdpbmFsX3kp
CisgICAgYXNzZXJ0IHBvc2l0aW9uID09ICg0NTYsIG9yaWdpbmFsX3kpCisKKworZGVmIHRlc3Rf
cmVzaXplX3RvX3NhbWVfc2l6ZShzZXNzaW9uKToKKyAgICBvcmlnaW5hbF9zaXplID0gc2Vzc2lv
bi53aW5kb3cuc2l6ZQorICAgIHNpemUgPSBzZXNzaW9uLndpbmRvdy5zaXplID0gb3JpZ2luYWxf
c2l6ZQorICAgIGFzc2VydCBzaXplID09IG9yaWdpbmFsX3NpemUKKworCitkZWYgdGVzdF9yZXNp
emVfdG9fc2FtZV93aWR0aChzZXNzaW9uKToKKyAgICBvcmlnaW5hbF93aWR0aCA9IHNlc3Npb24u
d2luZG93LnNpemVbMF0KKyAgICBzaXplID0gc2Vzc2lvbi53aW5kb3cuc2l6ZSA9IChvcmlnaW5h
bF93aWR0aCwgMzQ1KQorICAgIGFzc2VydCBzaXplID09IChvcmlnaW5hbF93aWR0aCwgMzQ1KQor
CisKK2RlZiB0ZXN0X3Jlc2l6ZV90b19zYW1lX2hlaWdodChzZXNzaW9uKToKKyAgICBvcmlnaW5h
bF9oZWlnaHQgPSBzZXNzaW9uLndpbmRvdy5zaXplWzFdCisgICAgc2l6ZSA9IHNlc3Npb24ud2lu
ZG93LnNpemUgPSAoNDU2LCBvcmlnaW5hbF9oZWlnaHQpCisgICAgYXNzZXJ0IHNpemUgPT0gKDQ1
Niwgb3JpZ2luYWxfaGVpZ2h0KQorCisKK2RlZiB0ZXN0X3BheWxvYWQoc2Vzc2lvbik6CisgICAg
IyBzdGVwIDE0CisgICAgcmVzcG9uc2UgPSBzZXRfd2luZG93X3JlY3Qoc2Vzc2lvbiwgeyJ4Ijog
NDAwLCAieSI6IDQwMH0pCisKKyAgICBhc3NlcnQgcmVzcG9uc2Uuc3RhdHVzID09IDIwMAorICAg
IGFzc2VydCBpc2luc3RhbmNlKHJlc3BvbnNlLmJvZHlbInZhbHVlIl0sIGRpY3QpCisgICAgdmFs
dWUgPSByZXNwb25zZS5ib2R5WyJ2YWx1ZSJdCisgICAgYXNzZXJ0ICJ3aWR0aCIgaW4gdmFsdWUK
KyAgICBhc3NlcnQgImhlaWdodCIgaW4gdmFsdWUKKyAgICBhc3NlcnQgIngiIGluIHZhbHVlCisg
ICAgYXNzZXJ0ICJ5IiBpbiB2YWx1ZQorICAgIGFzc2VydCBpc2luc3RhbmNlKHZhbHVlWyJ3aWR0
aCJdLCBpbnQpCisgICAgYXNzZXJ0IGlzaW5zdGFuY2UodmFsdWVbImhlaWdodCJdLCBpbnQpCisg
ICAgYXNzZXJ0IGlzaW5zdGFuY2UodmFsdWVbIngiXSwgaW50KQorICAgIGFzc2VydCBpc2luc3Rh
bmNlKHZhbHVlWyJ5Il0sIGludCkKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVk
L3czYy93ZWJkcml2ZXIvdGVzdHMvc3RhdGUvX19pbml0X18ucHkgYi9XZWJEcml2ZXJUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL3N0YXRlL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lNjlkZTI5YmIyZApkaWZmIC0tZ2l0IGEvV2Vi
RHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9zdGF0ZS9nZXRfZWxlbWVu
dF9hdHRyaWJ1dGUucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rl
c3RzL3N0YXRlL2dldF9lbGVtZW50X2F0dHJpYnV0ZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uZTY2MmQ5NWE5YzcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2
ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL3N0YXRlL2dldF9lbGVtZW50X2F0
dHJpYnV0ZS5weQpAQCAtMCwwICsxLDE5MiBAQAoraW1wb3J0IHB5dGVzdAorCitmcm9tIHRlc3Rz
LnN1cHBvcnQuYXNzZXJ0cyBpbXBvcnQgYXNzZXJ0X2Vycm9yLCBhc3NlcnRfc3VjY2VzcywgYXNz
ZXJ0X2RpYWxvZ19oYW5kbGVkCitmcm9tIHRlc3RzLnN1cHBvcnQuZml4dHVyZXMgaW1wb3J0IGNy
ZWF0ZV9kaWFsb2cKK2Zyb20gdGVzdHMuc3VwcG9ydC5pbmxpbmUgaW1wb3J0IGlubGluZQorCisK
K2RlZiBnZXRfYXR0cmlidXRlKHNlc3Npb24sIGVsZW1lbnQsIGF0dHIpOgorICAgIHJldHVybiBz
ZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLCAic2Vzc2lvbi97c2Vzc2lvbl9pZH0vZWxlbWVu
dC97ZWxlbWVudF9pZH0vYXR0cmlidXRlL3thdHRyfSIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAuZm9ybWF0KHNlc3Npb25faWQ9c2Vzc2lvbi5zZXNzaW9uX2lkLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudF9pZD1lbGVtZW50LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cj1hdHRyKSkKKwor
CisjIDEzLjIgR2V0IEVsZW1lbnQgQXR0cmlidXRlCisKK2RlZiB0ZXN0X25vX2Jyb3dzaW5nX2Nv
bnRleHQoc2Vzc2lvbiwgY3JlYXRlX3dpbmRvdyk6CisgICAgIyAxMy4yIHN0ZXAgMQorICAgIHNl
c3Npb24ud2luZG93X2hhbmRsZSA9IGNyZWF0ZV93aW5kb3coKQorICAgIHNlc3Npb24uY2xvc2Uo
KQorCisgICAgcmVzdWx0ID0gZ2V0X2F0dHJpYnV0ZShzZXNzaW9uLCAiZm9vIiwgImlkIikKKwor
ICAgIGFzc2VydF9lcnJvcihyZXN1bHQsICJubyBzdWNoIHdpbmRvdyIpCisKKworZGVmIHRlc3Rf
aGFuZGxlX3Byb21wdF9kaXNtaXNzKG5ld19zZXNzaW9uKToKKyAgICAjIDEzLjIgc3RlcCAyCisg
ICAgXywgc2Vzc2lvbiA9IG5ld19zZXNzaW9uKHsiYWx3YXlzTWF0Y2giOiB7InVuaGFuZGxlZFBy
b21wdEJlaGF2aW9yIjogImRpc21pc3MifX0pCisgICAgc2Vzc2lvbi51cmwgPSBpbmxpbmUoIjxp
bnB1dCBpZD1mb28+IikKKworICAgIGNyZWF0ZV9kaWFsb2coc2Vzc2lvbikoImFsZXJ0IiwgdGV4
dD0iZGlzbWlzcyAjMSIsIHJlc3VsdF92YXI9ImRpc21pc3MxIikKKworICAgIHJlc3VsdCA9IGdl
dF9hdHRyaWJ1dGUoc2Vzc2lvbiwgImZvbyIsICJpZCIpCisKKyAgICBhc3NlcnRfc3VjY2Vzcyhy
ZXN1bHQsICJmb28iKQorICAgIGFzc2VydF9kaWFsb2dfaGFuZGxlZChzZXNzaW9uLCAiZGlzbWlz
cyAjMSIpCisKKyAgICBjcmVhdGVfZGlhbG9nKHNlc3Npb24pKCJjb25maXJtIiwgdGV4dD0iZGlz
bWlzcyAjMiIsIHJlc3VsdF92YXI9ImRpc21pc3MyIikKKworICAgIHJlc3VsdCA9IGdldF9hdHRy
aWJ1dGUoc2Vzc2lvbiwgImZvbyIsICJpZCIpCisKKyAgICBhc3NlcnRfc3VjY2VzcyhyZXN1bHQs
ICJmb28iKQorICAgIGFzc2VydF9kaWFsb2dfaGFuZGxlZChzZXNzaW9uLCAiZGlzbWlzcyAjMiIp
CisKKyAgICBjcmVhdGVfZGlhbG9nKHNlc3Npb24pKCJwcm9tcHQiLCB0ZXh0PSJkaXNtaXNzICMz
IiwgcmVzdWx0X3Zhcj0iZGlzbWlzczMiKQorCisgICAgcmVzdWx0ID0gZ2V0X2F0dHJpYnV0ZShz
ZXNzaW9uLCAiZm9vIiwgImlkIikKKworICAgIGFzc2VydF9zdWNjZXNzKHJlc3VsdCwgImZvbyIp
CisgICAgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNlc3Npb24sICJkaXNtaXNzICMzIikKKworCitk
ZWYgdGVzdF9oYW5kbGVfcHJvbXB0X2FjY2VwdChuZXdfc2Vzc2lvbik6CisgICAgIyAxMy4yIHN0
ZXAgMgorICAgIF8sIHNlc3Npb24gPSBuZXdfc2Vzc2lvbih7ImFsd2F5c01hdGNoIjogeyJ1bmhh
bmRsZWRQcm9tcHRCZWhhdmlvciI6ICJhY2NlcHQifX0pCisgICAgc2Vzc2lvbi51cmwgPSBpbmxp
bmUoIjxpbnB1dCBpZD1mb28+IikKKworICAgIGNyZWF0ZV9kaWFsb2coc2Vzc2lvbikoImFsZXJ0
IiwgdGV4dD0iZGlzbWlzcyAjMSIsIHJlc3VsdF92YXI9ImRpc21pc3MxIikKKworICAgIHJlc3Vs
dCA9IGdldF9hdHRyaWJ1dGUoc2Vzc2lvbiwgImZvbyIsICJpZCIpCisKKyAgICBhc3NlcnRfc3Vj
Y2VzcyhyZXN1bHQsICJmb28iKQorICAgIGFzc2VydF9kaWFsb2dfaGFuZGxlZChzZXNzaW9uLCAi
ZGlzbWlzcyAjMSIpCisKKyAgICBjcmVhdGVfZGlhbG9nKHNlc3Npb24pKCJjb25maXJtIiwgdGV4
dD0iZGlzbWlzcyAjMiIsIHJlc3VsdF92YXI9ImRpc21pc3MyIikKKworICAgIHJlc3VsdCA9IGdl
dF9hdHRyaWJ1dGUoc2Vzc2lvbiwgImZvbyIsICJpZCIpCisKKyAgICBhc3NlcnRfc3VjY2Vzcyhy
ZXN1bHQsICJmb28iKQorICAgIGFzc2VydF9kaWFsb2dfaGFuZGxlZChzZXNzaW9uLCAiZGlzbWlz
cyAjMiIpCisKKyAgICBjcmVhdGVfZGlhbG9nKHNlc3Npb24pKCJwcm9tcHQiLCB0ZXh0PSJkaXNt
aXNzICMzIiwgcmVzdWx0X3Zhcj0iZGlzbWlzczMiKQorCisgICAgcmVzdWx0ID0gZ2V0X2F0dHJp
YnV0ZShzZXNzaW9uLCAiZm9vIiwgImlkIikKKworICAgIGFzc2VydF9zdWNjZXNzKHJlc3VsdCwg
ImZvbyIpCisgICAgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNlc3Npb24sICJkaXNtaXNzICMzIikK
KworCitkZWYgdGVzdF9oYW5kbGVfcHJvbXB0X21pc3NpbmdfdmFsdWUoc2Vzc2lvbiwgY3JlYXRl
X2RpYWxvZyk6CisgICAgIyAxMy4yIHN0ZXAgMgorICAgIHNlc3Npb24udXJsID0gaW5saW5lKCI8
aW5wdXQgaWQ9Zm9vPiIpCisKKyAgICBjcmVhdGVfZGlhbG9nKHNlc3Npb24pKCJhbGVydCIsIHRl
eHQ9ImRpc21pc3MgIzEiLCByZXN1bHRfdmFyPSJkaXNtaXNzMSIpCisKKyAgICByZXN1bHQgPSBn
ZXRfYXR0cmlidXRlKHNlc3Npb24sICJmb28iLCAiaWQiKQorCisgICAgYXNzZXJ0X2Vycm9yKHJl
c3VsdCwgInVuZXhwZWN0ZWQgYWxlcnQgb3BlbiIpCisgICAgYXNzZXJ0X2RpYWxvZ19oYW5kbGVk
KHNlc3Npb24sICJkaXNtaXNzICMxIikKKworICAgIGNyZWF0ZV9kaWFsb2coc2Vzc2lvbikoImNv
bmZpcm0iLCB0ZXh0PSJkaXNtaXNzICMyIiwgcmVzdWx0X3Zhcj0iZGlzbWlzczIiKQorCisgICAg
cmVzdWx0ID0gZ2V0X2F0dHJpYnV0ZShzZXNzaW9uLCAiZm9vIiwgImlkIikKKworICAgIGFzc2Vy
dF9lcnJvcihyZXN1bHQsICJ1bmV4cGVjdGVkIGFsZXJ0IG9wZW4iKQorICAgIGFzc2VydF9kaWFs
b2dfaGFuZGxlZChzZXNzaW9uLCAiZGlzbWlzcyAjMiIpCisKKyAgICBjcmVhdGVfZGlhbG9nKHNl
c3Npb24pKCJwcm9tcHQiLCB0ZXh0PSJkaXNtaXNzICMzIiwgcmVzdWx0X3Zhcj0iZGlzbWlzczMi
KQorCisgICAgcmVzdWx0ID0gZ2V0X2F0dHJpYnV0ZShzZXNzaW9uLCAiZm9vIiwgImlkIikKKwor
ICAgIGFzc2VydF9lcnJvcihyZXN1bHQsICJ1bmV4cGVjdGVkIGFsZXJ0IG9wZW4iKQorICAgIGFz
c2VydF9kaWFsb2dfaGFuZGxlZChzZXNzaW9uLCAiZGlzbWlzcyAjMyIpCisKKworZGVmIHRlc3Rf
ZWxlbWVudF9ub3RfZm91bmQoc2Vzc2lvbik6CisgICAgIyAxMy4yIFN0ZXAgMworICAgIHJlc3Vs
dCA9IGdldF9hdHRyaWJ1dGUoc2Vzc2lvbiwgImZvbyIsICJpZCIpCisKKyAgICBhc3NlcnRfZXJy
b3IocmVzdWx0LCAibm8gc3VjaCBlbGVtZW50IikKKworCitkZWYgdGVzdF9lbGVtZW50X3N0YWxl
KHNlc3Npb24pOgorICAgICMgMTMuMiBzdGVwIDQKKyAgICBzZXNzaW9uLnVybCA9IGlubGluZSgi
PGlucHV0IGlkPWZvbz4iKQorICAgIGVsZW1lbnQgPSBzZXNzaW9uLmZpbmQuY3NzKCJpbnB1dCIs
IGFsbD1GYWxzZSkKKyAgICBzZXNzaW9uLnJlZnJlc2goKQorICAgIHJlc3VsdCA9IGdldF9hdHRy
aWJ1dGUoc2Vzc2lvbiwgZWxlbWVudC5pZCwgImlkIikKKworICAgIGFzc2VydF9lcnJvcihyZXN1
bHQsICJzdGFsZSBlbGVtZW50IHJlZmVyZW5jZSIpCisKKworZGVmIHRlc3Rfbm9ybWFsKHNlc3Np
b24pOgorICAgICMgMTMuMiBTdGVwIDUKKyAgICBzZXNzaW9uLnVybCA9IGlubGluZSgiPGlucHV0
IHR5cGU9Y2hlY2tib3g+IikKKyAgICBlbGVtZW50ID0gc2Vzc2lvbi5maW5kLmNzcygiaW5wdXQi
LCBhbGw9RmFsc2UpCisgICAgcmVzdWx0ID0gZ2V0X2F0dHJpYnV0ZShzZXNzaW9uLCBlbGVtZW50
LmlkLCAiaW5wdXQiKQorICAgIGFzc2VydF9zdWNjZXNzKHJlc3VsdCwgTm9uZSkKKyAgICBhc3Nl
cnQgRmFsc2UgPT0gc2Vzc2lvbi5leGVjdXRlX3NjcmlwdCgicmV0dXJuIGRvY3VtZW50LnF1ZXJ5
U2VsZWN0b3IoJ2lucHV0JykuY2hlY2tlZCIpCisKKyAgICAjIENoZWNrIHdlIGFyZSBub3QgcmV0
dXJuaW5nIHRoZSBwcm9wZXJ0eSB3aGljaCB3aWxsIGhhdmUgYSBkaWZmZXJlbnQgdmFsdWUKKyAg
ICBlbGVtZW50LmNsaWNrKCkKKyAgICBhc3NlcnQgVHJ1ZSA9PSBzZXNzaW9uLmV4ZWN1dGVfc2Ny
aXB0KCJyZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXQnKS5jaGVja2VkIikKKyAg
ICByZXN1bHQgPSBnZXRfYXR0cmlidXRlKHNlc3Npb24sIGVsZW1lbnQuaWQsICJpbnB1dCIpCisg
ICAgYXNzZXJ0X3N1Y2Nlc3MocmVzdWx0LCBOb25lKQorCisKK0BweXRlc3QubWFyay5wYXJhbWV0
cml6ZSgidGFnLGF0dHJzIiwgWworICAgICgiYXVkaW8iLCBbImF1dG9wbGF5IiwgImNvbnRyb2xz
IiwgImxvb3AiLCAibXV0ZWQiXSksCisgICAgKCJidXR0b24iLCBbImF1dG9mb2N1cyIsICJkaXNh
YmxlZCIsICJmb3Jtbm92YWxpZGF0ZSJdKSwKKyAgICAoImRldGFpbHMiLCBbIm9wZW4iXSksCisg
ICAgKCJkaWFsb2ciLCBbIm9wZW4iXSksCisgICAgKCJmaWVsZHNldCIsIFsiZGlzYWJsZWQiXSks
CisgICAgKCJmb3JtIiwgWyJub3ZhbGlkYXRlIl0pLAorICAgICgiaWZyYW1lIiwgWyJhbGxvd2Z1
bGxzY3JlZW4iXSksCisgICAgKCJpbWciLCBbImlzbWFwIl0pLAorICAgICgiaW5wdXQiLCBbImF1
dG9mb2N1cyIsICJjaGVja2VkIiwgImRpc2FibGVkIiwgImZvcm1ub3ZhbGlkYXRlIiwgIm11bHRp
cGxlIiwgInJlYWRvbmx5IiwgInJlcXVpcmVkIl0pLAorICAgICgibWVudWl0ZW0iLCBbImNoZWNr
ZWQiLCAiZGVmYXVsdCIsICJkaXNhYmxlZCJdKSwKKyAgICAoIm9iamVjdCIsIFsidHlwZW11c3Rt
YXRjaCJdKSwKKyAgICAoIm9sIiwgWyJyZXZlcnNlZCJdKSwKKyAgICAoIm9wdGdyb3VwIiwgWyJk
aXNhYmxlZCJdKSwKKyAgICAoIm9wdGlvbiIsIFsiZGlzYWJsZWQiLCAic2VsZWN0ZWQiXSksCisg
ICAgKCJzY3JpcHQiLCBbImFzeW5jIiwgImRlZmVyIl0pLAorICAgICgic2VsZWN0IiwgWyJhdXRv
Zm9jdXMiLCAiZGlzYWJsZWQiLCAibXVsdGlwbGUiLCAicmVxdWlyZWQiXSksCisgICAgKCJ0ZXh0
YXJlYSIsIFsiYXV0b2ZvY3VzIiwgImRpc2FibGVkIiwgInJlYWRvbmx5IiwgInJlcXVpcmVkIl0p
LAorICAgICgidHJhY2siLCBbImRlZmF1bHQiXSksCisgICAgKCJ2aWRlbyIsIFsiYXV0b3BsYXki
LCAiY29udHJvbHMiLCAibG9vcCIsICJtdXRlZCJdKQorXSkKK2RlZiB0ZXN0X2Jvb2xlYW5fYXR0
cmlidXRlKHNlc3Npb24sIHRhZywgYXR0cnMpOgorICAgICMgMTMuMiBTdGVwIDUKKyAgICBmb3Ig
YXR0ciBpbiBhdHRyczoKKyAgICAgICAgc2Vzc2lvbi51cmwgPSBpbmxpbmUoIjx7MH0gezF9PiIu
Zm9ybWF0KHRhZywgYXR0cikpCisKKyAgICAgICAgZWxlbWVudCA9IHNlc3Npb24uZmluZC5jc3Mo
dGFnLCBhbGw9RmFsc2UpCisgICAgICAgIHJlc3VsdCA9IHJlc3VsdCA9IGdldF9hdHRyaWJ1dGUo
c2Vzc2lvbiwgZWxlbWVudC5pZCwgYXR0cikKKyAgICAgICAgYXNzZXJ0X3N1Y2Nlc3MocmVzdWx0
LCAidHJ1ZSIpCisKKworZGVmIHRlc3RfZ2xvYmFsX2Jvb2xlYW5fYXR0cmlidXRlcyhzZXNzaW9u
KToKKyAgICAjIDEzLjIgU3RlcCA1CisgICAgc2Vzc2lvbi51cmwgPSBpbmxpbmUoIjxwIGhpZGRl
bj5mb28iKQorICAgIGVsZW1lbnQgPSBzZXNzaW9uLmZpbmQuY3NzKCJwIiwgYWxsPUZhbHNlKQor
ICAgIHJlc3VsdCA9IHJlc3VsdCA9IGdldF9hdHRyaWJ1dGUoc2Vzc2lvbiwgZWxlbWVudC5pZCwg
ImhpZGRlbiIpCisKKyAgICBhc3NlcnRfc3VjY2VzcyhyZXN1bHQsICJ0cnVlIikKKworICAgIHNl
c3Npb24udXJsID0gaW5saW5lKCI8cD5mb28iKQorICAgIGVsZW1lbnQgPSBzZXNzaW9uLmZpbmQu
Y3NzKCJwIiwgYWxsPUZhbHNlKQorICAgIHJlc3VsdCA9IHJlc3VsdCA9IGdldF9hdHRyaWJ1dGUo
c2Vzc2lvbiwgZWxlbWVudC5pZCwgImhpZGRlbiIpCisgICAgYXNzZXJ0X3N1Y2Nlc3MocmVzdWx0
LCBOb25lKQorCisgICAgc2Vzc2lvbi51cmwgPSBpbmxpbmUoIjxwIGl0ZW1zY29wZT5mb28iKQor
ICAgIGVsZW1lbnQgPSBzZXNzaW9uLmZpbmQuY3NzKCJwIiwgYWxsPUZhbHNlKQorICAgIHJlc3Vs
dCA9IHJlc3VsdCA9IGdldF9hdHRyaWJ1dGUoc2Vzc2lvbiwgZWxlbWVudC5pZCwgIml0ZW1zY29w
ZSIpCisKKyAgICBhc3NlcnRfc3VjY2VzcyhyZXN1bHQsICJ0cnVlIikKKworICAgIHNlc3Npb24u
dXJsID0gaW5saW5lKCI8cD5mb28iKQorICAgIGVsZW1lbnQgPSBzZXNzaW9uLmZpbmQuY3NzKCJw
IiwgYWxsPUZhbHNlKQorICAgIHJlc3VsdCA9IHJlc3VsdCA9IGdldF9hdHRyaWJ1dGUoc2Vzc2lv
biwgZWxlbWVudC5pZCwgIml0ZW1zY29wZSIpCisgICAgYXNzZXJ0X3N1Y2Nlc3MocmVzdWx0LCBO
b25lKQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90
ZXN0cy9zdGF0ZS9nZXRfZWxlbWVudF9wcm9wZXJ0eS5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9y
dGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvc3RhdGUvZ2V0X2VsZW1lbnRfcHJvcGVydHkucHkKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjAwYTg1YWY2OWI1Ci0tLSAvZGV2
L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9z
dGF0ZS9nZXRfZWxlbWVudF9wcm9wZXJ0eS5weQpAQCAtMCwwICsxLDE2NCBAQAorZnJvbSB0ZXN0
cy5zdXBwb3J0LmFzc2VydHMgaW1wb3J0IGFzc2VydF9lcnJvciwgYXNzZXJ0X2RpYWxvZ19oYW5k
bGVkLCBhc3NlcnRfc3VjY2VzcworZnJvbSB0ZXN0cy5zdXBwb3J0LmlubGluZSBpbXBvcnQgaW5s
aW5lCitmcm9tIHRlc3RzLnN1cHBvcnQuZml4dHVyZXMgaW1wb3J0IGNyZWF0ZV9kaWFsb2cKKwor
X2lucHV0ID0gaW5saW5lKCI8aW5wdXQgaWQ9aTE+IikKKworCisjIDEzLjMgR2V0IEVsZW1lbnQg
UHJvcGVydHkKKworZGVmIHRlc3Rfbm9fYnJvd3NpbmdfY29udGV4dChzZXNzaW9uLCBjcmVhdGVf
d2luZG93KToKKyAgICAjIDEzLjMgc3RlcCAxCisgICAgc2Vzc2lvbi53aW5kb3dfaGFuZGxlID0g
Y3JlYXRlX3dpbmRvdygpCisgICAgc2Vzc2lvbi5jbG9zZSgpCisKKyAgICByZXN1bHQgPSBzZXNz
aW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLCAic2Vzc2lvbi97c2Vzc2lvbl9pZH0vZWxlbWVudC97
ZWxlbWVudF9pZH0vcHJvcGVydHkvaWQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAuZm9ybWF0KHNlc3Npb25faWQ9c2Vzc2lvbi5zZXNzaW9uX2lkLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50X2lkPSJmb28iKSkKKworICAg
IGFzc2VydF9lcnJvcihyZXN1bHQsICJubyBzdWNoIHdpbmRvdyIpCisKKworZGVmIHRlc3RfaGFu
ZGxlX3Byb21wdF9kaXNtaXNzKG5ld19zZXNzaW9uKToKKyAgICAjIDEzLjMgc3RlcCAyCisgICAg
Xywgc2Vzc2lvbiA9IG5ld19zZXNzaW9uKHsiYWx3YXlzTWF0Y2giOiB7InVuaGFuZGxlZFByb21w
dEJlaGF2aW9yIjogImRpc21pc3MifX0pCisgICAgc2Vzc2lvbi51cmwgPSBpbmxpbmUoIjxpbnB1
dCBpZD1mb28+IikKKworICAgIGNyZWF0ZV9kaWFsb2coc2Vzc2lvbikoImFsZXJ0IiwgdGV4dD0i
ZGlzbWlzcyAjMSIsIHJlc3VsdF92YXI9ImRpc21pc3MxIikKKworICAgIHJlc3VsdCA9IHNlc3Np
b24udHJhbnNwb3J0LnNlbmQoIkdFVCIsICJzZXNzaW9uL3tzZXNzaW9uX2lkfS9lbGVtZW50L3tl
bGVtZW50X2lkfS9wcm9wZXJ0eS9pZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC5mb3JtYXQoc2Vzc2lvbl9pZD1zZXNzaW9uLnNlc3Npb25faWQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRfaWQ9ImZvbyIpKQorCisgICAg
YXNzZXJ0X3N1Y2Nlc3MocmVzdWx0LCAiZm9vIikKKyAgICBhc3NlcnRfZGlhbG9nX2hhbmRsZWQo
c2Vzc2lvbiwgImRpc21pc3MgIzEiKQorCisgICAgY3JlYXRlX2RpYWxvZyhzZXNzaW9uKSgiY29u
ZmlybSIsIHRleHQ9ImRpc21pc3MgIzIiLCByZXN1bHRfdmFyPSJkaXNtaXNzMiIpCisKKyAgICBy
ZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLCAic2Vzc2lvbi97c2Vzc2lvbl9p
ZH0vZWxlbWVudC97ZWxlbWVudF9pZH0vcHJvcGVydHkvaWQiCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAuZm9ybWF0KHNlc3Npb25faWQ9c2Vzc2lvbi5zZXNzaW9uX2lkLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50X2lkPSJm
b28iKSkKKworICAgIGFzc2VydF9zdWNjZXNzKHJlc3VsdCwgImZvbyIpCisgICAgYXNzZXJ0X2Rp
YWxvZ19oYW5kbGVkKHNlc3Npb24sICJkaXNtaXNzICMyIikKKworICAgIGNyZWF0ZV9kaWFsb2co
c2Vzc2lvbikoInByb21wdCIsIHRleHQ9ImRpc21pc3MgIzMiLCByZXN1bHRfdmFyPSJkaXNtaXNz
MyIpCisKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLCAic2Vzc2lv
bi97c2Vzc2lvbl9pZH0vZWxlbWVudC97ZWxlbWVudF9pZH0vcHJvcGVydHkvaWQiCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHNlc3Npb25faWQ9c2Vzc2lvbi5z
ZXNzaW9uX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
bGVtZW50X2lkPSJmb28iKSkKKworICAgIGFzc2VydF9zdWNjZXNzKHJlc3VsdCwgImZvbyIpCisg
ICAgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNlc3Npb24sICJkaXNtaXNzICMzIikKKworCisKK2Rl
ZiB0ZXN0X2hhbmRsZV9wcm9tcHRfYWNjZXB0KG5ld19zZXNzaW9uKToKKyAgICAjIDEzLjMgc3Rl
cCAyCisgICAgXywgc2Vzc2lvbiA9IG5ld19zZXNzaW9uKHsiYWx3YXlzTWF0Y2giOiB7InVuaGFu
ZGxlZFByb21wdEJlaGF2aW9yIjogImFjY2VwdCJ9fSkKKyAgICBzZXNzaW9uLnVybCA9IGlubGlu
ZSgiPGlucHV0IGlkPWZvbz4iKQorCisgICAgY3JlYXRlX2RpYWxvZyhzZXNzaW9uKSgiYWxlcnQi
LCB0ZXh0PSJkaXNtaXNzICMxIiwgcmVzdWx0X3Zhcj0iZGlzbWlzczEiKQorCisgICAgcmVzdWx0
ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwgInNlc3Npb24ve3Nlc3Npb25faWR9L2Vs
ZW1lbnQve2VsZW1lbnRfaWR9L3Byb3BlcnR5L2lkIgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLmZvcm1hdChzZXNzaW9uX2lkPXNlc3Npb24uc2Vzc2lvbl9pZCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudF9pZD0iZm9vIikp
CisKKyAgICBhc3NlcnRfc3VjY2VzcyhyZXN1bHQsICJmb28iKQorICAgIGFzc2VydF9kaWFsb2df
aGFuZGxlZChzZXNzaW9uLCAiZGlzbWlzcyAjMSIpCisKKyAgICBjcmVhdGVfZGlhbG9nKHNlc3Np
b24pKCJjb25maXJtIiwgdGV4dD0iZGlzbWlzcyAjMiIsIHJlc3VsdF92YXI9ImRpc21pc3MyIikK
KworICAgIHJlc3VsdCA9IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIkdFVCIsICJzZXNzaW9uL3tz
ZXNzaW9uX2lkfS9lbGVtZW50L3tlbGVtZW50X2lkfS9wcm9wZXJ0eS9pZCIKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoc2Vzc2lvbl9pZD1zZXNzaW9uLnNlc3Np
b25faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1l
bnRfaWQ9ImZvbyIpKQorCisgICAgYXNzZXJ0X3N1Y2Nlc3MocmVzdWx0LCAiZm9vIikKKyAgICBh
c3NlcnRfZGlhbG9nX2hhbmRsZWQoc2Vzc2lvbiwgImRpc21pc3MgIzIiKQorCisgICAgY3JlYXRl
X2RpYWxvZyhzZXNzaW9uKSgicHJvbXB0IiwgdGV4dD0iZGlzbWlzcyAjMyIsIHJlc3VsdF92YXI9
ImRpc21pc3MzIikKKworICAgIHJlc3VsdCA9IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIkdFVCIs
ICJzZXNzaW9uL3tzZXNzaW9uX2lkfS9lbGVtZW50L3tlbGVtZW50X2lkfS9wcm9wZXJ0eS9pZCIK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoc2Vzc2lvbl9pZD1z
ZXNzaW9uLnNlc3Npb25faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVsZW1lbnRfaWQ9ImZvbyIpKQorCisgICAgYXNzZXJ0X3N1Y2Nlc3MocmVzdWx0LCAi
Zm9vIikKKyAgICBhc3NlcnRfZGlhbG9nX2hhbmRsZWQoc2Vzc2lvbiwgImRpc21pc3MgIzMiKQor
CisKK2RlZiB0ZXN0X2hhbmRsZV9wcm9tcHRfbWlzc2luZ192YWx1ZShzZXNzaW9uLCBjcmVhdGVf
ZGlhbG9nKToKKyAgICAjIDEzLjMgc3RlcCAyCisgICAgc2Vzc2lvbi51cmwgPSBpbmxpbmUoIjxp
bnB1dCBpZD1mb28+IikKKworICAgIGNyZWF0ZV9kaWFsb2coc2Vzc2lvbikoImFsZXJ0IiwgdGV4
dD0iZGlzbWlzcyAjMSIsIHJlc3VsdF92YXI9ImRpc21pc3MxIikKKworICAgIHJlc3VsdCA9IHNl
c3Npb24udHJhbnNwb3J0LnNlbmQoIkdFVCIsICJzZXNzaW9uL3tzZXNzaW9uX2lkfS9lbGVtZW50
L3tlbGVtZW50X2lkfS9wcm9wZXJ0eS9pZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC5mb3JtYXQoc2Vzc2lvbl9pZD1zZXNzaW9uLnNlc3Npb25faWQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRfaWQ9ImZvbyIpKQorCisg
ICAgYXNzZXJ0X2Vycm9yKHJlc3VsdCwgInVuZXhwZWN0ZWQgYWxlcnQgb3BlbiIpCisgICAgYXNz
ZXJ0X2RpYWxvZ19oYW5kbGVkKHNlc3Npb24sICJkaXNtaXNzICMxIikKKworICAgIGNyZWF0ZV9k
aWFsb2coc2Vzc2lvbikoImNvbmZpcm0iLCB0ZXh0PSJkaXNtaXNzICMyIiwgcmVzdWx0X3Zhcj0i
ZGlzbWlzczIiKQorCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwg
InNlc3Npb24ve3Nlc3Npb25faWR9L2VsZW1lbnQve2VsZW1lbnRfaWR9L3Byb3BlcnR5L2lkIgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChzZXNzaW9uX2lkPXNl
c3Npb24uc2Vzc2lvbl9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxlbWVudF9pZD0iZm9vIikpCisKKyAgICBhc3NlcnRfZXJyb3IocmVzdWx0LCAidW5l
eHBlY3RlZCBhbGVydCBvcGVuIikKKyAgICBhc3NlcnRfZGlhbG9nX2hhbmRsZWQoc2Vzc2lvbiwg
ImRpc21pc3MgIzIiKQorCisgICAgY3JlYXRlX2RpYWxvZyhzZXNzaW9uKSgicHJvbXB0IiwgdGV4
dD0iZGlzbWlzcyAjMyIsIHJlc3VsdF92YXI9ImRpc21pc3MzIikKKworICAgIHJlc3VsdCA9IHNl
c3Npb24udHJhbnNwb3J0LnNlbmQoIkdFVCIsICJzZXNzaW9uL3tzZXNzaW9uX2lkfS9lbGVtZW50
L3tlbGVtZW50X2lkfS9wcm9wZXJ0eS9pZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC5mb3JtYXQoc2Vzc2lvbl9pZD1zZXNzaW9uLnNlc3Npb25faWQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRfaWQ9ImZvbyIpKQorCisg
ICAgYXNzZXJ0X2Vycm9yKHJlc3VsdCwgInVuZXhwZWN0ZWQgYWxlcnQgb3BlbiIpCisgICAgYXNz
ZXJ0X2RpYWxvZ19oYW5kbGVkKHNlc3Npb24sICJkaXNtaXNzICMzIikKKworZGVmIHRlc3RfZWxl
bWVudF9ub3RfZm91bmQoc2Vzc2lvbik6CisgICAgIyAxMy4zIFN0ZXAgMworICAgIHJlc3VsdCA9
IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIkdFVCIsICJzZXNzaW9uL3tzZXNzaW9uX2lkfS9lbGVt
ZW50L3tlbGVtZW50X2lkfS9wcm9wZXJ0eS9pZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC5mb3JtYXQoc2Vzc2lvbl9pZD1zZXNzaW9uLnNlc3Npb25faWQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRfaWQ9ImZvbyIpKQor
CisgICAgYXNzZXJ0X2Vycm9yKHJlc3VsdCwgIm5vIHN1Y2ggZWxlbWVudCIpCisKKworZGVmIHRl
c3RfZWxlbWVudF9zdGFsZShzZXNzaW9uKToKKyAgICAjIDEzLjMgc3RlcCA0CisgICAgc2Vzc2lv
bi51cmwgPSBfaW5wdXQKKyAgICBlbGVtZW50ID0gc2Vzc2lvbi5maW5kLmNzcygiaW5wdXQiLCBh
bGw9RmFsc2UpCisgICAgc2Vzc2lvbi5yZWZyZXNoKCkKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRy
YW5zcG9ydC5zZW5kKCJHRVQiLCAic2Vzc2lvbi97c2Vzc2lvbl9pZH0vZWxlbWVudC97ZWxlbWVu
dF9pZH0vcHJvcGVydHkvaWQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAu
Zm9ybWF0KHNlc3Npb25faWQ9c2Vzc2lvbi5zZXNzaW9uX2lkLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50X2lkPWVsZW1lbnQuaWQpKQorCisgICAg
YXNzZXJ0X2Vycm9yKHJlc3VsdCwgInN0YWxlIGVsZW1lbnQgcmVmZXJlbmNlIikKKworCitkZWYg
dGVzdF9lbGVtZW50X25vbl9leGlzdGVudChzZXNzaW9uKToKKyAgICAjIDEzLjMgc3RlcCA1LTcK
KyAgICBzZXNzaW9uLnVybCA9IF9pbnB1dAorICAgIGVsZW1lbnQgPSBzZXNzaW9uLmZpbmQuY3Nz
KCJpbnB1dCIsIGFsbD1GYWxzZSkKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5k
KCJHRVQiLCAic2Vzc2lvbi97c2Vzc2lvbl9pZH0vZWxlbWVudC97ZWxlbWVudF9pZH0vcHJvcGVy
dHkvZm9vIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChzZXNz
aW9uX2lkPXNlc3Npb24uc2Vzc2lvbl9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWxlbWVudF9pZD1lbGVtZW50LmlkKSkKKworICAgIGFzc2VydF9zdWNj
ZXNzKHJlc3VsdCwgTm9uZSkKKyAgICBhc3NlcnQgTm9uZSA9PSBzZXNzaW9uLmV4ZWN1dGVfc2Ny
aXB0KCJyZXR1cm4gYXJndW1lbnRzWzBdLmZvbyIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhcmdzPVtlbGVtZW50XSkKKworCitkZWYgdGVzdF9lbGVtZW50KHNl
c3Npb24pOgorICAgICMgMTMuMyBzdGVwIDUtNworICAgIHNlc3Npb24udXJsID0gaW5saW5lKCI8
aW5wdXQgdHlwZT1jaGVja2JveD4iKQorICAgIGVsZW1lbnQgPSBzZXNzaW9uLmZpbmQuY3NzKCJp
bnB1dCIsIGFsbD1GYWxzZSkKKyAgICBlbGVtZW50LmNsaWNrKCkKKyAgICBhc3NlcnQgTm9uZSA9
PSBzZXNzaW9uLmV4ZWN1dGVfc2NyaXB0KCJyZXR1cm4gYXJndW1lbnRzWzBdLmhhc0F0dHJpYnV0
ZSgnY2hlY2tlZCcpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFyZ3M9W2VsZW1lbnRdKQorICAgIHJlc3VsdCA9IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIkdF
VCIsICJzZXNzaW9uL3tzZXNzaW9uX2lkfS9lbGVtZW50L3tlbGVtZW50X2lkfS9wcm9wZXJ0eS9p
ZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoc2Vzc2lvbl9p
ZD1zZXNzaW9uLnNlc3Npb25faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVsZW1lbnRfaWQ9ZWxlbWVudC5pZCkpCisgICAgYXNzZXJ0X3N1Y2Nlc3MocmVz
dWx0LCBUcnVlKQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRy
aXZlci90ZXN0cy9zdGF0ZS9nZXRfZWxlbWVudF90YWdfbmFtZS5weSBiL1dlYkRyaXZlclRlc3Rz
L2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvc3RhdGUvZ2V0X2VsZW1lbnRfdGFnX25hbWUu
cHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQxMDBlOWIxZTE3Ci0t
LSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90
ZXN0cy9zdGF0ZS9nZXRfZWxlbWVudF90YWdfbmFtZS5weQpAQCAtMCwwICsxLDE0NiBAQAorZnJv
bSB0ZXN0cy5zdXBwb3J0LmFzc2VydHMgaW1wb3J0IGFzc2VydF9lcnJvciwgYXNzZXJ0X2RpYWxv
Z19oYW5kbGVkLCBhc3NlcnRfc3VjY2VzcworZnJvbSB0ZXN0cy5zdXBwb3J0LmlubGluZSBpbXBv
cnQgaW5saW5lCitmcm9tIHRlc3RzLnN1cHBvcnQuZml4dHVyZXMgaW1wb3J0IGNyZWF0ZV9kaWFs
b2cKKworCisjIDEzLjYgR2V0IEVsZW1lbnQgVGFnIE5hbWUKKworZGVmIHRlc3Rfbm9fYnJvd3Np
bmdfY29udGV4dChzZXNzaW9uLCBjcmVhdGVfd2luZG93KToKKyAgICAjIDEzLjYgc3RlcCAxCisg
ICAgc2Vzc2lvbi53aW5kb3dfaGFuZGxlID0gY3JlYXRlX3dpbmRvdygpCisgICAgc2Vzc2lvbi5j
bG9zZSgpCisKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLCAic2Vz
c2lvbi97c2Vzc2lvbl9pZH0vZWxlbWVudC97ZWxlbWVudF9pZH0vbmFtZSIKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoc2Vzc2lvbl9pZD1zZXNzaW9uLnNlc3Np
b25faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1l
bnRfaWQ9ImZvbyIpKQorCisgICAgYXNzZXJ0X2Vycm9yKHJlc3VsdCwgIm5vIHN1Y2ggd2luZG93
IikKKworCitkZWYgdGVzdF9oYW5kbGVfcHJvbXB0X2Rpc21pc3MobmV3X3Nlc3Npb24pOgorICAg
ICMgMTMuNiBzdGVwIDIKKyAgICBfLCBzZXNzaW9uID0gbmV3X3Nlc3Npb24oeyJhbHdheXNNYXRj
aCI6IHsidW5oYW5kbGVkUHJvbXB0QmVoYXZpb3IiOiAiZGlzbWlzcyJ9fSkKKyAgICBzZXNzaW9u
LnVybCA9IGlubGluZSgiPGlucHV0IGlkPWZvbz4iKQorCisgICAgY3JlYXRlX2RpYWxvZyhzZXNz
aW9uKSgiYWxlcnQiLCB0ZXh0PSJkaXNtaXNzICMxIiwgcmVzdWx0X3Zhcj0iZGlzbWlzczEiKQor
CisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwgInNlc3Npb24ve3Nl
c3Npb25faWR9L2VsZW1lbnQve2VsZW1lbnRfaWR9L25hbWUiCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAuZm9ybWF0KHNlc3Npb25faWQ9c2Vzc2lvbi5zZXNzaW9uX2lkLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50X2lkPSJm
b28iKSkKKworICAgIGFzc2VydF9zdWNjZXNzKHJlc3VsdCwgImZvbyIpCisgICAgYXNzZXJ0X2Rp
YWxvZ19oYW5kbGVkKHNlc3Npb24sICJkaXNtaXNzICMxIikKKworICAgIGNyZWF0ZV9kaWFsb2co
c2Vzc2lvbikoImNvbmZpcm0iLCB0ZXh0PSJkaXNtaXNzICMyIiwgcmVzdWx0X3Zhcj0iZGlzbWlz
czIiKQorCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwgInNlc3Np
b24ve3Nlc3Npb25faWR9L2VsZW1lbnQve2VsZW1lbnRfaWR9L25hbWUiCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHNlc3Npb25faWQ9c2Vzc2lvbi5zZXNzaW9u
X2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50
X2lkPSJmb28iKSkKKworICAgIGFzc2VydF9zdWNjZXNzKHJlc3VsdCwgImZvbyIpCisgICAgYXNz
ZXJ0X2RpYWxvZ19oYW5kbGVkKHNlc3Npb24sICJkaXNtaXNzICMyIikKKworICAgIGNyZWF0ZV9k
aWFsb2coc2Vzc2lvbikoInByb21wdCIsIHRleHQ9ImRpc21pc3MgIzMiLCByZXN1bHRfdmFyPSJk
aXNtaXNzMyIpCisKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLCAi
c2Vzc2lvbi97c2Vzc2lvbl9pZH0vZWxlbWVudC97ZWxlbWVudF9pZH0vbmFtZSIKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoc2Vzc2lvbl9pZD1zZXNzaW9uLnNl
c3Npb25faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVs
ZW1lbnRfaWQ9ImZvbyIpKQorCisgICAgYXNzZXJ0X3N1Y2Nlc3MocmVzdWx0LCAiZm9vIikKKyAg
ICBhc3NlcnRfZGlhbG9nX2hhbmRsZWQoc2Vzc2lvbiwgImRpc21pc3MgIzMiKQorCisKK2RlZiB0
ZXN0X2hhbmRsZV9wcm9tcHRfYWNjZXB0KG5ld19zZXNzaW9uKToKKyAgICAjIDEzLjYgc3RlcCAy
CisgICAgXywgc2Vzc2lvbiA9IG5ld19zZXNzaW9uKHsiYWx3YXlzTWF0Y2giOiB7InVuaGFuZGxl
ZFByb21wdEJlaGF2aW9yIjogImFjY2VwdCJ9fSkKKyAgICBzZXNzaW9uLnVybCA9IGlubGluZSgi
PGlucHV0IGlkPWZvbz4iKQorCisgICAgY3JlYXRlX2RpYWxvZyhzZXNzaW9uKSgiYWxlcnQiLCB0
ZXh0PSJkaXNtaXNzICMxIiwgcmVzdWx0X3Zhcj0iZGlzbWlzczEiKQorCisgICAgcmVzdWx0ID0g
c2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwgInNlc3Npb24ve3Nlc3Npb25faWR9L2VsZW1l
bnQve2VsZW1lbnRfaWR9L25hbWUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAuZm9ybWF0KHNlc3Npb25faWQ9c2Vzc2lvbi5zZXNzaW9uX2lkLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50X2lkPSJmb28iKSkKKworICAgIGFz
c2VydF9zdWNjZXNzKHJlc3VsdCwgImZvbyIpCisgICAgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNl
c3Npb24sICJkaXNtaXNzICMxIikKKworICAgIGNyZWF0ZV9kaWFsb2coc2Vzc2lvbikoImNvbmZp
cm0iLCB0ZXh0PSJkaXNtaXNzICMyIiwgcmVzdWx0X3Zhcj0iZGlzbWlzczIiKQorCisgICAgcmVz
dWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwgInNlc3Npb24ve3Nlc3Npb25faWR9
L2VsZW1lbnQve2VsZW1lbnRfaWR9L25hbWUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAuZm9ybWF0KHNlc3Npb25faWQ9c2Vzc2lvbi5zZXNzaW9uX2lkLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50X2lkPSJmb28iKSkKKwor
ICAgIGFzc2VydF9zdWNjZXNzKHJlc3VsdCwgImZvbyIpCisgICAgYXNzZXJ0X2RpYWxvZ19oYW5k
bGVkKHNlc3Npb24sICJkaXNtaXNzICMyIikKKworICAgIGNyZWF0ZV9kaWFsb2coc2Vzc2lvbiko
InByb21wdCIsIHRleHQ9ImRpc21pc3MgIzMiLCByZXN1bHRfdmFyPSJkaXNtaXNzMyIpCisKKyAg
ICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLCAic2Vzc2lvbi97c2Vzc2lv
bl9pZH0vZWxlbWVudC97ZWxlbWVudF9pZH0vbmFtZSIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC5mb3JtYXQoc2Vzc2lvbl9pZD1zZXNzaW9uLnNlc3Npb25faWQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRfaWQ9ImZvbyIp
KQorCisgICAgYXNzZXJ0X3N1Y2Nlc3MocmVzdWx0LCAiZm9vIikKKyAgICBhc3NlcnRfZGlhbG9n
X2hhbmRsZWQoc2Vzc2lvbiwgImRpc21pc3MgIzMiKQorCisKK2RlZiB0ZXN0X2hhbmRsZV9wcm9t
cHRfbWlzc2luZ192YWx1ZShzZXNzaW9uLCBjcmVhdGVfZGlhbG9nKToKKyAgICAjIDEzLjYgc3Rl
cCAyCisgICAgc2Vzc2lvbi51cmwgPSBpbmxpbmUoIjxpbnB1dCBpZD1mb28+IikKKworICAgIGNy
ZWF0ZV9kaWFsb2coc2Vzc2lvbikoImFsZXJ0IiwgdGV4dD0iZGlzbWlzcyAjMSIsIHJlc3VsdF92
YXI9ImRpc21pc3MxIikKKworICAgIHJlc3VsdCA9IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIkdF
VCIsICJzZXNzaW9uL3tzZXNzaW9uX2lkfS9lbGVtZW50L3tlbGVtZW50X2lkfS9uYW1lIgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChzZXNzaW9uX2lkPXNlc3Np
b24uc2Vzc2lvbl9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWxlbWVudF9pZD0iZm9vIikpCisKKyAgICBhc3NlcnRfZXJyb3IocmVzdWx0LCAidW5leHBl
Y3RlZCBhbGVydCBvcGVuIikKKyAgICBhc3NlcnRfZGlhbG9nX2hhbmRsZWQoc2Vzc2lvbiwgImRp
c21pc3MgIzEiKQorCisgICAgY3JlYXRlX2RpYWxvZyhzZXNzaW9uKSgiY29uZmlybSIsIHRleHQ9
ImRpc21pc3MgIzIiLCByZXN1bHRfdmFyPSJkaXNtaXNzMiIpCisKKyAgICByZXN1bHQgPSBzZXNz
aW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLCAic2Vzc2lvbi97c2Vzc2lvbl9pZH0vZWxlbWVudC97
ZWxlbWVudF9pZH0vbmFtZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5m
b3JtYXQoc2Vzc2lvbl9pZD1zZXNzaW9uLnNlc3Npb25faWQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRfaWQ9ImZvbyIpKQorCisgICAgYXNzZXJ0
X2Vycm9yKHJlc3VsdCwgInVuZXhwZWN0ZWQgYWxlcnQgb3BlbiIpCisgICAgYXNzZXJ0X2RpYWxv
Z19oYW5kbGVkKHNlc3Npb24sICJkaXNtaXNzICMyIikKKworICAgIGNyZWF0ZV9kaWFsb2coc2Vz
c2lvbikoInByb21wdCIsIHRleHQ9ImRpc21pc3MgIzMiLCByZXN1bHRfdmFyPSJkaXNtaXNzMyIp
CisKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLCAic2Vzc2lvbi97
c2Vzc2lvbl9pZH0vZWxlbWVudC97ZWxlbWVudF9pZH0vbmFtZSIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoc2Vzc2lvbl9pZD1zZXNzaW9uLnNlc3Npb25faWQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRfaWQ9
ImZvbyIpKQorCisgICAgYXNzZXJ0X2Vycm9yKHJlc3VsdCwgInVuZXhwZWN0ZWQgYWxlcnQgb3Bl
biIpCisgICAgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNlc3Npb24sICJkaXNtaXNzICMzIikKKwor
CitkZWYgdGVzdF9lbGVtZW50X25vdF9mb3VuZChzZXNzaW9uKToKKyAgICAjIDEzLjYgU3RlcCAz
CisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwgInNlc3Npb24ve3Nl
c3Npb25faWR9L2VsZW1lbnQve2VsZW1lbnRfaWR9L25hbWUiCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAuZm9ybWF0KHNlc3Npb25faWQ9c2Vzc2lvbi5zZXNzaW9uX2lkLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50X2lkPSJm
b28iKSkKKworICAgIGFzc2VydF9lcnJvcihyZXN1bHQsICJubyBzdWNoIGVsZW1lbnQiKQorCisK
K2RlZiB0ZXN0X2VsZW1lbnRfc3RhbGUoc2Vzc2lvbik6CisgICAgIyAxMy42IHN0ZXAgNAorICAg
IHNlc3Npb24udXJsID0gaW5saW5lKCI8aW5wdXQgaWQ9Zm9vPiIpCisgICAgZWxlbWVudCA9IHNl
c3Npb24uZmluZC5jc3MoImlucHV0IiwgYWxsPUZhbHNlKQorICAgIHNlc3Npb24ucmVmcmVzaCgp
CisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwgInNlc3Npb24ve3Nl
c3Npb25faWR9L2VsZW1lbnQve2VsZW1lbnRfaWR9L25hbWUiCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAuZm9ybWF0KHNlc3Npb25faWQ9c2Vzc2lvbi5zZXNzaW9uX2lkLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50X2lkPWVs
ZW1lbnQuaWQpKQorCisgICAgYXNzZXJ0X2Vycm9yKHJlc3VsdCwgInN0YWxlIGVsZW1lbnQgcmVm
ZXJlbmNlIikKKworCitkZWYgdGVzdF9nZXRfZWxlbWVudF90YWdfbmFtZShzZXNzaW9uKToKKyAg
ICAjIDEzLjYgc3RlcCA2CisgICAgc2Vzc2lvbi51cmwgPSBpbmxpbmUoIjxpbnB1dCBpZD1mb28+
IikKKyAgICBlbGVtZW50ID0gc2Vzc2lvbi5maW5kLmNzcygiaW5wdXQiLCBhbGw9RmFsc2UpCisg
ICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwgInNlc3Npb24ve3Nlc3Np
b25faWR9L2VsZW1lbnQve2VsZW1lbnRfaWR9L25hbWUiCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAuZm9ybWF0KHNlc3Npb25faWQ9c2Vzc2lvbi5zZXNzaW9uX2lkLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50X2lkPWVsZW1l
bnQuaWQpKQorICAgIGFzc2VydF9zdWNjZXNzKHJlc3VsdCwgImlucHV0IikKZGlmZiAtLWdpdCBh
L1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvc3RhdGUvaXNfZWxl
bWVudF9zZWxlY3RlZC5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIv
dGVzdHMvc3RhdGUvaXNfZWxlbWVudF9zZWxlY3RlZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uYzgyZjI2ZmE5MTIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2
ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL3N0YXRlL2lzX2VsZW1lbnRfc2Vs
ZWN0ZWQucHkKQEAgLTAsMCArMSwxODAgQEAKK2Zyb20gdGVzdHMuc3VwcG9ydC5hc3NlcnRzIGlt
cG9ydCBhc3NlcnRfZXJyb3IsIGFzc2VydF9kaWFsb2dfaGFuZGxlZCwgYXNzZXJ0X3N1Y2Nlc3MK
K2Zyb20gdGVzdHMuc3VwcG9ydC5pbmxpbmUgaW1wb3J0IGlubGluZQorZnJvbSB0ZXN0cy5zdXBw
b3J0LmZpeHR1cmVzIGltcG9ydCBjcmVhdGVfZGlhbG9nCisKKworYWxlcnRfZG9jID0gaW5saW5l
KCI8c2NyaXB0PndpbmRvdy5hbGVydCgpPC9zY3JpcHQ+IikKK2NoZWNrX2RvYyA9IGlubGluZSgi
PGlucHV0IGlkPWNoZWNrZWQgdHlwZT1jaGVja2JveCBjaGVja2VkLz48aW5wdXQgaWQ9bm90Q2hl
Y2tlZCB0eXBlPWNoZWNrYm94Lz4iKQorb3B0aW9uX2RvYyA9IGlubGluZSgiIiI8c2VsZWN0Pgor
ICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBpZD1ub3RTZWxlY3RlZD5yLTwvb3B0aW9u
PgorICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBpZD1zZWxlY3RlZCBzZWxlY3RlZD5y
Kzwvb3B0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD4KKyAgICAgICAgICAg
ICAgICAgICAgIiIiKQorCisKKyMgMTMuMSBJcyBFbGVtZW50IFNlbGVjdGVkCisKK2RlZiB0ZXN0
X25vX2Jyb3dzaW5nX2NvbnRleHQoc2Vzc2lvbiwgY3JlYXRlX3dpbmRvdyk6CisgICAgIyAxMy4x
IHN0ZXAgMQorICAgIHNlc3Npb24ud2luZG93X2hhbmRsZSA9IGNyZWF0ZV93aW5kb3coKQorICAg
IHNlc3Npb24uY2xvc2UoKQorCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgi
R0VUIiwgInNlc3Npb24ve3Nlc3Npb25faWR9L2VsZW1lbnQve2VsZW1lbnRfaWR9L3NlbGVjdGVk
IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChzZXNzaW9uX2lk
PXNlc3Npb24uc2Vzc2lvbl9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZWxlbWVudF9pZD0iZm9vIikpCisKKyAgICBhc3NlcnRfZXJyb3IocmVzdWx0LCAi
bm8gc3VjaCB3aW5kb3ciKQorCisKK2RlZiB0ZXN0X2hhbmRsZV9wcm9tcHRfZGlzbWlzcyhuZXdf
c2Vzc2lvbik6CisgICAgIyAxMy4xIHN0ZXAgMgorICAgIF8sIHNlc3Npb24gPSBuZXdfc2Vzc2lv
bih7ImFsd2F5c01hdGNoIjogeyJ1bmhhbmRsZWRQcm9tcHRCZWhhdmlvciI6ICJkaXNtaXNzIn19
KQorICAgIHNlc3Npb24udXJsID0gaW5saW5lKCI8aW5wdXQgaWQ9Zm9vPiIpCisKKyAgICBjcmVh
dGVfZGlhbG9nKHNlc3Npb24pKCJhbGVydCIsIHRleHQ9ImRpc21pc3MgIzEiLCByZXN1bHRfdmFy
PSJkaXNtaXNzMSIpCisKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQi
LCAic2Vzc2lvbi97c2Vzc2lvbl9pZH0vZWxlbWVudC97ZWxlbWVudF9pZH0vc2VsZWN0ZWQiCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHNlc3Npb25faWQ9c2Vz
c2lvbi5zZXNzaW9uX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbGVtZW50X2lkPSJmb28iKSkKKworICAgIGFzc2VydF9zdWNjZXNzKHJlc3VsdCwgImZv
byIpCisgICAgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNlc3Npb24sICJkaXNtaXNzICMxIikKKwor
ICAgIGNyZWF0ZV9kaWFsb2coc2Vzc2lvbikoImNvbmZpcm0iLCB0ZXh0PSJkaXNtaXNzICMyIiwg
cmVzdWx0X3Zhcj0iZGlzbWlzczIiKQorCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQu
c2VuZCgiR0VUIiwgInNlc3Npb24ve3Nlc3Npb25faWR9L2VsZW1lbnQve2VsZW1lbnRfaWR9L3Nl
bGVjdGVkIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChzZXNz
aW9uX2lkPXNlc3Npb24uc2Vzc2lvbl9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWxlbWVudF9pZD0iZm9vIikpCisKKyAgICBhc3NlcnRfc3VjY2Vzcyhy
ZXN1bHQsICJmb28iKQorICAgIGFzc2VydF9kaWFsb2dfaGFuZGxlZChzZXNzaW9uLCAiZGlzbWlz
cyAjMiIpCisKKyAgICBjcmVhdGVfZGlhbG9nKHNlc3Npb24pKCJwcm9tcHQiLCB0ZXh0PSJkaXNt
aXNzICMzIiwgcmVzdWx0X3Zhcj0iZGlzbWlzczMiKQorCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50
cmFuc3BvcnQuc2VuZCgiR0VUIiwgInNlc3Npb24ve3Nlc3Npb25faWR9L2VsZW1lbnQve2VsZW1l
bnRfaWR9L3NlbGVjdGVkIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZv
cm1hdChzZXNzaW9uX2lkPXNlc3Npb24uc2Vzc2lvbl9pZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudF9pZD0iZm9vIikpCisKKyAgICBhc3NlcnRf
c3VjY2VzcyhyZXN1bHQsICJmb28iKQorICAgIGFzc2VydF9kaWFsb2dfaGFuZGxlZChzZXNzaW9u
LCAiZGlzbWlzcyAjMyIpCisKKworZGVmIHRlc3RfaGFuZGxlX3Byb21wdF9hY2NlcHQobmV3X3Nl
c3Npb24pOgorICAgICMgMTMuMSBzdGVwIDIKKyAgICBfLCBzZXNzaW9uID0gbmV3X3Nlc3Npb24o
eyJhbHdheXNNYXRjaCI6IHsidW5oYW5kbGVkUHJvbXB0QmVoYXZpb3IiOiAiYWNjZXB0In19KQor
ICAgIHNlc3Npb24udXJsID0gaW5saW5lKCI8aW5wdXQgaWQ9Zm9vPiIpCisKKyAgICBjcmVhdGVf
ZGlhbG9nKHNlc3Npb24pKCJhbGVydCIsIHRleHQ9ImRpc21pc3MgIzEiLCByZXN1bHRfdmFyPSJk
aXNtaXNzMSIpCisKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLCAi
c2Vzc2lvbi97c2Vzc2lvbl9pZH0vZWxlbWVudC97ZWxlbWVudF9pZH0vc2VsZWN0ZWQiCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHNlc3Npb25faWQ9c2Vzc2lv
bi5zZXNzaW9uX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbGVtZW50X2lkPSJmb28iKSkKKworICAgIGFzc2VydF9zdWNjZXNzKHJlc3VsdCwgImZvbyIp
CisgICAgYXNzZXJ0X2RpYWxvZ19oYW5kbGVkKHNlc3Npb24sICJkaXNtaXNzICMxIikKKworICAg
IGNyZWF0ZV9kaWFsb2coc2Vzc2lvbikoImNvbmZpcm0iLCB0ZXh0PSJkaXNtaXNzICMyIiwgcmVz
dWx0X3Zhcj0iZGlzbWlzczIiKQorCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2Vu
ZCgiR0VUIiwgInNlc3Npb24ve3Nlc3Npb25faWR9L2VsZW1lbnQve2VsZW1lbnRfaWR9L3NlbGVj
dGVkIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChzZXNzaW9u
X2lkPXNlc3Npb24uc2Vzc2lvbl9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWxlbWVudF9pZD0iZm9vIikpCisKKyAgICBhc3NlcnRfc3VjY2VzcyhyZXN1
bHQsICJmb28iKQorICAgIGFzc2VydF9kaWFsb2dfaGFuZGxlZChzZXNzaW9uLCAiZGlzbWlzcyAj
MiIpCisKKyAgICBjcmVhdGVfZGlhbG9nKHNlc3Npb24pKCJwcm9tcHQiLCB0ZXh0PSJkaXNtaXNz
ICMzIiwgcmVzdWx0X3Zhcj0iZGlzbWlzczMiKQorCisgICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFu
c3BvcnQuc2VuZCgiR0VUIiwgInNlc3Npb24ve3Nlc3Npb25faWR9L2VsZW1lbnQve2VsZW1lbnRf
aWR9L3NlbGVjdGVkIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1h
dChzZXNzaW9uX2lkPXNlc3Npb24uc2Vzc2lvbl9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZWxlbWVudF9pZD0iZm9vIikpCisKKyAgICBhc3NlcnRfc3Vj
Y2VzcyhyZXN1bHQsICJmb28iKQorICAgIGFzc2VydF9kaWFsb2dfaGFuZGxlZChzZXNzaW9uLCAi
ZGlzbWlzcyAjMyIpCisKKworZGVmIHRlc3RfaGFuZGxlX3Byb21wdF9taXNzaW5nX3ZhbHVlKHNl
c3Npb24sIGNyZWF0ZV9kaWFsb2cpOgorICAgICMgMTMuMSBzdGVwIDIKKyAgICBzZXNzaW9uLnVy
bCA9IGlubGluZSgiPGlucHV0IGlkPWZvbz4iKQorCisgICAgY3JlYXRlX2RpYWxvZyhzZXNzaW9u
KSgiYWxlcnQiLCB0ZXh0PSJkaXNtaXNzICMxIiwgcmVzdWx0X3Zhcj0iZGlzbWlzczEiKQorCisg
ICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwgInNlc3Npb24ve3Nlc3Np
b25faWR9L2VsZW1lbnQve2VsZW1lbnRfaWR9L3NlbGVjdGVkIgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLmZvcm1hdChzZXNzaW9uX2lkPXNlc3Npb24uc2Vzc2lvbl9pZCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudF9pZD0i
Zm9vIikpCisKKyAgICBhc3NlcnRfZXJyb3IocmVzdWx0LCAidW5leHBlY3RlZCBhbGVydCBvcGVu
IikKKyAgICBhc3NlcnRfZGlhbG9nX2hhbmRsZWQoc2Vzc2lvbiwgImRpc21pc3MgIzEiKQorCisg
ICAgY3JlYXRlX2RpYWxvZyhzZXNzaW9uKSgiY29uZmlybSIsIHRleHQ9ImRpc21pc3MgIzIiLCBy
ZXN1bHRfdmFyPSJkaXNtaXNzMiIpCisKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5z
ZW5kKCJHRVQiLCAic2Vzc2lvbi97c2Vzc2lvbl9pZH0vZWxlbWVudC97ZWxlbWVudF9pZH0vc2Vs
ZWN0ZWQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHNlc3Np
b25faWQ9c2Vzc2lvbi5zZXNzaW9uX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbGVtZW50X2lkPSJmb28iKSkKKworICAgIGFzc2VydF9lcnJvcihyZXN1
bHQsICJ1bmV4cGVjdGVkIGFsZXJ0IG9wZW4iKQorICAgIGFzc2VydF9kaWFsb2dfaGFuZGxlZChz
ZXNzaW9uLCAiZGlzbWlzcyAjMiIpCisKKyAgICBjcmVhdGVfZGlhbG9nKHNlc3Npb24pKCJwcm9t
cHQiLCB0ZXh0PSJkaXNtaXNzICMzIiwgcmVzdWx0X3Zhcj0iZGlzbWlzczMiKQorCisgICAgcmVz
dWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwgInNlc3Npb24ve3Nlc3Npb25faWR9
L2VsZW1lbnQve2VsZW1lbnRfaWR9L3NlbGVjdGVkIgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLmZvcm1hdChzZXNzaW9uX2lkPXNlc3Npb24uc2Vzc2lvbl9pZCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudF9pZD0iZm9vIikp
CisKKyAgICBhc3NlcnRfZXJyb3IocmVzdWx0LCAidW5leHBlY3RlZCBhbGVydCBvcGVuIikKKyAg
ICBhc3NlcnRfZGlhbG9nX2hhbmRsZWQoc2Vzc2lvbiwgImRpc21pc3MgIzMiKQorCisKK2RlZiB0
ZXN0X2VsZW1lbnRfc3RhbGUoc2Vzc2lvbik6CisgICAgIyAxMy4xIHN0ZXAgNAorICAgIHNlc3Np
b24udXJsID0gY2hlY2tfZG9jCisgICAgZWxlbWVudCA9IHNlc3Npb24uZmluZC5jc3MoIiNjaGVj
a2VkIiwgYWxsPUZhbHNlKQorICAgIHNlc3Npb24ucmVmcmVzaCgpCisgICAgcmVzdWx0ID0gc2Vz
c2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwgInNlc3Npb24ve3Nlc3Npb25faWR9L2VsZW1lbnQv
e2VsZW1lbnRfaWR9L3NlbGVjdGVkIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLmZvcm1hdChzZXNzaW9uX2lkPXNlc3Npb24uc2Vzc2lvbl9pZCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudF9pZD1lbGVtZW50LmlkKSkKKwor
ICAgIGFzc2VydF9lcnJvcihyZXN1bHQsICJzdGFsZSBlbGVtZW50IHJlZmVyZW5jZSIpCisKKwor
ZGVmIHRlc3RfZWxlbWVudF9jaGVja2VkKHNlc3Npb24pOgorICAgICMgMTMuMSBzdGVwIDUKKyAg
ICBzZXNzaW9uLnVybCA9IGNoZWNrX2RvYworICAgIGVsZW1lbnQgPSBzZXNzaW9uLmZpbmQuY3Nz
KCIjY2hlY2tlZCIsIGFsbD1GYWxzZSkKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5z
ZW5kKCJHRVQiLCAic2Vzc2lvbi97c2Vzc2lvbl9pZH0vZWxlbWVudC97ZWxlbWVudF9pZH0vc2Vs
ZWN0ZWQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHNlc3Np
b25faWQ9c2Vzc2lvbi5zZXNzaW9uX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbGVtZW50X2lkPWVsZW1lbnQuaWQpKQorCisgICAgYXNzZXJ0X3N1Y2Nl
c3MocmVzdWx0LCBUcnVlKQorCisKK2RlZiB0ZXN0X2NoZWNrYm94X25vdF9zZWxlY3RlZChzZXNz
aW9uKToKKyAgICAjIDEzLjEgc3RlcCA1CisgICAgc2Vzc2lvbi51cmwgPSBjaGVja19kb2MKKyAg
ICBlbGVtZW50ID0gc2Vzc2lvbi5maW5kLmNzcygiI25vdENoZWNrZWQiLCBhbGw9RmFsc2UpCisg
ICAgcmVzdWx0ID0gc2Vzc2lvbi50cmFuc3BvcnQuc2VuZCgiR0VUIiwgInNlc3Npb24ve3Nlc3Np
b25faWR9L2VsZW1lbnQve2VsZW1lbnRfaWR9L3NlbGVjdGVkIgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLmZvcm1hdChzZXNzaW9uX2lkPXNlc3Npb24uc2Vzc2lvbl9pZCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudF9pZD1l
bGVtZW50LmlkKSkKKworICAgIGFzc2VydF9zdWNjZXNzKHJlc3VsdCwgRmFsc2UpCisKKworZGVm
IHRlc3RfZWxlbWVudF9zZWxlY3RlZChzZXNzaW9uKToKKyAgICAjIDEzLjEgc3RlcCA1CisgICAg
c2Vzc2lvbi51cmwgPSBvcHRpb25fZG9jCisgICAgZWxlbWVudCA9IHNlc3Npb24uZmluZC5jc3Mo
IiNzZWxlY3RlZCIsIGFsbD1GYWxzZSkKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5z
ZW5kKCJHRVQiLCAic2Vzc2lvbi97c2Vzc2lvbl9pZH0vZWxlbWVudC97ZWxlbWVudF9pZH0vc2Vs
ZWN0ZWQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHNlc3Np
b25faWQ9c2Vzc2lvbi5zZXNzaW9uX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbGVtZW50X2lkPWVsZW1lbnQuaWQpKQorCisgICAgYXNzZXJ0X3N1Y2Nl
c3MocmVzdWx0LCBUcnVlKQorCisKK2RlZiB0ZXN0X2VsZW1lbnRfbm90X3NlbGVjdGVkKHNlc3Np
b24pOgorICAgICMgMTMuMSBzdGVwIDUKKyAgICBzZXNzaW9uLnVybCA9IG9wdGlvbl9kb2MKKyAg
ICBlbGVtZW50ID0gc2Vzc2lvbi5maW5kLmNzcygiI25vdFNlbGVjdGVkIiwgYWxsPUZhbHNlKQor
ICAgIHJlc3VsdCA9IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoIkdFVCIsICJzZXNzaW9uL3tzZXNz
aW9uX2lkfS9lbGVtZW50L3tlbGVtZW50X2lkfS9zZWxlY3RlZCIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoc2Vzc2lvbl9pZD1zZXNzaW9uLnNlc3Npb25faWQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRfaWQ9
ZWxlbWVudC5pZCkpCisKKyAgICBhc3NlcnRfc3VjY2VzcyhyZXN1bHQsIEZhbHNlKQpkaWZmIC0t
Z2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9zdGF0ZS90
ZXh0L19faW5pdF9fLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90
ZXN0cy9zdGF0ZS90ZXh0L19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi5lNjlkZTI5YmIyZApkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9zdGF0ZS90ZXh0L2dldF90ZXh0LnB5IGIvV2ViRHJpdmVy
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9zdGF0ZS90ZXh0L2dldF90ZXh0LnB5
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hYTA3YjhkYzFmNAotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVz
dHMvc3RhdGUvdGV4dC9nZXRfdGV4dC5weQpAQCAtMCwwICsxLDI5IEBACitpbXBvcnQgcHl0ZXN0
CitpbXBvcnQgdXVpZAorCitmcm9tIHRlc3RzLnN1cHBvcnQuYXNzZXJ0cyBpbXBvcnQgYXNzZXJ0
X2Vycm9yLCBhc3NlcnRfc3VjY2VzcworZnJvbSB0ZXN0cy5zdXBwb3J0LmlubGluZSBpbXBvcnQg
aW5saW5lCisKKyMgRm9yIGZhaWxpbmcgdGVzdHMsIHRoZSBHZXQgRWxlbWVudCBUZXh0IGVuZC1w
b2ludCBpcyB1c2VkCisjIGRpcmVjdGx5LiBJbiBhbGwgb3RoZXIgY2FzZXMsIHRoZSBFbGVtZW50
LnRleHQoKSBmdW5jdGlvbiBpcyB1c2VkLgorCitkZWYgdGVzdF9nZXR0aW5nX3RleHRfb2ZfYV9u
b25fZXhpc3RhbnRfZWxlbWVudF9pc19hbl9lcnJvcihzZXNzaW9uKToKKyAgIHNlc3Npb24udXJs
ID0gaW5saW5lKCIiIjxib2R5PkhlbGxvIHdvcmxkPC9ib2R5PiIiIikKKyAgIGlkID0gdXVpZC51
dWlkNCgpCisKKyAgIHJlc3VsdCA9IHNlc3Npb24udHJhbnNwb3J0LnNlbmQoCisgICAgICAgIkdF
VCIsCisgICAgICAgInNlc3Npb24vJXMvZWxlbWVudC8lcy90ZXh0IiAlIChzZXNzaW9uLnNlc3Np
b25faWQsIGlkKSkKKworICAgYXNzZXJ0X2Vycm9yKHJlc3VsdCwgIm5vIHN1Y2ggZWxlbWVudCIp
CisKKworZGVmIHRlc3RfcmVhZF9lbGVtZW50X3RleHQoc2Vzc2lvbik6CisgICAgc2Vzc2lvbi51
cmwgPSBpbmxpbmUoIiIiCisgICAgICAgIDxib2R5PgorICAgICAgICAgIE5vaXNlIGJlZm9yZSA8
c3BhbiBpZD0naWQnPlRoaXMgaGFzIGFuIElEPC9zcGFuPi4gTm9pc2UgYWZ0ZXIKKyAgICAgICAg
PC9ib2R5PiIiIikKKworICAgIGVsZW1lbnQgPSBzZXNzaW9uLmZpbmQuY3NzKCIjaWQiLCBhbGw9
RmFsc2UpCisKKyAgICBhc3NlcnQgZWxlbWVudC50ZXh0ID09ICJUaGlzIGhhcyBhbiBJRCIKZGlm
ZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvc3Rh
dHVzLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9zdGF0
dXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjk0NzJmOGE4MGJi
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZl
ci90ZXN0cy9zdGF0dXMucHkKQEAgLTAsMCArMSwyMSBAQAoraW1wb3J0IHB5dGVzdAoraW1wb3J0
IGpzb24KKworCitkZWYgdGVzdF9nZXRfc3RhdHVzX25vX3Nlc3Npb24oaHR0cCk6CisgICAgd2l0
aCBodHRwLmdldCgiL3N0YXR1cyIpIGFzIHJlc3BvbnNlOgorICAgICAgICAjIEdFVCAvc3RhdHVz
IHNob3VsZCBuZXZlciByZXR1cm4gYW4gZXJyb3IKKyAgICAgICAgYXNzZXJ0IHJlc3BvbnNlLnN0
YXR1cyA9PSAyMDAKKworICAgICAgICAjIHBhcnNlIEpTT04gcmVzcG9uc2UgYW5kIHVud3JhcCAn
dmFsdWUnIHByb3BlcnR5CisgICAgICAgIHBhcnNlZF9vYmogPSBqc29uLmxvYWRzKHJlc3BvbnNl
LnJlYWQoKS5kZWNvZGUoJ3V0Zi04JykpCisgICAgICAgIHZhbHVlID0gcGFyc2VkX29ialsidmFs
dWUiXQorCisgICAgICAgICMgTGV0IGJvZHkgYmUgYSBuZXcgSlNPTiBPYmplY3Qgd2l0aCB0aGUg
Zm9sbG93aW5nIHByb3BlcnRpZXM6CisgICAgICAgICMgInJlYWR5IgorICAgICAgICAjICAgICAg
IFRoZSByZW1vdGUgZW5kJ3MgcmVhZGluZXNzIHN0YXRlLgorICAgICAgICBhc3NlcnQgdmFsdWVb
InJlYWR5Il0gaW4gW1RydWUsIEZhbHNlXQorICAgICAgICAjICJtZXNzYWdlIgorICAgICAgICAj
ICAgICAgIEFuIGltcGxlbWVudGF0aW9uLWRlZmluZWQgc3RyaW5nIGV4cGxhaW5pbmcgdGhlIHJl
bW90ZSBlbmQncworICAgICAgICAjICAgICAgIHJlYWRpbmVzcyBzdGF0ZS4KKyAgICAgICAgYXNz
ZXJ0IGlzaW5zdGFuY2UodmFsdWVbIm1lc3NhZ2UiXSwgYmFzZXN0cmluZykKZGlmZiAtLWdpdCBh
L1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvc3VwcG9ydC9fX2lu
aXRfXy5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvc3Vw
cG9ydC9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u
ZDM3ZmFmNmRhMDQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViZHJpdmVyL3Rlc3RzL3N1cHBvcnQvX19pbml0X18ucHkKQEAgLTAsMCArMSBAQAorZnJv
bSBtZXJnZV9kaWN0aW9uYXJpZXMgaW1wb3J0IG1lcmdlX2RpY3Rpb25hcmllcwpkaWZmIC0tZ2l0
IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9zdXBwb3J0L2Fz
c2VydHMucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL3N1
cHBvcnQvYXNzZXJ0cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u
MjFjYzA3YjljODEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViZHJpdmVyL3Rlc3RzL3N1cHBvcnQvYXNzZXJ0cy5weQpAQCAtMCwwICsxLDEyMiBAQAor
ZnJvbSB3ZWJkcml2ZXIuY2xpZW50IGltcG9ydCBFbGVtZW50LCBlbGVtZW50X2tleQorZnJvbSB3
ZWJkcml2ZXIuZXJyb3IgaW1wb3J0IFdlYkRyaXZlckV4Y2VwdGlvbgorCisjIFdlYkRyaXZlciBz
cGVjaWZpY2F0aW9uIElEOiBkZm4tZXJyb3ItcmVzcG9uc2UtZGF0YQorZXJyb3JzID0geworICAg
ICJlbGVtZW50IGNsaWNrIGludGVyY2VwdGVkIjogNDAwLAorICAgICJlbGVtZW50IG5vdCBzZWxl
Y3RhYmxlIjogNDAwLAorICAgICJlbGVtZW50IG5vdCBpbnRlcmFjdGFibGUiOiA0MDAsCisgICAg
Imluc2VjdXJlIGNlcnRpZmljYXRlIjogNDAwLAorICAgICJpbnZhbGlkIGFyZ3VtZW50IjogNDAw
LAorICAgICJpbnZhbGlkIGNvb2tpZSBkb21haW4iOiA0MDAsCisgICAgImludmFsaWQgY29vcmRp
bmF0ZXMiOiA0MDAsCisgICAgImludmFsaWQgZWxlbWVudCBzdGF0ZSI6IDQwMCwKKyAgICAiaW52
YWxpZCBzZWxlY3RvciI6IDQwMCwKKyAgICAiaW52YWxpZCBzZXNzaW9uIGlkIjogNDA0LAorICAg
ICJqYXZhc2NyaXB0IGVycm9yIjogNTAwLAorICAgICJtb3ZlIHRhcmdldCBvdXQgb2YgYm91bmRz
IjogNTAwLAorICAgICJubyBzdWNoIGFsZXJ0IjogNDA0LAorICAgICJubyBzdWNoIGNvb2tpZSI6
IDQwNCwKKyAgICAibm8gc3VjaCBlbGVtZW50IjogNDA0LAorICAgICJubyBzdWNoIGZyYW1lIjog
NDA0LAorICAgICJubyBzdWNoIHdpbmRvdyI6IDQwNCwKKyAgICAic2NyaXB0IHRpbWVvdXQiOiA0
MDgsCisgICAgInNlc3Npb24gbm90IGNyZWF0ZWQiOiA1MDAsCisgICAgInN0YWxlIGVsZW1lbnQg
cmVmZXJlbmNlIjogNDAwLAorICAgICJ0aW1lb3V0IjogNDA4LAorICAgICJ1bmFibGUgdG8gc2V0
IGNvb2tpZSI6IDUwMCwKKyAgICAidW5hYmxlIHRvIGNhcHR1cmUgc2NyZWVuIjogNTAwLAorICAg
ICJ1bmV4cGVjdGVkIGFsZXJ0IG9wZW4iOiA1MDAsCisgICAgInVua25vd24gY29tbWFuZCI6IDQw
NCwKKyAgICAidW5rbm93biBlcnJvciI6IDUwMCwKKyAgICAidW5rbm93biBtZXRob2QiOiA0MDUs
CisgICAgInVuc3VwcG9ydGVkIG9wZXJhdGlvbiI6IDUwMCwKK30KKworIyBXZWJEcml2ZXIgc3Bl
Y2lmaWNhdGlvbiBJRDogZGZuLXNlbmQtYW4tZXJyb3IKKyMKKyMgPiBXaGVuIHJlcXVpcmVkIHRv
IHNlbmQgYW4gZXJyb3IsIHdpdGggZXJyb3IgY29kZSwgYSByZW1vdGUgZW5kIG11c3QgcnVuIHRo
ZQorIyA+IGZvbGxvd2luZyBzdGVwczoKKyMgPgorIyA+IDEuIExldCBodHRwIHN0YXR1cyBhbmQg
bmFtZSBiZSB0aGUgZXJyb3IgcmVzcG9uc2UgZGF0YSBmb3IgZXJyb3IgY29kZS4KKyMgPiAyLiBM
ZXQgbWVzc2FnZSBiZSBhbiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIHN0cmluZyBjb250YWluaW5n
IGEKKyMgPiAgICBodW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiB0aGUgcmVhc29uIGZvciB0
aGUgZXJyb3IuCisjID4gMy4gTGV0IHN0YWNrdHJhY2UgYmUgYW4gaW1wbGVtZW50YXRpb24tZGVm
aW5lZCBzdHJpbmcgY29udGFpbmluZyBhIHN0YWNrCisjID4gICAgdHJhY2UgcmVwb3J0IG9mIHRo
ZSBhY3RpdmUgc3RhY2sgZnJhbWVzIGF0IHRoZSB0aW1lIHdoZW4gdGhlIGVycm9yCisjID4gICAg
b2NjdXJyZWQuCisjID4gNC4gTGV0IGRhdGEgYmUgYSBuZXcgSlNPTiBPYmplY3QgaW5pdGlhbGlz
ZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6CisjID4KKyMgPiAgICAgZXJyb3IKKyMg
PiAgICAgICAgIG5hbWUKKyMgPiAgICAgbWVzc2FnZQorIyA+ICAgICAgICAgbWVzc2FnZQorIyA+
ICAgICBzdGFja3RyYWNlCisjID4gICAgICAgICBzdGFja3RyYWNlCisjID4KKyMgPiA1LiBTZW5k
IGEgcmVzcG9uc2Ugd2l0aCBzdGF0dXMgYW5kIGRhdGEgYXMgYXJndW1lbnRzLgorZGVmIGFzc2Vy
dF9lcnJvcihyZXNwb25zZSwgZXJyb3JfY29kZSk6CisgICAgIiIiVmVyaWZ5IHRoYXQgdGhlIHBy
b3ZpZGVkIHdkY2xpZW50LlJlc3BvbnNlIGluc3RhbmNlIGRlc2NyaWJlZCBhIHZhbGlkCisgICAg
ZXJyb3IgcmVzcG9uc2UgYXMgZGVmaW5lZCBieSBgZGZuLXNlbmQtYW4tZXJyb3JgIGFuZCB0aGUg
cHJvdmlkZWQgZXJyb3IKKyAgICBjb2RlLgorCisgICAgOnBhcmFtIHJlc3BvbnNlOiB3ZGNsaWVu
dC5SZXNwb25zZSBpbnN0YW5jZQorICAgIDpwYXJhbSBlcnJvcl9jb2RlOiBzdHJpbmcgdmFsdWUg
b2YgdGhlIGV4cGVjdGVkICJlcnJvciBjb2RlIgorICAgICIiIgorICAgIGFzc2VydCByZXNwb25z
ZS5zdGF0dXMgPT0gZXJyb3JzW2Vycm9yX2NvZGVdCisgICAgYXNzZXJ0ICJ2YWx1ZSIgaW4gcmVz
cG9uc2UuYm9keQorICAgIGFzc2VydCByZXNwb25zZS5ib2R5WyJ2YWx1ZSJdWyJlcnJvciJdID09
IGVycm9yX2NvZGUKKyAgICBhc3NlcnQgaXNpbnN0YW5jZShyZXNwb25zZS5ib2R5WyJ2YWx1ZSJd
WyJtZXNzYWdlIl0sIGJhc2VzdHJpbmcpCisgICAgYXNzZXJ0IGlzaW5zdGFuY2UocmVzcG9uc2Uu
Ym9keVsidmFsdWUiXVsic3RhY2t0cmFjZSJdLCBiYXNlc3RyaW5nKQorCitkZWYgYXNzZXJ0X3N1
Y2Nlc3MocmVzcG9uc2UsIHZhbHVlPU5vbmUpOgorICAgICIiIlZlcmlmeSB0aGF0IHRoZSBwcm92
aWRlZCB3ZGNsaWVudC5SZXNwb25zZSBpbnN0YW5jZSBkZXNjcmliZWQgYSB2YWxpZAorICAgIGVy
cm9yIHJlc3BvbnNlIGFzIGRlZmluZWQgYnkgYGRmbi1zZW5kLWFuLWVycm9yYCBhbmQgdGhlIHBy
b3ZpZGVkIGVycm9yCisgICAgY29kZS4KKworICAgIDpwYXJhbSByZXNwb25zZTogd2RjbGllbnQu
UmVzcG9uc2UgaW5zdGFuY2UuCisgICAgOnBhcmFtIHZhbHVlOiBFeHBlY3RlZCB2YWx1ZSBvZiB0
aGUgcmVzcG9uc2UgYm9keSwgaWYgYW55LgorCisgICAgIiIiCisgICAgYXNzZXJ0IHJlc3BvbnNl
LnN0YXR1cyA9PSAyMDAKKyAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAgICAgYXNzZXJ0
IHJlc3BvbnNlLmJvZHlbInZhbHVlIl0gPT0gdmFsdWUKKyAgICByZXR1cm4gcmVzcG9uc2UuYm9k
eS5nZXQoInZhbHVlIikKKworZGVmIGFzc2VydF9kaWFsb2dfaGFuZGxlZChzZXNzaW9uLCBleHBl
Y3RlZF90ZXh0KToKKyAgICByZXN1bHQgPSBzZXNzaW9uLnRyYW5zcG9ydC5zZW5kKCJHRVQiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlc3Npb24vJXMvYWxlcnQvdGV4
dCIgJSBzZXNzaW9uLnNlc3Npb25faWQpCisKKyAgICAjIElmIHRoZXJlIHdlcmUgYW55IGV4aXN0
aW5nIGRpYWxvZ3MgcHJpb3IgdG8gdGhlIGNyZWF0aW9uIG9mIHRoaXMKKyAgICAjIGZpeHR1cmUn
cyBkaWFsb2csIHRoZW4gdGhlICJHZXQgQWxlcnQgVGV4dCIgY29tbWFuZCB3aWxsIHJldHVybgor
ICAgICMgc3VjY2Vzc2Z1bGx5LiBJbiB0aGF0IGNhc2UsIHRoZSB0ZXh0IG11c3QgYmUgZGlmZmVy
ZW50IHRoYW4gdGhhdAorICAgICMgb2YgdGhpcyBmaXh0dXJlJ3MgZGlhbG9nLgorICAgIHRyeToK
KyAgICAgICAgYXNzZXJ0X2Vycm9yKHJlc3VsdCwgIm5vIHN1Y2ggYWxlcnQiKQorICAgIGV4Y2Vw
dDoKKyAgICAgICAgYXNzZXJ0IChyZXN1bHQuc3RhdHVzID09IDIwMCBhbmQKKyAgICAgICAgICAg
ICAgICByZXN1bHQuYm9keVsidmFsdWUiXSAhPSBleHBlY3RlZF90ZXh0KSwgKAorICAgICAgICAg
ICAgICAgIkRpYWxvZyB3aXRoIHRleHQgJyVzJyB3YXMgbm90IGhhbmRsZWQuIiAlIGV4cGVjdGVk
X3RleHQpCisKK2RlZiBhc3NlcnRfc2FtZV9lbGVtZW50KHNlc3Npb24sIGEsIGIpOgorICAgICIi
IlZlcmlmeSB0aGF0IHR3byBlbGVtZW50IHJlZmVyZW5jZXMgZGVzY3JpYmUgdGhlIHNhbWUgZWxl
bWVudC4iIiIKKyAgICBhc3NlcnQgaXNpbnN0YW5jZShhLCBkaWN0KSwgIkFjdHVhbCB2YWx1ZSBp
cyBub3QgYSBkaWN0aW9uYXJ5IgorICAgIGFzc2VydCBpc2luc3RhbmNlKGIsIGRpY3QpLCAiRXhw
ZWN0ZWQgdmFsdWUgaXMgbm90IGEgZGljdGlvbmFyeSIKKyAgICBhc3NlcnQgZWxlbWVudF9rZXkg
aW4gYSwgIkFjdHVhbCB2YWx1ZSBkb2VzIG5vdCBkZXNjcmliZSBhbiBlbGVtZW50IgorICAgIGFz
c2VydCBlbGVtZW50X2tleSBpbiBiLCAiRXhwZWN0ZWQgdmFsdWUgZG9lcyBub3QgZGVzY3JpYmUg
YW4gZWxlbWVudCIKKworICAgIGlmIGFbZWxlbWVudF9rZXldID09IGJbZWxlbWVudF9rZXldOgor
ICAgICAgICByZXR1cm4KKworICAgIG1lc3NhZ2UgPSAoIkV4cGVjdGVkIGVsZW1lbnQgcmVmZXJl
bmNlcyB0byBkZXNjcmliZSB0aGUgc2FtZSBlbGVtZW50LCAiICsKKyAgICAgICAgImJ1dCB0aGV5
IGRpZCBub3QuIikKKworICAgICMgQXR0ZW1wdCB0byBwcm92aWRlIG1vcmUgaW5mb3JtYXRpb24s
IGFjY291bnRpbmcgZm9yIHBvc3NpYmxlIGVycm9ycyBzdWNoCisgICAgIyBhcyBzdGFsZSBlbGVt
ZW50IHJlZmVyZW5jZXMgb3Igbm90IHZpc2libGUgZWxlbWVudHMuCisgICAgdHJ5OgorICAgICAg
ICBhX21hcmt1cCA9IHNlc3Npb24uZXhlY3V0ZV9zY3JpcHQoInJldHVybiBhcmd1bWVudHNbMF0u
b3V0ZXJIVE1MOyIsIGFyZ3M9W2FdKQorICAgICAgICBiX21hcmt1cCA9IHNlc3Npb24uZXhlY3V0
ZV9zY3JpcHQoInJldHVybiBhcmd1bWVudHNbMF0ub3V0ZXJIVE1MOyIsIGFyZ3M9W2JdKQorICAg
ICAgICBtZXNzYWdlICs9ICIgQWN0dWFsOiBgJXNgLiBFeHBlY3RlZDogYCVzYC4iICUgKGFfbWFy
a3VwLCBiX21hcmt1cCkKKyAgICBleGNlcHQgV2ViRHJpdmVyRXhjZXB0aW9uOgorICAgICAgICBw
YXNzCisKKyAgICByYWlzZSBBc3NlcnRpb25FcnJvcihtZXNzYWdlKQpkaWZmIC0tZ2l0IGEvV2Vi
RHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9zdXBwb3J0L2ZpeHR1cmVz
LnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9zdXBwb3J0
L2ZpeHR1cmVzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mNTFj
NDk4Mjc0ZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93
ZWJkcml2ZXIvdGVzdHMvc3VwcG9ydC9maXh0dXJlcy5weQpAQCAtMCwwICsxLDI1MCBAQAoraW1w
b3J0IGpzb24KK2ltcG9ydCBvcworaW1wb3J0IHVybHBhcnNlCitpbXBvcnQgcmUKKworaW1wb3J0
IHdlYmRyaXZlcgoraW1wb3J0IG1vemxvZworCitmcm9tIHRlc3RzLnN1cHBvcnQuYXNzZXJ0cyBp
bXBvcnQgYXNzZXJ0X2Vycm9yCitmcm9tIHRlc3RzLnN1cHBvcnQuaHR0cF9yZXF1ZXN0IGltcG9y
dCBIVFRQUmVxdWVzdAorZnJvbSB0ZXN0cy5zdXBwb3J0IGltcG9ydCBtZXJnZV9kaWN0aW9uYXJp
ZXMKKworZGVmYXVsdF9ob3N0ID0gImh0dHA6Ly8xMjcuMC4wLjEiCitkZWZhdWx0X3BvcnQgPSAi
NDQ0NCIKKworbG9nZ2VyID0gbW96bG9nLmdldF9kZWZhdWx0X2xvZ2dlcigpCisKKworZGVmIGln
bm9yZV9leGNlcHRpb25zKGYpOgorICAgIGRlZiBpbm5lcigqYXJncywgKiprd2FyZ3MpOgorICAg
ICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gZigqYXJncywgKiprd2FyZ3MpCisgICAgICAg
IGV4Y2VwdCB3ZWJkcml2ZXIuZXJyb3IuV2ViRHJpdmVyRXhjZXB0aW9uIGFzIGU6CisgICAgICAg
ICAgICBsb2dnZXIud2FybmluZygiSWdub3JlZCBleGNlcHRpb24gJXMiICUgZSkKKyAgICBpbm5l
ci5fX25hbWVfXyA9IGYuX19uYW1lX18KKyAgICByZXR1cm4gaW5uZXIKKworCitAaWdub3JlX2V4
Y2VwdGlvbnMKK2RlZiBfZW5zdXJlX3ZhbGlkX3dpbmRvdyhzZXNzaW9uKToKKyAgICAiIiJJZiBj
dXJyZW50IHdpbmRvdyBpcyBub3Qgb3BlbiBhbnltb3JlLCBlbnN1cmUgdG8gaGF2ZSBhIHZhbGlk
CisgICAgb25lIHNlbGVjdGVkLgorCisgICAgIiIiCisgICAgdHJ5OgorICAgICAgICBzZXNzaW9u
LndpbmRvd19oYW5kbGUKKyAgICBleGNlcHQgd2ViZHJpdmVyLk5vU3VjaFdpbmRvd0V4Y2VwdGlv
bjoKKyAgICAgICAgc2Vzc2lvbi53aW5kb3dfaGFuZGxlID0gc2Vzc2lvbi5oYW5kbGVzWzBdCisK
KworQGlnbm9yZV9leGNlcHRpb25zCitkZWYgX2Rpc21pc3NfdXNlcl9wcm9tcHRzKHNlc3Npb24p
OgorICAgICIiIkRpc21pc3NlcyBhbnkgb3BlbiB1c2VyIHByb21wdHMgaW4gd2luZG93cy4iIiIK
KyAgICBjdXJyZW50X3dpbmRvdyA9IHNlc3Npb24ud2luZG93X2hhbmRsZQorCisgICAgZm9yIHdp
bmRvdyBpbiBfd2luZG93cyhzZXNzaW9uKToKKyAgICAgICAgc2Vzc2lvbi53aW5kb3dfaGFuZGxl
ID0gd2luZG93CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlc3Npb24uYWxlcnQuZGlzbWlz
cygpCisgICAgICAgIGV4Y2VwdCB3ZWJkcml2ZXIuTm9TdWNoQWxlcnRFeGNlcHRpb246CisgICAg
ICAgICAgICBwYXNzCisKKyAgICBzZXNzaW9uLndpbmRvd19oYW5kbGUgPSBjdXJyZW50X3dpbmRv
dworCisKK0BpZ25vcmVfZXhjZXB0aW9ucworZGVmIF9yZXN0b3JlX3dpbmRvd19zdGF0ZShzZXNz
aW9uKToKKyAgICAiIiJSZXNldCB3aW5kb3cgdG8gYW4gYWNjZXB0YWJsZSBzaXplLCBicmluZ2lu
ZyBpdCBvdXQgb2YgbWF4aW1pemVkLAorICAgIG1pbmltaXplZCwgb3IgZnVsbHNjcmVlbmVkIHN0
YXRlCisKKyAgICAiIiIKKyAgICBzZXNzaW9uLndpbmRvdy5zaXplID0gKDgwMCwgNjAwKQorCisK
K0BpZ25vcmVfZXhjZXB0aW9ucworZGVmIF9yZXN0b3JlX3dpbmRvd3Moc2Vzc2lvbik6CisgICAg
IiIiQ2xvc2VzIHN1cGVyZmx1b3VzIHdpbmRvd3Mgb3BlbmVkIGJ5IHRoZSB0ZXN0IHdpdGhvdXQg
ZW5kaW5nCisgICAgdGhlIHNlc3Npb24gaW1wbGljaXRseSBieSBjbG9zaW5nIHRoZSBsYXN0IHdp
bmRvdy4KKyAgICAiIiIKKyAgICBjdXJyZW50X3dpbmRvdyA9IHNlc3Npb24ud2luZG93X2hhbmRs
ZQorCisgICAgZm9yIHdpbmRvdyBpbiBfd2luZG93cyhzZXNzaW9uLCBleGNsdWRlPVtjdXJyZW50
X3dpbmRvd10pOgorICAgICAgICBzZXNzaW9uLndpbmRvd19oYW5kbGUgPSB3aW5kb3cKKyAgICAg
ICAgaWYgbGVuKHNlc3Npb24uaGFuZGxlcykgPiAxOgorICAgICAgICAgICAgc2Vzc2lvbi5jbG9z
ZSgpCisKKyAgICBzZXNzaW9uLndpbmRvd19oYW5kbGUgPSBjdXJyZW50X3dpbmRvdworCisKK2Rl
ZiBfc3dpdGNoX3RvX3RvcF9sZXZlbF9icm93c2luZ19jb250ZXh0KHNlc3Npb24pOgorICAgICIi
IklmIHRoZSBjdXJyZW50IGJyb3dzaW5nIGNvbnRleHQgc2VsZWN0ZWQgYnkgV2ViRHJpdmVyIGlz
IGEKKyAgICBgPGZyYW1lPmAgb3IgYW4gYDxpZnJhbWU+YCwgc3dpdGNoIGl0IGJhY2sgdG8gdGhl
IHRvcC1sZXZlbAorICAgIGJyb3dzaW5nIGNvbnRleHQuCisgICAgIiIiCisgICAgc2Vzc2lvbi5z
d2l0Y2hfZnJhbWUoTm9uZSkKKworCitkZWYgX3dpbmRvd3Moc2Vzc2lvbiwgZXhjbHVkZT1Ob25l
KToKKyAgICAiIiJTZXQgb2Ygd2luZG93IGhhbmRsZXMsIGZpbHRlcmVkIGJ5IGFuIGBleGNsdWRl
YCBsaXN0IGlmCisgICAgcHJvdmlkZWQuCisgICAgIiIiCisgICAgaWYgZXhjbHVkZSBpcyBOb25l
OgorICAgICAgICBleGNsdWRlID0gW10KKyAgICB3aW5zID0gW3cgZm9yIHcgaW4gc2Vzc2lvbi5o
YW5kbGVzIGlmIHcgbm90IGluIGV4Y2x1ZGVdCisgICAgcmV0dXJuIHNldCh3aW5zKQorCisKK2Rl
ZiBjcmVhdGVfZnJhbWUoc2Vzc2lvbik6CisgICAgIiIiQ3JlYXRlIGFuIGBpZnJhbWVgIGVsZW1l
bnQgaW4gdGhlIGN1cnJlbnQgYnJvd3NpbmcgY29udGV4dCBhbmQgaW5zZXJ0IGl0CisgICAgaW50
byB0aGUgZG9jdW1lbnQuIFJldHVybiBhIHJlZmVyZW5jZSB0byB0aGUgbmV3bHktY3JlYXRlZCBl
bGVtZW50LiIiIgorICAgIGRlZiBjcmVhdGVfZnJhbWUoKToKKyAgICAgICAgYXBwZW5kID0gIiIi
CisgICAgICAgICAgICB2YXIgZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUn
KTsKKyAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZnJhbWUpOworICAgICAg
ICAgICAgcmV0dXJuIGZyYW1lOworICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlc3Npb24u
ZXhlY3V0ZV9zY3JpcHQoYXBwZW5kKQorCisgICAgcmV0dXJuIGNyZWF0ZV9mcmFtZQorCisKK2Rl
ZiBjcmVhdGVfd2luZG93KHNlc3Npb24pOgorICAgICIiIk9wZW4gbmV3IHdpbmRvdyBhbmQgcmV0
dXJuIHRoZSB3aW5kb3cgaGFuZGxlLiIiIgorICAgIGRlZiBjcmVhdGVfd2luZG93KCk6CisgICAg
ICAgIHdpbmRvd3NfYmVmb3JlID0gc2Vzc2lvbi5oYW5kbGVzCisgICAgICAgIG5hbWUgPSBzZXNz
aW9uLmV4ZWN1dGVfc2NyaXB0KCJ3aW5kb3cub3BlbigpIikKKyAgICAgICAgYXNzZXJ0IGxlbihz
ZXNzaW9uLmhhbmRsZXMpID09IGxlbih3aW5kb3dzX2JlZm9yZSkgKyAxCisgICAgICAgIG5ld193
aW5kb3dzID0gbGlzdChzZXQoc2Vzc2lvbi5oYW5kbGVzKSAtIHNldCh3aW5kb3dzX2JlZm9yZSkp
CisgICAgICAgIHJldHVybiBuZXdfd2luZG93cy5wb3AoKQorICAgIHJldHVybiBjcmVhdGVfd2lu
ZG93CisKKworZGVmIGh0dHAoY29uZmlndXJhdGlvbik6CisgICAgcmV0dXJuIEhUVFBSZXF1ZXN0
KGNvbmZpZ3VyYXRpb25bImhvc3QiXSwgY29uZmlndXJhdGlvblsicG9ydCJdKQorCisKK2RlZiBz
ZXJ2ZXJfY29uZmlnKCk6CisgICAgcmV0dXJuIGpzb24ubG9hZHMob3MuZW52aXJvbi5nZXQoIldE
X1NFUlZFUl9DT05GSUciKSkKKworCitkZWYgY29uZmlndXJhdGlvbigpOgorICAgIGhvc3QgPSBv
cy5lbnZpcm9uLmdldCgiV0RfSE9TVCIsIGRlZmF1bHRfaG9zdCkKKyAgICBwb3J0ID0gaW50KG9z
LmVudmlyb24uZ2V0KCJXRF9QT1JUIiwgZGVmYXVsdF9wb3J0KSkKKyAgICBjYXBhYmlsaXRpZXMg
PSBqc29uLmxvYWRzKG9zLmVudmlyb24uZ2V0KCJXRF9DQVBBQklMSVRJRVMiLCAie30iKSkKKwor
ICAgIHJldHVybiB7CisgICAgICAgICJob3N0IjogaG9zdCwKKyAgICAgICAgInBvcnQiOiBwb3J0
LAorICAgICAgICAiY2FwYWJpbGl0aWVzIjogY2FwYWJpbGl0aWVzCisgICAgfQorCisKK19jdXJy
ZW50X3Nlc3Npb24gPSBOb25lCisKKworZGVmIHNlc3Npb24oY29uZmlndXJhdGlvbiwgcmVxdWVz
dCk6CisgICAgIiIiQ3JlYXRlIGFuZCBzdGFydCBhIHNlc3Npb24gZm9yIGEgdGVzdCB0aGF0IGRv
ZXMgbm90IGl0c2VsZiB0ZXN0IHNlc3Npb24gY3JlYXRpb24uCisKKyAgICBCeSBkZWZhdWx0IHRo
ZSBzZXNzaW9uIHdpbGwgc3RheSBvcGVuIGFmdGVyIGVhY2ggdGVzdCwgYnV0IHdlIGFsd2F5cyB0
cnkgdG8gc3RhcnQgYQorICAgIG5ldyBvbmUgYW5kIGFzc3VtZSB0aGF0IGlmIHRoYXQgZmFpbHMg
dGhlcmUgaXMgYWxyZWFkeSBhIHZhbGlkIHNlc3Npb24uIFRoaXMgbWFrZXMgaXQKKyAgICBwb3Nz
aWJsZSB0byByZWNvdmVyIGZyb20gc29tZSBlcnJvcnMgdGhhdCBtaWdodCBsZWF2ZSB0aGUgc2Vz
c2lvbiBpbiBhIGJhZCBzdGF0ZSwgYnV0CisgICAgZG9lcyBub3QgZGVtYW5kIHRoYXQgd2Ugc3Rh
cnQgYSBuZXcgc2Vzc2lvbiBwZXIgdGVzdC4iIiIKKyAgICBnbG9iYWwgX2N1cnJlbnRfc2Vzc2lv
bgorICAgIGlmIF9jdXJyZW50X3Nlc3Npb24gaXMgTm9uZToKKyAgICAgICAgX2N1cnJlbnRfc2Vz
c2lvbiA9IHdlYmRyaXZlci5TZXNzaW9uKGNvbmZpZ3VyYXRpb25bImhvc3QiXSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25bInBvcnQi
XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcGFiaWxp
dGllcz17ImFsd2F5c01hdGNoIjogY29uZmlndXJhdGlvblsiY2FwYWJpbGl0aWVzIl19KQorICAg
IHRyeToKKyAgICAgICAgX2N1cnJlbnRfc2Vzc2lvbi5zdGFydCgpCisgICAgZXhjZXB0IHdlYmRy
aXZlci5lcnJvci5TZXNzaW9uTm90Q3JlYXRlZEV4Y2VwdGlvbjoKKyAgICAgICAgaWYgbm90IF9j
dXJyZW50X3Nlc3Npb24uc2Vzc2lvbl9pZDoKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICAjIGZp
bmFsaXNlcnMgYXJlIHBvcHBlZCBvZmYgYSBzdGFjaywKKyAgICAjIG1ha2luZyB0aGVpciBvcmRl
cmluZyByZXZlcnNlCisgICAgcmVxdWVzdC5hZGRmaW5hbGl6ZXIobGFtYmRhOiBfc3dpdGNoX3Rv
X3RvcF9sZXZlbF9icm93c2luZ19jb250ZXh0KF9jdXJyZW50X3Nlc3Npb24pKQorICAgIHJlcXVl
c3QuYWRkZmluYWxpemVyKGxhbWJkYTogX3Jlc3RvcmVfd2luZG93X3N0YXRlKF9jdXJyZW50X3Nl
c3Npb24pKQorICAgIHJlcXVlc3QuYWRkZmluYWxpemVyKGxhbWJkYTogX3Jlc3RvcmVfd2luZG93
cyhfY3VycmVudF9zZXNzaW9uKSkKKyAgICByZXF1ZXN0LmFkZGZpbmFsaXplcihsYW1iZGE6IF9k
aXNtaXNzX3VzZXJfcHJvbXB0cyhfY3VycmVudF9zZXNzaW9uKSkKKyAgICByZXF1ZXN0LmFkZGZp
bmFsaXplcihsYW1iZGE6IF9lbnN1cmVfdmFsaWRfd2luZG93KF9jdXJyZW50X3Nlc3Npb24pKQor
CisgICAgcmV0dXJuIF9jdXJyZW50X3Nlc3Npb24KKworCitkZWYgbmV3X3Nlc3Npb24oY29uZmln
dXJhdGlvbiwgcmVxdWVzdCk6CisgICAgIiIiUmV0dXJuIGEgZmFjdG9yeSBmdW5jdGlvbiB0aGF0
IHdpbGwgYXR0ZW1wdCB0byBzdGFydCBhIHNlc3Npb24gd2l0aCBhIGdpdmVuIGJvZHkuCisKKyAg
ICBUaGlzIGlzIGludGVuZGVkIGZvciB0ZXN0cyB0aGF0IGFyZSB0aGVtc2VsdmVzIHRlc3Rpbmcg
bmV3IHNlc3Npb24gY3JlYXRpb24sIGFuZCB0aGUKKyAgICBzZXNzaW9uIGNyZWF0ZWQgaXMgY2xv
c2VkIGF0IHRoZSBlbmQgb2YgdGhlIHRlc3QuIiIiCisgICAgZGVmIGVuZCgpOgorICAgICAgICBn
bG9iYWwgX2N1cnJlbnRfc2Vzc2lvbgorICAgICAgICBpZiBfY3VycmVudF9zZXNzaW9uIGlzIG5v
dCBOb25lIGFuZCBfY3VycmVudF9zZXNzaW9uLnNlc3Npb25faWQ6CisgICAgICAgICAgICBfY3Vy
cmVudF9zZXNzaW9uLmVuZCgpCisgICAgICAgICAgICBfY3VycmVudF9zZXNzaW9uID0gTm9uZQor
CisgICAgZGVmIGNyZWF0ZV9zZXNzaW9uKGJvZHkpOgorICAgICAgICBnbG9iYWwgX2N1cnJlbnRf
c2Vzc2lvbgorICAgICAgICBfc2Vzc2lvbiA9IHdlYmRyaXZlci5TZXNzaW9uKGNvbmZpZ3VyYXRp
b25bImhvc3QiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1
cmF0aW9uWyJwb3J0Il0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fw
YWJpbGl0aWVzPU5vbmUpCisgICAgICAgICMgVE9ETzogbWVyZ2UgaW4gc29tZSBjYXBhYmlsaXRp
ZXMgZnJvbSB0aGUgY29uZmd1cmF0aW9uIGNhcGFiaWxpdGllcworICAgICAgICAjIHNpbmNlIHRo
ZXNlIG1pZ2h0IGJlIG5lZWRlZCB0byBzdGFydCB0aGUgYnJvd3NlcgorICAgICAgICB2YWx1ZSA9
IF9zZXNzaW9uLnNlbmRfY29tbWFuZCgiUE9TVCIsICJzZXNzaW9uIiwgYm9keT1ib2R5KQorICAg
ICAgICAjIERvbid0IHNldCB0aGUgZ2xvYmFsIHNlc3Npb24gdW50aWwgd2UgYXJlIHN1cmUgdGhp
cyBzdWNjZWVkZWQKKyAgICAgICAgX2N1cnJlbnRfc2Vzc2lvbiA9IF9zZXNzaW9uCisgICAgICAg
IF9zZXNzaW9uLnNlc3Npb25faWQgPSB2YWx1ZVsic2Vzc2lvbklkIl0KKworICAgICAgICByZXR1
cm4gdmFsdWUsIF9jdXJyZW50X3Nlc3Npb24KKworICAgIGVuZCgpCisgICAgcmVxdWVzdC5hZGRm
aW5hbGl6ZXIoZW5kKQorCisgICAgcmV0dXJuIGNyZWF0ZV9zZXNzaW9uCisKKworZGVmIHVybChz
ZXJ2ZXJfY29uZmlnKToKKyAgICBkZWYgaW5uZXIocGF0aCwgcHJvdG9jb2w9Imh0dHAiLCBxdWVy
eT0iIiwgZnJhZ21lbnQ9IiIpOgorICAgICAgICBwb3J0ID0gc2VydmVyX2NvbmZpZ1sicG9ydHMi
XVtwcm90b2NvbF1bMF0KKyAgICAgICAgaG9zdCA9ICIlczolcyIgJSAoc2VydmVyX2NvbmZpZ1si
aG9zdCJdLCBwb3J0KQorICAgICAgICByZXR1cm4gdXJscGFyc2UudXJsdW5zcGxpdCgocHJvdG9j
b2wsIGhvc3QsIHBhdGgsIHF1ZXJ5LCBmcmFnbWVudCkpCisKKyAgICBpbm5lci5fX25hbWVfXyA9
ICJ1cmwiCisgICAgcmV0dXJuIGlubmVyCisKK2RlZiBjcmVhdGVfZGlhbG9nKHNlc3Npb24pOgor
ICAgICIiIkNyZWF0ZSBhIGRpYWxvZyAob25lIG9mICJhbGVydCIsICJwcm9tcHQiLCBvciAiY29u
ZmlybSIpIGFuZCBwcm92aWRlIGEKKyAgICBmdW5jdGlvbiB0byB2YWxpZGF0ZSB0aGF0IHRoZSBk
aWFsb2cgaGFzIGJlZW4gImhhbmRsZWQiIChlaXRoZXIgYWNjZXB0ZWQgb3IKKyAgICBkaXNtaXNz
ZWQpIGJ5IHJldHVybmluZyBzb21lIHZhbHVlLiIiIgorCisgICAgZGVmIGNyZWF0ZV9kaWFsb2co
ZGlhbG9nX3R5cGUsIHRleHQ9Tm9uZSwgcmVzdWx0X3Zhcj1Ob25lKToKKyAgICAgICAgYXNzZXJ0
IGRpYWxvZ190eXBlIGluICgiYWxlcnQiLCAiY29uZmlybSIsICJwcm9tcHQiKSwgKAorICAgICAg
ICAgICAgICAgIkludmFsaWQgZGlhbG9nIHR5cGU6ICclcyciICUgZGlhbG9nX3R5cGUpCisKKyAg
ICAgICAgaWYgdGV4dCBpcyBOb25lOgorICAgICAgICAgICAgdGV4dCA9ICIiCisKKyAgICAgICAg
YXNzZXJ0IGlzaW5zdGFuY2UodGV4dCwgYmFzZXN0cmluZyksICJgdGV4dGAgcGFyYW1ldGVyIG11
c3QgYmUgYSBzdHJpbmciCisKKyAgICAgICAgaWYgcmVzdWx0X3ZhciBpcyBOb25lOgorICAgICAg
ICAgICAgcmVzdWx0X3ZhciA9ICJfX1dFQkRSSVZFUiIKKworICAgICAgICBhc3NlcnQgcmUuc2Vh
cmNoKHIiXltfJGEteiRdW18kYS16MC05XSokIiwgcmVzdWx0X3ZhciwgcmUuSUdOT1JFQ0FTRSks
ICgKKyAgICAgICAgICAgICdUaGUgYHJlc3VsdF92YXJgIG11c3QgYmUgYSB2YWxpZCBKYXZhU2Ny
aXB0IGlkZW50aWZpZXInKQorCisgICAgICAgICMgU2NyaXB0IGNvbXBsZXRpb24gYW5kIG1vZGFs
IHN1bW1vbmluZyBhcmUgc2NoZWR1bGVkIG9uIHR3byBzZXBhcmF0ZQorICAgICAgICAjIHR1cm5z
IG9mIHRoZSBldmVudCBsb29wIHRvIGVuc3VyZSB0aGF0IGJvdGggb2NjdXIgcmVnYXJkbGVzcyBv
ZiBob3cKKyAgICAgICAgIyB0aGUgdXNlciBhZ2VudCBtYW5hZ2VzIHNjcmlwdCBleGVjdXRpb24u
CisgICAgICAgIHNwYXduID0gIiIiCisgICAgICAgICAgICB2YXIgZG9uZSA9IGFyZ3VtZW50c1sw
XTsKKyAgICAgICAgICAgIHNldFRpbWVvdXQoZG9uZSwgMCk7CisgICAgICAgICAgICBzZXRUaW1l
b3V0KGZ1bmN0aW9uKCkge3sKKyAgICAgICAgICAgICAgICB3aW5kb3cuezB9ID0gd2luZG93Lnsx
fSgiezJ9Iik7CisgICAgICAgICAgICB9fSwgMCk7CisgICAgICAgICIiIi5mb3JtYXQocmVzdWx0
X3ZhciwgZGlhbG9nX3R5cGUsIHRleHQpCisKKyAgICAgICAgc2Vzc2lvbi5zZW5kX3Nlc3Npb25f
Y29tbWFuZCgiUE9TVCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4
ZWN1dGUvYXN5bmMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsic2Ny
aXB0Ijogc3Bhd24sICJhcmdzIjogW119KQorCisgICAgcmV0dXJuIGNyZWF0ZV9kaWFsb2cKZGlm
ZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvc3Vw
cG9ydC9odHRwX3JlcXVlc3QucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mvd2ViZHJp
dmVyL3Rlc3RzL3N1cHBvcnQvaHR0cF9yZXF1ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi5hZTI4YTY0ODZiMQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkRyaXZl
clRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvc3VwcG9ydC9odHRwX3JlcXVlc3Qu
cHkKQEAgLTAsMCArMSwyMyBAQAoraW1wb3J0IGNvbnRleHRsaWIKK2ltcG9ydCBodHRwbGliCisK
KworY2xhc3MgSFRUUFJlcXVlc3Qob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaG9z
dCwgcG9ydCk6CisgICAgICAgIHNlbGYuaG9zdCA9IGhvc3QKKyAgICAgICAgc2VsZi5wb3J0ID0g
cG9ydAorCisgICAgZGVmIGhlYWQoc2VsZiwgcGF0aCk6CisgICAgICAgIHJldHVybiBzZWxmLl9y
ZXF1ZXN0KCJIRUFEIiwgcGF0aCkKKworICAgIGRlZiBnZXQoc2VsZiwgcGF0aCk6CisgICAgICAg
IHJldHVybiBzZWxmLl9yZXF1ZXN0KCJHRVQiLCBwYXRoKQorCisgICAgQGNvbnRleHRsaWIuY29u
dGV4dG1hbmFnZXIKKyAgICBkZWYgX3JlcXVlc3Qoc2VsZiwgbWV0aG9kLCBwYXRoKToKKyAgICAg
ICAgY29ubiA9IGh0dHBsaWIuSFRUUENvbm5lY3Rpb24oc2VsZi5ob3N0LCBzZWxmLnBvcnQpCisg
ICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvbm4ucmVxdWVzdChtZXRob2QsIHBhdGgpCisgICAg
ICAgICAgICB5aWVsZCBjb25uLmdldHJlc3BvbnNlKCkKKyAgICAgICAgZmluYWxseToKKyAgICAg
ICAgICAgIGNvbm4uY2xvc2UoKQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYmRyaXZlci90ZXN0cy9zdXBwb3J0L2lubGluZS5weSBiL1dlYkRyaXZlclRlc3RzL2lt
cG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvc3VwcG9ydC9pbmxpbmUucHkKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjk5NDE4ZDk3NGQzCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9zdXBwb3J0L2lu
bGluZS5weQpAQCAtMCwwICsxLDQwIEBACitpbXBvcnQgdXJsbGliCisKKworZGVmIGlubGluZShk
b2MsIGRvY3R5cGU9Imh0bWwiLCBtaW1lPSJ0ZXh0L2h0bWw7Y2hhcnNldD11dGYtOCIsIHByb3Rv
Y29sPSJodHRwIik6CisgICAgZnJvbSAuZml4dHVyZXMgaW1wb3J0IHNlcnZlcl9jb25maWcsIHVy
bAorICAgIGJ1aWxkX3VybCA9IHVybChzZXJ2ZXJfY29uZmlnKCkpCisKKyAgICBpZiBkb2N0eXBl
ID09ICJodG1sIjoKKyAgICAgICAgbWltZSA9ICJ0ZXh0L2h0bWw7Y2hhcnNldD11dGYtOCIKKyAg
ICBlbGlmIGRvY3R5cGUgPT0gInhodG1sIjoKKyAgICAgICAgbWltZSA9ICJhcHBsaWNhdGlvbi94
aHRtbCt4bWwiCisgICAgICAgIGRvYyA9IHIiIiI8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1cz
Qy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIgorICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94
aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIj4KKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3Lncz
Lm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KKyAgPGhlYWQ+CisgICAg
PHRpdGxlPlhIVE1MIG1pZ2h0IGJlIHRoZSBmdXR1cmU8L3RpdGxlPgorICA8L2hlYWQ+CisKKyAg
PGJvZHk+CisgICAge30KKyAgPC9ib2R5PgorPC9odG1sPiIiIi5mb3JtYXQoZG9jKQorCisgICAg
cXVlcnkgPSB7ImRvYyI6IGRvY30KKyAgICBpZiBtaW1lICE9ICJ0ZXh0L2h0bWw7Y2hhcnNldD11
dGY4IjoKKyAgICAgICAgcXVlcnlbImNvbnRlbnQtdHlwZSJdID0gbWltZQorCisgICAgcmV0dXJu
IGJ1aWxkX3VybCgiL3dlYmRyaXZlci90ZXN0cy9zdXBwb3J0L2lubGluZS5weSIsCisgICAgICAg
ICAgICAgICAgICAgICBxdWVyeT11cmxsaWIudXJsZW5jb2RlKHF1ZXJ5KSwKKyAgICAgICAgICAg
ICAgICAgICAgIHByb3RvY29sPXByb3RvY29sKQorCisKK2RlZiBtYWluKHJlcXVlc3QsIHJlc3Bv
bnNlKToKKyAgICBkb2MgPSByZXF1ZXN0LkdFVC5maXJzdCgiZG9jIiwgTm9uZSkKKyAgICBjb250
ZW50X3R5cGUgPSByZXF1ZXN0LkdFVC5maXJzdCgiY29udGVudC10eXBlIiwgInRleHQvaHRtbDtj
aGFyc2V0PXV0ZjgiKQorICAgIGlmIGRvYyBpcyBOb25lOgorICAgICAgICBydiA9IDQwNCwgWygi
Q29udGVudC1UeXBlIiwgInRleHQvcGxhaW4iKV0sICJNaXNzaW5nIGRvYyBwYXJhbWV0ZXIgaW4g
cXVlcnkiCisgICAgZWxzZToKKyAgICAgICAgcnYgPSBbKCJDb250ZW50LVR5cGUiLCBjb250ZW50
X3R5cGUpXSwgZG9jCisgICAgcmV0dXJuIHJ2CmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL3N1cHBvcnQvbWVyZ2VfZGljdGlvbmFyaWVzLnB5
IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3dlYmRyaXZlci90ZXN0cy9zdXBwb3J0L21l
cmdlX2RpY3Rpb25hcmllcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MC4uY2YwNmM5YjQzM2MKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL3N1cHBvcnQvbWVyZ2VfZGljdGlvbmFyaWVzLnB5CkBAIC0w
LDAgKzEsNDkgQEAKK2RlZiBpdGVyaXRlbXMoZCk6CisgICAgIiIiQ3JlYXRlIGEga2V5LXZhbHVl
IGl0ZXJhdG9yIGZvciB0aGUgZ2l2ZW4gZGljdCBpbiBib3RoIFB5dGhvbiAyLnggYW5kCisgICAg
UHl0aG9uIDMueCBlbnZpcm9ubWVudHMiIiIKKyAgICBpZiBoYXNhdHRyKGQsICJpdGVyaXRlbXMi
KToKKyAgICAgICAgcmV0dXJuIGQuaXRlcml0ZW1zKCkKKyAgICByZXR1cm4gZC5pdGVtcygpCisK
K2RlZiBtZXJnZV9kaWN0aW9uYXJpZXMoZmlyc3QsIHNlY29uZCk6CisgICAgIiIiR2l2ZW4gdHdv
IGRpY3Rpb25hcmllcywgY3JlYXRlIGEgdGhpcmQgdGhhdCBkZWZpbmVzIGFsbCBzcGVjaWZpZWQK
KyAgICBrZXkvdmFsdWUgcGFpcnMuIFRoaXMgbWVyZ2VfZGljdGlvbmFyaWVzIGlzIHBlcmZvcm1l
ZCAiZGVlcGx5IiBvbiBhbnkgbmVzdGVkCisgICAgZGljdGlvbmFyaWVzLiBJZiBhIHZhbHVlIGlz
IGRlZmluZWQgZm9yIHRoZSBzYW1lIGtleSBieSBib3RoIGRpY3Rpb25hcmllcywKKyAgICBhbiBl
eGNlcHRpb24gd2lsbCBiZSByYWlzZWQuIiIiCisgICAgcmVzdWx0ID0gZGljdChmaXJzdCkKKwor
ICAgIGZvciBrZXksIHZhbHVlIGluIGl0ZXJpdGVtcyhzZWNvbmQpOgorICAgICAgICBpZiBrZXkg
aW4gcmVzdWx0IGFuZCByZXN1bHRba2V5XSAhPSB2YWx1ZToKKyAgICAgICAgICAgIGlmIGlzaW5z
dGFuY2UocmVzdWx0W2tleV0sIGRpY3QpIGFuZCBpc2luc3RhbmNlKHZhbHVlLCBkaWN0KToKKyAg
ICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IG1lcmdlX2RpY3Rpb25hcmllcyhyZXN1bHRba2V5
XSwgdmFsdWUpCisgICAgICAgICAgICBlbGlmIHJlc3VsdFtrZXldICE9IHZhbHVlOgorICAgICAg
ICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigibWVyZ2VfZGljdGlvbmFyaWVzOiByZWZ1c2luZyB0
byBvdmVyd3JpdGUgIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImF0dHJp
YnV0ZTogYCVzYCIgJSBrZXkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXN1bHRba2V5
XSA9IHZhbHVlCisKKyAgICByZXR1cm4gcmVzdWx0CisKK2lmIF9fbmFtZV9fID09ICJfX21haW5f
XyI6CisgICAgYXNzZXJ0IG1lcmdlX2RpY3Rpb25hcmllcyh7fSwge30pID09IHt9CisgICAgYXNz
ZXJ0IG1lcmdlX2RpY3Rpb25hcmllcyh7fSwgeyJhIjogMjN9KSA9PSB7ImEiOiAyM30KKyAgICBh
c3NlcnQgbWVyZ2VfZGljdGlvbmFyaWVzKHsiYSI6IDIzfSwgeyJiIjogNDV9KSA9PSB7ImEiOiAy
MywgImIiOiA0NX0KKworICAgIGUgPSBOb25lCisgICAgdHJ5OgorICAgICAgICBtZXJnZV9kaWN0
aW9uYXJpZXMoeyJhIjogMjN9LCB7ImEiOiA0NX0pCisgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBf
ZToKKyAgICAgICAgZSA9IF9lCisgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZSwgVHlwZUVycm9yKQor
CisgICAgYXNzZXJ0IG1lcmdlX2RpY3Rpb25hcmllcyh7ImEiOiAyM30sIHsiYSI6IDIzfSkgPT0g
eyJhIjogMjN9CisKKyAgICBhc3NlcnQgbWVyZ2VfZGljdGlvbmFyaWVzKHsiYSI6IHsiYiI6IDIz
fX0sIHsiYSI6IHsiYyI6IDQ1fX0pID09IHsiYSI6IHsiYiI6IDIzLCAiYyI6IDQ1fX0KKyAgICBh
c3NlcnQgbWVyZ2VfZGljdGlvbmFyaWVzKHsiYSI6IHsiYiI6IDIzfX0sIHsiYSI6IHsiYiI6IDIz
fX0pID09IHsiYSI6IHsiYiI6IDIzfX0KKworICAgIGUgPSBOb25lCisgICAgdHJ5OgorICAgICAg
ICBtZXJnZV9kaWN0aW9uYXJpZXMoeyJhIjogeyJiIjogMjN9fSwgeyJhIjogeyJiIjogNDV9fSkK
KyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIF9lOgorICAgICAgICBlID0gX2UKKyAgICBhc3NlcnQg
aXNpbnN0YW5jZShlLCBUeXBlRXJyb3IpCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViZHJpdmVyL3Rlc3RzL3N1cHBvcnQvd2FpdC5weSBiL1dlYkRyaXZlclRlc3Rz
L2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvc3VwcG9ydC93YWl0LnB5Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mNjQ1YWJlNzM2NwotLS0gL2Rldi9udWxsCisr
KyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy93ZWJkcml2ZXIvdGVzdHMvc3VwcG9ydC93
YWl0LnB5CkBAIC0wLDAgKzEsMjggQEAKK2ltcG9ydCB0aW1lCisKK2NsYXNzIFRpbWVvdXRFeGNl
cHRpb24oRXhjZXB0aW9uKToKKyAgICBwYXNzCisKKworZGVmIHdhaXQoc2Vzc2lvbiwgY29uZGl0
aW9uLCBtZXNzYWdlLCBpbnRlcnZhbD0wLjEsIHRpbWVvdXQ9NSk6CisgICAgIiIiIFBvbGwgYSBj
b25kaXRpb24gdW50aWwgaXQncyB0cnVlIG9yIHRoZSB0aW1lb3V0IGVsbGFwc2VzLgorCisgICAg
OnBhcmFtIHNlc3Npb246IFdlYkRyaXZlciBzZXNzaW9uIHRvIHVzZSB3aXRoIGBjb25kaXRpb25g
CisgICAgOnBhcmFtIGNvbmRpdGlvbjogZnVuY3Rpb24gdGhhdCBhY2NlcHRzIGEgV2ViRHJpdmVy
IHNlc3Npb24gYW5kIHJldHVybnMgYSBib29sZWFuCisgICAgOnBhcmFtIG1lc3NhZ2U6IGZhaWx1
cmUgZGVzY3JpcHRpb24gdG8gZGlzcGxheSBpbiBjYXNlIHRoZSB0aW1lb3V0IGlzIHJlYWNoZWQK
KyAgICA6cGFyYW0gaW50ZXJ2YWw6IHNlY29uZHMgYmV0d2VlbiBlYWNoIGNhbGwgdG8gYGNvbmRp
dGlvbmAuIERlZmF1bHQ6IDAuMQorICAgIDpwYXJhbSB0aW1lb3V0OiBzZWNvbmRzIHVudGlsIHdl
IHN0b3AgcG9sbGluZy4gRGVmYXVsdDogNQorICAgICIiIgorCisgICAgc3RhcnQgPSB0aW1lLnRp
bWUoKQorICAgIGVuZCA9IHN0YXJ0ICsgdGltZW91dAorCisgICAgd2hpbGUgbm90ICh0aW1lLnRp
bWUoKSA+PSBlbmQpOgorICAgICAgICBuZXh0X3N0ZXAgPSB0aW1lLnRpbWUoKSArIGludGVydmFs
CisgICAgICAgIHN1Y2Nlc3MgPSBjb25kaXRpb24oc2Vzc2lvbikKKyAgICAgICAgbmV4dF9pbnRl
cnZhbCA9IG1heChuZXh0X3N0ZXAgLSB0aW1lLnRpbWUoKSwgMCkKKyAgICAgICAgaWYgbm90IHN1
Y2Nlc3M6CisgICAgICAgICAgICB0aW1lLnNsZWVwKG5leHRfaW50ZXJ2YWwpCisgICAgICAgICAg
ICBjb250aW51ZQorICAgICAgICByZXR1cm4gc3VjY2VzcworICAgIHJhaXNlIFRpbWVvdXRFeGNl
cHRpb24oIlRpbWVkIG91dCBhZnRlciAlZCBzZWNvbmRzOiAlcyIgJSAodGltZW91dCwgbWVzc2Fn
ZSkpCg==
</data>
<flag name="review"
          id="341530"
          type_id="1"
          status="+"
          setter="bburg"
    />
          </attachment>
      

    </bug>

</bugzilla>