<?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>219111</bug_id>
          
          <creation_ts>2020-11-18 13:46:10 -0800</creation_ts>
          <short_desc>Remove IRC bots from webkitpy</short_desc>
          <delta_ts>2020-11-18 17:39:27 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>Other</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>aakash_jain</cc>
    
    <cc>jbedard</cc>
    
    <cc>lingho</cc>
    
    <cc>webkit-bot-watchers-bugzilla</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1708754</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2020-11-18 13:46:10 -0800</bug_when>
    <thetext>We haven&apos;t been running any IRC bots for a while, this is dead code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1708756</commentid>
    <comment_count>1</comment_count>
      <attachid>414482</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2020-11-18 13:50:10 -0800</bug_when>
    <thetext>Created attachment 414482
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1708845</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2020-11-18 16:05:03 -0800</bug_when>
    <thetext>svn-apply cannot process directory removal, but this is still up for review. What can go wrong without EWS? :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1708862</commentid>
    <comment_count>3</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-11-18 16:20:06 -0800</bug_when>
    <thetext>(In reply to Alexey Proskuryakov from comment #2)
&gt; svn-apply cannot process directory removal, but this is still up for review.
&gt; What can go wrong without EWS? :)

I assume you&apos;re run test-webkitpy...that&apos;s the one that would break, if anything was going to.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1708864</commentid>
    <comment_count>4</comment_count>
      <attachid>414482</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-11-18 16:25:08 -0800</bug_when>
    <thetext>Comment on attachment 414482
proposed patch

Looks good, assuming webkitpy tests pass.

If we wanted to feel better about EWS, a patch that does not remove third party/irc would still remove the code that we have historically owned, and might have a better chance of applying.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1708866</commentid>
    <comment_count>5</comment_count>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2020-11-18 16:27:16 -0800</bug_when>
    <thetext>Looks good. We can also consider removing all instances of &apos;sheriff-bot&apos; from webkitpy (e.g.: tool/commands/download.py, common/config/contributors.json)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1708912</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2020-11-18 17:32:29 -0800</bug_when>
    <thetext>(In reply to Aakash Jain from comment #5)
&gt; Looks good. We can also consider removing all instances of &apos;sheriff-bot&apos;
&gt; from webkitpy (e.g.: tool/commands/download.py,
&gt; common/config/contributors.json)

It&apos;s also mentioned in Tools/WebKitBot/src/WebKitBot.mjs, so I wasn&apos;t sure how to confirm that it&apos;s OK to remove.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1708915</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2020-11-18 17:36:17 -0800</bug_when>
    <thetext>But I&apos;m fairly sure that what I&apos;m removing is unused. CC&apos;ing bot watchers in case I do break the Slack bot somehow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1708916</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2020-11-18 17:38:26 -0800</bug_when>
    <thetext>Committed http://trac.webkit.org/r270003</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1708917</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-11-18 17:39:27 -0800</bug_when>
    <thetext>&lt;rdar://problem/71564617&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>414482</attachid>
            <date>2020-11-18 13:50:10 -0800</date>
            <delta_ts>2020-11-18 16:25:08 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>RemoveIRCBots.txt</filename>
            <type>text/plain</type>
            <size>168439</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2OTk4MSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDQxIEBACisyMDIwLTExLTE4ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29t
PgorCisgICAgICAgIFJlbW92ZSBJUkMgYm90cyBmcm9tIHdlYmtpdHB5CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTkxMTEKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZSBoYXZlbid0IGJlZW4gcnVubmlu
ZyBhbnkgSVJDIGJvdHMgZm9yIGEgd2hpbGUsIHRoaXMgaXMgZGVhZCBjb2RlLgorCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L2lyYzogUmVtb3ZlZC4KKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvaXJjOiBSZW1vdmVkLgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvdG9vbC9ib3QvaXJjX2NvbW1hbmQucHk6IFJlbW92ZWQuCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS90b29sL2JvdC9pcmNfY29tbWFuZF91bml0dGVzdC5weTogUmVtb3Zl
ZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvYm90L2lyY2JvdC5weTogUmVtb3Zl
ZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvYm90L2lyY2JvdF91bml0dGVzdC5w
eTogUmVtb3ZlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvYm90L3NoZXJpZmYu
cHk6IFJlbW92ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL2JvdC9zaGVyaWZm
X3VuaXR0ZXN0LnB5OiBSZW1vdmVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9j
b21tYW5kcy9fX2luaXRfXy5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29t
bWFuZHMvbmV3Y29tbWl0Ym90LnB5OiBSZW1vdmVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvdG9vbC9jb21tYW5kcy9uZXdjb21taXRib3RfdW5pdHRlc3QucHk6IFJlbW92ZWQuCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3BlcmZhbGl6ZXIucHk6IFJlbW92
ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3BlcmZhbGl6ZXJf
dW5pdHRlc3QucHk6IFJlbW92ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL2Nv
bW1hbmRzL3NoZXJpZmZib3QucHk6IFJlbW92ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS90b29sL2NvbW1hbmRzL3NoZXJpZmZib3RfdW5pdHRlc3QucHk6IFJlbW92ZWQuCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS90b29sL21haW4ucHk6CisgICAgICAgIChXZWJLaXRQYXRjaCk6
CisgICAgICAgIChXZWJLaXRQYXRjaC5fX2luaXRfXyk6CisgICAgICAgIChXZWJLaXRQYXRjaC5w
YXRoKToKKyAgICAgICAgKFdlYktpdFBhdGNoLmNvbW1hbmRfY29tcGxldGVkKToKKyAgICAgICAg
KFdlYktpdFBhdGNoLmhhbmRsZV9nbG9iYWxfb3B0aW9ucyk6CisgICAgICAgIChXZWJLaXRQYXRj
aC5lbnN1cmVfaXJjX2Nvbm5lY3RlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXRQYXRjaC5p
cmMpOiBEZWxldGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9tb2NrdG9vbC5w
eToKKyAgICAgICAgKE1vY2tUb29sLl9faW5pdF9fKToKKyAgICAgICAgKE1vY2tUb29sLnBhdGgp
OgorICAgICAgICAoTW9ja1Rvb2wuZW5zdXJlX2lyY19jb25uZWN0ZWQpOiBEZWxldGVkLgorICAg
ICAgICAoTW9ja1Rvb2wuaXJjKTogRGVsZXRlZC4KKwogMjAyMC0xMS0xOCAgQ2hyaXMgRHVtZXog
IDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQgaXMgbm90
IGV4cG9zZWQgb24gKi5sb2NhbGhvc3QgcGFnZXMKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvY29tbW9uL25ldC9pcmMvX19pbml0X18ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tb24vbmV0L2lyYy9fX2luaXRfXy5weQkocmV2aXNpb24gMjY5OTgwKQor
KysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L2lyYy9fX2luaXRfXy5weQkobm9u
ZXhpc3RlbnQpCkBAIC0xICswLDAgQEAKLSMgUmVxdWlyZWQgZm9yIFB5dGhvbiB0byBzZWFyY2gg
dGhpcyBkaXJlY3RvcnkgZm9yIG1vZHVsZSBmaWxlcwpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vbmV0L2lyYy9pcmNfbW9jay5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvaXJjL2lyY19tb2NrLnB5CShyZXZpc2lvbiAyNjk5ODAp
CisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvaXJjL2lyY19tb2NrLnB5CShu
b25leGlzdGVudCkKQEAgLTEsMzkgKzAsMCBAQAotIyBDb3B5cmlnaHQgKGMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLSMgbWV0OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwot
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
IyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWltcG9ydCBs
b2dnaW5nCi0KLV9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKLQotCi1jbGFzcyBN
b2NrSVJDKG9iamVjdCk6Ci0gICAgZGVmIHBvc3Qoc2VsZiwgbWVzc2FnZSk6Ci0gICAgICAgIF9s
b2cuaW5mbygiTU9DSzogaXJjLnBvc3Q6ICVzIiAlIG1lc3NhZ2UpCi0KLSAgICBkZWYgZGlzY29u
bmVjdChzZWxmKToKLSAgICAgICAgX2xvZy5pbmZvKCJNT0NLOiBpcmMuZGlzY29ubmVjdCIpCklu
ZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvaXJjL2lyY2JvdC5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvaXJjL2lyY2JvdC5w
eQkocmV2aXNpb24gMjY5OTgwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0
L2lyYy9pcmNib3QucHkJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMDYgKzAsMCBAQAotIyBDb3B5cmln
aHQgKGMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0
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
QU1BR0UuCi0KLWZyb20gd2Via2l0cHkuY29tbW9uLmNvbmZpZyBpbXBvcnQgaXJjIGFzIGNvbmZp
Z19pcmMKLQotZnJvbSB3ZWJraXRweS5jb21tb24udGhyZWFkLm1lc3NhZ2VwdW1wIGltcG9ydCBN
ZXNzYWdlUHVtcCwgTWVzc2FnZVB1bXBEZWxlZ2F0ZQotZnJvbSB3ZWJraXRweS50aGlyZHBhcnR5
LmlyYyBpbXBvcnQgaXJjYm90Ci1mcm9tIHdlYmtpdHB5LnRoaXJkcGFydHkuaXJjIGltcG9ydCBp
cmNsaWIKLQotCi1jbGFzcyBJUkNCb3REZWxlZ2F0ZShvYmplY3QpOgotICAgIGRlZiBpcmNfbWVz
c2FnZV9yZWNlaXZlZChzZWxmLCBuaWNrLCBtZXNzYWdlKToKLSAgICAgICAgcmFpc2UgTm90SW1w
bGVtZW50ZWRFcnJvcignc3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudCcpCi0KLSAgICBkZWYgaXJj
X25pY2tuYW1lKHNlbGYpOgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdzdWJj
bGFzc2VzIG11c3QgaW1wbGVtZW50JykKLQotICAgIGRlZiBpcmNfcGFzc3dvcmQoc2VsZik6Ci0g
ICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ3N1YmNsYXNzZXMgbXVzdCBpbXBsZW1l
bnQnKQotCi0KLWNsYXNzIElSQ0JvdChpcmNib3QuU2luZ2xlU2VydmVySVJDQm90LCBNZXNzYWdl
UHVtcERlbGVnYXRlKToKLSAgICAjIEZJWE1FOiBXZSBzaG91bGQgZ2V0IHRoaXMgaW5mb3JtYXRp
b24gZnJvbSBhIGNvbmZpZyBmaWxlLgotICAgIGRlZiBfX2luaXRfXyhzZWxmLAotICAgICAgICAg
ICAgICAgICBtZXNzYWdlX3F1ZXVlLAotICAgICAgICAgICAgICAgICBkZWxlZ2F0ZSk6Ci0gICAg
ICAgIHNlbGYuX21lc3NhZ2VfcXVldWUgPSBtZXNzYWdlX3F1ZXVlCi0gICAgICAgIHNlbGYuX2Rl
bGVnYXRlID0gZGVsZWdhdGUKLSAgICAgICAgaXJjYm90LlNpbmdsZVNlcnZlcklSQ0JvdC5fX2lu
aXRfXygKLSAgICAgICAgICAgIHNlbGYsCi0gICAgICAgICAgICBbKAotICAgICAgICAgICAgICAg
IGNvbmZpZ19pcmMuc2VydmVyLAotICAgICAgICAgICAgICAgIGNvbmZpZ19pcmMucG9ydCwKLSAg
ICAgICAgICAgICAgICBzZWxmLl9kZWxlZ2F0ZS5pcmNfcGFzc3dvcmQoKQotICAgICAgICAgICAg
KV0sCi0gICAgICAgICAgICBzZWxmLl9kZWxlZ2F0ZS5pcmNfbmlja25hbWUoKSwKLSAgICAgICAg
ICAgIHNlbGYuX2RlbGVnYXRlLmlyY19uaWNrbmFtZSgpKQotICAgICAgICBzZWxmLl9jaGFubmVs
ID0gY29uZmlnX2lyYy5jaGFubmVsCi0KLSAgICAjIGlyY2JvdC5TaW5nbGVTZXJ2ZXJJUkNCb3Qg
bWV0aG9kcwotCi0gICAgZGVmIG9uX25pY2tuYW1laW51c2Uoc2VsZiwgY29ubmVjdGlvbiwgZXZl
bnQpOgotICAgICAgICBjb25uZWN0aW9uLm5pY2soY29ubmVjdGlvbi5nZXRfbmlja25hbWUoKSAr
ICJfIikKLQotICAgIGRlZiBvbl93ZWxjb21lKHNlbGYsIGNvbm5lY3Rpb24sIGV2ZW50KToKLSAg
ICAgICAgY29ubmVjdGlvbi5qb2luKHNlbGYuX2NoYW5uZWwpCi0gICAgICAgIHNlbGYuX21lc3Nh
Z2VfcHVtcCA9IE1lc3NhZ2VQdW1wKHNlbGYsIHNlbGYuX21lc3NhZ2VfcXVldWUpCi0KLSAgICBk
ZWYgb25fcHVibXNnKHNlbGYsIGNvbm5lY3Rpb24sIGV2ZW50KToKLSAgICAgICAgbmljayA9IGly
Y2xpYi5ubV90b19uKGV2ZW50LnNvdXJjZSgpKQotICAgICAgICByZXF1ZXN0ID0gZXZlbnQuYXJn
dW1lbnRzKClbMF0KLQotICAgICAgICBpZiBub3QgaXJjbGliLmlyY19sb3dlcihyZXF1ZXN0KS5z
dGFydHN3aXRoKGlyY2xpYi5pcmNfbG93ZXIoY29ubmVjdGlvbi5nZXRfbmlja25hbWUoKSkpOgot
ICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgaWYgbGVuKHJlcXVlc3QpIDw9IGxlbihjb25u
ZWN0aW9uLmdldF9uaWNrbmFtZSgpKToKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgICMg
U29tZSBJUkMgY2xpZW50cywgbGlrZSB4Y2hhdC1nbm9tZSwgZGVmYXVsdCB0byB1c2luZyBhIGNv
bW1hCi0gICAgICAgICMgd2hlbiBhZGRyZXNzaW5nIHNvbWVvbmUuCi0gICAgICAgIHZvY2F0aXZl
X3NlcGFyYXRvciA9IHJlcXVlc3RbbGVuKGNvbm5lY3Rpb24uZ2V0X25pY2tuYW1lKCkpXQotICAg
ICAgICBpZiB2b2NhdGl2ZV9zZXBhcmF0b3IgaW4gWyc6JywgJywnLCAnICddOgotICAgICAgICAg
ICAgcmVxdWVzdCA9IHJlcXVlc3Quc3BsaXQodm9jYXRpdmVfc2VwYXJhdG9yLCAxKQotICAgICAg
ICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgaWYgbGVuKHJlcXVlc3QpID4g
MToKLSAgICAgICAgICAgIHJlc3BvbnNlID0gc2VsZi5fZGVsZWdhdGUuaXJjX21lc3NhZ2VfcmVj
ZWl2ZWQobmljaywgcmVxdWVzdFsxXSkKLSAgICAgICAgICAgIGlmIHJlc3BvbnNlOgotICAgICAg
ICAgICAgICAgIGNvbm5lY3Rpb24ucHJpdm1zZyhzZWxmLl9jaGFubmVsLCByZXNwb25zZSkKLQot
ICAgICMgTWVzc2FnZVB1bXBEZWxlZ2F0ZSBtZXRob2RzCi0KLSAgICBkZWYgc2NoZWR1bGUoc2Vs
ZiwgaW50ZXJ2YWwsIGNhbGxiYWNrKToKLSAgICAgICAgc2VsZi5jb25uZWN0aW9uLmV4ZWN1dGVf
ZGVsYXllZChpbnRlcnZhbCwgY2FsbGJhY2spCi0KLSAgICBkZWYgbWVzc2FnZV9hdmFpbGFibGUo
c2VsZiwgbWVzc2FnZSk6Ci0gICAgICAgIHNlbGYuY29ubmVjdGlvbi5wcml2bXNnKHNlbGYuX2No
YW5uZWwsIG1lc3NhZ2UpCi0KLSAgICBkZWYgZmluYWxfbWVzc2FnZV9kZWxpdmVyZWQoc2VsZik6
Ci0gICAgICAgIHNlbGYuZGllKCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9u
L25ldC9pcmMvaXJjcHJveHkucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vbmV0L2lyYy9pcmNwcm94eS5weQkocmV2aXNpb24gMjY5OTgwKQorKysgVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L2lyYy9pcmNwcm94eS5weQkobm9uZXhpc3RlbnQp
CkBAIC0xLDY0ICswLDAgQEAKLSMgQ29weXJpZ2h0IChjKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoK
LSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1pbXBvcnQgbG9nZ2luZwotaW1w
b3J0IHRocmVhZGluZwotCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5uZXQuaXJjLmlyY2JvdCBpbXBv
cnQgSVJDQm90Ci1mcm9tIHdlYmtpdHB5LmNvbW1vbi50aHJlYWQudGhyZWFkZWRtZXNzYWdlcXVl
dWUgaW1wb3J0IFRocmVhZGVkTWVzc2FnZVF1ZXVlCi0KLV9sb2cgPSBsb2dnaW5nLmdldExvZ2dl
cihfX25hbWVfXykKLQotCi1jbGFzcyBfSVJDVGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgotICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBtZXNzYWdlX3F1ZXVlLCBpcmNfZGVsZWdhdGUsIGlyY19ib3Qp
OgotICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLl9faW5pdF9fKHNlbGYpCi0gICAgICAgIHNlbGYu
c2V0RGFlbW9uKFRydWUpCi0gICAgICAgIHNlbGYuX21lc3NhZ2VfcXVldWUgPSBtZXNzYWdlX3F1
ZXVlCi0gICAgICAgIHNlbGYuX2lyY19kZWxlZ2F0ZSA9IGlyY19kZWxlZ2F0ZQotICAgICAgICBz
ZWxmLl9pcmNfYm90ID0gaXJjX2JvdAotCi0gICAgZGVmIHJ1bihzZWxmKToKLSAgICAgICAgYm90
ID0gc2VsZi5faXJjX2JvdChzZWxmLl9tZXNzYWdlX3F1ZXVlLCBzZWxmLl9pcmNfZGVsZWdhdGUp
Ci0gICAgICAgIGJvdC5zdGFydCgpCi0KLQotY2xhc3MgSVJDUHJveHkob2JqZWN0KToKLSAgICBk
ZWYgX19pbml0X18oc2VsZiwgaXJjX2RlbGVnYXRlLCBpcmNfYm90PUlSQ0JvdCk6Ci0gICAgICAg
IF9sb2cuaW5mbygiQ29ubmVjdGluZyB0byBJUkMiKQotICAgICAgICBzZWxmLl9tZXNzYWdlX3F1
ZXVlID0gVGhyZWFkZWRNZXNzYWdlUXVldWUoKQotICAgICAgICBzZWxmLl9jaGlsZF90aHJlYWQg
PSBfSVJDVGhyZWFkKHNlbGYuX21lc3NhZ2VfcXVldWUsIGlyY19kZWxlZ2F0ZSwgaXJjX2JvdCkK
LSAgICAgICAgc2VsZi5fY2hpbGRfdGhyZWFkLnN0YXJ0KCkKLQotICAgIGRlZiBwb3N0KHNlbGYs
IG1lc3NhZ2UpOgotICAgICAgICBzZWxmLl9tZXNzYWdlX3F1ZXVlLnBvc3QobWVzc2FnZSkKLQot
ICAgIGRlZiBkaXNjb25uZWN0KHNlbGYpOgotICAgICAgICBfbG9nLmluZm8oIkRpc2Nvbm5lY3Rp
bmcgZnJvbSBJUkMuLi4iKQotICAgICAgICBzZWxmLl9tZXNzYWdlX3F1ZXVlLnN0b3AoKQotICAg
ICAgICBzZWxmLl9jaGlsZF90aHJlYWQuam9pbigpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi9uZXQvaXJjL2lyY3Byb3h5X3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC9pcmMvaXJjcHJveHlfdW5pdHRlc3QucHkJ
KHJldmlzaW9uIDI2OTk4MCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC9p
cmMvaXJjcHJveHlfdW5pdHRlc3QucHkJKG5vbmV4aXN0ZW50KQpAQCAtMSw0OCArMCwwIEBACi0j
IENvcHlyaWdodCAoYykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
Ci0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLQotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCB1bml0dGVzdAotCi1mcm9tIHdl
YmtpdHB5LmNvbW1vbi5uZXQuaXJjLmlyY3Byb3h5IGltcG9ydCBJUkNQcm94eQotZnJvbSB3ZWJr
aXRweS50aGlyZHBhcnR5Lm1vY2sgaW1wb3J0IE1vY2sKLQotZnJvbSB3ZWJraXRjb3JlcHkgaW1w
b3J0IE91dHB1dENhcHR1cmUKLQotCi1jbGFzcyBJUkNQcm94eVRlc3QodW5pdHRlc3QuVGVzdENh
c2UpOgotICAgIGRlZiB0ZXN0X3RyaXZpYWwoc2VsZik6Ci0gICAgICAgIGRlZiBmdW4oKToKLSAg
ICAgICAgICAgIHByb3h5ID0gSVJDUHJveHkoTW9jaygpLCBNb2NrKCkpCi0gICAgICAgICAgICBw
cm94eS5wb3N0KCJoZWxsbyIpCi0gICAgICAgICAgICBwcm94eS5kaXNjb25uZWN0KCkKLQotICAg
ICAgICB3aXRoIE91dHB1dENhcHR1cmUobGV2ZWw9bG9nZ2luZy5JTkZPKSBhcyBjYXB0dXJlZDoK
LSAgICAgICAgICAgIGZ1bigpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FwdHVyZWQucm9v
dC5sb2cuZ2V0dmFsdWUoKSwgJ0Nvbm5lY3RpbmcgdG8gSVJDXG5EaXNjb25uZWN0aW5nIGZyb20g
SVJDLi4uXG4nKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L2lyYwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvaXJjCShyZXZp
c2lvbiAyNjk5ODApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvaXJjCShu
b25leGlzdGVudCkKClByb3BlcnR5IGNoYW5nZXMgb246IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL25ldC9pcmMKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVkOiBzdm46aWdub3JlCiMjIC0xICswLDAg
IyMKLSoucHljCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvaXJjL19f
aW5pdF9fLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0
eS9pcmMvX19pbml0X18ucHkJKHJldmlzaW9uIDI2OTk4MCkKKysrIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvdGhpcmRwYXJ0eS9pcmMvX19pbml0X18ucHkJKG5vbmV4aXN0ZW50KQpAQCAtMSArMCww
IEBACi0jIFJlcXVpcmVkIGZvciBQeXRob24gdG8gc2VhcmNoIHRoaXMgZGlyZWN0b3J5IGZvciBt
b2R1bGUgZmlsZXMKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9pcmMv
aXJjYm90LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0
eS9pcmMvaXJjYm90LnB5CShyZXZpc2lvbiAyNjk5ODApCisrKyBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3RoaXJkcGFydHkvaXJjL2lyY2JvdC5weQkobm9uZXhpc3RlbnQpCkBAIC0xLDQ0MiArMCww
IEBACi0jIENvcHlyaWdodCAoQykgMTk5OS0tMjAwMiAgSm9lbCBSb3NkYWhsCi0jCi0jIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYwotIyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSMgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0jCi0jIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQotIyBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotIwot
IyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCi0jIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBs
YWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyAgVVNBCi0jCi0jIEpvZWwgUm9z
ZGFobCA8am9lbEByb3NkYWhsLm5ldD4KLSMKLSMgJElkOiBpcmNib3QucHksdiAxLjIzIDIwMDgv
MDkvMTEgMDc6Mzg6MzAga2VsdHVzIEV4cCAkCi0KLSIiImlyY2JvdCAtLSBTaW1wbGUgSVJDIGJv
dCBsaWJyYXJ5LgotCi1UaGlzIG1vZHVsZSBjb250YWlucyBhIHNpbmdsZS1zZXJ2ZXIgSVJDIGJv
dCBjbGFzcyB0aGF0IGNhbiBiZSB1c2VkIHRvCi13cml0ZSBzaW1wbGVyIGJvdHMuCi0iIiIKLQot
aW1wb3J0IHN5cwotCi1pZiBzeXMudmVyc2lvbl9pbmZvID4gKDMsIDApOgotICAgIGZyb20gY29s
bGVjdGlvbnMgaW1wb3J0IFVzZXJEaWN0Ci1lbHNlOgotICAgIGZyb20gVXNlckRpY3QgaW1wb3J0
IFVzZXJEaWN0Ci0KLWZyb20gd2Via2l0cHkudGhpcmRwYXJ0eS5pcmMuaXJjbGliIGltcG9ydCBT
aW1wbGVJUkNDbGllbnQKLWZyb20gd2Via2l0cHkudGhpcmRwYXJ0eS5pcmMuaXJjbGliIGltcG9y
dCBubV90b19uLCBpcmNfbG93ZXIsIGFsbF9ldmVudHMKLWZyb20gd2Via2l0cHkudGhpcmRwYXJ0
eS5pcmMuaXJjbGliIGltcG9ydCBwYXJzZV9jaGFubmVsX21vZGVzLCBpc19jaGFubmVsCi1mcm9t
IHdlYmtpdHB5LnRoaXJkcGFydHkuaXJjLmlyY2xpYiBpbXBvcnQgU2VydmVyQ29ubmVjdGlvbkVy
cm9yCi0KLWNsYXNzIFNpbmdsZVNlcnZlcklSQ0JvdChTaW1wbGVJUkNDbGllbnQpOgotICAgICIi
IkEgc2luZ2xlLXNlcnZlciBJUkMgYm90IGNsYXNzLgotCi0gICAgVGhlIGJvdCB0cmllcyB0byBy
ZWNvbm5lY3QgaWYgaXQgaXMgZGlzY29ubmVjdGVkLgotCi0gICAgVGhlIGJvdCBrZWVwcyB0cmFj
ayBvZiB0aGUgY2hhbm5lbHMgaXQgaGFzIGpvaW5lZCwgdGhlIG90aGVyCi0gICAgY2xpZW50cyB0
aGF0IGFyZSBwcmVzZW50IGluIHRoZSBjaGFubmVscyBhbmQgd2hpY2ggb2YgdGhvc2UgdGhhdAot
ICAgIGhhdmUgb3BlcmF0b3Igb3Igdm9pY2UgbW9kZXMuICBUaGUgImRhdGFiYXNlIiBpcyBrZXB0
IGluIHRoZQotICAgIHNlbGYuY2hhbm5lbHMgYXR0cmlidXRlLCB3aGljaCBpcyBhbiBJUkNEaWN0
IG9mIENoYW5uZWxzLgotICAgICIiIgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXJ2ZXJfbGlz
dCwgbmlja25hbWUsIHJlYWxuYW1lLCByZWNvbm5lY3Rpb25faW50ZXJ2YWw9NjApOgotICAgICAg
ICAiIiJDb25zdHJ1Y3RvciBmb3IgU2luZ2xlU2VydmVySVJDQm90IG9iamVjdHMuCi0KLSAgICAg
ICAgQXJndW1lbnRzOgotCi0gICAgICAgICAgICBzZXJ2ZXJfbGlzdCAtLSBBIGxpc3Qgb2YgdHVw
bGVzIChzZXJ2ZXIsIHBvcnQpIHRoYXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmlu
ZXMgd2hpY2ggc2VydmVycyB0aGUgYm90IHNob3VsZCB0cnkgdG8KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbm5lY3QgdG8uCi0KLSAgICAgICAgICAgIG5pY2tuYW1lIC0tIFRoZSBib3Qn
cyBuaWNrbmFtZS4KLQotICAgICAgICAgICAgcmVhbG5hbWUgLS0gVGhlIGJvdCdzIHJlYWxuYW1l
LgotCi0gICAgICAgICAgICByZWNvbm5lY3Rpb25faW50ZXJ2YWwgLS0gSG93IGxvbmcgdGhlIGJv
dCBzaG91bGQgd2FpdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9y
ZSB0cnlpbmcgdG8gcmVjb25uZWN0LgotCi0gICAgICAgICAgICBkY2NfY29ubmVjdGlvbnMgLS0g
QSBsaXN0IG9mIGluaXRpYXRlZC9hY2NlcHRlZCBEQ0MKLSAgICAgICAgICAgIGNvbm5lY3Rpb25z
LgotICAgICAgICAiIiIKLQotICAgICAgICBTaW1wbGVJUkNDbGllbnQuX19pbml0X18oc2VsZikK
LSAgICAgICAgc2VsZi5jaGFubmVscyA9IElSQ0RpY3QoKQotICAgICAgICBzZWxmLnNlcnZlcl9s
aXN0ID0gc2VydmVyX2xpc3QKLSAgICAgICAgaWYgbm90IHJlY29ubmVjdGlvbl9pbnRlcnZhbCBv
ciByZWNvbm5lY3Rpb25faW50ZXJ2YWwgPCAwOgotICAgICAgICAgICAgcmVjb25uZWN0aW9uX2lu
dGVydmFsID0gMioqMzEKLSAgICAgICAgc2VsZi5yZWNvbm5lY3Rpb25faW50ZXJ2YWwgPSByZWNv
bm5lY3Rpb25faW50ZXJ2YWwKLQotICAgICAgICBzZWxmLl9uaWNrbmFtZSA9IG5pY2tuYW1lCi0g
ICAgICAgIHNlbGYuX3JlYWxuYW1lID0gcmVhbG5hbWUKLSAgICAgICAgZm9yIGkgaW4gWyJkaXNj
b25uZWN0IiwgImpvaW4iLCAia2ljayIsICJtb2RlIiwKLSAgICAgICAgICAgICAgICAgICJuYW1y
ZXBseSIsICJuaWNrIiwgInBhcnQiLCAicXVpdCJdOgotICAgICAgICAgICAgc2VsZi5jb25uZWN0
aW9uLmFkZF9nbG9iYWxfaGFuZGxlcihpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnZXRhdHRyKHNlbGYsICJfb25fIiArIGkpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTApCi0gICAgZGVmIF9jb25uZWN0
ZWRfY2hlY2tlcihzZWxmKToKLSAgICAgICAgIiIiW0ludGVybmFsXSIiIgotICAgICAgICBpZiBu
b3Qgc2VsZi5jb25uZWN0aW9uLmlzX2Nvbm5lY3RlZCgpOgotICAgICAgICAgICAgc2VsZi5jb25u
ZWN0aW9uLmV4ZWN1dGVfZGVsYXllZChzZWxmLnJlY29ubmVjdGlvbl9pbnRlcnZhbCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY29ubmVjdGVkX2No
ZWNrZXIpCi0gICAgICAgICAgICBzZWxmLmp1bXBfc2VydmVyKCkKLQotICAgIGRlZiBfY29ubmVj
dChzZWxmKToKLSAgICAgICAgIiIiW0ludGVybmFsXSIiIgotICAgICAgICBwYXNzd29yZCA9IE5v
bmUKLSAgICAgICAgaWYgbGVuKHNlbGYuc2VydmVyX2xpc3RbMF0pID4gMjoKLSAgICAgICAgICAg
IHBhc3N3b3JkID0gc2VsZi5zZXJ2ZXJfbGlzdFswXVsyXQotICAgICAgICB0cnk6Ci0gICAgICAg
ICAgICBzZWxmLmNvbm5lY3Qoc2VsZi5zZXJ2ZXJfbGlzdFswXVswXSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxmLnNlcnZlcl9saXN0WzBdWzFdLAotICAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGYuX25pY2tuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkLAot
ICAgICAgICAgICAgICAgICAgICAgICAgIGlyY25hbWU9c2VsZi5fcmVhbG5hbWUpCi0gICAgICAg
IGV4Y2VwdCBTZXJ2ZXJDb25uZWN0aW9uRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0KLSAgICBk
ZWYgX29uX2Rpc2Nvbm5lY3Qoc2VsZiwgYywgZSk6Ci0gICAgICAgICIiIltJbnRlcm5hbF0iIiIK
LSAgICAgICAgc2VsZi5jaGFubmVscyA9IElSQ0RpY3QoKQotICAgICAgICBzZWxmLmNvbm5lY3Rp
b24uZXhlY3V0ZV9kZWxheWVkKHNlbGYucmVjb25uZWN0aW9uX2ludGVydmFsLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2Nvbm5lY3RlZF9jaGVja2VyKQot
Ci0gICAgZGVmIF9vbl9qb2luKHNlbGYsIGMsIGUpOgotICAgICAgICAiIiJbSW50ZXJuYWxdIiIi
Ci0gICAgICAgIGNoID0gZS50YXJnZXQoKQotICAgICAgICBuaWNrID0gbm1fdG9fbihlLnNvdXJj
ZSgpKQotICAgICAgICBpZiBuaWNrID09IGMuZ2V0X25pY2tuYW1lKCk6Ci0gICAgICAgICAgICBz
ZWxmLmNoYW5uZWxzW2NoXSA9IENoYW5uZWwoKQotICAgICAgICBzZWxmLmNoYW5uZWxzW2NoXS5h
ZGRfdXNlcihuaWNrKQotCi0gICAgZGVmIF9vbl9raWNrKHNlbGYsIGMsIGUpOgotICAgICAgICAi
IiJbSW50ZXJuYWxdIiIiCi0gICAgICAgIG5pY2sgPSBlLmFyZ3VtZW50cygpWzBdCi0gICAgICAg
IGNoYW5uZWwgPSBlLnRhcmdldCgpCi0KLSAgICAgICAgaWYgbmljayA9PSBjLmdldF9uaWNrbmFt
ZSgpOgotICAgICAgICAgICAgZGVsIHNlbGYuY2hhbm5lbHNbY2hhbm5lbF0KLSAgICAgICAgZWxz
ZToKLSAgICAgICAgICAgIHNlbGYuY2hhbm5lbHNbY2hhbm5lbF0ucmVtb3ZlX3VzZXIobmljaykK
LQotICAgIGRlZiBfb25fbW9kZShzZWxmLCBjLCBlKToKLSAgICAgICAgIiIiW0ludGVybmFsXSIi
IgotICAgICAgICBtb2RlcyA9IHBhcnNlX2NoYW5uZWxfbW9kZXMoIiAiLmpvaW4oZS5hcmd1bWVu
dHMoKSkpCi0gICAgICAgIHQgPSBlLnRhcmdldCgpCi0gICAgICAgIGlmIGlzX2NoYW5uZWwodCk6
Ci0gICAgICAgICAgICBjaCA9IHNlbGYuY2hhbm5lbHNbdF0KLSAgICAgICAgICAgIGZvciBtb2Rl
IGluIG1vZGVzOgotICAgICAgICAgICAgICAgIGlmIG1vZGVbMF0gPT0gIisiOgotICAgICAgICAg
ICAgICAgICAgICBmID0gY2guc2V0X21vZGUKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAg
ICAgICAgICAgICAgICBmID0gY2guY2xlYXJfbW9kZQotICAgICAgICAgICAgICAgIGYobW9kZVsx
XSwgbW9kZVsyXSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgTW9kZSBvbiBzZWxmLi4u
IFhYWAotICAgICAgICAgICAgcGFzcwotCi0gICAgZGVmIF9vbl9uYW1yZXBseShzZWxmLCBjLCBl
KToKLSAgICAgICAgIiIiW0ludGVybmFsXSIiIgotCi0gICAgICAgICMgZS5hcmd1bWVudHMoKVsw
XSA9PSAiQCIgZm9yIHNlY3JldCBjaGFubmVscywKLSAgICAgICAgIyAgICAgICAgICAgICAgICAg
ICAgICIqIiBmb3IgcHJpdmF0ZSBjaGFubmVscywKLSAgICAgICAgIyAgICAgICAgICAgICAgICAg
ICAgICI9IiBmb3Igb3RoZXJzIChwdWJsaWMgY2hhbm5lbHMpCi0gICAgICAgICMgZS5hcmd1bWVu
dHMoKVsxXSA9PSBjaGFubmVsCi0gICAgICAgICMgZS5hcmd1bWVudHMoKVsyXSA9PSBuaWNrIGxp
c3QKLQotICAgICAgICBjaCA9IGUuYXJndW1lbnRzKClbMV0KLSAgICAgICAgZm9yIG5pY2sgaW4g
ZS5hcmd1bWVudHMoKVsyXS5zcGxpdCgpOgotICAgICAgICAgICAgaWYgbmlja1swXSA9PSAiQCI6
Ci0gICAgICAgICAgICAgICAgbmljayA9IG5pY2tbMTpdCi0gICAgICAgICAgICAgICAgc2VsZi5j
aGFubmVsc1tjaF0uc2V0X21vZGUoIm8iLCBuaWNrKQotICAgICAgICAgICAgZWxpZiBuaWNrWzBd
ID09ICIrIjoKLSAgICAgICAgICAgICAgICBuaWNrID0gbmlja1sxOl0KLSAgICAgICAgICAgICAg
ICBzZWxmLmNoYW5uZWxzW2NoXS5zZXRfbW9kZSgidiIsIG5pY2spCi0gICAgICAgICAgICBzZWxm
LmNoYW5uZWxzW2NoXS5hZGRfdXNlcihuaWNrKQotCi0gICAgZGVmIF9vbl9uaWNrKHNlbGYsIGMs
IGUpOgotICAgICAgICAiIiJbSW50ZXJuYWxdIiIiCi0gICAgICAgIGJlZm9yZSA9IG5tX3RvX24o
ZS5zb3VyY2UoKSkKLSAgICAgICAgYWZ0ZXIgPSBlLnRhcmdldCgpCi0gICAgICAgIGZvciBjaCBp
biBzZWxmLmNoYW5uZWxzLnZhbHVlcygpOgotICAgICAgICAgICAgaWYgY2guaGFzX3VzZXIoYmVm
b3JlKToKLSAgICAgICAgICAgICAgICBjaC5jaGFuZ2VfbmljayhiZWZvcmUsIGFmdGVyKQotCi0g
ICAgZGVmIF9vbl9wYXJ0KHNlbGYsIGMsIGUpOgotICAgICAgICAiIiJbSW50ZXJuYWxdIiIiCi0g
ICAgICAgIG5pY2sgPSBubV90b19uKGUuc291cmNlKCkpCi0gICAgICAgIGNoYW5uZWwgPSBlLnRh
cmdldCgpCi0KLSAgICAgICAgaWYgbmljayA9PSBjLmdldF9uaWNrbmFtZSgpOgotICAgICAgICAg
ICAgZGVsIHNlbGYuY2hhbm5lbHNbY2hhbm5lbF0KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAg
IHNlbGYuY2hhbm5lbHNbY2hhbm5lbF0ucmVtb3ZlX3VzZXIobmljaykKLQotICAgIGRlZiBfb25f
cXVpdChzZWxmLCBjLCBlKToKLSAgICAgICAgIiIiW0ludGVybmFsXSIiIgotICAgICAgICBuaWNr
ID0gbm1fdG9fbihlLnNvdXJjZSgpKQotICAgICAgICBmb3IgY2ggaW4gc2VsZi5jaGFubmVscy52
YWx1ZXMoKToKLSAgICAgICAgICAgIGlmIGNoLmhhc191c2VyKG5pY2spOgotICAgICAgICAgICAg
ICAgIGNoLnJlbW92ZV91c2VyKG5pY2spCi0KLSAgICBkZWYgZGllKHNlbGYsIG1zZz0iQnllLCBj
cnVlbCB3b3JsZCEiKToKLSAgICAgICAgIiIiTGV0IHRoZSBib3QgZGllLgotCi0gICAgICAgIEFy
Z3VtZW50czoKLQotICAgICAgICAgICAgbXNnIC0tIFF1aXQgbWVzc2FnZS4KLSAgICAgICAgIiIi
Ci0KLSAgICAgICAgc2VsZi5jb25uZWN0aW9uLmRpc2Nvbm5lY3QobXNnKQotICAgICAgICBzeXMu
ZXhpdCgwKQotCi0gICAgZGVmIGRpc2Nvbm5lY3Qoc2VsZiwgbXNnPSJJJ2xsIGJlIGJhY2shIik6
Ci0gICAgICAgICIiIkRpc2Nvbm5lY3QgdGhlIGJvdC4KLQotICAgICAgICBUaGUgYm90IHdpbGwg
dHJ5IHRvIHJlY29ubmVjdCBhZnRlciBhIHdoaWxlLgotCi0gICAgICAgIEFyZ3VtZW50czoKLQot
ICAgICAgICAgICAgbXNnIC0tIFF1aXQgbWVzc2FnZS4KLSAgICAgICAgIiIiCi0gICAgICAgIHNl
bGYuY29ubmVjdGlvbi5kaXNjb25uZWN0KG1zZykKLQotICAgIGRlZiBnZXRfdmVyc2lvbihzZWxm
KToKLSAgICAgICAgIiIiUmV0dXJucyB0aGUgYm90IHZlcnNpb24uCi0KLSAgICAgICAgVXNlZCB3
aGVuIGFuc3dlcmluZyBhIENUQ1AgVkVSU0lPTiByZXF1ZXN0LgotICAgICAgICAiIiIKLSAgICAg
ICAgcmV0dXJuICJpcmNib3QucHkgYnkgSm9lbCBSb3NkYWhsIDxqb2VsQHJvc2RhaGwubmV0PiIK
LQotICAgIGRlZiBqdW1wX3NlcnZlcihzZWxmLCBtc2c9IkNoYW5naW5nIHNlcnZlcnMiKToKLSAg
ICAgICAgIiIiQ29ubmVjdCB0byBhIG5ldyBzZXJ2ZXIsIHBvc3NpYmx5IGRpc2Nvbm5lY3Rpbmcg
ZnJvbSB0aGUgY3VycmVudC4KLQotICAgICAgICBUaGUgYm90IHdpbGwgc2tpcCB0byBuZXh0IHNl
cnZlciBpbiB0aGUgc2VydmVyX2xpc3QgZWFjaCB0aW1lCi0gICAgICAgIGp1bXBfc2VydmVyIGlz
IGNhbGxlZC4KLSAgICAgICAgIiIiCi0gICAgICAgIGlmIHNlbGYuY29ubmVjdGlvbi5pc19jb25u
ZWN0ZWQoKToKLSAgICAgICAgICAgIHNlbGYuY29ubmVjdGlvbi5kaXNjb25uZWN0KG1zZykKLQot
ICAgICAgICBzZWxmLnNlcnZlcl9saXN0LmFwcGVuZChzZWxmLnNlcnZlcl9saXN0LnBvcCgwKSkK
LSAgICAgICAgc2VsZi5fY29ubmVjdCgpCi0KLSAgICBkZWYgb25fY3RjcChzZWxmLCBjLCBlKToK
LSAgICAgICAgIiIiRGVmYXVsdCBoYW5kbGVyIGZvciBjdGNwIGV2ZW50cy4KLQotICAgICAgICBS
ZXBsaWVzIHRvIFZFUlNJT04gYW5kIFBJTkcgcmVxdWVzdHMgYW5kIHJlbGF5cyBEQ0MgcmVxdWVz
dHMKLSAgICAgICAgdG8gdGhlIG9uX2RjY2NoYXQgbWV0aG9kLgotICAgICAgICAiIiIKLSAgICAg
ICAgaWYgZS5hcmd1bWVudHMoKVswXSA9PSAiVkVSU0lPTiI6Ci0gICAgICAgICAgICBjLmN0Y3Bf
cmVwbHkobm1fdG9fbihlLnNvdXJjZSgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiVkVS
U0lPTiAiICsgc2VsZi5nZXRfdmVyc2lvbigpKQotICAgICAgICBlbGlmIGUuYXJndW1lbnRzKClb
MF0gPT0gIlBJTkciOgotICAgICAgICAgICAgaWYgbGVuKGUuYXJndW1lbnRzKCkpID4gMToKLSAg
ICAgICAgICAgICAgICBjLmN0Y3BfcmVwbHkobm1fdG9fbihlLnNvdXJjZSgpKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIlBJTkcgIiArIGUuYXJndW1lbnRzKClbMV0pCi0gICAgICAg
IGVsaWYgZS5hcmd1bWVudHMoKVswXSA9PSAiRENDIiBhbmQgZS5hcmd1bWVudHMoKVsxXS5zcGxp
dCgiICIsIDEpWzBdID09ICJDSEFUIjoKLSAgICAgICAgICAgIHNlbGYub25fZGNjY2hhdChjLCBl
KQotCi0gICAgZGVmIG9uX2RjY2NoYXQoc2VsZiwgYywgZSk6Ci0gICAgICAgIHBhc3MKLQotICAg
IGRlZiBzdGFydChzZWxmKToKLSAgICAgICAgIiIiU3RhcnQgdGhlIGJvdC4iIiIKLSAgICAgICAg
c2VsZi5fY29ubmVjdCgpCi0gICAgICAgIFNpbXBsZUlSQ0NsaWVudC5zdGFydChzZWxmKQotCi0K
LWNsYXNzIElSQ0RpY3Q6Ci0gICAgIiIiQSBkaWN0aW9uYXJ5IHN1aXRhYmxlIGZvciBzdG9yaW5n
IElSQy1yZWxhdGVkIHRoaW5ncy4KLQotICAgIERpY3Rpb25hcnkga2V5cyBhIGFuZCBiIGFyZSBj
b25zaWRlcmVkIGVxdWFsIGlmIGFuZCBvbmx5IGlmCi0gICAgaXJjX2xvd2VyKGEpID09IGlyY19s
b3dlcihiKQotCi0gICAgT3RoZXJ3aXNlLCBpdCBzaG91bGQgYmVoYXZlIGV4YWN0bHkgYXMgYSBu
b3JtYWwgZGljdGlvbmFyeS4KLSAgICAiIiIKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkaWN0
PU5vbmUpOgotICAgICAgICBzZWxmLmRhdGEgPSB7fQotICAgICAgICBzZWxmLmNhbm9uX2tleXMg
PSB7fSAgIyBDYW5vbmljYWwga2V5cwotICAgICAgICBpZiBkaWN0IGlzIG5vdCBOb25lOgotICAg
ICAgICAgICAgc2VsZi51cGRhdGUoZGljdCkKLSAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAg
ICAgIHJldHVybiByZXByKHNlbGYuZGF0YSkKLSAgICBkZWYgX19jbXBfXyhzZWxmLCBkaWN0KToK
LSAgICAgICAgaWYgaXNpbnN0YW5jZShkaWN0LCBJUkNEaWN0KToKLSAgICAgICAgICAgIHJldHVy
biBjbXAoc2VsZi5kYXRhLCBkaWN0LmRhdGEpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBy
ZXR1cm4gY21wKHNlbGYuZGF0YSwgZGljdCkKLSAgICBkZWYgX19sZW5fXyhzZWxmKToKLSAgICAg
ICAgcmV0dXJuIGxlbihzZWxmLmRhdGEpCi0gICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6
Ci0gICAgICAgIHJldHVybiBzZWxmLmRhdGFbc2VsZi5jYW5vbl9rZXlzW2lyY19sb3dlcihrZXkp
XV0KLSAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwga2V5LCBpdGVtKToKLSAgICAgICAgaWYga2V5
IGluIHNlbGY6Ci0gICAgICAgICAgICBkZWwgc2VsZltrZXldCi0gICAgICAgIHNlbGYuZGF0YVtr
ZXldID0gaXRlbQotICAgICAgICBzZWxmLmNhbm9uX2tleXNbaXJjX2xvd2VyKGtleSldID0ga2V5
Ci0gICAgZGVmIF9fZGVsaXRlbV9fKHNlbGYsIGtleSk6Ci0gICAgICAgIGNrID0gaXJjX2xvd2Vy
KGtleSkKLSAgICAgICAgZGVsIHNlbGYuZGF0YVtzZWxmLmNhbm9uX2tleXNbY2tdXQotICAgICAg
ICBkZWwgc2VsZi5jYW5vbl9rZXlzW2NrXQotICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKLSAgICAg
ICAgcmV0dXJuIGl0ZXIoc2VsZi5kYXRhKQotICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwga2V5
KToKLSAgICAgICAgcmV0dXJuIHNlbGYuaGFzX2tleShrZXkpCi0gICAgZGVmIGNsZWFyKHNlbGYp
OgotICAgICAgICBzZWxmLmRhdGEuY2xlYXIoKQotICAgICAgICBzZWxmLmNhbm9uX2tleXMuY2xl
YXIoKQotICAgIGRlZiBjb3B5KHNlbGYpOgotICAgICAgICBpZiBzZWxmLl9fY2xhc3NfXyBpcyBV
c2VyRGljdDoKLSAgICAgICAgICAgIHJldHVybiBVc2VyRGljdChzZWxmLmRhdGEpCi0gICAgICAg
IGltcG9ydCBjb3B5Ci0gICAgICAgIHJldHVybiBjb3B5LmNvcHkoc2VsZikKLSAgICBkZWYga2V5
cyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuZGF0YS5rZXlzKCkKLSAgICBkZWYgaXRlbXMo
c2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLmRhdGEuaXRlbXMoKQotICAgIGRlZiB2YWx1ZXMo
c2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLmRhdGEudmFsdWVzKCkKLSAgICBkZWYgaGFzX2tl
eShzZWxmLCBrZXkpOgotICAgICAgICByZXR1cm4gaXJjX2xvd2VyKGtleSkgaW4gc2VsZi5jYW5v
bl9rZXlzCi0gICAgZGVmIHVwZGF0ZShzZWxmLCBkaWN0KToKLSAgICAgICAgZm9yIGssIHYgaW4g
ZGljdC5pdGVtcygpOgotICAgICAgICAgICAgc2VsZi5kYXRhW2tdID0gdgotICAgIGRlZiBnZXQo
c2VsZiwga2V5LCBmYWlsb2JqPU5vbmUpOgotICAgICAgICByZXR1cm4gc2VsZi5kYXRhLmdldChr
ZXksIGZhaWxvYmopCi0KLQotY2xhc3MgQ2hhbm5lbDoKLSAgICAiIiJBIGNsYXNzIGZvciBrZWVw
aW5nIGluZm9ybWF0aW9uIGFib3V0IGFuIElSQyBjaGFubmVsLgotCi0gICAgVGhpcyBjbGFzcyBj
YW4gYmUgaW1wcm92ZWQgYSBsb3QuCi0gICAgIiIiCi0KLSAgICBkZWYgX19pbml0X18oc2VsZik6
Ci0gICAgICAgIHNlbGYudXNlcmRpY3QgPSBJUkNEaWN0KCkKLSAgICAgICAgc2VsZi5vcGVyZGlj
dCA9IElSQ0RpY3QoKQotICAgICAgICBzZWxmLnZvaWNlZGRpY3QgPSBJUkNEaWN0KCkKLSAgICAg
ICAgc2VsZi5tb2RlcyA9IHt9Ci0KLSAgICBkZWYgdXNlcnMoc2VsZik6Ci0gICAgICAgICIiIlJl
dHVybnMgYW4gdW5zb3J0ZWQgbGlzdCBvZiB0aGUgY2hhbm5lbCdzIHVzZXJzLiIiIgotICAgICAg
ICByZXR1cm4gc2VsZi51c2VyZGljdC5rZXlzKCkKLQotICAgIGRlZiBvcGVycyhzZWxmKToKLSAg
ICAgICAgIiIiUmV0dXJucyBhbiB1bnNvcnRlZCBsaXN0IG9mIHRoZSBjaGFubmVsJ3Mgb3BlcmF0
b3JzLiIiIgotICAgICAgICByZXR1cm4gc2VsZi5vcGVyZGljdC5rZXlzKCkKLQotICAgIGRlZiB2
b2ljZWQoc2VsZik6Ci0gICAgICAgICIiIlJldHVybnMgYW4gdW5zb3J0ZWQgbGlzdCBvZiB0aGUg
cGVyc29ucyB0aGF0IGhhdmUgdm9pY2UKLSAgICAgICAgbW9kZSBzZXQgaW4gdGhlIGNoYW5uZWwu
IiIiCi0gICAgICAgIHJldHVybiBzZWxmLnZvaWNlZGRpY3Qua2V5cygpCi0KLSAgICBkZWYgaGFz
X3VzZXIoc2VsZiwgbmljayk6Ci0gICAgICAgICIiIkNoZWNrIHdoZXRoZXIgdGhlIGNoYW5uZWwg
aGFzIGEgdXNlci4iIiIKLSAgICAgICAgcmV0dXJuIG5pY2sgaW4gc2VsZi51c2VyZGljdAotCi0g
ICAgZGVmIGlzX29wZXIoc2VsZiwgbmljayk6Ci0gICAgICAgICIiIkNoZWNrIHdoZXRoZXIgYSB1
c2VyIGhhcyBvcGVyYXRvciBzdGF0dXMgaW4gdGhlIGNoYW5uZWwuIiIiCi0gICAgICAgIHJldHVy
biBuaWNrIGluIHNlbGYub3BlcmRpY3QKLQotICAgIGRlZiBpc192b2ljZWQoc2VsZiwgbmljayk6
Ci0gICAgICAgICIiIkNoZWNrIHdoZXRoZXIgYSB1c2VyIGhhcyB2b2ljZSBtb2RlIHNldCBpbiB0
aGUgY2hhbm5lbC4iIiIKLSAgICAgICAgcmV0dXJuIG5pY2sgaW4gc2VsZi52b2ljZWRkaWN0Ci0K
LSAgICBkZWYgYWRkX3VzZXIoc2VsZiwgbmljayk6Ci0gICAgICAgIHNlbGYudXNlcmRpY3Rbbmlj
a10gPSAxCi0KLSAgICBkZWYgcmVtb3ZlX3VzZXIoc2VsZiwgbmljayk6Ci0gICAgICAgIGZvciBk
IGluIHNlbGYudXNlcmRpY3QsIHNlbGYub3BlcmRpY3QsIHNlbGYudm9pY2VkZGljdDoKLSAgICAg
ICAgICAgIGlmIG5pY2sgaW4gZDoKLSAgICAgICAgICAgICAgICBkZWwgZFtuaWNrXQotCi0gICAg
ZGVmIGNoYW5nZV9uaWNrKHNlbGYsIGJlZm9yZSwgYWZ0ZXIpOgotICAgICAgICBzZWxmLnVzZXJk
aWN0W2FmdGVyXSA9IDEKLSAgICAgICAgZGVsIHNlbGYudXNlcmRpY3RbYmVmb3JlXQotICAgICAg
ICBpZiBiZWZvcmUgaW4gc2VsZi5vcGVyZGljdDoKLSAgICAgICAgICAgIHNlbGYub3BlcmRpY3Rb
YWZ0ZXJdID0gMQotICAgICAgICAgICAgZGVsIHNlbGYub3BlcmRpY3RbYmVmb3JlXQotICAgICAg
ICBpZiBiZWZvcmUgaW4gc2VsZi52b2ljZWRkaWN0OgotICAgICAgICAgICAgc2VsZi52b2ljZWRk
aWN0W2FmdGVyXSA9IDEKLSAgICAgICAgICAgIGRlbCBzZWxmLnZvaWNlZGRpY3RbYmVmb3JlXQot
Ci0gICAgZGVmIHNldF9tb2RlKHNlbGYsIG1vZGUsIHZhbHVlPU5vbmUpOgotICAgICAgICAiIiJT
ZXQgbW9kZSBvbiB0aGUgY2hhbm5lbC4KLQotICAgICAgICBBcmd1bWVudHM6Ci0KLSAgICAgICAg
ICAgIG1vZGUgLS0gVGhlIG1vZGUgKGEgc2luZ2xlLWNoYXJhY3RlciBzdHJpbmcpLgotCi0gICAg
ICAgICAgICB2YWx1ZSAtLSBWYWx1ZQotICAgICAgICAiIiIKLSAgICAgICAgaWYgbW9kZSA9PSAi
byI6Ci0gICAgICAgICAgICBzZWxmLm9wZXJkaWN0W3ZhbHVlXSA9IDEKLSAgICAgICAgZWxpZiBt
b2RlID09ICJ2IjoKLSAgICAgICAgICAgIHNlbGYudm9pY2VkZGljdFt2YWx1ZV0gPSAxCi0gICAg
ICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLm1vZGVzW21vZGVdID0gdmFsdWUKLQotICAgIGRl
ZiBjbGVhcl9tb2RlKHNlbGYsIG1vZGUsIHZhbHVlPU5vbmUpOgotICAgICAgICAiIiJDbGVhciBt
b2RlIG9uIHRoZSBjaGFubmVsLgotCi0gICAgICAgIEFyZ3VtZW50czoKLQotICAgICAgICAgICAg
bW9kZSAtLSBUaGUgbW9kZSAoYSBzaW5nbGUtY2hhcmFjdGVyIHN0cmluZykuCi0KLSAgICAgICAg
ICAgIHZhbHVlIC0tIFZhbHVlCi0gICAgICAgICIiIgotICAgICAgICB0cnk6Ci0gICAgICAgICAg
ICBpZiBtb2RlID09ICJvIjoKLSAgICAgICAgICAgICAgICBkZWwgc2VsZi5vcGVyZGljdFt2YWx1
ZV0KLSAgICAgICAgICAgIGVsaWYgbW9kZSA9PSAidiI6Ci0gICAgICAgICAgICAgICAgZGVsIHNl
bGYudm9pY2VkZGljdFt2YWx1ZV0KLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAg
ZGVsIHNlbGYubW9kZXNbbW9kZV0KLSAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAg
ICAgcGFzcwotCi0gICAgZGVmIGhhc19tb2RlKHNlbGYsIG1vZGUpOgotICAgICAgICByZXR1cm4g
bW9kZSBpbiBzZWxmLm1vZGVzCi0KLSAgICBkZWYgaXNfbW9kZXJhdGVkKHNlbGYpOgotICAgICAg
ICByZXR1cm4gc2VsZi5oYXNfbW9kZSgibSIpCi0KLSAgICBkZWYgaXNfc2VjcmV0KHNlbGYpOgot
ICAgICAgICByZXR1cm4gc2VsZi5oYXNfbW9kZSgicyIpCi0KLSAgICBkZWYgaXNfcHJvdGVjdGVk
KHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5oYXNfbW9kZSgicCIpCi0KLSAgICBkZWYgaGFz
X3RvcGljX2xvY2soc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLmhhc19tb2RlKCJ0IikKLQot
ICAgIGRlZiBpc19pbnZpdGVfb25seShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuaGFzX21v
ZGUoImkiKQotCi0gICAgZGVmIGhhc19hbGxvd19leHRlcm5hbF9tZXNzYWdlcyhzZWxmKToKLSAg
ICAgICAgcmV0dXJuIHNlbGYuaGFzX21vZGUoIm4iKQotCi0gICAgZGVmIGhhc19saW1pdChzZWxm
KToKLSAgICAgICAgcmV0dXJuIHNlbGYuaGFzX21vZGUoImwiKQotCi0gICAgZGVmIGxpbWl0KHNl
bGYpOgotICAgICAgICBpZiBzZWxmLmhhc19saW1pdCgpOgotICAgICAgICAgICAgcmV0dXJuIHNl
bGYubW9kZXNbbF0KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBOb25lCi0KLSAg
ICBkZWYgaGFzX2tleShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuaGFzX21vZGUoImsiKQot
Ci0gICAgZGVmIGtleShzZWxmKToKLSAgICAgICAgaWYgc2VsZi5oYXNfa2V5KCk6Ci0gICAgICAg
ICAgICByZXR1cm4gc2VsZi5tb2Rlc1siayJdCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBy
ZXR1cm4gTm9uZQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L2lyYy9p
cmNsaWIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5
L2lyYy9pcmNsaWIucHkJKHJldmlzaW9uIDI2OTk4MCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvdGhpcmRwYXJ0eS9pcmMvaXJjbGliLnB5CShub25leGlzdGVudCkKQEAgLTEsMTU2MCArMCww
IEBACi0jIENvcHlyaWdodCAoQykgMTk5OS0tMjAwMiAgSm9lbCBSb3NkYWhsCi0jCi0jIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYwotIyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSMgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0jCi0jIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQotIyBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotIwot
IyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCi0jIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBs
YWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyAgVVNBCi0jCi0jIGtlbHR1cyA8
a2VsdHVzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLSMKLSMgJElkOiBpcmNsaWIucHksdiAxLjQ3
IDIwMDgvMDkvMjUgMjI6MDA6NTkga2VsdHVzIEV4cCAkCi0KLSIiImlyY2xpYiAtLSBJbnRlcm5l
dCBSZWxheSBDaGF0IChJUkMpIHByb3RvY29sIGNsaWVudCBsaWJyYXJ5LgotCi1UaGlzIGxpYnJh
cnkgaXMgaW50ZW5kZWQgdG8gZW5jYXBzdWxhdGUgdGhlIElSQyBwcm90b2NvbCBhdCBhIHF1aXRl
Ci1sb3cgbGV2ZWwuICBJdCBwcm92aWRlcyBhbiBldmVudC1kcml2ZW4gSVJDIGNsaWVudCBmcmFt
ZXdvcmsuICBJdCBoYXMKLWEgZmFpcmx5IHRob3JvdWdoIHN1cHBvcnQgZm9yIHRoZSBiYXNpYyBJ
UkMgcHJvdG9jb2wsIENUQ1AsIERDQyBjaGF0LAotYnV0IERDQyBmaWxlIHRyYW5zZmVycyBpcyBu
b3QgeWV0IHN1cHBvcnRlZC4KLQotSW4gb3JkZXIgdG8gdW5kZXJzdGFuZCBob3cgdG8gbWFrZSBh
biBJUkMgY2xpZW50LCBJJ20gYWZyYWlkIHlvdSBtb3JlCi1vciBsZXNzIG11c3QgdW5kZXJzdGFu
ZCB0aGUgSVJDIHNwZWNpZmljYXRpb25zLiAgVGhleSBhcmUgYXZhaWxhYmxlCi1oZXJlOiBbSVJD
IHNwZWNpZmljYXRpb25zXS4KLQotVGhlIG1haW4gZmVhdHVyZXMgb2YgdGhlIElSQyBjbGllbnQg
ZnJhbWV3b3JrIGFyZToKLQotICAqIEFic3RyYWN0aW9uIG9mIHRoZSBJUkMgcHJvdG9jb2wuCi0g
ICogSGFuZGxlcyBtdWx0aXBsZSBzaW11bHRhbmVvdXMgSVJDIHNlcnZlciBjb25uZWN0aW9ucy4K
LSAgKiBIYW5kbGVzIHNlcnZlciBQT05HaW5nIHRyYW5zcGFyZW50bHkuCi0gICogTWVzc2FnZXMg
dG8gdGhlIElSQyBzZXJ2ZXIgYXJlIGRvbmUgYnkgY2FsbGluZyBtZXRob2RzIG9uIGFuIElSQwot
ICAgIGNvbm5lY3Rpb24gb2JqZWN0LgotICAqIE1lc3NhZ2VzIGZyb20gYW4gSVJDIHNlcnZlciB0
cmlnZ2VycyBldmVudHMsIHdoaWNoIGNhbiBiZSBjYXVnaHQKLSAgICBieSBldmVudCBoYW5kbGVy
cy4KLSAgKiBSZWFkaW5nIGZyb20gYW5kIHdyaXRpbmcgdG8gSVJDIHNlcnZlciBzb2NrZXRzIGFy
ZSBub3JtYWxseSBkb25lCi0gICAgYnkgYW4gaW50ZXJuYWwgc2VsZWN0KCkgbG9vcCwgYnV0IHRo
ZSBzZWxlY3QoKWluZyBtYXkgYmUgZG9uZSBieQotICAgIGFuIGV4dGVybmFsIG1haW4gbG9vcC4K
LSAgKiBGdW5jdGlvbnMgY2FuIGJlIHJlZ2lzdGVyZWQgdG8gZXhlY3V0ZSBhdCBzcGVjaWZpZWQg
dGltZXMgYnkgdGhlCi0gICAgZXZlbnQtbG9vcC4KLSAgKiBEZWNvZGVzIENUQ1AgdGFnZ2luZyBj
b3JyZWN0bHkgKGhvcGVmdWxseSk7IEkgaGF2ZW4ndCBzZWVuIGFueQotICAgIG90aGVyIElSQyBj
bGllbnQgaW1wbGVtZW50YXRpb24gdGhhdCBoYW5kbGVzIHRoZSBDVENQCi0gICAgc3BlY2lmaWNh
dGlvbiBzdWJ0aWx0aWVzLgotICAqIEEga2luZCBvZiBzaW1wbGUsIHNpbmdsZS1zZXJ2ZXIsIG9i
amVjdC1vcmllbnRlZCBJUkMgY2xpZW50IGNsYXNzCi0gICAgdGhhdCBkaXNwYXRjaGVzIGV2ZW50
cyB0byBpbnN0YW5jZSBtZXRob2RzIGlzIGluY2x1ZGVkLgotCi1DdXJyZW50IGxpbWl0YXRpb25z
OgotCi0gICogVGhlIElSQyBwcm90b2NvbCBzaGluZXMgdGhyb3VnaCB0aGUgYWJzdHJhY3Rpb24g
YSBiaXQgdG9vIG11Y2guCi0gICogRGF0YSBpcyBub3Qgd3JpdHRlbiBhc3luY2hyb25vdXNseSB0
byB0aGUgc2VydmVyLCBpLmUuIHRoZSB3cml0ZSgpCi0gICAgbWF5IGJsb2NrIGlmIHRoZSBUQ1Ag
YnVmZmVycyBhcmUgc3R1ZmZlZC4KLSAgKiBUaGVyZSBhcmUgbm8gc3VwcG9ydCBmb3IgRENDIGZp
bGUgdHJhbnNmZXJzLgotICAqIFRoZSBhdXRob3IgaGF2ZW4ndCBldmVuIHJlYWQgUkZDIDI4MTAs
IDI4MTEsIDI4MTIgYW5kIDI4MTMuCi0gICogTGlrZSBtb3N0IHByb2plY3RzLCBkb2N1bWVudGF0
aW9uIGlzIGxhY2tpbmcuLi4KLQotLi4gW0lSQyBzcGVjaWZpY2F0aW9uc10gaHR0cDovL3d3dy5p
cmNoZWxwLm9yZy9pcmNoZWxwL3JmYy8KLSIiIgotCi1pbXBvcnQgYmlzZWN0Ci1pbXBvcnQgcmUK
LWltcG9ydCBzZWxlY3QKLWltcG9ydCBzb2NrZXQKLWltcG9ydCBzdHJpbmcKLWltcG9ydCBzeXMK
LWltcG9ydCB0aW1lCi1pbXBvcnQgdHlwZXMKLQotVkVSU0lPTiA9IDAsIDQsIDgKLURFQlVHID0g
MAotCi0jIFRPRE8KLSMgLS0tLQotIyAobWF5YmUpIHRocmVhZCBzYWZldHkKLSMgKG1heWJlKSBj
b2xvciBwYXJzZXIgY29udmVuaWVuY2UgZnVuY3Rpb25zCi0jIGRvY3VtZW50YXRpb24gKGluY2x1
ZGluZyBhbGwgZXZlbnQgdHlwZXMpCi0jIChtYXliZSkgYWRkIGF3YXJlbmVzcyBvZiBkaWZmZXJl
bnQgdHlwZXMgb2YgaXJjZHMKLSMgc2VuZCBkYXRhIGFzeW5jaHJvbm91c2x5IHRvIHRoZSBzZXJ2
ZXIgKGFuZCBEQ0MgY29ubmVjdGlvbnMpCi0jIChtYXliZSkgYXV0b21hdGljYWxseSBjbG9zZSB1
bnVzZWQsIHBhc3NpdmUgRENDIGNvbm5lY3Rpb25zIGFmdGVyIGEgd2hpbGUKLQotIyBOT1RFUwot
IyAtLS0tLQotIyBjb25uZWN0aW9uLnF1aXQoKSBvbmx5IHNlbmRzIFFVSVQgdG8gdGhlIHNlcnZl
ci4KLSMgRVJST1IgZnJvbSB0aGUgc2VydmVyIHRyaWdnZXJzIHRoZSBlcnJvciBldmVudCBhbmQg
dGhlIGRpc2Nvbm5lY3QgZXZlbnQuCi0jIGRyb3BwaW5nIG9mIHRoZSBjb25uZWN0aW9uIHRyaWdn
ZXJzIHRoZSBkaXNjb25uZWN0IGV2ZW50LgotCi1jbGFzcyBJUkNFcnJvcihFeGNlcHRpb24pOgot
ICAgICIiIlJlcHJlc2VudHMgYW4gSVJDIGV4Y2VwdGlvbi4iIiIKLSAgICBwYXNzCi0KLQotY2xh
c3MgSVJDOgotICAgICIiIkNsYXNzIHRoYXQgaGFuZGxlcyBvbmUgb3Igc2V2ZXJhbCBJUkMgc2Vy
dmVyIGNvbm5lY3Rpb25zLgotCi0gICAgV2hlbiBhbiBJUkMgb2JqZWN0IGhhcyBiZWVuIGluc3Rh
bnRpYXRlZCwgaXQgY2FuIGJlIHVzZWQgdG8gY3JlYXRlCi0gICAgQ29ubmVjdGlvbiBvYmplY3Rz
IHRoYXQgcmVwcmVzZW50IHRoZSBJUkMgY29ubmVjdGlvbnMuICBUaGUKLSAgICByZXNwb25zaWJp
bGl0eSBvZiB0aGUgSVJDIG9iamVjdCBpcyB0byBwcm92aWRlIGFuIGV2ZW50LWRyaXZlbgotICAg
IGZyYW1ld29yayBmb3IgdGhlIGNvbm5lY3Rpb25zIGFuZCB0byBrZWVwIHRoZSBjb25uZWN0aW9u
cyBhbGl2ZS4KLSAgICBJdCBydW5zIGEgc2VsZWN0IGxvb3AgdG8gcG9sbCBlYWNoIGNvbm5lY3Rp
b24ncyBUQ1Agc29ja2V0IGFuZAotICAgIGhhbmRzIG92ZXIgdGhlIHNvY2tldHMgd2l0aCBpbmNv
bWluZyBkYXRhIGZvciBwcm9jZXNzaW5nIGJ5IHRoZQotICAgIGNvcnJlc3BvbmRpbmcgY29ubmVj
dGlvbi4KLQotICAgIFRoZSBtZXRob2RzIG9mIG1vc3QgaW50ZXJlc3QgZm9yIGFuIElSQyBjbGll
bnQgd3JpdGVyIGFyZSBzZXJ2ZXIsCi0gICAgYWRkX2dsb2JhbF9oYW5kbGVyLCByZW1vdmVfZ2xv
YmFsX2hhbmRsZXIsIGV4ZWN1dGVfYXQsCi0gICAgZXhlY3V0ZV9kZWxheWVkLCBwcm9jZXNzX29u
Y2UgYW5kIHByb2Nlc3NfZm9yZXZlci4KLQotICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKLQotICAg
ICAgICBpcmMgPSBpcmNsaWIuSVJDKCkKLSAgICAgICAgc2VydmVyID0gaXJjLnNlcnZlcigpCi0g
ICAgICAgIHNlcnZlci5jb25uZWN0KFwiaXJjLnNvbWUud2hlcmVcIiwgNjY2NywgXCJteV9uaWNr
bmFtZVwiKQotICAgICAgICBzZXJ2ZXIucHJpdm1zZyhcImFfbmlja25hbWVcIiwgXCJIaSB0aGVy
ZSFcIikKLSAgICAgICAgaXJjLnByb2Nlc3NfZm9yZXZlcigpCi0KLSAgICBUaGlzIHdpbGwgY29u
bmVjdCB0byB0aGUgSVJDIHNlcnZlciBpcmMuc29tZS53aGVyZSBvbiBwb3J0IDY2NjcKLSAgICB1
c2luZyB0aGUgbmlja25hbWUgbXlfbmlja25hbWUgYW5kIHNlbmQgdGhlIG1lc3NhZ2UgXCJIaSB0
aGVyZSFcIgotICAgIHRvIHRoZSBuaWNrbmFtZSBhX25pY2tuYW1lLgotICAgICIiIgotCi0gICAg
ZGVmIF9faW5pdF9fKHNlbGYsIGZuX3RvX2FkZF9zb2NrZXQ9Tm9uZSwKLSAgICAgICAgICAgICAg
ICAgZm5fdG9fcmVtb3ZlX3NvY2tldD1Ob25lLAotICAgICAgICAgICAgICAgICBmbl90b19hZGRf
dGltZW91dD1Ob25lKToKLSAgICAgICAgIiIiQ29uc3RydWN0b3IgZm9yIElSQyBvYmplY3RzLgot
Ci0gICAgICAgIE9wdGlvbmFsIGFyZ3VtZW50cyBhcmUgZm5fdG9fYWRkX3NvY2tldCwgZm5fdG9f
cmVtb3ZlX3NvY2tldAotICAgICAgICBhbmQgZm5fdG9fYWRkX3RpbWVvdXQuICBUaGUgZmlyc3Qg
dHdvIHNwZWNpZnkgZnVuY3Rpb25zIHRoYXQKLSAgICAgICAgd2lsbCBiZSBjYWxsZWQgd2l0aCBh
IHNvY2tldCBvYmplY3QgYXMgYXJndW1lbnQgd2hlbiB0aGUgSVJDCi0gICAgICAgIG9iamVjdCB3
YW50cyB0byBiZSBub3RpZmllZCAob3Igc3RvcCBiZWluZyBub3RpZmllZCkgb2YgZGF0YQotICAg
ICAgICBjb21pbmcgb24gYSBuZXcgc29ja2V0LiAgV2hlbiBuZXcgZGF0YSBhcnJpdmVzLCB0aGUg
bWV0aG9kCi0gICAgICAgIHByb2Nlc3NfZGF0YSBzaG91bGQgYmUgY2FsbGVkLiAgU2ltaWxhcmx5
LCBmbl90b19hZGRfdGltZW91dAotICAgICAgICBpcyBjYWxsZWQgd2l0aCBhIG51bWJlciBvZiBz
ZWNvbmRzIChhIGZsb2F0aW5nIHBvaW50IG51bWJlcikKLSAgICAgICAgYXMgZmlyc3QgYXJndW1l
bnQgd2hlbiB0aGUgSVJDIG9iamVjdCB3YW50cyB0byByZWNlaXZlIGEKLSAgICAgICAgbm90aWZp
Y2F0aW9uIChieSBjYWxsaW5nIHRoZSBwcm9jZXNzX3RpbWVvdXQgbWV0aG9kKS4gIFNvLCBpZgot
ICAgICAgICBlLmcuIHRoZSBhcmd1bWVudCBpcyA0Mi4xNywgdGhlIG9iamVjdCB3YW50cyB0aGUK
LSAgICAgICAgcHJvY2Vzc190aW1lb3V0IG1ldGhvZCB0byBiZSBjYWxsZWQgYWZ0ZXIgNDIgc2Vj
b25kcyBhbmQgMTcwCi0gICAgICAgIG1pbGxpc2Vjb25kcy4KLQotICAgICAgICBUaGUgdGhyZWUg
YXJndW1lbnRzIG1haW5seSBleGlzdCB0byBiZSBhYmxlIHRvIHVzZSBhbiBleHRlcm5hbAotICAg
ICAgICBtYWluIGxvb3AgKGZvciBleGFtcGxlIFRraW50ZXIncyBvciBQeUdUSydzIG1haW4gYXBw
IGxvb3ApCi0gICAgICAgIGluc3RlYWQgb2YgY2FsbGluZyB0aGUgcHJvY2Vzc19mb3JldmVyIG1l
dGhvZC4KLQotICAgICAgICBBbiBhbHRlcm5hdGl2ZSBpcyB0byBqdXN0IGNhbGwgU2VydmVyQ29u
bmVjdGlvbi5wcm9jZXNzX29uY2UoKQotICAgICAgICBvbmNlIGluIGEgd2hpbGUuCi0gICAgICAg
ICIiIgotCi0gICAgICAgIGlmIGZuX3RvX2FkZF9zb2NrZXQgYW5kIGZuX3RvX3JlbW92ZV9zb2Nr
ZXQ6Ci0gICAgICAgICAgICBzZWxmLmZuX3RvX2FkZF9zb2NrZXQgPSBmbl90b19hZGRfc29ja2V0
Ci0gICAgICAgICAgICBzZWxmLmZuX3RvX3JlbW92ZV9zb2NrZXQgPSBmbl90b19yZW1vdmVfc29j
a2V0Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZuX3RvX2FkZF9zb2NrZXQgPSBO
b25lCi0gICAgICAgICAgICBzZWxmLmZuX3RvX3JlbW92ZV9zb2NrZXQgPSBOb25lCi0KLSAgICAg
ICAgc2VsZi5mbl90b19hZGRfdGltZW91dCA9IGZuX3RvX2FkZF90aW1lb3V0Ci0gICAgICAgIHNl
bGYuY29ubmVjdGlvbnMgPSBbXQotICAgICAgICBzZWxmLmhhbmRsZXJzID0ge30KLSAgICAgICAg
c2VsZi5kZWxheWVkX2NvbW1hbmRzID0gW10gIyBsaXN0IG9mIHR1cGxlcyBpbiB0aGUgZm9ybWF0
ICh0aW1lLCBmdW5jdGlvbiwgYXJndW1lbnRzKQotCi0gICAgICAgIHNlbGYuYWRkX2dsb2JhbF9o
YW5kbGVyKCJwaW5nIiwgX3BpbmdfcG9uZ2VyLCAtNDIpCi0KLSAgICBkZWYgc2VydmVyKHNlbGYp
OgotICAgICAgICAiIiJDcmVhdGVzIGFuZCByZXR1cm5zIGEgU2VydmVyQ29ubmVjdGlvbiBvYmpl
Y3QuIiIiCi0KLSAgICAgICAgYyA9IFNlcnZlckNvbm5lY3Rpb24oc2VsZikKLSAgICAgICAgc2Vs
Zi5jb25uZWN0aW9ucy5hcHBlbmQoYykKLSAgICAgICAgcmV0dXJuIGMKLQotICAgIGRlZiBwcm9j
ZXNzX2RhdGEoc2VsZiwgc29ja2V0cyk6Ci0gICAgICAgICIiIkNhbGxlZCB3aGVuIHRoZXJlIGlz
IG1vcmUgZGF0YSB0byByZWFkIG9uIGNvbm5lY3Rpb24gc29ja2V0cy4KLQotICAgICAgICBBcmd1
bWVudHM6Ci0KLSAgICAgICAgICAgIHNvY2tldHMgLS0gQSBsaXN0IG9mIHNvY2tldCBvYmplY3Rz
LgotCi0gICAgICAgIFNlZSBkb2N1bWVudGF0aW9uIGZvciBJUkMuX19pbml0X18uCi0gICAgICAg
ICIiIgotICAgICAgICBmb3IgcyBpbiBzb2NrZXRzOgotICAgICAgICAgICAgZm9yIGMgaW4gc2Vs
Zi5jb25uZWN0aW9uczoKLSAgICAgICAgICAgICAgICBpZiBzID09IGMuX2dldF9zb2NrZXQoKToK
LSAgICAgICAgICAgICAgICAgICAgYy5wcm9jZXNzX2RhdGEoKQotCi0gICAgZGVmIHByb2Nlc3Nf
dGltZW91dChzZWxmKToKLSAgICAgICAgIiIiQ2FsbGVkIHdoZW4gYSB0aW1lb3V0IG5vdGlmaWNh
dGlvbiBpcyBkdWUuCi0KLSAgICAgICAgU2VlIGRvY3VtZW50YXRpb24gZm9yIElSQy5fX2luaXRf
Xy4KLSAgICAgICAgIiIiCi0gICAgICAgIHQgPSB0aW1lLnRpbWUoKQotICAgICAgICB3aGlsZSBz
ZWxmLmRlbGF5ZWRfY29tbWFuZHM6Ci0gICAgICAgICAgICBpZiB0ID49IHNlbGYuZGVsYXllZF9j
b21tYW5kc1swXVswXToKLSAgICAgICAgICAgICAgICBzZWxmLmRlbGF5ZWRfY29tbWFuZHNbMF1b
MV0oKnNlbGYuZGVsYXllZF9jb21tYW5kc1swXVsyXSkKLSAgICAgICAgICAgICAgICBkZWwgc2Vs
Zi5kZWxheWVkX2NvbW1hbmRzWzBdCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAg
IGJyZWFrCi0KLSAgICBkZWYgcHJvY2Vzc19vbmNlKHNlbGYsIHRpbWVvdXQ9MCk6Ci0gICAgICAg
ICIiIlByb2Nlc3MgZGF0YSBmcm9tIGNvbm5lY3Rpb25zIG9uY2UuCi0KLSAgICAgICAgQXJndW1l
bnRzOgotCi0gICAgICAgICAgICB0aW1lb3V0IC0tIEhvdyBsb25nIHRoZSBzZWxlY3QoKSBjYWxs
IHNob3VsZCB3YWl0IGlmIG5vCi0gICAgICAgICAgICAgICAgICAgICAgIGRhdGEgaXMgYXZhaWxh
YmxlLgotCi0gICAgICAgIFRoaXMgbWV0aG9kIHNob3VsZCBiZSBjYWxsZWQgcGVyaW9kaWNhbGx5
IHRvIGNoZWNrIGFuZCBwcm9jZXNzCi0gICAgICAgIGluY29taW5nIGRhdGEsIGlmIHRoZXJlIGFy
ZSBhbnkuICBJZiB0aGF0IHNlZW1zIGJvcmluZywgbG9vawotICAgICAgICBhdCB0aGUgcHJvY2Vz
c19mb3JldmVyIG1ldGhvZC4KLSAgICAgICAgIiIiCi0gICAgICAgIHNvY2tldHMgPSBtYXAobGFt
YmRhIHg6IHguX2dldF9zb2NrZXQoKSwgc2VsZi5jb25uZWN0aW9ucykKLSAgICAgICAgc29ja2V0
cyA9IGZpbHRlcihsYW1iZGEgeDogeCAhPSBOb25lLCBzb2NrZXRzKQotICAgICAgICBpZiBzb2Nr
ZXRzOgotICAgICAgICAgICAgKGksIG8sIGUpID0gc2VsZWN0LnNlbGVjdChzb2NrZXRzLCBbXSwg
W10sIHRpbWVvdXQpCi0gICAgICAgICAgICBzZWxmLnByb2Nlc3NfZGF0YShpKQotICAgICAgICBl
bHNlOgotICAgICAgICAgICAgdGltZS5zbGVlcCh0aW1lb3V0KQotICAgICAgICBzZWxmLnByb2Nl
c3NfdGltZW91dCgpCi0KLSAgICBkZWYgcHJvY2Vzc19mb3JldmVyKHNlbGYsIHRpbWVvdXQ9MC4y
KToKLSAgICAgICAgIiIiUnVuIGFuIGluZmluaXRlIGxvb3AsIHByb2Nlc3NpbmcgZGF0YSBmcm9t
IGNvbm5lY3Rpb25zLgotCi0gICAgICAgIFRoaXMgbWV0aG9kIHJlcGVhdGVkbHkgY2FsbHMgcHJv
Y2Vzc19vbmNlLgotCi0gICAgICAgIEFyZ3VtZW50czoKLQotICAgICAgICAgICAgdGltZW91dCAt
LSBQYXJhbWV0ZXIgdG8gcGFzcyB0byBwcm9jZXNzX29uY2UuCi0gICAgICAgICIiIgotICAgICAg
ICB3aGlsZSAxOgotICAgICAgICAgICAgc2VsZi5wcm9jZXNzX29uY2UodGltZW91dCkKLQotICAg
IGRlZiBkaXNjb25uZWN0X2FsbChzZWxmLCBtZXNzYWdlPSIiKToKLSAgICAgICAgIiIiRGlzY29u
bmVjdHMgYWxsIGNvbm5lY3Rpb25zLiIiIgotICAgICAgICBmb3IgYyBpbiBzZWxmLmNvbm5lY3Rp
b25zOgotICAgICAgICAgICAgYy5kaXNjb25uZWN0KG1lc3NhZ2UpCi0KLSAgICBkZWYgYWRkX2ds
b2JhbF9oYW5kbGVyKHNlbGYsIGV2ZW50LCBoYW5kbGVyLCBwcmlvcml0eT0wKToKLSAgICAgICAg
IiIiQWRkcyBhIGdsb2JhbCBoYW5kbGVyIGZ1bmN0aW9uIGZvciBhIHNwZWNpZmljIGV2ZW50IHR5
cGUuCi0KLSAgICAgICAgQXJndW1lbnRzOgotCi0gICAgICAgICAgICBldmVudCAtLSBFdmVudCB0
eXBlIChhIHN0cmluZykuICBDaGVjayB0aGUgdmFsdWVzIG9mIHRoZQotICAgICAgICAgICAgbnVt
ZXJpY19ldmVudHMgZGljdGlvbmFyeSBpbiBpcmNsaWIucHkgZm9yIHBvc3NpYmxlIGV2ZW50Ci0g
ICAgICAgICAgICB0eXBlcy4KLQotICAgICAgICAgICAgaGFuZGxlciAtLSBDYWxsYmFjayBmdW5j
dGlvbi4KLQotICAgICAgICAgICAgcHJpb3JpdHkgLS0gQSBudW1iZXIgKHRoZSBsb3dlciBudW1i
ZXIsIHRoZSBoaWdoZXIgcHJpb3JpdHkpLgotCi0gICAgICAgIFRoZSBoYW5kbGVyIGZ1bmN0aW9u
IGlzIGNhbGxlZCB3aGVuZXZlciB0aGUgc3BlY2lmaWVkIGV2ZW50IGlzCi0gICAgICAgIHRyaWdn
ZXJlZCBpbiBhbnkgb2YgdGhlIGNvbm5lY3Rpb25zLiAgU2VlIGRvY3VtZW50YXRpb24gZm9yCi0g
ICAgICAgIHRoZSBFdmVudCBjbGFzcy4KLQotICAgICAgICBUaGUgaGFuZGxlciBmdW5jdGlvbnMg
YXJlIGNhbGxlZCBpbiBwcmlvcml0eSBvcmRlciAobG93ZXN0Ci0gICAgICAgIG51bWJlciBpcyBo
aWdoZXN0IHByaW9yaXR5KS4gIElmIGEgaGFuZGxlciBmdW5jdGlvbiByZXR1cm5zCi0gICAgICAg
IFwiTk8gTU9SRVwiLCBubyBtb3JlIGhhbmRsZXJzIHdpbGwgYmUgY2FsbGVkLgotICAgICAgICAi
IiIKLSAgICAgICAgaWYgbm90IGV2ZW50IGluIHNlbGYuaGFuZGxlcnM6Ci0gICAgICAgICAgICBz
ZWxmLmhhbmRsZXJzW2V2ZW50XSA9IFtdCi0gICAgICAgIGJpc2VjdC5pbnNvcnQoc2VsZi5oYW5k
bGVyc1tldmVudF0sICgocHJpb3JpdHksIGhhbmRsZXIpKSkKLQotICAgIGRlZiByZW1vdmVfZ2xv
YmFsX2hhbmRsZXIoc2VsZiwgZXZlbnQsIGhhbmRsZXIpOgotICAgICAgICAiIiJSZW1vdmVzIGEg
Z2xvYmFsIGhhbmRsZXIgZnVuY3Rpb24uCi0KLSAgICAgICAgQXJndW1lbnRzOgotCi0gICAgICAg
ICAgICBldmVudCAtLSBFdmVudCB0eXBlIChhIHN0cmluZykuCi0KLSAgICAgICAgICAgIGhhbmRs
ZXIgLS0gQ2FsbGJhY2sgZnVuY3Rpb24uCi0KLSAgICAgICAgUmV0dXJucyAxIG9uIHN1Y2Nlc3Ms
IG90aGVyd2lzZSAwLgotICAgICAgICAiIiIKLSAgICAgICAgaWYgbm90IGV2ZW50IGluIHNlbGYu
aGFuZGxlcnM6Ci0gICAgICAgICAgICByZXR1cm4gMAotICAgICAgICBmb3IgaCBpbiBzZWxmLmhh
bmRsZXJzW2V2ZW50XToKLSAgICAgICAgICAgIGlmIGhhbmRsZXIgPT0gaFsxXToKLSAgICAgICAg
ICAgICAgICBzZWxmLmhhbmRsZXJzW2V2ZW50XS5yZW1vdmUoaCkKLSAgICAgICAgcmV0dXJuIDEK
LQotICAgIGRlZiBleGVjdXRlX2F0KHNlbGYsIGF0LCBmdW5jdGlvbiwgYXJndW1lbnRzPSgpKToK
LSAgICAgICAgIiIiRXhlY3V0ZSBhIGZ1bmN0aW9uIGF0IGEgc3BlY2lmaWVkIHRpbWUuCi0KLSAg
ICAgICAgQXJndW1lbnRzOgotCi0gICAgICAgICAgICBhdCAtLSBFeGVjdXRlIGF0IHRoaXMgdGlt
ZSAoc3RhbmRhcmQgXCJ0aW1lX3RcIiB0aW1lKS4KLQotICAgICAgICAgICAgZnVuY3Rpb24gLS0g
RnVuY3Rpb24gdG8gY2FsbC4KLQotICAgICAgICAgICAgYXJndW1lbnRzIC0tIEFyZ3VtZW50cyB0
byBnaXZlIHRoZSBmdW5jdGlvbi4KLSAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuZXhlY3V0ZV9k
ZWxheWVkKGF0LXRpbWUudGltZSgpLCBmdW5jdGlvbiwgYXJndW1lbnRzKQotCi0gICAgZGVmIGV4
ZWN1dGVfZGVsYXllZChzZWxmLCBkZWxheSwgZnVuY3Rpb24sIGFyZ3VtZW50cz0oKSk6Ci0gICAg
ICAgICIiIkV4ZWN1dGUgYSBmdW5jdGlvbiBhZnRlciBhIHNwZWNpZmllZCB0aW1lLgotCi0gICAg
ICAgIEFyZ3VtZW50czoKLQotICAgICAgICAgICAgZGVsYXkgLS0gSG93IG1hbnkgc2Vjb25kcyB0
byB3YWl0LgotCi0gICAgICAgICAgICBmdW5jdGlvbiAtLSBGdW5jdGlvbiB0byBjYWxsLgotCi0g
ICAgICAgICAgICBhcmd1bWVudHMgLS0gQXJndW1lbnRzIHRvIGdpdmUgdGhlIGZ1bmN0aW9uLgot
ICAgICAgICAiIiIKLSAgICAgICAgYmlzZWN0Lmluc29ydChzZWxmLmRlbGF5ZWRfY29tbWFuZHMs
IChkZWxheSt0aW1lLnRpbWUoKSwgZnVuY3Rpb24sIGFyZ3VtZW50cykpCi0gICAgICAgIGlmIHNl
bGYuZm5fdG9fYWRkX3RpbWVvdXQ6Ci0gICAgICAgICAgICBzZWxmLmZuX3RvX2FkZF90aW1lb3V0
KGRlbGF5KQotCi0gICAgZGVmIGRjYyhzZWxmLCBkY2N0eXBlPSJjaGF0Iik6Ci0gICAgICAgICIi
IkNyZWF0ZXMgYW5kIHJldHVybnMgYSBEQ0NDb25uZWN0aW9uIG9iamVjdC4KLQotICAgICAgICBB
cmd1bWVudHM6Ci0KLSAgICAgICAgICAgIGRjY3R5cGUgLS0gImNoYXQiIGZvciBEQ0MgQ0hBVCBj
b25uZWN0aW9ucyBvciAicmF3IiBmb3IKLSAgICAgICAgICAgICAgICAgICAgICAgRENDIFNFTkQg
KG9yIG90aGVyIERDQyB0eXBlcykuIElmICJjaGF0IiwKLSAgICAgICAgICAgICAgICAgICAgICAg
aW5jb21pbmcgZGF0YSB3aWxsIGJlIHNwbGl0IGluIG5ld2xpbmUtc2VwYXJhdGVkCi0gICAgICAg
ICAgICAgICAgICAgICAgIGNodW5rcy4gSWYgInJhdyIsIGluY29taW5nIGRhdGEgaXMgbm90IHRv
dWNoZWQuCi0gICAgICAgICIiIgotICAgICAgICBjID0gRENDQ29ubmVjdGlvbihzZWxmLCBkY2N0
eXBlKQotICAgICAgICBzZWxmLmNvbm5lY3Rpb25zLmFwcGVuZChjKQotICAgICAgICByZXR1cm4g
YwotCi0gICAgZGVmIF9oYW5kbGVfZXZlbnQoc2VsZiwgY29ubmVjdGlvbiwgZXZlbnQpOgotICAg
ICAgICAiIiJbSW50ZXJuYWxdIiIiCi0gICAgICAgIGggPSBzZWxmLmhhbmRsZXJzCi0gICAgICAg
IGZvciBoYW5kbGVyIGluIGguZ2V0KCJhbGxfZXZlbnRzIiwgW10pICsgaC5nZXQoZXZlbnQuZXZl
bnR0eXBlKCksIFtdKToKLSAgICAgICAgICAgIGlmIGhhbmRsZXJbMV0oY29ubmVjdGlvbiwgZXZl
bnQpID09ICJOTyBNT1JFIjoKLSAgICAgICAgICAgICAgICByZXR1cm4KLQotICAgIGRlZiBfcmVt
b3ZlX2Nvbm5lY3Rpb24oc2VsZiwgY29ubmVjdGlvbik6Ci0gICAgICAgICIiIltJbnRlcm5hbF0i
IiIKLSAgICAgICAgc2VsZi5jb25uZWN0aW9ucy5yZW1vdmUoY29ubmVjdGlvbikKLSAgICAgICAg
aWYgc2VsZi5mbl90b19yZW1vdmVfc29ja2V0OgotICAgICAgICAgICAgc2VsZi5mbl90b19yZW1v
dmVfc29ja2V0KGNvbm5lY3Rpb24uX2dldF9zb2NrZXQoKSkKLQotX3JmY18xNDU5X2NvbW1hbmRf
cmVnZXhwID0gcmUuY29tcGlsZSgiXig6KD9QPHByZWZpeD5bXiBdKykgKyk/KD9QPGNvbW1hbmQ+
W14gXSspKCAqKD9QPGFyZ3VtZW50PiAuKykpPyIpCi0KLWNsYXNzIENvbm5lY3Rpb246Ci0gICAg
IiIiQmFzZSBjbGFzcyBmb3IgSVJDIGNvbm5lY3Rpb25zLgotCi0gICAgTXVzdCBiZSBvdmVycmlk
ZGVuLgotICAgICIiIgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpcmNsaWJvYmopOgotICAgICAg
ICBzZWxmLmlyY2xpYm9iaiA9IGlyY2xpYm9iagotCi0gICAgZGVmIF9nZXRfc29ja2V0KCk6Ci0g
ICAgICAgIHJhaXNlIElSQ0Vycm9yKCJOb3Qgb3ZlcnJpZGRlbiIpCi0KLSAgICAjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAgICAjIyMgQ29udmVuaWVuY2Ugd3JhcHBlcnMuCi0KLSAg
ICBkZWYgZXhlY3V0ZV9hdChzZWxmLCBhdCwgZnVuY3Rpb24sIGFyZ3VtZW50cz0oKSk6Ci0gICAg
ICAgIHNlbGYuaXJjbGlib2JqLmV4ZWN1dGVfYXQoYXQsIGZ1bmN0aW9uLCBhcmd1bWVudHMpCi0K
LSAgICBkZWYgZXhlY3V0ZV9kZWxheWVkKHNlbGYsIGRlbGF5LCBmdW5jdGlvbiwgYXJndW1lbnRz
PSgpKToKLSAgICAgICAgc2VsZi5pcmNsaWJvYmouZXhlY3V0ZV9kZWxheWVkKGRlbGF5LCBmdW5j
dGlvbiwgYXJndW1lbnRzKQotCi0KLWNsYXNzIFNlcnZlckNvbm5lY3Rpb25FcnJvcihJUkNFcnJv
cik6Ci0gICAgcGFzcwotCi1jbGFzcyBTZXJ2ZXJOb3RDb25uZWN0ZWRFcnJvcihTZXJ2ZXJDb25u
ZWN0aW9uRXJyb3IpOgotICAgIHBhc3MKLQotCi0jIEh1aCE/ICBDcnJycmF6eSBFRk5ldCBkb2Vz
bid0IGZvbGxvdyB0aGUgUkZDOiB0aGVpciBpcmNkIHNlZW1zIHRvCi0jIHVzZSBcbiBhcyBtZXNz
YWdlIHNlcGFyYXRvciEgIDpQCi1fbGluZXNlcF9yZWdleHAgPSByZS5jb21waWxlKCJccj9cbiIp
Ci0KLWNsYXNzIFNlcnZlckNvbm5lY3Rpb24oQ29ubmVjdGlvbik6Ci0gICAgIiIiVGhpcyBjbGFz
cyByZXByZXNlbnRzIGFuIElSQyBzZXJ2ZXIgY29ubmVjdGlvbi4KLQotICAgIFNlcnZlckNvbm5l
Y3Rpb24gb2JqZWN0cyBhcmUgaW5zdGFudGlhdGVkIGJ5IGNhbGxpbmcgdGhlIHNlcnZlcgotICAg
IG1ldGhvZCBvbiBhbiBJUkMgb2JqZWN0LgotICAgICIiIgotCi0gICAgZGVmIF9faW5pdF9fKHNl
bGYsIGlyY2xpYm9iaik6Ci0gICAgICAgIENvbm5lY3Rpb24uX19pbml0X18oc2VsZiwgaXJjbGli
b2JqKQotICAgICAgICBzZWxmLmNvbm5lY3RlZCA9IDAgICMgTm90IGNvbm5lY3RlZCB5ZXQuCi0g
ICAgICAgIHNlbGYuc29ja2V0ID0gTm9uZQotICAgICAgICBzZWxmLnNzbCA9IE5vbmUKLQotICAg
IGRlZiBjb25uZWN0KHNlbGYsIHNlcnZlciwgcG9ydCwgbmlja25hbWUsIHBhc3N3b3JkPU5vbmUs
IHVzZXJuYW1lPU5vbmUsCi0gICAgICAgICAgICAgICAgaXJjbmFtZT1Ob25lLCBsb2NhbGFkZHJl
c3M9IiIsIGxvY2FscG9ydD0wLCBzc2w9RmFsc2UsIGlwdjY9RmFsc2UpOgotICAgICAgICAiIiJD
b25uZWN0L3JlY29ubmVjdCB0byBhIHNlcnZlci4KLQotICAgICAgICBBcmd1bWVudHM6Ci0KLSAg
ICAgICAgICAgIHNlcnZlciAtLSBTZXJ2ZXIgbmFtZS4KLQotICAgICAgICAgICAgcG9ydCAtLSBQ
b3J0IG51bWJlci4KLQotICAgICAgICAgICAgbmlja25hbWUgLS0gVGhlIG5pY2tuYW1lLgotCi0g
ICAgICAgICAgICBwYXNzd29yZCAtLSBQYXNzd29yZCAoaWYgYW55KS4KLQotICAgICAgICAgICAg
dXNlcm5hbWUgLS0gVGhlIHVzZXJuYW1lLgotCi0gICAgICAgICAgICBpcmNuYW1lIC0tIFRoZSBJ
UkMgbmFtZSAoInJlYWxuYW1lIikuCi0KLSAgICAgICAgICAgIGxvY2FsYWRkcmVzcyAtLSBCaW5k
IHRoZSBjb25uZWN0aW9uIHRvIGEgc3BlY2lmaWMgbG9jYWwgSVAgYWRkcmVzcy4KLQotICAgICAg
ICAgICAgbG9jYWxwb3J0IC0tIEJpbmQgdGhlIGNvbm5lY3Rpb24gdG8gYSBzcGVjaWZpYyBsb2Nh
bCBwb3J0LgotCi0gICAgICAgICAgICBzc2wgLS0gRW5hYmxlIHN1cHBvcnQgZm9yIHNzbC4KLQot
ICAgICAgICAgICAgaXB2NiAtLSBFbmFibGUgc3VwcG9ydCBmb3IgaXB2Ni4KLQotICAgICAgICBU
aGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgdG8gcmVjb25uZWN0IGEgY2xvc2VkIGNvbm5lY3Rp
b24uCi0KLSAgICAgICAgUmV0dXJucyB0aGUgU2VydmVyQ29ubmVjdGlvbiBvYmplY3QuCi0gICAg
ICAgICIiIgotICAgICAgICBpZiBzZWxmLmNvbm5lY3RlZDoKLSAgICAgICAgICAgIHNlbGYuZGlz
Y29ubmVjdCgiQ2hhbmdpbmcgc2VydmVycyIpCi0KLSAgICAgICAgc2VsZi5wcmV2aW91c19idWZm
ZXIgPSAiIgotICAgICAgICBzZWxmLmhhbmRsZXJzID0ge30KLSAgICAgICAgc2VsZi5yZWFsX3Nl
cnZlcl9uYW1lID0gIiIKLSAgICAgICAgc2VsZi5yZWFsX25pY2tuYW1lID0gbmlja25hbWUKLSAg
ICAgICAgc2VsZi5zZXJ2ZXIgPSBzZXJ2ZXIKLSAgICAgICAgc2VsZi5wb3J0ID0gcG9ydAotICAg
ICAgICBzZWxmLm5pY2tuYW1lID0gbmlja25hbWUKLSAgICAgICAgc2VsZi51c2VybmFtZSA9IHVz
ZXJuYW1lIG9yIG5pY2tuYW1lCi0gICAgICAgIHNlbGYuaXJjbmFtZSA9IGlyY25hbWUgb3Igbmlj
a25hbWUKLSAgICAgICAgc2VsZi5wYXNzd29yZCA9IHBhc3N3b3JkCi0gICAgICAgIHNlbGYubG9j
YWxhZGRyZXNzID0gbG9jYWxhZGRyZXNzCi0gICAgICAgIHNlbGYubG9jYWxwb3J0ID0gbG9jYWxw
b3J0Ci0gICAgICAgIHNlbGYubG9jYWxob3N0ID0gc29ja2V0LmdldGhvc3RuYW1lKCkKLSAgICAg
ICAgaWYgaXB2NjoKLSAgICAgICAgICAgIHNlbGYuc29ja2V0ID0gc29ja2V0LnNvY2tldChzb2Nr
ZXQuQUZfSU5FVDYsIHNvY2tldC5TT0NLX1NUUkVBTSkKLSAgICAgICAgZWxzZToKLSAgICAgICAg
ICAgIHNlbGYuc29ja2V0ID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNP
Q0tfU1RSRUFNKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLnNvY2tldC5iaW5kKChz
ZWxmLmxvY2FsYWRkcmVzcywgc2VsZi5sb2NhbHBvcnQpKQotICAgICAgICAgICAgc2VsZi5zb2Nr
ZXQuY29ubmVjdCgoc2VsZi5zZXJ2ZXIsIHNlbGYucG9ydCkpCi0gICAgICAgICAgICBpZiBzc2w6
Ci0gICAgICAgICAgICAgICAgc2VsZi5zc2wgPSBzb2NrZXQuc3NsKHNlbGYuc29ja2V0KQotICAg
ICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIHg6Ci0gICAgICAgICAgICBzZWxmLnNvY2tldC5j
bG9zZSgpCi0gICAgICAgICAgICBzZWxmLnNvY2tldCA9IE5vbmUKLSAgICAgICAgICAgIHJhaXNl
IFNlcnZlckNvbm5lY3Rpb25FcnJvcigiQ291bGRuJ3QgY29ubmVjdCB0byBzb2NrZXQ6ICVzIiAl
IHgpCi0gICAgICAgIHNlbGYuY29ubmVjdGVkID0gMQotICAgICAgICBpZiBzZWxmLmlyY2xpYm9i
ai5mbl90b19hZGRfc29ja2V0OgotICAgICAgICAgICAgc2VsZi5pcmNsaWJvYmouZm5fdG9fYWRk
X3NvY2tldChzZWxmLnNvY2tldCkKLQotICAgICAgICAjIExvZyBvbi4uLgotICAgICAgICBpZiBz
ZWxmLnBhc3N3b3JkOgotICAgICAgICAgICAgc2VsZi5wYXNzXyhzZWxmLnBhc3N3b3JkKQotICAg
ICAgICBzZWxmLm5pY2soc2VsZi5uaWNrbmFtZSkKLSAgICAgICAgc2VsZi51c2VyKHNlbGYudXNl
cm5hbWUsIHNlbGYuaXJjbmFtZSkKLSAgICAgICAgcmV0dXJuIHNlbGYKLQotICAgIGRlZiBjbG9z
ZShzZWxmKToKLSAgICAgICAgIiIiQ2xvc2UgdGhlIGNvbm5lY3Rpb24uCi0KLSAgICAgICAgVGhp
cyBtZXRob2QgY2xvc2VzIHRoZSBjb25uZWN0aW9uIHBlcm1hbmVudGx5OyBhZnRlciBpdCBoYXMK
LSAgICAgICAgYmVlbiBjYWxsZWQsIHRoZSBvYmplY3QgaXMgdW51c2FibGUuCi0gICAgICAgICIi
IgotCi0gICAgICAgIHNlbGYuZGlzY29ubmVjdCgiQ2xvc2luZyBvYmplY3QiKQotICAgICAgICBz
ZWxmLmlyY2xpYm9iai5fcmVtb3ZlX2Nvbm5lY3Rpb24oc2VsZikKLQotICAgIGRlZiBfZ2V0X3Nv
Y2tldChzZWxmKToKLSAgICAgICAgIiIiW0ludGVybmFsXSIiIgotICAgICAgICByZXR1cm4gc2Vs
Zi5zb2NrZXQKLQotICAgIGRlZiBnZXRfc2VydmVyX25hbWUoc2VsZik6Ci0gICAgICAgICIiIkdl
dCB0aGUgKHJlYWwpIHNlcnZlciBuYW1lLgotCi0gICAgICAgIFRoaXMgbWV0aG9kIHJldHVybnMg
dGhlIChyZWFsKSBzZXJ2ZXIgbmFtZSwgb3IsIG1vcmUKLSAgICAgICAgc3BlY2lmaWNhbGx5LCB3
aGF0IHRoZSBzZXJ2ZXIgY2FsbHMgaXRzZWxmLgotICAgICAgICAiIiIKLQotICAgICAgICBpZiBz
ZWxmLnJlYWxfc2VydmVyX25hbWU6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5yZWFsX3NlcnZl
cl9uYW1lCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gIiIKLQotICAgIGRlZiBn
ZXRfbmlja25hbWUoc2VsZik6Ci0gICAgICAgICIiIkdldCB0aGUgKHJlYWwpIG5pY2sgbmFtZS4K
LQotICAgICAgICBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSAocmVhbCkgbmlja25hbWUuICBUaGUg
bGlicmFyeSBrZWVwcwotICAgICAgICB0cmFjayBvZiBuaWNrIGNoYW5nZXMsIHNvIGl0IG1pZ2h0
IG5vdCBiZSB0aGUgbmljayBuYW1lIHRoYXQKLSAgICAgICAgd2FzIHBhc3NlZCB0byB0aGUgY29u
bmVjdCgpIG1ldGhvZC4gICIiIgotCi0gICAgICAgIHJldHVybiBzZWxmLnJlYWxfbmlja25hbWUK
LQotICAgIGRlZiBwcm9jZXNzX2RhdGEoc2VsZik6Ci0gICAgICAgICIiIltJbnRlcm5hbF0iIiIK
LQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBpZiBzZWxmLnNzbDoKLSAgICAgICAgICAgICAg
ICBuZXdfZGF0YSA9IHNlbGYuc3NsLnJlYWQoMioqMTQpCi0gICAgICAgICAgICBlbHNlOgotICAg
ICAgICAgICAgICAgIG5ld19kYXRhID0gc2VsZi5zb2NrZXQucmVjdigyKioxNCkKLSAgICAgICAg
ZXhjZXB0IHNvY2tldC5lcnJvcjoKLSAgICAgICAgICAgICMgVGhlIHNlcnZlciBodW5nIHVwLgot
ICAgICAgICAgICAgc2VsZi5kaXNjb25uZWN0KCJDb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXIiKQot
ICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGlmIG5vdCBuZXdfZGF0YToKLSAgICAgICAgICAg
ICMgUmVhZCBub3RoaW5nOiBjb25uZWN0aW9uIG11c3QgYmUgZG93bi4KLSAgICAgICAgICAgIHNl
bGYuZGlzY29ubmVjdCgiQ29ubmVjdGlvbiByZXNldCBieSBwZWVyIikKLSAgICAgICAgICAgIHJl
dHVybgotCi0gICAgICAgIGxpbmVzID0gX2xpbmVzZXBfcmVnZXhwLnNwbGl0KHNlbGYucHJldmlv
dXNfYnVmZmVyICsgbmV3X2RhdGEpCi0KLSAgICAgICAgIyBTYXZlIHRoZSBsYXN0LCB1bmZpbmlz
aGVkIGxpbmUuCi0gICAgICAgIHNlbGYucHJldmlvdXNfYnVmZmVyID0gbGluZXMucG9wKCkKLQot
ICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKLSAgICAgICAgICAgIGlmIERFQlVHOgotICAgICAg
ICAgICAgICAgIHByaW50KCJGUk9NIFNFUlZFUjoiLCBsaW5lKQotCi0gICAgICAgICAgICBpZiBu
b3QgbGluZToKLSAgICAgICAgICAgICAgICBjb250aW51ZQotCi0gICAgICAgICAgICBwcmVmaXgg
PSBOb25lCi0gICAgICAgICAgICBjb21tYW5kID0gTm9uZQotICAgICAgICAgICAgYXJndW1lbnRz
ID0gTm9uZQotICAgICAgICAgICAgc2VsZi5faGFuZGxlX2V2ZW50KEV2ZW50KCJhbGxfcmF3X21l
c3NhZ2VzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdldF9z
ZXJ2ZXJfbmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpbmVdKSkKLQotICAgICAg
ICAgICAgbSA9IF9yZmNfMTQ1OV9jb21tYW5kX3JlZ2V4cC5tYXRjaChsaW5lKQotICAgICAgICAg
ICAgaWYgbS5ncm91cCgicHJlZml4Iik6Ci0gICAgICAgICAgICAgICAgcHJlZml4ID0gbS5ncm91
cCgicHJlZml4IikKLSAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5yZWFsX3NlcnZlcl9uYW1l
OgotICAgICAgICAgICAgICAgICAgICBzZWxmLnJlYWxfc2VydmVyX25hbWUgPSBwcmVmaXgKLQot
ICAgICAgICAgICAgaWYgbS5ncm91cCgiY29tbWFuZCIpOgotICAgICAgICAgICAgICAgIGNvbW1h
bmQgPSBtLmdyb3VwKCJjb21tYW5kIikubG93ZXIoKQotCi0gICAgICAgICAgICBpZiBtLmdyb3Vw
KCJhcmd1bWVudCIpOgotICAgICAgICAgICAgICAgIGEgPSBtLmdyb3VwKCJhcmd1bWVudCIpLnNw
bGl0KCIgOiIsIDEpCi0gICAgICAgICAgICAgICAgYXJndW1lbnRzID0gYVswXS5zcGxpdCgpCi0g
ICAgICAgICAgICAgICAgaWYgbGVuKGEpID09IDI6Ci0gICAgICAgICAgICAgICAgICAgIGFyZ3Vt
ZW50cy5hcHBlbmQoYVsxXSkKLQotICAgICAgICAgICAgIyBUcmFuc2xhdGUgbnVtZXJpY3MgaW50
byBtb3JlIHJlYWRhYmxlIHN0cmluZ3MuCi0gICAgICAgICAgICBpZiBjb21tYW5kIGluIG51bWVy
aWNfZXZlbnRzOgotICAgICAgICAgICAgICAgIGNvbW1hbmQgPSBudW1lcmljX2V2ZW50c1tjb21t
YW5kXQotCi0gICAgICAgICAgICBpZiBjb21tYW5kID09ICJuaWNrIjoKLSAgICAgICAgICAgICAg
ICBpZiBubV90b19uKHByZWZpeCkgPT0gc2VsZi5yZWFsX25pY2tuYW1lOgotICAgICAgICAgICAg
ICAgICAgICBzZWxmLnJlYWxfbmlja25hbWUgPSBhcmd1bWVudHNbMF0KLSAgICAgICAgICAgIGVs
aWYgY29tbWFuZCA9PSAid2VsY29tZSI6Ci0gICAgICAgICAgICAgICAgIyBSZWNvcmQgdGhlIG5p
Y2tuYW1lIGluIGNhc2UgdGhlIGNsaWVudCBjaGFuZ2VkIG5pY2sKLSAgICAgICAgICAgICAgICAj
IGluIGEgbmlja25hbWVpbnVzZSBjYWxsYmFjay4KLSAgICAgICAgICAgICAgICBzZWxmLnJlYWxf
bmlja25hbWUgPSBhcmd1bWVudHNbMF0KLQotICAgICAgICAgICAgaWYgY29tbWFuZCBpbiBbInBy
aXZtc2ciLCAibm90aWNlIl06Ci0gICAgICAgICAgICAgICAgdGFyZ2V0LCBtZXNzYWdlID0gYXJn
dW1lbnRzWzBdLCBhcmd1bWVudHNbMV0KLSAgICAgICAgICAgICAgICBtZXNzYWdlcyA9IF9jdGNw
X2RlcXVvdGUobWVzc2FnZSkKLQotICAgICAgICAgICAgICAgIGlmIGNvbW1hbmQgPT0gInByaXZt
c2ciOgotICAgICAgICAgICAgICAgICAgICBpZiBpc19jaGFubmVsKHRhcmdldCk6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBjb21tYW5kID0gInB1Ym1zZyIKLSAgICAgICAgICAgICAgICBlbHNl
OgotICAgICAgICAgICAgICAgICAgICBpZiBpc19jaGFubmVsKHRhcmdldCk6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBjb21tYW5kID0gInB1Ym5vdGljZSIKLSAgICAgICAgICAgICAgICAgICAg
ZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgPSAicHJpdm5vdGljZSIKLQot
ICAgICAgICAgICAgICAgIGZvciBtIGluIG1lc3NhZ2VzOgotICAgICAgICAgICAgICAgICAgICBp
ZiB0eXBlKG0pIGlzIHR5cGVzLlR1cGxlVHlwZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
IGNvbW1hbmQgaW4gWyJwcml2bXNnIiwgInB1Ym1zZyJdOgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbW1hbmQgPSAiY3RjcCIKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCA9ICJjdGNwcmVwbHkiCi0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIG0gPSBsaXN0KG0pCi0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiBERUJVRzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiY29tbWFuZDogJXMs
IHNvdXJjZTogJXMsIHRhcmdldDogJXMsIGFyZ3VtZW50czogJXMiICUgKGNvbW1hbmQsIHByZWZp
eCwgdGFyZ2V0LCBtKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2hhbmRsZV9ldmVu
dChFdmVudChjb21tYW5kLCBwcmVmaXgsIHRhcmdldCwgbSkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiBjb21tYW5kID09ICJjdGNwIiBhbmQgbVswXSA9PSAiQUNUSU9OIjoKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGVfZXZlbnQoRXZlbnQoImFjdGlvbiIsIHBy
ZWZpeCwgdGFyZ2V0LCBtWzE6XSkpCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiBERUJVRzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
cmludCgiY29tbWFuZDogJXMsIHNvdXJjZTogJXMsIHRhcmdldDogJXMsIGFyZ3VtZW50czogJXMi
ICUgKGNvbW1hbmQsIHByZWZpeCwgdGFyZ2V0LCBbbV0pKQotICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZi5faGFuZGxlX2V2ZW50KEV2ZW50KGNvbW1hbmQsIHByZWZpeCwgdGFyZ2V0LCBbbV0p
KQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICB0YXJnZXQgPSBOb25lCi0KLSAg
ICAgICAgICAgICAgICBpZiBjb21tYW5kID09ICJxdWl0IjoKLSAgICAgICAgICAgICAgICAgICAg
YXJndW1lbnRzID0gW2FyZ3VtZW50c1swXV0KLSAgICAgICAgICAgICAgICBlbGlmIGNvbW1hbmQg
PT0gInBpbmciOgotICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSBhcmd1bWVudHNbMF0KLSAg
ICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSBhcmd1bWVu
dHNbMF0KLSAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzID0gYXJndW1lbnRzWzE6XQotCi0g
ICAgICAgICAgICAgICAgaWYgY29tbWFuZCA9PSAibW9kZSI6Ci0gICAgICAgICAgICAgICAgICAg
IGlmIG5vdCBpc19jaGFubmVsKHRhcmdldCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb21t
YW5kID0gInVtb2RlIgotCi0gICAgICAgICAgICAgICAgaWYgREVCVUc6Ci0gICAgICAgICAgICAg
ICAgICAgIHByaW50KCJjb21tYW5kOiAlcywgc291cmNlOiAlcywgdGFyZ2V0OiAlcywgYXJndW1l
bnRzOiAlcyIgJSAoY29tbWFuZCwgcHJlZml4LCB0YXJnZXQsIGFyZ3VtZW50cykpCi0gICAgICAg
ICAgICAgICAgc2VsZi5faGFuZGxlX2V2ZW50KEV2ZW50KGNvbW1hbmQsIHByZWZpeCwgdGFyZ2V0
LCBhcmd1bWVudHMpKQotCi0gICAgZGVmIF9oYW5kbGVfZXZlbnQoc2VsZiwgZXZlbnQpOgotICAg
ICAgICAiIiJbSW50ZXJuYWxdIiIiCi0gICAgICAgIHNlbGYuaXJjbGlib2JqLl9oYW5kbGVfZXZl
bnQoc2VsZiwgZXZlbnQpCi0gICAgICAgIGlmIGV2ZW50LmV2ZW50dHlwZSgpIGluIHNlbGYuaGFu
ZGxlcnM6Ci0gICAgICAgICAgICBmb3IgZm4gaW4gc2VsZi5oYW5kbGVyc1tldmVudC5ldmVudHR5
cGUoKV06Ci0gICAgICAgICAgICAgICAgZm4oc2VsZiwgZXZlbnQpCi0KLSAgICBkZWYgaXNfY29u
bmVjdGVkKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm4gY29ubmVjdGlvbiBzdGF0dXMuCi0KLSAg
ICAgICAgUmV0dXJucyB0cnVlIGlmIGNvbm5lY3RlZCwgb3RoZXJ3aXNlIGZhbHNlLgotICAgICAg
ICAiIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuY29ubmVjdGVkCi0KLSAgICBkZWYgYWRkX2dsb2Jh
bF9oYW5kbGVyKHNlbGYsICphcmdzKToKLSAgICAgICAgIiIiQWRkIGdsb2JhbCBoYW5kbGVyLgot
Ci0gICAgICAgIFNlZSBkb2N1bWVudGF0aW9uIGZvciBJUkMuYWRkX2dsb2JhbF9oYW5kbGVyLgot
ICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5pcmNsaWJvYmouYWRkX2dsb2JhbF9oYW5kbGVyKCph
cmdzKQotCi0gICAgZGVmIHJlbW92ZV9nbG9iYWxfaGFuZGxlcihzZWxmLCAqYXJncyk6Ci0gICAg
ICAgICIiIlJlbW92ZSBnbG9iYWwgaGFuZGxlci4KLQotICAgICAgICBTZWUgZG9jdW1lbnRhdGlv
biBmb3IgSVJDLnJlbW92ZV9nbG9iYWxfaGFuZGxlci4KLSAgICAgICAgIiIiCi0gICAgICAgIHNl
bGYuaXJjbGlib2JqLnJlbW92ZV9nbG9iYWxfaGFuZGxlcigqYXJncykKLQotICAgIGRlZiBhY3Rp
b24oc2VsZiwgdGFyZ2V0LCBhY3Rpb24pOgotICAgICAgICAiIiJTZW5kIGEgQ1RDUCBBQ1RJT04g
Y29tbWFuZC4iIiIKLSAgICAgICAgc2VsZi5jdGNwKCJBQ1RJT04iLCB0YXJnZXQsIGFjdGlvbikK
LQotICAgIGRlZiBhZG1pbihzZWxmLCBzZXJ2ZXI9IiIpOgotICAgICAgICAiIiJTZW5kIGFuIEFE
TUlOIGNvbW1hbmQuIiIiCi0gICAgICAgIHNlbGYuc2VuZF9yYXcoIiAiLmpvaW4oWyJBRE1JTiIs
IHNlcnZlcl0pLnN0cmlwKCkpCi0KLSAgICBkZWYgY3RjcChzZWxmLCBjdGNwdHlwZSwgdGFyZ2V0
LCBwYXJhbWV0ZXI9IiIpOgotICAgICAgICAiIiJTZW5kIGEgQ1RDUCBjb21tYW5kLiIiIgotICAg
ICAgICBjdGNwdHlwZSA9IGN0Y3B0eXBlLnVwcGVyKCkKLSAgICAgICAgc2VsZi5wcml2bXNnKHRh
cmdldCwgIlwwMDElcyVzXDAwMSIgJSAoY3RjcHR5cGUsIHBhcmFtZXRlciBhbmQgKCIgIiArIHBh
cmFtZXRlcikgb3IgIiIpKQotCi0gICAgZGVmIGN0Y3BfcmVwbHkoc2VsZiwgdGFyZ2V0LCBwYXJh
bWV0ZXIpOgotICAgICAgICAiIiJTZW5kIGEgQ1RDUCBSRVBMWSBjb21tYW5kLiIiIgotICAgICAg
ICBzZWxmLm5vdGljZSh0YXJnZXQsICJcMDAxJXNcMDAxIiAlIHBhcmFtZXRlcikKLQotICAgIGRl
ZiBkaXNjb25uZWN0KHNlbGYsIG1lc3NhZ2U9IiIpOgotICAgICAgICAiIiJIYW5nIHVwIHRoZSBj
b25uZWN0aW9uLgotCi0gICAgICAgIEFyZ3VtZW50czoKLQotICAgICAgICAgICAgbWVzc2FnZSAt
LSBRdWl0IG1lc3NhZ2UuCi0gICAgICAgICIiIgotICAgICAgICBpZiBub3Qgc2VsZi5jb25uZWN0
ZWQ6Ci0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICBzZWxmLmNvbm5lY3RlZCA9IDAKLQot
ICAgICAgICBzZWxmLnF1aXQobWVzc2FnZSkKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBz
ZWxmLnNvY2tldC5jbG9zZSgpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6Ci0gICAgICAg
ICAgICBwYXNzCi0gICAgICAgIHNlbGYuc29ja2V0ID0gTm9uZQotICAgICAgICBzZWxmLl9oYW5k
bGVfZXZlbnQoRXZlbnQoImRpc2Nvbm5lY3QiLCBzZWxmLnNlcnZlciwgIiIsIFttZXNzYWdlXSkp
Ci0KLSAgICBkZWYgZ2xvYm9wcyhzZWxmLCB0ZXh0KToKLSAgICAgICAgIiIiU2VuZCBhIEdMT0JP
UFMgY29tbWFuZC4iIiIKLSAgICAgICAgc2VsZi5zZW5kX3JhdygiR0xPQk9QUyA6IiArIHRleHQp
Ci0KLSAgICBkZWYgaW5mbyhzZWxmLCBzZXJ2ZXI9IiIpOgotICAgICAgICAiIiJTZW5kIGFuIElO
Rk8gY29tbWFuZC4iIiIKLSAgICAgICAgc2VsZi5zZW5kX3JhdygiICIuam9pbihbIklORk8iLCBz
ZXJ2ZXJdKS5zdHJpcCgpKQotCi0gICAgZGVmIGludml0ZShzZWxmLCBuaWNrLCBjaGFubmVsKToK
LSAgICAgICAgIiIiU2VuZCBhbiBJTlZJVEUgY29tbWFuZC4iIiIKLSAgICAgICAgc2VsZi5zZW5k
X3JhdygiICIuam9pbihbIklOVklURSIsIG5pY2ssIGNoYW5uZWxdKS5zdHJpcCgpKQotCi0gICAg
ZGVmIGlzb24oc2VsZiwgbmlja3MpOgotICAgICAgICAiIiJTZW5kIGFuIElTT04gY29tbWFuZC4K
LQotICAgICAgICBBcmd1bWVudHM6Ci0KLSAgICAgICAgICAgIG5pY2tzIC0tIExpc3Qgb2Ygbmlj
a3MuCi0gICAgICAgICIiIgotICAgICAgICBzZWxmLnNlbmRfcmF3KCJJU09OICIgKyAiICIuam9p
bihuaWNrcykpCi0KLSAgICBkZWYgam9pbihzZWxmLCBjaGFubmVsLCBrZXk9IiIpOgotICAgICAg
ICAiIiJTZW5kIGEgSk9JTiBjb21tYW5kLiIiIgotICAgICAgICBzZWxmLnNlbmRfcmF3KCJKT0lO
ICVzJXMiICUgKGNoYW5uZWwsIChrZXkgYW5kICgiICIgKyBrZXkpKSkpCi0KLSAgICBkZWYga2lj
ayhzZWxmLCBjaGFubmVsLCBuaWNrLCBjb21tZW50PSIiKToKLSAgICAgICAgIiIiU2VuZCBhIEtJ
Q0sgY29tbWFuZC4iIiIKLSAgICAgICAgc2VsZi5zZW5kX3JhdygiS0lDSyAlcyAlcyVzIiAlIChj
aGFubmVsLCBuaWNrLCAoY29tbWVudCBhbmQgKCIgOiIgKyBjb21tZW50KSkpKQotCi0gICAgZGVm
IGxpbmtzKHNlbGYsIHJlbW90ZV9zZXJ2ZXI9IiIsIHNlcnZlcl9tYXNrPSIiKToKLSAgICAgICAg
IiIiU2VuZCBhIExJTktTIGNvbW1hbmQuIiIiCi0gICAgICAgIGNvbW1hbmQgPSAiTElOS1MiCi0g
ICAgICAgIGlmIHJlbW90ZV9zZXJ2ZXI6Ci0gICAgICAgICAgICBjb21tYW5kID0gY29tbWFuZCAr
ICIgIiArIHJlbW90ZV9zZXJ2ZXIKLSAgICAgICAgaWYgc2VydmVyX21hc2s6Ci0gICAgICAgICAg
ICBjb21tYW5kID0gY29tbWFuZCArICIgIiArIHNlcnZlcl9tYXNrCi0gICAgICAgIHNlbGYuc2Vu
ZF9yYXcoY29tbWFuZCkKLQotICAgIGRlZiBsaXN0KHNlbGYsIGNoYW5uZWxzPU5vbmUsIHNlcnZl
cj0iIik6Ci0gICAgICAgICIiIlNlbmQgYSBMSVNUIGNvbW1hbmQuIiIiCi0gICAgICAgIGNvbW1h
bmQgPSAiTElTVCIKLSAgICAgICAgaWYgY2hhbm5lbHM6Ci0gICAgICAgICAgICBjb21tYW5kID0g
Y29tbWFuZCArICIgIiArICIsIi5qb2luKGNoYW5uZWxzKQotICAgICAgICBpZiBzZXJ2ZXI6Ci0g
ICAgICAgICAgICBjb21tYW5kID0gY29tbWFuZCArICIgIiArIHNlcnZlcgotICAgICAgICBzZWxm
LnNlbmRfcmF3KGNvbW1hbmQpCi0KLSAgICBkZWYgbHVzZXJzKHNlbGYsIHNlcnZlcj0iIik6Ci0g
ICAgICAgICIiIlNlbmQgYSBMVVNFUlMgY29tbWFuZC4iIiIKLSAgICAgICAgc2VsZi5zZW5kX3Jh
dygiTFVTRVJTIiArIChzZXJ2ZXIgYW5kICgiICIgKyBzZXJ2ZXIpKSkKLQotICAgIGRlZiBtb2Rl
KHNlbGYsIHRhcmdldCwgY29tbWFuZCk6Ci0gICAgICAgICIiIlNlbmQgYSBNT0RFIGNvbW1hbmQu
IiIiCi0gICAgICAgIHNlbGYuc2VuZF9yYXcoIk1PREUgJXMgJXMiICUgKHRhcmdldCwgY29tbWFu
ZCkpCi0KLSAgICBkZWYgbW90ZChzZWxmLCBzZXJ2ZXI9IiIpOgotICAgICAgICAiIiJTZW5kIGFu
IE1PVEQgY29tbWFuZC4iIiIKLSAgICAgICAgc2VsZi5zZW5kX3JhdygiTU9URCIgKyAoc2VydmVy
IGFuZCAoIiAiICsgc2VydmVyKSkpCi0KLSAgICBkZWYgbmFtZXMoc2VsZiwgY2hhbm5lbHM9Tm9u
ZSk6Ci0gICAgICAgICIiIlNlbmQgYSBOQU1FUyBjb21tYW5kLiIiIgotICAgICAgICBzZWxmLnNl
bmRfcmF3KCJOQU1FUyIgKyAoY2hhbm5lbHMgYW5kICgiICIgKyAiLCIuam9pbihjaGFubmVscykp
IG9yICIiKSkKLQotICAgIGRlZiBuaWNrKHNlbGYsIG5ld25pY2spOgotICAgICAgICAiIiJTZW5k
IGEgTklDSyBjb21tYW5kLiIiIgotICAgICAgICBzZWxmLnNlbmRfcmF3KCJOSUNLICIgKyBuZXdu
aWNrKQotCi0gICAgZGVmIG5vdGljZShzZWxmLCB0YXJnZXQsIHRleHQpOgotICAgICAgICAiIiJT
ZW5kIGEgTk9USUNFIGNvbW1hbmQuIiIiCi0gICAgICAgICMgU2hvdWxkIGxpbWl0IGxlbih0ZXh0
KSBoZXJlIQotICAgICAgICBzZWxmLnNlbmRfcmF3KCJOT1RJQ0UgJXMgOiVzIiAlICh0YXJnZXQs
IHRleHQpKQotCi0gICAgZGVmIG9wZXIoc2VsZiwgbmljaywgcGFzc3dvcmQpOgotICAgICAgICAi
IiJTZW5kIGFuIE9QRVIgY29tbWFuZC4iIiIKLSAgICAgICAgc2VsZi5zZW5kX3JhdygiT1BFUiAl
cyAlcyIgJSAobmljaywgcGFzc3dvcmQpKQotCi0gICAgZGVmIHBhcnQoc2VsZiwgY2hhbm5lbHMs
IG1lc3NhZ2U9IiIpOgotICAgICAgICAiIiJTZW5kIGEgUEFSVCBjb21tYW5kLiIiIgotICAgICAg
ICBpZiB0eXBlKGNoYW5uZWxzKSA9PSB0eXBlcy5TdHJpbmdUeXBlOgotICAgICAgICAgICAgc2Vs
Zi5zZW5kX3JhdygiUEFSVCAiICsgY2hhbm5lbHMgKyAobWVzc2FnZSBhbmQgKCIgIiArIG1lc3Nh
Z2UpKSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuc2VuZF9yYXcoIlBBUlQgIiAr
ICIsIi5qb2luKGNoYW5uZWxzKSArIChtZXNzYWdlIGFuZCAoIiAiICsgbWVzc2FnZSkpKQotCi0g
ICAgZGVmIHBhc3NfKHNlbGYsIHBhc3N3b3JkKToKLSAgICAgICAgIiIiU2VuZCBhIFBBU1MgY29t
bWFuZC4iIiIKLSAgICAgICAgc2VsZi5zZW5kX3JhdygiUEFTUyAiICsgcGFzc3dvcmQpCi0KLSAg
ICBkZWYgcGluZyhzZWxmLCB0YXJnZXQsIHRhcmdldDI9IiIpOgotICAgICAgICAiIiJTZW5kIGEg
UElORyBjb21tYW5kLiIiIgotICAgICAgICBzZWxmLnNlbmRfcmF3KCJQSU5HICVzJXMiICUgKHRh
cmdldCwgdGFyZ2V0MiBhbmQgKCIgIiArIHRhcmdldDIpKSkKLQotICAgIGRlZiBwb25nKHNlbGYs
IHRhcmdldCwgdGFyZ2V0Mj0iIik6Ci0gICAgICAgICIiIlNlbmQgYSBQT05HIGNvbW1hbmQuIiIi
Ci0gICAgICAgIHNlbGYuc2VuZF9yYXcoIlBPTkcgJXMlcyIgJSAodGFyZ2V0LCB0YXJnZXQyIGFu
ZCAoIiAiICsgdGFyZ2V0MikpKQotCi0gICAgZGVmIHByaXZtc2coc2VsZiwgdGFyZ2V0LCB0ZXh0
KToKLSAgICAgICAgIiIiU2VuZCBhIFBSSVZNU0cgY29tbWFuZC4iIiIKLSAgICAgICAgIyBTaG91
bGQgbGltaXQgbGVuKHRleHQpIGhlcmUhCi0gICAgICAgIHNlbGYuc2VuZF9yYXcoIlBSSVZNU0cg
JXMgOiVzIiAlICh0YXJnZXQsIHRleHQpKQotCi0gICAgZGVmIHByaXZtc2dfbWFueShzZWxmLCB0
YXJnZXRzLCB0ZXh0KToKLSAgICAgICAgIiIiU2VuZCBhIFBSSVZNU0cgY29tbWFuZCB0byBtdWx0
aXBsZSB0YXJnZXRzLiIiIgotICAgICAgICAjIFNob3VsZCBsaW1pdCBsZW4odGV4dCkgaGVyZSEK
LSAgICAgICAgc2VsZi5zZW5kX3JhdygiUFJJVk1TRyAlcyA6JXMiICUgKCIsIi5qb2luKHRhcmdl
dHMpLCB0ZXh0KSkKLQotICAgIGRlZiBxdWl0KHNlbGYsIG1lc3NhZ2U9IiIpOgotICAgICAgICAi
IiJTZW5kIGEgUVVJVCBjb21tYW5kLiIiIgotICAgICAgICAjIE5vdGUgdGhhdCBtYW55IElSQyBz
ZXJ2ZXJzIGRvbid0IHVzZSB5b3VyIFFVSVQgbWVzc2FnZQotICAgICAgICAjIHVubGVzcyB5b3Un
dmUgYmVlbiBjb25uZWN0ZWQgZm9yIGF0IGxlYXN0IDUgbWludXRlcyEKLSAgICAgICAgc2VsZi5z
ZW5kX3JhdygiUVVJVCIgKyAobWVzc2FnZSBhbmQgKCIgOiIgKyBtZXNzYWdlKSkpCi0KLSAgICBk
ZWYgc2VuZF9yYXcoc2VsZiwgc3RyaW5nKToKLSAgICAgICAgIiIiU2VuZCByYXcgc3RyaW5nIHRv
IHRoZSBzZXJ2ZXIuCi0KLSAgICAgICAgVGhlIHN0cmluZyB3aWxsIGJlIHBhZGRlZCB3aXRoIGFw
cHJvcHJpYXRlIENSIExGLgotICAgICAgICAiIiIKLSAgICAgICAgaWYgc2VsZi5zb2NrZXQgaXMg
Tm9uZToKLSAgICAgICAgICAgIHJhaXNlIFNlcnZlck5vdENvbm5lY3RlZEVycm9yKCJOb3QgY29u
bmVjdGVkLiIpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGlmIHNlbGYuc3NsOgotICAgICAg
ICAgICAgICAgIHNlbGYuc3NsLndyaXRlKHN0cmluZyArICJcclxuIikKLSAgICAgICAgICAgIGVs
c2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQuc2VuZChzdHJpbmcgKyAiXHJcbiIpCi0g
ICAgICAgICAgICBpZiBERUJVRzoKLSAgICAgICAgICAgICAgICBwcmludCgiVE8gU0VSVkVSOiIs
IHN0cmluZykKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKLSAgICAgICAgICAgICMgT3Vj
aCEKLSAgICAgICAgICAgIHNlbGYuZGlzY29ubmVjdCgiQ29ubmVjdGlvbiByZXNldCBieSBwZWVy
LiIpCi0KLSAgICBkZWYgc3F1aXQoc2VsZiwgc2VydmVyLCBjb21tZW50PSIiKToKLSAgICAgICAg
IiIiU2VuZCBhbiBTUVVJVCBjb21tYW5kLiIiIgotICAgICAgICBzZWxmLnNlbmRfcmF3KCJTUVVJ
VCAlcyVzIiAlIChzZXJ2ZXIsIGNvbW1lbnQgYW5kICgiIDoiICsgY29tbWVudCkpKQotCi0gICAg
ZGVmIHN0YXRzKHNlbGYsIHN0YXRzdHlwZSwgc2VydmVyPSIiKToKLSAgICAgICAgIiIiU2VuZCBh
IFNUQVRTIGNvbW1hbmQuIiIiCi0gICAgICAgIHNlbGYuc2VuZF9yYXcoIlNUQVRTICVzJXMiICUg
KHN0YXRzdHlwZSwgc2VydmVyIGFuZCAoIiAiICsgc2VydmVyKSkpCi0KLSAgICBkZWYgdGltZShz
ZWxmLCBzZXJ2ZXI9IiIpOgotICAgICAgICAiIiJTZW5kIGEgVElNRSBjb21tYW5kLiIiIgotICAg
ICAgICBzZWxmLnNlbmRfcmF3KCJUSU1FIiArIChzZXJ2ZXIgYW5kICgiICIgKyBzZXJ2ZXIpKSkK
LQotICAgIGRlZiB0b3BpYyhzZWxmLCBjaGFubmVsLCBuZXdfdG9waWM9Tm9uZSk6Ci0gICAgICAg
ICIiIlNlbmQgYSBUT1BJQyBjb21tYW5kLiIiIgotICAgICAgICBpZiBuZXdfdG9waWMgaXMgTm9u
ZToKLSAgICAgICAgICAgIHNlbGYuc2VuZF9yYXcoIlRPUElDICIgKyBjaGFubmVsKQotICAgICAg
ICBlbHNlOgotICAgICAgICAgICAgc2VsZi5zZW5kX3JhdygiVE9QSUMgJXMgOiVzIiAlIChjaGFu
bmVsLCBuZXdfdG9waWMpKQotCi0gICAgZGVmIHRyYWNlKHNlbGYsIHRhcmdldD0iIik6Ci0gICAg
ICAgICIiIlNlbmQgYSBUUkFDRSBjb21tYW5kLiIiIgotICAgICAgICBzZWxmLnNlbmRfcmF3KCJU
UkFDRSIgKyAodGFyZ2V0IGFuZCAoIiAiICsgdGFyZ2V0KSkpCi0KLSAgICBkZWYgdXNlcihzZWxm
LCB1c2VybmFtZSwgcmVhbG5hbWUpOgotICAgICAgICAiIiJTZW5kIGEgVVNFUiBjb21tYW5kLiIi
IgotICAgICAgICBzZWxmLnNlbmRfcmF3KCJVU0VSICVzIDAgKiA6JXMiICUgKHVzZXJuYW1lLCBy
ZWFsbmFtZSkpCi0KLSAgICBkZWYgdXNlcmhvc3Qoc2VsZiwgbmlja3MpOgotICAgICAgICAiIiJT
ZW5kIGEgVVNFUkhPU1QgY29tbWFuZC4iIiIKLSAgICAgICAgc2VsZi5zZW5kX3JhdygiVVNFUkhP
U1QgIiArICIsIi5qb2luKG5pY2tzKSkKLQotICAgIGRlZiB1c2VycyhzZWxmLCBzZXJ2ZXI9IiIp
OgotICAgICAgICAiIiJTZW5kIGEgVVNFUlMgY29tbWFuZC4iIiIKLSAgICAgICAgc2VsZi5zZW5k
X3JhdygiVVNFUlMiICsgKHNlcnZlciBhbmQgKCIgIiArIHNlcnZlcikpKQotCi0gICAgZGVmIHZl
cnNpb24oc2VsZiwgc2VydmVyPSIiKToKLSAgICAgICAgIiIiU2VuZCBhIFZFUlNJT04gY29tbWFu
ZC4iIiIKLSAgICAgICAgc2VsZi5zZW5kX3JhdygiVkVSU0lPTiIgKyAoc2VydmVyIGFuZCAoIiAi
ICsgc2VydmVyKSkpCi0KLSAgICBkZWYgd2FsbG9wcyhzZWxmLCB0ZXh0KToKLSAgICAgICAgIiIi
U2VuZCBhIFdBTExPUFMgY29tbWFuZC4iIiIKLSAgICAgICAgc2VsZi5zZW5kX3JhdygiV0FMTE9Q
UyA6IiArIHRleHQpCi0KLSAgICBkZWYgd2hvKHNlbGYsIHRhcmdldD0iIiwgb3A9IiIpOgotICAg
ICAgICAiIiJTZW5kIGEgV0hPIGNvbW1hbmQuIiIiCi0gICAgICAgIHNlbGYuc2VuZF9yYXcoIldI
TyVzJXMiICUgKHRhcmdldCBhbmQgKCIgIiArIHRhcmdldCksIG9wIGFuZCAoIiBvIikpKQotCi0g
ICAgZGVmIHdob2lzKHNlbGYsIHRhcmdldHMpOgotICAgICAgICAiIiJTZW5kIGEgV0hPSVMgY29t
bWFuZC4iIiIKLSAgICAgICAgc2VsZi5zZW5kX3JhdygiV0hPSVMgIiArICIsIi5qb2luKHRhcmdl
dHMpKQotCi0gICAgZGVmIHdob3dhcyhzZWxmLCBuaWNrLCBtYXg9IiIsIHNlcnZlcj0iIik6Ci0g
ICAgICAgICIiIlNlbmQgYSBXSE9XQVMgY29tbWFuZC4iIiIKLSAgICAgICAgc2VsZi5zZW5kX3Jh
dygiV0hPV0FTICVzJXMlcyIgJSAobmljaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbWF4IGFuZCAoIiAiICsgbWF4KSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2VydmVyIGFuZCAoIiAiICsgc2VydmVyKSkpCi0KLWNsYXNzIERD
Q0Nvbm5lY3Rpb25FcnJvcihJUkNFcnJvcik6Ci0gICAgcGFzcwotCi0KLWNsYXNzIERDQ0Nvbm5l
Y3Rpb24oQ29ubmVjdGlvbik6Ci0gICAgIiIiVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgRENDIGNv
bm5lY3Rpb24uCi0KLSAgICBEQ0NDb25uZWN0aW9uIG9iamVjdHMgYXJlIGluc3RhbnRpYXRlZCBi
eSBjYWxsaW5nIHRoZSBkY2MKLSAgICBtZXRob2Qgb24gYW4gSVJDIG9iamVjdC4KLSAgICAiIiIK
LSAgICBkZWYgX19pbml0X18oc2VsZiwgaXJjbGlib2JqLCBkY2N0eXBlKToKLSAgICAgICAgQ29u
bmVjdGlvbi5fX2luaXRfXyhzZWxmLCBpcmNsaWJvYmopCi0gICAgICAgIHNlbGYuY29ubmVjdGVk
ID0gMAotICAgICAgICBzZWxmLnBhc3NpdmUgPSAwCi0gICAgICAgIHNlbGYuZGNjdHlwZSA9IGRj
Y3R5cGUKLSAgICAgICAgc2VsZi5wZWVyYWRkcmVzcyA9IE5vbmUKLSAgICAgICAgc2VsZi5wZWVy
cG9ydCA9IE5vbmUKLQotICAgIGRlZiBjb25uZWN0KHNlbGYsIGFkZHJlc3MsIHBvcnQpOgotICAg
ICAgICAiIiJDb25uZWN0L3JlY29ubmVjdCB0byBhIERDQyBwZWVyLgotCi0gICAgICAgIEFyZ3Vt
ZW50czoKLSAgICAgICAgICAgIGFkZHJlc3MgLS0gSG9zdC9JUCBhZGRyZXNzIG9mIHRoZSBwZWVy
LgotCi0gICAgICAgICAgICBwb3J0IC0tIFRoZSBwb3J0IG51bWJlciB0byBjb25uZWN0IHRvLgot
Ci0gICAgICAgIFJldHVybnMgdGhlIERDQ0Nvbm5lY3Rpb24gb2JqZWN0LgotICAgICAgICAiIiIK
LSAgICAgICAgc2VsZi5wZWVyYWRkcmVzcyA9IHNvY2tldC5nZXRob3N0YnluYW1lKGFkZHJlc3Mp
Ci0gICAgICAgIHNlbGYucGVlcnBvcnQgPSBwb3J0Ci0gICAgICAgIHNlbGYuc29ja2V0ID0gTm9u
ZQotICAgICAgICBzZWxmLnByZXZpb3VzX2J1ZmZlciA9ICIiCi0gICAgICAgIHNlbGYuaGFuZGxl
cnMgPSB7fQotICAgICAgICBzZWxmLnNvY2tldCA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lO
RVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKLSAgICAgICAgc2VsZi5wYXNzaXZlID0gMAotICAgICAg
ICB0cnk6Ci0gICAgICAgICAgICBzZWxmLnNvY2tldC5jb25uZWN0KChzZWxmLnBlZXJhZGRyZXNz
LCBzZWxmLnBlZXJwb3J0KSkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyB4OgotICAg
ICAgICAgICAgcmFpc2UgRENDQ29ubmVjdGlvbkVycm9yKCJDb3VsZG4ndCBjb25uZWN0IHRvIHNv
Y2tldDogJXMiICUgeCkKLSAgICAgICAgc2VsZi5jb25uZWN0ZWQgPSAxCi0gICAgICAgIGlmIHNl
bGYuaXJjbGlib2JqLmZuX3RvX2FkZF9zb2NrZXQ6Ci0gICAgICAgICAgICBzZWxmLmlyY2xpYm9i
ai5mbl90b19hZGRfc29ja2V0KHNlbGYuc29ja2V0KQotICAgICAgICByZXR1cm4gc2VsZgotCi0g
ICAgZGVmIGxpc3RlbihzZWxmKToKLSAgICAgICAgIiIiV2FpdCBmb3IgYSBjb25uZWN0aW9uL3Jl
Y29ubmVjdGlvbiBmcm9tIGEgRENDIHBlZXIuCi0KLSAgICAgICAgUmV0dXJucyB0aGUgRENDQ29u
bmVjdGlvbiBvYmplY3QuCi0KLSAgICAgICAgVGhlIGxvY2FsIElQIGFkZHJlc3MgYW5kIHBvcnQg
YXJlIGF2YWlsYWJsZSBhcwotICAgICAgICBzZWxmLmxvY2FsYWRkcmVzcyBhbmQgc2VsZi5sb2Nh
bHBvcnQuICBBZnRlciBjb25uZWN0aW9uIGZyb20gYQotICAgICAgICBwZWVyLCB0aGUgcGVlciBh
ZGRyZXNzIGFuZCBwb3J0IGFyZSBhdmFpbGFibGUgYXMKLSAgICAgICAgc2VsZi5wZWVyYWRkcmVz
cyBhbmQgc2VsZi5wZWVycG9ydC4KLSAgICAgICAgIiIiCi0gICAgICAgIHNlbGYucHJldmlvdXNf
YnVmZmVyID0gIiIKLSAgICAgICAgc2VsZi5oYW5kbGVycyA9IHt9Ci0gICAgICAgIHNlbGYuc29j
a2V0ID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQot
ICAgICAgICBzZWxmLnBhc3NpdmUgPSAxCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYu
c29ja2V0LmJpbmQoKHNvY2tldC5nZXRob3N0YnluYW1lKHNvY2tldC5nZXRob3N0bmFtZSgpKSwg
MCkpCi0gICAgICAgICAgICBzZWxmLmxvY2FsYWRkcmVzcywgc2VsZi5sb2NhbHBvcnQgPSBzZWxm
LnNvY2tldC5nZXRzb2NrbmFtZSgpCi0gICAgICAgICAgICBzZWxmLnNvY2tldC5saXN0ZW4oMTAp
Ci0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgeDoKLSAgICAgICAgICAgIHJhaXNlIERD
Q0Nvbm5lY3Rpb25FcnJvcigiQ291bGRuJ3QgYmluZCBzb2NrZXQ6ICVzIiAlIHgpCi0gICAgICAg
IHJldHVybiBzZWxmCi0KLSAgICBkZWYgZGlzY29ubmVjdChzZWxmLCBtZXNzYWdlPSIiKToKLSAg
ICAgICAgIiIiSGFuZyB1cCB0aGUgY29ubmVjdGlvbiBhbmQgY2xvc2UgdGhlIG9iamVjdC4KLQot
ICAgICAgICBBcmd1bWVudHM6Ci0KLSAgICAgICAgICAgIG1lc3NhZ2UgLS0gUXVpdCBtZXNzYWdl
LgotICAgICAgICAiIiIKLSAgICAgICAgaWYgbm90IHNlbGYuY29ubmVjdGVkOgotICAgICAgICAg
ICAgcmV0dXJuCi0KLSAgICAgICAgc2VsZi5jb25uZWN0ZWQgPSAwCi0gICAgICAgIHRyeToKLSAg
ICAgICAgICAgIHNlbGYuc29ja2V0LmNsb3NlKCkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJv
cjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgc2VsZi5zb2NrZXQgPSBOb25lCi0gICAgICAg
IHNlbGYuaXJjbGlib2JqLl9oYW5kbGVfZXZlbnQoCi0gICAgICAgICAgICBzZWxmLAotICAgICAg
ICAgICAgRXZlbnQoImRjY19kaXNjb25uZWN0Iiwgc2VsZi5wZWVyYWRkcmVzcywgIiIsIFttZXNz
YWdlXSkpCi0gICAgICAgIHNlbGYuaXJjbGlib2JqLl9yZW1vdmVfY29ubmVjdGlvbihzZWxmKQot
Ci0gICAgZGVmIHByb2Nlc3NfZGF0YShzZWxmKToKLSAgICAgICAgIiIiW0ludGVybmFsXSIiIgot
Ci0gICAgICAgIGlmIHNlbGYucGFzc2l2ZSBhbmQgbm90IHNlbGYuY29ubmVjdGVkOgotICAgICAg
ICAgICAgY29ubiwgKHNlbGYucGVlcmFkZHJlc3MsIHNlbGYucGVlcnBvcnQpID0gc2VsZi5zb2Nr
ZXQuYWNjZXB0KCkKLSAgICAgICAgICAgIHNlbGYuc29ja2V0LmNsb3NlKCkKLSAgICAgICAgICAg
IHNlbGYuc29ja2V0ID0gY29ubgotICAgICAgICAgICAgc2VsZi5jb25uZWN0ZWQgPSAxCi0gICAg
ICAgICAgICBpZiBERUJVRzoKLSAgICAgICAgICAgICAgICBwcmludCgiRENDIGNvbm5lY3Rpb24g
ZnJvbSAlczolZCIgJSAoc2VsZi5wZWVyYWRkcmVzcywgc2VsZi5wZWVycG9ydCkpCi0gICAgICAg
ICAgICBzZWxmLmlyY2xpYm9iai5faGFuZGxlX2V2ZW50KAotICAgICAgICAgICAgICAgIHNlbGYs
Ci0gICAgICAgICAgICAgICAgRXZlbnQoImRjY19jb25uZWN0Iiwgc2VsZi5wZWVyYWRkcmVzcywg
Tm9uZSwgTm9uZSkpCi0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICB0cnk6Ci0gICAgICAg
ICAgICBuZXdfZGF0YSA9IHNlbGYuc29ja2V0LnJlY3YoMioqMTQpCi0gICAgICAgIGV4Y2VwdCBz
b2NrZXQuZXJyb3I6Ci0gICAgICAgICAgICAjIFRoZSBzZXJ2ZXIgaHVuZyB1cC4KLSAgICAgICAg
ICAgIHNlbGYuZGlzY29ubmVjdCgiQ29ubmVjdGlvbiByZXNldCBieSBwZWVyIikKLSAgICAgICAg
ICAgIHJldHVybgotICAgICAgICBpZiBub3QgbmV3X2RhdGE6Ci0gICAgICAgICAgICAjIFJlYWQg
bm90aGluZzogY29ubmVjdGlvbiBtdXN0IGJlIGRvd24uCi0gICAgICAgICAgICBzZWxmLmRpc2Nv
bm5lY3QoIkNvbm5lY3Rpb24gcmVzZXQgYnkgcGVlciIpCi0gICAgICAgICAgICByZXR1cm4KLQot
ICAgICAgICBpZiBzZWxmLmRjY3R5cGUgPT0gImNoYXQiOgotICAgICAgICAgICAgIyBUaGUgc3Bl
Y2lmaWNhdGlvbiBzYXlzIGxpbmVzIGFyZSB0ZXJtaW5hdGVkIHdpdGggTEYsIGJ1dAotICAgICAg
ICAgICAgIyBpdCBzZWVtcyBzYWZlciB0byBoYW5kbGUgQ1IgTEYgdGVybWluYXRpb25zIHRvby4K
LSAgICAgICAgICAgIGNodW5rcyA9IF9saW5lc2VwX3JlZ2V4cC5zcGxpdChzZWxmLnByZXZpb3Vz
X2J1ZmZlciArIG5ld19kYXRhKQotCi0gICAgICAgICAgICAjIFNhdmUgdGhlIGxhc3QsIHVuZmlu
aXNoZWQgbGluZS4KLSAgICAgICAgICAgIHNlbGYucHJldmlvdXNfYnVmZmVyID0gY2h1bmtzWy0x
XQotICAgICAgICAgICAgaWYgbGVuKHNlbGYucHJldmlvdXNfYnVmZmVyKSA+IDIqKjE0OgotICAg
ICAgICAgICAgICAgICMgQmFkIHBlZXIhIE5hdWdodHkgcGVlciEKLSAgICAgICAgICAgICAgICBz
ZWxmLmRpc2Nvbm5lY3QoKQotICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgY2h1
bmtzID0gY2h1bmtzWzotMV0KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGNodW5rcyA9IFtu
ZXdfZGF0YV0KLQotICAgICAgICBjb21tYW5kID0gImRjY21zZyIKLSAgICAgICAgcHJlZml4ID0g
c2VsZi5wZWVyYWRkcmVzcwotICAgICAgICB0YXJnZXQgPSBOb25lCi0gICAgICAgIGZvciBjaHVu
ayBpbiBjaHVua3M6Ci0gICAgICAgICAgICBpZiBERUJVRzoKLSAgICAgICAgICAgICAgICBwcmlu
dCgiRlJPTSBQRUVSOiIsIGNodW5rXykKLSAgICAgICAgICAgIGFyZ3VtZW50cyA9IFtjaHVua10K
LSAgICAgICAgICAgIGlmIERFQlVHOgotICAgICAgICAgICAgICAgIHByaW50KCJjb21tYW5kOiAl
cywgc291cmNlOiAlcywgdGFyZ2V0OiAlcywgYXJndW1lbnRzOiAlcyIgJSAoY29tbWFuZCwgcHJl
Zml4LCB0YXJnZXQsIGFyZ3VtZW50cykpCi0gICAgICAgICAgICBzZWxmLmlyY2xpYm9iai5faGFu
ZGxlX2V2ZW50KAotICAgICAgICAgICAgICAgIHNlbGYsCi0gICAgICAgICAgICAgICAgRXZlbnQo
Y29tbWFuZCwgcHJlZml4LCB0YXJnZXQsIGFyZ3VtZW50cykpCi0KLSAgICBkZWYgX2dldF9zb2Nr
ZXQoc2VsZik6Ci0gICAgICAgICIiIltJbnRlcm5hbF0iIiIKLSAgICAgICAgcmV0dXJuIHNlbGYu
c29ja2V0Ci0KLSAgICBkZWYgcHJpdm1zZyhzZWxmLCBzdHJpbmcpOgotICAgICAgICAiIiJTZW5k
IGRhdGEgdG8gRENDIHBlZXIuCi0KLSAgICAgICAgVGhlIHN0cmluZyB3aWxsIGJlIHBhZGRlZCB3
aXRoIGFwcHJvcHJpYXRlIExGIGlmIGl0J3MgYSBEQ0MKLSAgICAgICAgQ0hBVCBzZXNzaW9uLgot
ICAgICAgICAiIiIKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5zb2NrZXQuc2VuZChz
dHJpbmcpCi0gICAgICAgICAgICBpZiBzZWxmLmRjY3R5cGUgPT0gImNoYXQiOgotICAgICAgICAg
ICAgICAgIHNlbGYuc29ja2V0LnNlbmQoIlxuIikKLSAgICAgICAgICAgIGlmIERFQlVHOgotICAg
ICAgICAgICAgICAgIHByaW50KCJUTyBQRUVSOiAlc1xuIiAlIHN0cmluZykKLSAgICAgICAgZXhj
ZXB0IHNvY2tldC5lcnJvcjoKLSAgICAgICAgICAgICMgT3VjaCEKLSAgICAgICAgICAgIHNlbGYu
ZGlzY29ubmVjdCgiQ29ubmVjdGlvbiByZXNldCBieSBwZWVyLiIpCi0KLWNsYXNzIFNpbXBsZUlS
Q0NsaWVudDoKLSAgICAiIiJBIHNpbXBsZSBzaW5nbGUtc2VydmVyIElSQyBjbGllbnQgY2xhc3Mu
Ci0KLSAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYW4gb2JqZWN0LW9yaWVudGVkIHdyYXBwZXIg
b2YgdGhlIElSQwotICAgIGZyYW1ld29yay4gIEEgcmVhbCBJUkMgY2xpZW50IGNhbiBiZSBtYWRl
IGJ5IHN1YmNsYXNzaW5nIHRoaXMKLSAgICBjbGFzcyBhbmQgYWRkaW5nIGFwcHJvcHJpYXRlIG1l
dGhvZHMuCi0KLSAgICBUaGUgbWV0aG9kIG9uX2pvaW4gd2lsbCBiZSBjYWxsZWQgd2hlbiBhICJq
b2luIiBldmVudCBpcyBjcmVhdGVkCi0gICAgKHdoaWNoIGlzIGRvbmUgd2hlbiB0aGUgc2VydmVy
IHNlbmRzIGEgSk9JTiBtZXNzc2FnZS9jb21tYW5kKSwKLSAgICBvbl9wcml2bXNnIHdpbGwgYmUg
Y2FsbGVkIGZvciAicHJpdm1zZyIgZXZlbnRzLCBhbmQgc28gb24uICBUaGUKLSAgICBoYW5kbGVy
IG1ldGhvZHMgZ2V0IHR3byBhcmd1bWVudHM6IHRoZSBjb25uZWN0aW9uIG9iamVjdCAoc2FtZSBh
cwotICAgIHNlbGYuY29ubmVjdGlvbikgYW5kIHRoZSBldmVudCBvYmplY3QuCi0KLSAgICBJbnN0
YW5jZSBhdHRyaWJ1dGVzIHRoYXQgY2FuIGJlIHVzZWQgYnkgc3ViIGNsYXNzZXM6Ci0KLSAgICAg
ICAgaXJjb2JqIC0tIFRoZSBJUkMgaW5zdGFuY2UuCi0KLSAgICAgICAgY29ubmVjdGlvbiAtLSBU
aGUgU2VydmVyQ29ubmVjdGlvbiBpbnN0YW5jZS4KLQotICAgICAgICBkY2NfY29ubmVjdGlvbnMg
LS0gQSBsaXN0IG9mIERDQ0Nvbm5lY3Rpb24gaW5zdGFuY2VzLgotICAgICIiIgotICAgIGRlZiBf
X2luaXRfXyhzZWxmKToKLSAgICAgICAgc2VsZi5pcmNvYmogPSBJUkMoKQotICAgICAgICBzZWxm
LmNvbm5lY3Rpb24gPSBzZWxmLmlyY29iai5zZXJ2ZXIoKQotICAgICAgICBzZWxmLmRjY19jb25u
ZWN0aW9ucyA9IFtdCi0gICAgICAgIHNlbGYuaXJjb2JqLmFkZF9nbG9iYWxfaGFuZGxlcigiYWxs
X2V2ZW50cyIsIHNlbGYuX2Rpc3BhdGNoZXIsIC0xMCkKLSAgICAgICAgc2VsZi5pcmNvYmouYWRk
X2dsb2JhbF9oYW5kbGVyKCJkY2NfZGlzY29ubmVjdCIsIHNlbGYuX2RjY19kaXNjb25uZWN0LCAt
MTApCi0KLSAgICBkZWYgX2Rpc3BhdGNoZXIoc2VsZiwgYywgZSk6Ci0gICAgICAgICIiIltJbnRl
cm5hbF0iIiIKLSAgICAgICAgbSA9ICJvbl8iICsgZS5ldmVudHR5cGUoKQotICAgICAgICBpZiBo
YXNhdHRyKHNlbGYsIG0pOgotICAgICAgICAgICAgZ2V0YXR0cihzZWxmLCBtKShjLCBlKQotCi0g
ICAgZGVmIF9kY2NfZGlzY29ubmVjdChzZWxmLCBjLCBlKToKLSAgICAgICAgc2VsZi5kY2NfY29u
bmVjdGlvbnMucmVtb3ZlKGMpCi0KLSAgICBkZWYgY29ubmVjdChzZWxmLCBzZXJ2ZXIsIHBvcnQs
IG5pY2tuYW1lLCBwYXNzd29yZD1Ob25lLCB1c2VybmFtZT1Ob25lLAotICAgICAgICAgICAgICAg
IGlyY25hbWU9Tm9uZSwgbG9jYWxhZGRyZXNzPSIiLCBsb2NhbHBvcnQ9MCwgc3NsPUZhbHNlLCBp
cHY2PUZhbHNlKToKLSAgICAgICAgIiIiQ29ubmVjdC9yZWNvbm5lY3QgdG8gYSBzZXJ2ZXIuCi0K
LSAgICAgICAgQXJndW1lbnRzOgotCi0gICAgICAgICAgICBzZXJ2ZXIgLS0gU2VydmVyIG5hbWUu
Ci0KLSAgICAgICAgICAgIHBvcnQgLS0gUG9ydCBudW1iZXIuCi0KLSAgICAgICAgICAgIG5pY2tu
YW1lIC0tIFRoZSBuaWNrbmFtZS4KLQotICAgICAgICAgICAgcGFzc3dvcmQgLS0gUGFzc3dvcmQg
KGlmIGFueSkuCi0KLSAgICAgICAgICAgIHVzZXJuYW1lIC0tIFRoZSB1c2VybmFtZS4KLQotICAg
ICAgICAgICAgaXJjbmFtZSAtLSBUaGUgSVJDIG5hbWUuCi0KLSAgICAgICAgICAgIGxvY2FsYWRk
cmVzcyAtLSBCaW5kIHRoZSBjb25uZWN0aW9uIHRvIGEgc3BlY2lmaWMgbG9jYWwgSVAgYWRkcmVz
cy4KLQotICAgICAgICAgICAgbG9jYWxwb3J0IC0tIEJpbmQgdGhlIGNvbm5lY3Rpb24gdG8gYSBz
cGVjaWZpYyBsb2NhbCBwb3J0LgotCi0gICAgICAgICAgICBzc2wgLS0gRW5hYmxlIHN1cHBvcnQg
Zm9yIHNzbC4KLQotICAgICAgICAgICAgaXB2NiAtLSBFbmFibGUgc3VwcG9ydCBmb3IgaXB2Ni4K
LQotICAgICAgICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgdG8gcmVjb25uZWN0IGEgY2xv
c2VkIGNvbm5lY3Rpb24uCi0gICAgICAgICIiIgotICAgICAgICBzZWxmLmNvbm5lY3Rpb24uY29u
bmVjdChzZXJ2ZXIsIHBvcnQsIG5pY2tuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwYXNzd29yZCwgdXNlcm5hbWUsIGlyY25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxvY2FsYWRkcmVzcywgbG9jYWxwb3J0LCBzc2wsIGlwdjYpCi0KLSAgICBkZWYg
ZGNjX2Nvbm5lY3Qoc2VsZiwgYWRkcmVzcywgcG9ydCwgZGNjdHlwZT0iY2hhdCIpOgotICAgICAg
ICAiIiJDb25uZWN0IHRvIGEgRENDIHBlZXIuCi0KLSAgICAgICAgQXJndW1lbnRzOgotCi0gICAg
ICAgICAgICBhZGRyZXNzIC0tIElQIGFkZHJlc3Mgb2YgdGhlIHBlZXIuCi0KLSAgICAgICAgICAg
IHBvcnQgLS0gUG9ydCB0byBjb25uZWN0IHRvLgotCi0gICAgICAgIFJldHVybnMgYSBEQ0NDb25u
ZWN0aW9uIGluc3RhbmNlLgotICAgICAgICAiIiIKLSAgICAgICAgZGNjID0gc2VsZi5pcmNvYmou
ZGNjKGRjY3R5cGUpCi0gICAgICAgIHNlbGYuZGNjX2Nvbm5lY3Rpb25zLmFwcGVuZChkY2MpCi0g
ICAgICAgIGRjYy5jb25uZWN0KGFkZHJlc3MsIHBvcnQpCi0gICAgICAgIHJldHVybiBkY2MKLQot
ICAgIGRlZiBkY2NfbGlzdGVuKHNlbGYsIGRjY3R5cGU9ImNoYXQiKToKLSAgICAgICAgIiIiTGlz
dGVuIGZvciBjb25uZWN0aW9ucyBmcm9tIGEgRENDIHBlZXIuCi0KLSAgICAgICAgUmV0dXJucyBh
IERDQ0Nvbm5lY3Rpb24gaW5zdGFuY2UuCi0gICAgICAgICIiIgotICAgICAgICBkY2MgPSBzZWxm
LmlyY29iai5kY2MoZGNjdHlwZSkKLSAgICAgICAgc2VsZi5kY2NfY29ubmVjdGlvbnMuYXBwZW5k
KGRjYykKLSAgICAgICAgZGNjLmxpc3RlbigpCi0gICAgICAgIHJldHVybiBkY2MKLQotICAgIGRl
ZiBzdGFydChzZWxmKToKLSAgICAgICAgIiIiU3RhcnQgdGhlIElSQyBjbGllbnQuIiIiCi0gICAg
ICAgIHNlbGYuaXJjb2JqLnByb2Nlc3NfZm9yZXZlcigpCi0KLQotY2xhc3MgRXZlbnQ6Ci0gICAg
IiIiQ2xhc3MgcmVwcmVzZW50aW5nIGFuIElSQyBldmVudC4iIiIKLSAgICBkZWYgX19pbml0X18o
c2VsZiwgZXZlbnR0eXBlLCBzb3VyY2UsIHRhcmdldCwgYXJndW1lbnRzPU5vbmUpOgotICAgICAg
ICAiIiJDb25zdHJ1Y3RvciBvZiBFdmVudCBvYmplY3RzLgotCi0gICAgICAgIEFyZ3VtZW50czoK
LQotICAgICAgICAgICAgZXZlbnR0eXBlIC0tIEEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGV2ZW50
LgotCi0gICAgICAgICAgICBzb3VyY2UgLS0gVGhlIG9yaWdpbmF0b3Igb2YgdGhlIGV2ZW50IChh
IG5pY2sgbWFzayBvciBhIHNlcnZlcikuCi0KLSAgICAgICAgICAgIHRhcmdldCAtLSBUaGUgdGFy
Z2V0IG9mIHRoZSBldmVudCAoYSBuaWNrIG9yIGEgY2hhbm5lbCkuCi0KLSAgICAgICAgICAgIGFy
Z3VtZW50cyAtLSBBbnkgZXZlbnQgc3BlY2lmaWMgYXJndW1lbnRzLgotICAgICAgICAiIiIKLSAg
ICAgICAgc2VsZi5fZXZlbnR0eXBlID0gZXZlbnR0eXBlCi0gICAgICAgIHNlbGYuX3NvdXJjZSA9
IHNvdXJjZQotICAgICAgICBzZWxmLl90YXJnZXQgPSB0YXJnZXQKLSAgICAgICAgaWYgYXJndW1l
bnRzOgotICAgICAgICAgICAgc2VsZi5fYXJndW1lbnRzID0gYXJndW1lbnRzCi0gICAgICAgIGVs
c2U6Ci0gICAgICAgICAgICBzZWxmLl9hcmd1bWVudHMgPSBbXQotCi0gICAgZGVmIGV2ZW50dHlw
ZShzZWxmKToKLSAgICAgICAgIiIiR2V0IHRoZSBldmVudCB0eXBlLiIiIgotICAgICAgICByZXR1
cm4gc2VsZi5fZXZlbnR0eXBlCi0KLSAgICBkZWYgc291cmNlKHNlbGYpOgotICAgICAgICAiIiJH
ZXQgdGhlIGV2ZW50IHNvdXJjZS4iIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuX3NvdXJjZQotCi0g
ICAgZGVmIHRhcmdldChzZWxmKToKLSAgICAgICAgIiIiR2V0IHRoZSBldmVudCB0YXJnZXQuIiIi
Ci0gICAgICAgIHJldHVybiBzZWxmLl90YXJnZXQKLQotICAgIGRlZiBhcmd1bWVudHMoc2VsZik6
Ci0gICAgICAgICIiIkdldCB0aGUgZXZlbnQgYXJndW1lbnRzLiIiIgotICAgICAgICByZXR1cm4g
c2VsZi5fYXJndW1lbnRzCi0KLV9MT1dfTEVWRUxfUVVPVEUgPSAiXDAyMCIKLV9DVENQX0xFVkVM
X1FVT1RFID0gIlwxMzQiCi1fQ1RDUF9ERUxJTUlURVIgPSAiXDAwMSIKLQotX2xvd19sZXZlbF9t
YXBwaW5nID0gewotICAgICIwIjogIlwwMDAiLAotICAgICJuIjogIlxuIiwKLSAgICAiciI6ICJc
ciIsCi0gICAgX0xPV19MRVZFTF9RVU9URTogX0xPV19MRVZFTF9RVU9URQotfQotCi1fbG93X2xl
dmVsX3JlZ2V4cCA9IHJlLmNvbXBpbGUoX0xPV19MRVZFTF9RVU9URSArICIoLikiKQotCi1kZWYg
bWFza19tYXRjaGVzKG5pY2ssIG1hc2spOgotICAgICIiIkNoZWNrIGlmIGEgbmljayBtYXRjaGVz
IGEgbWFzay4KLQotICAgIFJldHVybnMgdHJ1ZSBpZiB0aGUgbmljayBtYXRjaGVzLCBvdGhlcndp
c2UgZmFsc2UuCi0gICAgIiIiCi0gICAgbmljayA9IGlyY19sb3dlcihuaWNrKQotICAgIG1hc2sg
PSBpcmNfbG93ZXIobWFzaykKLSAgICBtYXNrID0gbWFzay5yZXBsYWNlKCJcXCIsICJcXFxcIikK
LSAgICBmb3IgY2ggaW4gIi4kfFtdKCl7fSsiOgotICAgICAgICBtYXNrID0gbWFzay5yZXBsYWNl
KGNoLCAiXFwiICsgY2gpCi0gICAgbWFzayA9IG1hc2sucmVwbGFjZSgiPyIsICIuIikKLSAgICBt
YXNrID0gbWFzay5yZXBsYWNlKCIqIiwgIi4qIikKLSAgICByID0gcmUuY29tcGlsZShtYXNrLCBy
ZS5JR05PUkVDQVNFKQotICAgIHJldHVybiByLm1hdGNoKG5pY2spCi0KLV9zcGVjaWFsID0gIi1b
XVxcYF57fSIKLW5pY2tfY2hhcmFjdGVycyA9IHN0cmluZy5hc2NpaV9sZXR0ZXJzICsgc3RyaW5n
LmRpZ2l0cyArIF9zcGVjaWFsCi0KLWlmIHN5cy52ZXJzaW9uX2luZm8gPiAoMywgMCk6Ci0gICAg
X2lyY3N0cmluZ190cmFuc2xhdGlvbiA9IHN0ci5tYWtldHJhbnMoc3RyaW5nLmFzY2lpX3VwcGVy
Y2FzZSArICJbXVxcXiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RyaW5nLmFzY2lpX2xvd2VyY2FzZSArICJ7fXx+IikKLWVsc2U6Ci0gICAgX2lyY3N0
cmluZ190cmFuc2xhdGlvbiA9IHN0cmluZy5tYWtldHJhbnMoc3RyaW5nLmFzY2lpX3VwcGVyY2Fz
ZSArICJbXVxcXiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RyaW5nLmFzY2lpX2xvd2VyY2FzZSArICJ7fXx+IikKLQotZGVmIGlyY19sb3dlcihzKToK
LSAgICAiIiJSZXR1cm5zIGEgbG93ZXJjYXNlZCBzdHJpbmcuCi0KLSAgICBUaGUgZGVmaW5pdGlv
biBvZiBsb3dlcmNhc2VkIGNvbWVzIGZyb20gdGhlIElSQyBzcGVjaWZpY2F0aW9uIChSRkMKLSAg
ICAxNDU5KS4KLSAgICAiIiIKLSAgICByZXR1cm4gcy50cmFuc2xhdGUoX2lyY3N0cmluZ190cmFu
c2xhdGlvbikKLQotZGVmIF9jdGNwX2RlcXVvdGUobWVzc2FnZSk6Ci0gICAgIiIiW0ludGVybmFs
XSBEZXF1b3RlIGEgbWVzc2FnZSBhY2NvcmRpbmcgdG8gQ1RDUCBzcGVjaWZpY2F0aW9ucy4KLQot
ICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIGEgbGlzdCB3aGVyZSBlYWNoIGVsZW1lbnQgY2FuIGJl
IGVpdGhlciBhCi0gICAgc3RyaW5nIChub3JtYWwgbWVzc2FnZSkgb3IgYSB0dXBsZSBvZiBvbmUg
b3IgdHdvIHN0cmluZ3MgKHRhZ2dlZAotICAgIG1lc3NhZ2VzKS4gIElmIGEgdHVwbGUgaGFzIG9u
bHkgb25lIGVsZW1lbnQgKGllIGlzIGEgc2luZ2xldG9uKSwKLSAgICB0aGF0IGVsZW1lbnQgaXMg
dGhlIHRhZzsgb3RoZXJ3aXNlIHRoZSB0dXBsZSBoYXMgdHdvIGVsZW1lbnRzOiB0aGUKLSAgICB0
YWcgYW5kIHRoZSBkYXRhLgotCi0gICAgQXJndW1lbnRzOgotCi0gICAgICAgIG1lc3NhZ2UgLS0g
VGhlIG1lc3NhZ2UgdG8gYmUgZGVjb2RlZC4KLSAgICAiIiIKLQotICAgIGRlZiBfbG93X2xldmVs
X3JlcGxhY2UobWF0Y2hfb2JqKToKLSAgICAgICAgY2ggPSBtYXRjaF9vYmouZ3JvdXAoMSkKLQot
ICAgICAgICAjIElmIGxvd19sZXZlbF9tYXBwaW5nIGRvZXNuJ3QgaGF2ZSB0aGUgY2hhcmFjdGVy
IGFzIGtleSwgd2UKLSAgICAgICAgIyBzaG91bGQganVzdCByZXR1cm4gdGhlIGNoYXJhY3Rlci4K
LSAgICAgICAgcmV0dXJuIF9sb3dfbGV2ZWxfbWFwcGluZy5nZXQoY2gsIGNoKQotCi0gICAgaWYg
X0xPV19MRVZFTF9RVU9URSBpbiBtZXNzYWdlOgotICAgICAgICAjIFl1cCwgdGhlcmUgd2FzIGEg
cXVvdGUuICBSZWxlYXNlIHRoZSBkZXF1b3RlciwgbWFuIQotICAgICAgICBtZXNzYWdlID0gX2xv
d19sZXZlbF9yZWdleHAuc3ViKF9sb3dfbGV2ZWxfcmVwbGFjZSwgbWVzc2FnZSkKLQotICAgIGlm
IF9DVENQX0RFTElNSVRFUiBub3QgaW4gbWVzc2FnZToKLSAgICAgICAgcmV0dXJuIFttZXNzYWdl
XQotICAgIGVsc2U6Ci0gICAgICAgICMgU3BsaXQgaXQgaW50byBwYXJ0cy4gIChEb2VzIGFueSBJ
UkMgY2xpZW50IGFjdHVhbGx5ICp1c2UqCi0gICAgICAgICMgQ1RDUCBzdGFja2luZyBsaWtlIHRo
aXM/KQotICAgICAgICBjaHVua3MgPSBtZXNzYWdlLnNwbGl0KF9DVENQX0RFTElNSVRFUikKLQot
ICAgICAgICBtZXNzYWdlcyA9IFtdCi0gICAgICAgIGkgPSAwCi0gICAgICAgIHdoaWxlIGkgPCBs
ZW4oY2h1bmtzKS0xOgotICAgICAgICAgICAgIyBBZGQgbWVzc2FnZSBpZiBpdCdzIG5vbi1lbXB0
eS4KLSAgICAgICAgICAgIGlmIGxlbihjaHVua3NbaV0pID4gMDoKLSAgICAgICAgICAgICAgICBt
ZXNzYWdlcy5hcHBlbmQoY2h1bmtzW2ldKQotCi0gICAgICAgICAgICBpZiBpIDwgbGVuKGNodW5r
cyktMjoKLSAgICAgICAgICAgICAgICAjIEF5ZSEgIENUQ1AgdGFnZ2VkIGRhdGEgYWhlYWQhCi0g
ICAgICAgICAgICAgICAgbWVzc2FnZXMuYXBwZW5kKHR1cGxlKGNodW5rc1tpKzFdLnNwbGl0KCIg
IiwgMSkpKQotCi0gICAgICAgICAgICBpID0gaSArIDIKLQotICAgICAgICBpZiBsZW4oY2h1bmtz
KSAlIDIgPT0gMDoKLSAgICAgICAgICAgICMgSGV5LCBhIGxvbmVseSBfQ1RDUF9ERUxJTUlURVIg
YXQgdGhlIGVuZCEgIFRoaXMgbWVhbnMKLSAgICAgICAgICAgICMgdGhhdCB0aGUgbGFzdCBjaHVu
aywgaW5jbHVkaW5nIHRoZSBkZWxpbWl0ZXIsIGlzIGEKLSAgICAgICAgICAgICMgbm9ybWFsIG1l
c3NhZ2UhICAoVGhpcyBpcyBhY2NvcmRpbmcgdG8gdGhlIENUQ1AKLSAgICAgICAgICAgICMgc3Bl
Y2lmaWNhdGlvbi4pCi0gICAgICAgICAgICBtZXNzYWdlcy5hcHBlbmQoX0NUQ1BfREVMSU1JVEVS
ICsgY2h1bmtzWy0xXSkKLQotICAgICAgICByZXR1cm4gbWVzc2FnZXMKLQotZGVmIGlzX2NoYW5u
ZWwoc3RyaW5nKToKLSAgICAiIiJDaGVjayBpZiBhIHN0cmluZyBpcyBhIGNoYW5uZWwgbmFtZS4K
LQotICAgIFJldHVybnMgdHJ1ZSBpZiB0aGUgYXJndW1lbnQgaXMgYSBjaGFubmVsIG5hbWUsIG90
aGVyd2lzZSBmYWxzZS4KLSAgICAiIiIKLSAgICByZXR1cm4gc3RyaW5nIGFuZCBzdHJpbmdbMF0g
aW4gIiMmKyEiCi0KLWRlZiBpcF9udW1zdHJfdG9fcXVhZChudW0pOgotICAgICIiIkNvbnZlcnQg
YW4gSVAgbnVtYmVyIGFzIGFuIGludGVnZXIgZ2l2ZW4gaW4gQVNDSUkKLSAgICByZXByZXNlbnRh
dGlvbiAoZS5nLiAnMzIzMjIzNTUyMScpIHRvIGFuIElQIGFkZHJlc3Mgc3RyaW5nCi0gICAgKGUu
Zy4gJzE5Mi4xNjguMC4xJykuIiIiCi0gICAgbiA9IGxvbmcobnVtKQotICAgIHAgPSBtYXAoc3Ry
LCBtYXAoaW50LCBbbiA+PiAyNCAmIDB4RkYsIG4gPj4gMTYgJiAweEZGLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbiA+PiA4ICYgMHhGRiwgbiAmIDB4RkZdKSkKLSAgICByZXR1cm4gIi4i
LmpvaW4ocCkKLQotZGVmIGlwX3F1YWRfdG9fbnVtc3RyKHF1YWQpOgotICAgICIiIkNvbnZlcnQg
YW4gSVAgYWRkcmVzcyBzdHJpbmcgKGUuZy4gJzE5Mi4xNjguMC4xJykgdG8gYW4gSVAKLSAgICBu
dW1iZXIgYXMgYW4gaW50ZWdlciBnaXZlbiBpbiBBU0NJSSByZXByZXNlbnRhdGlvbgotICAgIChl
LmcuICczMjMyMjM1NTIxJykuIiIiCi0gICAgcCA9IG1hcChsb25nLCBxdWFkLnNwbGl0KCIuIikp
Ci0gICAgcyA9IHN0cigocFswXSA8PCAyNCkgfCAocFsxXSA8PCAxNikgfCAocFsyXSA8PCA4KSB8
IHBbM10pCi0gICAgaWYgc1stMV0gPT0gIkwiOgotICAgICAgICBzID0gc1s6LTFdCi0gICAgcmV0
dXJuIHMKLQotZGVmIG5tX3RvX24ocyk6Ci0gICAgIiIiR2V0IHRoZSBuaWNrIHBhcnQgb2YgYSBu
aWNrbWFzay4KLQotICAgIChUaGUgc291cmNlIG9mIGFuIEV2ZW50IGlzIGEgbmlja21hc2suKQot
ICAgICIiIgotICAgIHJldHVybiBzLnNwbGl0KCIhIilbMF0KLQotZGVmIG5tX3RvX3VoKHMpOgot
ICAgICIiIkdldCB0aGUgdXNlcmhvc3QgcGFydCBvZiBhIG5pY2ttYXNrLgotCi0gICAgKFRoZSBz
b3VyY2Ugb2YgYW4gRXZlbnQgaXMgYSBuaWNrbWFzay4pCi0gICAgIiIiCi0gICAgcmV0dXJuIHMu
c3BsaXQoIiEiKVsxXQotCi1kZWYgbm1fdG9faChzKToKLSAgICAiIiJHZXQgdGhlIGhvc3QgcGFy
dCBvZiBhIG5pY2ttYXNrLgotCi0gICAgKFRoZSBzb3VyY2Ugb2YgYW4gRXZlbnQgaXMgYSBuaWNr
bWFzay4pCi0gICAgIiIiCi0gICAgcmV0dXJuIHMuc3BsaXQoIkAiKVsxXQotCi1kZWYgbm1fdG9f
dShzKToKLSAgICAiIiJHZXQgdGhlIHVzZXIgcGFydCBvZiBhIG5pY2ttYXNrLgotCi0gICAgKFRo
ZSBzb3VyY2Ugb2YgYW4gRXZlbnQgaXMgYSBuaWNrbWFzay4pCi0gICAgIiIiCi0gICAgcyA9IHMu
c3BsaXQoIiEiKVsxXQotICAgIHJldHVybiBzLnNwbGl0KCJAIilbMF0KLQotZGVmIHBhcnNlX25p
Y2tfbW9kZXMobW9kZV9zdHJpbmcpOgotICAgICIiIlBhcnNlIGEgbmljayBtb2RlIHN0cmluZy4K
LQotICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIGEgbGlzdCBvZiBsaXN0cyB3aXRoIHRocmVlIG1l
bWJlcnM6IHNpZ24sCi0gICAgbW9kZSBhbmQgYXJndW1lbnQuICBUaGUgc2lnbiBpcyBcIitcIiBv
ciBcIi1cIi4gIFRoZSBhcmd1bWVudCBpcwotICAgIGFsd2F5cyBOb25lLgotCi0gICAgRXhhbXBs
ZToKLQotICAgID4+PiBpcmNsaWIucGFyc2Vfbmlja19tb2RlcyhcIithYi1jXCIpCi0gICAgW1sn
KycsICdhJywgTm9uZV0sIFsnKycsICdiJywgTm9uZV0sIFsnLScsICdjJywgTm9uZV1dCi0gICAg
IiIiCi0KLSAgICByZXR1cm4gX3BhcnNlX21vZGVzKG1vZGVfc3RyaW5nLCAiIikKLQotZGVmIHBh
cnNlX2NoYW5uZWxfbW9kZXMobW9kZV9zdHJpbmcpOgotICAgICIiIlBhcnNlIGEgY2hhbm5lbCBt
b2RlIHN0cmluZy4KLQotICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIGEgbGlzdCBvZiBsaXN0cyB3
aXRoIHRocmVlIG1lbWJlcnM6IHNpZ24sCi0gICAgbW9kZSBhbmQgYXJndW1lbnQuICBUaGUgc2ln
biBpcyBcIitcIiBvciBcIi1cIi4gIFRoZSBhcmd1bWVudCBpcwotICAgIE5vbmUgaWYgbW9kZSBp
c24ndCBvbmUgb2YgXCJiXCIsIFwia1wiLCBcImxcIiwgXCJ2XCIgb3IgXCJvXCIuCi0KLSAgICBF
eGFtcGxlOgotCi0gICAgPj4+IGlyY2xpYi5wYXJzZV9jaGFubmVsX21vZGVzKFwiK2FiLWMgZm9v
XCIpCi0gICAgW1snKycsICdhJywgTm9uZV0sIFsnKycsICdiJywgJ2ZvbyddLCBbJy0nLCAnYycs
IE5vbmVdXQotICAgICIiIgotCi0gICAgcmV0dXJuIF9wYXJzZV9tb2Rlcyhtb2RlX3N0cmluZywg
ImJrbHZvIikKLQotZGVmIF9wYXJzZV9tb2Rlcyhtb2RlX3N0cmluZywgdW5hcnlfbW9kZXM9IiIp
OgotICAgICIiIltJbnRlcm5hbF0iIiIKLSAgICBtb2RlcyA9IFtdCi0gICAgYXJnX2NvdW50ID0g
MAotCi0gICAgIyBTdGF0ZSB2YXJpYWJsZS4KLSAgICBzaWduID0gIiIKLQotICAgIGEgPSBtb2Rl
X3N0cmluZy5zcGxpdCgpCi0gICAgaWYgbGVuKGEpID09IDA6Ci0gICAgICAgIHJldHVybiBbXQot
ICAgIGVsc2U6Ci0gICAgICAgIG1vZGVfcGFydCwgYXJncyA9IGFbMF0sIGFbMTpdCi0KLSAgICBp
ZiBtb2RlX3BhcnRbMF0gbm90IGluICIrLSI6Ci0gICAgICAgIHJldHVybiBbXQotICAgIGZvciBj
aCBpbiBtb2RlX3BhcnQ6Ci0gICAgICAgIGlmIGNoIGluICIrLSI6Ci0gICAgICAgICAgICBzaWdu
ID0gY2gKLSAgICAgICAgZWxpZiBjaCA9PSAiICI6Ci0gICAgICAgICAgICBjb2xsZWN0aW5nX2Fy
Z3VtZW50cyA9IDEKLSAgICAgICAgZWxpZiBjaCBpbiB1bmFyeV9tb2RlczoKLSAgICAgICAgICAg
IGlmIGxlbihhcmdzKSA+PSBhcmdfY291bnQgKyAxOgotICAgICAgICAgICAgICAgIG1vZGVzLmFw
cGVuZChbc2lnbiwgY2gsIGFyZ3NbYXJnX2NvdW50XV0pCi0gICAgICAgICAgICAgICAgYXJnX2Nv
dW50ID0gYXJnX2NvdW50ICsgMQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBt
b2Rlcy5hcHBlbmQoW3NpZ24sIGNoLCBOb25lXSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAg
IG1vZGVzLmFwcGVuZChbc2lnbiwgY2gsIE5vbmVdKQotICAgIHJldHVybiBtb2RlcwotCi1kZWYg
X3BpbmdfcG9uZ2VyKGNvbm5lY3Rpb24sIGV2ZW50KToKLSAgICAiIiJbSW50ZXJuYWxdIiIiCi0g
ICAgY29ubmVjdGlvbi5wb25nKGV2ZW50LnRhcmdldCgpKQotCi0jIE51bWVyaWMgdGFibGUgbW9z
dGx5IHN0b2xlbiBmcm9tIHRoZSBQZXJsIElSQyBtb2R1bGUgKE5ldDo6SVJDKS4KLW51bWVyaWNf
ZXZlbnRzID0gewotICAgICIwMDEiOiAid2VsY29tZSIsCi0gICAgIjAwMiI6ICJ5b3VyaG9zdCIs
Ci0gICAgIjAwMyI6ICJjcmVhdGVkIiwKLSAgICAiMDA0IjogIm15aW5mbyIsCi0gICAgIjAwNSI6
ICJmZWF0dXJlbGlzdCIsICAjIFhYWAotICAgICIyMDAiOiAidHJhY2VsaW5rIiwKLSAgICAiMjAx
IjogInRyYWNlY29ubmVjdGluZyIsCi0gICAgIjIwMiI6ICJ0cmFjZWhhbmRzaGFrZSIsCi0gICAg
IjIwMyI6ICJ0cmFjZXVua25vd24iLAotICAgICIyMDQiOiAidHJhY2VvcGVyYXRvciIsCi0gICAg
IjIwNSI6ICJ0cmFjZXVzZXIiLAotICAgICIyMDYiOiAidHJhY2VzZXJ2ZXIiLAotICAgICIyMDci
OiAidHJhY2VzZXJ2aWNlIiwKLSAgICAiMjA4IjogInRyYWNlbmV3dHlwZSIsCi0gICAgIjIwOSI6
ICJ0cmFjZWNsYXNzIiwKLSAgICAiMjEwIjogInRyYWNlcmVjb25uZWN0IiwKLSAgICAiMjExIjog
InN0YXRzbGlua2luZm8iLAotICAgICIyMTIiOiAic3RhdHNjb21tYW5kcyIsCi0gICAgIjIxMyI6
ICJzdGF0c2NsaW5lIiwKLSAgICAiMjE0IjogInN0YXRzbmxpbmUiLAotICAgICIyMTUiOiAic3Rh
dHNpbGluZSIsCi0gICAgIjIxNiI6ICJzdGF0c2tsaW5lIiwKLSAgICAiMjE3IjogInN0YXRzcWxp
bmUiLAotICAgICIyMTgiOiAic3RhdHN5bGluZSIsCi0gICAgIjIxOSI6ICJlbmRvZnN0YXRzIiwK
LSAgICAiMjIxIjogInVtb2RlaXMiLAotICAgICIyMzEiOiAic2VydmljZWluZm8iLAotICAgICIy
MzIiOiAiZW5kb2ZzZXJ2aWNlcyIsCi0gICAgIjIzMyI6ICJzZXJ2aWNlIiwKLSAgICAiMjM0Ijog
InNlcnZsaXN0IiwKLSAgICAiMjM1IjogInNlcnZsaXN0ZW5kIiwKLSAgICAiMjQxIjogInN0YXRz
bGxpbmUiLAotICAgICIyNDIiOiAic3RhdHN1cHRpbWUiLAotICAgICIyNDMiOiAic3RhdHNvbGlu
ZSIsCi0gICAgIjI0NCI6ICJzdGF0c2hsaW5lIiwKLSAgICAiMjUwIjogImx1c2VyY29ubnMiLAot
ICAgICIyNTEiOiAibHVzZXJjbGllbnQiLAotICAgICIyNTIiOiAibHVzZXJvcCIsCi0gICAgIjI1
MyI6ICJsdXNlcnVua25vd24iLAotICAgICIyNTQiOiAibHVzZXJjaGFubmVscyIsCi0gICAgIjI1
NSI6ICJsdXNlcm1lIiwKLSAgICAiMjU2IjogImFkbWlubWUiLAotICAgICIyNTciOiAiYWRtaW5s
b2MxIiwKLSAgICAiMjU4IjogImFkbWlubG9jMiIsCi0gICAgIjI1OSI6ICJhZG1pbmVtYWlsIiwK
LSAgICAiMjYxIjogInRyYWNlbG9nIiwKLSAgICAiMjYyIjogImVuZG9mdHJhY2UiLAotICAgICIy
NjMiOiAidHJ5YWdhaW4iLAotICAgICIyNjUiOiAibl9sb2NhbCIsCi0gICAgIjI2NiI6ICJuX2ds
b2JhbCIsCi0gICAgIjMwMCI6ICJub25lIiwKLSAgICAiMzAxIjogImF3YXkiLAotICAgICIzMDIi
OiAidXNlcmhvc3QiLAotICAgICIzMDMiOiAiaXNvbiIsCi0gICAgIjMwNSI6ICJ1bmF3YXkiLAot
ICAgICIzMDYiOiAibm93YXdheSIsCi0gICAgIjMxMSI6ICJ3aG9pc3VzZXIiLAotICAgICIzMTIi
OiAid2hvaXNzZXJ2ZXIiLAotICAgICIzMTMiOiAid2hvaXNvcGVyYXRvciIsCi0gICAgIjMxNCI6
ICJ3aG93YXN1c2VyIiwKLSAgICAiMzE1IjogImVuZG9md2hvIiwKLSAgICAiMzE2IjogIndob2lz
Y2hhbm9wIiwKLSAgICAiMzE3IjogIndob2lzaWRsZSIsCi0gICAgIjMxOCI6ICJlbmRvZndob2lz
IiwKLSAgICAiMzE5IjogIndob2lzY2hhbm5lbHMiLAotICAgICIzMjEiOiAibGlzdHN0YXJ0IiwK
LSAgICAiMzIyIjogImxpc3QiLAotICAgICIzMjMiOiAibGlzdGVuZCIsCi0gICAgIjMyNCI6ICJj
aGFubmVsbW9kZWlzIiwKLSAgICAiMzI5IjogImNoYW5uZWxjcmVhdGUiLAotICAgICIzMzEiOiAi
bm90b3BpYyIsCi0gICAgIjMzMiI6ICJjdXJyZW50dG9waWMiLAotICAgICIzMzMiOiAidG9waWNp
bmZvIiwKLSAgICAiMzQxIjogImludml0aW5nIiwKLSAgICAiMzQyIjogInN1bW1vbmluZyIsCi0g
ICAgIjM0NiI6ICJpbnZpdGVsaXN0IiwKLSAgICAiMzQ3IjogImVuZG9maW52aXRlbGlzdCIsCi0g
ICAgIjM0OCI6ICJleGNlcHRsaXN0IiwKLSAgICAiMzQ5IjogImVuZG9mZXhjZXB0bGlzdCIsCi0g
ICAgIjM1MSI6ICJ2ZXJzaW9uIiwKLSAgICAiMzUyIjogIndob3JlcGx5IiwKLSAgICAiMzUzIjog
Im5hbXJlcGx5IiwKLSAgICAiMzYxIjogImtpbGxkb25lIiwKLSAgICAiMzYyIjogImNsb3Npbmci
LAotICAgICIzNjMiOiAiY2xvc2VlbmQiLAotICAgICIzNjQiOiAibGlua3MiLAotICAgICIzNjUi
OiAiZW5kb2ZsaW5rcyIsCi0gICAgIjM2NiI6ICJlbmRvZm5hbWVzIiwKLSAgICAiMzY3IjogImJh
bmxpc3QiLAotICAgICIzNjgiOiAiZW5kb2ZiYW5saXN0IiwKLSAgICAiMzY5IjogImVuZG9md2hv
d2FzIiwKLSAgICAiMzcxIjogImluZm8iLAotICAgICIzNzIiOiAibW90ZCIsCi0gICAgIjM3MyI6
ICJpbmZvc3RhcnQiLAotICAgICIzNzQiOiAiZW5kb2ZpbmZvIiwKLSAgICAiMzc1IjogIm1vdGRz
dGFydCIsCi0gICAgIjM3NiI6ICJlbmRvZm1vdGQiLAotICAgICIzNzciOiAibW90ZDIiLCAgICAg
ICAgIyAxOTk3LTEwLTE2IC0tIHRraWwKLSAgICAiMzgxIjogInlvdXJlb3BlciIsCi0gICAgIjM4
MiI6ICJyZWhhc2hpbmciLAotICAgICIzODQiOiAibXlwb3J0aXMiLAotICAgICIzOTEiOiAidGlt
ZSIsCi0gICAgIjM5MiI6ICJ1c2Vyc3N0YXJ0IiwKLSAgICAiMzkzIjogInVzZXJzIiwKLSAgICAi
Mzk0IjogImVuZG9mdXNlcnMiLAotICAgICIzOTUiOiAibm91c2VycyIsCi0gICAgIjQwMSI6ICJu
b3N1Y2huaWNrIiwKLSAgICAiNDAyIjogIm5vc3VjaHNlcnZlciIsCi0gICAgIjQwMyI6ICJub3N1
Y2hjaGFubmVsIiwKLSAgICAiNDA0IjogImNhbm5vdHNlbmR0b2NoYW4iLAotICAgICI0MDUiOiAi
dG9vbWFueWNoYW5uZWxzIiwKLSAgICAiNDA2IjogIndhc25vc3VjaG5pY2siLAotICAgICI0MDci
OiAidG9vbWFueXRhcmdldHMiLAotICAgICI0MDkiOiAibm9vcmlnaW4iLAotICAgICI0MTEiOiAi
bm9yZWNpcGllbnQiLAotICAgICI0MTIiOiAibm90ZXh0dG9zZW5kIiwKLSAgICAiNDEzIjogIm5v
dG9wbGV2ZWwiLAotICAgICI0MTQiOiAid2lsZHRvcGxldmVsIiwKLSAgICAiNDIxIjogInVua25v
d25jb21tYW5kIiwKLSAgICAiNDIyIjogIm5vbW90ZCIsCi0gICAgIjQyMyI6ICJub2FkbWluaW5m
byIsCi0gICAgIjQyNCI6ICJmaWxlZXJyb3IiLAotICAgICI0MzEiOiAibm9uaWNrbmFtZWdpdmVu
IiwKLSAgICAiNDMyIjogImVycm9uZXVzbmlja25hbWUiLCAjIFRoaXNzIGl6IGhvdyBpdHMgc3Bl
bGQgaW4gdGhlZSBSRkMuCi0gICAgIjQzMyI6ICJuaWNrbmFtZWludXNlIiwKLSAgICAiNDM2Ijog
Im5pY2tjb2xsaXNpb24iLAotICAgICI0MzciOiAidW5hdmFpbHJlc291cmNlIiwgICMgIk5pY2sg
dGVtcG9yYWxseSB1bmF2YWlsYWJsZSIKLSAgICAiNDQxIjogInVzZXJub3RpbmNoYW5uZWwiLAot
ICAgICI0NDIiOiAibm90b25jaGFubmVsIiwKLSAgICAiNDQzIjogInVzZXJvbmNoYW5uZWwiLAot
ICAgICI0NDQiOiAibm9sb2dpbiIsCi0gICAgIjQ0NSI6ICJzdW1tb25kaXNhYmxlZCIsCi0gICAg
IjQ0NiI6ICJ1c2Vyc2Rpc2FibGVkIiwKLSAgICAiNDUxIjogIm5vdHJlZ2lzdGVyZWQiLAotICAg
ICI0NjEiOiAibmVlZG1vcmVwYXJhbXMiLAotICAgICI0NjIiOiAiYWxyZWFkeXJlZ2lzdGVyZWQi
LAotICAgICI0NjMiOiAibm9wZXJtZm9yaG9zdCIsCi0gICAgIjQ2NCI6ICJwYXNzd2RtaXNtYXRj
aCIsCi0gICAgIjQ2NSI6ICJ5b3VyZWJhbm5lZGNyZWVwIiwgIyBJIGxvdmUgdGhpcyBvbmUuLi4K
LSAgICAiNDY2IjogInlvdXdpbGxiZWJhbm5lZCIsCi0gICAgIjQ2NyI6ICJrZXlzZXQiLAotICAg
ICI0NzEiOiAiY2hhbm5lbGlzZnVsbCIsCi0gICAgIjQ3MiI6ICJ1bmtub3dubW9kZSIsCi0gICAg
IjQ3MyI6ICJpbnZpdGVvbmx5Y2hhbiIsCi0gICAgIjQ3NCI6ICJiYW5uZWRmcm9tY2hhbiIsCi0g
ICAgIjQ3NSI6ICJiYWRjaGFubmVsa2V5IiwKLSAgICAiNDc2IjogImJhZGNoYW5tYXNrIiwKLSAg
ICAiNDc3IjogIm5vY2hhbm1vZGVzIiwgICMgIkNoYW5uZWwgZG9lc24ndCBzdXBwb3J0IG1vZGVz
IgotICAgICI0NzgiOiAiYmFubGlzdGZ1bGwiLAotICAgICI0ODEiOiAibm9wcml2aWxlZ2VzIiwK
LSAgICAiNDgyIjogImNoYW5vcHJpdnNuZWVkZWQiLAotICAgICI0ODMiOiAiY2FudGtpbGxzZXJ2
ZXIiLAotICAgICI0ODQiOiAicmVzdHJpY3RlZCIsICAgIyBDb25uZWN0aW9uIGlzIHJlc3RyaWN0
ZWQKLSAgICAiNDg1IjogInVuaXFvcHByaXZzbmVlZGVkIiwKLSAgICAiNDkxIjogIm5vb3Blcmhv
c3QiLAotICAgICI0OTIiOiAibm9zZXJ2aWNlaG9zdCIsCi0gICAgIjUwMSI6ICJ1bW9kZXVua25v
d25mbGFnIiwKLSAgICAiNTAyIjogInVzZXJzZG9udG1hdGNoIiwKLX0KLQotZ2VuZXJhdGVkX2V2
ZW50cyA9IFsKLSAgICAjIEdlbmVyYXRlZCBldmVudHMKLSAgICAiZGNjX2Nvbm5lY3QiLAotICAg
ICJkY2NfZGlzY29ubmVjdCIsCi0gICAgImRjY21zZyIsCi0gICAgImRpc2Nvbm5lY3QiLAotICAg
ICJjdGNwIiwKLSAgICAiY3RjcHJlcGx5IiwKLV0KLQotcHJvdG9jb2xfZXZlbnRzID0gWwotICAg
ICMgSVJDIHByb3RvY29sIGV2ZW50cwotICAgICJlcnJvciIsCi0gICAgImpvaW4iLAotICAgICJr
aWNrIiwKLSAgICAibW9kZSIsCi0gICAgInBhcnQiLAotICAgICJwaW5nIiwKLSAgICAicHJpdm1z
ZyIsCi0gICAgInByaXZub3RpY2UiLAotICAgICJwdWJtc2ciLAotICAgICJwdWJub3RpY2UiLAot
ICAgICJxdWl0IiwKLSAgICAiaW52aXRlIiwKLSAgICAicG9uZyIsCi1dCi0KLWFsbF9ldmVudHMg
PSBnZW5lcmF0ZWRfZXZlbnRzICsgcHJvdG9jb2xfZXZlbnRzICsgbGlzdChudW1lcmljX2V2ZW50
cy52YWx1ZXMoKSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9tYWluLnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9tYWluLnB5CShyZXZpc2lv
biAyNjk5ODApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvbWFpbi5weQkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsNyArMzUsNiBAQCBpbXBvcnQgdGhyZWFkaW5nCiAKIGZyb20gd2Via2l0
cHkuY29tbW9uLmNvbmZpZy5wb3J0cyBpbXBvcnQgRGVwcmVjYXRlZFBvcnQKIGZyb20gd2Via2l0
cHkuY29tbW9uLmhvc3QgaW1wb3J0IEhvc3QKLWZyb20gd2Via2l0cHkuY29tbW9uLm5ldC5pcmMg
aW1wb3J0IGlyY3Byb3h5CiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5uZXQuZXdzc2VydmVyIGltcG9y
dCBFV1NTZXJ2ZXIKIGZyb20gd2Via2l0cHkudG9vbC5tdWx0aWNvbW1hbmR0b29sIGltcG9ydCBN
dWx0aUNvbW1hbmRUb29sCiBmcm9tIHdlYmtpdHB5LnRvb2wgaW1wb3J0IGNvbW1hbmRzCkBAIC00
NSw3ICs0NCw2IEBAIGNsYXNzIFdlYktpdFBhdGNoKE11bHRpQ29tbWFuZFRvb2wsIEhvc3QKICAg
ICBnbG9iYWxfb3B0aW9ucyA9IFsKICAgICAgICAgbWFrZV9vcHRpb24oIi12IiwgIi0tdmVyYm9z
ZSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9InZlcmJvc2UiLCBkZWZhdWx0PUZhbHNlLCBo
ZWxwPSJlbmFibGUgYWxsIGxvZ2dpbmciKSwKICAgICAgICAgbWFrZV9vcHRpb24oIi1kIiwgIi0t
ZGlyZWN0b3J5IiwgYWN0aW9uPSJhcHBlbmQiLCBkZXN0PSJwYXRjaF9kaXJlY3RvcmllcyIsIGRl
ZmF1bHQ9W10sIGhlbHA9IkRpcmVjdG9yeSB0byBsb29rIGF0IGZvciBjaGFuZ2VkIGZpbGVzIiks
Ci0gICAgICAgIG1ha2Vfb3B0aW9uKCItLWlyYy1wYXNzd29yZCIsIGFjdGlvbj0ic3RvcmUiLCBk
ZXN0PSJpcmNfcGFzc3dvcmQiLCB0eXBlPSJzdHJpbmciLCBoZWxwPSJQYXNzd29yZCB0byB1c2Ug
d2hlbiBjb21tdW5pY2F0aW5nIHZpYSBJUkMuIiksCiAgICAgICAgIG1ha2Vfb3B0aW9uKCItLXNl
Y29uZHMtdG8tc2xlZXAiLCBhY3Rpb249InN0b3JlIiwgZGVmYXVsdD0xMjAsIHR5cGU9ImludCIs
IGhlbHA9Ik51bWJlciBvZiBzZWNvbmRzIHRvIHNsZWVwIGluIHRoZSB0YXNrIHF1ZXVlLiIpLAog
ICAgICAgICBtYWtlX29wdGlvbigiLS1wb3J0IiwgYWN0aW9uPSJzdG9yZSIsIGRlc3Q9InBvcnQi
LCBkZWZhdWx0PU5vbmUsIGhlbHA9IlNwZWNpZnkgYSBwb3J0IChlLmcuLCBtYWMsIGd0aywgLi4u
KS4iKSwKICAgICBdCkBAIC01Nyw3ICs1NSw2IEBAIGNsYXNzIFdlYktpdFBhdGNoKE11bHRpQ29t
bWFuZFRvb2wsIEhvc3QKICAgICAgICAgc2VsZi5ld3Nfc2VydmVyID0gRVdTU2VydmVyKCkKIAog
ICAgICAgICBzZWxmLndha2V1cF9ldmVudCA9IHRocmVhZGluZy5FdmVudCgpCi0gICAgICAgIHNl
bGYuX2lyYyA9IE5vbmUKICAgICAgICAgc2VsZi5fZGVwcmVjYXRlZF9wb3J0ID0gTm9uZQogCiAg
ICAgZGVmIGRlcHJlY2F0ZWRfcG9ydChzZWxmKToKQEAgLTY2LDE5ICs2Myw4IEBAIGNsYXNzIFdl
YktpdFBhdGNoKE11bHRpQ29tbWFuZFRvb2wsIEhvc3QKICAgICBkZWYgcGF0aChzZWxmKToKICAg
ICAgICAgcmV0dXJuIHNlbGYuX3BhdGgKIAotICAgIGRlZiBlbnN1cmVfaXJjX2Nvbm5lY3RlZChz
ZWxmLCBpcmNfZGVsZWdhdGUpOgotICAgICAgICBpZiBub3Qgc2VsZi5faXJjOgotICAgICAgICAg
ICAgc2VsZi5faXJjID0gaXJjcHJveHkuSVJDUHJveHkoaXJjX2RlbGVnYXRlKQotCi0gICAgZGVm
IGlyYyhzZWxmKToKLSAgICAgICAgIyBXZSBkb24ndCBhdXRvbWF0aWNhbGx5IGNvbnN0cnVjdCBJ
UkNQcm94eSBoZXJlIGJlY2F1c2UgY29uc3RydWN0aW5nCi0gICAgICAgICMgSVJDUHJveHkgYWN0
dWFsbHkgY29ubmVjdHMgdG8gSVJDLiAgV2Ugd2FudCBjbGllbnRzIHRvIGV4cGxpY2l0bHkKLSAg
ICAgICAgIyBjb25uZWN0IHRvIElSQy4KLSAgICAgICAgcmV0dXJuIHNlbGYuX2lyYwotCiAgICAg
ZGVmIGNvbW1hbmRfY29tcGxldGVkKHNlbGYpOgotICAgICAgICBpZiBzZWxmLl9pcmM6Ci0gICAg
ICAgICAgICBzZWxmLl9pcmMuZGlzY29ubmVjdCgpCisgICAgICAgIHBhc3MKIAogICAgIGRlZiBz
aG91bGRfc2hvd19pbl9tYWluX2hlbHAoc2VsZiwgY29tbWFuZCk6CiAgICAgICAgIGlmIG5vdCBj
b21tYW5kLnNob3dfaW5fbWFpbl9oZWxwOgpAQCAtOTAsOCArNzYsNiBAQCBjbGFzcyBXZWJLaXRQ
YXRjaChNdWx0aUNvbW1hbmRUb29sLCBIb3N0CiAgICAgIyBGSVhNRTogVGhpcyBtYXkgYmUgdW5u
ZWNlc3Nhcnkgc2luY2Ugd2UgcGFzcyBnbG9iYWwgb3B0aW9ucyB0byBhbGwgY29tbWFuZHMgZHVy
aW5nIGV4ZWN1dGUoKSBhcyB3ZWxsLgogICAgIGRlZiBoYW5kbGVfZ2xvYmFsX29wdGlvbnMoc2Vs
Ziwgb3B0aW9ucyk6CiAgICAgICAgIHNlbGYuaW5pdGlhbGl6ZV9zY20ob3B0aW9ucy5wYXRjaF9k
aXJlY3RvcmllcykKLSAgICAgICAgaWYgb3B0aW9ucy5pcmNfcGFzc3dvcmQ6Ci0gICAgICAgICAg
ICBzZWxmLmlyY19wYXNzd29yZCA9IG9wdGlvbnMuaXJjX3Bhc3N3b3JkCiAgICAgICAgICMgSWYg
b3B0aW9ucy5wb3J0IGlzIE5vbmUsIHdlJ2xsIGdldCB0aGUgZGVmYXVsdCBwb3J0IGZvciB0aGlz
IHBsYXRmb3JtLgogICAgICAgICBzZWxmLl9kZXByZWNhdGVkX3BvcnQgPSBEZXByZWNhdGVkUG9y
dC5wb3J0KG9wdGlvbnMucG9ydCkKIApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29s
L21vY2t0b29sLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9t
b2NrdG9vbC5weQkocmV2aXNpb24gMjY5OTgwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS90
b29sL21vY2t0b29sLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw2IEBAIGltcG9ydCB0
aHJlYWRpbmcKIGZyb20gd2Via2l0cHkuY29tbW9uLmhvc3RfbW9jayBpbXBvcnQgTW9ja0hvc3QK
IGZyb20gd2Via2l0cHkuY29tbW9uLm5ldC5idWlsZGJvdC5idWlsZGJvdF9tb2NrIGltcG9ydCBN
b2NrQnVpbGRCb3QKIGZyb20gd2Via2l0cHkuY29tbW9uLm5ldC5ld3NzZXJ2ZXJfbW9jayBpbXBv
cnQgTW9ja0VXU1NlcnZlcgotZnJvbSB3ZWJraXRweS5jb21tb24ubmV0LmlyYy5pcmNfbW9jayBp
bXBvcnQgTW9ja0lSQwogCiAjIEZJWE1FOiBPbGQtc3R5bGUgIlBvcnRzIiBuZWVkIHRvIGRpZSBh
bmQgYmUgcmVwbGFjZWQgYnkgbW9kZXJuIGxheW91dF90ZXN0cy5wb3J0IHdoaWNoIG5lZWRzIHRv
IG1vdmUgdG8gY29tbW9uLgogZnJvbSB3ZWJraXRweS5jb21tb24uY29uZmlnLnBvcnRzX21vY2sg
aW1wb3J0IE1vY2tQb3J0CkBAIC02OCw4ICs2Nyw2IEBAIGNsYXNzIE1vY2tUb29sKE1vY2tIb3N0
KToKICAgICAgICAgc2VsZi5fZGVwcmVjYXRlZF9wb3J0ID0gTW9ja1BvcnQoKQogICAgICAgICBz
ZWxmLmV3c19zZXJ2ZXIgPSBNb2NrRVdTU2VydmVyKCkKIAotICAgICAgICBzZWxmLl9pcmMgPSBO
b25lCi0gICAgICAgIHNlbGYuaXJjX3Bhc3N3b3JkID0gIk1PQ0sgaXJjIHBhc3N3b3JkIgogICAg
ICAgICBzZWxmLndha2V1cF9ldmVudCA9IHRocmVhZGluZy5FdmVudCgpCiAKICAgICBkZWYgZGVw
cmVjYXRlZF9wb3J0KHNlbGYpOgpAQCAtNzcsMTAgKzc0LDMgQEAgY2xhc3MgTW9ja1Rvb2woTW9j
a0hvc3QpOgogCiAgICAgZGVmIHBhdGgoc2VsZik6CiAgICAgICAgIHJldHVybiAiZWNobyIKLQot
ICAgIGRlZiBlbnN1cmVfaXJjX2Nvbm5lY3RlZChzZWxmLCBkZWxlZ2F0ZSk6Ci0gICAgICAgIGlm
IG5vdCBzZWxmLl9pcmM6Ci0gICAgICAgICAgICBzZWxmLl9pcmMgPSBNb2NrSVJDKCkKLQotICAg
IGRlZiBpcmMoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9pcmMKSW5kZXg6IFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvdG9vbC9ib3QvaXJjX2NvbW1hbmQucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvU2NyaXB0cy93ZWJraXRweS90b29sL2JvdC9pcmNfY29tbWFuZC5weQkocmV2aXNpb24gMjY5
OTgwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2JvdC9pcmNfY29tbWFuZC5weQko
bm9uZXhpc3RlbnQpCkBAIC0xLDMwNyArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0j
Ci0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
Ci0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotaW1wb3J0
IGl0ZXJ0b29scwotaW1wb3J0IHJhbmRvbQotaW1wb3J0IHJlCi0KLWZyb20gd2Via2l0Y29yZXB5
IGltcG9ydCB1bmljb2RlCi0KLWZyb20gd2Via2l0cHkuY29tbW9uLmNvbmZpZyBpbXBvcnQgaXJj
IGFzIGNvbmZpZ19pcmMKLWZyb20gd2Via2l0cHkuY29tbW9uLmNvbmZpZyBpbXBvcnQgdXJscwot
ZnJvbSB3ZWJraXRweS5jb21tb24uY29uZmlnLmNvbW1pdHRlcnMgaW1wb3J0IENvbW1pdHRlckxp
c3QKLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0IFNjcmlwdEVy
cm9yCi1mcm9tIHdlYmtpdHB5LnRvb2wuYm90LnF1ZXVlZW5naW5lIGltcG9ydCBUZXJtaW5hdGVR
dWV1ZQotZnJvbSB3ZWJraXRweS50b29sLmdyYW1tYXIgaW1wb3J0IGpvaW5fd2l0aF9zZXBhcmF0
b3JzCi1mcm9tIHdlYmtpdHB5LnRvb2wuZ3JhbW1hciBpbXBvcnQgcGx1cmFsaXplCi0KLQotZGVm
IF9wb3N0X2Vycm9yX2FuZF9jaGVja19mb3JfYnVnX3VybCh0b29sLCBuaWNrc19zdHJpbmcsIGV4
Y2VwdGlvbik6Ci0gICAgdG9vbC5pcmMoKS5wb3N0KCIlcyIgJSBleGNlcHRpb24pCi0gICAgYnVn
X2lkID0gdXJscy5wYXJzZV9idWdfaWQoZXhjZXB0aW9uLm91dHB1dCkKLSAgICBpZiBidWdfaWQ6
Ci0gICAgICAgIGJ1Z191cmwgPSB0b29sLmJ1Z3MuYnVnX3VybF9mb3JfYnVnX2lkKGJ1Z19pZCkK
LSAgICAgICAgdG9vbC5pcmMoKS5wb3N0KCIlczogVWdnLi4uICBNaWdodCBoYXZlIGNyZWF0ZWQg
JXMiICUgKG5pY2tzX3N0cmluZywgYnVnX3VybCkpCi0KLQotIyBGSVhNRTogTWVyZ2Ugd2l0aCBD
b21tYW5kPwotY2xhc3MgSVJDQ29tbWFuZChvYmplY3QpOgotICAgIHVzYWdlX3N0cmluZyA9IE5v
bmUKLSAgICBoZWxwX3N0cmluZyA9IE5vbmUKLQotICAgIGRlZiBleGVjdXRlKHNlbGYsIG5pY2ss
IGFyZ3MsIHRvb2wsIHNoZXJpZmYpOgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9y
KCJzdWJjbGFzc2VzIG11c3QgaW1wbGVtZW50IikKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRl
ZiB1c2FnZShjbHMsIG5pY2spOgotICAgICAgICByZXR1cm4gIiVzOiBVc2FnZTogJXMiICUgKG5p
Y2ssIGNscy51c2FnZV9zdHJpbmcpCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgaGVscChj
bHMsIG5pY2spOgotICAgICAgICByZXR1cm4gIiVzOiAlcyIgJSAobmljaywgY2xzLmhlbHBfc3Ry
aW5nKQotCi0KLWNsYXNzIENyZWF0ZUJ1ZyhJUkNDb21tYW5kKToKLSAgICB1c2FnZV9zdHJpbmcg
PSAiY3JlYXRlLWJ1ZyBCVUdfVElUTEUiCi0gICAgaGVscF9zdHJpbmcgPSAiQ3JlYXRlcyBhIEJ1
Z3ppbGxhIGJ1ZyB3aXRoIHRoZSBnaXZlbiB0aXRsZS4iCi0KLSAgICBkZWYgZXhlY3V0ZShzZWxm
LCBuaWNrLCBhcmdzLCB0b29sLCBzaGVyaWZmKToKLSAgICAgICAgaWYgbm90IGFyZ3M6Ci0gICAg
ICAgICAgICByZXR1cm4gc2VsZi51c2FnZShuaWNrKQotCi0gICAgICAgIGJ1Z190aXRsZSA9ICIg
Ii5qb2luKGFyZ3MpCi0gICAgICAgIGJ1Z19kZXNjcmlwdGlvbiA9ICIlc1xuUmVxdWVzdGVkIGJ5
ICVzIG9uICVzLiIgJSAoYnVnX3RpdGxlLCBuaWNrLCBjb25maWdfaXJjLmNoYW5uZWwpCi0KLSAg
ICAgICAgIyBUaGVyZSBoYXBwZW5zIHRvIGJlIGEgY29tbWl0dGVycyBsaXN0IGh1bmcgb2ZmIG9m
IEJ1Z3ppbGxhLCBzbwotICAgICAgICAjIHJlLXVzaW5nIHRoYXQgb25lIG1ha2VzIHRoaW5ncyBl
YXNpZXN0IGZvciBub3cuCi0gICAgICAgIHJlcXVlc3RlciA9IHRvb2wuYnVncy5jb21taXR0ZXJz
LmNvbnRyaWJ1dG9yX2J5X2lyY19uaWNrbmFtZShuaWNrKQotICAgICAgICByZXF1ZXN0ZXJfZW1h
aWwgPSByZXF1ZXN0ZXIuYnVnemlsbGFfZW1haWwoKSBpZiByZXF1ZXN0ZXIgZWxzZSBOb25lCi0K
LSAgICAgICAgdHJ5OgotICAgICAgICAgICAgYnVnX2lkID0gdG9vbC5idWdzLmNyZWF0ZV9idWco
YnVnX3RpdGxlLCBidWdfZGVzY3JpcHRpb24sIGNjPXJlcXVlc3Rlcl9lbWFpbCwgYXNzaWduZWU9
cmVxdWVzdGVyX2VtYWlsKQotICAgICAgICAgICAgYnVnX3VybCA9IHRvb2wuYnVncy5idWdfdXJs
X2Zvcl9idWdfaWQoYnVnX2lkKQotICAgICAgICAgICAgcmV0dXJuICIlczogQ3JlYXRlZCBidWc6
ICVzIiAlIChuaWNrLCBidWdfdXJsKQotICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6Ci0g
ICAgICAgICAgICByZXR1cm4gIiVzOiBGYWlsZWQgdG8gY3JlYXRlIGJ1ZzpcbiVzIiAlIChuaWNr
LCBlKQotCi0KLWNsYXNzIEhlbHAoSVJDQ29tbWFuZCk6Ci0gICAgdXNhZ2Vfc3RyaW5nID0gImhl
bHAgW0NPTU1BTkRdIgotICAgIGhlbHBfc3RyaW5nID0gIlByb3ZpZGVzIGhlbHAgb24gbXkgaW5k
aXZpZHVhbCBjb21tYW5kcy4iCi0KLSAgICBkZWYgZXhlY3V0ZShzZWxmLCBuaWNrLCBhcmdzLCB0
b29sLCBzaGVyaWZmKToKLSAgICAgICAgaWYgYXJnczoKLSAgICAgICAgICAgIGZvciBjb21tYW5k
X25hbWUgaW4gYXJnczoKLSAgICAgICAgICAgICAgICBpZiBjb21tYW5kX25hbWUgaW4gY29tbWFu
ZHM6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3Bvc3RfY29tbWFuZF9oZWxwKG5pY2ssIHRv
b2wsIGNvbW1hbmRzW2NvbW1hbmRfbmFtZV0pCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB0
b29sLmlyYygpLnBvc3QoIiVzOiBBdmFpbGFibGUgY29tbWFuZHM6ICVzIiAlIChuaWNrLCAiLCAi
LmpvaW4oc29ydGVkKHZpc2libGVfY29tbWFuZHMua2V5cygpKSkpKQotICAgICAgICAgICAgdG9v
bC5pcmMoKS5wb3N0KCclczogVHlwZSAiJXM6IGhlbHAgQ09NTUFORCIgZm9yIGhlbHAgb24gbXkg
aW5kaXZpZHVhbCBjb21tYW5kcy4nICUgKG5pY2ssIHNoZXJpZmYubmFtZSgpKSkKLQotICAgIGRl
ZiBfcG9zdF9jb21tYW5kX2hlbHAoc2VsZiwgbmljaywgdG9vbCwgY29tbWFuZCk6Ci0gICAgICAg
IHRvb2wuaXJjKCkucG9zdChjb21tYW5kLnVzYWdlKG5pY2spKQotICAgICAgICB0b29sLmlyYygp
LnBvc3QoY29tbWFuZC5oZWxwKG5pY2spKQotICAgICAgICBhbGlhc2VzID0gIiAiLmpvaW4oc29y
dGVkKGZpbHRlcihsYW1iZGEgYWxpYXM6IGNvbW1hbmRzW2FsaWFzXSA9PSBjb21tYW5kIGFuZCBh
bGlhcyBub3QgaW4gdmlzaWJsZV9jb21tYW5kcywgY29tbWFuZHMpKSkKLSAgICAgICAgaWYgYWxp
YXNlczoKLSAgICAgICAgICAgIHRvb2wuaXJjKCkucG9zdCgiJXM6IEFsaWFzZXM6ICVzIiAlIChu
aWNrLCBhbGlhc2VzKSkKLQotCi1jbGFzcyBIaShJUkNDb21tYW5kKToKLSAgICB1c2FnZV9zdHJp
bmcgPSAiaGkiCi0gICAgaGVscF9zdHJpbmcgPSAiUmVzcG9uZHMgd2l0aCBoaS4iCi0KLSAgICBk
ZWYgZXhlY3V0ZShzZWxmLCBuaWNrLCBhcmdzLCB0b29sLCBzaGVyaWZmKToKLSAgICAgICAgaWYg
bGVuKGFyZ3MpIGFuZCByZS5tYXRjaChzaGVyaWZmLm5hbWUoKSArIHInXypccyohXHMqJywgJyAn
LmpvaW4oYXJncykpOgotICAgICAgICAgICAgcmV0dXJuICIlczogaGkgJXMhIiAlIChuaWNrLCBu
aWNrKQotICAgICAgICBieXBhc3NfcXVpcHMgPSBbJ1dLUicsICd3ZWJraXRib3QnXQotICAgICAg
ICBpZiBzaGVyaWZmLm5hbWUoKSBpbiBieXBhc3NfcXVpcHM6ICAjIEZvciBzb21lIHVua25vd24g
cmVhc29uLCBXS1Ivd2Via2l0Ym90IGNhbid0IHVzZSB0b29sLmJ1Z3MucXVpcHMoKS4KLSAgICAg
ICAgICAgIHJldHVybiAiJXM6IGhpICVzISIgJSAobmljaywgbmljaykKLSAgICAgICAgcXVpcHMg
PSB0b29sLmJ1Z3MucXVpcHMoKQotICAgICAgICBxdWlwcy5hcHBlbmQoJyJPbmx5IHlvdSBjYW4g
cHJldmVudCBmb3Jlc3QgZmlyZXMuIiAtLSBTbW9rZXkgdGhlIEJlYXInKQotICAgICAgICByZXR1
cm4gcmFuZG9tLmNob2ljZShxdWlwcykKLQotCi1jbGFzcyBQaW5nUG9uZyhJUkNDb21tYW5kKToK
LSAgICB1c2FnZV9zdHJpbmcgPSAicGluZyIKLSAgICBoZWxwX3N0cmluZyA9ICJSZXNwb25kcyB3
aXRoIHBvbmcuIgotCi0gICAgZGVmIGV4ZWN1dGUoc2VsZiwgbmljaywgYXJncywgdG9vbCwgc2hl
cmlmZik6Ci0gICAgICAgIHJldHVybiBuaWNrICsgIjogcG9uZyIKLQotCi1jbGFzcyBZb3VUaGVy
ZShJUkNDb21tYW5kKToKLSAgICB1c2FnZV9zdHJpbmcgPSAieXQ/IgotICAgIGhlbHBfc3RyaW5n
ID0gIlJlc3BvbmRzIHdpdGggeWVzLiIKLQotICAgIGRlZiBleGVjdXRlKHNlbGYsIG5pY2ssIGFy
Z3MsIHRvb2wsIHNoZXJpZmYpOgotICAgICAgICByZXR1cm4gIiVzOiB5ZXMiICUgbmljawotCi0K
LWNsYXNzIFJlc3RhcnQoSVJDQ29tbWFuZCk6Ci0gICAgdXNhZ2Vfc3RyaW5nID0gInJlc3RhcnQi
Ci0gICAgaGVscF9zdHJpbmcgPSAiUmVzdGFydHMgc2hlcnJpZmJvdC4gIFdpbGwgdXBkYXRlIGl0
cyBXZWJLaXQgY2hlY2tvdXQsIGFuZCByZS1qb2luIHRoZSBjaGFubmVsIG1vbWVudGFyaWx5LiIK
LQotICAgIGRlZiBleGVjdXRlKHNlbGYsIG5pY2ssIGFyZ3MsIHRvb2wsIHNoZXJpZmYpOgotICAg
ICAgICB0b29sLmlyYygpLnBvc3QoIlJlc3RhcnRpbmcuLi4iKQotICAgICAgICByYWlzZSBUZXJt
aW5hdGVRdWV1ZSgpCi0KLQotY2xhc3MgUmV2ZXJ0KElSQ0NvbW1hbmQpOgotICAgIHVzYWdlX3N0
cmluZyA9ICJyZXZlcnQgU1ZOX1JFVklTSU9OIFtTVk5fUkVWSVNJT05TXSBSRUFTT04iCi0gICAg
aGVscF9zdHJpbmcgPSAiT3BlbnMgYSBidWcgdG8gcmV2ZXJ0IHRoZSBzcGVjaWZpZWQgcmV2aXNp
b24sIENDaW5nIGF1dGhvciArIHJldmlld2VyLCBhbmQgYXR0YWNoaW5nIHRoZSByZXZlcnNlLWRp
ZmYgb2YgdGhlIGdpdmVuIHJldmlzaW9ucyBtYXJrZWQgYXMgY29tbWl0LXF1ZXVlPT8uIgotCi0g
ICAgZGVmIF9leHRyYWN0X3JldmlzaW9ucyhzZWxmLCBhcmcpOgotICAgICAgICByZXZpc2lvbl9s
aXN0ID0gW10KLSAgICAgICAgcG9zc2libGVfcmV2aXNpb25zID0gYXJnLnNwbGl0KCIsIikKLSAg
ICAgICAgZm9yIHJldmlzaW9uIGluIHBvc3NpYmxlX3JldmlzaW9uczoKLSAgICAgICAgICAgIHJl
dmlzaW9uID0gcmV2aXNpb24uc3RyaXAoKQotICAgICAgICAgICAgaWYgbm90IHJldmlzaW9uOgot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICByZXZpc2lvbiA9IHJldmlzaW9u
LmxzdHJpcCgiciIpCi0gICAgICAgICAgICAjIElmIG9uZSBwYXJ0IG9mIHRoZSBhcmcgaXNuJ3Qg
aW4gdGhlIGNvcnJlY3QgZm9ybWF0LAotICAgICAgICAgICAgIyB0aGVuIG5vbmUgb2YgdGhlIGFy
ZyBzaG91bGQgYmUgY29uc2lkZXJlZCBhIHJldmlzaW9uLgotICAgICAgICAgICAgaWYgbm90IHJl
dmlzaW9uLmlzZGlnaXQoKToKLSAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICAg
ICAgcmV2aXNpb25fbGlzdC5hcHBlbmQoaW50KHJldmlzaW9uKSkKLSAgICAgICAgcmV0dXJuIHJl
dmlzaW9uX2xpc3QKLQotICAgIGRlZiBfcGFyc2VfYXJncyhzZWxmLCBhcmdzKToKLSAgICAgICAg
aWYgbm90IGFyZ3M6Ci0gICAgICAgICAgICByZXR1cm4gKE5vbmUsIE5vbmUpCi0KLSAgICAgICAg
c3ZuX3JldmlzaW9uX2xpc3QgPSBbXQotICAgICAgICByZW1haW5pbmdfYXJncyA9IGFyZ3NbOl0K
LSAgICAgICAgIyBGaXJzdCBwcm9jZXNzIGFsbCByZXZpc2lvbnMuCi0gICAgICAgIHdoaWxlIHJl
bWFpbmluZ19hcmdzOgotICAgICAgICAgICAgbmV3X3JldmlzaW9ucyA9IHNlbGYuX2V4dHJhY3Rf
cmV2aXNpb25zKHJlbWFpbmluZ19hcmdzWzBdKQotICAgICAgICAgICAgaWYgbm90IG5ld19yZXZp
c2lvbnM6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIHN2bl9yZXZpc2lvbl9s
aXN0ICs9IG5ld19yZXZpc2lvbnMKLSAgICAgICAgICAgIHJlbWFpbmluZ19hcmdzID0gcmVtYWlu
aW5nX2FyZ3NbMTpdCi0KLSAgICAgICAgIyBXYXMgdGhlcmUgYSByZXZpc2lvbiBudW1iZXI/Ci0g
ICAgICAgIGlmIG5vdCBsZW4oc3ZuX3JldmlzaW9uX2xpc3QpOgotICAgICAgICAgICAgcmV0dXJu
IChOb25lLCBOb25lKQotCi0gICAgICAgICMgRXZlcnl0aGluZyBsZWZ0IGlzIHRoZSByZWFzb24u
Ci0gICAgICAgIHJldmVydF9yZWFzb24gPSAiICIuam9pbihyZW1haW5pbmdfYXJncykKLSAgICAg
ICAgcmV0dXJuIHN2bl9yZXZpc2lvbl9saXN0LCByZXZlcnRfcmVhc29uCi0KLSAgICBkZWYgX3Jl
c3BvbnNpYmxlX25pY2tuYW1lc19mcm9tX3JldmlzaW9ucyhzZWxmLCB0b29sLCBzaGVyaWZmLCBz
dm5fcmV2aXNpb25fbGlzdCk6Ci0gICAgICAgIGNvbW1pdF9pbmZvcyA9IG1hcCh0b29sLmNoZWNr
b3V0KCkuY29tbWl0X2luZm9fZm9yX3JldmlzaW9uLCBzdm5fcmV2aXNpb25fbGlzdCkKLSAgICAg
ICAgbmlja25hbWVfbGlzdHMgPSBtYXAoc2hlcmlmZi5yZXNwb25zaWJsZV9uaWNrbmFtZXNfZnJv
bV9jb21taXRfaW5mbywgY29tbWl0X2luZm9zKQotICAgICAgICByZXR1cm4gc29ydGVkKHNldChp
dGVydG9vbHMuY2hhaW4oKm5pY2tuYW1lX2xpc3RzKSkpCi0KLSAgICBkZWYgX25pY2tzX3N0cmlu
ZyhzZWxmLCB0b29sLCBzaGVyaWZmLCByZXF1ZXN0ZXJfbmljaywgc3ZuX3JldmlzaW9uX2xpc3Qp
OgotICAgICAgICAjIEZJWE1FOiBfcGFyc2VfYXJncyBndWFyZW50ZWVzIHRoYXQgb3VyIHN2bl9y
ZXZpc2lvbl9saXN0IGlzIGFsbCBudW1iZXJzLgotICAgICAgICAjIEhvd2V2ZXIsIGl0J3MgcG9z
c2libGUgb3VyIGNoZWNrb3V0IHdpbGwgbm90IGluY2x1ZGUgb25lIG9mIHRoZSByZXZpc2lvbnMs
Ci0gICAgICAgICMgc28gd2UgbWF5IG5lZWQgdG8gY2F0Y2ggZXhjZXB0aW9ucyBmcm9tIGNvbW1p
dF9pbmZvX2Zvcl9yZXZpc2lvbiBoZXJlLgotICAgICAgICB0YXJnZXRfbmlja3MgPSBbcmVxdWVz
dGVyX25pY2tdICsgc2VsZi5fcmVzcG9uc2libGVfbmlja25hbWVzX2Zyb21fcmV2aXNpb25zKHRv
b2wsIHNoZXJpZmYsIHN2bl9yZXZpc2lvbl9saXN0KQotICAgICAgICByZXR1cm4gIiwgIi5qb2lu
KHRhcmdldF9uaWNrcykKLQotICAgIGRlZiBfdXBkYXRlX3dvcmtpbmdfY29weShzZWxmLCB0b29s
KToKLSAgICAgICAgdG9vbC5zY20oKS5kaXNjYXJkX2xvY2FsX2NoYW5nZXMoKQotICAgICAgICB0
b29sLmV4ZWN1dGl2ZS5ydW5fYW5kX3Rocm93X2lmX2ZhaWwodG9vbC5kZXByZWNhdGVkX3BvcnQo
KS51cGRhdGVfd2Via2l0X2NvbW1hbmQoKSwgcXVpZXQ9VHJ1ZSwgY3dkPXRvb2wuc2NtKCkuY2hl
Y2tvdXRfcm9vdCkKLQotICAgIGRlZiBfY2hlY2tfZGlmZl9mYWlsdXJlKHNlbGYsIGVycm9yX2xv
ZywgdG9vbCk6Ci0gICAgICAgIGlmIG5vdCBlcnJvcl9sb2c6Ci0gICAgICAgICAgICByZXR1cm4g
Tm9uZQotCi0gICAgICAgIHJldmVydF9mYWlsdXJlX21lc3NhZ2Vfc3RhcnQgPSBlcnJvcl9sb2cu
ZmluZCgiRmFpbGVkIHRvIGFwcGx5IHJldmVyc2UgZGlmZiBmb3IgcmV2aXNpb24iKQotICAgICAg
ICBpZiByZXZlcnRfZmFpbHVyZV9tZXNzYWdlX3N0YXJ0ID09IC0xOgotICAgICAgICAgICAgcmV0
dXJuIE5vbmUKLQotICAgICAgICBsaW5lcyA9IGVycm9yX2xvZ1tyZXZlcnRfZmFpbHVyZV9tZXNz
YWdlX3N0YXJ0Ol0uc3BsaXQoJ1xuJylbMTpdCi0gICAgICAgIGZpbGVzID0gbGlzdChpdGVydG9v
bHMudGFrZXdoaWxlKGxhbWJkYSBsaW5lOiB0b29sLmZpbGVzeXN0ZW0uZXhpc3RzKHRvb2wuc2Nt
KCkuYWJzb2x1dGVfcGF0aChsaW5lKSksIGxpbmVzKSkKLSAgICAgICAgaWYgZmlsZXM6Ci0gICAg
ICAgICAgICByZXR1cm4gIkZhaWxlZCB0byBhcHBseSByZXZlcnNlIGRpZmYgZm9yICVzOiAlcyIg
JSAocGx1cmFsaXplKGxlbihmaWxlcyksICJmaWxlIiwgc2hvd0NvdW50PUZhbHNlKSwgIiwgIi5q
b2luKGZpbGVzKSkKLSAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgIGRlZiBleGVjdXRlKHNlbGYs
IG5pY2ssIGFyZ3MsIHRvb2wsIHNoZXJpZmYpOgotICAgICAgICBzdm5fcmV2aXNpb25fbGlzdCwg
cmV2ZXJ0X3JlYXNvbiA9IHNlbGYuX3BhcnNlX2FyZ3MoYXJncykKLQotICAgICAgICBpZiAobm90
IHN2bl9yZXZpc2lvbl9saXN0IG9yIG5vdCByZXZlcnRfcmVhc29uKToKLSAgICAgICAgICAgIHJl
dHVybiBzZWxmLnVzYWdlKG5pY2spCi0KLSAgICAgICAgcmV2aXNpb25fdXJsc19zdHJpbmcgPSBq
b2luX3dpdGhfc2VwYXJhdG9ycyhbdXJscy52aWV3X3JldmlzaW9uX3VybChyZXZpc2lvbikgZm9y
IHJldmlzaW9uIGluIHN2bl9yZXZpc2lvbl9saXN0XSkKLSAgICAgICAgdG9vbC5pcmMoKS5wb3N0
KCIlczogUHJlcGFyaW5nIHJldmVydCBmb3IgJXMgLi4uIiAlIChuaWNrLCByZXZpc2lvbl91cmxz
X3N0cmluZykpCi0KLSAgICAgICAgc2VsZi5fdXBkYXRlX3dvcmtpbmdfY29weSh0b29sKQotCi0g
ICAgICAgICMgRklYTUU6IElSQ0NvbW1hbmQgc2hvdWxkIGJpbmQgdG8gYSB0b29sIGFuZCBoYXZl
IGEgc2VsZi5fdG9vbCBsaWtlIENvbW1hbmQgb2JqZWN0cyBkby4KLSAgICAgICAgIyBMaWtld2lz
ZSB3ZSBzaG91bGQgcHJvYmFibHkgaGF2ZSBhIHNlbGYuX3NoZXJpZmYuCi0gICAgICAgIG5pY2tz
X3N0cmluZyA9IHNlbGYuX25pY2tzX3N0cmluZyh0b29sLCBzaGVyaWZmLCBuaWNrLCBzdm5fcmV2
aXNpb25fbGlzdCkKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBjb21wbGV0ZV9yZWFzb24g
PSAiJXMgKFJlcXVlc3RlZCBieSAlcyBvbiAlcykuIiAlICgKLSAgICAgICAgICAgICAgICByZXZl
cnRfcmVhc29uLCBuaWNrLCBjb25maWdfaXJjLmNoYW5uZWwpCi0gICAgICAgICAgICBidWdfaWQg
PSBzaGVyaWZmLnBvc3RfcmV2ZXJ0X3BhdGNoKHN2bl9yZXZpc2lvbl9saXN0LCBjb21wbGV0ZV9y
ZWFzb24pCi0gICAgICAgICAgICBidWdfdXJsID0gdG9vbC5idWdzLmJ1Z191cmxfZm9yX2J1Z19p
ZChidWdfaWQpCi0gICAgICAgICAgICB0b29sLmlyYygpLnBvc3QoIiVzOiBDcmVhdGVkIGEgcmV2
ZXJ0IHBhdGNoOiAlcyIgJSAobmlja3Nfc3RyaW5nLCBidWdfdXJsKSkKLSAgICAgICAgZXhjZXB0
IFNjcmlwdEVycm9yIGFzIGU6Ci0gICAgICAgICAgICB0b29sLmlyYygpLnBvc3QoIiVzOiBGYWls
ZWQgdG8gY3JlYXRlIHJldmVydCBwYXRjaDoiICUgbmlja3Nfc3RyaW5nKQotICAgICAgICAgICAg
ZGlmZl9mYWlsdXJlID0gc2VsZi5fY2hlY2tfZGlmZl9mYWlsdXJlKGUub3V0cHV0LCB0b29sKQot
ICAgICAgICAgICAgaWYgZGlmZl9mYWlsdXJlOgotICAgICAgICAgICAgICAgIHJldHVybiAiJXM6
ICVzIiAlIChuaWNrc19zdHJpbmcsIGRpZmZfZmFpbHVyZSkKLSAgICAgICAgICAgIF9wb3N0X2Vy
cm9yX2FuZF9jaGVja19mb3JfYnVnX3VybCh0b29sLCBuaWNrc19zdHJpbmcsIGUpCi0KLQotY2xh
c3MgV2hvaXMoSVJDQ29tbWFuZCk6Ci0gICAgdXNhZ2Vfc3RyaW5nID0gIndob2lzIFNFQVJDSF9T
VFJJTkciCi0gICAgaGVscF9zdHJpbmcgPSAiU2VhcmNoZXMga25vd24gY29udHJpYnV0b3JzIGFu
ZCByZXR1cm5zIGFueSBtYXRjaGVzIHdpdGggaXJjLCBlbWFpbCBhbmQgZnVsbCBuYW1lLiBXaWxk
IGNhcmQgKiBwZXJtaXR0ZWQuIgotCi0gICAgZGVmIF9mdWxsX3JlY29yZF9hbmRfbmljayhzZWxm
LCBjb250cmlidXRvcik6Ci0gICAgICAgIHJlc3VsdCA9ICcnCi0KLSAgICAgICAgaWYgY29udHJp
YnV0b3IuaXJjX25pY2tuYW1lczoKLSAgICAgICAgICAgIHJlc3VsdCArPSAnICg6JXMpJyAlICcs
IDonLmpvaW4oY29udHJpYnV0b3IuaXJjX25pY2tuYW1lcykKLQotICAgICAgICBpZiBjb250cmli
dXRvci5jYW5fcmV2aWV3OgotICAgICAgICAgICAgcmVzdWx0ICs9ICcgKHIpJwotICAgICAgICBl
bGlmIGNvbnRyaWJ1dG9yLmNhbl9jb21taXQ6Ci0gICAgICAgICAgICByZXN1bHQgKz0gJyAoYykn
Ci0KLSAgICAgICAgcmV0dXJuIHVuaWNvZGUoY29udHJpYnV0b3IpICsgcmVzdWx0Ci0KLSAgICBk
ZWYgZXhlY3V0ZShzZWxmLCBuaWNrLCBhcmdzLCB0b29sLCBzaGVyaWZmKToKLSAgICAgICAgaWYg
bm90IGFyZ3M6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi51c2FnZShuaWNrKQotICAgICAgICBz
ZWFyY2hfc3RyaW5nID0gdW5pY29kZSgiICIuam9pbihhcmdzKSkKLSAgICAgICAgIyBGSVhNRTog
V2Ugc2hvdWxkIGdldCB0aGUgQ29udHJpYnV0b3JMaXN0IG9mZiB0aGUgdG9vbCBzb21ld2hlcmUu
Ci0gICAgICAgIGNvbnRyaWJ1dG9ycyA9IENvbW1pdHRlckxpc3QoKS5jb250cmlidXRvcnNfYnlf
c2VhcmNoX3N0cmluZyhzZWFyY2hfc3RyaW5nKQotICAgICAgICBpZiBub3QgY29udHJpYnV0b3Jz
OgotICAgICAgICAgICAgcmV0dXJuIHVuaWNvZGUoIiVzOiBTb3JyeSwgSSBkb24ndCBrbm93IGFu
eSBjb250cmlidXRvcnMgbWF0Y2hpbmcgJyVzJy4iKSAlIChuaWNrLCBzZWFyY2hfc3RyaW5nKQot
ICAgICAgICBpZiBsZW4oY29udHJpYnV0b3JzKSA+IDU6Ci0gICAgICAgICAgICByZXR1cm4gdW5p
Y29kZSgiJXM6IE1vcmUgdGhhbiA1IGNvbnRyaWJ1dG9ycyBtYXRjaCAnJXMnLCBjb3VsZCB5b3Ug
YmUgbW9yZSBzcGVjaWZpYz8iKSAlIChuaWNrLCBzZWFyY2hfc3RyaW5nKQotICAgICAgICBpZiBs
ZW4oY29udHJpYnV0b3JzKSA9PSAxOgotICAgICAgICAgICAgY29udHJpYnV0b3IgPSBjb250cmli
dXRvcnNbMF0KLSAgICAgICAgICAgIGlmIG5vdCBjb250cmlidXRvci5pcmNfbmlja25hbWVzOgot
ICAgICAgICAgICAgICAgIHJldHVybiB1bmljb2RlKCIlczogJXMgaGFzbid0IHRvbGQgbWUgdGhl
aXIgbmljay4gQm9vIGhvbyA6LSgiKSAlIChuaWNrLCBjb250cmlidXRvcikKLSAgICAgICAgICAg
IHJldHVybiB1bmljb2RlKCIlczogJXMgaXMgJXMuIFdoeSBkbyB5b3UgYXNrPyIpICUgKG5pY2ss
IHNlYXJjaF9zdHJpbmcsIHNlbGYuX2Z1bGxfcmVjb3JkX2FuZF9uaWNrKGNvbnRyaWJ1dG9yKSkK
LSAgICAgICAgY29udHJpYnV0b3Jfbmlja3MgPSBsaXN0KG1hcChzZWxmLl9mdWxsX3JlY29yZF9h
bmRfbmljaywgY29udHJpYnV0b3JzKSkKLSAgICAgICAgY29udHJpYnV0b3JzX3N0cmluZyA9IGpv
aW5fd2l0aF9zZXBhcmF0b3JzKGNvbnRyaWJ1dG9yX25pY2tzLCBvbmx5X3R3b19zZXBhcmF0b3I9
IiBvciAiLCBsYXN0X3NlcGFyYXRvcj0nLCBvciAnKQotICAgICAgICByZXR1cm4gdW5pY29kZSgi
JXM6IEknbSBub3Qgc3VyZSB3aG8geW91IG1lYW4/ICAlcyBjb3VsZCBiZSAnJXMnLiIpICUgKG5p
Y2ssIGNvbnRyaWJ1dG9yc19zdHJpbmcsIHNlYXJjaF9zdHJpbmcpCi0KLQotIyBGSVhNRTogTGFt
ZS4gIFdlIHNob3VsZCBoYXZlIGFuIGF1dG8tcmVnaXN0ZXJpbmcgQ29tbWFuZENlbnRlci4KLXZp
c2libGVfY29tbWFuZHMgPSB7Ci0gICAgImNyZWF0ZS1idWciOiBDcmVhdGVCdWcsCi0gICAgImhl
bHAiOiBIZWxwLAotICAgICJoaSI6IEhpLAotICAgICJwaW5nIjogUGluZ1BvbmcsCi0gICAgInJl
c3RhcnQiOiBSZXN0YXJ0LAotICAgICJyZXZlcnQiOiBSZXZlcnQsCi0gICAgIndob2lzIjogV2hv
aXMsCi0gICAgInl0PyI6IFlvdVRoZXJlLAotfQotCi0jIEFkZCAicm9sbG91dCIgYXMgYW4gY29t
bWFuZCBhbGlhcyBmb3IgInJldmVydCIsIHNpbmNlIGl0IHdhcyB0aGUgc3RhbmRhcmQgdGVybSBm
b3Igc28gbWFueSB5ZWFycy4KLWNvbW1hbmRzID0gdmlzaWJsZV9jb21tYW5kcy5jb3B5KCkKLWNv
bW1hbmRzWyJyb2xsb3V0Il0gPSBSZXZlcnQKLSMgImhlbGxvIiBBbGlhcyBmb3IgImhpIiBjb21t
YW5kIGZvciB0aGUgcHVycG9zZXMgb2YgdGVzdGluZyBhbGlhc2VzCi1jb21tYW5kc1siaGVsbG8i
XSA9IEhpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvYm90L2lyY19jb21tYW5k
X3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9i
b3QvaXJjX2NvbW1hbmRfdW5pdHRlc3QucHkJKHJldmlzaW9uIDI2OTk4MCkKKysrIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvdG9vbC9ib3QvaXJjX2NvbW1hbmRfdW5pdHRlc3QucHkJKG5vbmV4aXN0
ZW50KQpAQCAtMSwxNTkgKzAsMCBAQAotIyBDb3B5cmlnaHQgKGMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0
OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWltcG9ydCBsb2dnaW5nCi1p
bXBvcnQgb3MKLWltcG9ydCB1bml0dGVzdAotCi1mcm9tIHdlYmtpdHB5LnRvb2wuYm90LmlyY19j
b21tYW5kIGltcG9ydCAqCi1mcm9tIHdlYmtpdHB5LnRvb2wubW9ja3Rvb2wgaW1wb3J0IE1vY2tU
b29sCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5uZXQud2ViX21vY2sgaW1wb3J0IE1vY2tXZWIKLWZy
b20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmVfbW9jayBpbXBvcnQgTW9ja0V4ZWN1
dGl2ZQotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmZpbGVzeXN0ZW1fbW9jayBpbXBvcnQg
TW9ja0ZpbGVTeXN0ZW0KLQotZnJvbSB3ZWJraXRjb3JlcHkgaW1wb3J0IE91dHB1dENhcHR1cmUK
LQotCi1jbGFzcyBJUkNDb21tYW5kVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHRl
c3Rfd2hvaXMoc2VsZik6Ci0gICAgICAgIHdob2lzID0gV2hvaXMoKQotICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKCJ0b206IFVzYWdlOiB3aG9pcyBTRUFSQ0hfU1RSSU5HIiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgd2hvaXMuZXhlY3V0ZSgidG9tIiwgW10sIE5vbmUsIE5vbmUpKQotICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKCJ0b206IFNvcnJ5LCBJIGRvbid0IGtub3cgYW55IGNvbnRy
aWJ1dG9ycyBtYXRjaGluZyAndW5rbm93bkBleGFtcGxlLmNvbScuIiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgd2hvaXMuZXhlY3V0ZSgidG9tIiwgWyJ1bmtub3duQGV4YW1wbGUuY29tIl0s
IE5vbmUsIE5vbmUpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd0b206IHRvbnlnQGNocm9t
aXVtLm9yZyBpcyAiVG9ueSBHZW50aWxjb3JlIiA8dG9ueWdAY2hyb21pdW0ub3JnPiAoOnRvbnln
LWNyKS4gV2h5IGRvIHlvdSBhc2s/JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgd2hvaXMu
ZXhlY3V0ZSgidG9tIiwgWyJ0b255Z0BjaHJvbWl1bS5vcmciXSwgTm9uZSwgTm9uZSkpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3RvbTogVG9ueUdAQ2hyb21pdW0ub3JnIGlzICJUb255IEdl
bnRpbGNvcmUiIDx0b255Z0BjaHJvbWl1bS5vcmc+ICg6dG9ueWctY3IpLiBXaHkgZG8geW91IGFz
az8nLAotICAgICAgICAgICAgICAgICAgICAgICAgICB3aG9pcy5leGVjdXRlKCJ0b20iLCBbIlRv
bnlHQENocm9taXVtLm9yZyJdLCBOb25lLCBOb25lKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCgndG9tOiBybml3YSBpcyAiUnlvc3VrZSBOaXdhIiA8cm5pd2FAd2Via2l0Lm9yZz4gKDpybml3
YSkgKHIpLiBXaHkgZG8geW91IGFzaz8nLAotICAgICAgICAgICAgICAgICAgICAgICAgICB3aG9p
cy5leGVjdXRlKCJ0b20iLCBbInJuaXdhIl0sIE5vbmUsIE5vbmUpKQotICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKCd0b206IFhhbiBMb3BleiBpcyAiWGFuIExvcGV6IiA8eGFuLmxvcGV6QGdtYWls
LmNvbT4gKDp4YW4pIChyKS4gV2h5IGRvIHlvdSBhc2s/JywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgd2hvaXMuZXhlY3V0ZSgidG9tIiwgWyJYYW4iLCAiTG9wZXoiXSwgTm9uZSwgTm9uZSkp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd0b206IE9zenRyb2dvblx1MDBlMWMgaXMgIkNz
YWJhIE9zenRyb2dvblx1MDBlMWMiIDxvc3N5QHdlYmtpdC5vcmc+ICg6b3NzeSkuIFdoeSBkbyB5
b3UgYXNrPycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHdob2lzLmV4ZWN1dGUoInRvbSIs
IFt1J09zenRyb2dvblx1MDBlMWMnXSwgTm9uZSwgTm9uZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoJ3RvbTogIlZpY2tpIE11cmxleSIgPHZpY2tpQGFwcGxlLmNvbT4gaGFzblwndCB0b2xk
IG1lIHRoZWlyIG5pY2suIEJvbyBob28gOi0oJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
d2hvaXMuZXhlY3V0ZSgidG9tIiwgWyJ2aWNraUBhcHBsZS5jb20iXSwgTm9uZSwgTm9uZSkpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3RvbTogSVwnbSBub3Qgc3VyZSB3aG8geW91IG1lYW4/
ICAiR2F2aW4gQmFycmFjbG91Z2giIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+ICg6Z2JhcnJhKSBv
ciAiR2F2aW4gUGV0ZXJzIiA8Z2F2aW5wQGNocm9taXVtLm9yZz4gKDpnYXZpbnApIGNvdWxkIGJl
IFwnR2F2aW5cJy4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICB3aG9pcy5leGVjdXRlKCJ0
b20iLCBbIkdhdmluIl0sIE5vbmUsIE5vbmUpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd0
b206IE1vcmUgdGhhbiA1IGNvbnRyaWJ1dG9ycyBtYXRjaCBcJ2RhdmlkXCcsIGNvdWxkIHlvdSBi
ZSBtb3JlIHNwZWNpZmljPycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHdob2lzLmV4ZWN1
dGUoInRvbSIsIFsiZGF2aWQiXSwgTm9uZSwgTm9uZSkpCi0KLSAgICBkZWYgdGVzdF9jcmVhdGVf
YnVnKHNlbGYpOgotICAgICAgICBjcmVhdGVfYnVnID0gQ3JlYXRlQnVnKCkKLSAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCgidG9tOiBVc2FnZTogY3JlYXRlLWJ1ZyBCVUdfVElUTEUiLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICBjcmVhdGVfYnVnLmV4ZWN1dGUoInRvbSIsIFtdLCBOb25lLCBO
b25lKSkKLQotICAgICAgICBleGFtcGxlX2FyZ3MgPSBbInNoZXJyaWYtYm90IiwgInNob3VsZCIs
ICJoYXZlIiwgImEiLCAiY3JlYXRlLWJ1ZyIsICJjb21tYW5kIl0KLSAgICAgICAgdG9vbCA9IE1v
Y2tUb29sKCkKLQotICAgICAgICAjIE1vY2tCdWd6aWxsYSBoYXMgYSBjcmVhdGVfYnVnLCBidXQg
aXQgbG9ncyB0byBzdGRlcnIsIHRoaXMgYXZvaWRzIGFueSBsb2dnaW5nLgotICAgICAgICB0b29s
LmJ1Z3MuY3JlYXRlX2J1ZyA9IGxhbWJkYSBhLCBiLCBjYz1Ob25lLCBhc3NpZ25lZT1Ob25lOiA1
MDAwNAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ0b206IENyZWF0ZWQgYnVnOiBodHRwOi8v
ZXhhbXBsZS5jb20vNTAwMDQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVfYnVn
LmV4ZWN1dGUoInRvbSIsIGV4YW1wbGVfYXJncywgdG9vbCwgTm9uZSkpCi0KLSAgICAgICAgZGVm
IG1vY2tfY3JlYXRlX2J1Zyh0aXRsZSwgZGVzY3JpcHRpb24sIGNjPU5vbmUsIGFzc2lnbmVlPU5v
bmUpOgotICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJFeGNlcHRpb24gZnJvbSBidWd6aWxs
YSEiKQotICAgICAgICB0b29sLmJ1Z3MuY3JlYXRlX2J1ZyA9IG1vY2tfY3JlYXRlX2J1ZwotICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKCJ0b206IEZhaWxlZCB0byBjcmVhdGUgYnVnOlxuRXhjZXB0
aW9uIGZyb20gYnVnemlsbGEhIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlX2J1
Zy5leGVjdXRlKCJ0b20iLCBleGFtcGxlX2FyZ3MsIHRvb2wsIE5vbmUpKQotCi0gICAgZGVmIHRl
c3RfcmV2ZXJ0X3VwZGF0ZXNfd29ya2luZ19jb3B5KHNlbGYpOgotICAgICAgICByZXZlcnQgPSBS
ZXZlcnQoKQotICAgICAgICB0b29sID0gTW9ja1Rvb2woKQotICAgICAgICB0b29sLmV4ZWN1dGl2
ZSA9IE1vY2tFeGVjdXRpdmUoc2hvdWxkX2xvZz1UcnVlKQotICAgICAgICB3aXRoIE91dHB1dENh
cHR1cmUobGV2ZWw9bG9nZ2luZy5JTkZPKSBhcyBjYXB0dXJlZDoKLSAgICAgICAgICAgIHJldmVy
dC5fdXBkYXRlX3dvcmtpbmdfY29weSh0b29sKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAot
ICAgICAgICAgICAgY2FwdHVyZWQucm9vdC5sb2cuZ2V0dmFsdWUoKSwKLSAgICAgICAgICAgICJN
T0NLIHJ1bl9hbmRfdGhyb3dfaWZfZmFpbDogWydtb2NrLXVwZGF0ZS13ZWJraXQnXSwgY3dkPS9t
b2NrLWNoZWNrb3V0XG4iLAotICAgICAgICApCi0KLSAgICBkZWYgdGVzdF9yZXZlcnQoc2VsZik6
Ci0gICAgICAgIHJldmVydCA9IFJldmVydCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKFsx
MjM0XSwgInRlc3RpbmcgZm9vIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgcmV2ZXJ0Ll9w
YXJzZV9hcmdzKFsiMTIzNCIsICJ0ZXN0aW5nIiwgImZvbyJdKSkKLQotICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKChbNTU0XSwgInRlc3RpbmcgZm9vIiksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgcmV2ZXJ0Ll9wYXJzZV9hcmdzKFsicjU1NCIsICJ0ZXN0aW5nIiwgImZvbyJdKSkKLQotICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKChbNTU2LCA3OTJdLCAidGVzdGluZyBmb28iKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICByZXZlcnQuX3BhcnNlX2FyZ3MoWyJyNTU2IiwgIjc5MiIsICJ0
ZXN0aW5nIiwgImZvbyJdKSkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChbMTI4LCAyNTZd
LCAidGVzdGluZyBmb28iKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICByZXZlcnQuX3BhcnNl
X2FyZ3MoWyJyMTI4LHIyNTYiLCAidGVzdGluZyIsICJmb28iXSkpCi0KLSAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbCgoWzUxMiwgMTAyNCwgMjA0OF0sICJ0ZXN0aW5nIGZvbyIpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldmVydC5fcGFyc2VfYXJncyhbIjUxMiwiLCAiMTAyNCwyMDQ4Iiwg
InRlc3RpbmciLCAiZm9vIl0pKQotCi0gICAgICAgICMgVGVzdCBpbnZhbGlkIGFyZ3VtZW50IHBh
cnNpbmc6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKE5vbmUsIE5vbmUpLCByZXZlcnQuX3Bh
cnNlX2FyZ3MoW10pKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChOb25lLCBOb25lKSwgcmV2
ZXJ0Ll9wYXJzZV9hcmdzKFsiLS1iYXIiLCAiMTIzNCJdKSkKLQotICAgICAgICAjIEludmFsaWQg
YXJndW1lbnRzIHJlc3VsdCBpbiB0aGUgVVNBR0UgbWVzc2FnZS4KLSAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCgidG9tOiBVc2FnZTogcmV2ZXJ0IFNWTl9SRVZJU0lPTiBbU1ZOX1JFVklTSU9OU10g
UkVBU09OIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICByZXZlcnQuZXhlY3V0ZSgidG9tIiwg
W10sIE5vbmUsIE5vbmUpKQotCi0gICAgICAgIHRvb2wgPSBNb2NrVG9vbCgpCi0gICAgICAgIHRv
b2wuZmlsZXN5c3RlbS5maWxlc1siL21vY2stY2hlY2tvdXQvdGVzdC9maWxlL29uZSJdID0gIiIK
LSAgICAgICAgdG9vbC5maWxlc3lzdGVtLmZpbGVzWyIvbW9jay1jaGVja291dC90ZXN0L2ZpbGUv
dHdvIl0gPSAiIgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJGYWlsZWQgdG8gYXBwbHkgcmV2
ZXJzZSBkaWZmIGZvciBmaWxlczogdGVzdC9maWxlL29uZSwgdGVzdC9maWxlL3R3byIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgcmV2ZXJ0Ll9jaGVja19kaWZmX2ZhaWx1cmUoIiIiCi1QcmVw
YXJpbmcgcmV2ZXJ0IGZvciBidWcgMTIzNDU2LgotVXBkYXRpbmcgd29ya2luZyBkaXJlY3RvcnkK
LUZhaWxlZCB0byBhcHBseSByZXZlcnNlIGRpZmYgZm9yIHJldmlzaW9uIDEyMzQ1NiBiZWNhdXNl
IG9mIHRoZSBmb2xsb3dpbmcgY29uZmxpY3RzOgotdGVzdC9maWxlL29uZQotdGVzdC9maWxlL3R3
bwotRmFpbGVkIHRvIGFwcGx5IHJldmVyc2UgZGlmZiBmb3IgcmV2aXNpb24gMTIzNDU2IGJlY2F1
c2Ugb2YgdGhlIGZvbGxvd2luZyBjb25mbGljdHM6Ci10ZXN0L2ZpbGUvb25lCi10ZXN0L2ZpbGUv
dHdvCi1VcGRhdGluZyBPcGVuU291cmNlCi1DdXJyZW50IGJyYW5jaCBtYXN0ZXIgaXMgdXAgdG8g
ZGF0ZS4KLSAgICAgICAgIiIiLCB0b29sKSkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJG
YWlsZWQgdG8gYXBwbHkgcmV2ZXJzZSBkaWZmIGZvciBmaWxlOiB0ZXN0L2ZpbGUvb25lIiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICByZXZlcnQuX2NoZWNrX2RpZmZfZmFpbHVyZSgiIiIKLVBy
ZXBhcmluZyByZXZlcnQgZm9yIGJ1ZyAxMjM0NTYuCi1VcGRhdGluZyB3b3JraW5nIGRpcmVjdG9y
eQotRmFpbGVkIHRvIGFwcGx5IHJldmVyc2UgZGlmZiBmb3IgcmV2aXNpb24gMTIzNDU2IGJlY2F1
c2Ugb2YgdGhlIGZvbGxvd2luZyBjb25mbGljdHM6Ci10ZXN0L2ZpbGUvb25lCi1VcGRhdGluZyBP
cGVuU291cmNlCi1DdXJyZW50IGJyYW5jaCBtYXN0ZXIgaXMgdXAgdG8gZGF0ZS4KLSAgICAgICAg
IiIiLCB0b29sKSkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHJldmVydC5fY2hl
Y2tfZGlmZl9mYWlsdXJlKCIiIgotUHJlcGFyaW5nIHJldmVydCBmb3IgYnVnIDEyMzQ1Ni4KLVVw
ZGF0aW5nIHdvcmtpbmcgZGlyZWN0b3J5Ci1Tb21lIG90aGVyIGVycm9yIHJlcG9ydCBpbnZvbHZp
bmcgZmlsZSBwYXRoczoKLXRlc3QvZmlsZS9vbmUKLXRlc3QvZmlsZS90d28KLVVwZGF0aW5nIE9w
ZW5Tb3VyY2UKLUN1cnJlbnQgYnJhbmNoIG1hc3RlciBpcyB1cCB0byBkYXRlLgotICAgICAgICAi
IiIsIHRvb2wpKQotCi0gICAgICAgICMgRklYTUU6IFdlIG5lZWQgYSBiZXR0ZXIgd2F5IHRvIHRl
c3QgSVJDQ29tbWFuZHMgd2hpY2ggY2FsbCB0b29sLmlyYygpLnBvc3QoKQpJbmRleDogVG9vbHMv
U2NyaXB0cy93ZWJraXRweS90b29sL2JvdC9pcmNib3QucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
U2NyaXB0cy93ZWJraXRweS90b29sL2JvdC9pcmNib3QucHkJKHJldmlzaW9uIDI2OTk4MCkKKysr
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9ib3QvaXJjYm90LnB5CShub25leGlzdGVudCkK
QEAgLTEsOTggKzAsMCBAQAotIyBDb3B5cmlnaHQgKGMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0Ogot
IwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWZyb20gd2Via2l0cHkudG9vbC5i
b3QucXVldWVlbmdpbmUgaW1wb3J0IFRlcm1pbmF0ZVF1ZXVlCi1mcm9tIHdlYmtpdHB5LnRvb2wu
Ym90LmlyY19jb21tYW5kIGltcG9ydCBJUkNDb21tYW5kCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5u
ZXQuaXJjLmlyY2JvdCBpbXBvcnQgSVJDQm90RGVsZWdhdGUKLWZyb20gd2Via2l0cHkuY29tbW9u
LnRocmVhZC50aHJlYWRlZG1lc3NhZ2VxdWV1ZSBpbXBvcnQgVGhyZWFkZWRNZXNzYWdlUXVldWUK
LQotCi1jbGFzcyBfSVJDVGhyZWFkVGVhcm9mZihJUkNCb3REZWxlZ2F0ZSk6Ci0gICAgZGVmIF9f
aW5pdF9fKHNlbGYsIG5hbWUsIHBhc3N3b3JkLCBtZXNzYWdlX3F1ZXVlLCB3YWtldXBfZXZlbnQp
OgotICAgICAgICBzZWxmLl9uYW1lID0gbmFtZQotICAgICAgICBzZWxmLl9wYXNzd29yZCA9IHBh
c3N3b3JkCi0gICAgICAgIHNlbGYuX21lc3NhZ2VfcXVldWUgPSBtZXNzYWdlX3F1ZXVlCi0gICAg
ICAgIHNlbGYuX3dha2V1cF9ldmVudCA9IHdha2V1cF9ldmVudAotCi0gICAgIyBJUkNCb3REZWxl
Z2F0ZSBtZXRob2RzCi0KLSAgICBkZWYgaXJjX21lc3NhZ2VfcmVjZWl2ZWQoc2VsZiwgbmljaywg
bWVzc2FnZSk6Ci0gICAgICAgIHNlbGYuX21lc3NhZ2VfcXVldWUucG9zdChbbmljaywgbWVzc2Fn
ZV0pCi0gICAgICAgIHNlbGYuX3dha2V1cF9ldmVudC5zZXQoKQotCi0gICAgZGVmIGlyY19uaWNr
bmFtZShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX25hbWUKLQotICAgIGRlZiBpcmNfcGFz
c3dvcmQoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9wYXNzd29yZAotCi0KLWNsYXNzIFVu
a25vd25Db21tYW5kKElSQ0NvbW1hbmQpOgotICAgIGRlZiBleGVjdXRlKHNlbGYsIG5pY2ssIGFy
Z3MsIHRvb2wsIHNoZXJpZmYpOgotICAgICAgICByZXR1cm4gIiVzOiAlcyIgJSAobmljaywgIi4u
LiIpCi0KLQotY2xhc3MgSVJDQm90KG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG5h
bWUsIHRvb2wsIGFnZW50LCBjb21tYW5kcyk6Ci0gICAgICAgIHNlbGYuX25hbWUgPSBuYW1lCi0g
ICAgICAgIHNlbGYuX3Rvb2wgPSB0b29sCi0gICAgICAgIHNlbGYuX2FnZW50ID0gYWdlbnQKLSAg
ICAgICAgc2VsZi5fbWVzc2FnZV9xdWV1ZSA9IFRocmVhZGVkTWVzc2FnZVF1ZXVlKCkKLSAgICAg
ICAgc2VsZi5fY29tbWFuZHMgPSBjb21tYW5kcwotCi0gICAgZGVmIGlyY19kZWxlZ2F0ZShzZWxm
KToKLSAgICAgICAgcmV0dXJuIF9JUkNUaHJlYWRUZWFyb2ZmKHNlbGYuX25hbWUsIHNlbGYuX3Rv
b2wuaXJjX3Bhc3N3b3JkLAotICAgICAgICAgICAgc2VsZi5fbWVzc2FnZV9xdWV1ZSwgc2VsZi5f
dG9vbC53YWtldXBfZXZlbnQpCi0KLSAgICBkZWYgX3BhcnNlX2NvbW1hbmRfYW5kX2FyZ3Moc2Vs
ZiwgcmVxdWVzdCk6Ci0gICAgICAgIHRva2VuaXplZF9yZXF1ZXN0ID0gcmVxdWVzdC5zdHJpcCgp
LnNwbGl0KCIgIikKLSAgICAgICAgY29tbWFuZCA9IHNlbGYuX2NvbW1hbmRzLmdldCh0b2tlbml6
ZWRfcmVxdWVzdFswXSkKLSAgICAgICAgYXJncyA9IHRva2VuaXplZF9yZXF1ZXN0WzE6XQotICAg
ICAgICBpZiBub3QgY29tbWFuZDoKLSAgICAgICAgICAgICMgR2l2ZSB0aGUgcGVvcGxlcyBzb21l
b25lIHRvIHRhbGsgd2l0aC4KLSAgICAgICAgICAgIGNvbW1hbmQgPSBVbmtub3duQ29tbWFuZAot
ICAgICAgICAgICAgYXJncyA9IHRva2VuaXplZF9yZXF1ZXN0Ci0gICAgICAgIHJldHVybiAoY29t
bWFuZCwgYXJncykKLQotICAgIGRlZiBwcm9jZXNzX21lc3NhZ2Uoc2VsZiwgcmVxdWVzdGVyX25p
Y2ssIHJlcXVlc3QpOgotICAgICAgICBjb21tYW5kLCBhcmdzID0gc2VsZi5fcGFyc2VfY29tbWFu
ZF9hbmRfYXJncyhyZXF1ZXN0KQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXNwb25zZSA9
IGNvbW1hbmQoKS5leGVjdXRlKHJlcXVlc3Rlcl9uaWNrLCBhcmdzLCBzZWxmLl90b29sLCBzZWxm
Ll9hZ2VudCkKLSAgICAgICAgICAgIGlmIHJlc3BvbnNlOgotICAgICAgICAgICAgICAgIHNlbGYu
X3Rvb2wuaXJjKCkucG9zdChyZXNwb25zZSkKLSAgICAgICAgZXhjZXB0IFRlcm1pbmF0ZVF1ZXVl
OgotICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgIyBUaGlzIHdpbGwgY2F0Y2ggZXZlcnl0aGlu
ZyBlbHNlLiBTeXN0ZW1FeGl0IGFuZCBLZXlib2FyZEludGVycnVwdCBhcmUgbm90IHN1YmNsYXNz
ZXMgb2YgRXhjZXB0aW9uLCBzbyB3ZSB3b24ndCBjYXRjaCB0aG9zZS4KLSAgICAgICAgZXhjZXB0
IEV4Y2VwdGlvbiBhcyBlOgotICAgICAgICAgICAgc2VsZi5fdG9vbC5pcmMoKS5wb3N0KCJFeGNl
cHRpb24gZXhlY3V0aW5nIGNvbW1hbmQ6ICVzIiAlIGUpCi0KLSAgICBkZWYgcHJvY2Vzc19wZW5k
aW5nX21lc3NhZ2VzKHNlbGYpOgotICAgICAgICAobWVzc2FnZXMsIGlzX3J1bm5pbmcpID0gc2Vs
Zi5fbWVzc2FnZV9xdWV1ZS50YWtlX2FsbCgpCi0gICAgICAgIGZvciBtZXNzYWdlIGluIG1lc3Nh
Z2VzOgotICAgICAgICAgICAgKG5pY2ssIHJlcXVlc3QpID0gbWVzc2FnZQotICAgICAgICAgICAg
c2VsZi5wcm9jZXNzX21lc3NhZ2UobmljaywgcmVxdWVzdCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvdG9vbC9ib3QvaXJjYm90X3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvdG9vbC9ib3QvaXJjYm90X3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAy
Njk5ODApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvYm90L2lyY2JvdF91bml0dGVz
dC5weQkobm9uZXhpc3RlbnQpCkBAIC0xLDIyOCArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0j
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotaW1w
b3J0IGxvZ2dpbmcKLWltcG9ydCByYW5kb20KLWltcG9ydCB1bml0dGVzdAotCi1mcm9tIHdlYmtp
dHB5LnRvb2wuYm90IGltcG9ydCBpcmNfY29tbWFuZAotZnJvbSB3ZWJraXRweS50b29sLmJvdC5x
dWV1ZWVuZ2luZSBpbXBvcnQgVGVybWluYXRlUXVldWUKLWZyb20gd2Via2l0cHkudG9vbC5ib3Qu
c2hlcmlmZiBpbXBvcnQgU2hlcmlmZgotZnJvbSB3ZWJraXRweS50b29sLmJvdC5pcmNib3QgaW1w
b3J0IElSQ0JvdAotZnJvbSB3ZWJraXRweS50b29sLmJvdC5pcmNib3QgaW1wb3J0IFVua25vd25D
b21tYW5kCi1mcm9tIHdlYmtpdHB5LnRvb2wuYm90LnNoZXJpZmZfdW5pdHRlc3QgaW1wb3J0IE1v
Y2tTaGVyaWZmQm90Ci1mcm9tIHdlYmtpdHB5LnRvb2wubW9ja3Rvb2wgaW1wb3J0IE1vY2tUb29s
Ci0KLWZyb20gd2Via2l0Y29yZXB5IGltcG9ydCBPdXRwdXRDYXB0dXJlCi0KLQotZGVmIHJ1biht
ZXNzYWdlKToKLSAgICB0b29sID0gTW9ja1Rvb2woKQotICAgIHRvb2wuZW5zdXJlX2lyY19jb25u
ZWN0ZWQoTm9uZSkKLSAgICBib3QgPSBJUkNCb3QoInNoZXJpZmZib3QiLCB0b29sLCBTaGVyaWZm
KHRvb2wsIE1vY2tTaGVyaWZmQm90KCkpLCBpcmNfY29tbWFuZC5jb21tYW5kcykKLSAgICBib3Qu
X21lc3NhZ2VfcXVldWUucG9zdChbIm1vY2tfbmljayIsIG1lc3NhZ2VdKQotICAgIGJvdC5wcm9j
ZXNzX3BlbmRpbmdfbWVzc2FnZXMoKQotCi0KLWNsYXNzIElSQ0JvdFRlc3QodW5pdHRlc3QuVGVz
dENhc2UpOgotICAgIGRlZiB0ZXN0X3BhcnNlX2NvbW1hbmRfYW5kX2FyZ3Moc2VsZik6Ci0gICAg
ICAgIHRvb2wgPSBNb2NrVG9vbCgpCi0gICAgICAgIGJvdCA9IElSQ0JvdCgic2hlcmlmZmJvdCIs
IHRvb2wsIFNoZXJpZmYodG9vbCwgTW9ja1NoZXJpZmZCb3QoKSksIGlyY19jb21tYW5kLmNvbW1h
bmRzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJvdC5fcGFyc2VfY29tbWFuZF9hbmRfYXJn
cygiIiksIChVbmtub3duQ29tbWFuZCwgWyIiXSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
Ym90Ll9wYXJzZV9jb21tYW5kX2FuZF9hcmdzKCIgICAiKSwgKFVua25vd25Db21tYW5kLCBbIiJd
KSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChib3QuX3BhcnNlX2NvbW1hbmRfYW5kX2FyZ3Mo
IiBoaSAiKSwgKGlyY19jb21tYW5kLkhpLCBbXSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
Ym90Ll9wYXJzZV9jb21tYW5kX2FuZF9hcmdzKCIgaGkgdGhlcmUgIiksIChpcmNfY29tbWFuZC5I
aSwgWyJ0aGVyZSJdKSkKLQotICAgIGRlZiB0ZXN0X2V4Y2VwdGlvbl9kdXJpbmdfY29tbWFuZChz
ZWxmKToKLSAgICAgICAgdG9vbCA9IE1vY2tUb29sKCkKLSAgICAgICAgdG9vbC5lbnN1cmVfaXJj
X2Nvbm5lY3RlZChOb25lKQotICAgICAgICBib3QgPSBJUkNCb3QoInNoZXJpZmZib3QiLCB0b29s
LCBTaGVyaWZmKHRvb2wsIE1vY2tTaGVyaWZmQm90KCkpLCBpcmNfY29tbWFuZC5jb21tYW5kcykK
LQotICAgICAgICBjbGFzcyBDb21tYW5kV2l0aEV4Y2VwdGlvbihvYmplY3QpOgotICAgICAgICAg
ICAgZGVmIGV4ZWN1dGUoc2VsZiwgbmljaywgYXJncywgdG9vbCwgc2hlcmlmZik6Ci0gICAgICAg
ICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJtb2NrX2V4Y2VwdGlvbiIpCi0KLSAgICAgICAgYm90
Ll9wYXJzZV9jb21tYW5kX2FuZF9hcmdzID0gbGFtYmRhIHJlcXVlc3Q6IChDb21tYW5kV2l0aEV4
Y2VwdGlvbiwgW10pCi0gICAgICAgIHdpdGggT3V0cHV0Q2FwdHVyZShsZXZlbD1sb2dnaW5nLklO
Rk8pIGFzIGNhcHR1cmVkOgotICAgICAgICAgICAgYm90LnByb2Nlc3NfbWVzc2FnZSgnbW9ja19u
aWNrJywgJ2lnbm9yZWQgbWVzc2FnZScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FwdHVy
ZWQucm9vdC5sb2cuZ2V0dmFsdWUoKSwgJ01PQ0s6IGlyYy5wb3N0OiBFeGNlcHRpb24gZXhlY3V0
aW5nIGNvbW1hbmQ6IG1vY2tfZXhjZXB0aW9uXG4nKQotCi0KLSAgICAgICAgY2xhc3MgQ29tbWFu
ZFdpdGhFeGNlcHRpb24ob2JqZWN0KToKLSAgICAgICAgICAgIGRlZiBleGVjdXRlKHNlbGYsIG5p
Y2ssIGFyZ3MsIHRvb2wsIHNoZXJpZmYpOgotICAgICAgICAgICAgICAgIHJhaXNlIEtleWJvYXJk
SW50ZXJydXB0KCkKLQotICAgICAgICBib3QuX3BhcnNlX2NvbW1hbmRfYW5kX2FyZ3MgPSBsYW1i
ZGEgcmVxdWVzdDogKENvbW1hbmRXaXRoRXhjZXB0aW9uLCBbXSkKLSAgICAgICAgIyBLZXlib2Fy
ZEludGVycnVwdCBhbmQgU3lzdGVtRXhpdCBhcmUgbm90IHN1YmNsYXNzZXMgb2YgRXhjZXB0aW9u
IGFuZCB0aHVzIGNvcnJlY3RseSB3aWxsIG5vdCBiZSBjYXVnaHQuCi0gICAgICAgIHdpdGggc2Vs
Zi5hc3NlcnRSYWlzZXMoS2V5Ym9hcmRJbnRlcnJ1cHQpOgotICAgICAgICAgICAgd2l0aCBPdXRw
dXRDYXB0dXJlKGxldmVsPWxvZ2dpbmcuSU5GTyk6Ci0gICAgICAgICAgICAgICAgYm90LnByb2Nl
c3NfbWVzc2FnZSgnbW9ja19uaWNrJywgJ2lnbm9yZWQgbWVzc2FnZScpCi0KLSAgICBkZWYgdGVz
dF9oaShzZWxmKToKLSAgICAgICAgcmFuZG9tLnNlZWQoMjMzMjQpCi0gICAgICAgIHdpdGggT3V0
cHV0Q2FwdHVyZShsZXZlbD1sb2dnaW5nLklORk8pIGFzIGNhcHR1cmVkOgotICAgICAgICAgICAg
cnVuKCdoaScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICBjYXB0dXJl
ZC5yb290LmxvZy5nZXR2YWx1ZSgpLAotICAgICAgICAgICAgJ01PQ0s6IGlyYy5wb3N0OiAiT25s
eSB5b3UgY2FuIHByZXZlbnQgZm9yZXN0IGZpcmVzLiIgLS0gU21va2V5IHRoZSBCZWFyXG4nLAot
ICAgICAgICApCi0KLSAgICBkZWYgdGVzdF9oZWxwKHNlbGYpOgotICAgICAgICB3aXRoIE91dHB1
dENhcHR1cmUobGV2ZWw9bG9nZ2luZy5JTkZPKSBhcyBjYXB0dXJlZDoKLSAgICAgICAgICAgIHJ1
bignaGVscCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICBjYXB0dXJl
ZC5yb290LmxvZy5nZXR2YWx1ZSgpLAotICAgICAgICAgICAgJycnTU9DSzogaXJjLnBvc3Q6IG1v
Y2tfbmljazogQXZhaWxhYmxlIGNvbW1hbmRzOiBjcmVhdGUtYnVnLCBoZWxwLCBoaSwgcGluZywg
cmVzdGFydCwgcmV2ZXJ0LCB3aG9pcywgeXQ/Ci1NT0NLOiBpcmMucG9zdDogbW9ja19uaWNrOiBU
eXBlICJtb2NrLXNoZXJpZmYtYm90OiBoZWxwIENPTU1BTkQiIGZvciBoZWxwIG9uIG15IGluZGl2
aWR1YWwgY29tbWFuZHMuCi0nJycsCi0gICAgICAgICkKLQotICAgICAgICBleHBlY3RlZF9sb2dz
ID0gJycnTU9DSzogaXJjLnBvc3Q6IG1vY2tfbmljazogVXNhZ2U6IGhpCi1NT0NLOiBpcmMucG9z
dDogbW9ja19uaWNrOiBSZXNwb25kcyB3aXRoIGhpLgotTU9DSzogaXJjLnBvc3Q6IG1vY2tfbmlj
azogQWxpYXNlczogaGVsbG8KLScnJwotICAgICAgICB3aXRoIE91dHB1dENhcHR1cmUobGV2ZWw9
bG9nZ2luZy5JTkZPKSBhcyBjYXB0dXJlZDoKLSAgICAgICAgICAgIHJ1bignaGVscCBoaScpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FwdHVyZWQucm9vdC5sb2cuZ2V0dmFsdWUoKSwgZXhw
ZWN0ZWRfbG9ncykKLQotICAgICAgICB3aXRoIE91dHB1dENhcHR1cmUobGV2ZWw9bG9nZ2luZy5J
TkZPKSBhcyBjYXB0dXJlZDoKLSAgICAgICAgICAgIHJ1bignaGVscCBoZWxsbycpCi0gICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoY2FwdHVyZWQucm9vdC5sb2cuZ2V0dmFsdWUoKSwgZXhwZWN0ZWRf
bG9ncykKLQotICAgIGRlZiB0ZXN0X3Jlc3RhcnQoc2VsZik6Ci0gICAgICAgIHdpdGggT3V0cHV0
Q2FwdHVyZShsZXZlbD1sb2dnaW5nLklORk8pIGFzIGNhcHR1cmVkOgotICAgICAgICAgICAgd2l0
aCBzZWxmLmFzc2VydFJhaXNlcyhUZXJtaW5hdGVRdWV1ZSk6Ci0gICAgICAgICAgICAgICAgcnVu
KCdyZXN0YXJ0JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXB0dXJlZC5yb290LmxvZy5n
ZXR2YWx1ZSgpLCAnTU9DSzogaXJjLnBvc3Q6IFJlc3RhcnRpbmcuLi5cbicpCi0KLSAgICBkZWYg
dGVzdF9yb2xsb3V0KHNlbGYpOgotICAgICAgICB3aXRoIE91dHB1dENhcHR1cmUobGV2ZWw9bG9n
Z2luZy5JTkZPKSBhcyBjYXB0dXJlZDoKLSAgICAgICAgICAgIHJ1bigncm9sbG91dCAyMTY1NCBU
aGlzIHBhdGNoIGJyb2tlIHRoZSB3b3JsZCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0g
ICAgICAgICAgICBjYXB0dXJlZC5yb290LmxvZy5nZXR2YWx1ZSgpLAotICAgICAgICAgICAgJycn
TU9DSzogaXJjLnBvc3Q6IG1vY2tfbmljazogUHJlcGFyaW5nIHJldmVydCBmb3IgaHR0cHM6Ly90
cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzIxNjU0IC4uLgotTU9DSzogaXJjLnBvc3Q6IG1vY2tf
bmljaywgYWJhcnRoLCBhcCwgZGFyaW46IENyZWF0ZWQgYSByZXZlcnQgcGF0Y2g6IGh0dHA6Ly9l
eGFtcGxlLmNvbS8zNjkzNgotJycnLAotICAgICAgICApCi0KLSAgICBkZWYgdGVzdF9yZXZlcnQo
c2VsZik6Ci0gICAgICAgIHdpdGggT3V0cHV0Q2FwdHVyZShsZXZlbD1sb2dnaW5nLklORk8pIGFz
IGNhcHR1cmVkOgotICAgICAgICAgICAgcnVuKCdyZXZlcnQgMjE2NTQgVGhpcyBwYXRjaCBicm9r
ZSB0aGUgd29ybGQnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgY2Fw
dHVyZWQucm9vdC5sb2cuZ2V0dmFsdWUoKSwKLSAgICAgICAgICAgICcnJ01PQ0s6IGlyYy5wb3N0
OiBtb2NrX25pY2s6IFByZXBhcmluZyByZXZlcnQgZm9yIGh0dHBzOi8vdHJhYy53ZWJraXQub3Jn
L2NoYW5nZXNldC8yMTY1NCAuLi4KLU1PQ0s6IGlyYy5wb3N0OiBtb2NrX25pY2ssIGFiYXJ0aCwg
YXAsIGRhcmluOiBDcmVhdGVkIGEgcmV2ZXJ0IHBhdGNoOiBodHRwOi8vZXhhbXBsZS5jb20vMzY5
MzYKLScnJywKLSAgICAgICAgKQotCi0gICAgZGVmIHRlc3RfbXVsdGlfcmV2ZXJ0KHNlbGYpOgot
ICAgICAgICB3aXRoIE91dHB1dENhcHR1cmUobGV2ZWw9bG9nZ2luZy5JTkZPKSBhcyBjYXB0dXJl
ZDoKLSAgICAgICAgICAgIHJ1bigncmV2ZXJ0IDIxNjU0IDIxNjU1IDIxNjU2IFRoaXMgMjE2NTQg
cGF0Y2ggYnJva2UgdGhlIHdvcmxkJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAg
ICAgICAgIGNhcHR1cmVkLnJvb3QubG9nLmdldHZhbHVlKCksCi0gICAgICAgICAgICAnJydNT0NL
OiBpcmMucG9zdDogbW9ja19uaWNrOiBQcmVwYXJpbmcgcmV2ZXJ0IGZvciBodHRwczovL3RyYWMu
d2Via2l0Lm9yZy9jaGFuZ2VzZXQvMjE2NTQsIGh0dHBzOi8vdHJhYy53ZWJraXQub3JnL2NoYW5n
ZXNldC8yMTY1NSwgYW5kIGh0dHBzOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8yMTY1NiAu
Li4KLU1PQ0s6IGlyYy5wb3N0OiBtb2NrX25pY2ssIGFiYXJ0aCwgYXAsIGRhcmluOiBDcmVhdGVk
IGEgcmV2ZXJ0IHBhdGNoOiBodHRwOi8vZXhhbXBsZS5jb20vMzY5MzYKLScnJywKLSAgICAgICAg
KQotCi0gICAgZGVmIHRlc3RfcmV2ZXJ0X3dpdGhfcl9pbl9zdm5fcmV2aXNpb24oc2VsZik6Ci0g
ICAgICAgIHdpdGggT3V0cHV0Q2FwdHVyZShsZXZlbD1sb2dnaW5nLklORk8pIGFzIGNhcHR1cmVk
OgotICAgICAgICAgICAgcnVuKCdyZXZlcnQgcjIxNjU0IFRoaXMgcGF0Y2ggYnJva2UgdGhlIHdv
cmxkJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgIGNhcHR1cmVkLnJv
b3QubG9nLmdldHZhbHVlKCksCi0gICAgICAgICAgICAnJydNT0NLOiBpcmMucG9zdDogbW9ja19u
aWNrOiBQcmVwYXJpbmcgcmV2ZXJ0IGZvciBodHRwczovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2Vz
ZXQvMjE2NTQgLi4uCi1NT0NLOiBpcmMucG9zdDogbW9ja19uaWNrLCBhYmFydGgsIGFwLCBkYXJp
bjogQ3JlYXRlZCBhIHJldmVydCBwYXRjaDogaHR0cDovL2V4YW1wbGUuY29tLzM2OTM2Ci0nJycs
Ci0gICAgICAgICkKLQotICAgIGRlZiB0ZXN0X211bHRpX3JldmVydF93aXRoX3JfaW5fc3ZuX3Jl
dmlzaW9uKHNlbGYpOgotICAgICAgICB3aXRoIE91dHB1dENhcHR1cmUobGV2ZWw9bG9nZ2luZy5J
TkZPKSBhcyBjYXB0dXJlZDoKLSAgICAgICAgICAgIHJ1bigncmV2ZXJ0IHIyMTY1NCAyMTY1NSBy
MjE2NTYgVGhpcyByMjE2NTQgcGF0Y2ggYnJva2UgdGhlIHdvcmxkJykKLSAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbCgKLSAgICAgICAgICAgIGNhcHR1cmVkLnJvb3QubG9nLmdldHZhbHVlKCksCi0g
ICAgICAgICAgICAnJydNT0NLOiBpcmMucG9zdDogbW9ja19uaWNrOiBQcmVwYXJpbmcgcmV2ZXJ0
IGZvciBodHRwczovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMjE2NTQsIGh0dHBzOi8vdHJh
Yy53ZWJraXQub3JnL2NoYW5nZXNldC8yMTY1NSwgYW5kIGh0dHBzOi8vdHJhYy53ZWJraXQub3Jn
L2NoYW5nZXNldC8yMTY1NiAuLi4KLU1PQ0s6IGlyYy5wb3N0OiBtb2NrX25pY2ssIGFiYXJ0aCwg
YXAsIGRhcmluOiBDcmVhdGVkIGEgcmV2ZXJ0IHBhdGNoOiBodHRwOi8vZXhhbXBsZS5jb20vMzY5
MzYKLScnJywKLSAgICAgICAgKQotCi0gICAgZGVmIHRlc3RfcmV2ZXJ0X2JhbmFuYXMoc2VsZik6
Ci0gICAgICAgIHdpdGggT3V0cHV0Q2FwdHVyZShsZXZlbD1sb2dnaW5nLklORk8pIGFzIGNhcHR1
cmVkOgotICAgICAgICAgICAgcnVuKCdyZXZlcnQgYmFuYW5hcycpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoCi0gICAgICAgICAgICBjYXB0dXJlZC5yb290LmxvZy5nZXR2YWx1ZSgpLAotICAg
ICAgICAgICAgJ01PQ0s6IGlyYy5wb3N0OiBtb2NrX25pY2s6IFVzYWdlOiByZXZlcnQgU1ZOX1JF
VklTSU9OIFtTVk5fUkVWSVNJT05TXSBSRUFTT05cbicsCi0gICAgICAgICkKLQotICAgIGRlZiB0
ZXN0X3JldmVydF9pbnZhbGlkYXRlX3JldmlzaW9uKHNlbGYpOgotICAgICAgICAjIFdoZW4gZm9s
a3MgcGFzcyBqdW5rIGFyZ3VtZW50cywgd2Ugc2hvdWxkIGp1c3Qgc3BpdCB0aGUgdXNhZ2UgYmFj
ayBhdCB0aGVtLgotICAgICAgICB3aXRoIE91dHB1dENhcHR1cmUobGV2ZWw9bG9nZ2luZy5JTkZP
KSBhcyBjYXB0dXJlZDoKLSAgICAgICAgICAgIHJ1bigncmV2ZXJ0IC0tY29tcG9uZW50PVRvb2xz
IDIxNjU0JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgIGNhcHR1cmVk
LnJvb3QubG9nLmdldHZhbHVlKCksCi0gICAgICAgICAgICAnTU9DSzogaXJjLnBvc3Q6IG1vY2tf
bmljazogVXNhZ2U6IHJldmVydCBTVk5fUkVWSVNJT04gW1NWTl9SRVZJU0lPTlNdIFJFQVNPTlxu
JywKLSAgICAgICAgKQotCi0gICAgZGVmIHRlc3RfcmV2ZXJ0X2ludmFsaWRhdGVfcmVhc29uKHNl
bGYpOgotICAgICAgICAjIEZJWE1FOiBJJ20gc2xpZ2h0bHkgY29uZnVzZWQgYXMgdG8gd2h5IHRo
aXMgZG9lc24ndCByZXR1cm4gdGhlIFVTQUdFIG1lc3NhZ2UuCi0gICAgICAgIHdpdGggT3V0cHV0
Q2FwdHVyZShsZXZlbD1sb2dnaW5nLklORk8pIGFzIGNhcHR1cmVkOgotICAgICAgICAgICAgcnVu
KCdyZXZlcnQgMjE2NTQgLWJhZCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAg
ICAgICBjYXB0dXJlZC5yb290LmxvZy5nZXR2YWx1ZSgpLAotICAgICAgICAgICAgJycnTU9DSzog
aXJjLnBvc3Q6IG1vY2tfbmljazogUHJlcGFyaW5nIHJldmVydCBmb3IgaHR0cHM6Ly90cmFjLndl
YmtpdC5vcmcvY2hhbmdlc2V0LzIxNjU0IC4uLgotTU9DSzogaXJjLnBvc3Q6IG1vY2tfbmljaywg
YWJhcnRoLCBhcCwgZGFyaW46IEZhaWxlZCB0byBjcmVhdGUgcmV2ZXJ0IHBhdGNoOgotTU9DSzog
aXJjLnBvc3Q6IFRoZSByZXZlcnQgcmVhc29uIG1heSBub3QgYmVnaW4gd2l0aCAtIChcIi1iYWQg
KFJlcXVlc3RlZCBieSBtb2NrX25pY2sgb24gI3dlYmtpdCkuXCIpLgotJycnLAotICAgICAgICAp
Ci0KLSAgICBkZWYgdGVzdF9tdWx0aV9yZXZlcnRfaW52YWxpZGF0ZV9yZWFzb24oc2VsZik6Ci0g
ICAgICAgIHdpdGggT3V0cHV0Q2FwdHVyZShsZXZlbD1sb2dnaW5nLklORk8pIGFzIGNhcHR1cmVk
OgotICAgICAgICAgICAgcnVuKCdyZXZlcnQgMjE2NTQgMjE2NTUgcjIxNjU2IC1iYWQnKQotICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgY2FwdHVyZWQucm9vdC5sb2cuZ2V0
dmFsdWUoKSwKLSAgICAgICAgICAgICcnJ01PQ0s6IGlyYy5wb3N0OiBtb2NrX25pY2s6IFByZXBh
cmluZyByZXZlcnQgZm9yIGh0dHBzOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8yMTY1NCwg
aHR0cHM6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzIxNjU1LCBhbmQgaHR0cHM6Ly90cmFj
LndlYmtpdC5vcmcvY2hhbmdlc2V0LzIxNjU2IC4uLgotTU9DSzogaXJjLnBvc3Q6IG1vY2tfbmlj
aywgYWJhcnRoLCBhcCwgZGFyaW46IEZhaWxlZCB0byBjcmVhdGUgcmV2ZXJ0IHBhdGNoOgotTU9D
SzogaXJjLnBvc3Q6IFRoZSByZXZlcnQgcmVhc29uIG1heSBub3QgYmVnaW4gd2l0aCAtIChcIi1i
YWQgKFJlcXVlc3RlZCBieSBtb2NrX25pY2sgb24gI3dlYmtpdCkuXCIpLgotJycnLAotICAgICAg
ICApCi0KLSAgICBkZWYgdGVzdF9yZXZlcnRfbm9fcmVhc29uKHNlbGYpOgotICAgICAgICB3aXRo
IE91dHB1dENhcHR1cmUobGV2ZWw9bG9nZ2luZy5JTkZPKSBhcyBjYXB0dXJlZDoKLSAgICAgICAg
ICAgIHJ1bigncmV2ZXJ0IDIxNjU0JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAg
ICAgICAgIGNhcHR1cmVkLnJvb3QubG9nLmdldHZhbHVlKCksCi0gICAgICAgICAgICAnTU9DSzog
aXJjLnBvc3Q6IG1vY2tfbmljazogVXNhZ2U6IHJldmVydCBTVk5fUkVWSVNJT04gW1NWTl9SRVZJ
U0lPTlNdIFJFQVNPTlxuJywKLSAgICAgICAgKQotCi0gICAgZGVmIF90ZXN0X211bHRpX3JldmVy
dF9ub19yZWFzb24oc2VsZik6Ci0gICAgICAgIHdpdGggT3V0cHV0Q2FwdHVyZShsZXZlbD1sb2dn
aW5nLklORk8pIGFzIGNhcHR1cmVkOgotICAgICAgICAgICAgcnVuKCdyZXZlcnQgMjE2NTQgMjE2
NTUgcjIxNjU2JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgIGNhcHR1
cmVkLnJvb3QubG9nLmdldHZhbHVlKCksCi0gICAgICAgICAgICAnTU9DSzogaXJjLnBvc3Q6IG1v
Y2tfbmljazogVXNhZ2U6IHJldmVydCBTVk5fUkVWSVNJT04gW1NWTl9SRVZJU0lPTlNdIFJFQVNP
TlxuJywKLSAgICAgICAgKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2JvdC9z
aGVyaWZmLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9ib3Qv
c2hlcmlmZi5weQkocmV2aXNpb24gMjY5OTgwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS90
b29sL2JvdC9zaGVyaWZmLnB5CShub25leGlzdGVudCkKQEAgLTEsMTA3ICswLDAgQEAKLSMgQ29w
eXJpZ2h0IChjKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
LSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5jb25maWcgaW1wb3J0IHVybHMKLWZy
b20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0IFNjcmlwdEVycm9yCi1m
cm9tIHdlYmtpdHB5LnRvb2wuZ3JhbW1hciBpbXBvcnQgam9pbl93aXRoX3NlcGFyYXRvcnMKLQot
ZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHJlZHVjZQotCi0KLWNsYXNzIFNoZXJpZmYob2JqZWN0KToK
LSAgICBkZWYgX19pbml0X18oc2VsZiwgdG9vbCwgc2hlcmlmZmJvdCk6Ci0gICAgICAgIHNlbGYu
X3Rvb2wgPSB0b29sCi0gICAgICAgIHNlbGYuX3NoZXJpZmZib3QgPSBzaGVyaWZmYm90Ci0KLSAg
ICBkZWYgbmFtZShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX3NoZXJpZmZib3QubmFtZQot
Ci0gICAgZGVmIHJlc3BvbnNpYmxlX25pY2tuYW1lc19mcm9tX2NvbW1pdF9pbmZvKHNlbGYsIGNv
bW1pdF9pbmZvKToKLSAgICAgICAgbmVzdGVkTGlzdCA9IFtwYXJ0eS5pcmNfbmlja25hbWVzIGZv
ciBwYXJ0eSBpbiBjb21taXRfaW5mby5yZXNwb25zaWJsZV9wYXJ0aWVzKCkgaWYgcGFydHkuaXJj
X25pY2tuYW1lc10KLSAgICAgICAgcmV0dXJuIHJlZHVjZShsYW1iZGEgbGlzdCwgY2hpbGRMaXN0
OiBsaXN0ICsgY2hpbGRMaXN0LCBuZXN0ZWRMaXN0KQotCi0gICAgZGVmIHBvc3RfaXJjX3dhcm5p
bmcoc2VsZiwgY29tbWl0X2luZm8sIGJ1aWxkZXJzKToKLSAgICAgICAgaXJjX25pY2tuYW1lcyA9
IHNvcnRlZChzZWxmLnJlc3BvbnNpYmxlX25pY2tuYW1lc19mcm9tX2NvbW1pdF9pbmZvKGNvbW1p
dF9pbmZvKSkKLSAgICAgICAgaXJjX3ByZWZpeCA9ICI6ICIgaWYgaXJjX25pY2tuYW1lcyBlbHNl
ICIiCi0gICAgICAgIGlyY19tZXNzYWdlID0gIiVzJXMlcyBtaWdodCBoYXZlIGJyb2tlbiAlcyIg
JSAoCi0gICAgICAgICAgICAiLCAiLmpvaW4oaXJjX25pY2tuYW1lcyksCi0gICAgICAgICAgICBp
cmNfcHJlZml4LAotICAgICAgICAgICAgdXJscy52aWV3X3JldmlzaW9uX3VybChjb21taXRfaW5m
by5yZXZpc2lvbigpKSwKLSAgICAgICAgICAgIGpvaW5fd2l0aF9zZXBhcmF0b3JzKFtidWlsZGVy
Lm5hbWUoKSBmb3IgYnVpbGRlciBpbiBidWlsZGVyc10pKQotCi0gICAgICAgIHNlbGYuX3Rvb2wu
aXJjKCkucG9zdChpcmNfbWVzc2FnZSkKLQotICAgIGRlZiBwb3N0X2lyY19zdW1tYXJ5KHNlbGYs
IGZhaWx1cmVfbWFwKToKLSAgICAgICAgZmFpbGluZ190ZXN0cyA9IGZhaWx1cmVfbWFwLmZhaWxp
bmdfdGVzdHMoKQotICAgICAgICBpZiBub3QgZmFpbGluZ190ZXN0czoKLSAgICAgICAgICAgIHJl
dHVybgotICAgICAgICB0ZXN0X2xpc3RfbGltaXQgPSA1Ci0gICAgICAgIGlyY19tZXNzYWdlID0g
Ik5ldyBmYWlsdXJlczogJXMiICUgIiwgIi5qb2luKHNvcnRlZChmYWlsaW5nX3Rlc3RzKVs6dGVz
dF9saXN0X2xpbWl0XSkKLSAgICAgICAgZmFpbHVyZV9jb3VudCA9IGxlbihmYWlsaW5nX3Rlc3Rz
KQotICAgICAgICBpZiBmYWlsdXJlX2NvdW50ID4gdGVzdF9saXN0X2xpbWl0OgotICAgICAgICAg
ICAgaXJjX21lc3NhZ2UgKz0gIiAoYW5kICVzIG1vcmUuLi4pIiAlIChmYWlsdXJlX2NvdW50IC0g
dGVzdF9saXN0X2xpbWl0KQotICAgICAgICBzZWxmLl90b29sLmlyYygpLnBvc3QoaXJjX21lc3Nh
Z2UpCi0KLSAgICBkZWYgcG9zdF9yZXZlcnRfcGF0Y2goc2VsZiwgc3ZuX3JldmlzaW9uX2xpc3Qs
IHJldmVydF9yZWFzb24pOgotICAgICAgICAjIEVuc3VyZSB0aGF0IHN2biByZXZpc2lvbnMgYXJl
IG51bWJlcnMgKGFuZCBub3Qgb3B0aW9ucyB0bwotICAgICAgICAjIGNyZWF0ZS1yZXZlcnQpLgot
ICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzdm5fcmV2aXNpb25zID0gIiAiLmpvaW4oW3N0cihp
bnQocmV2aXNpb24pKSBmb3IgcmV2aXNpb24gaW4gc3ZuX3JldmlzaW9uX2xpc3RdKQotICAgICAg
ICBleGNlcHQ6Ci0gICAgICAgICAgICByYWlzZSBTY3JpcHRFcnJvcihtZXNzYWdlPSJJbnZhbGlk
IHN2biByZXZpc2lvbiBudW1iZXIgXCIlc1wiLiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICUgIiAiLmpvaW4oc3ZuX3JldmlzaW9uX2xpc3QpKQotCi0gICAgICAgIGlmIHJldmVydF9y
ZWFzb24uc3RhcnRzd2l0aCgiLSIpOgotICAgICAgICAgICAgcmFpc2UgU2NyaXB0RXJyb3IobWVz
c2FnZT0iVGhlIHJldmVydCByZWFzb24gbWF5IG5vdCBiZWdpbiAiCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAid2l0aCAtIChcIiVzXCIpLiIgJSByZXZlcnRfcmVhc29uKQotCi0gICAg
ICAgIG91dHB1dCA9IHNlbGYuX3NoZXJpZmZib3QucnVuX3dlYmtpdF9wYXRjaChbCi0gICAgICAg
ICAgICAiY3JlYXRlLXJldmVydCIsCi0gICAgICAgICAgICAiLS1mb3JjZS1jbGVhbiIsCi0gICAg
ICAgICAgICAjIEluIHByaW5jaXBsZSwgd2Ugc2hvdWxkIHBhc3MgLS1ub24taW50ZXJhY3RpdmUg
aGVyZSwgYnV0IGl0Ci0gICAgICAgICAgICAjIHR1cm5zIG91dCB0aGF0IGNyZWF0ZS1yZXZlcnQg
ZG9lc24ndCBuZWVkIGl0IHlldC4gIFdlIGNhbid0Ci0gICAgICAgICAgICAjIHBhc3MgaXQgcHJv
cGh5bGFjdGljYWxseSBiZWNhdXNlIHdlIHJlamVjdCB1bnJlY29nbml6ZWQgY29tbWFuZAotICAg
ICAgICAgICAgIyBsaW5lIHN3aXRjaGVzLgotICAgICAgICAgICAgIi0tcGFyZW50LWNvbW1hbmQ9
c2hlcmlmZi1ib3QiLAotICAgICAgICAgICAgc3ZuX3JldmlzaW9ucywKLSAgICAgICAgICAgIHJl
dmVydF9yZWFzb24sCi0gICAgICAgIF0pCi0gICAgICAgIHJldHVybiB1cmxzLnBhcnNlX2J1Z19p
ZChvdXRwdXQpCi0KLSAgICBkZWYgcG9zdF9ibGFtZV9jb21tZW50X29uX2J1ZyhzZWxmLCBjb21t
aXRfaW5mbywgYnVpbGRlcnMsIHRlc3RzKToKLSAgICAgICAgaWYgbm90IGNvbW1pdF9pbmZvLmJ1
Z19pZCgpOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGNvbW1lbnQgPSAiJXMgbWlnaHQg
aGF2ZSBicm9rZW4gJXMiICUgKAotICAgICAgICAgICAgdXJscy52aWV3X3JldmlzaW9uX3VybChj
b21taXRfaW5mby5yZXZpc2lvbigpKSwKLSAgICAgICAgICAgIGpvaW5fd2l0aF9zZXBhcmF0b3Jz
KFtidWlsZGVyLm5hbWUoKSBmb3IgYnVpbGRlciBpbiBidWlsZGVyc10pKQotICAgICAgICBpZiB0
ZXN0czoKLSAgICAgICAgICAgIGNvbW1lbnQgKz0gIlxuVGhlIGZvbGxvd2luZyB0ZXN0cyBhcmUg
bm90IHBhc3Npbmc6XG4iCi0gICAgICAgICAgICBjb21tZW50ICs9ICJcbiIuam9pbih0ZXN0cykK
LSAgICAgICAgc2VsZi5fdG9vbC5idWdzLnBvc3RfY29tbWVudF90b19idWcoY29tbWl0X2luZm8u
YnVnX2lkKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNjPXNl
bGYuX3NoZXJpZmZib3Qud2F0Y2hlcnMpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rv
b2wvYm90L3NoZXJpZmZfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93
ZWJraXRweS90b29sL2JvdC9zaGVyaWZmX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAyNjk5ODApCisr
KyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvYm90L3NoZXJpZmZfdW5pdHRlc3QucHkJKG5v
bmV4aXN0ZW50KQpAQCAtMSw5NyArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQot
IyBtZXQ6Ci0jCi0jICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
IyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotaW1wb3J0IGxvZ2dpbmcK
LWltcG9ydCB1bml0dGVzdAotCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5uZXQuYnVpbGRib3QgaW1w
b3J0IEJ1aWxkZXIKLWZyb20gd2Via2l0cHkudGhpcmRwYXJ0eS5tb2NrIGltcG9ydCBNb2NrCi1m
cm9tIHdlYmtpdHB5LnRvb2wuYm90LnNoZXJpZmYgaW1wb3J0IFNoZXJpZmYKLWZyb20gd2Via2l0
cHkudG9vbC5tb2NrdG9vbCBpbXBvcnQgTW9ja1Rvb2wKLQotZnJvbSB3ZWJraXRjb3JlcHkgaW1w
b3J0IE91dHB1dENhcHR1cmUKLQotCi1jbGFzcyBNb2NrU2hlcmlmZkJvdChvYmplY3QpOgotICAg
IG5hbWUgPSAibW9jay1zaGVyaWZmLWJvdCIKLSAgICB3YXRjaGVycyA9IFsKLSAgICAgICAgIndh
dGNoZXJAZXhhbXBsZS5jb20iLAotICAgIF0KLQotICAgIGRlZiBydW5fd2Via2l0X3BhdGNoKHNl
bGYsIGFyZ3MpOgotICAgICAgICByZXR1cm4gIkNyZWF0ZWQgYnVnIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjkzNlxuIgotCi0KLWNsYXNzIFNoZXJpZmZUZXN0KHVu
aXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgdGVzdF9wb3N0X2JsYW1lX2NvbW1lbnRfb25fYnVn
KHNlbGYpOgotICAgICAgICBkZWYgcnVuKCk6Ci0gICAgICAgICAgICBzaGVyaWZmID0gU2hlcmlm
ZihNb2NrVG9vbCgpLCBNb2NrU2hlcmlmZkJvdCgpKQotICAgICAgICAgICAgYnVpbGRlcnMgPSBb
Ci0gICAgICAgICAgICAgICAgQnVpbGRlcigiRm9vIiwgTm9uZSksCi0gICAgICAgICAgICAgICAg
QnVpbGRlcigiQmFyIiwgTm9uZSksCi0gICAgICAgICAgICBdCi0gICAgICAgICAgICBjb21taXRf
aW5mbyA9IE1vY2soKQotICAgICAgICAgICAgY29tbWl0X2luZm8uYnVnX2lkID0gbGFtYmRhOiBO
b25lCi0gICAgICAgICAgICBjb21taXRfaW5mby5yZXZpc2lvbiA9IGxhbWJkYTogNDMyMQotICAg
ICAgICAgICAgIyBTaG91bGQgZG8gbm90aGluZyB3aXRoIG5vIGJ1Z19pZAotICAgICAgICAgICAg
c2hlcmlmZi5wb3N0X2JsYW1lX2NvbW1lbnRfb25fYnVnKGNvbW1pdF9pbmZvLCBidWlsZGVycywg
W10pCi0gICAgICAgICAgICBzaGVyaWZmLnBvc3RfYmxhbWVfY29tbWVudF9vbl9idWcoY29tbWl0
X2luZm8sIGJ1aWxkZXJzLCBbIm1vY2stdGVzdC0xIiwgIm1vY2stdGVzdC0yIl0pCi0gICAgICAg
ICAgICAjIFNob3VsZCB0cnkgdG8gcG9zdCBhIGNvbW1lbnQgdG8gdGhlIGJ1ZywgYnV0IE1vY2tU
b29sLmJ1Z3MgZG9lcyBub3RoaW5nLgotICAgICAgICAgICAgY29tbWl0X2luZm8uYnVnX2lkID0g
bGFtYmRhOiAxMjM0Ci0gICAgICAgICAgICBzaGVyaWZmLnBvc3RfYmxhbWVfY29tbWVudF9vbl9i
dWcoY29tbWl0X2luZm8sIGJ1aWxkZXJzLCBbXSkKLSAgICAgICAgICAgIHNoZXJpZmYucG9zdF9i
bGFtZV9jb21tZW50X29uX2J1Zyhjb21taXRfaW5mbywgYnVpbGRlcnMsIFsibW9jay10ZXN0LTEi
XSkKLSAgICAgICAgICAgIHNoZXJpZmYucG9zdF9ibGFtZV9jb21tZW50X29uX2J1Zyhjb21taXRf
aW5mbywgYnVpbGRlcnMsIFsibW9jay10ZXN0LTEiLCAibW9jay10ZXN0LTIiXSkKLQotICAgICAg
ICB3aXRoIE91dHB1dENhcHR1cmUobGV2ZWw9bG9nZ2luZy5JTkZPKSBhcyBjYXB0dXJlZDoKLSAg
ICAgICAgICAgIHJ1bigpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAg
IGNhcHR1cmVkLnJvb3QubG9nLmdldHZhbHVlKCksCi0gICAgICAgICAgICB1IiIiTU9DSyBidWcg
Y29tbWVudDogYnVnX2lkPTEyMzQsIGNjPVsnd2F0Y2hlckBleGFtcGxlLmNvbSddLCBzZWVfYWxz
bz1Ob25lCi0tLS0gQmVnaW4gY29tbWVudCAtLS0KLWh0dHBzOi8vdHJhYy53ZWJraXQub3JnL2No
YW5nZXNldC80MzIxIG1pZ2h0IGhhdmUgYnJva2VuIEZvbyBhbmQgQmFyCi0tLS0gRW5kIGNvbW1l
bnQgLS0tCi0KLU1PQ0sgYnVnIGNvbW1lbnQ6IGJ1Z19pZD0xMjM0LCBjYz1bJ3dhdGNoZXJAZXhh
bXBsZS5jb20nXSwgc2VlX2Fsc289Tm9uZQotLS0tIEJlZ2luIGNvbW1lbnQgLS0tCi1odHRwczov
L3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvNDMyMSBtaWdodCBoYXZlIGJyb2tlbiBGb28gYW5k
IEJhcgotVGhlIGZvbGxvd2luZyB0ZXN0cyBhcmUgbm90IHBhc3Npbmc6Ci1tb2NrLXRlc3QtMQot
LS0tIEVuZCBjb21tZW50IC0tLQotCi1NT0NLIGJ1ZyBjb21tZW50OiBidWdfaWQ9MTIzNCwgY2M9
Wyd3YXRjaGVyQGV4YW1wbGUuY29tJ10sIHNlZV9hbHNvPU5vbmUKLS0tLSBCZWdpbiBjb21tZW50
IC0tLQotaHR0cHM6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzQzMjEgbWlnaHQgaGF2ZSBi
cm9rZW4gRm9vIGFuZCBCYXIKLVRoZSBmb2xsb3dpbmcgdGVzdHMgYXJlIG5vdCBwYXNzaW5nOgot
bW9jay10ZXN0LTEKLW1vY2stdGVzdC0yCi0tLS0gRW5kIGNvbW1lbnQgLS0tCi0KLSIiIiwKLSAg
ICAgICAgKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL19faW5p
dF9fLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5k
cy9fX2luaXRfXy5weQkocmV2aXNpb24gMjY5OTgwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS90b29sL2NvbW1hbmRzL19faW5pdF9fLnB5CSh3b3JraW5nIGNvcHkpCkBAIC05LDE2ICs5LDEz
IEBAIGZyb20gd2Via2l0cHkudG9vbC5jb21tYW5kcy5kb3dubG9hZCBpbXAKIGZyb20gd2Via2l0
cHkudG9vbC5jb21tYW5kcy5lYXJseXdhcm5pbmdzeXN0ZW0gaW1wb3J0IEFic3RyYWN0RWFybHlX
YXJuaW5nU3lzdGVtCiBmcm9tIHdlYmtpdHB5LnRvb2wuY29tbWFuZHMuZmluZHVzZXJzIGltcG9y
dCBGaW5kVXNlcnMKIGZyb20gd2Via2l0cHkudG9vbC5jb21tYW5kcy5nYXJkZW5vbWF0aWMgaW1w
b3J0IEdhcmRlbk9NYXRpYwotZnJvbSB3ZWJraXRweS50b29sLmNvbW1hbmRzLm5ld2NvbW1pdGJv
dCBpbXBvcnQgTmV3Q29tbWl0Qm90CiBmcm9tIHdlYmtpdHB5LnRvb2wuY29tbWFuZHMub3BlbmJ1
Z3MgaW1wb3J0IE9wZW5CdWdzCi1mcm9tIHdlYmtpdHB5LnRvb2wuY29tbWFuZHMucGVyZmFsaXpl
ciBpbXBvcnQgUGVyZmFsaXplcgogZnJvbSB3ZWJraXRweS50b29sLmNvbW1hbmRzLnByZXR0eWRp
ZmYgaW1wb3J0IFByZXR0eURpZmYKIGZyb20gd2Via2l0cHkudG9vbC5jb21tYW5kcy5xdWVyaWVz
IGltcG9ydCAqCiBmcm9tIHdlYmtpdHB5LnRvb2wuY29tbWFuZHMucXVldWVzIGltcG9ydCAqCiBm
cm9tIHdlYmtpdHB5LnRvb2wuY29tbWFuZHMucmViYXNlbGluZSBpbXBvcnQgUmViYXNlbGluZQog
ZnJvbSB3ZWJraXRweS50b29sLmNvbW1hbmRzLnJlYmFzZWxpbmVzZXJ2ZXIgaW1wb3J0IFJlYmFz
ZWxpbmVTZXJ2ZXIKIGZyb20gd2Via2l0cHkudG9vbC5jb21tYW5kcy5zZXR1cGdpdGNsb25lIGlt
cG9ydCBTZXR1cEdpdENsb25lCi1mcm9tIHdlYmtpdHB5LnRvb2wuY29tbWFuZHMuc2hlcmlmZmJv
dCBpbXBvcnQgKgogZnJvbSB3ZWJraXRweS50b29sLmNvbW1hbmRzLnVwbG9hZCBpbXBvcnQgKgog
ZnJvbSB3ZWJraXRweS50b29sLmNvbW1hbmRzLnN1Z2dlc3Rub21pbmF0aW9ucyBpbXBvcnQgKgog
CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvbmV3Y29tbWl0Ym90
LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9u
ZXdjb21taXRib3QucHkJKHJldmlzaW9uIDI2OTk4MCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvdG9vbC9jb21tYW5kcy9uZXdjb21taXRib3QucHkJKG5vbmV4aXN0ZW50KQpAQCAtMSwxNzIg
KzAsMCBAQAotIyBDb3B5cmlnaHQgKGMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSMgQ29weXJpZ2h0IChjKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1
dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgcmUKLQotZnJv
bSB3ZWJraXRweS5jb21tb24uY29uZmlnLmNvbW1pdHRlcnMgaW1wb3J0IENvbW1pdHRlckxpc3QK
LWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0IFNjcmlwdEVycm9y
Ci1mcm9tIHdlYmtpdHB5LnRvb2wuYm90LmlyY19jb21tYW5kIGltcG9ydCBJUkNDb21tYW5kCi1m
cm9tIHdlYmtpdHB5LnRvb2wuYm90LmlyY19jb21tYW5kIGltcG9ydCBIZWxwCi1mcm9tIHdlYmtp
dHB5LnRvb2wuYm90LmlyY19jb21tYW5kIGltcG9ydCBIaQotZnJvbSB3ZWJraXRweS50b29sLmJv
dC5pcmNfY29tbWFuZCBpbXBvcnQgUGluZ1BvbmcKLWZyb20gd2Via2l0cHkudG9vbC5ib3QuaXJj
X2NvbW1hbmQgaW1wb3J0IFJlc3RhcnQKLWZyb20gd2Via2l0cHkudG9vbC5ib3QuaXJjX2NvbW1h
bmQgaW1wb3J0IFlvdVRoZXJlCi1mcm9tIHdlYmtpdHB5LnRvb2wuYm90LmlyY2JvdCBpbXBvcnQg
SVJDQm90Ci1mcm9tIHdlYmtpdHB5LnRvb2wuY29tbWFuZHMucXVldWVzIGltcG9ydCBBYnN0cmFj
dFF1ZXVlCi1mcm9tIHdlYmtpdHB5LnRvb2wuY29tbWFuZHMuc3RlcHNlcXVlbmNlIGltcG9ydCBT
dGVwU2VxdWVuY2VFcnJvckhhbmRsZXIKLQotX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFt
ZV9fKQotCi0KLWNsYXNzIEFnZW50KG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHRv
b2wsIG5ld2NvbW1pdGJvdCk6Ci0gICAgICAgIHNlbGYuX3Rvb2wgPSB0b29sCi0gICAgICAgIHNl
bGYuX25ld2NvbW1pdGJvdCA9IG5ld2NvbW1pdGJvdAotCi0gICAgZGVmIG5hbWUoc2VsZik6Ci0g
ICAgICAgIHJldHVybiAnV0tSJwotCi0KLWNsYXNzIE5ld0NvbW1pdEJvdChBYnN0cmFjdFF1ZXVl
LCBTdGVwU2VxdWVuY2VFcnJvckhhbmRsZXIpOgotICAgIG5hbWUgPSAiV0tSIgotICAgIHdhdGNo
ZXJzID0gQWJzdHJhY3RRdWV1ZS53YXRjaGVycyArIFsicm5pd2FAd2Via2l0Lm9yZyJdCi0KLSAg
ICBfY29tbWFuZHMgPSB7Ci0gICAgICAgICJoaSI6IEhpLAotICAgICAgICAicGluZyI6IFBpbmdQ
b25nLAotICAgICAgICAicmVzdGFydCI6IFJlc3RhcnQsCi0gICAgICAgICJ5dD8iOiBZb3VUaGVy
ZSwKLSAgICB9Ci0KLSAgICBfbWF4aW11bV9udW1iZXJfb2ZfcmV2aXNpb25zX3RvX2F2b2lkX3Nw
YW1taW5nX2lyYyA9IDEwCi0KLSAgICAjIEFic3RyYWN0UXVldWUgbWV0aG9kcwotCi0gICAgZGVm
IGJlZ2luX3dvcmtfcXVldWUoc2VsZik6Ci0gICAgICAgIHNlbGYuX2xhc3Rfc3ZuX3JldmlzaW9u
ID0gaW50KHNlbGYuX3Rvb2wuc2NtKCkuaGVhZF9zdm5fcmV2aXNpb24oKSkKLSAgICAgICAgc2Vs
Zi5faXJjX2JvdCA9IElSQ0JvdChzZWxmLm5hbWUsIHNlbGYuX3Rvb2wsIEFnZW50KHNlbGYuX3Rv
b2wsIHNlbGYpLCBzZWxmLl9jb21tYW5kcykKLSAgICAgICAgc2VsZi5fdG9vbC5lbnN1cmVfaXJj
X2Nvbm5lY3RlZChzZWxmLl9pcmNfYm90LmlyY19kZWxlZ2F0ZSgpKQotCi0gICAgZGVmIHdvcmtf
aXRlbV9sb2dfcGF0aChzZWxmLCBmYWlsdXJlX21hcCk6Ci0gICAgICAgIHJldHVybiBOb25lCi0K
LSAgICBkZWYgbmV4dF93b3JrX2l0ZW0oc2VsZik6Ci0gICAgICAgIHNlbGYuX2lyY19ib3QucHJv
Y2Vzc19wZW5kaW5nX21lc3NhZ2VzKCkKLQotICAgICAgICBfbG9nLmluZm8oJ0xhc3QgU1ZOIHJl
dmlzaW9uOiAlZCcgJSBzZWxmLl9sYXN0X3N2bl9yZXZpc2lvbikKLQotICAgICAgICBjb3VudCA9
IDAKLSAgICAgICAgd2hpbGUgY291bnQgPCBzZWxmLl9tYXhpbXVtX251bWJlcl9vZl9yZXZpc2lv
bnNfdG9fYXZvaWRfc3BhbW1pbmdfaXJjOgotICAgICAgICAgICAgbmV3X3JldmlzaW9uID0gc2Vs
Zi5fbGFzdF9zdm5fcmV2aXNpb24gKyAxCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAg
ICAgY29tbWl0X2xvZyA9IHNlbGYuX3Rvb2wuZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsnc3ZuJywg
J2xvZycsICdodHRwczovL3N2bi53ZWJraXQub3JnL3JlcG9zaXRvcnkvd2Via2l0L3RydW5rJywg
Jy0tbm9uLWludGVyYWN0aXZlJywgJy0tcmV2aXNpb24nLAotICAgICAgICAgICAgICAgICAgICBz
ZWxmLl90b29sLnNjbSgpLnN0cmlwX3JfZnJvbV9zdm5fcmV2aXNpb24obmV3X3JldmlzaW9uKV0p
Ci0gICAgICAgICAgICBleGNlcHQgU2NyaXB0RXJyb3I6Ci0gICAgICAgICAgICAgICAgYnJlYWsK
LQotICAgICAgICAgICAgc2VsZi5fbGFzdF9zdm5fcmV2aXNpb24gPSBuZXdfcmV2aXNpb24KLSAg
ICAgICAgICAgIGlmIHNlbGYuX2lzX2VtcHR5X2xvZyhjb21taXRfbG9nKToKLSAgICAgICAgICAg
ICAgICBjb250aW51ZQotCi0gICAgICAgICAgICBjb3VudCArPSAxCi0gICAgICAgICAgICBfbG9n
LmluZm8oJ0ZvdW5kIHJldmlzaW9uICVkJyAlIG5ld19yZXZpc2lvbikKLSAgICAgICAgICAgIHNl
bGYuX3Rvb2wuaXJjKCkucG9zdChzZWxmLl9zdW1tYXJpemVfY29tbWl0X2xvZyhjb21taXRfbG9n
KS5lbmNvZGUoJ3V0Zi04JykpCi0KLSAgICBkZWYgX2lzX2VtcHR5X2xvZyhzZWxmLCBjb21taXRf
bG9nKToKLSAgICAgICAgcmV0dXJuIHJlLm1hdGNoKHInXlwtKyQnLCBjb21taXRfbG9nKQotCi0g
ICAgZGVmIHByb2Nlc3Nfd29ya19pdGVtKHNlbGYsIGZhaWx1cmVfbWFwKToKLSAgICAgICAgcmV0
dXJuIFRydWUKLQotICAgIF9wYXRjaF9ieV9yZWdleCA9IHJlLmNvbXBpbGUocideUGF0Y2hccyti
eVxzKyg/UDxhdXRob3I+Lis/KVxzK29uKFxzK1xkezR9LVxkezJ9LVxkezJ9KT9cbj8nLCByZS5N
VUxUSUxJTkUgfCByZS5JR05PUkVDQVNFKQotICAgIF9yZXZlcnRfcmVnZXggPSByZS5jb21waWxl
KHInKHJvbGxpbmcgb3V0fHJldmVydGluZykgKD9QPHJldmlzaW9ucz5yP1xkKygoLFxzKnwsP1xz
KmFuZFxzKyk/cj9cZCspKilcLj9ccyonLCByZS5NVUxUSUxJTkUgfCByZS5JR05PUkVDQVNFKQot
ICAgIF9yZXF1ZXN0ZWRfYnlfcmVnZXggPSByZS5jb21waWxlKHInXlwiPyg/UDxyZWFzb24+Lis/
KVwiPyBcKFJlcXVlc3RlZFxzK2J5XHMrKD9QPGF1dGhvcj4uKz8pXHMrb25ccysjd2Via2l0XClc
LicsIHJlLk1VTFRJTElORSB8IHJlLklHTk9SRUNBU0UpCi0gICAgX2J1Z3ppbGxhX3VybF9yZWdl
eCA9IHJlLmNvbXBpbGUocidodHRwKHM/KTovL2J1Z3NcLndlYmtpdFwub3JnL3Nob3dfYnVnXC5j
Z2lcP2lkPSg/UDxpZD5cZCspJywgcmUuTVVMVElMSU5FKQotICAgIF90cmFjX3VybF9yZWdleCA9
IHJlLmNvbXBpbGUocidodHRwKHM/KTovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvKD9QPHJl
dmlzaW9uPlxkKyknLCByZS5NVUxUSUxJTkUpCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYg
X3N1bW1hcml6ZV9jb21taXRfbG9nKHNlbGYsIGNvbW1pdF9sb2csIGNvbW1pdHRlcl9saXN0PUNv
bW1pdHRlckxpc3QoKSk6Ci0gICAgICAgIGZvciBjb250cmlidXRvciBpbiBjb21taXR0ZXJfbGlz
dC5jb250cmlidXRvcnMoKToKLSAgICAgICAgICAgIGlmIG5vdCBjb250cmlidXRvci5pcmNfbmlj
a25hbWVzOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBuYW1lX3dpdGhf
bmljayA9ICIlcyAoJXMpIiAlIChjb250cmlidXRvci5mdWxsX25hbWUsIGNvbnRyaWJ1dG9yLmly
Y19uaWNrbmFtZXNbMF0pCi0gICAgICAgICAgICBpZiBjb250cmlidXRvci5mdWxsX25hbWUgaW4g
Y29tbWl0X2xvZzoKLSAgICAgICAgICAgICAgICBjb21taXRfbG9nID0gY29tbWl0X2xvZy5yZXBs
YWNlKGNvbnRyaWJ1dG9yLmZ1bGxfbmFtZSwgbmFtZV93aXRoX25pY2spCi0gICAgICAgICAgICAg
ICAgZm9yIGVtYWlsIGluIGNvbnRyaWJ1dG9yLmVtYWlsczoKLSAgICAgICAgICAgICAgICAgICAg
Y29tbWl0X2xvZyA9IGNvbW1pdF9sb2cucmVwbGFjZSgnIDwnICsgZW1haWwgKyAnPicsICcnKQot
ICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBmb3IgZW1haWwgaW4gY29udHJpYnV0
b3IuZW1haWxzOgotICAgICAgICAgICAgICAgICAgICBjb21taXRfbG9nID0gY29tbWl0X2xvZy5y
ZXBsYWNlKCcgJXMgJyAlIGVtYWlsLCAnICVzICcgJSBuYW1lX3dpdGhfbmljaykKLQotICAgICAg
ICBwYXRjaF9ieSA9IHNlbGYuX3BhdGNoX2J5X3JlZ2V4LnNlYXJjaChjb21taXRfbG9nKQotICAg
ICAgICBjb21taXRfbG9nID0gc2VsZi5fcGF0Y2hfYnlfcmVnZXguc3ViKCcnLCBjb21taXRfbG9n
LCBjb3VudD0xKQotCi0gICAgICAgIHJldmVydCA9IHNlbGYuX3JldmVydF9yZWdleC5zZWFyY2go
Y29tbWl0X2xvZykKLSAgICAgICAgY29tbWl0X2xvZyA9IHNlbGYuX3JldmVydF9yZWdleC5zdWIo
JycsIGNvbW1pdF9sb2csIGNvdW50PTEpCi0KLSAgICAgICAgcmVxdWVzdGVkX2J5ID0gc2VsZi5f
cmVxdWVzdGVkX2J5X3JlZ2V4LnNlYXJjaChjb21taXRfbG9nKQotCi0gICAgICAgIGNvbW1pdF9s
b2cgPSBzZWxmLl9idWd6aWxsYV91cmxfcmVnZXguc3ViKHInaHR0cHM6Ly93ZWJraXQub3JnL2Iv
XGc8aWQ+JywgY29tbWl0X2xvZykKLSAgICAgICAgY29tbWl0X2xvZyA9IHNlbGYuX3RyYWNfdXJs
X3JlZ2V4LnN1YihyJ2h0dHBzOi8vdHJhYy53ZWJraXQub3JnL3JcZzxyZXZpc2lvbj4nLCBjb21t
aXRfbG9nKQotCi0gICAgICAgIGxpbmVzID0gY29tbWl0X2xvZy5zcGxpdCgnXG4nKVsxOi0yXSAg
IyBJZ25vcmUgbGluZXMgd2l0aCAtLS0tLS0tLS0tLgotCi0gICAgICAgIGZpcnN0bGluZSA9IHJl
Lm1hdGNoKHInXig/UDxyZXZpc2lvbj5yXGQrKSBcfCAoP1A8ZW1haWw+W15cfF0rKSBcfCAoP1A8
dGltZXN0YW1wPltefF0rKSBcfCBbXlxuXSsnLCBsaW5lc1swXSkKLSAgICAgICAgYXNzZXJ0IGZp
cnN0bGluZQotCi0gICAgICAgIGF1dGhvciA9IGZpcnN0bGluZS5ncm91cCgnZW1haWwnKQotICAg
ICAgICBpZiBwYXRjaF9ieToKLSAgICAgICAgICAgIGF1dGhvciA9IHBhdGNoX2J5Lmdyb3VwKCdh
dXRob3InKQotCi0gICAgICAgIGxpbmtpZmllZF9yZXZpc2lvbiA9ICdodHRwczovL3RyYWMud2Vi
a2l0Lm9yZy8lcycgJSBmaXJzdGxpbmUuZ3JvdXAoJ3JldmlzaW9uJykKLSAgICAgICAgbGluZXNb
MF0gPSAnJXMgYnkgJXMnICUgKGxpbmtpZmllZF9yZXZpc2lvbiwgYXV0aG9yKQotCi0gICAgICAg
IGlmIHJldmVydDoKLSAgICAgICAgICAgIGlmIHJlcXVlc3RlZF9ieToKLSAgICAgICAgICAgICAg
ICBhdXRob3IgPSByZXF1ZXN0ZWRfYnkuZ3JvdXAoJ2F1dGhvcicpCi0gICAgICAgICAgICAgICAg
Y29udHJpYnV0b3IgPSBjb21taXR0ZXJfbGlzdC5jb250cmlidXRvcl9ieV9pcmNfbmlja25hbWUo
YXV0aG9yKQotICAgICAgICAgICAgICAgIGlmIGNvbnRyaWJ1dG9yOgotICAgICAgICAgICAgICAg
ICAgICBhdXRob3IgPSAiJXMgKCVzKSIgJSAoY29udHJpYnV0b3IuZnVsbF9uYW1lLCBjb250cmli
dXRvci5pcmNfbmlja25hbWVzWzBdKQotICAgICAgICAgICAgICAgIHJldHVybiAnJXMgcmV2ZXJ0
ZWQgJXMgaW4gJXMgOiAlcycgJSAoYXV0aG9yLCByZXZlcnQuZ3JvdXAoJ3JldmlzaW9ucycpLAot
ICAgICAgICAgICAgICAgICAgICBsaW5raWZpZWRfcmV2aXNpb24sIHJlcXVlc3RlZF9ieS5ncm91
cCgncmVhc29uJykpCi0gICAgICAgICAgICBsaW5lc1swXSA9ICclcyByZXZlcnRlZCAlcyBpbiAl
cycgJSAoYXV0aG9yLCByZXZlcnQuZ3JvdXAoJ3JldmlzaW9ucycpLCBsaW5raWZpZWRfcmV2aXNp
b24pCi0KLSAgICAgICAgcmV0dXJuICcgJy5qb2luKGxpc3QoZmlsdGVyKGxhbWJkYSBsaW5lOiBs
ZW4obGluZSksIGxpbmVzKSlbMDo0XSkKLQotICAgIGRlZiBoYW5kbGVfdW5leHBlY3RlZF9lcnJv
cihzZWxmLCBmYWlsdXJlX21hcCwgbWVzc2FnZSk6Ci0gICAgICAgIF9sb2cuZXJyb3IobWVzc2Fn
ZSkKLQotICAgICMgU3RlcFNlcXVlbmNlRXJyb3JIYW5kbGVyIG1ldGhvZHMKLQotICAgIEBjbGFz
c21ldGhvZAotICAgIGRlZiBoYW5kbGVfc2NyaXB0X2Vycm9yKGNscywgdG9vbCwgc3RhdGUsIHNj
cmlwdF9lcnJvcik6Ci0gICAgICAgICMgSWRlYWxseSB3ZSB3b3VsZCBwb3N0IHNvbWUgaW5mb3Jt
YXRpb24gdG8gSVJDIGFib3V0IHdoYXQgd2VudCB3cm9uZwotICAgICAgICAjIGhlcmUsIGJ1dCB3
ZSBkb24ndCBoYXZlIHRoZSBJUkMgcGFzc3dvcmQgaW4gdGhlIGNoaWxkIHByb2Nlc3MuCi0gICAg
ICAgIHBhc3MKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9uZXdj
b21taXRib3RfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS90b29sL2NvbW1hbmRzL25ld2NvbW1pdGJvdF91bml0dGVzdC5weQkocmV2aXNpb24gMjY5OTgw
KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL25ld2NvbW1pdGJvdF91
bml0dGVzdC5weQkobm9uZXhpc3RlbnQpCkBAIC0xLDE2NyArMCwwIEBACi0jIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0
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
Ci1pbXBvcnQgdW5pdHRlc3QKLQotZnJvbSB3ZWJraXRweS50b29sLmNvbW1hbmRzLm5ld2NvbW1p
dGJvdCBpbXBvcnQgTmV3Q29tbWl0Qm90Ci0KLQotY2xhc3MgTmV3Q29tbWl0Qm90VGVzdCh1bml0
dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHRlc3Rfc3VtbWFyaXplX2NvbW1pdF9sb2dfYmFzaWMo
c2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTmV3Q29tbWl0Qm90Ll9zdW1tYXJpemVf
Y29tbWl0X2xvZygiIiItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXIxNDMxMDYgfCBqb2NoZW5AY2hyb21pdW0u
b3JnIHwgMjAxMy0wMi0xNiAxMDoyNzowNyAtMDgwMCAoU2F0LCAxNiBGZWIgMjAxMykgfCAxMCBs
aW5lcwotCi1bY2hyb21pdW1dIGluaXRpYWxpemUgYWxsIHZhcmlhYmxlcyBvZiBUZXN0UnVubmVy
IGNsYXNzZXMKLWh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTAwMTMK
LQotUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KLQotKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0UnVubmVyL3NyYy9UZXN0SW50ZXJmYWNlcy5jcHA6Ci0oV2ViVGVzdFJ1bm5lcjo6VGVzdElu
dGVyZmFjZXM6OlRlc3RJbnRlcmZhY2VzKToKLSogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVz
dFJ1bm5lci9zcmMvVGVzdFJ1bm5lci5jcHA6Ci0oV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcjo6
VGVzdFJ1bm5lcik6Ci0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIiIiksCi0gICAgICAgICAgICAiaHR0cHM6
Ly90cmFjLndlYmtpdC5vcmcvcjE0MzEwNiBieSBKb2NoZW4gRWlzaW5nZXIgKGpvY2hlbl9fKSBb
Y2hyb21pdW1dIGluaXRpYWxpemUgYWxsIHZhcmlhYmxlcyBvZiBUZXN0UnVubmVyIGNsYXNzZXMi
Ci0gICAgICAgICAgICAiIGh0dHBzOi8vd2Via2l0Lm9yZy9iLzExMDAxMyBSZXZpZXdlZCBieSBB
ZGFtIEJhcnRoIChhYmFydGgpLiIpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOZXdDb21t
aXRCb3QuX3N1bW1hcml6ZV9jb21taXRfbG9nKCIiIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotcjE0MDA2NiB8
IHNpbW9uLmZyYXNlckBhcHBsZS5jb20gfCAyMDEzLTAxLTE3IDE2OjEwOjMxIC0wODAwIChUaHUs
IDE3IEphbiAyMDEzKSB8IDEwIGxpbmVzCi0KLUFsbG93IFBhaW50SW5mbyB0byBjYXJyeSBhbGwg
UGFpbnRCZWhhdmlvciBmbGFncwotaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEwNjk4MAotCi1SZXZpZXdlZCBieSBCZXRoIERha2luLgotCi1JbiByMTM5OTA4IEkgbWlz
c2VkIG9uZSBpbnN0YW5jZSBvZiB0aGUgUGFpbnRJbmZvIGNvbnN0cnVjdG9yIHRoYXQgc2hvdWxk
IHRha2UgUGFpbnRCZWhhdmlvck5vcm1hbAotaW5zdGVhZCBvZiAiZmFsc2UiLgotCi0qIHJlbmRl
cmluZy9SZW5kZXJTY3JvbGxiYXJQYXJ0LmNwcDoKLShXZWJDb3JlOjpSZW5kZXJTY3JvbGxiYXJQ
YXJ0OjpwYWludEludG9SZWN0KToKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIiIiksCi0gICAgICAgICAgICAi
aHR0cHM6Ly90cmFjLndlYmtpdC5vcmcvcjE0MDA2NiBieSBTaW1vbiBGcmFzZXIgKHNtZnIpIgot
ICAgICAgICAgICAgIiBBbGxvdyBQYWludEluZm8gdG8gY2FycnkgYWxsIFBhaW50QmVoYXZpb3Ig
ZmxhZ3MgaHR0cHM6Ly93ZWJraXQub3JnL2IvMTA2OTgwIFJldmlld2VkIGJ5IEJldGggRGFraW4g
KGRldGhiYWtpbikuIikKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5ld0NvbW1pdEJvdC5f
c3VtbWFyaXplX2NvbW1pdF9sb2coIiIiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1yMjExMDg1IHwgY29tbWl0
LXF1ZXVlQHdlYmtpdC5vcmcgfCAyMDE3LTAxLTI0IDA5OjAxOjQ0IC0wODAwIChUdWUsIDI0IEph
biAyMDE3KSB8IDkgbGluZXMKLQotUmVtb3ZlIGFsd2F5cyB0cnVlIG9wZW5HTE11bHRpc2FtcGxp
bmdFbmFibGVkIHNldHRpbmcKLWh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjczNjQKLQotUGF0Y2ggYnkgSm9zZXBoIFBlY29yYXJvIDxwZWNvcmFyb0BhcHBsZS5jb20+
IG9uIDIwMTctMDEtMjQKLVJldmlld2VkIGJ5IFNhbSBXZWluaWcuCi0KLSogaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHA6Ci0oV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6Y3JlYXRlKToKLSogcGFnZS9TZXR0aW5ncy5pbjoKLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSIiIiksCi0gICAgICAgICAgICAiaHR0cHM6Ly90cmFjLndlYmtpdC5vcmcvcjIxMTA4NSBieSBK
b3NlcGggUGVjb3Jhcm8gKEpvZVBlY2spIgotICAgICAgICAgICAgIiBSZW1vdmUgYWx3YXlzIHRy
dWUgb3BlbkdMTXVsdGlzYW1wbGluZ0VuYWJsZWQgc2V0dGluZyBodHRwczovL3dlYmtpdC5vcmcv
Yi8xNjczNjQgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZyAod2VpbmlnKS4iKQotCi0gICAgZGVmIHRl
c3Rfc3VtbWFyaXplX2NvbW1pdF9sb2dfcmV2ZXJ0KHNlbGYpOgotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKE5ld0NvbW1pdEJvdC5fc3VtbWFyaXplX2NvbW1pdF9sb2coIiIiLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi1yMTQzMTA0IHwgY29tbWl0LXF1ZXVlQHdlYmtpdC5vcmcgfCAyMDEzLTAyLTE2IDA5OjA5
OjAxIC0wODAwIChTYXQsIDE2IEZlYiAyMDEzKSB8IDI3IGxpbmVzCi0KLVVucmV2aWV3ZWQsIHJl
dmVydGluZyByMTQyNzM0LgotaHR0cHM6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzE0Mjcz
NAotaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMDAxOAotCi0iVHJp
Z2dlcmVkIGNyYXNoZXMgb24gbG90cyBvZiB3ZWJzaXRlcyIgKFJlcXVlc3RlZCBieSBnZ2FyZW4K
LW9uICN3ZWJraXQpLgotCi1QYXRjaCBieSBTaGVyaWZmIEJvdCA8d2Via2l0LnJldmlldy5ib3RA
Z21haWwuY29tPiBvbiAyMDEzLTAyLTE2Ci0KLVNvdXJjZS9XZWJDb3JlOgotCi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0iIiIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJHZW9mZnJleSBHYXJlbiAoZ2dh
cmVuKSByZXZlcnRlZCByMTQyNzM0IGluIGh0dHBzOi8vdHJhYy53ZWJraXQub3JnL3IxNDMxMDQg
OiBUcmlnZ2VyZWQgY3Jhc2hlcyBvbiBsb3RzIG9mIHdlYnNpdGVzIikKLQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKE5ld0NvbW1pdEJvdC5fc3VtbWFyaXplX2NvbW1pdF9sb2coIiIiLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi1yMTM5ODg0IHwga292QHdlYmtpdC5vcmcgfCAyMDEzLTAxLTE2IDA4OjI2OjEw
IC0wODAwIChXZWQsIDE2IEphbiAyMDEzKSB8IDIzIGxpbmVzCi0KLVtHU3RyZWFtZXJdW1NvdXBd
IExldCBHU3RyZWFtZXIgcHJvdmlkZSB0aGUgYnVmZmVyIGRhdGEgaXMgZG93bmxvYWRlZCB0bywg
dG8gYXZvaWQgY29weWluZwotaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEwNTU1MgotCi1SZXZlcnRpbmcgMTM5ODc3LiBJdCBtYWRlIGEgY291cGxlIG9mIEFQSSB0ZXN0
cyBmYWlsLgotCi0qIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJWZXJzaW9u
aW5nLmNwcDoKLSogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lclZlcnNpb25p
bmcuaDoKLSogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJl
YW1lci5jcHA6Ci0oU3RyZWFtaW5nQ2xpZW50KToKLShfV2ViS2l0V2ViU3JjUHJpdmF0ZSk6Ci0K
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSIiIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIkd1c3Rhdm8g
Tm9yb25oYSBTaWx2YSAoa292KSByZXZlcnRlZCAxMzk4NzcgaW4gaHR0cHM6Ly90cmFjLndlYmtp
dC5vcmcvcjEzOTg4NCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAiIFtHU3RyZWFtZXJdW1Nv
dXBdIExldCBHU3RyZWFtZXIgcHJvdmlkZSB0aGUgYnVmZmVyIGRhdGEgaXMgZG93bmxvYWRlZCB0
bywgdG8gYXZvaWQgY29weWluZyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAiIGh0dHBzOi8v
d2Via2l0Lm9yZy9iLzEwNTU1MiBJdCBtYWRlIGEgY291cGxlIG9mIEFQSSB0ZXN0cyBmYWlsLiIp
Ci0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOZXdDb21taXRCb3QuX3N1bW1hcml6ZV9jb21t
aXRfbG9nKCIiIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotcjEzNTQ4NyB8IGNvbW1pdC1xdWV1ZUB3ZWJraXQu
b3JnIHwgMjAxMi0xMS0yMiAwMDowOToyNSAtMDgwMCAoVGh1LCAyMiBOb3YgMjAxMikgfCA1MiBs
aW5lcwotCi1VbnJldmlld2VkLCByZXZlcnRpbmcgcjEzNDkyNyBhbmQgcjEzNDk0NC4KLWh0dHBz
Oi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8xMzQ5MjcKLWh0dHBzOi8vdHJhYy53ZWJraXQu
b3JnL2NoYW5nZXNldC8xMzQ5NDQKLWh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMDMwMjgKLQotUmV2ZXJ0aW5nIHRoZSByZXZlcnRzIGFmdGVyIG1lcmdpbmcuIChSZXF1
ZXN0ZWQgYnkgdnNldmlrIG9uCi0jd2Via2l0KS4KLQotUGF0Y2ggYnkgU2hlcmlmZiBCb3QgPHdl
YmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4gb24gMjAxMi0xMS0yMgotCi0qIEVuZ2xpc2gubHBy
b2ovbG9jYWxpemVkU3RyaW5ncy5qczoKLSogV2ViQ29yZS5neXBpOgotKiBXZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvajoKLSogaW5zcGVjdG9yL2NvbXBpbGUtZnJvbnQtZW5kLnB5OgotKiBp
bnNwZWN0b3IvZnJvbnQtZW5kL0FkdmFuY2VkU2VhcmNoQ29udHJvbGxlci5qczoKLSogaW5zcGVj
dG9yL2Zyb250LWVuZC9DYWxsU3RhY2tTaWRlYmFyUGFuZS5qczoKLQotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IiIiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiVnNldm9sb2QgVmxhc292ICh2c2V2aWsp
IHJldmVydGVkIHIxMzQ5MjcgYW5kIHIxMzQ5NDQgaW4gaHR0cHM6Ly90cmFjLndlYmtpdC5vcmcv
cjEzNTQ4NyA6IgotICAgICAgICAgICAgICAgICAgICAgICAgICIgUmV2ZXJ0aW5nIHRoZSByZXZl
cnRzIGFmdGVyIG1lcmdpbmcuIikKLQotICAgICMgTWlndWVsIDxtYWdvbWV6QGlnYWxpYS5jb20+
IGlzIG5vdCB0byBiZSBjb25mdXNlZCB3aXRoIEFuZHJlcyA8YWdvbWV6QGlnYWxpYS5jb20+Lgot
ICAgIGRlZiB0ZXN0X2VtYWlsX3N1YnN0cmluZ19wcm9ibGVtKHNlbGYpOgotICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKE5ld0NvbW1pdEJvdC5fc3VtbWFyaXplX2NvbW1pdF9sb2coIiIiLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi1yMjExMDg0IHwgbWFnb21lekBpZ2FsaWEuY29tIHwgMjAxNy0wMS0yNCAxMDoy
NTozMSAtMDYwMCAoVHVlLCAyNCBKYW4gMjAxNykgfCAxMyBsaW5lcwotCi1bR1RLXSBEbyBub3Qg
cGFpbnQgbm9uIGNvbXBvc2l0ZWQgY29udGVudCBpbnRvIHRoZSB3aW5kb3cgd2hlbiB1c2luZyB0
aGUgdGhyZWFkZWQgY29tcG9zaXRvcgotaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NzM2NwotCi1SZXZpZXdlZCBieSBDYXJsb3MgR2FyY2lhIENhbXBvcy4KLQotV2hl
biB1c2luZyB0aGUgdGhyZWFkZWQgY29tcG9zaXRvciB3ZSBuZWVkIHRvIHNlbmQgdGhlIG5vbiBj
b21wb3NpdGVkIGNvbnRlbnQgZm9yIGNvbXBvc2l0aW5nIGFzIHdlbGwsCi1ub3QgcGFpbnRpbmcg
aXQgZGlyZWN0bHkgaW50byB0aGUgd2luZG93LgotCi1ObyBuZXcgdGVzdHMuCi0KLSogcmVuZGVy
aW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6Ci0oV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5n
OjpwYWludHNJbnRvV2luZG93KToKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiIiKSwKLSAgICAgICAgICAg
ICJodHRwczovL3RyYWMud2Via2l0Lm9yZy9yMjExMDg0IGJ5IE1pZ3VlbCBHb21leiAobWFnb21l
eikgW0dUS10gRG8gbm90IHBhaW50IG5vbiBjb21wb3NpdGVkIGNvbnRlbnQgaW50byB0aGUgd2lu
ZG93IHdoZW4gdXNpbmcgdGhlIHRocmVhZGVkIGNvbXBvc2l0b3IiCi0gICAgICAgICAgICAiIGh0
dHBzOi8vd2Via2l0Lm9yZy9iLzE2NzM2NyBSZXZpZXdlZCBieSBDYXJsb3MgR2FyY2lhIENhbXBv
cyAoS2FMKS4iKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3Bl
cmZhbGl6ZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2Nv
bW1hbmRzL3BlcmZhbGl6ZXIucHkJKHJldmlzaW9uIDI2OTk4MCkKKysrIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvdG9vbC9jb21tYW5kcy9wZXJmYWxpemVyLnB5CShub25leGlzdGVudCkKQEAgLTEs
MjExICswLDAgQEAKLSMgQ29weXJpZ2h0IChjKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMg
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBk
aXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0j
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0j
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1pbXBvcnQgbG9nZ2luZwotCi1mcm9tIHdl
YmtpdHB5LnRvb2wuYm90LmlyY19jb21tYW5kIGltcG9ydCBJUkNDb21tYW5kCi1mcm9tIHdlYmtp
dHB5LnRvb2wuYm90LmlyY19jb21tYW5kIGltcG9ydCBIZWxwCi1mcm9tIHdlYmtpdHB5LnRvb2wu
Ym90LmlyY19jb21tYW5kIGltcG9ydCBIaQotZnJvbSB3ZWJraXRweS50b29sLmJvdC5pcmNfY29t
bWFuZCBpbXBvcnQgUmVzdGFydAotZnJvbSB3ZWJraXRweS50b29sLmJvdC5pcmNib3QgaW1wb3J0
IElSQ0JvdAotZnJvbSB3ZWJraXRweS50b29sLmJvdC5wYXRjaGFuYWx5c2lzdGFzayBpbXBvcnQg
UGF0Y2hBbmFseXNpc1Rhc2ssIFBhdGNoQW5hbHlzaXNUYXNrRGVsZWdhdGUsIFVuYWJsZVRvQXBw
bHlQYXRjaAotZnJvbSB3ZWJraXRweS50b29sLmJvdC5zaGVyaWZmIGltcG9ydCBTaGVyaWZmCi1m
cm9tIHdlYmtpdHB5LnRvb2wuY29tbWFuZHMucXVldWVzIGltcG9ydCBBYnN0cmFjdFF1ZXVlCi1m
cm9tIHdlYmtpdHB5LnRvb2wuY29tbWFuZHMuc3RlcHNlcXVlbmNlIGltcG9ydCBTdGVwU2VxdWVu
Y2VFcnJvckhhbmRsZXIKLQotX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQotCi0K
LWNsYXNzIFBlcmZhbGl6ZXJUYXNrKFBhdGNoQW5hbHlzaXNUYXNrKToKLSAgICBkZWYgX19pbml0
X18oc2VsZiwgdG9vbCwgcGF0Y2gsIGxvZ2dlcik6Ci0gICAgICAgIFBhdGNoQW5hbHlzaXNUYXNr
Ll9faW5pdF9fKHNlbGYsIHNlbGYsIHBhdGNoKQotICAgICAgICBzZWxmLl9wb3J0ID0gdG9vbC5w
b3J0X2ZhY3RvcnkuZ2V0KCkKLSAgICAgICAgc2VsZi5fdG9vbCA9IHRvb2wKLSAgICAgICAgc2Vs
Zi5fbG9nZ2VyID0gbG9nZ2VyCi0KLSAgICBkZWYgX2NvcHlfYnVpbGRfcHJvZHVjdF93aXRob3V0
X3BhdGNoKHNlbGYpOgotICAgICAgICBmaWxlc3lzdGVtID0gc2VsZi5fdG9vbC5maWxlc3lzdGVt
Ci0gICAgICAgIGNvbmZpZ3VyYXRpb24gPSBmaWxlc3lzdGVtLmJhc2VuYW1lKHNlbGYuX3BvcnQu
X2J1aWxkX3BhdGgoKSkKLSAgICAgICAgc2VsZi5fYnVpbGRfZGlyZWN0b3J5ID0gZmlsZXN5c3Rl
bS5kaXJuYW1lKHNlbGYuX3BvcnQuX2J1aWxkX3BhdGgoKSkKLSAgICAgICAgc2VsZi5fYnVpbGRf
ZGlyZWN0b3J5X3dpdGhvdXRfcGF0Y2ggPSBzZWxmLl9idWlsZF9kaXJlY3RvcnkgKyAnV2l0aG91
dFBhdGNoJwotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGZpbGVzeXN0ZW0ucm10cmVlKHNl
bGYuX2J1aWxkX2RpcmVjdG9yeV93aXRob3V0X3BhdGNoKQotICAgICAgICAgICAgZmlsZXN5c3Rl
bS5jb3B5dHJlZShmaWxlc3lzdGVtLmpvaW4oc2VsZi5fYnVpbGRfZGlyZWN0b3J5LCBjb25maWd1
cmF0aW9uKSwKLSAgICAgICAgICAgICAgICBmaWxlc3lzdGVtLmpvaW4oc2VsZi5fYnVpbGRfZGly
ZWN0b3J5X3dpdGhvdXRfcGF0Y2gsIGNvbmZpZ3VyYXRpb24pKQotICAgICAgICAgICAgcmV0dXJu
IFRydWUKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICBk
ZWYgdmFsaWRhdGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBUcnVlCi0KLSAgICBkZWYgcnVuKHNl
bGYpOgotICAgICAgICBpZiBub3Qgc2VsZi5fcGF0Y2guY29tbWl0dGVyKCkgYW5kIG5vdCBzZWxm
Ll9wYXRjaC5hdHRhY2hlcigpLmNhbl9jb21taXQ6Ci0gICAgICAgICAgICBzZWxmLl9sb2dnZXIo
J1RoZSBwYXRjaCAlZCBpcyBub3QgYXV0aG9yaXplZCBieSBhIGNvbW1taXR0ZXInICUgc2VsZi5f
cGF0Y2guaWQoKSkKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgICAgIHNlbGYuX2xv
Z2dlcignUHJlcGFyaW5nIHRvIHJ1biBwZXJmb3JtYW5jZSB0ZXN0cyBmb3IgdGhlIGF0dGFjaG1l
bnQgJWQuLi4nICUgc2VsZi5fcGF0Y2guaWQoKSkKLSAgICAgICAgaWYgbm90IHNlbGYuX2NsZWFu
KCkgb3Igbm90IHNlbGYuX3VwZGF0ZSgpOgotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAg
ICAgICAgaGVhZF9yZXZpc2lvbiA9IHNlbGYuX3Rvb2wuc2NtKCkuaGVhZF9zdm5fcmV2aXNpb24o
KQotCi0gICAgICAgIHNlbGYuX2xvZ2dlcignQnVpbGRpbmcgV2ViS2l0IGF0IHIlcyB3aXRob3V0
IHRoZSBwYXRjaCcgJSBoZWFkX3JldmlzaW9uKQotICAgICAgICBpZiBub3Qgc2VsZi5fYnVpbGRf
d2l0aG91dF9wYXRjaCgpOgotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICAgICAgaWYg
bm90IHNlbGYuX3BvcnQuY2hlY2tfYnVpbGQoKToKLSAgICAgICAgICAgIHNlbGYuX2xvZ2dlcign
RmFpbGVkIHRvIGJ1aWxkIER1bXBSZW5kZXJUcmVlLicpCi0gICAgICAgICAgICByZXR1cm4gRmFs
c2UKLQotICAgICAgICBpZiBub3Qgc2VsZi5fY29weV9idWlsZF9wcm9kdWN0X3dpdGhvdXRfcGF0
Y2goKToKLSAgICAgICAgICAgIHNlbGYuX2xvZ2dlcignRmFpbGVkIHRvIGNvcHkgdGhlIGJ1aWxk
IHByb2R1Y3QgZnJvbSAlcyB0byAlcycgJSAoc2VsZi5fYnVpbGRfZGlyZWN0b3J5LCBzZWxmLl9i
dWlsZF9kaXJlY3Rvcnlfd2l0aG91dF9wYXRjaCkpCi0gICAgICAgICAgICByZXR1cm4gRmFsc2UK
LQotICAgICAgICBzZWxmLl9sb2dnZXIoJ0J1aWxkaW5nIFdlYktpdCBhdCByJXMgd2l0aCB0aGUg
cGF0Y2gnICUgaGVhZF9yZXZpc2lvbikKLSAgICAgICAgaWYgbm90IHNlbGYuX2FwcGx5KCkgb3Ig
bm90IHNlbGYuX2J1aWxkKCk6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgICAgICBp
ZiBub3Qgc2VsZi5fcG9ydC5jaGVja19idWlsZCgpOgotICAgICAgICAgICAgc2VsZi5fbG9nZ2Vy
KCdGYWlsZWQgdG8gYnVpbGQgRHVtcFJlbmRlclRyZWUuJykKLSAgICAgICAgICAgIHJldHVybiBG
YWxzZQotCi0gICAgICAgIGZpbGVzeXN0ZW0gPSBzZWxmLl90b29sLmZpbGVzeXN0ZW0KLSAgICAg
ICAgaWYgZmlsZXN5c3RlbS5leGlzdHMoc2VsZi5fanNvbl9wYXRoKCkpOgotICAgICAgICAgICAg
ZmlsZXN5c3RlbS5yZW1vdmUoc2VsZi5fanNvbl9wYXRoKCkpCi0KLSAgICAgICAgc2VsZi5fbG9n
Z2VyKCJSdW5uaW5nIHBlcmZvcm1hbmNlIHRlc3RzLi4uIikKLSAgICAgICAgaWYgc2VsZi5fcnVu
X3BlcmZfdGVzdChzZWxmLl9idWlsZF9kaXJlY3Rvcnlfd2l0aG91dF9wYXRjaCwgJ3dpdGhvdXQg
JWQnICUgc2VsZi5fcGF0Y2guaWQoKSkgPCAwOgotICAgICAgICAgICAgc2VsZi5fbG9nZ2VyKCdG
YWlsZWQgdG8gcnVuIHBlcmZvcm1hbmNlIHRlc3RzIHdpdGhvdXQgdGhlIHBhdGNoLicpCi0gICAg
ICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgICAgICBpZiBzZWxmLl9ydW5fcGVyZl90ZXN0KHNl
bGYuX2J1aWxkX2RpcmVjdG9yeSwgJ3dpdGggJWQnICUgc2VsZi5fcGF0Y2guaWQoKSkgPCAwOgot
ICAgICAgICAgICAgc2VsZi5fbG9nZ2VyKCdGYWlsZWQgdG8gcnVuIHBlcmZvcm1hbmNlIHRlc3Rz
IHdpdGggdGhlIHBhdGNoLicpCi0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgICAgICBp
ZiBub3QgZmlsZXN5c3RlbS5leGlzdHMoc2VsZi5fcmVzdWx0c19wYWdlX3BhdGgoKSk6Ci0gICAg
ICAgICAgICBzZWxmLl9sb2dnZXIoJ0ZhaWxlZCB0byBnZW5lcmF0ZSB0aGUgcmVzdWx0cyBwYWdl
LicpCi0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgICAgICByZXN1bHRzX3BhZ2UgPSBm
aWxlc3lzdGVtLnJlYWRfdGV4dF9maWxlKHNlbGYuX3Jlc3VsdHNfcGFnZV9wYXRoKCkpCi0gICAg
ICAgIHNlbGYuX3Rvb2wuYnVncy5hZGRfYXR0YWNobWVudF90b19idWcoc2VsZi5fcGF0Y2guYnVn
X2lkKCksIHJlc3VsdHNfcGFnZSwKLSAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJQZXJmb3JtYW5j
ZSB0ZXN0cyByZXN1bHRzIGZvciAlZCIgJSBzZWxmLl9wYXRjaC5pZCgpLCBtaW1ldHlwZT0ndGV4
dC9odG1sJykKLQotICAgICAgICBzZWxmLl9sb2dnZXIoIlVwbG9hZGVkIHRoZSByZXN1bHRzIG9u
IHRoZSBidWcgJWQiICUgc2VsZi5fcGF0Y2guYnVnX2lkKCkpCi0gICAgICAgIHJldHVybiBUcnVl
Ci0KLSAgICBkZWYgcGFyZW50X2NvbW1hbmQoc2VsZik6Ci0gICAgICAgIHJldHVybiAicGVyZmFs
aXplciIKLQotICAgIGRlZiBydW5fd2Via2l0X3BhdGNoKHNlbGYsIGFyZ3MpOgotICAgICAgICB3
ZWJraXRfcGF0Y2hfYXJncyA9IFtzZWxmLl90b29sLnBhdGgoKV0KLSAgICAgICAgd2Via2l0X3Bh
dGNoX2FyZ3MuZXh0ZW5kKGFyZ3MpCi0gICAgICAgIHJldHVybiBzZWxmLl90b29sLmV4ZWN1dGl2
ZS5ydW5fYW5kX3Rocm93X2lmX2ZhaWwod2Via2l0X3BhdGNoX2FyZ3MsIGN3ZD1zZWxmLl90b29s
LnNjbSgpLmNoZWNrb3V0X3Jvb3QpCi0KLSAgICBkZWYgX2pzb25fcGF0aChzZWxmKToKLSAgICAg
ICAgcmV0dXJuIHNlbGYuX3Rvb2wuZmlsZXN5c3RlbS5qb2luKHNlbGYuX2J1aWxkX2RpcmVjdG9y
eSwgJ1BlcmZvcm1hbmNlVGVzdFJlc3VsdHMuanNvbicpCi0KLSAgICBkZWYgX3Jlc3VsdHNfcGFn
ZV9wYXRoKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fdG9vbC5maWxlc3lzdGVtLmpvaW4o
c2VsZi5fYnVpbGRfZGlyZWN0b3J5LCAnUGVyZm9ybWFuY2VUZXN0UmVzdWx0cy5odG1sJykKLQot
ICAgIGRlZiBfcnVuX3BlcmZfdGVzdChzZWxmLCBidWlsZF9wYXRoLCBkZXNjcmlwdGlvbik6Ci0g
ICAgICAgIGZpbGVzeXN0ZW0gPSBzZWxmLl90b29sLmZpbGVzeXN0ZW0KLSAgICAgICAgc2NyaXB0
X3BhdGggPSBmaWxlc3lzdGVtLmpvaW4oZmlsZXN5c3RlbS5kaXJuYW1lKHNlbGYuX3Rvb2wucGF0
aCgpKSwgJ3J1bi1wZXJmLXRlc3RzJykKLSAgICAgICAgcGVyZl90ZXN0X3J1bm5lcl9hcmdzID0g
W3NjcmlwdF9wYXRoLCAnLS1uby1idWlsZCcsICctLW5vLXNob3ctcmVzdWx0cycsICctLWJ1aWxk
LWRpcmVjdG9yeScsIGJ1aWxkX3BhdGgsCi0gICAgICAgICAgICAnLS1vdXRwdXQtanNvbi1wYXRo
Jywgc2VsZi5fanNvbl9wYXRoKCksICctLWRlc2NyaXB0aW9uJywgZGVzY3JpcHRpb25dCi0gICAg
ICAgIHJldHVybiBzZWxmLl90b29sLmV4ZWN1dGl2ZS5ydW5fYW5kX3Rocm93X2lmX2ZhaWwocGVy
Zl90ZXN0X3J1bm5lcl9hcmdzLCBjd2Q9c2VsZi5fdG9vbC5zY20oKS5jaGVja291dF9yb290KQot
Ci0gICAgZGVmIHJ1bl9jb21tYW5kKHNlbGYsIGNvbW1hbmQpOgotICAgICAgICBzZWxmLnJ1bl93
ZWJraXRfcGF0Y2goY29tbWFuZCkKLQotICAgIGRlZiByZWZldGNoX3BhdGNoKHNlbGYsIHBhdGNo
KToKLSAgICAgICAgcmV0dXJuIHNlbGYuX3Rvb2wuYnVncy5mZXRjaF9hdHRhY2htZW50KHBhdGNo
LmlkKCkpCi0KLSAgICBkZWYgYnVpbGRfc3R5bGUoc2VsZik6Ci0gICAgICAgIHJldHVybiAicmVs
ZWFzZSIKLQotCi1jbGFzcyBQZXJmVGVzdChJUkNDb21tYW5kKToKLSAgICBkZWYgZXhlY3V0ZShz
ZWxmLCBuaWNrLCBhcmdzLCB0b29sLCBzaGVyaWZmKToKLSAgICAgICAgaWYgbm90IGFyZ3M6Ci0g
ICAgICAgICAgICB0b29sLmlyYygpLnBvc3QobmljayArICI6IFBsZWFzZSBzcGVjaWZ5IGFuIGF0
dGFjaG1lbnQvcGF0Y2ggaWQiKQotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgcGF0Y2hf
aWQgPSBhcmdzWzBdCi0gICAgICAgIHBhdGNoID0gdG9vbC5idWdzLmZldGNoX2F0dGFjaG1lbnQo
cGF0Y2hfaWQpCi0gICAgICAgIGlmIG5vdCBwYXRjaDoKLSAgICAgICAgICAgIHRvb2wuaXJjKCku
cG9zdChuaWNrICsgIjogQ291bGQgbm90IGZldGNoIHRoZSBwYXRjaCIpCi0gICAgICAgICAgICBy
ZXR1cm4KLQotICAgICAgICB0YXNrID0gUGVyZmFsaXplclRhc2sodG9vbCwgcGF0Y2gsIGxhbWJk
YSBtZXNzYWdlOiB0b29sLmlyYygpLnBvc3QoJyVzOiAlcycgJSAobmljaywgbWVzc2FnZSkpKQot
ICAgICAgICB0YXNrLnJ1bigpCi0KLQotY2xhc3MgUGVyZmFsaXplcihBYnN0cmFjdFF1ZXVlLCBT
dGVwU2VxdWVuY2VFcnJvckhhbmRsZXIpOgotICAgIG5hbWUgPSAicGVyZmFsaXplciIKLSAgICB3
YXRjaGVycyA9IEFic3RyYWN0UXVldWUud2F0Y2hlcnMgKyBbInJuaXdhQHdlYmtpdC5vcmciXQot
Ci0gICAgX2NvbW1hbmRzID0gewotICAgICAgICAiaGVscCI6IEhlbHAsCi0gICAgICAgICJoaSI6
IEhpLAotICAgICAgICAicmVzdGFydCI6IFJlc3RhcnQsCi0gICAgICAgICJ0ZXN0IjogUGVyZlRl
c3QsCi0gICAgfQotCi0gICAgIyBBYnN0cmFjdFF1ZXVlIG1ldGhvZHMKLQotICAgIGRlZiBiZWdp
bl93b3JrX3F1ZXVlKHNlbGYpOgotICAgICAgICBBYnN0cmFjdFF1ZXVlLmJlZ2luX3dvcmtfcXVl
dWUoc2VsZikKLSAgICAgICAgc2VsZi5fc2hlcmlmZiA9IFNoZXJpZmYoc2VsZi5fdG9vbCwgc2Vs
ZikKLSAgICAgICAgc2VsZi5faXJjX2JvdCA9IElSQ0JvdCgicGVyZmFsaXplciIsIHNlbGYuX3Rv
b2wsIHNlbGYuX3NoZXJpZmYsIHNlbGYuX2NvbW1hbmRzKQotICAgICAgICBzZWxmLl90b29sLmVu
c3VyZV9pcmNfY29ubmVjdGVkKHNlbGYuX2lyY19ib3QuaXJjX2RlbGVnYXRlKCkpCi0KLSAgICBk
ZWYgd29ya19pdGVtX2xvZ19wYXRoKHNlbGYsIGZhaWx1cmVfbWFwKToKLSAgICAgICAgcmV0dXJu
IE5vbmUKLQotICAgIGRlZiBfaXNfb2xkX2ZhaWx1cmUoc2VsZiwgcmV2aXNpb24pOgotICAgICAg
ICByZXR1cm4gRmFsc2UKLQotICAgIGRlZiBuZXh0X3dvcmtfaXRlbShzZWxmKToKLSAgICAgICAg
c2VsZi5faXJjX2JvdC5wcm9jZXNzX3BlbmRpbmdfbWVzc2FnZXMoKQotICAgICAgICByZXR1cm4K
LQotICAgIGRlZiBwcm9jZXNzX3dvcmtfaXRlbShzZWxmLCBmYWlsdXJlX21hcCk6Ci0gICAgICAg
IHJldHVybiBUcnVlCi0KLSAgICBkZWYgaGFuZGxlX3VuZXhwZWN0ZWRfZXJyb3Ioc2VsZiwgZmFp
bHVyZV9tYXAsIG1lc3NhZ2UpOgotICAgICAgICBfbG9nLmVycm9yKG1lc3NhZ2UpCi0KLSAgICAj
IFN0ZXBTZXF1ZW5jZUVycm9ySGFuZGxlciBtZXRob2RzCi0KLSAgICBAY2xhc3NtZXRob2QKLSAg
ICBkZWYgaGFuZGxlX3NjcmlwdF9lcnJvcihjbHMsIHRvb2wsIHN0YXRlLCBzY3JpcHRfZXJyb3Ip
OgotICAgICAgICAjIElkZWFsbHkgd2Ugd291bGQgcG9zdCBzb21lIGluZm9ybWF0aW9uIHRvIElS
QyBhYm91dCB3aGF0IHdlbnQgd3JvbmcKLSAgICAgICAgIyBoZXJlLCBidXQgd2UgZG9uJ3QgaGF2
ZSB0aGUgSVJDIHBhc3N3b3JkIGluIHRoZSBjaGlsZCBwcm9jZXNzLgotICAgICAgICBwYXNzCklu
ZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcGVyZmFsaXplcl91bml0
dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFu
ZHMvcGVyZmFsaXplcl91bml0dGVzdC5weQkocmV2aXNpb24gMjY5OTgwKQorKysgVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3BlcmZhbGl6ZXJfdW5pdHRlc3QucHkJKG5vbmV4
aXN0ZW50KQpAQCAtMSwxMDkgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMg
bWV0OgotIwotIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMg
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWltcG9ydCB1bml0dGVzdAot
Ci1mcm9tIHdlYmtpdHB5LmNvbW1vbi5uZXQuYnVpbGRib3QgaW1wb3J0IEJ1aWxkZXIKLWZyb20g
d2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0IFNjcmlwdEVycm9yCi1mcm9t
IHdlYmtpdHB5LnBvcnQudGVzdCBpbXBvcnQgVGVzdFBvcnQKLWZyb20gd2Via2l0cHkudG9vbC5j
b21tYW5kcy5wZXJmYWxpemVyIGltcG9ydCBQZXJmYWxpemVyVGFzawotZnJvbSB3ZWJraXRweS50
b29sLm1vY2t0b29sIGltcG9ydCBNb2NrVG9vbAotCi1mcm9tIHdlYmtpdGNvcmVweSBpbXBvcnQg
T3V0cHV0Q2FwdHVyZQotCi0KLWNsYXNzIFBlcmZhbGl6ZXJUYXNrVGVzdCh1bml0dGVzdC5UZXN0
Q2FzZSk6Ci0gICAgZGVmIF9jcmVhdGVfYW5kX3J1bl9wZXJmYWxpemVyKHNlbGYsIGNvbW1hbmRz
X3RvX2ZhaWw9W10pOgotICAgICAgICB0b29sID0gTW9ja1Rvb2woKQotICAgICAgICBwYXRjaCA9
IHRvb2wuYnVncy5mZXRjaF9hdHRhY2htZW50KDEwMDAwKQotCi0gICAgICAgIGxvZ3MgPSBbXQot
Ci0gICAgICAgIGRlZiBsb2dnZXIobWVzc2FnZSk6Ci0gICAgICAgICAgICBsb2dzLmFwcGVuZCht
ZXNzYWdlKQotCi0gICAgICAgIGRlZiBydW5fd2Via2l0X3BhdGNoKGFyZ3MpOgotICAgICAgICAg
ICAgaWYgYXJnc1swXSBpbiBjb21tYW5kc190b19mYWlsOgotICAgICAgICAgICAgICAgIHJhaXNl
IFNjcmlwdEVycm9yCi0KLSAgICAgICAgZGVmIHJ1bl9wZXJmX3Rlc3QoYnVpbGRfcGF0aCwgZGVz
Y3JpcHRpb24pOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRlc2NyaXB0aW9uID09ICd3
aXRob3V0IDEwMDAwJyBvciBkZXNjcmlwdGlvbiA9PSAnd2l0aCAxMDAwMCcpCi0gICAgICAgICAg
ICBpZiAncnVuLXBlcmYtdGVzdHMnIGluIGNvbW1hbmRzX3RvX2ZhaWw6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIC0xCi0gICAgICAgICAgICBpZiAncmVzdWx0cy1wYWdlJyBub3QgaW4gY29tbWFu
ZHNfdG9fZmFpbDoKLSAgICAgICAgICAgICAgICB0b29sLmZpbGVzeXN0ZW0ud3JpdGVfdGV4dF9m
aWxlKHRvb2wuZmlsZXN5c3RlbS5qb2luKGJ1aWxkX3BhdGgsICdQZXJmb3JtYW5jZVRlc3RSZXN1
bHRzLmh0bWwnKSwgJ3Jlc3VsdHMgcGFnZScpCi0gICAgICAgICAgICByZXR1cm4gMAotCi0gICAg
ICAgIHBlcmZhbGl6ZXIgPSBQZXJmYWxpemVyVGFzayh0b29sLCBwYXRjaCwgbG9nZ2VyKQotICAg
ICAgICBwZXJmYWxpemVyLl9wb3J0ID0gVGVzdFBvcnQodG9vbCkKLSAgICAgICAgcGVyZmFsaXpl
ci5ydW5fd2Via2l0X3BhdGNoID0gcnVuX3dlYmtpdF9wYXRjaAotICAgICAgICBwZXJmYWxpemVy
Ll9ydW5fcGVyZl90ZXN0ID0gcnVuX3BlcmZfdGVzdAotCi0gICAgICAgIHdpdGggT3V0cHV0Q2Fw
dHVyZSgpOgotICAgICAgICAgICAgaWYgY29tbWFuZHNfdG9fZmFpbDoKLSAgICAgICAgICAgICAg
ICBzZWxmLmFzc2VydEZhbHNlKHBlcmZhbGl6ZXIucnVuKCkpCi0gICAgICAgICAgICBlbHNlOgot
ICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwZXJmYWxpemVyLnJ1bigpKQotCi0gICAg
ICAgIHJldHVybiBsb2dzCi0KLSAgICBkZWYgdGVzdF9ydW4oc2VsZik6Ci0gICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoc2VsZi5fY3JlYXRlX2FuZF9ydW5fcGVyZmFsaXplcigpLCBbCi0gICAgICAg
ICAgICAnUHJlcGFyaW5nIHRvIHJ1biBwZXJmb3JtYW5jZSB0ZXN0cyBmb3IgdGhlIGF0dGFjaG1l
bnQgMTAwMDAuLi4nLAotICAgICAgICAgICAgJ0J1aWxkaW5nIFdlYktpdCBhdCByMTIzNCB3aXRo
b3V0IHRoZSBwYXRjaCcsCi0gICAgICAgICAgICAnQnVpbGRpbmcgV2ViS2l0IGF0IHIxMjM0IHdp
dGggdGhlIHBhdGNoJywKLSAgICAgICAgICAgICdSdW5uaW5nIHBlcmZvcm1hbmNlIHRlc3RzLi4u
JywKLSAgICAgICAgICAgICdVcGxvYWRlZCB0aGUgcmVzdWx0cyBvbiB0aGUgYnVnIDUwMDAwJ10p
Ci0KLSAgICBkZWYgdGVzdF9ydW5fd2l0aF9jbGVhbl9mYWlscyhzZWxmKToKLSAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChzZWxmLl9jcmVhdGVfYW5kX3J1bl9wZXJmYWxpemVyKFsnY2xlYW4nXSks
IFsKLSAgICAgICAgICAgICdQcmVwYXJpbmcgdG8gcnVuIHBlcmZvcm1hbmNlIHRlc3RzIGZvciB0
aGUgYXR0YWNobWVudCAxMDAwMC4uLiddKQotCi0gICAgZGVmIHRlc3RfcnVuX3dpdGhfdXBkYXRl
X2ZhaWxzKHNlbGYpOgotICAgICAgICBsb2dzID0gc2VsZi5fY3JlYXRlX2FuZF9ydW5fcGVyZmFs
aXplcihbJ3VwZGF0ZSddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsb2dzKSwgMSkK
LSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2dzWzBdLCAnUHJlcGFyaW5nIHRvIHJ1biBwZXJm
b3JtYW5jZSB0ZXN0cyBmb3IgdGhlIGF0dGFjaG1lbnQgMTAwMDAuLi4nKQotCi0gICAgZGVmIHRl
c3RfcnVuX3dpdGhfYnVpbGRfZmFpbHMoc2VsZik6Ci0gICAgICAgIGxvZ3MgPSBzZWxmLl9jcmVh
dGVfYW5kX3J1bl9wZXJmYWxpemVyKFsnYnVpbGQnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChsZW4obG9ncyksIDMpCi0KLSAgICBkZWYgdGVzdF9ydW5fd2l0aF9idWlsZF9mYWlscyhzZWxm
KToKLSAgICAgICAgbG9ncyA9IHNlbGYuX2NyZWF0ZV9hbmRfcnVuX3BlcmZhbGl6ZXIoWydhcHBs
eS1hdHRhY2htZW50J10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxvZ3MpLCAzKQot
Ci0gICAgZGVmIHRlc3RfcnVuX3dpdGhfcGVyZl90ZXN0X2ZhaWxzKHNlbGYpOgotICAgICAgICBs
b2dzID0gc2VsZi5fY3JlYXRlX2FuZF9ydW5fcGVyZmFsaXplcihbJ3J1bi1wZXJmLXRlc3RzJ10p
Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxvZ3MpLCA1KQotICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKGxvZ3NbLTFdLCAnRmFpbGVkIHRvIHJ1biBwZXJmb3JtYW5jZSB0ZXN0cyB3aXRo
b3V0IHRoZSBwYXRjaC4nKQotCi0gICAgZGVmIHRlc3RfcnVuX3dpdGhvdXRfcmVzdWx0c19wYWdl
KHNlbGYpOgotICAgICAgICBsb2dzID0gc2VsZi5fY3JlYXRlX2FuZF9ydW5fcGVyZmFsaXplcihb
J3Jlc3VsdHMtcGFnZSddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsb2dzKSwgNSkK
LSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2dzWy0xXSwgJ0ZhaWxlZCB0byBnZW5lcmF0ZSB0
aGUgcmVzdWx0cyBwYWdlLicpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29t
bWFuZHMvc2hlcmlmZmJvdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3Rvb2wvY29tbWFuZHMvc2hlcmlmZmJvdC5weQkocmV2aXNpb24gMjY5OTgwKQorKysgVG9vbHMv
U2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3NoZXJpZmZib3QucHkJKG5vbmV4aXN0ZW50
KQpAQCAtMSw3NiArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAwOSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6
Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotaW1wb3J0IGxvZ2dpbmcKLQot
ZnJvbSB3ZWJraXRweS50b29sLmJvdC5zaGVyaWZmIGltcG9ydCBTaGVyaWZmCi1mcm9tIHdlYmtp
dHB5LnRvb2wuYm90LmlyY19jb21tYW5kIGltcG9ydCBjb21tYW5kcyBhcyBpcmNfY29tbWFuZHMK
LWZyb20gd2Via2l0cHkudG9vbC5ib3QuaXJjYm90IGltcG9ydCBJUkNCb3QKLWZyb20gd2Via2l0
cHkudG9vbC5jb21tYW5kcy5xdWV1ZXMgaW1wb3J0IEFic3RyYWN0UXVldWUKLWZyb20gd2Via2l0
cHkudG9vbC5jb21tYW5kcy5zdGVwc2VxdWVuY2UgaW1wb3J0IFN0ZXBTZXF1ZW5jZUVycm9ySGFu
ZGxlcgotCi1fbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCi0KLQotY2xhc3MgU2hl
cmlmZkJvdChBYnN0cmFjdFF1ZXVlLCBTdGVwU2VxdWVuY2VFcnJvckhhbmRsZXIpOgotICAgIG5h
bWUgPSAid2Via2l0Ym90IgotICAgIHdhdGNoZXJzID0gQWJzdHJhY3RRdWV1ZS53YXRjaGVycyAr
IFsKLSAgICAgICAgImFiYXJ0aEB3ZWJraXQub3JnIiwKLSAgICAgICAgImVyaWNAd2Via2l0Lm9y
ZyIsCi0gICAgXQotCi0gICAgIyBBYnN0cmFjdFF1ZXVlIG1ldGhvZHMKLQotICAgIGRlZiBiZWdp
bl93b3JrX3F1ZXVlKHNlbGYpOgotICAgICAgICBzZWxmLl9zaGVyaWZmID0gU2hlcmlmZihzZWxm
Ll90b29sLCBzZWxmKQotICAgICAgICBzZWxmLl9pcmNfYm90ID0gSVJDQm90KHNlbGYubmFtZSwg
c2VsZi5fdG9vbCwgc2VsZi5fc2hlcmlmZiwgaXJjX2NvbW1hbmRzKQotICAgICAgICBzZWxmLl90
b29sLmVuc3VyZV9pcmNfY29ubmVjdGVkKHNlbGYuX2lyY19ib3QuaXJjX2RlbGVnYXRlKCkpCi0K
LSAgICBkZWYgd29ya19pdGVtX2xvZ19wYXRoKHNlbGYsIGZhaWx1cmVfbWFwKToKLSAgICAgICAg
cmV0dXJuIE5vbmUKLQotICAgIGRlZiBfaXNfb2xkX2ZhaWx1cmUoc2VsZiwgcmV2aXNpb24pOgot
ICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgIGRlZiBuZXh0X3dvcmtfaXRlbShzZWxmKToKLSAg
ICAgICAgc2VsZi5faXJjX2JvdC5wcm9jZXNzX3BlbmRpbmdfbWVzc2FnZXMoKQotICAgICAgICBy
ZXR1cm4KLQotICAgIGRlZiBwcm9jZXNzX3dvcmtfaXRlbShzZWxmLCBmYWlsdXJlX21hcCk6Ci0g
ICAgICAgIHJldHVybiBUcnVlCi0KLSAgICBkZWYgaGFuZGxlX3VuZXhwZWN0ZWRfZXJyb3Ioc2Vs
ZiwgZmFpbHVyZV9tYXAsIG1lc3NhZ2UpOgotICAgICAgICBfbG9nLmVycm9yKG1lc3NhZ2UpCi0K
LSAgICAjIFN0ZXBTZXF1ZW5jZUVycm9ySGFuZGxlciBtZXRob2RzCi0KLSAgICBAY2xhc3NtZXRo
b2QKLSAgICBkZWYgaGFuZGxlX3NjcmlwdF9lcnJvcihjbHMsIHRvb2wsIHN0YXRlLCBzY3JpcHRf
ZXJyb3IpOgotICAgICAgICAjIElkZWFsbHkgd2Ugd291bGQgcG9zdCBzb21lIGluZm9ybWF0aW9u
IHRvIElSQyBhYm91dCB3aGF0IHdlbnQgd3JvbmcKLSAgICAgICAgIyBoZXJlLCBidXQgd2UgZG9u
J3QgaGF2ZSB0aGUgSVJDIHBhc3N3b3JkIGluIHRoZSBjaGlsZCBwcm9jZXNzLgotICAgICAgICBw
YXNzCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvc2hlcmlmZmJv
dF91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wv
Y29tbWFuZHMvc2hlcmlmZmJvdF91bml0dGVzdC5weQkocmV2aXNpb24gMjY5OTgwKQorKysgVG9v
bHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3NoZXJpZmZib3RfdW5pdHRlc3QucHkJ
KG5vbmV4aXN0ZW50KQpAQCAtMSw0NyArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotIyBtZXQ6Ci0jCi0jICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0j
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0j
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotZnJvbSB3ZWJr
aXRweS50b29sLmNvbW1hbmRzLnF1ZXVlc3Rlc3QgaW1wb3J0IFF1ZXVlc1Rlc3QsIE1vY2tRdWV1
ZUVuZ2luZQotZnJvbSB3ZWJraXRweS50b29sLmNvbW1hbmRzIGltcG9ydCBTaGVyaWZmQm90Ci1m
cm9tIHdlYmtpdHB5LnRvb2wubW9ja3Rvb2wgaW1wb3J0IE1vY2tUb29sLCBNb2NrT3B0aW9ucwot
ZnJvbSB3ZWJraXRweS50b29sLmJvdC5pcmNfY29tbWFuZCBpbXBvcnQgUmV2ZXJ0Ci0KLQotY2xh
c3MgU2hlcmlmZkJvdFRlc3QoUXVldWVzVGVzdCk6Ci0gICAgZGVmIHRlc3RfY29tbWFuZF9hbGlh
c2VzKHNlbGYpOgotICAgICAgICB0b29sID0gTW9ja1Rvb2woKQotICAgICAgICBvcHRpb25zID0g
TW9ja09wdGlvbnMoKQotICAgICAgICBvcHRpb25zLmVuc3VyZV92YWx1ZSgiY29uZmlybSIsIEZh
bHNlKQotICAgICAgICBvcHRpb25zLmVuc3VyZV92YWx1ZSgic2Vjb25kc190b19zbGVlcCIsIDEy
MCkKLSAgICAgICAgc2hlcmlmZmJvdCA9IFNoZXJpZmZCb3QoKQotICAgICAgICBzaGVyaWZmYm90
LmV4ZWN1dGUob3B0aW9ucywgW10sIHRvb2wsIE1vY2tRdWV1ZUVuZ2luZSkKLSAgICAgICAgc2hl
cmlmZmJvdC5iZWdpbl93b3JrX3F1ZXVlKCkKLSAgICAgICAgaXJjX2JvdCA9IHNoZXJpZmZib3Qu
X2lyY19ib3QKLSAgICAgICAgIyBUZXN0IFJldmVydCBjb21tYW5kIGFsaWFzZXMKLSAgICAgICAg
cm9sbG91dF9jb21tYW5kLCBhcmdzID0gaXJjX2JvdC5fcGFyc2VfY29tbWFuZF9hbmRfYXJncygi
cm9sbG91dCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm9sbG91dF9jb21tYW5kLCBSZXZl
cnQpCg==
</data>
<flag name="review"
          id="431388"
          type_id="1"
          status="+"
          setter="jbedard"
    />
          </attachment>
      

    </bug>

</bugzilla>