<?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>114326</bug_id>
          
          <creation_ts>2013-04-09 17:53:07 -0700</creation_ts>
          <short_desc>[webkitpy] Remove chromium ports.</short_desc>
          <delta_ts>2013-04-10 11:32:07 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>114368</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Glenn Adams">glenn</reporter>
          <assigned_to name="Glenn Adams">glenn</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dpranke</cc>
    
    <cc>kadam</cc>
    
    <cc>ossy</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>872541</commentid>
    <comment_count>0</comment_count>
    <who name="Glenn Adams">glenn</who>
    <bug_when>2013-04-09 17:53:07 -0700</bug_when>
    <thetext>Remove chromium ports from webkitpy.layout_tests.port. As a side effect, also:

* remove chromium builders from webkitpy.layout_tests.port.builders
* remove chromium builders from rebaseline
* rewrite chromium dependent tests in rebaseline_unittest
* remove chromium platform from garden-o-matic
* select apple platform as default platform in garden-o-matic
* remove chromium port dependencies from a few other tests (run_webkit_tests_integrationtest, factory_unittest, style.checkers.test_expectations_unittest)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>872542</commentid>
    <comment_count>1</comment_count>
      <attachid>197193</attachid>
    <who name="Glenn Adams">glenn</who>
    <bug_when>2013-04-09 17:57:19 -0700</bug_when>
    <thetext>Created attachment 197193
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>872556</commentid>
    <comment_count>2</comment_count>
      <attachid>197193</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2013-04-09 18:29:42 -0700</bug_when>
    <thetext>Comment on attachment 197193
Patch

This looks approximately right. *Sniff*.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>872579</commentid>
    <comment_count>3</comment_count>
    <who name="Glenn Adams">glenn</who>
    <bug_when>2013-04-09 21:26:18 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 197193 [details])
&gt; This looks approximately right. *Sniff*.

I know ... i&apos;m not happy to see cr go either. I wish it had been otherwise, but hey, let&apos;s make this new thing work both ways!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>872591</commentid>
    <comment_count>4</comment_count>
      <attachid>197193</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-04-09 21:58:06 -0700</bug_when>
    <thetext>Comment on attachment 197193
Patch

Clearing flags on attachment: 197193

Committed r148075: &lt;http://trac.webkit.org/changeset/148075&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>872592</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-04-09 21:58:09 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>872684</commentid>
    <comment_count>6</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2013-04-10 02:58:10 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 197193 [details])
&gt; Clearing flags on attachment: 197193
&gt; 
&gt; Committed r148075: &lt;http://trac.webkit.org/changeset/148075&gt;

It broke 3 webkitpy unittest:

 Traceback (most recent call last):
    File &quot;/ramdisk/qt-linux-release/build/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py&quot;, line 968, in test_exception_handling
      self.assertEqual(res, run_webkit_tests.INTERRUPTED_EXIT_STATUS)
  AssertionError: 254 != 130
  
[701/1469] webkitpy.common.system.executive_unittest.ExecutiveTest.test_run_command_with_unicode (+19)                                                                                                      [762/1469] webkitpy.layout_tests.run_webkit_tests_integrationtest.RunTest.test_gc_between_tests passed                                                                                                      [774/1469] webkitpy.layout_tests.port.server_process_unittest.TestServerProcess.test_basic erred:
  Traceback (most recent call last):
    File &quot;/ramdisk/qt-linux-release/build/Tools/Scripts/webkitpy/layout_tests/port/server_process_unittest.py&quot;, line 102, in test_basic
      port = factory.get()
    File &quot;/ramdisk/qt-linux-release/build/Tools/Scripts/webkitpy/layout_tests/port/factory.py&quot;, line 118, in get
      raise NotImplementedError(&apos;unsupported platform: &quot;%s&quot;&apos; % port_name)
  NotImplementedError: unsupported platform: &quot;chromium-linux&quot;
  
[775/1469] webkitpy.layout_tests.run_webkit_tests_integrationtest.RunTest.test_build_check failed:
  Traceback (most recent call last):
    File &quot;/ramdisk/qt-linux-release/build/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py&quot;, line 828, in test_build_check
      self.assertEqual(run_webkit_tests.main([&apos;--platform&apos;, port_name, &apos;fast/harness/results.html&apos;], out, err), -1)
  AssertionError: 254 != -1
  
[818/1469] webkitpy.common.system.executive_unittest.ExecutiveTest.test_run_command_with_unicode (+14)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>872826</commentid>
    <comment_count>7</comment_count>
    <who name="Glenn Adams">glenn</who>
    <bug_when>2013-04-10 09:13:43 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #4)
&gt; &gt; (From update of attachment 197193 [details] [details])
&gt; &gt; Clearing flags on attachment: 197193
&gt; &gt; 
&gt; &gt; Committed r148075: &lt;http://trac.webkit.org/changeset/148075&gt;
&gt; 
&gt; It broke 3 webkitpy unittest:

Thanks, I thought I&apos;d fixed the test_build_check() with a follow up patch at http://trac.webkit.org/changeset/148077, and, in fact, I&apos;m not seeing any of these fails on my platform (Mac OSX 10.8.3).  So I&apos;ll investigate and post a follow-up patch later this morning. I might ask you to verify/review if that&apos;s ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>873050</commentid>
    <comment_count>8</comment_count>
    <who name="Glenn Adams">glenn</who>
    <bug_when>2013-04-10 11:32:07 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; (In reply to comment #4)
&gt; &gt; &gt; (From update of attachment 197193 [details] [details] [details])
&gt; &gt; &gt; Clearing flags on attachment: 197193
&gt; &gt; &gt; 
&gt; &gt; &gt; Committed r148075: &lt;http://trac.webkit.org/changeset/148075&gt;
&gt; &gt; 
&gt; &gt; It broke 3 webkitpy unittest:
&gt; 
&gt; Thanks, I thought I&apos;d fixed the test_build_check() with a follow up patch at http://trac.webkit.org/changeset/148077, and, in fact, I&apos;m not seeing any of these fails on my platform (Mac OSX 10.8.3).  So I&apos;ll investigate and post a follow-up patch later this morning. I might ask you to verify/review if that&apos;s ok.

Patch posted at https://bugs.webkit.org/show_bug.cgi?id=114368.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>197193</attachid>
            <date>2013-04-09 17:57:19 -0700</date>
            <delta_ts>2013-04-09 21:58:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-114326-20130409185659.patch</filename>
            <type>text/plain</type>
            <size>180800</size>
            <attacher name="Glenn Adams">glenn</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ4MDUzCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZjU5NGExMzMzMWM1OWM0ODYyNzRlYjM4NGQ0OWE1ZDcx
NDM1Yjg5YS4uNTNiYmFmMGVhY2YxMDg5OGI5YjQyZGFjMWQxYTA5N2FlMGFkMmQyMSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY4
IEBACisyMDEzLTA0LTA5ICBHbGVubiBBZGFtcyAgPGdsZW5uQHNreW5hdi5jb20+CisKKyAgICAg
ICAgW3dlYmtpdHB5XSBSZW1vdmUgY2hyb21pdW0gcG9ydHMuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTQzMjYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBcyBhIHNpZGUgZWZmZWN0LCBhbHNvOgorCisg
ICAgICAgIC0gcmVtb3ZlIGNocm9taXVtIGJ1aWxkZXJzIGZyb20gd2Via2l0cHkubGF5b3V0X3Rl
c3RzLnBvcnQuYnVpbGRlcnMKKyAgICAgICAgLSByZW1vdmUgY2hyb21pdW0gYnVpbGRlcnMgZnJv
bSByZWJhc2VsaW5lCisgICAgICAgIC0gcmV3cml0ZSBjaHJvbWl1bSBkZXBlbmRlbnQgdGVzdHMg
aW4gcmViYXNlbGluZV91bml0dGVzdAorICAgICAgICAtIHJlbW92ZSBjaHJvbWl1bSBwbGF0Zm9y
bSBmcm9tIGdhcmRlbi1vLW1hdGljCisgICAgICAgIC0gc2VsZWN0IGFwcGxlIHBsYXRmb3JtIGFz
IGRlZmF1bHQgcGxhdGZvcm0gaW4gZ2FyZGVuLW8tbWF0aWMKKyAgICAgICAgLSByZW1vdmUgY2hy
b21pdW0gcG9ydCBkZXBlbmRlbmNpZXMgZnJvbSBhIGZldyBvdGhlciB0ZXN0cyAocnVuX3dlYmtp
dF90ZXN0c19pbnRlZ3JhdGlvbnRlc3QsIGZhY3RvcnlfdW5pdHRlc3QsIHN0eWxlLmNoZWNrZXJz
LnRlc3RfZXhwZWN0YXRpb25zX3VuaXR0ZXN0KQorCisgICAgICAgICogQnVpbGRTbGF2ZVN1cHBv
cnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvVGVzdEZhaWx1cmVzL2dhcmRl
bi1vLW1hdGljLmh0bWw6CisgICAgICAgICogQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0
Lm9yZy1jb25maWcvcHVibGljX2h0bWwvVGVzdEZhaWx1cmVzL3NjcmlwdHMvY29uZmlnLmpzOgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L2Jhc2VsaW5lb3B0aW1p
emVyX3VuaXR0ZXN0LnB5OgorICAgICAgICAoQmFzZWxpbmVPcHRpbWl6ZXJUZXN0LnRlc3RfbW92
ZV9iYXNlbGluZXMpOgorICAgICAgICAoQmFzZWxpbmVPcHRpbWl6ZXJUZXN0LnRlc3RfZWZsKToK
KyAgICAgICAgKEJhc2VsaW5lT3B0aW1pemVyVGVzdC50ZXN0X25vX2FkZF9tYWNfZnV0dXJlKToK
KyAgICAgICAgKEJhc2VsaW5lT3B0aW1pemVyVGVzdC50ZXN0X3dpbl9kb2VzX25vdF9kcm9wX3Rv
X3dpbl83c3AwKToKKyAgICAgICAgKEJhc2VsaW5lT3B0aW1pemVyVGVzdC50ZXN0X2NvbW1vbl9k
aXJlY3RvcnlfaW5jbHVkZXNfcm9vdCk6CisgICAgICAgIChCYXNlbGluZU9wdGltaXplclRlc3Qu
dGVzdF9jb21wbGV4X3NoYWRvd2luZyk6CisgICAgICAgIChCYXNlbGluZU9wdGltaXplclRlc3Qu
dGVzdF92aXJ0dWFsX3BvcnRzX2ZpbHRlcmVkKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L2J1aWxkZXJzLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHk6IFJlbW92ZWQuCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9hbmRyb2lkLnB5OiBSZW1v
dmVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21p
dW1fYW5kcm9pZF91bml0dGVzdC5weTogUmVtb3ZlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2xpbnV4LnB5OiBSZW1vdmVkLgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fbGludXhfdW5p
dHRlc3QucHk6IFJlbW92ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9jaHJvbWl1bV9tYWMucHk6IFJlbW92ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9tYWNfdW5pdHRlc3QucHk6IFJlbW92ZWQu
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9w
b3J0X3Rlc3RjYXNlLnB5OiBSZW1vdmVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fdW5pdHRlc3QucHk6IFJlbW92ZWQuCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV93aW4ucHk6IFJlbW92
ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1
bV93aW5fdW5pdHRlc3QucHk6IFJlbW92ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9mYWN0b3J5LnB5OgorICAgICAgICAocGxhdGZvcm1fb3B0aW9ucyk6
CisgICAgICAgIChQb3J0RmFjdG9yeSk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9mYWN0b3J5X3VuaXR0ZXN0LnB5OgorICAgICAgICAoRmFjdG9yeVRlc3Qu
dGVzdF9xdCk6CisgICAgICAgIChGYWN0b3J5VGVzdC50ZXN0X2dldF9mcm9tX2J1aWxkZXJfbmFt
ZSk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90
ZXN0c19pbnRlZ3JhdGlvbnRlc3QucHk6CisgICAgICAgIChSdW5UZXN0LnRlc3RfYnVpbGRfY2hl
Y2spOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvdGVzdF9leHBl
Y3RhdGlvbnNfdW5pdHRlc3QucHk6CisgICAgICAgIChUZXN0RXhwZWN0YXRpb25zVGVzdENhc2Uu
dGVzdF9kZXRlcm1pbmVfcG9ydF9mcm9tX2V4cGVjdGF0aW9uc19wYXRoKToKKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcmViYXNlbGluZS5weToKKyAgICAgICAgKFJl
YmFzZWxpbmUuX2J1aWxkZXJzX3RvX3B1bGxfZnJvbSk6CisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS90b29sL2NvbW1hbmRzL3JlYmFzZWxpbmVfdW5pdHRlc3QucHk6CisgICAgICAgIChfQmFz
ZVRlc3RDYXNlKToKKyAgICAgICAgKF9CYXNlVGVzdENhc2Uuc2V0VXApOgorICAgICAgICAoVGVz
dFJlYmFzZWxpbmVUZXN0LnNldFVwKToKKyAgICAgICAgKFRlc3RSZWJhc2VsaW5lVGVzdC50ZXN0
X2Jhc2VsaW5lX2RpcmVjdG9yeSk6CisgICAgICAgICh0ZXN0X3JlYmFzZWxpbmVfdXBkYXRlc19l
eHBlY3RhdGlvbnNfZmlsZSk6CisgICAgICAgICh0ZXN0X3JlYmFzZWxpbmVfZG9lc19ub3RfaW5j
bHVkZV9vdmVycmlkZXMpOgorICAgICAgICAodGVzdF9yZWJhc2VsaW5lX3Rlc3QpOgorICAgICAg
ICAodGVzdF9yZWJhc2VsaW5lX3Rlc3RfYW5kX3ByaW50X3NjbV9jaGFuZ2VzKToKKyAgICAgICAg
KHRlc3RfcmViYXNlbGluZV9hbmRfY29weV90ZXN0KToKKyAgICAgICAgKHRlc3RfcmViYXNlbGlu
ZV9hbmRfY29weV90ZXN0X25vX2V4aXN0aW5nX3Jlc3VsdCk6CisgICAgICAgICh0ZXN0X3JlYmFz
ZWxpbmVfYW5kX2NvcHlfdGVzdF93aXRoX2xpb25fcmVzdWx0KToKKyAgICAgICAgKHRlc3RfcmVi
YXNlbGluZV9hbmRfY29weV9ub19vdmVyd3JpdGVfdGVzdCk6CisgICAgICAgIChUZXN0UmViYXNl
bGluZUV4cGVjdGF0aW9ucy50ZXN0X3JlYmFzZWxpbmVfZXhwZWN0YXRpb25zKToKKwogMjAxMy0w
NC0wOSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICB3ZWJraXRi
b3QgcmVmZXJzIHRvIHNoZXJpZmZib3QgaW4gaGVscApkaWZmIC0tZ2l0IGEvVG9vbHMvQnVpbGRT
bGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvVGVzdEZhaWx1
cmVzL2dhcmRlbi1vLW1hdGljLmh0bWwgYi9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53
ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9UZXN0RmFpbHVyZXMvZ2FyZGVuLW8tbWF0aWMu
aHRtbAppbmRleCAyNGIwNjA3M2M1ZmJmMDg1YzlmYjYyMzZkZTc5YWVhMzBjMWVhNzYzLi43YzEw
Zjc1YzYzNDZjZTE0Yzc4ZTE5NjEwOGM3YTI4MjE3MDI4NjU1IDEwMDY0NAotLS0gYS9Ub29scy9C
dWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9UZXN0
RmFpbHVyZXMvZ2FyZGVuLW8tbWF0aWMuaHRtbAorKysgYi9Ub29scy9CdWlsZFNsYXZlU3VwcG9y
dC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9UZXN0RmFpbHVyZXMvZ2FyZGVu
LW8tbWF0aWMuaHRtbApAQCAtMzIsMTAgKzMyLDEwIEBAIEphbWVzLCBhIHdlYiBkZXZlbG9wZXIg
ZnJvbSBCaXJtaW5naGFtLCBVSy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2NyaXB0LXNyYyAnc2VsZicgZmlsZTogaHR0cHM6Ly9hamF4Lmdvb2dsZWFwaXMuY29t
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS1zcmMgJ3Nl
bGYnICd1bnNhZmUtaW5saW5lJyBmaWxlOiBodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20gaHR0
cDovL2ZvbnRzLmdvb2dsZWFwaXMuY29tOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmb250LXNyYyBodHRwOi8vdGhlbWVzLmdvb2dsZXVzZXJjb250ZW50LmNvbTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nLXNyYyAnc2VsZicg
aHR0cHM6Ly9hamF4Lmdvb2dsZWFwaXMuY29tIGh0dHA6Ly9idWlsZC5jaHJvbWl1bS5vcmcgaHR0
cDovL2J1aWxkLndlYmtpdC5vcmc7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1lZGlhLXNyYyAnc2VsZicgaHR0cDovL2J1aWxkLmNocm9taXVtLm9yZyBodHRwOi8v
YnVpbGQud2Via2l0Lm9yZzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZnJhbWUtc3JjICdzZWxmJyBodHRwOi8vYnVpbGQuY2hyb21pdW0ub3JnIGh0dHA6Ly9idWls
ZC53ZWJraXQub3JnIGh0dHA6Ly90ZXN0LXJlc3VsdHMuYXBwc3BvdC5jb207Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Qtc3JjICdzZWxmJyBodHRwOi8v
dHJhYy53ZWJraXQub3JnIGh0dHA6Ly9idWlsZC5jaHJvbWl1bS5vcmcgaHR0cDovL2J1aWxkLndl
YmtpdC5vcmciPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWct
c3JjICdzZWxmJyBodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20gaHR0cDovL2J1aWxkLndlYmtp
dC5vcmc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhLXNy
YyAnc2VsZicgaHR0cDovL2J1aWxkLndlYmtpdC5vcmc7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZyYW1lLXNyYyAnc2VsZicgaHR0cDovL2J1aWxkLndlYmtpdC5v
cmcgaHR0cDovL3Rlc3QtcmVzdWx0cy5hcHBzcG90LmNvbTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29ubmVjdC1zcmMgJ3NlbGYnIGh0dHA6Ly90cmFjLndlYmtp
dC5vcmcgaHR0cDovL2J1aWxkLndlYmtpdC5vcmciPgogPHRpdGxlPkdhcmRlbi1PLU1hdGljPC90
aXRsZT4KIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cDovL2ZvbnRzLmdvb2dsZWFw
aXMuY29tL2Nzcz9mYW1pbHk9T3BlbitTYW5zOjQwMCw3MDAiPgogPGxpbmsgcmVsPSJzdHlsZXNo
ZWV0IiBocmVmPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeXVp
LzEuOC4xNS90aGVtZXMvYmFzZS9qcXVlcnktdWkuY3NzIj4KZGlmZiAtLWdpdCBhL1Rvb2xzL0J1
aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL1Rlc3RG
YWlsdXJlcy9zY3JpcHRzL2NvbmZpZy5qcyBiL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxk
LndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9zY3JpcHRzL2NvbmZp
Zy5qcwppbmRleCA4MDg3MDU2ZTVhYjZiNmI5Y2E0MmQ2NWE4MDYyZDg5OTk5NTJmNzRkLi4xNGNm
N2MzNzc0NjkwYzBhZmUxMGM4YjEwYWJhYzNlZjAwYjljY2Q4IDEwMDY0NAotLS0gYS9Ub29scy9C
dWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9UZXN0
RmFpbHVyZXMvc2NyaXB0cy9jb25maWcuanMKKysrIGIvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQv
YnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvVGVzdEZhaWx1cmVzL3NjcmlwdHMv
Y29uZmlnLmpzCkBAIC02MCw0OCArNjAsNiBAQCBjb25maWcua1BsYXRmb3JtcyA9IHsKICAgICAg
ICAgICAgIHJldHVybiBidWlsZGVyTmFtZS5pbmRleE9mKCdBcHBsZScpICE9IC0xOwogICAgICAg
ICB9LAogICAgIH0sCi0gICAgJ2Nocm9taXVtJyA6IHsKLSAgICAgICAgbGFiZWwgOiAnQ2hyb21p
dW0nLAotICAgICAgICBidWlsZENvbnNvbGVVUkw6ICdodHRwOi8vYnVpbGQuY2hyb21pdW0ub3Jn
L3AvY2hyb21pdW0ud2Via2l0JywKLSAgICAgICAgbGF5b3V0VGVzdFJlc3VsdHNVUkw6ICdodHRw
Oi8vYnVpbGQuY2hyb21pdW0ub3JnL2YvY2hyb21pdW0vbGF5b3V0X3Rlc3RfcmVzdWx0cycsCi0g
ICAgICAgIHdhdGVyZmFsbFVSTDogJ2h0dHA6Ly9idWlsZC5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1
bS53ZWJraXQvd2F0ZXJmYWxsJywKLSAgICAgICAgYnVpbGRlcnM6IHsKLSAgICAgICAgICAgICdX
ZWJLaXQgWFAnOiB7dmVyc2lvbjogJ3hwJ30sCi0gICAgICAgICAgICAnV2ViS2l0IFdpbjcnOiB7
dmVyc2lvbjogJ3dpbjcnfSwKLSAgICAgICAgICAgICdXZWJLaXQgV2luNyAoZGJnKSgxKSc6IHt2
ZXJzaW9uOiAnd2luNycsIGRlYnVnOiB0cnVlfSwKLSAgICAgICAgICAgICdXZWJLaXQgV2luNyAo
ZGJnKSgyKSc6IHt2ZXJzaW9uOiAnd2luNycsIGRlYnVnOiB0cnVlfSwKLSAgICAgICAgICAgICdX
ZWJLaXQgTGludXgnOiB7dmVyc2lvbjogJ2x1Y2lkJywgaXM2NGJpdDogdHJ1ZX0sCi0gICAgICAg
ICAgICAnV2ViS2l0IExpbnV4IDMyJzoge3ZlcnNpb246ICdsdWNpZCd9LAotICAgICAgICAgICAg
J1dlYktpdCBMaW51eCAoZGJnKSc6IHt2ZXJzaW9uOiAnbHVjaWQnLCBpczY0Yml0OiB0cnVlLCBk
ZWJ1ZzogdHJ1ZX0sCi0gICAgICAgICAgICAnV2ViS2l0IE1hYzEwLjYnOiB7dmVyc2lvbjogJ3Nu
b3dsZW9wYXJkJ30sCi0gICAgICAgICAgICAnV2ViS2l0IE1hYzEwLjYgKGRiZyknOiB7dmVyc2lv
bjogJ3Nub3dsZW9wYXJkJywgZGVidWc6IHRydWV9LAotICAgICAgICAgICAgJ1dlYktpdCBNYWMx
MC43Jzoge3ZlcnNpb246ICdsaW9uJ30sCi0gICAgICAgICAgICAnV2ViS2l0IE1hYzEwLjcgKGRi
ZyknOiB7dmVyc2lvbjogJ2xpb24nLCBkZWJ1ZzogdHJ1ZX0sCi0gICAgICAgICAgICAnV2ViS2l0
IE1hYzEwLjgnOiB7dmVyc2lvbjogJ21vdW50YWlubGlvbid9LAotICAgICAgICB9LAotICAgICAg
ICBoYXZlQnVpbGRlckFjY3VtdWxhdGVkUmVzdWx0cyA6IHRydWUsCi0gICAgICAgIHVzZURpcmVj
dG9yeUxpc3RpbmdGb3JPbGRCdWlsZHM6IHRydWUsCi0gICAgICAgIHVzZUZsYWtpbmVzc0Rhc2hi
b2FyZDogdHJ1ZSwKLSAgICAgICAgcmVzdWx0c0RpcmVjdG9yeU5hbWVGcm9tQnVpbGRlck5hbWU6
IGZ1bmN0aW9uKGJ1aWxkZXJOYW1lKSB7Ci0gICAgICAgICAgICByZXR1cm4gYmFzZS51bmRlcnNj
b3JlZEJ1aWxkZXJOYW1lKGJ1aWxkZXJOYW1lKTsKLSAgICAgICAgfSwKLSAgICAgICAgcmVzdWx0
c0RpcmVjdG9yeUZvckJ1aWxkTnVtYmVyOiBmdW5jdGlvbihidWlsZE51bWJlciwgcmV2aXNpb24p
IHsKLSAgICAgICAgICAgIHJldHVybiBidWlsZE51bWJlcjsKLSAgICAgICAgfSwKLSAgICAgICAg
X2J1aWxkZXJBcHBsaWVzOiBmdW5jdGlvbihidWlsZGVyTmFtZSkgewotICAgICAgICAgICAgLy8g
RklYTUU6IFNob3VsZCBnYXJkZW4tby1tYXRpYyBzaG93IHRoZXNlPyBJIGNhbiBpbWFnaW5lIHNo
b3dpbmcgdGhlIGRlcHMgYm90cyBiZWluZyB1c2VmdWwgYXQgbGVhc3Qgc28KLSAgICAgICAgICAg
IC8vIHRoYXQgdGhlIGdhcmRlbmVyIG9ubHkgbmVlZCB0byBsb29rIGF0IGdhcmRlbi1vLW1hdGlj
IGFuZCBuZXZlciBhdCB0aGUgd2F0ZXJmYWxsLiBOb3QgcmVhbGx5IHN1cmUgd2hvCi0gICAgICAg
ICAgICAvLyB3YXRjaGVzIHRoZSBHUFUgYm90cy4KLSAgICAgICAgICAgIC8vIFRoZSAxMC44IFRl
c3RzIGJvdCBpcyByZWFsbHkgYW4gRllJIGJvdCBhdCB0aGlzIHBvaW50Ci0gICAgICAgICAgICAv
LyBXZWJLaXQgQW5kcm9pZCBkb2Vzbid0IHVwbG9hZCBpdHMgcmVzdWx0cyB5ZXQuCi0gICAgICAg
ICAgICByZXR1cm4gYnVpbGRlck5hbWUuaW5kZXhPZignR1BVJykgPT0gLTEgJiYKLSAgICAgICAg
ICAgICAgICAgICBidWlsZGVyTmFtZS5pbmRleE9mKCdkZXBzJykgPT0gLTEgJiYKLSAgICAgICAg
ICAgICAgICAgICBidWlsZGVyTmFtZS5pbmRleE9mKCdBU0FOJykgPT0gLTEgJiYKLSAgICAgICAg
ICAgICAgICAgICBidWlsZGVyTmFtZS5pbmRleE9mKCdXZWJLaXQgKENvbnRlbnQgU2hlbGwpIEFu
ZHJvaWQnKSA9PSAtMSAmJgotICAgICAgICAgICAgICAgICAgIGJ1aWxkZXJOYW1lLmluZGV4T2Yo
J01hYzEwLjggVGVzdHMnKSA9PSAtMSAmJgotICAgICAgICAgICAgICAgICAgIGJ1aWxkZXJOYW1l
LmluZGV4T2YoJ1dlYktpdCBBbmRyb2lkJykgPT0gLTE7Ci0gICAgICAgIH0sCi0gICAgfSwKICAg
ICAnZ3RrJyA6IHsKICAgICAgICAgbGFiZWwgOiAnR1RLJywKICAgICAgICAgYnVpbGRDb25zb2xl
VVJMOiAnaHR0cDovL2J1aWxkLndlYmtpdC5vcmcnLApAQCAtMTg3LDcgKzE0NSw3IEBAIGNvbmZp
Zy5rUmVsYXRpdmVUaW1lVXBkYXRlRnJlcXVlbmN5ID0gMTAwMCAqIDYwOwogCiBjb25maWcua0V4
cGVyaW1lbnRhbEZlYXR1cmVzID0gd2luZG93LmxvY2F0aW9uLnNlYXJjaC5zZWFyY2goJ2VuYWJs
ZUV4cGVyaW1lbnRzPTEnKSAhPSAtMTsKIAotY29uZmlnLmN1cnJlbnRQbGF0Zm9ybSA9IGJhc2Uu
Z2V0VVJMUGFyYW1ldGVyKCdwbGF0Zm9ybScpIHx8ICdjaHJvbWl1bSc7Citjb25maWcuY3VycmVu
dFBsYXRmb3JtID0gYmFzZS5nZXRVUkxQYXJhbWV0ZXIoJ3BsYXRmb3JtJykgfHwgJ2FwcGxlJzsK
IAogLy8gRklYTUU6IFdlIHNob3VsZCBhZGQgYSB3YXkgdG8gcmVzdHJpY3QgdGhlIHJlc3VsdHMg
dG8gYSBzdWJzZXQgb2YgdGhlIGJ1aWxkZXJzCiAvLyAob3IgbWF5YmUganVzdCBhIHNpbmdsZSBi
dWlsZGVyKSBpbiB0aGUgVUkgYXMgd2VsbCBhcyB2aWEgYW4gVVJMIHBhcmFtZXRlci4KZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L2Jhc2VsaW5lb3B0
aW1pemVyX3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tv
dXQvYmFzZWxpbmVvcHRpbWl6ZXJfdW5pdHRlc3QucHkKaW5kZXggMzA4ZmMxNzg3YTg0NDliMGNj
ZTIzZmU0NDIxYjNlYjRlZTExNGQyMi4uZGNkNjQ5YTVhZmNhZTc3MGVhZmEwYjA3ZjQ2ZWU3ZWIx
NmU0ZjA2OCAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tv
dXQvYmFzZWxpbmVvcHRpbWl6ZXJfdW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vY2hlY2tvdXQvYmFzZWxpbmVvcHRpbWl6ZXJfdW5pdHRlc3QucHkKQEAgLTYx
LDI2ICs2MSwxOCBAQCBjbGFzcyBCYXNlbGluZU9wdGltaXplclRlc3QodW5pdHRlc3QuVGVzdENh
c2UpOgogCiAgICAgZGVmIHRlc3RfbW92ZV9iYXNlbGluZXMoc2VsZik6CiAgICAgICAgIGhvc3Qg
PSBNb2NrSG9zdCgpCi0gICAgICAgIGhvc3QuZmlsZXN5c3RlbS53cml0ZV9iaW5hcnlfZmlsZSgn
L21vY2stY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0td2luL2Fub3RoZXIv
dGVzdC1leHBlY3RlZC50eHQnLCAncmVzdWx0IEEnKQotICAgICAgICBob3N0LmZpbGVzeXN0ZW0u
d3JpdGVfYmluYXJ5X2ZpbGUoJy9tb2NrLWNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL2No
cm9taXVtLW1hYy9hbm90aGVyL3Rlc3QtZXhwZWN0ZWQudHh0JywgJ3Jlc3VsdCBBJykKLSAgICAg
ICAgaG9zdC5maWxlc3lzdGVtLndyaXRlX2JpbmFyeV9maWxlKCcvbW9jay1jaGVja291dC9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9hbm90aGVyL3Rlc3QtZXhwZWN0ZWQudHh0JywgJ3Jl
c3VsdCBCJykKKyAgICAgICAgaG9zdC5maWxlc3lzdGVtLndyaXRlX2JpbmFyeV9maWxlKCcvbW9j
ay1jaGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtbGlvbi9hbm90aGVyL3Rlc3QtZXhw
ZWN0ZWQudHh0JywgJ3Jlc3VsdCBBJykKKyAgICAgICAgaG9zdC5maWxlc3lzdGVtLndyaXRlX2Jp
bmFyeV9maWxlKCcvbW9jay1jaGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtbGlvbi13
azIvYW5vdGhlci90ZXN0LWV4cGVjdGVkLnR4dCcsICdyZXN1bHQgQScpCisgICAgICAgIGhvc3Qu
ZmlsZXN5c3RlbS53cml0ZV9iaW5hcnlfZmlsZSgnL21vY2stY2hlY2tvdXQvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vbWFjL2Fub3RoZXIvdGVzdC1leHBlY3RlZC50eHQnLCAncmVzdWx0IEInKQogICAg
ICAgICBiYXNlbGluZV9vcHRpbWl6ZXIgPSBCYXNlbGluZU9wdGltaXplcihob3N0LCBob3N0LnBv
cnRfZmFjdG9yeS5hbGxfcG9ydF9uYW1lcygpKQogICAgICAgICBiYXNlbGluZV9vcHRpbWl6ZXIu
X21vdmVfYmFzZWxpbmVzKCdhbm90aGVyL3Rlc3QtZXhwZWN0ZWQudHh0JywgewotICAgICAgICAg
ICAgJ0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLXdpbic6ICdhYWEnLAotICAgICAgICAg
ICAgJ0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLW1hYyc6ICdhYWEnLAotICAgICAgICAg
ICAgJ0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtJzogJ2JiYicsCisgICAgICAgICAgICAn
TGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLWxpb24nOiAnYWFhJywKKyAgICAgICAgICAgICdMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9tYWMtbGlvbi13azInOiAnYWFhJywKKyAgICAgICAgICAgICdMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9tYWMnOiAnYmJiJywKICAgICAgICAgfSwgewotICAgICAgICAgICAg
J0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtJzogJ2FhYScsCi0gICAgICAgIH0pCi0gICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9zdC5maWxlc3lzdGVtLnJlYWRfYmluYXJ5X2ZpbGUoJy9t
b2NrLWNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2Fub3RoZXIvdGVzdC1l
eHBlY3RlZC50eHQnKSwgJ3Jlc3VsdCBBJykKLQotICAgIGRlZiB0ZXN0X2Nocm9taXVtX2xpbnV4
X3JlZHVuZGFudF93aXRoX3dpbihzZWxmKToKLSAgICAgICAgc2VsZi5fYXNzZXJ0T3B0aW1pemF0
aW9uKHsKLSAgICAgICAgICAgICdMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS13aW4nOiAn
NDYyZDAzYjljMDI1ZGIxYjAzOTJkNzQ1MzMxMGRiZWU1ZjlhOWU3NCcsCi0gICAgICAgICAgICAn
TGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0tbGludXgnOiAnNDYyZDAzYjljMDI1ZGIxYjAz
OTJkNzQ1MzMxMGRiZWU1ZjlhOWU3NCcsCi0gICAgICAgIH0sIHsKLSAgICAgICAgICAgICdMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS13aW4nOiAnNDYyZDAzYjljMDI1ZGIxYjAzOTJkNzQ1
MzMxMGRiZWU1ZjlhOWU3NCcsCisgICAgICAgICAgICAnTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFj
JzogJ2FhYScsCiAgICAgICAgIH0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9zdC5maWxl
c3lzdGVtLnJlYWRfYmluYXJ5X2ZpbGUoJy9tb2NrLWNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRm
b3JtL21hYy9hbm90aGVyL3Rlc3QtZXhwZWN0ZWQudHh0JyksICdyZXN1bHQgQScpCiAKICAgICBk
ZWYgdGVzdF9lZmwoc2VsZik6CiAgICAgICAgIHNlbGYuX2Fzc2VydE9wdGltaXphdGlvbih7CkBA
IC04OSwyNyArODEsMTUgQEAgY2xhc3MgQmFzZWxpbmVPcHRpbWl6ZXJUZXN0KHVuaXR0ZXN0LlRl
c3RDYXNlKToKICAgICAgICAgICAgICdMYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwnOiAnNDYyZDAz
YjljMDI1ZGIxYjAzOTJkNzQ1MzMxMGRiZWU1ZjlhOWU3NCcsCiAgICAgICAgIH0pCiAKLQogICAg
IGRlZiB0ZXN0X25vX2FkZF9tYWNfZnV0dXJlKHNlbGYpOgogICAgICAgICBzZWxmLl9hc3NlcnRP
cHRpbWl6YXRpb24oewogICAgICAgICAgICAgJ0xheW91dFRlc3RzL3BsYXRmb3JtL21hYyc6ICcy
OWExNzE1YTY0NzBkNWRkOTQ4NmExNDJmNjA5NzA4ZGU4NGNkYWM4JywKICAgICAgICAgICAgICdM
YXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4teHAnOiAnNDUzZTY3MTc3YTc1YjJlNzk5MDUxNTRlY2Uw
ZWZiYTZlNWJmYjY1ZCcsCiAgICAgICAgICAgICAnTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLWxp
b24nOiAnYzQzZWFlYjM1OGY0OWQ1ZTgzNTIzNmFlMjNiN2U0OWQ3ZjJiMDg5ZicsCi0gICAgICAg
ICAgICAnTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0tbWFjJzogJ2E5YmExNTNjNzAwYTk0
YWUxYjIwNmQ4ZTRhNzVhNjIxYTg5YjQ1NTQnLAogICAgICAgICB9LCB7CiAgICAgICAgICAgICAn
TGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjJzogJzI5YTE3MTVhNjQ3MGQ1ZGQ5NDg2YTE0MmY2MDk3
MDhkZTg0Y2RhYzgnLAogICAgICAgICAgICAgJ0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi14cCc6
ICc0NTNlNjcxNzdhNzViMmU3OTkwNTE1NGVjZTBlZmJhNmU1YmZiNjVkJywKICAgICAgICAgICAg
ICdMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtbGlvbic6ICdjNDNlYWViMzU4ZjQ5ZDVlODM1MjM2
YWUyM2I3ZTQ5ZDdmMmIwODlmJywKLSAgICAgICAgICAgICdMYXlvdXRUZXN0cy9wbGF0Zm9ybS9j
aHJvbWl1bS1tYWMnOiAnYTliYTE1M2M3MDBhOTRhZTFiMjA2ZDhlNGE3NWE2MjFhODliNDU1NCcs
Ci0gICAgICAgIH0pCi0KLSAgICBkZWYgdGVzdF9jaHJvbWl1bV9jb3ZlcnNfbWFjX3dpbl9saW51
eChzZWxmKToKLSAgICAgICAgc2VsZi5fYXNzZXJ0T3B0aW1pemF0aW9uKHsKLSAgICAgICAgICAg
ICdMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS1tYWMnOiAnNDYyZDAzYjljMDI1ZGIxYjAz
OTJkNzQ1MzMxMGRiZWU1ZjlhOWU3NCcsCi0gICAgICAgICAgICAnTGF5b3V0VGVzdHMvcGxhdGZv
cm0vY2hyb21pdW0td2luJzogJzQ2MmQwM2I5YzAyNWRiMWIwMzkyZDc0NTMzMTBkYmVlNWY5YTll
NzQnLAotICAgICAgICAgICAgJ0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLWxpbnV4Jzog
JzQ2MmQwM2I5YzAyNWRiMWIwMzkyZDc0NTMzMTBkYmVlNWY5YTllNzQnLAotICAgICAgICB9LCB7
Ci0gICAgICAgICAgICAnTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0nOiAnNDYyZDAzYjlj
MDI1ZGIxYjAzOTJkNzQ1MzMxMGRiZWU1ZjlhOWU3NCcsCiAgICAgICAgIH0pCiAKICAgICBkZWYg
dGVzdF9tYWNfZnV0dXJlKHNlbGYpOgpAQCAtMTMyLDEzICsxMTIsMTEgQEAgY2xhc3MgQmFzZWxp
bmVPcHRpbWl6ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgICAgICdMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9tYWMnOiAnMicsCiAgICAgICAgICAgICAnTGF5b3V0VGVzdHMvcGxhdGZv
cm0vZ3RrJzogJzMnLAogICAgICAgICAgICAgJ0xheW91dFRlc3RzL3BsYXRmb3JtL3F0JzogJzQn
LAotICAgICAgICAgICAgJ0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtJzogJzUnLAogICAg
ICAgICB9LCB7CiAgICAgICAgICAgICAnTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luJzogJzEnLAog
ICAgICAgICAgICAgJ0xheW91dFRlc3RzL3BsYXRmb3JtL21hYyc6ICcyJywKICAgICAgICAgICAg
ICdMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsnOiAnMycsCiAgICAgICAgICAgICAnTGF5b3V0VGVz
dHMvcGxhdGZvcm0vcXQnOiAnNCcsCi0gICAgICAgICAgICAnTGF5b3V0VGVzdHMvcGxhdGZvcm0v
Y2hyb21pdW0nOiAnNScsCiAgICAgICAgIH0pCiAKICAgICBkZWYgdGVzdF9jb21tb25fZGlyZWN0
b3J5X2luY2x1ZGVzX3Jvb3Qoc2VsZik6CkBAIC0xNDcsMTcgKzEyNSwxMiBAQCBjbGFzcyBCYXNl
bGluZU9wdGltaXplclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBzZWxmLl9hc3Nl
cnRPcHRpbWl6YXRpb25GYWlsZWQoewogICAgICAgICAgICAgJ0xheW91dFRlc3RzL3BsYXRmb3Jt
L2d0ayc6ICdlODYwODc2M2Y2MjQxZGRhY2RkNWMxZWYxOTczYmEyNzE3N2QwODQ2JywKICAgICAg
ICAgICAgICdMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdCc6ICdiY2JkNDU3ZDU0NTk4NmI3YWJmMTIy
MTY1NWQ3MjIzNjMwNzlhYzg3JywKLSAgICAgICAgICAgICdMYXlvdXRUZXN0cy9wbGF0Zm9ybS9j
aHJvbWl1bS13aW4nOiAnMzc2NGFjMTFlMWY5ZmJhZGQ4N2E5MGEyZTQwMjc4MzE5MTkwYTBkMycs
CiAgICAgICAgICAgICAnTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjJzogJ2U4NjA4NzYzZjYyNDFk
ZGFjZGQ1YzFlZjE5NzNiYTI3MTc3ZDA4NDYnLAogICAgICAgICB9KQogCiAgICAgICAgIHNlbGYu
X2Fzc2VydE9wdGltaXphdGlvbih7Ci0gICAgICAgICAgICAnTGF5b3V0VGVzdHMvcGxhdGZvcm0v
Y2hyb21pdW0td2luJzogJzIzYTMwMzAyYTY5MTBmOGE0OGIxMDA3ZmEzNmYzZTMxNTgzNDE4MzQn
LAogICAgICAgICAgICAgJ0xheW91dFRlc3RzJzogJzljODc2ZjhjM2U0Y2MyYWVmOTUxOWE2YzEx
NzRlYjM0MzI1OTExMjcnLAotICAgICAgICAgICAgJ0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9t
aXVtLW1hYyc6ICcyM2EzMDMwMmE2OTEwZjhhNDhiMTAwN2ZhMzZmM2UzMTU4MzQxODM0JywKLSAg
ICAgICAgICAgICdMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bSc6ICcxJywKICAgICAgICAg
fSwgewotICAgICAgICAgICAgJ0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtJzogJzIzYTMw
MzAyYTY5MTBmOGE0OGIxMDA3ZmEzNmYzZTMxNTgzNDE4MzQnLAogICAgICAgICAgICAgJ0xheW91
dFRlc3RzJzogJzljODc2ZjhjM2U0Y2MyYWVmOTUxOWE2YzExNzRlYjM0MzI1OTExMjcnLAogICAg
ICAgICB9KQogCkBAIC0xNjcsMzUgKzE0MCwyMiBAQCBjbGFzcyBCYXNlbGluZU9wdGltaXplclRl
c3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMy
JzoKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBzZWxmLl9hc3NlcnRPcHRpbWl6YXRpb24o
ewotICAgICAgICAgICAgJ0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLXdpbic6ICc0NjJk
MDNiOWMwMjVkYjFiMDM5MmQ3NDUzMzEwZGJlZTVmOWE5ZTc0JywKICAgICAgICAgICAgICdMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9tYWMnOiAnNWRhYTc4ZTU1ZjA1ZDlmMGQxYmIxZjMyYjBjZDFiYzNh
MDFlOTM2NCcsCi0gICAgICAgICAgICAnTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0td2lu
LXhwJzogJzQ2MmQwM2I5YzAyNWRiMWIwMzkyZDc0NTMzMTBkYmVlNWY5YTllNzQnLAogICAgICAg
ICAgICAgJ0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy1saW9uJzogJzdhZDA0NWVjZTdjMDMwZTIy
ODNjNWQyMWQ5NTg3YmUyMmJjYmE1NmUnLAotICAgICAgICAgICAgJ0xheW91dFRlc3RzL3BsYXRm
b3JtL2Nocm9taXVtLXdpbic6ICdmODNhZjk3MzJjZTc0ZjcwMmI4YzljNGEzZDlhNGM2NjM2Yjhk
M2JkJywKICAgICAgICAgICAgICdMYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4teHAnOiAnNWIxMjUz
ZWY0ZDUwOTQ1MzBkNWYxYmM2Y2RiOTVjOTBiNDQ2YmVjNycsCi0gICAgICAgICAgICAnTGF5b3V0
VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0tbGludXgnOiAnZjUyZmNkZGU5ZTRiZThiZDUxNDIxNzFj
ZDg1OTIzMGJkNDQ3MTAzNicsCiAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICdMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9jaHJvbWl1bS13aW4nOiAnNDYyZDAzYjljMDI1ZGIxYjAzOTJkNzQ1MzMxMGRi
ZWU1ZjlhOWU3NCcsCiAgICAgICAgICAgICAnTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjJzogJzVk
YWE3OGU1NWYwNWQ5ZjBkMWJiMWYzMmIwY2QxYmMzYTAxZTkzNjQnLAotICAgICAgICAgICAgJ0xh
eW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLXdpbi14cCc6ICc0NjJkMDNiOWMwMjVkYjFiMDM5
MmQ3NDUzMzEwZGJlZTVmOWE5ZTc0JywKICAgICAgICAgICAgICdMYXlvdXRUZXN0cy9wbGF0Zm9y
bS9tYWMtbGlvbic6ICc3YWQwNDVlY2U3YzAzMGUyMjgzYzVkMjFkOTU4N2JlMjJiY2JhNTZlJywK
LSAgICAgICAgICAgICdMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS13aW4nOiAnZjgzYWY5
NzMyY2U3NGY3MDJiOGM5YzRhM2Q5YTRjNjYzNmI4ZDNiZCcsCiAgICAgICAgICAgICAnTGF5b3V0
VGVzdHMvcGxhdGZvcm0vd2luLXhwJzogJzViMTI1M2VmNGQ1MDk0NTMwZDVmMWJjNmNkYjk1Yzkw
YjQ0NmJlYzcnLAotICAgICAgICAgICAgJ0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLWxp
bnV4JzogJ2Y1MmZjZGRlOWU0YmU4YmQ1MTQyMTcxY2Q4NTkyMzBiZDQ0NzEwMzYnCiAgICAgICAg
IH0pCiAKICAgICBkZWYgdGVzdF92aXJ0dWFsX3BvcnRzX2ZpbHRlcmVkKHNlbGYpOgogICAgICAg
ICBzZWxmLl9hc3NlcnRPcHRpbWl6YXRpb24oewotICAgICAgICAgICAgJ0xheW91dFRlc3RzL3Bs
YXRmb3JtL2Nocm9taXVtLW1hYyc6ICcxJywKLSAgICAgICAgICAgICdMYXlvdXRUZXN0cy9wbGF0
Zm9ybS9jaHJvbWl1bS1tYWMtc25vd2xlb3BhcmQnOiAnMScsCi0gICAgICAgICAgICAnTGF5b3V0
VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0td2luJzogJzInLAogICAgICAgICAgICAgJ0xheW91dFRl
c3RzL3BsYXRmb3JtL2d0ayc6ICczJywKICAgICAgICAgICAgICdMYXlvdXRUZXN0cy9wbGF0Zm9y
bS9lZmwnOiAnMycsCiAgICAgICAgICAgICAnTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQnOiAnNCcs
CiAgICAgICAgICAgICAnTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjJzogJzUnLAogICAgICAgICB9
LCB7Ci0gICAgICAgICAgICAnTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0tbWFjJzogJzEn
LAotICAgICAgICAgICAgJ0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLXdpbic6ICcyJywK
ICAgICAgICAgICAgICdMYXlvdXRUZXN0cyc6ICczJywKICAgICAgICAgICAgICdMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9xdCc6ICc0JywKICAgICAgICAgICAgICdMYXlvdXRUZXN0cy9wbGF0Zm9ybS9t
YWMnOiAnNScsCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L2J1aWxkZXJzLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC9idWlsZGVycy5weQppbmRleCBjZGM5ZTViZjQzMzM5NzliZTU0Yjc0ZGMyZmMwMjIyNmM0
M2MzMTFkLi5jYjBmM2U1MzJjMDA5YjU3NmRkOWU2OGNlNTNkNGQ4NzNjOTVjYjBkIDEwMDY0NAot
LS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2J1aWxkZXJzLnB5
CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYnVpbGRlcnMu
cHkKQEAgLTQ1LDIwICs0NSw2IEBAIGZyb20gd2Via2l0cHkuY29tbW9uLm1lbW9pemVkIGltcG9y
dCBtZW1vaXplZAogIyAgICAgIHJlc3VsdHMgaW50byBwbGF0Zm9ybS9tYWMgdGVtcG9yYXJpbHku
CiAKIF9leGFjdF9tYXRjaGVzID0gewotICAgICMgVGhlc2UgYnVpbGRlcnMgYXJlIG9uIGJ1aWxk
LmNocm9taXVtLm9yZy4KLSAgICAiV2ViS2l0IFhQIjogeyJwb3J0X25hbWUiOiAiY2hyb21pdW0t
d2luLXhwIiwgImlzX2RlYnVnIjogRmFsc2V9LAotICAgICJXZWJLaXQgV2luNyI6IHsicG9ydF9u
YW1lIjogImNocm9taXVtLXdpbi13aW43IiwgImlzX2RlYnVnIjogRmFsc2V9LAotICAgICJXZWJL
aXQgV2luNyAoZGJnKSgxKSI6IHsicG9ydF9uYW1lIjogImNocm9taXVtLXdpbi13aW43IiwgImlz
X2RlYnVnIjogVHJ1ZX0sCi0gICAgIldlYktpdCBXaW43IChkYmcpKDIpIjogeyJwb3J0X25hbWUi
OiAiY2hyb21pdW0td2luLXdpbjciLCAiaXNfZGVidWciOiBUcnVlfSwKLSAgICAiV2ViS2l0IExp
bnV4IjogeyJwb3J0X25hbWUiOiAiY2hyb21pdW0tbGludXgteDg2XzY0IiwgImlzX2RlYnVnIjog
RmFsc2V9LAotICAgICJXZWJLaXQgTGludXggMzIiOiB7InBvcnRfbmFtZSI6ICJjaHJvbWl1bS1s
aW51eC14ODYiLCAiaXNfZGVidWciOiBGYWxzZX0sCi0gICAgIldlYktpdCBMaW51eCAoZGJnKSI6
IHsicG9ydF9uYW1lIjogImNocm9taXVtLWxpbnV4LXg4Nl82NCIsICJpc19kZWJ1ZyI6IFRydWV9
LAotICAgICJXZWJLaXQgTWFjMTAuNiI6IHsicG9ydF9uYW1lIjogImNocm9taXVtLW1hYy1zbm93
bGVvcGFyZCIsICJpc19kZWJ1ZyI6IEZhbHNlfSwKLSAgICAiV2ViS2l0IE1hYzEwLjYgKGRiZyki
OiB7InBvcnRfbmFtZSI6ICJjaHJvbWl1bS1tYWMtc25vd2xlb3BhcmQiLCAiaXNfZGVidWciOiBU
cnVlfSwKLSAgICAiV2ViS2l0IE1hYzEwLjciOiB7InBvcnRfbmFtZSI6ICJjaHJvbWl1bS1tYWMt
bGlvbiIsICJpc19kZWJ1ZyI6IEZhbHNlfSwKLSAgICAiV2ViS2l0IE1hYzEwLjcgKGRiZykiOiB7
InBvcnRfbmFtZSI6ICJjaHJvbWl1bS1tYWMtbGlvbiIsICJpc19kZWJ1ZyI6IFRydWV9LAotICAg
ICJXZWJLaXQgTWFjMTAuOCI6IHsicG9ydF9uYW1lIjogImNocm9taXVtLW1hYy1tb3VudGFpbmxp
b24iLCAiaXNfZGVidWciOiBGYWxzZX0sCi0KICAgICAjIFRoZXNlIGJ1aWxkZXJzIGFyZSBvbiBi
dWlsZC53ZWJraXQub3JnLgogICAgICJBcHBsZSBNb3VudGFpbkxpb24gUmVsZWFzZSBXSzEgKFRl
c3RzKSI6IHsicG9ydF9uYW1lIjogIm1hYy1tb3VudGFpbmxpb24iLCAiaXNfZGVidWciOiBGYWxz
ZSwgInJlYmFzZWxpbmVfb3ZlcnJpZGVfZGlyIjogIm1hYyJ9LAogICAgICJBcHBsZSBNb3VudGFp
bkxpb24gRGVidWcgV0sxIChUZXN0cykiOiB7InBvcnRfbmFtZSI6ICJtYWMtbW91bnRhaW5saW9u
IiwgImlzX2RlYnVnIjogVHJ1ZSwgInJlYmFzZWxpbmVfb3ZlcnJpZGVfZGlyIjogIm1hYyJ9LApA
QCAtOTQsOSArODAsNiBAQCBfZnV6enlfbWF0Y2hlcyA9IHsKICAgICByIldpbmRvd3MiOiAid2lu
IiwKICAgICByIkdUSyI6ICJndGsiLAogICAgIHIiUXQiOiAicXQiLAotICAgIHIiQ2hyb21pdW0g
TWFjIjogImNocm9taXVtLW1hYyIsCi0gICAgciJDaHJvbWl1bSBMaW51eCI6ICJjaHJvbWl1bS1s
aW51eCIsCi0gICAgciJDaHJvbWl1bSBXaW4iOiAiY2hyb21pdW0td2luIiwKIH0KIAogCkBAIC0x
MDQsOCArODcsNiBAQCBfcG9ydHNfd2l0aG91dF9idWlsZGVycyA9IFsKICAgICAicXQtbWFjIiwK
ICAgICAicXQtd2luIiwKICAgICAicXQtd2syIiwKLSAgICAjIEZJWE1FOiBNb3ZlIHRvIF9leHRh
Y3RfbWF0Y2hlcy4KLSAgICAiY2hyb21pdW0tYW5kcm9pZCIsCiBdCiAKIApkaWZmIC0tZ2l0IGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weSBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHkKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhNGQzMGM2OTA0MGFhZWE0MWUwMmQyOWRjZjY3YmY3
MDBiZTJiZDYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weQorKysg
L2Rldi9udWxsCkBAIC0xLDQ3NCArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0j
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0j
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotIiIiQ2hyb21p
dW0gaW1wbGVtZW50YXRpb25zIG9mIHRoZSBQb3J0IGludGVyZmFjZS4iIiIKLQotaW1wb3J0IGJh
c2U2NAotaW1wb3J0IGVycm5vCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IHJlCi1pbXBvcnQgc2ln
bmFsCi1pbXBvcnQgc3VicHJvY2VzcwotaW1wb3J0IHN5cwotaW1wb3J0IHRpbWUKLQotZnJvbSB3
ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBleGVjdXRpdmUKLWZyb20gd2Via2l0cHkuY29t
bW9uLnN5c3RlbS5wYXRoIGltcG9ydCBjeWdwYXRoCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0
cy5tb2RlbHMudGVzdF9jb25maWd1cmF0aW9uIGltcG9ydCBUZXN0Q29uZmlndXJhdGlvbgotZnJv
bSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC5iYXNlIGltcG9ydCBQb3J0LCBWaXJ0dWFsVGVz
dFN1aXRlCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0Lmh0dHBfbG9jayBpbXBvcnQg
SHR0cExvY2sKLQotCi1fbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCi0KLQotY2xh
c3MgQ2hyb21pdW1Qb3J0KFBvcnQpOgotICAgICIiIkFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIENo
cm9taXVtIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgUG9ydCBjbGFzcy4iIiIKLQotICAgIEFMTF9T
WVNURU1TID0gKAotICAgICAgICAoJ3Nub3dsZW9wYXJkJywgJ3g4NicpLAotICAgICAgICAoJ2xp
b24nLCAneDg2JyksCi0gICAgICAgICgnbW91bnRhaW5saW9uJywgJ3g4NicpLAotICAgICAgICAo
J3hwJywgJ3g4NicpLAotICAgICAgICAoJ3dpbjcnLCAneDg2JyksCi0gICAgICAgICgnbHVjaWQn
LCAneDg2JyksCi0gICAgICAgICgnbHVjaWQnLCAneDg2XzY0JyksCi0gICAgICAgICMgRklYTUU6
IFRlY2huaWNhbGx5IHRoaXMgc2hvdWxkIGJlICdhcm0nLCBidXQgYWRkaW5nIGEgdGhpcmQgYXJj
aGl0ZWN0dXJlIHR5cGUgYnJlYWtzIFRlc3RDb25maWd1cmF0aW9uQ29udmVydGVyLgotICAgICAg
ICAjIElmIHdlIG5lZWQgdGhpcyB0byBiZSAnYXJtJyBpbiB0aGUgZnV0dXJlLCB0aGVuIHdlIGZp
cnN0IGhhdmUgdG8gZml4IFRlc3RDb25maWd1cmF0aW9uQ29udmVydGVyLgotICAgICAgICAoJ2lj
ZWNyZWFtc2FuZHdpY2gnLCAneDg2JykpCi0KLSAgICBBTExfQkFTRUxJTkVfVkFSSUFOVFMgPSBb
Ci0gICAgICAgICdjaHJvbWl1bS1tYWMtbW91bnRhaW5saW9uJywgJ2Nocm9taXVtLW1hYy1saW9u
JywgJ2Nocm9taXVtLW1hYy1zbm93bGVvcGFyZCcsCi0gICAgICAgICdjaHJvbWl1bS13aW4td2lu
NycsICdjaHJvbWl1bS13aW4teHAnLAotICAgICAgICAnY2hyb21pdW0tbGludXgteDg2XzY0Jywg
J2Nocm9taXVtLWxpbnV4LXg4NicsCi0gICAgXQotCi0gICAgQ09ORklHVVJBVElPTl9TUEVDSUZJ
RVJfTUFDUk9TID0gewotICAgICAgICAnbWFjJzogWydzbm93bGVvcGFyZCcsICdsaW9uJywgJ21v
dW50YWlubGlvbiddLAotICAgICAgICAnd2luJzogWyd4cCcsICd3aW43J10sCi0gICAgICAgICds
aW51eCc6IFsnbHVjaWQnXSwKLSAgICAgICAgJ2FuZHJvaWQnOiBbJ2ljZWNyZWFtc2FuZHdpY2gn
XSwKLSAgICB9Ci0KLSAgICBERUZBVUxUX0JVSUxEX0RJUkVDVE9SSUVTID0gKCdvdXQnLCkKLQot
ICAgICMgb3ZlcnJpZGRlbiBpbiBzdWJjbGFzc2VzLgotICAgIEZBTExCQUNLX1BBVEhTID0ge30K
LQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBfc3RhdGljX2J1aWxkX3BhdGgoY2xzLCBmaWxl
c3lzdGVtLCBidWlsZF9kaXJlY3RvcnksIGNocm9taXVtX2Jhc2UsIHdlYmtpdF9iYXNlLCBjb25m
aWd1cmF0aW9uLCBjb21wcyk6Ci0gICAgICAgIGlmIGJ1aWxkX2RpcmVjdG9yeToKLSAgICAgICAg
ICAgIHJldHVybiBmaWxlc3lzdGVtLmpvaW4oYnVpbGRfZGlyZWN0b3J5LCBjb25maWd1cmF0aW9u
LCAqY29tcHMpCi0KLSAgICAgICAgaGl0cyA9IFtdCi0gICAgICAgIGZvciBkaXJlY3RvcnkgaW4g
Y2xzLkRFRkFVTFRfQlVJTERfRElSRUNUT1JJRVM6Ci0gICAgICAgICAgICBiYXNlX2RpciA9IGZp
bGVzeXN0ZW0uam9pbihjaHJvbWl1bV9iYXNlLCBkaXJlY3RvcnksIGNvbmZpZ3VyYXRpb24pCi0g
ICAgICAgICAgICBwYXRoID0gZmlsZXN5c3RlbS5qb2luKGJhc2VfZGlyLCAqY29tcHMpCi0gICAg
ICAgICAgICBpZiBmaWxlc3lzdGVtLmV4aXN0cyhwYXRoKToKLSAgICAgICAgICAgICAgICBoaXRz
LmFwcGVuZCgoZmlsZXN5c3RlbS5tdGltZShwYXRoKSwgcGF0aCkpCi0KLSAgICAgICAgZm9yIGRp
cmVjdG9yeSBpbiBjbHMuREVGQVVMVF9CVUlMRF9ESVJFQ1RPUklFUzoKLSAgICAgICAgICAgIGJh
c2VfZGlyID0gZmlsZXN5c3RlbS5qb2luKHdlYmtpdF9iYXNlLCBkaXJlY3RvcnksIGNvbmZpZ3Vy
YXRpb24pCi0gICAgICAgICAgICBwYXRoID0gZmlsZXN5c3RlbS5qb2luKGJhc2VfZGlyLCAqY29t
cHMpCi0gICAgICAgICAgICBpZiBmaWxlc3lzdGVtLmV4aXN0cyhwYXRoKToKLSAgICAgICAgICAg
ICAgICBoaXRzLmFwcGVuZCgoZmlsZXN5c3RlbS5tdGltZShwYXRoKSwgcGF0aCkpCi0KLSAgICAg
ICAgaWYgaGl0czoKLSAgICAgICAgICAgIGhpdHMuc29ydChyZXZlcnNlPVRydWUpCi0gICAgICAg
ICAgICByZXR1cm4gaGl0c1swXVsxXSAgIyBSZXR1cm4gdGhlIG5ld2VzdCBmaWxlIGZvdW5kLgot
Ci0gICAgICAgICMgV2UgaGF2ZSB0byBkZWZhdWx0IHRvIHNvbWV0aGluZywgc28gcGljayB0aGUg
bGFzdCBvbmUuCi0gICAgICAgIHJldHVybiBmaWxlc3lzdGVtLmpvaW4oYmFzZV9kaXIsICpjb21w
cykKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBfY2hyb21pdW1fYmFzZV9kaXIoY2xzLCBm
aWxlc3lzdGVtKToKLSAgICAgICAgbW9kdWxlX3BhdGggPSBmaWxlc3lzdGVtLnBhdGhfdG9fbW9k
dWxlKGNscy5fX21vZHVsZV9fKQotICAgICAgICBvZmZzZXQgPSBtb2R1bGVfcGF0aC5maW5kKCd0
aGlyZF9wYXJ0eScpCi0gICAgICAgIGlmIG9mZnNldCA9PSAtMToKLSAgICAgICAgICAgIHJldHVy
biBmaWxlc3lzdGVtLmpvaW4obW9kdWxlX3BhdGhbMDptb2R1bGVfcGF0aC5maW5kKCdUb29scycp
XSwgJ1NvdXJjZScsICdXZWJLaXQnLCAnY2hyb21pdW0nKQotICAgICAgICBlbHNlOgotICAgICAg
ICAgICAgcmV0dXJuIG1vZHVsZV9wYXRoWzA6b2Zmc2V0XQotCi0gICAgZGVmIF9faW5pdF9fKHNl
bGYsIGhvc3QsIHBvcnRfbmFtZSwgKiprd2FyZ3MpOgotICAgICAgICBzdXBlcihDaHJvbWl1bVBv
cnQsIHNlbGYpLl9faW5pdF9fKGhvc3QsIHBvcnRfbmFtZSwgKiprd2FyZ3MpCi0gICAgICAgICMg
QWxsIHN1Yi1jbGFzc2VzIG92ZXJyaWRlIHRoaXMsIGJ1dCB3ZSBuZWVkIGFuIGluaXRpYWwgdmFs
dWUgZm9yIHRlc3RpbmcuCi0gICAgICAgIHNlbGYuX2Nocm9taXVtX2Jhc2VfZGlyX3BhdGggPSBO
b25lCi0KLSAgICBkZWYgaXNfY2hyb21pdW0oc2VsZik6Ci0gICAgICAgIHJldHVybiBUcnVlCi0K
LSAgICBkZWYgZGVmYXVsdF9tYXhfbG9ja2VkX3NoYXJkcyhzZWxmKToKLSAgICAgICAgIiIiUmV0
dXJuIHRoZSBudW1iZXIgb2YgImxvY2tlZCIgc2hhcmRzIHRvIHJ1biBpbiBwYXJhbGxlbCAobGlr
ZSB0aGUgaHR0cCB0ZXN0cykuIiIiCi0gICAgICAgIG1heF9sb2NrZWRfc2hhcmRzID0gaW50KHNl
bGYuZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMoKSkgLyA0Ci0gICAgICAgIGlmIG5vdCBtYXhfbG9j
a2VkX3NoYXJkczoKLSAgICAgICAgICAgIHJldHVybiAxCi0gICAgICAgIHJldHVybiBtYXhfbG9j
a2VkX3NoYXJkcwotCi0gICAgZGVmIGRlZmF1bHRfcGl4ZWxfdGVzdHMoc2VsZik6Ci0gICAgICAg
IHJldHVybiBUcnVlCi0KLSAgICBkZWYgZGVmYXVsdF9iYXNlbGluZV9zZWFyY2hfcGF0aChzZWxm
KToKLSAgICAgICAgcmV0dXJuIG1hcChzZWxmLl93ZWJraXRfYmFzZWxpbmVfcGF0aCwgc2VsZi5G
QUxMQkFDS19QQVRIU1tzZWxmLnZlcnNpb24oKV0pCi0KLSAgICBkZWYgZGVmYXVsdF90aW1lb3V0
X21zKHNlbGYpOgotICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24oJ2NvbmZpZ3VyYXRpb24nKSA9
PSAnRGVidWcnOgotICAgICAgICAgICAgcmV0dXJuIDEyICogMTAwMAotICAgICAgICByZXR1cm4g
NiAqIDEwMDAKLQotICAgIGRlZiBfY2hlY2tfZmlsZV9leGlzdHMoc2VsZiwgcGF0aF90b19maWxl
LCBmaWxlX2Rlc2NyaXB0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGVf
c3RlcD1Ob25lLCBsb2dnaW5nPVRydWUpOgotICAgICAgICAiIiJWZXJpZnkgdGhlIGZpbGUgaXMg
cHJlc2VudCB3aGVyZSBleHBlY3RlZCBvciBsb2cgYW4gZXJyb3IuCi0KLSAgICAgICAgQXJnczoK
LSAgICAgICAgICAgIGZpbGVfbmFtZTogVGhlIChodW1hbiBmcmllbmRseSkgbmFtZSBvciBkZXNj
cmlwdGlvbiBvZiB0aGUgZmlsZQotICAgICAgICAgICAgICAgIHlvdSdyZSBsb29raW5nIGZvciAo
ZS5nLiwgIkhUVFAgU2VydmVyIikuIFVzZWQgZm9yIGVycm9yIGxvZ2dpbmcuCi0gICAgICAgICAg
ICBvdmVycmlkZV9zdGVwOiBBbiBvcHRpb25hbCBzdHJpbmcgdG8gYmUgbG9nZ2VkIGlmIHRoZSBj
aGVjayBmYWlscy4KLSAgICAgICAgICAgIGxvZ2dpbmc6IFdoZXRoZXIgb3Igbm90IGxvZyB0aGUg
ZXJyb3IgbWVzc2FnZXMuIiIiCi0gICAgICAgIGlmIG5vdCBzZWxmLl9maWxlc3lzdGVtLmV4aXN0
cyhwYXRoX3RvX2ZpbGUpOgotICAgICAgICAgICAgaWYgbG9nZ2luZzoKLSAgICAgICAgICAgICAg
ICBfbG9nLmVycm9yKCdVbmFibGUgdG8gZmluZCAlcycgJSBmaWxlX2Rlc2NyaXB0aW9uKQotICAg
ICAgICAgICAgICAgIF9sb2cuZXJyb3IoJyAgICBhdCAlcycgJSBwYXRoX3RvX2ZpbGUpCi0gICAg
ICAgICAgICAgICAgaWYgb3ZlcnJpZGVfc3RlcDoKLSAgICAgICAgICAgICAgICAgICAgX2xvZy5l
cnJvcignICAgICVzJyAlIG92ZXJyaWRlX3N0ZXApCi0gICAgICAgICAgICAgICAgICAgIF9sb2cu
ZXJyb3IoJycpCi0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgcmV0dXJuIFRydWUK
LQotICAgIGRlZiBjaGVja19idWlsZChzZWxmLCBuZWVkc19odHRwKToKLSAgICAgICAgcmVzdWx0
ID0gVHJ1ZQotCi0gICAgICAgIGR1bXBfcmVuZGVyX3RyZWVfYmluYXJ5X3BhdGggPSBzZWxmLl9w
YXRoX3RvX2RyaXZlcigpCi0gICAgICAgIHJlc3VsdCA9IHNlbGYuX2NoZWNrX2ZpbGVfZXhpc3Rz
KGR1bXBfcmVuZGVyX3RyZWVfYmluYXJ5X3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICd0ZXN0IGRyaXZlcicpIGFuZCByZXN1bHQKLSAgICAgICAgaWYgcmVz
dWx0IGFuZCBzZWxmLmdldF9vcHRpb24oJ2J1aWxkJyk6Ci0gICAgICAgICAgICByZXN1bHQgPSBz
ZWxmLl9jaGVja19kcml2ZXJfYnVpbGRfdXBfdG9fZGF0ZSgKLSAgICAgICAgICAgICAgICBzZWxm
LmdldF9vcHRpb24oJ2NvbmZpZ3VyYXRpb24nKSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAg
IF9sb2cuZXJyb3IoJycpCi0KLSAgICAgICAgaGVscGVyX3BhdGggPSBzZWxmLl9wYXRoX3RvX2hl
bHBlcigpCi0gICAgICAgIGlmIGhlbHBlcl9wYXRoOgotICAgICAgICAgICAgcmVzdWx0ID0gc2Vs
Zi5fY2hlY2tfZmlsZV9leGlzdHMoaGVscGVyX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAnbGF5b3V0IHRlc3QgaGVscGVyJykgYW5kIHJlc3VsdAot
Ci0gICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbigncGl4ZWxfdGVzdHMnKToKLSAgICAgICAgICAg
IHJlc3VsdCA9IHNlbGYuY2hlY2tfaW1hZ2VfZGlmZigKLSAgICAgICAgICAgICAgICAnVG8gb3Zl
cnJpZGUsIGludm9rZSB3aXRoIC0tbm8tcGl4ZWwtdGVzdHMnKSBhbmQgcmVzdWx0Ci0KLSAgICAg
ICAgIyBJdCdzIG9rYXkgaWYgcHJldHR5IHBhdGNoIGFuZCB3ZGlmZiBhcmVuJ3QgYXZhaWxhYmxl
LCBidXQgd2Ugd2lsbCBhdCBsZWFzdCBsb2cgbWVzc2FnZXMuCi0gICAgICAgIHNlbGYuX3ByZXR0
eV9wYXRjaF9hdmFpbGFibGUgPSBzZWxmLmNoZWNrX3ByZXR0eV9wYXRjaCgpCi0gICAgICAgIHNl
bGYuX3dkaWZmX2F2YWlsYWJsZSA9IHNlbGYuY2hlY2tfd2RpZmYoKQotCi0gICAgICAgIHJldHVy
biByZXN1bHQKLQotICAgIGRlZiBjaGVja19zeXNfZGVwcyhzZWxmLCBuZWVkc19odHRwKToKLSAg
ICAgICAgcmVzdWx0ID0gc3VwZXIoQ2hyb21pdW1Qb3J0LCBzZWxmKS5jaGVja19zeXNfZGVwcyhu
ZWVkc19odHRwKQotCi0gICAgICAgIGNtZCA9IFtzZWxmLl9wYXRoX3RvX2RyaXZlcigpLCAnLS1j
aGVjay1sYXlvdXQtdGVzdC1zeXMtZGVwcyddCi0KLSAgICAgICAgbG9jYWxfZXJyb3IgPSBleGVj
dXRpdmUuU2NyaXB0RXJyb3IoKQotCi0gICAgICAgIGRlZiBlcnJvcl9oYW5kbGVyKHNjcmlwdF9l
cnJvcik6Ci0gICAgICAgICAgICBsb2NhbF9lcnJvci5leGl0X2NvZGUgPSBzY3JpcHRfZXJyb3Iu
ZXhpdF9jb2RlCi0KLSAgICAgICAgb3V0cHV0ID0gc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5k
KGNtZCwgZXJyb3JfaGFuZGxlcj1lcnJvcl9oYW5kbGVyKQotICAgICAgICBpZiBsb2NhbF9lcnJv
ci5leGl0X2NvZGU6Ci0gICAgICAgICAgICBfbG9nLmVycm9yKCdTeXN0ZW0gZGVwZW5kZW5jaWVz
IGNoZWNrIGZhaWxlZC4nKQotICAgICAgICAgICAgX2xvZy5lcnJvcignVG8gb3ZlcnJpZGUsIGlu
dm9rZSB3aXRoIC0tbm9jaGVjay1zeXMtZGVwcycpCi0gICAgICAgICAgICBfbG9nLmVycm9yKCcn
KQotICAgICAgICAgICAgX2xvZy5lcnJvcihvdXRwdXQpCi0gICAgICAgICAgICByZXR1cm4gRmFs
c2UKLSAgICAgICAgcmV0dXJuIHJlc3VsdAotCi0gICAgZGVmIGNoZWNrX2ltYWdlX2RpZmYoc2Vs
Ziwgb3ZlcnJpZGVfc3RlcD1Ob25lLCBsb2dnaW5nPVRydWUpOgotICAgICAgICBpbWFnZV9kaWZm
X3BhdGggPSBzZWxmLl9wYXRoX3RvX2ltYWdlX2RpZmYoKQotICAgICAgICByZXR1cm4gc2VsZi5f
Y2hlY2tfZmlsZV9leGlzdHMoaW1hZ2VfZGlmZl9wYXRoLCAnaW1hZ2UgZGlmZiBleGUnLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGVfc3RlcCwgbG9nZ2lu
ZykKLQotICAgIGRlZiBkaWZmX2ltYWdlKHNlbGYsIGV4cGVjdGVkX2NvbnRlbnRzLCBhY3R1YWxf
Y29udGVudHMsIHRvbGVyYW5jZT1Ob25lKToKLSAgICAgICAgIyB0b2xlcmFuY2UgaXMgbm90IHVz
ZWQgaW4gY2hyb21pdW0uIE1ha2Ugc3VyZSBjYWxsZXIgZG9lc24ndCBwYXNzIHRvbGVyYW5jZSBv
dGhlciB0aGFuIHplcm8gb3IgTm9uZS4KLSAgICAgICAgYXNzZXJ0ICh0b2xlcmFuY2UgaXMgTm9u
ZSkgb3IgdG9sZXJhbmNlID09IDAKLQotICAgICAgICAjIElmIG9ubHkgb25lIG9mIHRoZW0gZXhp
c3RzLCByZXR1cm4gdGhhdCBvbmUuCi0gICAgICAgIGlmIG5vdCBhY3R1YWxfY29udGVudHMgYW5k
IG5vdCBleHBlY3RlZF9jb250ZW50czoKLSAgICAgICAgICAgIHJldHVybiAoTm9uZSwgMCwgTm9u
ZSkKLSAgICAgICAgaWYgbm90IGFjdHVhbF9jb250ZW50czoKLSAgICAgICAgICAgIHJldHVybiAo
ZXhwZWN0ZWRfY29udGVudHMsIDAsIE5vbmUpCi0gICAgICAgIGlmIG5vdCBleHBlY3RlZF9jb250
ZW50czoKLSAgICAgICAgICAgIHJldHVybiAoYWN0dWFsX2NvbnRlbnRzLCAwLCBOb25lKQotCi0g
ICAgICAgIHRlbXBkaXIgPSBzZWxmLl9maWxlc3lzdGVtLm1rZHRlbXAoKQotCi0gICAgICAgIGV4
cGVjdGVkX2ZpbGVuYW1lID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHN0cih0ZW1wZGlyKSwgImV4
cGVjdGVkLnBuZyIpCi0gICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ud3JpdGVfYmluYXJ5X2ZpbGUo
ZXhwZWN0ZWRfZmlsZW5hbWUsIGV4cGVjdGVkX2NvbnRlbnRzKQotCi0gICAgICAgIGFjdHVhbF9m
aWxlbmFtZSA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzdHIodGVtcGRpciksICJhY3R1YWwucG5n
IikKLSAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS53cml0ZV9iaW5hcnlfZmlsZShhY3R1YWxfZmls
ZW5hbWUsIGFjdHVhbF9jb250ZW50cykKLQotICAgICAgICBkaWZmX2ZpbGVuYW1lID0gc2VsZi5f
ZmlsZXN5c3RlbS5qb2luKHN0cih0ZW1wZGlyKSwgImRpZmYucG5nIikKLQotICAgICAgICBuYXRp
dmVfZXhwZWN0ZWRfZmlsZW5hbWUgPSBzZWxmLl9jb252ZXJ0X3BhdGgoZXhwZWN0ZWRfZmlsZW5h
bWUpCi0gICAgICAgIG5hdGl2ZV9hY3R1YWxfZmlsZW5hbWUgPSBzZWxmLl9jb252ZXJ0X3BhdGgo
YWN0dWFsX2ZpbGVuYW1lKQotICAgICAgICBuYXRpdmVfZGlmZl9maWxlbmFtZSA9IHNlbGYuX2Nv
bnZlcnRfcGF0aChkaWZmX2ZpbGVuYW1lKQotCi0gICAgICAgIGV4ZWN1dGFibGUgPSBzZWxmLl9w
YXRoX3RvX2ltYWdlX2RpZmYoKQotICAgICAgICAjIE5vdGUgdGhhdCBhbHRob3VnaCB3ZSBhcmUg
aGFuZGVkICdvbGQnLCAnbmV3JywgaW1hZ2VfZGlmZiB3YW50cyAnbmV3JywgJ29sZCcuCi0gICAg
ICAgIGNvbWFuZCA9IFtleGVjdXRhYmxlLCAnLS1kaWZmJywgbmF0aXZlX2FjdHVhbF9maWxlbmFt
ZSwgbmF0aXZlX2V4cGVjdGVkX2ZpbGVuYW1lLCBuYXRpdmVfZGlmZl9maWxlbmFtZV0KLQotICAg
ICAgICByZXN1bHQgPSBOb25lCi0gICAgICAgIGVycl9zdHIgPSBOb25lCi0gICAgICAgIHRyeToK
LSAgICAgICAgICAgIGV4aXRfY29kZSA9IHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChjb21h
bmQsIHJldHVybl9leGl0X2NvZGU9VHJ1ZSkKLSAgICAgICAgICAgIGlmIGV4aXRfY29kZSA9PSAw
OgotICAgICAgICAgICAgICAgICMgVGhlIGltYWdlcyBhcmUgdGhlIHNhbWUuCi0gICAgICAgICAg
ICAgICAgcmVzdWx0ID0gTm9uZQotICAgICAgICAgICAgZWxpZiBleGl0X2NvZGUgPT0gMToKLSAg
ICAgICAgICAgICAgICByZXN1bHQgPSBzZWxmLl9maWxlc3lzdGVtLnJlYWRfYmluYXJ5X2ZpbGUo
bmF0aXZlX2RpZmZfZmlsZW5hbWUpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAg
IGVycl9zdHIgPSAiaW1hZ2UgZGlmZiByZXR1cm5lZCBhbiBleGl0IGNvZGUgb2YgJXMiICUgZXhp
dF9jb2RlCi0gICAgICAgIGV4Y2VwdCBPU0Vycm9yLCBlOgotICAgICAgICAgICAgZXJyX3N0ciA9
ICdlcnJvciBydW5uaW5nIGltYWdlIGRpZmY6ICVzJyAlIHN0cihlKQotICAgICAgICBmaW5hbGx5
OgotICAgICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS5ybXRyZWUoc3RyKHRlbXBkaXIpKQotCi0g
ICAgICAgIHJldHVybiAocmVzdWx0LCAwLCBlcnJfc3RyIG9yIE5vbmUpICAjIEZJWE1FOiBob3cg
dG8gZ2V0ICUgZGlmZj8KLQotICAgIGRlZiBwYXRoX2Zyb21fY2hyb21pdW1fYmFzZShzZWxmLCAq
Y29tcHMpOgotICAgICAgICAiIiJSZXR1cm5zIHRoZSBmdWxsIHBhdGggdG8gcGF0aCBtYWRlIGJ5
IGpvaW5pbmcgdGhlIHRvcCBvZiB0aGUKLSAgICAgICAgQ2hyb21pdW0gc291cmNlIHRyZWUgYW5k
IHRoZSBsaXN0IG9mIHBhdGggY29tcG9uZW50cyBpbiB8KmNvbXBzfC4iIiIKLSAgICAgICAgaWYg
c2VsZi5fY2hyb21pdW1fYmFzZV9kaXJfcGF0aCBpcyBOb25lOgotICAgICAgICAgICAgc2VsZi5f
Y2hyb21pdW1fYmFzZV9kaXJfcGF0aCA9IHNlbGYuX2Nocm9taXVtX2Jhc2VfZGlyKHNlbGYuX2Zp
bGVzeXN0ZW0pCi0gICAgICAgIHJldHVybiBzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5fY2hy
b21pdW1fYmFzZV9kaXJfcGF0aCwgKmNvbXBzKQotCi0gICAgZGVmIHNldHVwX2Vudmlyb25fZm9y
X3NlcnZlcihzZWxmLCBzZXJ2ZXJfbmFtZT1Ob25lKToKLSAgICAgICAgY2xlYW5fZW52ID0gc3Vw
ZXIoQ2hyb21pdW1Qb3J0LCBzZWxmKS5zZXR1cF9lbnZpcm9uX2Zvcl9zZXJ2ZXIoc2VydmVyX25h
bWUpCi0gICAgICAgICMgV2Via2l0IExpbnV4ICh2YWxncmluZCBsYXlvdXQpIGJvdCBuZWVkcyB0
aGVzZSBlbnZ2YXJzLgotICAgICAgICBzZWxmLl9jb3B5X3ZhbHVlX2Zyb21fZW52aXJvbl9pZl9z
ZXQoY2xlYW5fZW52LCAnVkFMR1JJTkRfTElCJykKLSAgICAgICAgc2VsZi5fY29weV92YWx1ZV9m
cm9tX2Vudmlyb25faWZfc2V0KGNsZWFuX2VudiwgJ1ZBTEdSSU5EX0xJQl9JTk5FUicpCi0gICAg
ICAgIHJldHVybiBjbGVhbl9lbnYKLQotICAgIGRlZiBkZWZhdWx0X3Jlc3VsdHNfZGlyZWN0b3J5
KHNlbGYpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5wYXRoX2Zyb21f
Y2hyb21pdW1fYmFzZSgnd2Via2l0Jywgc2VsZi5nZXRfb3B0aW9uKCdjb25maWd1cmF0aW9uJyks
ICdsYXlvdXQtdGVzdC1yZXN1bHRzJykKLSAgICAgICAgZXhjZXB0IEFzc2VydGlvbkVycm9yOgot
ICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2J1aWxkX3BhdGgoJ2xheW91dC10ZXN0LXJlc3VsdHMn
KQotCi0gICAgZGVmIF9taXNzaW5nX3N5bWJvbF90b19za2lwcGVkX3Rlc3RzKHNlbGYpOgotICAg
ICAgICAjIEZJWE1FOiBTaG91bGQgV2ViS2l0UG9ydCBoYXZlIHRoZXNlIGRlZmluaXRpb25zIGFs
c28/Ci0gICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAiZmZfbXAzX2RlY29kZXIiOiBbIndl
YmF1ZGlvL2NvZGVjLXRlc3RzL21wMyJdLAotICAgICAgICAgICAgImZmX2FhY19kZWNvZGVyIjog
WyJ3ZWJhdWRpby9jb2RlYy10ZXN0cy9hYWMiXSwKLSAgICAgICAgfQotCi0gICAgZGVmIHNldHVw
X3Rlc3RfcnVuKHNlbGYpOgotICAgICAgICBzdXBlcihDaHJvbWl1bVBvcnQsIHNlbGYpLnNldHVw
X3Rlc3RfcnVuKCkKLSAgICAgICAgIyBEZWxldGUgdGhlIGRpc2sgY2FjaGUgaWYgYW55IHRvIGVu
c3VyZSBhIGNsZWFuIHRlc3QgcnVuLgotICAgICAgICBkdW1wX3JlbmRlcl90cmVlX2JpbmFyeV9w
YXRoID0gc2VsZi5fcGF0aF90b19kcml2ZXIoKQotICAgICAgICBjYWNoZWRpciA9IHNlbGYuX2Zp
bGVzeXN0ZW0uZGlybmFtZShkdW1wX3JlbmRlcl90cmVlX2JpbmFyeV9wYXRoKQotICAgICAgICBj
YWNoZWRpciA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihjYWNoZWRpciwgImNhY2hlIikKLSAgICAg
ICAgaWYgc2VsZi5fZmlsZXN5c3RlbS5leGlzdHMoY2FjaGVkaXIpOgotICAgICAgICAgICAgc2Vs
Zi5fZmlsZXN5c3RlbS5ybXRyZWUoY2FjaGVkaXIpCi0KLSAgICBkZWYgc3RhcnRfaGVscGVyKHNl
bGYpOgotICAgICAgICBoZWxwZXJfcGF0aCA9IHNlbGYuX3BhdGhfdG9faGVscGVyKCkKLSAgICAg
ICAgaWYgaGVscGVyX3BhdGg6Ci0gICAgICAgICAgICBfbG9nLmRlYnVnKCJTdGFydGluZyBsYXlv
dXQgaGVscGVyICVzIiAlIGhlbHBlcl9wYXRoKQotICAgICAgICAgICAgIyBOb3RlOiBOb3QgdGhy
ZWFkIHNhZmU6IGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyMzIwCi0gICAgICAgICAgICBz
ZWxmLl9oZWxwZXIgPSBzdWJwcm9jZXNzLlBvcGVuKFtoZWxwZXJfcGF0aF0sCi0gICAgICAgICAg
ICAgICAgc3RkaW49c3VicHJvY2Vzcy5QSVBFLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRl
cnI9Tm9uZSkKLSAgICAgICAgICAgIGlzX3JlYWR5ID0gc2VsZi5faGVscGVyLnN0ZG91dC5yZWFk
bGluZSgpCi0gICAgICAgICAgICBpZiBub3QgaXNfcmVhZHkuc3RhcnRzd2l0aCgncmVhZHknKToK
LSAgICAgICAgICAgICAgICBfbG9nLmVycm9yKCJsYXlvdXRfdGVzdF9oZWxwZXIgZmFpbGVkIHRv
IGJlIHJlYWR5IikKLQotICAgIGRlZiBzdG9wX2hlbHBlcihzZWxmKToKLSAgICAgICAgaWYgc2Vs
Zi5faGVscGVyOgotICAgICAgICAgICAgX2xvZy5kZWJ1ZygiU3RvcHBpbmcgbGF5b3V0IHRlc3Qg
aGVscGVyIikKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzZWxmLl9oZWxwZXIu
c3RkaW4ud3JpdGUoInhcbiIpCi0gICAgICAgICAgICAgICAgc2VsZi5faGVscGVyLnN0ZGluLmNs
b3NlKCkKLSAgICAgICAgICAgICAgICBzZWxmLl9oZWxwZXIud2FpdCgpCi0gICAgICAgICAgICBl
eGNlcHQgSU9FcnJvciwgZToKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBmaW5h
bGx5OgotICAgICAgICAgICAgICAgIHNlbGYuX2hlbHBlciA9IE5vbmUKLQotCi0gICAgZGVmIGV4
aXRfY29kZV9mcm9tX3N1bW1hcml6ZWRfcmVzdWx0cyhzZWxmLCB1bmV4cGVjdGVkX3Jlc3VsdHMp
OgotICAgICAgICAjIFR1cm4gYm90cyByZWQgZm9yIG1pc3NpbmcgcmVzdWx0cy4KLSAgICAgICAg
cmV0dXJuIHVuZXhwZWN0ZWRfcmVzdWx0c1snbnVtX3JlZ3Jlc3Npb25zJ10gKyB1bmV4cGVjdGVk
X3Jlc3VsdHNbJ251bV9taXNzaW5nJ10KLQotICAgIGRlZiBjb25maWd1cmF0aW9uX3NwZWNpZmll
cl9tYWNyb3Moc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLkNPTkZJR1VSQVRJT05fU1BFQ0lG
SUVSX01BQ1JPUwotCi0gICAgZGVmIGFsbF9iYXNlbGluZV92YXJpYW50cyhzZWxmKToKLSAgICAg
ICAgcmV0dXJuIHNlbGYuQUxMX0JBU0VMSU5FX1ZBUklBTlRTCi0KLSAgICBkZWYgX2dlbmVyYXRl
X2FsbF90ZXN0X2NvbmZpZ3VyYXRpb25zKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm5zIGEgc2Vx
dWVuY2Ugb2YgdGhlIFRlc3RDb25maWd1cmF0aW9ucyB0aGUgcG9ydCBzdXBwb3J0cy4iIiIKLSAg
ICAgICAgIyBCeSBkZWZhdWx0LCB3ZSBhc3N1bWUgd2Ugd2FudCB0byB0ZXN0IGV2ZXJ5IGdyYXBo
aWNzIHR5cGUgaW4KLSAgICAgICAgIyBldmVyeSBjb25maWd1cmF0aW9uIG9uIGV2ZXJ5IHN5c3Rl
bS4KLSAgICAgICAgdGVzdF9jb25maWd1cmF0aW9ucyA9IFtdCi0gICAgICAgIGZvciB2ZXJzaW9u
LCBhcmNoaXRlY3R1cmUgaW4gc2VsZi5BTExfU1lTVEVNUzoKLSAgICAgICAgICAgIGZvciBidWls
ZF90eXBlIGluIHNlbGYuQUxMX0JVSUxEX1RZUEVTOgotICAgICAgICAgICAgICAgIHRlc3RfY29u
ZmlndXJhdGlvbnMuYXBwZW5kKFRlc3RDb25maWd1cmF0aW9uKHZlcnNpb24sIGFyY2hpdGVjdHVy
ZSwgYnVpbGRfdHlwZSkpCi0gICAgICAgIHJldHVybiB0ZXN0X2NvbmZpZ3VyYXRpb25zCi0KLSAg
ICB0cnlfYnVpbGRlcl9uYW1lcyA9IGZyb3plbnNldChbCi0gICAgICAgICdsaW51eF9sYXlvdXQn
LAotICAgICAgICAnbWFjX2xheW91dCcsCi0gICAgICAgICd3aW5fbGF5b3V0JywKLSAgICAgICAg
J2xpbnV4X2xheW91dF9yZWwnLAotICAgICAgICAnbWFjX2xheW91dF9yZWwnLAotICAgICAgICAn
d2luX2xheW91dF9yZWwnLAotICAgIF0pCi0KLSAgICBkZWYgd2Fybl9pZl9idWdfbWlzc2luZ19p
bl90ZXN0X2V4cGVjdGF0aW9ucyhzZWxmKToKLSAgICAgICAgcmV0dXJuIFRydWUKLQotICAgIGRl
ZiBfcG9ydF9zcGVjaWZpY19leHBlY3RhdGlvbnNfZmlsZXMoc2VsZik6Ci0gICAgICAgIHBhdGhz
ID0gW3NlbGYucGF0aF90b190ZXN0X2V4cGVjdGF0aW9uc19maWxlKCldCi0gICAgICAgIHNraWFf
ZXhwZWN0YXRpb25zX3BhdGggPSBzZWxmLnBhdGhfZnJvbV9jaHJvbWl1bV9iYXNlKCdza2lhJywg
J3NraWFfdGVzdF9leHBlY3RhdGlvbnMudHh0JykKLSAgICAgICAgIyBGSVhNRTogd2Ugc2hvdWxk
IHByb2JhYmx5IHdhcm4gaWYgdGhpcyBmaWxlIGlzIG1pc3NpbmcgaW4gc29tZSBzaXR1YXRpb25z
LgotICAgICAgICAjIFNlZSB0aGUgZGlzY3Vzc2lvbiBpbiB3ZWJraXQub3JnL2IvOTc2OTkuCi0g
ICAgICAgIGlmIHNlbGYuX2ZpbGVzeXN0ZW0uZXhpc3RzKHNraWFfZXhwZWN0YXRpb25zX3BhdGgp
OgotICAgICAgICAgICAgcGF0aHMuYXBwZW5kKHNraWFfZXhwZWN0YXRpb25zX3BhdGgpCi0KLSAg
ICAgICAgYnVpbGRlcl9uYW1lID0gc2VsZi5nZXRfb3B0aW9uKCdidWlsZGVyX25hbWUnLCAnRFVN
TVlfQlVJTERFUl9OQU1FJykKLSAgICAgICAgaWYgYnVpbGRlcl9uYW1lID09ICdEVU1NWV9CVUlM
REVSX05BTUUnIG9yICcoZGVwcyknIGluIGJ1aWxkZXJfbmFtZSBvciBidWlsZGVyX25hbWUgaW4g
c2VsZi50cnlfYnVpbGRlcl9uYW1lczoKLSAgICAgICAgICAgIHBhdGhzLmFwcGVuZChzZWxmLnBh
dGhfZnJvbV9jaHJvbWl1bV9iYXNlKCd3ZWJraXQnLCAndG9vbHMnLCAnbGF5b3V0X3Rlc3RzJywg
J3Rlc3RfZXhwZWN0YXRpb25zLnR4dCcpKQotICAgICAgICByZXR1cm4gcGF0aHMKLQotICAgIGRl
ZiByZXBvc2l0b3J5X3BhdGhzKHNlbGYpOgotICAgICAgICByZXBvcyA9IHN1cGVyKENocm9taXVt
UG9ydCwgc2VsZikucmVwb3NpdG9yeV9wYXRocygpCi0gICAgICAgIHJlcG9zLmFwcGVuZCgoJ0No
cm9taXVtJywgc2VsZi5wYXRoX2Zyb21fY2hyb21pdW1fYmFzZSgnYnVpbGQnKSkpCi0gICAgICAg
IHJldHVybiByZXBvcwotCi0gICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwg
c3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4pOgotICAgICAgICBpZiBzdGRlcnIgYW5kICdBZGRy
ZXNzU2FuaXRpemVyJyBpbiBzdGRlcnI6Ci0gICAgICAgICAgICAjIFJ1bm5pbmcgdGhlIEFkZHJl
c3NTYW5pdGl6ZXIgdGFrZSBhIGxvdCBvZiBtZW1vcnksIHNvIHdlIG5lZWQgdG8KLSAgICAgICAg
ICAgICMgc2VyaWFsaXplIGFjY2VzcyB0byBpdCBhY3Jvc3MgYWxsIHRoZSBjb25jdXJyZW50bHkg
cnVubmluZyBkcml2ZXJzLgotICAgICAgICAgICAgbG9jayA9IEh0dHBMb2NrKGxvY2tfcGF0aD1O
b25lLCBsb2NrX2ZpbGVfcHJlZml4PSdXZWJLaXRBU0FOLmxvY2suJywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmaWxlc3lzdGVtPXNlbGYuX2ZpbGVzeXN0ZW0sIGV4ZWN1dGl2ZT1zZWxm
Ll9leGVjdXRpdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT0nQVNBTicpCi0g
ICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgbG9jay53YWl0X2Zvcl9odHRwZF9sb2Nr
KCkKLSAgICAgICAgICAgICAgICBhc2FuX2ZpbHRlcl9wYXRoID0gc2VsZi5wYXRoX2Zyb21fY2hy
b21pdW1fYmFzZSgndG9vbHMnLCAndmFsZ3JpbmQnLCAnYXNhbicsICdhc2FuX3N5bWJvbGl6ZS5w
eScpCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5fZmlsZXN5c3RlbS5leGlzdHMoYXNhbl9maWx0
ZXJfcGF0aCk6Ci0gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IHNlbGYuX2V4ZWN1dGl2ZS5y
dW5fY29tbWFuZChbYXNhbl9maWx0ZXJfcGF0aF0sIGlucHV0PXN0ZGVyciwgZGVjb2RlX291dHB1
dD1GYWxzZSkKLSAgICAgICAgICAgICAgICAgICAgc3RkZXJyID0gc2VsZi5fZXhlY3V0aXZlLnJ1
bl9jb21tYW5kKFsnYysrZmlsdCddLCBpbnB1dD1vdXRwdXQsIGRlY29kZV9vdXRwdXQ9RmFsc2Up
Ci0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIGxvY2suY2xlYW51cF9odHRw
X2xvY2soKQotCi0gICAgICAgIHJldHVybiBzdXBlcihDaHJvbWl1bVBvcnQsIHNlbGYpLl9nZXRf
Y3Jhc2hfbG9nKG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4pCi0KLSAgICBk
ZWYgdmlydHVhbF90ZXN0X3N1aXRlcyhzZWxmKToKLSAgICAgICAgcmV0dXJuIFsKLSAgICAgICAg
ICAgIFZpcnR1YWxUZXN0U3VpdGUoJ3BsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZ3B1L2Zhc3Qv
Y2FudmFzJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Zhc3QvY2FudmFzJywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgWyctLWVuYWJsZS1hY2NlbGVyYXRlZC0yZC1jYW52
YXMnXSksCi0gICAgICAgICAgICBWaXJ0dWFsVGVzdFN1aXRlKCdwbGF0Zm9ybS9jaHJvbWl1bS92
aXJ0dWFsL2dwdS9jYW52YXMvcGhpbGlwJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
J2NhbnZhcy9waGlsaXAnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJy0tZW5hYmxl
LWFjY2VsZXJhdGVkLTJkLWNhbnZhcyddKSwKLSAgICAgICAgICAgIFZpcnR1YWxUZXN0U3VpdGUo
J3BsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvdGhyZWFkZWQvY29tcG9zaXRpbmcvdmlzaWJpbGl0
eScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb21wb3NpdGluZy92aXNpYmlsaXR5
JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyctLWVuYWJsZS10aHJlYWRlZC1jb21w
b3NpdGluZyddKSwKLSAgICAgICAgICAgIFZpcnR1YWxUZXN0U3VpdGUoJ3BsYXRmb3JtL2Nocm9t
aXVtL3ZpcnR1YWwvdGhyZWFkZWQvY29tcG9zaXRpbmcvd2ViZ2wnLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnY29tcG9zaXRpbmcvd2ViZ2wnLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBbJy0tZW5hYmxlLXRocmVhZGVkLWNvbXBvc2l0aW5nJ10pLAotICAgICAgICAgICAg
VmlydHVhbFRlc3RTdWl0ZSgncGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9ncHUvZmFzdC9oaWRw
aScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmYXN0L2hpZHBpJywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgWyctLWZvcmNlLWNvbXBvc2l0aW5nLW1vZGUnXSksCi0gICAg
ICAgICAgICBWaXJ0dWFsVGVzdFN1aXRlKCdwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL3NvZnR3
YXJlY29tcG9zaXRpbmcnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29tcG9zaXRp
bmcnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJy0tZW5hYmxlLXNvZnR3YXJlLWNv
bXBvc2l0aW5nJ10pLAotICAgICAgICAgICAgVmlydHVhbFRlc3RTdWl0ZSgncGxhdGZvcm0vY2hy
b21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcycsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICdmYXN0L2ltYWdlcycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsn
LS1lbmFibGUtZGVmZXJyZWQtaW1hZ2UtZGVjb2RpbmcnLCAnLS1lbmFibGUtcGVyLXRpbGUtcGFp
bnRpbmcnLCAnLS1mb3JjZS1jb21wb3NpdGluZy1tb2RlJ10pLAotICAgICAgICAgICAgVmlydHVh
bFRlc3RTdWl0ZSgncGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9ncHUvY29tcG9zaXRlZHNjcm9s
bGluZy9vdmVyZmxvdycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb21wb3NpdGlu
Zy9vdmVyZmxvdycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnLS1lbmFibGUtYWNj
ZWxlcmF0ZWQtb3ZlcmZsb3ctc2Nyb2xsJ10pLAotICAgICAgICAgICAgVmlydHVhbFRlc3RTdWl0
ZSgncGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9ncHUvY29tcG9zaXRlZHNjcm9sbGluZy9zY3Jv
bGxiYXJzJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Njcm9sbGJhcnMnLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBbJy0tZW5hYmxlLWFjY2VsZXJhdGVkLW92ZXJmbG93
LXNjcm9sbCddKSwKLSAgICAgICAgXQotCi0gICAgIwotICAgICMgUFJPVEVDVEVEIE1FVEhPRFMK
LSAgICAjCi0gICAgIyBUaGVzZSByb3V0aW5lcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkgb3Ro
ZXIgbWV0aG9kcyBpbiB0aGlzIGZpbGUKLSAgICAjIG9yIGFueSBzdWJjbGFzc2VzLgotICAgICMK
LQotICAgIGRlZiBfYnVpbGRfcGF0aChzZWxmLCAqY29tcHMpOgotICAgICAgICByZXR1cm4gc2Vs
Zi5fYnVpbGRfcGF0aF93aXRoX2NvbmZpZ3VyYXRpb24oTm9uZSwgKmNvbXBzKQotCi0gICAgZGVm
IF9idWlsZF9wYXRoX3dpdGhfY29uZmlndXJhdGlvbihzZWxmLCBjb25maWd1cmF0aW9uLCAqY29t
cHMpOgotICAgICAgICAjIE5vdGUgdGhhdCB3ZSBkb24ndCBpbXBsZW1lbnQgLS1yb290IG9yIGRv
IHRoZSBvcHRpb24gY2FjaGluZyB0aGF0IHRoZQotICAgICAgICAjIGJhc2UgY2xhc3MgZG9lcywg
YmVjYXVzZSBjaHJvbWl1bSBkb2Vzbid0IHVzZSAnd2Via2l0LWJ1aWxkLWRpcmVjdG9yeScgYW5k
Ci0gICAgICAgICMgaGVuY2UgZmluZGluZyB0aGUgcmlnaHQgZGlyZWN0b3J5IGlzIHJlbGF0aXZl
bHkgZmFzdC4KLSAgICAgICAgY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb24gb3Igc2VsZi5n
ZXRfb3B0aW9uKCdjb25maWd1cmF0aW9uJykKLSAgICAgICAgcmV0dXJuIHNlbGYuX3N0YXRpY19i
dWlsZF9wYXRoKHNlbGYuX2ZpbGVzeXN0ZW0sIHNlbGYuZ2V0X29wdGlvbignYnVpbGRfZGlyZWN0
b3J5JyksCi0gICAgICAgICAgICBzZWxmLnBhdGhfZnJvbV9jaHJvbWl1bV9iYXNlKCksIHNlbGYu
cGF0aF9mcm9tX3dlYmtpdF9iYXNlKCksIGNvbmZpZ3VyYXRpb24sIGNvbXBzKQotCi0gICAgZGVm
IF9wYXRoX3RvX2ltYWdlX2RpZmYoc2VsZik6Ci0gICAgICAgIGJpbmFyeV9uYW1lID0gJ0ltYWdl
RGlmZicKLSAgICAgICAgcmV0dXJuIHNlbGYuX2J1aWxkX3BhdGgoYmluYXJ5X25hbWUpCi0KLSAg
ICBkZWYgX2NoZWNrX2RyaXZlcl9idWlsZF91cF90b19kYXRlKHNlbGYsIGNvbmZpZ3VyYXRpb24p
OgotICAgICAgICBpZiBjb25maWd1cmF0aW9uIGluICgnRGVidWcnLCAnUmVsZWFzZScpOgotICAg
ICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGRlYnVnX3BhdGggPSBzZWxmLl9wYXRoX3Rv
X2RyaXZlcignRGVidWcnKQotICAgICAgICAgICAgICAgIHJlbGVhc2VfcGF0aCA9IHNlbGYuX3Bh
dGhfdG9fZHJpdmVyKCdSZWxlYXNlJykKLQotICAgICAgICAgICAgICAgIGRlYnVnX210aW1lID0g
c2VsZi5fZmlsZXN5c3RlbS5tdGltZShkZWJ1Z19wYXRoKQotICAgICAgICAgICAgICAgIHJlbGVh
c2VfbXRpbWUgPSBzZWxmLl9maWxlc3lzdGVtLm10aW1lKHJlbGVhc2VfcGF0aCkKLQotICAgICAg
ICAgICAgICAgIGlmIChkZWJ1Z19tdGltZSA+IHJlbGVhc2VfbXRpbWUgYW5kIGNvbmZpZ3VyYXRp
b24gPT0gJ1JlbGVhc2UnIG9yCi0gICAgICAgICAgICAgICAgICAgIHJlbGVhc2VfbXRpbWUgPiBk
ZWJ1Z19tdGltZSBhbmQgY29uZmlndXJhdGlvbiA9PSAnRGVidWcnKToKLSAgICAgICAgICAgICAg
ICAgICAgbW9zdF9yZWNlbnRfYmluYXJ5ID0gJ1JlbGVhc2UnIGlmIGNvbmZpZ3VyYXRpb24gPT0g
J0RlYnVnJyBlbHNlICdEZWJ1ZycKLSAgICAgICAgICAgICAgICAgICAgX2xvZy53YXJuaW5nKCdZ
b3UgYXJlIHJ1bm5pbmcgdGhlICVzIGJpbmFyeS4gSG93ZXZlciB0aGUgJXMgYmluYXJ5IGFwcGVh
cnMgdG8gYmUgbW9yZSByZWNlbnQuICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICdQbGVhc2UgcGFzcyAtLSVzLicsIGNvbmZpZ3VyYXRpb24sIG1vc3RfcmVjZW50X2JpbmFyeSwg
bW9zdF9yZWNlbnRfYmluYXJ5Lmxvd2VyKCkpCi0gICAgICAgICAgICAgICAgICAgIF9sb2cud2Fy
bmluZygnJykKLSAgICAgICAgICAgICMgVGhpcyB3aWxsIGZhaWwgaWYgd2UgZG9uJ3QgaGF2ZSBi
b3RoIGEgZGVidWcgYW5kIHJlbGVhc2UgYmluYXJ5LgotICAgICAgICAgICAgIyBUaGF0J3MgZmlu
ZSBiZWNhdXNlLCBpbiB0aGlzIGNhc2UsIHdlIG11c3QgYWxyZWFkeSBiZSBydW5uaW5nIHRoZQot
ICAgICAgICAgICAgIyBtb3N0IHVwLXRvLWRhdGUgb25lLgotICAgICAgICAgICAgZXhjZXB0IE9T
RXJyb3I6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAg
ZGVmIF9jaHJvbWl1bV9iYXNlbGluZV9wYXRoKHNlbGYsIHBsYXRmb3JtKToKLSAgICAgICAgaWYg
cGxhdGZvcm0gaXMgTm9uZToKLSAgICAgICAgICAgIHBsYXRmb3JtID0gc2VsZi5uYW1lKCkKLSAg
ICAgICAgcmV0dXJuIHNlbGYucGF0aF9mcm9tX3dlYmtpdF9iYXNlKCdMYXlvdXRUZXN0cycsICdw
bGF0Zm9ybScsIHBsYXRmb3JtKQotCi0gICAgZGVmIF9jb252ZXJ0X3BhdGgoc2VsZiwgcGF0aCk6
Ci0gICAgICAgICIiIkhhbmRsZXMgZmlsZW5hbWUgY29udmVyc2lvbiBmb3Igc3VicHJvY2VzcyBj
b21tYW5kIGxpbmUgYXJncy4iIiIKLSAgICAgICAgIyBTZWUgbm90ZSBhYm92ZSBpbiBkaWZmX2lt
YWdlKCkgZm9yIHdoeSB3ZSBuZWVkIHRoaXMuCi0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAn
Y3lnd2luJzoKLSAgICAgICAgICAgIHJldHVybiBjeWdwYXRoKHBhdGgpCi0gICAgICAgIHJldHVy
biBwYXRoCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L2Nocm9taXVtX2FuZHJvaWQucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJvaWQucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGIwOTU0NjM4ZGI3NzZhYjY4YzllMDc3NzE4MWRjYWE5ZjAyOThiZDQuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9hbmRyb2lkLnB5CisrKyAvZGV2L251bGwKQEAg
LTEsOTM0ICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMK
LSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot
IyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
IyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1pbXBvcnQgY29weQotaW1wb3J0IGxv
Z2dpbmcKLWltcG9ydCBvcwotaW1wb3J0IHJlCi1pbXBvcnQgc3lzCi1pbXBvcnQgc3VicHJvY2Vz
cwotaW1wb3J0IHRocmVhZGluZwotaW1wb3J0IHRpbWUKLQotZnJvbSB3ZWJraXRweS5sYXlvdXRf
dGVzdHMucG9ydCBpbXBvcnQgY2hyb21pdW0KLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBv
cnQgaW1wb3J0IGRyaXZlcgotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQg
ZmFjdG9yeQotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgc2VydmVyX3By
b2Nlc3MKLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5wcm9maWxlciBpbXBvcnQgU2luZ2xl
RmlsZU91dHB1dFByb2ZpbGVyCi0KLV9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykK
LQotIyBUaGUgcm9vdCBkaXJlY3RvcnkgZm9yIHRlc3QgcmVzb3VyY2VzLCB3aGljaCBoYXMgdGhl
IHNhbWUgc3RydWN0dXJlIGFzIHRoZQotIyBzb3VyY2Ugcm9vdCBkaXJlY3Rvcnkgb2YgQ2hyb21p
dW0uCi0jIFRoaXMgcGF0aCBpcyBkZWZpbmVkIGluIENocm9taXVtJ3MgYmFzZS90ZXN0L3Rlc3Rf
c3VwcG9ydF9hbmRyb2lkLmNjLgotREVWSUNFX1NPVVJDRV9ST09UX0RJUiA9ICcvZGF0YS9sb2Nh
bC90bXAvJwotQ09NTUFORF9MSU5FX0ZJTEUgPSBERVZJQ0VfU09VUkNFX1JPT1RfRElSICsgJ2No
cm9tZS1uYXRpdmUtdGVzdHMtY29tbWFuZC1saW5lJwotCi0jIFRoZSBkaXJlY3RvcnkgdG8gcHV0
IHRvb2xzIGFuZCByZXNvdXJjZXMgb2YgRHVtcFJlbmRlclRyZWUuCi0jIElmIGNoYW5nZSB0aGlz
LCBtdXN0IGFsc28gY2hhbmdlIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVs
bEFuZHJvaWQuY3BwCi0jIGFuZCBDaHJvbWl1bSdzIHdlYmtpdC9zdXBwb3J0L3BsYXRmb3JtX3N1
cHBvcnRfYW5kcm9pZC5jYy4KLURFVklDRV9EUlRfRElSID0gREVWSUNFX1NPVVJDRV9ST09UX0RJ
UiArICdkcnQvJwotREVWSUNFX0ZPUldBUkRFUl9QQVRIID0gREVWSUNFX0RSVF9ESVIgKyAnZm9y
d2FyZGVyJwotCi0jIFBhdGggb24gdGhlIGRldmljZSB3aGVyZSB0aGUgdGVzdCBmcmFtZXdvcmsg
d2lsbCBjcmVhdGUgdGhlIGZpZm8gcGlwZXMuCi1ERVZJQ0VfRklGT19QQVRIID0gJy9kYXRhL2Rh
dGEvb3JnLmNocm9taXVtLm5hdGl2ZV90ZXN0L2ZpbGVzLycKLQotRFJUX0FQUF9QQUNLQUdFID0g
J29yZy5jaHJvbWl1bS5uYXRpdmVfdGVzdCcKLURSVF9BQ1RJVklUWV9GVUxMX05BTUUgPSBEUlRf
QVBQX1BBQ0tBR0UgKyAnLy5DaHJvbWVOYXRpdmVUZXN0QWN0aXZpdHknCi1EUlRfQVBQX0NBQ0hF
X0RJUiA9IERFVklDRV9EUlRfRElSICsgJ2NhY2hlLycKLURSVF9MSUJSQVJZX05BTUUgPSAnbGli
RHVtcFJlbmRlclRyZWUuc28nCi0KLVNDQUxJTkdfR09WRVJOT1JTX1BBVFRFUk4gPSAiL3N5cy9k
ZXZpY2VzL3N5c3RlbS9jcHUvY3B1Ki9jcHVmcmVxL3NjYWxpbmdfZ292ZXJub3IiCi1LUFRSX1JF
U1RSSUNUX1BBVEggPSAiL3Byb2Mvc3lzL2tlcm5lbC9rcHRyX3Jlc3RyaWN0IgotCi0jIEFsbCB0
aGUgdGVzdCBjYXNlcyBhcmUgc3RpbGwgc2VydmVkIHRvIER1bXBSZW5kZXJUcmVlIHRocm91Z2gg
ZmlsZSBwcm90b2NvbCwKLSMgYnV0IHdlIHVzZSBhIGZpbGUtdG8taHR0cCBmZWF0dXJlIHRvIGJy
aWRnZSB0aGUgZmlsZSByZXF1ZXN0IHRvIGhvc3QncyBodHRwCi0jIHNlcnZlciB0byBnZXQgdGhl
IHJlYWwgdGVzdCBmaWxlcyBhbmQgY29ycmVzcG9uZGluZyByZXNvdXJjZXMuCi0jIFNlZSB3ZWJr
aXQvc3VwcG9ydC9wbGF0Zm9ybV9zdXBwb3J0X2FuZHJvaWQuY2MgZm9yIHRoZSBvdGhlciBzaWRl
IG9mIHRoaXMgYnJpZGdlLgotUEVSRl9URVNUX1BBVEhfUFJFRklYID0gJy9hbGwtcGVyZi10ZXN0
cycKLUxBWU9VVF9URVNUX1BBVEhfUFJFRklYID0gJy9hbGwtdGVzdHMnCi0KLSMgQWxsIHBvcnRz
IHRoZSBBbmRyb2lkIGZvcndhcmRlciB0byBmb3J3YXJkLgotIyA4MDAwLCA4MDgwIGFuZCA4NDQz
IGFyZSBmb3IgaHR0cC9odHRwcyB0ZXN0cy4KLSMgODg4MCBhbmQgOTMyMyBhcmUgZm9yIHdlYnNv
Y2tldCB0ZXN0cwotIyAoc2VlIGh0dHBfc2VydmVyLnB5LCBhcGFjaGVfaHR0cF9zZXJ2ZXIucHkg
YW5kIHdlYnNvY2tldF9zZXJ2ZXIucHkpLgotRk9SV0FSRF9QT1JUUyA9ICc4MDAwIDgwODAgODQ0
MyA4ODgwIDkzMjMnCi0KLU1TX1RSVUVUWVBFX0ZPTlRTX0RJUiA9ICcvdXNyL3NoYXJlL2ZvbnRz
L3RydWV0eXBlL21zdHRjb3JlZm9udHMvJwotTVNfVFJVRVRZUEVfRk9OVFNfUEFDS0FHRSA9ICd0
dGYtbXNjb3JlZm9udHMtaW5zdGFsbGVyJwotCi0jIFRpbWVvdXQgaW4gc2Vjb25kcyB0byB3YWl0
IGZvciBzdGFydC9zdG9wIG9mIER1bXBSZW5kZXJUcmVlLgotRFJUX1NUQVJUX1NUT1BfVElNRU9V
VF9TRUNTID0gMTAKLQotIyBMaXN0IG9mIGZvbnRzIHRoYXQgbGF5b3V0IHRlc3RzIGV4cGVjdCwg
Y29waWVkIGZyb20gRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsWDExLmNwcC4KLUhP
U1RfRk9OVF9GSUxFUyA9IFsKLSAgICBbW01TX1RSVUVUWVBFX0ZPTlRTX0RJUl0sICdBcmlhbC50
dGYnLCBNU19UUlVFVFlQRV9GT05UU19QQUNLQUdFXSwKLSAgICBbW01TX1RSVUVUWVBFX0ZPTlRT
X0RJUl0sICdBcmlhbF9Cb2xkLnR0ZicsIE1TX1RSVUVUWVBFX0ZPTlRTX1BBQ0tBR0VdLAotICAg
IFtbTVNfVFJVRVRZUEVfRk9OVFNfRElSXSwgJ0FyaWFsX0JvbGRfSXRhbGljLnR0ZicsIE1TX1RS
VUVUWVBFX0ZPTlRTX1BBQ0tBR0VdLAotICAgIFtbTVNfVFJVRVRZUEVfRk9OVFNfRElSXSwgJ0Fy
aWFsX0l0YWxpYy50dGYnLCBNU19UUlVFVFlQRV9GT05UU19QQUNLQUdFXSwKLSAgICBbW01TX1RS
VUVUWVBFX0ZPTlRTX0RJUl0sICdDb21pY19TYW5zX01TLnR0ZicsIE1TX1RSVUVUWVBFX0ZPTlRT
X1BBQ0tBR0VdLAotICAgIFtbTVNfVFJVRVRZUEVfRk9OVFNfRElSXSwgJ0NvbWljX1NhbnNfTVNf
Qm9sZC50dGYnLCBNU19UUlVFVFlQRV9GT05UU19QQUNLQUdFXSwKLSAgICBbW01TX1RSVUVUWVBF
X0ZPTlRTX0RJUl0sICdDb3VyaWVyX05ldy50dGYnLCBNU19UUlVFVFlQRV9GT05UU19QQUNLQUdF
XSwKLSAgICBbW01TX1RSVUVUWVBFX0ZPTlRTX0RJUl0sICdDb3VyaWVyX05ld19Cb2xkLnR0Zics
IE1TX1RSVUVUWVBFX0ZPTlRTX1BBQ0tBR0VdLAotICAgIFtbTVNfVFJVRVRZUEVfRk9OVFNfRElS
XSwgJ0NvdXJpZXJfTmV3X0JvbGRfSXRhbGljLnR0ZicsIE1TX1RSVUVUWVBFX0ZPTlRTX1BBQ0tB
R0VdLAotICAgIFtbTVNfVFJVRVRZUEVfRk9OVFNfRElSXSwgJ0NvdXJpZXJfTmV3X0l0YWxpYy50
dGYnLCBNU19UUlVFVFlQRV9GT05UU19QQUNLQUdFXSwKLSAgICBbW01TX1RSVUVUWVBFX0ZPTlRT
X0RJUl0sICdHZW9yZ2lhLnR0ZicsIE1TX1RSVUVUWVBFX0ZPTlRTX1BBQ0tBR0VdLAotICAgIFtb
TVNfVFJVRVRZUEVfRk9OVFNfRElSXSwgJ0dlb3JnaWFfQm9sZC50dGYnLCBNU19UUlVFVFlQRV9G
T05UU19QQUNLQUdFXSwKLSAgICBbW01TX1RSVUVUWVBFX0ZPTlRTX0RJUl0sICdHZW9yZ2lhX0Jv
bGRfSXRhbGljLnR0ZicsIE1TX1RSVUVUWVBFX0ZPTlRTX1BBQ0tBR0VdLAotICAgIFtbTVNfVFJV
RVRZUEVfRk9OVFNfRElSXSwgJ0dlb3JnaWFfSXRhbGljLnR0ZicsIE1TX1RSVUVUWVBFX0ZPTlRT
X1BBQ0tBR0VdLAotICAgIFtbTVNfVFJVRVRZUEVfRk9OVFNfRElSXSwgJ0ltcGFjdC50dGYnLCBN
U19UUlVFVFlQRV9GT05UU19QQUNLQUdFXSwKLSAgICBbW01TX1RSVUVUWVBFX0ZPTlRTX0RJUl0s
ICdUcmVidWNoZXRfTVMudHRmJywgTVNfVFJVRVRZUEVfRk9OVFNfUEFDS0FHRV0sCi0gICAgW1tN
U19UUlVFVFlQRV9GT05UU19ESVJdLCAnVHJlYnVjaGV0X01TX0JvbGQudHRmJywgTVNfVFJVRVRZ
UEVfRk9OVFNfUEFDS0FHRV0sCi0gICAgW1tNU19UUlVFVFlQRV9GT05UU19ESVJdLCAnVHJlYnVj
aGV0X01TX0JvbGRfSXRhbGljLnR0ZicsIE1TX1RSVUVUWVBFX0ZPTlRTX1BBQ0tBR0VdLAotICAg
IFtbTVNfVFJVRVRZUEVfRk9OVFNfRElSXSwgJ1RyZWJ1Y2hldF9NU19JdGFsaWMudHRmJywgTVNf
VFJVRVRZUEVfRk9OVFNfUEFDS0FHRV0sCi0gICAgW1tNU19UUlVFVFlQRV9GT05UU19ESVJdLCAn
VGltZXNfTmV3X1JvbWFuLnR0ZicsIE1TX1RSVUVUWVBFX0ZPTlRTX1BBQ0tBR0VdLAotICAgIFtb
TVNfVFJVRVRZUEVfRk9OVFNfRElSXSwgJ1RpbWVzX05ld19Sb21hbl9Cb2xkLnR0ZicsIE1TX1RS
VUVUWVBFX0ZPTlRTX1BBQ0tBR0VdLAotICAgIFtbTVNfVFJVRVRZUEVfRk9OVFNfRElSXSwgJ1Rp
bWVzX05ld19Sb21hbl9Cb2xkX0l0YWxpYy50dGYnLCBNU19UUlVFVFlQRV9GT05UU19QQUNLQUdF
XSwKLSAgICBbW01TX1RSVUVUWVBFX0ZPTlRTX0RJUl0sICdUaW1lc19OZXdfUm9tYW5fSXRhbGlj
LnR0ZicsIE1TX1RSVUVUWVBFX0ZPTlRTX1BBQ0tBR0VdLAotICAgIFtbTVNfVFJVRVRZUEVfRk9O
VFNfRElSXSwgJ1ZlcmRhbmEudHRmJywgTVNfVFJVRVRZUEVfRk9OVFNfUEFDS0FHRV0sCi0gICAg
W1tNU19UUlVFVFlQRV9GT05UU19ESVJdLCAnVmVyZGFuYV9Cb2xkLnR0ZicsIE1TX1RSVUVUWVBF
X0ZPTlRTX1BBQ0tBR0VdLAotICAgIFtbTVNfVFJVRVRZUEVfRk9OVFNfRElSXSwgJ1ZlcmRhbmFf
Qm9sZF9JdGFsaWMudHRmJywgTVNfVFJVRVRZUEVfRk9OVFNfUEFDS0FHRV0sCi0gICAgW1tNU19U
UlVFVFlQRV9GT05UU19ESVJdLCAnVmVyZGFuYV9JdGFsaWMudHRmJywgTVNfVFJVRVRZUEVfRk9O
VFNfUEFDS0FHRV0sCi0gICAgIyBUaGUgTWljcm9zb2Z0IGZvbnQgRVVMQQotICAgIFtbJy91c3Iv
c2hhcmUvZG9jL3R0Zi1tc2NvcmVmb250cy1pbnN0YWxsZXIvJ10sICdSRUFEX01FIS5neicsIE1T
X1RSVUVUWVBFX0ZPTlRTX1BBQ0tBR0VdLAotICAgICMgT3RoZXIgZm9udHM6IEFyYWJpYywgQ0pL
LCBJbmRpYywgVGhhaSwgZXRjLgotICAgIFtbJy91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvdHRm
LWRlamF2dS8nXSwgJ0RlamFWdVNhbnMudHRmJywgJ3R0Zi1kZWphdnUnXSwKLSAgICBbWycvdXNy
L3NoYXJlL2ZvbnRzL3RydWV0eXBlL2tvY2hpLyddLCAna29jaGktbWluY2hvLnR0ZicsICd0dGYt
a29jaGktbWluY2hvJ10sCi0gICAgW1snL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS90dGYtaW5k
aWMtZm9udHMtY29yZS8nXSwgJ2xvaGl0X2hpLnR0ZicsICd0dGYtaW5kaWMtZm9udHMtY29yZSdd
LAotICAgIFtbJy91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvdHRmLWluZGljLWZvbnRzLWNvcmUv
J10sICdsb2hpdF90YS50dGYnLCAndHRmLWluZGljLWZvbnRzLWNvcmUnXSwKLSAgICBbWycvdXNy
L3NoYXJlL2ZvbnRzL3RydWV0eXBlL3R0Zi1pbmRpYy1mb250cy1jb3JlLyddLCAnTXVrdGlOYXJy
b3cudHRmJywgJ3R0Zi1pbmRpYy1mb250cy1jb3JlJ10sCi0gICAgW1snL3Vzci9zaGFyZS9mb250
cy90cnVldHlwZS90aGFpLycsICcvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL3Rsd2cvJ10sICdH
YXJ1ZGEudHRmJywgJ2ZvbnRzLXRsd2ctZ2FydWRhJ10sCi0gICAgW1snL3Vzci9zaGFyZS9mb250
cy90cnVldHlwZS90dGYtaW5kaWMtZm9udHMtY29yZS8nLCAnL3Vzci9zaGFyZS9mb250cy90cnVl
dHlwZS90dGYtcHVuamFiaS1mb250cy8nXSwgJ2xvaGl0X3BhLnR0ZicsICd0dGYtaW5kaWMtZm9u
dHMtY29yZSddLAotXQotCi1ERVZJQ0VfRk9OVFNfRElSID0gREVWSUNFX0RSVF9ESVIgKyAnZm9u
dHMvJwotCi0jIFRoZSBsYXlvdXQgdGVzdHMgZGlyZWN0b3J5IG9uIGRldmljZSwgd2hpY2ggaGFz
IHR3byB1c2FnZXM6Ci0jIDEuIGFzIGEgdmlydHVhbCBwYXRoIGluIGZpbGUgdXJscyB0aGF0IHdp
bGwgYmUgYnJpZGdlZCB0byBIVFRQLgotIyAyLiBwb2ludGluZyB0byBzb21lIGZpbGVzIHRoYXQg
YXJlIHB1c2hlZCB0byB0aGUgZGV2aWNlIGZvciB0ZXN0cyB0aGF0Ci0jIGRvbid0IHdvcmsgb24g
ZmlsZS1vdmVyLWh0dHAgKGUuZy4gYmxvYiBwcm90b2NvbCB0ZXN0cykuCi1ERVZJQ0VfV0VCS0lU
X0JBU0VfRElSID0gREVWSUNFX1NPVVJDRV9ST09UX0RJUiArICd0aGlyZF9wYXJ0eS9XZWJLaXQv
JwotREVWSUNFX0xBWU9VVF9URVNUU19ESVIgPSBERVZJQ0VfV0VCS0lUX0JBU0VfRElSICsgJ0xh
eW91dFRlc3RzLycKLQotIyBUZXN0IHJlc291cmNlcyB0aGF0IG5lZWQgdG8gYmUgYWNjZXNzZWQg
YXMgZmlsZXMgZGlyZWN0bHkuCi0jIEVhY2ggaXRlbSBjYW4gYmUgdGhlIHJlbGF0aXZlIHBhdGgg
b2YgYSBkaXJlY3Rvcnkgb3IgYSBmaWxlLgotVEVTVF9SRVNPVVJDRVNfVE9fUFVTSCA9IFsKLSAg
ICAjIEJsb2IgdGVzdHMgbmVlZCB0byBhY2Nlc3MgZmlsZXMgZGlyZWN0bHkuCi0gICAgJ2VkaXRp
bmcvcGFzdGVib2FyZC9yZXNvdXJjZXMnLAotICAgICdmYXN0L2ZpbGVzL3Jlc291cmNlcycsCi0g
ICAgJ2h0dHAvdGVzdHMvbG9jYWwvcmVzb3VyY2VzJywKLSAgICAnaHR0cC90ZXN0cy9sb2NhbC9m
b3JtZGF0YS9yZXNvdXJjZXMnLAotICAgICMgVXNlciBzdHlsZSBVUkxzIGFyZSBhY2Nlc3NlZCBh
cyBsb2NhbCBmaWxlcyBpbiB3ZWJraXRfc3VwcG9ydC4KLSAgICAnaHR0cC90ZXN0cy9zZWN1cml0
eS9yZXNvdXJjZXMvY3NzU3R5bGUuY3NzJywKLSAgICAjIE1lZGlhIHRlc3RzIG5lZWQgdG8gYWNj
ZXNzIGF1ZGlvL3ZpZGVvIGFzIGZpbGVzLgotICAgICdtZWRpYS9jb250ZW50JywKLSAgICAnY29t
cG9zaXRpbmcvcmVzb3VyY2VzL3ZpZGVvLm1wNCcsCi1dCi0KLSMgTGlzdCBvZiB0ZXN0IHJlc291
cmNlcyBmcm9tIHdlYmtpdCBwbGF0Zm9ybS4gVGhlc2UgcmVzb3VyY2VzIHdpbGwgYmUgY29waWVk
IHRvIHRoZSBleHRlcm5hbCBzdG9yYWdlLgotV0VCS0lUX1BMQVRGT1JNX1JFU09VUkNFU19UT19Q
VVNIID0gWwotICAgICd0aGlyZF9wYXJ0eS9oeXBoZW4vaHlwaF9lbl9VUy5kaWMnLAotXQotCi1N
RDVTVU1fREVWSUNFX0ZJTEVfTkFNRSA9ICdtZDVzdW1fYmluJwotTUQ1U1VNX0RFVklDRV9QQVRI
ID0gJy9kYXRhL2xvY2FsL3RtcC8nICsgTUQ1U1VNX0RFVklDRV9GSUxFX05BTUUKLQotY2xhc3Mg
Q2hyb21pdW1BbmRyb2lkUG9ydChjaHJvbWl1bS5DaHJvbWl1bVBvcnQpOgotICAgIHBvcnRfbmFt
ZSA9ICdjaHJvbWl1bS1hbmRyb2lkJwotCi0gICAgIyBBdm9pZCBpbml0aWFsaXppbmcgdGhlIGFk
YiBwYXRoIFt3b3JrZXIgY291bnRdKzEgdGltZXMgYnkgc3RvcmluZyBpdCBhcyBhIHN0YXRpYyBt
ZW1iZXIuCi0gICAgX2FkYl9wYXRoID0gTm9uZQotCi0gICAgRkFMTEJBQ0tfUEFUSFMgPSBbCi0g
ICAgICAgICdjaHJvbWl1bS1hbmRyb2lkJywKLSAgICAgICAgJ2Nocm9taXVtLWxpbnV4JywKLSAg
ICAgICAgJ2Nocm9taXVtLXdpbicsCi0gICAgICAgICdjaHJvbWl1bScsCi0gICAgXQotCi0gICAg
ZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnRfbmFtZSwgKiprd2FyZ3MpOgotICAgICAgICBz
dXBlcihDaHJvbWl1bUFuZHJvaWRQb3J0LCBzZWxmKS5fX2luaXRfXyhob3N0LCBwb3J0X25hbWUs
ICoqa3dhcmdzKQotCi0gICAgICAgIHNlbGYuX29wZXJhdGluZ19zeXN0ZW0gPSAnYW5kcm9pZCcK
LSAgICAgICAgc2VsZi5fdmVyc2lvbiA9ICdpY2VjcmVhbXNhbmR3aWNoJwotCi0gICAgICAgIHNl
bGYuX2hvc3RfcG9ydCA9IGZhY3RvcnkuUG9ydEZhY3RvcnkoaG9zdCkuZ2V0KCdjaHJvbWl1bScs
ICoqa3dhcmdzKQotICAgICAgICBzZWxmLl9zZXJ2ZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciA9IHNl
bGYuX2FuZHJvaWRfc2VydmVyX3Byb2Nlc3NfY29uc3RydWN0b3IKLQotICAgICAgICBpZiBoYXNh
dHRyKHNlbGYuX29wdGlvbnMsICdhZGJfZGV2aWNlJyk6Ci0gICAgICAgICAgICBzZWxmLl9kZXZp
Y2VzID0gc2VsZi5fb3B0aW9ucy5hZGJfZGV2aWNlCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAg
ICBzZWxmLl9kZXZpY2VzID0gW10KLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgX2FuZHJv
aWRfc2VydmVyX3Byb2Nlc3NfY29uc3RydWN0b3IocG9ydCwgc2VydmVyX25hbWUsIGNtZF9saW5l
LCBlbnY9Tm9uZSk6Ci0gICAgICAgIHJldHVybiBzZXJ2ZXJfcHJvY2Vzcy5TZXJ2ZXJQcm9jZXNz
KHBvcnQsIHNlcnZlcl9uYW1lLCBjbWRfbGluZSwgZW52LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bml2ZXJzYWxfbmV3bGluZXM9VHJ1ZSwgdHJlYXRfbm9f
ZGF0YV9hc19jcmFzaD1UcnVlKQotCi0gICAgZGVmIGFkZGl0aW9uYWxfZHJ0X2ZsYWcoc2VsZik6
Ci0gICAgICAgICMgVGhlIENocm9taXVtIHBvcnQgZm9yIEFuZHJvaWQgYWx3YXlzIHVzZXMgdGhl
IGhhcmR3YXJlIEdQVSBwYXRoLgotICAgICAgICByZXR1cm4gWyctLWVuY29kZS1iaW5hcnknLCAn
LS1lbmFibGUtaGFyZHdhcmUtZ3B1JywKLSAgICAgICAgICAgICAgICAnLS1mb3JjZS1jb21wb3Np
dGluZy1tb2RlJywKLSAgICAgICAgICAgICAgICAnLS1lbmFibGUtYWNjZWxlcmF0ZWQtZml4ZWQt
cG9zaXRpb24nXQotCi0gICAgZGVmIGRlZmF1bHRfdGltZW91dF9tcyhzZWxmKToKLSAgICAgICAg
IyBBbmRyb2lkIHBsYXRmb3JtIGhhcyBsZXNzIGNvbXB1dGluZyBwb3dlciB0aGFuIGRlc2t0b3Ag
cGxhdGZvcm1zLgotICAgICAgICAjIFVzaW5nIDEwIHNlY29uZHMgYWxsb3dzIHVzIHRvIHBhc3Mg
bW9zdCBzbG93IHRlc3RzIHdoaWNoIGFyZSBub3QKLSAgICAgICAgIyBtYXJrZWQgYXMgc2xvdyB0
ZXN0cyBvbiBkZXNrdG9wIHBsYXRmb3Jtcy4KLSAgICAgICAgcmV0dXJuIDEwICogMTAwMAotCi0g
ICAgZGVmIGRyaXZlcl9zdG9wX3RpbWVvdXQoc2VsZik6Ci0gICAgICAgICMgRFJUIGRvZXNuJ3Qg
cmVzcG9uZCB0byBjbG9zaW5nIHN0ZGluLCBzbyB3ZSBtaWdodCBhcyB3ZWxsIHN0b3AgdGhlIGRy
aXZlciBpbW1lZGlhdGVseS4KLSAgICAgICAgcmV0dXJuIDAuMAotCi0gICAgZGVmIGRlZmF1bHRf
Y2hpbGRfcHJvY2Vzc2VzKHNlbGYpOgotICAgICAgICByZXR1cm4gbGVuKHNlbGYuX2dldF9kZXZp
Y2VzKCkpCi0KLSAgICBkZWYgZGVmYXVsdF9iYXNlbGluZV9zZWFyY2hfcGF0aChzZWxmKToKLSAg
ICAgICAgcmV0dXJuIG1hcChzZWxmLl93ZWJraXRfYmFzZWxpbmVfcGF0aCwgc2VsZi5GQUxMQkFD
S19QQVRIUykKLQotICAgIGRlZiBjaGVja193ZGlmZihzZWxmLCBsb2dnaW5nPVRydWUpOgotICAg
ICAgICByZXR1cm4gc2VsZi5faG9zdF9wb3J0LmNoZWNrX3dkaWZmKGxvZ2dpbmcpCi0KLSAgICBk
ZWYgY2hlY2tfYnVpbGQoc2VsZiwgbmVlZHNfaHR0cCk6Ci0gICAgICAgIHJlc3VsdCA9IHN1cGVy
KENocm9taXVtQW5kcm9pZFBvcnQsIHNlbGYpLmNoZWNrX2J1aWxkKG5lZWRzX2h0dHApCi0gICAg
ICAgIHJlc3VsdCA9IHNlbGYuX2NoZWNrX2ZpbGVfZXhpc3RzKHNlbGYucGF0aF90b19tZDVzdW0o
KSwgJ21kNXN1bSB1dGlsaXR5JykgYW5kIHJlc3VsdAotICAgICAgICByZXN1bHQgPSBzZWxmLl9j
aGVja19maWxlX2V4aXN0cyhzZWxmLnBhdGhfdG9fZm9yd2FyZGVyKCksICdmb3J3YXJkZXIgdXRp
bGl0eScpIGFuZCByZXN1bHQKLSAgICAgICAgaWYgbm90IHJlc3VsdDoKLSAgICAgICAgICAgIF9s
b2cuZXJyb3IoJ0ZvciBjb21wbGV0ZSBBbmRyb2lkIGJ1aWxkIHJlcXVpcmVtZW50cywgcGxlYXNl
IHNlZTonKQotICAgICAgICAgICAgX2xvZy5lcnJvcignJykKLSAgICAgICAgICAgIF9sb2cuZXJy
b3IoJyAgICBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vd2lraS9BbmRyb2lkQnVp
bGRJbnN0cnVjdGlvbnMnKQotCi0gICAgICAgIHJldHVybiByZXN1bHQKLQotICAgIGRlZiBjaGVj
a19zeXNfZGVwcyhzZWxmLCBuZWVkc19odHRwKToKLSAgICAgICAgZm9yIChmb250X2RpcnMsIGZv
bnRfZmlsZSwgcGFja2FnZSkgaW4gSE9TVF9GT05UX0ZJTEVTOgotICAgICAgICAgICAgZXhpc3Rz
ID0gRmFsc2UKLSAgICAgICAgICAgIGZvciBmb250X2RpciBpbiBmb250X2RpcnM6Ci0gICAgICAg
ICAgICAgICAgZm9udF9wYXRoID0gZm9udF9kaXIgKyBmb250X2ZpbGUKLSAgICAgICAgICAgICAg
ICBpZiBzZWxmLl9jaGVja19maWxlX2V4aXN0cyhmb250X3BhdGgsICcnLCBsb2dnaW5nPUZhbHNl
KToKLSAgICAgICAgICAgICAgICAgICAgZXhpc3RzID0gVHJ1ZQotICAgICAgICAgICAgICAgICAg
ICBicmVhawotICAgICAgICAgICAgaWYgbm90IGV4aXN0czoKLSAgICAgICAgICAgICAgICBfbG9n
LmVycm9yKCdZb3UgYXJlIG1pc3NpbmcgJXMgdW5kZXIgJXMuIFRyeSBpbnN0YWxsaW5nICVzLiBT
ZWUgYnVpbGQgaW5zdHJ1Y3Rpb25zLicgJSAoZm9udF9maWxlLCBmb250X2RpcnMsIHBhY2thZ2Up
KQotICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICByZXR1cm4gVHJ1ZQotCi0g
ICAgZGVmIF9wb3J0X3NwZWNpZmljX2V4cGVjdGF0aW9uc19maWxlcyhzZWxmKToKLSAgICAgICAg
IyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS1hbmRyb2lkL1Rlc3RFeHBlY3RhdGlvbnMg
c2hvdWxkIGNvbnRhaW4gb25seSB0aGUgcnVsZXMgdG8KLSAgICAgICAgIyBza2lwIHRlc3RzIGZv
ciB0aGUgZmVhdHVyZXMgbm90IHN1cHBvcnRlZCBvciBub3QgdGVzdGFibGUgb24gQW5kcm9pZC4K
LSAgICAgICAgIyBPdGhlciBydWxlcyBzaG91bGQgYmUgaW4gTGF5b3V0VGVzdHMvcGxhdGZvcm0v
Y2hyb21pdW0vVGVzdEV4cGVjdGF0aW9ucy4KLSAgICAgICAgYW5kcm9pZF9leHBlY3RhdGlvbnNf
ZmlsZSA9IHNlbGYucGF0aF9mcm9tX3dlYmtpdF9iYXNlKCdMYXlvdXRUZXN0cycsICdwbGF0Zm9y
bScsICdjaHJvbWl1bS1hbmRyb2lkJywgJ1Rlc3RFeHBlY3RhdGlvbnMnKQotICAgICAgICByZXR1
cm4gc3VwZXIoQ2hyb21pdW1BbmRyb2lkUG9ydCwgc2VsZikuX3BvcnRfc3BlY2lmaWNfZXhwZWN0
YXRpb25zX2ZpbGVzKCkgKyBbYW5kcm9pZF9leHBlY3RhdGlvbnNfZmlsZV0KLQotICAgIGRlZiBy
ZXF1aXJlc19odHRwX3NlcnZlcihzZWxmKToKLSAgICAgICAgIiIiQ2hyb21pdW0gQW5kcm9pZCBy
dW5zIHRlc3RzIG9uIGRldmljZXMsIGFuZCB1c2VzIHRoZSBIVFRQIHNlcnZlciB0bwotICAgICAg
ICBzZXJ2ZSB0aGUgYWN0dWFsIGxheW91dCB0ZXN0cyB0byBEdW1wUmVuZGVyVHJlZS4iIiIKLSAg
ICAgICAgcmV0dXJuIFRydWUKLQotICAgIGRlZiBzdGFydF9odHRwX3NlcnZlcihzZWxmLCBhZGRp
dGlvbmFsX2RpcnM9Tm9uZSwgbnVtYmVyX29mX3NlcnZlcnM9MCk6Ci0gICAgICAgIGlmIG5vdCBh
ZGRpdGlvbmFsX2RpcnM6Ci0gICAgICAgICAgICBhZGRpdGlvbmFsX2RpcnMgPSB7fQotICAgICAg
ICBhZGRpdGlvbmFsX2RpcnNbUEVSRl9URVNUX1BBVEhfUFJFRklYXSA9IHNlbGYucGVyZl90ZXN0
c19kaXIoKQotICAgICAgICBhZGRpdGlvbmFsX2RpcnNbTEFZT1VUX1RFU1RfUEFUSF9QUkVGSVhd
ID0gc2VsZi5sYXlvdXRfdGVzdHNfZGlyKCkKLSAgICAgICAgc3VwZXIoQ2hyb21pdW1BbmRyb2lk
UG9ydCwgc2VsZikuc3RhcnRfaHR0cF9zZXJ2ZXIoYWRkaXRpb25hbF9kaXJzLCBudW1iZXJfb2Zf
c2VydmVycykKLQotICAgIGRlZiBjcmVhdGVfZHJpdmVyKHNlbGYsIHdvcmtlcl9udW1iZXIsIG5v
X3RpbWVvdXQ9RmFsc2UpOgotICAgICAgICAjIFdlIGRvbid0IHdhbnQgdGhlIGRlZmF1bHQgRHJp
dmVyUHJveHkgd2hpY2ggaXMgbm90IGNvbXBhdGlibGUgd2l0aCBvdXIgZHJpdmVyLgotICAgICAg
ICAjIFNlZSBjb21tZW50cyBpbiBDaHJvbWl1bUFuZHJvaWREcml2ZXIuc3RhcnQoKS4KLSAgICAg
ICAgcmV0dXJuIENocm9taXVtQW5kcm9pZERyaXZlcihzZWxmLCB3b3JrZXJfbnVtYmVyLCBwaXhl
bF90ZXN0cz1zZWxmLmdldF9vcHRpb24oJ3BpeGVsX3Rlc3RzJyksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIyBGb3JjZSBubyB0aW1lb3V0IHRvIGF2b2lkIER1bXBSZW5k
ZXJUcmVlIHRpbWVvdXRzIGJlZm9yZSBOUldULgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5vX3RpbWVvdXQ9VHJ1ZSkKLQotICAgIGRlZiBkcml2ZXJfY21kX2xpbmUoc2Vs
Zik6Ci0gICAgICAgICMgT3ZlcnJpZGUgdG8gcmV0dXJuIHRoZSBhY3R1YWwgRHVtcFJlbmRlclRy
ZWUgY29tbWFuZCBsaW5lLgotICAgICAgICByZXR1cm4gc2VsZi5jcmVhdGVfZHJpdmVyKDApLl9k
cnRfY21kX2xpbmUoc2VsZi5nZXRfb3B0aW9uKCdwaXhlbF90ZXN0cycpLCBbXSkKLQotICAgIGRl
ZiBwYXRoX3RvX2FkYihzZWxmKToKLSAgICAgICAgaWYgQ2hyb21pdW1BbmRyb2lkUG9ydC5fYWRi
X3BhdGg6Ci0gICAgICAgICAgICByZXR1cm4gQ2hyb21pdW1BbmRyb2lkUG9ydC5fYWRiX3BhdGgK
LQotICAgICAgICBwcm92aWRlZF9hZGJfcGF0aCA9IHNlbGYucGF0aF9mcm9tX2Nocm9taXVtX2Jh
c2UoJ3RoaXJkX3BhcnR5JywgJ2FuZHJvaWRfdG9vbHMnLCAnc2RrJywgJ3BsYXRmb3JtLXRvb2xz
JywgJ2FkYicpCi0KLSAgICAgICAgcGF0aF92ZXJzaW9uID0gc2VsZi5fZGV0ZXJtaW5lX2FkYl92
ZXJzaW9uKCdhZGInKQotICAgICAgICBwcm92aWRlZF92ZXJzaW9uID0gc2VsZi5fZGV0ZXJtaW5l
X2FkYl92ZXJzaW9uKHByb3ZpZGVkX2FkYl9wYXRoKQotICAgICAgICBhc3NlcnQgcHJvdmlkZWRf
dmVyc2lvbiwgJ1RoZSBjaGVja2VkIGluIEFuZHJvaWQgU0RLIGlzIG1pc3NpbmcuIEFyZSB5b3Ug
c3VyZSB5b3UgcmFuIHVwZGF0ZS13ZWJraXQgLS1jaHJvbWl1bS1hbmRyb2lkPycKLQotICAgICAg
ICBpZiBub3QgcGF0aF92ZXJzaW9uOgotICAgICAgICAgICAgQ2hyb21pdW1BbmRyb2lkUG9ydC5f
YWRiX3BhdGggPSBwcm92aWRlZF9hZGJfcGF0aAotICAgICAgICBlbGlmIHByb3ZpZGVkX3ZlcnNp
b24gPiBwYXRoX3ZlcnNpb246Ci0gICAgICAgICAgICBfbG9nLndhcm5pbmcoJ1RoZSAiYWRiIiB2
ZXJzaW9uIGluIHlvdXIgcGF0aCBpcyBvbGRlciB0aGFuIHRoZSBvbmUgY2hlY2tlZCBpbiwgY29u
c2lkZXIgdXBkYXRpbmcgeW91ciBsb2NhbCBBbmRyb2lkIFNESy4gVXNpbmcgdGhlIGNoZWNrZWQg
aW4gb25lLicpCi0gICAgICAgICAgICBDaHJvbWl1bUFuZHJvaWRQb3J0Ll9hZGJfcGF0aCA9IHBy
b3ZpZGVkX2FkYl9wYXRoCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBDaHJvbWl1bUFuZHJv
aWRQb3J0Ll9hZGJfcGF0aCA9ICdhZGInCi0KLSAgICAgICAgcmV0dXJuIENocm9taXVtQW5kcm9p
ZFBvcnQuX2FkYl9wYXRoCi0KLSAgICBkZWYgcGF0aF90b19mb3J3YXJkZXIoc2VsZik6Ci0gICAg
ICAgIHJldHVybiBzZWxmLl9idWlsZF9wYXRoKCdmb3J3YXJkZXInKQotCi0gICAgZGVmIHBhdGhf
dG9fbWQ1c3VtKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fYnVpbGRfcGF0aChNRDVTVU1f
REVWSUNFX0ZJTEVfTkFNRSkKLQotICAgICMgT3ZlcnJpZGRlbiBwcml2YXRlIGZ1bmN0aW9ucy4K
LQotICAgIGRlZiBfYnVpbGRfcGF0aChzZWxmLCAqY29tcHMpOgotICAgICAgICByZXR1cm4gc2Vs
Zi5faG9zdF9wb3J0Ll9idWlsZF9wYXRoKCpjb21wcykKLQotICAgIGRlZiBfYnVpbGRfcGF0aF93
aXRoX2NvbmZpZ3VyYXRpb24oc2VsZiwgY29uZmlndXJhdGlvbiwgKmNvbXBzKToKLSAgICAgICAg
cmV0dXJuIHNlbGYuX2hvc3RfcG9ydC5fYnVpbGRfcGF0aF93aXRoX2NvbmZpZ3VyYXRpb24oY29u
ZmlndXJhdGlvbiwgKmNvbXBzKQotCi0gICAgZGVmIF9wYXRoX3RvX2FwYWNoZShzZWxmKToKLSAg
ICAgICAgcmV0dXJuIHNlbGYuX2hvc3RfcG9ydC5fcGF0aF90b19hcGFjaGUoKQotCi0gICAgZGVm
IF9wYXRoX3RvX2FwYWNoZV9jb25maWdfZmlsZShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYu
X2hvc3RfcG9ydC5fcGF0aF90b19hcGFjaGVfY29uZmlnX2ZpbGUoKQotCi0gICAgZGVmIF9wYXRo
X3RvX2RyaXZlcihzZWxmLCBjb25maWd1cmF0aW9uPU5vbmUpOgotICAgICAgICByZXR1cm4gc2Vs
Zi5fYnVpbGRfcGF0aF93aXRoX2NvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbiwgJ0R1bXBSZW5k
ZXJUcmVlX2Fway9EdW1wUmVuZGVyVHJlZS1kZWJ1Zy5hcGsnKQotCi0gICAgZGVmIF9wYXRoX3Rv
X2hlbHBlcihzZWxmKToKLSAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgIGRlZiBfcGF0aF90b19p
bWFnZV9kaWZmKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5faG9zdF9wb3J0Ll9wYXRoX3Rv
X2ltYWdlX2RpZmYoKQotCi0gICAgZGVmIF9wYXRoX3RvX2xpZ2h0dHBkKHNlbGYpOgotICAgICAg
ICByZXR1cm4gc2VsZi5faG9zdF9wb3J0Ll9wYXRoX3RvX2xpZ2h0dHBkKCkKLQotICAgIGRlZiBf
cGF0aF90b19saWdodHRwZF9tb2R1bGVzKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5faG9z
dF9wb3J0Ll9wYXRoX3RvX2xpZ2h0dHBkX21vZHVsZXMoKQotCi0gICAgZGVmIF9wYXRoX3RvX2xp
Z2h0dHBkX3BocChzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2hvc3RfcG9ydC5fcGF0aF90
b19saWdodHRwZF9waHAoKQotCi0gICAgZGVmIF9wYXRoX3RvX3dkaWZmKHNlbGYpOgotICAgICAg
ICByZXR1cm4gc2VsZi5faG9zdF9wb3J0Ll9wYXRoX3RvX3dkaWZmKCkKLQotICAgIGRlZiBfc2h1
dF9kb3duX2h0dHBfc2VydmVyKHNlbGYsIHBpZCk6Ci0gICAgICAgIHJldHVybiBzZWxmLl9ob3N0
X3BvcnQuX3NodXRfZG93bl9odHRwX3NlcnZlcihwaWQpCi0KLSAgICBkZWYgX2RyaXZlcl9jbGFz
cyhzZWxmKToKLSAgICAgICAgcmV0dXJuIENocm9taXVtQW5kcm9pZERyaXZlcgotCi0gICAgIyBM
b2NhbCBwcml2YXRlIGZ1bmN0aW9ucy4KLQotICAgIGRlZiBfZGV0ZXJtaW5lX2FkYl92ZXJzaW9u
KHNlbGYsIGFkYl9wYXRoKToKLSAgICAgICAgcmVfdmVyc2lvbiA9IHJlLmNvbXBpbGUoJ14uKnZl
cnNpb24gKFtcZFwuXSspJCcpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG91dHB1dCA9IHNl
bGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbYWRiX3BhdGgsICd2ZXJzaW9uJ10sIGVycm9yX2hh
bmRsZXI9c2VsZi5fZXhlY3V0aXZlLmlnbm9yZV9lcnJvcikKLSAgICAgICAgZXhjZXB0IE9TRXJy
b3I6Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICByZXN1bHQgPSByZV92ZXJzaW9u
Lm1hdGNoKG91dHB1dCkKLSAgICAgICAgaWYgbm90IG91dHB1dCBvciBub3QgcmVzdWx0OgotICAg
ICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgcmV0dXJuIFtpbnQobikgZm9yIG4gaW4gcmVz
dWx0Lmdyb3VwKDEpLnNwbGl0KCcuJyldCi0KLSAgICBkZWYgX2dldF9kZXZpY2VzKHNlbGYpOgot
ICAgICAgICBpZiBub3Qgc2VsZi5fZGV2aWNlczoKLSAgICAgICAgICAgIHJlX2RldmljZSA9IHJl
LmNvbXBpbGUoJ14oW2EtekEtWjAtOV86Li1dKylcdGRldmljZSQnLCByZS5NVUxUSUxJTkUpCi0g
ICAgICAgICAgICByZXN1bHQgPSBzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1hbmQoW3NlbGYucGF0
aF90b19hZGIoKSwgJ2RldmljZXMnXSwgZXJyb3JfaGFuZGxlcj1zZWxmLl9leGVjdXRpdmUuaWdu
b3JlX2Vycm9yKQotICAgICAgICAgICAgc2VsZi5fZGV2aWNlcyA9IHJlX2RldmljZS5maW5kYWxs
KHJlc3VsdCkKLSAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9kZXZpY2VzOgotICAgICAgICAgICAg
ICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdObyBkZXZpY2VzIGF0dGFjaGVkLiBSZXN1bHQgb2Yg
ImFkYiBkZXZpY2VzIjogJXMnICUgcmVzdWx0KQotICAgICAgICByZXR1cm4gc2VsZi5fZGV2aWNl
cwotCi0gICAgZGVmIF9nZXRfZGV2aWNlX3NlcmlhbChzZWxmLCB3b3JrZXJfbnVtYmVyKToKLSAg
ICAgICAgZGV2aWNlcyA9IHNlbGYuX2dldF9kZXZpY2VzKCkKLSAgICAgICAgaWYgd29ya2VyX251
bWJlciA+PSBsZW4oZGV2aWNlcyk6Ci0gICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcign
V29ya2VyIG51bWJlciBleGNlZWRzIGF2YWlsYWJsZSBudW1iZXIgb2YgZGV2aWNlcycpCi0gICAg
ICAgIHJldHVybiBkZXZpY2VzW3dvcmtlcl9udW1iZXJdCi0KLQotY2xhc3MgQW5kcm9pZFBlcmYo
U2luZ2xlRmlsZU91dHB1dFByb2ZpbGVyKToKLSAgICBfY2FjaGVkX3BlcmZfaG9zdF9wYXRoID0g
Tm9uZQotICAgIF9oYXZlX3NlYXJjaGVkX2Zvcl9wZXJmX2hvc3QgPSBGYWxzZQotCi0gICAgZGVm
IF9faW5pdF9fKHNlbGYsIGhvc3QsIGV4ZWN1dGFibGVfcGF0aCwgb3V0cHV0X2RpciwgYWRiX3Bh
dGgsIGRldmljZV9zZXJpYWwsIHN5bWZzX3BhdGgsIGthbGxzeW1zX3BhdGgsIGlkZW50aWZpZXI9
Tm9uZSk6Ci0gICAgICAgIHN1cGVyKEFuZHJvaWRQZXJmLCBzZWxmKS5fX2luaXRfXyhob3N0LCBl
eGVjdXRhYmxlX3BhdGgsIG91dHB1dF9kaXIsICJkYXRhIiwgaWRlbnRpZmllcikKLSAgICAgICAg
c2VsZi5fZGV2aWNlX3NlcmlhbCA9IGRldmljZV9zZXJpYWwKLSAgICAgICAgc2VsZi5fYWRiX2Nv
bW1hbmQgPSBbYWRiX3BhdGgsICctcycsIHNlbGYuX2RldmljZV9zZXJpYWxdCi0gICAgICAgIHNl
bGYuX3BlcmZfcHJvY2VzcyA9IE5vbmUKLSAgICAgICAgc2VsZi5fc3ltZnNfcGF0aCA9IHN5bWZz
X3BhdGgKLSAgICAgICAgc2VsZi5fa2FsbHN5bXNfcGF0aCA9IGthbGxzeW1zX3BhdGgKLQotICAg
IGRlZiBjaGVja19jb25maWd1cmF0aW9uKHNlbGYpOgotICAgICAgICAjIENoZWNrIHRoYXQgcGVy
ZiBpcyBpbnN0YWxsZWQKLSAgICAgICAgaWYgbm90IHNlbGYuX2ZpbGVfZXhpc3RzX29uX2Rldmlj
ZSgnL3N5c3RlbS9iaW4vcGVyZicpOgotICAgICAgICAgICAgcHJpbnQgIkNhbm5vdCBmaW5kIC9z
eXN0ZW0vYmluL3BlcmYgb24gZGV2aWNlICVzIiAlIHNlbGYuX2RldmljZV9zZXJpYWwKLSAgICAg
ICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICAjIENoZWNrIHRoYXQgdGhlIGRldmljZSBpcyBh
IHVzZXJkZWJ1ZyBidWlsZCAob3IgYXQgbGVhc3QgaGFzIHRoZSBuZWNlc3NhcnkgbGlicmFyaWVz
KS4KLSAgICAgICAgaWYgc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnZ2V0cHJvcCcs
ICdyby5idWlsZC50eXBlJ10pLnN0cmlwKCkgIT0gJ3VzZXJkZWJ1Zyc6Ci0gICAgICAgICAgICBw
cmludCAiRGV2aWNlICVzIGlzIG5vdCBmbGFzaGVkIHdpdGggYSB1c2VyZGVidWcgYnVpbGQgb2Yg
QW5kcm9pZCIgJSBzZWxmLl9kZXZpY2Vfc2VyaWFsCi0gICAgICAgICAgICByZXR1cm4gRmFsc2UK
LSAgICAgICAgIyBGSVhNRTogQ2hlY2sgdGhhdCB0aGUgYmluYXJ5IGFjdHVhbGx5IGlzIHBlcmYt
YWJsZSAoaGFzIHN0YWNrZnJhbWUgcG9pbnRlcnMpPwotICAgICAgICAjIG9iamR1bXAgLXMgYSBm
dW5jdGlvbiBhbmQgbWFrZSBzdXJlIGl0IG1vZGlmaWVzIHRoZSBmcD8KLSAgICAgICAgIyBJbnN0
cnVjdCB1c2VycyB0byByZWJ1aWxkIGFmdGVyIGV4cG9ydCBHWVBfREVGSU5FUz0icHJvZmlsaW5n
PTEgJEdZUF9ERUZJTkVTIgotICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgZGVmIHByaW50X3Nl
dHVwX2luc3RydWN0aW9ucyhzZWxmKToKLSAgICAgICAgcHJpbnQgIiIiCi1wZXJmIG9uIGFuZHJv
aWQgcmVxdWlyZXMgYSAndXNlcmRlYnVnJyBidWlsZCBvZiBBbmRyb2lkLCBzZWU6Ci1odHRwOi8v
c291cmNlLmFuZHJvaWQuY29tL3NvdXJjZS9idWlsZGluZy1kZXZpY2VzLmh0bWwiCi0KLVRoZSBw
ZXJmIGNvbW1hbmQgY2FuIGJlIGJ1aWx0IGZyb206Ci1odHRwczovL2FuZHJvaWQuZ29vZ2xlc291
cmNlLmNvbS9wbGF0Zm9ybS9leHRlcm5hbC9saW51eC10b29scy1wZXJmLwotYW5kIHJlcXVpcmVz
IGxpYmVmbCwgbGliZWJsLCBsaWJkdywgYW5kIGxpYmR3ZmwgYXZhaWxhYmxlIGluOgotaHR0cHM6
Ly9hbmRyb2lkLmdvb2dsZXNvdXJjZS5jb20vcGxhdGZvcm0vZXh0ZXJuYWwvZWxmdXRpbHMvCi0K
LUR1bXBSZW5kZXJUcmVlIG11c3QgYmUgYnVpbHQgd2l0aCBwcm9maWxpbmc9MSwgbWFrZSBzdXJl
IHlvdSd2ZSBkb25lOgotZXhwb3J0IEdZUF9ERUZJTkVTPSJwcm9maWxpbmc9MSAkR1lQX0RFRklO
RVMiCi11cGRhdGUtd2Via2l0IC0tY2hyb21pdW0tYW5kcm9pZAotYnVpbGQtd2Via2l0IC0tY2hy
b21pdW0tYW5kcm9pZAotCi1Hb29nbGVycyBzaG91bGQgcmVhZDoKLWh0dHA6Ly9nb3RvLmdvb2ds
ZS5jb20vY3ItYW5kcm9pZC1wZXJmLWhvd3RvCi0iIiIKLQotICAgIGRlZiBfZmlsZV9leGlzdHNf
b25fZGV2aWNlKHNlbGYsIGZ1bGxfZmlsZV9wYXRoKToKLSAgICAgICAgYXNzZXJ0IGZ1bGxfZmls
ZV9wYXRoLnN0YXJ0c3dpdGgoJy8nKQotICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2FkYl9jb21t
YW5kKFsnc2hlbGwnLCAnbHMnLCBmdWxsX2ZpbGVfcGF0aF0pLnN0cmlwKCkgPT0gZnVsbF9maWxl
X3BhdGgKLQotICAgIGRlZiBfcnVuX2FkYl9jb21tYW5kKHNlbGYsIGNtZCk6Ci0gICAgICAgIHJl
dHVybiBzZWxmLl9ob3N0LmV4ZWN1dGl2ZS5ydW5fY29tbWFuZChzZWxmLl9hZGJfY29tbWFuZCAr
IGNtZCkKLQotICAgIGRlZiBhdHRhY2hfdG9fcGlkKHNlbGYsIHBpZCk6Ci0gICAgICAgIGFzc2Vy
dChwaWQpCi0gICAgICAgIGFzc2VydChzZWxmLl9wZXJmX3Byb2Nlc3MgPT0gTm9uZSkKLSAgICAg
ICAgIyBGSVhNRTogVGhpcyBjYW4ndCBiZSBhIGZpeGVkIHRpbWVvdXQhCi0gICAgICAgIGNtZCA9
IHNlbGYuX2FkYl9jb21tYW5kICsgWydzaGVsbCcsICdwZXJmJywgJ3JlY29yZCcsICctZycsICct
cCcsIHBpZCwgJ3NsZWVwJywgMzBdCi0gICAgICAgIHNlbGYuX3BlcmZfcHJvY2VzcyA9IHNlbGYu
X2hvc3QuZXhlY3V0aXZlLnBvcGVuKGNtZCkKLQotICAgIGRlZiBfcGVyZl92ZXJzaW9uX3N0cmlu
ZyhzZWxmLCBwZXJmX3BhdGgpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gc2Vs
Zi5faG9zdC5leGVjdXRpdmUucnVuX2NvbW1hbmQoW3BlcmZfcGF0aCwgJy0tdmVyc2lvbiddKQot
ICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgZGVmIF9maW5k
X3BlcmZob3N0X2JpbmFyeShzZWxmKToKLSAgICAgICAgcGVyZmhvc3RfdmVyc2lvbiA9IHNlbGYu
X3BlcmZfdmVyc2lvbl9zdHJpbmcoJ3BlcmZob3N0X2xpbnV4JykKLSAgICAgICAgaWYgcGVyZmhv
c3RfdmVyc2lvbjoKLSAgICAgICAgICAgIHJldHVybiAncGVyZmhvc3RfbGludXgnCi0gICAgICAg
IHBlcmZfdmVyc2lvbiA9IHNlbGYuX3BlcmZfdmVyc2lvbl9zdHJpbmcoJ3BlcmYnKQotICAgICAg
ICBpZiBwZXJmX3ZlcnNpb246Ci0gICAgICAgICAgICByZXR1cm4gJ3BlcmYnCi0gICAgICAgIHJl
dHVybiBOb25lCi0KLSAgICBkZWYgX3BlcmZob3N0X3BhdGgoc2VsZik6Ci0gICAgICAgIGlmIHNl
bGYuX2hhdmVfc2VhcmNoZWRfZm9yX3BlcmZfaG9zdDoKLSAgICAgICAgICAgIHJldHVybiBzZWxm
Ll9jYWNoZWRfcGVyZl9ob3N0X3BhdGgKLSAgICAgICAgc2VsZi5faGF2ZV9zZWFyY2hlZF9mb3Jf
cGVyZl9ob3N0ID0gVHJ1ZQotICAgICAgICBzZWxmLl9jYWNoZWRfcGVyZl9ob3N0X3BhdGggPSBz
ZWxmLl9maW5kX3BlcmZob3N0X2JpbmFyeSgpCi0gICAgICAgIHJldHVybiBzZWxmLl9jYWNoZWRf
cGVyZl9ob3N0X3BhdGgKLQotICAgIGRlZiBfZmlyc3RfdGVuX2xpbmVzX29mX3Byb2ZpbGUoc2Vs
ZiwgcGVyZl9vdXRwdXQpOgotICAgICAgICBtYXRjaCA9IHJlLnNlYXJjaCgiXiNbXlxuXSpcbigo
PzogW15cbl0qXG4pezEsMTB9KSIsIHBlcmZfb3V0cHV0LCByZS5NVUxUSUxJTkUpCi0gICAgICAg
IHJldHVybiBtYXRjaC5ncm91cCgxKSBpZiBtYXRjaCBlbHNlIE5vbmUKLQotICAgIGRlZiBwcm9m
aWxlX2FmdGVyX2V4aXQoc2VsZik6Ci0gICAgICAgIHBlcmZfZXhpdGNvZGUgPSBzZWxmLl9wZXJm
X3Byb2Nlc3Mud2FpdCgpCi0gICAgICAgIGlmIHBlcmZfZXhpdGNvZGUgIT0gMDoKLSAgICAgICAg
ICAgIHByaW50ICJQZXJmIGZhaWxlZCAoZXhpdCBjb2RlOiAlaSksIGNhbid0IHByb2Nlc3MgcmVz
dWx0cy4iICUgcGVyZl9leGl0Y29kZQotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHNlbGYu
X3J1bl9hZGJfY29tbWFuZChbJ3B1bGwnLCAnL2RhdGEvcGVyZi5kYXRhJywgc2VsZi5fb3V0cHV0
X3BhdGhdKQotCi0gICAgICAgIHBlcmZob3N0X3BhdGggPSBzZWxmLl9wZXJmaG9zdF9wYXRoKCkK
LSAgICAgICAgcGVyZmhvc3RfcmVwb3J0X2NvbW1hbmQgPSBbCi0gICAgICAgICAgICAncmVwb3J0
JywKLSAgICAgICAgICAgICctLWlucHV0Jywgc2VsZi5fb3V0cHV0X3BhdGgsCi0gICAgICAgICAg
ICAnLS1zeW1mcycsIHNlbGYuX3N5bWZzX3BhdGgsCi0gICAgICAgICAgICAnLS1rYWxsc3ltcycs
IHNlbGYuX2thbGxzeW1zX3BhdGgsCi0gICAgICAgIF0KLSAgICAgICAgaWYgcGVyZmhvc3RfcGF0
aDoKLSAgICAgICAgICAgIHBlcmZob3N0X2FyZ3MgPSBbcGVyZmhvc3RfcGF0aF0gKyBwZXJmaG9z
dF9yZXBvcnRfY29tbWFuZCArIFsnLS1jYWxsLWdyYXBoJywgJ25vbmUnXQotICAgICAgICAgICAg
cGVyZl9vdXRwdXQgPSBzZWxmLl9ob3N0LmV4ZWN1dGl2ZS5ydW5fY29tbWFuZChwZXJmaG9zdF9h
cmdzKQotICAgICAgICAgICAgIyBXZSBjb3VsZCBzYXZlIG9mZiB0aGUgZnVsbCAtZyByZXBvcnQg
dG8gYSBmaWxlIGlmIHVzZXJzIGZvdW5kIHRoYXQgdXNlZnVsLgotICAgICAgICAgICAgcHJpbnQg
c2VsZi5fZmlyc3RfdGVuX2xpbmVzX29mX3Byb2ZpbGUocGVyZl9vdXRwdXQpCi0gICAgICAgIGVs
c2U6Ci0gICAgICAgICAgICBwcmludCAiIiIKLUZhaWxlZCB0byBmaW5kIHBlcmZob3N0X2xpbnV4
IGJpbmFyeSwgY2FuJ3QgcHJvY2VzcyBzYW1wbGVzIGZyb20gdGhlIGRldmljZS4KLQotcGVyZmhv
c3RfbGludXggY2FuIGJlIGJ1aWx0IGZyb206Ci1odHRwczovL2FuZHJvaWQuZ29vZ2xlc291cmNl
LmNvbS9wbGF0Zm9ybS9leHRlcm5hbC9saW51eC10b29scy1wZXJmLwotYWxzbywgbW9kZXJuIHZl
cnNpb25zIG9mIHBlcmYgKGF2YWlsYWJsZSBmcm9tIGFwdC1nZXQgaW5zdGFsbCBnb29idW50dS1r
ZXJuZWwtdG9vbHMtY29tbW9uKQotbWF5IGFsc28gYmUgYWJsZSB0byBwcm9jZXNzIHRoZSBwZXJm
LmRhdGEgZmlsZXMgZnJvbSB0aGUgZGV2aWNlLgotCi1Hb29nbGVycyBzaG91bGQgcmVhZDoKLWh0
dHA6Ly9nb3RvLmdvb2dsZS5jb20vY3ItYW5kcm9pZC1wZXJmLWhvd3RvCi1mb3IgaW5zdHJ1Y3Rp
b25zIG9uIGluc3RhbGxpbmcgcHJlLWJ1aWx0IGNvcGllcyBvZiBwZXJmaG9zdF9saW51eAotaHR0
cDovL2NyYnVnLmNvbS8xNjUyNTAgZGlzY3Vzc2VzIG1ha2luZyB0aGVzZSBwcmUtYnVpbHQgYmlu
YXJpZXMgZXh0ZXJuYWxseSBhdmFpbGFibGUuCi0iIiIKLQotICAgICAgICBwZXJmaG9zdF9kaXNw
bGF5X3BhdGNoID0gcGVyZmhvc3RfcGF0aCBpZiBwZXJmaG9zdF9wYXRoIGVsc2UgJ3BlcmZob3N0
X2xpbnV4JwotICAgICAgICBwcmludCAiVG8gdmlldyB0aGUgZnVsbCBwcm9maWxlLCBydW46Igot
ICAgICAgICBwcmludCAnICcuam9pbihbcGVyZmhvc3RfZGlzcGxheV9wYXRjaF0gKyBwZXJmaG9z
dF9yZXBvcnRfY29tbWFuZCkKLQotCi1jbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXIoZHJpdmVy
LkRyaXZlcik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIHdvcmtlcl9udW1iZXIsIHBp
eGVsX3Rlc3RzLCBub190aW1lb3V0PUZhbHNlKToKLSAgICAgICAgc3VwZXIoQ2hyb21pdW1BbmRy
b2lkRHJpdmVyLCBzZWxmKS5fX2luaXRfXyhwb3J0LCB3b3JrZXJfbnVtYmVyLCBwaXhlbF90ZXN0
cywgbm9fdGltZW91dCkKLSAgICAgICAgc2VsZi5fY21kX2xpbmUgPSBOb25lCi0gICAgICAgIHNl
bGYuX2luX2ZpZm9fcGF0aCA9IERFVklDRV9GSUZPX1BBVEggKyAnc3RkaW4uZmlmbycKLSAgICAg
ICAgc2VsZi5fb3V0X2ZpZm9fcGF0aCA9IERFVklDRV9GSUZPX1BBVEggKyAndGVzdC5maWZvJwot
ICAgICAgICBzZWxmLl9lcnJfZmlmb19wYXRoID0gREVWSUNFX0ZJRk9fUEFUSCArICdzdGRlcnIu
ZmlmbycKLSAgICAgICAgc2VsZi5fcmVhZF9zdGRvdXRfcHJvY2VzcyA9IE5vbmUKLSAgICAgICAg
c2VsZi5fcmVhZF9zdGRlcnJfcHJvY2VzcyA9IE5vbmUKLSAgICAgICAgc2VsZi5fZm9yd2FyZGVy
X3Byb2Nlc3MgPSBOb25lCi0gICAgICAgIHNlbGYuX2hhc19zZXR1cCA9IEZhbHNlCi0gICAgICAg
IHNlbGYuX29yaWdpbmFsX2dvdmVybm9ycyA9IHt9Ci0gICAgICAgIHNlbGYuX29yaWdpbmFsX2tw
dHJfcmVzdHJpY3QgPSBOb25lCi0gICAgICAgIHNlbGYuX2RldmljZV9zZXJpYWwgPSBwb3J0Ll9n
ZXRfZGV2aWNlX3NlcmlhbCh3b3JrZXJfbnVtYmVyKQotICAgICAgICBzZWxmLl9hZGJfY29tbWFu
ZF9iYXNlID0gTm9uZQotCi0gICAgICAgICMgRklYTUU6IElmIHdlIHRhdWdodCBQcm9maWxlRmFj
dG9yeSBhYm91dCAidGFyZ2V0IiBkZXZpY2VzIHdlIGNvdWxkCi0gICAgICAgICMganVzdCB1c2Ug
dGhlIGxvZ2ljIGluIERyaXZlciBpbnN0ZWFkIG9mIGR1cGxpY2F0aW5nIGl0IGhlcmUuCi0gICAg
ICAgIGlmIHNlbGYuX3BvcnQuZ2V0X29wdGlvbigicHJvZmlsZSIpOgotICAgICAgICAgICAgIyBG
SVhNRTogVGhpcyBzaG91bGQgYmUgZG9uZSBvbmNlLCBpbnN0ZWFkIG9mIHBlci1kcml2ZXIhCi0g
ICAgICAgICAgICBzeW1mc19wYXRoID0gc2VsZi5fZmluZF9vcl9jcmVhdGVfc3ltZnMoKQotICAg
ICAgICAgICAga2FsbHN5bXNfcGF0aCA9IHNlbGYuX3VwZGF0ZV9rYWxsc3ltc19jYWNoZShzeW1m
c19wYXRoKQotICAgICAgICAgICAgIyBGSVhNRTogV2Ugc2hvdWxkIHBhc3MgdGhpcyBzb21lIHNv
cnQgb2YgIkJyaWRnZSIgb2JqZWN0IGFic3RyYWN0aW9uIGFyb3VuZCBBREIgaW5zdGVhZCBvZiBh
IHBhdGgvZGV2aWNlIHBhaXIuCi0gICAgICAgICAgICBzZWxmLl9wcm9maWxlciA9IEFuZHJvaWRQ
ZXJmKHNlbGYuX3BvcnQuaG9zdCwgc2VsZi5fcG9ydC5fcGF0aF90b19kcml2ZXIoKSwgc2VsZi5f
cG9ydC5yZXN1bHRzX2RpcmVjdG9yeSgpLAotICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQucGF0
aF90b19hZGIoKSwgc2VsZi5fZGV2aWNlX3NlcmlhbCwgc3ltZnNfcGF0aCwga2FsbHN5bXNfcGF0
aCkKLSAgICAgICAgICAgICMgRklYTUU6IFRoaXMgaXMgYSBsYXllcmluZyB2aW9sYXRpb24gYW5k
IHNob3VsZCBiZSBtb3ZlZCB0byBQb3J0LmNoZWNrX3N5c19kZXBzCi0gICAgICAgICAgICAjIG9u
Y2Ugd2UgaGF2ZSBhbiBhYnN0cmFjdGlvbiBhcm91bmQgYW4gYWRiX3BhdGgvZGV2aWNlX3Nlcmlh
bCBwYWlyIHRvIG1ha2UgaXQKLSAgICAgICAgICAgICMgZWFzeSB0byBtYWtlIHRoZXNlIGNsYXNz
IG1ldGhvZHMgb24gQW5kcm9pZFBlcmYuCi0gICAgICAgICAgICBpZiBub3Qgc2VsZi5fcHJvZmls
ZXIuY2hlY2tfY29uZmlndXJhdGlvbigpOgotICAgICAgICAgICAgICAgIHNlbGYuX3Byb2ZpbGVy
LnByaW50X3NldHVwX2luc3RydWN0aW9ucygpCi0gICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkK
LSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuX3Byb2ZpbGVyID0gTm9uZQotCi0gICAg
ZGVmIF9fZGVsX18oc2VsZik6Ci0gICAgICAgIHNlbGYuX3RlYXJkb3duX3BlcmZvcm1hbmNlKCkK
LSAgICAgICAgc3VwZXIoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLCBzZWxmKS5fX2RlbF9fKCkKLQot
ICAgIGRlZiBfdXBkYXRlX2thbGxzeW1zX2NhY2hlKHNlbGYsIG91dHB1dF9kaXIpOgotICAgICAg
ICBrYWxsc3ltc19uYW1lID0gIiVzLWthbGxzeW1zIiAlIHNlbGYuX2RldmljZV9zZXJpYWwKLSAg
ICAgICAga2FsbHN5bXNfY2FjaGVfcGF0aCA9IHNlbGYuX3BvcnQuaG9zdC5maWxlc3lzdGVtLmpv
aW4ob3V0cHV0X2Rpciwga2FsbHN5bXNfbmFtZSkKLQotICAgICAgICBzZWxmLl9yZXN0YXJ0X2Fk
Yl9hc19yb290KCkKLQotICAgICAgICBzYXZlZF9rcHRyX3Jlc3RyaWN0ID0gc2VsZi5fcnVuX2Fk
Yl9jb21tYW5kKFsnc2hlbGwnLCAnY2F0JywgS1BUUl9SRVNUUklDVF9QQVRIXSkuc3RyaXAoKQot
ICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdlY2hvJywgJzAnLCAnPics
IEtQVFJfUkVTVFJJQ1RfUEFUSF0pCi0KLSAgICAgICAgcHJpbnQgIlVwZGF0aW5nIGthbGxzeW1z
IGZpbGUgKCVzKSBmcm9tIGRldmljZSIgJSBrYWxsc3ltc19jYWNoZV9wYXRoCi0gICAgICAgIHNl
bGYuX3B1bGxfZnJvbV9kZXZpY2UoIi9wcm9jL2thbGxzeW1zIiwga2FsbHN5bXNfY2FjaGVfcGF0
aCkKLQotICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdlY2hvJywgc2F2
ZWRfa3B0cl9yZXN0cmljdCwgJz4nLCBLUFRSX1JFU1RSSUNUX1BBVEhdKQotCi0gICAgICAgIHJl
dHVybiBrYWxsc3ltc19jYWNoZV9wYXRoCi0KLSAgICBkZWYgX2ZpbmRfb3JfY3JlYXRlX3N5bWZz
KHNlbGYpOgotICAgICAgICBlbnZpcm9ubWVudCA9IHNlbGYuX3BvcnQuaG9zdC5jb3B5X2N1cnJl
bnRfZW52aXJvbm1lbnQoKQotICAgICAgICBlbnYgPSBlbnZpcm9ubWVudC50b19kaWN0aW9uYXJ5
KCkKLSAgICAgICAgZnMgPSBzZWxmLl9wb3J0Lmhvc3QuZmlsZXN5c3RlbQotCi0gICAgICAgIGlm
ICdBTkRST0lEX1NZTUZTJyBpbiBlbnY6Ci0gICAgICAgICAgICBzeW1mc19wYXRoID0gZW52WydB
TkRST0lEX1NZTUZTJ10KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHN5bWZzX3BhdGggPSBm
cy5qb2luKHNlbGYuX3BvcnQucmVzdWx0c19kaXJlY3RvcnkoKSwgJ3N5bWZzJykKLSAgICAgICAg
ICAgIHByaW50ICJBTkRST0lEX1NZTUZTIG5vdCBzZXQsIHVzaW5nICVzIiAlIHN5bWZzX3BhdGgK
LQotICAgICAgICAjIGZpbmQgdGhlIGluc3RhbGxlZCBwYXRoLCBhbmQgdGhlIHBhdGggb2YgdGhl
IHN5bWJvbGVkIGJ1aWx0IGxpYnJhcnkKLSAgICAgICAgIyBGSVhNRTogV2Ugc2hvdWxkIGdldCB0
aGUgaW5zdGFsbCBwYXRoIGZyb20gdGhlIGRldmljZSEKLSAgICAgICAgc3ltZnNfbGlicmFyeV9w
YXRoID0gZnMuam9pbihzeW1mc19wYXRoLCAiZGF0YS9hcHAtbGliLyVzLTEvJXMiICUgKERSVF9B
UFBfUEFDS0FHRSwgRFJUX0xJQlJBUllfTkFNRSkpCi0gICAgICAgIGJ1aWx0X2xpYnJhcnlfcGF0
aCA9IHNlbGYuX3BvcnQuX2J1aWxkX3BhdGgoJ2xpYicsIERSVF9MSUJSQVJZX05BTUUpCi0gICAg
ICAgIGFzc2VydChmcy5leGlzdHMoYnVpbHRfbGlicmFyeV9wYXRoKSkKLQotICAgICAgICAjIEZJ
WE1FOiBJZGVhbGx5IHdlJ2QgY2hlY2sgdGhlIHNoYTEncyBmaXJzdCBhbmQgbWFrZSBhIHNvZnQt
bGluayBpbnN0ZWFkIG9mIGNvcHlpbmcgKHNpbmNlIHdlIHByb2JhYmx5IG5ldmVyIGNhcmUgYWJv
dXQgd2luZG93cykuCi0gICAgICAgIHByaW50ICJVcGRhdGluZyBzeW1mcyBsaWJhcnkgKCVzKSBm
cm9tIGJ1aWx0IGNvcHkgKCVzKSIgJSAoc3ltZnNfbGlicmFyeV9wYXRoLCBidWlsdF9saWJyYXJ5
X3BhdGgpCi0gICAgICAgIGZzLm1heWJlX21ha2VfZGlyZWN0b3J5KGZzLmRpcm5hbWUoc3ltZnNf
bGlicmFyeV9wYXRoKSkKLSAgICAgICAgZnMuY29weWZpbGUoYnVpbHRfbGlicmFyeV9wYXRoLCBz
eW1mc19saWJyYXJ5X3BhdGgpCi0KLSAgICAgICAgcmV0dXJuIHN5bWZzX3BhdGgKLQotICAgIGRl
ZiBfc2V0dXBfbWQ1c3VtX2FuZF9wdXNoX2RhdGFfaWZfbmVlZGVkKHNlbGYpOgotICAgICAgICBz
ZWxmLl9tZDVzdW1fcGF0aCA9IHNlbGYuX3BvcnQucGF0aF90b19tZDVzdW0oKQotICAgICAgICBp
ZiBub3Qgc2VsZi5fZmlsZV9leGlzdHNfb25fZGV2aWNlKE1ENVNVTV9ERVZJQ0VfUEFUSCk6Ci0g
ICAgICAgICAgICBpZiBub3Qgc2VsZi5fcHVzaF90b19kZXZpY2Uoc2VsZi5fbWQ1c3VtX3BhdGgs
IE1ENVNVTV9ERVZJQ0VfUEFUSCk6Ci0gICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJy
b3IoJ0NvdWxkIG5vdCBwdXNoIG1kNXN1bSB0byBkZXZpY2UnKQotCi0gICAgICAgIHNlbGYuX3B1
c2hfZXhlY3V0YWJsZSgpCi0gICAgICAgIHNlbGYuX3B1c2hfZm9udHMoKQotICAgICAgICBzZWxm
Ll9wdXNoX3Rlc3RfcmVzb3VyY2VzKCkKLSAgICAgICAgc2VsZi5fcHVzaF9wbGF0Zm9ybV9yZXNv
dXJjZXMoKQotCi0gICAgZGVmIF9zZXR1cF90ZXN0KHNlbGYpOgotICAgICAgICBpZiBzZWxmLl9o
YXNfc2V0dXA6Ci0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICBzZWxmLl9yZXN0YXJ0X2Fk
Yl9hc19yb290KCkKLSAgICAgICAgc2VsZi5fc2V0dXBfbWQ1c3VtX2FuZF9wdXNoX2RhdGFfaWZf
bmVlZGVkKCkKLSAgICAgICAgc2VsZi5faGFzX3NldHVwID0gVHJ1ZQotICAgICAgICBzZWxmLl9z
ZXR1cF9wZXJmb3JtYW5jZSgpCi0KLSAgICAgICAgIyBSZXF1aXJlZCBieSB3ZWJraXRfc3VwcG9y
dDo6R2V0V2ViS2l0Um9vdERpckZpbGVQYXRoKCkuCi0gICAgICAgICMgT3RoZXIgZGlyZWN0b3Jp
ZXMgd2lsbCBiZSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgYnkgYWRiIHB1c2guCi0gICAgICAgIHNl
bGYuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ21rZGlyJywgJy1wJywgREVWSUNFX1NPVVJD
RV9ST09UX0RJUiArICdjaHJvbWUnXSkKLQotICAgICAgICAjIEFsbG93IHRoZSBEdW1wUmVuZGVy
VHJlZSBhcHAgdG8gZnVsbHkgYWNjZXNzIHRoZSBkaXJlY3RvcnkuCi0gICAgICAgICMgVGhlIG5h
dGl2ZSBjb2RlIG5lZWRzIHRoZSBwZXJtaXNzaW9uIHRvIHdyaXRlIHRlbXBvcmFyeSBmaWxlcyBh
bmQgY3JlYXRlIHBpcGVzIGhlcmUuCi0gICAgICAgIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3No
ZWxsJywgJ21rZGlyJywgJy1wJywgREVWSUNFX0RSVF9ESVJdKQotICAgICAgICBzZWxmLl9ydW5f
YWRiX2NvbW1hbmQoWydzaGVsbCcsICdjaG1vZCcsICc3NzcnLCBERVZJQ0VfRFJUX0RJUl0pCi0K
LSAgICAgICAgIyBEZWxldGUgdGhlIGRpc2sgY2FjaGUgaWYgYW55IHRvIGVuc3VyZSBhIGNsZWFu
IHRlc3QgcnVuLgotICAgICAgICAjIFRoaXMgaXMgbGlrZSB3aGF0J3MgZG9uZSBpbiBDaHJvbWl1
bVBvcnQuc2V0dXBfdGVzdF9ydW4gYnV0IG9uIHRoZSBkZXZpY2UuCi0gICAgICAgIHNlbGYuX3J1
bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ3JtJywgJy1yJywgRFJUX0FQUF9DQUNIRV9ESVJdKQot
Ci0gICAgZGVmIF9sb2dfZXJyb3Ioc2VsZiwgbWVzc2FnZSk6Ci0gICAgICAgIF9sb2cuZXJyb3Io
J1slc10gJXMnICUgKHNlbGYuX2RldmljZV9zZXJpYWwsIG1lc3NhZ2UpKQotCi0gICAgZGVmIF9s
b2dfZGVidWcoc2VsZiwgbWVzc2FnZSk6Ci0gICAgICAgIF9sb2cuZGVidWcoJ1slc10gJXMnICUg
KHNlbGYuX2RldmljZV9zZXJpYWwsIG1lc3NhZ2UpKQotCi0gICAgZGVmIF9hYm9ydChzZWxmLCBt
ZXNzYWdlKToKLSAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ1slc10gJXMnICUgKHNlbGYu
X2RldmljZV9zZXJpYWwsIG1lc3NhZ2UpKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBf
ZXh0cmFjdF9oYXNoZXNfZnJvbV9tZDVzdW1fb3V0cHV0KG1kNXN1bV9vdXRwdXQpOgotICAgICAg
ICBhc3NlcnQgbWQ1c3VtX291dHB1dAotICAgICAgICByZXR1cm4gW2xpbmUuc3BsaXQoJyAgJylb
MF0gZm9yIGxpbmUgaW4gbWQ1c3VtX291dHB1dF0KLQotICAgIGRlZiBfcHVzaF9maWxlX2lmX25l
ZWRlZChzZWxmLCBob3N0X2ZpbGUsIGRldmljZV9maWxlKToKLSAgICAgICAgYXNzZXJ0IG9zLnBh
dGguZXhpc3RzKGhvc3RfZmlsZSkKLSAgICAgICAgZGV2aWNlX2hhc2hlcyA9IHNlbGYuX2V4dHJh
Y3RfaGFzaGVzX2Zyb21fbWQ1c3VtX291dHB1dCgKLSAgICAgICAgICAgICAgICBzZWxmLl9wb3J0
Lmhvc3QuZXhlY3V0aXZlLnBvcGVuKHNlbGYuX2FkYl9jb21tYW5kKCkgKyBbJ3NoZWxsJywgTUQ1
U1VNX0RFVklDRV9QQVRILCBkZXZpY2VfZmlsZV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5zdGRvdXQpCi0g
ICAgICAgIGhvc3RfaGFzaGVzID0gc2VsZi5fZXh0cmFjdF9oYXNoZXNfZnJvbV9tZDVzdW1fb3V0
cHV0KAotICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQuaG9zdC5leGVjdXRpdmUucG9wZW4oYXJn
cz1bJyVzX2hvc3QnICUgc2VsZi5fbWQ1c3VtX3BhdGgsIGhvc3RfZmlsZV0sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5Q
SVBFKS5zdGRvdXQpCi0gICAgICAgIGlmIGhvc3RfaGFzaGVzIGFuZCBkZXZpY2VfaGFzaGVzID09
IGhvc3RfaGFzaGVzOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHNlbGYuX3B1c2hfdG9f
ZGV2aWNlKGhvc3RfZmlsZSwgZGV2aWNlX2ZpbGUpCi0KLSAgICBkZWYgX3B1c2hfZXhlY3V0YWJs
ZShzZWxmKToKLSAgICAgICAgc2VsZi5fcHVzaF9maWxlX2lmX25lZWRlZChzZWxmLl9wb3J0LnBh
dGhfdG9fZm9yd2FyZGVyKCksIERFVklDRV9GT1JXQVJERVJfUEFUSCkKLSAgICAgICAgc2VsZi5f
cHVzaF9maWxlX2lmX25lZWRlZChzZWxmLl9wb3J0Ll9idWlsZF9wYXRoKCdEdW1wUmVuZGVyVHJl
ZS5wYWsnKSwgREVWSUNFX0RSVF9ESVIgKyAnRHVtcFJlbmRlclRyZWUucGFrJykKLSAgICAgICAg
c2VsZi5fcHVzaF9maWxlX2lmX25lZWRlZChzZWxmLl9wb3J0Ll9idWlsZF9wYXRoKCdEdW1wUmVu
ZGVyVHJlZV9yZXNvdXJjZXMnKSwgREVWSUNFX0RSVF9ESVIgKyAnRHVtcFJlbmRlclRyZWVfcmVz
b3VyY2VzJykKLSAgICAgICAgc2VsZi5fcHVzaF9maWxlX2lmX25lZWRlZChzZWxmLl9wb3J0Ll9i
dWlsZF9wYXRoKCdhbmRyb2lkX21haW5fZm9udHMueG1sJyksIERFVklDRV9EUlRfRElSICsgJ2Fu
ZHJvaWRfbWFpbl9mb250cy54bWwnKQotICAgICAgICBzZWxmLl9wdXNoX2ZpbGVfaWZfbmVlZGVk
KHNlbGYuX3BvcnQuX2J1aWxkX3BhdGgoJ2FuZHJvaWRfZmFsbGJhY2tfZm9udHMueG1sJyksIERF
VklDRV9EUlRfRElSICsgJ2FuZHJvaWRfZmFsbGJhY2tfZm9udHMueG1sJykKLSAgICAgICAgc2Vs
Zi5fcnVuX2FkYl9jb21tYW5kKFsndW5pbnN0YWxsJywgRFJUX0FQUF9QQUNLQUdFXSkKLSAgICAg
ICAgZHJ0X2hvc3RfcGF0aCA9IHNlbGYuX3BvcnQuX3BhdGhfdG9fZHJpdmVyKCkKLSAgICAgICAg
aW5zdGFsbF9yZXN1bHQgPSBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydpbnN0YWxsJywgZHJ0X2hv
c3RfcGF0aF0pCi0gICAgICAgIGlmIGluc3RhbGxfcmVzdWx0LmZpbmQoJ1N1Y2Nlc3MnKSA9PSAt
MToKLSAgICAgICAgICAgIHNlbGYuX2Fib3J0KCdGYWlsZWQgdG8gaW5zdGFsbCAlcyBvbnRvIGRl
dmljZTogJXMnICUgKGRydF9ob3N0X3BhdGgsIGluc3RhbGxfcmVzdWx0KSkKLQotICAgIGRlZiBf
cHVzaF9mb250cyhzZWxmKToKLSAgICAgICAgc2VsZi5fbG9nX2RlYnVnKCdQdXNoaW5nIGZvbnRz
JykKLSAgICAgICAgcGF0aF90b19haGVtX2ZvbnQgPSBzZWxmLl9wb3J0Ll9idWlsZF9wYXRoKCdB
SEVNX19fXy5UVEYnKQotICAgICAgICBzZWxmLl9wdXNoX2ZpbGVfaWZfbmVlZGVkKHBhdGhfdG9f
YWhlbV9mb250LCBERVZJQ0VfRk9OVFNfRElSICsgJ0FIRU1fX19fLlRURicpCi0gICAgICAgIGZv
ciAoaG9zdF9kaXJzLCBmb250X2ZpbGUsIHBhY2thZ2UpIGluIEhPU1RfRk9OVF9GSUxFUzoKLSAg
ICAgICAgICAgIGZvciBob3N0X2RpciBpbiBob3N0X2RpcnM6Ci0gICAgICAgICAgICAgICAgaG9z
dF9mb250X3BhdGggPSBob3N0X2RpciArIGZvbnRfZmlsZQotICAgICAgICAgICAgICAgIGlmIHNl
bGYuX3BvcnQuX2NoZWNrX2ZpbGVfZXhpc3RzKGhvc3RfZm9udF9wYXRoLCAnJywgbG9nZ2luZz1G
YWxzZSk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3B1c2hfZmlsZV9pZl9uZWVkZWQoaG9z
dF9mb250X3BhdGgsIERFVklDRV9GT05UU19ESVIgKyBmb250X2ZpbGUpCi0KLSAgICBkZWYgX3B1
c2hfdGVzdF9yZXNvdXJjZXMoc2VsZik6Ci0gICAgICAgIHNlbGYuX2xvZ19kZWJ1ZygnUHVzaGlu
ZyB0ZXN0IHJlc291cmNlcycpCi0gICAgICAgIGZvciByZXNvdXJjZSBpbiBURVNUX1JFU09VUkNF
U19UT19QVVNIOgotICAgICAgICAgICAgc2VsZi5fcHVzaF9maWxlX2lmX25lZWRlZChzZWxmLl9w
b3J0LmxheW91dF90ZXN0c19kaXIoKSArICcvJyArIHJlc291cmNlLCBERVZJQ0VfTEFZT1VUX1RF
U1RTX0RJUiArIHJlc291cmNlKQotCi0gICAgZGVmIF9wdXNoX3BsYXRmb3JtX3Jlc291cmNlcyhz
ZWxmKToKLSAgICAgICAgc2VsZi5fbG9nX2RlYnVnKCdQdXNoaW5nIHBsYXRmb3JtIHJlc291cmNl
cycpCi0gICAgICAgIGV4dGVybmFsX3N0b3JhZ2UgPSBzZWxmLl9wb3J0Ll9maWxlc3lzdGVtLmpv
aW4oc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnZWNobyAkRVhURVJOQUxfU1RPUkFH
RSddKS5zdHJpcCgpLCAnU291cmNlJywgJ1dlYktpdCcsICdjaHJvbWl1bScpCi0gICAgICAgIGZv
ciByZXNvdXJjZSBpbiBXRUJLSVRfUExBVEZPUk1fUkVTT1VSQ0VTX1RPX1BVU0g6Ci0gICAgICAg
ICAgICBzZWxmLl9wdXNoX2ZpbGVfaWZfbmVlZGVkKHNlbGYuX3BvcnQuX2Nocm9taXVtX2Jhc2Vf
ZGlyKHNlbGYuX3BvcnQuX2ZpbGVzeXN0ZW0pICsgJy8nICsgcmVzb3VyY2UsIGV4dGVybmFsX3N0
b3JhZ2UgKyAnLycgKyByZXNvdXJjZSkKLQotICAgIGRlZiBfcmVzdGFydF9hZGJfYXNfcm9vdChz
ZWxmKToKLSAgICAgICAgb3V0cHV0ID0gc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsncm9vdCddKQot
ICAgICAgICBpZiAnYWRiZCBpcyBhbHJlYWR5IHJ1bm5pbmcgYXMgcm9vdCcgaW4gb3V0cHV0Ogot
ICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGVsaWYgbm90ICdyZXN0YXJ0aW5nIGFkYmQgYXMg
cm9vdCcgaW4gb3V0cHV0OgotICAgICAgICAgICAgc2VsZi5fbG9nX2Vycm9yKCdVbnJlY29nbml6
ZWQgb3V0cHV0IGZyb20gYWRiIHJvb3Q6ICVzJyAlIG91dHB1dCkKLQotICAgICAgICAjIFJlZ2Fy
ZGxlc3MgdGhlIG91dHB1dCwgZ2l2ZSB0aGUgZGV2aWNlIGEgbW9tZW50IHRvIGNvbWUgYmFjayBv
bmxpbmUuCi0gICAgICAgIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3dhaXQtZm9yLWRldmljZSdd
KQotCi0gICAgZGVmIF9ydW5fYWRiX2NvbW1hbmQoc2VsZiwgY21kLCBpZ25vcmVfZXJyb3I9RmFs
c2UpOgotICAgICAgICBzZWxmLl9sb2dfZGVidWcoJ1J1biBhZGIgY29tbWFuZDogJyArIHN0cihj
bWQpKQotICAgICAgICBpZiBpZ25vcmVfZXJyb3I6Ci0gICAgICAgICAgICBlcnJvcl9oYW5kbGVy
ID0gc2VsZi5fcG9ydC5fZXhlY3V0aXZlLmlnbm9yZV9lcnJvcgotICAgICAgICBlbHNlOgotICAg
ICAgICAgICAgZXJyb3JfaGFuZGxlciA9IE5vbmUKLSAgICAgICAgcmVzdWx0ID0gc2VsZi5fcG9y
dC5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKHNlbGYuX2FkYl9jb21tYW5kKCkgKyBjbWQsIGVycm9y
X2hhbmRsZXI9ZXJyb3JfaGFuZGxlcikKLSAgICAgICAgIyBMaW1pdCB0aGUgbGVuZ3RoIHRvIGF2
b2lkIHRvbyB2ZXJib3NlIG91dHB1dCBvZiBjb21tYW5kcyBsaWtlICdhZGIgbG9nY2F0JyBhbmQg
J2NhdCAvZGF0YS90b21ic3RvbmVzL3RvbWJzdG9uZTAxJwotICAgICAgICAjIHdob3NlIG91dHB1
dHMgYXJlIG5vcm1hbGx5IHByaW50ZWQgaW4gbGF0ZXIgbG9ncy4KLSAgICAgICAgc2VsZi5fbG9n
X2RlYnVnKCdSdW4gYWRiIHJlc3VsdDogJyArIHJlc3VsdFs6ODBdKQotICAgICAgICByZXR1cm4g
cmVzdWx0Ci0KLSAgICBkZWYgX2xpbmtfZGV2aWNlX2ZpbGUoc2VsZiwgZnJvbV9maWxlLCB0b19m
aWxlLCBpZ25vcmVfZXJyb3I9RmFsc2UpOgotICAgICAgICAjIHJtIHRvX2ZpbGUgZmlyc3QgdG8g
bWFrZSBzdXJlIHRoYXQgbG4gc3VjY2VlZHMuCi0gICAgICAgIHNlbGYuX3J1bl9hZGJfY29tbWFu
ZChbJ3NoZWxsJywgJ3JtJywgdG9fZmlsZV0sIGlnbm9yZV9lcnJvcikKLSAgICAgICAgcmV0dXJu
IHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2xuJywgJy1zJywgZnJvbV9maWxlLCB0
b19maWxlXSwgaWdub3JlX2Vycm9yKQotCi0gICAgZGVmIF9wdXNoX3RvX2RldmljZShzZWxmLCBo
b3N0X3BhdGgsIGRldmljZV9wYXRoLCBpZ25vcmVfZXJyb3I9RmFsc2UpOgotICAgICAgICByZXR1
cm4gc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsncHVzaCcsIGhvc3RfcGF0aCwgZGV2aWNlX3BhdGhd
LCBpZ25vcmVfZXJyb3IpCi0KLSAgICBkZWYgX3B1bGxfZnJvbV9kZXZpY2Uoc2VsZiwgZGV2aWNl
X3BhdGgsIGhvc3RfcGF0aCwgaWdub3JlX2Vycm9yPUZhbHNlKToKLSAgICAgICAgcmV0dXJuIHNl
bGYuX3J1bl9hZGJfY29tbWFuZChbJ3B1bGwnLCBkZXZpY2VfcGF0aCwgaG9zdF9wYXRoXSwgaWdu
b3JlX2Vycm9yKQotCi0gICAgZGVmIF9nZXRfbGFzdF9zdGFja3RyYWNlKHNlbGYpOgotICAgICAg
ICB0b21ic3RvbmVzID0gc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnbHMnLCAnLW4n
LCAnL2RhdGEvdG9tYnN0b25lcyddKQotICAgICAgICBpZiBub3QgdG9tYnN0b25lcyBvciB0b21i
c3RvbmVzLnN0YXJ0c3dpdGgoJy9kYXRhL3RvbWJzdG9uZXM6IE5vIHN1Y2ggZmlsZSBvciBkaXJl
Y3RvcnknKToKLSAgICAgICAgICAgIHNlbGYuX2xvZ19lcnJvcignRFJUIGNyYXNoZWQsIGJ1dCBu
byB0b21ic3RvbmUgZm91bmQhJykKLSAgICAgICAgICAgIHJldHVybiAnJwotICAgICAgICB0b21i
c3RvbmVzID0gdG9tYnN0b25lcy5yc3RyaXAoKS5zcGxpdCgnXG4nKQotICAgICAgICBsYXN0X3Rv
bWJzdG9uZSA9IHRvbWJzdG9uZXNbMF0uc3BsaXQoKQotICAgICAgICBmb3IgdG9tYnN0b25lIGlu
IHRvbWJzdG9uZXNbMTpdOgotICAgICAgICAgICAgIyBGb3JtYXQgb2YgZmllbGRzOgotICAgICAg
ICAgICAgIyAwICAgICAgICAgIDEgICAgICAyICAgICAgMyAgICAgNCAgICAgICAgICA1ICAgICA2
Ci0gICAgICAgICAgICAjIHBlcm1pc3Npb24gdWlkICAgIGdpZCAgICBzaXplICBkYXRlICAgICAg
IHRpbWUgIGZpbGVuYW1lCi0gICAgICAgICAgICAjIC1ydy0tLS0tLS0gMTAwMCAgIDEwMDAgICA0
NTg1OSAyMDExLTA0LTEzIDA2OjAwIHRvbWJzdG9uZV8wMAotICAgICAgICAgICAgZmllbGRzID0g
dG9tYnN0b25lLnNwbGl0KCkKLSAgICAgICAgICAgIGlmIChmaWVsZHNbNF0gKyBmaWVsZHNbNV0g
Pj0gbGFzdF90b21ic3RvbmVbNF0gKyBsYXN0X3RvbWJzdG9uZVs1XSk6Ci0gICAgICAgICAgICAg
ICAgbGFzdF90b21ic3RvbmUgPSBmaWVsZHMKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAg
ICAgICAgYnJlYWsKLQotICAgICAgICAjIFVzZSBBbmRyb2lkIHRvb2wgdmVuZG9yL2dvb2dsZS90
b29scy9zdGFjayB0byBjb252ZXJ0IHRoZSByYXcKLSAgICAgICAgIyBzdGFjayB0cmFjZSBpbnRv
IGEgaHVtYW4gcmVhZGFibGUgZm9ybWF0LCBpZiBuZWVkZWQuCi0gICAgICAgICMgSXQgdGFrZXMg
YSBsb25nIHRpbWUsIHNvIGRvbid0IGRvIGl0IGhlcmUuCi0gICAgICAgIHJldHVybiAnJXNcbiVz
JyAlICgnICcuam9pbihsYXN0X3RvbWJzdG9uZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdjYXQnLCAnL2RhdGEvdG9tYnN0b25l
cy8nICsgbGFzdF90b21ic3RvbmVbNl1dKSkKLQotICAgIGRlZiBfZ2V0X2xvZ2NhdChzZWxmKToK
LSAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ2xvZ2NhdCcsICctZCcsICct
dicsICd0aHJlYWR0aW1lJ10pCi0KLSAgICBkZWYgX3NldHVwX3BlcmZvcm1hbmNlKHNlbGYpOgot
ICAgICAgICAjIERpc2FibGUgQ1BVIHNjYWxpbmcgYW5kIGRyb3AgcmFtIGNhY2hlIHRvIHJlZHVj
ZSBub2lzZSBpbiB0ZXN0cwotICAgICAgICBpZiBub3Qgc2VsZi5fb3JpZ2luYWxfZ292ZXJub3Jz
OgotICAgICAgICAgICAgZ292ZXJub3JfZmlsZXMgPSBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydz
aGVsbCcsICdscycsIFNDQUxJTkdfR09WRVJOT1JTX1BBVFRFUk5dKQotICAgICAgICAgICAgaWYg
Z292ZXJub3JfZmlsZXMuZmluZCgnTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeScpID09IC0xOgot
ICAgICAgICAgICAgICAgIGZvciBmaWxlIGluIGdvdmVybm9yX2ZpbGVzLnNwbGl0KCk6Ci0gICAg
ICAgICAgICAgICAgICAgIHNlbGYuX29yaWdpbmFsX2dvdmVybm9yc1tmaWxlXSA9IHNlbGYuX3J1
bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2NhdCcsIGZpbGVdKS5zdHJpcCgpCi0gICAgICAgICAg
ICAgICAgICAgIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2VjaG8nLCAncGVyZm9y
bWFuY2UnLCAnPicsIGZpbGVdKQotCi0gICAgZGVmIF90ZWFyZG93bl9wZXJmb3JtYW5jZShzZWxm
KToKLSAgICAgICAgZm9yIGZpbGUsIG9yaWdpbmFsX2NvbnRlbnQgaW4gc2VsZi5fb3JpZ2luYWxf
Z292ZXJub3JzLml0ZW1zKCk6Ci0gICAgICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydz
aGVsbCcsICdlY2hvJywgb3JpZ2luYWxfY29udGVudCwgJz4nLCBmaWxlXSkKLSAgICAgICAgc2Vs
Zi5fb3JpZ2luYWxfZ292ZXJub3JzID0ge30KLQotICAgIGRlZiBfZ2V0X2NyYXNoX2xvZyhzZWxm
LCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbik6Ci0gICAgICAgIGlmIG5vdCBzdGRvdXQ6Ci0g
ICAgICAgICAgICBzdGRvdXQgPSAnJwotICAgICAgICBzdGRvdXQgKz0gJyoqKioqKioqKiBbJXNd
IExvZ2NhdDpcbiVzJyAlIChzZWxmLl9kZXZpY2Vfc2VyaWFsLCBzZWxmLl9nZXRfbG9nY2F0KCkp
Ci0gICAgICAgIGlmIG5vdCBzdGRlcnI6Ci0gICAgICAgICAgICBzdGRlcnIgPSAnJwotICAgICAg
ICBzdGRlcnIgKz0gJyoqKioqKioqKiBbJXNdIFRvbWJzdG9uZSBmaWxlOlxuJXMnICUgKHNlbGYu
X2RldmljZV9zZXJpYWwsIHNlbGYuX2dldF9sYXN0X3N0YWNrdHJhY2UoKSkKLSAgICAgICAgcmV0
dXJuIHN1cGVyKENocm9taXVtQW5kcm9pZERyaXZlciwgc2VsZikuX2dldF9jcmFzaF9sb2coc3Rk
b3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4pCi0KLSAgICBkZWYgY21kX2xpbmUoc2VsZiwgcGl4ZWxf
dGVzdHMsIHBlcl90ZXN0X2FyZ3MpOgotICAgICAgICAjIFRoZSByZXR1cm5lZCBjb21tYW5kIGxp
bmUgaXMgdXNlZCB0byBzdGFydCBfc2VydmVyX3Byb2Nlc3MuIEluIG91ciBjYXNlLCBpdCdzIGFu
IGludGVyYWN0aXZlICdhZGIgc2hlbGwnLgotICAgICAgICAjIFRoZSBjb21tYW5kIGxpbmUgcGFz
c2VkIHRvIHRoZSBEUlQgcHJvY2VzcyBpcyByZXR1cm5lZCBieSBfZHJ0X2NtZF9saW5lKCkgaW5z
dGVhZC4KLSAgICAgICAgcmV0dXJuIHNlbGYuX2FkYl9jb21tYW5kKCkgKyBbJ3NoZWxsJ10KLQot
ICAgIGRlZiBfZmlsZV9leGlzdHNfb25fZGV2aWNlKHNlbGYsIGZ1bGxfZmlsZV9wYXRoKToKLSAg
ICAgICAgYXNzZXJ0IGZ1bGxfZmlsZV9wYXRoLnN0YXJ0c3dpdGgoJy8nKQotICAgICAgICByZXR1
cm4gc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnbHMnLCBmdWxsX2ZpbGVfcGF0aF0p
LnN0cmlwKCkgPT0gZnVsbF9maWxlX3BhdGgKLQotICAgIGRlZiBfZHJ0X2NtZF9saW5lKHNlbGYs
IHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKToKLSAgICAgICAgcmV0dXJuIGRyaXZlci5Ecml2
ZXIuY21kX2xpbmUoc2VsZiwgcGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpICsgWyctLWNyZWF0
ZS1zdGRpbi1maWZvJywgJy0tc2VwYXJhdGUtc3RkZXJyLWZpZm8nXQotCi0gICAgQHN0YXRpY21l
dGhvZAotICAgIGRlZiBfbG9vcF93aXRoX3RpbWVvdXQoY29uZGl0aW9uLCB0aW1lb3V0X3NlY3Mp
OgotICAgICAgICBkZWFkbGluZSA9IHRpbWUudGltZSgpICsgdGltZW91dF9zZWNzCi0gICAgICAg
IHdoaWxlIHRpbWUudGltZSgpIDwgZGVhZGxpbmU6Ci0gICAgICAgICAgICBpZiBjb25kaXRpb24o
KToKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICByZXR1cm4gRmFsc2UKLQot
ICAgIGRlZiBfYWxsX3BpcGVzX2NyZWF0ZWQoc2VsZik6Ci0gICAgICAgIHJldHVybiAoc2VsZi5f
ZmlsZV9leGlzdHNfb25fZGV2aWNlKHNlbGYuX2luX2ZpZm9fcGF0aCkgYW5kCi0gICAgICAgICAg
ICAgICAgc2VsZi5fZmlsZV9leGlzdHNfb25fZGV2aWNlKHNlbGYuX291dF9maWZvX3BhdGgpIGFu
ZAotICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVfZXhpc3RzX29uX2RldmljZShzZWxmLl9lcnJf
Zmlmb19wYXRoKSkKLQotICAgIGRlZiBfcmVtb3ZlX2FsbF9waXBlcyhzZWxmKToKLSAgICAgICAg
Zm9yIGZpbGUgaW4gW3NlbGYuX2luX2ZpZm9fcGF0aCwgc2VsZi5fb3V0X2ZpZm9fcGF0aCwgc2Vs
Zi5fZXJyX2ZpZm9fcGF0aF06Ci0gICAgICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydz
aGVsbCcsICdybScsIGZpbGVdKQotCi0gICAgICAgIHJldHVybiAobm90IHNlbGYuX2ZpbGVfZXhp
c3RzX29uX2RldmljZShzZWxmLl9pbl9maWZvX3BhdGgpIGFuZAotICAgICAgICAgICAgICAgIG5v
dCBzZWxmLl9maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZi5fb3V0X2ZpZm9fcGF0aCkgYW5kCi0g
ICAgICAgICAgICAgICAgbm90IHNlbGYuX2ZpbGVfZXhpc3RzX29uX2RldmljZShzZWxmLl9lcnJf
Zmlmb19wYXRoKSkKLQotICAgIGRlZiBydW5fdGVzdChzZWxmLCBkcml2ZXJfaW5wdXQsIHN0b3Bf
d2hlbl9kb25lKToKLSAgICAgICAgYmFzZSA9IHNlbGYuX3BvcnQubG9va3VwX3ZpcnR1YWxfdGVz
dF9iYXNlKGRyaXZlcl9pbnB1dC50ZXN0X25hbWUpCi0gICAgICAgIGlmIGJhc2U6Ci0gICAgICAg
ICAgICBkcml2ZXJfaW5wdXQgPSBjb3B5LmNvcHkoZHJpdmVyX2lucHV0KQotICAgICAgICAgICAg
ZHJpdmVyX2lucHV0LmFyZ3MgPSBzZWxmLl9wb3J0Lmxvb2t1cF92aXJ0dWFsX3Rlc3RfYXJncyhk
cml2ZXJfaW5wdXQudGVzdF9uYW1lKQotICAgICAgICAgICAgZHJpdmVyX2lucHV0LnRlc3RfbmFt
ZSA9IGJhc2UKLSAgICAgICAgcmV0dXJuIHN1cGVyKENocm9taXVtQW5kcm9pZERyaXZlciwgc2Vs
ZikucnVuX3Rlc3QoZHJpdmVyX2lucHV0LCBzdG9wX3doZW5fZG9uZSkKLQotICAgIGRlZiBzdGFy
dChzZWxmLCBwaXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncyk6Ci0gICAgICAgICMgT25seSBvbmUg
ZHJpdmVyIGluc3RhbmNlIGlzIGFsbG93ZWQgYmVjYXVzZSBvZiB0aGUgbmF0dXJlIG9mIEFuZHJv
aWQgYWN0aXZpdHkuCi0gICAgICAgICMgVGhlIHNpbmdsZSBkcml2ZXIgbmVlZHMgdG8gcmVzdGFy
dCBEdW1wUmVuZGVyVHJlZSB3aGVuIHRoZSBjb21tYW5kIGxpbmUgY2hhbmdlcy4KLSAgICAgICAg
Y21kX2xpbmUgPSBzZWxmLl9kcnRfY21kX2xpbmUocGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3Mp
Ci0gICAgICAgIGlmIGNtZF9saW5lICE9IHNlbGYuX2NtZF9saW5lOgotICAgICAgICAgICAgc2Vs
Zi5zdG9wKCkKLSAgICAgICAgICAgIHNlbGYuX2NtZF9saW5lID0gY21kX2xpbmUKLSAgICAgICAg
c3VwZXIoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLCBzZWxmKS5zdGFydChwaXhlbF90ZXN0cywgcGVy
X3Rlc3RfYXJncykKLQotICAgIGRlZiBfc3RhcnQoc2VsZiwgcGl4ZWxfdGVzdHMsIHBlcl90ZXN0
X2FyZ3MpOgotICAgICAgICBzZWxmLl9zZXR1cF90ZXN0KCkKLQotICAgICAgICBmb3IgcmV0cmll
cyBpbiByYW5nZSgzKToKLSAgICAgICAgICAgIGlmIHNlbGYuX3N0YXJ0X29uY2UocGl4ZWxfdGVz
dHMsIHBlcl90ZXN0X2FyZ3MpOgotICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAg
c2VsZi5fbG9nX2Vycm9yKCdGYWlsZWQgdG8gc3RhcnQgRHVtcFJlbmRlclRyZWUgYXBwbGljYXRp
b24uIFJldHJpZXM9JWQuIExvZzolcycgJSAocmV0cmllcywgc2VsZi5fZ2V0X2xvZ2NhdCgpKSkK
LSAgICAgICAgICAgIHNlbGYuc3RvcCgpCi0gICAgICAgICAgICB0aW1lLnNsZWVwKDIpCi0gICAg
ICAgIHNlbGYuX2Fib3J0KCdGYWlsZWQgdG8gc3RhcnQgRHVtcFJlbmRlclRyZWUgYXBwbGljYXRp
b24gbXVsdGlwbGUgdGltZXMuIEdpdmUgdXAuJykKLQotICAgIGRlZiBfc3RhcnRfb25jZShzZWxm
LCBwaXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncyk6Ci0gICAgICAgIHN1cGVyKENocm9taXVtQW5k
cm9pZERyaXZlciwgc2VsZikuX3N0YXJ0KHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKQotCi0g
ICAgICAgIHNlbGYuX2xvZ19kZWJ1ZygnU3RhcnRpbmcgZm9yd2FyZGVyJykKLSAgICAgICAgc2Vs
Zi5fZm9yd2FyZGVyX3Byb2Nlc3MgPSBzZWxmLl9wb3J0Ll9zZXJ2ZXJfcHJvY2Vzc19jb25zdHJ1
Y3RvcigKLSAgICAgICAgICAgIHNlbGYuX3BvcnQsICdGb3J3YXJkZXInLCBzZWxmLl9hZGJfY29t
bWFuZCgpICsgWydzaGVsbCcsICclcyAtRCAlcycgJSAoREVWSUNFX0ZPUldBUkRFUl9QQVRILCBG
T1JXQVJEX1BPUlRTKV0pCi0gICAgICAgIHNlbGYuX2ZvcndhcmRlcl9wcm9jZXNzLnN0YXJ0KCkK
LQotICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydsb2djYXQnLCAnLWMnXSkKLSAgICAg
ICAgc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnZWNobyddICsgc2VsZi5fY21kX2xp
bmUgKyBbJz4nLCBDT01NQU5EX0xJTkVfRklMRV0pCi0gICAgICAgIHN0YXJ0X3Jlc3VsdCA9IHNl
bGYuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2FtJywgJ3N0YXJ0JywgJy1lJywgJ1J1bklu
U3ViVGhyZWFkJywgJy1uJywgRFJUX0FDVElWSVRZX0ZVTExfTkFNRV0pCi0gICAgICAgIGlmIHN0
YXJ0X3Jlc3VsdC5maW5kKCdFeGNlcHRpb24nKSAhPSAtMToKLSAgICAgICAgICAgIHNlbGYuX2xv
Z19lcnJvcignRmFpbGVkIHRvIHN0YXJ0IER1bXBSZW5kZXJUcmVlIGFwcGxpY2F0aW9uLiBFeGNl
cHRpb246XG4nICsgc3RhcnRfcmVzdWx0KQotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAg
ICAgICAgaWYgbm90IENocm9taXVtQW5kcm9pZERyaXZlci5fbG9vcF93aXRoX3RpbWVvdXQoc2Vs
Zi5fYWxsX3BpcGVzX2NyZWF0ZWQsIERSVF9TVEFSVF9TVE9QX1RJTUVPVVRfU0VDUyk6Ci0gICAg
ICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgICAgICAjIFJlYWQgYmFjayB0aGUgc2hlbGwgcHJv
bXB0IHRvIGVuc3VyZSBhZGIgc2hlbGwgcmVhZHkuCi0gICAgICAgIGRlYWRsaW5lID0gdGltZS50
aW1lKCkgKyBEUlRfU1RBUlRfU1RPUF9USU1FT1VUX1NFQ1MKLSAgICAgICAgc2VsZi5fc2VydmVy
X3Byb2Nlc3Muc3RhcnQoKQotICAgICAgICBzZWxmLl9yZWFkX3Byb21wdChkZWFkbGluZSkKLSAg
ICAgICAgc2VsZi5fbG9nX2RlYnVnKCdJbnRlcmFjdGl2ZSBzaGVsbCBzdGFydGVkJykKLQotICAg
ICAgICAjIFN0YXJ0IGEgcHJvY2VzcyB0byByZWFkIGZyb20gdGhlIHN0ZG91dCBmaWZvIG9mIHRo
ZSBEdW1wUmVuZGVyVHJlZSBhcHAgYW5kIHByaW50IHRvIHN0ZG91dC4KLSAgICAgICAgc2VsZi5f
bG9nX2RlYnVnKCdSZWRpcmVjdGluZyBzdGRvdXQgdG8gJyArIHNlbGYuX291dF9maWZvX3BhdGgp
Ci0gICAgICAgIHNlbGYuX3JlYWRfc3Rkb3V0X3Byb2Nlc3MgPSBzZWxmLl9wb3J0Ll9zZXJ2ZXJf
cHJvY2Vzc19jb25zdHJ1Y3RvcigKLSAgICAgICAgICAgIHNlbGYuX3BvcnQsICdSZWFkU3Rkb3V0
Jywgc2VsZi5fYWRiX2NvbW1hbmQoKSArIFsnc2hlbGwnLCAnY2F0Jywgc2VsZi5fb3V0X2ZpZm9f
cGF0aF0pCi0gICAgICAgIHNlbGYuX3JlYWRfc3Rkb3V0X3Byb2Nlc3Muc3RhcnQoKQotCi0gICAg
ICAgICMgU3RhcnQgYSBwcm9jZXNzIHRvIHJlYWQgZnJvbSB0aGUgc3RkZXJyIGZpZm8gb2YgdGhl
IER1bXBSZW5kZXJUcmVlIGFwcCBhbmQgcHJpbnQgdG8gc3Rkb3V0LgotICAgICAgICBzZWxmLl9s
b2dfZGVidWcoJ1JlZGlyZWN0aW5nIHN0ZGVyciB0byAnICsgc2VsZi5fZXJyX2ZpZm9fcGF0aCkK
LSAgICAgICAgc2VsZi5fcmVhZF9zdGRlcnJfcHJvY2VzcyA9IHNlbGYuX3BvcnQuX3NlcnZlcl9w
cm9jZXNzX2NvbnN0cnVjdG9yKAotICAgICAgICAgICAgc2VsZi5fcG9ydCwgJ1JlYWRTdGRlcnIn
LCBzZWxmLl9hZGJfY29tbWFuZCgpICsgWydzaGVsbCcsICdjYXQnLCBzZWxmLl9lcnJfZmlmb19w
YXRoXSkKLSAgICAgICAgc2VsZi5fcmVhZF9zdGRlcnJfcHJvY2Vzcy5zdGFydCgpCi0KLSAgICAg
ICAgc2VsZi5fbG9nX2RlYnVnKCdSZWRpcmVjdGluZyBzdGRpbiB0byAnICsgc2VsZi5faW5fZmlm
b19wYXRoKQotICAgICAgICBzZWxmLl9zZXJ2ZXJfcHJvY2Vzcy53cml0ZSgnY2F0ID4lc1xuJyAl
IHNlbGYuX2luX2ZpZm9fcGF0aCkKLQotICAgICAgICAjIENvbWJpbmUgdGhlIHN0ZG91dCBhbmQg
c3RkZXJyIHBpcGVzIGludG8gc2VsZi5fc2VydmVyX3Byb2Nlc3MuCi0gICAgICAgIHNlbGYuX3Nl
cnZlcl9wcm9jZXNzLnJlcGxhY2Vfb3V0cHV0cyhzZWxmLl9yZWFkX3N0ZG91dF9wcm9jZXNzLl9w
cm9jLnN0ZG91dCwgc2VsZi5fcmVhZF9zdGRlcnJfcHJvY2Vzcy5fcHJvYy5zdGRvdXQpCi0KLSAg
ICAgICAgZGVmIGRlYWRsb2NrX2RldGVjdG9yKHByb2Nlc3Nlcywgbm9ybWFsX3N0YXJ0dXBfZXZl
bnQpOgotICAgICAgICAgICAgaWYgbm90IENocm9taXVtQW5kcm9pZERyaXZlci5fbG9vcF93aXRo
X3RpbWVvdXQobGFtYmRhOiBub3JtYWxfc3RhcnR1cF9ldmVudC5pc19zZXQoKSwgRFJUX1NUQVJU
X1NUT1BfVElNRU9VVF9TRUNTKToKLSAgICAgICAgICAgICAgICAjIElmIG5vcm1hbF9zdGFydHVw
X2V2ZW50IGlzIG5vdCBzZXQgaW4gdGltZSwgdGhlIG1haW4gdGhyZWFkIG11c3QgYmUgYmxvY2tl
ZCBhdAotICAgICAgICAgICAgICAgICMgcmVhZGluZy93cml0aW5nIHRoZSBmaWZvLiBLaWxsIHRo
ZSBmaWZvIHJlYWRpbmcvd3JpdGluZyBwcm9jZXNzZXMgdG8gbGV0IHRoZQotICAgICAgICAgICAg
ICAgICMgbWFpbiB0aHJlYWQgZXNjYXBlIGZyb20gdGhlIGRlYWRsb2NrZWQgc3RhdGUuIEFmdGVy
IHRoYXQsIHRoZSBtYWluIHRocmVhZCB3aWxsCi0gICAgICAgICAgICAgICAgIyB0cmVhdCB0aGlz
IGFzIGEgY3Jhc2guCi0gICAgICAgICAgICAgICAgc2VsZi5fbG9nX2Vycm9yKCdEZWFkbG9jayBk
ZXRlY3RlZC4gUHJvY2Vzc2VzIGtpbGxlZC4nKQotICAgICAgICAgICAgICAgIGZvciBpIGluIHBy
b2Nlc3NlczoKLSAgICAgICAgICAgICAgICAgICAgaS5raWxsKCkKLQotICAgICAgICAjIFN0YXJ0
IGEgdGhyZWFkIHRvIGtpbGwgdGhlIHBpcGUgcmVhZGluZy93cml0aW5nIHByb2Nlc3NlcyBvbiBk
ZWFkbG9jayBvZiB0aGUgZmlmb3MgZHVyaW5nIHN0YXJ0dXAuCi0gICAgICAgIG5vcm1hbF9zdGFy
dHVwX2V2ZW50ID0gdGhyZWFkaW5nLkV2ZW50KCkKLSAgICAgICAgdGhyZWFkaW5nLlRocmVhZChu
YW1lPSdEZWFkbG9ja0RldGVjdG9yJywgdGFyZ2V0PWRlYWRsb2NrX2RldGVjdG9yLAotICAgICAg
ICAgICAgICAgICAgICAgICAgIGFyZ3M9KFtzZWxmLl9zZXJ2ZXJfcHJvY2Vzcywgc2VsZi5fcmVh
ZF9zdGRvdXRfcHJvY2Vzcywgc2VsZi5fcmVhZF9zdGRlcnJfcHJvY2Vzc10sIG5vcm1hbF9zdGFy
dHVwX2V2ZW50KSkuc3RhcnQoKQotCi0gICAgICAgIG91dHB1dCA9ICcnCi0gICAgICAgIGxpbmUg
PSBzZWxmLl9zZXJ2ZXJfcHJvY2Vzcy5yZWFkX3N0ZG91dF9saW5lKGRlYWRsaW5lKQotICAgICAg
ICB3aGlsZSBub3Qgc2VsZi5fc2VydmVyX3Byb2Nlc3MudGltZWRfb3V0IGFuZCBub3Qgc2VsZi5o
YXNfY3Jhc2hlZCgpIGFuZCBsaW5lLnJzdHJpcCgpICE9ICcjUkVBRFknOgotICAgICAgICAgICAg
b3V0cHV0ICs9IGxpbmUKLSAgICAgICAgICAgIGxpbmUgPSBzZWxmLl9zZXJ2ZXJfcHJvY2Vzcy5y
ZWFkX3N0ZG91dF9saW5lKGRlYWRsaW5lKQotCi0gICAgICAgIGlmIHNlbGYuX3NlcnZlcl9wcm9j
ZXNzLnRpbWVkX291dCBhbmQgbm90IHNlbGYuaGFzX2NyYXNoZWQoKToKLSAgICAgICAgICAgICMg
RHVtcFJlbmRlclRyZWUgY3Jhc2hlcyBkdXJpbmcgc3RhcnR1cCwgb3Igd2hlbiB0aGUgZGVhZGxv
Y2sgZGV0ZWN0b3IgZGV0ZWN0ZWQKLSAgICAgICAgICAgICMgZGVhZGxvY2sgYW5kIGtpbGxlZCB0
aGUgZmlmbyByZWFkaW5nL3dyaXRpbmcgcHJvY2Vzc2VzLgotICAgICAgICAgICAgX2xvZy5lcnJv
cignRmFpbGVkIHRvIHN0YXJ0IER1bXBSZW5kZXJUcmVlOiBcbiVzJyAlIG91dHB1dCkKLSAgICAg
ICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgICAgICMgSW5mb3JtIHRoZSBkZWFkbG9jayBkZXRl
Y3RvciB0aGF0IHRoZSBzdGFydHVwIGlzIHN1Y2Nlc3NmdWwgd2l0aG91dCBkZWFkbG9jay4KLSAg
ICAgICAgbm9ybWFsX3N0YXJ0dXBfZXZlbnQuc2V0KCkKLSAgICAgICAgcmV0dXJuIFRydWUKLQot
ICAgIGRlZiBfcGlkX2Zyb21fYW5kcm9pZF9wc19vdXRwdXQoc2VsZiwgcHNfb3V0cHV0LCBwYWNr
YWdlX25hbWUpOgotICAgICAgICAjIHBzIG91dHB1dCBzZWVtcyB0byBiZSBmaXhlZCB3aWR0aCwg
d2Ugb25seSBjYXJlIGFib3V0IHRoZSBuYW1lIGFuZCB0aGUgcGlkCi0gICAgICAgICMgdTBfYTcy
ICAgIDIxNjMwIDEyNSAgIDk0NzkyMCA1OTM2NCBmZmZmZmZmZiA0MDBiZWVlNCBTIG9yZy5jaHJv
bWl1bS5uYXRpdmVfdGVzdAotICAgICAgICBmb3IgbGluZSBpbiBwc19vdXRwdXQuc3BsaXQoJ1xu
Jyk6Ci0gICAgICAgICAgICBpZiBsaW5lLmZpbmQoRFJUX0FQUF9QQUNLQUdFKSAhPSAtMToKLSAg
ICAgICAgICAgICAgICBtYXRjaCA9IHJlLm1hdGNoKHInXFMrXHMrKFxkKyknLCBsaW5lKQotICAg
ICAgICAgICAgICAgIHJldHVybiBpbnQobWF0Y2guZ3JvdXAoMSkpCi0KLSAgICBkZWYgX3BpZF9v
bl90YXJnZXQoc2VsZik6Ci0gICAgICAgICMgRklYTUU6IFRoZXJlIG11c3QgYmUgYSBiZXR0ZXIg
d2F5IHRvIGRvIHRoaXMgdGhhbiBncmVwcGluZyBwcyBvdXRwdXQhCi0gICAgICAgIHBzX291dHB1
dCA9IHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ3BzJ10pCi0gICAgICAgIHJldHVy
biBzZWxmLl9waWRfZnJvbV9hbmRyb2lkX3BzX291dHB1dChwc19vdXRwdXQsIERSVF9BUFBfUEFD
S0FHRSkKLQotICAgIGRlZiBzdG9wKHNlbGYpOgotICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1h
bmQoWydzaGVsbCcsICdhbScsICdmb3JjZS1zdG9wJywgRFJUX0FQUF9QQUNLQUdFXSkKLQotICAg
ICAgICBpZiBzZWxmLl9yZWFkX3N0ZG91dF9wcm9jZXNzOgotICAgICAgICAgICAgc2VsZi5fcmVh
ZF9zdGRvdXRfcHJvY2Vzcy5raWxsKCkKLSAgICAgICAgICAgIHNlbGYuX3JlYWRfc3Rkb3V0X3By
b2Nlc3MgPSBOb25lCi0KLSAgICAgICAgaWYgc2VsZi5fcmVhZF9zdGRlcnJfcHJvY2VzczoKLSAg
ICAgICAgICAgIHNlbGYuX3JlYWRfc3RkZXJyX3Byb2Nlc3Mua2lsbCgpCi0gICAgICAgICAgICBz
ZWxmLl9yZWFkX3N0ZGVycl9wcm9jZXNzID0gTm9uZQotCi0gICAgICAgIHN1cGVyKENocm9taXVt
QW5kcm9pZERyaXZlciwgc2VsZikuc3RvcCgpCi0KLSAgICAgICAgaWYgc2VsZi5fZm9yd2FyZGVy
X3Byb2Nlc3M6Ci0gICAgICAgICAgICBzZWxmLl9mb3J3YXJkZXJfcHJvY2Vzcy5raWxsKCkKLSAg
ICAgICAgICAgIHNlbGYuX2ZvcndhcmRlcl9wcm9jZXNzID0gTm9uZQotCi0gICAgICAgIGlmIHNl
bGYuX2hhc19zZXR1cDoKLSAgICAgICAgICAgIGlmIG5vdCBDaHJvbWl1bUFuZHJvaWREcml2ZXIu
X2xvb3Bfd2l0aF90aW1lb3V0KHNlbGYuX3JlbW92ZV9hbGxfcGlwZXMsIERSVF9TVEFSVF9TVE9Q
X1RJTUVPVVRfU0VDUyk6Ci0gICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ0Zh
aWxlZCB0byByZW1vdmUgZmlmbyBmaWxlcy4gTWF5IGJlIGxvY2tlZC4nKQotCi0gICAgZGVmIF9j
b21tYW5kX2Zyb21fZHJpdmVyX2lucHV0KHNlbGYsIGRyaXZlcl9pbnB1dCk6Ci0gICAgICAgIGNv
bW1hbmQgPSBzdXBlcihDaHJvbWl1bUFuZHJvaWREcml2ZXIsIHNlbGYpLl9jb21tYW5kX2Zyb21f
ZHJpdmVyX2lucHV0KGRyaXZlcl9pbnB1dCkKLSAgICAgICAgaWYgY29tbWFuZC5zdGFydHN3aXRo
KCcvJyk6Ci0gICAgICAgICAgICBmcyA9IHNlbGYuX3BvcnQuX2ZpbGVzeXN0ZW0KLSAgICAgICAg
ICAgICMgRklYTUU6IHdoYXQgaGFwcGVucyBpZiBjb21tYW5kIGxpZXMgb3V0c2lkZSBvZiB0aGUg
bGF5b3V0X3Rlc3RzX2RpciBvbiB0aGUgaG9zdD8KLSAgICAgICAgICAgIHJlbGF0aXZlX3Rlc3Rf
ZmlsZW5hbWUgPSBmcy5yZWxwYXRoKGNvbW1hbmQsIGZzLmRpcm5hbWUoc2VsZi5fcG9ydC5sYXlv
dXRfdGVzdHNfZGlyKCkpKQotICAgICAgICAgICAgY29tbWFuZCA9IERFVklDRV9XRUJLSVRfQkFT
RV9ESVIgKyByZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lCi0gICAgICAgIHJldHVybiBjb21tYW5kCi0K
LSAgICBkZWYgX3JlYWRfcHJvbXB0KHNlbGYsIGRlYWRsaW5lKToKLSAgICAgICAgbGFzdF9jaGFy
ID0gJycKLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIGN1cnJlbnRfY2hhciA9IHNl
bGYuX3NlcnZlcl9wcm9jZXNzLnJlYWRfc3Rkb3V0KGRlYWRsaW5lLCAxKQotICAgICAgICAgICAg
aWYgY3VycmVudF9jaGFyID09ICcgJzoKLSAgICAgICAgICAgICAgICBpZiBsYXN0X2NoYXIgaW4g
KCcjJywgJyQnKToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICBsYXN0
X2NoYXIgPSBjdXJyZW50X2NoYXIKLQotICAgIGRlZiBfYWRiX2NvbW1hbmQoc2VsZik6Ci0gICAg
ICAgIGlmIG5vdCBzZWxmLl9hZGJfY29tbWFuZF9iYXNlOgotICAgICAgICAgICAgc2VsZi5fYWRi
X2NvbW1hbmRfYmFzZSA9IFtzZWxmLl9wb3J0LnBhdGhfdG9fYWRiKCksICctcycsIHNlbGYuX2Rl
dmljZV9zZXJpYWxdCi0gICAgICAgIHJldHVybiBzZWxmLl9hZGJfY29tbWFuZF9iYXNlCmRpZmYg
LS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVt
X2FuZHJvaWRfdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L2Nocm9taXVtX2FuZHJvaWRfdW5pdHRlc3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGYzNGJiY2QwMDM5NTczZWFhNjI1YzFlNjQxZGVhZThhMDVjNjYwYmYuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9hbmRyb2lkX3VuaXR0ZXN0LnB5Cisr
KyAvZGV2L251bGwKQEAgLTEsMzQ2ICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDEyIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0jIG1ldDoKLSMKLSMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMg
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
IyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1pbXBvcnQgb3B0
cGFyc2UKLWltcG9ydCBTdHJpbmdJTwotaW1wb3J0IHRpbWUKLWltcG9ydCB1bml0dGVzdDIgYXMg
dW5pdHRlc3QKLWltcG9ydCBzeXMKLQotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9y
dCBleGVjdXRpdmVfbW9jawotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZV9t
b2NrIGltcG9ydCBNb2NrRXhlY3V0aXZlMgotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnN5
c3RlbWhvc3RfbW9jayBpbXBvcnQgTW9ja1N5c3RlbUhvc3QKLQotZnJvbSB3ZWJraXRweS5sYXlv
dXRfdGVzdHMucG9ydCBpbXBvcnQgY2hyb21pdW1fYW5kcm9pZAotZnJvbSB3ZWJraXRweS5sYXlv
dXRfdGVzdHMucG9ydCBpbXBvcnQgY2hyb21pdW1fcG9ydF90ZXN0Y2FzZQotZnJvbSB3ZWJraXRw
eS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgZHJpdmVyCi1mcm9tIHdlYmtpdHB5LmxheW91dF90
ZXN0cy5wb3J0IGltcG9ydCBkcml2ZXJfdW5pdHRlc3QKLWZyb20gd2Via2l0cHkudG9vbC5tb2Nr
dG9vbCBpbXBvcnQgTW9ja09wdGlvbnMKLQotCi1jbGFzcyBNb2NrUnVuQ29tbWFuZChvYmplY3Qp
OgotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgc2VsZi5fbW9ja19sb2djYXQgPSAn
JwotICAgICAgICBzZWxmLl9tb2NrX2RldmljZXNfb3V0cHV0ID0gJycKLSAgICAgICAgc2VsZi5f
bW9ja19kZXZpY2VzID0gW10KLSAgICAgICAgc2VsZi5fbW9ja19sc190b21ic3RvbmVzID0gJycK
LQotICAgIGRlZiBtb2NrX3J1bl9jb21tYW5kX2ZuKHNlbGYsIGFyZ3MpOgotICAgICAgICBpZiBu
b3QgYXJnc1swXS5lbmRzd2l0aCgnYWRiJyk6Ci0gICAgICAgICAgICByZXR1cm4gJycKLSAgICAg
ICAgaWYgYXJnc1sxXSA9PSAnZGV2aWNlcyc6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fbW9j
a19kZXZpY2VzX291dHB1dAotICAgICAgICBpZiBhcmdzWzFdID09ICd2ZXJzaW9uJzoKLSAgICAg
ICAgICAgIHJldHVybiAndmVyc2lvbiAxLjAnCi0KLSAgICAgICAgYXNzZXJ0IGxlbihhcmdzKSA+
IDMKLSAgICAgICAgYXNzZXJ0IGFyZ3NbMV0gPT0gJy1zJwotICAgICAgICBhc3NlcnQgYXJnc1sy
XSBpbiBzZWxmLl9tb2NrX2RldmljZXMKLSAgICAgICAgaWYgYXJnc1szXSA9PSAnc2hlbGwnOgot
ICAgICAgICAgICAgaWYgYXJnc1s0Ol0gPT0gWydscycsICctbicsICcvZGF0YS90b21ic3RvbmVz
J106Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX21vY2tfbHNfdG9tYnN0b25lcwotICAg
ICAgICAgICAgZWxpZiBhcmdzWzRdID09ICdjYXQnOgotICAgICAgICAgICAgICAgIHJldHVybiBh
cmdzWzVdICsgJ1xubW9ja19jb250ZW50c1xuJwotICAgICAgICBlbGlmIGFyZ3NbM10gPT0gJ2xv
Z2NhdCc6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fbW9ja19sb2djYXQKLSAgICAgICAgcmV0
dXJuICcnCi0KLSAgICBkZWYgbW9ja19ub19kZXZpY2Uoc2VsZik6Ci0gICAgICAgIHNlbGYuX21v
Y2tfZGV2aWNlcyA9IFtdCi0gICAgICAgIHNlbGYuX21vY2tfZGV2aWNlc19vdXRwdXQgPSAnTGlz
dCBvZiBkZXZpY2VzIGF0dGFjaGVkJwotCi0gICAgZGVmIG1vY2tfb25lX2RldmljZShzZWxmKToK
LSAgICAgICAgc2VsZi5fbW9ja19kZXZpY2VzID0gWycxMjM0NTY3ODlBQkNERUYwJ10KLSAgICAg
ICAgc2VsZi5fbW9ja19kZXZpY2VzX291dHB1dCA9ICgnTGlzdCBvZiBkZXZpY2VzIGF0dGFjaGVk
XG4nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyVzXHRkZXZpY2Vcbicg
JSBzZWxmLl9tb2NrX2RldmljZXNbMF0pCi0KLSAgICBkZWYgbW9ja190d29fZGV2aWNlcyhzZWxm
KToKLSAgICAgICAgc2VsZi5fbW9ja19kZXZpY2VzID0gWycxMjM0NTY3ODlBQkNERUYwJywgJzIz
NDU2Nzg5QUJDREVGMDEnXQotICAgICAgICBzZWxmLl9tb2NrX2RldmljZXNfb3V0cHV0ID0gKCcq
IGRhZW1vbiBub3QgcnVubmluZy4gc3RhcnRpbmcgaXQgbm93IG9uIHBvcnQgNTAzNyAqJwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcqIGRhZW1vbiBzdGFydGVkIHN1Y2Nl
c3NmdWxseSAqJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdMaXN0IG9m
IGRldmljZXMgYXR0YWNoZWRcbicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnJXNcdGRldmljZVxuJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcl
c1x0ZGV2aWNlXG4nICUgKHNlbGYuX21vY2tfZGV2aWNlc1swXSwgc2VsZi5fbW9ja19kZXZpY2Vz
WzFdKSkKLQotICAgIGRlZiBtb2NrX25vX3RvbWJzdG9uZV9kaXIoc2VsZik6Ci0gICAgICAgIHNl
bGYuX21vY2tfbHNfdG9tYnN0b25lcyA9ICcvZGF0YS90b21ic3RvbmVzOiBObyBzdWNoIGZpbGUg
b3IgZGlyZWN0b3J5JwotCi0gICAgZGVmIG1vY2tfbm9fdG9tYnN0b25lX2ZpbGUoc2VsZik6Ci0g
ICAgICAgIHNlbGYuX21vY2tfbHNfdG9tYnN0b25lcyA9ICcnCi0KLSAgICBkZWYgbW9ja190ZW5f
dG9tYnN0b25lcyhzZWxmKToKLSAgICAgICAgc2VsZi5fbW9ja19sc190b21ic3RvbmVzID0gKCct
cnctLS0tLS0tIDEwMDAgICAgIDEwMDAgICAgICAgMjE4NjQzIDIwMTItMDQtMjYgMTg6MTUgdG9t
YnN0b25lXzAwXG4nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLXJ3LS0t
LS0tLSAxMDAwICAgICAxMDAwICAgICAgIDI0MTY5NSAyMDEyLTA0LTI2IDE4OjE1IHRvbWJzdG9u
ZV8wMVxuJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1ydy0tLS0tLS0g
MTAwMCAgICAgMTAwMCAgICAgICAyMTk0NzIgMjAxMi0wNC0yNiAxODoxNiB0b21ic3RvbmVfMDJc
bicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctcnctLS0tLS0tIDEwMDAg
ICAgIDEwMDAgICAgICAgIDQ1MzE2IDIwMTItMDQtMjcgMTY6MzMgdG9tYnN0b25lXzAzXG4nCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLXJ3LS0tLS0tLSAxMDAwICAgICAx
MDAwICAgICAgICA4MjAyMiAyMDEyLTA0LTIzIDE2OjU3IHRvbWJzdG9uZV8wNFxuJwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1ydy0tLS0tLS0gMTAwMCAgICAgMTAwMCAg
ICAgICAgODIwMTUgMjAxMi0wNC0yMyAxNjo1NyB0b21ic3RvbmVfMDVcbicKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICctcnctLS0tLS0tIDEwMDAgICAgIDEwMDAgICAgICAg
IDgxOTc0IDIwMTItMDQtMjMgMTY6NTggdG9tYnN0b25lXzA2XG4nCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAnLXJ3LS0tLS0tLSAxMDAwICAgICAxMDAwICAgICAgIDIzNzQw
OSAyMDEyLTA0LTI2IDE3OjQxIHRvbWJzdG9uZV8wN1xuJwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJy1ydy0tLS0tLS0gMTAwMCAgICAgMTAwMCAgICAgICAyNzYwODkgMjAx
Mi0wNC0yNiAxODoxNSB0b21ic3RvbmVfMDhcbicKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICctcnctLS0tLS0tIDEwMDAgICAgIDEwMDAgICAgICAgMjE5NjE4IDIwMTItMDQt
MjYgMTg6MTUgdG9tYnN0b25lXzA5XG4nKQotCi0gICAgZGVmIG1vY2tfbG9nY2F0KHNlbGYsIGNv
bnRlbnQpOgotICAgICAgICBzZWxmLl9tb2NrX2xvZ2NhdCA9IGNvbnRlbnQKLQotCi1jbGFzcyBD
aHJvbWl1bUFuZHJvaWRQb3J0VGVzdChjaHJvbWl1bV9wb3J0X3Rlc3RjYXNlLkNocm9taXVtUG9y
dFRlc3RDYXNlKToKLSAgICBwb3J0X25hbWUgPSAnY2hyb21pdW0tYW5kcm9pZCcKLSAgICBwb3J0
X21ha2VyID0gY2hyb21pdW1fYW5kcm9pZC5DaHJvbWl1bUFuZHJvaWRQb3J0Ci0KLSAgICBkZWYg
bWFrZV9wb3J0KHNlbGYsICoqa3dhcmdzKToKLSAgICAgICAgcG9ydCA9IHN1cGVyKENocm9taXVt
QW5kcm9pZFBvcnRUZXN0LCBzZWxmKS5tYWtlX3BvcnQoKiprd2FyZ3MpCi0gICAgICAgIHNlbGYu
bW9ja19ydW5fY29tbWFuZCA9IE1vY2tSdW5Db21tYW5kKCkKLSAgICAgICAgc2VsZi5tb2NrX3J1
bl9jb21tYW5kLm1vY2tfb25lX2RldmljZSgpCi0gICAgICAgIHBvcnQuX2V4ZWN1dGl2ZSA9IE1v
Y2tFeGVjdXRpdmUyKHJ1bl9jb21tYW5kX2ZuPXNlbGYubW9ja19ydW5fY29tbWFuZC5tb2NrX3J1
bl9jb21tYW5kX2ZuKQotICAgICAgICByZXR1cm4gcG9ydAotCi0gICAgZGVmIHRlc3RfYXR0cmli
dXRlcyhzZWxmKToKLSAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkKLSAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChwb3J0LmJhc2VsaW5lX3BhdGgoKSwgcG9ydC5fd2Via2l0X2Jhc2VsaW5l
X3BhdGgoJ2Nocm9taXVtLWFuZHJvaWQnKSkKLQotICAgIGRlZiB0ZXN0X2RlZmF1bHRfdGltZW91
dF9tcyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1ha2VfcG9ydChvcHRp
b25zPW9wdHBhcnNlLlZhbHVlcyh7J2NvbmZpZ3VyYXRpb24nOiAnUmVsZWFzZSd9KSkuZGVmYXVs
dF90aW1lb3V0X21zKCksIDEwMDAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFr
ZV9wb3J0KG9wdGlvbnM9b3B0cGFyc2UuVmFsdWVzKHsnY29uZmlndXJhdGlvbic6ICdEZWJ1Zyd9
KSkuZGVmYXVsdF90aW1lb3V0X21zKCksIDEwMDAwKQotCi0gICAgZGVmIHRlc3RfZXhwZWN0YXRp
b25zX2ZpbGVzKHNlbGYpOgotICAgICAgICAjIEZJWE1FOiBvdmVycmlkZSB0aGlzIHRlc3QgdGVt
cG9yYXJpbHkgd2hpbGUgd2UncmUgc3RpbGwgdXBzdHJlYW1pbmcgdGhlIGFuZHJvaWQgcG9ydCBh
bmQKLSAgICAgICAgIyB1c2luZyBhIGN1c3RvbSBleHBlY3RhdGlvbnMgZmlsZS4KLSAgICAgICAg
cGFzcwotCi0gICAgZGVmIHRlc3RfZ2V0X2RldmljZXNfbm9fZGV2aWNlKHNlbGYpOgotICAgICAg
ICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQotICAgICAgICBzZWxmLm1vY2tfcnVuX2NvbW1hbmQu
bW9ja19ub19kZXZpY2UoKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJv
ciwgcG9ydC5fZ2V0X2RldmljZXMpCi0KLSAgICBkZWYgdGVzdF9nZXRfZGV2aWNlc19vbmVfZGV2
aWNlKHNlbGYpOgotICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQotICAgICAgICBzZWxm
Lm1vY2tfcnVuX2NvbW1hbmQubW9ja19vbmVfZGV2aWNlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChzZWxmLm1vY2tfcnVuX2NvbW1hbmQuX21vY2tfZGV2aWNlcywgcG9ydC5fZ2V0X2Rldmlj
ZXMoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBwb3J0LmRlZmF1bHRfY2hpbGRfcHJv
Y2Vzc2VzKCkpCi0KLSAgICBkZWYgdGVzdF9nZXRfZGV2aWNlc190d29fZGV2aWNlcyhzZWxmKToK
LSAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkKLSAgICAgICAgc2VsZi5tb2NrX3J1bl9j
b21tYW5kLm1vY2tfdHdvX2RldmljZXMoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYu
bW9ja19ydW5fY29tbWFuZC5fbW9ja19kZXZpY2VzLCBwb3J0Ll9nZXRfZGV2aWNlcygpKQotICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIHBvcnQuZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMoKSkK
LQotICAgIGRlZiB0ZXN0X2dldF9kZXZpY2Vfc2VyaWFsX25vX2RldmljZShzZWxmKToKLSAgICAg
ICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkKLSAgICAgICAgc2VsZi5tb2NrX3J1bl9jb21tYW5k
Lm1vY2tfbm9fZGV2aWNlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJy
b3IsIHBvcnQuX2dldF9kZXZpY2Vfc2VyaWFsLCAwKQotCi0gICAgZGVmIHRlc3RfZ2V0X2Rldmlj
ZV9zZXJpYWxfb25lX2RldmljZShzZWxmKToKLSAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0
KCkKLSAgICAgICAgc2VsZi5tb2NrX3J1bl9jb21tYW5kLm1vY2tfb25lX2RldmljZSgpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5tb2NrX3J1bl9jb21tYW5kLl9tb2NrX2RldmljZXNb
MF0sIHBvcnQuX2dldF9kZXZpY2Vfc2VyaWFsKDApKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNl
cyhBc3NlcnRpb25FcnJvciwgcG9ydC5fZ2V0X2RldmljZV9zZXJpYWwsIDEpCi0KLSAgICBkZWYg
dGVzdF9nZXRfZGV2aWNlX3NlcmlhbF90d29fZGV2aWNlcyhzZWxmKToKLSAgICAgICAgcG9ydCA9
IHNlbGYubWFrZV9wb3J0KCkKLSAgICAgICAgc2VsZi5tb2NrX3J1bl9jb21tYW5kLm1vY2tfdHdv
X2RldmljZXMoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubW9ja19ydW5fY29tbWFu
ZC5fbW9ja19kZXZpY2VzWzBdLCBwb3J0Ll9nZXRfZGV2aWNlX3NlcmlhbCgwKSkKLSAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChzZWxmLm1vY2tfcnVuX2NvbW1hbmQuX21vY2tfZGV2aWNlc1sxXSwg
cG9ydC5fZ2V0X2RldmljZV9zZXJpYWwoMSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFz
c2VydGlvbkVycm9yLCBwb3J0Ll9nZXRfZGV2aWNlX3NlcmlhbCwgMikKLQotICAgIGRlZiB0ZXN0
X211c3RfcmVxdWlyZV9odHRwX3NlcnZlcihzZWxmKToKLSAgICAgICAgcG9ydCA9IHNlbGYubWFr
ZV9wb3J0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0LnJlcXVpcmVzX2h0dHBfc2Vy
dmVyKCksIFRydWUpCi0KLQotY2xhc3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVyVGVzdCh1bml0dGVz
dC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBzZWxmLm1vY2tfcnVu
X2NvbW1hbmQgPSBNb2NrUnVuQ29tbWFuZCgpCi0gICAgICAgIHNlbGYubW9ja19ydW5fY29tbWFu
ZC5tb2NrX29uZV9kZXZpY2UoKQotICAgICAgICBzZWxmLnBvcnQgPSBjaHJvbWl1bV9hbmRyb2lk
LkNocm9taXVtQW5kcm9pZFBvcnQoCi0gICAgICAgICAgICAgICAgTW9ja1N5c3RlbUhvc3QoZXhl
Y3V0aXZlPU1vY2tFeGVjdXRpdmUyKHJ1bl9jb21tYW5kX2ZuPXNlbGYubW9ja19ydW5fY29tbWFu
ZC5tb2NrX3J1bl9jb21tYW5kX2ZuKSksCi0gICAgICAgICAgICAgICAgJ2Nocm9taXVtLWFuZHJv
aWQnKQotICAgICAgICBzZWxmLmRyaXZlciA9IGNocm9taXVtX2FuZHJvaWQuQ2hyb21pdW1BbmRy
b2lkRHJpdmVyKHNlbGYucG9ydCwgd29ya2VyX251bWJlcj0wLCBwaXhlbF90ZXN0cz1UcnVlKQot
Ci0gICAgZGVmIHRlc3RfZ2V0X2xhc3Rfc3RhY2t0cmFjZShzZWxmKToKLSAgICAgICAgc2VsZi5t
b2NrX3J1bl9jb21tYW5kLm1vY2tfbm9fdG9tYnN0b25lX2RpcigpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoc2VsZi5kcml2ZXIuX2dldF9sYXN0X3N0YWNrdHJhY2UoKSwgJycpCi0KLSAgICAg
ICAgc2VsZi5tb2NrX3J1bl9jb21tYW5kLm1vY2tfbm9fdG9tYnN0b25lX2ZpbGUoKQotICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZHJpdmVyLl9nZXRfbGFzdF9zdGFja3RyYWNlKCksICcn
KQotCi0gICAgICAgIHNlbGYubW9ja19ydW5fY29tbWFuZC5tb2NrX3Rlbl90b21ic3RvbmVzKCkK
LSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRyaXZlci5fZ2V0X2xhc3Rfc3RhY2t0cmFj
ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAnLXJ3LS0tLS0tLSAxMDAwIDEwMDAgNDUz
MTYgMjAxMi0wNC0yNyAxNjozMyB0b21ic3RvbmVfMDNcbicKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgJy9kYXRhL3RvbWJzdG9uZXMvdG9tYnN0b25lXzAzXG5tb2NrX2NvbnRlbnRzXG4nKQot
Ci0gICAgZGVmIHRlc3RfZ2V0X2NyYXNoX2xvZyhzZWxmKToKLSAgICAgICAgc2VsZi5tb2NrX3J1
bl9jb21tYW5kLm1vY2tfbG9nY2F0KCdsb2djYXQgY29udGVudHNcbicpCi0gICAgICAgIHNlbGYu
bW9ja19ydW5fY29tbWFuZC5tb2NrX3Rlbl90b21ic3RvbmVzKCkKLSAgICAgICAgc2VsZi5kcml2
ZXIuX2NyYXNoZWRfcHJvY2Vzc19uYW1lID0gJ2ZvbycKLSAgICAgICAgc2VsZi5kcml2ZXIuX2Ny
YXNoZWRfcGlkID0gMTIzNAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZHJpdmVyLl9n
ZXRfY3Jhc2hfbG9nKCdvdXQgYmFyXG5vdXQgYmF6XG4nLCAnZXJyIGJhclxuZXJyIGJhelxuJywg
bmV3ZXJfdGhhbj1Ob25lKSwKLSAgICAgICAgICAgICgnZXJyIGJhclxuJwotICAgICAgICAgICAg
ICdlcnIgYmF6XG4nCi0gICAgICAgICAgICAgJyoqKioqKioqKiBbMTIzNDU2Nzg5QUJDREVGMF0g
VG9tYnN0b25lIGZpbGU6XG4nCi0gICAgICAgICAgICAgJy1ydy0tLS0tLS0gMTAwMCAxMDAwIDQ1
MzE2IDIwMTItMDQtMjcgMTY6MzMgdG9tYnN0b25lXzAzXG4nCi0gICAgICAgICAgICAgJy9kYXRh
L3RvbWJzdG9uZXMvdG9tYnN0b25lXzAzXG4nCi0gICAgICAgICAgICAgJ21vY2tfY29udGVudHNc
bicsCi0gICAgICAgICAgICAgdSdjcmFzaCBsb2cgZm9yIGZvbyAocGlkIDEyMzQpOlxuJwotICAg
ICAgICAgICAgIHUnU1RET1VUOiBvdXQgYmFyXG4nCi0gICAgICAgICAgICAgdSdTVERPVVQ6IG91
dCBiYXpcbicKLSAgICAgICAgICAgICB1J1NURE9VVDogKioqKioqKioqIFsxMjM0NTY3ODlBQkNE
RUYwXSBMb2djYXQ6XG4nCi0gICAgICAgICAgICAgdSdTVERPVVQ6IGxvZ2NhdCBjb250ZW50c1xu
JwotICAgICAgICAgICAgIHUnU1RERVJSOiBlcnIgYmFyXG4nCi0gICAgICAgICAgICAgdSdTVERF
UlI6IGVyciBiYXpcbicKLSAgICAgICAgICAgICB1J1NUREVSUjogKioqKioqKioqIFsxMjM0NTY3
ODlBQkNERUYwXSBUb21ic3RvbmUgZmlsZTpcbicKLSAgICAgICAgICAgICB1J1NUREVSUjogLXJ3
LS0tLS0tLSAxMDAwIDEwMDAgNDUzMTYgMjAxMi0wNC0yNyAxNjozMyB0b21ic3RvbmVfMDNcbicK
LSAgICAgICAgICAgICB1J1NUREVSUjogL2RhdGEvdG9tYnN0b25lcy90b21ic3RvbmVfMDNcbicK
LSAgICAgICAgICAgICB1J1NUREVSUjogbW9ja19jb250ZW50c1xuJykpCi0KLSAgICAgICAgc2Vs
Zi5kcml2ZXIuX2NyYXNoZWRfcHJvY2Vzc19uYW1lID0gTm9uZQotICAgICAgICBzZWxmLmRyaXZl
ci5fY3Jhc2hlZF9waWQgPSBOb25lCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kcml2
ZXIuX2dldF9jcmFzaF9sb2coTm9uZSwgTm9uZSwgbmV3ZXJfdGhhbj1Ob25lKSwKLSAgICAgICAg
ICAgICgnKioqKioqKioqIFsxMjM0NTY3ODlBQkNERUYwXSBUb21ic3RvbmUgZmlsZTpcbicKLSAg
ICAgICAgICAgICAnLXJ3LS0tLS0tLSAxMDAwIDEwMDAgNDUzMTYgMjAxMi0wNC0yNyAxNjozMyB0
b21ic3RvbmVfMDNcbicKLSAgICAgICAgICAgICAnL2RhdGEvdG9tYnN0b25lcy90b21ic3RvbmVf
MDNcbicKLSAgICAgICAgICAgICAnbW9ja19jb250ZW50c1xuJywKLSAgICAgICAgICAgICB1J2Ny
YXNoIGxvZyBmb3IgPHVua25vd24gcHJvY2VzcyBuYW1lPiAocGlkIDx1bmtub3duPik6XG4nCi0g
ICAgICAgICAgICAgdSdTVERPVVQ6ICoqKioqKioqKiBbMTIzNDU2Nzg5QUJDREVGMF0gTG9nY2F0
OlxuJwotICAgICAgICAgICAgIHUnU1RET1VUOiBsb2djYXQgY29udGVudHNcbicKLSAgICAgICAg
ICAgICB1J1NUREVSUjogKioqKioqKioqIFsxMjM0NTY3ODlBQkNERUYwXSBUb21ic3RvbmUgZmls
ZTpcbicKLSAgICAgICAgICAgICB1J1NUREVSUjogLXJ3LS0tLS0tLSAxMDAwIDEwMDAgNDUzMTYg
MjAxMi0wNC0yNyAxNjozMyB0b21ic3RvbmVfMDNcbicKLSAgICAgICAgICAgICB1J1NUREVSUjog
L2RhdGEvdG9tYnN0b25lcy90b21ic3RvbmVfMDNcbicKLSAgICAgICAgICAgICB1J1NUREVSUjog
bW9ja19jb250ZW50c1xuJykpCi0KLSAgICBkZWYgdGVzdF9jbWRfbGluZShzZWxmKToKLSAgICAg
ICAgY21kX2xpbmUgPSBzZWxmLmRyaXZlci5jbWRfbGluZShUcnVlLCBbJ2FueXRoaW5nJ10pCi0g
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWydhZGInLCAnLXMnLCBzZWxmLm1vY2tfcnVuX2NvbW1h
bmQuX21vY2tfZGV2aWNlc1swXSwgJ3NoZWxsJ10sIGNtZF9saW5lKQotCi0gICAgZGVmIHRlc3Rf
ZHJ0X2NtZF9saW5lKHNlbGYpOgotICAgICAgICBjbWRfbGluZSA9IHNlbGYuZHJpdmVyLl9kcnRf
Y21kX2xpbmUoVHJ1ZSwgWyctLWEnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRJbignLS1hJywgY21k
X2xpbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oJy0tY3JlYXRlLXN0ZGluLWZpZm8nLCBjbWRf
bGluZSkKLSAgICAgICAgc2VsZi5hc3NlcnRJbignLS1zZXBhcmF0ZS1zdGRlcnItZmlmbycsIGNt
ZF9saW5lKQotCi0gICAgZGVmIHRlc3RfcmVhZF9wcm9tcHQoc2VsZik6Ci0gICAgICAgIHNlbGYu
ZHJpdmVyLl9zZXJ2ZXJfcHJvY2VzcyA9IGRyaXZlcl91bml0dGVzdC5Nb2NrU2VydmVyUHJvY2Vz
cyhsaW5lcz1bJ3Jvb3RAYW5kcm9pZDovICMgJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0SXNOb25l
KHNlbGYuZHJpdmVyLl9yZWFkX3Byb21wdCh0aW1lLnRpbWUoKSArIDEpKQotICAgICAgICBzZWxm
LmRyaXZlci5fc2VydmVyX3Byb2Nlc3MgPSBkcml2ZXJfdW5pdHRlc3QuTW9ja1NlcnZlclByb2Nl
c3MobGluZXM9WyckICddKQotICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLmRyaXZlci5f
cmVhZF9wcm9tcHQodGltZS50aW1lKCkgKyAxKSkKLQotICAgIGRlZiB0ZXN0X2NvbW1hbmRfZnJv
bV9kcml2ZXJfaW5wdXQoc2VsZik6Ci0gICAgICAgIGRyaXZlcl9pbnB1dCA9IGRyaXZlci5Ecml2
ZXJJbnB1dCgnZm9vL2Jhci90ZXN0Lmh0bWwnLCAxMCwgJ2NoZWNrc3VtJywgVHJ1ZSkKLSAgICAg
ICAgZXhwZWN0ZWRfY29tbWFuZCA9ICIvZGF0YS9sb2NhbC90bXAvdGhpcmRfcGFydHkvV2ViS2l0
L0xheW91dFRlc3RzL2Zvby9iYXIvdGVzdC5odG1sJy0tcGl4ZWwtdGVzdCdjaGVja3N1bVxuIgot
ICAgICAgICBpZiAoc3lzLnBsYXRmb3JtICE9ICJjeWd3aW4iKToKLSAgICAgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoc2VsZi5kcml2ZXIuX2NvbW1hbmRfZnJvbV9kcml2ZXJfaW5wdXQoZHJpdmVy
X2lucHV0KSwgZXhwZWN0ZWRfY29tbWFuZCkKLQotICAgICAgICBkcml2ZXJfaW5wdXQgPSBkcml2
ZXIuRHJpdmVySW5wdXQoJ2h0dHAvdGVzdHMvZm9vL2Jhci90ZXN0Lmh0bWwnLCAxMCwgJ2NoZWNr
c3VtJywgVHJ1ZSkKLSAgICAgICAgZXhwZWN0ZWRfY29tbWFuZCA9ICJodHRwOi8vMTI3LjAuMC4x
OjgwMDAvZm9vL2Jhci90ZXN0Lmh0bWwnLS1waXhlbC10ZXN0J2NoZWNrc3VtXG4iCi0gICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kcml2ZXIuX2NvbW1hbmRfZnJvbV9kcml2ZXJfaW5wdXQo
ZHJpdmVyX2lucHV0KSwgZXhwZWN0ZWRfY29tbWFuZCkKLQotICAgIGRlZiB0ZXN0X3BpZF9mcm9t
X2FuZHJvaWRfcHNfb3V0cHV0KHNlbGYpOgotICAgICAgICAjIEZJWE1FOiBVc2UgYSBsYXJnZXIg
YmxvYiBvZiBwcyBvdXRwdXQuCi0gICAgICAgIHBzX291dHB1dCA9ICIiInUwX2E3MiAgICAyMTYz
MCAxMjUgICA5NDc5MjAgNTkzNjQgZmZmZmZmZmYgNDAwYmVlZTQgUyBvcmcuY2hyb21pdW0ubmF0
aXZlX3Rlc3QiIiIKLSAgICAgICAgcGlkID0gc2VsZi5kcml2ZXIuX3BpZF9mcm9tX2FuZHJvaWRf
cHNfb3V0cHV0KHBzX291dHB1dCwgIm9yZy5jaHJvbWl1bS5uYXRpdmVfdGVzdCIpCi0gICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwocGlkLCAyMTYzMCkKLQotCi1jbGFzcyBBbmRyb2lkUGVyZlRlc3Qo
dW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiB0ZXN0X3BlcmZfb3V0cHV0X3JlZ2V4cChzZWxm
KToKLSAgICAgICAgcGVyZl9vdXRwdXQgPSAiIiJba2VybmVsLmthbGxzeW1zXSB3aXRoIGJ1aWxk
IGlkIDVhMjBmNjI5OWJkYjk1NWEyZjA3NzExYmI3ZjY1Y2Q3MDZmZTc0Njkgbm90IGZvdW5kLCBj
b250aW51aW5nIHdpdGhvdXQgc3ltYm9scwotRmFpbGVkIHRvIG9wZW4gL3RtcC9wZXJmLTE0MTY4
Lm1hcCwgY29udGludWluZyB3aXRob3V0IHN5bWJvbHMKLUtlcm5lbCBhZGRyZXNzIG1hcHMgKC9w
cm9jL3trYWxsc3ltcyxtb2R1bGVzfSkgd2VyZSByZXN0cmljdGVkLgotCi1DaGVjayAvcHJvYy9z
eXMva2VybmVsL2twdHJfcmVzdHJpY3QgYmVmb3JlIHJ1bm5pbmcgJ3BlcmYgcmVjb3JkJy4KLQot
QXMgbm8gc3VpdGFibGUga2FsbHN5bXMgbm9yIHZtbGludXggd2FzIGZvdW5kLCBrZXJuZWwgc2Ft
cGxlcwotY2FuJ3QgYmUgcmVzb2x2ZWQuCi0KLVNhbXBsZXMgaW4ga2VybmVsIG1vZHVsZXMgY2Fu
J3QgYmUgcmVzb2x2ZWQgYXMgd2VsbC4KLQotIyBFdmVudHM6IDMxSyBjeWNsZXMKLSMKLSMgT3Zl
cmhlYWQgICAgICAgICAgQ29tbWFuZCAgICAgICAgICAgICAgICBTaGFyZWQgT2JqZWN0Ci0jIC4u
Li4uLi4uICAuLi4uLi4uLi4uLi4uLi4gIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAgLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0jCi0gICAg
MTYuMTglICAgRHVtcFJlbmRlclRyZWUgIHBlcmYtMTQxNjgubWFwICAgICAgICAgICAgICAgWy5d
IDB4MjEyNzBhYzBjZjQzCi0gICAgMTIuNzIlICAgRHVtcFJlbmRlclRyZWUgIER1bXBSZW5kZXJU
cmVlICAgICAgICAgICAgICAgWy5dIHY4OjppbnRlcm5hbDo6SlNPYmplY3Q6OkdldEVsZW1lbnRX
aXRoSW50ZXJjZXB0b3Iodjg6OmludGVybmFsOjpPYmplY3QqLCB1bnNpZ25lZCBpbnQpCi0gICAg
IDguMjglICAgRHVtcFJlbmRlclRyZWUgIER1bXBSZW5kZXJUcmVlICAgICAgICAgICAgICAgWy5d
IHY4OjppbnRlcm5hbDo6TG9hZFByb3BlcnR5V2l0aEludGVyY2VwdG9yT25seSh2ODo6aW50ZXJu
YWw6OkFyZ3VtZW50cywgdjg6OmludGVybmFsOjpJc29sYXRlKikKLSAgICAgNS42MCUgICBEdW1w
UmVuZGVyVHJlZSAgRHVtcFJlbmRlclRyZWUgICAgICAgICAgICAgICBbLl0gV1RGOjpBdG9taWNT
dHJpbmcgV2ViQ29yZTo6djhTdHJpbmdUb1dlYkNvcmVTdHJpbmc8V1RGOjpBdG9taWNTdHJpbmc+
KHY4OjpIYW5kbGU8djg6OlN0cmluZz4sIFdlYkNvcmU6OkV4dGVybmFsTW9kZSkKLSAgICAgNC42
MCUgICBEdW1wUmVuZGVyVHJlZSAgRHVtcFJlbmRlclRyZWUgICAgICAgICAgICAgICBbLl0gV2Vi
Q29yZTo6V2Vha1JlZmVyZW5jZU1hcDx2b2lkLCB2ODo6T2JqZWN0Pjo6Z2V0KHZvaWQqKQotICAg
ICAzLjk5JSAgIER1bXBSZW5kZXJUcmVlICBEdW1wUmVuZGVyVHJlZSAgICAgICAgICAgICAgIFsu
XSBfWk5LM1dURjdIYXNoTWFwSVBOU18xNkF0b21pY1N0cmluZ0ltcGxFUE43V2ViQ29yZTdFbGVt
ZW50RU5TXzdQdHJIYXNoSVMyX0VFTlNfMTBIYXNoVHJhaXRzSVMyX0VFTlM4X0lTNV9FRUUzZ2V0
RVJLUzJfLmlzcmEuOTgKLSAgICAgMy42OSUgICBEdW1wUmVuZGVyVHJlZSAgRHVtcFJlbmRlclRy
ZWUgICAgICAgICAgICAgICBbLl0gV2ViQ29yZTo6RG9jdW1lbnRWOEludGVybmFsOjpnZXRFbGVt
ZW50QnlJZENhbGxiYWNrKHY4OjpBcmd1bWVudHMgY29uc3QmKQotICAgICAzLjIzJSAgIER1bXBS
ZW5kZXJUcmVlICBEdW1wUmVuZGVyVHJlZSAgICAgICAgICAgICAgIFsuXSBXZWJDb3JlOjpWOFBh
cmFtZXRlckJhc2U6OnByZXBhcmVCYXNlKCkKLSAgICAgMi44MyUgICBEdW1wUmVuZGVyVHJlZSAg
RHVtcFJlbmRlclRyZWUgICAgICAgICAgICAgICBbLl0gV1RGOjpBdG9taWNTdHJpbmc6OmFkZCh1
bnNpZ25lZCBzaG9ydCBjb25zdCosIHVuc2lnbmVkIGludCkKLSAgICAgMi43MyUgICBEdW1wUmVu
ZGVyVHJlZSAgRHVtcFJlbmRlclRyZWUgICAgICAgICAgICAgICBbLl0gV2ViQ29yZTo6RG9jdW1l
bnRWOEludGVybmFsOjpnZXRFbGVtZW50c0J5VGFnTmFtZUNhbGxiYWNrKHY4OjpBcmd1bWVudHMg
Y29uc3QmKQotICAgICAyLjQ3JSAgIER1bXBSZW5kZXJUcmVlICBEdW1wUmVuZGVyVHJlZSAgICAg
ICAgICAgICAgIFsuXSBfWk4ydjg2T2JqZWN0MjdHZXRQb2ludGVyRnJvbUludGVybmFsRmllbGRF
aS5jb25zdHByb3AuNDM5Ci0gICAgIDIuNDMlICAgRHVtcFJlbmRlclRyZWUgIER1bXBSZW5kZXJU
cmVlICAgICAgICAgICAgICAgWy5dIHY4OjppbnRlcm5hbDo6SXNvbGF0ZTo6U2V0Q3VycmVudFZN
U3RhdGUodjg6OmludGVybmFsOjpTdGF0ZVRhZykKLSIiIgotICAgICAgICBleHBlY3RlZF9maXJz
dF90ZW5fbGluZXMgPSAiIiIgICAgMTYuMTglICAgRHVtcFJlbmRlclRyZWUgIHBlcmYtMTQxNjgu
bWFwICAgICAgICAgICAgICAgWy5dIDB4MjEyNzBhYzBjZjQzCi0gICAgMTIuNzIlICAgRHVtcFJl
bmRlclRyZWUgIER1bXBSZW5kZXJUcmVlICAgICAgICAgICAgICAgWy5dIHY4OjppbnRlcm5hbDo6
SlNPYmplY3Q6OkdldEVsZW1lbnRXaXRoSW50ZXJjZXB0b3Iodjg6OmludGVybmFsOjpPYmplY3Qq
LCB1bnNpZ25lZCBpbnQpCi0gICAgIDguMjglICAgRHVtcFJlbmRlclRyZWUgIER1bXBSZW5kZXJU
cmVlICAgICAgICAgICAgICAgWy5dIHY4OjppbnRlcm5hbDo6TG9hZFByb3BlcnR5V2l0aEludGVy
Y2VwdG9yT25seSh2ODo6aW50ZXJuYWw6OkFyZ3VtZW50cywgdjg6OmludGVybmFsOjpJc29sYXRl
KikKLSAgICAgNS42MCUgICBEdW1wUmVuZGVyVHJlZSAgRHVtcFJlbmRlclRyZWUgICAgICAgICAg
ICAgICBbLl0gV1RGOjpBdG9taWNTdHJpbmcgV2ViQ29yZTo6djhTdHJpbmdUb1dlYkNvcmVTdHJp
bmc8V1RGOjpBdG9taWNTdHJpbmc+KHY4OjpIYW5kbGU8djg6OlN0cmluZz4sIFdlYkNvcmU6OkV4
dGVybmFsTW9kZSkKLSAgICAgNC42MCUgICBEdW1wUmVuZGVyVHJlZSAgRHVtcFJlbmRlclRyZWUg
ICAgICAgICAgICAgICBbLl0gV2ViQ29yZTo6V2Vha1JlZmVyZW5jZU1hcDx2b2lkLCB2ODo6T2Jq
ZWN0Pjo6Z2V0KHZvaWQqKQotICAgICAzLjk5JSAgIER1bXBSZW5kZXJUcmVlICBEdW1wUmVuZGVy
VHJlZSAgICAgICAgICAgICAgIFsuXSBfWk5LM1dURjdIYXNoTWFwSVBOU18xNkF0b21pY1N0cmlu
Z0ltcGxFUE43V2ViQ29yZTdFbGVtZW50RU5TXzdQdHJIYXNoSVMyX0VFTlNfMTBIYXNoVHJhaXRz
SVMyX0VFTlM4X0lTNV9FRUUzZ2V0RVJLUzJfLmlzcmEuOTgKLSAgICAgMy42OSUgICBEdW1wUmVu
ZGVyVHJlZSAgRHVtcFJlbmRlclRyZWUgICAgICAgICAgICAgICBbLl0gV2ViQ29yZTo6RG9jdW1l
bnRWOEludGVybmFsOjpnZXRFbGVtZW50QnlJZENhbGxiYWNrKHY4OjpBcmd1bWVudHMgY29uc3Qm
KQotICAgICAzLjIzJSAgIER1bXBSZW5kZXJUcmVlICBEdW1wUmVuZGVyVHJlZSAgICAgICAgICAg
ICAgIFsuXSBXZWJDb3JlOjpWOFBhcmFtZXRlckJhc2U6OnByZXBhcmVCYXNlKCkKLSAgICAgMi44
MyUgICBEdW1wUmVuZGVyVHJlZSAgRHVtcFJlbmRlclRyZWUgICAgICAgICAgICAgICBbLl0gV1RG
OjpBdG9taWNTdHJpbmc6OmFkZCh1bnNpZ25lZCBzaG9ydCBjb25zdCosIHVuc2lnbmVkIGludCkK
LSAgICAgMi43MyUgICBEdW1wUmVuZGVyVHJlZSAgRHVtcFJlbmRlclRyZWUgICAgICAgICAgICAg
ICBbLl0gV2ViQ29yZTo6RG9jdW1lbnRWOEludGVybmFsOjpnZXRFbGVtZW50c0J5VGFnTmFtZUNh
bGxiYWNrKHY4OjpBcmd1bWVudHMgY29uc3QmKQotIiIiCi0gICAgICAgIGhvc3QgPSBNb2NrU3lz
dGVtSG9zdCgpCi0gICAgICAgIHByb2ZpbGVyID0gY2hyb21pdW1fYW5kcm9pZC5BbmRyb2lkUGVy
Zihob3N0LCAnL2Jpbi9leGVjdXRhYmxlJywgJy90bXAvb3V0cHV0JywgJ2FkYi1wYXRoJywgJ2Rl
dmljZS1zZXJpYWwnLCAnL3RtcC9zeW1mcycsICcvdG1wL2thbGxzeW1zJywgJ2ZvbycpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvZmlsZXIuX2ZpcnN0X3Rlbl9saW5lc19vZl9wcm9maWxl
KHBlcmZfb3V0cHV0KSwgZXhwZWN0ZWRfZmlyc3RfdGVuX2xpbmVzKQotCi0KLWNsYXNzIENocm9t
aXVtQW5kcm9pZERyaXZlclR3b0RyaXZlcnNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBk
ZWYgdGVzdF90d29fZHJpdmVycyhzZWxmKToKLSAgICAgICAgbW9ja19ydW5fY29tbWFuZCA9IE1v
Y2tSdW5Db21tYW5kKCkKLSAgICAgICAgbW9ja19ydW5fY29tbWFuZC5tb2NrX3R3b19kZXZpY2Vz
KCkKLSAgICAgICAgcG9ydCA9IGNocm9taXVtX2FuZHJvaWQuQ2hyb21pdW1BbmRyb2lkUG9ydCgK
LSAgICAgICAgICAgICAgICBNb2NrU3lzdGVtSG9zdChleGVjdXRpdmU9TW9ja0V4ZWN1dGl2ZTIo
cnVuX2NvbW1hbmRfZm49bW9ja19ydW5fY29tbWFuZC5tb2NrX3J1bl9jb21tYW5kX2ZuKSksCi0g
ICAgICAgICAgICAgICAgJ2Nocm9taXVtLWFuZHJvaWQnKQotICAgICAgICBkcml2ZXIwID0gY2hy
b21pdW1fYW5kcm9pZC5DaHJvbWl1bUFuZHJvaWREcml2ZXIocG9ydCwgd29ya2VyX251bWJlcj0w
LCBwaXhlbF90ZXN0cz1UcnVlKQotICAgICAgICBkcml2ZXIxID0gY2hyb21pdW1fYW5kcm9pZC5D
aHJvbWl1bUFuZHJvaWREcml2ZXIocG9ydCwgd29ya2VyX251bWJlcj0xLCBwaXhlbF90ZXN0cz1U
cnVlKQotCi0gICAgICAgIGNtZF9saW5lMCA9IGRyaXZlcjAuY21kX2xpbmUoVHJ1ZSwgWydhbnl0
aGluZyddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsnYWRiJywgJy1zJywgbW9ja19ydW5f
Y29tbWFuZC5fbW9ja19kZXZpY2VzWzBdLCAnc2hlbGwnXSwgY21kX2xpbmUwKQotCi0gICAgICAg
IGNtZF9saW5lMSA9IGRyaXZlcjEuY21kX2xpbmUoVHJ1ZSwgWydhbnl0aGluZyddKQotICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKFsnYWRiJywgJy1zJywgbW9ja19ydW5fY29tbWFuZC5fbW9ja19k
ZXZpY2VzWzFdLCAnc2hlbGwnXSwgY21kX2xpbmUxKQotCi0KLWNsYXNzIENocm9taXVtQW5kcm9p
ZFR3b1BvcnRzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHRlc3Rfb3B0aW9uc193
aXRoX3R3b19wb3J0cyhzZWxmKToKLSAgICAgICAgb3B0aW9ucyA9IE1vY2tPcHRpb25zKGFkZGl0
aW9uYWxfZHJ0X2ZsYWc9WyctLWZvbz1iYXInLCAnLS1mb289YmF6J10pCi0gICAgICAgIG1vY2tf
cnVuX2NvbW1hbmQgPSBNb2NrUnVuQ29tbWFuZCgpCi0gICAgICAgIG1vY2tfcnVuX2NvbW1hbmQu
bW9ja190d29fZGV2aWNlcygpCi0gICAgICAgIHBvcnQwID0gY2hyb21pdW1fYW5kcm9pZC5DaHJv
bWl1bUFuZHJvaWRQb3J0KAotICAgICAgICAgICAgICAgIE1vY2tTeXN0ZW1Ib3N0KGV4ZWN1dGl2
ZT1Nb2NrRXhlY3V0aXZlMihydW5fY29tbWFuZF9mbj1tb2NrX3J1bl9jb21tYW5kLm1vY2tfcnVu
X2NvbW1hbmRfZm4pKSwKLSAgICAgICAgICAgICAgICAnY2hyb21pdW0tYW5kcm9pZCcsIG9wdGlv
bnM9b3B0aW9ucykKLSAgICAgICAgcG9ydDEgPSBjaHJvbWl1bV9hbmRyb2lkLkNocm9taXVtQW5k
cm9pZFBvcnQoCi0gICAgICAgICAgICAgICAgTW9ja1N5c3RlbUhvc3QoZXhlY3V0aXZlPU1vY2tF
eGVjdXRpdmUyKHJ1bl9jb21tYW5kX2ZuPW1vY2tfcnVuX2NvbW1hbmQubW9ja19ydW5fY29tbWFu
ZF9mbikpLAotICAgICAgICAgICAgICAgICdjaHJvbWl1bS1hbmRyb2lkJywgb3B0aW9ucz1vcHRp
b25zKQotICAgICAgICBjbWRfbGluZSA9IHBvcnQxLmRyaXZlcl9jbWRfbGluZSgpCi0gICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoY21kX2xpbmUuY291bnQoJy0tZW5jb2RlLWJpbmFyeScpLCAxKQot
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZF9saW5lLmNvdW50KCctLWVuYWJsZS1oYXJkd2Fy
ZS1ncHUnKSwgMSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvY2hyb21pdW1fbGludXgucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L2Nocm9taXVtX2xpbnV4LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAxZDg4ZGI3NThjMDdlY2ZmYzVmZDc1OTQxNTg1MTg2ODEyYzZmZDAwLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fbGludXgucHkKKysrIC9kZXYvbnVsbApAQCAt
MSwxNzAgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwot
IyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0j
IGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0j
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWltcG9ydCBsb2dnaW5nCi0KLWZyb20g
d2Via2l0cHkuY29tbW9uLndlYmtpdF9maW5kZXIgaW1wb3J0IFdlYktpdEZpbmRlcgotZnJvbSB3
ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgY2hyb21pdW0KLWZyb20gd2Via2l0cHku
bGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IGNvbmZpZwotCi0KLV9sb2cgPSBsb2dnaW5nLmdldExv
Z2dlcihfX25hbWVfXykKLQotCi1jbGFzcyBDaHJvbWl1bUxpbnV4UG9ydChjaHJvbWl1bS5DaHJv
bWl1bVBvcnQpOgotICAgIHBvcnRfbmFtZSA9ICdjaHJvbWl1bS1saW51eCcKLQotICAgIFNVUFBP
UlRFRF9BUkNISVRFQ1RVUkVTID0gKCd4ODYnLCAneDg2XzY0JykKLQotICAgIEZBTExCQUNLX1BB
VEhTID0gewotICAgICAgICAneDg2XzY0JzogWwotICAgICAgICAgICAgJ2Nocm9taXVtLWxpbnV4
JywKLSAgICAgICAgICAgICdjaHJvbWl1bS13aW4nLAotICAgICAgICAgICAgJ2Nocm9taXVtJywK
LSAgICAgICAgXSwKLSAgICAgICAgJ3g4Nic6IFsKLSAgICAgICAgICAgICdjaHJvbWl1bS1saW51
eC14ODYnLAotICAgICAgICAgICAgJ2Nocm9taXVtLWxpbnV4JywKLSAgICAgICAgICAgICdjaHJv
bWl1bS13aW4nLAotICAgICAgICAgICAgJ2Nocm9taXVtJywKLSAgICAgICAgXSwKLSAgICB9Ci0K
LSAgICBERUZBVUxUX0JVSUxEX0RJUkVDVE9SSUVTID0gKCdzY29uc2J1aWxkJywgJ291dCcpCi0K
LSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgX2RldGVybWluZV9kcml2ZXJfcGF0aF9zdGF0aWNh
bGx5KGNscywgaG9zdCwgb3B0aW9ucyk6Ci0gICAgICAgIGNvbmZpZ19vYmplY3QgPSBjb25maWcu
Q29uZmlnKGhvc3QuZXhlY3V0aXZlLCBob3N0LmZpbGVzeXN0ZW0pCi0gICAgICAgIGJ1aWxkX2Rp
cmVjdG9yeSA9IGdldGF0dHIob3B0aW9ucywgJ2J1aWxkX2RpcmVjdG9yeScsIE5vbmUpCi0gICAg
ICAgIHdlYmtpdF9iYXNlID0gV2ViS2l0RmluZGVyKGhvc3QuZmlsZXN5c3RlbSkud2Via2l0X2Jh
c2UoKQotICAgICAgICBjaHJvbWl1bV9iYXNlID0gY2xzLl9jaHJvbWl1bV9iYXNlX2Rpcihob3N0
LmZpbGVzeXN0ZW0pCi0gICAgICAgIGlmIGhhc2F0dHIob3B0aW9ucywgJ2NvbmZpZ3VyYXRpb24n
KSBhbmQgb3B0aW9ucy5jb25maWd1cmF0aW9uOgotICAgICAgICAgICAgY29uZmlndXJhdGlvbiA9
IG9wdGlvbnMuY29uZmlndXJhdGlvbgotICAgICAgICBlbHNlOgotICAgICAgICAgICAgY29uZmln
dXJhdGlvbiA9IGNvbmZpZ19vYmplY3QuZGVmYXVsdF9jb25maWd1cmF0aW9uKCkKLSAgICAgICAg
cmV0dXJuIGNscy5fc3RhdGljX2J1aWxkX3BhdGgoaG9zdC5maWxlc3lzdGVtLCBidWlsZF9kaXJl
Y3RvcnksIGNocm9taXVtX2Jhc2UsIHdlYmtpdF9iYXNlLCBjb25maWd1cmF0aW9uLCBbJ0R1bXBS
ZW5kZXJUcmVlJ10pCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIF9kZXRlcm1pbmVfYXJj
aGl0ZWN0dXJlKGZpbGVzeXN0ZW0sIGV4ZWN1dGl2ZSwgZHJpdmVyX3BhdGgpOgotICAgICAgICBm
aWxlX291dHB1dCA9ICcnCi0gICAgICAgIGlmIGZpbGVzeXN0ZW0uZXhpc3RzKGRyaXZlcl9wYXRo
KToKLSAgICAgICAgICAgICMgVGhlIC0tZGVyZWZlcmVuY2UgZmxhZyB0ZWxscyBmaWxlIHRvIGZv
bGxvdyBzeW1saW5rcwotICAgICAgICAgICAgZmlsZV9vdXRwdXQgPSBleGVjdXRpdmUucnVuX2Nv
bW1hbmQoWydmaWxlJywgJy0tZGVyZWZlcmVuY2UnLCBkcml2ZXJfcGF0aF0sIHJldHVybl9zdGRl
cnI9VHJ1ZSkKLQotICAgICAgICBpZiAnRUxGIDMyLWJpdCBMU0IgZXhlY3V0YWJsZScgaW4gZmls
ZV9vdXRwdXQ6Ci0gICAgICAgICAgICByZXR1cm4gJ3g4NicKLSAgICAgICAgaWYgJ0VMRiA2NC1i
aXQgTFNCIGV4ZWN1dGFibGUnIGluIGZpbGVfb3V0cHV0OgotICAgICAgICAgICAgcmV0dXJuICd4
ODZfNjQnCi0gICAgICAgIGlmIGZpbGVfb3V0cHV0OgotICAgICAgICAgICAgX2xvZy53YXJuaW5n
KCdDb3VsZCBub3QgZGV0ZXJtaW5lIGFyY2hpdGVjdHVyZSBmcm9tICJmaWxlIiBvdXRwdXQ6ICVz
JyAlIGZpbGVfb3V0cHV0KQotCi0gICAgICAgICMgV2UgZG9uJ3Qga25vdyB3aGF0IHRoZSBhcmNo
aXRlY3R1cmUgaXM7IGRlZmF1bHQgdG8gJ3g4NicgYmVjYXVzZQotICAgICAgICAjIG1heWJlIHdl
J3JlIHJlYmFzZWxpbmluZyBhbmQgdGhlIGJpbmFyeSBkb2Vzbid0IGFjdHVhbGx5IGV4aXN0LAot
ICAgICAgICAjIG9yIHNvbWV0aGluZyBlbHNlIHdlaXJkIGlzIGdvaW5nIG9uLiBJdCdzIG9rYXkg
dG8gZG8gdGhpcyBiZWNhdXNlCi0gICAgICAgICMgaWYgd2UgYWN0dWFsbHkgdHJ5IHRvIHVzZSB0
aGUgYmluYXJ5LCBjaGVja19idWlsZCgpIHNob3VsZCBmYWlsLgotICAgICAgICByZXR1cm4gJ3g4
Nl82NCcKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBkZXRlcm1pbmVfZnVsbF9wb3J0X25h
bWUoY2xzLCBob3N0LCBvcHRpb25zLCBwb3J0X25hbWUpOgotICAgICAgICBpZiBwb3J0X25hbWUu
ZW5kc3dpdGgoJy1saW51eCcpOgotICAgICAgICAgICAgcmV0dXJuIHBvcnRfbmFtZSArICctJyAr
IGNscy5fZGV0ZXJtaW5lX2FyY2hpdGVjdHVyZShob3N0LmZpbGVzeXN0ZW0sIGhvc3QuZXhlY3V0
aXZlLCBjbHMuX2RldGVybWluZV9kcml2ZXJfcGF0aF9zdGF0aWNhbGx5KGhvc3QsIG9wdGlvbnMp
KQotICAgICAgICByZXR1cm4gcG9ydF9uYW1lCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgaG9z
dCwgcG9ydF9uYW1lLCAqKmt3YXJncyk6Ci0gICAgICAgIGNocm9taXVtLkNocm9taXVtUG9ydC5f
X2luaXRfXyhzZWxmLCBob3N0LCBwb3J0X25hbWUsICoqa3dhcmdzKQotICAgICAgICAoYmFzZSwg
YXJjaCkgPSBwb3J0X25hbWUucnNwbGl0KCctJywgMSkKLSAgICAgICAgYXNzZXJ0IGJhc2UgPT0g
J2Nocm9taXVtLWxpbnV4JwotICAgICAgICBhc3NlcnQgYXJjaCBpbiBzZWxmLlNVUFBPUlRFRF9B
UkNISVRFQ1RVUkVTCi0gICAgICAgIGFzc2VydCBwb3J0X25hbWUgaW4gKCdjaHJvbWl1bS1saW51
eCcsICdjaHJvbWl1bS1saW51eC14ODYnLCAnY2hyb21pdW0tbGludXgteDg2XzY0JykKLSAgICAg
ICAgc2VsZi5fdmVyc2lvbiA9ICdsdWNpZCcgICMgV2Ugb25seSBzdXBwb3J0IGx1Y2lkIHJpZ2h0
IG5vdy4KLSAgICAgICAgc2VsZi5fYXJjaGl0ZWN0dXJlID0gYXJjaAotCi0gICAgZGVmIGRlZmF1
bHRfYmFzZWxpbmVfc2VhcmNoX3BhdGgoc2VsZik6Ci0gICAgICAgIHBvcnRfbmFtZXMgPSBzZWxm
LkZBTExCQUNLX1BBVEhTW3NlbGYuX2FyY2hpdGVjdHVyZV0KLSAgICAgICAgcmV0dXJuIG1hcChz
ZWxmLl93ZWJraXRfYmFzZWxpbmVfcGF0aCwgcG9ydF9uYW1lcykKLQotICAgIGRlZiBfbW9kdWxl
c190b19zZWFyY2hfZm9yX3N5bWJvbHMoc2VsZik6Ci0gICAgICAgIHJldHVybiBbc2VsZi5fYnVp
bGRfcGF0aCgnbGliZmZtcGVnc3Vtby5zbycpXQotCi0gICAgZGVmIGNoZWNrX2J1aWxkKHNlbGYs
IG5lZWRzX2h0dHApOgotICAgICAgICByZXN1bHQgPSBjaHJvbWl1bS5DaHJvbWl1bVBvcnQuY2hl
Y2tfYnVpbGQoc2VsZiwgbmVlZHNfaHR0cCkKLSAgICAgICAgaWYgbm90IHJlc3VsdDoKLSAgICAg
ICAgICAgIF9sb2cuZXJyb3IoJ0ZvciBjb21wbGV0ZSBMaW51eCBidWlsZCByZXF1aXJlbWVudHMs
IHBsZWFzZSBzZWU6JykKLSAgICAgICAgICAgIF9sb2cuZXJyb3IoJycpCi0gICAgICAgICAgICBf
bG9nLmVycm9yKCcgICAgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL3dpa2kvTGlu
dXhCdWlsZEluc3RydWN0aW9ucycpCi0gICAgICAgIHJldHVybiByZXN1bHQKLQotICAgIGRlZiBv
cGVyYXRpbmdfc3lzdGVtKHNlbGYpOgotICAgICAgICByZXR1cm4gJ2xpbnV4JwotCi0gICAgIwot
ICAgICMgUFJPVEVDVEVEIE1FVEhPRFMKLSAgICAjCi0KLSAgICBkZWYgX2NoZWNrX2FwYWNoZV9p
bnN0YWxsKHNlbGYpOgotICAgICAgICByZXN1bHQgPSBzZWxmLl9jaGVja19maWxlX2V4aXN0cyhz
ZWxmLl9wYXRoX3RvX2FwYWNoZSgpLCAiYXBhY2hlMiIpCi0gICAgICAgIHJlc3VsdCA9IHNlbGYu
X2NoZWNrX2ZpbGVfZXhpc3RzKHNlbGYuX3BhdGhfdG9fYXBhY2hlX2NvbmZpZ19maWxlKCksICJh
cGFjaGUyIGNvbmZpZyBmaWxlIikgYW5kIHJlc3VsdAotICAgICAgICBpZiBub3QgcmVzdWx0Ogot
ICAgICAgICAgICAgX2xvZy5lcnJvcignICAgIFBsZWFzZSBpbnN0YWxsIHVzaW5nOiAic3VkbyBh
cHQtZ2V0IGluc3RhbGwgYXBhY2hlMiBsaWJhcGFjaGUyLW1vZC1waHA1IicpCi0gICAgICAgICAg
ICBfbG9nLmVycm9yKCcnKQotICAgICAgICByZXR1cm4gcmVzdWx0Ci0KLSAgICBkZWYgX2NoZWNr
X2xpZ2h0dHBkX2luc3RhbGwoc2VsZik6Ci0gICAgICAgIHJlc3VsdCA9IHNlbGYuX2NoZWNrX2Zp
bGVfZXhpc3RzKAotICAgICAgICAgICAgc2VsZi5fcGF0aF90b19saWdodHRwZCgpLCAiTGlnSFRU
UGQgZXhlY3V0YWJsZSIpCi0gICAgICAgIHJlc3VsdCA9IHNlbGYuX2NoZWNrX2ZpbGVfZXhpc3Rz
KHNlbGYuX3BhdGhfdG9fbGlnaHR0cGRfcGhwKCksICJQSFAgQ0dJIGV4ZWN1dGFibGUiKSBhbmQg
cmVzdWx0Ci0gICAgICAgIHJlc3VsdCA9IHNlbGYuX2NoZWNrX2ZpbGVfZXhpc3RzKHNlbGYuX3Bh
dGhfdG9fbGlnaHR0cGRfbW9kdWxlcygpLCAiTGlnSFRUUGQgbW9kdWxlcyIpIGFuZCByZXN1bHQK
LSAgICAgICAgaWYgbm90IHJlc3VsdDoKLSAgICAgICAgICAgIF9sb2cuZXJyb3IoJyAgICBQbGVh
c2UgaW5zdGFsbCB1c2luZzogInN1ZG8gYXB0LWdldCBpbnN0YWxsIGxpZ2h0dHBkIHBocDUtY2dp
IicpCi0gICAgICAgICAgICBfbG9nLmVycm9yKCcnKQotICAgICAgICByZXR1cm4gcmVzdWx0Ci0K
LSAgICBkZWYgX3dkaWZmX21pc3NpbmdfbWVzc2FnZShzZWxmKToKLSAgICAgICAgcmV0dXJuICd3
ZGlmZiBpcyBub3QgaW5zdGFsbGVkOyBwbGVhc2UgaW5zdGFsbCB1c2luZyAic3VkbyBhcHQtZ2V0
IGluc3RhbGwgd2RpZmYiJwotCi0gICAgZGVmIF9wYXRoX3RvX2FwYWNoZShzZWxmKToKLSAgICAg
ICAgaWYgc2VsZi5faXNfcmVkaGF0X2Jhc2VkKCk6Ci0gICAgICAgICAgICByZXR1cm4gJy91c3Iv
c2Jpbi9odHRwZCcKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiAnL3Vzci9zYmlu
L2FwYWNoZTInCi0KLSAgICBkZWYgX3BhdGhfdG9fbGlnaHR0cGQoc2VsZik6Ci0gICAgICAgIHJl
dHVybiAiL3Vzci9zYmluL2xpZ2h0dHBkIgotCi0gICAgZGVmIF9wYXRoX3RvX2xpZ2h0dHBkX21v
ZHVsZXMoc2VsZik6Ci0gICAgICAgIHJldHVybiAiL3Vzci9saWIvbGlnaHR0cGQiCi0KLSAgICBk
ZWYgX3BhdGhfdG9fbGlnaHR0cGRfcGhwKHNlbGYpOgotICAgICAgICByZXR1cm4gIi91c3IvYmlu
L3BocC1jZ2kiCi0KLSAgICBkZWYgX3BhdGhfdG9fZHJpdmVyKHNlbGYsIGNvbmZpZ3VyYXRpb249
Tm9uZSk6Ci0gICAgICAgIGJpbmFyeV9uYW1lID0gc2VsZi5kcml2ZXJfbmFtZSgpCi0gICAgICAg
IHJldHVybiBzZWxmLl9idWlsZF9wYXRoX3dpdGhfY29uZmlndXJhdGlvbihjb25maWd1cmF0aW9u
LCBiaW5hcnlfbmFtZSkKLQotICAgIGRlZiBfcGF0aF90b19oZWxwZXIoc2VsZik6Ci0gICAgICAg
IHJldHVybiBOb25lCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2Nocm9taXVtX2xpbnV4X3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9saW51eF91bml0dGVzdC5weQpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzA4ZDAyZjkxZTg4OGI4YTcxZjc5ZTQ5YzM5NGYxYTRi
YzZmZmExYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2xpbnV4X3Vu
aXR0ZXN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLSMgQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
IyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
Ci1pbXBvcnQgdW5pdHRlc3QyIGFzIHVuaXR0ZXN0Ci0KLWZyb20gd2Via2l0cHkuY29tbW9uLnN5
c3RlbSBpbXBvcnQgZXhlY3V0aXZlX21vY2sKLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5z
eXN0ZW1ob3N0X21vY2sgaW1wb3J0IE1vY2tTeXN0ZW1Ib3N0Ci1mcm9tIHdlYmtpdHB5LnRvb2wu
bW9ja3Rvb2wgaW1wb3J0IE1vY2tPcHRpb25zCi0KLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3Rz
LnBvcnQgaW1wb3J0IGNocm9taXVtX2xpbnV4Ci1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5w
b3J0IGltcG9ydCBjaHJvbWl1bV9wb3J0X3Rlc3RjYXNlCi0KLQotY2xhc3MgQ2hyb21pdW1MaW51
eFBvcnRUZXN0KGNocm9taXVtX3BvcnRfdGVzdGNhc2UuQ2hyb21pdW1Qb3J0VGVzdENhc2UpOgot
ICAgIHBvcnRfbmFtZSA9ICdjaHJvbWl1bS1saW51eCcKLSAgICBwb3J0X21ha2VyID0gY2hyb21p
dW1fbGludXguQ2hyb21pdW1MaW51eFBvcnQKLQotICAgIGRlZiBhc3NlcnRfYXJjaGl0ZWN0dXJl
KHNlbGYsIHBvcnRfbmFtZT1Ob25lLCBmaWxlX291dHB1dD1Ob25lLCBleHBlY3RlZF9hcmNoaXRl
Y3R1cmU9Tm9uZSk6Ci0gICAgICAgIGhvc3QgPSBNb2NrU3lzdGVtSG9zdCgpCi0gICAgICAgIGhv
c3QuZmlsZXN5c3RlbS5leGlzdHMgPSBsYW1iZGEgeDogJ0R1bXBSZW5kZXJUcmVlJyBpbiB4Ci0g
ICAgICAgIGlmIGZpbGVfb3V0cHV0OgotICAgICAgICAgICAgaG9zdC5leGVjdXRpdmUgPSBleGVj
dXRpdmVfbW9jay5Nb2NrRXhlY3V0aXZlMihmaWxlX291dHB1dCkKLQotICAgICAgICBwb3J0ID0g
c2VsZi5tYWtlX3BvcnQoaG9zdCwgcG9ydF9uYW1lPXBvcnRfbmFtZSkKLSAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChwb3J0LmFyY2hpdGVjdHVyZSgpLCBleHBlY3RlZF9hcmNoaXRlY3R1cmUpCi0g
ICAgICAgIGlmIGV4cGVjdGVkX2FyY2hpdGVjdHVyZSA9PSAneDg2JzoKLSAgICAgICAgICAgIHNl
bGYuYXNzZXJ0VHJ1ZShwb3J0LmJhc2VsaW5lX3BhdGgoKS5lbmRzd2l0aCgnY2hyb21pdW0tbGlu
dXgteDg2JykpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocG9ydC5iYXNlbGluZV9zZWFy
Y2hfcGF0aCgpWzBdLmVuZHN3aXRoKCdjaHJvbWl1bS1saW51eC14ODYnKSkKLSAgICAgICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZShwb3J0LmJhc2VsaW5lX3NlYXJjaF9wYXRoKClbMV0uZW5kc3dpdGgo
J2Nocm9taXVtLWxpbnV4JykpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmFzc2Vy
dFRydWUocG9ydC5iYXNlbGluZV9wYXRoKCkuZW5kc3dpdGgoJ2Nocm9taXVtLWxpbnV4JykpCi0g
ICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocG9ydC5iYXNlbGluZV9zZWFyY2hfcGF0aCgpWzBd
LmVuZHN3aXRoKCdjaHJvbWl1bS1saW51eCcpKQotCi0gICAgZGVmIHRlc3RfYXJjaGl0ZWN0dXJl
cyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfYXJjaGl0ZWN0dXJlKHBvcnRfbmFtZT0nY2hy
b21pdW0tbGludXgteDg2JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVj
dGVkX2FyY2hpdGVjdHVyZT0neDg2JykKLSAgICAgICAgc2VsZi5hc3NlcnRfYXJjaGl0ZWN0dXJl
KHBvcnRfbmFtZT0nY2hyb21pdW0tbGludXgteDg2XzY0JywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGV4cGVjdGVkX2FyY2hpdGVjdHVyZT0neDg2XzY0JykKLSAgICAgICAgc2Vs
Zi5hc3NlcnRfYXJjaGl0ZWN0dXJlKGZpbGVfb3V0cHV0PSdFTEYgMzItYml0IExTQiBleGVjdXRh
YmxlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2FyY2hpdGVj
dHVyZT0neDg2JykKLSAgICAgICAgc2VsZi5hc3NlcnRfYXJjaGl0ZWN0dXJlKGZpbGVfb3V0cHV0
PSdFTEYgNjQtYml0IExTQiBleGVjdXRhYmxlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGV4cGVjdGVkX2FyY2hpdGVjdHVyZT0neDg2XzY0JykKLQotICAgIGRlZiB0ZXN0X2No
ZWNrX2lsbGVnYWxfcG9ydF9uYW1lcyhzZWxmKToKLSAgICAgICAgIyBGSVhNRTogQ2hlY2sgdGhh
dCwgZm9yIG5vdywgdGhlc2UgYXJlIGlsbGVnYWwgcG9ydCBuYW1lcy4KLSAgICAgICAgIyBFdmVu
dHVhbGx5IHdlIHNob3VsZCBiZSBhYmxlIHRvIGRvIHRoZSByaWdodCB0aGluZyBoZXJlLgotICAg
ICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgY2hyb21pdW1fbGludXguQ2hy
b21pdW1MaW51eFBvcnQsIE1vY2tTeXN0ZW1Ib3N0KCksIHBvcnRfbmFtZT0nY2hyb21pdW0teDg2
LWxpbnV4JykKLQotICAgIGRlZiB0ZXN0X2RldGVybWluZV9hcmNoaXRlY3R1cmVfZmFpbHMoc2Vs
Zik6Ci0gICAgICAgICMgVGVzdCB0aGF0IHdlIGRlZmF1bHQgdG8gJ3g4NicgaWYgdGhlIGRyaXZl
ciBkb2Vzbid0IGV4aXN0LgotICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQotICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHBvcnQuYXJjaGl0ZWN0dXJlKCksICd4ODZfNjQnKQotCi0gICAg
ICAgICMgVGVzdCB0aGF0IHdlIGRlZmF1bHQgdG8gJ3g4Nicgb24gYW4gdW5rbm93biBhcmNoaXRl
Y3R1cmUuCi0gICAgICAgIGhvc3QgPSBNb2NrU3lzdGVtSG9zdCgpCi0gICAgICAgIGhvc3QuZmls
ZXN5c3RlbS5leGlzdHMgPSBsYW1iZGEgeDogVHJ1ZQotICAgICAgICBob3N0LmV4ZWN1dGl2ZSA9
IGV4ZWN1dGl2ZV9tb2NrLk1vY2tFeGVjdXRpdmUyKCd3aW4zMicpCi0gICAgICAgIHBvcnQgPSBz
ZWxmLm1ha2VfcG9ydChob3N0PWhvc3QpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9ydC5h
cmNoaXRlY3R1cmUoKSwgJ3g4Nl82NCcpCi0KLSAgICAgICAgIyBUZXN0IHRoYXQgd2UgcmFpc2Ug
ZXJyb3JzIGlmIHNvbWV0aGluZyB3ZWlyZCBoYXBwZW5zLgotICAgICAgICBob3N0LmV4ZWN1dGl2
ZSA9IGV4ZWN1dGl2ZV9tb2NrLk1vY2tFeGVjdXRpdmUyKGV4Y2VwdGlvbj1Bc3NlcnRpb25FcnJv
cikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIGNocm9taXVtX2xp
bnV4LkNocm9taXVtTGludXhQb3J0LCBob3N0LCBzZWxmLnBvcnRfbmFtZSkKLQotICAgIGRlZiB0
ZXN0X29wZXJhdGluZ19zeXN0ZW0oc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2xp
bnV4Jywgc2VsZi5tYWtlX3BvcnQoKS5vcGVyYXRpbmdfc3lzdGVtKCkpCi0KLSAgICBkZWYgdGVz
dF9idWlsZF9wYXRoKHNlbGYpOgotICAgICAgICAjIFRlc3QgdGhhdCBvcHRpb25hbCBwYXRocyBh
cmUgdXNlZCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhleSBleGlzdC4KLSAgICAgICAgb3B0aW9u
cyA9IE1vY2tPcHRpb25zKGNvbmZpZ3VyYXRpb249J1JlbGVhc2UnLCBidWlsZF9kaXJlY3Rvcnk9
Jy9mb28nKQotICAgICAgICBzZWxmLmFzc2VydF9idWlsZF9wYXRoKG9wdGlvbnMsIFsnL21vY2st
Y2hlY2tvdXQvU291cmNlL1dlYktpdC9jaHJvbWl1bS9vdXQvUmVsZWFzZSddLCAnL2Zvby9SZWxl
YXNlJykKLQotICAgICAgICAjIFRlc3QgdGhhdCBvcHRpb25hbCByZWxhdGl2ZSBwYXRocyBhcmUg
cmV0dXJuZWQgdW5tb2RpZmllZC4KLSAgICAgICAgb3B0aW9ucyA9IE1vY2tPcHRpb25zKGNvbmZp
Z3VyYXRpb249J1JlbGVhc2UnLCBidWlsZF9kaXJlY3Rvcnk9J2ZvbycpCi0gICAgICAgIHNlbGYu
YXNzZXJ0X2J1aWxkX3BhdGgob3B0aW9ucywgWycvbW9jay1jaGVja291dC9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL291dC9SZWxlYXNlJ10sICdmb28vUmVsZWFzZScpCi0KLSAgICAgICAgIyBUZXN0
IHRoYXQgd2UgcHJlZmVyIHRoZSBsZWdhY3kgZGlyIG92ZXIgdGhlIG5ldyBkaXIuCi0gICAgICAg
IG9wdGlvbnMgPSBNb2NrT3B0aW9ucyhjb25maWd1cmF0aW9uPSdSZWxlYXNlJywgYnVpbGRfZGly
ZWN0b3J5PU5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2J1aWxkX3BhdGgob3B0aW9ucywgWycv
bW9jay1jaGVja291dC9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Njb25zYnVpbGQvUmVsZWFzZScs
ICcvbW9jay1jaGVja291dC9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL291dC9SZWxlYXNlJ10sICcv
bW9jay1jaGVja291dC9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Njb25zYnVpbGQvUmVsZWFzZScp
Ci0KLSAgICBkZWYgdGVzdF9kcml2ZXJfbmFtZV9vcHRpb24oc2VsZik6Ci0gICAgICAgIHNlbGYu
YXNzZXJ0VHJ1ZShzZWxmLm1ha2VfcG9ydCgpLl9wYXRoX3RvX2RyaXZlcigpLmVuZHN3aXRoKCdE
dW1wUmVuZGVyVHJlZScpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYWtlX3BvcnQo
b3B0aW9ucz1Nb2NrT3B0aW9ucyhkcml2ZXJfbmFtZT0nT3RoZXJEcml2ZXInKSkuX3BhdGhfdG9f
ZHJpdmVyKCkuZW5kc3dpdGgoJ090aGVyRHJpdmVyJykpCi0KLSAgICBkZWYgdGVzdF9wYXRoX3Rv
X2ltYWdlX2RpZmYoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5tYWtlX3Bv
cnQoKS5fcGF0aF90b19pbWFnZV9kaWZmKCksICcvbW9jay1jaGVja291dC9vdXQvUmVsZWFzZS9J
bWFnZURpZmYnKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9jaHJvbWl1bV9tYWMucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2Nocm9taXVtX21hYy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MzlkZTUyOWM1NjU5M2Y5ZjVmMDBiMTkzOTVhM2EzYmIyYjUwNGNmNS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX21hYy5weQorKysgL2Rldi9udWxsCkBAIC0xLDEyOCAr
MCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJp
YnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotIiIiQ2hyb21pdW0gTWFjIGltcGxlbWVudGF0aW9u
IG9mIHRoZSBQb3J0IGludGVyZmFjZS4iIiIKLQotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBzaWdu
YWwKLQotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgY2hyb21pdW0KLQot
Ci1fbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCi0KLQotY2xhc3MgQ2hyb21pdW1N
YWNQb3J0KGNocm9taXVtLkNocm9taXVtUG9ydCk6Ci0gICAgU1VQUE9SVEVEX09TX1ZFUlNJT05T
ID0gKCdzbm93bGVvcGFyZCcsICdsaW9uJywgJ21vdW50YWlubGlvbicsICdmdXR1cmUnKQotICAg
IHBvcnRfbmFtZSA9ICdjaHJvbWl1bS1tYWMnCi0KLSAgICBGQUxMQkFDS19QQVRIUyA9IHsKLSAg
ICAgICAgJ3Nub3dsZW9wYXJkJzogWwotICAgICAgICAgICAgJ2Nocm9taXVtLW1hYy1zbm93bGVv
cGFyZCcsCi0gICAgICAgICAgICAnY2hyb21pdW0tbWFjLWxpb24nLAotICAgICAgICAgICAgJ2No
cm9taXVtLW1hYycsCi0gICAgICAgICAgICAnY2hyb21pdW0nLAotICAgICAgICBdLAotICAgICAg
ICAnbGlvbic6IFsKLSAgICAgICAgICAgICdjaHJvbWl1bS1tYWMtbGlvbicsCi0gICAgICAgICAg
ICAnY2hyb21pdW0tbWFjJywKLSAgICAgICAgICAgICdjaHJvbWl1bScsCi0gICAgICAgIF0sCi0g
ICAgICAgICdtb3VudGFpbmxpb24nOiBbCi0gICAgICAgICAgICAnY2hyb21pdW0tbWFjJywKLSAg
ICAgICAgICAgICdjaHJvbWl1bScsCi0gICAgICAgIF0sCi0gICAgICAgICdmdXR1cmUnOiBbCi0g
ICAgICAgICAgICAnY2hyb21pdW0tbWFjJywKLSAgICAgICAgICAgICdjaHJvbWl1bScsCi0gICAg
ICAgIF0sCi0gICAgfQotCi0gICAgREVGQVVMVF9CVUlMRF9ESVJFQ1RPUklFUyA9ICgneGNvZGVi
dWlsZCcsICdvdXQnKQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGRldGVybWluZV9mdWxs
X3BvcnRfbmFtZShjbHMsIGhvc3QsIG9wdGlvbnMsIHBvcnRfbmFtZSk6Ci0gICAgICAgIGlmIHBv
cnRfbmFtZS5lbmRzd2l0aCgnLW1hYycpOgotICAgICAgICAgICAgcmV0dXJuIHBvcnRfbmFtZSAr
ICctJyArIGhvc3QucGxhdGZvcm0ub3NfdmVyc2lvbgotICAgICAgICByZXR1cm4gcG9ydF9uYW1l
Ci0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncyk6Ci0g
ICAgICAgIGNocm9taXVtLkNocm9taXVtUG9ydC5fX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0X25h
bWUsICoqa3dhcmdzKQotICAgICAgICBzZWxmLl92ZXJzaW9uID0gcG9ydF9uYW1lW3BvcnRfbmFt
ZS5pbmRleCgnY2hyb21pdW0tbWFjLScpICsgbGVuKCdjaHJvbWl1bS1tYWMtJyk6XQotICAgICAg
ICBhc3NlcnQgc2VsZi5fdmVyc2lvbiBpbiBzZWxmLlNVUFBPUlRFRF9PU19WRVJTSU9OUwotCi0g
ICAgZGVmIF9tb2R1bGVzX3RvX3NlYXJjaF9mb3Jfc3ltYm9scyhzZWxmKToKLSAgICAgICAgcmV0
dXJuIFtzZWxmLl9idWlsZF9wYXRoKCdmZm1wZWdzdW1vLnNvJyldCi0KLSAgICBkZWYgY2hlY2tf
YnVpbGQoc2VsZiwgbmVlZHNfaHR0cCk6Ci0gICAgICAgIHJlc3VsdCA9IGNocm9taXVtLkNocm9t
aXVtUG9ydC5jaGVja19idWlsZChzZWxmLCBuZWVkc19odHRwKQotICAgICAgICBpZiBub3QgcmVz
dWx0OgotICAgICAgICAgICAgX2xvZy5lcnJvcignRm9yIGNvbXBsZXRlIE1hYyBidWlsZCByZXF1
aXJlbWVudHMsIHBsZWFzZSBzZWU6JykKLSAgICAgICAgICAgIF9sb2cuZXJyb3IoJycpCi0gICAg
ICAgICAgICBfbG9nLmVycm9yKCcgICAgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVt
L3dpa2kvTWFjQnVpbGRJbnN0cnVjdGlvbnMnKQotCi0gICAgICAgIHJldHVybiByZXN1bHQKLQot
ICAgIGRlZiBvcGVyYXRpbmdfc3lzdGVtKHNlbGYpOgotICAgICAgICByZXR1cm4gJ21hYycKLQot
ICAgICMKLSAgICAjIFBST1RFQ1RFRCBNRVRIT0RTCi0gICAgIwotCi0gICAgZGVmIF9saWdodHRw
ZF9wYXRoKHNlbGYsICpjb21wcyk6Ci0gICAgICAgIHJldHVybiBzZWxmLnBhdGhfZnJvbV9jaHJv
bWl1bV9iYXNlKCd0aGlyZF9wYXJ0eScsICdsaWdodHRwZCcsICdtYWMnLCAqY29tcHMpCi0KLSAg
ICBkZWYgX3dkaWZmX21pc3NpbmdfbWVzc2FnZShzZWxmKToKLSAgICAgICAgcmV0dXJuICd3ZGlm
ZiBpcyBub3QgaW5zdGFsbGVkOyBwbGVhc2UgaW5zdGFsbCBmcm9tIE1hY1BvcnRzIG9yIGVsc2V3
aGVyZScKLQotICAgIGRlZiBfcGF0aF90b19hcGFjaGUoc2VsZik6Ci0gICAgICAgIHJldHVybiAn
L3Vzci9zYmluL2h0dHBkJwotCi0gICAgZGVmIF9wYXRoX3RvX2FwYWNoZV9jb25maWdfZmlsZShz
ZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLmxheW91dF90
ZXN0c19kaXIoKSwgJ2h0dHAnLCAnY29uZicsICdhcGFjaGUyLWh0dHBkLmNvbmYnKQotCi0gICAg
ZGVmIF9wYXRoX3RvX2xpZ2h0dHBkKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fbGlnaHR0
cGRfcGF0aCgnYmluJywgJ2xpZ2h0dHBkJykKLQotICAgIGRlZiBfcGF0aF90b19saWdodHRwZF9t
b2R1bGVzKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fbGlnaHR0cGRfcGF0aCgnbGliJykK
LQotICAgIGRlZiBfcGF0aF90b19saWdodHRwZF9waHAoc2VsZik6Ci0gICAgICAgIHJldHVybiBz
ZWxmLl9saWdodHRwZF9wYXRoKCdiaW4nLCAncGhwLWNnaScpCi0KLSAgICBkZWYgX3BhdGhfdG9f
ZHJpdmVyKHNlbGYsIGNvbmZpZ3VyYXRpb249Tm9uZSk6Ci0gICAgICAgICMgRklYTUU6IG1ha2Ug
fGNvbmZpZ3VyYXRpb258IGhhcHB5IHdpdGggY2FzZS1zZW5zaXRpdmUgZmlsZSBzeXN0ZW1zLgot
ICAgICAgICByZXR1cm4gc2VsZi5fYnVpbGRfcGF0aF93aXRoX2NvbmZpZ3VyYXRpb24oY29uZmln
dXJhdGlvbiwgc2VsZi5kcml2ZXJfbmFtZSgpICsgJy5hcHAnLCAnQ29udGVudHMnLCAnTWFjT1Mn
LCBzZWxmLmRyaXZlcl9uYW1lKCkpCi0KLSAgICBkZWYgX3BhdGhfdG9faGVscGVyKHNlbGYpOgot
ICAgICAgICBiaW5hcnlfbmFtZSA9ICdMYXlvdXRUZXN0SGVscGVyJwotICAgICAgICByZXR1cm4g
c2VsZi5fYnVpbGRfcGF0aChiaW5hcnlfbmFtZSkKLQotICAgIGRlZiBfcGF0aF90b193ZGlmZihz
ZWxmKToKLSAgICAgICAgcmV0dXJuICd3ZGlmZicKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fbWFjX3VuaXR0ZXN0LnB5IGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9tYWNfdW5pdHRl
c3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMmZmOGY4YzlmZjA3MTFjNmFl
YTBmZGJiNWI4NjJmODAxYjA5MDguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJv
bWl1bV9tYWNfdW5pdHRlc3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMTEgKzAsMCBAQAotIyBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwot
IyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0KLWltcG9ydCB1bml0dGVzdDIgYXMgdW5pdHRlc3QKLQotZnJvbSB3ZWJraXRw
eS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgY2hyb21pdW1fbWFjCi1mcm9tIHdlYmtpdHB5Lmxh
eW91dF90ZXN0cy5wb3J0IGltcG9ydCBjaHJvbWl1bV9wb3J0X3Rlc3RjYXNlCi1mcm9tIHdlYmtp
dHB5LnRvb2wubW9ja3Rvb2wgaW1wb3J0IE1vY2tPcHRpb25zCi0KLQotY2xhc3MgQ2hyb21pdW1N
YWNQb3J0VGVzdChjaHJvbWl1bV9wb3J0X3Rlc3RjYXNlLkNocm9taXVtUG9ydFRlc3RDYXNlKToK
LSAgICBvc19uYW1lID0gJ21hYycKLSAgICBvc192ZXJzaW9uID0gJ3Nub3dsZW9wYXJkJwotICAg
IHBvcnRfbmFtZSA9ICdjaHJvbWl1bS1tYWMnCi0gICAgcG9ydF9tYWtlciA9IGNocm9taXVtX21h
Yy5DaHJvbWl1bU1hY1BvcnQKLQotICAgIGRlZiBhc3NlcnRfbmFtZShzZWxmLCBwb3J0X25hbWUs
IG9zX3ZlcnNpb25fc3RyaW5nLCBleHBlY3RlZCk6Ci0gICAgICAgIHBvcnQgPSBzZWxmLm1ha2Vf
cG9ydChvc192ZXJzaW9uPW9zX3ZlcnNpb25fc3RyaW5nLCBwb3J0X25hbWU9cG9ydF9uYW1lKQot
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBwb3J0Lm5hbWUoKSkKLQotICAgIGRl
ZiB0ZXN0X3ZlcnNpb25zKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYWtl
X3BvcnQoKS5uYW1lKCkgaW4gKCdjaHJvbWl1bS1tYWMtc25vd2xlb3BhcmQnLCAnY2hyb21pdW0t
bWFjLWxpb24nLCAnY2hyb21pdW0tbWFjLW1vdW50YWlubGlvbicsICdjaHJvbWl1bS1tYWMtZnV0
dXJlJykpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRfbmFtZShOb25lLCAnc25vd2xlb3BhcmQnLCAn
Y2hyb21pdW0tbWFjLXNub3dsZW9wYXJkJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbmFtZSgnY2hy
b21pdW0tbWFjJywgJ3Nub3dsZW9wYXJkJywgJ2Nocm9taXVtLW1hYy1zbm93bGVvcGFyZCcpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0X25hbWUoJ2Nocm9taXVtLW1hYy1zbm93bGVvcGFyZCcsICdsZW9w
YXJkJywgJ2Nocm9taXVtLW1hYy1zbm93bGVvcGFyZCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0X25h
bWUoJ2Nocm9taXVtLW1hYy1zbm93bGVvcGFyZCcsICdzbm93bGVvcGFyZCcsICdjaHJvbWl1bS1t
YWMtc25vd2xlb3BhcmQnKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0X25hbWUoTm9uZSwgJ2xpb24n
LCAnY2hyb21pdW0tbWFjLWxpb24nKQotICAgICAgICBzZWxmLmFzc2VydF9uYW1lKE5vbmUsICdt
b3VudGFpbmxpb24nLCAnY2hyb21pdW0tbWFjLW1vdW50YWlubGlvbicpCi0gICAgICAgIHNlbGYu
YXNzZXJ0X25hbWUoTm9uZSwgJ2Z1dHVyZScsICdjaHJvbWl1bS1tYWMtZnV0dXJlJykKLQotICAg
ICAgICBzZWxmLmFzc2VydF9uYW1lKCdjaHJvbWl1bS1tYWMnLCAnbGlvbicsICdjaHJvbWl1bS1t
YWMtbGlvbicpCi0gICAgICAgIHNlbGYuYXNzZXJ0X25hbWUoJ2Nocm9taXVtLW1hYy1mdXR1cmUn
LCAnc25vd2xlb3BhcmQnLCAnY2hyb21pdW0tbWFjLWZ1dHVyZScpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0X25hbWUoJ2Nocm9taXVtLW1hYy1mdXR1cmUnLCAnbGlvbicsICdjaHJvbWl1bS1tYWMtZnV0
dXJlJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbmFtZSgnY2hyb21pdW0tbWFjLWZ1dHVyZScsICdt
b3VudGFpbmxpb24nLCAnY2hyb21pdW0tbWFjLWZ1dHVyZScpCi0KLSAgICAgICAgc2VsZi5hc3Nl
cnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIHNlbGYuYXNzZXJ0X25hbWUsIE5vbmUsICd0aWdlcics
ICdzaG91bGQtcmFpc2UtYXNzZXJ0aW9uLXNvLXRoaXMtdmFsdWUtZG9lcy1ub3QtbWF0dGVyJykK
LQotICAgIGRlZiB0ZXN0X2Jhc2VsaW5lX3BhdGgoc2VsZik6Ci0gICAgICAgIHBvcnQgPSBzZWxm
Lm1ha2VfcG9ydChwb3J0X25hbWU9J2Nocm9taXVtLW1hYy1zbm93bGVvcGFyZCcpCi0gICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwocG9ydC5iYXNlbGluZV9wYXRoKCksIHBvcnQuX3dlYmtpdF9iYXNl
bGluZV9wYXRoKCdjaHJvbWl1bS1tYWMtc25vd2xlb3BhcmQnKSkKLQotICAgICAgICBwb3J0ID0g
c2VsZi5tYWtlX3BvcnQocG9ydF9uYW1lPSdjaHJvbWl1bS1tYWMtbGlvbicpCi0gICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwocG9ydC5iYXNlbGluZV9wYXRoKCksIHBvcnQuX3dlYmtpdF9iYXNlbGlu
ZV9wYXRoKCdjaHJvbWl1bS1tYWMtbGlvbicpKQotCi0gICAgICAgIHBvcnQgPSBzZWxmLm1ha2Vf
cG9ydChwb3J0X25hbWU9J2Nocm9taXVtLW1hYy1tb3VudGFpbmxpb24nKQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKHBvcnQuYmFzZWxpbmVfcGF0aCgpLCBwb3J0Ll93ZWJraXRfYmFzZWxpbmVf
cGF0aCgnY2hyb21pdW0tbWFjJykpCi0KLSAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KHBv
cnRfbmFtZT0nY2hyb21pdW0tbWFjLWZ1dHVyZScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
cG9ydC5iYXNlbGluZV9wYXRoKCksIHBvcnQuX3dlYmtpdF9iYXNlbGluZV9wYXRoKCdjaHJvbWl1
bS1tYWMnKSkKLQotICAgIGRlZiB0ZXN0X29wZXJhdGluZ19zeXN0ZW0oc2VsZik6Ci0gICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoJ21hYycsIHNlbGYubWFrZV9wb3J0KCkub3BlcmF0aW5nX3N5c3Rl
bSgpKQotCi0gICAgZGVmIHRlc3RfYnVpbGRfcGF0aChzZWxmKToKLSAgICAgICAgIyBUZXN0IHRo
YXQgb3B0aW9uYWwgcGF0aHMgYXJlIHVzZWQgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZXkgZXhp
c3QuCi0gICAgICAgIG9wdGlvbnMgPSBNb2NrT3B0aW9ucyhjb25maWd1cmF0aW9uPSdSZWxlYXNl
JywgYnVpbGRfZGlyZWN0b3J5PScvZm9vJykKLSAgICAgICAgc2VsZi5hc3NlcnRfYnVpbGRfcGF0
aChvcHRpb25zLCBbJy9tb2NrLWNoZWNrb3V0L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vb3V0L1Jl
bGVhc2UnXSwgJy9mb28vUmVsZWFzZScpCi0KLSAgICAgICAgIyBUZXN0IHRoYXQgb3B0aW9uYWwg
cmVsYXRpdmUgcGF0aHMgYXJlIHJldHVybmVkIHVubW9kaWZpZWQuCi0gICAgICAgIG9wdGlvbnMg
PSBNb2NrT3B0aW9ucyhjb25maWd1cmF0aW9uPSdSZWxlYXNlJywgYnVpbGRfZGlyZWN0b3J5PSdm
b28nKQotICAgICAgICBzZWxmLmFzc2VydF9idWlsZF9wYXRoKG9wdGlvbnMsIFsnL21vY2stY2hl
Y2tvdXQvU291cmNlL1dlYktpdC9jaHJvbWl1bS9vdXQvUmVsZWFzZSddLCAnZm9vL1JlbGVhc2Un
KQotCi0gICAgICAgICMgVGVzdCB0aGF0IHdlIHByZWZlciB0aGUgbGVnYWN5IGRpciBvdmVyIHRo
ZSBuZXcgZGlyLgotICAgICAgICBvcHRpb25zID0gTW9ja09wdGlvbnMoY29uZmlndXJhdGlvbj0n
UmVsZWFzZScsIGJ1aWxkX2RpcmVjdG9yeT1Ob25lKQotICAgICAgICBzZWxmLmFzc2VydF9idWls
ZF9wYXRoKG9wdGlvbnMsIFsnL21vY2stY2hlY2tvdXQvU291cmNlL1dlYktpdC9jaHJvbWl1bS94
Y29kZWJ1aWxkL1JlbGVhc2UnLCAnL21vY2stY2hlY2tvdXQvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9vdXQvUmVsZWFzZSddLCAnL21vY2stY2hlY2tvdXQvU291cmNlL1dlYktpdC9jaHJvbWl1bS94
Y29kZWJ1aWxkL1JlbGVhc2UnKQotCi0gICAgZGVmIHRlc3RfYnVpbGRfcGF0aF90aW1lc3RhbXBz
KHNlbGYpOgotICAgICAgICBvcHRpb25zID0gTW9ja09wdGlvbnMoY29uZmlndXJhdGlvbj0nUmVs
ZWFzZScsIGJ1aWxkX2RpcmVjdG9yeT1Ob25lKQotICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3Bv
cnQob3B0aW9ucz1vcHRpb25zKQotICAgICAgICBwb3J0Lmhvc3QuZmlsZXN5c3RlbS5tYXliZV9t
YWtlX2RpcmVjdG9yeSgnL21vY2stY2hlY2tvdXQvb3V0L1JlbGVhc2UnKQotICAgICAgICBwb3J0
Lmhvc3QuZmlsZXN5c3RlbS5tYXliZV9tYWtlX2RpcmVjdG9yeSgnL21vY2stY2hlY2tvdXQveGNv
ZGVidWlsZC9SZWxlYXNlJykKLSAgICAgICAgIyBDaGVjayB3aXRoICdvdXQnIGJlaW5nIG5ld2Vy
LgotICAgICAgICBwb3J0Lmhvc3QuZmlsZXN5c3RlbS5tdGltZSA9IGxhbWJkYSBmOiA1IGlmICcv
b3V0LycgaW4gZiBlbHNlIDQKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0Ll9idWlsZF9w
YXRoKCksICcvbW9jay1jaGVja291dC9vdXQvUmVsZWFzZScpCi0gICAgICAgICMgQ2hlY2sgd2l0
aCAneGNvZGVidWlsZCcgYmVpbmcgbmV3ZXIuCi0gICAgICAgIHBvcnQuaG9zdC5maWxlc3lzdGVt
Lm10aW1lID0gbGFtYmRhIGY6IDUgaWYgJy94Y29kZWJ1aWxkLycgaW4gZiBlbHNlIDQKLSAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0Ll9idWlsZF9wYXRoKCksICcvbW9jay1jaGVja291dC94
Y29kZWJ1aWxkL1JlbGVhc2UnKQotCi0gICAgZGVmIHRlc3RfZHJpdmVyX25hbWVfb3B0aW9uKHNl
bGYpOgotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYWtlX3BvcnQoKS5fcGF0aF90b19k
cml2ZXIoKS5lbmRzd2l0aCgnRHVtcFJlbmRlclRyZWUnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRU
cnVlKHNlbGYubWFrZV9wb3J0KG9wdGlvbnM9TW9ja09wdGlvbnMoZHJpdmVyX25hbWU9J090aGVy
RHJpdmVyJykpLl9wYXRoX3RvX2RyaXZlcigpLmVuZHN3aXRoKCdPdGhlckRyaXZlcicpKQotCi0g
ICAgZGVmIHRlc3RfcGF0aF90b19pbWFnZV9kaWZmKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHNlbGYubWFrZV9wb3J0KCkuX3BhdGhfdG9faW1hZ2VfZGlmZigpLCAnL21vY2stY2hl
Y2tvdXQvb3V0L1JlbGVhc2UvSW1hZ2VEaWZmJykKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fcG9ydF90ZXN0Y2FzZS5weSBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fcG9ydF90ZXN0
Y2FzZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjE1MWNlZDdkMWIwMmNjMjg0
Mjg0YjExZjFlMjdmY2QxMzQ5YzAwYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2No
cm9taXVtX3BvcnRfdGVzdGNhc2UucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMjAgKzAsMCBAQAot
IyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMK
LSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0j
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0j
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0j
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0KLWltcG9ydCB1bml0dGVzdDIgYXMgdW5pdHRlc3QKLQotZnJvbSB3ZWJr
aXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBsb2d0ZXN0aW5nCi1mcm9tIHdlYmtpdHB5LmNvbW1v
bi5zeXN0ZW0uZXhlY3V0aXZlX21vY2sgaW1wb3J0IE1vY2tFeGVjdXRpdmUyCi1mcm9tIHdlYmtp
dHB5LmNvbW1vbi5zeXN0ZW0uc3lzdGVtaG9zdF9tb2NrIGltcG9ydCBNb2NrU3lzdGVtSG9zdAot
ZnJvbSB3ZWJraXRweS50b29sLm1vY2t0b29sIGltcG9ydCBNb2NrT3B0aW9ucwotCi1pbXBvcnQg
Y2hyb21pdW1fYW5kcm9pZAotaW1wb3J0IGNocm9taXVtX2xpbnV4Ci1pbXBvcnQgY2hyb21pdW1f
bWFjCi1pbXBvcnQgY2hyb21pdW1fd2luCi0KLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLm1v
ZGVscy50ZXN0X2NvbmZpZ3VyYXRpb24gaW1wb3J0IFRlc3RDb25maWd1cmF0aW9uCi1mcm9tIHdl
YmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBwb3J0X3Rlc3RjYXNlCi0KLQotY2xhc3Mg
Q2hyb21pdW1Qb3J0VGVzdENhc2UocG9ydF90ZXN0Y2FzZS5Qb3J0VGVzdENhc2UpOgotCi0gICAg
ZGVmIHRlc3RfY2hlY2tfYnVpbGQoc2VsZik6Ci0gICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9y
dCgpCi0gICAgICAgIHBvcnQuY2hlY2tfYnVpbGQobmVlZHNfaHR0cD1UcnVlKQotCi0gICAgZGVm
IHRlc3RfZGVmYXVsdF9tYXhfbG9ja2VkX3NoYXJkcyhzZWxmKToKLSAgICAgICAgcG9ydCA9IHNl
bGYubWFrZV9wb3J0KCkKLSAgICAgICAgcG9ydC5kZWZhdWx0X2NoaWxkX3Byb2Nlc3NlcyA9IGxh
bWJkYTogMTYKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0LmRlZmF1bHRfbWF4X2xvY2tl
ZF9zaGFyZHMoKSwgNCkKLSAgICAgICAgcG9ydC5kZWZhdWx0X2NoaWxkX3Byb2Nlc3NlcyA9IGxh
bWJkYTogMgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQuZGVmYXVsdF9tYXhfbG9ja2Vk
X3NoYXJkcygpLCAxKQotCi0gICAgZGVmIHRlc3RfZGVmYXVsdF90aW1lb3V0X21zKHNlbGYpOgot
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9wb3J0KG9wdGlvbnM9TW9ja09wdGlv
bnMoY29uZmlndXJhdGlvbj0nUmVsZWFzZScpKS5kZWZhdWx0X3RpbWVvdXRfbXMoKSwgNjAwMCkK
LSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1ha2VfcG9ydChvcHRpb25zPU1vY2tPcHRp
b25zKGNvbmZpZ3VyYXRpb249J0RlYnVnJykpLmRlZmF1bHRfdGltZW91dF9tcygpLCAxMjAwMCkK
LQotICAgIGRlZiB0ZXN0X2RlZmF1bHRfcGl4ZWxfdGVzdHMoc2VsZik6Ci0gICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoc2VsZi5tYWtlX3BvcnQoKS5kZWZhdWx0X3BpeGVsX3Rlc3RzKCksIFRydWUp
Ci0KLSAgICBkZWYgdGVzdF9taXNzaW5nX3N5bWJvbF90b19za2lwcGVkX3Rlc3RzKHNlbGYpOgot
ICAgICAgICAjIFRlc3QgdGhhdCB3ZSBnZXQgdGhlIGNocm9taXVtIHNraXBzIGFuZCBub3QgdGhl
IHdlYmtpdCBkZWZhdWx0IHNraXBzCi0gICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydCgpCi0g
ICAgICAgIHNraXBfZGljdCA9IHBvcnQuX21pc3Npbmdfc3ltYm9sX3RvX3NraXBwZWRfdGVzdHMo
KQotICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2ZmX21wM19kZWNvZGVyJyBpbiBza2lwX2RpY3Qp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoJ1dlYkdMU2hhZGVyJyBpbiBza2lwX2RpY3QpCi0K
LSAgICBkZWYgdGVzdF9hbGxfdGVzdF9jb25maWd1cmF0aW9ucyhzZWxmKToKLSAgICAgICAgIiIi
VmFsaWRhdGUgdGhlIGNvbXBsZXRlIHNldCBvZiBjb25maWd1cmF0aW9ucyB0aGlzIHBvcnQga25v
d3MgYWJvdXQuIiIiCi0gICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydCgpCi0gICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoc2V0KHBvcnQuYWxsX3Rlc3RfY29uZmlndXJhdGlvbnMoKSksIHNldChb
Ci0gICAgICAgICAgICBUZXN0Q29uZmlndXJhdGlvbignaWNlY3JlYW1zYW5kd2ljaCcsICd4ODYn
LCAnZGVidWcnKSwKLSAgICAgICAgICAgIFRlc3RDb25maWd1cmF0aW9uKCdpY2VjcmVhbXNhbmR3
aWNoJywgJ3g4NicsICdyZWxlYXNlJyksCi0gICAgICAgICAgICBUZXN0Q29uZmlndXJhdGlvbign
c25vd2xlb3BhcmQnLCAneDg2JywgJ2RlYnVnJyksCi0gICAgICAgICAgICBUZXN0Q29uZmlndXJh
dGlvbignc25vd2xlb3BhcmQnLCAneDg2JywgJ3JlbGVhc2UnKSwKLSAgICAgICAgICAgIFRlc3RD
b25maWd1cmF0aW9uKCdsaW9uJywgJ3g4NicsICdkZWJ1ZycpLAotICAgICAgICAgICAgVGVzdENv
bmZpZ3VyYXRpb24oJ2xpb24nLCAneDg2JywgJ3JlbGVhc2UnKSwKLSAgICAgICAgICAgIFRlc3RD
b25maWd1cmF0aW9uKCdtb3VudGFpbmxpb24nLCAneDg2JywgJ2RlYnVnJyksCi0gICAgICAgICAg
ICBUZXN0Q29uZmlndXJhdGlvbignbW91bnRhaW5saW9uJywgJ3g4NicsICdyZWxlYXNlJyksCi0g
ICAgICAgICAgICBUZXN0Q29uZmlndXJhdGlvbigneHAnLCAneDg2JywgJ2RlYnVnJyksCi0gICAg
ICAgICAgICBUZXN0Q29uZmlndXJhdGlvbigneHAnLCAneDg2JywgJ3JlbGVhc2UnKSwKLSAgICAg
ICAgICAgIFRlc3RDb25maWd1cmF0aW9uKCd3aW43JywgJ3g4NicsICdkZWJ1ZycpLAotICAgICAg
ICAgICAgVGVzdENvbmZpZ3VyYXRpb24oJ3dpbjcnLCAneDg2JywgJ3JlbGVhc2UnKSwKLSAgICAg
ICAgICAgIFRlc3RDb25maWd1cmF0aW9uKCdsdWNpZCcsICd4ODYnLCAnZGVidWcnKSwKLSAgICAg
ICAgICAgIFRlc3RDb25maWd1cmF0aW9uKCdsdWNpZCcsICd4ODYnLCAncmVsZWFzZScpLAotICAg
ICAgICAgICAgVGVzdENvbmZpZ3VyYXRpb24oJ2x1Y2lkJywgJ3g4Nl82NCcsICdkZWJ1ZycpLAot
ICAgICAgICAgICAgVGVzdENvbmZpZ3VyYXRpb24oJ2x1Y2lkJywgJ3g4Nl82NCcsICdyZWxlYXNl
JyksCi0gICAgICAgIF0pKQotCi0gICAgY2xhc3MgVGVzdE1hY1BvcnQoY2hyb21pdW1fbWFjLkNo
cm9taXVtTWFjUG9ydCk6Ci0gICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvcHRpb25zPU5vbmUp
OgotICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgb3IgTW9ja09wdGlvbnMoKQotICAgICAg
ICAgICAgY2hyb21pdW1fbWFjLkNocm9taXVtTWFjUG9ydC5fX2luaXRfXyhzZWxmLCBNb2NrU3lz
dGVtSG9zdChvc19uYW1lPSdtYWMnLCBvc192ZXJzaW9uPSdsZW9wYXJkJyksICdjaHJvbWl1bS1t
YWMtbGVvcGFyZCcsIG9wdGlvbnM9b3B0aW9ucykKLQotICAgICAgICBkZWYgZGVmYXVsdF9jb25m
aWd1cmF0aW9uKHNlbGYpOgotICAgICAgICAgICAgc2VsZi5kZWZhdWx0X2NvbmZpZ3VyYXRpb25f
Y2FsbGVkID0gVHJ1ZQotICAgICAgICAgICAgcmV0dXJuICdkZWZhdWx0JwotCi0gICAgY2xhc3Mg
VGVzdEFuZHJvaWRQb3J0KGNocm9taXVtX2FuZHJvaWQuQ2hyb21pdW1BbmRyb2lkUG9ydCk6Ci0g
ICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvcHRpb25zPU5vbmUpOgotICAgICAgICAgICAgb3B0
aW9ucyA9IG9wdGlvbnMgb3IgTW9ja09wdGlvbnMoKQotICAgICAgICAgICAgY2hyb21pdW1fYW5k
cm9pZC5DaHJvbWl1bUFuZHJvaWRQb3J0Ll9faW5pdF9fKHNlbGYsIE1vY2tTeXN0ZW1Ib3N0KG9z
X25hbWU9J2FuZHJvaWQnLCBvc192ZXJzaW9uPSdpY2VjcmVhbXNhbmR3aWNoJyksICdjaHJvbWl1
bS1hbmRyb2lkJywgb3B0aW9ucz1vcHRpb25zKQotCi0gICAgICAgIGRlZiBkZWZhdWx0X2NvbmZp
Z3VyYXRpb24oc2VsZik6Ci0gICAgICAgICAgICBzZWxmLmRlZmF1bHRfY29uZmlndXJhdGlvbl9j
YWxsZWQgPSBUcnVlCi0gICAgICAgICAgICByZXR1cm4gJ2RlZmF1bHQnCi0KLSAgICBjbGFzcyBU
ZXN0TGludXhQb3J0KGNocm9taXVtX2xpbnV4LkNocm9taXVtTGludXhQb3J0KToKLSAgICAgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIG9wdGlvbnM9Tm9uZSk6Ci0gICAgICAgICAgICBvcHRpb25zID0g
b3B0aW9ucyBvciBNb2NrT3B0aW9ucygpCi0gICAgICAgICAgICBjaHJvbWl1bV9saW51eC5DaHJv
bWl1bUxpbnV4UG9ydC5fX2luaXRfXyhzZWxmLCBNb2NrU3lzdGVtSG9zdChvc19uYW1lPSdsaW51
eCcsIG9zX3ZlcnNpb249J2x1Y2lkJyksICdjaHJvbWl1bS1saW51eC14ODYnLCBvcHRpb25zPW9w
dGlvbnMpCi0KLSAgICAgICAgZGVmIGRlZmF1bHRfY29uZmlndXJhdGlvbihzZWxmKToKLSAgICAg
ICAgICAgIHNlbGYuZGVmYXVsdF9jb25maWd1cmF0aW9uX2NhbGxlZCA9IFRydWUKLSAgICAgICAg
ICAgIHJldHVybiAnZGVmYXVsdCcKLQotICAgIGNsYXNzIFRlc3RXaW5Qb3J0KGNocm9taXVtX3dp
bi5DaHJvbWl1bVdpblBvcnQpOgotICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgb3B0aW9ucz1O
b25lKToKLSAgICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIG9yIE1vY2tPcHRpb25zKCkKLSAg
ICAgICAgICAgIGNocm9taXVtX3dpbi5DaHJvbWl1bVdpblBvcnQuX19pbml0X18oc2VsZiwgTW9j
a1N5c3RlbUhvc3Qob3NfbmFtZT0nd2luJywgb3NfdmVyc2lvbj0neHAnKSwgJ2Nocm9taXVtLXdp
bi14cCcsIG9wdGlvbnM9b3B0aW9ucykKLQotICAgICAgICBkZWYgZGVmYXVsdF9jb25maWd1cmF0
aW9uKHNlbGYpOgotICAgICAgICAgICAgc2VsZi5kZWZhdWx0X2NvbmZpZ3VyYXRpb25fY2FsbGVk
ID0gVHJ1ZQotICAgICAgICAgICAgcmV0dXJuICdkZWZhdWx0JwotCi0gICAgZGVmIHRlc3RfZGVm
YXVsdF9jb25maWd1cmF0aW9uKHNlbGYpOgotICAgICAgICBtb2NrX29wdGlvbnMgPSBNb2NrT3B0
aW9ucygpCi0gICAgICAgIHBvcnQgPSBDaHJvbWl1bVBvcnRUZXN0Q2FzZS5UZXN0TGludXhQb3J0
KG9wdGlvbnM9bW9ja19vcHRpb25zKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vY2tfb3B0
aW9ucy5jb25maWd1cmF0aW9uLCAnZGVmYXVsdCcpICAjIHB5bGludDogZGlzYWJsZT1FMTEwMQot
ICAgICAgICBzZWxmLmFzc2VydFRydWUocG9ydC5kZWZhdWx0X2NvbmZpZ3VyYXRpb25fY2FsbGVk
KQotCi0gICAgICAgIG1vY2tfb3B0aW9ucyA9IE1vY2tPcHRpb25zKGNvbmZpZ3VyYXRpb249Tm9u
ZSkKLSAgICAgICAgcG9ydCA9IENocm9taXVtUG9ydFRlc3RDYXNlLlRlc3RMaW51eFBvcnQobW9j
a19vcHRpb25zKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vY2tfb3B0aW9ucy5jb25maWd1
cmF0aW9uLCAnZGVmYXVsdCcpICAjIHB5bGludDogZGlzYWJsZT1FMTEwMQotICAgICAgICBzZWxm
LmFzc2VydFRydWUocG9ydC5kZWZhdWx0X2NvbmZpZ3VyYXRpb25fY2FsbGVkKQotCi0gICAgZGVm
IHRlc3RfZGlmZl9pbWFnZShzZWxmKToKLSAgICAgICAgY2xhc3MgVGVzdFBvcnQoQ2hyb21pdW1Q
b3J0VGVzdENhc2UuVGVzdExpbnV4UG9ydCk6Ci0gICAgICAgICAgICBkZWYgX3BhdGhfdG9faW1h
Z2VfZGlmZihzZWxmKToKLSAgICAgICAgICAgICAgICByZXR1cm4gIi9wYXRoL3RvL2ltYWdlX2Rp
ZmYiCi0KLSAgICAgICAgcG9ydCA9IENocm9taXVtUG9ydFRlc3RDYXNlLlRlc3RMaW51eFBvcnQo
KQotICAgICAgICBtb2NrX2ltYWdlX2RpZmYgPSAiTU9DSyBJbWFnZSBEaWZmIgotCi0gICAgICAg
IGRlZiBtb2NrX3J1bl9jb21tYW5kKGFyZ3MpOgotICAgICAgICAgICAgcG9ydC5fZmlsZXN5c3Rl
bS53cml0ZV9iaW5hcnlfZmlsZShhcmdzWzRdLCBtb2NrX2ltYWdlX2RpZmYpCi0gICAgICAgICAg
ICByZXR1cm4gMQotCi0gICAgICAgICMgSW1hZ2VzIGFyZSBkaWZmZXJlbnQuCi0gICAgICAgIHBv
cnQuX2V4ZWN1dGl2ZSA9IE1vY2tFeGVjdXRpdmUyKHJ1bl9jb21tYW5kX2ZuPW1vY2tfcnVuX2Nv
bW1hbmQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9ja19pbWFnZV9kaWZmLCBwb3J0LmRp
ZmZfaW1hZ2UoIkVYUEVDVEVEIiwgIkFDVFVBTCIpWzBdKQotCi0gICAgICAgICMgSW1hZ2VzIGFy
ZSB0aGUgc2FtZS4KLSAgICAgICAgcG9ydC5fZXhlY3V0aXZlID0gTW9ja0V4ZWN1dGl2ZTIoZXhp
dF9jb2RlPTApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgcG9ydC5kaWZmX2ltYWdl
KCJFWFBFQ1RFRCIsICJBQ1RVQUwiKVswXSkKLQotICAgICAgICAjIFRoZXJlIHdhcyBzb21lIGVy
cm9yIHJ1bm5pbmcgaW1hZ2VfZGlmZi4KLSAgICAgICAgcG9ydC5fZXhlY3V0aXZlID0gTW9ja0V4
ZWN1dGl2ZTIoZXhpdF9jb2RlPTIpCi0gICAgICAgIGV4Y2VwdGlvbl9yYWlzZWQgPSBGYWxzZQot
ICAgICAgICB0cnk6Ci0gICAgICAgICAgICBwb3J0LmRpZmZfaW1hZ2UoIkVYUEVDVEVEIiwgIkFD
VFVBTCIpCi0gICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgotICAgICAgICAgICAgZXhjZXB0
aW9uX3JhaXNlZCA9IFRydWUKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShleGNlcHRpb25fcmFp
c2VkKQotCi0gICAgZGVmIHRlc3RfZGlmZl9pbWFnZV9jcmFzaGVkKHNlbGYpOgotICAgICAgICBw
b3J0ID0gQ2hyb21pdW1Qb3J0VGVzdENhc2UuVGVzdExpbnV4UG9ydCgpCi0gICAgICAgIHBvcnQu
X2V4ZWN1dGl2ZSA9IE1vY2tFeGVjdXRpdmUyKGV4aXRfY29kZT0yKQotICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKHBvcnQuZGlmZl9pbWFnZSgiRVhQRUNURUQiLCAiQUNUVUFMIiksIChOb25lLCAw
LCAnaW1hZ2UgZGlmZiByZXR1cm5lZCBhbiBleGl0IGNvZGUgb2YgMicpKQotCi0gICAgZGVmIHRl
c3RfZXhwZWN0YXRpb25zX2ZpbGVzKHNlbGYpOgotICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3Bv
cnQoKQotICAgICAgICBwb3J0LnBvcnRfbmFtZSA9ICdjaHJvbWl1bScKLQotICAgICAgICBnZW5l
cmljX3BhdGggPSBwb3J0LnBhdGhfdG9fZ2VuZXJpY190ZXN0X2V4cGVjdGF0aW9uc19maWxlKCkK
LSAgICAgICAgZXhwZWN0YXRpb25zX3BhdGggPSBwb3J0LnBhdGhfdG9fdGVzdF9leHBlY3RhdGlv
bnNfZmlsZSgpCi0gICAgICAgIGNocm9taXVtX292ZXJyaWRlc19wYXRoID0gcG9ydC5wYXRoX2Zy
b21fY2hyb21pdW1fYmFzZSgKLSAgICAgICAgICAgICd3ZWJraXQnLCAndG9vbHMnLCAnbGF5b3V0
X3Rlc3RzJywgJ3Rlc3RfZXhwZWN0YXRpb25zLnR4dCcpCi0gICAgICAgIHNraWFfb3ZlcnJpZGVz
X3BhdGggPSBwb3J0LnBhdGhfZnJvbV9jaHJvbWl1bV9iYXNlKAotICAgICAgICAgICAgJ3NraWEn
LCAnc2tpYV90ZXN0X2V4cGVjdGF0aW9ucy50eHQnKQotCi0gICAgICAgIHBvcnQuX2ZpbGVzeXN0
ZW0ud3JpdGVfdGV4dF9maWxlKHNraWFfb3ZlcnJpZGVzX3BhdGgsICdkdW1tYXkgdGV4dCcpCi0K
LSAgICAgICAgcG9ydC5fb3B0aW9ucy5idWlsZGVyX25hbWUgPSAnRFVNTVlfQlVJTERFUl9OQU1F
JwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQuZXhwZWN0YXRpb25zX2ZpbGVzKCksIFtn
ZW5lcmljX3BhdGgsIGV4cGVjdGF0aW9uc19wYXRoLCBza2lhX292ZXJyaWRlc19wYXRoLCBjaHJv
bWl1bV9vdmVycmlkZXNfcGF0aF0pCi0KLSAgICAgICAgcG9ydC5fb3B0aW9ucy5idWlsZGVyX25h
bWUgPSAnYnVpbGRlciAoZGVwcyknCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9ydC5leHBl
Y3RhdGlvbnNfZmlsZXMoKSwgW2dlbmVyaWNfcGF0aCwgZXhwZWN0YXRpb25zX3BhdGgsIHNraWFf
b3ZlcnJpZGVzX3BhdGgsIGNocm9taXVtX292ZXJyaWRlc19wYXRoXSkKLQotICAgICAgICAjIEEg
YnVpbGRlciB3aGljaCBkb2VzIE5PVCBvYnNlcnZlIHRoZSBDaHJvbWl1bSB0ZXN0X2V4cGVjdGF0
aW9ucywKLSAgICAgICAgIyBidXQgc3RpbGwgb2JzZXJ2ZXMgdGhlIFNraWEgdGVzdF9leHBlY3Rh
dGlvbnMuLi4KLSAgICAgICAgcG9ydC5fb3B0aW9ucy5idWlsZGVyX25hbWUgPSAnYnVpbGRlcicK
LSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0LmV4cGVjdGF0aW9uc19maWxlcygpLCBbZ2Vu
ZXJpY19wYXRoLCBleHBlY3RhdGlvbnNfcGF0aCwgc2tpYV9vdmVycmlkZXNfcGF0aF0pCi0KLSAg
ICBkZWYgdGVzdF9leHBlY3RhdGlvbnNfb3JkZXJpbmcoc2VsZik6Ci0gICAgICAgICMgc2luY2Ug
d2UgZG9uJ3QgaW1wbGVtZW50IHNlbGYucG9ydF9uYW1lIGluIENocm9taXVtUG9ydC4KLSAgICAg
ICAgcGFzcwotCi0KLWNsYXNzIENocm9taXVtUG9ydExvZ2dpbmdUZXN0KGxvZ3Rlc3RpbmcuTG9n
Z2luZ1Rlc3RDYXNlKToKLSAgICBkZWYgdGVzdF9jaGVja19zeXNfZGVwcyhzZWxmKToKLSAgICAg
ICAgcG9ydCA9IENocm9taXVtUG9ydFRlc3RDYXNlLlRlc3RMaW51eFBvcnQoKQotCi0gICAgICAg
ICMgU3VjY2VzcwotICAgICAgICBwb3J0Ll9leGVjdXRpdmUgPSBNb2NrRXhlY3V0aXZlMihleGl0
X2NvZGU9MCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBvcnQuY2hlY2tfc3lzX2RlcHMobmVl
ZHNfaHR0cD1GYWxzZSkpCi0KLSAgICAgICAgIyBGYWlsdXJlCi0gICAgICAgIHBvcnQuX2V4ZWN1
dGl2ZSA9IE1vY2tFeGVjdXRpdmUyKGV4aXRfY29kZT0xLAotICAgICAgICAgICAgb3V0cHV0PSd0
ZXN0aW5nIG91dHB1dCBmYWlsdXJlJykKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwb3J0LmNo
ZWNrX3N5c19kZXBzKG5lZWRzX2h0dHA9RmFsc2UpKQotICAgICAgICBzZWxmLmFzc2VydExvZyhb
Ci0gICAgICAgICAgICAnRVJST1I6IFN5c3RlbSBkZXBlbmRlbmNpZXMgY2hlY2sgZmFpbGVkLlxu
JywKLSAgICAgICAgICAgICdFUlJPUjogVG8gb3ZlcnJpZGUsIGludm9rZSB3aXRoIC0tbm9jaGVj
ay1zeXMtZGVwc1xuJywKLSAgICAgICAgICAgICdFUlJPUjogXG4nLAotICAgICAgICAgICAgJ0VS
Uk9SOiB0ZXN0aW5nIG91dHB1dCBmYWlsdXJlXG4nXSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fdW5pdHRlc3QucHkgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX3VuaXR0ZXN0LnB5
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmM1MGRmYzE5MzYwYTMyOTIzMTJjNzgz
ZTYzOTJmZTNiNjE0Zjg5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1f
dW5pdHRlc3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0jIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LQotaW1wb3J0IFN0cmluZ0lPCi1pbXBvcnQgdGltZQotCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5z
eXN0ZW0gaW1wb3J0IGxvZ3Rlc3RpbmcKLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVj
dXRpdmVfbW9jayBpbXBvcnQgTW9ja0V4ZWN1dGl2ZTIKLWZyb20gd2Via2l0cHkuY29tbW9uLnN5
c3RlbS5zeXN0ZW1ob3N0X21vY2sgaW1wb3J0IE1vY2tTeXN0ZW1Ib3N0Ci1mcm9tIHdlYmtpdHB5
LnRoaXJkcGFydHkubW9jayBpbXBvcnQgTW9jawotZnJvbSB3ZWJraXRweS50b29sLm1vY2t0b29s
IGltcG9ydCBNb2NrT3B0aW9ucwotCi1pbXBvcnQgY2hyb21pdW0KLWltcG9ydCBjaHJvbWl1bV9t
YWMKLQotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgY2hyb21pdW1fcG9y
dF90ZXN0Y2FzZQotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC5kcml2ZXIgaW1wb3J0
IERyaXZlcklucHV0Ci0KLQotY2xhc3MgQ2hyb21pdW1Qb3J0TG9nZ2luZ1Rlc3QobG9ndGVzdGlu
Zy5Mb2dnaW5nVGVzdENhc2UpOgotCi0gICAgIyBGSVhNRTogcHV0IHRoaXMgc29tZXBsYWNlIG1v
cmUgdXNlZnVsCi0gICAgZGVmIHRlc3RfY2hlY2tfc3lzX2RlcHMoc2VsZik6Ci0gICAgICAgIHBv
cnQgPSBjaHJvbWl1bV9wb3J0X3Rlc3RjYXNlLkNocm9taXVtUG9ydFRlc3RDYXNlLlRlc3RMaW51
eFBvcnQoKQotCi0gICAgICAgICMgU3VjY2VzcwotICAgICAgICBwb3J0Ll9leGVjdXRpdmUgPSBN
b2NrRXhlY3V0aXZlMihleGl0X2NvZGU9MCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBvcnQu
Y2hlY2tfc3lzX2RlcHMobmVlZHNfaHR0cD1GYWxzZSkpCi0KLSAgICAgICAgIyBGYWlsdXJlCi0g
ICAgICAgIHBvcnQuX2V4ZWN1dGl2ZSA9IE1vY2tFeGVjdXRpdmUyKGV4aXRfY29kZT0xLAotICAg
ICAgICAgICAgb3V0cHV0PSd0ZXN0aW5nIG91dHB1dCBmYWlsdXJlJykKLSAgICAgICAgc2VsZi5h
c3NlcnRGYWxzZShwb3J0LmNoZWNrX3N5c19kZXBzKG5lZWRzX2h0dHA9RmFsc2UpKQotICAgICAg
ICBzZWxmLmFzc2VydExvZyhbCi0gICAgICAgICAgICAnRVJST1I6IFN5c3RlbSBkZXBlbmRlbmNp
ZXMgY2hlY2sgZmFpbGVkLlxuJywKLSAgICAgICAgICAgICdFUlJPUjogVG8gb3ZlcnJpZGUsIGlu
dm9rZSB3aXRoIC0tbm9jaGVjay1zeXMtZGVwc1xuJywKLSAgICAgICAgICAgICdFUlJPUjogXG4n
LAotICAgICAgICAgICAgJ0VSUk9SOiB0ZXN0aW5nIG91dHB1dCBmYWlsdXJlXG4nXSkKZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1f
d2luLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1
bV93aW4ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxZTEwYzVjYzRmOGZhNWIz
ODQ1NzM1Y2FlYTQyZDFjODNmM2QxODUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9j
aHJvbWl1bV93aW4ucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxNTYgKzAsMCBAQAotIyBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0j
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0KLSIiIkNocm9taXVtIFdpbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUG9ydCBpbnRl
cmZhY2UuIiIiCi0KLWltcG9ydCBvcwotaW1wb3J0IGxvZ2dpbmcKLQotaW1wb3J0IGNocm9taXVt
Ci0KLQotX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQotCi0KLWNsYXNzIENocm9t
aXVtV2luUG9ydChjaHJvbWl1bS5DaHJvbWl1bVBvcnQpOgotICAgIHBvcnRfbmFtZSA9ICdjaHJv
bWl1bS13aW4nCi0KLSAgICAjIEZJWE1FOiBGaWd1cmUgb3V0IGhvdyB0byB1bmlmeSB0aGlzIHdp
dGggYmFzZS5UZXN0Q29uZmlndXJhdGlvbi5hbGxfc3lzdGVtcygpPwotICAgIFNVUFBPUlRFRF9W
RVJTSU9OUyA9ICgneHAnLCAnd2luNycpCi0KLSAgICBGQUxMQkFDS19QQVRIUyA9IHsKLSAgICAg
ICAgJ3hwJzogWwotICAgICAgICAgICAgJ2Nocm9taXVtLXdpbi14cCcsCi0gICAgICAgICAgICAn
Y2hyb21pdW0td2luJywKLSAgICAgICAgICAgICdjaHJvbWl1bScsCi0gICAgICAgIF0sCi0gICAg
ICAgICd3aW43JzogWwotICAgICAgICAgICAgJ2Nocm9taXVtLXdpbicsCi0gICAgICAgICAgICAn
Y2hyb21pdW0nLAotICAgICAgICBdLAotICAgIH0KLQotICAgIERFRkFVTFRfQlVJTERfRElSRUNU
T1JJRVMgPSAoJ2J1aWxkJywgJ291dCcpCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgZGV0
ZXJtaW5lX2Z1bGxfcG9ydF9uYW1lKGNscywgaG9zdCwgb3B0aW9ucywgcG9ydF9uYW1lKToKLSAg
ICAgICAgaWYgcG9ydF9uYW1lLmVuZHN3aXRoKCctd2luJyk6Ci0gICAgICAgICAgICBhc3NlcnQg
aG9zdC5wbGF0Zm9ybS5pc193aW4oKQotICAgICAgICAgICAgIyBXZSBkb24ndCBtYWludGFpbiBz
ZXBhcmF0ZSBiYXNlbGluZXMgZm9yIHZpc3RhLCBzbyB3ZSBwcmV0ZW5kIGl0IGlzIHdpbjcuCi0g
ICAgICAgICAgICBpZiBob3N0LnBsYXRmb3JtLm9zX3ZlcnNpb24gaW4gKCd2aXN0YScsICc3c3Aw
JywgJzdzcDEnLCAnZnV0dXJlJyk6Ci0gICAgICAgICAgICAgICAgdmVyc2lvbiA9ICd3aW43Jwot
ICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICB2ZXJzaW9uID0gaG9zdC5wbGF0Zm9y
bS5vc192ZXJzaW9uCi0gICAgICAgICAgICBwb3J0X25hbWUgPSBwb3J0X25hbWUgKyAnLScgKyB2
ZXJzaW9uCi0gICAgICAgIHJldHVybiBwb3J0X25hbWUKLQotICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBob3N0LCBwb3J0X25hbWUsICoqa3dhcmdzKToKLSAgICAgICAgY2hyb21pdW0uQ2hyb21pdW1Q
b3J0Ll9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnRfbmFtZSwgKiprd2FyZ3MpCi0gICAgICAgIHNl
bGYuX3ZlcnNpb24gPSBwb3J0X25hbWVbcG9ydF9uYW1lLmluZGV4KCdjaHJvbWl1bS13aW4tJykg
KyBsZW4oJ2Nocm9taXVtLXdpbi0nKTpdCi0gICAgICAgIGFzc2VydCBzZWxmLl92ZXJzaW9uIGlu
IHNlbGYuU1VQUE9SVEVEX1ZFUlNJT05TLCAiJXMgaXMgbm90IGluICVzIiAlIChzZWxmLl92ZXJz
aW9uLCBzZWxmLlNVUFBPUlRFRF9WRVJTSU9OUykKLQotICAgIGRlZiBzZXR1cF9lbnZpcm9uX2Zv
cl9zZXJ2ZXIoc2VsZiwgc2VydmVyX25hbWU9Tm9uZSk6Ci0gICAgICAgIGVudiA9IGNocm9taXVt
LkNocm9taXVtUG9ydC5zZXR1cF9lbnZpcm9uX2Zvcl9zZXJ2ZXIoc2VsZiwgc2VydmVyX25hbWUp
Ci0KLSAgICAgICAgIyBGSVhNRTogbGlnaHR0cGQgZGVwZW5kcyBvbiBzb21lIGVudmlyb25tZW50
IHZhcmlhYmxlIHdlJ3JlIG5vdCB3aGl0ZWxpc3RpbmcuCi0gICAgICAgICMgV2Ugc2hvdWxkIGFk
ZCB0aGUgdmFyaWFibGUgdG8gYW4gZXhwbGljaXQgd2hpdGVsaXN0IGluIGJhc2UuUG9ydC4KLSAg
ICAgICAgIyBGSVhNRTogVGhpcyBpcyBhIHRlbXBvcmFyeSBoYWNrIHRvIGdldCB0aGUgY3Itd2lu
IGJvdCBvbmxpbmUgdW50aWwKLSAgICAgICAgIyBzb21lb25lIGZyb20gdGhlIGNyLXdpbiBwb3J0
IGNhbiB0YWtlIGEgbG9vay4KLSAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gb3MuZW52aXJvbi5p
dGVtcygpOgotICAgICAgICAgICAgaWYga2V5IG5vdCBpbiBlbnY6Ci0gICAgICAgICAgICAgICAg
ZW52W2tleV0gPSB2YWx1ZQotCi0gICAgICAgICMgUHV0IHRoZSBjeWd3aW4gZGlyZWN0b3J5IGZp
cnN0IGluIHRoZSBwYXRoIHRvIGZpbmQgY3lnd2luMS5kbGwuCi0gICAgICAgIGVudlsiUEFUSCJd
ID0gIiVzOyVzIiAlIChzZWxmLnBhdGhfZnJvbV9jaHJvbWl1bV9iYXNlKCJ0aGlyZF9wYXJ0eSIs
ICJjeWd3aW4iLCAiYmluIiksIGVudlsiUEFUSCJdKQotICAgICAgICAjIENvbmZpZ3VyZSB0aGUg
Y3lnd2luIGRpcmVjdG9yeSBzbyB0aGF0IHB5d2Vic29ja2V0IGZpbmRzIHByb3BlcgotICAgICAg
ICAjIHB5dGhvbiBleGVjdXRhYmxlIHRvIHJ1biBjZ2kgcHJvZ3JhbS4KLSAgICAgICAgZW52WyJD
WUdXSU5fUEFUSCJdID0gc2VsZi5wYXRoX2Zyb21fY2hyb21pdW1fYmFzZSgidGhpcmRfcGFydHki
LCAiY3lnd2luIiwgImJpbiIpCi0gICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbigncmVnaXN0ZXJf
Y3lnd2luJyk6Ci0gICAgICAgICAgICBzZXR1cF9tb3VudCA9IHNlbGYucGF0aF9mcm9tX2Nocm9t
aXVtX2Jhc2UoInRoaXJkX3BhcnR5IiwgImN5Z3dpbiIsICJzZXR1cF9tb3VudC5iYXQiKQotICAg
ICAgICAgICAgc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFtzZXR1cF9tb3VudF0pICAjIFBh
dGhzIGFyZSBhbGwgYWJzb2x1dGUsIHNvIHRoaXMgZG9lcyBub3QgcmVxdWlyZSBhIGN3ZC4KLSAg
ICAgICAgcmV0dXJuIGVudgotCi0gICAgZGVmIF9tb2R1bGVzX3RvX3NlYXJjaF9mb3Jfc3ltYm9s
cyhzZWxmKToKLSAgICAgICAgIyBGSVhNRTogd2Ugc2hvdWxkIHJldHVybiB0aGUgcGF0aCB0byB0
aGUgZmZtcGVnIGVxdWl2YWxlbnRzIHRvIGRldGVjdCBpZiB3ZSBoYXZlIHRoZSBtcDMgYW5kIGFh
YyBjb2RlY3MgaW5zdGFsbGVkLgotICAgICAgICAjIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9ODk3MDYuCi0gICAgICAgIHJldHVybiBbXQotCi0gICAgZGVmIGNo
ZWNrX2J1aWxkKHNlbGYsIG5lZWRzX2h0dHApOgotICAgICAgICByZXN1bHQgPSBjaHJvbWl1bS5D
aHJvbWl1bVBvcnQuY2hlY2tfYnVpbGQoc2VsZiwgbmVlZHNfaHR0cCkKLSAgICAgICAgaWYgbm90
IHJlc3VsdDoKLSAgICAgICAgICAgIF9sb2cuZXJyb3IoJ0ZvciBjb21wbGV0ZSBXaW5kb3dzIGJ1
aWxkIHJlcXVpcmVtZW50cywgcGxlYXNlIHNlZTonKQotICAgICAgICAgICAgX2xvZy5lcnJvcign
JykKLSAgICAgICAgICAgIF9sb2cuZXJyb3IoJyAgICBodHRwOi8vZGV2LmNocm9taXVtLm9yZy9k
ZXZlbG9wZXJzL2hvdy10b3MvYnVpbGQtaW5zdHJ1Y3Rpb25zLXdpbmRvd3MnKQotICAgICAgICBy
ZXR1cm4gcmVzdWx0Ci0KLSAgICBkZWYgb3BlcmF0aW5nX3N5c3RlbShzZWxmKToKLSAgICAgICAg
cmV0dXJuICd3aW4nCi0KLSAgICBkZWYgcmVsYXRpdmVfdGVzdF9maWxlbmFtZShzZWxmLCBmaWxl
bmFtZSk6Ci0gICAgICAgIHBhdGggPSBmaWxlbmFtZVtsZW4oc2VsZi5sYXlvdXRfdGVzdHNfZGly
KCkpICsgMTpdCi0gICAgICAgIHJldHVybiBwYXRoLnJlcGxhY2UoJ1xcJywgJy8nKQotCi0gICAg
IwotICAgICMgUFJPVEVDVEVEIFJPVVRJTkVTCi0gICAgIwotCi0gICAgZGVmIF91c2VzX2FwYWNo
ZShzZWxmKToKLSAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICBkZWYgX2xpZ2h0dHBkX3BhdGgo
c2VsZiwgKmNvbXBzKToKLSAgICAgICAgcmV0dXJuIHNlbGYucGF0aF9mcm9tX2Nocm9taXVtX2Jh
c2UoJ3RoaXJkX3BhcnR5JywgJ2xpZ2h0dHBkJywgJ3dpbicsICpjb21wcykKLQotICAgIGRlZiBf
cGF0aF90b19hcGFjaGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLnBhdGhfZnJvbV9jaHJv
bWl1bV9iYXNlKCd0aGlyZF9wYXJ0eScsICdjeWd3aW4nLCAndXNyJywgJ3NiaW4nLCAnaHR0cGQn
KQotCi0gICAgZGVmIF9wYXRoX3RvX2FwYWNoZV9jb25maWdfZmlsZShzZWxmKToKLSAgICAgICAg
cmV0dXJuIHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLmxheW91dF90ZXN0c19kaXIoKSwgJ2h0
dHAnLCAnY29uZicsICdjeWd3aW4taHR0cGQuY29uZicpCi0KLSAgICBkZWYgX3BhdGhfdG9fbGln
aHR0cGQoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9saWdodHRwZF9wYXRoKCdMaWdodFRQ
RC5leGUnKQotCi0gICAgZGVmIF9wYXRoX3RvX2xpZ2h0dHBkX21vZHVsZXMoc2VsZik6Ci0gICAg
ICAgIHJldHVybiBzZWxmLl9saWdodHRwZF9wYXRoKCdsaWInKQotCi0gICAgZGVmIF9wYXRoX3Rv
X2xpZ2h0dHBkX3BocChzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2xpZ2h0dHBkX3BhdGgo
J3BocDUnLCAncGhwLWNnaS5leGUnKQotCi0gICAgZGVmIF9wYXRoX3RvX2RyaXZlcihzZWxmLCBj
b25maWd1cmF0aW9uPU5vbmUpOgotICAgICAgICBiaW5hcnlfbmFtZSA9ICclcy5leGUnICUgc2Vs
Zi5kcml2ZXJfbmFtZSgpCi0gICAgICAgIHJldHVybiBzZWxmLl9idWlsZF9wYXRoX3dpdGhfY29u
ZmlndXJhdGlvbihjb25maWd1cmF0aW9uLCBiaW5hcnlfbmFtZSkKLQotICAgIGRlZiBfcGF0aF90
b19oZWxwZXIoc2VsZik6Ci0gICAgICAgIGJpbmFyeV9uYW1lID0gJ0xheW91dFRlc3RIZWxwZXIu
ZXhlJwotICAgICAgICByZXR1cm4gc2VsZi5fYnVpbGRfcGF0aChiaW5hcnlfbmFtZSkKLQotICAg
IGRlZiBfcGF0aF90b19pbWFnZV9kaWZmKHNlbGYpOgotICAgICAgICBiaW5hcnlfbmFtZSA9ICdJ
bWFnZURpZmYuZXhlJwotICAgICAgICByZXR1cm4gc2VsZi5fYnVpbGRfcGF0aChiaW5hcnlfbmFt
ZSkKLQotICAgIGRlZiBfcGF0aF90b193ZGlmZihzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYu
cGF0aF9mcm9tX2Nocm9taXVtX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ2N5Z3dpbicsICdiaW4nLCAn
d2RpZmYuZXhlJykKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvY2hyb21pdW1fd2luX3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV93aW5fdW5pdHRlc3QucHkKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDJjNTE1OThlYTk4YTE1YWU1MTQzZTg3NDUxNmY5MDhiMmY0ODFi
OTUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV93aW5fdW5pdHRlc3Qu
cHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMzMgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
IwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWltcG9y
dCBvcwotaW1wb3J0IHVuaXR0ZXN0MiBhcyB1bml0dGVzdAotCi1mcm9tIHdlYmtpdHB5LmNvbW1v
bi5zeXN0ZW0gaW1wb3J0IG91dHB1dGNhcHR1cmUKLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3Rl
bS5leGVjdXRpdmVfbW9jayBpbXBvcnQgTW9ja0V4ZWN1dGl2ZQotZnJvbSB3ZWJraXRweS5jb21t
b24uc3lzdGVtLmZpbGVzeXN0ZW1fbW9jayBpbXBvcnQgTW9ja0ZpbGVTeXN0ZW0KLWZyb20gd2Vi
a2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IGNocm9taXVtX3BvcnRfdGVzdGNhc2UKLWZy
b20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IGNocm9taXVtX3dpbgotZnJvbSB3
ZWJraXRweS50b29sLm1vY2t0b29sIGltcG9ydCBNb2NrT3B0aW9ucwotCi0KLWNsYXNzIENocm9t
aXVtV2luVGVzdChjaHJvbWl1bV9wb3J0X3Rlc3RjYXNlLkNocm9taXVtUG9ydFRlc3RDYXNlKToK
LSAgICBwb3J0X25hbWUgPSAnY2hyb21pdW0td2luJwotICAgIHBvcnRfbWFrZXIgPSBjaHJvbWl1
bV93aW4uQ2hyb21pdW1XaW5Qb3J0Ci0gICAgb3NfbmFtZSA9ICd3aW4nCi0gICAgb3NfdmVyc2lv
biA9ICd4cCcKLQotICAgIGRlZiB0ZXN0X3VzZXNfYXBhY2hlKHNlbGYpOgotICAgICAgICBzZWxm
LmFzc2VydEZhbHNlKHNlbGYubWFrZV9wb3J0KCkuX3VzZXNfYXBhY2hlKCkpCi0KLSAgICBkZWYg
dGVzdF9zZXR1cF9lbnZpcm9uX2Zvcl9zZXJ2ZXIoc2VsZik6Ci0gICAgICAgIHBvcnQgPSBzZWxm
Lm1ha2VfcG9ydCgpCi0gICAgICAgIHBvcnQuX2V4ZWN1dGl2ZSA9IE1vY2tFeGVjdXRpdmUoc2hv
dWxkX2xvZz1UcnVlKQotICAgICAgICBvdXRwdXQgPSBvdXRwdXRjYXB0dXJlLk91dHB1dENhcHR1
cmUoKQotICAgICAgICAjIEZJWE1FOiBUaGlzIHRlc3Qgc2hvdWxkIG5vdCB1c2UgdGhlIHJlYWwg
b3MuZW52aXJvbgotICAgICAgICBvcmlnX2Vudmlyb24gPSBvcy5lbnZpcm9uLmNvcHkoKQotICAg
ICAgICBlbnYgPSBvdXRwdXQuYXNzZXJ0X291dHB1dHMoc2VsZiwgcG9ydC5zZXR1cF9lbnZpcm9u
X2Zvcl9zZXJ2ZXIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3JpZ19lbnZpcm9uWyJQQVRI
Il0sIG9zLmVudmlyb25bIlBBVEgiXSkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChlbnZb
IlBBVEgiXSwgb3MuZW52aXJvblsiUEFUSCJdKQotCi0gICAgZGVmIHRlc3Rfc2V0dXBfZW52aXJv
bl9mb3Jfc2VydmVyX2N5Z3BhdGgoc2VsZik6Ci0gICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9y
dCgpCi0gICAgICAgIGVudiA9IHBvcnQuc2V0dXBfZW52aXJvbl9mb3Jfc2VydmVyKHBvcnQuZHJp
dmVyX25hbWUoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbnZbJ0NZR1dJTl9QQVRIJ10s
ICcvbW9jay1jaGVja291dC9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3RoaXJkX3BhcnR5L2N5Z3dp
bi9iaW4nKQotCi0gICAgZGVmIHRlc3Rfc2V0dXBfZW52aXJvbl9mb3Jfc2VydmVyX3JlZ2lzdGVy
X2N5Z3dpbihzZWxmKToKLSAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KG9wdGlvbnM9TW9j
a09wdGlvbnMocmVnaXN0ZXJfY3lnd2luPVRydWUsIHJlc3VsdHNfZGlyZWN0b3J5PScvJykpCi0g
ICAgICAgIHBvcnQuX2V4ZWN1dGl2ZSA9IE1vY2tFeGVjdXRpdmUoc2hvdWxkX2xvZz1UcnVlKQot
ICAgICAgICBleHBlY3RlZF9sb2dzID0gIk1PQ0sgcnVuX2NvbW1hbmQ6IFsnL21vY2stY2hlY2tv
dXQvU291cmNlL1dlYktpdC9jaHJvbWl1bS90aGlyZF9wYXJ0eS9jeWd3aW4vc2V0dXBfbW91bnQu
YmF0J10sIGN3ZD1Ob25lXG4iCi0gICAgICAgIG91dHB1dCA9IG91dHB1dGNhcHR1cmUuT3V0cHV0
Q2FwdHVyZSgpCi0gICAgICAgIG91dHB1dC5hc3NlcnRfb3V0cHV0cyhzZWxmLCBwb3J0LnNldHVw
X2Vudmlyb25fZm9yX3NlcnZlciwgZXhwZWN0ZWRfbG9ncz1leHBlY3RlZF9sb2dzKQotCi0gICAg
ZGVmIGFzc2VydF9uYW1lKHNlbGYsIHBvcnRfbmFtZSwgb3NfdmVyc2lvbl9zdHJpbmcsIGV4cGVj
dGVkKToKLSAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KHBvcnRfbmFtZT1wb3J0X25hbWUs
IG9zX3ZlcnNpb249b3NfdmVyc2lvbl9zdHJpbmcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
ZXhwZWN0ZWQsIHBvcnQubmFtZSgpKQotCi0gICAgZGVmIHRlc3RfdmVyc2lvbnMoc2VsZik6Ci0g
ICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4ocG9y
dC5uYW1lKCksICgnY2hyb21pdW0td2luLXhwJywgJ2Nocm9taXVtLXdpbi13aW43JykpCi0KLSAg
ICAgICAgc2VsZi5hc3NlcnRfbmFtZShOb25lLCAneHAnLCAnY2hyb21pdW0td2luLXhwJykKLSAg
ICAgICAgc2VsZi5hc3NlcnRfbmFtZSgnY2hyb21pdW0td2luJywgJ3hwJywgJ2Nocm9taXVtLXdp
bi14cCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0X25hbWUoJ2Nocm9taXVtLXdpbi14cCcsICd4cCcs
ICdjaHJvbWl1bS13aW4teHAnKQotICAgICAgICBzZWxmLmFzc2VydF9uYW1lKCdjaHJvbWl1bS13
aW4teHAnLCAnN3NwMCcsICdjaHJvbWl1bS13aW4teHAnKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0
X25hbWUoTm9uZSwgJzdzcDAnLCAnY2hyb21pdW0td2luLXdpbjcnKQotICAgICAgICBzZWxmLmFz
c2VydF9uYW1lKE5vbmUsICd2aXN0YScsICdjaHJvbWl1bS13aW4td2luNycpCi0gICAgICAgIHNl
bGYuYXNzZXJ0X25hbWUoJ2Nocm9taXVtLXdpbicsICc3c3AwJywgJ2Nocm9taXVtLXdpbi13aW43
JykKLSAgICAgICAgc2VsZi5hc3NlcnRfbmFtZSgnY2hyb21pdW0td2luLXdpbjcnLCAneHAnLCAn
Y2hyb21pdW0td2luLXdpbjcnKQotICAgICAgICBzZWxmLmFzc2VydF9uYW1lKCdjaHJvbWl1bS13
aW4td2luNycsICc3c3AwJywgJ2Nocm9taXVtLXdpbi13aW43JykKLSAgICAgICAgc2VsZi5hc3Nl
cnRfbmFtZSgnY2hyb21pdW0td2luLXdpbjcnLCAndmlzdGEnLCAnY2hyb21pdW0td2luLXdpbjcn
KQotCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBzZWxmLmFzc2Vy
dF9uYW1lLCBOb25lLCAndzJrJywgJ2Nocm9taXVtLXdpbi14cCcpCi0KLSAgICBkZWYgdGVzdF9i
YXNlbGluZV9wYXRoKHNlbGYpOgotICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQocG9ydF9u
YW1lPSdjaHJvbWl1bS13aW4teHAnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQuYmFz
ZWxpbmVfcGF0aCgpLCBwb3J0Ll93ZWJraXRfYmFzZWxpbmVfcGF0aCgnY2hyb21pdW0td2luLXhw
JykpCi0KLSAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KHBvcnRfbmFtZT0nY2hyb21pdW0t
d2luLXdpbjcnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQuYmFzZWxpbmVfcGF0aCgp
LCBwb3J0Ll93ZWJraXRfYmFzZWxpbmVfcGF0aCgnY2hyb21pdW0td2luJykpCi0KLSAgICBkZWYg
dGVzdF9idWlsZF9wYXRoKHNlbGYpOgotICAgICAgICAjIFRlc3QgdGhhdCBvcHRpb25hbCBwYXRo
cyBhcmUgdXNlZCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhleSBleGlzdC4KLSAgICAgICAgb3B0
aW9ucyA9IE1vY2tPcHRpb25zKGNvbmZpZ3VyYXRpb249J1JlbGVhc2UnLCBidWlsZF9kaXJlY3Rv
cnk9Jy9mb28nKQotICAgICAgICBzZWxmLmFzc2VydF9idWlsZF9wYXRoKG9wdGlvbnMsIFsnL21v
Y2stY2hlY2tvdXQvU291cmNlL1dlYktpdC9jaHJvbWl1bS9vdXQvUmVsZWFzZSddLCAnL2Zvby9S
ZWxlYXNlJykKLQotICAgICAgICAjIFRlc3QgdGhhdCBvcHRpb25hbCByZWxhdGl2ZSBwYXRocyBh
cmUgcmV0dXJuZWQgdW5tb2RpZmllZC4KLSAgICAgICAgb3B0aW9ucyA9IE1vY2tPcHRpb25zKGNv
bmZpZ3VyYXRpb249J1JlbGVhc2UnLCBidWlsZF9kaXJlY3Rvcnk9J2ZvbycpCi0gICAgICAgIHNl
bGYuYXNzZXJ0X2J1aWxkX3BhdGgob3B0aW9ucywgWycvbW9jay1jaGVja291dC9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL291dC9SZWxlYXNlJ10sICdmb28vUmVsZWFzZScpCi0KLSAgICAgICAgIyBU
ZXN0IHRoYXQgd2UgcHJlZmVyIHRoZSBsZWdhY3kgZGlyIG92ZXIgdGhlIG5ldyBkaXIuCi0gICAg
ICAgIG9wdGlvbnMgPSBNb2NrT3B0aW9ucyhjb25maWd1cmF0aW9uPSdSZWxlYXNlJywgYnVpbGRf
ZGlyZWN0b3J5PU5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2J1aWxkX3BhdGgob3B0aW9ucywg
WycvbW9jay1jaGVja291dC9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2J1aWxkL1JlbGVhc2UnLCAn
L21vY2stY2hlY2tvdXQvU291cmNlL1dlYktpdC9jaHJvbWl1bS9vdXQnXSwgJy9tb2NrLWNoZWNr
b3V0L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vYnVpbGQvUmVsZWFzZScpCi0KLSAgICBkZWYgdGVz
dF9idWlsZF9wYXRoX3RpbWVzdGFtcHMoc2VsZik6Ci0gICAgICAgIG9wdGlvbnMgPSBNb2NrT3B0
aW9ucyhjb25maWd1cmF0aW9uPSdSZWxlYXNlJywgYnVpbGRfZGlyZWN0b3J5PU5vbmUpCi0gICAg
ICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydChvcHRpb25zPW9wdGlvbnMpCi0gICAgICAgIHBvcnQu
aG9zdC5maWxlc3lzdGVtLm1heWJlX21ha2VfZGlyZWN0b3J5KCcvbW9jay1jaGVja291dC9vdXQv
UmVsZWFzZScpCi0gICAgICAgIHBvcnQuaG9zdC5maWxlc3lzdGVtLm1heWJlX21ha2VfZGlyZWN0
b3J5KCcvbW9jay1jaGVja291dC9idWlsZC9SZWxlYXNlJykKLSAgICAgICAgIyBDaGVjayB3aXRo
ICdvdXQnIGJlaW5nIG5ld2VyLgotICAgICAgICBwb3J0Lmhvc3QuZmlsZXN5c3RlbS5tdGltZSA9
IGxhbWJkYSBmOiA1IGlmICcvb3V0LycgaW4gZiBlbHNlIDQKLSAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChwb3J0Ll9idWlsZF9wYXRoKCksICcvbW9jay1jaGVja291dC9vdXQvUmVsZWFzZScpCi0g
ICAgICAgICMgQ2hlY2sgd2l0aCAnYnVpbGQnIGJlaW5nIG5ld2VyLgotICAgICAgICBwb3J0Lmhv
c3QuZmlsZXN5c3RlbS5tdGltZSA9IGxhbWJkYSBmOiA1IGlmICcvYnVpbGQvJyBpbiBmIGVsc2Ug
NAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQuX2J1aWxkX3BhdGgoKSwgJy9tb2NrLWNo
ZWNrb3V0L2J1aWxkL1JlbGVhc2UnKQotCi0gICAgZGVmIHRlc3Rfb3BlcmF0aW5nX3N5c3RlbShz
ZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnd2luJywgc2VsZi5tYWtlX3BvcnQoKS5v
cGVyYXRpbmdfc3lzdGVtKCkpCi0KLSAgICBkZWYgdGVzdF9kcml2ZXJfbmFtZV9vcHRpb24oc2Vs
Zik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm1ha2VfcG9ydCgpLl9wYXRoX3RvX2Ry
aXZlcigpLmVuZHN3aXRoKCdEdW1wUmVuZGVyVHJlZS5leGUnKSkKLSAgICAgICAgc2VsZi5hc3Nl
cnRUcnVlKHNlbGYubWFrZV9wb3J0KG9wdGlvbnM9TW9ja09wdGlvbnMoZHJpdmVyX25hbWU9J090
aGVyRHJpdmVyJykpLl9wYXRoX3RvX2RyaXZlcigpLmVuZHN3aXRoKCdPdGhlckRyaXZlci5leGUn
KSkKLQotICAgIGRlZiB0ZXN0X3BhdGhfdG9faW1hZ2VfZGlmZihzZWxmKToKLSAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChzZWxmLm1ha2VfcG9ydCgpLl9wYXRoX3RvX2ltYWdlX2RpZmYoKSwgJy9t
b2NrLWNoZWNrb3V0L291dC9SZWxlYXNlL0ltYWdlRGlmZi5leGUnKQpkaWZmIC0tZ2l0IGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9mYWN0b3J5LnB5IGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9mYWN0b3J5LnB5CmluZGV4IDkwMmVl
MjJhMmNjMjk1YTE2ODYzYTNiOGU3ZmJkZGY3MWY2YzNjYTcuLmZkY2E1Mzk3M2M1ZTUxNGE2MWE5
MDFmOGZjMWUzYTJmOTBkNGUwNjcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvZmFjdG9yeS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L2ZhY3RvcnkucHkKQEAgLTM5LDEyICszOSw2IEBAIGRlZiBwbGF0
Zm9ybV9vcHRpb25zKHVzZV9nbG9icz1GYWxzZSk6CiAgICAgcmV0dXJuIFsKICAgICAgICAgb3B0
cGFyc2UubWFrZV9vcHRpb24oJy0tcGxhdGZvcm0nLCBhY3Rpb249J3N0b3JlJywKICAgICAgICAg
ICAgIGhlbHA9KCdHbG9iLXN0eWxlIGxpc3Qgb2YgcGxhdGZvcm0vcG9ydHMgdG8gdXNlIChlLmcu
LCAibWFjKiIpJyBpZiB1c2VfZ2xvYnMgZWxzZSAnUGxhdGZvcm0gdG8gdXNlIChlLmcuLCAibWFj
LWxpb24iKScpKSwKLSAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tY2hyb21pdW0nLCBh
Y3Rpb249J3N0b3JlX2NvbnN0JywgZGVzdD0ncGxhdGZvcm0nLAotICAgICAgICAgICAgY29uc3Q9
KCdjaHJvbWl1bSonIGlmIHVzZV9nbG9icyBlbHNlICdjaHJvbWl1bScpLAotICAgICAgICAgICAg
aGVscD0oJ0FsaWFzIGZvciAtLXBsYXRmb3JtPWNocm9taXVtKicgaWYgdXNlX2dsb2JzIGVsc2Ug
J0FsaWFzIGZvciAtLXBsYXRmb3JtPWNocm9taXVtJykpLAotICAgICAgICBvcHRwYXJzZS5tYWtl
X29wdGlvbignLS1jaHJvbWl1bS1hbmRyb2lkJywgYWN0aW9uPSdzdG9yZV9jb25zdCcsIGRlc3Q9
J3BsYXRmb3JtJywKLSAgICAgICAgICAgIGNvbnN0PSgnY2hyb21pdW0tYW5kcm9pZConIGlmIHVz
ZV9nbG9icyBlbHNlICdjaHJvbWl1bS1hbmRyb2lkJyksCi0gICAgICAgICAgICBoZWxwPSgnQWxp
YXMgZm9yIC0tcGxhdGZvcm09Y2hyb21pdW0tYW5kcm9pZConIGlmIHVzZV9nbG9icyBlbHNlICdB
bGlhcyBmb3IgLS1wbGF0Zm9ybT1jaHJvbWl1bScpKSwKICAgICAgICAgb3B0cGFyc2UubWFrZV9v
cHRpb24oJy0tZWZsJywgYWN0aW9uPSdzdG9yZV9jb25zdCcsIGRlc3Q9J3BsYXRmb3JtJywKICAg
ICAgICAgICAgIGNvbnN0PSgnZWZsKicgaWYgdXNlX2dsb2JzIGVsc2UgJ2VmbCcpLAogICAgICAg
ICAgICAgaGVscD0oJ0FsaWFzIGZvciAtLXBsYXRmb3JtPWVmbConIGlmIHVzZV9nbG9icyBlbHNl
ICdBbGlhcyBmb3IgLS1wbGF0Zm9ybT1lZmwnKSksCkBAIC04MCwxMCArNzQsNiBAQCBkZWYgX2J1
aWxkZXJfb3B0aW9ucyhidWlsZGVyX25hbWUpOgogCiBjbGFzcyBQb3J0RmFjdG9yeShvYmplY3Qp
OgogICAgIFBPUlRfQ0xBU1NFUyA9ICgKLSAgICAgICAgJ2Nocm9taXVtX2FuZHJvaWQuQ2hyb21p
dW1BbmRyb2lkUG9ydCcsCi0gICAgICAgICdjaHJvbWl1bV9saW51eC5DaHJvbWl1bUxpbnV4UG9y
dCcsCi0gICAgICAgICdjaHJvbWl1bV9tYWMuQ2hyb21pdW1NYWNQb3J0JywKLSAgICAgICAgJ2No
cm9taXVtX3dpbi5DaHJvbWl1bVdpblBvcnQnLAogICAgICAgICAnZWZsLkVmbFBvcnQnLAogICAg
ICAgICAnZ3RrLkd0a1BvcnQnLAogICAgICAgICAnbWFjLk1hY1BvcnQnLApkaWZmIC0tZ2l0IGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9mYWN0b3J5X3VuaXR0ZXN0
LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9mYWN0b3J5X3Vu
aXR0ZXN0LnB5CmluZGV4IDM2M2I3Yjk5NTFhZTZmYTg5YjQ3YmFhMjBhY2QwZjMyYmM1Nzk3ZTUu
LjA2NDJmM2E1YmM0NDM5NGI2OTA2OTE4M2U3NzU3ZmNkOGE0MDU4YjggMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZmFjdG9yeV91bml0dGVzdC5w
eQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2ZhY3Rvcnlf
dW5pdHRlc3QucHkKQEAgLTMxLDEwICszMSw2IEBAIGltcG9ydCB1bml0dGVzdDIgYXMgdW5pdHRl
c3QKIGZyb20gd2Via2l0cHkudG9vbC5tb2NrdG9vbCBpbXBvcnQgTW9ja09wdGlvbnMKIGZyb20g
d2Via2l0cHkuY29tbW9uLnN5c3RlbS5zeXN0ZW1ob3N0X21vY2sgaW1wb3J0IE1vY2tTeXN0ZW1I
b3N0CiAKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IGNocm9taXVtX2Fu
ZHJvaWQKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IGNocm9taXVtX2xp
bnV4Ci1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBjaHJvbWl1bV9tYWMK
LWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IGNocm9taXVtX3dpbgogZnJv
bSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgZmFjdG9yeQogZnJvbSB3ZWJraXRw
eS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgZ3RrCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0
cy5wb3J0IGltcG9ydCBtYWMKQEAgLTc1LDI5ICs3MSw2IEBAIGNsYXNzIEZhY3RvcnlUZXN0KHVu
aXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9xdChzZWxmKToKICAgICAgICAgc2VsZi5h
c3NlcnRfcG9ydChwb3J0X25hbWU9J3F0JywgY2xzPXF0LlF0UG9ydCkKIAotICAgIGRlZiB0ZXN0
X2Nocm9taXVtX21hYyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfcG9ydChwb3J0X25hbWU9
J2Nocm9taXVtLW1hYycsIG9zX25hbWU9J21hYycsIG9zX3ZlcnNpb249J3Nub3dsZW9wYXJkJywK
LSAgICAgICAgICAgICAgICAgICAgICAgICBjbHM9Y2hyb21pdW1fbWFjLkNocm9taXVtTWFjUG9y
dCkKLSAgICAgICAgc2VsZi5hc3NlcnRfcG9ydChwb3J0X25hbWU9J2Nocm9taXVtJywgb3NfbmFt
ZT0nbWFjJywgb3NfdmVyc2lvbj0nbGlvbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY2xz
PWNocm9taXVtX21hYy5DaHJvbWl1bU1hY1BvcnQpCi0KLSAgICBkZWYgdGVzdF9jaHJvbWl1bV9s
aW51eChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfcG9ydChwb3J0X25hbWU9J2Nocm9taXVt
LWxpbnV4JywgY2xzPWNocm9taXVtX2xpbnV4LkNocm9taXVtTGludXhQb3J0KQotICAgICAgICBz
ZWxmLmFzc2VydF9wb3J0KHBvcnRfbmFtZT0nY2hyb21pdW0nLCBvc19uYW1lPSdsaW51eCcsIG9z
X3ZlcnNpb249J2x1Y2lkJywKLSAgICAgICAgICAgICAgICAgICAgICAgICBjbHM9Y2hyb21pdW1f
bGludXguQ2hyb21pdW1MaW51eFBvcnQpCi0KLSAgICBkZWYgdGVzdF9jaHJvbWl1bV9hbmRyb2lk
KHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF9wb3J0KHBvcnRfbmFtZT0nY2hyb21pdW0tYW5k
cm9pZCcsIGNscz1jaHJvbWl1bV9hbmRyb2lkLkNocm9taXVtQW5kcm9pZFBvcnQpCi0gICAgICAg
ICMgTk9URTogV2UgY2FuJ3QgY2hlY2sgZm9yIHBvcnRfbmFtZT1jaHJvbWl1bSBoZXJlLCBhcyB0
aGlzIHdpbGwgYXBwZW5kIHRoZSBob3N0J3MKLSAgICAgICAgIyBvcGVyYXRpbmcgc3lzdGVtLCB3
aGVyZWFzIGhvc3QhPXRhcmdldCBmb3IgQW5kcm9pZC4KLQotICAgIGRlZiB0ZXN0X2Nocm9taXVt
X3dpbihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfcG9ydChwb3J0X25hbWU9J2Nocm9taXVt
LXdpbi14cCcsIGNscz1jaHJvbWl1bV93aW4uQ2hyb21pdW1XaW5Qb3J0KQotICAgICAgICBzZWxm
LmFzc2VydF9wb3J0KHBvcnRfbmFtZT0nY2hyb21pdW0td2luJywgb3NfbmFtZT0nd2luJywgb3Nf
dmVyc2lvbj0neHAnLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNscz1jaHJvbWl1bV93aW4u
Q2hyb21pdW1XaW5Qb3J0KQotICAgICAgICBzZWxmLmFzc2VydF9wb3J0KHBvcnRfbmFtZT0nY2hy
b21pdW0nLCBvc19uYW1lPSd3aW4nLCBvc192ZXJzaW9uPSd4cCcsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgY2xzPWNocm9taXVtX3dpbi5DaHJvbWl1bVdpblBvcnQpCi0KICAgICBkZWYgdGVz
dF91bmtub3duX3NwZWNpZmllZChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90
SW1wbGVtZW50ZWRFcnJvciwgZmFjdG9yeS5Qb3J0RmFjdG9yeShNb2NrU3lzdGVtSG9zdCgpKS5n
ZXQsIHBvcnRfbmFtZT0ndW5rbm93bicpCiAKQEAgLTEwNSw1ICs3OCw1IEBAIGNsYXNzIEZhY3Rv
cnlUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90
SW1wbGVtZW50ZWRFcnJvciwgZmFjdG9yeS5Qb3J0RmFjdG9yeShNb2NrU3lzdGVtSG9zdChvc19u
YW1lPSd2bXMnKSkuZ2V0KQogCiAgICAgZGVmIHRlc3RfZ2V0X2Zyb21fYnVpbGRlcl9uYW1lKHNl
bGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZhY3RvcnkuUG9ydEZhY3RvcnkoTW9ja1N5
c3RlbUhvc3QoKSkuZ2V0X2Zyb21fYnVpbGRlcl9uYW1lKCdXZWJLaXQgTWFjMTAuNycpLm5hbWUo
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Nocm9taXVtLW1hYy1saW9uJykKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChmYWN0b3J5LlBvcnRGYWN0b3J5KE1vY2tTeXN0ZW1Ib3N0KCkp
LmdldF9mcm9tX2J1aWxkZXJfbmFtZSgnQXBwbGUgTGlvbiBSZWxlYXNlIFdLMSAoVGVzdHMpJyku
bmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFjLWxpb24nKQpkaWZmIC0tZ2l0
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c19p
bnRlZ3JhdGlvbnRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9y
dW5fd2Via2l0X3Rlc3RzX2ludGVncmF0aW9udGVzdC5weQppbmRleCBlZTlmODZmNWJmZTI5OWJh
ZjQyZGIzNzlmZjBhMDI4Yzg3YzgyYzUxLi43NTY3YjM1YWZkYzU0ZTc1MGM5N2FiYjlkNTQ4MmQ0
ZDJmYjkxZTMzIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9ydW5fd2Via2l0X3Rlc3RzX2ludGVncmF0aW9udGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX2ludGVncmF0aW9udGVzdC5w
eQpAQCAtODIwLDkgKzgyMCwxMCBAQCBjbGFzcyBSdW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlLCBT
dHJlYW1UZXN0aW5nTWl4aW4pOgogICAgIGRlZiB0ZXN0X2J1aWxkX2NoZWNrKHNlbGYpOgogICAg
ICAgICAjIEJ5IHVzaW5nIGEgcG9ydF9uYW1lIGZvciBhIGRpZmZlcmVudCBwbGF0Zm9ybSB0aGFu
IHRoZSBvbmUgd2UncmUgcnVubmluZyBvbiwgdGhlIGJ1aWxkIGNoZWNrIHNob3VsZCBhbHdheXMg
ZmFpbC4KICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgotICAgICAgICAgICAg
cG9ydF9uYW1lID0gJ2Nocm9taXVtLWxpbnV4LXg4NicKKyAgICAgICAgICAgIHBvcnRfbmFtZSA9
ICdxdC1saW51eCcKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHBvcnRfbmFtZSA9ICdjaHJv
bWl1bS1tYWMtbGlvbicKKyAgICAgICAgICAgIHBvcnRfbmFtZSA9ICdtYWMtbGlvbicKKyAgICAg
ICAgcG9ydF9uYW1lID0gJ21hYy1saW9uJwogICAgICAgICBvdXQgPSBTdHJpbmdJTy5TdHJpbmdJ
TygpCiAgICAgICAgIGVyciA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKICAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChydW5fd2Via2l0X3Rlc3RzLm1haW4oWyctLXBsYXRmb3JtJywgcG9ydF9uYW1lLCAn
ZmFzdC9oYXJuZXNzL3Jlc3VsdHMuaHRtbCddLCBvdXQsIGVyciksIC0xKQpkaWZmIC0tZ2l0IGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy90ZXN0X2V4cGVjdGF0aW9uc191
bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvdGVzdF9l
eHBlY3RhdGlvbnNfdW5pdHRlc3QucHkKaW5kZXggNDNlZjgzNjNiZDU3YTZjMzRhMmYxMjliODA0
MmI1MGZhMTY1NjA0Ny4uZTNjMGMwYjNhZDJiNTA3NjA0ZGJmMmM1MzBkZWQ5ZTcxNGEzZjhmZSAx
MDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy90ZXN0X2V4
cGVjdGF0aW9uc191bml0dGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxl
L2NoZWNrZXJzL3Rlc3RfZXhwZWN0YXRpb25zX3VuaXR0ZXN0LnB5CkBAIC03NCw4ICs3NCw2IEBA
IGNsYXNzIFRlc3RFeHBlY3RhdGlvbnNUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAg
ICBkZWYgdGVzdF9kZXRlcm1pbmVfcG9ydF9mcm9tX2V4cGVjdGF0aW9uc19wYXRoKHNlbGYpOgog
ICAgICAgICBzZWxmLl9leHBlY3RfcG9ydF9mb3JfZXhwZWN0YXRpb25zX3BhdGgoTm9uZSwgJy8n
KQotICAgICAgICBzZWxmLl9leHBlY3RfcG9ydF9mb3JfZXhwZWN0YXRpb25zX3BhdGgoTm9uZSwg
J0xheW91dFRlc3RzL2Nocm9taXVtLW1hYy9UZXN0RXhwZWN0YXRpb25zJykKLSAgICAgICAgc2Vs
Zi5fZXhwZWN0X3BvcnRfZm9yX2V4cGVjdGF0aW9uc19wYXRoKCdjaHJvbWl1bScsICdMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zJykKICAgICAgICAgc2VsZi5f
ZXhwZWN0X3BvcnRfZm9yX2V4cGVjdGF0aW9uc19wYXRoKE5vbmUsICcvbW9jay1jaGVja291dC9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vVGVzdEV4cGVjdGF0aW9ucycpCiAgICAgICAgIHNlbGYu
X2V4cGVjdF9wb3J0X2Zvcl9leHBlY3RhdGlvbnNfcGF0aCgnd2luJywgJ0xheW91dFRlc3RzL3Bs
YXRmb3JtL3dpbi9UZXN0RXhwZWN0YXRpb25zJykKICAgICAgICAgc2VsZi5fZXhwZWN0X3BvcnRf
Zm9yX2V4cGVjdGF0aW9uc19wYXRoKCdlZmwnLCAnTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1Rl
c3RFeHBlY3RhdGlvbnMnKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29s
L2NvbW1hbmRzL3JlYmFzZWxpbmUucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29t
bWFuZHMvcmViYXNlbGluZS5weQppbmRleCBiNmU0MDhkNTIwNGQ2MzMzZWJjZmVhNTMyMzVhYTNj
NTA4NzM1MTg0Li5lNDI4MDY2MGI5Y2I0NWVmODJmNWUyNTJkYmE5MzM0NjgzMjZiOWRmIDEwMDY0
NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcmViYXNlbGluZS5w
eQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcmViYXNlbGluZS5w
eQpAQCAtNDU0LDE2ICs0NTQsMTIgQEAgY2xhc3MgUmViYXNlbGluZShBYnN0cmFjdFBhcmFsbGVs
UmViYXNlbGluZUNvbW1hbmQpOgogICAgICAgICAgICAgXSkKIAogICAgIGRlZiBfYnVpbGRlcnNf
dG9fcHVsbF9mcm9tKHNlbGYpOgotICAgICAgICBjaHJvbWl1bV9idWlsZGJvdF9idWlsZGVyX25h
bWVzID0gW10KICAgICAgICAgd2Via2l0X2J1aWxkYm90X2J1aWxkZXJfbmFtZXMgPSBbXQogICAg
ICAgICBmb3IgbmFtZSBpbiBidWlsZGVycy5hbGxfYnVpbGRlcl9uYW1lcygpOgotICAgICAgICAg
ICAgaWYgc2VsZi5fdG9vbC5wb3J0X2ZhY3RvcnkuZ2V0X2Zyb21fYnVpbGRlcl9uYW1lKG5hbWUp
LmlzX2Nocm9taXVtKCk6Ci0gICAgICAgICAgICAgICAgY2hyb21pdW1fYnVpbGRib3RfYnVpbGRl
cl9uYW1lcy5hcHBlbmQobmFtZSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAg
d2Via2l0X2J1aWxkYm90X2J1aWxkZXJfbmFtZXMuYXBwZW5kKG5hbWUpCisgICAgICAgICAgICB3
ZWJraXRfYnVpbGRib3RfYnVpbGRlcl9uYW1lcy5hcHBlbmQobmFtZSkKIAotICAgICAgICB0aXRs
ZXMgPSBbImJ1aWxkLndlYmtpdC5vcmcgYm90cyIsICJidWlsZC5jaHJvbWl1bS5vcmcgYm90cyJd
Ci0gICAgICAgIGxpc3RzID0gW3dlYmtpdF9idWlsZGJvdF9idWlsZGVyX25hbWVzLCBjaHJvbWl1
bV9idWlsZGJvdF9idWlsZGVyX25hbWVzXQorICAgICAgICB0aXRsZXMgPSBbImJ1aWxkLndlYmtp
dC5vcmcgYm90cyJdCisgICAgICAgIGxpc3RzID0gW3dlYmtpdF9idWlsZGJvdF9idWlsZGVyX25h
bWVzXQogCiAgICAgICAgIGNob3Nlbl9uYW1lcyA9IHNlbGYuX3Rvb2wudXNlci5wcm9tcHRfd2l0
aF9tdWx0aXBsZV9saXN0cygiV2hpY2ggYnVpbGRlciB0byBwdWxsIHJlc3VsdHMgZnJvbToiLCB0
aXRsZXMsIGxpc3RzLCBjYW5fY2hvb3NlX211bHRpcGxlPVRydWUpCiAgICAgICAgIHJldHVybiBb
c2VsZi5fYnVpbGRlcl93aXRoX25hbWUobmFtZSkgZm9yIG5hbWUgaW4gY2hvc2VuX25hbWVzXQpk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3JlYmFzZWxp
bmVfdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcmVi
YXNlbGluZV91bml0dGVzdC5weQppbmRleCBiOTNlMWE1MmNlZmQzZmUxMGFlMDI4ZDNiOTFkMTg0
NDNmMmZjOGY0Li40M2E4Nzg2ZmUzNzRhNmYyY2RmY2E0NzZiZGFlMWY0ZTQxNGVjNWNmIDEwMDY0
NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcmViYXNlbGluZV91
bml0dGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcmVi
YXNlbGluZV91bml0dGVzdC5weQpAQCAtMzksNyArMzksNyBAQCBmcm9tIHdlYmtpdHB5LnRvb2wu
bW9ja3Rvb2wgaW1wb3J0IE1vY2tUb29sLCBNb2NrT3B0aW9ucwogCiBjbGFzcyBfQmFzZVRlc3RD
YXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBNT0NLX1dFQl9SRVNVTFQgPSAnTU9DSyBXZWIg
cmVzdWx0LCBjb252ZXJ0IDQwNCB0byBOb25lPVRydWUnCi0gICAgV0VCX1BSRUZJWCA9ICdodHRw
Oi8vZXhhbXBsZS5jb20vZi9idWlsZGVycy9XZWJLaXQgTWFjMTAuNy9yZXN1bHRzL2xheW91dC10
ZXN0LXJlc3VsdHMnCisgICAgV0VCX1BSRUZJWCA9ICdodHRwOi8vZXhhbXBsZS5jb20vZi9idWls
ZGVycy9BcHBsZSBMaW9uIFJlbGVhc2UgV0sxIChUZXN0cykvcmVzdWx0cy9sYXlvdXQtdGVzdC1y
ZXN1bHRzJwogCiAgICAgY29tbWFuZF9jb25zdHJ1Y3RvciA9IE5vbmUKIApAQCAtNDcsNyArNDcs
NyBAQCBjbGFzcyBfQmFzZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgc2Vs
Zi50b29sID0gTW9ja1Rvb2woKQogICAgICAgICBzZWxmLmNvbW1hbmQgPSBzZWxmLmNvbW1hbmRf
Y29uc3RydWN0b3IoKSAgIyBsaW50IHdhcm5zIHRoYXQgY29tbWFuZF9jb25zdHJ1Y3RvciBtaWdo
dCBub3QgYmUgc2V0LCBidXQgdGhpcyBpcyBpbnRlbnRpb25hbDsgcHlsaW50OiBkaXNhYmxlPUUx
MTAyCiAgICAgICAgIHNlbGYuY29tbWFuZC5iaW5kX3RvX3Rvb2woc2VsZi50b29sKQotICAgICAg
ICBzZWxmLmxpb25fcG9ydCA9IHNlbGYudG9vbC5wb3J0X2ZhY3RvcnkuZ2V0X2Zyb21fYnVpbGRl
cl9uYW1lKCJXZWJLaXQgTWFjMTAuNyIpCisgICAgICAgIHNlbGYubGlvbl9wb3J0ID0gc2VsZi50
b29sLnBvcnRfZmFjdG9yeS5nZXRfZnJvbV9idWlsZGVyX25hbWUoIkFwcGxlIExpb24gUmVsZWFz
ZSBXSzEgKFRlc3RzKSIpCiAgICAgICAgIHNlbGYubGlvbl9leHBlY3RhdGlvbnNfcGF0aCA9IHNl
bGYubGlvbl9wb3J0LnBhdGhfdG9fdGVzdF9leHBlY3RhdGlvbnNfZmlsZSgpCiAKICAgICAgICAg
IyBGSVhNRTogd2Ugc2hvdWxkIG92ZXJyaWRlIGJ1aWxkZXJzLl9leGFjdF9tYXRjaGVzIGhlcmUg
dG8gcG9pbnQgdG8gYSBzZXQKQEAgLTc4LDcgKzc4LDcgQEAgY2xhc3MgVGVzdFJlYmFzZWxpbmVU
ZXN0KF9CYXNlVGVzdENhc2UpOgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzdXBl
cihUZXN0UmViYXNlbGluZVRlc3QsIHNlbGYpLnNldFVwKCkKLSAgICAgICAgc2VsZi5vcHRpb25z
ID0gTW9ja09wdGlvbnMoYnVpbGRlcj0iV2ViS2l0IE1hYzEwLjciLCB0ZXN0PSJ1c2Vyc2NyaXB0
cy9hbm90aGVyLXRlc3QuaHRtbCIsIHN1ZmZpeGVzPSJ0eHQiLAorICAgICAgICBzZWxmLm9wdGlv
bnMgPSBNb2NrT3B0aW9ucyhidWlsZGVyPSJBcHBsZSBMaW9uIFJlbGVhc2UgV0sxIChUZXN0cyki
LCB0ZXN0PSJ1c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3QuaHRtbCIsIHN1ZmZpeGVzPSJ0eHQiLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZlX292ZXJ3cml0dGVuX2Jhc2Vs
aW5lc190bz1Ob25lLCByZXN1bHRzX2RpcmVjdG9yeT1Ob25lKQogCiAgICAgZGVmIHRlc3RfYmFz
ZWxpbmVfZGlyZWN0b3J5KHNlbGYpOgpAQCAtODcsMTIgKzg3LDEyIEBAIGNsYXNzIFRlc3RSZWJh
c2VsaW5lVGVzdChfQmFzZVRlc3RDYXNlKToKICAgICAgICAgc2VsZi5hc3NlcnRNdWx0aUxpbmVF
cXVhbChjb21tYW5kLl9iYXNlbGluZV9kaXJlY3RvcnkoIkFwcGxlIFdpbiA3IFJlbGVhc2UgKFRl
c3RzKSIpLCAiL21vY2stY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luIikKICAgICAg
ICAgc2VsZi5hc3NlcnRNdWx0aUxpbmVFcXVhbChjb21tYW5kLl9iYXNlbGluZV9kaXJlY3Rvcnko
IkFwcGxlIExpb24gUmVsZWFzZSBXSzEgKFRlc3RzKSIpLCAiL21vY2stY2hlY2tvdXQvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vbWFjLWxpb24iKQogICAgICAgICBzZWxmLmFzc2VydE11bHRpTGluZUVx
dWFsKGNvbW1hbmQuX2Jhc2VsaW5lX2RpcmVjdG9yeSgiQXBwbGUgTGlvbiBSZWxlYXNlIFdLMiAo
VGVzdHMpIiksICIvbW9jay1jaGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2syIikK
KyAgICAgICAgc2VsZi5hc3NlcnRNdWx0aUxpbmVFcXVhbChjb21tYW5kLl9iYXNlbGluZV9kaXJl
Y3RvcnkoIkFwcGxlIE1vdW50YWluTGlvbiBSZWxlYXNlIFdLMSAoVGVzdHMpIiksICIvbW9jay1j
aGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMiKQorICAgICAgICBzZWxmLmFzc2VydE11
bHRpTGluZUVxdWFsKGNvbW1hbmQuX2Jhc2VsaW5lX2RpcmVjdG9yeSgiQXBwbGUgTW91bnRhaW5M
aW9uIFJlbGVhc2UgV0syIChUZXN0cykiKSwgIi9tb2NrLWNoZWNrb3V0L0xheW91dFRlc3RzL3Bs
YXRmb3JtL21hYyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0TXVsdGlMaW5lRXF1YWwoY29tbWFuZC5f
YmFzZWxpbmVfZGlyZWN0b3J5KCJHVEsgTGludXggNjQtYml0IERlYnVnIiksICIvbW9jay1jaGVj
a291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGstd2sxIikKICAgICAgICAgc2VsZi5hc3NlcnRN
dWx0aUxpbmVFcXVhbChjb21tYW5kLl9iYXNlbGluZV9kaXJlY3RvcnkoIkdUSyBMaW51eCA2NC1i
aXQgUmVsZWFzZSBXSzIgKFRlc3RzKSIpLCAiL21vY2stY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vZ3RrLXdrMiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0TXVsdGlMaW5lRXF1YWwoY29tbWFu
ZC5fYmFzZWxpbmVfZGlyZWN0b3J5KCJFRkwgTGludXggNjQtYml0IFJlbGVhc2UgV0syIiksICIv
bW9jay1jaGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwtd2syIikKICAgICAgICAgc2Vs
Zi5hc3NlcnRNdWx0aUxpbmVFcXVhbChjb21tYW5kLl9iYXNlbGluZV9kaXJlY3RvcnkoIlF0IExp
bnV4IFJlbGVhc2UiKSwgIi9tb2NrLWNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL3F0IikK
LSAgICAgICAgc2VsZi5hc3NlcnRNdWx0aUxpbmVFcXVhbChjb21tYW5kLl9iYXNlbGluZV9kaXJl
Y3RvcnkoIldlYktpdCBNYWMxMC43IiksICIvbW9jay1jaGVja291dC9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9jaHJvbWl1bS1tYWMtbGlvbiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0TXVsdGlMaW5lRXF1
YWwoY29tbWFuZC5fYmFzZWxpbmVfZGlyZWN0b3J5KCJXZWJLaXQgTWFjMTAuNiIpLCAiL21vY2st
Y2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0tbWFjLXNub3dsZW9wYXJkIikK
IAogICAgIGRlZiB0ZXN0X3JlYmFzZWxpbmVfdXBkYXRlc19leHBlY3RhdGlvbnNfZmlsZV9ub29w
KHNlbGYpOgogICAgICAgICBzZWxmLl96ZXJvX291dF90ZXN0X2V4cGVjdGF0aW9ucygpCkBAIC0x
MjcsMTEgKzEyNywxMCBAQCBCdWcoQSkgWyBEZWJ1ZyBdIDogZmFzdC9jc3MvbGFyZ2UtbGlzdC1v
Zi1ydWxlcy1jcmFzaC5odG1sIFsgRmFpbHVyZSBdCiAgICAgICAgICAgICAgc2VsZi5XRUJfUFJF
RklYICsgJy91c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3QtYWN0dWFsLndhdicsCiAgICAgICAgICAg
ICAgc2VsZi5XRUJfUFJFRklYICsgJy91c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3QtYWN0dWFsLnR4
dCddKQogICAgICAgICBuZXdfZXhwZWN0YXRpb25zID0gc2VsZi5fcmVhZChzZWxmLmxpb25fZXhw
ZWN0YXRpb25zX3BhdGgpCi0gICAgICAgIHNlbGYuYXNzZXJ0TXVsdGlMaW5lRXF1YWwobmV3X2V4
cGVjdGF0aW9ucywgIkJ1Zyh4KSBbIE1vdW50YWluTGlvbiBTbm93TGVvcGFyZCBdIHVzZXJzY3Jp
cHRzL2Fub3RoZXItdGVzdC5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdXG5idWcoeikgWyBMaW51
eCBdIHVzZXJzY3JpcHRzL2Fub3RoZXItdGVzdC5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdXG4i
KQorICAgICAgICBzZWxmLmFzc2VydE11bHRpTGluZUVxdWFsKG5ld19leHBlY3RhdGlvbnMsICJC
dWcoeCkgWyBNYWMgXSB1c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3QuaHRtbCBbIEltYWdlT25seUZh
aWx1cmUgXVxuYnVnKHopIFsgTGludXggXSB1c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3QuaHRtbCBb
IEltYWdlT25seUZhaWx1cmUgXVxuIikKIAogICAgIGRlZiB0ZXN0X3JlYmFzZWxpbmVfZG9lc19u
b3RfaW5jbHVkZV9vdmVycmlkZXMoc2VsZik6CiAgICAgICAgIHNlbGYuX3dyaXRlKHNlbGYubGlv
bl9leHBlY3RhdGlvbnNfcGF0aCwgIkJ1Zyh4KSBbIE1hYyBdIHVzZXJzY3JpcHRzL2Fub3RoZXIt
dGVzdC5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdXG5CdWcoeikgWyBMaW51eCBdIHVzZXJzY3Jp
cHRzL2Fub3RoZXItdGVzdC5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdXG4iKQotICAgICAgICBz
ZWxmLl93cml0ZShzZWxmLmxpb25fcG9ydC5wYXRoX2Zyb21fY2hyb21pdW1fYmFzZSgnc2tpYScs
ICdza2lhX3Rlc3RfZXhwZWN0YXRpb25zLnR4dCcpLCAiQnVnKHkpIFsgTWFjIF0gb3RoZXItdGVz
dC5odG1sIFsgRmFpbHVyZSBdXG4iKQogICAgICAgICBzZWxmLl93cml0ZSgidXNlcnNjcmlwdHMv
YW5vdGhlci10ZXN0Lmh0bWwiLCAiRHVtbXkgdGVzdCBjb250ZW50cyIpCiAKICAgICAgICAgc2Vs
Zi5vcHRpb25zLnN1ZmZpeGVzID0gJ3BuZyx3YXYsdHh0JwpAQCAtMTQzLDEwICsxNDIsMTAgQEAg
QnVnKEEpIFsgRGVidWcgXSA6IGZhc3QvY3NzL2xhcmdlLWxpc3Qtb2YtcnVsZXMtY3Jhc2guaHRt
bCBbIEZhaWx1cmUgXQogICAgICAgICAgICAgIHNlbGYuV0VCX1BSRUZJWCArICcvdXNlcnNjcmlw
dHMvYW5vdGhlci10ZXN0LWFjdHVhbC50eHQnXSkKIAogICAgICAgICBuZXdfZXhwZWN0YXRpb25z
ID0gc2VsZi5fcmVhZChzZWxmLmxpb25fZXhwZWN0YXRpb25zX3BhdGgpCi0gICAgICAgIHNlbGYu
YXNzZXJ0TXVsdGlMaW5lRXF1YWwobmV3X2V4cGVjdGF0aW9ucywgIkJ1Zyh4KSBbIE1vdW50YWlu
TGlvbiBTbm93TGVvcGFyZCBdIHVzZXJzY3JpcHRzL2Fub3RoZXItdGVzdC5odG1sIFsgSW1hZ2VP
bmx5RmFpbHVyZSBdXG5CdWcoeikgWyBMaW51eCBdIHVzZXJzY3JpcHRzL2Fub3RoZXItdGVzdC5o
dG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdXG4iKQorICAgICAgICBzZWxmLmFzc2VydE11bHRpTGlu
ZUVxdWFsKG5ld19leHBlY3RhdGlvbnMsICJCdWcoeCkgWyBNYWMgXSB1c2Vyc2NyaXB0cy9hbm90
aGVyLXRlc3QuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXVxuQnVnKHopIFsgTGludXggXSB1c2Vy
c2NyaXB0cy9hbm90aGVyLXRlc3QuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXVxuIikKIAogICAg
IGRlZiB0ZXN0X3JlYmFzZWxpbmVfdGVzdChzZWxmKToKLSAgICAgICAgc2VsZi5jb21tYW5kLl9y
ZWJhc2VsaW5lX3Rlc3QoIldlYktpdCBMaW51eCIsICJ1c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3Qu
aHRtbCIsIE5vbmUsICJ0eHQiLCBzZWxmLldFQl9QUkVGSVgpCisgICAgICAgIHNlbGYuY29tbWFu
ZC5fcmViYXNlbGluZV90ZXN0KCJBcHBsZSBMaW9uIFJlbGVhc2UgV0sxIChUZXN0cykiLCAidXNl
cnNjcmlwdHMvYW5vdGhlci10ZXN0Lmh0bWwiLCBOb25lLCAidHh0Iiwgc2VsZi5XRUJfUFJFRklY
KQogICAgICAgICBzZWxmLmFzc2VydEl0ZW1zRXF1YWwoc2VsZi50b29sLndlYi51cmxzX2ZldGNo
ZWQsIFtzZWxmLldFQl9QUkVGSVggKyAnL3VzZXJzY3JpcHRzL2Fub3RoZXItdGVzdC1hY3R1YWwu
dHh0J10pCiAKICAgICBkZWYgdGVzdF9yZWJhc2VsaW5lX3Rlc3Rfd2l0aF9yZXN1bHRzX2RpcmVj
dG9yeShzZWxmKToKQEAgLTE2MCw0MSArMTU5LDQxIEBAIEJ1ZyhBKSBbIERlYnVnIF0gOiBmYXN0
L2Nzcy9sYXJnZS1saXN0LW9mLXJ1bGVzLWNyYXNoLmh0bWwgWyBGYWlsdXJlIF0KICAgICAgICAg
c2VsZi5jb21tYW5kLl9zY21fY2hhbmdlcyA9IHsnYWRkJzogW10sICdkZWxldGUnOiBbXX0KICAg
ICAgICAgc2VsZi50b29sLl9zY20uZXhpc3RzID0gbGFtYmRhIHg6IEZhbHNlCiAKLSAgICAgICAg
c2VsZi5jb21tYW5kLl9yZWJhc2VsaW5lX3Rlc3QoIldlYktpdCBMaW51eCIsICJ1c2Vyc2NyaXB0
cy9hbm90aGVyLXRlc3QuaHRtbCIsIE5vbmUsICJ0eHQiLCBOb25lKQorICAgICAgICBzZWxmLmNv
bW1hbmQuX3JlYmFzZWxpbmVfdGVzdCgiQXBwbGUgTGlvbiBSZWxlYXNlIFdLMSAoVGVzdHMpIiwg
InVzZXJzY3JpcHRzL2Fub3RoZXItdGVzdC5odG1sIiwgTm9uZSwgInR4dCIsIE5vbmUpCiAKLSAg
ICAgICAgc2VsZi5hc3NlcnREaWN0RXF1YWwoc2VsZi5jb21tYW5kLl9zY21fY2hhbmdlcywgeydh
ZGQnOiBbJy9tb2NrLWNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLWxpbnV4
L3VzZXJzY3JpcHRzL2Fub3RoZXItdGVzdC1leHBlY3RlZC50eHQnXSwgJ2RlbGV0ZSc6IFtdfSkK
KyAgICAgICAgc2VsZi5hc3NlcnREaWN0RXF1YWwoc2VsZi5jb21tYW5kLl9zY21fY2hhbmdlcywg
eydhZGQnOiBbJy9tb2NrLWNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy1saW9uL3Vz
ZXJzY3JpcHRzL2Fub3RoZXItdGVzdC1leHBlY3RlZC50eHQnXSwgJ2RlbGV0ZSc6IFtdfSkKIAog
ICAgIGRlZiB0ZXN0X3JlYmFzZWxpbmVfYW5kX2NvcHlfdGVzdChzZWxmKToKICAgICAgICAgc2Vs
Zi5fd3JpdGUoInVzZXJzY3JpcHRzL2Fub3RoZXItdGVzdC1leHBlY3RlZC50eHQiLCAiZ2VuZXJp
YyByZXN1bHQiKQogCi0gICAgICAgIHNlbGYuY29tbWFuZC5fcmViYXNlbGluZV90ZXN0KCJXZWJL
aXQgTWFjMTAuNyIsICJ1c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3QuaHRtbCIsIFsiY2hyb21pdW0t
bWFjLXNub3dsZW9wYXJkIl0sICJ0eHQiLCBOb25lKQorICAgICAgICBzZWxmLmNvbW1hbmQuX3Jl
YmFzZWxpbmVfdGVzdCgiQXBwbGUgTGlvbiBSZWxlYXNlIFdLMSAoVGVzdHMpIiwgInVzZXJzY3Jp
cHRzL2Fub3RoZXItdGVzdC5odG1sIiwgWyJtYWMtbGlvbi13azIiXSwgInR4dCIsIE5vbmUpCiAK
LSAgICAgICAgc2VsZi5hc3NlcnRNdWx0aUxpbmVFcXVhbChzZWxmLl9yZWFkKCdwbGF0Zm9ybS9j
aHJvbWl1bS1tYWMtbGlvbi91c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3QtZXhwZWN0ZWQudHh0Jyks
IHNlbGYuTU9DS19XRUJfUkVTVUxUKQotICAgICAgICBzZWxmLmFzc2VydE11bHRpTGluZUVxdWFs
KHNlbGYuX3JlYWQoJ3BsYXRmb3JtL2Nocm9taXVtLW1hYy1zbm93bGVvcGFyZC91c2Vyc2NyaXB0
cy9hbm90aGVyLXRlc3QtZXhwZWN0ZWQudHh0JyksICdnZW5lcmljIHJlc3VsdCcpCisgICAgICAg
IHNlbGYuYXNzZXJ0TXVsdGlMaW5lRXF1YWwoc2VsZi5fcmVhZCgncGxhdGZvcm0vbWFjLWxpb24v
dXNlcnNjcmlwdHMvYW5vdGhlci10ZXN0LWV4cGVjdGVkLnR4dCcpLCBzZWxmLk1PQ0tfV0VCX1JF
U1VMVCkKKyAgICAgICAgc2VsZi5hc3NlcnRNdWx0aUxpbmVFcXVhbChzZWxmLl9yZWFkKCdwbGF0
Zm9ybS9tYWMtd2syL3VzZXJzY3JpcHRzL2Fub3RoZXItdGVzdC1leHBlY3RlZC50eHQnKSwgJ2dl
bmVyaWMgcmVzdWx0JykKIAogICAgIGRlZiB0ZXN0X3JlYmFzZWxpbmVfYW5kX2NvcHlfdGVzdF9u
b19leGlzdGluZ19yZXN1bHQoc2VsZik6Ci0gICAgICAgIHNlbGYuY29tbWFuZC5fcmViYXNlbGlu
ZV90ZXN0KCJXZWJLaXQgTWFjMTAuNyIsICJ1c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3QuaHRtbCIs
IFsiY2hyb21pdW0tbWFjLXNub3dsZW9wYXJkIl0sICJ0eHQiLCBOb25lKQorICAgICAgICBzZWxm
LmNvbW1hbmQuX3JlYmFzZWxpbmVfdGVzdCgiQXBwbGUgTGlvbiBSZWxlYXNlIFdLMSAoVGVzdHMp
IiwgInVzZXJzY3JpcHRzL2Fub3RoZXItdGVzdC5odG1sIiwgWyJtYWMtbGlvbi13azIiXSwgInR4
dCIsIE5vbmUpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRNdWx0aUxpbmVFcXVhbChzZWxmLl9yZWFk
KCdwbGF0Zm9ybS9jaHJvbWl1bS1tYWMtbGlvbi91c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3QtZXhw
ZWN0ZWQudHh0JyksIHNlbGYuTU9DS19XRUJfUkVTVUxUKQotICAgICAgICBzZWxmLmFzc2VydEZh
bHNlKHNlbGYudG9vbC5maWxlc3lzdGVtLmV4aXN0cyhzZWxmLl9leHBhbmQoJ3BsYXRmb3JtL2No
cm9taXVtLW1hYy1zbm93bGVvcGFyZC91c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3QtZXhwZWN0ZWQu
dHh0JykpKQorICAgICAgICBzZWxmLmFzc2VydE11bHRpTGluZUVxdWFsKHNlbGYuX3JlYWQoJ3Bs
YXRmb3JtL21hYy1saW9uL3VzZXJzY3JpcHRzL2Fub3RoZXItdGVzdC1leHBlY3RlZC50eHQnKSwg
c2VsZi5NT0NLX1dFQl9SRVNVTFQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi50b29s
LmZpbGVzeXN0ZW0uZXhpc3RzKHNlbGYuX2V4cGFuZCgncGxhdGZvcm0vbWFjLWxpb24td2syL3Vz
ZXJzY3JpcHRzL2Fub3RoZXItdGVzdC1leHBlY3RlZC50eHQnKSkpCiAKICAgICBkZWYgdGVzdF9y
ZWJhc2VsaW5lX2FuZF9jb3B5X3Rlc3Rfd2l0aF9saW9uX3Jlc3VsdChzZWxmKToKLSAgICAgICAg
c2VsZi5fd3JpdGUoInBsYXRmb3JtL2Nocm9taXVtLW1hYy1saW9uL3VzZXJzY3JpcHRzL2Fub3Ro
ZXItdGVzdC1leHBlY3RlZC50eHQiLCAib3JpZ2luYWwgbGlvbiByZXN1bHQiKQorICAgICAgICBz
ZWxmLl93cml0ZSgicGxhdGZvcm0vbWFjLWxpb24vdXNlcnNjcmlwdHMvYW5vdGhlci10ZXN0LWV4
cGVjdGVkLnR4dCIsICJvcmlnaW5hbCBsaW9uIHJlc3VsdCIpCiAKLSAgICAgICAgc2VsZi5jb21t
YW5kLl9yZWJhc2VsaW5lX3Rlc3QoIldlYktpdCBNYWMxMC43IiwgInVzZXJzY3JpcHRzL2Fub3Ro
ZXItdGVzdC5odG1sIiwgWyJjaHJvbWl1bS1tYWMtc25vd2xlb3BhcmQiXSwgInR4dCIsIHNlbGYu
V0VCX1BSRUZJWCkKKyAgICAgICAgc2VsZi5jb21tYW5kLl9yZWJhc2VsaW5lX3Rlc3QoIkFwcGxl
IExpb24gUmVsZWFzZSBXSzEgKFRlc3RzKSIsICJ1c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3QuaHRt
bCIsIFsibWFjLWxpb24td2syIl0sICJ0eHQiLCBzZWxmLldFQl9QUkVGSVgpCiAKICAgICAgICAg
c2VsZi5hc3NlcnRJdGVtc0VxdWFsKHNlbGYudG9vbC53ZWIudXJsc19mZXRjaGVkLCBbc2VsZi5X
RUJfUFJFRklYICsgJy91c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3QtYWN0dWFsLnR4dCddKQotICAg
ICAgICBzZWxmLmFzc2VydE11bHRpTGluZUVxdWFsKHNlbGYuX3JlYWQoInBsYXRmb3JtL2Nocm9t
aXVtLW1hYy1zbm93bGVvcGFyZC91c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3QtZXhwZWN0ZWQudHh0
IiksICJvcmlnaW5hbCBsaW9uIHJlc3VsdCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0TXVsdGlMaW5l
RXF1YWwoc2VsZi5fcmVhZCgicGxhdGZvcm0vY2hyb21pdW0tbWFjLWxpb24vdXNlcnNjcmlwdHMv
YW5vdGhlci10ZXN0LWV4cGVjdGVkLnR4dCIpLCBzZWxmLk1PQ0tfV0VCX1JFU1VMVCkKKyAgICAg
ICAgc2VsZi5hc3NlcnRNdWx0aUxpbmVFcXVhbChzZWxmLl9yZWFkKCJwbGF0Zm9ybS9tYWMtd2sy
L3VzZXJzY3JpcHRzL2Fub3RoZXItdGVzdC1leHBlY3RlZC50eHQiKSwgIm9yaWdpbmFsIGxpb24g
cmVzdWx0IikKKyAgICAgICAgc2VsZi5hc3NlcnRNdWx0aUxpbmVFcXVhbChzZWxmLl9yZWFkKCJw
bGF0Zm9ybS9tYWMtbGlvbi91c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3QtZXhwZWN0ZWQudHh0Iiks
IHNlbGYuTU9DS19XRUJfUkVTVUxUKQogCiAgICAgZGVmIHRlc3RfcmViYXNlbGluZV9hbmRfY29w
eV9ub19vdmVyd3JpdGVfdGVzdChzZWxmKToKLSAgICAgICAgc2VsZi5fd3JpdGUoInBsYXRmb3Jt
L2Nocm9taXVtLW1hYy1saW9uL3VzZXJzY3JpcHRzL2Fub3RoZXItdGVzdC1leHBlY3RlZC50eHQi
LCAib3JpZ2luYWwgbGlvbiByZXN1bHQiKQotICAgICAgICBzZWxmLl93cml0ZSgicGxhdGZvcm0v
Y2hyb21pdW0tbWFjLXNub3dsZW9wYXJkL3VzZXJzY3JpcHRzL2Fub3RoZXItdGVzdC1leHBlY3Rl
ZC50eHQiLCAib3JpZ2luYWwgc25vd2xlb3BhcmQgcmVzdWx0IikKKyAgICAgICAgc2VsZi5fd3Jp
dGUoInBsYXRmb3JtL21hYy1saW9uL3VzZXJzY3JpcHRzL2Fub3RoZXItdGVzdC1leHBlY3RlZC50
eHQiLCAib3JpZ2luYWwgbGlvbiByZXN1bHQiKQorICAgICAgICBzZWxmLl93cml0ZSgicGxhdGZv
cm0vbWFjLWxpb24td2syL3VzZXJzY3JpcHRzL2Fub3RoZXItdGVzdC1leHBlY3RlZC50eHQiLCAi
b3JpZ2luYWwgbGlvbiB3azIgcmVzdWx0IikKIAotICAgICAgICBzZWxmLmNvbW1hbmQuX3JlYmFz
ZWxpbmVfdGVzdCgiV2ViS2l0IE1hYzEwLjciLCAidXNlcnNjcmlwdHMvYW5vdGhlci10ZXN0Lmh0
bWwiLCBbImNocm9taXVtLW1hYy1zbm93bGVvcGFyZCJdLCAidHh0IiwgTm9uZSkKKyAgICAgICAg
c2VsZi5jb21tYW5kLl9yZWJhc2VsaW5lX3Rlc3QoIkFwcGxlIExpb24gUmVsZWFzZSBXSzEgKFRl
c3RzKSIsICJ1c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3QuaHRtbCIsIFsibWFjLWxpb24td2syIl0s
ICJ0eHQiLCBOb25lKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0TXVsdGlMaW5lRXF1YWwoc2VsZi5f
cmVhZCgicGxhdGZvcm0vY2hyb21pdW0tbWFjLXNub3dsZW9wYXJkL3VzZXJzY3JpcHRzL2Fub3Ro
ZXItdGVzdC1leHBlY3RlZC50eHQiKSwgIm9yaWdpbmFsIHNub3dsZW9wYXJkIHJlc3VsdCIpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0TXVsdGlMaW5lRXF1YWwoc2VsZi5fcmVhZCgicGxhdGZvcm0vY2hy
b21pdW0tbWFjLWxpb24vdXNlcnNjcmlwdHMvYW5vdGhlci10ZXN0LWV4cGVjdGVkLnR4dCIpLCBz
ZWxmLk1PQ0tfV0VCX1JFU1VMVCkKKyAgICAgICAgc2VsZi5hc3NlcnRNdWx0aUxpbmVFcXVhbChz
ZWxmLl9yZWFkKCJwbGF0Zm9ybS9tYWMtbGlvbi13azIvdXNlcnNjcmlwdHMvYW5vdGhlci10ZXN0
LWV4cGVjdGVkLnR4dCIpLCAib3JpZ2luYWwgbGlvbiB3azIgcmVzdWx0IikKKyAgICAgICAgc2Vs
Zi5hc3NlcnRNdWx0aUxpbmVFcXVhbChzZWxmLl9yZWFkKCJwbGF0Zm9ybS9tYWMtbGlvbi91c2Vy
c2NyaXB0cy9hbm90aGVyLXRlc3QtZXhwZWN0ZWQudHh0IiksIHNlbGYuTU9DS19XRUJfUkVTVUxU
KQogCiAgICAgZGVmIHRlc3RfcmViYXNlbGluZV90ZXN0X2ludGVybmFsX3dpdGhfbW92ZV9vdmVy
d3JpdHRlbl9iYXNlbGluZXNfdG8oc2VsZik6CiAgICAgICAgIHNlbGYudG9vbC5leGVjdXRpdmUg
PSBNb2NrRXhlY3V0aXZlMigpCkBAIC0zMzcsNyArMzM2LDcgQEAgY2xhc3MgVGVzdFJlYmFzZWxp
bmVFeHBlY3RhdGlvbnMoX0Jhc2VUZXN0Q2FzZSk6CiAgICAgICAgICMgRklYTUU6IGNoYW5nZSB0
aGlzIHRvIHVzZSB0aGUgdGVzdC0gcG9ydHMuCiAgICAgICAgIGNhbGxzID0gZmlsdGVyKGxhbWJk
YSB4OiB4ICE9IFsncW1ha2UnLCAnLXYnXSwgc2VsZi50b29sLmV4ZWN1dGl2ZS5jYWxscykKICAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY2FsbHMpLCAxKQotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKGxlbihjYWxsc1swXSksIDM2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihj
YWxsc1swXSksIDIyKQogCiAgICAgZGVmIHRlc3RfcmViYXNlbGluZV9leHBlY3RhdGlvbnNfbm9v
cChzZWxmKToKICAgICAgICAgc2VsZi5femVyb19vdXRfdGVzdF9leHBlY3RhdGlvbnMoKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>